%\iffalse % glossaries.dtx generated using makedtx version 0.91b (c) Nicola Talbot % Command line args: % -src "glossaries.sty=>glossaries.sty" % -src "(glossary-.+)\.(sty)\Z=>\1.\2" % -doc "manual.tex" % -author "Nicola Talbot" % -dir "source" % glossaries % Created on 2007/5/25 16:12 %\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 \~} % %\fi % \iffalse % Doc-Source file to use with LaTeX2e % Copyright (C) 2007 Nicola Talbot, all rights reserved. % \fi % \iffalse %<*driver> \documentclass[a4paper]{ltxdoc} \usepackage{ifthen} \usepackage{alltt} \usepackage[colorlinks, bookmarks, hyperindex=false, pdfauthor={N.L.C. Talbot}, pdftitle={glossaries.sty: LaTeX2e Package to Assist Generating Glossaries}, pdfkeywords={LaTeX,package,glossary,acronyms}]{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 \CheckSum{2807} \CodelineNumbered \newcommand{\cmdname}[1]{\texttt{\char`\\#1}} \newcommand*{\istkey}[1]{\texttt{#1}\index{makeindex=\texttt{makeindex}>#1=\texttt{#1}|hyperpage}} \newcommand*{\icmdname}[1]{\texttt{\char`\\#1}\SpecialMainIndex{#1}} \newcommand*{\appname}[1]{\texttt{#1}\index{#1=\texttt{#1}|hyperpage}} \newcommand*{\mkidxspch}{\index{makeindex=\texttt{makeindex}>special characters|hyperpage}} \newcommand*{\igloskey}[2][newglossaryentry]{\index{#1 options=\cmdname{#1} options>#2=\textsf{#2}|hyperpage}} \newcommand*{\gloskey}[2][newglossaryentry]{\textsf{#2}\igloskey[#1]{#2}} \newcommand*{\pkgopt}[2][]{% \ifthenelse{\equal{#1}{}}{% \textsf{#2}\index{package options>#2=\textsf{#2}|hyperpage}}{% \textsf{#2=#1}\index{package options>#2=\textsf{#2}>#1=\textsf{#1}|hyperpage}}} \newcommand*{\pkgoptval}[2]{\textsf{#1}\index{package options>#2>#1|hyperpage}} \newcommand*{\glostyle}[1]{\textsf{#1}\index{glossary styles>#1|hyperpage}} \newcommand*{\filetype}[1]{\texttt{#1}\index{file types>#1|hyperpage}} \newcommand*{\styname}[1]{\textsf{#1}\index{#1 package=\textsf{#1} package|hyperpage}} \newcommand*{\envname}[1]{\textsf{#1}} \begin{document} \DocInput{glossaries.dtx} \end{document} % %\fi %\MakeShortVerb{"} %\DeleteShortVerb{\|} % % \title{glossaries.sty v 1.02: \LaTeXe\ Package to Assist Generating Glossaries} % \author{Nicola L.C. Talbot\\[10pt] %School of Computing Sciences\\ %University of East Anglia\\ %Norwich. Norfolk\\ %NR4 7TJ. United Kingdom.\\ %\url{http://theoval.cmp.uea.ac.uk/~nlct/}} % % \date{25th May 2007} % \maketitle %\tableofcontents % % \section{Introduction} % % \changes{1.0}{2007 May 16}{Initial version} %The \styname{glossaries} package is provided to assist %generating glossaries. It has a certain amount of flexibility, %allowing the user to customize the format of the glossary, %define new glossary styles, and multiple glossaries. It %also supports acronyms, and glossary styles which %include symbols in addition to a name and description for a %given glossary entry. There is provision for loading a database %of glossary terms, where only those terms used in the %text are added to the glossary. This %package replaces the \styname{glossary} package which is now %obsolete. % %The \styname{glossaries} package comes with the Perl script %\appname{makeglossaries} which will run \appname{makeindex} on %all the glossary files using a customized \appname{makeindex} %style file (which is created by \icmdname{makeglossaries}). %The relevant extensions are obtained from the %auxiliary file, so you only need to pass the basename as the %argument. For example, if your document is called %\texttt{myfile.tex}, do: %\begin{verbatim} %latex myfile %makeglossaries myfile %latex myfile %\end{verbatim} %You may need to explicitly load \appname{makeglossaries} into %Perl: %\begin{verbatim} %perl makeglossaries myfile %\end{verbatim} %There is a batch file called \texttt{makeglossaries.bat} which %does this for Windows users. % %This documentation is structured as follows: \autoref{sec:quick} %is for people who want a few quick pointers of how to get started, %without having to read through lengthy descriptions, %\autoref{sec:overview} gives an overview of available commands %and their syntax, \autoref{sec:code} contains the documented %source code for those who want to know more about how the %package works, and how to do more complicated things, such as %changing the way glossary entries appear. % %\section{A Quick Guide For The Impatient} %\label{sec:quick} % %This section is for people who want a few quick pointers %of how to get started, without having to read through %lengthy descriptions. % %\begin{enumerate} %\item Load \styname{glossaries} \emph{after} \styname{hyperref}: %\begin{verbatim} %\usepackage{hyperref} %\usepackage{glossaries} %\end{verbatim} %Similarly for the \styname{html} package: %\begin{verbatim} %\usepackage{html} %\usepackage{glossaries} %\end{verbatim} % %\item Always use \icmdname{makeglossaries} if you want the glossary %entries to be written to the glossary file: %\begin{verbatim} %\documentclass{article} %\usepackage{glossaries} %\makeglossaries %\end{verbatim} %If you don't use \icmdname{makeglossaries}, your glossaries will %not appear in the document! % %\item Use \icmdname{printglossaries} to make your glossaries appear %in the document at that point. For example: %\begin{verbatim} %\maketitle %\printglossaries %\section{Introduction} %\end{verbatim} %Note that only the glossary entries that have been used in the %document text will appear in the glossary. % %\item When you have created your document, run \LaTeX\ on it, %then the Perl script \appname{makeglossaries}, then run \LaTeX\ %on it again: %\begin{verbatim} %latex myfile %makeglossaries myfile %latex myfile %\end{verbatim} %If you use Windows, there is a batch file called %\texttt{makeglossaries.bat} which you can use, but you will %still need Perl installed. % %\item New glossaries can be defined using:\par %\icmdname{newglossary}% %\marg{label}\marg{in-ext}\marg{out-ext}% %\marg{title}\par where \meta{label} is an identifying label, %\meta{in-ext} is the extension of the file to be created %by \appname{makeindex} (called by \appname{makeglossaries}), %\meta{out-ext} is the extension of the file to be read by %\appname{makeindex} and \meta{title} is the title for this %new glossary. Example: %\begin{verbatim} %\newglossary{notation}{not}{ntn}{Notation} %\end{verbatim} %This glossary's label is \texttt{notation} and its title %will be Notation. % %\item Any new glossaries must be defined before %\cmdname{makeglossaries} %\begin{verbatim} %\documentclass{article} %\usepackage{glossaries} %\newglossary{notation}{not}{ntn}{Notation} %\makeglossaries %\end{verbatim} % %\item If you use the \pkgopt{acronym} package option, the %\styname{glossaries} package %will automatically create a new glossary type labelled %\texttt{acronym}: %\begin{verbatim} %\usepackage[acronym]{glossaries} %\end{verbatim} % %\item If your pages have a hyphen compositor (i.e.\ your page %numbers appear in the form 2-1), redefine \icmdname{glscompositor} %\emph{before} \icmdname{makeglossaries}: %\begin{verbatim} %\documentclass{article} %\usepackage{glossaries} %\renewcommand{\glscompositor}{-} %\makeglossaries %\end{verbatim} % %\item To add the glossaries to the table of contents use the %\pkgopt{toc} package option: %\begin{verbatim} %\usepackage[toc]{glossaries} %\end{verbatim} % %\item Define a new entry with:\par %\icmdname{newglossaryentry}\marg{label}\marg{key-val list}\par %The \meta{key-val list} must at least contain a \gloskey{name} %key and a \gloskey{description} key. %For example: %\begin{verbatim} %\newglossaryentry{perl}{name=Perl, %description=A scripting language} %\end{verbatim} %In this example, I have given the entry the label \texttt{perl}. %Whenever I want to use this entry, that is the label I need %to use to identify it. % %\item If the entry name starts with an accented letter, you will %need to group the first letter (otherwise it will cause a %problem for \icmdname{Gls} and \icmdname{Glspl}): %\begin{verbatim} %\newglossaryentry{elite}{name={{\'e}lite}, %description={select group or class}} %\end{verbatim} % %\item If you have multiple glossaries, use the \gloskey{type} %key to specify in which glossary the entry belongs. For example: %\begin{verbatim} %\newglossary{languages}{lan}{lng}{Index of Languages} % %\makeglossaries % %\newglossaryentry{perl}{name=Perl, %description=A scripting language, %type=languages} %\end{verbatim} %If \gloskey{type} is omitted, the default glossary is used. % %\item Remember to group values that have a comma or equal sign. %For example: %\begin{verbatim} %\newglossaryentry{pagelist}{name=page list, %description={A list of individual pages or page ranges %(e.g.\ 1,2,4,7--9)}} %\end{verbatim} % %\item Plural forms are assumed to be the singular form with an %``s'' appended, unless otherwise specified. To specify an %irregular plural, use the \gloskey{plural} key. For example: %\begin{verbatim} %\newglossaryentry{matrix}{name=matrix, %description=rectangular array of quantities, %plural=matrices} %\end{verbatim} % %\item The way the term appears in the main text can be different %from the way the term appears in the glossary: %\begin{verbatim} %\newglossaryentry{matrix}{name=Matrix, %description=rectangular array of quantities, %text=matrix, %plural=matrices} %\end{verbatim} %In this example, the entry name appears as Matrix in the %glossary, and either matrix or matrices in the text. % %\item The way the term appears on first use can be different %to the way it appears subsequently: %\begin{verbatim} %\newglossaryentry{singmtx}{name=Singular Matrix, %description=A matrix with a zero determinant, %first=singular matrix (SM), %text=SM, %firstplural=singular matrices (SMs)} %\end{verbatim} %In this example, the entry name appears as Singular Matrix in %the glossary, and in the text it appears as singular matrix (SM) %or singular matrices (SMs) the first time the entry is used, %and subsequently appears as SM or SMs. % %\item The quick and easy way to define an acronym is to use:\par %\icmdname{newacronym}\oarg{key-val list}\marg{label}\marg{abbrev}% %\marg{long}\par %For example: %\begin{verbatim} %\newacronym{svm}{SVM}{support vector machine} %\end{verbatim} %This is equivalent to: %\begin{verbatim} %\newglossaryentry{svm}{type=\acronymtype, %name={SVM}, %description={support vector machine}, %text={SVM}, %first={support vector machine (SVM)}, %plural={SVMs}, %firstplural={support vector machines (SVMs)}} %\end{verbatim} %(The value of \icmdname{acronymtype} varies depending on whether %the glossary package option \pkgopt{acronym} is used or not. %The optional argument \meta{key-val list} can be used to %override any of the \icmdname{newglossaryentry} keys, for %example, if the acronym has an irregular plural.) % %\item The font used to display the entry name in the glossary %is governed by \icmdname{glsnamefont}. This can be redefined %as required. For example, to make the entry names appear %in a medium sans-serif font do: %\begin{verbatim} %\renewcommand{\glsnamefont}[1]{\textsf{\mdseries #1}} %\end{verbatim} %Note that the list-like glossary styles defined in the %\styname{glossary-list} package place the entry name in %the optional argument to \icmdname{item}, so they will %appear in bold, unless you redefine \icmdname{glsnamefont}. % %\item In the document use \icmdname{gls}\marg{label} %to use a predefined term (this will also enter the term into %the associated glossary output file.) For example: %\begin{verbatim} %A \gls{singmtx} is a matrix with a zero determinant. %\end{verbatim} % %\item Other variations: %\begin{itemize} %\item \icmdname{Gls}\marg{label} : like \cmdname{gls}, %but with first letter in upper case %\item \icmdname{GLS}\marg{label} : like \cmdname{gls}, %but all upper case. %\item \icmdname{glspl}\marg{label} : use plural %\item \icmdname{Glspl}\marg{label} : use plural with %first letter in upper case %\item \icmdname{GLSpl}\marg{label} : use plural but %all upper case %\item \icmdname{glslink}\marg{label}\marg{link text} : %use \meta{link text} to link to the given entry in the glossary. %\end{itemize} %For example, the following will produce the plural form with %the first letter in uppercase: %\begin{verbatim} %\Glspl{singmtx} are matrices with a zero determinant. %\end{verbatim} % %\item Additional text can be appended to the link using the %end optional argument. For example, to form the possessive: %\begin{verbatim} %The \gls{singmtx}['s] dimensions are not necessarily equal. %\end{verbatim} % %\item The format of the associated entry number can be %changed using the \gloskey[glslink]{format} key in the optional argument. %Note that the value of the \gloskey[glslink]{format} key should be the %name of a command \emph{without} the initial backslash. For %example: %\begin{verbatim} %The primary definition of \glspl[format=textbf]{singmtx}. %\end{verbatim} %In this example the relevant glossary entry will have the %page number in bold (since it uses \cmdname{textbf}) but %it will no longer have a hyperlink (if hyperlinks are enabled.) % %\item The \styname{glossaries} package provides commands to %change the font whilst ensuring that the number remains a %hyperlink. These are of the form \cmdname{hyper}\meta{xx} and %are equivalent to the standard font changing commands of the %form \cmdname{text}\meta{xx}, as well as \icmdname{hyperemph} %(which uses \icmdname{emph}.) For example: %\begin{verbatim} %The primary definition of \glspl[format=hyperbf]{singmtx}. %\end{verbatim} % %\item Entries can be added to the glossary without producing %any text using \icmdname{glsadd}\marg{label} or %\icmdname{glsaddall}. These commands also taken an optional %argument where you can specify the format. For example %\begin{verbatim} %\glsadd[format=hyperbf]{singmtx} %\end{verbatim} %will add a line to the %glossary file for the specified term, but will not produce %any text where the command occurs. % %\item A number range can be entered using "format=(" and "format=)" %to mark the beginning and ending of the range\footnote{This is new %to version 1.01}. For example: %\begin{verbatim} %\glsadd[format=(]{singmtx} %This is a very long section all about \glspl{singmtx}. % %% lots of text omitted % %\glsadd[format=)]{singmtx} %\end{verbatim} %This is equivalent to \appname{makeindex}'s "|(" and "|)" formats. % %\item You can combine the range markers with a formatting command %(again without the preceding backslash.) For example: %\begin{verbatim} %This is the start of a very long section all %about \glspl[format=(hyperbf]{singmtx}. % %% lots of text omitted % %This is the end a very long section all about %\glspl[format=)hyperbf]{singmtx}. %\end{verbatim} % %\item Only those terms that have actually been used in the %document will be placed in the glossary. If you have defined %a term that doesn't appear in the document, then it means %you haven't used it in the text (either via \icmdname{glslink} %or \icmdname{gls} and related commands, or via \icmdname{glsadd} %or \icmdname{glsaddall}.) % %\item To change the sorting order, use the \gloskey{sort} key. %For example: %\begin{verbatim} %\newglossaryentry{universal}{name={\ensuremath{\mathcal{U}}}, %description=The universal set, %sort=U} %\end{verbatim} % %\item You don't need to escape \appname{makeindex}'s special characters: %\begin{verbatim} %\newglossaryentry{quote}{name={"}, %description={Double quote character}} % %\newglossaryentry{exclam}{name={!}, %description={Exclamation mark}} % %\newacronym{rna}{RNA}{ribonukleins\"aure} %\end{verbatim} % %\item Associated symbols can also be specified, but whether the %symbol appears in the glossary depends on the glossary style. %For example: %\begin{verbatim} %\newglossaryentry{metre}{name={metre}, %description={A metric measurement of length}, %symbol={m}} %\end{verbatim} %The predefined glossary styles that display the entry symbol %are: \glostyle{long4col}, \glostyle{long4colheader}, %\glostyle{long4colborder}, \glostyle{long4colheaderborder}, %\glostyle{super4col}, \glostyle{super4colheader}, %\glostyle{super4colborder} and \glostyle{super4colheaderborder}. %All the other styles supplied by this package ignore the associated %symbol. % %\item Glossary styles can be set using the \pkgopt{style} %package option. For example: %\begin{verbatim} %\usepackage[style=long3col]{glossary} %\end{verbatim} %or using \icmdname{glossarystyle}\marg{style}. For example: %\begin{verbatim} %\glossarystyle{altlist} %\end{verbatim} %The predefined glossary styles provided by the \styname{glossaries} %bundle are detailed in \autoref{sec:styles}. % %\item The list of numbers associated with each glossary entry %can be suppressed using the package option \pkgopt{nonumberlist}: %\begin{verbatim} %\usepackage[nonumberlist]{glossaries} %\end{verbatim} % %\item By default, the glossaries will appear in an unnumbered %chapter if chapters are defined, otherwise in an unnumbered %section. This can be changed using the \pkgopt{section} package %option. For example, to make the glossaries appear in an unnumbered %section, even if chapters are defined, do: %\begin{verbatim} %\usepackage[section]{glossaries} %\end{verbatim} %Other sectional units can also be specified as %\pkgopt{section}=\meta{value}. For example, to make the glossaries %appear in unnumbered subsections: %\begin{verbatim} %\usepackage[section=subsection]{glossaries} %\end{verbatim} % %\end{enumerate} % %\section{Overview}\label{sec:overview} % \changes{1.02}{2007 May 25}{added overview section} % %\subsection{Package Options} % %The \styname{glossaries} package options are as follows: %\begin{description} %\item[\pkgopt{toc}] Add the glossaries to the table of contents %\item[\pkgopt{section}] This is a key=value option. Its value should %be the name of a sectional unit (e.g.\ "chapter"). This will make %the glossaries appear in the named sectional unit, otherwise the %each glossary will appear in an unnumber chapter, if chapters %exists, otherwise in an unnumbered section. Example: %\begin{verbatim} %\usepackage[section=subsection]{glossaries} %\end{verbatim} %You can omit the value if you want to use sections, i.e.\ %\begin{verbatim} %\usepackage[section]{glossaries} %\end{verbatim} %is equivalent to %\begin{verbatim} %\usepackage[section=section]{glossaries} %\end{verbatim} % %\item[\pkgopt{style}] This is a key=value option. Its value should %be the name of the glossary style to use. % %\item[\pkgopt{nonumberlist}] This option will suppress the %associated number lists in the glossaries (see also %\autoref{sec:numberlists}.) % %\item[\pkgopt{acronym}] Make a separate glossary for acronyms. % %\item[\pkgopt{counter}] This is a key=value option. The value should %be the name of the default counter to use in the number lists. % %\item[\pkgopt{sanitize}] This is a key=value option whose value %is a key=value list. By default, the \styname{glossaries} package %sanitizes the values of the \gloskey{name}, \gloskey{description} %and \gloskey{symbol} keys used when defining a new glossary %entry. This means that you don't need to worry about using fragile %commands when defining new glossary entries, but this may lead %to unexpected results if you try to display these values within %the document text. This sanitization can be switched off using %the \pkgopt{sanitize} package option. (See \autoref{sec:pkgopt} %and \autoref{sec:newentry} for further details.) % %\end{description} % %\subsection{Defining Glossary Entries} %\label{sec:newglosentry} % %All glossary entries that are used in a document must be defined in %the preamble. Only those entries that occur in the document %(using any of the commands described in \autoref{sec:glslink} and %\autoref{sec:glsadd}) will appear in the glossary. Each time an entry %is used in this way, a line is added to an associated glossary (.glo) %file, which then needs to be converted into a corresponding .gls file %which contains the typeset glossary. The Perl script %\appname{makeglossaries} can be used to call \appname{makeindex} %using a customised style file for each of the glossaries that are %defined in the document. % %\DescribeMacro{\makeglossaries} %The command \cmdname{makeglossaries} must be placed in the preamble, %in order to create the customised \appname{makeindex} style file, %and to ensure that glossary entries are written to the appropriate %output file. % %\DescribeMacro{\newglossaryentry} %New glossary entries are defined using the command:\\[10pt] %\cmdname{newglossaryentry}\marg{label}\marg{key-val list}\\[10pt] %The first argument, \meta{label}, must be a unique label with which to %identify this entry. The second argument, \meta{key-val list}, %is a key=value list that supplies the relevant information about this %entry. There are two required fields: \gloskey{name} and %\gloskey{description}. Available fields are listed below: % %\begin{description} %\item[{\gloskey{name}}] The name of the entry (as it will appear in the %glossary.) %\item[{\gloskey{description}}] A brief description of this term (to %appear in the glossary.) %\item[{\gloskey{text}}] How this entry will appear in the document text %when using \icmdname{gls} (or one of its %uppercase variants.) If this field is omitted, the value of the %\gloskey{name} key is used. %\item[{\gloskey{first}}] How the entry will appear in the document text %the first time it is used with \icmdname{gls} %(or one of its uppercase variants.) If this field is omitted, %the value of the \gloskey{text} key is used. %\item[{\gloskey{plural}}] How the entry will appear in the document text %when using \icmdname{glspl} (or one of its uppercase variants.) %If this field is omitted, the value is obtained by appending an %``s'' to the value of the \gloskey{text} field. %\item[{\gloskey{firstplural}}] How the entry will appear in the document %text the first time it is used with \icmdname{glspl} (or one of %its uppercase variants.) If this field is omitted, the value is %obtained by appending an ``s'' to the value of the \gloskey{first} %field. %\item[{\gloskey{symbol}}] This field is provided to allow the user to %specify an associated symbol, but most glossary styles ignore %this value. If omitted, the value is set to \cmdname{relax}. %\item[{\gloskey{sort}}] This value indicates how \appname{makeindex} should %sort this entry. If omitted, the value of the \gloskey{name} field %is used. This value is equivalent to \appname{makeindex}'s ``actual'' %character (which is usually the at-sign @.) %\item[{\gloskey{type}}] This is the glossary type to which this entry %belongs. If omitted, the default glossary is assumed. %\end{description} % %\DescribeMacro{\loadglsentries} %You can store all your glossary entry definitions in another %file, and use:\\[10pt] %\cmdname{loadglsentries}\oarg{type}\marg{filename}\\[10pt] %where \meta{filename} is the name of the file containing all the %\cmdname{newglossaryentry} commands. The optional argument %\meta{type} is the name of the glossary to which those entries %should belong, for those entries where the \gloskey{type} key has %been omitted. Note that only those entries that have been used %in the text will appear in the relevant glossaries. % %\subsection{Number lists} %\label{sec:numberlists} % %Each entry in the glossary has an associated number list. By default, %these numbers refer to the pages on which that entry has been used %(using any of the commands described in \autoref{sec:glslink} %and \autoref{sec:glsadd}.) The number list can be suppressed using %the \pkgopt{nonumberlist} package option, or an alternative counter %can be set as the default using the \pkgopt{counter} package option. % %\subsection{Links to Glossary Entries} %\label{sec:glslink} % %Once you have defined a glossary entry using %\icmdname{newglossaryentry}, you can refer to that entry in the %document using one of the commands listed in this section. % %\DescribeMacro{\glslink} %The command:\\[10pt] %\cmdname{glslink}\oarg{options}\marg{label}\marg{text}\\[10pt] %will place \meta{text} in the document at that point, and add %a line into the associated glossary file for the glossary entry %given by \meta{label}. If hyperlinks are supported, \meta{text} %will be a hyperlink to the relevant line in the glossary. The %optional argument \meta{options} must be a key=value list which %can take any of the following keys: % %\begin{description} %\item[{\gloskey[glslink]{format}}] This specifies how to format %the associated number for this entry in the glossary. This value %is equivalent to the \appname{makeindex} encap value, and (as with %\cmdname{index}) the value needs to be the name of a %command \emph{without} the initial backslash. As with %\cmdname{index}, the characters "(" and ")" can also be used to %specify the beginning and ending of a number range. % %The \styname{glossaries} package provides the following number %formats: %\begin{center} %\begin{tabular}{@{\sffamily}lp{0.8\linewidth}} %hyperrm & The number is a serif hyperlink to the relevant part of the %document\\ %hypersf & The number is a sans-serif hyperlink to the relevant part %of the document\\ %hypertt & The number is a monospaced hyperlink to the relevant part %of the document\\ %hyperbf & The number is a bold hyperlink to the relevant part of the %document\\ %hypermd & The number is a medium weight hyperlink to the relevant %part of the document\\ %hyperit & The number is an italic hyperlink to the relevant %part of the document\\ %hypersl & The number is a slanted hyperlink to the relevant %part of the document\\ %hyperup & The number is an upright hyperlink to the relevant %part of the document\\ %hypersc & The number is a small caps hyperlink to the relevant %part of the document\\ %hyperemph & The number is an emphasized hyperlink to the relevant %part of the document\\ %\end{tabular} %\end{center} %Note that if the \cmdname{hyperlink} command hasn't been defined, %the "hyper"\meta{xx} formats are equivalent to the %analogous \cmdname{text}\meta{xx} font commands. If you want to %make a new format, you will need to define a command which takes %one argument, for example, if you want the associated number in %the glossary to be in a bold sans-serif font, you can define a %command called, say, \cmdname{hyperbsf}: %\begin{verbatim} %\newcommand{\hyperbsf}[1]{\textbf{\hypersf{#1}}} %\end{verbatim} %and then use "hyperbsf" as the value for the \gloskey{format} key. %(See also \autoref{sec:printglos}.) % %\item[{\gloskey[glslink]{counter}}] This specifies which counter %to use for the associated number for this glossary entry. (See also %\autoref{sec:numberlists}.) % %\item[{\gloskey[glslink]{hyper}}] This is a boolean key which can %be used to enable/disable the hyperlink to the relevant entry %in the glossary. (Note that setting "hyper=true" will have no %effect if \cmdname{hyperlink} has not been defined.) The default %value is "hyper=true". % %\end{description} %\DescribeMacro{\glslink*} %There is also a starred version:\\[10pt] %\cmdname{glslink*}\oarg{options}\marg{label}\marg{text}\\[10pt] %which is equivalent to \cmdname{glslink}, except it sets %"hyper=false". % %\DescribeMacro{\gls} %The command:\\[10pt] %\cmdname{gls}\oarg{options}\marg{label}\oarg{insert}\\[10pt] %is the same as \cmdname{glslink}, except that the link text %is determined from the values of the \gloskey{text} and %\gloskey{first} keys supplied when the entry was defined using %\icmdname{newglossaryentry}. There are two uppercase variants:\\[10pt] %\DescribeMacro{\Gls} %\cmdname{Gls}\oarg{options}\marg{label}\oarg{insert}\\[10pt] %and %\DescribeMacro{\GLS} %\cmdname{GLS}\oarg{options}\marg{label}\oarg{insert}\\[10pt] %which make the first letter of the link, or all the link text, %uppercase, respectively. % %The final optional argument \meta{insert}, allows you to insert %some additional text into the link text. By default, this will %append \meta{insert} at the end of the link text. The first optional %argument, \meta{options}, is the same as the optional argument to %\icmdname{glslink}. % %There are also analogous plural forms:\\[10pt] %\DescribeMacro{\glspl} %\cmdname{glspl}\oarg{options}\marg{label}\oarg{insert}\\[10pt] %\DescribeMacro{\Glspl} %\cmdname{Glspl}\oarg{options}\marg{label}\oarg{insert}\\[10pt] %\DescribeMacro{\GLSpl} %\cmdname{GLSpl}\oarg{options}\marg{label}\oarg{insert}\\[10pt] %These determine the link text from the \gloskey{plural} and %\gloskey{firstplural} keys supplied when the entry was first %defined. % %\subsection{Adding an entry to the glossary without generating text} %\label{sec:glsadd} % %\DescribeMacro{\glsadd} %It is also possible to add a line in the glossary file without %generating any text at that point in the document.\\[10pt] %\cmdname{glsadd}\oarg{options}\marg{label}\\[10pt] %This is similar to \icmdname{glslink}, only it doesn't produce %any text (so therefore, there is no \gloskey[glslink]{hyper} key %available in \meta{options}.) % %\DescribeMacro{\glsaddall} %To add a line for all entries that have been defined, use:\\[10pt] %\cmdname{glsaddall}\oarg{glossary list}\\[10pt] %If there are multiple glossaries, you can specify to add only %those entries which belong to the glossaries listed in %\meta{glossary list} (which must be a comma separated list of %glossary names.) % %\subsection{Displaying a glossary} % %\DescribeMacro{\printglossaries} %The command \cmdname{printglossaries} will display all the %defined glossaries. Note that no glossaries will appear until %you have either used the Perl script \appname{makeglossaries} %or have directly used \appname{makeindex}. If the glossary still %does not appear, after you re-\LaTeX\ your document, then check %the \appname{makeindex} log files to see if there is a problem. % %\DescribeMacro{\printglossary} %An individual glossary is displayed using:\\[10pt] %\cmdname{printglossary}\oarg{options}\\[10pt] %where \meta{options} is a key-val list of options. The following %keys are available: %\begin{description} %\item[{\gloskey[printglossary]{type}}] The value of this key %specifies which glossary to print. If omitted, the default %glossary is assumed. % %\item[{\gloskey[printglossary]{title}}] This is the glossary's %title (overriding the title specified when the glossary was %defined.) % %\item[{\gloskey[printglossary]{toctitle}}] This is the title %to use for the table of contents (if the \pkgopt{toc} package %option has been used.) % %\item[{\gloskey[printglossary]{style}}] This specifies which %glossary style to use for this glossary. %\end{description} % %\subsection{Defining New Glossaries} % %\DescribeMacro{\newglossary} %A new glossary can be defined using:\\[10pt] %\cmdname{newglossary}\oarg{log-ext}\marg{name}\marg{in-ext}\marg{out-ext}\marg{title}\oarg{counter}\\[10pt] %where \meta{name} is label to assign to this glossary. (Note that %the default glossary is labelled "main" and if you use the %\pkgopt{acronym} package option, there will also be a glossary %called "acronym".) The arguments \meta{in-ext} and \meta{out-ext} %specify the extensions to give to the input and output files %for that glossary, \meta{title} is the default title for this %new glossary and the final optional argument \meta{counter} specifies %which counter to use for the associated number lists (see also %\autoref{sec:numberlists}.) The first optional argument specifies %the extension for the \appname{makeindex} transcript file (this %information is only used by \appname{makeglossaries} which picks %up the information from the auxiliary file.) % %\subsection{Acronyms} % %\DescribeMacro{\newacronym} %As you may have noticed in \autoref{sec:newglosentry}, when you %specify a new entry, you can specify alternate text to use when %the term is first used in the document, this provides a useful %means to define acronyms. The \styname{glossaries} package defines %the command:\\[10pt] %\cmdname{newacronym}\oarg{key-val list}\marg{label}\marg{abbrv}\marg{long}\\[10pt] %This is equivalent to:\vskip5pt %\begin{ttfamily}\obeylines %\cmdname{newglossaryentry}\textrm{\marg{label}}\{type=\cmdname{acronymtype}, %name=\textrm{\marg{abbrv}}, %description=\textrm{\marg{long}}, %text=\textrm{\marg{abbrv}}, %first=\{\textrm{\meta{long}} (\textrm{\meta{abbrv}})\}, %plural=\{\textrm{\meta{abbrv}}s\}, %firstplural=\{\textrm{\meta{long}}s (\textrm{\meta{abbrv}}s)\}, %\textrm{\meta{key-val list}}\} %\end{ttfamily} %\vskip5pt %The command \cmdname{acronymtype} is the name of the glossary %in which the acronyms should appear. If the \pkgopt{acronym} %package option has been used, this will be "acronym", otherwise %it will be "main". The acronyms can then be used in exactly %the same way as any other glossary entry. % %\subsection{Glossary Styles} %The \styname{glossaries} package comes with some pre-defined %glossary styles. These are as follows: %\begin{description} %\item[list] The \glostyle{list} style uses the \envname{description} %environment. The entry name is placed in the optional argument %of the \cmdname{item} command (so it will appear in bold by %default). The description follows, and then the associated number %list for that entry. % %\item[listgroup] The \glostyle{listgroup} style is like %\glostyle{list}, but the glossary groups have headings. % %\item[listhypergroup] The \glostyle{listhypergroup} style is like %\glostyle{listgroup}, but has a set of links to the glossary %groups. % %\item[altlist] The \glostyle{altlist} style is like \glostyle{list} %but the description is placed on the following line. % %\item[altlistgroup] The \glostyle{altlistgroup} style is like %\glostyle{altlist}, but the glossary groups have headings. % %\item[altlisthypergroup] The \glostyle{altlisthypergroup} style is like %\glostyle{altlistgroup}, but has a set of links to the glossary %groups. % %\item[long] The \glostyle{long} style uses the \envname{longtable} %environment. It has two columns, the first column contains the %entry's name, the second column contains the description followed %by the number list. % %\item[longborder] The \glostyle{longborder} style is like %\glostyle{long}, but has horizontal and vertical lines around it. % %\item[longheader] The \glostyle{longheader} style is like %\glostyle{long}, but has a header row. % %\item[longheaderborder] The \glostyle{longheaderborder} style is %like \glostyle{longheader}, but has horizontal and vertical lines %around it. % %\item[long3col] The \glostyle{long3col} style is like %\glostyle{long} but has three columns. The first column contains %the entry's name, the second column contains the description %and the third column contains the number list. % %\item[long3colborder] The \glostyle{long3colborder} style is like %the \glostyle{long3col} style but has horizontal and vertical %lines around it. % %\item[long3colheader] The \glostyle{long3colheader} style is like %\glostyle{long3col}, but has a header row. % %\item[long3colheaderborder] The \glostyle{long3colheaderborder} style is %like \glostyle{long3colheader}, but has horizontal and vertical lines %around it. % %\item[long4col] The \glostyle{long4col} style is like %\glostyle{long3col} but has an additional column in which the %entry's associated symbol appears. % %\item[long4colborder] The \glostyle{long4colborder} style is like %the \glostyle{long4col} style but has horizontal and vertical %lines around it. % %\item[long4colheader] The \glostyle{long4colheader} style is like %\glostyle{long4col}, but has a header row. % %\item[long4colheaderborder] The \glostyle{long4colheaderborder} style is %like \glostyle{long4colheader}, but has horizontal and vertical lines %around it. % %\item[super] The \glostyle{super} style uses the \envname{supertabular} %environment. It has two columns, the first column contains the %entry's name, the second column contains the description followed %by the number list. % %\item[superborder] The \glostyle{superborder} style is like %\glostyle{super}, but has horizontal and vertical lines around it. % %\item[superheader] The \glostyle{superheader} style is like %\glostyle{super}, but has a header row. % %\item[superheaderborder] The \glostyle{superheaderborder} style is %like \glostyle{superheader}, but has horizontal and vertical lines %around it. % %\item[super3col] The \glostyle{super3col} style is like %\glostyle{super} but has three columns. The first column contains %the entry's name, the second column contains the description %and the third column contains the number list. % %\item[super3colborder] The \glostyle{super3colborder} style is like %the \glostyle{super3col} style but has horizontal and vertical %lines around it. % %\item[super3colheader] The \glostyle{super3colheader} style is like %\glostyle{super3col}, but has a header row. % %\item[super3colheaderborder] The \glostyle{super3colheaderborder} style is %like \glostyle{super3colheader}, but has horizontal and vertical lines %around it. % %\item[super4col] The \glostyle{super4col} style is like %\glostyle{super3col} but has an additional column in which the %entry's associated symbol appears. % %\item[super4colborder] The \glostyle{super4colborder} style is like %the \glostyle{super4col} style but has horizontal and vertical %lines around it. % %\item[super4colheader] The \glostyle{super4colheader} style is like %\glostyle{super4col}, but has a header row. % %\item[super4colheaderborder] The \glostyle{super4colheaderborder} style is %like \glostyle{super4colheader}, but has horizontal and vertical lines %around it. % %\end{description} % %The glossary style can be set using the \pkgopt{style} package option, %or using the \gloskey[printglossary]{style} key in the optional %argument to \icmdname{printglossary}, or using the command:\\[10pt] %\cmdname{glossarystyle}\marg{style-name}\\[10pt] %For further details on creating or modifying glossary styles see %\autoref{sec:printglos} and \autoref{sec:styles}. % % \StopEventually{\phantomsection\addcontentsline{toc}{section}{Index}\PrintIndex} % % % % %\section{The Code} %\iffalse % \begin{macrocode} %<*glossaries.sty> % \end{macrocode} %\fi %\label{sec:code} % \subsection{Package Definition} % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{glossaries}[2007/05/25 v1.02 (NLCT)] % \end{macrocode} % Required packages: % \begin{macrocode} \RequirePackage{ifthen} \RequirePackage{xkeyval}[2006/11/18] \RequirePackage{xspace} % \end{macrocode} % % \subsection{Package Options}\label{sec:pkgopt} % The \pkgopt{toc} package option will add the glossaries % to the table of contents. This is a boolean key, if the % value is omitted it is taken to be true. % \begin{macrocode} \define@boolkey{glossaries.sty}[gls]{toc}[true]{} % \end{macrocode} % %\DescribeMacro{\@@glossarysec} % The sectional unit used to start the glossary is stored in % \cmdname{@@glossarysec}. If chapters are defined, this % is initialised to \texttt{chapter}, otherwise it is % initialised to \texttt{section}. % \begin{macrocode} \@ifundefined{chapter}{\newcommand*{\@@glossarysec}{section}}{% \newcommand*{\@@glossarysec}{chapter}} % \end{macrocode} % The \pkgopt{section} key can be used to set the sectional unit. % If no unit is specified, use \texttt{section} as the default. % The starred form of the named sectional unit will be used. % If you want some other way to start the glossary section (e.g.\ % a numbered section) you will have to redefined % \icmdname{glossarysection}. % \begin{macrocode} \define@choicekey{glossaries.sty}{section}{part,chapter,section,% subsection,subsubsection,paragraph,subparagraph}[section]{% \renewcommand*{\@@glossarysec}{#1}} % \end{macrocode} % %\DescribeMacro{\@glossary@default@style} % The default glossary style is stored in % \cmdname{@glossary@default@style}. This is initialised to % \texttt{list}. (The \glostyle{list} style is % defined in the accompanying \styname{glossary-list} package % described in \autoref{sec:styles}.) % \begin{macrocode} \newcommand*{\@glossary@default@style}{list} % \end{macrocode} % The default glossary style can be changed using the \pkgopt{style} % package option. The value can be the name of any % defined glossary style. The glossary style is set at the beginning % of the document, so you can still use the \pkgopt{style} key to % set a style that is defined in another package. This package comes % with some predefined styles that are defined in % \autoref{sec:styles}. % \begin{macrocode} \define@key{glossaries.sty}{style}{% \renewcommand*{\@glossary@default@style}{#1}} % \end{macrocode} % % Each entry within a given glossary will have an associated % number list. By default, this refers to the page numbers on % which that entry has been used, but it can also refer to any counter % used in the document (such as the section or equation counters). % The default number list format displays the number list ``as is'': %\DescribeMacro{\glossaryentrynumbers} % \begin{macrocode} \newcommand*{\glossaryentrynumbers}[1]{#1} % \end{macrocode} % Note that the entire number list for a given entry will be % passed to \cmdname{glossaryentrynumbers} so any font changes % will also be applied to the delimiters. % The \pkgopt{nonumberlist} package option suppresses the % number lists (this simply redefines % \cmdname{glossaryentrynumbers} to ignores its argument.) % \begin{macrocode} \DeclareOptionX{nonumberlist}{% \renewcommand*{\glossaryentrynumbers}[1]{}} % \end{macrocode} % %\DescribeMacro{\glsdefaulttype} % Keep track of the default glossary. This is initialised to % the main glossary, but can be changed if for some reason % you want to make a secondary glossary the main glossary. This % affects any commands that can optionally take a glossary name % as an argument (or as the value of the % \gloskey{type}\igloskey[printglossary]{type} key in %a key-value list.) This was mainly done so that % \icmdname{loadglsentries} can temporarily change % \cmdname{glsdefaulttype} while it loads a file containing % new glossary entries (see \autoref{sec:load}). % \begin{macrocode} \newcommand{\glsdefaulttype}{main} % \end{macrocode} %\DescribeMacro{\acronymtype} % Keep track of which glossary the acronyms are in. This is % initialised to \cmdname{glsdefaulttype}, but is changed by % the \pkgopt{acronym} package option. % \begin{macrocode} \newcommand{\acronymtype}{\glsdefaulttype} % \end{macrocode} % The \pkgopt{acronym} option sets an associated conditional % which is used in \autoref{sec:acronym} to determine whether % or not to define a separate glossary for acronyms. % \begin{macrocode} \define@boolkey{glossaries.sty}[gls]{acronym}[true]{} % \end{macrocode} % %\DescribeMacro{\glscounter} % The default counter associated with the numbers in the glossary % is stored in \cmdname{glscounter}. This is initialised to the % page counter. This is used as the default counter when a % new glossary is defined, unless a different counter is specified % in the optional argument to \icmdname{newglossary} (see % \autoref{sec:newglos}). % \begin{macrocode} \newcommand{\glscounter}{page} % \end{macrocode} % The \pkgopt{counter} option changes the default counter. (This % just redefines \cmdname{glscounter}.) % \begin{macrocode} \define@key{glossaries.sty}{counter}{% \renewcommand*{\glscounter}{#1}} % \end{macrocode} % % The glossary keys whose values are written to another file (i.e.\ % \gloskey{sort}, \gloskey{name}, \gloskey{description} and % \gloskey{symbol}) need to be sanitized, otherwise fragile % commands would not be able to be used in % \icmdname{newglossaryentry}. However, strange results will occur % if you then use those fields in the document. As these fields % are not normally used in the document, but are by default only % used in the glossary, the default is to sanitize them. If however % you want to use these values in the document (either by redefining % commands like \icmdname{glsdisplay} or by using commands like % \icmdname{glsentrydesc}) you will have to switch off the % sanitization using the \pkgopt{sanitize} package option, but % you will then have to use \icmdname{protect} to protect fragile % commands when defining new glossary entries. % The \pkgopt{sanitize} option % takes a key-value list as its value, which can be used to % switch individual values on and off. For example: %\begin{verbatim} %\usepackage[sanitize={description,name,symbol=false}]{glossaries} %\end{verbatim} %will switch off the sanitization for the \gloskey{symbol} key, but % switch it on for the \gloskey{description} and \gloskey{name} keys. % This would mean that you can use fragile commands in the %description and name when defining a new glossary entry, but not % for the symbol. % % The default values are defined as: % \begin{macrocode} \newcommand*{\@gls@sanitizedesc}{\@onelevel@sanitize\@glo@desc} \newcommand*{\@gls@sanitizename}{\@onelevel@sanitize\@glo@name} \newcommand*{\@gls@sanitizesymbol}{\@onelevel@sanitize\@glo@symbol} % \end{macrocode} % (There is no equivalent for the \gloskey{sort} key, since that % is only provided for the benefit of \appname{makeindex}, and % so will always be sanitized.) % % Before defining the \pkgopt{sanitize} package option, The % key-value list for the \pkgopt{sanitize} value needs to be defined. % These are all boolean keys. If they are not given a value, assume % \texttt{true}. % % Firstly the \gloskey{description}. If set, it will redefine % \cmdname{@gls@sanitizedesc} to use \cmdname{@onelevel@sanitize}, % otherwise \cmdname{@gls@sanitizedesc} will do nothing. % \begin{macrocode} \define@boolkey[gls]{sanitize}{description}[true]{% \ifgls@sanitize@description \renewcommand*{\@gls@sanitizedesc}{\@onelevel@sanitize\@glo@desc}% \else \renewcommand*{\@gls@sanitizedesc}{}% \fi } % \end{macrocode} % Similarly for the \gloskey{name} key: % \begin{macrocode} \define@boolkey[gls]{sanitize}{name}[true]{% \ifgls@sanitize@name \renewcommand*{\@gls@sanitizename}{\@onelevel@sanitize\@glo@name}% \else \renewcommand*{\@gls@sanitizename}{}% \fi} % \end{macrocode} % and for the \gloskey{symbol} key: % \begin{macrocode} \define@boolkey[gls]{sanitize}{symbol}[true]{% \ifgls@sanitize@symbol \renewcommand*{\@gls@sanitizesymbol}{% \@onelevel@sanitize\@glo@symbol}% \else \renewcommand*{\@gls@sanitizesymbol}{}% \fi} % \end{macrocode} % Now define the \pkgopt{sanitize} option. It can either take % a key-val list as its value, or it can take the keyword % \texttt{none}, which is equivalent to \texttt{description=false, % symbol=false, name=false}: % \begin{macrocode} \define@key{glossaries.sty}{sanitize}[description=true,symbol=true, name=true]{% \ifthenelse{\equal{#1}{none}}{% \renewcommand*{\@gls@sanitizedesc}{}% \renewcommand*{\@gls@sanitizename}{}% \renewcommand*{\@gls@sanitizesymbol}{}% }{\setkeys[gls]{sanitize}{#1}}% } % \end{macrocode} % Process package options: % \begin{macrocode} \ProcessOptionsX % \end{macrocode} % % If chapters are defined and the user has requested the % section counter as a package option, \cmdname{@chapter} will % be modified so % that it adds a \texttt{section.}\meta{n}\texttt{.0} target, % otherwise entries placed before the first section of a chapter % will have undefined links. % % The same problem will also occur if a lower sectional unit is % used, but this is less likely to happen. If it does, or if % you change \cmdname{glscounter} to "section" later, you % will have to specify a different counter for the entries % that give rise to a \texttt{name}"{"\meta{section-level}"."\meta{n}".0}" % non-existent warning (e.g. "\gls[counter=chapter]{label}"). % \begin{macrocode} \ifthenelse{\equal{\glscounter}{section}}{% \@ifundefined{chapter}{}{% \let\@gls@old@chapter\@chapter \def\@chapter[#1]#2{\@gls@old@chapter[{#1}]{#2}% \@ifundefined{hyperdef}{}{\hyperdef{section}{\thesection}{}}}}}{} % \end{macrocode} % %\subsection{Default values} % This section sets up default values that are used by this % package. Some of the names may already be defined (e.g.\ by % \styname{babel}) so \cmdname{providecommand} is used. % % Main glossary title: %\DescribeMacro{\glossaryname} % \begin{macrocode} \providecommand*{\glossaryname}{Glossary} % \end{macrocode} %\DescribeMacro{\acronymname} % The title for the "acronym" glossary type (which is defined if % \pkgopt{acronym} package option is used) is given by % \cmdname{acronymname}. If the \pkgopt{acronym} % package option is not used, \cmdname{acronymname} won't be used. % \begin{macrocode} \providecommand*{\acronymname}{Acronyms} % \end{macrocode} % % The following commands provide text for the headers used by % some of the tabular-like glossary % styles. Whether or not they get used in the glossary depends on % the glossary style. %\DescribeMacro{\entryname} %\DescribeMacro{\descriptionname} %\DescribeMacro{\symbolname} %\DescribeMacro{\pagelistname} % \begin{macrocode} \providecommand*{\entryname}{Notation} \providecommand*{\descriptionname}{Description} \providecommand*{\symbolname}{Symbol} \providecommand*{\pagelistname}{Page List} % \end{macrocode} % Labels for \appname{makeindex}'s symbol and number groups: %\DescribeMacro{\glssymbolsgroupname}\DescribeMacro{\glsnumbersgroupname} % \begin{macrocode} \providecommand*{\glssymbolsgroupname}{Symbols} \providecommand*{\glsnumbersgroupname}{Numbers} % \end{macrocode} % %\DescribeMacro{\istfilename} % The name of the \appname{makeindex} style file is given by % \cmdname{istfilename}. This file is % created by \icmdname{writeist} (which is used by % \icmdname{makeglossaries}) so % redefining this command will only have an effect if it is % done \emph{before} the \filetype{ist} file is created. % \begin{macrocode} \providecommand*{\istfilename}{\jobname.ist} % \end{macrocode} % The \appname{makeglossaries} Perl script picks up this name % from the auxiliary file and passes it to \appname{makeindex} % using the \texttt{-s} option. Since its not required by % \LaTeX, \cmdname{@istfilename} ignores its argument. %\DescribeMacro{\@istfilename} % \begin{macrocode} \newcommand*{\@istfilename}[1]{} % \end{macrocode} % %\DescribeMacro{\glscompositor} % This command is the value of the \istkey{page\_compositor} % \appname{makeindex} key. Again, any redefinition of this command % must take place \emph{before} \cmdname{writeist} otherwise it % will have no effect. % \begin{macrocode} \newcommand{\glscompositor}{.} % \end{macrocode} % (The page compositor is usually defined as a dash when using % \appname{makeindex}, but most of the standard counters used % by \LaTeX\ use a full stop as the compositor, which is why I % have used it as the default.) % %\DescribeMacro{\glsnumberformat} % The command \cmdname{glsnumberformat} indicates the default % format for the page numbers in the glossary. (Note that this % is not the same as \icmdname{glossaryentrynumbers}, but applies % to individual numbers or groups of numbers within an entry's % associated number list.) If hyperlinks are defined, it will use % \icmdname{glshypernumber}, otherwise it will simply display its % argument ``as is''. % \begin{macrocode} \@ifundefined{hyperlink}{% \newcommand*{\glsnumberformat}[1]{#1}}{% \newcommand*{\glsnumberformat}[1]{\glshypernumber{#1}}} % \end{macrocode} %\DescribeMacro{\delimN} % Individual numbers in an entry's associated number list are % delimited using \cmdname{delimN} (which corresponds to the % \istkey{delim\_n} \appname{makeindex} keyword.) The default value % is a comma followed by a space. % \begin{macrocode} \newcommand{\delimN}{, } % \end{macrocode} %\DescribeMacro{\delimR} % A range of numbers within an entry's associated number list is % delimited using \cmdname{delimR} (which corresponds to the % \istkey{delim\_r} \appname{makeindex} keyword.) The default is % an en-dash. % \begin{macrocode} \newcommand{\delimR}{--} % \end{macrocode} % %\DescribeMacro{\glossarypreamble} % The glossary preamble is given by \cmdname{glossarypreamble}. This % will appear after the glossary sectioning command, and before the % \envname{theglossary} environment. It is designed to allow the % user to add information pertaining to the glossary (e.g.\ ``page % numbers in italic indicate the primary definition'') therefore % \cmdname{glossarypremable} shouldn't be affected by the glossary % style. (So if you define your own glossary style, don't have it % change \cmdname{glossarypreamble}.) The preamble is empty by % default. If you have multiple glossaries, and you want a % different preamble for each glossary, you will need to use % \icmdname{printglossary} for each glossary type, instead of % \icmdname{printglossaries}, and redefine \cmdname{glossarypreamble} % before each \icmdname{printglossary}. % \begin{macrocode} \newcommand*{\glossarypreamble}{} % \end{macrocode} % %\DescribeMacro{\glossarypostamble} % The glossary postamble is given by \cmdname{glossarypostamble}. % This is provided to allow the user to % add something after the end of the \envname{theglossary} % environment (again, this shouldn't be affected by the % glossary style.) It is, of course, possible to simply add the % text after \icmdname{printglossary}, but if you only want the % postamble to appear after the first glossary, but not after % subsequent glossaries, you can do something like: %\begin{verbatim} %\renewcommand{\glossarypostamble}{For a complete list of terms %see \cite{blah}\gdef\glossarypreamble{}} %\end{verbatim} % \begin{macrocode} \newcommand*{\glossarypostamble}{} % \end{macrocode} % %\DescribeMacro{\glossarysection} % The sectioning command that starts a glossary is given by % \cmdname{glossarysection}. (This does not form part of the % glossary style, and so should not be changed by a glossary % style.) If \icmdname{phantomsection} % is defined, it uses \cmdname{\@p@glossarysection}, otherwise it % uses \cmdname{@glossarysection}. % \begin{macrocode} \newcommand*{\glossarysection}[2][\@gls@title]{% \def\@gls@title{#2}% \@ifundefined{phantomsection}{% \@glossarysection{#1}{#2}}{\@p@glossarysection{#1}{#2}}% } % \end{macrocode} % % The required sectional unit is given by \cmdname{@@glossarysec} % which was defined by the \pkgopt{section} package option. The % starred form of the command is chosen. If you want a numbered % section for the glossary or if you don't want any sectional % command, you will need to redefine \cmdname{glossarysection}. % %\DescribeMacro{\@glossarysection} %The command \cmdname{@glossarysection} indicates how to start % the glossary section if \icmdname{phantomsection} is not defined. % \begin{macrocode} \newcommand*{\@glossarysection}[2]{% \csname\@@glossarysec\endcsname*{#2} \@gls@toc{#1}{\@@glossarysec}} % \end{macrocode} % %\DescribeMacro{\@p@glossarysection} % As \cmdname{@glossarysection}, but put in % \icmdname{phantomsection}, and swap where \cmdname{@gls@toc} goes. % If using chapters do a \cmdname{clearpage}. This ensures that % the hyper link from the table of contents leads to the line above % the heading, rather than the line below it. % \begin{macrocode} \newcommand*{\@p@glossarysection}[2]{% \gls@doclearpage \phantomsection\@gls@toc{#1}{\@@glossarysec}% \csname\@@glossarysec\endcsname*{#2}} % \end{macrocode} % %\DescribeMacro{\gls@doclearpage} %The \cmdname{gls@doclearpage} command is used to issue a % \cmdname{clearpage} (or \cmdname{cleardoublepage}) depending % on whether the glossary sectional unit is a chapter. If the % sectional unit is something else, do nothing. % \begin{macrocode} \newcommand{\gls@doclearpage}{% \ifthenelse{\equal{\@@glossarysec}{chapter}}{% \@ifundefined{cleardoublepage}{\clearpage}{\cleardoublepage}}{}% } % \end{macrocode} % %\DescribeMacro{\@gls@toc} % The glossary is added to the table of contents if glstoc flag set. % If it is set, \cmdname{@gls@toc} will add a line to the % \filetype{toc} file, otherwise it will do nothing. % (The first argument to \cmdname{@gls@toc} is the title for the % table of contents, the second argument is the sectioning type.) % \begin{macrocode} \newcommand*{\@gls@toc}[2]{% \ifglstoc \addcontentsline{toc}{#2}{#1}\fi} % \end{macrocode} % %\subsection{Loops and conditionals} %\DescribeMacro{\forallglossaries} % To iterate through all glossaries (or comma-separated list of % glossary names given in optional argument) use:\\[10pt] % \cmdname{forallglossaries}\oarg{glossary list}\marg{cmd}\marg{code}\\[10pt] % where \meta{cmd} is % a control sequence which will be set to the name of the % glossary in the current iteration. % \begin{macrocode} \newcommand*{\forallglossaries}[3][\@glo@types]{% \@for#2:=#1\do{\ifthenelse{\equal{#2}{}}{}{#3}}} % \end{macrocode} % %\DescribeMacro{\forglsentries} % To iterate through all entries in a given glossary use:\\[10pt] %\cmdname{forglsentries}\oarg{type}\marg{cmd}\marg{code}\\[10pt] %where \meta{type} is the glossary label and \meta{cmd} is a % control sequence which will be set to the entry label in the % current iteration. % \begin{macrocode} \newcommand*{\forglsentries}[3][\glsdefaulttype]{% \edef\@@glo@list{\csname glolist@#1\endcsname}% \@for#2:=\@@glo@list\do{% \ifthenelse{\equal{#2}{}}{}{#3}}} % \end{macrocode} % %\DescribeMacro{\forallglsentries} % To iterate through all glossary entries over all glossaries listed % in the optional argument (the default is all glossaries) use:\\[10pt] % \cmdname{forallglsentries}\oarg{glossary list}\marg{cmd}\marg{code}\\[10pt] % Within \cmdname{forallglsentries}, the current glossary type % is given by \cmdname{@@this@glo@}. % \begin{macrocode} \newcommand*{\forallglsentries}[3][\@glo@types]{% \expandafter\forallglossaries\expandafter[#1]{\@@this@glo@}{% \forglsentries[\@@this@glo@]{#2}{#3}}} % \end{macrocode} % %\DescribeMacro{\ifglossaryexists} % To check to see if a glossary exists use:\\[10pt] %\cmdname{ifglossaryexists}\marg{type}\marg{true-text}\marg{false-text}\\[10pt] %where \meta{type} is the glossary's label. % \begin{macrocode} \newcommand{\ifglossaryexists}[3]{% \@ifundefined{@glotype@#1@out}{#3}{#2}} % \end{macrocode} % %\DescribeMacro{\ifglsentryexists} % To check to see if a glossary entry has been defined use:\\[10pt] % \cmdname{ifglsentryexists}\marg{label}\marg{true text}\marg{false text}\\[10pt] %where \meta{label} is the entry's label. % \begin{macrocode} \newcommand{\ifglsentryexists}[3]{% \@ifundefined{glo@#1@name}{#3}{#2}} % \end{macrocode} % %\DescribeMacro{\ifglsused} % To determine if given glossary entry has been % used in the document text yet use:\\[10pt] % \cmdname{ifglsused}\marg{label}\marg{true text}\marg{false text}\\[10pt] % where \meta{label} is the entry's label. % If true it will do \meta{true text} % otherwise it will do \meta{false text}. % \begin{macrocode} \newcommand*{\ifglsused}[3]{\ifthenelse{\boolean{glo@#1@flag}}{#2}{#3}} % \end{macrocode} %The following two commands will cause an error if the given % condition fails: % %\DescribeMacro{\glsdoifexists} %\cmdname{glsdoifexists}\marg{label}\marg{code}\par % Generate an error if entry specified by \meta{label} doesn't % exists, otherwise do \meta{code}. % \begin{macrocode} \newcommand{\glsdoifexists}[2]{\ifglsentryexists{#1}{#2}{% \PackageError{glossaries}{Glossary entry `#1' has not been defined.}{You need to define a glossary entry before you can use it.}}} % \end{macrocode} % %\DescribeMacro{\glsdoifnoexists} %\cmdname{glsdoifnoexists}\marg{label}\marg{code}\par % The opposite: only do second argument if the entry doesn't % exists. Generate an error message if it exists. % \begin{macrocode} \newcommand{\glsdoifnoexists}[2]{\ifglsentryexists{#1}{% \PackageError{glossaries}{Glossary entry `#1' has already been defined.}{}}{#2}} % \end{macrocode} % %\subsection{Defining new glossaries}\label{sec:newglos} %\DescribeMacro{\@glo@types} % A comma-separated list of glossary names is stored % in \cmdname{@glo@types}. When a new glossary type % is created, its identifying name is added to this list. % This is used by commands that iterate through all glossaries % (such as \icmdname{makeglossaries} and \icmdname{printglossaries}.) % \begin{macrocode} \newcommand*{\@glo@types}{,} % \end{macrocode} % %\DescribeMacro{\newglossary} % A new glossary type is defined using \cmdname{newglossary}. % Syntax:\\[10pt]\cmdname{newglossary}\oarg{log-ext}\marg{name}\marg{in-ext}\marg{out-ext}% %\marg{title}\oarg{counter}\\[10pt]% % where \meta{log-ext} is the extension of the \appname{makeindex} % transcript file, \meta{in-ext} is the extension of the glossary % input file (read in by \icmdname{printglossary} and created by % \appname{makeindex}), \meta{out-ext} is the extension of the % glossary output file which is read in by \appname{makeindex} % (lines are written to this file by the \icmdname{glossary} command), % \meta{title} is the title of the glossary that is used in % \icmdname{glossarysection} and % \meta{counter} is the default counter to be used by entries % belonging to this glossary. The \appname{makeglossaries} Perl % script reads in the relevant extensions from the auxiliary file, % and passes the appropriate file names and switches to % \appname{makeindex}.) % \begin{macrocode} \newcommand*{\newglossary}[5][glg]{% \ifglossaryexists{#2}{% \PackageError{glossaries}{Glossary type `#2' already exists}{% You can't define a new glossary called `#2' because it already exists}% }{% % \end{macrocode} % Add this to the list of glossary types: % \begin{macrocode} \toks@{#2}\edef\@glo@types{\@glo@types\the\toks@,}% % \end{macrocode} % Define a comma-separated list of labels for this glossary type, % so that all the entries for this glossary can be reset with a % single command. When a new entry is created, its label is added % to this list. % \begin{macrocode} \expandafter\gdef\csname glolist@#2\endcsname{,}% % \end{macrocode} % Store details of this new glossary type: % \begin{macrocode} \expandafter\def\csname @glotype@#2@in\endcsname{#3}% \expandafter\def\csname @glotype@#2@out\endcsname{#4}% \expandafter\def\csname @glotype@#2@title\endcsname{#5}% \protected@write\@auxout{}{\string\@newglossary{#2}{#1}{#3}{#4}}% % \end{macrocode} % How to display this entry in the document text (uses % \cmdname{glsdisplay} and \cmdname{glsdisplayfirst} by % default). These can be redefined by the user later if required % (see \icmdname{defglsdisplay} and \icmdname{defglsdisplayfirst}) % \begin{macrocode} \expandafter\gdef\csname gls@#2@display\endcsname{% \glsdisplay}% \expandafter\gdef\csname gls@#2@displayfirst\endcsname{% \glsdisplayfirst}% % \end{macrocode} % Find out if the final optional argument has been specified, and % use it to set the counter associated with this glossary. (Uses % \icmdname{glscounter} if no optional argument is present.) % \begin{macrocode} \@ifnextchar[{\@gls@setcounter{#2}}{\@gls@setcounter{#2}[\glscounter]}}} % \end{macrocode} % Only defined new glossaries in the preamble: % \begin{macrocode} \@onlypreamble{\newglossary} % \end{macrocode} %\DescribeMacro{\@newglossary} %\cmdname{@newglossary} is used to specify the file extensions % for the \appname{makeindex} input, output and transcript files. % It is written to the auxiliary file by \icmdname{newglossary}. % Since it is not used by \LaTeX, \cmdname{@newglossary} simply % ignores its arguments. % \begin{macrocode} \newcommand*{\@newglossary}[4]{} % \end{macrocode} %\DescribeMacro{\@gls@setcounter} % Store counter to be used for given glossary type (the first % argument is the glossary label, the second argument is the name % of the counter): % \begin{macrocode} \def\@gls@setcounter#1[#2]{% \expandafter\def\csname @glotype@#1@counter\endcsname{#2}% } % \end{macrocode} %\DescribeMacro{\@gls@getcounter} % Get counter associated with given glossary (the argument is % the glossary label): % \begin{macrocode} \newcommand*{\@gls@getcounter}[1]{% \csname @glotype@#1@counter\endcsname} % \end{macrocode} % % Define the main glossary. This will be the first glossary to % be displayed when using \icmdname{printglossaries}. % \begin{macrocode} \newglossary{main}{gls}{glo}{\glossaryname} % \end{macrocode} % %\subsection{Defining new entries}\label{sec:newentry} % New glossary entries are defined using \cmdname{newglossaryentry}. % This command requires a label and a key-value list that defines % the relevant information for that entry. The definition for these % keys follows. Note that the \gloskey{name}, % \gloskey{description} and \gloskey{symbol} keys will be % sanitized later, depending on the value of the package option % \pkgopt{sanitize} (this means that if some of the keys haven't % been defined, they can be constructed from the \gloskey{name} % and \gloskey{description} key before they are sanitized). % %The \gloskey{name} key indicates the name % of the term being defined. This is how the term will appear in % the glossary. The \gloskey{name} key is required when defining % a new glossary entry. % \begin{macrocode} \define@key{glossentry}{name}{% \def\@glo@name{#1}% } % \end{macrocode} % % The \gloskey{description} key is usually only used in % the glossary, but can be made to appear in the text by redefining % \icmdname{glsdisplay} and \icmdname{glsdisplayfirst} (or % using \icmdname{defglsdisplay} and \icmdname{defglsdisplayfirst}), however, % you will have to disable the sanitize option (using the % \pkgopt{sanitize} package option, % "sanitize={description=false}", and protect fragile % commands.) The \gloskey{description} key is required when % defining a new glossary entry. (Be careful not to make the % description too long, because \appname{makeindex} has a limited % buffer. \cmdname{@glo@desc} is defined to be a short command % to discourage lengthy descriptions % for this reason. If you do have a very long description, or if % you require paragraph breaks, define a separate command that % contains the description, and use it as the value to the % \gloskey{description} key.) % \begin{macrocode} \define@key{glossentry}{description}{% \def\@glo@desc{#1}% } % \end{macrocode} % % The \gloskey{sort} key needs to be sanitized here % (the sort key is provided for \appname{makeindex}'s benefit, % not for use in the document.) The \gloskey{sort} key is optional % when defining a new glossary entry. If omitted, the value % is given by \meta{name} \meta{description}. % \begin{macrocode} \define@key{glossentry}{sort}{% \def\@glo@sort{#1}% \@onelevel@sanitize\@glo@sort} % \end{macrocode} % % The \gloskey{text} key determines how the term should appear when % used in the document (i.e.\ outside of the glossary). If omitted, % the value of the \gloskey{name} key is used instead. % \begin{macrocode} \define@key{glossentry}{text}{% \def\@glo@text{#1}% } % \end{macrocode} % % The \gloskey{plural} key determines how the plural form of the term % should be displayed in the document. If omitted, the plural is % constructed by appending an ``s'' to the value of the \gloskey{text} % key. % \begin{macrocode} \define@key{glossentry}{plural}{% \def\@glo@plural{#1}% } % \end{macrocode} % % The \gloskey{first} key determines how the entry should be displayed % in the document when it is first used. If omitted, it is taken % to be the same as the value of the \gloskey{text} key. % \begin{macrocode} \define@key{glossentry}{first}{% \def\@glo@first{#1}% } % \end{macrocode} % % The \gloskey{firstplural} key is used to set the plural form for % first use, in the event that the plural is required the first % time the term is used. If omitted, it is constructed by % appending an ``s'' to the value of the \gloskey{first} key. % \begin{macrocode} \define@key{glossentry}{firstplural}{% \def\@glo@firstplural{#1}% } % \end{macrocode} % % The \gloskey{symbol} key is ignored by most of the predefined % glossary styles, and defaults to \cmdname{relax} if omitted. % It is provided for glossary styles that require an associated % symbol, as well as a name and description. To make this value % appear in the glossary, you need to redefine % \icmdname{glossaryentryfield} so that it uses its fourth parameter. % If you want this value to appear in the text when the term is used % by commands like \icmdname{gls}, you will need to change % \icmdname{glsdisplay} and \icmdname{glsdisplayfirst} (either % explicitly for all glossaries or via \icmdname{defglsdisplay} % and \icmdname{defglsdisplayfirst} for individual glossaries.) % \begin{macrocode} \define@key{glossentry}{symbol}{% \def\@glo@symbol{#1}% } % \end{macrocode} % % The \gloskey{type} key specifies to which glossary this % entry belongs. If omitted, the default glossary is used. % \begin{macrocode} \define@key{glossentry}{type}{% \def\@glo@type{#1}} % \end{macrocode} % % The \gloskey{counter} key specifies the name of the counter % associated with this glossary entry: % \begin{macrocode} \define@key{glossentry}{counter}{% \@ifundefined{c@#1}{\PackageError{glossaries}{There is no counter called `#1'}{The counter key should have the name of a valid counter as its value}}{% \def\@glo@counter{#1}}} % \end{macrocode} % %\DescribeMacro{\newglossaryentry} % Define \cmdname{newglossaryentry}% % \marg{label} \marg{key-val list}. % There are two required fields in \meta{key-val list}: % \gloskey{name} and % \gloskey{description}. (See above.) % \begin{macrocode} \DeclareRobustCommand{\newglossaryentry}[2]{% % \end{macrocode} % Check to see if this glossary entry has already been defined: % \begin{macrocode} \glsdoifnoexists{#1}{% % \end{macrocode} % Set up defaults. If the \gloskey{name} or \gloskey{description} % keys are omitted, an error will be generated. % \begin{macrocode} \def\@glo@name{\PackageError{glossaries}{name key required in \string\newglossaryentry}{You haven't specified the entry name}}% \def\@glo@desc{\PackageError{glossaries}{desc key required in \string\newglossaryentry}{You haven't specified the entry description}}% \def\@glo@type{\glsdefaulttype}% \def\@glo@symbol{\relax}% \def\@glo@text{\@glo@name}% \def\@glo@plural{\@glo@text s}% \def\@glo@first{\@glo@text}% \def\@glo@firstplural{\@glo@plural}% \def\@glo@sort{\@glo@name\space\@glo@desc}% \def\@glo@counter{\@gls@getcounter{\@glo@type}}% % \end{macrocode} % Extract key-val information from third parameter: % \begin{macrocode} \setkeys{glossentry}{#2}% % \end{macrocode} % Check to see if this glossary type has been defined, if it has, % add this label to the relevant list, otherwise generate an error. % \begin{macrocode} \@ifundefined{glolist@\@glo@type}{\PackageError{glossaries}{% Glossary type '\@glo@type' has not been defined}{% You need to define a new glossary type, before making entries in it}}{% \protected@edef\@glolist@{\csname glolist@\@glo@type\endcsname}% \expandafter\xdef\csname glolist@\@glo@type\endcsname{\@glolist@{#1},}% }% % \end{macrocode} % Define commands associated with this entry: % \begin{macrocode} \expandafter\protected@xdef\csname glo@#1@text\endcsname{\@glo@text}% \expandafter\protected@xdef\csname glo@#1@plural\endcsname{\@glo@plural}% \expandafter\protected@xdef\csname glo@#1@first\endcsname{\@glo@first}% \expandafter\protected@xdef\csname glo@#1@firstpl\endcsname{\@glo@firstplural}% \expandafter\protected@xdef\csname glo@#1@type\endcsname{\@glo@type}% \expandafter\protected@xdef\csname glo@#1@counter\endcsname{\@glo@counter}% \@gls@sanitizename \expandafter\protected@xdef\csname glo@#1@name\endcsname{\@glo@name}% \@gls@sanitizedesc \expandafter\protected@xdef\csname glo@#1@desc\endcsname{\@glo@desc}% \expandafter\protected@xdef\csname glo@#1@sort\endcsname{\@glo@sort}% \@gls@sanitizesymbol \expandafter\protected@xdef\csname glo@#1@symbol\endcsname{\@glo@symbol}% % \end{macrocode} % Define an associated boolean variable to determine whether this % entry has been used yet (needs to be defined globally): % \begin{macrocode} \expandafter\gdef\csname glo@#1@flagfalse\endcsname{% \expandafter\global\expandafter \let\csname ifglo@#1@flag\endcsname\iffalse} \expandafter\gdef\csname glo@#1@flagtrue\endcsname{% \expandafter\global\expandafter \let\csname ifglo@#1@flag\endcsname\iftrue} \csname glo@#1@flagfalse\endcsname }} % \end{macrocode} % Only defined new glossary entries in the preamble: % \begin{macrocode} \@onlypreamble{\newglossaryentry} % \end{macrocode} % %\subsection{Resetting and unsetting entry flags} % Each glossary entry is assigned a conditional of the form %\cmdname{ifglo@}\meta{label}\texttt{@flag} which determines % whether or not the entry has been used (see also % \icmdname{ifglsused} defined below.) These flags can % be set and unset using the following macros: % %\DescribeMacro{\glsreset} % The command \cmdname{glsreset}\marg{label} can be used % to set the entry flag to indicate that it hasn't been used yet. The % required argument is the entry label. % \begin{macrocode} \newcommand*{\glsreset}[1]{% \glsdoifexists{#1}{% \expandafter\global\csname glo@#1@flagfalse\endcsname}} % \end{macrocode} %\DescribeMacro{\glslocalreset} % As above, but with only a local effect: % \begin{macrocode} \newcommand*{\glslocalreset}[1]{% \glsdoifexists{#1}{% \expandafter\let\csname ifglo@#1@flag\endcsname\iffalse}} % \end{macrocode} %\DescribeMacro{\glsunset} % The command \cmdname{glsunset}\marg{label} can be used to % set the entry flag to indicate that it has been used. The required % argument is the entry label. % \begin{macrocode} \newcommand*{\glsunset}[1]{% \glsdoifexists{#1}{% \expandafter\global\csname glo@#1@flagtrue\endcsname}} % \end{macrocode} %\DescribeMacro{\glslocalunset} % As above, but with only a local effect: % \begin{macrocode} \newcommand*{\glslocalunset}[1]{% \glsdoifexists{#1}{% \expandafter\let\csname ifglo@#1@flag\endcsname\iftrue}} % \end{macrocode} %\DescribeMacro{\glsresetall} % Reset all entries for the named glossaries (supplied in a % comma-separated list). % Syntax: \cmdname{glsresetall}\oarg{glossary-list} % \begin{macrocode} \newcommand*{\glsresetall}[1][\@glo@types]{% \forallglsentries[#1]{\@glsentry}{% \glsreset{\@glsentry}}} % \end{macrocode} %\DescribeMacro{\glslocalresetall} % As above, but with only a local effect: % \begin{macrocode} \newcommand*{\glslocalresetall}[1][\@glo@types]{% \forallglsentries[#1]{\@glsentry}{% \glslocalreset{\@glsentry}}} % \end{macrocode} %\DescribeMacro{\glsunsetall} % Unset all entries for the named glossaries (supplied in a % comma-separated list). % Syntax: \cmdname{glsunsetall}\oarg{glossary-list} % \begin{macrocode} \newcommand*{\glsunsetall}[1][\@glo@types]{% \forallglsentries[#1]{\@glsentry}{% \glsunset{\@glsentry}}} % \end{macrocode} %\DescribeMacro{\glslocalunsetall} % As above, but with only a local effect: % \begin{macrocode} \newcommand*{\glslocalunsetall}[1][\@glo@types]{% \forallglsentries[#1]{\@glsentry}{% \glslocalunset{\@glsentry}}} % \end{macrocode} % % \subsection{Loading files containing glossary entries} %\label{sec:load} % Glossary entries can be defined in an external file. % These external files can contain \icmdname{newglossaryentry} % and \icmdname{newacronym} commands.\footnote{and any other valid %\LaTeX\ code that can be used in the preamble.}\\[10pt] %\DescribeMacro{\loadglsentries} % \cmdname{loadglsentries}\oarg{type}\marg{filename}\\[10pt] % This command will input the file using \cmdname{input}. % The optional argument specifies to which glossary the % entries should be assigned if they haven't used the \gloskey{type} % key. If the optional argument is not specified, the default % glossary is used. Only those entries used in the document (via % \icmdname{glslink}, \icmdname{gls}, \icmdname{glspl} and uppercase % variants or \icmdname{glsadd} and \icmdname{glsaddall} % will appear in the glossary.) The mandatory argument is % the filename (with or without .tex extension.) % \begin{macrocode} \newcommand*{\loadglsentries}[2][\@gls@default]{% \let\@gls@default\glsdefaulttype \def\glsdefaulttype{#1}\input{#2}% \let\glsdefaulttype\@gls@default} % \end{macrocode} % \cmdname{loadglsentries} can only be used in the preamble: % \begin{macrocode} \@onlypreamble{\loadglsentries} % \end{macrocode} % %\subsection{Using glossary entries in the text} % % Any term that has been defined using \icmdname{newglossaryentry} % (or \icmdname{newacronym}) can be displayed in the text % (i.e.\ outside of the glossary) using % one of the commands defined in this section. Unless you use % \icmdname{glslink}, the way the term appears in the text is % determined by \icmdname{glsdisplayfirst} (if it is the first % time the term has been used) or \icmdname{glsdisplay} (for % subsequent use.) % %\DescribeMacro{\glsdisplayfirst} % The first time an entry is used, the way in which it is % displayed is governed by \cmdname{glsdisplayfirst}. This % takes four parameters: \verb|#1| will be the value % of the entry's \gloskey{first} or \gloskey{firstplural} key, % \verb|#2| will be the value of the entry's \gloskey{description} % key, \verb|#3| will be the value of the entry's \gloskey{symbol} % key and \verb|#4| is additional text supplied by the final optional % argument to commands like \icmdname{gls} and \icmdname{glspl}. % The default is to display the first parameter followed by the % additional text. % \begin{macrocode} \newcommand*{\glsdisplayfirst}[4]{#1#4} % \end{macrocode} % %\DescribeMacro{\glsdisplay} % After the first use, the entry is displayed according to % the format of \cmdname{glsdisplay}. Again, it takes four % parameters: \verb|#1| will be the value of the % entry's \gloskey{text} or \gloskey{plural} key, % \verb|#2| will be the value of the entry's \gloskey{description} % key, \verb|#3| will be the value of the entry's \gloskey{symbol} % key and \verb|#4| is additional text supplied by the final optional % argument to commands like \icmdname{gls} and \icmdname{glspl}. % \begin{macrocode} \newcommand*{\glsdisplay}[4]{#1#4} % \end{macrocode} % % When a new glossary is created it uses \cmdname{glsdisplayfirst} % and \cmdname{glsdisplay} as the default way of displaying its % entry in the text. This can be changed for the entries belonging % to an individual glossary using % \icmdname{defglsdisplay} and \icmdname{defglsdisplayfirst}. %\\[10pt] %\DescribeMacro{\defglsdisplay} % \cmdname{defglsdisplay}\oarg{type}\marg{definition}\\[10pt]% % The glossary type is given by \meta{type} (the default glossary % if omitted) and % \meta{definition} should have at most \verb|#1|, \verb|#2|, % \verb|#3| and \verb|#4|. These represent the same arguments % as those described for \icmdname{glsdisplay}. % \begin{macrocode} \newcommand*{\defglsdisplay}[2][\glsdefaulttype]{% \expandafter\def\csname gls@#1@display\endcsname##1##2##3##4{#2}} % \end{macrocode} %\vskip5pt %\DescribeMacro{\defglsdisplayfirst} % \cmdname{defglsdisplayfirst}\oarg{type}\marg{definition}\\[10pt]% % The glossary type is given by \meta{type} (the default glossary % if omitted) and % \meta{definition} should have at most \verb|#1|, \verb|#2|, % \verb|#3| and \verb|#4|. These represent the same arguments % as those described for \icmdname{glsdisplayfirst}. % \begin{macrocode} \newcommand*{\defglsdisplayfirst}[2][\glsdefaulttype]{% \expandafter\def\csname gls@#1@displayfirst\endcsname##1##2##3##4{#2}} % \end{macrocode} % %\subsubsection{Links to glossary entries} % The links to glossary entries all have a first optional % argument that can be used to change the format and counter % of the associated entry number. Except for \cmdname{glslink}, % the commands like \cmdname{gls} have a final optional % argument that can be used to insert additional text in the % link (this will usually be appended, but can be redefined using % \icmdname{defglsdisplay} and \icmdname{defglsdisplayfirst}). % It goes against the \LaTeX\ norm to have an optional % argument after the mandatory arguments, but it makes more % sense to write, say, \verb|\gls{label}['s]| rather than, say, % \verb|\gls[append='s]{label}|. Since these control sequences % are defined to include the final square bracket, spaces % will be ignored after them. This is likely to lead to % confusion as most users would not expect, say, "\gls{"\meta{label}"}" % to ignore following spaces, so \icmdname{xspace} is used. % % The following keys can be used in the first optional % argument. The \gloskey[glslink]{counter} key checks that the % value is the name of a valid counter. % \begin{macrocode} \define@key{glslink}{counter}{% \@ifundefined{c@#1}{\PackageError{glossaries}{There is no counter called `#1'}{The counter key should have the name of a valid counter as its value}}{% \def\@gls@counter{#1}}} % \end{macrocode} % The value of the \gloskey[glslink]{format} key should be the name of a % command (without the initial backslash) that has a single mandatory % argument which can be used to format the associated entry % number. % \begin{macrocode} \define@key{glslink}{format}{% \def\@glsnumberformat{#1}} % \end{macrocode} % The \gloskey[glslink]{hyper} key is a boolean key, it can either have the % value true or false, and indicates whether or not to make a % hyperlink to the relevant glossary entry. If hyper is false, an % entry will still be made in the glossary, but the given text % won't be a hyperlink. % \begin{macrocode} \define@boolkey{glslink}{hyper}[true]{} % \end{macrocode} % %\DescribeMacro{\glslink} %Syntax:\\[10pt] % \cmdname{glslink}\oarg{options}\marg{label}\marg{text} %\\[10pt] % Display \meta{text} in the document, and add the entry information % for \meta{label} into the relevant glossary. The optional % argument should be a key value list using the \texttt{glslink} % keys defined above. % % There is also a starred version:\DescribeMacro{\glslink*}\\[10pt] % \cmdname{glslink*}\oarg{options}\marg{label}\marg{text}\\[10pt] % which is equivalent to % \cmdname{glslink}"[hyper=false,"\meta{options}"]"\marg{label}\marg{text} % % First determine whether or not we are using the starred version: % \begin{macrocode} \newcommand{\glslink}{% \@ifstar\@sgls@link\@gls@link} % \end{macrocode} % Define the starred version: % \begin{macrocode} \newcommand*{\@sgls@link}[1][]{\@gls@link[hyper=false,#1]} % \end{macrocode} % Define the un-starred version: % \begin{macrocode} \newcommand*{\@gls@link}[3][]{% \glsdoifexists{#2}{% \def\@glsnumberformat{glsnumberformat}% \edef\@gls@counter{\csname glo@#2@counter\endcsname}% \KV@glslink@hypertrue \setkeys{glslink}{#1}% \edef\theglsentrycounter{\csname the\@gls@counter\endcsname}% \ifKV@glslink@hyper \@glslink{glo:#2}{#3}% \else #3\relax \fi \protected@edef\@glo@sort{\csname glo@#2@sort\endcsname}% \@gls@checkmkidxchars\@glo@sort \protected@edef\@@glo@name{\csname glo@#2@name\endcsname}% \@gls@checkmkidxchars\@@glo@name \protected@edef\@glo@name{\string\glsnamefont{\@@glo@name}}% \protected@edef\@glo@desc{\csname glo@#2@desc\endcsname}% \@gls@checkmkidxchars\@glo@desc \protected@edef\@glo@symbol{\csname glo@#2@symbol\endcsname}% \@gls@checkmkidxchars\@glo@symbol \@set@glo@numformat\@glo@numfmt\@gls@counter\@glsnumberformat \glossary[\csname glo@#2@type\endcsname]{% \@glo@sort\@gls@actualchar \string\glossaryentryfield{#2}{\@glo@name}{\@glo@desc }{\@glo@symbol}\@gls@encapchar\@glo@numfmt}% }} % \end{macrocode} %\changes{1.01}{2007 May 17}{Added range facility in format key}% % Set the formatting information in the format required by % \appname{makeindex}: % \begin{macrocode} \def\@set@glo@numformat#1#2#3{% \expandafter\@glo@check@mkidxrangechar#3\@nil \protected@edef#1{\@glo@prefix setentrycounter{#2}% \expandafter\string\csname\@glo@suffix\endcsname}% \@gls@checkmkidxchars#1} % \end{macrocode} % Check to see if the given string starts with a ( or ). If it % does set \cmdname{@glo@prefix} to the starting character, % and \cmdname{@glo@suffix} to the rest (or "glsnumberformat" % if there is nothing else), % otherwise set \cmdname{@glo@prefix} to nothing and % \cmdname{@glo@suffix} to all of it. % \begin{macrocode} \def\@glo@check@mkidxrangechar#1#2\@nil{% \if#1(\relax \def\@glo@prefix{(}% \if\relax#2\relax \def\@glo@suffix{glsnumberformat}% \else \def\@glo@suffix{#2}% \fi \else \if#1)\relax \def\@glo@prefix{)}% \if\relax#2\relax \def\@glo@suffix{glsnumberformat}% \else \def\@glo@suffix{#2}% \fi \else \def\@glo@prefix{}\def\@glo@suffix{#1#2}% \fi \fi} % \end{macrocode} % Catch \appname{makeindex} special characters\mkidxspch: % \begin{macrocode} \newcommand{\@gls@checkmkidxchars}[1]{% \def\@gls@checkedmkidx{}% \expandafter\@gls@checkquote#1\@nil""\null% \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}% \def\@gls@checkedmkidx{}% \expandafter\@gls@checkescquote#1\@nil\"\"\null% \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}% \def\@gls@checkedmkidx{}% \expandafter\@gls@checkescactual#1\@nil\?\?\null% \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}% \def\@gls@checkedmkidx{}% \expandafter\@gls@checkactual#1\@nil??\null% \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}% \def\@gls@checkedmkidx{}% \expandafter\@gls@checkbar#1\@nil||\null% \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}% \def\@gls@checkedmkidx{}% \expandafter\@gls@checkescbar#1\@nil\|\|\null% \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}% \def\@gls@checkedmkidx{}% \expandafter\@gls@checklevel#1\@nil!!\null% \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}% } % \end{macrocode} % Update the control sequence and strip trailing \cmdname{@nil}: % \begin{macrocode} \def\@gls@updatechecked#1\@nil#2{\def#2{#1}} % \end{macrocode} % Replace \verb|"| with \verb|""| since \verb|"| is a makeindex % special character\mkidxspch. % \begin{macrocode} \toksdef\@gls@tmpb=2 \def\@gls@checkquote#1"#2"#3\null{% \@gls@tmpb=\expandafter{\@gls@checkedmkidx}% \toks@={#1}% \ifx\null#2\null% \ifx\null#3\null \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}% \def\@@gls@checkquote{\relax}% \else \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ \@gls@quotechar\@gls@quotechar\@gls@quotechar\@gls@quotechar}% \def\@@gls@checkquote{\@gls@checkquote#3\null}% \fi \else \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ \@gls@quotechar\@gls@quotechar}% \ifx\null#3\null \def\@@gls@checkquote{\@gls@checkquote#2""\null}% \else \def\@@gls@checkquote{\@gls@checkquote#2"#3\null}% \fi \fi \@@gls@checkquote} % \end{macrocode} % Do the same for \verb|\"|: % \begin{macrocode} \def\@gls@checkescquote#1\"#2\"#3\null{% \@gls@tmpb=\expandafter{\@gls@checkedmkidx}% \toks@={#1}% \ifx\null#2\null% \ifx\null#3\null \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}% \def\@@gls@checkescquote{\relax}% \else \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ \@gls@quotechar\string\"\@gls@quotechar \@gls@quotechar\string\"\@gls@quotechar}% \def\@@gls@checkescquote{\@gls@checkescquote#3\null}% \fi \else \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ \@gls@quotechar\string\"\@gls@quotechar}% \ifx\null#3\null \def\@@gls@checkescquote{\@gls@checkescquote#2\"\"\null}% \else \def\@@gls@checkescquote{\@gls@checkescquote#2\"#3\null}% \fi \fi \@@gls@checkescquote} % \end{macrocode} % Similarly for \verb|\?| (which is replaces @ as % \appname{makeindex}'s special character): % \begin{macrocode} \def\@gls@checkescactual#1\?#2\?#3\null{% \@gls@tmpb=\expandafter{\@gls@checkedmkidx}% \toks@={#1}% \ifx\null#2\null% \ifx\null#3\null \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}% \def\@@gls@checkescactual{\relax}% \else \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ \@gls@quotechar\string\"\@gls@actualchar \@gls@quotechar\string\"\@gls@actualchar}% \def\@@gls@checkescactual{\@gls@checkescactual#3\null}% \fi \else \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ \@gls@quotechar\string\"\@gls@actualchar}% \ifx\null#3\null \def\@@gls@checkescactual{\@gls@checkescactual#2\?\?\null}% \else \def\@@gls@checkescactual{\@gls@checkescactual#2\?#3\null}% \fi \fi \@@gls@checkescactual} % \end{macrocode} % Similarly for \verb"\|": % \begin{macrocode} \def\@gls@checkescbar#1\|#2\|#3\null{% \@gls@tmpb=\expandafter{\@gls@checkedmkidx}% \toks@={#1}% \ifx\null#2\null% \ifx\null#3\null \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}% \def\@@gls@checkescbar{\relax}% \else \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ \@gls@quotechar\string\"\@gls@encapchar \@gls@quotechar\string\"\@gls@encapchar}% \def\@@gls@checkescbar{\@gls@checkescbar#3\null}% \fi \else \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ \@gls@quotechar\string\"\@gls@encapchar}% \ifx\null#3\null \def\@@gls@checkescbar{\@gls@checkescbar#2\|\|\null}% \else \def\@@gls@checkescbar{\@gls@checkescbar#2\|#3\null}% \fi \fi \@@gls@checkescbar} % \end{macrocode} % Similarly for \verb"\!": % \begin{macrocode} \def\@gls@checkesclevel#1\!#2\!#3\null{% \@gls@tmpb=\expandafter{\@gls@checkedmkidx}% \toks@={#1}% \ifx\null#2\null% \ifx\null#3\null \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}% \def\@@gls@checkesclevel{\relax}% \else \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ \@gls@quotechar\string\"\@gls@levelchar \@gls@quotechar\string\"\@gls@levelchar}% \def\@@gls@checkesclevel{\@gls@checkesclevel#3\null}% \fi \else \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ \@gls@quotechar\string\"\@gls@levelchar}% \ifx\null#3\null \def\@@gls@checkesclevel{\@gls@checkesclevel#2\!\!\null}% \else \def\@@gls@checkesclevel{\@gls@checkesclevel#2\!#3\null}% \fi \fi \@@gls@checkesclevel} % \end{macrocode} % and for \verb"|": % \begin{macrocode} \def\@gls@checkbar#1|#2|#3\null{% \@gls@tmpb=\expandafter{\@gls@checkedmkidx}% \toks@={#1}% \ifx\null#2\null% \ifx\null#3\null \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}% \def\@@gls@checkbar{\relax}% \else \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ \@gls@quotechar\@gls@encapchar\@gls@quotechar\@gls@encapchar}% \def\@@gls@checkbar{\@gls@checkbar#3\null}% \fi \else \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ \@gls@quotechar\@gls@encapchar}% \ifx\null#3\null \def\@@gls@checkbar{\@gls@checkbar#2||\null}% \else \def\@@gls@checkbar{\@gls@checkbar#2|#3\null}% \fi \fi \@@gls@checkbar} % \end{macrocode} % and for \verb"!": % \begin{macrocode} \def\@gls@checklevel#1!#2!#3\null{% \@gls@tmpb=\expandafter{\@gls@checkedmkidx}% \toks@={#1}% \ifx\null#2\null% \ifx\null#3\null \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}% \def\@@gls@checklevel{\relax}% \else \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ \@gls@quotechar\@gls@levelchar\@gls@quotechar\@gls@levelchar}% \def\@@gls@checklevel{\@gls@checklevel#3\null}% \fi \else \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ \@gls@quotechar\@gls@levelchar}% \ifx\null#3\null \def\@@gls@checklevel{\@gls@checklevel#2!!\null}% \else \def\@@gls@checklevel{\@gls@checklevel#2!#3\null}% \fi \fi \@@gls@checklevel} % \end{macrocode} % and for \verb"?": % \begin{macrocode} \def\@gls@checkactual#1?#2?#3\null{% \@gls@tmpb=\expandafter{\@gls@checkedmkidx}% \toks@={#1}% \ifx\null#2\null% \ifx\null#3\null \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}% \def\@@gls@checkactual{\relax}% \else \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ \@gls@quotechar\@gls@actualchar\@gls@quotechar\@gls@actualchar}% \def\@@gls@checkactual{\@gls@checkactual#3\null}% \fi \else \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ \@gls@quotechar\@gls@actualchar}% \ifx\null#3\null \def\@@gls@checkactual{\@gls@checkactual#2??\null}% \else \def\@@gls@checkactual{\@gls@checkactual#2?#3\null}% \fi \fi \@@gls@checkactual} % \end{macrocode} % %\DescribeMacro{\@glslink}\DescribeMacro{\@glstarget} % If \icmdname{hyperlink} % is not defined, \cmdname{@glslink} and \cmdname{@glstarget} % ignore their first argument, and just do the second argument, % otherwise they are equivalent to \icmdname{hyperlink} and %\icmdname{hypertarget}. % \begin{macrocode} \@ifundefined{hyperlink}{% \gdef\@glslink#1#2{#2}\gdef\@glstarget#1#2{#2}% }{\gdef\@glslink#1#2{\hyperlink{#1}{#2}}% \gdef\@glstarget#1#2{\hypertarget{#1}{#2}}} % \end{macrocode} % %\DescribeMacro{\glsdisablehyper} % Glossary hyperlinks can be disabled using \cmdname{glsdisablehyper} % (effect can be localised): % \begin{macrocode} \newcommand{\glsdisablehyper}{% \renewcommand*\@glslink[2]{##2}% \renewcommand*\@glstarget[2]{##2}} % \end{macrocode} %\DescribeMacro{\glsenablehyper} % Glossary hyperlinks can be enabled using \cmdname{glsenablehyper} % (effect can be localised): % \begin{macrocode} \newcommand{\glsenablehyper}{% \renewcommand*\@glslink[2]{\hyperlink{##1}{##2}}% \renewcommand*\@glstarget[2]{\hypertarget{##1}{##2}}} % \end{macrocode} % %\DescribeMacro{\gls} %Syntax:\\[10pt] % \cmdname{gls}\oarg{options}\marg{label}\oarg{insert text}\\[10pt] % Link to glossary entry using singular form. The link text % is taken from the value of the \gloskey{text} or \gloskey{first} % keys used when the entry was defined. % % The first optional argument is a key-value list, the same as % \icmdname{glslink}\igloskey[glslink]{hyper}\igloskey[glslink]{format}\igloskey[glslink]{counter}, % the mandatory argument is the entry label. % After the mandatory argument, there is another optional argument % to insert extra text in the link text (the location of the inserted % text is governed by \icmdname{glsdisplay} and % \icmdname{glsdisplayfirst}). As with \cmdname{glslink} % there is a starred version which is the same as the unstarred % version but with the \gloskey[glslink]{hyper} key set to \texttt{false}. % (Additional options can also be specified % in the first optional argument.) % % First determine if we are using the starred form: % \begin{macrocode} \newcommand*{\gls}{\@ifstar\@sgls\@gls} % \end{macrocode} % Define the starred form: % \begin{macrocode} \newcommand*{\@sgls}[1][]{\@gls[hyper=false,#1]} % \end{macrocode} % Defined the un-starred form. Need to determine if there is % a final optional argument % \begin{macrocode} \newcommand*{\@gls}[2][]{% \@ifnextchar[{\@gls@{#1}{#2}}{\@gls@{#1}{#2}[]}} % \end{macrocode} % Read in the final optional argument: % \begin{macrocode} \def\@gls@#1#2[#3]{% \glsdoifexists{#2}{\edef\@glo@type{\glsentrytype{#2}}% % \end{macrocode} % Determine what the link text should be (this is stored in % \cmdname{@glo@text}) % \begin{macrocode} \ifglsused{#2}{\protected@edef\@glo@text{% \csname gls@\@glo@type @display\endcsname {\glsentrytext{#2}}{\glsentrydesc{#2}}{\glsentrysymbol{#2}}{#3}}}{% \protected@edef\@glo@text{% \csname gls@\@glo@type @displayfirst\endcsname {\glsentryfirst{#2}}{\glsentrydesc{#2}}{\glsentrysymbol{#2}}{#3}}}% % \end{macrocode} % Call \cmdname{@gls@link} % \begin{macrocode} \@gls@link[#1]{#2}{\@glo@text}% % \end{macrocode} % Indicate that this entry has now been used, and add a space if % appropriate % \begin{macrocode} \glsunset{#2}}% \xspace} % \end{macrocode} % %\DescribeMacro{\Gls} % \cmdname{Gls} behaves like \cmdname{gls}, but the first letter % of the link text is converted to uppercase (note that if the % first letter has an accent, the accented letter will need to % be grouped when you define the entry.) It is mainly intended % for terms that start a sentence: % \begin{macrocode} \newcommand*{\Gls}{\@ifstar\@sGls\@Gls} % \end{macrocode} % Define the starred form: % \begin{macrocode} \newcommand*{\@sGls}[1][]{\@Gls[hyper=false,#1]} % \end{macrocode} % Defined the un-starred form. Need to determine if there is % a final optional argument % \begin{macrocode} \newcommand*{\@Gls}[2][]{% \@ifnextchar[{\@Gls@{#1}{#2}}{\@Gls@{#1}{#2}[]}} % \end{macrocode} % Read in the final optional argument: % \begin{macrocode} \def\@Gls@#1#2[#3]{% \glsdoifexists{#2}{\edef\@glo@type{\glsentrytype{#2}}% % \end{macrocode} % Determine what the link text should be (this is stored in % \cmdname{@glo@text}) % \begin{macrocode} \ifglsused{#2}{\protected@edef\@glo@text{% \csname gls@\@glo@type @display\endcsname {\glsentrytext{#2}}{\glsentrydesc{#2}}{\glsentrysymbol{#2}}{#3}}}{% \protected@edef\@glo@text{% \csname gls@\@glo@type @displayfirst\endcsname {\glsentryfirst{#2}}{\glsentrydesc{#2}}{\glsentrysymbol{#2}}{#3}}}% % \end{macrocode} % Call \cmdname{@gls@link} % \begin{macrocode} \@gls@link[#1]{#2}{\expandafter\MakeUppercase\@glo@text}% % \end{macrocode} % Indicate that this entry has now been used, and add a space if % appropriate % \begin{macrocode} \glsunset{#2}}% \xspace} % \end{macrocode} % %\DescribeMacro{\GLS} % \cmdname{GLS} behaves like \icmdname{gls}, but the link % text is converted to uppercase: % \begin{macrocode} \newcommand*{\GLS}{\@ifstar\@sGLS\@GLS} % \end{macrocode} % Define the starred form: % \begin{macrocode} \newcommand*{\@sGLS}[1][]{\@GLS[hyper=false,#1]} % \end{macrocode} % Defined the un-starred form. Need to determine if there is % a final optional argument % \begin{macrocode} \newcommand*{\@GLS}[2][]{% \@ifnextchar[{\@GLS@{#1}{#2}}{\@GLS@{#1}{#2}[]}} % \end{macrocode} % Read in the final optional argument: % \begin{macrocode} \def\@GLS@#1#2[#3]{% \glsdoifexists{#2}{\edef\@glo@type{\glsentrytype{#2}}% % \end{macrocode} % Determine what the link text should be (this is stored in % \cmdname{@glo@text}) % \begin{macrocode} \ifglsused{#2}{\protected@edef\@glo@text{% \csname gls@\@glo@type @display\endcsname {\glsentrytext{#2}}{\glsentrydesc{#2}}{\glsentrysymbol{#2}}{#3}}}{% \protected@edef\@glo@text{% \csname gls@\@glo@type @displayfirst\endcsname {\glsentryfirst{#2}}{\glsentrydesc{#2}}{\glsentrysymbol{#2}}{#3}}}% % \end{macrocode} % Call \cmdname{@gls@link} % \begin{macrocode} \@gls@link[#1]{#2}{\MakeUppercase{\@glo@text}}% % \end{macrocode} % Indicate that this entry has now been used, and add a space if % appropriate % \begin{macrocode} \glsunset{#2}}% \xspace} % \end{macrocode} % %\DescribeMacro{\glspl} % \cmdname{glspl} behaves in the same way as \icmdname{gls} except % it uses the plural form. % \begin{macrocode} \newcommand*{\glspl}{\@ifstar\@sglspl\@glspl} % \end{macrocode} % Define the starred form: % \begin{macrocode} \newcommand*{\@sglspl}[1][]{\@glspl[hyper=false,#1]} % \end{macrocode} % Defined the un-starred form. Need to determine if there is % a final optional argument % \begin{macrocode} \newcommand*{\@glspl}[2][]{% \@ifnextchar[{\@glspl@{#1}{#2}}{\@glspl@{#1}{#2}[]}} % \end{macrocode} % Read in the final optional argument: % \begin{macrocode} \def\@glspl@#1#2[#3]{% \glsdoifexists{#2}{\edef\@glo@type{\glsentrytype{#2}}% % \end{macrocode} % Determine what the link text should be (this is stored in % \cmdname{@glo@text}) % \begin{macrocode} \ifglsused{#2}{\protected@edef\@glo@text{% \csname gls@\@glo@type @display\endcsname {\glsentryplural{#2}}{\glsentrydesc{#2}}{\glsentrysymbol{#2}}{#3}}}{% \protected@edef\@glo@text{% \csname gls@\@glo@type @displayfirst\endcsname {\glsentryfirstplural{#2}}{\glsentrydesc{#2}}{\glsentrysymbol{#2}}{#3}}}% % \end{macrocode} % Call \cmdname{@gls@link} % \begin{macrocode} \@gls@link[#1]{#2}{\@glo@text}% % \end{macrocode} % Indicate that this entry has now been used, and add a space if % appropriate % \begin{macrocode} \glsunset{#2}}% \xspace} % \end{macrocode} % %\DescribeMacro{\Glspl} % \cmdname{Glspl} behaves in the same way as \icmdname{glspl}, except % that the first letter of the link text is converted to uppercase % (as with \icmdname{Gls}, if the first letter has an accent, it % will need to be grouped.) % \begin{macrocode} \newcommand*{\Glspl}{\@ifstar\@sGlspl\@Glspl} % \end{macrocode} % Define the starred form: % \begin{macrocode} \newcommand*{\@sGlspl}[1][]{\@Glspl[hyper=false,#1]} % \end{macrocode} % Defined the un-starred form. Need to determine if there is % a final optional argument % \begin{macrocode} \newcommand*{\@Glspl}[2][]{% \@ifnextchar[{\@Glspl@{#1}{#2}}{\@Glspl@{#1}{#2}[]}} % \end{macrocode} % Read in the final optional argument: % \begin{macrocode} \def\@Glspl@#1#2[#3]{% \glsdoifexists{#2}{\edef\@glo@type{\glsentrytype{#2}}% % \end{macrocode} % Determine what the link text should be (this is stored in % \cmdname{@glo@text}) % \begin{macrocode} \ifglsused{#2}{\protected@edef\@glo@text{% \csname gls@\@glo@type @display\endcsname {\glsentryplural{#2}}{\glsentrydesc{#2}}{\glsentrysymbol{#2}}{#3}}}{% \protected@edef\@glo@text{% \csname gls@\@glo@type @displayfirst\endcsname {\glsentryfirstplural{#2}}{\glsentrydesc{#2}}{\glsentrysymbol{#2}}{#3}}}% % \end{macrocode} % Call \cmdname{@gls@link} % \begin{macrocode} \@gls@link[#1]{#2}{\expandafter\MakeUppercase\@glo@text}% % \end{macrocode} % Indicate that this entry has now been used, and add a space if % appropriate % \begin{macrocode} \glsunset{#2}}% \xspace} % \end{macrocode} % %\DescribeMacro{\GLSpl} % \cmdname{GLSpl} behaves like \icmdname{glspl} except that all the % link text is converted to uppercase. % \begin{macrocode} \newcommand*{\GLSpl}{\@ifstar\@sGLSpl\@GLSpl} % \end{macrocode} % Define the starred form: % \begin{macrocode} \newcommand*{\@sGLSpl}[1][]{\@GLSpl[hyper=false,#1]} % \end{macrocode} % Defined the un-starred form. Need to determine if there is % a final optional argument % \begin{macrocode} \newcommand*{\@GLSpl}[2][]{% \@ifnextchar[{\@GLSpl@{#1}{#2}}{\@GLSpl@{#1}{#2}[]}} % \end{macrocode} % Read in the final optional argument: % \begin{macrocode} \def\@GLSpl@#1#2[#3]{% \glsdoifexists{#2}{\edef\@glo@type{\glsentrytype{#2}}% % \end{macrocode} % Determine what the link text should be (this is stored in % \cmdname{@glo@text}) % \begin{macrocode} \ifglsused{#2}{\protected@edef\@glo@text{% \csname gls@\@glo@type @display\endcsname {\glsentryplural{#2}}{\glsentrydesc{#2}}{\glsentrysymbol{#2}}{#3}}}{% \protected@edef\@glo@text{% \csname gls@\@glo@type @displayfirst\endcsname {\glsentryfirstplural{#2}}{\glsentrydesc{#2}}{\glsentrysymbol{#2}}{#3}}}% % \end{macrocode} % Call \cmdname{@gls@link} % \begin{macrocode} \@gls@link[#1]{#2}{\MakeUppercase{\@glo@text}}% % \end{macrocode} % Indicate that this entry has now been used, and add a space if % appropriate % \begin{macrocode} \glsunset{#2}}% \xspace} % \end{macrocode} % % \subsubsection{Displaying entry details without adding % information to the glossary} % % These commands merely display entry information without adding % entries in the associated file or having hyperlinks. % %\DescribeMacro{\glsentryname}\DescribeMacro{\Glsentryname} % Get the entry name (as specified by the \gloskey{name} key % when the entry was defined.) The argument % is the label associated with the entry. Note that unless you % used \texttt{name=false} in the \pkgopt{sanitize} package option % you may get unexpected results if the \gloskey{name} key contained % any commands. % \begin{macrocode} \newcommand*{\glsentryname}[1]{\csname glo@#1@name\endcsname} \newcommand*{\Glsentryname}[1]{\expandafter \MakeUppercase\csname glo@#1@name\endcsname} % \end{macrocode} % %\DescribeMacro{\glsentrydesc}\DescribeMacro{\Glsentrydesc} % Get the entry description (as specified by the % \gloskey{description} when the entry was defined.) The argument % is the label associated with the entry. Note that unless you % used \texttt{description=false} in the \pkgopt{sanitize} package % option you may get unexpected results if the \gloskey{description} % key contained any commands. % \begin{macrocode} \newcommand*{\glsentrydesc}[1]{\csname glo@#1@desc\endcsname} \newcommand*{\Glsentrydesc}[1]{\expandafter \MakeUppercase\csname glo@#1@desc\endcsname} % \end{macrocode} % %\DescribeMacro{\glsentrytext}\DescribeMacro{\Glsentrytext} % Get the entry text, as specified by the \gloskey{text} key when % the entry was defined. The argument % is the label associated with the entry: % \begin{macrocode} \newcommand*{\glsentrytext}[1]{\csname glo@#1@text\endcsname} \newcommand*{\Glsentrytext}[1]{\expandafter \MakeUppercase\csname glo@#1@text\endcsname} % \end{macrocode} % %\DescribeMacro{\glsentryplural}\DescribeMacro{\Glsentryplural} % Get the plural form: % \begin{macrocode} \newcommand*{\glsentryplural}[1]{\csname glo@#1@plural\endcsname} \newcommand*{\Glsentryplural}[1]{\expandafter \MakeUppercase\csname glo@#1@plural\endcsname} % \end{macrocode} % %\DescribeMacro{\glsentrysymbol}\DescribeMacro{\Glsentrysymbol} % Get the symbol associated with this entry. The argument % is the label associated with the entry. Note that unless you % used \texttt{symbol=false} in the \pkgopt{sanitize} package % option you may get unexpected results if the \gloskey{symbol} % key contained any commands. % \begin{macrocode} \newcommand*{\glsentrysymbol}[1]{\csname glo@#1@symbol\endcsname} \newcommand*{\Glsentrysymbol}[1]{\expandafter \MakeUppercase\csname glo@#1@symbol\endcsname} % \end{macrocode} % %\DescribeMacro{\glsentryfirst}\DescribeMacro{\Glsentryfirst} % Get the entry text to be used when the entry is first used in % the document (as specified by the \gloskey{first} key when % the entry was defined.) % \begin{macrocode} \newcommand*{\glsentryfirst}[1]{\csname glo@#1@first\endcsname} \newcommand*{\Glsentryfirst}[1]{\expandafter \MakeUppercase\csname glo@#1@first\endcsname} % \end{macrocode} % %\DescribeMacro{\glsentryfirstplural}\DescribeMacro{\Glsentryfirstplural} % Get the plural form (as specified by the \gloskey{firstplural} % key when the entry was defined.) % \begin{macrocode} \newcommand*{\glsentryfirstplural}[1]{% \csname glo@#1@firstpl\endcsname} \newcommand*{\Glsentryfirstplural}[1]{% \expandafter\MakeUppercase\csname glo@#1@firstpl\endcsname} % \end{macrocode} % %\DescribeMacro{\glsentrytype} % Display the glossary type with which this entry is associated % (as specified by the \gloskey{type} key used when the entry was % defined) % \begin{macrocode} \newcommand*{\glsentrytype}[1]{\csname glo@#1@type\endcsname} % \end{macrocode} % %\DescribeMacro{\glsentrysort} % Display the sort text used for this entry. Note that the % \gloskey{sort} key is sanitize, so unexpected results may % occur if the \gloskey{sort} key contained commands. % \begin{macrocode} \newcommand*{\glsentrysort}[1]{\csname glo@#1@sort\endcsname} % \end{macrocode} % %\subsection{Adding an entry to the glossary without generating % text} % The following keys are provided for \cmdname{glsadd} and % \cmdname{glsaddall}: % \begin{macrocode} \define@key{glossadd}{counter}{\def\@glo@counter{#1}} \define@key{glossadd}{format}{\def\@glo@format{#1}} % \end{macrocode} % This key is only used by \cmdname{glsaddall}: % \begin{macrocode} \define@key{glossadd}{types}{\def\@glo@type{#1}} % \end{macrocode} %\vskip5pt %\DescribeMacro{\glsadd} %\cmdname{glsadd}\oarg{options}\marg{label}\\[10pt] % Add a term to the glossary without generating any link text. % The optional argument indicates which counter to use, % and how to format it (using a key-value list) % the second argument is the entry label. Note that \meta{options} % only has two keys: \gloskey[glsadd]{counter} and \gloskey[glsadd]{format} (the \gloskey[glsaddall]{types} key will be ignored). % \begin{macrocode} \newcommand*{\glsadd}[2][]{% \glsdoifexists{#2}{% \def\@glo@format{glsnumberformat}% \edef\@glo@counter{\csname glo@#2@counter\endcsname}% \setkeys{glossadd}{#1}% \edef\theglsentrycounter{\csname the\@glo@counter\endcsname}% \protected@edef\@glo@sort{\csname glo@#2@sort\endcsname}% \@gls@checkmkidxchars\@glo@sort \protected@edef\@@glo@name{\csname glo@#2@name\endcsname}% \@gls@checkmkidxchars\@@glo@name \protected@edef\@glo@name{\string\glsnamefont{\@@glo@name}}% \protected@edef\@glo@desc{\csname glo@#2@desc\endcsname}% \@gls@checkmkidxchars\@glo@desc \protected@edef\@glo@symbol{\csname glo@#2@symbol\endcsname}% \@gls@checkmkidxchars\@glo@symbol \@set@glo@numformat\@glo@numfmt\@glo@counter\@glo@format \glossary[\csname glo@#2@type\endcsname]{% \@glo@sort\@gls@actualchar\string\glossaryentryfield {#2}{\@glo@name}{\@glo@desc}{\@glo@symbol}\@gls@encapchar \@glo@numfmt}% }} % \end{macrocode} %\vskip5pt %\DescribeMacro{\glsaddall} %\cmdname{glsaddall}\oarg{glossary list}\\[10pt] % Add all terms defined for the listed glossaries (without displaying % any text.) If \gloskey[glsaddall]{types} key is omitted, apply to all % glossary types. % \begin{macrocode} \newcommand*{\glsaddall}[1][]{% \def\@glo@type{\@glo@types}% \setkeys{glossadd}{#1}% \forallglsentries[\@glo@type]{\@glo@entry}{% \glsadd[#1]{\@glo@entry}}% } % \end{macrocode} % %\subsection{Creating associated files} %\DescribeMacro{\writeist} % The \cmdname{writeist} command creates the associated % customized \filetype{ist} \appname{makeindex} style file. % While defining this command, some characters have their % catcodes temporarily changed to ensure they get written to % the \filetype{ist} file correctly. The \appname{makeindex} % actual character (usually "@") is redefined to be a "?", to allow % internal commands to be written to the glossary file output file. % % The special characters\mkidxspch\ are stored in \cmdname{@gls@actualchar}, % \cmdname{@gls@encapchar}, \cmdname{@glsl@levelchar} and % \cmdname{@gls@quotechar} to make them easier to use later, % but don't change these values, because the characters are % encoded in the command definitions that are used to escape % the special characters (which means that the user no longer % needs to worry about \appname{makeindex} special characters.) % % The symbols and numbers label for group headings are hardwired into % the \filetype{ist} file as \texttt{glssymbols} and % \texttt{glsnumbers}, the group titles can be translated % (so that \icmdname{glssymbolsgroupname} replaces \texttt{glssymbols} % and \icmdname{glsnumbersgroupname} replaces \texttt{glsnumbers}) % using the command \icmdname{glsgetgrouptitle} which is % defined in \styname{glossary-hypernav}. This is done to prevent % any problem characters in \icmdname{glssymbolsgroupname} % and \icmdname{glsnumbersgroupname} from breaking hyperlinks. % % Some of these lines are too long to fit on the page, but as I % have temporarily disabled the comment character, I can't split % the lines. If you want to see the code in full, have a look at % \texttt{glossaries.sty}. %\changes{1.01}{2007 May 17}{Added spaces after 'delimN and 'delimR in ist file}% % \begin{macrocode} \newwrite\istfile \bgroup \catcode`\%12\relax \catcode`\"12\relax \catcode`\|12\relax \catcode`\!12\relax \catcode`\?12\relax \gdef\@gls@actualchar{?} \gdef\@gls@encapchar{|} \gdef\@gls@levelchar{!} \gdef\@gls@quotechar{"} \gdef\writeist{\relax \protected@write\@auxout{}{\string\@istfilename{\istfilename}} \openout\istfile=\istfilename \write\istfile{% makeindex style file created by the glossaries package} \write\istfile{% for document '\jobname' on \the\year-\the\month-\the\day} \write\istfile{actual '\@gls@actualchar'} \write\istfile{encap '\@gls@encapchar'} \write\istfile{level '\@gls@levelchar'} \write\istfile{quote '\@gls@quotechar'} \write\istfile{keyword "\string\\glossaryentry"} \write\istfile{preamble "\string\\glossarysection[\string\\glossarytoctitle]{\string\\glossarytitle}\string\\glossarypreamble\string\n\string\\begin{theglossary}\string\\glossaryheader\string\n"} \write\istfile{postamble "\string\n\string\\end{theglossary}\string\n\string\\glossarypostamble\string\n"} \write\istfile{group_skip "\string\\glsgroupskip\string\n"} \write\istfile{item_0 "\string\n"} \write\istfile{delim_0 "\{\string\\glossaryentrynumbers\{\string\\relax "} \write\istfile{delim_t "\}\}"} \write\istfile{delim_n "\string\\delimN "} \write\istfile{delim_r "\string\\delimR "} \write\istfile{headings_flag 1} \write\istfile{heading_prefix "\string\\glsgroupheading\{"} \write\istfile{heading_suffix "\}"} \write\istfile{symhead_positive "glssymbols"} \write\istfile{numhead_positive "glsnumbers"} \write\istfile{page_compositor "\glscompositor"} \noist} \egroup % \end{macrocode} % %\DescribeMacro{\noist} %The command \cmdname{noist} will suppress the creation of % the \filetype{ist} file (it simply redefines % \cmdname{writeist} to do nothing.) Obviously you need to use this % command before \cmdname{writeist} to have any effect. Since % the \filetype{ist} file should only be created once, \cmdname{noist} % is called at the end of \cmdname{writeist}. % \begin{macrocode} \newcommand{\noist}{\let\writeist\relax} % \end{macrocode} % %\DescribeMacro{\@makeglossary} % \cmdname{@makeglossary} is an internal command that takes an % argument indicating the glossary type. This command will % create the glossary file required by \appname{makeindex} for the % given glossary type, using the extension supplied by the % \meta{out-ext} parameter used in \icmdname{newglossary} % (and it will also activate the \icmdname{glossary} command, % and create the customized \filetype{ist} \appname{makeindex} % style file.) % % Note that you can't use \cmdname{@makeglossary} for only some of the % defined glossaries. You either need to have a \cmdname{makeglossary} % for all glossaries or none (otherwise you will end up with a % situation where \TeX\ is trying to write to a non-existant % file.) The relevant glossary must be % defined prior to using \cmdname{@makeglossary}. % \begin{macrocode} \newcommand*{\@makeglossary}[1]{% \ifglossaryexists{#1}{% \edef\glo@out{\csname @glotype@#1@out\endcsname}% \expandafter\newwrite\csname glo@#1@file\endcsname \edef\@glo@file{\csname glo@#1@file\endcsname}% \immediate\openout\@glo@file=\jobname.\glo@out \@gls@renewglossary \PackageInfo{glossaries}{Writing glossary file \jobname.\glo@out} \writeist }{\PackageError{glossaries}{% Glossary type `#1' not defined}{New glossaries must be defined before using \string\makeglossary}}} % \end{macrocode} % %\DescribeMacro{\makeglossaries} % \cmdname{makeglossaries} will use \cmdname{@makeglossary} % for each glossary type that has been defined. New glossaries % need to be defined before using \cmdname{makeglossary}, so % have \cmdname{makeglossaries} redefine \cmdname{newglossary} % to prevent it being used afterwards. % \begin{macrocode} \newcommand*{\makeglossaries}{% \@for\@glo@type:=\@glo@types\do{% \ifthenelse{\equal{\@glo@type}{}}{}{% \@makeglossary{\@glo@type}}}% \renewcommand*\newglossary[4][]{% \PackageError{glossaries}{New glossaries must be created before \string\makeglossaries}{You need to move \string\makeglossaries\space after all your \string\newglossary\space commands}}% \let\@makeglossary\empty \let\makeglossary\empty} % \end{macrocode} % %\DescribeMacro{\makeglossary} % The \cmdname{makeglossary} command is redefined to be % identical to \cmdname{makeglossaries}. (This is done to % reinforce the message that you must either use % \cmdname{@makeglossary} for all the glossaries or for none % of them.) % \begin{macrocode} \let\makeglossary\makeglossaries % \end{macrocode} % %\subsection{Writing information to associated files} %\DescribeMacro{\glossary} % The \cmdname{glossary} command is redefined so that it takes an % optional argument \meta{type} to specify the glossary type (use % \cmdname{glsdefaulttype} glossary by default). % This shouldn't be used at user level % as \cmdname{glslink} sets the correct format. The associated % number should be stored in \cmdname{theglsentrycounter} % before using \cmdname{glossary}. % \begin{macrocode} \renewcommand*{\glossary}[1][\glsdefaulttype]{% \@glossary[#1]} % \end{macrocode} % %\DescribeMacro{\@glossary} % Define internal \cmdname{@glossary} to ignore its argument. % This gets redefined in \cmdname{@makeglossary}. % \begin{macrocode} \def\@glossary[#1]{\@bsphack\begingroup\@sanitize\@index} % \end{macrocode} %\DescribeMacro{@gls@renewglossary} % This is a convenience command to set \cmdname{@glossary}. % It is used by \cmdname{@makeglossary} and then redefined to % do nothing, as it only needs to be done once. % \begin{macrocode} \newcommand{\@gls@renewglossary}{% \gdef\@glossary[##1]{\@bsphack\begingroup\@wrglossary{##1}}% \let\@gls@renewglossary\@empty } % \end{macrocode} %\DescribeMacro{\@wrglossary} % The \cmdname{@wrglossary} command is redefined to have % two arguments. The first argument is the glossary type, % the second argument is the glossary entry % (the format of which is set in \cmdname{glslink}.) % \begin{macrocode} \renewcommand*{\@wrglossary}[2]{% \expandafter\protected@write\csname glo@#1@file\endcsname{}{% \string\glossaryentry{#2}{\theglsentrycounter}}\endgroup\@esphack} % \end{macrocode} % % \subsection{Displaying the glossary}\label{sec:printglos} %\DescribeMacro{\printglossary} % An individual glossary is displayed in the text using % \cmdname{printglossary}\oarg{key-val list}. If the % \gloskey[printglossary]{type} key is omitted, the default glossary is displayed. % The optional argument can be used to specify an alternative % glossary, and can also be used to set the style, title and % entry in the table of contents. Available keys are defined below. % \begin{macrocode} \newcommand*{\printglossary}[1][type=\glsdefaulttype]{% \def\@glo@type{\glsdefaulttype}% \def\glossarytitle{\csname @glotype@\@glo@type @title\endcsname}% \def\glossarytoctitle{\glossarytitle}% \def\@glossarystyle{}% \setkeys{printgloss}{#1}% \bgroup \@glossarystyle \makeatletter \@input@{\jobname.\csname @glotype@\@glo@type @in\endcsname}% \egroup } % \end{macrocode} % %\DescribeMacro{\printglossaries} % This command will do \cmdname{printglossary} % for each glossary type that has been defined. It is better % to use \cmdname{printglossaries} rather than individual % \cmdname{printglossary} commands to ensure that you don't forget % any new glossaries you may have created. It also makes it easier to % chop and change the value of the \pkgopt{acronym} package option. % However, if you want to list the glossaries in a different order, % or if you want to set the title or table of contents entry, or % if you want to use different glossary styles for each glossary, you % will need to use \cmdname{printglossary} explicitly for each % glossary type. % \begin{macrocode} \newcommand*{\printglossaries}{% \forallglossaries{\@@glo@type}{\printglossary[type=\@@glo@type]}} % \end{macrocode} % The keys that can be used in the optional argument to % \icmdname{printglossary} are as follows: % The \gloskey[printglossary]{type} key sets the glossary type. % \begin{macrocode} \define@key{printgloss}{type}{\def\@glo@type{#1}} % \end{macrocode} % The \gloskey[printglossary]{title} key sets the title used in the glossary section % header. This overrides the title used in \icmdname{newglossary}. % \begin{macrocode} \define@key{printgloss}{title}{\def\glossarytitle{#1}} % \end{macrocode} % The \gloskey[printglossary]{toctitle} sets the text used for the relevant entry % in the table of contents. % \begin{macrocode} \define@key{printgloss}{toctitle}{\def\glossarytoctitle{#1}} % \end{macrocode} % The \gloskey[printglossary]{style} key sets the glossary style (but only for % the given glossary.) % \begin{macrocode} \define@key{printgloss}{style}{% \@ifundefined{@glsstyle@#1}{\PackageError{glossaries}{Glossary style `#1' undefined}{}}{% \def\@glossarystyle{\csname @glsstyle@#1\endcsname}}} % \end{macrocode} % %\DescribeEnv{theglossary} % If the \envname{theglossary} environment has % already been defined, a warning will be issued. % This environment should be redefined by glossary styles. % \begin{macrocode} \@ifundefined{theglossary}{% \newenvironment{theglossary}{}{}}{% \PackageWarning{glossaries}{overriding `theglossary' environment}% \renewenvironment{theglossary}{}{}} % \end{macrocode} % %\DescribeMacro{\glossaryheader} % The glossary header is given by \cmdname{glossaryheader}. % This forms part of the glossary style, and % must indicate what should appear immediately after the start of the % \envname{theglossary} environment. (For example, if the glossary % uses a tabular-like environment, it may be used to set the % header row.) Note that if you don't want a header row, the glossary % style must redefine \cmdname{glossaryheader} to do nothing. % \begin{macrocode} \newcommand*{\glossaryheader}{} % \end{macrocode} %\vskip5pt %\DescribeMacro{\glossaryentryfield} % \cmdname{glossaryentryfield}\marg{label}\marg{name}\marg{description}\marg{symbol}\marg{page-list}\\[10pt] % This command governs how each entry row should be formatted % in the glossary. Glossary styles need to redefine this command. % Most of the predefined styles ignore \meta{symbol}. % \begin{macrocode} \newcommand*{\glossaryentryfield}[5]{% \@glstarget{glo:#1}{#2} #4 #3. #5\par} % \end{macrocode} % %\DescribeMacro{\glsgroupskip} % Within each glossary, the entries form 28 distinct groups % which are determined by the first character of the \gloskey{sort} % key. There will be a maximum of 28 groups: symbols, numbers, % and the 26 alphabetical groups A, \ldots, Z\@. % The command \cmdname{glsgroupskip} % specifies what to do between glossary groups. Glossary styles % must redefine this command. (Note that \cmdname{glsgroupskip} % only occurs between groups, not at the start or end of the % glossary.) % \begin{macrocode} \newcommand*{\glsgroupskip}{} % \end{macrocode} % %\DescribeMacro{\glsgroupheading} % Each of the 28 glossary groups described above is preceded by a % group heading. % This is formatted by the command \cmdname{glsgroupheading} % which takes one argument which is the \emph{label} assigned to that % group (not the title). The corresponding labels are: \texttt{glssymbols}, % \texttt{glsnumbers}, \texttt{A}, \ldots, \texttt{Z}. % Glossary styles must redefined this command. (In between groups, % \cmdname{glsgroupheading} comes immediately after \cmdname{glsgroupskip}.) % \begin{macrocode} \newcommand*{\glsgroupheading}[1]{} % \end{macrocode} % It is therefore possible to ``trick'' \appname{makeindex} into % treating entries as though they belong to the same group, % even if the terms don't start with the same letter, by % modifying the \gloskey{sort} key. For example, all entries % belonging to one % group could be defined so that the \gloskey{sort} key starts with an % "a", while entries belonging to another group could be defined % so that the \gloskey{sort} key starts with a "b", and so on. If % you want each group to have a heading, you would then need to % modify the translation control sequences \cmdname{glsgetgrouptitle} % and \cmdname{glsgetgrouplabel} so that the label is translated % into the required title (and vice-versa.) %\\[10pt] %\DescribeMacro{\glsgetgrouptitle} %\cmdname{glsgetgrouptitle}\marg{label}\\[10pt] % This command produces the title for the glossary group % whose label is given by \meta{label}. By default, the group % labelled \texttt{glssymbols} produces % \icmdname{glssymbolsgroupname}, the group labelled % \texttt{glsnumbers} produces \icmdname{glsnumbersgroupname} % and all the other groups simply produce their label. % As mentioned above, the group labels are: \texttt{glssymbols}, \texttt{glsnumbers}, % \texttt{A}, \ldots, \texttt{Z}\@. If you want to redefine % the group titles, you will need to redefine this command. % \begin{macrocode} \newcommand*{\glsgetgrouptitle}[1]{% \@ifundefined{#1groupname}{#1}{\csname #1groupname\endcsname}} % \end{macrocode} %\vskip5pt %\DescribeMacro{\glsgetgrouplabel} %\cmdname{glsgetgrouplabel}\marg{title}\\[10pt] %This command does the reverse to the previous command. The % argument is the group title, and it produces the group label. % Note that if you redefine \cmdname{glsgetgrouptitle}, you % will also need to redefine \cmdname{glsgetgrouplabel}. % \begin{macrocode} \newcommand*{\glsgetgrouplabel}[1]{% \ifthenelse{\equals{#1}{\glssymbolsgroupname}}{glssymbols}{% \ifthenelse{\equals{#1}{\glsnumbersgroupname}}{glsnumbers}{#1}}} % \end{macrocode} % %\DescribeMacro{\setentrycounter} % The command \cmdname{setentrycounter} sets the entry's % associated counter (required by % \cmdname{glshypernumber} etc.) \icmdname{glslink} and % \icmdname{glsadd} encode the % \icmdname{glossary} argument so that the relevant counter is % set prior to the formatting command. % \begin{macrocode} \newcommand*{\setentrycounter}[1]{\def\glsentrycounter{#1}} % \end{macrocode} % %\DescribeMacro{\glossarystyle} % The current glossary style can be set using % \cmdname{glossarystyle}\marg{style}. % \begin{macrocode} \newcommand*{\glossarystyle}[1]{% \@ifundefined{@glsstyle@#1}{\PackageError{glossaries}{Glossary style `#1' undefined}{}}{% \csname @glsstyle@#1\endcsname}} % \end{macrocode} % %\DescribeMacro{\newglossarystyle} % New glossary styles can be defined using:\\[10pt] % \cmdname{newglossarystyle}\marg{name}\marg{definition}\\[10pt] % The \meta{definition} argument should redefine % \envname{theglossary}, \icmdname{glossaryheader}, % \icmdname{glsgroupheading}, \icmdname{glossaryentryfield} and % \icmdname{glsgroupskip} (see \autoref{sec:styles} for the % definitions of predefined styles.) Glossary styles should not % redefine \icmdname{glossarypreamble} and % \icmdname{glossarypostamble}, as % the user should be able to switch between styles without affecting % the pre- and postambles. % \begin{macrocode} \newcommand*{\newglossarystyle}[2]{% \@ifundefined{@glsstyle@#1}{% \expandafter\def\csname @glsstyle@#1\endcsname{#2}}{% \PackageError{glossaries}{Glossary style `#1' is already defined}{}}} % \end{macrocode} % %\DescribeMacro{\glsnamefont} % Glossary entries are encoded so that the second argument % to \icmdname{glossaryentryfield} is always specified as % \cmdname{glsnamefont}\marg{name}. This allows the % user to change the font used to display the name term % without having to redefine \icmdname{glossaryentryfield}. % The default uses the surrounding font, so in the list type % styles (which place the name in the optional argument to % \icmdname{item}) the name will appear in bold. % \begin{macrocode} \newcommand*{\glsnamefont}[1]{#1} % \end{macrocode} % %\DescribeMacro{\glshypernumber} % Each glossary entry has an associated number list (usually page % numbers) that indicate where in the document the entry has been % used. The format for these number lists can be changed using the % \gloskey[glslink]{format}\igloskey[glsadd]{format} key in commands like \icmdname{glslink}. % The default format is given by \cmdname{glshypernumber}. This takes % a single argument which may be a single number, a number range % or a number list. The number ranges are delimited with % \icmdname{delimR}, the number lists are delimited with % \icmdname{delimN}. % % If the document doesn't have hyperlinks, the numbers can be % displayed just as they are, but if the document supports % hyperlinks, the numbers should link to the relevant location. % This means extracting the individual numbers from the list or % ranges. The \styname{hyperref} package does this with the % \icmdname{hyperpage} command, but this is encoded for comma and % dash delimiters and only for the page counter, but this code needs % to be more general. So I have adapted the code used in the % \styname{hyperref} package. % \begin{macrocode} \@ifundefined{hyperlink}{% \def\glshypernumber#1{#1}}{% \def\glshypernumber#1{% \@delimR#1\delimR\delimR\\}} % \end{macrocode} %\DescribeMacro{@delimR} % \cmdname{@delimR} displays a range of numbers for the counter % whose name is given by % \cmdname{@gls@counter} (which must be set prior to using % \cmdname{glshypernumber}.) % \begin{macrocode} \def\@delimR#1\delimR #2\delimR #3\\{% \ifx\\#2\\% \@delimN{#1}% \else \@gls@numberlink{#1}\delimR\@gls@numberlink{#2}% \fi} % \end{macrocode} %\DescribeMacro{\@delimN} % \cmdname{@delimN} displays a list of individual numbers, % instead of a range: % \begin{macrocode} \def\@delimN#1{\@@delimN#1\delimN \delimN\\} \def\@@delimN#1\delimN #2\delimN#3\\{% \ifx\\#3\\% \@gls@numberlink{#1}% \else \@gls@numberlink{#1}\delimN\@gls@numberlink{#2}% \fi } % \end{macrocode} % The following code is modified from hyperref's % \cmdname{HyInd@pagelink} where % the name of the counter being used is given by % \cmdname{@gls@counter}. % \begin{macrocode} \def\@gls@numberlink#1{% \begingroup \toks@={}% \@gls@removespaces#1 \@nil \endgroup} % \end{macrocode} % \begin{macrocode} \def\@gls@removespaces#1 #2\@nil{% \toks@=\expandafter{\the\toks@#1}% \ifx\\#2\\% \edef\x{\the\toks@}% \ifx\x\empty \else \hyperlink{\glsentrycounter.\the\toks@}{\the\toks@}% \fi \else \@gls@ReturnAfterFi{% \@gls@removespaces#2\@nil }% \fi } \long\def\@gls@ReturnAfterFi#1\fi{\fi#1} % \end{macrocode} % % The following commands will switch to the % appropriate font, and create a hyperlink, if hyperlinks are % supported. If hyperlinks are not supported, they will just % display their argument in the appropriate font. %\DescribeMacro{\hyperrm} % \begin{macrocode} \newcommand*{\hyperrm}[1]{\textrm{\glshypernumber{#1}}} % \end{macrocode} %\DescribeMacro{\hypersf} % \begin{macrocode} \newcommand*{\hypersf}[1]{\textsf{\glshypernumber{#1}}} % \end{macrocode} %\DescribeMacro{\hypertt} % \begin{macrocode} \newcommand*{\hypertt}[1]{\texttt{\glshypernumber{#1}}} % \end{macrocode} %\DescribeMacro{\hyperbf} % \begin{macrocode} \newcommand*{\hyperbf}[1]{\textbf{\glshypernumber{#1}}} % \end{macrocode} %\DescribeMacro{\hypermd} % \begin{macrocode} \newcommand*{\hypermd}[1]{\textmd{\glshypernumber{#1}}} % \end{macrocode} %\DescribeMacro{\hyperit} % \begin{macrocode} \newcommand*{\hyperit}[1]{\textit{\glshypernumber{#1}}} % \end{macrocode} %\DescribeMacro{\hypersl} % \begin{macrocode} \newcommand*{\hypersl}[1]{\textsl{\glshypernumber{#1}}} % \end{macrocode} %\DescribeMacro{\hyperup} % \begin{macrocode} \newcommand*{\hyperup}[1]{\textup{\glshypernumber{#1}}} % \end{macrocode} %\DescribeMacro{\hypersc} % \begin{macrocode} \newcommand*{\hypersc}[1]{\textsc{\glshypernumber{#1}}} % \end{macrocode} %\DescribeMacro{\hyperemph} % \begin{macrocode} \newcommand*{\hyperemph}[1]{\emph{\glshypernumber{#1}}} % \end{macrocode} % %\subsection{Acronyms}\label{sec:acronym} %If the \pkgopt{acronym} package option is used, a % new glossary called "acronym" is created % \begin{macrocode} \ifglsacronym \newglossary[alg]{acronym}{acr}{acn}{\acronymname} % \end{macrocode} %and \icmdname{acronymtype} is set to the name of this new glossary. % \begin{macrocode} \renewcommand{\acronymtype}{acronym} % \end{macrocode} % In the event that the user redefines \icmdname{glsdisplay} % and \icmdname{glsdisplayfirst}, the relevant commands for % the new acronym glossary are set to match the format % given by \icmdname{newacronym}. If you redefine % \icmdname{newacronym} you may need to set these to something % else. % \begin{macrocode} \defglsdisplay[acronym]{#1#4}\defglsdisplayfirst[acronym]{#1#4} \fi % \end{macrocode} %\vskip5pt %\DescribeMacro{\newacronym} % \cmdname{newacronym}\oarg{key-val list}\marg{label}\marg{abbrev}\marg{long}\\[10pt] % This is a quick way of defining acronyms, all it does % is call \icmdname{newglossaryentry} with the appropriate % values. It sets the % glossary type to \icmdname{acronymtype} which will be % "acronym" if the package option \pkgopt{acronym} has % been used, otherwise it will be the default glossary. % Since \cmdname{newacronym} merely calls \icmdname{newglossaryentry}, % the acronym is treated like any other glossary entry. % % If you prefer a different format, you % can redefine \cmdname{newacronym} as required. The optional % argument can be used to override any of the settings. % \begin{macrocode} \newcommand{\newacronym}[4][]{% \newglossaryentry{#2}{type=\acronymtype, name={#3},description={#4},text={#3}, first={#4 (#3)},plural={#3s},firstplural={#4s (#3s)},#1}} % \end{macrocode} % New acronyms can only be defined in the preamble: % \begin{macrocode} \@onlypreamble{\newacronym} % \end{macrocode} % % \subsection{Predefined Styles}\label{sec:styles} % The \styname{glossaries} bundle comes with some predefined glossary styles which % are defined in the following packages: % \begin{macrocode} \RequirePackage{glossary-hypernav} \RequirePackage{glossary-list} \RequirePackage{glossary-long} \RequirePackage{glossary-super} % \end{macrocode} % The default glossary style is set according to the \pkgopt{style} package % option, but can be overridden by \icmdname{glossarystyle}. % \begin{macrocode} \glossarystyle{\@glossary@default@style} % \end{macrocode} %\iffalse % \begin{macrocode} % % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*glossary-hypernav.sty> % \end{macrocode} %\fi % \subsubsection{Glossary hyper-navigation definitions (glossary-hypernav package)} % Package Definition: % \begin{macrocode} \ProvidesPackage{glossary-hypernav}[2007/05/16 v1.0 (NLCT)] % \end{macrocode} % % The commands defined in this package are provided to % help navigate around the groups within a glossary % (see \autoref{sec:printglos}.) % \icmdname{printglossary} (and \icmdname{printglossaries}) % set \cmdname{@glo@type} to the label of the current % glossary. This is used to create a unique hypertarget in % the event of multiple glossaries. %\\[10pt] %\DescribeMacro{\glsnavhyperlink} % \cmdname{glsnavhyperlink}\oarg{type}\marg{label}\marg{text}\\[10pt] % This command makes \meta{text} a hyperlink to the glossary group % whose label is given by \meta{label} for the glossary given % by \meta{type}. % \begin{macrocode} \@ifundefined{hyperlink}{% \newcommand*{\glsnavhyperlink}[3][]{#3}}{% \newcommand*{\glsnavhyperlink}[3][\@glo@type]{% \edef\gls@grplabel{#2}\edef\@gls@grptitle{#3}% \hyperlink{glsn:#1@#2}{#3}}} % \end{macrocode} %\vskip5pt %\DescribeMacro{\glsnavhypertarget} % \cmdname{glsnavhypertarget}\oarg{type}\marg{label}\marg{text}\\[10pt] % This command makes \meta{text} a hypertarget for the glossary group % whose label is given by \meta{label} in the glossary given % by \meta{type}. % \begin{macrocode} \@ifundefined{hypertarget}{% \newcommand*{\glsnavhypertarget}[3][]{#3}}{% \newcommand*{\glsnavhypertarget}[3][\@glo@type]{% \hypertarget{glsn:#1@#2}{#3}}} % \end{macrocode} % %\DescribeMacro{\glsnavigation} % The \cmdname{glsnavigation} command displays a simple glossary % group navigation. % The symbol and number elements are defined separately, % so that they can be suppressed if need be. Note that this % command will produce a link to all 28 groups, but some groups % may not be defined if there are groups that do not contain any % terms, in which case you will get an undefined hyperlink warning. % Now for the whole navigation bit: % \begin{macrocode} \newcommand*{\glsnavigation}{% \glssymbolnav \glsnavhyperlink{A}{\glsgetgrouptitle{A}} \textbar\ \glsnavhyperlink{B}{\glsgetgrouptitle{B}} \textbar\ \glsnavhyperlink{C}{\glsgetgrouptitle{C}} \textbar\ \glsnavhyperlink{D}{\glsgetgrouptitle{D}} \textbar\ \glsnavhyperlink{E}{\glsgetgrouptitle{E}} \textbar\ \glsnavhyperlink{F}{\glsgetgrouptitle{F}} \textbar\ \glsnavhyperlink{G}{\glsgetgrouptitle{G}} \textbar\ \glsnavhyperlink{H}{\glsgetgrouptitle{H}} \textbar\ \glsnavhyperlink{I}{\glsgetgrouptitle{I}} \textbar\ \glsnavhyperlink{J}{\glsgetgrouptitle{J}} \textbar\ \glsnavhyperlink{K}{\glsgetgrouptitle{K}} \textbar\ \glsnavhyperlink{L}{\glsgetgrouptitle{L}} \textbar\ \glsnavhyperlink{M}{\glsgetgrouptitle{M}} \textbar\ \glsnavhyperlink{N}{\glsgetgrouptitle{N}} \textbar\ \glsnavhyperlink{O}{\glsgetgrouptitle{O}} \textbar\ \glsnavhyperlink{P}{\glsgetgrouptitle{P}} \textbar\ \glsnavhyperlink{Q}{\glsgetgrouptitle{Q}} \textbar\ \glsnavhyperlink{R}{\glsgetgrouptitle{R}} \textbar\ \glsnavhyperlink{S}{\glsgetgrouptitle{S}} \textbar\ \glsnavhyperlink{T}{\glsgetgrouptitle{T}} \textbar\ \glsnavhyperlink{U}{\glsgetgrouptitle{U}} \textbar\ \glsnavhyperlink{V}{\glsgetgrouptitle{V}} \textbar\ \glsnavhyperlink{W}{\glsgetgrouptitle{W}} \textbar\ \glsnavhyperlink{X}{\glsgetgrouptitle{X}} \textbar\ \glsnavhyperlink{Y}{\glsgetgrouptitle{Y}} \textbar\ \glsnavhyperlink{Z}{\glsgetgrouptitle{Z}}} % \end{macrocode} %\DescribeMacro{\glssymbolnav} % The \cmdname{glssymbolnav} produces a simple navigation set of % links for just the symbol and number groups. This is used at % the start of \cmdname{glsnavigation}. If your glossary doesn't % contain any symbol or navigation groups, you can redefine this % command to do nothing. % \begin{macrocode} \newcommand*{\glssymbolnav}{% \glsnavhyperlink{glssymbols}{\glsgetgrouptitle{glssymbols}} \textbar\ \glsnavhyperlink{glsnumbers}{\glsgetgrouptitle{glsnumbers}} \textbar\ } % \end{macrocode} %\iffalse % \begin{macrocode} % % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*glossary-list.sty> % \end{macrocode} %\fi % \subsubsection{List Style (glossary-list package)} % The \styname{glossary-list} package defines glossary styles % that use the \envname{description} environment. Note that since % the entry name is placed in the optional argument to the % \icmdname{item} command, it will appear in a bold font by % default. % \begin{macrocode} \ProvidesPackage{glossary-list}[2007/05/16 v1.0 (NLCT)] % \end{macrocode} % The \glostyle{list} glossary style % uses the \envname{description} environment. The group separator % \icmdname{glsgroupskip} is redefined as \cmdname{indexspace} % which produces a gap between groups. The glossary heading % and the group headings do nothing. This is used as the default % style for the \styname{glossaries} package. % \begin{macrocode} \newglossarystyle{list}{% \renewenvironment{theglossary}{\begin{description}}{\end{description}}% \renewcommand*{\glossaryheader}{}% \renewcommand*{\glsgroupheading}[1]{}% \renewcommand*{\glossaryentryfield}[5]{% \item[\@glstarget{glo:##1}{##2}] ##3. ##5}% \renewcommand*{\glsgroupskip}{\indexspace}} % \end{macrocode} % The \glostyle{listgroup} style is like the \glostyle{list} % style, but the glossary groups have headings. % \begin{macrocode} \newglossarystyle{listgroup}{% \glossarystyle{list}% \renewcommand*{\glsgroupheading}[1]{\item[##1]}} % \end{macrocode} % The \glostyle{listhypergroup} style is like the \glostyle{listgroup} % style, but has a set of links to the groups at the % start of the glossary. % \begin{macrocode} \newglossarystyle{listhypergroup}{% \glossarystyle{list}% \renewcommand*{\glossaryheader}{% \item[]\glsnavigation}% \renewcommand*{\glsgroupheading}[1]{% \item[\glsnavhypertarget{##1}{\glsgetgrouptitle{##1}}]}} % \end{macrocode} % The \glostyle{altlist} glossary style is like the \glostyle{list} % style, but places the description on a new line. % \begin{macrocode} \newglossarystyle{altlist}{% \glossarystyle{list}% \renewcommand*{\glossaryentryfield}[5]{% \item[\@glstarget{glo:##1}{##2}]\mbox{}\newline ##3. ##5}% } % \end{macrocode} % The \glostyle{altlistgroup} glossary style is like the % \glostyle{altlist} style, but the glossary groups have headings. % \begin{macrocode} \newglossarystyle{altlistgroup}{% \glossarystyle{altlist}% \renewcommand*{\glsgroupheading}[1]{\item[##1]}} % \end{macrocode} % The \glostyle{altlisthypergroup} glossary style is like the % \glostyle{altlisthypergroup} style, but has a % set of links to the groups at the start of the glossary. % \begin{macrocode} \newglossarystyle{altlisthypergroup}{% \glossarystyle{altlist}% \renewcommand*{\glossaryheader}{% \item[]\glsnavigation}% \renewcommand*{\glsgroupheading}[1]{% \item[\glsnavhypertarget{##1}{\glsgetgrouptitle{##1}}]}} % \end{macrocode} %\iffalse % \begin{macrocode} % % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*glossary-long.sty> % \end{macrocode} %\fi % \subsubsection{Glossary Styles using longtable (the glossary-long % package)} % The glossary styles defined in the \styname{glossary-long} package % used the \envname{longtable} environment in the glossary. % \begin{macrocode} \ProvidesPackage{glossary-long}[2007/05/16 v1.0 (NLCT)] % \end{macrocode} % Requires the \styname{longtable} package: % \begin{macrocode} \RequirePackage{longtable} % \end{macrocode} %\DescribeMacro{\glsdescwidth} % This is a length that governs the width of the description column. % \begin{macrocode} \newlength\glsdescwidth % \end{macrocode} %\DescribeMacro{\glspagelistwidth} % This is a length that governs the width of the page list column. % \begin{macrocode} \newlength\glspagelistwidth % \end{macrocode} % Default values: % \begin{macrocode} \setlength{\glsdescwidth}{0.6\linewidth} \setlength{\glspagelistwidth}{0.1\linewidth} % \end{macrocode} % % The \glostyle{long} glossary style command which % uses the \envname{longtable} environment: % \begin{macrocode} \newglossarystyle{long}{% \renewenvironment{theglossary}{\begin{longtable}{lp{\glsdescwidth}}}{% \end{longtable}}% \renewcommand*{\glossaryheader}{}% \renewcommand*{\glsgroupheading}[1]{}% \renewcommand*{\glossaryentryfield}[5]{% \@glstarget{glo:##1}{##2} & ##3. ##5\\}% \renewcommand*{\glsgroupskip}{ & \\}} % \end{macrocode} % The \glostyle{longborder} style is like the above, but with horizontal and % vertical lines: % \begin{macrocode} \newglossarystyle{longborder}{% \glossarystyle{long}% \renewenvironment{theglossary}{% \begin{longtable}{|l|p{\glsdescwidth}|}}{\end{longtable}}% \renewcommand*{\glossaryheader}{\hline\endhead\hline\endfoot}% } % \end{macrocode} % The \glostyle{longheader} style is like the % \glostyle{long} style but with a header: % \begin{macrocode} \newglossarystyle{longheader}{% \glossarystyle{long}% \renewcommand*{\glossaryheader}{% \bfseries \entryname & \bfseries \descriptionname\\ \endhead}} % \end{macrocode} % The \glostyle{longheaderborder} style is % like the \glostyle{long} style but with a header and border: % \begin{macrocode} \newglossarystyle{longheaderborder}{% \glossarystyle{longborder}% \renewcommand*{\glossaryheader}{% \hline\bfseries \entryname & \bfseries \descriptionname\\\hline \endhead \hline\endfoot}} % \end{macrocode} % The \glostyle{long3col} style is like \glostyle{long} but with 3 columns % \begin{macrocode} \newglossarystyle{long3col}{% \renewenvironment{theglossary}{\begin{longtable}{lp{\glsdescwidth}p{\glspagelistwidth}}}{% \end{longtable}}% \renewcommand*{\glossaryheader}{}% \renewcommand*{\glsgroupheading}[1]{}% \renewcommand*{\glossaryentryfield}[5]{% \@glstarget{glo:##1}{##2} & ##3 & ##5\\}% \renewcommand*{\glsgroupskip}{ & &\\}} % \end{macrocode} % The \glostyle{long3colborder} style is like the % \glostyle{long3col} style but with a border: % \begin{macrocode} \newglossarystyle{long3colborder}{% \glossarystyle{long3col}% \renewenvironment{theglossary}{% \begin{longtable}{|l|p{\glsdescwidth}|p{\glspagelistwidth}|}}{% \end{longtable}}% \renewcommand*{\glossaryheader}{\hline\endhead\hline\endfoot}% } % \end{macrocode} % The \glostyle{long3colheader} style is like \glostyle{long3col} but with a header row: % \begin{macrocode} \newglossarystyle{long3colheader}{% \glossarystyle{long3col}% \renewcommand*{\glossaryheader}{% \bfseries\entryname&\bfseries\descriptionname& \bfseries\pagelistname\\\endhead}% } % \end{macrocode} % The \glostyle{long3colheaderborder} style is like the above but with a border % \begin{macrocode} \newglossarystyle{long3colheaderborder}{% \glossarystyle{long3colborder}% \renewcommand*{\glossaryheader}{% \hline \bfseries\entryname&\bfseries\descriptionname& \bfseries\pagelistname\\\hline\endhead \hline\endfoot}% } % \end{macrocode} % The \glostyle{long4col} style has four columns where the third column contains the value of the associated \gloskey{symbol} key. % \begin{macrocode} \newglossarystyle{long4col}{% \renewenvironment{theglossary}{% \begin{longtable}{llll}}{% \end{longtable}}% \renewcommand*{\glossaryheader}{}% \renewcommand*{\glsgroupheading}[1]{}% \renewcommand*{\glossaryentryfield}[5]{% \@glstarget{glo:##1}{##2} & ##3 & ##4 & ##5\\}% \renewcommand*{\glsgroupskip}{ & & &\\}} % \end{macrocode} % The \glostyle{long4colheader} style is like \glostyle{long4col} but with a header row. % \begin{macrocode} \newglossarystyle{long4colheader}{% \glossarystyle{long4col}% \renewcommand*{\glossaryheader}{% \bfseries\entryname&\bfseries\descriptionname& \bfseries \symbolname& \bfseries\pagelistname\\\endhead}% } % \end{macrocode} % The \glostyle{long4colborder} style is like \glostyle{long4col} but with a border. % \begin{macrocode} \newglossarystyle{long4colborder}{% \glossarystyle{long4col}% \renewenvironment{theglossary}{% \begin{longtable}{|l|l|l|l|}}{% \end{longtable}}% \renewcommand*{\glossaryheader}{\hline\endhead\hline\endfoot}% } % \end{macrocode} % The \glostyle{long4colheaderborder} style is like the above but with a border. % \begin{macrocode} \newglossarystyle{long4colheaderborder}{% \glossarystyle{long4col}% \renewenvironment{theglossary}{% \begin{longtable}{|l|l|l|l|}}{% \end{longtable}}% \renewcommand*{\glossaryheader}{% \hline\bfseries\entryname&\bfseries\descriptionname& \bfseries \symbolname& \bfseries\pagelistname\\\hline\endhead\hline\\\endfoot}% } % \end{macrocode} %\iffalse % \begin{macrocode} % % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*glossary-super.sty> % \end{macrocode} %\fi % \subsubsection{Glossary Styles using supertabular environment (glossary-super package)} % The glossary styles defined in the \styname{glossary-super} package % use the \envname{supertabular} environment. % \begin{macrocode} \ProvidesPackage{glossary-super}[2007/05/16 v1.0 (NLCT)] % \end{macrocode} % Requires the \styname{supertabular} package: % \begin{macrocode} \RequirePackage{supertabular} % \end{macrocode} % The \glostyle{super} glossary style uses the % \envname{supertabular} environment % (it uses lengths defined in the \styname{glossary-long} package.) % \begin{macrocode} \newglossarystyle{super}{% \renewenvironment{theglossary}{% \tablehead{}\tabletail{}% \begin{supertabular}{lp{\glsdescwidth}}}{% \end{supertabular}}% \renewcommand*{\glossaryheader}{}% \renewcommand*{\glsgroupheading}[1]{}% \renewcommand*{\glossaryentryfield}[5]{% \@glstarget{glo:##1}{##2} & ##3. ##5\\}% \renewcommand*{\glsgroupskip}{ & \\}} % \end{macrocode} % The \glostyle{superborder} style is like the above, but with horizontal and % vertical lines: % \begin{macrocode} \newglossarystyle{superborder}{% \glossarystyle{super}% \renewenvironment{theglossary}{% \tablehead{\hline}\tabletail{\hline}% \begin{supertabular}{|l|p{\glsdescwidth}|}}{\end{supertabular}}% } % \end{macrocode} % The \glostyle{superheader} style is like the % \glostyle{super} style, but with a header: % \begin{macrocode} \newglossarystyle{superheader}{% \glossarystyle{super}% \renewenvironment{theglossary}{% \tablehead{\bfseries \entryname & \bfseries \descriptionname\\}% \tabletail{}% \begin{supertabular}{lp{\glsdescwidth}}}{\end{supertabular}}% } % \end{macrocode} % The \glostyle{superheaderborder} style is like % the \glostyle{super} style but with a header and border: % \begin{macrocode} \newglossarystyle{superheaderborder}{% \glossarystyle{super}% \renewenvironment{theglossary}{% \tablehead{\hline\bfseries \entryname & \bfseries \descriptionname\\\hline}% \tabletail{\hline} \begin{supertabular}{|l|p{\glsdescwidth}|}}{\end{supertabular}}% } % \end{macrocode} % The \glostyle{super3col} style is like the \glostyle{super} style, but with 3 columns: % \begin{macrocode} \newglossarystyle{super3col}{% \renewenvironment{theglossary}{% \tablehead{}\tabletail{}% \begin{supertabular}{lp{\glsdescwidth}p{\glspagelistwidth}}}{% \end{supertabular}}% \renewcommand*{\glossaryheader}{}% \renewcommand*{\glsgroupheading}[1]{}% \renewcommand*{\glossaryentryfield}[5]{% \@glstarget{glo:##1}{##2} & ##3 & ##5\\}% \renewcommand*{\glsgroupskip}{ & &\\}} % \end{macrocode} % The \glostyle{super3colborder} style is like the % \glostyle{super3col} style, but with a border: % \begin{macrocode} \newglossarystyle{super3colborder}{% \glossarystyle{super3col}% \renewenvironment{theglossary}{% \tablehead{\hline}\tabletail{\hline}% \begin{supertabular}{|l|p{\glsdescwidth}|p{\glspagelistwidth}|}}{% \end{supertabular}}% } % \end{macrocode} % The \glostyle{super3colheader} style is like % the \glostyle{super3col} style but with a header row: % \begin{macrocode} \newglossarystyle{super3colheader}{% \glossarystyle{super3col}% \renewenvironment{theglossary}{% \tablehead{\bfseries\entryname&\bfseries\descriptionname& \bfseries\pagelistname\\}\tabletail{}% \begin{supertabular}{lp{\glsdescwidth}p{\glspagelistwidth}}}{% \end{supertabular}}% } % \end{macrocode} % The \glostyle{super3colheaderborder} style is like % the \glostyle{super3col} style but with a header and border: % \begin{macrocode} \newglossarystyle{super3colheaderborder}{% \glossarystyle{super3colborder}% \renewenvironment{theglossary}{% \tablehead{\hline \bfseries\entryname&\bfseries\descriptionname& \bfseries\pagelistname\\\hline}% \tabletail{\hline}% \begin{supertabular}{|l|p{\glsdescwidth}|p{\glspagelistwidth}|}}{% \end{supertabular}}% } % \end{macrocode} % The \glostyle{super4col} glossary style has four columns, % where the third column contains the value of the % corresponding \gloskey{symbol} key used when that entry % was defined. % \begin{macrocode} \newglossarystyle{super4col}{% \renewenvironment{theglossary}{% \tablehead{}\tabletail{}% \begin{supertabular}{llll}}{% \end{supertabular}}% \renewcommand*{\glossaryheader}{}% \renewcommand*{\glsgroupheading}[1]{}% \renewcommand*{\glossaryentryfield}[5]{% \@glstarget{glo:##1}{##2} & ##3 & ##4 & ##5\\}% \renewcommand*{\glsgroupskip}{ & & &\\}} % \end{macrocode} % The \glostyle{super4colheader} style is like % the \glostyle{super4col} but with a header row. % \begin{macrocode} \newglossarystyle{super4colheader}{% \glossarystyle{super4col}% \renewenvironment{theglossary}{% \tablehead{\bfseries\entryname&\bfseries\descriptionname& \bfseries\symbolname & \bfseries\pagelistname\\}\tabletail{}% \begin{supertabular}{llll}}{% \end{supertabular}}% } % \end{macrocode} % The \glostyle{super4colborder} style is like % the \glostyle{super4col} but with a border. % \begin{macrocode} \newglossarystyle{super4colborder}{% \glossarystyle{super4col}% \renewenvironment{theglossary}{% \tablehead{\hline}\tabletail{\hline}% \begin{supertabular}{|l|l|l|l|}}{% \end{supertabular}}% } % \end{macrocode} % The \glostyle{super4colheaderborder} style is like % the \glostyle{super4col} but with a header and border. % \begin{macrocode} \newglossarystyle{super4colheaderborder}{% \glossarystyle{super4col}% \renewenvironment{theglossary}{% \tablehead{\hline\bfseries\entryname&\bfseries\descriptionname& \bfseries\symbolname & \bfseries\pagelistname\\}\tabletail{\hline}% \begin{supertabular}{|l|l|l|l|}}{% \end{supertabular}}% } % \end{macrocode} %\iffalse % \begin{macrocode} % % \end{macrocode} %\fi %\Finale \endinput