From 5d714d9476cbb90b125ff14a9d764ad90bb7c2ed Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Fri, 24 Sep 2021 03:01:47 +0000 Subject: CTAN sync 202109240301 --- macros/latex/contrib/glossaries/glossaries.dtx | 9096 +++++++++++++++++++++++- 1 file changed, 8981 insertions(+), 115 deletions(-) (limited to 'macros/latex/contrib/glossaries/glossaries.dtx') diff --git a/macros/latex/contrib/glossaries/glossaries.dtx b/macros/latex/contrib/glossaries/glossaries.dtx index b0d0914db2..5c9124cc63 100644 --- a/macros/latex/contrib/glossaries/glossaries.dtx +++ b/macros/latex/contrib/glossaries/glossaries.dtx @@ -1,15 +1,9 @@ %\iffalse % glossaries.dtx generated using makedtx version 1.2 (c) Nicola Talbot % Command line args: -% -setambles ".*\.perl=>\nopreamble\nopostamble" -% -setambles ".*\.tex=>\nopreamble\nopostamble" -% -section "chapter" -% -doc "glossaries-manual.tex" -% -codetitle "Main Package Code" % -comment ".*\.perl" % -comment ".*\.tex" -% -macrocode ".*\.perl" -% -macrocode ".*\.tex" +% -author "Nicola Talbot" % -src "glossaries\.sty\Z=>glossaries.sty" % -src "glossaries-prefix.sty\Z=>glossaries-prefix.sty" % -src "(glossary-.+)\.(sty)\Z=>\1.\2" @@ -19,10 +13,17 @@ % -src "(glossaries-babel)\.(sty)\Z=>\1.\2" % -src "(glossaries-polyglossia)\.(sty)\Z=>\1.\2" % -src "(example-glossaries-.*\.tex)\Z=>\1" +% -src "(glossaries-2020-03-19\.sty)\Z=>\1" % -src "(.*\.perl)\Z=>\1" -% -author "Nicola Talbot" +% -setambles ".*\.perl=>\nopreamble\nopostamble" +% -setambles ".*\.tex=>\nopreamble\nopostamble" +% -doc "glossaries-manual.tex" +% -section "chapter" +% -codetitle "Main Package Code" +% -macrocode ".*\.perl" +% -macrocode ".*\.tex" % glossaries -% Created on 2020/3/19 17:03 +% Created on 2021/9/23 17:22 %\fi %\iffalse %<*package> @@ -45,7 +46,7 @@ %\fi % \iffalse % Doc-Source file to use with LaTeX2e -% Copyright (C) 2020 Nicola Talbot, all rights reserved. +% Copyright (C) 2021 Nicola Talbot, all rights reserved. % \fi % \iffalse %<*driver> @@ -136,7 +137,7 @@ governed by the \gloskey{first} and \gloskey{firstplural} keys of \setcounter{IndexColumns}{2} -\CheckSum{20358} +\CheckSum{34113} \newcommand*{\ifirstuse}{\iterm{first use}} \newcommand*{\firstuse}{\gls{firstuse}} @@ -163,12 +164,12 @@ governed by the \gloskey{first} and \gloskey{firstplural} keys of %\fi %\MakeShortVerb{"} % -% \title{Documented Code For glossaries v4.46} +% \title{Documented Code For glossaries v4.47} % \author{Nicola L.C. Talbot\\[10pt] %Dickimaw Books\\ %\url{http://www.dickimaw-books.com/}} % -% \date{2020-03-19} +% \date{2021-09-20} % \maketitle % %This is the documented code for the \styfmt{glossaries} package. @@ -184,7 +185,7 @@ governed by the \gloskey{first} and \gloskey{firstplural} keys of %glossaries package}. % %\item[\url{glossaries-user.pdf}] -%For the main user guide, read \qt{glossaries.sty v4.46: +%For the main user guide, read \qt{glossaries.sty v4.47: %\LaTeX2e\ Package to Assist Generating Glossaries}. % %\item[\url{mfirstuc-manual.pdf}] @@ -239,7 +240,15 @@ governed by the \gloskey{first} and \gloskey{firstplural} keys of % This package requires \LaTeXe. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{glossaries}[2020/03/19 v4.46 (NLCT)] +% \end{macrocode} +% Rollback releases: +% \begin{macrocode} +\DeclareRelease{v4.46}{2020-03-19}{glossaries-2020-03-19.sty} +\DeclareCurrentRelease{v4.47}{2021-09-20} +% \end{macrocode} +% Declare package: +% \begin{macrocode} +\ProvidesPackage{glossaries}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} %\changes{4.18}{2015-09-09}{split mfirstuc into separate bundle} % Required packages: @@ -1181,8 +1190,9 @@ false,nolabel,autolabel,nameref}[nolabel]{% \def\@gls@setsort##1{% % \end{macrocode} % Get the parent, if one exists +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} - \edef\@glo@parent{\csname glo@##1@parent\endcsname}% + \protected@edef\@glo@parent{\csname glo@##1@parent\endcsname}% % \end{macrocode} % Set the information for the parent entry if not already done. % \begin{macrocode} @@ -1193,8 +1203,8 @@ false,nolabel,autolabel,nameref}[nolabel]{% % \end{macrocode} % Set index information for this entry % \begin{macrocode} - \edef\@glo@type{\csname glo@##1@type\endcsname}% - \edef\@gls@tmp{\csname glo@##1@sort\endcsname}% + \protected@edef\@glo@type{\csname glo@##1@type\endcsname}% + \protected@edef\@gls@tmp{\csname glo@##1@sort\endcsname}% \ifx\@gls@tmp\@empty \expandafter\global\expandafter \advance\csname glossary@\@glo@type @sortcount\endcsname by 1\relax @@ -1424,9 +1434,10 @@ false,nolabel,autolabel,nameref}[nolabel]{% %\end{definition} % Determines if the glossary with the given label has been identified % as being a list of acronyms. +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand{\glsIfListOfAcronyms}[1]{% - \edef\@do@gls@islistofacronyms{% + \protected@edef\@do@gls@islistofacronyms{% \noexpand\@gls@islistofacronyms{#1}{\@glsacronymlists}}% \@do@gls@islistofacronyms } @@ -2399,24 +2410,69 @@ false,nolabel,autolabel,nameref}[nolabel]{% % %\begin{macro}{\@@do@write@glslabels} %\changes{4.45}{2020-02-13}{new} +%\changes{4.47}{2021-09-20}{fully expand list} % \begin{macrocode} \newcommand*{\@@do@write@glslabels}{% \newwrite\@gls@labelsfile \immediate\openout\@gls@labelsfile=\jobname.glslabels - \forallglsentries[\@glo@types,\@ignored@glossaries]{\@glsentry}% - {\ifdefempty{\@glsentry}{}{\immediate\write\@gls@labelsfile{\@glsentry}}}% + \protected@edef\@gls@fulllist{\@glo@types}% + \ifdefempty{\@ignored@glossaries}{}% + {\protected@eappto\@gls@fulllist{,\@ignored@glossaries}}% + \forallglsentries[\@gls@fulllist]{\@glsentry}% + {% + \ifdefempty{\@glsentry}{}% + {% + \ifx\do@write@glslabelsname\@gobble + \def\@gls@thisentryname{}% + \else + \letcs{\@gls@thisentryname}{glo@\glsdetoklabel{\@glsentry}@name}% + \@onelevel@sanitize\@gls@thisentryname + \fi + \immediate\write\@gls@labelsfile + {\@glsentry\do@write@glslabelsname{\@gls@thisentryname}}% + }% + }% \immediate\closeout\@gls@labelsfile } % \end{macrocode} %\end{macro} % +%\begin{macro}{\do@write@glslabelsname} +%\changes{4.47}{2021-09-20}{new} +% Support for additionally writing the name as well as the label. +% Let to \cs{@gobble} if name not required and to +% \cs{@write@glslabelsname} if required. +% \begin{macrocode} +\newcommand*{\do@write@glslabelsname}[1]{} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@write@glslabelsname} +%\changes{4.47}{2021-09-20}{new} +% \begin{macrocode} +\begingroup +\catcode`\^^I12 +\gdef\@write@glslabelsname#1{^^I#1} +\endgroup +% \end{macrocode} +%\end{macro} +% %\begin{option}{writeglslabels} %\changes{4.45}{2020-02-13}{new} %This option will write all entry labels (including those in ignored %glossaries) to the file \cs{jobname}\texttt{.glslabels}. This file %may be used by text editors for label auto-completion. % \begin{macrocode} -\@gls@declareoption{writeglslabels}{\@do@write@glslabels} +\@gls@declareoption{writeglslabels}{\@do@write@glslabels + \let\do@write@glslabelsname\@gobble} +% \end{macrocode} +%\end{option} +%\begin{option}{writeglslabelnames} +%\changes{4.47}{2021-09-20}{new} +%As the above but also writes the name. +% \begin{macrocode} +\@gls@declareoption{writeglslabelnames}{\@do@write@glslabels + \let\do@write@glslabelsname\@write@glslabelsname} % \end{macrocode} %\end{option} %\begin{macro}{\ifglsautomake} @@ -3887,10 +3943,10 @@ false,nolabel,autolabel,nameref}[nolabel]{% \protected@edef\@gls@roman{\@roman{0\string" \string"roman-numbers-lowercase\string" :sep \string"}}% \@onelevel@sanitize\@gls@roman - \edef\@tmp{\string" \string"roman-numbers-lowercase\string" + \edef\@gls@tmp{\string" \string"roman-numbers-lowercase\string" :sep \string"}% - \@onelevel@sanitize\@tmp - \ifx\@tmp\@gls@roman + \@onelevel@sanitize\@gls@tmp + \ifx\@gls@tmp\@gls@roman \expandafter \edef\csname @gls@xdy@Lclass@roman-page-numbers\endcsname{% \string"roman-numbers-lowercase\string"% @@ -4277,9 +4333,10 @@ false,nolabel,autolabel,nameref}[nolabel]{% % current iteration. %\changes{2.01}{2009 May 30}{replaced \cs{ifthenelse} with \cs{ifx}} %\changes{3.11a}{2013-10-15}{replaced \cs{ifx} with \cs{ifdefempty}} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand*{\forglsentries}[3][\glsdefaulttype]{% - \edef\@@glo@list{\csname glolist@#1\endcsname}% + \protected@edef\@@glo@list{\csname glolist@#1\endcsname}% \@for#2:=\@@glo@list\do {% \ifdefempty{#2}{}{#3}% @@ -4507,7 +4564,10 @@ false,nolabel,autolabel,nameref}[nolabel]{% \glsdoifexists{#1}% {% \def\do@glshaschildren{#3}% - \edef\@gls@thislabel{\glsdetoklabel{#1}}% +% \end{macrocode} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@gls@thislabel{\glsdetoklabel{#1}}% \expandafter\forglsentries\expandafter [\csname glo@\@gls@thislabel @type\endcsname] {\glo@label}% @@ -4878,8 +4938,9 @@ false,nolabel,autolabel,nameref}[nolabel]{% }{}% % \end{macrocode} % Add this to the list of glossary types: +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} - \toks@{#2}\edef\@glo@types{\@glo@types\the\toks@,}% + \toks@{#2}\protected@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 @@ -5015,19 +5076,20 @@ false,nolabel,autolabel,nameref}[nolabel]{% % %\begin{macro}{\newignoredglossary} % Creates a new glossary that doesn't have associated files. -% This glossary is ignored by and commands that iterate over +% This glossary is ignored by any commands that iterate over % glossaries, such as \ics{printglossaries}, and won't work with % commands like \ics{printglossary}. It's intended for entries that % are so commonly-known they don't require a glossary. %\changes{4.08}{2014-07-30}{new} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand*{\newignoredglossary}[1]{% \ifdefempty\@ignored@glossaries {% - \edef\@ignored@glossaries{#1}% + \protected@edef\@ignored@glossaries{#1}% }% {% - \eappto\@ignored@glossaries{,#1}% + \protected@eappto\@ignored@glossaries{,#1}% }% \csgdef{glolist@#1}{,}% \ifcsundef{gls@#1@entryfmt}% @@ -5040,7 +5102,7 @@ false,nolabel,autolabel,nameref}[nolabel]{% \renewcommand*{\@gls@nohyperlist}{#1}% }% {% - \eappto\@gls@nohyperlist{,#1}% + \protected@eappto\@gls@nohyperlist{,#1}% }% } % \end{macrocode} @@ -5059,9 +5121,10 @@ false,nolabel,autolabel,nameref}[nolabel]{% % Expansion is used in case the first argument is a control % sequence. %\changes{4.08}{2014-07-30}{new} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand*{\ifignoredglossary}[3]{% - \edef\@gls@igtype{#1}% + \protected@edef\@gls@igtype{#1}% \expandafter\DTLifinlist\expandafter {\@gls@igtype}{\@ignored@glossaries}{#2}{#3}% } @@ -5285,7 +5348,7 @@ false,nolabel,autolabel,nameref}[nolabel]{% %\changes{4.20}{2015-11-30}{new} % \begin{macrocode} \newcommand*{\gls@checkseeallowed@preambleonly}{% - \GlossariesWarning{glossaries}% + \GlossariesWarning {`\gls@xr@key' key doesn't have any effect when used in the document environment. Move the definition to the preamble after \string\makeglossaries\space @@ -5686,11 +5749,11 @@ false,nolabel,autolabel,nameref}[nolabel]{% %\begin{macro}{\gls@defdocnewglossaryentry} %\changes{4.14}{2015-02-28}{new} % The definition of \cs{newglossaryentry} is changed at the start of -% the \env{document} environment. The \gloskey{see} key doesn't work -% for entries that have been defined in the document environment. +% the \env{document} environment. As from v4.47 the \gloskey{see} +% key now works in the \env{document} environment. +%\changes{4.47}{2021-09-20}{removed see warning} % \begin{macrocode} \newcommand*{\gls@defdocnewglossaryentry}{% - \let\gls@checkseeallowed\gls@checkseeallowed@preambleonly \let\newglossaryentry\new@glossaryentry } % \end{macrocode} @@ -5712,6 +5775,38 @@ false,nolabel,autolabel,nameref}[nolabel]{% % \end{macrocode} %\end{macro} % +%\begin{macro}{\gls@glsdefs@labellist} +%\changes{4.47}{2021-09-20}{new} +% List of labels of entries defined in \texttt{.glsdefs} file. +% \begin{macrocode} +\newcommand*{\gls@glsdefs@labellist}{} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\gls@glsdefs@addlabel} +%\changes{4.47}{2021-09-20}{new} +% Save label of entry defined in \texttt{.glsdefs} file. +% \begin{macrocode} +\newcommand*{\gls@glsdefs@addlabel}[1]{\listxadd{\gls@glsdefs@labellist}{#1}} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\gls@docdef@labellist} +%\changes{4.47}{2021-09-20}{new} +% List of labels of entries defined in the \env{document} environment. +% \begin{macrocode} +\newcommand*{\gls@docdef@labellist}{} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\gls@docdef@addlabel} +%\changes{4.47}{2021-09-20}{new} +% Save label of entry defined in the \env{document} environment. +% \begin{macrocode} +\newcommand*{\gls@docdef@addlabel}[1]{\listxadd{\gls@docdef@labellist}{#1}} +% \end{macrocode} +%\end{macro} +% %\begin{macro}{\new@glossaryentry} %\changes{3.10a}{2013-10-13}{new} % For use in document environment. This opens the \texttt{.glsdefs} @@ -5726,11 +5821,55 @@ false,nolabel,autolabel,nameref}[nolabel]{% \immediate\openout\@gls@deffile=\jobname.glsdefs }% {}% - \ifglsentryexists{#1}{}% +% \end{macrocode} +%\changes{4.47}{2021-09-20}{allow overwrite if defined in \texttt{.glsdefs}} +% Don't check for existence since if the entry has been defined in +% the \texttt{.glsdefs} it will need to be redefined in case the +% entry has been updated, but keep track of which entries have been +% defined in the document environment to prevent duplicate +% definitions. +% \begin{macrocode} + \ifglsentryexists{#1}% + {% + \xifinlist{#1}{\gls@docdef@labellist}% + {% +% \end{macrocode} +% This entry has already been defined in the document environment. +% \begin{macrocode} + \GlossariesWarning{Entry `#1' has already been defined in the + document environment (ignoring new definition)}% + }% + {% + \xifinlist{#1}{\gls@glsdefs@labellist}% + {% +% \end{macrocode} +% This entry was defined in the \texttt{.glsdefs} file so update the +% definition in case it has been changed. +% \begin{macrocode} + \gls@defglossaryentry{#1}{#2}% + \gls@docdef@addlabel{#1}% + \@gls@writedef{#1}% + }% + {% +% \end{macrocode} +% This entry wasn't defined in the \texttt{.glsdefs} file so it must +% have been defined in the preamble. +% \begin{macrocode} + \GlossariesWarning{Entry `#1' has already been defined in + the preamble (in which case remove the duplicate definition) + or you have just updated to glossaries.sty + v4.47 (in which case delete `\jobname.glsdefs')}% + }% + }% + }% {% +% \end{macrocode} +% This entry hasn't been defined (new entry since last build). +% \begin{macrocode} \gls@defglossaryentry{#1}{#2}% + \gls@docdef@addlabel{#1}% + \@gls@writedef{#1}% }% - \@gls@writedef{#1}% } % \end{macrocode} %At the start of the document input the \texttt{.glsdefs} file if it @@ -5766,18 +5905,38 @@ false,nolabel,autolabel,nameref}[nolabel]{% % \end{macrocode} %\end{macro} % +%\begin{macro}{\glsdefs@newdocentry} +%\changes{4.47}{2021-09-20}{new} +% Used to define entries in the \texttt{.glsdefs} file. +% \begin{macrocode} +\newcommand*{\glsdefs@newdocentry}[2]{% + \ifglsentryexists{#1}% + {\GlossariesWarning{entry `#1' has already been defined in the preamble + (if you have moved the definition there from the document + environment, delete \jobname.glsdefs)}}% + {% + \gls@glsdefs@addlabel{#1}% + \gls@defglossaryentry{#1}{#2}% + }% +} +% \end{macrocode} +%\end{macro} +% %\begin{macro}{\@gls@writedef} %\changes{3.10a}{2013-10-13}{new} % Writes glossary entry definition to \cs{@gls@deffile}. +% Allow for the possibility that the entry definition may have been +% moved from the document environment to the preamble, so warn +% rather than generate an error. %\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}} +%\changes{4.47}{2021-09-20}{added a warning if entry has already been +%defined} % \begin{macrocode} \newcommand*{\@gls@writedef}[1]{% \immediate\write\@gls@deffile {% - \string\ifglsentryexists{#1}{}\glspercentchar^^J% - \expandafter\@gobble\string\{\glspercentchar^^J% - \string\gls@defglossaryentry{\glsdetoklabel{#1}}\glspercentchar^^J% - \expandafter\@gobble\string\{\glspercentchar% + \string\glsdefs@newdocentry{\glsdetoklabel{#1}}\glspercentchar^^J% + \expandafter\@gobble\string\{\glspercentchar% }% % \end{macrocode} % Write key value information: @@ -5803,9 +5962,8 @@ false,nolabel,autolabel,nameref}[nolabel]{% \glswritedefhook \immediate\write\@gls@deffile {% - \glspercentchar^^J% - \expandafter\@gobble\string\}\glspercentchar^^J% - \expandafter\@gobble\string\}\glspercentchar% + \glspercentchar^^J% + \expandafter\@gobble\string\}\glspercentchar^^J% }% } % \end{macrocode} @@ -6089,11 +6247,12 @@ false,nolabel,autolabel,nameref}[nolabel]{% %\end{definition} %\changes{4.16}{2015-07-08}{new} %\changes{4.42}{2019-01-06}{changed from \cs{edef} to \cs{protected@csxdef}} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand{\glsfieldxdef}[3]{% \glsdoifexists{#1}% {% - \edef\@glo@label{\glsdetoklabel{#1}}% + \protected@edef\@glo@label{\glsdetoklabel{#1}}% \ifcsdef{glo@\@glo@label @#2}% {% \protected@csxdef{glo@\@glo@label @#2}{#3}% @@ -6112,11 +6271,12 @@ false,nolabel,autolabel,nameref}[nolabel]{% %\end{definition} %\changes{4.16}{2015-07-08}{new} %\changes{4.42}{2019-01-06}{changed from \cs{edef} to \cs{protected@csedef}} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand{\glsfieldedef}[3]{% \glsdoifexists{#1}% {% - \edef\@glo@label{\glsdetoklabel{#1}}% + \protected@edef\@glo@label{\glsdetoklabel{#1}}% \ifcsdef{glo@\@glo@label @#2}% {% \protected@csedef{glo@\@glo@label @#2}{#3}% @@ -6134,11 +6294,12 @@ false,nolabel,autolabel,nameref}[nolabel]{% %\cs{glsfieldgdef}\marg{label}\marg{field}\marg{definition} %\end{definition} %\changes{4.16}{2015-07-08}{new} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand{\glsfieldgdef}[3]{% \glsdoifexists{#1}% {% - \edef\@glo@label{\glsdetoklabel{#1}}% + \protected@edef\@glo@label{\glsdetoklabel{#1}}% \ifcsdef{glo@\@glo@label @#2}% {% \expandafter\gdef\csname glo@\@glo@label @#2\endcsname{#3}% @@ -6156,11 +6317,12 @@ false,nolabel,autolabel,nameref}[nolabel]{% %\cs{glsfielddef}\marg{label}\marg{field}\marg{definition} %\end{definition} %\changes{4.16}{2015-07-08}{new} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand{\glsfielddef}[3]{% \glsdoifexists{#1}% {% - \edef\@glo@label{\glsdetoklabel{#1}}% + \protected@edef\@glo@label{\glsdetoklabel{#1}}% \ifcsdef{glo@\@glo@label @#2}% {% \expandafter\def\csname glo@\@glo@label @#2\endcsname{#3}% @@ -6180,11 +6342,12 @@ false,nolabel,autolabel,nameref}[nolabel]{% %\changes{4.16}{2015-07-08}{new} % Fetches the value of the given field and stores in the given % control sequence. +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand{\glsfieldfetch}[3]{% \glsdoifexists{#1}% {% - \edef\@glo@label{\glsdetoklabel{#1}}% + \protected@edef\@glo@label{\glsdetoklabel{#1}}% \ifcsdef{glo@\@glo@label @#2}% {% \letcs#3{glo@\@glo@label @#2}% @@ -6208,7 +6371,7 @@ false,nolabel,autolabel,nameref}[nolabel]{% \newcommand{\ifglsfieldeq}[5]{% \glsdoifexists{#1}% {% - \edef\@glo@label{\glsdetoklabel{#1}}% + \protected@edef\@glo@label{\glsdetoklabel{#1}}% \ifcsdef{glo@\@glo@label @#2}% {% \ifcsstring{glo@\@glo@label @#2}{#3}{#4}{#5}% @@ -6232,7 +6395,7 @@ false,nolabel,autolabel,nameref}[nolabel]{% \newcommand{\ifglsfielddefeq}[5]{% \glsdoifexists{#1}% {% - \edef\@glo@label{\glsdetoklabel{#1}}% + \protected@edef\@glo@label{\glsdetoklabel{#1}}% \ifcsdef{glo@\@glo@label @#2}% {% \expandafter\ifdefstrequal @@ -6252,11 +6415,12 @@ false,nolabel,autolabel,nameref}[nolabel]{% %\end{definition} %\changes{4.16}{2015-07-08}{new} %As above but uses \cs{ifcsstrequal} instead of \cs{ifdefstrequal} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand{\ifglsfieldcseq}[5]{% \glsdoifexists{#1}% {% - \edef\@glo@label{\glsdetoklabel{#1}}% + \protected@edef\@glo@label{\glsdetoklabel{#1}}% \ifcsdef{glo@\@glo@label @#2}% {% \ifcsstrequal{glo@\@glo@label @#2}{#3}{#4}{#5}% @@ -6341,8 +6505,9 @@ false,nolabel,autolabel,nameref}[nolabel]{% \let\GlsSetQuote\gls@nosetquote % \end{macrocode} % Store label +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} - \edef\@glo@label{\glsdetoklabel{#1}}% + \protected@edef\@glo@label{\glsdetoklabel{#1}}% % \end{macrocode} % \changes{3.12a}{2013-10-16}{added \cs{glslabel}} % Provide a means for user defined keys to reference the label: @@ -6456,9 +6621,10 @@ false,nolabel,autolabel,nameref}[nolabel]{% % \end{macrocode} % Assign type. This must be fully expandable %\changes{4.03}{2014-01-20}{replaced \#1 with \cs{@glo@label}} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \gls@assign@field{\glsdefaulttype}{\@glo@label}{type}{\@glo@type}% - \edef\@glo@type{\glsentrytype{\@glo@label}}% + \protected@edef\@glo@type{\glsentrytype{\@glo@label}}% % \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. @@ -6490,7 +6656,10 @@ false,nolabel,autolabel,nameref}[nolabel]{% {% }% \protected@edef\@glolist@{\csname glolist@\@glo@type\endcsname}% - \expandafter\xdef\csname glolist@\@glo@type\endcsname{% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{xdef} to \cs{protected@xdef}} +% \begin{macrocode} + \expandafter\protected@xdef\csname glolist@\@glo@type\endcsname{% \@glolist@{\@glo@label},}% }% % \end{macrocode} @@ -6526,8 +6695,9 @@ false,nolabel,autolabel,nameref}[nolabel]{% {% % \end{macrocode} % Parent exists. Set \cs{glo@}\meta{label}"@parent". +%\changes{1.46}{2021-09-20}{changed \cs{xdef} to \cs{protected@xdef}} % \begin{macrocode} - \expandafter\xdef\csname glo@\@glo@label @parent\endcsname{% + \expandafter\protected@xdef\csname glo@\@glo@label @parent\endcsname{% \@glo@parent}% % \end{macrocode} % Determine level. @@ -6678,13 +6848,14 @@ false,nolabel,autolabel,nameref}[nolabel]{% % \end{macrocode} % Define an associated boolean variable to determine whether this % entry has been used yet (needs to be defined globally): +%\changes{1.46}{2021-09-20}{changed \cs{xdef} to \cs{protected@xdef}} % \begin{macrocode} - \expandafter\xdef\csname glo@\@glo@label @flagfalse\endcsname{% + \expandafter\protected@xdef\csname glo@\@glo@label @flagfalse\endcsname{% \noexpand\global \noexpand\let\expandafter\noexpand \csname ifglo@\@glo@label @flag\endcsname\noexpand\iffalse }% - \expandafter\xdef\csname glo@\@glo@label @flagtrue\endcsname{% + \expandafter\protected@xdef\csname glo@\@glo@label @flagtrue\endcsname{% \noexpand\global \noexpand\let\expandafter\noexpand \csname ifglo@\@glo@label @flag\endcsname\noexpand\iftrue @@ -6773,10 +6944,11 @@ false,nolabel,autolabel,nameref}[nolabel]{% % Moves entry whose label is given by first argument to the glossary % named in the second argument. %\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand*{\glsmoveentry}[2]{% - \edef\@glo@thislabel{\glsdetoklabel{#1}}% - \edef\glo@type{\csname glo@\@glo@thislabel @type\endcsname}% + \protected@edef\@glo@thislabel{\glsdetoklabel{#1}}% + \protected@edef\glo@type{\csname glo@\@glo@thislabel @type\endcsname}% \def\glo@list{,}% \forglsentries[\glo@type]{\glo@label}% {% @@ -6785,7 +6957,7 @@ false,nolabel,autolabel,nameref}[nolabel]{% %\cs{ifdefequal}} % \begin{macrocode} \ifdefequal\@glo@thislabel\glo@label - {}{\eappto\glo@list{\glo@label,}}% + {}{\protected@eappto\glo@list{\glo@label,}}% }% \cslet{glolist@\glo@type}{\glo@list}% \csdef{glo@\@glo@thislabel @type}{#2}% @@ -6841,8 +7013,9 @@ false,nolabel,autolabel,nameref}[nolabel]{% \newcommand{\@glo@storeentry}[1]{% % \end{macrocode} % Escape makeindex/xindy special characters in the label: +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} - \edef\@glo@esclabel{#1}% + \protected@edef\@glo@esclabel{#1}% \@gls@checkmkidxchars\@glo@esclabel % \end{macrocode} % Get the sort string and escape any special characters @@ -6859,7 +7032,7 @@ false,nolabel,autolabel,nameref}[nolabel]{% % \end{macrocode} % Get the parent, if one exists % \begin{macrocode} - \edef\@glo@parent{\csname glo@#1@parent\endcsname}% + \protected@edef\@glo@parent{\csname glo@#1@parent\endcsname}% % \end{macrocode} % Write the information to the glossary file. % \begin{macrocode} @@ -8498,9 +8671,10 @@ false,nolabel,autolabel,nameref}[nolabel]{% % problem with tabularx). %\changes{2.03}{2009-09-23}{added \cs{leavevmode}} %\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \leavevmode - \edef\glslabel{\glsdetoklabel{#2}}% + \protected@edef\glslabel{\glsdetoklabel{#2}}% % \end{macrocode} % Save options in \cs{@gls@link@opts} and label in \cs{@gls@link@label} %\changes{4.03}{2014-01-20}{moved \cs{@gls@link@opts} and @@ -8511,7 +8685,7 @@ false,nolabel,autolabel,nameref}[nolabel]{% % \end{macrocode} % \begin{macrocode} \def\@glsnumberformat{glsnumberformat}% - \edef\@gls@counter{\csname glo@\glslabel @counter\endcsname}% + \protected@edef\@gls@counter{\csname glo@\glslabel @counter\endcsname}% % \end{macrocode} %\changes{3.05}{2013-04-21}{added check for ``nohypertypes''}% %\changes{3.07}{2013-07-05}{fixed bug that failed to find entry in list}% @@ -8519,7 +8693,7 @@ false,nolabel,autolabel,nameref}[nolabel]{% % hyperlink by default %\changes{4.08}{2014-07-30}{renamed \cs{gls@type} to \cs{glstype}} % \begin{macrocode} - \edef\glstype{\csname glo@\glslabel @type\endcsname}% + \protected@edef\glstype{\csname glo@\glslabel @type\endcsname}% % \end{macrocode} %\changes{4.08}{2014-07-30}{removed redundancy} % Save original setting @@ -8785,6 +8959,19 @@ false,nolabel,autolabel,nameref}[nolabel]{% \def\@gls@checkedmkidx{}% \expandafter\@gls@checklevel#1\@nil!!\null \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}% +% \end{macrocode} +%\changes{4.47}{2021-09-20}{added check for \cs{"!} and backslash} +% \begin{macrocode} + \def\@gls@checkedmkidx{}% + \expandafter\@gls@checkesclevel#1\@nil\!\!\null + \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}% + \def\@gls@checkedmkidx{}% + \edef\@do@gls@checkesc{% + \noexpand\@gls@checkesc\expandonce{#1}\noexpand\@nil + \@backslashchar\@backslashchar\noexpand\null + }% + \@do@gls@checkesc + \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}% \fi } % \end{macrocode} @@ -9032,6 +9219,40 @@ false,nolabel,autolabel,nameref}[nolabel]{% } % \end{macrocode} %\end{macro} +%\begin{macro}{\@gls@checkesc} +% and for \verb"\": +%\changes{4.47}{2021-09-20}{new} +% \begin{macrocode} +\bgroup +\catcode`\|0\relax +\catcode`\\12\relax +|gdef|@gls@checkesc#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@checkesc{|relax}% + |else + |edef|@gls@checkedmkidx{|the|@gls@tmpb|the|toks@ + |@gls@quotechar|@backslashchar|@gls@quotechar|@backslashchar}% + |def|@@gls@checkesc{|@gls@checkesc#3|null}% + |fi + |else + |edef|@gls@checkedmkidx{|the|@gls@tmpb|the|toks@ + |@gls@quotechar|@backslashchar}% + |ifx|null#3|null + |def|@@gls@checkesc{|@gls@checkesc#2\\|null}% + |else + |def|@@gls@checkesc{|@gls@checkesc#2\#3|null}% + |fi + |fi + |@@gls@checkesc +} +|egroup +% \end{macrocode} +%\end{macro} +% % %\begin{macro}{\@gls@xdycheckquote} % As before but for use with \app{xindy} @@ -12210,8 +12431,9 @@ false,nolabel,autolabel,nameref}[nolabel]{% \bgroup % \end{macrocode} %\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} - \edef\@glo@label{\glsdetoklabel{#1}}% + \protected@edef\@glo@label{\glsdetoklabel{#1}}% \let\@org@glsnumberformat\glsnumberformat \def\glsnumberformat##1{##1}% \protected@edef\the@numberlist{% @@ -12316,7 +12538,10 @@ false,nolabel,autolabel,nameref}[nolabel]{% \glsdoifexists{#2}% {% \def\@glsnumberformat{glsnumberformat}% - \edef\@gls@counter{\csname glo@\glsdetoklabel{#2}@counter\endcsname}% +% \end{macrocode} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@gls@counter{\csname glo@\glsdetoklabel{#2}@counter\endcsname}% \setkeys{glossadd}{#1}% % \end{macrocode} % Store the entry's counter in \cs{theglsentrycounter} @@ -12358,9 +12583,10 @@ false,nolabel,autolabel,nameref}[nolabel]{% % glossary types. %\begin{macro}{\glsaddall} %\changes{3.01}{2011-04-12}{made robust} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newrobustcmd*{\glsaddall}[1][]{% - \edef\@glo@type{\@glo@types}% + \protected@edef\@glo@type{\@glo@types}% \setkeys{glossadd}{#1}% \forallglsentries[\@glo@type]{\@glo@entry}{% \glsadd[#1]{\@glo@entry}% @@ -13034,6 +13260,22 @@ false,nolabel,autolabel,nameref}[nolabel]{% \noexpand!\noexpand!\noexpand\null \noexpand\expandafter\noexpand\@gls@updatechecked \noexpand\@gls@checkedmkidx{####1}% +% \end{macrocode} +%\changes{4.47}{2021-09-20}{added check for \cs{"!}} +% \begin{macrocode} + \noexpand\def\noexpand\@gls@checkedmkidx{}% + \noexpand\expandafter\noexpand\@gls@checkesclevel####1\noexpand\@nil + \noexpand\!\noexpand\!\noexpand\null + \noexpand\expandafter\noexpand\@gls@updatechecked + \noexpand\@gls@checkedmkidx{####1}% +% \end{macrocode} +%\changes{4.47}{2021-09-20}{added check for backslash} +% \begin{macrocode} + \noexpand\def\noexpand\@gls@checkedmkidx{}% + \noexpand\expandafter\noexpand\@gls@checkesc####1\noexpand\@nil + \@backslashchar\@backslashchar\noexpand\null + \noexpand\expandafter\noexpand\@gls@updatechecked + \noexpand\@gls@checkedmkidx{####1}% }% }% \@gls@docheckquotedef @@ -13409,19 +13651,7 @@ false,nolabel,autolabel,nameref}[nolabel]{% % \end{macrocode} % Activate warning about missing \cs{printglossary} % \begin{macrocode} - \def\warn@noprintglossary{% - \ifdefstring{\@glo@types}{,}% - {% - \GlossariesWarningNoLine{No glossaries have been defined}% - }% - {% - \GlossariesWarningNoLine{No \string\printglossary\space - or \string\printglossaries\space - found. ^^J(Remove \string\makeglossaries\space if you - don't want any glossaries.) ^^JThis document will not - have a glossary}% - }% - }% + \let\warn@noprintglossary\@makeglossaries@warn@noprintglossary % \end{macrocode} % Declare list parser for \cs{glsdisplaynumberlist} %\changes{3.02}{2012-05-21}{added list parser} @@ -13465,6 +13695,26 @@ false,nolabel,autolabel,nameref}[nolabel]{% \@onlypreamble{\makeglossaries} % \end{macrocode} %\end{macro} +% +%\begin{macro}{\@makeglossaries@warn@noprintglossary} +%\changes{4.47}{??}{new} +% \begin{macrocode} +\newcommand\@makeglossaries@warn@noprintglossary{% + \ifdefstring{\@glo@types}{,}% + {% + \GlossariesWarningNoLine{No glossaries have been defined}% + }% + {% + \GlossariesWarningNoLine{No \string\printglossary\space + or \string\printglossaries\space + found. ^^J(Remove \string\makeglossaries\space if you + don't want any glossaries.) ^^JThis document will not + have a glossary}% + }% +}% +% \end{macrocode} +%\end{macro} +% %\begin{macro}{\glswrite} % The definition of \cs{glswrite} has now been moved to % \cs{makeglossaries} so that it's only defined if needed. @@ -13520,9 +13770,10 @@ false,nolabel,autolabel,nameref}[nolabel]{% \let\gls@checkseeallowed\relax % \end{macrocode} % Redefine cross-referencing macro: +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \renewcommand{\@do@seeglossary}[2]{% - \edef\@gls@label{\glsdetoklabel{##1}}% + \protected@edef\@gls@label{\glsdetoklabel{##1}}% \protected@write\@auxout{}{% \string\@gls@reference {\csname glo@\@gls@label @type\endcsname}% @@ -14005,11 +14256,12 @@ you % command that takes a \TeX\ register as the argument % (\verb|\|\meta{csname}\verb|\c@page| must be valid). %\changes{4.11}{2014-09-01}{new} +%\changes{1.46}{2021-09-20}{changed \cs{eappto} to \cs{protected@eappto}} % \begin{macrocode} \newcommand*{\glsaddprotectedpagefmt}[1]{% - \eappto\gls@protected@pagefmts{,\expandonce{\csname gls#1page\endcsname}}% + \protected@eappto\gls@protected@pagefmts{,\expandonce{\csname gls#1page\endcsname}}% \csedef{gls#1page}{\expandonce{\csname#1\endcsname}\noexpand\c@page}% - \eappto\@wrglossarynumberhook{% + \protected@eappto\@wrglossarynumberhook{% \noexpand\let\expandonce{\csname org@gls#1\endcsname}% \expandonce{\csname#1\endcsname}% \noexpand\def\expandonce{\csname#1\endcsname}{% @@ -14085,8 +14337,9 @@ you % \end{macrocode} % De-tok label if required. %\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} - \edef\@gls@label{\glsdetoklabel{#1}}% + \protected@edef\@gls@label{\glsdetoklabel{#1}}% % \end{macrocode} % Write the information to file: % \begin{macrocode} @@ -14271,8 +14524,9 @@ you % \end{macrocode} % De-tok label if required %\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} - \edef\@gls@label{\glsdetoklabel{#1}}% + \protected@edef\@gls@label{\glsdetoklabel{#1}}% % \end{macrocode} % Write the information to file: % \begin{macrocode} @@ -14543,7 +14797,10 @@ you \newcommand*{\gls@save@numberlist}[1]{% \ifglssavenumberlist \toks@{#1}% - \edef\@do@writeaux@info{% +% \end{macrocode} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@do@writeaux@info{% \noexpand\csgdef{glo@\glscurrententrylabel @numberlist}{\the\toks@}% }% \@onelevel@sanitize\@do@writeaux@info @@ -14797,15 +15054,16 @@ you % new \cs{glossentry} and \cs{subglossentry}, but this is now only % needed for backward compatibility): %\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}} +%\changes{1.46}{2021-09-20}{changed \cs{xdef} to \cs{protected@xdef}} % \begin{macrocode} \let\gls@org@glossaryentryfield\glossentry \let\gls@org@glossarysubentryfield\subglossentry \renewcommand{\glossentry}[1]{% - \xdef\glscurrententrylabel{\glsdetoklabel{##1}}% + \protected@xdef\glscurrententrylabel{\glsdetoklabel{##1}}% \gls@org@glossaryentryfield{##1}% }% \renewcommand{\subglossentry}[2]{% - \xdef\glscurrententrylabel{\glsdetoklabel{##2}}% + \protected@xdef\glscurrententrylabel{\glsdetoklabel{##2}}% \gls@org@glossarysubentryfield{##1}{##2}% }% % \end{macrocode} @@ -14941,7 +15199,10 @@ you \glosortentrieswarning \def\@glo@sortinglist{}% \def\@glo@sortinghandler{#1}% - \edef\@glo@type{#2}% +% \end{macrocode} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@glo@type{#2}% \forlistcsloop{\@glo@do@sortentries}{@glsref@#2}% \csdef{@glsref@#2}{}% \@for\@this@label:=\@glo@sortinglist\do{% @@ -15007,8 +15268,9 @@ you {% % \end{macrocode} % This entry has a parent, so add it to the child list +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} - \edef\@glo@parent{\csuse{glo@\glsdetoklabel{#1}@parent}}% + \protected@edef\@glo@parent{\csuse{glo@\glsdetoklabel{#1}@parent}}% \ifcsundef{@glo@sortingchildren@\@glo@parent}% {% \csdef{@glo@sortingchildren@\@glo@parent}{}% @@ -15331,6 +15593,7 @@ you % %\begin{macro}{\glo@grabfirst} %\changes{4.04}{2014-03-06}{new} +%This won't work for UTF-8 and \sty{inputenc}. % \begin{macrocode} \def\glo@grabfirst#1#2\@nil{% \def\@gls@firsttok{#1}% @@ -15843,7 +16106,10 @@ you % \begin{macrocode} \newcommand*{\glsstepsubentry}[1]{% \ifglssubentrycounter - \edef\currentglssubentry{\glsdetoklabel{#1}}% +% \end{macrocode} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\currentglssubentry{\glsdetoklabel{#1}}% \refstepcounter{glossarysubentry}% \label{\GlsEntryCounterLabelPrefix\currentglssubentry}% \fi @@ -16506,8 +16772,11 @@ you \def\@gls@removespaces#1 #2\@nil{% \toks@=\expandafter{\the\toks@#1}% \ifx\\#2\\% - \edef\x{\the\toks@}% - \ifx\x\empty +% \end{macrocode} +%\changes{4.47}{2021-09-20}{changed \cs{x} to \cs{@gls@x}} +% \begin{macrocode} + \edef\@gls@x{\the\toks@}% + \ifx\@gls@x\empty \else % \end{macrocode} %\changes{3.0}{2011-04-02}{added prefix to hyperlink} @@ -18001,9 +18270,50 @@ you \let\gls@assign@firstpl\@org@gls@assign@firstpl \let\gls@assign@plural\@org@gls@assign@plural \let\gls@assign@symbolplural\@org@gls@assign@symbolplural +% \end{macrocode} +% If expansion is switched off, the default plurals won't be properly set. +% \begin{macrocode} + \@@gls@noexpand@assign@default@plurals +} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\@@gls@noexpand@assign@default@plurals} +%\changes{4.47}{2021-09-20}{new} +% \begin{macrocode} +\newcommand*{\@@gls@noexpand@assign@default@plurals}{% + \expandafter\ifx\csname glo@\the\glslabeltok @plural\endcsname\@@gls@@default@acr@plural + \csxdef{glo@\the\glslabeltok @plural}{\expandonce\@glo@shortpl}% + \fi + \expandafter\ifx\csname glo@\the\glslabeltok @firstpl\endcsname\@@gls@@default@acr@firstplural + \csxdef{glo@\the\glslabeltok @firstpl}{% + \expandonce\@glo@longpl\glsspace(\expandonce\@glo@shortpl)}% + \fi + \expandafter\ifx\csname glo@\the\glslabeltok @descplural\endcsname\@@gls@@default@acr@descplural + \csxdef{glo@\the\glslabeltok @descplural}{\expandonce\@glo@longpl}% + \fi +} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\@@gls@@default@acr@plural} +%\changes{4.47}{2021-09-20}{new} +% \begin{macrocode} +\newcommand*{\@@gls@@default@acr@plural}{\expandonce\@glo@shortpl} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\@@gls@@default@acr@firstplural} +%\changes{4.47}{2021-09-20}{new} +% \begin{macrocode} +\newcommand*{\@@gls@@default@acr@firstplural}{% + \expandonce\@glo@longpl\glsspace(\expandonce\@glo@shortpl)% } % \end{macrocode} %\end{macro} +%\begin{macro}{\@@gls@@default@acr@descplural} +%\changes{4.47}{2021-09-20}{new} +% \begin{macrocode} +\newcommand*{\@@gls@@default@acr@descplural}{\expandonce\@glo@longpl} +% \end{macrocode} +%\end{macro} %\begin{macro}{\SetDefaultAcronymStyle} %\changes{2.04}{2009-11-10}{new} % Set up the default acronym style: @@ -18151,8 +18461,23 @@ you % key. Note that since the long form is stored in the symbol key, % if you want the long form to appear in the list of acronyms, you % need to use a glossary style that displays the symbol key. +% This style was deprecated with the introduction of +% \cs{newacronymstyle}. +%\changes{4.47}{2021-09-20}{added deprecated warnings} % \begin{macrocode} \newcommand*{\SetDescriptionFootnoteAcronymStyle}{% + \ifglsacrsmallcaps + \@gls@deprecated@acr@warning{footnote,smallcaps,description}% + {footnote-sc-desc}{short-sc-footnote-desc}% + \else + \ifglsacrsmaller + \@gls@deprecated@acr@warning{footnote,smaller,description}% + {footnote-sm-desc}{short-sm-footnote-desc}% + \else + \@gls@deprecated@acr@warning{footnote,description}% + {footnote-desc}{short-footnote-desc}% + \fi + \fi \renewcommand{\newacronym}[4][]{% \ifx\@glsacronymlists\@empty \def\@glo@type{\acronymtype}% @@ -18264,6 +18589,9 @@ you % Note that the short form is stored in the \gloskey{symbol} key, % so if the short form needs to be displayed in the glossary, % use a style the displays the symbol. +% This style was deprecated with the introduction of +% \cs{newacronymstyle}. +%\changes{4.47}{2021-09-20}{added deprecated warning} % \begin{macrocode} \newcommand*{\SetDescriptionDUAAcronymStyle}{% \ifglsacrsmallcaps @@ -18275,6 +18603,7 @@ you can't both be set}{}% \fi \fi + \@gls@deprecated@acr@warning{dua,description}{dua-desc}{long-noshort-desc}% \renewcommand{\newacronym}[4][]{% \ifx\@glsacronymlists\@empty \def\@glo@type{\acronymtype}% @@ -18399,6 +18728,18 @@ you % list of acronyms. % \begin{macrocode} \newcommand*{\SetDescriptionAcronymStyle}{% + \ifglsacrsmallcaps + \@gls@deprecated@acr@warning{smallcaps,description}% + {long-sc-short-desc}{long-short-sc-desc}% + \else + \ifglsacrsmaller + \@gls@deprecated@acr@warning{smaller,description}% + {long-sm-short-desc}{long-short-sm-desc}% + \else + \@gls@deprecated@acr@warning{description}% + {long-short-desc}{long-short-desc}% + \fi + \fi \renewcommand{\newacronym}[4][]{% \ifx\@glsacronymlists\@empty \def\@glo@type{\acronymtype}% @@ -18531,8 +18872,20 @@ you % use to append the long form (stored in \gloskey{description}) as a % footnote. % Use the \gloskey{description} key to store the long form. +% This style was deprecated with the introduction of +% \cs{newacronymstyle}. +%\changes{4.47}{2021-09-20}{added deprecated warnings} % \begin{macrocode} \newcommand*{\SetFootnoteAcronymStyle}{% + \ifglsacrsmallcaps + \@gls@deprecated@acr@warning{footnote,smallcaps}{footnote-sc}{short-sc-footnote}% + \else + \ifglsacrsmaller + \@gls@deprecated@acr@warning{footnote,smaller}{footnote-sm}{short-sm-footnote}% + \else + \@gls@deprecated@acr@warning{footnote}{footnote}{short-footnote}% + \fi + \fi \renewcommand{\newacronym}[4][]{% \ifx\@glsacronymlists\@empty \def\@glo@type{\acronymtype}% @@ -18713,8 +19066,16 @@ you % smaller specified. % Use the \gloskey{symbol} key to store the short form and % \gloskey{first} to store the long form. +% This style was deprecated with the introduction of +% \cs{newacronymstyle}. +%\changes{4.47}{2021-09-20}{added deprecated warnings} % \begin{macrocode} \newcommand*{\SetSmallAcronymStyle}{% + \ifglsacrsmallcaps + \@gls@deprecated@acr@warning{smallcaps}{long-sc-short}{long-short-sc}% + \else + \@gls@deprecated@acr@warning{smaller}{long-sm-short}{long-short-sm}% + \fi \renewcommand{\newacronym}[4][]{% \ifx\@glsacronymlists\@empty \def\@glo@type{\acronymtype}% @@ -18825,8 +19186,12 @@ you %\end{macro} %\begin{macro}{\SetDUAStyle} % Always expand acronyms. +% This style was deprecated with the introduction of +% \cs{newacronymstyle}. +%\changes{4.47}{2021-09-20}{added deprecated warnings} % \begin{macrocode} \newcommand*{\SetDUAStyle}{% + \@gls@deprecated@acr@warning{dua}{dua}{long-noshort}% \renewcommand{\newacronym}[4][]{% \ifx\@glsacronymlists\@empty \def\@glo@type{\acronymtype}% @@ -18851,6 +19216,18 @@ you % \end{macrocode} %\end{macro} % +%\begin{macro}{\@gls@deprecated@acr@warning} +%\changes{4.47}{2021-09-20}{new} +% \begin{macrocode} +\newcommand*{\@gls@deprecated@acr@warning}[3]{% + \GlossariesWarning{Acronym style option #1 deprecated. + Use \string\setacronymstyle{#2} with just glossaries.sty or + use \string\setabbreviationstyle[acronym]{#3} with + glossaries-extra.sty}% +} +% \end{macrocode} +%\end{macro} +% %\begin{macro}{\SetAcronymStyle} % \begin{macrocode} \newcommand*{\SetAcronymStyle}{% @@ -19488,7 +19865,7 @@ you % \cs{gls}\marg{label}} on subsequent use. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{glossaries-prefix}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossaries-prefix}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % Pass all options to \sty{glossaries}: % \begin{macrocode} @@ -19953,7 +20330,7 @@ you %\label{sec:code:hypernav} % Package Definition: % \begin{macrocode} -\ProvidesPackage{glossary-hypernav}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossary-hypernav}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % % The commands defined in this package are provided to @@ -19975,7 +20352,10 @@ you %\cs{@glslink}} % \begin{macrocode} \newcommand*{\glsnavhyperlink}[3][\@glo@type]{% - \edef\gls@grplabel{#2}\protected@edef\@gls@grptitle{#3}% +% \end{macrocode} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\gls@grplabel{#2}\protected@edef\@gls@grptitle{#3}% \@glslink{\glsnavhyperlinkname{#1}{#2}}{#3}} % \end{macrocode} %\end{macro} @@ -20149,7 +20529,7 @@ you % This defines an in-line style where the entries are % comma-separated with just the name and description displayed. % \begin{macrocode} -\ProvidesPackage{glossary-inline}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossary-inline}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % %\begin{style}{inline} @@ -20340,7 +20720,7 @@ you % \ics{item} command, it will appear in a bold font by % default. % \begin{macrocode} -\ProvidesPackage{glossary-list}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossary-list}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} %\begin{macro}{\indexspace} %\changes{4.13}{2015-02-03}{new} @@ -20622,7 +21002,7 @@ you % The glossary styles defined in the \isty{glossary-long} package % used the \env{longtable} environment in the glossary. % \begin{macrocode} -\ProvidesPackage{glossary-long}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossary-long}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % Requires the \isty{longtable} package: % \begin{macrocode} @@ -21119,7 +21499,7 @@ you % \url{http://tex.stackexchange.com/a/56890} % % \begin{macrocode} -\ProvidesPackage{glossary-longbooktabs}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossary-longbooktabs}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % Requires \sty{booktabs} package: % \begin{macrocode} @@ -21460,7 +21840,7 @@ you % used the \env{longtable} environment in the glossary and use % ragged right formatting for the multiline columns. % \begin{macrocode} -\ProvidesPackage{glossary-longragged}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossary-longragged}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % Requires the \isty{array} package: % \begin{macrocode} @@ -21893,7 +22273,7 @@ you %use the \sty{multicol} package. These use the tree-like glossary %styles in a multicol environment. % \begin{macrocode} -\ProvidesPackage{glossary-mcols}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossary-mcols}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % Required packages: % \begin{macrocode} @@ -22330,7 +22710,7 @@ you % The glossary styles defined in the \isty{glossary-super} package % use the \env{supertabular} environment. % \begin{macrocode} -\ProvidesPackage{glossary-super}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossary-super}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % Requires the \isty{supertabular} package: % \begin{macrocode} @@ -22862,7 +23242,7 @@ you % are like those provided by the \isty{glossary-super} package, % except that the multiline columns have ragged right justification. % \begin{macrocode} -\ProvidesPackage{glossary-superragged}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossary-superragged}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % Requires the \isty{array} package: % \begin{macrocode} @@ -23302,7 +23682,7 @@ you % that have a tree-like structure. These are designed for % hierarchical glossaries. % \begin{macrocode} -\ProvidesPackage{glossary-tree}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossary-tree}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % %\begin{macro}{\indexspace} @@ -24023,7 +24403,7 @@ you % hyperlinks may not work properly. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{glossaries-compatible-207}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossaries-compatible-207}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} %\begin{macro}{\GlsAddXdyAttribute} % Adds an attribute in old format. @@ -24384,7 +24764,7 @@ you %\section{glossaries-compatible-307} % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{glossaries-compatible-307}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossaries-compatible-307}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % % Compatibility macros for predefined glossary styles: @@ -25192,7 +25572,7 @@ you % \end{macrocode} % Package version number now in line with main glossaries package number. % \begin{macrocode} -\ProvidesPackage{glossaries-accsupp}[2020/03/19 v4.46 (NLCT) +\ProvidesPackage{glossaries-accsupp}[2021/09/20 v4.47 (NLCT) Experimental glossaries accessibility] % \end{macrocode} % Pass all options to \sty{glossaries}: @@ -28103,9 +28483,10 @@ you % % Use \cs{newacronymhook} to modify the key list to set % the access text to the long version by default. +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \renewcommand*{\newacronymhook}{% - \edef\@gls@keylist{% + \protected@edef\@gls@keylist{% shortaccess={\glsdefaultshortaccess{\the\glslongtok}{\the\glsshorttok}},% shortpluralaccess={\glsdefaultshortaccess{\the\glslongtok}{\the\glsshorttok}},% \the\glskeylisttok}% @@ -28163,6 +28544,7 @@ you \let\gls@assign@firstpl\@org@gls@assign@firstpl \let\gls@assign@plural\@org@gls@assign@plural \let\gls@assign@symbolplural\@org@gls@assign@symbolplural + \@@gls@noexpand@assign@default@plurals } % \end{macrocode} %\end{macro} @@ -28498,7 +28880,7 @@ you % modules. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{glossaries-babel}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossaries-babel}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % Load \sty{tracklang} to obtain language settings. % \begin{macrocode} @@ -28542,7 +28924,7 @@ you % modules. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{glossaries-polyglossia}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossaries-polyglossia}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % Load \sty{tracklang} to obtain language settings. % \begin{macrocode} @@ -28882,6 +29264,181 @@ risus ut urna} %\fi %\iffalse % \begin{macrocode} +%<*example-glossaries-childmultipar.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%< +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} %<*example-glossaries-childnoname.tex> % \end{macrocode} %\fi @@ -29470,6 +30027,140 @@ bibendum quam in tellus.}} %\fi %\iffalse % \begin{macrocode} +%<*example-glossaries-longchild.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%< +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} %<*example-glossaries-multipar.tex> % \end{macrocode} %\fi @@ -29950,6 +30641,8181 @@ amet, libero}, %\fi %\iffalse % \begin{macrocode} +%<*glossaries-2020-03-19.sty> +% \end{macrocode} +%\fi +% \section{Rollback v4.46 (glossaries-2020-03-19.sty)} +% Version 4.46 preserved for rollback. +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{glossaries}[2020/03/19 v4.46 (NLCT)] +\RequirePackage{ifthen} +\RequirePackage{xkeyval}[2006/11/18] +\RequirePackage{mfirstuc} +\RequirePackage{textcase} +\renewcommand*{\mfirstucMakeUppercase}{\MakeTextUppercase}% +\RequirePackage{xfor} +\RequirePackage{datatool-base} +\RequirePackage{amsgen} +\RequirePackage{etoolbox} +\newif\if@gls@docloaded +\@ifpackageloaded{doc}% +{% + \@gls@docloadedtrue +}% +{% + \@ifclassloaded{nlctdoc}{\@gls@docloadedtrue}{\@gls@docloadedfalse}% +} +\if@gls@docloaded + \let\glsorg@theglossary\theglossary + \let\glsorg@endtheglossary\endtheglossary + \let\glsorg@PrintChanges\PrintChanges + \renewcommand{\PrintChanges}{% + \begingroup + \let\theglossary\glsorg@theglossary + \let\endtheglossary\glsorg@endtheglossary + \glsorg@PrintChanges + \endgroup + } +\fi +\newif\if@gls@debug +\define@choicekey{glossaries.sty}{debug}[\gls@debug@val\gls@debug@nr]% + {true,false,showtargets,showaccsupp}[true]{% + \ifcase\gls@debug@nr\relax + % debug=true + \@gls@debugtrue + \renewcommand*{\GlossariesWarning}[1]{% + \PackageWarning{glossaries}{##1}% + }% + \renewcommand*{\GlossariesWarningNoLine}[1]{% + \PackageWarningNoLine{glossaries}{##1}% + }% + \let\@glsshowtarget\@gobble + \PackageInfo{glossaries}{debug mode ON (nowarn option disabled)}% + \or + % debug=false + \@gls@debugfalse + \let\@glsshowtarget\@gobble + \let\@glsshowaccsupp\@gobblethree + \PackageInfo{glossaries}{debug mode OFF}% + \or + % debug=showtargets + \@gls@debugtrue + \renewcommand*{\GlossariesWarning}[1]{% + \PackageWarning{glossaries}{##1}% + }% + \renewcommand*{\GlossariesWarningNoLine}[1]{% + \PackageWarningNoLine{glossaries}{##1}% + }% + \PackageInfo{glossaries}{debug mode ON (nowarn option disabled)}% + \renewcommand{\@glsshowtarget}{\@@glsshowtarget}% + \or + % debug=showaccsupp + \@gls@debugtrue + \renewcommand*{\GlossariesWarning}[1]{% + \PackageWarning{glossaries}{##1}% + }% + \renewcommand*{\GlossariesWarningNoLine}[1]{% + \PackageWarningNoLine{glossaries}{##1}% + }% + \PackageInfo{glossaries}{debug mode ON (nowarn option disabled)}% + \renewcommand{\@glsshowaccsupp}{\glsshowaccsupp}% + \fi +} +\newcommand*{\glsshowtarget}[1]{% + \ifmmode + \nfss@text{\glsshowtargetfont [#1]}% + \else + \ifinner + {\glsshowtargetfont [#1]}% + \else + \glsshowtargetouter{#1}% + \fi + \fi +} +\newcommand*{\glsshowtargetouter}[1]{% + \glsshowtargetsymbol\marginpar{\glsshowtargetsymbol\glsshowtargetfont #1}} +\newcommand*{\glsshowtargetsymbol}{{\tiny$\triangleright$}} +\newcommand*{\glsshowtargetfont}{\ttfamily\footnotesize} +\newcommand*{\@glsshowtarget}[1]{} +\newrobustcmd*{\@@glsshowtarget}[1]{% + \begingroup + \protected@edef\@gls@tmp{#1}% + \@onelevel@sanitize\@gls@tmp + \expandafter\glsshowtarget\expandafter{\@gls@tmp}% + \endgroup +} +\newcommand*{\@glsshowaccsupp}[3]{} +\newrobustcmd*{\glsshowaccsupp}[3]{% + \ifstrempty{#1}% + {\@@glsshowtarget{/#2 (#3)}}% + {\@@glsshowtarget{/#2 (#3) [#1]}}% +} +\newcommand*{\@gls@see@noindex}{% + \PackageError{glossaries}% + {`\gls@xr@key' key may only be used after \string\makeglossaries\space + or \string\makenoidxglossaries\space (or move + \string\newglossaryentry\space + definitions into the preamble)}% + {You must use \string\makeglossaries\space + or \string\makenoidxglossaries\space before defining + any entries that have a `\gls@xr@key' key. It may + be that the `see' key has been written to the .glsdefs + file from the previous run, in which case you need to + move your definitions + to the preamble if you don't want to use + \string\makeglossaries\space + or \string\makenoidxglossaries}% +} +\define@choicekey{glossaries.sty}{seenoindex}% + [\gls@seenoindex@val\gls@seenoindex@nr]{error,warn,ignore}{% + \ifcase\gls@seenoindex@nr + \renewcommand*{\@gls@see@noindex}{% + \PackageError{glossaries}% + {`\gls@xr@key' key may only be used after \string\makeglossaries\space + or \string\makenoidxglossaries}% + {You must use \string\makeglossaries\space + or \string\makenoidxglossaries\space before defining + any entries that have a `\gls@xr@key' key}% + }% + \or + \renewcommand*{\@gls@see@noindex}{% + \GlossariesWarning{`\gls@xr@key' key ignored}% + }% + \or + \renewcommand*{\@gls@see@noindex}{}% + \fi +} +\define@boolkey{glossaries.sty}[gls]{toc}[true]{} +\define@boolkey{glossaries.sty}[gls]{numberline}[true]{} +\ifcsundef{chapter}% + {\newcommand*{\@@glossarysec}{section}}% + {\newcommand*{\@@glossarysec}{chapter}} +\define@choicekey{glossaries.sty}{section}{part,chapter,section,% +subsection,subsubsection,paragraph,subparagraph}[section]{% + \renewcommand*{\@@glossarysec}{#1}} +\newcommand*{\@@glossarysecstar}{*} +\newcommand*{\@@glossaryseclabel}{} +\newcommand*{\glsautoprefix}{} +\define@choicekey{glossaries.sty}{numberedsection}% + [\gls@numberedsection@val\gls@numberedsection@nr]{% +false,nolabel,autolabel,nameref}[nolabel]{% + \ifcase\gls@numberedsection@nr\relax + \renewcommand*{\@@glossarysecstar}{*}% + \renewcommand*{\@@glossaryseclabel}{}% + \or + \renewcommand*{\@@glossarysecstar}{}% + \renewcommand*{\@@glossaryseclabel}{}% + \or + \renewcommand*{\@@glossarysecstar}{}% + \renewcommand*{\@@glossaryseclabel}{% + \label{\glsautoprefix\@glo@type}}% + \or + \renewcommand*{\@@glossarysecstar}{*}% + \renewcommand*{\@@glossaryseclabel}{% + \protected@edef\@currentlabelname{\glossarytoctitle}% + \label{\glsautoprefix\@glo@type}}% + \fi +} +\@ifpackageloaded{classicthesis} +{\newcommand*{\@glossary@default@style}{index}} +{\newcommand*{\@glossary@default@style}{list}} +\define@key{glossaries.sty}{style}{% + \def\@glossary@default@style{#1}% +} +\newcommand*{\@gls@declareoption}[2]{% + \DeclareOptionX{#1}{#2}% + \DeclareOption{#1}{#2}% +} +\newcommand*{\glossaryentrynumbers}[1]{#1\gls@save@numberlist{#1}} +\@gls@declareoption{nonumberlist}{% + \renewcommand*{\glossaryentrynumbers}[1]{\gls@save@numberlist{#1}}% +} +\define@boolkey{glossaries.sty}[gls]{savenumberlist}[true]{} +\glssavenumberlistfalse +\newcommand*\@glo@seeautonumberlist{} +\@gls@declareoption{seeautonumberlist}{% + \renewcommand*{\@glo@seeautonumberlist}{% + \def\@glo@prefix{\glsnextpages}% + }% +} +\define@boolkey{glossaries.sty}[gls]{esclocations}[true]{} +\glsesclocationstrue +\newcommand*{\@gls@loadlong}{\RequirePackage{glossary-long}} +\@gls@declareoption{nolong}{\renewcommand*{\@gls@loadlong}{}} +\IfFileExists{supertabular.sty}{% + \newcommand*{\@gls@loadsuper}{\RequirePackage{glossary-super}}}{% + \newcommand*{\@gls@loadsuper}{}} +\@gls@declareoption{nosuper}{\renewcommand*{\@gls@loadsuper}{}} +\newcommand*{\@gls@loadlist}{\RequirePackage{glossary-list}} +\@gls@declareoption{nolist}{% + \renewcommand*{\@gls@loadlist}{% + \ifdefstring{\@glossary@default@style}{list}% + {\let\@glossary@default@style\relax}% + {}% + }% +} +\newcommand*{\@gls@loadtree}{\RequirePackage{glossary-tree}} +\@gls@declareoption{notree}{\renewcommand*{\@gls@loadtree}{}} +\@gls@declareoption{nostyles}{% + \renewcommand*{\@gls@loadlong}{}% + \renewcommand*{\@gls@loadsuper}{}% + \renewcommand*{\@gls@loadlist}{}% + \renewcommand*{\@gls@loadtree}{}% + \let\@glossary@default@style\relax +} +\newcommand*{\glspostdescription}{% + \ifglsnopostdot\else.\spacefactor\sfcode`\. \fi +} +\define@boolkey{glossaries.sty}[gls]{nopostdot}[true]{} +\glsnopostdotfalse +\define@boolkey{glossaries.sty}[gls]{nogroupskip}[true]{} +\glsnogroupskipfalse +\define@boolkey{glossaries.sty}[gls]{ucmark}[true]{} +\@ifclassloaded{memoir} +{% + \glsucmarktrue +}% +{% + \glsucmarkfalse +} +\newcommand*{\@gls@define@glossaryentrycounter}{% + \ifglsentrycounter + \ifundef\c@glossaryentry + {% + \ifx\@gls@counterwithin\@empty + \newcounter{glossaryentry}% + \else + \newcounter{glossaryentry}[\@gls@counterwithin]% + \fi + \def\theHglossaryentry{\currentglossary.\theglossaryentry}% + }% + {}% + \fi +} +\define@boolkey{glossaries.sty}[gls]{entrycounter}[true]{} +\glsentrycounterfalse +\define@key{glossaries.sty}{counterwithin}{% + \renewcommand*{\@gls@counterwithin}{#1}% + \glsentrycountertrue + \@gls@define@glossaryentrycounter +} +\newcommand*{\@gls@counterwithin}{} +\newcommand{\@gls@define@glossarysubentrycounter}{% + \ifundef\c@glossarysubentry + {% + \ifglssubentrycounter + \ifglsentrycounter + \newcounter{glossarysubentry}[glossaryentry]% + \else + \newcounter{glossarysubentry}% + \fi + \def\theHglossarysubentry{\currentglossary.\currentglssubentry.\theglossarysubentry}% + \fi + }% + {}% +} +\define@boolkey{glossaries.sty}[gls]{subentrycounter}[true]{} +\glssubentrycounterfalse +\newcommand*{\@glo@default@sorttype}{standard} +\define@choicekey{glossaries.sty}{sort}{standard,def,use,none}{% + \renewcommand*{\@glo@default@sorttype}{#1}% + \csname @gls@setupsort@#1\endcsname +} +\newcommand*{\glsprestandardsort}[3]{% + \glsdosanitizesort +} +\newcommand*{\@glo@check@sortallowed}[1]{} +\newcommand*{\@gls@setupsort@standard}{% + \def\do@glo@storeentry{\@glo@storeentry}% + \def\@gls@defsortcount##1{}% + \def\@gls@defsort##1##2{% + \ifx\@glo@sort\@glsdefaultsort + \let\@glo@sort\@glo@name + \fi + \let\glsdosanitizesort\@gls@sanitizesort + \glsprestandardsort{\@glo@sort}{##1}{##2}% + \expandafter\protected@xdef\csname glo@##2@sort\endcsname{\@glo@sort}% + }% + \def\@gls@setsort##1{}% + \let\@glo@check@sortallowed\@gobble +} +\@gls@setupsort@standard +\newcommand*\glssortnumberfmt[1]{% + \ifnum#1<100000 0\fi + \ifnum#1<10000 0\fi + \ifnum#1<1000 0\fi + \ifnum#1<100 0\fi + \ifnum#1<10 0\fi + \number#1% +} +\newcommand*{\@gls@setupsort@def}{% + \def\do@glo@storeentry{\@glo@storeentry}% + \def\@gls@defsortcount##1{% + \expandafter\global + \expandafter\newcount\csname glossary@##1@sortcount\endcsname + }% + \def\@gls@defsort##1##2{% + \ifcsundef{glossary@##1@sortcount}% + {\@gls@defsortcount{##1}}% + {}% + \expandafter\global\expandafter + \advance\csname glossary@##1@sortcount\endcsname by 1\relax + \expandafter\protected@xdef\csname glo@##2@sort\endcsname{% + \expandafter\glssortnumberfmt + {\csname glossary@##1@sortcount\endcsname}}% + }% + \def\@gls@setsort##1{}% + \let\@glo@check@sortallowed\@gobble +} +\newcommand*{\@gls@setupsort@use}{% + \let\do@glo@storeentry\@gobble + \def\@gls@defsortcount##1{% + \expandafter\global + \expandafter\newcount\csname glossary@##1@sortcount\endcsname + }% + \def\@gls@defsort##1##2{% + \expandafter\gdef\csname glo@##2@sort\endcsname{}% + }% + \def\@gls@setsort##1{% + \edef\@glo@parent{\csname glo@##1@parent\endcsname}% + \ifx\@glo@parent\@empty + \else + \expandafter\@gls@setsort\expandafter{\@glo@parent}% + \fi + \edef\@glo@type{\csname glo@##1@type\endcsname}% + \edef\@gls@tmp{\csname glo@##1@sort\endcsname}% + \ifx\@gls@tmp\@empty + \expandafter\global\expandafter + \advance\csname glossary@\@glo@type @sortcount\endcsname by 1\relax + \expandafter\protected@xdef\csname glo@##1@sort\endcsname{% + \expandafter\glssortnumberfmt + {\csname glossary@\@glo@type @sortcount\endcsname}}% + \@glo@storeentry{##1}% + \fi + }% + \let\@glo@check@sortallowed\@gobble +} +\newcommand*{\@gls@setupsort@none}{% + \def\do@glo@storeentry##1{}% + \def\@gls@defsortcount##1{}% + \def\@gls@defsort##1##2{% + \expandafter\global\expandafter\let\csname glo@##2@sort\endcsname\@glo@sort + }% + \def\@gls@setsort##1{}% + \renewcommand\@glo@check@sortallowed[1]{\PackageError{glossaries} + {Option sort=none not allowed with \string##1}% + {(Use sort=def instead)}}% +} +\newcommand*{\glsdefmain}{% + \if@gls@docloaded + \newglossary[glg2]{main}{gls2}{glo2}{\glossaryname}% + \else + \newglossary{main}{gls}{glo}{\glossaryname}% + \fi + \newcommand*{\gls@tr@set@main@toctitle}{% + \translatelet{\glossarytoctitle}{Glossary}% + }% +} +\newcommand*{\glsdefaulttype}{main} +\newcommand*{\acronymtype}{\glsdefaulttype} +\@gls@declareoption{nomain}{% + \let\glsdefaulttype\relax + \renewcommand*{\glsdefmain}{}% +} +\define@boolkey{glossaries.sty}[gls]{acronym}[true]{% + \ifglsacronym + \renewcommand{\@gls@do@acronymsdef}{% + \DeclareAcronymList{acronym}% + \newglossary[alg]{acronym}{acr}{acn}{\acronymname}% + \renewcommand*{\acronymtype}{acronym}% + \newcommand*{\gls@tr@set@acronym@toctitle}{% + \translatelet{\glossarytoctitle}{Acronyms}% + }% + }% + \else + \let\@gls@do@acronymsdef\relax + \fi +} +\AtBeginDocument{% + \ifglsacronym + \ifbool{glscompatible-3.07}% + {}% + {% + \providecommand*{\printacronyms}[1][]{% + \printglossary[type=\acronymtype,#1]}% + }% + \fi +} +\newcommand*{\@gls@do@acronymsdef}{} +\@gls@declareoption{acronyms}{% + \glsacronymtrue + \def\@gls@do@acronymsdef{% + \DeclareAcronymList{acronym}% + \newglossary[alg]{acronym}{acr}{acn}{\acronymname}% + \renewcommand*{\acronymtype}{acronym}% + \newcommand*{\gls@tr@set@acronym@toctitle}{% + \translatelet{\glossarytoctitle}{Acronyms}% + }% + }% +} +\newcommand*{\@glsacronymlists}{} +\newcommand*{\@addtoacronymlists}[1]{% + \ifx\@glsacronymlists\@empty + \protected@xdef\@glsacronymlists{#1}% + \else + \protected@xdef\@glsacronymlists{\@glsacronymlists,#1}% + \fi +} +\newcommand*{\DeclareAcronymList}[1]{% + \glsIfListOfAcronyms{#1}{}{\@addtoacronymlists{#1}}% +} +\newcommand{\glsIfListOfAcronyms}[1]{% + \edef\@do@gls@islistofacronyms{% + \noexpand\@gls@islistofacronyms{#1}{\@glsacronymlists}}% + \@do@gls@islistofacronyms +} +\newcommand{\@gls@islistofacronyms}[4]{% + \def\gls@islistofacronyms##1,#1,##2\end@gls@islistofacronyms{% + \def\@gls@before{##1}\def\@gls@after{##2}}% + \gls@islistofacronyms,#2,#1,\@nil\end@gls@islistofacronyms + \ifx\@gls@after\@nnil + #4% + \else + #3% + \fi +} +\newif\if@glsisacronymlist +\newcommand*{\gls@checkisacronymlist}[1]{% + \glsIfListOfAcronyms{#1}% + {\@glsisacronymlisttrue}{\@glsisacronymlistfalse}% +} +\newcommand*{\SetAcronymLists}[1]{% + \renewcommand*{\@glsacronymlists}{#1}% +} +\define@key{glossaries.sty}{acronymlists}{% + \DeclareAcronymList{#1}% +} +\newcommand{\glscounter}{page} +\define@key{glossaries.sty}{counter}{% + \renewcommand*{\glscounter}{#1}% +} +\newcommand*{\@gls@nohyperlist}{} +\newcommand*{\GlsDeclareNoHyperList}[1]{% + \ifdefempty\@gls@nohyperlist + {% + \renewcommand*{\@gls@nohyperlist}{#1}% + }% + {% + \appto\@gls@nohyperlist{,#1}% + }% +} +\define@key{glossaries.sty}{nohypertypes}{% + \GlsDeclareNoHyperList{#1}% +} +\newcommand*{\GlossariesWarning}[1]{% + \PackageWarning{glossaries}{#1}% +} +\newcommand*{\GlossariesWarningNoLine}[1]{% + \PackageWarningNoLine{glossaries}{#1}% +} +\newcommand{\glosortentrieswarning}{% + \typeout{Using TeX to sort glossary entries---this may + take a while}% +} +\@gls@declareoption{nowarn}{% + \if@gls@debug + \GlossariesWarning{Warnings can't be suppressed in debug mode}% + \else + \renewcommand*{\GlossariesWarning}[1]{}% + \renewcommand*{\GlossariesWarningNoLine}[1]{}% + \renewcommand*{\glosortentrieswarning}{}% + \renewcommand*{\@gls@missinglang@warn}[2]{}% + \fi +} +\newcommand*{\@gls@missinglang@warn}[2]{% + \PackageWarningNoLine{glossaries}% + {No language module detected for `#1'.\MessageBreak + Language modules need to be installed separately.\MessageBreak + Please check on CTAN for a bundle called\MessageBreak + `glossaries-#2' or similar}% +} +\@gls@declareoption{nolangwarn}{% + \renewcommand*{\@gls@missinglang@warn}[2]{}% +} +\newcommand*{\@gls@warnonglossdefined}{% + \GlossariesWarning{Overriding \string\printglossary}% +} +\newcommand*{\@gls@warnontheglossdefined}{% + \GlossariesWarning{Overriding `theglossary' environment}% +} +\@gls@declareoption{noredefwarn}{% + \renewcommand*{\@gls@warnonglossdefined}{}% + \renewcommand*{\@gls@warnontheglossdefined}{}% +} +\newcommand*{\@gls@sanitizedesc}{% +} +\newcommand*{\glssetexpandfield}[1]{% + \csdef{gls@assign@#1@field}##1##2{% + \@@gls@expand@field{##1}{#1}{##2}% + }% +} +\newcommand*{\glssetnoexpandfield}[1]{% + \csdef{gls@assign@#1@field}##1##2{% + \@@gls@noexpand@field{##1}{#1}{##2}% + }% +} +\glssetexpandfield{type} +\glssetnoexpandfield{desc} +\glssetnoexpandfield{descplural} +\newcommand*{\@gls@sanitizename}{} +\glssetnoexpandfield{name} +\newcommand*{\@gls@sanitizesymbol}{} +\glssetnoexpandfield{symbol} +\glssetnoexpandfield{symbolplural} +\newcommand*{\@gls@sanitizesort}{% + \ifglssanitizesort + \@@gls@sanitizesort + \else + \@@gls@nosanitizesort + \fi +} +\newcommand*\@@gls@sanitizesort{% + \@onelevel@sanitize\@glo@sort +} +\newcommand*{\@@gls@nosanitizesort}{} +\newcommand*\@gls@noidx@sanitizesort{% + \ifdefvoid\@glo@sort + {}% + {% + \expandafter\@@gls@noidx@sanitizesort\@glo@sort\gls@end@sanitizesort + }% +} +\def\@@gls@noidx@sanitizesort#1#2\gls@end@sanitizesort{% + \def\@glo@sort{#1#2}% + \@onelevel@sanitize\@glo@sort +} +\newcommand*{\@@gls@noidx@nosanitizesort}{% + \ifdefvoid\@glo@sort + {}% + {% + \expandafter\@@gls@noidx@no@sanitizesort\@glo@sort\gls@end@sanitizesort + }% +} +\def\@@gls@noidx@no@sanitizesort#1#2\gls@end@sanitizesort{% + \bgroup + \glsnoidxstripaccents + \protected@xdef\@@glo@sort{#1#2}% + \egroup + \let\@glo@sort\@@glo@sort +} +\newcommand*\glsnoidxstripaccents{% + \let\IeC\@firstofone + \let\add@accent@\@secondoftwo + \let\@text@composite@x\@secondoftwo + \let\@tabacckludge\@secondoftwo + \expandafter\def\csname \encodingdefault-cmd\endcsname##1##2##3{##3}% + \expandafter\def\csname OT1-cmd\endcsname##1##2##3{##3}% + \expandafter\def\csname T1-cmd\endcsname##1##2##3{##3}% + \expandafter\def\csname PD1-cmd\endcsname##1##2##3{##3}% + \let\'\@firstofone + \let\`\@firstofone + \let\^\@firstofone + \let\"\@firstofone + \let\u\@firstofone + \let\t\@firstofone + \let\d\@firstofone + \let\r\@firstofone + \let\=\@firstofone + \let\.\@firstofone + \let\~\@firstofone + \let\v\@firstofone + \let\H\@firstofone + \let\c\@firstofone + \let\b\@firstofone + \let\a\@secondoftwo + \def\AE{AE}% + \def\ae{ae}% + \def\OE{OE}% + \def\oe{oe}% + \def\AA{AA}% + \def\aa{aa}% + \def\L{L}% + \def\l{l}% + \def\O{O}% + \def\o{o}% + \def\SS{SS}% + \def\ss{ss}% + \def\th{th}% + \def\TH{TH}% + \def\dh{dh}% + \def\DH{DH}% +} +\@ifl@t@r\fmtversion{2019/10/01} +{% + \appto\glsnoidxstripaccents{\let\UTFviii@two@octets\UTFviii@two@octets@combine}% +} +{} +\define@boolkey[gls]{sanitize}{description}[true]{% + \GlossariesWarning{sanitize={description} package option deprecated}% + \ifgls@sanitize@description + \glssetnoexpandfield{desc}% + \glssetnoexpandfield{descplural}% + \else + \glssetexpandfield{desc}% + \glssetexpandfield{descplural}% + \fi +} +\define@boolkey[gls]{sanitize}{name}[true]{% + \GlossariesWarning{sanitize={name} package option deprecated}% + \ifgls@sanitize@name + \glssetnoexpandfield{name}% + \else + \glssetexpandfield{name}% + \fi +} +\define@boolkey[gls]{sanitize}{symbol}[true]{% + \GlossariesWarning{sanitize={symbol} package option deprecated}% + \ifgls@sanitize@symbol + \glssetnoexpandfield{symbol}% + \glssetnoexpandfield{symbolplural}% + \else + \glssetexpandfield{symbol}% + \glssetexpandfield{symbolplural}% + \fi +} +\define@boolkey{glossaries.sty}[gls]{sanitizesort}[true]{% + \ifglssanitizesort + \glssetnoexpandfield{sortvalue}% + \renewcommand*{\@gls@noidx@setsanitizesort}{% + \glssanitizesorttrue + \glssetnoexpandfield{sortvalue}% + }% + \else + \glssetexpandfield{sortvalue}% + \renewcommand*{\@gls@noidx@setsanitizesort}{% + \glssanitizesortfalse + \glssetexpandfield{sortvalue}% + }% + \fi +} +\glssanitizesorttrue +\glssetnoexpandfield{sortvalue}% +\newcommand*{\@gls@noidx@setsanitizesort}{% + \glssanitizesortfalse + \glssetexpandfield{sortvalue}% +} +\define@choicekey[gls]{sanitize}{sort}{true,false}[true]{% + \setbool{glssanitizesort}{#1}% + \ifglssanitizesort + \glssetnoexpandfield{sortvalue}% + \else + \glssetexpandfield{sortvalue}% + \fi + \GlossariesWarning{sanitize={sort} package option + deprecated. Use sanitizesort instead}% +} +\define@key{glossaries.sty}{sanitize}[description=true,symbol=true,name=true]{% + \ifthenelse{\equal{#1}{none}}% + {% + \GlossariesWarning{sanitize package option deprecated}% + \glssetexpandfield{name}% + \glssetexpandfield{symbol}% + \glssetexpandfield{symbolplural}% + \glssetexpandfield{desc}% + \glssetexpandfield{descplural}% + }% + {% + \setkeys[gls]{sanitize}{#1}% + }% +} +\newif\ifglstranslate +\newcommand*\@gls@usetranslator{% + \@ifpackageloaded{polyglossia}% + {% + \let\glsifusetranslator\@secondoftwo + }% + {% + \@ifpackageloaded{babel}% + {% + \IfFileExists{translator.sty}% + {% + \RequirePackage{translator}% + \let\glsifusetranslator\@firstoftwo + }% + {}% + }% + {}% + }% +} +\newcommand{\glsifusedtranslatordict}[3]{% + \glsifusetranslator + {\ifcsdef{ver@glossaries-dictionary-#1.dict}{#2}{#3}}% + {#3}% +} +\@gls@declareoption{notranslate}{% + \glstranslatefalse + \let\@gls@usetranslator\relax + \let\glsifusetranslator\@secondoftwo +} +\define@choicekey{glossaries.sty}{translate}% + [\gls@translate@val\gls@translate@nr]% + {true,false,babel}[true]% + {% + \ifcase\gls@translate@nr\relax + \glstranslatetrue + \renewcommand*\@gls@usetranslator{% + \@ifpackageloaded{polyglossia}% + {% + \let\glsifusetranslator\@secondoftwo + }% + {% + \@ifpackageloaded{babel}% + {% + \IfFileExists{translator.sty}% + {% + \RequirePackage{translator}% + \let\glsifusetranslator\@firstoftwo + }% + {}% + }% + {}% + }% + }% + \or + \glstranslatefalse + \let\@gls@usetranslator\relax + \let\glsifusetranslator\@secondoftwo + \or + \glstranslatetrue + \let\@gls@usetranslator\relax + \let\glsifusetranslator\@secondoftwo + \fi + } +\glstranslatefalse +\let\glsifusetranslator\@secondoftwo +\@ifpackageloaded{translator}% +{% + \glstranslatetrue + \let\glsifusetranslator\@firstoftwo +}% +{% + \@for\gls@thissty:=tracklang,babel,ngerman,polyglossia\do + { + \@ifpackageloaded{\gls@thissty}% + {% + \glstranslatetrue + \@endfortrue + }% + {}% + } +} +\define@boolkey{glossaries.sty}[gls]{indexonlyfirst}[true]{} +\glsindexonlyfirstfalse +\define@boolkey{glossaries.sty}[gls]{hyperfirst}[true]{} +\glshyperfirsttrue +\newcommand*{\@gls@setacrstyle}{} +\define@boolkey{glossaries.sty}[glsacr]{footnote}[true]{% + \ifbool{glsacrdescription}% + {}% + {% + \renewcommand*{\@gls@sanitizedesc}{}% + }% + \renewcommand*{\@gls@setacrstyle}{\SetAcronymStyle}% +} +\define@boolkey{glossaries.sty}[glsacr]{description}[true]{% + \renewcommand*{\@gls@sanitizesymbol}{}% + \renewcommand*{\@gls@setacrstyle}{\SetAcronymStyle}% +} +\define@boolkey{glossaries.sty}[glsacr]{smallcaps}[true]{% + \renewcommand*{\@gls@sanitizesymbol}{}% + \renewcommand*{\@gls@setacrstyle}{\SetAcronymStyle}% +} +\define@boolkey{glossaries.sty}[glsacr]{smaller}[true]{% + \renewcommand*{\@gls@sanitizesymbol}{}% + \renewcommand*{\@gls@setacrstyle}{\SetAcronymStyle}% +} +\define@boolkey{glossaries.sty}[glsacr]{dua}[true]{% + \renewcommand*{\@gls@sanitizesymbol}{}% + \renewcommand*{\@gls@setacrstyle}{\SetAcronymStyle}% +} +\define@boolkey{glossaries.sty}[glsacr]{shortcuts}[true]{} +\newcommand*{\glsorder}{word} +\newcommand*{\@glsorder}[1]{} +\define@choicekey{glossaries.sty}{order}{word,letter}{% + \def\glsorder{#1}} +\newif\ifglsxindy +\glsxindyfalse +\@gls@declareoption{makeindex}{\glsxindyfalse} +\define@boolkey[gls]{xindy}{glsnumbers}[true]{} +\gls@xindy@glsnumberstrue +\def\@xdy@main@language{\languagename}% +\define@key[gls]{xindy}{language}{\def\@xdy@main@language{#1}} +\ifcsundef{inputencodingname}{% + \def\gls@codepage{}}{% + \def\gls@codepage{\inputencodingname} +} +\define@key[gls]{xindy}{codepage}{\def\gls@codepage{#1}} +\define@key{glossaries.sty}{xindy}[]{% + \glsxindytrue + \setkeys[gls]{xindy}{#1}% +} +\@gls@declareoption{xindygloss}{% + \glsxindytrue +} +\@gls@declareoption{xindynoglsnumbers}{% + \glsxindytrue + \gls@xindy@glsnumbersfalse +} +\providecommand{\@domakeglossaries}[1]{#1} +\@gls@declareoption{disablemakegloss}{% + \ifdefequal\makeglossaries\@no@makeglossaries + {% + \GlossariesWarning{Option `disablemakegloss' has no effect + (\string\makenoidxglossaries\space has already been used)}% + }% + {% + \ifdefequal\@makeglossary\@gobble + {% + \GlossariesWarning{Option `disablemakegloss' has no effect + (\string\makeglossaries\space has already been used)}% + }% + {% + \renewcommand{\@domakeglossaries}[1]{% + \PackageInfo{glossaries}{\string\makeglossaries\space and + \string\makenoidxglossaries\space have been disabled}% + }% + }% + }% +} +\@gls@declareoption{restoremakegloss}{% + \ifdefequal\makeglossaries\@no@makeglossaries + {% + \GlossariesWarning{Option `restoremakegloss' has no effect + (\string\makenoidxglossaries\space has already been used)}% + }% + {% + \ifdefequal\@makeglossary\@gobble + {% + \GlossariesWarning{Option `restoremakegloss' has no effect + (\string\makeglossaries\space has already been used)}% + }% + {% + \PackageInfo{glossaries}{\string\makeglossaries\space and + \string\makenoidxglossaries\space have been restored}% + \let\@domakeglossaries\@firstofone + }% + }% +} +\newcommand*{\@do@write@glslabels}{% + \AtEndDocument{\@@do@write@glslabels}% + \let\@do@write@glslabels\relax +} +\newcommand*{\@@do@write@glslabels}{% + \newwrite\@gls@labelsfile + \immediate\openout\@gls@labelsfile=\jobname.glslabels + \forallglsentries[\@glo@types,\@ignored@glossaries]{\@glsentry}% + {\ifdefempty{\@glsentry}{}{\immediate\write\@gls@labelsfile{\@glsentry}}}% + \immediate\closeout\@gls@labelsfile +} +\@gls@declareoption{writeglslabels}{\@do@write@glslabels} +\newif\ifglsautomake +\newcommand{\gls@automake@nr}{1} +\define@choicekey{glossaries.sty}{automake}% + [\gls@automake@val\gls@automake@nr]{true,false,immediate}[true]{% + \ifnum\gls@automake@nr=1\relax + \glsautomakefalse + \else + \glsautomaketrue + \fi + \ifglsautomake + \renewcommand*{\@gls@doautomake}{% + \PackageError{glossaries}{You must use + \string\makeglossaries\space with automake=true} + {% + Either remove the automake=true setting or + add \string\makeglossaries\space to your document preamble.% + }% + }% + \else + \renewcommand*{\@gls@doautomake}{}% + \fi +} +\glsautomakefalse +\newcommand*{\@gls@doautomake}{} +\AtEndDocument{\@gls@doautomake} +\define@boolkey{glossaries.sty}[gls]{savewrites}[true]{% + \ifglssavewrites + \renewcommand*{\glswritefiles}{\@glswritefiles}% + \else + \let\glswritefiles\@empty + \fi +} +\glssavewritesfalse +\let\glswritefiles\@empty +\define@boolkey{glossaries.sty}[gls]{compatible-3.07}[true]{} +\boolfalse{glscompatible-3.07} +\define@boolkey{glossaries.sty}[gls]{compatible-2.07}[true]{% + \ifbool{glscompatible-2.07}% + {% + \booltrue{glscompatible-3.07}% + }% + {}% +} +\boolfalse{glscompatible-2.07} +\let\gls@original@makeglossary\makeglossary +\let\gls@original@glossary\glossary +\def\makeglossary{% + \GlossariesWarning{Use of \string\makeglossary\space with + glossaries.sty is \MessageBreak deprecated. Use \string\makeglossaries\space + instead. If you \MessageBreak need the original definition of + \string\makeglossary\space use \MessageBreak the package options + kernelglossredefs=false (to \MessageBreak restore the former definition of + \string\makeglossary) and \MessageBreak nomain (if the file extensions cause a + conflict)}% + \makeglossaries +} +\newcommand*{\@gls@override@glossary}[1][main]{% + \GlossariesWarning{Use of \string\glossary\space with + glossaries.sty is deprecated. \MessageBreak Indexing should be performed + with the user level \MessageBreak commands, such as \string\gls\space or + \string\glsadd. If you need the \MessageBreak original definition of + \string\glossary\space use the package \MessageBreak options + kernelglossredefs=false (to restore the \MessageBreak former definition of + \string\glossary) and nomain (if the \MessageBreak file extensions cause a + conflict)}% + \gls@glossary{#1}% +} +\if@gls@docloaded +\else + \def\glossary{\@gls@override@glossary} +\fi +\define@choicekey{glossaries.sty}{kernelglossredefs}% + [\gls@debug@val\gls@debug@nr]{true,false,nowarn}[true]% +{% + \ifcase\gls@debug@nr\relax + \def\glossary{\@gls@override@glossary}% + \def\makeglossary{% + \GlossariesWarning{Use of \string\makeglossary\space with + glossaries.sty is deprecated. Use \string\makeglossaries\space + instead. If you need the original definition of + \string\makeglossary\space use the package options + kernelglossredefs=false (to prevent redefinition of + \string\makeglossary) and nomain (if the file extensions cause a + conflict)}% + \makeglossaries + }% + \or + \let\glossary\gls@original@glossary + \let\makeglossary\gls@original@makeglossary + \or + \def\makeglossary{\makeglossaries}% + \renewcommand*{\@gls@override@glossary}[1][main]{% + \gls@glossary{##1}% + }% + \fi +} +\@gls@declareoption{symbols}{% + \let\@gls@do@symbolsdef\@gls@symbolsdef +} +\newcommand*{\@gls@do@symbolsdef}{} +\newcommand*{\@gls@symbolsdef}{% + \newglossary[slg]{symbols}{sls}{slo}{\glssymbolsgroupname}% + \newcommand*{\printsymbols}[1][]{\printglossary[type=symbols,##1]}% + \newcommand*{\gls@tr@set@symbols@toctitle}{% + \translatelet{\glossarytoctitle}{Symbols (glossaries)}% + }% +}% +\@gls@declareoption{numbers}{% + \let\@gls@do@numbersdef\@gls@numbersdef +} +\newcommand*{\@gls@do@numbersdef}{} +\newcommand*{\@gls@numbersdef}{% + \newglossary[nlg]{numbers}{nls}{nlo}{\glsnumbersgroupname}% + \newcommand*{\printnumbers}[1][]{\printglossary[type=numbers,##1]}% + \newcommand*{\gls@tr@set@numbers@toctitle}{% + \translatelet{\glossarytoctitle}{Numbers (glossaries)}% + }% +}% +\@gls@declareoption{index}{% + \ifx\@gls@do@indexdef\@empty + \let\@gls@do@indexdef\@gls@indexdef + \fi +} +\@gls@declareoption{noglossaryindex}{% + \let\@gls@do@indexdef\relax +} +\newcommand*{\@gls@do@indexdef}{} +\newcommand*{\@gls@indexdef}{% + \newglossary[ilg]{index}{ind}{idx}{\indexname}% + \newcommand*{\printindex}[1][]{\printglossary[type=index,##1]}% + \newcommand*{\newterm}[2][]{% + \newglossaryentry{##2}% + {type={index},name={##2},description={\nopostdesc},##1}} + \let\@gls@do@indexdef\relax +}% +\@for\CurrentOption :=\@declaredoptions\do{% + \ifx\CurrentOption\@empty + \else + \@expandtwoargs + \in@ {,\CurrentOption ,}{,\@classoptionslist,\@curroptions,}% + \ifin@ + \@use@ption + \expandafter \let\csname ds@\CurrentOption\endcsname\@empty + \fi + \fi +} +\ProcessOptionsX +\RequirePackage{glossaries-compatible-307} +\disable@keys{glossaries.sty}{compatible-2.07,% + xindy,xindygloss,xindynoglsnumbers,makeindex,% + acronym,translate,notranslate,nolong,nosuper,notree,nostyles,% + nomain,noglossaryindex} +\newcommand*{\setupglossaries}[1]{% + \renewcommand*{\@gls@setacrstyle}{}% + \ifglsacrshortcuts + \def\@gls@setupshortcuts{\glsacrshortcutstrue}% + \else + \def\@gls@setupshortcuts{% + \ifglsacrshortcuts + \DefineAcronymSynonyms + \fi + }% + \fi + \glsacrshortcutsfalse + \let\@gls@do@numbersdef\relax + \let\@gls@do@symbolssdef\relax + \let\@gls@do@indexdef\relax + \let\@gls@do@acronymsdef\relax + \ifglsentrycounter + \let\@gls@doentrycounterdef\relax + \else + \let\@gls@doentrycounterdef\@gls@define@glossaryentrycounter + \fi + \ifglssubentrycounter + \let\@gls@dosubentrycounterdef\relax + \else + \let\@gls@dosubentrycounterdef\@gls@define@glossarysubentrycounter + \fi + \setkeys{glossaries.sty}{#1}% + \@gls@setacrstyle + \@gls@setupshortcuts + \@gls@do@acronymsdef + \@gls@do@numbersdef + \@gls@do@symbolssdef + \@gls@do@indexdef + \@gls@doentrycounterdef + \@gls@dosubentrycounterdef +} +\ifthenelse{\equal{\glscounter}{section}}% +{% + \ifcsundef{chapter}{}% + {% + \let\@gls@old@chapter\@chapter + \def\@chapter[#1]#2{\@gls@old@chapter[{#1}]{#2}% + \ifcsundef{hyperdef}{}{\hyperdef{section}{\thesection}{}}}% + }% +}% +{} +\newcommand*{\@gls@onlypremakeg}{} +\newcommand*{\@onlypremakeg}[1]{% + \ifx\@gls@onlypremakeg\@empty + \def\@gls@onlypremakeg{#1}% + \else + \expandafter\toks@\expandafter{\@gls@onlypremakeg}% + \edef\@gls@onlypremakeg{\the\toks@,\noexpand#1}% + \fi +} +\newcommand*{\@disable@onlypremakeg}{% +\@for\@thiscs:=\@gls@onlypremakeg\do{% + \expandafter\@disable@premakecs\@thiscs% +}} +\newcommand*{\@disable@premakecs}[1]{% + \def#1{\PackageError{glossaries}{\string#1\space may only be + used before \string\makeglossaries}{You can't use + \string#1\space after \string\makeglossaries}}% +} +\providecommand*{\glossaryname}{Glossary} +\providecommand*{\acronymname}{Acronyms} +\newcommand*{\glssettoctitle}[1]{% + \def\glossarytoctitle{\csname @glotype@#1@title\endcsname}} +\providecommand*{\entryname}{Notation} +\providecommand*{\descriptionname}{Description} +\providecommand*{\symbolname}{Symbol} +\providecommand*{\pagelistname}{Page List} +\providecommand*{\glssymbolsgroupname}{Symbols} +\providecommand*{\glsnumbersgroupname}{Numbers} +\newcommand*{\glspluralsuffix}{s} +\newcommand*{\glsacrpluralsuffix}{\glspluralsuffix} +\newcommand*{\glsupacrpluralsuffix}{\glstextup{\glsacrpluralsuffix}} +\providecommand*{\seename}{see} +\providecommand*{\andname}{\&} +\newcommand*{\RequireGlossariesLang}[1]{% + \@ifundefined{ver@glossaries-#1.ldf}{\input{glossaries-#1.ldf}}{}% +} +\newcommand*{\ProvidesGlossariesLang}[1]{% + \ProvidesFile{glossaries-#1.ldf}% +} +\newcommand*{\addglossarytocaptions}[1]{} +\ifglstranslate + \RequirePackage{tracklang} + \@gls@usetranslator + \@ifpackageloaded{translator} + {% + \ifboolexpr + { + test {\ifdefstring{\trans@languages}{English}} + and not + test {\ifdefstring{bbl@loaded}{english}} + } + {% + \let\glsifusetranslator\@secondoftwo + }% + {% + \usedictionary{glossaries-dictionary}% + \renewcommand*{\addglossarytocaptions}[1]{% + \ifcsundef{captions#1}{}% + {% + \expandafter\let\expandafter\@gls@tmp\csname captions#1\endcsname + \expandafter\toks@\expandafter{\@gls@tmp + \renewcommand*{\glossaryname}{\translate{Glossary}}% + }% + \expandafter\edef\csname captions#1\endcsname{\the\toks@}% + }% + }% + }% + }% + {}% + \AnyTrackedLanguages + {% + \ForEachTrackedDialect{\this@dialect}{% + \IfTrackedLanguageFileExists{\this@dialect}% + {glossaries-}% prefix + {.ldf}% + {% + \RequireGlossariesLang{\CurrentTrackedTag}% + }% + {% + \@gls@missinglang@warn\this@dialect\CurrentTrackedLanguage + }% + }% + }% + {}% + \glsifusetranslator + {% + \renewcommand*{\glssettoctitle}[1]{% + \ifcsdef{gls@tr@set@#1@toctitle}% + {% + \csuse{gls@tr@set@#1@toctitle}% + }% + {% + \def\glossarytoctitle{\csname @glotype@#1@title\endcsname}% + }% + }% + \renewcommand*{\glossaryname}{\translate{Glossary}}% + \renewcommand*{\acronymname}{\translate{Acronyms}}% + \renewcommand*{\entryname}{\translate{Notation (glossaries)}}% + \renewcommand*{\descriptionname}{% + \translate{Description (glossaries)}}% + \renewcommand*{\symbolname}{\translate{Symbol (glossaries)}}% + \renewcommand*{\pagelistname}{% + \translate{Page List (glossaries)}}% + \renewcommand*{\glssymbolsgroupname}{% + \translate{Symbols (glossaries)}}% + \renewcommand*{\glsnumbersgroupname}{% + \translate{Numbers (glossaries)}}% + }{}% +\fi +\DeclareRobustCommand*{\nopostdesc}{} +\newcommand*{\@nopostdesc}{% + \let\org@glspostdescription\glspostdescription + \def\glspostdescription{% + \let\glspostdescription\org@glspostdescription}% +} +\newcommand*{\@no@post@desc}{\nopostdesc} +\newcommand{\glspar}{\par} +\newcommand{\setStyleFile}[1]{% + \renewcommand*{\gls@istfilebase}{#1}% + \ifglsxindy + \def\istfilename{\gls@istfilebase.xdy} + \else + \def\istfilename{\gls@istfilebase.ist} + \fi +} +\@onlypremakeg\setStyleFile +\ifglsxindy + \def\istfilename{\gls@istfilebase.xdy} +\else + \def\istfilename{\gls@istfilebase.ist} +\fi +\newcommand*{\gls@istfilebase}{\jobname} +\newcommand*{\@istfilename}[1]{} +\newcommand*{\glscompositor}{.} +\newcommand*{\glsSetCompositor}[1]{% + \renewcommand*{\glscompositor}{#1}} +\@onlypremakeg\glsSetCompositor +\newcommand*{\@glsAlphacompositor}{\glscompositor} +\ifglsxindy + \newcommand*\glsSetAlphaCompositor[1]{% + \renewcommand*\@glsAlphacompositor{#1}} +\else + \newcommand*\glsSetAlphaCompositor[1]{% + \glsnoxindywarning\glsSetAlphaCompositor} +\fi +\@onlypremakeg\glsSetAlphaCompositor +\newcommand*{\gls@suffixF}{} +\newcommand*{\glsSetSuffixF}[1]{% + \renewcommand*{\gls@suffixF}{#1}} +\@onlypremakeg\glsSetSuffixF +\newcommand*{\gls@suffixFF}{} +\newcommand*{\glsSetSuffixFF}[1]{% + \renewcommand*{\gls@suffixFF}{#1}% +} +\ifcsundef{hyperlink}% +{% + \newcommand*{\glsnumberformat}[1]{#1}% +}% +{% + \newcommand*{\glsnumberformat}[1]{\glshypernumber{#1}}% +} +\newcommand{\delimN}{, } +\newcommand{\delimR}{--} +\newcommand*{\glossarypreamble}{% + \csuse{@glossarypreamble@\currentglossary}% +} +\newcommand{\setglossarypreamble}[2][\glsdefaulttype]{% + \ifglossaryexists*{#1}% + {\csgdef{@glossarypreamble@#1}{#2}}% + {\GlossariesWarning{Glossary `#1' is not defined}}% +} +\newcommand*{\glossarypostamble}{} +\newcommand*{\glossarysection}[2][\@gls@title]{% + \def\@gls@title{#2}% + \ifcsundef{phantomsection}% + {% + \@glossarysection{#1}{#2}% + }% + {% + \@p@glossarysection{#1}{#2}% + }% + \glsglossarymark{\glossarytoctitle}% +} +\ifcsundef{glossarymark}% +{% + \newcommand{\glsglossarymark}[1]{\glossarymark{#1}} +}% +{% + \@ifclassloaded{memoir} + {% + \newcommand{\glsglossarymark}[1]{% + \ifglsucmark + \markboth{\memUChead{#1}}{\memUChead{#1}}% + \else + \markboth{#1}{#1}% + \fi + } + }% + {% + \newcommand{\glsglossarymark}[1]{% + \ifglsucmark + \@mkboth{\mfirstucMakeUppercase{#1}}{\mfirstucMakeUppercase{#1}}% + \else + \@mkboth{#1}{#1}% + \fi + } + } +} +\providecommand{\glossarymark}[1]{% + \ifglsucmark + \@mkboth{\mfirstucMakeUppercase{#1}}{\mfirstucMakeUppercase{#1}}% + \else + \@mkboth{#1}{#1}% + \fi +} +\newcommand*{\setglossarysection}[1]{% +\setkeys{glossaries.sty}{section=#1}} +\newcommand*{\@glossarysection}[2]{% + \ifdefempty\@@glossarysecstar + {% + \csname\@@glossarysec\endcsname[#1]{#2}% + }% + {% + \csname\@@glossarysec\endcsname*{#2}% + \@gls@toc{#1}{\@@glossarysec}% + }% + \@@glossaryseclabel +} +\newcommand*{\@p@glossarysection}[2]{% + \glsclearpage + \phantomsection + \ifdefempty\@@glossarysecstar + {% + \csname\@@glossarysec\endcsname{#2}% + }% + {% + \@gls@toc{#1}{\@@glossarysec}% + \csname\@@glossarysec\endcsname*{#2}% + }% + \@@glossaryseclabel +} +\newcommand*{\gls@doclearpage}{% + \ifthenelse{\equal{\@@glossarysec}{chapter}}% + {% + \ifcsundef{cleardoublepage}% + {% + \clearpage + }% + {% + \ifcsdef{if@openright}% + {% + \if@openright + \cleardoublepage + \else + \clearpage + \fi + }% + {% + \cleardoublepage + }% + }% + }% + {}% +} +\newcommand*{\glsclearpage}{\gls@doclearpage} +\newcommand*{\@gls@toc}[2]{% + \ifglstoc + \ifglsnumberline + \addcontentsline{toc}{#2}{\protect\numberline{}#1}% + \else + \addcontentsline{toc}{#2}{#1}% + \fi + \fi +} +\newcommand*{\glsnoxindywarning}[1]{% + \GlossariesWarning{Not in xindy mode --- ignoring \string#1}% +} +\newcommand*{\glsnomakeindexwarning}[1]{% + \GlossariesWarning{Not in makeindex mode --- ignoring \string#1}% +} +\ifglsxindy + \edef\@xdyattributes{\string"default\string"}% +\fi +\ifglsxindy + \edef\@xdyattributelist{}% +\fi +\ifglsxindy + \def\@xdylocref{} +\fi +\newcommand*{\@gls@ifinlist}[4]{% + \def\@do@ifinlist##1,#1,##2\end@doifinlist{% + \def\@gls@listsuffix{##2}% + \ifx\@gls@listsuffix\@empty + #4% + \else + #3% + \fi + }% + \@do@ifinlist,#2,#1,\end@doifinlist +} +\ifglsxindy + \newcommand*{\@xdycounters}{\glscounter} + \newcommand*\GlsAddXdyCounters[1]{% + \@for\@gls@ctr:=#1\do{% + \edef\@do@addcounter{% + \noexpand\@gls@ifinlist{\@gls@ctr}{\@xdycounters}{}% + {% + \noexpand\edef\noexpand\@xdycounters{\@xdycounters,% + \noexpand\@gls@ctr}% + }% + }% + \@do@addcounter + } + } + \@onlypremakeg\GlsAddXdyCounters +\else + \newcommand*\GlsAddXdyCounters[1]{% + \glsnoxindywarning\GlsAddXdyAttribute + } +\fi +\newcommand*\@disabled@glsaddxdycounters{% + \PackageError{glossaries}{\string\GlsAddXdyCounters\space + can't be used after \string\GlsAddXdyAttribute}{Move all + occurrences of \string\GlsAddXdyCounters\space before the first + instance of \string\GlsAddXdyAttribute}% +} +\ifglsxindy + \newcommand*\@glsaddxdyattribute[2]{% + \edef\@xdyattributes{\@xdyattributes ^^J \string"#1\string" ^^J + \string"#2#1\string"}% + \expandafter\toks@\expandafter{\@xdylocref}% + \edef\@xdylocref{\the\toks@ ^^J% + (markup-locref + :open \string"\glstildechar n% + \expandafter\string\csname glsX#2X#1\endcsname + \string" ^^J + :close \string"\string" ^^J + :attr \string"#2#1\string")}% + \expandafter\gdef\csname glsX#2X#1\endcsname##1##2{% + \setentrycounter[##1]{#2}\csname #1\endcsname{##2}% + }% + } + \newcommand*\GlsAddXdyAttribute[1]{% + \ifx\@xdyattributelist\@empty + \edef\@xdyattributelist{#1}% + \else + \edef\@xdyattributelist{\@xdyattributelist,#1}% + \fi + \@for\@this@counter:=\@xdycounters\do{% + \protected@edef\gls@do@addxdyattribute{% + \noexpand\@glsaddxdyattribute{#1}{\@this@counter}% + } + \gls@do@addxdyattribute + }% + \let\GlsAddXdyCounters\@disabled@glsaddxdycounters + } + \@onlypremakeg\GlsAddXdyAttribute +\else + \newcommand*\GlsAddXdyAttribute[1]{% + \glsnoxindywarning\GlsAddXdyAttribute} +\fi +\ifglsxindy +\newcommand*{\@gls@addpredefinedattributes}{% + \GlsAddXdyAttribute{glsnumberformat} + \GlsAddXdyAttribute{textrm} + \GlsAddXdyAttribute{textsf} + \GlsAddXdyAttribute{texttt} + \GlsAddXdyAttribute{textbf} + \GlsAddXdyAttribute{textmd} + \GlsAddXdyAttribute{textit} + \GlsAddXdyAttribute{textup} + \GlsAddXdyAttribute{textsl} + \GlsAddXdyAttribute{textsc} + \GlsAddXdyAttribute{emph} + \GlsAddXdyAttribute{glshypernumber} + \GlsAddXdyAttribute{hyperrm} + \GlsAddXdyAttribute{hypersf} + \GlsAddXdyAttribute{hypertt} + \GlsAddXdyAttribute{hyperbf} + \GlsAddXdyAttribute{hypermd} + \GlsAddXdyAttribute{hyperit} + \GlsAddXdyAttribute{hyperup} + \GlsAddXdyAttribute{hypersl} + \GlsAddXdyAttribute{hypersc} + \GlsAddXdyAttribute{hyperemph} + \GlsAddXdyAttribute{glsignore} +} +\else + \let\@gls@addpredefinedattributes\relax +\fi +\def\@xdyuseralphabets{} +\ifglsxindy + \newcommand*{\GlsAddXdyAlphabet}[2]{% + \edef\@xdyuseralphabets{% + \@xdyuseralphabets ^^J + (define-alphabet "#1" (#2))}} +\else + \newcommand*{\GlsAddXdyAlphabet}[2]{% + \glsnoxindywarning\GlsAddXdyAlphabet} +\fi +\ifglsxindy + \newcommand*{\@gls@xdy@locationlist}{% + roman-page-numbers,% + Roman-page-numbers,% + arabic-page-numbers,% + alpha-page-numbers,% + Alpha-page-numbers,% + Appendix-page-numbers,% + arabic-section-numbers% + } + \protected@edef\@gls@roman{\@roman{0\string" + \string"roman-numbers-lowercase\string" :sep \string"}}% + \@onelevel@sanitize\@gls@roman + \edef\@tmp{\string" \string"roman-numbers-lowercase\string" + :sep \string"}% + \@onelevel@sanitize\@tmp + \ifx\@tmp\@gls@roman + \expandafter + \edef\csname @gls@xdy@Lclass@roman-page-numbers\endcsname{% + \string"roman-numbers-lowercase\string"% + }% + \else + \expandafter + \edef\csname @gls@xdy@Lclass@roman-page-numbers\endcsname{ + :sep \string"\@gls@roman\string"% + }% + \fi + \expandafter\def\csname @gls@xdy@Lclass@Roman-page-numbers\endcsname{% + \string"roman-numbers-uppercase\string"% + }% + \expandafter\def\csname @gls@xdy@Lclass@arabic-page-numbers\endcsname{% + \string"arabic-numbers\string"% + }% + \expandafter\def\csname @gls@xdy@Lclass@alpha-page-numbers\endcsname{% + \string"alpha\string"% + }% + \expandafter\def\csname @gls@xdy@Lclass@Alpha-page-numbers\endcsname{% + \string"ALPHA\string"% + }% + \expandafter\def\csname @gls@xdy@Lclass@Appendix-page-numbers\endcsname{% + \string"ALPHA\string" + :sep \string"\@glsAlphacompositor\string" + \string"arabic-numbers\string"% + } + \expandafter\def\csname @gls@xdy@Lclass@arabic-section-numbers\endcsname{% + \string"arabic-numbers\string" + :sep \string"\glscompositor\string" + \string"arabic-numbers\string"% + }% + \def\@xdyuserlocationdefs{} + \def\@xdyuserlocationnames{} +\fi +\ifglsxindy + \newcommand\@xdycrossrefhook{} +\fi +\ifglsxindy + \newcommand*{\GlsAddXdyLocation}[3][]{% + \def\@gls@tmp{#1}% + \ifx\@gls@tmp\@empty + \edef\@xdyuserlocationdefs{% + \@xdyuserlocationdefs ^^J% + (define-location-class \string"#2\string"^^J\space\space + \space(:sep \string"{}\glsopenbrace\string" #3 + :sep \string"\glsclosebrace\string")) + }% + \else + \edef\@xdyuserlocationdefs{% + \@xdyuserlocationdefs ^^J% + (define-location-class \string"#2\string"^^J\space\space + \space(:sep "\glsopenbrace" + #1 + :sep "\glsclosebrace\glsopenbrace" #3 + :sep "\glsclosebrace")) + }% + \fi + \edef\@xdyuserlocationnames{% + \@xdyuserlocationnames^^J\space\space\space + \string"#2\string"}% + } + \@onlypremakeg\GlsAddXdyLocation +\else + \newcommand*{\GlsAddXdyLocation}[2]{% + \glsnoxindywarning\GlsAddXdyLocation} +\fi +\ifglsxindy + \def\@xdylocationclassorder{^^J\space\space\space + \string"roman-page-numbers\string"^^J\space\space\space + \string"arabic-page-numbers\string"^^J\space\space\space + \string"arabic-section-numbers\string"^^J\space\space\space + \string"alpha-page-numbers\string"^^J\space\space\space + \string"Roman-page-numbers\string"^^J\space\space\space + \string"Alpha-page-numbers\string"^^J\space\space\space + \string"Appendix-page-numbers\string" + \@xdyuserlocationnames^^J\space\space\space + \string"see\string" + } +\fi +\ifglsxindy + \newcommand*\GlsSetXdyLocationClassOrder[1]{% + \def\@xdylocationclassorder{#1}} +\else + \newcommand*\GlsSetXdyLocationClassOrder[1]{% + \glsnoxindywarning\GlsSetXdyLocationClassOrder} +\fi +\ifglsxindy + \def\@xdysortrules{} +\fi +\ifglsxindy + \newcommand*\GlsAddSortRule[2]{% + \expandafter\toks@\expandafter{\@xdysortrules}% + \protected@edef\@xdysortrules{\the\toks@ ^^J + (sort-rule \string"#1\string" \string"#2\string")}% + } +\else + \newcommand*\GlsAddSortRule[2]{% + \glsnoxindywarning\GlsAddSortRule} +\fi +\ifglsxindy + \def\@xdyrequiredstyles{tex} +\fi +\ifglsxindy + \newcommand*\GlsAddXdyStyle[1]{% + \edef\@xdyrequiredstyles{\@xdyrequiredstyles,#1}}% +\else + \newcommand*\GlsAddXdyStyle[1]{% + \glsnoxindywarning\GlsAddXdyStyle} +\fi +\ifglsxindy + \newcommand*\GlsSetXdyStyles[1]{% + \edef\@xdyrequiredstyles{#1}} +\else + \newcommand*\GlsSetXdyStyles[1]{% + \glsnoxindywarning\GlsSetXdyStyles} +\fi +\newcommand*{\findrootlanguage}{} +\def\@xdylanguage#1#2{} +\ifglsxindy + \newcommand*\GlsSetXdyLanguage[2][\glsdefaulttype]{% + \ifglossaryexists{#1}{% + \expandafter\def\csname @xdy@#1@language\endcsname{#2}% + }{% + \PackageError{glossaries}{Can't set language type for + glossary type `#1' --- no such glossary}{% + You have specified a glossary type that doesn't exist}}} +\else + \newcommand*\GlsSetXdyLanguage[2][]{% + \glsnoxindywarning\GlsSetXdyLanguage} +\fi +\def\@gls@codepage#1#2{} +\ifglsxindy + \newcommand*{\GlsSetXdyCodePage}[1]{% + \renewcommand*{\gls@codepage}{#1}% + } + \AtBeginDocument{% + \ifx\gls@codepage\@empty + \@ifpackageloaded{fontspec}{\def\gls@codepage{utf8}}{}% + \fi + } +\else + \newcommand*{\GlsSetXdyCodePage}[1]{% + \glsnoxindywarning\GlsSetXdyCodePage} +\fi +\ifglsxindy + \ifgls@xindy@glsnumbers + \def\@xdylettergroups{(define-letter-group + \string"glsnumbers\string"^^J\space\space\space + :prefixes (\string"0\string" \string"1\string" + \string"2\string" \string"3\string" \string"4\string" + \string"5\string" \string"6\string" \string"7\string" + \string"8\string" \string"9\string")^^J\space\space\space + \@xdynumbergrouporder)} + \else + \def\@xdylettergroups{} + \fi +\fi + \newcommand*\GlsAddLetterGroup[2]{% + \expandafter\toks@\expandafter{\@xdylettergroups}% + \protected@edef\@xdylettergroups{\the\toks@^^J% + (define-letter-group \string"#1\string"^^J\space\space\space#2)}% + }% +\newcommand*{\forallglossaries}[3][\@glo@types]{% + \@for#2:=#1\do{\ifx#2\@empty\else#3\fi}% +} + +\newcommand*{\forallacronyms}[2]{% + \@for#1:=\@glsacronymlists\do{\ifx#1\@empty\else#2\fi}% +} +\newcommand*{\forglsentries}[3][\glsdefaulttype]{% + \edef\@@glo@list{\csname glolist@#1\endcsname}% + \@for#2:=\@@glo@list\do + {% + \ifdefempty{#2}{}{#3}% + }% +} +\newcommand*{\forallglsentries}[3][\@glo@types]{% + \expandafter\forallglossaries\expandafter[#1]{\@@this@glo@}% + {% + \forglsentries[\@@this@glo@]{#2}{#3}% + }% +} +\newcommand{\ifglossaryexists}{% + \@ifstar\s@ifglossaryexists\@ifglossaryexists +} +\newcommand{\@ifglossaryexists}[3]{% + \ifcsundef{@glotype@#1@out}{#3}{#2}% +} +\newcommand{\s@ifglossaryexists}[3]{% + \ifcsundef{glolist@#1}{#3}{#2}% +} +\newcommand*{\glsdetoklabel}[1]{#1} +\newcommand{\ifglsentryexists}[3]{% + \ifcsundef{glo@\glsdetoklabel{#1}@name}{#3}{#2}% +} +\newcommand*{\ifglsused}[3]{% + \ifbool{glo@\glsdetoklabel{#1}@flag}{#2}{#3}% +} +\newcommand{\glsdoifexists}[2]{% + \ifglsentryexists{#1}{#2}{% + \PackageError{glossaries}{Glossary entry `\glsdetoklabel{#1}' + has not been defined}{You need to define a glossary entry before you + can use it.}}% +} +\newcommand{\glsdoifnoexists}[2]{% + \ifglsentryexists{#1}{% + \PackageError{glossaries}{Glossary entry `\glsdetoklabel{#1}' has already + been defined}{}}{#2}% +} +\newcommand{\glsdoifexistsorwarn}[2]{% + \ifglsentryexists{#1}{#2}{% + \GlossariesWarning{Glossary entry `\glsdetoklabel{#1}' + has not been defined}% + }% +} +\newcommand{\glsdoifexistsordo}[3]{% + \ifglsentryexists{#1}{#2}{% + \PackageError{glossaries}{Glossary entry `\glsdetoklabel{#1}' + has not been defined}{You need to define a glossary entry before you + can use it.}% + #3% + }% +} +\newcommand{\doifglossarynoexistsordo}[3]{% + \ifglossaryexists*{#1}% + {% + \PackageError{glossaries}{Glossary type `#1' already exists}{}% + #3% + }% + {#2}% +} +\newrobustcmd{\ifglshaschildren}[3]{% + \glsdoifexists{#1}% + {% + \def\do@glshaschildren{#3}% + \edef\@gls@thislabel{\glsdetoklabel{#1}}% + \expandafter\forglsentries\expandafter + [\csname glo@\@gls@thislabel @type\endcsname] + {\glo@label}% + {% + \letcs\glo@parent{glo@\glo@label @parent}% + \ifdefequal\@gls@thislabel\glo@parent + {% + \def\do@glshaschildren{#2}% + \@endfortrue + }% + {}% + }% + \do@glshaschildren + }% +} +\newcommand{\ifglshasparent}[3]{% + \glsdoifexists{#1}% + {% + \ifcsempty{glo@\glsdetoklabel{#1}@parent}{#3}{#2}% + }% +} +\newcommand*{\ifglshasdesc}[3]{% + \ifcsempty{glo@\glsdetoklabel{#1}@desc}% + {#3}% + {#2}% +} +\newcommand*{\ifglsdescsuppressed}[3]{% + \ifcsequal{glo@\glsdetoklabel{#1}@desc}{@no@post@desc}% + {#2}% + {#3}% +} +\newrobustcmd*{\ifglshassymbol}[3]{% + \letcs{\@glo@symbol}{glo@\glsdetoklabel{#1}@symbol}% + \ifdefempty\@glo@symbol + {#3}% + {% + \ifdefequal\@glo@symbol\@gls@default@value + {#3}% + {#2}% + }% +} +\newrobustcmd*{\ifglshaslong}[3]{% + \letcs{\@glo@long}{glo@\glsdetoklabel{#1}@long}% + \ifdefempty\@glo@long + {#3}% + {% + \ifdefequal\@glo@long\@gls@default@value + {#3}% + {#2}% + }% +} +\newrobustcmd*{\ifglshasshort}[3]{% + \letcs{\@glo@short}{glo@\glsdetoklabel{#1}@short}% + \ifdefempty\@glo@short + {#3}% + {% + \ifdefequal\@glo@short\@gls@default@value + {#3}% + {#2}% + }% +} +\newrobustcmd*{\ifglshasfield}[4]{% + \glsdoifexists{#2}% + {% + \letcs{\@glo@thisvalue}{glo@\glsdetoklabel{#2}@#1}% + \ifdef\@glo@thisvalue + {% + \ifdefempty\@glo@thisvalue + {% + #4% + }% + {% + \ifdefequal\@glo@thisvalue\@gls@default@value + {% + #4% + }% + {% + \let\glscurrentfieldvalue\@glo@thisvalue + #3% + }% + }% + }% + {% + \@gls@fetchfield{\@gls@thisfield}{#1}% + \ifdef\@gls@thisfield + {% + \letcs{\@glo@thisvalue}{glo@\glsdetoklabel{#2}@\@gls@thisfield}% + \ifdefempty\@glo@thisvalue + {% + #4% + }% + {% + \ifdefequal\@glo@thisvalue\@gls@default@value + {% + #4% + }% + {% + \let\glscurrentfieldvalue\@glo@thisvalue + #3% + }% + }% + }% + {% + \GlossariesWarning{Unknown entry field `#1'}% + #4% + }% + }% + }% +} +\newcommand*{\glscurrentfieldvalue}{} +\newcommand*{\@glo@types}{,} +\newcommand*\@gls@provide@newglossary{% + \protected@write\@auxout{}{\string\providecommand\string\@newglossary[4]{}}% + \let\@gls@provide@newglossary\relax +} +\newcommand*{\defglsentryfmt}[2][\glsdefaulttype]{% + \csgdef{gls@#1@entryfmt}{#2}% +} +\newcommand*{\gls@doentryfmt}[1]{\csuse{gls@#1@entryfmt}} +\newcommand*{\@gls@forbidtexext}[1]{% + \ifboolexpr{test {\ifdefstring{#1}{tex}} + or test {\ifdefstring{#1}{TEX}}} + {% + \def#1{nottex}% + \PackageError{glossaries}% + {Forbidden `.tex' extension replaced with `.nottex'}% + {I'm sorry, I can't allow you to do something so reckless.\MessageBreak + Don't use `.tex' as an extension for a temporary file.}% + }% + {% + }% +} +\newcommand*{\gls@gobbleopt}{\new@ifnextchar[{\@gls@gobbleopt}{}} +\def\@gls@gobbleopt[#1]{} +\newcommand*{\newglossary}{\@ifstar\s@newglossary\ns@newglossary} +\newcommand*{\s@newglossary}[2]{% + \ns@newglossary[#1-glg]{#1}{#1-gls}{#1-glo}{#2}% +} +\newcommand*{\ns@newglossary}[5][glg]{% + \doifglossarynoexistsordo{#2}% + {% + \ifundef\glsdefaulttype + {% + \gdef\glsdefaulttype{#2}% + }{}% + \toks@{#2}\edef\@glo@types{\@glo@types\the\toks@,}% + \expandafter\gdef\csname glolist@#2\endcsname{,}% + \expandafter\edef\csname @glotype@#2@log\endcsname{#1}% + \expandafter\edef\csname @glotype@#2@in\endcsname{#3}% + \expandafter\edef\csname @glotype@#2@out\endcsname{#4}% + \expandafter\@gls@forbidtexext\csname @glotype@#2@log\endcsname + \expandafter\@gls@forbidtexext\csname @glotype@#2@in\endcsname + \expandafter\@gls@forbidtexext\csname @glotype@#2@out\endcsname + \expandafter\def\csname @glotype@#2@title\endcsname{#5}% + \@gls@provide@newglossary + \protected@write\@auxout{}{\string\@newglossary{#2}{#1}{#3}{#4}}% + \ifcsundef{gls@#2@entryfmt}% + {% + \defglsentryfmt[#2]{\glsentryfmt}% + }% + {}% + \@gls@defsortcount{#2}% + \@ifnextchar[{\@gls@setcounter{#2}}% + {\@gls@setcounter{#2}[\glscounter]}% + }% + {% + \gls@gobbleopt + }% +} +\newcommand*{\altnewglossary}[3]{% + \newglossary[#2-glg]{#1}{#2-gls}{#2-glo}{#3}% +} +\@onlypreamble{\newglossary} +\@onlypremakeg\newglossary +\newcommand*{\@newglossary}[4]{} +\def\@gls@setcounter#1[#2]{% + \expandafter\def\csname @glotype@#1@counter\endcsname{#2}% + \ifglsxindy + \GlsAddXdyCounters{#2}% + \fi +} +\newcommand*{\@gls@getcounter}[1]{% + \csname @glotype@#1@counter\endcsname +} +\glsdefmain +\@gls@do@acronymsdef +\@gls@do@symbolsdef +\@gls@do@numbersdef +\@gls@do@indexdef +\newcommand*{\newignoredglossary}[1]{% + \ifdefempty\@ignored@glossaries + {% + \edef\@ignored@glossaries{#1}% + }% + {% + \eappto\@ignored@glossaries{,#1}% + }% + \csgdef{glolist@#1}{,}% + \ifcsundef{gls@#1@entryfmt}% + {% + \defglsentryfmt[#1]{\glsentryfmt}% + }% + {}% + \ifdefempty\@gls@nohyperlist + {% + \renewcommand*{\@gls@nohyperlist}{#1}% + }% + {% + \eappto\@gls@nohyperlist{,#1}% + }% +} +\newcommand*{\@ignored@glossaries}{} +\newcommand*{\ifignoredglossary}[3]{% + \edef\@gls@igtype{#1}% + \expandafter\DTLifinlist\expandafter + {\@gls@igtype}{\@ignored@glossaries}{#2}{#3}% +} +\define@key{glossentry}{name}{% +\def\@glo@name{#1}% +} +\define@key{glossentry}{description}{% +\def\@glo@desc{#1}% +} +\define@key{glossentry}{descriptionplural}{% +\def\@glo@descplural{#1}% +} +\define@key{glossentry}{sort}{% +\def\@glo@sort{#1}} +\define@key{glossentry}{text}{% +\def\@glo@text{#1}% +} +\define@key{glossentry}{plural}{% +\def\@glo@plural{#1}% +} +\define@key{glossentry}{first}{% +\def\@glo@first{#1}% +} +\define@key{glossentry}{firstplural}{% +\def\@glo@firstplural{#1}% +} +\newcommand*{\@gls@default@value}{\relax} +\define@key{glossentry}{symbol}{% +\def\@glo@symbol{#1}% +} +\define@key{glossentry}{symbolplural}{% +\def\@glo@symbolplural{#1}% +} +\define@key{glossentry}{type}{% +\def\@glo@type{#1}} +\define@key{glossentry}{counter}{% + \ifcsundef{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}% + }% +} +\define@key{glossentry}{see}{% + \gls@set@xr@key{see}{\@glo@see}{#1}% +} +\newcommand*{\gls@set@xr@key}[3]{% + \renewcommand*{\gls@xr@key}{#1}% + \gls@checkseeallowed + \def#2{#3}% + \@glo@seeautonumberlist +} +\newcommand*{\gls@xr@key}{see} +\newcommand*{\gls@checkseeallowed}{% + \@gls@see@noindex +} +\newcommand*{\gls@checkseeallowed@preambleonly}{% + \GlossariesWarning{glossaries}% + {`\gls@xr@key' key doesn't have any effect when used in the document + environment. Move the definition to the preamble + after \string\makeglossaries\space + or \string\makenoidxglossaries}% +} +\define@key{glossentry}{parent}{% +\def\@glo@parent{#1}} +\define@choicekey{glossentry}{nonumberlist}% + [\gls@nonumberlist@val\gls@nonumberlist@nr]{true,false}[true]% +{% + \ifcase\gls@nonumberlist@nr\relax + \def\@glo@prefix{\glsnonextpages}% + \@gls@savenonumberlist{true}% + \else + \def\@glo@prefix{\glsnextpages}% + \@gls@savenonumberlist{false}% + \fi +} +\newcommand*{\@gls@savenonumberlist}[1]{} +\newcommand*{\@gls@initnonumberlist}{}% +\newcommand*{\@gls@storenonumberlist}[1]{} +\newcommand*{\@gls@enablesavenonumberlist}{% + \renewcommand*{\@gls@initnonumberlist}{% + \undef\@glo@nonumberlist + }% + \renewcommand*{\@gls@savenonumberlist}[1]{% + \def\@glo@nonumberlist{##1}% + }% + \renewcommand*{\@gls@storenonumberlist}[1]{% + \ifdef\@glo@nonumberlist + {% + \cslet{glo@\glsdetoklabel{##1}@nonumberlist}{\@glo@nonumberlist}% + }% + {}% + }% + \appto\@gls@keymap{,{nonumberlist}{nonumberlist}}% +} +\define@key{glossentry}{user1}{% + \def\@glo@useri{#1}% +} +\define@key{glossentry}{user2}{% + \def\@glo@userii{#1}% +} +\define@key{glossentry}{user3}{% + \def\@glo@useriii{#1}% +} +\define@key{glossentry}{user4}{% + \def\@glo@useriv{#1}% +} +\define@key{glossentry}{user5}{% + \def\@glo@userv{#1}% +} +\define@key{glossentry}{user6}{% + \def\@glo@uservi{#1}% +} +\define@key{glossentry}{short}{% + \def\@glo@short{#1}% +} +\define@key{glossentry}{shortplural}{% + \def\@glo@shortpl{#1}% +} +\define@key{glossentry}{long}{% + \def\@glo@long{#1}% +} +\define@key{glossentry}{longplural}{% + \def\@glo@longpl{#1}% +} +\newcommand*{\@glsnoname}{% + \PackageError{glossaries}{name key required in + \string\newglossaryentry\space for entry `\@glo@label'}{You + haven't specified the entry name}} +\newcommand*\@glsnodesc{% + \PackageError{glossaries} + {% + description key required in \string\newglossaryentry\space + for entry `\@glo@label'% + }% + {% + You haven't specified the entry description% + }% +}% +\newcommand*{\@glsdefaultplural}{} +\newcommand*{\@gls@missingnumberlist}[1]{% + ??% + \ifglssavenumberlist + \GlossariesWarning{Missing number list for entry `#1'. + Maybe makeglossaries + rerun required}% + \else + \PackageError{glossaries}% + {Package option `savenumberlist=true' required}% + {% + You must use the `savenumberlist' package option + to reference location lists.% + }% + \fi +} +\newcommand*{\@glsdefaultsort}{\@glo@name} +\newcount\gls@level +\newcommand{\@@gls@noexpand@field}[3]{% + \expandafter\global\expandafter + \let\csname glo@#1@#2\endcsname#3% +} +\newcommand{\@gls@noexpand@fields}[4]{% + \ifcsdef{gls@assign@#3@field} + {% + \ifdefequal{#4}{\@gls@default@value}% + {% + \edef\@gls@value{\expandonce{#1}}% + \csuse{gls@assign@#3@field}{#2}{\@gls@value}% + }% + {% + \csuse{gls@assign@#3@field}{#2}{#4}% + }% + }% + {% + \ifdefequal{#4}{\@gls@default@value}% + {% + \edef\@gls@value{\expandonce{#1}}% + \@@gls@noexpand@field{#2}{#3}{\@gls@value}% + }% + {% + \@@gls@noexpand@field{#2}{#3}{#4}% + }% + }% +} +\newcommand{\@@gls@expand@field}[3]{% + \expandafter + \protected@xdef\csname glo@#1@#2\endcsname{#3}% +} +\newcommand{\@gls@expand@fields}[4]{% + \ifcsdef{gls@assign@#3@field} + {% + \ifdefequal{#4}{\@gls@default@value}% + {% + \edef\@gls@value{\expandonce{#1}}% + \csuse{gls@assign@#3@field}{#2}{\@gls@value}% + }% + {% + \expandafter\@gls@startswithexpandonce#4\relax\relax\gls@endcheck + {% + \@@gls@expand@field{#2}{#3}{#4}% + }% + {% + \csuse{gls@assign@#3@field}{#2}{#4}% + }% + }% + }% + {% + \ifdefequal{#4}{\@gls@default@value}% + {% + \@@gls@expand@field{#2}{#3}{#1}% + }% + {% + \@@gls@expand@field{#2}{#3}{#4}% + }% + }% +} +\def\@gls@expandonce{\expandonce} +\def\@gls@startswithexpandonce#1#2\gls@endcheck#3#4{% + \def\@gls@tmp{#1}% + \ifdefequal{\@gls@expandonce}{\@gls@tmp}{#3}{#4}% +} +\let\gls@assign@field\@gls@expand@fields +\newcommand*{\glsexpandfields}{% + \let\gls@assign@field\@gls@expand@fields +} +\newcommand*{\glsnoexpandfields}{% + \let\gls@assign@field\@gls@noexpand@fields +} +\newrobustcmd{\newglossaryentry}[2]{% + \glsdoifnoexists{#1}% + {% + \gls@defglossaryentry{#1}{#2}% + }% +} +\newcommand*{\gls@defdocnewglossaryentry}{% + \let\gls@checkseeallowed\gls@checkseeallowed@preambleonly + \let\newglossaryentry\new@glossaryentry +} +\newrobustcmd{\provideglossaryentry}[2]{% + \ifglsentryexists{#1}% + {}% + {% + \gls@defglossaryentry{#1}{#2}% + }% +} +\@onlypreamble{\provideglossaryentry} +\newrobustcmd{\new@glossaryentry}[2]{% + \ifundef\@gls@deffile + {% + \global\newwrite\@gls@deffile + \immediate\openout\@gls@deffile=\jobname.glsdefs + }% + {}% + \ifglsentryexists{#1}{}% + {% + \gls@defglossaryentry{#1}{#2}% + }% + \@gls@writedef{#1}% +} +\AtBeginDocument{\gls@begindocdefs} +\AtEndDocument{\ifdef\@gls@deffile{\closeout\@gls@deffile}{}} +\newcommand*{\gls@begindocdefs}{% + \@gls@enablesavenonumberlist + \edef\@gls@restoreat{\noexpand\catcode`\noexpand\@=\number\catcode`\@\relax}% + \makeatletter + \InputIfFileExists{\jobname.glsdefs}{}{}% + \@gls@restoreat + \undef\@gls@restoreat + \gls@defdocnewglossaryentry +} +\newcommand*{\@gls@writedef}[1]{% + \immediate\write\@gls@deffile + {% + \string\ifglsentryexists{#1}{}\glspercentchar^^J% + \expandafter\@gobble\string\{\glspercentchar^^J% + \string\gls@defglossaryentry{\glsdetoklabel{#1}}\glspercentchar^^J% + \expandafter\@gobble\string\{\glspercentchar% + }% + \@for\@gls@map:=\@gls@keymap\do + {% + \letcs\glo@value{glo@\glsdetoklabel{#1}@\expandafter\@secondoftwo\@gls@map}% + \ifdef\glo@value + {% + \@onelevel@sanitize\glo@value + \immediate\write\@gls@deffile + {% + \expandafter\@firstoftwo\@gls@map + =\expandafter\@gobble\string\{\glo@value\expandafter\@gobble\string\},% + \glspercentchar + }% + }% + {}% + }% + \glswritedefhook + \immediate\write\@gls@deffile + {% + \glspercentchar^^J% + \expandafter\@gobble\string\}\glspercentchar^^J% + \expandafter\@gobble\string\}\glspercentchar% + }% +} +\newcommand*{\@gls@keymap}{% + {name}{name},% + {sort}{sortvalue},% unescaped sort value + {type}{type},% + {first}{first},% + {firstplural}{firstpl},% + {text}{text},% + {plural}{plural},% + {description}{desc},% + {descriptionplural}{descplural},% + {symbol}{symbol},% + {symbolplural}{symbolplural},% + {user1}{useri},% + {user2}{userii},% + {user3}{useriii},% + {user4}{useriv},% + {user5}{userv},% + {user6}{uservi},% + {long}{long},% + {longplural}{longpl},% + {short}{short},% + {shortplural}{shortpl},% + {counter}{counter},% + {parent}{parent}% +} +\newcommand*{\@gls@fetchfield}[2]{% + \edef\@gls@thisval{#2}% + \@for\@gls@map:=\@gls@keymap\do{% + \edef\@this@key{\expandafter\@firstoftwo\@gls@map}% + \ifdefequal{\@this@key}{\@gls@thisval}% + {% + \edef#1{\expandafter\@secondoftwo\@gls@map}% + \@endfortrue + }% + {}% + }% +} +\newcommand*{\glsaddstoragekey}{\@ifstar\@sglsaddstoragekey\@glsaddstoragekey} +\newcommand*{\@sglsaddstoragekey}[1]{% + \key@ifundefined{glossentry}{#1}% + {% + \expandafter\newcommand\expandafter*\expandafter + {\csname gls@assign@#1@field\endcsname}[2]{% + \@@gls@expand@field{##1}{#1}{##2}% + }% + }% + {}% + \@glsaddstoragekey{#1}% +} +\newcommand*{\@glsaddstoragekey}[3]{% + \key@ifundefined{glossentry}{#1}% + {% + \define@key{glossentry}{#1}{\csdef{@glo@#1}{##1}}% + \appto\@gls@keymap{,{#1}{#1}}% + \appto\@newglossaryentryprehook{\csdef{@glo@#1}{#2}}% + \appto\@newglossaryentryposthook{% + \letcs{\@glo@tmp}{@glo@#1}% + \gls@assign@field{#2}{\@glo@label}{#1}{\@glo@tmp}% + }% + \newcommand*{#3}[1]{\@gls@entry@field{##1}{#1}}% + }% + {% + \PackageError{glossaries}{Key `#1' already exists}{}% + }% +} +\newcommand*{\glsaddkey}{\@ifstar\@sglsaddkey\@glsaddkey} +\newcommand*{\@sglsaddkey}[1]{% + \key@ifundefined{glossentry}{#1}% + {% + \expandafter\newcommand\expandafter*\expandafter + {\csname gls@assign@#1@field\endcsname}[2]{% + \@@gls@expand@field{##1}{#1}{##2}% + }% + }% + {}% + \@glsaddkey{#1}% +} +\newcommand*{\@glsaddkey}[7]{% + \key@ifundefined{glossentry}{#1}% + {% + \define@key{glossentry}{#1}{\csdef{@glo@#1}{##1}}% + \appto\@gls@keymap{,{#1}{#1}}% + \appto\@newglossaryentryprehook{\csdef{@glo@#1}{#2}}% + \appto\@newglossaryentryposthook{% + \letcs{\@glo@tmp}{@glo@#1}% + \gls@assign@field{#2}{\@glo@label}{#1}{\@glo@tmp}% + }% + \newcommand*{#3}[1]{\@gls@entry@field{##1}{#1}}% + \newcommand*{#4}[1]{\@Gls@entry@field{##1}{#1}}% + \ifcsdef{@gls@user@#1@}% + {% + \PackageError{glossaries}% + {Can't define `\string#5' as helper command + `\expandafter\string\csname @gls@user@#1@\endcsname' already exists}% + {}% + }% + {% + \expandafter\newcommand\expandafter*\expandafter + {\csname @gls@user@#1\endcsname}[2][]{% + \new@ifnextchar[% + {\csuse{@gls@user@#1@}{##1}{##2}}% + {\csuse{@gls@user@#1@}{##1}{##2}[]}}% + \csdef{@gls@user@#1@}##1##2[##3]{% + \@gls@field@link{##1}{##2}{#3{##2}##3}% + }% + \newrobustcmd*{#5}{% + \expandafter\@gls@hyp@opt\csname @gls@user@#1\endcsname}% + }% + \ifcsdef{@Gls@user@#1@}% + {% + \PackageError{glossaries}% + {Can't define `\string#6' as helper command + `\expandafter\string\csname @Gls@user@#1@\endcsname' already exists}% + {}% + }% + {% + \expandafter\newcommand\expandafter*\expandafter + {\csname @Gls@user@#1\endcsname}[2][]{% + \new@ifnextchar[% + {\csuse{@Gls@user@#1@}{##1}{##2}}% + {\csuse{@Gls@user@#1@}{##1}{##2}[]}}% + \csdef{@Gls@user@#1@}##1##2[##3]{% + \@gls@field@link{##1}{##2}{#4{##2}##3}% + }% + \newrobustcmd*{#6}{% + \expandafter\@gls@hyp@opt\csname @Gls@user@#1\endcsname}% + }% + \ifcsdef{@GLS@user@#1@}% + {% + \PackageError{glossaries}% + {Can't define `\string#7' as helper command + `\expandafter\string\csname @GLS@user@#1@\endcsname' already exists}% + {}% + }% + {% + \expandafter\newcommand\expandafter*\expandafter + {\csname @GLS@user@#1\endcsname}[2][]{% + \new@ifnextchar[% + {\csuse{@GLS@user@#1@}{##1}{##2}}% + {\csuse{@GLS@user@#1@}{##1}{##2}[]}}% + \csdef{@GLS@user@#1@}##1##2[##3]{% + \@gls@field@link{##1}{##2}{\mfirstucMakeUppercase{#3{##2}##3}}% + }% + \newrobustcmd*{#7}{% + \expandafter\@gls@hyp@opt\csname @GLS@user@#1\endcsname}% + }% + }% + {% + \PackageError{glossaries}{Key `#1' already exists}{}% + }% +} +\newcommand{\glsfieldxdef}[3]{% + \glsdoifexists{#1}% + {% + \edef\@glo@label{\glsdetoklabel{#1}}% + \ifcsdef{glo@\@glo@label @#2}% + {% + \protected@csxdef{glo@\@glo@label @#2}{#3}% + }% + {% + \PackageError{glossaries}{Key `#2' doesn't exist}{}% + }% + }% +} +\newcommand{\glsfieldedef}[3]{% + \glsdoifexists{#1}% + {% + \edef\@glo@label{\glsdetoklabel{#1}}% + \ifcsdef{glo@\@glo@label @#2}% + {% + \protected@csedef{glo@\@glo@label @#2}{#3}% + }% + {% + \PackageError{glossaries}{Key `#2' doesn't exist}{}% + }% + }% +} +\newcommand{\glsfieldgdef}[3]{% + \glsdoifexists{#1}% + {% + \edef\@glo@label{\glsdetoklabel{#1}}% + \ifcsdef{glo@\@glo@label @#2}% + {% + \expandafter\gdef\csname glo@\@glo@label @#2\endcsname{#3}% + }% + {% + \PackageError{glossaries}{Key `#2' doesn't exist}{}% + }% + }% +} +\newcommand{\glsfielddef}[3]{% + \glsdoifexists{#1}% + {% + \edef\@glo@label{\glsdetoklabel{#1}}% + \ifcsdef{glo@\@glo@label @#2}% + {% + \expandafter\def\csname glo@\@glo@label @#2\endcsname{#3}% + }% + {% + \PackageError{glossaries}{Key `#2' doesn't exist}{}% + }% + }% +} +\newcommand{\glsfieldfetch}[3]{% + \glsdoifexists{#1}% + {% + \edef\@glo@label{\glsdetoklabel{#1}}% + \ifcsdef{glo@\@glo@label @#2}% + {% + \letcs#3{glo@\@glo@label @#2}% + }% + {% + \PackageError{glossaries}{Key `#2' doesn't exist}{}% + }% + }% +} +\newcommand{\ifglsfieldeq}[5]{% + \glsdoifexists{#1}% + {% + \edef\@glo@label{\glsdetoklabel{#1}}% + \ifcsdef{glo@\@glo@label @#2}% + {% + \ifcsstring{glo@\@glo@label @#2}{#3}{#4}{#5}% + }% + {% + \PackageError{glossaries}{Key `#2' doesn't exist}{}% + }% + }% +} +\newcommand{\ifglsfielddefeq}[5]{% + \glsdoifexists{#1}% + {% + \edef\@glo@label{\glsdetoklabel{#1}}% + \ifcsdef{glo@\@glo@label @#2}% + {% + \expandafter\ifdefstrequal + \csname glo@\@glo@label @#2\endcsname{#3}{#4}{#5}% + }% + {% + \PackageError{glossaries}{Key `#2' doesn't exist}{}% + }% + }% +} +\newcommand{\ifglsfieldcseq}[5]{% + \glsdoifexists{#1}% + {% + \edef\@glo@label{\glsdetoklabel{#1}}% + \ifcsdef{glo@\@glo@label @#2}% + {% + \ifcsstrequal{glo@\@glo@label @#2}{#3}{#4}{#5}% + }% + {% + \PackageError{glossaries}{Key `#2' doesn't exist}{}% + }% + }% +} +\newcommand*{\glswritedefhook}{} +\newcommand*{\gls@assign@desc}[1]{% + \gls@assign@field{}{#1}{desc}{\@glo@desc}% + \gls@assign@field{\@glo@desc}{#1}{descplural}{\@glo@descplural}% +} +\newcommand{\longnewglossaryentry}[3]{% + \glsdoifnoexists{#1}% + {% + \bgroup + \let\@org@newglossaryentryprehook\@newglossaryentryprehook + \long\def\@newglossaryentryprehook{% + \long\def\@glo@desc{#3\leavevmode\unskip\nopostdesc}% + \@org@newglossaryentryprehook + }% + \renewcommand*{\gls@assign@desc}[1]{% + \global\cslet{glo@\glsdetoklabel{#1}@desc}{\@glo@desc}% + \global\cslet{glo@\glsdetoklabel{#1}@descplural}{\@glo@desc}% + } + \gls@defglossaryentry{#1}{#2}% + \egroup + } +} +\@onlypreamble{\longnewglossaryentry} +\newcommand{\longprovideglossaryentry}[3]{% + \ifglsentryexists{#1}{}% + {\longnewglossaryentry{#1}{#2}{#3}}% +} +\@onlypreamble{\longprovideglossaryentry} +\newcommand{\gls@defglossaryentry}[2]{% + \let\GlsSetQuote\gls@nosetquote + \edef\@glo@label{\glsdetoklabel{#1}}% + \let\glslabel\@glo@label + \let\@glo@name\@glsnoname + \let\@glo@desc\@glsnodesc + \let\@glo@descplural\@gls@default@value + \let\@glo@type\@gls@default@value + \let\@glo@symbol\@gls@default@value + \let\@glo@symbolplural\@gls@default@value + \let\@glo@text\@gls@default@value + \let\@glo@plural\@gls@default@value + \let\@glo@first\@gls@default@value + \let\@glo@firstplural\@gls@default@value + \let\@glo@sort\@gls@default@value + \let\@glo@counter\@gls@default@value + \def\@glo@see{}% + \def\@glo@parent{}% + \def\@glo@prefix{}% + \@gls@initnonumberlist + \def\@glo@useri{}% + \def\@glo@userii{}% + \def\@glo@useriii{}% + \def\@glo@useriv{}% + \def\@glo@userv{}% + \def\@glo@uservi{}% + \def\@glo@short{}% + \def\@glo@shortpl{}% + \def\@glo@long{}% + \def\@glo@longpl{}% + \@newglossaryentryprehook + \setkeys{glossentry}{#2}% + \ifundef\glsdefaulttype + {% + \PackageError{glossaries}% + {No default glossary type (have you used `nomain' by mistake?)}% + {If you use package option `nomain' you must define + a new glossary before you can define entries}% + }% + {}% + \gls@assign@field{\glsdefaulttype}{\@glo@label}{type}{\@glo@type}% + \edef\@glo@type{\glsentrytype{\@glo@label}}% + \ifcsundef{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}% + }% + {% + \ifignoredglossary\@glo@type + {% + \ifx\@glo@desc\@glsnodesc + \let\@glo@desc\@empty + \fi + }% + {% + }% + \protected@edef\@glolist@{\csname glolist@\@glo@type\endcsname}% + \expandafter\xdef\csname glolist@\@glo@type\endcsname{% + \@glolist@{\@glo@label},}% + }% + \gls@level=0\relax + \ifx\@glo@parent\@empty + \expandafter\gdef\csname glo@\@glo@label @parent\endcsname{}% + \else + \ifdefequal\@glo@label\@glo@parent% + {% + \PackageError{glossaries}{Entry `\@glo@label' can't be its own parent}{}% + \def\@glo@parent{}% + \expandafter\gdef\csname glo@\@glo@label @parent\endcsname{}% + }% + {% + \ifglsentryexists{\@glo@parent}% + {% + \expandafter\xdef\csname glo@\@glo@label @parent\endcsname{% + \@glo@parent}% + \gls@level=\csname glo@\@glo@parent @level\endcsname\relax + \advance\gls@level by 1\relax + \ifx\@glo@name\@glsnoname + \expandafter\let\expandafter\@glo@name + \csname glo@\@glo@parent @name\endcsname + \ifx\@glo@plural\@gls@default@value + \expandafter\let\expandafter\@glo@plural + \csname glo@\@glo@parent @plural\endcsname + \fi + \fi + }% + {% + \PackageError{glossaries}% + {% + Invalid parent `\@glo@parent' + for entry `\@glo@label' - parent doesn't exist% + }% + {% + Parent entries must be defined before their children% + }% + \def\@glo@parent{}% + \expandafter\gdef\csname glo@\@glo@label @parent\endcsname{}% + }% + }% + \fi + \expandafter\xdef\csname glo@\@glo@label @level\endcsname{\number\gls@level}% + \gls@assign@field{\@glo@name}{\@glo@label}{sortvalue}{\@glo@sort}% + \letcs\@glo@sort{glo@\@glo@label @sortvalue}% + \gls@assign@field{\@glo@name}{\@glo@label}{text}{\@glo@text}% + \expandafter\gls@assign@field\expandafter + {\csname glo@\@glo@label @text\endcsname\glspluralsuffix}% + {\@glo@label}{plural}{\@glo@plural}% + \expandafter\gls@assign@field\expandafter + {\csname glo@\@glo@label @text\endcsname}% + {\@glo@label}{first}{\@glo@first}% + \ifx\@glo@first\@gls@default@value + \expandafter\gls@assign@field\expandafter + {\csname glo@\@glo@label @plural\endcsname}% + {\@glo@label}{firstpl}{\@glo@firstplural}% + \else + \expandafter\gls@assign@field\expandafter + {\csname glo@\@glo@label @first\endcsname\glspluralsuffix}% + {\@glo@label}{firstpl}{\@glo@firstplural}% + \fi + \ifcsundef{@glotype@\@glo@type @counter}% + {% + \def\@glo@defaultcounter{\glscounter}% + }% + {% + \letcs\@glo@defaultcounter{@glotype@\@glo@type @counter}% + }% + \gls@assign@field{\@glo@defaultcounter}{\@glo@label}{counter}{\@glo@counter}% + \gls@assign@field{}{\@glo@label}{useri}{\@glo@useri}% + \gls@assign@field{}{\@glo@label}{userii}{\@glo@userii}% + \gls@assign@field{}{\@glo@label}{useriii}{\@glo@useriii}% + \gls@assign@field{}{\@glo@label}{useriv}{\@glo@useriv}% + \gls@assign@field{}{\@glo@label}{userv}{\@glo@userv}% + \gls@assign@field{}{\@glo@label}{uservi}{\@glo@uservi}% + \gls@assign@field{}{\@glo@label}{short}{\@glo@short}% + \gls@assign@field{}{\@glo@label}{shortpl}{\@glo@shortpl}% + \gls@assign@field{}{\@glo@label}{long}{\@glo@long}% + \gls@assign@field{}{\@glo@label}{longpl}{\@glo@longpl}% + \ifx\@glo@name\@glsnoname + \@glsnoname + \let\@gloname\@gls@default@value + \fi + \gls@assign@field{}{\@glo@label}{name}{\@glo@name}% + \ifcsundef{glo@\@glo@label @numberlist}% + {% + \csxdef{glo@\@glo@label @numberlist}{% + \noexpand\@gls@missingnumberlist{\@glo@label}}% + }% + {}% + \@gls@storenonumberlist{\@glo@label}% + \def\@glo@@desc{\@glo@first}% + \ifx\@glo@desc\@glo@@desc + \let\@glo@desc\@glo@first + \fi + \ifx\@glo@desc\@glsnodesc + \@glsnodesc + \let\@glodesc\@gls@default@value + \fi + \gls@assign@desc{\@glo@label}% + \@gls@defsort{\@glo@type}{\@glo@label}% + \def\@glo@@symbol{\@glo@text}% + \ifx\@glo@symbol\@glo@@symbol + \let\@glo@symbol\@glo@text + \fi + \gls@assign@field{\relax}{\@glo@label}{symbol}{\@glo@symbol}% + \expandafter + \gls@assign@field\expandafter + {\csname glo@\@glo@label @symbol\endcsname} + {\@glo@label}{symbolplural}{\@glo@symbolplural}% + \expandafter\xdef\csname glo@\@glo@label @flagfalse\endcsname{% + \noexpand\global + \noexpand\let\expandafter\noexpand + \csname ifglo@\@glo@label @flag\endcsname\noexpand\iffalse + }% + \expandafter\xdef\csname glo@\@glo@label @flagtrue\endcsname{% + \noexpand\global + \noexpand\let\expandafter\noexpand + \csname ifglo@\@glo@label @flag\endcsname\noexpand\iftrue + }% + \csname glo@\@glo@label @flagfalse\endcsname + \@glo@autosee + \ifignoredglossary\@glo@type + {% + \csdef{glo@\@glo@label @index}{}% + } + {% + \do@glo@storeentry{\@glo@label}% + }% + \@newglossaryentry@defcounters + \@newglossaryentryposthook +} +\newcommand*{\@glo@autosee}{% + \ifdefvoid\@glo@see{}% + {% + \protected@edef\@do@glssee{% + \noexpand\@gls@fixbraces\noexpand\@glo@list\@glo@see\noexpand\@nil + \noexpand\expandafter\noexpand\@glssee\noexpand\@glo@list{\@glo@label}}% + \@do@glssee + }% + \@glo@autoseehook +}% +\newcommand*{\@glo@autoseehook}{} +\newcommand*{\@newglossaryentryprehook}{} +\newcommand*{\@newglossaryentryposthook}{} +\newcommand*{\@newglossaryentry@defcounters}{} +\newcommand*{\glsmoveentry}[2]{% + \edef\@glo@thislabel{\glsdetoklabel{#1}}% + \edef\glo@type{\csname glo@\@glo@thislabel @type\endcsname}% + \def\glo@list{,}% + \forglsentries[\glo@type]{\glo@label}% + {% + \ifdefequal\@glo@thislabel\glo@label + {}{\eappto\glo@list{\glo@label,}}% + }% + \cslet{glolist@\glo@type}{\glo@list}% + \csdef{glo@\@glo@thislabel @type}{#2}% +} +\ifglsxindy + \newcommand*{\@glossaryentryfield}{\string\\glossentry} +\else + \newcommand*{\@glossaryentryfield}{\string\glossentry} +\fi +\ifglsxindy + \newcommand*{\@glossarysubentryfield}{% + \string\\subglossentry} +\else + \newcommand*{\@glossarysubentryfield}{% + \string\subglossentry} +\fi +\newcommand{\@glo@storeentry}[1]{% + \edef\@glo@esclabel{#1}% + \@gls@checkmkidxchars\@glo@esclabel + \protected@edef\@glo@sort{\csname glo@#1@sort\endcsname}% + \@gls@checkmkidxchars\@glo@sort + \@gls@checkmkidxchars\@glo@prefix + \edef\@glo@parent{\csname glo@#1@parent\endcsname}% + \ifglsxindy + \ifx\@glo@parent\@empty + \expandafter\protected@xdef\csname glo@#1@index\endcsname{% + (\string"\@glo@sort\string" % + \string"\@glo@prefix\@glossaryentryfield{\@glo@esclabel}\string") % + }% + \else + \expandafter\protected@xdef\csname glo@#1@index\endcsname{% + \csname glo@\@glo@parent @index\endcsname + (\string"\@glo@sort\string" % + \string"\@glo@prefix\@glossarysubentryfield + {\csname glo@#1@level\endcsname}{\@glo@esclabel}\string") % + }% + \fi + \else + \ifx\@glo@parent\@empty + \@onelevel@sanitize\@glo@prefix + \expandafter\protected@xdef\csname glo@#1@index\endcsname{% + \@glo@sort\@gls@actualchar\@glo@prefix + \@glossaryentryfield{\@glo@esclabel}% + }% + \else + \expandafter\protected@xdef\csname glo@#1@index\endcsname{% + \csname glo@\@glo@parent @index\endcsname\@gls@levelchar + \@glo@sort\@gls@actualchar\@glo@prefix + \@glossarysubentryfield + {\csname glo@#1@level\endcsname}{\@glo@esclabel}% + }% + \fi + \fi +} +\AtBeginDocument{% + \@ifpackageloaded{amsmath}% + {\let\gls@ifnotmeasuring\@gls@ifnotmeasuring}% + {}% +} +\newcommand*{\@gls@ifnotmeasuring}[1]{% + \ifmeasuring@ + \else + #1% + \fi +} +\newcommand*\gls@ifnotmeasuring[1]{#1} +\def\@gls@patchtabularx#1\hbox#2#3!!{% + \def\TX@trial##1{#1\hbox{\let\glsunset\@gobble#2}#3}% +} +\newcommand*\glspatchtabularx{% + \ifdef\TX@trial + {% + \expandafter\@gls@patchtabularx\TX@trial{##1}!!% + \let\glspatchtabularx\relax + }% + {}% +} +\newcommand*{\glsreset}[1]{% + \gls@ifnotmeasuring + {% + \glsdoifexists{#1}% + {% + \@glsreset{#1}% + }% + }% +} +\newcommand*{\glslocalreset}[1]{% + \gls@ifnotmeasuring + {% + \glsdoifexists{#1}% + {% + \@glslocalreset{#1}% + }% + }% +} +\newcommand*{\glsunset}[1]{% + \gls@ifnotmeasuring + {% + \glsdoifexists{#1}% + {% + \@glsunset{#1}% + }% + }% +} +\newcommand*{\glslocalunset}[1]{% + \gls@ifnotmeasuring + {% + \glsdoifexists{#1}% + {% + \@glslocalunset{#1}% + }% + }% +} +\newcommand*{\@glslocalunset}{\@@glslocalunset} +\newcommand*{\@@glslocalunset}[1]{% + \expandafter\let\csname ifglo@\glsdetoklabel{#1}@flag\endcsname\iftrue +} +\newcommand*{\@glsunset}{\@@glsunset} +\newcommand*{\@@glsunset}[1]{% + \expandafter\global\csname glo@\glsdetoklabel{#1}@flagtrue\endcsname +} +\newcommand*{\@glslocalreset}{\@@glslocalreset} +\newcommand*{\@@glslocalreset}[1]{% + \expandafter\let\csname ifglo@\glsdetoklabel{#1}@flag\endcsname\iffalse +} +\newcommand*{\@glsreset}{\@@glsreset} +\newcommand*{\@@glsreset}[1]{% + \expandafter\global\csname glo@\glsdetoklabel{#1}@flagfalse\endcsname +} +\newcommand*{\glsresetall}[1][\@glo@types]{% + \forallglsentries[#1]{\@glsentry}% + {% + \glsreset{\@glsentry}% + }% +} +\newcommand*{\glslocalresetall}[1][\@glo@types]{% + \forallglsentries[#1]{\@glsentry}% + {% + \glslocalreset{\@glsentry}% + }% +} +\newcommand*{\glsunsetall}[1][\@glo@types]{% + \forallglsentries[#1]{\@glsentry}% + {% + \glsunset{\@glsentry}% + }% +} +\newcommand*{\glslocalunsetall}[1][\@glo@types]{% + \forallglsentries[#1]{\@glsentry}% + {% + \glslocalunset{\@glsentry}% + }% +} +\newcommand*{\@@newglossaryentry@defcounters}{% + \csdef{glo@\@glo@label @currcount}{0}% + \csdef{glo@\@glo@label @prevcount}{0}% +} +\newcommand*{\glsenableentrycount}{% + \let\@newglossaryentry@defcounters\@@newglossaryentry@defcounters + \renewcommand*{\gls@defdocnewglossaryentry}{% + \renewcommand*\newglossaryentry[2]{% + \PackageError{glossaries}{\string\newglossaryentry\space + may only be used in the preamble when entry counting has + been activated}{If you use \string\glsenableentrycount\space + you must place all entry definitions in the preamble not in + the document environment}% + }% + }% + \newcommand*{\glsentrycurrcount}[1]{% + \ifcsundef{glo@\glsdetoklabel{##1}@currcount}% + {0}{\@gls@entry@field{##1}{currcount}}% + }% + \newcommand*{\glsentryprevcount}[1]{% + \ifcsundef{glo@\glsdetoklabel{##1}@prevcount}% + {0}{\@gls@entry@field{##1}{prevcount}}% + }% + \renewcommand*{\@glsunset}[1]{% + \@@glsunset{##1}% + \@gls@increment@currcount{##1}% + }% + \renewcommand*{\@glslocalunset}[1]{% + \@@glslocalunset{##1}% + \@gls@local@increment@currcount{##1}% + }% + \renewcommand*{\@glsreset}[1]{% + \@@glsreset{##1}% + \csgdef{glo@\glsdetoklabel{##1}@currcount}{0}% + }% + \renewcommand*{\@glslocalreset}[1]{% + \@@glslocalreset{##1}% + \csdef{glo@\glsdetoklabel{##1}@currcount}{0}% + }% + \def\@cgls@##1##2[##3]{% + \ifnum\glsentryprevcount{##2}=1\relax + \cglsformat{##2}{##3}% + \glsunset{##2}% + \else + \@gls@{##1}{##2}[##3]% + \fi + }% + \def\@cglspl@##1##2[##3]{% + \ifnum\glsentryprevcount{##2}=1\relax + \cglsplformat{##2}{##3}% + \glsunset{##2}% + \else + \@glspl@{##1}{##2}[##3]% + \fi + }% + \def\@cGls@##1##2[##3]{% + \ifnum\glsentryprevcount{##2}=1\relax + \cGlsformat{##2}{##3}% + \glsunset{##2}% + \else + \@Gls@{##1}{##2}[##3]% + \fi + }% + \def\@cGlspl@##1##2[##3]{% + \ifnum\glsentryprevcount{##2}=1\relax + \cGlsplformat{##2}{##3}% + \glsunset{##2}% + \else + \@Glspl@{##1}{##2}[##3]% + \fi + }% + \AtEndDocument{\@gls@write@entrycounts}% + \renewcommand*{\@gls@entry@count}[2]{% + \csgdef{glo@\glsdetoklabel{##1}@prevcount}{##2}% + }% + \let\glsenableentrycount\relax +} +\@onlypreamble\glsenableentrycount +\newcommand*{\@gls@increment@currcount}[1]{% + \csxdef{glo@\glsdetoklabel{#1}@currcount}{% + \number\numexpr\glsentrycurrcount{#1}+1}% +} +\newcommand*{\@gls@local@increment@currcount}[1]{% + \csedef{glo@\glsdetoklabel{#1}@currcount}{% + \number\numexpr\glsentrycurrcount{#1}+1}% +} +\newcommand*{\@gls@write@entrycounts}{% + \immediate\write\@auxout + {\string\providecommand*{\string\@gls@entry@count}[2]{}}% + \forallglsentries{\@glsentry}{% + \ifglsused{\@glsentry}% + {\immediate\write\@auxout + {\string\@gls@entry@count{\@glsentry}{\glsentrycurrcount{\@glsentry}}}}% + {}% + }% +} +\newcommand*{\@gls@entry@count}[2]{} +\newrobustcmd*{\cgls}{\@gls@hyp@opt\@cgls} +\newcommand*{\@cgls}[2][]{% + \new@ifnextchar[{\@cgls@{#1}{#2}}{\@cgls@{#1}{#2}[]}% +} +\def\@cgls@#1#2[#3]{% + \GlossariesWarning{\string\cgls\space is defaulting to + \string\gls\space since you haven't enabled entry counting}% + \@gls@{#1}{#2}[#3]% +} +\newcommand*{\cglsformat}[2]{% + \ifglshaslong{#1}{\glsentrylong{#1}}{\glsentryfirst{#1}}#2% +} +\newrobustcmd*{\cGls}{\@gls@hyp@opt\@cGls} +\newcommand*{\@cGls}[2][]{% + \new@ifnextchar[{\@cGls@{#1}{#2}}{\@cGls@{#1}{#2}[]}% +} +\def\@cGls@#1#2[#3]{% + \GlossariesWarning{\string\cGls\space is defaulting to + \string\Gls\space since you haven't enabled entry counting}% + \@Gls@{#1}{#2}[#3]% +} +\newcommand*{\cGlsformat}[2]{% + \ifglshaslong{#1}{\Glsentrylong{#1}}{\Glsentryfirst{#1}}#2% +} +\newrobustcmd*{\cglspl}{\@gls@hyp@opt\@cglspl} +\newcommand*{\@cglspl}[2][]{% + \new@ifnextchar[{\@cglspl@{#1}{#2}}{\@cglspl@{#1}{#2}[]}% +} +\def\@cglspl@#1#2[#3]{% + \GlossariesWarning{\string\cglspl\space is defaulting to + \string\glspl\space since you haven't enabled entry counting}% + \@glspl@{#1}{#2}[#3]% +} +\newcommand*{\cglsplformat}[2]{% + \ifglshaslong{#1}{\glsentrylongpl{#1}}{\glsentryfirstplural{#1}}#2% +} +\newrobustcmd*{\cGlspl}{\@gls@hyp@opt\@cGlspl} +\newcommand*{\@cGlspl}[2][]{% + \new@ifnextchar[{\@cGlspl@{#1}{#2}}{\@cGlspl@{#1}{#2}[]}% +} +\def\@cGlspl@#1#2[#3]{% + \GlossariesWarning{\string\cGlspl\space is defaulting to + \string\Glspl\space since you haven't enabled entry counting}% + \@Glspl@{#1}{#2}[#3]% +} +\newcommand*{\cGlsplformat}[2]{% + \ifglshaslong{#1}{\Glsentrylongpl{#1}}{\Glsentryfirstplural{#1}}#2% +} +\newcommand*{\loadglsentries}[2][\@gls@default]{% + \let\@gls@default\glsdefaulttype + \def\glsdefaulttype{#1}\input{#2}% + \let\glsdefaulttype\@gls@default +} +\@onlypreamble{\loadglsentries} +\newcommand*{\glstextformat}[1]{#1} +\newcommand*{\glsentryfmt}{% + \@@gls@default@entryfmt\glsdisplayfirst\glsdisplay +} +\newcommand*{\@@gls@default@entryfmt}[2]{% + \ifdefempty\glscustomtext + {% + \glsifplural + {% + \glscapscase + {% + \ifglsused\glslabel + {% + #2{\glsentryplural{\glslabel}}% + {\glsentrydescplural{\glslabel}}% + {\glsentrysymbolplural{\glslabel}}{\glsinsert}% + }% + {% + #1{\glsentryfirstplural{\glslabel}}% + {\glsentrydescplural{\glslabel}}% + {\glsentrysymbolplural{\glslabel}}{\glsinsert}% + }% + }% + {% + \ifglsused\glslabel + {% + \ifbool{glscompatible-3.07}% + {% + \protected@edef\@glo@etext{% + #2{\glsentryplural{\glslabel}}% + {\glsentrydescplural{\glslabel}}% + {\glsentrysymbolplural{\glslabel}}{\glsinsert}}% + \xmakefirstuc\@glo@etext + }% + {% + #2{\Glsentryplural{\glslabel}}% + {\glsentrydescplural{\glslabel}}% + {\glsentrysymbolplural{\glslabel}}{\glsinsert}% + }% + }% + {% + \ifbool{glscompatible-3.07}% + {% + \protected@edef\@glo@etext{% + #1{\glsentryfirstplural{\glslabel}}% + {\glsentrydescplural{\glslabel}}% + {\glsentrysymbolplural{\glslabel}}{\glsinsert}}% + \xmakefirstuc\@glo@etext + }% + {% + #1{\Glsentryfirstplural{\glslabel}}% + {\glsentrydescplural{\glslabel}}% + {\glsentrysymbolplural{\glslabel}}{\glsinsert}% + }% + }% + }% + {% + \ifglsused\glslabel + {% + \mfirstucMakeUppercase{#2{\glsentryplural{\glslabel}}% + {\glsentrydescplural{\glslabel}}% + {\glsentrysymbolplural{\glslabel}}{\glsinsert}}% + }% + {% + \mfirstucMakeUppercase{#1{\glsentryfirstplural{\glslabel}}% + {\glsentrydescplural{\glslabel}}% + {\glsentrysymbolplural{\glslabel}}{\glsinsert}}% + }% + }% + }% + {% + \glscapscase + {% + \ifglsused\glslabel + {% + #2{\glsentrytext{\glslabel}}% + {\glsentrydesc{\glslabel}}% + {\glsentrysymbol{\glslabel}}{\glsinsert}% + }% + {% + #1{\glsentryfirst{\glslabel}}% + {\glsentrydesc{\glslabel}}% + {\glsentrysymbol{\glslabel}}{\glsinsert}% + }% + }% + {% + \ifglsused\glslabel + {% + \ifbool{glscompatible-3.07}% + {% + \protected@edef\@glo@etext{% + #2{\glsentrytext{\glslabel}}% + {\glsentrydesc{\glslabel}}% + {\glsentrysymbol{\glslabel}}{\glsinsert}}% + \xmakefirstuc\@glo@etext + }% + {% + #2{\Glsentrytext{\glslabel}}% + {\glsentrydesc{\glslabel}}% + {\glsentrysymbol{\glslabel}}{\glsinsert}% + }% + }% + {% + \ifbool{glscompatible-3.07}% + {% + \protected@edef\@glo@etext{% + #1{\glsentryfirst{\glslabel}}% + {\glsentrydesc{\glslabel}}% + {\glsentrysymbol{\glslabel}}{\glsinsert}}% + \xmakefirstuc\@glo@etext + }% + {% + #1{\Glsentryfirst{\glslabel}}% + {\glsentrydesc{\glslabel}}% + {\glsentrysymbol{\glslabel}}{\glsinsert}% + }% + }% + }% + {% + \ifglsused\glslabel + {% + \mfirstucMakeUppercase{#2{\glsentrytext{\glslabel}}% + {\glsentrydesc{\glslabel}}% + {\glsentrysymbol{\glslabel}}{\glsinsert}}% + }% + {% + \mfirstucMakeUppercase{#1{\glsentryfirst{\glslabel}}% + {\glsentrydesc{\glslabel}}% + {\glsentrysymbol{\glslabel}}{\glsinsert}}% + }% + }% + }% + }% + {% + \ifglsused{\glslabel}% + {% + #2{\glscustomtext}% + {\glsentrydesc{\glslabel}}% + {\glsentrysymbol{\glslabel}}{}% + }% + {% + #1{\glscustomtext}% + {\glsentrydesc{\glslabel}}% + {\glsentrysymbol{\glslabel}}{}% + }% + }% +} +\newcommand*{\glsgenentryfmt}{% + \ifdefempty\glscustomtext + {% + \glsifplural + {% + \glscapscase + {% + \ifglsused\glslabel + {% + \glsentryplural{\glslabel}\glsinsert + }% + {% + \glsentryfirstplural{\glslabel}\glsinsert + }% + }% + {% + \ifglsused\glslabel + {% + \Glsentryplural{\glslabel}\glsinsert + }% + {% + \Glsentryfirstplural{\glslabel}\glsinsert + }% + }% + {% + \ifglsused\glslabel + {% + \mfirstucMakeUppercase + {\glsentryplural{\glslabel}\glsinsert}% + }% + {% + \mfirstucMakeUppercase + {\glsentryfirstplural{\glslabel}\glsinsert}% + }% + }% + }% + {% + \glscapscase + {% + \ifglsused\glslabel + {% + \glsentrytext{\glslabel}\glsinsert + }% + {% + \glsentryfirst{\glslabel}\glsinsert + }% + }% + {% + \ifglsused\glslabel + {% + \Glsentrytext{\glslabel}\glsinsert + }% + {% + \Glsentryfirst{\glslabel}\glsinsert + }% + }% + {% + \ifglsused\glslabel + {% + \mfirstucMakeUppercase{\glsentrytext{\glslabel}\glsinsert}% + }% + {% + \mfirstucMakeUppercase{\glsentryfirst{\glslabel}\glsinsert}% + }% + }% + }% + }% + {% + \glscustomtext\glsinsert + }% +} +\newcommand*{\glsgenacfmt}{% + \ifdefempty\glscustomtext + {% + \ifglsused\glslabel + {% + \glsifplural + {% + \glscapscase + {% + \acronymfont{\glsentryshortpl{\glslabel}}\glsinsert + }% + {% + \acronymfont{\Glsentryshortpl{\glslabel}}\glsinsert + }% + {% + \mfirstucMakeUppercase + {\acronymfont{\glsentryshortpl{\glslabel}}\glsinsert}% + }% + }% + {% + \glscapscase + {% + \acronymfont{\glsentryshort{\glslabel}}\glsinsert + }% + {% + \acronymfont{\Glsentryshort{\glslabel}}\glsinsert + }% + {% + \mfirstucMakeUppercase + {\acronymfont{\glsentryshort{\glslabel}}\glsinsert}% + }% + }% + }% + {% + \glsifplural + {% + \glscapscase + {% + \genplacrfullformat{\glslabel}{\glsinsert}% + }% + {% + \Genplacrfullformat{\glslabel}{\glsinsert}% + }% + {% + \mfirstucMakeUppercase + {\genplacrfullformat{\glslabel}{\glsinsert}}% + }% + }% + {% + \glscapscase + {% + \genacrfullformat{\glslabel}{\glsinsert}% + }% + {% + \Genacrfullformat{\glslabel}{\glsinsert}% + }% + {% + \mfirstucMakeUppercase + {\genacrfullformat{\glslabel}{\glsinsert}}% + }% + }% + }% + }% + {% + \glscustomtext + }% +} +\newcommand*{\genacrfullformat}[2]{% + \glsentrylong{#1}#2\space + (\protect\firstacronymfont{\glsentryshort{#1}})% +} +\newcommand*{\Genacrfullformat}[2]{% + \protected@edef\gls@text{\genacrfullformat{#1}{#2}}% + \xmakefirstuc\gls@text +} +\newcommand*{\genplacrfullformat}[2]{% + \glsentrylongpl{#1}#2\space + (\protect\firstacronymfont{\glsentryshortpl{#1}})% +} +\newcommand*{\Genplacrfullformat}[2]{% + \protected@edef\gls@text{\genplacrfullformat{#1}{#2}}% + \xmakefirstuc\gls@text +} +\newcommand*{\glsdisplayfirst}[4]{#1#4} +\newcommand*{\glsdisplay}[4]{#1#4} +\newcommand*{\defglsdisplay}[2][\glsdefaulttype]{% + \GlossariesWarning{\string\defglsdisplay\space is now obsolete.^^J + Use \string\defglsentryfmt\space instead}% + \expandafter\def\csname gls@#1@display\endcsname##1##2##3##4{#2}% + \edef\@gls@doentrydef{% + \noexpand\defglsentryfmt[#1]{% + \noexpand\ifcsdef{gls@#1@displayfirst}% + {% + \noexpand\@@gls@default@entryfmt + {\noexpand\csuse{gls@#1@displayfirst}}% + {\noexpand\csuse{gls@#1@display}}% + }% + {% + \noexpand\@@gls@default@entryfmt + {\noexpand\glsdisplayfirst}% + {\noexpand\csuse{gls@#1@display}}% + }% + }% + }% + \@gls@doentrydef +} +\newcommand*{\defglsdisplayfirst}[2][\glsdefaulttype]{% + \GlossariesWarning{\string\defglsdisplayfirst\space is now obsolete.^^J + Use \string\defglsentryfmt\space instead}% + \expandafter\def\csname gls@#1@displayfirst\endcsname##1##2##3##4{#2}% + \edef\@gls@doentrydef{% + \noexpand\defglsentryfmt[#1]{% + \noexpand\ifcsdef{gls@#1@display}% + {% + \noexpand\@@gls@default@entryfmt + {\noexpand\csuse{gls@#1@displayfirst}}% + {\noexpand\csuse{gls@#1@display}}% + }% + {% + \noexpand\@@gls@default@entryfmt + {\noexpand\csuse{gls@#1@displayfirst}}% + {\noexpand\glsdisplay}% + }% + }% + }% + \@gls@doentrydef +} +\define@key{glslink}{counter}{% + \ifcsundef{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}% + }% +} +\define@key{glslink}{format}{% + \def\@glsnumberformat{#1}} +\define@boolkey{glslink}{hyper}[true]{} +\ifdef{\hyperlink}{\KV@glslink@hypertrue}{\KV@glslink@hyperfalse} +\define@boolkey{glslink}{local}[true]{} +\newcommand*{\glslinkvar}[3]{#1} +\newcommand*{\glsifhyper}[2]{% + \glslinkvar{#1}{#2}{#1}% + \GlossariesWarning{\string\glsifhyper\space is deprecated. Did + you mean \string\glsifhyperon\space or \string\glslinkvar?}% +} +\newcommand*{\@gls@hyp@opt}[1]{% + \let\glslinkvar\@firstofthree + \let\@gls@hyp@opt@cs#1\relax + \@ifstar{\s@gls@hyp@opt}% + {\@ifnextchar+{\@firstoftwo{\p@gls@hyp@opt}}{#1}}% +} +\newcommand*{\s@gls@hyp@opt}[1][]{% + \let\glslinkvar\@secondofthree + \@gls@hyp@opt@cs[hyper=false,#1]} +\newcommand*{\p@gls@hyp@opt}[1][]{% + \let\glslinkvar\@thirdofthree + \@gls@hyp@opt@cs[hyper=true,#1]} +\newrobustcmd*{\glslink}{% + \@gls@hyp@opt\@gls@@link +} +\newcommand*{\@gls@@link}[3][]{% + \glsdoifexistsordo{#2}% + {% + \let\do@gls@link@checkfirsthyper\relax + \@gls@link[#1]{#2}{#3}% + }{% + \glstextformat{#3}% + }% + \glspostlinkhook +} +\newcommand*{\glspostlinkhook}{} +\newcommand*{\@gls@link@checkfirsthyper}{% + \ifglsused{\glslabel}% + {% + }% + {% + \gls@checkisacronymlist\glstype + \ifglshyperfirst + \if@glsisacronymlist + \ifglsacrfootnote + \KV@glslink@hyperfalse + \fi + \fi + \else + \KV@glslink@hyperfalse + \fi + }% + \glslinkcheckfirsthyperhook +} +\newcommand*{\glslinkcheckfirsthyperhook}{} +\newcommand*{\glslinkpostsetkeys}{} +\newcommand{\glsifhyperon}[2]{\ifKV@glslink@hyper#1\else#2\fi} +\newcommand*{\do@glsdisablehyperinlist}{% + \expandafter\DTLifinlist\expandafter{\glstype}{\@gls@nohyperlist}% + {\KV@glslink@hyperfalse}{}% +} +\newcommand*{\@gls@setdefault@glslink@opts}{} +\def\@gls@link[#1]#2#3{% + \leavevmode + \edef\glslabel{\glsdetoklabel{#2}}% + \def\@gls@link@opts{#1}% + \let\@gls@link@label\glslabel + \def\@glsnumberformat{glsnumberformat}% + \edef\@gls@counter{\csname glo@\glslabel @counter\endcsname}% + \edef\glstype{\csname glo@\glslabel @type\endcsname}% + \let\org@ifKV@glslink@hyper\ifKV@glslink@hyper + \@gls@setdefault@glslink@opts + \do@glsdisablehyperinlist + \do@gls@link@checkfirsthyper + \setkeys{glslink}{#1}% + \glslinkpostsetkeys + \@gls@saveentrycounter + \@gls@setsort{\glslabel}% + \@do@wrglossary{#2}% + \ifKV@glslink@hyper + \@glslink{\glolinkprefix\glslabel}{\glstextformat{#3}}% + \else + \glsdonohyperlink{\glolinkprefix\glslabel}{\glstextformat{#3}}% + \fi + \let\ifKV@glslink@hyper\org@ifKV@glslink@hyper +} +\newcommand*{\glolinkprefix}{glo:} +\def\glsentrycounter{\glscounter}% +\newcommand*{\@gls@saveentrycounter}{% + \def\@gls@Hcounter{}% + \ifthenelse{\equal{\@gls@counter}{equation}}% + { + \ifcsundef{xatlevel@}% + {% + \edef\theglsentrycounter{\expandafter\noexpand + \csname the\@gls@counter\endcsname}% + }% + {% + \ifx\xatlevel@\@empty + \edef\theglsentrycounter{\expandafter\noexpand + \csname the\@gls@counter\endcsname}% + \else + \savecounters@ + \advance\c@equation by 1\relax + \edef\theglsentrycounter{\csname the\@gls@counter\endcsname}% + \ifcsundef{theH\@gls@counter}% + {% + \def\@gls@Hcounter{\theglsentrycounter}% + }% + {% + \def\@gls@Hcounter{\csname theH\@gls@counter\endcsname}% + }% + \protected@edef\theHglsentrycounter{\@gls@Hcounter}% + \restorecounters@ + \fi + }% + }% + {% + \edef\theglsentrycounter{\expandafter\noexpand + \csname the\@gls@counter\endcsname}% + }% + \ifx\@gls@Hcounter\@empty + \ifcsundef{theH\@gls@counter}% + {% + \def\theHglsentrycounter{\theglsentrycounter}% + }% + {% + \protected@edef\theHglsentrycounter{\expandafter\noexpand + \csname theH\@gls@counter\endcsname}% + }% + \fi +} +\def\@set@glo@numformat#1#2#3#4{% + \expandafter\@glo@check@mkidxrangechar#3\@nil + \protected@edef#1{% + \@glo@prefix setentrycounter[#4]{#2}% + \expandafter\string\csname\@glo@suffix\endcsname + }% + \@gls@checkmkidxchars#1% +} +\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} +\newcommand*{\@gls@escbsdq}[1]{% + \def\@gls@checkedmkidx{}% + \let\gls@xdystring=#1\relax + \@onelevel@sanitize\gls@xdystring + \edef\do@gls@xdycheckbackslash{% + \noexpand\@gls@xdycheckbackslash\gls@xdystring\noexpand\@nil + \@backslashchar\@backslashchar\noexpand\null}% + \do@gls@xdycheckbackslash + \expandafter\@gls@updatechecked\@gls@checkedmkidx{\gls@xdystring}% + \def\@gls@checkedmkidx{}% + \expandafter\@gls@xdycheckquote\gls@xdystring\@nil""\null + \expandafter\@gls@updatechecked\@gls@checkedmkidx{\gls@xdystring}% + \@for\@gls@tmp:=\gls@protected@pagefmts\do + {% + \edef\@gls@sanitized@tmp{\expandafter\@gobble\string\\\expandonce\@gls@tmp}% + \@onelevel@sanitize\@gls@sanitized@tmp + \edef\gls@dosubst{% + \noexpand\DTLsubstituteall\noexpand\gls@xdystring + {\@gls@sanitized@tmp}{\expandonce\@gls@tmp}% + }% + \gls@dosubst + }% + \let#1=\gls@xdystring +} +\newcommand{\@gls@checkmkidxchars}[1]{% + \ifglsxindy + \@gls@escbsdq{#1}% + \else + \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}% + \fi +} +\def\@gls@updatechecked#1\@nil#2{\def#2{#1}} +\newtoks\@gls@tmpb +\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 +} +\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 +} +\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 +} +\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 +} +\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 +} +\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 +} +\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 +} +\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 +} +\def\@gls@xdycheckquote#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@xdycheckquote{\relax}% + \else + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ + \string\"\string\"}% + \def\@@gls@xdycheckquote{\@gls@xdycheckquote#3\null}% + \fi + \else + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ + \string\"}% + \ifx\null#3\null + \def\@@gls@xdycheckquote{\@gls@xdycheckquote#2""\null}% + \else + \def\@@gls@xdycheckquote{\@gls@xdycheckquote#2"#3\null}% + \fi + \fi + \@@gls@xdycheckquote +} +\edef\def@gls@xdycheckbackslash{% + \noexpand\def\noexpand\@gls@xdycheckbackslash##1\@backslashchar + ##2\@backslashchar##3\noexpand\null{% + \noexpand\@gls@tmpb=\noexpand\expandafter + {\noexpand\@gls@checkedmkidx}% + \noexpand\toks@={##1}% + \noexpand\ifx\noexpand\null##2\noexpand\null + \noexpand\ifx\noexpand\null##3\noexpand\null + \noexpand\edef\noexpand\@gls@checkedmkidx{% + \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@}% + \noexpand\def\noexpand\@@gls@xdycheckbackslash{\relax}% + \noexpand\else + \noexpand\edef\noexpand\@gls@checkedmkidx{% + \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@ + \@backslashchar\@backslashchar\@backslashchar\@backslashchar}% + \noexpand\def\noexpand\@@gls@xdycheckbackslash{% + \noexpand\@gls@xdycheckbackslash##3\noexpand\null}% + \noexpand\fi + \noexpand\else + \noexpand\edef\noexpand\@gls@checkedmkidx{% + \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@ + \@backslashchar\@backslashchar}% + \noexpand\ifx\noexpand\null##3\noexpand\null + \noexpand\def\noexpand\@@gls@xdycheckbackslash{% + \noexpand\@gls@xdycheckbackslash##2\@backslashchar + \@backslashchar\noexpand\null}% + \noexpand\else + \noexpand\def\noexpand\@@gls@xdycheckbackslash{% + \noexpand\@gls@xdycheckbackslash##2\@backslashchar + ##3\noexpand\null}% + \noexpand\fi + \noexpand\fi + \noexpand\@@gls@xdycheckbackslash + }% +} +\def@gls@xdycheckbackslash + +\newlength\gls@tmplen +\newcommand*{\glsdohypertarget}[2]{% + \@glsshowtarget{#1}% + \settoheight{\gls@tmplen}{#2}% + \raisebox{\gls@tmplen}{\hypertarget{#1}{}}#2% +} +\newcommand*{\glsdohyperlink}[2]{% + \@glsshowtarget{#1}% + \hyperlink{#1}{#2}% +} +\newcommand*{\glsdonohyperlink}[2]{#2} +\ifcsundef{hyperlink}% +{% + \let\@glslink\glsdonohyperlink +}% +{% + \let\@glslink\glsdohyperlink +} +\ifcsundef{hypertarget}% +{% + \let\@glstarget\@secondoftwo +}% +{% + \let\@glstarget\glsdohypertarget +} +\newcommand{\glsdisablehyper}{% + \KV@glslink@hyperfalse + \let\@glslink\glsdonohyperlink + \let\@glstarget\@secondoftwo +} +\newcommand{\glsenablehyper}{% + \KV@glslink@hypertrue + \let\@glslink\glsdohyperlink + \let\@glstarget\glsdohypertarget +} +\providecommand{\@firstofthree}[3]{#1} +\providecommand{\@secondofthree}[3]{#2} +\newrobustcmd*{\gls}{\@gls@hyp@opt\@gls} +\newcommand*{\@gls}[2][]{% + \new@ifnextchar[{\@gls@{#1}{#2}}{\@gls@{#1}{#2}[]}% +} +\def\@gls@#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper + \let\glsifplural\@secondoftwo + \let\glscapscase\@firstofthree + \let\glscustomtext\@empty + \def\glsinsert{#3}% + \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}% + \@gls@link[#1]{#2}{\@glo@text}% + \ifKV@glslink@local + \glslocalunset{#2}% + \else + \glsunset{#2}% + \fi + }% + \glspostlinkhook +} +\newrobustcmd*{\Gls}{\@gls@hyp@opt\@Gls} +\newcommand*{\@Gls}[2][]{% + \new@ifnextchar[{\@Gls@{#1}{#2}}{\@Gls@{#1}{#2}[]}% +} +\def\@Gls@#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper + \let\glsifplural\@secondoftwo + \let\glscapscase\@secondofthree + \let\glscustomtext\@empty + \def\glsinsert{#3}% + \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}% + \@gls@link[#1]{#2}{\@glo@text}% + \ifKV@glslink@local + \glslocalunset{#2}% + \else + \glsunset{#2}% + \fi + }% + \glspostlinkhook +} +\newrobustcmd*{\GLS}{\@gls@hyp@opt\@GLS} +\newcommand*{\@GLS}[2][]{% + \new@ifnextchar[{\@GLS@{#1}{#2}}{\@GLS@{#1}{#2}[]}% +} +\def\@GLS@#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper + \let\glsifplural\@secondoftwo + \let\glscapscase\@thirdofthree + \let\glscustomtext\@empty + \def\glsinsert{#3}% + \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}% + \@gls@link[#1]{#2}{\@glo@text}% + \ifKV@glslink@local + \glslocalunset{#2}% + \else + \glsunset{#2}% + \fi + }% + \glspostlinkhook +} +\newrobustcmd*{\glspl}{\@gls@hyp@opt\@glspl} +\newcommand*{\@glspl}[2][]{% + \new@ifnextchar[{\@glspl@{#1}{#2}}{\@glspl@{#1}{#2}[]}% +} +\def\@glspl@#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper + \let\glsifplural\@firstoftwo + \let\glscapscase\@firstofthree + \let\glscustomtext\@empty + \def\glsinsert{#3}% + \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}% + \@gls@link[#1]{#2}{\@glo@text}% + \ifKV@glslink@local + \glslocalunset{#2}% + \else + \glsunset{#2}% + \fi + }% + \glspostlinkhook +} +\newrobustcmd*{\Glspl}{\@gls@hyp@opt\@Glspl} +\newcommand*{\@Glspl}[2][]{% + \new@ifnextchar[{\@Glspl@{#1}{#2}}{\@Glspl@{#1}{#2}[]}% +} +\def\@Glspl@#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper + \let\glsifplural\@firstoftwo + \let\glscapscase\@secondofthree + \let\glscustomtext\@empty + \def\glsinsert{#3}% + \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}% + \@gls@link[#1]{#2}{\@glo@text}% + \ifKV@glslink@local + \glslocalunset{#2}% + \else + \glsunset{#2}% + \fi + }% + \glspostlinkhook +} +\newrobustcmd*{\GLSpl}{\@gls@hyp@opt\@GLSpl} +\newcommand*{\@GLSpl}[2][]{% + \new@ifnextchar[{\@GLSpl@{#1}{#2}}{\@GLSpl@{#1}{#2}[]}% +} +\def\@GLSpl@#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper + \let\glsifplural\@firstoftwo + \let\glscapscase\@thirdofthree + \let\glscustomtext\@empty + \def\glsinsert{#3}% + \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}% + \@gls@link[#1]{#2}{\@glo@text}% + \ifKV@glslink@local + \glslocalunset{#2}% + \else + \glsunset{#2}% + \fi + }% + \glspostlinkhook +} +\newrobustcmd*{\glsdisp}{\@gls@hyp@opt\@glsdisp} +\newcommand*{\@glsdisp}[3][]{% + \glsdoifexists{#2}{% + \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper + \let\glsifplural\@secondoftwo + \let\glscapscase\@firstofthree + \def\glscustomtext{#3}% + \def\glsinsert{}% + \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}% + \@gls@link[#1]{#2}{\@glo@text}% + \ifKV@glslink@local + \glslocalunset{#2}% + \else + \glsunset{#2}% + \fi + }% + \glspostlinkhook +} +\newcommand*{\@gls@link@nocheckfirsthyper}{} +\newcommand{\@gls@field@link}[3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \@gls@link[#1]{#2}{#3}% + }% + \glspostlinkhook +} +\newrobustcmd*{\glstext}{\@gls@hyp@opt\@glstext} +\newcommand*{\@glstext}[2][]{% + \new@ifnextchar[{\@glstext@{#1}{#2}}{\@glstext@{#1}{#2}[]}} +\def\@glstext@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentrytext{#2}#3}% +} +\newrobustcmd*{\GLStext}{\@gls@hyp@opt\@GLStext} +\newcommand*{\@GLStext}[2][]{% + \new@ifnextchar[{\@GLStext@{#1}{#2}}{\@GLStext@{#1}{#2}[]}} +\def\@GLStext@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentrytext{#2}#3}}% +} +\newrobustcmd*{\Glstext}{\@gls@hyp@opt\@Glstext} +\newcommand*{\@Glstext}[2][]{% + \new@ifnextchar[{\@Glstext@{#1}{#2}}{\@Glstext@{#1}{#2}[]}} +\def\@Glstext@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentrytext{#2}#3}% +} +\newrobustcmd*{\glsfirst}{\@gls@hyp@opt\@glsfirst} +\newcommand*{\@glsfirst}[2][]{% + \new@ifnextchar[{\@glsfirst@{#1}{#2}}{\@glsfirst@{#1}{#2}[]}} +\def\@glsfirst@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentryfirst{#2}#3}% +} +\newrobustcmd*{\Glsfirst}{\@gls@hyp@opt\@Glsfirst} +\newcommand*{\@Glsfirst}[2][]{% + \new@ifnextchar[{\@Glsfirst@{#1}{#2}}{\@Glsfirst@{#1}{#2}[]}} +\def\@Glsfirst@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentryfirst{#2}#3}% +} +\newrobustcmd*{\GLSfirst}{\@gls@hyp@opt\@GLSfirst} +\newcommand*{\@GLSfirst}[2][]{% + \new@ifnextchar[{\@GLSfirst@{#1}{#2}}{\@GLSfirst@{#1}{#2}[]}} +\def\@GLSfirst@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryfirst{#2}#3}}% +} +\newrobustcmd*{\glsplural}{\@gls@hyp@opt\@glsplural} +\newcommand*{\@glsplural}[2][]{% + \new@ifnextchar[{\@glsplural@{#1}{#2}}{\@glsplural@{#1}{#2}[]}} +\def\@glsplural@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentryplural{#2}#3}% +} +\newrobustcmd*{\Glsplural}{\@gls@hyp@opt\@Glsplural} +\newcommand*{\@Glsplural}[2][]{% + \new@ifnextchar[{\@Glsplural@{#1}{#2}}{\@Glsplural@{#1}{#2}[]}} +\def\@Glsplural@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentryplural{#2}#3}% +} +\newrobustcmd*{\GLSplural}{\@gls@hyp@opt\@GLSplural} +\newcommand*{\@GLSplural}[2][]{% + \new@ifnextchar[{\@GLSplural@{#1}{#2}}{\@GLSplural@{#1}{#2}[]}} +\def\@GLSplural@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryplural{#2}#3}}% +} +\newrobustcmd*{\glsfirstplural}{\@gls@hyp@opt\@glsfirstplural} +\newcommand*{\@glsfirstplural}[2][]{% + \new@ifnextchar[{\@glsfirstplural@{#1}{#2}}{\@glsfirstplural@{#1}{#2}[]}} +\def\@glsfirstplural@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentryfirstplural{#2}#3}% +} +\newrobustcmd*{\Glsfirstplural}{\@gls@hyp@opt\@Glsfirstplural} +\newcommand*{\@Glsfirstplural}[2][]{% + \new@ifnextchar[{\@Glsfirstplural@{#1}{#2}}{\@Glsfirstplural@{#1}{#2}[]}} +\def\@Glsfirstplural@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentryfirstplural{#2}#3}% +} +\newrobustcmd*{\GLSfirstplural}{\@gls@hyp@opt\@GLSfirstplural} +\newcommand*{\@GLSfirstplural}[2][]{% + \new@ifnextchar[{\@GLSfirstplural@{#1}{#2}}{\@GLSfirstplural@{#1}{#2}[]}} +\def\@GLSfirstplural@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryfirstplural{#2}#3}}% +} +\newrobustcmd*{\glsname}{\@gls@hyp@opt\@glsname} +\newcommand*{\@glsname}[2][]{% + \new@ifnextchar[{\@glsname@{#1}{#2}}{\@glsname@{#1}{#2}[]}} +\def\@glsname@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentryname{#2}#3}% +} +\newrobustcmd*{\Glsname}{\@gls@hyp@opt\@Glsname} +\newcommand*{\@Glsname}[2][]{% + \new@ifnextchar[{\@Glsname@{#1}{#2}}{\@Glsname@{#1}{#2}[]}} +\def\@Glsname@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentryname{#2}#3}% +} +\newrobustcmd*{\GLSname}{\@gls@hyp@opt\@GLSname} +\newcommand*{\@GLSname}[2][]{% + \new@ifnextchar[{\@GLSname@{#1}{#2}}{\@GLSname@{#1}{#2}[]}} +\def\@GLSname@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryname{#2}#3}}% +} +\newrobustcmd*{\glsdesc}{\@gls@hyp@opt\@glsdesc} +\newcommand*{\@glsdesc}[2][]{% + \new@ifnextchar[{\@glsdesc@{#1}{#2}}{\@glsdesc@{#1}{#2}[]}} +\def\@glsdesc@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentrydesc{#2}#3}% +} +\newrobustcmd*{\Glsdesc}{\@gls@hyp@opt\@Glsdesc} +\newcommand*{\@Glsdesc}[2][]{% + \new@ifnextchar[{\@Glsdesc@{#1}{#2}}{\@Glsdesc@{#1}{#2}[]}} +\def\@Glsdesc@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentrydesc{#2}#3}% +} +\newrobustcmd*{\GLSdesc}{\@gls@hyp@opt\@GLSdesc} +\newcommand*{\@GLSdesc}[2][]{% + \new@ifnextchar[{\@GLSdesc@{#1}{#2}}{\@GLSdesc@{#1}{#2}[]}} +\def\@GLSdesc@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentrydesc{#2}#3}}% +} +\newrobustcmd*{\glsdescplural}{\@gls@hyp@opt\@glsdescplural} +\newcommand*{\@glsdescplural}[2][]{% + \new@ifnextchar[{\@glsdescplural@{#1}{#2}}{\@glsdescplural@{#1}{#2}[]}} +\def\@glsdescplural@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentrydescplural{#2}#3}% +} +\newrobustcmd*{\Glsdescplural}{\@gls@hyp@opt\@Glsdescplural} +\newcommand*{\@Glsdescplural}[2][]{% + \new@ifnextchar[{\@Glsdescplural@{#1}{#2}}{\@Glsdescplural@{#1}{#2}[]}} +\def\@Glsdescplural@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentrydescplural{#2}#3}% +} +\newrobustcmd*{\GLSdescplural}{\@gls@hyp@opt\@GLSdescplural} +\newcommand*{\@GLSdescplural}[2][]{% + \new@ifnextchar[{\@GLSdescplural@{#1}{#2}}{\@GLSdescplural@{#1}{#2}[]}} +\def\@GLSdescplural@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentrydescplural{#2}#3}}% +} +\newrobustcmd*{\glssymbol}{\@gls@hyp@opt\@glssymbol} +\newcommand*{\@glssymbol}[2][]{% + \new@ifnextchar[{\@glssymbol@{#1}{#2}}{\@glssymbol@{#1}{#2}[]}} +\def\@glssymbol@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentrysymbol{#2}#3}% +} +\newrobustcmd*{\Glssymbol}{\@gls@hyp@opt\@Glssymbol} +\newcommand*{\@Glssymbol}[2][]{% + \new@ifnextchar[{\@Glssymbol@{#1}{#2}}{\@Glssymbol@{#1}{#2}[]}} +\def\@Glssymbol@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentrysymbol{#2}#3}% +} +\newrobustcmd*{\GLSsymbol}{\@gls@hyp@opt\@GLSsymbol} +\newcommand*{\@GLSsymbol}[2][]{% + \new@ifnextchar[{\@GLSsymbol@{#1}{#2}}{\@GLSsymbol@{#1}{#2}[]}} +\def\@GLSsymbol@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentrysymbol{#2}#3}}% +} +\newrobustcmd*{\glssymbolplural}{\@gls@hyp@opt\@glssymbolplural} +\newcommand*{\@glssymbolplural}[2][]{% + \new@ifnextchar[{\@glssymbolplural@{#1}{#2}}{\@glssymbolplural@{#1}{#2}[]}} +\def\@glssymbolplural@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentrysymbolplural{#2}#3}% +} +\newrobustcmd*{\Glssymbolplural}{\@gls@hyp@opt\@Glssymbolplural} +\newcommand*{\@Glssymbolplural}[2][]{% + \new@ifnextchar[{\@Glssymbolplural@{#1}{#2}}{\@Glssymbolplural@{#1}{#2}[]}} +\def\@Glssymbolplural@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentrysymbolplural{#2}#3}% +} +\newrobustcmd*{\GLSsymbolplural}{\@gls@hyp@opt\@GLSsymbolplural} +\newcommand*{\@GLSsymbolplural}[2][]{% + \new@ifnextchar[{\@GLSsymbolplural@{#1}{#2}}{\@GLSsymbolplural@{#1}{#2}[]}} +\def\@GLSsymbolplural@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentrysymbolplural{#2}#3}}% +} +\newrobustcmd*{\glsuseri}{\@gls@hyp@opt\@glsuseri} +\newcommand*{\@glsuseri}[2][]{% + \new@ifnextchar[{\@glsuseri@{#1}{#2}}{\@glsuseri@{#1}{#2}[]}} +\def\@glsuseri@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentryuseri{#2}#3}% +} +\newrobustcmd*{\Glsuseri}{\@gls@hyp@opt\@Glsuseri} +\newcommand*{\@Glsuseri}[2][]{% + \new@ifnextchar[{\@Glsuseri@{#1}{#2}}{\@Glsuseri@{#1}{#2}[]}} +\def\@Glsuseri@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentryuseri{#2}#3}% +} +\newrobustcmd*{\GLSuseri}{\@gls@hyp@opt\@GLSuseri} +\newcommand*{\@GLSuseri}[2][]{% + \new@ifnextchar[{\@GLSuseri@{#1}{#2}}{\@GLSuseri@{#1}{#2}[]}} +\def\@GLSuseri@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryuseri{#2}#3}}% +} +\newrobustcmd*{\glsuserii}{\@gls@hyp@opt\@glsuserii} +\newcommand*{\@glsuserii}[2][]{% + \new@ifnextchar[{\@glsuserii@{#1}{#2}}{\@glsuserii@{#1}{#2}[]}} +\def\@glsuserii@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentryuserii{#2}#3}% +} +\newrobustcmd*{\Glsuserii}{\@gls@hyp@opt\@Glsuserii} +\newcommand*{\@Glsuserii}[2][]{% + \new@ifnextchar[{\@Glsuserii@{#1}{#2}}{\@Glsuserii@{#1}{#2}[]}} +\def\@Glsuserii@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentryuserii{#2}#3}% +} +\newrobustcmd*{\GLSuserii}{\@gls@hyp@opt\@GLSuserii} +\newcommand*{\@GLSuserii}[2][]{% + \new@ifnextchar[{\@GLSuserii@{#1}{#2}}{\@GLSuserii@{#1}{#2}[]}} +\def\@GLSuserii@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryuserii{#2}#3}}% +} +\newrobustcmd*{\glsuseriii}{\@gls@hyp@opt\@glsuseriii} +\newcommand*{\@glsuseriii}[2][]{% + \new@ifnextchar[{\@glsuseriii@{#1}{#2}}{\@glsuseriii@{#1}{#2}[]}} +\def\@glsuseriii@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentryuseriii{#2}#3}% +} +\newrobustcmd*{\Glsuseriii}{\@gls@hyp@opt\@Glsuseriii} +\newcommand*{\@Glsuseriii}[2][]{% + \new@ifnextchar[{\@Glsuseriii@{#1}{#2}}{\@Glsuseriii@{#1}{#2}[]}} +\def\@Glsuseriii@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentryuseriii{#2}#3}% +} +\newrobustcmd*{\GLSuseriii}{\@gls@hyp@opt\@GLSuseriii} +\newcommand*{\@GLSuseriii}[2][]{% + \new@ifnextchar[{\@GLSuseriii@{#1}{#2}}{\@GLSuseriii@{#1}{#2}[]}} +\def\@GLSuseriii@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryuseriii{#2}#3}}% +} +\newrobustcmd*{\glsuseriv}{\@gls@hyp@opt\@glsuseriv} +\newcommand*{\@glsuseriv}[2][]{% + \new@ifnextchar[{\@glsuseriv@{#1}{#2}}{\@glsuseriv@{#1}{#2}[]}} +\def\@glsuseriv@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentryuseriv{#2}#3}% +} +\newrobustcmd*{\Glsuseriv}{\@gls@hyp@opt\@Glsuseriv} +\newcommand*{\@Glsuseriv}[2][]{% + \new@ifnextchar[{\@Glsuseriv@{#1}{#2}}{\@Glsuseriv@{#1}{#2}[]}} +\def\@Glsuseriv@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentryuseriv{#2}#3}% +} +\newrobustcmd*{\GLSuseriv}{\@gls@hyp@opt\@GLSuseriv} +\newcommand*{\@GLSuseriv}[2][]{% + \new@ifnextchar[{\@GLSuseriv@{#1}{#2}}{\@GLSuseriv@{#1}{#2}[]}} +\def\@GLSuseriv@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryuseriv{#2}#3}}% +} +\newrobustcmd*{\glsuserv}{\@gls@hyp@opt\@glsuserv} +\newcommand*{\@glsuserv}[2][]{% + \new@ifnextchar[{\@glsuserv@{#1}{#2}}{\@glsuserv@{#1}{#2}[]}} +\def\@glsuserv@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentryuserv{#2}#3}% +} +\newrobustcmd*{\Glsuserv}{\@gls@hyp@opt\@Glsuserv} +\newcommand*{\@Glsuserv}[2][]{% +\new@ifnextchar[{\@Glsuserv@{#1}{#2}}{\@Glsuserv@{#1}{#2}[]}} +\def\@Glsuserv@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentryuserv{#2}#3}% +} +\newrobustcmd*{\GLSuserv}{\@gls@hyp@opt\@GLSuserv} +\newcommand*{\@GLSuserv}[2][]{% +\new@ifnextchar[{\@GLSuserv@{#1}{#2}}{\@GLSuserv@{#1}{#2}[]}} +\def\@GLSuserv@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryuserv{#2}#3}}% +} +\newrobustcmd*{\glsuservi}{\@gls@hyp@opt\@glsuservi} +\newcommand*{\@glsuservi}[2][]{% + \new@ifnextchar[{\@glsuservi@{#1}{#2}}{\@glsuservi@{#1}{#2}[]}} +\def\@glsuservi@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentryuservi{#2}#3}% +} +\newrobustcmd*{\Glsuservi}{\@gls@hyp@opt\@Glsuservi} +\newcommand*{\@Glsuservi}[2][]{% + \new@ifnextchar[{\@Glsuservi@{#1}{#2}}{\@Glsuservi@{#1}{#2}[]}} +\def\@Glsuservi@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentryuservi{#2}#3}% +} +\newrobustcmd*{\GLSuservi}{\@gls@hyp@opt\@GLSuservi} +\newcommand*{\@GLSuservi}[2][]{% + \new@ifnextchar[{\@GLSuservi@{#1}{#2}}{\@GLSuservi@{#1}{#2}[]}} +\def\@GLSuservi@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryuservi{#2}#3}}% +} +\newrobustcmd*{\acrshort}{\@gls@hyp@opt\ns@acrshort} +\newcommand*{\ns@acrshort}[2][]{% + \new@ifnextchar[{\@acrshort{#1}{#2}}{\@acrshort{#1}{#2}[]}% +} +\def\@acrshort#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \let\glsifplural\@secondoftwo + \let\glscapscase\@firstofthree + \let\glsinsert\@empty + \def\glscustomtext{% + \acronymfont{\glsentryshort{#2}}#3% + }% + \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% + }% + \glspostlinkhook +} +\newrobustcmd*{\Acrshort}{\@gls@hyp@opt\ns@Acrshort} +\newcommand*{\ns@Acrshort}[2][]{% + \new@ifnextchar[{\@Acrshort{#1}{#2}}{\@Acrshort{#1}{#2}[]}% +} +\def\@Acrshort#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \def\glslabel{#2}% + \let\glsifplural\@secondoftwo + \let\glscapscase\@secondofthree + \let\glsinsert\@empty + \def\glscustomtext{% + \acronymfont{\Glsentryshort{#2}}#3% + }% + \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% + }% + \glspostlinkhook +} +\newrobustcmd*{\ACRshort}{\@gls@hyp@opt\ns@ACRshort} +\newcommand*{\ns@ACRshort}[2][]{% + \new@ifnextchar[{\@ACRshort{#1}{#2}}{\@ACRshort{#1}{#2}[]}% +} +\def\@ACRshort#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \def\glslabel{#2}% + \let\glsifplural\@secondoftwo + \let\glscapscase\@thirdofthree + \let\glsinsert\@empty + \def\glscustomtext{% + \mfirstucMakeUppercase{\acronymfont{\glsentryshort{#2}}#3}% + }% + \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% + }% + \glspostlinkhook +} +\newrobustcmd*{\acrshortpl}{\@gls@hyp@opt\ns@acrshortpl} +\newcommand*{\ns@acrshortpl}[2][]{% + \new@ifnextchar[{\@acrshortpl{#1}{#2}}{\@acrshortpl{#1}{#2}[]}% +} +\def\@acrshortpl#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \def\glslabel{#2}% + \let\glsifplural\@firstoftwo + \let\glscapscase\@firstofthree + \let\glsinsert\@empty + \def\glscustomtext{% + \acronymfont{\glsentryshortpl{#2}}#3% + }% + \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% + }% + \glspostlinkhook +} +\newrobustcmd*{\Acrshortpl}{\@gls@hyp@opt\ns@Acrshortpl} +\newcommand*{\ns@Acrshortpl}[2][]{% + \new@ifnextchar[{\@Acrshortpl{#1}{#2}}{\@Acrshortpl{#1}{#2}[]}% +} +\def\@Acrshortpl#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \def\glslabel{#2}% + \let\glsifplural\@firstoftwo + \let\glscapscase\@secondofthree + \let\glsinsert\@empty + \def\glscustomtext{% + \acronymfont{\Glsentryshortpl{#2}}#3% + }% + \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% + }% + \glspostlinkhook +} +\newrobustcmd*{\ACRshortpl}{\@gls@hyp@opt\ns@ACRshortpl} +\newcommand*{\ns@ACRshortpl}[2][]{% + \new@ifnextchar[{\@ACRshortpl{#1}{#2}}{\@ACRshortpl{#1}{#2}[]}% +} +\def\@ACRshortpl#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \def\glslabel{#2}% + \let\glsifplural\@firstoftwo + \let\glscapscase\@thirdofthree + \let\glsinsert\@empty + \def\glscustomtext{% + \mfirstucMakeUppercase{\acronymfont{\glsentryshortpl{#2}}#3}% + }% + \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% + }% + \glspostlinkhook +} +\newrobustcmd*{\acrlong}{\@gls@hyp@opt\ns@acrlong} +\newcommand*{\ns@acrlong}[2][]{% + \new@ifnextchar[{\@acrlong{#1}{#2}}{\@acrlong{#1}{#2}[]}% +} +\def\@acrlong#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \def\glslabel{#2}% + \let\glsifplural\@secondoftwo + \let\glscapscase\@firstofthree + \let\glsinsert\@empty + \def\glscustomtext{% + \glsentrylong{#2}#3% + }% + \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% + }% + \glspostlinkhook +} +\newrobustcmd*{\Acrlong}{\@gls@hyp@opt\ns@Acrlong} +\newcommand*{\ns@Acrlong}[2][]{% + \new@ifnextchar[{\@Acrlong{#1}{#2}}{\@Acrlong{#1}{#2}[]}% +} +\def\@Acrlong#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \def\glslabel{#2}% + \let\glsifplural\@secondoftwo + \let\glscapscase\@secondofthree + \let\glsinsert\@empty + \def\glscustomtext{% + \Glsentrylong{#2}#3% + }% + \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% + }% + \glspostlinkhook +} +\newrobustcmd*{\ACRlong}{\@gls@hyp@opt\ns@ACRlong} +\newcommand*{\ns@ACRlong}[2][]{% + \new@ifnextchar[{\@ACRlong{#1}{#2}}{\@ACRlong{#1}{#2}[]}% +} +\def\@ACRlong#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \def\glslabel{#2}% + \let\glsifplural\@secondoftwo + \let\glscapscase\@thirdofthree + \let\glsinsert\@empty + \def\glscustomtext{% + \mfirstucMakeUppercase{\glsentrylong{#2}#3}% + }% + \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% + }% + \glspostlinkhook +} +\newrobustcmd*{\acrlongpl}{\@gls@hyp@opt\ns@acrlongpl} +\newcommand*{\ns@acrlongpl}[2][]{% + \new@ifnextchar[{\@acrlongpl{#1}{#2}}{\@acrlongpl{#1}{#2}[]}% +} +\def\@acrlongpl#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \def\glslabel{#2}% + \let\glsifplural\@firstoftwo + \let\glscapscase\@firstofthree + \let\glsinsert\@empty + \def\glscustomtext{% + \glsentrylongpl{#2}#3% + }% + \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% + }% + \glspostlinkhook +} +\newrobustcmd*{\Acrlongpl}{\@gls@hyp@opt\ns@Acrlongpl} +\newcommand*{\ns@Acrlongpl}[2][]{% + \new@ifnextchar[{\@Acrlongpl{#1}{#2}}{\@Acrlongpl{#1}{#2}[]}% +} +\def\@Acrlongpl#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \def\glslabel{#2}% + \let\glsifplural\@firstoftwo + \let\glscapscase\@secondofthree + \let\glsinsert\@empty + \def\glscustomtext{% + \Glsentrylongpl{#2}#3% + }% + \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% + }% + \glspostlinkhook +} +\newrobustcmd*{\ACRlongpl}{\@gls@hyp@opt\ns@ACRlongpl} +\newcommand*{\ns@ACRlongpl}[2][]{% + \new@ifnextchar[{\@ACRlongpl{#1}{#2}}{\@ACRlongpl{#1}{#2}[]}% +} +\def\@ACRlongpl#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \def\glslabel{#2}% + \let\glsifplural\@firstoftwo + \let\glscapscase\@thirdofthree + \let\glsinsert\@empty + \def\glscustomtext{% + \mfirstucMakeUppercase{\glsentrylongpl{#2}#3}% + }% + \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% + }% + \glspostlinkhook +} +\newcommand*{\@gls@entry@field}[2]{% + \csname glo@\glsdetoklabel{#1}@#2\endcsname +} +\newcommand*{\glsletentryfield}[3]{% + \letcs{#1}{glo@\glsdetoklabel{#2}@#3}% +} +\newcommand*{\@Gls@entry@field}[2]{% + \glsdoifexistsordo{#1}% + {% + \letcs\@glo@text{glo@\glsdetoklabel{#1}@#2}% + \ifdef\@glo@text + {% + \xmakefirstuc{\@glo@text}% + }% + {% + ??\PackageError{glossaries}{The field `#2' doesn't exist for glossary + entry `\glsdetoklabel{#1}'}{Check you have correctly spelt the entry + label and the field name}% + }% + }% + {% + ??% + }% +} +\newcommand*{\glsentryname}[1]{\@gls@entry@field{#1}{name}} +\newrobustcmd*{\Glsentryname}[1]{% + \@Gls@entryname{#1}% +} +\newcommand*{\@Gls@entryname}[1]{% + \@Gls@entry@field{#1}{name}% +} +\newcommand*{\@Gls@acrentryname}[1]{% + \ifglshaslong{#1}% + {% + \letcs\@glo@text{glo@\glsdetoklabel{#1}@name}% + \expandafter\@gls@getbody\@glo@text{}\@nil + \expandafter\ifx\@gls@body\glsentrylong\relax + \expandafter\Glsentrylong\@gls@rest + \else + \expandafter\ifx\@gls@body\glsentryshort\relax + \expandafter\Glsentryshort\@gls@rest + \else + \expandafter\ifx\@gls@body\acronymfont\relax + {% + \let\glsentryshort\Glsentryshort + \@glo@text + }% + \else + \expandafter\ifx\@gls@body\glsshortaccessdisplay\relax + {% + \let\glsentryshort\Glsentryshort + \@glo@text + }% + \else + \xmakefirstuc{\@glo@text}% + \fi + \fi + \fi + \fi + }% + {% + \@Gls@entry@field{#1}{name}% + }% +} +\newcommand*{\glsentrydesc}[1]{\@gls@entry@field{#1}{desc}} +\newrobustcmd*{\Glsentrydesc}[1]{% + \@Gls@entry@field{#1}{desc}% +} +\newcommand*{\glsentrydescplural}[1]{% + \@gls@entry@field{#1}{descplural}% +} +\newrobustcmd*{\Glsentrydescplural}[1]{% + \@Gls@entry@field{#1}{descplural}% +} +\newcommand*{\glsentrytext}[1]{\@gls@entry@field{#1}{text}} +\newrobustcmd*{\Glsentrytext}[1]{% + \@Gls@entry@field{#1}{text}% +} +\newcommand*{\glsentryplural}[1]{% + \@gls@entry@field{#1}{plural}% +} +\newrobustcmd*{\Glsentryplural}[1]{% + \@Gls@entry@field{#1}{plural}% +} +\newcommand*{\glsentrysymbol}[1]{% + \@gls@entry@field{#1}{symbol}% +} +\newrobustcmd*{\Glsentrysymbol}[1]{% + \@Gls@entry@field{#1}{symbol}% +} +\newcommand*{\glsentrysymbolplural}[1]{% + \@gls@entry@field{#1}{symbolplural}% +} +\newrobustcmd*{\Glsentrysymbolplural}[1]{% + \@Gls@entry@field{#1}{symbolplural}% +} +\newcommand*{\glsentryfirst}[1]{% + \@gls@entry@field{#1}{first}% +} +\newrobustcmd*{\Glsentryfirst}[1]{% + \@Gls@entry@field{#1}{first}% +} +\newcommand*{\glsentryfirstplural}[1]{% + \@gls@entry@field{#1}{firstpl}% +} +\newrobustcmd*{\Glsentryfirstplural}[1]{% + \@Gls@entry@field{#1}{firstpl}% +} +\newrobustcmd*{\@glsentrytitlecase}[2]{% + \glsdoifexists{#1}% + {% + \glsfieldfetch{#1}{#2}{\@gls@value}% + \xcapitalisewords{\@gls@value}% + }% +} +\ifdef\texorpdfstring +{ + \newcommand*{\glsentrytitlecase}[2]{% + \texorpdfstring + {\@glsentrytitlecase{#1}{#2}}% + {\@gls@entry@field{#1}{#2}}% + } +} +{ + \newcommand*{\glsentrytitlecase}[2]{\@glsentrytitlecase{#1}{#2}} +} +\newcommand*{\glsentrytype}[1]{\@gls@entry@field{#1}{type}} +\newcommand*{\glsentrysort}[1]{% + \@gls@entry@field{#1}{sort}% +} +\newcommand*{\glsentryparent}[1]{% + \@gls@entry@field{#1}{parent}% +} +\newcommand*{\glsentryuseri}[1]{% + \@gls@entry@field{#1}{useri}% +} +\newrobustcmd*{\Glsentryuseri}[1]{% + \@Gls@entry@field{#1}{useri}% +} +\newcommand*{\glsentryuserii}[1]{% + \@gls@entry@field{#1}{userii}% +} +\newrobustcmd*{\Glsentryuserii}[1]{% + \@Gls@entry@field{#1}{userii}% +} +\newcommand*{\glsentryuseriii}[1]{% + \@gls@entry@field{#1}{useriii}% +} +\newrobustcmd*{\Glsentryuseriii}[1]{% + \@Gls@entry@field{#1}{useriii}% +} +\newcommand*{\glsentryuseriv}[1]{% + \@gls@entry@field{#1}{useriv}% +} +\newrobustcmd*{\Glsentryuseriv}[1]{% + \@Gls@entry@field{#1}{useriv}% +} +\newcommand*{\glsentryuserv}[1]{% + \@gls@entry@field{#1}{userv}% +} +\newrobustcmd*{\Glsentryuserv}[1]{% + \@Gls@entry@field{#1}{userv}% +} +\newcommand*{\glsentryuservi}[1]{% + \@gls@entry@field{#1}{uservi}% +} +\newrobustcmd*{\Glsentryuservi}[1]{% + \@Gls@entry@field{#1}{uservi}% +} +\newcommand*{\glsentryshort}[1]{\@gls@entry@field{#1}{short}} +\newrobustcmd*{\Glsentryshort}[1]{% + \@Gls@entry@field{#1}{short}% +} +\newcommand*{\glsentryshortpl}[1]{\@gls@entry@field{#1}{shortpl}} +\newrobustcmd*{\Glsentryshortpl}[1]{% + \@Gls@entry@field{#1}{shortpl}% +} +\newcommand*{\glsentrylong}[1]{\@gls@entry@field{#1}{long}} +\newrobustcmd*{\Glsentrylong}[1]{% + \@Gls@entry@field{#1}{long}% +} +\newcommand*{\glsentrylongpl}[1]{\@gls@entry@field{#1}{longpl}} +\newrobustcmd*{\Glsentrylongpl}[1]{% + \@Gls@entry@field{#1}{longpl}% +} +\newcommand*{\glsentryfull}[1]{% + \acrfullformat{\glsentrylong{#1}}{\acronymfont{\glsentryshort{#1}}}% +} +\newrobustcmd*{\Glsentryfull}[1]{% + \acrfullformat{\Glsentrylong{#1}}{\acronymfont{\glsentryshort{#1}}}% +} +\newcommand*{\glsentryfullpl}[1]{% + \acrfullformat{\glsentrylongpl{#1}}{\acronymfont{\glsentryshortpl{#1}}}% +} +\newrobustcmd*{\Glsentryfullpl}[1]{% + \acrfullformat{\Glsentrylongpl{#1}}{\acronymfont{\glsentryshortpl{#1}}}% +} +\newcommand*{\glsentrynumberlist}[1]{% + \glsdoifexists{#1}% + {% + \@gls@entry@field{#1}{numberlist}% + }% +} +\@ifpackageloaded{hyperref} {% + \newcommand*{\glsdisplaynumberlist}[1]{% + \GlossariesWarning + {% + \string\glsdisplaynumberlist\space + doesn't work with hyperref.^^JUsing + \string\glsentrynumberlist\space instead% + }% + \glsentrynumberlist{#1}% + }% +}% +{% + \newcommand*{\glsdisplaynumberlist}[1]{% + \glsdoifexists{#1}% + {% + \bgroup + \edef\@glo@label{\glsdetoklabel{#1}}% + \let\@org@glsnumberformat\glsnumberformat + \def\glsnumberformat##1{##1}% + \protected@edef\the@numberlist{% + \csname glo@\@glo@label @numberlist\endcsname}% + \def\@gls@numlist@sep{}% + \def\@gls@numlist@nextsep{}% + \def\@gls@numlist@lastsep{}% + \def\@gls@thislist{}% + \def\@gls@donext@def{}% + \renewcommand\do[1]{% + \protected@edef\@gls@thislist{% + \@gls@thislist + \noexpand\@gls@numlist@sep + ##1% + }% + \let\@gls@numlist@sep\@gls@numlist@nextsep + \def\@gls@numlist@nextsep{\glsnumlistsep}% + \@gls@donext@def + \def\@gls@donext@def{% + \def\@gls@numlist@lastsep{\glsnumlistlastsep}% + }% + }% + \expandafter \glsnumlistparser \expandafter{\the@numberlist}% + \let\@gls@numlist@sep\@gls@numlist@lastsep + \@gls@thislist + \egroup + }% + } +} +\newcommand*{\glsnumlistsep}{, } +\newcommand*{\glsnumlistlastsep}{ \& } +\newcommand*{\glshyperlink}[2][\glsentrytext{\@glo@label}]{% + \def\@glo@label{#2}% + \@glslink{\glolinkprefix\glsdetoklabel{#2}}{#1}} +\define@key{glossadd}{counter}{\def\@gls@counter{#1}} +\define@key{glossadd}{format}{\def\@glsnumberformat{#1}} +\define@key{glossadd}{types}{\def\@glo@type{#1}} +\newrobustcmd*{\glsadd}[2][]{% + \@gls@adjustmode + \glsdoifexists{#2}% + {% + \def\@glsnumberformat{glsnumberformat}% + \edef\@gls@counter{\csname glo@\glsdetoklabel{#2}@counter\endcsname}% + \setkeys{glossadd}{#1}% + \@gls@saveentrycounter + \@gls@setsort{#2}% + \@@do@wrglossary{#2}% + }% +} +\newcommand*{\@gls@adjustmode}{} +\AtBeginDocument{\renewcommand*{\@gls@adjustmode}{\ifvmode\mbox{}\fi}} +\newrobustcmd*{\glsaddall}[1][]{% + \edef\@glo@type{\@glo@types}% + \setkeys{glossadd}{#1}% + \forallglsentries[\@glo@type]{\@glo@entry}{% + \glsadd[#1]{\@glo@entry}% + }% +} +\newrobustcmd*{\glsaddallunused}[1][\@glo@types]{% + \forallglsentries[#1]{\@glo@entry}% + {% + \ifglsused{\@glo@entry}{}{\glsadd[format=glsignore]{\@glo@entry}}% + }% +} +\newcommand*{\glsignore}[1]{} +\edef\glsopenbrace{\expandafter\@gobble\string\{} +\edef\glsclosebrace{\expandafter\@gobble\string\}} +\edef\glsbackslash{\expandafter\@gobble\string\\} +\edef\glsquote#1{\string"#1\string"} +\edef\glspercentchar{\expandafter\@gobble\string\%} +\edef\glstildechar{\string~} +\ifglsxindy + \newcommand*{\@glsfirstletter}{A} +\fi +\newcommand*{\GlsSetXdyFirstLetterAfterDigits}{% + \@ifstar\s@GlsSetXdyFirstLetterAfterDigits\@GlsSetXdyFirstLetterAfterDigits} +\ifglsxindy + \newcommand*{\@GlsSetXdyFirstLetterAfterDigits}[1]{% + \renewcommand*{\@glsfirstletter}{#1}} + \newcommand*{\s@GlsSetXdyFirstLetterAfterDigits}[1]{% + \renewcommand*{\@glsfirstletter}{#1}% + \@onelevel@sanitize\@glsfirstletter + } +\else + \newcommand*{\@GlsSetXdyFirstLetterAfterDigits}[1]{% + \glsnoxindywarning\GlsSetXdyFirstLetterAfterDigits} + \newcommand*{\s@GlsSetXdyFirstLetterAfterDigits}{% + \@GlsSetXdyFirstLetterAfterDigits + } +\fi +\ifglsxindy + \newcommand*{\@xdynumbergrouporder}{:before \string"\@glsfirstletter\string"} +\fi +\newcommand*{\GlsSetXdyNumberGroupOrder}[1]{% + \@ifstar\s@GlsSetXdyNumberGroupOrder\@GlsSetXdyNumberGroupOrder +} +\ifglsxindy + \newcommand*{\@GlsSetXdyNumberGroupOrder}[1]{% + \renewcommand*{\@xdynumbergrouporder}{#1}% + } + \newcommand*{\s@GlsSetXdyNumberGroupOrder}[1]{% + \renewcommand*{\@xdynumbergrouporder}{#1}% + \@onelevel@sanitize\@xdynumbergrouporder + } +\else + \newcommand*{\@GlsSetXdyNumberGroupOrder}[1]{% + \glsnoxindywarning\GlsSetXdyNumberGroupOrder} + \newcommand*{\s@GlsSetXdyNumberGroupOrder}{% + \@GlsSetXdyNumberGroupOrder} +\fi +\newcommand*{\@glsminrange}{2} +\ifglsxindy + \newcommand*{\GlsSetXdyMinRangeLength}[1]{% + \renewcommand*{\@glsminrange}{#1}} +\else + \newcommand*{\GlsSetXdyMinRangeLength}[1]{% + \glsnoxindywarning\GlsSetXdyMinRangeLength} +\fi + +\ifglsxindy + \def\writeist{% + \ifundef{\glswrite}{\newwrite\glswrite}{}% + \@gls@addpredefinedattributes + \openout\glswrite=\istfilename + \write\glswrite{;; xindy style file created by the glossaries + package}% + \write\glswrite{;; for document '\jobname' on + \the\year-\the\month-\the\day}% + \write\glswrite{^^J; required styles^^J} + \@for\@xdystyle:=\@xdyrequiredstyles\do{% + \ifx\@xdystyle\@empty + \else + \protected@write\glswrite{}{(require + \string"\@xdystyle.xdy\string")}% + \fi + }% + \write\glswrite{^^J% + ; list of allowed attributes (number formats)^^J}% + \write\glswrite{(define-attributes ((\@xdyattributes)))}% + \write\glswrite{^^J; user defined alphabets^^J}% + \write\glswrite{\@xdyuseralphabets}% + \write\glswrite{^^J; location class definitions^^J}% + \@for\@gls@classI:=\@gls@xdy@locationlist\do{% + \protected@write\glswrite{}{(define-location-class + \string"\@gls@classI\string"^^J\space\space\space + ( + :sep "{}{" + \csname @gls@xdy@Lclass@\@gls@classI\endcsname\space + :sep "}" + ) + ^^J\space\space\space + :min-range-length \@glsminrange^^J% + ) + }% + {% + \@for\@gls@classII:=\@gls@xdy@locationlist\do{% + \protected@write\glswrite{}{(define-location-class + \string"\@gls@classII-\@gls@classI\string" + ^^J\space\space\space + ( + :sep "{" + \csname @gls@xdy@Lclass@\@gls@classII\endcsname\space + :sep "}{" + \csname @gls@xdy@Lclass@\@gls@classI\endcsname\space + :sep "}" + ) + ^^J\space\space\space + :min-range-length \@glsminrange^^J% + ) + }% + }% + }% + }% + \write\glswrite{^^J; user defined location classes}% + \write\glswrite{\@xdyuserlocationdefs}% + \write\glswrite{^^J; define cross-reference class^^J}% + \write\glswrite{(define-crossref-class \string"see\string" + :unverified )}% + \write\glswrite{(markup-crossref-list + :class \string"see\string"^^J\space\space\space + :open \string"\string\glsseeformat\string" + :close \string"{}\string")}% + \@xdycrossrefhook + \write\glswrite{^^J; define the order of the location classes}% + \write\glswrite{(define-location-class-order + (\@xdylocationclassorder))}% + \write\glswrite{^^J; define the glossary markup^^J}% + \write\glswrite{(markup-index^^J\space\space\space + :open \string"\string + \glossarysection[\string\glossarytoctitle]{\string + \glossarytitle}\string\glossarypreamble}% + \@for\@this@ctr:=\@xdycounters\do{% + {% + \@for\@this@attr:=\@xdyattributelist\do{% + \protected@write\glswrite{}{\string\providecommand*% + \expandafter\string + \csname glsX\@this@ctr X\@this@attr\endcsname[2]% + {% + \string\setentrycounter + [\expandafter\@gobble\string\#1]{\@this@ctr}% + \expandafter\string + \csname\@this@attr\endcsname + {\expandafter\@gobble\string\#2}% + }% + }% + }% + }% + }% + \write\glswrite{% + \string\begin + {theglossary}\string\glossaryheader\glstildechar n\string" ^^J\space + \space\space:close \string"\glspercentchar\glstildechar n\string + \end{theglossary}\string\glossarypostamble + \glstildechar n\string" ^^J\space\space\space + :tree)}% + \write\glswrite{(markup-letter-group-list + :sep \string"\string\glsgroupskip\glstildechar n\string")}% + \write\glswrite{(markup-indexentry + :open \string"\string\relax \string\glsresetentrylist + \glstildechar n\string")}% + \write\glswrite{(markup-locclass-list :open + \string"\glsopenbrace\string\glossaryentrynumbers + \glsopenbrace\string\relax\space \string"^^J\space\space\space + :sep \string", \string" + :close \string"\glsclosebrace\glsclosebrace\string")}% + \write\glswrite{(markup-locref-list + :sep \string"\string\delimN\space\string")}% + \write\glswrite{(markup-range + :sep \string"\string\delimR\space\string")}% + \@onelevel@sanitize\gls@suffixF + \@onelevel@sanitize\gls@suffixFF + \ifx\gls@suffixF\@empty + \else + \write\glswrite{(markup-range + :close "\gls@suffixF" :length 1 :ignore-end)}% + \fi + \ifx\gls@suffixFF\@empty + \else + \write\glswrite{(markup-range + :close "\gls@suffixFF" :length 2 :ignore-end)}% + \fi + \write\glswrite{^^J; define format to use for locations^^J}% + \write\glswrite{\@xdylocref}% + \write\glswrite{^^J; define letter group list format^^J}% + \write\glswrite{(markup-letter-group-list + :sep \string"\string\glsgroupskip\glstildechar n\string")}% + \write\glswrite{^^J; letter group headings^^J}% + \write\glswrite{(markup-letter-group + :open-head \string"\string\glsgroupheading + \glsopenbrace\string"^^J\space\space\space + :close-head \string"\glsclosebrace\string")}% + \write\glswrite{^^J; additional letter groups^^J}% + \write\glswrite{\@xdylettergroups}% + \write\glswrite{^^J; additional sort rules^^J} + \write\glswrite{\@xdysortrules}% + \@gls@writeisthook + \closeout\glswrite + \let\writeist\relax + } +\else + \edef\@gls@actualchar{\string?} + \edef\@gls@encapchar{\string|} + \edef\@gls@levelchar{\string!} + \edef\@gls@quotechar{\string"}% + \let\GlsSetQuote\gls@nosetquote + \def\writeist{\relax + \ifundef{\glswrite}{\newwrite\glswrite}{}\relax + \openout\glswrite=\istfilename + \write\glswrite{\glspercentchar\space makeindex style file + created by the glossaries package} + \write\glswrite{\glspercentchar\space for document + '\jobname' on \the\year-\the\month-\the\day} + \write\glswrite{actual '\@gls@actualchar'} + \write\glswrite{encap '\@gls@encapchar'} + \write\glswrite{level '\@gls@levelchar'} + \write\glswrite{quote '\@gls@quotechar'} + \write\glswrite{keyword \string"\string\\glossaryentry\string"} + \write\glswrite{preamble \string"\string\\glossarysection[\string + \\glossarytoctitle]{\string\\glossarytitle}\string + \\glossarypreamble\string\n\string\\begin{theglossary}\string + \\glossaryheader\string\n\string"} + \write\glswrite{postamble \string"\string\%\string\n\string + \\end{theglossary}\string\\glossarypostamble\string\n + \string"} + \write\glswrite{group_skip \string"\string\\glsgroupskip\string\n + \string"} + \write\glswrite{item_0 \string"\string\%\string\n\string"} + \write\glswrite{item_1 \string"\string\%\string\n\string"} + \write\glswrite{item_2 \string"\string\%\string\n\string"} + \write\glswrite{item_01 \string"\string\%\string\n\string"} + \write\glswrite{item_x1 + \string"\string\\relax \string\\glsresetentrylist\string\n + \string"} + \write\glswrite{item_12 \string"\string\%\string\n\string"} + \write\glswrite{item_x2 + \string"\string\\relax \string\\glsresetentrylist\string\n + \string"} + \write\glswrite{delim_0 \string"\string\{\string + \\glossaryentrynumbers\string\{\string\\relax \string"} + \write\glswrite{delim_1 \string"\string\{\string + \\glossaryentrynumbers\string\{\string\\relax \string"} + \write\glswrite{delim_2 \string"\string\{\string + \\glossaryentrynumbers\string\{\string\\relax \string"} + \write\glswrite{delim_t \string"\string\}\string\}\string"} + \write\glswrite{delim_n \string"\string\\delimN \string"} + \write\glswrite{delim_r \string"\string\\delimR \string"} + \write\glswrite{headings_flag 1} + \write\glswrite{heading_prefix + \string"\string\\glsgroupheading\string\{\string"} + \write\glswrite{heading_suffix + \string"\string\}\string\\relax + \string\\glsresetentrylist \string"} + \write\glswrite{symhead_positive \string"glssymbols\string"} + \write\glswrite{numhead_positive \string"glsnumbers\string"} + \write\glswrite{page_compositor \string"\glscompositor\string"} + \@gls@escbsdq\gls@suffixF + \@gls@escbsdq\gls@suffixFF + \ifx\gls@suffixF\@empty + \else + \write\glswrite{suffix_2p \string"\gls@suffixF\string"} + \fi + \ifx\gls@suffixFF\@empty + \else + \write\glswrite{suffix_3p \string"\gls@suffixFF\string"} + \fi + \@gls@writeisthook + \closeout\glswrite + \let\writeist\relax + } +\fi +\newcommand*{\GlsSetWriteIstHook}[1]{\renewcommand*{\@gls@writeisthook}{#1}} +\@onlypremakeg\GlsSetWriteIstHook +\newcommand*{\@gls@writeisthook}{} +\ifglsxindy + \newcommand*{\GlsSetQuote}[1]{\glsnomakeindexwarning\GlsSetQuote} + \newcommand*{\gls@nosetquote}[1]{\glsnomakeindexwarning\GlsSetQuote} +\else + \newcommand*{\GlsSetQuote}[1]{\edef\@gls@quotechar{\string#1}% + \@ifpackageloaded{tracklang}% + {% + \IfTrackedLanguage{german}% + {% + \def\@@gls@extramakeindexopts{-g}% + }% + {}% + }% + {}% + \edef\@gls@docheckquotedef{% + \noexpand\def\noexpand\@gls@checkquote####1#1####2#1####3\noexpand\null{% + \noexpand\@gls@tmpb=\noexpand\expandafter{\noexpand\@gls@checkedmkidx}% + \noexpand\toks@={####1}% + \noexpand\ifx\noexpand\null####2\noexpand\null + \noexpand\ifx\noexpand\null####3\noexpand\null + \noexpand\edef\noexpand\@gls@checkedmkidx{% + \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@}% + \noexpand\def\noexpand\@@gls@checkquote{\noexpand\relax}% + \noexpand\else + \noexpand\edef\noexpand\@gls@checkedmkidx{% + \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@ + \noexpand\@gls@quotechar\noexpand\@gls@quotechar + \noexpand\@gls@quotechar\noexpand\@gls@quotechar}% + \noexpand\def\noexpand\@@gls@checkquote{% + \noexpand\@gls@checkquote####3\noexpand\null}% + \noexpand\fi + \noexpand\else + \noexpand\edef\noexpand\@gls@checkedmkidx{% + \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@ + \noexpand\@gls@quotechar\noexpand\@gls@quotechar}% + \noexpand\ifx\noexpand\null####3\noexpand\null + \noexpand\def\noexpand\@@gls@checkquote{% + \noexpand\@gls@checkquote####2#1#1\noexpand\null}% + \noexpand\else + \noexpand\def\noexpand\@@gls@checkquote{% + \noexpand\@gls@checkquote####2#1####3\noexpand\null}% + \noexpand\fi + \noexpand\fi + \noexpand\@@gls@checkquote + }% + }% + \@gls@docheckquotedef + \edef\@gls@docheckquotedef{% + \noexpand\renewcommand{\noexpand\@gls@checkmkidxchars}[1]{% + \noexpand\def\noexpand\@gls@checkedmkidx{}% + \noexpand\expandafter\noexpand\@gls@checkquote####1\noexpand\@nil + #1#1\noexpand\null + \noexpand\expandafter\noexpand\@gls@updatechecked + \noexpand\@gls@checkedmkidx{####1}% + \noexpand\def\noexpand\@gls@checkedmkidx{}% + \noexpand\expandafter\noexpand\@gls@checkescquote####1\noexpand\@nil + \expandonce{\csname#1\endcsname}\expandonce{\csname#1\endcsname}% + \noexpand\null + \noexpand\expandafter\noexpand\@gls@updatechecked + \noexpand\@gls@checkedmkidx{####1}% + \noexpand\def\noexpand\@gls@checkedmkidx{}% + \noexpand\expandafter\noexpand\@gls@checkescactual####1\noexpand\@nil + \noexpand\?\noexpand\?\noexpand\null + \noexpand\expandafter\noexpand\@gls@updatechecked + \noexpand\@gls@checkedmkidx{####1}% + \noexpand\def\noexpand\@gls@checkedmkidx{}% + \noexpand\expandafter\noexpand\@gls@checkactual####1\noexpand\@nil + \noexpand?\noexpand?\noexpand\null + \noexpand\expandafter\noexpand\@gls@updatechecked + \noexpand\@gls@checkedmkidx{####1}% + \noexpand\def\noexpand\@gls@checkedmkidx{}% + \noexpand\expandafter\noexpand\@gls@checkbar####1\noexpand\@nil + \noexpand|\noexpand|\noexpand\null + \noexpand\expandafter\noexpand\@gls@updatechecked + \noexpand\@gls@checkedmkidx{####1}% + \noexpand\def\noexpand\@gls@checkedmkidx{}% + \noexpand\expandafter\noexpand\@gls@checkescbar####1\noexpand\@nil + \noexpand\|\noexpand\|\noexpand\null + \noexpand\expandafter\noexpand\@gls@updatechecked + \noexpand\@gls@checkedmkidx{####1}% + \noexpand\def\noexpand\@gls@checkedmkidx{}% + \noexpand\expandafter\noexpand\@gls@checklevel####1\noexpand\@nil + \noexpand!\noexpand!\noexpand\null + \noexpand\expandafter\noexpand\@gls@updatechecked + \noexpand\@gls@checkedmkidx{####1}% + }% + }% + \@gls@docheckquotedef + \edef\@gls@docheckquotedef{% + \noexpand\def\noexpand\@gls@checkescquote####1% + \expandonce{\csname#1\endcsname}####2\expandonce{\csname#1\endcsname}% + ####3\noexpand\null{% + \noexpand\@gls@tmpb=\noexpand\expandafter{\noexpand\@gls@checkedmkidx}% + \noexpand\toks@={####1}% + \noexpand\ifx\noexpand\null####2\noexpand\null + \noexpand\ifx\noexpand\null####3\noexpand\null + \noexpand\edef\noexpand\@gls@checkedmkidx{% + \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@}% + \noexpand\def\noexpand\@@gls@checkescquote{\noexpand\relax}% + \noexpand\else + \noexpand\edef\noexpand\@gls@checkedmkidx{% + \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@ + \noexpand\@gls@quotechar\noexpand\string\expandonce{% + \csname#1\endcsname}\noexpand\@gls@quotechar + \noexpand\@gls@quotechar\noexpand\string\expandonce{% + \csname#1\endcsname}\noexpand\@gls@quotechar}% + \noexpand\def\noexpand\@@gls@checkescquote{% + \noexpand\@gls@checkescquote####3\noexpand\null}% + \noexpand\fi + \noexpand\else + \noexpand\edef\noexpand\@gls@checkedmkidx{% + \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@ + \noexpand\@gls@quotechar\noexpand\string + \expandonce{\csname#1\endcsname}\noexpand\@gls@quotechar}% + \noexpand\ifx\noexpand\null####3\noexpand\null + \noexpand\def\noexpand\@@gls@checkescquote{% + \noexpand\@gls@checkescquote####2\expandonce{\csname#1\endcsname}% + \expandonce{\csname#1\endcsname}\noexpand\null}% + \noexpand\else + \noexpand\def\noexpand\@@gls@checkescquote{% + \noexpand\@gls@checkescquote####2\expandonce{\csname#1\endcsname}% + ####3\noexpand\null}% + \noexpand\fi + \noexpand\fi + \noexpand\@@gls@checkescquote + }% + }% + \@gls@docheckquotedef + } + \newcommand*{\gls@nosetquote}[1]{\PackageError{glossaries}% + {\string\GlsSetQuote\space not permitted here}% + {Move \string\GlsSetQuote\space earlier in the preamble, as + soon as possible after glossaries.sty has been loaded}} +\fi +\newcommand*{\@gls@extramakeindexopts}[1]{} +\newcommand{\noist}{% + \@gls@addpredefinedattributes + \let\writeist\relax +} +\newcommand*{\@makeglossary}[1]{% + \ifglossaryexists{#1}% + {% + \ifglssavewrites + \expandafter\newtoks\csname glo@#1@filetok\endcsname + \else + \expandafter\newwrite\csname glo@#1@file\endcsname + \expandafter\@glsopenfile\csname glo@#1@file\endcsname{#1}% + \fi + \@gls@renewglossary + \writeist + }% + {% + \PackageError{glossaries}% + {Glossary type `#1' not defined}% + {New glossaries must be defined before using \string\makeglossaries}% + }% +} +\newcommand*{\@glsopenfile}[2]{% + \immediate\openout#1=\jobname.\csname @glotype@#2@out\endcsname + \PackageInfo{glossaries}{Writing glossary file + \jobname.\csname @glotype@#2@out\endcsname}% +} +\newcommand*{\@closegls}[1]{% + \closeout\csname glo@#1@file\endcsname +} +\ifglsxindy + \newcommand*{\@gls@automake}[1]{% + \ifglossaryexists{#1} + {% + \@closegls{#1}% + \ifdefstring{\glsorder}{letter}% + {\def\@gls@order{-M ord/letorder }}% + {\let\@gls@order\@empty}% + \ifcsundef{@xdy@#1@language}% + {\let\@gls@langmod\@xdy@main@language}% + {\letcs\@gls@langmod{@xdy@#1@language}}% + \edef\@gls@dothiswrite{\noexpand\write18{xindy + -I xindy + \@gls@order + -L \@gls@langmod\space + -M \gls@istfilebase\space + -C \gls@codepage\space + -t \jobname.\csuse{@glotype@#1@log} + -o \jobname.\csuse{@glotype@#1@in} + \jobname.\csuse{@glotype@#1@out}}% + }% + \@gls@dothiswrite + }% + {% + \GlossariesWarning{Can't make glossary `#1', it doesn't exist}% + }% + } +\else + \newcommand*{\@gls@automake}[1]{% + \ifglossaryexists{#1} + {% + \@closegls{#1}% + \ifdefstring{\glsorder}{letter}% + {\def\@gls@order{-l }}% + {\let\@gls@order\@empty}% + \edef\@gls@dothiswrite{\noexpand\write18{makeindex \@gls@order + -s \istfilename\space + -t \jobname.\csuse{@glotype@#1@log} + -o \jobname.\csuse{@glotype@#1@in} + \jobname.\csuse{@glotype@#1@out}}% + }% + \@gls@dothiswrite + }% + {% + \GlossariesWarning{Can't make glossary `#1', it doesn't exist}% + }% + } +\fi +\ifglsxindy + \newcommand*{\@gls@automake@immediate}[1]{% + \ifglossaryexists{#1} + {% + \IfFileExists{\jobname.\csuse{@glotype@#1@out}}% + {% + \ifdefstring{\glsorder}{letter}% + {\def\@gls@order{-M ord/letorder }}% + {\let\@gls@order\@empty}% + \ifcsundef{@xdy@#1@language}% + {\let\@gls@langmod\@xdy@main@language}% + {\letcs\@gls@langmod{@xdy@#1@language}}% + \edef\@gls@dothiswrite{\noexpand\immediate\noexpand\write18{xindy + -I xindy + \@gls@order + -L \@gls@langmod\space + -M \gls@istfilebase\space + -C \gls@codepage\space + -t \jobname.\csuse{@glotype@#1@log} + -o \jobname.\csuse{@glotype@#1@in} + \jobname.\csuse{@glotype@#1@out}}% + }% + \@gls@dothiswrite + }% + {\GlossariesWarning{can't automake `#1': \jobname.\csuse{@glotype@#1@out} + doesn't exist. Rerun may be required}}% + }% + {% + \GlossariesWarning{Can't make glossary `#1', it doesn't exist}% + }% + } +\else + \newcommand*{\@gls@automake@immediate}[1]{% + \ifglossaryexists{#1} + {% + \IfFileExists{\jobname.\csuse{@glotype@#1@out}}% + {% + \ifdefstring{\glsorder}{letter}% + {\def\@gls@order{-l }}% + {\let\@gls@order\@empty}% + \edef\@gls@dothiswrite{\noexpand\immediate\noexpand\write18{makeindex \@gls@order + -s \istfilename\space + -t \jobname.\csuse{@glotype@#1@log} + -o \jobname.\csuse{@glotype@#1@in} + \jobname.\csuse{@glotype@#1@out}}% + }% + \@gls@dothiswrite + }% + {\GlossariesWarning{can't automake `#1': \jobname.\csuse{@glotype@#1@out} + doesn't exist. Rerun may be required}}% + }% + {% + \GlossariesWarning{Can't make glossary `#1', it doesn't exist}% + }% + } +\fi +\newcommand*{\@warn@nomakeglossaries}{} +\newcommand*{\warn@nomakeglossaries}{\@warn@nomakeglossaries} +\newcommand{\@gls@@automake@immediate}{% + \ifnum\gls@automake@nr=2\relax + \@for\@gls@type:=\@glo@types\do{% + \ifdefempty{\@gls@type}{}% + {\@gls@automake@immediate{\@gls@type}}% + }% + \glsautomakefalse + \renewcommand*{\@gls@doautomake}{}% + \fi +} +\newcommand*{\makeglossaries}{% + \@domakeglossaries + {% + \@gls@@automake@immediate + \ifundef{\glswrite}{\newwrite\glswrite}{}% + \protected@write\@auxout{}{\string\providecommand\string\@glsorder[1]{}} + \protected@write\@auxout{}{\string\providecommand\string\@istfilename[1]{}} + \ifundef\@@gls@extramakeindexopts + {}% + {% + \protected@write\@auxout{}{\string\providecommand + \string\@gls@extramakeindexopts[1]{}} + \protected@write\@auxout{}{\string\@gls@extramakeindexopts + {\@@gls@extramakeindexopts}}% + }% + \protected@write\@auxout{}{\string\@istfilename{\istfilename}}% + \protected@write\@auxout{}{\string\@glsorder{\glsorder}} + \@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\@gobble + \let\makeglossaries\relax + \@disable@onlypremakeg + \let\gls@checkseeallowed\relax + \let\warn@nomakeglossaries\relax + \def\warn@noprintglossary{% + \ifdefstring{\@glo@types}{,}% + {% + \GlossariesWarningNoLine{No glossaries have been defined}% + }% + {% + \GlossariesWarningNoLine{No \string\printglossary\space + or \string\printglossaries\space + found. ^^J(Remove \string\makeglossaries\space if you + don't want any glossaries.) ^^JThis document will not + have a glossary}% + }% + }% + \ifglssavenumberlist + \edef\@gls@dodeflistparser{\noexpand\DeclareListParser + {\noexpand\glsnumlistparser}{\delimN}}% + \@gls@dodeflistparser + \fi + \let\makenoidxglossaries\@no@makeglossaries + \renewcommand*{\@printgloss@setsort}{% + \let\@glo@assign@sortkey\@glo@no@assign@sortkey + }% + \ifglsautomake + \renewcommand*{\@gls@doautomake}{% + \@for\@gls@type:=\@glo@types\do{% + \ifdefempty{\@gls@type}{}% + {\@gls@automake{\@gls@type}}% + }% + }% + \fi + \@glo@check@sortallowed\makeglossaries + }% +} +\@onlypreamble{\makeglossaries} +\AtEndDocument{% + \warn@nomakeglossaries + \warn@noprintglossary +} +\newcommand*{\makenoidxglossaries}{% + \@domakeglossaries + {% + \renewcommand{\@gls@noref@warn}[1]{% + \GlossariesWarning{Empty glossary for + \string\printnoidxglossary[type={##1}]. + Rerun may be required (or you may have forgotten to use + commands like \string\gls)}% + }% + \let\@gls@checkmkidxchars\@gobble + \glsesclocationsfalse + \let\@@do@@wrglossary\gls@noidxglossary + \let\@gls@getgrouptitle\@gls@noidx@getgrouptitle + \let\gls@checkseeallowed\relax + \renewcommand{\@do@seeglossary}[2]{% + \edef\@gls@label{\glsdetoklabel{##1}}% + \protected@write\@auxout{}{% + \string\@gls@reference + {\csname glo@\@gls@label @type\endcsname}% + {\@gls@label}% + {% + \string\glsseeformat##2{}% + }% + }% + }% + \AtBeginDocument + {% + \write\@auxout{\string\providecommand\string\@gls@reference[3]{}}% + }% + \def\warn@noprintglossary{% + \GlossariesWarningNoLine{No \string\printnoidxglossary\space + or \string\printnoidxglossaries ^^J + found. (Remove \string\makenoidxglossaries\space if you + don't want any glossaries.)^^JThis document will not have a glossary}% + }% + \let\warn@nomakeglossaries\relax + \let\makeglossaries\@no@makeglossaries + \renewcommand*{\@printgloss@setsort}{% + \let\@glo@assign@sortkey\@@glo@assign@sortkey + \def\@glo@sorttype{\@glo@default@sorttype}% + }% + \renewcommand*\new@glossaryentry[2]{% + \PackageError{glossaries}{Glossary entries must be + defined in the preamble^^Jwhen you use + \string\makenoidxglossaries}% + {Either move your definitions to the preamble or use + \string\makeglossaries}% + }% + \renewcommand*{\glsentrynumberlist}[1]{% + \letcs{\@gls@loclist}{glo@\glsdetoklabel{##1}@loclist}% + \ifdef\@gls@loclist + {% + \glsnoidxloclist{\@gls@loclist}% + }% + {% + ??\glsdoifexists{##1}% + {% + \GlossariesWarning{Missing location list for `##1'. Either + a rerun is required or you haven't referenced the entry}% + }% + }% + }% + \renewcommand*{\glsdisplaynumberlist}[1]{% + \letcs{\@gls@loclist}{glo@\glsdetoklabel{##1}@loclist}% + \ifdef\@gls@loclist + {% + \def\@gls@noidxloclist@sep{% + \def\@gls@noidxloclist@sep{% + \def\@gls@noidxloclist@sep{% + \glsnumlistsep + }% + \def\@gls@noidxloclist@finalsep{\glsnumlistlastsep}% + }% + }% + \def\@gls@noidxloclist@finalsep{}% + \def\@gls@noidxloclist@prev{}% + \forlistloop{\glsnoidxdisplayloclisthandler}{\@gls@loclist}% + \@gls@noidxloclist@finalsep + \@gls@noidxloclist@prev + }% + {% + ??\glsdoifexists{##1}% + {% + \GlossariesWarning{Missing location list for `##1'. Either + a rerun is required or you haven't referenced the entry}% + }% + }% + }% + \renewcommand*{\glsnumberlistloop}[3]{% + \letcs{\@gls@loclist}{glo@\glsdetoklabel{##1}@loclist}% + \let\@gls@org@glsnoidxdisplayloc\glsnoidxdisplayloc + \let\@gls@org@glsseeformat\glsseeformat + \let\glsnoidxdisplayloc##2\relax + \let\glsseeformat##3\relax + \ifdef\@gls@loclist + {% + \forlistloop{\glsnoidxnumberlistloophandler}{\@gls@loclist}% + }% + {% + ??\glsdoifexists{##1}% + {% + \GlossariesWarning{Missing location list for `##1'. Either + a rerun is required or you haven't referenced the entry}% + }% + }% + \let\glsnoidxdisplayloc\@gls@org@glsnoidxdisplayloc + \let\glsseeformat\@gls@org@glsseeformat + }% + \let\@@gls@sanitizesort\@gls@noidx@sanitizesort + \let\@@gls@nosanitizesort\@@gls@noidx@nosanitizesort + \@gls@noidx@setsanitizesort + \@glo@check@sortallowed\makenoidxglossaries + }% +} +\@onlypreamble{\makenoidxglossaries} +\newcommand*{\glsnumberlistloop}[2]{% + \PackageError{glossaries}{\string\glsnumberlistloop\space + only works with \string\makenoidxglossaries}{}% +} +\newcommand*{\glsnoidxnumberlistloophandler}[1]{% + #1% +} +\newcommand*{\@no@makeglossaries}{% + \PackageError{glossaries}{You can't use both + \string\makeglossaries\space and \string\makenoidxglossaries}% + {Either use one or other (or none) of those commands but not both + together.}% +} +\newcommand{\@gls@noref@warn}[1]{% + \GlossariesWarning{\string\makenoidxglossaries\space + is required to make \string\printnoidxglossary[type={#1}] work}% +} +\newcommand*{\gls@noidxglossary}{% + \protected@write\@auxout{}{% + \string\@gls@reference + {\csname glo@\@gls@label @type\endcsname}% + {\@gls@label}% + {\string\glsnoidxdisplayloc + {\@glo@counterprefix}% + {\@gls@counter}% + {\@glsnumberformat}% + {\@glslocref}% + }% + }% +} +\providecommand\istfile{\glswrite} +\AtEndDocument{% + \glswritefiles +} +\newcommand*{\@glswritefiles}{% + \forallglossaries{\@glo@type}{% + \ifcsundef{glo@\@glo@type @filetok}% + {% + \def\gls@tmp{}% + }% + {% + \edef\gls@tmp{\expandafter\the + \csname glo@\@glo@type @filetok\endcsname}% + }% + \ifx\gls@tmp\@empty + \ifx\@glo@type\glsdefaulttype + \GlossariesWarningNoLine{Glossary `\@glo@type' has no + entries.^^JRemember to use package option `nomain' if +you + don't want to^^Juse the main glossary}% + \else + \GlossariesWarningNoLine{Glossary `\@glo@type' has no + entries}% + \fi + \else + \@glsopenfile{\glswrite}{\@glo@type}% + \immediate\write\glswrite{% + \expandafter\the + \csname glo@\@glo@type @filetok\endcsname}% + \immediate\closeout\glswrite + \fi + }% +} +\newcommand*{\gls@glossary}[1]{% + \@gls@glossary{#1}% +} +\newcommand*{\@gls@glossary}[2]{% + \if@gls@debug + \PackageInfo{glossaries}{wrglossary(#1)(#2)}% + \fi +} +\newcommand{\@gls@renewglossary}{% + \gdef\@gls@glossary##1{\@bsphack\begingroup\gls@wrglossary{##1}}% + \let\@gls@renewglossary\@empty +} +\newcommand*{\gls@wrglossary}[2]{% + \ifglssavewrites + \protected@edef\@gls@tmp{\the\csname glo@#1@filetok\endcsname#2}% + \expandafter\global\expandafter\csname glo@#1@filetok\endcsname + \expandafter{\@gls@tmp^^J}% + \else + \ifcsdef{glo@#1@file}% + {% + \expandafter\protected@write\csname glo@#1@file\endcsname{% + \gls@disablepagerefexpansion}{#2}% + }% + {% + \ifignoredglossary{#1}{}% + {% + \GlossariesWarning{No file defined for glossary `#1'}% + }% + }% + \fi + \endgroup\@esphack +} +\newcommand*{\@do@wrglossary}[1]{% + \glswriteentry{#1}{\@@do@wrglossary{#1}}% +} +\newcommand*{\glswriteentry}[2]{% + \ifglsindexonlyfirst + \ifglsused{#1}{}{#2}% + \else + #2% + \fi +} +\newcommand{\gls@protected@pagefmts}{\gls@numberpage,\gls@alphpage,% + \gls@Alphpage,\gls@romanpage,\gls@Romanpage,\gls@arabicpage} +\newcommand*{\gls@disablepagerefexpansion}{% + \@for\@gls@this:=\gls@protected@pagefmts\do + {% + \expandafter\let\@gls@this\relax + }% +} +\newcommand*{\gls@alphpage}{\@alph\c@page} +\newcommand*{\gls@Alphpage}{\@Alph\c@page} +\newcommand*{\gls@numberpage}{\number\c@page} +\newcommand*{\gls@arabicpage}{\@arabic\c@page} +\newcommand*{\gls@romanpage}{\romannumeral\c@page} +\newcommand*{\gls@Romanpage}{\@Roman\c@page} +\newcommand*{\glsaddprotectedpagefmt}[1]{% + \eappto\gls@protected@pagefmts{,\expandonce{\csname gls#1page\endcsname}}% + \csedef{gls#1page}{\expandonce{\csname#1\endcsname}\noexpand\c@page}% + \eappto\@wrglossarynumberhook{% + \noexpand\let\expandonce{\csname org@gls#1\endcsname}% + \expandonce{\csname#1\endcsname}% + \noexpand\def\expandonce{\csname#1\endcsname}{% + \noexpand\@wrglossary@pageformat + \expandonce{\csname gls#1page\endcsname}% + \expandonce{\csname org@gls#1\endcsname}% + }% + }% +} +\newcommand*\@wrglossarynumberhook{} +\newcommand{\@wrglossary@pageformat}[3]{% + \ifx#3\c@page #1\else #2#3\fi +} +\newcommand*{\@@do@wrglossary}[1]{% + \ifglsesclocations + \@@do@esc@wrglossary{#1}% + \else + \@@do@noesc@wrglossary{#1}% + \fi +} +\newcommand*{\@@do@noesc@wrglossary}[1]{% + \expandafter\def\expandafter\@glslocref\expandafter{\theglsentrycounter}% + \expandafter\def\expandafter\@glsHlocref\expandafter{\theHglsentrycounter}% + \ifx\@glsHlocref\@glslocref + \def\@glo@counterprefix{}% + \else + \protected@edef\@do@gls@getcounterprefix{\noexpand\@gls@getcounterprefix + {\@glslocref}{\@glsHlocref}% + }% + \@do@gls@getcounterprefix + \fi + \edef\@gls@label{\glsdetoklabel{#1}}% + \@@do@@wrglossary +} +\newif\ifglswrallowprimitivemods +\glswrallowprimitivemodstrue +\newcommand*{\@@do@esc@wrglossary}[1]{% please read documented code! + \begingroup + \let\gls@orgthe\the + \let\gls@orgnumber\number + \let\gls@orgarabic\@arabic + \let\gls@orgromannumeral\romannumeral + \let\gls@orgalph\@alph + \let\gls@orgAlph\@Alph + \let\gls@orgRoman\@Roman + \ifglswrallowprimitivemods + \def\gls@the##1{% + \ifx##1\c@page \gls@numberpage\else\gls@orgthe##1\fi}% + \def\the{\expandafter\gls@the}% + \def\gls@number##1{% + \ifx##1\c@page \gls@numberpage\else\gls@orgnumber##1\fi}% + \def\number{\expandafter\gls@number}% + \fi + \def\@arabic##1{% + \ifx##1\c@page \gls@arabicpage\else\gls@orgarabic##1\fi}% + \def\romannumeral##1{% + \ifx##1\c@page \gls@romanpage\else\gls@orgromannumeral##1\fi}% + \def\@Roman##1{% + \ifx##1\c@page \gls@Romanpage\else\gls@orgRoman##1\fi}% + \def\@alph##1{% + \ifx##1\c@page \gls@alphpage\else\gls@orgalph##1\fi}% + \def\@Alph##1{% + \ifx##1\c@page \gls@Alphpage\else\gls@orgAlph##1\fi}% + \@wrglossarynumberhook + \gls@disablepagerefexpansion + \protected@xdef\@glslocref{\theglsentrycounter}% + \endgroup + \@gls@checkmkidxchars\@glslocref + \expandafter\ifx\theHglsentrycounter\theglsentrycounter\relax + \def\@glo@counterprefix{}% + \else + \protected@edef\@glsHlocref{\theHglsentrycounter}% + \@gls@checkmkidxchars\@glsHlocref + \edef\@do@gls@getcounterprefix{\noexpand\@gls@getcounterprefix + {\@glslocref}{\@glsHlocref}% + }% + \@do@gls@getcounterprefix + \fi + \edef\@gls@label{\glsdetoklabel{#1}}% + \@@do@@wrglossary +} +\newcommand*{\@@do@@wrglossary}{% + \ifglsxindy + \expandafter\@glo@check@mkidxrangechar\@glsnumberformat\@nil + \def\@glo@range{}% + \expandafter\if\@glo@prefix(\relax + \def\@glo@range{:open-range}% + \else + \expandafter\if\@glo@prefix)\relax + \def\@glo@range{:close-range}% + \fi + \fi + \gls@glossary{\csname glo@\@gls@label @type\endcsname}{% + (indexentry :tkey (\csname glo@\@gls@label @index\endcsname) + :locref \string"{\@glo@counterprefix}{\@glslocref}\string" % + :attr \string"\@gls@counter\@glo@suffix\string" + \@glo@range + ) + }% + \else + \@set@glo@numformat{\@glo@numfmt}{\@gls@counter}{\@glsnumberformat}% + {\@glo@counterprefix}% + \gls@glossary{\csname glo@\@gls@label @type\endcsname}{% + \string\glossaryentry{\csname glo@\@gls@label @index\endcsname + \@gls@encapchar\@glo@numfmt}{\@glslocref}}% + \fi +} +\newcommand*\@gls@getcounterprefix[2]{% + \edef\@gls@thisloc{#1}\edef\@gls@thisHloc{#2}% + \ifx\@gls@thisloc\@gls@thisHloc + \def\@glo@counterprefix{}% + \else + \def\@gls@get@counterprefix##1.#1##2\end@getprefix{% + \def\@glo@tmp{##2}% + \ifx\@glo@tmp\@empty + \def\@glo@counterprefix{}% + \else + \def\@glo@counterprefix{##1}% + \fi + }% + \@gls@get@counterprefix#2.#1\end@getprefix + \ifx\@glo@counterprefix\@empty + \GlossariesWarning{Hyper target `#2' can't be formed by + prefixing^^Jlocation `#1'. You need to modify the + definition of \string\theH\@gls@counter^^Jotherwise you + will get the warning: "`name{\@gls@counter.#1}' has been^^J + referenced but does not exist"}% + \fi + \fi +} +\newcommand{\@do@seeglossary}[2]{% +\def\@gls@xref{#2}% +\@onelevel@sanitize\@gls@xref +\@gls@checkmkidxchars\@gls@xref +\ifglsxindy + \gls@glossary{\csname glo@#1@type\endcsname}{% + (indexentry + :tkey (\csname glo@#1@index\endcsname) + :xref (\string"\@gls@xref\string") + :attr \string"see\string" + ) + }% +\else + \gls@glossary{\csname glo@#1@type\endcsname}{% + \string\glossaryentry{\csname glo@#1@index\endcsname + \@gls@encapchar glsseeformat\@gls@xref}{Z}}% +\fi +} +\def\@gls@fixbraces#1#2#3\@nil{% + \ifx#2[\relax + \@@gls@fixbraces#1#2#3\@end@fixbraces + \else + \def#1{{#2#3}}% + \fi +} +\def\@@gls@fixbraces#1[#2]#3\@end@fixbraces{% + \def#1{[#2]{#3}}% +} +\newrobustcmd*{\glssee}[3][\seename]{% + \@do@seeglossary{#2}{[#1]{#3}}} +\newcommand*{\@glssee}[3][\seename]{% + \glssee[#1]{#3}{#2}} +\newrobustcmd*{\glsseeformat}[3][\seename]{% + \emph{#1} \glsseelist{#2}} +\newrobustcmd*{\glsseelist}[1]{% + \let\@gls@dolast\relax + \let\@gls@donext\relax + \@for\@gls@thislabel:=#1\do{% + \ifx\@xfor@nextelement\@nnil + \@gls@dolast + \else + \@gls@donext + \fi + \expandafter\glsseeitem\expandafter{\@gls@thislabel}% + \let\@gls@dolast\glsseelastsep + \let\@gls@donext\glsseesep + }% +} +\newcommand*{\glsseelastsep}{\space\andname\space} +\newcommand*{\glsseesep}{, } +\newrobustcmd*{\glsseeitem}[1]{\glshyperlink[\glsseeitemformat{#1}]{#1}} +\newcommand*{\glsseeitemformat}[1]{\glsentrytext{#1}} +\newcommand*{\gls@save@numberlist}[1]{% + \ifglssavenumberlist + \toks@{#1}% + \edef\@do@writeaux@info{% + \noexpand\csgdef{glo@\glscurrententrylabel @numberlist}{\the\toks@}% + }% + \@onelevel@sanitize\@do@writeaux@info + \protected@write\@auxout{}{\@do@writeaux@info}% + \fi +} +\newcommand*{\warn@noprintglossary}{}% +\ifcsundef{printglossary}{}% +{% + \@gls@warnonglossdefined + \undef\printglossary +} +\newcommand*{\@printgloss@checkexists@noignored}[2]{% + \@ifglossaryexists{#1}% + {#2}% + {% + \ifignoredglossary{#1}% + {\GlossariesWarning{Glossary `#1' is an ignored glossary}}% + {\GlossariesWarning{Glossary `#1' doesn't exist}}% + }% +} +\newcommand*{\@printgloss@checkexists@allowignored}[2]{% + \s@ifglossaryexists{#1}% + {#2}% + {\GlossariesWarning{Glossary `#1' doesn't exist}}% +} +\let\@printgloss@checkexists\@printgloss@checkexists@noignored +\newcommand*{\printglossary}[1][type=\glsdefaulttype]{% + \let\@printgloss@checkexists\@printgloss@checkexists@noignored + \@printglossary{#1}{\@print@glossary}% +} +\newcommand*{\printglossaries}{% + \forallglossaries{\@@glo@type}{\printglossary[type=\@@glo@type]}% +} +\newcommand*{\printnoidxglossary}[1][type=\glsdefaulttype]{% + \let\@printgloss@checkexists\@printgloss@checkexists@noignored + \@printglossary{#1}{\@print@noidx@glossary}% +} +\newcommand*{\printnoidxglossaries}{% + \forallglossaries{\@@glo@type}{\printnoidxglossary[type=\@@glo@type]}% +} +\newcommand*{\@printgloss@setsort}{} +\newcommand*{\@gls@preglossaryhook}{} +\newcommand{\@printglossary}[2]{% + \def\@glo@type{\glsdefaulttype}% + \def\glossarytitle{\csname @glotype@\@glo@type @title\endcsname}% + \def\glossarytoctitle{\glossarytitle}% + \let\org@glossarytitle\glossarytitle + \def\@glossarystyle{% + \ifx\@glossary@default@style\relax + \GlossariesWarning{No default glossary style provided \MessageBreak + for the glossary `\@glo@type'. \MessageBreak + Using deprecated fallback. \MessageBreak + To fix this set the style with \MessageBreak + \string\setglossarystyle\space or use the \MessageBreak + style key=value option}% + \fi + }% + \def\gls@dotoctitle{\glssettoctitle{\@glo@type}}% + \let\@org@glossaryentrynumbers\glossaryentrynumbers + \bgroup + \@printgloss@setsort + \setkeys{printgloss}{#1}% + \@printgloss@checkexists{\@glo@type}% + {% + \ifx\glossarytitle\org@glossarytitle + \else + \expandafter\let\csname @glotype@\@glo@type @title\endcsname + \glossarytitle + \fi + \let\currentglossary\@glo@type + \let\org@glossaryentrynumbers\glossaryentrynumbers + \let\glsnonextpages\@glsnonextpages + \let\glsnextpages\@glsnextpages + \let\nopostdesc\@nopostdesc + \gls@dotoctitle + \@glossarystyle + \let\gls@org@glossaryentryfield\glossentry + \let\gls@org@glossarysubentryfield\subglossentry + \renewcommand{\glossentry}[1]{% + \xdef\glscurrententrylabel{\glsdetoklabel{##1}}% + \gls@org@glossaryentryfield{##1}% + }% + \renewcommand{\subglossentry}[2]{% + \xdef\glscurrententrylabel{\glsdetoklabel{##2}}% + \gls@org@glossarysubentryfield{##1}{##2}% + }% + \@gls@preglossaryhook + #2% + }% + \egroup + \global\let\glossaryentrynumbers\@org@glossaryentrynumbers + \global\let\warn@noprintglossary\relax +} +\newcommand{\@print@glossary}{% + \makeatletter + \@input@{\jobname.\csname @glotype@\@glo@type @in\endcsname}% + \IfFileExists{\jobname.\csname @glotype@\@glo@type @in\endcsname}% + {}% + {\null}% + \ifglsxindy + \ifcsundef{@xdy@\@glo@type @language}% + {% + \edef\@do@auxoutstuff{% + \noexpand\AtEndDocument{% + \noexpand\immediate\noexpand\write\@auxout{% + \string\providecommand\string\@xdylanguage[2]{}}% + \noexpand\immediate\noexpand\write\@auxout{% + \string\@xdylanguage{\@glo@type}{\@xdy@main@language}}% + }% + }% + }% + {% + \edef\@do@auxoutstuff{% + \noexpand\AtEndDocument{% + \noexpand\immediate\noexpand\write\@auxout{% + \string\providecommand\string\@xdylanguage[2]{}}% + \noexpand\immediate\noexpand\write\@auxout{% + \string\@xdylanguage{\@glo@type}{\csname @xdy@\@glo@type + @language\endcsname}}% + }% + }% + }% + \@do@auxoutstuff + \edef\@do@auxoutstuff{% + \noexpand\AtEndDocument{% + \noexpand\immediate\noexpand\write\@auxout{% + \string\providecommand\string\@gls@codepage[2]{}}% + \noexpand\immediate\noexpand\write\@auxout{% + \string\@gls@codepage{\@glo@type}{\gls@codepage}}% + }% + }% + \@do@auxoutstuff + \fi + \renewcommand*{\@warn@nomakeglossaries}{% + \GlossariesWarningNoLine{\string\makeglossaries\space + hasn't been used,^^Jthe glossaries will not be updated}% + }% +} +\newcommand*{\@glo@sortentries}[2]{% + \glosortentrieswarning + \def\@glo@sortinglist{}% + \def\@glo@sortinghandler{#1}% + \edef\@glo@type{#2}% + \forlistcsloop{\@glo@do@sortentries}{@glsref@#2}% + \csdef{@glsref@#2}{}% + \@for\@this@label:=\@glo@sortinglist\do{% + \xifinlistcs{\@this@label}{@glsref@#2}% + {}% + {% + \listcsxadd{@glsref@#2}{\@this@label}% + }% + \ifcsdef{@glo@sortingchildren@\@this@label}% + {% + \@glo@addchildren{#2}{\@this@label}% + }% + {}% + }% +} +\newcommand*{\@glo@addchildren}[2]{% + \bgroup + \letcs{\@glo@childlist}{@glo@sortingchildren@#2}% + \@for\@this@childlabel:=\@glo@childlist\do + {% + \xifinlistcs{\@this@childlabel}{@glsref@#1}% + {}% + {% + \listcsxadd{@glsref@#1}{\@this@childlabel}% + }% + \ifcsdef{@glo@sortingchildren@\@this@childlabel}% + {% + \@glo@addchildren{#1}{\@this@childlabel}% + }% + {% + }% + }% + \egroup +} +\newcommand*{\@glo@do@sortentries}[1]{% + \ifglshasparent{#1}% + {% + \edef\@glo@parent{\csuse{glo@\glsdetoklabel{#1}@parent}}% + \ifcsundef{@glo@sortingchildren@\@glo@parent}% + {% + \csdef{@glo@sortingchildren@\@glo@parent}{}% + }% + {}% + \expandafter\@glo@sortedinsert + \csname @glo@sortingchildren@\@glo@parent\endcsname{#1}% + \xifinlistcs{\@glo@parent}{@glsref@\@glo@type}% + {% + }% + {% + \expandafter\@glo@do@sortentries\expandafter{\@glo@parent}% + }% + }% + {% + \@glo@sortedinsert{\@glo@sortinglist}{#1}% + }% +} +\newcommand*{\@glo@sortedinsert}[2]{% + \dtl@insertinto{#2}{#1}{\@glo@sortinghandler}% +}% +\newcommand*{\@glo@sorthandler@word}[2]{% + \letcs\@gls@sort@A{glo@\glsdetoklabel{#1}@sort}% + \letcs\@gls@sort@B{glo@\glsdetoklabel{#2}@sort}% + \edef\glo@do@compare{% + \noexpand\dtlwordindexcompare{\noexpand\dtl@sortresult}% + {\expandonce\@gls@sort@B}% + {\expandonce\@gls@sort@A}% + }% + \glo@do@compare +} +\newcommand*{\@glo@sorthandler@letter}[2]{% + \letcs\@gls@sort@A{glo@\glsdetoklabel{#1}@sort}% + \letcs\@gls@sort@B{glo@\glsdetoklabel{#2}@sort}% + \edef\glo@do@compare{% + \noexpand\dtlletterindexcompare{\noexpand\dtl@sortresult}% + {\expandonce\@gls@sort@B}% + {\expandonce\@gls@sort@A}% + }% + \glo@do@compare +} +\newcommand*{\@glo@sorthandler@case}[2]{% + \letcs\@gls@sort@A{glo@\glsdetoklabel{#1}@sort}% + \letcs\@gls@sort@B{glo@\glsdetoklabel{#2}@sort}% + \edef\glo@do@compare{% + \noexpand\dtlcompare{\noexpand\dtl@sortresult}% + {\expandonce\@gls@sort@B}% + {\expandonce\@gls@sort@A}% + }% + \glo@do@compare +} +\newcommand*{\@glo@sorthandler@nocase}[2]{% + \letcs\@gls@sort@A{glo@\glsdetoklabel{#1}@sort}% + \letcs\@gls@sort@B{glo@\glsdetoklabel{#2}@sort}% + \edef\glo@do@compare{% + \noexpand\dtlicompare{\noexpand\dtl@sortresult}% + {\expandonce\@gls@sort@B}% + {\expandonce\@gls@sort@A}% + }% + \glo@do@compare +} +\newcommand*{\@glo@sortmacro@word}[1]{% + \ifdefstring{\@glo@default@sorttype}{standard}% + {% + \@glo@sortentries{\@glo@sorthandler@word}{#1}% + }% + {% + \PackageError{glossaries}{Conflicting sort options:^^J + \string\usepackage[sort=\@glo@default@sorttype]{glossaries}^^J + \string\printnoidxglossary[sort=word]}{}% + }% +} +\newcommand*{\@glo@sortmacro@letter}[1]{% + \ifdefstring{\@glo@default@sorttype}{standard}% + {% + \@glo@sortentries{\@glo@sorthandler@letter}{#1}% + }% + {% + \PackageError{glossaries}{Conflicting sort options:^^J + \string\usepackage[sort=\@glo@default@sorttype]{glossaries}^^J + \string\printnoidxglossary[sort=letter]}{}% + }% +} +\newcommand*{\@glo@sortmacro@standard}[1]{% + \ifdefstring{\@glo@default@sorttype}{standard}% + {% + \ifcsdef{@glo@sorthandler@\glsorder}% + {% + \@glo@sortentries{\csuse{@glo@sorthandler@\glsorder}}{#1}% + }% + {% + \PackageError{glossaries}{Unknown sort handler `\glsorder'}{}% + }% + }% + {% + \PackageError{glossaries}{Conflicting sort options:^^J + \string\usepackage[sort=\@glo@default@sorttype]{glossaries}^^J + \string\printnoidxglossary[sort=standard]}{}% + }% +} +\newcommand*{\@glo@sortmacro@case}[1]{% + \ifdefstring{\@glo@default@sorttype}{standard}% + {% + \@glo@sortentries{\@glo@sorthandler@case}{#1}% + }% + {% + \PackageError{glossaries}{Conflicting sort options:^^J + \string\usepackage[sort=\@glo@default@sorttype]{glossaries}^^J + \string\printnoidxglossary[sort=case]}{}% + }% +} +\newcommand*{\@glo@sortmacro@nocase}[1]{% + \ifdefstring{\@glo@default@sorttype}{standard}% + {% + \@glo@sortentries{\@glo@sorthandler@nocase}{#1}% + }% + {% + \PackageError{glossaries}{Conflicting sort options:^^J + \string\usepackage[sort=\@glo@default@sorttype]{glossaries}^^J + \string\printnoidxglossary[sort=nocase]}{}% + }% +} +\newcommand*{\@glo@sortmacro@def}[1]{% + \def\@glo@sortinglist{}% + \forglsentries[#1]{\@gls@thislabel}% + {% + \xifinlistcs{\@gls@thislabel}{@glsref@#1}% + {% + \listeadd{\@glo@sortinglist}{\@gls@thislabel}% + }% + {% + }% + }% + \cslet{@glsref@#1}{\@glo@sortinglist}% +} +\newcommand*{\@glo@sortmacro@def@do}[1]{% + \ifinlistcs{#1}{@glsref@\@glo@type}% + {}% + {% + \listcsadd{@glsref@\@glo@type}{#1}% + }% + \ifcsdef{@glo@sortingchildren@#1}% + {% + \@glo@addchildren{\@glo@type}{#1}% + }% + {}% +} +\newcommand*{\@glo@sortmacro@use}[1]{} +\newcommand*{\@print@noidx@glossary}{% + \ifcsdef{@glsref@\@glo@type}% + {% + \ifcsdef{@glo@sortmacro@\@glo@sorttype}% + {% + \csuse{@glo@sortmacro@\@glo@sorttype}{\@glo@type}% + }% + {% + \PackageError{glossaries}{Unknown sort handler `\@glo@sorttype'}{}% + }% + \glossarysection[\glossarytoctitle]{\glossarytitle}% + \glossarypreamble + \def\@gls@currentlettergroup{}% + \begin{theglossary}% + \glossaryheader + \glsresetentrylist + \forlistcsloop{\@gls@noidx@do}{@glsref@\@glo@type}% + \end{theglossary}% + \glossarypostamble + }% + {% + \@gls@noref@warn{\@glo@type}% + }% +} +\def\glo@grabfirst#1#2\@nil{% + \def\@gls@firsttok{#1}% + \ifdefempty\@gls@firsttok + {% + \def\@glo@thislettergrp{0}% + }% + {% + \@onelevel@sanitize\@gls@firsttok + \expandafter\@glo@grabfirst\@gls@firsttok{}{}\@nil + }% +} +\def\@glo@grabfirst#1#2\@nil{% + \ifdefempty\@glo@thislettergrp + {% + \def\@glo@thislettergrp{glssymbols}% + }% + {% + \count@=\uccode`#1\relax + \ifnum\count@=0\relax + \def\@glo@thislettergrp{glssymbols}% + \else + \ifdefstring\@glo@sorttype{case}% + {% + \count@=`#1\relax + }% + {% + }% + \edef\@glo@thislettergrp{\the\count@}% + \fi + }% +} +\newcommand{\@gls@noidx@do}[1]{% + \global\letcs{\@gls@loclist}{glo@\glsdetoklabel{#1}@loclist}% + \ifglshasparent{#1}% + {% + \gls@level=\csuse{glo@\glsdetoklabel{#1}@level}\relax + \ifdefvoid{\@gls@loclist} + {% + \subglossentry{\gls@level}{#1}{}% + }% + {% + \subglossentry{\gls@level}{#1}% + {% + \glossaryentrynumbers{\glsnoidxloclist{\@gls@loclist}}% + }% + }% + }% + {% + \letcs{\@gls@sort}{glo@\glsdetoklabel{#1}@sort}% + \expandafter\glo@grabfirst\@gls@sort{}{}\@nil + \ifdefequal{\@glo@thislettergrp}{\@gls@currentlettergroup}% + {}% + {% + \ifdefempty{\@gls@currentlettergroup}{}% + {% + \global\let\@glo@thislettergrp\@glo@thislettergrp + \glsgroupskip + }% + \glsgroupheading{\@glo@thislettergrp}% + }% + \global\let\@gls@currentlettergroup\@glo@thislettergrp + \ifdefvoid{\@gls@loclist} + {% + \glossentry{#1}{}% + }% + {% + \glossentry{#1}% + {% + \glossaryentrynumbers{\glsnoidxloclist{\@gls@loclist}}% + }% + }% + }% +} +\newcommand*{\glsnoidxloclist}[1]{% + \def\@gls@noidxloclist@sep{}% + \def\@gls@noidxloclist@prev{}% + \forlistloop{\glsnoidxloclisthandler}{#1}% +} +\newcommand*{\glsnoidxloclisthandler}[1]{% + \ifdefstring{\@gls@noidxloclist@prev}{#1}% + {% + }% + {% + \@gls@noidxloclist@sep + #1% + \def\@gls@noidxloclist@sep{\delimN}% + \def\@gls@noidxloclist@prev{#1}% + }% +} +\newcommand*{\glsnoidxdisplayloclisthandler}[1]{% + \ifdefstring{\@gls@noidxloclist@prev}{#1}% + {% + }% + {% + \@gls@noidxloclist@sep + \@gls@noidxloclist@prev + \def\@gls@noidxloclist@prev{#1}% + }% +} +\newcommand*\glsnoidxdisplayloc[4]{% + \setentrycounter[#1]{#2}% + \csuse{#3}{#4}% +} +\newcommand*{\@gls@reference}[3]{% + \glsdoifexistsorwarn{#2}% + {% + \ifcsundef{@glsref@#1}{\csgdef{@glsref@#1}{}}{}% + \ifinlistcs{#2}{@glsref@#1}% + {}% + {\listcsgadd{@glsref@#1}{#2}}% + \ifcsundef{glo@\glsdetoklabel{#2}@loclist}% + {\csgdef{glo@\glsdetoklabel{#2}@loclist}{}}% + {}% + \listcsgadd{glo@\glsdetoklabel{#2}@loclist}{#3}% + }% +} +\define@key{printgloss}{type}{\def\@glo@type{#1}} +\define@key{printgloss}{title}{% + \def\glossarytitle{#1}% + \let\gls@dotoctitle\relax +} +\define@key{printgloss}{toctitle}{% + \def\glossarytoctitle{#1}% + \let\gls@dotoctitle\relax +} +\define@key{printgloss}{style}{% + \ifcsundef{@glsstyle@#1}% + {% + \PackageError{glossaries}% + {Glossary style `#1' undefined}{}% + }% + {% + \def\@glossarystyle{\setglossentrycompatibility + \csname @glsstyle@#1\endcsname}% + }% +} +\define@choicekey{printgloss}{numberedsection}% + [\gls@numberedsection@val\gls@numberedsection@nr]% + {false,nolabel,autolabel,nameref}[nolabel]% +{% + \ifcase\gls@numberedsection@nr\relax + \renewcommand*{\@@glossarysecstar}{*}% + \renewcommand*{\@@glossaryseclabel}{}% + \or + \renewcommand*{\@@glossarysecstar}{}% + \renewcommand*{\@@glossaryseclabel}{}% + \or + \renewcommand*{\@@glossarysecstar}{}% + \renewcommand*{\@@glossaryseclabel}{\label{\glsautoprefix\@glo@type}}% + \or + \renewcommand*{\@@glossarysecstar}{*}% + \renewcommand*{\@@glossaryseclabel}{% + \protected@edef\@currentlabelname{\glossarytoctitle}% + \label{\glsautoprefix\@glo@type}}% + \fi +} +\define@choicekey{printgloss}{nogroupskip}{true,false}[true]{% + \csuse{glsnogroupskip#1}% +} +\define@choicekey{printgloss}{nopostdot}{true,false}[true]{% + \csuse{glsnopostdot#1}% +} +\newcommand*{\GlsEntryCounterLabelPrefix}{glsentry-} +\define@choicekey{printgloss}{entrycounter}{true,false}[true]{% + \csuse{glsentrycounter#1}% + \@gls@define@glossaryentrycounter +} +\define@choicekey{printgloss}{subentrycounter}{true,false}[true]{% + \csuse{glssubentrycounter#1}% + \@gls@define@glossarysubentrycounter +} +\define@boolkey{printgloss}[gls]{nonumberlist}[true]{% +\ifglsnonumberlist + \def\glossaryentrynumbers##1{}% +\else + \def\glossaryentrynumbers##1{##1}% +\fi} +\define@key{printgloss}{sort}{\@glo@assign@sortkey{#1}} +\newcommand*{\@glo@no@assign@sortkey}[1]{% + \PackageError{glossaries}{`sort' key not permitted with + \string\printglossary}% + {The `sort' key may only be used with \string\printnoidxglossary}% +} +\newcommand*{\@@glo@assign@sortkey}[1]{% + \def\@glo@sorttype{#1}% +} +\newcommand*{\@glsnonextpages}{% + \gdef\glossaryentrynumbers##1{% + \glsresetentrylist + }% +} +\newcommand*{\@glsnextpages}{% + \gdef\glossaryentrynumbers##1{% + ##1\glsresetentrylist}} +\newcommand*{\glsresetentrylist}{% + \global\let\glossaryentrynumbers\org@glossaryentrynumbers} +\newcommand*{\glsnonextpages}{} +\newcommand*{\glsnextpages}{} +\@gls@define@glossaryentrycounter +\@gls@define@glossarysubentrycounter +\newcommand*{\glsresetsubentrycounter}{% + \ifglssubentrycounter + \setcounter{glossarysubentry}{0}% + \fi +} +\newcommand*{\glsresetentrycounter}{% + \ifglsentrycounter + \setcounter{glossaryentry}{0}% + \fi +} +\newcommand*{\glsstepentry}[1]{% + \ifglsentrycounter + \refstepcounter{glossaryentry}% + \label{\GlsEntryCounterLabelPrefix\glsdetoklabel{#1}}% + \fi +} +\newcommand*{\glsstepsubentry}[1]{% + \ifglssubentrycounter + \edef\currentglssubentry{\glsdetoklabel{#1}}% + \refstepcounter{glossarysubentry}% + \label{\GlsEntryCounterLabelPrefix\currentglssubentry}% + \fi +} +\newcommand*{\glsrefentry}[1]{% + \ifglsentrycounter + \ref{\GlsEntryCounterLabelPrefix\glsdetoklabel{#1}}% + \else + \ifglssubentrycounter + \ref{\GlsEntryCounterLabelPrefix\glsdetoklabel{#1}}% + \else + \gls{#1}% + \fi + \fi +} +\newcommand*{\glsentrycounterlabel}{% + \ifglsentrycounter + \theglossaryentry.\space + \fi +} +\newcommand*{\glssubentrycounterlabel}{% + \ifglssubentrycounter + \theglossarysubentry)\space + \fi +} +\newcommand*{\glsentryitem}[1]{% + \ifglsentrycounter + \glsstepentry{#1}\glsentrycounterlabel + \else + \glsresetsubentrycounter + \fi +} +\newcommand*{\glssubentryitem}[1]{% + \ifglssubentrycounter + \glsstepsubentry{#1}\glssubentrycounterlabel + \fi +} +\ifcsundef{theglossary}% +{% + \newenvironment{theglossary}{}{}% +}% +{% + \@gls@warnontheglossdefined + \renewenvironment{theglossary}{}{}% +} +\newcommand*{\glossaryheader}{} +\newcommand*{\glstarget}[2]{\@glstarget{\glolinkprefix#1}{#2}} +\providecommand*{\compatibleglossentry}[2]{% + \toks@{#2}% + \protected@edef\@do@glossentry{\noexpand\glossaryentryfield{#1}% + {\noexpand\glsnamefont + {\expandafter\expandonce\csname glo@#1@name\endcsname}}% + {\expandafter\expandonce\csname glo@#1@desc\endcsname}% + {\expandafter\expandonce\csname glo@#1@symbol\endcsname}% + {\the\toks@}% + }% + \@do@glossentry +} +\newcommand*{\glossentryname}[1]{% + \glsdoifexistsorwarn{#1}% + {% + \letcs{\glo@name}{glo@\glsdetoklabel{#1}@name}% + \expandafter\glsnamefont\expandafter{\glo@name}% + }% +} +\newcommand*{\Glossentryname}[1]{% + \glsdoifexistsorwarn{#1}% + {% + \glsnamefont{\Glsentryname{#1}}% + }% +} +\newcommand*{\glossentrydesc}[1]{% + \glsdoifexistsorwarn{#1}% + {% + \glsentrydesc{#1}% + }% +} +\newcommand*{\Glossentrydesc}[1]{% + \glsdoifexistsorwarn{#1}% + {% + \Glsentrydesc{#1}% + }% +} +\newcommand*{\glossentrysymbol}[1]{% + \glsdoifexistsorwarn{#1}% + {% + \glsentrysymbol{#1}% + }% +} +\newcommand*{\Glossentrysymbol}[1]{% + \glsdoifexistsorwarn{#1}% + {% + \Glsentrysymbol{#1}% + }% +} +\providecommand*{\compatiblesubglossentry}[3]{% + \toks@{#3}% + \protected@edef\@do@subglossentry{\noexpand\glossarysubentryfield{\number#1}% + {#2}% + {\noexpand\glsnamefont + {\expandafter\expandonce\csname glo@#2@name\endcsname}}% + {\expandafter\expandonce\csname glo@#2@desc\endcsname}% + {\expandafter\expandonce\csname glo@#2@symbol\endcsname}% + {\the\toks@}% + }% + \@do@subglossentry +} +\newcommand*{\setglossentrycompatibility}{% + \let\glossentry\compatibleglossentry + \let\subglossentry\compatiblesubglossentry +} +\setglossentrycompatibility +\newcommand{\glossaryentryfield}[5]{% + \GlossariesWarning + {Deprecated use of \string\glossaryentryfield.^^J + I recommend you change to \string\glossentry.^^J + If you've just upgraded, try removing your gls auxiliary + files^^J and recompile}% + \noindent\textbf{\glstarget{#1}{#2}} #4 #3. #5\par} +\newcommand*{\glossarysubentryfield}[6]{% + \GlossariesWarning + {Deprecated use of \string\glossarysubentryfield.^^J + I recommend you change to \string\subglossentry.^^J + If you've just upgraded, try removing your gls auxiliary + files^^J and recompile}% + \glstarget{#2}{\strut}#4. #6\par} +\newcommand*{\glsgroupskip}{} +\newcommand*{\glsgroupheading}[1]{} +\newcommand*{\glsgetgrouptitle}[1]{% + \@gls@getgrouptitle{#1}{\@gls@grptitle}% + \@gls@grptitle +} +\newcommand*{\@gls@getgrouptitle}[2]{% + \dtl@ifsingle{#1}% + {% + \ifcsundef{#1groupname}{\def#2{#1}}{\letcs#2{#1groupname}}% + }% + {% + \ifboolexpr{test{\ifstrequal{#1}{glssymbols}} + or test{\ifstrequal{#1}{glsnumbers}}}% + {% + \ifcsundef{#1groupname}{\def#2{#1}}{\letcs#2{#1groupname}}% + }% + {% + \def#2{#1}% + }% + }% +} +\newcommand*{\@gls@noidx@getgrouptitle}[2]{% + \DTLifint{#1}% + {\edef#2{\char#1\relax}}% + {% + \ifcsundef{#1groupname}{\def#2{#1}}{\letcs#2{#1groupname}}% + }% +} +\newcommand*{\glsgetgrouplabel}[1]{% +\ifthenelse{\equal{#1}{\glssymbolsgroupname}}{glssymbols}{% +\ifthenelse{\equal{#1}{\glsnumbersgroupname}}{glsnumbers}{#1}}} +\newcommand*{\setentrycounter}[2][]{% + \def\@glo@counterprefix{#1}% + \ifx\@glo@counterprefix\@empty + \def\@glo@counterprefix{.}% + \else + \def\@glo@counterprefix{.#1.}% + \fi + \def\glsentrycounter{#2}% +} +\newcommand*{\setglossarystyle}[1]{% + \ifcsundef{@glsstyle@#1}% + {% + \PackageError{glossaries}{Glossary style `#1' undefined}{}% + }% + {% + \csname @glsstyle@#1\endcsname + }% + \ifx\@glossary@default@style\relax + \protected@edef\@glossary@default@style{#1}% + \fi +} +\newcommand*{\glossarystyle}[1]{% + \ifcsundef{@glsstyle@#1}% + {% + \PackageError{glossaries}{Glossary style `#1' undefined}{}% + }% + {% + \GlossariesWarning + {Deprecated command \string\glossarystyle.^^J + I recommend you switch to \string\setglossarystyle\space unless + you want to maintain backward compatibility}% + \setglossentrycompatibility + \csname @glsstyle@#1\endcsname + \ifcsdef{@glscompstyle@#1}% + {\setglossentrycompatibility\csuse{@glscompstyle@#1}}% + {}% + }% + \ifx\@glossary@default@style\relax + \protected@edef\@glossary@default@style{#1}% + \fi +} +\newcommand{\newglossarystyle}[2]{% + \ifcsundef{@glsstyle@#1}% + {% + \expandafter\def\csname @glsstyle@#1\endcsname{#2}% + }% + {% + \PackageError{glossaries}{Glossary style `#1' is already defined}{}% + }% +} +\newcommand{\renewglossarystyle}[2]{% + \ifcsundef{@glsstyle@#1}% + {% + \PackageError{glossaries}{Glossary style `#1' isn't already defined}{}% + }% + {% + \csdef{@glsstyle@#1}{#2}% + }% +} +\newcommand*{\glsnamefont}[1]{#1} +\ifcsundef{hyperlink}% +{% + \def\glshypernumber#1{#1}% +}% +{% + \def\glshypernumber#1{\@glshypernumber#1\nohyperpage{}\@nil} +} +\def\@glshypernumber#1\nohyperpage#2#3\@nil{% + \ifx\\#1\\% + \else + \@delimR#1\delimR\delimR\\% + \fi + \ifx\\#2\\% + \else + #2% + \fi + \ifx\\#3\\% + \else + \@glshypernumber#3\@nil + \fi +} +\def\@delimR#1\delimR #2\delimR #3\\{% +\ifx\\#2\\% + \@delimN{#1}% +\else + \@gls@numberlink{#1}\delimR\@gls@numberlink{#2}% +\fi} +\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 +} +\def\@gls@numberlink#1{% +\begingroup + \toks@={}% + \@gls@removespaces#1 \@nil +\endgroup} +\def\@gls@removespaces#1 #2\@nil{% + \toks@=\expandafter{\the\toks@#1}% + \ifx\\#2\\% + \edef\x{\the\toks@}% + \ifx\x\empty + \else + \hyperlink{\glsentrycounter\@glo@counterprefix\the\toks@}% + {\the\toks@}% + \fi + \else + \@gls@ReturnAfterFi{% + \@gls@removespaces#2\@nil + }% + \fi +} +\long\def\@gls@ReturnAfterFi#1\fi{\fi#1} +\newcommand*{\hyperrm}[1]{\textrm{\glshypernumber{#1}}} +\newcommand*{\hypersf}[1]{\textsf{\glshypernumber{#1}}} +\newcommand*{\hypertt}[1]{\texttt{\glshypernumber{#1}}} +\newcommand*{\hyperbf}[1]{\textbf{\glshypernumber{#1}}} +\newcommand*{\hypermd}[1]{\textmd{\glshypernumber{#1}}} +\newcommand*{\hyperit}[1]{\textit{\glshypernumber{#1}}} +\newcommand*{\hypersl}[1]{\textsl{\glshypernumber{#1}}} +\newcommand*{\hyperup}[1]{\textup{\glshypernumber{#1}}} +\newcommand*{\hypersc}[1]{\textsc{\glshypernumber{#1}}} +\newcommand*{\hyperemph}[1]{\emph{\glshypernumber{#1}}} +\newcommand{\oldacronym}[4][\gls@label]{% + \def\gls@label{#2}% + \newacronym[#4]{#1}{#2}{#3}% + \ifcsundef{xspace}% + {% + \expandafter\edef\csname#1\endcsname{% + \noexpand\@ifstar{\noexpand\Gls{#1}}{\noexpand\gls{#1}}% + }% + }% + {% + \expandafter\edef\csname#1\endcsname{% + \noexpand\@ifstar{\noexpand\Gls{#1}\noexpand\xspace}{% + \noexpand\gls{#1}\noexpand\xspace}% + }% + }% +} + \newcommand{\newacronym}[4][]{} +\newcommand*{\acrpluralsuffix}{\glsacrpluralsuffix} +\newrobustcmd*{\glstextup}[1]{\ifdef\textulc{\textulc{#1}}{\textup{#1}}} +\newcommand*{\glsshortkey}{short} +\newcommand*{\glsshortpluralkey}{shortplural} +\newcommand*{\glslongkey}{long} +\newcommand*{\glslongpluralkey}{longplural} +\newrobustcmd*{\acrfull}{\@gls@hyp@opt\ns@acrfull} +\newcommand*\ns@acrfull[2][]{% + \new@ifnextchar[{\@acrfull{#1}{#2}}% + {\@acrfull{#1}{#2}[]}% +} +\def\@acrfull#1#2[#3]{% + \acrfullfmt{#1}{#2}{#3}% +} +\newcommand*{\acrfullfmt}[3]{% + \acrlinkfullformat{\@acrlong}{\@acrshort}{#1}{#2}{#3}% +} +\newcommand{\acrlinkfullformat}[5]{% + \acrfullformat{#1{#3}{#4}[#5]}{#2{#3}{#4}[]}% +} +\newcommand{\acrfullformat}[2]{#1\glsspace(#2)} +\newrobustcmd{\glsspace}{\space} +\newrobustcmd*{\Acrfull}{\@gls@hyp@opt\ns@Acrfull} +\newcommand*\ns@Acrfull[2][]{% + \new@ifnextchar[{\@Acrfull{#1}{#2}}% + {\@Acrfull{#1}{#2}[]}% +} +\def\@Acrfull#1#2[#3]{% + \Acrfullfmt{#1}{#2}{#3}% +} +\newcommand*{\Acrfullfmt}[3]{% + \acrlinkfullformat{\@Acrlong}{\@acrshort}{#1}{#2}{#3}% +} +\newrobustcmd*{\ACRfull}{\@gls@hyp@opt\ns@ACRfull} +\newcommand*\ns@ACRfull[2][]{% + \new@ifnextchar[{\@ACRfull{#1}{#2}}% + {\@ACRfull{#1}{#2}[]}% +} +\def\@ACRfull#1#2[#3]{% + \ACRfullfmt{#1}{#2}{#3}% +} +\newcommand*{\ACRfullfmt}[3]{% + \acrlinkfullformat{\@ACRlong}{\@ACRshort}{#1}{#2}{#3}% +} +\newrobustcmd*{\acrfullpl}{\@gls@hyp@opt\ns@acrfullpl} +\newcommand*\ns@acrfullpl[2][]{% + \new@ifnextchar[{\@acrfullpl{#1}{#2}}% + {\@acrfullpl{#1}{#2}[]}% +} +\def\@acrfullpl#1#2[#3]{% + \acrfullplfmt{#1}{#2}{#3}% +} +\newcommand*{\acrfullplfmt}[3]{% + \acrlinkfullformat{\@acrlongpl}{\@acrshortpl}{#1}{#2}{#3}% +} +\newrobustcmd*{\Acrfullpl}{\@gls@hyp@opt\ns@Acrfullpl} +\newcommand*\ns@Acrfullpl[2][]{% + \new@ifnextchar[{\@Acrfullpl{#1}{#2}}% + {\@Acrfullpl{#1}{#2}[]}% +} +\def\@Acrfullpl#1#2[#3]{% + \Acrfullplfmt{#1}{#2}{#3}% +} +\newcommand*{\Acrfullplfmt}[3]{% + \acrlinkfullformat{\@Acrlongpl}{\@acrshortpl}{#1}{#2}{#3}% +} +\newrobustcmd*{\ACRfullpl}{\@gls@hyp@opt\ns@ACRfullpl} +\newcommand*\ns@ACRfullpl[2][]{% + \new@ifnextchar[{\@ACRfullpl{#1}{#2}}% + {\@ACRfullpl{#1}{#2}[]}% +} +\def\@ACRfullpl#1#2[#3]{% + \ACRfullplfmt{#1}{#2}{#3}% +} +\newcommand*{\ACRfullplfmt}[3]{% + \acrlinkfullformat{\@ACRlongpl}{\@ACRshortpl}{#1}{#2}{#3}% +} +\newcommand{\acronymfont}[1]{#1} +\newcommand{\firstacronymfont}[1]{\acronymfont{#1}} +\newcommand*{\acrnameformat}[2]{\acronymfont{#1}} +\newtoks\glskeylisttok +\newtoks\glslabeltok +\newtoks\glsshorttok +\newtoks\glslongtok +\newcommand*{\newacronymhook}{} +\newcommand*{\SetGenericNewAcronym}{% + \let\@Gls@entryname\@Gls@acrentryname + \renewcommand{\newacronym}[4][]{% + \ifdefempty{\@glsacronymlists}% + {% + \def\@glo@type{\acronymtype}% + \setkeys{glossentry}{##1}% + \DeclareAcronymList{\@glo@type}% + }% + {}% + \glskeylisttok{##1}% + \glslabeltok{##2}% + \glsshorttok{##3}% + \glslongtok{##4}% + \newacronymhook + \protected@edef\@do@newglossaryentry{% + \noexpand\newglossaryentry{\the\glslabeltok}% + {% + type=\acronymtype,% + name={\expandonce{\acronymentry{##2}}},% + sort={\acronymsort{\the\glsshorttok}{\the\glslongtok}},% + text={\the\glsshorttok},% + short={\the\glsshorttok},% + shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},% + long={\the\glslongtok},% + longplural={\the\glslongtok\noexpand\acrpluralsuffix},% + \GenericAcronymFields,% + \the\glskeylisttok + }% + }% + \@do@newglossaryentry + }% + \renewcommand*{\acrfullfmt}[3]{% + \glslink[##1]{##2}{\genacrfullformat{##2}{##3}}}% + \renewcommand*{\Acrfullfmt}[3]{% + \glslink[##1]{##2}{\Genacrfullformat{##2}{##3}}}% + \renewcommand*{\ACRfullfmt}[3]{% + \glslink[##1]{##2}{% + \mfirstucMakeUppercase{\genacrfullformat{##2}{##3}}}}% + \renewcommand*{\acrfullplfmt}[3]{% + \glslink[##1]{##2}{\genplacrfullformat{##2}{##3}}}% + \renewcommand*{\Acrfullplfmt}[3]{% + \glslink[##1]{##2}{\Genplacrfullformat{##2}{##3}}}% + \renewcommand*{\ACRfullplfmt}[3]{% + \glslink[##1]{##2}{% + \mfirstucMakeUppercase{\genplacrfullformat{##2}{##3}}}}% + \renewcommand*{\glsentryfull}[1]{\genacrfullformat{##1}{}}% + \renewcommand*{\Glsentryfull}[1]{\Genacrfullformat{##1}{}}% + \renewcommand*{\glsentryfullpl}[1]{\genplacrfullformat{##1}{}}% + \renewcommand*{\Glsentryfullpl}[1]{\Genplacrfullformat{##1}{}}% +} +\newcommand*{\GenericAcronymFields}{description={\the\glslongtok}} +\newcommand*{\acronymentry}[1]{\acronymfont{\glsentryshort{#1}}} +\newcommand*{\acronymsort}[2]{#1} +\newcommand*{\setacronymstyle}[1]{% + \ifcsundef{@glsacr@dispstyle@#1} + {% + \PackageError{glossaries}{Undefined acronym style `#1'}{}% + }% + {% + \ifdefempty{\@glsacronymlists}% + {% + \DeclareAcronymList{\acronymtype}% + }% + {}% + \SetGenericNewAcronym + \GlsUseAcrStyleDefs{#1}% + \@for\@gls@type:=\@glsacronymlists\do{% + \defglsentryfmt[\@gls@type]{\GlsUseAcrEntryDispStyle{#1}}% + }% + }% +} +\newcommand*{\newacronymstyle}[3]{% + \ifcsdef{@glsacr@dispstyle@#1}% + {% + \PackageError{glossaries}{Acronym style `#1' already exists}{}% + }% + {% + \csdef{@glsacr@dispstyle@#1}{#2}% + \csdef{@glsacr@styledefs@#1}{#3}% + }% +} +\newcommand*{\renewacronymstyle}[3]{% + \ifcsdef{@glsacr@dispstyle@#1}% + {% + \csdef{@glsacr@dispstyle@#1}{#2}% + \csdef{@glsacr@styledefs@#1}{#3}% + }% + {% + \PackageError{glossaries}{Acronym style `#1' doesn't exist}{}% + }% +} +\newcommand*{\GlsUseAcrEntryDispStyle}[1]{\csuse{@glsacr@dispstyle@#1}} +\newcommand*{\GlsUseAcrStyleDefs}[1]{\csuse{@glsacr@styledefs@#1}} +\newacronymstyle{long-short}% +{% + \ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}% +}% +{% + \renewcommand*{\GenericAcronymFields}{description={\the\glslongtok}}% + \renewcommand*{\genacrfullformat}[2]{% + \glsentrylong{##1}##2\space + (\protect\firstacronymfont{\glsentryshort{##1}})% + }% + \renewcommand*{\Genacrfullformat}[2]{% + \Glsentrylong{##1}##2\space + (\protect\firstacronymfont{\glsentryshort{##1}})% + }% + \renewcommand*{\genplacrfullformat}[2]{% + \glsentrylongpl{##1}##2\space + (\protect\firstacronymfont{\glsentryshortpl{##1}})% + }% + \renewcommand*{\Genplacrfullformat}[2]{% + \Glsentrylongpl{##1}##2\space + (\protect\firstacronymfont{\glsentryshortpl{##1}})% + }% + \renewcommand*{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}}% + \renewcommand*{\acronymsort}[2]{##1}% + \renewcommand*{\acronymfont}[1]{##1}% + \renewcommand*{\firstacronymfont}[1]{\acronymfont{##1}}% + \renewcommand*{\acrpluralsuffix}{\glspluralsuffix}% +} +\newacronymstyle{long-sp-short}% +{% + \ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}% +}% +{% + \renewcommand*{\GenericAcronymFields}{description={\the\glslongtok}}% + \renewcommand*{\genacrfullformat}[2]{% + \glsentrylong{##1}##2\glsacspace{##1}% + (\protect\firstacronymfont{\glsentryshort{##1}})% + }% + \renewcommand*{\Genacrfullformat}[2]{% + \Glsentrylong{##1}##2\glsacspace{##1}% + (\protect\firstacronymfont{\glsentryshort{##1}})% + }% + \renewcommand*{\genplacrfullformat}[2]{% + \glsentrylongpl{##1}##2\glsacspace{##1}% + (\protect\firstacronymfont{\glsentryshortpl{##1}})% + }% + \renewcommand*{\Genplacrfullformat}[2]{% + \Glsentrylongpl{##1}##2\glsacspace{##1}% + (\protect\firstacronymfont{\glsentryshortpl{##1}})% + }% + \renewcommand*{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}}% + \renewcommand*{\acronymsort}[2]{##1}% + \renewcommand*{\acronymfont}[1]{##1}% + \renewcommand*{\firstacronymfont}[1]{\acronymfont{##1}}% + \renewcommand*{\acrpluralsuffix}{\glspluralsuffix}% +} +\newcommand*{\glsacspace}[1]{% + \settowidth{\dimen@}{(\firstacronymfont{\glsentryshort{#1}})}% + \ifdim\dimen@<3em~\else\space\fi +} +\newacronymstyle{short-long}% +{% + \ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}% +}% +{% + \renewcommand*{\GenericAcronymFields}{description={\the\glslongtok}}% + \renewcommand*{\genacrfullformat}[2]{% + \protect\firstacronymfont{\glsentryshort{##1}}##2\space + (\glsentrylong{##1})% + }% + \renewcommand*{\Genacrfullformat}[2]{% + \protect\firstacronymfont{\Glsentryshort{##1}}##2\space + (\glsentrylong{##1})% + }% + \renewcommand*{\genplacrfullformat}[2]{% + \protect\firstacronymfont{\glsentryshortpl{##1}}##2\space + (\glsentrylongpl{##1})% + }% + \renewcommand*{\Genplacrfullformat}[2]{% + \protect\firstacronymfont{\Glsentryshortpl{##1}}##2\space + (\glsentrylongpl{##1})% + }% + \renewcommand*{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}}% + \renewcommand*{\acronymsort}[2]{##1}% + \renewcommand*{\acronymfont}[1]{##1}% + \renewcommand*{\firstacronymfont}[1]{\acronymfont{##1}}% + \renewcommand*{\acrpluralsuffix}{\glspluralsuffix}% +} +\newacronymstyle{long-sc-short}% +{% + \GlsUseAcrEntryDispStyle{long-short}% +}% +{% + \GlsUseAcrStyleDefs{long-short}% + \renewcommand{\acronymfont}[1]{\textsc{##1}}% + \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}% +} +\newacronymstyle{long-sm-short}% +{% + \GlsUseAcrEntryDispStyle{long-short}% +}% +{% + \GlsUseAcrStyleDefs{long-short}% + \renewcommand{\acronymfont}[1]{\textsmaller{##1}}% + \renewcommand*{\acrpluralsuffix}{\glsacrpluralsuffix}% +} +\newacronymstyle{sc-short-long}% +{% + \GlsUseAcrEntryDispStyle{short-long}% +}% +{% + \GlsUseAcrStyleDefs{short-long}% + \renewcommand{\acronymfont}[1]{\textsc{##1}}% + \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}% +} +\newacronymstyle{sm-short-long}% +{% + \GlsUseAcrEntryDispStyle{short-long}% +}% +{% + \GlsUseAcrStyleDefs{short-long}% + \renewcommand{\acronymfont}[1]{\textsmaller{##1}}% + \renewcommand*{\acrpluralsuffix}{\glsacrpluralsuffix}% +} +\newacronymstyle{long-short-desc}% +{% + \GlsUseAcrEntryDispStyle{long-short}% +}% +{% + \GlsUseAcrStyleDefs{long-short}% + \renewcommand*{\GenericAcronymFields}{}% + \renewcommand*{\acronymsort}[2]{##2}% + \renewcommand*{\acronymentry}[1]{% + \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}% +} +\newacronymstyle{long-sp-short-desc}% +{% + \GlsUseAcrEntryDispStyle{long-sp-short}% +}% +{% + \GlsUseAcrStyleDefs{long-sp-short}% + \renewcommand*{\GenericAcronymFields}{}% + \renewcommand*{\acronymsort}[2]{##2}% + \renewcommand*{\acronymentry}[1]{% + \glsentrylong{##1}\glsacspace{##1}(\acronymfont{\glsentryshort{##1}})}% +} +\newacronymstyle{long-sc-short-desc}% +{% + \GlsUseAcrEntryDispStyle{long-sc-short}% +}% +{% + \GlsUseAcrStyleDefs{long-sc-short}% + \renewcommand*{\GenericAcronymFields}{}% + \renewcommand*{\acronymsort}[2]{##2}% + \renewcommand*{\acronymentry}[1]{% + \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}% +} +\newacronymstyle{long-sm-short-desc}% +{% + \GlsUseAcrEntryDispStyle{long-sm-short}% +}% +{% + \GlsUseAcrStyleDefs{long-sm-short}% + \renewcommand*{\GenericAcronymFields}{}% + \renewcommand*{\acronymsort}[2]{##2}% + \renewcommand*{\acronymentry}[1]{% + \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}% +} +\newacronymstyle{short-long-desc}% +{% + \GlsUseAcrEntryDispStyle{short-long}% +}% +{% + \GlsUseAcrStyleDefs{short-long}% + \renewcommand*{\GenericAcronymFields}{}% + \renewcommand*{\acronymsort}[2]{##2}% + \renewcommand*{\acronymentry}[1]{% + \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}% +} +\newacronymstyle{sc-short-long-desc}% +{% + \GlsUseAcrEntryDispStyle{sc-short-long}% +}% +{% + \GlsUseAcrStyleDefs{sc-short-long}% + \renewcommand*{\GenericAcronymFields}{}% + \renewcommand*{\acronymsort}[2]{##2}% + \renewcommand*{\acronymentry}[1]{% + \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}% +} +\newacronymstyle{sm-short-long-desc}% +{% + \GlsUseAcrEntryDispStyle{sm-short-long}% +}% +{% + \GlsUseAcrStyleDefs{sm-short-long}% + \renewcommand*{\GenericAcronymFields}{}% + \renewcommand*{\acronymsort}[2]{##2}% + \renewcommand*{\acronymentry}[1]{% + \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}% +} +\newacronymstyle{dua}% +{% + \ifdefempty\glscustomtext + {% + \ifglshaslong{\glslabel}% + {% + \glsifplural + {% + \glscapscase + {% + \glsentrylongpl{\glslabel}\glsinsert + }% + {% + \Glsentrylongpl{\glslabel}\glsinsert + }% + {% + \mfirstucMakeUppercase + {\glsentrylongpl{\glslabel}\glsinsert}% + }% + }% + {% + \glscapscase + {% + \glsentrylong{\glslabel}\glsinsert + }% + {% + \Glsentrylong{\glslabel}\glsinsert + }% + {% + \mfirstucMakeUppercase + {\glsentrylong{\glslabel}\glsinsert}% + }% + }% + }% + {% + \glsgenentryfmt + }% + }% + {\glscustomtext\glsinsert}% +}% +{% + \renewcommand*{\GenericAcronymFields}{description={\the\glslongtok}}% + \renewcommand*{\acrfullfmt}[3]{% + \glslink[##1]{##2}{\glsentrylong{##2}##3\space + (\acronymfont{\glsentryshort{##2}})}}% + \renewcommand*{\Acrfullfmt}[3]{% + \glslink[##1]{##2}{\Glsentrylong{##2}##3\space + (\acronymfont{\glsentryshort{##2}})}}% + \renewcommand*{\ACRfullfmt}[3]{% + \glslink[##1]{##2}{% + \mfirstucMakeUppercase{\glsentrylong{##2}##3\space + (\acronymfont{\glsentryshort{##2}})}}}% + \renewcommand*{\acrfullplfmt}[3]{% + \glslink[##1]{##2}{\glsentrylongpl{##2}##3\space + (\acronymfont{\glsentryshortpl{##2}})}}% + \renewcommand*{\Acrfullplfmt}[3]{% + \glslink[##1]{##2}{\Glsentrylongpl{##2}##3\space + (\acronymfont{\glsentryshortpl{##2}})}}% + \renewcommand*{\ACRfullplfmt}[3]{% + \glslink[##1]{##2}{% + \mfirstucMakeUppercase{\glsentrylongpl{##2}##3\space + (\acronymfont{\glsentryshortpl{##2}})}}}% + \renewcommand*{\glsentryfull}[1]{% + \glsentrylong{##1}\space(\acronymfont{\glsentryshort{##1}})% + }% + \renewcommand*{\Glsentryfull}[1]{% + \Glsentrylong{##1}\space(\acronymfont{\glsentryshort{##1}})% + }% + \renewcommand*{\glsentryfullpl}[1]{% + \glsentrylongpl{##1}\space(\acronymfont{\glsentryshortpl{##1}})% + }% + \renewcommand*{\Glsentryfullpl}[1]{% + \Glsentrylongpl{##1}\space(\acronymfont{\glsentryshortpl{##1}})% + }% + \renewcommand*{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}}% + \renewcommand*{\acronymsort}[2]{##1}% + \renewcommand*{\acronymfont}[1]{##1}% + \renewcommand*{\acrpluralsuffix}{\glsacrpluralsuffix}% +} +\newacronymstyle{dua-desc}% +{% + \GlsUseAcrEntryDispStyle{dua}% +}% +{% + \GlsUseAcrStyleDefs{dua}% + \renewcommand*{\GenericAcronymFields}{}% + \renewcommand*{\acronymentry}[1]{\acronymfont{\glsentrylong{##1}}}% + \renewcommand*{\acronymsort}[2]{##2}% +}% +\newacronymstyle{footnote}% +{% + \ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}% +}% +{% + \renewcommand*{\GenericAcronymFields}{description={\the\glslongtok}}% + \glshyperfirstfalse + \renewcommand*{\genacrfullformat}[2]{% + \protect\firstacronymfont{\glsentryshort{##1}}##2% + \protect\footnote{\glsentrylong{##1}}% + }% + \renewcommand*{\Genacrfullformat}[2]{% + \firstacronymfont{\Glsentryshort{##1}}##2% + \protect\footnote{\glsentrylong{##1}}% + }% + \renewcommand*{\genplacrfullformat}[2]{% + \protect\firstacronymfont{\glsentryshortpl{##1}}##2% + \protect\footnote{\glsentrylongpl{##1}}% + }% + \renewcommand*{\Genplacrfullformat}[2]{% + \protect\firstacronymfont{\Glsentryshortpl{##1}}##2% + \protect\footnote{\glsentrylongpl{##1}}% + }% + \renewcommand*{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}}% + \renewcommand*{\acronymsort}[2]{##1}% + \renewcommand*{\acronymfont}[1]{##1}% + \renewcommand*{\acrpluralsuffix}{\glsacrpluralsuffix}% + \renewcommand*{\acrfullfmt}[3]{% + \glslink[##1]{##2}{\acronymfont{\glsentryshort{##2}}##3\space + (\glsentrylong{##2})}}% + \renewcommand*{\Acrfullfmt}[3]{% + \glslink[##1]{##2}{\acronymfont{\Glsentryshort{##2}}##3\space + (\glsentrylong{##2})}}% + \renewcommand*{\ACRfullfmt}[3]{% + \glslink[##1]{##2}{% + \mfirstucMakeUppercase{\acronymfont{\glsentryshort{##2}}##3\space + (\glsentrylong{##2})}}}% + \renewcommand*{\acrfullplfmt}[3]{% + \glslink[##1]{##2}{\acronymfont{\glsentryshortpl{##2}}##3\space + (\glsentrylongpl{##2})}}% + \renewcommand*{\Acrfullplfmt}[3]{% + \glslink[##1]{##2}{\acronymfont{\Glsentryshortpl{##2}}##3\space + (\glsentrylongpl{##2})}}% + \renewcommand*{\ACRfullplfmt}[3]{% + \glslink[##1]{##2}{% + \mfirstucMakeUppercase{\acronymfont{\glsentryshortpl{##2}}##3\space + (\glsentrylongpl{##2})}}}% + \renewcommand*{\glsentryfull}[1]{% + \acronymfont{\glsentryshort{##1}}\space(\glsentrylong{##1})}% + \renewcommand*{\Glsentryfull}[1]{% + \acronymfont{\Glsentryshort{##1}}\space(\glsentrylong{##1})}% + \renewcommand*{\glsentryfullpl}[1]{% + \acronymfont{\glsentryshortpl{##1}}\space(\glsentrylongpl{##1})}% + \renewcommand*{\Glsentryfullpl}[1]{% + \acronymfont{\Glsentryshortpl{##1}}\space(\glsentrylongpl{##1})}% +} +\newacronymstyle{footnote-sc}% +{% + \GlsUseAcrEntryDispStyle{footnote}% +}% +{% + \GlsUseAcrStyleDefs{footnote}% + \renewcommand{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}} + \renewcommand{\acronymfont}[1]{\textsc{##1}}% + \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}% +}% +\newacronymstyle{footnote-sm}% +{% + \GlsUseAcrEntryDispStyle{footnote}% +}% +{% + \GlsUseAcrStyleDefs{footnote}% + \renewcommand{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}} + \renewcommand{\acronymfont}[1]{\textsmaller{##1}}% + \renewcommand*{\acrpluralsuffix}{\glsacrpluralsuffix}% +}% +\newacronymstyle{footnote-desc}% +{% + \GlsUseAcrEntryDispStyle{footnote}% +}% +{% + \GlsUseAcrStyleDefs{footnote}% + \renewcommand*{\GenericAcronymFields}{}% + \renewcommand*{\acronymsort}[2]{##2}% + \renewcommand*{\acronymentry}[1]{% + \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}% +} +\newacronymstyle{footnote-sc-desc}% +{% + \GlsUseAcrEntryDispStyle{footnote-sc}% +}% +{% + \GlsUseAcrStyleDefs{footnote-sc}% + \renewcommand*{\GenericAcronymFields}{}% + \renewcommand*{\acronymsort}[2]{##2}% + \renewcommand*{\acronymentry}[1]{% + \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}% +} +\newacronymstyle{footnote-sm-desc}% +{% + \GlsUseAcrEntryDispStyle{footnote-sm}% +}% +{% + \GlsUseAcrStyleDefs{footnote-sm}% + \renewcommand*{\GenericAcronymFields}{}% + \renewcommand*{\acronymsort}[2]{##2}% + \renewcommand*{\acronymentry}[1]{% + \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}% +} +\newcommand*{\DefineAcronymSynonyms}{% + \let\acs\acrshort + \let\Acs\Acrshort + \let\acsp\acrshortpl + \let\Acsp\Acrshortpl + \let\acl\acrlong + \let\aclp\acrlongpl + \let\Acl\Acrlong + \let\Aclp\Acrlongpl + \let\acf\acrfull + \let\acfp\acrfullpl + \let\Acf\Acrfull + \let\Acfp\Acrfullpl + \let\ac\gls + \let\Ac\Gls + \let\acp\glspl + \let\Acp\Glspl +} +\ifglsacrshortcuts + \DefineAcronymSynonyms +\fi +\newcommand*{\SetDefaultAcronymDisplayStyle}[1]{% + \defglsentryfmt[#1]{\glsgenentryfmt}% +} +\newcommand*{\DefaultNewAcronymDef}{% + \edef\@do@newglossaryentry{% + \noexpand\newglossaryentry{\the\glslabeltok}% + {% + type=\acronymtype,% + name={\the\glsshorttok},% + sort={\the\glsshorttok},% + text={\the\glsshorttok},% + first={\acrfullformat{\the\glslongtok}{\the\glsshorttok}},% + plural={\noexpand\expandonce\noexpand\@glo@shortpl},% + firstplural={\acrfullformat{\noexpand\expandonce\noexpand\@glo@longpl}% + {\noexpand\expandonce\noexpand\@glo@shortpl}},% + short={\the\glsshorttok},% + shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},% + long={\the\glslongtok},% + longplural={\the\glslongtok\noexpand\acrpluralsuffix},% + description={\the\glslongtok},% + descriptionplural={\noexpand\expandonce\noexpand\@glo@longpl},% + \the\glskeylisttok + }% + }% + \let\@org@gls@assign@firstpl\gls@assign@firstpl + \let\@org@gls@assign@plural\gls@assign@plural + \let\@org@gls@assign@descplural\gls@assign@descplural + \def\gls@assign@firstpl##1##2{% + \@@gls@expand@field{##1}{firstpl}{##2}% + }% + \def\gls@assign@plural##1##2{% + \@@gls@expand@field{##1}{plural}{##2}% + }% + \def\gls@assign@descplural##1##2{% + \@@gls@expand@field{##1}{descplural}{##2}% + }% + \@do@newglossaryentry + \let\gls@assign@firstpl\@org@gls@assign@firstpl + \let\gls@assign@plural\@org@gls@assign@plural + \let\gls@assign@symbolplural\@org@gls@assign@symbolplural +} +\newcommand*{\SetDefaultAcronymStyle}{% + \@for\@gls@type:=\@glsacronymlists\do{% + \SetDefaultAcronymDisplayStyle{\@gls@type}% + }% + \renewcommand{\newacronym}[4][]{% + \ifx\@glsacronymlists\@empty + \def\@glo@type{\acronymtype}% + \setkeys{glossentry}{##1}% + \DeclareAcronymList{\@glo@type}% + \SetDefaultAcronymDisplayStyle{\@glo@type}% + \fi + \glskeylisttok{##1}% + \glslabeltok{##2}% + \glsshorttok{##3}% + \glslongtok{##4}% + \newacronymhook + \DefaultNewAcronymDef + }% + \renewcommand*{\acrpluralsuffix}{\glsacrpluralsuffix}% +} +\newcommand*{\acrfootnote}[3]{\acrlinkfootnote{#1}{#2}{#3}} +\newcommand*{\acrlinkfootnote}[3]{% + \footnote{\glslink[#1]{#2}{#3}}% +} +\newcommand*{\acrnolinkfootnote}[3]{% + \footnote{#3}% +} +\newcommand*{\SetDescriptionFootnoteAcronymDisplayStyle}[1]{% + \defglsentryfmt[#1]{% + \ifdefempty\glscustomtext + {% + \ifglsused{\glslabel}% + {% + \acronymfont{\glsgenentryfmt}% + }% + {% + \firstacronymfont{\glsgenentryfmt}% + \ifglshassymbol{\glslabel}% + {% + \expandafter\protect\expandafter\acrfootnote\expandafter + {\@gls@link@opts}{\@gls@link@label}% + {% + \glsifplural + {\glsentrysymbolplural{\glslabel}}% + {\glsentrysymbol{\glslabel}}% + }% + }% + }% + }% + {\glscustomtext\glsinsert}% + }% +} +\newcommand*{\DescriptionFootnoteNewAcronymDef}{% + \edef\@do@newglossaryentry{% + \noexpand\newglossaryentry{\the\glslabeltok}% + {% + type=\acronymtype,% + name={\noexpand\acronymfont{\the\glsshorttok}},% + sort={\the\glsshorttok},% + first={\the\glsshorttok},% + firstplural={\noexpand\expandonce\noexpand\@glo@shortpl},% + text={\the\glsshorttok},% + plural={\noexpand\expandonce\noexpand\@glo@shortpl},% + short={\the\glsshorttok},% + shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},% + long={\the\glslongtok},% + longplural={\the\glslongtok\noexpand\acrpluralsuffix},% + symbol={\the\glslongtok},% + symbolplural={\noexpand\expandonce\noexpand\@glo@longpl},% + \the\glskeylisttok + }% + }% + \let\@org@gls@assign@firstpl\gls@assign@firstpl + \let\@org@gls@assign@plural\gls@assign@plural + \let\@org@gls@assign@symbolplural\gls@assign@symbolplural + \def\gls@assign@firstpl##1##2{% + \@@gls@expand@field{##1}{firstpl}{##2}% + }% + \def\gls@assign@plural##1##2{% + \@@gls@expand@field{##1}{plural}{##2}% + }% + \def\gls@assign@symbolplural##1##2{% + \@@gls@expand@field{##1}{symbolplural}{##2}% + }% + \@do@newglossaryentry + \let\gls@assign@plural\@org@gls@assign@plural + \let\gls@assign@firstpl\@org@gls@assign@firstpl + \let\gls@assign@symbolplural\@org@gls@assign@symbolplural +} +\newcommand*{\SetDescriptionFootnoteAcronymStyle}{% + \renewcommand{\newacronym}[4][]{% + \ifx\@glsacronymlists\@empty + \def\@glo@type{\acronymtype}% + \setkeys{glossentry}{##1}% + \DeclareAcronymList{\@glo@type}% + \SetDescriptionFootnoteAcronymDisplayStyle{\@glo@type}% + \fi + \glskeylisttok{##1}% + \glslabeltok{##2}% + \glsshorttok{##3}% + \glslongtok{##4}% + \newacronymhook + \DescriptionFootnoteNewAcronymDef + }% + \@for\@gls@type:=\@glsacronymlists\do{% + \SetDescriptionFootnoteAcronymDisplayStyle{\@gls@type}% + }% + \ifglsacrsmallcaps + \renewcommand*{\acronymfont}[1]{\textsc{##1}}% + \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}% + \else + \ifglsacrsmaller + \renewcommand*{\acronymfont}[1]{\textsmaller{##1}}% + \fi + \fi + \ifglsacrdua + \PackageError{glossaries}{Option clash: `footnote' and `dua' + can't both be set}{}% + \fi +}% +\newcommand*{\SetDescriptionDUAAcronymDisplayStyle}[1]{% + \defglsentryfmt[#1]{\glsgenentryfmt}% +} +\newcommand*{\DescriptionDUANewAcronymDef}{% + \edef\@do@newglossaryentry{% + \noexpand\newglossaryentry{\the\glslabeltok}% + {% + type=\acronymtype,% + name={\the\glslongtok},% + sort={\the\glslongtok}, + text={\the\glslongtok},% + first={\the\glslongtok},% + plural={\noexpand\expandonce\noexpand\@glo@longpl},% + firstplural={\noexpand\expandonce\noexpand\@glo@longpl},% + short={\the\glsshorttok},% + shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},% + long={\the\glslongtok},% + longplural={\the\glslongtok\noexpand\acrpluralsuffix},% + symbol={\the\glsshorttok},% + symbolplural={\noexpand\expandonce\noexpand\@glo@shortpl},% + \the\glskeylisttok + }% + }% + \let\@org@gls@assign@firstpl\gls@assign@firstpl + \let\@org@gls@assign@plural\gls@assign@plural + \let\@org@gls@assign@symbolplural\gls@assign@symbolplural + \def\gls@assign@firstpl##1##2{% + \@@gls@expand@field{##1}{firstpl}{##2}% + }% + \def\gls@assign@plural##1##2{% + \@@gls@expand@field{##1}{plural}{##2}% + }% + \def\gls@assign@symbolplural##1##2{% + \@@gls@expand@field{##1}{symbolplural}{##2}% + }% + \@do@newglossaryentry + \let\gls@assign@firstpl\@org@gls@assign@firstpl + \let\gls@assign@plural\@org@gls@assign@plural + \let\gls@assign@symbolplural\@org@gls@assign@symbolplural +} +\newcommand*{\SetDescriptionDUAAcronymStyle}{% + \ifglsacrsmallcaps + \PackageError{glossaries}{Option clash: `smallcaps' and `dua' + can't both be set}{}% + \else + \ifglsacrsmaller + \PackageError{glossaries}{Option clash: `smaller' and `dua' + can't both be set}{}% + \fi + \fi + \renewcommand{\newacronym}[4][]{% + \ifx\@glsacronymlists\@empty + \def\@glo@type{\acronymtype}% + \setkeys{glossentry}{##1}% + \DeclareAcronymList{\@glo@type}% + \SetDescriptionDUAAcronymDisplayStyle{\@glo@type}% + \fi + \glskeylisttok{##1}% + \glslabeltok{##2}% + \glsshorttok{##3}% + \glslongtok{##4}% + \newacronymhook + \DescriptionDUANewAcronymDef + }% + \@for\@gls@type:=\@glsacronymlists\do{% + \SetDescriptionDUAAcronymDisplayStyle{\@gls@type}% + }% +}% +\newcommand*{\SetDescriptionAcronymDisplayStyle}[1]{% + \defglsentryfmt[#1]{% + \ifdefempty\glscustomtext + {% + \ifglsused{\glslabel}% + {% + \let\gls@org@insert\glsinsert + \let\glsinsert\@empty + \acronymfont{\glsgenentryfmt}\gls@org@insert + }% + {% + \glsgenentryfmt + \ifglshassymbol{\glslabel}% + {% + \glsifplural + {% + \def\@glo@symbol{\glsentrysymbolplural{\glslabel}}% + }% + {% + \def\@glo@symbol{\glsentrysymbol{\glslabel}}% + }% + \space(\protect\firstacronymfont + {\glscapscase + {\@glo@symbol} + {\@glo@symbol} + {\mfirstucMakeUppercase{\@glo@symbol}}})% + }% + {}% + }% + }% + {\glscustomtext\glsinsert}% + }% +} +\newcommand*{\DescriptionNewAcronymDef}{% + \edef\@do@newglossaryentry{% + \noexpand\newglossaryentry{\the\glslabeltok}% + {% + type=\acronymtype,% + name={\noexpand + \acrnameformat{\the\glsshorttok}{\the\glslongtok}},% + sort={\the\glsshorttok},% + first={\the\glslongtok},% + firstplural={\noexpand\expandonce\noexpand\@glo@longpl},% + text={\the\glsshorttok},% + plural={\noexpand\expandonce\noexpand\@glo@shortpl},% + short={\the\glsshorttok},% + shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},% + long={\the\glslongtok},% + longplural={\the\glslongtok\noexpand\acrpluralsuffix},% + symbol={\noexpand\@glo@text},% + symbolplural={\noexpand\expandonce\noexpand\@glo@shortpl},% + \the\glskeylisttok}% + }% + \let\@org@gls@assign@firstpl\gls@assign@firstpl + \let\@org@gls@assign@plural\gls@assign@plural + \let\@org@gls@assign@symbolplural\gls@assign@symbolplural + \def\gls@assign@firstpl##1##2{% + \@@gls@expand@field{##1}{firstpl}{##2}% + }% + \def\gls@assign@plural##1##2{% + \@@gls@expand@field{##1}{plural}{##2}% + }% + \def\gls@assign@symbolplural##1##2{% + \@@gls@expand@field{##1}{symbolplural}{##2}% + }% + \@do@newglossaryentry + \let\gls@assign@firstpl\@org@gls@assign@firstpl + \let\gls@assign@plural\@org@gls@assign@plural + \let\gls@assign@symbolplural\@org@gls@assign@symbolplural +} +\newcommand*{\SetDescriptionAcronymStyle}{% + \renewcommand{\newacronym}[4][]{% + \ifx\@glsacronymlists\@empty + \def\@glo@type{\acronymtype}% + \setkeys{glossentry}{##1}% + \DeclareAcronymList{\@glo@type}% + \SetDescriptionAcronymDisplayStyle{\@glo@type}% + \fi + \glskeylisttok{##1}% + \glslabeltok{##2}% + \glsshorttok{##3}% + \glslongtok{##4}% + \newacronymhook + \DescriptionNewAcronymDef + }% + \@for\@gls@type:=\@glsacronymlists\do{% + \SetDescriptionAcronymDisplayStyle{\@gls@type}% + }% + \ifglsacrsmallcaps + \renewcommand{\acronymfont}[1]{\textsc{##1}} + \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}% + \else + \ifglsacrsmaller + \renewcommand*{\acronymfont}[1]{\textsmaller{##1}}% + \fi + \fi +}% +\newcommand*{\SetFootnoteAcronymDisplayStyle}[1]{% + \defglsentryfmt[#1]{% + \ifdefempty\glscustomtext + {% + \let\gls@org@insert\glsinsert + \let\glsinsert\@empty + \ifglsused{\glslabel}% + {% + \acronymfont{\glsgenentryfmt}\gls@org@insert + }% + {% + \firstacronymfont{\glsgenentryfmt}\gls@org@insert + \ifglshaslong{\glslabel}% + {% + \expandafter\protect\expandafter\acrfootnote\expandafter + {\@gls@link@opts}{\@gls@link@label}% + {% + \glsifplural + {\glsentrylongpl{\glslabel}}% + {\glsentrylong{\glslabel}}% + }% + }% + {}% + }% + }% + {\glscustomtext\glsinsert}% + }% +} +\newcommand*{\FootnoteNewAcronymDef}{% + \edef\@do@newglossaryentry{% + \noexpand\newglossaryentry{\the\glslabeltok}% + {% + type=\acronymtype,% + name={\noexpand\acronymfont{\the\glsshorttok}},% + sort={\the\glsshorttok},% + text={\the\glsshorttok},% + plural={\noexpand\expandonce\noexpand\@glo@shortpl},% + first={\the\glsshorttok},% + firstplural={\noexpand\expandonce\noexpand\@glo@shortpl},% + short={\the\glsshorttok},% + shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},% + long={\the\glslongtok},% + longplural={\the\glslongtok\noexpand\acrpluralsuffix},% + description={\the\glslongtok},% + descriptionplural={\noexpand\expandonce\noexpand\@glo@longpl},% + \the\glskeylisttok + }% + }% + \let\@org@gls@assign@plural\gls@assign@plural + \let\@org@gls@assign@firstpl\gls@assign@firstpl + \let\@org@gls@assign@descplural\gls@assign@descplural + \def\gls@assign@firstpl##1##2{% + \@@gls@expand@field{##1}{firstpl}{##2}% + }% + \def\gls@assign@plural##1##2{% + \@@gls@expand@field{##1}{plural}{##2}% + }% + \def\gls@assign@descplural##1##2{% + \@@gls@expand@field{##1}{descplural}{##2}% + }% + \@do@newglossaryentry + \let\gls@assign@plural\@org@gls@assign@plural + \let\gls@assign@firstpl\@org@gls@assign@firstpl + \let\gls@assign@descplural\@org@gls@assign@descplural +} +\newcommand*{\SetFootnoteAcronymStyle}{% + \renewcommand{\newacronym}[4][]{% + \ifx\@glsacronymlists\@empty + \def\@glo@type{\acronymtype}% + \setkeys{glossentry}{##1}% + \DeclareAcronymList{\@glo@type}% + \SetFootnoteAcronymDisplayStyle{\@glo@type}% + \fi + \glskeylisttok{##1}% + \glslabeltok{##2}% + \glsshorttok{##3}% + \glslongtok{##4}% + \newacronymhook + \FootnoteNewAcronymDef + }% + \@for\@gls@type:=\@glsacronymlists\do{% + \SetFootnoteAcronymDisplayStyle{\@gls@type}% + }% + \ifglsacrsmallcaps + \renewcommand*{\acronymfont}[1]{\textsc{##1}}% + \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}% + \else + \ifglsacrsmaller + \renewcommand*{\acronymfont}[1]{\textsmaller{##1}}% + \fi + \fi + \ifglsacrdua + \PackageError{glossaries}{Option clash: `footnote' and `dua' + can't both be set}{}% + \fi +}% +\DeclareRobustCommand*{\glsdoparenifnotempty}[2]{% + \protected@edef\gls@tmp{#1}% + \ifdefempty\gls@tmp + {}% + {% + \ifx\gls@tmp\@gls@default@value + \else + \space (#2{#1})% + \fi + }% +} +\newcommand*{\SetSmallAcronymDisplayStyle}[1]{% + \defglsentryfmt[#1]{% + \ifdefempty\glscustomtext + {% + \let\gls@org@insert\glsinsert + \let\glsinsert\@empty + \ifglsused{\glslabel}% + {% + \acronymfont{\glsgenentryfmt}\gls@org@insert + }% + {% + \glsgenentryfmt + \ifglshassymbol{\glslabel}% + {% + \glsifplural + {% + \def\@glo@symbol{\glsentrysymbolplural{\glslabel}}% + }% + {% + \def\@glo@symbol{\glsentrysymbol{\glslabel}}% + }% + \space + (\glscapscase + {\firstacronymfont{\@glo@symbol}}% + {\firstacronymfont{\@glo@symbol}}% + {\firstacronymfont{\mfirstucMakeUppercase{\@glo@symbol}}})% + }% + {}% + }% + }% + {\glscustomtext\glsinsert}% + }% +} +\newcommand*{\SmallNewAcronymDef}{% + \edef\@do@newglossaryentry{% + \noexpand\newglossaryentry{\the\glslabeltok}% + {% + type=\acronymtype,% + name={\noexpand\acronymfont{\the\glsshorttok}},% + sort={\the\glsshorttok},% + text={\the\glsshorttok},% + plural={\noexpand\expandonce\noexpand\@glo@shortpl},% + first={\the\glslongtok},% + firstplural={\noexpand\expandonce\noexpand\@glo@longpl},% + short={\the\glsshorttok},% + shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},% + long={\the\glslongtok},% + longplural={\the\glslongtok\noexpand\acrpluralsuffix},% + description={\noexpand\@glo@first},% + descriptionplural={\noexpand\expandonce\noexpand\@glo@longpl},% + symbol={\the\glsshorttok},% + symbolplural={\noexpand\expandonce\noexpand\@glo@shortpl},% + \the\glskeylisttok + }% + }% + \let\@org@gls@assign@firstpl\gls@assign@firstpl + \let\@org@gls@assign@plural\gls@assign@plural + \let\@org@gls@assign@descplural\gls@assign@descplural + \let\@org@gls@assign@symbolplural\gls@assign@symbolplural + \def\gls@assign@firstpl##1##2{% + \@@gls@expand@field{##1}{firstpl}{##2}% + }% + \def\gls@assign@plural##1##2{% + \@@gls@expand@field{##1}{plural}{##2}% + }% + \def\gls@assign@descplural##1##2{% + \@@gls@expand@field{##1}{descplural}{##2}% + }% + \def\gls@assign@symbolplural##1##2{% + \@@gls@expand@field{##1}{symbolplural}{##2}% + }% + \@do@newglossaryentry + \let\gls@assign@firstpl\@org@gls@assign@firstpl + \let\gls@assign@plural\@org@gls@assign@plural + \let\gls@assign@descplural\@org@gls@assign@descplural + \let\gls@assign@symbolplural\@org@gls@assign@symbolplural +} +\newcommand*{\SetSmallAcronymStyle}{% + \renewcommand{\newacronym}[4][]{% + \ifx\@glsacronymlists\@empty + \def\@glo@type{\acronymtype}% + \setkeys{glossentry}{##1}% + \DeclareAcronymList{\@glo@type}% + \SetSmallAcronymDisplayStyle{\@glo@type}% + \fi + \glskeylisttok{##1}% + \glslabeltok{##2}% + \glsshorttok{##3}% + \glslongtok{##4}% + \newacronymhook + \SmallNewAcronymDef + }% + \@for\@gls@type:=\@glsacronymlists\do{% + \SetSmallAcronymDisplayStyle{\@gls@type}% + }% + \ifglsacrsmallcaps + \renewcommand*{\acronymfont}[1]{\textsc{##1}} + \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}% + \else + \renewcommand*{\acronymfont}[1]{\textsmaller{##1}} + \fi + \ifglsacrdua + \ifglsacrsmallcaps + \PackageError{glossaries}{Option clash: `smallcaps' and `dua' + can't both be set}{}% + \else + \PackageError{glossaries}{Option clash: `smaller' and `dua' + can't both be set}{}% + \fi + \fi +}% +\newcommand*{\SetDUADisplayStyle}[1]{% + \defglsentryfmt[#1]{\glsgenentryfmt}% +} +\newcommand*{\DUANewAcronymDef}{% + \edef\@do@newglossaryentry{% + \noexpand\newglossaryentry{\the\glslabeltok}% + {% + type=\acronymtype,% + name={\the\glsshorttok},% + text={\the\glslongtok},% + first={\the\glslongtok},% + plural={\noexpand\expandonce\noexpand\@glo@longpl},% + firstplural={\noexpand\expandonce\noexpand\@glo@longpl},% + short={\the\glsshorttok},% + shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},% + long={\the\glslongtok},% + longplural={\the\glslongtok\noexpand\acrpluralsuffix},% + description={\the\glslongtok},% + descriptionplural={\noexpand\expandonce\noexpand\@glo@longpl},% + symbol={\the\glsshorttok},% + symbolplural={\noexpand\expandonce\noexpand\@glo@shortpl},% + \the\glskeylisttok + }% + }% + \let\@org@gls@assign@firstpl\gls@assign@firstpl + \let\@org@gls@assign@plural\gls@assign@plural + \let\@org@gls@assign@symbolplural\gls@assign@symbolplural + \let\@org@gls@assign@descplural\gls@assign@descplural + \def\gls@assign@firstpl##1##2{% + \@@gls@expand@field{##1}{firstpl}{##2}% + }% + \def\gls@assign@plural##1##2{% + \@@gls@expand@field{##1}{plural}{##2}% + }% + \def\gls@assign@symbolplural##1##2{% + \@@gls@expand@field{##1}{symbolplural}{##2}% + }% + \def\gls@assign@descplural##1##2{% + \@@gls@expand@field{##1}{descplural}{##2}% + }% + \@do@newglossaryentry + \let\gls@assign@firstpl\@org@gls@assign@firstpl + \let\gls@assign@plural\@org@gls@assign@plural + \let\gls@assign@symbolplural\@org@gls@assign@symbolplural + \let\gls@assign@descplural\@org@gls@assign@descplural +} +\newcommand*{\SetDUAStyle}{% + \renewcommand{\newacronym}[4][]{% + \ifx\@glsacronymlists\@empty + \def\@glo@type{\acronymtype}% + \setkeys{glossentry}{##1}% + \DeclareAcronymList{\@glo@type}% + \SetDUADisplayStyle{\@glo@type}% + \fi + \glskeylisttok{##1}% + \glslabeltok{##2}% + \glsshorttok{##3}% + \glslongtok{##4}% + \newacronymhook + \DUANewAcronymDef + }% + \@for\@gls@type:=\@glsacronymlists\do{% + \SetDUADisplayStyle{\@gls@type}% + }% +} +\newcommand*{\SetAcronymStyle}{% + \SetDefaultAcronymStyle + \ifglsacrdescription + \ifglsacrfootnote + \SetDescriptionFootnoteAcronymStyle + \else + \ifglsacrdua + \SetDescriptionDUAAcronymStyle + \else + \SetDescriptionAcronymStyle + \fi + \fi + \else + \ifglsacrfootnote + \SetFootnoteAcronymStyle + \else + \ifthenelse{\boolean{glsacrsmallcaps}\OR + \boolean{glsacrsmaller}}% + {% + \SetSmallAcronymStyle + }% + {% + \ifglsacrdua + \SetDUAStyle + \fi + }% + \fi + \fi +} +\SetAcronymStyle +\newcommand*{\SetCustomDisplayStyle}[1]{% + \defglsentryfmt[#1]{\glsgenentryfmt}% +} +\newcommand*{\CustomAcronymFields}{% + name={\the\glsshorttok},% + description={\the\glslongtok},% + first={\acrfullformat{\the\glslongtok}{\the\glsshorttok}},% + firstplural={\acrfullformat + {\noexpand\glsentrylongpl{\the\glslabeltok}}% + {\noexpand\glsentryshortpl{\the\glslabeltok}}},% + text={\the\glsshorttok},% + plural={\the\glsshorttok\noexpand\acrpluralsuffix}% +} +\newcommand*{\CustomNewAcronymDef}{% + \protected@edef\@do@newglossaryentry{% + \noexpand\newglossaryentry{\the\glslabeltok}% + {% + type=\acronymtype,% + short={\the\glsshorttok},% + shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},% + long={\the\glslongtok},% + longplural={\the\glslongtok\noexpand\acrpluralsuffix},% + user1={\the\glsshorttok},% + user2={\the\glsshorttok\noexpand\acrpluralsuffix},% + user3={\the\glslongtok},% + user4={\the\glslongtok\noexpand\acrpluralsuffix},% + \CustomAcronymFields,% + \the\glskeylisttok + }% + }% + \@do@newglossaryentry +} +\newcommand*{\SetCustomStyle}{% + \renewcommand{\newacronym}[4][]{% + \ifx\@glsacronymlists\@empty + \def\@glo@type{\acronymtype}% + \setkeys{glossentry}{##1}% + \DeclareAcronymList{\@glo@type}% + \SetCustomDisplayStyle{\@glo@type}% + \fi + \glskeylisttok{##1}% + \glslabeltok{##2}% + \glsshorttok{##3}% + \glslongtok{##4}% + \newacronymhook + \CustomNewAcronymDef + }% + \@for\@gls@type:=\@glsacronymlists\do{% + \SetCustomDisplayStyle{\@gls@type}% + }% +} +\RequirePackage{glossary-hypernav} +\@gls@loadlist +\@gls@loadlong +\@gls@loadsuper +\@gls@loadtree +\ifx\@glossary@default@style\relax +\else + \setglossarystyle{\@glossary@default@style} +\fi +\newcommand*{\showgloparent}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@parent\endcsname +} +\newcommand*{\showglolevel}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@level\endcsname +} +\newcommand*{\showglotext}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@text\endcsname +} +\newcommand*{\showgloplural}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@plural\endcsname +} +\newcommand*{\showglofirst}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@first\endcsname +} +\newcommand*{\showglofirstpl}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@firstpl\endcsname +} +\newcommand*{\showglotype}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@type\endcsname +} +\newcommand*{\showglocounter}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@counter\endcsname +} +\newcommand*{\showglouseri}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@useri\endcsname +} +\newcommand*{\showglouserii}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@userii\endcsname +} +\newcommand*{\showglouseriii}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@useriii\endcsname +} +\newcommand*{\showglouseriv}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@useriv\endcsname +} +\newcommand*{\showglouserv}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@userv\endcsname +} +\newcommand*{\showglouservi}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@uservi\endcsname +} +\newcommand*{\showgloname}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@name\endcsname +} +\newcommand*{\showglodesc}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@desc\endcsname +} +\newcommand*{\showglodescplural}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@descplural\endcsname +} +\newcommand*{\showglosort}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@sort\endcsname +} +\newcommand*{\showglosymbol}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@symbol\endcsname +} +\newcommand*{\showglosymbolplural}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@symbolplural\endcsname +} +\newcommand*{\showgloshort}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@short\endcsname +} +\newcommand*{\showglolong}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@long\endcsname +} +\newcommand*{\showgloindex}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@index\endcsname +} +\newcommand*{\showgloflag}[1]{% + \expandafter\show\csname ifglo@\glsdetoklabel{#1}@flag\endcsname +} +\newcommand*{\showgloloclist}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@loclist\endcsname +} +\newcommand*{\showglofield}[2]{% + \csshow{glo@\glsdetoklabel{#1}@#2}% +} +\newcommand*{\showacronymlists}{% + \show\@glsacronymlists +} +\newcommand*{\showglossaries}{% + \show\@glo@types +} +\newcommand*{\showglossaryin}[1]{% + \expandafter\show\csname @glotype@#1@in\endcsname +} +\newcommand*{\showglossaryout}[1]{% + \expandafter\show\csname @glotype@#1@out\endcsname +} +\newcommand*{\showglossarytitle}[1]{% + \expandafter\show\csname @glotype@#1@title\endcsname +} +\newcommand*{\showglossarycounter}[1]{% + \expandafter\show\csname @glotype@#1@counter\endcsname +} +\newcommand*{\showglossaryentries}[1]{% + \expandafter\show\csname glolist@#1\endcsname +} +\csname ifglscompatible-2.07\endcsname + \RequirePackage{glossaries-compatible-207} +\fi +% \end{macrocode} +%\iffalse +% \begin{macrocode} +% +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} %<*glossaries.perl> % \end{macrocode} %\fi -- cgit v1.2.3