mirror of
https://github.com/GaloisInc/cryptol.git
synced 2024-12-17 21:11:35 +03:00
5916 lines
192 KiB
TeX
5916 lines
192 KiB
TeX
%\iffalse
|
|
% glossary.dtx generated using makedtx version 0.91b (c) Nicola Talbot
|
|
% Command line args:
|
|
% -macrocode ".*\.p.*l"
|
|
% -macrocode ".*\.bat"
|
|
% -macrocode ".*\.tex"
|
|
% -setambles ".*\.p.*l=>\nopreamble\nopostamble"
|
|
% -setambles ".*\.bat=>\nopreamble\nopostamble"
|
|
% -src "(.+)\.(sty)\Z=>\1.\2"
|
|
% -src "(.+)\.(pl)\Z=>\1.\2"
|
|
% -src "(.+)\.(bat)\Z=>\1.\2"
|
|
% -src "(.+)\.(perl)\Z=>\1.\2"
|
|
% -src "(.+)\.(tex)\Z=>\1.\2"
|
|
% -doc "manual.tex"
|
|
% -author "Nicola Talbot"
|
|
% -prefinale "\\fi"
|
|
% -dir "source"
|
|
% glossary
|
|
% Created on 2006/7/25 18:13
|
|
%\fi
|
|
%\iffalse
|
|
%<*package>
|
|
%% \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 \~}
|
|
%</package>
|
|
%\fi
|
|
% \iffalse
|
|
% Doc-Source file to use with LaTeX2e
|
|
% Copyright (C) 2006 Nicola Talbot, all rights reserved.
|
|
% \fi
|
|
% \iffalse
|
|
%<*driver>
|
|
\documentclass[a4paper]{ltxdoc}
|
|
\usepackage{ifthen}
|
|
\usepackage[colorlinks,
|
|
bookmarks,
|
|
hyperindex=false,
|
|
pdfauthor={N.L.C. Talbot},
|
|
pdftitle={glossary.sty: LaTeX2e Package to Assist Generating Glossaries},
|
|
pdfkeywords={LaTeX,package,glossary,acronym}]{hyperref}
|
|
|
|
%hyperindex conflicts with doc
|
|
%(end up with |usage|hyperpage in indexentry)
|
|
%This unfortunately means that the changes section doesn't
|
|
%have active links, but at least it will keep makeindex happy.
|
|
|
|
|
|
\renewcommand{\usage}[1]{\textit{\hyperpage{#1}}}
|
|
\renewcommand{\main}[1]{\hyperpage{#1}}
|
|
\newcommand{\see}[2]{\emph{see} #1}
|
|
\makeatletter
|
|
\def\index@prologue{\section*{Index}}
|
|
\makeatother
|
|
\RecordChanges
|
|
\PageIndex
|
|
%\OnlyDescription
|
|
|
|
|
|
\newcommand{\cmdname}[1]{\texttt{\symbol{92}#1}}
|
|
\newcommand{\istkey}[1]{\texttt{#1}\index{makeindex key>#1|hyperpage}}
|
|
\newcommand{\icmdname}[1]{\texttt{\symbol{92}#1}\SpecialMainIndex{#1}}
|
|
\newcommand{\appname}[1]{\texttt{#1}\index{#1=\texttt{#1}|hyperpage}}
|
|
\newcommand{\gloskey}[1]{\texttt{#1}\index{glossary keys=\cmdname{glossary} keys>#1|hyperpage}}
|
|
\newcommand{\setglos}[1]{\texttt{#1}\index{setglossary keys=\cmdname{setglossary} keys>#1|hyperpage}}
|
|
\newcommand{\glsnumfmt}[1]{\texttt{#1}%
|
|
\index{page number formats>#1|hyperpage}%
|
|
\index{glossary keys=\cmdname{glossary} keys>format>#1|hyperpage}}
|
|
\newcommand{\pkgopt}[2][]{%
|
|
\ifthenelse{\equal{#1}{}}{%
|
|
\texttt{#2}\index{package options>#2|hyperpage}}{%
|
|
\texttt{#2=#1}\index{package options>#2>#1|hyperpage}}}
|
|
\newcommand{\pkgoptval}[2]{\texttt{#1}\index{package options>#2>#1|hyperpage}}
|
|
\newcommand{\filetype}[1]{\texttt{#1}\index{file types>#1|hyperpage}}
|
|
\newcommand{\styname}[1]{\textsf{#1}\index{#1=\textsf{#1}|hyperpage}}
|
|
\newcommand{\envname}[1]{\textsf{#1}}
|
|
|
|
|
|
\begin{document}
|
|
\DocInput{glossary.dtx}
|
|
\end{document}
|
|
%</driver>
|
|
%\fi
|
|
%\MakeShortVerb{"}
|
|
%\DeleteShortVerb{\|}
|
|
%
|
|
% \title{glossary.sty v 2.4: \LaTeXe\ Package to Assist Generating Glossaries}
|
|
% \author{Nicola L.C. Talbot}
|
|
% \date{20th July 2006}
|
|
% \maketitle
|
|
%\tableofcontents
|
|
%
|
|
% \section{Introduction}
|
|
% \changes{1.0}{2004 July 29}{Initial version}
|
|
% The \styname{glossary} package is provided to assist
|
|
%generating a glossary. It has a certain amount of flexibility,
|
|
%allowing the user to customize the format of the glossary, and
|
|
%define new glossary-style objects.
|
|
%
|
|
%\section{Installation}
|
|
%
|
|
%You need to make sure you have downloaded the following three
|
|
%files:
|
|
%\begin{verbatim}
|
|
%glossary.ins
|
|
%glossary.dtx
|
|
%README
|
|
%\end{verbatim}
|
|
%To extract the code from the \texttt{glossary.dtx} file, you
|
|
%will need to run the installation file through LaTeX:
|
|
%\begin{verbatim}
|
|
%latex glossary.ins
|
|
%\end{verbatim}
|
|
%This will create the following files:
|
|
%\begin{verbatim}
|
|
%glossary.sty
|
|
%glossary.perl
|
|
%makeglos.pl
|
|
%makeglos.bat
|
|
%\end{verbatim}
|
|
%along with several sample files. The file \texttt{glossary.sty}
|
|
%should be placed somewhere in the \LaTeX\ path, e.g.\
|
|
%\texttt{texmf/tex/latex/glossary/} or
|
|
%\texttt{localtexmf/tex/latex/glossary/}. Remember to update the
|
|
%\TeX\ database if you are installing this package for the first time.
|
|
%The file \texttt{glossary.perl} is a \LaTeX2HTML\ style file, and
|
|
%should be placed in the \LaTeX2HTML\ style file directory (usually
|
|
%\texttt{latex2html/styles/}). The file \texttt{makeglos.pl}
|
|
%is a Perl script which calls \appname{makeindex}. If you are
|
|
%using UNIX or Linux, you will need to set the permissions so
|
|
%that you can execute the file:
|
|
%\begin{verbatim}
|
|
%chmod a+x makeglos.pl
|
|
%\end{verbatim}
|
|
%You should then place this file somewhere on your path.
|
|
%(You may also need to edit the first line of
|
|
%this file, if \appname{perl} is located in a directory other than \verb"/usr/bin/"\footnote{and you can also remove the \texttt{.pl}
|
|
%extension which isn't to everyone's liking.}.)
|
|
%
|
|
%If you are not using UNIX or Linux etc, you may have to explicitly
|
|
%load the file into Perl, so you would need to do
|
|
%\texttt{perl makeglos.pl} instead of just \texttt{makeglos.pl}.
|
|
%If you are using Windows, a batch file, \texttt{makeglos.bat}
|
|
%is provided which will run Perl on \texttt{makeglos.pl}.
|
|
%Both \texttt{makeglos.pl} and \texttt{makeglos.bat} should
|
|
%be placed somewhere specified by the PATH environment
|
|
%variable. (For example, put them both in the same
|
|
%directory as \appname{makeindex}, which will probably
|
|
%be in \verb+\texmf\miktex\bin\+).
|
|
%\changes{2.22}{2005 Sept 12}{added makeglos.bat file}
|
|
%
|
|
%If you don't have Perl installed on your system, you can just use
|
|
%\appname{makeindex}, only you will have to remember all the
|
|
%command line switches, and you won't be able to merge entries
|
|
%that have the same name, but different descriptions.
|
|
%
|
|
%Note that if you are updating the glossary package, it is
|
|
%a good idea to update \texttt{makeglos.pl} as it may also
|
|
%have been modified.
|
|
%
|
|
% \section{Generating Glossary Information}
|
|
%
|
|
% The standard \LaTeX\ command \cmdname{makeglossary}\DescribeMacro{\makeglossary}{} (analogous to \cmdname{makeindex})
|
|
% should be placed in the document preamble. If this command
|
|
%is omitted, glossary information will be ignored. Glossary
|
|
%entries are generated using the command
|
|
%\cmdname{glossary}\verb"{"\meta{key-val list}\verb'}'\DescribeMacro{\glossary}.
|
|
% This command is a slightly modified version of the standard
|
|
%\cmdname{glossary} command, in order to separate out the
|
|
%information into \meta{entry-name} and \meta{entry-description}.
|
|
%The argument to \cmdname{glossary} must be a comma-separated
|
|
%list of \meta{key}=\meta{value} pairs. The following keys are
|
|
%available:
|
|
%\begin{center}
|
|
%\begin{tabular}{lp{0.8\linewidth}}
|
|
%\bfseries Key & \bfseries Value\\
|
|
%\ttfamily \gloskey{name} & The entry name\\
|
|
%\ttfamily \gloskey{description} & A description about the entry\\
|
|
%\ttfamily \gloskey{sort} & How to sort the entry. (Entry name used if sort omitted)\\
|
|
%\ttfamily \gloskey{format} & How to format the page number\\
|
|
%\ttfamily \gloskey{number} & Override the page number with a different
|
|
%counter. The value should be the name of a counter (e.g.\
|
|
%\texttt{number=section}).
|
|
%\end{tabular}
|
|
%\end{center}
|
|
% For example:
|
|
%\begin{verbatim}
|
|
%\glossary{name={singular matrix},
|
|
% description={A matrix with zero determinant}}
|
|
%\end{verbatim}
|
|
% The following example sorts on the text \texttt{U} instead of
|
|
%\verb"$\mathcal{U}$":
|
|
%\begin{verbatim}
|
|
%\glossary{name={$\mathcal{U}$},
|
|
% description={The universal set},
|
|
% sort=U}
|
|
%\end{verbatim}
|
|
%Note that you should always use the \gloskey{sort}
|
|
%key if the \gloskey{name} key contains commands, this is particularly
|
|
%important if you are using hyperlinks, as the target is constructed
|
|
%from the \gloskey{name} key if the \gloskey{sort} key is omitted.
|
|
%
|
|
%In the glossary, each entry is followed by a list of page numbers
|
|
%that correspond to the pages where the relevant \cmdname{glossary}
|
|
%command is placed. By default the numbers are formatted in the
|
|
%current font, but the page number format for individual entries can be
|
|
%changed using the \gloskey{format} key. This should be the name of a
|
|
%\LaTeX\ formatting command without the preceding \verb'\' (as with the
|
|
%\verb'|' operator in \cmdname{index}.) For example:
|
|
%\begin{verbatim}
|
|
%\glossary{name={$\mathbb{R}$},
|
|
% description={The set of real numbers},
|
|
% sort=R,
|
|
% format=textbf}
|
|
%\end{verbatim}
|
|
%In addition, the following formats are also available:
|
|
%\changes{2.0}{2004 September 21}{Hyper page formats:
|
|
%\texttt{'hypersf}, \texttt{'hypertt}, \texttt{'hyperbf} and
|
|
%\texttt{'hyperbf}}
|
|
%\changes{2.12}{2004 November 1}{Hyper page format:
|
|
%\texttt{'hyperrm}}
|
|
%\changes{2.4}{2006 July 20}{Hyper page formats updated to take two
|
|
%arguments. Additional formats also provided}
|
|
%\begin{center}
|
|
%\begin{tabular}{ll}
|
|
%\glsnumfmt{hyperrm} & The number is a hyper link in roman \\
|
|
%\glsnumfmt{hypersf} & The number is a hyper link in sans-serif \\
|
|
%\glsnumfmt{hypertt} & The number is a hyper link in typewriter font \\
|
|
%\glsnumfmt{hyperbf} & The number is a hyper link in bold \\
|
|
%\glsnumfmt{hypermd} & The number is a hyper link in medium weight \\
|
|
%\glsnumfmt{hyperit} & The number is a hyper link in italic\\
|
|
%\glsnumfmt{hypersl} & The number is a hyper link in slanted font\\
|
|
%\glsnumfmt{hyperup} & The number is a hyper link in upright font\\
|
|
%\glsnumfmt{hypersc} & The number is a hyper link in small caps\\
|
|
%\glsnumfmt{hyperem} & The number is a hyper link using \cmdname{emph}
|
|
%\end{tabular}
|
|
%\end{center}
|
|
%If the \pkgopt{hyper} option has not been set,
|
|
%\glsnumfmt{hyperem} is equivalent to \texttt{emph}, and the remaining
|
|
%\glsnumfmt{hyperrm} etc are equivalent to \texttt{textrm} etc.
|
|
%Note that it is important the you use \texttt{hyperrm} instead of
|
|
%\texttt{hyperpage}, as the \cmdname{hyperpage} command won't
|
|
%work on a list or range of numbers in the glossary%
|
|
%\footnote{This is because the list and number ranges are
|
|
%delimited using \cmdname{delimR} and \cmdname{delimN} instead of
|
|
%explicitly using a comma or en-dash.}. If you want to define your
|
|
%own command that uses hyper links, it must be defined in an
|
|
%analogous manner to \icmdname{hyperrm}. For example, if you want
|
|
%to display a page number in a bold italic format, that contains a
|
|
%hyperlink to the appropriate page, you would need to define it as
|
|
%follows:
|
|
%\begin{verbatim}
|
|
%\newcommand{\hyperbfit}[2][\gls@number]{%
|
|
%\textbf{\itshape\glshyper{#1}{#2}}}
|
|
%\end{verbatim}
|
|
%As can be seen from the definition, all the \cmdname{hyper}\meta{xx}
|
|
%commands have an optional argument. This argument is the name of the
|
|
%counter being used. You do not need to worry about this argument if
|
|
%you only use these commands within the \icmdname{glossary} command.
|
|
%So the previous example can simply be rewritten as:
|
|
%\begin{verbatim}
|
|
%\glossary{name={$\mathbb{R}$},
|
|
% description={The set of real numbers},
|
|
% sort=R,
|
|
% format=hyperbf}
|
|
%\end{verbatim}
|
|
%
|
|
%\textbf{Note:} although the numbers in the glossary are referred to
|
|
%as ``page'' numbers in this manual, they may in fact refer to some
|
|
%other counter, such as the \texttt{section} counter, depending on
|
|
%whether the \gloskey{number} key has been used.
|
|
%
|
|
%As with the \cmdname{index} command, care must be taken if you
|
|
%want to use the special characters: \verb'@' \verb/|/ \verb+"+ and
|
|
%\verb'!'. These characters should be preceded by the double quote
|
|
%character. For example:
|
|
%\begin{verbatim}
|
|
%\glossary{name={$"|\mathcal{S}"|$,
|
|
%description=The cardinality of the set \mathcal{S}}}
|
|
%\end{verbatim}
|
|
%There is no provision for sub-entries, as these are
|
|
%generally only applicable in an index, and not in a glossary.
|
|
%
|
|
%\changes{2.14}{2005 May 28}{'xglossary added}%
|
|
%As from version 2.14, there is an additional command available:
|
|
%\DescribeMacro{\xglossary}
|
|
%\par\vspace{10pt}\noindent\cmdname{xglossary}\verb'{'\meta{gls-entry}%
|
|
%\verb'}{'\meta{text}\verb"}"
|
|
%\par\vspace{10pt}\noindent This is equivalent to\meta{text}\icmdname{glossary}\verb'{'\meta{gls-entry}\verb"}",
|
|
%where \meta{text} will be made a hyper link to the
|
|
%relevant entry in the glossary, if hyper
|
|
%links are supported.
|
|
%
|
|
%\subsection{Storing Glossary Information}
|
|
%
|
|
%It is very cumbersome having to use the \icmdname{glossary} command
|
|
%throughout your document, every time you use a term that you want in
|
|
%your glossary. This is particularly true for terms with a long
|
|
%description. The \styname{glossary} package provides a means
|
|
%of storing the glossary information at the beginning of the document,
|
|
%and then using it whenever required. It is strongly recommended
|
|
%that you use this approach, rather than explicity using the
|
|
%\icmdname{glossary} command.
|
|
%
|
|
%\changes{2.17}{2005 June 28}{'storeglosentry added}
|
|
%\DescribeMacro{\storeglosentry}
|
|
%The following command:\\[10pt]
|
|
%\begin{ttfamily}
|
|
%\cmdname{storeglosentry}[\textrm{\meta{gls-type}}]\{\textrm{\meta{label}}\}\{\textrm{\meta{gls-entry}}\}
|
|
%\end{ttfamily}\\[10pt]
|
|
%can be used to store glossary information, where \meta{label} is
|
|
%a unique label assigned to this entry. The information
|
|
%can then be used later with any of the following commands:\\[10pt]
|
|
%\changes{2.14}{2005 May 28}{'useglosentry added}
|
|
%\changes{2.14}{2005 May 28}{'useGlosentry added}
|
|
%\changes{2.18}{2005 July 5}{'gls added}
|
|
%\begin{ttfamily}
|
|
%\cmdname{useglosentry}[\textrm{\meta{opt}}]\{\textrm{\meta{label}}\}\DescribeMacro{\useglosentry}\\
|
|
%\cmdname{useGlosentry}[\textrm{\meta{opt}}]\{\textrm{\meta{label}}\}\{\textrm{\meta{text}}\}\DescribeMacro{\useGlosentry}\\
|
|
%\cmdname{gls}[\textrm{\meta{opt}}]\{\textrm{\meta{label}}\}\DescribeMacro{\gls}
|
|
%\end{ttfamily}\\[10pt]
|
|
%\cmdname{useglosentry} adds the glossary entry whose label is given by
|
|
%\meta{label} to the appropriate glossary,
|
|
%\cmdname{useGlosentry} adds the glossary entry, and
|
|
%makes \meta{text} a hyperlink to that entry (if hyperlinks are
|
|
%supported). The third command, \cmdname{gls}, is like
|
|
%\cmdname{useGlosentry}, but forms \meta{text} from the name
|
|
%given in the glossary entry.
|
|
%
|
|
%Returning to an earlier example, instead of typing:
|
|
%\begin{verbatim}
|
|
%\glossary{name={$\mathcal{U}$},
|
|
% description={The universal set},
|
|
% sort=U}
|
|
%\end{verbatim}
|
|
%every time you want to add this entry to the glossary, you
|
|
%can instead store the information:
|
|
%\changes{2.19}{2005 July 8}{fixed bug in 'storeglosentry}
|
|
%\begin{verbatim}
|
|
%\storeglosentry{glos:U}{name={$\mathcal{U}$},
|
|
% description={The universal set},
|
|
% sort=U}
|
|
%\end{verbatim}
|
|
%Now, instead of continually copying and pasting the glossary command
|
|
%for this entry (which can have quite a large \gloskey{description}
|
|
%field), you can use either:
|
|
%\begin{verbatim}
|
|
%\useglosentry{glos:U}
|
|
%\end{verbatim}
|
|
%which is equivalent to:
|
|
%\begin{verbatim}
|
|
%\glossary{name={$\mathcal{U}$},
|
|
% description={The universal set},
|
|
% sort=U}
|
|
%\end{verbatim}
|
|
%or you can use:
|
|
%\begin{verbatim}
|
|
%\useGlosentry{glos:U}{text}
|
|
%\end{verbatim}
|
|
%which is equivalent to:
|
|
%\begin{verbatim}
|
|
%\xglossary{name={$\mathcal{U}$},
|
|
% description={The universal set},
|
|
% sort=U}{text}
|
|
%\end{verbatim}
|
|
%or you can use:
|
|
%\begin{verbatim}
|
|
%\gls{glos:U}
|
|
%\end{verbatim}
|
|
%which is equivalent to:
|
|
%\begin{verbatim}
|
|
%\xglossary{name={$\mathcal{U}$},
|
|
% description={The universal set},
|
|
% sort=U}{$\mathcal{U}$}
|
|
%\end{verbatim}
|
|
%If you want to use glossary entries in an equation, it is better
|
|
%to use \cmdname{ensuremath} instead of \verb|$|\ldots\verb'$'.
|
|
%For example:
|
|
%\begin{verbatim}
|
|
%\storeglosentry{Gamma}{name=\ensuremath{\Gamma(z)},
|
|
%description=Gamma function,
|
|
%sort=Gamma}
|
|
%\end{verbatim}
|
|
%You can then use this entry in either text or math mode:
|
|
%\begin{verbatim}
|
|
%The \useGlosentry{Gamma}{Gamma function} is defined as
|
|
%\begin{equation}
|
|
%\gls{Gamma} = \int_{0}^{\infty}e^{-t}t^{z-1}\,dt
|
|
%\end{equation}
|
|
%\end{verbatim}
|
|
%If you are using hyper links, and you want to use
|
|
%\cmdname{useGlosentry} within math mode, you must use
|
|
%\cmdname{ensuremath}:
|
|
%\begin{verbatim}
|
|
%\begin{equation}
|
|
%\useGlosentry{Gamma}{\ensuremath{\Gamma(x+1)}} = x\Gamma(x)
|
|
%\end{equation}
|
|
%\end{verbatim}
|
|
%
|
|
%The optional argument to \icmdname{storeglosentry} (\meta{gls-type})
|
|
%indicates the glossary type (see
|
|
%\autoref{sec:newglostype} to find out how to define new
|
|
%glossary types). If omitted, the standard glossary is used.
|
|
%
|
|
%The optional argument to \icmdname{useglosentry},
|
|
%\icmdname{useGlosentry} and \icmdname{gls} (\meta{opt}) allows you to
|
|
%add additional information to the glossary entry, for example:
|
|
%\begin{verbatim}
|
|
%\useglosentry[format=textbf]{glos:U}
|
|
%\end{verbatim}
|
|
%is equivalent to:
|
|
%\begin{verbatim}
|
|
%\glossary{name={$\mathcal{U}$},
|
|
% description={The universal set},
|
|
% sort=U,
|
|
% format=textbf}
|
|
%\end{verbatim}
|
|
%Since version 2.4, \icmdname{storeglosentry} is robust, and
|
|
%\cmdname{protect} should no longer be needed, however
|
|
%the identifying label, \meta{label}, should not
|
|
%contain any special characters.
|
|
%
|
|
%As from version 2.36, if you want to use all glossary entries
|
|
%which have been defined using \cmdname{storeglosentry}, do:
|
|
%\verb|\useglosentry{*}|. (Note that this option is not
|
|
%available for \cmdname{useGlosentry} and \cmdname{gls}.)
|
|
%
|
|
%\section{makeglos.pl}
|
|
%
|
|
%Whenever a glossary entry is used, either explicity using
|
|
%\cmdname{glossary} or \cmdname{xglossary} or implicitly using
|
|
%\cmdname{useglosentry}, \cmdname{useGlosentry} and \cmdname{gls},
|
|
%the information is saved in a file with the extension \filetype{glo}
|
|
%(unless the \icmdname{makeglossary} command is omitted, in which case
|
|
%the glossary information is simply ignored.) A \appname{makeindex}
|
|
%style file\index{makeindex style file (.ist)|see{file types, ist}}
|
|
%(\filetype{ist}) is also created, which is customized for the
|
|
%document, and can be passed to \appname{makeindex}.
|
|
%
|
|
%For example, suppose your document is called \texttt{mydoc.tex},
|
|
%the glossary will be saved in the file
|
|
%\texttt{mydoc.}\filetype{glo}, and the \appname{makeindex} style
|
|
%file \texttt{mydoc.}\filetype{ist} will be created.
|
|
% These files can then be passed to \appname{makeindex} as follows:
|
|
%\begin{verbatim}
|
|
%makeindex -s mydoc.ist -t mydoc.glg -o mydoc.gls mydoc.glo
|
|
%\end{verbatim}
|
|
%which generates the output file \texttt{mydoc.}\filetype{gls},
|
|
%with transcript written to
|
|
%\texttt{mydoc.}\filetype{glg}.
|
|
%
|
|
%The Perl script \appname{makeglos.pl} provided with this package
|
|
%allows you to use \appname{makeindex} without having to remember
|
|
%all the command line options. The command
|
|
%\begin{verbatim}
|
|
%makeglos.pl mydoc
|
|
%\end{verbatim}
|
|
%will perform the command:
|
|
%\begin{verbatim}
|
|
%makeindex -s mydoc.ist -t mydoc.glg -o mydoc.gls mydoc.glo
|
|
%\end{verbatim}
|
|
%In addition, \appname{makeglos.pl} also takes the option
|
|
%\texttt{-m} which can be used to collate entries where the
|
|
%same name has multiple descriptions.
|
|
%\changes{2.14}{2005 May 28}{makeglos -m switch added}
|
|
%
|
|
%\appname{makeglos.pl} has the following syntax:
|
|
%\begin{verbatim}
|
|
%makeglos.pl [-ilqrgm] [-s sty] [-o gls] [-t log] [-p num] <filename>
|
|
%\end{verbatim}
|
|
%where all switches, apart from \texttt{-m} are the same as
|
|
%those for \appname{makeindex}. If there are multiple glossary types
|
|
%(see
|
|
%\autoref{sec:newglostype}) and the file extension is omitted, \appname{makeglos.pl} will
|
|
%iterate through each glossary type (it will pick up the relevant
|
|
%information from the auxiliary file).
|
|
%
|
|
%The name of the \filetype{ist} file can be changed by redefining
|
|
%the command \cmdname{istfilename}\DescribeMacro{\istfilename}
|
|
%\emph{before} \cmdname{makeglossary}.
|
|
%For example:
|
|
%\begin{verbatim}
|
|
%\renewcommand{\istfilename}{foo.ist}
|
|
%\makeglossary
|
|
%\end{verbatim}
|
|
%Only one \filetype{ist} file will be created per document, even if
|
|
%you have multiple glossaries with different styles. The only
|
|
%circumstance where you will need multiple \filetype{ist} files for
|
|
%a single document is when you have multiple glossaries that use
|
|
%different counters with different compositors, but this is rarely
|
|
%likely to occur.
|
|
%
|
|
%Creation of the \filetype{ist} file can be suppressed by issuing
|
|
%the command \cmdname{noist}\DescribeMacro{\noist}\ before
|
|
%\icmdname{makeglossary}. It will also be suppressed when the
|
|
%command \icmdname{nofiles} is used, or if the command
|
|
%\icmdname{makeglossary} is omitted.
|
|
%
|
|
%It should be noted that there are a few packages that can
|
|
%cause problems with the creation of the \filetype{ist} file,
|
|
%for example \styname{ngerman}. If you encounter problems
|
|
%when \LaTeX\ is processing the \icmdname{makeglossary} command,
|
|
%or if you get errors from \appname{makeindex} complaining about
|
|
%the style file, this is the most probable cause.
|
|
%See \autoref{sec:trouble}, item~\ref{itm:ngerman} for
|
|
%information on how to fix this.
|
|
%
|
|
%\section{Displaying the Glossary}
|
|
%
|
|
% Once the \filetype{gls} file has been created by
|
|
%\appname{makeindex} (as described in the previous
|
|
% section) the glossary can then be included in the document with
|
|
%the command \cmdname{printglossary}\DescribeMacro{\printglossary}.
|
|
% If chapters are defined, the glossary will start
|
|
%with\SpecialMainIndex{glossaryname}
|
|
%\begin{verbatim}
|
|
%\chapter*{\glossaryname}
|
|
%\end{verbatim}
|
|
%If not, it will start with
|
|
%\begin{verbatim}
|
|
%\section*{\glossaryname}
|
|
%\end{verbatim}
|
|
%The format of the main body of the glossary depends on the
|
|
%options passed to the package.
|
|
%
|
|
%\section{Package Options}
|
|
%\label{sec:options}
|
|
%
|
|
%The package options must be specified as a comma-separated list
|
|
%of \meta{key}=\meta{value} pairs. Available options are:
|
|
%\begin{description}
|
|
%\item[\pkgopt{style}] The glossary style. Values:
|
|
%\index{glossary style|see{package options, style}}
|
|
%\begin{description}
|
|
%\item[\pkgoptval{list}{style}] use
|
|
%\envname{description} environment in the glossary
|
|
%\item[\pkgoptval{altlist}{style}] modified
|
|
%version of \pkgopt[list]{style}. The description starts on the
|
|
%line following the name of the term being defined.
|
|
%\changes{2.0}{2004 September 21}{Package option \texttt{altlist}
|
|
%style}
|
|
%\item[\pkgoptval{super}{style}] use
|
|
%\envname{supertabular} environment in the glossary
|
|
%\item[\pkgoptval{long}{style}] use
|
|
%\envname{longtable} environment in the glossary (Default)
|
|
%\end{description}
|
|
%
|
|
%\item[\pkgopt{header}]\index{glossary header|see{package options, header}} Glossary
|
|
%header. Values:
|
|
%\begin{description}
|
|
%\item[\pkgoptval{none}{header}] The glossary
|
|
%doesn't have a heading (Default)
|
|
%\item[\pkgoptval{plain}{header}] The glossary
|
|
%has a heading
|
|
%\end{description}
|
|
%
|
|
%\item[\pkgopt{border}]\index{glossary border|see{package options, border}} Glossary
|
|
%border. Values:
|
|
%\begin{description}
|
|
%\item[\pkgoptval{none}{border}] The glossary
|
|
%doesn't have a border (Default)
|
|
%\item[\pkgoptval{plain}{border}] Border
|
|
%around the main body of the glossary
|
|
%\end{description}
|
|
%
|
|
%\item[\pkgopt{cols}]\index{glossary columns|see{package options, cols}} Number of
|
|
%columns. Values:
|
|
%\begin{description}
|
|
%\item[\pkgoptval{2}{cols}] The entry name and description are in two separate
|
|
%columns with the associated page numbers in the same column as
|
|
%the description. (Default)
|
|
%\item[\pkgoptval{3}{cols}] The entry name, description and associated page numbers
|
|
%are in three separate columns.
|
|
%\end{description}
|
|
%
|
|
% \changes{1.1}{2004 August 14}{Package option \texttt{number}}
|
|
% \changes{2.4}{2006 July 20}{Package option \texttt{number} modified
|
|
%so that any counter can be used}
|
|
%\item[\pkgopt{number}]
|
|
% Associated number corresponding to each entry.
|
|
%This may either be the keyword \pkgoptval{none}, indicating that
|
|
%the corresponding numbers should be suppressed, or it can be the
|
|
%name of a \LaTeX\ counter. The default is \pkgopt[page]{number}.
|
|
%
|
|
%\item[\pkgopt{toc}]\index{table of contents, adding to|see{package options, toc}}
|
|
%Boolean variable:
|
|
%\changes{2.0}{2004 September 21}{Package option \texttt{toc}}
|
|
%\begin{description}
|
|
%\item[\pkgoptval{true}{toc}] Add glossary to table of contents
|
|
%\item[\pkgoptval{false}{toc}] Omit glossary from table of contents (Default)
|
|
%\end{description}
|
|
%Note that if you specify this option, you will need to run
|
|
%\LaTeX\ twice after generating the glossary.
|
|
%
|
|
%\item[\pkgopt{hypertoc}]
|
|
%Boolean variable. This is similar to the package option
|
|
%\pkgopt{toc}, but if you are using the \styname{hyperref}
|
|
%package, \pkgopt{hypertoc} will generate a link to the
|
|
%point immediately before the glossary title, whereas \pkgopt{toc} will
|
|
%have a hyperlink to just after the glossary title. Note
|
|
%that you can not use both \pkgopt[true]{toc} and
|
|
%\pkgopt[true]{hypertoc}. Default value:
|
|
%\pkgopt[false]{hypertoc}.
|
|
%\changes{2.24}{2005 September 27}{Package option \texttt{hypertoc}}
|
|
%
|
|
%\item[\pkgopt{hyper}] Boolean
|
|
%variable:
|
|
%\changes{2.0}{2004 September 21}{Package option \texttt{hyper}}
|
|
%\begin{description}
|
|
%\item[\pkgoptval{true}{hyper}] Make associated numbers in the
|
|
%glossary a hypertext link, and also make acronyms, and the text
|
|
%given by \icmdname{xglossary} have a hyperlink to their
|
|
%corresponding entries in the glossary.
|
|
%\item[\pkgoptval{false}{hyper}] Don't make associated numbers a hypertext link
|
|
%\end{description}
|
|
%If the \styname{hyperref} or \styname{html} package has
|
|
%been loaded prior to loading \texttt{glossary.sty},
|
|
%\pkgopt[true]{hyper} is set, otherwise
|
|
%the default is \pkgopt[false]{hyper}. Note that this package
|
|
%option now encompasses the old \pkgopt{hyperacronym} option.
|
|
%
|
|
%\item[\pkgopt{section}] Boolean variable:
|
|
%\changes{2.12}{2004 November 1}{Package option \texttt{section}}
|
|
%\begin{description}
|
|
%\item[\pkgoptval{true}{section}] Make the glossary an unnumbered
|
|
%section, even if chapters are defined%
|
|
%
|
|
%\item[\pkgoptval{false}{section}] Only make glossary an
|
|
%unnumbered section if chapters are not defined (default).
|
|
%\end{description}
|
|
%
|
|
%\item[\pkgopt{acronym}] Boolean variable:
|
|
%\changes{2.17}{2005 June 28}{Package option \texttt{acronym}}
|
|
%\begin{description}
|
|
%\item[\pkgoptval{true}{acronym}] Make the list of acronyms
|
|
%separate from the main glossary.
|
|
%
|
|
%\item[\pkgoptval{false}{acronym}] The acronyms will all
|
|
%be placed in the main glossary. (Default)
|
|
%\end{description}
|
|
%
|
|
%\item[\pkgopt{global}] Boolean variable:
|
|
%\changes{2.31}{2005 December 5}{Package option \texttt{global}}
|
|
%\begin{description}
|
|
%\item[\pkgoptval{false}{global}] Acronym commands only have
|
|
%a local effect. (Default)
|
|
%\item[\pkgoptval{true}{global}] Acronym commands have a global
|
|
%effect.
|
|
%\end{description}
|
|
%\end{description}
|
|
% The \pkgopt{border}, \pkgopt{header} and \pkgopt{cols} options
|
|
%should not be used in conjunction with \pkgopt[list]{style}
|
|
%or \pkgopt[altlist]{style}, as they only make sense with one of
|
|
%the tabular-style options.
|
|
%The value for the boolean variables can be omitted if they are
|
|
%to be set. For example
|
|
% \pkgopt{toc} is equivalent to \pkgopt[true]{toc}. Note that the
|
|
%\pkgoptval{altlist}{style} style is better suited to
|
|
%glossaries with long entry names.
|
|
%
|
|
%You can set up your own preferred defaults in a configuration
|
|
%file%
|
|
%\index{glossary.cfg|see{file type, cfg}}.
|
|
%The file must be called \texttt{glossary.}\filetype{cfg} and
|
|
%should be placed somewhere on the \TeX\ path. In this file you
|
|
%can use the command \DescribeMacro{\glossarypackageoptions}%
|
|
%\noindent
|
|
%\cmdname{glossarypackageoptions}\verb'{'\meta{option-list}\verb/}/
|
|
%\noindent
|
|
%where \meta{option-list} is a comma-separated list of
|
|
%\meta{key}=\meta{value} pairs, as passed to the
|
|
%\styname{glossary}
|
|
%package. Note that this command may only be used in the
|
|
%configuration file.
|
|
%
|
|
%\subsection{Examples}
|
|
% Suppose the document has the following \icmdname{glossary}
|
|
%commands:
|
|
%\begin{center}\ttfamily
|
|
%\begin{tabular}{@{\rmfamily}ll@{}l}
|
|
%\bfseries Page & \multicolumn{2}{c}{\bfseries\rmfamily Command}\\
|
|
%1 & \cmdname{glossary}\{&name=diagonal matrix,\\
|
|
% & &description=Matrix whose only non-zero\\
|
|
% & &entries are along the leading diagonal\}\\
|
|
%2 & \cmdname{glossary}\{&name=identity matrix,\\
|
|
% & &description=Diagonal matrix with 1s along the \\
|
|
% & &leading diagonal\}\\
|
|
%4 & \cmdname{glossary}\{&name=singular matrix,\\
|
|
% & &description=Matrix with zero determinant\}
|
|
%\end{tabular}
|
|
%\end{center}
|
|
%
|
|
%\noindent Variations:
|
|
%\begin{enumerate}
|
|
%\item If \pkgopt[list]{style} is chosen, the glossary will look like:
|
|
%\begin{description}
|
|
%\item[diagonal matrix] Matrix whose only non-zero entries are along the leading
|
|
% diagonal, 1
|
|
%\item[identity matrix] Diagonal matrix with 1s along the leading diagonal, 2
|
|
%\item[singular matrix] Matrix with zero determinant, 4
|
|
%\end{description}
|
|
%
|
|
%\item If \pkgopt[altlist]{style} is chosen, the glossary will look like:
|
|
%\begin{description}
|
|
%\item[diagonal matrix]\mbox{}\par Matrix whose only non-zero entries are along the leading
|
|
% diagonal, 1
|
|
%\item[identity matrix]\mbox{}\par Diagonal matrix with 1s along the leading diagonal, 2
|
|
%\item[singular matrix]\mbox{}\par Matrix with zero determinant, 4
|
|
%\end{description}
|
|
%
|
|
%\item If \pkgopt[list]{style},\pkgopt[none]{number}%
|
|
% is chosen, the glossary will look like:
|
|
%\begin{description}
|
|
%\item[diagonal matrix] Matrix whose only non-zero entries are along the leading
|
|
% diagonal
|
|
%\item[identity matrix] Diagonal matrix with 1s along the leading diagonal
|
|
%\item[singular matrix] Matrix with zero determinant
|
|
%\end{description}
|
|
%
|
|
%\item If \pkgopt[long]{style},\pkgopt[none]{border},%
|
|
%\pkgopt[none]{header},\pkgopt[page]{number}
|
|
%is chosen (default), the glossary will look like:\\[10pt]
|
|
%\newlength{\descriptionwidth}\setlength{\descriptionwidth}{0.6\textwidth}
|
|
%\begin{tabular}{@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}} &
|
|
%\\ diagonal matrix & Matrix whose only non-zero entries are along the leading
|
|
% diagonal, 1
|
|
%\\ &
|
|
%\\identity matrix & Diagonal matrix with 1s along the leading diagonal, 2
|
|
%\\ &
|
|
%\\ singular matrix & Matrix with zero determinant, 4
|
|
%\end{tabular}
|
|
%
|
|
%\item If \pkgopt[long]{style},\pkgopt[plain]{border},%
|
|
%\pkgopt[none]{header} is chosen,
|
|
%the glossary will look like:
|
|
%\\[10pt]
|
|
%\begin{tabular}{|@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}|}\hline &
|
|
%\\ diagonal matrix & Matrix whose only non-zero entries are along the leading
|
|
% diagonal, 1
|
|
%\\ &
|
|
%\\identity matrix & Diagonal matrix with 1s along the leading diagonal, 2
|
|
%\\ &
|
|
%\\ singular matrix & Matrix with zero determinant, 4
|
|
%\\ & \\\hline
|
|
%\end{tabular}
|
|
%
|
|
%\item If \pkgopt[long]{style},\pkgopt[plain]{border},%
|
|
%\pkgopt[plain]{header} is
|
|
%chosen, the glossary will look like:
|
|
%\\[10pt]
|
|
%\begin{tabular}{|@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}|}\hline
|
|
%\bfseries Notation & \bfseries Description\\\hline\hline &
|
|
%\\ diagonal matrix & Matrix whose only non-zero entries are along the leading
|
|
% diagonal, 1
|
|
%\\ &
|
|
%\\identity matrix & Diagonal matrix with 1s along the leading diagonal, 2
|
|
%\\ &
|
|
%\\ singular matrix & Matrix with zero determinant, 4
|
|
%\\ & \\\hline
|
|
%\end{tabular}
|
|
%
|
|
%\item If \pkgopt[long]{style},\pkgopt[none]{border},%
|
|
%\pkgopt[plain]{header},\pkgopt[3]{cols} is chosen, the
|
|
%glossary will look like:
|
|
%\\[10pt]
|
|
%\begin{tabular}{@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}l}
|
|
%\bfseries Notation & \bfseries Description & \\ &
|
|
%\\ diagonal matrix & Matrix whose only non-zero entries are along the leading
|
|
% diagonal & 1
|
|
%\\ &
|
|
%\\identity matrix & Diagonal matrix with 1s along the leading diagonal & 2
|
|
%\\ &
|
|
%\\ singular matrix & Matrix with zero determinant & 4
|
|
%\\ & \\
|
|
%\end{tabular}
|
|
%\end{enumerate}
|
|
%
|
|
%
|
|
%\section{Defining New Glossary Types}
|
|
%\label{sec:newglostype}
|
|
%
|
|
%A new type of glossary can be defined using the command:\DescribeMacro{\newglossarytype}\\[5pt]
|
|
%\cmdname{newglossarytype}\verb/[/\meta{log-ext}\verb"]{"\meta{name}\verb'}{'\meta{out-ext}\verb+}{+\meta{in-ext}\verb!}[!\meta{style list}\verb-]-\\[5pt]
|
|
%For example, suppose you want your document to have a separate
|
|
%index of terms and index of notation,
|
|
%you could use \icmdname{makeglossary}, \icmdname{glossary},
|
|
%\icmdname{xglossary} and \icmdname{printglossary} for the first
|
|
%glossary, and define a new type of glossary called say,
|
|
%\texttt{notation}, using
|
|
%\begin{verbatim}
|
|
%\newglossarytype[nlg]{notation}{not}{ntn}
|
|
%\end{verbatim}
|
|
%which will create the analogous commands:
|
|
%\cmdname{makenotation}, \cmdname{notation}, \cmdname{xnotation}
|
|
%and \cmdname{printnotation} which can be used for the second
|
|
%glossary.
|
|
%
|
|
%\changes{2.3}{2005 Nov 18}{Added extra optional argument to 'newglosarytype}
|
|
%As from version 2.3, \cmdname{newglossarytype} now has an
|
|
%additional optional argument \meta{style list}. This should
|
|
%be a comma separated list of \meta{key}=\meta{value} pairs
|
|
%that can be used to specify the style of the new glossary.
|
|
%If omitted, the new glossary will have the same format
|
|
%as the main glossary. The following options are available:
|
|
%\texttt{number}, \texttt{style}, \texttt{header}, \texttt{border} and
|
|
%\texttt{cols}. These can take the same values as those
|
|
%given in the package options (described in section~\ref{sec:options}).
|
|
%
|
|
%The command \cmdname{newglossarytype} should only occur in the
|
|
%preamble. The new commands
|
|
% \cmdname{make}\meta{name}, \verb'\'\meta{name},
|
|
%\verb'\x'\meta{name} and \cmdname{print}\meta{name} all have the
|
|
%same format as their ``glossary'' counter-parts.
|
|
%
|
|
%The glossary information will be saved to a file
|
|
%with the extension given by \meta{out-ext} (analogous to
|
|
%\filetype{glo}), which can then be passed to \appname{makeindex}
|
|
%either directly or via \appname{makeglos.pl},
|
|
%and the file to be read in (i.e.\ the file created by
|
|
%\appname{makeindex}) will have the extension \meta{in-ext}
|
|
%(analogous to \filetype{gls}).
|
|
%
|
|
%The optional argument \meta{log-ext} indicates
|
|
%the extension for the \appname{makeindex} log file, if omitted the
|
|
%extension \filetype{glg} is used. This is not used by \LaTeX,
|
|
%however \appname{makeglos.pl} reads in this information from
|
|
%the \LaTeX\ auxiliary file and passes it to \appname{makeindex}.\changes{2.22}{2005 Sept 12}{changed makeglos to read information in from .aux instead of .log file}
|
|
%
|
|
%For the above \texttt{notation}
|
|
%example, if your document is called, say, \texttt{mydoc.tex},
|
|
% you will need to do the following:
|
|
%\begin{verbatim}
|
|
%latex mydoc
|
|
%makeglos.pl mydoc
|
|
%latex mydoc
|
|
%\end{verbatim}
|
|
%(You may need to do an extra \verb"latex mydoc" to get
|
|
%cross-references up-to-date.) Note that if you don't specify the
|
|
%file extension when using \appname{makeglos.pl}, it will
|
|
%check the transcript file from the \LaTeX\ run to determine
|
|
%all the glossary types, so, for this example,
|
|
%\begin{verbatim}
|
|
%makeglos.pl mydoc
|
|
%\end{verbatim}
|
|
%is equivalent to:
|
|
%\begin{verbatim}
|
|
%makeglos.pl mydoc.glo
|
|
%makeglos.pl mydoc.not
|
|
%\end{verbatim}
|
|
%since \appname{makeglos.pl} has read in the information
|
|
%for the \texttt{notation} glossary type from the file
|
|
%\texttt{mydoc.log}.
|
|
%
|
|
%If you don't have Perl installed
|
|
%on your system, or for any other reason are unable to use
|
|
%\appname{makeglos.pl}, you can call \appname{makeindex}
|
|
%explicitly:
|
|
%\begin{verbatim}
|
|
%latex mydoc
|
|
%makeindex -s mydoc.ist -t mydoc.glg -o mydoc.gls mydoc.glo
|
|
%makeindex -s mydoc.ist -t mydoc.nlg -o mydoc.ntn mydoc.not
|
|
%latex mydoc
|
|
%\end{verbatim}
|
|
%
|
|
%Note that you can use the command
|
|
%\icmdname{printglossary}\texttt[\meta{name}\texttt]
|
|
%instead of \verb'\print'\meta{name}.
|
|
%These two commands have the same effect when using \LaTeX,
|
|
%however, they have a slightly different effect when
|
|
%using \LaTeX2HTML (see \autoref{sec:l2h}).
|
|
%
|
|
%If the command \verb'\'\meta{glossary-type}\verb"name"
|
|
%is defined, (e.g.\ \verb'\notationname' in the above example)
|
|
%this will be used as the title for the specified
|
|
%glossary. If this command is not defined, \icmdname{glossaryname}
|
|
%will be used instead.
|
|
%If the command \verb'\short'\meta{glossary-type}\verb"name"
|
|
%is defined, (e.g.\ \cmdname{shortnotationname} in the above
|
|
%example) this will be used for the table of contents
|
|
%entry, otherwise \verb'\'\meta{glossary-type}\verb"name" will
|
|
%be used instead.
|
|
%For example:
|
|
%\begin{verbatim}
|
|
%\newglossarytype[nlg]{notation}{not}{ntn}
|
|
%\newcommand{\notationname}{Index of Notation}
|
|
%\newcommand{\shortnotationname}{Notation}
|
|
%\end{verbatim}
|
|
%
|
|
%\section{Acronyms}
|
|
%
|
|
%\changes{2.0}{2004 September 21}{Acronyms}
|
|
%The \styname{glossary} package provides the command\DescribeMacro{\newacronym}:\\[5pt]
|
|
%\begin{ttfamily}
|
|
%\cmdname{newacronym}[\textrm{\meta{cmd-name}}]\{\textrm{\meta{acronym}}\}\{\textrm{\meta{long}}\}\{\textrm{\meta{glossary entry}}\}
|
|
%\end{ttfamily}\\[5pt]
|
|
%which can be used to define acronyms. The argument \meta{long}
|
|
%is the full name, the argument \meta{acronym} is the acronym for
|
|
%\meta{long} and \meta{glossary entry} is the glossary information
|
|
%in the form used by the \icmdname{glossary} command. If the
|
|
%optional argument \meta{cmd-name} is missing,
|
|
%\cmdname{newacronym} will create a command called
|
|
%\verb!\!\meta{acronym}, otherwise it will create a command
|
|
%called \verb'\'\meta{cmd-name} (henceforth denoted \cmdname{}\meta{acr-name}).
|
|
%This command can then be used throughout the text. The first
|
|
%instance of this command is equivalent to:\\[10pt]
|
|
%\meta{long} \texttt(\icmdname{xacronym}\verb"{"\gloskey{name}\texttt{=}\meta{long} \texttt(\meta{acronym}\texttt{),}\meta{glossary entry}\verb'}{'\meta{acronym}\verb/}/\texttt)\\[10pt]
|
|
%subsequent instances will be equivalent to:\\[10pt]
|
|
%\icmdname{xacronym}\verb"{"\gloskey{name}\texttt{=}\meta{long} \texttt(\meta{acronym}\texttt{),}\meta{glossary entry}\verb'}{'\meta{acronym}\verb/}/\\[10pt]
|
|
%The command \cmdname{}\meta{acr-name} also has a starred
|
|
%version, which will make the first letter of \meta{long}
|
|
%uppercase (for use at the start of a sentence).
|
|
%
|
|
%Note that if you want to change the format of the acronym,
|
|
%for example, if you want the acronym to appear in small caps,
|
|
%you will need to not only use the optional argument, but you
|
|
%will also need to use the \gloskey{sort} key, otherwise you
|
|
%will get an error. For example:
|
|
%\begin{verbatim}
|
|
%\newacronym[SVM]{\textsc{svm}}{Support Vector Machine}%
|
|
%{description=Statistical pattern recognition
|
|
%technique,sort=svm}
|
|
%\end{verbatim}
|
|
%
|
|
%If the package option \pkgopt{acronym} is not set (default)
|
|
%\icmdname{xacronym}, is a synonym for \icmdname{xglossary}, and
|
|
%the acronyms will appear in the main glossary (remember to
|
|
%specify \cmdname{makeglossary} and \cmdname{printglossary}).
|
|
%If the package option \pkgopt[true]{acronym} is specified, a
|
|
%new glossary type called \texttt{acronym} will be defined as:
|
|
%\begin{verbatim}
|
|
%\newglossarytype[alg]{acronym}{acr}{acn}
|
|
%\providecommand{\acronymname}{List of Acronyms}
|
|
%\end{verbatim}
|
|
%You will then need to use the commands \icmdname{makeacronym}
|
|
%and \icmdname{printacronym} to make the list of acronyms appear.
|
|
%You will also need to run the \filetype{acr} file through
|
|
%\appname{makeindex} (or \appname{makeglos.pl}). For example:
|
|
%\begin{verbatim}
|
|
%makeindex -s mydoc.ist -t mydoc.alg -o mydoc.acn mydoc.acr
|
|
%\end{verbatim}
|
|
%alternatively:
|
|
%\begin{verbatim}
|
|
%makeglos.pl mydoc
|
|
%\end{verbatim}
|
|
%Note that the package option \pkgopt[true]{acronym} is only
|
|
%appropriate if you want both a glossary and a separate list of
|
|
%acronyms. If you do not write in English, you can set up your
|
|
%own language definition
|
|
%for \cmdname{acronymname} in the configuration file
|
|
%\texttt{glossary}\filetype{cfg}. For example:
|
|
%\begin{verbatim}
|
|
%\newcommand{\acronymname}{Akronyme}
|
|
%\end{verbatim}
|
|
%(If \texttt{glossary.cfg} does not exist, create a new file, add the
|
|
%appropriate definition of \cmdname{acronymname}, and save it to the
|
|
%same directory as \texttt{glossary.sty}.)
|
|
%
|
|
%\changes{2.1}{2004 October 25}{name field can be omitted in
|
|
%\texttt{'newacronym}}
|
|
%The \gloskey{name} key does not need to appear in \meta{glossary
|
|
%entry}, as it is constructed from \meta{long} and
|
|
%\meta{acronym}. By default this will be in the form:
|
|
%\meta{long} (\meta{acronym}), however the format can be
|
|
%overridden using the
|
|
%command:\DescribeMacro{\setacronymnamefmt}\\[10pt]
|
|
%\cmdname{setacronymnamefmt}\{\meta{format}\}\\[10pt]
|
|
%Within \meta{format} the following commands may
|
|
%be used to represent \meta{long} and \meta{acronym}:
|
|
%\DescribeMacro{\glolong}\icmdname{glolong} and
|
|
%\DescribeMacro{\gloshort}\icmdname{gloshort}. For example,
|
|
%suppose you just want the acronym to appear in the glossary entry,
|
|
%and not its full length name, then you would need to do:
|
|
%\begin{verbatim}
|
|
%\setacronymnamefmt{\gloshort}
|
|
%\end{verbatim}
|
|
%
|
|
%\changes{2.32}{2006 January 5}{added \texttt{'setacronymdescfmt}}
|
|
%As from version 2.32, you can also modify the way the description
|
|
%key is formatted for acronyms using\DescribeMacro{\setacronymdescfmt}:\\[10pt]
|
|
%\cmdname{setacronymdescfmt}\{\meta{format}\}\\[10pt]
|
|
%Within \meta{format} you may use the commands \icmdname{glolong}
|
|
%and \icmdname{gloshort} (as above), and you can also use
|
|
%the command \icmdname{glodesc} which is the description as
|
|
%specified by the \gloskey{description} key in
|
|
%\icmdname{newacronym}. This means that if you are using
|
|
%a tabular style glossary, you can have the abbreviated
|
|
%form in one column and the long form in the second column
|
|
%with the description. For example, the following:
|
|
%\begin{verbatim}
|
|
%\setacronymnamefmt{\gloshort}
|
|
%\setacronymdescfmt{\glolong: \glodesc}
|
|
%\newacronym{svm}{support vector machine}{description=Statistical
|
|
%pattern recognition technique}
|
|
%\end{verbatim}
|
|
%will generate a glossary entry of the form:
|
|
%\begin{verbatim}
|
|
%\glossary{name=svm,description=support vector machine: Statistical
|
|
%pattern recognition technique}
|
|
%\end{verbatim}
|
|
%Note that if you omit \icmdname{glodesc} from
|
|
%\cmdname{setacronymdescfmt} the description specified
|
|
%in \cmdname{newacronym} will be ignored. So
|
|
%\begin{verbatim}
|
|
%\setacronymnamefmt{\gloshort}
|
|
%\setacronymdescfmt{\glolong}
|
|
%\newacronym{svm}{support vector machine}{description=Statistical
|
|
%pattern recognition technique}
|
|
%\end{verbatim}
|
|
%will generate a glossary entry of the form:
|
|
%\begin{verbatim}
|
|
%\glossary{name=svm,description=support vector machine}
|
|
%\end{verbatim}
|
|
%
|
|
%You will need to specify the \gloskey{name} key explicitly if
|
|
%the name contains a \appname{makeindex} special character.
|
|
%For example:
|
|
%\begin{verbatim}
|
|
%\newacronym{RNA}{Ribonukleins\"aure}{name={Ribonukleins\""aure (RNA)}}
|
|
%\end{verbatim}
|
|
%Note that this will override any formatting specified by
|
|
%\icmdname{setacronymnamefmt}.
|
|
%
|
|
%Given an acronym named \meta{acr-name} (the command name
|
|
%associated with the acronym as defined in
|
|
%\cmdname{newacronym} without the preceding backslash),
|
|
%the following commands are also available:
|
|
%
|
|
%\vspace{10pt}
|
|
%\changes{2.11}{2004 October 25}{\texttt{'useacronym}}
|
|
%\changes{2.18}{2005 July 5}{Fixed bug in 'useacronym}
|
|
%\changes{2.26}{2005 November 17}{Fixed bug in 'useacronym}
|
|
%\noindent
|
|
%\cmdname{useacronym}\verb"["\meta{insert}\verb']{'\meta{acr-name}\verb!}!\DescribeMacro{\useacronym}\\[5pt]
|
|
%This command can be used instead of \cmdname{}\meta{acr-name}.
|
|
%\cmdname{useacronym} also has a starred version equivalent to
|
|
%\cmdname{}\meta{acr-name}\texttt{*}.
|
|
%The optional argument \meta{insert} allows you to insert text
|
|
%after \meta{long}, if this is the first occurrence of the
|
|
%acronym, or after the acronym on subsequent occurrences.
|
|
%
|
|
%\vspace{10pt}
|
|
%\changes{2.14}{2005 May 28}{'resetacronym added}\noindent
|
|
%\cmdname{resetacronym}\verb'{'\meta{acr-name}\verb"}"
|
|
%\DescribeMacro{\resetacronym}\\[10pt]
|
|
%This command will cause the next use of \cmdname{}\meta{acr-name}
|
|
%to produce the long version. To reset all acronyms
|
|
%do \cmdname{resetallacronyms}.\DescribeMacro{\resetallacronyms}
|
|
%\changes{2.21}{2005 July 27}{'resetallacronyms added}
|
|
%
|
|
%\vspace{10pt}
|
|
%\changes{2.31}{2005 December 5}{'unsetacronym added}\noindent
|
|
%\cmdname{unsetacronym}\verb'{'\meta{acr-name}\verb"}"
|
|
%\DescribeMacro{\unsetacronym}\\[10pt]
|
|
%This command will cause all subsequent uses of
|
|
%\cmdname{}\meta{acr-name} to produce the short version.
|
|
%To unset all acronyms
|
|
%do \cmdname{unsetallacronyms}.\DescribeMacro{\unsetallacronyms}
|
|
%\changes{2.31}{2005 December 5}{'unsetallacronyms added}
|
|
%
|
|
%\vspace{10pt}
|
|
%\changes{2.14}{2005 May 28}{'ifacronymfirstuse added}\noindent
|
|
%\cmdname{ifacronymfirstuse}%
|
|
%\verb'{'\meta{acr-name}%
|
|
%\verb'}{'\meta{true text}\verb"}{"\meta{false text}\verb!}!
|
|
%\DescribeMacro{\ifacronymfirstuse}\\[10pt]
|
|
%This will test if the acronym has been used yet. If it has been
|
|
%used, \meta{true text} will be implemented, otherwise
|
|
%\meta{false text} will be implemented.
|
|
%
|
|
%The long and short forms of an acronym can be produced explicitly
|
|
%without a corresponding glossary entry, using the commands:\\[10pt]
|
|
%\changes{2.19}{2005 July 8}{'acrln added}%
|
|
%\cmdname{acrln}\verb'{'\meta{acr-name}\verb/}/\DescribeMacro{\acrln}\\
|
|
%\cmdname{acrsh}\verb'{'\meta{acr-name}\verb/}/\DescribeMacro{\acrsh}
|
|
%\changes{2.19}{2005 July 8}{'acrsh added}\\[10pt]
|
|
%Or, alternatively:\\[10pt]
|
|
%\cmdname{}\meta{acr-name}\texttt{long}\\
|
|
%\cmdname{}\meta{acr-name}\texttt{short}\\[10pt]
|
|
%The first two commands (\cmdname{acrln} and \cmdname{acrsh})
|
|
%have a starred form that makes the first letter uppercase.
|
|
%The other two commands, simply contain \meta{long} and
|
|
%\meta{acronym}.
|
|
%
|
|
%Note that since these four commands do not generate glossary
|
|
%entries they will therefore not contain any hyperlinks, even if
|
|
%you have specified the \pkgopt{hyper} package option. They are
|
|
%provided for use in situations where the associated glossary
|
|
%command may cause problems (e.g.\ in a sectioning command.)
|
|
%
|
|
%Note that, as with all \LaTeX\ commands, spaces following
|
|
%command names are ignored so if, for example, you defined
|
|
%a new acronym called, say, SVM, then the command \verb/\SVM/ will
|
|
%ignore any spaces following it. To force a space, you
|
|
%can either place an empty set of braces after the command
|
|
%name (e.g.\ \verb/\SVM{}/) or use
|
|
%\cmdname{\textvisiblespace} i.e.\ a backslash followed by
|
|
%a space (e.g.\ \verb/\SVM\ /). Alternatively, as from
|
|
%version 2.22, if you load the \styname{xspace} package
|
|
%before loading the \styname{glossary} package, spaces will
|
|
%be put in automatically using \icmdname{xspace}.
|
|
%\changes{2.22}{2005 Sept 16}{Added provision for 'xspace}
|
|
%\changes{2.23}{2005 Sept 17}{Fixed minor bug with hyperlinks and 'glsxspace}
|
|
%\changes{2.28}{2005 July 9}{Fixed erroneous spaces occuring while
|
|
%using xspace}
|
|
%
|
|
%\DescribeMacro{\acronymfont}
|
|
%\changes{2.22}{2005 Sept 12}{Added 'acronymfont}%
|
|
%If you want the acronym to appear in a particular font,
|
|
%for example, small caps, you can redefine the command
|
|
%\cmdname{acronymfont}. For example:
|
|
%\begin{verbatim}
|
|
%\renewcommand{\acronymfont}[1]{\textsc{#1}}
|
|
%\end{verbatim}
|
|
%The default definition of \cmdname{acronymfont} is:
|
|
%\begin{verbatim}
|
|
%\newcommand{\acronymfont}[1]{#1}
|
|
%\end{verbatim}
|
|
%
|
|
%\subsection{Examples}
|
|
%
|
|
%\begin{verbatim}
|
|
%\newacronym{SVM}{Support Vector Machine}{description=Statistical
|
|
%pattern recognition technique}
|
|
%\end{verbatim}
|
|
%This will define the command \cmdname{SVM}. The first time this
|
|
%command is used will display the text: Support Vector Machine
|
|
%(SVM). Subsequent use will simply display: SVM. The next
|
|
%example uses the optional argument \meta{cmd-name} since the
|
|
%acronym contains a non-alphabetical character:
|
|
%\begin{verbatim}
|
|
%\newacronym[KSVM]{K-SVM}{Kernel Support Vector
|
|
%Machine}{description=Statistical pattern recognition
|
|
%technique using the ``kernel trick''}
|
|
%\end{verbatim}
|
|
%This will define the command \cmdname{KSVM}. The first time
|
|
%this command is used will display the text: Kernel Support Vector
|
|
%Machine (K-SVM). Subsequent use will simply display: K-SVM.
|
|
%
|
|
%To test whether or not an acronym has been used:
|
|
%\begin{verbatim}
|
|
%\ifacronymfirstuse{SVM}{a}{an} \SVM\ is \ldots
|
|
%\end{verbatim}
|
|
%If the acronym has not been used, the following text will
|
|
%be produced:\\[10pt]
|
|
%a Support Vector Machine is \ldots\\[10pt]
|
|
%otherwise it will produce:\\[10pt]
|
|
%an SVM is \ldots\\[10pt]
|
|
%To expand the acronym a second time:
|
|
%\begin{verbatim}
|
|
%\chapter{An overview of the \protect\SVM}
|
|
%\resetacronym{SVM}
|
|
%The \SVM\ \ldots
|
|
%\end{verbatim}
|
|
%Note the use of \cmdname{protect} (see
|
|
%note~\ref{itm:fragile} on page~\pageref{itm:fragile}.) In fact, in this situation
|
|
%it would be better to do:
|
|
%\begin{verbatim}
|
|
%\chapter[An overview of the \SVMlong]{An overview of the \protect\SVM}
|
|
%\resetacronym{SVM}
|
|
%The \SVM\ \ldots
|
|
%\end{verbatim}
|
|
%
|
|
%Now suppose you want the text: support vector machine,
|
|
%instead of Support Vector Machine (i.e.\ you don't like the
|
|
%uppercase letters). You can define the acronym as follows:
|
|
%\begin{verbatim}
|
|
%\newacronym{SVM}{support vector machine}{description=Statistical
|
|
%pattern recognition technique}
|
|
%\end{verbatim}
|
|
%however, if the command \cmdname{SVM} occurs at the start of the
|
|
%sentence, you would clearly want the first letter as an
|
|
%uppercase letter. This can be done using \cmdname{SVM*} instead
|
|
%of \cmdname{SVM}. For example:
|
|
%\begin{verbatim}
|
|
%\SVM*\ techniques are widely used \ldots
|
|
%\end{verbatim}
|
|
%This will then come out as: Support vector machine (SVM)
|
|
%techniques are widely used \ldots (Assuming this is the first
|
|
%use of either \cmdname{SVM} or \cmdname{SVM*}.)
|
|
%
|
|
%Alternatively, \icmdname{useacronym}\verb'{SVM}' can be used instead of
|
|
%\cmdname{SVM}. For example:
|
|
%\begin{verbatim}
|
|
%\useacronym*[s]{SVM} are widely used in the area of pattern
|
|
%recognition.
|
|
%\end{verbatim}
|
|
%If this is the first use of the acronym SVM, it will produce the
|
|
%following text:\\[10pt]
|
|
%Support vector machines (SVM) are widely used in the area of
|
|
%pattern recognition.\\[10pt]
|
|
%If this is not the first use of this acronym, it will produce the
|
|
%following text:\\[10pt]
|
|
%SVMs are widely used in the area of pattern recognition.
|
|
%
|
|
%\section{Customizing the Glossary}
|
|
%The \styname{glossary} package provides commands which can be redefined to customize the
|
|
%glossary. The following name commands are defined by this package:
|
|
%\begin{center}\DescribeMacro{\glossaryname}\DescribeMacro{\entryname}\DescribeMacro{\descriptionname}\relax
|
|
%\begin{tabular}{ll}
|
|
%\bfseries Command & \bfseries Default Value\\
|
|
%\cmdname{glossaryname} & Glossary\\
|
|
%\cmdname{shortglossaryname} & \cmdname{glossaryname}\\
|
|
%\cmdname{entryname} & Notation\\
|
|
%\cmdname{descriptionname} & Description
|
|
%\end{tabular}
|
|
%\end{center}
|
|
%The commands \cmdname{entryname} and \cmdname{descriptionname}
|
|
%are put in the first two columns of the header row if you
|
|
%are using one of the tabular glossary styles together with a
|
|
%header row (as specified by the \pkgopt[true]{header} package option).
|
|
%If you are using \pkgopt[3]{cols}, the command
|
|
%\cmdname{glspageheader}\DescribeMacro{\glspageheader}\ will be
|
|
%put in the third column of the header row. By default, this command
|
|
%does nothing.\changes{2.4}{2006 July 20}{'glspageheader added}
|
|
%
|
|
%\changes{2.2}{2005 July 15}{'glossaryname now defined using 'providecommand instead of 'newcommand}
|
|
% \changes{2.15}{2005 June 5}{'shortglossaryname}
|
|
%\changes{2.16}{2005 June 8}{fixed bug preventing changes
|
|
%to 'glossaryname and 'shortglossaryname}
|
|
%\DescribeMacro{\shortglossaryname}
|
|
%The command \cmdname{shortglossaryname} is used for the
|
|
%page headers and table of contents entry.
|
|
% \changes{1.1}{2004 August 14}{'glossarypreamble}%
|
|
% \changes{1.1}{2004 August 14}{'glossarypostamble}%
|
|
%Any text required before or after the glossary can be added
|
|
%by redefining the commands \DescribeMacro{\glossarypreamble}\cmdname{glossarypreamble}
|
|
%and \DescribeMacro{\glossarypostamble}\cmdname{glossarypostamble}.
|
|
%For example.
|
|
%\begin{verbatim}
|
|
%\renewcommand{\glossarypreamble}{Page numbers in
|
|
%italic indicate the main definition\par}
|
|
%\end{verbatim}
|
|
%By default, \cmdname{glossarypreamble} and \cmdname{glossarypostamble} do nothing.
|
|
%
|
|
%\changes{2.3}{2005 Nov 18}{'glsbeforenum}%
|
|
%\changes{2.3}{2005 Nov 18}{'glsafternum}%
|
|
%Any text required before or after the list of page numbers
|
|
%are specified by the commands \cmdname{glsbeforenum}
|
|
%\DescribeMacro{\glsbeforenum}
|
|
%and \cmdname{glsafternum}\DescribeMacro{\glsafternum}.
|
|
%By default, these commands do nothing, any redefinition
|
|
%of these commands should come somewhere before the
|
|
%relevant \cmdname{printglossary} command. For example:
|
|
%\begin{verbatim}
|
|
%\printglossary
|
|
%\renewcommand{\glsbeforenum}{(}
|
|
%\renewcommand{\glsafternum}{)}
|
|
%\printnotation
|
|
%\end{verbatim}
|
|
%This will put the page number list in brackets for the
|
|
%second glossary, but not the first.
|
|
%
|
|
%Individual glossaries can have their styles changed either
|
|
%by setting the style in the final optional argument
|
|
%to \icmdname{newglossarystyle} (see
|
|
%\autoref{sec:newglostype}) or using the command\DescribeMacro{setglossarystyle}:\\[10pt]
|
|
%\cmdname{setglossarystyle}[\meta{type}]\{\meta{style list}\}\\[10pt]
|
|
%For example:
|
|
%\begin{verbatim}
|
|
%\setglossarystyle[acronym]{style=long,border=true,cols=2}
|
|
%\end{verbatim}
|
|
%If \meta{type} is omitted, the change is applied to the main
|
|
%glossary.
|
|
%
|
|
%\changes{1.1}{2004 August 14}{\relax Increased User Flexibility}%
|
|
%\changes{2.14}{2005 May 29}{'setglossary added}
|
|
%\DescribeMacro{\setglossary}
|
|
%The command \cmdname{setglossary}\verb'{'\meta{key-val list}\verb"}"
|
|
%can be used to modify some of the glossary settings. The argument
|
|
%\meta{key-val list} is a comma-separated list of
|
|
%\meta{key}=\meta{value} pairs. Available keys are:
|
|
%\begin{description}
|
|
%\item[\setglos{type}] This is the glossary type.
|
|
%If it is omitted, the standard glossary is assumed.
|
|
%
|
|
%\item[\setglos{glsnumformat}]
|
|
%\changes{1.1}{2004 August 14}{\texttt{'glsnumformat}}%
|
|
%This is the name of the command,
|
|
%\emph{without} the preceding backslash\footnote{Note, you should
|
|
%no longer try redefining the command \cmdname{glsnumformat}, as
|
|
%this now takes an optional argument, allowing for different
|
|
%glossary types}, to format the
|
|
%entry numbers. For example, to make all the entry numbers italic,
|
|
%do:
|
|
%\begin{verbatim}
|
|
%\setglossary{glsnumformat=textit}
|
|
%\end{verbatim}
|
|
%To suppress numbering altogether, you can do:
|
|
%\begin{verbatim}
|
|
%\setglossary{glsnumformat=ignore}
|
|
%\end{verbatim}
|
|
%
|
|
%\item[\setglos{glodelim}] This
|
|
%specifies what to do after the entry description and
|
|
%before the page numbers. The default value is a comma, unless the \pkgopt[3]{cols} option is specified,
|
|
%in which case it has the value \verb"&", or if
|
|
%\pkgopt[altlist]{style},
|
|
%in which case it is simply a space\footnote{This
|
|
%is because the \texttt{altlist} style is intended for use with long descriptions that will look better ending with a
|
|
% full stop which the user can add if desired.}. If the package option \pkgopt[none]{number} is
|
|
%specified, \setglos{glodelim} will have an empty value (unless
|
|
%\pkgopt[3]{cols} is specified,
|
|
%where, again, it will have the value \verb"&".)
|
|
%This setting corresponds to the \istkey{delim\_0} key in the
|
|
%\appname{makeindex} style file.
|
|
%
|
|
%Note that if you want a new line between the description
|
|
%and the list of page numbers you will need to use
|
|
%\cmdname{noexpand}. For example:
|
|
%\begin{verbatim}
|
|
%\setglossary{glodelim={\noexpand\newline}}
|
|
%\end{verbatim}
|
|
%
|
|
%\item[\setglos{delimN}]
|
|
%\changes{1.1}{2004 August 14}{\texttt{'delimN}}
|
|
%The delimiter to be inserted between two
|
|
%page numbers for the same entry. (This corresponds to the
|
|
%\istkey{delim\_n} key in the \appname{makeindex} style file.)
|
|
%By default, this has the value
|
|
%\texttt{,\textvisiblespace} (comma followed by a space). If the
|
|
%package option \pkgopt[none]{number} is chosen, the value is set
|
|
%to empty.
|
|
%
|
|
%\item[\setglos{delimR}]
|
|
%\changes{1.1}{2004 August 14}{'delimR}
|
|
%The delimiter to be inserted between the starting and ending page
|
|
%number range for the same entry. (This corresponds to the
|
|
%\istkey{delim\_r} key in the \appname{makeindex} style file.)
|
|
%By default, this has the value \verb"--". If the
|
|
%package option \pkgopt[none]{number} is chosen, the value is set
|
|
%to empty.
|
|
%
|
|
%\item[\setglos{gloskip}]
|
|
%\changes{2.3}{2005 Nov 18}{'gloskip}
|
|
%This specifies what to do between groups.
|
|
%If \pkgopt[list]{style} or \pkgopt[altlist]{style} this has the
|
|
%value \cmdname{indexspace}, otherwise it creates a blank row
|
|
% in the \envname{longtable} or \envname{supertabular} environment.
|
|
%This command corresponds to the \istkey{group\_skip} key in
|
|
%the \appname{makeindex} style file.
|
|
%Note that as from version 2.3, you should no longer redefine
|
|
%the command \cmdname{gloskip}.
|
|
%
|
|
%\item[\setglos{delimT}]
|
|
%\changes{2.3}{2005 Nov 18}{'delimT}
|
|
%The text to be inserted after the list of
|
|
%page numbers for an entry. (This corresponds to the
|
|
%\istkey{delim\_t} key in the \appname{makeindex} style file.)
|
|
%The default value depends on the glossary style. It does
|
|
%nothing for the list-type styles, and has the value
|
|
%\verb/\\/ for the tabular-type styles. Note that
|
|
%\setglos{delimT} is separate from \cmdname{glsafternum}.
|
|
%
|
|
%For example, if you are using a 2 column tabular style,
|
|
%and you want a blank line after every entry (not just
|
|
%after every group) you can do the following:
|
|
%\begin{verbatim}
|
|
%\setglossary{delimT={\cr & \cr},gloskip={}}
|
|
%\end{verbatim}
|
|
%Note the use of \cmdname{cr} instead of \verb/\\/ and
|
|
%\setglos{gloskip} is set to nothing otherwise there would be
|
|
%a double space between groups.
|
|
%\end{description}
|
|
%Note that:
|
|
%\begin{verbatim}
|
|
%\setglossary{glsnumformat=ignore}
|
|
%\end{verbatim}
|
|
%is equivalent to
|
|
%\begin{verbatim}
|
|
%\setglossary{glsnumformat=ignore,delimN={},delimR={}}
|
|
%\end{verbatim}
|
|
%
|
|
%As from version 2.4\changes{2.4}{2006 July 20}{Added facility to insert text between groups},
|
|
%you can insert text between groups by redefining the
|
|
%commands \cmdname{glogroupSymbols},
|
|
%\cmdname{glogroupNumbers}, \cmdname{glogroupA} \ldots\
|
|
%\cmdname{glogroupZ}. For example, if you are using one
|
|
%of the list styles, the following will print the appropriate
|
|
%heading in bold, followed by a gap:
|
|
%\begin{verbatim}
|
|
%\renewcommand{\glogroupSymbols}{\textbf{Symbols}\indexspace}
|
|
%\renewcommand{\glogroupNumbers}{\textbf{Numbers}\indexspace}
|
|
%\renewcommand{\glogroupA}{\textbf{A}\indexspace}
|
|
%....% similar lines omitted
|
|
%\renewcommand{\glosgroupZ}{\textbf{Z}\indexspace}
|
|
%\end{verbatim}
|
|
%
|
|
%The start and end of the main body of the glossary is given by the commands:
|
|
%\cmdname{beforeglossary}\DescribeMacro{\beforeglossary}{} and
|
|
%\cmdname{afterglossary}\DescribeMacro{\afterglossary}.
|
|
%If the \pkgopt[list]{style}
|
|
%or \pkgopt[altlist]{style}
|
|
%package options are chosen these commands simply begin and end
|
|
%the \envname{description}
|
|
%environment, otherwise these commands begin and end the
|
|
%\envname{longtable} or
|
|
%\envname{supertabular}
|
|
%environment with argument specified by
|
|
%\cmdname{glossaryalignment}\footnote{This isn't quite true
|
|
%anymore, see the documented code for clarification}.\DescribeMacro{\glossaryalignment}
|
|
%
|
|
%\changes{2.1}{2004 October 25}{made glossary compatible with array package}
|
|
%\changes{2.3}{2005 Nov 18}{made glossary compatible with array package}
|
|
%The glossary package no longer conflicts with the \styname{array}
|
|
%package. Changes can now be made to \cmdname{glossaryalignment}
|
|
%regardless of whether or not the \styname{array}
|
|
%package has been used.
|
|
%
|
|
%The command \cmdname{gloitem}\DescribeMacro{\gloitem}\ indicates
|
|
%what to do at the start of each glossary entry.
|
|
%This command takes one argument, which will be the text specified by the \gloskey{name} key
|
|
%in the \icmdname{glossary} command. In the case of the
|
|
%\pkgopt[list]{style} option,
|
|
%\cmdname{gloitem}\verb"{"\meta{text}\verb'}'
|
|
%will do\\[5pt]
|
|
%\verb"\item["\meta{text}\verb']'\\[5pt]
|
|
%or if \pkgopt[altlist]{style}:\\[5pt]
|
|
%\verb"\item["\meta{text}\verb']\mbox{}\par'\\[5pt]
|
|
%otherwise it will do\\[5pt]
|
|
%\meta{text}\verb" &"\\[5pt]
|
|
%This command corresponds to the \istkey{item\_0} key in the
|
|
%\appname{makeindex} style file.
|
|
%
|
|
%If the glossary has a tabular style with a header row
|
|
%(\pkgopt[true]{header} and either \pkgopt[long]{style} or
|
|
%\pkgopt[super]{style}), then the header row for \pkgopt[2]{cols}
|
|
%will be given by:
|
|
%\begin{verbatim}
|
|
%\bfseries\entryname & \bfseries \descriptionname\\
|
|
%\end{verbatim}
|
|
%and the header row for \pkgopt[3]{cols} will be given by:
|
|
%\begin{verbatim}
|
|
%\bfseries\entryname & \bfseries\descriptionname &
|
|
%\bfseries\glspageheader\\
|
|
%\end{verbatim}
|
|
%(It may also contain \cmdname{hline}\cmdname{hline} if the
|
|
%\pkgopt{border} key is set.)
|
|
%
|
|
%If you want to override this, you need to define the command
|
|
%\cmdname{glossaryheader}\footnote{Note that as from version~2.4,
|
|
%you must use \cmdname{newcommand} \emph{not} \cmdname{renewcommand}}%
|
|
%\DescribeMacro{\glossaryheader}.
|
|
%
|
|
%For example, if you are using a tabular style with \pkgopt[2]{cols},
|
|
%and you want the \icmdname{descriptionname} to be centred, you could
|
|
%do:
|
|
%\begin{verbatim}
|
|
%\newcommand{\glossaryheader}{\bfseries\entryname &
|
|
% \hfil\bfseries\descriptionname\\}
|
|
%\end{verbatim}
|
|
%
|
|
%If you want an extra row below the header row, you can define
|
|
%the command\cmdname{glossarysubheader}\DescribeMacro{\glossarysubheader}
|
|
%\changes{2.4}{2006 July 20}{provision for 'glossarysubheader added}
|
|
%For example, if you are using \pkgopt[3]{cols}, and you want an
|
|
%extra row after the header row, you can do:
|
|
%\begin{verbatim}
|
|
%\newcommand{\glossarysubheader}{ & & \\}
|
|
%\end{verbatim}
|
|
%
|
|
%The command \cmdname{glosstail}\DescribeMacro{\glosstail}\ indicates what to do at the end of
|
|
%the \envname{longtable} or \envname{supertabular} environment.
|
|
%
|
|
%The width of the second column for the tabular-type styles is given by the length
|
|
%\cmdname{descriptionwidth}\DescribeMacro{\descriptionwidth}. This value can be changed using
|
|
%the \cmdname{setlength} command (the default value is \verb"0.6\linewidth").
|
|
%
|
|
%\section{Sample Documents}
|
|
%This package comes with the following sample documents:
|
|
%\begin{itemize}
|
|
%\item \texttt{sampleSec.tex} --- This document uses the options:
|
|
%\pkgopt[altlist]{style}, \pkgopt{toc} and
|
|
%\pkgopt[section]{number}. It also loads the
|
|
%\styname{hyperref} package before loading the
|
|
%\styname{glossary} package, so the glossary has hyperlinks
|
|
%to the section numbers. Experimenting with different package
|
|
%options, will illustrate the different glossary styles.
|
|
%You will need to do:
|
|
%\begin{verbatim}
|
|
%pdflatex sampleSec
|
|
%makeglos.pl sampleSec
|
|
%pdflatex sampleSec
|
|
%pdflatex sampleSec
|
|
%\end{verbatim}
|
|
%If you don't want to use \appname{makeglos.pl}, you will need
|
|
%to do
|
|
%\begin{verbatim}
|
|
%makeindex -s sampleSec.ist -t sampleSec.glg -o sampleSec.gls sampleSec.glo
|
|
%\end{verbatim}
|
|
%
|
|
%\item \texttt{sampleNtn.tex} --- This has a glossary and defines
|
|
%a new glossary type called \texttt{notation}. The glossary has
|
|
%associated page numbers, but the new glossary type doesn't.
|
|
%The two glossaries have different styles.
|
|
%You will need to do:
|
|
%\begin{verbatim}
|
|
%latex sampleNtn
|
|
%makeglos.pl sampleNtn
|
|
%latex sampleNtn
|
|
%latex sampleNtn
|
|
%\end{verbatim}
|
|
%If you don't want to use \appname{makeglos.pl}, you will need
|
|
%to do
|
|
%\begin{verbatim}
|
|
%makeindex -s sampleNtn.ist -t sampleNtn.glg -o sampleNtn.gls sampleNtn.glo
|
|
%makeindex -s sampleNtn.ist -t sampleNtn.nlg -o sampleNtn.ntn sampleNtn.not
|
|
%\end{verbatim}
|
|
%
|
|
%\item \texttt{sampleNtn2.tex} ---This is similar to
|
|
%\texttt{sampleNtn.tex}, but uses \icmdname{storeglosentry}.
|
|
%
|
|
%\item \texttt{sampleEq.tex} --- This has a glossary where the
|
|
%numbers in the glossary refer to the equation number rather than
|
|
%the page number (achieved with the package option
|
|
%\pkgopt[equation]{number}). The \icmdname{entryname},
|
|
%\icmdname{descriptionname}, \icmdname{glossaryname} and
|
|
%\icmdname{glspageheader} are all redefined to customize the
|
|
%glossary. You will need to do:
|
|
%\begin{verbatim}
|
|
%latex sampleEq
|
|
%makeglos.pl sampleEq
|
|
%latex sampleEq
|
|
%\end{verbatim}
|
|
%If you don't want to use \appname{makeglos.pl}, you will need
|
|
%to do
|
|
%\begin{verbatim}
|
|
%makeindex -s sampleEq.ist -t sampleEq.glg -o sampleEq.gls sampleEq.glo
|
|
%\end{verbatim}
|
|
%
|
|
%\item \texttt{sampleEqPg.tex} --- This is a modified version of
|
|
%\texttt{sampleEq.tex}. This example has one glossary, where some
|
|
%of the entry numbers refer to the corresponding page number, and
|
|
%some of the entry numbers refer to the corresponding equation
|
|
%number. You will need to do:
|
|
%\begin{verbatim}
|
|
%latex sampleEqPg
|
|
%makeglos.pl sampleEqPg
|
|
%latex sampleEqPg
|
|
%\end{verbatim}
|
|
%If you don't want to use \appname{makeglos.pl}, you will need
|
|
%to do
|
|
%\begin{verbatim}
|
|
%makeindex -s sampleEqPg.ist -t sampleEqPg.glg -o sampleEqPg.gls sampleEqPg.glo
|
|
%\end{verbatim}
|
|
%
|
|
%\item \texttt{sampleAcr.tex} --- This has a glossary containing
|
|
%acronyms. It uses the style \pkgoptval{altlist}{style} as this is better
|
|
%suited to glossaries with long names. It also uses the
|
|
%\styname{hyperref} package, so the page numbers in the
|
|
%glossary will automatically be hyperlinks, and the acronyms
|
|
%within the text will have hyperlinks to their corresponding entry
|
|
%in the glossary. You will need to do:
|
|
%\begin{verbatim}
|
|
%pdflatex sampleAcr
|
|
%makeglos.pl sampleAcr
|
|
%pdflatex sampleAcr
|
|
%pdflatex sampleAcr
|
|
%\end{verbatim}
|
|
%If you don't want to use \appname{makeglos.pl}, you will need
|
|
%to do
|
|
%\begin{verbatim}
|
|
%makeindex -s sampleAcr.ist -t sampleAcr.glg -o sampleAcr.gls sampleAcr.glo
|
|
%\end{verbatim}
|
|
%
|
|
%
|
|
%\item \texttt{sample.tex} --- This has a glossary entry
|
|
%with two different definitions of the same name.
|
|
%If you just use \appname{makeindex}, the two entries
|
|
%will be treated separately, however, if you want them
|
|
%concatenated, you can use \appname{makeglos.pl} with
|
|
%the \texttt{-m} switch. You will need to do:
|
|
%\begin{verbatim}
|
|
%pdflatex sample
|
|
%makeglos.pl -m sample
|
|
%pdflatex sample
|
|
%pdflatex sample
|
|
%\end{verbatim}
|
|
%(Depending on the configuration of your system, you
|
|
%may have to do \texttt{perl makeglos.pl} instead of
|
|
%just \appname{makeglos.pl})
|
|
%
|
|
%If you don't want to use \appname{makeglos.pl}, you will need
|
|
%to do
|
|
%\begin{verbatim}
|
|
%makeindex -s sample.ist -t sample.glg -o sample.gls sample.glo
|
|
%\end{verbatim}
|
|
%however, the entries with the same name but multiple descriptions
|
|
%will not be merged. You will also have to given them different sort
|
|
%keys otherwise you will get duplicate hyper targets.
|
|
%
|
|
%\item \texttt{sample4col.tex}---This illustrates how to
|
|
%modify the glossary style so that it has 4 columns. You
|
|
%will need to do:
|
|
%\begin{verbatim}
|
|
%latex sample4col
|
|
%makeglos.pl sample4col
|
|
%latex sample4col
|
|
%\end{verbatim}
|
|
%
|
|
%\end{itemize}
|
|
%
|
|
%\section{LaTeX2HTML Style File}
|
|
%\label{sec:l2h}
|
|
%
|
|
%A \LaTeX2HTML\ Perl script, \texttt{glossary.}\filetype{perl}, is
|
|
%provided with this package for those wishing to use the
|
|
%glossary package with the \LaTeX2HTML translator.
|
|
%The file \texttt{glossary.}\filetype{perl} should be extracted
|
|
%along with \texttt{glossary.sty} when you run the
|
|
%installation script (\texttt{glossary.ins}) through \LaTeX.
|
|
%
|
|
%\subsection{Limitations}
|
|
%
|
|
%\begin{itemize}
|
|
%\item The only package options supported are:
|
|
%\pkgopt[altlist]{style}, \pkgopt[true]{hyper}, \pkgopt[true]{toc},
|
|
%\pkgopt[true]{acronym} and \pkgopt[false]{acronym}.
|
|
%
|
|
%\item If you have more than one glossary type, the
|
|
%secondary glossaries will occur in the same segment
|
|
%as the primary glossary if you use the command
|
|
%\verb'\print'\meta{name} instead of
|
|
%\verb'\printglossary['\meta{name}\verb"]", where
|
|
%\meta{name} is the name of the glossary type.
|
|
%
|
|
%\item The command \icmdname{setglossary} must be
|
|
%placed in the preamble to have an effect.
|
|
%
|
|
%\item The \icmdname{storeglosentry} commands must be in
|
|
%the document environment to have an effect. (They don't
|
|
%seem to work in the preamble, I don't know why.)
|
|
%
|
|
%\item If you place a \icmdname{glossary} command
|
|
%inside an environment not translated by \LaTeX2HTML
|
|
%(for example, inside a mathematics environment),
|
|
%it will not be entered into the glossary.
|
|
%
|
|
%\item The combinations \verb'""', \verb!"|!, \verb+"!+
|
|
%and \verb'"@' will be correctly translated, unless they
|
|
%occur within a maths environment. This is because
|
|
%the maths environment is translated before being
|
|
%passed to \icmdname{glossary}. You can overcome this
|
|
%by doing, e.g.:\\
|
|
%\cmdname{begin}\verb'{latexonly}'\\
|
|
%\verb'\glossary{name=$"|\mathcal{S}"|$,description=cardinality of set'\\
|
|
%\verb'$\mathcal{S}$,sort=cardinality}'\\
|
|
%\cmdname{end}\verb'{latexonly}'\\
|
|
%\cmdname{begin}\verb'{htmlonly}'\\
|
|
%\verb'\glossary{name=$|\mathcal{S}|$,description=cardinality of set'\\
|
|
%\verb'$\mathcal{S}$,sort=cardinality}'\\
|
|
%\cmdname{end}\verb'{htmlonly}'
|
|
%
|
|
%Alternative, you can use \cmdname{mid} instead:
|
|
%\begin{verbatim}
|
|
%\glossary{name=$\mid\mathcal{S}\mid$,description=cardinality of
|
|
%set $\mathcal{S}$,sort=cardinality}
|
|
%\end{verbatim}
|
|
%
|
|
%\item Glossary items with the same names but different
|
|
%definitions will not be merged.
|
|
%
|
|
%\item The configuration file \texttt{glossary.cfg} is ignored.
|
|
%
|
|
%\end{itemize}
|
|
%
|
|
%
|
|
%\section{Troubleshooting}
|
|
%\label{sec:trouble}
|
|
%
|
|
%This is a list of common problems, for a more up-to-date FAQ, see
|
|
%\url{http://theoval.cmp.uea.ac.uk/~nlct/packages/faq/}.
|
|
%
|
|
%\begin{enumerate}
|
|
%\item My glossary hasn't appeared.
|
|
%
|
|
%Check the following:
|
|
%\begin{itemize}
|
|
%\item Have you included the command \icmdname{makeglossary}
|
|
%in the preamble?
|
|
%
|
|
%\item Have you put the command \icmdname{printglossary} where
|
|
%you want the glossary to appear?
|
|
%
|
|
%\item Have you used \appname{makeglos.pl} or \appname{makeindex},
|
|
%and if you did, did it successfully create the \filetype{gls}
|
|
%file? (Check the transcript \filetype{glg} file.)
|
|
%
|
|
%\begin{itemize}
|
|
%\item If you used \appname{makeindex} directly, did you specify
|
|
%the \filetype{ist} file created by \icmdname{makeglossary},
|
|
%and did you remember to specify the output file with the extension
|
|
%\filetype{gls}?
|
|
%
|
|
%\item When \appname{makeindex} scans the \filetype{ist} file,
|
|
%it should generate the message:
|
|
%\begin{verbatim}
|
|
%9 attributes redefined, 0 ignored
|
|
%\end{verbatim}
|
|
%If you have a number other than 0 ignored, then there is something
|
|
%wrong with the \filetype{ist} file. Some packages can cause
|
|
%problems with the creation of this file, see
|
|
%item~\ref{itm:ngerman} below.
|
|
%\end{itemize}
|
|
%
|
|
%\item Have you remembered to \LaTeX\ your document again
|
|
%after using \appname{makeglos.pl} or \appname{makeindex}?
|
|
%
|
|
%\item Have you used \icmdname{glossary} or \icmdname{xglossary}?
|
|
%
|
|
%\item If you have used \icmdname{storeglosentry}, have you also
|
|
%used \icmdname{useglosentry}, \icmdname{useGlosentry} or
|
|
%\icmdname{gls}?
|
|
%\end{itemize}
|
|
%
|
|
%If you have defined a new glossary type, have you checked
|
|
%all the analogous commands to the above?
|
|
%
|
|
%\item My list of acronyms hasn't appeared.
|
|
%
|
|
%Have you used the \pkgopt[true]{acronym} package option? If no,
|
|
%check the answers to the previous item, if yes, make sure
|
|
%you have used \icmdname{makeacronym} and \icmdname{printacronym}.
|
|
%Have you used any of the acronyms you have defined? Remember
|
|
%that \cmdname{acrsh}, \cmdname{acrln},
|
|
%\cmdname{}\meta{acr-name}\texttt{short} and
|
|
%\cmdname{}\meta{acr-name}\texttt{long} don't generate entries
|
|
%in the list of acronyms, where \cmdname{}\meta{acr-name} is the
|
|
%name of an acronym command.
|
|
%
|
|
%\item My acronym has been expanded twice.
|
|
%
|
|
%By default, if any of your acronym commands occur within a
|
|
%group (this includes environments which form implicit grouping)
|
|
%the effect will be local to that group. You can either unset
|
|
%the acronym outside the group, or use the \pkgopt{global}
|
|
%package option.
|
|
%
|
|
%\item I get an error when using the command
|
|
%\icmdname{saveglosentry}.
|
|
%
|
|
%Don't use this command it's obsolete, use
|
|
%\icmdname{storeglosentry} instead.
|
|
%
|
|
%\item One of more of my glossary entries hasn't appeared.
|
|
%
|
|
%Check the following
|
|
%\begin{itemize}
|
|
%\item If you defined the entry using \icmdname{storeglosentry}
|
|
%have you used either \icmdname{useglosentry},
|
|
%\icmdname{useGlosentry} or \icmdname{gls}?
|
|
%
|
|
%\item Have you remembered to \icmdname{protect} commands
|
|
%such as \cmdname{mathcal} within \icmdname{storeglosentry}?
|
|
%
|
|
%\item Have you used the characters \texttt{@} \texttt{!}
|
|
%\texttt{\textbar} \verb'"'? If so, have you preceded them
|
|
%with a double quote character?
|
|
%\end{itemize}
|
|
%
|
|
%Check the \appname{makeindex} log file to see if there are
|
|
%any error messages.
|
|
%
|
|
%\item My glossary has duplicate entries on separate lines.
|
|
%
|
|
%\LaTeX\ treats multiple spaces equivalent to a single space, but \appname{makeindex}
|
|
%takes spaces into account when determining whether two entries are identical.
|
|
%For example:
|
|
%\begin{verbatim*}
|
|
%\glossary{name=Identity matrix,
|
|
%description=diagonal matrix with 1's along the diagonal}
|
|
%\end{verbatim*}
|
|
%and
|
|
%\begin{verbatim*}
|
|
%\glossary{name=Identity matrix,
|
|
%description=diagonal matrix with 1's along the diagonal}
|
|
%\end{verbatim*}
|
|
%will be treated as different entries by \appname{makeindex},
|
|
%because the first has only one space
|
|
%between `Identity' and `matrix' and the second has two.
|
|
%The easiest way to ensure consistency is to use
|
|
%\icmdname{storeglosentry} together with \icmdname{useglosentry},
|
|
%\icmdname{useGlosentry} or \icmdname{gls}.
|
|
%
|
|
%\item I had an error, fixed it, but I keep getting the same error message.
|
|
%
|
|
%Suppose you've made an error in the \icmdname{glossary} command. For example:
|
|
%\begin{verbatim}
|
|
%\glossary{name=Java,description=A programming language,format=texbf}
|
|
%\end{verbatim}
|
|
%In this case \texttt{textbf} has been mis-spelt. This error will be copied to the \filetype{glo} file,
|
|
%which in turn will be copied to the \filetype{gls} file by
|
|
%\appname{makeindex}. A subsequent run of \LaTeX\ will
|
|
%read this error in. If you fix the error in your main document, the error will still be read in from
|
|
%the \filetype{gls} file. The best thing to do is to delete the
|
|
%\filetype{gls} file, and try again.
|
|
%
|
|
%\item My glossary has ended up wider than my page.
|
|
%
|
|
%This may occur if you have long entry names, and you are using
|
|
%either the \pkgopt[long]{style} or \pkgopt[super]{style}
|
|
%options. The width of the description column is proportional to
|
|
%the line width (in fact, it's \verb"0.6\linewidth")
|
|
%but the first column is as wide as the widest entry name. You
|
|
%can either redefine \icmdname{glossaryalignment} to change the
|
|
%column specifications, or use one of the list-type styles.
|
|
%
|
|
%\item The page numbers in my glossary don't match up with the actual page numbers where the entry
|
|
%was defined.
|
|
%
|
|
%You may need to \LaTeX\ your document again (just as you have to do
|
|
%with \cmdname{tableofcontents}, \cmdname{listoffigures} etc).
|
|
%
|
|
%\item I'm getting a \appname{keyval} error.
|
|
%
|
|
%The \styname{glossary} package uses the \styname{keyval}
|
|
%package to extract the information from \meta{key}=\meta{value}
|
|
%comma separated lists. You need to make sure the syntax is correct.
|
|
%If your \meta{value} contains a
|
|
%comma, you will need to enclose \meta{value} in curly braces. See the \styname{keyval} documentation for
|
|
%further information\footnote{This should be in the directory
|
|
%\texttt{texmf/doc/latex/graphics/}}.
|
|
%
|
|
%\item I've used the \pkgopt{hyper} option, but nothing happens
|
|
%when I click on the numbers in the glossary.
|
|
%
|
|
%Check the following:
|
|
%\begin{enumerate}
|
|
%\item Have you remembered to use PDF\LaTeX\ instead of \LaTeX,
|
|
%or used a driver that understands hyperlinks?
|
|
%\item Have you remembered to use the \styname{hyperref} or
|
|
%\styname{html} package?
|
|
%\item Have you remembered to use a formatting command which uses \cmdname{hyperlink}? (E.g.\ using \glsnumfmt{hyperbf} instead
|
|
%of \texttt{textbf})? Remember to check the \gloskey{format} key
|
|
%in your \icmdname{glossary} commands, and the
|
|
%\setglos{glsnumformat} key in the \icmdname{setglossary}
|
|
%command.
|
|
%\item What application are you using to view the PDF file?
|
|
%Ghostview can display a PDF file, but ignores the links. If you are using Windows, try
|
|
%using Adobe's Acrobat Reader, or if you are using UNIX or Linux, try using \appname{xpdf} or \appname{acroread}.
|
|
%\end{enumerate}
|
|
%
|
|
%\item The \styname{glossary} package conflicts with the
|
|
%\styname{datetime} package.
|
|
%\changes{2.01}{21 Oct 2004}{Fixed conflict with datetime package}
|
|
%
|
|
%This has been fixed in version 2.01.
|
|
%
|
|
%\item I get an error when using certain commands, such as \cmdname{cite} or \verb"~" in \icmdname{newacronym}.
|
|
%
|
|
%This has been fixed in version 2.1.
|
|
%
|
|
%\item I get the following error:
|
|
%\begin{verbatim}
|
|
%! Package array Error: Illegal pream-token (\glossaryalignment): `c' used.
|
|
%\end{verbatim}
|
|
%
|
|
%The \styname{glossary} package used to conflict with the
|
|
%\styname{array} package. This was fixed in version 2.1.
|
|
%As from version 2.3, it doesn't matter whether you load
|
|
%the \styname{glossary} package before or after the
|
|
%\styname{array} package.
|
|
%
|
|
%\item\label{itm:fragile} I get the following error:
|
|
%\begin{verbatim}
|
|
%Use of \@chapter doesn't match its definition
|
|
%\end{verbatim}
|
|
%or
|
|
%\begin{verbatim}
|
|
%! Argument of \@sect has an extra }
|
|
%\end{verbatim}
|
|
%
|
|
%If you want to use an acronym command in a moving argument (such as a chapter heading)
|
|
%you need to \cmdname{protect} it first. Note that if you do put an acronym in a chapter etc
|
|
%heading, it will be expanded for the first time in the table of contents, not
|
|
%in the chapter heading. The best way to get around this is to use the
|
|
%optional argument, e.g.
|
|
%\begin{verbatim}
|
|
%\chapter[Introduction to Kernel Support Vector Machines]{Introduction
|
|
%to \protect\KSVM}
|
|
%\end{verbatim}
|
|
%You will also need to do this if you are using bookmarks in a PDF document.
|
|
%
|
|
%Alternatively, you can do:
|
|
%\begin{verbatim}
|
|
%\resetacronym{KSVM}
|
|
%\chapter{Introduction to \protect\KSVM}
|
|
%\end{verbatim}
|
|
%or if you are using PDFLaTeX:
|
|
%\begin{verbatim}
|
|
%\resetacronym{KSVM}
|
|
%\chapter{Introduction to \texorpdfstring{\protect\KSVM}{KSVM}}
|
|
%\end{verbatim}
|
|
%
|
|
%\item\label{itm:ngerman} The \styname{glossary} package conflicts with
|
|
%\styname{ngerman}.
|
|
%
|
|
%This problem is caused by the fact that \styname{ngerman}
|
|
%redefines the effect of the double quote
|
|
%character, but this character is used in the creation of the
|
|
%\filetype{ist} \appname{makeindex} style file.
|
|
%Try one of the following methods:
|
|
%\begin{enumerate}
|
|
%\item Include the \styname{ngerman} package after the
|
|
%\icmdname{makeglossary} command:
|
|
%\begin{verbatim}
|
|
%\usepackage{glossary}
|
|
%\makeglossary
|
|
%\usepackage{ngerman}
|
|
%\end{verbatim}
|
|
%
|
|
%\item First omit the \styname{ngerman} package and include
|
|
%\icmdname{makeglossary} then \LaTeX\ your document.
|
|
%This will create the \filetype{ist} file. Then include the
|
|
%\styname{ngerman} package, and insert \icmdname{noist} before
|
|
%the \icmdname{makeglossary} command, this will prevent further attempts to generate the \filetype{ist} file.
|
|
%\begin{verbatim}
|
|
%\usepackage{ngerman}
|
|
%\usepackage{glossary}
|
|
%\noist\makeglossary
|
|
%\end{verbatim}
|
|
%
|
|
%\item Use \icmdname{noist}, as above, and create the
|
|
%\filetype{ist} file
|
|
%in an ordinary text editor. The file should contain the
|
|
%following lines:
|
|
%\begin{verbatim}
|
|
%keyword "\\glossaryentry"
|
|
%preamble "\\begin{theglossary}"
|
|
%postamble "\n\\end{theglossary}\n"
|
|
%group_skip "\\gloskip "
|
|
%item_0 "\n\\gloitem "
|
|
%delim_0 "\n\\glodelim "
|
|
%page_compositor "-"
|
|
%delim_n "\\delimN "
|
|
%delim_r "\\delimR "
|
|
%\end{verbatim}
|
|
%\end{enumerate}
|
|
%It is possible that there may be other packages which will
|
|
%also cause a problem, if so, try any of the above.
|
|
%
|
|
%\item \appname{makeglos.pl} gives the following error message:
|
|
%\begin{verbatim}
|
|
%unable to extract name from glossary item:
|
|
%\end{verbatim}
|
|
%
|
|
%You are using an old version of \appname{makeglos.pl} with a
|
|
%new version of the \styname{glossary} package. You will need
|
|
%to update your version \appname{makeglos.pl}.
|
|
%\end{enumerate}
|
|
%Let me know if you encounter any other problems or if you have any comments regarding this package.
|
|
%
|
|
%\section{Obsolete Commands}
|
|
%
|
|
%The commands described in this section are now obsolete, but
|
|
%are currently still provided for backwards compatibility. Their
|
|
%use is deprecated.
|
|
%
|
|
%\changes{2.14}{2005 May 28}{'saveglosentry added}
|
|
%\DescribeMacro{\saveglosentry}
|
|
%\icmdname{saveglosentry}\{\textrm{\meta{name}}\}\{\meta{description}\}\\
|
|
%This command has now been replaced by \cmdname{storeglosentry}.
|
|
%
|
|
%\changes{2.0}{2004 November 1}{primary acronym number format
|
|
%\texttt{'glsprimaryfmt}}
|
|
%\changes{2.12}{2004 November 1}{primary acronym number format
|
|
%\texttt{'glsprimaryfmt} no longer used}
|
|
%\changes{2.4}{2006 July 20}{primary acronym number format
|
|
%\texttt{'glsprimaryfmt} has been removed}
|
|
%\DescribeMacro{\glsprimaryfmt}%
|
|
%The command \cmdname{glsprimaryfmt} has now been removed.
|
|
%
|
|
%The package option \pkgopt{hyperacronym} is now superseded by the package option
|
|
%\pkgopt{hyper}. This option was implemented prior to the
|
|
%introduction of the command \icmdname{xglossary}. Since the
|
|
%acronyms now use \icmdname{xglossary}, there is no difference
|
|
%between the \pkgopt{hyperacronym} and \pkgopt{hyper} options.
|
|
%This option has a boolean value:
|
|
%\changes{2.13}{2004 December 1}{Package option \texttt{hyperacronym}}
|
|
%\begin{description}
|
|
%\item[\pkgoptval{true}{hyperacronym}] Make acronyms link to their corresponding entry in the glossary
|
|
%\item[\pkgoptval{false}{hyperacronym}] Acronyms don't have a hyperlink.
|
|
%\end{description}
|
|
%If the \styname{hyperref} package has been loaded prior to
|
|
%loading \texttt{glossary.sty} or if \pkgopt[true]{hyper} is set,
|
|
%\pkgopt[true]{hyperacronym} otherwise
|
|
%\pkgopt[false]{hyperacronym}.%
|
|
%
|
|
%\section{Contact Details}
|
|
%\noindent
|
|
%Dr Nicola Talbot\\
|
|
%School of Computing Sciences\\
|
|
%University of East Anglia\\
|
|
%Norwich. Norfolk\\
|
|
%NR4 7TJ. United Kingdom.\\
|
|
%\url{http://theoval.cmp.uea.ac.uk/~nlct/}
|
|
%
|
|
%\section{Acknowledgements}
|
|
%
|
|
%I would like to thank all the many people who have made suggestions
|
|
%and pointed out bugs.
|
|
%
|
|
% \StopEventually{\PrintChanges\addcontentsline{toc}{section}{Change History}\PrintIndex\addcontentsline{toc}{section}{Index}}
|
|
%
|
|
%
|
|
%
|
|
%
|
|
%\section{The Code}
|
|
% \begin{macrocode}
|
|
%<*glossary.sty>
|
|
% \end{macrocode}
|
|
% \subsection{Package Definition}
|
|
% \begin{macrocode}
|
|
\NeedsTeXFormat{LaTeX2e}
|
|
\ProvidesPackage{glossary}[2006/07/20 2.4 (NLCT)]
|
|
% \end{macrocode}
|
|
% Load packages needed by glossary.sty:
|
|
% \begin{macrocode}
|
|
\RequirePackage{ifthen}
|
|
\RequirePackage{keyval}
|
|
% \end{macrocode}
|
|
% The package options are in the form of a comma-separated list of
|
|
% \meta{key}=\meta{value} pairs. First need to set up the keys.
|
|
%
|
|
% The \pkgopt{style} key. This may be one of \pkgoptval{list}{style},
|
|
% \pkgoptval{altlist}{style} (use \envname{description} environment),
|
|
% \pkgoptval{super}{style} (use \envname{supertabular} environment) or
|
|
% \pkgoptval{long}{style} (use \envname{longtable} environment).
|
|
% \begin{macrocode}
|
|
\define@key{gloss}
|
|
{style}
|
|
{\ifthenelse{\equal{#1}{list} \or \equal{#1}{altlist}
|
|
\or \equal{#1}{super} \or \equal{#1}{long}}
|
|
{\def\gls@style{#1}}
|
|
{\PackageError{glossary}
|
|
{Unknown glossary style '#1'}
|
|
{Available styles are: list, altlist, super and long}}}
|
|
% \end{macrocode}
|
|
% The \pkgopt{header} key. This can either be \pkgoptval{none}{header}
|
|
% or \pkgoptval{plain}{header}. Should only be used in conjunction
|
|
% with \pkgopt[style]{super} or \pkgopt[long]{style}.
|
|
% \begin{macrocode}
|
|
\define@key{gloss}
|
|
{header}[plain]{\ifthenelse{\equal{#1}{none} \or \equal{#1}{plain}}
|
|
{\def\gls@header{#1}}
|
|
{\PackageError{glossary}
|
|
{Unknown glossary style '#1'}
|
|
{Available styles are: none and plain}}}
|
|
% \end{macrocode}
|
|
% The \pkgopt{border} key. This can either be \pkgoptval{none}{border}
|
|
% or \pkgoptval{plain}{border}. Should only be used in conjunction
|
|
% with \pkgopt[super]{style} or \pkgopt[long]{style}.
|
|
% \begin{macrocode}
|
|
\define@key{gloss}
|
|
{border}[plain]{\ifthenelse{\equal{#1}{none} \or \equal{#1}{plain}}
|
|
{\def\gls@border{#1}}
|
|
{\PackageError{glossary}
|
|
{Unknown glossary border '#1'}
|
|
{Available styles are: none and plain}}}
|
|
% \end{macrocode}
|
|
% Number of columns (either \pkgoptval{2}{cols} or
|
|
% \pkgoptval{3}{cols}). Should only be used in conjunction with
|
|
% \pkgopt[super]{style} or \pkgopt[long]{style}.
|
|
% \begin{macrocode}
|
|
\newcount\gls@cols
|
|
\define@key{gloss}{cols}{\gls@cols=#1\relax
|
|
\ifthenelse{\gls@cols<2 \or \gls@cols>3}
|
|
{\PackageError{glossary}
|
|
{invalid number of columns}
|
|
{The cols option can only be 2 or 3}}
|
|
{}}
|
|
% \end{macrocode}
|
|
% The number key may either be \pkgoptval{none}{number} or the name of
|
|
% a counter.
|
|
% \begin{macrocode}
|
|
\define@key{gloss}
|
|
{number}
|
|
{\ifthenelse{\equal{#1}{none}}
|
|
{\def\gls@glossary@number{#1}}
|
|
{\@ifundefined{c@#1}{
|
|
\PackageError{glossary}
|
|
{Unknown glossary number style '#1'}
|
|
{You may either specify "none" or the name of a counter,
|
|
e.g. "section"}\def\gls@glossary@number{page}}{\def\gls@glossary@number{#1}}}}
|
|
% \end{macrocode}
|
|
% The \pkgopt{toc} key. If set, adds the glossary to the table of
|
|
% contents
|
|
% \begin{macrocode}
|
|
\newif\ifgls@toc
|
|
\define@key{gloss}{toc}[true]{\ifthenelse{\equal{#1}{true}
|
|
\or \equal{#1}{false}}
|
|
{\csname gls@toc#1\endcsname}
|
|
{\PackageError{glossary}{Glossary option 'toc' is boolean}
|
|
{The value of 'toc' can only be set to 'true' or 'false'}}}
|
|
% \end{macrocode}
|
|
% The \pkgopt{hypertoc} key. Like \pkgopt{toc}, but puts the anchor
|
|
% before the section heading. Should only be used if the
|
|
% \styname{hyperref} package is used (because it uses
|
|
% \icmdname{phantomsection}).
|
|
% \begin{macrocode}
|
|
\newif\ifgls@hypertoc
|
|
\define@key{gloss}{hypertoc}[true]{%
|
|
\ifthenelse{\equal{#1}{true} \or \equal{#1}{false}}
|
|
{\csname gls@hypertoc#1\endcsname}
|
|
{\PackageError{glossary}{Glossary option 'hypertoc' is boolean}
|
|
{The value of 'hypertoc' can only be set to 'true' or 'false'}}}
|
|
% \end{macrocode}
|
|
% The \pkgopt{section} key. This will put the glossary in an unnumbered
|
|
% section, even if chapters are defined.
|
|
% \begin{macrocode}
|
|
\newif\ifgls@section
|
|
\define@key{gloss}{section}[true]{%
|
|
\ifthenelse{\equal{#1}{true} \or \equal{#1}{false}}
|
|
{\csname gls@section#1\endcsname}
|
|
{\PackageError{glossary}{Glossary option 'section' is boolean}
|
|
{The value of 'section' can only be set to 'true' or 'false'}}}
|
|
\gls@sectionfalse
|
|
% \end{macrocode}
|
|
% Enable hyperlinks. If \styname{hyperref} or \styname{html}
|
|
% packages loaded, \pkgopt[true]{hyper} is the default.
|
|
% \begin{macrocode}
|
|
\newif\ifglshyper
|
|
\newif\ifglshyperacronym
|
|
\define@key{gloss}{hyper}[true]{%
|
|
\ifthenelse{\equal{#1}{true} \or \equal{#1}{false}}
|
|
{\csname glshyper#1\endcsname\glshyperacronymtrue}
|
|
{\PackageError{glossary}{Glossary option 'hyper' is boolean}
|
|
{The value of 'hyper' can only be set to 'true' or 'false'}}}
|
|
% \end{macrocode}
|
|
% Enable hyperlinks for acronyms. Deprecated: use \pkgopt{hyper}
|
|
% instead.
|
|
% \begin{macrocode}
|
|
\define@key{gloss}{hyperacronym}[true]{%
|
|
\ifthenelse{\equal{#1}{true} \or \equal{#1}{false}}
|
|
{\csname glshyperacronym#1\endcsname}
|
|
{\PackageError{glossary}{Glossary option 'hyperacronym' is boolean}
|
|
{The value of 'hyperacronym' can only be set to 'true' or 'false'}}}
|
|
% \end{macrocode}
|
|
% The \pkgopt{acronym} key. If set, the acronyms will be separate from
|
|
% main glossary entries. Remember to use \icmdname{makeacronym}
|
|
% and \icmdname{printacronym} if \pkgoptval{true}{acronym}.
|
|
% \begin{macrocode}
|
|
\newif\ifglsacronym
|
|
\define@key{gloss}{acronym}[true]{%
|
|
\ifthenelse{\equal{#1}{true} \or \equal{#1}{false}}
|
|
{\setboolean{glsacronym}{#1}}{%
|
|
\PackageError{glossary}{Glossary option 'acronym' is boolean}{The
|
|
value of 'acronym' can only be set to 'true' or 'false'}}}
|
|
% \end{macrocode}
|
|
% The \pkgopt{global} key. If not set, any acronyms expanded in a
|
|
% group will be treated as unused once outside of the group.
|
|
% Set \pkgopt[true]{global} to prevent this.
|
|
% \begin{macrocode}
|
|
\newif\ifglsglobal
|
|
\define@key{gloss}{global}[true]{\ifthenelse{\equal{#1}{true}\or
|
|
\equal{#1}{false}}{\setboolean{glsglobal}{#1}}{%
|
|
\PackageError{glossary}{Glossary option 'global' is boolean}{The
|
|
value of 'global' can only be set to 'true' or 'false'}}}
|
|
% \end{macrocode}
|
|
% Set up defaults
|
|
% \begin{macrocode}
|
|
\def\gls@style{long}
|
|
\def\gls@header{none}
|
|
\def\gls@border{none}
|
|
\def\gls@glossary@number{page}
|
|
\gls@cols=2\relax
|
|
\gls@tocfalse
|
|
% \end{macrocode}
|
|
% If \icmdname{hyperpage} is defined, then assume hyperlinks required
|
|
% \begin{macrocode}
|
|
\@ifundefined{hyperpage}{\glshyperfalse\glshyperacronymfalse}{%
|
|
\glshypertrue\glshyperacronymtrue}
|
|
% \end{macrocode}
|
|
% If \icmdname{hypertarget} defined, then \icmdname{glosslabel} will make a
|
|
% target ("#1") and \icmdname{glossref} will make a hyperlink (to "#1").
|
|
% Otherwise will simply print the second argument.
|
|
% \begin{macrocode}
|
|
\@ifundefined{hypertarget}{
|
|
% no hyperlinks
|
|
\newcommand{\glosslabel}[2]{#2}%
|
|
\newcommand{\glossref}[2]{#2}%
|
|
}{%
|
|
\newcommand{\glosslabel}[2]{\hypertarget{#1}{#2}}%
|
|
\newcommand{\glossref}[2]{\hyperlink{#1}{#2}}
|
|
}
|
|
% \end{macrocode}
|
|
% If the \styname{xspace} package has been loaded, use \icmdname{xspace}
|
|
% in acronyms.
|
|
% \begin{macrocode}
|
|
\@ifundefined{xspace}{%
|
|
\let\glsxspace\relax}{%
|
|
\let\glsxspace\xspace}
|
|
% \end{macrocode}
|
|
% Set \icmdname{glossaryalignment} to "\relax" before loading
|
|
% configuration file.
|
|
% \begin{macrocode}
|
|
\let\glossaryalignment\relax
|
|
% \end{macrocode}
|
|
% Load configuation file if it exists
|
|
% \begin{macrocode}
|
|
\newcommand{\glossarypackageoptions}[1]{\setkeys{gloss}{#1}}
|
|
\InputIfFileExists{glossary.cfg}{%
|
|
\typeout{Glossary configuration file loaded}}{%
|
|
\typeout{No configuration file glossary.cfg found}}
|
|
\renewcommand{\glossarypackageoptions}[1]{%
|
|
\PackageError{glossary}{Command \string\glossarypackageoptions
|
|
^^Jcan only be used in configuration file}{}}
|
|
% \end{macrocode}
|
|
% Set up the options so that they are treated as a
|
|
% \meta{key}=\meta{value} list.
|
|
% \begin{macrocode}
|
|
\DeclareOption*{\edef\@pkg@ptions{\noexpand
|
|
\setkeys{gloss}{\CurrentOption}}
|
|
\ifthenelse{\equal{\CurrentOption}{}}{}{\@pkg@ptions}}
|
|
% \end{macrocode}
|
|
% Process options
|
|
% \begin{macrocode}
|
|
\ProcessOptions
|
|
% \end{macrocode}
|
|
%Check to make sure that the options don't conflict.
|
|
% \begin{macrocode}
|
|
\ifthenelse{\(\equal{\gls@style}{list} \or
|
|
\equal{\gls@style}{altlist}\) \and
|
|
\(\not\equal{\gls@header}{none} \or \not\equal{\gls@border}{none}
|
|
\or \gls@cols=3\)}
|
|
{\PackageError{glossary}{You can't have option 'style=list' or
|
|
'style=altlist' in combination with any of the other style
|
|
options}{The 'list' and 'altlist' options don't have a header,
|
|
border or number of columns option.}}
|
|
{}
|
|
% \end{macrocode}
|
|
% Can't have both toc and hypertoc. Make it a warning rather
|
|
% than an error.
|
|
% \begin{macrocode}
|
|
\ifthenelse{\boolean{gls@hypertoc} \and \boolean{gls@toc}}{%
|
|
\PackageWarning{glossary}{Can't have both 'toc' and
|
|
'hypertoc', ignoring 'toc' option}
|
|
\ifgls@hypertoc\gls@tocfalse\fi}{}
|
|
% \end{macrocode}
|
|
%\subsection{Redefining \texorpdfstring{\texttt{\symbol{92}glossary}}{\textbackslash glossary} format}
|
|
% The glossary is going to be redefined so that it accepts
|
|
% \meta{key}=\meta{value} information, so need to define the keys (see
|
|
% keyval documentation for further details
|
|
% on how to do this.) Added "\@onelevel@sanitize" at the recommendation
|
|
% of Dan~Luecking and Ulrich~Diez.
|
|
% \begin{macrocode}
|
|
\define@key{wrgloss}{name}{%
|
|
\def\@glo@n@me{#1}%
|
|
\@onelevel@sanitize\@glo@n@me%
|
|
\global\let\@glo@n@me\@glo@n@me}
|
|
\define@key{wrgloss}{description}{%
|
|
\def\@descr{#1}%
|
|
\@onelevel@sanitize\@descr}
|
|
\define@key{wrgloss}{sort}{%
|
|
\def\@s@rt{#1}%
|
|
\@onelevel@sanitize\@s@rt
|
|
\global\let\@s@rt\@s@rt}
|
|
\define@key{wrgloss}{format}{\def\@f@rm@t{#1}}
|
|
\define@key{wrgloss}{number}{\def\@glo@num{#1}}
|
|
% \end{macrocode}
|
|
% Redefine "\@wrglossary" so that it separates out the entry name and
|
|
% entry description. This was rewritten in version 2.4. It is now
|
|
% used for both the main glossary, and user-defined glossaries.
|
|
% The command "\@@wrglossary" is called at the end of "\@wrglossary",
|
|
% by default this does nothing, but some commands temporarily
|
|
% redefine it.
|
|
% \begin{macrocode}
|
|
\newcommand{\@@wrglossary}{}
|
|
% \end{macrocode}
|
|
% The label for each entry is usually made up of the glossary prefix
|
|
% followed by the sort value, this can be over-ridden by redefining
|
|
% \cmdname{@glo@l@bel}. (This is done if the optional argument to
|
|
% \icmdname{glossary} is used.) By default this does nothing.
|
|
% \begin{macrocode}
|
|
\newcommand{\@glo@l@bel}{}
|
|
% \end{macrocode}
|
|
% Define the prefix for the principle glossary. (Added to version
|
|
% 2.4.)
|
|
% \begin{macrocode}
|
|
\newcommand{\@gls@glossary@type}{glo}
|
|
% \end{macrocode}
|
|
% The optional first argument was added in version 2.4. This
|
|
% is the name of the glossary type.
|
|
% \begin{macrocode}
|
|
\renewcommand{\@wrglossary}[2][glossary]{\relax
|
|
\gdef\@glo@n@me{}\def\@descr{}\def\@s@rt{}\def\@f@rm@t{}%
|
|
\edef\@glo@num{\csname gls@#1@number\endcsname}\relax
|
|
\xdef\@pr@fix{\csname @gls@#1@type\endcsname}%
|
|
\setkeys{wrgloss}{#2}\relax
|
|
\ifthenelse{\equal{\@glo@num}{none}}{\def\@@glo@num{\thepage}}{%
|
|
\@ifundefined{c@\@glo@num}{\PackageError{glossary}{%
|
|
Not such counter '\@glo@num'}{The value of the 'number' key
|
|
must be the name of a counter or the word "none"}%
|
|
\def\@@glo@num{\thepage}}{%
|
|
\edef\@@glo@num{\csname the\@glo@num\endcsname}}}%
|
|
\ifthenelse{\equal{\@s@rt}{}}{\gdef\@s@rt{\@glo@n@me}}{}%
|
|
\ifthenelse{\equal{\@glo@l@bel}{}}{%
|
|
\gdef\@glo@l@bel{\@pr@fix:\@s@rt}}{}%
|
|
% \end{macrocode}
|
|
% User has not specified a format, so use default
|
|
% \begin{macrocode}
|
|
\ifthenelse{\equal{\@f@rm@t}{}}
|
|
{\expandafter\protected@write\csname @#1file\endcsname{}%
|
|
{\string\glossaryentry{\@s@rt @{%
|
|
\string\glosslabel{\@glo@l@bel}{\@glo@n@me}}\@descr
|
|
\string\relax|glsnumformat}{\@@glo@num}}}
|
|
% \end{macrocode}
|
|
% User has specified a format. If it is one of the
|
|
% "\hyper"\meta{xx} types, append the required counter.
|
|
% This is needed if the glossary contains a mixture of
|
|
% counters used (as in "sampleEqPg.tex").
|
|
% \begin{macrocode}
|
|
{\ifthenelse{\equal{\@f@rm@t}{hyperrm} \or
|
|
\equal{\@f@rm@t}{hypersf} \or \equal{\@f@rm@t}{hypertt}
|
|
\or \equal{\@f@rm@t}{hypermd} \or \equal{\@f@rm@t}{hyperbf}
|
|
\or \equal{\@f@rm@t}{hyperit} \or \equal{\@f@rm@t}{hyperem}
|
|
\or \equal{\@f@rm@t}{hypersl} \or \equal{\@f@rm@t}{hyperup}
|
|
\or \equal{\@f@rm@t}{hypersc}}
|
|
{\expandafter\protected@write\csname @#1file\endcsname{}%
|
|
{\string\glossaryentry{\@s@rt @{%
|
|
\string\glosslabel{\@glo@l@bel}{\@glo@n@me}}\@descr
|
|
\string\relax|\@f@rm@t[\@glo@num]}{\@@glo@num}}}
|
|
{\expandafter\protected@write\csname @#1file\endcsname{}%
|
|
{\string\glossaryentry{\@s@rt @{%
|
|
\string\glosslabel{\@glo@l@bel}{\@glo@n@me}}\@descr
|
|
\string\relax|\@f@rm@t}{\@@glo@num}}}}\relax
|
|
\endgroup\@esphack
|
|
\@@wrglossary
|
|
}
|
|
% \end{macrocode}
|
|
% Command to extract name key from glossary entry. This shouldn't
|
|
% be sanitized, so define a new key for this
|
|
% \begin{macrocode}
|
|
\define@key{wrnsgloss}{name}{\def\@glo@n@me{#1}}
|
|
\define@key{wrnsgloss}{description}{\def\@descr{#1}}
|
|
\define@key{wrnsgloss}{sort}{\def\@s@rt{#1}}
|
|
\define@key{wrnsgloss}{format}{\def\@f@rm@t{#1}}
|
|
\define@key{wrnsgloss}{number}{\def\@glo@num{#1}}
|
|
% \end{macrocode}
|
|
% Extract name from key-value list. Name stored in "\@glo@n@me".
|
|
% \begin{macrocode}
|
|
\newcommand{\@gls@getn@me}[1]{%
|
|
\def\@glo@n@me{}\setkeys{wrnsgloss}{#1}%
|
|
}
|
|
% \end{macrocode}
|
|
% Command to extract description key from glossary entry.
|
|
% \begin{macrocode}
|
|
\newcommand{\@gls@getdescr}[1]{%
|
|
\@bsphack\begingroup
|
|
\def\@descr{}%
|
|
\setkeys{wrgloss}{#1}%
|
|
\global\let\@glo@desc\@descr
|
|
\endgroup\@esphack
|
|
}
|
|
% \end{macrocode}
|
|
% Now define \icmdname{xglossary} so you can have a hyperlink that takes
|
|
% you to the entry in the glossary
|
|
% \begin{macrocode}
|
|
\newcommand{\xglossary}{\renewcommand{\@@wrglossary}[1]{%
|
|
\glossref{\@glo@l@bel}{##1}\renewcommand{\@@wrglossary}{}}%
|
|
\glossary}
|
|
% \end{macrocode}
|
|
%\subsection{Storing Glossary Entries}
|
|
% Provide a means to store glossary information to save typing
|
|
% and ensure consistency (new to v2.17).
|
|
%
|
|
% Store label in list (new to version 2.36) so that all
|
|
% entries can be added to the glossary with a single command.
|
|
% \begin{macrocode}
|
|
\newcommand*{\@glo@label@list}{}
|
|
\toksdef\gls@ta=0 \toksdef\gls@tb=2
|
|
\newcommand{\@glo@label@addtolist}[1]{%
|
|
\gls@ta={{#1}}\gls@tb=\expandafter{\@glo@label@list}%
|
|
\xdef\@glo@label@list{\the\gls@ta,\the\gls@tb}}
|
|
% \end{macrocode}
|
|
% First define command to store details (don't allow a label
|
|
% consisting solely of a "*" as this represents all entries
|
|
% when passed to \icmdname{useglosentry}.)
|
|
% \begin{macrocode}
|
|
\newcommand*{\storeglosentry}[3][glossary]{%
|
|
\ifthenelse{\equal{#2}{*}}{%
|
|
\PackageError{glossary}{Glossary label '*' invalid}{You can't have
|
|
a glossary entry with a * as the label}}{%
|
|
\@ifundefined{glo@#2@entry}{%
|
|
\@glo@label@addtolist{#2}%
|
|
\expandafter\def\csname glo@#2@type\endcsname{#1}%
|
|
\expandafter\def\csname glo@#2@entry\endcsname{#3}%
|
|
\@gls@getn@me{#3}%
|
|
\expandafter\protected@edef\csname glo@#2@name\endcsname{\@glo@n@me}%
|
|
}{%
|
|
\PackageError{glossary}{Glossary entry '#2' already
|
|
defined}{There already exists a glossary entry with the label '#2'}}}%
|
|
}
|
|
% \end{macrocode}
|
|
% This command will not produce text in the document, but will
|
|
% produce the relevant glossary entry.
|
|
% \begin{macrocode}
|
|
\providecommand{\useglosentry}[2][\relax]{%
|
|
\ifthenelse{\equal{#2}{*}}{\@for\@glolab:=\@glo@label@list\do{%
|
|
\ifthenelse{\equal{\@glolab}{}}{}{\useglosentry[#1]{\@glolab}}}}{%
|
|
\@ifundefined{glo@#2@type}{%
|
|
\PackageError{glossary}{Glossary entry '#2' undefined}{You need
|
|
to define the entry using \string\storeglosentry\space before
|
|
using it.}}{{%
|
|
\edef\@glostype{\csname glo@#2@type\endcsname}%
|
|
\@glo@tb=\expandafter\expandafter\expandafter
|
|
{\csname glo@#2@entry\endcsname}%
|
|
\ifx#1\relax
|
|
\edef\@glo@cmd{\expandafter\noexpand
|
|
\csname\@glostype\endcsname{\the\@glo@tb}}%
|
|
\else
|
|
\edef\@glo@cmd{\expandafter\noexpand
|
|
\csname\@glostype\endcsname{\the\@glo@tb,#1}}%
|
|
\fi
|
|
\@glo@cmd
|
|
}}}}
|
|
% \end{macrocode}
|
|
% This command will produce the specified text in the document
|
|
% (with a hyperlink if enabled), and will produce the relevant
|
|
% glossary entry.
|
|
% \begin{macrocode}
|
|
\providecommand{\useGlosentry}[3][\relax]{%
|
|
\@ifundefined{glo@#2@type}{%
|
|
\PackageError{glossary}{Glossary entry '#2' undefined}{You need
|
|
to define the entry using \string\storeglosentry\space before
|
|
using it.}}{{%
|
|
\edef\@glostype{x\csname glo@#2@type\endcsname}%
|
|
\@glo@tb=\expandafter\expandafter\expandafter
|
|
{\csname glo@#2@entry\endcsname}%
|
|
\ifx#1\relax
|
|
\edef\@glo@cmd{\expandafter\noexpand
|
|
\csname\@glostype\endcsname{\the\@glo@tb}}%
|
|
\else
|
|
\edef\@glo@cmd{\expandafter\noexpand
|
|
\csname\@glostype\endcsname{\the\@glo@tb,#1}}%
|
|
\fi
|
|
\@glo@cmd{#3}%
|
|
}}}
|
|
% \end{macrocode}
|
|
% As above, but the text displayed in the document is constructed from
|
|
% the \gloskey{name} key.
|
|
% \begin{macrocode}
|
|
\newcommand{\gls}[2][\relax]{%
|
|
\useGlosentry[#1]{#2}{%
|
|
\csname glo@#2@name\endcsname}}
|
|
% \end{macrocode}
|
|
% This command was defined in earlier verions, but doesn't
|
|
% work very well, currently retained for backwards compatibility,
|
|
% but may well be removed at a later date.
|
|
% \begin{macrocode}
|
|
\providecommand{\saveglosentry}[3][glossary]{%
|
|
\PackageWarning{glossary}{\string\saveglosentry\space is obsolete,
|
|
please use \string\storeglosentry\space instead}%
|
|
\expandafter\def\csname glo@#2@type\endcsname{#1}%
|
|
\expandafter\def\csname glo@#2@entry\endcsname{%
|
|
name={#2},description={#3}}}
|
|
% \end{macrocode}
|
|
%Set up default number formats, dependent on the package \pkgopt{number}
|
|
% option. Define default page compositor. Any redefinition of the
|
|
% page compositor will need to come before the ".ist" file is
|
|
% written. The other commands can be redefined at any point before
|
|
% \icmdname{printglossary}.
|
|
%
|
|
% Define a command to set up the glossary counter.
|
|
% The optional argument specifies the glossary type
|
|
% (defaults to the main glossary). The mandatory
|
|
% command is the name of the counter, or "none".
|
|
% \begin{macrocode}
|
|
\newcommand*{\@gls@setnumbering}[2][glossary]{%
|
|
% \end{macrocode}
|
|
% If no numbering (\pkgopt[none]{number}):
|
|
% \begin{macrocode}
|
|
\ifthenelse{\equal{#2}{none}}{%
|
|
\def\pagecompositor{-}
|
|
\expandafter\def\csname @#1@delimN\endcsname{}
|
|
\expandafter\def\csname @#1@delimR\endcsname{}
|
|
\expandafter\def\csname glsX#1Xnumformat\endcsname##1{}}{%
|
|
% \end{macrocode}
|
|
% If "number=page", set the page compositor to
|
|
% "-" (dash) otherwise set it to "." (dot).
|
|
% \begin{macrocode}
|
|
\ifthenelse{\equal{#2}{page}}{%
|
|
\def\pagecompositor{-}}{%
|
|
\def\pagecompositor{.}}
|
|
% \end{macrocode}
|
|
% Set up delimiters and formats
|
|
% \begin{macrocode}
|
|
\expandafter\def\csname @#1@delimN\endcsname{, }
|
|
\expandafter\def\csname @#1@delimR\endcsname{--}
|
|
\ifglshyper
|
|
\expandafter\def\csname glsX#1Xnumformat\endcsname##1{%
|
|
\hyperrm[#2]{##1}}%
|
|
\else
|
|
\expandafter\def\csname glsX#1Xnumformat\endcsname##1{##1}\fi
|
|
}
|
|
% \end{macrocode}
|
|
% End of "\@gls@setnumbering" definition:
|
|
% \begin{macrocode}
|
|
}
|
|
% \end{macrocode}
|
|
% Now call it to set up current numbering:
|
|
% \begin{macrocode}
|
|
\@gls@setnumbering{\gls@glossary@number}
|
|
% \end{macrocode}
|
|
% Provide a means of changing the page number format for a
|
|
% given glossary type.
|
|
% \begin{macrocode}
|
|
\newcommand{\glsnumformat}[1]{%
|
|
\@ifundefined{\@glostype}{\def\@glostype{glossary}}{}%
|
|
\@ifundefined{glsX\@glostype Xnumformat}{%
|
|
\PackageError{glossary}{Glossary type '\@glostype' undefined}{}}{%
|
|
\csname glsX\@glostype Xnumformat\endcsname{#1}}}
|
|
% \end{macrocode}
|
|
% Set the default glossary type
|
|
% \begin{macrocode}
|
|
\def\@glostype{glossary}
|
|
% \end{macrocode}
|
|
% Make the delimiters etc depend on the glossary type.
|
|
% "\@glostype" should be set to the appropriate glossary type
|
|
% before using any of these commands.
|
|
% \begin{macrocode}
|
|
\newcommand{\delimN}{\csname @\@glostype @delimN\endcsname}
|
|
\newcommand{\delimR}{\csname @\@glostype @delimR\endcsname}
|
|
\newcommand{\gloitem}{\csname @\@glostype @gloitem\endcsname}
|
|
\newcommand{\gloskip}{\csname @\@glostype @gloskip\endcsname}
|
|
\newcommand{\delimT}{\glsafternum
|
|
\csname @\@glostype @delimT\endcsname}
|
|
\newcommand{\glodelim}{\csname @\@glostype @glodelim\endcsname
|
|
\glsbeforenum}
|
|
% \end{macrocode}
|
|
% Add facility to insert text between groups. By default these do
|
|
% nothing.
|
|
% \begin{macrocode}
|
|
\newcommand{\glogroupSymbols}{}
|
|
\newcommand{\glogroupNumbers}{}
|
|
\newcommand{\glogroupA}{}
|
|
\newcommand{\glogroupB}{}
|
|
\newcommand{\glogroupC}{}
|
|
\newcommand{\glogroupD}{}
|
|
\newcommand{\glogroupE}{}
|
|
\newcommand{\glogroupF}{}
|
|
\newcommand{\glogroupG}{}
|
|
\newcommand{\glogroupH}{}
|
|
\newcommand{\glogroupI}{}
|
|
\newcommand{\glogroupJ}{}
|
|
\newcommand{\glogroupK}{}
|
|
\newcommand{\glogroupL}{}
|
|
\newcommand{\glogroupM}{}
|
|
\newcommand{\glogroupN}{}
|
|
\newcommand{\glogroupO}{}
|
|
\newcommand{\glogroupP}{}
|
|
\newcommand{\glogroupQ}{}
|
|
\newcommand{\glogroupR}{}
|
|
\newcommand{\glogroupS}{}
|
|
\newcommand{\glogroupT}{}
|
|
\newcommand{\glogroupU}{}
|
|
\newcommand{\glogroupV}{}
|
|
\newcommand{\glogroupW}{}
|
|
\newcommand{\glogroupX}{}
|
|
\newcommand{\glogroupY}{}
|
|
\newcommand{\glogroupZ}{}
|
|
% \end{macrocode}
|
|
% Allow user to change number format for different
|
|
% glossary types.
|
|
% \begin{macrocode}
|
|
\define@key{glossnum}{glsnumformat}{\def\@glsnumformat{#1}}
|
|
\define@key{glossnum}{type}{\def\@glsnumtype{#1}}
|
|
\define@key{glossnum}{delimN}{\def\@delimN{#1}}
|
|
\define@key{glossnum}{delimR}{\def\@delimR{#1}}
|
|
\define@key{glossnum}{delimT}{\def\@delimT{#1}}
|
|
\define@key{glossnum}{gloskip}{\def\@gloskip{#1}}
|
|
\define@key{glossnum}{glodelim}{\def\@glodelim{#1}}
|
|
% \end{macrocode}
|
|
% Define a command that will ignore its argument. This is used
|
|
% when suppressing the page numbers.
|
|
% \begin{macrocode}
|
|
\providecommand{\ignore}[1]{}
|
|
% \end{macrocode}
|
|
% Define command that allows the user to modify the style for a
|
|
% given glossary type.
|
|
% \begin{macrocode}
|
|
\newcommand{\setglossary}[1]{%
|
|
\def\@glsnumformat{}%
|
|
\def\@glsnumtype{glossary}%
|
|
\def\@delimN{@dontchange@}%
|
|
\def\@delimR{@dontchange@}%
|
|
\def\@delimT{@dontchange@}%
|
|
\def\@gloskip{@dontchange@}%
|
|
\def\@glodelim{@dontchange@}%
|
|
\setkeys{glossnum}{#1}\relax
|
|
\@ifundefined{print\@glsnumtype}{%
|
|
\PackageError{glossary}{Invalid glossary type '\@glsnumtype'}{%
|
|
Glossary type '\@glsnumtype' has not been defined}
|
|
}{%
|
|
\ifthenelse{\equal{\@glsnumformat}{}}{}{%
|
|
\expandafter\xdef\csname glsX\@glsnumtype Xnumformat\endcsname{%
|
|
\noexpand\csname\@glsnumformat\noexpand\endcsname}%
|
|
\ifthenelse{\equal{\@glsnumformat}{ignore}}{%
|
|
\expandafter\xdef\csname @\@glsnumtype @delimN\endcsname{}%
|
|
\expandafter\xdef\csname @\@glsnumtype @delimR\endcsname{}%
|
|
}{}%
|
|
}%
|
|
%
|
|
\ifthenelse{\equal{\@delimN}{@dontchange@}}{}{%
|
|
\expandafter\xdef\csname @\@glsnumtype @delimN\endcsname{%
|
|
\@delimN}}%
|
|
%
|
|
\ifthenelse{\equal{\@delimR}{@dontchange@}}{}{%
|
|
\expandafter\xdef\csname @\@glsnumtype @delimR\endcsname{%
|
|
\@delimR}}%
|
|
%
|
|
\ifthenelse{\equal{\@delimT}{@dontchange@}}{}{%
|
|
\expandafter\xdef\csname @\@glsnumtype @delimT\endcsname{%
|
|
\@delimT}}%
|
|
%
|
|
\ifthenelse{\equal{\@gloskip}{@dontchange@}}{}{%
|
|
\expandafter\xdef\csname @\@glsnumtype @gloskip\endcsname{%
|
|
\@gloskip}}%
|
|
%
|
|
\ifthenelse{\equal{\@glodelim}{@dontchange@}}{}{%
|
|
\expandafter\xdef\csname @\@glsnumtype @glodelim\endcsname{%
|
|
\@glodelim}%
|
|
}%
|
|
}}
|
|
% \end{macrocode}
|
|
% Now define the command \icmdname{printglossary} which will print the
|
|
% contents of the glossary file. Define the file extension for the main
|
|
% glossary:
|
|
% \begin{macrocode}
|
|
\newcommand{\@gls@glossary@inext}{gls}
|
|
% \end{macrocode}
|
|
% The optional argument is the glossary type, the default is the
|
|
% main glossary. This sets "\gls@number" to "\gls@#1@number"
|
|
% before reading in the file. This ensures that \icmdname{hyperrm} etc
|
|
% use the correct counter in the target name.
|
|
% \begin{macrocode}
|
|
\newcommand\printglossary[1][glossary]{%
|
|
\def\@glostype{#1}%
|
|
\@ifundefined{#1name}{%
|
|
\renewcommand{\@glossaryname}{\glossaryname}}{%
|
|
\renewcommand{\@glossaryname}{\csname #1name\endcsname}}%
|
|
\@ifundefined{short#1name}{%
|
|
\renewcommand{\@shortglossaryname}{\@glossaryname}}{%
|
|
\renewcommand{\@shortglossaryname}{\csname short#1name\endcsname}}%
|
|
\expandafter\let\expandafter\gls@number\csname gls@#1@number\endcsname
|
|
\@input@{\jobname.\csname @gls@#1@inext\endcsname}}
|
|
% \end{macrocode}
|
|
% Define contextual names. Changed \verb/\newcommand/
|
|
% to \verb/\providecommand/ in version 2.2.
|
|
% \begin{macrocode}
|
|
\providecommand{\glossaryname}{Glossary}
|
|
\newcommand{\shortglossaryname}{\glossaryname}
|
|
\newcommand{\entryname}{Notation}
|
|
\newcommand{\descriptionname}{Description}
|
|
\newcommand{\istfilename}{\jobname.ist}
|
|
\def\@glossaryname{\glossaryname}
|
|
\def\@shortglossaryname{\shortglossaryname}
|
|
% \end{macrocode}
|
|
% Version 2.4 also writes ist filename to aux file. This
|
|
% is only used by makeglos.pl, so ignore.
|
|
% \begin{macrocode}
|
|
\newcommand{\@istfilename}[1]{}
|
|
% \end{macrocode}
|
|
% Define command to generate glossary title (new to
|
|
% version 2.24)
|
|
% \begin{macrocode}
|
|
\providecommand{\glossarytitle}{%
|
|
\@ifundefined{chapter}%
|
|
% \end{macrocode}
|
|
% "\chapter" not defined, use "\section*"
|
|
% \begin{macrocode}
|
|
{%
|
|
\ifgls@hypertoc
|
|
% \end{macrocode}
|
|
% \pkgopt{hypertoc} option used, so use "\phantomsection" to add
|
|
% anchor \emph{before} "\section*"
|
|
% \begin{macrocode}
|
|
\phantomsection
|
|
\@glosaddtoc{section}%
|
|
\section*{\@glossaryname}\relax
|
|
\else
|
|
% \end{macrocode}
|
|
% \pkgopt[false]{hypertoc}: add to toc after "\section*"
|
|
% \begin{macrocode}
|
|
\section*{\@glossaryname}\relax
|
|
% \end{macrocode}
|
|
% only add contentsline if toc=true
|
|
% \begin{macrocode}
|
|
\ifgls@toc\@glosaddtoc{section}\fi
|
|
\fi}%
|
|
% \end{macrocode}
|
|
% "\chapter" defined, but has user requested "\section" instead?
|
|
% \begin{macrocode}
|
|
{%
|
|
\ifthenelse{\boolean{gls@section}}%
|
|
{%
|
|
% \end{macrocode}
|
|
% user requested "\section"
|
|
% \begin{macrocode}
|
|
\ifgls@hypertoc
|
|
% \end{macrocode}
|
|
% User request \pkgopt[true]{hypertoc}, so add anchor \emph{before}
|
|
% "\section":
|
|
% \begin{macrocode}
|
|
\phantomsection
|
|
\@glosaddtoc{section}%
|
|
\section*{\@glossaryname}\relax
|
|
\else
|
|
% \end{macrocode}
|
|
% \pkgopt[false]{hypertoc} so add contentsline (if applicable) after
|
|
% "\section"
|
|
% \begin{macrocode}
|
|
\section*{\@glossaryname}\relax
|
|
\ifgls@toc\@glosaddtoc{section}\fi
|
|
\fi}%
|
|
{%
|
|
% \end{macrocode}
|
|
% User has not requested "\section", so use "\chapter"
|
|
% \begin{macrocode}
|
|
\ifgls@hypertoc
|
|
% \end{macrocode}
|
|
% User has requested \pkgopt[true]{hypertoc}.
|
|
% Chapters usually start a new page, so to ensure
|
|
% anchor is at the top of the correct page, issue
|
|
% a "\clearpage" (or "\cleardoublepage") to place the
|
|
% anchor at the correct place.
|
|
% \begin{macrocode}
|
|
\@ifundefined{if@twoside}{%
|
|
% \end{macrocode}
|
|
% Document class doesn't support twosided documents so
|
|
% just do "\clearpage"
|
|
% \begin{macrocode}
|
|
\clearpage}{%
|
|
\if@twoside
|
|
% \end{macrocode}
|
|
% Document is two-sided
|
|
% If "\cleardoublepage" is defined, use that
|
|
% otherwise just do "\clearpage"
|
|
% \begin{macrocode}
|
|
\@ifundefined{cleardoublepage}{\clearpage}{\cleardoublepage}%
|
|
\else
|
|
% \end{macrocode}
|
|
% One-sided document, just do "\clearpage"
|
|
% \begin{macrocode}
|
|
\clearpage
|
|
\fi}%
|
|
% \end{macrocode}
|
|
% add anchor before "\chapter"
|
|
% \begin{macrocode}
|
|
\phantomsection
|
|
\@glosaddtoc{chapter}%
|
|
\fi
|
|
\chapter*{\@glossaryname}\relax
|
|
% \end{macrocode}
|
|
% both \pkgopt[true]{hypertoc} and \pkgopt[true]{toc}, so won't get
|
|
% toc entry twice.)
|
|
% \begin{macrocode}
|
|
\ifgls@toc\@glosaddtoc{chapter}\fi}}
|
|
\markboth{\@shortglossaryname}{\@shortglossaryname}%
|
|
}
|
|
% \end{macrocode}
|
|
% Now define theglossary environment. Version 2.2:
|
|
% check to see if defined already
|
|
% \begin{macrocode}
|
|
\@ifundefined{theglossary}{%
|
|
\newenvironment{theglossary}{}{}}{%
|
|
\PackageWarning{glossary}{Redefining 'theglossary' environment}}
|
|
\renewenvironment{theglossary}{%
|
|
\glossarytitle
|
|
\glossarypreamble\@bef@reglos}{\@ftergl@s\glossarypostamble}
|
|
% \end{macrocode}
|
|
% Provide a means to add text to the beginning or end
|
|
% of the glossary.
|
|
% \begin{macrocode}
|
|
\newcommand{\glossarypreamble}{}
|
|
\newcommand{\glossarypostamble}{}
|
|
% \end{macrocode}
|
|
% By default, add the short title to the table of contents.
|
|
% \begin{macrocode}
|
|
\newcommand{\@glosaddtoc}[1]{%
|
|
\addcontentsline{toc}{#1}{\@shortglossaryname}
|
|
}
|
|
% \end{macrocode}
|
|
% Set up switch to determine whether the item is the first item in
|
|
% the glossary (in the event that a special case is needed for the
|
|
% first item)
|
|
% \begin{macrocode}
|
|
\newif\ifgloitemfirst
|
|
\newcommand{\@bef@reglos}{\global\gloitemfirsttrue\beforeglossary}
|
|
\newcommand{\@ftergl@s}{\afterglossary\global\gloitemfirstfalse}
|
|
% \end{macrocode}
|
|
% Set up defaults.
|
|
% \begin{macrocode}
|
|
\newcommand{\glossaryalignment}{\relax}
|
|
\newcommand{\@gls@align@glossary}{}
|
|
\newcommand{\glosstail}{%
|
|
\@ifundefined{@gls@tail@\@glostype}{%
|
|
\PackageError{glossary}{No glossary tail defined for glossary
|
|
type '\@glostype'}{}}{%
|
|
\csname @gls@tail@\@glostype\endcsname}}
|
|
\newcommand{\@gls@tail@glossary}{}
|
|
\newcommand{\afterglossary}{%
|
|
\@ifundefined{@gls@afterglos@\@glostype}{%
|
|
\PackageError{glossary}{No after glossary defined for glossary
|
|
type '\@glostype'}{}}{%
|
|
\csname @gls@afterglos@\@glostype\endcsname}}
|
|
\newcommand{\beforeglossary}{%
|
|
\@ifundefined{@gls@beforeglos@\@glostype}{%
|
|
\PackageError{glossary}{No before glossary defined for glossary
|
|
type '\@glostype'}{}}{%
|
|
\csname @gls@beforeglos@\@glostype\endcsname}}
|
|
\newcommand{\@gls@beforeglos@glossary}{}
|
|
\newcommand{\@gls@afterglos@glossary}{}
|
|
\newcommand{\@glossary@glodelim}{}
|
|
\newcommand{\@glossary@delimT}{}
|
|
\newcommand{\glsafternum}{}
|
|
\newcommand{\glsbeforenum}{}
|
|
\newcommand{\@glossary@gloskip}{}
|
|
\newcommand{\@glossary@gloitem}[1]{#1}
|
|
% \end{macrocode}
|
|
% Now define what to do depending on which style has been selected.
|
|
% First define command to switch to \pkgopt{list} style:
|
|
% \begin{macrocode}
|
|
\newcommand{\gls@setlist}[1][glossary]{%
|
|
\expandafter\def\csname @gls@beforeglos@#1\endcsname{%
|
|
\begin{description}}%
|
|
\expandafter\def\csname @gls@afterglos@#1\endcsname{%
|
|
\end{description}}%
|
|
\expandafter\def\csname @#1@gloskip\endcsname{\indexspace}%
|
|
\ifthenelse{\equal{\csname gls@#1@number\endcsname}{none}}{%
|
|
\expandafter\def\csname @#1@glodelim\endcsname{}}{%
|
|
\expandafter\def\csname @#1@glodelim\endcsname{, }}%
|
|
\expandafter\def\csname @#1@gloitem\endcsname##1{\item[##1]}%
|
|
\expandafter\def\csname @#1@delimT\endcsname{}
|
|
}
|
|
% \end{macrocode}
|
|
% Next define command to switch to \pkgopt{altlist} style:
|
|
% \begin{macrocode}
|
|
\newcommand{\gls@setaltlist}[1][glossary]{%
|
|
\expandafter\def\csname @gls@beforeglos@#1\endcsname{%
|
|
\begin{description}}%
|
|
\expandafter\def\csname @gls@afterglos@#1\endcsname{%
|
|
\end{description}}%
|
|
\expandafter\def\csname @#1@gloskip\endcsname{\indexspace}%
|
|
\expandafter\def\csname @#1@gloitem\endcsname##1{%
|
|
\item[##1]\mbox{}\nopagebreak\par\nopagebreak}%
|
|
\expandafter\def\csname @#1@glodelim\endcsname{ }%
|
|
\expandafter\def\csname @#1@delimT\endcsname{}
|
|
}
|
|
% \end{macrocode}
|
|
%Now deal with the other styles. I orginally used a \envname{tabular}
|
|
% environment, but obviously this doesn't work for a glossary longer
|
|
% than one page (this package started out as a simple example
|
|
% accompanying one of my tutorials). Nick van Foreest recommended
|
|
% the \envname{supertabular} environment. The \envname{longtable} environment also
|
|
% works, so have both options, and leave it to
|
|
% the user.
|
|
% \begin{macrocode}
|
|
\ifthenelse{\equal{\gls@style}{super}}{
|
|
\IfFileExists{supertab.sty}{\RequirePackage{supertab}}
|
|
{\IfFileExists{supertabular.sty}{\RequirePackage{supertabular}}
|
|
{\PackageError{glossary}{Option "super" chosen, but can't find
|
|
"supertab" package}{If you want the "super" option, you have to have
|
|
the "supertab" package installed.}}}}
|
|
{\RequirePackage{longtable}}
|
|
% \end{macrocode}
|
|
% Define new length specifying the width of the description field.
|
|
% \begin{macrocode}
|
|
\newlength{\descriptionwidth}
|
|
\setlength{\descriptionwidth}{0.6\linewidth}
|
|
% \end{macrocode}
|
|
% If user has defined the command \icmdname{glossaryheader}, use it
|
|
% otherwise use header as specified by glossary style.
|
|
% Added \icmdname{glossarysubheader} in version 2.4. This is provided
|
|
% to add a sub heading, or to add a bit of space between
|
|
% the header row and the table.
|
|
% \begin{macrocode}
|
|
\newcommand{\@glossaryheader}{%
|
|
\@ifundefined{glossaryheader}{\csname @\@glostype @header\endcsname}
|
|
{\glossaryheader}%
|
|
\@ifundefined{glossarysubheader}{}{\glossarysubheader}%
|
|
}
|
|
% \end{macrocode}
|
|
% Define command to set header style. Added \icmdname{glspageheader} in
|
|
% version 2.4. (Third column header)
|
|
% \begin{macrocode}
|
|
\newcommand{\gls@setheader}[1][glossary]{%
|
|
\ifthenelse{\equal{\gls@header}{none}}%
|
|
{%
|
|
\ifthenelse{\equal{\gls@border}{none}}
|
|
{\expandafter\def\csname @#1@header\endcsname{}%
|
|
}{\expandafter\def\csname @#1@header\endcsname{\hline}}%
|
|
}{%
|
|
\ifnum\gls@cols=2\relax
|
|
\ifthenelse{\equal{\gls@border}{none}}
|
|
{%
|
|
\expandafter\def\csname @#1@header\endcsname{%
|
|
\bfseries\entryname & \bfseries \descriptionname\\}}%
|
|
{%
|
|
\expandafter\def\csname @#1@header\endcsname{%
|
|
\hline\bfseries\entryname & \bfseries\descriptionname
|
|
\\\hline\hline}}%
|
|
\else
|
|
\ifthenelse{\equal{\gls@border}{none}}
|
|
{%
|
|
\expandafter\def\csname @#1@header\endcsname{%
|
|
\bfseries\entryname & \bfseries \descriptionname &
|
|
\bfseries \glspageheader \\}}%
|
|
{%
|
|
\expandafter\def\csname @#1@header\endcsname{%
|
|
\hline\bfseries\entryname &\bfseries\descriptionname &
|
|
\bfseries \glspageheader \\\hline\hline}}%
|
|
\fi
|
|
}}
|
|
% \end{macrocode}
|
|
% Define \icmdname{glspageheader} to do nothing, to keep it compatible
|
|
% with earlier versions:
|
|
% \begin{macrocode}
|
|
\newcommand*{\glspageheader}{}
|
|
% \end{macrocode}
|
|
% Define command to set glossary alignment and borders
|
|
% \begin{macrocode}
|
|
\newcommand{\gls@setalignment}[1][glossary]{%
|
|
\ifthenelse{\equal{\gls@border}{none}}
|
|
{
|
|
\ifnum\gls@cols=2\relax
|
|
\expandafter\def\csname @gls@align@#1\endcsname{%
|
|
@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}}
|
|
\else
|
|
\expandafter\def\csname @gls@align@#1\endcsname{%
|
|
@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}l}
|
|
\fi
|
|
%
|
|
\expandafter\def\csname @gls@tail@#1\endcsname{}%
|
|
}{%
|
|
\ifnum\gls@cols=2\relax
|
|
\expandafter\def\csname @gls@align@#1\endcsname{%
|
|
|@{\hspace{\tabcolsep}\bfseries
|
|
}lp{\descriptionwidth}|}
|
|
\else
|
|
\expandafter\def\csname @gls@align@#1\endcsname{%
|
|
|@{\hspace{\tabcolsep}\bfseries
|
|
}lp{\descriptionwidth}l|}
|
|
\fi
|
|
%
|
|
\expandafter\def\csname @gls@tail@#1\endcsname{\hline}%
|
|
}%
|
|
%
|
|
\expandafter\def\csname @#1@delimT\endcsname{\\}
|
|
%
|
|
\ifnum\gls@cols=2\relax
|
|
\expandafter\def\csname @#1@gloskip\endcsname{& \\}%
|
|
\ifthenelse{\equal{\csname gls@#1@number\endcsname}{none}}{%
|
|
\expandafter\def\csname @#1@glodelim\endcsname{}}{%
|
|
\expandafter\def\csname @#1@glodelim\endcsname{, }}%
|
|
\else
|
|
\expandafter\def\csname @#1@gloskip\endcsname{& & \\}%
|
|
\expandafter\def\csname @#1@glodelim\endcsname{& }%
|
|
\fi
|
|
\expandafter\def\csname @#1@gloitem\endcsname##1{##1 &}%
|
|
}
|
|
% \end{macrocode}
|
|
% Need a way to avoid conflict with the \styname{array} package. In an
|
|
% earlier version I defined a new column type if the \styname{array}
|
|
% package was being used, however this restricts the ability
|
|
% to have multiple glossaries with different column alignments.
|
|
% \begin{macrocode}
|
|
\newcommand{\@st@rtglostable}[2]{%
|
|
\gls@ta={\begin{#1}}\gls@tb=\expandafter{#2}%
|
|
\edef\@st@rtglost@ble{\the\gls@ta{\the\gls@tb}}
|
|
\@st@rtglost@ble}
|
|
% \end{macrocode}
|
|
% Define command to switch to \pkgopt{super} style:
|
|
% \begin{macrocode}
|
|
\newcommand{\gls@setsuper}[1][glossary]{%
|
|
\gls@setalignment[#1]%
|
|
\gls@setheader[#1]%
|
|
%
|
|
\expandafter\def\csname @gls@beforeglos@#1\endcsname{%
|
|
\tablehead{\@glossaryheader}\tabletail{\glosstail}%
|
|
\if\glossaryalignment\relax
|
|
\expandafter\let\expandafter\@glossaryalignment
|
|
\csname @gls@align@#1\endcsname
|
|
\else
|
|
\let\@glossaryalignment\glossaryalignment
|
|
\fi
|
|
\@st@rtglostable{supertabular}\@glossaryalignment}
|
|
%
|
|
\expandafter\def\csname @gls@afterglos@#1\endcsname{%
|
|
\end{supertabular}}%
|
|
}
|
|
% \end{macrocode}
|
|
% Define command to switch to \pkgopt{long} style:
|
|
% \begin{macrocode}
|
|
\newcommand{\gls@setlong}[1][glossary]{%
|
|
\gls@setalignment[#1]%
|
|
\gls@setheader[#1]%
|
|
%
|
|
\expandafter\def\csname @gls@beforeglos@#1\endcsname{%
|
|
\if\relax\glossaryalignment
|
|
\expandafter\let\expandafter\@glossaryalignment
|
|
\csname @gls@align@#1\endcsname
|
|
\else
|
|
\let\@glossaryalignment\glossaryalignment
|
|
\fi
|
|
\@st@rtglostable{longtable}{\@glossaryalignment}
|
|
\@glossaryheader\endhead\glosstail\endfoot}
|
|
%
|
|
\expandafter\def\csname @gls@afterglos@#1\endcsname{%
|
|
\end{longtable}}%
|
|
}
|
|
% \end{macrocode}
|
|
% Define command to set the glossary style.
|
|
% \begin{macrocode}
|
|
\newcommand{\@setglossarystyle}[1][glossary]{%
|
|
\@ifundefined{gls@set\gls@style}{%
|
|
\PackageError{glossary}{Glossary style '\gls@style' undefined}{}}{%
|
|
\ifthenelse{\equal{\gls@number}{}}{}{%
|
|
\expandafter\edef\csname gls@#1@number\endcsname{\gls@number}%
|
|
\@gls@setnumbering[#1]{\gls@number}%
|
|
}%
|
|
\csname gls@set\gls@style\endcsname[#1]}}
|
|
% \end{macrocode}
|
|
% Set main glossary style as per package options
|
|
% \begin{macrocode}
|
|
\let\gls@number\gls@glossary@number
|
|
\@setglossarystyle
|
|
% \end{macrocode}
|
|
% Define keys to change glossary style. The \pkgopt{style} key sets
|
|
% the basic style.
|
|
% \begin{macrocode}
|
|
\define@key{glosstyle}
|
|
{style}
|
|
{\ifthenelse{\equal{#1}{list} \or \equal{#1}{altlist}
|
|
\or \equal{#1}{super} \or \equal{#1}{long}}
|
|
{\def\gls@style{#1}}
|
|
{\PackageError{glossary}
|
|
{Unknown glossary style '#1'}
|
|
{Available styles are: list, altlist, super and long}}}
|
|
% \end{macrocode}
|
|
% The \pkgopt{header} key should only be used in conjunction with
|
|
% one of the tabular-type styles. If set to \pkgoptval{plain}{header}, a
|
|
% header row will be used.
|
|
% \begin{macrocode}
|
|
\define@key{glosstyle}
|
|
{header}[plain]{\ifthenelse{\equal{#1}{none} \or \equal{#1}{plain}}
|
|
{\def\gls@header{#1}}
|
|
{\PackageError{glossary}
|
|
{Unknown glossary style '#1'}
|
|
{Available styles are: none and plain}}}
|
|
% \end{macrocode}
|
|
% The \pkgopt{border} key should only be used in conjunction with one
|
|
% of the tabular-type styles. If set to \pkgoptval{plain}{border}, a border will
|
|
% be placed around the glossary.
|
|
% \begin{macrocode}
|
|
\define@key{glosstyle}
|
|
{border}[plain]{\ifthenelse{\equal{#1}{none} \or \equal{#1}{plain}}
|
|
{\def\gls@border{#1}}
|
|
{\PackageError{glossary}
|
|
{Unknown glossary border '#1'}
|
|
{Available styles are: none and plain}}}
|
|
% \end{macrocode}
|
|
% The \pkgopt{cols} key should only be used in conjunction with one of
|
|
% the tabular-type styles. If set to \pkgoptval{2}{cols}, the description and page
|
|
% list will both be placed in the second column, if set to \pkgoptval{3}{cols},
|
|
% the description will go in the second column, and the page list
|
|
% will go in the third column.
|
|
% \begin{macrocode}
|
|
\define@key{glosstyle}{cols}{\gls@cols=#1\relax
|
|
\ifthenelse{\gls@cols<2 \or \gls@cols>3}
|
|
{\PackageError{glossary}
|
|
{invalid number of columns}
|
|
{The cols option can only be 2 or 3}}
|
|
{}}
|
|
% \end{macrocode}
|
|
% The \pkgopt{number} key may either be \pkgoptval{none}{number} or the name of a counter.
|
|
% \begin{macrocode}
|
|
\define@key{glosstyle}
|
|
{number}
|
|
{\ifthenelse{\equal{#1}{none}}
|
|
{\def\gls@number{#1}}
|
|
{\@ifundefined{c@#1}{
|
|
\PackageError{glossary}
|
|
{Unknown glossary number style '#1'}
|
|
{You may either specify "none" or the name of a counter,
|
|
e.g. "section"}\def\gls@number{page}}{\def\gls@number{#1}}}}
|
|
% \end{macrocode}
|
|
% Provide a means of setting the style for a given glossary type.
|
|
% \begin{macrocode}
|
|
\newcommand{\setglossarystyle}[2][glossary]{%
|
|
\def\gls@number{}%
|
|
\setkeys{glosstyle}{#2}%
|
|
\@setglossarystyle[#1]%
|
|
}
|
|
% \end{macrocode}
|
|
% Set the delimiter for the case where there is no numbering
|
|
% and there aren't 3 columns.
|
|
% \begin{macrocode}
|
|
\ifthenelse{\equal{\gls@glossary@number}{none} \and \gls@cols<3}{%
|
|
\renewcommand{\@glossary@glodelim}{}}{}
|
|
% \end{macrocode}
|
|
% \subsection{Makeindex style file}
|
|
%This is the code to generate the ".ist" file.
|
|
% First define a switch that governs whether or not to write the
|
|
% ist file.
|
|
% \begin{macrocode}
|
|
\newif\ifist
|
|
\let\noist=\istfalse
|
|
\if@filesw\isttrue\else\istfalse\fi
|
|
% \end{macrocode}
|
|
% Provide a command to write the ist file. This will cause
|
|
% a problem with \styname{ngerman} because the behaviour
|
|
% of the double quote character changes. Any packages that modify
|
|
% this character should be loaded after the ".ist" file is written.
|
|
% \begin{macrocode}
|
|
\newwrite\istfile
|
|
\catcode`\%11\relax
|
|
\newcommand{\writeist}{
|
|
\protected@write\@auxout{}{\protect\@istfilename{\istfilename}}
|
|
\openout\istfile=\istfilename
|
|
\write\istfile{% makeindex style file created by LaTeX for document "\jobname" on \the\year-\the\month-\the\day}
|
|
\write\istfile{keyword "\string\\glossaryentry"}
|
|
\write\istfile{preamble "\string\\begin{theglossary}"}
|
|
\write\istfile{postamble "\string\n\string\\end{theglossary}\string\n"}
|
|
\write\istfile{group_skip "\string\\gloskip "}
|
|
\write\istfile{item_0 "\string\n\string\n\string\\gloitem "}
|
|
\write\istfile{delim_0 "\string\n\string\\glodelim "}
|
|
\write\istfile{page_compositor "\pagecompositor"}
|
|
\write\istfile{delim_n "\string\\delimN "}
|
|
\write\istfile{delim_r "\string\\delimR "}
|
|
\write\istfile{delim_t "\string\\delimT "}
|
|
\write\istfile{headings_flag 1}
|
|
\write\istfile{heading_prefix "\string\\glogroup"}
|
|
\write\istfile{symhead_positive "Symbols"}
|
|
\write\istfile{numhead_positive "Numbers"}
|
|
\closeout\istfile
|
|
}
|
|
\catcode`\%14\relax
|
|
% \end{macrocode}
|
|
%Redefine \icmdname{makeglossary} so that it creates the ".ist" file.
|
|
% Once it is created, the \icmdname{ifist} flag is set to false to prevent
|
|
% repeated creation of the file in the event that another
|
|
% glossary-style type is created. If a different ".ist" file is
|
|
% desired for each glossary type, you will need to precede each
|
|
% "\make"\meta{type} with \icmdname{isttrue} and changed the definition
|
|
% of \icmdname{istfilename}. (This is unlikely to occur unless more than
|
|
% one type of page compositor is required.) If you do this, remember
|
|
% to pass the correct ist file to makeindex. I have removed
|
|
% "\@sanitize" at the
|
|
% recommendation of Ulrich~Diez.
|
|
% \begin{macrocode}
|
|
\renewcommand{\makeglossary}{
|
|
\newwrite\@glossaryfile
|
|
\immediate\openout\@glossaryfile=\jobname.glo
|
|
\renewcommand{\glossary}[1][]{\gdef\@glo@l@bel{##1}%
|
|
\@bsphack \begingroup \@wrglossary }
|
|
\typeout {Writing glossary file \jobname .glo }
|
|
\let \makeglossary \@empty
|
|
\ifist\writeist\fi
|
|
\noist}
|
|
% \end{macrocode}
|
|
% The \icmdname{glossary} command has been modified to allow for an optional
|
|
% argument to modify the label. This is the default definition of
|
|
% \icmdname{glossary}, it doesn't write anything to the ".glo" file.
|
|
% It doesn't use "\setkeys", so "\@sanitize" is used here.
|
|
% Use \icmdname{makeglossary} to redefine it so that entries are written
|
|
% to the ".glo" file.
|
|
% \begin{macrocode}
|
|
\renewcommand{\glossary}[1][]{%
|
|
\@bsphack\begingroup\@sanitize\@index}
|
|
% \end{macrocode}
|
|
%\subsection{Defining a new glossary type}
|
|
% First parameter (optional) is the extension of the log file
|
|
% (information used by "makeglos.pl" but not \LaTeX).
|
|
% Second parameter is the name of new glossary type
|
|
% e.g.\ "notation". Third parameter is the extension of output
|
|
% file (equivalent to "ind" or "glo". Fourth parameter
|
|
% is the extension of input file (equivalent to "idx" or "gls").
|
|
% The fifth parameter (optional) is the format.
|
|
% \begin{macrocode}
|
|
\newcommand{\newglossarytype}[4][glg]{
|
|
\@ifundefined{#2}{%
|
|
\protected@write\@auxout{}{\@newglossarytype[#1]{#2}{#3}{#4}}%
|
|
\def\@glstype{#2}\def\@glsout{#3}\def\@glsin{#4}%
|
|
\expandafter\edef\csname gls@\@glstype @number\endcsname{%
|
|
\gls@glossary@number}%
|
|
\expandafter\gdef\csname glsX\@glstype Xnumformat\endcsname{%
|
|
\glsXglossaryXnumformat}%
|
|
\expandafter\gdef\csname @\@glstype @delimN\endcsname{%
|
|
\@glossary@delimN}%
|
|
\expandafter\gdef\csname @\@glstype @delimR\endcsname{%
|
|
\@glossary@delimR}%
|
|
\expandafter\gdef\csname @gls@\@glstype @inext\endcsname{#4}%
|
|
\expandafter\def\csname @gls@#2@type\endcsname{#4}%
|
|
\expandafter\edef\csname make\@glstype\endcsname{%
|
|
\noexpand\@m@kegl@ss{\@glstype}{\@glsout}}
|
|
\expandafter\edef\csname \@glstype\endcsname{%
|
|
\noexpand\@gl@ss@ary{\@glstype}}
|
|
\expandafter\edef\csname x\@glstype\endcsname{%
|
|
\noexpand\@Gl@ss@ary{\@glstype}}
|
|
\@namedef{print\@glstype}{%
|
|
\printglossary[#2]}%
|
|
}{\PackageError{glossary}{Command
|
|
\expandafter\string\csname #2\endcsname \space already defined}{%
|
|
You can't call your new glossary type '#2' because there already
|
|
exists a command with this name}}%
|
|
\@@n@wglostype}
|
|
\newcommand{\@@n@wglostype}[1][]{%
|
|
\setglossarystyle[\@glstype]{#1}}
|
|
% \end{macrocode}
|
|
% The command "\@newglossarytype" is written to the auxiliary file
|
|
% and is only used by makeglos.pl. \LaTeX\ should ignore it.
|
|
% \begin{macrocode}
|
|
\newcommand{\@newglossarytype}[4][glg]{}
|
|
% \end{macrocode}
|
|
% Define equivalent of \icmdname{makeglossary}:
|
|
% \begin{macrocode}
|
|
\newcommand\@m@kegl@ss[2]{%
|
|
\expandafter\newwrite\csname @#1file\endcsname
|
|
\expandafter\immediate\expandafter
|
|
\openout\csname @#1file\endcsname=\jobname.#2
|
|
\typeout {Writing #1 file \jobname .#2 }
|
|
\expandafter\let \csname make#1\endcsname \@empty
|
|
\ifist\writeist\fi
|
|
\expandafter\def\csname the#1num\endcsname{\thepage}
|
|
\noist
|
|
}
|
|
% \end{macrocode}
|
|
% Define the equivalent of \icmdname{glossary}.
|
|
% \begin{macrocode}
|
|
\newcommand\@gl@ss@ary[2][]{\@ifundefined{@#2file}{%
|
|
\@bsphack\begingroup\@sanitize \@index}{%
|
|
\gdef\@glo@l@bel{#1}%
|
|
\@bsphack \begingroup \@wrglossary[#2]}}
|
|
% \end{macrocode}
|
|
% Define the equivalent of \icmdname{xglossary}.
|
|
% \begin{macrocode}
|
|
\newcommand{\@Gl@ss@ary}{%
|
|
\renewcommand{\@@wrglossary}[1]{%
|
|
\glossref{\@glo@l@bel}{##1}\renewcommand{\@@wrglossary}{}}%
|
|
\@gl@ss@ary}
|
|
% \end{macrocode}
|
|
% The command \icmdname{newglossarytype} should only be used in the preamble.
|
|
% \begin{macrocode}
|
|
\@onlypreamble{\newglossarytype}
|
|
% \end{macrocode}
|
|
%\subsection{Acronyms}
|
|
% Define \icmdname{newacronym}[\meta{cmd-name}]\{\meta{abbrv}\}\{\meta{long name}\}\{\meta{glos entry}\}
|
|
% \begin{macrocode}
|
|
\newcommand\@acrnmsh{}
|
|
\newcommand\@sacrnmsh{}
|
|
\newcommand\@acrnmln{}
|
|
\newcommand\@acrnmcmd{}
|
|
\newcommand\@acrnmgls{}
|
|
\newcommand\@acrnmins{}
|
|
% \end{macrocode}
|
|
% List of all defined acronyms.
|
|
% \begin{macrocode}
|
|
\toksdef\@glo@tb=2
|
|
\newcommand{\@acr@list}{}
|
|
% \end{macrocode}
|
|
% append acronym to list
|
|
% \begin{macrocode}
|
|
\newcommand{\@acr@addtolist}[1]{\edef\@glo@ta{#1}%
|
|
\ifthenelse{\equal{\@acr@list}{}}{%
|
|
\edef\@acr@list{\@glo@ta}}{%
|
|
\@glo@tb=\expandafter{\@acr@list}%
|
|
\edef\@acr@list{\the\@glo@tb,\@glo@ta}}}
|
|
% \end{macrocode}
|
|
% Specify how to control the way the name key is
|
|
% set for acronyms.
|
|
% \begin{macrocode}
|
|
\newcommand{\@acronymnamefmt}{\glolong\ (\gloshort)}
|
|
\newcommand{\setacronymnamefmt}[1]{\def\@acronymnamefmt{#1}}
|
|
% \end{macrocode}
|
|
% Specify how to control the way the description key is
|
|
% set for acronyms.
|
|
% \begin{macrocode}
|
|
\newcommand{\@acronymdescfmt}{\glodesc}
|
|
\newcommand{\setacronymdescfmt}[1]{\def\@acronymdescfmt{#1}}
|
|
% \end{macrocode}
|
|
% Format the acronym abbreviation in the format specified
|
|
% by \verb'\acronymfont'. This simply prints its
|
|
% argument by default.
|
|
% \begin{macrocode}
|
|
\newcommand{\acronymfont}[1]{#1}
|
|
% \end{macrocode}
|
|
% This command has been restructured as from v2.17
|
|
% \begin{macrocode}
|
|
\newcommand{\newacronym}[4][]{%
|
|
\ifthenelse{\equal{#1}{}}{\renewcommand\@acrnmcmd{#2}}{%
|
|
\renewcommand\@acrnmcmd{#1}}
|
|
\@ifundefined{\@acrnmcmd}{%
|
|
\expandafter\newcommand\csname\@acrnmcmd short\endcsname{%
|
|
#2\protect\glsxspace}
|
|
\expandafter\newcommand\csname\@acrnmcmd @nx@short\endcsname{#2}
|
|
\expandafter\newcommand\csname\@acrnmcmd long\endcsname{%
|
|
#3\protect\glsxspace}
|
|
\expandafter\newcommand\csname\@acrnmcmd @nx@long\endcsname{#3}
|
|
\def\@acrn@entry{#4}%
|
|
{%
|
|
% extract description
|
|
\expandafter\@gls@getdescr\expandafter{\@acrn@entry}%
|
|
\let\glodesc\@glo@desc%
|
|
\def\glolong{#3}%
|
|
\@onelevel@sanitize\glolong
|
|
\def\gloshort{\noexpand\acronymfont{#2}}%
|
|
\@onelevel@sanitize\gloshort
|
|
\expandafter\protected@xdef\expandafter\@acrnamefmt{\@acronymnamefmt}
|
|
\expandafter\protected@xdef\expandafter\@acrdesc{\@acronymdescfmt}
|
|
}%
|
|
\@acr@addtolist{\@acrnmcmd}
|
|
\@glo@tb=\expandafter{\@acrn@entry}%
|
|
\protected@edef\@acr@glsentry{name={\@acrnamefmt},%
|
|
format=glsnumformat,sort={\@acrnmcmd},\the\@glo@tb,%
|
|
description={\@acrdesc}}%
|
|
\@glo@tb=\expandafter{\@acr@glsentry}%
|
|
\newboolean{\@acrnmcmd first}\setboolean{\@acrnmcmd first}{true}
|
|
\expandafter\protected@edef\csname \@acrnmcmd\endcsname{%
|
|
\noexpand\@ifstar{\csname @s@\@acrnmcmd\endcsname}{%
|
|
\csname @\@acrnmcmd\endcsname}}
|
|
\ifglshyperacronym % hyperlinks
|
|
% unstarred version
|
|
\expandafter\protected@edef\csname @\@acrnmcmd\endcsname{%
|
|
\noexpand\ifthenelse{\noexpand\boolean{\@acrnmcmd first}}{%
|
|
\csname\@acrnmcmd @nx@long\endcsname\noexpand\@acrnmins\
|
|
(\noexpand\xacronym{\the\@glo@tb}{%
|
|
\noexpand\acronymfont{\csname\@acrnmcmd @nx@short\endcsname}%
|
|
})\noexpand\unsetacronym{\@acrnmcmd}%
|
|
}{\noexpand\xacronym{\the\@glo@tb}{%
|
|
\noexpand\acronymfont{\csname\@acrnmcmd @nx@short\endcsname}%
|
|
\noexpand\@acrnmins}}\noexpand\glsxspace}
|
|
% starred version
|
|
\expandafter\protected@edef\csname @s@\@acrnmcmd\endcsname{%
|
|
\noexpand\ifthenelse{\noexpand\boolean{\@acrnmcmd first}}{%
|
|
\noexpand\expandafter\noexpand\MakeUppercase
|
|
\csname\@acrnmcmd @nx@long\endcsname\noexpand\@acrnmins\
|
|
(\noexpand\xacronym{\the\@glo@tb}{%
|
|
\noexpand\acronymfont{\csname\@acrnmcmd @nx@short\endcsname}%
|
|
})%
|
|
\noexpand\unsetacronym{\@acrnmcmd}}{%
|
|
\noexpand\xacronym{\the\@glo@tb}{%
|
|
\noexpand\acronymfont{\noexpand\expandafter\noexpand\MakeUppercase
|
|
\csname\@acrnmcmd @nx@short\endcsname}%
|
|
\noexpand\@acrnmins}}\noexpand\glsxspace}
|
|
\else % no hyperlinks
|
|
% unstarred version
|
|
\expandafter\protected@edef\csname @\@acrnmcmd\endcsname{%
|
|
\noexpand\ifthenelse{\noexpand\boolean{\@acrnmcmd first}}{%
|
|
\csname\@acrnmcmd @nx@long\endcsname\noexpand\@acrnmins\
|
|
(\noexpand\acronym{\the\@glo@tb}{%
|
|
\noexpand\acronymfont{\csname\@acrnmcmd @nx@short\endcsname}%
|
|
})\noexpand\unsetacronym{\@acrnmcmd}%
|
|
}{\noexpand\acronym{\the\@glo@tb}{%
|
|
\noexpand\acronymfont{\csname\@acrnmcmd @nx@short\endcsname}%
|
|
\noexpand\@acrnmins}}%
|
|
\noexpand\glsxspace}
|
|
% starred version
|
|
\expandafter\protected@edef\csname @s@\@acrnmcmd\endcsname{%
|
|
\noexpand\ifthenelse{\noexpand\boolean{\@acrnmcmd first}}{%
|
|
\noexpand\expandafter
|
|
\noexpand\MakeUppercase
|
|
\csname\@acrnmcmd @nx@long\endcsname\noexpand\@acrnmins\
|
|
(\noexpand\acronym{\the\@glo@tb}{%
|
|
\noexpand\acronymfont{\csname\@acrnmcmd @nx@short\endcsname}%
|
|
})%
|
|
\noexpand\unsetacronym{\@acrnmcmd}}{%
|
|
\noexpand\acronym{\the\@glo@tb}{%
|
|
\noexpand\acronymfont{\noexpand\expandafter\noexpand\MakeUppercase
|
|
\csname\@acrnmcmd @nx@short\endcsname}%
|
|
\noexpand\@acrnmins}}\noexpand\glsxspace}
|
|
\fi
|
|
}{%
|
|
\PackageError{glossary}{Command '\expandafter\string
|
|
\csname\@acrnmcmd\endcsname' already defined}{%
|
|
The command name specified by \string\newacronym already exists.}}}
|
|
% \end{macrocode}
|
|
% Define a command to use a given acronym.
|
|
% \begin{macrocode}
|
|
\newcommand{\useacronym}{\@ifstar\@suseacronym\@useacronym}
|
|
\newcommand{\@suseacronym}[2][]{{\let\glsxspace\relax
|
|
\def\@acrnmins{#1}\csname @s@#2\endcsname}%
|
|
\setboolean{#2first}{false}}
|
|
\newcommand{\@useacronym}[2][]{{\let\glsxspace\relax
|
|
\def\@acrnmins{#1}\csname @#2\endcsname}%
|
|
\setboolean{#2first}{false}}
|
|
% \end{macrocode}
|
|
% Define a command to use the long form of an acronym without
|
|
% generating a glossary entry. The starred form makes the first
|
|
% character uppercase.
|
|
% \begin{macrocode}
|
|
\newcommand{\acrln}{\@ifstar\@sacrln\@acrln}
|
|
% \end{macrocode}
|
|
% Unstarred form:
|
|
% \begin{macrocode}
|
|
\newcommand{\@acrln}[1]{\@ifundefined{#1long}{%
|
|
\PackageError{glossary}{Acronym '#1' has not been defined}{}}{%
|
|
\csname#1@nx@long\endcsname}}
|
|
% \end{macrocode}
|
|
% Starred form:
|
|
% \begin{macrocode}
|
|
\newcommand{\@sacrln}[1]{\@ifundefined{#1long}{%
|
|
\PackageError{glossary}{Acronym '#1' has not been defined}{}}{%
|
|
\expandafter\expandafter\expandafter
|
|
\MakeUppercase\csname#1@nx@long\endcsname}}
|
|
% \end{macrocode}
|
|
% As above, but for the short form.
|
|
% \begin{macrocode}
|
|
\newcommand{\acrsh}{\@ifstar\@sacrsh\@acrsh}
|
|
% \end{macrocode}
|
|
% Unstarred form:
|
|
% \begin{macrocode}
|
|
\newcommand{\@acrsh}[1]{\@ifundefined{#1short}{%
|
|
\PackageError{glossary}{Acronym '#1' has not been defined}{}}{%
|
|
\acronymfont{\csname#1@nx@short\endcsname}}}
|
|
% \end{macrocode}
|
|
% Starred form:
|
|
% \begin{macrocode}
|
|
\newcommand{\@sacrsh}[1]{\@ifundefined{#1short}{%
|
|
\PackageError{glossary}{Acronym '#1' has not been defined}{}}{%
|
|
\acronymfont{\expandafter\expandafter\expandafter
|
|
\MakeUppercase\csname#1@nx@short\endcsname}}}
|
|
% \end{macrocode}
|
|
% Define a means of determining whether an acronym has been
|
|
% used or not. This was mainly included for use with LaTeX2HTML
|
|
% which currently has no \styname{ifthen} style.
|
|
% \begin{macrocode}
|
|
\newcommand{\ifacronymfirstuse}[3]{%
|
|
\@ifundefined{if#1first}{%
|
|
\PackageError{glossary}{Acronym '#1' not defined}{}}{%
|
|
\ifthenelse{\boolean{#1first}}{#2}{#3}}}
|
|
% \end{macrocode}
|
|
% Provide a means of resetting an acronym so that it is expanded
|
|
% next time it is used.
|
|
% \begin{macrocode}
|
|
\newcommand{\resetacronym}[1]{%
|
|
\@ifundefined{if#1first}{%
|
|
\PackageError{glossary}{Acronym '#1' not defined}{}}{%
|
|
\ifglsglobal
|
|
\expandafter\global\csname #1firsttrue\endcsname
|
|
\else
|
|
\setboolean{#1first}{true}%
|
|
\fi}}
|
|
% \end{macrocode}
|
|
% Reverse of the above.
|
|
% \begin{macrocode}
|
|
\newcommand{\unsetacronym}[1]{%
|
|
\@ifundefined{if#1first}{%
|
|
\PackageError{glossary}{Acronym '#1' not defined}{}}{%
|
|
\ifglsglobal
|
|
\expandafter\global\csname #1firstfalse\endcsname
|
|
\else
|
|
\setboolean{#1first}{false}%
|
|
\fi}}
|
|
% \end{macrocode}
|
|
% Reset all acronyms so that they will all be expanded when next
|
|
% used.
|
|
% \begin{macrocode}
|
|
\newcommand{\resetallacronyms}{%
|
|
\@for\@acr:=\@acr@list\do{\resetacronym{\@acr}}}
|
|
% \end{macrocode}
|
|
% Ensure that all acronyms are not expanded, even if they haven't
|
|
% yet been used.
|
|
% \begin{macrocode}
|
|
\newcommand{\unsetallacronyms}{%
|
|
\@for\@acr:=\@acr@list\do{\unsetacronym{\@acr}}}
|
|
% \end{macrocode}
|
|
% Check to see if acronyms should be separate from glossary
|
|
% \begin{macrocode}
|
|
\ifglsacronym
|
|
\newglossarytype[alg]{acronym}{acr}{acn}
|
|
\providecommand{\acronymname}{List of Acronyms}
|
|
\else
|
|
\let\acronym=\glossary
|
|
\let\xacronym=\xglossary
|
|
\fi
|
|
% \end{macrocode}
|
|
%\subsection{Glossary Hyperlinks}
|
|
% This section deals with commands that are used to make the
|
|
% numbers in the glossary have hyperlinks, if hyperlinks are
|
|
% supported.
|
|
%
|
|
% The command \icmdname{glshyper} is a modification of \styname{hyperref}'s
|
|
% \icmdname{hyperpage} command, but it uses \icmdname{delimR} instead of a dash, and
|
|
% \icmdname{delimN} instead of a comma. The command was originally called
|
|
% \icmdname{glshyperpage} but was modified in version 2.4 to
|
|
% enable "page" to be substituted with some arbitrary counter
|
|
% (which should be specified as the first argument).
|
|
% \begin{macrocode}
|
|
\ifglshyper
|
|
\def\glshyper#1#2{\@glshyper{#1}#2\delimR \delimR \\}
|
|
\def\@glshyper#1#2\delimR #3\delimR #4\\{%
|
|
\ifx\\#3\\%
|
|
\@delimNhyper{#1}{#2}%
|
|
\else
|
|
\@ifundefined{hyperlink}{#2\delimR #3}{%
|
|
\hyperlink{#1.#2}{#2}\delimR \hyperlink{#1.#3}{#3}}%
|
|
\fi
|
|
}
|
|
% \end{macrocode}
|
|
% For a list of individual pages instead of a range:
|
|
% \begin{macrocode}
|
|
\def\@delimNhyper#1#2{\@@delimNhyper{#1}#2\delimN \delimN\\}
|
|
\def\@@delimNhyper#1#2\delimN #3\delimN #4\\{%
|
|
\ifx\\#3\\%
|
|
\@ifundefined{hyperlink}{#2}{\hyperlink{#1.#2}{#2}}%
|
|
\else
|
|
\@ifundefined{hyperlink}{#2\delimN #3}{%
|
|
\hyperlink{#1.#2}{#2}\delimN \hyperlink{#1.#3}{#3}}%
|
|
\fi
|
|
}
|
|
% \end{macrocode}
|
|
% To maintain backwards compatibility, define \icmdname{glshyperpage}
|
|
% and \icmdname{glshypersection}. These commands may be removed at a
|
|
% later date, so don't use them.
|
|
% \begin{macrocode}
|
|
\newcommand\glshyperpage[1]{\glshyper{page}{#1}}
|
|
\newcommand\glshypersection[1]{\glshyper{section}{#1}}
|
|
% \end{macrocode}
|
|
% If chapters are defined, modify "\@chapter" so that is adds
|
|
% a "section."\meta{n}".0" target (otherwise it gets too complicated
|
|
% if you have to work out whether to use the chapter or section
|
|
% counter---there's more than enough conditional code in this
|
|
% package already!)
|
|
% \begin{macrocode}
|
|
\@ifundefined{chapter}
|
|
{}
|
|
{\let\@gls@old@chapter\@chapter
|
|
\def\@chapter[#1]#2{\@gls@old@chapter[{#1}]{#2}%
|
|
\@ifundefined{hyperdef}{}{\hyperdef{section}{\thesection}{}}}}
|
|
% \end{macrocode}
|
|
% Provide "\hyper"\meta{xx} to make it easier to change the page
|
|
% number format to "bf", "sf", "tt" and "it" if you are using
|
|
% hyperlinks.
|
|
% The optional first argument (new to version 2.4) specifies
|
|
% the counter being used.
|
|
% \begin{macrocode}
|
|
\providecommand\hyperrm[2][\gls@number]{%
|
|
\textrm{\glshyper{#1}{#2}}}
|
|
\providecommand\hypersf[2][\gls@number]{%
|
|
\textsf{\glshyper{#1}{#2}}}
|
|
\providecommand\hypertt[2][\gls@number]{%
|
|
\texttt{\glshyper{#1}{#2}}}
|
|
\providecommand\hyperbf[2][\gls@number]{%
|
|
\textbf{\glshyper{#1}{#2}}}
|
|
\providecommand\hyperit[2][\gls@number]{%
|
|
\textit{\glshyper{#1}{#2}}}
|
|
% \end{macrocode}
|
|
% The following were added in version 2.4:
|
|
% \begin{macrocode}
|
|
\providecommand\hyperem[2][\gls@number]{%
|
|
\emph{\glshyper{#1}{#2}}}
|
|
\providecommand\hyperup[2][\gls@number]{%
|
|
\textup{\glshyper{#1}{#2}}}
|
|
\providecommand\hypersl[2][\gls@number]{%
|
|
\textsl{\glshyper{#1}{#2}}}
|
|
\providecommand\hypersc[2][\gls@number]{%
|
|
\textsc{\glshyper{#1}{#2}}}
|
|
\providecommand\hypermd[2][\gls@number]{%
|
|
\textmd{\glshyper{#1}{#2}}}
|
|
% \end{macrocode}
|
|
% Hyperlinks not enabled.
|
|
% \begin{macrocode}
|
|
\else
|
|
\providecommand\hyperrm[2][]{\textrm{#2}}
|
|
\providecommand\hypersf[2][]{\textsf{#2}}
|
|
\providecommand\hypertt[2][]{\texttt{#2}}
|
|
\providecommand\hypermd[2][]{\textmd{#2}}
|
|
\providecommand\hyperbf[2][]{\textbf{#2}}
|
|
\providecommand\hyperit[2][]{\textit{#2}}
|
|
\providecommand\hypersl[2][]{\textsl{#2}}
|
|
\providecommand\hyperup[2][]{\textup{#2}}
|
|
\providecommand\hypersc[2][]{\textsc{#2}}
|
|
\providecommand\hyperem[2][]{\emph{#2}}
|
|
\fi
|
|
% \end{macrocode}
|
|
%\iffalse
|
|
%\subsection{Additional Files}
|
|
% The remainder of this document simply lists the contents
|
|
% of all the additional files that accompany the \styname{glossary}
|
|
% package. There is no further documentation. Some lines may not
|
|
% fit on the page. If you like, you can comment out this section
|
|
% using "\iffalse" and "\fi".
|
|
% \begin{macrocode}
|
|
%</glossary.sty>
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
%<*makeglos.pl>
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
#!/usr/bin/perl
|
|
|
|
# File : makeglos
|
|
# Author : Nicola Talbot
|
|
# Version : 1.5 (2006/07/20)
|
|
# Description: simple Perl script that calls makeindex.
|
|
# Intended for use with "glossary.sty" (saves having to remember
|
|
# all the various switches)
|
|
|
|
use Getopt::Std;
|
|
|
|
if ($#ARGV < 0)
|
|
{
|
|
die "Syntax : $0 [-ilqrcgm] [-s sty] [-o gls] [-t log] [-p num] <filename>\n";
|
|
}
|
|
|
|
getopt('sotp');
|
|
getopts('ilqrcgm');
|
|
|
|
# define known extensions
|
|
|
|
%exttype = (
|
|
glossary => {in=>'glo', out=>'gls', 'log'=>'glg'},
|
|
);
|
|
|
|
$ext = '';
|
|
|
|
if (length(@ARGV[0]) < 4)
|
|
{
|
|
$name = @ARGV[0];
|
|
}
|
|
elsif (substr(@ARGV[0],-4,1) eq ".")
|
|
{
|
|
$name = substr(@ARGV[0],0,length(@ARGV[0])-4);
|
|
|
|
$ext = substr(@ARGV[0],-3,3);
|
|
}
|
|
else
|
|
{
|
|
$name = @ARGV[0];
|
|
}
|
|
|
|
$istfile = "$name.ist";
|
|
|
|
# check log file for other glossary types
|
|
# and for ist file name
|
|
|
|
if (open AUXFILE, "$name.aux")
|
|
{
|
|
while (<AUXFILE>)
|
|
{
|
|
if (m/\\\@newglossarytype\s*\[(.*)\]{(.*)}{(.*)}{(.*)}/)
|
|
{
|
|
$exttype{$2}{'in'} = $3;
|
|
$exttype{$2}{'out'} = $4;
|
|
$exttype{$2}{'log'} = $1;
|
|
|
|
if (!$opt_q)
|
|
{
|
|
print "added glossary type '$2' ($3,$4,$1)\n";
|
|
}
|
|
}
|
|
|
|
if (m/\\\@istfilename\s*{([^}]*)}/)
|
|
{
|
|
$istfile = $1;
|
|
}
|
|
}
|
|
|
|
close AUXFILE;
|
|
}
|
|
else
|
|
{
|
|
print "unable to open $name.aux\n";
|
|
}
|
|
|
|
# save all the general makeindex switches
|
|
|
|
$mkidxopts = '';
|
|
|
|
if ($opt_i)
|
|
{
|
|
$mkidxopts .= " -i";
|
|
}
|
|
|
|
if ($opt_l)
|
|
{
|
|
$mkidxopts .= " -l";
|
|
}
|
|
|
|
if ($opt_q)
|
|
{
|
|
$mkidxopts .= " -q";
|
|
}
|
|
|
|
if ($opt_r)
|
|
{
|
|
$mkidxopts .= " -r";
|
|
}
|
|
|
|
if ($opt_c)
|
|
{
|
|
$mkidxopts .= " -c";
|
|
}
|
|
|
|
if ($opt_g)
|
|
{
|
|
$mkidxopts .= " -g";
|
|
}
|
|
|
|
unless ($opt_p eq "")
|
|
{
|
|
$mkidxopts .= " -p $opt_p";
|
|
}
|
|
|
|
unless ($opt_s eq "")
|
|
{
|
|
$istfile = $opt_s;
|
|
}
|
|
|
|
if ($ext ne '')
|
|
{
|
|
%thistype = %{$exttype{'glossary'}}; #default
|
|
|
|
foreach $type (keys %exttype)
|
|
{
|
|
if ($exttype{$type}{'in'} eq $ext)
|
|
{
|
|
%thistype = %{$exttype{$type}};
|
|
|
|
last;
|
|
}
|
|
}
|
|
|
|
if ($opt_o eq "")
|
|
{
|
|
$outfile = "$name.$thistype{out}";
|
|
}
|
|
else
|
|
{
|
|
$outfile = $opt_o;
|
|
}
|
|
|
|
if ($opt_t eq "")
|
|
{
|
|
$transcript = "$name.$thistype{'log'}";
|
|
}
|
|
else
|
|
{
|
|
$transcript = $opt_t;
|
|
}
|
|
|
|
&makeindex("$name.$ext",$outfile,$transcript,$istfile,
|
|
$mkidxopts,$opt_q,$opt_m);
|
|
}
|
|
else
|
|
{
|
|
foreach $type (keys %exttype)
|
|
{
|
|
%thistype = %{$exttype{$type}};
|
|
|
|
$inputfile = "$name.$thistype{in}";
|
|
|
|
if (-r $inputfile)
|
|
{
|
|
if ($opt_o eq "")
|
|
{
|
|
$outfile = "$name.$thistype{out}";
|
|
}
|
|
else
|
|
{
|
|
$outfile = $opt_o;
|
|
}
|
|
|
|
if ($opt_t eq "")
|
|
{
|
|
$transcript = "$name.$thistype{'log'}";
|
|
}
|
|
else
|
|
{
|
|
$transcript = $opt_t;
|
|
}
|
|
|
|
&makeindex($inputfile,$outfile,$transcript,
|
|
$istfile,$mkidxopts,$opt_q,$opt_m);
|
|
}
|
|
elsif (!$opt_q)
|
|
{
|
|
print "no read access for '$inputfile'\n";
|
|
}
|
|
}
|
|
}
|
|
|
|
sub makeindex{
|
|
local($in,$out,$trans,$ist,$rest,$quiet,$merge) = @_;
|
|
local($name,$cmdstr,$buffer,$n,$i,$j);
|
|
local(@stuff,@item);
|
|
|
|
if ($merge)
|
|
{
|
|
$cmdstr = "$rest -s $ist -t $trans -o tmp_$out $in";
|
|
}
|
|
else
|
|
{
|
|
$cmdstr = "$rest -s $ist -t $trans -o $out $in";
|
|
}
|
|
|
|
unless ($quiet)
|
|
{
|
|
print "makeindex $cmdstr\n";
|
|
}
|
|
|
|
`makeindex $cmdstr`;
|
|
|
|
if ($merge)
|
|
{
|
|
print "Merging entries\n";
|
|
|
|
open INPUT, "<tmp_$out";
|
|
|
|
$buffer = "";
|
|
|
|
while (<INPUT>)
|
|
{
|
|
$buffer .= $_;
|
|
}
|
|
|
|
close INPUT;
|
|
|
|
open OUTPUT, ">$out";
|
|
|
|
@stuff = split /\\gloitem /, $buffer;
|
|
|
|
$n = scalar(@stuff);
|
|
|
|
if ($n < 2)
|
|
{
|
|
print OUTPUT $buffer;
|
|
}
|
|
else
|
|
{
|
|
print OUTPUT $stuff[0];
|
|
|
|
for ($i = 1, $j=-1; $i < $n; $i++)
|
|
{
|
|
if ($stuff[$i]=~s/{\\glosslabel{(.+)}{(.+)}}//)
|
|
{
|
|
$name = $&;
|
|
|
|
if ($j==-1)
|
|
{
|
|
$j = 0;
|
|
$item[0]{'name'} = $name;
|
|
$item[0]{'desc'} = $stuff[$i];
|
|
}
|
|
else
|
|
{
|
|
# makeindex has already sorted the entries
|
|
# alphabetically, so duplicate entries
|
|
# will be one after the other
|
|
|
|
if ($item[$j]{'name'} eq $name)
|
|
{
|
|
$item[$j]{'desc'} .= $stuff[$i];
|
|
|
|
print "collating $name\n";
|
|
}
|
|
else
|
|
{
|
|
$j++;
|
|
$item[$j]{'name'} = $name;
|
|
$item[$j]{'desc'} = $stuff[$i];
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
print STDERR
|
|
"unable to extract name from glossary item:\n",
|
|
$stuff[$i];
|
|
}
|
|
}
|
|
|
|
for ($i=0; $i <= $j; $i++)
|
|
{
|
|
# remove all but the last \delimT
|
|
while ($item[$i]{'desc'}=~s/\\delimT/$&/sg > 1)
|
|
{
|
|
$item[$i]{'desc'}=~s/\\delimT//s;
|
|
}
|
|
print OUTPUT "\\gloitem ", $item[$i]{'name'},
|
|
$item[$i]{'desc'};
|
|
}
|
|
}
|
|
|
|
close OUTPUT;
|
|
|
|
print "Output written in $out\n";
|
|
|
|
unlink "tmp_$out" or print "Can't delete tmp_$out: $!\n";
|
|
}
|
|
}
|
|
|
|
1;
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
%</makeglos.pl>
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
%<*makeglos.bat>
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
@rem = '-*- Perl -*-
|
|
@echo off
|
|
perl -S %~dp0makeglos.pl %*
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
%</makeglos.bat>
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
%<*glossary.perl>
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
# File : glossary.perl
|
|
# Author : Nicola Talbot
|
|
# Date : 5 December 2005
|
|
# Version : 1.03
|
|
# Description : LaTeX2HTML implementation of glossary package.
|
|
|
|
package main;
|
|
|
|
# These are the only package options implemented.
|
|
|
|
sub do_glossary_style_altlist{
|
|
}
|
|
|
|
sub do_glossary_style_hyper{
|
|
}
|
|
|
|
sub do_glossary_style_hyper_true{
|
|
}
|
|
|
|
sub do_glossary_style_hyperacronym{
|
|
}
|
|
|
|
sub do_glossary_style_hyperacronym_true{
|
|
}
|
|
|
|
sub do_glossary_toc{
|
|
}
|
|
|
|
sub do_glossary_toc_true{
|
|
}
|
|
|
|
$acronymtype = 'glossary';
|
|
|
|
sub do_glossary_acronym{
|
|
&do_glossary_acronym_true
|
|
}
|
|
|
|
sub do_glossary_acronym_true{
|
|
$gls_mark{'acronym'} = "<tex2html_acronym_mark>";
|
|
$gls_file_mark{'acronym'} = "<tex2html_acronym_file_mark>";
|
|
$gls_title{'acronym'} = "\\acronymname";
|
|
$delimN{'acronym'} = ", ";
|
|
$glodelim{'acronym'} = " ";
|
|
$glsnumformat{'acronym'} = "textrm";
|
|
$acronymtype = 'acronym';
|
|
}
|
|
|
|
sub do_glossary_acronym_false{
|
|
$acronymtype = 'glossary';
|
|
}
|
|
|
|
sub do_cmd_acronymname{
|
|
join('', 'List of Acronyms', $_[0]);
|
|
}
|
|
|
|
# modify set_depth_levels so that glossary is added
|
|
|
|
$gls_mark{'glossary'} = "<tex2html_gls_mark>";
|
|
$gls_file_mark{'glossary'} = "<tex2html_gls_file_mark>";
|
|
$gls_title{'glossary'} = "Glossary";
|
|
$delimN{'glossary'} = ", ";
|
|
$glodelim{'glossary'} = " ";
|
|
$glsnumformat{'glossary'} = "textrm";
|
|
|
|
sub replace_glossary_markers{
|
|
foreach $type (keys %gls_mark)
|
|
{
|
|
if (defined &add_gls_hook)
|
|
{&add_gls_hook if (/$gls_mark{$type}/);}
|
|
else
|
|
{&add_gls($type) if (/$gls_mark{$type}/);}
|
|
|
|
s/$gls_file_mark{$type}/$glsfile{$type}/g;
|
|
}
|
|
}
|
|
|
|
# there must be a better way of doing this
|
|
# other than copying the orginal code and adding to it.
|
|
sub replace_general_markers {
|
|
if (defined &replace_infopage_hook) {&replace_infopage_hook if (/$info_page_mark/);}
|
|
else { &replace_infopage if (/$info_page_mark/); }
|
|
if (defined &add_idx_hook) {&add_idx_hook if (/$idx_mark/);}
|
|
else {&add_idx if (/$idx_mark/);}
|
|
&replace_glossary_markers;
|
|
|
|
if ($segment_figure_captions) {
|
|
s/$lof_mark/$segment_figure_captions/o
|
|
} else { s/$lof_mark/$figure_captions/o }
|
|
if ($segment_table_captions) {
|
|
s/$lot_mark/$segment_table_captions/o
|
|
} else { s/$lot_mark/$table_captions/o }
|
|
&replace_morelinks();
|
|
if (defined &replace_citations_hook) {&replace_citations_hook if /$bbl_mark/;}
|
|
else {&replace_bbl_marks if /$bbl_mark/;}
|
|
if (defined &add_toc_hook) {&add_toc_hook if (/$toc_mark/);}
|
|
else {&add_toc if (/$toc_mark/);}
|
|
if (defined &add_childs_hook) {&add_childs_hook if (/$childlinks_on_mark/);}
|
|
else {&add_childlinks if (/$childlinks_on_mark/);}
|
|
&remove_child_marks;
|
|
|
|
if (defined &replace_cross_references_hook) {&replace_cross_references_hook;}
|
|
else {&replace_cross_ref_marks if /$cross_ref_mark||$cross_ref_visible_mark/;}
|
|
if (defined &replace_external_references_hook) {&replace_external_references_hook;}
|
|
else {&replace_external_ref_marks if /$external_ref_mark/;}
|
|
if (defined &replace_cite_references_hook) {&replace_cite_references_hook;}
|
|
else { &replace_cite_marks if /$cite_mark/; }
|
|
if (defined &replace_user_references) {
|
|
&replace_user_references if /$user_ref_mark/; }
|
|
|
|
}
|
|
|
|
sub add_gls{
|
|
local($sidx_style, $eidx_style) =('<STRONG>','</STRONG>');
|
|
if ($INDEX_STYLES) {
|
|
if ($INDEX_STYLES =~/,/) {
|
|
local(@styles) = split(/\s*,\s*/,$INDEX_STYLES);
|
|
$sidx_style = join('','<', join('><',@styles) ,'>');
|
|
$eidx_style = join('','</', join('></',reverse(@styles)) ,'>');
|
|
} else {
|
|
$sidx_style = join('','<', $INDEX_STYLES,'>');
|
|
$eidx_style = join('','</', $INDEX_STYLES,'>');
|
|
}
|
|
}
|
|
&add_real_gls
|
|
}
|
|
|
|
sub gloskeysort{
|
|
local($x, $y) = ($a, $b);
|
|
$x=~s/^(.*)###(\d+)$/\l\1/;
|
|
local($x_id) = $2;
|
|
$y=~s/^(.*)###(\d+)$/\l\1/;
|
|
local($y_id) = $2;
|
|
|
|
local($n) = ($x cmp $y);
|
|
|
|
if ($n == 0)
|
|
{
|
|
$n = ($x_id <=> $y_id);
|
|
}
|
|
|
|
$n;
|
|
}
|
|
|
|
sub add_real_gls{
|
|
local($type) = @_;
|
|
print "\nDoing the $type ...";
|
|
local($key, $str, @keys, $glossary, $level, $count,
|
|
@previous, @current, $id, $linktext, $delimN);
|
|
|
|
@keys = keys %{$glossary{$type}};
|
|
|
|
@keys = sort gloskeysort @keys;
|
|
|
|
$level = 0;
|
|
|
|
$delimN = $delimN{$type};
|
|
|
|
foreach $key (@keys) {
|
|
$current = $key;
|
|
$str = $current;
|
|
$str =~ s/\#\#\#\d+$//o; # Remove the unique id's
|
|
#$linktext = $cross_ref_visible_mark;
|
|
$id = ++$global{'max_id'};
|
|
$linktext = "\\$glossary_format{$type}{$key}${OP}$id${CP}$glossary_linktext{$type}{$key}${OP}$id${CP}";
|
|
$linktext = &translate_commands($linktext);
|
|
$glossary .=
|
|
# If it's the same string don't start a new line
|
|
(&index_key_eq($current, $previous) ?
|
|
$delimN
|
|
. $glossary{$type}{$key}
|
|
. $linktext
|
|
. "</A>\n"
|
|
: "<DT>"
|
|
. $glossary_name{$type}{$key}
|
|
. "<DD>". $glossary_desc{$type}{$key}
|
|
. $glodelim{$type} . $glossary{$type}{$key}
|
|
. $linktext. "</A>\n");
|
|
$previous = $current;
|
|
}
|
|
$glossary = '<DD>'.$glossary unless ($glossary =~ /^\s*<D(T|D)>/);
|
|
|
|
$glossary =~ s/(<A [^>]*>)(<D(T|D)>)/$2$1/g;
|
|
|
|
$str = &translate_commands("\\glossarypostamble");
|
|
s/$gls_mark{$type}/$preglossary\n<DL COMPACT>\n$glossary<\/DL>$str\n/s;
|
|
}
|
|
|
|
sub set_depth_levels {
|
|
# Sets $outermost_level
|
|
local($level);
|
|
# scan the document body, not the preamble, for use of sectioning commands
|
|
my ($contents) = $_;
|
|
if ($contents =~ /\\begin\s*((?:$O|$OP)\d+(?:$C|$CP))document\1|\\startdocument/s) {
|
|
$contents = $';
|
|
}
|
|
foreach $level ("part", "chapter", "section", "subsection",
|
|
"subsubsection", "paragraph") {
|
|
last if (($outermost_level) = $contents =~ /\\($level)$delimiter_rx/);
|
|
last if (($outermost_level) = $contents =~ /\\endsegment\s*\[\s*($level)\s*\]/s);
|
|
if ($contents =~ /\\segment\s*($O\d+$C)[^<]+\1\s*($O\d+$C)\s*($level)\s*\2/s)
|
|
{ $outermost_level = $3; last };
|
|
}
|
|
$level = ($outermost_level ? $section_commands{$outermost_level} :
|
|
do {$outermost_level = 'section'; 3;});
|
|
|
|
if ($REL_DEPTH && $MAX_SPLIT_DEPTH) {
|
|
$MAX_SPLIT_DEPTH = $level + $MAX_SPLIT_DEPTH;
|
|
} elsif (!($MAX_SPLIT_DEPTH)) { $MAX_SPLIT_DEPTH = 1 };
|
|
|
|
%unnumbered_section_commands = (
|
|
'tableofcontents', $level
|
|
, 'listoffigures', $level
|
|
, 'listoftables', $level
|
|
, 'bibliography', $level
|
|
, 'textohtmlindex', $level
|
|
, 'textohtmlglossary', $level
|
|
, %unnumbered_section_commands
|
|
);
|
|
|
|
%section_commands = (
|
|
%unnumbered_section_commands
|
|
, %section_commands
|
|
);
|
|
}
|
|
|
|
sub add_bbl_and_idx_dummy_commands {
|
|
local($id) = $global{'max_id'};
|
|
|
|
s/([\\]begin\s*$O\d+$C\s*thebibliography)/$bbl_cnt++; $1/eg;
|
|
## if ($bbl_cnt == 1) {
|
|
s/([\\]begin\s*$O\d+$C\s*thebibliography)/$id++; "\\bibliography$O$id$C$O$id$C $1"/geo;
|
|
#}
|
|
$global{'max_id'} = $id;
|
|
s/([\\]begin\s*$O\d+$C\s*theindex)/\\textohtmlindex $1/o;
|
|
s/[\\]printindex/\\textohtmlindex /o;
|
|
&add_gls_dummy_commands;
|
|
&lib_add_bbl_and_idx_dummy_commands() if defined(&lib_add_bbl_and_idx_dummy_commands);
|
|
}
|
|
|
|
# this gets called before do_cmd_newglossarytype
|
|
# so currently only substitutes \\printglossary and \\printacronym
|
|
sub add_gls_dummy_commands{
|
|
#foreach $type (keys %gls_mark)
|
|
#{
|
|
# #$id = ++$global{'max_id'};
|
|
# s/[\\]print$type/\\textohtmlglossary[$type]/sg;
|
|
#}
|
|
|
|
s/[\\]printglossary/\\textohtmlglossary/sg;
|
|
s/[\\]printacronym/\\textohtmlglossary[$acronymtype]/sg;
|
|
}
|
|
|
|
# This is modified from do_cmd_textohtmlindex
|
|
|
|
sub do_cmd_textohtmlglossary{
|
|
local($_) = @_;
|
|
|
|
local($type);
|
|
|
|
$_[0]=~s/^\s*\[([^]]*)\]//;
|
|
$type = $1;
|
|
if ($type eq '') {$type = 'glossary';}
|
|
|
|
unless (defined $gls_mark{$type})
|
|
{
|
|
&write_warnings("glossary type '$type' not implemented");
|
|
}
|
|
|
|
if (eval "(defined \&do_cmd_${type}name) ||\$new_command{\"${type}name\"}")
|
|
{
|
|
local($br_id)=++$global{'max_id'};
|
|
$TITLE = &translate_environments("$O$br_id$C\\${type}name$O$br_id$C");
|
|
}
|
|
else
|
|
{ $TITLE = $gls_title{$type} }
|
|
$toc_sec_title = $TITLE;
|
|
$glsfile{$type} = $CURRENT_FILE;
|
|
if (%glossary_labels) { &make_glossary_labels(); }
|
|
if (($SHORT_INDEX) && (%glossary_segment))
|
|
{ &make_preglossary(); }
|
|
else
|
|
{ $preglossary = &translate_commands("\\glossarypreamble"); }
|
|
local $idx_head = $section_headings{'textohtmlindex'};
|
|
local($heading) = join(''
|
|
, &make_section_heading($TITLE, $idx_head)
|
|
, $gls_mark{$type} );
|
|
local($pre,$post) = &minimize_open_tags($heading);
|
|
join('',"<BR>\n" , $pre, $_[0]);
|
|
}
|
|
|
|
sub make_glossary_labels {
|
|
local($key, @keys);
|
|
@keys = keys %glossary_labels;
|
|
foreach $key (@keys) {
|
|
if (($ref_files{$key}) && !($ref_files{$key} eq "$glsfile{'glossary'}")) {
|
|
local($tmp) = $ref_files{$key};
|
|
&write_warnings("\nmultiple label $key , target in $glsfile{'glossary'} masks $tmp ");
|
|
}
|
|
$ref_files{$key} .= $glsfile{'glossary'};
|
|
}
|
|
}
|
|
|
|
sub make_preglossary{ &make_real_preglossary }
|
|
sub make_real_preglossary{
|
|
local($key, @keys, $head, $body);
|
|
$head = "<HR>\n<H4>Legend:</H4>\n<DL COMPACT>";
|
|
@keys = keys %glossary_segment;
|
|
foreach $key (@keys) {
|
|
local($tmp) = "segment$key";
|
|
$tmp = $ref_files{$tmp};
|
|
$body .= "\n<DT>$key<DD>".&make_named_href('',$tmp,$glossary_segment{$key});
|
|
}
|
|
$preglossary = join('', $head, $body, "\n</DL>") if ($body);
|
|
}
|
|
|
|
sub do_cmd_glossary { &do_real_glossary(@_) }
|
|
sub do_real_glossary {
|
|
local($_) = @_;
|
|
local($br_id, $str);
|
|
local($type) = "glossary";
|
|
local($anchor);
|
|
|
|
if (s/^\S*$OP(\d+)${CP}type=(.+)$OP\1$CP//)
|
|
{
|
|
$type = $2;
|
|
}
|
|
|
|
local($idx_option,$pat) = &get_next_optional_argument;
|
|
|
|
$str = &missing_braces unless (
|
|
(s/$next_pair_pr_rx/($br_id, $str) = ($1, $2);''/eo)
|
|
||(s/$next_pair_rx/($br_id, $str) = ($1, $2);''/eo));
|
|
|
|
# the maths gets processed before being passed
|
|
# to do_cmd_glossary. How can I do this
|
|
# substitution before it gets converted to an image?
|
|
$str=~s/\"\"/\"/gs;
|
|
$str=~s/\"\|/\|/gs;
|
|
$str=~s/\"@/@/gs;
|
|
$str=~s/\"!/!/gs;
|
|
|
|
$str=~s/;SPMquot;;SPMquot;/;SPMquot;/gs;
|
|
$str=~s/;SPMquot;\|/\|/gs;
|
|
$str=~s/;SPMquot;\@/\@/gs;
|
|
$str=~s/;SPMquot;!/!/gs;
|
|
|
|
$anchor = &make_glossary_entry($br_id,$str,$anchor_invisible_mark,$type);
|
|
|
|
join('', $anchor, $_);
|
|
}
|
|
|
|
sub make_glossary_entry { &make_real_glossary_entry(@_) }
|
|
sub make_real_glossary_entry {
|
|
local($br_id,$str,$text,$type) = @_;
|
|
local($this_file) = $CURRENT_FILE;
|
|
$TITLE = $saved_title if (($saved_title)&&(!($TITLE)||($TITLE eq $default_title)));
|
|
#extract name, sort, description and format data from $str
|
|
local($name,$sort,$description,$format);
|
|
|
|
unless (($str=~/name\s*=\s*${OP}(\d+)${CP}(.+)${OP}\1${CP}\s*,?/s && ($name=$2)) ||
|
|
($str=~/name\s*=\s*([^,]+)\s*,?/s && ($name=$1)))
|
|
{
|
|
&write_warnings("can't determine name key from $str");
|
|
}
|
|
|
|
unless (($str=~/sort\s*=\s*${OP}(\d+)${CP}(.+)${OP}\1${CP}\s*,?/s && ($sort=$2)) ||
|
|
($str=~/sort\s*=\s*([^,]+)\s*,?/s && ($sort=$1)))
|
|
{
|
|
$sort = $name;
|
|
}
|
|
|
|
unless (($str=~/description\s*=\s*${OP}(\d+)${CP}(.+)${OP}\1${CP}\s*,?/s && ($description=$2)) ||
|
|
($str=~/description\s*=\s*([^,]+)\s*,?/s && ($description=$1)))
|
|
{
|
|
&write_warnings("can't determine description key from $str");
|
|
}
|
|
|
|
unless (($str=~/format\s*=\s*${OP}(\d+)${CP}(.+)${OP}\1${CP}\s*,?/s && ($format=$2)) ||
|
|
($str=~/format\s*=\s*([^,]+)\s*,?/s && ($format=$1)))
|
|
{
|
|
$format = "glsnumformat[$type]";
|
|
}
|
|
|
|
# Save the reference
|
|
$str = "$sort$description###" . ++$global{'max_id'}; # Make unique
|
|
# concatenate multiple spaces into a single space
|
|
# otherwise keys won't sort properly
|
|
$str=~s/\s+/ /gs;
|
|
$glossary{$type}{$str} .= &make_half_href($this_file."#$br_id");
|
|
$glossary_name{$type}{$str} = $name;
|
|
$glossary_format{$type}{$str} = $format;
|
|
$glossary_desc{$type}{$str} = $description;
|
|
$glossary_linktext{$type}{$str} = $TITLE;
|
|
"<A HREF=$gls_file_mark{$type}#tex2html$href_name NAME=\"$br_id\">$text<\/A>";
|
|
}
|
|
|
|
sub do_cmd_xglossary{
|
|
local($_) = @_;
|
|
local($entry,$text);
|
|
local($type) = "glossary";
|
|
|
|
if (s/^$OP(\d+)${CP}type=(.+)$OP\1$CP//)
|
|
{
|
|
$type = $2;
|
|
}
|
|
|
|
$entry = &missing_braces unless
|
|
s/$next_pair_pr_rx/$entry=$2;''/eo;
|
|
|
|
$text = &missing_braces unless
|
|
s/$next_pair_pr_rx/$text=$2;''/eo;
|
|
|
|
$entry=~s/\"\"/\"/gs;
|
|
$entry=~s/\"\|/\|/gs;
|
|
$entry=~s/\"\@/\@/gs;
|
|
$entry=~s/\"!/!/gs;
|
|
|
|
$entry=~s/;SPMquot;;SPMquot;/;SPMquot;/gs;
|
|
$entry=~s/;SPMquot;\|/\|/gs;
|
|
$entry=~s/;SPMquot;\@/\@/gs;
|
|
$entry=~s/;SPMquot;!/!/gs;
|
|
|
|
$br_id = ++$global{'max_id'};
|
|
join('', &make_glossary_entry($br_id,$entry,$text,$type),
|
|
$_);
|
|
}
|
|
|
|
sub do_cmd_newglossarytype{
|
|
local($type,$out,$in);
|
|
$type = &missing_braces unless
|
|
($_[0]=~s/$next_pair_pr_rx//o&&($type=$2));
|
|
$out = &missing_braces unless
|
|
($_[0]=~s/$next_pair_pr_rx//o&&($out=$2));
|
|
$in = &missing_braces unless
|
|
($_[0]=~s/$next_pair_pr_rx//o&&($in=$2));
|
|
|
|
&make_newglossarytype($type);
|
|
|
|
$_[0];
|
|
}
|
|
|
|
sub make_newglossarytype{
|
|
local($type) = @_;
|
|
|
|
eval ("sub do_cmd_make$type\{\}");
|
|
|
|
$gls_mark{$type} = "<tex2html_${type}_mark>";
|
|
$gls_file_mark{$type} = "<tex2html_${type}_file_mark>";
|
|
$gls_title{$type} = "\\glossaryname";
|
|
|
|
local($tmp) = 'sub do_cmd_' . $type. '{';
|
|
$tmp .= 'local($id) = ++$global{\'max_id\'};';
|
|
$tmp .= '"\\\\glossary$OP$id${CP}type=' . $type . '$OP$id$CP".$_[0];';
|
|
$tmp .= '}';
|
|
|
|
eval($tmp);
|
|
|
|
$tmp = 'sub do_cmd_x' . $type. '{';
|
|
$tmp .= 'local($id) = ++$global{\'max_id\'};';
|
|
$tmp .= '"\\\\xglossary$OP$id${CP}type=' . $type . '$OP$id$CP".$_[0];';
|
|
$tmp .= '}';
|
|
|
|
eval($tmp);
|
|
|
|
$tmp = 'sub do_cmd_print' . $type. '{';
|
|
#$tmp .= 'local($id)=++$global{\'max_id\'};';
|
|
$tmp .= '"\\\\textohtmlglossary[' . $type
|
|
. ']" . $_[0]';
|
|
$tmp .= '}';
|
|
|
|
eval($tmp);
|
|
|
|
$delimN{$type} = ", ";
|
|
$glodelim{$type} = "";
|
|
$glsnumformat{$type} = "";
|
|
|
|
}
|
|
|
|
sub do_cmd_gloshort{
|
|
local($_) = @_;
|
|
join('', "<tex2html_GLOSHORT_mark>", $_);
|
|
}
|
|
|
|
sub do_cmd_glolong{
|
|
local($_) = @_;
|
|
join('', "<tex2html_GLOLONG_mark>", $_);
|
|
}
|
|
|
|
$acronymnamefmt = "<tex2html_GLOLONG_mark> (<tex2html_GLOSHORT_mark>)";
|
|
|
|
sub do_cmd_setacronymnamefmt{
|
|
local($_) = @_;
|
|
|
|
$acronymnamefmt = &missing_braces unless
|
|
s/$next_pair_pr_rx/$acronymnamefmt=$2;''/eo;
|
|
|
|
$_;
|
|
}
|
|
|
|
sub do_cmd_acronymfont{
|
|
local($_) = @_;
|
|
local($text) = &missing_braces unless
|
|
s/$next_pair_pr_rx/$text=$2;''/eo;
|
|
|
|
$text . $_;
|
|
}
|
|
|
|
%acronym = ();
|
|
|
|
sub do_cmd_newacronym{
|
|
local($_) = @_;
|
|
local($cmdname,$pat,$abbrv,$long,$glsentry,$name);
|
|
|
|
($cmdname,$pat) = &get_next_optional_argument;
|
|
|
|
$abbrv = &missing_braces unless
|
|
(s/$next_pair_pr_rx/$abbrv=$2;''/eo);
|
|
$long = &missing_braces unless
|
|
(s/$next_pair_pr_rx/$long=$2;''/eo);
|
|
$glsentry = &missing_braces unless
|
|
(s/$next_pair_pr_rx/$glsentry=$2;''/eo);
|
|
|
|
if ($cmdname eq '')
|
|
{
|
|
$cmdname = $abbrv;
|
|
}
|
|
|
|
local($id);
|
|
$id = ++$global{'max_id'};
|
|
local($fmtedabbrv) = &translate_commands("\\acronymfont$OP$id$CP$abbrv$OP$id$CP");
|
|
|
|
unless ($glsentry=~/name=/)
|
|
{
|
|
$name = $acronymnamefmt;
|
|
$name=~s/<tex2html_GLOSHORT_mark>/$fmtedabbrv/egs;
|
|
$name=~s/<tex2html_GLOLONG_mark>/$long/egs;
|
|
$id = ++$global{'max_id'};
|
|
$glsentry .= ",name=$OP$id$CP$name$OP$id$CP";
|
|
}
|
|
|
|
$global{"${cmdname}first"} = 1;
|
|
$acronym{$cmdname}{'abbrv'} = $abbrv;
|
|
$acronym{$cmdname}{'long'} = $long;
|
|
$acronym{$cmdname}{'entry'} = $glsentry;
|
|
|
|
local($tmp);
|
|
|
|
unless ($cmdname=~/[^a-zA-Z]/)
|
|
{
|
|
$tmp = 'sub do_cmd_' . $cmdname . '{';
|
|
$tmp .= 'local($_)=@_;';
|
|
$tmp .= 'local($id)=++$global{\'max_id\'};';
|
|
$tmp .= 'local($str);';
|
|
$tmp .= '$str="${OP}$id${CP}'
|
|
. $cmdname
|
|
. '${OP}$id${CP}";';
|
|
$tmp .= '&do_cmd_useacronym($str . $_[0])';
|
|
$tmp .= '}';
|
|
|
|
eval($tmp);
|
|
|
|
$tmp = 'sub do_cmd_' . $cmdname . 'star{';
|
|
$tmp .= 'local($_)=@_;';
|
|
$tmp .= 'local($id)=++$global{\'max_id\'};';
|
|
$tmp .= 'local($str);';
|
|
$tmp .= '$str="${OP}$id${CP}'
|
|
. $cmdname
|
|
. '${OP}$id${CP}";';
|
|
$tmp .= '&do_cmd_useacronymstar($str . $_[0])';
|
|
$tmp .= '}';
|
|
|
|
eval($tmp);
|
|
|
|
$tmp = 'sub do_cmd_' . $cmdname . 'long{';
|
|
$tmp .= 'local($_)=@_;';
|
|
$tmp .= 'join("", \'' . $long . '\', $_[0])';
|
|
$tmp .= '}';
|
|
|
|
eval($tmp);
|
|
|
|
$tmp = 'sub do_cmd_' . $cmdname . 'short{';
|
|
$tmp .= 'local($_)=@_;';
|
|
$tmp .= 'join("", \'' . $fmtedabbrv . '\', $_[0])';
|
|
$tmp .= '}';
|
|
|
|
eval($tmp);
|
|
}
|
|
|
|
$_;
|
|
}
|
|
|
|
sub do_cmd_acrsh{
|
|
local($_) = @_;
|
|
local($cmdname,$text,$id);
|
|
|
|
$cmdname = &missing_braces unless
|
|
(s/$next_pair_pr_rx/$id=$1;$cmdname=$2;''/eo);
|
|
|
|
$text = &translate_commands("\\${cmdname}short");
|
|
|
|
$text . $_;
|
|
}
|
|
|
|
sub do_cmd_acrshstar{
|
|
local($_) = @_;
|
|
local($cmdname,$text,$id);
|
|
|
|
$cmdname = &missing_braces unless
|
|
(s/$next_pair_pr_rx/$id=$1;$cmdname=$2;''/eo);
|
|
|
|
$text = &translate_commands("\\${cmdname}short");
|
|
|
|
$text=~s/(<.*>)?(\w)/\1\u\2/;
|
|
|
|
$text . $_;
|
|
}
|
|
|
|
sub do_cmd_acrln{
|
|
local($_) = @_;
|
|
local($cmdname,$text,$id);
|
|
|
|
$cmdname = &missing_braces unless
|
|
(s/$next_pair_pr_rx/$id=$1;$cmdname=$2;''/eo);
|
|
|
|
$text = &translate_commands("\\${cmdname}long");
|
|
|
|
$text . $_;
|
|
}
|
|
|
|
sub do_cmd_acrlnstar{
|
|
local($_) = @_;
|
|
local($cmdname,$text,$id);
|
|
|
|
$cmdname = &missing_braces unless
|
|
(s/$next_pair_pr_rx/$id=$1;$cmdname=$2;''/eo);
|
|
|
|
$text = &translate_commands("\\${cmdname}long");
|
|
|
|
$text=~s/(\w)/\u\1/;
|
|
|
|
$text . $_;
|
|
}
|
|
|
|
sub do_cmd_useacronym{
|
|
local($_)=@_;
|
|
local($str,$abbrv,$long,$entry,$id);
|
|
|
|
local($optarg,$pat)=&get_next_optional_argument;
|
|
|
|
$cmdname = &missing_braces unless
|
|
(s/$next_pair_pr_rx/$cmdname=$2;''/eo);
|
|
|
|
if (defined %{$acronym{$cmdname}})
|
|
{
|
|
$abbrv = $acronym{$cmdname}{'abbrv'};
|
|
$long = $acronym{$cmdname}{'long'};
|
|
$entry = $acronym{$cmdname}{'entry'};
|
|
$id = ++$global{'max_id'};
|
|
$abbrv = "\\acronymfont$OP$id$CP$abbrv$OP$id$CP";
|
|
|
|
$id = ++$global{'max_id'};
|
|
$str = "\\xglossary${OP}$id${CP}type="
|
|
. $acronymtype. "${OP}$id${CP}";
|
|
$id = ++$global{'max_id'};
|
|
$str .= "${OP}$id${CP}"
|
|
. $entry . "${OP}$id${CP}";
|
|
$id = ++$global{'max_id'};
|
|
$str .= "${OP}$id${CP}";
|
|
$str .= ($global{"${cmdname}first"} ? "$long$optarg ($abbrv)" : "$abbrv$optarg");
|
|
$str .= "${OP}$id${CP}";
|
|
|
|
$global{"${cmdname}first"} = 0;
|
|
}
|
|
else
|
|
{
|
|
&write_warnings("acronym '$cmdname' not defined");
|
|
}
|
|
|
|
$str . $_
|
|
}
|
|
|
|
sub do_cmd_useacronymstar{
|
|
local($_)=@_;
|
|
local($str,$abbrv,$long,$entry,$id);
|
|
local($optarg,$pat)=&get_next_optional_argument;
|
|
|
|
$cmdname = &missing_braces unless
|
|
(s/$next_pair_pr_rx/$cmdname=$2;''/eo);
|
|
|
|
if (defined %{$acronym{$cmdname}})
|
|
{
|
|
$abbrv = $acronym{$cmdname}{'abbrv'};
|
|
$long = $acronym{$cmdname}{'long'};
|
|
$entry = $acronym{$cmdname}{'entry'};
|
|
|
|
if ($global{"${cmdname}first"})
|
|
{
|
|
$long=~s/^([^a-zA-Z]*)([a-zA-Z])/\1\u\2/;
|
|
}
|
|
else
|
|
{
|
|
$abbrv=~s/^([^a-zA-Z]*)([a-zA-Z])/\1\u\2/;
|
|
}
|
|
|
|
$id = ++$global{'max_id'};
|
|
$abbrv = "\\acronymfont$OP$id$CP$abbrv$OP$id$CP";
|
|
|
|
$name = ($global{"${cmdname}first"} ? "$long$optarg ($abbrv)" : "$abbrv$optarg");
|
|
|
|
$id = ++$global{'max_id'};
|
|
$str = "\\xglossary${OP}$id${CP}type="
|
|
. $acronymtype . "${OP}$id${CP}";
|
|
$id = ++$global{'max_id'};
|
|
$str .= "${OP}$id${CP}"
|
|
. $entry . "${OP}$id${CP}";
|
|
$id = ++$global{'max_id'};
|
|
$str .= "${OP}$id${CP}";
|
|
$str .= $name;
|
|
$str .= "${OP}$id${CP}";
|
|
|
|
$global{"${cmdname}first"} = 0;
|
|
}
|
|
else
|
|
{
|
|
&write_warnings("acronym '$cmdname' not defined");
|
|
}
|
|
|
|
$str . $_
|
|
}
|
|
|
|
sub do_cmd_ifacronymfirstuse{
|
|
local($_) = @_;
|
|
local($acronym,$truebit,$falsebit,$str);
|
|
|
|
$acronym = &missing_braces unless ($_[0]=~s/$next_pair_pr_rx//o&&($acronym=$2));
|
|
$truebit = &missing_braces unless ($_[0]=~s/$next_pair_pr_rx//o&&($truebit=$2));
|
|
$falsebit = &missing_braces unless ($_[0]=~s/$next_pair_pr_rx//o&&($falsebit=$2));
|
|
|
|
$str = ($global{"${acronym}true"} ? $truebit : $falsebit);
|
|
|
|
$str . $_[0];
|
|
}
|
|
|
|
sub do_cmd_resetacronym{
|
|
local($_) = @_;
|
|
local($cmdname);
|
|
|
|
$cmdname = &missing_braces unless
|
|
(s/$next_pair_pr_rx/$cmdname=$2;''/eo);
|
|
|
|
if (defined %{$acronym{$cmdname}})
|
|
{
|
|
$global{"${cmdname}first"} = 1;
|
|
}
|
|
else
|
|
{
|
|
&write_warnings("acronym '$cmdname' not defined");
|
|
}
|
|
|
|
$_;
|
|
}
|
|
|
|
sub do_cmd_resetallacronyms{
|
|
local($_) = @_;
|
|
|
|
foreach $key (keys %acronym)
|
|
{
|
|
$global{"${key}first"} = 1;
|
|
}
|
|
|
|
$_;
|
|
}
|
|
|
|
sub do_cmd_unsetacronym{
|
|
local($_) = @_;
|
|
local($cmdname);
|
|
|
|
$cmdname = &missing_braces unless
|
|
(s/$next_pair_pr_rx/$cmdname=$2;''/eo);
|
|
|
|
if (defined %{$acronym{$cmdname}})
|
|
{
|
|
$global{"${cmdname}first"} = 0;
|
|
}
|
|
else
|
|
{
|
|
&write_warnings("acronym '$cmdname' not defined");
|
|
}
|
|
|
|
$_;
|
|
}
|
|
|
|
sub do_cmd_unsetallacronyms{
|
|
local($_) = @_;
|
|
|
|
foreach $key (keys %acronym)
|
|
{
|
|
$global{"${key}first"} = 0;
|
|
}
|
|
|
|
$_;
|
|
}
|
|
|
|
%savedglosentry = ();
|
|
|
|
# This command is deprecated
|
|
sub do_cmd_saveglosentry{
|
|
local($_) = @_;
|
|
local($name,$desc,$type,$pat);
|
|
|
|
($type,$pat) = &get_next_optional_argument;
|
|
|
|
$name = &missing_braces unless
|
|
s/$next_pair_pr_rx/$name=$2;''/eo;
|
|
$desc = &missing_braces unless
|
|
s/$next_pair_pr_rx/$desc=$2;''/eo;
|
|
|
|
$savedglosentry{$name}{'entry'} = "name=$name,description=$desc";
|
|
$savedglosentry{$name}{'type'} = $type;
|
|
|
|
$_;
|
|
}
|
|
|
|
sub do_cmd_storeglosentry{
|
|
local($_) = @_;
|
|
local($type,$pat,$entry,$label);
|
|
|
|
($type,$pat) = &get_next_optional_argument;
|
|
|
|
if ($type eq '')
|
|
{
|
|
$type = 'glossary';
|
|
}
|
|
|
|
$label = &missing_braces unless
|
|
s/$next_pair_pr_rx/$label=$2;''/eo;
|
|
|
|
$entry = &missing_braces unless
|
|
s/$next_pair_pr_rx/$entry=$2;''/eo;
|
|
|
|
$savedglosentry{$label}{'entry'} = $entry;
|
|
$savedglosentry{$label}{'type'} = $type;
|
|
|
|
$_;
|
|
}
|
|
|
|
sub do_cmd_useglosentry{
|
|
local($_) = @_;
|
|
local($optarg,$pat,$name,$str,$id);
|
|
($optarg,$pat) = &get_next_optional_argument;
|
|
|
|
$name = &missing_braces unless
|
|
(s/$next_pair_pr_rx/$name=$2;''/eo);
|
|
|
|
if (defined $savedglosentry{$name}{type})
|
|
{
|
|
$id = ++$global{'max_id'};
|
|
$str = "\\$savedglosentry{$name}{type}${OP}$id${CP}$savedglosentry{$name}{entry}";
|
|
|
|
unless ($optarg eq "")
|
|
{
|
|
$str .= ",$optarg";
|
|
}
|
|
|
|
$str .= "${OP}$id${CP}";
|
|
}
|
|
else
|
|
{
|
|
&write_warnings("glossary entry '$name' undefined");
|
|
$str = '';
|
|
}
|
|
|
|
$str . $_;
|
|
}
|
|
|
|
sub do_cmd_useGlosentry{
|
|
local($_) = @_;
|
|
local($optarg,$pat,$name,$str,$id);
|
|
($optarg,$pat) = &get_next_optional_argument;
|
|
|
|
$name = &missing_braces unless
|
|
(s/$next_pair_pr_rx/$name=$2;''/eo);
|
|
|
|
if (defined $savedglosentry{$name}{type})
|
|
{
|
|
$id = ++$global{'max_id'};
|
|
$str = "\\x$savedglosentry{$name}{type}${OP}$id${CP}$savedglosentry{$name}{entry}";
|
|
|
|
unless ($optarg eq "")
|
|
{
|
|
$str .= ",$optarg";
|
|
}
|
|
|
|
$str .= "${OP}$id${CP}";
|
|
}
|
|
else
|
|
{
|
|
&write_warnings("glossary entry '$name' undefined");
|
|
$str = '';
|
|
}
|
|
|
|
$str . $_;
|
|
}
|
|
|
|
sub do_cmd_gls{
|
|
local($_) = @_;
|
|
local($optarg,$pat,$label,$str,$id,$name);
|
|
($optarg,$pat) = &get_next_optional_argument;
|
|
|
|
$label = &missing_braces unless
|
|
(s/$next_pair_pr_rx/$label=$2;''/eo);
|
|
|
|
if (defined $savedglosentry{$label}{type})
|
|
{
|
|
$str = $savedglosentry{$label}{'entry'};
|
|
|
|
if ($str=~/name=[ ]*${OP}(\d+)${CP}(.*)${OP}\1${CP}/s)
|
|
{
|
|
$name = $2;
|
|
}
|
|
elsif (($str=~/name=[ ]*([^,]+),/m)
|
|
|| ($str=~/name=[ ]*([^,]+)\Z(?!\n)/m))
|
|
{
|
|
$name = $1;
|
|
}
|
|
|
|
$id = ++$global{'max_id'};
|
|
$str = "\\x$savedglosentry{$label}{type}${OP}$id${CP}$savedglosentry{$label}{entry}";
|
|
|
|
unless ($optarg eq "")
|
|
{
|
|
$str .= ",$optarg";
|
|
}
|
|
|
|
$str .= "${OP}$id${CP}";
|
|
$id = ++$global{'max_id'};
|
|
$str .= "${OP}$id${CP}$name${OP}$id${CP}";
|
|
}
|
|
else
|
|
{
|
|
&write_warnings("glossary entry '$label' undefined");
|
|
$str = '';
|
|
}
|
|
|
|
$str . $_;
|
|
}
|
|
|
|
sub do_cmd_glossarypreamble{
|
|
local($_) = @_;
|
|
$_[0];
|
|
}
|
|
|
|
sub do_cmd_glossarypostamble{
|
|
local($_) = @_;
|
|
$_[0];
|
|
}
|
|
|
|
sub do_cmd_glsnumformat{
|
|
local($_) = @_;
|
|
local($type,$pat) = &get_next_optional_argument;
|
|
|
|
if ($type eq '')
|
|
{
|
|
$type = 'glossary';
|
|
}
|
|
|
|
local($cmd) = '';
|
|
unless ($glsnumformat{$type} eq '')
|
|
{
|
|
$cmd = "\\$glsnumformat{$type}";
|
|
}
|
|
|
|
$cmd . $_;
|
|
}
|
|
|
|
sub do_cmd_setglossary{
|
|
local($_) = @_;
|
|
local($str,$type,$format,$delimN,$glodelim);
|
|
$str = &missing_braces unless ($_[0]=~s/$next_pair_pr_rx//o&&($str=$2));
|
|
|
|
unless (($str=~/type=([^,]+),|$/&&($type=$1)) ||
|
|
($str=~/type=${OP}(\d+)${CP}(.*)${OP}\1${CP}/&&($type=$2)))
|
|
{
|
|
$type = 'glossary';
|
|
}
|
|
|
|
if ($str=~/glsnumformat=[ ]*${OP}(\d+)${CP}(.*)${OP}\1${CP}/s)
|
|
{
|
|
$format = $2;
|
|
}
|
|
elsif (($str=~/glsnumformat=[ ]*([^,]+),/m)
|
|
|| ($str=~/glsnumformat=[ ]*([^,]+)\Z(?!\n)/m))
|
|
{
|
|
$format = $1;
|
|
}
|
|
|
|
if ($format ne '')
|
|
{
|
|
$glsnumformat{$type} = $format;
|
|
|
|
if ($format eq 'ignore')
|
|
{
|
|
$delimN{$type} = '';
|
|
}
|
|
}
|
|
|
|
if (($str=~/delimN=([^,]+),|$/&&($delimN=$1)) ||
|
|
($str=~/delimN=${OP}(\d+)${CP}(.*)${OP}\1${CP}/&&($delimN=$2)))
|
|
{
|
|
$delimN{$type} = $delimN;
|
|
}
|
|
|
|
if (($str=~/glodelim=([^,]+),|$/&&($glodelim=$1)) ||
|
|
($str=~/glodelim=${OP}(\d+)${CP}(.*)${OP}\1${CP}/&&($glodelim=$2)))
|
|
{
|
|
$glodelim{$type} = $glodelim;
|
|
}
|
|
|
|
$_[0];
|
|
}
|
|
|
|
sub do_cmd_ignore{
|
|
local($_) = @_;
|
|
local($str);
|
|
$str = &missing_braces unless ($_[0]=~s/$next_pair_pr_rx//o&&($str=$2));
|
|
|
|
$_[0];
|
|
}
|
|
|
|
sub do_cmd_hyperit{
|
|
join('', "\\textit ", $_[0]);
|
|
}
|
|
|
|
sub do_cmd_hyperrm{
|
|
join('', "\\textrm ", $_[0]);
|
|
}
|
|
|
|
sub do_cmd_hypertt{
|
|
join('', "\\texttt ", $_[0]);
|
|
}
|
|
|
|
sub do_cmd_hypersf{
|
|
join('', "\\textsf ", $_[0]);
|
|
}
|
|
|
|
sub do_cmd_hyperbf{
|
|
join('', "\\textbf ", $_[0]);
|
|
}
|
|
|
|
&ignore_commands( <<_IGNORED_CMDS_ );
|
|
makeglossary
|
|
makeacronym
|
|
_IGNORED_CMDS_
|
|
|
|
1;
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
%</glossary.perl>
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
%<*sample.tex>
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
\documentclass[a4paper]{report}
|
|
|
|
\usepackage[plainpages=false,colorlinks]{hyperref}
|
|
\usepackage{glossary}
|
|
|
|
\makeglossary
|
|
|
|
% You need to use the -m switch with makeglos.pl to concatenate
|
|
% entries with the same name but different descriptions
|
|
% If you don't, and you use PDFLaTeX you will get a warning
|
|
% about duplicate labels. To prevent this, set a different
|
|
% sort key for each entry, e.g. sort=glossary1 for the first
|
|
% entry and sort=glossary2 for the second entry
|
|
|
|
\storeglosentry{glossary1}{name=glossary,
|
|
description=1) list of technical words}
|
|
|
|
\storeglosentry{glossary2}{name=glossary,
|
|
description=2) collection of glosses}
|
|
|
|
\storeglosentry{Perl}{name=\texttt{Perl},
|
|
sort=Perl, % need a sort key because name contains a command
|
|
description=A scripting language}
|
|
|
|
\storeglosentry{pagelist}{name=page list,
|
|
% description value has to be enclosed in braces
|
|
% because it contains commas
|
|
description={a list of individual pages or page ranges,
|
|
e.g.\ 1,2,4,7-9}}
|
|
|
|
\begin{document}
|
|
|
|
\title{Sample Document Using glossary Package}
|
|
\author{Nicola Talbot}
|
|
\pagenumbering{alph}% prevent duplicate page link names if using PDF
|
|
\maketitle
|
|
|
|
\pagenumbering{roman}
|
|
\tableofcontents
|
|
|
|
\chapter{Introduction}
|
|
\pagenumbering{arabic}
|
|
|
|
A \gls{glossary1} is a very useful addition to any
|
|
technical document, although a \gls{glossary2} can
|
|
also simply be a collection of glosses, which is
|
|
another thing entirely.
|
|
|
|
Once you have run your document through \LaTeX, you
|
|
will then need to run the \texttt{.glo} file through
|
|
\texttt{makeindex}. You will need to set the output
|
|
file so that it creates a \texttt{.gls} file instead
|
|
of an \texttt{.ind} file, and change the name of
|
|
the log file so that it doesn't overwrite the index
|
|
log file (if you have an index for your document).
|
|
Rather than having to remember all the command line
|
|
switches, you can call the \gls{Perl} script
|
|
\texttt{makeglos.pl} which provides a convenient
|
|
wrapper.
|
|
|
|
If you have two terms with different meanings in your
|
|
\gls{glossary1}, \texttt{makeindex} will of course treat them as two
|
|
separate entries, however, some people prefer to
|
|
merge them. This can be done using \texttt{makeglos.pl}, and
|
|
passing the option \texttt{-m}.
|
|
|
|
If a comma appears within the name or description, grouping
|
|
must be used: \gls{pagelist}.
|
|
|
|
\printglossary
|
|
|
|
\end{document}
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
%</sample.tex>
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
%<*sample4col.tex>
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
\documentclass[a4paper]{article}
|
|
|
|
% start out with 3 column format to make it easier to modify
|
|
\usepackage[style=long,cols=3]{glossary}[2006/07/20]
|
|
|
|
% make glossary have 4 columns all left aligned
|
|
% (this assumes entries can fit onto a single line
|
|
% otherwise use p{} specifier instead of l)
|
|
\renewcommand{\glossaryalignment}{llll}
|
|
|
|
% Define header row
|
|
\newcommand{\glossaryheader}{%
|
|
\bfseries Name & \bfseries Description & \bfseries Unit &
|
|
\bfseries Page}
|
|
|
|
\makeglossary
|
|
|
|
\storeglosentry{w}{name={$w$},sort=w,description={width&m}}
|
|
\storeglosentry{M}{name={$M$},sort=M,description={mass&kg}}
|
|
|
|
\begin{document}
|
|
|
|
\printglossary
|
|
|
|
The width, \gls{w}, is measured in meters. The mass, \gls{M} is
|
|
measured in kilograms.
|
|
|
|
\end{document}
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
%</sample4col.tex>
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
%<*sampleAcr.tex>
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
\documentclass[a4paper]{report}
|
|
|
|
\usepackage[colorlinks,plainpages=false]{hyperref}
|
|
\usepackage[style=altlist,hypertoc,acronym]{glossary}
|
|
|
|
% use \makeglossary if using package option
|
|
% acronym=false
|
|
%\makeglossary
|
|
% use \makeacronym if using package option
|
|
% acronym=true
|
|
\makeacronym
|
|
|
|
\newacronym{svm}{support vector machine}{%
|
|
description=Statistical pattern recognition
|
|
technique~\cite{svm}}
|
|
|
|
\newacronym[ksvm]{k-svm}{kernel support vector machine}{%
|
|
description={Statistical pattern recognition technique
|
|
using the ``kernel trick'' (see also SVM)}}
|
|
|
|
\begin{document}
|
|
\tableofcontents
|
|
|
|
\chapter{Support Vector Machines}
|
|
|
|
The \svm\ is used widely in the area of pattern recognition.
|
|
\useacronym*[s]{svm} are \ldots
|
|
|
|
This is the long version: \svmlong\ or alternatively:
|
|
\acrln*{svm}.
|
|
Abbreviation: \svmshort\ or \acrsh*{svm}.
|
|
|
|
\chapter{Kernel Support Vector Machines}
|
|
|
|
The \ksvm\ is \ifacronymfirstuse{svm}{a}{an} \svm\ that uses
|
|
the so called ``kernel trick''.
|
|
|
|
%\resetacronym{ksvm}
|
|
\resetallacronyms
|
|
\useacronym*[s]{ksvm} \ldots
|
|
\svm.
|
|
|
|
\begin{thebibliography}{1}
|
|
\bibitem{svm} \ldots
|
|
\end{thebibliography}
|
|
|
|
%\printglossary
|
|
\printacronym
|
|
|
|
\end{document}
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
%</sampleAcr.tex>
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
%<*sampleEq.tex>
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
\documentclass[a4paper,12pt]{report}
|
|
|
|
\usepackage{amsmath}
|
|
\usepackage[colorlinks]{hyperref}
|
|
\usepackage[header,border=none,cols=3,number=equation]{glossary}[2006/07/20]
|
|
|
|
\newcommand{\erf}{\operatorname{erf}}
|
|
\newcommand{\erfc}{\operatorname{erfc}}
|
|
|
|
\makeglossary
|
|
|
|
% Uncomment the following line to put a blank line between
|
|
% every entry:
|
|
%\setglossary{delimT={\cr & \cr},gloskip={}}
|
|
|
|
% Change the glossary title:
|
|
|
|
\renewcommand{\glossaryname}{Index of Special Functions
|
|
and Notations}
|
|
|
|
% Change the glossary headings
|
|
|
|
\renewcommand{\entryname}{Notation}
|
|
|
|
\renewcommand{\descriptionname}{Function Name}
|
|
|
|
\renewcommand{\glspageheader}{Number of Formula}
|
|
|
|
% Add a blank row after the header row
|
|
\newcommand{\glossarysubheader}{ & & \\}
|
|
|
|
% Store entries for later use
|
|
|
|
\storeglosentry{Gamma}{name=\ensuremath{\Gamma(z)},
|
|
description=Gamma function,sort=Gamma}
|
|
|
|
\storeglosentry{gamma}{name={\ensuremath{\gamma(\alpha,x)}},
|
|
description=Incomplete gamma function,sort=gamma}
|
|
|
|
\storeglosentry{iGamma}{name={\ensuremath{\Gamma(\alpha,x)}},
|
|
description=Incomplete gamma function,sort=Gamma}
|
|
|
|
\storeglosentry{psi}{name=\ensuremath{\psi(x)},
|
|
description=Psi function,sort=psi}
|
|
|
|
\storeglosentry{erf}{name=\ensuremath{\erf(x)},
|
|
description=Error function,sort=erf}
|
|
|
|
\storeglosentry{erfc}{name=\ensuremath{\erfc},
|
|
description=Complementary error function,sort=erfc}
|
|
|
|
\storeglosentry{B}{name={\ensuremath{B(x,y)}},
|
|
description=Beta function,sort=B}
|
|
|
|
\storeglosentry{Bx}{name={\ensuremath{B_x(p,q)}},
|
|
description=Incomplete beta function,sort=Bx}
|
|
|
|
\storeglosentry{Tn}{name=\ensuremath{T_n(x)},
|
|
description=Chebyshev's polynomials of the first kind,sort=Tn}
|
|
|
|
\storeglosentry{Un}{name=\ensuremath{U_n(x)},
|
|
description=Chebyshev's polynomials of the second kind,sort=Un}
|
|
|
|
\storeglosentry{Hn}{name=\ensuremath{H_n(x)},
|
|
description=Hermite polynomials,sort=Hn}
|
|
|
|
\storeglosentry{Ln}{name=\ensuremath{L_n^\alpha(x)},
|
|
description=Laguerre polynomials,sort=Lna}
|
|
|
|
\storeglosentry{Znu}{name=\ensuremath{Z_\nu(z)},
|
|
description=Bessel functions,sort=Z}
|
|
|
|
\storeglosentry{Phi}{name={\ensuremath{\Phi(\alpha,\gamma;z)}},
|
|
description=confluent hypergeometric function,sort=Pagz}
|
|
|
|
\storeglosentry{knu}{name=\ensuremath{k_\nu(x)},
|
|
description=Bateman's function,sort=kv}
|
|
|
|
\storeglosentry{Dp}{name=\ensuremath{D_p(z)},
|
|
description=Parabolic cylinder functions,sort=Dp}
|
|
|
|
\storeglosentry{F}{name={\ensuremath{F(\phi,k)}},
|
|
description=Elliptical integral of the first kind,sort=Fpk}
|
|
|
|
\storeglosentry{C}{name=\ensuremath{C},
|
|
description=Euler's constant,sort=C}
|
|
|
|
\storeglosentry{G}{name=\ensuremath{G},
|
|
description=Catalan's constant,sort=G}
|
|
|
|
\begin{document}
|
|
\title{A Sample Document Using glossary.sty}
|
|
\author{Nicola Talbot}
|
|
\maketitle
|
|
|
|
\begin{abstract}
|
|
This is a sample document illustrating the use of the \textsf{glossary}
|
|
package. The functions here have been taken from ``Tables of
|
|
Integrals, Series, and Products'' by I.S.~Gradshteyn and I.M~Ryzhik.
|
|
The glossary is a list of special functions, so
|
|
the equation number has been used rather than the page number. This
|
|
can be done using the \texttt{number=equation} package
|
|
option.
|
|
\end{abstract}
|
|
|
|
\printglossary
|
|
|
|
\chapter{Gamma Functions}
|
|
|
|
\begin{equation}
|
|
\gls{Gamma} = \int_{0}^{\infty}e^{-t}t^{z-1}\,dt
|
|
\end{equation}
|
|
|
|
\verb|\ensuremath| is only required here if using
|
|
hyperlinks.
|
|
\begin{equation}
|
|
\useGlosentry{Gamma}{\ensuremath{\Gamma(x+1)}} = x\Gamma(x)
|
|
%\useGlosentry{Gamma}{\Gamma(x+1)} = x\Gamma(x)
|
|
\end{equation}
|
|
|
|
\begin{equation}
|
|
\gls{gamma} = \int_0^x e^{-t}t^{\alpha-1}\,dt
|
|
\end{equation}
|
|
|
|
\begin{equation}
|
|
\gls{iGamma} = \int_x^\infty e^{-t}t^{\alpha-1}\,dt
|
|
\end{equation}
|
|
|
|
\newpage
|
|
|
|
\begin{equation}
|
|
\gls{Gamma} = \Gamma(\alpha, x) + \gamma(\alpha, x)
|
|
\end{equation}
|
|
|
|
\begin{equation}
|
|
\gls{psi} = \frac{d}{dx}\ln\Gamma(x)
|
|
\end{equation}
|
|
|
|
\chapter{Error Functions}
|
|
|
|
\begin{equation}
|
|
\gls{erf} = \frac{2}{\surd\pi}\int_0^x e^{-t^2}\,dt
|
|
\end{equation}
|
|
|
|
\begin{equation}
|
|
\gls{erfc} = 1 - \erf(x)
|
|
\end{equation}
|
|
|
|
\chapter{Beta Function}
|
|
|
|
\begin{equation}
|
|
\gls{B} = 2\int_0^1 t^{x-1}(1-t^2)^{y-1}\,dt
|
|
\end{equation}
|
|
Alternatively:
|
|
\begin{equation}
|
|
\gls{B} = 2\int_0^{\frac\pi2}\sin^{2x-1}\phi\cos^{2y-1}\phi\,d\phi
|
|
\end{equation}
|
|
|
|
\begin{equation}
|
|
\gls{B} = \frac{\Gamma(x)\Gamma(y)}{\Gamma(x+y)} = B(y,x)
|
|
\end{equation}
|
|
|
|
\begin{equation}
|
|
\gls{Bx} = \int_0^x t^{p-1}(1-t)^{q-1}\,dt
|
|
\end{equation}
|
|
|
|
\chapter{Polynomials}
|
|
|
|
\section{Chebyshev's polynomials}
|
|
|
|
\begin{equation}
|
|
\gls{Tn} = \cos(n\arccos x)
|
|
\end{equation}
|
|
|
|
\begin{equation}
|
|
\gls{Un} = \frac{\sin[(n+1)\arccos x]}{\sin[\arccos x]}
|
|
\end{equation}
|
|
|
|
\section{Hermite polynomials}
|
|
|
|
\begin{equation}
|
|
\gls{Hn} = (-1)^n e^{x^2} \frac{d^n}{dx^n}(e^{-x^2})
|
|
\end{equation}
|
|
|
|
\section{Laguerre polynomials}
|
|
|
|
\begin{equation}
|
|
L_n^{\alpha} (x) = \frac{1}{n!}e^x x^{-\alpha}
|
|
\frac{d^n}{dx^n}(e^{-x}x^{n+\alpha})
|
|
\end{equation}
|
|
|
|
\chapter{Bessel Functions}
|
|
|
|
Bessel functions $Z_\nu$ are solutions of
|
|
\begin{equation}
|
|
\useglosentry{Znu}
|
|
\frac{d^2Z_\nu}{dz^2} + \frac{1}{z}\,\frac{dZ_\nu}{dz} +
|
|
\left( 1-\frac{\nu^2}{z^2}Z_\nu = 0 \right)
|
|
\end{equation}
|
|
|
|
\chapter{Confluent hypergeometric function}
|
|
|
|
\begin{equation}
|
|
\gls{Phi} = 1 + \frac{\alpha}{\gamma}\,\frac{z}{1!}
|
|
+ \frac{\alpha(\alpha+1)}{\gamma(\gamma+1)}\,\frac{z^2}{2!}
|
|
+\frac{\alpha(\alpha+1)(\alpha+2)}{\gamma(\gamma+1)(\gamma+2)}\,
|
|
\frac{z^3}{3!} + \cdots
|
|
\end{equation}
|
|
|
|
\begin{equation}
|
|
\gls{knu} = \frac{2}{\pi}\int_0^{\pi/2}
|
|
\cos(x \tan\theta - \nu\theta)\,d\theta
|
|
\end{equation}
|
|
|
|
\chapter{Parabolic cylinder functions}
|
|
|
|
\begin{equation}
|
|
\gls{Dp} = 2^{\frac{p}{2}}e^{-\frac{z^2}{4}}
|
|
\left\{
|
|
\frac{\surd\pi}{\Gamma\left(\frac{1-p}{2}\right)}
|
|
\Phi\left(-\frac{p}{2},\frac{1}{2};\frac{z^2}{2}\right)
|
|
-\frac{\sqrt{2\pi}z}{\Gamma\left(-\frac{p}{2}\right)}
|
|
\Phi\left(\frac{1-p}{2},\frac{3}{2};\frac{z^2}{2}\right)
|
|
\right\}
|
|
\end{equation}
|
|
|
|
\chapter{Elliptical Integral of the First Kind}
|
|
|
|
\begin{equation}
|
|
\gls{F} = \int_0^\phi \frac{d\alpha}{\sqrt{1-k^2\sin^2\alpha}}
|
|
\end{equation}
|
|
|
|
\chapter{Constants}
|
|
|
|
\begin{equation}
|
|
\gls{C} = 0.577\,215\,664\,901\ldots
|
|
\end{equation}
|
|
|
|
\begin{equation}
|
|
\gls{G} = 0.915\,965\,594\ldots
|
|
\end{equation}
|
|
|
|
\end{document}
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
%</sampleEq.tex>
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
%<*sampleEqPg.tex>
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
\documentclass[a4paper,12pt]{report}
|
|
|
|
\usepackage{amsmath}
|
|
\usepackage[colorlinks]{hyperref}
|
|
\usepackage[header,toc,border=none,cols=3,
|
|
number=equation]{glossary}[2006/07/20]
|
|
|
|
\newcommand{\erf}{\operatorname{erf}}
|
|
\newcommand{\erfc}{\operatorname{erfc}}
|
|
|
|
\renewcommand{\glossaryname}{Index of Special Functions and Notations}
|
|
|
|
\renewcommand{\glossarypreamble}{Numbers in italic indicate the equation number,
|
|
numbers in bold indicate page numbers where the main definition occurs.\par}
|
|
|
|
% set the default glossary numbers to italic
|
|
% hyperit is used instead of textit because
|
|
% the hyperref package is being used.
|
|
\setglossary{glsnumformat=hyperit}
|
|
|
|
% 1st column heading
|
|
\renewcommand{\entryname}{Notation}
|
|
|
|
% 2nd column heading
|
|
\renewcommand{\descriptionname}{Function Name}
|
|
|
|
% Add a blank row after the header
|
|
\newcommand{\glossarysubheader}{ & & \\}
|
|
|
|
% store glossary entries for later use
|
|
|
|
\storeglosentry{Gamma}{name=\ensuremath{\Gamma(z)},
|
|
description=Gamma function,sort=Gamma}
|
|
|
|
\storeglosentry{gamma}{name=\ensuremath{\gamma(\alpha,x)},
|
|
description=Incomplete gamma function,sort=gamma}
|
|
|
|
\storeglosentry{iGamma}{name=\ensuremath{\Gamma(\alpha,x)},
|
|
description=Incomplete gamma function,sort=Gamma}
|
|
|
|
\storeglosentry{psi}{name=\ensuremath{\psi(x)},
|
|
description=Psi function,sort=psi}
|
|
|
|
\storeglosentry{erf}{name=\ensuremath{\erf(x)},
|
|
description=Error function,sort=erf}
|
|
|
|
\storeglosentry{erfc}{name=\ensuremath{\erfc(x)},
|
|
description=Complementary error function,sort=erfc}
|
|
|
|
\storeglosentry{beta}{name=\ensuremath{B(x,y)},
|
|
description=Beta function,sort=B}
|
|
|
|
\storeglosentry{Bx}{name=\ensuremath{B_x(p,q)},
|
|
description=Incomplete beta function,sort=Bx}
|
|
|
|
\storeglosentry{Tn}{name=\ensuremath{T_n(x)},
|
|
description=Chebyshev's polynomials of the first kind,
|
|
sort=Tn}
|
|
|
|
\storeglosentry{Un}{name=\ensuremath{U_n(x)},
|
|
description=Chebyshev's polynomials of the second kind,
|
|
sort=Un}
|
|
|
|
\storeglosentry{Hn}{name=\ensuremath{H_n(x)},
|
|
description=Hermite polynomials,sort=Hn}
|
|
|
|
\storeglosentry{Lna}{name=\ensuremath{L_n^\alpha(x)},
|
|
description=Laguerre polynomials,sort=Lna}
|
|
|
|
\storeglosentry{Znu}{name=\ensuremath{Z_\nu(z)},
|
|
description=Bessel functions,sort=Z}
|
|
|
|
\storeglosentry{Pagz}{name=\ensuremath{\Phi(\alpha,\gamma;z)},
|
|
description=confluent hypergeometric function,sort=Pagz}
|
|
|
|
\storeglosentry{kv}{name=\ensuremath{k_\nu(x)},
|
|
description=Bateman's function,sort=kv}
|
|
|
|
\storeglosentry{Dp}{name=\ensuremath{D_p(z)},
|
|
description=Parabolic cylinder functions,sort=Dp}
|
|
|
|
\storeglosentry{Fpk}{name=\ensuremath{F(\phi,k)},
|
|
description=Elliptical integral of the first kind,sort=Fpk}
|
|
|
|
\storeglosentry{C}{name=\ensuremath{C},
|
|
description=Euler's constant,sort=C}
|
|
|
|
\storeglosentry{G}{name=\ensuremath{G},
|
|
description=Catalan's constant,sort=G}
|
|
|
|
\renewcommand{\shortglossaryname}{Special Functions}
|
|
|
|
\makeglossary
|
|
|
|
\pagestyle{headings}
|
|
|
|
\begin{document}
|
|
|
|
\title{Sample Document Using Interchangable Numbering}
|
|
\author{Nicola Talbot}
|
|
\maketitle
|
|
|
|
\begin{abstract}
|
|
This is a sample document illustrating the use of the \textsf{glossary}
|
|
package. The functions here have been taken from ``Tables of
|
|
Integrals, Series, and Products'' by I.S.~Gradshteyn and I.M~Ryzhik.
|
|
|
|
The glossary lists both page numbers and equation numbers.
|
|
Since the majority of the entries use the equation number,
|
|
\texttt{number=equation} was used as a package option.
|
|
The entries that should refer to the page number instead
|
|
use the \texttt{number=equation} glossary key.
|
|
Note that this example will only work where the
|
|
page number and equation number compositor is the same. So
|
|
it won't work if, say, the page numbers are of the form
|
|
2-4 and the equation numbers are of the form 4.6.
|
|
As most of the glossary entries should have an italic
|
|
format, it is easiest to set the default format to
|
|
italic.
|
|
|
|
\end{abstract}
|
|
|
|
\tableofcontents
|
|
|
|
\printglossary
|
|
|
|
\chapter{Gamma Functions}
|
|
|
|
The \useGlosentry[number=page,format=hyperbf]{Gamma}{gamma function} is
|
|
defined as
|
|
\begin{equation}
|
|
\gls{Gamma} = \int_{0}^{\infty}e^{-t}t^{z-1}\,dt
|
|
\end{equation}
|
|
|
|
\begin{equation}
|
|
\useGlosentry{Gamma}{\ensuremath{\Gamma(x+1)}} = x\Gamma(x)
|
|
\end{equation}
|
|
|
|
\begin{equation}
|
|
\gls{gamma} = \int_0^x e^{-t}t^{\alpha-1}\,dt
|
|
\end{equation}
|
|
|
|
\begin{equation}
|
|
\gls{iGamma} = \int_x^\infty e^{-t}t^{\alpha-1}\,dt
|
|
\end{equation}
|
|
|
|
\newpage
|
|
|
|
\begin{equation}
|
|
\useGlosentry{Gamma}{\ensuremath{\Gamma(\alpha)}} = \Gamma(\alpha, x) + \gamma(\alpha, x)
|
|
\end{equation}
|
|
|
|
\begin{equation}
|
|
\gls{psi} = \frac{d}{dx}\ln\Gamma(x)
|
|
\end{equation}
|
|
|
|
\chapter{Error Functions}
|
|
|
|
The \useGlosentry[number=page,format=hyperbf]{erf}{error
|
|
function} is defined as:
|
|
\begin{equation}
|
|
\gls{erf} = \frac{2}{\surd\pi}\int_0^x e^{-t^2}\,dt
|
|
\end{equation}
|
|
|
|
\begin{equation}
|
|
\gls{erfc} = 1 - \erf(x)
|
|
\end{equation}
|
|
|
|
\chapter{Beta Function}
|
|
|
|
\begin{equation}
|
|
\gls{beta} = 2\int_0^1 t^{x-1}(1-t^2)^{y-1}\,dt
|
|
\end{equation}
|
|
Alternatively:
|
|
\begin{equation}
|
|
\gls{beta} = 2\int_0^{\frac\pi2}\sin^{2x-1}\phi\cos^{2y-1}\phi\,d\phi
|
|
\end{equation}
|
|
|
|
\begin{equation}
|
|
\gls{beta} = \frac{\Gamma(x)\Gamma(y)}{\Gamma(x+y)} = B(y,x)
|
|
\end{equation}
|
|
|
|
\begin{equation}
|
|
\gls{Bx} = \int_0^x t^{p-1}(1-t)^{q-1}\,dt
|
|
\end{equation}
|
|
|
|
\chapter{Chebyshev's polynomials}
|
|
|
|
\begin{equation}
|
|
\gls{Tn} = \cos(n\arccos x)
|
|
\end{equation}
|
|
|
|
\begin{equation}
|
|
\gls{Un} = \frac{\sin[(n+1)\arccos x]}{\sin[\arccos x]}
|
|
\end{equation}
|
|
|
|
\chapter{Hermite polynomials}
|
|
|
|
\begin{equation}
|
|
\gls{Hn} = (-1)^n e^{x^2} \frac{d^n}{dx^n}(e^{-x^2})
|
|
\end{equation}
|
|
|
|
\chapter{Laguerre polynomials}
|
|
|
|
\begin{equation}
|
|
\gls{Lna} = \frac{1}{n!}e^x x^{-\alpha}
|
|
\frac{d^n}{dx^n}(e^{-x}x^{n+\alpha})
|
|
\end{equation}
|
|
|
|
\chapter{Bessel Functions}
|
|
|
|
Bessel functions $Z_\nu(z)$ are solutions of
|
|
\begin{equation}
|
|
\frac{d^2Z_\nu}{dz^2} + \frac{1}{z}\,\frac{dZ_\nu}{dz} +
|
|
\left(
|
|
1-\frac{\nu^2}{z^2}Z_\nu = 0
|
|
\right)
|
|
\end{equation}
|
|
\useglosentry{Znu}
|
|
|
|
\chapter{Confluent hypergeometric function}
|
|
|
|
\begin{equation}
|
|
\gls{Pagz} = 1 + \frac{\alpha}{\gamma}\,\frac{z}{1!}
|
|
+ \frac{\alpha(\alpha+1)}{\gamma(\gamma+1)}\,\frac{z^2}{2!}
|
|
+\frac{\alpha(\alpha+1)(\alpha+2)}
|
|
{\gamma(\gamma+1)(\gamma+2)}
|
|
\,\frac{z^3}{3!}
|
|
+ \cdots
|
|
\end{equation}
|
|
|
|
\begin{equation}
|
|
\gls{kv} = \frac{2}{\pi}\int_0^{\pi/2}
|
|
\cos(x \tan\theta - \nu\theta)\,d\theta
|
|
\end{equation}
|
|
|
|
\chapter{Parabolic cylinder functions}
|
|
|
|
\begin{equation}
|
|
\gls{Dp} = 2^{\frac{p}{2}}e^{-\frac{z^2}{4}}
|
|
\left\{
|
|
\frac{\surd\pi}{\Gamma\left(\frac{1-p}{2}\right)}
|
|
\Phi\left(-\frac{p}{2},\frac{1}{2};\frac{z^2}{2}\right)
|
|
-\frac{\sqrt{2\pi}z}{\Gamma\left(-\frac{p}{2}\right)}
|
|
\Phi\left(\frac{1-p}{2},\frac{3}{2};\frac{z^2}{2}\right)
|
|
\right\}
|
|
\end{equation}
|
|
|
|
\chapter{Elliptical Integral of the First Kind}
|
|
|
|
\begin{equation}
|
|
\gls{Fpk} = \int_0^\phi
|
|
\frac{d\alpha}{\sqrt{1-k^2\sin^2\alpha}}
|
|
\end{equation}
|
|
|
|
\chapter{Constants}
|
|
|
|
\begin{equation}
|
|
\gls{C} = 0.577\,215\,664\,901\ldots
|
|
\end{equation}
|
|
|
|
\begin{equation}
|
|
\gls{G} = 0.915\,965\,594\ldots
|
|
\end{equation}
|
|
|
|
\end{document}
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
%</sampleEqPg.tex>
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
%<*sampleNtn.tex>
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
\documentclass{report}
|
|
|
|
\usepackage[plainpages=false,colorlinks]{hyperref}
|
|
\usepackage{html}
|
|
%\usepackage{array}
|
|
\usepackage[toc,style=long,cols=3]{glossary}
|
|
|
|
\makeglossary
|
|
|
|
% Define a new glossary type called notation
|
|
\newglossarytype{notation}{not}{ntn}[style=long,cols=2,border,header]
|
|
|
|
% Set up notation style
|
|
\newcommand{\notationname}{Notation}
|
|
% Don't display numbers, remove commas and number hyphens
|
|
% for notation entries, and put a full stop after the
|
|
% deescription:
|
|
\setglossary{type=notation,glsnumformat=ignore,glodelim={.}}
|
|
|
|
\makenotation
|
|
|
|
\begin{document}
|
|
|
|
\title{Sample Document using glossary Package}
|
|
\author{Nicola Talbot}
|
|
\pagenumbering{alph}
|
|
\maketitle
|
|
|
|
\begin{abstract}
|
|
%stop hyperref complaining about duplicate page identifiers
|
|
\pagenumbering{Alph}
|
|
This is a sample document illustrating the use of the
|
|
\textsf{glossary} package. In this example, a new glossary type
|
|
called \texttt{notation} is defined, so that the document can have a
|
|
separate glossary of terms and index of notation. The index of notation
|
|
doesn't have associated numbers.
|
|
\end{abstract}
|
|
|
|
|
|
\pagenumbering{roman}
|
|
\tableofcontents
|
|
|
|
\printglossary
|
|
|
|
% Either of the following 2 commands will have
|
|
% the same effect with LaTeX. Effect slightly
|
|
% different with LaTeX2HTML.
|
|
|
|
%\printnotation
|
|
\printglossary[notation]
|
|
|
|
\chapter{Introduction}
|
|
\pagenumbering{arabic}
|
|
|
|
Sets\glossary{name=set,description=A collection of distinct objects}
|
|
are denoted by a caligraphic font
|
|
e.g.\ $\mathcal{S}$%
|
|
\notation{name=$\mathcal{S}$,description=A set,sort=S}.
|
|
|
|
Let $\mathcal{U}$ denote the universal set\notation{
|
|
name=$\mathcal{U}$,description={The universal set},sort=U}.
|
|
|
|
The cardinality\glossary{name=cardinality,
|
|
description=The number of elements in the specified set} of
|
|
a set $\mathcal{S}$ is denoted $|\mathcal{S}|$%
|
|
\notation{name=$\mid\mathcal{S}\mid$,
|
|
description=cardinality of $\mathcal{S}$,sort=cardinality}
|
|
|
|
\chapter{Next}
|
|
|
|
Now for a hyperlink:
|
|
\xnotation{name=$\mathcal{U}$, description={The universal
|
|
set}, sort=U}{$\mathcal{U}$}.
|
|
|
|
\end{document}
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
%</sampleNtn.tex>
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
%<*sampleNtn2.tex>
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
\documentclass{report}
|
|
|
|
\usepackage[plainpages=false,colorlinks]{hyperref}
|
|
\usepackage{html}
|
|
\usepackage[toc]{glossary}[2006/07/20]
|
|
|
|
\makeglossary
|
|
|
|
% Define a new glossary type called notation
|
|
% Suppress the page numbering in the list of notation
|
|
\newglossarytype[nlg]{notation}{not}{ntn}[number=none]
|
|
|
|
% Set up notation style
|
|
\newcommand{\notationname}{Notation}
|
|
|
|
\makenotation
|
|
|
|
\begin{document}
|
|
|
|
% Save details for later use (note the use of \protect):
|
|
\storeglosentry[notation]{not:set}{name={$\mathcal{S}$},
|
|
description=A set,sort=S}
|
|
|
|
\storeglosentry[notation]{not:U}{name=$\mathcal{U}$,
|
|
description={The universal set},sort=U}
|
|
|
|
\storeglosentry[notation]{not:card}{name=$\mid\mathcal{S}\mid$,
|
|
description=cardinality of $\mathcal{S}$,
|
|
sort=cardinality}
|
|
|
|
\storeglosentry{glos:set}{name=set,description=A collection of
|
|
distinct objects}
|
|
|
|
\storeglosentry{glos:card}{name=cardinality,description=The number of
|
|
elements in the specified set}
|
|
|
|
\title{Sample Document using glossary Package}
|
|
\author{Nicola Talbot}
|
|
\pagenumbering{alph}
|
|
\maketitle
|
|
|
|
\begin{abstract}
|
|
%stop hyperref complaining about duplicate page identifiers:
|
|
\pagenumbering{Alph}
|
|
This is a sample document illustrating the use of the
|
|
\textsf{glossary} package. In this example, a new glossary type
|
|
called \texttt{notation} is defined, so that the document can have a
|
|
separate glossary of terms and index of notation. The index of notation
|
|
doesn't have associated numbers.
|
|
\end{abstract}
|
|
|
|
|
|
\pagenumbering{roman}
|
|
\tableofcontents
|
|
|
|
\printglossary
|
|
|
|
% Either of the following 2 commands will have
|
|
% the same effect with LaTeX. Effect slightly
|
|
% different with LaTeX2HTML.
|
|
|
|
\printnotation
|
|
%\printglossary[notation]
|
|
|
|
\chapter{Introduction}
|
|
\pagenumbering{arabic}
|
|
|
|
Sets\useglosentry{glos:set}
|
|
are denoted by a caligraphic font
|
|
e.g.\ $\mathcal{S}$\useglosentry{not:set}.
|
|
|
|
Let \gls{not:U} denote the universal set.
|
|
|
|
The \gls{glos:card} of a set $\mathcal{S}$ is denoted
|
|
\gls{not:card}.
|
|
|
|
\chapter{Another Chapter}
|
|
|
|
Another mention of the universal set \gls{not:U}.
|
|
|
|
\end{document}
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
%</sampleNtn2.tex>
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
%<*sampleSec.tex>
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
\documentclass{report}
|
|
|
|
\usepackage[plainpages=false,colorlinks]{hyperref}
|
|
\usepackage[style=altlist,toc,number=section]{glossary}
|
|
|
|
\makeglossary
|
|
|
|
\storeglosentry{ident}{name=identity matrix,description=diagonal
|
|
matrix with 1s along the leading diagonal}
|
|
|
|
\storeglosentry{diag}{name=diagonal matrix,
|
|
description=matrix whose only non-zero entries are along
|
|
the leading diagonal}
|
|
|
|
\storeglosentry{sing}{name=singular matrix,
|
|
description=matrix with zero determinant}
|
|
|
|
\begin{document}
|
|
|
|
\pagenumbering{roman}
|
|
\tableofcontents
|
|
|
|
\printglossary
|
|
|
|
\chapter{Introduction}
|
|
\pagenumbering{arabic}
|
|
This is a sample document illustrating the use of the
|
|
\textsf{glossary} package.
|
|
|
|
\chapter{Diagonal matrices}
|
|
|
|
A \gls[format=hyperit]{diag} is a matrix where all elements not on the
|
|
leading diagonal are zero. This is the
|
|
primary definition, so an italic font is used for the page number.
|
|
|
|
\newpage
|
|
\section{Identity matrix}
|
|
The \gls[format=hyperit]{ident} is a \gls{diag} whose leading
|
|
diagonal elements are all equal to 1.
|
|
|
|
Here is another entry for a \gls{diag}.
|
|
|
|
\chapter{Singular Matrices}
|
|
|
|
A \gls{sing} is a matrix with zero determinant.
|
|
\useGlosentry{sing}{Singular matrices} are non-invertible.
|
|
|
|
Another \gls{ident} entry.
|
|
|
|
\end{document}
|
|
% \end{macrocode}
|
|
% \begin{macrocode}
|
|
%</sampleSec.tex>
|
|
% \end{macrocode}
|
|
%\fi
|
|
%\Finale
|
|
\endinput
|