summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/fixme/fixme.dtx
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2009-09-21 22:54:55 +0000
committerKarl Berry <karl@freefriends.org>2009-09-21 22:54:55 +0000
commitbd8c84d3086241f36de1b38eec9ca56b3672af31 (patch)
tree749a0981295e41ab909e6e5e5d3bfd08ae4aa96b /Master/texmf-dist/source/latex/fixme/fixme.dtx
parentbfbf89c340b5f574bf4a53d2334d5018bb2402ab (diff)
fixme 4.0 (21sep09)
git-svn-id: svn://tug.org/texlive/trunk@15411 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/fixme/fixme.dtx')
-rw-r--r--Master/texmf-dist/source/latex/fixme/fixme.dtx4625
1 files changed, 3683 insertions, 942 deletions
diff --git a/Master/texmf-dist/source/latex/fixme/fixme.dtx b/Master/texmf-dist/source/latex/fixme/fixme.dtx
index 86600985d1c..d30152e715f 100644
--- a/Master/texmf-dist/source/latex/fixme/fixme.dtx
+++ b/Master/texmf-dist/source/latex/fixme/fixme.dtx
@@ -1,4 +1,4 @@
-% \iffalse -*- mode: LaTeX -*-
+% \iffalse
%
% fixme.dtx --- Doc file for the FiXme package (code and documentation)
%
@@ -32,9 +32,36 @@
%
%<*driver>
\documentclass[a4paper]{ltxdoc}
+\usepackage{xspace}
+
+\usepackage{dox}[2009/09/21]
+\doxitem[idxtype=env.]{Env}{environment}{environments}
+\doxitem[idxtype=opt.]{Option}{option}{options}
+\doxitem[idxtype=cnt.]{Counter}{counter}{counters}
+\doxitem[idxtype=lang.]{Lang}{lang}{languages}
+\doxitem{Face}{face}{faces}
+\doxitem{Color}{color}{colors}
+\doxitem[idxtype={note lt.}]{Layout}{layout}{note layouts}
+\doxitem[idxtype={env. lt.}]{EnvLayout}{envlayout}{env. layouts}
+\doxitem[idxtype={target lt.}]{TargetLayout}{targetlayout}{target layouts}
+\doxitem{Theme}{theme}{themes}
+
+% #### NOTE: I don't want to \usepackage{fixme} just for getting the file
+% information. So here what I do: generate a header with only the
+% \ProvidesPackage command, and also the \fixmelogo. Then, I \input it so that
+% \GetFileInfo works. However, I need to manually set the current file name
+% and extension that would normally be set by \RequirePackage. Also, note that
+% the call to \GetFileInfo below needs to use the extension of the header,
+% that is inc instead of sty, even the file fixme.inc does not really exist.
+\makeatletter
+ \def\@currname{fixme}
+ \def\@currext{inc}
+\makeatother
+\input{header.inc}
% \OnlyDescription
-% \CodelineIndex
+\CodelineIndex
% \RecordChanges
+\setcounter{secnumdepth}{4}
\begin{document}
\DocInput{fixme.dtx}
\end{document}
@@ -43,7 +70,8 @@
% \fi
%
% \catcode`\¡=14
-% \CheckSum{880}
+% \CheckSum{1613}
+% \GetFileInfo{fixme.inc}
%% \CharacterTable
%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
@@ -60,17 +88,58 @@
%% Grave accent \` Left brace \{ Vertical bar \|
%% Right brace \} Tilde \~}
%
-% \newcommand\version{3.4}
-% \newcommand\releasedate{2009/07/16}
-% \newcommand\packagecopyright{Copyright \copyright{} 1998, 1999, 2000, 2001,
-% 2002, 2004, 2005, 2006, 2007, 2009 Didier Verna}
-% \newcommand\fixme{\textsf{FiXme}}
-% \newcommand\auctex{AUC-\TeX}
% \MakeShortVerb{\|}
-% \date\today
-% \title{\fixme{} -- a \LaTeXe{} package for inserting fixme notes
-% in your documents\thanks{This document describes \fixme{} \version,
-% release date \releasedate.}}
+%
+% \makeatletter
+% \def\ps@mystyle{
+% \def\@oddfoot{\hfil\thepage\hfil}
+% \def\@evenfoot{\hfil\thepage\hfil}
+% \def\@evenhead{\hfil\slshape\leftmark}
+% \def\@oddhead{\slshape\rightmark\hfil}}
+% \renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}{%
+% -3.25ex\@plus -1ex \@minus -.2ex}{%
+% 1.5ex \@plus .2ex}{%
+% \normalfont\normalsize\bfseries}}
+% \makeatother
+%
+% \newcommand*\DescribeBooleanOption[1]{%
+% {\let\oldpdo\PrintDescribeOption%
+% \def\PrintDescribeOption##1{\oldpdo{[no]##1}}%
+% \let\oldsoi\SpecialOptionIndex%
+% \def\SpecialOptionIndex##1{\oldsoi{##1}\oldsoi{no##1}}%
+% \DescribeOption{#1}}}
+%
+% \newenvironment{booleanoption}[1]{%
+% \let\oldpon\PrintOptionName%
+% \def\PrintOptionName##1{\oldpon{[no]##1}}%
+% \let\oldsmoi\SpecialMainOptionIndex%
+% \def\SpecialMainOptionIndex##1{\oldsmoi{##1}\oldsmoi{no##1}}%
+% \begin{option}{#1}}{%
+% \end{option}}
+%
+% ^^A Let's not depend on varioref for just that:
+% \newcommand\sectionref[1]{\ref{#1} on page \pageref{#1}}
+%
+% \newcommand\etc{\textit{etc.}\xspace}
+% \newcommand\vs{\textit{vs.}\xspace}
+% \newcommand\ie{\textit{i.e.}\xspace}
+% \newcommand\komascript{\textsc{Koma}-Script\xspace}
+% \newcommand\auctex{AUC-\TeX\xspace}
+% \newcommand\emacs{\textsf{[X]Emacs}\xspace}
+%
+% \newcommand\fx{\fixmelogo\xspace}
+% \newcommand\packagecopyright{%
+% Copyright \copyright{} 1998--2002, 2004--2007, 2009 Didier Verna}
+%
+% \pagestyle{mystyle}
+% \newcommand\fxmarkright{%
+% \markright{\hskip-.5\marginparwidth \fx \fileversion{} (\filedate)}}
+% \fxmarkright
+%
+% \date{\texttt{\fileversion{} (\filedate)}}
+% \title{\fx{} -- Collaborative annotation tool for \LaTeX\footnote{%
+% \fx homepage: %
+% \texttt{http://www.lrde.epita.fr/\~{}didier/software/latex.php\#fixme}}}
% \author{Didier Verna\\
% \texttt{mailto:didier@lrde.epita.fr}\\
% \texttt{http://www.lrde.epita.fr/\~{}didier/}}
@@ -78,316 +147,1296 @@
%
%
% \begin{abstract}
-% In the process of writing a long document, it is a common practice to
-% leave some parts unwritten or uncomplete, and come back to them later. In
-% such cases, you probably want to stick clues about which parts need to be
-% ``fixed'', where they are located, and what needs to be done. This is what
-% I call ``fixme notes''. The purpose of this package is to provide you with
-% convenient ways to insert \fixme{} notes in your documents.\par
-% The \fixme{} package is \packagecopyright{}, and distributed under the
+% \fx is a collaborative annotation tool for \LaTeX{} documents. Annotating
+% a document here refers to inserting meta-notes, that is, notes that do not
+% belong to the document itself, but rather to its development or reviewing
+% process. Such notes may involve things of different importance levels,
+% ranging from simple ``fix the spelling'' flags to critical ``this
+% paragraph is a lie'' mentions. Annotations like this should be visible
+% during the development or reviewing phase, but should normally disapear in
+% the final version of the document.
+%
+% \fx is designed to ease and automate the process of managing collaborative
+% annotations, by offering a set of predefined note levels and layouts, the
+% possibility to register multiple note authors, to reference annotations by
+% listing and indexing \etc \fx is extensible, giving you the possibility to
+% create new layouts or even complete ``themes'', and also comes with
+% support for \auctex.
+%
+% The \fx package is \packagecopyright{}, and distributed under the
% terms of the LPPL license.
% \end{abstract}
%
+% \tableofcontents
+%
+% \section{Installation}
+% \subsection{Extraction}
+% If you are building \fx from the tarball you need to execute the following
+% steps in order to extract the necessary files. \fx also requires the
+% \textsf{DoX} package (version 2.0, release date 2009/09/21 or later), to
+% build. It is not required to use the package.
+% \begin{verbatim}
+% [pdf]latex fixme.ins
+% [pdf]latex fixme.dtx
+% [pdf]latex fixme.dtx
+% makeindex -s gind fixme.idx
+% [pdf]latex fixme.dtx
+% [pdf]latex fixme.dtx
+% \end{verbatim}
+% After that, you need to install the generated documentation and style files
+% to a location where \LaTeX{} can find them.
+%
+% \subsection{TDS-compliant layout}
+% For a TDS-compliant layout, the following locations are suggested:
+% \begin{verbatim}
+% [TEXMF]/tex/latex/fixme/fixme.sty
+% [TEXMF]/tex/latex/fixme/layouts/fxlayout*.sty
+% [TEXMF]/tex/latex/fixme/layouts/env/fxenvlayout*.sty
+% [TEXMF]/tex/latex/fixme/layouts/target/fxtargetlayout*.sty
+% [TEXMF]/tex/latex/fixme/themes/fxtheme*.sty
+% [TEXMF]/doc/latex/fixme/fixme.[pdf|dvi]
+% \end{verbatim}
%
-% \section{Description}
-% With \fixme, you can insert different kinds of notes in your documents,
-% ranging from simple not-so-important notices to critical stuff that must
-% absolutely be fixed in the final version.\par
-% \fixme{} gives you full control on the layout of these notes: they can be
-% displayed inline (directly in the text), as marginal paragraphs (the
-% default), as footnotes and even as index entries. All these possibilities
-% can be mixed together. Additionally, you can summarize all \fixme{} notes in
-% a ``list of fixme's''.\par
-% \fixme{} notes are also recorded in the log file, and (depending on their
-% importance level) some of them are displayed on the terminal during
-% compilation. A final summary is also created at the end of the compilation
-% process.\par
-% All these features are actually available when you're working in
-% \texttt{draft} mode. In \texttt{final} mode, the behavior is slightly
-% different: any remaining critical note generates an error (the compilation
-% aborts), while non critical ones are just removed from the document's body
-% (they're still recorded in the log file though).
-%
-%
-% \section{Using \fixme}
-% First of all, please note that the \texttt{ifthen} and \texttt{verbatim}
-% packages are required. You don't have to load them explicitly though. As
-% long as \LaTeXe{} can locate them, they will be used automatically.\par
-% To use \fixme, simply say |\usepackage[|\meta{options}|]{fixme}| in the
-% preamble of your document.
-%
-% \subsection{Inserting notes}
-% \subsubsection{Macros}
-% \DescribeMacro{\fixme}
-% The main command for inserting a \fixme{} note in your document is the
-% |\fixme| macro. It takes the note to insert as its mandatory argument. Notes
-% inserted via this command are considered fatal to your document's final
-% processing (see section \ref{sec:behavior}).\par
+% \subsection{\auctex support}
+% \auctex is a powerful major mode for editing \TeX{} documents in
+% \emacs. In particular, it provides automatic completion of command names
+% once they are known. \fx supports \auctex by providing a style file named
+% \texttt{fixme.el} which contains \auctex definitions for the relevant
+% commands. This file should be installed in a place where \auctex can find it
+% (usually in a subdirectory of your \LaTeX{} styles directory). Please refer
+% to the \auctex documentation for more information on this.
+%
+% \section{Features summary}
+% If you're new to \fx, you might be interested in a brief summary of the
+% features it provides. Otherwise, you may only take a look at the History
+% section (section \sectionref{sec:manual:history}) to see what's new.
+% \subparagraph{Annotation levels} \fx annotations may be of four different
+% importance levels, ranging from simple not-so-important notices to critical
+% things that must absolutely be fixed in the final version.
+% \subparagraph{Layouts and themes} \fx gives you full and extensible control
+% on the layout of these annotations: they can be displayed inline, as
+% marginal paragraphs, as footnotes and also in any kind of user-defined way.
+% All these ``layouts'' may be combined together. \fx also comes with support
+% for ``themes'', globally modifying existing layouts, or providing new ones.
+% \subparagraph{Annotation targets} Annotations may be ``targeted'' to a
+% specific portion of text that will be highlighted, and on the contrary
+% ``floating'' around, in which case they may even appear in the document's
+% preamble.
+% \subparagraph{Listing and indexing} Annotations may be indexed and
+% summarized in a ``list of fixmes''.
+% \subparagraph{Logging} Annotations are recorded in the log file, and
+% (depending on their importance level) some of them are displayed on the
+% terminal during compilation. A final summary is also created at the end of
+% the compilation process.
+% \subparagraph{Modes} All these features are actually available when you're
+% working in \texttt{draft} mode. In \texttt{final} mode, the behavior is
+% slightly different: any remaining critical note generates an error (the
+% compilation aborts), while non critical ones are just removed from the
+% document's body (they're still recorded in the log file though).
+% \subparagraph{Authoring} \fx provides support for collaborative annotating
+% by allowing you to ``register'' several authors.
+% \subparagraph{Internationalization} \fx currently supports 7 different
+% languages and features automatic language tracking for multilingual
+% documents.
+%
+% \section{Using \fx}
+% \subsection{Initialization}
+% \subsubsection{Requirements}
+% In order to work properly, \fx requires the presence of some \LaTeX{}
+% packages. You don't have to load them explicitly though. As long as
+% \LaTeX{} can locate them, they will be used automatically. \fx currently
+% depends on \texttt{xspace}, \texttt{ifthen}, \texttt{verbatim} and
+% \texttt{xkeyval} (version 2.5f, release date 2006/11/18 or later).
+%
+% \subsubsection{Loading the package}
+% In order to load \fx, simply say |\usepackage[|\meta{options}|]{fixme}|
+% in the preamble of your document. There is an important number of options
+% that you can use in order to customize \fx's default or global behavior.
+% These options will be discussed when appropriate.
+%
+% There might be times where you would like to use \LaTeX{} commands in
+% package options (for example, see section \sectionref{sec:manual:faces}). In
+% such a case, you should know that \LaTeX{} normally can't handle this. In
+% order to make it work, you need to use the \texttt{xkvltxp} package first,
+% like this:
+% \begin{verbatim}
+% \usepackage{xkvltxp}
+% \usepackage[myoption=\mymacro]{fixme}
+% \end{verbatim}
+%
+% \subsubsection{Global setup modification}
+% \DescribeMacro{\fxsetup}\marg{options}\\
+% Another way of customizing \fx's global behavior is to use the
+% \cs{fxsetup} command. \cs{fxsetup} understands the same options as the
+% package itself and can be used in the preamble as well as in the document's
+% body.
+%
+% \subsubsection{Local setup modification}
+% Finally, note that unless specified otherwise, all package options are also
+% understood by the annotation commands or environments described in
+% section \sectionref{sec:manual:insertion}. The effect is then local to that
+% particular command.
+%
+% \subsection{Inserting \fx notes\label{sec:manual:insertion}}
+% \subsubsection{Commands}
% \DescribeMacro{\fxnote}
% \DescribeMacro{\fxwarning}
% \DescribeMacro{\fxerror}
-% As of version 2.0, \fixme{} provides three new macros that insert
-% meta-comments about the document, rather than real fixmes. These
-% comments have three different importance levels: note, warning and (non
-% critical) error. The corresponding macros obey the same syntax as |\fixme|.
-% However, none of the notes inserted via these macros are fatal.
+% \DescribeMacro{\fxfatal}\oarg{options}\marg{note}\\
+% \fx provides four annotation commands corresponding to different
+% levels of importance (notes, warnings, errors and fatal errors).
+% \cs{fxfatal} is a bit different from the other ones, as will be explained in
+% section \sectionref{sec:manual:behavior}.\par
+% \begin{quotation}\itshape
+% \DescribeMacro{\fixme}
+% \textbf{Warning:} as of version 4, the \cs{fixme} command is a synonym for
+% \cs{fxfatal} and is considered deprecated.
+% \end{quotation}
+%
+% \subsubsection{Targeted commands}
+% \DescribeMacro{\fxnote*}
+% \DescribeMacro{\fxwarning*}
+% \DescribeMacro{\fxerror*}
+% \DescribeMacro{\fxfatal*}\oarg{options}\marg{note}\marg{text}\\
+% Sometimes, you might not only want to issue a \fx note, but also
+% highlight the relevant part of the text to which it applies. This is what I
+% call ``targeting'' the note. As of version 4, \fx provides starred
+% versions of its annotation commands to do that. In star form, these
+% commands expect an additional mandatory argument containing the text to be
+% highlighted.
%
% \subsubsection{Environments}
+% \begin{quotation}\itshape
+% \textbf{Warning:} as of version 4.0, the environment interface has changed
+% and is \emph{not} backward-compatible.
+% \end{quotation}
% \DescribeEnv{anfxnote}
% \DescribeEnv{anfxwarning}
% \DescribeEnv{anfxerror}
-% \DescribeEnv{afixme}
-% As of version 3.0, \fixme{} provides environments for inserting longer
-% notes. These environments take one optional argument (should be short,
-% perhaps a summary of the note) that will be used in the list of fixme's and
-% in the index if required.\par
-% The \fixme{} environments behave exactly the same way as their macro
-% counterpart, except for the layout (see section \ref{sec:layout}): as they
-% are meant for longer notes, the layout is always \texttt{inline}. The
-% \texttt{index} and \texttt{marginclue} layouts are still honored however. By
-% default, \fixme{} environments are typeset in a \texttt{quotation} one.
-%
-% \subsection{Controlling the behavior of \fixme\label{sec:behavior}}
-% \DescribeEnv{final}
-% \DescribeEnv{draft}
-% The global behavior of the package is controlled via the two standard
-% options \texttt{final} and \texttt{draft}. These options are usually given
-% to |\documentclass{}| which in turn passes them to all packages.\par
-% In \texttt{draft} mode, the notes are recorded in the log file, and
-% appear in the text as specified by the layout settings (see section
-% \ref{sec:layout}). Additionally, warnings, errors and fatal errors are also
-% displayed on the terminal.\par
-% In final mode, non fatal notes (those generated by the |\fx*| commands or by
-% the |anfx*| environments) are still logged, but they're not typeset. On the
-% other hand, any remaining fatal note (generated by the |\fixme| command or
-% the |afixme| environment) will throw a \LaTeX{} error and thus interrupt or
-% abort compilation with an informative message. This will help you track down
-% forgotten important caveats in your document. Let me say it again: final
-% documents can only have notes, warnings, and (non critical) errors left.
-% Well, if, for some reason, you really want to compile in \texttt{final}
-% mode with critical \fixme{} notes left behind, you always have the
-% possibility to pass the \texttt{draft} option to \fixme{} directly\ldots\par
-% The \texttt{final} mode has been chosen as the default because \LaTeXe{}
-% itself behaves this way.\par
-%
-% \subsection{Controlling the notes layout\label{sec:layout}}
-% \fixme{} notes can appear in several forms (that can be combined) in your
-% document.
-% \subsubsection{Global layout}
-% \DescribeEnv{inline}
-% \DescribeEnv{margin}
-% \DescribeEnv{marginclue}
-% \DescribeEnv{footnote}
-% \DescribeEnv{index}
-% The layout forms currently supported are: inline (directly in the text),
-% marginal notes, marginal clues (see below), footnotes, and index entries. To
-% activate a particular layout globally (that is, for the whole document), use
-% the corresponding package option. By default, only the \texttt{margin}
-% layout is active.\par
-% Each layout option has a counterpart that deactivates it. The counterpart
-% option has the same name, prefixed with \texttt{no}. For instance, if you
-% don't want marginal notes, use the \texttt{nomargin} option.\par
-% Finally, note that \fixme{} environments behave in a special way: they are
-% always typeset \texttt{inline}, regardless of your layout settings (they
-% respect your wish for index and marginal clues though).\par
-%
-% \subsubsection{Marginal Clues}
-% Sometimes, marginal notes are too narrow for what you want to put in them,
-% so you would switch to an inline or a footnote layout. But then, it is more
-% difficult to keep track of the \fixme{} note's location on the page.\par
-% As of version 3.2, \fixme{} provides a special layout called ``marginal
-% clue'' to help locating the notes: a marginal clue does not display the
-% note's contents, but only an indication that there is a note at that place.
-% So you have to use another layout form (typically inline or footnote) in
-% order to get the actual contents.\par
-% Obviously, \texttt{margin} and \texttt{marginclue} are mutually exclusive.
-% If you try to activate both, only the most recently activated form will be
-% enabled (and you'll get a notice in the compilation log).
-%
-% \subsubsection{Local Layout}
-% \DescribeMacro{\fixme[]}
-% \DescribeMacro{\fxnote[]}
-% \DescribeMacro{\fxwarning[]}
-% \DescribeMacro{\fxerror[]}
-% As of version 3.0, \fixme{} provides a way to change the selected layout(s)
-% on a per-note basis: each note insertion command takes an optional first
-% argument that overrides the global layout. This argument consists of one or
-% more layout options (\texttt{inline}, \texttt{margin}, \texttt{marginclue},
-% \texttt{footnote} and \texttt{index}) separated by commas. Remember that
-% local layouts \emph{override} the global ones; they don't add to it.\par
-% On what occasion would one want to modify the layout for a particular note~?
-% Here is a typical situation: suppose you have a document in which \fixme{}
-% notes are typeset as margin paragraphs (this is the default). You would not
-% be able to put a note in a figure, because floats can't be nested in
-% \LaTeX{} (margin paragraphs are floats). In such a case, you would rather
-% inline the note, which can be done with something like
-% |\fixme[inline]{blah}|.\par
-%
-% \subsubsection{Class compatibility}
-% By default, \fixme{} is set to use marginal notes. You should know that this
-% is known to cause problems with at least the ACM SIG classes:
-% \texttt{acm\_proc\_article-sp} and \texttt{sig-alternate}. These classes
-% forbid the use of |\marginpar|, so if you use them, you should choose
-% another layout for \fixme{}, and also avoid using marginal clues\ldots
-%
-% \subsection{Controlling the notes logging}
-% \DescribeEnv{silent}
-% \DescribeEnv{nosilent}
-% As well as being displayed in the document itself, all \fixme{} notes are
-% ``logged'' in different ways: by default, simple notes are recorded in the
-% log file while the others are also displayed on the terminal output.\par
-% You have the ability to suppress all kind of logging by using the
-% \texttt{silent} option. By default, the behavior is that of
-% \texttt{nosilent}.
+% \DescribeEnv{anfxfatal}\oarg{options}\marg{summary}\\
+% \fx annotations are normally meant to be short: consider that they are
+% likely to go in the list of fixmes and in the index for instance. If you
+% feel the need for writing longer comments, the environments described below
+% might come in handy. \fx provides four annotation environments; one for
+% every note level. These environments take one mandatory argument (meant to
+% be a short summary of the long note) and behave in exactly the same way as
+% their command counterpart. The layout policy is a bit different though (see
+% section
+% \sectionref{sec:manual:layout}): the environment's contents will always
+% appear inline, and the \meta{summary} will obey all active annotation
+% layouts except for the \texttt{inline} one, just as if it had been passed to
+% one of the \fx annotation commands described in the previous section.
+% \begin{quotation}\itshape
+% \DescribeEnv{afixme}
+% \textbf{Warning:} as of version 4, the \texttt{afixme} environement is a
+% synonym for \texttt{anfxfatal}, and is considered deprecated.
+% \end{quotation}
+%
+%
+%
+% \subsubsection{Targeted environments}
+% \DescribeEnv{anfxnote*}
+% \DescribeEnv{anfxwarning*}
+% \DescribeEnv{anfxerror*}
+% \DescribeEnv{anfxfatal*}\oarg{options}\marg{summary}\marg{text}\\
+% \fx environments can also be targeted to a specific portion of text. When
+% using the starred version, the environments expect one additional mandatory
+% argument: the text in question that will be highlighted.
%
-% \subsection{List of \fixme's}
+% \subsection{List of \fx's\label{sec:manual:lox}}
% \DescribeMacro{\listoffixmes}
-% \fixme{} remembers where you put \fixme{} notes in a toc-like file whose
-% extension is \texttt{lox}. The |\listoffixmes| macro generates the list of
-% all \fixme{} notes in a manner similar to that of the ``list of figures''
-% for instance. A standard layout is automatically used for the `article',
-% `report', `book' classes and their koma-script replacements. If another
-% class is used, the `article' layout is selected. Also, note that if no
-% \fixme{} note remain in the document, this macro doesn't generate an empty
-% list, but rather stays silent. It also stays silent in \texttt{final} mode,
-% regardless of the presence of remaining notes.
-%
-%
-% \section{Customizing \fixme}
-% \subsection{Customizing the notes layout}
-% \subsubsection{Macros}
-% The \texttt{inline}, \texttt{margin} and \texttt{footnote} layouts have two
-% parts: a ``prefix'' which depends on the note level, and the note
-% itself. The prefix is one of ``\fixme{} note:'', ``\fixme{} warning:'',
-% ``\fixme{} error:'' or simply ``\fixme{}:'', and appears in bold. The note
-% itself appears emphasized.
-% \DescribeMacro{\FXInline}
-% \DescribeMacro{\FXMargin}
-% \DescribeMacro{\FXFootnote}
-% These layouts are implemented thanks to the corresponding |\FX*| macros that
-% you can redefine if you wish. Each such macro takes two mandatory
-% arguments: the prefix and the note, in that order.\par
-% \DescribeMacro{\FXMarginCLue}
-% The special \texttt{marginclue} layout only outputs the prefix mentioned
-% above. Its layout is controlled by the macro |\FXMarginClue| which takes the
-% prefix as its only mandatory argument.
-% \DescribeMacro{\FXIndex}
-% The |\FXIndex| macro is used for the \texttt{index} layout. All \fixme{}
-% index entries appear under the ``\fixme{}'' key in the symbols section.
-% There are 4 subcategories under this key, as many as there are note levels.
-% By default, only the first 3 of them are used though (fatal errors do not
-% appear under a subkey, but directly under the \fixme{} key). The notes are
-% numbered in the index.\par
+% \fx remembers where you put your annotations in a toc-like file whose
+% extension is \texttt{lox}. The \cs{listoffixmes} command generates the
+% annotations lists in a manner similar to that of the ``list of figures''. A
+% standard layout is automatically selected for the \texttt{article},
+% \texttt{report}, \texttt{book} classes and their \komascript replacements.
+% If another class is used, the \texttt{article} layout is selected. Also,
+% note that if there isn't any annotation left in the document, this command
+% doesn't generate an empty list, but rather stays silent. It also stays
+% silent in \texttt{final} mode, regardless of the presence of remaining
+% annotations (see section \sectionref{sec:manual:behavior}).
%
-% \subsubsection{Environments}
-% \DescribeMacro{\FXEnvBegin}
-% \DescribeMacro{\FXEnvEnd}
-% The optional argument of \fixme{} environments is always typeset according
-% to the \texttt{inline} layout described above. By default, \fixme{} uses a
-% \texttt{quotation} for displaying the environments'contents. If you want to
-% change that, you can redefine the macros |\FXEnvBegin| and |\FXEnvEnd| that
-% open and close the environments.
-%
-% \subsection{Customizing the notes logging}
-% \DescribeMacro{\FXNote}
-% \DescribeMacro{\FXWarning}
-% \DescribeMacro{\FXError}
-% \DescribeMacro{\FXFatal}
-% If you want a finer control on logging, you can redefine the commands used
-% to implement it. These commands (on the left) are the ones used by
-% |\fxnote|, |\fxwarning|, |\fxerror| and |\fixme| respectively. They take the
-% note itself as mandatory argument.
-%
-% \subsection{Fancy fruit salad layout}
-% \DescribeEnv{user}
-% \DescribeMacro{\FXUser}
-% If, for some totally unjustified reason, you are not happy with the
-% available layouts, you have the ability to define your own: pass the
-% \texttt{user} option to the package (it also has its \texttt{nouser}
-% counterpart), and define an |\FXUser| macro in the following manner:\\
-% |\newcommand{\FXUser}[2]{|\meta{fancy fruit salad layout job}|}|\\ The
-% arguments are the prefix, and the note itself, in that order.\par
-% Note that the \texttt{user} option can also be used in the optional argument
-% of the notes insertion commands.
+% \subsection{Controlling the behavior of \fx\label{sec:manual:behavior}}
+% \DescribeOption{final}
+% \DescribeOption{draft}
+% The behavior of \fx is controlled by the two standard options
+% \texttt{final} and \texttt{draft}. These options are usually given to
+% \cs{documentclass} which in turn passes them to all packages. In addition,
+% you can also use them as options to \cs{usepackage}, in the call to
+% \cs{fxsetup}, and even to the annotation commands and environments.
+%
+% In \texttt{draft} mode, annotations are recorded in the log file and appear
+% in the document as specified by the layout settings (see section
+% \sectionref{sec:manual:layout}). Additionally, warnings, errors and fatal
+% errors are also displayed on the terminal.
+%
+% In final mode, non fatal annotations (those generated by \cs{fxnote},
+% \cs{fxwarning}, \cs{fxerror} and their corresponding environments) are still
+% logged, but they're not typeset. On the other hand, fatal ones (those
+% generated by the \cs{fxfatal} command and the \texttt{anfxfatal}
+% environment) will throw a \LaTeX{} error and thus interrupt or abort
+% compilation with an informative message. This will help you track down
+% forgotten important caveats in your document.
+%
+% Let me rephrase: final documents can only have \fx notes, warnings, and (non
+% fatal) errors left. Of course, this is not completely true: remember that
+% these options are understood locally by all the annotation commands and
+% environments, so even in \texttt{final} mode, you can use something like
+% this:
+% \begin{verbatim}
+% \fxfatal[draft]{bla bla}
+% \end{verbatim}
+%
+% \DescribeOption{status}
+% By default, \fx is in \texttt{final} mode (\LaTeX{} itself behaves that
+% way). If you're manipulating the document status at the level of \fx
+% itself (as opposed to the \cs{documentclass} level), then the preferred way
+% to do this is to use the \texttt{status} option, and give it the value
+% \texttt{final} or \texttt{draft}.
+%
+% \subsection{Controlling the layout of annotations\label{sec:manual:layout}}
+% Annotations can appear in several forms in your document. Each of these
+% forms can be individually selected, or they can be combined together to some
+% extend.
+%
+% \subsubsection{Selecting a layout}
+% \paragraph{Individual control}
+% For each annotation layout, there is a corresponding boolean option (for
+% instance, the ``inline'' layout is controlled by the \texttt{inline}
+% option). These options are understood by the package itself, the
+% \cs{fxsetup} command and also locally by every annotation command or
+% environment. There are some restrictions on their usage however, as
+% discussed in the next section.
+%
+% To activate a note layout, use the option alone or give it a value of
+% \texttt{true}. For instance, these two forms are equivalent:
+% \begin{verbatim}
+% \fxnote[inline]{note...}
+% \fxnote[inline=true]{note...}
+% \end{verbatim}
+% For convenience, each layout option has a counterpart that deactivates the
+% corresponding layout. The counterpart option has the same name, prefixed
+% with \texttt{no} (for instance, \texttt{noinline}). Again, these options are
+% understood by the package itself, the \cs{fxsetup} command and also locally
+% by every annotation command or environment (with the same usage
+% restrictions, discussed in the next section). For instance, these two forms
+% are equivalent:
+% \begin{verbatim}
+% \fxsetup{inline=false}
+% \fxsetup{noinline}
+% \end{verbatim}
+%
+% \paragraph{Global control}
+% \DescribeOption{layout}
+% \DescribeOption{morelayout}
+% An even more convenient way to specify the required layout is to use the
+% \texttt{layout} and \texttt{morelayout} options. In fact, the use of
+% individual control is considered more or less deprecated. Both of these
+% options take a comma-separated list of the individual options described
+% above (this includes the \texttt{no}\meta{option} form as well).
+%
+% While the \texttt{morelayout} option \emph{adds} to the current layout
+% configuration, the \texttt{layout} one completely overrides it. For
+% instance, knowing that by default, only the \texttt{margin} layout is
+% active, the following forms are all equivalent:
+% \begin{verbatim}
+% \usepackage[nomargin,inline,index]{fixme}
+% \usepackage[margin=false,inline=true,index=true]{fixme}
+% \usepackage[morelayout={nomargin,inline,index}]{fixme}
+% \usepackage[layout={inline,index}]{fixme}
+% \end{verbatim}
+% Again, these two options are understood by the package itself, the
+% \cs{fxsetup} command and also locally by every annotation command or
+% environment (with the same usage restrictions, discussed in the next
+% section).
+%
+% \noindent\DescribeMacro{\fxuselayouts}\marg{name,\ldots}\\
+% Finally, an alternative way of selecting (or deselecting) several layouts
+% simultaneously is to use the \cs{fxuselayouts} command, giving it a
+% comma-separated list of layout options as its only, mandatory, argument.
+%
+% \subsubsection{Built-in \vs external layouts}
+% Annotation layouts are provided either in the core of \fx, or in separate
+% files loaded dynamically on demand. Simple layouts are typically built-in,
+% whereas those requiring additional packages are external, so that they don't
+% consume \TeX{} resources if not used. As a consequence, selecting an
+% external layout might involve loading the relevant file first.
+%
+% \noindent\DescribeMacro{\fxloadlayouts}\marg{name,\ldots}\\
+% For technical reasons, it is not possible to do such a thing outside the
+% preamble, neither in the middle of processing \cs{usepackage} options. As a
+% result, layout options are restricted and you have three possibilities for
+% using an external layout:
+% \begin{enumerate}
+% \item Use its corresponding option in a call to \cs{fxsetup} in the
+% preamble, like this: |\fxsetup{|\meta{option}|}|. This will load it
+% \emph{and} select it immediately.
+% \item Use the \cs{fxuselayouts} command in the preamble like this:\\
+% |\fxuselayouts{|\meta{name}|}|. This is strictly equivalent to the
+% previous solution.
+% \item If on the other hand you want to load one or several external layouts
+% \emph{without} using them immediately (perhaps in order to use them
+% locally in some specific annotation), use the \cs{fxloadlayouts} command
+% in the preamble like this: |\fxloadlayouts{|\meta{name}|,...}|. After
+% that, you can select any of those layouts anywhere you wish.
+% \end{enumerate}
+%
+% \newpage
+% \subsubsection{Available layouts}
+% \DescribeBooleanOption{inline}
+% \DescribeBooleanOption{margin}
+% \DescribeBooleanOption{marginclue}
+% \DescribeBooleanOption{footnote}
+% \DescribeBooleanOption{index}
+% \DescribeLayout[noprint]{inline}
+% \DescribeLayout[noprint]{margin}
+% \DescribeLayout[noprint]{marginclue}
+% \DescribeLayout[noprint]{footnote}
+% \DescribeLayout[noprint]{index}
+% Table \ref{table:layouts} lists the annotation layouts currently distributed
+% with \fx. By default, only the \texttt{margin} layout is active. While most
+% of these layouts should be self-explanatory, marginal clues deserve a bit
+% more explanation.
+% \begin{table}
+% \centering
+% \DeleteShortVerb{\|}
+% \begin{tabular}{|l|c|p{7cm}|}
+% \hline
+% \textbf{Name} & \textbf{External} & \textbf{Description}\\
+% \hline\hline
+% \texttt{inline} & & Display note inline\\
+% \texttt{margin} & & Display note in the margin\\
+% \texttt{footnote} & & Display note in a footnote\\
+% \texttt{index} & & Display note in the index\\
+% \texttt{marginclue} & & Display a marginal clue\\
+% \hline
+% \end{tabular}
+% \MakeShortVerb{\|}
+% \caption{Available annotation layouts}
+% \label{table:layouts}
+% \end{table}
+% If your preferred layout is \texttt{inline} or say, \texttt{footnote},it
+% might be somewhat difficult to localize the annotation on the page,
+% especially its vertical position. That's where marginal clues come into
+% play. A marginal clue does not display the annotation's contents, but only
+% an indication that there is one at that (vertical) position. So you need to
+% use another layout as well (again, typically \texttt{inline} or
+% \texttt{footnote}) in order to get the actual annotation.
+%
+% Obviously, the margin and margin clue layouts are mutually exclusive, so if
+% you try to activate both, only the most recently activated one will be
+% enabled (and you'll get a notice in the log file and on the terminal).
+%
+% \subsubsection{Inner layout}
+% There might be various reasons for you to change the layout locally for one
+% particular annotation: creating a floating one is an example, see also
+% section \sectionref{sec:manual:othercommonproblems} for some others. One
+% frequent reason (described below) can be handled automatically by \fx.
+%
+% Remember that the default layout is to use margin paragraphs. Unfortunately,
+% margin paragraphs are forbidden by \TeX{} in several situations, like a
+% figure's caption for instance. If you try that, you will get a cryptic ``Not
+% in outer par mode'' error message.
+%
+% \DescribeOption{innerlayout}
+% The good news is that this situation can be detected automatically. \fx
+% provides an option named \texttt{innerlayout} that allows you to specify an
+% alternative layout setting to use when \TeX{} is in \emph{inner} mode. In
+% addition to that, \fx automatically disables the \texttt{margin} and
+% \texttt{marginclue} layouts.
+%
+% Using \texttt{innerlayout} is not as trivial as it may seem: it
+% \emph{really} is an alternative layout configuration, and as such, you can
+% use any combination you like of individual layout options, or you can even
+% use the \texttt{layout} and \texttt{morelayout} options. This means that
+% your alternative layout can either \emph{add} to the existing one, or
+% \emph{override} it. Here are some examples to clarify things a little. You
+% should try to understand them.
+% \begin{itemize}
+% \item By default, the \fx inner layout is set to just \texttt{inline}.
+% This can be simulated by the following call:
+% \begin{verbatim}
+% \usepackage[layout=margin,innerlayout={layout=inline}]{fixme}
+% \end{verbatim}
+% \item The following happens to give the same result in our particular case,
+% while having a different semantics:
+% \begin{verbatim}
+% \usepackage[layout=margin,innerlayout=inline]{fixme}
+% \end{verbatim}
+% \item If you have set \fx to use a safe layout globally (for instance,
+% \texttt{inline} and \texttt{index}), and you want to use the same layout
+% in inner mode, then you should provide an \emph{empty} inner layout, like
+% this:
+% \begin{verbatim}
+% \fxsetup{layout={inline,index},innerlayout=}
+% \end{verbatim}
+% What would happen if you didn't provide the \texttt{innerlayout} option?
+% \end{itemize}
+%
+% \subsubsection{Other common layout
+% problems\label{sec:manual:othercommonproblems}}
+% This section describes some other common problems that people have
+% encountered using \fx. Although \fx might not be directly responsible
+% for them, it is still good to keep them in mind.
+%
+% \subparagraph{Footnotes and margin paragraphs in floats} Using footnotes in
+% figures (and \emph{a fortiori} in a figure's caption) does not work in
+% general. Although there are some workarounds out there (for instance, using
+% \cs{footnotemark} and \cs{footnotetext} directly), there is no completely
+% reliable solution and it is not possible to detect that situation
+% automatically. Similarly, marginal paragraphs will cause problems in a
+% figure (even when not in its caption) because floats can't be nested in
+% \LaTeX. Usual symptoms of these situations are: a footnote not being
+% typeset, compilation breakage with the ``Floats lost'' message \etc If
+% you're facing this problem, you need to change your layout locally.
+%
+% \subparagraph{Marginal paragraphs showing up on the wrong margin} You want
+% to look at the \texttt{mparhack} package.
+%
+% \subparagraph{ACM classes compatibility} The ACM \textsc{Sig} classes
+% (\texttt{acm\_proc\_article-sp} and \texttt{sig-alternate}) forbid the use
+% of \cs{marginpar}, so if you use these classes, don't forget to choose
+% another layout for \fx, and also avoid using marginal clues.
+%
+% \subparagraph{Annotation indexing}
+% Remember that some characters are special in an index entry (the \texttt{!}
+% for instance). \fx currently does nothing to escape those characters, so
+% avoid using them in your annotations.
+%
+% \subsection{Corollary: floating annotations}
+% At some point, people suggested that it would be nice to have global
+% annotations, not related to any portion of the text in particular. Such
+% annotations could be general comments about the whole document, and could
+% even be issued in the preamble. This is what I call ``floating''
+% annotations.
+%
+% I know you don't care, but originally, I started writing a new set of
+% commands to do just that. However, with the flexibility that \fx 4.0
+% provides, I quickly realized that such commands were an unnecessary
+% addition.
+%
+% Since floating anotations are not supposed to relate to any part of the
+% text, they should not be typeset anywhere in it. This is especially true if
+% you want to put some of them in the document's preamble. However, even a
+% preamble annotation could be recorded and displayed in the index or in the
+% list of fixmes. And it turns out that you can specify all that with the
+% layout options described in section \sectionref{sec:manual:layout}.
+%
+% \DescribeOption{target}
+% The only remaining problem is the page number, which normally appears in the
+% list of fixmes and in the index: if you choose to reference a floating
+% annotation that way, the page number is likely to be completely meaningless.
+% To compensate, a new option named \texttt{target} is provided. When used,
+% the given value will replace the page number in both the index and the list
+% of fixmes. The target can be anything you like, but should remain rather
+% short. By default, \texttt{target} is set the special value
+% \texttt{thepage}, which as you guessed means to use the page number.
+%
+% The name "target" bears an intentional resemblance to \fx's targeted
+% commands and environments, because we are indeed targetting the note to
+% something. The only difference is that in the case of floating annotations,
+% the target is non-textual.
+%
+% Here is an example of a floating annotation that would typically appear in
+% the document's preamble:
+% \begin{verbatim}
+% \usepackage{hyperref}
+% \fxfatal[layout=index,target=hyperref]{Fill in PDF fields (title etc.)}
+% \end{verbatim}
+%
+% \subsection{Controlling the layout of
+% environments\label{sec:manual:envlayoutcontrol}}
+% As discussed in section \sectionref{sec:manual:insertion}, the contents of a
+% \fx environment (a longer annotation) always appears inline. However, the
+% exact way this contents is typeset (in draft mode only) is subject to a
+% layout of its own, called the ``environment layout''.
+%
+% \subsubsection{Selecting a layout}
+% \DescribeOption{envlayout}
+% The desired environment layout can be selected with the \texttt{envlayout}
+% option. Contrary to the annotation layouts, only one environment layout can
+% be active at a time. The \texttt{envlayout} option is understood by the
+% package itself, the \cs{fxsetup} command and all the annotation environments
+% (not the commands!). There are some restrictions on its usage however, as
+% discussed in the next section.
+%
+% \noindent\DescribeMacro{\fxuseenvlayout}\marg{name}\\
+% An alternative way of selecting an environment layout is to use the
+% \cs{fxuseenvlayout} command, giving it the layout's name as its only,
+% mandatory, argument.
+%
+% \subsubsection{Built-in \vs external layouts}
+% Environments layouts are provided either in the core of \fx, or in separate
+% files loaded dynamically on demand. Simple layouts are typically built-in,
+% whereas those requiring additional packages are external, so that they don't
+% consume \TeX{} resources if not used. As a consequence, selecting an
+% external layout with the \texttt{envlayout} option might involve loading the
+% relevant file first.
+%
+% \noindent\DescribeMacro{\fxloadenvlayouts}\marg{name,\ldots}\\
+% For technical reasons, it is not possible to do such a thing outside the
+% preamble, neither in the middle of processing \cs{usepackage} options. As a
+% result, the \texttt{envlayout} option is restricted and you have three
+% possibilities for using an external layout:
+% \begin{enumerate}
+% \item Use the \texttt{envlayout} option in a call to \cs{fxsetup} in the
+% preamble, like this: |\fxsetup{envlayout=name}|. This will load it
+% \emph{and} select it immediately.
+% \item Use the \cs{fxuseenvlayout} command in the preamble like this:\\
+% |\fxuseenvlayout{name}|. This is strictly equivalent to the previous
+% solution.
+% \item If on the other hand you want to load one or several environment
+% layouts \emph{without} using them immediately (perhaps in order to use
+% them locally in some specific annotation), use the \cs{fxloadenvlayouts}
+% command in the preamble like this: |\fxloadenvlayouts{|\meta{name}|,...}|.
+% After that, you can select any of those layouts anywhere you wish.
+% \end{enumerate}
+%
+% \subsubsection{Available layouts\label{sec:manual:envlayoutslist}}
+% Table \ref{table:envlayouts} lists the environment layouts currently
+% distributed with \fx.
+% \begin{itemize}
+% \item \DescribeEnvLayout{plain}
+% The \texttt{plain} environment layout prints its contents as-is, only
+% in bold font (by default) in order to distinguish it from the surrounding
+% text.
+% \item \DescribeEnvLayout{signature}
+% The \texttt{signature} environment layout prints the author's tag (see
+% \sectionref{sec:manual:modes}) as a signature instead of as a prefix. This
+% layout is used by the \texttt{signature} theme (see section
+% \sectionref{sec:manual:themes}).
+% \item \DescribeEnvLayout{color}
+% \DescribeColor{fxnote}
+% \DescribeColor{fxwarning}
+% \DescribeColor{fxerror}
+% \DescribeColor{fxfatal}
+% The \texttt{color} environment layout uses one of four colors named
+% \texttt{fx}\meta{level} (according to the annotation's importance level)
+% to display its contents. It also avoids printing the annotation level,
+% since that information is already conveyed by the color. This layout is
+% used by the \texttt{color} theme (see section
+% \sectionref{sec:manual:themes}).
+% \item \DescribeEnvLayout{colorsig}
+% The \texttt{colorsig} environment layout combines the features of the
+% \texttt{signature} and \texttt{color} ones. This layout is used by the
+% \texttt{colorsig} theme (see section \sectionref{sec:manual:themes}).
+% \end{itemize}
+% \begin{table}
+% \centering
+% \DeleteShortVerb{\|}
+% \begin{tabular}{|l|c|p{7cm}|}
+% \hline
+% \textbf{Name} & \textbf{External} & \textbf{Description}\\
+% \hline\hline
+% \texttt{plain} & & Display contents as-is\\
+% \texttt{signature} & & Display signed contents\\
+% \texttt{color} & \texttt{*} & Display contents in color\\
+% \texttt{colorsig} & \texttt{*} & Display signed contents in color\\
+% \hline
+% \end{tabular}
+% \MakeShortVerb{\|}
+% \caption{Available environment layouts}
+% \label{table:envlayouts}
+% \end{table}
+%
+% \subsection{Controlling the layout of
+% targets\label{sec:manual:targetlayoutcontrol}}
+% As discussed in section \sectionref{sec:manual:insertion}, the starred
+% versions of the \fx annotation commands and environments let you highlight a
+% portion of text which is relevant to the current annotation. The exact way
+% this textual target is typeset (in draft mode only; otherwise it is typeset
+% as-is) is subject to a layout of its own, called the ``target layout''.
+%
+% \subsubsection{Selecting a layout}
+% \DescribeOption{targetlayout}
+% The desired layout can be selected with the \texttt{targetlayout} option.
+% Contrary to the annotation layouts, only one target layout can be active at
+% a time. The \texttt{targetlayout} option is understood by the package
+% itself, the \cs{fxsetup} command and all the starred versions of the
+% annotation commands and environments. There are some restrictions on its
+% usage however, as discussed in the next section.
+%
+% \noindent\DescribeMacro{\fxusetargetlayout}\marg{name}\\
+% An alternative way of selecting a target layout is to use the
+% \cs{fxusetargetlayout} command, giving it the layout's name as its only,
+% mandatory, argument.
+%
+% \subsubsection{Built-in \vs external layouts}
+% Target layouts are provided either in the core of \fx, or in separate files
+% loaded dynamically on demand. Simple layouts are typically built-in, whereas
+% those requiring additional packages are external, so that they don't consume
+% \TeX{} resources if not used. As a consequence, selecting an external layout
+% with the \texttt{targetlayout} option might involve loading the relevant
+% file first.
+%
+% \noindent\DescribeMacro{\fxloadtargetlayouts}\marg{name,\ldots}\\
+% For technical reasons, it is not possible to do such a thing outside the
+% preamble, neither in the middle of processing \cs{usepackage} options. As a
+% result, the \texttt{targetlayout} option is restricted and you have two
+% possibilities for using an external layout:
+% \begin{enumerate}
+% \item Use the \texttt{targetlayout} option in a call to \cs{fxsetup} in the
+% preamble, like this: |\fxsetup{targetlayout=name}|. This will load it
+% \emph{and} select it immediately.
+% \item Use the \cs{fxusetargetlayout} command in the preamble like this:\\
+% |\fxusetargetlayout{name}|. This is strictly equivalent to the previous
+% solution.
+% \item If on the other hand you want to load one or several target layouts
+% \emph{without} using them immediately (perhaps in order to use them
+% locally in some specific annotation), use the \cs{fxloadtargetlayouts}
+% command in the preamble like this:
+% |\fxloadtargetlayouts{|\meta{name}|,...}|. After that, you can select any
+% of those layouts anywhere you wish.
+% \end{enumerate}
+%
+% \subsubsection{Available layouts\label{sec:manual:targetlayoutslist}}
+% Table \ref{table:targetlayouts} lists the target layouts currently
+% distributed with \fx.
+% \begin{itemize}
+% \item \DescribeTargetLayout{plain}
+% The \texttt{plain} target layout displays its contents as-is, only in
+% italics (by default) in order to distinguish it from the surrounding text.
+% \item \DescribeTargetLayout{changebar}
+% The \texttt{changebar} target layout displays a vertical bar in the
+% margin, on the side of the target text.
+% \item \DescribeTargetLayout{color}
+% \DescribeColor{fxtarget}
+% The \texttt{color} target layout uses the color named \texttt{fxtarget}
+% to display the target text. This layout is used by the \texttt{color}
+% and \texttt{colorsig} themes (see section \sectionref{sec:manual:themes}).
+% \item \DescribeTargetLayout{colorcb}
+% \DescribeColor{fxnote}
+% \DescribeColor{fxwarning}
+% \DescribeColor{fxerror}
+% \DescribeColor{fxfatal}
+% The \texttt{colorcb} target layout uses one of four colors named
+% \texttt{fx}\meta{level} (according to the annotation's importance
+% level) to display a colored vertical bar in the margin, on the side of the
+% target text.
+% \end{itemize}
+% \begin{table}
+% \centering
+% \DeleteShortVerb{\|}
+% \begin{tabular}{|l|c|p{7cm}|}
+% \hline
+% \textbf{Name} & \textbf{External} & \textbf{Description}\\
+% \hline\hline
+% \texttt{plain} & & Display target as-is\\
+% \texttt{changebar} & \texttt{*} & Display a vertical bar aside target\\
+% \texttt{color} & \texttt{*} & Display target in color\\
+% \texttt{colorcb} & \texttt{*} & Display a colored vertical bar aside
+% target\\
+% \hline
+% \end{tabular}
+% \caption{Available target layouts}
+% \label{table:targetlayouts}
+% \MakeShortVerb{\|}
+% \end{table}
+%
+% \subsection{Faces\label{sec:manual:faces}}
+% In the \fx jargon, a ``face'' characterizes the visual aspect of some
+% portion of text. If you're familiar with the \emacs editor, this will come
+% as no surprise to you. \fx provides several faces that allow you to further
+% customize the layout of annotations or their targets.
+%
+% \subsubsection{Setting face values}
+% There are different ways to customize a face. The first one is to use the
+% corresponding face option. For each face \meta{name}, their is a
+% \meta{name}\texttt{face} option. For instance, the ``inline'' face is
+% controlled by the \texttt{inlineface} option. Face options are
+% understood by the package itself, the \cs{fxsetup} command and locally by
+% all annotation commands or environments. Here is an example:
+% \begin{verbatim}
+% \fxsetup{inlineface=\bfseries}
+% \end{verbatim}
+%
+% Since you will probably want to use \LaTeX{} commands in face values, you
+% should know that \LaTeX{} normally can't handle such commands in package
+% options. If you want this to work, you need to use the \texttt{xkvltxp}
+% package first, like this:
+% \begin{verbatim}
+% \usepackage{xkvltxp}
+% \usepackage[inlineface=\bfseries]{fixme}
+% \end{verbatim}
+%
+% \noindent\DescribeMacro{\fxsetface}\marg{name}\marg{value}\\
+% Another way to customize a face is to use the \cs{fxsetface} command by
+% providing the face name and the face value as two mandatory arguments. For
+% example:
+% \begin{verbatim}
+% \fxsetface{inline}{\bfseries}
+% \end{verbatim}
+%
+% \subsubsection{Available faces}
+% \subparagraph{The \texttt{inline} face}
+% \DescribeFace{inline}
+% By default, the \texttt{inline} annotation layout displays its contents in
+% bold font, to distinguish the note from the surrounding text. This is
+% controlled by the \texttt{inline} face whose value is \cs{bfseries} by
+% default.
+%
+% \subparagraph{The \texttt{margin} face}
+% \DescribeFace{margin}
+% By default, the \texttt{margin} and \texttt{marginclue} layouts display
+% their contents in footnote size. This is controlled by the \texttt{margin}
+% face whose value is \cs{footnotesize} by default.
+%
+% \subparagraph{The \texttt{env} face}
+% \DescribeFace{env}
+% By default, the \texttt{plain} environment layout displays its contents in
+% bold font, to distinguish it from the surrounding text. This is controlled
+% by the \texttt{env} face whose value is \cs{bfseries} by default. The
+% \texttt{color} and \texttt{colorsig} environment layouts honor this face as
+% well, but reset it to \meta{nothing} first. You should probably keep the
+% same value for the \texttt{inline} and \texttt{env} faces, since they are
+% both used to display annotations within the document's body.
+%
+% \subparagraph{The \texttt{signature} face}
+% \DescribeFace{signature}
+% The \texttt{signature} environment layout honors the \texttt{env} face, and
+% adds a \texttt{signature} face on top of it for the signature part. It is
+% set to \cs{itshape} by default. The \texttt{colorsig} environment layout
+% honors this face as well.
+%
+% \subparagraph{The \texttt{target} face}
+% \DescribeFace{target}
+% By default, the \texttt{plain} target layout displays its contents in
+% italics, to distinguish it from the surrounding text. This is controlled by
+% the \texttt{target} face whose value is \cs{itshape} by default. The
+% \texttt{changebar}, \texttt{color} and \texttt{colorcb} target layouts honor
+% this face as well, but reset it to \meta{nothing} first.
+%
+% \subsection{Controlling the logging of annotations}
+% As well as being displayed in the document itself, all annotations are
+% ``logged'' in different ways: by default, simple notes are recorded in the
+% log file while the others (warnings, errors and fatal errors) are also
+% displayed on the terminal output during compilation.
+%
+% \DescribeBooleanOption{silent}
+% You have the ability to suppress logging altogether by using the
+% \texttt{silent} option. This option is understood by the package itself, the
+% \cs{fxsetup} command and all annotation commands and environments. Just
+% as individual layout options, \texttt{silent} is a boolean option, so all
+% those forms are possible: \texttt{silent}, equivalent to
+% \texttt{silent=true}, and \texttt{nosilent}, equivalent to
+% \texttt{silent=false} (the default).
+%
+% \subsection{Controlling the language of \fx\label{sec:manual:i18n}}
+% \subsubsection{Available languages}
+% \DescribeOption{english}
+% \DescribeOption{french}
+% \DescribeOption{francais}
+% \DescribeOption{spanish}
+% \DescribeOption{italian}
+% \DescribeOption{german}
+% \DescribeOption{ngerman}
+% \DescribeOption{danish}
+% \DescribeOption{croatian}
+% \fx currently supports English (the default), French, Spanish, Italian,
+% German, Danish and Croatian. You can select your preferred language by using
+% the corresponding language option. These options usually appear in the call
+% to \cs{documentclass} or \cs{usepackage}, but they are also understood by
+% \cs{fxsetup} and all the annotation commands or environments. This
+% allows you to change the selected language either globally or locally, and
+% at any point in the document. The \texttt{french} and \texttt{francais}
+% options are synonyms. The \texttt{german} and \texttt{ngerman} options are
+% currently equivalent.
+%
+% \DescribeOption{lang}
+% If you're manipulating language settings at the level of \fx itself (as
+% opposed to the \cs{documentclass} level), then the preferred way to specify
+% a language is to use the \texttt{lang} option, and give it the language name
+% as a value. For instance:
+% \begin{verbatim}
+% \usepackage[lang=french]{fixme}
+% \end{verbatim}
+%
+% \subsubsection{Language tracking}
+% \DescribeOption{langtrack}
+% If the document you're working on has parts written in different languages,
+% it might be the case that \fx notes should follow the current language as
+% well (especially if you're in collaborative mode; see section
+% \sectionref{sec:manual:modes}). \fx provides a boolean option named
+% \texttt{langtrack}. When specified, \fx assumes that you're using
+% \texttt{babel} and automatically switches to the current language (as
+% specified by \texttt{babel}'s \cs{languagename} command), without requiring
+% an explicit language option.
+%
+% \DescribeOption{defaultlang}
+% In the case where tracking falls on a language unsupported by \fx, a
+% warning will be issued and \fx will switch to the language specified by
+% the \texttt{defaultlang} option (\texttt{english} by default). If you happen
+% to get one of these warnings, please consider sending me a patch with
+% support for this new language (see section \sectionref{sec:code:i18n}).
+%
+% Finally, note that specifying a language explicitely (by means of a language
+% option) in the annotation commands and environments always takes
+% precedence over the language tracking behavior.
+%
+% \subsubsection{Indexing in different languages}
+% If your document contains \fx notes written in different languages, and
+% you have requested the \texttt{index} layout, \fx will not only classify
+% the notes by their level of importance, but also by language. For example,
+% if you have \fx warnings in both English and French, you will find two
+% different subcategories for warnings in the index: one called ``Warnings''
+% and one called ``Avertissements''.
+%
+% \subsection{Standalone or collaborative mode\label{sec:manual:modes}}
+% \fx supports collaborative annotations as well as ``standalone'',
+% single-author documents.
+%
+% \subsubsection{Standalone mode}
+% By default, \fx is in standalone mode, meaning that it assumes there is
+% only one person annotating the document. This has several implications on
+% the layout. If you've tried it already, you may have noticed the following
+% points.
+% \begin{itemize}
+% \item All the built-in annotation layouts (index excepted) put the \fx logo
+% in front of every note. This is also true for the environments. The idea
+% is to distinguish \fx contents from the rest of the document (for instance
+% other marginal notes or footnotes).
+% \item All annotations are indexed under the main \fx category, and sorted by
+% importance level, but the \fx logo is not repeated constantly (that would
+% be useless).
+% \item Similarly, the list of fixmes does not clutter itself with the logo,
+% because we already know that its contents is specific to \fx.
+% \end{itemize}
+% As a matter of fact, when you see the \fx logo appear somewhere, you're not
+% actually contemplating it, but rather the annotation's \emph{author}. It
+% just happens that by default (meaning in standalone mode), the only author
+% is \fx itself.
+%
+% \DescribeOption{author}
+% In standalone mode, you might be annoyed by this orgy of \fx logos. This
+% might happen if for instance you're using the \texttt{margin} layout and you
+% \emph{know} there is nothing but \fx annotations in there. In such a case,
+% you will most likely want to change the author to \emph{nothing}. This can
+% be acomplished by using the \texttt{author} option, which is understood by
+% the package itself, the \cs{fxsetup} command and all the annotation
+% commands or environments. Doing something like the following will get rid of
+% the damn logo for good:
+% \begin{verbatim}
+% \usepackage[author=]{fixme}
+% \end{verbatim}
+%
+% \subsubsection{Collaborative mode}
+% If, on the other hand, you're working in collaboration with other people,
+% every potential ``fixer'' might want to tag his or her own annotations. So
+% assuming that John Doe is another author, he would most likely do something
+% like this:
+% \begin{verbatim}
+% \fxfatal[author=JD]{rephrase this}
+% \end{verbatim}
+% And suddenly, John's fatal comment will be prefixed with his initials. This
+% is not a very satisfactory solution however, because it would require you to
+% explicitely provide the author's tag in every single note you create.
+% Fortunately, \fx offers an easier way to achieve this.
+%
+% \paragraph{Registering new authors}
+% \DescribeMacro{\FXRegisterAuthor}\marg{cmdprefix}\marg{envprefix}\marg{tag}\\
+% The command \cs{FXRegisterAuthor} registers a new author with \fx. It takes
+% three arguments: the last one (\meta{tag}) is just the same as the value you
+% would pass to the \texttt{author} option: it will serve as a prefix (or
+% signature) for John's annotations. In addition to that, a complete new set
+% of user-level commands (prefixed with \meta{cmdprefix}) and environments
+% (prefixed with \meta{envprefix}) will be created. To clarify, suppose that
+% we have registered John like this:
+% \begin{verbatim}
+% \FXRegisterAuthor{jd}{ajd}{JD}
+% \end{verbatim}
+% Now, John can use the commands \cs{jdnote}, \cs{jdwarning} \etc, along with
+% their starred versions, and he can also use the environments
+% \texttt{ajdnote}, \texttt{ajdwarning} \etc, along with their starred
+% versions as well. If you really want to know the whole story, it turns out
+% that the main \fx interface described in section
+% \sectionref{sec:manual:insertion} is created with this single line of code:
+% \begin{verbatim}
+% \FXRegisterAuthor{fx}{anfx}{fixme}
+% \end{verbatim}
+%
+% \paragraph{Fun with the \texttt{author} option}
+% Some precisions about the author option are in order here. When a new
+% author is registered with \fx, the generated commands and environments
+% work by \emph{presetting} the author option to the specified \meta{tag}.
+% This means that it is still possible to override it explicitely like this:
+% \begin{verbatim}
+% \jdfatal[author=Anonymous]{For $500.00, you got your Ph.D.}
+% \end{verbatim}
+% I don't see any good reason for doing it though, the above example
+% notwithstanding.^^A $ AUC-TeX hack to prevent math-mode
+%
+% The final remark is about the default \texttt{fx*} user interface: the
+% \texttt{fixme} default user is special in that it is the only registered
+% user to honor a global \texttt{author} option (provided in the call to
+% \cs{usepackage} or \cs{fxsetup}). The intended use of this is that the
+% \emph{main} author of the document uses the \texttt{fx*} interface
+% (preferably with a personal \texttt{author} setting, different from the \fx
+% logo), and all other authors are registered via \cs{FXRegisterAuthor}.
+%
+% \paragraph{Globally switching to collaborative mode}
+% We're getting close, but we're not quite there yet. Perhaps you would like
+% to see the tags from the different authors in the list of fixmes, or even in
+% the index? Remember that \fx is in standalone mode by default, so the
+% (only) tag does not appear in those places.
+%
+% \noindent
+% \DescribeOption{singleuser}
+% \DescribeOption{multiuser}
+% \DescribeOption{mode}
+% If you want this additional information, you've got to ask \fx to
+% globally switch to collaborative mode. This can be done with either one of
+% the three options \texttt{singleuser}, \texttt{mutliuser} or \texttt{mode}.
+% \texttt{singleuser} and \texttt{multiuser} are boolean options. The
+% \texttt{mode} option takes a value of either \texttt{singleuser} or
+% \texttt{multiuser}. This is the preferred way to switch the mode. These
+% options are understood globally by \cs{usepackage} or \cs{fxsetup}, and also
+% locally by the annotation commands or environments.
+%
+% When collaborative mode is active, \fx adjusts the list of fixmes layout to
+% display the authors tags as well. Additionally, \fx notes are indexed as
+% before, but additional index entries, sorted by author, are generated as
+% well.
+%
+% \subsection{Themes\label{sec:manual:themes}}
+% Themes are orthogonal to layouts: they provide a way to modify the overall
+% appearance of \fx by overriding the existing layouts and/or by providing new
+% ones. In fact, a theme can be any kind of customization that you would
+% otherwise put in your preamble.
+%
+% \subsubsection{Using themes}
+% \DescribeOption{theme}
+% The interface for using a theme is quite simple: use the \texttt{theme}
+% option and give it the name of the theme you want to use. Themes are always
+% external: there are none in the core of \fx but instead they are provided
+% as independent files. As a consequence, the \texttt{theme} option has the
+% same usage restrictions as all the layout options we've encountered so far.
+% Moreover, it is not possible to ``maintain'' several themes and switch
+% between them in a single document. Themes can be loaded only in the
+% preamble.
+%
+% \noindent\DescribeMacro{\fxusetheme}\marg{name}\\
+% An alternative to the \texttt{theme} option is to use the \cs{fxusetheme}
+% command, which takes the theme's name as its only mandatory argument.
+%
+% \subsubsection{Available themes}
+% \fx comes with a number of predefined themes listed below.
+%
+% \paragraph{The \texttt{signature} theme}
+% \DescribeTheme{signature}
+% This theme uses the \texttt{signature} environment layout (see section
+% \sectionref{sec:manual:envlayoutslist}), and overrides the built-in ones to
+% display the author tags as a signature (\ie at the end of the annotations)
+% instead of as a prefix. All original layout faces are honored.
+%
+% \paragraph{The \texttt{color} theme}
+% \DescribeTheme{color}
+% This theme uses the \texttt{color} environment and target layouts (see
+% sections \sectionref{sec:manual:envlayoutslist} and
+% \sectionref{sec:manual:targetlayoutslist}), and overrides the built-in ones
+% to use different colors for the different annotation levels. As a
+% consequence, it also avoids printing the annotation names because this
+% information is already contained in the colors themselves. All original
+% layout faces are honored, but the \texttt{inline} one is reset to
+% \meta{nothing}. Remember that the \texttt{env} and \texttt{target} faces are
+% reset as well (this is actually done by the \texttt{color} environment and
+% target layouts).
+%
+% \paragraph{The \texttt{colorsig} theme}
+% \DescribeTheme{colorsig}
+% This theme combines the features of the \texttt{color} and
+% \texttt{signature} ones. All original layout faces are honored, but
+% the \texttt{inline} one is reset to \meta{nothing}.
+%
+% \section{Extending \fx}
+% Hear hear, this is where you start spending more time hacking \LaTeX{} than
+% actually writing your document\ldots
+%
+% \subsection{Modifying existing layouts}
+% \fx annotations, environment and target layouts are implemented as a (set
+% of) commands conforming to strict prototypes. If you're not happy with the
+% way they perform, you have the possibility to \cs{renewcommand} them (in
+% fact, you should use \cs{renewcommand*} for annotation and environment
+% layouts). In such a case, it is probably best to have a look at the code in
+% order to figure out how the original ones are written. However, a
+% description of their prototypes is given below.
+%
+% \subsubsection{Modifying existing annotation layouts}
+% \DescribeMacro[noindex]{\FXLayout\ldots}
+% \marg{type}\marg{annotation}\marg{author}\\
+% \DescribeMacro[noprint]{\FXLayoutInline}
+% \DescribeMacro[noprint]{\FXLayoutMargin}
+% \DescribeMacro[noprint]{\FXLayoutFootnote}
+% \DescribeMacro[noprint]{\FXLayoutIndex}
+% \DescribeMacro[noprint]{\FXLayoutMarginClue}
+% Each annotation layout is implemented as a macro taking three mandatory
+% arguments. By convention, this macro is named \cs{FXLayout}\meta{name}, for
+% instance \cs{FXLayoutInline}.\meta{type} is the note type. It can be one of
+% \texttt{note}, \texttt{warning}, \texttt{error} and \texttt{fatal}.
+% \meta{annotation} is the annotation itself, and \meta{author} is the
+% author's tag.
+%
+% \subsubsection{Modifying existing environment layouts}
+% \DescribeMacro[noindex]{\FXEnvLayout\ldots Begin}
+% \DescribeMacro[noindex]{\FXEnvLayout\ldots End}\marg{type}\marg{author}\\
+% \DescribeMacro[noprint]{\FXEnvLayoutPlainBegin}
+% \DescribeMacro[noprint]{\FXEnvLayoutPlainEnd}
+% \DescribeMacro[noprint]{\FXEnvLayoutSignatureBegin}
+% \DescribeMacro[noprint]{\FXEnvLayoutSignatureEnd}
+% \DescribeMacro[noprint]{\FXEnvLayoutColorBegin}
+% \DescribeMacro[noprint]{\FXEnvLayoutColorEnd}
+% \DescribeMacro[noprint]{\FXEnvLayoutColorSigBegin}
+% \DescribeMacro[noprint]{\FXEnvLayoutColorSigEnd}
+% \begin{sloppypar}\noindent
+% Each environment layout is implemented as two macros taking two mandatory
+% arguments. By convention, these macros are named
+% \cs{FXEnvLayout}\meta{name}\texttt{Begin} and
+% \cs{FXEnvLayout}\meta{name}\texttt{End}, for instance
+% \cs{FXEnvLayoutPlainBegin} and \cs{FXEnvLayoutPlainEnd}.
+% \meta{type} is the note type. It can be one of \texttt{note},
+% \texttt{warning}, \texttt{error} and \texttt{fatal}. \meta{author} is the
+% author's tag.
+% \end{sloppypar}
+%
+% \subsubsection{Modifying existing target layouts}
+% \DescribeMacro[noindex]{\FXTargetLayout\ldots}\marg{type}\marg{target}\\
+% \DescribeMacro[noprint]{\FXTargetLayoutPlain}
+% \DescribeMacro[noprint]{\FXTargetLayoutColor}
+% Each target layout is implemented as a macro taking two mandatory arguments.
+% By convention, this macro is named \cs{FXTargetLayout}\meta{name}, for
+% instance \cs{FXTargetLayoutPlain}. \meta{type} is the note type. It can be
+% one of \texttt{note}, \texttt{warning}, \texttt{error} and \texttt{fatal}.
+% \meta{target} is the textual target.
+%
+% \subsection{Creating new layouts}
+% Creating a new layout first requires that you write new layout macros as
+% described in the previous section. Once you've done that, the next step is
+% to make \fx aware of this addition. This is called ``registering'' a layout.
+%
+% \subsubsection{Registering a new annotation layout}
+% \paragraph{Early \vs late layouts} Normally, \fx typesets your annotations
+% at the current position in the text, using a sensible order for built-in
+% layouts. For instance, the \texttt{footnote} layout, if active, is performed
+% before the \texttt{inline} one, so that the footnote mark is sticked to the
+% preceding text and not to the annotation. When using targeted commands or
+% environments, the situation is a bit more complex: some layouts make more
+% sense at the beginning of the textual target, and some others at the end.
+% The former ones are called ``early layouts'' and the later ones are called
+% ``late layouts''. A typical example of an early layout is the
+% \texttt{margin} one: if you're highlighting a long portion of text, it is
+% more convenient to see the marginal note appear near the top of that text,
+% rather than near the end of it (a nice illustration of this is to combine
+% the \texttt{changebar} target layout and \texttt{margin} annotation layout).
+% As for built-in layouts, only the \texttt{margin} and \texttt{marginclue}
+% ones are early. All others are late. When you create a new layout, you need
+% to decide whether it is an early or a late one.
+%
+% \paragraph{Registering late layouts}
+% \begin{sloppypar}
+% \DescribeMacro{\FXRegisterLayout}\oarg{boolfunc}\marg{name}\marg{macro}\\
+% In order to register a late annotation layout with \fx, use the command
+% \cs{FXRegisterLayout}. This macro has two mandatory arguments: the layout
+% \meta{name} (at least 3 characters long) and the associated layout
+% \meta{macro}. For instance, the \texttt{inline} layout is registered like
+% this:
+% \end{sloppypar}
+% \begin{verbatim}
+% \FXRegisterLayout{inline}{\FXLayoutInline}
+% \end{verbatim}
+% The first (optional) argument may provide code that will be executed when
+% the layout is activated (it is used for instance to implement mutual
+% exclusion between the \texttt{margin} and \texttt{marginclue} layouts. Once
+% registered, the new layout gets a boolean option \meta{name} and is also
+% recognized by the \texttt{layout} and \texttt{morelayout} options, as well
+% as by the \cs{fxuselayouts} command as \meta{name}.
+%
+% \paragraph{Registering early layouts}
+% \DescribeMacro{\FXRegisterLayout*}\oarg{boolfunc}\marg{name}\marg{macro}\\
+% In order to register an early annotation layout with \fx, use the starred
+% form of \cs{FXRegisterLayout}. Everything else behaves the same.
+%
+% \paragraph{Providing a layout}
+% \DescribeMacro{\FXProvidesLayout}\marg{name}\oarg{release information}\\
+% If you want to save your layout externally, you need to store it in a file
+% named \texttt{fxlayout}\meta{name}\texttt{.sty} and advertise it by calling
+% \cs{FXProvidesLayout}. It will then be recognized by the \cs{fxloadlayouts}
+% command as \meta{name}.
+%
+% \subsubsection{Registering a new environment layout}
+% \begin{sloppypar}
+% \DescribeMacro{\FXRegisterEnvLayout}\marg{name}\marg{begin}\marg{end}\\
+% In order to register a new environment layout with \fx, use the command
+% \cs{FXRegisterEnvLayout}. This macro has three mandatory arguments: the
+% layout \meta{name} and the associated \meta{begin} and \meta{end} macros.
+% For instance, the \texttt{color} layout is registered like this:
+% \end{sloppypar}
+% \begin{verbatim}
+% \FXRegisterEnvLayout{color}{\FXEnvLayoutColorBegin}{\FXEnvLayoutColorEnd}
+% \end{verbatim}
+% Once registered, the new layout is recognized by the \texttt{envlayout}
+% option and by the \cs{fxuseenvlayout} command as \meta{name}.
+%
+% \noindent
+% \DescribeMacro{\FXProvidesEnvLayout}\marg{name}\oarg{release information}\\
+% If you want to save your layout externally, you need to store it in a file
+% named \texttt{fxenvlayout}\meta{name}\texttt{.sty} and advertise it by
+% calling \cs{FXProvidesEnvLayout}. It will then be recognized by the
+% \cs{fxloadenvlayouts} commands as \meta{name}.
+%
+% \subsubsection{Registering a new target layout}
+% \begin{sloppypar}
+% \DescribeMacro{\FXRegisterTargetLayout}\marg{name}\marg{macro}\\
+% In order to register a new target layout with \fx, use the command
+% \cs{FXRegisterTargetLayout}. This macro has two mandatory arguments: the
+% layout \meta{name} and the associated \meta{macro}. For instance, the
+% \texttt{color} layout is registered like this:
+% \end{sloppypar}
+% \begin{verbatim}
+% \FXRegisterTargetLayout{color}{\FXTargetLayoutColor}
+% \end{verbatim}
+% Once registered, the new layout is recognized by the \texttt{targetlayout}
+% option and by the \cs{fxusetargetlayout} as \meta{name}.
+%
+% \noindent
+% \DescribeMacro{\FXProvidesTargetLayout}\marg{name}\oarg{release
+% information}\\
+% If you want to save your layout externally, you need to store it in a file
+% named \texttt{fxtargetlayout}\meta{name}\texttt{.sty} and advertise it by
+% calling \cs{FXProvidesTargetLayout}. It will then be recognized by the
+% \cs{fxloadtargetlayouts} commands as \meta{name}.
+%
+% \subsection{Creating a new theme}
+% Creating a new theme may involve anything from using (by way of
+% \cs{fxsetup}) or modifying existing layouts, to providing new ones. If your
+% new theme has specific layouts, you may consider writing them in seperate
+% files as described before, in order to make them more generally available.
+%
+% \noindent
+% \DescribeMacro{\FXRequireLayout}
+% \DescribeMacro{\FXRequireEnvLayout}
+% \DescribeMacro{\FXRequireTargetLayout}\marg{name}\\
+% In order to use an external layout in a theme, use the commands
+% \cs{FXRequire*Layout} and give them the layout's name as argument.
+%
+% \noindent
+% \DescribeMacro{\FXProvidesTheme}\marg{name}\oarg{release information}\\
+% A theme should be saved in a file named
+% \texttt{fxtheme}\meta{name}\texttt{.sty} and advertised by calling
+% \cs{FXProvidesTheme}. It will then be recognized by the \texttt{theme}
+% option and the \cs{fxusetheme} command.
%
% \subsection{Internationalization}
-% \DescribeEnv{english}
-% \DescribeEnv{french}
-% \DescribeEnv{francais}
-% \DescribeEnv{spanish}
-% \DescribeEnv{italian}
-% \DescribeEnv{german}
-% \DescribeEnv{ngerman}
-% \DescribeEnv{danish}
-% \DescribeEnv{croatian}
-% \fixme{} currently supports English, French, Spanish, Italian, German,
-% Danish and Croatian. You can select the language you want to use by passing
-% the corresponding option (these options are usually given directly to
-% |\documentclass{}| which in turn passes them to all packages). The
-% \texttt{french} and \texttt{francais} options are synonyms. The
-% \texttt{german} and \texttt{ngerman} options are currently equivalent.\par
-% If you want a finer grain on the language-dependent parts of \fixme{}, the
-% following macros are provided and can be redefined.\par
-% \DescribeMacro{\fixmenoteprefix}
-% \DescribeMacro{\fixmewarningprefix}
-% \DescribeMacro{\fixmeerrorprefix}
-% \DescribeMacro{\fixmefatalprefix}
-% \DescribeMacro{\fixmelogo}
-% The |\fixme*prefix| macros define the prefix for the four different note
-% levels. They make intensive use of the macro |\fixmelogo| ;-)\par
-% \DescribeMacro{\fixmeindexname}
-% \DescribeMacro{\fixmenoteindexname}
-% \DescribeMacro{\fixmewarningindexname}
-% \DescribeMacro{\fixmeerrorindexname}
-% \DescribeMacro{\fixmefatalindexname}
-% The macro |\fixmeindexname| defines the main \fixme{} index key. The other
-% ones define the different index subkeys for each note level. Please note that
-% an empty name for a subkey means that you don't actually want a subcategory
-% (that's the case by default for fatal errors). The corresponding notes will
-% then appear directly under the main \fixme{} key. For that reason, a non
-% empty subkey must end with an exclamation mark.\par
-% \DescribeMacro{\listfixmename}
-% |\listfixmename| defines the title for the ``list of fixmes'' section.
-%
-% ^^A\subsection{Counters}
-% ^^A \DescribeMacro{\thefixmecount}
-% ^^A \DescribeMacro{\thefixmenotecount}
-% ^^A \DescribeMacro{\thefixmewarningcount}
-% ^^A \DescribeMacro{\thefixmeerrorcount}
-% ^^A \DescribeMacro{\thefixmefatalcount}
-% ^^A As of \fixme{} version 2.0, four counters are provided. They count
-% ^^A respectively the total number of \fixme{} notes, and the number of
-% ^^A level-specific ones. At the end of processing, a \fixme{} usage summary is
-% ^^A displayed and logged.
-%
-%
-% \section{\auctex{} support}
-% \auctex{} is a powerful major mode for editing \TeX{} documents in
-% \textsf{Emacs} or \textsf{XEmacs}. In particular, it provides automatic
-% completion of macro names once they are known. \fixme{} supports \auctex{}
-% by providing a style file named \texttt{fixme.el} which contains \auctex{}
-% definitions for the relevant macros. This file should be installed in a
-% place where \auctex{} can find it (usually in a subdirectory of your
-% \LaTeX{} styles directory). Please refer to the \auctex{} documentation for
-% more information on this.
-%
-% \section{Changes}
+% \DescribeMacro[noindex]{\fx\ldots name}
+% \DescribeMacro[noindex]{\fx\ldots sname}
+% \DescribeMacro[noprint]{\fxenglishnotename}
+% \DescribeMacro[noprint]{\fxenglishnotesname}
+% \DescribeMacro[noprint]{\fxenglishwarningname}
+% \DescribeMacro[noprint]{\fxenglishwarningsname}
+% \DescribeMacro[noprint]{\fxenglisherrorname}
+% \DescribeMacro[noprint]{\fxenglisherrorsname}
+% \DescribeMacro[noprint]{\fxenglishfatalname}
+% \DescribeMacro[noprint]{\fxenglishfatalsname}
+% \DescribeMacro[noprint]{\fxfrenchnotename}
+% \DescribeMacro[noprint]{\fxfrenchnotesname}
+% \DescribeMacro[noprint]{\fxfrenchwarningname}
+% \DescribeMacro[noprint]{\fxfrenchwarningsname}
+% \DescribeMacro[noprint]{\fxfrencherrorname}
+% \DescribeMacro[noprint]{\fxfrencherrorsname}
+% \DescribeMacro[noprint]{\fxfrenchfatalname}
+% \DescribeMacro[noprint]{\fxfrenchfatalsname}
+% \DescribeMacro[noprint]{\fxspanishnotename}
+% \DescribeMacro[noprint]{\fxspanishnotesname}
+% \DescribeMacro[noprint]{\fxspanishwarningname}
+% \DescribeMacro[noprint]{\fxspanishwarningsname}
+% \DescribeMacro[noprint]{\fxspanisherrorname}
+% \DescribeMacro[noprint]{\fxspanisherrorsname}
+% \DescribeMacro[noprint]{\fxspanishfatalname}
+% \DescribeMacro[noprint]{\fxspanishfatalsname}
+% \DescribeMacro[noprint]{\fxitaliannotename}
+% \DescribeMacro[noprint]{\fxitaliannotesname}
+% \DescribeMacro[noprint]{\fxitalianwarningname}
+% \DescribeMacro[noprint]{\fxitalianwarningsname}
+% \DescribeMacro[noprint]{\fxitalianerrorname}
+% \DescribeMacro[noprint]{\fxitalianerrorsname}
+% \DescribeMacro[noprint]{\fxitalianfatalname}
+% \DescribeMacro[noprint]{\fxitalianfatalsname}
+% \DescribeMacro[noprint]{\fxgermannotename}
+% \DescribeMacro[noprint]{\fxgermannotesname}
+% \DescribeMacro[noprint]{\fxgermanwarningname}
+% \DescribeMacro[noprint]{\fxgermanwarningsname}
+% \DescribeMacro[noprint]{\fxgermanerrorname}
+% \DescribeMacro[noprint]{\fxgermanerrorsname}
+% \DescribeMacro[noprint]{\fxgermanfatalname}
+% \DescribeMacro[noprint]{\fxgermanfatalsname}
+% \DescribeMacro[noprint]{\fxdanishnotename}
+% \DescribeMacro[noprint]{\fxdanishnotesname}
+% \DescribeMacro[noprint]{\fxdanishwarningname}
+% \DescribeMacro[noprint]{\fxdanishwarningsname}
+% \DescribeMacro[noprint]{\fxdanisherrorname}
+% \DescribeMacro[noprint]{\fxdanisherrorsname}
+% \DescribeMacro[noprint]{\fxdanishfatalname}
+% \DescribeMacro[noprint]{\fxdanishfatalsname}
+% \DescribeMacro[noprint]{\fxcroatiannotename}
+% \DescribeMacro[noprint]{\fxcroatiannotesname}
+% \DescribeMacro[noprint]{\fxcroatianwarningname}
+% \DescribeMacro[noprint]{\fxcroatianwarningsname}
+% \DescribeMacro[noprint]{\fxcroatianerrorname}
+% \DescribeMacro[noprint]{\fxcroatianerrorsname}
+% \DescribeMacro[noprint]{\fxcroatianfatalname}
+% \DescribeMacro[noprint]{\fxcroatianfatalsname}
+% \fx's language control has been described in section
+% \sectionref{sec:manual:i18n}. For every supported language \meta{lang}, a
+% number of macros define the language-dependent part of \fx. The commands
+% \cs{fx}\meta{lang}\texttt{notename}, \cs{fx}\meta{lang}\texttt{notesname},
+% and their equivalent for the other note levels define the singular and
+% plural forms of the note names.\\
+% \DescribeMacro[noindex]{\...listfixmename}
+% \DescribeMacro[noprint]{\englishlistfixmename}
+% \DescribeMacro[noprint]{\frenchlistfixmename}
+% \DescribeMacro[noprint]{\spanishlistfixmename}
+% \DescribeMacro[noprint]{\italianlistfixmename}
+% \DescribeMacro[noprint]{\germanlistfixmename}
+% \DescribeMacro[noprint]{\danishlistfixmename}
+% \DescribeMacro[noprint]{\croatianlistfixmename}
+% The title for the list of fixmes is defined by the command
+% \cs{}\meta{lang}\texttt{listfixmename}.
+%
+% All of these commands may be renewed, and their values will be honored by
+% \fx in all situations, including potential language changes across the
+% document.
+%
+% \section{History\label{sec:manual:history}}
% \begin{itemize}
-% \item[v3.4] |\fixme|, |\fxerror|, |\fxwarning| and |\fxnote| are now robust,
-% thanks to Will Robertson.\\
-% Fix incompatibility with KOMA-Script classes version of |\@starttoc| when
-% the lox file is inexistent, reported by Philipp Stephani.
+% \item[v4.0] Support for collaborative annotations, suggested by Michael
+% Kubovy.\\
+% Support for ``targeted'' notes and environments (highlighting a portion of
+% text), suggested by Mark Edgington.\\
+% Support for ``floating notes'' (not specific to any portion of text),
+% suggested by Rasmus Villemoes.\\
+% Support for alternative layout autoswitch in \TeX's inner mode, suggested
+% by Will Robertson.\\
+% Support for automatic language tracking in multilingual documents.\\
+% Support for themes.\\
+% Extended support for user-provided layouts.\\
+% Support for \texttt{key=value} argument syntax in the whole user
+% interface.\\
+% New command \cs{fxsetup}.\\
+% Homogenize the log and console messages.\\
+% Heavy internals refactoring.
+% \item[v3.4] \cs{fixme}, \cs{fxerror}, \cs{fxwarning} and \cs{fxnote} are now
+% robust, thanks to Will Robertson.\\
+% Fix incompatibility with \komascript classes version of \cs{@starttoc}
+% when the lox file is inexistent, reported by Philipp Stephani.
% \item[v3.3] Document incompatibility between marginal layout and the ACM
% SIG classes, reported by Jochen Wuttke.\\
% Honor \texttt{twoside} option in marginal layout, suggested by Jens
% Remus.\\
-% Support for KOMA-Script classes version 2006/07/30 v2.95b,
-% suggested by Jens Remus.\\
+% Support for \komascript classes version 2006/07/30 v2.95b, suggested by
+% Jens Remus.\\
% Documentation improvements suggested by Brian van den Broek.\\
% Fix incompatibility with \texttt{amsart} reported by Lars Madsen:
% \cs{@starttoc} takes two arguments.\\
-% Fix bug reported by Stefan Mann: a typo in the |\fixme@footnotetrue| macro
-% name.
+% Fix bug reported by Stefan Mann: a typo in the \cs{fixme@footnotetrue}
+% macro name.
% \item[v3.2] Added the marginclue layout option which only signals a fixme in
% the margin, withtout the actual contents.\\
% Support for Croatian thanks to Marcel Maretic |<marcel@fsb.hr>|.\\
@@ -397,182 +1446,316 @@
% contents of lox file.
% \item[v3.1] Fix bug reported by Arnold Beckmann: the environments were
% visible in final mode.
-% \item[v3.0] Added environments corresponding to the note insertion
+% \item[v3.0] Added environments corresponding to the annotation
% commands.\\
-% Added an optional first argument to the note insertion commands
+% Added an optional first argument to the annotation commands
% to change the layout locally.\\
% Fix bug reported by Akim Demaille: marginal notes could mess up the
% document's layout by flushing it right.
% \item[v2.2] New option \texttt{silent} to suppress notes logging.\\
% Support for Danish thanks to Kim Rud Bille |<krbi01@control.auc.dk>|.
-% \item[v2.1] Use |\nobreakspace| instead of the tilda character. This avoids
+% \item[v2.1] Use \cs{nobreakspace} instead of the tilda character. This avoids
% conflicts with Babel in Spanish environments.\\
% Fix bug reported by Knut Lickert: index entries were unconditionally built.
% \item[v2.0] New feature: note levels.\\
-% New feature: \fixme{} note counters and usage summary.\\
+% New feature: \fx note counters and usage summary.\\
% Suggestions from Kasper B. Graversen |<kbg@dkik.dk>|.\\
% Support for Spanish thanks to Agust\'in Mart\'in |<agusmba@terra.es>|
% \item[v1.5] New appearance option: \texttt{inline}.
-% \item[v1.4] Support for the koma-script classes.\\
-% Fix bug reported by Ulf Jaenicke-Roessler: the |\listoffixmes| command
-% didn't work when called before the first \fixme{} note.
+% \item[v1.4] Support for the \komascript classes.\\
+% Fix bug reported by Ulf Jaenicke-Roessler: the \cs{listoffixmes} command
+% didn't work when called before the first \fx note.
% \item[v1.3] Support for Italian thanks to Riccardo Murri
% |<murri@phc.unipi.it>|.
% \item[v1.2] Support for German thanks to Harald Harders
% |<h.harders@tu-bs.de>|.
% \end{itemize}
%
-% \StopEventually{\par Well, I think that's it. Enjoy using \fixme{}!
-% \vfill\hfill\small \packagecopyright{}.}
+% \StopEventually{\vfill\hfill\small \packagecopyright{}.}
%
-% \section{The Code}
-% \begin{macro}{\fixmelogo}
-% Here's the preamble:
-% \end{macro}
+% \section{Implementation}
+% \subsection{Preamble}
% \begin{macrocode}
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{fixme}[2009/07/16 v3.4
- Insert fixme notes in your documents]
+%<fixme>\NeedsTeXFormat{LaTeX2e}
+%<*header>
+\ProvidesPackage{fixme}[2009/09/21 v4.0 Insert fixme notes in your documents]
+%</header>
+% \end{macrocode}
+% Some required packages:
+% \begin{macrocode}
+%<*fixme>
\RequirePackage{ifthen}
\RequirePackage{verbatim}
+\RequirePackage{xkeyval}[2006/11/18]
-\newcommand*\fixmelogo{\textsf{FiXme}}
+%</fixme>
+% \end{macrocode}
+% \begin{macro}{\fixmelogo}
+% The \fx logo:
+% \begin{macrocode}
+%<*header>
+\newcommand\fixmelogo{\textsf{FiXme}}
+%</header>
% \end{macrocode}
-% \subsection{List macros}
-% \begin{macro}{\listoffixmes}
-% \begin{macro}{\listoffixmes@final}
-% \begin{macro}{\listoffixmes@draft}
-% |\listoffixmes| is empty by default. The |final| or |draft| options
-% will provide the proper definition. Lists are output in a document
-% class dependant fashion. Classes currently recognized are article,
-% report, book and their koma-script replacements.
-%
-% In order to prevent the List of Fixme's heading from being generated
-% when there are no fixmes, a test on the existence of the lox file is
-% performed. There's a slight bug left however: after removing the last
-% fixme, one ends up with an empty lox file, so the heading still
-% appear. Previously, this was done by checking if some fixmes were
-% given, but that was buggy: the list of fixme's could not appear before
-% the first fixme note\ldots I should try to detect whether the file is
-% empty.
-% \end{macro}
-% \end{macro}
% \end{macro}
+%
+% \subsection{Utilities}
+% \subsubsection{Miscellaneous}
+% \begin{macro}{\@fxpkginfo}
+% \begin{macro}{\@fxpkgwarning}
+% \marg{msg}\\
+% Issue a \fx package info or warning:
% \begin{macrocode}
-\let\l@fixme\l@figure
-\newcommand\listoffixmes{}
-\def\listoffixmes@final{}
-\def\listoffixmes@draft{%
- \IfFileExists{\jobname .lox}{%
- \@listoffixmes@pretoc%
- \@starttoc{lox}%
- \@listoffixmes@posttoc}{%
- \@starttoc{lox}}}
+%<*fixme>
+\newcommand\@fxpkginfo{\PackageInfo{FiXme}}
+\newcommand\@fxpkgwarning{\PackageWarning{FiXme}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\@fxpkgerror}
+% \marg{shortmsg}\marg{longmsg}\\
+% Issue a \fx package error:
+% \begin{macrocode}
+\newcommand\@fxpkgerror{\PackageError{FiXme}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{\texttt{xkeyval} related}
+% \begin{macro}{\@fxkeyifundefined}
+% \marg{families}\marg{keys}\marg{then}\marg{else}
+% \begin{macrocode}
+\newcommand\@fxkeyifundefined{\key@ifundefined[fx]}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@fxdefinekey}
+% \marg{family}\marg{key}\oarg{default}\marg{function}
+% \begin{macrocode}
+\newcommand\@fxdefinekey{\define@key[fx]}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@fxvoidkeyerror}
+% \marg{key}\marg{value}\\
+% Issue a \fx error about a void key misuse (see below):
+% \begin{macrocode}
+\newcommand*\@fxvoidkeyerror[2]{%
+ \@fxpkgerror{misuse of key '#1'}{%
+ You have given the key '#1' the argument '#2' but it takes
+ none.\MessageBreak
+ Type X to quit, fix that key and re-run LaTeX.\MessageBreak}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@fxdefinevoidkey}
+% \marg{family}\marg{name}\marg{func}\\
+% A \fx ``void key'' is an \texttt{xkeyval} key that doesn't expect any
+% argument.
+% \begin{macrocode}
+\newcommand*\@fxdefinevoidkey[3]{%
+ \define@key[fx]{#1}{#2}[]{%
+ \ifthenelse{\equal{##1}{}}{%
+ #3}{%
+ \@fxvoidkeyerror{#2}{##1}}}}
+
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@fxdefineboolkey}
+% \oarg{func}\marg{family}\marg{name}\\
+% A \fx ``boolean key'' is like an \texttt{xkeyval} one, with the
+% addition that for every such \texttt{key}, there is a \texttt{nokey} void
+% key counterpart.
+% \begin{macrocode}
+\newcommand*\@fxdefineboolkey[3][]{%
+ \define@boolkey[fx]{#2}{#3}[true]{#1}
+ \@fxdefinevoidkey{#2}{no#3}{\@nameuse{fx@#2@#3}{false}}}
% \end{macrocode}
-% The \texttt{amsbook} and \texttt{amsart} classes have the very ugly idea of
-% redefining the \cs{@starttoc} command to take two arguments. Therefore, I
-% need to provide a specific version of the \cs{listoffixmes} macro:
+% \end{macro}
+% \begin{macro}{\@fxdefinecmdkey}
+% \marg{family}\oarg{mp}\marg{key}\oarg{default}\marg{function}
% \begin{macrocode}
-\def\listoffixmes@draft@ams{\@starttoc{lox}\listfixmename}
+\newcommand\@fxdefinecmdkey{\define@cmdkey[fx]}
% \end{macrocode}
-% \begin{macro}{\listfixmename}
-% In order to redefine the list title, users have to call |\renewcommand|.
-% I don't like this much: it would be cleaner to provide a real command
-% that redefines the title internally. However, I'll stick with the
-% current scheme because it is consistent with the rest of \LaTeXe's lists.
% \end{macro}
+% \begin{macro}{\@fxdefinechoicekey}
+% \marg{family}\marg{key}\oarg{bin}\marg{alternatives}\ignorespaces
+% \oarg{default}\marg{function}
% \begin{macrocode}
-\newcommand*\listfixmename{}
+\newcommand\@fxdefinechoicekey{\define@choicekey[fx]}
% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@fxsetkeys}
+% \marg{families}\oarg{na}\marg{keys}
+% \begin{macrocode}
+\newcommand\@fxsetkeys{\setkeys[fx]}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@fxpresetkeys}
+% \marg{families}\marg{head keys}\marg{tail keys}
+% \begin{macrocode}
+%% Note: currently unused
+%% \newcommand\@fxpresetkeys{\presetkeys[fx]}
+% \end{macrocode}
+% \end{macro}
%
-% \subsubsection{Standard classes}
-% \begin{macro}{\listoffixmes@pretoc@article}
-% \begin{macro}{\listoffixmes@posttoc@article}
-% Let's start with the article version:
-% \end{macro}
+% \subsection{List macros}
+% \subsubsection{Contents lines\label{sec:code:contentsline}}
+% \begin{macro}{\l@fixme}
+% We use the same layout as for the list of figures.
+% \begin{macrocode}
+\let\l@fixme\l@figure
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@fxdottedtocline}
+% \marg{tocdepth}\marg{indent}\marg{numwidth}\marg{contents}\marg{target}\\
+% This macro is copied almost verbatim from \LaTeX's core. The intent is to
+% do a similar layout, but replacing the last argument, normally a page
+% number, by arbitrary text (in our case, a note's target). The original
+% macro defines a restricted width to typeset the page number which is much
+% too short for us, so we just let the \meta{target} text take all the space
+% it needs.
+% \begin{macrocode}
+\newcommand*\@fxdottedtocline[5]{%
+ \ifnum #1>\c@tocdepth \else
+ \vskip \z@ \@plus.2\p@
+ {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
+ \parindent #2\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima #3\relax
+ \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
+ {#4}\nobreak
+ \leaders\hbox{$\m@th
+ \mkern \@dotsep mu\hbox{.}\mkern \@dotsep
+ mu$}\hfill
+ \nobreak
+ #5\par}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\fxcontentsline}
+% \marg{contents}\marg{target}\\
+% Similar to \LaTeX's \cs{contentsline} macro, but temporarily bind
+% \cs{@dottedtocline} to our own version. The nice thing about this
+% implementation is that we can still use \cs{l@fixme} (remember that it is
+% bound to \cs{l@figure}) without exactly knowing what its definition is.
+% This macro is at the user level because \cs{contentsline} is, but it is
+% not currently documented in the user manual.
+% \begin{macrocode}
+\newcommand*\fxcontentsline[2]{%
+ \begingroup%
+ \let\@dottedtocline\@fxdottedtocline%
+ \l@fixme{#1}{#2}%
+ \endgroup}
+
+% \end{macrocode}
% \end{macro}
+% \begin{macro}{\fxaddcontentsline}
+% \marg{contents}\\
+% Wrapper around \LaTeX's \cs{addcontentsline} macro to handle the
+% \texttt{target} option. If a specific target is provided, we can't use the
+% normal \cs{addcontentsline} macro for reasons explained above, so we use
+% our own version of \cs{contentsline} instead. This macro is at the user
+% level because \cs{addcontentsline} is, but it is not currently documented
+% in the user manual.
+% \begin{macrocode}
+\newcommand*\fxaddcontentsline[1]{%
+ \ifthenelse{\equal{\cmdfx@note@target}{thepage}}{%
+ \addcontentsline{lox}{fixme}{#1}}{%
+ \addtocontents{lox}{\protect\fxcontentsline{#1}{\cmdfx@note@target}}}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{List headers}
+% Lists are output in a document class dependant fashion. Classes currently
+% recognized are \texttt{article}, \texttt{report}, \texttt{book} and their
+% \komascript replacements.
+%
+% \paragraph{\texttt{article} version}
+% \begin{macro}{\@lox@prtc@article}
+% \begin{macro}{\@lox@psttc@article}
+% \mbox{}
% \begin{macrocode}
-\def\@listoffixmes@pretoc@article{%
- \section*{\listfixmename%
- \@mkboth{\MakeUppercase\listfixmename}{\MakeUppercase\listfixmename}}%
- }
-\def\@listoffixmes@posttoc@article{}
+\newcommand\@lox@prtc@article{%
+ \section*{\@fxlistfixmename%
+ \@mkboth{\MakeUppercase\@fxlistfixmename}{\MakeUppercase\@fxlistfixmename}}}
+\let\@lox@psttc@article\relax
% \end{macrocode}
-% \begin{macro}{\listoffixmes@pretoc@report}
-% \begin{macro}{\listoffixmes@posttoc@report}
-% Here's the report version:
-% \end{macro}
% \end{macro}
+% \end{macro}
+% \paragraph{\texttt{report} version}
+% \begin{macro}{\@lox@prtc@report}
+% \begin{macro}{\@lox@psttc@report}
+% \mbox{}
% \begin{macrocode}
-\def\@listoffixmes@pretoc@report{%
+\newcommand\@lox@prtc@report{%
\if@twocolumn
\@restonecoltrue\onecolumn
\else
\@restonecolfalse
\fi
- \chapter*{\listfixmename%
- \@mkboth{\MakeUppercase\listfixmename}{\MakeUppercase\listfixmename}}%
- }
-\def\@listoffixmes@posttoc@report{\if@restonecol\twocolumn\fi}
+ \chapter*{\@fxlistfixmename%
+ \@mkboth{\MakeUppercase\@fxlistfixmename}{\MakeUppercase\@fxlistfixmename}}}
+\newcommand\@lox@psttc@report{\if@restonecol\twocolumn\fi}
% \end{macrocode}
-% \begin{macro}{\listoffixmes@pretoc@book}
-% \begin{macro}{\listoffixmes@posttoc@book}
-% And here's the book version:
-% \end{macro}
% \end{macro}
+% \end{macro}
+% \paragraph{\texttt{book} version}
+% \begin{macro}{\@lox@prtc@book}
+% \begin{macro}{\@lox@psttc@book}
+% \mbox{}
% \begin{macrocode}
-\def\@listoffixmes@pretoc@book{%
+\newcommand\@lox@prtc@book{%
\if@twocolumn
\@restonecoltrue\onecolumn
\else
\@restonecolfalse
\fi
- \chapter*{\listfixmename%
- \@mkboth{\MakeUppercase\listfixmename}{\MakeUppercase\listfixmename}}%
- }
-\def\@listoffixmes@posttoc@book{\if@restonecol\twocolumn\fi}
+ \chapter*{\@fxlistfixmename%
+ \@mkboth{\MakeUppercase\@fxlistfixmename}{\MakeUppercase\@fxlistfixmename}}}
+\newcommand\@lox@psttc@book{\if@restonecol\twocolumn\fi}
% \end{macrocode}
+% \end{macro}
+% \end{macro}
%
-% \subsubsection{koma-script classes}
-% The code below (version 3.3) mimics KOMA-Script version 2006/07/30 v2.95b.
+% The code below (version 3.3) mimics \komascript version 2006/07/30 v2.95b.
% Older versions (using chapter*) are no longer supported because it is
% simpler that way, but if some people complain, I'll have to conditionalize
-% on the KOMA-Script version, which would be a PITA.
+% on the \komascript version, which would be a \textsc{pita}.
+% \begin{macro}{\lox@heading}
+% \mbox{}
% \begin{macrocode}
-\newcommand*\lox@heading{\float@listhead{\listfixmename}}
+\newcommand\lox@heading{\float@listhead{\@fxlistfixmename}}
% \end{macrocode}
-% \begin{macro}{\listoffixmes@pretoc@scrartcl}
-% \begin{macro}{\listoffixmes@posttoc@scrartcl}
-% Let's start with the scrartcl version:
-% \end{macro}
% \end{macro}
+% \paragraph{\texttt{scrartcl} version}
+% \begin{macro}{\@lox@prtc@scrartcl}
+% \begin{macro}{\@lox@psttc@scrartcl}
+% \mbox{}
% \begin{macrocode}
-\def\@listoffixmes@pretoc@scrartcl{%
+\newcommand\@lox@prtc@scrartcl{%
\begingroup%
\lox@heading%
- \setparsizes{0}{0}{\z@\@plus 1fil}\par@updaterelative
- }
-\def\@listoffixmes@posttoc@scrartcl{%
- \endgroup
- }
+ \setparsizes{0}{0}{\z@\@plus 1fil}\par@updaterelative}
+\let\@lox@psttc@scrartcl\endgroup
% \end{macrocode}
-% \begin{macro}{\listoffixmes@pretoc@scrreprt}
-% \begin{macro}{\listoffixmes@posttoc@scrreprt}
-% Here's the scrreprt version:
-% \end{macro}
% \end{macro}
+% \end{macro}
+% \paragraph{\texttt{scrreprt} version}
+% \begin{macro}{\@lox@prtc@scrreprt}
+% \begin{macro}{\@lox@psttc@scrreprt}
+% \mbox{}
% \begin{macrocode}
-\def\@listoffixmes@pretoc@scrreprt{%
+\newcommand\@lox@prtc@scrreprt{%
\begingroup%
\if@twocolumn
\@restonecoltrue\onecolumn
@@ -580,21 +1763,20 @@
\@restonecolfalse
\fi
\lox@heading%
- \setparsizes{0}{0}{\z@\@plus 1fil}\par@updaterelative
- }
-\def\@listoffixmes@posttoc@scrreprt{%
+ \setparsizes{0}{0}{\z@\@plus 1fil}\par@updaterelative}
+\newcommand\@lox@psttc@scrreprt{%
\if@restonecol\twocolumn\fi
- \endgroup
- }
+ \endgroup}
% \end{macrocode}
-% \begin{macro}{\listoffixmes@pretoc@scrbook}
-% \begin{macro}{\listoffixmes@posttoc@scrbook}
-% And here's the scrbook version:
-% \end{macro}
% \end{macro}
+% \end{macro}
+% \paragraph{\texttt{scrbook} version}
+% \begin{macro}{\@lox@prtc@scrbook}
+% \begin{macro}{\@lox@psttc@scrbook}
+% \mbox{}
% \begin{macrocode}
-\def\@listoffixmes@pretoc@scrbook{%
+\newcommand\@lox@prtc@scrbook{%
\begingroup%
\if@twocolumn
\@restonecoltrue\onecolumn
@@ -602,577 +1784,2136 @@
\@restonecolfalse
\fi
\lox@heading%
- \setparsizes{0}{0}{\z@\@plus 1fil}\par@updaterelative
-}
-\def\@listoffixmes@posttoc@scrbook{%
+ \setparsizes{0}{0}{\z@\@plus 1fil}\par@updaterelative}
+\newcommand\@lox@psttc@scrbook{%
\if@restonecol\twocolumn\fi
- \endgroup
-}
+ \endgroup}
% \end{macrocode}
+% \end{macro}
+% \end{macro}
%
-% \subsection{Layout macros}
-% \begin{macro}{\FXInline}
-% \begin{macro}{\FXMargin}
-% \begin{macro}{\FXMarginCLue}
-% \begin{macro}{\FXFootnote}
-% The macros to implement different layouts for the fixme notes:
-% \end{macro}
-% \end{macro}
-% \end{macro}
+% \subsubsection{Status/class-dependent implementation}
+% \begin{macro}{\lox@final}
+% \begin{macro}{\lox@draft}
+% In order to prevent the List of Fixme's heading from being generated when
+% there are no \fx notes, a test on the existence of the \texttt{lox} file
+% is performed. There's a slight bug left however: after removing the last
+% fixme note, one ends up with an empty \texttt{lox} file, so the heading
+% still appears. Previously, this was done by checking if some \fx notes
+% were given, but that was buggy: the List of Fixme's could not appear
+% before the first fixme note\ldots I should try to detect whether the file
+% is empty.
+% \begin{macrocode}
+\let\lox@final\relax
+\newcommand\lox@draft{%
+ \IfFileExists{\jobname .lox}{%
+ \@lox@prtc%
+ \@starttoc{lox}%
+ \@lox@psttc}{%
+ \@starttoc{lox}}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\lox@draft@ams}
+% The \texttt{amsbook} and \texttt{amsart} classes have the very ugly idea
+% of redefining the \cs{@starttoc} macro to take two arguments. Therefore, I
+% need to provide a specific version of the \cs{listoffixmes} macro:
+% \begin{macrocode}
+\newcommand\lox@draft@ams{\@starttoc{lox}\@fxlistfixmename}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Faces}
+% \begin{macro}{\fxsetface}
+% \marg{name}\marg{value}
+% \begin{macrocode}
+\newcommand*\fxsetface[2]{\@fxsetkeys{face}{#1face=#2}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@fxnewface}
+% \oarg{default}\marg{name}\\
+% A face is just a command key:
+% \begin{macrocode}
+\newcommand*\@fxnewface[2][]{%
+ \@fxdefinecmdkey{face}{#2face}{}%
+ \fxsetface{#2}{#1}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@fxuseface}
+% \marg{name}
+% \begin{macrocode}
+\newcommand*\@fxuseface[1]{\@nameuse{cmdfx@face@#1face}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Annotation layouts}
+% \begin{option}{multiuser}
+% \begin{option}{singleuser}
+% \begin{option}{mode}
+% These options specify whether \fx should function in standalone or
+% collaborative mode, allowing the different layouts to tweak their output.
+% \begin{macrocode}
+\@fxdefineboolkey[%
+ \ifthenelse{\equal{#1}{true}}{%
+ \fx@mode@singleuserfalse}{%
+ \fx@mode@singleusertrue}]{%
+ mode}{multiuser}
+\@fxdefineboolkey[%
+ \ifthenelse{\equal{#1}{true}}{%
+ \fx@mode@multiuserfalse}{%
+ \fx@mode@multiusertrue}]{%
+ mode}{singleuser}
+\@fxdefinechoicekey{mode}{mode}{multiuser,singleuser}{\@fxsetkeys{mode}{#1}}
+
+% \end{macrocode}
+% \end{option}
+% \end{option}
+% \end{option}
+%
+% \subsubsection{Layout creation}
+% Separating between ``early'' and ``late'' layouts is needed in starred
+% context, that is, when we are using targeted commands or environments.
+% \begin{macro}{\@fxearlylayouts}
+% \begin{macro}{\@fxlatelayouts}
+% Comma-separated lists of available early and late layouts.
+% \begin{macrocode}
+\let\@fxearlylayouts\empty
+\let\@fxlatelayouts\empty
+% \end{macrocode}
+% \end{macro}
% \end{macro}
+% \begin{macro}{\FXProvidesLayout}
+% \marg{name}\oarg{release information}
% \begin{macrocode}
-\newcommand\FXInline[2]{%
- \textbf{#1}: \emph{#2}}
-\newcommand\FXMargin[2]{%
- \marginpar[\footnotesize\raggedleft\textbf{#1}: \emph{#2}]{%
- \footnotesize\raggedright\textbf{#1}: \emph{#2}}}
-\newcommand\FXMarginClue[1]{%
- \marginpar[\footnotesize\raggedleft\textbf{#1}~!]{%
- \footnotesize\raggedright\textbf{#1}~!}}
-\newcommand\FXFootnote[2]{%
- \footnote{\textbf{#1}: \emph{#2}}}
+\newcommand*\FXProvidesLayout[1]{\ProvidesPackage{fxlayout#1}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@FXRegisterLayout}
+% \marg{when}\oarg{boolfunc}\marg{name}\marg{funcname}\\
+% Register a new layout with \fx. This currently involves creating the
+% boolean layout option with an optional function argument, constructing the
+% translation macro to call the actual layout macro, and updating the
+% appropriate layout list (early or late). The translation macro can't be
+% \cs{let} to the real one, because themes might want to redefine latter.
+% \begin{macrocode}
+\def\@FXRegisterLayout#1[#2]#3#4{%
+ \@fxkeyifundefined{layout}{#3}{%
+ \@fxdefineboolkey[#2]{layout}{#3}%
+ \expandafter\def\csname @fxlayout@#3\endcsname{#4}%
+ \expandafter\ifx\csname @fx#1layouts\endcsname\empty%
+ \expandafter\g@addto@macro\csname @fx#1layouts\endcsname{#3}%
+ \else%
+ \expandafter\g@addto@macro\csname @fx#1layouts\endcsname{,#3}%
+ \fi}{%
+ \@fxpkgerror{layout '#3' already registered}{%
+ You have called \string\FXRegisterLayout\space with a name already
+ in use.\MessageBreak
+ If you want to modify an existing layout, renew its
+ command.\MessageBreak
+ Otherwise, you must choose a different name.}}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\FXRegisterLayout}
+% \begin{macro}{\FXRegisterLayout*}
+% \meta{\texttt{*}}\oarg{boolfunc}\marg{name}\marg{funcname}\\
+% And the use-level interface:
+% \begin{macrocode}
+\newcommand\FXRegisterLayout{%
+ \@ifstar{%
+ \@ifnextchar[%]
+ {\@FXRegisterLayout{early}}{\@FXRegisterLayout{early}[]}}{%
+ \@ifnextchar[%]
+ {\@FXRegisterLayout{late}}{\@FXRegisterLayout{late}[]}}}
% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Built-in layouts}
+% Let's deal start with the early layouts, and continue with the late ones.
+% \paragraph{Margin}
+% \begin{layout}[noprint]{margin}
+% \begin{face}{margin}
+% \mbox{}
+% \begin{macrocode}
+\@fxnewface{margin}
+% \end{macrocode}
+% \end{face}
+% \begin{macro}{\FXLayoutMargin}
+% \marg{type}\marg{note}\marg{author}
+% \begin{macrocode}
+\newcommand*\FXLayoutMargin[3]{%
+ \marginpar[%
+ \raggedleft\@fxuseface{margin}\ignorespaces#3 \fxnotename{#1}: #2]{%
+ \raggedright\@fxuseface{margin}\ignorespaces#3 \fxnotename{#1}: #2}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@fxlayout@margin}
+% \begin{booleanoption}{margin}
+% \mbox{}
+% \begin{macrocode}
+\FXRegisterLayout*[%
+ \ifthenelse{\boolean{fx@layout@margin}\and\boolean{fx@layout@marginclue}}{%
+ \@fxpkgwarning{%
+ marginal notes requested;\MessageBreak
+ turning marginal clues off}%
+ \fx@layout@marginclue{false}}]{%
+ margin}{\FXLayoutMargin}
+% \end{macrocode}
+% \end{booleanoption}
+% \end{macro}
+% \end{layout}
+%
+% \paragraph{Margin clue}
+% \begin{layout}[noprint]{marginclue}
+% \begin{macro}{\FXLayoutMarginCLue}
+% \marg{type}\marg{note}\marg{author}
+% \begin{macrocode}
+\newcommand*\FXLayoutMarginClue[3]{%
+ \marginpar[%
+ \raggedleft\@fxuseface{margin}\ignorespaces#3 \fxnotename{#1}!]{%
+ \raggedright\@fxuseface{margin}\ignorespaces#3 \fxnotename{#1}!}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@fxlayout@marginclue}
+% \begin{booleanoption}{marginclue}
+% \mbox{}
+% \begin{macrocode}
+\FXRegisterLayout*[%
+ \ifthenelse{\boolean{fx@layout@marginclue}\and\boolean{fx@layout@margin}}{%
+ \@fxpkgwarning{%
+ marginal clues requested;\MessageBreak
+ turning marginal notes off}%
+ \fx@layout@margin{false}}]{%
+ marginclue}{\FXLayoutMarginClue}
+% \end{macrocode}
+% \end{booleanoption}
+% \end{macro}
+% \end{layout}
+%
+% \paragraph{Footnote}
+% \begin{layout}[noprint]{footnote}
+% \begin{macro}{\FXLayoutFootnote}
+% \marg{type}\marg{note}\marg{author}
+% \begin{macrocode}
+\newcommand*\FXLayoutFootnote[3]{%
+ \footnote{\ignorespaces#3 \fxnotename{#1}: #2}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@fxlayout@footnote}
+% \begin{booleanoption}{footnote}
+% \mbox{}
+% \begin{macrocode}
+\FXRegisterLayout{footnote}{\FXLayoutFootnote}
+% \end{macrocode}
+% \end{booleanoption}
+% \end{macro}
+% \end{layout}
+%
+% \paragraph{Inline}
+% \begin{layout}[noprint]{inline}
+% \begin{face}{inline}
+% \mbox{}
+% \begin{macrocode}
+\@fxnewface{inline}
+% \end{macrocode}
+% \end{face}
+% \begin{macro}{\FXLayoutInline}
+% \marg{type}\marg{note}\marg{author}
+% \begin{macrocode}
+\newcommand*\FXLayoutInline[3]{%
+ {\@fxuseface{inline}\ignorespaces#3 \fxnotename{#1}: #2}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@fxlayout@inline}
+% \begin{booleanoption}{inline}
+% \mbox{}
+% \begin{macrocode}
+\FXRegisterLayout{inline}{\FXLayoutInline}
+% \end{macrocode}
+% \end{booleanoption}
+% \end{macro}
+% \end{layout}
+%
+% \paragraph{Index}
+% \begin{layout}[noprint]{index}
% \begin{macro}{\fixmeindexname}
-% \begin{macro}{\FXIndex}
-% The macros for index generation:
-% \end{macro}
-% \end{macro}
-% \begin{macrocode}
-\newcommand*\fixmeindexname{}
-\newcommand\FXIndex[1]{%
- \index{***@\fixmeindexname:!#1}}
-
-% \end{macrocode}
-% \begin{macro}{\fixmefatalprefix}
-% \begin{macro}{\FiXmeInline}
-% \begin{macro}{\FiXmeMargin}
-% \begin{macro}{\FiXmeFootnote}
-% \begin{macro}{\FiXmeUser}
-% \begin{macro}{\FiXmeIndex}
-% \begin{macro}{\FiXmeInfo}
-% \begin{macro}{\FiXmeWarning}
-% Apart from |\fixmefatalprefix|, the following macros are kept
-% only to preserve backward compatibility. They are used only by
-% critical notes and are made to call the new versions by
-% default:
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \begin{macrocode}
-\newcommand*\fixmefatalprefix{}
-\newcommand\FiXmeInline[1]{\FXInline{\fixmefatalprefix}{#1}}
-\newcommand\FiXmeMargin[1]{\FXMargin{\fixmefatalprefix}{#1}}
-\newcommand\FiXmeFootnote[1]{\FXFootnote{\fixmefatalprefix}{#1}}
-\newcommand\FiXmeUser[1]{}
-\let\FiXmeUser\empty
-
-\newcommand\FiXmeIndex[1]{\FXIndex{#1}}
-\newcommand\FiXmeInfo[1]{}
-\newcommand\FiXmeWarning[1]{}
-
-% \end{macrocode}
-% Booleans that control which layouts are selected:
-% \begin{macrocode}
-\newif\iffixme@inline
-\newif\iffixme@margin
-\newif\iffixme@marginclue
-\newif\iffixme@footnote
-\newif\iffixme@user
-\newif\iffixme@index
-
-% \end{macrocode}
-% Setters for these booleans (some might required special treatment):
-% \begin{macrocode}
-\let\fixme@setinline\fixme@inlinetrue
-\def\fixme@setmargin{%
- \iffixme@marginclue%
- \PackageWarning{FiXme}{%
- Marginal notes requested; turning marginal clues off}%
- \fixme@margincluefalse%
- \fi%
- \fixme@margintrue}
-\def\fixme@setmarginclue{%
- \iffixme@margin%
- \PackageWarning{FiXme}{%
- Marginal clues requested; turning marginal notes off}%
- \fixme@marginfalse%
- \fi%
- \fixme@margincluetrue}
-\let\fixme@setfootnote\fixme@footnotetrue
-\let\fixme@setuser\fixme@usertrue
-\let\fixme@setindex\fixme@indextrue
-
-% \end{macrocode}
-% \begin{macro}{\fixme@text}
-% This macro implements the common (textual) part of all notes:
-% \end{macro}
-% \begin{macrocode}
-\def\fixme@text#1#2{%
- \iffixme@inline\FXInline{#1}{#2}\fi%
- \iffixme@margin\FXMargin{#1}{#2}\fi%
- \iffixme@marginclue\FXMarginClue{#1}\fi%
- \iffixme@footnote\FXFootnote{#1}{#2}\fi%
- \iffixme@user\FXUser{#1}{#2}\fi}
-
-% \end{macrocode}
-% Options that control which layouts are selected:
-% \begin{macrocode}
-\DeclareOption{inline}{\fixme@setinline}
-\DeclareOption{noinline}{\fixme@inlinefalse}
-\DeclareOption{margin}{\fixme@setmargin}
-\DeclareOption{nomargin}{\fixme@marginfalse}
-\DeclareOption{marginclue}{\fixme@setmarginclue}
-\DeclareOption{nomarginclue}{\fixme@margincluefalse}
-\DeclareOption{footnote}{\fixme@footnotetrue}
-\DeclareOption{nofootnote}{\fixme@footnotefalse}
-\DeclareOption{user}{\fixme@usertrue}
-\DeclareOption{nouser}{\fixme@userfalse}
-\DeclareOption{index}{\fixme@indextrue}
-\DeclareOption{noindex}{\fixme@indexfalse}
-
-% \end{macrocode}
-% The following options are here for backward compatibility, but are not used
-% anymore:
-% \begin{macrocode}
-\DeclareOption{info}{}
-\DeclareOption{noinfo}{}
-\DeclareOption{warning}{}
-\DeclareOption{nowarning}{}
-
-% \end{macrocode}
-%
-% \subsection{Logging macros}
-% \begin{macro}{\FXNote}
-% \begin{macro}{\FXWarning}
-% \begin{macro}{\FXerror}
-% \begin{macro}{\FXFatal}
-% The macros forcontrolling logging (log file and terminal output):
-% \end{macro}
-% \end{macro}
-% \end{macro}
+% \mbox{}
+% \begin{macrocode}
+\newcommand\fixmeindexname{\fixmelogo}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@wrindex}
+% \marg{contents}\\
+% A replacement for \LaTeX's standard \cs{@wrindex} macro to deal with the
+% \texttt{target} option. When given, it is supposed to replace the page
+% number, just as in the list of fixmes.
+% \begin{macrocode}
+\def\@wrindex#1{%
+ \ifthenelse{\equal{\cmdfx@note@target}{thepage}}{%
+ \protected@write\@indexfile{}{\string\indexentry{#1}{\thepage}}}{%
+ \protected@write\@indexfile{}{\string\indexentry{#1}{\cmdfx@note@target}}}
+ \endgroup
+ \@esphack}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@fxnotekey}
+% \begin{macro}{\@fxwarningkey}
+% \begin{macro}{\@fxerrorkey}
+% \begin{macro}{\@fxfatalkey}
+% The keys used to sort indexed \fx notes by importance level:
+% \begin{macrocode}
+\newcommand\@fxnotekey{***a}
+\newcommand\@fxwarningkey{***b}
+\newcommand\@fxerrorkey{***c}
+\newcommand\@fxfatalkey{***d}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\FXLayoutIndex}
+% \marg{type}\marg{note}\marg{author}
+% \begin{macrocode}
+\newcommand*\FXLayoutIndex[3]{%
+ \iffx@mode@multiuser%
+ \index{***@\fixmeindexname:%
+ !\@nameuse{@fx#1key}@\fxnotesname{#1}:%
+ !\@nameuse{thefx#1count}: #3: #2}%
+ \index{***#3@\fixmeindexname{} (#3):%
+ !\@nameuse{@fx#1key}@\fxnotesname{#1}:%
+ !\@nameuse{thefx#1count}: #2}%
+ \else%
+ \index{***@\fixmeindexname:%
+ !\@nameuse{@fx#1key}@\fxnotesname{#1}:%
+ !\@nameuse{thefx#1count}: #2}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@fxlayout@index}
+% \begin{booleanoption}{index}
+% \mbox{}
+% \begin{macrocode}
+\FXRegisterLayout{index}{\FXLayoutIndex}
+% \end{macrocode}
+% \end{booleanoption}
+% \end{macro}
+% \end{layout}
+%
+% \paragraph{Contents line\label{sec:code:contentslinelayout}}
+% \begin{macro}{\FXLayoutContentsLine}
+% \marg{type}\marg{note}\marg{author}\\
+% This one is not registered like the others because it is always active and
+% used explicitely by the \texttt{lox} code.
+% \begin{macrocode}
+\newcommand*\FXLayoutContentsLine[3]{%
+ \iffx@mode@multiuser%
+ \fxaddcontentsline{\ignorespaces#3 \fxnotename{#1}: #2}%
+ \else%
+ \fxaddcontentsline{\fxnotename{#1}: #2}%
+ \fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Layout loading}
+% \begin{macro}{\fxloadlayouts}
+% \marg{name,\ldots}
+% \begin{macrocode}
+\newcommand*\fxloadlayouts[1]{%
+ \edef\@fxlts{\zap@space#1 \@empty}%
+ \@for\@fxlt:=\@fxlts\do{\usepackage{fxlayout#1}}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Layout control}
+% \begin{macro}{\@fxparselayout}
+% Utility macro to detect the \texttt{no}\meta{name} form of layout options.
+% The drawback of this technique is that layout options must be at least 3
+% characters long. No big deal though\ldots
+% \begin{macrocode}
+\def\@fxparselayout#1#2#3\relax{\def\@fxltprefix{#1#2}\def\@fxltrest{#3}}
+% \begin{macro}{\fxuselayouts}
+% \marg{[no]names}\\
+% First, ensure that those layouts are available, then activate them.
+% \cs{\FXRequireLayouts} is a better style for theme programming.
+% \begin{macrocode}
+\newcommand*\fxuselayouts[1]{%
+ \edef\@fxlts{\zap@space#1 \@empty}%
+ \@for\@fxlt:=\@fxlts\do{%
+ \expandafter\@fxparselayout\@fxlt\relax%
+ \ifthenelse{\equal{\@fxltprefix}{no}}{%
+ \let\@fxltname\@fxltrest}{%
+ \let\@fxltname\@fxlt}%
+ \@fxkeyifundefined{layout}{\@fxltname}{\fxloadlayouts{\@fxltname}}{}}%
+ \@fxsetkeys{layout}{#1}}
+\let\FXRequireLayouts\fxuselayouts
+
+% \end{macrocode}
+% \end{macro}
+% \begin{option}{innerlayout}
+% The alternative inner mode layout:
+% \begin{macrocode}
+\@fxdefinecmdkey{layout}{innerlayout}{}
+% \end{macrocode}
+% \end{option}
+% \begin{option}{morelayout}
+% The \texttt{morelayout} option adds to the existing layout configuration.
+% The implementation is trivial, as it simply boils down to calling
+% \cs{setkeys} on its argument. There are several advantages in doing this.
+% \begin{enumerate}
+% \item It is possible to disable a layout by using the
+% \texttt{no}\meta{layout} form. For example,
+% |morelayout={inline,nomargin}| will work.
+% \item A wrong layout name (for instance, misspelled) will trigger an
+% \texttt{xkeyval} error.
+% \end{enumerate}
+% \begin{macrocode}
+\@fxdefinekey{layout}{morelayout}{\fxuselayouts{#1}}
+% \end{macrocode}
+% \end{option}
+% \begin{option}{layout}
+% The \texttt{layout} option lets the user specify exactly which ones she
+% wants to use. Not very difficult to implement either: it works by first
+% deactivating all layouts, and then activating the provided ones as before.
+% Note that the use of the \texttt{no}\meta{layout} form is valid but has no
+% effect.
+% \begin{macrocode}
+\@fxdefinekey{layout}{layout}{%
+ \edef\@fxlayouts{\@fxearlylayouts,\@fxlatelayouts}%
+ \@for\@fxlt:=\@fxlayouts\do{%
+ \@nameuse{fx@layout@\@fxlt}{false}}%
+ \fxuselayouts{#1}}
+
+% \end{macrocode}
+% \end{option}
+%
+% \subsection{Environment Layouts}
+% \subsubsection{Layout creation}
+% \begin{macro}{\FXProvidesEnvLayout}
+% \marg{name}\oarg{release information}
+% \begin{macrocode}
+\newcommand*\FXProvidesEnvLayout[1]{\ProvidesPackage{fxenvlayout#1}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\FXRegisterEnvLayout}
+% \marg{name}\marg{beginfuncname}\marg{endfuncname}\\
+% Register a new environment layout with \fx. This currently only involves
+% constructing the translation macros. The translation macros in question
+% can't be \cs{let} to the real ones, because themes or users might want to
+% redefine the latter.
+% \begin{macrocode}
+\newcommand*\FXRegisterEnvLayout[3]{%
+ \@ifundefined{@fxenvlayout@#1@begin}{%
+ \expandafter\def\csname @fxenvlayout@#1@begin\endcsname{#2}%
+ \expandafter\def\csname @fxenvlayout@#1@end\endcsname{#3}}{%
+ \@fxpkgerror{environment layout '#2' already registered}{%
+ You have called \string\FXRegisterEnvLayout\space with a name already in
+ use.\MessageBreak
+ If you want to modify an existing environment layout, renew its
+ commands.\MessageBreak
+ Otherwise, you must choose a different name.}}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Built-in layouts}
+% \paragraph{Plain}
+% \begin{envlayout}[noprint]{plain}
+% \begin{face}{env}
+% \mbox{}
+% \begin{macrocode}
+\@fxnewface{env}
+% \end{macrocode}
+% \end{face}
+% \begin{macro}{\FXEnvLayoutPlainBegin}
+% \begin{macro}{\FXEnvLayoutPlainEnd}
+% \marg{type}\marg{author}
+% \begin{macrocode}
+\newcommand*\FXEnvLayoutPlainBegin[2]{%
+ \@fxuseface{env}\ignorespaces#2 \fxnotename{#1}: \ignorespaces}
+\newcommand*\FXEnvLayoutPlainEnd[2]{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\@fxenvlayout@plain@begin}
+% \begin{macro}{\@fxenvlayout@plain@end}
+% \begin{macrocode}
+\FXRegisterEnvLayout{plain}{\FXEnvLayoutPlainBegin}{\FXEnvLayoutPlainEnd}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{envlayout}
+%
+% \paragraph{Signature}
+% \begin{envlayout}{signature}
+% \begin{face}{signature}
+% \mbox{}
+% \begin{macrocode}
+\@fxnewface[\itshape]{signature}
+% \end{macrocode}
+% \end{face}
+% \begin{macro}{\@fxdosig}
+% \marg{author}
+% \begin{macro}{\@fxsignature}
+% Use a signature of the form ``-- sig'', unless author is empty.
+% \begin{macrocode}
+\newcommand*\@fxdosig[1]{%
+ \ifthenelse{\equal{#1}{}}{\def\@fxsignature{}}{%
+ \def\@fxsignature{ -- {\@fxuseface{signature}#1}}}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\FXEnvLayoutSignatureBegin}
+% \begin{macro}{\FXEnvLayoutSignatureEnd}
+% \marg{type}\marg{author}
+% \begin{macrocode}
+\newcommand*\FXEnvLayoutSignatureBegin[2]{%
+ \@fxuseface{env}\fxnotename{#1}: \ignorespaces}
+\newcommand*\FXEnvLayoutSignatureEnd[2]{\@fxdosig{#2}\@fxsignature}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\@fxenvlayout@signature@begin}
+% \begin{macro}{\@fxenvlayout@signature@end}
+% \mbox{}
+% \begin{macrocode}
+\FXRegisterEnvLayout{signature}{%
+ \FXEnvLayoutSignatureBegin}{\FXEnvLayoutSignatureEnd}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{envlayout}
+%
+% \subsubsection{Layout selection}
+% \begin{macro}{\@fxselectenvlayout}
+% \marg{name}
+% \begin{macro}{\@fxenvlayout@begin}
+% \begin{macro}{\@fxenvlayout@end}
+% \marg{type}\marg{author}\\
+% This is much simpler than standard layout management because only one
+% environment layout at a time is possible. Using a specific environment
+% layout boils down to possibly loading it, and binding the beginning and
+% ending macros to the proper translation ones.
+% \begin{macrocode}
+\newcommand*\@fxselectenvlayout[1]{%
+ \expandafter\let\expandafter\@fxenvlayout@begin%
+ \csname @fxenvlayout@#1@begin\endcsname%
+ \expandafter\let\expandafter\@fxenvlayout@end%
+ \csname @fxenvlayout@#1@end\endcsname}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Layout loading}
+% \begin{macro}{\fxloadenvlayouts}
+% \marg{name,\ldots}
+% \begin{macrocode}
+\newcommand*\fxloadenvlayouts[1]{%
+ \edef\@fxlts{\zap@space#1 \@empty}%
+ \@for\@fxlt:=\@fxlts\do{\usepackage{fxenvlayout#1}}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Layout control}
+% \begin{macro}{\fxuseenvlayout}
+% \begin{macro}{\FXRequireEnvLayout}
+% \marg{name}\\
+% \cs{FXRequireEnvLayout} is a better style for theme programming.
+% \begin{macrocode}
+\newcommand*\fxuseenvlayout[1]{%
+ \@ifundefined{@fxenvlayout@#1@begin}{\fxloadenvlayouts{#1}}{}%
+ \@fxselectenvlayout{#1}}
+\let\FXRequireEnvLayout\fxuseenvlayout
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{option}{envlayout}
+% \mbox{}
+% \begin{macrocode}
+\@fxdefinekey{envlayout}{envlayout}{\fxuseenvlayout{#1}}
+
+% \end{macrocode}
+% \end{option}
+%
+% \subsection{Target Layouts}
+% \subsubsection{Layout creation}
+% \begin{macro}{\FXProvidesTargetLayout}
+% \marg{name}\oarg{release information}
+% \begin{macrocode}
+\newcommand*\FXProvidesTargetLayout[1]{\ProvidesPackage{fxtargetlayout#1}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\FXRegisterTargetLayout}
+% \marg{name}\marg{funcname}\\
+% Register a new target layout with \fx. This currently only involves
+% constructing the translation macro. The translation macro in question
+% can't be \cs{let} to the real one, because themes or user might want to
+% redefine the latter.
+% \begin{macrocode}
+\newcommand*\FXRegisterTargetLayout[2]{%
+ \@ifundefined{@fxtargetlayout@#1}{%
+ \expandafter\def\csname @fxtargetlayout@#1\endcsname{#2}}{%
+ \@fxpkgerror{target layout '#1' already registered}{%
+ You have called \string\FXRegisterTargetLayout\space with a name
+ already in use.\MessageBreak
+ If you want to modify an existing target layout, renew its
+ command.\MessageBreak
+ Otherwise, you must choose another name.}}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Built-in layouts}
+% \paragraph{Plain}
+% \begin{targetlayout}[noprint]{plain}
+% \begin{face}{target}
+% \mbox{}
+% \begin{macrocode}
+\@fxnewface{target}
+% \end{macrocode}
+% \end{face}
+% \begin{macro}{\FXTargetLayoutPlain}
+% \marg{target}
+% \begin{macrocode}
+\newcommand\FXTargetLayoutPlain[2]{\@fxuseface{target}#2}
+% \end{macrocode}
% \end{macro}
+% \begin{macro}{\@fxtargetlayout@plain}
% \begin{macrocode}
-\newcommand\FXNote[1]{%
+\FXRegisterTargetLayout{plain}{\FXTargetLayoutPlain}
+
+% \end{macrocode}
+% \end{macro}
+% \end{targetlayout}
+%
+% \subsubsection{Layout selection}
+% \begin{macro}{\@fxselecttargetlayout}
+% \marg{name}
+% \begin{macro}{\@@fxtargetlayout}
+% \marg{target}\\
+% This is much simpler than standard layout management because only one
+% target layout at a time is possible. Using a specific target layout boils
+% down to possibly loading it, and binding the layout macro to the proper
+% translation one.
+% \begin{macrocode}
+\newcommand*\@fxselecttargetlayout[1]{%
+ \expandafter\let\expandafter\@@fxtargetlayout%
+ \csname @fxtargetlayout@#1\endcsname}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Target layout loading}
+% \begin{macro}{\fxloadtargetlayouts}
+% \marg{name,\ldots}
+% \begin{macrocode}
+\newcommand*\fxloadtargetlayouts[1]{%
+ \edef\@fxlts{\zap@space#1 \@empty}%
+ \@for\@fxlt:=\@fxlts\do{\usepackage{fxtargetlayout#1}}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Target layout control}
+% \begin{macro}{\fxusetargetlayout}
+% \begin{macro}{\FXRequireTargetLayout}
+% \marg{name}\\
+% \cs{FXRequireTargetLayout} is a better style for theme programming.
+% \begin{macrocode}
+\newcommand*\fxusetargetlayout[1]{%
+ \@ifundefined{@fxtargetlayout@#1}{\fxloadtargetlayouts{#1}}{}%
+ \@fxselecttargetlayout{#1}}
+\let\FXRequireTargetLayout\fxusetargetlayout
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{option}{targetlayout}
+% \mbox{}
+% \begin{macrocode}
+\@fxdefinekey{targetlayout}{targetlayout}{\fxusetargetlayout{#1}}
+
+% \end{macrocode}
+% \end{option}
+%
+% \subsubsection{Status-dependant versions}
+% \begin{macro}{\@fxtargetlayout@final}
+% \begin{macro}{\@fxtargetlayout@draft}
+% \marg{target}\\
+% In \texttt{final} mode, the target is typeset as-is. In \texttt{draft}
+% mode, we use the selected layout.
+% \begin{macrocode}
+\newcommand\@fxtargetlayout@final[2]{#2}
+\newcommand\@fxtargetlayout@draft[2]{%
+ \begingroup\@@fxtargetlayout{#1}{#2}\endgroup}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Logging}
+% \subsubsection{Logging macros}
+% \begin{macro}{\FXLogNote}
+% \begin{macro}{\FXLogWarning}
+% \begin{macro}{\FXLogerror}
+% \begin{macro}{\FXLogFatal}
+% \marg{msg}
+% \begin{macrocode}
+\newcommand*\FXLogNote[1]{%
\GenericInfo{%
(FiXme)\@spaces\@spaces\@spaces\@spaces}{%
- Package FiXme Note: `#1'}}
-\newcommand\FXWarning[1]{%
- \PackageWarning{FiXme}{`#1'}}
-\newcommand\FXError[1]{%
+ FiXme Note: '#1'}}
+\newcommand*\FXLogWarning[1]{%
\GenericWarning{%
(FiXme)\@spaces\@spaces\@spaces\@spaces}{%
- Package FiXme Error: `#1'}}
-\newcommand\FXFatal[1]{%
+ FiXme Warning: '#1'}}
+\newcommand*\FXLogError[1]{%
\GenericWarning{%
(FiXme)\@spaces\@spaces\@spaces\@spaces}{%
- Package FiXme: `#1'}}
+ FiXme Error: '#1'}}
+\newcommand*\FXLogFatal[1]{%
+ \GenericWarning{%
+ (FiXme)\@spaces\@spaces\@spaces\@spaces}{%
+ FiXme Fatal Error: '#1'}}
% \end{macrocode}
-% Boolean that control wether to stay silent or not:
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\@fxlog@note}
+% \begin{macro}{\@fxlog@warning}
+% \begin{macro}{\@fxlog@error}
+% \begin{macro}{\@fxlog@fatal}
+% In order for the generic note dispatcher to be able to call the logging
+% macros (see section \sectionref{sec:code:lowlevelcmd}), we need an easier
+% translation mechanism from the note type to the actual macro name. The
+% translation macros in question can't be \cs{let} to the real one, because
+% users might want to redefine the actual log macros later.
% \begin{macrocode}
-\newif\iffixme@silent
+\def\@fxlog@note{\FXLogNote}
+\def\@fxlog@warning{\FXLogWarning}
+\def\@fxlog@error{\FXLogError}
+\def\@fxlog@fatal{\FXLogFatal}
% \end{macrocode}
-%% Options that control whether to be silent or not:
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Logging control}
+% \begin{booleanoption}{silent}
+% Whether to log \fx notes:
% \begin{macrocode}
-\DeclareOption{silent}{\fixme@silenttrue}
-\DeclareOption{nosilent}{\fixme@silentfalse}
+\@fxdefineboolkey{log}{silent}
% \end{macrocode}
+% \end{booleanoption}
%
-% \subsection{\fixme{} notes}
-% Here are the counters:
-% \DescribeMacro{\thefixmecount}
-% \DescribeMacro{\thefixmenotecount}
-% \DescribeMacro{\thefixmewarningcount}
-% \DescribeMacro{\thefixmeerrorcount}
-% \DescribeMacro{\thefixmefatalcount}
+% \subsection{\fx notes}
+% \subsubsection{Note parameters}
+% \begin{counter}{fixmecount}
+% \begin{counter}{fxnotecount}
+% \begin{counter}{fxwarningcount}
+% \begin{counter}{fxerrorcount}
+% \begin{counter}{fxfatalcount}
+% \texttt{fixmecount} maintains the total of all notes, regardless
+% of their level. Each note type also gets its own counter:
% \begin{macrocode}
\newcounter{fixmecount}
-\newcounter{fixmenotecount}
-\newcounter{fixmewarningcount}
-\newcounter{fixmeerrorcount}
-\newcounter{fixmefatalcount}
-
-% \end{macrocode}
-% \begin{macro}{\fixmenoteprefix}
-% \begin{macro}{\fixmenoteindexname}
-% \begin{macro}{\fixme@note@draft}
-% \begin{macro}{\fixme@note@final}
-% The different flavors of fixme notes. Proper definitions will be
-% selected by the |draft| or |final| options. Let's start with the
-% note notes:
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \begin{macrocode}
-\newcommand*\fixmenoteprefix{}
-\newcommand*\fixmenoteindexname{}
-\def\fixme@note@draft#1{%
- \fixme@text{\fixmenoteprefix}{#1}%
- \iffixme@index\FXIndex{\fixmenoteindexname\thefixmenotecount: #1}\fi%
- \iffixme@silent\else\FXNote{#1}\fi%
- \addcontentsline{lox}{fixme}{\protect\fixmenoteprefix: #1}}
-\def\fixme@note@final#1{%
- \iffixme@silent\else\FXNote{#1}\fi%
- \addcontentsline{lox}{fixme}{\protect\fixmenoteprefix: #1}}
-
-% \end{macrocode}
-% \begin{macro}{\fixmewarningprefix}
-% \begin{macro}{\fixmewarningindexname}
-% \begin{macro}{\fixme@warning@draft}
-% \begin{macro}{\fixme@warning@final}
-% Here are the warnings notes:
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \begin{macrocode}
-\newcommand*\fixmewarningprefix{}
-\newcommand*\fixmewarningindexname{}
-\def\fixme@warning@draft#1{%
- \fixme@text{\fixmewarningprefix}{#1}%
- \iffixme@index\FXIndex{\fixmewarningindexname\thefixmewarningcount: #1}\fi%
- \iffixme@silent\else\FXWarning{#1}\fi%
- \addcontentsline{lox}{fixme}{\protect\fixmewarningprefix: #1}}
-\def\fixme@warning@final#1{%
- \iffixme@silent\else\FXWarning{#1}\fi%
- \addcontentsline{lox}{fixme}{\protect\fixmewarningprefix: #1}}
-
-% \end{macrocode}
-% \begin{macro}{\fixmeerrorprefix}
-% \begin{macro}{\fixmeerrorindexname}
-% \begin{macro}{\fixme@error@draft}
-% \begin{macro}{\fixme@error@final}
-% Here are the errors notes:
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \begin{macrocode}
-\newcommand*\fixmeerrorprefix{}
-\newcommand*\fixmeerrorindexname{}
-\def\fixme@error@draft#1{%
- \fixme@text{\fixmeerrorprefix}{#1}%
- \iffixme@index\FXIndex{\fixmeerrorindexname\thefixmeerrorcount: #1}\fi%
- \iffixme@silent\else\FXError{#1}\fi%
- \addcontentsline{lox}{fixme}{\protect\fixmeerrorprefix: #1}}
-\def\fixme@error@final#1{%
- \iffixme@silent\else\FXError{#1}\fi%
- \addcontentsline{lox}{fixme}{\protect\fixmeerrorprefix: #1}}
-
-% \end{macrocode}
-% \begin{macro}{\fixmefatalindexname}
-% \begin{macro}{\fixme@fatal@draft}
-% \begin{macro}{\fixme@fatal@final}
-% And here are the fatal ones:
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \begin{macrocode}
-\newcommand*\fixmefatalindexname{}
-\def\fixme@fatal@draft#1{%
- \iffixme@inline\FiXmeInline{#1}\fi%
- \iffixme@margin\FiXmeMargin{#1}\fi%
- \iffixme@marginclue\FXMarginClue{\fixmefatalprefix}\fi%
- \iffixme@footnote\FiXmeFootnote{#1}\fi%
- \iffixme@user\FiXmeUser{#1}\fi%
- \iffixme@index\FiXmeIndex{%
- \fixmefatalindexname\thefixmefatalcount: #1}\fi%
- \iffixme@silent\else\FXFatal{#1}\fi%
- \addcontentsline{lox}{fixme}{\protect\fixmefatalprefix: #1}}
-\def\fixme@fatal@final#1{%
- \PackageError{FiXme}{`#1' fixme left in final version}{%
- You are processing your document in final mode,\MessageBreak
- but you still have some critical FiXme's left behind.\MessageBreak
- Type X to quit, fix your document, and rerun LaTeX.}}
-
-% \end{macrocode}
-% \begin{macro}{\@fixme}
-% \begin{macro}{\fxnote}
-% \begin{macro}{\fxwarning}
-% \begin{macro}{\fxerror}
-% \begin{macro}{\fixme}
-% Here are the notes insertion macros. The different versions are
-% |\let| to the draft of final flavors defined above by the
-% \texttt{draft} or \texttt{final} options.
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \begin{macrocode}
-\def\@@fixme#1#2{%
- \stepcounter{fixmecount}%
- \stepcounter{fixme#1count}%
- \csname fixme@#1\endcsname{#2}}
-\def\@fixme#1[#2]#3{%
- \bgroup%
- \fixme@inlinefalse%
- \fixme@marginfalse%
- \fixme@margincluefalse%
- \fixme@footnotefalse%
- \fixme@userfalse%
- \fixme@indexfalse%
- \@for\fixme@option:=#2\do{%
- \expandafter\ifx\csname fixme@\fixme@option true\endcsname\relax
- \PackageError{FiXme}{Unknown layout option `\fixme@option'}{%
- You have given an invalid option to \string\fixme, or an \string\fx %
- command.\MessageBreak
- Valid options are `inline', `margin', `marginclue', `footnote', %
- `user',\MessageBreak
- and `index'.\MessageBreak
- Type X to quit, fix your document, and rerun LaTeX.}%
- \else%
- \csname fixme@set\fixme@option\endcsname%
- \fi}%
- \@@fixme{#1}{#3}%
- \egroup}
-\DeclareRobustCommand\fxnote{\@ifnextchar[%]
- {\@fixme{note}}{\@@fixme{note}}}
-\DeclareRobustCommand\fxwarning{\@ifnextchar[%]
- {\@fixme{warning}}{\@@fixme{warning}}}
-\DeclareRobustCommand\fxerror{\@ifnextchar[%]
- {\@fixme{error}}{\@@fixme{error}}}
-\DeclareRobustCommand\fixme{\@ifnextchar[%]
- {\@fixme{fatal}}{\@@fixme{fatal}}}
-
-% \end{macrocode}
-%
-% \subsection{\fixme{} environments}
-% The \fixme{} environments use the corresponding macro version to handle
-% inline (and possibly index) layout, and to perform logging. In final mode,
-% verbatim's \texttt{comment} environment is used to suppress output.
-% \begin{macrocode}
-\newcommand\FXEnvBegin{\begin{quotation}}
-\newcommand\FXEnvEnd{\end{quotation}}
-
-\def\@fxenvbegin@draft#1#2{%
- \FXEnvBegin
- \edef\fixme@args{inline%
- \iffixme@index,index\fi%
- \iffixme@marginclue,marginclue\fi}%
- \csname#1\endcsname[\fixme@args]{#2}}
-\def\@fxenvbegin@final#1#2{
- \edef\fixme@args{inline%
- \iffixme@index,index\fi%
- \iffixme@marginclue,marginclue\fi}%
- \csname#1\endcsname[\fixme@args]{#2}
- \comment
-}
-
-\def\@fxenvend@draft{\FXEnvEnd}
-\def\@fxenvend@final{\endcomment}
-
-\newenvironment{anfxnote}[1][]{%
- \@fxenvbegin{fxnote}{#1}}{%
- \@fxenvend}
-\newenvironment{anfxwarning}[1][]{%
- \@fxenvbegin{fxwarning}{#1}}{%
- \@fxenvend}
-\newenvironment{anfxerror}[1][]{%
- \@fxenvbegin{fxerror}{#1}}{%
- \@fxenvend}
-\newenvironment{afixme}[1][]{%
- \@fxenvbegin{fixme}{#1}}{%
- \@fxenvend}
-
-% \end{macrocode}
-%
-% \subsection{Language processing}
-% Options that control which language is selected:
-% \begin{macrocode}
-\DeclareOption{english}{%
- \renewcommand*\fixmenoteprefix{\fixmelogo\nobreakspace Note}
- \renewcommand*\fixmewarningprefix{\fixmelogo\nobreakspace Warning}
- \renewcommand*\fixmeerrorprefix{\fixmelogo\nobreakspace Error}
- \renewcommand*\fixmefatalprefix{\fixmelogo}
- \renewcommand*\fixmeindexname{\fixmelogo}
- \renewcommand*\fixmenoteindexname{**a@Notes:!}
- \renewcommand*\fixmewarningindexname{**b@Warnings:!}
- \renewcommand*\fixmeerrorindexname{**c@Errors:!}
- \renewcommand*\fixmefatalindexname{}
- \renewcommand*{\listfixmename}{List of Corrections}}
-\DeclareOption{french}{%
- \renewcommand*\fixmenoteprefix{\fixmelogo\nobreakspace Note}
- \renewcommand*\fixmewarningprefix{\fixmelogo\nobreakspace Attention}
- \renewcommand*\fixmeerrorprefix{\fixmelogo\nobreakspace Erreur}
- \renewcommand*\fixmefatalprefix{\fixmelogo}
- \renewcommand*\fixmeindexname{\fixmelogo}
- \renewcommand*\fixmenoteindexname{**a@Notes:!}
- \renewcommand*\fixmewarningindexname{**b@Avertissements:!}
- \renewcommand*\fixmeerrorindexname{**c@Erreurs:!}
- \renewcommand*\fixmefatalindexname{}
- \renewcommand*{\listfixmename}{Liste des Corrections}}
-\DeclareOption{francais}{\ExecuteOptions{french}}
-\DeclareOption{spanish}{%
- \renewcommand*\fixmenoteprefix{\fixmelogo\nobreakspace Nota}
- \renewcommand*\fixmewarningprefix{\fixmelogo\nobreakspace Aviso}
- \renewcommand*\fixmeerrorprefix{\fixmelogo\nobreakspace Error}
- \renewcommand*\fixmefatalprefix{\fixmelogo}
- \renewcommand*\fixmeindexname{\fixmelogo}
- \renewcommand*\fixmenoteindexname{**a@Notas:!}
- \renewcommand*\fixmewarningindexname{**b@Avisos:!}
- \renewcommand*\fixmeerrorindexname{**c@Errores:!}
- \renewcommand*\fixmefatalindexname{}
- \renewcommand*{\listfixmename}{Lista de Correcciones}}
-\DeclareOption{italian}{%
- \renewcommand*\fixmenoteprefix{\fixmelogo\nobreakspace Nota}
- \renewcommand*\fixmewarningprefix{\fixmelogo\nobreakspace Avviso}
- \renewcommand*\fixmeerrorprefix{\fixmelogo\nobreakspace Errore}
- \renewcommand*\fixmefatalprefix{\fixmelogo}
- \renewcommand*\fixmeindexname{\fixmelogo}
- \renewcommand*\fixmenoteindexname{**a@Note:!}
- \renewcommand*\fixmewarningindexname{**b@Avvisi:!}
- \renewcommand*\fixmeerrorindexname{**c@Errori:!}
- \renewcommand*\fixmefatalindexname{}
- \renewcommand*{\listfixmename}{Corrigenda}}
-\DeclareOption{german}{%
- \renewcommand*\fixmenoteprefix{\fixmelogo\nobreakspace Anm}
- \renewcommand*\fixmewarningprefix{\fixmelogo\nobreakspace Warnung}
- \renewcommand*\fixmeerrorprefix{\fixmelogo\nobreakspace Fehler}
- \renewcommand*\fixmefatalprefix{\fixmelogo}
- \renewcommand*\fixmeindexname{\fixmelogo}
- \renewcommand*\fixmenoteindexname{**a@Anmerkungen:!}
- \renewcommand*\fixmewarningindexname{**b@Warnungen:!}
- \renewcommand*\fixmeerrorindexname{**c@Fehler:!}
- \renewcommand*\fixmefatalindexname{}
- \renewcommand*{\listfixmename}{Verzeichnis der Korrekturen}}
-\DeclareOption{ngerman}{%
- \ExecuteOptions{german}}
-\DeclareOption{danish}{%
- \renewcommand*\fixmenoteprefix{\fixmelogo\nobreakspace Note}
- \renewcommand*\fixmewarningprefix{\fixmelogo\nobreakspace Advarsel}
- \renewcommand*\fixmeerrorprefix{\fixmelogo\nobreakspace Fejl}
- \renewcommand*\fixmefatalprefix{\fixmelogo}
- \renewcommand*\fixmeindexname{\fixmelogo}
- \renewcommand*\fixmenoteindexname{**a@Noter:!}
- \renewcommand*\fixmewarningindexname{**b@Advarsler:!}
- \renewcommand*\fixmeerrorindexname{**c@Fejl:!}
- \renewcommand*\fixmefatalindexname{}
- \renewcommand*{\listfixmename}{Rettelser}}
-\DeclareOption{croatian}{%
- \renewcommand*\fixmenoteprefix{\fixmelogo\nobreakspace Poruka}
- \renewcommand*\fixmewarningprefix{\fixmelogo\nobreakspace Upozorenje}
- \renewcommand*\fixmeerrorprefix{\fixmelogo\nobreakspace Gre\v ska}
- \renewcommand*\fixmefatalprefix{\fixmelogo}
- \renewcommand*\fixmeindexname{\fixmelogo}
- \renewcommand*\fixmenoteindexname{**a@Poruke:!}
- \renewcommand*\fixmewarningindexname{**b@Upozorenja:!}
- \renewcommand*\fixmeerrorindexname{**c@Greske:!}
- \renewcommand*\fixmefatalindexname{}
- \renewcommand*{\listfixmename}{Popis korekcija}}
+\newcounter{fxnotecount}
+\newcounter{fxwarningcount}
+\newcounter{fxerrorcount}
+\newcounter{fxfatalcount}
+
+% \end{macrocode}
+% \end{counter}
+% \end{counter}
+% \end{counter}
+% \end{counter}
+% \end{counter}
+% \begin{option}{author}
+% A \fx note's ``author'' allows to distinguish notes from different persons
+% in collaborative mode.
+% \begin{macrocode}
+\@fxdefinecmdkey{note}{author}{}
+% \end{macrocode}
+% \end{option}
+% \begin{option}{target}
+% A \fx note's ``target'' may replace the page number in the list of
+% fixmes or in the index (see also section
+% \sectionref{sec:code:contentslinelayout}).
+% \begin{macrocode}
+\@fxdefinecmdkey{note}{target}{}
+% \end{macrocode}
+% \end{option}
+%
+% \subsubsection{Layout dispatch\label{sec:code:layoutdispatch}}
+% \begin{macro}{\@fxhandleinnermode}
+% Handle the case where \TeX{} is in inner mode. We use the alternative
+% layout provided by the \texttt{innerlayout} option, and we make sure to
+% disable both the \texttt{margin} and \texttt{marginclue} layout forms.
+% This is done by appending \texttt{nomargin} and \texttt{nomarginclue} to
+% the inner layout value (this also renders nasty user settings harmless).
+% Before that, we provide some informative message if risky layout forms
+% were active.
+% \begin{macrocode}
+\newcommand\@fxhandleinnermode{%
+ \ifinner%
+ \ifthenelse{\boolean{fx@layout@margin}}{%
+ \@fxpkginfo{%
+ inner mode detected;\MessageBreak
+ turning margin layout form off}}{%
+ \ifthenelse{\boolean{fx@layout@marginclue}}{%
+ \@fxpkginfo{%
+ inner mode detected;\MessageBreak
+ turning marginclue layout form off}}{}}%
+ \expandafter\fxuselayouts\expandafter{%
+ \cmdfx@layout@innerlayout,nomargin,nomarginclue}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@fxissueearlydraftlayouts}
+% \begin{macro}{\@fxissuelatedraftlayouts}
+% \marg{type}\marg{note}\\
+% Dispatch all active draft mode layouts. \cs{@fxissueearlydraftlayouts}
+% takes care of dispatching early layouts, but before that, handles the
+% inner mode case. \cs{@fxissuelatedraftlayouts} just dispatches late
+% layouts.
+% \begin{macrocode}
+\newcommand*\@fxissueearlydraftlayouts[2]{%
+ \@fxhandleinnermode%
+ \@for\@fxlt:=\@fxearlylayouts\do{%
+ \@nameuse{iffx@layout@\@fxlt}%
+ \@nameuse{@fxlayout@\@fxlt}{#1}{#2}{\cmdfx@note@author}%
+ \fi}}
+\newcommand*\@fxissuelatedraftlayouts[2]{%
+ \@for\@fxlt:=\@fxlatelayouts\do{%
+ \@nameuse{iffx@layout@\@fxlt}%
+ \@nameuse{@fxlayout@\@fxlt}{#1}{#2}{\cmdfx@note@author}%
+ \fi}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\@fxissuecommonlayouts}
+% \marg{type}\marg{note}\\
+% Dispatch all mode-independent layouts (actually, ``layout'' is to be taken
+% in a slightly broader sense here). This macro executes all operations that
+% need to be performed regardless of the document status. This includes
+% updating the \texttt{lox} file and logging the annotation. Note that even
+% in \texttt{final} mode, the \texttt{lox} file is updated. This is to
+% maintain a coherent state if the user goes from \texttt{final} to
+% \texttt{draft} or the other way around. In \texttt{final} mode, the list
+% of fixmes does not appears because \cs{listoffixmes} is \cs{let} to
+% \cs{relax}.
+% \begin{macrocode}
+\newcommand*\@fxissuecommonlayouts[2]{%
+ \FXLayoutContentsLine{#1}{#2}{\cmdfx@note@author}%
+ \iffx@log@silent\else\@nameuse{@fxlog@#1}{#2}\fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Status-dependent implementation\label{sec:code:lowlevelcmd}}
+% \begin{macro}{\@@@fxnote@early@final}
+% \begin{macro}{\@@@fxnote@late@final}
+% \begin{macro}{\@@@fxnote@early@draft}
+% \begin{macro}{\@@@fxnote@late@draft}
+% \marg{type}\marg{note}\\
+% The lower-level macros that perform the real job. In \texttt{final} mode,
+% early work is only to check for remaining fatal annotations and late work
+% is to dispatch common layouts.
+% \begin{macrocode}
+\newcommand*\@@@fxnote@early@final[2]{%
+ \ifthenelse{\equal{#1}{fatal}}{%
+ \@fxpkgerror{'#2' fatal error left in final version}{%
+ You are currently processing in final mode,\MessageBreak
+ but you still have some FiXme fatal errors left behind.\MessageBreak
+ Type X to quit, fix your document (or switch back to draft
+ mode),\MessageBreak
+ and rerun LaTeX.}}{}}
+\newcommand*\@@@fxnote@late@final[2]{\@fxissuecommonlayouts{#1}{#2}}
+% \end{macrocode}
+% In \texttt{draft} mode, early work is to dispatch early layouts, while late
+% work is to dispatch both late \emph{and} common layouts.
+% \begin{macrocode}
+\newcommand*\@@@fxnote@early@draft[2]{%
+ \@fxissueearlydraftlayouts{#1}{#2}}
+\newcommand*\@@@fxnote@late@draft[2]{%
+ \@fxissuelatedraftlayouts{#1}{#2}%
+ \@fxissuecommonlayouts{#1}{#2}}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Standard version}
+% \begin{macro}{\@fxpostconfigure}
+% This macro is used in \cs{@@fxnote@early} below, after processing user
+% options (even when there is none), to postconfigure some aspects of the
+% notes. Currently, this involves two things: setting the author to
+% \cs{fixmelogo} if it still is \texttt{fixme}, and automatically tracking
+% the current language if required (note that all other language options
+% turn tracking off, meaning that one can override language tracking locally
+% by providing a language explicitely). Since environments need the
+% post-configuration done sooner, they perform it themselves and rebind this
+% macro to \cs{relax}.
+% \begin{macrocode}
+\newcommand*\@fxpostconfigure{%
+ \ifthenelse{\equal{\cmdfx@note@author}{fixme}}{%
+ \@fxsetkeys{note}{author=\fixmelogo}}{}%
+ \iffx@lang@langtrack%
+ \@fxkeyifundefined{lang}{\languagename}{%
+ \@fxpkgwarning{unknown language '\languagename';\MessageBreak
+ falling back to \@fxdefaultlang}%
+ \@fxsetkeys{lang}{\@fxdefaultlang}}{%
+ \@fxsetkeys{lang}{\languagename}}
+ \fi}
+
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@fxendgroup}
+% This macro is used in \cs{@@fxnote@late} below to close the group opened
+% at the user level. Since environments need the group opened for a longer
+% time, they rebind it to \cs{relax} and close the group themselves later
+% on.
+% \begin{macrocode}
+\let\@fxendgroup\endgroup
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@fxnote@early}
+% \marg{type}\marg{note}\\
+% Counters need to be updated regardless of the mode.
+% \begin{macrocode}
+\def\@@fxnote@early#1#2{%
+ \@fxpostconfigure%
+ \stepcounter{fixmecount}%
+ \stepcounter{fx#1count}%
+ \@@@fxnote@early{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@fxnote@late}
+% \begin{macrocode}
+\def\@@fxnote@late#1#2{%
+ \@@@fxnote@late{#1}{#2}%
+ \@fxendgroup}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@fxnote}
+% \marg{type}\marg{note}\\
+% This macro is used everywhere outside a starred context, because in that
+% case, we do early and late work in a row.
+% \begin{macrocode}
+\def\@@fxnote#1#2{%
+ \@@fxnote@early{#1}{#2}%
+ \@@fxnote@late{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@fxnote}
+% \marg{type}\oarg{options}\marg{note}
+% \begin{macrocode}
+\def\@fxnote#1[#2]#3{%
+ \@fxsetkeys{mode,status,lang,log,note,face,layout}{#2}%
+ \@@fxnote{#1}{#3}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Starred version}
+% \begin{macro}{\@@fxsnote}
+% \marg{type}\marg{note}\marg{text}\\
+% Post-configuration is done here because it's the code path confluent for
+% all starred commands. Relaxing post-configuration afterwards is to prevent
+% \cs{@@fxnote@early} from doing it again. Note that this is the only place
+% where we actually do early and late work not in a row.
+% \begin{macrocode}
+\long\def\@@fxsnote#1#2#3{%
+ \@fxpostconfigure\let\@fxpostconfigure\relax%
+ \@@fxnote@early{#1}{#2}\@fxtargetlayout{#1}{#3}\@@fxnote@late{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@fxsnote}
+% \marg{type}\oarg{options}\marg{note}\marg{text}\\
+% Note the \texttt{targetlayout} family here.
+% \begin{macrocode}
+\long\def\@fxsnote#1[#2]#3#4{%
+ \@fxsetkeys{mode,status,lang,log,note,face,layout,targetlayout}{#2}%
+ \@@fxsnote{#1}{#3}{#4}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{User-level interface generation}
+% \begin{macro}{\@fxpreconfigure}
+% \marg{author}\\
+% This macro is used at the beginning of every user-level entry point (here
+% for notes, and also in the environments section), to preconfigure some
+% aspects of the notes, before possibly processing options. Currently, this
+% only involves presetting the note's author to the one specified in the
+% call to \cs{FXRegisterAuthor}. This however is not done for the built-in
+% \texttt{fixme} author, because this one should honor a global setting.
+% \begin{macrocode}
+\newcommand*\@fxpreconfigure[1]{%
+ \ifthenelse{\equal{#1}{fixme}}{}{\@fxsetkeys{note}{author=#1}}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@fxnewnotemacro}
+% \marg{prefix}\marg{type}\marg{author}\\
+% This macro defines the user-level interface:
+% \begin{macrocode}
+\newcommand*\@fxnewnotemacro[3]{%
+ \expandafter\DeclareRobustCommand\csname #1#2\endcsname{%
+ \begingroup%
+ \@fxpreconfigure{#3}%
+ \@ifstar{%
+ \@ifnextchar[%]
+ {\@fxsnote{#2}}{\@@fxsnote{#2}}}{%
+ \@ifnextchar[%]
+ {\@fxnote{#2}}{\@@fxnote{#2}}}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{\fx environments}
+% A \fx environment's summary is laid out by the corresponding macro, but
+% the \texttt{inline} layout is disabled. This is as easy as appending
+% \texttt{noinline} to the end of the options list.
+% \subsubsection{Status-dependent implementation}
+% \begin{macro}{\@@@@fxbeginenv@final}
+% \begin{macro}{\@@@@fxbeginenv@draft}
+% \begin{macro}{\@fxendenv@final}
+% \begin{macro}{\@fxendenv@draft}
+% \marg{type}\\
+% In final mode, \texttt{verbatim}'s \texttt{comment} environment is used to
+% suppress output.
+% \begin{macrocode}
+\def\@@@@fxbeginenv@final#1{\comment}
+\def\@@@@fxbeginenv@draft#1{\@fxenvlayout@begin{#1}{\cmdfx@note@author}}
+\def\@fxendenv@final#1{\endcomment}
+\def\@fxendenv@draft#1{\@fxenvlayout@end{#1}{\cmdfx@note@author}}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Standard versions}
+% \begin{macro}{\@@@fxbeginenv}
+% \begin{macro}{\@@fxbeginenv}
+% \marg{type}\marg{summary}\\
+% Post-configuration is done here (it's the code path confluent for all
+% non-starred environments). Relaxing post-configuration afterwards is to
+% prevent \cs{@@fxnote} from doing it again.
+% \begin{macrocode}
+\def\@@@fxbeginenv#1#2{%
+ \@fxpostconfigure\let\@fxpostconfigure\relax%
+ \@@fxnote{#1}{#2}%
+ \@@@@fxbeginenv{#1}}
+\def\@@fxbeginenv#1#2{%
+ \@fxsetkeys{layout}{noinline}%
+ \@@@fxbeginenv{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\@fxbeginenv}
+% \marg{type}\oarg{options}\marg{summary}
+% \begin{macrocode}
+\def\@fxbeginenv#1[#2]#3{%
+ \@fxsetkeys{mode,status,lang,log,note,face,layout,envlayout}{#2,noinline}%
+ \@@@fxbeginenv{#1}{#3}}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Starred versions}
+% \begin{macro}{\@@@fxbeginsenv}
+% \begin{macro}{\@@fxbeginsenv}
+% \marg{type}\marg{summary}\marg{text}\\
+% Post-configuration is done here (it's the code path confluent for all
+% starred environments). Relaxing post-configuration afterwards is to
+% prevent \cs{@@fxsnote} from doing it again.
+% \begin{macrocode}
+\long\def\@@@fxbeginsenv#1#2#3{%
+ \@fxpostconfigure\let\@fxpostconfigure\relax%
+ \@@fxsnote{#1}{#2}{#3}%
+ \@@@@fxbeginenv{#1}}
+\long\def\@@fxbeginsenv#1#2#3{%
+ \@fxsetkeys{layout}{noinline}%
+ \@@@fxbeginsenv{#1}{#2}{#3}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\@fxbeginenv}
+% \marg{type}\oarg{options}\marg{summary}\marg{text}\\
+% Note the \texttt{targetlayout} family here.
+% \begin{macrocode}
+\long\def\@fxbeginsenv#1[#2]#3#4{%
+ \@fxsetkeys{mode,status,lang,log,note,face,layout,envlayout,targetlayout}{%
+ #2,noinline}%
+ \@@@fxbeginsenv{#1}{#3}{#4}}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{User-level interface generation}
+% \begin{macro}{\@fxnewnoteenvs}
+% \marg{prefix}\marg{type}\marg{author}\\
+% This macro defines the user-level interface. The ending macros are
+% identical. Also, the environments close their own group, so we prevent
+% \cs{@@fxnote} from doing so by temporarily rebinding \cs{@fxendgroup} to
+% \cs{relax}.
+% \begin{macrocode}
+\newcommand*\@fxnewnoteenvs[3]{%
+ \expandafter\def\csname #1#2\endcsname{%
+ \begingroup%
+ \let\@fxendgroup\relax%
+ \@fxpreconfigure{#3}%
+ \@ifnextchar[%]
+ {\@fxbeginenv{#2}}{\@@fxbeginenv{#2}}}
+ \expandafter\def\csname end#1#2\endcsname{%
+ \@fxendenv{#2}%
+ \endgroup}%
+ \expandafter\long\expandafter\def\csname #1#2*\endcsname{%
+ \begingroup%
+ \let\@fxendgroup\relax%
+ \@fxpreconfigure{#3}%
+ \@ifnextchar[%]
+ {\@fxbeginsenv{#2}}{\@@fxbeginsenv{#2}}}
+ \expandafter\def\csname end#1#2*\endcsname{%
+ \@fxendenv{#2}%
+ \endgroup}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{\fx authors}
+% \begin{macro}{\FXRegisterAuthor}
+% \marg{cmdprefix}\marg{envprefix}\marg{name}\\
+% This macro creates the whole user-level interface for a particular author:
+% \begin{macrocode}
+\newcommand*\FXRegisterAuthor[3]{%
+ \@ifundefined{#1note}{}{%
+ \@fxpkgerror{command prefix '#1' already in use}{%
+ You have called \string\FXRegisterAuthor\space with a command prefix
+ already in use.\MessageBreak
+ Please choose another one.}}%
+ \@ifundefined{#2note}{}{%
+ \@fxpkgerror{environment prefix '#2' already in use}{%
+ You have called \string\FXRegisterAuthor\space with an environment
+ prefix already in use.\MessageBreak
+ Please choose another one.}}%
+ \@fxnewnotemacro{#1}{note}{#3}%
+ \@fxnewnotemacro{#1}{warning}{#3}%
+ \@fxnewnotemacro{#1}{error}{#3}%
+ \@fxnewnotemacro{#1}{fatal}{#3}%
+ \@fxnewnoteenvs{#2}{note}{#3}%
+ \@fxnewnoteenvs{#2}{warning}{#3}%
+ \@fxnewnoteenvs{#2}{error}{#3}%
+ \@fxnewnoteenvs{#2}{fatal}{#3}}
+
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}[noindex]{\fx...[*]}
+% \begin{environment}[noindex]{anfx...[*]}
+% \begin{macro}[noprint]{\fxnote}
+% \begin{macro}[noprint]{\fxwarning}
+% \begin{macro}[noprint]{\fxerror}
+% \begin{macro}[noprint]{\fxfatal}
+% \begin{macro}[noprint]{\fxnote*}
+% \begin{macro}[noprint]{\fxwarning*}
+% \begin{macro}[noprint]{\fxerror*}
+% \begin{macro}[noprint]{\fxfatal*}
+% \begin{environment}[noprint]{anfxnote}
+% \begin{environment}[noprint]{anfxwarning}
+% \begin{environment}[noprint]{anfxerror}
+% \begin{environment}[noprint]{anfxfatal}
+% \begin{environment}[noprint]{anfxnote*}
+% \begin{environment}[noprint]{anfxwarning*}
+% \begin{environment}[noprint]{anfxerror*}
+% \begin{environment}[noprint]{anfxfatal*}
+% And we use it to create the \fx default user:
+% \begin{macrocode}
+\FXRegisterAuthor{fx}{anfx}{fixme}
+% \end{macrocode}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{environment}
+% \end{macro}
+% \begin{macro}{\fixme}
+% \oarg{options}\marg{note}\\
+% Deprecate \cs{fixme}:
+% \begin{macrocode}
+\DeclareRobustCommand\fixme{%
+ \@fxpkgwarning{\string\fixme\space is deprecated;\MessageBreak
+ please use \string\fxfatal\space instead}%
+ \fxfatal}
+% \end{macrocode}
+% \end{macro}
+% \begin{environment}{afixme}
+% Deprecate the \texttt{afixme} environment:
+% \begin{macrocode}
+\def\afixme{%
+ \@fxpkgwarning{The 'afixme' environment is deprecated;\MessageBreak
+ please use 'anfxfatal' instead}%
+ \anfxfatal}
+\let\endafixme\endanfxfatal
+% \end{macrocode}
+% \end{environment}
+%
+% \subsection{Internationalization\label{sec:code:i18n}}
+% \begin{macro}{\@fxlanguages}
+% This macro lists all the supported languages, including aliases:
+% \begin{macrocode}
+\newcommand*\@fxlanguages{%
+ english,french,francais,spanish,italian,german,ngerman,danish,croatian}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Language definitions}
+% \paragraph{English}
+% \begin{lang}{english}
+% \begin{macro}[noindex]{\fxenglish...[s]name}
+% \begin{macro}[noprint]{\fxenglishnotename}
+% \begin{macro}[noprint]{\fxenglishnotesname}
+% \begin{macro}[noprint]{\fxenglishwarningname}
+% \begin{macro}[noprint]{\fxenglishwarningsname}
+% \begin{macro}[noprint]{\fxenglisherrorname}
+% \begin{macro}[noprint]{\fxenglisherrorsname}
+% \begin{macro}[noprint]{\fxenglishfatalname}
+% \begin{macro}[noprint]{\fxenglishfatalsname}
+% \begin{macro}{\englishlistfixmename}
+% \mbox{}
+% \begin{macrocode}
+\newcommand\fxenglishnotename{Note}
+\newcommand\fxenglishnotesname{Notes}
+\newcommand\fxenglishwarningname{Warning}
+\newcommand\fxenglishwarningsname{Warnings}
+\newcommand\fxenglisherrorname{Error}
+\newcommand\fxenglisherrorsname{Errors}
+\newcommand\fxenglishfatalname{Fatal}
+\newcommand\fxenglishfatalsname{Fatal errors}
+\newcommand\englishlistfixmename{List of Corrections}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{lang}
+%
+% \paragraph{French}
+% \begin{lang}{french}
+% \begin{lang}{francais}
+% \begin{macro}[noindex]{\fxfrench...[s]name}
+% \begin{macro}[noprint]{\fxfrenchnotename}
+% \begin{macro}[noprint]{\fxfrenchnotesname}
+% \begin{macro}[noprint]{\fxfrenchwarningname}
+% \begin{macro}[noprint]{\fxfrenchwarningsname}
+% \begin{macro}[noprint]{\fxfrencherrorname}
+% \begin{macro}[noprint]{\fxfrencherrorsname}
+% \begin{macro}[noprint]{\fxfrenchfatalname}
+% \begin{macro}[noprint]{\fxfrenchfatalsname}
+% \begin{macro}{\frenchlistfixmename}
+% \mbox{}
+% \begin{macrocode}
+\newcommand\fxfrenchnotename{Note}
+\newcommand\fxfrenchnotesname{Notes}
+\newcommand\fxfrenchwarningname{Attention}
+\newcommand\fxfrenchwarningsname{Avertissements}
+\newcommand\fxfrencherrorname{Erreur}
+\newcommand\fxfrencherrorsname{Erreurs}
+\newcommand\fxfrenchfatalname{Fatal}
+\newcommand\fxfrenchfatalsname{Erreurs fatales}
+\newcommand\frenchlistfixmename{Liste des Corrections}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{lang}
+% \end{lang}
+%
+% \paragraph{Spanish}
+% \begin{lang}{spanish}
+% \begin{macro}[noindex]{\fxspanish...[s]name}
+% \begin{macro}[noprint]{\fxspanishnotename}
+% \begin{macro}[noprint]{\fxspanishnotesname}
+% \begin{macro}[noprint]{\fxspanishwarningname}
+% \begin{macro}[noprint]{\fxspanishwarningsname}
+% \begin{macro}[noprint]{\fxspanisherrorname}
+% \begin{macro}[noprint]{\fxspanisherrorsname}
+% \begin{macro}[noprint]{\fxspanishfatalname}
+% \begin{macro}[noprint]{\fxspanishfatalsname}
+% \begin{macro}{\spanishlistfixmename}
+% \mbox{}
+% \begin{macrocode}
+\newcommand\fxspanishnotename{Nota}
+\newcommand\fxspanishnotesname{Notas}
+\newcommand\fxspanishwarningname{Aviso}
+\newcommand\fxspanishwarningsname{Avisos}
+\newcommand\fxspanisherrorname{Error}
+\newcommand\fxspanisherrorsname{Errores}
+\newcommand\fxspanishfatalname{Fatal}
+\newcommand\fxspanishfatalsname{Errores fatales}
+\newcommand\spanishlistfixmename{Lista de Correcciones}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{lang}
+%
+% \paragraph{Italian}
+% \begin{lang}{italian}
+% \begin{macro}[noindex]{\fxitalian...[s]name}
+% \begin{macro}[noprint]{\fxitaliannotename}
+% \begin{macro}[noprint]{\fxitaliannotesname}
+% \begin{macro}[noprint]{\fxitalianwarningname}
+% \begin{macro}[noprint]{\fxitalianwarningsname}
+% \begin{macro}[noprint]{\fxitalianerrorname}
+% \begin{macro}[noprint]{\fxitalianerrorsname}
+% \begin{macro}[noprint]{\fxitalianfatalname}
+% \begin{macro}[noprint]{\fxitalianfatalsname}
+% \begin{macro}{\italianlistfixmename}
+% \mbox{}
+% \begin{macrocode}
+\newcommand\fxitaliannotename{Nota}
+\newcommand\fxitaliannotesname{Note}
+\newcommand\fxitalianwarningname{Avviso}
+\newcommand\fxitalianwarningsname{Avvisi}
+\newcommand\fxitalianerrorname{Errore}
+\newcommand\fxitalianerrorsname{Errori}
+\newcommand\fxitalianfatalname{Fatale}
+\newcommand\fxitalianfatalsname{Errori fatali}
+\newcommand\italianlistfixmename{Corrigenda}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{lang}
+%
+% \paragraph{German}
+% \begin{lang}{german}
+% \begin{lang}{ngerman}
+% \begin{macro}[noindex]{\fxgerman...[s]name}
+% \begin{macro}[noprint]{\fxgermannotename}
+% \begin{macro}[noprint]{\fxgermannotesname}
+% \begin{macro}[noprint]{\fxgermanwarningname}
+% \begin{macro}[noprint]{\fxgermanwarningsname}
+% \begin{macro}[noprint]{\fxgermanerrorname}
+% \begin{macro}[noprint]{\fxgermanerrorsname}
+% \begin{macro}[noprint]{\fxgermanfatalname}
+% \begin{macro}[noprint]{\fxgermanfatalsname}
+% \begin{macro}{\germanlistfixmename}
+% \mbox{}
+% \begin{macrocode}
+\newcommand\fxgermannotename{Anm}
+\newcommand\fxgermannotesname{Anmerkungen}
+\newcommand\fxgermanwarningname{Warnung}
+\newcommand\fxgermanwarningsname{Warnungen}
+\newcommand\fxgermanerrorname{Fehler}
+\newcommand\fxgermanerrorsname{Fehler}
+\newcommand\fxgermanfatalname{Verh\"angnisvoll}
+\newcommand\fxgermanfatalsname{Verh\"angnisvolle fehler}
+\newcommand\germanlistfixmename{Verzeichnis der Korrekturen}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{lang}
+% \end{lang}
+%
+% \paragraph{Danish}
+% \begin{lang}{danish}
+% \begin{macro}[noindex]{\fxdanish...[s]name}
+% \begin{macro}[noprint]{\fxdanishnotename}
+% \begin{macro}[noprint]{\fxdanishnotesname}
+% \begin{macro}[noprint]{\fxdanishwarningname}
+% \begin{macro}[noprint]{\fxdanishwarningsname}
+% \begin{macro}[noprint]{\fxdanisherrorname}
+% \begin{macro}[noprint]{\fxdanisherrorsname}
+% \begin{macro}[noprint]{\fxdanishfatalname}
+% \begin{macro}[noprint]{\fxdanishfatalsname}
+% \begin{macro}{\danishlistfixmename}
+% \mbox{}
+% \begin{macrocode}
+\newcommand\fxdanishnotename{Note}
+\newcommand\fxdanishnotesname{Noter}
+\newcommand\fxdanishwarningname{Advarsel}
+\newcommand\fxdanishwarningsname{Advarsler}
+\newcommand\fxdanisherrorname{Fejl}
+\newcommand\fxdanisherrorsname{Fejl}
+\newcommand\fxdanishfatalname{D\o delige}
+\newcommand\fxdanishfatalsname{Sk\ae bnesvangre fejl}
+\newcommand\danishlistfixmename{Rettelser}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{lang}
+%
+% \paragraph{Croatian}
+% \begin{lang}{croatian}
+% \begin{macro}[noindex]{\fxcroatian...[s]name}
+% \begin{macro}[noprint]{\fxcroatiannotename}
+% \begin{macro}[noprint]{\fxcroatiannotesname}
+% \begin{macro}[noprint]{\fxcroatianwarningname}
+% \begin{macro}[noprint]{\fxcroatianwarningsname}
+% \begin{macro}[noprint]{\fxcroatianerrorname}
+% \begin{macro}[noprint]{\fxcroatianerrorsname}
+% \begin{macro}[noprint]{\fxcroatianfatalname}
+% \begin{macro}[noprint]{\fxcroatianfatalsname}
+% \begin{macro}{\croatianlistfixmename}
+% \mbox{}
+% \begin{macrocode}
+\newcommand\fxcroatiannotename{Poruka}
+\newcommand\fxcroatiannotesname{Poruke}
+\newcommand\fxcroatianwarningname{Upozorenja}
+\newcommand\fxcroatianwarningsname{Upozorenje}
+\newcommand\fxcroatianerrorname{Gre\v ska}
+\newcommand\fxcroatianerrorsname{Greske}
+\newcommand\fxcroatianfatalname{Fatalan}
+\newcommand\fxcroatianfatalsname{Kobne gre\v ske}
+\newcommand\croatianlistfixmename{Popis korekcija}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{lang}
+%
+% \subsubsection{Language tracking}
+% \begin{option}{langtrack}
+% Whether to track the value of \cs{languagename} automatically:
+% \begin{macrocode}
+\@fxdefineboolkey{lang}{langtrack}
+% \end{macrocode}
+% \end{option}
+% \begin{option}{defaultlang}
+% Which language to use when tracking leads to an unsuported language:
+% \begin{macrocode}
+\def\@fxexpr{\@fxdefinechoicekey{lang}{defaultlang}[\@fxdefaultlang]}
+\expandafter\@fxexpr\expandafter{\@fxlanguages}{}
+
+% \end{macrocode}
+% \end{option}
+%
+% \subsubsection{Language options}
+% \begin{option}{lang}
+% \begin{macro}{\@fxlang}
+% Store the current language in \cs{@fxlang} after having handled language
+% aliases, and disable language tracking:
+% \begin{macrocode}
+\def\@fxexpr{\@fxdefinechoicekey{lang}{lang}[\@fxlang]}
+\expandafter\@fxexpr\expandafter{\@fxlanguages}{%
+ \ifthenelse{\equal{#1}{francais}}{\def\@fxlang{french}}{%
+ \ifthenelse{\equal{#1}{ngerman}}{\def\@fxlang{german}}{}}%
+ \@fxsetkeys{lang}{langtrack=false}}
+
+% \end{macrocode}
+% \end{macro}
+% \end{option}
+% \begin{option}{english}
+% \begin{option}{french}
+% \begin{option}{francais}
+% \begin{option}{spanish}
+% \begin{option}{italian}
+% \begin{option}{german}
+% \begin{option}{ngerman}
+% \begin{option}{danish}
+% \begin{option}{croatian}
+% Create individual language options:
+% \begin{macrocode}
+\@for\@fxlg:=\@fxlanguages\do{
+ \def\@fxexprone{\@fxdefinevoidkey{lang}}
+ \edef\@fxexprtwo{{\@fxlg}{\noexpand\@fxsetkeys{lang}{lang=\@fxlg}}}
+ \expandafter\@fxexprone\@fxexprtwo}
% \end{macrocode}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+%
+% \subsubsection{Language abstraction layer}
+% \begin{macro}{\@fxlistfixmename}
+% Construct the ``list of fixmes'' title in a language dependent fashion:
+% \begin{macrocode}
+\newcommand*\@fxlistfixmename{\@nameuse{\@fxlang listfixmename}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\fxnotename}
+% \begin{macro}{\fxnotesname}
+% \marg{type}\\
+% Construct the notes names in a language dependent fashion:
+% \begin{macrocode}
+\newcommand*\fxnotename[1]{\@nameuse{fx\@fxlang#1name}}
+\newcommand*\fxnotesname[1]{\@nameuse{fx\@fxlang#1sname}}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
%
% \subsection{Document status processing}
-% \begin{macro}{\fixme@note}
-% \begin{macro}{\fixme@warning}
-% \begin{macro}{\fixme@error}
-% Here's where the draft or final version of the internal macros are
-% selected.
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \begin{macrocode}
-\DeclareOption{final}{
- \let\fixme@note\fixme@note@final
- \let\fixme@warning\fixme@warning@final
- \let\fixme@error\fixme@error@final
- \let\fixme@fatal\fixme@fatal@final
- \let\@fxenvbegin\@fxenvbegin@final
- \let\@fxenvend\@fxenvend@final
- \let\listoffixmes\listoffixmes@final
- }
-
-\DeclareOption{draft}{
- \@ifclassloaded{article}{
- \let\@listoffixmes@pretoc\@listoffixmes@pretoc@article
- \let\@listoffixmes@posttoc\@listoffixmes@posttoc@article}{
- \@ifclassloaded{report}{
- \let\@listoffixmes@pretoc\@listoffixmes@pretoc@report
- \let\@listoffixmes@posttoc\@listoffixmes@posttoc@report}{
- \@ifclassloaded{book}{
- \let\@listoffixmes@pretoc\@listoffixmes@pretoc@book
- \let\@listoffixmes@posttoc\@listoffixmes@posttoc@book}{
- \@ifclassloaded{scrartcl}{
- \let\@listoffixmes@pretoc\@listoffixmes@pretoc@scrartcl
- \let\@listoffixmes@posttoc\@listoffixmes@posttoc@scrartcl}{
- \@ifclassloaded{scrreprt}{
- \let\@listoffixmes@pretoc\@listoffixmes@pretoc@scrreprt
- \let\@listoffixmes@posttoc\@listoffixmes@posttoc@scrreprt}{
- \@ifclassloaded{scrbook}{
- \let\@listoffixmes@pretoc\@listoffixmes@pretoc@scrbook
- \let\@listoffixmes@posttoc\@listoffixmes@posttoc@scrbook}{
- \@ifclassloaded{amsbook}{
- \let\listoffixmes@draft\listoffixmes@draft@ams}{
- \@ifclassloaded{amsart}{
- \let\listoffixmes@draft\listoffixmes@draft@ams}{
- %% Use the article layout by default.
- \let\@listoffixmes@pretoc\@listoffixmes@pretoc@article
- \let\@listoffixmes@posttoc\@listoffixmes@posttoc@article}
- }
- }
- }
- }
- }
- }
- }
- \let\fixme@note\fixme@note@draft
- \let\fixme@warning\fixme@warning@draft
- \let\fixme@error\fixme@error@draft
- \let\fixme@fatal\fixme@fatal@draft
- \let\@fxenvbegin\@fxenvbegin@draft
- \let\@fxenvend\@fxenvend@draft
- \let\listoffixmes\listoffixmes@draft
-}
-
-% \end{macrocode}
-% Put us in \texttt{english} and \texttt{final} mode, and enable the marginal
-% notes. Note that as documented, marginal notes are incompatible with the ACM
-% SIG classes. Initially, I thought I would detect these classes and issue
-% an error if marginal layout (or clue) is active. However, I changed my mind,
-% because nothing prevents somebody to write a new class on top of these ones
-% and authorize |\marginpar| back again. Normally these classes issue an error
-% if |\marginpar| is used. However, the 2.3 / June 2007 versions are buggy and
-% the error actually triggers a stack overflow in \LaTeX\ldots Patch on its
-% way. Oh boy, these classes are a mess.
-% \begin{macrocode}
-\ExecuteOptions{english,final,margin,nosilent}
-\ProcessOptions*
-
-% \end{macrocode}
-% Finally, ensure backward compatibility for |\fixme| with |\FiXmeUser|, and
-% output a summary giving the number of fixme notes at the end of the
+% \begin{macro}{\@@@fxnote@early}
+% \begin{macro}{\@@@fxnote@late}
+% \begin{macro}{\@@@@fxbeginenv}
+% \begin{macro}{\@fxendenv}
+% \begin{macro}{\@fxtargetlayout}
+% \begin{macro}{\listoffixmes}
+% \begin{option}{final}
+% \begin{option}{draft}
+% \begin{option}{status}
+% Select draft or final versions of internal macros (some of
+% them also depending on the document class):
+% \begin{macrocode}
+\@fxdefinevoidkey{status}{final}{%
+ \let\@@@fxnote@early\@@@fxnote@early@final%
+ \let\@@@fxnote@late\@@@fxnote@late@final%
+ \let\@@@@fxbeginenv\@@@@fxbeginenv@final
+ \let\@fxendenv\@fxendenv@final%
+ \let\@fxtargetlayout\@fxtargetlayout@final%
+ \let\listoffixmes\lox@final}
+\@fxdefinevoidkey{status}{draft}{%
+ \let\@@@fxnote@early\@@@fxnote@early@draft%
+ \let\@@@fxnote@late\@@@fxnote@late@draft%
+ \let\@@@@fxbeginenv\@@@@fxbeginenv@draft
+ \let\@fxendenv\@fxendenv@draft%
+ \let\@fxtargetlayout\@fxtargetlayout@draft%
+ \let\listoffixmes\lox@draft}
+\@fxdefinechoicekey{status}{status}{final,draft}{\@fxsetkeys{status}{#1}}
+
+% \end{macrocode}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Theme support}
+% \begin{macro}{\FXProvidesTheme}
+% \marg{name}\oarg{release information}
+% \begin{macrocode}
+\newcommand*\FXProvidesTheme[1]{\ProvidesPackage{fxtheme#1}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\fxusetheme}
+% \marg{name}
+% \begin{macrocode}
+\newcommand*\fxusetheme[1]{\usepackage{fxtheme#1}}
+% \end{macrocode}
+% \end{macro}
+% \begin{option}{theme}
+% \mbox{}
+% \begin{macrocode}
+\@fxdefinekey{theme}{theme}{\fxusetheme{#1}}
+% \end{macrocode}
+% \end{option}
+%
+% \subsection{Finale}
+% \subsubsection{Class-dependent settings}
+% Currently, our class dependencies only matter in draft mode, so one could
+% argue that it is not optimal to handle this here. However, it would be
+% incorrect to do it in the \texttt{draft} option code because this option can
+% be switched at any point in the document (remember that it is understood
+% even by the annotation macros and environments) and the stuff below
+% should only be executed once. Besides, \cs{@ifclassloaded} is an
+% \cs{@onlypreamble} macro\ldots
+%
+% As documented, marginal notes are incompatible with the ACM SIG classes.
+% Initially, I thought I would detect these classes and issue an error if
+% marginal layout (or clue) is active. However, I changed my mind, because
+% nothing prevents somebody to write a new class on top of these ones and
+% authorize \cs{marginpar} back again. Normally these classes issue an error
+% if \cs{marginpar} is used. However, the 2.3 / June 2007 versions are buggy
+% and the error actually triggers a stack overflow in \LaTeX\ldots (patch
+% submitted). Oh boy, these classes are a mess.
+% \begin{macro}{\@lox@prtc}
+% \begin{macro}{\@lox@psttc}
+% \begin{macro}{\@lox@draft}
+% \begin{macrocode}
+\@ifclassloaded{article}{%
+ \let\@lox@prtc\@lox@prtc@article%
+ \let\@lox@psttc\@lox@psttc@article}{%
+ \@ifclassloaded{report}{%
+ \let\@lox@prtc\@lox@prtc@report%
+ \let\@lox@psttc\@lox@psttc@report}{%
+ \@ifclassloaded{book}{%
+ \let\@lox@prtc\@lox@prtc@book%
+ \let\@lox@psttc\@lox@psttc@book}{%
+ \@ifclassloaded{scrartcl}{%
+ \let\@lox@prtc\@lox@prtc@scrartcl%
+ \let\@lox@psttc\@lox@psttc@scrartcl}{%
+ \@ifclassloaded{scrreprt}{%
+ \let\@lox@prtc\@lox@prtc@scrreprt%
+ \let\@lox@psttc\@lox@psttc@scrreprt}{%
+ \@ifclassloaded{scrbook}{%
+ \let\@lox@prtc\@lox@prtc@scrbook%
+ \let\@lox@psttc\@lox@psttc@scrbook}{%
+ \@ifclassloaded{amsbook}{%
+ \let\lox@draft\lox@draft@ams}{%
+ \@ifclassloaded{amsart}{%
+ \let\lox@draft\lox@draft@ams}{%
+ %% Use the article layout by default.
+ \let\@lox@prtc\@lox@prtc@article%
+ \let\@lox@psttc\@lox@psttc@article}}}}}}}}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Options Processing}
+% First, we execute some options to initialize \fx to something sensible,
+% and then we process the user ones. Note the abscence of the \texttt{theme}
+% family here.
+% \begin{macrocode}
+\ExecuteOptionsX[fx]<%
+ mode,status,lang,log,note,face,layout,envlayout,targetlayout>{%
+ mode=singleuser,%
+ status=final,%
+ lang=english,%
+ langtrack=false,%
+ defaultlang=english,%
+ nosilent,%
+ author=fixme,%
+ target=thepage,%
+ layout=margin,%
+ innerlayout={layout=inline},%
+ envlayout=plain,%
+ targetlayout=plain,%
+ inlineface=\bfseries,%
+ marginface=\footnotesize,%
+ envface=\bfseries,%
+ targetface=\itshape}
+\ProcessOptionsX*[fx]<%
+ mode,status,lang,log,note,face,layout,envlayout,targetlayout>
+
+% \end{macrocode}
+%
+% \subsubsection{The \cs{fxsetup} macro}
+% \begin{macro}{\fxsetup}
+% \marg{options}\\
+% The inevitable setup macro, extremely impressive yet as trivial as can be
+% with the \texttt{xkeyval} package\ldots \cs{fxsetup} is the only place
+% where the \texttt{theme} family is processed.
+% \begin{macrocode}
+\newcommand*\fxsetup[1]{%
+ \@fxsetkeys{%
+ mode,status,lang,log,note,face,layout,envlayout,targetlayout,theme}{%
+ #1}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{\fx summary}
+% Finally, output a summary giving the number of fixme notes at the end of the
% compilation:
% \begin{macrocode}
-\AtBeginDocument{%
- \ifx\FiXmeUser\empty
- \renewcommand\FiXmeUser[1]{\FXUser{\fixmefatalprefix}{#1}}
+\AtEndDocument{%
+ \iffx@log@silent\else
+ \GenericWarning{%
+ (FiXme)\@spaces\@spaces}{%
+ FiXme Summary: Number of notes: \thefxnotecount,\MessageBreak%
+ Number of warnings: \thefxwarningcount,\MessageBreak%
+ Number of errors: \thefxerrorcount,\MessageBreak%
+ Number of fatal errors: \thefxfatalcount,\MessageBreak%
+ Total: \thefixmecount\@gobble}%
\fi}
+%</fixme>
+% \end{macrocode}
+%
+% \appendix
+% \section{External Layouts}
+% \subsection{Environment layouts}
+% \subsubsection{The \texttt{color} layout}
+% \begin{envlayout}{color}
+% \mbox{}
+% \begin{macrocode}
+%<*fxenvlayoutcolor>
+\NeedsTeXFormat{LaTeX2e}
+\FXProvidesEnvLayout{color}
-\AtEndDocument{%
- \GenericWarning{%
- (FiXme)\@spaces\@spaces\@spaces\@spaces
- }{%
- Package FiXme Summary: Number of notes: \thefixmenotecount,\MessageBreak%
- Number of warnings: \thefixmewarningcount,\MessageBreak%
- Number of errors: \thefixmeerrorcount,\MessageBreak%
- Number of fatal errors: \thefixmefatalcount,\MessageBreak%
- Total: \thefixmecount\@gobble%
- }}
+\RequirePackage{color}
+
+% \end{macrocode}
+% \begin{macro}{\@fxdocolon}
+% \marg{author}\\
+% Add a colon after the author tag, unless empty.
+% \begin{macrocode}
+\providecommand*\@fxdocolon[1]{%
+ \ifthenelse{\equal{#1}{}}{\def\@fxcolon{}}{\def\@fxcolon{: }}}
+
+% \end{macrocode}
+% \end{macro}
+% \begin{color}{fxnote}
+% \begin{color}{fxwarning}
+% \begin{color}{fxerror}
+% \begin{color}{fxfatal}
+% Environments use the same colors as the notes themselves because
+% their contents really is a longer note.
+% \begin{macrocode}
+\definecolor{fxnote}{rgb}{0.0000,0.6000,0.0000}
+\definecolor{fxwarning}{rgb}{1.0000,0.5490,0.0000}
+\definecolor{fxerror}{rgb}{1.0000,0.2706,0.0000}
+\definecolor{fxfatal}{rgb}{1.0000,0.0000,0.0000}
+
+\fxsetface{env}{}
+
+% \end{macrocode}
+% \end{color}
+% \end{color}
+% \end{color}
+% \end{color}
+% \begin{macro}{\FXEnvLayoutColorBegin}
+% \begin{macro}{\FXEnvLayoutColorEnd}
+% \marg{type}\marg{author}
+% \begin{macrocode}
+\newcommand*\FXEnvLayoutColorBegin[2]{%
+ \@fxdocolon{#2}%
+ \@fxuseface{env}\color{fx#1}\ignorespaces#2\@fxcolon\ignorespaces}
+\newcommand*\FXEnvLayoutColorEnd[2]{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\@fxenvlayout@color@begin}
+% \begin{macro}{\@fxenvlayout@color@end}
+% \begin{macrocode}
+\FXRegisterEnvLayout{color}{\FXEnvLayoutColorBegin}{\FXEnvLayoutColorEnd}
+%</fxenvlayoutcolor>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{envlayout}
+%
+% \subsubsection{The \texttt{colorsig} layout}
+% \begin{envlayout}{colorsig}
+% \mbox{}
+% \begin{macrocode}
+%<*fxenvlayoutcolorsig>
+\NeedsTeXFormat{LaTeX2e}
+\FXProvidesEnvLayout{colorsig}
+
+\RequirePackage{color}
+
+% \end{macrocode}
+% \begin{face}{signature}
+% \mbox{}
+% \begin{macrocode}
+\@fxnewface[\itshape]{signature}
+% \end{macrocode}
+% \end{face}
+% \begin{macro}{\@fxdosig}
+% \marg{author}
+% \begin{macro}{\@fxsignature}
+% Use a signature of the form ``-- sig'', unless author is empty.
+% \begin{macrocode}
+\providecommand*\@fxdosig[1]{%
+ \ifthenelse{\equal{#1}{}}{\def\@fxsignature{}}{%
+ \def\@fxsignature{ -- {\@fxuseface{signature}#1}}}}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{color}{fxnote}
+% \begin{color}{fxwarning}
+% \begin{color}{fxerror}
+% \begin{color}{fxfatal}
+% Environments use the same colors as the notes themselves because
+% their contents really is a longer note.
+% \begin{macrocode}
+\definecolor{fxnote}{rgb}{0.0000,0.6000,0.0000}
+\definecolor{fxwarning}{rgb}{1.0000,0.5490,0.0000}
+\definecolor{fxerror}{rgb}{1.0000,0.2706,0.0000}
+\definecolor{fxfatal}{rgb}{1.0000,0.0000,0.0000}
+
+\fxsetface{env}{}
+
+% \end{macrocode}
+% \end{color}
+% \end{color}
+% \end{color}
+% \end{color}
+% \begin{macro}{\FXEnvLayoutColorSigBegin}
+% \begin{macro}{\FXEnvLayoutColorSigEnd}
+% \marg{type}\marg{author}
+% \begin{macrocode}
+\newcommand*\FXEnvLayoutColorSigBegin[2]{\@fxuseface{env}\color{fx#1}}
+\newcommand*\FXEnvLayoutColorSigEnd[2]{\@fxdosig{#2}\@fxsignature}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\@fxenvlayout@colorsig@begin}
+% \begin{macro}{\@fxenvlayout@colorsig@end}
+% \begin{macrocode}
+\FXRegisterEnvLayout{colorsig}{%
+ \FXEnvLayoutColorSigBegin}{\FXEnvLayoutColorSigEnd}
+%</fxenvlayoutcolorsig>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{envlayout}
+%
+% \subsection{Target Layouts}
+% Since target layouts don't include author information, they're orthogonal to
+% (and hence usable in) prefix/signature display.
+%
+% \subsubsection{The \texttt{changebar} layout}
+% \begin{targetlayout}{changebar}
+% \mbox{}
+% \begin{macrocode}
+%<*fxtargetlayoutchangebar>
+\NeedsTeXFormat{LaTeX2e}
+\FXProvidesTargetLayout{changebar}
+
+\RequirePackage{changebar}
+\setlength{\changebarsep}{5pt}
+
+\fxsetface{target}{}
+% \end{macrocode}
+% \begin{macro}{\FXTargetLayoutChangeBar}
+% \marg{target}
+% \begin{macrocode}
+\newcommand\FXTargetLayoutChangeBar[2]{\cbstart\@fxuseface{target}#2\cbend}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@fxtargetlayout@changebar}
+% \begin{macrocode}
+\FXRegisterTargetLayout{changebar}{\FXTargetLayoutChangeBar}
+%</fxtargetlayoutchangebar>
+% \end{macrocode}
+% \end{macro}
+% \end{targetlayout}
+%
+% \subsubsection{The \texttt{color} layout}
+% \begin{targetlayout}{color}
+% \mbox{}
+% \begin{macrocode}
+%<*fxtargetlayoutcolor>
+\NeedsTeXFormat{LaTeX2e}
+\FXProvidesTargetLayout{color}
+
+\RequirePackage{color}
+\definecolor{fxnote}{rgb}{0.0000,0.6000,0.0000}
+\definecolor{fxwarning}{rgb}{1.0000,0.5490,0.0000}
+\definecolor{fxerror}{rgb}{1.0000,0.2706,0.0000}
+\definecolor{fxfatal}{rgb}{1.0000,0.0000,0.0000}
+
+% \end{macrocode}
+% \begin{color}{fxtarget}
+% \mbox{}
+% \begin{macrocode}
+\definecolor{fxtarget}{rgb}{0.3725,0.6196,0.6275}
+
+\fxsetface{target}{}
+
+% \end{macrocode}
+% \end{color}
+% \begin{macro}{\FXTargetLayoutColor}
+% \marg{target}
+% \begin{macrocode}
+\newcommand\FXTargetLayoutColor[2]{\@fxuseface{target}\color{fxtarget}#2}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@fxtargetlayout@color}
+% \begin{macrocode}
+\FXRegisterTargetLayout{color}{\FXTargetLayoutColor}
+%</fxtargetlayoutcolor>
+% \end{macrocode}
+% \end{macro}
+% \end{targetlayout}
+%
+% \subsubsection{The \texttt{colorcb} layout}
+% \begin{targetlayout}{colorcb}
+% \mbox{}
+% \begin{macrocode}
+%<*fxtargetlayoutcolorcb>
+\NeedsTeXFormat{LaTeX2e}
+\FXProvidesTargetLayout{colorcb}
+
+\RequirePackage{color}
+
+\RequirePackage[color]{changebar}
+\setlength{\changebarsep}{5pt}
+
+\fxsetface{target}{}
+% \end{macrocode}
+% \begin{macro}{\FXTargetLayoutColorCB}
+% \marg{target}
+% \begin{macrocode}
+\newcommand\FXTargetLayoutColorCB[2]{%
+ \cbstart\cbcolor{fx#1}\@fxuseface{target}#2\cbend}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@fxtargetlayout@colorcb}
+% \begin{macrocode}
+\FXRegisterTargetLayout{colorcb}{\FXTargetLayoutColorCB}
+%</fxtargetlayoutcolorcb>
+% \end{macrocode}
+% \end{macro}
+% \end{targetlayout}
+%
+% \section{Themes}
+% \subsection{The \texttt{signature} theme}
+% \begin{theme}{signature}
+% \mbox{}
+% \begin{macrocode}
+%<*fxthemesignature>
+\NeedsTeXFormat{LaTeX2e}
+\FXProvidesTheme{signature}
+
+% \end{macrocode}
+% \cs{@fxdosig} and \cs{@fxsignature} are provided by the \texttt{signature}
+% environment layout.
+% \begin{macrocode}
+\fxuseenvlayout{signature}
+
+\renewcommand*\FXLayoutFootnote[3]{%
+ \@fxdosig{#3}%
+ \footnote{\fxnotename{#1}: #2\@fxsignature}}
+\renewcommand*\FXLayoutMargin[3]{%
+ \@fxdosig{#3}%
+ \marginpar[%
+ \raggedleft\@fxuseface{margin}\fxnotename{#1}: #2\@fxsignature]{%
+ \raggedright\@fxuseface{margin}\fxnotename{#1}: #2\@fxsignature}}
+\renewcommand*\FXLayoutMarginClue[3]{%
+ \@fxdosig{#3}%
+ \marginpar[\raggedleft\@fxuseface{margin}\fxnotename{#1}!\@fxsignature]{%
+ \raggedright\@fxuseface{margin}\fxnotename{#1}!\@fxsignature}}
+\renewcommand*\FXLayoutInline[3]{%
+ \@fxdosig{#3}%
+ {\@fxuseface{inline}\fxnotename{#1}: #2\@fxsignature}}
+\renewcommand*\FXLayoutIndex[3]{%
+ \@fxdosig{#3}%
+ \iffx@mode@multiuser%
+ \index{***@\fixmeindexname:%
+ !\@nameuse{@fx#1key}@\fxnotesname{#1}:%
+ !\@nameuse{thefx#1count}: #2\@fxsignature}%
+ \index{***#3@\fixmeindexname{} (#3):%
+ !\@nameuse{@fx#1key}@\fxnotesname{#1}:%
+ !\@nameuse{thefx#1count}: #2}%
+ \else%
+ \index{***@\fixmeindexname:%
+ !\@nameuse{@fx#1key}@\fxnotesname{#1}:%
+ !\@nameuse{thefx#1count}: #2}%
+ \fi}
+\renewcommand*\FXLayoutContentsLine[3]{%
+ \iffx@mode@multiuser%
+ \@fxdosig{#3}%
+ \fxaddcontentsline{\fxnotename{#1}: #2\@fxsignature}%
+ \else%
+ \fxaddcontentsline{\fxnotename{#1}: #2}%
+ \fi}
+%</fxthemesignature>
+% \end{macrocode}
+% \end{theme}
+%
+% \subsection{The \texttt{color} theme}
+% \begin{theme}{color}
+% \mbox{}
+% \begin{macrocode}
+%<*fxthemecolor>
+\NeedsTeXFormat{LaTeX2e}
+\FXProvidesTheme{color}
+
+\RequirePackage{color}
+
+\FXRequireEnvLayout{color}
+\FXRequireTargetLayout{color}
+
+\fxsetface{inline}{}
+
+\renewcommand*\FXLayoutFootnote[3]{%
+ \@fxdocolon{#3}%
+ \footnote{\color{fx#1}\ignorespaces#3\@fxcolon #2}}
+\renewcommand*\FXLayoutMargin[3]{%
+ \@fxdocolon{#3}%
+ \marginpar[%
+ \raggedleft\@fxuseface{margin}\color{fx#1}\ignorespaces#3\@fxcolon#2]{%
+ \raggedright\@fxuseface{margin}\color{fx#1}\ignorespaces#3\@fxcolon#2}}
+\renewcommand*\FXLayoutMarginClue[3]{%
+ \marginpar[\raggedleft\@fxuseface{margin}\color{fx#1}\ignorespaces#3!]{%
+ \raggedright\@fxuseface{margin}\color{fx#1}\ignorespaces#3!}}
+\renewcommand*\FXLayoutInline[3]{%
+ \@fxdocolon{#3}%
+ {\@fxuseface{inline}\color{fx#1}\ignorespaces#3\@fxcolon#2}}
+\renewcommand*\FXLayoutIndex[3]{%
+ \iffx@mode@multiuser%
+ \index{***@\fixmeindexname:%
+ !\@nameuse{@fx#1key}@\fxnotesname{#1}:%
+ !{\color{fx#1}\@nameuse{thefx#1count}: #3: #2}}%
+ \index{***#3@\fixmeindexname{} (#3):%
+ !\@nameuse{@fx#1key}@\fxnotesname{#1}:%
+ !{\color{fx#1}\@nameuse{thefx#1count}: #2}}%
+ \else%
+ \index{***@\fixmeindexname:%
+ !\@nameuse{@fx#1key}@\fxnotesname{#1}:%
+ !{\color{fx#1}\@nameuse{thefx#1count}: #2}}%
+ \fi}
+
+\renewcommand*\FXLayoutContentsLine[3]{%
+ \@fxdocolon{#3}%
+ \iffx@mode@multiuser%
+ \fxaddcontentsline{\color{fx#1}\ignorespaces#3\@fxcolon#2}%
+ \else%
+ \fxaddcontentsline{\color{fx#1}#2}%
+ \fi}
+%</fxthemecolor>
+% \end{macrocode}
+% \end{theme}
+%
+% \subsection{The \texttt{colorsig} theme}
+% \begin{theme}{colorsig}
+% The \texttt{colorsig} environment layout provides \cs{@fxdosig}, so there
+% is no need to provide it here.
+% \begin{macrocode}
+%<*fxthemecolorsig>
+\NeedsTeXFormat{LaTeX2e}
+\FXProvidesTheme{colorsig}
+
+\RequirePackage{color}
+
+\FXRequireEnvLayout{colorsig}
+\FXRequireTargetLayout{color}
+
+\fxsetface{inline}{}
+
+\renewcommand*\FXLayoutFootnote[3]{%
+ \@fxdosig{#3}%
+ \footnote{\color{fx#1}#2\@fxsignature}}
+\renewcommand*\FXLayoutMargin[3]{%
+ \@fxdosig{#3}%
+ \marginpar[%
+ \raggedleft\@fxuseface{margin}\color{fx#1}#2\@fxsignature]{%
+ \raggedright\@fxuseface{margin}\color{fx#1}#2\@fxsignature}}
+\renewcommand*\FXLayoutMarginClue[3]{%
+ \@fxdosig{#3}%
+ \marginpar[\raggedleft\@fxuseface{margin}\color{fx#1}!\@fxsignature]{%
+ \raggedright\@fxuseface{margin}\color{fx#1}!\@fxsignature}}
+\renewcommand*\FXLayoutInline[3]{%
+ \@fxdosig{#3}%
+ {\@fxuseface{inline}\color{fx#1}#2\@fxsignature}}
+\renewcommand*\FXLayoutIndex[3]{%
+ \@fxdosig{#3}%
+ \iffx@mode@multiuser%
+ \index{***@\fixmeindexname:%
+ !\@nameuse{@fx#1key}@\fxnotesname{#1}:%
+ !{\color{fx#1}\@nameuse{thefx#1count}: #2\@fxsignature}}%
+ \index{***#3@\fixmeindexname{} (#3):%
+ !\@nameuse{@fx#1key}@\fxnotesname{#1}:%
+ !{\color{fx#1}\@nameuse{thefx#1count}: #2}}%
+ \else%
+ \index{***@\fixmeindexname:%
+ !\@nameuse{@fx#1key}@\fxnotesname{#1}:%
+ !{\color{fx#1}\@nameuse{thefx#1count}: #2}}%
+ \fi}
+\renewcommand*\FXLayoutContentsLine[3]{%
+ \iffx@mode@multiuser%
+ \@fxdosig{#3}%
+ \fxaddcontentsline{\color{fx#1}#2\@fxsignature}%
+ \else%
+ \fxaddcontentsline{\color{fx#1}#2}%
+ \fi}
+%</fxthemecolorsig>
% \end{macrocode}
+% \end{theme}
%
% ^^A \PrintChanges
-% ^^A \PrintIndex
+% ^^A Nobody messes up with the marks in this document, but \index@prologue.
+% ^^A That sucks.
+% \makeatletter{\let\markboth\@gobbletwo\PrintIndex}\makeatother
% \Finale
%
+% ^^A Local variables:
+% ^^A eval: (doxitems "option" "counter" "lang" "face" "color")
+% ^^A eval: (doxitem "\\(env\\|target\\)?layout")
+% ^^A End:
% ^^A fixme.dtx ends here.