diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/glossary/glossary.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/glossary/glossary.dtx | 4778 |
1 files changed, 4778 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/glossary/glossary.dtx b/Master/texmf-dist/source/latex/glossary/glossary.dtx new file mode 100644 index 00000000000..bf00b2ba979 --- /dev/null +++ b/Master/texmf-dist/source/latex/glossary/glossary.dtx @@ -0,0 +1,4778 @@ +%\iffalse +% glossary.dtx generated using makedtx version 0.9b (c) Nicola Talbot +% Command line args: +% -macrocode ".*\.p.*l" +% -macrocode ".*\.bat" +% -setambles ".*\.p.*l=>\nopreamble\nopostamble" +% -setambles ".*\.bat=>\nopreamble\nopostamble" +% -src "(.+)\.(sty)=>\1.\2" +% -src "(.+)\.(pl)=>\1.\2" +% -src "(.+)\.(bat)=>\1.\2" +% -src "(.+)\.(perl)=>\1.\2" +% -src "(.+)\.(tex)=>\1.\2" +% -doc "manual.tex" +% -author "Nicola Talbot" +% -dir "source" +% glossary +% Created on 2005/9/27 12:20 +%\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) 2005 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}]{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{\stynamefmt}[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.24: \LaTeXe\ Package to Assist Generating Glossaries} +% \author{Nicola L.C. Talbot} +% \date{27th September 2005} +% \maketitle +%\tableofcontents +% +% \section{Introduction} +% \changes{1.0}{2004 July 29}{Initial version} +% The \stynamefmt{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/}. 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, 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. +% +% \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}{ll} +%\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 +%\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} +%The page 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}} +%\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{hyperit} & The number is a hyper link in italic +%\end{tabular} +%\end{center} +%If the \pkgopt{hyper} option has not been set, +%\glsnumfmt{hyperrm} etc are equivalent to \texttt{textrm} etc. +%You should use \icmdname{hyperrm} instead of +%\cmdname{hyperpage}, as \cmdname{hyperpage} 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.}. +% +%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 hyperlink to the +%relevant entry in the glossary, if hyper +%links are supported. +% +%\subsection{Storing Glossary Information} +% +%\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. That information +%can then be used later with any of the following commands: +%\changes{2.14}{2005 May 28}{'useglosentry added} +%\changes{2.14}{2005 May 28}{'useGlosentry added} +%\changes{2.18}{2005 July 5}{'gls added} +%\DescribeMacro{\useglosentry} +%\DescribeMacro{\useGlosentry} +%\DescribeMacro{\gls}\\[10pt] +%\begin{ttfamily} +%\cmdname{useglosentry}[\textrm{\meta{opt}}]\{\textrm{\meta{label}}\}\\ +%\cmdname{useGlosentry}[\textrm{\meta{opt}}]\{\textrm{\meta{label}}\}\{\textrm{\meta{text}}\}\\ +%\cmdname{gls}[\textrm{\meta{opt}}]\{\textrm{\meta{label}}\} +%\end{ttfamily}\\[10pt] +%\cmdname{useglosentry} adds the stored glossary entry +%\meta{gls-entry} to the appropriate glossary, +%\cmdname{useGlosentry} adds the stored 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 \meta{gls-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={$\protect\mathcal{U}$}, +% description={The universal set}, +% sort=U} +%\end{verbatim} +%(Note the use of \cmdname{protect}.) 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} +%The optional argument \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 \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} +%The identifying label, \meta{label}, should not contain any +%special characters, and since \cmdname{storeglosentry} is +%fragile, care should be taken when using commands within its +%argument. If in doubt, use \cmdname{protect}. +% +%\section{makeglos.pl} +% +%The glossary information (as given by the commands +%\cmdname{glossary} and \cmdname{xglossary}) is saved in the 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.glo +%\end{verbatim} +%will perform the command: +%\begin{verbatim} +%makeindex -s mydoc.ist -t mydoc.glg -o mydoc.gls mydoc.glo +%\end{verbatim} +%The \filetype{glo} extension may be omitted. 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}. In addition, if the extension +%to the input file name is omitted, \filetype{glo} will be +%assumed. 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. +% +%The name of the \filetype{ist} file can be changed by redefining +%the command \cmdname{istfilename}\DescribeMacro{\istfilename}. +%For example: +%\begin{verbatim} +%\renewcommand{\istfilename}{foo.ist} +%\end{verbatim} +%However, you will need to explicitly pass the name of this +%file to \appname{makeglos.pl} using the \texttt{-s} switch. +% +%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 \stynamefmt{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} +% +%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}} +%\item[\pkgopt{number}] +% Associated number corresponding to each entry. Values: +%\begin{description} +%\item[\pkgoptval{page}{number}] +%Each entry has the corresponding page number(s) where the +%entry is defined. (Default) +%\item[\pkgoptval{section}{number}] +%Each entry has the corresponding section number(s) where +%the entry is defined. +%\item[\pkgoptval{none}{number}] The corresponding numbers are +%suppressed. +%\end{description} +% +%\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 \stynamefmt{hyperref} +%package, \pkgopt{hypertoc} will generate a link to the +%beginning of the page, whereas \pkgopt{toc} will have +%a hyperlink to jst 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 \stynamefmt{hyperref} or \stynamefmt{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} +%\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 +%\stynamefmt{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!}!\\[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. +% +%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 \stynamefmt{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}. +%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} +%\newcommand{\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. +% +%\changes{2.1}{2004 October 25}{name field can be omitted in +%\texttt{'newacronym}} +%The \gloskey{name} key is not used 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} +% +%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} +%\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.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 the table of contents entry.) +% +%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 \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 \stynamefmt{xspace} package +%before loading the \stynamefmt{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} +% +%\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 \stynamefmt{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} +%\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{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. +% +%\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. +% +%\end{description} +%Note that: +%\begin{verbatim} +%\setglossary{glsnumformat=ignore} +%\end{verbatim} +%is equivalent to +%\begin{verbatim} +%\setglossary{glsnumformat=ignore,delimN={},delimR={}} +%\end{verbatim} +% +%The number associated with each entry is, by default, the page number where +% that entry was defined. If the package option +%\pkgopt[section]{number} has been chosen, this +% will be the section number instead. You can choose a different counter +% by changing the value of the command \cmdname{theglossarynum}\DescribeMacro{\theglossarynum}. +%For example, suppose you have the following code: +%\begin{verbatim} +%\begin{equation} +%\Gamma(z) = \int_{0}^{\infty}e^{-t}t^{z-1}\,dt +%\end{equation} +%\glossary{name=$\Gamma(z)$,description=Gamma function,sort=Gamma} +%\end{verbatim} +%and you want the glossary to refer to the equation number, instead of the +%page or section number, this can be done by redefining \cmdname{theglossarynum} +%as follows: +%\begin{verbatim} +%\renewcommand{\theglossarynum}{\theequation} +%\end{verbatim} +%If the equation number depends on another counter (such as +%\texttt{chapter}) +%you will need to specify that the number is in the form \meta{NUM}.\meta{num} +% (e.g.\ 3.24). This can be done by redefining the \cmdname{pagecompositor}\DescribeMacro{\pagecompositor}\ command: +%\begin{verbatim} +%\renewcommand{\pagecompositor}{.} +%\end{verbatim} +%(By default this value is \texttt{-}, unless the package option +%\pkgopt[section]{number} has +%been chosen, in which case this command has the value \texttt{.}\ +%(full stop), as in the example above). +%The \cmdname{pagecompositor} command must be +%redefined before \icmdname{makeglossary} for it to have any effect. +%If the package option \pkgopt[none]{number} is used, +%the numbering will be suppressed, regardless +%of the value of \icmdname{theglossarynum}. +%This command corresponds to the \istkey{page\_compositor} key +%in the \appname{makeindex} style file. +% +%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}.\DescribeMacro{\glossaryalignment} +% +%\changes{2.1}{2004 October 25}{made glossary compatible with array package} +%The above conflicts with the \stynamefmt{array} package, so as +%from version 2.1, if the \stynamefmt{array} package has been +%loaded \emph{prior} to loading the \stynamefmt{glossary} package, +%the new column type \texttt{G} will be defined and used +%instead of \cmdname{glossaryalignment}. +% +%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] +%if it's the first +%item of the page or\\[5pt] +%\verb'\\ '\meta{text}\verb" &"\\[5pt] +%otherwise. +%This command corresponds to the \istkey{item\_0} key in the +%\appname{makeindex} style file. +% +%The command \cmdname{gloskip}\DescribeMacro{\gloskip}\ 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 line +% in the \envname{longtable} or \envname{supertabular} environment. +%This command corresponds to the \istkey{group\_skip} key in +%the \appname{makeindex} style file. +% +%The command \cmdname{glossaryheader}\DescribeMacro{\glossaryheader}\ (if \pkgopt[long]{style} or \pkgopt[super]{style} is selected) +%indicates what to do at the start of the \envname{longtable} or +%\envname{supertabular} environment. If \pkgopt[none]{border}, it +%is defined as: +%\begin{verbatim} +%\bfseries\entryname & \bfseries \descriptionname\\ +%\end{verbatim} +%So, if you want the \icmdname{descriptionname} to be centred, you could do: +%\begin{verbatim} +%\renewcommand{\glossaryheader}{\bfseries\entryname & +% \hfil\bfseries\descriptionname\\} +%\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\textwidth"). +% +%\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 +%\stynamefmt{hyperref} package before loading the +%\stynamefmt{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. +%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. The \icmdname{pagecompositor}, +%\icmdname{theglossarynum}, \icmdname{glossaryname} and +%\icmdname{glossaryheader} 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 +%\stynamefmt{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. +% +%\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 command \icmdname{theglossarynum} is ignored +%by \LaTeX2HTML, as page numbers have no meaning within +%HTML files. +% +%\item The configuration file \texttt{glossary.cfg} is ignored. +% +%\end{itemize} +% +% +%\section{Troubleshooting} +%\label{sec:trouble} +%\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 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 text width (in fact, it's \verb"0.6\textwidth") +%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 \stynamefmt{glossary} package uses the \stynamefmt{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 \stynamefmt{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 \stynamefmt{hyperref} or +%\stynamefmt{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 \stynamefmt{glossary} package conflicts with the +%\stynamefmt{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 \stynamefmt{glossary} package used to conflict with the +%\stynamefmt{array} package. This was fixed in version 2.1, +%however, you must load the \stynamefmt{array} package +%\emph{prior} to loading the \stynamefmt{glossary} 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 \stynamefmt{glossary} package conflicts with +%\stynamefmt{ngerman}. +% +%This problem is caused by the fact that \stynamefmt{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 \stynamefmt{ngerman} package after the +%\icmdname{makeglossary} command: +%\begin{verbatim} +%\usepackage{glossary} +%\makeglossary +%\usepackage{ngerman} +%\end{verbatim} +% +%\item First omit the \stynamefmt{ngerman} package and include +%\icmdname{makeglossary} then \LaTeX\ your document. +%This will create the \filetype{ist} file. Then include the +%\stynamefmt{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 \stynamefmt{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} +%\DescribeMacro{\glsprimaryfmt}% +%The command \cmdname{glsprimaryfmt} is no longer used in \icmdname{newacronym} as you can end up with duplicate +%page numbers, however the command is currently still defined (although it +% may be removed in future versions.) +% +%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 \stynamefmt{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 the following people for their +%suggestions: +%Jens~Happe, +%Dmitry~Katsubo, +%Markus~Lazanowski, +%Slava~Pestov and +%Dario~Teixeira +% +% \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}[2005/09/27 2.24 (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. +% \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}}} + +\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}}} + +\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}}} +\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}} + {}} + +\define@key{gloss} + {number} + {\ifthenelse{\equal{#1}{none}\or\equal{#1}{page}\or\equal{#1}{section}} + {\def\gls@number{#1}} + {\PackageError{glossary} + {Unknown glossary number style '#1'} + {Available styles are: none, page and section}}} + +\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'}}} + +\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'}}} + +\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 + + +\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'}}} + +\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'}}} + +\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' canonly 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@number{page} +\gls@cols=2\relax +\gls@tocfalse +\@ifundefined{hyperpage}{\glshyperfalse\glshyperacronymfalse}{\glshypertrue\glshyperacronymtrue} + +\@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 xspace package has been loaded, use \verb/\xspace/ +% in acronyms. +% \begin{macrocode} +\@ifundefined{xspace}{% +\let\glsxspace\relax}{% +\let\glsxspace\xspace} +% \end{macrocode} +% Temporarily disable xspace: +% \begin{macrocode} +\newcommand{\gls@noxspace}[1]{{\let\glsxspace\relax#1}} +% \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} +% Process options +% \begin{macrocode} +\DeclareOption*{\edef\@pkg@ptions{\noexpand\setkeys{gloss}{\CurrentOption}} +\ifthenelse{\equal{\CurrentOption}{}}{}{\@pkg@ptions}} + +\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 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 \texttt{\symbol{92}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) +% \begin{macrocode} +\define@key{wrgloss}{name}{\gdef\@glo@n@me{#1}} +\define@key{wrgloss}{description}{\def\@descr{#1}} +\define@key{wrgloss}{sort}{\gdef\@s@rt{#1}} +\define@key{wrgloss}{format}{\def\@f@rm@t{#1}} +% \end{macrocode} +% Redefine "\@wrglossary" so that it separates out the entry name and +% entry description. Substitute "\thepage" for "\theglossarynum" which +% the user can redefine to be "\theequation" etc, +% \begin{macrocode} +\newcommand{\@@wrglossary}{} +\newcommand{\@glo@l@bel}{} + +\renewcommand{\@wrglossary}[1]{\relax +\gdef\@glo@n@me{}\def\@descr{}\def\@s@rt{}\def\@f@rm@t{}\relax + \setkeys{wrgloss}{#1}\relax +\ifthenelse{\equal{\@s@rt}{}}{\gdef\@s@rt{\@glo@n@me}}{}% +\ifthenelse{\equal{\@glo@l@bel}{}}{\gdef\@glo@l@bel{GGG:\@s@rt}}{}% +\ifthenelse{\equal{\@f@rm@t}{}} + {\protected@write\@glossaryfile{}% + {\string\glossaryentry{\@s@rt @{% + \string\glosslabel{\@glo@l@bel}{\@glo@n@me}}\@descr + \string\relax|glsnumformat}{\theglossarynum}}} + {\protected@write\@glossaryfile{}% + {\string\glossaryentry{\@s@rt @{% + \string\glosslabel{\@glo@l@bel}{\@glo@n@me}}\@descr + \string\relax|\@f@rm@t}{\theglossarynum}}}\relax + \endgroup\@esphack +\@@wrglossary +} +% \end{macrocode} +% Command to extract name key from glossary entry. +% \begin{macrocode} +\newcommand{\@gls@getn@me}[1]{\@bsphack\begingroup\@sanitize +\gdef\@glo@n@me{}\setkeys{wrgloss}{#1}\relax +\endgroup\@esphack} +% \end{macrocode} +% Now do macro 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} +% Save a bit of typing. The followig command is new to v2.17 +% \begin{macrocode} +\newcommand*{\storeglosentry}[3][glossary]{% +\@ifundefined{glo@#2@entry}{% +\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'}}% +} + +\providecommand{\useglosentry}[2][\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{\csname glo@#2@type\endcsname}% +\ifx#1\relax +\protected@edef\@glo@cmd{\expandafter\noexpand\csname \@glostype\endcsname{\csname glo@#2@entry\endcsname}}% +\else +\protected@edef\@glo@cmd{\expandafter\noexpand\csname \@glostype{\csname glo@#2@entry\endcsname,#1}}% +\fi +\@glo@cmd +}} + +\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}% +\ifx#1\relax +\protected@edef\@glo@cmd{\expandafter\noexpand\csname \@glostype\endcsname{\csname glo@#2@entry\endcsname}}% +\else +\protected@edef\@glo@cmd{\expandafter\noexpand\csname \@glostype\endcsname{\csname glo@#2@entry\endcsname,#1}}% +\fi +\@glo@cmd{#3}% +}} + +\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]{% +\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 "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 "\printglossary" +% \begin{macrocode} +\ifthenelse{\equal{\gls@number}{page}}{ + \newcommand{\theglossarynum}{\thepage} + \newcommand{\pagecompositor}{-} + \newcommand{\@glossary@delimN}{, } + \newcommand{\@glossary@delimR}{--} + \ifglshyper + \newcommand{\glsXglossaryXnumformat}[1]{\hyperrm{#1}}% + \else + \newcommand{\glsXglossaryXnumformat}[1]{#1}\fi} + {\ifthenelse{\equal{\gls@number}{section}} + {\newcommand{\theglossarynum}{\thesection} + \newcommand{\pagecompositor}{.} + \newcommand{\@glossary@delimN}{, } + \newcommand{\@glossary@delimR}{--} + \ifglshyper + \newcommand{\glsXglossaryXnumformat}[1]{\hyperrm{#1}}% + \else + \newcommand{\glsXglossaryXnumformat}[1]{#1}% + \fi} + {\newcommand{\theglossarynum}{\thepage} + \newcommand{\pagecompositor}{-} + \newcommand{\@glossary@delimN}{} + \newcommand{\@glossary@delimR}{} + \newcommand{\glsXglossaryXnumformat}[1]{}}} + +\newcommand{\glsnumformat}[2][glossary]{% +\@ifundefined{glsX#1Xnumformat}{% +\PackageError{glossary}{Glossary type '#1' undefined}{}}{% +\csname glsX#1Xnumformat\endcsname{#2}}} + +\def\@glostype{glossary} +\newcommand{\delimN}{\csname @\@glostype @delimN\endcsname} +\newcommand{\delimR}{\csname @\@glostype @delimR\endcsname} +\newcommand{\glodelim}{\csname @\@glostype @glodelim\endcsname} + +% \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}{glodelim}{\def\@glodelim{#1}} + +\providecommand{\ignore}[1]{} +\newcommand{\setglossary}[1]{% +\def\@glsnumformat{}% +\def\@glsnumtype{glossary}% +\def\@delimN{@dontchange@}% +\def\@delimR{@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{\@glodelim}{@dontchange@}}{}{% +\expandafter\xdef\csname @\@glsnumtype @glodelim\endcsname{% +\@glodelim} +} +}} +% \end{macrocode} +% Now define the command "\printglossary" which will print the contents of the glossary file. +% \begin{macrocode} +\newcommand{\@gls@glossary@inext}{gls} +\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}}% +\@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} +% Define command to generate glossary title (new to +% version 2.24) +% \begin{macrocode} +\providecommand{\glossarytitle}{% +\@ifundefined{chapter} +{\section*{\@glossaryname}\relax + \ifgls@toc\@glosaddtoc{section}\fi} +{\ifthenelse{\boolean{gls@section}} + {\section*{\@glossaryname}\relax + \ifgls@toc\@glosaddtoc{section}\fi} + {\ifgls@hypertoc\@ifundefined{if@twoside}{\clearpage}{% + \if@twoside\@ifundefined{cleardoublepage}{\cleardoublepage}{\clearpage}\else + \clearpage\fi}\phantomsection\@glosaddtoc{chapter}\fi\chapter*{\@glossaryname}\relax + \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} +{\glossarytitle + \glossarypreamble\@bef@reglos} + {\@ftergl@s\glossarypostamble} +}{% +\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} +% Now define what to do depending on which style has been selected. +%First deal with the "list" and "altlist" style, as they're the easiest. +% \begin{macrocode} + +\ifthenelse{\equal{\gls@style}{list} \or \equal{\gls@style}{altlist}} +{ +\newcommand{\beforeglossary}{\begin{description}} +\newcommand{\afterglossary}{\end{description}} +\newcommand{\gloskip}{\indexspace} +\ifthenelse{\equal{\gls@style}{list}} + {\newcommand{\gloitem}[1]{\item[#1]} + \newcommand{\@glossary@glodelim}{, }} + {\newcommand{\gloitem}[1]{\item[#1]\mbox{}\par} + \newcommand{\@glossary@glodelim}{ }} +}{ +% \end{macrocode} +%Now deal with the other styles. I orginally used a "tabular" environment, +%but obviously this doesn't work for a glossary longer than one page. +%Nick van Foreest recommended the "supertabular" environment. The +% "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}} + +\newlength{\descriptionwidth} +\setlength{\descriptionwidth}{0.6\textwidth} + +\ifthenelse{\equal{\gls@header}{none}} +{ + \ifthenelse{\equal{\gls@border}{none}} + {\newcommand{\glossaryheader}{}} + {\newcommand{\glossaryheader}{\hline }} +} +{ +\ifnum\gls@cols=2\relax + \ifthenelse{\equal{\gls@border}{none}} + {\newcommand{\glossaryheader} + {\bfseries\entryname & \bfseries \descriptionname\\}} + {\newcommand{\glossaryheader} + {\hline\bfseries\entryname & \bfseries\descriptionname + \\\hline\hline}} +\else + \ifthenelse{\equal{\gls@border}{none}} + {\newcommand{\glossaryheader} + {\bfseries\entryname & \bfseries \descriptionname & \\}} + {\newcommand{\glossaryheader} + {\hline\bfseries\entryname &\bfseries\descriptionname & + \\\hline\hline}} +\fi +} + +\ifthenelse{\equal{\gls@border}{none}} +{ +\ifnum\gls@cols=2\relax + \@ifundefined{newcolumntype}{\newcommand{\glossaryalignment}{@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}}}{ + \newcolumntype{G}{@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}}} +\else + \@ifundefined{newcolumntype}{\newcommand{\glossaryalignment}{@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}l}}{ + \newcolumntype{G}{@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}l}} +\fi + + \ifthenelse{\equal{\gls@style}{super}}{ + \newcommand{\afterglossary}{ \\\end{supertabular}} + } + { + \newcommand{\afterglossary}{ \\\end{longtable}} + } + + \newcommand{\glosstail}{} +} +{ +\ifnum\gls@cols=2\relax + \@ifundefined{newcolumntype}{\newcommand{\glossaryalignment}{|@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}|}}{ + \newcolumntype{G}{|@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}|}} +\else + \@ifundefined{newcolumntype}{\newcommand{\glossaryalignment}{|@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}l|}}{ + \newcolumntype{G}{|@{\hspace{\tabcolsep}\bfseries}lp{\descriptionwidth}l|}} +\fi + + \ifthenelse{\equal{\gls@style}{super}}{ + \newcommand{\afterglossary}{ \\\hline\end{supertabular}} + } + { + \newcommand{\afterglossary}{ \\\hline\end{longtable}} + } + + \newcommand{\glosstail}{\hline} +} + +\ifthenelse{\equal{\gls@style}{super}} +{ + \@ifundefined{newcolumntype}{ + \newcommand{\beforeglossary} + {\tablehead{\glossaryheader}\tabletail{\glosstail} + \begin{supertabular}{\glossaryalignment}}} + {\newcommand{\beforeglossary} + {\tablehead{\glossaryheader}\tabletail{\glosstail} + \begin{supertabular}{G}}} +} +{ + \@ifundefined{newcolumntype}{\newcommand{\beforeglossary} + {\begin{longtable}{\glossaryalignment} + \glossaryheader\endhead\glosstail\endfoot}} + {\newcommand{\beforeglossary} + {\begin{longtable}{G} + \glossaryheader\endhead\glosstail\endfoot}} +} + +\ifnum\gls@cols=2\relax +\newcommand{\gloskip}{\ifgloitemfirst\global\gloitemfirstfalse \else\\ \fi &} +\newcommand{\@glossary@glodelim}{, } +\else +\newcommand{\gloskip}{\ifgloitemfirst\global\gloitemfirstfalse \else\\ \fi & &} +\newcommand{\@glossary@glodelim}{& } +\fi +\newcommand{\gloitem}[1]{\ifgloitemfirst\global\gloitemfirstfalse #1 \else \\#1 \fi &} +} + +\ifthenelse{\equal{\gls@number}{none} \and \gls@cols<3}{\renewcommand{\@glossary@glodelim}{}}{} +% \end{macrocode} +% \subsection{Makeindex style file} +%This is the code to generate the ".ist" file. +% \begin{macrocode} +\newif\ifist +\let\noist=\istfalse +\if@filesw\isttrue\else\istfalse\fi + +\newwrite\istfile +\catcode`\%11\relax +\newcommand{\writeist}{ +\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\\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 "} +\closeout\istfile +} +\catcode`\%14\relax +% \end{macrocode} +%Redefine "\makeglossary" so that it creates the ".ist" file. Once it is +% created, the "\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 "\isttrue" and changed the definition +% of "\istfilename". (This is unlikely to occur unless more than one type +% of page compositor is required.) +% The "\glossary" command has been modified to allow for +% an optional argument to modify the label. +% \begin{macrocode} +\renewcommand{\makeglossary}{ +\newwrite\@glossaryfile +\immediate\openout\@glossaryfile=\jobname.glo +\renewcommand{\glossary}[1][]{\gdef\@glo@l@bel{##1}% +\@bsphack \begingroup \@sanitize \@wrglossary } +\typeout {Writing glossary file \jobname .glo } +\let \makeglossary \@empty +\ifist\writeist\fi +\noist} + +\renewcommand{\glossary}[1][]{% +\@bsphack\begingroup\@sanitize\@index} +% \end{macrocode} +%\subsection{Defining new glossary type} +%First parameter name of new glossary type e.g.\ "notation". +%Second parameter extension of output file (equivalent to "ind" or "glo". +%Third parameter extension of input file (equivalent to "idx" or "gls"). +% \begin{macrocode} +\newcommand{\@newglossarytype}[4][glg]{} +\newcommand{\newglossarytype}[4][glg]{ +\@ifundefined{#2}{% +\protected@write\@auxout{}{\@newglossarytype[#1]{#2}{#3}{#4}}% +\def\@glstype{#2}\def\@glsout{#3}\def\@glsin{#4}% +\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 @\@glstype @glodelim\endcsname{\@glossary@glodelim}% +\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}} +\expandafter\edef\csname print\@glstype\endcsname{% +\noexpand\def\noexpand\@glostype{\@glstype}% +\noexpand\@ifundefined{\@glstype name}{% +\noexpand\def\noexpand\@glossaryname{\noexpand\glossaryname}% +}{% +\noexpand\def\noexpand\@glossaryname{% +\noexpand\csname\@glstype name\noexpand\endcsname}}% +% +\noexpand\@ifundefined{short\@glstype name}{% +\noexpand\def\noexpand\@shortglossaryname{\noexpand\@glossaryname}% +}{% +\noexpand\edef\noexpand\@shortglossaryname{% +\noexpand\csname short\@glstype name\noexpand\endcsname}}% +\noexpand\@prntgl@ss@ry{\@glsin}} +}{\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}} +} +% \end{macrocode} +% Define equivalent of "\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 equivalent of "\@wrglossary": +% \begin{macrocode} +\newcommand{\@wrgl@ss@ry}[2]{\relax +\gdef\@glo@n@me{}\def\@descr{}\def\@s@rt{}\def\@f@rm@t{}\relax +\xdef\@pr@fix{\csname @gls@#1@type\endcsname}% +\ifthenelse{\equal{\@s@rt}{}}{\gdef\@s@rt{\@glo@n@me}}{}% +\ifthenelse{\equal{\@glo@l@bel}{}}{\gdef\@glo@l@bel{\@pr@fix:\@s@rt}}{}% +\setkeys{wrgloss}{#2}\relax + \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[#1]}{\csname the#1num\endcsname}}} + {\expandafter\protected@write\csname @#1file\endcsname{}{% +\string\glossaryentry{\@s@rt @{% +\string\glosslabel{\@glo@l@bel}{\@glo@n@me}}% +\@descr\string\relax|\@f@rm@t}{\csname the#1num\endcsname}}}\relax +\endgroup\@esphack +\@@wrgl@ss@ry +} + +\newcommand{\@@wrgl@ss@ry}{} +% \end{macrocode} +% Define the equivalent of "\glossary". +% \begin{macrocode} +\newcommand\@gl@ss@ary[2][]{\@ifundefined{@#2file}{% +\@bsphack\begingroup \@sanitize \@index}{% +\gdef\@glo@l@bel{#1}% +\@bsphack \begingroup \@sanitize \@wrgl@ss@ry{#2}}} +% \end{macrocode} +% Define the equivalent of "\xglossary". +% \begin{macrocode} +\newcommand{\@Gl@ss@ary}{% +\renewcommand{\@@wrgl@ss@ry}[1]{% +\glossref{\@glo@l@bel}{##1}\renewcommand{\@@wrgl@ss@ry}{}}% +\@gl@ss@ary} +% \end{macrocode} +% Define equivalent of "\printglossary". +% \begin{macrocode} +\newcommand\@prntgl@ss@ry[1]{\@input@{\jobname.#1}} +% \end{macrocode} +% The command "\newglossarytype" should only be used in the preamble. +% \begin{macrocode} +\@onlypreamble{\newglossarytype} +% \end{macrocode} +% Define "\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} +% This should no longer be used +% \begin{macrocode} +\newcommand{\glsprimaryfmt}[1]{\textbf{\glsnumformat{#1}}} +% \end{macrocode} +% \begin{macrocode} +%\newcommand{\acronymlabprefix}{GGG} +\newcommand{\@acronymnamefmt}{\glolong\ (\gloshort)} +\newcommand{\setacronymnamefmt}[1]{\def\@acronymnamefmt{#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 long\endcsname{#3\protect\glsxspace} +\def\@acrn@entry{#4} +{ +\def\glolong{#3}% +\def\gloshort{\noexpand\acronymfont{#2}}% +\expandafter\protected@xdef\expandafter\@acrnamefmt{\@acronymnamefmt} +} +\@acr@addtolist{\@acrnmcmd} +\protected@edef\@acr@glsentry{name=\@acrnamefmt,format=glsnumformat,sort=\@acrnmcmd,\@acrn@entry} +\newboolean{\@acrnmcmd first}\setboolean{\@acrnmcmd first}{true} +\expandafter\protected@edef\csname \@acrnmcmd\endcsname{\noexpand\@ifstar{\csname @s@\@acrnmcmd\endcsname}{\csname @\@acrnmcmd\endcsname}} +\ifglshyperacronym +% unstarred version +\expandafter\protected@edef\csname @\@acrnmcmd\endcsname{% +\noexpand\ifthenelse{\noexpand\boolean{\@acrnmcmd first}}{% +\noexpand\gls@noxspace{\csname\@acrnmcmd long\endcsname\noexpand\@acrnmins\ +(\noexpand\xacronym{\@acr@glsentry}{% +\noexpand\acronymfont{\csname\@acrnmcmd short\endcsname}% +})}\noexpand\setboolean{\@acrnmcmd first}{false}% +}{\noexpand\xacronym{\@acr@glsentry}{% +\noexpand\acronymfont{\csname\@acrnmcmd short\endcsname}\noexpand\@acrnmins}}\noexpand\glsxspace} +% starred version +\expandafter\protected@edef\csname @s@\@acrnmcmd\endcsname{% +\noexpand\ifthenelse{\noexpand\boolean{\@acrnmcmd first}}{% +\noexpand\gls@noxspace{\noexpand\expandafter\noexpand\MakeUppercase +\csname\@acrnmcmd long\endcsname\noexpand\@acrnmins\ +(\noexpand\xacronym{\@acr@glsentry}{% +\noexpand\acronymfont{\csname\@acrnmcmd short\endcsname}% +})}% +\noexpand\setboolean{\@acrnmcmd first}{false}}{% +\noexpand\xacronym{\@acr@glsentry}{% +\noexpand\acronymfont{\noexpand\expandafter\noexpand\MakeUppercase +\csname\@acrnmcmd short\endcsname}% +\noexpand\@acrnmins}}\noexpand\glsxspace} +\else +% unstarred version +\expandafter\protected@edef\csname @\@acrnmcmd\endcsname{% +\noexpand\ifthenelse{\noexpand\boolean{\@acrnmcmd first}}{% +\noexpand\gls@noxspace{\csname\@acrnmcmd long\endcsname\ +(\noexpand\acronym{\@acr@glsentry}{% +\noexpand\acronymfont{\csname\@acrnmcmd short\endcsname}% +})}\noexpand\setboolean{\@acrnmcmd first}{false}% +}{\noexpand\acronym{\@acr@glsentry}{% +\noexpand\acronymfont{\csname\@acrnmcmd short\endcsname}}}% +\noexpand\glsxspace} +% starred version +\expandafter\protected@edef\csname @s@\@acrnmcmd\endcsname{% +\noexpand\ifthenelse{\noexpand\boolean{\@acrnmcmd first}}{% +\noexpand\gls@noxspace{\noexpand\expandafter +\noexpand\MakeUppercase +\csname\@acrnmcmd long\endcsname\noexpand\@acrnmins\ +(\noexpand\acronym{\@acr@glsentry}{% +\noexpand\acronymfont{\csname\@acrnmcmd short\endcsname}% +})}% +\noexpand\setboolean{\@acrnmcmd first}{false}}{% +\noexpand\acronym{\@acr@glsentry}{% +\noexpand\acronymfont{\noexpand\expandafter\noexpand\MakeUppercase +\csname\@acrnmcmd 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.}}} + +\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}} + +\newcommand{\acrln}{\@ifstar\@sacrln\@acrln} + +\newcommand{\@acrln}[1]{\@ifundefined{#1long}{% +\PackageError{glossary}{Acronym '#1' has not been defined}{}}{% +\gls@noxspace{\csname#1long\endcsname}}} + +\newcommand{\@sacrln}[1]{\@ifundefined{#1long}{% +\PackageError{glossary}{Acronym '#1' has not been defined}{}}{% +\gls@noxspace{\expandafter\expandafter\expandafter +\MakeUppercase\csname#1long\endcsname}}} + +\newcommand{\acrsh}{\@ifstar\@sacrsh\@acrsh} + +\newcommand{\@acrsh}[1]{\@ifundefined{#1short}{% +\PackageError{glossary}{Acronym '#1' has not been defined}{}}{\acronymfont{\gls@noxspace{\csname#1short\endcsname}}}} + +\newcommand{\@sacrsh}[1]{\@ifundefined{#1short}{% +\PackageError{glossary}{Acronym '#1' has not been defined}{}}{% +\acronymfont{\gls@noxspace{\expandafter\expandafter\expandafter\MakeUppercase\csname#1short\endcsname}}}} + +\newcommand{\ifacronymfirstuse}[3]{% +\@ifundefined{if#1first}{% +\PackageError{glossary}{Acronym '#1' not defined}{}}{% +\ifthenelse{\boolean{#1first}}{#2}{#3}}} + +\newcommand{\resetacronym}[1]{% +\@ifundefined{if#1first}{% +\PackageError{glossary}{Acronym '#1' not defined}{}}{% +\setboolean{#1first}{true}}} + +\newcommand{\resetallacronyms}{% +\@for\@acr:=\@acr@list\do{\resetacronym{\@acr}}} +% \end{macrocode} +%These commands are provided to make it easier change the page number format to bf, sf, tt and it +%if you are using hyperlinks +% \begin{macrocode} +\ifglshyper +% this is modified from definition of "\hyperpage" in "hyperref.sty" +\def\glshyperpage#1{\@glshyperpage#1\delimR \delimR \\} +\def\@glshyperpage#1\delimR #2\delimR #3\\{% + \ifx\\#2\\% + \@delimNhyperpage{#1}% + \else + \@ifundefined{hyperlink}{#1\delimR #2}{\hyperlink{page.#1}{#1}\delimR \hyperlink{page.#2}{#2}}% + \fi +} + +\def\@delimNhyperpage#1{\@@delimNhyperpage#1\delimN \delimN\\} +\def\@@delimNhyperpage#1\delimN #2\delimN #3\\{% + \ifx\\#2\\% + \@ifundefined{hyperlink}{#1}{\hyperlink{page.#1}{#1}}% + \else + \@ifundefined{hyperlink}{#1\delimN #2}{\hyperlink{page.#1}{#1}\delimN \hyperlink{page.#2}{#2}}% + \fi +} + +\def\glshypersection#1{\@glshypersection#1\delimR \delimR \\} +\def\@glshypersection#1\delimR #2\delimR #3\\{% + \ifx\\#2\\% + \@delimNhypersection{#1}% + \else + \@ifundefined{hyperlink}{#1\delimR #2}{\hyperlink{section.#1}{#1}\delimR \hyperlink{section.#2}{#2}}% + \fi +} + +\def\@delimNhypersection#1{\@@delimNhypersection#1\delimN \delimN\\} +\def\@@delimNhypersection#1\delimN #2\delimN #3\\{% + \ifx\\#2\\% + \@ifundefined{hyperlink}{#1}{\hyperlink{section.#1}{#1}}% + \else + \@ifundefined{hyperlink}{#1\delimN #2}{\hyperlink{section.#1}{#1}\delimN \hyperlink{section.#2}{#2}}% + \fi +} + +\ifthenelse{\equal{\gls@number}{section}}{ +\ifglshyper +\@ifundefined{chapter} + {} + {\let\@gls@old@chapter\@chapter + \def\@chapter[#1]#2{\@gls@old@chapter[{#1}]{#2}\@ifundefined{hyperdef}{}{\hyperdef{section}{\thechapter.0}{}}}} +\fi + +\providecommand\hyperrm[1]{\textrm{\glshypersection{#1}}} +\providecommand\hypersf[1]{\textsf{\glshypersection{#1}}} +\providecommand\hypertt[1]{\texttt{\glshypersection{#1}}} +\providecommand\hyperbf[1]{\textbf{\glshypersection{#1}}} +\providecommand\hyperit[1]{\textit{\glshypersection{#1}}} +} +{ +\providecommand\hyperrm[1]{\textrm{\glshyperpage{#1}}} +\providecommand\hypersf[1]{\textsf{\glshyperpage{#1}}} +\providecommand\hypertt[1]{\texttt{\glshyperpage{#1}}} +\providecommand\hyperbf[1]{\textbf{\glshyperpage{#1}}} +\providecommand\hyperit[1]{\textit{\glshyperpage{#1}}} +} +\else +\providecommand\hyperrm[1]{\textsf{#1}} +\providecommand\hypersf[1]{\textsf{#1}} +\providecommand\hypertt[1]{\texttt{#1}} +\providecommand\hyperbf[1]{\textbf{#1}} +\providecommand\hyperit[1]{\textit{#1}} +\fi +% \end{macrocode} +% Check to see if acronyms should be separate from glossary +% \begin{macrocode} +\ifglsacronym +\newglossarytype[alg]{acronym}{acr}{acn} +\newcommand{\acronymname}{List of Acronyms} +\else +\let\acronym=\glossary +\let\xacronym=\xglossary +\fi +% \end{macrocode} +%\subsection{makeglos code} +% \begin{macrocode} +%</glossary.sty> +% \end{macrocode} +% \begin{macrocode} +%<*makeglos.pl> +% \end{macrocode} +% \begin{macrocode} +#!/usr/bin/perl + +# File : makeglos +# Author : Nicola Talbot +# Version : 1.3 (2005/06/28) +# 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]; +} + +# check log file for other glossary types + +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"; + } + } + } + + 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"; +} + +if ($opt_s eq "") +{ + $istfile = "$name.ist"; +} +else +{ + $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++) + { + 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 %0.pl %1 %2 %3 %4 %5 %6 %7 %8 %9
+% \end{macrocode} +% \begin{macrocode} +%</makeglos.bat> +% \end{macrocode} +% \begin{macrocode} +%<*glossary.perl> +% \end{macrocode} +% \begin{macrocode} +# File : glossary.perl +# Author : Nicola Talbot +# Date : 8 July 2005 +# Version : 1.02 +# 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; + } + + $_; +} + + %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} +\documentclass[a4paper]{report} + +\usepackage[plainpages=false,colorlinks]{hyperref} +\usepackage{glossary} + +\makeglossary + +\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 \xglossary{name=glossary,description=1) list of technical +words}{glossary} is a very useful addition to any +technical document, although a \xglossary{name=glossary, +description=2) collection of glosses}{glossary} 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 \xglossary{name=\texttt{Perl}, +sort=Perl,description=A scripting language}{Perl} script +\texttt{makeglos.pl} which provides a convenient +wrapper. + +If you have two terms with different meanings in your +\xglossary{name=glossary,description=1) list of technical +words}{glossary}, +\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}. + +\printglossary + +\end{document} +% \begin{macrocode} +%</sample.tex> +% \end{macrocode} +% \begin{macrocode} +%<*sampleAcr.tex> +% \end{macrocode} +\documentclass[a4paper]{report} + +\usepackage{xspace} +\usepackage[colorlinks,plainpages=false]{hyperref} +\usepackage[style=altlist,toc,number=none]{glossary} + +\makeglossary + +\renewcommand{\acronymfont}[1]{\textmd{\scshape #1}} + +\setacronymnamefmt{\gloshort: \expandafter\MakeUppercase\glolong} + +\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 +\printglossary + + +\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} + +\end{document} +% \begin{macrocode} +%</sampleAcr.tex> +% \end{macrocode} +% \begin{macrocode} +%<*sampleEq.tex> +% \end{macrocode} +\documentclass[a4paper,12pt]{report} + +\usepackage{amsmath} +\usepackage[header,border=none,cols=3]{glossary} + + +\newcommand{\erf}{\operatorname{erf}} +\newcommand{\erfc}{\operatorname{erfc}} + +\renewcommand{\theglossarynum}{\theequation} +\renewcommand{\pagecompositor}{.} + +\renewcommand{\glossaryname}{Index of Special Functions and Notations} + +\renewcommand{\glossaryheader}{\bfseries Notation & +\multicolumn{2}{c}{\bfseries +\begin{tabular}{c}Name of the Function and\\the number of +the formula\end{tabular}}\\} + +\makeglossary + +\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 by defining \verb|\theglossarynum| to be \verb|\theequation|. +The equation numbers are a composite number made up of the chapter number +and number of equation within the chapter. The two parts of the page +number are separated by a fullstop. The default compositor is +a dash \verb|-|, so it needs to be set to a dot by redefining the command +\verb|\pagecompositor|. (This needs to be done \emph{before} the command +\verb|\makeglossary|.) +\end{abstract} + +\printglossary + +\chapter{Gamma Functions} + +\begin{equation} +\Gamma(z) = \int_{0}^{\infty}e^{-t}t^{z-1}\,dt +\end{equation} +\glossary{name=$\Gamma(z)$,description=Gamma function,sort=Gamma} + +\begin{equation} +\Gamma(x+1) = x\Gamma(x) +\end{equation} +\glossary{name=$\Gamma(z)$,description=Gamma function,sort=Gamma} + +\begin{equation} +\gamma(\alpha, x) = \int_0^x e^{-t}t^{\alpha-1}\,dt +\end{equation} +\glossary{name={$\gamma(\alpha,x)$},description=Incomplete gamma function,sort=gamma} + +\begin{equation} +\Gamma(\alpha, x) = \int_x^\infty e^{-t}t^{\alpha-1}\,dt +\end{equation} +\glossary{name={$\Gamma(\alpha,x)$},description=Incomplete gamma function,sort=Gamma} + +\newpage + +\begin{equation} +\Gamma(\alpha) = \Gamma(\alpha, x) + \gamma(\alpha, x) +\end{equation} +\glossary{name=$\Gamma(z)$,description=Gamma function,sort=Gamma} + +\begin{equation} +\psi(x) = \frac{d}{dx}\ln\Gamma(x) +\end{equation} +\glossary{name=$\psi(x)$,description=Psi function,sort=psi} + +\chapter{Error Functions} + +\begin{equation} +\erf(x) = \frac{2}{\surd\pi}\int_0^x e^{-t^2}\,dt +\end{equation} +\glossary{name=$\erf(x)$,description=Error function,sort=erf} + +\begin{equation} +\erfc(x) = 1 - \erf(x) +\end{equation} +\glossary{name=$\erfc(x)$,description=Complementary error function,sort=erfc} + +\chapter{Beta Function} + +\begin{equation} +B(x,y) = 2\int_0^1 t^{x-1}(1-t^2)^{y-1}\,dt +\end{equation} +\glossary{name={$B(x,y)$},description=Beta function,sort=B} +Alternatively: +\begin{equation} +B(x,y) = 2\int_0^{\frac\pi2}\sin^{2x-1}\phi\cos^{2y-1}\phi\,d\phi +\end{equation} +\glossary{name={$B(x,y)$},description=Beta function,sort=B} + +\begin{equation} +B(x,y) = \frac{\Gamma(x)\Gamma(y)}{\Gamma(x+y)} = B(y,x) +\end{equation} +\glossary{name={$B(x,y)$},description=Beta function,sort=B} + +\begin{equation} +B_x(p,q) = \int_0^x t^{p-1}(1-t)^{q-1}\,dt +\end{equation} +\glossary{name={$B_x(p,q)$},description=Incomplete beta function,sort=Bx} + +\chapter{Polynomials} + +\section{Chebyshev's polynomials} + +\begin{equation} +T_n(x) = \cos(n\arccos x) +\end{equation} +\glossary{name=$T_n(x)$,description=Chebyshev's polynomials of the first kind,sort=Tn} + +\begin{equation} +U_n(x) = \frac{\sin[(n+1)\arccos x]}{\sin[\arccos x]} +\end{equation} +\glossary{name=$U_n(x)$,description=Chebyshev's polynomials of the second kind,sort=Un} + +\section{Hermite polynomials} + +\begin{equation} +H_n(x) = (-1)^n e^{x^2} \frac{d^n}{dx^n}(e^{-x^2}) +\end{equation} +\glossary{name=$H_n(x)$,description=Hermite polynomials,sort=Hn} + +\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} +\glossary{name=$L_n^\alpha(x)$,description=Laguerre polynomials,sort=Lna} + +\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} +\glossary{name=$Z_\nu(z)$,description=Bessel functions,sort=Z} + +\chapter{Confluent hypergeometric function} + +\begin{equation} +\Phi(\alpha,\gamma;z) = 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} +\glossary{name={$\Phi(\alpha,\gamma;z)$},description=confluent hypergeometric function,sort=Pagz} + +\begin{equation} +k_\nu(x) = \frac{2}{\pi}\int_0^{\pi/2}\cos(x \tan\theta - \nu\theta)\,d\theta +\end{equation} +\glossary{name=$k_\nu(x)$,description=Bateman's function,sort=kv} + +\chapter{Parabolic cylinder functions} + +\begin{equation} +D_p(z) = 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} +\glossary{name=$D_p(z)$,description=Parabolic cylinder functions,sort=Dp} + +\chapter{Elliptical Integral of the First Kind} + +\begin{equation} +F(\phi, k) = \int_0^\phi \frac{d\alpha}{\sqrt{1-k^2\sin^2\alpha}} +\end{equation} +\glossary{name={$F(\phi,k)$},description=Elliptical integral of the first kind,sort=Fpk} + +\chapter{Constants} + +\begin{equation} +C = 0.577\,215\,664\,901\ldots +\end{equation} +\glossary{name=$C$,description=Euler's constant,sort=C} + +\begin{equation} +G = 0.915\,965\,594\ldots +\end{equation} +\glossary{name=$G$,description=Catalan's constant,sort=G} + +\end{document} +% \begin{macrocode} +%</sampleEq.tex> +% \end{macrocode} +% \begin{macrocode} +%<*sampleEqPg.tex> +% \end{macrocode} +\documentclass[a4paper,12pt]{report} + +\usepackage{amsmath} +\usepackage[header,toc,border=none,cols=3]{glossary} + + +\newcommand{\erf}{\operatorname{erf}} +\newcommand{\erfc}{\operatorname{erfc}} + +\renewcommand{\theglossarynum}{\theequation} +\renewcommand{\pagecompositor}{.} + +\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} + +\setglossary{glsnumformat=textit} + +\renewcommand{\glossaryheader}{\bfseries Notation & +\multicolumn{2}{c}{\bfseries +\begin{tabular}{c}Name of the Function and\\the number of +the formula\end{tabular}}\\} + +\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 number and equation numbers. Since the +equation numbers depend on chapter numbers, the page compositor needs +to be redefined. (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 + +%It's a bit cumbersome having to keep redefining \theglossarynum. It +%would probably be easier to define a new command which sets \theglossarynum +%and then calls \glossary +%For example: +\newcommand{\myglossary}[2]{% +\renewcommand{\theglossarynum}{#1}\glossary{#2}} +%You can then do something like, say +%\myglossary{\thepage}{name=$\Gamma(z)$,description=Gamma function,sort=Gamma,format=textbf} + +%or, alternatively, you could define +\newcommand{\glossarypage}[1]{% +\renewcommand{\theglossarynum}{\thepage}\glossary{#1,format=textbf}} +%and +\newcommand{\glossaryequation}[1]{% +\renewcommand{\theglossarynum}{\theequation}\glossary{#1}} + +\chapter{Gamma Functions} + +The gamma function is defined as +\renewcommand{\theglossarynum}{\thepage} +\glossary{name=$\Gamma(z)$,description=Gamma function,sort=Gamma,format=textbf} +\renewcommand{\theglossarynum}{\theequation} +\begin{equation} +\Gamma(z) = \int_{0}^{\infty}e^{-t}t^{z-1}\,dt +\end{equation} +\glossary{name=$\Gamma(z)$,description=Gamma function,sort=Gamma} + +\begin{equation} +\Gamma(x+1) = x\Gamma(x) +\end{equation} +\glossary{name=$\Gamma(z)$,description=Gamma function,sort=Gamma} + +\begin{equation} +\gamma(\alpha, x) = \int_0^x e^{-t}t^{\alpha-1}\,dt +\end{equation} +\glossary{name={$\gamma(\alpha,x)$},description=Incomplete gamma function,sort=gamma} + +\begin{equation} +\Gamma(\alpha, x) = \int_x^\infty e^{-t}t^{\alpha-1}\,dt +\end{equation} +\glossary{name={$\Gamma(\alpha,x)$},description=Incomplete gamma function,sort=Gamma} + +\newpage + +\begin{equation} +\Gamma(\alpha) = \Gamma(\alpha, x) + \gamma(\alpha, x) +\end{equation} +\glossary{name=$\Gamma(z)$,description=Gamma function,sort=Gamma} + +\begin{equation} +\psi(x) = \frac{d}{dx}\ln\Gamma(x) +\end{equation} +\glossary{name=$\psi(x)$,description=Psi function,sort=psi} + +\chapter{Error Functions} + +The error function is defined as: +\renewcommand{\theglossarynum}{\thepage} +\glossary{name=$\erf(x)$,description=Error function,sort=erf,format=textbf} +\renewcommand{\theglossarynum}{\theequation} +\begin{equation} +\erf(x) = \frac{2}{\surd\pi}\int_0^x e^{-t^2}\,dt +\end{equation} +\glossary{name=$\erf(x)$,description=Error function,sort=erf} + +\begin{equation} +\erfc(x) = 1 - \erf(x) +\end{equation} +\glossary{name=$\erfc(x)$,description=Complementary error function,sort=erfc} + +\chapter{Beta Function} + +\begin{equation} +B(x,y) = 2\int_0^1 t^{x-1}(1-t^2)^{y-1}\,dt +\end{equation} +\glossary{name={$B(x,y)$},description=Beta function,sort=B} +Alternatively: +\begin{equation} +B(x,y) = 2\int_0^{\frac\pi2}\sin^{2x-1}\phi\cos^{2y-1}\phi\,d\phi +\end{equation} +\glossary{name={$B(x,y)$},description=Beta function,sort=B} + +\begin{equation} +B(x,y) = \frac{\Gamma(x)\Gamma(y)}{\Gamma(x+y)} = B(y,x) +\end{equation} +\glossary{name={$B(x,y)$},description=Beta function,sort=B} + +\begin{equation} +B_x(p,q) = \int_0^x t^{p-1}(1-t)^{q-1}\,dt +\end{equation} +\glossary{name={$B_x(p,q)$},description=Incomplete beta function,sort=Bx} + +\chapter{Chebyshev's polynomials} + +\begin{equation} +T_n(x) = \cos(n\arccos x) +\end{equation} +\glossary{name=$T_n(x)$,description=Chebyshev's polynomials of the first kind,sort=Tn} + +\begin{equation} +U_n(x) = \frac{\sin[(n+1)\arccos x]}{\sin[\arccos x]} +\end{equation} +\glossary{name=$U_n(x)$,description=Chebyshev's polynomials of the second kind,sort=Un} + +\chapter{Hermite polynomials} + +\begin{equation} +H_n(x) = (-1)^n e^{x^2} \frac{d^n}{dx^n}(e^{-x^2}) +\end{equation} +\glossary{name=$H_n(x)$,description=Hermite polynomials,sort=Hn} + +\chapter{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} +\glossary{name=$L_n^\alpha(x)$,description=Laguerre polynomials,sort=Lna} + +\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} +\glossary{name=$Z_\nu(z)$,description=Bessel functions,sort=Z} + +\chapter{Confluent hypergeometric function} + +\begin{equation} +\Phi(\alpha,\gamma;z) = 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} +\glossary{name={$\Phi(\alpha,\gamma;z)$},description=confluent hypergeometric function,sort=Pagz} + +\begin{equation} +k_\nu(x) = \frac{2}{\pi}\int_0^{\pi/2}\cos(x \tan\theta - \nu\theta)\,d\theta +\end{equation} +\glossary{name=$k_\nu(x)$,description=Bateman's function,sort=kv} + +\chapter{Parabolic cylinder functions} + +\begin{equation} +D_p(z) = 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} +\glossary{name=$D_p(z)$,description=Parabolic cylinder functions,sort=Dp} + +\chapter{Elliptical Integral of the First Kind} + +\begin{equation} +F(\phi, k) = \int_0^\phi \frac{d\alpha}{\sqrt{1-k^2\sin^2\alpha}} +\end{equation} +\glossary{name={$F(\phi,k)$},description=Elliptical integral of the first kind,sort=Fpk} + +\chapter{Constants} + +\begin{equation} +C = 0.577\,215\,664\,901\ldots +\end{equation} +\glossary{name=$C$,description=Euler's constant,sort=C} + +\begin{equation} +G = 0.915\,965\,594\ldots +\end{equation} +\glossary{name=$G$,description=Catalan's constant,sort=G} + +\end{document} +% \begin{macrocode} +%</sampleEqPg.tex> +% \end{macrocode} +% \begin{macrocode} +%<*sampleNtn.tex> +% \end{macrocode} +\documentclass{report} + +\usepackage[plainpages=false,colorlinks]{hyperref} +\usepackage{html} +\usepackage[toc]{glossary} + +\makeglossary + +\newglossarytype{notation}{not}{ntn} + +% Set up notation style +\newcommand{\notationname}{Notation} +% Don't display numbers, remove commas and number hyphens +% for notation entries +\setglossary{type=notation,glsnumformat=ignore,% +glodelim={.}} + +\makenotation + +\begin{document} + +\title{Sample Document using glossary Package} +\author{Nicola Talbot} +\pagenumbering{alph} +\maketitle + +\begin{abstract} +\pagenumbering{Alph}%stop hyperref complaining about duplicate page identifiers +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} +% \begin{macrocode} +%</sampleNtn.tex> +% \end{macrocode} +% \begin{macrocode} +%<*sampleNtn2.tex> +% \end{macrocode} +\documentclass{report} + +\usepackage[plainpages=false,colorlinks]{hyperref} +\usepackage{html} +\usepackage[toc]{glossary} + +\makeglossary + +\newglossarytype{notation}{not}{ntn} + +% Set up notation style +\newcommand{\notationname}{Notation} +% Don't display numbers, remove commas and number hyphens +% for notation entries +\setglossary{type=notation,glsnumformat=ignore,% +glodelim={.}} + +\makenotation + +\begin{document} + +% Save details for later use (note the use of \protect): +\storeglosentry[notation]{not:set}{name={$\protect\mathcal{S}$},description=A set,sort=S} + +\storeglosentry[notation]{not:U}{name=$\protect\mathcal{U}$,description={The universal set},sort=U} + +\storeglosentry[notation]{not:card}{name=$\mid\protect\mathcal{S}\mid$,description=cardinality of $\protect\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} +\pagenumbering{Alph}%stop hyperref complaining about duplicate page identifiers +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}. + +\end{document} +% \begin{macrocode} +%</sampleNtn2.tex> +% \end{macrocode} +% \begin{macrocode} +%<*sampleSec.tex> +% \end{macrocode} +\documentclass{report} + +\usepackage[plainpages=false,colorlinks]{hyperref} +\usepackage[style=altlist,toc,number=section]{glossary} + +\makeglossary + +% This just saves a bit of typing + +\storeglosentry{glos:I}{name=identity matrix,description=diagonal +matrix with 1s along the leading diagonal} + +\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 diagonal matrix\glossary{name=diagonal matrix, +description=matrix whose only non-zero entries are along the leading diagonal,format=hyperit} +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 identity matrix\glossary{name=identity matrix, +description=diagonal matrix with 1s along the leading diagonal} +\ldots + +Here is another entry for a diagonal matrix\glossary{name=diagonal matrix, +description=matrix whose only non-zero entries are along the leading diagonal} + +\chapter{Singular Matrices} + +A singular matrix\glossary{name=singular matrix, +description=matrix with zero determinant} +\ldots + +Another \useGlosentry{glos:I}{identity matrix} entry. + +\end{document} +% \begin{macrocode} +%</sampleSec.tex> +% \end{macrocode} +%\Finale +\endinput |