summaryrefslogtreecommitdiff
path: root/support/glosstex/glosstex.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'support/glosstex/glosstex.dtx')
-rw-r--r--support/glosstex/glosstex.dtx1769
1 files changed, 1769 insertions, 0 deletions
diff --git a/support/glosstex/glosstex.dtx b/support/glosstex/glosstex.dtx
new file mode 100644
index 0000000000..0a1c20e8de
--- /dev/null
+++ b/support/glosstex/glosstex.dtx
@@ -0,0 +1,1769 @@
+% \iffalse -*- latex -*-
+%
+% $Id: glosstex.dtx,v 1.57 1997/12/24 18:48:47 volkan Exp $
+%
+% GlossTeX, a tool for the automatic preparation of glossaries.
+% Copyright (C) 1997 Volkan Yavuz
+%
+% This program is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License
+% as published by the Free Software Foundation; either version 2
+% of the License, or (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+%
+% Volkan Yavuz, yavuzv@rumms.uni-mannheim.de
+%
+%% \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+%<*!ist>
+\def\filename{glosstex}
+\def\fileversion{0.4}
+\def\filedate{1997/12/13}
+\let\docdate=\filedate
+%</!ist>
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{array}
+\usepackage{glosstex}
+
+\OnlyDescription
+\CodelineIndex
+%\EnableCrossrefs
+
+\setlength{\arrayrulewidth}{0.4pt}
+\setlength{\doublerulesep}{0pt}
+
+\newcommand{\GloTeX}{Glo\TeX}
+\newcommand{\MakeIndex}{\textsc{MakeIndex}}
+\newcommand{\unix}{\textsc{Unix}}
+\newcommand{\package}[1]{\textsf{#1}}
+\newcommand{\file}[1]{\texttt{#1}}
+\newcommand{\opt}[1]{$[$#1$]$}
+\newcommand{\teTeX}{\textrm{te}\TeX}
+
+\newenvironment{definition}{\begin{quote}}{\end{quote}}
+\newenvironment{example}{\begin{quote}}{\end{quote}}
+
+\begin{document}
+\DocInput{glosstex.dtx}
+%\PrintIndex
+\end{document}
+%</driver>
+%
+% \fi
+%
+% \CheckSum{1369}
+%
+% \title{\GlossTeX{} \fileversion}
+% \author{\scshape Volkan Yavuz\footnote{e-mail: yavuzv@rumms.uni-mannheim.de}}
+% \date{\filedate}
+% \maketitle
+%
+% \begin{abstract}
+% \GlossTeX{} is a tool for the preparation of glossaries, lists of
+% acronyms or sorted lists in general. It greatly
+% simplifies this task. One or more glossary-definition files serve as
+% databases which contain descriptions of terms. These terms are
+% identified through labels. Based upon labels set into the
+% \TeX{}-source, \GlossTeX{} determines which entries have to appear in
+% the typeset list. \GlossTeX{} uses \MakeIndex{} for the sorting of the
+% lists. References to the place where a term appears in the text
+% can be set in the list. A term consists of a label which is
+% used to identify it, an optional item describing the typeset
+% output, an optional long-form and the actual text representing
+% it. There are many ways to access each of these fields within
+% the document. It is also possible to generate cross-references
+% to another term. \GlossTeX{} is well customizable in respect to
+% the produced output.
+% \end{abstract}
+%
+% \tableofcontents
+% \listoftables
+% \printglosstex(acr)
+%
+% \section{Introduction}
+% \subsection{Purpose}
+% \GlossTeX{} is a tool for the automatic preparation of glossaries,
+% lists of acronyms, nomenclature and sorted lists in general. Based
+% upon the labels set into the \TeX{}-source, \GlossTeX{} determines
+% which entries from a glossary-definition file have to be processed
+% to generate the list. \GlossTeX{} then creates an intermediate file
+% that has to be processed by \MakeIndex{} for sorting. The output of
+% \MakeIndex{} is then included into the \TeX{}-source for
+% typesetting. With each term associated is an item representing the
+% typeset output, an optional long-form if it's an acronym and an
+% optional descriptive text. These elements can all be accessed within
+% the document in many ways.
+%
+% \subsection{History}
+% I created \GlossTeX{} because there were no tools for the
+% preparation of glossaries that fit my needs. \GlossTeX{} is mainly a
+% combination of the features of the packages \package{acronym},
+% \package{nomencl} and \GloTeX{}. The commands starting with |\ac|
+% are taken more or less directly from \package{acronym} and the way
+% \GlossTeX{} handles page references is almost identical to the way
+% \package{nomencl} does. The use of glossary databases is inspired by
+% \GloTeX{}.
+%
+% \subsection{Legalise}
+% \GlossTeX{} is provided ``as is'' and comes with absolutely no
+% warranty. It is covered by the GNU General Public License (see the
+% file |COPYING| that comes with this package).
+%
+% \begin{center}
+% \noindent\copyright\ Volkan Yavuz, 1997
+% \end{center}
+%
+% \section{Building and Installation}
+% First, you need to build glosstex from its C sources. Note that you
+% need an ANSI C compiler. If you have
+% MAKE and a decent OS (speak \unix{}), typing |make| from the shell
+% should build the binary (have a
+% look at the various makefiles, namely |Makefile| (which is my rather
+% complex development version that may not run on your system setup),
+% |Makefile.unx| (which is the most generic one) and
+% |Makefile.os2|). Also have a look at the start of the makefiles
+% where you will find some variables to be customized. The most
+% important ones may be |CC| and |SHELL|. You may also want to have a
+% look at |config.h|.
+%
+% If you don't
+% have MAKE get it right now or just issue
+% these commands:
+%
+% \begin{example}
+% |cc -c database.c -o database.o|\\
+% |cc -c error.c -o error.o|\\
+% |cc -c labels.c -o labels.o|\\
+% |cc -c list.c -o list.o|\\
+% |cc -c main.c -o main.o|\\
+% |cc -c version.c -o version.o|\\
+% |cc database.o error.o labels.o list.o main.o version.o -o glosstex|
+% \end{example}
+%
+% Now just move the resulting binary to a directory where your other
+% binaries live. After that you need to unpack |glosstex.dtx|. Do this
+% by invoking
+% \begin{example}
+% |latex glosstex.ins|
+% \end{example}
+%
+% which will produce some more files. You will have to move them
+% to their proper places according to your particular
+% \TeX{}-installation. The instructions that will appear on the
+% screen should give you a good start.
+%
+% \subsection{A Goodie for \teTeX{} User}
+% If you are using \textsc{Thomas Esser}'s fantastic \teTeX{} system,
+% \GlossTeX\ has some good news for you. \GlossTeX\ comes with a
+% kpathsea shell-wrapper which supports path searching. For this to
+% work, rename |glosstex| to |glosstex.bin| and |glosstex.sh| to
+% |glosstex|. Put them somewhere convenient. Now add a line of the
+% form
+% \begin{example}
+% |GDFINPUTS = $KPSE_DOT:$TEXMFS/glosstex//|
+% \end{example}
+% in you |texmf.cnf| file. That's it!
+%
+% If you get problems, the following notes may help you.
+% First check whether
+% \begin{example}
+% |kpsetool -v -n glosstex '$GDFINPUTS'|
+% \end{example}
+% and
+% \begin{example}
+% |kpsetool -v -n tex '$GDFINPUTS'|
+% \end{example}
+%
+% do what you want, i.e.\ their output
+% should be equal. These won't find your \teTeX{} |texmf| tree (where
+% your |texmf.cnf| file lives) if |glosstex| is not in something like
+% |teTeX/bin| or |teTeX/bin/i386-linux|. In these cases, replace
+% \begin{example}
+% |TETEXDIR = $SELFAUTOPARENT|
+% \end{example}
+% in |texmf.cnf| with something like
+% \begin{example}
+% |TETEXDIR = /usr/local/lib/teTeX|.
+% \end{example}
+% This makes sure that the proper |texmf| tree is found, even if
+% |glosstex| is not in the \teTeX{}
+% |texmf| tree but in your local |texmf| tree.
+%
+% You also need symbolic links from e.\,g.\
+% |/usr/local/lib/localTeX/texmf.cnf| to your \teTeX{} |texmf.cnf|. This
+% is because kpathsea looks for |texmf.cnf| in the tree where the
+% binary was found.
+%
+% These instructions should apply to \teTeX{} version 0.4 or newer.
+%
+% \section{Usage}
+% The \LaTeX{}-macros needed by \GlossTeX{} have to be included into
+% the source using
+%
+% \begin{example}
+% |\usepackage|\opt{|[|\meta{options}|]|}|{glosstex}|
+% \end{example}
+%
+% Valid \meta{options} are listed in table \ref{tab:options}.
+%
+% \begin{table}[htbp]
+% \begin{center}
+% \begin{tabular}{>{\ttfamily}ll}
+% \hline\hline
+% \rmfamily Option & Discussed in section\\
+% \hline
+% refpage, \textit{norefpage} &\ref{sec:page_references}\\
+% \textit{itemfirst}, longfirst &\ref{sec:order}\\
+% \textit{text}, footnote &\ref{sec:footnotes}\\
+% \textit{roundparen}, squareparen&\ref{sec:parentheses}\\
+% \hline\hline
+% \end{tabular}
+% \caption[Package options.]{Package options. Defaults are set in
+% \textit{italics}.}
+% \label{tab:options}
+% \end{center}
+% \end{table}
+%
+% Whenever you want a term to appear in the glossary, you insert
+% \DescribeMacro{\glosstex}
+% \begin{definition}
+% |\glosstex|\opt{|(|\meta{list}|)|}\opt{|[|\meta{pageref-mode}|]|}|{|\meta{label}|}|
+% \end{definition}
+%
+% into the text. \meta{label} references the entry and the optional
+% arguments \meta{pageref-mode} and \meta{list} determine the mode for
+% page references\footnote{Page references are described in section
+% \ref{sec:page_references}. \meta{pageref-mode} works in conjunction
+% with the optional arguments |refpage| and |norefpage| to the package
+% and defaults to |p|. \meta{list} defaults to |glo|.} and the list
+% the referenced term should appear in.
+%
+% But you can create $n$ independent lists and make each \meta{label}
+% appear in any \meta{list}, each appearance independent of the other
+% ones. To facilitate the creation of multiple \meta{list}s and
+% especially make it easy to achieve the most likely usage, there are
+% actually two sets of commands. One set starting with |\gl| defaults
+% to \meta{list} |glo| (which stands for glossary) and
+% \meta{pageref-mode} |p|, the other set starting with |\ac| defaults
+% to \meta{list} |acr| (list of acronyms) and \meta{pageref-mode}
+% |n|. The following is the equivalent to |\glosstex| for acronyms:
+%
+% \DescribeMacro{\acronym}
+% \begin{definition}
+% |\acronym|\opt{|(|\meta{list}|)|}\opt{|[|\meta{pageref-mode}|]|}|{|\meta{label}|}|
+% \end{definition}
+%
+% These two commands can also be called as |\glosstex{*}| and
+% |\acronym{*}| to include all terms found in the |.gdf|-files into
+% the corresponding \meta{list}. This is similar to the command
+% |\nocite{*}| in \BibTeX{} and is primarily meant for debugging
+% purposes. But do \emph{not} use something like |\gls{*}| (see
+% below).
+%
+% There is another set of commands that produce both an entry in the
+% list (this is optional) and typeset output.
+%
+% \DescribeMacro{\gls}
+% \DescribeMacro{\gls*}
+% \begin{definition}
+% |\gls|\opt{|*|}\opt{|(|\meta{list}|)|}\opt{|[|\meta{pageref-mode}|]|}|{|\meta{label}|}|
+% \end{definition}
+%
+% |\gls| typesets \meta{item} and produces a list entry (\meta{list}
+% defaults to |glo|). The starred version |\gls*| just produces
+% typeset output without a list-entry.\footnote{To be honest, a
+% list-entry is produced, but it never appears in the output. The
+% starred version implicitly produces entries with \meta{list-mode}
+% |n| (never appear in typeset \meta{list}) while the unstarred
+% versions set \meta{list-mode} to |a| (always appear). There is no
+% other way of specifying the \meta{list-mode} of an \meta{label}.}
+%
+% \DescribeMacro{\ac}
+% \DescribeMacro{\ac*}
+% \DescribeMacro{\acs}
+% \DescribeMacro{\acs*}
+% \DescribeMacro{\acl}
+% \DescribeMacro{\acl*}
+% \DescribeMacro{\acf}
+% \DescribeMacro{\acf*}
+% \begin{definition}
+% |\ac|\opt{|*|}\opt{|,|\meta{lparen}|,|\meta{rparen}|,|}\opt{|<|\meta{form}|>|}\opt{|(|\meta{list}|)|}\opt{|[|\meta{pageref-mode}|]|}|{|\meta{label}|}|\\
+% |\acs|\opt{|*|}\opt{|(|\meta{list}|)|}\opt{|[|\meta{pageref-mode}|]|}|{|\meta{label}|}|\\
+% |\acl|\opt{|*|}\opt{|(|\meta{list}|)|}\opt{|[|\meta{pageref-mode}|]|}|{|\meta{label}|}|\\
+% |\acf|\opt{|*|}\opt{|,|\meta{lparen}|,|\meta{rparen}|,|}\opt{|<|\meta{form}|>|}\opt{|(|\meta{list}|)|}\opt{|[|\meta{pageref-mode}|]|}|{|\meta{label}|}|
+% \end{definition}
+%
+% These all produce typeset output. |\acs| typesets \meta{item},
+% |\acl| typesets \meta{long-form} and |\acf| typesets \meta{full}
+% (see section \ref{sec:format}). |\ac| works like |\acf| at it's first
+% invocation and like |\acs| on all subsequent ones. Using |\ac| you
+% can make sure that an acronym is always spelled out at least once in
+% your document while safely using the short form whenever
+% possible. Note that the use of |\acf| has no effect on subsequent
+% invocations of |\ac|. The starred versions |\ac*|, |\acs*|, |\acl*|
+% and |\acf*|
+% just produce typeset output. Table~\ref{tab:commands} gives an
+% overview of all this.
+%
+% \begin{table}[htbp]
+% \begin{center}
+% \begin{tabular}{rllll}
+% \hline\hline
+% defaults & list & list and text & text & output\\
+% \hline
+% |(glo)[p]| & |\glosstex| & |\gls| & |\gls*| & \meta{item}\\
+% |(acr)[n]| & |\acronym| & |\ac| & |\ac*|
+% & \meta{item} or \meta{full}\\
+% |(acr)[n]| & & |\acs| & |\acs*| & \meta{item}\\
+% |(acr)[n]| & & |\acl| & |\acl*| & \meta{long-form}\\
+% |(acr)[n]| & & |\acf| & |\acf*| & \meta{full}\\
+% \hline\hline
+% \end{tabular}
+% \caption{Overview of the different sets of commands.}
+% \label{tab:commands}
+% \end{center}
+% \end{table}
+%
+% In the most simple case, \meta{full} will look like ``\meta{item}
+% |(|\meta{long-form}|)|''. You can switch the order of \meta{item}
+% and \meta{long-form} by using the options |itemfirst| and
+% |longfirst|. If you rather like either in a footnote, try the option
+% |footnote| instead of the default |text|. If you don't like the
+% round parentheses, just use the optional arguments \meta{lparen},
+% \meta{rparen} which are also described in section \ref{sec:format}.
+%
+% \subsection{The Glossary Definition File}
+% A glossary-definition file\glosstex{gdf-file} (suffix |.gdf|) is
+% needed which serves as a database for \GlossTeX{}, holding the
+% actual descriptions of all terms. You can have $m$ |.gdf|-files that
+% contain the definitions to the \meta{label}s you reference in your
+% documents. Entries have the form
+% \begin{definition}
+% |@entry{|\meta{label}\opt{|,|\meta{item}\opt{|,|\meta{long-form}}}|}| \opt{\meta{text}}
+% \end{definition}
+%
+% where \meta{label} is used to identify the entry and \meta{text} may
+% contain any amount of \TeX{}-source, being the actual definition of
+% the item. You should know that \meta{label} is used to construct
+% \TeX{}-macros, so it shouldn't contain funny characters or you will
+% most likely get funny errors. The optional argument \meta{item}
+% describes the appearance of the item in the produced list. If
+% omitted, it defaults to \meta{label}. It can be used when some
+% special form of typesetting is wanted. \meta{item} can contain any
+% \TeX{}-construct, as long as each ``|{|'' has a corresponding
+% ``|}|'' or \GlossTeX{} will get confused. The same applies
+% to \meta{long-form}, except that it defaults into an empty string if
+% not specified.
+%
+% Following is the |.gdf|-file used for this documentation. Note the use of
+% ``|~|'' as the quote-character. Also note that all lines
+% until the first line starting with |@entry{| are
+% ignored. Additionally, all lines starting with ``|%|'' are ignored,
+% too. Thus they
+% can serve as comments.
+% \begin{macrocode}
+%<*gdf>
+% -*- latex -*-
+
+This is a database file for GlossTeX.
+
+@entry{ist-file, \texttt{.ist}-file} Style file for \MakeIndex{},
+describing the input and output format of read and written files.
+
+@entry{gdf-file, \texttt{.gdf}-file} This file is the database file
+containing definitions for Gloss\TeX{}.
+
+@entry{gxs-file, \texttt{.gxs}-file} Intermediate file produced by
+\GlossTeX{} to be processed by \MakeIndex{}.
+
+@entry{glx-file, \texttt{.glx}-file} This file contains the sorted
+lists, ready to be read by \LaTeX{}.
+
+@entry{gxg-file, \texttt{.gxg}-file} This is the log-file produced by
+the \GlossTeX{}-run. See also \glxref{glg-file}.
+
+@entry{glg-file, \texttt{.glg}-file} This is the log-file produced by
+the \MakeIndex{}-run. See also \glxref{gxg-file}.
+
+@entry{ASCII, ASCII, American Standard Code for Information Interchange}
+A character encoding. See also \glxref{EBCDIC}.
+
+@entry{EBCDIC, EBCDIC, Extended Binary Coded Decimals Interchange Code}
+A character encoding exclusively used on mainframes. See also
+\glxref{ASCII}.
+%</gdf>
+% \end{macrocode}
+%
+% \subsection{Invocation}
+% After the first run of \LaTeX{}, the |.aux|-file contains all
+% necessary information for the preparation of the glossary. \GlossTeX\
+% is then invoked to read one or more |.gdf|-files and outputs all
+% definitions that are referenced in the |.aux|-file. The output of
+% \GlossTeX{} is then processed by \MakeIndex{} for sorting.
+%
+% \GlossTeX{} is invoked in a \unix{}-like environment using the
+% following command
+%
+%\begin{example}
+% |glosstex |\meta{aux-file}| |\meta{gdf-file}| |\opt{\meta{gdf-file}\opt{...}}| |\opt{|-v|\opt{|0|\ldots|5|}}
+% \end{example}
+%
+% This produces 2 files as output, one \gls{gxs-file} to be input into
+% \MakeIndex{} and a log-file with extension |.gxg|\glosstex{gxg-file}
+% which contains more detailed information. The |-v| option selects
+% how verbose \GlossTeX{} should be when writing the log-file. |-v| is
+% equal to |-v4| and |-v2| is the default. |-v0| makes \GlossTeX{}
+% shut his mouth and only report errors and |-v5| makes \GlossTeX{}
+% really talkative.
+%
+% \MakeIndex{} has to be invoked in this way
+%
+% \begin{example}
+% |makeindex |\meta{gxs-file}| -o |\meta{glx-file}| -s |glosstex.ist| |\opt{|-t |\meta{glg-file}}
+% \end{example}
+%
+% The commands
+%
+% \begin{example}
+% |glosstex thesis thesis.gdf master.gdf|\\
+% |makeindex thesis.gxs -o thesis.glx -s glosstex.ist|
+% \end{example}
+%
+% produce the final \gls{glx-file} which is then included by
+% \DescribeMacro{\printglosstex}
+% \begin{definition}
+% |\printglosstex|\opt{|(|\meta{list}|)|}\opt{|[|\meta{pageref-mode}|]|}
+% \end{definition}
+% during the next \LaTeX{}-run. The argument \meta{pageref-mode}
+% supersedes the one given to the entries individually for each
+% \meta{list} and defaults to |p|. You can turn on page references
+% unconditionally for each \meta{list} individually by using
+% \meta{pageref-mode} |a| and turn it off by using
+% \meta{pageref-mode} |n| as argument to |\printglosstex|. See also
+% table~\ref{tab:references} for an overview of these options.
+%
+% Note that, no matter of how many \meta{list}s you produce, there is
+% always exactly \emph{one} |.glx|-file which contains the entries of
+% \emph{all} produced lists.
+%
+% Depending on whether you use \meta{item}
+% or \meta{long-form} in your text or you have cross-references, it
+% may be necessary to run \LaTeX{} and \GlossTeX{} up to 4 times until
+% all references are resolved. Watch out for warnings from
+% \package{glosstex} during a \LaTeX{} run. Messages about unresolved
+% \meta{label}s from \GlossTeX{} are caused by missing definitions in
+% the |.gdf|-files.
+%
+% \subsection{Page References}
+% \label{sec:page_references}
+% You may want a reference in the list to the place where the term
+% first appears in the text. This can be done using the optional
+% argument \meta{pageref-mode} on \meta{item}-level and
+% \meta{list}-level. These arguments in combination with the option to
+% |\usepackage| control page references. Table \ref{tab:references}
+% gives an overview of all possible combinations of these 3
+% arguments.
+%
+% \begin{table}[htbp]
+% \begin{center}
+% \begin{tabular}{l|ccc|ccc}
+% \hline\hline
+% \hfill list & & |refpage| & & & |norefpage|\\
+% entry & |a| & |p| & |n| & |a| & |p| & |n|\\
+% \hline
+% |a| & $\times$ & $\times$ & $-$ & $\times$ & $\times$ & $-$\\
+% |p| & $\times$ & $\times$ & $-$ & $\times$ & $-$ & $-$\\
+% |n| & $\times$ & $-$ & $-$ & $\times$ & $-$ & $-$\\
+% \hline\hline
+% \end{tabular}
+% \caption[Options controlling the appearance of page
+% references.]{Options controlling the appearance of page
+% references. A ``$\times$'' indicates that a reference is
+% produced.}
+% \label{tab:references}
+% \end{center}
+% \end{table}
+%
+% One possible usage of this feature: while debugging a document, turn
+% on page references by using the option |refpage| to the
+% package. Every entry included with the modes |a| (always) or the
+% default |p| (package) will contain a reference. After debugging,
+% remove the option |refpage| and only those entries that were
+% included with mode |a| will still have a reference.
+%
+% \subsection{The Appearance of \protect\meta{full}}
+% \label{sec:format}
+% \meta{full} stands for the appearance of the typeset term in the
+% text. The appearance of \meta{full} is controlled through the
+% optional arguments \meta{lparen}, \meta{rparen} and \meta{form} to
+% |\ac| and |\acf|. Additionally, these arguments work together with
+% defaults set forth on \meta{list}-level and package level. The
+% following sections shall shed some light on this topic.
+%
+% \subsubsection{The \protect\meta{order} of \protect\meta{item}s}
+% \label{sec:order}
+% \DescribeMacro{\glxitemorderdefault}
+% The options |itemfirst| and |longfirst| control which one of
+% \meta{item} and \meta{long-form} should be typeset first. On
+% \meta{list}-level, \meta{item-order} can be set using
+% \begin{definition}
+% |\glxitemorderdefault||{|\meta{list}|}||{|\meta{item-order}|}|
+% \end{definition}
+% \meta{item-order} may be either ``|i|'',
+% ``|l|'' or empty. |i| first typesets \meta{item}, |l| first typesets
+% \meta{long-form}. Omitting \meta{item-order} lets the defaults take
+% effect. Table \ref{tab:item-order} gives an overview over each
+% combination of the options for \meta{item-order}.
+%
+% \begin{table}[htbp]
+% \begin{center}
+% \begin{tabular}{l|ccc|ccc}
+% \hline\hline
+% \hfill list & & |itemfirst| & & & |longfirst|\\
+% entry & |i| & $-$& |l| & |i| & $-$ & |l|\\
+% \hline
+% |i| & |i| & |i| & |l| & |i| & |i| & |l|\\
+% $-$ & |i| & |i| & |l| & |i| & |l| & |l|\\
+% |l| & |i| & |l| & |l| & |i| & |l| & |l|\\
+% \hline\hline
+% \end{tabular}
+% \caption{Options controlling \protect\meta{item-order}.}
+% \label{tab:item-order}
+% \end{center}
+% \end{table}
+%
+% \subsubsection{Placement of footnotes and \protect\meta{form}}
+% \label{sec:footnotes}
+% \DescribeMacro{\glxitemplacementdefault}
+% The options |text| and |footnote| control where the second typeset
+% output should go, either into the text or into a footnote.
+% \begin{definition}
+% |\glxitemplacementdefault||{|\meta{list}|}||{|\meta{item-placement}|}|
+% \end{definition}
+% sets this option on \meta{list}-level. \meta{item-placement} may be
+% either |t|, |f| or empty. |t| typesets both parts into the text, |f|
+% puts one part into a footnote. Omitting \meta{item-placement} lets
+% the defaults for \meta{item-placement} take effect. See also table
+% \ref{tab:item-placement} for an overview of all possible
+% combinations.
+%
+% \begin{table}[htbp]
+% \begin{center}
+% \begin{tabular}{l|ccc|ccc}
+% \hline\hline
+% \hfill list & & |text| & & & |footnote|\\
+% entry & |t| & $-$& |f| & |t| & $-$ & |f|\\
+% \hline
+% |t| & |t| & |t| & |f| & |t| & |t| & |f|\\
+% $-$ & |t| & |t| & |f| & |t| & |f| & |f|\\
+% |f| & |t| & |f| & |f| & |t| & |f| & |f|\\
+% \hline\hline
+% \end{tabular}
+% \caption{Options controlling \protect\meta{item-placement}.}
+% \label{tab:item-placement}
+% \end{center}
+% \end{table}
+%
+% The aforementioned \meta{form} is built by simply concatenating
+% \meta{item-order} and \meta{item-placement}. You supply the
+% \meta{form} argument to |\ac| and |\acf| by enclosing it in angle
+% brackets, just like |\ac<if>{foo}| or |\ac<t>{bar}|. Please note that
+% \meta{item-order} is specified \emph{before} \meta{item-placement}.
+%
+% \subsubsection{Encapsulation} \label{sec:parentheses}
+% \DescribeMacro{\glxparendefault}
+% \DescribeMacro{\glxparenlistdefault}
+% When using |t| for \meta{item-placement}, the second part is
+% encapsulated within \meta{lparen} on the left and \meta{rparen} on
+% the right.
+% \begin{definition}
+% |\glxparendefault{|\meta{list}|}{|\meta{lparen}|}{|\meta{rparen}|}|
+% \end{definition}
+% sets this option on package level. The options |roundparen| and
+% |squareparen| may be used as well.
+% \begin{definition}
+% |\glxparenlistdefault{|\meta{list}|}{|\meta{lparen}|}{|\meta{rparen}|}|
+% \end{definition}
+% sets this option on \meta{list}-level. On \meta{item}-level these
+% are supplied to |\ac| and |\acf| just like |\ac,(,),{foo}| or
+% |\acf,--,--,<lt>{bar}|. It may look strange, but I was out of
+% parentheses.
+%
+% \subsection{Cross-References}
+% \DescribeMacro{\glxref}
+% \DescribeMacro{\glxref*}
+% \begin{definition}
+% |\glxref|\opt{|*|}|{|\meta{item}|}|
+% \end{definition}
+% It may be useful to use cross-references in entries. Assume
+% you have referenced |\glosstex{ascii}| which describes the term
+% \ac{ASCII}. You may also want to include \ac*{EBCDIC} as an
+% example for another character encoding. To achieve this, write this
+% into the definition of \ac{ASCII}
+%
+% \begin{example}
+% |See also \glxref{ebcdic}.|
+% \end{example}
+%
+% and \GlossTeX{} then produces ``See also EBCDIC'' and also includes
+% the definition for \ac*{EBCDIC} into the same list \ac{ASCII}
+% appears in. Note
+% that |\glxref| is only available within the \meta{text} argument in
+% the |.gdf|-file since it only makes sense within a
+% \meta{list}. There is also a starred version |\glxref*| that doesn't
+% produce typeset output.
+%
+% \subsection{\GlossTeX{} and \package{nomencl}}
+% It is possible to use \package{nomencl} and \GlossTeX{} in one
+% document without problems. The following commands show how to deal with documents using both
+% \GlossTeX{} and \textsf{nomencl}.
+% \begin{example}
+% |latex thesis|\\
+% |glosstex thesis thesis.gdf |\\
+% |makeindex thesis.gxs -o thesis.glx -s glosstex.ist|\\
+% |makeindex thesis.glo -o thesis.gls -s nomencl.ist|\\
+% |latex thesis|
+% \end{example}
+%
+% \section{Customizing}
+% \subsection{Global}
+% \GlossTeX{} can be customized by using the file |glosstex.cfg| which
+% is automatically loaded if it is present. The file |glosstex.std| is
+% the default configuration file that is absolutely mandatory to
+% \GlossTeX{}'s proper working. It
+% shows all aspects that are meant to be customized, so let's discuss
+% it now.
+%
+% Each term that gets typeset either goes through |\GLX@output@short|
+% or |\GLX@output@long|, depending whether it's the \meta{item} or
+% \meta{long-form}. These macros each take 3 arguments and get called
+% this way:
+% \begin{definition}
+% |\GLX@output@short{|\meta{label}|}{|\meta{list}|}{|\meta{item}|}|\\
+% |\GLX@output@long{|\meta{label}|}{|\meta{list}|}{|\meta{long-form}|}|
+% \end{definition}
+%
+% \begin{macro}{\GLX@output@short}
+% \begin{macro}{\GLX@output@long}
+% We just output \meta{item} as it is. See section
+% \ref{sec:customizing_local} for some more elaborate implementation
+% of this macro.
+% \begin{macrocode}
+%<*std>
+\newcommand{\GLX@output@short}[3]{#3}
+\newcommand{\GLX@output@long}[3]{#3}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\glosstexpage}
+% This is used to typeset the page at the end of a definition. It uses
+% |\pagename| so that should be defined elsewhere.
+% \begin{macrocode}
+\newcommand{\glosstexpage}[1]{\nobreak{\itshape\pagename~#1}\nobreak}
+% \end{macrocode}
+% \end{macro}
+%
+% \DescribeMacro{\glxgldefault}
+% \DescribeMacro{\glxacdefault}
+% These macros set the defaults for \meta{list} and
+% \meta{pageref-mode} which the commands starting with |\gl| (except for
+% |\glxref|, of course) and |\ac| are
+% using.
+% \begin{macrocode}
+\glxgldefault{glo}{p}
+\glxacdefault{acr}{n}
+% \end{macrocode}
+%
+% \DescribeMacro{\glxitemorderdefault}
+% \DescribeMacro{\glxitemplacementdefault}
+% These macros set the defaults concerning \meta{item-placement} and
+% \meta{item-order} in \meta{list}. We specify no default on
+% \meta{list}-level.
+% \begin{macrocode}
+\glxitemorderdefault{glo}{}
+\glxitemplacementdefault{glo}{}
+\glxitemorderdefault{acr}{}
+\glxitemplacementdefault{acr}{}
+% \end{macrocode}
+%
+% \DescribeMacro{\glxparendefault}
+% \DescribeMacro{\glxparenlistdefault}
+% These macros set the defaults concerning \meta{lparen} and
+% \meta{rparen} on package and \meta{list}-level, respectively. To set
+% \meta{paren} on package level, you may as well use the options
+% |roundparen| and |squareparen|. Because |roundparen| is the default
+% option, this command is not used. As long as there is no
+% \meta{paren}-default on \meta{list}-level, the default on
+% package-level is used. So therefor, |\glxparenlistdefault| is not
+% used here as well.
+% \begin{macrocode}
+%\glxparendefault{(}{)}
+%\glxparenlistdefault{glo}{-*}{*-}
+% \end{macrocode}
+%
+% \begin{macro}{\GLX@benv@glo}
+% \begin{macro}{\GLX@eenv@glo}
+% \begin{macro}{\GLX@item@glo}
+% \begin{macro}{\GLX@benv@acr}
+% \begin{macro}{\GLX@eenv@acr}
+% \begin{macro}{\GLX@item@acr}
+% Each \meta{list} gets embedded into |\GLX@benv@|\meta{list} and
+% |\GLX@eenv@|\meta{list}, so these macros should provide a reasonable
+% environment. Each line itself is typeset using
+% |\GLX@item@|\meta{list} which gets called with 7 arguments.
+% \begin{definition}
+% |\GLX@item@|\meta{list}|{|\meta{label}|}||{|\meta{list}|}||{|\meta{long-form}|}||{|\meta{text}|}||{|\meta{list}|}||{|\meta{list-mode}|}||{|\meta{page-stuff}|}|
+% \end{definition}
+% \begin{macrocode}
+\newcommand{\GLX@benv@glo}{\begin{description}}
+\newcommand{\GLX@eenv@glo}{\end{description}}
+\newcommand{\GLX@item@glo}[7]{%
+ \item[#2]\ifx#3\empty\else\emph{#3}\space\fi#4\space#7}
+\newcommand{\GLX@item@acr@label}[1]{\mbox{#1}\dotfill}
+\newcommand{\GLX@benv@acr}{
+ \begin{list}{}{%
+ \renewcommand{\makelabel}{\GLX@item@acr@label}%
+ \setlength{\labelwidth}{7em}%
+ \leftmargin\labelwidth \advance\leftmargin by \labelsep}}
+\newcommand{\GLX@eenv@acr}{\end{list}}
+\newcommand{\GLX@item@acr}[7]{%
+ \item[\textsc{#2}]%
+ \ifx#3\empty\else#3\quad\fi\ifx#4\empty\else#4\space\fi#7}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\glossaryname}
+% \begin{macro}{\listacronymname}
+% \begin{macro}{\pagename}
+% These are defined to contain some default strings if they're not
+% already defined (|\pagename| e.g.\ is defined trough \package{babel}).
+% \begin{macrocode}
+\ifx\glossaryname\@undefined
+ \def\glossaryname{Glossary}
+\fi
+\ifx\listacronymname\@undefined
+ \def\listacronymname{List of Acronyms}
+\fi
+\ifx\pagename\@undefined
+ \def\pagename{page}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \DescribeMacro{\glxheading}
+% Each \meta{list} starts with an appropriate heading which is defined
+% by
+% \begin{definition}
+% |\glxheading[|\meta{list}|]{|\meta{definition}|}|.
+% \end{definition}
+% \begin{macrocode}
+\ifx\chapter\@undefined
+ \glxheading{glo}{\section*{\glossaryname}}
+ \glxheading{acr}{\section*{\listacronymname}}
+\else
+ \glxheading{glo}{\chapter*{\glossaryname}}
+ \glxheading{acr}{\chapter*{\listacronymname}}
+\fi
+%</std>
+% \end{macrocode}
+%
+% \subsection{Local}
+% \label{sec:customizing_local}
+% Now we need a local configuration file for this document. This is
+% done by using a file named |glosstex.cfg|.
+% In |\GLX@output@short| we test whether we are in the list of acronyms
+% (|GLX@acdef@list|) and typeset \meta{item} with caps and small caps
+% if we are. Otherwise, just typeset \meta{item}.
+% We also define a call
+% to |\index| in |\GLX@output@short|. As sort-key, we use
+% \meta{label}. Instead of the usual |@| we use |=| for designating
+% the appearance part of the index entry.
+% \begin{macrocode}
+%<*cfg>
+\renewcommand{\GLX@output@short}[3]{%
+ \ifthenelse{\equal{#2}{\GLX@acdef@list}}{%
+ \textsc{#3}}{#3}\index{#1=#3}}
+%</cfg>
+% \end{macrocode}
+%
+% \section{Some Details}
+% While reading the |.aux|-file, \GlossTeX{} only considers the first
+% appearance of one \meta{item} for each \meta{list}. All subsequent
+% entries are silently ignored.
+% (Almost silently, because the |.gxg|-file will contain detailed
+% information about this, and more.) But if the first entry says
+% not to produce a page reference and a following one says to do so, then
+% the latter will supersede the former. The same applies if a
+% term is referenced without the option not to generate a list-entry
+% (all commands containing a |*|, e.g.\ |\gl*|), but a following tells
+% to do so.
+%
+% While reading one or more |.gdf|-files, only the first definition is
+% used, all other entries are ignored. This fact can be utilised
+% in some way. Assume you have a |master.gdf| which contains general
+% terms and a file |thesis.gdf| which only contains terms that are
+% intended for use in your thesis. Whenever an entry is present in both
+% |.gdf|-files, the one from |thesis.gdf| should be taken. To achieve
+% this, specify |thesis.gdf| \emph{before} |master.gdf|.
+%
+% Additionally, see the file |TODO| in this package for
+% known bugs (also called features) and not yet implemented features
+% (also called bugs).
+%
+% \section{Acknowledgments}
+% I would like to thank these people who have contributed to the
+% development of \GlossTeX{}:
+%
+% {\scshape
+% Daniel Courjon, Stefan A.~Deutscher, Michael Friendly, Olaf Michelsson
+% }
+%
+% \StopEventually{\printglosstex[a]}
+%
+% \section{The Implementation}
+% \subsection{The Package \package{glosstex.sty}}
+%
+% First, we identify ourselves.
+% \begin{macrocode}
+%<*package>
+\NeedsTeXFormat{LaTeX2e}[1996/12/01] \ProvidesPackage{glosstex}
+[\filedate\space\fileversion\space GlossTeX package]
+% \end{macrocode}
+%
+% The \package{ifthen} package is needed for some |\ifthenelse|-constructs.
+% \begin{macrocode}
+\RequirePackage{ifthen}
+\newif\if@GLX@pagerefmode
+\newif\if@GLX@itemfirst
+\newif\if@GLX@footnote
+\newif\if@GLX@roundparen
+\newif\if@GLX@squareparen
+% \end{macrocode}
+%
+% \begin{macro}{\GlossTeX}
+% This is used to typeset a nice logo for this package, which looks
+% like ``\GlossTeX{}''.
+% \begin{macrocode}
+\newcommand{\GlossTeX}{Gloss\TeX}
+% \end{macrocode}
+% \end{macro}
+%
+% First, we make sure that the |.glx|-file is input in all cases. We
+% need this to expand acronyms in case the user generates no typeset
+% list. We create a dummy list |GLX@Null@List|. This assumes, of course, that
+% you have no entries for list |GLX@Null@List|. But who would, anyhow?
+% \begin{macrocode}
+\AtBeginDocument{%
+ \glxheading{GLX@Null@List}{}%
+ \printglosstex(GLX@Null@List)}
+% \end{macrocode}
+%
+% We want to remind the user to run \GlossTeX\ when there were
+% undefined terms in the document.
+% \begin{macrocode}
+\AtEndDocument{%
+ \ifx\GLX@undefined@term\@undefined\else %
+ \PackageWarningNoLine{glosstex}%
+ {There were undefined terms.\MessageBreak
+ You should (re)run GlossTeX}\fi}
+% \end{macrocode}
+%
+% \begin{macro}{\GlossTeXPage}
+% Call |\glosstexpage| depending on |#1| (\meta{pageref-mode}) for
+% each entry,
+% |\GLX@theglosstex@pagerefmode| for each list and
+% |\if@GLX@pagerefmode| for the whole package.
+% \begin{macrocode}
+\newcommand{\GlossTeXPage}[2]{\ignorespaces%
+ \ifthenelse{\boolean{@GLX@pagerefmode}}%
+ {% refpage true
+ \ifthenelse{%
+ \equal{\GLX@theglosstex@pagerefmode}{a}}{\glosstexpage{#2}}{%
+ \ifthenelse{\equal{\GLX@theglosstex@pagerefmode}{n}}{}{%
+ \ifthenelse{\equal{#1}{a}}{\glosstexpage{#2}}{}%
+ \ifthenelse{\equal{#1}{p}}{\glosstexpage{#2}}{}%
+ \ifthenelse{\equal{#1}{n}}{}{}}}}%
+ {% refpage false
+ \ifthenelse{%
+ \equal{\GLX@theglosstex@pagerefmode}{a}}{\glosstexpage{#2}}{%
+ \ifthenelse{\equal{\GLX@theglosstex@pagerefmode}{n}}{}{%
+ \ifthenelse{\equal{#1}{a}}{\glosstexpage{#2}}{}%
+ \ifthenelse{\equal{#1}{p}}{}{}%
+ \ifthenelse{\equal{#1}{n}}{}{}}}}%
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+% Now declare the options this package accepts and execute the
+% standard options.
+% \begin{macrocode}
+\DeclareOption{refpage}{\@GLX@pagerefmodetrue}
+\DeclareOption{norefpage}{\@GLX@pagerefmodefalse}
+\DeclareOption{itemfirst}{\@GLX@itemfirsttrue}
+\DeclareOption{longfirst}{\@GLX@itemfirstfalse}
+\DeclareOption{text}{\@GLX@footnotefalse}
+\DeclareOption{footnote}{\@GLX@footnotetrue}
+\DeclareOption{roundparen}{\gdef\GLX@paren@l{(}\gdef\GLX@paren@r{)}}
+\DeclareOption{squareparen}{\gdef\GLX@paren@l{[}\gdef\GLX@paren@r{]}}
+\ExecuteOptions{norefpage,itemfirst,text,roundparen}
+\ProcessOptions
+% \end{macrocode}
+%
+% \begin{macro}{\GlossTeXNull}
+% This one is used as a dummy to work around a feature in
+% \MakeIndex{}.
+% \begin{macrocode}
+\newcommand{\GlossTeXNull}[1]{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\glosstex}
+% \begin{definition}
+% |\glosstex|\opt{|(|\meta{list}|)|}\opt{|[|\meta{pageref-mode}|]|}|{|\meta{label}|}|.
+% \end{definition}
+% \begin{macrocode}
+\DeclareRobustCommand\glosstex{\GLX@glosstex}
+\newcommand{\GLX@glosstex}{%
+ \@ifnextchar({\GLX@@glosstexr}{%
+ \@ifnextchar[{\GLX@@glosstexs(\GLX@gldef@list)}{%
+ \GLX@@@glosstex(\GLX@gldef@list)[\GLX@gldef@page]}}}
+\newcommand{\GLX@@glosstexr}{}
+\def\GLX@@glosstexr(#1){%
+ \@ifnextchar[{\GLX@@glosstexs(#1)}{\GLX@@@glosstex(#1)[\GLX@gldef@page]}}
+\newcommand{\GLX@@glosstexs}{}
+\def\GLX@@glosstexs(#1)[#2]{%
+ \GLX@@@glosstex(#1)[#2]}
+\newcommand{\GLX@@@glosstex}{}
+\def\GLX@@@glosstex(#1)[#2]#3{\GLX@do@glosstex{#3}{#2}{#1}{a}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\acronym}
+% \begin{definition}
+% |\acronym|\opt{|(|\meta{list}|)|}\opt{|[|\meta{pageref-mode}|]|}|{|\meta{label}|}|
+% \end{definition}
+% \begin{macrocode}
+\DeclareRobustCommand\acronym{\GLX@acronym}
+\newcommand{\GLX@acronym}{%
+ \@ifnextchar({\GLX@@acronymr}{%
+ \@ifnextchar[{\GLX@@acronyms(\GLX@acdef@list)}{%
+ \GLX@@@acronym(\GLX@acdef@list)[\GLX@acdef@page]}}}
+\newcommand{\GLX@@acronymr}{}
+\def\GLX@@acronymr(#1){%
+ \@ifnextchar[{\GLX@@acronyms(#1)}{\GLX@@@acronym(#1)[\GLX@acdef@page]}}
+\newcommand{\GLX@@acronyms}{}
+\def\GLX@@acronyms(#1)[#2]{%
+ \GLX@@@acronym(#1)[#2]}
+\newcommand{\GLX@@@acronym}{}
+\def\GLX@@@acronym(#1)[#2]#3{\GLX@do@glosstex{#3}{#2}{#1}{a}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\gls}
+% \begin{macro}{\gls*}
+% \begin{definition}
+% |\gls|\opt{|*|}\opt{|(|\meta{list}|)|}\opt{|[|\meta{pageref-mode}|]|}|{|\meta{label}|}|
+% \end{definition}
+% \begin{macrocode}
+\DeclareRobustCommand\gls{%
+ \@ifstar{\GLX@glsS}{\GLX@gls}}
+\newcommand{\GLX@gls}{%
+ \@ifnextchar({\GLX@@glsr}{%
+ \@ifnextchar[{\GLX@@glss(\GLX@gldef@list)}{%
+ \GLX@@@gls(\GLX@gldef@list)[\GLX@gldef@page]}}}
+\newcommand{\GLX@@glsr}{}
+\def\GLX@@glsr(#1){%
+ \@ifnextchar[{\GLX@@glss(#1)}{\GLX@@@gls(#1)[\GLX@gldef@page]}}
+\newcommand{\GLX@@glss}{}
+\def\GLX@@glss(#1)[#2]{%
+ \GLX@@@gls(#1)[#2]}
+\newcommand{\GLX@@@gls}{}
+\def\GLX@@@gls(#1)[#2]#3{\GLX@do@glosstex{#3}{#2}{#1}{a}\GLX@do@acs{#3}{#1}}
+\newcommand{\GLX@glsS}{%
+ \@ifnextchar({\GLX@@glsSr}{%
+ \@ifnextchar[{\GLX@@glsSs(\GLX@gldef@list)}{%
+ \GLX@@@glsS(\GLX@gldef@list)[\GLX@gldef@page]}}}
+\newcommand{\GLX@@glsSr}{}
+\def\GLX@@glsSr(#1){%
+ \@ifnextchar[{\GLX@@glsSs(#1)}{\GLX@@@glsS(#1)[\GLX@gldef@page]}}
+\newcommand{\GLX@@glsSs}{}
+\def\GLX@@glsSs(#1)[#2]{%
+ \GLX@@@glsS(#1)[#2]}
+\newcommand{\GLX@@@glsS}{}
+\def\GLX@@@glsS(#1)[#2]#3{\GLX@do@glosstex{#3}{#2}{#1}{n}\GLX@do@acs{#3}{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ac}
+% \begin{macro}{\ac*}
+% \begin{definition}
+% |\ac|\opt{|*|}\opt{|,|\meta{lparen}|,|\meta{rparen}|,|}\opt{|<|\meta{form}|>|}\opt{|(|\meta{list}|)|}\opt{|[|\meta{pageref-mode}|]|}|{|\meta{label}|}|\\
+% \end{definition}
+% \begin{macrocode}
+\DeclareRobustCommand\ac{%
+ \@ifstar{\GLX@acS}{\GLX@ac}}
+\newcommand{\GLX@ac}{%
+ \@ifnextchar,{\GLX@@acc}{%
+ \@ifnextchar<{\GLX@@aca,\relax,\relax,}{%
+ \@ifnextchar({\GLX@@acr,\relax,\relax,<>}{%
+ \@ifnextchar[{\GLX@@acs,\relax,\relax,<>(\GLX@acdef@list)}{%
+ \GLX@@@ac,\relax,\relax,<>(\GLX@acdef@list)[\GLX@acdef@page]}}}}}
+\newcommand{\GLX@@acc}{}
+\def\GLX@@acc,#1,#2,{%
+ \@ifnextchar<{\GLX@@aca,#1,#2,}{%
+ \@ifnextchar({\GLX@@acr,#1,#2,<>}{%
+ \@ifnextchar[{\GLX@@acs,#1,#2,<>(\GLX@acdef@list)}{%
+ \GLX@@@ac,#1,#2,<>(\GLX@acdef@list)[\GLX@acdef@page]}}}}
+\newcommand{\GLX@@aca}{}
+\def\GLX@@aca,#1,#2,<#3>{%
+ \@ifnextchar({\GLX@@acr,#1,#2,<#3>}{%
+ \@ifnextchar[{\GLX@@acs,#1,#2,<#3>(\GLX@acdef@list)}{%
+ \GLX@@@ac,#1,#2,<#3>(\GLX@acdef@list)[\GLX@acdef@page]}}}
+\newcommand{\GLX@@acr}{}
+\def\GLX@@acr,#1,#2,<#3>(#4){%
+ \@ifnextchar[{\GLX@@acs,#1,#2,<#3>(#4)}{%
+ \GLX@@@ac,#1,#2,<#3>(#4)[\GLX@acdef@page]}}
+\newcommand{\GLX@@acs}{}
+\def\GLX@@acs,#1,#2,<#3>(#4)[#5]{%
+ \GLX@@@ac,#1,#2,<#3>(#4)[#5]}
+\newcommand{\GLX@@@ac}{}
+\def\GLX@@@ac,#1,#2,<#3>(#4)[#5]#6{%
+ \GLX@do@glosstex{#6}{#5}{#4}{a}\GLX@do@ac{#6}{#4}{#3}{#1}{#2}}
+\newcommand{\GLX@acS}{%
+ \@ifnextchar,{\GLX@@acSc}{%
+ \@ifnextchar<{\GLX@@acSa,\relax,\relax,}{%
+ \@ifnextchar({\GLX@@acSr,\relax,\relax,<>}{%
+ \@ifnextchar[{\GLX@@acSs,\relax,\relax,<>(\GLX@acdef@list)}{%
+ \GLX@@@acS,\relax,\relax,<>(\GLX@acdef@list)[\GLX@acdef@page]}}}}}
+\newcommand{\GLX@@acSc}{}
+\def\GLX@@acSc,#1,#2,{%
+ \@ifnextchar<{\GLX@@acSa,#1,#2,}{%
+ \@ifnextchar({\GLX@@acSr,#1,#2,<>}{%
+ \@ifnextchar[{\GLX@@acSs,#1,#2,<>(\GLX@acdef@list)}{%
+ \GLX@@@acS,#1,#2,<>(\GLX@acdef@list)[\GLX@acdef@page]}}}}
+\newcommand{\GLX@@acSa}{}
+\def\GLX@@acSa,#1,#2,<#3>{%
+ \@ifnextchar({\GLX@@acSr,#1,#2,<#3>}{%
+ \@ifnextchar[{\GLX@@acSs,#1,#2,<#3>(\GLX@acdef@list)}{%
+ \GLX@@@acS,#1,#2,<#3>(\GLX@acdef@list)[\GLX@acdef@page]}}}
+\newcommand{\GLX@@acSr}{}
+\def\GLX@@acSr,#1,#2,<#3>(#4){%
+ \@ifnextchar[{\GLX@@acSs,#1,#2,<#3>(#4)}{%
+ \GLX@@@acS,#1,#2,<#3>(#4)[\GLX@acdef@page]}}
+\newcommand{\GLX@@acSs}{}
+\def\GLX@@acSs,#1,#2,<#3>(#4)[#5]{%
+ \GLX@@@acS,#1,#2,<#3>(#4)[#5]}
+\newcommand{\GLX@@@acS}{}
+\def\GLX@@@acS,#1,#2,<#3>(#4)[#5]#6{%
+ \GLX@do@glosstex{#6}{#5}{#4}{n}\GLX@do@ac{#6}{#4}{#3}{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\acs}
+% \begin{macro}{\acs*}
+% \begin{definition}
+% |\acs|\opt{|*|}\opt{|(|\meta{list}|)|}\opt{|[|\meta{pageref-mode}|]|}|{|\meta{label}|}|\\
+% \end{definition}
+% \begin{macrocode}
+\DeclareRobustCommand\acs{%
+ \@ifstar{\GLX@acsS}{\GLX@acs}}
+\newcommand{\GLX@acs}{%
+ \@ifnextchar({\GLX@@acsr}{%
+ \@ifnextchar[{\GLX@@acss(\GLX@acdef@list)}{%
+ \GLX@@@acs(\GLX@acdef@list)[\GLX@acdef@page]}}}
+\newcommand{\GLX@@acsr}{}
+\def\GLX@@acsr(#1){%
+ \@ifnextchar[{\GLX@@acss(#1)}{\GLX@@@acs(#1)[\GLX@acdef@page]}}
+\newcommand{\GLX@@acss}{}
+\def\GLX@@acss(#1)[#2]{%
+ \GLX@@@acs(#1)[#2]}
+\newcommand{\GLX@@@acs}{}
+\def\GLX@@@acs(#1)[#2]#3{\GLX@do@glosstex{#3}{#2}{#1}{a}\GLX@do@acs{#3}{#1}}
+\newcommand{\GLX@acsS}{%
+ \@ifnextchar({\GLX@@acsSr}{%
+ \@ifnextchar[{\GLX@@acsSs(\GLX@acdef@list)}{%
+ \GLX@@@acsS(\GLX@acdef@list)[\GLX@acdef@page]}}}
+\newcommand{\GLX@@acsSr}{}
+\def\GLX@@acsSr(#1){%
+ \@ifnextchar[{\GLX@@acsSs(#1)}{\GLX@@@acsS(#1)[\GLX@acdef@page]}}
+\newcommand{\GLX@@acsSs}{}
+\def\GLX@@acsSs(#1)[#2]{%
+ \GLX@@acsS(#1)[#2]}
+\newcommand{\GLX@@@acsS}{}
+\def\GLX@@@acsS(#1)[#2]#3{\GLX@do@glosstex{#3}{#2}{#1}{n}\GLX@do@acs{#3}{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\acl}
+% \begin{macro}{\acl*}
+% \begin{definition}
+% |\acl|\opt{|*|}\opt{|(|\meta{list}|)|}\opt{|[|\meta{pageref-mode}|]|}|{|\meta{label}|}|\\
+% \end{definition}
+% \begin{macrocode}
+\DeclareRobustCommand\acl{%
+ \@ifstar{\GLX@aclS}{\GLX@acl}}
+\newcommand{\GLX@acl}{%
+ \@ifnextchar({\GLX@@aclr}{%
+ \@ifnextchar[{\GLX@@acls(\GLX@acdef@list)}{%
+ \GLX@@@acl(\GLX@acdef@list)[\GLX@acdef@page]}}}
+\newcommand{\GLX@@aclr}{}
+\def\GLX@@aclr(#1){%
+ \@ifnextchar[{\GLX@@acls(#1)}{\GLX@@@acl(#1)[\GLX@acdef@page]}}
+\newcommand{\GLX@@acls}{}
+\def\GLX@@acls(#1)[#2]{%
+ \GLX@@@acl(#1)[#2]}
+\newcommand{\GLX@@@acl}{}
+\def\GLX@@@acl(#1)[#2]#3{\GLX@do@glosstex{#3}{#2}{#1}{a}\GLX@do@acl{#3}{#1}}
+\newcommand{\GLX@aclS}{%
+ \@ifnextchar({\GLX@@aclSr}{%
+ \@ifnextchar[{\GLX@@aclSs(\GLX@acdef@list)}{%
+ \GLX@@@aclS(\GLX@acdef@list)[\GLX@acdef@page]}}}
+\newcommand{\GLX@@aclSr}{}
+\def\GLX@@aclSr(#1){%
+ \@ifnextchar[{\GLX@@aclSs(#1)}{\GLX@@@aclS(#1)[\GLX@acdef@page]}}
+\newcommand{\GLX@@aclSs}{}
+\def\GLX@@aclSs(#1)[#2]{%
+ \GLX@@@aclS(#1)[#2]}
+\newcommand{\GLX@@@aclS}{}
+\def\GLX@@@aclS(#1)[#2]#3{\GLX@do@glosstex{#3}{#2}{#1}{n}\GLX@do@acl{#3}{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\acf}
+% \begin{macro}{\acf*}
+% \begin{definition}
+% |\acf|\opt{|*|}\opt{|,|\meta{lparen}|,|\meta{rparen}|,|}\opt{|<|\meta{form}|>|}\opt{|(|\meta{list}|)|}\opt{|[|\meta{pageref-mode}|]|}|{|\meta{label}|}|
+% \end{definition}
+% \begin{macrocode}
+\DeclareRobustCommand\acf{%
+ \@ifstar{\GLX@acfS}{\GLX@acf}}
+\newcommand{\GLX@acf}{%
+ \@ifnextchar,{\GLX@@acfc}{%
+ \@ifnextchar<{\GLX@@acfa,\relax,\relax,}{%
+ \@ifnextchar({\GLX@@acfr,\relax,\relax,<>}{%
+ \@ifnextchar[{\GLX@@acfs,\relax,\relax,<>(\GLX@acdef@list)}{%
+ \GLX@@@acf,\relax,\relax,<>(\GLX@acdef@list)[\GLX@acdef@page]}}}}}
+\newcommand{\GLX@@acfc}{}
+\def\GLX@@acfc,#1,#2,{%
+ \@ifnextchar<{\GLX@@acfa,#1,#2,}{%
+ \@ifnextchar({\GLX@@acfr,#1,#2,<>}{%
+ \@ifnextchar[{\GLX@@acfs,#1,#2,<>(\GLX@acdef@list)}{%
+ \GLX@@@acf,#1,#2,<>(\GLX@acdef@list)[\GLX@acdef@page]}}}}
+\newcommand{\GLX@@acfa}{}
+\def\GLX@@acfa,#1,#2,<#3>{%
+ \@ifnextchar({\GLX@@acfr,#1,#2,<#3>}{%
+ \@ifnextchar[{\GLX@@acfs,#1,#2,<#3>(\GLX@acdef@list)}{%
+ \GLX@@@acf,#1,#2,<#3>(\GLX@acdef@list)[\GLX@acdef@page]}}}
+\newcommand{\GLX@@acfr}{}
+\def\GLX@@acfr,#1,#2,<#3>(#4){%
+ \@ifnextchar[{\GLX@@acfs,#1,#2,<#3>(#4)}{%
+ \GLX@@@acf,#1,#2,<#3>(#4)[\GLX@acdef@page]}}
+\newcommand{\GLX@@acfs}{}
+\def\GLX@@acfs,#1,#2,<#3>(#4)[#5]{%
+ \GLX@@@acf,#1,#2,<#3>(#4)[#5]}
+\newcommand{\GLX@@@acf}{}
+\def\GLX@@@acf,#1,#2,<#3>(#4)[#5]#6{%
+ \GLX@do@glosstex{#6}{#5}{#4}{a}\GLX@do@acf{#6}{#4}{#3}{#1}{#2}}
+\newcommand{\GLX@acfS}{%
+ \@ifnextchar,{\GLX@@acfSc}{%
+ \@ifnextchar<{\GLX@@acfSa,\relax,\relax,}{%
+ \@ifnextchar({\GLX@@acfSr,\relax,\relax,<>}{%
+ \@ifnextchar[{\GLX@@acfSs,\relax,\relax,<>(\GLX@acdef@list)}{%
+ \GLX@@@acfS,\relax,\relax,<>(\GLX@acdef@list)[\GLX@acdef@page]}}}}}
+\newcommand{\GLX@@acfSc}{}
+\def\GLX@@acfSc,#1,#2,{%
+ \@ifnextchar<{\GLX@@acfSa,#1,#2,}{%
+ \@ifnextchar({\GLX@@acfSr,#1,#2,<>}{%
+ \@ifnextchar[{\GLX@@acfSs,#1,#2,<>(\GLX@acdef@list)}{%
+ \GLX@@@acfS,#1,#2,<>(\GLX@acdef@list)[\GLX@acdef@page]}}}}
+\newcommand{\GLX@@acfSa}{}
+\def\GLX@@acfSa,#1,#2,<#3>{%
+ \@ifnextchar({\GLX@@acfSr,#1,#2,<#3>}{%
+ \@ifnextchar[{\GLX@@acfSs,#1,#2,<#3>(\GLX@acdef@list)}{%
+ \GLX@@@acfS,#1,#2,<#3>(\GLX@acdef@list)[\GLX@acdef@page]}}}
+\newcommand{\GLX@@acfSr}{}
+\def\GLX@@acfSr,#1,#2,<#3>(#4){%
+ \@ifnextchar[{\GLX@@acfSs,#1,#2,<#3>(#4)}{%
+ \GLX@@@acfS,#1,#2,<#3>(#4)[\GLX@acdef@page]}}
+\newcommand{\GLX@@acfSs}{}
+\def\GLX@@acfSs,#1,#2,<#3>(#4)[#5]{%
+ \GLX@@@acfS,#1,#2,<#3>(#4)[#5]}
+\newcommand{\GLX@@@acfS}{}
+\def\GLX@@@acfS,#1,#2,<#3>(#4)[#5]#6{%
+ \GLX@do@glosstex{#6}{#5}{#4}{n}\GLX@do@acf{#6}{#4}{#3}{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\GLX@entry}
+% This is the control-sequence written into the |.aux|-file which is
+% to be read by \GlossTeX{}. This
+% macro is defined so that it takes 5 arguments and expands to
+% |\relax| when the |.aux|-file is reread by \TeX{}.
+% \begin{macrocode}
+\newcommand{\GLX@entry}[5]{\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\GLX@do@glosstex}
+% This macro writes lines of the format
+% \begin{definition}
+% |\GLX@entry{|\meta{label}|}{|\meta{pageref-mode}|}{|\meta{list}|}{|\meta{list-mode}|}{|\meta{page}|}|
+% \end{definition}
+% into the |.aux|-file.
+% \begin{macrocode}
+\newcommand{\GLX@do@glosstex}[4]{%
+ \protected@write\@auxout{}%
+ {\string\GLX@entry{#1}{#2}{#3}{#4}{\thepage}}}
+% \end{macrocode}
+% \end{macro}
+%
+% The following commands create macros so that |\GLX@term@|\meta{label} contains
+% the short-form of \meta{label} |#1|, |\GLX@term@@|\meta{label} contains the \meta{long-form}
+% of \meta{label} |#1| and |\GLX@terml@|\meta{label} expands to |x| if the \meta{long-form} of
+% \meta{label} |#1| has already been used. This is heavily borrowed from
+% \package{acronym}.
+%
+% \begin{macro}{\GLX@do@acs}
+% Output the short-form \meta{item} of \meta{label} |#1| in
+% \meta{list} |#2|.
+% \begin{macrocode}
+\newcommand{\GLX@do@acs}[2]{%
+ \expandafter\ifx\csname GLX@term@#1\endcsname\relax%
+ \textbf{#1!}%
+ \PackageWarning{glosstex}{Term `#1' is not defined}%
+ \gdef\GLX@undefined@term{x}%
+ \expandafter\gdef\csname GLX@term@#1\endcsname{\textbf{#1!}}%
+ \else%
+ \GLX@output@short{#1}{#2}{\csname GLX@term@#1\endcsname}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\GLX@do@acl}
+% Output the \meta{long-form} of \meta{label} |#1| in \meta{list} |#2|.
+% \begin{macrocode}
+\newcommand{\GLX@do@acl}[2]{%
+ \expandafter\ifx\csname GLX@term@@#1\endcsname\relax%
+ \textbf{#1!}%
+ \PackageWarning{glosstex}{Term `#1' has no long form}%
+ \expandafter\gdef\csname GLX@term@@#1\endcsname{\textbf{#1!}}%
+ \else%
+ \GLX@output@long{#1}{#2}{\csname GLX@term@@#1\endcsname}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\GLX@do@acf}
+% Output \meta{short} |(|\meta{long}|)| of \meta{label} |#1| by calling
+% |\GLX@do@acs| and |GLX@do@acl|.
+% \begin{definition}
+% |\GLX@do@acf||{|\meta{label}|}||{|\meta{list}|}||{|\meta{form}|}||{|\meta{lparen}|}||{|\meta{rparen}|}|
+% \end{definition}
+% \begin{macrocode}
+\newcommand{\GLX@do@acf}[5]{%
+ \begingroup%
+ \ifthenelse{\equal{#3}{i}}{\def\GLX@il{i}\def\GLX@tf{-}}{%
+ \ifthenelse{\equal{#3}{l}}{\def\GLX@il{l}\def\GLX@tf{-}}{%
+ \ifthenelse{\equal{#3}{it}}{\def\GLX@il{i}\def\GLX@tf{t}}{%
+ \ifthenelse{\equal{#3}{if}}{\def\GLX@il{i}\def\GLX@tf{f}}{%
+ \ifthenelse{\equal{#3}{lt}}{\def\GLX@il{l}\def\GLX@tf{t}}{%
+ \ifthenelse{\equal{#3}{lf}}{\def\GLX@il{l}\def\GLX@tf{f}}{%
+ \ifthenelse{\equal{#3}{t}}{\def\GLX@il{-}\def\GLX@tf{t}}{%
+ \ifthenelse{\equal{#3}{f}}{\def\GLX@il{-}\def\GLX@tf{f}}{%
+ \def\GLX@il{-}\def\GLX@tf{-}}%
+ }}}}}}}%
+ \ifthenelse{\boolean{@GLX@itemfirst}}%
+ {% itemfirst true
+ \ifthenelse{%
+ \equal{\GLX@itemorder{#2}}{i}}{\def\GLX@itemorder@{i}}{%
+ \ifthenelse{\equal{\GLX@itemorder{#2}}{l}}{\def\GLX@itemorder@{l}}{%
+ \ifthenelse{\equal{\GLX@il}{i}}{\def\GLX@itemorder@{i}}{}%
+ \ifthenelse{\equal{\GLX@il}{-}}{\def\GLX@itemorder@{i}}{}%
+ \ifthenelse{\equal{\GLX@il}{l}}{\def\GLX@itemorder@{l}}{}}}}%
+ {% itemfirst false
+ \ifthenelse{%
+ \equal{\GLX@itemorder{#2}}{i}}{\def\GLX@itemorder@{i}}{%
+ \ifthenelse{\equal{\GLX@itemorder{#2}}{l}}{\def\GLX@itemorder@{l}}{%
+ \ifthenelse{\equal{\GLX@il}{i}}{\def\GLX@itemorder@{i}}{}%
+ \ifthenelse{\equal{\GLX@il}{-}}{\def\GLX@itemorder@{l}}{}%
+ \ifthenelse{\equal{\GLX@il}{l}}{\def\GLX@itemorder@{l}}{}}}}%
+ \ifthenelse{\boolean{@GLX@footnote}}%
+ {% footnote true
+ \ifthenelse{%
+ \equal{\GLX@itemplacement{#2}}{t}}{\def\GLX@itemplacement@{t}}{%
+ \ifthenelse{\equal{\GLX@itemplacement{#2}}{f}}{\def\GLX@itemplacement@{f}}{%
+ \ifthenelse{\equal{\GLX@tf}{t}}{\def\GLX@itemplacement@{t}}{}%
+ \ifthenelse{\equal{\GLX@tf}{-}}{\def\GLX@itemplacement@{f}}{}%
+ \ifthenelse{\equal{\GLX@tf}{f}}{\def\GLX@itemplacement@{f}}{}}}}%
+ {% footnote false
+ \ifthenelse{%
+ \equal{\GLX@itemplacement{#2}}{t}}{\def\GLX@itemplacement@{t}}{%
+ \ifthenelse{\equal{\GLX@itemplacement{#2}}{f}}{\def\GLX@itemplacement@{f}}{%
+ \ifthenelse{\equal{\GLX@tf}{t}}{\def\GLX@itemplacement@{t}}{}%
+ \ifthenelse{\equal{\GLX@tf}{-}}{\def\GLX@itemplacement@{t}}{}%
+ \ifthenelse{\equal{\GLX@tf}{f}}{\def\GLX@itemplacement@{f}}{}}}}%
+ %
+ \ifthenelse{\equal{\GLX@itemorder@}{i}}%
+ {% itemorder i
+ \ifthenelse{\equal{\GLX@itemplacement@}{f}}%
+ {\GLX@do@acf@if{#1}{#2}}%
+ {\GLX@do@acf@it{#1}{#2}{#4}{#5}}}%
+ {% itemorder l
+ \ifthenelse{\equal{\GLX@itemplacement@}{f}}%
+ {\GLX@do@acf@lf{#1}{#2}}%
+ {\GLX@do@acf@lt{#1}{#2}{#4}{#5}}}%
+ \endgroup}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\GLX@do@ac}
+% Either call |\GLX@do@acf| or |\GLX@do@acs|, depending on
+% |\GLX@terml@#1| $==$ |x|.
+% \begin{definition}
+% |\GLX@do@ac||{|\meta{label}|}||{|\meta{list}|}||{|\meta{form}|}||{|\meta{lparen}|}||{|\meta{rparen}|}|
+% \end{definition}
+% \begin{macrocode}
+\newcommand{\GLX@do@ac}[5]{%
+ \begingroup%
+ \ifthenelse{\equal{#3}{i}}{\def\GLX@il{i}\def\GLX@tf{-}}{%
+ \ifthenelse{\equal{#3}{l}}{\def\GLX@il{l}\def\GLX@tf{-}}{%
+ \ifthenelse{\equal{#3}{it}}{\def\GLX@il{i}\def\GLX@tf{t}}{%
+ \ifthenelse{\equal{#3}{if}}{\def\GLX@il{i}\def\GLX@tf{f}}{%
+ \ifthenelse{\equal{#3}{lt}}{\def\GLX@il{l}\def\GLX@tf{t}}{%
+ \ifthenelse{\equal{#3}{lf}}{\def\GLX@il{l}\def\GLX@tf{f}}{%
+ \ifthenelse{\equal{#3}{t}}{\def\GLX@il{-}\def\GLX@tf{t}}{%
+ \ifthenelse{\equal{#3}{f}}{\def\GLX@il{-}\def\GLX@tf{f}}{%
+ \def\GLX@il{-}\def\GLX@tf{-}}%
+ }}}}}}}%
+ \ifthenelse{\boolean{@GLX@itemfirst}}%
+ {% itemfirst true
+ \ifthenelse{%
+ \equal{\GLX@itemorder{#2}}{i}}{\def\GLX@itemorder@{i}}{%
+ \ifthenelse{\equal{\GLX@itemorder{#2}}{l}}{\def\GLX@itemorder@{l}}{%
+ \ifthenelse{\equal{\GLX@il}{i}}{\def\GLX@itemorder@{i}}{}%
+ \ifthenelse{\equal{\GLX@il}{-}}{\def\GLX@itemorder@{i}}{}%
+ \ifthenelse{\equal{\GLX@il}{l}}{\def\GLX@itemorder@{l}}{}}}}%
+ {% itemfirst false
+ \ifthenelse{%
+ \equal{\GLX@itemorder{#2}}{i}}{\def\GLX@itemorder@{i}}{%
+ \ifthenelse{\equal{\GLX@itemorder{#2}}{l}}{\def\GLX@itemorder@{l}}{%
+ \ifthenelse{\equal{\GLX@il}{i}}{\def\GLX@itemorder@{i}}{}%
+ \ifthenelse{\equal{\GLX@il}{-}}{\def\GLX@itemorder@{l}}{}%
+ \ifthenelse{\equal{\GLX@il}{l}}{\def\GLX@itemorder@{l}}{}}}}%
+ \ifthenelse{\boolean{@GLX@footnote}}%
+ {% footnote true
+ \ifthenelse{%
+ \equal{\GLX@itemplacement{#2}}{t}}{\def\GLX@itemplacement@{t}}{%
+ \ifthenelse{\equal{\GLX@itemplacement{#2}}{f}}{\def\GLX@itemplacement@{f}}{%
+ \ifthenelse{\equal{\GLX@tf}{t}}{\def\GLX@itemplacement@{t}}{}%
+ \ifthenelse{\equal{\GLX@tf}{-}}{\def\GLX@itemplacement@{f}}{}%
+ \ifthenelse{\equal{\GLX@tf}{f}}{\def\GLX@itemplacement@{f}}{}}}}%
+ {% footnote false
+ \ifthenelse{%
+ \equal{\GLX@itemplacement{#2}}{t}}{\def\GLX@itemplacement@{t}}{%
+ \ifthenelse{\equal{\GLX@itemplacement{#2}}{f}}{\def\GLX@itemplacement@{f}}{%
+ \ifthenelse{\equal{\GLX@tf}{t}}{\def\GLX@itemplacement@{t}}{}%
+ \ifthenelse{\equal{\GLX@tf}{-}}{\def\GLX@itemplacement@{t}}{}%
+ \ifthenelse{\equal{\GLX@tf}{f}}{\def\GLX@itemplacement@{f}}{}}}}%
+ %
+ \ifthenelse{\equal{\GLX@itemorder@}{i}}%
+ {% itemorder i
+ \ifthenelse{\equal{\GLX@itemplacement@}{f}}%
+ {\expandafter\ifx\csname GLX@terml@#1\endcsname\relax%
+ \GLX@do@acf@if{#1}{#2}%
+ \expandafter\gdef\csname GLX@terml@#1\endcsname{x}%
+ \else%
+ \GLX@do@acs{#1}{#2}%
+ \fi}%
+ {\expandafter\ifx\csname GLX@terml@#1\endcsname\relax%
+ \GLX@do@acf@it{#1}{#2}{#4}{#5}%
+ \expandafter\gdef\csname GLX@terml@#1\endcsname{x}%
+ \else%
+ \GLX@do@acs{#1}{#2}%
+ \fi}}%
+ {% itemorder l
+ \ifthenelse{\equal{\GLX@itemplacement@}{f}}%
+ {\expandafter\ifx\csname GLX@terml@#1\endcsname\relax%
+ \GLX@do@acf@lf{#1}{#2}%
+ \expandafter\gdef\csname GLX@terml@#1\endcsname{x}%
+ \else%
+ \GLX@do@acs{#1}{#2}%
+ \fi}%
+ {\expandafter\ifx\csname GLX@terml@#1\endcsname\relax%
+ \GLX@do@acf@lt{#1}{#2}{#4}{#5}%
+ \expandafter\gdef\csname GLX@terml@#1\endcsname{x}%
+ \else%
+ \GLX@do@acs{#1}{#2}%
+ \fi}}%
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\GLX@do@acf@it}
+% \begin{definition}
+% |\GLX@do@acf@it||{|\meta{label}|}||{|\meta{list}|}||{|\meta{lparen}|}||{|\meta{rparen}|}|
+% \end{definition}
+% \begin{macrocode}
+\newcommand{\GLX@do@acf@it}[4]{%
+ \GLX@do@acs{#1}{#2}%
+ \expandafter\ifx\csname GLX@term@@#1\endcsname\relax%
+ \else\nolinebreak[3]\space%
+ \ifthenelse{\equal{#3}{\relax}}{%
+ \expandafter\ifx\csname GLX@paren@l@#2\endcsname\relax%
+ \GLX@paren@l%
+ \else%
+ \expandafter\csname GLX@paren@l@#2\endcsname%
+ \fi}{#3}%
+ \GLX@do@acl{#1}{#2}%
+ \ifthenelse{\equal{#4}{\relax}}{%
+ \expandafter\ifx\csname GLX@paren@r@#2\endcsname\relax%
+ \GLX@paren@r%
+ \else%
+ \expandafter\csname GLX@paren@r@#2\endcsname%
+ \fi}{#4}%
+ \fi}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\GLX@do@acf@if}
+% \begin{definition}
+% |\GLX@do@acf@if||{|\meta{label}|}||{|\meta{list}|}|
+% \end{definition}
+% \begin{macrocode}
+\newcommand{\GLX@do@acf@if}[2]{%
+ \GLX@do@acs{#1}{#2}%
+ \expandafter\ifx\csname GLX@term@@#1\endcsname\relax%
+ \else\nolinebreak[3]\footnote{\GLX@do@acl{#1}{#2}}\fi}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\GLX@do@acf@lt}
+% \begin{definition}
+% |\GLX@do@acf@lt||{|\meta{label}|}||{|\meta{list}|}||{|\meta{lparen}|}||{|\meta{rparen}|}|
+% \end{definition}
+% \begin{macrocode}
+\newcommand{\GLX@do@acf@lt}[4]{%
+ \expandafter\ifx\csname GLX@term@@#1\endcsname\relax%
+ \else\GLX@do@acl{#1}{#2}\fi%
+ \nolinebreak[3]\space%
+ \ifthenelse{\equal{#3}{\relax}}{%
+ \expandafter\ifx\csname GLX@paren@l@#2\endcsname\relax%
+ \GLX@paren@l%
+ \else%
+ \expandafter\csname GLX@paren@l@#2\endcsname%
+ \fi}{#3}%
+ \GLX@do@acs{#1}{#2}%
+ \ifthenelse{\equal{#4}{\relax}}{%
+ \expandafter\ifx\csname GLX@paren@r@#2\endcsname\relax%
+ \GLX@paren@r%
+ \else%
+ \expandafter\csname GLX@paren@r@#2\endcsname%
+ \fi}{#4}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\GLX@do@acf@lf}
+% \begin{definition}
+% |\GLX@do@acf@lf||{|\meta{label}|}||{|\meta{list}|}|
+% \end{definition}
+% \begin{macrocode}
+\newcommand{\GLX@do@acf@lf}[2]{%
+ \expandafter\ifx\csname GLX@term@@#1\endcsname\relax%
+ \else\GLX@do@acl{#1}{#2}\fi%
+ \footnote{\GLX@do@acs{#1}{#2}}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\GLX@newterm}
+% This macro defines |\GLX@term@#1| and |\GLX@term@@|\meta{label} so that they expand to
+% their appropriate meaning.
+% \begin{definition}
+% |\GLX@newterm||{|\meta{label}|}||{|\meta{item}|}||{|\meta{long-form}|}|
+% \end{definition}
+% \begin{macrocode}
+\newcommand{\GLX@newterm}[3]{%
+ \expandafter\gdef\csname GLX@term@#1\endcsname{#2}%
+ \ifx#3\empty%
+ \else\expandafter\gdef\csname GLX@term@@#1\endcsname{#3}\fi}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{theglosstex}
+% This environment is used for typesetting the lists generated by
+% \GlossTeX{}. These are the meanings of the parameters:
+%
+% \begin{description}
+% \item[\#1] This \meta{list}
+% \item[\#2] This \meta{pageref-mode}
+% \item[\#\#1] \meta{label}
+% \item[\#\#2] \meta{item}
+% \item[\#\#3] \meta{long-form}
+% \item[\#\#4] \meta{text}
+% \item[\#\#5] \meta{list}
+% \item[\#\#6] \meta{list-mode}
+% \item[\#\#7] \meta{page-stuff}
+% \end{description}
+%
+% The whole list is encapsulated into the environment defined by the
+% macros |\GLX@benv@|\meta{list} and |\GLX@eenv@|\meta{list}. These
+% contain |\begin{description}| and |\end{description}| for
+% \meta{list} $==$ |glo| as default. Each |\GlossTeXEntry| is only
+% processed if its \meta{list} is identical to the environment's
+% \meta{list} and it's \meta{list-mode} $==$
+% |a|. |\GLX@item@|\meta{list} is called for each of these entries.
+% \begin{definition}
+% |theglosstex||{|\meta{list}|}||{|\meta{pageref-mode}|}|
+% \end{definition}
+% \begin{macrocode}
+\newenvironment{theglosstex}[2]{%
+% \end{macrocode}
+% First, we define some macros which correspond to the arguments given
+% to this environment. We need |\GLX@theglosstex@list| when closing the
+% current environment. |\GLX@theglosstex@pagerefmode| wouldn't really
+% necessary if I weren't that lazy. Having this as global data makes
+% |theglosstex| non reentrant, but we don't need nested glossaries. So
+% we save passing all these arguments around.
+% \begin{macrocode}
+ \gdef\GLX@theglosstex@list{#1}%
+ \gdef\GLX@theglosstex@pagerefmode{#2}%
+% \end{macrocode}
+% Next, we expand |\GLX@benv@|\meta{list} to start the environment.
+% \begin{macrocode}
+ \csname GLX@benv@#1\endcsname%
+% \end{macrocode}
+%
+% \begin{macro}{\glxref}
+% \begin{macro}{\glxrefS}
+% This one produces an entry in the current \meta{list} (stored in
+% |\GLX@theglosstex@list|).
+% \begin{definition}
+% |\glxref||{|\meta{label}|}|
+% \end{definition}
+% \begin{macrocode}
+ \DeclareRobustCommand{\glxref}{%
+ \@ifstar{\GLX@glxrefS}{\GLX@glxref}}%
+ \newcommand{\GLX@glxref}[1]{%
+ \GLX@do@glosstex{##1}{n}{\GLX@theglosstex@list}{a}%
+ \GLX@do@acs{##1}{\GLX@theglosstex@list}}%
+ \newcommand{\GLX@glxrefS}[1]{%
+ \GLX@do@glosstex{##1}{n}{\GLX@theglosstex@list}{a}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% Define the corresponding macros for \meta{label} using \meta{item}
+% and \meta{long-form} and also write out the macro call for the
+% definition into the |.aux|-file so that they are defined at the next
+% run early. Then, check if the current \meta{label} is to appear in
+% the active \meta{list} and check if it is to appear in this
+% \meta{list} at all. If these checks all succeed, call
+% |\GLX@item@|\meta{label} to typeset the current \meta{label}.
+% \begin{macrocode}
+ \newcommand{\GlossTeXEntry}[7]{%
+ \GLX@newterm{##1}{##2}{##3}%
+ \write\@auxout{\string\GLX@newterm{##1}{##2}{##3}}%
+ \ifthenelse{\equal{#1}{##5}}{%
+ \ifthenelse{\equal{a}{##6}}{%
+ \csname GLX@item@#1\endcsname%
+ {##1}{##2}{##3}{##4}{##5}{##6}{##7}}{}%
+ }{}}}{%
+ \csname GLX@eenv@\GLX@theglosstex@list\endcsname}%
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\printglosstex}
+% The optional arguments are the \meta{list} to be typeset and the
+% \meta{pageref-mode}. First,
+% |\GLX@heading@|\meta{list} is called (defaults to something like
+% |\section{\glossaryname}|) to produce a proper heading. Then, if
+% present, the |.glx|-file is included into a |theglosstex|
+% environment.
+% \begin{definition}
+% |\printglosstex|\opt{|(|\meta{list}|)|}\opt{|[|\meta{pageref-mode}|]|}
+% \end{definition}
+% \begin{macrocode}
+\DeclareRobustCommand\printglosstex{\GLX@printglosstex}
+\newcommand{\GLX@printglosstex}{%
+ \@ifnextchar({\GLX@@printglosstexr}{%
+ \@ifnextchar[{\GLX@@printglosstexs(glo)}{%
+ \GLX@@@printglosstex[p](glo)}}}
+\newcommand{\GLX@@printglosstexr}{}
+\def\GLX@@printglosstexr(#1){%
+ \@ifnextchar[{\GLX@@printglosstexs(#1)}{%
+ \GLX@@@printglosstex(#1)[p]}}
+\newcommand{\GLX@@printglosstexs}{}
+\def\GLX@@printglosstexs(#1)[#2]{%
+ \GLX@@@printglosstex(#1)[#2]}
+\newcommand{\GLX@@@printglosstex}{}
+\def\GLX@@@printglosstex(#1)[#2]{\GLX@do@printglosstex{#1}{#2}}
+\newcommand{\GLX@do@printglosstex}[2]{%
+ \expandafter\ifx\csname GLX@heading@#1\endcsname\relax%
+ \textbf{#1!}%
+ \PackageWarning{glosstex}{Heading for list `#1' is not defined}%
+ \expandafter\gdef\csname GLX@heading@#1\endcsname{\textbf{#1!}}%
+ \else%
+ \csname GLX@heading@#1\endcsname%
+ \IfFileExists{\jobname.glx}{%
+ \begin{theglosstex}{#1}{#2}%
+ \input{\jobname.glx}%
+ \end{theglosstex}}%
+ {\typeout{No file \jobname.glx}}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% That was the hard part. The following macros are really trivial, so
+% lean back now. They are primarily meant for convenience for using
+% the |.std| and |.cfg| files.
+%
+% \begin{macro}{\glxgldefault}
+% \begin{macro}{\glxacdefault}
+% The commands set the default \meta{list} and \meta{pageref-mode} for
+% the commands starting with |\gl| and |\ac| excluding |\glxref|, respectively.
+% \begin{macrocode}
+\newcommand{\glxgldefault}[2]{%
+ \gdef\GLX@gldef@list{#1}%
+ \gdef\GLX@gldef@page{#2}}
+\newcommand{\glxacdefault}[2]{%
+ \gdef\GLX@acdef@list{#1}%
+ \gdef\GLX@acdef@page{#2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\glxitemorderdefault}
+% \begin{macro}{\glxitemplacementdefault}
+% These macros set the defaults concerning \meta{item-placement} and
+% \meta{item-order} in \meta{list}.
+% \begin{macrocode}
+\newcommand{\glxitemorderdefault}[2]{%
+ \expandafter\gdef\csname GLX@itemorder@#1\endcsname{#2}}
+\newcommand{\glxitemplacementdefault}[2]{%
+ \expandafter\gdef\csname GLX@itemplacement@#1\endcsname{#2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\GLX@itemorder}
+% \begin{macro}{\GLX@itemplacement}
+% These expand to |\GLX@itemorder@#1| and |GLX@itemplacement@|\meta{list}.
+% \begin{macrocode}
+\newcommand{\GLX@itemorder}[1]{%
+ \expandafter\ifx\csname GLX@itemorder@#1\endcsname\relax%
+ \PackageWarning{glosstex}{Item order for list `#1' not defined}%
+ \expandafter\gdef\csname GLX@itemorder@#1\endcsname{\textbf{#1!}}%
+ \else%
+ \csname GLX@itemorder@#1\endcsname%
+ \fi}
+\newcommand{\GLX@itemplacement}[1]{%
+ \expandafter\ifx\csname GLX@itemplacement@#1\endcsname\relax%
+ \PackageWarning{glosstex}{Item placement for list `#1' not defined}%
+ \expandafter\gdef\csname GLX@itemplacement@#1\endcsname{\textbf{#1!}}%
+ \else%
+ \csname GLX@itemplacement@#1\endcsname%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\glxparendefault}
+% Set the default for \meta{paren} on package-level.
+% \begin{macrocode}
+\newcommand{\glxparendefault}[2]{%
+ \gdef\GLX@paren@l{#1}%
+ \gdef\GLX@paren@r{#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\glxparenlistdefault}
+% Set the default for \meta{paren} on \meta{list}-level.
+% \begin{macrocode}
+\newcommand{\glxparenlistdefault}[3]{%
+ \expandafter\gdef\csname GLX@paren@l@#1\endcsname{#2}%
+ \expandafter\gdef\csname GLX@paren@r@#1\endcsname{#3}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\glxheading}
+% This macro sets the headings to be used typesetting a \meta{list}.
+% \begin{macrocode}
+\newcommand*{\glxheading}[2]{%
+ \expandafter\gdef\csname GLX@heading@#1\endcsname{#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% And finally, include the mandatory standard configuration file |glosstex.std|
+% and an optional |.cfg|-file.
+% \begin{macrocode}
+\InputIfFileExists{glosstex.std}{%
+ \typeout{Using the standard configuration file glosstex.std}}{%
+ \PackageWarning{glosstex}{%
+ File glosstex.std not found. I can't stand it no more}}
+\InputIfFileExists{glosstex.cfg}{%
+ \typeout{Using the configuration file glosstex.cfg}}{}
+%</package>
+% \end{macrocode}
+%
+% \subsection{The \MakeIndex{} Style-File \file{glosstex.ist}}
+%
+% It is very important to use an appropriate \gls{ist-file} for \MakeIndex\
+% to be able to read and write files in the correct format. \GlossTeX\
+% comes with |glosstex.ist| which has to be used as style-file for
+% \MakeIndex{}. The file |glosstex.ist| should not be modified since
+% it is tightly coupled to the features of \MakeIndex{}. Note the use
+% of ``|~|'' as |quote| to enable german word-ordering using the |-g|
+% option to \MakeIndex{}. So if you want a ``|~|'' in your |.gdf|-file,
+% you have to type ``|~~|''
+%
+% \begin{macrocode}
+%<*ist>
+keyword "\\GlossTeXEntry"
+quote '~'
+delim_0 ""
+group_skip "\n"
+indent_length 0
+indent_space ""
+item_0 "\n\\GlossTeXEntry"
+postamble "\n"
+preamble "\n"
+%</ist>
+% \end{macrocode}
+%
+% \Finale
+\endinput