summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/glossaries/glossaries.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/glossaries/glossaries.dtx
Initial commit
Diffstat (limited to 'macros/latex/contrib/glossaries/glossaries.dtx')
-rw-r--r--macros/latex/contrib/glossaries/glossaries.dtx39747
1 files changed, 39747 insertions, 0 deletions
diff --git a/macros/latex/contrib/glossaries/glossaries.dtx b/macros/latex/contrib/glossaries/glossaries.dtx
new file mode 100644
index 0000000000..6da667da8b
--- /dev/null
+++ b/macros/latex/contrib/glossaries/glossaries.dtx
@@ -0,0 +1,39747 @@
+%\iffalse
+% glossaries.dtx generated using makedtx version 1.2 (c) Nicola Talbot
+% Command line args:
+% -setambles ".*\.perl=>\nopreamble\nopostamble"
+% -setambles ".*\.tex=>\nopreamble\nopostamble"
+% -setambles ".*\.xdy=>\nopreamble\nopostamble"
+% -src "glossaries\.sty\Z=>glossaries.sty"
+% -src "glossaries-prefix.sty\Z=>glossaries-prefix.sty"
+% -src "(glossary-.+)\.(sty)\Z=>\1.\2"
+% -src "(glossaries-compatible-207)\.(sty)\Z=>\1.\2"
+% -src "(glossaries-compatible-307)\.(sty)\Z=>\1.\2"
+% -src "(glossaries-accsupp)\.(sty)\Z=>\1.\2"
+% -src "(glossaries-babel)\.(sty)\Z=>\1.\2"
+% -src "(glossaries-polyglossia)\.(sty)\Z=>\1.\2"
+% -src "(minimalgls\.tex)\Z=>\1"
+% -src "(glossary-lipsum-examples\.tex)\Z=>\1"
+% -src "(example-glossaries-.*\.tex)\Z=>\1"
+% -src "(sample.*\.tex)\Z=>\1"
+% -src "(mwe.*\.tex)\Z=>\1"
+% -src "(samplexdy-mc.*\.xdy)\Z=>\1"
+% -src "(database.*\.tex)\Z=>\1"
+% -src "(.*\.perl)\Z=>\1"
+% -codetitle "Main Package Code"
+% -author "Nicola Talbot"
+% -macrocode ".*\.perl"
+% -macrocode ".*\.tex"
+% -macrocode ".*\.xdy"
+% -section "chapter"
+% -doc "glossaries-manual.tex"
+% -comment ".*\.perl"
+% -comment ".*\.tex"
+% -comment ".*\.xdy"
+% glossaries
+% Created on 2019/1/6 19:06
+%\fi
+%\iffalse
+%<*package>
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%</package>
+%\fi
+% \iffalse
+% Doc-Source file to use with LaTeX2e
+% Copyright (C) 2019 Nicola Talbot, all rights reserved.
+% \fi
+% \iffalse
+%<*driver>
+\documentclass[report]{nlctdoc}
+
+\DeleteShortVerb{|}
+
+\iffalse
+glossaries-manual.tex is a stub file used by makedtx to create
+glossaries.dtx
+\fi
+
+\usepackage{alltt}
+\usepackage{pifont}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[colorlinks,
+ bookmarks,
+ hyperindex=false,
+ pdfauthor={Nicola L.C. Talbot},
+ pdftitle={glossaries.sty: LaTeX2e Package to Assist Generating Glossaries},
+ pdfkeywords={LaTeX,package,glossary,acronyms}]{hyperref}
+\usepackage[toc]{glossaries}
+
+\RecordChanges
+\setlength\IndexMin{100pt}
+
+\makeglossaries
+
+\renewcommand*{\main}[1]{\underline{\hyperpage{#1}}}
+\renewcommand*{\usage}[1]{\textit{\hyperpage{#1}}}
+\newcommand*{\htextbf}[1]{\textbf{\hyperpage{#1}}}
+\newcommand*{\itermdef}[1]{\index{#1|htextbf}}
+
+\newglossaryentry{xindy}{
+ name={\appfmt{xindy}\index{xindy|htextbf}},
+ sort={xindy},
+ text={\protect\app{xindy}},
+ description={An flexible indexing application with multilingual
+ support written in Perl}
+}
+
+\newglossaryentry{makeindex}{%
+ name={\appfmt{makeindex}\index{makeindex|htextbf}},%
+ sort={makeindex},%
+ text={\protect\app{makeindex}},%
+ description={An indexing application},
+}
+
+\let\glsd\glsuseri
+\let\glsation\glsuserii
+
+\newglossaryentry{firstuse}{%
+ name={First use\ifirstuse},
+ sort={first use},%
+ text={first use},%
+ user1={first used},
+ description={The first time a glossary entry is used (from the start
+ of the document or after a reset) with one of the
+ following commands: \ics{gls}, \ics{Gls}, \ics{GLS}, \ics{glspl},
+ \ics{Glspl}, \ics{GLSpl} or \ics{glsdisp}.
+ \glsseeformat{firstuseflag,firstusetext}{}\nopostdesc}%
+}
+
+\newglossaryentry{firstuseflag}{%
+name={First use flag\ifirstuseflag},
+sort={first use flag},%
+text={first use flag},%
+description={A conditional that determines whether or not the entry
+has been used according to the rules of \gls{firstuse}}%
+}
+
+\newglossaryentry{firstusetext}{%
+name={First use text\ifirstusetext},
+sort={first use text},%
+text={first use text},%
+description={The text that is displayed on \gls{firstuse}, which is
+governed by the \gloskey{first} and \gloskey{firstplural} keys of
+\ics{newglossaryentry}. (May be overridden by
+\ics{glsdisp}.)\nopostdesc}%
+}
+
+\doxitem{Option}{option}{package options}
+\doxitem{GlsKey}{key}{glossary keys}
+\doxitem{Style}{style}{glossary styles}
+\doxitem{Counter}{counter}{glossary counters}
+\doxitem{AcrStyle}{acrstyle}{acronym styles}
+
+\setcounter{IndexColumns}{2}
+
+\CheckSum{19625}
+
+\newcommand*{\ifirstuse}{\iterm{first use}}
+\newcommand*{\firstuse}{\gls{firstuse}}
+\newcommand*{\firstuseflag}{\gls{firstuseflag}}
+\newcommand*{\firstusetext}{\gls{firstusetext}}
+
+\newcommand*{\ifirstuseflag}{\iterm{first use>flag}}
+\newcommand*{\ifirstusetext}{\iterm{first use>text}}
+
+\newcommand*{\istkey}[1]{\appfmt{#1}\index{makeindex=\appfmt{makeindex}>#1=\texttt{#1}|hyperpage}}
+\newcommand*{\locfmt}[1]{\texttt{#1}\SpecialMainIndex{#1}}
+\newcommand*{\mkidxspch}{\index{makeindex=\appfmt{makeindex}>special characters|hyperpage}}
+
+\newcommand*{\igloskey}[2][newglossaryentry]{\icsopt{#1}{#2}}
+\newcommand*{\gloskey}[2][newglossaryentry]{\csopt{#1}{#2}}
+
+\newcommand*{\glostyle}[1]{\textsf{#1}\index{glossary styles:>#1={\protect\ttfamily#1}|main}}
+
+
+\begin{document}
+\DocInput{glossaries.dtx}
+\end{document}
+%</driver>
+%\fi
+%\MakeShortVerb{"}
+%
+% \title{Documented Code For glossaries v4.42}
+% \author{Nicola L.C. Talbot\\[10pt]
+%Dickimaw Books\\
+%\url{http://www.dickimaw-books.com/}}
+%
+% \date{2019-01-06}
+% \maketitle
+%
+%This is the documented code for the \styfmt{glossaries} package.
+%This bundle comes with the following documentation:
+%\begin{description}
+%\item[\url{glossariesbegin.pdf}]
+%If you are a complete beginner, start with \qt{The glossaries
+%package: a guide for beginners}.
+%
+%\item[\url{glossary2glossaries.pdf}]
+%If you are moving over from the obsolete \sty{glossary} package,
+%read \qt{Upgrading from the glossary package to the
+%glossaries package}.
+%
+%\item[\url{glossaries-user.pdf}]
+%For the main user guide, read \qt{glossaries.sty v4.42:
+%\LaTeX2e\ Package to Assist Generating Glossaries}.
+%
+%\item[\url{mfirstuc-manual.pdf}]
+%The commands provided by the \sty{mfirstuc} package are briefly
+%described in \qt{mfirstuc.sty: uppercasing first letter}.
+%
+%\item[glossaries-code.pdf]
+%This document is for advanced users wishing to know more about the
+%inner workings of the \styfmt{glossaries} package.
+%
+%\item[INSTALL] Installation instructions.
+%
+%\item[CHANGES] Change log.
+%
+%\item[README] Package summary.
+%
+%\end{description}
+%
+%The user level commands described in the user manual
+%(glossaries-user.pdf) may be considered ``future-proof''. Even if
+%they become deprecated, they should still work for
+%old documents (although they may not work in a document that also
+%contains new commands introduced since the old commands were
+%deprecated, and you may need to specify a compatibility mode).
+%
+%The internal commands in \emph{this} document that aren't documented in the
+%\emph{user manual} should not be considered future-proof and are liable to
+%change. If you want a new user level command, you can post a feature
+%request at \url{http://www.dickimaw-books.com/feature-request.html}.
+%If you are a package writer wanting to integrate your package with
+%\styfmt{glossaries}, it's better to request a new user level command
+%than to hack these internals.
+%
+%\tableofcontents
+%
+%\StopEventually{%
+% \printglossaries
+% \PrintChanges
+% \PrintIndex
+%}
+%
+%
+%
+%\chapter{Main Package Code}
+%\iffalse
+% \begin{macrocode}
+%<*glossaries.sty>
+% \end{macrocode}
+%\fi
+%\label{sec:code}
+% \section{Package Definition}
+% This package requires \LaTeXe.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{glossaries}[2019/01/06 v4.42 (NLCT)]
+% \end{macrocode}
+%\changes{4.18}{2015-09-09}{split mfirstuc into separate bundle}
+% Required packages:
+% \begin{macrocode}
+\RequirePackage{ifthen}
+\RequirePackage{xkeyval}[2006/11/18]
+\RequirePackage{mfirstuc}
+% \end{macrocode}
+%\changes{3.11a}{2013-10-15}{Now requires textcase}
+% The \sty{textcase} package has much better case changing handling,
+% so use \cs{MakeTextUppercase} instead of \cs{MakeUppercase}
+% \begin{macrocode}
+\RequirePackage{textcase}
+\renewcommand*{\mfirstucMakeUppercase}{\MakeTextUppercase}%
+% \end{macrocode}
+% \begin{macrocode}
+\RequirePackage{xfor}
+% \end{macrocode}
+%\changes{3.04}{2012-11-18}{added datatool-base as a required
+%package}
+% \begin{macrocode}
+\RequirePackage{datatool-base}
+% \end{macrocode}
+%\changes{1.1}{2008-02-22}{amsgen now loaded (\cs{new@ifnextchar} needed)}
+% Need to use \cs{new@ifnextchar} instead of \cs{@ifnextchar} in
+% commands that have a final optional argument (such as \ics{gls})
+% so require \isty{amsgen}.
+% Thanks to Morten~H\o gholm for suggesting this. (This has
+% replaced using the \sty{xspace} package.)
+% \begin{macrocode}
+\RequirePackage{amsgen}
+% \end{macrocode}
+%\changes{3.0}{2011-04-02}{etoolbox now loaded}
+% As from v3.0, now loading \sty{etoolbox}:
+% \begin{macrocode}
+\RequirePackage{etoolbox}
+% \end{macrocode}
+%\changes{3.04}{2012-11-18}{Added check for doc package}
+% Check if \sty{doc} has been loaded.
+%\begin{macro}{\if@gls@docloaded}
+% \begin{macrocode}
+\newif\if@gls@docloaded
+% \end{macrocode}
+%\end{macro}
+% \begin{macrocode}
+\@ifpackageloaded{doc}%
+{%
+ \@gls@docloadedtrue
+}%
+{%
+ \@ifclassloaded{nlctdoc}{\@gls@docloadedtrue}{\@gls@docloadedfalse}%
+}
+\if@gls@docloaded
+% \end{macrocode}
+% \cs{doc} has been loaded, so some modifications need to be made to
+% ensure both packages can work together. The amount of conflict has
+% been reduced as from v4.11 and no longer involves patching
+% internal commands.
+%
+%\cs{PrintChanges} needs to use \sty{doc}'s version of
+%\env{theglossary}, so save that.
+%\begin{macro}{\glsorg@theglossary}
+%\changes{3.04}{2012-11-18}{new}
+% \begin{macrocode}
+ \let\glsorg@theglossary\theglossary
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsorg@endtheglossary}
+%\changes{3.04}{2012-11-18}{new}
+% \begin{macrocode}
+ \let\glsorg@endtheglossary\endtheglossary
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\PrintChanges}
+% Now redefine \cs{PrintChanges} so that it uses the original
+% \env{theglossary} environment.
+%\changes{3.04}{2012-11-18}{new}
+% \begin{macrocode}
+ \let\glsorg@PrintChanges\PrintChanges
+ \renewcommand{\PrintChanges}{%
+ \begingroup
+ \let\theglossary\glsorg@theglossary
+ \let\endtheglossary\glsorg@endtheglossary
+ \glsorg@PrintChanges
+ \endgroup
+ }
+% \end{macrocode}
+%\end{macro}
+% End of doc stuff.
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+% \section{Package Options}\label{sec:pkgopt}
+%\begin{option}{debug}
+%\changes{4.24}{2016-05-27}{new}
+% Switch on debug mode. This will also cancel the \pkgopt{nowarn}
+% option. This is now a choice key.
+%\changes{4.41}{2018-07-23}{changed \cs{val} and \cs{nr} to
+%\cs{gls@debug@val} and \cs{gls@debug@nr}}
+% \begin{macrocode}
+\newif\if@gls@debug
+\define@choicekey{glossaries.sty}{debug}[\gls@debug@val\gls@debug@nr]%
+ {true,false,showtargets}[true]{%
+ \ifcase\gls@debug@nr\relax
+ \@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
+ \@gls@debugfalse
+ \let\@glsshowtarget\@gobble
+ \PackageInfo{glossaries}{debug mode OFF}%
+ \or
+ \@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}%
+ \fi
+}
+% \end{macrocode}
+%\end{option}
+%\begin{macro}{\glsshowtarget}
+%\changes{4.32}{2017-08-24}{new}
+%\changes{4.34}{2017-11-03}{modified to check for math mode and inner}
+%If \pkgopt[showtargets]{debug}, show the hyperlink target name in the
+%margin.
+% \begin{macrocode}
+\newcommand*{\glsshowtarget}[1]{%
+ \ifmmode
+ \nfss@text{\ttfamily\small [#1]}%
+ \else
+ \ifinner
+ \texttt{\small [#1]}%
+ \else
+ \marginpar{\texttt{\small #1}}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@glsshowtarget}
+%\changes{4.32}{2017-08-24}{new}
+%\pkgopt[showtargets]{debug} will redefine this.
+% \begin{macrocode}
+\newcommand*{\@glsshowtarget}[1]{}
+% \end{macrocode}
+%\end{macro}
+%
+%Determine what to do if the \gloskey{see} key is used before
+%\cs{makeglossaries}. The default is to produce an error.
+%\begin{macro}{\@gls@see@noindex}
+%\changes{4.24}{2016-05-27}{new}
+% \begin{macrocode}
+\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}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{option}{seenoindex}
+%\changes{4.24}{2016-05-27}{new}
+%\changes{4.41}{2018-07-23}{changed \cs{val} and \cs{nr} to
+%\cs{gls@seenoindex@val} and \cs{gls@seenoindex@nr}}
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{option}{toc}
+% The \pkgopt{toc} package option will add the glossaries
+% to the table of contents. This is a boolean key, if the
+% value is omitted it is taken to be true.
+% \begin{macrocode}
+\define@boolkey{glossaries.sty}[gls]{toc}[true]{}
+% \end{macrocode}
+%\end{option}
+%\begin{option}{numberline}
+%\changes{1.1}{2008-02-22}{numberline option added}
+% The \pkgopt{numberline} package option adds \cs{numberline} to
+% \cs{addcontentsline}. Note that this option only has an effect
+% if used in with \pkgopt[true]{toc}.
+% \begin{macrocode}
+\define@boolkey{glossaries.sty}[gls]{numberline}[true]{}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{macro}{\@@glossarysec}
+% The sectional unit used to start the glossary is stored in
+% \cs{@@glossarysec}. If chapters are defined, this
+% is initialised to \texttt{chapter}, otherwise it is
+% initialised to \texttt{section}.
+%\changes{3.0}{2011-04-02}{replaced \cs{@ifundefined} with
+%\cs{ifcsundef}}
+% \begin{macrocode}
+\ifcsundef{chapter}%
+ {\newcommand*{\@@glossarysec}{section}}%
+ {\newcommand*{\@@glossarysec}{chapter}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{option}{section}
+% The \pkgopt{section} key can be used to set the sectional unit.
+% If no unit is specified, use \texttt{section} as the default.
+% The starred form of the named sectional unit will be used.
+% If you want some other way to start the glossary section (e.g.\
+% a numbered section) you will have to redefined
+% \ics{glossarysection}.
+% \begin{macrocode}
+\define@choicekey{glossaries.sty}{section}{part,chapter,section,%
+subsection,subsubsection,paragraph,subparagraph}[section]{%
+ \renewcommand*{\@@glossarysec}{#1}}
+% \end{macrocode}
+%\end{option}
+%
+% Determine whether or not to use numbered sections.
+%\begin{macro}{\@@glossarysecstar}
+% \begin{macrocode}
+\newcommand*{\@@glossarysecstar}{*}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@@glossaryseclabel}
+% \begin{macrocode}
+\newcommand*{\@@glossaryseclabel}{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsautoprefix}
+% Prefix to add before label if automatically generated:
+%\changes{1.14}{2008-06-17}{new}
+% \begin{macrocode}
+\newcommand*{\glsautoprefix}{}
+% \end{macrocode}
+%\end{macro}
+%\begin{option}{numberedsection}
+%\changes{1.1}{2008-02-22}{numberedsection package option added}
+%\changes{4.02}{2013-12-05}{added nameref option}
+%\changes{4.41}{2018-07-23}{changed \cs{val} and \cs{nr} to
+%\cs{gls@numberedsection@val} and \cs{gls@numberedsection@nr}}
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{option}
+%
+% The default glossary style is stored in
+% \cs{@glossary@default@style}. This is initialised to
+% \texttt{list}. (The \glostyle{list} style is
+% defined in the accompanying \isty{glossary-list} package
+% described in \autoref{sec:code:styles}.) Note that the
+% \glostyle{list} style is incompatible with \sty{classicthesis}
+% so change the default to \glostyle{index} if that package has been
+% loaded.
+%\begin{macro}{\@glossary@default@style}
+%\changes{4.26}{2016-10-12}{added check for classicthesis}
+% \begin{macrocode}
+\@ifpackageloaded{classicthesis}
+{\newcommand*{\@glossary@default@style}{index}}
+{\newcommand*{\@glossary@default@style}{list}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{option}{style}
+% The default glossary style can be changed using the \pkgopt{style}
+% package option. The value can be the name of any
+% defined glossary style. The glossary style is set at the beginning
+% of the document, so you can still use the \pkgopt{style} key to
+% set a style that is defined in another package. This package comes
+% with some predefined styles that are defined in
+% \autoref{sec:code:styles}.
+%\changes{4.31}{2017-09-10}{changed \cs{renewcommand} to \cs{def}}
+%This now uses \cs{def} instead of \cs{renewcommand} as
+% \cs{@glossary@default@style} may have been set to \cs{relax}.
+% \begin{macrocode}
+\define@key{glossaries.sty}{style}{%
+ \def\@glossary@default@style{#1}%
+}
+% \end{macrocode}
+%\end{option}
+%
+% Each \cs{DeclareOptionX} needs a corresponding \cs{DeclareOption}
+% so that it can be passed as a document class option, so define a
+% command that will implement both.
+%\changes{4.01}{2013-11-16}{fixed non-value options so that they can be passed to
+%document class}
+%\begin{macro}{\@gls@declareoption}
+% \begin{macrocode}
+\newcommand*{\@gls@declareoption}[2]{%
+ \DeclareOptionX{#1}{#2}%
+ \DeclareOption{#1}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Each entry within a given glossary will have an associated
+% number list. By default, this refers to the page numbers on
+% which that entry has been used, but it can also refer to any counter
+% used in the document (such as the section or equation counters).
+% The default number list format displays the number list ``as is'':
+%\begin{macro}{\glossaryentrynumbers}
+% \begin{macrocode}
+\newcommand*{\glossaryentrynumbers}[1]{#1\gls@save@numberlist{#1}}
+% \end{macrocode}
+%\end{macro}
+%\begin{option}{nonumberlist}
+% Note that the entire number list for a given entry will be
+% passed to \cs{glossaryentrynumbers} so any font changes
+% will also be applied to the delimiters.
+% The \pkgopt{nonumberlist} package option suppresses the
+% number lists (this simply redefines
+% \cs{glossaryentrynumbers} to ignores its argument).
+% \begin{macrocode}
+\@gls@declareoption{nonumberlist}{%
+ \renewcommand*{\glossaryentrynumbers}[1]{\gls@save@numberlist{#1}}%
+}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{option}{savenumberlist}
+%\changes{3.02}{2012-05-21}{new}
+% Provide means to store the number list for entries.
+% \begin{macrocode}
+\define@boolkey{glossaries.sty}[gls]{savenumberlist}[true]{}
+\glssavenumberlistfalse
+% \end{macrocode}
+%\end{option}
+%
+%\begin{macro}{\@glo@seeautonumberlist}
+% \begin{macrocode}
+\newcommand*\@glo@seeautonumberlist{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{option}{seeautonumberlist}
+% Automatically activates number list for entries containing the
+% \gloskey{see} key.
+%\changes{3.0}{2011-04-02}{new}
+% \begin{macrocode}
+\@gls@declareoption{seeautonumberlist}{%
+ \renewcommand*{\@glo@seeautonumberlist}{%
+ \def\@glo@prefix{\glsnextpages}%
+ }%
+}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{option}{esclocations}
+% When using \gls{makeindex} or \gls{xindy}, the locations may need
+% to be adjusted to ensure they're in a format that's allowed by the
+% indexing application. This involves a bit of hackery and isn't
+% needed if the locations are all guaranteed to be in the correct
+% form (or if the user is prepared to post-process the glossary file before
+% calling the relevant indexing application) so \pkgopt[false]{esclocations}
+% will switch off this mechanism allowing for a faster and more
+% stable approach.
+%\changes{4.33}{2017-09-20}{new}
+% \begin{macrocode}
+\define@boolkey{glossaries.sty}[gls]{esclocations}[true]{}
+\glsesclocationstrue
+% \end{macrocode}
+%\end{option}
+%
+%\begin{macro}{\@gls@loadlong}
+%\changes{1.18}{2009-01-14}{new}
+% \begin{macrocode}
+\newcommand*{\@gls@loadlong}{\RequirePackage{glossary-long}}
+% \end{macrocode}
+%\end{macro}
+%\begin{option}{nolong}
+%\changes{1.18}{2009-01-14}{new}
+% This option prevents \isty{glossary-long} from being loaded.
+% This means that the glossary styles that use the
+% \env{longtable} environment will not be available. This option
+% is provided to reduce overhead caused by loading unrequired
+% packages.
+% \begin{macrocode}
+\@gls@declareoption{nolong}{\renewcommand*{\@gls@loadlong}{}}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{macro}{\@gls@loadsuper}
+%\changes{1.18}{2009-01-14}{new}
+% The \isty{glossary-super} package isn't loaded if
+% \isty{supertabular} isn't installed.
+% \begin{macrocode}
+\IfFileExists{supertabular.sty}{%
+ \newcommand*{\@gls@loadsuper}{\RequirePackage{glossary-super}}}{%
+ \newcommand*{\@gls@loadsuper}{}}
+% \end{macrocode}
+%\end{macro}
+%\begin{option}{nosuper}
+%\changes{1.18}{2009-01-14}{new}
+% This option prevents \isty{glossary-super} from being loaded.
+% This means that the glossary styles that use the
+% \env{supertabular} environment will not be available. This option
+% is provided to reduce overhead caused by loading unrequired
+% packages.
+% \begin{macrocode}
+\@gls@declareoption{nosuper}{\renewcommand*{\@gls@loadsuper}{}}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{macro}{\@gls@loadlist}
+%\changes{1.18}{2009-01-14}{new}
+% \begin{macrocode}
+\newcommand*{\@gls@loadlist}{\RequirePackage{glossary-list}}
+% \end{macrocode}
+%\end{macro}
+%\begin{option}{nolist}
+%\changes{1.18}{2009-01-14}{new}
+% This option prevents \isty{glossary-list} from being loaded
+% (to reduce overheads if required). Naturally, the styles defined
+% in \isty{glossary-list} will not be available if this option
+% is used. If the style is still set to \glostyle{list}, the default
+% must be set to \cs{relax}.
+%\changes{4.31}{2017-08-10}{added check for \qt{list} style}
+% \begin{macrocode}
+\@gls@declareoption{nolist}{%
+ \renewcommand*{\@gls@loadlist}{%
+ \ifdefstring{\@glossary@default@style}{list}%
+ {\let\@glossary@default@style\relax}%
+ {}%
+ }%
+}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{macro}{\@gls@loadtree}
+%\changes{1.18}{2009-01-14}{new}
+% \begin{macrocode}
+\newcommand*{\@gls@loadtree}{\RequirePackage{glossary-tree}}
+% \end{macrocode}
+%\end{macro}
+%\begin{option}{notree}
+%\changes{1.18}{2009-01-14}{new}
+% This option prevents \isty{glossary-tree} from being loaded
+% (to reduce overheads if required). Naturally, the styles defined
+% in \isty{glossary-tree} will not be available if this option
+% is used.
+% \begin{macrocode}
+\@gls@declareoption{notree}{\renewcommand*{\@gls@loadtree}{}}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{option}{nostyles}
+%\changes{1.18}{2009-01-14}{new}
+% Provide an option to suppress all the predefined styles (in the
+% event that the user has custom styles that are not dependent
+% on the predefined styles).
+% \begin{macrocode}
+\@gls@declareoption{nostyles}{%
+ \renewcommand*{\@gls@loadlong}{}%
+ \renewcommand*{\@gls@loadsuper}{}%
+ \renewcommand*{\@gls@loadlist}{}%
+ \renewcommand*{\@gls@loadtree}{}%
+ \let\@glossary@default@style\relax
+}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{macro}{\glspostdescription}
+% The description terminator is given by \cs{glspostdescription}
+% (except for the 3 and 4 column styles). This is a full stop
+% by default.
+%\changes{3.07}{2013-07-05}{Added spacefactor code}
+% The spacefactor is adjusted in case the description ends with an
+% upper case letter. (Patch provided by Michael Pock.)
+% \begin{macrocode}
+\newcommand*{\glspostdescription}{%
+ \ifglsnopostdot\else.\spacefactor\sfcode`\. \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{option}{nopostdot}
+% Boolean option to suppress post description dot
+%\changes{3.03}{2012/09/21}{new}
+% \begin{macrocode}
+\define@boolkey{glossaries.sty}[gls]{nopostdot}[true]{}
+\glsnopostdotfalse
+% \end{macrocode}
+%\end{option}
+%\begin{option}{nogroupskip}
+% Boolean option to suppress vertical space between groups in the
+% pre-defined styles.
+%\changes{3.03}{2012/09/21}{new}
+% \begin{macrocode}
+\define@boolkey{glossaries.sty}[gls]{nogroupskip}[true]{}
+\glsnogroupskipfalse
+% \end{macrocode}
+%\end{option}
+%
+%\begin{option}{ucmark}
+% Boolean option to determine whether or not to use
+% use upper case in definition of \ics{glsglossarymark}
+%\changes{3.02}{2012-05-21}{new}
+% \begin{macrocode}
+\define@boolkey{glossaries.sty}[gls]{ucmark}[true]{}
+% \end{macrocode}
+%\changes{3.13a}{2013-11-05}{added check for memoir}
+% \begin{macrocode}
+\@ifclassloaded{memoir}
+{%
+ \glsucmarktrue
+}%
+{%
+ \glsucmarkfalse
+}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{counter}{glossaryentry}
+%\changes{3.0}{2011-04-02}{new}
+% If the \pkgopt{entrycounter} package option has been used, define
+% a counter to number each level~0 entry.
+% This is now defined by an internal command for consistency.
+%\end{counter}
+%
+%\begin{macro}{\@gls@define@glossaryentrycounter}
+%\changes{4.38}{2018-05-10}{new}
+% \begin{macrocode}
+\newcommand*{\@gls@define@glossaryentrycounter}{%
+ \ifglsentrycounter
+% \end{macrocode}
+%\changes{4.38}{2018-05-10}{added check for existence of glossaryentry counter}
+%Define the \ctr{glossaryentry} counter if it doesn't already exist.
+% \begin{macrocode}
+ \ifundef\c@glossaryentry
+ {%
+ \ifx\@gls@counterwithin\@empty
+ \newcounter{glossaryentry}%
+ \else
+ \newcounter{glossaryentry}[\@gls@counterwithin]%
+ \fi
+ \def\theHglossaryentry{\currentglossary.\theglossaryentry}%
+ }%
+ {}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{option}{entrycounter}
+% Defines a counter that can be used in the standard glossary styles
+% to number each (main) entry. If true, this will define a counter called
+% \ctr{glossaryentry}.
+%\changes{3.0}{2011-04-02}{new}
+% \begin{macrocode}
+\define@boolkey{glossaries.sty}[gls]{entrycounter}[true]{}
+\glsentrycounterfalse
+% \end{macrocode}
+%\end{option}
+%
+%\begin{option}{counterwithin}
+% This option can be used to set a parent counter for
+% \ctr{glossaryentry}. This option automatically sets
+% \pkgopt[true]{entrycounter}.
+%\changes{3.0}{2011-04-02}{new}
+% \begin{macrocode}
+\define@key{glossaries.sty}{counterwithin}{%
+ \renewcommand*{\@gls@counterwithin}{#1}%
+ \glsentrycountertrue
+ \@gls@define@glossaryentrycounter
+}
+% \end{macrocode}
+%\end{option}
+%\begin{macro}{\@gls@counterwithin}
+%\changes{3.0}{2011-04-02}{new}
+% The default value is no parent counter:
+% \begin{macrocode}
+\newcommand*{\@gls@counterwithin}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{counter}{glossarysubentry}
+%\changes{3.0}{2011-04-02}{new}
+% If the \pkgopt{subentrycounter} package option has been used, define
+% a counter to number each level~1 entry. This is now defined by an
+% internal command for consistency.
+%\end{counter}
+%\begin{macro}{\@gls@define@glossarysubentrycounter}
+%\changes{4.38}{2018-05-10}{new}
+% \begin{macrocode}
+\newcommand{\@gls@define@glossarysubentrycounter}{%
+% \end{macrocode}
+%Check if counter already defined.
+% \begin{macrocode}
+ \ifundef\c@glossarysubentry
+ {%
+ \ifglssubentrycounter
+ \ifglsentrycounter
+ \newcounter{glossarysubentry}[glossaryentry]%
+ \else
+ \newcounter{glossarysubentry}%
+ \fi
+% \end{macrocode}
+%\changes{4.38}{2018-05-10}{prepended \cs{currentglossary}\texttt{.} to
+%\cs{theHglossarysubentry} and removed spurious eol space}
+%As with \cs{theHglossaryentry}, this starts with
+%\cs{currentglossary}\texttt{.} to help avoid duplicate hyper targets.
+% \begin{macrocode}
+ \def\theHglossarysubentry{\currentglossary.\currentglssubentry.\theglossarysubentry}%
+ \fi
+ }%
+ {}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{option}{subentrycounter}
+% Define a counter that can be used in the standard glossary styles
+% to number each level~1 entry. If true, this will define a counter called
+% \ctr{glossarysubentry}.
+%\changes{3.0}{2011-04-02}{new}
+% \begin{macrocode}
+\define@boolkey{glossaries.sty}[gls]{subentrycounter}[true]{}
+\glssubentrycounterfalse
+% \end{macrocode}
+%\end{option}
+%
+%\begin{macro}{\@glo@default@sorttype}
+% Initialise default sort for \cs{printnoidxglossary}
+% \begin{macrocode}
+\newcommand*{\@glo@default@sorttype}{standard}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{option}{sort}
+%\changes{3.0}{2011-04-02}{new}
+% Define the sort method: \pkgopt[standard]{sort} (default),
+% \pkgopt[def]{sort} (order of definition) or
+% \pkgopt[use]{sort} (order of use). If no indexing required, use
+% \pkgopt[none]{sort}.
+% \begin{macrocode}
+\define@choicekey{glossaries.sty}{sort}{standard,def,use,none}{%
+ \renewcommand*{\@glo@default@sorttype}{#1}%
+ \csname @gls@setupsort@#1\endcsname
+}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{macro}{\glsprestandardsort}
+%\changes{3.13a}{2013-11-05}{new}
+%\begin{definition}
+%\cs{glsprestandardsort}\marg{sort cs}\marg{type}\marg{label}
+%\end{definition}
+% Allow user to hook into sort mechanism. The first argument
+% \meta{sort cs} is the temporary control sequence containing the
+% sort value before it has been sanitized and had
+% \gls{makeindex}\slash\gls{xindy} special characters escaped.
+% \begin{macrocode}
+\newcommand*{\glsprestandardsort}[3]{%
+ \glsdosanitizesort
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glo@check@sortallowed}
+%\changes{4.30}{2017-06-11}{new}
+% \begin{macrocode}
+\newcommand*{\@glo@check@sortallowed}[1]{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@setupsort@standard}
+%\changes{3.0}{2011-04-02}{new}
+% Set up the macros for default sorting.
+% \begin{macrocode}
+\newcommand*{\@gls@setupsort@standard}{%
+% \end{macrocode}
+% Store entry information when it's defined.
+% \begin{macrocode}
+ \def\do@glo@storeentry{\@glo@storeentry}%
+% \end{macrocode}
+% No count register required for standard sort.
+% \begin{macrocode}
+ \def\@gls@defsortcount##1{}%
+% \end{macrocode}
+% Sort according to sort key (\cs{@glo@sort}) if provided otherwise
+% sort according to the entry's name (\cs{@glo@name}).
+% (First argument glossary type, second argument entry label.)
+% \begin{macrocode}
+ \def\@gls@defsort##1##2{%
+ \ifx\@glo@sort\@glsdefaultsort
+ \let\@glo@sort\@glo@name
+ \fi
+% \end{macrocode}
+%\changes{3.03}{2012/09/21}{used \cs{@gls@sanitizesort}}
+%\changes{3.13a}{2013-11-05}{moved \cs{@gls@santizesort} to
+%\cs{glsprestandardsort}}
+% \begin{macrocode}
+ \let\glsdosanitizesort\@gls@sanitizesort
+ \glsprestandardsort{\@glo@sort}{##1}{##2}%
+ \expandafter\protected@xdef\csname glo@##2@sort\endcsname{\@glo@sort}%
+ }%
+% \end{macrocode}
+% Don't need to do anything when the entry is used.
+% \begin{macrocode}
+ \def\@gls@setsort##1{}%
+% \end{macrocode}
+% This sort option is allowed with \cs{makeglossaries} and
+% \cs{makenoidxglossaries}.
+% \begin{macrocode}
+ \let\@glo@check@sortallowed\@gobble
+}
+% \end{macrocode}
+% Set standard sort as the default:
+% \begin{macrocode}
+\@gls@setupsort@standard
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glssortnumberfmt}
+%\changes{3.0}{2011-04-02}{new}
+% Format the number used as the sort key by \pkgopt[def]{sort} and
+% \pkgopt[use]{sort}. Defaults to six digit numbering.
+% \begin{macrocode}
+\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%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@setupsort@def}
+%\changes{3.0}{2011-04-02}{new}
+% Set up the macros for order of definition sorting.
+% \begin{macrocode}
+\newcommand*{\@gls@setupsort@def}{%
+% \end{macrocode}
+% Store entry information when it's defined.
+% \begin{macrocode}
+ \def\do@glo@storeentry{\@glo@storeentry}%
+% \end{macrocode}
+% Defined count register associated with the glossary.
+% \begin{macrocode}
+ \def\@gls@defsortcount##1{%
+ \expandafter\global
+ \expandafter\newcount\csname glossary@##1@sortcount\endcsname
+ }%
+% \end{macrocode}
+% Increment count register associated with the glossary and use as
+% the sort key.
+% \begin{macrocode}
+ \def\@gls@defsort##1##2{%
+% \end{macrocode}
+% It may be that the sort order was changed after the glossary was
+% defined, so check if the count register has been defined.
+%\changes{4.30}{2017-06-11}{added check for register}
+% \begin{macrocode}
+ \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}}%
+ }%
+% \end{macrocode}
+% Don't need to do anything when the entry is used.
+% \begin{macrocode}
+ \def\@gls@setsort##1{}%
+% \end{macrocode}
+% This sort option is allowed with \cs{makeglossaries} and
+% \cs{makenoidxglossaries}.
+% \begin{macrocode}
+ \let\@glo@check@sortallowed\@gobble
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@setupsort@use}
+%\changes{3.0}{2011-04-02}{new}
+% Set up the macros for order of use sorting.
+% \begin{macrocode}
+\newcommand*{\@gls@setupsort@use}{%
+% \end{macrocode}
+% Don't store entry information when it's defined.
+% \begin{macrocode}
+ \let\do@glo@storeentry\@gobble
+% \end{macrocode}
+% Defined count register associated with the glossary.
+% \begin{macrocode}
+ \def\@gls@defsortcount##1{%
+ \expandafter\global
+ \expandafter\newcount\csname glossary@##1@sortcount\endcsname
+ }%
+% \end{macrocode}
+% Initialise the sort key to empty.
+% \begin{macrocode}
+ \def\@gls@defsort##1##2{%
+ \expandafter\gdef\csname glo@##2@sort\endcsname{}%
+ }%
+% \end{macrocode}
+% If the sort key hasn't been set, increment the counter associated
+% with the glossary and set the sort key.
+% \begin{macrocode}
+ \def\@gls@setsort##1{%
+% \end{macrocode}
+% Get the parent, if one exists
+% \begin{macrocode}
+ \edef\@glo@parent{\csname glo@##1@parent\endcsname}%
+% \end{macrocode}
+% Set the information for the parent entry if not already done.
+% \begin{macrocode}
+ \ifx\@glo@parent\@empty
+ \else
+ \expandafter\@gls@setsort\expandafter{\@glo@parent}%
+ \fi
+% \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}%
+ \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
+ }%
+% \end{macrocode}
+% This sort option is allowed with \cs{makeglossaries} and
+% \cs{makenoidxglossaries}.
+% \begin{macrocode}
+ \let\@glo@check@sortallowed\@gobble
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@setupsort@none}
+%\changes{4.30}{2017-06-11}{new}
+% Slightly improves efficiency in the event that no indexing is
+% required.
+% \begin{macrocode}
+\newcommand*{\@gls@setupsort@none}{%
+% \end{macrocode}
+% Don't store entry index information.
+% \begin{macrocode}
+ \def\do@glo@storeentry##1{}%
+% \end{macrocode}
+% No count register required for standard sort.
+% \begin{macrocode}
+ \def\@gls@defsortcount##1{}%
+% \end{macrocode}
+% Don't modify sort value.
+% \begin{macrocode}
+ \def\@gls@defsort##1##2{%
+ \expandafter\global\expandafter\let\csname glo@##2@sort\endcsname\@glo@sort
+ }%
+% \end{macrocode}
+% Don't need to do anything when the entry is used.
+% \begin{macrocode}
+ \def\@gls@setsort##1{}%
+% \end{macrocode}
+% This sort option isn't allowed with \cs{makeglossaries} or
+% \cs{makenoidxglossaries}.
+% \begin{macrocode}
+ \renewcommand\@glo@check@sortallowed[1]{\PackageError{glossaries}
+ {Option sort=none not allowed with \string##1}%
+ {(Use sort=def instead)}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsdefmain}
+%\changes{2.01}{2009 May 30}{new}
+%\changes{3.04}{2012-11-18}{added check for doc package}
+% Define the main glossary. This will be the first glossary to
+% be displayed when using \ics{printglossaries}. The default
+% extensions conflict if used with \sty{doc}, so provide different
+% extensions if \sty{doc} loaded. (If these extensions are
+% inappropriate, use \pkgopt{nomain} and manually define the main
+% glossary with the desired extensions.)
+% \begin{macrocode}
+\newcommand*{\glsdefmain}{%
+ \if@gls@docloaded
+ \newglossary[glg2]{main}{gls2}{glo2}{\glossaryname}%
+ \else
+ \newglossary{main}{gls}{glo}{\glossaryname}%
+ \fi
+% \end{macrocode}
+% Define hook to set the toc title when \sty{translator} is in use.
+%\changes{4.06}{2014-03-12}{added hook to set toc title}
+% \begin{macrocode}
+ \newcommand*{\gls@tr@set@main@toctitle}{%
+ \translatelet{\glossarytoctitle}{Glossary}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Keep track of the default glossary. This is initialised to
+% the main glossary, but can be changed if for some reason
+% you want to make a secondary glossary the main glossary. This
+% affects any commands that can optionally take a glossary name
+% as an argument (or as the value of the
+% \gloskey{type}\igloskey[printglossary]{type} key in
+%a key-value list). This was mainly done so that
+% \ics{loadglsentries} can temporarily change
+% \cs{glsdefaulttype} while it loads a file containing
+% new glossary entries (see \autoref{sec:load}).
+%\begin{macro}{\glsdefaulttype}
+% \begin{macrocode}
+\newcommand*{\glsdefaulttype}{main}
+% \end{macrocode}
+%\end{macro}
+% Keep track of which glossary the acronyms are in. This is
+% initialised to \cs{glsdefaulttype}, but is changed by
+% the \pkgopt{acronym} package option.
+%\begin{macro}{\acronymtype}
+% \begin{macrocode}
+\newcommand*{\acronymtype}{\glsdefaulttype}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{option}{nomain}
+%\changes{2.01}{2009 May 30}{added nomain package option}
+% The \pkgopt{nomain} option suppress the creation of the main
+% glossary.
+% \begin{macrocode}
+\@gls@declareoption{nomain}{%
+ \let\glsdefaulttype\relax
+ \renewcommand*{\glsdefmain}{}%
+}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{option}{acronym}
+% The \pkgopt{acronym} option sets an associated conditional
+% which is used in \autoref{sec:code:acronym} to determine whether
+% or not to define a separate glossary for acronyms.
+% \begin{macrocode}
+\define@boolkey{glossaries.sty}[gls]{acronym}[true]{%
+ \ifglsacronym
+ \renewcommand{\@gls@do@acronymsdef}{%
+ \DeclareAcronymList{acronym}%
+ \newglossary[alg]{acronym}{acr}{acn}{\acronymname}%
+ \renewcommand*{\acronymtype}{acronym}%
+% \end{macrocode}
+% Define hook to set the toc title when \sty{translator} is in use.
+%\changes{4.06}{2014-03-12}{added hook to set toc title}
+% \begin{macrocode}
+ \newcommand*{\gls@tr@set@acronym@toctitle}{%
+ \translatelet{\glossarytoctitle}{Acronyms}%
+ }%
+ }%
+ \else
+ \let\@gls@do@acronymsdef\relax
+ \fi
+}
+% \end{macrocode}
+%\end{option}
+%\begin{macro}{\printacronyms}
+% Define \cs{printacronyms} at the start of the document if
+% \pkgopt{acronym} is set and compatibility mode isn't on and
+% \cs{printacronyms} hasn't already been defined.
+% \begin{macrocode}
+\AtBeginDocument{%
+ \ifglsacronym
+ \ifbool{glscompatible-3.07}%
+ {}%
+ {%
+ \providecommand*{\printacronyms}[1][]{%
+ \printglossary[type=\acronymtype,#1]}%
+ }%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@do@acronymsdef}
+% Set default value
+% \begin{macrocode}
+\newcommand*{\@gls@do@acronymsdef}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{option}{acronyms}
+%\changes{3.14a}{2013-11-12}{new}
+% Provide a synonym for \pkgopt[true]{acronym} that can be passed
+% via the document class options.
+% \begin{macrocode}
+\@gls@declareoption{acronyms}{%
+ \glsacronymtrue
+ \renewcommand{\@gls@do@acronymsdef}{%
+ \DeclareAcronymList{acronym}%
+ \newglossary[alg]{acronym}{acr}{acn}{\acronymname}%
+ \renewcommand*{\acronymtype}{acronym}%
+% \end{macrocode}
+% Define hook to set the toc title when \sty{translator} is in use.
+%\changes{4.06}{2014-03-12}{added hook to set toc title}
+% \begin{macrocode}
+ \newcommand*{\gls@tr@set@acronym@toctitle}{%
+ \translatelet{\glossarytoctitle}{Acronyms}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{option}
+%\begin{macro}{\@glsacronymlists}
+%\changes{2.04}{2009-11-10}{new}
+% Comma-separated list of glossary labels indicating which
+% glossaries contain acronyms. Note that \ics{SetAcronymStyle}
+% must be used after adding labels to this macro.
+% \begin{macrocode}
+\newcommand*{\@glsacronymlists}{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@addtoacronynlists}
+% \begin{macrocode}
+\newcommand*{\@addtoacronymlists}[1]{%
+ \ifx\@glsacronymlists\@empty
+ \protected@xdef\@glsacronymlists{#1}%
+ \else
+ \protected@xdef\@glsacronymlists{\@glsacronymlists,#1}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\DeclareAcronymList}
+%\changes{2.04}{2009-11-10}{new}%
+% Identifies the named glossary as a list of acronyms and adds
+% to the list. (Doesn't check if the glossary exists, but checks
+% if label already in list. Use \ics{SetAcronymStyle} after
+% identifying all the acronym lists.)
+% \begin{macrocode}
+\newcommand*{\DeclareAcronymList}[1]{%
+ \glsIfListOfAcronyms{#1}{}{\@addtoacronymlists{#1}}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsIfListOfAcronyms}
+%\begin{definition}
+%\cs{glsIfListOfAcronyms}\marg{label}\marg{true part}\marg{false part}
+%\end{definition}
+% Determines if the glossary with the given label has been identified
+% as being a list of acronyms.
+% \begin{macrocode}
+\newcommand{\glsIfListOfAcronyms}[1]{%
+ \edef\@do@gls@islistofacronyms{%
+ \noexpand\@gls@islistofacronyms{#1}{\@glsacronymlists}}%
+ \@do@gls@islistofacronyms
+}
+% \end{macrocode}
+% Internal command requires label and list to be expanded:
+% \begin{macrocode}
+\newcommand{\@gls@islistofacronyms}[4]{%
+ \def\gls@islistofacronyms##1,#1,##2\end@gls@islistofacronyms{%
+ \def\@before{##1}\def\@after{##2}}%
+ \gls@islistofacronyms,#2,#1,\@nil\end@gls@islistofacronyms
+ \ifx\@after\@nnil
+% \end{macrocode}
+% Not found
+% \begin{macrocode}
+ #4%
+ \else
+% \end{macrocode}
+% Found
+% \begin{macrocode}
+ #3%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\if@glsisacronymlist}
+% Convenient boolean.
+% \begin{macrocode}
+\newif\if@glsisacronymlist
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\gls@checkisacronymlist}
+% Sets the above boolean if argument is a label representing
+% a list of acronyms.
+% \begin{macrocode}
+\newcommand*{\gls@checkisacronymlist}[1]{%
+ \glsIfListOfAcronyms{#1}%
+ {\@glsisacronymlisttrue}{\@glsisacronymlistfalse}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\SetAcronymLists}
+%\changes{2.04}{2009-11-10}{new}%
+% Sets the ``list of acronyms'' list. Argument must be a
+% comma-separated list of glossary labels. (Doesn't check at this
+% point if the glossaries exists.)
+% \begin{macrocode}
+\newcommand*{\SetAcronymLists}[1]{%
+ \renewcommand*{\@glsacronymlists}{#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{option}{acronymlists}
+%\changes{2.04}{2009-11-10}{new}%
+%\changes{3.11a}{2013-10-15}{replaced \cs{@addtoacronymlists} with
+%\cs{DeclareAcronymList}}
+% \begin{macrocode}
+\define@key{glossaries.sty}{acronymlists}{%
+ \DeclareAcronymList{#1}%
+}
+% \end{macrocode}
+%\end{option}
+%
+% The default counter associated with the numbers in the glossary
+% is stored in \cs{glscounter}. This is initialised to the
+% page counter. This is used as the default counter when a
+% new glossary is defined, unless a different counter is specified
+% in the optional argument to \ics{newglossary} (see
+% \autoref{sec:newglos}).
+%\begin{macro}{\glscounter}
+% \begin{macrocode}
+\newcommand{\glscounter}{page}
+% \end{macrocode}
+%\end{macro}
+%\begin{option}{counter}
+% The \pkgopt{counter} option changes the default counter. (This
+% just redefines \cs{glscounter}.)
+% \begin{macrocode}
+\define@key{glossaries.sty}{counter}{%
+ \renewcommand*{\glscounter}{#1}%
+}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{macro}{\@gls@nohyperlist}
+%\changes{3.05}{2013/04/21}{new}
+% \begin{macrocode}
+\newcommand*{\@gls@nohyperlist}{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\GlsDeclareNoHyperList}
+%\changes{3.05}{2013/04/21}{new}
+% \begin{macrocode}
+\newcommand*{\GlsDeclareNoHyperList}[1]{%
+ \ifdefempty\@gls@nohyperlist
+ {%
+ \renewcommand*{\@gls@nohyperlist}{#1}%
+ }%
+ {%
+ \appto\@gls@nohyperlist{,#1}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{option}{nohypertypes}
+%\changes{3.05}{2013/04/21}{new}
+% \begin{macrocode}
+\define@key{glossaries.sty}{nohypertypes}{%
+ \GlsDeclareNoHyperList{#1}%
+}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{macro}{\GlossariesWarning}
+% Prints a warning message.
+% \begin{macrocode}
+\newcommand*{\GlossariesWarning}[1]{%
+ \PackageWarning{glossaries}{#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\GlossariesWarningNoLine}
+% Prints a warning message without the line number.
+% \begin{macrocode}
+\newcommand*{\GlossariesWarningNoLine}[1]{%
+ \PackageWarningNoLine{glossaries}{#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glosortentrieswarning}
+%\changes{4.30}{2017-06-11}{new}
+%Warn user that sorting may take a long time. This is actually an
+%informational message rather than a warning so just use
+%\cs{typeout}.
+% \begin{macrocode}
+\newcommand{\glosortentrieswarning}{%
+ \typeout{Using TeX to sort glossary entries---this may
+ take a while}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{option}{nowarn}
+% Define package option to suppress warnings
+% \begin{macrocode}
+\@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
+}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{macro}{\@gls@missinglang@warn}
+%\changes{4.33}{2017-09-20}{new}
+%Missing language warning.
+% \begin{macrocode}
+\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}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{option}{nolangwarn}
+% Suppress warning if language support not found.
+% \begin{macrocode}
+\@gls@declareoption{nolangwarn}{%
+ \renewcommand*{\@gls@missinglang@warn}[2]{}%
+}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{macro}{\@gls@warnonglossdefined}
+%\changes{4.04}{2014-03-06}{new}
+% Issue a warning if overriding \cs{printglossary}
+% \begin{macrocode}
+\newcommand*{\@gls@warnonglossdefined}{%
+ \GlossariesWarning{Overriding \string\printglossary}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@gls@warnontheglossdefined}
+%\changes{4.04}{2014-03-06}{new}
+% Issue a warning if overriding \env{theglossary}
+% \begin{macrocode}
+\newcommand*{\@gls@warnontheglossdefined}{%
+ \GlossariesWarning{Overriding `theglossary' environment}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{option}{noredefwarn}
+% Suppress warning on redefinition of \cs{printglossary}
+% \begin{macrocode}
+\@gls@declareoption{noredefwarn}{%
+ \renewcommand*{\@gls@warnonglossdefined}{}%
+ \renewcommand*{\@gls@warnontheglossdefined}{}%
+}
+% \end{macrocode}
+%\end{option}
+%
+% As from version 3.08a, the only information written to the external
+% glossary files are the label and sort values. Therefore, now, the
+% only sanitize option that makes sense is the one for the sort key.
+% so the sanitize option is now deprecated and there is only a
+% \pkgopt{sanitizesort} option.
+%
+%\begin{macro}{\@gls@sanitizedesc}
+% \begin{macrocode}
+\newcommand*{\@gls@sanitizedesc}{%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glssetexpandfield}
+%\changes{3.13a}{2013-11-05}{new}
+%\begin{definition}
+%\cs{glssetexpandfield}\marg{field}
+%\end{definition}
+% Sets field to always expand.
+% \begin{macrocode}
+\newcommand*{\glssetexpandfield}[1]{%
+ \csdef{gls@assign@#1@field}##1##2{%
+ \@@gls@expand@field{##1}{#1}{##2}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glssetnoexpandfield}
+%\changes{3.13a}{2013-11-05}{new}
+%\begin{definition}
+%\cs{glssetnoexpandfield}\marg{field}
+%\end{definition}
+% Sets field to never expand.
+% \begin{macrocode}
+\newcommand*{\glssetnoexpandfield}[1]{%
+ \csdef{gls@assign@#1@field}##1##2{%
+ \@@gls@noexpand@field{##1}{#1}{##2}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\gls@assign@type@field}
+%\changes{3.10a}{2013-09-28}{new}
+%\changes{3.13a}{2013-11-05}{changed to use \cs{glssetexpandfield}}
+% The type must always be expandable.
+% \begin{macrocode}
+\glssetexpandfield{type}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\gls@assign@desc@field}
+%\changes{3.08a}{2013-09-28}{new}
+%\changes{3.13a}{2013-11-05}{changed to use \cs{glssetnoexpandfield}}
+% The description is not expanded by default:
+% \begin{macrocode}
+\glssetnoexpandfield{desc}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\gls@assign@descplural@field}
+%\changes{3.08a}{2013-09-28}{new}
+%\changes{3.13a}{2013-11-05}{changed to use \cs{glssetnoexpandfield}}
+% \begin{macrocode}
+\glssetnoexpandfield{descplural}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@gls@sanitizename}
+% \begin{macrocode}
+\newcommand*{\@gls@sanitizename}{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\gls@assign@name@field}
+%\changes{3.13a}{2013-11-05}{changed to use \cs{glssetnoexpandfield}}
+% Don't expand name by default.
+% \begin{macrocode}
+\glssetnoexpandfield{name}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@gls@sanitizesymbol}
+% \begin{macrocode}
+\newcommand*{\@gls@sanitizesymbol}{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@gls@assign@symbol@field}
+%\changes{3.13a}{2013-11-05}{changed to use \cs{glssetnoexpandfield}}
+% Don't expand symbol by default.
+% \begin{macrocode}
+\glssetnoexpandfield{symbol}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@gls@assign@symbolplural@field}
+%\changes{3.13a}{2013-11-05}{changed to use \cs{glssetnoexpandfield}}
+%\changes{3.09a}{2013-10-09}{new}
+% \begin{macrocode}
+\glssetnoexpandfield{symbolplural}
+% \end{macrocode}
+%\end{macro}
+%
+% Sanitizing stuff:
+%\begin{macro}{\@gls@sanitizesort}
+%\changes{3.03}{2012/09/21}{new}
+% \begin{macrocode}
+\newcommand*{\@gls@sanitizesort}{%
+ \ifglssanitizesort
+ \@@gls@sanitizesort
+ \else
+ \@@gls@nosanitizesort
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@@gls@sanitizesort}
+%\changes{4.04}{2014-03-06}{new}
+% \begin{macrocode}
+\newcommand*\@@gls@sanitizesort{%
+ \@onelevel@sanitize\@glo@sort
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@@gls@nosanitizesort}
+%\changes{4.04}{2014-03-06}{new}
+% \begin{macrocode}
+\newcommand*{\@@gls@nosanitizesort}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@@gls@noidx@sanitizesort}
+%\changes{4.04}{2014-03-06}{new}
+% Remove braces around first character (if present) before
+% sanitizing.
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@@gls@noidx@nosanitizesort}
+%\changes{4.04}{2014-03-06}{new}
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsnoidxstripaccents}
+%\changes{4.04}{2014-03-06}{new}
+%This strips accents by redefining the standard accent commands to
+%just do their argument. (This will be localised since
+%\cs{glsnoidxstripaccents} is used within a group.) Anything outside
+%this standard set really shouldn't be using
+%\cs{makenoidxglossaries}.
+% \begin{macrocode}
+\newcommand*\glsnoidxstripaccents{%
+ \let\IeC\@firstofone
+ \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
+% \end{macrocode}
+%\changes{4.30}{2017-06-11}{added \cs{a}}
+% \begin{macrocode}
+ \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}%
+% \end{macrocode}
+%\changes{4.30}{2017-06-11}{added \cs{TH}, \cs{dh} and \cs{DH}}
+% \begin{macrocode}
+ \def\TH{TH}%
+ \def\dh{dh}%
+ \def\DH{DH}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Before defining the \pkgopt{sanitize} package option, The
+% key-value list for the \pkgopt{sanitize} value needs to be defined.
+% These are all boolean keys. If they are not given a value, assume
+% \texttt{true}.
+%
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+% \begin{macrocode}
+\define@boolkey[gls]{sanitize}{name}[true]{%
+ \GlossariesWarning{sanitize={name} package option deprecated}%
+ \ifgls@sanitize@name
+ \glssetnoexpandfield{name}%
+ \else
+ \glssetexpandfield{name}%
+ \fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%
+%\begin{option}{sanitizesort}
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+% Default setting:
+% \begin{macrocode}
+\glssanitizesorttrue
+\glssetnoexpandfield{sortvalue}%
+% \end{macrocode}
+%\end{option}
+%
+%\begin{macro}{\@gls@noidx@setsanitizesort}
+% Default behaviour for \ics{makenoidxglossaries} is
+% sanitizesort=false.
+% \begin{macrocode}
+\newcommand*{\@gls@noidx@setsanitizesort}{%
+ \glssanitizesortfalse
+ \glssetexpandfield{sortvalue}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macrocode}
+\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}%
+}
+% \end{macrocode}
+%
+%\begin{option}{sanitize}
+% \changes{4.02}{2013-12-05}{fixed bug that caused an error here}
+% \changes{4.11}{2014-09-01}{fixed backward compatibility support of
+% deprecated sanitize=none option}
+% \begin{macrocode}
+\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}%
+ }%
+}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{macro}{\ifglstranslate}
+% As from version 3.13a, the \pkgopt{translator} package option is a
+% choice rather than boolean option so now need to define
+% conditional:
+% \begin{macrocode}
+\newif\ifglstranslate
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@gls@notranslatorhook}
+%\changes{3.13a}{2013-11-05}{new}
+%\changes{4.12}{2014-11-22}{removed}
+%\cs{@gls@notranslatorhook} has been removed.
+%\end{macro}
+%\begin{macro}{\@gls@usetranslator}
+%\changes{4.12}{2014-11-22}{new}
+% \begin{macrocode}
+\newcommand*\@gls@usetranslator{%
+% \end{macrocode}
+% \sty{polyglossia} tricks \cs{@ifpackageloaded} into thinking that
+% \sty{babel} has been loaded, so check for \sty{polyglossia} as well.
+% \begin{macrocode}
+ \@ifpackageloaded{polyglossia}%
+ {%
+ \let\glsifusetranslator\@secondoftwo
+ }%
+ {%
+ \@ifpackageloaded{babel}%
+ {%
+ \IfFileExists{translator.sty}%
+ {%
+ \RequirePackage{translator}%
+ \let\glsifusetranslator\@firstoftwo
+ }%
+ {}%
+ }%
+ {}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsifusedtranslatordict}
+%\changes{4.12}{2014-11-22}{new}
+% Checks if given \sty{translator} dictionary has been loaded.
+% \begin{macrocode}
+\newcommand{\glsifusedtranslatordict}[3]{%
+ \glsifusetranslator
+ {\ifcsdef{ver@glossaries-dictionary-#1.dict}{#2}{#3}}%
+ {#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{option}{notranslate}
+%\changes{3.14a}{2013-11-12}{new}
+% Provide a synonym for \pkgopt[false]{translate} that can be passed
+% via the document class.
+% \begin{macrocode}
+\@gls@declareoption{notranslate}{%
+ \glstranslatefalse
+ \let\@gls@usetranslator\relax
+ \let\glsifusetranslator\@secondoftwo
+}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{option}{translate}
+%\changes{1.1}{2008-02-22}{translate option added}
+% Define \pkgopt{translate} option. If false don't set up
+% multi-lingual support.
+%\changes{4.41}{2018-07-23}{changed \cs{val} and \cs{nr} to
+%\cs{gls@translate@val} and \cs{gls@translate@nr}}
+% \begin{macrocode}
+\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
+ }
+% \end{macrocode}
+%\end{option}
+% Set the default value:
+% \begin{macrocode}
+\glstranslatefalse
+\let\glsifusetranslator\@secondoftwo
+\@ifpackageloaded{translator}%
+{%
+ \glstranslatetrue
+ \let\glsifusetranslator\@firstoftwo
+}%
+{%
+ \@for\gls@thissty:=tracklang,babel,ngerman,polyglossia\do
+ {
+ \@ifpackageloaded{\gls@thissty}%
+ {%
+ \glstranslatetrue
+ \@endfortrue
+ }%
+ {}%
+ }
+}
+% \end{macrocode}
+%
+%\begin{option}{indexonlyfirst}
+%\changes{3.02}{2012-05-21}{new}
+% Set whether to only index on first use.
+% \begin{macrocode}
+\define@boolkey{glossaries.sty}[gls]{indexonlyfirst}[true]{}
+\glsindexonlyfirstfalse
+% \end{macrocode}
+%\end{option}
+%
+%\begin{option}{hyperfirst}
+%\changes{2.03}{2009-09-23}{new}
+% Set whether or not terms should have a hyperlink on first use.
+% \begin{macrocode}
+\define@boolkey{glossaries.sty}[gls]{hyperfirst}[true]{}
+\glshyperfirsttrue
+% \end{macrocode}
+%\end{option}
+%
+%\begin{macro}{\@gls@setacrstyle}
+% Keep track of whether an acronym style has been set (for the
+% benefit of \cs{setupglossaries}):
+% \begin{macrocode}
+\newcommand*{\@gls@setacrstyle}{}
+% \end{macrocode}
+%\end{macro}
+%\begin{option}{footnote}
+% Set the long form of the acronym in footnote on first use.
+% \begin{macrocode}
+\define@boolkey{glossaries.sty}[glsacr]{footnote}[true]{%
+ \ifbool{glsacrdescription}%
+ {}%
+ {%
+ \renewcommand*{\@gls@sanitizedesc}{}%
+ }%
+ \renewcommand*{\@gls@setacrstyle}{\SetAcronymStyle}%
+}
+% \end{macrocode}
+%\end{option}
+%\begin{option}{description}
+% Allow acronyms to have a description (needs to be set using
+% the \gloskey{description} key in the optional argument of
+% \ics{newacronym}).
+% \begin{macrocode}
+\define@boolkey{glossaries.sty}[glsacr]{description}[true]{%
+ \renewcommand*{\@gls@sanitizesymbol}{}%
+ \renewcommand*{\@gls@setacrstyle}{\SetAcronymStyle}%
+}
+% \end{macrocode}
+%\end{option}
+%\begin{option}{smallcaps}
+% Define \ics{newacronym} to set the short form in small capitals.
+% \begin{macrocode}
+\define@boolkey{glossaries.sty}[glsacr]{smallcaps}[true]{%
+ \renewcommand*{\@gls@sanitizesymbol}{}%
+ \renewcommand*{\@gls@setacrstyle}{\SetAcronymStyle}%
+}
+% \end{macrocode}
+%\end{option}
+%\begin{option}{smaller}
+% Define \ics{newacronym} to set the short form using \cs{smaller}
+% which obviously needs to be defined by loading the appropriate
+% package.
+% \begin{macrocode}
+\define@boolkey{glossaries.sty}[glsacr]{smaller}[true]{%
+ \renewcommand*{\@gls@sanitizesymbol}{}%
+ \renewcommand*{\@gls@setacrstyle}{\SetAcronymStyle}%
+}
+% \end{macrocode}
+%\end{option}
+%\begin{option}{dua}
+% Define \ics{newacronym} to always use the long forms
+% (i.e.\ don't use acronyms)
+% \begin{macrocode}
+\define@boolkey{glossaries.sty}[glsacr]{dua}[true]{%
+ \renewcommand*{\@gls@sanitizesymbol}{}%
+ \renewcommand*{\@gls@setacrstyle}{\SetAcronymStyle}%
+}
+% \end{macrocode}
+%\end{option}
+%\begin{option}{shotcuts}
+% Define acronym shortcuts.
+% \begin{macrocode}
+\define@boolkey{glossaries.sty}[glsacr]{shortcuts}[true]{}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{macro}{\glsorder}
+% Stores the glossary ordering. This may either be \qt{word}
+% or \qt{letter}. This passes the relevant information to
+% \app{makeglossaries}. The default is word ordering.
+% \begin{macrocode}
+\newcommand*{\glsorder}{word}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@glsorder}
+% The ordering information is written to the auxiliary file
+% for \app{makeglossaries}, so ignore the auxiliary
+% information.
+% \begin{macrocode}
+\newcommand*{\@glsorder}[1]{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{option}{order}
+%\changes{1.17}{2008-12-26}{order package option added}
+% \begin{macrocode}
+\define@choicekey{glossaries.sty}{order}{word,letter}{%
+ \def\glsorder{#1}}
+% \end{macrocode}
+%\end{option}
+%
+%\changes{1.17}{2008-12-26}{added xindy support}
+%\begin{macro}{\ifglsxindy}
+%\changes{1.17}{2008-12-26}{new}
+% Provide boolean to determine whether \gls{xindy} or
+% \gls{makeindex} will be used to sort the glossaries.
+% \begin{macrocode}
+\newif\ifglsxindy
+% \end{macrocode}
+%\end{macro}
+% The default is \app{makeindex}:
+% \begin{macrocode}
+\glsxindyfalse
+% \end{macrocode}
+%
+%\begin{option}{makeindex}
+% Define package option to specify that \app{makeindex} will
+% be used to sort the glossaries:
+% \begin{macrocode}
+\@gls@declareoption{makeindex}{\glsxindyfalse}
+% \end{macrocode}
+%\end{option}
+%
+% The \pkgopt{xindy} package option may have a value which in
+% turn can be a key=value list. First define the keys for this
+% sub-list. The boolean "glsnumbers" determines whether to
+% automatically add the \texttt{glsnumbers} letter group.
+% \begin{macrocode}
+\define@boolkey[gls]{xindy}{glsnumbers}[true]{}
+\gls@xindy@glsnumberstrue
+% \end{macrocode}
+%
+%\begin{macro}{\@xdy@main@language}
+%\changes{3.06}{2013/06/17}{Changed back to using \cs{languagename}}
+% Define what language to use for each glossary type (if a
+% language is not defined for a particular glossary type
+% the language specified for the main glossary is used.)
+% \begin{macrocode}
+\def\@xdy@main@language{\languagename}%
+% \end{macrocode}
+%\end{macro}
+% Define key to set the language
+% \begin{macrocode}
+\define@key[gls]{xindy}{language}{\def\@xdy@main@language{#1}}
+% \end{macrocode}
+%
+%\begin{macro}{\gls@codepage}
+% Define the code page. If \ics{inputencodingname} is defined
+% use that, otherwise have initialise with no codepage.
+%\changes{3.0}{2011-04-02}{replaced \cs{@ifundefined} with
+%\cs{ifcsundef}}
+% \begin{macrocode}
+\ifcsundef{inputencodingname}{%
+ \def\gls@codepage{}}{%
+ \def\gls@codepage{\inputencodingname}
+}
+% \end{macrocode}
+% Define a key to set the code page.
+% \begin{macrocode}
+\define@key[gls]{xindy}{codepage}{\def\gls@codepage{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{option}{xindy}
+% Define package option to specify that \app{xindy} will be
+% used to sort the glossaries:
+% \begin{macrocode}
+\define@key{glossaries.sty}{xindy}[]{%
+ \glsxindytrue
+ \setkeys[gls]{xindy}{#1}%
+}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{option}{xindygloss}
+%\changes{3.14a}{2013-11-12}{new}
+% Provide a synonym for \pkgopt[]{xindy} that can be passed via the
+% document class options.
+% \begin{macrocode}
+\@gls@declareoption{xindygloss}{%
+ \glsxindytrue
+}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{option}{xindynoglsnumbers}
+%\changes{4.02}{2013-12-05}{new}
+% Provide a synonym for \texttt{xindy={glsnumbers=false}} that can
+% be passed via the document class options.
+% \begin{macrocode}
+\@gls@declareoption{xindynoglsnumbers}{%
+ \glsxindytrue
+ \gls@xindy@glsnumbersfalse
+}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{macro}{\ifglsautomake}
+%\changes{4.42}{2019-01-06}{now defined explicitly instead of through
+%boolean key}
+% \begin{macrocode}
+\newif\ifglsautomake
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\gls@automake@nr}
+%\changes{4.42}{2019-01-06}{new}
+% \begin{macrocode}
+\newcommand{\gls@automake@nr}{1}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{option}{automake}
+%\changes{4.08}{2014-07-30}{new}
+%\changes{4.42}{2019-01-06}{switch from boolean to choice}
+% If this setting is on, automatically run
+% \gls{makeindex}\slash\gls{xindy} at the end of the document.
+% Must be used with \ics{makeglossaries}.
+% Default is false. As from v4.42, this is now a choice rather than
+% boolean key.
+% \begin{macrocode}
+\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
+% \end{macrocode}
+%\end{option}
+%\begin{macro}{\@gls@doautomake}
+%\changes{4.08}{2014-07-30}{new}
+% \begin{macrocode}
+\newcommand*{\@gls@doautomake}{}
+\AtEndDocument{\@gls@doautomake}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{option}{savewrites}
+%\changes{3.0}{2011-04-02}{new}
+% The \pkgopt{savewrites} package option is provided to save on
+% the number of write registers.
+% \begin{macrocode}
+\define@boolkey{glossaries.sty}[gls]{savewrites}[true]{%
+ \ifglssavewrites
+ \renewcommand*{\glswritefiles}{\@glswritefiles}%
+ \else
+ \let\glswritefiles\@empty
+ \fi
+}
+% \end{macrocode}
+%\end{option}
+% Set default:
+%\changes{4.03}{2014-01-17}{changed default to \cs{@empty} instead
+%of \cs{relax}}
+% \begin{macrocode}
+\glssavewritesfalse
+\let\glswritefiles\@empty
+% \end{macrocode}
+%
+%\begin{option}{compatible-3.07}
+%\changes{3.11a}{2013-10-15}{cnew}
+% \begin{macrocode}
+\define@boolkey{glossaries.sty}[gls]{compatible-3.07}[true]{}
+\boolfalse{glscompatible-3.07}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{option}{compatible-2.07}
+%\changes{3.0}{2011-04-02}{compatible-2.07 option added}
+% \begin{macrocode}
+\define@boolkey{glossaries.sty}[gls]{compatible-2.07}[true]{%
+% \end{macrocode}
+% Also set 3.07 compatibility if this option is set.
+%\changes{3.14a}{2013-11-12}{added check for 2.07 before setting 3.07
+%compatibility}
+% \begin{macrocode}
+ \ifbool{glscompatible-2.07}%
+ {%
+ \booltrue{glscompatible-3.07}%
+ }%
+ {}%
+}
+\boolfalse{glscompatible-2.07}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{macro}{\gls@original@makeglossary}
+%Store the original definition.
+%\changes{4.41}{2018-07-23}{new}
+% \begin{macrocode}
+\let\gls@original@makeglossary\makeglossary
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\gls@original@glossary}
+%Store the original definition.
+%\changes{4.41}{2018-07-23}{new}
+% \begin{macrocode}
+\let\gls@original@glossary\glossary
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\makeglossary}
+% The \cs{makeglossary} command is redefined to be
+% identical to \cs{makeglossaries}. (This is done partly to
+% reinforce the message that you must either use
+% \cs{@makeglossary} for all the glossaries or for none
+% of them, but is also a legacy from the old \styfmt{glossary} package.)
+%\changes{4.41}{2018-07-23}{added warning}
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@override@glossary}
+%\changes{4.41}{2018-07-23}{new}
+% \begin{macrocode}
+\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}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% In v4.10, the redefinition of \cs{glossary} was removed since it
+% was never intended as a user level command (and wasn't documented
+% in the user manual), however it seems there are packages that have
+% hacked the internal macros used by \styfmt{glossaries} and no longer
+% work with this redefinition removed, so it's been restored in v4.11
+% but is not used at all by \styfmt{glossaries}.
+% (This may be removed or moved to a compatibility mode in future.)
+% As from v4.41, the use of \cs{glossary} now triggers a warning.
+% The package option \pkgopt[nowarn]{kernelglossredefs} may be used to
+% remove the warning, but it's better not to use \cs{glossary}.
+%\begin{macro}{\glossary}
+%\changes{4.41}{2018-07-23}{added warning}
+% \begin{macrocode}
+\if@gls@docloaded
+\else
+ \def\glossary{\@gls@override@glossary}
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{option}{kernelglossredefs}
+%\changes{4.41}{2018-07-23}{new}
+%The \sty{glossaries} package redefines the kernel commands
+%\cs{makeglossary} and \cs{glossary} as a legacy action from the
+%former \sty{glossary} package. In hindsight that wasn't a good idea
+%as it's possible that the \sty{glossaries} package may need to be
+%used with another class or package that needs these commands.
+%Neither of these commands are documented in the main user manual
+%and their use is not encouraged. The preferred commands are
+%\cs{makeglossaries} (to open all associated glossary files) and
+%\cs{gls}, \cs{glstext} etc or \cs{glsadd} for indexing.
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{option}{symbols}
+% Create a \qt{symbols} glossary type
+%\changes{3.11a}{2013-10-15}{new}
+% \begin{macrocode}
+\@gls@declareoption{symbols}{%
+ \let\@gls@do@symbolsdef\@gls@symbolsdef
+}
+% \end{macrocode}
+% Default is not to define the symbols glossary:
+% \begin{macrocode}
+\newcommand*{\@gls@do@symbolsdef}{}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{macro}{\@gls@symbolsdef}
+%\changes{4.02}{2013-12-05}{new}
+% \begin{macrocode}
+\newcommand*{\@gls@symbolsdef}{%
+ \newglossary[slg]{symbols}{sls}{slo}{\glssymbolsgroupname}%
+ \newcommand*{\printsymbols}[1][]{\printglossary[type=symbols,##1]}%
+% \end{macrocode}
+% Define hook to set the toc title when \sty{translator} is in use.
+%\changes{4.06}{2014-03-12}{added hook to set toc title}
+% \begin{macrocode}
+ \newcommand*{\gls@tr@set@symbols@toctitle}{%
+ \translatelet{\glossarytoctitle}{Symbols (glossaries)}%
+ }%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{option}{numbers}
+% Create a \qt{symbols} glossary type
+%\changes{3.11a}{2013-10-15}{new}
+% \begin{macrocode}
+\@gls@declareoption{numbers}{%
+ \let\@gls@do@numbersdef\@gls@numbersdef
+}
+% \end{macrocode}
+% Default is not to define the numbers glossary:
+% \begin{macrocode}
+\newcommand*{\@gls@do@numbersdef}{}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{macro}{\@gls@numbersdef}
+%\changes{4.02}{2013-12-05}{new}
+% \begin{macrocode}
+\newcommand*{\@gls@numbersdef}{%
+ \newglossary[nlg]{numbers}{nls}{nlo}{\glsnumbersgroupname}%
+ \newcommand*{\printnumbers}[1][]{\printglossary[type=numbers,##1]}%
+% \end{macrocode}
+% Define hook to set the toc title when \sty{translator} is in use.
+%\changes{4.06}{2014-03-12}{added hook to set toc title}
+% \begin{macrocode}
+ \newcommand*{\gls@tr@set@numbers@toctitle}{%
+ \translatelet{\glossarytoctitle}{Numbers (glossaries)}%
+ }%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{option}{index}
+% Create an \qt{index} glossary type
+%\changes{4.02}{2013-12-05}{new}
+% \begin{macrocode}
+\@gls@declareoption{index}{%
+ \ifx\@gls@do@indexdef\@empty
+ \let\@gls@do@indexdef\@gls@indexdef
+ \fi
+}
+% \end{macrocode}
+%\end{option}
+%\begin{option}{noglossaryindex}
+% Counteract \pkgopt{index} if it happens to be globally used in the document class.
+%\changes{4.42}{2019-01-06}{new}
+% \begin{macrocode}
+\@gls@declareoption{noglossaryindex}{%
+ \let\@gls@do@indexdef\relax
+}
+% \end{macrocode}
+%\end{option}
+% Default is not to define index glossary:
+% \begin{macrocode}
+\newcommand*{\@gls@do@indexdef}{}
+% \end{macrocode}
+%
+%\begin{macro}{\@gls@indexdef}
+%\changes{4.02}{2013-12-05}{new}
+%\cs{indexname} isn't set by \sty{glossaries}.
+% \begin{macrocode}
+\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
+}%
+% \end{macrocode}
+%\end{macro}
+%
+% Process package options. First process any options that have been
+% passed via the document class.
+% \begin{macrocode}
+\@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
+}
+% \end{macrocode}
+% Now process options passed to the package:
+% \begin{macrocode}
+\ProcessOptionsX
+% \end{macrocode}
+% Load backward compatibility stuff:
+% \begin{macrocode}
+\RequirePackage{glossaries-compatible-307}
+% \end{macrocode}
+%
+%\begin{macro}{\setupglossaries}
+%\changes{3.11a}{2013-10-15}{new}
+% Provide way to set options after package has been loaded. However,
+% some options must be set before \cs{ProcessOptionsX}, so they have
+% to be disabled:
+% \begin{macrocode}
+\disable@keys{glossaries.sty}{compatible-2.07,%
+ xindy,xindygloss,xindynoglsnumbers,makeindex,%
+ acronym,translate,notranslate,nolong,nosuper,notree,nostyles,%
+ nomain,noglossaryindex}
+% \end{macrocode}
+%Now define \cs{setupglossaries}:
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+%
+% If chapters are defined and the user has requested the
+% section counter as a package option, \cs{@chapter} will
+% be modified so
+% that it adds a \texttt{section.}\meta{n}\texttt{.0} target,
+% otherwise entries placed before the first section of a chapter
+% will have undefined links.
+%
+% The same problem will also occur if a lower sectional unit is
+% used, but this is less likely to happen. If it does, or if
+% you change \cs{glscounter} to "section" later, you
+% will have to specify a different counter for the entries
+% that give rise to a \texttt{name}"{"\meta{section-level}"."\meta{n}".0}"
+% non-existent warning (e.g. "\gls[counter=chapter]{label}").
+%\changes{3.0}{2011-04-02}{replaced \cs{@ifundefined} with
+%\cs{ifcsundef}}
+% \begin{macrocode}
+\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}{}}}%
+ }%
+}%
+{}
+% \end{macrocode}
+%
+%\begin{macro}{\@gls@onlypremakeg}
+% Some commands only have an effect when used before
+% \ics{makeglossaries}. So define a list of commands that
+% should be disabled after \ics{makeglossaries}
+% \begin{macrocode}
+\newcommand*{\@gls@onlypremakeg}{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@onlypremakeg}
+% Adds the specified control sequence to the list of commands that
+% must be disabled after \ics{makeglossaries}.
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@disable@onlypremakeg}
+% Disable all commands listed in \cs{@gls@onlypremakeg}
+% \begin{macrocode}
+\newcommand*{\@disable@onlypremakeg}{%
+\@for\@thiscs:=\@gls@onlypremakeg\do{%
+ \expandafter\@disable@premakecs\@thiscs%
+}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@disable@premakecs}
+% Disables the given command.
+% \begin{macrocode}
+\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}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\section{Predefined Text}\label{sec:predefinednames}
+% Set up default textual tags that are used by this
+% package. Some of the names may already be defined (e.g.\ by
+% \isty{babel}) so \cs{providecommand} is used.
+%
+% Main glossary title:
+%\begin{macro}{\glossaryname}
+% \begin{macrocode}
+\providecommand*{\glossaryname}{Glossary}
+% \end{macrocode}
+%\end{macro}
+% The title for the "acronym" glossary type (which is defined if
+% \pkgopt{acronym} package option is used) is given by
+% \cs{acronymname}. If the \pkgopt{acronym}
+% package option is not used, \cs{acronymname} won't be used.
+%\begin{macro}{\acronymname}
+% \begin{macrocode}
+\providecommand*{\acronymname}{Acronyms}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glssettoctitle}
+% Sets the TOC title for the given glossary.
+%\changes{1.15}{2008-08-15}{new}
+% \begin{macrocode}
+\newcommand*{\glssettoctitle}[1]{%
+ \def\glossarytoctitle{\csname @glotype@#1@title\endcsname}}
+% \end{macrocode}
+%\end{macro}
+%
+% The following commands provide text for the headers used by
+% some of the tabular-like glossary
+% styles. Whether or not they get used in the glossary depends on
+% the glossary style.
+%\begin{macro}{\entryname}
+% \begin{macrocode}
+\providecommand*{\entryname}{Notation}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\descriptionname}
+% \begin{macrocode}
+\providecommand*{\descriptionname}{Description}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\symbolname}
+% \begin{macrocode}
+\providecommand*{\symbolname}{Symbol}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\pagelistname}
+% \begin{macrocode}
+\providecommand*{\pagelistname}{Page List}
+% \end{macrocode}
+%\end{macro}
+% Labels for \app{makeindex}'s symbol and number groups:
+%\begin{macro}{\glssymbolsgroupname}
+% \begin{macrocode}
+\providecommand*{\glssymbolsgroupname}{Symbols}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsnumbersgroupname}
+% \begin{macrocode}
+\providecommand*{\glsnumbersgroupname}{Numbers}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glspluralsuffix}
+% The default plural is formed by appending \cs{glspluralsuffix} to
+% the singular form.
+% \begin{macrocode}
+\newcommand*{\glspluralsuffix}{s}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsacrpluralsuffix}
+% Default plural suffix for acronyms
+%\changes{4.12}{2014-11-22}{new}
+% \begin{macrocode}
+\newcommand*{\glsacrpluralsuffix}{\glspluralsuffix}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsupacrpluralsuffix}
+%\changes{4.12}{2014-11-22}{new}
+% \begin{macrocode}
+\newcommand*{\glsupacrpluralsuffix}{\glstextup{\glsacrpluralsuffix}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\seename}
+% \begin{macrocode}
+\providecommand*{\seename}{see}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\andname}
+% \begin{macrocode}
+\providecommand*{\andname}{\&}
+% \end{macrocode}
+%\end{macro}
+% Add multi-lingual support\changes{1.08}{2007-10-13}{Added
+% babel support}. Thanks to everyone who contributed to the
+% translations from both comp.text.tex and via email.
+%\begin{macro}{\RequireGlossariesLang}
+%\changes{4.12}{2014-11-22}{new}
+% \begin{macrocode}
+\newcommand*{\RequireGlossariesLang}[1]{%
+ \@ifundefined{ver@glossaries-#1.ldf}{\input{glossaries-#1.ldf}}{}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ProvidesGlossariesLang}
+%\changes{4.12}{2014-11-22}{new}
+% \begin{macrocode}
+\newcommand*{\ProvidesGlossariesLang}[1]{%
+ \ProvidesFile{glossaries-#1.ldf}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\addglossarytocaptions}
+% Does nothing if \sty{translator} hasn't been loaded.
+% \begin{macrocode}
+\newcommand*{\addglossarytocaptions}[1]{}
+% \end{macrocode}
+%\end{macro}
+%
+% As from v4.12, multlingual support has been split off into
+% independently-maintained language modules.
+% \begin{macrocode}
+\ifglstranslate
+% \end{macrocode}
+% Load \sty{tracklang}
+% \begin{macrocode}
+ \RequirePackage{tracklang}
+% \end{macrocode}
+% Load \sty{translator} if required.
+% \begin{macrocode}
+ \@gls@usetranslator
+% \end{macrocode}
+% If using \isty{translator}, \ics{glossaryname} should be defined
+% in terms of \ics{translate}, but if babel is also loaded, it will
+% redefine \cs{glossaryname} whenever the language is set, so
+% override it. (Don't use \ics{addto} as \isty{polyglossia} doesn't
+% define it.)
+%\changes{3.0}{2011-04-02}{replaced \cs{@ifundefined} with
+%\cs{ifcsundef}}
+% \begin{macrocode}
+ \@ifpackageloaded{translator}
+ {%
+% \end{macrocode}
+% If the language options have been specified through the
+% document class, then \sty{translator} can pick them up. If not,
+% \sty{translator} will default to English and any language
+% option passed to \sty{babel} won't be detected, so if
+% \cs{trans@languages} is just \texttt{English} and \cs{bbl@loaded}
+% isn't simply \texttt{english}, then don't use the \sty{translator}
+% dictionaries.
+% \begin{macrocode}
+ \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@}%
+ }%
+ }%
+ }%
+ }%
+ {}%
+% \end{macrocode}
+% Check for tracked languages
+% \begin{macrocode}
+ \AnyTrackedLanguages
+ {%
+ \ForEachTrackedDialect{\this@dialect}{%
+ \IfTrackedLanguageFileExists{\this@dialect}%
+ {glossaries-}% prefix
+ {.ldf}%
+ {%
+ \RequireGlossariesLang{\CurrentTrackedTag}%
+ }%
+ {%
+ \@gls@missinglang@warn\this@dialect\CurrentTrackedLanguage
+ }%
+ }%
+ }%
+ {}%
+% \end{macrocode}
+% if using \sty{translator} use translator interface.
+% \begin{macrocode}
+ \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
+% \end{macrocode}
+%
+%\begin{macro}{\nopostdesc}
+% Provide a means to suppress description terminator for a given
+% entry. (Useful for entries with no description.) Has no
+% effect outside the glossaries.
+%\changes{1.17}{2008-12-26}{new}
+%\changes{3.05}{2013-04-21}{made robust}
+% \begin{macrocode}
+\DeclareRobustCommand*{\nopostdesc}{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@nopostdesc}
+% Suppress next description terminator.
+% \begin{macrocode}
+\newcommand*{\@nopostdesc}{%
+ \let\org@glspostdescription\glspostdescription
+ \def\glspostdescription{%
+ \let\glspostdescription\org@glspostdescription}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@no@post@desc}
+% Used for comparison purposes.
+% \begin{macrocode}
+\newcommand*{\@no@post@desc}{\nopostdesc}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glspar}
+% Provide means of having a paragraph break in glossary entries
+% \begin{macrocode}
+\newcommand{\glspar}{\par}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\setStyleFile}
+% Sets the style file. The relevant extension is appended.
+% \begin{macrocode}
+\newcommand{\setStyleFile}[1]{%
+ \renewcommand*{\gls@istfilebase}{#1}%
+% \end{macrocode}
+% Just in case \cs{istfilename} has been modified.
+% \begin{macrocode}
+ \ifglsxindy
+ \def\istfilename{\gls@istfilebase.xdy}
+ \else
+ \def\istfilename{\gls@istfilebase.ist}
+ \fi
+}
+% \end{macrocode}
+% This command only has an effect prior to using
+% \ics{makeglossaries}.
+% \begin{macrocode}
+\@onlypremakeg\setStyleFile
+% \end{macrocode}
+%\end{macro}
+%
+% The name of the \app{makeindex} or \app{xindy} style file
+% is given by \cs{istfilename}. This file is
+% created by \ics{writeist} (which is used by
+% \ics{makeglossaries}) so
+% redefining this command will only have an effect if it is
+% done \emph{before} \cs{makeglossaries}. As from v1.17, use
+% \ics{setStyleFile} instead of directly redefining \cs{istfilename}.
+%\begin{macro}{\istfilename}
+%\changes{1.17}{2008-12-26}{added xindy support}
+% \begin{macrocode}
+\ifglsxindy
+ \def\istfilename{\gls@istfilebase.xdy}
+\else
+ \def\istfilename{\gls@istfilebase.ist}
+\fi
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\gls@istfilebase}
+%\changes{4.08}{2014-07-30}{new}
+% \begin{macrocode}
+\newcommand*{\gls@istfilebase}{\jobname}
+% \end{macrocode}
+%\end{macro}
+% The \app{makeglossaries} Perl script picks up this name
+% from the auxiliary file. If the name ends with \filetype{.xdy}
+% it calls \app{xindy} otherwise it calls \app{makeindex}.
+% Since its not required by
+% \LaTeX, \cs{@istfilename} ignores its argument.
+%\begin{macro}{\@istfilename}
+% \begin{macrocode}
+\newcommand*{\@istfilename}[1]{}
+% \end{macrocode}
+%\end{macro}
+%
+% This command is the value of the \istkey{page\_compositor}
+% \app{makeindex} key. Again, any redefinition of this command
+% must take place \emph{before} \cs{writeist} otherwise it
+% will have no effect. As from 1.17, use \ics{glsSetCompositor}
+% instead of directly redefining \cs{glscompositor}.
+%\begin{macro}{\glscompositor}
+% \begin{macrocode}
+\newcommand*{\glscompositor}{.}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsSetCompositor}
+% Sets the compositor.
+% \begin{macrocode}
+\newcommand*{\glsSetCompositor}[1]{%
+ \renewcommand*{\glscompositor}{#1}}
+% \end{macrocode}
+% Only use before \ics{makeglossaries}
+% \begin{macrocode}
+\@onlypremakeg\glsSetCompositor
+% \end{macrocode}
+%\end{macro}
+%
+% (The page compositor is usually defined as a dash when using
+% \app{makeindex}, but most of the standard counters used
+% by \LaTeX\ use a full stop as the compositor, which is why I
+% have used it as the default.) If \app{xindy} is used
+% \cs{glscompositor} only affects the \texttt{arabic-page-numbers}
+% location class.
+%\begin{macro}{\@glsAlphacompositor}
+% This is only used by \app{xindy}. It specifies the
+% compositor to use when location numbers are in the form
+% \meta{letter}\meta{compositor}\meta{number}. For example,
+% if \cs{@glsAlphacompositor} is set to ``.'' then it allows
+% locations such as A.1 whereas if \cs{@glsAlphacompositor} is
+% set to ``-'' then it allows locations such as A-1.
+% \begin{macrocode}
+\newcommand*{\@glsAlphacompositor}{\glscompositor}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsSetAlphaCompositor}
+% Sets the alpha compositor.
+% \begin{macrocode}
+\ifglsxindy
+ \newcommand*\glsSetAlphaCompositor[1]{%
+ \renewcommand*\@glsAlphacompositor{#1}}
+\else
+ \newcommand*\glsSetAlphaCompositor[1]{%
+ \glsnoxindywarning\glsSetAlphaCompositor}
+\fi
+% \end{macrocode}
+% Can only be used before \ics{makeglossaries}
+% \begin{macrocode}
+\@onlypremakeg\glsSetAlphaCompositor
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\gls@suffixF}
+%\changes{1.17}{2008-12-26}{new}
+% Suffix to use for a two page list. This overrides the separator
+% and the closing page number if set to something other than
+% an empty macro.
+% \begin{macrocode}
+\newcommand*{\gls@suffixF}{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsSetSuffixF}
+%\changes{1.17}{2008-12-26}{new}
+% Sets the suffix to use for a two page list.
+% \begin{macrocode}
+\newcommand*{\glsSetSuffixF}[1]{%
+ \renewcommand*{\gls@suffixF}{#1}}
+% \end{macrocode}
+% Only has an effect when used before \ics{makeglossaries}
+% \begin{macrocode}
+\@onlypremakeg\glsSetSuffixF
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\gls@suffixFF}
+%\changes{1.17}{2008-12-26}{new}
+% Suffix to use for a three page list. This overrides the separator
+% and the closing page number if set to something other than
+% an empty macro.
+% \begin{macrocode}
+\newcommand*{\gls@suffixFF}{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsSetSuffixFF}
+%\changes{1.17}{2008-12-26}{new}
+% Sets the suffix to use for a three page list.
+% \begin{macrocode}
+\newcommand*{\glsSetSuffixFF}[1]{%
+ \renewcommand*{\gls@suffixFF}{#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsnumberformat}
+% The command \cs{glsnumberformat} indicates the default
+% format for the page numbers in the glossary. (Note that this
+% is not the same as \ics{glossaryentrynumbers}, but applies
+% to individual numbers or groups of numbers within an entry's
+% associated number list.) If hyperlinks are defined, it will use
+% \ics{glshypernumber}, otherwise it will simply display its
+% argument ``as is''.
+%\changes{3.0}{2011-04-02}{replaced \cs{@ifundefined} with
+%\cs{ifcsundef}}
+% \begin{macrocode}
+\ifcsundef{hyperlink}%
+{%
+ \newcommand*{\glsnumberformat}[1]{#1}%
+}%
+{%
+ \newcommand*{\glsnumberformat}[1]{\glshypernumber{#1}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Individual numbers in an entry's associated number list are
+% delimited using \cs{delimN} (which corresponds to the
+% \istkey{delim\_n} \app{makeindex} keyword). The default value
+% is a comma followed by a space.
+%\begin{macro}{\delimN}
+% \begin{macrocode}
+\newcommand{\delimN}{, }
+% \end{macrocode}
+%\end{macro}
+% A range of numbers within an entry's associated number list is
+% delimited using \cs{delimR} (which corresponds to the
+% \istkey{delim\_r} \app{makeindex} keyword). The default is
+% an en-dash.
+%\begin{macro}{\delimR}
+% \begin{macrocode}
+\newcommand{\delimR}{--}
+% \end{macrocode}
+%\end{macro}
+%
+% The glossary preamble is given by \cs{glossarypreamble}. This
+% will appear after the glossary sectioning command, and before the
+% \env{theglossary} environment. It is designed to allow the
+% user to add information pertaining to the glossary (e.g.\ ``page
+% numbers in italic indicate the primary definition'') therefore
+% \cs{glossarypremable} shouldn't be affected by the glossary
+% style. (So if you define your own glossary style, don't have it
+% change \cs{glossarypreamble}.) The preamble is empty by
+% default. If you have multiple glossaries, and you want a
+% different preamble for each glossary, you will need to use
+% \ics{printglossary} for each glossary type, instead of
+% \ics{printglossaries}, and redefine \cs{glossarypreamble}
+% before each \ics{printglossary}.
+%\begin{macro}{\glossarypreamble}
+%\changes{3.07}{2013-07-05}{modified to work with
+%\cs{setglossarypreamble}}
+% \begin{macrocode}
+\newcommand*{\glossarypreamble}{%
+ \csuse{@glossarypreamble@\currentglossary}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\setglossarypreamble}
+%\begin{definition}
+%\cs{setglossarypreamble}\oarg{type}\marg{text}
+%\end{definition}
+% Code provided by Michael Pock.
+%\changes{3.07}{2013-07-05}{new}
+% \begin{macrocode}
+\newcommand{\setglossarypreamble}[2][\glsdefaulttype]{%
+ \ifglossaryexists{#1}{%
+ \csgdef{@glossarypreamble@#1}{#2}%
+ }{%
+ \GlossariesWarning{%
+ Glossary `#1' is not defined%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%
+% The glossary postamble is given by \cs{glossarypostamble}.
+% This is provided to allow the user to
+% add something after the end of the \env{theglossary}
+% environment (again, this shouldn't be affected by the
+% glossary style). It is, of course, possible to simply add the
+% text after \ics{printglossary}, but if you only want the
+% postamble to appear after the first glossary, but not after
+% subsequent glossaries, you can do something like:
+%\begin{verbatim}
+%\renewcommand{\glossarypostamble}{For a complete list of terms
+%see \cite{blah}\gdef\glossarypreamble{}}
+%\end{verbatim}
+%\begin{macro}{\glossarypostamble}
+% \begin{macrocode}
+\newcommand*{\glossarypostamble}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glossarysection}
+% The sectioning command that starts a glossary is given by
+% \cs{glossarysection}. (This does not form part of the
+% glossary style, and so should not be changed by a glossary
+% style.) If \ics{phantomsection}
+% is defined, it uses \cs{\@p@glossarysection}, otherwise it
+% uses \cs{@glossarysection}.
+%\changes{1.05}{2007-08-10}{added \cs{@mkboth} to
+%\cs{glossarysection}}
+%\changes{2.02}{2009-07-13}{changed \cs{@mkboth} to
+%\cs{glossarymark}}
+%\changes{3.0}{2011-04-02}{replaced \cs{@ifundefined} with
+%\cs{ifcsundef}}
+% \begin{macrocode}
+\newcommand*{\glossarysection}[2][\@gls@title]{%
+ \def\@gls@title{#2}%
+ \ifcsundef{phantomsection}%
+ {%
+ \@glossarysection{#1}{#2}%
+ }%
+ {%
+ \@p@glossarysection{#1}{#2}%
+ }%
+% \end{macrocode}
+%\changes{3.13a}{2013-11-05}{changed \cs{glossarymark} to \cs{glsglossarymark}}
+% \begin{macrocode}
+ \glsglossarymark{\glossarytoctitle}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsglossarymark}
+%\changes{2.02}{2009-07-13}{New}
+%\changes{2.03}{2009-09-23}{Added check to see if it's already
+%defined}
+%\changes{3.0}{2011-04-02}{replaced \cs{@ifundefined} with
+%\cs{ifcsundef}}
+%\changes{3.11a}{2013-10-15}{replaced \cs{MakeUppercase} with
+%\cs{mfirstucMakeUppercase}}
+%\changes{3.13a}{2013-11-05}{renamed \cs{glossarymark} to
+%\cs{glsglossarymark} to avoid conflict with memoir}
+% Sets the header mark for the glossary. Takes the glossary short
+% (TOC) title as the argument.
+% \begin{macrocode}
+\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
+ }
+ }
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glossarymark}
+% Provided for backward compatibility:
+% \begin{macrocode}
+\providecommand{\glossarymark}[1]{%
+ \ifglsucmark
+ \@mkboth{\mfirstucMakeUppercase{#1}}{\mfirstucMakeUppercase{#1}}%
+ \else
+ \@mkboth{#1}{#1}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+% The required sectional unit is given by \cs{@@glossarysec}
+% which was defined by the \pkgopt{section} package option. The
+% starred form of the command is chosen. If you don't want any sectional
+% command, you will need to redefine \cs{glossarysection}.
+% The sectional unit can be changed, if different sectional units
+% are required.
+%\begin{macro}{\setglossarysection}
+%\changes{1.1}{2008-02-22}{new}
+% \begin{macrocode}
+\newcommand*{\setglossarysection}[1]{%
+\setkeys{glossaries.sty}{section=#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%The command \cs{@glossarysection} indicates how to start
+% the glossary section if \ics{phantomsection} is not defined.
+%\begin{macro}{\@glossarysection}
+%\changes{1.1}{2008-02-22}{numbered sections and auto label added}
+%\changes{4.07}{2014-04-04}{added optional argument when using unstarred
+%version}
+% \begin{macrocode}
+\newcommand*{\@glossarysection}[2]{%
+ \ifdefempty\@@glossarysecstar
+ {%
+ \csname\@@glossarysec\endcsname[#1]{#2}%
+ }%
+ {%
+ \csname\@@glossarysec\endcsname*{#2}%
+ \@gls@toc{#1}{\@@glossarysec}%
+ }%
+% \end{macrocode}
+% Do automatic labelling if required
+% \begin{macrocode}
+ \@@glossaryseclabel
+}
+% \end{macrocode}
+%\end{macro}
+%
+% As \cs{@glossarysection}, but put in
+% \ics{phantomsection}, and swap where \cs{@gls@toc} goes.
+% If using chapters do a \cs{clearpage}. This ensures that
+% the hyper link from the table of contents leads to the line above
+% the heading, rather than the line below it.
+%\begin{macro}{\@p@glossarysection}
+%\changes{1.1}{2008-02-22}{numbered sections and auto label added}
+% \begin{macrocode}
+\newcommand*{\@p@glossarysection}[2]{%
+ \glsclearpage
+ \phantomsection
+ \ifdefempty\@@glossarysecstar
+ {%
+ \csname\@@glossarysec\endcsname{#2}%
+ }%
+ {%
+ \@gls@toc{#1}{\@@glossarysec}%
+ \csname\@@glossarysec\endcsname*{#2}%
+ }%
+% \end{macrocode}
+% Do automatic labelling if required
+% \begin{macrocode}
+ \@@glossaryseclabel
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\gls@doclearpage}
+%The \cs{gls@doclearpage} command is used to issue a
+% \cs{clearpage} (or \cs{cleardoublepage}) depending
+% on whether the glossary sectional unit is a chapter. If the
+% sectional unit is something else, do nothing.
+%\changes{3.0}{2011-04-02}{replaced \cs{@ifundefined} with
+%\cs{ifcsundef}}
+%\changes{3.07}{2013-07-05}{added check for openright}
+% \begin{macrocode}
+\newcommand*{\gls@doclearpage}{%
+ \ifthenelse{\equal{\@@glossarysec}{chapter}}%
+ {%
+ \ifcsundef{cleardoublepage}%
+ {%
+ \clearpage
+ }%
+ {%
+ \ifcsdef{if@openright}%
+ {%
+ \if@openright
+ \cleardoublepage
+ \else
+ \clearpage
+ \fi
+ }%
+ {%
+ \cleardoublepage
+ }%
+ }%
+ }%
+ {}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsclearpage}
+% This just calls \cs{gls@doclearpage}, but it makes it easier to
+% have a user command so that the user can override it.
+%\changes{1.19}{2009-03-02}{new}
+% \begin{macrocode}
+\newcommand*{\glsclearpage}{\gls@doclearpage}
+% \end{macrocode}
+%\end{macro}
+%
+% The glossary is added to the table of contents if glstoc flag set.
+% If it is set, \cs{@gls@toc} will add a line to the
+% \filetype{.toc} file, otherwise it will do nothing.
+% (The first argument to \cs{@gls@toc} is the title for the
+% table of contents, the second argument is the sectioning type.)
+%\begin{macro}{\@gls@toc}
+%\changes{1.1}{2008-02-22}{numberline added}
+%\changes{4.12}{2014-11-22}{added \cs{protect} to \cs{numberline}}
+% \begin{macrocode}
+\newcommand*{\@gls@toc}[2]{%
+ \ifglstoc
+ \ifglsnumberline
+ \addcontentsline{toc}{#2}{\protect\numberline{}#1}%
+ \else
+ \addcontentsline{toc}{#2}{#1}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\section{Xindy}
+% This section defines commands that only have an effect if
+% \app{xindy} is used to sort the glossaries.
+%\begin{macro}{\glsnoxindywarning}
+% Issues a warning if \app{xindy} hasn't been specified.
+% These warnings can be suppressed by redefining
+% \cs{glsnoxindywarning} to ignore its argument
+% \begin{macrocode}
+\newcommand*{\glsnoxindywarning}[1]{%
+ \GlossariesWarning{Not in xindy mode --- ignoring \string#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsnomakeindexwarning}
+%\changes{4.24}{2016-05-27}{new}
+% Reverse for commands that may only be used with \app{makeindex}.
+% \begin{macrocode}
+\newcommand*{\glsnomakeindexwarning}[1]{%
+ \GlossariesWarning{Not in makeindex mode --- ignoring \string#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@xdyattributes}
+% Define list of attributes (\cs{string} is used in case
+% the double quote character has been made active)
+% \begin{macrocode}
+\ifglsxindy
+ \edef\@xdyattributes{\string"default\string"}%
+\fi
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@xdyattributelist}
+% Comma-separated list of attributes.
+%\changes{3.0}{2011-04-02}{new}
+% \begin{macrocode}
+\ifglsxindy
+ \edef\@xdyattributelist{}%
+\fi
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@xdylocref}
+% Define list of markup location references.
+% \begin{macrocode}
+\ifglsxindy
+ \def\@xdylocref{}
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@ifinlist}
+%\changes{3.0}{2011-04-02}{new}
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\GlsAddXdyCounters}
+%\changes{3.0}{2011-04-02}{new}
+% Need to know all the counters that will be used in location
+% numbers for Xindy. Argument may be a single counter name or a
+% comma-separated list of counter names.
+% \begin{macrocode}
+\ifglsxindy
+ \newcommand*{\@xdycounters}{\glscounter}
+ \newcommand*\GlsAddXdyCounters[1]{%
+ \@for\@gls@ctr:=#1\do{%
+% \end{macrocode}
+% Check if already in list before adding.
+% \begin{macrocode}
+ \edef\@do@addcounter{%
+ \noexpand\@gls@ifinlist{\@gls@ctr}{\@xdycounters}{}%
+ {%
+ \noexpand\edef\noexpand\@xdycounters{\@xdycounters,%
+ \noexpand\@gls@ctr}%
+ }%
+ }%
+ \@do@addcounter
+ }
+ }
+% \end{macrocode}
+% Only has an effect before \ics{writeist}:
+% \begin{macrocode}
+ \@onlypremakeg\GlsAddXdyCounters
+\else
+ \newcommand*\GlsAddXdyCounters[1]{%
+ \glsnoxindywarning\GlsAddXdyAttribute
+ }
+\fi
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@disabled@glsaddxdycounters}
+% Counters must all be identified before adding attributes.
+% \begin{macrocode}
+\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}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\GlsAddXdyAttribute}
+% Adds an attribute.
+% \begin{macrocode}
+\ifglsxindy
+% \end{macrocode}
+% First define internal command that adds an attribute for a given
+% counter (2nd argument is the counter):
+% \begin{macrocode}
+ \newcommand*\@glsaddxdyattribute[2]{%
+% \end{macrocode}
+% Add to xindy attribute list
+% \begin{macrocode}
+ \edef\@xdyattributes{\@xdyattributes ^^J \string"#1\string" ^^J
+ \string"#2#1\string"}%
+% \end{macrocode}
+% Add to xindy markup location.
+% \begin{macrocode}
+ \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")}%
+% \end{macrocode}
+% Define associated attribute command
+% \cs{glsX}\meta{counter}"X"\meta{attribute}\marg{Hprefix}\marg{n}
+% \begin{macrocode}
+ \expandafter\gdef\csname glsX#2X#1\endcsname##1##2{%
+ \setentrycounter[##1]{#2}\csname #1\endcsname{##2}%
+ }%
+ }
+% \end{macrocode}
+% High-level command:
+% \begin{macrocode}
+ \newcommand*\GlsAddXdyAttribute[1]{%
+% \end{macrocode}
+% Add to comma-separated attribute list
+% \begin{macrocode}
+ \ifx\@xdyattributelist\@empty
+ \edef\@xdyattributelist{#1}%
+ \else
+ \edef\@xdyattributelist{\@xdyattributelist,#1}%
+ \fi
+% \end{macrocode}
+% Iterate through all specified counters and add counter-dependent
+% attributes:
+% \begin{macrocode}
+ \@for\@this@counter:=\@xdycounters\do{%
+ \protected@edef\gls@do@addxdyattribute{%
+ \noexpand\@glsaddxdyattribute{#1}{\@this@counter}%
+ }
+ \gls@do@addxdyattribute
+ }%
+% \end{macrocode}
+% All occurrences of \cs{GlsAddXdyCounters} must be used before this
+% command
+% \begin{macrocode}
+ \let\GlsAddXdyCounters\@disabled@glsaddxdycounters
+ }
+% \end{macrocode}
+% Only has an effect before \ics{writeist}:
+% \begin{macrocode}
+ \@onlypremakeg\GlsAddXdyAttribute
+\else
+ \newcommand*\GlsAddXdyAttribute[1]{%
+ \glsnoxindywarning\GlsAddXdyAttribute}
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@addpredefinedattributes}
+% Add known attributes for all defined counters
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%\changes{4.12}{2014-11-22}{Added glsignore attribute}
+% \begin{macrocode}
+ \GlsAddXdyAttribute{glsignore}
+}
+\else
+ \let\@gls@addpredefinedattributes\relax
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@xdyuseralphabets}
+% List of additional alphabets
+% \begin{macrocode}
+\def\@xdyuseralphabets{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\GlsAddXdyAlphabet}
+% \cs{GlsAddXdyAlphabet}\marg{name}\marg{definition}
+% adds a new alphabet called \meta{name}. The definition
+% must use \app{xindy} syntax.
+% \begin{macrocode}
+\ifglsxindy
+ \newcommand*{\GlsAddXdyAlphabet}[2]{%
+ \edef\@xdyuseralphabets{%
+ \@xdyuseralphabets ^^J
+ (define-alphabet "#1" (#2))}}
+\else
+ \newcommand*{\GlsAddXdyAlphabet}[2]{%
+ \glsnoxindywarning\GlsAddXdyAlphabet}
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+% This code is only required for xindy:
+% \begin{macrocode}
+\ifglsxindy
+% \end{macrocode}
+%
+%\begin{macro}{\@gls@xdy@locationlist}
+%\changes{3.0}{2011-04-02}{new}
+% List of predefined location names.
+% \begin{macrocode}
+ \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%
+ }
+% \end{macrocode}
+%\end{macro}
+% Each location class \meta{name} has the format stored in
+% \cs{@gls@xdy@Lclass@}\meta{name}. Set up predefined
+% formats.
+%
+%\begin{macro}{\@gls@xdy@Lclass@roman-page-numbers}
+% Lower case Roman numerals (i, ii, \ldots). In the event that
+% \ics{roman} has been redefined to produce a fancy form of
+% roman numerals, attempt to work out how it will be written
+% to the output file.
+% \begin{macrocode}
+ \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
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@xdy@Lclass@Roman-page-numbers}
+% Upper case Roman numerals (I, II, \ldots).
+% \begin{macrocode}
+ \expandafter\def\csname @gls@xdy@Lclass@Roman-page-numbers\endcsname{%
+ \string"roman-numbers-uppercase\string"%
+ }%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@xdy@Lclass@arabic-page-numbers}
+% Arabic numbers (1, 2, \ldots).
+% \begin{macrocode}
+ \expandafter\def\csname @gls@xdy@Lclass@arabic-page-numbers\endcsname{%
+ \string"arabic-numbers\string"%
+ }%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@xdy@Lclass@alpha-page-numbers}
+% Lower case alphabetical (a, b, \ldots).
+% \begin{macrocode}
+ \expandafter\def\csname @gls@xdy@Lclass@alpha-page-numbers\endcsname{%
+ \string"alpha\string"%
+ }%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@xdy@Lclass@Alpha-page-numbers}
+% Upper case alphabetical (A, B, \ldots).
+% \begin{macrocode}
+ \expandafter\def\csname @gls@xdy@Lclass@Alpha-page-numbers\endcsname{%
+ \string"ALPHA\string"%
+ }%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@xdy@Lclass@Appendix-page-numbers}
+% Appendix style locations (e.g.\ A-1, A-2, \ldots, B-1, B-2,
+% \ldots). The separator is given by \ics{@glsAlphacompositor}.
+% \begin{macrocode}
+ \expandafter\def\csname @gls@xdy@Lclass@Appendix-page-numbers\endcsname{%
+ \string"ALPHA\string"
+ :sep \string"\@glsAlphacompositor\string"
+ \string"arabic-numbers\string"%
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@xdy@Lclass@arabic-section-numbers}
+% Section number style locations (e.g.\ 1.1, 1.2, \ldots). The
+% compositor is given by \ics{glscompositor}.
+% \begin{macrocode}
+ \expandafter\def\csname @gls@xdy@Lclass@arabic-section-numbers\endcsname{%
+ \string"arabic-numbers\string"
+ :sep \string"\glscompositor\string"
+ \string"arabic-numbers\string"%
+ }%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@xdyuserlocationdefs}
+% List of additional location definitions
+% (separated by "^^J")
+% \begin{macrocode}
+ \def\@xdyuserlocationdefs{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@xdyuserlocationnames}
+% List of additional user location names
+% \begin{macrocode}
+ \def\@xdyuserlocationnames{}
+% \end{macrocode}
+%\end{macro}
+%
+% End of xindy-only block:
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+%\begin{macro}{\@xdycrossrefhook}
+%\changes{4.30}{2017-06-11}{new}
+%Hook used after writing cross-reference class information.
+% \begin{macrocode}
+\ifglsxindy
+ \newcommand\@xdycrossrefhook{}
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\GlsAddXdyLocation}
+% \cs{GlsAddXdyLocation}\oarg{prefix-loc}\marg{name}\marg{definition}
+% Define a new location called \meta{name}. The definition
+% must use \app{xindy} syntax. (Note that this doesn't
+% check to see if the location is already defined. That is left
+% to \app{xindy} to complain about.)
+% \begin{macrocode}
+\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
+% \end{macrocode}
+%\changes{4.30}{2017-06-11}{bug fix: changed \#1 to \#2}
+% \begin{macrocode}
+ \edef\@xdyuserlocationnames{%
+ \@xdyuserlocationnames^^J\space\space\space
+ \string"#2\string"}%
+ }
+% \end{macrocode}
+% Only has an effect before \ics{writeist}:
+% \begin{macrocode}
+ \@onlypremakeg\GlsAddXdyLocation
+\else
+ \newcommand*{\GlsAddXdyLocation}[2]{%
+ \glsnoxindywarning\GlsAddXdyLocation}
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@xdylocationclassorder}
+% Define location class order
+%\changes{4.30}{2017-06-11}{bug fix: changed \cs{edef} to \cs{def}}
+% \begin{macrocode}
+\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
+% \end{macrocode}
+%\end{macro}
+% Change the location order.
+%\begin{macro}{\GlsSetXdyLocationClassOrder}
+% \begin{macrocode}
+\ifglsxindy
+ \newcommand*\GlsSetXdyLocationClassOrder[1]{%
+ \def\@xdylocationclassorder{#1}}
+\else
+ \newcommand*\GlsSetXdyLocationClassOrder[1]{%
+ \glsnoxindywarning\GlsSetXdyLocationClassOrder}
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@xdysortrules}
+% Define sort rules
+% \begin{macrocode}
+\ifglsxindy
+ \def\@xdysortrules{}
+\fi
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\GlsAddSortRule}
+% Add a sort rule
+% \begin{macrocode}
+\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
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@xdyrequiredstyles}
+% Define list of required styles (this should be a comma-separated
+% list of \app{xindy} styles)
+% \begin{macrocode}
+\ifglsxindy
+ \def\@xdyrequiredstyles{tex}
+\fi
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\GlsAddXdyStyle}
+% Add a \app{xindy} style to the list of required styles
+% \begin{macrocode}
+\ifglsxindy
+ \newcommand*\GlsAddXdyStyle[1]{%
+ \edef\@xdyrequiredstyles{\@xdyrequiredstyles,#1}}%
+\else
+ \newcommand*\GlsAddXdyStyle[1]{%
+ \glsnoxindywarning\GlsAddXdyStyle}
+\fi
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\GlsSetXdyStyles}
+% Reset the list of required styles
+% \begin{macrocode}
+\ifglsxindy
+ \newcommand*\GlsSetXdyStyles[1]{%
+ \edef\@xdyrequiredstyles{#1}}
+\else
+ \newcommand*\GlsSetXdyStyles[1]{%
+ \glsnoxindywarning\GlsSetXdyStyles}
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\findrootlanguage}
+%\changes{3.06}{2013/06/17}{Obsoleted}
+% This used to determine the root language, using a~bit of trickery
+% since \sty{babel} doesn't supply the information, but now that
+% \sty{babel} is once again actively maintained, we can't do this
+% any more, so \cs{findrootlanguage} is no longer available. Now
+% provide a command that does nothing (in case it's been patched),
+% but this may be removed completely in the future.
+% \begin{macrocode}
+\newcommand*{\findrootlanguage}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@xdylanguage}
+% The \app{xindy} language setting is required by
+% \app{makeglossaries}, so provide a command for
+% \app{makeglossaries} to pick up the information
+% from the auxiliary file. This command is not needed by the
+% \sty{glossaries} package, so define it to ignore its arguments.
+% \begin{macrocode}
+\def\@xdylanguage#1#2{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\GlsSetXdyLanguage}
+% Define a command that allows the user to set the language
+% for a given glossary type. The first argument indicates the
+% glossary type. If omitted the main glossary is assumed.
+% \begin{macrocode}
+\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
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@codepage}
+% The \app{xindy} codepage setting is required by
+% \app{makeglossaries}, so provide a command for
+% \app{makeglossaries} to pick up the information
+% from the auxiliary file. This command is not needed by the
+% \sty{glossaries} package, so define it to ignore its arguments.
+% \begin{macrocode}
+\def\@gls@codepage#1#2{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\GlsSetXdyCodePage}
+% Define command to set the code page.
+% \begin{macrocode}
+\ifglsxindy
+ \newcommand*{\GlsSetXdyCodePage}[1]{%
+ \renewcommand*{\gls@codepage}{#1}%
+ }
+% \end{macrocode}
+%\changes{3.07}{2013-07-05}{Added check for fontspec}
+% Suggested by egreg:
+% \begin{macrocode}
+ \AtBeginDocument{%
+ \ifx\gls@codepage\@empty
+ \@ifpackageloaded{fontspec}{\def\gls@codepage{utf8}}{}%
+ \fi
+ }
+\else
+ \newcommand*{\GlsSetXdyCodePage}[1]{%
+ \glsnoxindywarning\GlsSetXdyCodePage}
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@xdylettergroups}
+% Store letter group definitions.
+% \begin{macrocode}
+\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
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\GlsAddLetterGroup}
+% Add a new letter group. The first argument is the name
+% of the letter group. The second argument is the \app{xindy}
+% code specifying prefixes and ordering.
+% \begin{macrocode}
+ \newcommand*\GlsAddLetterGroup[2]{%
+ \expandafter\toks@\expandafter{\@xdylettergroups}%
+ \protected@edef\@xdylettergroups{\the\toks@^^J%
+ (define-letter-group \string"#1\string"^^J\space\space\space#2)}%
+ }%
+% \end{macrocode}
+%\end{macro}
+%
+%\section{Loops and conditionals}
+%\begin{macro}{\forallglossaries}
+% To iterate through all glossaries (or comma-separated list of
+% glossary names given in optional argument) use:
+%\begin{definition}
+% \cs{forallglossaries}\oarg{glossary list}\marg{cmd}\marg{code}
+%\end{definition}
+% where \meta{cmd} is
+% a control sequence which will be set to the name of the
+% glossary in the current iteration.
+%\changes{2.01}{2009 May 30}{replaced \cs{ifthenelse} with \cs{ifx}}
+% \begin{macrocode}
+\newcommand*{\forallglossaries}[3][\@glo@types]{%
+ \@for#2:=#1\do{\ifx#2\@empty\else#3\fi}%
+}
+% \end{macrocode}
+%\end{macro}
+
+%\begin{macro}{\forallacronyms}
+%\changes{4.08}{2014-07-30}{new}
+% \begin{macrocode}
+\newcommand*{\forallacronyms}[2]{%
+ \@for#1:=\@glsacronymlists\do{\ifx#1\@empty\else#2\fi}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\forglsentries}
+% To iterate through all entries in a given glossary use:
+%\begin{definition}
+%\cs{forglsentries}\oarg{type}\marg{cmd}\marg{code}
+%\end{definition}
+%where \meta{type} is the glossary label and \meta{cmd} is a
+% control sequence which will be set to the entry label in the
+% current iteration.
+%\changes{2.01}{2009 May 30}{replaced \cs{ifthenelse} with \cs{ifx}}
+%\changes{3.11a}{2013-10-15}{replaced \cs{ifx} with \cs{ifdefempty}}
+% \begin{macrocode}
+\newcommand*{\forglsentries}[3][\glsdefaulttype]{%
+ \edef\@@glo@list{\csname glolist@#1\endcsname}%
+ \@for#2:=\@@glo@list\do
+ {%
+ \ifdefempty{#2}{}{#3}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\forallglsentries}
+% To iterate through all glossary entries over all glossaries listed
+% in the optional argument (the default is all glossaries) use:
+%\begin{definition}
+% \cs{forallglsentries}\oarg{glossary list}\marg{cmd}\marg{code}
+%\end{definition}
+% Within \cs{forallglsentries}, the current glossary type
+% is given by \cs{@@this@glo@}.
+% \begin{macrocode}
+\newcommand*{\forallglsentries}[3][\@glo@types]{%
+ \expandafter\forallglossaries\expandafter[#1]{\@@this@glo@}%
+ {%
+ \forglsentries[\@@this@glo@]{#2}{#3}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ifglossaryexists}
+% To check to see if a glossary exists use:
+%\begin{definition}
+%\cs{ifglossaryexists}\marg{type}\marg{true-text}\marg{false-text}
+%\end{definition}
+%where \meta{type} is the glossary's label.
+%\changes{3.0}{2011-04-02}{replaced \cs{@ifundefined} with
+%\cs{ifcsundef}}
+% \begin{macrocode}
+\newcommand{\ifglossaryexists}[3]{%
+ \ifcsundef{@glotype@#1@out}{#3}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Since the label is used to form the name of control sequences, by
+% default UTF8 etc characters can't be used in the label. A possible
+% workaround is to use \ics{scantokens}, but commands such as
+% \ics{glsentrytext} will no longer be usable in sectioning, caption
+% etc commands. If the user really wants to be able to construct a
+% label with UTF8 characters, allow them the means to do so (but on
+% their own head be it, if they then use entries in \ics{section}
+% etc). This can be done via:
+%\begin{verbatim}
+%\renewcommand*{\glsdetoklabel}[1]{\scantokens{#1\noexpand}}
+%\end{verbatim}
+% (Note, don't use \ics{detokenize} or it will cause commands like
+% \ics{glsaddall} to fail.)
+% Since redefining \cs{glsdetoklabel} can cause things to go
+% badly wrong, I'm not going to mention it in the main user guide.
+% Only advanced users who know what they're doing ought to attempt
+% it.
+%\begin{macro}{\glsdetoklabel}
+%\changes{4.03}{2014-01-20}{new}
+% \begin{macrocode}
+\newcommand*{\glsdetoklabel}[1]{#1}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ifglsentryexists}
+% To check to see if a glossary entry has been defined use:
+%\begin{definition}
+% \cs{ifglsentryexists}\marg{label}\marg{true text}\marg{false text}
+%\end{definition}
+%where \meta{label} is the entry's label.
+%\changes{3.0}{2011-04-02}{replaced \cs{@ifundefined} with
+%\cs{ifcsundef}}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand{\ifglsentryexists}[3]{%
+ \ifcsundef{glo@\glsdetoklabel{#1}@name}{#3}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ifglsused}
+% To determine if given glossary entry has been
+% used in the document text yet use:
+%\begin{definition}
+% \cs{ifglsused}\marg{label}\marg{true text}\marg{false text}
+%\end{definition}
+% where \meta{label} is the entry's label.
+% If true it will do \meta{true text}
+% otherwise it will do \meta{false text}.
+%\changes{3.11a}{2013-10-15}{replaced \cs{ifthenelse} with
+%\cs{ifbool}}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\ifglsused}[3]{%
+ \ifbool{glo@\glsdetoklabel{#1}@flag}{#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%The following two commands will cause an error if the given
+% condition fails:
+%
+%\begin{macro}{\glsdoifexists}
+%\begin{definition}
+%\cs{glsdoifexists}\marg{label}\marg{code}
+%\end{definition}
+% Generate an error if entry specified by \meta{label} doesn't
+% exists, otherwise do \meta{code}.
+% \begin{macrocode}
+\newcommand{\glsdoifexists}[2]{%
+ \ifglsentryexists{#1}{#2}{%
+ \PackageError{glossaries}{Glossary entry `\glsdetoklabel{#1}'
+ has not been defined}{You need to define a glossary entry before you
+ can use it.}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsdoifnoexists}
+%\cs{glsdoifnoexists}\marg{label}\marg{code}\par
+% The opposite: only do second argument if the entry doesn't
+% exists. Generate an error message if it exists.
+% \begin{macrocode}
+\newcommand{\glsdoifnoexists}[2]{%
+ \ifglsentryexists{#1}{%
+ \PackageError{glossaries}{Glossary entry `\glsdetoklabel{#1}' has already
+ been defined}{}}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsdoifexistsorwarn}
+%\begin{definition}
+%\cs{glsdoifexistsorwarn}\marg{label}\marg{code}
+%\end{definition}
+% Generate a warning if entry specified by \meta{label} doesn't
+% exists, otherwise do \meta{code}.
+%\changes{4.03}{2014-01-20}{new}
+% \begin{macrocode}
+\newcommand{\glsdoifexistsorwarn}[2]{%
+ \ifglsentryexists{#1}{#2}{%
+ \GlossariesWarning{Glossary entry `\glsdetoklabel{#1}'
+ has not been defined}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsdoifexistsordo}
+%\begin{definition}
+%\cs{glsdoifexistsordo}\marg{label}\marg{code}\marg{undef code}
+%\end{definition}
+% Generate an error and do \meta{undef code} if entry specified by \meta{label} doesn't
+% exists, otherwise do \meta{code}.
+%\changes{4.19}{2015-11-22}{new}
+% \begin{macrocode}
+\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%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\doifglossarynoexistsordo}
+%\begin{definition}
+%\cs{doifglossarynoexistsordo}\marg{label}\marg{code}\marg{else code}
+%\end{definition}
+%\changes{4.19}{2015-11-22}{new}
+%If glossary given by \meta{label} doesn't exist do \meta{code}
+%otherwise generate an error and do \meta{else code}.
+% \begin{macrocode}
+\newcommand{\doifglossarynoexistsordo}[3]{%
+ \ifglossaryexists{#1}%
+ {%
+ \PackageError{glossaries}{Glossary type `#1' already exists}{}%
+ #3%
+ }%
+ {#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ifglshaschildren}
+% \cs{ifglshaschildren}\marg{label}\marg{true part}\marg{false part}
+%\changes{3.02}{2012-05-21}{new}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand{\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
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ifglshasparent}
+%\begin{definition}
+% \cs{ifglshasparent}\marg{label}\marg{true part}\marg{false part}
+%\end{definition}
+%\changes{3.02}{2012-05-21}{new}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand{\ifglshasparent}[3]{%
+ \glsdoifexists{#1}%
+ {%
+ \ifcsempty{glo@\glsdetoklabel{#1}@parent}{#3}{#2}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ifglshasdesc}
+%\cs{ifglshasdesc}\marg{label}\marg{true part}\marg{false part}
+%\changes{3.08a}{2013-09-28}{new}
+%\changes{3.11a}{2013-10-15}{replaced \cs{ifdefempty} with
+%\cs{ifcsempty}}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\ifglshasdesc}[3]{%
+ \ifcsempty{glo@\glsdetoklabel{#1}@desc}%
+ {#3}%
+ {#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ifglsdescsuppressed}
+%\cs{ifglsdescsuppressed}\marg{label}\marg{true part}\marg{false part}
+%\changes{3.08a}{2013-09-28}{new}
+% Does \meta{true part} if the description is just \cs{nopostdesc}
+% otherwise does \meta{false part}.
+%\changes{4.03}{2014-01-20}{fixed typo}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\ifglsdescsuppressed}[3]{%
+ \ifcsequal{glo@\glsdetoklabel{#1}@desc}{@no@post@desc}%
+ {#2}%
+ {#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ifglshassymbol}
+%\cs{ifglshassymbol}\marg{label}\marg{true part}\marg{false part}
+%\changes{3.08a}{2013-09-28}{new}
+%\changes{3.09a}{2013-10-09}{changed test to check for
+%\cs{@gls@default@symbol}}
+%\changes{3.11a}{2013-10-15}{replaced \cs{ifdefempty} with
+%\cs{ifcsempty}}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+%\changes{4.03}{2014-01-20}{replaced \cs{ifcsempty} with
+%\cs{ifdefempty} and replaced \cs{ifx} with \cs{ifdefequal}}
+% \begin{macrocode}
+\newcommand*{\ifglshassymbol}[3]{%
+ \letcs{\@glo@symbol}{glo@\glsdetoklabel{#1}@symbol}%
+ \ifdefempty\@glo@symbol
+ {#3}%
+ {%
+ \ifdefequal\@glo@symbol\@gls@default@value
+ {#3}%
+ {#2}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ifglshaslong}
+%\cs{ifglshaslong}\marg{label}\marg{true part}\marg{false part}
+%\changes{3.11a}{2013-10-15}{new}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\ifglshaslong}[3]{%
+ \letcs{\@glo@long}{glo@\glsdetoklabel{#1}@long}%
+ \ifdefempty\@glo@long
+ {#3}%
+ {%
+ \ifdefequal\@glo@long\@gls@default@value
+ {#3}%
+ {#2}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ifglshasshort}
+%\cs{ifglshasshort}\marg{label}\marg{true part}\marg{false part}
+%\changes{3.11a}{2013-10-15}{new}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\ifglshasshort}[3]{%
+ \letcs{\@glo@short}{glo@\glsdetoklabel{#1}@short}%
+ \ifdefempty\@glo@short
+ {#3}%
+ {%
+ \ifdefequal\@glo@short\@gls@default@value
+ {#3}%
+ {#2}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ifglshasfield}
+%\changes{4.03}{2014-01-20}{new}
+%\begin{definition}
+%\cs{ifglshasfield}\marg{field}\marg{label}\marg{true part}\marg{false
+%part}
+%\end{definition}
+% \begin{macrocode}
+\newcommand*{\ifglshasfield}[4]{%
+ \glsdoifexists{#2}%
+ {%
+ \letcs{\@glo@thisvalue}{glo@\glsdetoklabel{#2}@#1}%
+% \end{macrocode}
+% First check supplied field label is defined.
+% \begin{macrocode}
+ \ifdef\@glo@thisvalue
+ {%
+% \end{macrocode}
+% Is defined, so now check if empty.
+% \begin{macrocode}
+ \ifdefempty\@glo@thisvalue
+ {%
+% \end{macrocode}
+% Is empty, so doesn't have field set.
+% \begin{macrocode}
+ #4%
+ }%
+ {%
+% \end{macrocode}
+% Not empty, so check if set to \cs{@gls@default@value}
+% \begin{macrocode}
+ \ifdefequal\@glo@thisvalue\@gls@default@value
+ {%
+% \end{macrocode}
+% Value is set to the default value.
+% \begin{macrocode}
+ #4%
+ }%
+ {%
+% \end{macrocode}
+% Non-empty, non-default value. Allow user to access this value
+% through \cs{glscurrentfieldvalue}.
+%\changes{4.23}{2016-04-30}{added \cs{glscurrentfieldvalue}}
+% \begin{macrocode}
+ \let\glscurrentfieldvalue\@glo@thisvalue
+ #3%
+ }%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Field given isn't defined, so check if mapping exists.
+% \begin{macrocode}
+ \@gls@fetchfield{\@gls@thisfield}{#1}%
+% \end{macrocode}
+% If \cs{@gls@thisfield} is defined, we've found a map. If not, the
+% field supplied doesn't exist.
+% \begin{macrocode}
+ \ifdef\@gls@thisfield
+ {%
+% \end{macrocode}
+% Is defined, so now check if empty.
+% \begin{macrocode}
+ \letcs{\@glo@thisvalue}{glo@\glsdetoklabel{#2}@\@gls@thisfield}%
+ \ifdefempty\@glo@thisvalue
+ {%
+% \end{macrocode}
+% Is empty so field hasn't been set.
+% \begin{macrocode}
+ #4%
+ }%
+ {%
+% \end{macrocode}
+% Isn't empty so check if it's been set to \cs{@gls@default@value}.
+% \begin{macrocode}
+ \ifdefequal\@glo@thisvalue\@gls@default@value
+ {%
+% \end{macrocode}
+% Value is set to the default value.
+% \begin{macrocode}
+ #4%
+ }%
+ {%
+% \end{macrocode}
+% Non-empty, non-default value. Allow user to access this value
+% through \cs{glscurrentfieldvalue}.
+%\changes{4.23}{2016-04-30}{added \cs{glscurrentfieldvalue}}
+% \begin{macrocode}
+ \let\glscurrentfieldvalue\@glo@thisvalue
+ #3%
+ }%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Not defined.
+% \begin{macrocode}
+ \GlossariesWarning{Unknown entry field `#1'}%
+ #4%
+ }%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glscurrentfieldvalue}
+%\changes{4.23}{2016-04-30}{new}
+% \begin{macrocode}
+\newcommand*{\glscurrentfieldvalue}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\section{Defining new glossaries}\label{sec:newglos}
+% A comma-separated list of glossary names is stored
+% in \cs{@glo@types}. When a new glossary type
+% is created, its identifying name is added to this list.
+% This is used by commands that iterate through all glossaries
+% (such as \ics{makeglossaries} and \ics{printglossaries}).
+%\begin{macro}{\@glo@types}
+% \begin{macrocode}
+\newcommand*{\@glo@types}{,}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@provide@newglossary}
+%\changes{3.10a}{2013-10-13}{new}
+% If the user removes the glossary package from their document,
+% ensure the next run doesn't throw a load of undefined control
+% sequence errors when the aux file is parsed.
+% \begin{macrocode}
+\newcommand*\@gls@provide@newglossary{%
+ \protected@write\@auxout{}{\string\providecommand\string\@newglossary[4]{}}%
+% \end{macrocode}
+% Only need to do this once.
+% \begin{macrocode}
+ \let\@gls@provide@newglossary\relax
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\defglsentryfmt}
+%\changes{3.11a}{2013-10-15}{new}
+% Allow different glossaries to have different display styles.
+% \begin{macrocode}
+\newcommand*{\defglsentryfmt}[2][\glsdefaulttype]{%
+ \csgdef{gls@#1@entryfmt}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\gls@doentryfmt}
+%\changes{3.11a}{2013-10-15}{new}
+% \begin{macrocode}
+\newcommand*{\gls@doentryfmt}[1]{\csuse{gls@#1@entryfmt}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@forbidtexext}
+%\changes{4.08}{2014-07-30}{new}
+% As a security precaution, don't allow the user to specify a `tex'
+% extension for any of the glossary files. (Just in case a seriously
+% confused novice user doesn't know what they're doing.) The
+% argument must be a control sequence whose replacement text is the
+% requested extension.
+% \begin{macrocode}
+\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.}%
+ }%
+ {%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\gls@gobbleopt}
+% Discard optional argument.
+%\changes{4.19}{2015-11-22}{new}
+% \begin{macrocode}
+\newcommand*{\gls@gobbleopt}{\new@ifnextchar[{\@gls@gobbleopt}{}}
+\def\@gls@gobbleopt[#1]{}
+% \end{macrocode}
+%\end{macro}
+%
+% A new glossary type is defined using \cs{newglossary}.
+% Syntax:
+%\begin{definition}
+%\cs{newglossary}\oarg{log-ext}\marg{name}\marg{in-ext}\marg{out-ext}%
+%\marg{title}\oarg{counter}
+%\end{definition}
+% where \meta{log-ext} is the extension of the \app{makeindex}
+% transcript file, \meta{in-ext} is the extension of the glossary
+% input file (read in by \ics{printglossary} and created by
+% \app{makeindex}), \meta{out-ext} is the extension of the
+% glossary output file which is read in by \app{makeindex}
+% (lines are written to this file by the \ics{glossary} command),
+% \meta{title} is the title of the glossary that is used in
+% \ics{glossarysection} and
+% \meta{counter} is the default counter to be used by entries
+% belonging to this glossary. The \app{makeglossaries} Perl
+% script reads in the relevant extensions from the auxiliary file,
+% and passes the appropriate file names and switches to
+% \app{makeindex}.
+%\begin{macro}{\newglossary}
+%\changes{4.08}{2014-07-30}{added starred version}
+% \begin{macrocode}
+\newcommand*{\newglossary}{\@ifstar\s@newglossary\ns@newglossary}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\s@newglossary}
+% The starred version will construct the extension based on the
+% label.
+%\changes{4.08}{2014-07-30}{new}
+% \begin{macrocode}
+\newcommand*{\s@newglossary}[2]{%
+ \ns@newglossary[#1-glg]{#1}{#1-gls}{#1-glo}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ns@newglossary}
+%\changes{4.08}{2014-07-30}{new}
+% Define the unstarred version.
+% \begin{macrocode}
+\newcommand*{\ns@newglossary}[5][glg]{%
+ \doifglossarynoexistsordo{#2}%
+ {%
+% \end{macrocode}
+% Check if default has been set
+% \begin{macrocode}
+ \ifundef\glsdefaulttype
+ {%
+ \gdef\glsdefaulttype{#2}%
+ }{}%
+% \end{macrocode}
+% Add this to the list of glossary types:
+% \begin{macrocode}
+ \toks@{#2}\edef\@glo@types{\@glo@types\the\toks@,}%
+% \end{macrocode}
+% Define a comma-separated list of labels for this glossary type,
+% so that all the entries for this glossary can be reset with a
+% single command. When a new entry is created, its label is added
+% to this list.
+% \begin{macrocode}
+ \expandafter\gdef\csname glolist@#2\endcsname{,}%
+% \end{macrocode}
+% Store the file extensions:
+%\changes{4.08}{2014-07-30}{added \cs{@glotype@\meta{name}@log}}
+% \begin{macrocode}
+ \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
+% \end{macrocode}
+% Store the title:
+% \begin{macrocode}
+ \expandafter\def\csname @glotype@#2@title\endcsname{#5}%
+% \end{macrocode}
+%\changes{3.10a}{2013-10-13}{added \cs{@gls@provide@newglossary}}
+% \begin{macrocode}
+ \@gls@provide@newglossary
+ \protected@write\@auxout{}{\string\@newglossary{#2}{#1}{#3}{#4}}%
+% \end{macrocode}
+% How to display this entry in the document text (uses
+% \cs{glsentry} by
+% default). This can be redefined by the user later if required
+% (see \ics{defglsentry}). This
+% may already have been defined if this has been specified as
+% a list of acronyms.
+%\changes{2.04}{2009-11-10}{added check to determine if
+% \cs{gls@\meta{type}@display} and \cs{gls@\meta{type}@displayfirst}
+% have been defined.}
+%\changes{3.0}{2011-04-02}{replaced \cs{@ifundefined} with
+%\cs{ifcsundef}}
+%\changes{3.11a}{2013-10-15}{replaced \cs{glsdisplay} and
+%\cs{glsdisplayfirst} with \cs{glsentryfmt}}
+% \begin{macrocode}
+ \ifcsundef{gls@#2@entryfmt}%
+ {%
+ \defglsentryfmt[#2]{\glsentryfmt}%
+ }%
+ {}%
+% \end{macrocode}
+% Define sort counter if required:
+%\changes{3.0}{2011-04-02}{added \cs{@gls@defsortcount}}
+% \begin{macrocode}
+ \@gls@defsortcount{#2}%
+% \end{macrocode}
+% Find out if the final optional argument has been specified, and
+% use it to set the counter associated with this glossary. (Uses
+% \ics{glscounter} if no optional argument is present.)
+% \begin{macrocode}
+ \@ifnextchar[{\@gls@setcounter{#2}}%
+ {\@gls@setcounter{#2}[\glscounter]}%
+ }%
+ {%
+ \gls@gobbleopt
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\altnewglossary}
+%\changes{2.06}{2010-06-14}{new}
+% \begin{macrocode}
+\newcommand*{\altnewglossary}[3]{%
+ \newglossary[#2-glg]{#1}{#2-gls}{#2-glo}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+% Only define new glossaries in the preamble:
+% \begin{macrocode}
+\@onlypreamble{\newglossary}
+% \end{macrocode}
+% Only define new glossaries before \ics{makeglossaries}
+% \begin{macrocode}
+\@onlypremakeg\newglossary
+% \end{macrocode}
+%\cs{@newglossary} is used to specify the file extensions
+% for the \app{makeindex} input, output and transcript files.
+% It is written to the auxiliary file by \ics{newglossary}.
+% Since it is not used by \LaTeX, \cs{@newglossary} simply
+% ignores its arguments.
+%\begin{macro}{\@newglossary}
+% \begin{macrocode}
+\newcommand*{\@newglossary}[4]{}
+% \end{macrocode}
+%\end{macro}
+% Store counter to be used for given glossary type (the first
+% argument is the glossary label, the second argument is the name
+% of the counter):
+%\begin{macro}{\@gls@setcounter}
+% \begin{macrocode}
+\def\@gls@setcounter#1[#2]{%
+ \expandafter\def\csname @glotype@#1@counter\endcsname{#2}%
+% \end{macrocode}
+% Add counter to xindy list, if not already added:
+% \begin{macrocode}
+ \ifglsxindy
+ \GlsAddXdyCounters{#2}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+% Get counter associated with given glossary (the argument is
+% the glossary label):
+%\begin{macro}{\@gls@getcounter}
+% \begin{macrocode}
+\newcommand*{\@gls@getcounter}[1]{%
+ \csname @glotype@#1@counter\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Define the main glossary. This will be the first glossary to
+% be displayed when using \ics{printglossaries}.
+% \begin{macrocode}
+\glsdefmain
+% \end{macrocode}
+% Define the \qt{acronym} glossaries if required.
+% \begin{macrocode}
+\@gls@do@acronymsdef
+% \end{macrocode}
+% Define the \qt{symbols}, \qt{numbers} and \qt{index} glossaries if required.
+% \begin{macrocode}
+\@gls@do@symbolsdef
+\@gls@do@numbersdef
+\@gls@do@indexdef
+% \end{macrocode}
+%
+%\begin{macro}{\newignoredglossary}
+% Creates a new glossary that doesn't have associated files.
+% This glossary is ignored by and 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}
+% \begin{macrocode}
+\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}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@ignored@glossaries}
+% List of ignored glossaries.
+%\changes{4.08}{2014-07-30}{new}
+% \begin{macrocode}
+\newcommand*{\@ignored@glossaries}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ifignoredglossary}
+% Tests if the given glossary is an ignored glossary.
+% Expansion is used in case the first argument is a control
+% sequence.
+%\changes{4.08}{2014-07-30}{new}
+% \begin{macrocode}
+\newcommand*{\ifignoredglossary}[3]{%
+ \edef\@gls@igtype{#1}%
+ \expandafter\DTLifinlist\expandafter
+ {\@gls@igtype}{\@ignored@glossaries}{#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\section{Defining new entries}\label{sec:newentry}
+% New glossary entries are defined using \cs{newglossaryentry}.
+% This command requires a label and a key-value list that defines
+% the relevant information for that entry. The definition for these
+% keys follows. Note that the \gloskey{name},
+% \gloskey{description} and \gloskey{symbol} keys will be
+% sanitized later, depending on the value of the package option
+% \pkgopt{sanitize} (this means that if some of the keys haven't
+% been defined, they can be constructed from the \gloskey{name}
+% and \gloskey{description} key before they are sanitized).
+%
+%
+%\begin{key}{name}
+%The \gloskey{name} key indicates the name
+% of the term being defined. This is how the term will appear in
+% the glossary. The \gloskey{name} key is required when defining
+% a new glossary entry.
+% \begin{macrocode}
+\define@key{glossentry}{name}{%
+\def\@glo@name{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%
+%\begin{key}{description}
+% The \gloskey{description} key is usually only used in
+% the glossary, but can be made to appear in the text by redefining
+% \ics{glsentryfmt} or using \ics{defglsentryfmt}. The
+% \gloskey{description} key is required when
+% defining a new glossary entry. If a long description is required,
+% use \ics{longnewglossaryentry} instead of \ics{newglossaryentry}.
+% \begin{macrocode}
+\define@key{glossentry}{description}{%
+\def\@glo@desc{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%\begin{key}{descriptionplural}
+% \changes{1.12}{2008-03-08}{new}
+% \begin{macrocode}
+\define@key{glossentry}{descriptionplural}{%
+\def\@glo@descplural{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%
+%\begin{key}{sort}
+% The \gloskey{sort} key needs to be sanitized here
+% (the sort key is provided for \app{makeindex}'s benefit,
+% not for use in the document). The \gloskey{sort} key is optional
+% when defining a new glossary entry. If omitted, the value
+% is given by \meta{name} \meta{description}.
+%\changes{1.18}{2009-01-14}{moved sanitization to
+%\cs{newglossaryentry}}
+% \begin{macrocode}
+\define@key{glossentry}{sort}{%
+\def\@glo@sort{#1}}
+% \end{macrocode}
+%\end{key}
+%
+%\begin{key}{text}
+% The \gloskey{text} key determines how the term should appear when
+% used in the document (i.e.\ outside of the glossary). If omitted,
+% the value of the \gloskey{name} key is used instead.
+% \begin{macrocode}
+\define@key{glossentry}{text}{%
+\def\@glo@text{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%
+%\begin{key}{plural}
+% The \gloskey{plural} key determines how the plural form of the term
+% should be displayed in the document. If omitted, the plural is
+% constructed by appending \ics{glspluralsuffix} to the value of the
+% \gloskey{text} key.
+% \begin{macrocode}
+\define@key{glossentry}{plural}{%
+\def\@glo@plural{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%
+%\begin{key}{first}
+% The \gloskey{first} key determines how the entry should be displayed
+% in the document when it is first used. If omitted, it is taken
+% to be the same as the value of the \gloskey{text} key.
+% \begin{macrocode}
+\define@key{glossentry}{first}{%
+\def\@glo@first{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%
+%\begin{key}{firstplural}
+% The \gloskey{firstplural} key is used to set the plural form for
+% first use, in the event that the plural is required the first
+% time the term is used. If omitted, it is constructed by
+% appending \ics{glspluralsuffix} to the value of the \gloskey{first} key.
+% \begin{macrocode}
+\define@key{glossentry}{firstplural}{%
+\def\@glo@firstplural{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%\begin{macro}{\@gls@default@value}
+%\changes{3.09a}{2013-10-09}{new}
+% \begin{macrocode}
+\newcommand*{\@gls@default@value}{\relax}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{key}{symbol}
+% The \gloskey{symbol} key is ignored by most of the predefined
+% glossary styles, and defaults to \cs{relax} if omitted.
+% It is provided for glossary styles that require an associated
+% symbol, as well as a name and description. To make this value
+% appear in the glossary, you need to redefine
+% \ics{glossentry}.
+% If you want this value to appear in the text when the term is used
+% by commands like \ics{gls}, you will need to change
+% \ics{glsentryfmt} (or use for \ics{defglsentryfmt} individual glossaries).
+% \begin{macrocode}
+\define@key{glossentry}{symbol}{%
+\def\@glo@symbol{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%\begin{key}{symbolplural}
+% \changes{1.12}{2008-03-08}{new}
+% \begin{macrocode}
+\define@key{glossentry}{symbolplural}{%
+\def\@glo@symbolplural{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%
+%\begin{key}{type}
+% The \gloskey{type} key specifies to which glossary this
+% entry belongs. If omitted, the default glossary is used.
+% \begin{macrocode}
+\define@key{glossentry}{type}{%
+\def\@glo@type{#1}}
+% \end{macrocode}
+%\end{key}
+%
+%\begin{key}{counter}
+% The \gloskey{counter} key specifies the name of the counter
+% associated with this glossary entry:
+%\changes{3.0}{2011-04-02}{replaced \cs{@ifundefined} with
+%\cs{ifcsundef}}
+% \begin{macrocode}
+\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}%
+ }%
+}
+% \end{macrocode}
+%\end{key}
+%
+%\begin{key}{see}
+% The \gloskey{see} key specifies a list of cross-references
+% \changes{1.17}{2008-12-26}{new}
+% \changes{3.0}{2011-04-02}{added \cs{@glo@seeautonumberlist}}
+%\changes{3.13a}{2013-11-05}{added \cs{gls@checkseeallowed}}
+% \begin{macrocode}
+\define@key{glossentry}{see}{%
+ \gls@set@xr@key{see}{\@glo@see}{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%
+%\begin{macro}{\gls@set@xr@key}
+%\changes{4.30}{2017-06-11}{new}
+%\begin{definition}
+%\cs{gls@set@xr@key}\marg{key name}\marg{cs}\marg{value}
+%\end{definition}
+%Assign a cross-reference key.
+% \begin{macrocode}
+\newcommand*{\gls@set@xr@key}[3]{%
+ \renewcommand*{\gls@xr@key}{#1}%
+ \gls@checkseeallowed
+ \def#2{#3}%
+ \@glo@seeautonumberlist
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\gls@xr@key}
+%\changes{4.30}{2017-06-11}{new}
+% \begin{macrocode}
+\newcommand*{\gls@xr@key}{see}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\gls@checkseeallowed}
+%\changes{3.13a}{2013-11-05}{new}
+% \begin{macrocode}
+\newcommand*{\gls@checkseeallowed}{%
+ \@gls@see@noindex
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\gls@checkseeallowed@preambleonly}
+%\changes{4.20}{2015-11-30}{new}
+% \begin{macrocode}
+\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}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{key}{parent}
+% The \gloskey{parent} key specifies the parent entry, if
+% required.
+% \changes{1.17}{2008-12-26}{new}
+% \begin{macrocode}
+\define@key{glossentry}{parent}{%
+\def\@glo@parent{#1}}
+% \end{macrocode}
+%\end{key}
+%
+%\begin{key}{nonumberlist}
+% The \gloskey{nonumberlist} key suppresses or activates the number list
+% for the given entry.
+%\changes{1.17}{2008-12-26}{new}
+%\changes{3.0}{2011-04-02}{now boolean}
+%\changes{4.41}{2018-07-23}{changed \cs{val} and \cs{nr} to
+%\cs{gls@nonumberlist@val} and \cs{gls@nonumberlist@nr}}
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{key}
+%
+%\begin{macro}{\@gls@savenonumberlist}
+%\changes{4.25}{2016-06-09}{new}
+%The \gloskey{nonumberlist} option isn't saved by default (as it
+%just sets the prefix) which isn't a problem when the entries are
+%defined in the preamble, but causes a problem when entries are
+%defined in the document. In this case, the value needs to be saved
+%so that it can be written to the \texttt{.glsdefs} file.
+% \begin{macrocode}
+\newcommand*{\@gls@savenonumberlist}[1]{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@gls@initnonumberlist}
+%\changes{4.25}{2016-06-09}{new}
+% \begin{macrocode}
+\newcommand*{\@gls@initnonumberlist}{}%
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@gls@initnonumberlist}
+%\changes{4.25}{2016-06-09}{new}
+% \begin{macrocode}
+\newcommand*{\@gls@storenonumberlist}[1]{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@enablesavenonumberlist}
+%\changes{4.25}{2016-06-09}{new}
+% Allow the \gloskey{nonumberlist} value to be saved.
+% \begin{macrocode}
+\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}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Define some generic user keys. (Additional keys can be added by
+% the user.)
+%\begin{key}{user1}
+% \begin{macrocode}
+\define@key{glossentry}{user1}{%
+ \def\@glo@useri{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%
+%\begin{key}{user2}
+% \begin{macrocode}
+\define@key{glossentry}{user2}{%
+ \def\@glo@userii{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%
+%\begin{key}{user3}
+% \begin{macrocode}
+\define@key{glossentry}{user3}{%
+ \def\@glo@useriii{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%
+%\begin{key}{user4}
+% \begin{macrocode}
+\define@key{glossentry}{user4}{%
+ \def\@glo@useriv{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%
+%\begin{key}{user5}
+% \begin{macrocode}
+\define@key{glossentry}{user5}{%
+ \def\@glo@userv{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%
+%\begin{key}{user6}
+% \begin{macrocode}
+\define@key{glossentry}{user6}{%
+ \def\@glo@uservi{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%
+%\begin{key}{short}
+%\changes{3.0}{2011-04-02}{new}
+% This key is provided for use by \ics{newacronym}. It's not
+% designed for general purpose use, so isn't described in the user
+% manual.
+% \begin{macrocode}
+\define@key{glossentry}{short}{%
+ \def\@glo@short{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%
+%\begin{key}{shortplural}
+%\changes{3.0}{2011-04-02}{new}
+% This key is provided for use by \ics{newacronym}.
+% \begin{macrocode}
+\define@key{glossentry}{shortplural}{%
+ \def\@glo@shortpl{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%
+%\begin{key}{long}
+%\changes{3.0}{2011-04-02}{new}
+% This key is provided for use by \ics{newacronym}.
+% \begin{macrocode}
+\define@key{glossentry}{long}{%
+ \def\@glo@long{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%
+%\begin{key}{longplural}
+%\changes{3.0}{2011-04-02}{new}
+% This key is provided for use by \ics{newacronym}.
+% \begin{macrocode}
+\define@key{glossentry}{longplural}{%
+ \def\@glo@longpl{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%
+%\begin{macro}{\@glsnoname}
+% \changes{1.17}{2008-12-26}{new}
+% Define command to generate error if \gloskey{name} key is missing.
+% \begin{macrocode}
+\newcommand*{\@glsnoname}{%
+ \PackageError{glossaries}{name key required in
+ \string\newglossaryentry\space for entry `\@glo@label'}{You
+ haven't specified the entry name}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@glsnodesc}
+% \changes{3.10a}{2013-10-13}{new}
+% Define command to generate error if \gloskey{description} key is missing.
+% \begin{macrocode}
+\newcommand*\@glsnodesc{%
+ \PackageError{glossaries}
+ {%
+ description key required in \string\newglossaryentry\space
+ for entry `\@glo@label'%
+ }%
+ {%
+ You haven't specified the entry description%
+ }%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glsdefaultplural}
+% \changes{1.17}{2008-12-26}{new}
+%\changes{3.10a}{2013-10-13}{Obsolete}
+% Now obsolete. Don't use.
+% \begin{macrocode}
+\newcommand*{\@glsdefaultplural}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@missingnumberlist}
+%\changes{3.02}{2012-05-21}{new}
+% Define a command to generate warning when numberlist not set.
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glsdefaultsort}
+% Define command to set default sort.
+% \changes{1.17}{2008-12-26}{new}
+% \begin{macrocode}
+\newcommand*{\@glsdefaultsort}{\@glo@name}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\gls@level}
+% Register to increment entry levels.
+% \begin{macrocode}
+\newcount\gls@level
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@noexpand@field}
+% \begin{macrocode}
+\newcommand{\@@gls@noexpand@field}[3]{%
+ \expandafter\global\expandafter
+ \let\csname glo@#1@#2\endcsname#3%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@gls@noexpand@fields}
+% \begin{macrocode}
+\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}}%
+% \end{macrocode}
+%\changes{3.11a}{2013-10-15}{Fixed bug \texttt{expand} replaced with
+%\texttt{noexpand}}
+% \begin{macrocode}
+ \@@gls@noexpand@field{#2}{#3}{\@gls@value}%
+ }%
+ {%
+ \@@gls@noexpand@field{#2}{#3}{#4}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@@gls@expand@field}
+% \begin{macrocode}
+\newcommand{\@@gls@expand@field}[3]{%
+ \expandafter
+ \protected@xdef\csname glo@#1@#2\endcsname{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{@gls@expand@fields}
+% \begin{macrocode}
+\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}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@startswithexpandonce}
+% \begin{macrocode}
+\def\@gls@expandonce{\expandonce}
+\def\@gls@startswithexpandonce#1#2\gls@endcheck#3#4{%
+ \def\@gls@tmp{#1}%
+ \ifdefequal{\@gls@expandonce}{\@gls@tmp}{#3}{#4}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\gls@assign@field}
+%\begin{definition}
+%\cs{gls@assign@field}\marg{def value}\marg{label}\marg{field}\marg{tmp
+%cs}
+%\end{definition}
+% Assigns an entry field. Expansion performed by default (except for
+% name, symbol and description where backward compatibility required).
+% If \meta{tmp cs} is \meta{@gls@default@value}, \meta{def value} is
+% used instead.
+%\changes{3.08a}{2013-09-28}{new}
+% \begin{macrocode}
+\let\gls@assign@field\@gls@expand@fields
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsexpandfields}
+%\changes{3.08a}{2013-09-28}{new}
+% Fully expand values when assigning fields (except for specific
+% fields that are overridden by \cs{glssetnoexpandfield}).
+% \begin{macrocode}
+\newcommand*{\glsexpandfields}{%
+ \let\gls@assign@field\@gls@expand@fields
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsnoexpandfields}
+%\changes{3.08a}{2013-09-28}{new}
+% Don't expand values when assigning fields (except for specific
+% fields that are overridden by \cs{glssetexpandfield}).
+% \begin{macrocode}
+\newcommand*{\glsnoexpandfields}{%
+ \let\gls@assign@field\@gls@noexpand@fields
+}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{\newglossaryentry}
+% Define \cs{newglossaryentry}%
+% \marg{label} \marg{key-val list}.
+% There are two required fields in \meta{key-val list}:
+% \gloskey{name} (or \gloskey{parent}) and
+% \gloskey{description}. (See above.)
+%\changes{3.0}{2011-04-02}{replaced \cs{DeclareRobustCommand} with
+%\cs{newrobustcmd}}
+% \begin{macrocode}
+\newrobustcmd{\newglossaryentry}[2]{%
+% \end{macrocode}
+% Check to see if this glossary entry has already been defined:
+% \begin{macrocode}
+ \glsdoifnoexists{#1}%
+ {%
+ \gls@defglossaryentry{#1}{#2}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\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.
+% \begin{macrocode}
+\newcommand*{\gls@defdocnewglossaryentry}{%
+ \let\gls@checkseeallowed\gls@checkseeallowed@preambleonly
+ \let\newglossaryentry\new@glossaryentry
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\provideglossaryentry}
+% Like \cs{newglossaryentry} but does nothing if the entry has
+% already been defined.
+%\changes{3.14a}{2013-11-12}{new}
+% \begin{macrocode}
+\newrobustcmd{\provideglossaryentry}[2]{%
+ \ifglsentryexists{#1}%
+ {}%
+ {%
+ \gls@defglossaryentry{#1}{#2}%
+ }%
+}
+\@onlypreamble{\provideglossaryentry}
+% \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}
+% file, if not already open, so that the entry definition can be
+% saved for the next \LaTeX\ run. This means that any glossaries at
+% the start of the document can access the entry information.
+% \begin{macrocode}
+\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}%
+}
+% \end{macrocode}
+%At the start of the document input the \texttt{.glsdefs} file if it
+%exists. This is now done by \cs{gls@begindocdefs}, which is
+%redefined by \sty{glossaries-extra}, so that
+%this step can be skipped to avoid loading an obsolete
+%\texttt{.glsdefs} file if the user switches to
+%\sty{glossaries-extra} with \texttt{docdef=restricted}.
+% \begin{macrocode}
+\AtBeginDocument{\gls@begindocdefs}
+% \end{macrocode}
+%The end of the document needs to check if the \texttt{.glsdefs}
+%file has been opened, in which case it needs to be closed.
+% \begin{macrocode}
+\AtEndDocument{\ifdef\@gls@deffile{\closeout\@gls@deffile}{}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\gls@begindocdefs}
+%\changes{4.37}{2018-04-07}{new}
+%Input the \verb|.glsdefs| file if it exists and enable document
+%definitions if permitted.
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@writedef}
+%\changes{3.10a}{2013-10-13}{new}
+% Writes glossary entry definition to \cs{@gls@deffile}.
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \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%
+ }%
+% \end{macrocode}
+% Write key value information:
+% \begin{macrocode}
+ \@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
+ }%
+ }%
+ {}%
+ }%
+% \end{macrocode}
+% Provide hook:
+% \begin{macrocode}
+ \glswritedefhook
+ \immediate\write\@gls@deffile
+ {%
+ \glspercentchar^^J%
+ \expandafter\@gobble\string\}\glspercentchar^^J%
+ \expandafter\@gobble\string\}\glspercentchar%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@keymap}
+%\changes{3.10a}{2013-10-13}{new}
+% List of entry definition key names and corresponding tag in
+% control sequence used to store the value.
+% \begin{macrocode}
+\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}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@fetchfield}
+%\changes{4.03}{2014-01-20}{new}
+%\begin{definition}
+%\cs{@gls@fetchfield}\marg{cs}\marg{field}
+%\end{definition}
+% Fetches the internal field label from the given user \meta{field} and
+% stores in \meta{cs}.
+% \begin{macrocode}
+\newcommand*{\@gls@fetchfield}[2]{%
+% \end{macrocode}
+% Ensure user field name is fully expanded
+% \begin{macrocode}
+ \edef\@gls@thisval{#2}%
+% \end{macrocode}
+% Iterate through known mappings until we find the one for this
+% field.
+% \begin{macrocode}
+ \@for\@gls@map:=\@gls@keymap\do{%
+ \edef\@this@key{\expandafter\@firstoftwo\@gls@map}%
+ \ifdefequal{\@this@key}{\@gls@thisval}%
+ {%
+% \end{macrocode}
+% Found it.
+% \begin{macrocode}
+ \edef#1{\expandafter\@secondoftwo\@gls@map}%
+% \end{macrocode}
+% Break out of loop.
+% \begin{macrocode}
+ \@endfortrue
+ }%
+ {}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsaddstoragekey}
+%\begin{definition}
+%\cs{glsaddstoragekey}\marg{key}\marg{default value}\marg{no link cs}
+%\end{definition}
+%\changes{4.16}{2015-06-18}{new}
+% Similar to \cs{glsaddkey} but intended for keys whose values
+% aren't explicitly used in the document, but might be required
+% behind the scenes by other commands.
+% \begin{macrocode}
+\newcommand*{\glsaddstoragekey}{\@ifstar\@sglsaddstoragekey\@glsaddstoragekey}
+% \end{macrocode}
+% Starred version switches on expansion for this key.
+% \begin{macrocode}
+\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}%
+}
+% \end{macrocode}
+% Unstarred version doesn't override default expansion.
+% \begin{macrocode}
+\newcommand*{\@glsaddstoragekey}[3]{%
+% \end{macrocode}
+% Check the specified key doesn't already exist.
+% \begin{macrocode}
+ \key@ifundefined{glossentry}{#1}%
+ {%
+% \end{macrocode}
+% Set up the key.
+% \begin{macrocode}
+ \define@key{glossentry}{#1}{\csdef{@glo@#1}{##1}}%
+ \appto\@gls@keymap{,{#1}{#1}}%
+% \end{macrocode}
+% Set the default value.
+% \begin{macrocode}
+ \appto\@newglossaryentryprehook{\csdef{@glo@#1}{#2}}%
+% \end{macrocode}
+% Assignment code.
+% \begin{macrocode}
+ \appto\@newglossaryentryposthook{%
+ \letcs{\@glo@tmp}{@glo@#1}%
+ \gls@assign@field{#2}{\@glo@label}{#1}{\@glo@tmp}%
+ }%
+% \end{macrocode}
+% Define the no-link commands.
+% \begin{macrocode}
+ \newcommand*{#3}[1]{\@gls@entry@field{##1}{#1}}%
+ }%
+ {%
+ \PackageError{glossaries}{Key `#1' already exists}{}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsaddkey}
+%\begin{definition}
+%\cs{glsaddkey}\marg{key}\marg{default value}\marg{no link cs}\marg{no link ucfirst
+%cs}\marg{link cs}\marg{link ucfirst cs}\marg{link allcaps cs}
+%\end{definition}
+%\changes{3.12a}{2013-10-16}{new}
+% Allow user to add their own custom keys.
+% \begin{macrocode}
+\newcommand*{\glsaddkey}{\@ifstar\@sglsaddkey\@glsaddkey}
+% \end{macrocode}
+% Starred version switches on expansion for this key.
+% \begin{macrocode}
+\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}%
+}
+% \end{macrocode}
+% Unstarred version doesn't override default expansion.
+% \begin{macrocode}
+\newcommand*{\@glsaddkey}[7]{%
+% \end{macrocode}
+% Check the specified key doesn't already exist.
+% \begin{macrocode}
+ \key@ifundefined{glossentry}{#1}%
+ {%
+% \end{macrocode}
+% Set up the key.
+% \begin{macrocode}
+ \define@key{glossentry}{#1}{\csdef{@glo@#1}{##1}}%
+ \appto\@gls@keymap{,{#1}{#1}}%
+% \end{macrocode}
+% Set the default value.
+% \begin{macrocode}
+ \appto\@newglossaryentryprehook{\csdef{@glo@#1}{#2}}%
+% \end{macrocode}
+% Assignment code.
+% \begin{macrocode}
+ \appto\@newglossaryentryposthook{%
+ \letcs{\@glo@tmp}{@glo@#1}%
+ \gls@assign@field{#2}{\@glo@label}{#1}{\@glo@tmp}%
+ }%
+% \end{macrocode}
+% Define the no-link commands.
+% \begin{macrocode}
+ \newcommand*{#3}[1]{\@gls@entry@field{##1}{#1}}%
+ \newcommand*{#4}[1]{\@Gls@entry@field{##1}{#1}}%
+% \end{macrocode}
+% Now for the commands with links. First the version with no case
+% change:
+%\changes{4.03}{2014-01-20}{switched to using \cs{@gls@field@link}}
+% \begin{macrocode}
+ \ifcsdef{@gls@user@#1@}%
+ {%
+ \PackageError{glossaries}%
+ {Can't define `\string#5' as helper command
+ `\expandafter\string\csname @gls@user@#1@\endcsname' already exists}%
+ {}%
+ }%
+ {%
+% \end{macrocode}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+%\changes{4.08}{2014-07-30}{removed \cs{@sgls@user@\meta{key}}}
+%\changes{4.09}{2014-08-12}{fixed bug in user commands}
+% \begin{macrocode}
+ \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}%
+ }%
+% \end{macrocode}
+% Next the version with the first letter converted to upper case:
+% \begin{macrocode}
+ \ifcsdef{@Gls@user@#1@}%
+ {%
+ \PackageError{glossaries}%
+ {Can't define `\string#6' as helper command
+ `\expandafter\string\csname @Gls@user@#1@\endcsname' already exists}%
+ {}%
+ }%
+ {%
+% \end{macrocode}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGls@user@\meta{key}}}
+% \begin{macrocode}
+ \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}%
+ }%
+% \end{macrocode}
+% Finally the all caps version:
+% \begin{macrocode}
+ \ifcsdef{@GLS@user@#1@}%
+ {%
+ \PackageError{glossaries}%
+ {Can't define `\string#7' as helper command
+ `\expandafter\string\csname @GLS@user@#1@\endcsname' already exists}%
+ {}%
+ }%
+ {%
+% \end{macrocode}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGLS@user@\meta{key}}}
+% \begin{macrocode}
+ \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}{}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsfieldxdef}
+%\begin{definition}
+%\cs{glsfieldxdef}\marg{label}\marg{field}\marg{definition}
+%\end{definition}
+%\changes{4.16}{2015-07-08}{new}
+%\changes{4.42}{2019-01-06}{changed from \cs{edef} to \cs{protected@csxdef}}
+% \begin{macrocode}
+\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}{}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsfieldedef}
+%\begin{definition}
+%\cs{glsfieldedef}\marg{label}\marg{field}\marg{definition}
+%\end{definition}
+%\changes{4.16}{2015-07-08}{new}
+%\changes{4.42}{2019-01-06}{changed from \cs{edef} to \cs{protected@csedef}}
+% \begin{macrocode}
+\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}{}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsfieldgdef}
+%\begin{definition}
+%\cs{glsfieldgdef}\marg{label}\marg{field}\marg{definition}
+%\end{definition}
+%\changes{4.16}{2015-07-08}{new}
+% \begin{macrocode}
+\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}{}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsfielddef}
+%\begin{definition}
+%\cs{glsfielddef}\marg{label}\marg{field}\marg{definition}
+%\end{definition}
+%\changes{4.16}{2015-07-08}{new}
+% \begin{macrocode}
+\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}{}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsfieldfetch}
+%\begin{definition}
+%\cs{glsfieldfetch}\marg{label}\marg{field}\marg{cs}
+%\end{definition}
+%\changes{4.16}{2015-07-08}{new}
+% Fetches the value of the given field and stores in the given
+% control sequence.
+% \begin{macrocode}
+\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}{}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ifglsfieldeq}
+%\begin{definition}
+%\cs{ifglsfieldeq}\marg{label}\marg{field}\marg{string}\marg{true}\marg{false}
+%\end{definition}
+%\changes{4.16}{2015-07-08}{new}
+% Tests if the value of the given field is equal to the given
+% string.
+% \begin{macrocode}
+\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}{}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ifglsfielddefeq}
+%\begin{definition}
+%\cs{ifglsfielddefeq}\marg{label}\marg{field}\marg{command}\marg{true}\marg{false}
+%\end{definition}
+%\changes{4.16}{2015-07-08}{new}
+% Tests if the value of the given field is equal to the replacement
+% text of the given command.
+% \begin{macrocode}
+\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}{}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ifglsfieldcseq}
+%\begin{definition}
+%\cs{ifglsfieldcseq}\marg{label}\marg{field}\marg{cs name}\marg{true}\marg{false}
+%\end{definition}
+%\changes{4.16}{2015-07-08}{new}
+%As above but uses \cs{ifcsstrequal} instead of \cs{ifdefstrequal}
+% \begin{macrocode}
+\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}{}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glswritedefhook}
+%\changes{3.10a}{2013-10-13}{new}
+% \begin{macrocode}
+\newcommand*{\glswritedefhook}{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\gls@assign@desc}
+%\changes{3.11a}{2013-10-15}{new}
+% \begin{macrocode}
+\newcommand*{\gls@assign@desc}[1]{%
+ \gls@assign@field{}{#1}{desc}{\@glo@desc}%
+ \gls@assign@field{\@glo@desc}{#1}{descplural}{\@glo@descplural}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\longnewglossaryentry}
+%\changes{3.11a}{2013-10-15}{new}
+% \begin{macrocode}
+\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
+ }
+}
+% \end{macrocode}
+% Only allowed in the preamble. (Otherwise a long description could
+% cause problems when writing the entry definition to the temporary
+% file.)
+% \begin{macrocode}
+\@onlypreamble{\longnewglossaryentry}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\longprovideglossaryentry}
+%\changes{3.14a}{2013-11-12}{new}
+% As the above but only defines the entry if it doesn't already
+% exist.
+% \begin{macrocode}
+\newcommand{\longprovideglossaryentry}[3]{%
+ \ifglsentryexists{#1}{}%
+ {\longnewglossaryentry{#1}{#2}{#3}}%
+}
+\@onlypreamble{\longprovideglossaryentry}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\gls@defglossaryentry}
+%\begin{definition}
+%\cs{gls@defglossaryentry}\marg{label}\marg{key-val list}
+%\end{definition}
+% Defines a new entry without checking if it already exists.
+%\changes{3.10a}{2013-10-13}{new}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand{\gls@defglossaryentry}[2]{%
+% \end{macrocode}
+% Prevent any further use of \cs{GlsSetQuote}:
+% \begin{macrocode}
+ \let\GlsSetQuote\gls@nosetquote
+% \end{macrocode}
+% Store label
+% \begin{macrocode}
+ \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:
+% \begin{macrocode}
+ \let\glslabel\@glo@label
+% \end{macrocode}
+% Set up defaults. If the \gloskey{name} or \gloskey{description}
+% keys are omitted, an error will be generated.
+% \begin{macrocode}
+ \let\@glo@name\@glsnoname
+ \let\@glo@desc\@glsnodesc
+% \end{macrocode}
+% \changes{1.12}{2008-03-08}{descriptionplural support added}
+% \begin{macrocode}
+ \let\@glo@descplural\@gls@default@value
+% \end{macrocode}
+% \begin{macrocode}
+ \let\@glo@type\@gls@default@value
+ \let\@glo@symbol\@gls@default@value
+% \end{macrocode}
+% \changes{1.12}{2008-03-08}{symbolplural support added}
+% \begin{macrocode}
+ \let\@glo@symbolplural\@gls@default@value
+% \end{macrocode}
+% \begin{macrocode}
+ \let\@glo@text\@gls@default@value
+% \end{macrocode}
+% \begin{macrocode}
+ \let\@glo@plural\@gls@default@value
+% \end{macrocode}
+% \changes{1.13}{2008-05-10}{Changed default first value}
+% Using \cs{let} instead of \cs{def} to make later comparison
+% avoid expansion issues. (Thanks to Ulrich~Diez for suggesting
+% this.)
+% \changes{1.16}{2008-08-27}{Changed def to let}
+%\changes{3.10a}{2013-10-13}{Changed to using \cs{@gls@default@value}}
+% \begin{macrocode}
+ \let\@glo@first\@gls@default@value
+% \end{macrocode}
+% \changes{1.12}{2008-03-08}{Changed default first plural to be first
+% key with s appended (was text key with s appended)}
+% \changes{1.13}{2008-05-10}{Changed default firstplural value}
+% \begin{macrocode}
+ \let\@glo@firstplural\@gls@default@value
+% \end{macrocode}
+% Set the default sort:
+%\changes{3.10a}{2013-10-13}{Changed to using \cs{@gls@default@value}}
+%\changes{1.05}{2007-08-10}{Changed the default value of the sort
+% key to just the value of the name key}%
+%\changes{1.18}{2009-01-14}{Changed default value of sort
+% to \cs{@glsdefaultsort}}
+% \begin{macrocode}
+ \let\@glo@sort\@gls@default@value
+% \end{macrocode}
+% Set the default counter:
+% \begin{macrocode}
+ \let\@glo@counter\@gls@default@value
+% \end{macrocode}
+%\changes{1.17}{2008-12-26}{added see key}
+% \begin{macrocode}
+ \def\@glo@see{}%
+% \end{macrocode}
+%\changes{1.17}{2008-12-26}{added parent key}
+% \begin{macrocode}
+ \def\@glo@parent{}%
+% \end{macrocode}
+%\changes{1.17}{2008-12-26}{added nonumberlist key}
+% \begin{macrocode}
+ \def\@glo@prefix{}%
+% \end{macrocode}
+% Initialise nonumberlist setting if we're in the \env{document}
+% environment.
+% \begin{macrocode}
+ \@gls@initnonumberlist
+% \end{macrocode}
+%\changes{2.04}{2009-11-10}{added user1-6 keys}
+% \begin{macrocode}
+ \def\@glo@useri{}%
+ \def\@glo@userii{}%
+ \def\@glo@useriii{}%
+ \def\@glo@useriv{}%
+ \def\@glo@userv{}%
+ \def\@glo@uservi{}%
+% \end{macrocode}
+%\changes{3.0}{2011-04-02}{added short and long keys}
+% \begin{macrocode}
+ \def\@glo@short{}%
+ \def\@glo@shortpl{}%
+ \def\@glo@long{}%
+ \def\@glo@longpl{}%
+% \end{macrocode}
+% Add start hook in case another package wants to add extra keys.
+% \begin{macrocode}
+ \@newglossaryentryprehook
+% \end{macrocode}
+% Extract key-val information from third parameter:
+% \begin{macrocode}
+ \setkeys{glossentry}{#2}%
+% \end{macrocode}
+%\changes{3.14a}{2013-11-12}{added check for existence of default glossary}
+% Check there is a default glossary.
+% \begin{macrocode}
+ \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}%
+ }%
+ {}%
+% \end{macrocode}
+% Assign type. This must be fully expandable
+%\changes{4.03}{2014-01-20}{replaced \#1 with \cs{@glo@label}}
+% \begin{macrocode}
+ \gls@assign@field{\glsdefaulttype}{\@glo@label}{type}{\@glo@type}%
+ \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.
+%\changes{3.0}{2011-04-02}{replaced \cs{@ifundefined} with
+%\cs{ifcsundef}}
+% \begin{macrocode}
+ \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}%
+ }%
+ {%
+% \end{macrocode}
+%\changes{4.08}{2014-07-30}{added check for ignored glossary}
+% Check if it's an ignored glossary
+% \begin{macrocode}
+ \ifignoredglossary\@glo@type
+ {%
+% \end{macrocode}
+% The description may be omitted for an entry in an ignored
+% glossary.
+% \begin{macrocode}
+ \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},}%
+ }%
+% \end{macrocode}
+% Initialise level to 0.
+% \begin{macrocode}
+ \gls@level=0\relax
+% \end{macrocode}
+% Has this entry been assigned a parent?
+% \begin{macrocode}
+ \ifx\@glo@parent\@empty
+% \end{macrocode}
+% Doesn't have a parent. Set \cs{glo@}\meta{label}"@parent" to
+% empty.
+% \begin{macrocode}
+ \expandafter\gdef\csname glo@\@glo@label @parent\endcsname{}%
+ \else
+% \end{macrocode}
+% Has a parent. Check to ensure this entry isn't its own parent.
+%\changes{4.03}{2014-01-20}{replaced \cs{ifthenelse} with
+%\cs{ifdefequal}}
+% \begin{macrocode}
+ \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{}%
+ }%
+ {%
+% \end{macrocode}
+% Check the parent exists:
+% \begin{macrocode}
+ \ifglsentryexists{\@glo@parent}%
+ {%
+% \end{macrocode}
+% Parent exists. Set \cs{glo@}\meta{label}"@parent".
+% \begin{macrocode}
+ \expandafter\xdef\csname glo@\@glo@label @parent\endcsname{%
+ \@glo@parent}%
+% \end{macrocode}
+% Determine level.
+% \begin{macrocode}
+ \gls@level=\csname glo@\@glo@parent @level\endcsname\relax
+ \advance\gls@level by 1\relax
+% \end{macrocode}
+% If name hasn't been specified, use same as the parent name
+% \begin{macrocode}
+ \ifx\@glo@name\@glsnoname
+ \expandafter\let\expandafter\@glo@name
+ \csname glo@\@glo@parent @name\endcsname
+% \end{macrocode}
+% If name and plural haven't been specified, use same as the parent
+% \begin{macrocode}
+ \ifx\@glo@plural\@gls@default@value
+ \expandafter\let\expandafter\@glo@plural
+ \csname glo@\@glo@parent @plural\endcsname
+ \fi
+ \fi
+ }%
+ {%
+% \end{macrocode}
+% Parent doesn't exist, so issue an error message and change this
+% entry to have no parent
+% \begin{macrocode}
+ \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
+% \end{macrocode}
+% Set the level for this entry
+% \begin{macrocode}
+ \expandafter\xdef\csname glo@\@glo@label @level\endcsname{\number\gls@level}%
+% \end{macrocode}
+% Define commands associated with this entry:
+% \begin{macrocode}
+ \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}%
+% \end{macrocode}
+%\changes{3.14a}{2013-11-12}{set the default for firstplural to be the value
+%of plural}
+%\changes{4.0}{2013-11-14}{added check for first key}
+% If \gloskey{first} has been specified, make the default by appending
+% \cs{glspluralsuffix}, otherwise make the default the value of the
+% \gloskey{plural} key.
+% \begin{macrocode}
+ \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
+% \end{macrocode}
+%\changes{3.11a}{2013-10-15}{Fixed default counter if none supplied}
+% \begin{macrocode}
+ \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}%
+% \end{macrocode}
+%\changes{3.02}{2012-05-21}{added numberlist element}
+% Set default numberlist if not defined:
+% \begin{macrocode}
+ \ifcsundef{glo@\@glo@label @numberlist}%
+ {%
+ \csxdef{glo@\@glo@label @numberlist}{%
+ \noexpand\@gls@missingnumberlist{\@glo@label}}%
+ }%
+ {}%
+% \end{macrocode}
+% Store nonumberlist setting if we're in the \env{document}
+% environment.
+% \begin{macrocode}
+ \@gls@storenonumberlist{\@glo@label}%
+% \end{macrocode}
+% The smaller and smallcaps options set the description to
+% \cs{@glo@first}. Need to check for this, otherwise it won't get
+% expanded if the description gets sanitized.
+%\changes{1.15}{2008-08-15}{check for \cs{@glo@first} in description}%
+% \begin{macrocode}
+ \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}%
+% \end{macrocode}
+%\changes{1.18}{2009-01-14}{moved sort sanitization to
+% \cs{newglossaryentry}}
+%\changes{3.0}{2011-04-02}{added \cs{@gls@defsort}}
+% Set the sort key for this entry:
+% \begin{macrocode}
+ \@gls@defsort{\@glo@type}{\@glo@label}%
+% \end{macrocode}
+%\changes{1.15}{2008-08-15}{check for \cs{@glo@text} in symbol}%
+% \begin{macrocode}
+ \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}%
+% \end{macrocode}
+% Define an associated boolean variable to determine whether this
+% entry has been used yet (needs to be defined globally):
+% \begin{macrocode}
+ \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
+% \end{macrocode}
+% Sort out any cross-referencing if required.
+%\changes{4.04}{2014-03-06}{replaced \cs{ifx} with \cs{ifdefvoid}}
+% \begin{macrocode}
+ \@glo@autosee
+% \end{macrocode}
+% Determine and store main part of the entry's index format.
+%\changes{1.17}{2008-12-26}{Stored main part of entry
+% format when entry
+% is defined}%
+% \begin{macrocode}
+ \ifignoredglossary\@glo@type
+ {%
+ \csdef{glo@\@glo@label @index}{}%
+ }
+ {%
+ \do@glo@storeentry{\@glo@label}%
+ }%
+% \end{macrocode}
+% Define entry counters if enabled:
+% \begin{macrocode}
+ \@newglossaryentry@defcounters
+% \end{macrocode}
+% Add end hook in case another package wants to add extra keys.
+% \begin{macrocode}
+ \@newglossaryentryposthook
+}
+% \end{macrocode}
+%\changes{1.13}{2008-05-10}{Removed restriction on only using
+% \cs{newglossaryentry} in the preamble}
+%\end{macro}
+%
+%\begin{macro}{\@glo@autosee}
+%\changes{4.30}{2017-06-11}{new}
+%Automatically implement \cs{glssee}.
+% \begin{macrocode}
+\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
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glo@autoseehook}
+%\changes{4.30}{2017-06-11}{new}
+% \begin{macrocode}
+\newcommand*{\@glo@autoseehook}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@newglossaryentryprehook}
+% Allow extra information to be added to glossary entries:
+%\changes{2.04}{2009-11-10}{new}
+% \begin{macrocode}
+\newcommand*{\@newglossaryentryprehook}{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@newglossaryentryposthook}
+% Allow extra information to be added to glossary entries:
+%\changes{2.04}{2009-11-10}{new}
+% \begin{macrocode}
+\newcommand*{\@newglossaryentryposthook}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@newglossaryentry@defcounters}
+%\changes{4.14}{2015-02-28}{new}
+% \begin{macrocode}
+\newcommand*{\@newglossaryentry@defcounters}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsmoveentry}
+%\changes{3.02}{2012-05-21}{new}
+% 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}}
+% \begin{macrocode}
+\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}%
+ {%
+% \end{macrocode}
+%\changes{4.03}{2014-01-20}{replaced \cs{ifthenelse} with
+%\cs{ifdefequal}}
+% \begin{macrocode}
+ \ifdefequal\@glo@thislabel\glo@label
+ {}{\eappto\glo@list{\glo@label,}}%
+ }%
+ \cslet{glolist@\glo@type}{\glo@list}%
+ \csdef{glo@\@glo@thislabel @type}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glossaryentryfield}
+% Indicate what command should be used to display each entry in
+% the glossary. (This enables the \sty{glossaries-accsupp} package
+% to use \cs{accsuppglossaryentryfield} instead.)
+%\changes{2.04}{2009-11-10}{new}
+%\changes{3.08a}{2013-09-28}{switched to \cs{glossentry}}
+% \begin{macrocode}
+\ifglsxindy
+ \newcommand*{\@glossaryentryfield}{\string\\glossentry}
+\else
+ \newcommand*{\@glossaryentryfield}{\string\glossentry}
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glossarysubentryfield}
+% Indicate what command should be used to display each subentry in
+% the glossary. (This enables the \sty{glossaries-accsupp} package
+% to use \cs{accsuppglossarysubentryfield} instead.)
+%\changes{2.04}{2009-11-10}{new}
+%\changes{3.08a}{2013-09-28}{switched to \cs{subglossentry}}
+% \begin{macrocode}
+\ifglsxindy
+ \newcommand*{\@glossarysubentryfield}{%
+ \string\\subglossentry}
+\else
+ \newcommand*{\@glossarysubentryfield}{%
+ \string\subglossentry}
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glo@storeentry}
+%\begin{definition}
+%\cs{@glo@storeentry}\marg{label}
+%\end{definition}
+%\changes{1.17}{2008-12-26}{new}
+% Determine the format to write the entry in the glossary
+% output (\filetype{.glo}) file.
+% The argument is the entry's label (should already have been
+% de-tok'ed if required).
+% The result is stored in \cs{glo@}\meta{label}"@index", where
+% \meta{label} is the entry's label. (This doesn't include
+% any formatting or location information.)
+% \begin{macrocode}
+\newcommand{\@glo@storeentry}[1]{%
+% \end{macrocode}
+% Escape makeindex/xindy special characters in the label:
+% \begin{macrocode}
+ \edef\@glo@esclabel{#1}%
+ \@gls@checkmkidxchars\@glo@esclabel
+% \end{macrocode}
+% Get the sort string and escape any special characters
+% \begin{macrocode}
+ \protected@edef\@glo@sort{\csname glo@#1@sort\endcsname}%
+ \@gls@checkmkidxchars\@glo@sort
+% \end{macrocode}
+% Same again for the name string.
+%\changes{3.08a}{2013-09-28}{no longer need to check for special characters
+%in any of the fields other than sort}
+% Escape any special characters in the prefix
+% \begin{macrocode}
+ \@gls@checkmkidxchars\@glo@prefix
+% \end{macrocode}
+% Get the parent, if one exists
+% \begin{macrocode}
+ \edef\@glo@parent{\csname glo@#1@parent\endcsname}%
+% \end{macrocode}
+% Write the information to the glossary file.
+% \begin{macrocode}
+ \ifglsxindy
+% \end{macrocode}
+% Store using \app{xindy} syntax.
+% \begin{macrocode}
+ \ifx\@glo@parent\@empty
+% \end{macrocode}
+% Entry doesn't have a parent
+%\changes{3.08a}{2013-09-28}{updated for \cs{glossentry}}
+% \begin{macrocode}
+ \expandafter\protected@xdef\csname glo@#1@index\endcsname{%
+ (\string"\@glo@sort\string" %
+ \string"\@glo@prefix\@glossaryentryfield{\@glo@esclabel}\string") %
+ }%
+ \else
+% \end{macrocode}
+% Entry has a parent
+% \begin{macrocode}
+ \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
+% \end{macrocode}
+% Store using \app{makeindex} syntax.
+% \begin{macrocode}
+ \ifx\@glo@parent\@empty
+% \end{macrocode}
+% Sanitize \cs{@glo@prefix}
+% \begin{macrocode}
+ \@onelevel@sanitize\@glo@prefix
+% \end{macrocode}
+% Entry doesn't have a parent
+% \begin{macrocode}
+ \expandafter\protected@xdef\csname glo@#1@index\endcsname{%
+ \@glo@sort\@gls@actualchar\@glo@prefix
+ \@glossaryentryfield{\@glo@esclabel}%
+ }%
+ \else
+% \end{macrocode}
+% Entry has a parent
+% \begin{macrocode}
+ \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
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\section{Resetting and unsetting entry flags}
+% Each glossary entry is assigned a conditional of the form
+%\cs{ifglo@}\meta{label}\texttt{@flag} which determines
+% whether or not the entry has been used (see also
+% \ics{ifglsused} defined below). These flags can
+% be set and unset using the following macros, but first we need to
+% know if we're in \sty{amsmath}'s \env{align} environment's
+% measuring pass.
+%
+%\begin{macro}{\gls@ifnotmeasuring}
+%\changes{3.08a}{2013-09-28}{new}
+% \begin{macrocode}
+\AtBeginDocument{%
+ \@ifpackageloaded{amsmath}%
+ {\let\gls@ifnotmeasuring\@gls@ifnotmeasuring}%
+ {}%
+}
+\newcommand*{\@gls@ifnotmeasuring}[1]{%
+ \ifmeasuring@
+ \else
+ #1%
+ \fi
+}
+\newcommand*\gls@ifnotmeasuring[1]{#1}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glspatchtabularx}
+%\changes{4.28}{2017-01-07}{new}
+%Patch \cs{TX@trial} (as per David Carlisle's answer in
+%\url{http://tex.stackexchange.com/a/94895}). This does nothing
+%if \cs{TX@trial} hasn't been defined.
+% \begin{macrocode}
+\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
+ }%
+ {}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsreset}
+% The command \cs{glsreset}\marg{label} can be used
+% to set the entry flag to indicate that it hasn't been used yet. The
+% required argument is the entry label.
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+%\changes{4.14}{2015-02-28}{switched to \cs{@glsreset}}
+% \begin{macrocode}
+\newcommand*{\glsreset}[1]{%
+ \gls@ifnotmeasuring
+ {%
+ \glsdoifexists{#1}%
+ {%
+ \@glsreset{#1}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glslocalreset}
+% As above, but with only a local effect:
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+%\changes{4.14}{2015-02-28}{switched to \cs{@glslocalreset}}
+% \begin{macrocode}
+\newcommand*{\glslocalreset}[1]{%
+ \gls@ifnotmeasuring
+ {%
+ \glsdoifexists{#1}%
+ {%
+ \@glslocalreset{#1}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsunset}
+% The command \cs{glsunset}\marg{label} can be used to
+% set the entry flag to indicate that it has been used. The required
+% argument is the entry label.
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+%\changes{4.14}{2015-02-28}{switched to \cs{@glsunset}}
+% \begin{macrocode}
+\newcommand*{\glsunset}[1]{%
+ \gls@ifnotmeasuring
+ {%
+ \glsdoifexists{#1}%
+ {%
+ \@glsunset{#1}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glslocalunset}
+% As above, but with only a local effect:
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+%\changes{4.14}{2015-02-28}{switched to \cs{@glslocalunset}}
+% \begin{macrocode}
+\newcommand*{\glslocalunset}[1]{%
+ \gls@ifnotmeasuring
+ {%
+ \glsdoifexists{#1}%
+ {%
+ \@glslocalunset{#1}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glslocalunset}
+% Local unset. This defaults to just \cs{@@glslocalunset} but is changed
+% by \cs{glsenableentrycount}.
+%\changes{4.14}{2015-02-28}{new}
+% \begin{macrocode}
+\newcommand*{\@glslocalunset}{\@@glslocalunset}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@@glslocalunset}
+%\changes{4.14}{2015-02-28}{new}
+% Local unset without checks.
+% \begin{macrocode}
+\newcommand*{\@@glslocalunset}[1]{%
+ \expandafter\let\csname ifglo@\glsdetoklabel{#1}@flag\endcsname\iftrue
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glsunset}
+% Global unset. This defaults to just \cs{@@glsunset} but is changed
+% by \cs{glsenableentrycount}.
+%\changes{4.14}{2015-02-28}{new}
+% \begin{macrocode}
+\newcommand*{\@glsunset}{\@@glsunset}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@@glsunset}
+%\changes{4.14}{2015-02-28}{new}
+% Global unset without checks.
+% \begin{macrocode}
+\newcommand*{\@@glsunset}[1]{%
+ \expandafter\global\csname glo@\glsdetoklabel{#1}@flagtrue\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glslocalreset}
+% Local reset. This defaults to just \cs{@@glslocalreset} but is changed
+% by \cs{glsenableentrycount}.
+%\changes{4.14}{2015-02-28}{new}
+% \begin{macrocode}
+\newcommand*{\@glslocalreset}{\@@glslocalreset}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@@glslocalreset}
+%\changes{4.14}{2015-02-28}{new}
+% Local reset without checks.
+% \begin{macrocode}
+\newcommand*{\@@glslocalreset}[1]{%
+ \expandafter\let\csname ifglo@\glsdetoklabel{#1}@flag\endcsname\iffalse
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glsreset}
+% Global reset. This defaults to just \cs{@@glsreset} but is changed
+% by \cs{glsenableentrycount}.
+%\changes{4.14}{2015-02-28}{new}
+% \begin{macrocode}
+\newcommand*{\@glsreset}{\@@glsreset}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@@glsreset}
+%\changes{4.14}{2015-02-28}{new}
+% Global reset without checks.
+% \begin{macrocode}
+\newcommand*{\@@glsreset}[1]{%
+ \expandafter\global\csname glo@\glsdetoklabel{#1}@flagfalse\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Reset all entries for the named glossaries (supplied in a
+% comma-separated list).
+% Syntax: \cs{glsresetall}\oarg{glossary-list}
+%\begin{macro}{\glsresetall}
+% \begin{macrocode}
+\newcommand*{\glsresetall}[1][\@glo@types]{%
+ \forallglsentries[#1]{\@glsentry}%
+ {%
+ \glsreset{\@glsentry}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+% As above, but with only a local effect:
+%\begin{macro}{\glslocalresetall}
+% \begin{macrocode}
+\newcommand*{\glslocalresetall}[1][\@glo@types]{%
+ \forallglsentries[#1]{\@glsentry}%
+ {%
+ \glslocalreset{\@glsentry}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+% Unset all entries for the named glossaries (supplied in a
+% comma-separated list).
+% Syntax: \cs{glsunsetall}\oarg{glossary-list}
+%\begin{macro}{\glsunsetall}
+% \begin{macrocode}
+\newcommand*{\glsunsetall}[1][\@glo@types]{%
+ \forallglsentries[#1]{\@glsentry}%
+ {%
+ \glsunset{\@glsentry}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+% As above, but with only a local effect:
+%\begin{macro}{\glslocalunsetall}
+% \begin{macrocode}
+\newcommand*{\glslocalunsetall}[1][\@glo@types]{%
+ \forallglsentries[#1]{\@glsentry}%
+ {%
+ \glslocalunset{\@glsentry}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\section{Keeping Track of How Many Times an Entry Has Been Unset}
+%Version 4.14 introduced \cs{glsenableentrycount} that keeps track
+%of how many times an entry is marked as used. The counter is reset
+%back to zero when the first use flag is reset. Note that although
+%the word ``counter'' is used here, it's not an actual \LaTeX\
+%counter or even an explicit \TeX\ count register but is just a
+%macro. Any of the commands that use \cs{glsunset} or
+%\cs{glslocalunset}, such as \cs{gls}, will automatically increment this value.
+%Commands that don't modify the first use flag (such as \cs{glstext}
+%or \cs{glsentrytext}) don't modify this value.
+%
+%\begin{macro}{\@@newglossaryentry@defcounters}
+%\changes{4.14}{2015-02-28}{new}
+% Define entry fields to keep track of how many times that entry has
+% been marked as used.
+% \begin{macrocode}
+\newcommand*{\@@newglossaryentry@defcounters}{%
+ \csdef{glo@\@glo@label @currcount}{0}%
+ \csdef{glo@\@glo@label @prevcount}{0}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsenableentrycount}
+%\changes{4.14}{2015-02-28}{new}
+% Enables tracking of how many times an entry has been marked as
+% used.
+% \begin{macrocode}
+\newcommand*{\glsenableentrycount}{%
+% \end{macrocode}
+% Enable new entry fields.
+% \begin{macrocode}
+ \let\@newglossaryentry@defcounters\@@newglossaryentry@defcounters
+% \end{macrocode}
+% Disable \cs{newglossaryentry} in the \env{document} environment.
+% \begin{macrocode}
+ \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}%
+ }%
+ }%
+% \end{macrocode}
+% Define commands \ics{glsentrycurrcount} and \ics{glsentryprevcount} to
+% access these new fields. Default to zero if undefined.
+% \begin{macrocode}
+ \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}}%
+ }%
+% \end{macrocode}
+% Make the unset and reset functions also increment or reset the
+% entry counter.
+% \begin{macrocode}
+ \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}%
+ }%
+% \end{macrocode}
+% Alter behaviour of \cs{cgls}. (Only global unset is used if
+% previous count was one as it doesn't make sense to have a~local
+% unset here given that the previous count was global.)
+% \begin{macrocode}
+ \def\@cgls@##1##2[##3]{%
+ \ifnum\glsentryprevcount{##2}=1\relax
+ \cglsformat{##2}{##3}%
+ \glsunset{##2}%
+ \else
+ \@gls@{##1}{##2}[##3]%
+ \fi
+ }%
+% \end{macrocode}
+% Similarly for the analogous commands. No case change plural:
+% \begin{macrocode}
+ \def\@cglspl@##1##2[##3]{%
+ \ifnum\glsentryprevcount{##2}=1\relax
+ \cglsplformat{##2}{##3}%
+ \glsunset{##2}%
+ \else
+ \@glspl@{##1}{##2}[##3]%
+ \fi
+ }%
+% \end{macrocode}
+% First letter uppercase singular:
+% \begin{macrocode}
+ \def\@cGls@##1##2[##3]{%
+ \ifnum\glsentryprevcount{##2}=1\relax
+ \cGlsformat{##2}{##3}%
+ \glsunset{##2}%
+ \else
+ \@Gls@{##1}{##2}[##3]%
+ \fi
+ }%
+% \end{macrocode}
+% First letter uppercase plural:
+% \begin{macrocode}
+ \def\@cGlspl@##1##2[##3]{%
+ \ifnum\glsentryprevcount{##2}=1\relax
+ \cGlsplformat{##2}{##3}%
+ \glsunset{##2}%
+ \else
+ \@Glspl@{##1}{##2}[##3]%
+ \fi
+ }%
+% \end{macrocode}
+% Write information to aux file at the end of the document
+% \begin{macrocode}
+ \AtEndDocument{\@gls@write@entrycounts}%
+% \end{macrocode}
+% Fetch previous count information from aux file. (No check here to
+% determine if the entry is still defined.)
+% \begin{macrocode}
+ \renewcommand*{\@gls@entry@count}[2]{%
+ \csgdef{glo@\glsdetoklabel{##1}@prevcount}{##2}%
+ }%
+% \end{macrocode}
+% \cs{glsenableentrycount} may only be used once and only in the
+% preamble.
+% \begin{macrocode}
+ \let\glsenableentrycount\relax
+}
+\@onlypreamble\glsenableentrycount
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@increment@currcount}
+%\changes{4.14}{2015-02-28}{new}
+% \begin{macrocode}
+\newcommand*{\@gls@increment@currcount}[1]{%
+ \csxdef{glo@\glsdetoklabel{#1}@currcount}{%
+ \number\numexpr\glsentrycurrcount{#1}+1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@local@increment@currcount}
+%\changes{4.14}{2015-02-28}{new}
+% \begin{macrocode}
+\newcommand*{\@gls@local@increment@currcount}[1]{%
+ \csedef{glo@\glsdetoklabel{#1}@currcount}{%
+ \number\numexpr\glsentrycurrcount{#1}+1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@write@entrycounts}
+%\changes{4.14}{2015-02-28}{new}
+% Write the entry counts to the aux file. Use \cs{immediate} since
+% this occurs right at the end of the document. Only write
+% information for entries that have been used. (Some users have a
+% file containing vast numbers of entries, many of which may not be
+% used. There's no point writing information about the entries that
+% haven't been used and it will only slow things down.)
+% \begin{macrocode}
+\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}}}}%
+ {}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@entry@count}
+%\changes{4.14}{2015-02-28}{new}
+% Default behaviour is to ignore arguments. Activated by
+% \cs{glsenableentrycount}.
+% \begin{macrocode}
+\newcommand*{\@gls@entry@count}[2]{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\cgls}
+%\changes{4.14}{2015-02-28}{new}
+% Define command that works like \cs{gls} but behaves differently if
+% the entry count function is enabled. (If not enabled, it behaves
+% the same as \cs{gls} but issues a warning.)
+% \begin{macrocode}
+\newrobustcmd*{\cgls}{\@gls@hyp@opt\@cgls}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@cgls}
+%\changes{4.14}{2015-02-28}{new}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@cgls}[2][]{%
+ \new@ifnextchar[{\@cgls@{#1}{#2}}{\@cgls@{#1}{#2}[]}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@cgls@}
+%\changes{4.14}{2015-02-28}{new}
+% Read in the final optional argument. This defaults to same behaviour
+% as \cs{gls} but issues a warning.
+% \begin{macrocode}
+\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]%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\cglsformat}
+%\changes{4.14}{2015-02-28}{new}
+% Format used by \cs{cgls} if entry only used once on previous run.
+% The first argument is the label, the second argument is the insert
+% text.
+% \begin{macrocode}
+\newcommand*{\cglsformat}[2]{%
+ \ifglshaslong{#1}{\glsentrylong{#1}}{\glsentryfirst{#1}}#2%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\cGls}
+%\changes{4.14}{2015-02-28}{new}
+% Define command that works like \cs{Gls} but behaves differently if
+% the entry count function is enabled. (If not enabled, it behaves
+% the same as \cs{Gls} but issues a warning.)
+% \begin{macrocode}
+\newrobustcmd*{\cGls}{\@gls@hyp@opt\@cGls}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@cGls}
+%\changes{4.14}{2015-02-28}{new}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@cGls}[2][]{%
+ \new@ifnextchar[{\@cGls@{#1}{#2}}{\@cGls@{#1}{#2}[]}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@cGls@}
+%\changes{4.14}{2015-02-28}{new}
+% Read in the final optional argument. This defaults to same behaviour
+% as \cs{Gls} but issues a warning.
+% \begin{macrocode}
+\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]%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\cGlsformat}
+%\changes{4.14}{2015-02-28}{new}
+% Format used by \cs{cGls} if entry only used once on previous run.
+% The first argument is the label, the second argument is the insert
+% text.
+% \begin{macrocode}
+\newcommand*{\cGlsformat}[2]{%
+ \ifglshaslong{#1}{\Glsentrylong{#1}}{\Glsentryfirst{#1}}#2%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\cglspl}
+%\changes{4.14}{2015-02-28}{new}
+% Define command that works like \cs{glspl} but behaves differently if
+% the entry count function is enabled. (If not enabled, it behaves
+% the same as \cs{glspl} but issues a warning.)
+% \begin{macrocode}
+\newrobustcmd*{\cglspl}{\@gls@hyp@opt\@cglspl}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@cglspl}
+%\changes{4.14}{2015-02-28}{new}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@cglspl}[2][]{%
+ \new@ifnextchar[{\@cglspl@{#1}{#2}}{\@cglspl@{#1}{#2}[]}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@cglspl@}
+%\changes{4.14}{2015-02-28}{new}
+% Read in the final optional argument. This defaults to same behaviour
+% as \cs{glspl} but issues a warning.
+% \begin{macrocode}
+\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]%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\cglsplformat}
+%\changes{4.14}{2015-02-28}{new}
+% Format used by \cs{cglspl} if entry only used once on previous run.
+% The first argument is the label, the second argument is the insert
+% text.
+% \begin{macrocode}
+\newcommand*{\cglsplformat}[2]{%
+ \ifglshaslong{#1}{\glsentrylongpl{#1}}{\glsentryfirstplural{#1}}#2%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\cGlspl}
+%\changes{4.14}{2015-02-28}{new}
+% Define command that works like \cs{Glspl} but behaves differently if
+% the entry count function is enabled. (If not enabled, it behaves
+% the same as \cs{Glspl} but issues a warning.)
+% \begin{macrocode}
+\newrobustcmd*{\cGlspl}{\@gls@hyp@opt\@cGlspl}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@cglspl}
+%\changes{4.14}{2015-02-28}{new}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@cGlspl}[2][]{%
+ \new@ifnextchar[{\@cGlspl@{#1}{#2}}{\@cGlspl@{#1}{#2}[]}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@cGlspl@}
+%\changes{4.14}{2015-02-28}{new}
+% Read in the final optional argument. This defaults to same behaviour
+% as \cs{Glspl} but issues a warning.
+% \begin{macrocode}
+\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]%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\cGlsplformat}
+%\changes{4.14}{2015-02-28}{new}
+% Format used by \cs{cGlspl} if entry only used once on previous run.
+% The first argument is the label, the second argument is the insert
+% text.
+% \begin{macrocode}
+\newcommand*{\cGlsplformat}[2]{%
+ \ifglshaslong{#1}{\Glsentrylongpl{#1}}{\Glsentryfirstplural{#1}}#2%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% \section{Loading files containing glossary entries}
+%\label{sec:load}
+% Glossary entries can be defined in an external file.
+% These external files can contain \ics{newglossaryentry}
+% and \ics{newacronym} commands.\footnote{and any other valid
+%\LaTeX\ code that can be used in the preamble.}
+%\begin{definition}
+% \cs{loadglsentries}\oarg{type}\marg{filename}
+%\end{definition}
+% This command will input the file using \cs{input}.
+% The optional argument specifies to which glossary the
+% entries should be assigned if they haven't used the \gloskey{type}
+% key. If the optional argument is not specified, the default
+% glossary is used. Only those entries used in the document (via
+% \ics{glslink}, \ics{gls}, \ics{glspl} and uppercase
+% variants or \ics{glsadd} and \ics{glsaddall}
+% will appear in the glossary). The mandatory argument is
+% the filename (with or without .tex extension).
+%\begin{macro}{\loadglsentries}
+% \begin{macrocode}
+\newcommand*{\loadglsentries}[2][\@gls@default]{%
+ \let\@gls@default\glsdefaulttype
+ \def\glsdefaulttype{#1}\input{#2}%
+ \let\glsdefaulttype\@gls@default
+}
+% \end{macrocode}
+%\end{macro}
+% \cs{loadglsentries} can only be used in the preamble:
+% \begin{macrocode}
+\@onlypreamble{\loadglsentries}
+% \end{macrocode}
+%
+%\section{Using glossary entries in the text}
+%\label{sec:code:glslink}
+%
+% Any term that has been defined using \ics{newglossaryentry}
+% (or \ics{newacronym}) can be displayed in the text
+% (i.e.\ outside of the glossary) using
+% one of the commands defined in this section. Unless you use
+% \ics{glslink}, the way the term appears in the text is
+% determined by \ics{glsdisplayfirst} (if it is the first
+% time the term has been used) or \ics{glsdisplay} (for
+% subsequent use). Any formatting commands (such as \cs{textbf}
+% is governed by \ics{glstextformat}. By default this just
+% displays the \term{link text} ``as is''.
+%\changes{1.04}{2007-08-03}{Added \cs{glstextformat}}%
+%\begin{macro}{\glstextformat}
+% \begin{macrocode}
+\newcommand*{\glstextformat}[1]{#1}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsentryfmt}
+% As from version 3.11a, the way in which an entry is displayed is now
+% governed by \cs{glsentryfmt}. This doesn't take any arguments. The
+% required information is set by commands like \cs{gls}.
+% To ensure backward compatibility, the default use the old
+% \cs{glsdisplay} and \cs{glsdisplayfirst} style of commands
+% \begin{macrocode}
+\newcommand*{\glsentryfmt}{%
+ \@@gls@default@entryfmt\glsdisplayfirst\glsdisplay
+}
+% \end{macrocode}
+% Format that provides backwards compatibility:
+% \begin{macrocode}
+\newcommand*{\@@gls@default@entryfmt}[2]{%
+ \ifdefempty\glscustomtext
+ {%
+ \glsifplural
+ {%
+% \end{macrocode}
+% Plural form
+% \begin{macrocode}
+ \glscapscase
+ {%
+% \end{macrocode}
+% Don't adjust case
+% \begin{macrocode}
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use
+% \begin{macrocode}
+ #2{\glsentryplural{\glslabel}}%
+ {\glsentrydescplural{\glslabel}}%
+ {\glsentrysymbolplural{\glslabel}}{\glsinsert}%
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ #1{\glsentryfirstplural{\glslabel}}%
+ {\glsentrydescplural{\glslabel}}%
+ {\glsentrysymbolplural{\glslabel}}{\glsinsert}%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Make first letter upper case
+% \begin{macrocode}
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use. (Expansion was used in version 3.07 and below
+% in case the name wasn't the first thing to be displayed, but now
+% the user can sort out the upper casing in \ics{defglsentryfmt},
+% which avoids the issues caused by fragile commands.)
+% \begin{macrocode}
+ \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}%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ \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}%
+ }%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Make all upper case
+% \begin{macrocode}
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use
+% \begin{macrocode}
+ \mfirstucMakeUppercase{#2{\glsentryplural{\glslabel}}%
+ {\glsentrydescplural{\glslabel}}%
+ {\glsentrysymbolplural{\glslabel}}{\glsinsert}}%
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ \mfirstucMakeUppercase{#1{\glsentryfirstplural{\glslabel}}%
+ {\glsentrydescplural{\glslabel}}%
+ {\glsentrysymbolplural{\glslabel}}{\glsinsert}}%
+ }%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Singular form
+% \begin{macrocode}
+ \glscapscase
+ {%
+% \end{macrocode}
+% Don't adjust case
+% \begin{macrocode}
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use
+% \begin{macrocode}
+ #2{\glsentrytext{\glslabel}}%
+ {\glsentrydesc{\glslabel}}%
+ {\glsentrysymbol{\glslabel}}{\glsinsert}%
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ #1{\glsentryfirst{\glslabel}}%
+ {\glsentrydesc{\glslabel}}%
+ {\glsentrysymbol{\glslabel}}{\glsinsert}%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Make first letter upper case
+% \begin{macrocode}
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use
+% \begin{macrocode}
+ \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}%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ \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}%
+ }%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Make all upper case
+% \begin{macrocode}
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use
+% \begin{macrocode}
+ \mfirstucMakeUppercase{#2{\glsentrytext{\glslabel}}%
+ {\glsentrydesc{\glslabel}}%
+ {\glsentrysymbol{\glslabel}}{\glsinsert}}%
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ \mfirstucMakeUppercase{#1{\glsentryfirst{\glslabel}}%
+ {\glsentrydesc{\glslabel}}%
+ {\glsentrysymbol{\glslabel}}{\glsinsert}}%
+ }%
+ }%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Custom text provided in \cs{glsdisp}
+% \begin{macrocode}
+ \ifglsused{\glslabel}%
+ {%
+% \end{macrocode}
+% Subsequent use
+% \begin{macrocode}
+ #2{\glscustomtext}%
+ {\glsentrydesc{\glslabel}}%
+ {\glsentrysymbol{\glslabel}}{}%
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ #1{\glscustomtext}%
+ {\glsentrydesc{\glslabel}}%
+ {\glsentrysymbol{\glslabel}}{}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsgenentryfmt}
+% Define a generic format that just uses the first, text, plural or
+% first plural keys (or the custom text) with the insert text appended.
+%\changes{3.11a}{2013-10-15}{new}
+% \begin{macrocode}
+\newcommand*{\glsgenentryfmt}{%
+ \ifdefempty\glscustomtext
+ {%
+ \glsifplural
+ {%
+% \end{macrocode}
+% Plural form
+% \begin{macrocode}
+ \glscapscase
+ {%
+% \end{macrocode}
+% Don't adjust case
+% \begin{macrocode}
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use
+% \begin{macrocode}
+ \glsentryplural{\glslabel}\glsinsert
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ \glsentryfirstplural{\glslabel}\glsinsert
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Make first letter upper case
+% \begin{macrocode}
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use.
+% \begin{macrocode}
+ \Glsentryplural{\glslabel}\glsinsert
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ \Glsentryfirstplural{\glslabel}\glsinsert
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Make all upper case
+% \begin{macrocode}
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use
+% \begin{macrocode}
+ \mfirstucMakeUppercase
+ {\glsentryplural{\glslabel}\glsinsert}%
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ \mfirstucMakeUppercase
+ {\glsentryfirstplural{\glslabel}\glsinsert}%
+ }%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Singular form
+% \begin{macrocode}
+ \glscapscase
+ {%
+% \end{macrocode}
+% Don't adjust case
+% \begin{macrocode}
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use
+% \begin{macrocode}
+ \glsentrytext{\glslabel}\glsinsert
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ \glsentryfirst{\glslabel}\glsinsert
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Make first letter upper case
+% \begin{macrocode}
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use
+% \begin{macrocode}
+ \Glsentrytext{\glslabel}\glsinsert
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ \Glsentryfirst{\glslabel}\glsinsert
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Make all upper case
+% \begin{macrocode}
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use
+% \begin{macrocode}
+ \mfirstucMakeUppercase{\glsentrytext{\glslabel}\glsinsert}%
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ \mfirstucMakeUppercase{\glsentryfirst{\glslabel}\glsinsert}%
+ }%
+ }%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Custom text provided in \cs{glsdisp}. (The insert is most likely
+% to be empty at this point.)
+% \begin{macrocode}
+ \glscustomtext\glsinsert
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsgenacfmt}
+%\changes{4.02}{2013-12-05}{new}
+% Define a generic acronym format that uses the \gloskey{long} and
+% \gloskey{short} keys (or their plurals) and \ics{acrfullformat},
+% \ics{firstacronymfont} and \ics{acronymfont}.
+% \begin{macrocode}
+\newcommand*{\glsgenacfmt}{%
+ \ifdefempty\glscustomtext
+ {%
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use:
+% \begin{macrocode}
+ \glsifplural
+ {%
+% \end{macrocode}
+% Subsequent plural form:
+% \begin{macrocode}
+ \glscapscase
+ {%
+% \end{macrocode}
+% Subsequent plural form, don't adjust case:
+% \begin{macrocode}
+ \acronymfont{\glsentryshortpl{\glslabel}}\glsinsert
+ }%
+ {%
+% \end{macrocode}
+% Subsequent plural form, make first letter upper case:
+% \begin{macrocode}
+ \acronymfont{\Glsentryshortpl{\glslabel}}\glsinsert
+ }%
+ {%
+% \end{macrocode}
+% Subsequent plural form, all caps:
+% \begin{macrocode}
+ \mfirstucMakeUppercase
+ {\acronymfont{\glsentryshortpl{\glslabel}}\glsinsert}%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Subsequent singular form
+% \begin{macrocode}
+ \glscapscase
+ {%
+% \end{macrocode}
+% Subsequent singular form, don't adjust case:
+% \begin{macrocode}
+ \acronymfont{\glsentryshort{\glslabel}}\glsinsert
+ }%
+ {%
+% \end{macrocode}
+% Subsequent singular form, make first letter upper case:
+% \begin{macrocode}
+ \acronymfont{\Glsentryshort{\glslabel}}\glsinsert
+ }%
+ {%
+% \end{macrocode}
+% Subsequent singular form, all caps:
+% \begin{macrocode}
+ \mfirstucMakeUppercase
+ {\acronymfont{\glsentryshort{\glslabel}}\glsinsert}%
+ }%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% First use:
+% \begin{macrocode}
+ \glsifplural
+ {%
+% \end{macrocode}
+% First use plural form:
+% \begin{macrocode}
+ \glscapscase
+ {%
+% \end{macrocode}
+% First use plural form, don't adjust case:
+% \begin{macrocode}
+ \genplacrfullformat{\glslabel}{\glsinsert}%
+ }%
+ {%
+% \end{macrocode}
+% First use plural form, make first letter upper case:
+% \begin{macrocode}
+ \Genplacrfullformat{\glslabel}{\glsinsert}%
+ }%
+ {%
+% \end{macrocode}
+% First use plural form, all caps:
+% \begin{macrocode}
+ \mfirstucMakeUppercase
+ {\genplacrfullformat{\glslabel}{\glsinsert}}%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% First use singular form
+% \begin{macrocode}
+ \glscapscase
+ {%
+% \end{macrocode}
+% First use singular form, don't adjust case:
+% \begin{macrocode}
+ \genacrfullformat{\glslabel}{\glsinsert}%
+ }%
+ {%
+% \end{macrocode}
+% First use singular form, make first letter upper case:
+% \begin{macrocode}
+ \Genacrfullformat{\glslabel}{\glsinsert}%
+ }%
+ {%
+% \end{macrocode}
+% First use singular form, all caps:
+% \begin{macrocode}
+ \mfirstucMakeUppercase
+ {\genacrfullformat{\glslabel}{\glsinsert}}%
+ }%
+ }%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% User supplied text.
+% \begin{macrocode}
+ \glscustomtext
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\genacrfullformat}
+%\changes{4.02}{2013-12-05}{new}
+%\begin{definition}
+%\cs{genacrfullformat}\marg{label}\marg{insert}
+%\end{definition}
+% The full format used by \cs{glsgenacfmt} (singular).
+% \begin{macrocode}
+\newcommand*{\genacrfullformat}[2]{%
+ \glsentrylong{#1}#2\space
+ (\protect\firstacronymfont{\glsentryshort{#1}})%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Genacrfullformat}
+%\changes{4.02}{2013-12-05}{new}
+%\begin{definition}
+%\cs{Genacrfullformat}\marg{label}\marg{insert}
+%\end{definition}
+% As above but makes the first letter upper case.
+% \begin{macrocode}
+\newcommand*{\Genacrfullformat}[2]{%
+ \protected@edef\gls@text{\genacrfullformat{#1}{#2}}%
+ \xmakefirstuc\gls@text
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\genplacrfullformat}
+%\changes{4.02}{2013-12-05}{new}
+%\begin{definition}
+%\cs{genplacrfullformat}\marg{label}\marg{insert}
+%\end{definition}
+% The full format used by \cs{glsgenacfmt} (plural).
+% \begin{macrocode}
+\newcommand*{\genplacrfullformat}[2]{%
+ \glsentrylongpl{#1}#2\space
+ (\protect\firstacronymfont{\glsentryshortpl{#1}})%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Genplacrfullformat}
+%\changes{4.02}{2013-12-05}{new}
+%\begin{definition}
+%\cs{Genplacrfullformat}\marg{label}\marg{insert}
+%\end{definition}
+% As above but makes the first letter upper case.
+% \begin{macrocode}
+\newcommand*{\Genplacrfullformat}[2]{%
+ \protected@edef\gls@text{\genplacrfullformat{#1}{#2}}%
+ \xmakefirstuc\gls@text
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsdisplayfirst}
+% Deprecated. Kept for backward compatibility.
+%\changes{3.11a}{2013-10-15}{obsoleted}
+% \begin{macrocode}
+\newcommand*{\glsdisplayfirst}[4]{#1#4}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsdisplay}
+% Deprecated. Kept for backward compatibility.
+%\changes{3.11a}{2013-10-15}{obsoleted}
+% \begin{macrocode}
+\newcommand*{\glsdisplay}[4]{#1#4}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\defglsdisplay}
+%\changes{3.11a}{2013-10-15}{obsoleted}
+% Deprecated. Kept for backward compatibility.
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\defglsdisplayfirst}
+% Deprecated. Kept for backward compatibility.
+%\changes{3.11a}{2013-10-15}{obsoleted}
+% \begin{macrocode}
+\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}}%
+ }%
+ {%
+% \end{macrocode}
+%\changes{4.04}{2014-03-06}{fixed unwanted space}
+% \begin{macrocode}
+ \noexpand\@@gls@default@entryfmt
+ {\noexpand\csuse{gls@#1@displayfirst}}%
+ {\noexpand\glsdisplay}%
+ }%
+ }%
+ }%
+ \@gls@doentrydef
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Links to glossary entries}
+% The links to glossary entries all have a first optional
+% argument that can be used to change the format and counter
+% of the associated entry number. Except for \cs{glslink}
+% and \cs{glsdisp},
+% the commands like \cs{gls} have a final optional
+% argument that can be used to insert additional text in the
+% link (this will usually be appended, but can be redefined using
+% \ics{defglsentryfmt}).
+% It goes against the \LaTeX\ norm to have an optional
+% argument after the mandatory arguments, but it makes more
+% sense to write, say, \verb|\gls{label}['s]| rather than, say,
+% \verb|\gls[append='s]{label}|. Since these control sequences
+% are defined to include the final square bracket, spaces
+% will be ignored after them. This is likely to lead to
+% confusion as most users would not expect, say, "\gls{"\meta{label}"}"
+% to ignore following spaces, so \cs{new@ifnextchar} from the
+% \isty{amsgen} package is required.
+%
+% The following keys can be used in the first optional
+% argument. The \gloskey[glslink]{counter} key checks that the
+% value is the name of a valid counter.
+%\changes{3.0}{2011-04-02}{replaced \cs{@ifundefined} with
+%\cs{ifcsundef}}
+% \begin{macrocode}
+\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}%
+ }%
+}
+% \end{macrocode}
+% The value of the \gloskey[glslink]{format} key should be the name of a
+% command (without the initial backslash) that has a single mandatory
+% argument which can be used to format the associated entry
+% number.
+% \begin{macrocode}
+\define@key{glslink}{format}{%
+ \def\@glsnumberformat{#1}}
+% \end{macrocode}
+% The \gloskey[glslink]{hyper} key is a boolean key, it can either have the
+% value true or false, and indicates whether or not to make a
+% hyperlink to the relevant glossary entry. If hyper is false, an
+% entry will still be made in the glossary, but the given text
+% won't be a hyperlink.
+% \begin{macrocode}
+\define@boolkey{glslink}{hyper}[true]{}
+% \end{macrocode}
+%\changes{4.08}{2014-07-30}{explicitly initialise hyper key}
+% Initialise hyper key.
+% \begin{macrocode}
+\ifdef{\hyperlink}{\KV@glslink@hypertrue}{\KV@glslink@hyperfalse}
+% \end{macrocode}
+%\changes{3.04}{2012-11-18}{added local key}
+% The \gloskey[glslink]{local} key is a boolean key. If true this
+% indicates that commands such as \ics{gls} should only do a local
+% reset rather than a global one.
+% \begin{macrocode}
+\define@boolkey{glslink}{local}[true]{}
+% \end{macrocode}
+%
+% The original \cs{glsifhyper} command isn't particularly useful
+% as it makes more sense to check the actual hyperlink setting
+% rather than testing whether the starred or unstarred version
+% has been used. Therefore, as from version 4.08, \cs{glsifhyper}
+% is deprecated in favour of \ics{glsifhyperon}. In case there is
+% a particular need to know whether the starred or unstarred version
+% was used, provide a new command that determines whether the
+% *-version, +-version or unmodified version was used.
+%\begin{definition}
+%\cs{glslinkvar}\marg{unmodified case}\marg{star case}\marg{plus case}
+%\end{definition}
+%\begin{macro}{\glslinkvar}
+%\changes{4.08}{2014-07-30}{new}
+% Initialise to unmodified case.
+% \begin{macrocode}
+\newcommand*{\glslinkvar}[3]{#1}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsifhyper}
+% Now deprecated.
+%\changes{4.08}{2014-07-30}{deprecated}
+% \begin{macrocode}
+\newcommand*{\glsifhyper}[2]{%
+ \glslinkvar{#1}{#2}{#1}%
+ \GlossariesWarning{\string\glsifhyper\space is deprecated. Did
+ you mean \string\glsifhyperon\space or \string\glslinkvar?}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@hyp@opt}
+% Used by the commands such as \cs{glslink} to determine whether to
+% modify the hyper option.
+%\changes{4.08}{2014-07-30}{new}
+% \begin{macrocode}
+\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}}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\s@gls@hyp@opt}
+% Starred version
+%\changes{4.08}{2014-07-30}{new}
+% \begin{macrocode}
+\newcommand*{\s@gls@hyp@opt}[1][]{%
+ \let\glslinkvar\@secondofthree
+ \@gls@hyp@opt@cs[hyper=false,#1]}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\p@gls@hyp@opt}
+% Plus version
+%\changes{4.08}{2014-07-30}{new}
+% \begin{macrocode}
+\newcommand*{\p@gls@hyp@opt}[1][]{%
+ \let\glslinkvar\@thirdofthree
+ \@gls@hyp@opt@cs[hyper=true,#1]}
+% \end{macrocode}
+%\end{macro}
+%
+%Syntax:
+%\begin{definition}
+% \cs{glslink}\oarg{options}\marg{label}\marg{text}
+%\end{definition}
+% Display \meta{text} in the document, and add the entry information
+% for \meta{label} into the relevant glossary. The optional
+% argument should be a key value list using the \texttt{glslink}
+% keys defined above.
+%
+% There is also a starred version:
+%\begin{definition}
+% \cs{glslink*}\oarg{options}\marg{label}\marg{text}
+%\end{definition}
+% which is equivalent to
+% \cs{glslink}"[hyper=false,"\meta{options}"]"\marg{label}\marg{text}
+%
+% First determine which version is being used:
+%\begin{macro}{\glslink}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\glslink}{%
+ \@gls@hyp@opt\@gls@@link
+}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sgls@link}}
+%\begin{macro}{\@gls@@link}
+%\changes{2.03}{2009-09-23}{new}
+% The main part of the business is in \cs{@gls@link}
+% which shouldn't check if the term is defined as it's called by
+% \cs{gls} etc which also perform that check.
+% \begin{macrocode}
+\newcommand*{\@gls@@link}[3][]{%
+ \glsdoifexistsordo{#2}%
+ {%
+ \let\do@gls@link@checkfirsthyper\relax
+ \@gls@link[#1]{#2}{#3}%
+ }{%
+% \end{macrocode}
+% Display the specified text. (The entry doesn't exist so
+% there's nothing to link it to.)
+% \begin{macrocode}
+ \glstextformat{#3}%
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glspostlinkhook}
+%\changes{4.16}{2015-07-08}{new}
+% \begin{macrocode}
+\newcommand*{\glspostlinkhook}{}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{\@gls@link@checkfirsthyper}
+% Check for first use and switch off \gloskey[glslink]{hyper} key
+% if hyperlink not wanted. (Should be off if first use and
+% hyper=false is on or if first use and both the entry is in an acronym
+% list and the acrfootnote setting is on.)
+% This assumes the glossary type is stored in \cs{glstype} and the
+% label is stored in \cs{glslabel}.
+%\changes{4.08}{2014-07-30}{new}
+% \begin{macrocode}
+\newcommand*{\@gls@link@checkfirsthyper}{%
+ \ifglsused{\glslabel}%
+ {%
+ }%
+ {%
+ \gls@checkisacronymlist\glstype
+ \ifglshyperfirst
+ \if@glsisacronymlist
+ \ifglsacrfootnote
+ \KV@glslink@hyperfalse
+ \fi
+ \fi
+ \else
+ \KV@glslink@hyperfalse
+ \fi
+ }%
+% \end{macrocode}
+% Allow user to hook into this
+% \begin{macrocode}
+ \glslinkcheckfirsthyperhook
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glslinkcheckfirsthyperhook}
+% Allow used to hook into the \cs{@gls@link@checkfirsthyper} macro
+%\changes{4.08}{2014-07-30}{new}
+% \begin{macrocode}
+\newcommand*{\glslinkcheckfirsthyperhook}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glslinkpostsetkeys}
+%\changes{4.16}{2015-07-08}{new}
+% \begin{macrocode}
+\newcommand*{\glslinkpostsetkeys}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsifhyperon}
+%\changes{4.16}{2015-07-08}{moved definition of \cs{glsifhyperon}}
+% Check the value of the \gloskey[glslink]{hyper} key:
+% \begin{macrocode}
+\newcommand{\glsifhyperon}[2]{\ifKV@glslink@hyper#1\else#2\fi}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\do@glsdisablehyperinlist}
+% Disable hyperlink if in the ``nohyper'' list.
+%\changes{4.19}{2015-11-22}{new}
+% \begin{macrocode}
+\newcommand*{\do@glsdisablehyperinlist}{%
+ \expandafter\DTLifinlist\expandafter{\glstype}{\@gls@nohyperlist}%
+ {\KV@glslink@hyperfalse}{}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@setdefault@glslink@opts}
+% Hook to set default options for \cs{@glslink}.
+%\changes{4.20}{2015-11-30}{new}
+% \begin{macrocode}
+\newcommand*{\@gls@setdefault@glslink@opts}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@link}
+%\changes{1.07}{2007-09-13}{fixed bug caused by \cs{theglsentrycounter} setting the page number too soon}
+%\changes{1.15}{2008-08-15}{added \cs{glslabel}}
+% \begin{macrocode}
+\def\@gls@link[#1]#2#3{%
+% \end{macrocode}
+%\changes{2.03}{2009-09-23}{Moved entry existence check to
+% avoid duplicate code}
+% Inserting \cs{leavevmode} suggested by Donald~Arseneau (avoids
+% problem with tabularx).
+%\changes{2.03}{2009-09-23}{added \cs{leavevmode}}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+ \leavevmode
+ \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
+%\cs{@gls@link@label} to \cs{@gls@link}}
+% \begin{macrocode}
+ \def\@gls@link@opts{#1}%
+ \let\@gls@link@label\glslabel
+% \end{macrocode}
+% \begin{macrocode}
+ \def\@glsnumberformat{glsnumberformat}%
+ \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}%
+% If this is in one of the ``nohypertypes'' glossaries, suppress the
+% 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}%
+% \end{macrocode}
+%\changes{4.08}{2014-07-30}{removed redundancy}
+% Save original setting
+% \begin{macrocode}
+ \let\org@ifKV@glslink@hyper\ifKV@glslink@hyper
+% \end{macrocode}
+% Set defaults:
+%\changes{4.20}{2015-11-30}{added \cs{@gls@setdefault@glslink@opts}}
+% \begin{macrocode}
+ \@gls@setdefault@glslink@opts
+% \end{macrocode}
+% Switch off hyper setting if the glossary type has been identified
+% in nohyperlist.
+% \begin{macrocode}
+ \do@glsdisablehyperinlist
+% \end{macrocode}
+% Macros must set this before calling \cs{@gls@link}. The
+% commands that check the first use flag should set this to
+% \cs{@gls@link@checkfirsthyper} otherwise it should be set to
+% \cs{relax}.
+% \begin{macrocode}
+ \do@gls@link@checkfirsthyper
+ \setkeys{glslink}{#1}%
+% \end{macrocode}
+% Add a hook for the user to customise things after the keys have
+% been set.
+% \begin{macrocode}
+ \glslinkpostsetkeys
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{moved definition of \cs{glsifhyperon}
+%outside of this macro}
+% Store the entry's counter in \cs{theglsentrycounter}
+%\changes{3.0}{2011-04-02}{added \cs{@gls@saveentrycounter}}
+% \begin{macrocode}
+ \@gls@saveentrycounter
+% \end{macrocode}
+%\changes{3.0}{2011-04-02}{added \cs{@gls@setsort}}
+% Define sort key if necessary:
+% \begin{macrocode}
+ \@gls@setsort{\glslabel}%
+% \end{macrocode}
+%\changes{2.01}{2009 May 30}{moved \cs{@do@wrglossary} before term is displayed
+% to prevent unwanted whatsit}
+% (De-tok'ing done by \cs{@@do@wrglossary})
+% \begin{macrocode}
+ \@do@wrglossary{#2}%
+ \ifKV@glslink@hyper
+ \@glslink{\glolinkprefix\glslabel}{\glstextformat{#3}}%
+ \else
+% \end{macrocode}
+%\changes{3.13a}{2013-11-05}{removed \cs{relax}}
+%\changes{4.20}{2015-11-30}{added \cs{glsdonohyperlink} when hyperlink is
+%suppressed}
+% \begin{macrocode}
+ \glsdonohyperlink{\glolinkprefix\glslabel}{\glstextformat{#3}}%
+ \fi
+% \end{macrocode}
+% Restore original setting
+% \begin{macrocode}
+ \let\ifKV@glslink@hyper\org@ifKV@glslink@hyper
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glolinkprefix}
+% \begin{macrocode}
+\newcommand*{\glolinkprefix}{glo:}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsentrycounter}
+% Set default value of entry counter
+%\changes{3.02}{2012-05-21}{set default value}
+% \begin{macrocode}
+\def\glsentrycounter{\glscounter}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@saveentrycounter}
+%\changes{3.0}{2011-04-02}{new}
+% Need to check if using \ctr{equation} counter in \env{align}
+% environment:
+% \begin{macrocode}
+\newcommand*{\@gls@saveentrycounter}{%
+ \def\@gls@Hcounter{}%
+% \end{macrocode}
+% Are we using \ctr{equation} counter?
+% \begin{macrocode}
+ \ifthenelse{\equal{\@gls@counter}{equation}}%
+ {
+% \end{macrocode}
+% If we're in \env{align} environment, \cs{xatlevel@} will be defined.
+% (Can't test for \cs{@currenvir} as may be inside an inner
+% environment.)
+% \begin{macrocode}
+ \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}%
+% \end{macrocode}
+% Check if hyperref version of this counter
+% \begin{macrocode}
+ \ifcsundef{theH\@gls@counter}%
+ {%
+ \def\@gls@Hcounter{\theglsentrycounter}%
+ }%
+ {%
+ \def\@gls@Hcounter{\csname theH\@gls@counter\endcsname}%
+ }%
+ \protected@edef\theHglsentrycounter{\@gls@Hcounter}%
+ \restorecounters@
+ \fi
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Not using \ctr{equation} counter so no special measures:
+% \begin{macrocode}
+ \edef\theglsentrycounter{\expandafter\noexpand
+ \csname the\@gls@counter\endcsname}%
+ }%
+% \end{macrocode}
+% Check if hyperref version of this counter
+% \begin{macrocode}
+ \ifx\@gls@Hcounter\@empty
+ \ifcsundef{theH\@gls@counter}%
+ {%
+ \def\theHglsentrycounter{\theglsentrycounter}%
+ }%
+ {%
+ \protected@edef\theHglsentrycounter{\expandafter\noexpand
+ \csname theH\@gls@counter\endcsname}%
+ }%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\changes{1.01}{2007-05-17}{Added range facility in format key}%
+%\begin{macro}{\@set@glo@numformat}
+% Set the formatting information in the format required by
+% \app{makeindex}. The first argument is the format specified
+% by the user (via the format key), the second argument is the
+% name of the counter used to indicate the location, the third
+% argument is a control sequence which stores the required format
+% and the fourth argument (new to v3.0) is the hyper-prefix.
+%\changes{3.0}{2010/03/31}{added 4th argument}
+% \begin{macrocode}
+\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%
+}
+% \end{macrocode}
+%\end{macro}
+% Check to see if the given string starts with a ( or ). If it
+% does set \cs{@glo@prefix} to the starting character,
+% and \cs{@glo@suffix} to the rest (or "glsnumberformat"
+% if there is nothing else),
+% otherwise set \cs{@glo@prefix} to nothing and
+% \cs{@glo@suffix} to all of it.
+% \begin{macrocode}
+\def\@glo@check@mkidxrangechar#1#2\@nil{%
+\if#1(\relax
+ \def\@glo@prefix{(}%
+ \if\relax#2\relax
+ \def\@glo@suffix{glsnumberformat}%
+ \else
+ \def\@glo@suffix{#2}%
+ \fi
+\else
+ \if#1)\relax
+ \def\@glo@prefix{)}%
+ \if\relax#2\relax
+ \def\@glo@suffix{glsnumberformat}%
+ \else
+ \def\@glo@suffix{#2}%
+ \fi
+ \else
+ \def\@glo@prefix{}\def\@glo@suffix{#1#2}%
+ \fi
+\fi}
+% \end{macrocode}
+%
+%\begin{macro}{\@gls@escbsdq}
+% Escape backslashes and double quote marks. The argument must be
+% a control sequence.
+% \begin{macrocode}
+\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}%
+% \end{macrocode}
+%\changes{3.04}{2012-11-18}{unsanitize \cs{gls@numberpage},
+%\cs{gls@alphpage}, \cs{gls@Alphpage} and \cs{gls@romanpage}}
+% Unsanitize \cs{gls@numberpage}, \cs{gls@alphpage},
+% \cs{gls@Alphpage} and \cs{glsromanpage} (thanks to David~Carlise
+% for the suggestion.)
+% \begin{macrocode}
+ \@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
+ }%
+% \end{macrocode}
+% Assign to required control sequence
+% \begin{macrocode}
+ \let#1=\gls@xdystring
+}
+% \end{macrocode}
+%\end{macro}
+% Catch special characters\mkidxspch\ (argument must be a
+% control sequence):
+%\begin{macro}{\@gls@checkmkidxchars}
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+% Update the control sequence and strip trailing \cs{@nil}:
+%\begin{macro}{\@gls@updatechecked}
+% \begin{macrocode}
+\def\@gls@updatechecked#1\@nil#2{\def#2{#1}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@gls@tmpb}
+%\changes{1.1}{2008-02-22}{changed \cs{toksdef} to \cs{newtoks}}
+% Define temporary token
+% \begin{macrocode}
+\newtoks\@gls@tmpb
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@gls@checkquote}
+% Replace \verb|"| with \verb|""| since \verb|"| is a makeindex
+% special character\mkidxspch.
+% \begin{macrocode}
+\def\@gls@checkquote#1"#2"#3\null{%
+ \@gls@tmpb=\expandafter{\@gls@checkedmkidx}%
+ \toks@={#1}%
+ \ifx\null#2\null
+ \ifx\null#3\null
+ \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}%
+ \def\@@gls@checkquote{\relax}%
+ \else
+ \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+ \@gls@quotechar\@gls@quotechar\@gls@quotechar\@gls@quotechar}%
+ \def\@@gls@checkquote{\@gls@checkquote#3\null}%
+ \fi
+ \else
+ \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+ \@gls@quotechar\@gls@quotechar}%
+ \ifx\null#3\null
+ \def\@@gls@checkquote{\@gls@checkquote#2""\null}%
+ \else
+ \def\@@gls@checkquote{\@gls@checkquote#2"#3\null}%
+ \fi
+ \fi
+ \@@gls@checkquote
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@gls@checkescquote}
+% Do the same for \verb|\"|:
+% \begin{macrocode}
+\def\@gls@checkescquote#1\"#2\"#3\null{%
+ \@gls@tmpb=\expandafter{\@gls@checkedmkidx}%
+ \toks@={#1}%
+ \ifx\null#2\null
+ \ifx\null#3\null
+ \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}%
+ \def\@@gls@checkescquote{\relax}%
+ \else
+ \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+ \@gls@quotechar\string\"\@gls@quotechar
+ \@gls@quotechar\string\"\@gls@quotechar}%
+ \def\@@gls@checkescquote{\@gls@checkescquote#3\null}%
+ \fi
+ \else
+ \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+ \@gls@quotechar\string\"\@gls@quotechar}%
+ \ifx\null#3\null
+ \def\@@gls@checkescquote{\@gls@checkescquote#2\"\"\null}%
+ \else
+ \def\@@gls@checkescquote{\@gls@checkescquote#2\"#3\null}%
+ \fi
+ \fi
+\@@gls@checkescquote
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@gls@checkescactual}
+% Similarly for \verb|\?| (which is replaces @ as
+% \app{makeindex}'s special character):
+% \begin{macrocode}
+\def\@gls@checkescactual#1\?#2\?#3\null{%
+ \@gls@tmpb=\expandafter{\@gls@checkedmkidx}%
+ \toks@={#1}%
+ \ifx\null#2\null
+ \ifx\null#3\null
+ \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}%
+ \def\@@gls@checkescactual{\relax}%
+ \else
+ \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+ \@gls@quotechar\string\"\@gls@actualchar
+ \@gls@quotechar\string\"\@gls@actualchar}%
+ \def\@@gls@checkescactual{\@gls@checkescactual#3\null}%
+ \fi
+ \else
+ \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+ \@gls@quotechar\string\"\@gls@actualchar}%
+ \ifx\null#3\null
+ \def\@@gls@checkescactual{\@gls@checkescactual#2\?\?\null}%
+ \else
+ \def\@@gls@checkescactual{\@gls@checkescactual#2\?#3\null}%
+ \fi
+ \fi
+\@@gls@checkescactual
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@gls@checkescbar}
+% Similarly for \verb"\|":
+% \begin{macrocode}
+\def\@gls@checkescbar#1\|#2\|#3\null{%
+ \@gls@tmpb=\expandafter{\@gls@checkedmkidx}%
+ \toks@={#1}%
+ \ifx\null#2\null
+ \ifx\null#3\null
+ \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}%
+ \def\@@gls@checkescbar{\relax}%
+ \else
+ \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+ \@gls@quotechar\string\"\@gls@encapchar
+ \@gls@quotechar\string\"\@gls@encapchar}%
+ \def\@@gls@checkescbar{\@gls@checkescbar#3\null}%
+ \fi
+ \else
+ \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+ \@gls@quotechar\string\"\@gls@encapchar}%
+ \ifx\null#3\null
+ \def\@@gls@checkescbar{\@gls@checkescbar#2\|\|\null}%
+ \else
+ \def\@@gls@checkescbar{\@gls@checkescbar#2\|#3\null}%
+ \fi
+ \fi
+\@@gls@checkescbar
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@gls@checkesclevel}
+% Similarly for \verb"\!":
+% \begin{macrocode}
+\def\@gls@checkesclevel#1\!#2\!#3\null{%
+ \@gls@tmpb=\expandafter{\@gls@checkedmkidx}%
+ \toks@={#1}%
+ \ifx\null#2\null
+ \ifx\null#3\null
+ \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}%
+ \def\@@gls@checkesclevel{\relax}%
+ \else
+ \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+ \@gls@quotechar\string\"\@gls@levelchar
+ \@gls@quotechar\string\"\@gls@levelchar}%
+ \def\@@gls@checkesclevel{\@gls@checkesclevel#3\null}%
+ \fi
+ \else
+ \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+ \@gls@quotechar\string\"\@gls@levelchar}%
+ \ifx\null#3\null
+ \def\@@gls@checkesclevel{\@gls@checkesclevel#2\!\!\null}%
+ \else
+ \def\@@gls@checkesclevel{\@gls@checkesclevel#2\!#3\null}%
+ \fi
+ \fi
+\@@gls@checkesclevel
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@gls@checkbar}
+% and for \verb"|":
+% \begin{macrocode}
+\def\@gls@checkbar#1|#2|#3\null{%
+ \@gls@tmpb=\expandafter{\@gls@checkedmkidx}%
+ \toks@={#1}%
+ \ifx\null#2\null
+ \ifx\null#3\null
+ \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}%
+ \def\@@gls@checkbar{\relax}%
+ \else
+ \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+ \@gls@quotechar\@gls@encapchar\@gls@quotechar\@gls@encapchar}%
+ \def\@@gls@checkbar{\@gls@checkbar#3\null}%
+ \fi
+ \else
+ \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+ \@gls@quotechar\@gls@encapchar}%
+ \ifx\null#3\null
+ \def\@@gls@checkbar{\@gls@checkbar#2||\null}%
+ \else
+ \def\@@gls@checkbar{\@gls@checkbar#2|#3\null}%
+ \fi
+ \fi
+ \@@gls@checkbar
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@gls@checklevel}
+% and for \verb"!":
+% \begin{macrocode}
+\def\@gls@checklevel#1!#2!#3\null{%
+ \@gls@tmpb=\expandafter{\@gls@checkedmkidx}%
+ \toks@={#1}%
+ \ifx\null#2\null
+ \ifx\null#3\null
+ \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}%
+ \def\@@gls@checklevel{\relax}%
+ \else
+ \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+ \@gls@quotechar\@gls@levelchar\@gls@quotechar\@gls@levelchar}%
+ \def\@@gls@checklevel{\@gls@checklevel#3\null}%
+ \fi
+ \else
+ \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+ \@gls@quotechar\@gls@levelchar}%
+ \ifx\null#3\null
+ \def\@@gls@checklevel{\@gls@checklevel#2!!\null}%
+ \else
+ \def\@@gls@checklevel{\@gls@checklevel#2!#3\null}%
+ \fi
+ \fi
+ \@@gls@checklevel
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@gls@checkactual}
+% and for \verb"?":
+% \begin{macrocode}
+\def\@gls@checkactual#1?#2?#3\null{%
+ \@gls@tmpb=\expandafter{\@gls@checkedmkidx}%
+ \toks@={#1}%
+ \ifx\null#2\null
+ \ifx\null#3\null
+ \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}%
+ \def\@@gls@checkactual{\relax}%
+ \else
+ \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+ \@gls@quotechar\@gls@actualchar\@gls@quotechar\@gls@actualchar}%
+ \def\@@gls@checkactual{\@gls@checkactual#3\null}%
+ \fi
+ \else
+ \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@
+ \@gls@quotechar\@gls@actualchar}%
+ \ifx\null#3\null
+ \def\@@gls@checkactual{\@gls@checkactual#2??\null}%
+ \else
+ \def\@@gls@checkactual{\@gls@checkactual#2?#3\null}%
+ \fi
+ \fi
+ \@@gls@checkactual
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@xdycheckquote}
+% As before but for use with \app{xindy}
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@xdycheckbackslash}
+% Need to escape all backslashes for \app{xindy}.
+% Define command that will define \cs{@gls@xdycheckbackslash}
+% \begin{macrocode}
+\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
+ }%
+}
+% \end{macrocode}
+% Now go ahead and define \cs{@gls@xdycheckbackslash}
+% \begin{macrocode}
+\def@gls@xdycheckbackslash
+% \end{macrocode}
+%\end{macro}
+
+%\begin{macro}{\glsdohypertarget}
+%\changes{4.08}{2014-07-30}{new}
+% \begin{macrocode}
+\newlength\gls@tmplen
+\newcommand*{\glsdohypertarget}[2]{%
+ \@glsshowtarget{#1}%
+ \settoheight{\gls@tmplen}{#2}%
+ \raisebox{\gls@tmplen}{\hypertarget{#1}{}}#2%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsdohyperlink}
+%\changes{4.08}{2014-07-30}{new}
+% \begin{macrocode}
+\newcommand*{\glsdohyperlink}[2]{%
+ \@glsshowtarget{#1}%
+ \hyperlink{#1}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsdonohyperlink}
+%\changes{4.20}{2015-11-30}{new}
+% \begin{macrocode}
+\newcommand*{\glsdonohyperlink}[2]{#2}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glslink}
+% If \ics{hyperlink} is not defined \cs{@glslink}
+% ignores its first argument and just does the second argument,
+% otherwise it is equivalent to \ics{hyperlink}.
+%\changes{3.0}{2011-04-02}{replaced \cs{@ifundefined} with
+%\cs{ifcsundef}}
+% \begin{macrocode}
+\ifcsundef{hyperlink}%
+{%
+ \let\@glslink\glsdonohyperlink
+}%
+{%
+ \let\@glslink\glsdohyperlink
+}
+% \end{macrocode}
+%\end{macro}
+%\changes{1.12}{2008-03-08}{added check for \cs{hypertarget} separate
+% to \cs{hyperlink} (memoir defines \cs{hyperlink} but not
+% \cs{hypertarget})}
+%\begin{macro}{\@glstarget}
+% If \ics{hypertarget} is not defined, \cs{@glstarget}
+% ignores its first argument and just does the second argument,
+% otherwise it is equivalent to \ics{hypertarget}.
+%\changes{1.16}{2008-08-27}{raised the hypertarget so the target text doesn't
+% scroll off the top of the page}
+% \begin{macrocode}
+\ifcsundef{hypertarget}%
+{%
+ \let\@glstarget\@secondoftwo
+}%
+{%
+ \let\@glstarget\glsdohypertarget
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Glossary hyperlinks can be disabled using \cs{glsdisablehyper}
+% (effect can be localised):
+%\begin{macro}{\glsdisablehyper}
+%\changes{4.08}{2014-07-30}{added \cs{KV@glslink@hyperfalse}
+% to definition}
+% \begin{macrocode}
+\newcommand{\glsdisablehyper}{%
+ \KV@glslink@hyperfalse
+ \let\@glslink\glsdonohyperlink
+ \let\@glstarget\@secondoftwo
+}
+% \end{macrocode}
+%\end{macro}
+% Glossary hyperlinks can be enabled using \cs{glsenablehyper}
+% (effect can be localised):
+%\begin{macro}{\glsenablehyper}
+%\changes{4.08}{2014-07-30}{added \cs{KV@glslink@hypertrue}
+% to definition}
+% \begin{macrocode}
+\newcommand{\glsenablehyper}{%
+ \KV@glslink@hypertrue
+ \let\@glslink\glsdohyperlink
+ \let\@glstarget\glsdohypertarget
+}
+% \end{macrocode}
+%\end{macro}
+%
+%
+% Provide some convenience commands if not already defined:
+%\changes{4.08}{2014-07-30}{removed \cs{@thirdofthree} (defined in kernel)}
+% \begin{macrocode}
+\providecommand{\@firstofthree}[3]{#1}
+\providecommand{\@secondofthree}[3]{#2}
+% \end{macrocode}
+%
+%Syntax:
+%\begin{definition}
+% \cs{gls}\oarg{options}\marg{label}\oarg{insert text}
+%\end{definition}
+% Link to glossary entry using singular form. The link text
+% is taken from the value of the \gloskey{text} or \gloskey{first}
+% keys used when the entry was defined.
+%
+% The first optional argument is a key-value list, the same as
+% \ics{glslink}\igloskey[glslink]{hyper}\igloskey[glslink]{format}\igloskey[glslink]{counter},
+% the mandatory argument is the entry label.
+% After the mandatory argument, there is another optional argument
+% to insert extra text in the link text (the location of the inserted
+% text is governed by \ics{glsdisplay} and
+% \ics{glsdisplayfirst}). As with \cs{glslink}
+% there is a starred version which is the same as the unstarred
+% version but with the \gloskey[glslink]{hyper} key set to \texttt{false}.
+% (Additional options can also be specified
+% in the first optional argument.)
+%
+% First determine which version is being used:
+%\begin{macro}{\gls}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\gls}{\@gls@hyp@opt\@gls}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sgls}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+%\begin{macro}{\@gls}
+% \begin{macrocode}
+\newcommand*{\@gls}[2][]{%
+ \new@ifnextchar[{\@gls@{#1}{#2}}{\@gls@{#1}{#2}[]}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@gls@}
+% Read in the final optional argument:
+% \begin{macrocode}
+\def\@gls@#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+ \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper
+% \end{macrocode}
+%\changes{3.11a}{2013-10-15}{add \cs{glslabel}, \cs{glsifplural},
+% \cs{glscapscase}, \cs{glscustomtext} and \cs{glsinsert}}
+%\changes{4.03}{2014-01-20}{removed \cs{glslabel} (defined in
+%\cs{@gls@link})}
+% \begin{macrocode}
+ \let\glsifplural\@secondoftwo
+ \let\glscapscase\@firstofthree
+ \let\glscustomtext\@empty
+ \def\glsinsert{#3}%
+% \end{macrocode}
+%\changes{4.06}{2014-03-12}{added \cs{glsifhyper}}
+%\changes{4.08}{2014-07-30}{moved \cs{glsifhyper}}
+% Determine what the link text should be (this is stored in
+% \cs{@glo@text})
+%\changes{3.11a}{2013-10-15}{change to using \cs{glsentryfmt} style
+%commands}
+% Note that \cs{@gls@link} sets \cs{glstype}.
+% \begin{macrocode}
+ \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}%
+% \end{macrocode}
+% Call \cs{@gls@link}.
+% If \pkgopt{footnote} package option has been used and the glossary
+% type is \cs{acronymtype}, suppress
+% hyperlink for first use. Likewise if the \pkgopt[false]{hyperfirst}
+% package option is used.
+%\changes{1.16}{2008-08-27}{Test glossary type is
+%\cs{acronymtype} in addition to
+%checking if footnote option has been used}
+%\changes{2.03}{2009-09-23}{Added check for hyperfirst}
+%\changes{2.04}{2009-11-10}{Changed test to check if glossary type
+%has been identified as a list of acronyms}
+%\changes{4.08}{2014-07-30}{moved check for first use to
+%\cs{@gls@link}}
+% \begin{macrocode}
+ \@gls@link[#1]{#2}{\@glo@text}%
+% \end{macrocode}
+% Indicate that this entry has now been used
+% \begin{macrocode}
+ \ifKV@glslink@local
+ \glslocalunset{#2}%
+ \else
+ \glsunset{#2}%
+ \fi
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%\end{macro}
+%
+% \cs{Gls} behaves like \cs{gls}, but the first letter
+% of the link text is converted to uppercase (note that if the
+% first letter has an accent, the accented letter will need to
+% be grouped when you define the entry). It is mainly intended
+% for terms that start a sentence:
+%\begin{macro}{\Gls}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\Gls}{\@gls@hyp@opt\@Gls}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGls}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@Gls}[2][]{%
+ \new@ifnextchar[{\@Gls@{#1}{#2}}{\@Gls@{#1}{#2}[]}%
+}
+% \end{macrocode}
+%\begin{macro}{\@Gls@}
+% Read in the final optional argument:
+% \begin{macrocode}
+\def\@Gls@#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+ \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper
+% \end{macrocode}
+%\changes{4.03}{2014-01-20}{removed \cs{glslabel} (defined in
+%\cs{@gls@link})}
+%\changes{3.11a}{2013-10-15}{add \cs{glsifplural},
+% \cs{glscapscase}, \cs{glscustomtext} and \cs{glsinsert}}
+% \begin{macrocode}
+ \let\glsifplural\@secondoftwo
+ \let\glscapscase\@secondofthree
+ \let\glscustomtext\@empty
+ \def\glsinsert{#3}%
+% \end{macrocode}
+%\changes{4.06}{2014-03-12}{added \cs{glsifhyper}}
+%\changes{4.08}{2014-07-30}{moved \cs{glsifhyper}}
+%\changes{4.08}{2014-07-30}{moved check for first use to
+%\cs{@gls@link}}
+% Determine what the link text should be (this is stored in
+% \cs{@glo@text})
+%\changes{3.11a}{2013-10-15}{change to using \cs{glsentryfmt} style
+%commands}
+% Note that \cs{@gls@link} sets \cs{glstype}.
+% \begin{macrocode}
+ \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}%
+% \end{macrocode}
+% Call \cs{@gls@link}
+% If \pkgopt{footnote} package option has been used and the glossary
+% type is \cs{acronymtype}, suppress
+% hyperlink for first use. Likewise if the \pkgopt[false]{hyperfirst}
+% package option is used.
+%\changes{1.16}{2008-08-27}{Test glossary type is
+%\cs{acronymtype} in addition to
+%checking if footnote option has been used}
+%\changes{2.03}{2009-09-23}{Added check for hyperfirst}
+%\changes{2.04}{2009-11-10}{Changed test to check if glossary type
+%has been identified as a list of acronyms}
+%\changes{3.11a}{2013-10-15}{removed \cs{makefirstuc} (now dealt
+%with in \cs{glsentryfmt})}
+% \begin{macrocode}
+ \@gls@link[#1]{#2}{\@glo@text}%
+% \end{macrocode}
+% Indicate that this entry has now been used
+% \begin{macrocode}
+ \ifKV@glslink@local
+ \glslocalunset{#2}%
+ \else
+ \glsunset{#2}%
+ \fi
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%\end{macro}
+%
+% \cs{GLS} behaves like \ics{gls}, but the link
+% text is converted to uppercase:
+%\changes{3.01}{2011-04-12}{made robust}
+%\begin{macro}{\GLS}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\GLS}{\@gls@hyp@opt\@GLS}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGLS}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@GLS}[2][]{%
+ \new@ifnextchar[{\@GLS@{#1}{#2}}{\@GLS@{#1}{#2}[]}%
+}
+% \end{macrocode}
+%\begin{macro}{\@GLS@}
+% Read in the final optional argument:
+% \begin{macrocode}
+\def\@GLS@#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+ \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper
+% \end{macrocode}
+%\changes{4.03}{2014-01-20}{removed \cs{glslabel} (defined in
+%\cs{@gls@link})}
+%\changes{3.11a}{2013-10-15}{add \cs{glslabel}, \cs{glsifplural},
+% \cs{glscapscase}, \cs{glscustomtext} and \cs{glsinsert}}
+% \begin{macrocode}
+ \let\glsifplural\@secondoftwo
+ \let\glscapscase\@thirdofthree
+ \let\glscustomtext\@empty
+ \def\glsinsert{#3}%
+% \end{macrocode}
+%\changes{4.06}{2014-03-12}{added \cs{glsifhyper}}
+%\changes{4.08}{2014-07-30}{moved \cs{glsifhyper}}
+%\changes{4.08}{2014-07-30}{moved check for first use to
+%\cs{@gls@link}}
+% Determine what the link text should be (this is stored in
+% \cs{@glo@text}).
+%\changes{3.11a}{2013-10-15}{change to using \cs{glsentryfmt} style
+%commands}
+% Note that \cs{@gls@link} sets \cs{glstype}.
+% \begin{macrocode}
+ \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}%
+% \end{macrocode}
+% Call \cs{@gls@link}
+% If \pkgopt{footnote} package option has been used and the glossary
+% type is \cs{acronymtype}, suppress
+% hyperlink for first use. Likewise if the \pkgopt[false]{hyperfirst}
+% package option is used.
+%\changes{1.16}{2008-08-27}{Test glossary type is
+%\cs{acronymtype} in addition to
+%checking if footnote option has been used}
+%\changes{2.03}{2009-09-23}{Added check for hyperfirst}
+%\changes{2.04}{2009-11-10}{Changed test to check if glossary type
+%has been identified as a list of acronyms}
+%\changes{3.11a}{2013-10-15}{removed \cs{MakeUppercase} (now moved
+%to \cs{glsentryfmt})}
+% \begin{macrocode}
+ \@gls@link[#1]{#2}{\@glo@text}%
+% \end{macrocode}
+% Indicate that this entry has now been used
+% \begin{macrocode}
+ \ifKV@glslink@local
+ \glslocalunset{#2}%
+ \else
+ \glsunset{#2}%
+ \fi
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%\end{macro}
+%
+% \cs{glspl} behaves in the same way as \ics{gls} except
+% it uses the plural form.
+%\begin{macro}{\glspl}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\glspl}{\@gls@hyp@opt\@glspl}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sglspl}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@glspl}[2][]{%
+ \new@ifnextchar[{\@glspl@{#1}{#2}}{\@glspl@{#1}{#2}[]}%
+}
+% \end{macrocode}
+%\begin{macro}{\@glspl@}
+% Read in the final optional argument:
+% \begin{macrocode}
+\def\@glspl@#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+ \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper
+% \end{macrocode}
+%\changes{4.03}{2014-01-20}{removed \cs{glslabel} (defined in
+%\cs{@gls@link})}
+%\changes{3.11a}{2013-10-15}{add \cs{glslabel}, \cs{glsifplural},
+% \cs{glscapscase}, \cs{glscustomtext} and \cs{glsinsert}}
+% \begin{macrocode}
+ \let\glsifplural\@firstoftwo
+ \let\glscapscase\@firstofthree
+ \let\glscustomtext\@empty
+ \def\glsinsert{#3}%
+% \end{macrocode}
+%\changes{4.06}{2014-03-12}{added \cs{glsifhyper}}
+%\changes{4.08}{2014-07-30}{moved \cs{glsifhyper}}
+%\changes{4.08}{2014-07-30}{moved check for first use to
+%\cs{@gls@link}}
+% Determine what the link text should be (this is stored in
+% \cs{@glo@text})
+%\changes{1.12}{2008-03-08}{now uses \cs{glsentrydescplural} and
+% \cs{glsentrysymbolplural} instead of \cs{glsentrydesc} and
+% \cs{glsentrysymbol}}
+%\changes{3.11a}{2013-10-15}{change to using \cs{glsentryfmt} style
+%commands}
+% Note that \cs{@gls@link} sets \cs{glstype}.
+% \begin{macrocode}
+ \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}%
+% \end{macrocode}
+% Call \cs{@gls@link}.
+% If \pkgopt{footnote} package option has been used and the glossary
+% type is \cs{acronymtype}, suppress
+% hyperlink for first use. Likewise if the \pkgopt[false]{hyperfirst}
+% package option is used.
+%\changes{1.16}{2008-08-27}{Test glossary type is
+%\cs{acronymtype} in addition to
+%checking if footnote option has been used}
+%\changes{2.03}{2009-09-23}{Added check for hyperfirst}
+%\changes{2.04}{2009-11-10}{Changed test to check if glossary type
+%has been identified as a list of acronyms}
+% \begin{macrocode}
+ \@gls@link[#1]{#2}{\@glo@text}%
+% \end{macrocode}
+% Indicate that this entry has now been used
+% \begin{macrocode}
+ \ifKV@glslink@local
+ \glslocalunset{#2}%
+ \else
+ \glsunset{#2}%
+ \fi
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%\end{macro}
+%
+% \cs{Glspl} behaves in the same way as \ics{glspl}, except
+% that the first letter of the link text is converted to uppercase
+% (as with \ics{Gls}, if the first letter has an accent, it
+% will need to be grouped).
+%\begin{macro}{\Glspl}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\Glspl}{\@gls@hyp@opt\@Glspl}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGlspl}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@Glspl}[2][]{%
+ \new@ifnextchar[{\@Glspl@{#1}{#2}}{\@Glspl@{#1}{#2}[]}%
+}
+% \end{macrocode}
+%\begin{macro}{\@Glspl@}
+% Read in the final optional argument:
+% \begin{macrocode}
+\def\@Glspl@#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+ \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper
+% \end{macrocode}
+%\changes{4.03}{2014-01-20}{removed \cs{glslabel} (defined in
+%\cs{@gls@link})}
+%\changes{3.11a}{2013-10-15}{add \cs{glsifplural},
+% \cs{glscapscase}, \cs{glscustomtext} and \cs{glsinsert}}
+% \begin{macrocode}
+ \let\glsifplural\@firstoftwo
+ \let\glscapscase\@secondofthree
+ \let\glscustomtext\@empty
+ \def\glsinsert{#3}%
+% \end{macrocode}
+%\changes{4.06}{2014-03-12}{added \cs{glsifhyper}}
+%\changes{4.08}{2014-07-30}{moved \cs{glsifhyper}}
+%\changes{4.08}{2014-07-30}{moved check for first use to
+%\cs{@gls@link}}
+% Determine what the link text should be (this is stored in
+% \cs{@glo@text}). This needs to be expanded so that the
+% \cs{@glo@text} can be passed to \cs{xmakefirstuc}.
+%\changes{1.12}{2008-03-08}{now uses \cs{glsentrydescplural} and
+% \cs{glsentrysymbolplural} instead of \cs{glsentrydesc} and
+% \cs{glsentrysymbol}}
+%\changes{3.11a}{2013-10-15}{change to using \cs{glsentryfmt} style
+%commands}
+% Note that \cs{@gls@link} sets \cs{glstype}.
+% \begin{macrocode}
+ \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}%
+% \end{macrocode}
+% Call \cs{@gls@link}.
+% If \pkgopt{footnote} package option has been used and the glossary
+% type is \cs{acronymtype}, suppress
+% hyperlink for first use. Likewise if the \pkgopt[false]{hyperfirst}
+% package option is used.
+%\changes{1.16}{2008-08-27}{Test glossary type is
+%\cs{acronymtype} in addition to
+%checking if footnote option has been used}
+%\changes{2.03}{2009-09-23}{Added check for hyperfirst}
+%\changes{2.04}{2009-11-10}{Changed test to check if glossary type
+%has been identified as a list of acronyms}
+%\changes{3.11a}{2013-10-15}{removed \cs{makefirstuc} (now dealt
+%with in \cs{glsentryfmt})}
+% \begin{macrocode}
+ \@gls@link[#1]{#2}{\@glo@text}%
+% \end{macrocode}
+% Indicate that this entry has now been used
+% \begin{macrocode}
+ \ifKV@glslink@local
+ \glslocalunset{#2}%
+ \else
+ \glsunset{#2}%
+ \fi
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%\end{macro}
+%
+% \cs{GLSpl} behaves like \ics{glspl} except that all the
+% link text is converted to uppercase.
+%\begin{macro}{\GLSpl}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\GLSpl}{\@gls@hyp@opt\@GLSpl}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGLSpl}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@GLSpl}[2][]{%
+ \new@ifnextchar[{\@GLSpl@{#1}{#2}}{\@GLSpl@{#1}{#2}[]}%
+}
+% \end{macrocode}
+%\begin{macro}{\@GLSpl}
+% Read in the final optional argument:
+% \begin{macrocode}
+\def\@GLSpl@#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+ \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper
+% \end{macrocode}
+%\changes{4.03}{2014-01-20}{removed \cs{glslabel} (defined in
+%\cs{@gls@link})}
+%\changes{3.11a}{2013-10-15}{add \cs{glslabel}, \cs{glsifplural},
+% \cs{glscapscase}, \cs{glscustomtext} and \cs{glsinsert}}
+% \begin{macrocode}
+ \let\glsifplural\@firstoftwo
+ \let\glscapscase\@thirdofthree
+ \let\glscustomtext\@empty
+ \def\glsinsert{#3}%
+% \end{macrocode}
+%\changes{4.06}{2014-03-12}{added \cs{glsifhyper}}
+%\changes{4.08}{2014-07-30}{moved \cs{glsifhyper}}
+%\changes{4.08}{2014-07-30}{moved check for first use to
+%\cs{@gls@link}}
+% Determine what the link text should be (this is stored in
+% \cs{@glo@text})
+%\changes{1.12}{2008-03-08}{now uses \cs{glsentrydescplural} and
+% \cs{glsentrysymbolplural} instead of \cs{glsentrydesc} and
+% \cs{glsentrysymbol}}
+%\changes{3.11a}{2013-10-15}{change to using \cs{glsentryfmt} style
+%commands}
+% Note that \cs{@gls@link} sets \cs{glstype}.
+% \begin{macrocode}
+ \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}%
+% \end{macrocode}
+% Call \cs{@gls@link}.
+% If \pkgopt{footnote} package option has been used and the glossary
+% type is \cs{acronymtype}, suppress
+% hyperlink for first use. Likewise if the \pkgopt[false]{hyperfirst}
+% package option is used.
+%\changes{1.16}{2008-08-27}{Test glossary type is
+%\cs{acronymtype} in addition to
+%checking if footnote option has been used}
+%\changes{2.03}{2009-09-23}{Added check for hyperfirst}
+%\changes{2.04}{2009-11-10}{Changed test to check if glossary type
+%has been identified as a list of acronyms}
+%\changes{3.11a}{2013-10-15}{removed \cs{MakeUppercase} as now dealt
+%with in \cs{glsentryfmt}}
+% \begin{macrocode}
+ \@gls@link[#1]{#2}{\@glo@text}%
+% \end{macrocode}
+% Indicate that this entry has now been used
+% \begin{macrocode}
+ \ifKV@glslink@local
+ \glslocalunset{#2}%
+ \else
+ \glsunset{#2}%
+ \fi
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsdisp}
+%\changes{1.19}{2009-03-02}{new}
+%\cs{glsdisp}\oarg{options}\marg{label}\marg{text}
+% This is like \cs{gls} except that the link text is provided.
+% This differs from \cs{glslink} in that it uses
+% \cs{glsdisplay} or \cs{glsdisplayfirst} and unsets the first use
+% flag.
+%
+% First determine if we are using the starred form:
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\glsdisp}{\@gls@hyp@opt\@glsdisp}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sglsdisp}}
+% Defined the un-starred form.
+%\begin{macro}{\@glsdisp}
+% \begin{macrocode}
+\newcommand*{\@glsdisp}[3][]{%
+ \glsdoifexists{#2}{%
+% \end{macrocode}
+%\changes{2.05}{2010-02-06}{Added closing brace. Patch provided by Sergiu Dotenco}
+% \begin{macrocode}
+ \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper
+% \end{macrocode}
+%\changes{4.03}{2014-01-20}{removed \cs{glslabel} (defined in
+%\cs{@gls@link})}
+%\changes{3.11a}{2013-10-15}{add \cs{glslabel}, \cs{glsifplural},
+% \cs{glscapscase}, \cs{glscustomtext} and \cs{glsinsert}}
+% \begin{macrocode}
+ \let\glsifplural\@secondoftwo
+ \let\glscapscase\@firstofthree
+ \def\glscustomtext{#3}%
+ \def\glsinsert{}%
+% \end{macrocode}
+%\changes{4.06}{2014-03-12}{added \cs{glsifhyper}}
+%\changes{4.08}{2014-07-30}{moved \cs{glsifhyper}}
+%\changes{4.08}{2014-07-30}{moved check for first use to
+%\cs{@gls@link}}
+% Determine what the link text should be (this is stored in
+% \cs{@glo@text})
+%\changes{3.11a}{2013-10-15}{change to using \cs{glsentryfmt} style
+%commands}
+% Note that \cs{@gls@link} sets \cs{glstype}.
+% \begin{macrocode}
+ \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}%
+% \end{macrocode}
+% Call \cs{@gls@link}.
+% If \pkgopt{footnote} package option has been used and the glossary
+% type is \cs{acronymtype}, suppress
+% hyperlink for first use. Likewise if the \pkgopt[false]{hyperfirst}
+% package option is used.
+%\changes{1.16}{2008-08-27}{Test glossary type is
+%\cs{acronymtype} in addition to
+%checking if footnote option has been used}
+%\changes{2.03}{2009-09-23}{Added check for hyperfirst}
+%\changes{2.04}{2009-11-10}{Changed test to check if glossary type
+%has been identified as a list of acronyms}
+% \begin{macrocode}
+ \@gls@link[#1]{#2}{\@glo@text}%
+% \end{macrocode}
+% Indicate that this entry has now been used
+%\changes{2.05}{2010-02-06}{Removed spurious brace. Patch provided by Sergiu Dotenco}
+% \begin{macrocode}
+ \ifKV@glslink@local
+ \glslocalunset{#2}%
+ \else
+ \glsunset{#2}%
+ \fi
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@link@nocheckfirsthyper}
+%\changes{4.19}{2015-11-22}{new}
+% Instead of just setting \cs{do@gls@link@checkfirsthyper} to
+% \cs{relax} in \cs{@gls@field@link}, set it to
+% \cs{@gls@link@nocheckfirsthyper} in case some other action needs
+% to take place.
+% \begin{macrocode}
+\newcommand*{\@gls@link@nocheckfirsthyper}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@field@link}
+%\changes{4.03}{2014-01-20}{new}
+%\changes{4.08}{2014-07-30}{added assignment of \cs{do@gls@link@checkfirsthyper}}
+% \begin{macrocode}
+\newcommand{\@gls@field@link}[3]{%
+ \glsdoifexists{#2}%
+ {%
+ \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+ \@gls@link[#1]{#2}{#3}%
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%\end{macro}
+%
+% \cs{glstext} behaves like \ics{gls} except it always uses the value
+% given by the \gloskey{text} key and it doesn't mark the entry as
+% used.
+%\begin{macro}{\glstext}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\glstext}{\@gls@hyp@opt\@glstext}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sglstext}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@glstext}[2][]{%
+ \new@ifnextchar[{\@glstext@{#1}{#2}}{\@glstext@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+% \changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{glsentrytext}}
+% \begin{macrocode}
+\def\@glstext@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\glsentrytext{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{GLStext} behaves like \cs{glstext} except the text is converted
+% to uppercase.
+%\begin{macro}{\GLStext}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\GLStext}{\@gls@hyp@opt\@GLStext}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGLStext}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@GLStext}[2][]{%
+ \new@ifnextchar[{\@GLStext@{#1}{#2}}{\@GLStext@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+% \changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+% \begin{macrocode}
+\def\@GLStext@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentrytext{#2}#3}}%
+}
+% \end{macrocode}
+%
+% \cs{Glstext} behaves like \cs{glstext} except that the first letter
+% of the text is converted to uppercase.
+%\begin{macro}{\Glstext}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\Glstext}{\@gls@hyp@opt\@Glstext}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGlstext}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@Glstext}[2][]{%
+ \new@ifnextchar[{\@Glstext@{#1}{#2}}{\@Glstext@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+% \changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{Changed to just use \cs{Glsentrytext}}
+% \begin{macrocode}
+\def\@Glstext@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\Glsentrytext{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{glsfirst} behaves like \ics{gls} except it always uses the value
+% given by the \gloskey{first} key and it doesn't mark the entry as
+% used.
+%\begin{macro}{\glsfirst}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\glsfirst}{\@gls@hyp@opt\@glsfirst}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sglsfirst}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@glsfirst}[2][]{%
+ \new@ifnextchar[{\@glsfirst@{#1}{#2}}{\@glsfirst@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+% \changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{glsentryfirst}}
+% \begin{macrocode}
+\def\@glsfirst@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\glsentryfirst{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{Glsfirst} behaves like \ics{glsfirst} except it displays the
+% first letter in uppercase.
+%\begin{macro}{\Glsfirst}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\Glsfirst}{\@gls@hyp@opt\@Glsfirst}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGlsfirst}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@Glsfirst}[2][]{%
+ \new@ifnextchar[{\@Glsfirst@{#1}{#2}}{\@Glsfirst@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+% \changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{Glsentryfirst}}
+% \begin{macrocode}
+\def\@Glsfirst@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\Glsentryfirst{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{GLSfirst} behaves like \ics{Glsfirst} except it displays the
+% text in uppercase.
+%\begin{macro}{\GLSfirst}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\GLSfirst}{\@gls@hyp@opt\@GLSfirst}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGLSfirst}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@GLSfirst}[2][]{%
+ \new@ifnextchar[{\@GLSfirst@{#1}{#2}}{\@GLSfirst@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+% \changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{glsentryfirst}}
+% \begin{macrocode}
+\def\@GLSfirst@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryfirst{#2}#3}}%
+}
+% \end{macrocode}
+%
+% \cs{glsplural} behaves like \ics{gls} except it always uses the value
+% given by the \gloskey{plural} key and it doesn't mark the entry as
+% used.
+%\begin{macro}{\glsplural}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\glsplural}{\@gls@hyp@opt\@glsplural}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sglsplural}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@glsplural}[2][]{%
+ \new@ifnextchar[{\@glsplural@{#1}{#2}}{\@glsplural@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+% \changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{glsentryplural}}
+% \begin{macrocode}
+\def\@glsplural@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\glsentryplural{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{Glsplural} behaves like \ics{glsplural} except that the first
+% letter is converted to uppercase.
+%\begin{macro}{\Glsplural}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\Glsplural}{\@gls@hyp@opt\@Glsplural}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGlsplural}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@Glsplural}[2][]{%
+ \new@ifnextchar[{\@Glsplural@{#1}{#2}}{\@Glsplural@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+% \changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{Glsentryplural}}
+% \begin{macrocode}
+\def\@Glsplural@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\Glsentryplural{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{GLSplural} behaves like \ics{glsplural} except that the
+% text is converted to uppercase.
+%\begin{macro}{\GLSplural}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\GLSplural}{\@gls@hyp@opt\@GLSplural}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGLSplural}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@GLSplural}[2][]{%
+ \new@ifnextchar[{\@GLSplural@{#1}{#2}}{\@GLSplural@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+% \changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{glsentryplural}}
+% \begin{macrocode}
+\def\@GLSplural@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryplural{#2}#3}}%
+}
+% \end{macrocode}
+%
+% \cs{glsfirstplural} behaves like \ics{gls} except it always uses the value
+% given by the \gloskey{firstplural} key and it doesn't mark the entry as
+% used.
+%\begin{macro}{\glsfirstplural}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\glsfirstplural}{\@gls@hyp@opt\@glsfirstplural}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sglsfirstplural}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@glsfirstplural}[2][]{%
+ \new@ifnextchar[{\@glsfirstplural@{#1}{#2}}{\@glsfirstplural@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{changed to just use
+%\cs{glsentryfirstplural}}
+% \begin{macrocode}
+\def\@glsfirstplural@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\glsentryfirstplural{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{Glsfirstplural} behaves like \ics{glsfirstplural} except that the
+% first letter is converted to uppercase.
+%\begin{macro}{\Glsfirstplural}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\Glsfirstplural}{\@gls@hyp@opt\@Glsfirstplural}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGlsfirstplural}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@Glsfirstplural}[2][]{%
+ \new@ifnextchar[{\@Glsfirstplural@{#1}{#2}}{\@Glsfirstplural@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+% \changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{changed to just use
+%\cs{Glsentryfirstplural}}
+% \begin{macrocode}
+\def\@Glsfirstplural@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\Glsentryfirstplural{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{GLSfirstplural} behaves like \ics{glsfirstplural} except that the
+% link text is converted to uppercase.
+%\begin{macro}{\GLSfirstplural}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\GLSfirstplural}{\@gls@hyp@opt\@GLSfirstplural}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGLSfirstplural}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@GLSfirstplural}[2][]{%
+ \new@ifnextchar[{\@GLSfirstplural@{#1}{#2}}{\@GLSfirstplural@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+% \changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{changed to just use
+%\cs{glsentryfirstplural}}
+% \begin{macrocode}
+\def\@GLSfirstplural@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryfirstplural{#2}#3}}%
+}
+% \end{macrocode}
+%
+% \cs{glsname} behaves like \ics{gls} except it always uses the value
+% given by the \gloskey{name} key and it doesn't mark the entry as
+% used.
+%\begin{macro}{\glsname}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\glsname}{\@gls@hyp@opt\@glsname}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sglsname}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@glsname}[2][]{%
+ \new@ifnextchar[{\@glsname@{#1}{#2}}{\@glsname@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+% \changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{glsentryname}}
+% \begin{macrocode}
+\def\@glsname@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\glsentryname{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{Glsname} behaves like \ics{glsname} except that the
+% first letter is converted to uppercase.
+%\begin{macro}{\Glsname}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\Glsname}{\@gls@hyp@opt\@Glsname}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGlsname}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@Glsname}[2][]{%
+ \new@ifnextchar[{\@Glsname@{#1}{#2}}{\@Glsname@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+% \changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{Glsentryname}}
+% \begin{macrocode}
+\def\@Glsname@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\Glsentryname{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{GLSname} behaves like \ics{glsname} except that the
+% link text is converted to uppercase.
+%\begin{macro}{\GLSname}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\GLSname}{\@gls@hyp@opt\@GLSname}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGLSname}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@GLSname}[2][]{%
+ \new@ifnextchar[{\@GLSname@{#1}{#2}}{\@GLSname@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+% \changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{glsentryname}}
+% \begin{macrocode}
+\def\@GLSname@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryname{#2}#3}}%
+}
+% \end{macrocode}
+%
+% \cs{glsdesc} behaves like \ics{gls} except it always uses the value
+% given by the \gloskey{description} key and it doesn't mark the entry
+% as used.
+%\begin{macro}{\glsdesc}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\glsdesc}{\@gls@hyp@opt\@glsdesc}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sglsdesc}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@glsdesc}[2][]{%
+ \new@ifnextchar[{\@glsdesc@{#1}{#2}}{\@glsdesc@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+% \changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{glsentrydesc}}
+% \begin{macrocode}
+\def\@glsdesc@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\glsentrydesc{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{Glsdesc} behaves like \ics{glsdesc} except that the
+% first letter is converted to uppercase.
+%\begin{macro}{\Glsdesc}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\Glsdesc}{\@gls@hyp@opt\@Glsdesc}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGlsdesc}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@Glsdesc}[2][]{%
+ \new@ifnextchar[{\@Glsdesc@{#1}{#2}}{\@Glsdesc@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{Glsentrydesc}}
+% \begin{macrocode}
+\def\@Glsdesc@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\Glsentrydesc{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{GLSdesc} behaves like \ics{glsdesc} except that the
+% link text is converted to uppercase.
+%\begin{macro}{\GLSdesc}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\GLSdesc}{\@gls@hyp@opt\@GLSdesc}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGLSdesc}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@GLSdesc}[2][]{%
+ \new@ifnextchar[{\@GLSdesc@{#1}{#2}}{\@GLSdesc@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{glsentrydesc}}
+% \begin{macrocode}
+\def\@GLSdesc@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentrydesc{#2}#3}}%
+}
+% \end{macrocode}
+%
+% \cs{glsdescplural} behaves like \ics{gls} except it always uses the value
+% given by the \gloskey{descriptionplural} key and it doesn't mark the entry
+% as used.
+%\begin{macro}{\glsdescplural}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\glsdescplural}{\@gls@hyp@opt\@glsdescplural}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sglsdescplural}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@glsdescplural}[2][]{%
+ \new@ifnextchar[{\@glsdescplural@{#1}{#2}}{\@glsdescplural@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+% \changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{changed to just use
+%\cs{glsentrydescplural}}
+% \begin{macrocode}
+\def\@glsdescplural@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\glsentrydescplural{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{Glsdescplural} behaves like \ics{glsdescplural} except that the
+% first letter is converted to uppercase.
+%\begin{macro}{\Glsdescplural}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\Glsdescplural}{\@gls@hyp@opt\@Glsdescplural}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGlsdescplural}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@Glsdescplural}[2][]{%
+ \new@ifnextchar[{\@Glsdescplural@{#1}{#2}}{\@Glsdescplural@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{changed to just use
+%\cs{Glsentrydescplural}}
+% \begin{macrocode}
+\def\@Glsdescplural@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\Glsentrydescplural{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{GLSdescplural} behaves like \ics{glsdescplural} except that the
+% link text is converted to uppercase.
+%\begin{macro}{\GLSdescplural}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\GLSdescplural}{\@gls@hyp@opt\@GLSdescplural}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGLSdescplural}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@GLSdescplural}[2][]{%
+ \new@ifnextchar[{\@GLSdescplural@{#1}{#2}}{\@GLSdescplural@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+% \changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{changed to just use
+%\cs{glsentrydescplural}}
+% \begin{macrocode}
+\def\@GLSdescplural@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentrydescplural{#2}#3}}%
+}
+% \end{macrocode}
+%
+% \cs{glssymbol} behaves like \ics{gls} except it always uses the value
+% given by the \gloskey{symbol} key and it doesn't mark the entry as
+% used.
+%\begin{macro}{\glssymbol}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\glssymbol}{\@gls@hyp@opt\@glssymbol}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sglssymbol}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@glssymbol}[2][]{%
+ \new@ifnextchar[{\@glssymbol@{#1}{#2}}{\@glssymbol@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{glsentrysymbol}}
+% \begin{macrocode}
+\def\@glssymbol@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\glsentrysymbol{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{Glssymbol} behaves like \ics{glssymbol} except that the
+% first letter is converted to uppercase.
+%\begin{macro}{\Glssymbol}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\Glssymbol}{\@gls@hyp@opt\@Glssymbol}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGlssymbol}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@Glssymbol}[2][]{%
+ \new@ifnextchar[{\@Glssymbol@{#1}{#2}}{\@Glssymbol@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{Glsentrysymbol}}
+% \begin{macrocode}
+\def\@Glssymbol@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\Glsentrysymbol{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{GLSsymbol} behaves like \ics{glssymbol} except that the
+% link text is converted to uppercase.
+%\begin{macro}{\GLSsymbol}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\GLSsymbol}{\@gls@hyp@opt\@GLSsymbol}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGLSsymbol}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@GLSsymbol}[2][]{%
+ \new@ifnextchar[{\@GLSsymbol@{#1}{#2}}{\@GLSsymbol@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{glsentrysymbol}}
+% \begin{macrocode}
+\def\@GLSsymbol@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentrysymbol{#2}#3}}%
+}
+% \end{macrocode}
+%
+% \cs{glssymbolplural} behaves like \ics{gls} except it always uses the value
+% given by the \gloskey{symbolplural} key and it doesn't mark the entry as
+% used.
+%\begin{macro}{\glssymbolplural}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\glssymbolplural}{\@gls@hyp@opt\@glssymbolplural}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sglssymbolplural}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@glssymbolplural}[2][]{%
+ \new@ifnextchar[{\@glssymbolplural@{#1}{#2}}{\@glssymbolplural@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{changed to just use
+%\cs{glsentrysymbolplural}}
+% \begin{macrocode}
+\def\@glssymbolplural@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\glsentrysymbolplural{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{Glssymbolplural} behaves like \ics{glssymbolplural} except that the
+% first letter is converted to uppercase.
+%\begin{macro}{\Glssymbolplural}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\Glssymbolplural}{\@gls@hyp@opt\@Glssymbolplural}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGlssymbolplural}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@Glssymbolplural}[2][]{%
+ \new@ifnextchar[{\@Glssymbolplural@{#1}{#2}}{\@Glssymbolplural@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{changed to just use
+%\cs{Glsentrysymbolplural}}
+% \begin{macrocode}
+\def\@Glssymbolplural@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\Glsentrysymbolplural{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{GLSsymbolplural} behaves like \ics{glssymbolplural} except that the
+% link text is converted to uppercase.
+%\begin{macro}{\GLSsymbolplural}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\GLSsymbolplural}{\@gls@hyp@opt\@GLSsymbolplural}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGLSsymbolplural}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@GLSsymbolplural}[2][]{%
+ \new@ifnextchar[{\@GLSsymbolplural@{#1}{#2}}{\@GLSsymbolplural@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{1.13}{2008-05-10}{fixed bug that ignored 3rd parameter}
+%\changes{3.11a}{2013-10-15}{changed to just use
+%\cs{glsentrysymbolplural}}
+% \begin{macrocode}
+\def\@GLSsymbolplural@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentrysymbolplural{#2}#3}}%
+}
+% \end{macrocode}
+%
+% \cs{glsuseri} behaves like \ics{gls} except it always uses the value
+% given by the \gloskey{user1} key and it doesn't mark the entry
+% as used.
+%\begin{macro}{\glsuseri}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\glsuseri}{\@gls@hyp@opt\@glsuseri}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sglsuseri}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@glsuseri}[2][]{%
+ \new@ifnextchar[{\@glsuseri@{#1}{#2}}{\@glsuseri@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{glsentryuseri}}
+% \begin{macrocode}
+\def\@glsuseri@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\glsentryuseri{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{Glsuseri} behaves like \ics{glsuseri} except that the
+% first letter is converted to uppercase.
+%\begin{macro}{\Glsuseri}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\Glsuseri}{\@gls@hyp@opt\@Glsuseri}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGlsuseri}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@Glsuseri}[2][]{%
+ \new@ifnextchar[{\@Glsuseri@{#1}{#2}}{\@Glsuseri@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{Glsentryuseri}}
+% \begin{macrocode}
+\def\@Glsuseri@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\Glsentryuseri{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{GLSuseri} behaves like \ics{glsuseri} except that the
+% link text is converted to uppercase.
+%\begin{macro}{\GLSuseri}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\GLSuseri}{\@gls@hyp@opt\@GLSuseri}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGLSuseri}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@GLSuseri}[2][]{%
+ \new@ifnextchar[{\@GLSuseri@{#1}{#2}}{\@GLSuseri@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{glsentryuseri}}
+% \begin{macrocode}
+\def\@GLSuseri@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryuseri{#2}#3}}%
+}
+% \end{macrocode}
+%
+% \cs{glsuserii} behaves like \ics{gls} except it always uses the value
+% given by the \gloskey{user2} key and it doesn't mark the entry
+% as used.
+%\begin{macro}{\glsuserii}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\glsuserii}{\@gls@hyp@opt\@glsuserii}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sglsuserii}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@glsuserii}[2][]{%
+ \new@ifnextchar[{\@glsuserii@{#1}{#2}}{\@glsuserii@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{glsentryuserii}}
+% \begin{macrocode}
+\def\@glsuserii@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\glsentryuserii{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{Glsuserii} behaves like \ics{glsuserii} except that the
+% first letter is converted to uppercase.
+%\begin{macro}{\Glsuserii}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\Glsuserii}{\@gls@hyp@opt\@Glsuserii}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGlsuserii}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@Glsuserii}[2][]{%
+ \new@ifnextchar[{\@Glsuserii@{#1}{#2}}{\@Glsuserii@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{Glsentryuserii}}
+% \begin{macrocode}
+\def\@Glsuserii@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\Glsentryuserii{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{GLSuserii} behaves like \ics{glsuserii} except that the
+% link text is converted to uppercase.
+%\begin{macro}{\GLSuserii}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\GLSuserii}{\@gls@hyp@opt\@GLSuserii}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGLSuserii}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@GLSuserii}[2][]{%
+ \new@ifnextchar[{\@GLSuserii@{#1}{#2}}{\@GLSuserii@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{glsentryuserii}}
+% \begin{macrocode}
+\def\@GLSuserii@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryuserii{#2}#3}}%
+}
+% \end{macrocode}
+%
+% \cs{glsuseriii} behaves like \ics{gls} except it always uses the value
+% given by the \gloskey{user3} key and it doesn't mark the entry
+% as used.
+%\begin{macro}{\glsuseriii}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\glsuseriii}{\@gls@hyp@opt\@glsuseriii}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sglsuseriii}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@glsuseriii}[2][]{%
+ \new@ifnextchar[{\@glsuseriii@{#1}{#2}}{\@glsuseriii@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{glsentryuseriii}}
+% \begin{macrocode}
+\def\@glsuseriii@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\glsentryuseriii{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{Glsuseriii} behaves like \ics{glsuseriii} except that the
+% first letter is converted to uppercase.
+%\begin{macro}{\Glsuseriii}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\Glsuseriii}{\@gls@hyp@opt\@Glsuseriii}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGlsuseriii}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@Glsuseriii}[2][]{%
+ \new@ifnextchar[{\@Glsuseriii@{#1}{#2}}{\@Glsuseriii@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{Glsentryuseriii}}
+% \begin{macrocode}
+\def\@Glsuseriii@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\Glsentryuseriii{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{GLSuseriii} behaves like \ics{glsuseriii} except that the
+% link text is converted to uppercase.
+%\begin{macro}{\GLSuseriii}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\GLSuseriii}{\@gls@hyp@opt\@GLSuseriii}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGLSuseriii}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@GLSuseriii}[2][]{%
+ \new@ifnextchar[{\@GLSuseriii@{#1}{#2}}{\@GLSuseriii@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{glsentryuseriii}}
+% \begin{macrocode}
+\def\@GLSuseriii@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryuseriii{#2}#3}}%
+}
+% \end{macrocode}
+%
+% \cs{glsuseriv} behaves like \ics{gls} except it always uses the value
+% given by the \gloskey{user4} key and it doesn't mark the entry
+% as used.
+%\begin{macro}{\glsuseriv}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\glsuseriv}{\@gls@hyp@opt\@glsuseriv}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sglsuseriv}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@glsuseriv}[2][]{%
+ \new@ifnextchar[{\@glsuseriv@{#1}{#2}}{\@glsuseriv@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{glsentryuseriv}}
+% \begin{macrocode}
+\def\@glsuseriv@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\glsentryuseriv{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{Glsuseriv} behaves like \ics{glsuseriv} except that the
+% first letter is converted to uppercase.
+%\begin{macro}{\Glsuseriv}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\Glsuseriv}{\@gls@hyp@opt\@Glsuseriv}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGlsuseriv}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@Glsuseriv}[2][]{%
+ \new@ifnextchar[{\@Glsuseriv@{#1}{#2}}{\@Glsuseriv@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{Glsentryuseriv}}
+% \begin{macrocode}
+\def\@Glsuseriv@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\Glsentryuseriv{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{GLSuseriv} behaves like \ics{glsuseriv} except that the
+% link text is converted to uppercase.
+%\begin{macro}{\GLSuseriv}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\GLSuseriv}{\@gls@hyp@opt\@GLSuseriv}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGLSuseriv}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@GLSuseriv}[2][]{%
+ \new@ifnextchar[{\@GLSuseriv@{#1}{#2}}{\@GLSuseriv@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{glsentryuseriv}}
+% \begin{macrocode}
+\def\@GLSuseriv@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryuseriv{#2}#3}}%
+}
+% \end{macrocode}
+%
+% \cs{glsuserv} behaves like \ics{gls} except it always uses the value
+% given by the \gloskey{user5} key and it doesn't mark the entry
+% as used.
+%\begin{macro}{\glsuserv}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\glsuserv}{\@gls@hyp@opt\@glsuserv}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sglsuserv}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@glsuserv}[2][]{%
+ \new@ifnextchar[{\@glsuserv@{#1}{#2}}{\@glsuserv@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{glsentryuserv}}
+% \begin{macrocode}
+\def\@glsuserv@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\glsentryuserv{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{Glsuserv} behaves like \ics{glsuserv} except that the
+% first letter is converted to uppercase.
+%\begin{macro}{\Glsuserv}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\Glsuserv}{\@gls@hyp@opt\@Glsuserv}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGlsuserv}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@Glsuserv}[2][]{%
+\new@ifnextchar[{\@Glsuserv@{#1}{#2}}{\@Glsuserv@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{Glsentryuserv}}
+% \begin{macrocode}
+\def\@Glsuserv@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\Glsentryuserv{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{GLSuserv} behaves like \ics{glsuserv} except that the
+% link text is converted to uppercase.
+%\begin{macro}{\GLSuserv}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\GLSuserv}{\@gls@hyp@opt\@GLSuserv}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGLSuserv}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@GLSuserv}[2][]{%
+\new@ifnextchar[{\@GLSuserv@{#1}{#2}}{\@GLSuserv@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{glsentryuserv}}
+% \begin{macrocode}
+\def\@GLSuserv@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryuserv{#2}#3}}%
+}
+% \end{macrocode}
+%
+% \cs{glsuservi} behaves like \ics{gls} except it always uses the value
+% given by the \gloskey{user6} key and it doesn't mark the entry
+% as used.
+%\begin{macro}{\glsuservi}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\glsuservi}{\@gls@hyp@opt\@glsuservi}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sglsuservi}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@glsuservi}[2][]{%
+ \new@ifnextchar[{\@glsuservi@{#1}{#2}}{\@glsuservi@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{glsentryuservi}}
+% \begin{macrocode}
+\def\@glsuservi@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\glsentryuservi{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{Glsuservi} behaves like \ics{glsuservi} except that the
+% first letter is converted to uppercase.
+%\begin{macro}{\Glsuservi}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\Glsuservi}{\@gls@hyp@opt\@Glsuservi}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGlsuservi}}
+% Defined the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@Glsuservi}[2][]{%
+ \new@ifnextchar[{\@Glsuservi@{#1}{#2}}{\@Glsuservi@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{Glsentryuservi}}
+% \begin{macrocode}
+\def\@Glsuservi@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\Glsentryuservi{#2}#3}%
+}
+% \end{macrocode}
+%
+% \cs{GLSuservi} behaves like \ics{glsuservi} except that the
+% link text is converted to uppercase.
+%\begin{macro}{\GLSuservi}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\GLSuservi}{\@gls@hyp@opt\@GLSuservi}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sGLSuservi}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\@GLSuservi}[2][]{%
+ \new@ifnextchar[{\@GLSuservi@{#1}{#2}}{\@GLSuservi@{#1}{#2}[]}}
+% \end{macrocode}
+% Read in the final optional argument:
+%\changes{3.11a}{2013-10-15}{changed to just use \cs{glsentryuservi}}
+% \begin{macrocode}
+\def\@GLSuservi@#1#2[#3]{%
+ \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryuservi{#2}#3}}%
+}
+% \end{macrocode}
+%
+% Now deal with acronym related keys. First the short form:
+%\begin{macro}{\acrshort}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\acrshort}{\@gls@hyp@opt\ns@acrshort}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sacrshort}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\ns@acrshort}[2][]{%
+ \new@ifnextchar[{\@acrshort{#1}{#2}}{\@acrshort{#1}{#2}[]}%
+}
+% \end{macrocode}
+% Read in the final optional argument:
+% \begin{macrocode}
+\def\@acrshort#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+% \end{macrocode}
+%\changes{4.21}{2016-01-24}{changed checkfirsthyper assignment}
+% \begin{macrocode}
+ \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+% \end{macrocode}
+%\changes{3.11a}{2013-10-15}{added \cs{glslabel}, \cs{glsifplural},
+% \cs{glscapscase}, \cs{glsinsert} and \cs{glscustomtext}}
+%\changes{4.03}{2014-01-20}{removed \cs{glslabel} (defined in
+%\cs{@gls@link})}
+% \begin{macrocode}
+ \let\glsifplural\@secondoftwo
+ \let\glscapscase\@firstofthree
+ \let\glsinsert\@empty
+ \def\glscustomtext{%
+ \acronymfont{\glsentryshort{#2}}#3%
+ }%
+% \end{macrocode}
+%\changes{4.06}{2014-03-12}{added \cs{glsifhyper}}
+%\changes{4.08}{2014-07-30}{moved \cs{glsifhyper}}
+% Call \cs{@gls@link}
+% Note that \cs{@gls@link} sets \cs{glstype}.
+% \begin{macrocode}
+ \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%
+%\begin{macro}{\Acrshort}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\Acrshort}{\@gls@hyp@opt\ns@Acrshort}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sAcrshort}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\ns@Acrshort}[2][]{%
+ \new@ifnextchar[{\@Acrshort{#1}{#2}}{\@Acrshort{#1}{#2}[]}%
+}
+% \end{macrocode}
+% Read in the final optional argument:
+% \begin{macrocode}
+\def\@Acrshort#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+% \end{macrocode}
+%\changes{4.21}{2016-01-24}{changed checkfirsthyper assignment}
+% \begin{macrocode}
+ \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+% \end{macrocode}
+%\changes{3.11a}{2013-10-15}{added \cs{glslabel}, \cs{glsifplural},
+% \cs{glscapscase}, \cs{glsinsert} and \cs{glscustomtext}}
+% \begin{macrocode}
+ \def\glslabel{#2}%
+ \let\glsifplural\@secondoftwo
+ \let\glscapscase\@secondofthree
+ \let\glsinsert\@empty
+ \def\glscustomtext{%
+ \acronymfont{\Glsentryshort{#2}}#3%
+ }%
+% \end{macrocode}
+%\changes{4.06}{2014-03-12}{added \cs{glsifhyper}}
+%\changes{4.08}{2014-07-30}{moved \cs{glsifhyper}}
+% Call \cs{@gls@link}
+% Note that \cs{@gls@link} sets \cs{glstype}.
+% \begin{macrocode}
+ \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%
+%\begin{macro}{\ACRshort}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\ACRshort}{\@gls@hyp@opt\ns@ACRshort}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sACRshort}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\ns@ACRshort}[2][]{%
+ \new@ifnextchar[{\@ACRshort{#1}{#2}}{\@ACRshort{#1}{#2}[]}%
+}
+% \end{macrocode}
+% Read in the final optional argument:
+% \begin{macrocode}
+\def\@ACRshort#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+% \end{macrocode}
+%\changes{4.21}{2016-01-24}{changed checkfirsthyper assignment}
+% \begin{macrocode}
+ \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+% \end{macrocode}
+%\changes{3.11a}{2013-10-15}{added \cs{glslabel}, \cs{glsifplural},
+% \cs{glscapscase}, \cs{glsinsert} and \cs{glscustomtext}}
+% \begin{macrocode}
+ \def\glslabel{#2}%
+ \let\glsifplural\@secondoftwo
+ \let\glscapscase\@thirdofthree
+ \let\glsinsert\@empty
+ \def\glscustomtext{%
+ \mfirstucMakeUppercase{\acronymfont{\glsentryshort{#2}}#3}%
+ }%
+% \end{macrocode}
+%\changes{4.06}{2014-03-12}{added \cs{glsifhyper}}
+%\changes{4.08}{2014-07-30}{moved \cs{glsifhyper}}
+% Call \cs{@gls@link}
+% Note that \cs{@gls@link} sets \cs{glstype}.
+% \begin{macrocode}
+ \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%
+% Short plural:
+%\begin{macro}{\acrshortpl}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\acrshortpl}{\@gls@hyp@opt\ns@acrshortpl}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sacrshortpl}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\ns@acrshortpl}[2][]{%
+ \new@ifnextchar[{\@acrshortpl{#1}{#2}}{\@acrshortpl{#1}{#2}[]}%
+}
+% \end{macrocode}
+% Read in the final optional argument:
+% \begin{macrocode}
+\def\@acrshortpl#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+% \end{macrocode}
+%\changes{4.21}{2016-01-24}{changed checkfirsthyper assignment}
+% \begin{macrocode}
+ \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+% \end{macrocode}
+%\changes{3.11a}{2013-10-15}{added \cs{glslabel}, \cs{glsifplural},
+% \cs{glscapscase}, \cs{glsinsert} and \cs{glscustomtext}}
+% \begin{macrocode}
+ \def\glslabel{#2}%
+ \let\glsifplural\@firstoftwo
+ \let\glscapscase\@firstofthree
+ \let\glsinsert\@empty
+ \def\glscustomtext{%
+ \acronymfont{\glsentryshortpl{#2}}#3%
+ }%
+% \end{macrocode}
+%\changes{4.06}{2014-03-12}{added \cs{glsifhyper}}
+%\changes{4.08}{2014-07-30}{moved \cs{glsifhyper}}
+% Call \cs{@gls@link}
+% Note that \cs{@gls@link} sets \cs{glstype}.
+% \begin{macrocode}
+ \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%
+%\begin{macro}{\Acrshortpl}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\Acrshortpl}{\@gls@hyp@opt\ns@Acrshortpl}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sAcrshortpl}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\ns@Acrshortpl}[2][]{%
+ \new@ifnextchar[{\@Acrshortpl{#1}{#2}}{\@Acrshortpl{#1}{#2}[]}%
+}
+% \end{macrocode}
+% Read in the final optional argument:
+% \begin{macrocode}
+\def\@Acrshortpl#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+% \end{macrocode}
+%\changes{4.21}{2016-01-24}{changed checkfirsthyper assignment}
+% \begin{macrocode}
+ \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+% \end{macrocode}
+%\changes{3.11a}{2013-10-15}{added \cs{glslabel}, \cs{glsifplural},
+% \cs{glscapscase}, \cs{glsinsert} and \cs{glscustomtext}}
+% \begin{macrocode}
+ \def\glslabel{#2}%
+ \let\glsifplural\@firstoftwo
+ \let\glscapscase\@secondofthree
+ \let\glsinsert\@empty
+ \def\glscustomtext{%
+ \acronymfont{\Glsentryshortpl{#2}}#3%
+ }%
+% \end{macrocode}
+%\changes{4.06}{2014-03-12}{added \cs{glsifhyper}}
+%\changes{4.08}{2014-07-30}{moved \cs{glsifhyper}}
+% Call \cs{@gls@link}
+% Note that \cs{@gls@link} sets \cs{glstype}.
+% \begin{macrocode}
+ \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%
+%\begin{macro}{\ACRshortpl}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\ACRshortpl}{\@gls@hyp@opt\ns@ACRshortpl}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sACRshortpl}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\ns@ACRshortpl}[2][]{%
+ \new@ifnextchar[{\@ACRshortpl{#1}{#2}}{\@ACRshortpl{#1}{#2}[]}%
+}
+% \end{macrocode}
+% Read in the final optional argument:
+% \begin{macrocode}
+\def\@ACRshortpl#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+% \end{macrocode}
+%\changes{4.21}{2016-01-24}{changed checkfirsthyper assignment}
+% \begin{macrocode}
+ \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+% \end{macrocode}
+%\changes{3.11a}{2013-10-15}{added \cs{glslabel}, \cs{glsifplural},
+% \cs{glscapscase}, \cs{glsinsert} and \cs{glscustomtext}}
+% \begin{macrocode}
+ \def\glslabel{#2}%
+ \let\glsifplural\@firstoftwo
+ \let\glscapscase\@thirdofthree
+ \let\glsinsert\@empty
+ \def\glscustomtext{%
+ \mfirstucMakeUppercase{\acronymfont{\glsentryshortpl{#2}}#3}%
+ }%
+% \end{macrocode}
+%\changes{4.06}{2014-03-12}{added \cs{glsifhyper}}
+%\changes{4.08}{2014-07-30}{moved \cs{glsifhyper}}
+% Call \cs{@gls@link}
+% Note that \cs{@gls@link} sets \cs{glstype}.
+% \begin{macrocode}
+ \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%
+%\begin{macro}{\acrlong}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\acrlong}{\@gls@hyp@opt\ns@acrlong}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sacrlong}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\ns@acrlong}[2][]{%
+ \new@ifnextchar[{\@acrlong{#1}{#2}}{\@acrlong{#1}{#2}[]}%
+}
+% \end{macrocode}
+% Read in the final optional argument:
+% \begin{macrocode}
+\def\@acrlong#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+% \end{macrocode}
+%\changes{4.21}{2016-01-24}{changed checkfirsthyper assignment}
+% \begin{macrocode}
+ \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+% \end{macrocode}
+%\changes{3.11a}{2013-10-15}{added \cs{glslabel}, \cs{glsifplural},
+% \cs{glscapscase}, \cs{glsinsert} and \cs{glscustomtext}}
+% \begin{macrocode}
+ \def\glslabel{#2}%
+ \let\glsifplural\@secondoftwo
+ \let\glscapscase\@firstofthree
+ \let\glsinsert\@empty
+% \end{macrocode}
+%\changes{4.06}{2014-03-12}{added \cs{glsifhyper}}
+% Bug fix v4.02 removed \cs{acronymfont} from \cs{glscustomtext}
+% (\cs{acronymfont} only designed for short form).
+% \changes{4.02}{2013-12-05}{Removed \cs{acronymfont}}
+% \begin{macrocode}
+ \def\glscustomtext{%
+ \glsentrylong{#2}#3%
+ }%
+% \end{macrocode}
+%\changes{4.08}{2014-07-30}{moved \cs{glsifhyper}}
+% Call \cs{@gls@link}
+% Note that \cs{@gls@link} sets \cs{glstype}.
+% \begin{macrocode}
+ \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%
+%\begin{macro}{\Acrlong}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\Acrlong}{\@gls@hyp@opt\ns@Acrlong}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sAcrlong}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\ns@Acrlong}[2][]{%
+ \new@ifnextchar[{\@Acrlong{#1}{#2}}{\@Acrlong{#1}{#2}[]}%
+}
+% \end{macrocode}
+% Read in the final optional argument:
+% \begin{macrocode}
+\def\@Acrlong#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+% \end{macrocode}
+%\changes{4.21}{2016-01-24}{changed checkfirsthyper assignment}
+% \begin{macrocode}
+ \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+% \end{macrocode}
+%\changes{3.11a}{2013-10-15}{added \cs{glslabel}, \cs{glsifplural},
+% \cs{glscapscase}, \cs{glsinsert} and \cs{glscustomtext}}
+% \begin{macrocode}
+ \def\glslabel{#2}%
+ \let\glsifplural\@secondoftwo
+ \let\glscapscase\@secondofthree
+ \let\glsinsert\@empty
+% \end{macrocode}
+%\changes{4.06}{2014-03-12}{added \cs{glsifhyper}}
+% Bug fix v4.02 removed \cs{acronymfont} from \cs{glscustomtext}
+% (\cs{acronymfont} only designed for short form).
+% \changes{4.02}{2013-12-05}{Removed \cs{acronymfont}}
+% \begin{macrocode}
+ \def\glscustomtext{%
+ \Glsentrylong{#2}#3%
+ }%
+% \end{macrocode}
+%\changes{4.08}{2014-07-30}{moved \cs{glsifhyper}}
+% Call \cs{@gls@link}.
+% Note that \cs{@gls@link} sets \cs{glstype}.
+% \begin{macrocode}
+ \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%
+%\begin{macro}{\ACRlong}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\ACRlong}{\@gls@hyp@opt\ns@ACRlong}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sACRlong}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\ns@ACRlong}[2][]{%
+ \new@ifnextchar[{\@ACRlong{#1}{#2}}{\@ACRlong{#1}{#2}[]}%
+}
+% \end{macrocode}
+% Read in the final optional argument:
+% \begin{macrocode}
+\def\@ACRlong#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+% \end{macrocode}
+%\changes{4.21}{2016-01-24}{changed checkfirsthyper assignment}
+% \begin{macrocode}
+ \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+% \end{macrocode}
+%\changes{3.11a}{2013-10-15}{added \cs{glslabel}, \cs{glsifplural},
+% \cs{glscapscase}, \cs{glsinsert} and \cs{glscustomtext}}
+% \begin{macrocode}
+ \def\glslabel{#2}%
+ \let\glsifplural\@secondoftwo
+ \let\glscapscase\@thirdofthree
+ \let\glsinsert\@empty
+% \end{macrocode}
+%\changes{4.06}{2014-03-12}{added \cs{glsifhyper}}
+% Bug fix v4.02 removed \cs{acronymfont} from \cs{glscustomtext}
+% (\cs{acronymfont} only designed for short form).
+% \changes{4.02}{2013-12-05}{Removed \cs{acronymfont}}
+% \begin{macrocode}
+ \def\glscustomtext{%
+ \mfirstucMakeUppercase{\glsentrylong{#2}#3}%
+ }%
+% \end{macrocode}
+%\changes{4.08}{2014-07-30}{moved \cs{glsifhyper}}
+% Call \cs{@gls@link}.
+% Note that \cs{@gls@link} sets \cs{glstype}.
+% \begin{macrocode}
+ \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%
+% Short plural:
+%\begin{macro}{\acrlongpl}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\acrlongpl}{\@gls@hyp@opt\ns@acrlongpl}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sacrlongpl}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\ns@acrlongpl}[2][]{%
+ \new@ifnextchar[{\@acrlongpl{#1}{#2}}{\@acrlongpl{#1}{#2}[]}%
+}
+% \end{macrocode}
+% Read in the final optional argument:
+% \begin{macrocode}
+\def\@acrlongpl#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+% \end{macrocode}
+%\changes{4.21}{2016-01-24}{changed checkfirsthyper assignment}
+% \begin{macrocode}
+ \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+% \end{macrocode}
+%\changes{3.11a}{2013-10-15}{added \cs{glslabel}, \cs{glsifplural},
+% \cs{glscapscase}, \cs{glsinsert} and \cs{glscustomtext}}
+% \begin{macrocode}
+ \def\glslabel{#2}%
+ \let\glsifplural\@firstoftwo
+ \let\glscapscase\@firstofthree
+ \let\glsinsert\@empty
+% \end{macrocode}
+%\changes{4.06}{2014-03-12}{added \cs{glsifhyper}}
+% Bug fix v4.02 removed \cs{acronymfont} from \cs{glscustomtext}
+% (\cs{acronymfont} only designed for short form).
+% \changes{4.02}{2013-12-05}{Removed \cs{acronymfont}}
+% \begin{macrocode}
+ \def\glscustomtext{%
+ \glsentrylongpl{#2}#3%
+ }%
+% \end{macrocode}
+%\changes{4.08}{2014-07-30}{moved \cs{glsifhyper}}
+% Call \cs{@gls@link}.
+% Note that \cs{@gls@link} sets \cs{glstype}.
+% \begin{macrocode}
+ \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%
+%\begin{macro}{\Acrlongpl}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\Acrlongpl}{\@gls@hyp@opt\ns@Acrlongpl}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sAcrlongpl}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\ns@Acrlongpl}[2][]{%
+ \new@ifnextchar[{\@Acrlongpl{#1}{#2}}{\@Acrlongpl{#1}{#2}[]}%
+}
+% \end{macrocode}
+% Read in the final optional argument:
+% \begin{macrocode}
+\def\@Acrlongpl#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+% \end{macrocode}
+%\changes{4.21}{2016-01-24}{changed checkfirsthyper assignment}
+% \begin{macrocode}
+ \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+% \end{macrocode}
+%\changes{3.11a}{2013-10-15}{added \cs{glslabel}, \cs{glsifplural},
+% \cs{glscapscase}, \cs{glsinsert} and \cs{glscustomtext}}
+% \begin{macrocode}
+ \def\glslabel{#2}%
+ \let\glsifplural\@firstoftwo
+ \let\glscapscase\@secondofthree
+ \let\glsinsert\@empty
+% \end{macrocode}
+%\changes{4.06}{2014-03-12}{added \cs{glsifhyper}}
+% Bug fix v4.02 removed \cs{acronymfont} from \cs{glscustomtext}
+% (\cs{acronymfont} only designed for short form).
+% \changes{4.02}{2013-12-05}{Removed \cs{acronymfont}}
+% \begin{macrocode}
+ \def\glscustomtext{%
+ \Glsentrylongpl{#2}#3%
+ }%
+% \end{macrocode}
+%\changes{4.08}{2014-07-30}{moved \cs{glsifhyper}}
+% Call \cs{@gls@link}.
+% Note that \cs{@gls@link} sets \cs{glstype}.
+%\changes{4.15}{2015-03-16}{bug fix replaced \cs{@glo@type} with \cs{glstype}}
+% \begin{macrocode}
+ \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%
+%\begin{macro}{\ACRlongpl}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\ACRlongpl}{\@gls@hyp@opt\ns@ACRlongpl}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \cs{@sACRlongpl}}
+% Define the un-starred form. Need to determine if there is
+% a final optional argument
+% \begin{macrocode}
+\newcommand*{\ns@ACRlongpl}[2][]{%
+ \new@ifnextchar[{\@ACRlongpl{#1}{#2}}{\@ACRlongpl{#1}{#2}[]}%
+}
+% \end{macrocode}
+% Read in the final optional argument:
+% \begin{macrocode}
+\def\@ACRlongpl#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+% \end{macrocode}
+%\changes{4.21}{2016-01-24}{changed checkfirsthyper assignment}
+% \begin{macrocode}
+ \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper
+% \end{macrocode}
+%\changes{3.11a}{2013-10-15}{added \cs{glslabel}, \cs{glsifplural},
+% \cs{glscapscase}, \cs{glsinsert} and \cs{glscustomtext}}
+% \begin{macrocode}
+ \def\glslabel{#2}%
+ \let\glsifplural\@firstoftwo
+ \let\glscapscase\@thirdofthree
+ \let\glsinsert\@empty
+% \end{macrocode}
+%\changes{4.06}{2014-03-12}{added \cs{glsifhyper}}
+% Bug fix v4.02 removed \cs{acronymfont} from \cs{glscustomtext}
+% (\cs{acronymfont} only designed for short form).
+% \changes{4.02}{2013-12-05}{Removed \cs{acronymfont}}
+% \begin{macrocode}
+ \def\glscustomtext{%
+ \mfirstucMakeUppercase{\glsentrylongpl{#2}#3}%
+ }%
+% \end{macrocode}
+%\changes{4.08}{2014-07-30}{moved \cs{glsifhyper}}
+% Call \cs{@gls@link}.
+% Note that \cs{@gls@link} sets \cs{glstype}.
+% \begin{macrocode}
+ \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%
+% \subsubsection{Displaying entry details without adding
+% information to the glossary}
+%\label{sec:code:glsnolink}
+%
+% These commands merely display entry information without adding
+% entries in the associated file or having hyperlinks.
+%
+%\begin{macro}{\@gls@entry@field}
+% Generic version.
+%\changes{4.03}{2014-01-20}{new}
+%\begin{definition}
+%\cs{@gls@entry@field}\marg{label}\marg{field}
+%\end{definition}
+% \begin{macrocode}
+\newcommand*{\@gls@entry@field}[2]{%
+ \csname glo@\glsdetoklabel{#1}@#2\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsletentryfield}
+%\changes{4.07}{2014-04-04}{new}
+%\begin{definition}
+%\cs{glsletentryfield}\marg{cs}\marg{label}\marg{field}
+%\end{definition}
+% \begin{macrocode}
+\newcommand*{\glsletentryfield}[3]{%
+ \letcs{#1}{glo@\glsdetoklabel{#2}@#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@Gls@entry@field}
+% Generic first letter uppercase version.
+%\changes{4.03}{2014-01-20}{new}
+%\begin{definition}
+%\cs{@Gls@entry@field}\marg{label}\marg{field}
+%\end{definition}
+% \begin{macrocode}
+\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}%
+ }%
+ }%
+ {%
+ ??%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Get the entry name (as specified by the \gloskey{name} key
+% when the entry was defined). The argument
+% is the label associated with the entry. Note that unless you
+% used \texttt{name=false} in the \pkgopt{sanitize} package option
+% you may get unexpected results if the \gloskey{name} key contains
+% any commands.
+%\begin{macro}{\glsentryname}
+% \begin{macrocode}
+\newcommand*{\glsentryname}[1]{\@gls@entry@field{#1}{name}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Glsentryname}
+%\changes{3.09a}{2013-10-09}{made robust}
+% \begin{macrocode}
+\newrobustcmd*{\Glsentryname}[1]{%
+ \@Gls@entryname{#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@Gls@entryname}
+%\changes{4.10}{2014-08-27}{new}
+% This is a workaround in the event that the user defies the warning
+% in the manual about not using \cs{Glsname} or \cs{Glsentryname} with acronyms.
+% First the default behaviour:
+% \begin{macrocode}
+\newcommand*{\@Gls@entryname}[1]{%
+ \@Gls@entry@field{#1}{name}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@Gls@acrentryname}
+%\changes{4.10}{2014-08-27}{new}
+% Now the behaviour when \cs{setacronymstyle} is used:
+% \begin{macrocode}
+\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
+% \end{macrocode}
+% Temporarily make \cs{glsentryshort} behave like
+% \cs{Glsentryshort}. (This is on the assumption that the argument
+% of \cs{acronymfont} is \cs{glsentryshort}\marg{label}, as that's
+% the behaviour of the predefined acronym styles.)
+% This is scoped to localise the effect of the assignment.
+% \begin{macrocode}
+ {%
+ \let\glsentryshort\Glsentryshort
+ \@glo@text
+ }%
+ \else
+ \xmakefirstuc{\@glo@text}%
+ \fi
+ \fi
+ \fi
+ }%
+ {%
+% \end{macrocode}
+% Not an acronym
+% \begin{macrocode}
+ \@Gls@entry@field{#1}{name}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Get the entry description (as specified by the
+% \gloskey{description} when the entry was defined). The argument
+% is the label associated with the entry. Note that unless you
+% used \texttt{description=false} in the \pkgopt{sanitize} package
+% option you may get unexpected results if the \gloskey{description}
+% key contained any commands.
+%\begin{macro}{\glsentrydesc}
+% \begin{macrocode}
+\newcommand*{\glsentrydesc}[1]{\@gls@entry@field{#1}{desc}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Glsentrydesc}
+%\changes{3.09a}{2013-10-09}{made robust}
+% \begin{macrocode}
+\newrobustcmd*{\Glsentrydesc}[1]{%
+ \@Gls@entry@field{#1}{desc}%
+}
+% \end{macrocode}
+%\end{macro}
+% Plural form:
+%\begin{macro}{\glsentrydescplural}
+%\changes{1.12}{2008-03-08}{New}
+% \begin{macrocode}
+\newcommand*{\glsentrydescplural}[1]{%
+ \@gls@entry@field{#1}{descplural}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Glsentrydescplural}
+%\changes{1.12}{2008-03-08}{New}
+%\changes{3.09a}{2013-10-09}{made robust}
+% \begin{macrocode}
+\newrobustcmd*{\Glsentrydescplural}[1]{%
+ \@Gls@entry@field{#1}{descplural}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Get the entry text, as specified by the \gloskey{text} key when
+% the entry was defined. The argument
+% is the label associated with the entry:
+%\begin{macro}{\glsentrytext}
+% \begin{macrocode}
+\newcommand*{\glsentrytext}[1]{\@gls@entry@field{#1}{text}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Glsentrytext}
+%\changes{3.09a}{2013-10-09}{made robust}
+% \begin{macrocode}
+\newrobustcmd*{\Glsentrytext}[1]{%
+ \@Gls@entry@field{#1}{text}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Get the plural form:
+%\begin{macro}{\glsentryplural}
+% \begin{macrocode}
+\newcommand*{\glsentryplural}[1]{%
+ \@gls@entry@field{#1}{plural}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Glsentryplural}
+%\changes{3.09a}{2013-10-09}{made robust}
+% \begin{macrocode}
+\newrobustcmd*{\Glsentryplural}[1]{%
+ \@Gls@entry@field{#1}{plural}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Get the symbol associated with this entry. The argument
+% is the label associated with the entry.
+%\begin{macro}{\glsentrysymbol}
+% \begin{macrocode}
+\newcommand*{\glsentrysymbol}[1]{%
+ \@gls@entry@field{#1}{symbol}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Glsentrysymbol}
+%\changes{3.09a}{2013-10-09}{made robust}
+% \begin{macrocode}
+\newrobustcmd*{\Glsentrysymbol}[1]{%
+ \@Gls@entry@field{#1}{symbol}%
+}
+% \end{macrocode}
+%\end{macro}
+% Plural form:
+%\begin{macro}{\glsentrysymbolplural}
+%\changes{1.12}{2008-03-08}{New}
+% \begin{macrocode}
+\newcommand*{\glsentrysymbolplural}[1]{%
+ \@gls@entry@field{#1}{symbolplural}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Glsentrysymbolplural}
+%\changes{1.12}{2008-03-08}{New}
+%\changes{3.09a}{2013-10-09}{made robust}
+% \begin{macrocode}
+\newrobustcmd*{\Glsentrysymbolplural}[1]{%
+ \@Gls@entry@field{#1}{symbolplural}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Get the entry text to be used when the entry is first used in
+% the document (as specified by the \gloskey{first} key when
+% the entry was defined).
+%\begin{macro}{\glsentryfirst}
+% \begin{macrocode}
+\newcommand*{\glsentryfirst}[1]{%
+ \@gls@entry@field{#1}{first}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Glsentryfirst}
+%\changes{3.09a}{2013-10-09}{made robust}
+% \begin{macrocode}
+\newrobustcmd*{\Glsentryfirst}[1]{%
+ \@Gls@entry@field{#1}{first}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Get the plural form (as specified by the \gloskey{firstplural}
+% key when the entry was defined).
+%\begin{macro}{\glsentryfirstplural}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\glsentryfirstplural}[1]{%
+ \@gls@entry@field{#1}{firstpl}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Glsentryfirstplural}
+%\changes{3.09a}{2013-10-09}{made robust}
+% \begin{macrocode}
+\newrobustcmd*{\Glsentryfirstplural}[1]{%
+ \@Gls@entry@field{#1}{firstpl}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsentrytitlecase}
+%\changes{4.22}{2016-04-19}{new}
+% \begin{macrocode}
+\newrobustcmd*{\@glsentrytitlecase}[2]{%
+ \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}}
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Display the glossary type with which this entry is associated
+% (as specified by the \gloskey{type} key used when the entry was
+% defined)
+%\begin{macro}{\glsentrytype}
+% \begin{macrocode}
+\newcommand*{\glsentrytype}[1]{\@gls@entry@field{#1}{type}}
+% \end{macrocode}
+%\end{macro}
+%
+% Display the sort text used for this entry. Note that the
+% \gloskey{sort} key is sanitize, so unexpected results may
+% occur if the \gloskey{sort} key contained commands.
+%\begin{macro}{\glsentrysort}
+% \begin{macrocode}
+\newcommand*{\glsentrysort}[1]{%
+ \@gls@entry@field{#1}{sort}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsentryuseri}
+% Get the first user key (as specified by the
+% \gloskey{user1} when the entry was defined). The argument
+% is the label associated with the entry.
+%\changes{2.04}{2009-11-10}{new}
+% \begin{macrocode}
+\newcommand*{\glsentryuseri}[1]{%
+ \@gls@entry@field{#1}{useri}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Glsentryuseri}
+%\changes{2.04}{2009-11-10}{new}
+%\changes{3.09a}{2013-10-09}{made robust}
+% \begin{macrocode}
+\newrobustcmd*{\Glsentryuseri}[1]{%
+ \@Gls@entry@field{#1}{useri}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsentryuserii}
+% Get the second user key (as specified by the
+% \gloskey{user2} when the entry was defined). The argument
+% is the label associated with the entry.
+%\changes{2.04}{2009-11-10}{new}
+% \begin{macrocode}
+\newcommand*{\glsentryuserii}[1]{%
+ \@gls@entry@field{#1}{userii}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Glsentryuserii}
+%\changes{2.04}{2009-11-10}{new}
+%\changes{3.09a}{2013-10-09}{made robust}
+% \begin{macrocode}
+\newrobustcmd*{\Glsentryuserii}[1]{%
+ \@Gls@entry@field{#1}{userii}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsentryuseriii}
+% Get the third user key (as specified by the
+% \gloskey{user3} when the entry was defined). The argument
+% is the label associated with the entry.
+%\changes{2.04}{2009-11-10}{new}
+% \begin{macrocode}
+\newcommand*{\glsentryuseriii}[1]{%
+ \@gls@entry@field{#1}{useriii}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Glsentryuseriii}
+%\changes{2.04}{2009-11-10}{new}
+%\changes{3.09a}{2013-10-09}{made robust}
+% \begin{macrocode}
+\newrobustcmd*{\Glsentryuseriii}[1]{%
+ \@Gls@entry@field{#1}{useriii}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsentryuseriv}
+% Get the fourth user key (as specified by the
+% \gloskey{user4} when the entry was defined). The argument
+% is the label associated with the entry.
+%\changes{2.04}{2009-11-10}{new}
+% \begin{macrocode}
+\newcommand*{\glsentryuseriv}[1]{%
+ \@gls@entry@field{#1}{useriv}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Glsentryuseriv}
+%\changes{2.04}{2009-11-10}{new}
+%\changes{3.09a}{2013-10-09}{made robust}
+% \begin{macrocode}
+\newrobustcmd*{\Glsentryuseriv}[1]{%
+ \@Gls@entry@field{#1}{useriv}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsentryuserv}
+% Get the fifth user key (as specified by the
+% \gloskey{user5} when the entry was defined). The argument
+% is the label associated with the entry.
+%\changes{2.04}{2009-11-10}{new}
+% \begin{macrocode}
+\newcommand*{\glsentryuserv}[1]{%
+ \@gls@entry@field{#1}{userv}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Glsentryuserv}
+%\changes{2.04}{2009-11-10}{new}
+%\changes{3.09a}{2013-10-09}{made robust}
+% \begin{macrocode}
+\newrobustcmd*{\Glsentryuserv}[1]{%
+ \@Gls@entry@field{#1}{userv}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsentryuservi}
+% Get the sixth user key (as specified by the
+% \gloskey{user6} when the entry was defined). The argument
+% is the label associated with the entry.
+%\changes{2.04}{2009-11-10}{new}
+% \begin{macrocode}
+\newcommand*{\glsentryuservi}[1]{%
+ \@gls@entry@field{#1}{uservi}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Glsentryuservi}
+%\changes{2.04}{2009-11-10}{new}
+%\changes{3.09a}{2013-10-09}{made robust}
+% \begin{macrocode}
+\newrobustcmd*{\Glsentryuservi}[1]{%
+ \@Gls@entry@field{#1}{uservi}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsentryshort}
+% Get the short key (as specified by the
+% \gloskey{short} the entry was defined). The argument
+% is the label associated with the entry.
+%\changes{3.0}{2011-04-02}{new}
+% \begin{macrocode}
+\newcommand*{\glsentryshort}[1]{\@gls@entry@field{#1}{short}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Glsentryshort}
+%\changes{3.0}{2011-04-02}{new}
+%\changes{3.09a}{2013-10-09}{made robust}
+% \begin{macrocode}
+\newrobustcmd*{\Glsentryshort}[1]{%
+ \@Gls@entry@field{#1}{short}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsentryshortpl}
+% Get the short plural key (as specified by the
+% \gloskey{shortplural} the entry was defined). The argument
+% is the label associated with the entry.
+%\changes{3.0}{2011-04-02}{new}
+% \begin{macrocode}
+\newcommand*{\glsentryshortpl}[1]{\@gls@entry@field{#1}{shortpl}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Glsentryshortpl}
+%\changes{3.0}{2011-04-02}{new}
+%\changes{3.09a}{2013-10-09}{made robust}
+% \begin{macrocode}
+\newrobustcmd*{\Glsentryshortpl}[1]{%
+ \@Gls@entry@field{#1}{shortpl}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsentrylong}
+% Get the long key (as specified by the
+% \gloskey{long} the entry was defined). The argument
+% is the label associated with the entry.
+%\changes{3.0}{2011-04-02}{new}
+% \begin{macrocode}
+\newcommand*{\glsentrylong}[1]{\@gls@entry@field{#1}{long}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Glsentrylong}
+%\changes{3.0}{2011-04-02}{new}
+%\changes{3.09a}{2013-10-09}{made robust}
+% \begin{macrocode}
+\newrobustcmd*{\Glsentrylong}[1]{%
+ \@Gls@entry@field{#1}{long}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsentrylongpl}
+% Get the long plural key (as specified by the
+% \gloskey{longplural} the entry was defined). The argument
+% is the label associated with the entry.
+%\changes{3.0}{2011-04-02}{new}
+% \begin{macrocode}
+\newcommand*{\glsentrylongpl}[1]{\@gls@entry@field{#1}{longpl}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Glsentrylongpl}
+%\changes{3.0}{2011-04-02}{new}
+%\changes{3.09a}{2013-10-09}{made robust}
+% \begin{macrocode}
+\newrobustcmd*{\Glsentrylongpl}[1]{%
+ \@Gls@entry@field{#1}{longpl}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Short cut macros to access full form:
+%\begin{macro}{\glsentryfull}
+%\changes{3.13a}{2013-11-05}{changed to use \cs{acrfullformat}}
+%\changes{4.02}{2013-12-05}{bug fix: added missing \cs{acronymfont}}
+% \begin{macrocode}
+\newcommand*{\glsentryfull}[1]{%
+ \acrfullformat{\glsentrylong{#1}}{\acronymfont{\glsentryshort{#1}}}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Glsentryfull}
+%\changes{3.09a}{2013-10-09}{made robust}
+%\changes{3.02}{2012-05-21}{fixed bug (replaced \cs{glsentryshortpl}
+%with \cs{glsentryshort})}
+%\changes{3.13a}{2013-11-05}{changed to use \cs{acrfullformat}}
+%\changes{4.02}{2013-12-05}{bug fix: added missing \cs{acronymfont}}
+% \begin{macrocode}
+\newrobustcmd*{\Glsentryfull}[1]{%
+ \acrfullformat{\Glsentrylong{#1}}{\acronymfont{\glsentryshort{#1}}}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsentryfullpl}
+%\changes{3.02}{2012-05-21}{fixed bug (replaced \cs{glsentryshort}
+%with \cs{glsentryshortpl})}
+%\changes{3.13a}{2013-11-05}{changed to use \cs{acrfullformat}}
+%\changes{4.02}{2013-12-05}{bug fix: added missing \cs{acronymfont}}
+% \begin{macrocode}
+\newcommand*{\glsentryfullpl}[1]{%
+ \acrfullformat{\glsentrylongpl{#1}}{\acronymfont{\glsentryshortpl{#1}}}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Glsentryfullpl}
+%\changes{3.09a}{2013-10-09}{made robust}
+%\changes{3.13a}{2013-11-05}{changed to use \cs{acrfullformat}}
+%\changes{4.02}{2013-12-05}{bug fix: added missing \cs{acronymfont}}
+% \begin{macrocode}
+\newrobustcmd*{\Glsentryfullpl}[1]{%
+ \acrfullformat{\Glsentrylongpl{#1}}{\acronymfont{\glsentryshortpl{#1}}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsentrynumberlist}
+%\changes{3.02}{2012-05-21}{new}
+%Displays the number list as is.
+% \begin{macrocode}
+\newcommand*{\glsentrynumberlist}[1]{%
+ \glsdoifexists{#1}%
+ {%
+ \@gls@entry@field{#1}{numberlist}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsdisplaynumberlist}
+%\changes{3.02}{2012-05-21}{new}
+% Formats the number list for the given entry label.
+% Doesn't work with hyperref.
+% \begin{macrocode}
+\@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
+% \end{macrocode}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+ \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
+ }%
+ }
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsnumlistsep}
+%\changes{3.02}{2012-05-19}{new}
+% \begin{macrocode}
+\newcommand*{\glsnumlistsep}{, }
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsnumlistlastsep}
+%\changes{3.02}{2012-05-19}{new}
+% \begin{macrocode}
+\newcommand*{\glsnumlistlastsep}{ \& }
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glshyperlink}
+% Provide a hyperlink to a glossary entry without adding information
+% to the glossary file. The entry needs to be added using a
+% command like \ics{glslink} or \ics{glsadd} to ensure that
+% the target is defined. The first (optional) argument specifies
+% the link text. The entry name is used by default. The second
+% argument is the entry label.
+%\changes{1.17}{2008-12-26}{new}
+%\changes{3.0}{2011-04-02}{changed default from \cs{glsentryname}
+%to \cs{glsentrytext}}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\glshyperlink}[2][\glsentrytext{\@glo@label}]{%
+ \def\@glo@label{#2}%
+ \@glslink{\glolinkprefix\glsdetoklabel{#2}}{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\section{Adding an entry to the glossary without generating
+% text}
+% The following keys are provided for \cs{glsadd} and
+% \cs{glsaddall}:
+% \begin{macrocode}
+\define@key{glossadd}{counter}{\def\@gls@counter{#1}}
+% \end{macrocode}
+%\changes{2.07}{2010-07-10}{glsadd format key stored in \cs{@glsnumberformat}
+%(was mistakenly stored in \cs{@glo@format})}
+% \begin{macrocode}
+\define@key{glossadd}{format}{\def\@glsnumberformat{#1}}
+% \end{macrocode}
+% This key is only used by \cs{glsaddall}:
+% \begin{macrocode}
+\define@key{glossadd}{types}{\def\@glo@type{#1}}
+% \end{macrocode}
+%
+%\begin{definition}
+%\cs{glsadd}\oarg{options}\marg{label}
+%\end{definition}
+% Add a term to the glossary without generating any link text.
+% The optional argument indicates which counter to use,
+% and how to format it (using a key-value list)
+% the second argument is the entry label. Note that \meta{options}
+% only has two keys: \gloskey[glsadd]{counter} and \gloskey[glsadd]{format} (the \gloskey[glsaddall]{types} key will be ignored).
+%\begin{macro}{\glsadd}
+%\changes{1.07}{2007-09-13}{fixed bug caused by \cs{theglsentrycounter} setting the page number too soon}
+%\changes{2.04}{2009-11-10}{fixed bug that ignored counter}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+%\changes{4.12}{2014-11-22}{added check for vertical mode}
+% \begin{macrocode}
+\newrobustcmd*{\glsadd}[2][]{%
+% \end{macrocode}
+% Need to move to horizontal mode if not already in it, but only if
+% not in preamble.
+% \begin{macrocode}
+ \@gls@adjustmode
+ \glsdoifexists{#2}%
+ {%
+ \def\@glsnumberformat{glsnumberformat}%
+ \edef\@gls@counter{\csname glo@\glsdetoklabel{#2}@counter\endcsname}%
+ \setkeys{glossadd}{#1}%
+% \end{macrocode}
+% Store the entry's counter in \cs{theglsentrycounter}
+%\changes{3.0}{2011-04-02}{added \cs{@gls@saveentrycounter}}
+%\changes{4.16}{2015-07-08}{changed \cs{@do@wrglossary} to
+%\cs{@@do@wrglossary}}
+% \begin{macrocode}
+ \@gls@saveentrycounter
+% \end{macrocode}
+% Define sort key if necessary:
+%\changes{4.35}{2017-11-14}{added \cs{@gls@setsort} (in case of
+%\pkgopt[use]{sort})}
+% \begin{macrocode}
+ \@gls@setsort{#2}%
+% \end{macrocode}
+% This should use \cs{@@do@wrglossary} rather than
+% \cs{@do@wrglossary} since the whole point of \cs{glsadd} is to add
+% a line to the glossary.
+% \begin{macrocode}
+ \@@do@wrglossary{#2}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@adjustmode}
+%\changes{4.12}{2014-11-22}{new}
+% \begin{macrocode}
+\newcommand*{\@gls@adjustmode}{}
+\AtBeginDocument{\renewcommand*{\@gls@adjustmode}{\ifvmode\mbox{}\fi}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{definition}
+%\cs{glsaddall}\oarg{option list}
+%\end{definition}
+% Add all terms defined for the listed glossaries (without displaying
+% any text). If \gloskey[glsaddall]{types} key is omitted, apply to all
+% glossary types.
+%\begin{macro}{\glsaddall}
+%\changes{3.01}{2011-04-12}{made robust}
+% \begin{macrocode}
+\newrobustcmd*{\glsaddall}[1][]{%
+ \edef\@glo@type{\@glo@types}%
+ \setkeys{glossadd}{#1}%
+ \forallglsentries[\@glo@type]{\@glo@entry}{%
+ \glsadd[#1]{\@glo@entry}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsaddallunused}
+%\begin{definition}
+%\cs{glsaddallunused}\oarg{glossary type}
+%\end{definition}
+% Add all used terms defined for the listed glossaries (without displaying
+% any text). If optional argument is omitted, apply to all
+% glossary types. This should typically go at the end of the
+% document.
+%\changes{3.08a}{2013-09-28}{new}
+%\changes{3.13a}{2013-11-05}{set default to \cs{@glo@types}}
+%\changes{4.12}{2014-11-22}{replaced @gobble with glsignore}
+% \begin{macrocode}
+\newrobustcmd*{\glsaddallunused}[1][\@glo@types]{%
+ \forallglsentries[#1]{\@glo@entry}%
+ {%
+ \ifglsused{\@glo@entry}{}{\glsadd[format=glsignore]{\@glo@entry}}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsignore}
+%\changes{4.12}{2014-11-22}{new}
+% \begin{macrocode}
+\newcommand*{\glsignore}[1]{}
+% \end{macrocode}
+%\end{macro}
+%
+%\section{Creating associated files}
+% The \cs{writeist} command creates the associated
+% customized \filetype{.ist} \app{makeindex} style file.
+% While defining this command, some characters have their
+% catcodes temporarily changed to ensure they get written to
+% the \filetype{.ist} file correctly. The \app{makeindex}
+% actual character (usually "@") is redefined to be a "?", to allow
+% internal commands to be written to the glossary file output file.
+%
+% The special characters\mkidxspch\ are stored in \cs{@gls@actualchar},
+% \cs{@gls@encapchar}, \cs{@glsl@levelchar} and
+% \cs{@gls@quotechar} to make them easier to use later,
+% but don't change these values, because the characters are
+% encoded in the command definitions that are used to escape
+% the special characters (which means that the user no longer
+% needs to worry about \app{makeindex} special characters).
+%
+% The symbols and numbers label for group headings are hardwired into
+% the \filetype{.ist} file as \texttt{glssymbols} and
+% \texttt{glsnumbers}, the group titles can be translated
+% (so that \ics{glssymbolsgroupname} replaces \texttt{glssymbols}
+% and \ics{glsnumbersgroupname} replaces \texttt{glsnumbers})
+% using the command \ics{glsgetgrouptitle} which is
+% defined in \isty{glossary-hypernav}. This is done to prevent
+% any problem characters in \ics{glssymbolsgroupname}
+% and \ics{glsnumbersgroupname} from breaking hyperlinks.
+%
+%\begin{macro}{\glsopenbrace}
+% Define \cs{glsopenbrace} to make it easier to write an opening
+% brace to a file.
+% \begin{macrocode}
+\edef\glsopenbrace{\expandafter\@gobble\string\{}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsclosebrace}
+% Define \cs{glsclosebrace} to make it easier to write an opening
+% brace to a file.
+% \begin{macrocode}
+\edef\glsclosebrace{\expandafter\@gobble\string\}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsbackslash}
+%\changes{4.11}{2014-09-01}{new}
+% Define \cs{glsbackslash} to make it easier to write a backslash to a file.
+% \begin{macrocode}
+\edef\glsbackslash{\expandafter\@gobble\string\\}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsquote}
+% Define command that makes it easier to write quote marks to
+% a file in the event that the double quote character has been
+% made active.
+% \begin{macrocode}
+\edef\glsquote#1{\string"#1\string"}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glspercentchar}
+%\changes{4.10}{2014-08-27}{new}
+% Define \cs{glspercentchar} to make it easier to write a percent
+% character to a file.
+% \begin{macrocode}
+\edef\glspercentchar{\expandafter\@gobble\string\%}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glstildechar}
+%\changes{4.10}{2014-08-27}{new}
+% Define \cs{glstildechar} to make it easier to write a tilde
+% character to a file.
+% \begin{macrocode}
+\edef\glstildechar{\string~}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glsfirstletter}
+% Define the first letter to come after the digits 0,\ldots,9.
+% Only required for \app{xindy}.
+% \begin{macrocode}
+\ifglsxindy
+ \newcommand*{\@glsfirstletter}{A}
+\fi
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\GlsSetXdyFirstLetterAfterDigits}
+%\changes{4.33}{2017-09-20}{added starred version}
+% Sets the first letter to come after the digits 0,\ldots,9.
+%The starred version sanitizes.
+% \begin{macrocode}
+\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
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@xdynumbergrouporder}
+% Specifies the order of the number group.
+% \begin{macrocode}
+\ifglsxindy
+ \newcommand*{\@xdynumbergrouporder}{:before \string"\@glsfirstletter\string"}
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\GlsSetXdyNumberGroupOrder}
+%\changes{4.33}{2017-09-20}{new}
+% Sets the relative location of the number group.
+%The starred version sanitizes.
+% \begin{macrocode}
+\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
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{\@glsminrange}
+% Define the minimum number of successive location references
+% to merge into a range.
+% \begin{macrocode}
+\newcommand*{\@glsminrange}{2}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\GlsSetXdyMinRangeLength}
+% Set the minimum range length. The value must either be "none"
+% or a positive integer. The \sty{glossaries} package doesn't
+% check if the argument is valid, that is left to \app{xindy}.
+% \begin{macrocode}
+\ifglsxindy
+ \newcommand*{\GlsSetXdyMinRangeLength}[1]{%
+ \renewcommand*{\@glsminrange}{#1}}
+\else
+ \newcommand*{\GlsSetXdyMinRangeLength}[1]{%
+ \glsnoxindywarning\GlsSetXdyMinRangeLength}
+\fi
+% \end{macrocode}
+%\end{macro}
+
+%\begin{macro}{\writeist}
+%\changes{1.17}{2008-12-26}{added xindy support}
+%\changes{1.01}{2007-05-17}{Added spaces after \cs{delimN} and
+%\cs{delimR} in ist file}%
+%\changes{3.0}{2011-04-02}{modified to support new format}
+% \begin{macrocode}
+\ifglsxindy
+% \end{macrocode}
+% Code to use if \app{xindy} is required.
+% \begin{macrocode}
+ \def\writeist{%
+% \end{macrocode}
+% Define write register if not already defined
+%\changes{4.04}{2014-03-06}{checked for definition of \cs{glswrite}}
+% \begin{macrocode}
+ \ifundef{\glswrite}{\newwrite\glswrite}{}%
+% \end{macrocode}
+% Update attributes list
+% \begin{macrocode}
+ \@gls@addpredefinedattributes
+% \end{macrocode}
+% Open the file.
+% \begin{macrocode}
+ \openout\glswrite=\istfilename
+% \end{macrocode}
+% Write header comment at the start of the file
+% \begin{macrocode}
+ \write\glswrite{;; xindy style file created by the glossaries
+ package}%
+ \write\glswrite{;; for document '\jobname' on
+ \the\year-\the\month-\the\day}%
+% \end{macrocode}
+% Specify the required styles
+% \begin{macrocode}
+ \write\glswrite{^^J; required styles^^J}
+ \@for\@xdystyle:=\@xdyrequiredstyles\do{%
+ \ifx\@xdystyle\@empty
+ \else
+ \protected@write\glswrite{}{(require
+ \string"\@xdystyle.xdy\string")}%
+ \fi
+ }%
+% \end{macrocode}
+% List the allowed attributes (possible values used by the
+% \gloskey{format} key)
+% \begin{macrocode}
+ \write\glswrite{^^J%
+ ; list of allowed attributes (number formats)^^J}%
+ \write\glswrite{(define-attributes ((\@xdyattributes)))}%
+% \end{macrocode}
+% Define any additional alphabets
+% \begin{macrocode}
+ \write\glswrite{^^J; user defined alphabets^^J}%
+ \write\glswrite{\@xdyuseralphabets}%
+% \end{macrocode}
+% Define location classes.
+% \begin{macrocode}
+ \write\glswrite{^^J; location class definitions^^J}%
+% \end{macrocode}
+% As from version 3.0, locations are now specified as
+% \marg{Hprefix}\marg{number}, so need to add all possible
+% combinations of location types.
+% \begin{macrocode}
+ \@for\@gls@classI:=\@gls@xdy@locationlist\do{%
+% \end{macrocode}
+% Case where \meta{Hprefix} is empty:
+% \begin{macrocode}
+ \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%
+ )
+ }%
+% \end{macrocode}
+% Nested iteration over all classes:
+% \begin{macrocode}
+ {%
+ \@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%
+ )
+ }%
+ }%
+ }%
+ }%
+% \end{macrocode}
+% User defined location classes (needs checking for new location format).
+% \begin{macrocode}
+ \write\glswrite{^^J; user defined location classes}%
+ \write\glswrite{\@xdyuserlocationdefs}%
+% \end{macrocode}
+% Cross-reference class. (The unverified option is used as the
+% cross-references are supplied using the list of labels along with
+% the optional argument for \ics{glsseeformat} which
+% \app{xindy} won't recognise.)
+% \begin{macrocode}
+ \write\glswrite{^^J; define cross-reference class^^J}%
+ \write\glswrite{(define-crossref-class \string"see\string"
+ :unverified )}%
+% \end{macrocode}
+% Define how cross-references should be displayed. This adds an
+% empty set of braces after the cross-referencing information
+% allowing for the final argument of \cs{glsseeformat} which
+% gets ignored. (When using \app{makeindex} this final argument
+% contains the location information which is not required.)
+% \begin{macrocode}
+ \write\glswrite{(markup-crossref-list
+ :class \string"see\string"^^J\space\space\space
+ :open \string"\string\glsseeformat\string"
+ :close \string"{}\string")}%
+% \end{macrocode}
+% Provide hook to write extra material here (used by
+% \sty{glossaries-extra} to define a seealso class).
+% \begin{macrocode}
+ \@xdycrossrefhook
+% \end{macrocode}
+% List the order to sort the classes.
+% \begin{macrocode}
+ \write\glswrite{^^J; define the order of the location classes}%
+ \write\glswrite{(define-location-class-order
+ (\@xdylocationclassorder))}%
+% \end{macrocode}
+% Specify what to write to the start and end of the glossary file.
+% \begin{macrocode}
+ \write\glswrite{^^J; define the glossary markup^^J}%
+% \end{macrocode}
+%\changes{3.0}{2011-04-02}{added xindy-only macro definitions to
+%glossary open tag}
+% \begin{macrocode}
+ \write\glswrite{(markup-index^^J\space\space\space
+ :open \string"\string
+ \glossarysection[\string\glossarytoctitle]{\string
+ \glossarytitle}\string\glossarypreamble}%
+% \end{macrocode}
+% Add all the xindy-only macro definitions (needed to prevent errors
+% in the event that the user changes from \pkgopt{xindy} to
+% \pkgopt{makeindex})
+% \begin{macrocode}
+ \@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}%
+ }%
+ }%
+ }%
+ }%
+ }%
+% \end{macrocode}
+% Add the end part of the open tag and the rest of the markup-index
+% information:
+% \begin{macrocode}
+ \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)}%
+% \end{macrocode}
+% Specify what to put between letter groups
+% \begin{macrocode}
+ \write\glswrite{(markup-letter-group-list
+ :sep \string"\string\glsgroupskip\glstildechar n\string")}%
+% \end{macrocode}
+% Specify what to put between entries
+% \begin{macrocode}
+ \write\glswrite{(markup-indexentry
+ :open \string"\string\relax \string\glsresetentrylist
+ \glstildechar n\string")}%
+% \end{macrocode}
+% Specify how to format entries
+% \begin{macrocode}
+ \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")}%
+% \end{macrocode}
+% Specify how to separate location numbers
+% \begin{macrocode}
+ \write\glswrite{(markup-locref-list
+ :sep \string"\string\delimN\space\string")}%
+% \end{macrocode}
+% Specify how to indicate location ranges
+% \begin{macrocode}
+ \write\glswrite{(markup-range
+ :sep \string"\string\delimR\space\string")}%
+% \end{macrocode}
+% Specify 2-page and 3-page suffixes, if defined.
+% First, the values must be sanitized to write them explicity.
+% \begin{macrocode}
+ \@onelevel@sanitize\gls@suffixF
+ \@onelevel@sanitize\gls@suffixFF
+% \end{macrocode}
+% \begin{macrocode}
+ \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
+% \end{macrocode}
+% Specify how to format locations.
+% \begin{macrocode}
+ \write\glswrite{^^J; define format to use for locations^^J}%
+ \write\glswrite{\@xdylocref}%
+% \end{macrocode}
+% Specify how to separate letter groups.
+% \begin{macrocode}
+ \write\glswrite{^^J; define letter group list format^^J}%
+ \write\glswrite{(markup-letter-group-list
+ :sep \string"\string\glsgroupskip\glstildechar n\string")}%
+% \end{macrocode}
+% Define letter group headings.
+% \begin{macrocode}
+ \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")}%
+% \end{macrocode}
+% Define additional letter groups.
+% \begin{macrocode}
+ \write\glswrite{^^J; additional letter groups^^J}%
+ \write\glswrite{\@xdylettergroups}%
+% \end{macrocode}
+% Define additional sort rules
+% \begin{macrocode}
+ \write\glswrite{^^J; additional sort rules^^J}
+ \write\glswrite{\@xdysortrules}%
+% \end{macrocode}
+%Hook for any additional information:
+% \begin{macrocode}
+ \@gls@writeisthook
+% \end{macrocode}
+% Close the style file
+% \begin{macrocode}
+ \closeout\glswrite
+% \end{macrocode}
+% Suppress any further calls.
+% \begin{macrocode}
+ \let\writeist\relax
+ }
+\else
+% \end{macrocode}
+% Code to use if \app{makeindex} is required.
+%\changes{2.01}{2009 May 30}{removed item\_02 - no such makeindex key}
+%\changes{4.04}{2014-03-06}{checked for definition of \cs{glswrite}}
+% \begin{macrocode}
+ \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"}
+% \end{macrocode}
+%\changes{2.05}{2010-02-06}{Added \cs{string} before opening
+% and closing braces. Patch provided by Segiu Dotenco}
+% \begin{macrocode}
+ \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
+% \end{macrocode}
+%Hook for any additional information:
+% \begin{macrocode}
+ \@gls@writeisthook
+% \end{macrocode}
+% Close the file and disable \cs{writeist}.
+% \begin{macrocode}
+ \closeout\glswrite
+ \let\writeist\relax
+ }
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\GlsSetWriteIstHook}
+%\changes{4.24}{2016-05-27}{new}
+%Allow user to append information to the style file.
+% \begin{macrocode}
+\newcommand*{\GlsSetWriteIstHook}[1]{\renewcommand*{\@gls@writeisthook}{#1}}
+\@onlypremakeg\GlsSetWriteIstHook
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@gls@writeisthook}
+% \begin{macrocode}
+\newcommand*{\@gls@writeisthook}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\GlsSetQuote}
+%\changes{4.24}{2016-05-27}{new}
+%Allow user to set the \app{makeindex} quote character. This is primarily for
+%\sty{ngerman} users who want to use \app{makeindex}'s -g option.
+% \begin{macrocode}
+\ifglsxindy
+ \newcommand*{\GlsSetQuote}[1]{\glsnomakeindexwarning\GlsSetQuote}
+ \newcommand*{\gls@nosetquote}[1]{\glsnomakeindexwarning\GlsSetQuote}
+\else
+ \newcommand*{\GlsSetQuote}[1]{\edef\@gls@quotechar{\string#1}%
+% \end{macrocode}
+% If German is in use, set
+% the extra \app{makeindex} option so \app{makeglossaries} can pick
+% it up.
+% \begin{macrocode}
+ \@ifpackageloaded{tracklang}%
+ {%
+ \IfTrackedLanguage{german}%
+ {%
+ \def\@@gls@extramakeindexopts{-g}%
+ }%
+ {}%
+ }%
+ {}%
+% \end{macrocode}
+% Need to redefine \cs{@gls@checkquote}
+% \begin{macrocode}
+ \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
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@extramakeindexopts}
+%\changes{4.24}{2016-05-27}{new}
+% \begin{macrocode}
+\newcommand*{\@gls@extramakeindexopts}[1]{}
+% \end{macrocode}
+%\end{macro}
+%
+%The command \cs{noist} will suppress the creation of
+% the \filetype{.ist} file. Obviously you need to use this
+% command before \cs{writeist} to have any effect.
+%\begin{macro}{\noist}
+% \begin{macrocode}
+\newcommand{\noist}{%
+% \end{macrocode}
+% Update attributes list
+% \begin{macrocode}
+ \@gls@addpredefinedattributes
+ \let\writeist\relax
+}
+% \end{macrocode}
+%\end{macro}
+%
+% \cs{@makeglossary} is an internal command that takes an
+% argument indicating the glossary type. This command will
+% create the glossary file required by \app{makeindex} for the
+% given glossary type, using the extension supplied by the
+% \meta{out-ext} parameter used in \ics{newglossary}
+% (and it will also activate the \ics{glossary} command,
+% and create the customized \filetype{.ist} \app{makeindex}
+% style file).
+%
+% Note that you can't use \cs{@makeglossary} for only some of the
+% defined glossaries. You either need to have a \cs{makeglossary}
+% for all glossaries or none (otherwise you will end up with a
+% situation where \TeX\ is trying to write to a non-existant
+% file). The relevant glossary must be
+% defined prior to using \cs{@makeglossary}.
+%\begin{macro}{\@makeglossary}
+% \begin{macrocode}
+\newcommand*{\@makeglossary}[1]{%
+ \ifglossaryexists{#1}%
+ {%
+% \end{macrocode}
+% Only create a new write if \pkgopt[false]{savewrites} otherwise
+% create a token to collect the information.
+%\changes{3.0}{2010-07-12}{Added check for \pkgopt{savewrites}}
+% \begin{macrocode}
+ \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}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glsopenfile}
+% Open write file associated with the given glossary.
+% \begin{macrocode}
+\newcommand*{\@glsopenfile}[2]{%
+ \immediate\openout#1=\jobname.\csname @glotype@#2@out\endcsname
+ \PackageInfo{glossaries}{Writing glossary file
+ \jobname.\csname @glotype@#2@out\endcsname}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@closegls}
+%\changes{4.08}{2014-07-30}{new}
+% \begin{macrocode}
+\newcommand*{\@closegls}[1]{%
+ \closeout\csname glo@#1@file\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@automake}
+%\changes{4.08}{2014-07-30}{new}
+% \begin{macrocode}
+\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
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@automake@immediate}
+%\changes{4.42}{2019-01-06}{new}
+% \begin{macrocode}
+\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
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\warn@nomakeglossaries}
+% Issue warning that \cs{makeglossaries} hasn't been used.
+% \begin{macrocode}
+\newcommand*{\@warn@nomakeglossaries}{}
+% \end{macrocode}
+% Only use this if warning if \cs{printglossary} has been used
+% without \cs{makeglossaries}
+% \begin{macrocode}
+\newcommand*{\warn@nomakeglossaries}{\@warn@nomakeglossaries}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@@automake@immediate}
+%\changes{4.42}{2019-01-06}{new}
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+%
+% \cs{makeglossaries} will use \cs{@makeglossary}
+% for each glossary type that has been defined. New glossaries
+% need to be defined before using \cs{makeglossary}, so
+% have \cs{makeglossaries} redefine \cs{newglossary}
+% to prevent it being used afterwards.
+%\begin{macro}{\makeglossaries}
+% \begin{macrocode}
+\newcommand*{\makeglossaries}{%
+% \end{macrocode}
+%If automake=immediate setting is on, use the shell escape now.
+% \begin{macrocode}
+ \@gls@@automake@immediate
+% \end{macrocode}
+% Define the write used for style file also used for all other output files
+% if \pkgopt[true]{savewrites}.
+%\changes{4.04}{2014-03-06}{Moved definition of \cs{glswrite} to
+%\cs{makeglossaries}}
+% \begin{macrocode}
+ \ifundef{\glswrite}{\newwrite\glswrite}{}%
+% \end{macrocode}
+%\changes{3.10a}{2013-10-13}{Added providecommand code to aux file}
+% If the user removes the glossary package from their document,
+% ensure the next run doesn't throw a load of undefined control
+% sequence errors when the aux file is parsed.
+% \begin{macrocode}
+ \protected@write\@auxout{}{\string\providecommand\string\@glsorder[1]{}}
+ \protected@write\@auxout{}{\string\providecommand\string\@istfilename[1]{}}
+% \end{macrocode}
+%If \cs{@@gls@extramakeindexopts} has been defined, write it:
+% \begin{macrocode}
+ \ifundef\@@gls@extramakeindexopts
+ {}%
+ {%
+ \protected@write\@auxout{}{\string\providecommand
+ \string\@gls@extramakeindexopts[1]{}}
+ \protected@write\@auxout{}{\string\@gls@extramakeindexopts
+ {\@@gls@extramakeindexopts}}%
+ }%
+% \end{macrocode}
+% Write the name of the style file to the aux file
+% (needed by \app{makeglossaries})
+% \begin{macrocode}
+ \protected@write\@auxout{}{\string\@istfilename{\istfilename}}%
+ \protected@write\@auxout{}{\string\@glsorder{\glsorder}}
+% \end{macrocode}
+% Iterate through each glossary type and activate it.
+% \begin{macrocode}
+ \@for\@glo@type:=\@glo@types\do{%
+ \ifthenelse{\equal{\@glo@type}{}}{}{%
+ \@makeglossary{\@glo@type}}%
+ }%
+% \end{macrocode}
+% New glossaries must be created before \cs{makeglossaries}
+% so disable \ics{newglossary}.
+% \begin{macrocode}
+ \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}}%
+% \end{macrocode}
+% Any subsequence instances of this command should have no effect.
+% The deprecated \cs{makeglossary} is not redefined here as it either
+% implements \cs{makeglossaries} or has been restored to its original
+% definition (in which case it shouldn't be changed).
+%\changes{4.41}{2018-07-23}{removed redefinition of \cs{makeglossary}}
+% \begin{macrocode}
+ \let\@makeglossary\relax
+ \let\makeglossaries\relax
+% \end{macrocode}
+% Disable all commands that have no effect after \cs{makeglossaries}
+% \begin{macrocode}
+ \@disable@onlypremakeg
+% \end{macrocode}
+% Allow \gloskey{see} key:
+% \begin{macrocode}
+ \let\gls@checkseeallowed\relax
+% \end{macrocode}
+% Suppress warning about no \cs{makeglossaries}
+% \begin{macrocode}
+ \let\warn@nomakeglossaries\relax
+% \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}%
+ }%
+ }%
+% \end{macrocode}
+% Declare list parser for \cs{glsdisplaynumberlist}
+%\changes{3.02}{2012-05-21}{added list parser}
+% \begin{macrocode}
+ \ifglssavenumberlist
+ \edef\@gls@dodeflistparser{\noexpand\DeclareListParser
+ {\noexpand\glsnumlistparser}{\delimN}}%
+ \@gls@dodeflistparser
+ \fi
+% \end{macrocode}
+% Prevent user from also using \cs{makenoidxglossaries}
+% \begin{macrocode}
+ \let\makenoidxglossaries\@no@makeglossaries
+% \end{macrocode}
+% Prohibit sort key in printgloss family:
+% \begin{macrocode}
+ \renewcommand*{\@printgloss@setsort}{%
+ \let\@glo@assign@sortkey\@glo@no@assign@sortkey
+ }%
+% \end{macrocode}
+% Check the automake setting:
+% \begin{macrocode}
+ \ifglsautomake
+ \renewcommand*{\@gls@doautomake}{%
+ \@for\@gls@type:=\@glo@types\do{%
+ \ifdefempty{\@gls@type}{}%
+ {\@gls@automake{\@gls@type}}%
+ }%
+ }%
+ \fi
+% \end{macrocode}
+% Check the sort setting:
+% \begin{macrocode}
+ \@glo@check@sortallowed\makeglossaries
+}
+% \end{macrocode}
+%\changes{4.02}{2013-13-05}{made preamble only}
+% Must occur in the preamble:
+% \begin{macrocode}
+\@onlypreamble{\makeglossaries}
+% \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.
+%\end{macro}
+%
+% If \ics{makeglossaries} hasn't been used, issue a warning.
+% Also issue a warning if neither \ics{printglossaries} nor
+% \ics{printglossary} have been used.
+% \begin{macrocode}
+\AtEndDocument{%
+ \warn@nomakeglossaries
+ \warn@noprintglossary
+}
+% \end{macrocode}
+%
+%\begin{macro}{\makenoidxglossaries}
+%\changes{4.04}{2014-03-06}{new}
+% Analogous to \cs{makeglossaries} this activates the commands
+% needed for \cs{printnoidxglossary}
+% \begin{macrocode}
+\newcommand*{\makenoidxglossaries}{%
+% \end{macrocode}
+% Redefine empty glossary warning:
+% \begin{macrocode}
+ \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)}%
+ }%
+% \end{macrocode}
+% Don't escape makeindex/xindy characters:
+% \begin{macrocode}
+ \let\@gls@checkmkidxchars\@gobble
+% \end{macrocode}
+% Don't escape locations:
+%\changes{4.40}{2018-06-01}{added esclocations=false}
+% \begin{macrocode}
+ \glsesclocationsfalse
+% \end{macrocode}
+% Write glossary information to aux instead of glossary files
+% \begin{macrocode}
+ \let\@@do@@wrglossary\gls@noidxglossary
+% \end{macrocode}
+% Switch on group headings that use the character code:
+% \begin{macrocode}
+ \let\@gls@getgrouptitle\@gls@noidx@getgrouptitle
+% \end{macrocode}
+% Allow \gloskey{see} key:
+% \begin{macrocode}
+ \let\gls@checkseeallowed\relax
+% \end{macrocode}
+% Redefine cross-referencing macro:
+% \begin{macrocode}
+ \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{}%
+ }%
+ }%
+ }%
+% \end{macrocode}
+% If user removes the glossaries package from their document, ensure
+% the next run doesn't throw a load of undefined control sequence
+% errors when the aux file is parsed.
+% \begin{macrocode}
+ \AtBeginDocument
+ {%
+ \write\@auxout{\string\providecommand\string\@gls@reference[3]{}}%
+ }%
+% \end{macrocode}
+% Change warning about no glossaries
+% \begin{macrocode}
+ \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}%
+ }%
+% \end{macrocode}
+% Suppress warning about no \cs{makeglossaries}
+% \begin{macrocode}
+ \let\warn@nomakeglossaries\relax
+% \end{macrocode}
+% Prevent user from also using \cs{makeglossaries}
+% \begin{macrocode}
+ \let\makeglossaries\@no@makeglossaries
+% \end{macrocode}
+% Allow sort key in printgloss family:
+% \begin{macrocode}
+ \renewcommand*{\@printgloss@setsort}{%
+ \let\@glo@assign@sortkey\@@glo@assign@sortkey
+% \end{macrocode}
+% Initialise default sort order:
+% \begin{macrocode}
+ \def\@glo@sorttype{\@glo@default@sorttype}%
+ }%
+% \end{macrocode}
+% All entries must be defined in the preamble:
+% \begin{macrocode}
+ \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}%
+ }%
+% \end{macrocode}
+% Redefine \ics{glsentrynumberlist}
+% \begin{macrocode}
+ \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}%
+ }%
+ }%
+ }%
+% \end{macrocode}
+% Redefine \ics{glsdisplaynumberlist}
+% \begin{macrocode}
+ \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}%
+ }%
+ }%
+ }%
+% \end{macrocode}
+% Provide a generic way of iterating through the number list:
+% \begin{macrocode}
+ \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
+ }%
+% \end{macrocode}
+% Modify sanitize sort function
+% \begin{macrocode}
+ \let\@@gls@sanitizesort\@gls@noidx@sanitizesort
+ \let\@@gls@nosanitizesort\@@gls@noidx@nosanitizesort
+ \@gls@noidx@setsanitizesort
+% \end{macrocode}
+% Check sort option allowed.
+% \begin{macrocode}
+ \@glo@check@sortallowed\makenoidxglossaries
+}
+% \end{macrocode}
+% Preamble-only command:
+% \begin{macrocode}
+\@onlypreamble{\makenoidxglossaries}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsnumberlistloop}
+%\begin{definition}
+%\cs{glsnumberlistloop}\marg{label}\marg{handler}
+%\end{definition}
+% \begin{macrocode}
+\newcommand*{\glsnumberlistloop}[2]{%
+ \PackageError{glossaries}{\string\glsnumberlistloop\space
+ only works with \string\makenoidxglossaries}{}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsnoidxnumberlistloophandler}
+% Handler macro for \cs{glsnumberlistloop}.
+% (The argument should be in the form
+% \cs{glsnoidxdisplayloc}\marg{prefix}\marg{counter}\marg{format}\marg{n})
+% \begin{macrocode}
+\newcommand*{\glsnoidxnumberlistloophandler}[1]{%
+ #1%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@no@makeglossaries}
+%\changes{4.04}{2014-03-06}{new}
+% Can't use both \cs{makeglossaries} and \cs{makenoidxglossaries}
+% \begin{macrocode}
+\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.}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@noref@warn}
+%\changes{4.04}{2014-03-06}{new}
+% Warning when no instances of \cs{@gls@reference} found.
+% \begin{macrocode}
+\newcommand{\@gls@noref@warn}[1]{%
+ \GlossariesWarning{\string\makenoidxglossaries\space
+ is required to make \string\printnoidxglossary[type={#1}] work}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\section{Writing information to associated files}
+%\label{sec:wrgloss}
+%
+%\begin{macro}{\gls@noidxglossary}
+% Write the glossary information to the aux file (for the `noidx'
+% method):
+% \begin{macrocode}
+\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}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\istfile}
+%\changes{3.0}{2011-04-02}{deprecated}
+%\changes{4.40}{2018-06-01}{changed \cs{def} to \cs{providecommand}}
+% Deprecated.
+% \begin{macrocode}
+\providecommand\istfile{\glswrite}
+% \end{macrocode}
+%\end{macro}
+%
+% At the end of the document, the files should be created if
+% \pkgopt[true]{savewrites}.
+% \begin{macrocode}
+\AtEndDocument{%
+ \glswritefiles
+}
+% \end{macrocode}
+%\begin{macro}{\@glswritefiles}
+% Only write the files if \pkgopt[true]{savewrites}.
+%\changes{3.14a}{2013-11-12}{renamed \cs{glswritefiles} to
+%\cs{@glswritefiles} and used ``savewrites'' option to set
+%\cs{glswritefiles}}
+% \begin{macrocode}
+\newcommand*{\@glswritefiles}{%
+% \end{macrocode}
+% Iterate through all the glossaries.
+%\changes{3.01}{2011-04-12}{added check for empty glossaries}
+%\changes{3.02}{2012-05-21}{added check for existence of token
+% in case \cs{makeglossaries has been omitted}}
+% \begin{macrocode}
+ \forallglossaries{\@glo@type}{%
+% \end{macrocode}
+% Check for empty glossaries (patch provided by Patrick H\"acker)
+% \begin{macrocode}
+ \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
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% As from v4.10, the \cs{glossary} command isn't
+% used by the \styfmt{glossaries} package. Since the
+% user isn't expected to use this command (as \styfmt{glossaries}
+% takes care of the particular format required for
+% \gls{makeindex}\slash\gls{xindy}) there's no need for a user level
+% command. Using a custom internal command prevents any conflict
+% with other packages (and with the \cs{mark} mechanism).
+%
+% The associated number should be stored in \cs{theglsentrycounter}
+% before using \cs{gls@glossary}.
+%\begin{macro}{\gls@glossary}
+% \begin{macrocode}
+\newcommand*{\gls@glossary}[1]{%
+ \@gls@glossary{#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@glossary}
+%\begin{definition}
+%\cs{@gls@glossary}\marg{type}\marg{indexing info}
+%\end{definition}
+% (In v4.10, \cs{@glossary} was redefined to \cs{@gls@glossary} to
+% avoid conflict with other packages.)
+% Initially define internal \cs{@gls@glossary} to ignore its argument.
+% Indexing will be enabled when \cs{@gls@glossary} is redefined by
+% \cs{@makeglossary}.
+%
+% This command was originally
+% defined to do \cs{@index}\marg{indexing info} so that it behaved
+% much like \cs{index}. The definition was then changed to
+% use \cs{index} as \cls{memoir} changes the definition of
+% \cs{@index}. (Thanks to Dan Luecking for pointing this out.)
+%\changes{1.17}{2008-12-26}{changed definition to use
+%\cs{index} instead of \cs{@index}}
+%\changes{4.10}{2014-08-27}{Renamed \cs{@glossary} to \cs{@gls@glossary}}
+%\changes{4.24}{2016-05-27}{added check for debug mode}
+%
+%However, if normal indexing is enabled (for example with \cs{makeindex}) but no
+%glossary lists are required (so \cs{@makeglossary} isn't used),
+%then \cs{index} will cause a problem here.
+%The \cs{@index} trick allows for special characters within
+%\meta{indexing info} (so you can do, for example, \verb|\index{%@\%}|),
+%and the original design of \cs{@glossary} here
+%was actually a legacy from the old \styfmt{glossary} package. With
+%the \styfmt{glossaries} package, the indexing information supplied in
+%the second argument is more constrained and just consists of the sort
+%value (given by the \gloskey{sort} key), the actual value
+%(given by \cs{glossentry}\marg{label} or
+%\cs{subglossentry}\marg{level}\marg{label}), and the format. This means that
+%there's no need to worry about special characters appearing in the
+%second argument as they can't be in the label or sort value. (If
+%they are in the sort value then the category code would've needed
+%to be changed when the entry was defined or \cs{glspercentchar}
+%would be needed with the sort sanitization switched off.)
+%This means that it's safe to simply ignore the second argument.
+%\changes{4.36}{2018-03-07}{removed \cs{index}}
+% \begin{macrocode}
+\newcommand*{\@gls@glossary}[2]{%
+ \if@gls@debug
+ \PackageInfo{glossaries}{wrglossary(#1)(#2)}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+% This is a convenience command to set \cs{@gls@glossary}.
+% It's used by \cs{@makeglossary} and then redefined to
+% do nothing, as it only needs to be done once.
+%\begin{macro}{\@gls@renewglossary}
+% \begin{macrocode}
+\newcommand{\@gls@renewglossary}{%
+ \gdef\@gls@glossary##1{\@bsphack\begingroup\gls@wrglossary{##1}}%
+ \let\@gls@renewglossary\@empty
+}
+% \end{macrocode}
+%\end{macro}
+% The \cs{gls@wrglossary} command is defined to have
+% two arguments. The first argument is the glossary type,
+% the second argument is the glossary entry
+% (the format of which is set in \cs{glslink}).
+%\begin{macro}{\gls@wrglossary}
+%\changes{1.17}{2008-12-26}{modified to allow for xindy support}
+%\changes{3.0}{2010-07-12}{modified to take into account
+%\pkgopt{savewrites}}
+%\changes{4.11}{2014-09-01}{renamed from \cs{@wrglossary} to
+%\cs{gls@wrglossary}}
+% \begin{macrocode}
+\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
+% \end{macrocode}
+%\changes{3.02}{2012-05-21}{added check for glossary file defined}%
+% \begin{macrocode}
+ \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
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@do@wrglossary}
+%\changes{3.02}{2012-05-21}{changed \cs{@do@wr@glossary} to test for
+%\pkgopt{indexonlyfirst} option; put old \cs{@do@wr@glossary} code
+%into \cs{@@do@wrglossary}}
+% \begin{macrocode}
+\newcommand*{\@do@wrglossary}[1]{%
+ \glswriteentry{#1}{\@@do@wrglossary{#1}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glswriteentry}
+%\changes{4.16}{2015-07-08}{new}
+% Provide a user level command so the user can customize whether or
+% not a line should be added to the glossary. The arguments are the
+% label and the code that writes to the glossary file.
+% \begin{macrocode}
+\newcommand*{\glswriteentry}[2]{%
+ \ifglsindexonlyfirst
+ \ifglsused{#1}{}{#2}%
+ \else
+ #2%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\gls@protected@pagefmts}
+%\changes{3.04}{2012-11-18}{new}
+%\changes{3.05}{2013-04-21}{added Roman to list}
+% List of page formats to be protected against expansion.
+%\changes{4.22}{2016-04-19}{added arabic to list}
+% \begin{macrocode}
+\newcommand{\gls@protected@pagefmts}{\gls@numberpage,\gls@alphpage,%
+ \gls@Alphpage,\gls@romanpage,\gls@Romanpage,\gls@arabicpage}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\gls@disablepagerefexpansion}
+%\changes{3.04}{2012-11-18}{new}
+% \begin{macrocode}
+\newcommand*{\gls@disablepagerefexpansion}{%
+ \@for\@gls@this:=\gls@protected@pagefmts\do
+ {%
+ \expandafter\let\@gls@this\relax
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\gls@alphpage}
+%\changes{3.04}{2012-11-18}{new}
+% \begin{macrocode}
+\newcommand*{\gls@alphpage}{\@alph\c@page}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\gls@Alphpage}
+%\changes{3.04}{2012-11-18}{new}
+% \begin{macrocode}
+\newcommand*{\gls@Alphpage}{\@Alph\c@page}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\gls@numberpage}
+%\changes{3.04}{2012-11-18}{new}
+% \begin{macrocode}
+\newcommand*{\gls@numberpage}{\number\c@page}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\gls@arabicpage}
+%\changes{4.22}{2016-04-19}{new}
+% \begin{macrocode}
+\newcommand*{\gls@arabicpage}{\@arabic\c@page}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\gls@romanpage}
+%\changes{3.04}{2012-11-18}{new}
+% \begin{macrocode}
+\newcommand*{\gls@romanpage}{\romannumeral\c@page}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\gls@Romanpage}
+%\changes{3.05}{2013-04-21}{new}
+% \begin{macrocode}
+\newcommand*{\gls@Romanpage}{\@Roman\c@page}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsaddprotectedpagefmt}
+%\begin{definition}
+%\cs{glsaddprotectedpagefmt}\marg{cs name}
+%\end{definition}
+% Added a page format to the list of protected page formats.
+% The argument should be the name (without a backslash) of the
+% 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}
+% \begin{macrocode}
+\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}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@wrglossarynumberhook}
+% Hook used by \cs{@@do@wrglossary}
+% \begin{macrocode}
+\newcommand*\@wrglossarynumberhook{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@wrglossary@pageformat}
+% \begin{macrocode}
+\newcommand{\@wrglossary@pageformat}[3]{%
+ \ifx#3\c@page #1\else #2#3\fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@@do@wrglossary}
+%\changes{4.33}{2017-09-20}{changed to check for \pkgopt{esclocations}}
+% Write the glossary entry in the appropriate format.
+% \begin{macrocode}
+\newcommand*{\@@do@wrglossary}[1]{%
+ \ifglsesclocations
+ \@@do@esc@wrglossary{#1}%
+ \else
+ \@@do@noesc@wrglossary{#1}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@@do@noesc@wrglossary}
+%\changes{4.33}{2017-09-20}{new}
+% Write the glossary entry in the appropriate format.
+% The locations don't need to be pre-processed before writing the
+% information to the glossary file, but the prefix still needs to be
+% found.
+% \begin{macrocode}
+\newcommand*{\@@do@noesc@wrglossary}[1]{%
+% \end{macrocode}
+% Don't fully expand yet.
+% \begin{macrocode}
+ \expandafter\def\expandafter\@glslocref\expandafter{\theglsentrycounter}%
+ \expandafter\def\expandafter\@glsHlocref\expandafter{\theHglsentrycounter}%
+% \end{macrocode}
+% Find the prefix if \cs{@glsHlocref} and \cs{@glslocref} aren't the same.
+% \begin{macrocode}
+ \ifx\@glsHlocref\@glslocref
+ \def\@glo@counterprefix{}%
+ \else
+% \end{macrocode}
+% The value of the counter isn't important here as it's the prefix
+% that's of interest. (\cs{c@page} will have the same value in
+% both \cs{theglsentrycounter} and \cs{theHglsentrycounter} at this
+% point, even if it hasn't been updated yet. The page number is not
+% expected to occur in the prefix.)
+% \begin{macrocode}
+ \protected@edef\@do@gls@getcounterprefix{\noexpand\@gls@getcounterprefix
+ {\@glslocref}{\@glsHlocref}%
+ }%
+ \@do@gls@getcounterprefix
+ \fi
+% \end{macrocode}
+% De-tok label if required.
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+ \edef\@gls@label{\glsdetoklabel{#1}}%
+% \end{macrocode}
+% Write the information to file:
+% \begin{macrocode}
+ \@@do@@wrglossary
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ifglswrallowprimitivemods}
+%\changes{4.22}{2016-04-19}{new}
+% Conditional to determine whether or not \cs{@@do@esc@wrglossary}
+% should be allowed to temporarily redefine \cs{the} and
+% \cs{number}.
+% \begin{macrocode}
+\newif\ifglswrallowprimitivemods
+\glswrallowprimitivemodstrue
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@@do@esc@wrglossary}
+%\changes{4.33}{2017-09-20}{renamed from \cs{@@do@esc@wrglossary}}
+%\changes{1.17}{2008-12-26}{new}
+% Write the glossary entry in the appropriate format.
+% (Need to set \cs{@glsnumberformat} and \cs{@gls@counter} prior to use.)
+% The argument is the entry's label.
+%\changes{3.0}{2011-04-02}{modified to use new format}
+%This is far more complicated with \app{xindy} than with other
+%indexing methods. There are two necessary but
+%conflicting requirements with \app{xindy}:
+%\begin{enumerate}
+%\item all backslashes in the location must be escaped;
+%\item \cs{c@page} can't be prematurely expanded.
+%\end{enumerate}
+% (With \app{makeindex} there's the remote possibility that the page
+% compositor is a \app{makeindex} special character, so that would
+% also need to be escaped.)
+%
+%For example, suppose \cs{thepage} is defined as
+%\begin{verbatim}
+%\renewcommand{\thepage}{\tally{page}}
+%\newcommand{\tally}[1]{\tallynum{\expandafter\the\csname c@#1\endcsname}}
+%\end{verbatim}
+%where \cs{tallynum} is a robust command that takes a number as its
+%argument. With all indexing methods other than \app{xindy}, a
+%deferred write with \cs{thepage} as the location will expand to
+%\cs{tallynum}\marg{n} where \meta{n} is the page number. Since the
+%write is deferred, the page number is correct. (\app{makeindex}
+%won't accept this location format, but \cs{makenoidxglossaries}
+%and \app{bib2gls} are quite happy with it.) Unfortunately, this
+%fails with \app{xindy} because \app{xindy} interprets this location
+%as \texttt{tallynum}\marg{n} because \cs{t} represents a
+%the character \qt{t}. The location must be written as
+%\verb|\\tallynum|\marg{n}.
+%
+%This means that the location
+%\verb|\tally{page}| must be expanded and then the backslashes must
+%be doubled. Unfortunately \cs{c@page} mustn't be expanded until the
+%deferred write is performed, so the location actually needs to be
+%expanded to \verb|\tallynum{\the\c@page}| but the backslashes in
+%\verb|\the\c@page| mustn't be escaped. All other backslashes must be
+%escaped. (In this case, only the backslash in \cs{tallynum} but the
+%location format may include other control sequences.) The code
+%below works on the assumption that commands like \cs{tally} are
+%defined in the form
+%\begin{verbatim}
+%\newcommand{\tally}[1]{\tallynum{\expandafter\the\csname c@#1\endcsname}}
+%\end{verbatim}
+%(note the use of \cs{expandafter} and \cs{name})
+%or in the form
+%\begin{verbatim}
+%\newcommand{\tally}[1]{\tallynum{\arabic{#1}}}
+%\end{verbatim}
+%In the second case, \cs{arabic} is one of the known commands that's
+%temporarily adjusted to prevent \cs{c@page} from being prematurely
+%expanded. In the first case, \cs{the} is temporarily modified
+%(unless \cs{glswrallowprimitivemodsfalse}) to
+%check if it's followed by \cs{c@page}. The \cs{expandafter} ensures
+%that it is. If \cs{tally} is defined in another way that hides
+%\cs{c@page} for example using \verb|\the\value{#1}| then the
+%process fails.
+%
+%With \app{makeindex}, \cs{tallynum} needs to expand to just the
+%decimal number while writing the location to the glossary file,
+%otherwise \app{makeindex} will reject it. This can
+%be done by defining \cs{glstallypage} so that \cs{tally} can
+%locally be set to \cs{arabic} while expansion is occurring. Again, \cs{c@page}
+%must be protected from expansion until the deferred write occurs.
+%
+%The expansion before the write occurs also allows the hyper prefix
+%to be determined where \cs{theH}\meta{counter} is defined in the
+%form \meta{prefix}\verb|.|\cs{the}\meta{counter}. It's possible (although
+%again unlikely) that a \app{makeindex} character might occur in the
+%prefix, which therefore needs escaping. The prefix is passed as the
+%optional argument of \cs{setentrycounter} which is needed by commands like
+%\cs{glshypernumber} to create a hyperlink for a given counter (like
+%\cs{hyperpage} but for an arbitrary counter).
+%
+% \begin{macrocode}
+\newcommand*{\@@do@esc@wrglossary}[1]{% please read documented code!
+ \begingroup
+% \end{macrocode}
+% First a bit of hackery to prevent premature
+% expansion of \cs{c@page}. Store original definitions (scoped):
+%\changes{3.04}{2012-11-18}{modified to compensate for possible
+%incorrect page number}
+%\changes{4.22}{2016-04-19}{added check for \cs{@arabic}}
+% \begin{macrocode}
+ \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
+% \end{macrocode}
+% Redefine:
+%\changes{3.05}{2013-04-21}{add Roman case. Fixed bugs in the else statements}
+%\changes{4.22}{2016-04-19}{added test to allow temporary primitive
+%modifications and added arabic case}
+% \begin{macrocode}
+ \ifglswrallowprimitivemods
+% \end{macrocode}
+%The redefinition of \cs{the} to use \cs{expandafter} solves the
+%problem of \verb|\the\csname c@|\meta{counter}\verb|\endcsname| but
+%is only a partial solution to the problem of \verb|\the\value|.
+%With \cs{value}, \cs{c@page} is too deeply hidden and will be
+%expanded too soon, but at least there won't be an error.
+%\changes{4.33}{2017-09-20}{added \cs{gls@the} and \cs{gls@number}}
+% \begin{macrocode}
+ \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}%
+% \end{macrocode}
+% Add hook to allow for other number formats:
+%\changes{4.11}{2014-09-01}{added hook}
+% \begin{macrocode}
+ \@wrglossarynumberhook
+% \end{macrocode}
+% Prevent expansion:
+% \begin{macrocode}
+ \gls@disablepagerefexpansion
+% \end{macrocode}
+% Now store location in \cs{@glslocref}:
+% \begin{macrocode}
+ \protected@xdef\@glslocref{\theglsentrycounter}%
+ \endgroup
+% \end{macrocode}
+% Escape any special characters. It's possible that with
+% \app{makeindex} the separator might be a \app{makeindex} special character.
+% Although not likely, it still needs to be taken into account.
+% \begin{macrocode}
+ \@gls@checkmkidxchars\@glslocref
+% \end{macrocode}
+% Check if the hyper-location is the same as the location and set
+% the hyper prefix.
+%\changes{3.0}{2011-04-02}{added check for hyper location prefix}
+% \begin{macrocode}
+ \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
+% \end{macrocode}
+% De-tok label if required
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+ \edef\@gls@label{\glsdetoklabel{#1}}%
+% \end{macrocode}
+% Write the information to file:
+% \begin{macrocode}
+ \@@do@@wrglossary
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@@do@@wrglossary}
+% \begin{macrocode}
+\newcommand*{\@@do@@wrglossary}{%
+% \end{macrocode}
+% Determine whether to use \app{xindy} or \app{makeindex}
+% syntax
+% \begin{macrocode}
+ \ifglsxindy
+% \end{macrocode}
+% Need to determine if the formatting information starts with
+% a ( or ) indicating a range.
+% \begin{macrocode}
+ \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
+% \end{macrocode}
+% Write to the glossary file using \app{xindy} syntax.
+% \begin{macrocode}
+ \gls@glossary{\csname glo@\@gls@label @type\endcsname}{%
+ (indexentry :tkey (\csname glo@\@gls@label @index\endcsname)
+% \end{macrocode}
+%\changes{3.02}{2012-05-21}{changed \cs{@glslocref} to \cs{theglsentrycounter}}
+%\changes{3.04}{2012-11-18}{changed \cs{theglsentrycounter} back to \cs{@glslocref}}
+% \begin{macrocode}
+ :locref \string"{\@glo@counterprefix}{\@glslocref}\string" %
+ :attr \string"\@gls@counter\@glo@suffix\string"
+ \@glo@range
+ )
+ }%
+ \else
+% \end{macrocode}
+% Convert the format information into the format required for
+% \app{makeindex}
+% \begin{macrocode}
+ \@set@glo@numformat{\@glo@numfmt}{\@gls@counter}{\@glsnumberformat}%
+ {\@glo@counterprefix}%
+% \end{macrocode}
+% Write to the glossary file using \app{makeindex} syntax.
+% \begin{macrocode}
+ \gls@glossary{\csname glo@\@gls@label @type\endcsname}{%
+ \string\glossaryentry{\csname glo@\@gls@label @index\endcsname
+ \@gls@encapchar\@glo@numfmt}{\@glslocref}}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@getcounterprefix}
+% Get the prefix that needs to be prepended to counter in order to
+% get the hyper counter. (For example, with the standard
+% \cls{article} class and \sty{hyperref}, \ics{theequation} needs to
+% be prefixed with \meta{section num}|.| to get the equivalent
+% \ics{theHequation}.) NB this assumes that the prefix ends with a
+% dot, which is the standard. (Otherwise it makes the xindy location
+% classes more complicated.)
+% \begin{macrocode}
+\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
+% \end{macrocode}
+% Warn if no prefix can be formed.
+%\changes{4.04}{2014-03-04}{added warning if no prefix can be formed}
+% \begin{macrocode}
+ \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
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\section{Glossary Entry Cross-References}
+%\begin{macro}{\@do@seeglossary}
+%\changes{1.17}{2008-12-26}{new}
+% Write the glossary entry with a cross reference.
+% The first argument is the entry's label, the second must be in
+% the form \oarg{tag}\marg{list}, where \meta{tag} is a tag
+% such as ``see'' and \meta{list} is a list of labels.
+%\changes{3.0}{2011-04-02}{Sanitize and escape cross-referencing
+%information}
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@fixbraces}
+% If no optional argument is specified, list needs to be enclosed
+% in a set of braces.
+% \begin{macrocode}
+\def\@gls@fixbraces#1#2#3\@nil{%
+ \ifx#2[\relax
+ \@@gls@fixbraces#1#2#3\@end@fixbraces
+ \else
+ \def#1{{#2#3}}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@@gls@fixbraces}
+% \begin{macrocode}
+\def\@@gls@fixbraces#1[#2]#3\@end@fixbraces{%
+ \def#1{[#2]{#3}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glssee}
+%\cs{glssee}\marg{label}\marg{cross-ref list}
+%\changes{1.17}{2008-12-26}{new}
+%\changes{3.08a}{2013-09-28}{made robust}
+% \begin{macrocode}
+\DeclareRobustCommand*{\glssee}[3][\seename]{%
+ \@do@seeglossary{#2}{[#1]{#3}}}
+\newcommand*{\@glssee}[3][\seename]{%
+ \glssee[#1]{#3}{#2}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsseeformat}
+%\changes{1.17}{2008-12-26}{new}
+%\changes{3.08a}{2013-09-28}{made robust}
+% The first argument specifies what tag to use (e.g.\ ``see''),
+% the second argument is a comma-separated list of labels.
+% The final argument (the location) is ignored.
+% \begin{macrocode}
+\DeclareRobustCommand*{\glsseeformat}[3][\seename]{%
+ \emph{#1} \glsseelist{#2}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsseelist}
+%\cs{glsseelist}\marg{list} formats list of entry labels.
+%\changes{3.08a}{2013-09-28}{made robust}
+% \begin{macrocode}
+\DeclareRobustCommand*{\glsseelist}[1]{%
+% \end{macrocode}
+% If there is only one item in the list, set the last separator
+% to do nothing.
+% \begin{macrocode}
+ \let\@gls@dolast\relax
+% \end{macrocode}
+% Don't display separator on the first iteration of the loop
+% \begin{macrocode}
+ \let\@gls@donext\relax
+% \end{macrocode}
+% Iterate through the labels
+% \begin{macrocode}
+ \@for\@gls@thislabel:=#1\do{%
+% \end{macrocode}
+% Check if on last iteration of loop
+% \begin{macrocode}
+ \ifx\@xfor@nextelement\@nnil
+ \@gls@dolast
+ \else
+ \@gls@donext
+ \fi
+% \end{macrocode}
+% Display the entry for this label.
+% (Expanding label as it's a temporary control sequence that's used
+% elsewhere.)
+%\changes{4.03}{2014-01-20}{added \cs{expandafter} commands}
+% \begin{macrocode}
+ \expandafter\glsseeitem\expandafter{\@gls@thislabel}%
+% \end{macrocode}
+% Update separators
+% \begin{macrocode}
+ \let\@gls@dolast\glsseelastsep
+ \let\@gls@donext\glsseesep
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsseelastsep}
+% Separator to use between penultimate and ultimate entries in a
+% cross-referencing list.
+% \begin{macrocode}
+\newcommand*{\glsseelastsep}{\space\andname\space}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsseesep}
+% Separator to use between entries in a cross-referencing list.
+% \begin{macrocode}
+\newcommand*{\glsseesep}{, }
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsseeitem}
+%\cs{glsseeitem}\marg{label} formats individual entry in a
+% cross-referencing list.
+%\changes{3.0}{2011-04-02}{hyperlink uses \cs{glsseeitemformat} instead
+%of \cs{glsentryname}}
+%\changes{3.08a}{2013-09-28}{made robust}
+% \begin{macrocode}
+\DeclareRobustCommand*{\glsseeitem}[1]{\glshyperlink[\glsseeitemformat{#1}]{#1}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsseeitemformat}
+%\changes{3.0}{2011-04-02}{new}
+% As from v3.0, default is to use \ics{glsentrytext} instead of
+% \ics{glsentryname}. (To avoid problems with the \gloskey{name} key being
+% sanitized, although this is no longer a problem now.)
+% \begin{macrocode}
+\newcommand*{\glsseeitemformat}[1]{\glsentrytext{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+% \section{Displaying the glossary}\label{sec:code:printglos}
+% An individual glossary is displayed in the text using
+% \cs{printglossary}\oarg{key-val list}. If the
+% \gloskey[printglossary]{type} key is omitted, the default glossary is displayed.
+% The optional argument can be used to specify an alternative
+% glossary, and can also be used to set the style, title and
+% entry in the table of contents. Available keys are defined below.
+%
+%\begin{macro}{\gls@save@numberlist}
+%\changes{3.02}{2012-05-21}{new}
+% Provide command to store number list.
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\warn@noprintglossary}
+% Warn the user if they have forgotten \ics{printglossaries}
+% or \ics{printglossary}. (Will be suppressed if there is at
+% least one occurrence of \ics{printglossary}. There is no check
+% to ensure that there is a \ics{printglossary} for each defined
+% glossary.)
+%\changes{4.04}{2014-03-06}{Activate warning in \cs{makeglossaries}}
+% \begin{macrocode}
+\newcommand*{\warn@noprintglossary}{}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\printglossary}
+%\changes{1.17}{2008-12-26}{added print language to aux file}
+%\changes{1.15}{2008-08-15}{changed the way the TOC title is set}
+%\changes{1.17}{2008-12-26}{added check to determine if
+%\cs{printglossary} is already
+% defined}
+% The TOC title needs to be processed in a different manner
+% to the main title in case the \sty{translator} and \sty{hyperref} packages
+% are both being used.
+%\changes{3.0}{2011-04-02}{replaced \cs{@ifundefined} with
+%\cs{ifcsundef}}
+% \begin{macrocode}
+\ifcsundef{printglossary}{}%
+{%
+% \end{macrocode}
+% If \cs{printglossary} is already defined, issue a warning
+% and undefine it.
+% \begin{macrocode}
+ \@gls@warnonglossdefined
+ \undef\printglossary
+}
+% \end{macrocode}
+% \cs{printglossary} has an optional argument. The default
+% value is to set the glossary type to the main glossary.
+%\changes{4.04}{2014-03-06}{changed to use new \cs{@printglossary}}
+% \begin{macrocode}
+\newcommand*{\printglossary}[1][type=\glsdefaulttype]{%
+ \@printglossary{#1}{\@print@glossary}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% The \cs{printglossaries} command will do \cs{printglossary}
+% for each glossary type that has been defined. It is better
+% to use \cs{printglossaries} rather than individual
+% \cs{printglossary} commands to ensure that you don't forget
+% any new glossaries you may have created. It also makes it easier to
+% chop and change the value of the \pkgopt{acronym} package option.
+% However, if you want to list the glossaries in a different order,
+% or if you want to set the title or table of contents entry, or
+% if you want to use different glossary styles for each glossary, you
+% will need to use \cs{printglossary} explicitly for each
+% glossary type.
+%\begin{macro}{\printglossaries}
+% \begin{macrocode}
+\newcommand*{\printglossaries}{%
+ \forallglossaries{\@@glo@type}{\printglossary[type=\@@glo@type]}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\printnoidxglossary}
+%\changes{4.04}{2014-03-06}{new}
+% Provide an alternative to \cs{printglossary} that doesn't require
+% an external indexing application. Entries won't be sorted and the
+% location list will be empty.
+% \begin{macrocode}
+\newcommand*{\printnoidxglossary}[1][type=\glsdefaulttype]{%
+ \@printglossary{#1}{\@print@noidx@glossary}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\printnoidxglossaries}
+% Analogous to \cs{printglossaries}
+%\changes{4.04}{2014-03-06}{new}
+% \begin{macrocode}
+\newcommand*{\printnoidxglossaries}{%
+ \forallglossaries{\@@glo@type}{\printnoidxglossary[type=\@@glo@type]}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{\@printgloss@setsort}
+% Initialise to do nothing.
+%\changes{4.04}{2014-03-06}{new}
+% \begin{macrocode}
+\newcommand*{\@printgloss@setsort}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@preglossaryhook}
+%\changes{4.19}{2015-11-22}{new}
+% \begin{macrocode}
+\newcommand*{\@gls@preglossaryhook}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@printglossary}
+%\changes{4.04}{2014-03-06}{new}
+% Sets up the glossary for either \cs{printglossary} or
+% \cs{printnoidxglossary}. The first argument is the options list,
+% the second argument is the handler macro that
+% deals with the actual glossary.
+% \begin{macrocode}
+\newcommand{\@printglossary}[2]{%
+% \end{macrocode}
+% Set up defaults.
+% \begin{macrocode}
+ \def\@glo@type{\glsdefaulttype}%
+ \def\glossarytitle{\csname @glotype@\@glo@type @title\endcsname}%
+% \end{macrocode}
+%\changes{3.03}{2012/09/21}{allow title to override default toctitle}
+% \begin{macrocode}
+ \def\glossarytoctitle{\glossarytitle}%
+ \let\org@glossarytitle\glossarytitle
+% \end{macrocode}
+%\changes{4.21}{2016-01-24}{warn if no style has been set}
+% \begin{macrocode}
+ \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}}%
+% \end{macrocode}
+% Store current value of \ics{glossaryentrynumbers}. (This may
+% be changed via the optional argument)
+% \begin{macrocode}
+ \let\@org@glossaryentrynumbers\glossaryentrynumbers
+% \end{macrocode}
+% Localise the effects of the optional argument
+% \begin{macrocode}
+ \bgroup
+% \end{macrocode}
+% Activate or deactivate sort key:
+% \begin{macrocode}
+ \@printgloss@setsort
+% \end{macrocode}
+% Determine settings specified in the optional argument.
+% \begin{macrocode}
+ \setkeys{printgloss}{#1}%
+% \end{macrocode}
+% Does the glossary exist?
+% \begin{macrocode}
+ \ifglossaryexists{\@glo@type}%
+ {%
+% \end{macrocode}
+% If title has been set, but toctitle hasn't, make toctitle the same
+% as given title (rather than the title used when the glossary was
+% defined)
+%\changes{3.0}{2011-04-02}{make toctitle default to title}
+% \begin{macrocode}
+ \ifx\glossarytitle\org@glossarytitle
+ \else
+ \expandafter\let\csname @glotype@\@glo@type @title\endcsname
+ \glossarytitle
+ \fi
+% \end{macrocode}
+% Allow a high-level user command to indicate the current glossary
+%\changes{3.0}{2011-04-02}{added \cs{currentglossary}}
+% \begin{macrocode}
+ \let\currentglossary\@glo@type
+% \end{macrocode}
+%Enable individual number lists to be suppressed.
+% \begin{macrocode}
+ \let\org@glossaryentrynumbers\glossaryentrynumbers
+ \let\glsnonextpages\@glsnonextpages
+% \end{macrocode}
+% Enable individual number list to be activated:
+%\changes{3.0}{2011-04-02}{added \cs{glsnextpages}}
+% \begin{macrocode}
+ \let\glsnextpages\@glsnextpages
+% \end{macrocode}
+% Enable suppression of description terminators.
+% \begin{macrocode}
+ \let\nopostdesc\@nopostdesc
+% \end{macrocode}
+% Set up the entry for the TOC
+% \begin{macrocode}
+ \gls@dotoctitle
+% \end{macrocode}
+% Set the glossary style
+% \begin{macrocode}
+ \@glossarystyle
+% \end{macrocode}
+%\changes{3.02}{2012-05-21}{add a way to fetch current entry label}
+% Added a way to fetch the current entry label (v3.08 updated for
+% new \cs{glossentry} and \cs{subglossentry}, but this is now only
+% needed for backward compatibility):
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+ \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}%
+ }%
+% \end{macrocode}
+%\changes{4.19}{2015-11-22}{added \cs{@gls@preglossaryhook}}
+% \begin{macrocode}
+ \@gls@preglossaryhook
+% \end{macrocode}
+% Now do the handler macro that deals with the actual glossary:
+% \begin{macrocode}
+ #2%
+ }%
+ {\GlossariesWarning{Glossary `\@glo@type' doesn't exist}}%
+% \end{macrocode}
+% End the current scope
+% \begin{macrocode}
+ \egroup
+% \end{macrocode}
+% Reset \ics{glossaryentrynumbers}
+% \begin{macrocode}
+ \global\let\glossaryentrynumbers\@org@glossaryentrynumbers
+% \end{macrocode}
+% Suppress warning about no \ics{printglossary}
+%\changes{2.02}{2007-07-13}{suppressed warning globally rather than locally}
+% \begin{macrocode}
+ \global\let\warn@noprintglossary\relax
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@print@glossary}
+%\changes{4.04}{2014-03-06}{new}
+% Internal workings of \cs{printglossary} dealing with reading the
+% external file.
+% \begin{macrocode}
+\newcommand{\@print@glossary}{%
+% \end{macrocode}
+% Some macros may end up being expanded into internals in the
+% glossary, so need to make @ a letter. (Unlikely to be a problem
+% since v3.08a but kept for backward compatibility.)
+% \begin{macrocode}
+ \makeatletter
+% \end{macrocode}
+% Input the glossary file, if it exists.
+% \begin{macrocode}
+ \@input@{\jobname.\csname @glotype@\@glo@type @in\endcsname}%
+% \end{macrocode}
+% If the glossary file doesn't exist, do \cs{null}. (This ensures
+% that the page is shipped out and all write commands are done.)
+% This might produce an empty page, but at this point the document
+% isn't complete, so it shouldn't matter.
+% \begin{macrocode}
+ \IfFileExists{\jobname.\csname @glotype@\@glo@type @in\endcsname}%
+ {}%
+ {\null}%
+% \end{macrocode}
+% If \app{xindy} is being used, need to write the language
+% dependent information to the \filetype{.aux} file for
+% \app{makeglossaries}.
+%\changes{3.0}{2011-04-02}{replaced \cs{@ifundefined} with
+%\cs{ifcsundef}}
+%\changes{3.04}{2012-11-18}{Moved aux write to end of document to
+%prevent unwanted whatsit occurring here.}
+% \begin{macrocode}
+ \ifglsxindy
+ \ifcsundef{@xdy@\@glo@type @language}%
+ {%
+ \edef\@do@auxoutstuff{%
+ \noexpand\AtEndDocument{%
+% \end{macrocode}
+%\changes{3.10a}{2013-10-13}{Added providecommand code to aux file}
+% If the user removes the glossary package from their document,
+% ensure the next run doesn't throw a load of undefined control
+% sequence errors when the aux file is parsed.
+% \begin{macrocode}
+ \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{%
+% \end{macrocode}
+%\changes{3.10a}{2013-10-13}{Added providecommand code to aux file}
+% If the user removes the glossaries package from their document,
+% ensure the next run doesn't throw a load of undefined control
+% sequence errors when the aux file is parsed.
+% \begin{macrocode}
+ \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
+% \end{macrocode}
+% Activate warning if \cs{makeglossaries} hasn't been used.
+% \begin{macrocode}
+ \renewcommand*{\@warn@nomakeglossaries}{%
+ \GlossariesWarningNoLine{\string\makeglossaries\space
+ hasn't been used,^^Jthe glossaries will not be updated}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% The sort macros all have the syntax:
+%\begin{definition}
+%\cs{@glo@sortmacro@\meta{order}}\marg{type}
+%\end{definition}
+% where \meta{order} is the sort order as specified by the sort key
+% and \meta{type} is the glossary type. (The referenced entry list
+% is stored in \cs{@glsref@\meta{type}.} The actual sorting is done
+% by \cs{@glo@sortentries}\marg{handler}\marg{type}.
+%
+%\begin{macro}{\@glo@sortentries}
+%\changes{4.04}{2014-03-06}{new}
+% \begin{macrocode}
+\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{%
+% \end{macrocode}
+% Has this entry already been added?
+% \begin{macrocode}
+ \xifinlistcs{\@this@label}{@glsref@#2}%
+ {}%
+ {%
+ \listcsxadd{@glsref@#2}{\@this@label}%
+ }%
+ \ifcsdef{@glo@sortingchildren@\@this@label}%
+ {%
+ \@glo@addchildren{#2}{\@this@label}%
+ }%
+ {}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@glo@addchildren}
+%\changes{4.04}{2014-03-06}{new}
+%\begin{definition}
+%\cs{@glo@addchildren}\marg{type}\marg{parent}
+%\end{definition}
+% \begin{macrocode}
+\newcommand*{\@glo@addchildren}[2]{%
+% \end{macrocode}
+% Scope to allow nesting.
+% \begin{macrocode}
+ \bgroup
+ \letcs{\@glo@childlist}{@glo@sortingchildren@#2}%
+ \@for\@this@childlabel:=\@glo@childlist\do
+ {%
+% \end{macrocode}
+% Check this label hasn't already been added.
+% \begin{macrocode}
+ \xifinlistcs{\@this@childlabel}{@glsref@#1}%
+ {}%
+ {%
+ \listcsxadd{@glsref@#1}{\@this@childlabel}%
+ }%
+% \end{macrocode}
+% Does this child have children?
+% \begin{macrocode}
+ \ifcsdef{@glo@sortingchildren@\@this@childlabel}%
+ {%
+ \@glo@addchildren{#1}{\@this@childlabel}%
+ }%
+ {%
+ }%
+ }%
+ \egroup
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glo@do@sortentries}
+%\changes{4.04}{2014-03-06}{new}
+% \begin{macrocode}
+\newcommand*{\@glo@do@sortentries}[1]{%
+ \ifglshasparent{#1}%
+ {%
+% \end{macrocode}
+% This entry has a parent, so add it to the child list
+% \begin{macrocode}
+ \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}%
+% \end{macrocode}
+% Has the parent been added?
+% \begin{macrocode}
+ \xifinlistcs{\@glo@parent}{@glsref@\@glo@type}%
+ {%
+% \end{macrocode}
+% Yes, it has so do nothing.
+% \begin{macrocode}
+ }%
+ {%
+% \end{macrocode}
+% No, it hasn't so add it now.
+% \begin{macrocode}
+ \expandafter\@glo@do@sortentries\expandafter{\@glo@parent}%
+ }%
+ }%
+ {%
+ \@glo@sortedinsert{\@glo@sortinglist}{#1}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glo@sortedinsert}
+%\changes{4.04}{2014-03-06}{new}
+%\begin{definition}
+%\cs{@glo@sortedinsert}\marg{list}\marg{entry label}
+%\end{definition}
+% Insert into list.
+% \begin{macrocode}
+\newcommand*{\@glo@sortedinsert}[2]{%
+ \dtl@insertinto{#2}{#1}{\@glo@sortinghandler}%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+% The sort handlers need to be in the form required by
+% \sty{datatool}'s \cs{dtl@sortlist} macro. These must set the count
+% register \cs{dtl@sortresult} to either $-1$ (\#1 less than \#2), 0
+% (\#1 = \#2) or $+1$ (\#1 greater than \#2).
+%\begin{macro}{\@glo@sorthandler@word}
+%\changes{4.04}{2014-03-06}{new}
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glo@sorthandler@letter}
+%\changes{4.04}{2014-03-06}{new}
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glo@sorthandler@case}
+%\changes{4.04}{2014-03-06}{new}
+% Case-sensitive sort.
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glo@sorthandler@nocase}
+%\changes{4.04}{2014-03-06}{new}
+% Case-insensitive sort.
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glo@sortmacro@word}
+%\changes{4.04}{2014-03-06}{new}
+% Sort macro for `word'
+% \begin{macrocode}
+\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]}{}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glo@sortmacro@letter}
+%\changes{4.04}{2014-03-06}{new}
+% Sort macro for `letter'
+% \begin{macrocode}
+\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]}{}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glo@sortmacro@standard}
+%\changes{4.04}{2014-03-06}{new}
+% Sort macro for `standard'. (Use either `word' or `letter' order.)
+% \begin{macrocode}
+\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]}{}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glo@sortmacro@case}
+%\changes{4.04}{2014-03-06}{new}
+% Sort macro for `case'
+% \begin{macrocode}
+\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]}{}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glo@sortmacro@nocase}
+%\changes{4.04}{2014-03-06}{new}
+% Sort macro for `nocase'
+% \begin{macrocode}
+\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]}{}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glo@sortmacro@def}
+%\changes{4.04}{2014-03-06}{new}
+% Sort macro for `def'. The order of definition is given in
+% \cs{glolist@\meta{type}}.
+% \begin{macrocode}
+\newcommand*{\@glo@sortmacro@def}[1]{%
+ \def\@glo@sortinglist{}%
+ \forglsentries[#1]{\@gls@thislabel}%
+ {%
+ \xifinlistcs{\@gls@thislabel}{@glsref@#1}%
+ {%
+ \listeadd{\@glo@sortinglist}{\@gls@thislabel}%
+ }%
+ {%
+% \end{macrocode}
+% Hasn't been referenced.
+% \begin{macrocode}
+ }%
+ }%
+ \cslet{@glsref@#1}{\@glo@sortinglist}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glo@sortmacro@def@do}
+%\changes{4.04}{2014-03-06}{new}
+% This won't include parent entries that haven't been referenced.
+% \begin{macrocode}
+\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}%
+ }%
+ {}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glo@sortmacro@use}
+%\changes{4.04}{2014-03-06}{new}
+% Sort macro for `use'. (No sorting is required, as the entries are
+% already in order of use, so do nothing.)
+% \begin{macrocode}
+\newcommand*{\@glo@sortmacro@use}[1]{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@print@noidx@glossary}
+%\changes{4.04}{2014-03-06}{new}
+% Glossary handler for \cs{printnoidxglossary} which doesn't use an
+% indexing application. Since \cs{printnoidxglossary} may occur at
+% the start of the document, we can't just check if an entry has
+% been used. Instead, the first pass needs to write information to
+% the aux file every time an entry is referenced. This needs to be
+% read in on the second run and stored in a~list corresponding to
+% the appropriate glossary.
+% \begin{macrocode}
+\newcommand*{\@print@noidx@glossary}{%
+ \ifcsdef{@glsref@\@glo@type}%
+ {%
+% \end{macrocode}
+% Sort the entries:
+% \begin{macrocode}
+ \ifcsdef{@glo@sortmacro@\@glo@sorttype}%
+ {%
+ \csuse{@glo@sortmacro@\@glo@sorttype}{\@glo@type}%
+ }%
+ {%
+ \PackageError{glossaries}{Unknown sort handler `\@glo@sorttype'}{}%
+ }%
+% \end{macrocode}
+% Do the glossary heading and preamble
+% \begin{macrocode}
+ \glossarysection[\glossarytoctitle]{\glossarytitle}%
+ \glossarypreamble
+% \end{macrocode}
+% \changes{4.29}{2017-01-19}{moved definition of
+% \cs{@gls@currentlettergroup} outside of \envfmt{theglossary} environment}
+%The glossary style might use a tabular-like environment, which may
+%cause scoping problems when setting the current letter group.
+%The predefined tabular-like styles don't support letter group
+%headings, but there's nothing to stop the user from defining their
+%own custom style that might, so any redefinition of this command
+%within \env{theglossary} will have to be done globally.
+% \begin{macrocode}
+ \def\@gls@currentlettergroup{}%
+ \begin{theglossary}%
+ \glossaryheader
+ \glsresetentrylist
+% \end{macrocode}
+% Iterate through the entries.
+% \begin{macrocode}
+ \forlistcsloop{\@gls@noidx@do}{@glsref@\@glo@type}%
+% \end{macrocode}
+% Finally end the glossary and do the postamble:
+% \begin{macrocode}
+ \end{theglossary}%
+ \glossarypostamble
+ }%
+ {%
+ \@gls@noref@warn{\@glo@type}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glo@grabfirst}
+%\changes{4.04}{2014-03-06}{new}
+% \begin{macrocode}
+\def\glo@grabfirst#1#2\@nil{%
+ \def\@gls@firsttok{#1}%
+ \ifdefempty\@gls@firsttok
+ {%
+ \def\@glo@thislettergrp{0}%
+ }%
+ {%
+% \end{macrocode}
+% Sanitize it:
+% \begin{macrocode}
+ \@onelevel@sanitize\@gls@firsttok
+% \end{macrocode}
+% Fetch the first letter:
+% \begin{macrocode}
+ \expandafter\@glo@grabfirst\@gls@firsttok{}{}\@nil
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glo@grabfirst}
+%\changes{4.04}{2014-03-06}{new}
+% \begin{macrocode}
+\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
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@noidx@do}
+%\changes{4.04}{2014-03-06}{new}
+% Handler for list iteration used by \cs{@print@noidx@glossary}.
+% The argument is the entry label. This only allows one sublevel.
+% \begin{macrocode}
+\newcommand{\@gls@noidx@do}[1]{%
+% \end{macrocode}
+% Get this entry's location list
+%\changes{4.07}{2014-04-04}{added \cs{global} in case it's used in a
+%tabular-like style}
+% \begin{macrocode}
+ \global\letcs{\@gls@loclist}{glo@\glsdetoklabel{#1}@loclist}%
+% \end{macrocode}
+% Does this entry have a~parent?
+% \begin{macrocode}
+ \ifglshasparent{#1}%
+ {%
+% \end{macrocode}
+% Has a~parent.
+% \begin{macrocode}
+ \gls@level=\csuse{glo@\glsdetoklabel{#1}@level}\relax
+ \ifdefvoid{\@gls@loclist}
+ {%
+ \subglossentry{\gls@level}{#1}{}%
+ }%
+ {%
+ \subglossentry{\gls@level}{#1}%
+ {%
+ \glossaryentrynumbers{\glsnoidxloclist{\@gls@loclist}}%
+ }%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Doesn't have a parent
+% Get this entry's sort key
+% \begin{macrocode}
+ \letcs{\@gls@sort}{glo@\glsdetoklabel{#1}@sort}%
+% \end{macrocode}
+% Fetch the first letter:
+% \begin{macrocode}
+ \expandafter\glo@grabfirst\@gls@sort{}{}\@nil
+ \ifdefequal{\@glo@thislettergrp}{\@gls@currentlettergroup}%
+ {}%
+ {%
+% \end{macrocode}
+% Do the group header:
+% \begin{macrocode}
+ \ifdefempty{\@gls@currentlettergroup}{}%
+ {%
+% \end{macrocode}
+%\changes{4.30}{2017-06-11}{letter group assignment made
+%global}
+%The group skip may start a new scope, so make a global assignment.
+% \begin{macrocode}
+ \global\let\@glo@thislettergrp\@glo@thislettergrp
+ \glsgroupskip
+ }%
+ \glsgroupheading{\@glo@thislettergrp}%
+ }%
+% \end{macrocode}
+%\changes{4.29}{2017-01-19}{current letter group assignment made
+%global}
+% \begin{macrocode}
+ \global\let\@gls@currentlettergroup\@glo@thislettergrp
+% \end{macrocode}
+% Do this entry:
+% \begin{macrocode}
+ \ifdefvoid{\@gls@loclist}
+ {%
+ \glossentry{#1}{}%
+ }%
+ {%
+ \glossentry{#1}%
+ {%
+ \glossaryentrynumbers{\glsnoidxloclist{\@gls@loclist}}%
+ }%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsnoidxloclist}
+%\changes{4.04}{2014-03-06}{new}
+%\begin{definition}
+%\cs{glsnoidxloclist}\marg{list cs}
+%\end{definition}
+% Display location list.
+% \begin{macrocode}
+\newcommand*{\glsnoidxloclist}[1]{%
+ \def\@gls@noidxloclist@sep{}%
+ \def\@gls@noidxloclist@prev{}%
+ \forlistloop{\glsnoidxloclisthandler}{#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsnoidxloclisthandler}
+%\changes{4.04}{2014-03-06}{new}
+% Handler for location list iterator.
+% \begin{macrocode}
+\newcommand*{\glsnoidxloclisthandler}[1]{%
+ \ifdefstring{\@gls@noidxloclist@prev}{#1}%
+ {%
+% \end{macrocode}
+% Same as previous location so skip.
+% \begin{macrocode}
+ }%
+ {%
+ \@gls@noidxloclist@sep
+ #1%
+ \def\@gls@noidxloclist@sep{\delimN}%
+ \def\@gls@noidxloclist@prev{#1}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsnoidxdisplayloclisthandler}
+%\changes{4.04}{2014-03-06}{new}
+% Handler for location list iterator when used with
+% \ics{glsdisplaynumberlist}.
+% \begin{macrocode}
+\newcommand*{\glsnoidxdisplayloclisthandler}[1]{%
+ \ifdefstring{\@gls@noidxloclist@prev}{#1}%
+ {%
+% \end{macrocode}
+% Same as previous location so skip.
+% \begin{macrocode}
+ }%
+ {%
+ \@gls@noidxloclist@sep
+ \@gls@noidxloclist@prev
+ \def\@gls@noidxloclist@prev{#1}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsnoidxdisplayloc}
+%\changes{4.04}{2014-03-06}{new}
+%\begin{definition}
+%\cs{glsnoidxdisplayloc}\marg{prefix}\marg{counter}\marg{format}\marg{location}
+%\end{definition}
+% Display a location in the location list.
+% \begin{macrocode}
+\newcommand*\glsnoidxdisplayloc[4]{%
+ \setentrycounter[#1]{#2}%
+ \csuse{#3}{#4}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@reference}
+%\changes{4.04}{2014-03-06}{new}
+%\begin{definition}
+%\cs{@gls@reference}\marg{type}\marg{label}\marg{loc}
+%\end{definition}
+% Identifies that a reference has been used (for use in the aux file).
+% All entries must be defined in the preamble.
+% \begin{macrocode}
+\newcommand*{\@gls@reference}[3]{%
+% \end{macrocode}
+% Add to label list
+% \begin{macrocode}
+ \glsdoifexistsorwarn{#2}%
+ {%
+ \ifcsundef{@glsref@#1}{\csgdef{@glsref@#1}{}}{}%
+ \ifinlistcs{#2}{@glsref@#1}%
+ {}%
+ {\listcsgadd{@glsref@#1}{#2}}%
+% \end{macrocode}
+% Add to location list
+% \begin{macrocode}
+ \ifcsundef{glo@\glsdetoklabel{#2}@loclist}%
+ {\csgdef{glo@\glsdetoklabel{#2}@loclist}{}}%
+ {}%
+ \listcsgadd{glo@\glsdetoklabel{#2}@loclist}{#3}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% The keys that can be used in the optional argument to
+% \ics{printglossary} or \ics{printnoidxglossary} are as follows:
+% The \gloskey[printglossary]{type} key sets the glossary type.
+% \begin{macrocode}
+\define@key{printgloss}{type}{\def\@glo@type{#1}}
+% \end{macrocode}
+% The \gloskey[printglossary]{title} key sets the title used in the glossary section
+% header. This overrides the title used in \ics{newglossary}.
+%\changes{3.03}{2012/09/21}{allow title to set toctitle}
+% \begin{macrocode}
+\define@key{printgloss}{title}{%
+ \def\glossarytitle{#1}%
+ \let\gls@dotoctitle\relax
+}
+% \end{macrocode}
+% The \gloskey[printglossary]{toctitle} sets the text used for the relevant entry
+% in the table of contents.
+% \begin{macrocode}
+\define@key{printgloss}{toctitle}{%
+ \def\glossarytoctitle{#1}%
+ \let\gls@dotoctitle\relax
+}
+% \end{macrocode}
+% The \gloskey[printglossary]{style} key sets the glossary style (but only for
+% the given glossary).
+%\changes{3.0}{2011-04-02}{replaced \cs{@ifundefined} with
+%\cs{ifcsundef}}
+% \begin{macrocode}
+\define@key{printgloss}{style}{%
+ \ifcsundef{@glsstyle@#1}%
+ {%
+ \PackageError{glossaries}%
+ {Glossary style `#1' undefined}{}%
+ }%
+ {%
+ \def\@glossarystyle{\setglossentrycompatibility
+ \csname @glsstyle@#1\endcsname}%
+ }%
+}
+% \end{macrocode}
+% \changes{1.14}{2008-06-17}{added numberedsection key to
+% \cs{printglossary}}
+% The \gloskey[printglossary]{numberedsection} key determines if this
+% glossary should be in a numbered section.
+%\changes{4.41}{2018-07-23}{changed \cs{val} and \cs{nr} to
+%\cs{gls@numberedsection@val} and \cs{gls@numberedsection@nr}}
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%
+%\changes{3.08a}{2013-09-28}{added nogroupskip key to \cs{printglossary}}
+% The \gloskey[printglossary]{nogroupskip} key determines whether or
+% not there should be a vertical gap between glossary groups.
+% \begin{macrocode}
+\define@choicekey{printgloss}{nogroupskip}{true,false}[true]{%
+ \csuse{glsnogroupskip#1}%
+}
+% \end{macrocode}
+%
+%\changes{4.08}{2014-07-30}{added nopostdot option to
+%\texttt{printgloss} family}
+% The \gloskey[printglossary]{nopostdot} key has the same effect as
+% the package option of the same name.
+% \begin{macrocode}
+\define@choicekey{printgloss}{nopostdot}{true,false}[true]{%
+ \csuse{glsnopostdot#1}%
+}
+% \end{macrocode}
+%
+%\begin{macro}{\GlsEntryCounterLabelPrefix}
+%\changes{4.38}{2018-05-10}{new}
+%Make it easier to redefine the label prefix.
+% \begin{macrocode}
+\newcommand*{\GlsEntryCounterLabelPrefix}{glsentry-}
+% \end{macrocode}
+%\end{macro}
+%
+%The conditionals have been moved inside the appropriate commands to
+%make it easier for the user to redefine them in the preamble
+%and selectively switch the counter display on and off. Previously
+%the helper commands were redefined by the \gloskey{entrycounter}
+%option, which would counteract any earlier customisation.
+%
+%\changes{4.08}{2014-07-30}{added entrycounter option to
+%\texttt{printgloss} family}
+% The \gloskey[printglossary]{entrycounter} key is the same as the
+% package option but localised to the current glossary.
+% \begin{macrocode}
+\define@choicekey{printgloss}{entrycounter}{true,false}[true]{%
+ \csuse{glsentrycounter#1}%
+ \@gls@define@glossaryentrycounter
+}
+% \end{macrocode}
+%
+%\changes{4.08}{2014-07-30}{added subentrycounter option to
+%\texttt{printgloss} family}
+% The \gloskey[printglossary]{subentrycounter} key is the same as the
+% package option but localised to the current glossary.
+% Note that this doesn't affect the master/slave counter attributes,
+% which occurs if \pkgopt{subentrycounter} and \pkgopt{entrycounter}
+% package options are set to true.
+% \begin{macrocode}
+\define@choicekey{printgloss}{subentrycounter}{true,false}[true]{%
+ \csuse{glssubentrycounter#1}%
+ \@gls@define@glossarysubentrycounter
+}
+% \end{macrocode}
+%
+% \changes{1.14}{2008-06-17}{added nonumberlist key to
+% \cs{printglossary}}
+% The \gloskey[printglossary]{nonumberlist} key determines if this
+% glossary should have a number list.
+% \begin{macrocode}
+\define@boolkey{printgloss}[gls]{nonumberlist}[true]{%
+\ifglsnonumberlist
+ \def\glossaryentrynumbers##1{}%
+\else
+ \def\glossaryentrynumbers##1{##1}%
+\fi}
+% \end{macrocode}
+%
+%\changes{4.04}{2014-03-06}{added sort key to printgloss group}
+% The \gloskey[printnoidxglossary]{sort} key sets the glossary sort
+% handler (\cs{printnoidxglossary} only).
+% \begin{macrocode}
+\define@key{printgloss}{sort}{\@glo@assign@sortkey{#1}}
+% \end{macrocode}
+%
+%\begin{macro}{\@glo@no@assign@sortkey}
+% Issue error if used with \cs{printglossary}
+% \begin{macrocode}
+\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}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@@glo@assign@sortkey}
+% For use with \cs{printnoidxglossary}
+% \begin{macrocode}
+\newcommand*{\@@glo@assign@sortkey}[1]{%
+ \def\@glo@sorttype{#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{\@glsnonextpages}
+%\changes{1.17}{2008-12-26}{new}%
+% Suppresses the next number list only. Global assignments required
+% as it may not occur in the same level of grouping as the
+% next numberlist. (For example, if \cs{glsnonextpages} is place
+% in the entry's description and 3 column tabular style glossary
+% is used.) \cs{org@glossaryentrynumbers} needs to be set at
+% the start of each glossary, in the event that
+% \ics{glossaryentrynumber} is redefined.
+% \begin{macrocode}
+\newcommand*{\@glsnonextpages}{%
+ \gdef\glossaryentrynumbers##1{%
+ \glsresetentrylist
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@glsnextpages}
+%\changes{3.0}{2011-04-02}{new}%
+% Activate the next number list only. Global assignments required
+% as it may not occur in the same level of grouping as the
+% next numberlist. (For example, if \cs{glsnextpages} is place
+% in the entry's description and 3 column tabular style glossary
+% is used.) \cs{org@glossaryentrynumbers} needs to be set at
+% the start of each glossary, in the event that
+% \ics{glossaryentrynumber} is redefined.
+% \begin{macrocode}
+\newcommand*{\@glsnextpages}{%
+ \gdef\glossaryentrynumbers##1{%
+ ##1\glsresetentrylist}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsresetentrylist}
+% Resets \cs{glossaryentrynumbers}
+% \begin{macrocode}
+\newcommand*{\glsresetentrylist}{%
+ \global\let\glossaryentrynumbers\org@glossaryentrynumbers}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{\glsnonextpages}
+% Outside of \cs{printglossary} this does nothing.
+% \begin{macrocode}
+\newcommand*{\glsnonextpages}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsnextpages}
+% Outside of \cs{printglossary} this does nothing.
+% \begin{macrocode}
+\newcommand*{\glsnextpages}{}
+% \end{macrocode}
+%\end{macro}
+%
+%Process \pkgopt{entrycounter} and then \pkgopt{subentrycounter}
+%options (this ensures the sub-counter can pick up the main counter
+%as the master if required):
+% \begin{macrocode}
+\@gls@define@glossaryentrycounter
+\@gls@define@glossarysubentrycounter
+% \end{macrocode}
+%\begin{macro}{\glsresetsubentrycounter}
+%\changes{3.0}{2011-04-02}{new}
+% Resets the \ctr{glossarysubentry} counter.
+%\changes{4.38}{2018-05-10}{bug fix: move conditional inside command}
+% \begin{macrocode}
+\newcommand*{\glsresetsubentrycounter}{%
+ \ifglssubentrycounter
+ \setcounter{glossarysubentry}{0}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsresetsubentrycounter}
+%\changes{3.02}{2012-05-21}{new}
+%\changes{4.38}{2018-05-10}{bug fix: move conditional inside command}
+% Resets the \ctr{glossaryentry} counter.
+% \begin{macrocode}
+\newcommand*{\glsresetentrycounter}{%
+ \ifglsentrycounter
+ \setcounter{glossaryentry}{0}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsstepentry}
+%\changes{3.0}{2011-04-02}{new}
+% Advance the \ctr{glossaryentry} counter if in use. The argument is
+% the label associated with the entry.
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+%\changes{4.38}{2018-05-10}{bug fix: move conditional inside command}
+% \begin{macrocode}
+\newcommand*{\glsstepentry}[1]{%
+ \ifglsentrycounter
+ \refstepcounter{glossaryentry}%
+ \label{\GlsEntryCounterLabelPrefix\glsdetoklabel{#1}}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsstepsubentry}
+%\changes{3.0}{2011-04-02}{new}
+% Advance the \ctr{glossarysubentry} counter if in use. The argument is
+% the label associated with the subentry.
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+%\changes{4.38}{2018-05-10}{bug fix: move conditional inside command}
+% \begin{macrocode}
+\newcommand*{\glsstepsubentry}[1]{%
+ \ifglssubentrycounter
+ \edef\currentglssubentry{\glsdetoklabel{#1}}%
+ \refstepcounter{glossarysubentry}%
+ \label{\GlsEntryCounterLabelPrefix\currentglssubentry}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsrefentry}
+%\changes{3.0}{2011-04-02}{new}
+% Reference the entry or sub-entry counter if in use, otherwise just do
+% \ics{gls}.
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+%\changes{4.38}{2018-05-10}{bug fix: move conditional inside command}
+% \begin{macrocode}
+\newcommand*{\glsrefentry}[1]{%
+ \ifglsentrycounter
+ \ref{\GlsEntryCounterLabelPrefix\glsdetoklabel{#1}}%
+ \else
+ \ifglssubentrycounter
+ \ref{\GlsEntryCounterLabelPrefix\glsdetoklabel{#1}}%
+ \else
+ \gls{#1}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsentrycounterlabel}
+%\changes{3.0}{2011-04-02}{new}
+%\changes{4.38}{2018-05-10}{bug fix: move conditional inside command}
+% Defines how to display the \ctr{glossaryentry} counter.
+% \begin{macrocode}
+\newcommand*{\glsentrycounterlabel}{%
+ \ifglsentrycounter
+ \theglossaryentry.\space
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glssubentrycounterlabel}
+%\changes{3.0}{2011-04-02}{new}
+%\changes{4.38}{2018-05-10}{bug fix: move conditional inside command}
+% Defines how to display the \ctr{glossarysubentry} counter.
+% \begin{macrocode}
+\newcommand*{\glssubentrycounterlabel}{%
+ \ifglssubentrycounter
+ \theglossarysubentry)\space
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsentryitem}
+% Step and display \ctr{glossaryentry} counter, if appropriate.
+%\changes{3.0}{2011-04-02}{new}
+%\changes{4.38}{2018-05-10}{bug fix: move conditional inside command}
+% \begin{macrocode}
+\newcommand*{\glsentryitem}[1]{%
+ \ifglsentrycounter
+ \glsstepentry{#1}\glsentrycounterlabel
+ \else
+ \glsresetsubentrycounter
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glssubentryitem}
+% Step and display \ctr{glossarysubentry} counter, if appropriate.
+%\changes{3.0}{2011-04-02}{new}
+%\changes{4.38}{2018-05-10}{bug fix: move conditional inside command}
+% \begin{macrocode}
+\newcommand*{\glssubentryitem}[1]{%
+ \ifglssubentrycounter
+ \glsstepsubentry{#1}\glssubentrycounterlabel
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{environment}{theglossary}
+% If the \env{theglossary} environment has
+% already been defined, a warning will be issued.
+% This environment should be redefined by glossary styles.
+%\changes{3.0}{2011-04-02}{replaced \cs{@ifundefined} with
+%\cs{ifcsundef}}
+% \begin{macrocode}
+\ifcsundef{theglossary}%
+{%
+ \newenvironment{theglossary}{}{}%
+}%
+{%
+ \@gls@warnontheglossdefined
+ \renewenvironment{theglossary}{}{}%
+}
+% \end{macrocode}
+%\end{environment}
+%
+% The glossary header is given by \cs{glossaryheader}.
+% This forms part of the glossary style, and
+% must indicate what should appear immediately after the start of the
+% \env{theglossary} environment. (For example, if the glossary
+% uses a tabular-like environment, it may be used to set the
+% header row.) Note that if you don't want a header row, the glossary
+% style must redefine \cs{glossaryheader} to do nothing.
+%\begin{macro}{\glossaryheader}
+% \begin{macrocode}
+\newcommand*{\glossaryheader}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glstarget}
+%\changes{1.18}{2009-01-14}{new}
+%\begin{definition}
+%\cs{glstarget}\marg{label}\marg{name}
+%\end{definition}
+% Provide user interface to \cs{@glstarget} to make it easier to
+% modify the glossary style in the document.
+% \begin{macrocode}
+\newcommand*{\glstarget}[2]{\@glstarget{\glolinkprefix#1}{#2}}
+% \end{macrocode}
+%\end{macro}
+%
+% As from version 3.08, glossary information is now written to the
+% external files using \ics{glossentry} and \ics{subglossentry}
+% instead of \cs{glossaryentryfield} and \cs{glossarysubentryfield}.
+% The default definition provides backward compatibility for
+% glossary styles that use the old forms.
+%\begin{macro}{\compatibleglossentry}
+%\changes{3.08a}{2013-09-28}{new}
+%\begin{definition}
+% \cs{glossentry}\marg{label}\marg{page-list}
+%\end{definition}
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glossentryname}
+%\changes{3.08a}{2013-09-28}{new}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\glossentryname}[1]{%
+ \glsdoifexistsorwarn{#1}%
+ {%
+ \letcs{\glo@name}{glo@\glsdetoklabel{#1}@name}%
+ \expandafter\glsnamefont\expandafter{\glo@name}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Glossentryname}
+%\changes{3.08a}{2013-09-28}{new}
+% \begin{macrocode}
+\newcommand*{\Glossentryname}[1]{%
+ \glsdoifexistsorwarn{#1}%
+ {%
+ \glsnamefont{\Glsentryname{#1}}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glossentrydesc}
+%\changes{3.08a}{2013-09-28}{new}
+% \begin{macrocode}
+\newcommand*{\glossentrydesc}[1]{%
+ \glsdoifexistsorwarn{#1}%
+ {%
+ \glsentrydesc{#1}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Glossentrydesc}
+%\changes{3.08a}{2013-09-28}{new}
+% \begin{macrocode}
+\newcommand*{\Glossentrydesc}[1]{%
+ \glsdoifexistsorwarn{#1}%
+ {%
+ \Glsentrydesc{#1}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glossentrysymbol}
+%\changes{3.08a}{2013-09-28}{new}
+% \begin{macrocode}
+\newcommand*{\glossentrysymbol}[1]{%
+ \glsdoifexistsorwarn{#1}%
+ {%
+ \glsentrysymbol{#1}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Glossentrysymbol}
+%\changes{3.08a}{2013-09-28}{new}
+% \begin{macrocode}
+\newcommand*{\Glossentrysymbol}[1]{%
+ \glsdoifexistsorwarn{#1}%
+ {%
+ \Glsentrysymbol{#1}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{\compatiblesubglossentry}
+%\changes{3.08a}{2013-09-28}{new}
+%\begin{definition}
+% \cs{subglossentry}\marg{level}\marg{label}\marg{page-list}
+%\end{definition}
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\setglossentrycompatibility}
+%\changes{3.08a}{2013-09-28}{new}
+% \begin{macrocode}
+\newcommand*{\setglossentrycompatibility}{%
+ \let\glossentry\compatibleglossentry
+ \let\subglossentry\compatiblesubglossentry
+}
+\setglossentrycompatibility
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{\glossaryentryfield}
+%\begin{definition}
+% \cs{glossaryentryfield}\marg{label}\marg{name}\marg{description}\marg{symbol}\marg{page-list}
+%\end{definition}
+% This command formerly governed how each entry row should be formatted
+% in the glossary. Now deprecated.
+%\changes{3.08a}{2013-09-28}{deprecated}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glossarysubentryfield}
+%\begin{definition}
+% \cs{glossarysubentryfield}\marg{level}\marg{label}\marg{name}\marg{description}\marg{symbol}\marg{page-list}
+%\end{definition}
+% This command governs how each subentry should be formatted
+% in the glossary. Glossary styles need to redefine this command.
+% Most of the predefined styles ignore \meta{symbol}. The first
+% argument is a number indicating the level. (The level should
+% be greater than or equal to 1.)
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%\end{macro}
+%
+% Within each glossary, the entries form distinct groups
+% which are determined by the first character of the \gloskey{sort}
+% key. When using \app{makeindex}, there will be a maximum of 28 groups: symbols, numbers,
+% and the 26 alphabetical groups A, \ldots, Z\@. If you use
+% \app{xindy} the groups will depend on whatever alphabet
+% is used. This is determined by the language or custom
+% alphabets can be created in the \app{xindy} style file.
+% The command \cs{glsgroupskip}
+% specifies what to do between glossary groups. Glossary styles
+% must redefine this command. (Note that \cs{glsgroupskip}
+% only occurs between groups, not at the start or end of the
+% glossary.)
+%\begin{macro}{\glsgroupskip}
+% \begin{macrocode}
+\newcommand*{\glsgroupskip}{}
+% \end{macrocode}
+%\end{macro}
+%
+% Each of the 28 glossary groups described above is preceded by a
+% group heading.
+% This is formatted by the command \cs{glsgroupheading}
+% which takes one argument which is the \emph{label} assigned to that
+% group (not the title). The corresponding labels are: \texttt{glssymbols},
+% \texttt{glsnumbers}, \texttt{A}, \ldots, \texttt{Z}.
+% Glossary styles must redefined this command. (In between groups,
+% \cs{glsgroupheading} comes immediately after \cs{glsgroupskip}.)
+%\begin{macro}{\glsgroupheading}
+% \begin{macrocode}
+\newcommand*{\glsgroupheading}[1]{}
+% \end{macrocode}
+%\end{macro}
+% It is possible to ``trick'' \app{makeindex} into
+% treating entries as though they belong to the same group,
+% even if the terms don't start with the same letter, by
+% modifying the \gloskey{sort} key. For example, all entries
+% belonging to one
+% group could be defined so that the \gloskey{sort} key starts with an
+% "a", while entries belonging to another group could be defined
+% so that the \gloskey{sort} key starts with a "b", and so on. If
+% you want each group to have a heading, you would then need to
+% modify the translation control sequences \cs{glsgetgrouptitle}
+% and \cs{glsgetgrouplabel} so that the label is translated
+% into the required title (and vice-versa).
+%
+%\begin{definition}
+%\cs{glsgetgrouptitle}\marg{label}
+%\end{definition}
+% This command produces the title for the glossary group
+% whose label is given by \meta{label}. By default, the group
+% labelled \texttt{glssymbols} produces
+% \ics{glssymbolsgroupname}, the group labelled
+% \texttt{glsnumbers} produces \ics{glsnumbersgroupname}
+% and all the other groups simply produce their label.
+% As mentioned above, the group labels are: \texttt{glssymbols}, \texttt{glsnumbers},
+% \texttt{A}, \ldots, \texttt{Z}\@. If you want to redefine
+% the group titles, you will need to redefine this command.
+% Languages other than English may produce labels that are
+% non-expandable, so we need to check for that otherwise it will
+% create a \qt{missing \cs{endcsname} inserted} error.
+%\begin{macro}{\glsgetgrouptitle}
+%\changes{3.0}{2011-04-02}{replaced \cs{@ifundefined} with
+%\cs{ifcsundef}}
+%\changes{3.11a}{2013-10-15}{Added check in case non-Latin alphabet
+%in use}
+% \begin{macrocode}
+\newcommand*{\glsgetgrouptitle}[1]{%
+ \@gls@getgrouptitle{#1}{\@gls@grptitle}%
+ \@gls@grptitle
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@gls@getgrouptitle}
+% Gets the group title specified by the label (first argument) and
+% stores in the second argument, which must be a control sequence.
+% \begin{macrocode}
+\newcommand*{\@gls@getgrouptitle}[2]{%
+% \end{macrocode}
+% Even if the argument appears to be a single letter, it won't be
+% considered a single letter by \cs{dtl@ifsingle} if it's an active
+% character.
+% \begin{macrocode}
+ \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}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@gls@noidx@getgrouptitle}
+%\changes{4.04}{2014-03-06}{new}
+% Version for the no-indexing app option:
+% \begin{macrocode}
+\newcommand*{\@gls@noidx@getgrouptitle}[2]{%
+ \DTLifint{#1}%
+ {\edef#2{\char#1\relax}}%
+ {%
+ \ifcsundef{#1groupname}{\def#2{#1}}{\letcs#2{#1groupname}}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{definition}
+%\cs{glsgetgrouplabel}\marg{title}
+%\end{definition}
+%This command does the reverse to the previous command. The
+% argument is the group title, and it produces the group label.
+% Note that if you redefine \cs{glsgetgrouptitle}, you
+% will also need to redefine \cs{glsgetgrouplabel}.
+%\begin{macro}{\glsgetgrouplabel}
+%\changes{3.05}{2013-04-21}{fixed bug (typo in \cs{equal})}
+% \begin{macrocode}
+\newcommand*{\glsgetgrouplabel}[1]{%
+\ifthenelse{\equal{#1}{\glssymbolsgroupname}}{glssymbols}{%
+\ifthenelse{\equal{#1}{\glsnumbersgroupname}}{glsnumbers}{#1}}}
+% \end{macrocode}
+%\end{macro}
+%
+% The command \cs{setentrycounter} sets the entry's
+% associated counter (required by
+% \cs{glshypernumber} etc.) \ics{glslink} and
+% \ics{glsadd} encode the
+% \ics{glossary} argument so that the relevant counter is
+% set prior to the formatting command.
+%\begin{macro}{\setentrycounter}
+%\changes{3.0}{2011-04-02}{added optional argument}
+% \begin{macrocode}
+\newcommand*{\setentrycounter}[2][]{%
+ \def\@glo@counterprefix{#1}%
+ \ifx\@glo@counterprefix\@empty
+ \def\@glo@counterprefix{.}%
+ \else
+ \def\@glo@counterprefix{.#1.}%
+ \fi
+ \def\glsentrycounter{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% The current glossary style can be set using
+% \cs{setglossarystyle}\marg{style}.
+%\begin{macro}{\setglossarystyle}
+%\changes{3.08a}{2013-09-28}{new}
+% \begin{macrocode}
+\newcommand*{\setglossarystyle}[1]{%
+ \ifcsundef{@glsstyle@#1}%
+ {%
+ \PackageError{glossaries}{Glossary style `#1' undefined}{}%
+ }%
+ {%
+ \csname @glsstyle@#1\endcsname
+ }%
+% \end{macrocode}
+%\changes{4.21}{2016-01-24}{set default style if not already set}
+% Set the default style if it's not already set.
+% \begin{macrocode}
+ \ifx\@glossary@default@style\relax
+ \protected@edef\@glossary@default@style{#1}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glossarystyle}
+%\changes{3.0}{2011-04-02}{replaced \cs{@ifundefined} with
+%\cs{ifcsundef}}
+% \begin{macrocode}
+\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
+% \end{macrocode}
+%\changes{3.13a}{2013-11-05}{fixed bug caused by using \cs{ifdef} instead of
+%\cs{ifcsdef}}
+% \begin{macrocode}
+ \ifcsdef{@glscompstyle@#1}%
+ {\setglossentrycompatibility\csuse{@glscompstyle@#1}}%
+ {}%
+ }%
+% \end{macrocode}
+%\changes{4.21}{2016-01-24}{set default style if not already set}
+% Set the default style if it isn't already set so that
+% \cs{printglossary} can warn if the fallback style is in use.
+% \begin{macrocode}
+ \ifx\@glossary@default@style\relax
+ \protected@edef\@glossary@default@style{#1}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\newglossarystyle}
+% New glossary styles can be defined using:
+%\begin{definition}
+% \cs{newglossarystyle}\marg{name}\marg{definition}
+%\end{definition}
+% The \meta{definition} argument should redefine
+% \env{theglossary}, \ics{glossaryheader},
+% \ics{glsgroupheading}, \ics{glossaryentryfield} and
+% \ics{glsgroupskip} (see \autoref{sec:code:styles} for the
+% definitions of predefined styles). Glossary styles should not
+% redefine \ics{glossarypreamble} and
+% \ics{glossarypostamble}, as
+% the user should be able to switch between styles without affecting
+% the pre- and postambles.
+%\changes{1.17}{2008-12-26}{made \cs{newglossarystyle} long}
+%\changes{3.0}{2011-04-02}{replaced \cs{@ifundefined} with
+%\cs{ifcsundef}}
+% \begin{macrocode}
+\newcommand{\newglossarystyle}[2]{%
+ \ifcsundef{@glsstyle@#1}%
+ {%
+ \expandafter\def\csname @glsstyle@#1\endcsname{#2}%
+ }%
+ {%
+ \PackageError{glossaries}{Glossary style `#1' is already defined}{}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\renewglossarystyle}
+%\changes{3.02}{2012-05-21}{new}
+%Code for this macro supplied by Marco Daniel.
+% \begin{macrocode}
+\newcommand{\renewglossarystyle}[2]{%
+ \ifcsundef{@glsstyle@#1}%
+ {%
+ \PackageError{glossaries}{Glossary style `#1' isn't already defined}{}%
+ }%
+ {%
+ \csdef{@glsstyle@#1}{#2}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Glossary entries are encoded so that the second argument
+% to \ics{glossaryentryfield} is always specified as
+% \cs{glsnamefont}\marg{name}. This allows the
+% user to change the font used to display the name term
+% without having to redefine \ics{glossaryentryfield}.
+% The default uses the surrounding font, so in the list type
+% styles (which place the name in the optional argument to
+% \ics{item}) the name will appear in bold.
+%\begin{macro}{\glsnamefont}
+% \begin{macrocode}
+\newcommand*{\glsnamefont}[1]{#1}
+% \end{macrocode}
+%\end{macro}
+%
+% Each glossary entry has an associated number list (usually page
+% numbers) that indicate where in the document the entry has been
+% used. The format for these number lists can be changed using the
+% \gloskey[glslink]{format}\igloskey[glsadd]{format} key in commands like \ics{glslink}.
+% The default format is given by \cs{glshypernumber}. This takes
+% a single argument which may be a single number, a number range
+% or a number list. The number ranges are delimited with
+% \ics{delimR}, the number lists are delimited with
+% \ics{delimN}.
+%
+% If the document doesn't have hyperlinks, the numbers can be
+% displayed just as they are, but if the document supports
+% hyperlinks, the numbers should link to the relevant location.
+% This means extracting the individual numbers from the list or
+% ranges. The \isty{hyperref} package does this with the
+% \ics{hyperpage} command, but this is encoded for comma and
+% dash delimiters and only for the page counter, but this code needs
+% to be more general. So I have adapted the code used in the
+% \isty{hyperref} package.
+%\begin{macro}{\glshypernumber}
+%\changes{1.17}{2008-12-26}{modified to allow material
+% to be attached to location}
+%\changes{3.0}{2011-04-02}{replaced \cs{@ifundefined} with
+%\cs{ifcsundef}}
+% \begin{macrocode}
+\ifcsundef{hyperlink}%
+{%
+ \def\glshypernumber#1{#1}%
+}%
+{%
+ \def\glshypernumber#1{\@glshypernumber#1\nohyperpage{}\@nil}
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@glshypernumber}
+% This code was provided by Heiko~Oberdiek to allow material
+% to be attached to the location.
+%\changes{1.17}{2008-12-26}{new}
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+% \cs{@delimR} displays a range of numbers for the counter
+% whose name is given by
+% \cs{@gls@counter} (which must be set prior to using
+% \cs{glshypernumber}).
+%\begin{macro}{\@delimR}
+% \begin{macrocode}
+\def\@delimR#1\delimR #2\delimR #3\\{%
+\ifx\\#2\\%
+ \@delimN{#1}%
+\else
+ \@gls@numberlink{#1}\delimR\@gls@numberlink{#2}%
+\fi}
+% \end{macrocode}
+%\end{macro}
+% \cs{@delimN} displays a list of individual numbers,
+% instead of a range:
+%\begin{macro}{\@delimN}
+% \begin{macrocode}
+\def\@delimN#1{\@@delimN#1\delimN \delimN\\}
+\def\@@delimN#1\delimN #2\delimN#3\\{%
+\ifx\\#3\\%
+ \@gls@numberlink{#1}%
+\else
+ \@gls@numberlink{#1}\delimN\@gls@numberlink{#2}%
+\fi
+}
+% \end{macrocode}
+%\end{macro}
+% The following code is modified from hyperref's
+% \cs{HyInd@pagelink} where
+% the name of the counter being used is given by
+% \cs{@gls@counter}.
+% \begin{macrocode}
+\def\@gls@numberlink#1{%
+\begingroup
+ \toks@={}%
+ \@gls@removespaces#1 \@nil
+\endgroup}
+% \end{macrocode}
+% \begin{macrocode}
+\def\@gls@removespaces#1 #2\@nil{%
+ \toks@=\expandafter{\the\toks@#1}%
+ \ifx\\#2\\%
+ \edef\x{\the\toks@}%
+ \ifx\x\empty
+ \else
+% \end{macrocode}
+%\changes{3.0}{2011-04-02}{added prefix to hyperlink}
+% \begin{macrocode}
+ \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}
+% \end{macrocode}
+%
+% The following commands will switch to the
+% appropriate font, and create a hyperlink, if hyperlinks are
+% supported. If hyperlinks are not supported, they will just
+% display their argument in the appropriate font.
+%\begin{macro}{\hyperrm}
+% \begin{macrocode}
+\newcommand*{\hyperrm}[1]{\textrm{\glshypernumber{#1}}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\hypersf}
+% \begin{macrocode}
+\newcommand*{\hypersf}[1]{\textsf{\glshypernumber{#1}}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\hypertt}
+% \begin{macrocode}
+\newcommand*{\hypertt}[1]{\texttt{\glshypernumber{#1}}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\hyperbf}
+% \begin{macrocode}
+\newcommand*{\hyperbf}[1]{\textbf{\glshypernumber{#1}}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\hypermd}
+% \begin{macrocode}
+\newcommand*{\hypermd}[1]{\textmd{\glshypernumber{#1}}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\hyperit}
+% \begin{macrocode}
+\newcommand*{\hyperit}[1]{\textit{\glshypernumber{#1}}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\hypersl}
+% \begin{macrocode}
+\newcommand*{\hypersl}[1]{\textsl{\glshypernumber{#1}}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\hyperup}
+% \begin{macrocode}
+\newcommand*{\hyperup}[1]{\textup{\glshypernumber{#1}}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\hypersc}
+% \begin{macrocode}
+\newcommand*{\hypersc}[1]{\textsc{\glshypernumber{#1}}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\hyperemph}
+% \begin{macrocode}
+\newcommand*{\hyperemph}[1]{\emph{\glshypernumber{#1}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\section{Acronyms}\label{sec:code:acronym}
+%\begin{macro}{\oldacronym}
+%\begin{definition}
+%\cs{oldacronym}\oarg{label}\marg{abbrv}\marg{long}\marg{key-val list}
+%\end{definition}
+% This emulates the way the old \isty{glossary} package defined
+% acronyms. It is equivalent to \ics{newacronym}\oarg{key-val
+% list}\marg{label}\marg{abbrv}\marg{long} and it additionally
+% defines the command \cs{}\meta{label} which is equivalent to
+% \cs{gls}\marg{label} (thus \meta{label} must only contain
+% alphabetical characters). If \meta{label} is omitted, \meta{abbrv}
+% is used. This only emulates the syntax of the old \isty{glossary}
+% package. The way the acronyms appear in the list of acronyms is
+% determined by the definition of \ics{newacronym} and the
+% glossary style.
+%
+% Note that \cs{}\meta{label} can't have an optional
+% argument if the \isty{xspace} package is loaded. If
+% \isty{xspace} hasn't been loaded then you can do
+% \cs{}\meta{label}\oarg{insert} but you can't do
+% \cs{}\meta{label}\oarg{key-val list}. For example if you define the
+% acronym svm, then you can do "\svm['s]" but you can't do
+% "\svm[format=textbf]". If the \isty{xspace} package is loaded,
+% "\svm['s]" will appear as "svm ['s]" which is unlikely to be
+% the desired result. In this case, you will need to use
+% \cs{gls} explicitly, e.g.\ "\gls{svm}['s]". Note that it is
+% up to the user to load \isty{xspace} if desired.
+%\changes{1.18}{2009-01-14}{new}
+%\changes{3.0}{2011-04-02}{replaced \cs{@ifundefined} with
+%\cs{ifcsundef}}
+% \begin{macrocode}
+\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}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{definition}
+% \cs{newacronym}\oarg{key-val list}\marg{label}\marg{abbrev}\marg{long}
+%\end{definition}
+% This is a quick way of defining acronyms,
+% using \ics{newglossaryentry} with the appropriate
+% values. It sets the
+% glossary type to \ics{acronymtype} which will be
+% "acronym" if the package option \pkgopt{acronym} has
+% been used, otherwise it will be the default glossary.
+% Since \cs{newacronym} merely calls \ics{newglossaryentry},
+% the acronym is treated like any other glossary entry.
+%
+% If you prefer a different format, you
+% can redefine \cs{newacronym} as required. The optional
+% argument can be used to override any of the settings.
+%
+% This is just a stub. It's redefined by commands like
+% \cs{SetDefaultAcronymStyle}.
+%\begin{macro}{\newacronym}
+% \begin{macrocode}
+ \newcommand{\newacronym}[4][]{}
+% \end{macrocode}
+%\changes{1.13}{2008-05-10}{Removed restriction on only using
+% \cs{newacronym} in the preamble}
+%\end{macro}
+% Set up some convenient short cuts. These need to be changed if
+% \cs{newacronym} is changed (or if the \gloskey{description} key
+% is changed).
+%
+%\begin{macro}{\acrpluralsuffix}
+%\changes{1.13}{2008-05-10}{New}
+% Plural suffix used by \cs{newacronym}. This just defaults to
+% \cs{glspluralsuffix} but is changed to include \cs{textup}
+% if the smallcaps option is used, so that the suffix doesn't appear
+% in small caps as it doesn't look right. For example,
+% \textsc{abcs} looks as though the ``s'' is part of the acronym, but
+% \textsc{abc}s looks as though the ``s'' is a plural suffix. Since
+% the entire text \texttt{abcs} is set in \cs{textsc}, \cs{textup}
+% is need to cancel it out.
+% \begin{macrocode}
+\newcommand*{\acrpluralsuffix}{\glsacrpluralsuffix}
+% \end{macrocode}
+%\end{macro}
+% If \sty{garamondx} has been loaded, need to use \cs{textulc}
+% instead of \cs{textup}.
+%\begin{macro}{\glstextup}
+%\changes{3.09a}{2013-10-09}{new}
+% \begin{macrocode}
+\newrobustcmd*{\glstextup}[1]{\ifdef\textulc{\textulc{#1}}{\textup{#1}}}
+% \end{macrocode}
+%\end{macro}
+%
+% The following are defined for compatibility with version 2.07 and
+% earlier.
+%\begin{macro}{\glsshortkey}
+% \begin{macrocode}
+\newcommand*{\glsshortkey}{short}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsshortpluralkey}
+% \begin{macrocode}
+\newcommand*{\glsshortpluralkey}{shortplural}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glslongkey}
+% \begin{macrocode}
+\newcommand*{\glslongkey}{long}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glslongpluralkey}
+% \begin{macrocode}
+\newcommand*{\glslongpluralkey}{longplural}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\acrfull}
+% Full form of the acronym.
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\acrfull}{\@gls@hyp@opt\ns@acrfull}
+% \end{macrocode}
+%\changes{4.08}{2014-07-30}{removed \cs{@sacrfull}}
+%\changes{3.0}{2011-04-02}{added starred version}
+% \begin{macrocode}
+\newcommand*\ns@acrfull[2][]{%
+ \new@ifnextchar[{\@acrfull{#1}{#2}}%
+ {\@acrfull{#1}{#2}[]}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@acrfull}
+%\changes{4.02}{2013-12-05}{now using \cs{acrfullfmt}}
+% Low-level macro:
+% \begin{macrocode}
+\def\@acrfull#1#2[#3]{%
+% \end{macrocode}
+% Make it easier for acronym styles to change this:
+% \begin{macrocode}
+ \acrfullfmt{#1}{#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Using \cs{acrlinkfullformat} and \cs{acrfullformat} is now
+% deprecated as it can cause complications with the first letter
+% upper case variants, but the package needs to provide backward
+% compatibility support.
+%
+%\begin{macro}{\acrfullfmt}
+%\changes{4.02}{2013-12-05}{new}
+% No case change full format.
+% \begin{macrocode}
+\newcommand*{\acrfullfmt}[3]{%
+ \acrlinkfullformat{\@acrlong}{\@acrshort}{#1}{#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\acrlinkfullformat}
+% Format for full links like \ics{acrfull}. Syntax:
+% \cs{acrlinkfullformat}\marg{long cs}\marg{short
+% cs}\marg{options}\marg{label}\marg{insert}
+% \begin{macrocode}
+\newcommand{\acrlinkfullformat}[5]{%
+ \acrfullformat{#1{#3}{#4}[#5]}{#2{#3}{#4}[]}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\acrfullformat}
+% Default full form is \meta{long} \parg{short}.
+%\changes{3.01}{2011-04-12}{removed \cs{acronymfont} as it should
+%already be set in the second argument.}
+% \begin{macrocode}
+\newcommand{\acrfullformat}[2]{#1\glsspace(#2)}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsspace}
+% Robust space to ensure it's written to the \texttt{.glsdefs} file.
+%\changes{4.08}{2014-07-30}{new}
+% \begin{macrocode}
+\newrobustcmd{\glsspace}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+% Default format for full acronym
+%\begin{macro}{\Acrfull}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\Acrfull}{\@gls@hyp@opt\ns@Acrfull}
+% \end{macrocode}
+%\changes{3.0}{2011-04-02}{added starred version}
+%\changes{4.08}{2014-07-30}{removed \cs{@sAcrfull}}
+% \begin{macrocode}
+\newcommand*\ns@Acrfull[2][]{%
+ \new@ifnextchar[{\@Acrfull{#1}{#2}}%
+ {\@Acrfull{#1}{#2}[]}%
+}
+% \end{macrocode}
+% Low-level macro:
+% \begin{macrocode}
+\def\@Acrfull#1#2[#3]{%
+% \end{macrocode}
+% Make it easier for acronym styles to change this:
+% \begin{macrocode}
+ \Acrfullfmt{#1}{#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Acrfullfmt}
+%\changes{4.02}{2013-12-05}{new}
+% First letter upper case full format.
+% \begin{macrocode}
+\newcommand*{\Acrfullfmt}[3]{%
+ \acrlinkfullformat{\@Acrlong}{\@acrshort}{#1}{#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ACRfull}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\ACRfull}{\@gls@hyp@opt\ns@ACRfull}
+% \end{macrocode}
+%\changes{3.0}{2011-04-02}{added starred version}
+%\changes{4.08}{2014-07-30}{removed \cs{s@ACRfull}}
+% \begin{macrocode}
+\newcommand*\ns@ACRfull[2][]{%
+ \new@ifnextchar[{\@ACRfull{#1}{#2}}%
+ {\@ACRfull{#1}{#2}[]}%
+}
+% \end{macrocode}
+% Low-level macro:
+% \begin{macrocode}
+\def\@ACRfull#1#2[#3]{%
+% \end{macrocode}
+% Make it easier for acronym styles to change this:
+% \begin{macrocode}
+ \ACRfullfmt{#1}{#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ACRfullfmt}
+%\changes{4.02}{2013-12-05}{new}
+% All upper case full format.
+% \begin{macrocode}
+\newcommand*{\ACRfullfmt}[3]{%
+ \acrlinkfullformat{\@ACRlong}{\@ACRshort}{#1}{#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%
+% Plural:
+%\begin{macro}{\acrfullpl}
+%\changes{1.13}{2008-05-10}{new}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\acrfullpl}{\@gls@hyp@opt\ns@acrfullpl}
+% \end{macrocode}
+%\changes{3.0}{2011-04-02}{added starred version}
+%\changes{4.08}{2014-07-30}{removed \cs{s@acrfullpl}}
+% \begin{macrocode}
+\newcommand*\ns@acrfullpl[2][]{%
+ \new@ifnextchar[{\@acrfullpl{#1}{#2}}%
+ {\@acrfullpl{#1}{#2}[]}%
+}
+% \end{macrocode}
+% Low-level macro:
+% \begin{macrocode}
+\def\@acrfullpl#1#2[#3]{%
+% \end{macrocode}
+% Make it easier for acronym styles to change this:
+% \begin{macrocode}
+ \acrfullplfmt{#1}{#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\acrfullplfmt}
+%\changes{4.02}{2013-12-05}{new}
+% No case change plural full format.
+% \begin{macrocode}
+\newcommand*{\acrfullplfmt}[3]{%
+ \acrlinkfullformat{\@acrlongpl}{\@acrshortpl}{#1}{#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Acrfullpl}
+%\changes{1.13}{2008-05-10}{new}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\Acrfullpl}{\@gls@hyp@opt\ns@Acrfullpl}
+% \end{macrocode}
+%\changes{4.08}{2014-07-30}{removed \cs{s@Acrfullpl}}
+%\changes{3.0}{2011-04-02}{added starred version}
+% \begin{macrocode}
+\newcommand*\ns@Acrfullpl[2][]{%
+ \new@ifnextchar[{\@Acrfullpl{#1}{#2}}%
+ {\@Acrfullpl{#1}{#2}[]}%
+}
+% \end{macrocode}
+% Low-level macro:
+% \begin{macrocode}
+\def\@Acrfullpl#1#2[#3]{%
+% \end{macrocode}
+% Make it easier for acronym styles to change this:
+% \begin{macrocode}
+ \Acrfullplfmt{#1}{#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Acrfullplfmt}
+%\changes{4.02}{2013-12-05}{new}
+% First letter upper case plural full format.
+%\changes{4.07}{2014-04-04}{fixed no case change bug}
+% \begin{macrocode}
+\newcommand*{\Acrfullplfmt}[3]{%
+ \acrlinkfullformat{\@Acrlongpl}{\@acrshortpl}{#1}{#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{\ACRfullpl}
+%\changes{1.13}{2008-05-10}{new}
+%\changes{3.01}{2011-04-12}{made robust}
+%\changes{4.08}{2014-07-30}{switched to using \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd*{\ACRfullpl}{\@gls@hyp@opt\ns@ACRfullpl}
+% \end{macrocode}
+%\changes{3.0}{2011-04-02}{added starred version}
+%\changes{4.08}{2014-07-30}{removed \cs{s@ACRfullpl}}
+% \begin{macrocode}
+\newcommand*\ns@ACRfullpl[2][]{%
+ \new@ifnextchar[{\@ACRfullpl{#1}{#2}}%
+ {\@ACRfullpl{#1}{#2}[]}%
+}
+% \end{macrocode}
+% Low-level macro:
+% \begin{macrocode}
+\def\@ACRfullpl#1#2[#3]{%
+% \end{macrocode}
+% Make it easier for acronym styles to change this:
+% \begin{macrocode}
+ \ACRfullplfmt{#1}{#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ACRfullplfmt}
+%\changes{4.02}{2013-12-05}{new}
+% All upper case plural full format.
+% \begin{macrocode}
+\newcommand*{\ACRfullplfmt}[3]{%
+ \acrlinkfullformat{\@ACRlongpl}{\@ACRshortpl}{#1}{#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\section{Predefined acronym styles}
+%\begin{macro}{\acronymfont}
+%This is only used with the additional acronym styles:
+% \begin{macrocode}
+\newcommand{\acronymfont}[1]{#1}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\firstacronymfont}
+%This is only used with the additional acronym styles:
+%\changes{1.14}{2008-06-17}{new}
+% \begin{macrocode}
+\newcommand{\firstacronymfont}[1]{\acronymfont{#1}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\acrnameformat}
+% The styles that allow an additional description use
+% \cs{acrnameformat}\marg{short}\marg{long} to determine what
+% information is displayed in the name.
+% \begin{macrocode}
+\newcommand*{\acrnameformat}[2]{\acronymfont{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+% Define some tokens used by \cs{newacronym}:
+%\begin{macro}{\glskeylisttok}
+% \begin{macrocode}
+\newtoks\glskeylisttok
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glslabeltok}
+% \begin{macrocode}
+\newtoks\glslabeltok
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsshorttok}
+% \begin{macrocode}
+\newtoks\glsshorttok
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glslongtok}
+% \begin{macrocode}
+\newtoks\glslongtok
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\newacronymhook}
+% Provide a hook for \cs{newacronym}:
+% \begin{macrocode}
+\newcommand*{\newacronymhook}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\SetGenericNewAcronym}
+% New improved version of setting the acronym style.
+%\changes{4.02}{2013-12-05}{new}
+% \begin{macrocode}
+\newcommand*{\SetGenericNewAcronym}{%
+% \end{macrocode}
+% Change the behaviour of \cs{Glsentryname} to workaround expansion
+% issues that cause a problem for \cs{makefirstuc}
+% \begin{macrocode}
+ \let\@Gls@entryname\@Gls@acrentryname
+% \end{macrocode}
+% Change the way acronyms are defined:
+% \begin{macrocode}
+ \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
+ }%
+% \end{macrocode}
+% Make sure that \ics{acrfull} etc reflects the new style:
+% \begin{macrocode}
+ \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}}}}%
+% \end{macrocode}
+% Make sure that \ics{glsentryfull} etc reflects the new style:
+% \begin{macrocode}
+ \renewcommand*{\glsentryfull}[1]{\genacrfullformat{##1}{}}%
+ \renewcommand*{\Glsentryfull}[1]{\Genacrfullformat{##1}{}}%
+ \renewcommand*{\glsentryfullpl}[1]{\genplacrfullformat{##1}{}}%
+ \renewcommand*{\Glsentryfullpl}[1]{\Genplacrfullformat{##1}{}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\GenericAcronymFields}
+%\changes{4.02}{2013-12-05}{new}
+% Fields used by \cs{SetGenericNewAcronym} that can be changed by
+% the acronym style.
+% \begin{macrocode}
+\newcommand*{\GenericAcronymFields}{description={\the\glslongtok}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\acronymentry}
+%\changes{4.02}{2013-12-05}{new}
+%\begin{definition}
+%\cs{acronymentry}\marg{label}
+%\end{definition}
+% Display style for the name field in the list of acronyms.
+% \begin{macrocode}
+\newcommand*{\acronymentry}[1]{\acronymfont{\glsentryshort{#1}}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\acronymsort}
+%\begin{definition}
+%\cs{acronymsort}\marg{short}\marg{long}
+%\end{definition}
+% Default sort format for acronyms.
+% \begin{macrocode}
+\newcommand*{\acronymsort}[2]{#1}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\setacronymstyle}
+%\changes{4.02}{2013-12-05}{new}
+%\begin{definition}
+%\cs{setacronymstyle}\marg{style name}
+%\end{definition}
+% \begin{macrocode}
+\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}}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\newacronymstyle}
+%\changes{4.02}{2013-12-05}{new}
+%\begin{definition}
+%\cs{newacronymstyle}\marg{style name}\marg{entry format
+%definition}\marg{display definitions}
+%\end{definition}
+% Defines a new acronym style called \meta{style name}.
+% \begin{macrocode}
+\newcommand*{\newacronymstyle}[3]{%
+ \ifcsdef{@glsacr@dispstyle@#1}%
+ {%
+ \PackageError{glossaries}{Acronym style `#1' already exists}{}%
+ }%
+ {%
+ \csdef{@glsacr@dispstyle@#1}{#2}%
+ \csdef{@glsacr@styledefs@#1}{#3}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\renewacronymstyle}
+% Redefines the given acronym style.
+%\changes{4.03}{2014-01-20}{new}
+% \begin{macrocode}
+\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}{}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\GlsUseAcrEntryDispStyle}
+%\changes{4.02}{2013-12-05}{new}
+% \begin{macrocode}
+\newcommand*{\GlsUseAcrEntryDispStyle}[1]{\csuse{@glsacr@dispstyle@#1}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\GlsUseAcrStyleDefs}
+%\changes{4.02}{2013-12-05}{new}
+% \begin{macrocode}
+\newcommand*{\GlsUseAcrStyleDefs}[1]{\csuse{@glsacr@styledefs@#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%Predefined acronym styles:
+%\begin{acrstyle}{long-short}
+%\changes{4.02}{2013-12-05}{new}
+% \meta{long} (\meta{short}) acronym style.
+% \begin{macrocode}
+\newacronymstyle{long-short}%
+{%
+% \end{macrocode}
+% Check for long form in case this is a mixed glossary.
+% \begin{macrocode}
+ \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}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{long-sp-short}
+%\changes{4.16}{2015-07-08}{new}
+% Similar to the previous style but allows the space between the
+% long and short form to be customized.
+% \begin{macrocode}
+\newacronymstyle{long-sp-short}%
+{%
+% \end{macrocode}
+% Check for long form in case this is a mixed glossary.
+% \begin{macrocode}
+ \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}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{macro}{\glsacspace}
+%\changes{4.16}{2015-07-08}{new}
+% Space between long and short form for the above style.
+% This uses a non-breakable space if the short form is less than
+% 3em, otherwise it uses a regular space.
+% \begin{macrocode}
+\newcommand*{\glsacspace}[1]{%
+ \settowidth{\dimen@}{(\firstacronymfont{\glsentryshort{#1}})}%
+ \ifdim\dimen@<3em~\else\space\fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{acrstyle}{short-long}
+%\changes{4.02}{2013-12-05}{new}
+% \meta{short} (\meta{long}) acronym style.
+% \begin{macrocode}
+\newacronymstyle{short-long}%
+{%
+% \end{macrocode}
+% Check for long form in case this is a mixed glossary.
+% \begin{macrocode}
+ \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})%
+ }%
+% \end{macrocode}
+%\changes{4.03}{2014-01-20}{commented spurious EOL}
+% \begin{macrocode}
+ \renewcommand*{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}}%
+ \renewcommand*{\acronymsort}[2]{##1}%
+ \renewcommand*{\acronymfont}[1]{##1}%
+ \renewcommand*{\firstacronymfont}[1]{\acronymfont{##1}}%
+ \renewcommand*{\acrpluralsuffix}{\glspluralsuffix}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{long-sc-short}
+%\changes{4.02}{2013-12-05}{new}
+% \meta{long} (\cs{textsc}\marg{short}) acronym style.
+% \begin{macrocode}
+\newacronymstyle{long-sc-short}%
+{%
+ \GlsUseAcrEntryDispStyle{long-short}%
+}%
+{%
+ \GlsUseAcrStyleDefs{long-short}%
+ \renewcommand{\acronymfont}[1]{\textsc{##1}}%
+ \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{long-sm-short}
+%\changes{4.02}{2013-12-05}{new}
+% \meta{long} (\cs{textsmaller}\marg{short}) acronym style.
+% \begin{macrocode}
+\newacronymstyle{long-sm-short}%
+{%
+ \GlsUseAcrEntryDispStyle{long-short}%
+}%
+{%
+ \GlsUseAcrStyleDefs{long-short}%
+ \renewcommand{\acronymfont}[1]{\textsmaller{##1}}%
+ \renewcommand*{\acrpluralsuffix}{\glsacrpluralsuffix}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{sc-short-long}
+%\changes{4.02}{2013-12-05}{new}
+% \meta{short} (\cs{textsc}\marg{long}) acronym style.
+% \begin{macrocode}
+\newacronymstyle{sc-short-long}%
+{%
+ \GlsUseAcrEntryDispStyle{short-long}%
+}%
+{%
+ \GlsUseAcrStyleDefs{short-long}%
+ \renewcommand{\acronymfont}[1]{\textsc{##1}}%
+ \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{sm-short-long}
+%\changes{4.02}{2013-12-05}{new}
+% \meta{short} (\cs{textsmaller}\marg{long}) acronym style.
+% \begin{macrocode}
+\newacronymstyle{sm-short-long}%
+{%
+ \GlsUseAcrEntryDispStyle{short-long}%
+}%
+{%
+ \GlsUseAcrStyleDefs{short-long}%
+ \renewcommand{\acronymfont}[1]{\textsmaller{##1}}%
+ \renewcommand*{\acrpluralsuffix}{\glsacrpluralsuffix}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{long-short-desc}
+%\changes{4.02}{2013-12-05}{new}
+% \meta{long} (\marg{short}) acronym style that has an
+% accompanying description (which the user needs to supply).
+% \begin{macrocode}
+\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}})}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{long-sp-short-desc}
+%\changes{4.02}{2013-12-05}{new}
+% \meta{long} (\marg{short}) acronym style that has an
+% accompanying description (which the user needs to supply).
+% The space between the long and short form is given by
+% \cs{glsacspace}.
+% \begin{macrocode}
+\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}})}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{long-sc-short-desc}
+%\changes{4.02}{2013-12-05}{new}
+% \meta{long} (\cs{textsc}\marg{short}) acronym style that has an
+% accompanying description (which the user needs to supply).
+% \begin{macrocode}
+\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}})}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{long-sm-short-desc}
+%\changes{4.02}{2013-12-05}{new}
+% \meta{long} (\cs{textsmaller}\marg{short}) acronym style that has an
+% accompanying description (which the user needs to supply).
+% \begin{macrocode}
+\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}})}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{short-long-desc}
+%\changes{4.02}{2013-12-05}{new}
+% \meta{short} (\marg{long}) acronym style that has an
+% accompanying description (which the user needs to supply).
+% \begin{macrocode}
+\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}})}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{sc-short-long-desc}
+%\changes{4.02}{2013-12-05}{new}
+% \meta{long} (\cs{textsc}\marg{short}) acronym style that has an
+% accompanying description (which the user needs to supply).
+% \begin{macrocode}
+\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}})}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{sm-short-long-desc}
+%\changes{4.02}{2013-12-05}{new}
+% \meta{long} (\cs{textsmaller}\marg{short}) acronym style that has an
+% accompanying description (which the user needs to supply).
+% \begin{macrocode}
+\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}})}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{dua}
+%\changes{4.02}{2013-12-05}{new}
+% \meta{long} only acronym style.
+% \begin{macrocode}
+\newacronymstyle{dua}%
+{%
+% \end{macrocode}
+% Check for long form in case this is a mixed glossary.
+% \begin{macrocode}
+ \ifdefempty\glscustomtext
+ {%
+ \ifglshaslong{\glslabel}%
+ {%
+ \glsifplural
+ {%
+% \end{macrocode}
+% Plural form:
+% \begin{macrocode}
+ \glscapscase
+ {%
+% \end{macrocode}
+% Plural form, don't adjust case:
+% \begin{macrocode}
+ \glsentrylongpl{\glslabel}\glsinsert
+ }%
+ {%
+% \end{macrocode}
+% Plural form, make first letter upper case:
+% \begin{macrocode}
+ \Glsentrylongpl{\glslabel}\glsinsert
+ }%
+ {%
+% \end{macrocode}
+% Plural form, all caps:
+% \begin{macrocode}
+ \mfirstucMakeUppercase
+ {\glsentrylongpl{\glslabel}\glsinsert}%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Singular form
+% \begin{macrocode}
+ \glscapscase
+ {%
+% \end{macrocode}
+% Singular form, don't adjust case:
+% \begin{macrocode}
+ \glsentrylong{\glslabel}\glsinsert
+ }%
+ {%
+% \end{macrocode}
+% Subsequent singular form, make first letter upper case:
+% \begin{macrocode}
+ \Glsentrylong{\glslabel}\glsinsert
+ }%
+ {%
+% \end{macrocode}
+% Subsequent singular form, all caps:
+% \begin{macrocode}
+ \mfirstucMakeUppercase
+ {\glsentrylong{\glslabel}\glsinsert}%
+ }%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Not an acronym:
+% \begin{macrocode}
+ \glsgenentryfmt
+ }%
+ }%
+ {\glscustomtext\glsinsert}%
+}%
+{%
+ \renewcommand*{\GenericAcronymFields}{description={\the\glslongtok}}%
+% \end{macrocode}
+%\changes{4.03}{2014-01-20}{fixed bug in \cs{acrfullfmt}}
+% \begin{macrocode}
+ \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}})}}}%
+% \end{macrocode}
+%\changes{4.03}{2014-01-20}{fixed bug in \cs{acrfullplfmt}}
+% \begin{macrocode}
+ \renewcommand*{\acrfullplfmt}[3]{%
+ \glslink[##1]{##2}{\glsentrylongpl{##2}##3\space
+ (\acronymfont{\glsentryshortpl{##2}})}}%
+% \end{macrocode}
+%\changes{4.03}{2014-01-20}{fixed bug in \cs{Acrfullplfmt}}
+% \begin{macrocode}
+ \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}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{dua-desc}
+%\changes{4.02}{2013-12-05}{new}
+% \meta{long} only acronym style with user-supplied description.
+% \begin{macrocode}
+\newacronymstyle{dua-desc}%
+{%
+ \GlsUseAcrEntryDispStyle{dua}%
+}%
+{%
+ \GlsUseAcrStyleDefs{dua}%
+ \renewcommand*{\GenericAcronymFields}{}%
+% \end{macrocode}
+%\changes{4.03}{2014-01-20}{commented spurious EOL}
+% \begin{macrocode}
+ \renewcommand*{\acronymentry}[1]{\acronymfont{\glsentrylong{##1}}}%
+ \renewcommand*{\acronymsort}[2]{##2}%
+}%
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{footnote}
+%\changes{4.02}{2013-12-05}{new}
+% \meta{short}\cs{footnote}\marg{long} acronym style.
+% \begin{macrocode}
+\newacronymstyle{footnote}%
+{%
+% \end{macrocode}
+% Check for long form in case this is a mixed glossary.
+% \begin{macrocode}
+ \ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}%
+}%
+{%
+ \renewcommand*{\GenericAcronymFields}{description={\the\glslongtok}}%
+% \end{macrocode}
+% Need to ensure hyperlinks are switched off on first use:
+% \begin{macrocode}
+ \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}%
+% \end{macrocode}
+% Don't use footnotes for \ics{acrfull}:
+% \begin{macrocode}
+ \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})}}}%
+% \end{macrocode}
+% Similarly for \ics{glsentryfull} etc:
+% \begin{macrocode}
+ \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})}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{footnote-sc}
+%\changes{4.02}{2013-12-05}{new}
+% \cs{textsc}\marg{short}\cs{footnote}\marg{long} acronym style.
+% \begin{macrocode}
+\newacronymstyle{footnote-sc}%
+{%
+ \GlsUseAcrEntryDispStyle{footnote}%
+}%
+{%
+ \GlsUseAcrStyleDefs{footnote}%
+ \renewcommand{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}}
+ \renewcommand{\acronymfont}[1]{\textsc{##1}}%
+ \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}%
+}%
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{footnote-sm}
+%\changes{4.02}{2013-12-05}{new}
+% \cs{textsmaller}\marg{short}\cs{footnote}\marg{long} acronym style.
+% \begin{macrocode}
+\newacronymstyle{footnote-sm}%
+{%
+ \GlsUseAcrEntryDispStyle{footnote}%
+}%
+{%
+ \GlsUseAcrStyleDefs{footnote}%
+ \renewcommand{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}}
+ \renewcommand{\acronymfont}[1]{\textsmaller{##1}}%
+ \renewcommand*{\acrpluralsuffix}{\glsacrpluralsuffix}%
+}%
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{footnote-desc}
+%\changes{4.02}{2013-12-05}{new}
+% \meta{short}\cs{footnote}\marg{long} acronym style that has an
+% accompanying description (which the user needs to supply).
+% \begin{macrocode}
+\newacronymstyle{footnote-desc}%
+{%
+ \GlsUseAcrEntryDispStyle{footnote}%
+}%
+{%
+ \GlsUseAcrStyleDefs{footnote}%
+ \renewcommand*{\GenericAcronymFields}{}%
+ \renewcommand*{\acronymsort}[2]{##2}%
+ \renewcommand*{\acronymentry}[1]{%
+ \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{footnote-sc-desc}
+%\changes{4.02}{2013-12-05}{new}
+% \cs{textsc}\marg{short}\cs{footnote}\marg{long} acronym style that has an
+% accompanying description (which the user needs to supply).
+% \begin{macrocode}
+\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}})}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{footnote-sm-desc}
+%\changes{4.02}{2013-12-05}{new}
+% \cs{textsmaller}\marg{short}\cs{footnote}\marg{long} acronym style that has an
+% accompanying description (which the user needs to supply).
+% \begin{macrocode}
+\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}})}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%
+%
+%\begin{macro}{\DefineAcronymSynonyms}
+%\changes{2.04}{2009-11-10}{new}
+% \begin{macrocode}
+\newcommand*{\DefineAcronymSynonyms}{%
+% \end{macrocode}
+%\end{macro}
+% Short form
+%\begin{macro}{\acs}
+% \begin{macrocode}
+ \let\acs\acrshort
+% \end{macrocode}
+%\end{macro}
+% First letter uppercase short form
+%\begin{macro}{\Acs}
+% \begin{macrocode}
+ \let\Acs\Acrshort
+% \end{macrocode}
+%\end{macro}
+% Plural short form
+%\begin{macro}{\acsp}
+% \begin{macrocode}
+ \let\acsp\acrshortpl
+% \end{macrocode}
+%\end{macro}
+% First letter uppercase plural short form
+%\begin{macro}{\Acsp}
+% \begin{macrocode}
+ \let\Acsp\Acrshortpl
+% \end{macrocode}
+%\end{macro}
+% Long form
+%\begin{macro}{\acl}
+% \begin{macrocode}
+ \let\acl\acrlong
+% \end{macrocode}
+%\end{macro}
+% Plural long form
+%\begin{macro}{\aclp}
+% \begin{macrocode}
+ \let\aclp\acrlongpl
+% \end{macrocode}
+%\end{macro}
+% First letter upper case long form
+%\begin{macro}{\Acl}
+% \begin{macrocode}
+ \let\Acl\Acrlong
+% \end{macrocode}
+%\end{macro}
+% First letter upper case plural long form
+%\begin{macro}{\Aclp}
+% \begin{macrocode}
+ \let\Aclp\Acrlongpl
+% \end{macrocode}
+%\end{macro}
+% Full form
+%\begin{macro}{\acf}
+% \begin{macrocode}
+ \let\acf\acrfull
+% \end{macrocode}
+%\end{macro}
+% Plural full form
+%\begin{macro}{\acfp}
+% \begin{macrocode}
+ \let\acfp\acrfullpl
+% \end{macrocode}
+%\end{macro}
+% First letter upper case full form
+%\begin{macro}{\Acf}
+% \begin{macrocode}
+ \let\Acf\Acrfull
+% \end{macrocode}
+%\end{macro}
+% First letter upper case plural full form
+%\begin{macro}{\Acfp}
+% \begin{macrocode}
+ \let\Acfp\Acrfullpl
+% \end{macrocode}
+%\end{macro}
+% Standard form
+%\begin{macro}{\ac}
+% \begin{macrocode}
+ \let\ac\gls
+% \end{macrocode}
+%\end{macro}
+% First upper case standard form
+%\begin{macro}{\Ac}
+% \begin{macrocode}
+ \let\Ac\Gls
+% \end{macrocode}
+%\end{macro}
+% Standard plural form
+%\begin{macro}{\acp}
+% \begin{macrocode}
+ \let\acp\glspl
+% \end{macrocode}
+%\end{macro}
+% Standard first letter upper case plural form
+%\begin{macro}{\Acp}
+% \begin{macrocode}
+ \let\Acp\Glspl
+% \end{macrocode}
+%\end{macro}
+% \begin{macrocode}
+}
+% \end{macrocode}
+% Define synonyms if required
+% \begin{macrocode}
+\ifglsacrshortcuts
+ \DefineAcronymSynonyms
+\fi
+% \end{macrocode}
+%
+% These commands for setting the style are now deprecated but are
+% kept for backward compatibility.
+%
+%\begin{macro}{\SetDefaultAcronymDisplayStyle}
+% Sets the default acronym display style for given glossary.
+%\changes{2.04}{2009-11-10}{new}
+%\changes{3.11a}{2013-10-15}{changed to use \cs{defglsentryfmt}}
+% \begin{macrocode}
+\newcommand*{\SetDefaultAcronymDisplayStyle}[1]{%
+ \defglsentryfmt[#1]{\glsgenentryfmt}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\DefaultNewAcronymDef}
+% Sets up the acronym definition for the default style.
+% The information is provided by the tokens \cs{glslabeltok},
+% \cs{glsshorttok}, \cs{glslongtok} and \cs{glskeylisttok}.
+% \begin{macrocode}
+\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},%
+% \end{macrocode}
+% Remaining options specified by the user:
+% \begin{macrocode}
+ \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
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\SetDefaultAcronymStyle}
+%\changes{2.04}{2009-11-10}{new}
+% Set up the default acronym style:
+% \begin{macrocode}
+\newcommand*{\SetDefaultAcronymStyle}{%
+% \end{macrocode}
+% Set the display style:
+% \begin{macrocode}
+ \@for\@gls@type:=\@glsacronymlists\do{%
+ \SetDefaultAcronymDisplayStyle{\@gls@type}%
+ }%
+% \end{macrocode}
+% Set up the definition of \cs{newacronym}:
+% \begin{macrocode}
+ \renewcommand{\newacronym}[4][]{%
+% \end{macrocode}
+% If user is just using the main glossary and hasn't identified it
+% as a list of acronyms, then update. (This is done to ensure
+% backwards compatibility with versions prior to 2.04).
+% \begin{macrocode}
+ \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}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\acrfootnote}
+%\changes{3.0}{2011-04-02}{new}
+% Used by the footnote acronym styles.
+% \begin{macrocode}
+\newcommand*{\acrfootnote}[3]{\acrlinkfootnote{#1}{#2}{#3}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\acrlinkfootnote}
+%\changes{3.0}{2011-04-02}{new}
+% \begin{macrocode}
+\newcommand*{\acrlinkfootnote}[3]{%
+ \footnote{\glslink[#1]{#2}{#3}}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\acrnolinkfootnote}
+%\changes{3.0}{2011-04-02}{new}
+% \begin{macrocode}
+\newcommand*{\acrnolinkfootnote}[3]{%
+ \footnote{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\SetDescriptionFootnoteAcronymDisplayStyle}
+% Sets the acronym display style for given glossary for the
+% description and footnote combination.
+%\changes{2.04}{2009-11-10}{new}
+%\changes{3.0}{2011-04-02}{expanded options link options}
+%\changes{3.11a}{2013-10-15}{updated to use \cs{defglsentryfmt}}
+% \begin{macrocode}
+\newcommand*{\SetDescriptionFootnoteAcronymDisplayStyle}[1]{%
+ \defglsentryfmt[#1]{%
+% \end{macrocode}
+%\changes{4.02}{2013-12-05}{Moved check for empty custom text to prevent
+%unwanted parenthetical material}
+% \begin{macrocode}
+ \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}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\DescriptionFootnoteNewAcronymDef}
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\SetDescriptionFootnoteAcronymStyle}
+% If a description and footnote are both required, store the long form
+% in the \gloskey{symbol} key. Store the short form in \gloskey{text}
+% 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.
+% \begin{macrocode}
+\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
+ }%
+% \end{macrocode}
+%
+% If \pkgopt{footnote} package option is specified, set the first
+% use to append the long form (stored in \gloskey{symbol}) as a
+% footnote.
+%\changes{1.12}{2008-03-08}{Added \cs{protect} before \cs{footnote}
+% and \cs{glslink}}
+% \begin{macrocode}
+ \@for\@gls@type:=\@glsacronymlists\do{%
+ \SetDescriptionFootnoteAcronymDisplayStyle{\@gls@type}%
+ }%
+% \end{macrocode}
+% Redefine \ics{acronymfont} if small caps required. The plural suffix
+% is set in an upright font so that it remains in normal lower case,
+% otherwise it looks as though it's part of the acronym.
+%\changes{1.19}{2009-03-02}{changed \cs{acronymfont} to use
+%\cs{textsmaller} instead
+%of \cs{smaller}}
+% \begin{macrocode}
+ \ifglsacrsmallcaps
+ \renewcommand*{\acronymfont}[1]{\textsc{##1}}%
+% \end{macrocode}
+% \begin{macrocode}
+ \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}%
+ \else
+ \ifglsacrsmaller
+ \renewcommand*{\acronymfont}[1]{\textsmaller{##1}}%
+ \fi
+ \fi
+% \end{macrocode}
+% Check for package option clash
+% \begin{macrocode}
+ \ifglsacrdua
+ \PackageError{glossaries}{Option clash: `footnote' and `dua'
+ can't both be set}{}%
+ \fi
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\SetDescriptionDUAAcronymDisplayStyle}
+% Sets the acronym display style for given glossary with
+% description and dua combination.
+%\changes{2.04}{2009-11-10}{new}
+%\changes{3.11a}{2013-10-15}{updated to use \cs{defglsentryfmt}}
+% \begin{macrocode}
+\newcommand*{\SetDescriptionDUAAcronymDisplayStyle}[1]{%
+ \defglsentryfmt[#1]{\glsgenentryfmt}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\DescriptionDUANewAcronymDef}
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\SetDescriptionDUAAcronymStyle}
+% Description, don't use acronym and no footnote.
+% 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.
+% \begin{macrocode}
+\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
+ }%
+% \end{macrocode}
+% Set display.
+% \begin{macrocode}
+ \@for\@gls@type:=\@glsacronymlists\do{%
+ \SetDescriptionDUAAcronymDisplayStyle{\@gls@type}%
+ }%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\SetDescriptionAcronymDisplayStyle}
+% Sets the acronym display style for given glossary using
+% the description setting (but not \pkgopt{footnote} or \pkgopt{dua}).
+%\changes{2.04}{2009-11-10}{new}
+%\changes{3.07}{2013-07-05}{now using \cs{glsdoparenifnotempty}}
+%\changes{3.11a}{2013-10-15}{updated to use \cs{defglsentryfmt}}
+% \begin{macrocode}
+\newcommand*{\SetDescriptionAcronymDisplayStyle}[1]{%
+ \defglsentryfmt[#1]{%
+% \end{macrocode}
+%\changes{4.02}{2013-12-05}{Moved check for empty custom text to prevent
+%unwanted parenthetical material}
+% \begin{macrocode}
+ \ifdefempty\glscustomtext
+ {%
+ \ifglsused{\glslabel}%
+ {%
+% \end{macrocode}
+% Move the inserted text outside of \cs{acronymfont}
+% \begin{macrocode}
+ \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}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\DescriptionNewAcronymDef}
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\SetDescriptionAcronymStyle}
+% Option \pkgopt{description} is used, but not \pkgopt{dua}
+% or \pkgopt{footnote}.
+% Store long form in \gloskey{first} key
+% and short form in \gloskey{text} and \gloskey{symbol} key.
+% The name is stored using \ics{acrnameformat} to allow the
+% user to override the way the name is displayed in the
+% list of acronyms.
+% \begin{macrocode}
+\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
+ }%
+% \end{macrocode}
+% Set display.
+% \begin{macrocode}
+ \@for\@gls@type:=\@glsacronymlists\do{%
+ \SetDescriptionAcronymDisplayStyle{\@gls@type}%
+ }%
+% \end{macrocode}
+% Redefine \ics{acronymfont} if small caps required. The plural suffix
+% is set in an upright font so that it remains in normal lower case,
+% otherwise it looks as though it's part of the acronym.
+%\changes{1.19}{2009-03-02}{changed \cs{acronymfont} to use
+%\cs{textsmaller} instead
+%of \cs{smaller}}
+% \begin{macrocode}
+ \ifglsacrsmallcaps
+ \renewcommand{\acronymfont}[1]{\textsc{##1}}
+ \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}%
+ \else
+ \ifglsacrsmaller
+ \renewcommand*{\acronymfont}[1]{\textsmaller{##1}}%
+ \fi
+ \fi
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\SetFootnoteAcronymDisplayStyle}
+% Sets the acronym display style for given glossary with
+% footnote setting (but not \pkgopt{description} or \pkgopt{dua}).
+%\changes{2.04}{2009-11-10}{new}
+%\changes{3.11a}{2013-10-15}{updated to use \cs{defglsentryfmt}}
+% \begin{macrocode}
+\newcommand*{\SetFootnoteAcronymDisplayStyle}[1]{%
+ \defglsentryfmt[#1]{%
+% \end{macrocode}
+%\changes{4.02}{2013-12-05}{Moved check for empty custom text to prevent
+%unwanted parenthetical material}
+% \begin{macrocode}
+ \ifdefempty\glscustomtext
+ {%
+% \end{macrocode}
+% Move the inserted text outside of \cs{acronymfont}
+% \begin{macrocode}
+ \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}}%
+ }%
+ }%
+% \end{macrocode}
+%\changes{3.13a}{2013-11-05}{fixed missing argument bug}
+% \begin{macrocode}
+ {}%
+ }%
+ }%
+ {\glscustomtext\glsinsert}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\FootnoteNewAcronymDef}
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\SetFootnoteAcronymStyle}
+% If \pkgopt{footnote} package option is specified, set the first
+% use to append the long form (stored in \gloskey{description}) as a
+% footnote.
+% Use the \gloskey{description} key to store the long form.
+% \begin{macrocode}
+\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
+ }%
+% \end{macrocode}
+% Set display
+%\changes{1.12}{2008-03-08}{Added \cs{protect} before \cs{footnote} and
+% \cs{glslink}}
+% \begin{macrocode}
+ \@for\@gls@type:=\@glsacronymlists\do{%
+ \SetFootnoteAcronymDisplayStyle{\@gls@type}%
+ }%
+% \end{macrocode}
+% Redefine \ics{acronymfont} if small caps required. The plural suffix
+% is set in an upright font so that it remains in normal lower case,
+% otherwise it looks as though it's part of the acronym.
+%\changes{1.19}{2009-03-02}{changed \cs{acronymfont} to use
+%\cs{textsmaller} instead
+%of \cs{smaller}}
+% \begin{macrocode}
+ \ifglsacrsmallcaps
+ \renewcommand*{\acronymfont}[1]{\textsc{##1}}%
+ \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}%
+ \else
+ \ifglsacrsmaller
+ \renewcommand*{\acronymfont}[1]{\textsmaller{##1}}%
+ \fi
+ \fi
+% \end{macrocode}
+% Check for option clash
+% \begin{macrocode}
+ \ifglsacrdua
+ \PackageError{glossaries}{Option clash: `footnote' and `dua'
+ can't both be set}{}%
+ \fi
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsdoparenifnotempty}
+% Do a space followed by the argument if the argument doesn't expand
+% to empty or \cs{relax}. If argument isn't empty (or \cs{relax}), apply
+% the macro to it given in the second argument.
+% \begin{macrocode}
+\DeclareRobustCommand*{\glsdoparenifnotempty}[2]{%
+ \protected@edef\gls@tmp{#1}%
+ \ifdefempty\gls@tmp
+ {}%
+ {%
+ \ifx\gls@tmp\@gls@default@value
+ \else
+ \space (#2{#1})%
+ \fi
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\SetSmallAcronymDisplayStyle}
+% Sets the acronym display style for given glossary where neither
+% footnote nor description is required, but smallcaps or smaller
+% specified.
+%\changes{2.04}{2009-11-10}{new}
+%\changes{3.11a}{2013-10-15}{updated to use \cs{defglsentryfmt}}
+% \begin{macrocode}
+\newcommand*{\SetSmallAcronymDisplayStyle}[1]{%
+ \defglsentryfmt[#1]{%
+% \end{macrocode}
+%\changes{4.02}{2013-12-05}{Moved check for empty custom text to prevent
+%unwanted parenthetical material}
+% \begin{macrocode}
+ \ifdefempty\glscustomtext
+ {%
+% \end{macrocode}
+% Move the inserted text outside of \cs{acronymfont}
+% \begin{macrocode}
+ \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}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\SmallNewAcronymDef}
+%\changes{3.02}{2012-05-21}{fixed broken short and long plural}
+% \begin{macrocode}
+\newcommand*{\SmallNewAcronymDef}{%
+ \edef\@do@newglossaryentry{%
+ \noexpand\newglossaryentry{\the\glslabeltok}%
+ {%
+ type=\acronymtype,%
+ name={\noexpand\acronymfont{\the\glsshorttok}},%
+ sort={\the\glsshorttok},%
+ text={\the\glsshorttok},%
+% \end{macrocode}
+% Default to the short plural.
+% \begin{macrocode}
+ plural={\noexpand\expandonce\noexpand\@glo@shortpl},%
+ first={\the\glslongtok},%
+% \end{macrocode}
+% Default to the long plural.
+% \begin{macrocode}
+ 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},%
+% \end{macrocode}
+% Default to the short plural.
+% \begin{macrocode}
+ 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
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\SetSmallAcronymStyle}
+% Neither footnote nor description required, but smallcaps or
+% smaller specified.
+% Use the \gloskey{symbol} key to store the short form and
+% \gloskey{first} to store the long form.
+% \begin{macrocode}
+\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
+ }%
+% \end{macrocode}
+% Change the display since \gloskey{first} only contains long form.
+% \begin{macrocode}
+ \@for\@gls@type:=\@glsacronymlists\do{%
+ \SetSmallAcronymDisplayStyle{\@gls@type}%
+ }%
+% \end{macrocode}
+% Redefine \ics{acronymfont} if small caps required. The plural suffix
+% is set in an upright font so that it remains in normal lower case,
+% otherwise it looks as though it's part of the acronym.
+%\changes{1.19}{2009-03-02}{changed \cs{acronymfont} to use
+%\cs{textsmaller} instead
+%of \cs{smaller}}
+% \begin{macrocode}
+ \ifglsacrsmallcaps
+ \renewcommand*{\acronymfont}[1]{\textsc{##1}}
+ \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}%
+ \else
+ \renewcommand*{\acronymfont}[1]{\textsmaller{##1}}
+ \fi
+% \end{macrocode}
+% check for option clash
+% \begin{macrocode}
+ \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
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\SetDUADisplayStyle}
+% Sets the acronym display style for given glossary with dua
+% setting.
+%\changes{2.04}{2009-11-10}{new}
+%\changes{3.11a}{2013-10-15}{updated to use \cs{defglsentryfmt}}
+% \begin{macrocode}
+\newcommand*{\SetDUADisplayStyle}[1]{%
+ \defglsentryfmt[#1]{\glsgenentryfmt}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\DUANewAcronymDef}
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\SetDUAStyle}
+% Always expand acronyms.
+% \begin{macrocode}
+\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
+ }%
+% \end{macrocode}
+% Set the display
+% \begin{macrocode}
+ \@for\@gls@type:=\@glsacronymlists\do{%
+ \SetDUADisplayStyle{\@gls@type}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\SetAcronymStyle}
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+% Set the acronym style according to the package options
+% \begin{macrocode}
+\SetAcronymStyle
+% \end{macrocode}
+%\end{macro}
+%
+% Allow user to define their own custom acronyms.
+% (For compatibility with versions before v3.0, the short form is
+% stored in the user1 key, the plural short form is stored in the
+% user2 key, the long form is stored in the user3 key and the
+% plural long form is stored in the user4 key.) Defaults to
+% displaying only the acronym with the long form as the description.
+%\begin{macro}{\SetCustomDisplayStyle}
+% Sets the acronym display style.
+%\changes{2.06}{2010-06-14}{new}
+%\changes{3.11a}{2013-10-15}{updated to use \cs{defglsentryfmt}}
+% \begin{macrocode}
+\newcommand*{\SetCustomDisplayStyle}[1]{%
+ \defglsentryfmt[#1]{\glsgenentryfmt}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\CustomAcronymFields}
+%\changes{2.06}{2010-06-14}{new}
+% \begin{macrocode}
+\newcommand*{\CustomAcronymFields}{%
+ name={\the\glsshorttok},%
+ description={\the\glslongtok},%
+ first={\acrfullformat{\the\glslongtok}{\the\glsshorttok}},%
+ firstplural={\acrfullformat
+ {\noexpand\glsentrylongpl{\the\glslabeltok}}%
+ {\noexpand\glsentryshortpl{\the\glslabeltok}}},%
+% \end{macrocode}
+% \changes{4.01}{2013-11-16}{inserted missing comma}
+% \begin{macrocode}
+ text={\the\glsshorttok},%
+ plural={\the\glsshorttok\noexpand\acrpluralsuffix}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\CustomNewAcronymDef}
+%\changes{2.06}{2010-06-14}{new}
+% \begin{macrocode}
+\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
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\SetCustomStyle}
+%\changes{2.06}{2010-06-14}{new}
+% \begin{macrocode}
+\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
+ }%
+% \end{macrocode}
+% Set the display
+% \begin{macrocode}
+ \@for\@gls@type:=\@glsacronymlists\do{%
+ \SetCustomDisplayStyle{\@gls@type}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%
+% \section{Predefined Glossary Styles}\label{sec:code:styles}
+% The \sty{glossaries} bundle comes with some predefined glossary
+% styles. These need to be loaded now for the \pkgopt{style} option
+% to use them.
+%
+% First, the glossary hyper-navigation commands need to be loaded.
+% \begin{macrocode}
+\RequirePackage{glossary-hypernav}
+% \end{macrocode}
+% The styles that use list-like environments. These are not loaded
+% if the \pkgopt{nolist} option is used:
+% \begin{macrocode}
+\@gls@loadlist
+% \end{macrocode}
+% The styles that use the \env{longtable} environment. These are
+% not loaded if the \pkgopt{nolong} package option is used.
+% \begin{macrocode}
+\@gls@loadlong
+% \end{macrocode}
+% The styles that use the \env{supertabular} environment. These are
+% not loaded if the \pkgopt{nosuper} package option is used or if
+% the \isty{supertabular} package isn't installed.
+% \begin{macrocode}
+\@gls@loadsuper
+% \end{macrocode}
+% The tree-like styles. These are not loaded if the \pkgopt{notree}
+% package option is used.
+% \begin{macrocode}
+\@gls@loadtree
+% \end{macrocode}
+% The default glossary style is set according to the \pkgopt{style} package
+% option, but can be overridden by \ics{glossarystyle}. The
+% required style must be defined at this point.
+% \begin{macrocode}
+\ifx\@glossary@default@style\relax
+\else
+ \setglossarystyle{\@glossary@default@style}
+\fi
+% \end{macrocode}
+%
+%\section{Debugging Commands}
+%
+%\begin{macro}{\showgloparent}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showgloparent}\marg{label}
+%\end{definition}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showgloparent}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@parent\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showglolevel}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showglolevel}\marg{label}
+%\end{definition}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglolevel}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@level\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showglotext}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showglotext}\marg{label}
+%\end{definition}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglotext}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@text\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showgloplural}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showgloplural}\marg{label}
+%\end{definition}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showgloplural}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@plural\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showglofirst}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showglofirst}\marg{label}
+%\end{definition}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglofirst}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@first\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showglofirstpl}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showglofirstpl}\marg{label}
+%\end{definition}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglofirstpl}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@firstpl\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showglotype}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showglotype}\marg{label}
+%\end{definition}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglotype}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@type\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showglocounter}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showglocounter}\marg{label}
+%\end{definition}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglocounter}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@counter\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showglouseri}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showglouseri}\marg{label}
+%\end{definition}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglouseri}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@useri\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showglouserii}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showglouserii}\marg{label}
+%\end{definition}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglouserii}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@userii\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showglouseriii}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showglouseriii}\marg{label}
+%\end{definition}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglouseriii}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@useriii\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showglouseriv}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showglouseriv}\marg{label}
+%\end{definition}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglouseriv}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@useriv\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showglouserv}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showglouserv}\marg{label}
+%\end{definition}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglouserv}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@userv\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showglouservi}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showglouservi}\marg{label}
+%\end{definition}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglouservi}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@uservi\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showgloname}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showgloname}\marg{label}
+%\end{definition}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showgloname}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@name\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showglodesc}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showglodesc}\marg{label}
+%\end{definition}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglodesc}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@desc\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showglodescplural}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showglodescplural}\marg{label}
+%\end{definition}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglodescplural}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@descplural\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showglosort}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showglosort}\marg{label}
+%\end{definition}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglosort}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@sort\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showglosymbol}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showglosymbol}\marg{label}
+%\end{definition}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglosymbol}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@symbol\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showglosymbolplural}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showglosymbolplural}\marg{label}
+%\end{definition}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglosymbolplural}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@symbolplural\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showgloshort}
+%\changes{3.11a}{2013-10-15}{new}
+%\begin{definition}
+%\cs{showgloshort}\marg{label}
+%\end{definition}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showgloshort}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@short\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showglolong}
+%\changes{3.11a}{2013-10-15}{new}
+%\begin{definition}
+%\cs{showglolong}\marg{label}
+%\end{definition}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglolong}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@long\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showgloindex}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showgloindex}\marg{label}
+%\end{definition}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showgloindex}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@index\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showgloflag}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showgloflag}\marg{label}
+%\end{definition}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showgloflag}[1]{%
+ \expandafter\show\csname ifglo@\glsdetoklabel{#1}@flag\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showgloloclist}
+%\changes{4.04}{2014-03-06}{new}
+%\begin{definition}
+%\cs{showgloloclist}\marg{label}
+%\end{definition}
+% \begin{macrocode}
+\newcommand*{\showgloloclist}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@loclist\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showglofield}
+%\changes{4.16}{2015-07-08}{new}
+%\begin{definition}
+%\cs{showglofield}\marg{label}\marg{field}
+%\end{definition}
+% \begin{macrocode}
+\newcommand*{\showglofield}[2]{%
+ \csshow{glo@\glsdetoklabel{#1}@#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showacronymlists}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showacronymlists}
+%\end{definition}
+% Show list of glossaries that have been flagged as a list of
+% acronyms.
+% \begin{macrocode}
+\newcommand*{\showacronymlists}{%
+ \show\@glsacronymlists
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\showglossaries}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showglossaries}
+%\end{definition}
+% Show list of defined glossaries.
+% \begin{macrocode}
+\newcommand*{\showglossaries}{%
+ \show\@glo@types
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showglossaryin}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showglossaryin}\marg{glossary-label}
+%\end{definition}
+% Show the `in' extension for the given glossary.
+% \begin{macrocode}
+\newcommand*{\showglossaryin}[1]{%
+ \expandafter\show\csname @glotype@#1@in\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showglossaryout}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showglossaryout}\marg{glossary-label}
+%\end{definition}
+% Show the `out' extension for the given glossary.
+% \begin{macrocode}
+\newcommand*{\showglossaryout}[1]{%
+ \expandafter\show\csname @glotype@#1@out\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showglossarytitle}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showglossarytitle}\marg{glossary-label}
+%\end{definition}
+% Show the title for the given glossary.
+% \begin{macrocode}
+\newcommand*{\showglossarytitle}[1]{%
+ \expandafter\show\csname @glotype@#1@title\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showglossarycounter}
+%\changes{3.0}{2011-04-02}{new}
+%\begin{definition}
+%\cs{showglossarycounter}\marg{glossary-label}
+%\end{definition}
+% Show the counter for the given glossary.
+% \begin{macrocode}
+\newcommand*{\showglossarycounter}[1]{%
+ \expandafter\show\csname @glotype@#1@counter\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\showglossaryentries}
+%\changes{3.0}{2011-04-02}{new}
+%\changes{3.02}{2012-05-21}{fixed misspelt command}
+%\begin{definition}
+%\cs{showglossaryentries}\marg{glossary-label}
+%\end{definition}
+% Show the list of entry labels for the given glossary.
+% \begin{macrocode}
+\newcommand*{\showglossaryentries}[1]{%
+ \expandafter\show\csname glolist@#1\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\section{Compatibility with version 2.07 and below}
+%
+% In order to fix some bugs in v3.0, it was necessary to change the
+% way information is written to the \filetype{glo} file, which also meant
+% a change in the format of the Xindy style file. The compatibility
+% option is meant for documents that use a customised Xindy style
+% file with \ics{noist}. With the compatibility option, hopefully
+% \app{xindy} will still be able to process the old document, but
+% the bugs will remain. The issues in versions 2.07 and below:
+%\begin{itemize}
+% \item With \pkgopt{xindy}, the counter used by the entry was
+% hard-coded into the Xindy style file. This meant that you couldn't
+% use the \gloskey[glslink]{counter} to swap counters.
+% \item With both \pkgopt{xindy} and \pkgopt{makeindex}, if used
+% with \sty{hyperref} and \cs{theH}\meta{counter} was different to
+% \cs{thecounter}, the link in the location number would be
+% undefined.
+%\end{itemize}
+% \begin{macrocode}
+\csname ifglscompatible-2.07\endcsname
+ \RequirePackage{glossaries-compatible-207}
+\fi
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</glossaries.sty>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*glossaries-prefix.sty>
+% \end{macrocode}
+%\fi
+%\chapter{Prefix Support (glossaries-prefix Code)}
+%\label{sec:code:prefix}
+%\changes{3.14a}{2013-11-12}{new}
+% This package provides a means of adding prefixes to your glossary
+% entries. For example, you may want to use \qt{a
+% \cs{gls}\marg{label}} on first use but use \qt{an
+% \cs{gls}\marg{label}} on subsequent use.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{glossaries-prefix}[2019/01/06 v4.42 (NLCT)]
+% \end{macrocode}
+% Pass all options to \sty{glossaries}:
+% \begin{macrocode}
+\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{glossaries}}
+% \end{macrocode}
+% Process options:
+% \begin{macrocode}
+\ProcessOptions
+% \end{macrocode}
+% Load \sty{glossaries}:
+% \begin{macrocode}
+\RequirePackage{glossaries}
+% \end{macrocode}
+% Add the new keys:
+% \begin{macrocode}
+\define@key{glossentry}{prefixfirst}{\def\@glo@entryprefixfirst{#1}}%
+\define@key{glossentry}{prefixfirstplural}{\def\@glo@entryprefixfirstplural{#1}}%
+\define@key{glossentry}{prefix}{\def\@glo@entryprefix{#1}}%
+\define@key{glossentry}{prefixplural}{\def\@glo@entryprefixplural{#1}}%
+% \end{macrocode}
+% Add them to \ics{@gls@keymap}:
+% \begin{macrocode}
+\appto\@gls@keymap{,%
+ {prefixfirst}{prefixfirst},%
+ {prefixfirstplural}{prefixfirstplural},%
+ {prefix}{prefix},%
+ {prefixplural}{prefixplural}%
+ }
+% \end{macrocode}
+% Set the default values:
+% \begin{macrocode}
+\appto\@newglossaryentryprehook{%
+ \def\@glo@entryprefix{}%
+ \def\@glo@entryprefixplural{}%
+ \let\@glo@entryprefixfirst\@gls@default@value
+ \let\@glo@entryprefixfirstplural\@gls@default@value
+}
+% \end{macrocode}
+% Set the assignment code:
+% \begin{macrocode}
+\appto\@newglossaryentryposthook{%
+ \gls@assign@field{}{\@glo@label}{prefix}{\@glo@entryprefix}%
+ \gls@assign@field{}{\@glo@label}{prefixplural}{\@glo@entryprefixplural}%
+% \end{macrocode}
+% If \gloskey{prefixfirst} has not been supplied, make it the same
+% as \gloskey{prefix}.
+% \begin{macrocode}
+ \expandafter\gls@assign@field\expandafter
+ {\csname glo@\@glo@label @prefix\endcsname}{\@glo@label}{prefixfirst}%
+ {\@glo@entryprefixfirst}%
+% \end{macrocode}
+% If \gloskey{prefixfirstplural} has not been supplied, make it the same
+% as \gloskey{prefixplural}.
+% \begin{macrocode}
+ \expandafter\gls@assign@field\expandafter
+ {\csname glo@\@glo@label @prefixplural\endcsname}{\@glo@label}%
+ {prefixfirstplural}{\@glo@entryprefixfirstplural}%
+}
+% \end{macrocode}
+%
+% Define commands to access these fields:
+%\begin{macro}{\glsentryprefixfirst}
+% \begin{macrocode}
+\newcommand*{\glsentryprefixfirst}[1]{\csuse{glo@#1@prefixfirst}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsentryprefixfirstplural}
+% \begin{macrocode}
+\newcommand*{\glsentryprefixfirstplural}[1]{\csuse{glo@#1@prefixfirstplural}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsentryprefix}
+% \begin{macrocode}
+\newcommand*{\glsentryprefix}[1]{\csuse{glo@#1@prefix}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsentryprefixplural}
+% \begin{macrocode}
+\newcommand*{\glsentryprefixplural}[1]{\csuse{glo@#1@prefixplural}}
+% \end{macrocode}
+%\end{macro}
+%
+% Now for the initial upper case variants:
+%\begin{macro}{\Glsentryprefixfirst}
+% \begin{macrocode}
+\newrobustcmd*{\Glsentryprefixfirst}[1]{%
+ \protected@edef\@glo@text{\csname glo@#1@prefixfirst\endcsname}%
+ \xmakefirstuc\@glo@text
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Glsentryprefixfirstplural}
+% \begin{macrocode}
+\newrobustcmd*{\Glsentryprefixfirstplural}[1]{%
+ \protected@edef\@glo@text{\csname glo@#1@prefixfirstplural\endcsname}%
+ \xmakefirstuc\@glo@text
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Glsentryprefix}
+% \begin{macrocode}
+\newrobustcmd*{\Glsentryprefix}[1]{%
+ \protected@edef\@glo@text{\csname glo@#1@prefix\endcsname}%
+ \xmakefirstuc\@glo@text
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Glsentryprefixplural}
+% \begin{macrocode}
+\newrobustcmd*{\Glsentryprefixplural}[1]{%
+ \protected@edef\@glo@text{\csname glo@#1@prefixplural\endcsname}%
+ \xmakefirstuc\@glo@text
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Define commands to determine if the prefix keys have been set:
+%\begin{macro}{\ifglshasprefix}
+% \begin{macrocode}
+\newcommand*{\ifglshasprefix}[3]{%
+ \ifcsempty{glo@#1@prefix}%
+ {#3}%
+ {#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ifglshasprefixplural}
+% \begin{macrocode}
+\newcommand*{\ifglshasprefixplural}[3]{%
+ \ifcsempty{glo@#1@prefixplural}%
+ {#3}%
+ {#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ifglshasprefixfirst}
+% \begin{macrocode}
+\newcommand*{\ifglshasprefixfirst}[3]{%
+ \ifcsempty{glo@#1@prefixfirst}%
+ {#3}%
+ {#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\ifglshasprefixfirstplural}
+% \begin{macrocode}
+\newcommand*{\ifglshasprefixfirstplural}[3]{%
+ \ifcsempty{glo@#1@prefixfirstplural}%
+ {#3}%
+ {#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Define commands that insert the prefix before commands like \ics{gls}:
+%\begin{macro}{\pgls}
+%\changes{4.08}{2014-07-30}{changed to use \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd{\pgls}{\@gls@hyp@opt\@pgls}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \@spgls}
+%\begin{macro}{\@pgls}
+% Unstarred version.
+% \begin{macrocode}
+\newcommand*{\@pgls}[2][]{%
+ \new@ifnextchar[%
+ {\@pgls@{#1}{#2}}%
+ {\@pgls@{#1}{#2}[]}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@pgls@}
+% Read in the final optional argument:
+% \begin{macrocode}
+\def\@pgls@#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+ \ifglsused{#2}%
+ {%
+ \glsentryprefix{#2}%
+ }%
+ {%
+ \glsentryprefixfirst{#2}%
+ }%
+ \@gls@{#1}{#2}[#3]%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Similarly for the plural version:
+%\begin{macro}{\pglspl}
+%\changes{4.08}{2014-07-30}{changed to use \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd{\pglspl}{\@gls@hyp@opt\@pglspl}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \@spglspl}
+%\begin{macro}{\@pglspl}
+% Unstarred version.
+% \begin{macrocode}
+\newcommand*{\@pglspl}[2][]{%
+ \new@ifnextchar[%
+ {\@pglspl@{#1}{#2}}%
+ {\@pglspl@{#1}{#2}[]}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@pglspl@}
+% Read in the final optional argument:
+% \begin{macrocode}
+\def\@pglspl@#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+ \ifglsused{#2}%
+ {%
+ \glsentryprefixplural{#2}%
+ }%
+ {%
+ \glsentryprefixfirstplural{#2}%
+ }%
+ \@glspl@{#1}{#2}[#3]%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Now for the first letter upper case versions:
+%\begin{macro}{\Pgls}
+%\changes{4.08}{2014-07-30}{changed to use \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd{\Pgls}{\@gls@hyp@opt\@Pgls}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \@sPgls}
+%\begin{macro}{\@Pgls}
+% Unstarred version.
+% \begin{macrocode}
+\newcommand*{\@Pgls}[2][]{%
+ \new@ifnextchar[%
+ {\@Pgls@{#1}{#2}}%
+ {\@Pgls@{#1}{#2}[]}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@Pgls@}
+% Read in the final optional argument:
+% \begin{macrocode}
+\def\@Pgls@#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+ \ifglsused{#2}%
+ {%
+ \ifglshasprefix{#2}%
+ {%
+ \Glsentryprefix{#2}%
+ \@gls@{#1}{#2}[#3]%
+ }%
+ {\@Gls@{#1}{#2}[#3]}%
+ }%
+ {%
+ \ifglshasprefixfirst{#2}%
+ {%
+ \Glsentryprefixfirst{#2}%
+ \@gls@{#1}{#2}[#3]%
+ }%
+ {\@Gls@{#1}{#2}[#3]}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Similarly for the plural version:
+%\begin{macro}{\Pglspl}
+%\changes{4.08}{2014-07-30}{changed to use \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd{\Pglspl}{\@gls@hyp@opt\@Pglspl}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \@sPglspl}
+%\begin{macro}{\@Pglspl}
+% Unstarred version.
+% \begin{macrocode}
+\newcommand*{\@Pglspl}[2][]{%
+ \new@ifnextchar[%
+ {\@Pglspl@{#1}{#2}}%
+ {\@Pglspl@{#1}{#2}[]}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@Pglspl@}
+% Read in the final optional argument:
+% \begin{macrocode}
+\def\@Pglspl@#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+ \ifglsused{#2}%
+ {%
+ \ifglshasprefixplural{#2}%
+ {%
+ \Glsentryprefixplural{#2}%
+ \@glspl@{#1}{#2}[#3]%
+ }%
+ {\@Glspl@{#1}{#2}[#3]}%
+ }%
+ {%
+ \ifglshasprefixfirstplural{#2}%
+ {%
+ \Glsentryprefixfirstplural{#2}%
+ \@glspl@{#1}{#2}[#3]%
+ }%
+ {\@Glspl@{#1}{#2}[#3]}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Finally the all upper case versions:
+%\begin{macro}{\PGLS}
+%\changes{4.08}{2014-07-30}{changed to use \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd{\PGLS}{\@gls@hyp@opt\@PGLS}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \@sPGLS}
+%\begin{macro}{\@PGLS}
+% Unstarred version.
+% \begin{macrocode}
+\newcommand*{\@PGLS}[2][]{%
+ \new@ifnextchar[%
+ {\@PGLS@{#1}{#2}}%
+ {\@PGLS@{#1}{#2}[]}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@PGLS@}
+% Read in the final optional argument:
+% \begin{macrocode}
+\def\@PGLS@#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+ \ifglsused{#2}%
+ {%
+ \mfirstucMakeUppercase{\glsentryprefix{#2}}%
+ }%
+ {%
+ \mfirstucMakeUppercase{\glsentryprefixfirst{#2}}%
+ }%
+ \@GLS@{#1}{#2}[#3]%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% Plural version:
+%\begin{macro}{\PGLSpl}
+%\changes{4.08}{2014-07-30}{changed to use \cs{@gls@hyp@opt}}
+% \begin{macrocode}
+\newrobustcmd{\PGLSpl}{\@gls@hyp@opt\@PGLSpl}
+% \end{macrocode}
+%\end{macro}
+%\changes{4.08}{2014-07-30}{removed \@sPGLSpl}
+%\begin{macro}{\@PGLSpl}
+% Unstarred version.
+% \begin{macrocode}
+\newcommand*{\@PGLSpl}[2][]{%
+ \new@ifnextchar[%
+ {\@PGLSpl@{#1}{#2}}%
+ {\@PGLSpl@{#1}{#2}[]}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@PGLSpl@}
+% Read in the final optional argument:
+% \begin{macrocode}
+\def\@PGLSpl@#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+ \ifglsused{#2}%
+ {%
+ \mfirstucMakeUppercase{\glsentryprefixplural{#2}}%
+ }%
+ {%
+ \mfirstucMakeUppercase{\glsentryprefixfirstplural{#2}}%
+ }%
+ \@GLSpl@{#1}{#2}[#3]%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\iffalse
+% \begin{macrocode}
+%</glossaries-prefix.sty>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*glossary-hypernav.sty>
+% \end{macrocode}
+%\fi
+%\chapter{Glossary Styles}
+% \section{Glossary hyper-navigation definitions (glossary-hypernav package)}
+%\label{sec:code:hypernav}
+% Package Definition:
+% \begin{macrocode}
+\ProvidesPackage{glossary-hypernav}[2019/01/06 v4.42 (NLCT)]
+% \end{macrocode}
+%
+% The commands defined in this package are provided to
+% help navigate around the groups within a glossary
+% (see \autoref{sec:code:printglos}.)
+% \ics{printglossary} (and \ics{printglossaries})
+% set \cs{@glo@type} to the label of the current
+% glossary. This is used to create a unique hypertarget in
+% the event of multiple glossaries.
+%\\[10pt]
+% \cs{glsnavhyperlink}\oarg{type}\marg{label}\marg{text}\\[10pt]
+% This command makes \meta{text} a hyperlink to the glossary group
+% whose label is given by \meta{label} for the glossary given
+% by \meta{type}.
+%\begin{macro}{\glsnavhyperlink}
+%\changes{1.14}{2008-06-17}{changed \cs{edef} to \cs{protected@edef}}
+%\changes{1.17}{2008-12-26}{replaced \cs{hyperlink} to
+%\cs{@glslink}}
+% \begin{macrocode}
+\newcommand*{\glsnavhyperlink}[3][\@glo@type]{%
+ \edef\gls@grplabel{#2}\protected@edef\@gls@grptitle{#3}%
+ \@glslink{\glsnavhyperlinkname{#1}{#2}}{#3}}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsnavhyperlinkname}
+%\changes{4.29}{2017-01-19}{new}
+%Expands to the hypertarget name. The first argument is the glossary
+%type. The second argument is the group label.
+% \begin{macrocode}
+\newcommand*{\glsnavhyperlinkname}[2]{glsn:#1@#2}
+% \end{macrocode}
+%\end{macro}
+%\vskip5pt
+% \cs{glsnavhypertarget}\oarg{type}\marg{label}\marg{text}\\[10pt]
+% This command makes \meta{text} a hypertarget for the glossary group
+% whose label is given by \meta{label} in the glossary given
+% by \meta{type}. If \meta{type} is omitted, \cs{@glo@type} is
+% used which is set by \ics{printglossary} to the current
+% glossary label.
+%\begin{macro}{\glsnavhypertarget}
+%\changes{1.14}{2008-06-17}{added write to aux file}
+%\changes{1.15}{2008-08-15}{added check if rerun required}
+%\changes{1.17}{2008-12-26}{replaced \cs{hypertarget} to
+%\cs{@glstarget}}
+% \begin{macrocode}
+\newcommand*{\glsnavhypertarget}[3][\@glo@type]{%
+ \@glsnavhypertarget{#1}{#2}{#3}%
+}
+% \end{macrocode}
+%\end{macro}
+%The actual code is now in an internal command that doesn't have an
+%optional argument, which makes it easier to save and restore the
+%original behaviour.
+%\begin{macro}{\@glsnavhypertarget}
+%\changes{4.32}{2017-08-24}{new}
+% \begin{macrocode}
+\newcommand*{\@glsnavhypertarget}[3]{%
+% \end{macrocode}
+% Add this group to the aux file for re-run check.
+% \begin{macrocode}
+ \protected@write\@auxout{}{\string\@gls@hypergroup{#1}{#2}}%
+% \end{macrocode}
+% Add the target.
+% \begin{macrocode}
+ \@glstarget{\glsnavhyperlinkname{#1}{#2}}{#3}%
+% \end{macrocode}
+% Check list of known groups to determine if a re-run is required.
+% \begin{macrocode}
+ \expandafter\let
+ \expandafter\@gls@list\csname @gls@hypergrouplist@#1\endcsname
+% \end{macrocode}
+% Iterate through list and terminate loop if this group is found.
+% \begin{macrocode}
+ \@for\@gls@elem:=\@gls@list\do{%
+ \ifthenelse{\equal{\@gls@elem}{#2}}{\@endfortrue}{}}%
+% \end{macrocode}
+% Check if list terminated prematurely.
+% \begin{macrocode}
+ \if@endfor
+ \else
+% \end{macrocode}
+% This group was not included in the list, so issue a warning.
+% \begin{macrocode}
+ \GlossariesWarningNoLine{Navigation panel
+ for glossary type `#1'^^Jmissing group `#2'}%
+ \gdef\gls@hypergrouprerun{%
+ \GlossariesWarningNoLine{Navigation panel
+ has changed. Rerun LaTeX}}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\gls@hypergrouprerun}
+% Give a warning at the end if re-run required
+%\changes{1.15}{2008-08-15}{new}
+% \begin{macrocode}
+\let\gls@hypergrouprerun\relax
+\AtEndDocument{\gls@hypergrouprerun}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@hypergroup}
+% This adds to (or creates) the command \cs{@gls@hypergrouplist@}\meta{glossary type}
+% which lists all groups for a given glossary, so that
+% the navigation bar only contains those groups that are present.
+% However it requires at least 2 runs to ensure the information is
+% up-to-date.
+%\changes{1.14}{2008-06-17}{new}
+% \begin{macrocode}
+\newcommand*{\@gls@hypergroup}[2]{%
+\@ifundefined{@gls@hypergrouplist@#1}{%
+ \expandafter\xdef\csname @gls@hypergrouplist@#1\endcsname{#2}%
+}{%
+ \expandafter\let\expandafter\@gls@tmp
+ \csname @gls@hypergrouplist@#1\endcsname
+ \expandafter\xdef\csname @gls@hypergrouplist@#1\endcsname{%
+ \@gls@tmp,#2}%
+}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% The \cs{glsnavigation} command displays a simple glossary
+% group navigation.
+% The symbol and number elements are defined separately,
+% so that they can be suppressed if need be. (In earlier verions this
+% command will produce a link to all 28 groups, but some groups
+% may not be defined if there are groups that do not contain any
+% terms, in which case you will get an undefined hyperlink warning.
+% Version 1.14 changed this to only use labels for groups that are
+% present.)
+% Now for the whole navigation bit:
+%\begin{macro}{\glsnavigation}
+% \changes{1.14}{2008-06-17}{changed to only use labels for
+% groups that are present}
+% \begin{macrocode}
+\newcommand*{\glsnavigation}{%
+ \def\@gls@between{}%
+ \ifcsundef{@gls@hypergrouplist@\@glo@type}%
+ {%
+ \def\@gls@list{}%
+ }%
+ {%
+ \expandafter\let\expandafter\@gls@list
+ \csname @gls@hypergrouplist@\@glo@type\endcsname
+ }%
+ \@for\@gls@tmp:=\@gls@list\do{%
+ \@gls@between
+% \end{macrocode}
+%\changes{3.11a}{2013-10-15}{switched to using
+%\cs{@gls@getgrouptitle}}
+% \begin{macrocode}
+ \@gls@getgrouptitle{\@gls@tmp}{\@gls@grptitle}%
+ \glsnavhyperlink{\@gls@tmp}{\@gls@grptitle}%
+ \let\@gls@between\glshypernavsep
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glshypernavsep}
+% Separator for the hyper navigation bar.
+% \begin{macrocode}
+\newcommand*{\glshypernavsep}{\space\textbar\space}
+% \end{macrocode}
+%\end{macro}
+% The \cs{glssymbolnav} produces a simple navigation set of
+% links for just the symbol and number groups. This used to be used at
+% the start of \cs{glsnavigation}. This command is no longer needed.
+%\begin{macro}{\glssymbolnav}
+% \begin{macrocode}
+\newcommand*{\glssymbolnav}{%
+ \glsnavhyperlink{glssymbols}{\glsgetgrouptitle{glssymbols}}%
+ \glshypernavsep
+ \glsnavhyperlink{glsnumbers}{\glsgetgrouptitle{glsnumbers}}%
+ \glshypernavsep
+}
+% \end{macrocode}
+%\end{macro}
+%\iffalse
+% \begin{macrocode}
+%</glossary-hypernav.sty>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*glossary-inline.sty>
+% \end{macrocode}
+%\fi
+% \section{In-line Style (glossary-inline.sty)}
+% This defines an in-line style where the entries are
+% comma-separated with just the name and description displayed.
+% \begin{macrocode}
+\ProvidesPackage{glossary-inline}[2019/01/06 v4.42 (NLCT)]
+% \end{macrocode}
+%
+%\begin{style}{inline}
+% Define the inline style.
+% \begin{macrocode}
+\newglossarystyle{inline}{%
+% \end{macrocode}
+% Start of glossary sets up first empty separator between entries.
+% (This is then changed by \cs{glossentry})
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {%
+ \def\gls@inlinesep{}%
+ \def\gls@inlinesubsep{}%
+ \def\gls@inlinepostchild{}%
+ }%
+ {\glspostinline}%
+% \end{macrocode}
+% No header:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{}%
+% \end{macrocode}
+% No group headings (if heading is required, add
+% \ics{glsinlinedopostchild} to start definition in case heading
+% follows a child entry):
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{}%
+% \end{macrocode}
+% Just display separator followed by name and description:
+%\changes{3.08a}{2013-08-30}{updated inline style to use
+%\cs{glossentry} and \cs{subglossentry}}
+% \begin{macrocode}
+ \renewcommand{\glossentry}[2]{%
+ \glsinlinedopostchild
+ \gls@inlinesep
+ \glsentryitem{##1}%
+ \glsinlinenameformat{##1}{%
+ \glossentryname{##1}%
+ }%
+ \ifglsdescsuppressed{##1}%
+ {%
+ \glsinlineemptydescformat
+ {%
+ \glossentrysymbol{##1}%
+ }%
+ {%
+ ##2%
+ }%
+ }%
+ {%
+ \ifglshasdesc{##1}%
+ {\glsinlinedescformat{\glossentrydesc{##1}}{\glossentrysymbol{##1}}{##2}}%
+ {\glsinlineemptydescformat{\glossentrysymbol{##1}}{##2}}%
+ }%
+ \ifglshaschildren{##1}%
+ {%
+ \glsresetsubentrycounter
+ \glsinlineparentchildseparator
+ \def\gls@inlinesubsep{}%
+ \def\gls@inlinepostchild{\glsinlinepostchild}%
+ }%
+ {}%
+ \def\gls@inlinesep{\glsinlineseparator}%
+ }%
+% \end{macrocode}
+% Sub-entries display description:
+% \begin{macrocode}
+ \renewcommand{\subglossentry}[3]{%
+ \gls@inlinesubsep%
+ \glsinlinesubnameformat{##2}{%
+ \glossentryname{##2}}%
+ \glssubentryitem{##2}%
+ \glsinlinesubdescformat{\glossentrydesc{##2}}{\glossentrysymbol{##2}}{##3}%
+ \def\gls@inlinesubsep{\glsinlinesubseparator}%
+ }%
+% \end{macrocode}
+% Nothing special between groups:
+% \begin{macrocode}
+ \renewcommand*{\glsgroupskip}{}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{macro}{\glsinlinedopostchild}
+% \begin{macrocode}
+\newcommand*{\glsinlinedopostchild}{%
+ \gls@inlinepostchild
+ \def\gls@inlinepostchild{}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsinlineseparator}
+% Separator to use between entries.
+% \begin{macrocode}
+\newcommand*{\glsinlineseparator}{;\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsinlinesubseparator}
+% Separator to use between sub-entries.
+% \begin{macrocode}
+\newcommand*{\glsinlinesubseparator}{,\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsinlineparentchildseparator}
+% Separator to use between parent and children.
+% \begin{macrocode}
+\newcommand*{\glsinlineparentchildseparator}{:\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsinlinepostchild}
+%\changes{3.03}{2012/09/21}{new}
+% Hook to use between child and next entry
+% \begin{macrocode}
+\newcommand*{\glsinlinepostchild}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glspostinline}
+% Terminator for inline glossary.
+%\changes{3.03}{2012/09/21}{replaced ``.'' with \cs{glspostdescription}}
+% \begin{macrocode}
+\newcommand*{\glspostinline}{\glspostdescription\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsinlinenameformat}
+%\changes{3.03}{2012/09/21}{new}
+% Formats the name of the entry (first argument label, second
+% argument name):
+% \begin{macrocode}
+\newcommand*{\glsinlinenameformat}[2]{\glstarget{#1}{#2}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsinlinedescformat}
+%\changes{3.03}{2012/09/21}{new}
+% Formats the entry's description, symbol and location list:
+% \begin{macrocode}
+\newcommand*{\glsinlinedescformat}[3]{\space#1}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsinlineemptydescformat}
+%\changes{3.03}{2012/09/21}{new}
+% Formats the entry's symbol and location list when the description
+% is empty:
+% \begin{macrocode}
+\newcommand*{\glsinlineemptydescformat}[2]{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsinlinesubnameformat}
+%\changes{3.03}{2012/09/21}{new}
+% Formats the name of the subentry (first argument label, second
+% argument name):
+% \begin{macrocode}
+\newcommand*{\glsinlinesubnameformat}[2]{\glstarget{#1}{}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsinlinesubdescformat}
+%\changes{3.03}{2012/09/21}{new}
+% Formats the subentry's description, symbol and location list:
+% \begin{macrocode}
+\newcommand*{\glsinlinesubdescformat}[3]{#1}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\iffalse
+% \begin{macrocode}
+%</glossary-inline.sty>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*glossary-list.sty>
+% \end{macrocode}
+%\fi
+% \section{List Style (glossary-list.sty)}
+% The \isty{glossary-list} style file defines glossary styles
+% that use the \env{description} environment. Note that since
+% the entry name is placed in the optional argument to the
+% \ics{item} command, it will appear in a bold font by
+% default.
+% \begin{macrocode}
+\ProvidesPackage{glossary-list}[2019/01/06 v4.42 (NLCT)]
+% \end{macrocode}
+%\begin{macro}{\indexspace}
+%\changes{4.13}{2015-02-03}{new}
+% There are a few classes that don't define \cs{indexspace}, so
+% provide a definition if it hasn't been defined.
+% \begin{macrocode}
+\providecommand{\indexspace}{%
+ \par \vskip 10\p@ \@plus 5\p@ \@minus 3\p@ \relax
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glslistgroupheaderfmt}
+%\changes{4.22}{2016-04-19}{new}
+% Provide a way of adjusting the format of the group headings.
+% \begin{macrocode}
+\newcommand*{\glslistgroupheaderfmt}[1]{#1}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glslistnavigationitem}
+%\changes{4.22}{2016-04-19}{new}
+% Provide a way of adjusting the format of the navigation header.
+% This puts the navigation line inside the optional argument
+% of item to prevent unwanted space occurring at the start, but
+% this can cause a problem if the navigation line is too long.
+% With this command, it makes it easier for the user to customise
+% the style without having to remember to modify \cs{glossaryheader}
+% after the style has been set.
+% \begin{macrocode}
+\newcommand*{\glslistnavigationitem}[1]{\item[#1]}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{style}{list}
+% The \glostyle{list} glossary style
+% uses the \env{description} environment. The group separator
+% \ics{glsgroupskip} is redefined as \cs{indexspace}
+% which produces a gap between groups. The glossary heading
+% and the group headings do nothing. Sub-entries immediately
+% follow the main entry without the sub-entry name. This style
+% does not use the entry's symbol. This is used as the default
+% style for the \sty{glossaries} package.
+% \begin{macrocode}
+\newglossarystyle{list}{%
+% \end{macrocode}
+% Use \env{description} environment:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\begin{description}}{\end{description}}%
+% \end{macrocode}
+% No header at the start of the environment:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{}%
+% \end{macrocode}
+% No group headings:
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{}%
+% \end{macrocode}
+% Main (level 0) entries start a new item in the list:
+%\changes{3.08a}{2013-08-30}{updated list style to use
+%\cs{glossentry} and \cs{subglossentry}}
+% \begin{macrocode}
+ \renewcommand*{\glossentry}[2]{%
+ \item[\glsentryitem{##1}%
+ \glstarget{##1}{\glossentryname{##1}}]
+ \glossentrydesc{##1}\glspostdescription\space ##2}%
+% \end{macrocode}
+% Sub-entries continue on the same line:
+%\changes{4.22}{2016-04-19}{fixed missing space before description}
+% \begin{macrocode}
+ \renewcommand*{\subglossentry}[3]{%
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}\space
+ \glossentrydesc{##2}\glspostdescription\space ##3.}%
+% \end{macrocode}
+% Add vertical space between groups:
+%\changes{3.03}{2012/09/21}{added check for glsnogroupskip}
+% \begin{macrocode}
+ \renewcommand*{\glsgroupskip}{\ifglsnogroupskip\else\indexspace\fi}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{listgroup}
+% The \glostyle{listgroup} style is like the \glostyle{list}
+% style, but the glossary groups have headings.
+%\changes{1.08}{2007-10-13}{changed listgroup style to use \cs{glsgetgrouptitle}}
+% \begin{macrocode}
+\newglossarystyle{listgroup}{%
+% \end{macrocode}
+% Base it on the \glostyle{list} style:
+% \begin{macrocode}
+ \setglossarystyle{list}%
+% \end{macrocode}
+% Each group has a heading:
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{%
+ \item[\glslistgroupheaderfmt{\glsgetgrouptitle{##1}}]}}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{listhypergroup}
+% The \glostyle{listhypergroup} style is like the \glostyle{listgroup}
+% style, but has a set of links to the groups at the
+% start of the glossary.
+% \begin{macrocode}
+\newglossarystyle{listhypergroup}{%
+% \end{macrocode}
+% Base it on the \glostyle{list} style:
+% \begin{macrocode}
+ \setglossarystyle{list}%
+% \end{macrocode}
+% Add navigation links at the start of the environment.
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{%
+ \glslistnavigationitem{\glsnavigation}}%
+% \end{macrocode}
+% Each group has a heading with a hypertarget:
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{%
+ \item[\glslistgroupheaderfmt
+ {\glsnavhypertarget{##1}{\glsgetgrouptitle{##1}}}]}}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{altlist}
+% The \glostyle{altlist} glossary style is like the \glostyle{list}
+% style, but places the description on a new line. Sub-entries
+% follow in separate paragraphs without the sub-entry name. This
+% style does not use the entry's symbol.
+% \begin{macrocode}
+\newglossarystyle{altlist}{%
+% \end{macrocode}
+% Base it on the \glostyle{list} style:
+% \begin{macrocode}
+ \setglossarystyle{list}%
+% \end{macrocode}
+% Main (level 0) entries start a new item in the list with a
+% line break after the entry name:
+%\changes{3.08a}{2013-08-30}{updated altlist style to use
+%\cs{glossentry} and \cs{subglossentry}}
+% \begin{macrocode}
+ \renewcommand*{\glossentry}[2]{%
+ \item[\glsentryitem{##1}%
+ \glstarget{##1}{\glossentryname{##1}}]%
+% \end{macrocode}
+%\changes{3.04}{2012-11-11}{replaced \cs{newline} with paragraph break}
+% Version 3.04 changed \cs{newline} to the following paragraph break
+% stuff (thanks to Daniel Gebhardt for supplying the fix) to prevent
+% a page break occurring at this point.
+% \begin{macrocode}
+ \mbox{}\par\nobreak\@afterheading
+ \glossentrydesc{##1}\glspostdescription\space ##2}%
+% \end{macrocode}
+% Sub-entries start a new paragraph:
+% \begin{macrocode}
+ \renewcommand{\subglossentry}[3]{%
+ \par
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}\glossentrydesc{##2}\glspostdescription\space ##3}%
+}
+% \end{macrocode}
+%\end{style}
+%\begin{style}{altlistgroup}
+% The \glostyle{altlistgroup} glossary style is like the
+% \glostyle{altlist} style, but the glossary groups have headings.
+%\changes{1.08}{2007-10-13}{changed altlistgroup style to use \cs{glsgetgrouptitle}}
+% \begin{macrocode}
+\newglossarystyle{altlistgroup}{%
+% \end{macrocode}
+% Base it on the \glostyle{altlist} style:
+% \begin{macrocode}
+ \setglossarystyle{altlist}%
+% \end{macrocode}
+% Each group has a heading:
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{%
+ \item[\glslistgroupheaderfmt{\glsgetgrouptitle{##1}}]}}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{altlisthypergroup}
+% The \glostyle{altlisthypergroup} glossary style is like the
+% \glostyle{altlistgroup} style, but has a
+% set of links to the groups at the start of the glossary.
+% \begin{macrocode}
+\newglossarystyle{altlisthypergroup}{%
+% \end{macrocode}
+% Base it on the \glostyle{altlist} style:
+% \begin{macrocode}
+ \setglossarystyle{altlist}%
+% \end{macrocode}
+% Add navigation links at the start of the environment.
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{%
+ \glslistnavigationitem{\glsnavigation}}%
+% \end{macrocode}
+% Each group has a heading with a hypertarget:
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{%
+ \item[\glslistgroupheaderfmt
+ {\glsnavhypertarget{##1}{\glsgetgrouptitle{##1}}}]}}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{listdotted}
+% The \glostyle{listdotted} glossary style was supplied by
+% Axel~Menzel. I've modified it slightly so that the distance from
+% the start of the name to the end of the dotted line is specified
+% by \cs{glslistdottedwidth}.
+% Note that this style ignores the page numbers as well as the
+% symbol. Sub-entries are displayed in the same way as top-level
+% entries.
+% \begin{macrocode}
+\newglossarystyle{listdotted}{%
+% \end{macrocode}
+% Base it on the \glostyle{list} style:
+% \begin{macrocode}
+ \setglossarystyle{list}%
+% \end{macrocode}
+% Each main (level 0) entry starts a new item:
+%\changes{3.08a}{2013-08-30}{updated listdotted style to use
+%\cs{glossentry} and \cs{subglossentry}}
+% \begin{macrocode}
+ \renewcommand*{\glossentry}[2]{%
+ \item[]\makebox[\glslistdottedwidth][l]{%
+ \glsentryitem{##1}%
+ \glstarget{##1}{\glossentryname{##1}}%
+ \unskip\leaders\hbox to 2.9mm{\hss.}\hfill\strut}\glossentrydesc{##1}}%
+% \end{macrocode}
+% Sub entries have the same format as main entries:
+% \begin{macrocode}
+ \renewcommand*{\subglossentry}[3]{%
+ \item[]\makebox[\glslistdottedwidth][l]{%
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\glossentryname{##2}}%
+ \unskip\leaders\hbox to 2.9mm{\hss.}\hfill\strut}\glossentrydesc{##2}}%
+}
+% \end{macrocode}
+%\end{style}
+%\begin{macro}{\glslistdottedwidth}
+%\changes{2.01}{2009 May 30}{changed \cs{linewidth} to \cs{hsize}}
+% \begin{macrocode}
+\newlength\glslistdottedwidth
+\setlength{\glslistdottedwidth}{.5\hsize}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{style}{sublistdotted}
+% This style is similar to the glostyle{listdotted} style, except
+% that the main entries just have the name displayed.
+% \begin{macrocode}
+\newglossarystyle{sublistdotted}{%
+% \end{macrocode}
+% Base it on the \glostyle{listdotted} style:
+% \begin{macrocode}
+ \setglossarystyle{listdotted}%
+% \end{macrocode}
+% Main (level 0) entries just display the name:
+% \begin{macrocode}
+ \renewcommand*{\glossentry}[2]{%
+ \item[\glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}}]}%
+}
+% \end{macrocode}
+%\end{style}
+%\iffalse
+% \begin{macrocode}
+%</glossary-list.sty>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*glossary-long.sty>
+% \end{macrocode}
+%\fi
+% \section{Glossary Styles using longtable (the glossary-long
+% package)}
+% The glossary styles defined in the \isty{glossary-long} package
+% used the \env{longtable} environment in the glossary.
+% \begin{macrocode}
+\ProvidesPackage{glossary-long}[2019/01/06 v4.42 (NLCT)]
+% \end{macrocode}
+% Requires the \isty{longtable} package:
+% \begin{macrocode}
+\RequirePackage{longtable}
+% \end{macrocode}
+%\begin{macro}{\glsdescwidth}
+% This is a length that governs the width of the description column.
+% (There's a chance that the user may specify \pkgopt{nolong}
+% and then load \isty{glossary-long} later, in which case
+% \cs{glsdescwidth} may have already been defined by
+% \isty{glossary-super}. The same goes for \cs{glspagelistwidth}.)
+%\changes{2.01}{2009 May 30}{changed \cs{linewidth} to \cs{hsize}}
+% \begin{macrocode}
+\@ifundefined{glsdescwidth}{%
+ \newlength\glsdescwidth
+ \setlength{\glsdescwidth}{0.6\hsize}
+}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glspagelistwidth}
+% This is a length that governs the width of the page list column.
+%\changes{2.01}{2009 May 30}{changed \cs{linewidth} to \cs{hsize}}
+% \begin{macrocode}
+\@ifundefined{glspagelistwidth}{%
+ \newlength\glspagelistwidth
+ \setlength{\glspagelistwidth}{0.1\hsize}
+}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{style}{long}
+% The \glostyle{long} glossary style command which
+% uses the \env{longtable} environment:
+% \begin{macrocode}
+\newglossarystyle{long}{%
+% \end{macrocode}
+% Use \env{longtable} with two columns:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\begin{longtable}{lp{\glsdescwidth}}}%
+ {\end{longtable}}%
+% \end{macrocode}
+% Do nothing at the start of the environment:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{}%
+% \end{macrocode}
+% No heading between groups:
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{}%
+% \end{macrocode}
+% Main (level 0) entries displayed in a row:
+%\changes{3.08a}{2013-09-28}{updated to use \cs{glossentry} and
+%\cs{subglossentry}}
+%\changes{3.13a}{2013-11-05}{switched to \cs{tabularnewline}}
+% \begin{macrocode}
+ \renewcommand{\glossentry}[2]{%
+ \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} &
+ \glossentrydesc{##1}\glspostdescription\space ##2\tabularnewline
+ }%
+% \end{macrocode}
+% Sub entries displayed on the following row without the name:
+%\changes{4.22}{2016-04-19}{fixed typo in \cs{glossentrydesc}}
+% \begin{macrocode}
+ \renewcommand{\subglossentry}[3]{%
+ &
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}\glossentrydesc{##2}\glspostdescription\space
+ ##3\tabularnewline
+ }%
+% \end{macrocode}
+% Blank row between groups:
+%\changes{3.03}{2012/09/21}{added check for glsnogroupskip}
+%\changes{3.13a}{2013-11-05}{switched to \cs{tabularnewline}}
+%\changes{4.23}{2016-04-30}{check for nogroupskip changed}
+%The check for \pkgopt{nogroupskip} must occur outside
+%\cs{glsgroupskip}
+%(\url{http://www.dickimaw-books.com/cgi-bin/bugtracker.cgi?action=view&key=108})
+% \begin{macrocode}
+ \ifglsnogroupskip
+ \renewcommand*{\glsgroupskip}{}%
+ \else
+ \renewcommand*{\glsgroupskip}{ & \tabularnewline}%
+ \fi
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{longborder}
+% The \glostyle{longborder} style is like the above, but with horizontal and
+% vertical lines:
+% \begin{macrocode}
+\newglossarystyle{longborder}{%
+% \end{macrocode}
+% Base it on the glostyle{long} style:
+% \begin{macrocode}
+ \setglossarystyle{long}%
+% \end{macrocode}
+% Use \env{longtable} with two columns with vertical lines
+% between each column:
+% \begin{macrocode}
+ \renewenvironment{theglossary}{%
+ \begin{longtable}{|l|p{\glsdescwidth}|}}{\end{longtable}}%
+% \end{macrocode}
+% Place horizontal lines at the head and foot of the table:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{\hline\endhead\hline\endfoot}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{longheader}
+% The \glostyle{longheader} style is like the
+% \glostyle{long} style but with a header:
+% \begin{macrocode}
+\newglossarystyle{longheader}{%
+% \end{macrocode}
+% Base it on the glostyle{long} style:
+% \begin{macrocode}
+ \setglossarystyle{long}%
+% \end{macrocode}
+% Set the table's header:
+%\changes{3.13a}{2013-11-05}{switched to \cs{tabularnewline}}
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{%
+ \bfseries \entryname & \bfseries \descriptionname\tabularnewline\endhead}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{longheaderborder}
+% The \glostyle{longheaderborder} style is
+% like the \glostyle{long} style but with a header and border:
+% \begin{macrocode}
+\newglossarystyle{longheaderborder}{%
+% \end{macrocode}
+% Base it on the glostyle{longborder} style:
+% \begin{macrocode}
+ \setglossarystyle{longborder}%
+% \end{macrocode}
+% Set the table's header and add horizontal line to table's foot:
+%\changes{3.13a}{2013-11-05}{switched to \cs{tabularnewline}}
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{%
+ \hline\bfseries \entryname & \bfseries
+ \descriptionname\tabularnewline\hline
+ \endhead
+ \hline\endfoot}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{long3col}
+% The \glostyle{long3col} style is like \glostyle{long} but with 3 columns
+% \begin{macrocode}
+\newglossarystyle{long3col}{%
+% \end{macrocode}
+% Use a \env{longtable} with 3 columns:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\begin{longtable}{lp{\glsdescwidth}p{\glspagelistwidth}}}%
+ {\end{longtable}}%
+% \end{macrocode}
+% No table header:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{}%
+% \end{macrocode}
+% No headings between groups:
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{}%
+% \end{macrocode}
+% Main (level 0) entries on a row (name in first column,
+% description in second column, page list in last column):
+%\changes{3.13a}{2013-11-05}{switched to \cs{tabularnewline}}
+% \begin{macrocode}
+ \renewcommand{\glossentry}[2]{%
+ \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} &
+ \glossentrydesc{##1} & ##2\tabularnewline
+ }%
+% \end{macrocode}
+% Sub-entries on a separate row (no name, description in
+% second column, page list in third column):
+% \begin{macrocode}
+ \renewcommand{\subglossentry}[3]{%
+ &
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}\glossentrydesc{##2} &
+ ##3\tabularnewline
+ }%
+% \end{macrocode}
+% Blank row between groups:
+%\changes{3.03}{2012/09/21}{added check for glsnogroupskip}
+%\changes{4.23}{2016-04-30}{check for nogroupskip changed}
+%The check for \pkgopt{nogroupskip} must occur outside
+%\cs{glsgroupskip}
+%(\url{http://www.dickimaw-books.com/cgi-bin/bugtracker.cgi?action=view&key=108})
+% \begin{macrocode}
+ \ifglsnogroupskip
+ \renewcommand*{\glsgroupskip}{}%
+ \else
+ \renewcommand*{\glsgroupskip}{ & & \tabularnewline}%
+ \fi
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{long3colborder}
+% The \glostyle{long3colborder} style is like the
+% \glostyle{long3col} style but with a border:
+% \begin{macrocode}
+\newglossarystyle{long3colborder}{%
+% \end{macrocode}
+% Base it on the glostyle{long3col} style:
+% \begin{macrocode}
+ \setglossarystyle{long3col}%
+% \end{macrocode}
+% Use a \env{longtable} with 3 columns with vertical lines
+% around them:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\begin{longtable}{|l|p{\glsdescwidth}|p{\glspagelistwidth}|}}%
+ {\end{longtable}}%
+% \end{macrocode}
+% Place horizontal lines at the head and foot of the table:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{\hline\endhead\hline\endfoot}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{long3colheader}
+% The \glostyle{long3colheader} style is like \glostyle{long3col} but with a header row:
+% \begin{macrocode}
+\newglossarystyle{long3colheader}{%
+% \end{macrocode}
+% Base it on the glostyle{long3col} style:
+% \begin{macrocode}
+ \setglossarystyle{long3col}%
+% \end{macrocode}
+% Set the table's header:
+%\changes{3.13a}{2013-11-05}{switched to \cs{tabularnewline}}
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{%
+ \bfseries\entryname&\bfseries\descriptionname&
+ \bfseries\pagelistname\tabularnewline\endhead}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{long3colheaderborder}
+% The \glostyle{long3colheaderborder} style is like the above but with a border
+% \begin{macrocode}
+\newglossarystyle{long3colheaderborder}{%
+% \end{macrocode}
+% Base it on the glostyle{long3colborder} style:
+% \begin{macrocode}
+ \setglossarystyle{long3colborder}%
+% \end{macrocode}
+% Set the table's header and add horizontal line at table's foot:
+%\changes{3.13a}{2013-11-05}{switched to \cs{tabularnewline}}
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{%
+ \hline
+ \bfseries\entryname&\bfseries\descriptionname&
+ \bfseries\pagelistname\tabularnewline\hline\endhead
+ \hline\endfoot}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{long4col}
+% The \glostyle{long4col} style has four columns where the third
+% column contains the value of the associated \gloskey{symbol} key.
+% \begin{macrocode}
+\newglossarystyle{long4col}{%
+% \end{macrocode}
+% Use a \env{longtable} with 4 columns:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\begin{longtable}{llll}}%
+ {\end{longtable}}%
+% \end{macrocode}
+% No table header:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{}%
+% \end{macrocode}
+% No group headings:
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{}%
+% \end{macrocode}
+% Main (level 0) entries on a single row (name in first column,
+% description in second column, symbol in third column, page list
+% in last column):
+%\changes{3.13a}{2013-11-05}{switched to \cs{tabularnewline}}
+% \begin{macrocode}
+ \renewcommand{\glossentry}[2]{%
+ \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} &
+ \glossentrydesc{##1} &
+ \glossentrysymbol{##1} &
+ ##2\tabularnewline
+ }%
+% \end{macrocode}
+% Sub entries on a single row with no name (description in second
+% column, symbol in third column, page list in last column):
+% \begin{macrocode}
+ \renewcommand{\subglossentry}[3]{%
+ &
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}\glossentrydesc{##2} &
+ \glossentrysymbol{##2} & ##3\tabularnewline
+ }%
+% \end{macrocode}
+% Blank row between groups:
+%\changes{3.03}{2012/09/21}{added check for glsnogroupskip}
+%\changes{4.23}{2016-04-30}{check for nogroupskip changed}
+%The check for \pkgopt{nogroupskip} must occur outside
+%\cs{glsgroupskip}
+%(\url{http://www.dickimaw-books.com/cgi-bin/bugtracker.cgi?action=view&key=108})
+% \begin{macrocode}
+ \ifglsnogroupskip
+ \renewcommand*{\glsgroupskip}{}%
+ \else
+ \renewcommand*{\glsgroupskip}{ & & & \tabularnewline}%
+ \fi
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{long4colheader}
+% The \glostyle{long4colheader} style is like \glostyle{long4col}
+% but with a header row.
+% \begin{macrocode}
+\newglossarystyle{long4colheader}{%
+% \end{macrocode}
+% Base it on the glostyle{long4col} style:
+% \begin{macrocode}
+ \setglossarystyle{long4col}%
+% \end{macrocode}
+% Table has a header:
+%\changes{3.13a}{2013-11-05}{switched to \cs{tabularnewline}}
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{%
+ \bfseries\entryname&\bfseries\descriptionname&
+ \bfseries \symbolname&
+ \bfseries\pagelistname\tabularnewline\endhead}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{long4colborder}
+% The \glostyle{long4colborder} style is like \glostyle{long4col}
+% but with a border.
+% \begin{macrocode}
+\newglossarystyle{long4colborder}{%
+% \end{macrocode}
+% Base it on the glostyle{long4col} style:
+% \begin{macrocode}
+ \setglossarystyle{long4col}%
+% \end{macrocode}
+% Use a \env{longtable} with 4 columns surrounded by vertical
+% lines:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\begin{longtable}{|l|l|l|l|}}%
+ {\end{longtable}}%
+% \end{macrocode}
+% Add horizontal lines to the head and foot of the table:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{\hline\endhead\hline\endfoot}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{long4colheaderborder}
+% The \glostyle{long4colheaderborder} style is like the above but
+% with a border.
+% \begin{macrocode}
+\newglossarystyle{long4colheaderborder}{%
+% \end{macrocode}
+% Base it on the glostyle{long4col} style:
+% \begin{macrocode}
+ \setglossarystyle{long4col}%
+% \end{macrocode}
+% Use a \env{longtable} with 4 columns surrounded by vertical
+% lines:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\begin{longtable}{|l|l|l|l|}}%
+ {\end{longtable}}%
+% \end{macrocode}
+% Add table header and horizontal line at the table's foot:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{%
+ \hline\bfseries\entryname&\bfseries\descriptionname&
+ \bfseries \symbolname&
+ \bfseries\pagelistname\tabularnewline\hline\endhead
+ \hline\endfoot}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{altlong4col}
+% The \glostyle{altlong4col} style is like the \glostyle{long4col}
+% style but can have multiline descriptions and page lists.
+% \begin{macrocode}
+\newglossarystyle{altlong4col}{%
+% \end{macrocode}
+% Base it on the glostyle{long4col} style:
+% \begin{macrocode}
+ \setglossarystyle{long4col}%
+% \end{macrocode}
+% Use a \env{longtable} with 4 columns where the second and
+% last columns may have multiple lines in each row:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\begin{longtable}{lp{\glsdescwidth}lp{\glspagelistwidth}}}%
+ {\end{longtable}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{altlong4colheader}
+% The \glostyle{altlong4colheader} style is like
+% \glostyle{altlong4col} but with a header row.
+% \begin{macrocode}
+\newglossarystyle{altlong4colheader}{%
+% \end{macrocode}
+% Base it on the glostyle{long4colheader} style:
+% \begin{macrocode}
+ \setglossarystyle{long4colheader}%
+% \end{macrocode}
+% Use a \env{longtable} with 4 columns where the second and
+% last columns may have multiple lines in each row:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\begin{longtable}{lp{\glsdescwidth}lp{\glspagelistwidth}}}%
+ {\end{longtable}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{altlong4colborder}
+% The \glostyle{altlong4colborder} style is like
+% \glostyle{altlong4col} but with a border.
+% \begin{macrocode}
+\newglossarystyle{altlong4colborder}{%
+% \end{macrocode}
+% Base it on the glostyle{long4colborder} style:
+% \begin{macrocode}
+ \setglossarystyle{long4colborder}%
+% \end{macrocode}
+% Use a \env{longtable} with 4 columns where the second and
+% last columns may have multiple lines in each row:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\begin{longtable}{|l|p{\glsdescwidth}|l|p{\glspagelistwidth}|}}%
+ {\end{longtable}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{altlong4colheaderborder}
+% The \glostyle{altlong4colheaderborder} style is like the above but
+% with a header as well as a border.
+% \begin{macrocode}
+\newglossarystyle{altlong4colheaderborder}{%
+% \end{macrocode}
+% Base it on the glostyle{long4colheaderborder} style:
+% \begin{macrocode}
+ \setglossarystyle{long4colheaderborder}%
+% \end{macrocode}
+% Use a \env{longtable} with 4 columns where the second and
+% last columns may have multiple lines in each row:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\begin{longtable}{|l|p{\glsdescwidth}|l|p{\glspagelistwidth}|}}%
+ {\end{longtable}}%
+}
+% \end{macrocode}
+%\end{style}
+%\iffalse
+% \begin{macrocode}
+%</glossary-long.sty>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*glossary-longbooktabs.sty>
+% \end{macrocode}
+%\fi
+%\section{Glossary Styles using longtable and booktabs (the
+%glossary-longbooktabs) package}
+% The styles here are based on David Carlisle's patch at
+% \url{http://tex.stackexchange.com/a/56890}
+%
+% \begin{macrocode}
+\ProvidesPackage{glossary-longbooktabs}[2019/01/06 v4.42 (NLCT)]
+% \end{macrocode}
+% Requires \sty{booktabs} package:
+% \begin{macrocode}
+\RequirePackage{booktabs}
+% \end{macrocode}
+% and the base packages for long styles:
+% \begin{macrocode}
+\RequirePackage{glossary-long}
+\RequirePackage{glossary-longragged}
+% \end{macrocode}
+%(\sty{longtable} and \sty{array} loaded by those packages).
+%
+%\begin{style}{long-booktabs}
+%\changes{4.21}{2016-01-24}{new}
+% The \glostyle{long-booktabs} style is similar to the
+% \glostyle{longheader}
+% style but uses the \sty{booktabs} rules and patches
+% \env{longtable} to check for group skip occurring at a page break.
+% \begin{macrocode}
+\newglossarystyle{long-booktabs}{%
+% \end{macrocode}
+% If the style change is scoped, the patch will only have a local
+% effect, which may be useful if it conflicts with other tables in
+% the document.
+% \begin{macrocode}
+ \glspatchLToutput
+% \end{macrocode}
+% As with the \glostyle{longheader} style, use the
+% \glostyle{long} style as a base.
+% \begin{macrocode}
+ \setglossarystyle{long}%
+% \end{macrocode}
+% Add a header with rules.
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{%
+ \toprule \bfseries \entryname & \bfseries
+ \descriptionname\tabularnewline\midrule\endhead
+ \bottomrule\endfoot}%
+% \end{macrocode}
+% Check for the \pkgopt{nogroupskip} package option. If there should
+% be a gap between groups, insert the penalty and the vertical
+% space.
+%\changes{4.23}{2016-04-30}{check for nogroupskip changed}
+%The check for \pkgopt{nogroupskip} should occur outside
+%\cs{glsgroupskip} to be on the safe side.
+% \begin{macrocode}
+ \ifglsnogroupskip
+ \renewcommand*{\glsgroupskip}{}%
+ \else
+ \renewcommand*{\glsgroupskip}{\glspenaltygroupskip}%
+ \fi
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{long3col-booktabs}
+%\changes{4.21}{2016-01-24}{new}
+% The \glostyle{long3col-booktabs} style is similar to the
+% \glostyle{long3colheader}
+% style but uses the \sty{booktabs} rules and patches
+% \env{longtable} to check for group skip occurring at a page break.
+% \begin{macrocode}
+\newglossarystyle{long3col-booktabs}{%
+% \end{macrocode}
+% If the style change is scoped, the patch will only have a local
+% effect, which may be useful if it conflicts with other tables in
+% the document.
+% \begin{macrocode}
+ \glspatchLToutput
+% \end{macrocode}
+% Use the \glostyle{long3col} style as a base.
+% \begin{macrocode}
+ \setglossarystyle{long3col}%
+% \end{macrocode}
+% Add a header with rules.
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{%
+ \toprule \bfseries \entryname &
+ \bfseries \descriptionname &
+ \bfseries \pagelistname
+ \tabularnewline\midrule\endhead
+ \bottomrule\endfoot}%
+% \end{macrocode}
+% Check for the \pkgopt{nogroupskip} package option. If there should
+% be a gap between groups, insert the penalty and the vertical
+% space.
+%\changes{4.23}{2016-04-30}{check for nogroupskip changed}
+%The check for \pkgopt{nogroupskip} should occur outside
+%\cs{glsgroupskip} to be on the safe side.
+% \begin{macrocode}
+ \ifglsnogroupskip
+ \renewcommand*{\glsgroupskip}{}%
+ \else
+ \renewcommand*{\glsgroupskip}{\glspenaltygroupskip}%
+ \fi
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{long4col-booktabs}
+%\changes{4.21}{2016-01-24}{new}
+% The \glostyle{long4col-booktabs} style is similar to the
+% \glostyle{long4colheader}
+% style but uses the \sty{booktabs} rules and patches
+% \env{longtable} to check for group skip occurring at a page break.
+% \begin{macrocode}
+\newglossarystyle{long4col-booktabs}{%
+% \end{macrocode}
+% If the style change is scoped, the patch will only have a local
+% effect, which may be useful if it conflicts with other tables in
+% the document.
+% \begin{macrocode}
+ \glspatchLToutput
+% \end{macrocode}
+% Use the \glostyle{long4col} style as a base.
+% \begin{macrocode}
+ \setglossarystyle{long4col}%
+% \end{macrocode}
+% Add a header with rules.
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{%
+ \toprule \bfseries \entryname &
+ \bfseries \descriptionname &
+ \bfseries \symbolname &
+ \bfseries \pagelistname
+ \tabularnewline\midrule\endhead
+ \bottomrule\endfoot}%
+% \end{macrocode}
+% Check for the \pkgopt{nogroupskip} package option. If there should
+% be a gap between groups, insert the penalty and the vertical
+% space.
+%\changes{4.23}{2016-04-30}{check for nogroupskip changed}
+%The check for \pkgopt{nogroupskip} should occur outside
+%\cs{glsgroupskip} to be on the safe side.
+% \begin{macrocode}
+ \ifglsnogroupskip
+ \renewcommand*{\glsgroupskip}{}%
+ \else
+ \renewcommand*{\glsgroupskip}{\glspenaltygroupskip}%
+ \fi
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{altlong4col-booktabs}
+%\changes{4.21}{2016-01-24}{new}
+% The \glostyle{altlong4col-booktabs} style is similar to the
+% \glostyle{altlong4colheader}
+% style but uses the \sty{booktabs} rules and patches
+% \env{longtable} to check for group skip occurring at a page break.
+% \begin{macrocode}
+\newglossarystyle{altlong4col-booktabs}{%
+% \end{macrocode}
+%The patch \cs{glspatchLToutput} is already applied in
+%\glostyle{long4col-booktabs} and so doesn't need to be here.
+%\changes{4.42}{??}{removed superfluous \cs{glspatchLToutput}}
+% \begin{macrocode}
+ \glspatchLToutput
+% \end{macrocode}
+% Use the
+% \glostyle{long4col-booktabs} style as a base.
+% \begin{macrocode}
+ \setglossarystyle{long4col-booktabs}%
+% \end{macrocode}
+% Change the column specifications:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\begin{longtable}{lp{\glsdescwidth}lp{\glspagelistwidth}}}%
+ {\end{longtable}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+% Ragged styles.
+%\begin{style}{longragged-booktabs}
+%\changes{4.21}{2016-01-24}{new}
+% The \glostyle{longragged-booktabs} style is similar to the
+% \glostyle{longragged}
+% style but uses the \sty{booktabs} rules and patches
+% \env{longtable} to check for group skip occurring at a page break.
+% \begin{macrocode}
+\newglossarystyle{longragged-booktabs}{%
+% \end{macrocode}
+% If the style change is scoped, the patch will only have a local
+% effect, which may be useful if it conflicts with other tables in
+% the document.
+% \begin{macrocode}
+ \glspatchLToutput
+% \end{macrocode}
+% Use the \glostyle{long-booktabs} style as a base.
+% \begin{macrocode}
+ \setglossarystyle{long-booktabs}%
+% \end{macrocode}
+% Adjust the column specification.
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\begin{longtable}{l>{\raggedright}p{\glsdescwidth}}}%
+ {\end{longtable}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{longragged3col-booktabs}
+%\changes{4.21}{2016-01-24}{new}
+% The \glostyle{longragged3col-booktabs} style is similar to the
+% \glostyle{longragged3col}
+% style but uses the \sty{booktabs} rules and patches
+% \env{longtable} to check for group skip occurring at a page break.
+% \begin{macrocode}
+\newglossarystyle{longragged3col-booktabs}{%
+% \end{macrocode}
+% If the style change is scoped, the patch will only have a local
+% effect, which may be useful if it conflicts with other tables in
+% the document.
+% \begin{macrocode}
+ \glspatchLToutput
+% \end{macrocode}
+% Use the \glostyle{long3col-booktabs} style as a base.
+% \begin{macrocode}
+ \setglossarystyle{long3col-booktabs}%
+% \end{macrocode}
+% Adjust the column specification.
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\begin{longtable}{l>{\raggedright}p{\glsdescwidth}%
+ >{\raggedright}p{\glspagelistwidth}}}%
+ {\end{longtable}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{altlongragged4col-booktabs}
+%\changes{4.21}{2016-01-24}{new}
+% The \glostyle{altlongragged4col-booktabs} style is similar to the
+% \glostyle{altlongragged4col}
+% style but uses the \sty{booktabs} rules and patches
+% \env{longtable} to check for group skip occurring at a page break.
+% \begin{macrocode}
+\newglossarystyle{altlongragged4col-booktabs}{%
+% \end{macrocode}
+% If the style change is scoped, the patch will only have a local
+% effect, which may be useful if it conflicts with other tables in
+% the document.
+% \begin{macrocode}
+ \glspatchLToutput
+% \end{macrocode}
+% Use the \glostyle{altlong4col-booktabs} style as a base.
+% \begin{macrocode}
+ \setglossarystyle{altlong4col-booktabs}%
+% \end{macrocode}
+% Adjust the column specification.
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\begin{longtable}{l>{\raggedright}p{\glsdescwidth}l%
+ >{\raggedright}p{\glspagelistwidth}}}%
+ {\end{longtable}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{macro}{\glsLTpenaltycheck}
+%\changes{4.21}{2016-01-24}{new}
+% \begin{macrocode}
+\newcommand*{\glsLTpenaltycheck}{%
+ \ifnum\outputpenalty=-50\vskip-\normalbaselineskip\relax\fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glspenaltygroupskip}
+%\changes{4.21}{2016-01-24}{new}
+% \begin{macrocode}
+\newcommand{\glspenaltygroupskip}{%
+ \noalign{\penalty-50\vskip\normalbaselineskip}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsrestoreLToutput}
+% Provide a way of restoring \cs{LT@output} for the user.
+% \begin{macrocode}
+\let\@gls@org@LT@output\LT@output
+\newcommand*{\glsrestoreLToutput}{\let\LT@output\@gls@org@LT@output}
+% \end{macrocode}
+%\end{macro}
+%
+% This is David's patch, but I've replaced the hard-coded values
+% with \cs{glsLTpenaltycheck} to make it easier to adjust.
+%\begin{macro}{\glspatchLToutput}
+%\changes{4.21}{2016-01-24}{new}
+% \begin{macrocode}
+\newcommand*{\glspatchLToutput}{%
+ \renewcommand*{\LT@output}{%
+ \ifnum\outputpenalty <-\@Mi
+ \ifnum\outputpenalty > -\LT@end@pen
+ \LT@err{floats and marginpars not allowed in a longtable}\@ehc
+ \else
+ \setbox\z@\vbox{\unvbox\@cclv}%
+ \ifdim \ht\LT@lastfoot>\ht\LT@foot
+ \dimen@\pagegoal
+ \advance\dimen@-\ht\LT@lastfoot
+ \ifdim\dimen@<\ht\z@
+ \setbox\@cclv\vbox{\unvbox\z@\copy\LT@foot\vss}%
+ \@makecol
+ \@outputpage
+ \setbox\z@\vbox{\box\LT@head\glsLTpenaltycheck}%
+ \fi
+ \fi
+ \global\@colroom\@colht
+ \global\vsize\@colht
+ {\unvbox\z@\box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi}%
+ \fi
+ \else
+ \setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vss}%
+ \@makecol
+ \@outputpage
+ \global\vsize\@colroom
+ \copy\LT@head
+ \glsLTpenaltycheck
+ \nobreak
+ \fi
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\iffalse
+% \begin{macrocode}
+%</glossary-longbooktabs.sty>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*glossary-longragged.sty>
+% \end{macrocode}
+%\fi
+% \section{Glossary Styles using longtable (the glossary-longragged
+% package)}
+% The glossary styles defined in the \isty{glossary-longragged} package
+% used the \env{longtable} environment in the glossary and use
+% ragged right formatting for the multiline columns.
+% \begin{macrocode}
+\ProvidesPackage{glossary-longragged}[2019/01/06 v4.42 (NLCT)]
+% \end{macrocode}
+% Requires the \isty{array} package:
+% \begin{macrocode}
+\RequirePackage{array}
+% \end{macrocode}
+% Requires the \isty{longtable} package:
+% \begin{macrocode}
+\RequirePackage{longtable}
+% \end{macrocode}
+%\begin{macro}{\glsdescwidth}
+% This is a length that governs the width of the description column.
+% This may have already been defined.
+% \begin{macrocode}
+\@ifundefined{glsdescwidth}{%
+ \newlength\glsdescwidth
+ \setlength{\glsdescwidth}{0.6\hsize}
+}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glspagelistwidth}
+% This is a length that governs the width of the page list column.
+% This may already have been defined.
+% \begin{macrocode}
+\@ifundefined{glspagelistwidth}{%
+ \newlength\glspagelistwidth
+ \setlength{\glspagelistwidth}{0.1\hsize}
+}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{style}{longragged}
+% The \glostyle{longragged} glossary style is like the
+% \glostyle{long} but uses ragged right formatting for the
+% description column.
+% \begin{macrocode}
+\newglossarystyle{longragged}{%
+% \end{macrocode}
+% Use \env{longtable} with two columns:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\begin{longtable}{l>{\raggedright}p{\glsdescwidth}}}%
+ {\end{longtable}}%
+% \end{macrocode}
+% Do nothing at the start of the environment:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{}%
+% \end{macrocode}
+% No heading between groups:
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{}%
+% \end{macrocode}
+% Main (level 0) entries displayed in a row:
+%\changes{3.08a}{2013-09-28}{updated to use \cs{glossentry} and
+%\cs{subglossentry}}
+% \begin{macrocode}
+ \renewcommand{\glossentry}[2]{%
+ \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} &
+ \glossentrydesc{##1}\glspostdescription\space ##2%
+ \tabularnewline
+ }%
+% \end{macrocode}
+% Sub entries displayed on the following row without the name:
+% \begin{macrocode}
+ \renewcommand{\subglossentry}[3]{%
+ &
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}\glossentrydesc{##2}%
+ \glspostdescription\space ##3%
+ \tabularnewline
+ }%
+% \end{macrocode}
+% Blank row between groups:
+%\changes{3.03}{2012/09/21}{added check for glsnogroupskip}
+%\changes{4.23}{2016-04-30}{check for nogroupskip changed}
+%The check for \pkgopt{nogroupskip} must occur outside
+%\cs{glsgroupskip}
+%(\url{http://www.dickimaw-books.com/cgi-bin/bugtracker.cgi?action=view&key=108})
+% \begin{macrocode}
+ \ifglsnogroupskip
+ \renewcommand*{\glsgroupskip}{}%
+ \else
+ \renewcommand*{\glsgroupskip}{ & \tabularnewline}%
+ \fi
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{longraggedborder}
+% The \glostyle{longraggedborder} style is like the above, but with horizontal and
+% vertical lines:
+% \begin{macrocode}
+\newglossarystyle{longraggedborder}{%
+% \end{macrocode}
+% Base it on the glostyle{longragged} style:
+% \begin{macrocode}
+ \setglossarystyle{longragged}%
+% \end{macrocode}
+% Use \env{longtable} with two columns with vertical lines
+% between each column:
+% \begin{macrocode}
+ \renewenvironment{theglossary}{%
+ \begin{longtable}{|l|>{\raggedright}p{\glsdescwidth}|}}%
+ {\end{longtable}}%
+% \end{macrocode}
+% Place horizontal lines at the head and foot of the table:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{\hline\endhead\hline\endfoot}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{longraggedheader}
+% The \glostyle{longraggedheader} style is like the
+% \glostyle{longragged} style but with a header:
+% \begin{macrocode}
+\newglossarystyle{longraggedheader}{%
+% \end{macrocode}
+% Base it on the glostyle{longragged} style:
+% \begin{macrocode}
+ \setglossarystyle{longragged}%
+% \end{macrocode}
+% Set the table's header:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{%
+ \bfseries \entryname & \bfseries \descriptionname
+ \tabularnewline\endhead}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{longraggedheaderborder}
+% The \glostyle{longraggedheaderborder} style is
+% like the \glostyle{longragged} style but with a header and border:
+% \begin{macrocode}
+\newglossarystyle{longraggedheaderborder}{%
+% \end{macrocode}
+% Base it on the glostyle{longraggedborder} style:
+% \begin{macrocode}
+ \setglossarystyle{longraggedborder}%
+% \end{macrocode}
+% Set the table's header and add horizontal line to table's foot:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{%
+ \hline\bfseries \entryname & \bfseries \descriptionname
+ \tabularnewline\hline
+ \endhead
+ \hline\endfoot}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{longragged3col}
+% The \glostyle{longragged3col} style is like \glostyle{longragged} but with 3 columns
+% \begin{macrocode}
+\newglossarystyle{longragged3col}{%
+% \end{macrocode}
+% Use a \env{longtable} with 3 columns:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\begin{longtable}{l>{\raggedright}p{\glsdescwidth}%
+ >{\raggedright}p{\glspagelistwidth}}}%
+ {\end{longtable}}%
+% \end{macrocode}
+% No table header:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{}%
+% \end{macrocode}
+% No headings between groups:
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{}%
+% \end{macrocode}
+% Main (level 0) entries on a row (name in first column,
+% description in second column, page list in last column):
+%\changes{3.08a}{2013-09-28}{updated to use \cs{glossentry} and
+%\cs{subglossentry}}
+% \begin{macrocode}
+ \renewcommand{\glossentry}[2]{%
+ \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} &
+ \glossentrydesc{##1} & ##2\tabularnewline
+ }%
+% \end{macrocode}
+% Sub-entries on a separate row (no name, description in
+% second column, page list in third column):
+% \begin{macrocode}
+ \renewcommand{\subglossentry}[3]{%
+ &
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}\glossentrydesc{##2} &
+ ##3\tabularnewline
+ }%
+% \end{macrocode}
+% Blank row between groups:
+%\changes{3.03}{2012/09/21}{added check for glsnogroupskip}
+%\changes{4.23}{2016-04-30}{check for nogroupskip changed}
+%The check for \pkgopt{nogroupskip} must occur outside
+%\cs{glsgroupskip}
+%(\url{http://www.dickimaw-books.com/cgi-bin/bugtracker.cgi?action=view&key=108})
+% \begin{macrocode}
+ \ifglsnogroupskip
+ \renewcommand*{\glsgroupskip}{}%
+ \else
+ \renewcommand*{\glsgroupskip}{ & & \tabularnewline}%
+ \fi
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{longragged3colborder}
+% The \glostyle{longragged3colborder} style is like the
+% \glostyle{longragged3col} style but with a border:
+% \begin{macrocode}
+\newglossarystyle{longragged3colborder}{%
+% \end{macrocode}
+% Base it on the glostyle{longragged3col} style:
+% \begin{macrocode}
+ \setglossarystyle{longragged3col}%
+% \end{macrocode}
+% Use a \env{longtable} with 3 columns with vertical lines
+% around them:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\begin{longtable}{|l|>{\raggedright}p{\glsdescwidth}|%
+ >{\raggedright}p{\glspagelistwidth}|}}%
+ {\end{longtable}}%
+% \end{macrocode}
+% Place horizontal lines at the head and foot of the table:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{\hline\endhead\hline\endfoot}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{longragged3colheader}
+% The \glostyle{longragged3colheader} style is like \glostyle{longragged3col} but with a header row:
+% \begin{macrocode}
+\newglossarystyle{longragged3colheader}{%
+% \end{macrocode}
+% Base it on the glostyle{longragged3col} style:
+% \begin{macrocode}
+ \setglossarystyle{longragged3col}%
+% \end{macrocode}
+% Set the table's header:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{%
+ \bfseries\entryname&\bfseries\descriptionname&
+ \bfseries\pagelistname\tabularnewline\endhead}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{longragged3colheaderborder}
+% The \glostyle{longragged3colheaderborder} style is like the above but with a border
+% \begin{macrocode}
+\newglossarystyle{longragged3colheaderborder}{%
+% \end{macrocode}
+% Base it on the glostyle{longragged3colborder} style:
+% \begin{macrocode}
+ \setglossarystyle{longragged3colborder}%
+% \end{macrocode}
+% Set the table's header and add horizontal line at table's foot:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{%
+ \hline
+ \bfseries\entryname&\bfseries\descriptionname&
+ \bfseries\pagelistname\tabularnewline\hline\endhead
+ \hline\endfoot}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{altlongragged4col}
+% The \glostyle{altlongragged4col} style is like the \glostyle{altlong4col}
+% style defined in the \isty{glossary-long} package, except that
+% ragged right formatting is used for the description and page list
+% columns.
+% \begin{macrocode}
+\newglossarystyle{altlongragged4col}{%
+% \end{macrocode}
+% Use a \env{longtable} with 4 columns where the second and
+% last columns may have multiple lines in each row:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\begin{longtable}{l>{\raggedright}p{\glsdescwidth}l%
+ >{\raggedright}p{\glspagelistwidth}}}%
+ {\end{longtable}}%
+% \end{macrocode}
+% No table header:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{}%
+% \end{macrocode}
+% No group headings:
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{}%
+% \end{macrocode}
+% Main (level 0) entries on a single row (name in first column,
+% description in second column, symbol in third column, page list
+% in last column):
+%\changes{3.08a}{2013-09-28}{updated to use \cs{glossentry} and
+%\cs{subglossentry}}
+%\changes{4.08}{2014-07-30}{fixed bug that displayed description instead of
+%symbol}
+% \begin{macrocode}
+ \renewcommand{\glossentry}[2]{%
+ \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} &
+ \glossentrydesc{##1} & \glossentrysymbol{##1} &
+ ##2\tabularnewline
+ }%
+% \end{macrocode}
+% Sub entries on a single row with no name (description in second
+% column, symbol in third column, page list in last column):
+% \begin{macrocode}
+ \renewcommand{\subglossentry}[3]{%
+ &
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}\glossentrydesc{##2} &
+ \glossentrysymbol{##2} & ##3\tabularnewline
+ }%
+% \end{macrocode}
+% Blank row between groups:
+%\changes{3.03}{2012/09/21}{added check for glsnogroupskip}
+%\changes{4.23}{2016-04-30}{check for nogroupskip changed}
+%The check for \pkgopt{nogroupskip} must occur outside
+%\cs{glsgroupskip}
+%(\url{http://www.dickimaw-books.com/cgi-bin/bugtracker.cgi?action=view&key=108})
+% \begin{macrocode}
+ \ifglsnogroupskip
+ \renewcommand*{\glsgroupskip}{}%
+ \else
+ \renewcommand*{\glsgroupskip}{ & & & \tabularnewline}%
+ \fi
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{altlongragged4colheader}
+% The \glostyle{altlongragged4colheader} style is like
+% \glostyle{altlongragged4col} but with a header row.
+% \begin{macrocode}
+\newglossarystyle{altlongragged4colheader}{%
+% \end{macrocode}
+% Base it on the glostyle{altlongragged4col} style:
+% \begin{macrocode}
+ \setglossarystyle{altlongragged4col}%
+% \end{macrocode}
+% Use a \env{longtable} with 4 columns where the second and
+% last columns may have multiple lines in each row:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\begin{longtable}{l>{\raggedright}p{\glsdescwidth}l%
+ >{\raggedright}p{\glspagelistwidth}}}%
+ {\end{longtable}}%
+% \end{macrocode}
+% Table has a header:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{%
+ \bfseries\entryname&\bfseries\descriptionname&
+ \bfseries \symbolname&
+ \bfseries\pagelistname\tabularnewline\endhead}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{altlongragged4colborder}
+% The \glostyle{altlongragged4colborder} style is like
+% \glostyle{altlongragged4col} but with a border.
+% \begin{macrocode}
+\newglossarystyle{altlongragged4colborder}{%
+% \end{macrocode}
+% Base it on the glostyle{altlongragged4col} style:
+% \begin{macrocode}
+ \setglossarystyle{altlongragged4col}%
+% \end{macrocode}
+% Use a \env{longtable} with 4 columns where the second and
+% last columns may have multiple lines in each row:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\begin{longtable}{|l|>{\raggedright}p{\glsdescwidth}|l|%
+ >{\raggedright}p{\glspagelistwidth}|}}%
+ {\end{longtable}}%
+% \end{macrocode}
+% Add horizontal lines to the head and foot of the table:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{\hline\endhead\hline\endfoot}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{altlongragged4colheaderborder}
+% The \glostyle{altlongragged4colheaderborder} style is like the above but
+% with a header as well as a border.
+% \begin{macrocode}
+\newglossarystyle{altlongragged4colheaderborder}{%
+% \end{macrocode}
+% Base it on the glostyle{altlongragged4col} style:
+% \begin{macrocode}
+ \setglossarystyle{altlongragged4col}%
+% \end{macrocode}
+% Use a \env{longtable} with 4 columns where the second and
+% last columns may have multiple lines in each row:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\begin{longtable}{|l|>{\raggedright}p{\glsdescwidth}|l|%
+ >{\raggedright}p{\glspagelistwidth}|}}%
+ {\end{longtable}}%
+% \end{macrocode}
+% Add table header and horizontal line at the table's foot:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{%
+ \hline\bfseries\entryname&\bfseries\descriptionname&
+ \bfseries \symbolname&
+ \bfseries\pagelistname\tabularnewline\hline\endhead
+ \hline\endfoot}%
+}
+% \end{macrocode}
+%\end{style}
+%\iffalse
+% \begin{macrocode}
+%</glossary-longragged.sty>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*glossary-mcols.sty>
+% \end{macrocode}
+%\fi
+%\section{Glossary Styles using \styfmt{multicol}
+%(glossary-mcols.sty)}
+%The \isty{glossary-mcols} style file defines glossary styles that
+%use the \sty{multicol} package. These use the tree-like glossary
+%styles in a multicol environment.
+% \begin{macrocode}
+\ProvidesPackage{glossary-mcols}[2019/01/06 v4.42 (NLCT)]
+% \end{macrocode}
+% Required packages:
+% \begin{macrocode}
+\RequirePackage{multicol}
+\RequirePackage{glossary-tree}
+% \end{macrocode}
+%
+%\begin{macro}{\indexspace}
+%\changes{4.13}{2015-02-03}{new}
+% The are a few classes that don't define \cs{indexspace}, so
+% provide a definition if it hasn't been defined.
+% \begin{macrocode}
+\providecommand{\indexspace}{%
+ \par \vskip 10\p@ \@plus 5\p@ \@minus 3\p@ \relax
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsmcols}
+% Define macro in which to store the number of columns. (Defaults to
+% 2.)
+% \begin{macrocode}
+\newcommand*{\glsmcols}{2}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{style}{mcolindex}
+% Multi-column index style. Same as the \glostyle{index}, but puts the
+% glossary in multiple columns. (Ideally the glossary title should go in the
+% optional argument of \env{multicols}, but the title isn't part of
+% the glossary style.)
+% \begin{macrocode}
+\newglossarystyle{mcolindex}{%
+ \setglossarystyle{index}%
+ \renewenvironment{theglossary}%
+ {%
+% \end{macrocode}
+%\changes{3.05}{2013-04-21}{replaced `2' with \cs{glsmcols}}
+% \begin{macrocode}
+ \begin{multicols}{\glsmcols}
+ \setlength{\parindent}{0pt}%
+ \setlength{\parskip}{0pt plus 0.3pt}%
+% \end{macrocode}
+%\changes{4.26}{2016-10-12}{replaced \cs{@idxitem} with
+%\cs{glstreeitem}}
+% \begin{macrocode}
+ \let\item\glstreeitem
+ \let\subitem\glstreesubitem
+ \let\subsubitem\glstreesubsubitem
+ }%
+ {\end{multicols}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{mcolindexgroup}
+% As \glostyle{mcolindex} but has headings:
+% \begin{macrocode}
+\newglossarystyle{mcolindexgroup}{%
+ \setglossarystyle{mcolindex}%
+ \renewcommand*{\glsgroupheading}[1]{%
+ \item\glstreegroupheaderfmt{\glsgetgrouptitle{##1}}\indexspace}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{mcolindexhypergroup}
+% The \glostyle{mcolindexhypergroup} style is like the
+% \glostyle{mcolindexgroup} style but has hyper navigation.
+% \begin{macrocode}
+\newglossarystyle{mcolindexhypergroup}{%
+% \end{macrocode}
+% Base it on the glostyle{mcolindex} style:
+% \begin{macrocode}
+ \setglossarystyle{mcolindex}%
+% \end{macrocode}
+% Put navigation links to the groups at the start of the glossary:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{%
+ \item\glstreenavigationfmt{\glsnavigation}\indexspace}%
+% \end{macrocode}
+% Add a heading for each group (with a target). The group's title is
+% in bold followed by a vertical gap.
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{%
+ \item\glstreegroupheaderfmt
+ {\glsnavhypertarget{##1}{\glsgetgrouptitle{##1}}}%
+ \indexspace}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{mcolindexspannav}
+%\changes{4.22}{2016-04-19}{new}
+% Similar to \glostyle{mcolindexhypergroup}, but puts the navigation
+% line
+% in the optional argument of \env{multicols}.
+% \begin{macrocode}
+\newglossarystyle{mcolindexspannav}{%
+ \setglossarystyle{index}%
+ \renewenvironment{theglossary}%
+ {%
+% \end{macrocode}
+%\changes{3.05}{2013-04-21}{replaced `2' with \cs{glsmcols}}
+% \begin{macrocode}
+ \begin{multicols}{\glsmcols}[\noindent\glstreenavigationfmt{\glsnavigation}]
+ \setlength{\parindent}{0pt}%
+ \setlength{\parskip}{0pt plus 0.3pt}%
+% \end{macrocode}
+%\changes{4.26}{2016-10-12}{replaced \cs{@idxitem} with
+%\cs{glstreeitem}}
+% \begin{macrocode}
+ \let\item\glstreeitem}%
+ {\end{multicols}}%
+% \end{macrocode}
+% Add a heading for each group (with a target). The group's title is
+% in bold followed by a vertical gap.
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{%
+ \item\glstreegroupheaderfmt
+ {\glsnavhypertarget{##1}{\glsgetgrouptitle{##1}}}%
+ \indexspace}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{mcoltree}
+% Multi-column index style. Same as the \glostyle{tree}, but puts the
+% glossary in multiple columns.
+% \begin{macrocode}
+\newglossarystyle{mcoltree}{%
+ \setglossarystyle{tree}%
+ \renewenvironment{theglossary}%
+ {%
+% \end{macrocode}
+%\changes{3.05}{2013-04-21}{replaced `2' with \cs{glsmcols}}
+% \begin{macrocode}
+ \begin{multicols}{\glsmcols}
+ \setlength{\parindent}{0pt}%
+ \setlength{\parskip}{0pt plus 0.3pt}%
+ }%
+ {\end{multicols}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{mcoltreegroup}
+% Like the \glostyle{mcoltree} style but the glossary groups have
+% headings.
+% \begin{macrocode}
+\newglossarystyle{mcoltreegroup}{%
+% \end{macrocode}
+% Base it on the glostyle{mcoltree} style:
+% \begin{macrocode}
+ \setglossarystyle{mcoltree}%
+% \end{macrocode}
+% Each group has a heading (in bold) followed by a vertical gap):
+% \begin{macrocode}
+ \renewcommand{\glsgroupheading}[1]{\par
+ \noindent\glstreegroupheaderfmt{\glsgetgrouptitle{##1}}\par\indexspace}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{mcoltreehypergroup}
+% The \glostyle{mcoltreehypergroup} style is like the
+% \glostyle{treegroup}
+% style, but has a set of links to the groups at the
+% start of the glossary.
+% \begin{macrocode}
+\newglossarystyle{mcoltreehypergroup}{%
+% \end{macrocode}
+% Base it on the glostyle{mcoltree} style:
+% \begin{macrocode}
+ \setglossarystyle{mcoltree}%
+% \end{macrocode}
+% Put navigation links to the groups at the start of the
+% \env{theglossary} environment:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{%
+ \par\noindent\glstreenavigationfmt{\glsnavigation}\par\indexspace}%
+% \end{macrocode}
+% Each group has a heading (in bold with a target) followed by a
+% vertical gap):
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{%
+ \par\noindent
+ \glstreegroupheaderfmt{\glsnavhypertarget{##1}{\glsgetgrouptitle{##1}}}\par
+ \indexspace}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{mcoltreespannav}
+%\changes{4.22}{2016-04-19}{new}
+% Similar to the \glostyle{mcoltreehypergroup} style but the
+% navigation line is put in the optional argument of the
+% \env{multicols} environment.
+% \begin{macrocode}
+\newglossarystyle{mcoltreespannav}{%
+ \setglossarystyle{tree}%
+ \renewenvironment{theglossary}%
+ {%
+% \end{macrocode}
+%\changes{3.05}{2013-04-21}{replaced `2' with \cs{glsmcols}}
+% \begin{macrocode}
+ \begin{multicols}{\glsmcols}[\noindent\glstreenavigationfmt{\glsnavigation}]
+ \setlength{\parindent}{0pt}%
+ \setlength{\parskip}{0pt plus 0.3pt}%
+ }%
+ {\end{multicols}}%
+% \end{macrocode}
+% Each group has a heading (in bold with a target) followed by a
+% vertical gap):
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{%
+ \par\noindent
+ \glstreegroupheaderfmt{\glsnavhypertarget{##1}{\glsgetgrouptitle{##1}}}\par
+ \indexspace}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{mcoltreenoname}
+% Multi-column index style. Same as the \glostyle{treenoname}, but puts the
+% glossary in multiple columns.
+% \begin{macrocode}
+\newglossarystyle{mcoltreenoname}{%
+ \setglossarystyle{treenoname}%
+ \renewenvironment{theglossary}%
+ {%
+% \end{macrocode}
+%\changes{3.05}{2013-04-21}{replaced `2' with \cs{glsmcols}}
+% \begin{macrocode}
+ \begin{multicols}{\glsmcols}
+ \setlength{\parindent}{0pt}%
+ \setlength{\parskip}{0pt plus 0.3pt}%
+ }%
+ {\end{multicols}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{mcoltreenonamegroup}
+% Like the \glostyle{mcoltreenoname} style but the glossary groups have
+% headings.
+% \begin{macrocode}
+\newglossarystyle{mcoltreenonamegroup}{%
+% \end{macrocode}
+% Base it on the glostyle{mcoltreenoname} style:
+% \begin{macrocode}
+ \setglossarystyle{mcoltreenoname}%
+% \end{macrocode}
+% Give each group a heading:
+% \begin{macrocode}
+ \renewcommand{\glsgroupheading}[1]{\par
+ \noindent\glstreegroupheaderfmt{\glsgetgrouptitle{##1}}\par\indexspace}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{mcoltreenonamehypergroup}
+% The \glostyle{mcoltreenonamehypergroup} style is like the
+% \glostyle{mcoltreenonamegroup}
+% style, but has a set of links to the groups at the
+% start of the glossary.
+% \begin{macrocode}
+\newglossarystyle{mcoltreenonamehypergroup}{%
+% \end{macrocode}
+% Base it on the glostyle{mcoltreenoname} style:
+% \begin{macrocode}
+ \setglossarystyle{mcoltreenoname}%
+% \end{macrocode}
+% Put navigation links to the groups at the start of the
+% \env{theglossary} environment:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{%
+ \par\noindent\glstreenavigationfmt{\glsnavigation}\par\indexspace}%
+% \end{macrocode}
+% Each group has a heading (in bold with a target) followed by a
+% vertical gap):
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{%
+ \par\noindent
+ \glstreegroupheaderfmt{\glsnavhypertarget{##1}{\glsgetgrouptitle{##1}}}\par
+ \indexspace}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{mcoltreenonamespannav}
+%\changes{4.22}{2016-04-19}{new}
+% Similar to the \glostyle{mcoltreenonamehypergroup} style but the
+% navigation line is put in the optional argument of the
+% \env{multicols} environment.
+% \begin{macrocode}
+\newglossarystyle{mcoltreenonamespannav}{%
+ \setglossarystyle{treenoname}%
+ \renewenvironment{theglossary}%
+ {%
+ \begin{multicols}{\glsmcols}[\noindent\glstreenavigationfmt{\glsnavigation}]
+ \setlength{\parindent}{0pt}%
+ \setlength{\parskip}{0pt plus 0.3pt}%
+ }%
+ {\end{multicols}}%
+% \end{macrocode}
+% Each group has a heading (in bold with a target) followed by a
+% vertical gap):
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{%
+ \par\noindent
+ \glstreegroupheaderfmt{\glsnavhypertarget{##1}{\glsgetgrouptitle{##1}}}\par
+ \indexspace}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{mcolalttree}
+% Multi-column index style. Same as the \glostyle{alttree}, but puts the
+% glossary in multiple columns.
+% \begin{macrocode}
+\newglossarystyle{mcolalttree}{%
+ \setglossarystyle{alttree}%
+ \renewenvironment{theglossary}%
+ {%
+% \end{macrocode}
+%\changes{3.05}{2013-04-21}{replaced `2' with \cs{glsmcols}}
+% \begin{macrocode}
+ \begin{multicols}{\glsmcols}
+ \def\@gls@prevlevel{-1}%
+ \mbox{}\par
+ }%
+ {\par\end{multicols}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{mcolalttreegroup}
+% Like the \glostyle{mcolalttree} style but the glossary groups have
+% headings.
+% \begin{macrocode}
+\newglossarystyle{mcolalttreegroup}{%
+% \end{macrocode}
+% Base it on the glostyle{mcolalttree} style:
+% \begin{macrocode}
+ \setglossarystyle{mcolalttree}%
+% \end{macrocode}
+% Give each group a heading.
+% \begin{macrocode}
+ \renewcommand{\glsgroupheading}[1]{\par
+ \def\@gls@prevlevel{-1}%
+ \hangindent0pt\relax
+ \parindent0pt\relax
+ \glstreegroupheaderfmt{\glsgetgrouptitle{##1}}\par\indexspace}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{mcolalttreehypergroup}
+% The \glostyle{mcolalttreehypergroup} style is like the
+% \glostyle{mcolalttreegroup} style, but has a set of links to the
+% groups at the start of the glossary.
+% \begin{macrocode}
+\newglossarystyle{mcolalttreehypergroup}{%
+% \end{macrocode}
+% Base it on the glostyle{mcolalttree} style:
+% \begin{macrocode}
+ \setglossarystyle{mcolalttree}%
+% \end{macrocode}
+% Put the navigation links in the header
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{%
+ \par
+ \def\@gls@prevlevel{-1}%
+ \hangindent0pt\relax
+ \parindent0pt\relax
+ \glstreenavigationfmt{\glsnavigation}\par\indexspace}%
+% \end{macrocode}
+% Put a hypertarget at the start of each group
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{%
+ \par
+ \def\@gls@prevlevel{-1}%
+ \hangindent0pt\relax
+ \parindent0pt\relax
+ \glstreegroupheaderfmt{\glsnavhypertarget{##1}{\glsgetgrouptitle{##1}}}\par
+ \indexspace}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{mcolalttreespannav}
+%\changes{4.22}{2016-04-19}{new}
+% Similar to the \glostyle{mcolalttreehypergroup} style but the
+% navigation line is put in the optional argument of the
+% \env{multicols} environment.
+% \begin{macrocode}
+\newglossarystyle{mcolalttreespannav}{%
+ \setglossarystyle{alttree}%
+ \renewenvironment{theglossary}%
+ {%
+ \begin{multicols}{\glsmcols}[\noindent\glstreenavigationfmt{\glsnavigation}]
+ \def\@gls@prevlevel{-1}%
+ \mbox{}\par
+ }%
+ {\par\end{multicols}}%
+% \end{macrocode}
+% Put a hypertarget at the start of each group
+%\changes{4.34}{2017-11-03}{removed spurious space}
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{%
+ \par
+ \def\@gls@prevlevel{-1}%
+ \hangindent0pt\relax
+ \parindent0pt\relax
+ \glstreegroupheaderfmt{\glsnavhypertarget{##1}{\glsgetgrouptitle{##1}}}\par
+ \indexspace}%
+}
+% \end{macrocode}
+%\end{style}
+%
+
+%\iffalse
+% \begin{macrocode}
+%</glossary-mcols.sty>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*glossary-super.sty>
+% \end{macrocode}
+%\fi
+% \section{Glossary Styles using supertabular environment (glossary-super package)}
+% The glossary styles defined in the \isty{glossary-super} package
+% use the \env{supertabular} environment.
+% \begin{macrocode}
+\ProvidesPackage{glossary-super}[2019/01/06 v4.42 (NLCT)]
+% \end{macrocode}
+% Requires the \isty{supertabular} package:
+% \begin{macrocode}
+\RequirePackage{supertabular}
+% \end{macrocode}
+%\begin{macro}{\glsdescwidth}
+% This is a length that governs the width of the description column.
+% This may already have been defined if \isty{glossary-long}
+% has been loaded.\changes{2.01}{2009 May 30}{changed \cs{linewidth}
+% to \cs{hsize}}
+% \begin{macrocode}
+\@ifundefined{glsdescwidth}{%
+ \newlength\glsdescwidth
+ \setlength{\glsdescwidth}{0.6\hsize}
+}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glspagelistwidth}
+% This is a length that governs the width of the page list column.
+% This may already have been defined if \isty{glossary-long}
+% has been loaded.\changes{2.01}{2009 May 30}{changed \cs{linewidth}
+% to \cs{hsize}}
+% \begin{macrocode}
+\@ifundefined{glspagelistwidth}{%
+ \newlength\glspagelistwidth
+ \setlength{\glspagelistwidth}{0.1\hsize}
+}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{style}{super}
+% The \glostyle{super} glossary style uses the
+% \env{supertabular} environment
+% (it uses lengths defined in the \isty{glossary-long} package.)
+% \begin{macrocode}
+\newglossarystyle{super}{%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% two columns and no head or tail:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{}\tabletail{}%
+ \begin{supertabular}{lp{\glsdescwidth}}}%
+ {\end{supertabular}}%
+% \end{macrocode}
+% Do nothing at the start of the table:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{}%
+% \end{macrocode}
+% No group headings:
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{}%
+% \end{macrocode}
+% Main (level 0) entries put in a row (name in first column,
+% description and page list in second column):
+%\changes{3.13a}{2013-11-05}{switched to \cs{tabularnewline}}
+% \begin{macrocode}
+ \renewcommand{\glossentry}[2]{%
+ \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} &
+ \glossentrydesc{##1}\glspostdescription\space ##2\tabularnewline
+ }%
+% \end{macrocode}
+% Sub entries put in a row (no name, description and page list
+% in second column):
+%\changes{4.0}{2013-11-14}{fixed typo in \cs{subglossentry} (\cs{glossentrydesc})}
+% \begin{macrocode}
+ \renewcommand{\subglossentry}[3]{%
+ &
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}\glossentrydesc{##2}\glspostdescription\space
+ ##3\tabularnewline
+ }%
+% \end{macrocode}
+% Blank row between groups:
+%\changes{3.03}{2012/09/21}{added check for glsnogroupskip}
+%\changes{4.23}{2016-04-30}{check for nogroupskip changed}
+%The check for \pkgopt{nogroupskip} must occur outside
+%\cs{glsgroupskip}
+%(\url{http://www.dickimaw-books.com/cgi-bin/bugtracker.cgi?action=view&key=108})
+% \begin{macrocode}
+ \ifglsnogroupskip
+ \renewcommand*{\glsgroupskip}{}%
+ \else
+ \renewcommand*{\glsgroupskip}{& \tabularnewline}%
+ \fi
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{superborder}
+% The \glostyle{superborder} style is like the above, but with
+% horizontal and vertical lines:
+% \begin{macrocode}
+\newglossarystyle{superborder}{%
+% \end{macrocode}
+% Base it on the glostyle{super} style:
+% \begin{macrocode}
+ \setglossarystyle{super}%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% two columns and a horizontal line in the head and tail:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{\hline}\tabletail{\hline}%
+ \begin{supertabular}{|l|p{\glsdescwidth}|}}%
+ {\end{supertabular}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{superheader}
+% The \glostyle{superheader} style is like the
+% \glostyle{super} style, but with a header:
+% \begin{macrocode}
+\newglossarystyle{superheader}{%
+% \end{macrocode}
+% Base it on the glostyle{super} style:
+% \begin{macrocode}
+ \setglossarystyle{super}%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% two columns, a header and no tail:
+%\changes{3.13a}{2013-11-05}{switched to \cs{tabularnewline}}
+% \begin{macrocode}
+\renewenvironment{theglossary}%
+ {\tablehead{\bfseries \entryname &
+ \bfseries\descriptionname\tabularnewline}%
+ \tabletail{}%
+ \begin{supertabular}{lp{\glsdescwidth}}}%
+ {\end{supertabular}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{superheaderborder}
+% The \glostyle{superheaderborder} style is like
+% the \glostyle{super} style but with a header and border:
+% \begin{macrocode}
+\newglossarystyle{superheaderborder}{%
+% \end{macrocode}
+% Base it on the glostyle{super} style:
+% \begin{macrocode}
+ \setglossarystyle{super}%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% two columns, a header and horizontal lines above and below the
+% table:
+%\changes{3.13a}{2013-11-05}{switched to \cs{tabularnewline}}
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{\hline\bfseries \entryname &
+ \bfseries \descriptionname\tabularnewline\hline}%
+ \tabletail{\hline}
+ \begin{supertabular}{|l|p{\glsdescwidth}|}}%
+ {\end{supertabular}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{super3col}
+% The \glostyle{super3col} style is like the \glostyle{super}
+% style, but with 3 columns:
+% \begin{macrocode}
+\newglossarystyle{super3col}{%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% three columns and no head or tail:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{}\tabletail{}%
+ \begin{supertabular}{lp{\glsdescwidth}p{\glspagelistwidth}}}%
+ {\end{supertabular}}%
+% \end{macrocode}
+% Do nothing at the start of the table:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{}%
+% \end{macrocode}
+% No group headings:
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{}%
+% \end{macrocode}
+% Main (level 0) entries on a row (name in first column,
+% description in second column, page list in last column):
+%\changes{3.13a}{2013-11-05}{switched to \cs{tabularnewline}}
+% \begin{macrocode}
+ \renewcommand{\glossentry}[2]{%
+ \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} &
+ \glossentrydesc{##1} & ##2\tabularnewline
+ }%
+% \end{macrocode}
+% Sub entries on a row (no name, description in second column,
+% page list in last column):
+% \begin{macrocode}
+ \renewcommand{\subglossentry}[3]{%
+ &
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}\glossentrydesc{##2} &
+ ##3\tabularnewline
+ }%
+% \end{macrocode}
+% Blank row between groups:
+%\changes{3.03}{2012/09/21}{added check for glsnogroupskip}
+%\changes{4.23}{2016-04-30}{check for nogroupskip changed}
+%The check for \pkgopt{nogroupskip} must occur outside
+%\cs{glsgroupskip}
+%(\url{http://www.dickimaw-books.com/cgi-bin/bugtracker.cgi?action=view&key=108})
+% \begin{macrocode}
+ \ifglsnogroupskip
+ \renewcommand*{\glsgroupskip}{}%
+ \else
+ \renewcommand*{\glsgroupskip}{& & \tabularnewline}%
+ \fi
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{super3colborder}
+% The \glostyle{super3colborder} style is like the
+% \glostyle{super3col} style, but with a border:
+% \begin{macrocode}
+\newglossarystyle{super3colborder}{%
+% \end{macrocode}
+% Base it on the glostyle{super3col} style:
+% \begin{macrocode}
+ \setglossarystyle{super3col}%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% three columns and a horizontal line in the head and tail:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{\hline}\tabletail{\hline}%
+ \begin{supertabular}{|l|p{\glsdescwidth}|p{\glspagelistwidth}|}}%
+ {\end{supertabular}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{super3colheader}
+% The \glostyle{super3colheader} style is like
+% the \glostyle{super3col} style but with a header row:
+% \begin{macrocode}
+\newglossarystyle{super3colheader}{%
+% \end{macrocode}
+% Base it on the glostyle{super3col} style:
+% \begin{macrocode}
+ \setglossarystyle{super3col}%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% three columns, a header and no tail:
+%\changes{3.13a}{2013-11-05}{switched to \cs{tabularnewline}}
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{\bfseries\entryname&\bfseries\descriptionname&
+ \bfseries\pagelistname\tabularnewline}\tabletail{}%
+ \begin{supertabular}{lp{\glsdescwidth}p{\glspagelistwidth}}}%
+ {\end{supertabular}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{super3colheaderborder}
+% The \glostyle{super3colheaderborder} style is like
+% the \glostyle{super3col} style but with a header and border:
+% \begin{macrocode}
+\newglossarystyle{super3colheaderborder}{%
+% \end{macrocode}
+% Base it on the glostyle{super3colborder} style:
+% \begin{macrocode}
+ \setglossarystyle{super3colborder}%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% three columns, a header with horizontal lines and a horizontal
+% line in the tail:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{\hline
+ \bfseries\entryname&\bfseries\descriptionname&
+ \bfseries\pagelistname\tabularnewline\hline}%
+ \tabletail{\hline}%
+ \begin{supertabular}{|l|p{\glsdescwidth}|p{\glspagelistwidth}|}}%
+ {\end{supertabular}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{super4col}
+% The \glostyle{super4col} glossary style has four columns,
+% where the third column contains the value of the
+% corresponding \gloskey{symbol} key used when that entry
+% was defined.
+% \begin{macrocode}
+\newglossarystyle{super4col}{%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% four columns and no head or tail:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{}\tabletail{}%
+ \begin{supertabular}{llll}}{%
+ \end{supertabular}}%
+% \end{macrocode}
+% Do nothing at the start of the table:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{}%
+% \end{macrocode}
+% No group headings:
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{}%
+% \end{macrocode}
+% Main (level 0) entries on a row with the name in the first
+% column, description in second column, symbol in third column
+% and page list in last column:
+%\changes{3.13a}{2013-11-05}{switched to \cs{tabularnewline}}
+%\changes{4.22}{2016-04-19}{fixed bug in \cs{glossentry}}
+% \begin{macrocode}
+ \renewcommand{\glossentry}[2]{%
+ \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} &
+ \glossentrydesc{##1} &
+ \glossentrysymbol{##1} & ##2\tabularnewline
+ }%
+% \end{macrocode}
+% Sub entries on a row with no name, the description in the second
+% column, symbol in third column and page list in last column:
+% \begin{macrocode}
+ \renewcommand{\subglossentry}[3]{%
+ &
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}\glossentrydesc{##2} &
+ \glossentrysymbol{##2} & ##3\tabularnewline
+ }%
+% \end{macrocode}
+% Blank row between groups:
+%\changes{3.03}{2012/09/21}{added check for glsnogroupskip}
+%\changes{4.23}{2016-04-30}{check for nogroupskip changed}
+%The check for \pkgopt{nogroupskip} must occur outside
+%\cs{glsgroupskip}
+%(\url{http://www.dickimaw-books.com/cgi-bin/bugtracker.cgi?action=view&key=108})
+% \begin{macrocode}
+ \ifglsnogroupskip
+ \renewcommand*{\glsgroupskip}{}%
+ \else
+ \renewcommand*{\glsgroupskip}{& & & \tabularnewline}%
+ \fi
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{super4colheader}
+% The \glostyle{super4colheader} style is like
+% the \glostyle{super4col} but with a header row.
+% \begin{macrocode}
+\newglossarystyle{super4colheader}{%
+% \end{macrocode}
+% Base it on the glostyle{super4col} style:
+% \begin{macrocode}
+ \setglossarystyle{super4col}%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% four columns, a header and no tail:
+%\changes{3.13a}{2013-11-05}{switched to \cs{tabularnewline}}
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{\bfseries\entryname&\bfseries\descriptionname&
+ \bfseries\symbolname &
+ \bfseries\pagelistname\tabularnewline}%
+ \tabletail{}%
+ \begin{supertabular}{llll}}%
+ {\end{supertabular}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{super4colborder}
+% The \glostyle{super4colborder} style is like
+% the \glostyle{super4col} but with a border.
+% \begin{macrocode}
+\newglossarystyle{super4colborder}{%
+% \end{macrocode}
+% Base it on the glostyle{super4col} style:
+% \begin{macrocode}
+ \setglossarystyle{super4col}%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% four columns and a horizontal line in the head and tail:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{\hline}\tabletail{\hline}%
+ \begin{supertabular}{|l|l|l|l|}}%
+ {\end{supertabular}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{super4colheaderborder}
+% The \glostyle{super4colheaderborder} style is like
+% the \glostyle{super4col} but with a header and border.
+% \begin{macrocode}
+\newglossarystyle{super4colheaderborder}{%
+% \end{macrocode}
+% Base it on the glostyle{super4col} style:
+% \begin{macrocode}
+ \setglossarystyle{super4col}%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% four columns and a header bordered by horizontal lines and
+% a horizontal line in the tail:
+%\changes{3.13a}{2013-11-05}{switched to \cs{tabularnewline}}
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{\hline\bfseries\entryname&\bfseries\descriptionname&
+ \bfseries\symbolname &
+ \bfseries\pagelistname\tabularnewline\hline}%
+ \tabletail{\hline}%
+ \begin{supertabular}{|l|l|l|l|}}%
+ {\end{supertabular}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{altsuper4col}
+% The \glostyle{altsuper4col} glossary style is like
+% \glostyle{super4col} but has provision for multiline descriptions.
+% \begin{macrocode}
+\newglossarystyle{altsuper4col}{%
+% \end{macrocode}
+% Base it on the glostyle{super4col} style:
+% \begin{macrocode}
+ \setglossarystyle{super4col}%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% four columns and no head or tail:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{}\tabletail{}%
+ \begin{supertabular}{lp{\glsdescwidth}lp{\glspagelistwidth}}}%
+ {\end{supertabular}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{altsuper4colheader}
+% The \glostyle{altsuper4colheader} style is like
+% the \glostyle{altsuper4col} but with a header row.
+% \begin{macrocode}
+\newglossarystyle{altsuper4colheader}{%
+% \end{macrocode}
+% Base it on the glostyle{super4colheader} style:
+% \begin{macrocode}
+ \setglossarystyle{super4colheader}%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% four columns, a header and no tail:
+%\changes{3.13a}{2013-11-05}{switched to \cs{tabularnewline}}
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{\bfseries\entryname&\bfseries\descriptionname&
+ \bfseries\symbolname &
+ \bfseries\pagelistname\tabularnewline}\tabletail{}%
+ \begin{supertabular}{lp{\glsdescwidth}lp{\glspagelistwidth}}}%
+ {\end{supertabular}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{altsuper4colborder}
+% The \glostyle{altsuper4colborder} style is like
+% the \glostyle{altsuper4col} but with a border.
+% \begin{macrocode}
+\newglossarystyle{altsuper4colborder}{%
+% \end{macrocode}
+% Base it on the glostyle{super4colborder} style:
+% \begin{macrocode}
+ \setglossarystyle{super4colborder}%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% four columns and a horizontal line in the head and tail:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{\hline}\tabletail{\hline}%
+ \begin{supertabular}%
+ {|l|p{\glsdescwidth}|l|p{\glspagelistwidth}|}}%
+ {\end{supertabular}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{altsuper4colheaderborder}
+% The \glostyle{altsuper4colheaderborder} style is like
+% the \glostyle{altsuper4col} but with a header and border.
+% \begin{macrocode}
+\newglossarystyle{altsuper4colheaderborder}{%
+% \end{macrocode}
+% Base it on the glostyle{super4colheaderborder} style:
+% \begin{macrocode}
+ \setglossarystyle{super4colheaderborder}%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% four columns and a header bordered by horizontal lines and
+% a horizontal line in the tail:
+%\changes{3.13a}{2013-11-05}{switched to \cs{tabularnewline}}
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{\hline
+ \bfseries\entryname &
+ \bfseries\descriptionname &
+ \bfseries\symbolname &
+ \bfseries\pagelistname\tabularnewline\hline}%
+ \tabletail{\hline}%
+ \begin{supertabular}%
+ {|l|p{\glsdescwidth}|l|p{\glspagelistwidth}|}}%
+ {\end{supertabular}}%
+}
+% \end{macrocode}
+%\end{style}
+%\iffalse
+% \begin{macrocode}
+%</glossary-super.sty>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*glossary-superragged.sty>
+% \end{macrocode}
+%\fi
+% \section{Glossary Styles using supertabular environment (glossary-superragged package)}
+% The glossary styles defined in the \isty{glossary-superragged}
+% package use the \env{supertabular} environment. These styles
+% are like those provided by the \isty{glossary-super} package,
+% except that the multiline columns have ragged right justification.
+% \begin{macrocode}
+\ProvidesPackage{glossary-superragged}[2019/01/06 v4.42 (NLCT)]
+% \end{macrocode}
+% Requires the \isty{array} package:
+% \begin{macrocode}
+\RequirePackage{array}
+% \end{macrocode}
+% Requires the \isty{supertabular} package:
+% \begin{macrocode}
+\RequirePackage{supertabular}
+% \end{macrocode}
+%\begin{macro}{\glsdescwidth}
+% This is a length that governs the width of the description column.
+% This may already have been defined.
+% \begin{macrocode}
+\@ifundefined{glsdescwidth}{%
+ \newlength\glsdescwidth
+ \setlength{\glsdescwidth}{0.6\hsize}
+}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glspagelistwidth}
+% This is a length that governs the width of the page list column.
+% This may already have been defined.
+% \begin{macrocode}
+\@ifundefined{glspagelistwidth}{%
+ \newlength\glspagelistwidth
+ \setlength{\glspagelistwidth}{0.1\hsize}
+}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{style}{superragged}
+% The \glostyle{superragged} glossary style uses the
+% \env{supertabular} environment.
+% \begin{macrocode}
+\newglossarystyle{superragged}{%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% two columns and no head or tail:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{}\tabletail{}%
+ \begin{supertabular}{l>{\raggedright}p{\glsdescwidth}}}%
+ {\end{supertabular}}%
+% \end{macrocode}
+% Do nothing at the start of the table:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{}%
+% \end{macrocode}
+% No group headings:
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{}%
+% \end{macrocode}
+% Main (level 0) entries put in a row (name in first column,
+% description and page list in second column):
+%\changes{3.08a}{2013-09-28}{updated to use \cs{glossentry} and
+%\cs{subglossentry}}
+% \begin{macrocode}
+ \renewcommand{\glossentry}[2]{%
+ \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} &
+ \glossentrydesc{##1}\glspostdescription\space ##2%
+ \tabularnewline
+ }%
+% \end{macrocode}
+% Sub entries put in a row (no name, description and page list
+% in second column):
+% \begin{macrocode}
+ \renewcommand{\subglossentry}[3]{%
+ &
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}\glossentrydesc{##2}\glspostdescription\space
+ ##3%
+ \tabularnewline
+ }%
+% \end{macrocode}
+% Blank row between groups:
+%\changes{3.03}{2012/09/21}{added check for glsnogroupskip}
+%\changes{4.23}{2016-04-30}{check for nogroupskip changed}
+%The check for \pkgopt{nogroupskip} must occur outside
+%\cs{glsgroupskip}
+%(\url{http://www.dickimaw-books.com/cgi-bin/bugtracker.cgi?action=view&key=108})
+% \begin{macrocode}
+ \ifglsnogroupskip
+ \renewcommand*{\glsgroupskip}{}%
+ \else
+ \renewcommand*{\glsgroupskip}{& \tabularnewline}%
+ \fi
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{superraggedborder}
+% The \glostyle{superraggedborder} style is like the above, but with
+% horizontal and vertical lines:
+% \begin{macrocode}
+\newglossarystyle{superraggedborder}{%
+% \end{macrocode}
+% Base it on the glostyle{superragged} style:
+% \begin{macrocode}
+ \setglossarystyle{superragged}%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% two columns and a horizontal line in the head and tail:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{\hline}\tabletail{\hline}%
+ \begin{supertabular}{|l|>{\raggedright}p{\glsdescwidth}|}}%
+ {\end{supertabular}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{superraggedheader}
+% The \glostyle{superraggedheader} style is like the
+% \glostyle{super} style, but with a header:
+% \begin{macrocode}
+\newglossarystyle{superraggedheader}{%
+% \end{macrocode}
+% Base it on the glostyle{superragged} style:
+% \begin{macrocode}
+ \setglossarystyle{superragged}%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% two columns, a header and no tail:
+% \begin{macrocode}
+\renewenvironment{theglossary}%
+ {\tablehead{\bfseries \entryname & \bfseries \descriptionname
+ \tabularnewline}%
+ \tabletail{}%
+ \begin{supertabular}{l>{\raggedright}p{\glsdescwidth}}}%
+ {\end{supertabular}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{superraggedheaderborder}
+% The \glostyle{superraggedheaderborder} style is like
+% the \glostyle{superragged} style but with a header and border:
+% \begin{macrocode}
+\newglossarystyle{superraggedheaderborder}{%
+% \end{macrocode}
+% Base it on the glostyle{super} style:
+% \begin{macrocode}
+ \setglossarystyle{superragged}%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% two columns, a header and horizontal lines above and below the
+% table:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{\hline\bfseries \entryname &
+ \bfseries \descriptionname\tabularnewline\hline}%
+ \tabletail{\hline}
+ \begin{supertabular}{|l|>{\raggedright}p{\glsdescwidth}|}}%
+ {\end{supertabular}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{superragged3col}
+% The \glostyle{superragged3col} style is like the \glostyle{superragged}
+% style, but with 3 columns:
+% \begin{macrocode}
+\newglossarystyle{superragged3col}{%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% three columns and no head or tail:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{}\tabletail{}%
+ \begin{supertabular}{l>{\raggedright}p{\glsdescwidth}%
+ >{\raggedright}p{\glspagelistwidth}}}%
+ {\end{supertabular}}%
+% \end{macrocode}
+% Do nothing at the start of the table:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{}%
+% \end{macrocode}
+% No group headings:
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{}%
+% \end{macrocode}
+% Main (level 0) entries on a row (name in first column,
+% description in second column, page list in last column):
+% \begin{macrocode}
+ \renewcommand{\glossentry}[2]{%
+ \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} &
+ \glossentrydesc{##1} &
+ ##2\tabularnewline
+ }%
+% \end{macrocode}
+% Sub entries on a row (no name, description in second column,
+% page list in last column):
+% \begin{macrocode}
+ \renewcommand{\subglossentry}[3]{%
+ &
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}\glossentrydesc{##2} &
+ ##3\tabularnewline
+ }%
+% \end{macrocode}
+% Blank row between groups:
+%\changes{3.03}{2012/09/21}{added check for glsnogroupskip}
+%\changes{4.23}{2016-04-30}{check for nogroupskip changed}
+%The check for \pkgopt{nogroupskip} must occur outside
+%\cs{glsgroupskip}
+%(\url{http://www.dickimaw-books.com/cgi-bin/bugtracker.cgi?action=view&key=108})
+% \begin{macrocode}
+ \ifglsnogroupskip
+ \renewcommand*{\glsgroupskip}{}%
+ \else
+ \renewcommand*{\glsgroupskip}{& & \tabularnewline}%
+ \fi
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{superragged3colborder}
+% The \glostyle{superragged3colborder} style is like the
+% \glostyle{superragged3col} style, but with a border:
+% \begin{macrocode}
+\newglossarystyle{superragged3colborder}{%
+% \end{macrocode}
+% Base it on the glostyle{superragged3col} style:
+% \begin{macrocode}
+ \setglossarystyle{superragged3col}%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% three columns and a horizontal line in the head and tail:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{\hline}\tabletail{\hline}%
+ \begin{supertabular}{|l|>{\raggedright}p{\glsdescwidth}|%
+ >{\raggedright}p{\glspagelistwidth}|}}%
+ {\end{supertabular}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{superragged3colheader}
+% The \glostyle{superragged3colheader} style is like
+% the \glostyle{superragged3col} style but with a header row:
+% \begin{macrocode}
+\newglossarystyle{superragged3colheader}{%
+% \end{macrocode}
+% Base it on the glostyle{superragged3col} style:
+% \begin{macrocode}
+ \setglossarystyle{superragged3col}%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% three columns, a header and no tail:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{\bfseries\entryname&\bfseries\descriptionname&
+ \bfseries\pagelistname\tabularnewline}\tabletail{}%
+ \begin{supertabular}{l>{\raggedright}p{\glsdescwidth}%
+ >{\raggedright}p{\glspagelistwidth}}}%
+ {\end{supertabular}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{superraggedright3colheaderborder}
+% The \glostyle{superragged3colheaderborder} style is like
+% the \glostyle{superragged3col} style but with a header and border:
+% \begin{macrocode}
+\newglossarystyle{superragged3colheaderborder}{%
+% \end{macrocode}
+% Base it on the glostyle{superragged3colborder} style:
+% \begin{macrocode}
+ \setglossarystyle{superragged3colborder}%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% three columns, a header with horizontal lines and a horizontal
+% line in the tail:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{\hline
+ \bfseries\entryname&\bfseries\descriptionname&
+ \bfseries\pagelistname\tabularnewline\hline}%
+ \tabletail{\hline}%
+ \begin{supertabular}{|l|>{\raggedright}p{\glsdescwidth}|%
+ >{\raggedright}p{\glspagelistwidth}|}}%
+ {\end{supertabular}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{altsuperragged4col}
+% The \glostyle{altsuperragged4col} glossary style is like
+% \glostyle{altsuper4col} style in the \isty{glossary-super}
+% package but uses ragged right formatting in the description
+% and page list columns.
+% \begin{macrocode}
+\newglossarystyle{altsuperragged4col}{%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% four columns and no head or tail:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{}\tabletail{}%
+ \begin{supertabular}{l>{\raggedright}p{\glsdescwidth}l%
+ >{\raggedright}p{\glspagelistwidth}}}%
+ {\end{supertabular}}%
+% \end{macrocode}
+% Do nothing at the start of the table:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{}%
+% \end{macrocode}
+% No group headings:
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{}%
+% \end{macrocode}
+% Main (level 0) entries on a row with the name in the first
+% column, description in second column, symbol in third column
+% and page list in last column:
+% \begin{macrocode}
+ \renewcommand{\glossentry}[2]{%
+ \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} &
+ \glossentrydesc{##1} &
+ \glossentrysymbol{##1} & ##2\tabularnewline
+ }%
+% \end{macrocode}
+% Sub entries on a row with no name, the description in the second
+% column, symbol in third column and page list in last column:
+% \begin{macrocode}
+ \renewcommand{\subglossentry}[3]{%
+ &
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}\glossentrydesc{##2} &
+ \glossentrysymbol{##2} & ##3\tabularnewline
+ }%
+% \end{macrocode}
+% Blank row between groups:
+%\changes{3.03}{2012/09/21}{added check for glsnogroupskip}
+%\changes{4.23}{2016-04-30}{check for nogroupskip changed}
+%The check for \pkgopt{nogroupskip} must occur outside
+%\cs{glsgroupskip}
+%(\url{http://www.dickimaw-books.com/cgi-bin/bugtracker.cgi?action=view&key=108})
+% \begin{macrocode}
+ \ifglsnogroupskip
+ \renewcommand*{\glsgroupskip}{}%
+ \else
+ \renewcommand*{\glsgroupskip}{& & & \tabularnewline}%
+ \fi
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{altsuperragged4colheader}
+% The \glostyle{altsuperragged4colheader} style is like
+% the \glostyle{altsuperragged4col} style but with a header row.
+% \begin{macrocode}
+\newglossarystyle{altsuperragged4colheader}{%
+% \end{macrocode}
+% Base it on the glostyle{altsuperragged4col} style:
+% \begin{macrocode}
+ \setglossarystyle{altsuperragged4col}%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% four columns, a header and no tail:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{\bfseries\entryname&\bfseries\descriptionname&
+ \bfseries\symbolname &
+ \bfseries\pagelistname\tabularnewline}\tabletail{}%
+ \begin{supertabular}{l>{\raggedright}p{\glsdescwidth}l%
+ >{\raggedright}p{\glspagelistwidth}}}%
+ {\end{supertabular}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{altsuperragged4colborder}
+% The \glostyle{altsuperragged4colborder} style is like
+% the \glostyle{altsuperragged4col} style but with a border.
+% \begin{macrocode}
+\newglossarystyle{altsuperragged4colborder}{%
+% \end{macrocode}
+% Base it on the glostyle{altsuperragged4col} style:
+% \begin{macrocode}
+ \setglossarystyle{altsuper4col}%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% four columns and a horizontal line in the head and tail:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{\hline}\tabletail{\hline}%
+ \begin{supertabular}%
+ {|l|>{\raggedright}p{\glsdescwidth}|l|%
+ >{\raggedright}p{\glspagelistwidth}|}}%
+ {\end{supertabular}}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{altsuperragged4colheaderborder}
+% The \glostyle{altsuperragged4colheaderborder} style is like
+% the \glostyle{altsuperragged4col} style but with a header and border.
+% \begin{macrocode}
+\newglossarystyle{altsuperragged4colheaderborder}{%
+% \end{macrocode}
+% Base it on the glostyle{altsuperragged4col} style:
+% \begin{macrocode}
+ \setglossarystyle{altsuperragged4col}%
+% \end{macrocode}
+% Put the glossary in a \env{supertabular} environment with
+% four columns and a header bordered by horizontal lines and
+% a horizontal line in the tail:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\tablehead{\hline
+ \bfseries\entryname &
+ \bfseries\descriptionname &
+ \bfseries\symbolname &
+ \bfseries\pagelistname\tabularnewline\hline}%
+ \tabletail{\hline}%
+ \begin{supertabular}%
+ {|l|>{\raggedright}p{\glsdescwidth}|l|%
+ >{\raggedright}p{\glspagelistwidth}|}}%
+ {\end{supertabular}}%
+}
+% \end{macrocode}
+%\end{style}
+%\iffalse
+% \begin{macrocode}
+%</glossary-superragged.sty>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*glossary-tree.sty>
+% \end{macrocode}
+%\fi
+%\section{Tree Styles (glossary-tree.sty)}
+% The \isty{glossary-tree} style file defines glossary styles
+% that have a tree-like structure. These are designed for
+% hierarchical glossaries.
+% \begin{macrocode}
+\ProvidesPackage{glossary-tree}[2019/01/06 v4.42 (NLCT)]
+% \end{macrocode}
+%
+%\begin{macro}{\indexspace}
+%\changes{4.13}{2015-02-03}{new}
+% There are a few classes that don't define \cs{indexspace}, so
+% provide a definition if it hasn't been defined.
+% \begin{macrocode}
+\providecommand{\indexspace}{%
+ \par \vskip 10\p@ \@plus 5\p@ \@minus 3\p@ \relax
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glstreenamefmt}
+%\changes{4.08}{2014-07-30}{new}
+% Format used to display the name in the tree styles. (This may be
+% counteracted by \ics{glsnamefont}.) This command was previously also used to
+% format the group headings.
+% \begin{macrocode}
+\newcommand*{\glstreenamefmt}[1]{\textbf{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glstreegroupheaderfmt}
+%\changes{4.22}{2016-04-19}{new}
+% Format used to display the group header in the tree styles.
+% Before v4.22, \cs{glstreenamefmt} was used for the group header,
+% so the default definition uses that to help maintain
+% backward-compatibility, since in previous versions redefining
+% \cs{glstreenamefmt} would've also affected the group headings.
+% \begin{macrocode}
+\newcommand*{\glstreegroupheaderfmt}[1]{\glstreenamefmt{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glstreenavigationfmt}
+%\changes{4.22}{2016-04-19}{new}
+% Format used to display the navigation header in the tree styles.
+% \begin{macrocode}
+\newcommand*{\glstreenavigationfmt}[1]{\glstreenamefmt{#1}}
+% \end{macrocode}
+%\end{macro}
+%
+%Allow the user to adjust the \glostyle{index} style without disturbing the index.
+%\begin{macro}{\glstreeitem}
+%Top level item used in \glostyle{index} style.
+%\changes{4.26}{2016-10-12}{new}
+% \begin{macrocode}
+\ifdef\@idxitem
+{\newcommand{\glstreeitem}{\@idxitem}}
+{\newcommand{\glstreeitem}{\par\hangindent40\p@}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glstreesubitem}
+%\changes{4.26}{2016-10-12}{new}
+%Level~1 item used in \glostyle{index} style.
+% \begin{macrocode}
+\ifdef\subitem
+{\let\glstreesubitem\subitem}
+{\newcommand\glstreesubitem{\glstreeitem\hspace*{20\p@}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glstreesubsubitem}
+%\changes{4.26}{2016-10-12}{new}
+%Level~1 item used in \glostyle{index} style.
+% \begin{macrocode}
+\ifdef\subsubitem
+{\let\glstreesubsubitem\subsubitem}
+{\newcommand\glstreesubsubitem{\glstreeitem\hspace*{30\p@}}}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glstreepredesc}
+%Allow the user to adjust the space before the description (except
+%for the \glostyle{alttree} style).
+%\changes{4.26}{2016-10-12}{new}
+% \begin{macrocode}
+\newcommand{\glstreepredesc}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glstreechildpredesc}
+%Allow the user to adjust the space before the description for
+%sub-entries (except for the \glostyle{treenoname} and
+%\glostyle{alttree} style).
+%\changes{4.26}{2016-10-12}{new}
+% \begin{macrocode}
+\newcommand{\glstreechildpredesc}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{style}{index}
+% The \glostyle{index} glossary style
+% is similar in style to the way indices are usually typeset
+% using \cs{item}, \cs{subitem} and \cs{subsubitem}.
+% The entry name is
+% set in bold. If an entry has a symbol, it is placed in
+% brackets after the name. Then the description is displayed,
+% followed by the number list. This style allows up to three
+% levels.
+% \begin{macrocode}
+\newglossarystyle{index}{%
+% \end{macrocode}
+% Set the paragraph indentation and skip and define \ics{item}
+% to be the same as that used by \env{theindex}:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\setlength{\parindent}{0pt}%
+ \setlength{\parskip}{0pt plus 0.3pt}%
+ \let\item\glstreeitem
+ \let\subitem\glstreesubitem
+ \let\subsubitem\glstreesubsubitem
+ }%
+% \end{macrocode}
+%\changes{3.08a}{2013-09-28}{added paragraph break at end of environment}
+% \begin{macrocode}
+ {\par}%
+% \end{macrocode}
+% Do nothing at the start of the environment:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{}%
+% \end{macrocode}
+% No group headers:
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{}%
+% \end{macrocode}
+% Main (level 0) entry starts a new item with the name in bold
+% followed by the symbol in brackets (if it exists), the description
+% and the page list.
+%\changes{3.08a}{2013-09-28}{updated to use \cs{glossentry} and
+%\cs{subglossentry}}
+% \begin{macrocode}
+ \renewcommand*{\glossentry}[2]{%
+ \item\glsentryitem{##1}\glstreenamefmt{\glstarget{##1}{\glossentryname{##1}}}%
+ \ifglshassymbol{##1}{\space(\glossentrysymbol{##1})}{}%
+ \glstreepredesc \glossentrydesc{##1}\glspostdescription\space ##2%
+ }%
+% \end{macrocode}
+% Sub entries: level 1 entries use \ics{subitem}, levels greater
+% than~1 use \ics{subsubitem}. The level ("##1") shouldn't be 0,
+% as that's catered by \cs{glossentry}, but for completeness,
+% if the level is 0, \ics{item} is used. The name is put in bold,
+% followed by the symbol in brackets (if it exists), the description
+% and the page list.
+% \begin{macrocode}
+ \renewcommand{\subglossentry}[3]{%
+ \ifcase##1\relax
+ % level 0
+ \item
+ \or
+ % level 1
+ \subitem
+ \glssubentryitem{##2}%
+ \else
+ % all other levels
+ \subsubitem
+ \fi
+ \glstreenamefmt{\glstarget{##2}{\glossentryname{##2}}}%
+ \ifglshassymbol{##2}{\space(\glossentrysymbol{##2})}{}%
+ \glstreechildpredesc\glossentrydesc{##2}\glspostdescription\space ##3%
+ }%
+% \end{macrocode}
+% Vertical gap between groups is the same as that used by indices:
+%\changes{3.03}{2012/09/21}{added check for glsnogroupskip}
+% \begin{macrocode}
+ \renewcommand*{\glsgroupskip}{\ifglsnogroupskip\else\indexspace\fi}}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{indexgroup}
+% The \glostyle{indexgroup} style is like the \glostyle{index}
+% style but has headings.
+% \begin{macrocode}
+\newglossarystyle{indexgroup}{%
+% \end{macrocode}
+% Base it on the glostyle{index} style:
+% \begin{macrocode}
+ \setglossarystyle{index}%
+% \end{macrocode}
+% Add a heading for each group. This puts the group's title in
+% bold followed by a vertical gap.
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{%
+ \item\glstreegroupheaderfmt{\glsgetgrouptitle{##1}}%
+ \indexspace
+ }%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{indexhypergroup}
+% The \glostyle{indexhypergroup} style is like the
+% \glostyle{indexgroup} style but has hyper navigation.
+% \begin{macrocode}
+\newglossarystyle{indexhypergroup}{%
+% \end{macrocode}
+% Base it on the glostyle{index} style:
+% \begin{macrocode}
+ \setglossarystyle{index}%
+% \end{macrocode}
+% Put navigation links to the groups at the start of the glossary:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{%
+ \item\glstreenavigationfmt{\glsnavigation}\indexspace}%
+% \end{macrocode}
+% Add a heading for each group (with a target). The group's title is
+% in bold followed by a vertical gap.
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{%
+ \item\glstreegroupheaderfmt
+ {\glsnavhypertarget{##1}{\glsgetgrouptitle{##1}}}%
+ \indexspace}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{tree}
+% The \glostyle{tree} glossary style
+% is similar in style to the \glostyle{index} style, but
+% can have arbitrary levels.
+% \begin{macrocode}
+\newglossarystyle{tree}{%
+% \end{macrocode}
+% Set the paragraph indentation and skip:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\setlength{\parindent}{0pt}%
+ \setlength{\parskip}{0pt plus 0.3pt}}%
+ {}%
+% \end{macrocode}
+% Do nothing at the start of the \env{theglossary} environment:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{}%
+% \end{macrocode}
+% No group headings:
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{}%
+% \end{macrocode}
+% Main (level 0) entries: name in bold, followed by symbol in
+% brackets (if it exists), the description and the page list:
+%\changes{3.08a}{2013-09-28}{updated to use \cs{glossentry} and
+%\cs{subglossentry}}
+% \begin{macrocode}
+ \renewcommand{\glossentry}[2]{%
+ \hangindent0pt\relax
+ \parindent0pt\relax
+ \glsentryitem{##1}\glstreenamefmt{\glstarget{##1}{\glossentryname{##1}}}%
+ \ifglshassymbol{##1}{\space(\glossentrysymbol{##1})}{}%
+ \glstreepredesc\glossentrydesc{##1}\glspostdescription\space##2\par
+ }%
+% \end{macrocode}
+% Sub entries: level \meta{n} is indented by \meta{n} times
+% \ics{glstreeindent}. The name is in bold, followed by the
+% symbol in brackets (if it exists), the description and the
+% page list.
+% \begin{macrocode}
+ \renewcommand{\subglossentry}[3]{%
+ \hangindent##1\glstreeindent\relax
+ \parindent##1\glstreeindent\relax
+ \ifnum##1=1\relax
+ \glssubentryitem{##2}%
+ \fi
+ \glstreenamefmt{\glstarget{##2}{\glossentryname{##2}}}%
+ \ifglshassymbol{##2}{\space(\glossentrysymbol{##2})}{}%
+ \glstreechildpredesc\glossentrydesc{##2}\glspostdescription\space ##3\par
+ }%
+% \end{macrocode}
+% Vertical gap between groups is the same as that used by
+% indices:
+%\changes{3.03}{2012/09/21}{added check for glsnogroupskip}
+% \begin{macrocode}
+ \renewcommand*{\glsgroupskip}{\ifglsnogroupskip\else\indexspace\fi}}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{treegroup}
+% Like the \glostyle{tree} style but the glossary groups have
+% headings.
+% \begin{macrocode}
+\newglossarystyle{treegroup}{%
+% \end{macrocode}
+% Base it on the glostyle{tree} style:
+% \begin{macrocode}
+ \setglossarystyle{tree}%
+% \end{macrocode}
+% Each group has a heading (in bold) followed by a vertical gap):
+% \begin{macrocode}
+ \renewcommand{\glsgroupheading}[1]{\par
+ \noindent\glstreegroupheaderfmt{\glsgetgrouptitle{##1}}\par
+ \indexspace}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{treehypergroup}
+% The \glostyle{treehypergroup} style is like the \glostyle{treegroup}
+% style, but has a set of links to the groups at the
+% start of the glossary.
+% \begin{macrocode}
+\newglossarystyle{treehypergroup}{%
+% \end{macrocode}
+% Base it on the glostyle{tree} style:
+% \begin{macrocode}
+ \setglossarystyle{tree}%
+% \end{macrocode}
+% Put navigation links to the groups at the start of the
+% \env{theglossary} environment:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{%
+ \par\noindent\glstreenavigationfmt{\glsnavigation}\par\indexspace}%
+% \end{macrocode}
+% Each group has a heading (in bold with a target) followed by a
+% vertical gap):
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{%
+ \par\noindent
+ \glstreegroupheaderfmt
+ {\glsnavhypertarget{##1}{\glsgetgrouptitle{##1}}}\par
+ \indexspace}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{macro}{\glstreeindent}
+% Length governing left indent for each level of the \glostyle{tree}
+% style.
+% \begin{macrocode}
+\newlength\glstreeindent
+\setlength{\glstreeindent}{10pt}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{style}{treenoname}
+% The \glostyle{treenoname} glossary style
+% is like the \glostyle{tree} style, but
+% doesn't print the name or symbol for sub-levels.
+% \begin{macrocode}
+\newglossarystyle{treenoname}{%
+% \end{macrocode}
+% Set the paragraph indentation and skip:
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\setlength{\parindent}{0pt}%
+ \setlength{\parskip}{0pt plus 0.3pt}}%
+ {}%
+% \end{macrocode}
+% No header:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{}%
+% \end{macrocode}
+% No group headings:
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{}%
+% \end{macrocode}
+% Main (level 0) entries: the name is in bold, followed by the
+% symbol in brackets (if it exists), the description and the
+% page list.
+% \begin{macrocode}
+ \renewcommand{\glossentry}[2]{%
+ \hangindent0pt\relax
+ \parindent0pt\relax
+ \glsentryitem{##1}\glstreenamefmt{\glstarget{##1}{\glossentryname{##1}}}%
+ \ifglshassymbol{##1}{\space(\glossentrysymbol{##1})}{}%
+ \glstreepredesc\glossentrydesc{##1}\glspostdescription\space##2\par
+ }%
+% \end{macrocode}
+% Sub entries: level \meta{n} is indented by \meta{n} times
+% \ics{glstreeindent}. The name and symbol are omitted. The
+% description followed by the page list are displayed.
+% \begin{macrocode}
+ \renewcommand{\subglossentry}[3]{%
+ \hangindent##1\glstreeindent\relax
+ \parindent##1\glstreeindent\relax
+ \ifnum##1=1\relax
+ \glssubentryitem{##2}%
+ \fi
+ \glstarget{##2}{\strut}%
+ \glossentrydesc{##2}\glspostdescription\space##3\par
+ }%
+% \end{macrocode}
+% Vertical gap between groups is the same as that used by indices:
+%\changes{3.03}{2012/09/21}{added check for glsnogroupskip}
+% \begin{macrocode}
+ \renewcommand*{\glsgroupskip}{\ifglsnogroupskip\else\indexspace\fi}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{treenonamegroup}
+% Like the \glostyle{treenoname} style but the glossary groups have
+% headings.
+% \begin{macrocode}
+\newglossarystyle{treenonamegroup}{%
+% \end{macrocode}
+% Base it on the glostyle{treenoname} style:
+% \begin{macrocode}
+ \setglossarystyle{treenoname}%
+% \end{macrocode}
+% Give each group a heading:
+% \begin{macrocode}
+ \renewcommand{\glsgroupheading}[1]{\par
+ \noindent\glstreegroupheaderfmt
+ {\glsgetgrouptitle{##1}}\par\indexspace}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{treenonamehypergroup}
+% The \glostyle{treenonamehypergroup} style is like the \glostyle{treenonamegroup}
+% style, but has a set of links to the groups at the
+% start of the glossary.
+% \begin{macrocode}
+\newglossarystyle{treenonamehypergroup}{%
+% \end{macrocode}
+% Base it on the glostyle{treenoname} style:
+% \begin{macrocode}
+ \setglossarystyle{treenoname}%
+% \end{macrocode}
+% Put navigation links to the groups at the start of the
+% \env{theglossary} environment:
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{%
+ \par\noindent\glstreenavigationfmt{\glsnavigation}\par\indexspace}%
+% \end{macrocode}
+% Each group has a heading (in bold with a target) followed by a
+% vertical gap):
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{%
+ \par\noindent
+ \glstreegroupheaderfmt
+ {\glsnavhypertarget{##1}{\glsgetgrouptitle{##1}}}\par
+ \indexspace}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{macro}{\glsfindwidesttoplevelname}
+%\changes{4.22}{2016-04-19}{new}
+% Find the widest name over all parentless entries in the
+% given glossary or glossaries.
+% \begin{macrocode}
+\newrobustcmd*{\glsfindwidesttoplevelname}[1][\@glo@types]{%
+ \dimen@=0pt\relax
+ \gls@tmplen=0pt\relax
+ \forallglossaries[#1]{\@gls@type}%
+ {%
+ \forglsentries[\@gls@type]{\@glo@label}%
+ {%
+ \ifglshasparent{\@glo@label}%
+ {}%
+ {%
+ \settowidth{\dimen@}%
+ {\glstreenamefmt{\glsentryname{\@glo@label}}}%
+ \ifdim\dimen@>\gls@tmplen
+ \gls@tmplen=\dimen@
+ \letcs{\@glswidestname}{glo@\glsdetoklabel{\@glo@label}@name}%
+ \fi
+ }%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glssetwidest}
+% \cs{glssetwidest}\oarg{level}\marg{text} sets the widest
+% text for the given level. It is used by the
+% \glostyle{alttree} glossary styles to determine the
+% indentation of each level.
+% \begin{macrocode}
+\newcommand*{\glssetwidest}[2][0]{%
+ \expandafter\def\csname @glswidestname\romannumeral#1\endcsname{%
+ #2}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@glswidestname}
+% Initialise \cs{@glswidestname}.
+% \begin{macrocode}
+\newcommand*{\@glswidestname}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glstreenamebox}
+% Used by the \glostyle{alttree} style to create the box for the
+% name and associated information.
+%\changes{4.19}{2015-10-31}{new}
+% \begin{macrocode}
+\newcommand*{\glstreenamebox}[2]{%
+ \makebox[#1][l]{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{style}{alttree}
+% The \glostyle{alttree} glossary style
+% is similar in style to the \glostyle{tree} style, but
+% the indentation is obtained from the width of
+% \cs{@glswidestname} which is set using \cs{glssetwidest}.
+% \begin{macrocode}
+\newglossarystyle{alttree}{%
+% \end{macrocode}
+% Redefine \env{theglossary} environment.
+% \begin{macrocode}
+ \renewenvironment{theglossary}%
+ {\def\@gls@prevlevel{-1}%
+ \mbox{}\par}%
+ {\par}%
+% \end{macrocode}
+% Set the header and group headers to nothing.
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{}%
+ \renewcommand*{\glsgroupheading}[1]{}%
+% \end{macrocode}
+% Redefine the way that the level~0 entries are displayed.
+%\changes{3.08a}{2013-09-28}{updated to use \cs{glossentry} and
+%\cs{subglossentry}}
+% \begin{macrocode}
+ \renewcommand{\glossentry}[2]{%
+ \ifnum\@gls@prevlevel=0\relax
+ \else
+% \end{macrocode}
+% Find out how big the indentation should be by measuring the
+% widest entry.
+% \begin{macrocode}
+ \settowidth{\glstreeindent}{\glstreenamefmt{\@glswidestname\space}}%
+ \fi
+% \end{macrocode}
+% Set the hangindent and paragraph indent.
+%\changes{4.04}{2014-03-06}{moved hangindent and parindent assignments
+%outside level test}
+% \begin{macrocode}
+ \hangindent\glstreeindent
+ \parindent\glstreeindent
+% \end{macrocode}
+% Put the name to the left of the paragraph block.
+% \begin{macrocode}
+ \makebox[0pt][r]{\glstreenamebox{\glstreeindent}{%
+ \glsentryitem{##1}\glstreenamefmt{\glstarget{##1}{\glossentryname{##1}}}}}%
+% \end{macrocode}
+% If the symbol is missing, ignore it, otherwise put it in
+% brackets.
+%\changes{4.10}{2014-08-27}{moved space after symbol}
+% \begin{macrocode}
+ \ifglshassymbol{##1}{(\glossentrysymbol{##1})\space}{}%
+% \end{macrocode}
+% Do the description followed by the description terminator and
+% location list.
+% \begin{macrocode}
+ \glossentrydesc{##1}\glspostdescription \space ##2\par
+% \end{macrocode}
+% Set the previous level to 0.
+% \begin{macrocode}
+ \def\@gls@prevlevel{0}%
+ }%
+% \end{macrocode}
+% Redefine the way sub-entries are displayed.
+% \begin{macrocode}
+ \renewcommand{\subglossentry}[3]{%
+% \end{macrocode}
+% Increment and display the sub-entry counter if this is a level~1
+% entry and the sub-entry counter is in use.
+% \begin{macrocode}
+ \ifnum##1=1\relax
+ \glssubentryitem{##2}%
+ \fi
+% \end{macrocode}
+% If the level hasn't changed, keep the same settings, otherwise
+% adjust \cs{glstreeindent} accordingly.
+% \begin{macrocode}
+ \ifnum\@gls@prevlevel=##1\relax
+ \else
+% \end{macrocode}
+% Compute the widest entry for this level, or for level~0 if not
+% defined for this level. Store in \cs{gls@tmplen}
+% \begin{macrocode}
+ \@ifundefined{@glswidestname\romannumeral##1}{%
+ \settowidth{\gls@tmplen}{\glstreenamefmt{\@glswidestname\space}}}{%
+ \settowidth{\gls@tmplen}{\glstreenamefmt{%
+ \csname @glswidestname\romannumeral##1\endcsname\space}}}%
+% \end{macrocode}
+% Determine if going up or down a level
+% \begin{macrocode}
+ \ifnum\@gls@prevlevel<##1\relax
+% \end{macrocode}
+% Depth has increased, so add the width of the widest entry to
+% \cs{glstreeindent}.
+% \begin{macrocode}
+ \setlength\glstreeindent\gls@tmplen
+ \addtolength\glstreeindent\parindent
+ \parindent\glstreeindent
+ \else
+% \end{macrocode}
+% Depth has decreased, so subtract width of the widest entry
+% from the previous level to \cs{glstreeindent}. First
+% determine the width of the widest entry for the previous level
+% and store in \cs{glstreeindent}.
+% \begin{macrocode}
+ \@ifundefined{@glswidestname\romannumeral\@gls@prevlevel}{%
+ \settowidth{\glstreeindent}{\glstreenamefmt{%
+ \@glswidestname\space}}}{%
+ \settowidth{\glstreeindent}{\glstreenamefmt{%
+ \csname @glswidestname\romannumeral\@gls@prevlevel
+ \endcsname\space}}}%
+% \end{macrocode}
+% Subtract this length from the previous level's paragraph indent
+% and set to \cs{glstreeindent}.
+% \begin{macrocode}
+ \addtolength\parindent{-\glstreeindent}%
+ \setlength\glstreeindent\parindent
+ \fi
+ \fi
+% \end{macrocode}
+% Set the hanging indentation.
+% \begin{macrocode}
+ \hangindent\glstreeindent
+% \end{macrocode}
+% Put the name to the left of the paragraph block
+% \begin{macrocode}
+ \makebox[0pt][r]{\glstreenamebox{\gls@tmplen}{%
+ \glstreenamefmt{\glstarget{##2}{\glossentryname{##2}}}}}%
+% \end{macrocode}
+% If the symbol is missing, ignore it, otherwise put it in
+% brackets.
+%\changes{4.10}{2014-08-27}{moved space after symbol}
+% \begin{macrocode}
+ \ifglshassymbol{##2}{(\glossentrysymbol{##2})\space}{}%
+% \end{macrocode}
+% Do the description followed by the description terminator and
+% location list.
+% \begin{macrocode}
+ \glossentrydesc{##2}\glspostdescription\space ##3\par
+% \end{macrocode}
+% Set the previous level macro to the current level.
+% \begin{macrocode}
+ \def\@gls@prevlevel{##1}%
+ }%
+% \end{macrocode}
+% Vertical gap between groups is the same as that used by indices:
+%\changes{3.03}{2012/09/21}{added check for glsnogroupskip}
+% \begin{macrocode}
+ \renewcommand*{\glsgroupskip}{\ifglsnogroupskip\else\indexspace\fi}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{alttreegroup}
+% Like the \glostyle{alttree} style but the glossary groups have
+% headings.
+% \begin{macrocode}
+\newglossarystyle{alttreegroup}{%
+% \end{macrocode}
+% Base it on the glostyle{alttree} style:
+% \begin{macrocode}
+ \setglossarystyle{alttree}%
+% \end{macrocode}
+% Give each group a heading.
+% \begin{macrocode}
+ \renewcommand{\glsgroupheading}[1]{\par
+ \def\@gls@prevlevel{-1}%
+ \hangindent0pt\relax
+ \parindent0pt\relax
+ \glstreegroupheaderfmt{\glsgetgrouptitle{##1}}%
+ \par\indexspace}%
+}
+% \end{macrocode}
+%\end{style}
+%
+%\begin{style}{alttreehypergroup}
+% The \glostyle{alttreehypergroup} style is like the
+% \glostyle{alttreegroup} style, but has a set of links to the
+% groups at the start of the glossary.
+% \begin{macrocode}
+\newglossarystyle{alttreehypergroup}{%
+% \end{macrocode}
+% Base it on the glostyle{alttree} style:
+% \begin{macrocode}
+ \setglossarystyle{alttree}%
+% \end{macrocode}
+% Put the navigation links in the header
+% \begin{macrocode}
+ \renewcommand*{\glossaryheader}{%
+ \par
+ \def\@gls@prevlevel{-1}%
+ \hangindent0pt\relax
+ \parindent0pt\relax
+ \glstreenavigationfmt{\glsnavigation}\par\indexspace}%
+% \end{macrocode}
+% Put a hypertarget at the start of each group
+% \begin{macrocode}
+ \renewcommand*{\glsgroupheading}[1]{%
+ \par
+ \def\@gls@prevlevel{-1}%
+ \hangindent0pt\relax
+ \parindent0pt\relax
+ \glstreegroupheaderfmt
+ {\glsnavhypertarget{##1}{\glsgetgrouptitle{##1}}}\par
+ \indexspace}}
+% \end{macrocode}
+%\end{style}
+%
+%\iffalse
+% \begin{macrocode}
+%</glossary-tree.sty>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*glossaries-compatible-207.sty>
+% \end{macrocode}
+%\fi
+%\chapter{Backwards Compatibility}
+%\section{glossaries-compatible-207}
+% Provides compatibility with version 2.07 and below. This uses
+% original \sty{glossaries} xindy and makeindex formatting, so can
+% be used with old documents that had customized style files, but
+% hyperlinks may not work properly.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{glossaries-compatible-207}[2019/01/06 v4.42 (NLCT)]
+% \end{macrocode}
+%\begin{macro}{\GlsAddXdyAttribute}
+% Adds an attribute in old format.
+% \begin{macrocode}
+\ifglsxindy
+ \renewcommand*\GlsAddXdyAttribute[1]{%
+ \edef\@xdyattributes{\@xdyattributes ^^J \string"#1\string"}%
+ \expandafter\toks@\expandafter{\@xdylocref}%
+ \edef\@xdylocref{\the\toks@ ^^J%
+ (markup-locref
+ :open \string"\string~n\string\setentrycounter
+ {\noexpand\glscounter}%
+ \expandafter\string\csname#1\endcsname
+ \expandafter\@gobble\string\{\string" ^^J
+ :close \string"\expandafter\@gobble\string\}\string" ^^J
+ :attr \string"#1\string")}}
+% \end{macrocode}
+% Only has an effect before \ics{writeist}:
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\GlsAddXdyCounters}
+% \begin{macrocode}
+\renewcommand*\GlsAddXdyCounters[1]{%
+ \GlossariesWarning{\string\GlsAddXdyCounters\space not available
+ in compatibility mode.}%
+}
+% \end{macrocode}
+%\end{macro}
+% Add predefined attributes
+% \begin{macrocode}
+ \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}
+% \end{macrocode}
+%
+%\begin{macro}{\GlsAddXdyLocation}
+% Restore v2.07 definition:
+% \begin{macrocode}
+\ifglsxindy
+ \renewcommand*{\GlsAddXdyLocation}[2]{%
+ \edef\@xdyuserlocationdefs{%
+ \@xdyuserlocationdefs ^^J%
+ (define-location-class \string"#1\string"^^J\space\space
+ \space(#2))
+ }%
+ \edef\@xdyuserlocationnames{%
+ \@xdyuserlocationnames^^J\space\space\space
+ \string"#1\string"}%
+ }
+\fi
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@do@wrglossary}
+% \begin{macrocode}
+\renewcommand{\@do@wrglossary}[1]{%
+% \end{macrocode}
+% Determine whether to use \app{xindy} or \app{makeindex}
+% syntax
+% \begin{macrocode}
+\ifglsxindy
+% \end{macrocode}
+% Need to determine if the formatting information starts with
+% a ( or ) indicating a range.
+% \begin{macrocode}
+ \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
+% \end{macrocode}
+% Get the location and escape any special characters
+% \begin{macrocode}
+ \protected@edef\@glslocref{\theglsentrycounter}%
+ \@gls@checkmkidxchars\@glslocref
+% \end{macrocode}
+% Write to the glossary file using \app{xindy} syntax.
+% \begin{macrocode}
+ \glossary[\csname glo@#1@type\endcsname]{%
+ (indexentry :tkey (\csname glo@#1@index\endcsname)
+ :locref \string"\@glslocref\string" %
+ :attr \string"\@glo@suffix\string" \@glo@range
+ )
+ }%
+\else
+% \end{macrocode}
+% Convert the format information into the format required for
+% \app{makeindex}
+% \begin{macrocode}
+ \@set@glo@numformat\@glo@numfmt\@gls@counter\@glsnumberformat
+% \end{macrocode}
+% Write to the glossary file using \app{makeindex} syntax.
+% \begin{macrocode}
+ \glossary[\csname glo@#1@type\endcsname]{%
+ \string\glossaryentry{\csname glo@#1@index\endcsname
+ \@gls@encapchar\@glo@numfmt}{\theglsentrycounter}}%
+\fi
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@set@glo@numformat}
+% Only had 3 arguments in v2.07
+% \begin{macrocode}
+\def\@set@glo@numformat#1#2#3{%
+ \expandafter\@glo@check@mkidxrangechar#3\@nil
+ \protected@edef#1{%
+ \@glo@prefix setentrycounter[]{#2}%
+ \expandafter\string\csname\@glo@suffix\endcsname
+ }%
+ \@gls@checkmkidxchars#1%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\writeist}
+% Redefine \cs{writeist} back to the way it was in v2.07, but change
+% \cs{istfile} to \cs{glswrite}.
+% \begin{macrocode}
+\ifglsxindy
+ \def\writeist{%
+ \openout\glswrite=\istfilename
+ \write\glswrite{;; xindy style file created by the glossaries
+ package in compatible-2.07 mode}%
+ \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}%
+ \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
+ \write\glswrite{(define-location-class
+ \string"roman-page-numbers\string"^^J\space\space\space
+ (\string"roman-numbers-lowercase\string")
+ :min-range-length \@glsminrange)}%
+ \else
+ \write\glswrite{(define-location-class
+ \string"roman-page-numbers\string"^^J\space\space\space
+ (:sep "\@gls@roman")
+ :min-range-length \@glsminrange)}%
+ \fi
+ \write\glswrite{(define-location-class
+ \string"Roman-page-numbers\string"^^J\space\space\space
+ (\string"roman-numbers-uppercase\string")
+ :min-range-length \@glsminrange)}%
+ \write\glswrite{(define-location-class
+ \string"arabic-page-numbers\string"^^J\space\space\space
+ (\string"arabic-numbers\string")
+ :min-range-length \@glsminrange)}%
+ \write\glswrite{(define-location-class
+ \string"alpha-page-numbers\string"^^J\space\space\space
+ (\string"alpha\string")
+ :min-range-length \@glsminrange)}%
+ \write\glswrite{(define-location-class
+ \string"Alpha-page-numbers\string"^^J\space\space\space
+ (\string"ALPHA\string")
+ :min-range-length \@glsminrange)}%
+ \write\glswrite{(define-location-class
+ \string"Appendix-page-numbers\string"^^J\space\space\space
+ (\string"ALPHA\string"
+ :sep \string"\@glsAlphacompositor\string"
+ \string"arabic-numbers\string")
+ :min-range-length \@glsminrange)}%
+ \write\glswrite{(define-location-class
+ \string"arabic-section-numbers\string"^^J\space\space\space
+ (\string"arabic-numbers\string"
+ :sep \string"\glscompositor\string"
+ \string"arabic-numbers\string")
+ :min-range-length \@glsminrange)}%
+ \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")}%
+ \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\string~n\string\begin
+ {theglossary}\string\glossaryheader\string~n\string" ^^J\space
+ \space\space:close \string"\expandafter\@gobble
+ \string\%\string~n\string
+ \end{theglossary}\string\glossarypostamble
+ \string~n\string" ^^J\space\space\space
+ :tree)}%
+ \write\glswrite{(markup-letter-group-list
+ :sep \string"\string\glsgroupskip\string~n\string")}%
+ \write\glswrite{(markup-indexentry
+ :open \string"\string\relax \string\glsresetentrylist
+ \string~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\string~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}%
+ \noist}
+\else
+ \edef\@gls@actualchar{\string?}
+ \edef\@gls@encapchar{\string|}
+ \edef\@gls@levelchar{\string!}
+ \edef\@gls@quotechar{\string"}
+ \def\writeist{\relax
+ \openout\glswrite=\istfilename
+ \write\glswrite{\expandafter\@gobble\string\% makeindex style file
+ created by the glossaries package}
+ \write\glswrite{\expandafter\@gobble\string\% 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
+ \noist
+ }
+\fi
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\noist}
+% \begin{macrocode}
+\renewcommand*{\noist}{\let\writeist\relax}
+% \end{macrocode}
+%\end{macro}
+%\iffalse
+% \begin{macrocode}
+%</glossaries-compatible-207.sty>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*glossaries-compatible-307.sty>
+% \end{macrocode}
+%\fi
+%\section{glossaries-compatible-307}
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{glossaries-compatible-307}[2019/01/06 v4.42 (NLCT)]
+% \end{macrocode}
+%
+% Compatibility macros for predefined glossary styles:
+%\begin{macro}{\compatglossarystyle}
+% Defines a compatibility glossary style.
+% \begin{macrocode}
+\newcommand{\compatglossarystyle}[2]{%
+ \ifcsundef{@glscompstyle@#1}%
+ {%
+ \csdef{@glscompstyle@#1}{#2}%
+ }%
+ {%
+ \PackageError{glossaries}{Glossary compatibility style `#1' is already defined}{}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+% Backward compatible \glostyle{inline} style.
+% \begin{macrocode}
+\compatglossarystyle{inline}{%
+ \renewcommand{\glossaryentryfield}[5]{%
+ \glsinlinedopostchild
+ \gls@inlinesep
+ \def\glo@desc{##3}%
+ \def\@no@post@desc{\nopostdesc}%
+ \glsentryitem{##1}\glsinlinenameformat{##1}{##2}%
+ \ifx\glo@desc\@no@post@desc
+ \glsinlineemptydescformat{##4}{##5}%
+ \else
+ \ifstrempty{##3}%
+ {\glsinlineemptydescformat{##4}{##5}}%
+ {\glsinlinedescformat{##3}{##4}{##5}}%
+ \fi
+ \ifglshaschildren{##1}%
+ {%
+ \glsresetsubentrycounter
+ \glsinlineparentchildseparator
+ \def\gls@inlinesubsep{}%
+ \def\gls@inlinepostchild{\glsinlinepostchild}%
+ }%
+ {}%
+ \def\gls@inlinesep{\glsinlineseparator}%
+ }%
+% \end{macrocode}
+% Sub-entries display description:
+% \begin{macrocode}
+ \renewcommand{\glossarysubentryfield}[6]{%
+ \gls@inlinesubsep%
+ \glsinlinesubnameformat{##2}{##3}%
+ \glssubentryitem{##2}\glsinlinesubdescformat{##4}{##5}{##6}%
+ \def\gls@inlinesubsep{\glsinlinesubseparator}%
+ }%
+}
+% \end{macrocode}
+% Backward compatible \glostyle{list} style.
+% \begin{macrocode}
+\compatglossarystyle{list}{%
+ \renewcommand*{\glossaryentryfield}[5]{%
+ \item[\glsentryitem{##1}\glstarget{##1}{##2}]
+ ##3\glspostdescription\space ##5}%
+% \end{macrocode}
+% Sub-entries continue on the same line:
+% \begin{macrocode}
+ \renewcommand*{\glossarysubentryfield}[6]{%
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}##4\glspostdescription\space ##6.}%
+}
+% \end{macrocode}
+% Backward compatible \glostyle{listgroup} style.
+% \begin{macrocode}
+\compatglossarystyle{listgroup}{%
+ \csuse{@glscompstyle@list}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{listhypergroup} style.
+% \begin{macrocode}
+\compatglossarystyle{listhypergroup}{%
+ \csuse{@glscompstyle@list}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{altlist} style.
+% \begin{macrocode}
+\compatglossarystyle{altlist}{%
+ \renewcommand*{\glossaryentryfield}[5]{%
+ \item[\glsentryitem{##1}\glstarget{##1}{##2}]%
+ \mbox{}\par\nobreak\@afterheading
+ ##3\glspostdescription\space ##5}%
+ \renewcommand{\glossarysubentryfield}[6]{%
+ \par
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}##4\glspostdescription\space ##6}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{altlistgroup} style.
+% \begin{macrocode}
+\compatglossarystyle{altlistgroup}{%
+ \csuse{@glscompstyle@altlist}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{altlisthypergroup} style.
+% \begin{macrocode}
+\compatglossarystyle{altlisthypergroup}{%
+ \csuse{@glscompstyle@altlist}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{listdotted} style.
+% \begin{macrocode}
+\compatglossarystyle{listdotted}{%
+ \renewcommand*{\glossaryentryfield}[5]{%
+ \item[]\makebox[\glslistdottedwidth][l]{%
+ \glsentryitem{##1}\glstarget{##1}{##2}%
+ \unskip\leaders\hbox to 2.9mm{\hss.}\hfill\strut}##3}%
+ \renewcommand*{\glossarysubentryfield}[6]{%
+ \item[]\makebox[\glslistdottedwidth][l]{%
+ \glssubentryitem{##2}%
+ \glstarget{##2}{##3}%
+ \unskip\leaders\hbox to 2.9mm{\hss.}\hfill\strut}##4}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{sublistdotted} style.
+% \begin{macrocode}
+\compatglossarystyle{sublistdotted}{%
+ \csuse{@glscompstyle@listdotted}%
+ \renewcommand*{\glossaryentryfield}[5]{%
+ \item[\glsentryitem{##1}\glstarget{##1}{##2}]}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{long} style.
+% \begin{macrocode}
+\compatglossarystyle{long}{%
+ \renewcommand*{\glossaryentryfield}[5]{%
+ \glsentryitem{##1}\glstarget{##1}{##2} & ##3\glspostdescription\space ##5\\}%
+ \renewcommand*{\glossarysubentryfield}[6]{%
+ &
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}##4\glspostdescription\space ##6\\}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{longborder} style.
+% \begin{macrocode}
+\compatglossarystyle{longborder}{%
+ \csuse{@glscompstyle@long}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{longheader} style.
+% \begin{macrocode}
+\compatglossarystyle{longheader}{%
+ \csuse{@glscompstyle@long}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{longheaderborder} style.
+% \begin{macrocode}
+\compatglossarystyle{longheaderborder}{%
+ \csuse{@glscompstyle@long}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{long3col} style.
+% \begin{macrocode}
+\compatglossarystyle{long3col}{%
+ \renewcommand*{\glossaryentryfield}[5]{%
+ \glsentryitem{##1}\glstarget{##1}{##2} & ##3 & ##5\\}%
+ \renewcommand*{\glossarysubentryfield}[6]{%
+ &
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}##4 & ##6\\}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{long3colborder} style.
+% \begin{macrocode}
+\compatglossarystyle{long3colborder}{%
+ \csuse{@glscompstyle@long3col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{long3colheader} style.
+% \begin{macrocode}
+\compatglossarystyle{long3colheader}{%
+ \csuse{@glscompstyle@long3col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{long3colheaderborder} style.
+% \begin{macrocode}
+\compatglossarystyle{long3colheaderborder}{%
+ \csuse{@glscompstyle@long3col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{long4col} style.
+% \begin{macrocode}
+\compatglossarystyle{long4col}{%
+ \renewcommand*{\glossaryentryfield}[5]{%
+ \glsentryitem{##1}\glstarget{##1}{##2} & ##3 & ##4 & ##5\\}%
+ \renewcommand*{\glossarysubentryfield}[6]{%
+ &
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}##4 & ##5 & ##6\\}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{long4colheader} style.
+% \begin{macrocode}
+\compatglossarystyle{long4colheader}{%
+ \csuse{@glscompstyle@long4col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{long4colborder} style.
+% \begin{macrocode}
+\compatglossarystyle{long4colborder}{%
+ \csuse{@glscompstyle@long4col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{long4colheaderborder} style.
+% \begin{macrocode}
+\compatglossarystyle{long4colheaderborder}{%
+ \csuse{@glscompstyle@long4col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{altlong4col} style.
+% \begin{macrocode}
+\compatglossarystyle{altlong4col}{%
+ \csuse{@glscompstyle@long4col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{altlong4colheader} style.
+% \begin{macrocode}
+\compatglossarystyle{altlong4colheader}{%
+ \csuse{@glscompstyle@long4col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{altlong4colborder} style.
+% \begin{macrocode}
+\compatglossarystyle{altlong4colborder}{%
+ \csuse{@glscompstyle@long4col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{altlong4colheaderborder} style.
+% \begin{macrocode}
+\compatglossarystyle{altlong4colheaderborder}{%
+ \csuse{@glscompstyle@long4col}%
+}%
+% \end{macrocode}
+%
+% Backward compatible \glostyle{long} style.
+% \begin{macrocode}
+\compatglossarystyle{longragged}{%
+ \renewcommand*{\glossaryentryfield}[5]{%
+ \glsentryitem{##1}\glstarget{##1}{##2} & ##3\glspostdescription\space ##5%
+ \tabularnewline}%
+ \renewcommand*{\glossarysubentryfield}[6]{%
+ &
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}##4\glspostdescription\space ##6%
+ \tabularnewline}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{longraggedborder} style.
+% \begin{macrocode}
+\compatglossarystyle{longraggedborder}{%
+ \csuse{@glscompstyle@longragged}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{longraggedheader} style.
+% \begin{macrocode}
+\compatglossarystyle{longraggedheader}{%
+ \csuse{@glscompstyle@longragged}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{longraggedheaderborder} style.
+% \begin{macrocode}
+\compatglossarystyle{longraggedheaderborder}{%
+ \csuse{@glscompstyle@longragged}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{longragged3col} style.
+% \begin{macrocode}
+\compatglossarystyle{longragged3col}{%
+ \renewcommand*{\glossaryentryfield}[5]{%
+ \glsentryitem{##1}\glstarget{##1}{##2} & ##3 & ##5\tabularnewline}%
+ \renewcommand*{\glossarysubentryfield}[6]{%
+ &
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}##4 & ##6\tabularnewline}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{longragged3colborder} style.
+% \begin{macrocode}
+\compatglossarystyle{longragged3colborder}{%
+ \csuse{@glscompstyle@longragged3col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{longragged3colheader} style.
+% \begin{macrocode}
+\compatglossarystyle{longragged3colheader}{%
+ \csuse{@glscompstyle@longragged3col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{longragged3colheaderborder} style.
+% \begin{macrocode}
+\compatglossarystyle{longragged3colheaderborder}{%
+ \csuse{@glscompstyle@longragged3col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{altlongragged4col} style.
+% \begin{macrocode}
+\compatglossarystyle{altlongragged4col}{%
+ \renewcommand*{\glossaryentryfield}[5]{%
+ \glsentryitem{##1}\glstarget{##1}{##2} & ##3 & ##4 & ##5\tabularnewline}%
+ \renewcommand*{\glossarysubentryfield}[6]{%
+ &
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}##4 & ##5 & ##6\tabularnewline}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{altlongragged4colheader} style.
+% \begin{macrocode}
+\compatglossarystyle{altlongragged4colheader}{%
+ \csuse{@glscompstyle@altlong4col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{altlongragged4colborder} style.
+% \begin{macrocode}
+\compatglossarystyle{altlongragged4colborder}{%
+ \csuse{@glscompstyle@altlong4col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{altlongragged4colheaderborder} style.
+% \begin{macrocode}
+\compatglossarystyle{altlongragged4colheaderborder}{%
+ \csuse{@glscompstyle@altlong4col}%
+}%
+% \end{macrocode}
+%
+% Backward compatible \glostyle{index} style.
+% \begin{macrocode}
+\compatglossarystyle{index}{%
+ \renewcommand*{\glossaryentryfield}[5]{%
+ \item\glsentryitem{##1}\textbf{\glstarget{##1}{##2}}%
+ \ifx\relax##4\relax
+ \else
+ \space(##4)%
+ \fi
+ \space ##3\glspostdescription \space ##5}%
+ \renewcommand*{\glossarysubentryfield}[6]{%
+ \ifcase##1\relax
+ % level 0
+ \item
+ \or
+ % level 1
+ \subitem
+ \glssubentryitem{##2}%
+ \else
+ % all other levels
+ \subsubitem
+ \fi
+ \textbf{\glstarget{##2}{##3}}%
+ \ifx\relax##5\relax
+ \else
+ \space(##5)%
+ \fi
+ \space##4\glspostdescription\space ##6}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{indexgroup} style.
+% \begin{macrocode}
+\compatglossarystyle{indexgroup}{%
+ \csuse{@glscompstyle@index}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{indexhypergroup} style.
+% \begin{macrocode}
+\compatglossarystyle{indexhypergroup}{%
+ \csuse{@glscompstyle@index}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{tree} style.
+% \begin{macrocode}
+\compatglossarystyle{tree}{%
+ \renewcommand{\glossaryentryfield}[5]{%
+ \hangindent0pt\relax
+ \parindent0pt\relax
+ \glsentryitem{##1}\textbf{\glstarget{##1}{##2}}%
+ \ifx\relax##4\relax
+ \else
+ \space(##4)%
+ \fi
+ \space ##3\glspostdescription \space ##5\par}%
+ \renewcommand{\glossarysubentryfield}[6]{%
+ \hangindent##1\glstreeindent\relax
+ \parindent##1\glstreeindent\relax
+ \ifnum##1=1\relax
+ \glssubentryitem{##2}%
+ \fi
+ \textbf{\glstarget{##2}{##3}}%
+ \ifx\relax##5\relax
+ \else
+ \space(##5)%
+ \fi
+ \space##4\glspostdescription\space ##6\par}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{treegroup} style.
+% \begin{macrocode}
+\compatglossarystyle{treegroup}{%
+ \csuse{@glscompstyle@tree}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{treehypergroup} style.
+% \begin{macrocode}
+\compatglossarystyle{treehypergroup}{%
+ \csuse{@glscompstyle@tree}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{treenoname} style.
+% \begin{macrocode}
+\compatglossarystyle{treenoname}{%
+ \renewcommand{\glossaryentryfield}[5]{%
+ \hangindent0pt\relax
+ \parindent0pt\relax
+ \glsentryitem{##1}\textbf{\glstarget{##1}{##2}}%
+ \ifx\relax##4\relax
+ \else
+ \space(##4)%
+ \fi
+ \space ##3\glspostdescription \space ##5\par}%
+ \renewcommand{\glossarysubentryfield}[6]{%
+ \hangindent##1\glstreeindent\relax
+ \parindent##1\glstreeindent\relax
+ \ifnum##1=1\relax
+ \glssubentryitem{##2}%
+ \fi
+ \glstarget{##2}{\strut}%
+ ##4\glspostdescription\space ##6\par}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{treenonamegroup} style.
+% \begin{macrocode}
+\compatglossarystyle{treenonamegroup}{%
+ \csuse{@glscompstyle@treenoname}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{treenonamehypergroup} style.
+% \begin{macrocode}
+\compatglossarystyle{treenonamehypergroup}{%
+ \csuse{@glscompstyle@treenoname}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{alttree} style.
+% \begin{macrocode}
+\compatglossarystyle{alttree}{%
+ \renewcommand{\glossaryentryfield}[5]{%
+ \ifnum\@gls@prevlevel=0\relax
+ \else
+ \settowidth{\glstreeindent}{\textbf{\@glswidestname\space}}%
+ \hangindent\glstreeindent
+ \parindent\glstreeindent
+ \fi
+ \makebox[0pt][r]{\makebox[\glstreeindent][l]{%
+ \glsentryitem{##1}\textbf{\glstarget{##1}{##2}}}}%
+ \ifx\relax##4\relax
+ \else
+ (##4)\space
+ \fi
+ ##3\glspostdescription \space ##5\par
+ \def\@gls@prevlevel{0}%
+ }%
+ \renewcommand{\glossarysubentryfield}[6]{%
+ \ifnum##1=1\relax
+ \glssubentryitem{##2}%
+ \fi
+ \ifnum\@gls@prevlevel=##1\relax
+ \else
+ \@ifundefined{@glswidestname\romannumeral##1}{%
+ \settowidth{\gls@tmplen}{\textbf{\@glswidestname\space}}}{%
+ \settowidth{\gls@tmplen}{\textbf{%
+ \csname @glswidestname\romannumeral##1\endcsname\space}}}%
+ \ifnum\@gls@prevlevel<##1\relax
+ \setlength\glstreeindent\gls@tmplen
+ \addtolength\glstreeindent\parindent
+ \parindent\glstreeindent
+ \else
+ \@ifundefined{@glswidestname\romannumeral\@gls@prevlevel}{%
+ \settowidth{\glstreeindent}{\textbf{%
+ \@glswidestname\space}}}{%
+ \settowidth{\glstreeindent}{\textbf{%
+ \csname @glswidestname\romannumeral\@gls@prevlevel
+ \endcsname\space}}}%
+ \addtolength\parindent{-\glstreeindent}%
+ \setlength\glstreeindent\parindent
+ \fi
+ \fi
+ \hangindent\glstreeindent
+ \makebox[0pt][r]{\makebox[\gls@tmplen][l]{%
+ \textbf{\glstarget{##2}{##3}}}}%
+ \ifx##5\relax\relax
+ \else
+ (##5)\space
+ \fi
+ ##4\glspostdescription\space ##6\par
+ \def\@gls@prevlevel{##1}%
+ }%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{alttreegroup} style.
+% \begin{macrocode}
+\compatglossarystyle{alttreegroup}{%
+ \csuse{@glscompstyle@alttree}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{alttreehypergroup} style.
+% \begin{macrocode}
+\compatglossarystyle{alttreehypergroup}{%
+ \csuse{@glscompstyle@alttree}%
+}%
+% \end{macrocode}
+%
+% Backward compatible \glostyle{mcolindex} style.
+% \begin{macrocode}
+\compatglossarystyle{mcolindex}{%
+ \csuse{@glscompstyle@index}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{mcolindexgroup} style.
+% \begin{macrocode}
+\compatglossarystyle{mcolindexgroup}{%
+ \csuse{@glscompstyle@index}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{mcolindexhypergroup} style.
+% \begin{macrocode}
+\compatglossarystyle{mcolindexhypergroup}{%
+ \csuse{@glscompstyle@index}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{mcoltree} style.
+% \begin{macrocode}
+\compatglossarystyle{mcoltree}{%
+ \csuse{@glscompstyle@tree}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{mcoltreegroup} style.
+% \begin{macrocode}
+\compatglossarystyle{mcolindextreegroup}{%
+ \csuse{@glscompstyle@tree}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{mcoltreehypergroup} style.
+% \begin{macrocode}
+\compatglossarystyle{mcolindextreehypergroup}{%
+ \csuse{@glscompstyle@tree}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{mcoltreenoname} style.
+% \begin{macrocode}
+\compatglossarystyle{mcoltreenoname}{%
+ \csuse{@glscompstyle@tree}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{mcoltreenonamegroup} style.
+% \begin{macrocode}
+\compatglossarystyle{mcoltreenonamegroup}{%
+ \csuse{@glscompstyle@tree}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{mcoltreenonamehypergroup} style.
+% \begin{macrocode}
+\compatglossarystyle{mcoltreenonamehypergroup}{%
+ \csuse{@glscompstyle@tree}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{mcolalttree} style.
+% \begin{macrocode}
+\compatglossarystyle{mcolalttree}{%
+ \csuse{@glscompstyle@alttree}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{mcolalttreegroup} style.
+% \begin{macrocode}
+\compatglossarystyle{mcolalttreegroup}{%
+ \csuse{@glscompstyle@alttree}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{mcolalttreehypergroup} style.
+% \begin{macrocode}
+\compatglossarystyle{mcolalttreehypergroup}{%
+ \csuse{@glscompstyle@alttree}%
+}%
+% \end{macrocode}
+
+% Backward compatible \glostyle{superragged} style.
+% \begin{macrocode}
+\compatglossarystyle{superragged}{%
+ \renewcommand*{\glossaryentryfield}[5]{%
+ \glsentryitem{##1}\glstarget{##1}{##2} & ##3\glspostdescription\space ##5%
+ \tabularnewline}%
+ \renewcommand*{\glossarysubentryfield}[6]{%
+ &
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}##4\glspostdescription\space ##6%
+ \tabularnewline}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{superraggedborder} style.
+% \begin{macrocode}
+\compatglossarystyle{superraggedborder}{%
+ \csuse{@glscompstyle@superragged}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{superraggedheader} style.
+% \begin{macrocode}
+\compatglossarystyle{superraggedheader}{%
+ \csuse{@glscompstyle@superragged}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{superraggedheaderborder} style.
+% \begin{macrocode}
+\compatglossarystyle{superraggedheaderborder}{%
+ \csuse{@glscompstyle@superragged}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{superragged3col} style.
+% \begin{macrocode}
+\compatglossarystyle{superragged3col}{%
+ \renewcommand*{\glossaryentryfield}[5]{%
+ \glsentryitem{##1}\glstarget{##1}{##2} & ##3 & ##5\tabularnewline}%
+ \renewcommand*{\glossarysubentryfield}[6]{%
+ &
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}##4 & ##6\tabularnewline}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{superragged3colborder} style.
+% \begin{macrocode}
+\compatglossarystyle{superragged3colborder}{%
+ \csuse{@glscompstyle@superragged3col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{superragged3colheader} style.
+% \begin{macrocode}
+\compatglossarystyle{superragged3colheader}{%
+ \csuse{@glscompstyle@superragged3col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{superragged3colheaderborder} style.
+% \begin{macrocode}
+\compatglossarystyle{superragged3colheaderborder}{%
+ \csuse{@glscompstyle@superragged3col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{altsuperragged4col} style.
+% \begin{macrocode}
+\compatglossarystyle{altsuperragged4col}{%
+ \renewcommand*{\glossaryentryfield}[5]{%
+ \glsentryitem{##1}\glstarget{##1}{##2} & ##3 & ##4 & ##5\tabularnewline}%
+ \renewcommand*{\glossarysubentryfield}[6]{%
+ &
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}##4 & ##5 & ##6\tabularnewline}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{altsuperragged4colheader} style.
+% \begin{macrocode}
+\compatglossarystyle{altsuperragged4colheader}{%
+ \csuse{@glscompstyle@altsuperragged4col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{altsuperragged4colborder} style.
+% \begin{macrocode}
+\compatglossarystyle{altsuperragged4colborder}{%
+ \csuse{@glscompstyle@altsuperragged4col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{altsuperragged4colheaderborder} style.
+% \begin{macrocode}
+\compatglossarystyle{altsuperragged4colheaderborder}{%
+ \csuse{@glscompstyle@altsuperragged4col}%
+}%
+% \end{macrocode}
+%
+% Backward compatible \glostyle{super} style.
+% \begin{macrocode}
+\compatglossarystyle{super}{%
+ \renewcommand*{\glossaryentryfield}[5]{%
+ \glsentryitem{##1}\glstarget{##1}{##2} & ##3\glspostdescription\space ##5\\}%
+ \renewcommand*{\glossarysubentryfield}[6]{%
+ &
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}##4\glspostdescription\space ##6\\}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{superborder} style.
+% \begin{macrocode}
+\compatglossarystyle{superborder}{%
+ \csuse{@glscompstyle@super}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{superheader} style.
+% \begin{macrocode}
+\compatglossarystyle{superheader}{%
+ \csuse{@glscompstyle@super}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{superheaderborder} style.
+% \begin{macrocode}
+\compatglossarystyle{superheaderborder}{%
+ \csuse{@glscompstyle@super}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{super3col} style.
+% \begin{macrocode}
+\compatglossarystyle{super3col}{%
+ \renewcommand*{\glossaryentryfield}[5]{%
+ \glsentryitem{##1}\glstarget{##1}{##2} & ##3 & ##5\\}%
+ \renewcommand*{\glossarysubentryfield}[6]{%
+ &
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}##4 & ##6\\}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{super3colborder} style.
+% \begin{macrocode}
+\compatglossarystyle{super3colborder}{%
+ \csuse{@glscompstyle@super3col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{super3colheader} style.
+% \begin{macrocode}
+\compatglossarystyle{super3colheader}{%
+ \csuse{@glscompstyle@super3col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{super3colheaderborder} style.
+% \begin{macrocode}
+\compatglossarystyle{super3colheaderborder}{%
+ \csuse{@glscompstyle@super3col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{super4col} style.
+% \begin{macrocode}
+\compatglossarystyle{super4col}{%
+ \renewcommand*{\glossaryentryfield}[5]{%
+ \glsentryitem{##1}\glstarget{##1}{##2} & ##3 & ##4 & ##5\\}%
+ \renewcommand*{\glossarysubentryfield}[6]{%
+ &
+ \glssubentryitem{##2}%
+ \glstarget{##2}{\strut}##4 & ##5 & ##6\\}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{super4colheader} style.
+% \begin{macrocode}
+\compatglossarystyle{super4colheader}{%
+ \csuse{@glscompstyle@super4col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{super4colborder} style.
+% \begin{macrocode}
+\compatglossarystyle{super4colborder}{%
+ \csuse{@glscompstyle@super4col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{super4colheaderborder} style.
+% \begin{macrocode}
+\compatglossarystyle{super4colheaderborder}{%
+ \csuse{@glscompstyle@super4col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{altsuper4col} style.
+% \begin{macrocode}
+\compatglossarystyle{altsuper4col}{%
+ \csuse{@glscompstyle@super4col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{altsuper4colheader} style.
+% \begin{macrocode}
+\compatglossarystyle{altsuper4colheader}{%
+ \csuse{@glscompstyle@super4col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{altsuper4colborder} style.
+% \begin{macrocode}
+\compatglossarystyle{altsuper4colborder}{%
+ \csuse{@glscompstyle@super4col}%
+}%
+% \end{macrocode}
+% Backward compatible \glostyle{altsuper4colheaderborder} style.
+% \begin{macrocode}
+\compatglossarystyle{altsuper4colheaderborder}{%
+ \csuse{@glscompstyle@super4col}%
+}%
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</glossaries-compatible-307.sty>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*glossaries-accsupp.sty>
+% \end{macrocode}
+%\fi
+%\chapter{Accessibility Support (glossaries-accsupp Code)}
+%\label{sec:code:accsupp}
+% The \isty{glossaries-accsupp} package is experimental. It is
+% intended to provide a means of using the PDF accessibilty support
+% in glossary entries. See the \isty{accsupp} documentation for
+% further details about accessibility support.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+% \end{macrocode}
+% Package version number now in line with main glossaries package number.
+% \begin{macrocode}
+\ProvidesPackage{glossaries-accsupp}[2019/01/06 v4.42 (NLCT)
+ Experimental glossaries accessibility]
+% \end{macrocode}
+% Pass all options to \sty{glossaries}:
+% \begin{macrocode}
+\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{glossaries}}
+% \end{macrocode}
+% Process options:
+% \begin{macrocode}
+\ProcessOptions
+% \end{macrocode}
+% This package should be loaded before \sty{glossaries-extra}, so
+% complain if that has already been loaded.
+% \begin{macrocode}
+\@ifpackageloaded{glossaries-extra}
+{%
+% \end{macrocode}
+%If the \pkgoptfmt{accsupp} option was used, \cs{@glsxtr@doaccsupp}
+%will have been set, otherwise it will be empty.
+%\changes{4.29}{2017-01-19}{added check for \cs{@glsxtr@doaccsupp}}
+% \begin{macrocode}
+ \ifx\@glsxtr@doaccsupp\empty
+ \GlossariesWarning{The `glossaries-accsupp'
+ package has been loaded\MessageBreak
+ after the `glossaries-extra' package. This\MessageBreak
+ can cause a failure to integrate both packages. \MessageBreak
+ Either use the `accsupp' option when you load\MessageBreak
+ `glossaries-extra' or load `glossaries-accsupp'\MessageBreak
+ before loading `glossaries-extra'}%
+ \fi
+}
+{}
+% \end{macrocode}
+%
+%\begin{macro}{\compatibleglossentry}
+% Override style compatibility macros:
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+%\changes{4.04}{2014-03-06}{changed \cs{newcommand} to \cs{def} as is may or
+%may not be defined}
+% \begin{macrocode}
+\def\compatibleglossentry#1#2{%
+ \toks@{#2}%
+ \protected@edef\@do@glossentry{%
+ \noexpand\accsuppglossaryentryfield{#1}%
+ {\noexpand\glsnamefont
+ {\expandafter\expandonce\csname glo@\glsdetoklabel{#1}@name\endcsname}}%
+ {\expandafter\expandonce\csname glo@\glsdetoklabel{#1}@desc\endcsname}%
+ {\expandafter\expandonce\csname glo@\glsdetoklabel{#1}@symbol\endcsname}%
+ {\the\toks@}%
+ }%
+ \@do@glossentry
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\compatiblesubglossentry}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+%\changes{4.04}{2014-03-06}{changed \cs{newcommand} to \cs{def} as is may or
+%may not be defined}
+% \begin{macrocode}
+\def\compatiblesubglossentry#1#2#3{%
+ \toks@{#3}%
+ \protected@edef\@do@subglossentry{%
+ \noexpand\accsuppglossarysubentryfield{\number#1}%
+ {#2}%
+ {\noexpand\glsnamefont
+ {\expandafter\expandonce\csname glo@\glsdetoklabel{#2}@name\endcsname}}%
+ {\expandafter\expandonce\csname glo@\glsdetoklabel{#2}@desc\endcsname}%
+ {\expandafter\expandonce\csname glo@\glsdetoklabel{#2}@symbol\endcsname}%
+ {\the\toks@}%
+ }%
+ \@do@subglossentry
+}
+% \end{macrocode}
+%\end{macro}
+% Required packages:
+% \begin{macrocode}
+\RequirePackage{glossaries}
+\RequirePackage{accsupp}
+% \end{macrocode}
+%
+%\section{Defining Replacement Text}
+% The version 0.1 stored the replacement text in the
+% \gloskey{symbol} key. This has been changed to use the
+% new keys defined here. Example of use:
+%\begin{verbatim}
+%\newglossaryentry{dr}{name=Dr,description={},access={Doctor}}
+%\end{verbatim}
+%\begin{key}{access}
+% The replacement text corresponding to the \gloskey{name} key:
+% \begin{macrocode}
+\define@key{glossentry}{access}{%
+ \def\@glo@access{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%\begin{key}{textaccess}
+% The replacement text corresponding to the \gloskey{text} key:
+% \begin{macrocode}
+\define@key{glossentry}{textaccess}{%
+ \def\@glo@textaccess{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%\begin{key}{firstaccess}
+% The replacement text corresponding to the \gloskey{first} key:
+% \begin{macrocode}
+\define@key{glossentry}{firstaccess}{%
+ \def\@glo@firstaccess{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%\begin{key}{pluralaccess}
+% The replacement text corresponding to the \gloskey{plural} key:
+% \begin{macrocode}
+\define@key{glossentry}{pluralaccess}{%
+ \def\@glo@pluralaccess{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%\begin{key}{firstpluralaccess}
+% The replacement text corresponding to the \gloskey{firstplural} key:
+% \begin{macrocode}
+\define@key{glossentry}{firstpluralaccess}{%
+ \def\@glo@firstpluralaccess{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%\begin{key}{symbolaccess}
+% The replacement text corresponding to the \gloskey{symbol} key:
+% \begin{macrocode}
+\define@key{glossentry}{symbolaccess}{%
+ \def\@glo@symbolaccess{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%\begin{key}{symbolpluralaccess}
+% The replacement text corresponding to the \gloskey{symbolplural} key:
+% \begin{macrocode}
+\define@key{glossentry}{symbolpluralaccess}{%
+ \def\@glo@symbolpluralaccess{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%\begin{key}{descriptionaccess}
+% The replacement text corresponding to the \gloskey{description} key:
+% \begin{macrocode}
+\define@key{glossentry}{descriptionaccess}{%
+ \def\@glo@descaccess{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%\begin{key}{descriptionpluralaccess}
+% The replacement text corresponding to the \gloskey{descriptionplural} key:
+% \begin{macrocode}
+\define@key{glossentry}{descriptionpluralaccess}{%
+ \def\@glo@descpluralaccess{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%\begin{key}{shortaccess}
+% The replacement text corresponding to the \gloskey{short} key:
+% \begin{macrocode}
+\define@key{glossentry}{shortaccess}{%
+ \def\@glo@shortaccess{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%\begin{key}{shortpluralaccess}
+% The replacement text corresponding to the \gloskey{shortplural} key:
+% \begin{macrocode}
+\define@key{glossentry}{shortpluralaccess}{%
+ \def\@glo@shortpluralaccess{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%\begin{key}{longaccess}
+% The replacement text corresponding to the \gloskey{long} key:
+% \begin{macrocode}
+\define@key{glossentry}{longaccess}{%
+ \def\@glo@longaccess{#1}%
+}
+% \end{macrocode}
+%\end{key}
+%\begin{key}{longpluralaccess}
+% The replacement text corresponding to the \gloskey{longplural} key:
+% \begin{macrocode}
+\define@key{glossentry}{longpluralaccess}{%
+ \def\@glo@longpluralaccess{#1}%
+}
+% \end{macrocode}
+%\end{key}
+% There are no equivalent keys for the \gloskey{user1}\ldots
+%\gloskey{user6} keys. The replacement text would have to be
+% explicitly put in the value, e.g.,
+% "user1={\glsaccsupp{inches}{in}}".
+%
+% Append these new keys to \cs{@gls@keymap}:
+% \begin{macrocode}
+\appto\@gls@keymap{,%
+ {access}{access},%
+ {textaccess}{textaccess},%
+ {firstaccess}{firstaccess},%
+ {pluralaccess}{pluralaccess},%
+ {firstpluralaccess}{firstpluralaccess},%
+ {symbolaccess}{symbolaccess},%
+ {symbolpluralaccess}{symbolpluralaccess},%
+ {descaccess}{descaccess},%
+ {descpluralaccess}{descpluralaccess},%
+ {shortaccess}{shortaccess},%
+ {shortpluralaccess}{shortpluralaccess},%
+ {longaccess}{longaccess},%
+ {longpluralaccess}{longpluralaccess}%
+}
+% \end{macrocode}
+%
+%\begin{macro}{\@gls@noaccess}
+% Indicates that no replacement text has been provided.
+% \begin{macrocode}
+\def\@gls@noaccess{\relax}
+% \end{macrocode}
+%\end{macro}
+%
+% Add to the start hook (the \gloskey{access} key is initialised to
+% the value of the \gloskey{symbol} key at the start for backwards
+% compatibility):
+% \begin{macrocode}
+\let\@gls@oldnewglossaryentryprehook\@newglossaryentryprehook
+\renewcommand*{\@newglossaryentryprehook}{%
+ \@gls@oldnewglossaryentryprehook
+ \def\@glo@access{\@glo@symbol}%
+% \end{macrocode}
+% Initialise the other keys:
+% \begin{macrocode}
+ \def\@glo@textaccess{\@glo@access}%
+ \def\@glo@firstaccess{\@glo@access}%
+ \def\@glo@pluralaccess{\@glo@textaccess}%
+ \def\@glo@firstpluralaccess{\@glo@pluralaccess}%
+ \def\@glo@symbolaccess{\relax}%
+ \def\@glo@symbolpluralaccess{\@glo@symbolaccess}%
+ \def\@glo@descaccess{\relax}%
+ \def\@glo@descpluralaccess{\@glo@descaccess}%
+ \def\@glo@shortaccess{\relax}%
+ \def\@glo@shortpluralaccess{\@glo@shortaccess}%
+ \def\@glo@longaccess{\relax}%
+ \def\@glo@longpluralaccess{\@glo@longaccess}%
+}
+% \end{macrocode}
+% Add to the end hook:
+% \begin{macrocode}
+\let\@gls@oldnewglossaryentryposthook\@newglossaryentryposthook
+\renewcommand*{\@newglossaryentryposthook}{%
+ \@gls@oldnewglossaryentryposthook
+% \end{macrocode}
+% Store the access information:
+% \begin{macrocode}
+ \expandafter
+ \protected@xdef\csname glo@\@glo@label @access\endcsname{%
+ \@glo@access}%
+ \expandafter
+ \protected@xdef\csname glo@\@glo@label @textaccess\endcsname{%
+ \@glo@textaccess}%
+ \expandafter
+ \protected@xdef\csname glo@\@glo@label @firstaccess\endcsname{%
+ \@glo@firstaccess}%
+ \expandafter
+ \protected@xdef\csname glo@\@glo@label @pluralaccess\endcsname{%
+ \@glo@pluralaccess}%
+ \expandafter
+ \protected@xdef\csname glo@\@glo@label @firstpluralaccess\endcsname{%
+ \@glo@firstpluralaccess}%
+ \expandafter
+ \protected@xdef\csname glo@\@glo@label @symbolaccess\endcsname{%
+ \@glo@symbolaccess}%
+ \expandafter
+ \protected@xdef\csname glo@\@glo@label @symbolpluralaccess\endcsname{%
+ \@glo@symbolpluralaccess}%
+ \expandafter
+ \protected@xdef\csname glo@\@glo@label @descaccess\endcsname{%
+ \@glo@descaccess}%
+ \expandafter
+ \protected@xdef\csname glo@\@glo@label @descpluralaccess\endcsname{%
+ \@glo@descpluralaccess}%
+ \expandafter
+ \protected@xdef\csname glo@\@glo@label @shortaccess\endcsname{%
+ \@glo@shortaccess}%
+ \expandafter
+ \protected@xdef\csname glo@\@glo@label @shortpluralaccess\endcsname{%
+ \@glo@shortpluralaccess}%
+ \expandafter
+ \protected@xdef\csname glo@\@glo@label @longaccess\endcsname{%
+ \@glo@longaccess}%
+ \expandafter
+ \protected@xdef\csname glo@\@glo@label @longpluralaccess\endcsname{%
+ \@glo@longpluralaccess}%
+}
+% \end{macrocode}
+%
+%\section{Accessing Replacement Text}
+%\begin{macro}{\glsentryaccess}
+% Get the value of the \gloskey{access} key for the entry with
+% the given label:
+%\changes{4.03}{2014-01-20}{switched to using \cs{@gls@entry@field}}
+% \begin{macrocode}
+\newcommand*{\glsentryaccess}[1]{%
+ \@gls@entry@field{#1}{access}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsentrytextaccess}
+% Get the value of the \gloskey{textaccess} key for the entry with
+% the given label:
+%\changes{4.03}{2014-01-20}{switched to using \cs{@gls@entry@field}}
+% \begin{macrocode}
+\newcommand*{\glsentrytextaccess}[1]{%
+ \@gls@entry@field{#1}{textaccess}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsentryfirstaccess}
+% Get the value of the \gloskey{firstaccess} key for the entry with
+% the given label:
+%\changes{4.03}{2014-01-20}{switched to using \cs{@gls@entry@field}}
+% \begin{macrocode}
+\newcommand*{\glsentryfirstaccess}[1]{%
+ \@gls@entry@field{#1}{firstaccess}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsentrypluralaccess}
+% Get the value of the \gloskey{pluralaccess} key for the entry with
+% the given label:
+%\changes{4.03}{2014-01-20}{switched to using \cs{@gls@entry@field}}
+% \begin{macrocode}
+\newcommand*{\glsentrypluralaccess}[1]{%
+ \@gls@entry@field{#1}{pluralaccess}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsentryfirstpluralaccess}
+% Get the value of the \gloskey{firstpluralaccess} key for the entry with
+% the given label:
+% \begin{macrocode}
+\newcommand*{\glsentryfirstpluralaccess}[1]{%
+ \csname glo@#1@firstpluralaccess\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsentrysymbolaccess}
+% Get the value of the \gloskey{symbolaccess} key for the entry with
+% the given label:
+%\changes{4.03}{2014-01-20}{switched to using \cs{@gls@entry@field}}
+% \begin{macrocode}
+\newcommand*{\glsentrysymbolaccess}[1]{%
+ \@gls@entry@field{#1}{symbolaccess}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsentrysymbolpluralaccess}
+% Get the value of the \gloskey{symbolpluralaccess} key for the entry with
+% the given label:
+%\changes{4.03}{2014-01-20}{switched to using \cs{@gls@entry@field}}
+% \begin{macrocode}
+\newcommand*{\glsentrysymbolpluralaccess}[1]{%
+ \@gls@entry@field{#1}{symbolpluralaccess}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsentrydescaccess}
+% Get the value of the \gloskey{descriptionaccess} key for the entry with
+% the given label:
+%\changes{4.03}{2014-01-20}{switched to using \cs{@gls@entry@field}}
+% \begin{macrocode}
+\newcommand*{\glsentrydescaccess}[1]{%
+ \@gls@entry@field{#1}{descaccess}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsentrydescpluralaccess}
+% Get the value of the \gloskey{descriptionpluralaccess} key for the entry with
+% the given label:
+%\changes{4.03}{2014-01-20}{switched to using \cs{@gls@entry@field}}
+% \begin{macrocode}
+\newcommand*{\glsentrydescpluralaccess}[1]{%
+ \@gls@entry@field{#1}{descaccess}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsentryshortaccess}
+% Get the value of the \gloskey{shortaccess} key for the entry with
+% the given label:
+%\changes{4.03}{2014-01-20}{switched to using \cs{@gls@entry@field}}
+% \begin{macrocode}
+\newcommand*{\glsentryshortaccess}[1]{%
+ \@gls@entry@field{#1}{shortaccess}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsentryshortpluralaccess}
+% Get the value of the \gloskey{shortpluralaccess} key for the entry with
+% the given label:
+%\changes{4.03}{2014-01-20}{switched to using \cs{@gls@entry@field}}
+% \begin{macrocode}
+\newcommand*{\glsentryshortpluralaccess}[1]{%
+ \@gls@entry@field{#1}{shortpluralaccess}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsentrylongaccess}
+% Get the value of the \gloskey{longaccess} key for the entry with
+% the given label:
+%\changes{4.03}{2014-01-20}{switched to using \cs{@gls@entry@field}}
+% \begin{macrocode}
+\newcommand*{\glsentrylongaccess}[1]{%
+ \@gls@entry@field{#1}{longaccess}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsentrylongpluralaccess}
+% Get the value of the \gloskey{longpluralaccess} key for the entry with
+% the given label:
+%\changes{4.03}{2014-01-20}{switched to using \cs{@gls@entry@field}}
+% \begin{macrocode}
+\newcommand*{\glsentrylongpluralaccess}[1]{%
+ \@gls@entry@field{#1}{longpluralaccess}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsaccsupp}
+%\changes{4.38}{2018-05-10}{added braces around actual text argument}
+%\begin{definition}
+%\cs{glsaccsupp}\marg{replacement text}\marg{text}
+%\end{definition}
+% This can be redefined to use "E" or "Alt" instead of
+% "ActualText". (I don't have the software to test the "E" or
+% "Alt" options.)
+% \begin{macrocode}
+\newcommand*{\glsaccsupp}[2]{%
+ \BeginAccSupp{ActualText={#1}}#2\EndAccSupp{}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\xglsaccsupp}
+% Fully expands replacement text before calling \cs{glsaccsupp}
+% \begin{macrocode}
+\newcommand*{\xglsaccsupp}[2]{%
+ \protected@edef\@gls@replacementtext{#1}%
+ \expandafter\glsaccsupp\expandafter{\@gls@replacementtext}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@gls@access@display}
+%\changes{4.03}{2014-01-20}{new}
+% \begin{macrocode}
+\newcommand*{\@gls@access@display}[2]{%
+ \protected@edef\@glo@access{#2}%
+ \ifx\@glo@access\@gls@noaccess
+ #1%
+ \else
+ \xglsaccsupp{\@glo@access}{#1}%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsnameaccessdisplay}
+% Displays the first argument with the accessibility text for
+% the entry with the label given by the second argument (if set).
+% \begin{macrocode}
+\DeclareRobustCommand*{\glsnameaccessdisplay}[2]{%
+ \@gls@access@display{#1}{\glsentryaccess{#2}}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glstextaccessdisplay}
+% As above but for the \gloskey{textaccess} replacement text.
+% \begin{macrocode}
+\DeclareRobustCommand*{\glstextaccessdisplay}[2]{%
+ \@gls@access@display{#1}{\glsentrytextaccess{#2}}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glspluralaccessdisplay}
+% As above but for the \gloskey{pluralaccess} replacement text.
+% \begin{macrocode}
+\DeclareRobustCommand*{\glspluralaccessdisplay}[2]{%
+ \@gls@access@display{#1}{\glsentrypluralaccess{#2}}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsfirstaccessdisplay}
+% As above but for the \gloskey{firstaccess} replacement text.
+% \begin{macrocode}
+\DeclareRobustCommand*{\glsfirstaccessdisplay}[2]{%
+ \@gls@access@display{#1}{\glsentryfirstaccess{#2}}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsfirstpluralaccessdisplay}
+% As above but for the \gloskey{firstpluralaccess} replacement text.
+% \begin{macrocode}
+\DeclareRobustCommand*{\glsfirstpluralaccessdisplay}[2]{%
+ \@gls@access@display{#1}{\glsentryfirstpluralaccess{#2}}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glssymbolaccessdisplay}
+% As above but for the \gloskey{symbolaccess} replacement text.
+% \begin{macrocode}
+\DeclareRobustCommand*{\glssymbolaccessdisplay}[2]{%
+ \@gls@access@display{#1}{\glsentrysymbolaccess{#2}}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glssymbolpluralaccessdisplay}
+% As above but for the \gloskey{symbolpluralaccess} replacement text.
+% \begin{macrocode}
+\DeclareRobustCommand*{\glssymbolpluralaccessdisplay}[2]{%
+ \@gls@access@display{#1}{\glsentrysymbolpluralaccess{#2}}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsdescriptionaccessdisplay}
+% As above but for the \gloskey{descriptionaccess} replacement text.
+% \begin{macrocode}
+\DeclareRobustCommand*{\glsdescriptionaccessdisplay}[2]{%
+ \@gls@access@display{#1}{\glsentrydescaccess{#2}}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsdescriptionpluralaccessdisplay}
+% As above but for the \gloskey{descriptionpluralaccess} replacement text.
+% \begin{macrocode}
+\DeclareRobustCommand*{\glsdescriptionpluralaccessdisplay}[2]{%
+ \@gls@access@display{#1}{\glsentrydescpluralaccess{#2}}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsshortaccessdisplay}
+% As above but for the \gloskey{shortaccess} replacement text.
+% \begin{macrocode}
+\DeclareRobustCommand*{\glsshortaccessdisplay}[2]{%
+ \@gls@access@display{#1}{\glsentryshortaccess{#2}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsshortpluralaccessdisplay}
+% As above but for the \gloskey{shortpluralaccess} replacement text.
+% \begin{macrocode}
+\DeclareRobustCommand*{\glsshortpluralaccessdisplay}[2]{%
+ \@gls@access@display{#1}{\glsentryshortpluralaccess{#2}}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glslongaccessdisplay}
+% As above but for the \gloskey{longaccess} replacement text.
+% \begin{macrocode}
+\DeclareRobustCommand*{\glslongaccessdisplay}[2]{%
+ \@gls@access@display{#1}{\glsentrylongaccess{#2}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glslongpluralaccessdisplay}
+% As above but for the \gloskey{longpluralaccess} replacement text.
+% \begin{macrocode}
+\DeclareRobustCommand*{\glslongpluralaccessdisplay}[2]{%
+ \@gls@access@display{#1}{\glsentrylongpluralaccess{#2}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsaccessdisplay}
+% Gets the replacement text corresponding to the named key given
+% by the first argument and calls the appropriate command
+% defined above.
+% \begin{macrocode}
+\DeclareRobustCommand*{\glsaccessdisplay}[3]{%
+ \@ifundefined{gls#1accessdisplay}%
+ {%
+ \PackageError{glossaries-accsupp}{No accessibility support
+ for key `#1'}{}%
+ }%
+ {%
+ \csname gls#1accessdisplay\endcsname{#2}{#3}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@@gls@default@entryfmt}
+% Redefine the default entry format to use accessibility information
+% \begin{macrocode}
+\renewcommand*{\@@gls@default@entryfmt}[2]{%
+ \ifdefempty\glscustomtext
+ {%
+ \glsifplural
+ {%
+% \end{macrocode}
+% Plural form
+% \begin{macrocode}
+ \glscapscase
+ {%
+% \end{macrocode}
+% Don't adjust case
+% \begin{macrocode}
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use
+% \begin{macrocode}
+ #2{\glspluralaccessdisplay
+ {\glsentryplural{\glslabel}}{\glslabel}}%
+ {\glsdescriptionpluralaccessdisplay
+ {\glsentrydescplural{\glslabel}}{\glslabel}}%
+ {\glssymbolpluralaccessdisplay
+ {\glsentrysymbolplural{\glslabel}}{\glslabel}}
+ {\glsinsert}%
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ #1{\glsfirstpluralaccessdisplay
+ {\glsentryfirstplural{\glslabel}}{\glslabel}}%
+ {\glsdescriptionpluralaccessdisplay
+ {\glsentrydescplural{\glslabel}}{\glslabel}}%
+ {\glssymbolpluralaccessdisplay
+ {\glsentrysymbolplural{\glslabel}}{\glslabel}}%
+ {\glsinsert}%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Make first letter upper case
+% \begin{macrocode}
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use.
+% \begin{macrocode}
+ #2{\glspluralaccessdisplay
+ {\Glsentryplural{\glslabel}}{\glslabel}}%
+ {\glsdescriptionpluralaccessdisplay
+ {\glsentrydescplural{\glslabel}}{\glslabel}}%
+ {\glssymbolpluralaccessdisplay
+ {\glsentrysymbolplural{\glslabel}}{\glslabel}}%
+ {\glsinsert}%
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ #1{\glsfirstpluralaccessdisplay
+ {\Glsentryfirstplural{\glslabel}}{\glslabel}}%
+ {\glsdescriptionpluralaccessdisplay
+ {\glsentrydescplural{\glslabel}}{\glslabel}}%
+ {\glssymbolpluralaccessdisplay
+ {\glsentrysymbolplural{\glslabel}}{\glslabel}}%
+ {\glsinsert}%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Make all upper case
+% \begin{macrocode}
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use
+% \begin{macrocode}
+ \MakeUppercase{%
+ #2{\glspluralaccessdisplay
+ {\glsentryplural{\glslabel}}{\glslabel}}%
+ {\glsdescriptionpluralaccessdisplay
+ {\glsentrydescplural{\glslabel}}{\glslabel}}%
+ {\glssymbolpluralaccessdisplay
+ {\glsentrysymbolplural{\glslabel}}{\glslabel}}%
+ {\glsinsert}}%
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ \MakeUppercase{%
+ #1{\glsfirstpluralaccessdisplay
+ {\glsentryfirstplural{\glslabel}}{\glslabel}}%
+ {\glsdescriptionpluralaccessdisplay
+ {\glsentrydescplural{\glslabel}}{\glslabel}}%
+ {\glssymbolpluralaccessdisplay
+ {\glsentrysymbolplural{\glslabel}}{\glslabel}}%
+ {\glsinsert}}%
+ }%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Singular form
+% \begin{macrocode}
+ \glscapscase
+ {%
+% \end{macrocode}
+% Don't adjust case
+% \begin{macrocode}
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use
+% \begin{macrocode}
+ #2{\glstextaccessdisplay
+ {\glsentrytext{\glslabel}}{\glslabel}}%
+ {\glsdescriptionaccessdisplay
+ {\glsentrydesc{\glslabel}}{\glslabel}}%
+ {\glssymbolaccessdisplay
+ {\glsentrysymbol{\glslabel}}{\glslabel}}%
+ {\glsinsert}%
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ #1{\glsfirstaccessdisplay
+ {\glsentryfirst{\glslabel}}{\glslabel}}%
+ {\glsdescriptionaccessdisplay
+ {\glsentrydesc{\glslabel}}{\glslabel}}%
+ {\glssymbolaccessdisplay
+ {\glsentrysymbol{\glslabel}}{\glslabel}}%
+ {\glsinsert}%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Make first letter upper case
+% \begin{macrocode}
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use
+% \begin{macrocode}
+ #2{\glstextaccessdisplay
+ {\Glsentrytext{\glslabel}}{\glslabel}}%
+ {\glsdescriptionaccessdisplay
+ {\glsentrydesc{\glslabel}}{\glslabel}}%
+ {\glssymbolaccessdisplay
+ {\glsentrysymbol{\glslabel}}{\glslabel}}%
+ {\glsinsert}%
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ #1{\glsfirstaccessdisplay
+ {\Glsentryfirst{\glslabel}}{\glslabel}}%
+ {\glsdescriptionaccessdisplay
+ {\glsentrydesc{\glslabel}}{\glslabel}}%
+ {\glssymbolaccessdisplay
+ {\glsentrysymbol{\glslabel}}{\glslabel}}%
+ {\glsinsert}%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Make all upper case
+% \begin{macrocode}
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use
+% \begin{macrocode}
+ \MakeUppercase{%
+ #2{\glstextaccessdisplay
+ {\glsentrytext{\glslabel}}{\glslabel}}%
+ {\glsdescriptionaccessdisplay
+ {\glsentrydesc{\glslabel}}{\glslabel}}%
+ {\glssymbolaccessdisplay
+ {\glsentrysymbol{\glslabel}}{\glslabel}}%
+ {\glsinsert}}%
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ \MakeUppercase{%
+ #1{\glsfirstaccessdisplay
+ {\glsentryfirst{\glslabel}}{\glslabel}}%
+ {\glsdescriptionaccessdisplay
+ {\glsentrydesc{\glslabel}}{\glslabel}}%
+ {\glssymbolaccessdisplay
+ {\glsentrysymbol{\glslabel}}{\glslabel}}%
+ {\glsinsert}}%
+ }%
+ }%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Custom text provided in \cs{glsdisp}
+% \begin{macrocode}
+ \ifglsused{\glslabel}%
+ {%
+% \end{macrocode}
+% Subsequent use
+% \begin{macrocode}
+ #2{\glscustomtext}%
+ {\glsdescriptionaccessdisplay
+ {\glsentrydesc{\glslabel}}{\glslabel}}%
+ {\glssymbolaccessdisplay
+ {\glsentrysymbol{\glslabel}}{\glslabel}}%
+ {\glsinsert}%
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ #1{\glscustomtext}%
+ {\glsdescriptionaccessdisplay
+ {\glsentrydesc{\glslabel}}{\glslabel}}%
+ {\glssymbolaccessdisplay
+ {\glsentrysymbol{\glslabel}}{\glslabel}}%
+ {\glsinsert}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsgenentryfmt}
+% Redefine to use accessibility information.
+%\changes{4.03}{2014-01-20}{redefined to use accessibility
+%information}
+% \begin{macrocode}
+\renewcommand*{\glsgenentryfmt}{%
+ \ifdefempty\glscustomtext
+ {%
+ \glsifplural
+ {%
+% \end{macrocode}
+% Plural form
+% \begin{macrocode}
+ \glscapscase
+ {%
+% \end{macrocode}
+% Don't adjust case
+% \begin{macrocode}
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use
+% \begin{macrocode}
+ \glspluralaccessdisplay
+ {\glsentryplural{\glslabel}}{\glslabel}%
+ \glsinsert
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ \glsfirstpluralaccessdisplay
+ {\glsentryfirstplural{\glslabel}}{\glslabel}%
+ \glsinsert
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Make first letter upper case
+% \begin{macrocode}
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use.
+% \begin{macrocode}
+ \glspluralaccessdisplay
+ {\Glsentryplural{\glslabel}}{\glslabel}%
+ \glsinsert
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ \glsfirstpluralaccessdisplay
+ {\Glsentryfirstplural{\glslabel}}{\glslabel}%
+ \glsinsert
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Make all upper case
+% \begin{macrocode}
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use
+% \begin{macrocode}
+ \glspluralaccessdisplay
+ {\mfirstucMakeUppercase{\glsentryplural{\glslabel}}}%
+ {\glslabel}%
+ \mfirstucMakeUppercase{\glsinsert}%
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ \glsfirstpluralacessdisplay
+ {\mfirstucMakeUppercase{\glsentryfirstplural{\glslabel}}}%
+ {\glslabel}%
+ \mfirstucMakeUppercase{\glsinsert}%
+ }%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Singular form
+% \begin{macrocode}
+ \glscapscase
+ {%
+% \end{macrocode}
+% Don't adjust case
+% \begin{macrocode}
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use
+% \begin{macrocode}
+ \glstextaccessdisplay{\glsentrytext{\glslabel}}{\glslabel}%
+ \glsinsert
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ \glsfirstaccessdisplay{\glsentryfirst{\glslabel}}{\glslabel}%
+ \glsinsert
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Make first letter upper case
+% \begin{macrocode}
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use
+% \begin{macrocode}
+ \glstextaccessdisplay{\Glsentrytext{\glslabel}}{\glslabel}%
+ \glsinsert
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ \glsfirstaccessdisplay{\Glsentryfirst{\glslabel}}{\glslabel}%
+ \glsinsert
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Make all upper case
+% \begin{macrocode}
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use
+% \begin{macrocode}
+ \glstextaccessdisplay
+ {\mfirstucMakeUppercase{\glsentrytext{\glslabel}}}{\glslabel}%
+ \mfirstucMakeUppercase{\glsinsert}%
+ }%
+ {%
+% \end{macrocode}
+% First use
+% \begin{macrocode}
+ \glsfirstaccessdisplay
+ {\mfirstucMakeUppercase{\glsentryfirst{\glslabel}}}{\glslabel}%
+ \mfirstucMakeUppercase{\glsinsert}%
+ }%
+ }%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Custom text provided in \cs{glsdisp}. (The insert should
+% be empty at this point.) The accessibility information, if
+% required, will have to be explicitly included in the custom text.
+% \begin{macrocode}
+ \glscustomtext\glsinsert
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\glsgenacfmt}
+% Redefine to include accessibility information.
+%\changes{4.03}{2014-01-20}{redefined to use accessibility
+%information}
+% \begin{macrocode}
+\renewcommand*{\glsgenacfmt}{%
+ \ifdefempty\glscustomtext
+ {%
+ \ifglsused\glslabel
+ {%
+% \end{macrocode}
+% Subsequent use:
+% \begin{macrocode}
+ \glsifplural
+ {%
+% \end{macrocode}
+% Subsequent plural form:
+% \begin{macrocode}
+ \glscapscase
+ {%
+% \end{macrocode}
+% Subsequent plural form, don't adjust case:
+% \begin{macrocode}
+ \acronymfont
+ {\glsshortpluralaccessdisplay
+ {\glsentryshortpl{\glslabel}}{\glslabel}}%
+ \glsinsert
+ }%
+ {%
+% \end{macrocode}
+% Subsequent plural form, make first letter upper case:
+% \begin{macrocode}
+ \acronymfont
+ {\glsshortpluralaccessdisplay
+ {\Glsentryshortpl{\glslabel}}{\glslabel}}%
+ \glsinsert
+ }%
+ {%
+% \end{macrocode}
+% Subsequent plural form, all caps:
+% \begin{macrocode}
+ \mfirstucMakeUppercase
+ {\acronymfont
+ {\glsshortpluralaccessdisplay
+ {\glsentryshortpl{\glslabel}}{\glslabel}}%
+ \glsinsert}%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Subsequent singular form
+% \begin{macrocode}
+ \glscapscase
+ {%
+% \end{macrocode}
+% Subsequent singular form, don't adjust case:
+% \begin{macrocode}
+ \acronymfont
+ {\glsshortaccessdisplay{\glsentryshort{\glslabel}}{\glslabel}}%
+ \glsinsert
+ }%
+ {%
+% \end{macrocode}
+% Subsequent singular form, make first letter upper case:
+% \begin{macrocode}
+ \acronymfont
+ {\glsshortaccessdisplay{\Glsentryshort{\glslabel}}{\glslabel}}%
+ \glsinsert
+ }%
+ {%
+% \end{macrocode}
+% Subsequent singular form, all caps:
+% \begin{macrocode}
+ \mfirstucMakeUppercase
+ {\acronymfont{%
+ \glsshortaccessdisplay{\glsentryshort{\glslabel}}{\glslabel}}%
+ \glsinsert}%
+ }%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% First use:
+% \begin{macrocode}
+ \glsifplural
+ {%
+% \end{macrocode}
+% First use plural form:
+% \begin{macrocode}
+ \glscapscase
+ {%
+% \end{macrocode}
+% First use plural form, don't adjust case:
+% \begin{macrocode}
+ \genplacrfullformat{\glslabel}{\glsinsert}%
+ }%
+ {%
+% \end{macrocode}
+% First use plural form, make first letter upper case:
+% \begin{macrocode}
+ \Genplacrfullformat{\glslabel}{\glsinsert}%
+ }%
+ {%
+% \end{macrocode}
+% First use plural form, all caps:
+% \begin{macrocode}
+ \mfirstucMakeUppercase
+ {\genplacrfullformat{\glslabel}{\glsinsert}}%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% First use singular form
+% \begin{macrocode}
+ \glscapscase
+ {%
+% \end{macrocode}
+% First use singular form, don't adjust case:
+% \begin{macrocode}
+ \genacrfullformat{\glslabel}{\glsinsert}%
+ }%
+ {%
+% \end{macrocode}
+% First use singular form, make first letter upper case:
+% \begin{macrocode}
+ \Genacrfullformat{\glslabel}{\glsinsert}%
+ }%
+ {%
+% \end{macrocode}
+% First use singular form, all caps:
+% \begin{macrocode}
+ \mfirstucMakeUppercase
+ {\genacrfullformat{\glslabel}{\glsinsert}}%
+ }%
+ }%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% User supplied text. (The insert should be empty at this point.)
+% The accessibility information, if
+% required, will have to be explicitly included in the custom text.
+% \begin{macrocode}
+ \glscustomtext
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\genacrfullformat}
+% Redefine to include accessibility information.
+%\changes{4.03}{2014-01-20}{redefined to use accessibility
+%information}
+% \begin{macrocode}
+\renewcommand*{\genacrfullformat}[2]{%
+ \glslongaccessdisplay{\glsentrylong{#1}}{#1}#2\space
+ (\glsshortaccessdisplay{\protect\firstacronymfont{\glsentryshort{#1}}}{#1})%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\Genacrfullformat}
+% Redefine to include accessibility information.
+%\changes{4.03}{2014-01-20}{redefined to use accessibility
+%information}
+% \begin{macrocode}
+\renewcommand*{\Genacrfullformat}[2]{%
+ \glslongaccessdisplay{\Glsentrylong{#1}}{#1}#2\space
+ (\glsshortaccessdisplay{\protect\firstacronymfont{\Glsentryshort{#1}}}{#1})%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\genplacrfullformat}
+% Redefine to include accessibility information.
+%\changes{4.03}{2014-01-20}{redefined to use accessibility
+%information}
+% \begin{macrocode}
+\renewcommand*{\genplacrfullformat}[2]{%
+ \glslongpluralaccessdisplay{\glsentrylongpl{#1}}{#1}#2\space
+ (\glsshortpluralaccessdisplay
+ {\protect\firstacronymfont{\glsentryshortpl{#1}}}{#1})%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\Genplacrfullformat}
+% Redefine to include accessibility information.
+%\changes{4.03}{2014-01-20}{redefined to use accessibility
+%information}
+% \begin{macrocode}
+\renewcommand*{\Genplacrfullformat}[2]{%
+ \glslongpluralaccessdisplay{\Glsentrylongpl{#1}}{#1}#2\space
+ (\glsshortpluralaccessdisplay
+ {\protect\firstacronymfont{\glsentryshortpl{#1}}}{#1})%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@acrshort}
+%\changes{4.08}{2014-07-30}{added \cs{do@gls@link@checkfirsthyper}}
+% \begin{macrocode}
+\def\@acrshort#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+ \let\do@gls@link@checkfirsthyper\relax
+% \end{macrocode}
+%\changes{3.11a}{2013-10-15}{added \cs{glslabel}, \cs{glsifplural},
+% \cs{glscapscase}, \cs{glsinsert} and \cs{glscustomtext}}
+%\changes{4.03}{2014-01-20}{removed \cs{glslabel} (defined in
+%\cs{@gls@link})}
+% \begin{macrocode}
+ \let\glsifplural\@secondoftwo
+ \let\glscapscase\@firstofthree
+ \let\glsinsert\@empty
+ \def\glscustomtext{%
+ \acronymfont{\glsshortaccessdisplay{\glsentryshort{#2}}{#2}}#3%
+ }%
+% \end{macrocode}
+% Call \cs{@gls@link}
+% \begin{macrocode}
+ \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@Acrshort}
+%\changes{4.08}{2014-07-30}{added \cs{do@gls@link@checkfirsthyper}}
+% \begin{macrocode}
+\def\@Acrshort#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+ \let\do@gls@link@checkfirsthyper\relax
+% \end{macrocode}
+%\changes{3.11a}{2013-10-15}{added \cs{glslabel}, \cs{glsifplural},
+% \cs{glscapscase}, \cs{glsinsert} and \cs{glscustomtext}}
+%\changes{4.03}{2014-01-20}{removed \cs{glslabel} (defined in
+%\cs{@gls@link})}
+% \begin{macrocode}
+ \let\glsifplural\@secondoftwo
+ \let\glscapscase\@secondofthree
+ \let\glsinsert\@empty
+ \def\glscustomtext{%
+ \acronymfont{\glsshortaccessdisplay{\Glsentryshort{#2}}{#2}}#3%
+ }%
+% \end{macrocode}
+% Call \cs{@gls@link}
+% \begin{macrocode}
+ \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@ACRshort}
+%\changes{4.08}{2014-07-30}{added \cs{do@gls@link@checkfirsthyper}}
+% \begin{macrocode}
+\def\@ACRshort#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+ \let\do@gls@link@checkfirsthyper\relax
+% \end{macrocode}
+%\changes{3.11a}{2013-10-15}{added \cs{glslabel}, \cs{glsifplural},
+% \cs{glscapscase}, \cs{glsinsert} and \cs{glscustomtext}}
+%\changes{4.03}{2014-01-20}{removed \cs{glslabel} (defined in
+%\cs{@gls@link})}
+% \begin{macrocode}
+ \let\glsifplural\@secondoftwo
+ \let\glscapscase\@thirdofthree
+ \let\glsinsert\@empty
+ \def\glscustomtext{%
+ \acronymfont{\glsshortaccessdisplay
+ {\MakeUppercase{\glsentryshort{#2}}}{#2}}#3%
+ }%
+% \end{macrocode}
+% Call \cs{@gls@link}
+% \begin{macrocode}
+ \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@acrlong}
+%\changes{4.08}{2014-07-30}{added \cs{do@gls@link@checkfirsthyper}}
+% \begin{macrocode}
+\def\@acrlong#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+ \let\do@gls@link@checkfirsthyper\relax
+% \end{macrocode}
+%\changes{3.11a}{2013-10-15}{added \cs{glslabel}, \cs{glsifplural},
+% \cs{glscapscase}, \cs{glsinsert} and \cs{glscustomtext}}
+%\changes{4.03}{2014-01-20}{removed \cs{glslabel} (defined in
+%\cs{@gls@link})}
+% \begin{macrocode}
+ \let\glsifplural\@secondoftwo
+ \let\glscapscase\@firstofthree
+ \let\glsinsert\@empty
+ \def\glscustomtext{%
+ \acronymfont{\glslongaccessdisplay{\glsentrylong{#2}}{#2}}#3%
+ }%
+% \end{macrocode}
+% Call \cs{@gls@link}
+% \begin{macrocode}
+ \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@Acrlong}
+%\changes{4.08}{2014-07-30}{added \cs{do@gls@link@checkfirsthyper}}
+% \begin{macrocode}
+\def\@Acrlong#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+ \let\do@gls@link@checkfirsthyper\relax
+% \end{macrocode}
+%\changes{3.11a}{2013-10-15}{added \cs{glslabel}, \cs{glsifplural},
+% \cs{glscapscase}, \cs{glsinsert} and \cs{glscustomtext}}
+%\changes{4.03}{2014-01-20}{removed \cs{glslabel} (defined in
+%\cs{@gls@link})}
+% \begin{macrocode}
+ \let\glsifplural\@secondoftwo
+ \let\glscapscase\@firstofthree
+ \let\glsinsert\@empty
+ \def\glscustomtext{%
+ \acronymfont{\glslongaccessdisplay{\Glsentrylong{#2}}{#2}}#3%
+ }%
+% \end{macrocode}
+% Call \cs{@gls@link}
+% \begin{macrocode}
+ \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@ACRlong}
+%\changes{4.08}{2014-07-30}{added \cs{do@gls@link@checkfirsthyper}}
+% \begin{macrocode}
+\def\@ACRlong#1#2[#3]{%
+ \glsdoifexists{#2}%
+ {%
+ \let\do@gls@link@checkfirsthyper\relax
+% \end{macrocode}
+%\changes{3.11a}{2013-10-15}{added \cs{glslabel}, \cs{glsifplural},
+% \cs{glscapscase}, \cs{glsinsert} and \cs{glscustomtext}}
+%\changes{4.03}{2014-01-20}{removed \cs{glslabel} (defined in
+%\cs{@gls@link})}
+% \begin{macrocode}
+ \let\glsifplural\@secondoftwo
+ \let\glscapscase\@firstofthree
+ \let\glsinsert\@empty
+ \def\glscustomtext{%
+ \acronymfont{\glslongaccessdisplay{%
+ \MakeUppercase{\glsentrylong{#2}}}{#2}#3}%
+ }%
+% \end{macrocode}
+% Call \cs{@gls@link}
+% \begin{macrocode}
+ \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}%
+ }%
+% \end{macrocode}
+%\changes{4.16}{2015-07-08}{added \cs{glspostlinkhook}}
+% \begin{macrocode}
+ \glspostlinkhook
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\section{Displaying the Glossary}
+%\changes{3.08a}{2013-09-28}{removed definition of \cs{@glossaryentryfield}}
+%\changes{3.08a}{2013-09-28}{removed definition of \cs{@glossarysubentryfield}}
+%
+% We need to redefine the way the glossary entries are formatted to
+% include the accessibility support. The predefined glossary styles
+% use \ics{glossentryname}, \ics{glossentrydesc} and
+% \ics{glossentrysymbol}, but we need to provide compatibility with
+% earlier versions in case users have defined their own styles using
+% \cs{accsuppglossaryentryfield} and
+% \cs{accsuppglossarysubentryfield}.
+%
+% Now redefine \cs{glossentryname}, \cs{glossentrydesc} and
+% \cs{glossentrysymbol} etc so they use the accessibility stuff.
+% \begin{macrocode}
+\renewcommand*{\glossentryname}[1]{%
+ \glsdoifexists{#1}%
+ {%
+ \glsnamefont{\glsnameaccessdisplay{\glsentryname{#1}}{#1}}%
+ }%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewcommand*{\glossentryname}[1]{%
+ \glsdoifexists{#1}%
+ {%
+ \glsnamefont{\glsnameaccessdisplay{\Glsentryname{#1}}{#1}}%
+ }%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewcommand*{\glossentrydesc}[1]{%
+ \glsdoifexists{#1}%
+ {%
+ \glsdescriptionaccessdisplay{\glsentrydesc{#1}}{#1}%
+ }%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewcommand*{\Glossentrydesc}[1]{%
+ \glsdoifexists{#1}%
+ {%
+ \glsdescriptionaccessdisplay{\Glsentrydesc{#1}}{#1}%
+ }%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewcommand*{\glossentrysymbol}[1]{%
+ \glsdoifexists{#1}%
+ {%
+ \glssymbolaccessdisplay{\glsentrysymbol{#1}}{#1}%
+ }%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\renewcommand*{\Glossentrysymbol}[1]{%
+ \glsdoifexists{#1}%
+ {%
+ \glssymbolaccessdisplay{\Glsentrysymbol{#1}}{#1}%
+ }%
+}
+% \end{macrocode}
+%
+%\begin{macro}{\accsuppglossaryentryfield}
+% \begin{macrocode}
+\newcommand*{\accsuppglossaryentryfield}[5]{%
+ \glossaryentryfield{#1}%
+ {\glsnameaccessdisplay{#2}{#1}}%
+ {\glsdescriptionaccessdisplay{#3}{#1}}%
+ {\glssymbolaccessdisplay{#4}{#1}}{#5}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\accsuppglossarysubentryfield}
+% \begin{macrocode}
+\newcommand*{\accsuppglossarysubentryfield}[6]{%
+ \glossarysubentryfield{#1}{#2}%
+ {\glsnameaccessdisplay{#3}{#2}}%
+ {\glsdescriptionaccessdisplay{#4}{#2}}%
+ {\glssymbolaccessdisplay{#5}{#2}}{#6}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\section{Acronyms}
+% Redefine acronym styles provided by \styfmt{glossaries}:
+%
+%\begin{acrstyle}{long-short}
+% \meta{long} (\meta{short}) acronym style.
+%\changes{4.03}{2014-01-20}{redefined to use accessibility
+%information}
+% \begin{macrocode}
+\renewacronymstyle{long-short}%
+{%
+% \end{macrocode}
+% Check for long form in case this is a mixed glossary.
+% \begin{macrocode}
+ \ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}%
+}%
+{%
+ \renewcommand*{\GenericAcronymFields}{description={\the\glslongtok}}%
+ \renewcommand*{\genacrfullformat}[2]{%
+ \glslongaccessdisplay{\glsentrylong{##1}}{##1}##2\space
+ (\glsshortaccessdisplay
+ {\protect\firstacronymfont{\glsentryshort{##1}}}{##1})%
+ }%
+ \renewcommand*{\Genacrfullformat}[2]{%
+ \glslongaccessdisplay{\Glsentrylong{##1}}{##1}##2\space
+ (\glsshortaccessdisplay
+ {\protect\firstacronymfont{\glsentryshort{##1}}}{##1})%
+ }%
+ \renewcommand*{\genplacrfullformat}[2]{%
+ \glslongpluralaccessdisplay{\glsentrylongpl{##1}}{##1}##2\space
+ (\glsshortpluralaccessdisplay
+ {\protect\firstacronymfont{\glsentryshortpl{##1}}}{##1})%
+ }%
+ \renewcommand*{\Genplacrfullformat}[2]{%
+ \glslongpluralaccessdisplay{\Glsentrylongpl{##1}}{##1}##2\space
+ (\glsshortpluralaccessdisplay
+ {\protect\firstacronymfont{\glsentryshortpl{##1}}}{##1})%
+ }%
+ \renewcommand*{\acronymentry}[1]{%
+ \glsshortaccessdisplay{\acronymfont{\glsentryshort{##1}}}{##1}}
+ \renewcommand*{\acronymsort}[2]{##1}%
+ \renewcommand*{\acronymfont}[1]{##1}%
+ \renewcommand*{\firstacronymfont}[1]{\acronymfont{##1}}%
+ \renewcommand*{\acrpluralsuffix}{\glspluralsuffix}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{short-long}
+% \meta{short} (\meta{long}) acronym style.
+%\changes{4.03}{2014-01-20}{redefined to use accessibility
+%information}
+% \begin{macrocode}
+\renewacronymstyle{short-long}%
+{%
+% \end{macrocode}
+% Check for long form in case this is a mixed glossary.
+% \begin{macrocode}
+ \ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}%
+}%
+{%
+ \renewcommand*{\GenericAcronymFields}{description={\the\glslongtok}}%
+ \renewcommand*{\genacrfullformat}[2]{%
+ \glsshortaccessdisplay
+ {\protect\firstacronymfont{\glsentryshort{##1}}}{##1}##2\space
+ (\glslongaccessdisplay{\glsentrylong{##1}}{##1})%
+ }%
+ \renewcommand*{\Genacrfullformat}[2]{%
+ \glsshortaccessdisplay
+ {\protect\firstacronymfont{\Glsentryshort{##1}}}{##1}##2\space
+ (\glslongaccessdisplay{\glsentrylong{##1}}{##1})%
+ }%
+ \renewcommand*{\genplacrfullformat}[2]{%
+ \glsshortpluralaccessdisplay
+ {\protect\firstacronymfont{\glsentryshortpl{##1}}}{##1}##2\space
+ (\glslongpluralaccessdisplay
+ {\glsentrylongpl{##1}}{##1})%
+ }%
+ \renewcommand*{\Genplacrfullformat}[2]{%
+ \glsshortpluralaccessdisplay
+ {\protect\firstacronymfont{\Glsentryshortpl{##1}}}{##1}##2\space
+ (\glslongpluralaccessdisplay{\glsentrylongpl{##1}}{##1})%
+ }%
+ \renewcommand*{\acronymentry}[1]{%
+ \glsshortaccessdisplay{\acronymfont{\glsentryshort{##1}}}{##1}}%
+ \renewcommand*{\acronymsort}[2]{##1}%
+ \renewcommand*{\acronymfont}[1]{##1}%
+ \renewcommand*{\firstacronymfont}[1]{\acronymfont{##1}}%
+ \renewcommand*{\acrpluralsuffix}{\glspluralsuffix}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{long-short-desc}
+% \meta{long} (\marg{short}) acronym style that has an
+% accompanying description (which the user needs to supply).
+%\changes{4.03}{2014-01-20}{redefined to use accessibility
+%information}
+% \begin{macrocode}
+\renewacronymstyle{long-short-desc}%
+{%
+ \GlsUseAcrEntryDispStyle{long-short}%
+}%
+{%
+ \GlsUseAcrStyleDefs{long-short}%
+ \renewcommand*{\GenericAcronymFields}{}%
+ \renewcommand*{\acronymsort}[2]{##2}%
+ \renewcommand*{\acronymentry}[1]{%
+ \glslongaccessdisplay{\glsentrylong{##1}}{##1}\space
+ (\glsshortaccessdisplay{\acronymfont{\glsentryshort{##1}}}{##1})}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{long-sc-short-desc}
+% \meta{long} (\cs{textsc}\marg{short}) acronym style that has an
+% accompanying description (which the user needs to supply).
+%\changes{4.03}{2014-01-20}{redefined to use accessibility
+%information}
+% \begin{macrocode}
+\renewacronymstyle{long-sc-short-desc}%
+{%
+ \GlsUseAcrEntryDispStyle{long-sc-short}%
+}%
+{%
+ \GlsUseAcrStyleDefs{long-sc-short}%
+ \renewcommand*{\GenericAcronymFields}{}%
+ \renewcommand*{\acronymsort}[2]{##2}%
+ \renewcommand*{\acronymentry}[1]{%
+ \glslongaccessdisplay{\glsentrylong{##1}}{##1}\space
+ (\glsshortaccessdisplay{\acronymfont{\glsentryshort{##1}}}{##1})}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{long-sm-short-desc}
+% \meta{long} (\cs{textsmaller}\marg{short}) acronym style that has an
+% accompanying description (which the user needs to supply).
+%\changes{4.03}{2014-01-20}{redefined to use accessibility
+%information}
+% \begin{macrocode}
+\renewacronymstyle{long-sm-short-desc}%
+{%
+ \GlsUseAcrEntryDispStyle{long-sm-short}%
+}%
+{%
+ \GlsUseAcrStyleDefs{long-sm-short}%
+ \renewcommand*{\GenericAcronymFields}{}%
+ \renewcommand*{\acronymsort}[2]{##2}%
+ \renewcommand*{\acronymentry}[1]{%
+ \glslongaccessdisplay{\glsentrylong{##1}}{##1}\space
+ (\glsshortaccessdisplay{\acronymfont{\glsentryshort{##1}}}{##1})}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{short-long-desc}
+% \meta{short} (\marg{long}) acronym style that has an
+% accompanying description (which the user needs to supply).
+%\changes{4.03}{2014-01-20}{redefined to use accessibility
+%information}
+% \begin{macrocode}
+\renewacronymstyle{short-long-desc}%
+{%
+ \GlsUseAcrEntryDispStyle{short-long}%
+}%
+{%
+ \GlsUseAcrStyleDefs{short-long}%
+ \renewcommand*{\GenericAcronymFields}{}%
+ \renewcommand*{\acronymsort}[2]{##2}%
+ \renewcommand*{\acronymentry}[1]{%
+ \glslongaccessdisplay{\glsentrylong{##1}}{##1}\space
+ (\glsshortaccessdisplay{\acronymfont{\glsentryshort{##1}}}{##1})}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{sc-short-long-desc}
+% \meta{long} (\cs{textsc}\marg{short}) acronym style that has an
+% accompanying description (which the user needs to supply).
+%\changes{4.03}{2014-01-20}{redefined to use accessibility
+%information}
+% \begin{macrocode}
+\renewacronymstyle{sc-short-long-desc}%
+{%
+ \GlsUseAcrEntryDispStyle{sc-short-long}%
+}%
+{%
+ \GlsUseAcrStyleDefs{sc-short-long}%
+ \renewcommand*{\GenericAcronymFields}{}%
+ \renewcommand*{\acronymsort}[2]{##2}%
+ \renewcommand*{\acronymentry}[1]{%
+ \glslongaccessdisplay{\glsentrylong{##1}}{##1}\space
+ (\glsshortaccessdisplay{\acronymfont{\glsentryshort{##1}}}{##1})}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{sm-short-long-desc}
+% \meta{long} (\cs{textsmaller}\marg{short}) acronym style that has an
+% accompanying description (which the user needs to supply).
+%\changes{4.03}{2014-01-20}{redefined to use accessibility
+%information}
+% \begin{macrocode}
+\renewacronymstyle{sm-short-long-desc}%
+{%
+ \GlsUseAcrEntryDispStyle{sm-short-long}%
+}%
+{%
+ \GlsUseAcrStyleDefs{sm-short-long}%
+ \renewcommand*{\GenericAcronymFields}{}%
+ \renewcommand*{\acronymsort}[2]{##2}%
+ \renewcommand*{\acronymentry}[1]{%
+ \glslongaccessdisplay{\glsentrylong{##1}}{##1}\space
+ (\glsshortaccessdisplay{\acronymfont{\glsentryshort{##1}}}{##1})}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{dua}
+% \meta{long} only acronym style.
+%\changes{4.03}{2014-01-20}{redefined to use accessibility
+%information}
+% \begin{macrocode}
+\renewacronymstyle{dua}%
+{%
+% \end{macrocode}
+% Check for long form in case this is a mixed glossary.
+% \begin{macrocode}
+ \ifdefempty\glscustomtext
+ {%
+ \ifglshaslong{\glslabel}%
+ {%
+ \glsifplural
+ {%
+% \end{macrocode}
+% Plural form:
+% \begin{macrocode}
+ \glscapscase
+ {%
+% \end{macrocode}
+% Plural form, don't adjust case:
+% \begin{macrocode}
+ \glslongpluralaccessdisplay{\glsentrylongpl{\glslabel}}{\glslabel}%
+ \glsinsert
+ }%
+ {%
+% \end{macrocode}
+% Plural form, make first letter upper case:
+% \begin{macrocode}
+ \glslongpluralaccessdisplay{\Glsentrylongpl{\glslabel}}{\glslabel}%
+ \glsinsert
+ }%
+ {%
+% \end{macrocode}
+% Plural form, all caps:
+% \begin{macrocode}
+ \glslongpluralaccessdisplay
+ {\mfirstucMakeUppercase{\glsentrylongpl{\glslabel}}}{\glslabel}%
+ \mfirstucMakeUppercase{\glsinsert}%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Singular form
+% \begin{macrocode}
+ \glscapscase
+ {%
+% \end{macrocode}
+% Singular form, don't adjust case:
+% \begin{macrocode}
+ \glslongaccessdisplay{\glsentrylong{\glslabel}}{\glslabel}\glsinsert
+ }%
+ {%
+% \end{macrocode}
+% Subsequent singular form, make first letter upper case:
+% \begin{macrocode}
+ \glslongaccessdisplay{\Glsentrylong{\glslabel}}{\glslabel}\glsinsert
+ }%
+ {%
+% \end{macrocode}
+% Subsequent singular form, all caps:
+% \begin{macrocode}
+ \glslongaccessdisplay
+ {\mfirstucMakeUppercase
+ {\glsentrylong{\glslabel}\glsinsert}}{\glslabel}%
+ \mfirstucMakeUppercase{\glsinsert}%
+ }%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Not an acronym:
+% \begin{macrocode}
+ \glsgenentryfmt
+ }%
+ }%
+ {\glscustomtext\glsinsert}%
+}%
+{%
+ \renewcommand*{\GenericAcronymFields}{description={\the\glslongtok}}%
+ \renewcommand*{\acrfullfmt}[3]{%
+ \glslink[##1]{##2}{%
+ \glslongaccessdisplay{\glsentrylong{##2}}{##2}##3\space
+ (\glsshortaccessdisplay{\acronymfont{\glsentryshort{##2}}}{##2})}}%
+ \renewcommand*{\Acrfullfmt}[3]{%
+ \glslink[##1]{##2}{%
+ \glslongaccessdisplay{\Glsentrylong{##2}}{##2}##3\space
+ (\glsshortaccessdisplay{\acronymfont{\glsentryshort{##2}}}{##2})}}%
+ \renewcommand*{\ACRfullfmt}[3]{%
+ \glslink[##1]{##2}{%
+ \glslongaccessdisplay
+ {\mfirstucMakeUppercase{\glsentrylong{##2}}{##2}##3\space
+ (\glsshortaccessdisplay{\acronymfont{\glsentryshort{##2}}}{##2})}}}%
+ \renewcommand*{\acrfullplfmt}[3]{%
+ \glslink[##1]{##2}{%
+ \glslongpluralaccessdisplay
+ {\glsentrylongpl{##2}}{##2}##3\space
+ (\glsshortpluralaccessdisplay
+ {\acronymfont{\glsentryshortpl{##2}}}{##2})}}%
+ \renewcommand*{\Acrfullplfmt}[3]{%
+ \glslink[##1]{##2}{%
+ \glslongpluralaccessdisplay
+ {\Glsentrylongpl{##2}}{##2}##3\space
+ (\glsshortpluralaccessdisplay
+ {\acronymfont{\glsentryshortpl{##2}}}{##2})}}%
+ \renewcommand*{\ACRfullplfmt}[3]{%
+ \glslink[##1]{##2}{%
+ \glslongpluralaccessdisplay
+ {\mfirstucMakeUppercase{\glsentrylongpl{##2}}{##2}##3\space
+ (\glsshortpluralaccessdisplay
+ {\acronymfont{\glsentryshortpl{##2}}}{##2})}}}%
+ \renewcommand*{\glsentryfull}[1]{%
+ \glslongaccessdisplay{\glsentrylong{##1}}\space
+ (\glsshortaccessdisplay{\acronymfont{\glsentryshort{##1}}}{##1})%
+ }%
+ \renewcommand*{\Glsentryfull}[1]{%
+ \glslongaccessdisplay{\Glsentrylong{##1}}{##1}\space
+ (\glsshortaccessdisplay{\acronymfont{\glsentryshort{##1}}}{##1})%
+ }%
+ \renewcommand*{\glsentryfullpl}[1]{%
+ \glslongpluralaccessdisplay{\glsentrylongpl{##1}}{##1}\space
+ (\glsshortpluralaccessdisplay{\acronymfont{\glsentryshortpl{##1}}}{##1})%
+ }%
+ \renewcommand*{\Glsentryfullpl}[1]{%
+ \glslongpluralaccessdisplay{\Glsentrylongpl{##1}}{##1}\space
+ (\glsshortpluralaccessdisplay{\acronymfont{\glsentryshortpl{##1}}}{##1})%
+ }%
+ \renewcommand*{\acronymentry}[1]{%
+ \glsshortaccessdisplay{\acronymfont{\glsentryshort{##1}}}{##1}}%
+ \renewcommand*{\acronymsort}[2]{##1}%
+ \renewcommand*{\acronymfont}[1]{##1}%
+ \renewcommand*{\acrpluralsuffix}{\glspluralsuffix}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{dua-desc}
+% \meta{long} only acronym style with user-supplied description.
+%\changes{4.03}{2014-01-20}{redefined to use accessibility
+%information}
+% \begin{macrocode}
+\renewacronymstyle{dua-desc}%
+{%
+ \GlsUseAcrEntryDispStyle{dua}%
+}%
+{%
+ \GlsUseAcrStyleDefs{dua}%
+ \renewcommand*{\GenericAcronymFields}{}%
+ \renewcommand*{\acronymentry}[1]{%
+ \glslongaccessdisplay{\acronymfont{\glsentrylong{##1}}}{##1}}%
+ \renewcommand*{\acronymsort}[2]{##2}%
+}%
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{footnote}
+% \meta{short}\cs{footnote}\marg{long} acronym style.
+%\changes{4.03}{2014-01-20}{redefined to use accessibility
+%information}
+% \begin{macrocode}
+\renewacronymstyle{footnote}%
+{%
+% \end{macrocode}
+% Check for long form in case this is a mixed glossary.
+% \begin{macrocode}
+ \ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}%
+}%
+{%
+ \renewcommand*{\GenericAcronymFields}{description={\the\glslongtok}}%
+% \end{macrocode}
+% Need to ensure hyperlinks are switched off on first use:
+% \begin{macrocode}
+ \glshyperfirstfalse
+ \renewcommand*{\genacrfullformat}[2]{%
+ \glsshortaccessdisplay
+ {\protect\firstacronymfont{\glsentryshort{##1}}}{##1}##2%
+ \protect\footnote{\glslongaccessdisplay{\glsentrylong{##1}}{##1}}%
+ }%
+ \renewcommand*{\Genacrfullformat}[2]{%
+ \glsshortaccessdisplay
+ {\firstacronymfont{\Glsentryshort{##1}}}{##1}##2%
+ \protect\footnote{\glslongaccessdisplay{\glsentrylong{##1}}{##1}}%
+ }%
+ \renewcommand*{\genplacrfullformat}[2]{%
+ \glsshortpluralaccessdisplay
+ {\protect\firstacronymfont{\glsentryshortpl{##1}}}{##1}##2%
+ \protect\footnote{\glslongpluralaccessdisplay{\glsentrylongpl{##1}}{##1}}%
+ }%
+ \renewcommand*{\Genplacrfullformat}[2]{%
+ \glsshortpluralaccessdisplay
+ {\protect\firstacronymfont{\Glsentryshortpl{##1}}}{##1}##2%
+ \protect\footnote{\glslongpluralaccessdisplay{\glsentrylongpl{##1}}{##1}}%
+ }%
+ \renewcommand*{\acronymentry}[1]{%
+ \glsshortaccessdisplay{\acronymfont{\glsentryshort{##1}}}{##1}}%
+ \renewcommand*{\acronymsort}[2]{##1}%
+ \renewcommand*{\acronymfont}[1]{##1}%
+ \renewcommand*{\acrpluralsuffix}{\glspluralsuffix}%
+% \end{macrocode}
+% Don't use footnotes for \ics{acrfull}:
+% \begin{macrocode}
+ \renewcommand*{\acrfullfmt}[3]{%
+ \glslink[##1]{##2}{%
+ \glsshortaccessdisplay{\acronymfont{\glsentryshort{##2}}}{##2}##3\space
+ (\glslongaccessdisplay{\glsentrylong{##2}}{##2})}}%
+ \renewcommand*{\Acrfullfmt}[3]{%
+ \glslink[##1]{##2}{%
+ \glsshortaccessdisplay{\acronymfont{\Glsentryshort{##2}}}{##2}##3\space
+ (\glslongaccessdisplay{\glsentrylong{##2}}{##2})}}%
+ \renewcommand*{\ACRfullfmt}[3]{%
+ \glslink[##1]{##2}{%
+ \glsshortaccessdisplay
+ {\mfirstucMakeUppercase
+ {\acronymfont{\glsentryshort{##2}}}{##2}##3\space
+ (\glslongaccessdisplay{\glsentrylong{##2}}{##2})}}}%
+ \renewcommand*{\acrfullplfmt}[3]{%
+ \glslink[##1]{##2}{%
+ \glsshortpluralaccessdisplay
+ {\acronymfont{\glsentryshortpl{##2}}}{##2}##3\space
+ (\glslongpluralaccessdisplay{\glsentrylongpl{##2}}{##2})}}%
+ \renewcommand*{\Acrfullplfmt}[3]{%
+ \glslink[##1]{##2}{%
+ \glsshortpluralaccessdisplay
+ {\acronymfont{\Glsentryshortpl{##2}}}{##2}##3\space
+ (\glslongpluralaccessdisplay{\glsentrylongpl{##2}})}}%
+ \renewcommand*{\ACRfullplfmt}[3]{%
+ \glslink[##1]{##2}{%
+ \glsshortpluralaccessdisplay
+ {\mfirstucMakeUppercase
+ {\acronymfont{\glsentryshortpl{##2}}}{##2}##3\space
+ (\glslongpluralaccessdisplay{\glsentrylongpl{##2}}{##2})}}}%
+% \end{macrocode}
+% Similarly for \ics{glsentryfull} etc:
+% \begin{macrocode}
+ \renewcommand*{\glsentryfull}[1]{%
+ \glsshortaccessdisplay{\acronymfont{\glsentryshort{##1}}}{##1}\space
+ (\glslongaccessdisplay{\glsentrylong{##1}}{##1})}%
+ \renewcommand*{\Glsentryfull}[1]{%
+ \glsshortaccessdisplay{\acronymfont{\Glsentryshort{##1}}}{##1}\space
+ (\glslongaccessdisplay{\glsentrylong{##1}}{##1})}%
+ \renewcommand*{\glsentryfullpl}[1]{%
+ \glsshortpluralaccessdisplay
+ {\acronymfont{\glsentryshortpl{##1}}}{##1}\space
+ (\glslongpluralaccessdisplay{\glsentrylongpl{##1}}{##1})}%
+ \renewcommand*{\Glsentryfullpl}[1]{%
+ \glsshortpluralaccessdisplay
+ {\acronymfont{\Glsentryshortpl{##1}}}{##1}\space
+ (\glslongpluralaccessdisplay{\glsentrylongpl{##1}}{##1})}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{footnote-sc}
+% \cs{textsc}\marg{short}\cs{footnote}\marg{long} acronym style.
+%\changes{4.03}{2014-01-20}{redefined to use accessibility
+%information}
+% \begin{macrocode}
+\renewacronymstyle{footnote-sc}%
+{%
+ \GlsUseAcrEntryDispStyle{footnote}%
+}%
+{%
+ \GlsUseAcrStyleDefs{footnote}%
+ \renewcommand{\acronymentry}[1]{%
+ \glsshortaccessdisplay{\acronymfont{\glsentryshort{##1}}}{##1}}
+ \renewcommand{\acronymfont}[1]{\textsc{##1}}%
+ \renewcommand*{\acrpluralsuffix}{\glstextup{\glspluralsuffix}}%
+}%
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{footnote-sm}
+% \cs{textsmaller}\marg{short}\cs{footnote}\marg{long} acronym style.
+%\changes{4.03}{2014-01-20}{redefined to use accessibility
+%information}
+% \begin{macrocode}
+\renewacronymstyle{footnote-sm}%
+{%
+ \GlsUseAcrEntryDispStyle{footnote}%
+}%
+{%
+ \GlsUseAcrStyleDefs{footnote}%
+ \renewcommand{\acronymentry}[1]{%
+ \glsshortaccessdisplay{\acronymfont{\glsentryshort{##1}}}{##1}}
+ \renewcommand{\acronymfont}[1]{\textsmaller{##1}}%
+ \renewcommand*{\acrpluralsuffix}{\glspluralsuffix}%
+}%
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{footnote-desc}
+% \meta{short}\cs{footnote}\marg{long} acronym style that has an
+% accompanying description (which the user needs to supply).
+%\changes{4.03}{2014-01-20}{redefined to use accessibility
+%information}
+% \begin{macrocode}
+\renewacronymstyle{footnote-desc}%
+{%
+ \GlsUseAcrEntryDispStyle{footnote}%
+}%
+{%
+ \GlsUseAcrStyleDefs{footnote}%
+ \renewcommand*{\GenericAcronymFields}{}%
+ \renewcommand*{\acronymsort}[2]{##2}%
+ \renewcommand*{\acronymentry}[1]{%
+ \glslongaccessdisplay{\glsentrylong{##1}}{##1}\space
+ (\glsshortaccessdisplay{\acronymfont{\glsentryshort{##1}}}{##1})}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{footnote-sc-desc}
+% \cs{textsc}\marg{short}\cs{footnote}\marg{long} acronym style that has an
+% accompanying description (which the user needs to supply).
+%\changes{4.03}{2014-01-20}{redefined to use accessibility
+%information}
+% \begin{macrocode}
+\renewacronymstyle{footnote-sc-desc}%
+{%
+ \GlsUseAcrEntryDispStyle{footnote-sc}%
+}%
+{%
+ \GlsUseAcrStyleDefs{footnote-sc}%
+ \renewcommand*{\GenericAcronymFields}{}%
+ \renewcommand*{\acronymsort}[2]{##2}%
+ \renewcommand*{\acronymentry}[1]{%
+ \glslongaccessdisplay{\glsentrylong{##1}}{##1}\space
+ (\glsshortaccessdisplay{\acronymfont{\glsentryshort{##1}}}{##1})}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+%\begin{acrstyle}{footnote-sm-desc}
+% \cs{textsmaller}\marg{short}\cs{footnote}\marg{long} acronym style that has an
+% accompanying description (which the user needs to supply).
+%\changes{4.03}{2014-01-20}{redefined to use accessibility
+%information}
+% \begin{macrocode}
+\renewacronymstyle{footnote-sm-desc}%
+{%
+ \GlsUseAcrEntryDispStyle{footnote-sm}%
+}%
+{%
+ \GlsUseAcrStyleDefs{footnote-sm}%
+ \renewcommand*{\GenericAcronymFields}{}%
+ \renewcommand*{\acronymsort}[2]{##2}%
+ \renewcommand*{\acronymentry}[1]{%
+ \glslongaccessdisplay{\glsentrylong{##1}}{##1}\space
+ (\glsshortaccessdisplay{\acronymfont{\glsentryshort{##1}}}{##1})}%
+}
+% \end{macrocode}
+%\end{acrstyle}
+%
+% Use \cs{newacronymhook} to modify the key list to set
+% the access text to the long version by default.
+% \begin{macrocode}
+\renewcommand*{\newacronymhook}{%
+ \edef\@gls@keylist{shortaccess=\the\glslongtok,%
+ \the\glskeylisttok}%
+ \expandafter\glskeylisttok\expandafter{\@gls@keylist}%
+}
+% \end{macrocode}
+%\begin{macro}{\DefaultNewAcronymDef}
+% Modify default style to use access text:
+% \begin{macrocode}
+\renewcommand*{\DefaultNewAcronymDef}{%
+ \edef\@do@newglossaryentry{%
+ \noexpand\newglossaryentry{\the\glslabeltok}%
+ {%
+ type=\acronymtype,%
+ name={\the\glsshorttok},%
+ description={\the\glslongtok},%
+ descriptionaccess=\relax,
+ text={\the\glsshorttok},%
+ access={\noexpand\@glo@textaccess},%
+ sort={\the\glsshorttok},%
+ short={\the\glsshorttok},%
+ shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},%
+ shortaccess={\the\glslongtok},%
+ long={\the\glslongtok},%
+ longplural={\the\glslongtok\noexpand\acrpluralsuffix},%
+ descriptionplural={\the\glslongtok\noexpand\acrpluralsuffix},%
+ first={\noexpand\glslongaccessdisplay
+ {\the\glslongtok}{\the\glslabeltok}\space
+ (\noexpand\glsshortaccessdisplay
+ {\the\glsshorttok}{\the\glslabeltok})},%
+ plural={\the\glsshorttok\acrpluralsuffix},%
+ firstplural={\noexpand\glslongpluralaccessdisplay
+ {\noexpand\@glo@longpl}{\the\glslabeltok}\space
+ (\noexpand\glsshortpluralaccessdisplay
+ {\noexpand\@glo@shortpl}{\the\glslabeltok})},%
+ firstaccess=\relax,
+ firstpluralaccess=\relax,
+ textaccess={\noexpand\@glo@shortaccess},%
+ \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
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\DescriptionFootnoteNewAcronymDef}
+% \begin{macrocode}
+\renewcommand*{\DescriptionFootnoteNewAcronymDef}{%
+ \edef\@do@newglossaryentry{%
+ \noexpand\newglossaryentry{\the\glslabeltok}%
+ {%
+ type=\acronymtype,%
+ name={\noexpand\acronymfont{\the\glsshorttok}},%
+ sort={\the\glsshorttok},%
+ text={\the\glsshorttok},%
+ short={\the\glsshorttok},%
+ shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},%
+ shortaccess={\the\glslongtok},%
+ long={\the\glslongtok},%
+ longplural={\the\glslongtok\noexpand\acrpluralsuffix},%
+ access={\noexpand\@glo@textaccess},%
+ plural={\the\glsshorttok\noexpand\acrpluralsuffix},%
+ symbol={\the\glslongtok},%
+ symbolplural={\the\glslongtok\noexpand\acrpluralsuffix},%
+ firstpluralaccess=\relax,
+ textaccess={\noexpand\@glo@shortaccess},%
+ \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
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\DescriptionNewAcronymDef}
+% \begin{macrocode}
+\renewcommand*{\DescriptionNewAcronymDef}{%
+ \edef\@do@newglossaryentry{%
+ \noexpand\newglossaryentry{\the\glslabeltok}%
+ {%
+ type=\acronymtype,%
+ name={\noexpand
+ \acrnameformat{\the\glsshorttok}{\the\glslongtok}},%
+ access={\noexpand\@glo@textaccess},%
+ sort={\the\glsshorttok},%
+ short={\the\glsshorttok},%
+ shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},%
+ shortaccess={\the\glslongtok},%
+ long={\the\glslongtok},%
+ longplural={\the\glslongtok\noexpand\acrpluralsuffix},%
+ first={\the\glslongtok},%
+ firstaccess=\relax,
+ firstplural={\the\glslongtok\noexpand\acrpluralsuffix},%
+ text={\the\glsshorttok},%
+ textaccess={\the\glslongtok},%
+ plural={\the\glsshorttok\noexpand\acrpluralsuffix},%
+ symbol={\noexpand\@glo@text},%
+ symbolaccess={\noexpand\@glo@textaccess},%
+ symbolplural={\noexpand\@glo@plural},%
+ firstpluralaccess=\relax,
+ textaccess={\noexpand\@glo@shortaccess},%
+ \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
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\FootnoteNewAcronymDef}
+% \begin{macrocode}
+\renewcommand*{\FootnoteNewAcronymDef}{%
+ \edef\@do@newglossaryentry{%
+ \noexpand\newglossaryentry{\the\glslabeltok}%
+ {%
+ type=\acronymtype,%
+ name={\noexpand\acronymfont{\the\glsshorttok}},%
+ sort={\the\glsshorttok},%
+ text={\the\glsshorttok},%
+ textaccess={\the\glslongtok},%
+ access={\noexpand\@glo@textaccess},%
+ plural={\the\glsshorttok\noexpand\acrpluralsuffix},%
+ short={\the\glsshorttok},%
+ shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},%
+ long={\the\glslongtok},%
+ longplural={\the\glslongtok\noexpand\acrpluralsuffix},%
+ description={\the\glslongtok},%
+ descriptionplural={\the\glslongtok\noexpand\acrpluralsuffix},%
+ \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
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\SmallNewAcronymDef}
+% \begin{macrocode}
+\renewcommand*{\SmallNewAcronymDef}{%
+ \edef\@do@newglossaryentry{%
+ \noexpand\newglossaryentry{\the\glslabeltok}%
+ {%
+ type=\acronymtype,%
+ name={\noexpand\acronymfont{\the\glsshorttok}},%
+ access={\noexpand\@glo@symbolaccess},%
+ sort={\the\glsshorttok},%
+ short={\the\glsshorttok},%
+ shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},%
+ shortaccess={\the\glslongtok},%
+ long={\the\glslongtok},%
+ longplural={\the\glslongtok\noexpand\acrpluralsuffix},%
+ text={\noexpand\@glo@short},%
+ textaccess={\noexpand\@glo@shortaccess},%
+ plural={\noexpand\@glo@shortpl},%
+ first={\the\glslongtok},%
+ firstaccess=\relax,
+ firstplural={\the\glslongtok\noexpand\acrpluralsuffix},%
+ description={\noexpand\@glo@first},%
+ descriptionplural={\noexpand\@glo@firstplural},%
+ symbol={\the\glsshorttok},%
+ symbolaccess={\the\glslongtok},%
+ symbolplural={\the\glsshorttok\noexpand\acrpluralsuffix},%
+ \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
+}
+% \end{macrocode}
+%\end{macro}
+%
+% The following are kept for compatibility with versions before
+% 3.0:
+%\begin{macro}{\glsshortaccesskey}
+% \begin{macrocode}
+ \newcommand*{\glsshortaccesskey}{\glsshortkey access}%
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glsshortpluralaccesskey}
+% \begin{macrocode}
+ \newcommand*{\glsshortpluralaccesskey}{\glsshortpluralkey access}%
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glslongaccesskey}
+% \begin{macrocode}
+ \newcommand*{\glslongaccesskey}{\glslongkey access}%
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\glslongpluralaccesskey}
+% \begin{macrocode}
+ \newcommand*{\glslongpluralaccesskey}{\glslongpluralkey access}%
+% \end{macrocode}
+%\end{macro}
+%\section{Debugging Commands}
+%
+%\begin{macro}{\showglonameaccess}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+%\changes{4.38}{2018-05-10}{bug fix: corrected field (was showing text access field)}
+% \begin{macrocode}
+\newcommand*{\showglonameaccess}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@access\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\showglotextaccess}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglotextaccess}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@textaccess\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\showglopluralaccess}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglopluralaccess}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@pluralaccess\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\showglofirstaccess}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglofirstaccess}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@firstaccess\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\showglofirstpluralaccess}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglofirstpluralaccess}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@firstpluralaccess\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\showglosymbolaccess}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglosymbolaccess}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@symbolaccess\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\showglosymbolpluralaccess}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglosymbolpluralaccess}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@symbolpluralaccess\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\showglodescaccess}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglodescaccess}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@descaccess\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\showglodescpluralaccess}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglodescpluralaccess}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@descpluralaccess\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\showgloshortaccess}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showgloshortaccess}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@shortaccess\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\showgloshortpluralaccess}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showgloshortpluralaccess}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@shortpluralaccess\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\showglolongaccess}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglolongaccess}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@longaccess\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\showglolongpluralaccess}
+%\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}}
+% \begin{macrocode}
+\newcommand*{\showglolongpluralaccess}[1]{%
+ \expandafter\show\csname glo@\glsdetoklabel{#1}@longpluralaccess\endcsname
+}
+% \end{macrocode}
+%\end{macro}
+%\iffalse
+% \begin{macrocode}
+%</glossaries-accsupp.sty>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*glossaries-babel.sty>
+% \end{macrocode}
+%\fi
+%\chapter{Multi-Lingual Support}
+% Many thanks to everyone who contributed to the translations both
+% via email and on comp.text.tex.
+% Language support has now been split off into independent language
+% modules.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{glossaries-babel}[2019/01/06 v4.42 (NLCT)]
+% \end{macrocode}
+% Load \sty{tracklang} to obtain language settings.
+% \begin{macrocode}
+\RequirePackage{tracklang}
+\let\glsifusetranslator\@secondoftwo
+% \end{macrocode}
+% Check for tracked languages:
+% \begin{macrocode}
+ \AnyTrackedLanguages
+ {%
+ \ForEachTrackedDialect{\this@dialect}{%
+ \IfTrackedLanguageFileExists{\this@dialect}%
+ {glossaries-}% prefix
+ {.ldf}%
+ {%
+ \RequireGlossariesLang{\CurrentTrackedTag}%
+ }%
+ {%
+ \PackageWarningNoLine{glossaries}%
+ {No language module detected for `\this@dialect'.\MessageBreak
+ Language modules need to be installed separately.\MessageBreak
+ Please check on CTAN for a bundle called\MessageBreak
+ `glossaries-\CurrentTrackedLanguage' or similar}%
+ }%
+ }%
+ }%
+ {}%
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</glossaries-babel.sty>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*glossaries-polyglossia.sty>
+% \end{macrocode}
+%\fi
+%\section{Polyglossia Captions}
+% Language support has now been split off into independent language
+% modules.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{glossaries-polyglossia}[2019/01/06 v4.42 (NLCT)]
+% \end{macrocode}
+% Load \sty{tracklang} to obtain language settings.
+% \begin{macrocode}
+\RequirePackage{tracklang}
+\let\glsifusetranslator\@secondoftwo
+% \end{macrocode}
+% Check for tracked languages:
+% \begin{macrocode}
+ \AnyTrackedLanguages
+ {%
+ \ForEachTrackedDialect{\this@dialect}{%
+ \IfTrackedLanguageFileExists{\this@dialect}%
+ {glossaries-}% prefix
+ {.ldf}%
+ {%
+ \RequireGlossariesLang{\CurrentTrackedTag}%
+ }%
+ {%
+ \PackageWarningNoLine{glossaries}%
+ {No language module detected for `\this@dialect'.\MessageBreak
+ Language modules need to be installed separately.\MessageBreak
+ Please check on CTAN for a bundle called\MessageBreak
+ `glossaries-\CurrentTrackedLanguage' or similar}%
+ }%
+ }%
+ }%
+ {}%
+% \end{macrocode}
+%\iffalse
+% \begin{macrocode}
+%</glossaries-polyglossia.sty>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*minimalgls.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain.
+ %
+ % This is a minimal file for testing and debugging
+ % the glossaries package. Change the class file as
+ % desired, and add the relevant package options to
+ % both the class file and the glossaries package.
+ % Change the sample glossary entry and acronym if
+ % required. If the problem occurs with an additional
+ % glossary, add in the relevant \newglossary command
+ % and a sample entry.
+ %
+ % Only add extra packages or commands if they
+ % contribute to whatever problem you are trying to
+ % test.
+ %
+ % Remember that the document will not be complete
+ % until you have successfully completed all of the
+ % following steps:
+ % 1. latex minimalgls
+ % 2. makeglossaries minimalgls (note no extension)
+ % 3. latex minimalgls
+ % A further run through LaTeX will be required to ensure that
+ % the table of contents is up to date if the toc option
+ % is used.
+ % Alternatively, if you use arara, you can add the following
+ % directives in your document:
+ %
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+
+ % If you require multilingual support you must also install
+ % the appropriate glossaries language module. The language
+ % modules are distributed separately.
+
+\documentclass{article}
+\listfiles
+
+\usepackage[colorlinks]{hyperref}
+ %\usepackage{glossaries} % abbreviation will go in main glossary
+ \usepackage[acronym]{glossaries} % make a separate list of acronyms
+
+\makeglossaries
+
+\longnewglossaryentry{par}{name={par}}%
+{%
+ A long description with a paragraph break.
+
+ This is the next paragraph.
+}
+
+\newglossaryentry{sample}{name={sample},
+description={a sample entry}}
+
+ % set the acronym style:
+\setacronymstyle{long-short}
+
+ % This contrived acronym has non-standard plural forms.
+ % These are specified in the optional argument.
+ % Remove the optional argument to revert to the default
+ % plurals.
+\newacronym[\glsshortpluralkey=cas,\glslongpluralkey=contrived
+acronyms]{aca}{aca}{a contrived acronym}
+
+ % Keep all definitions in the preamble!
+
+\begin{document}
+
+A \gls{sample} entry and \gls{aca}. Second use: \gls{aca}.
+
+Plurals: \glspl{sample}. Reset acronym\glsreset{aca}.
+First use: \glspl{aca}. Second use: \glspl{aca}.
+
+\glsresetall
+First letter upper case: \Gls{sample}. First use: \Gls{aca}.
+Subsequent use: \Gls{aca}.
+\glsresetall
+Plurals: \Glspl{sample}. First use: \Glspl{aca}. Next: \Glspl{aca}.
+
+If you want paragraph breaks in the description use
+\verb|\longnewglossaryentry|, as with entry \gls{par}.
+
+Title case a particular field:
+\glslink{sample}{\glsentrytitlecase{sample}{desc}}.
+
+\printglossaries
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</minimalgls.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*glossary-lipsum-examples.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % arara: pdflatex
+ % arara: makeglossaries
+ % arara: pdflatex
+ % arara: bibtex
+ % arara: pdflatex
+ % arara: pdflatex
+\documentclass{report}
+
+\usepackage{graphicx}
+
+\usepackage[colorlinks]{hyperref}
+\usepackage[savewrites,nopostdot,toc,acronym,symbols]{glossaries}
+\usepackage{glossary-mcols}
+\usepackage{glossary-longragged}
+
+\newglossary*{symbolname}{Entries with Symbols in the Name}
+\newglossary*{long}{Long Descriptions}
+\newglossary*{multipar}{Multi-Paragraph Descriptions}
+\newglossary*{acronymdesc}{Acronyms with Descriptions}
+\newglossary*{images}{Descriptions with Images}
+\newglossary*{acronymslang}{Acronyms with Translations}
+
+\newglossary*{parent}{Hierarchical Entries}
+\newglossary*{homographs}{Homographs}
+\newglossary*{cites}{Entries with Citations}
+\newglossary*{urls}{Entries with URLs}
+
+\DeclareAcronymList{acronymdesc,acronymslang}
+
+\makeglossaries
+
+\loadglsentries{example-glossaries-brief}
+\loadglsentries[long]{example-glossaries-long}
+\loadglsentries[multipar]{example-glossaries-multipar}
+\loadglsentries[symbols]{example-glossaries-symbols}
+\loadglsentries[symbolname]{example-glossaries-symbolnames}
+\loadglsentries[images]{example-glossaries-images}
+\loadglsentries[parent]{example-glossaries-parent}
+\loadglsentries[homographs]{example-glossaries-childnoname}
+\loadglsentries[cites]{example-glossaries-cite}
+\loadglsentries[urls]{example-glossaries-url}
+
+\setacronymstyle{long-short}
+
+\loadglsentries[acronym]{example-glossaries-acronym}
+
+\setacronymstyle{long-short-desc}
+
+\loadglsentries[acronymdesc]{example-glossaries-acronym-desc}
+
+ % define an acronym style for the acronyms with a translation:
+
+\newacronymstyle{acronymslang}%
+{%
+ \GlsUseAcrEntryDispStyle{long-short}%
+}
+{%
+ \GlsUseAcrStyleDefs{short-long}%
+ \renewcommand*{\genacrfullformat}[2]{%
+ \glsentrylong{##1}##2\space
+ (\protect\firstacronymfont{\glsentryshort{##1}}%
+ \ifglshasfield{useri}{##1}%
+ {, English: \glsentryuseri{##1}}{})%
+ }%
+ \renewcommand*{\Genacrfullformat}[2]{%
+ \Glsentrylong{##1}##2\space
+ (\protect\firstacronymfont{\glsentryshort{##1}}%
+ \ifglshasfield{useri}{##1}%
+ {, English: \glsentryuseri{##1}}{})%
+ }%
+ \renewcommand*{\genplacrfullformat}[2]{%
+ \glsentrylongpl{##1}##2\space
+ (\protect\firstacronymfont{\glsentryshortpl{##1}}%
+ \ifglshasfield{useri}{##1}%
+ {, English: \glsentryuseri{##1}}{})%
+ }%
+ \renewcommand*{\Genplacrfullformat}[2]{%
+ \Glsentrylongpl{##1}##2\space
+ (\protect\firstacronymfont{\glsentryshortpl{##1}}%
+ \ifglshasfield{useri}{##1}%
+ {, English: \glsentryuseri{##1}}{})%
+ }%
+}
+
+\setacronymstyle{acronymslang}
+
+\loadglsentries[acronymslang]{example-glossaries-acronyms-lang}
+
+ % Define a style for the "images" glossary. The image names are
+ % stored in the user1 key.
+ % (The image insertion can probably be done more neatly using an
+ % appropriate package, but this is just a sample file.)
+
+\newsavebox\glsimagebox
+\newlength\glswidth
+
+\newglossarystyle{images}%
+{%
+ \setglossarystyle{tree}%
+ \renewenvironment{theglossary}{}{}%
+ \renewcommand{\glossentry}[2]{%
+ \ifglshasfield{useri}{##1}%
+ {\savebox
+ {\glsimagebox}%
+ {\includegraphics[height=4\baselineskip]{\glsentryuseri{##1}}}%
+ \settowidth{\glswidth}{\usebox\glsimagebox}%
+ \glswidth=\dimexpr\linewidth-\glswidth-1em\relax
+ \parshape=5
+ 0pt \glswidth
+ 0pt \glswidth
+ 0pt \glswidth
+ 0pt \glswidth
+ 0pt \linewidth\relax
+ }%
+ {%
+ \savebox{\glsimagebox}{}%
+ }%
+ \noindent
+ \makebox[0pt][l]{%
+ \smash{\makebox[\linewidth][r]{\raisebox{-3\baselineskip}{\usebox\glsimagebox}}}}%
+ \glsentryitem{##1}\textbf{\glstarget{##1}{\glossentryname{##1}}}%
+ \space\glossentrydesc{##1}\par
+ \indexspace
+ }%
+ \renewcommand*{\glsgroupskip}{}%
+}
+
+ % glossary style for acronyms with a translation
+
+\newglossarystyle{acronymslang}
+{%
+ \setglossarystyle{long}%
+ \renewcommand*{\glsgroupskip}{}%
+ \renewcommand{\glossentry}[2]{%
+ \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} &
+ \glossentrydesc{##1}\glspostdescription
+ \ifglshasfield{useri}{##1}{ (English: \glsentryuseri{##1})}{}%
+ \space ##2\tabularnewline
+ }%
+}
+
+ % glossary style for the cites glossary
+
+\newglossarystyle{cites}
+{% based on list style
+ \setglossarystyle{list}%
+ \renewcommand*{\glossentry}[2]{%
+ \item[\glsentryitem{##1}%
+ \glstarget{##1}{\glossentryname{##1}}]
+ \glossentrydesc{##1}\glspostdescription
+ \ifglshasfield{useri}{##1}{\space
+ % in the event of multiple cites (as in the vestibulum2
+ % sample entry), \glsentryuseri{##1} needs to be expanded
+ % before being passed to \cite.
+ \glsletentryfield{\thiscite}{##1}{useri}%
+ (See \expandafter\cite\expandafter{\thiscite})}{}%
+ \space ##2}%
+}
+
+ % glossary style for the urls glossary
+
+\newglossarystyle{urls}
+{% based on list style
+ \setglossarystyle{list}%
+ \renewcommand{\glossentry}[2]{%
+ \item[\glsentryitem{##1}%
+ \glstarget{##1}{\glossentryname{##1}}]
+ \glossentrydesc{##1}\glspostdescription\space##2%
+ \ifglshasfield{useri}{##1}{\glspar
+ \glsletentryfield{\thisurl}{##1}{useri}%
+ \expandafter\url\expandafter{\thisurl}}{}}%
+}
+
+\begin{document}
+\tableofcontents
+
+\chapter{Sample}
+
+This is a sample document that uses the dummy glossary entries
+supplied with the glossaries bundle for testing.
+
+Here are all the entries (including acronyms):
+
+\forallglossaries{\thistype}{\section{Glossary `\thistype'}
+\forglsentries[\thistype]{\thislabel}{\gls{\thislabel}. }}
+
+\section{Acronyms Revisited}
+
+Here are just the acronyms again:
+\forallacronyms{\thistype}{\forglsentries[\thistype]{\thislabel}{\gls{\thislabel}. }}
+
+\printglossary[style=mcolindex,title={Brief Descriptions}]
+
+\printglossary[type=long,style=list]
+
+\printglossary[type=multipar,style=altlist]
+
+\printglossary[type=symbols,style=altlongragged4col,nogroupskip]
+
+\printglossary[type=symbolname,style=list,nogroupskip]
+
+\printglossary[type=acronym,style=long]
+
+\printglossary[type=acronymdesc,style=altlist]
+
+\printglossary[type=images,style=images]
+
+\printglossary[type=acronymslang,style=acronymslang]
+
+\printglossary[type=homographs,style=mcoltreenoname,subentrycounter]
+
+\printglossary[type=parent,style=tree]
+
+\printglossary[type=cites,style=cites,nopostdot=false,nogroupskip]
+
+\printglossary[type=urls,style=urls,nopostdot=false,nogroupskip]
+
+\bibliographystyle{plain}
+\bibliography{xampl}
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</glossary-lipsum-examples.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*example-glossaries-acronym-desc.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is part of the glossaries bundle
+ % These are test acronym entries with descriptions.
+
+\newacronym[type=\glsdefaulttype,description={fringilla a, euismod sodales,
+ sollicitudin vel, wisi}]{ndl}{NDL}{nam dui ligula}
+
+\newacronym[type=\glsdefaulttype,description={non justo}]{mal}{MAL}{morbi auctor lorem}
+
+\newacronym[type=\glsdefaulttype,description={pretium at, lobortis vitae, ultricies et,
+tellus}]{nll}{NLL}{name lacus libero}
+
+\newacronym[type=\glsdefaulttype,description={tortor sed accumsan bibendum, erat ligula
+aliquet magna, vitae ornare odio metus a mi}]{da}{DA}{donec aliquet}
+
+\newacronym[type=\glsdefaulttype,description={et nisl hendrerit mollis}]{mao}{MAO}{morbi ac orci}
+
+\newacronym[type=\glsdefaulttype,description={cras nec ante}]{sum}{SUM}{suspendisse ut massa}
+
+\newacronym[type=\glsdefaulttype,description={cum sociis natoque penatibus et magnis dis
+parturient montes, nascetur ridiculus mus}]{pan}{PAN}{pellentesque a nulla}
+
+\newacronym[type=\glsdefaulttype,description={nulla ullamcorper vestibulum
+turpis}]{atu}{ATU}{aliquam tincidunt urna}
+
+\newacronym[type=\glsdefaulttype,description={nulla malesuada porttitor diam}]%
+ {pclm}{PCLM}{pellentesque cursus luctus mauris}
+
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</example-glossaries-acronym-desc.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*example-glossaries-acronym.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is part of the glossaries bundle
+ % These are test acronym entries
+
+\newacronym[type=\glsdefaulttype]{lid}{LID}{lorem ipsum dolor}
+
+\newacronym[type=\glsdefaulttype]{stc}{STC}{sit amet consectetuer}
+
+\newacronym[type=\glsdefaulttype]{aeu}{AEU}{adipiscing elit ut}
+
+\newacronym[type=\glsdefaulttype]{pev}{PEV}{purus elit vestibulum}
+
+\newacronym[type=\glsdefaulttype]{upa}{UPA}{ut placerat ac}
+
+\newacronym[type=\glsdefaulttype]{avf}{AVF}{adipiscing vitae felis}
+
+\newacronym[type=\glsdefaulttype]{cdg}{CDG}{curabitur dictum gravida}
+
+\newacronym[type=\glsdefaulttype]{mna}{MNA}{mauris nam arcu}
+
+\newacronym[type=\glsdefaulttype]{lne}{LNE}{libero nonummy eget}
+
+\newacronym[type=\glsdefaulttype]{civ}{CIV}{consectetuer id vulputate}
+
+\newacronym[type=\glsdefaulttype]{amd}{AMD}{a magna donec}
+
+\newacronym[type=\glsdefaulttype]{vae}{VAE}{vehicula augue eu}
+
+\newacronym[type=\glsdefaulttype]{nph}{NPH}{neque pellentesque habitant}
+
+\newacronym[type=\glsdefaulttype]{mts}{MTS}{morbi tristique senectus}
+
+\newacronym[type=\glsdefaulttype]{ene}{ENE}{et netus et}
+
+\newacronym[type=\glsdefaulttype]{mfa}{MFA}{malesuada fames ac}
+
+\newacronym[type=\glsdefaulttype]{tem}{TEM}{turpis egestas mauris}
+
+\newacronym[type=\glsdefaulttype]{ulc}{ULC}{ut leo cras}
+
+\newacronym[type=\glsdefaulttype]{vmr}{VMR}{viverra metus rhoncus}
+
+\newacronym[type=\glsdefaulttype]{sne}{SNE}{sem nulla et}
+
+\newacronym[type=\glsdefaulttype]{lvu}{LVU}{lectus vestibulum urna}
+
+\newacronym[type=\glsdefaulttype]{fup}{FUP}{fringilla ultrices phasellus}
+
+\newacronym[type=\glsdefaulttype]{ets}{ETS}{eu tellus sit}
+
+\newacronym[type=\glsdefaulttype]{atg}{ATG}{amet tortor gravida}
+
+\newacronym[type=\glsdefaulttype]{pis}{PIS}{placerat integer sapien}
+
+\newacronym[type=\glsdefaulttype]{eii}{EII}{est iaculis in}
+
+\newacronym[type=\glsdefaulttype]{pqv}{PQV}{pretium quis viverra}
+
+\newacronym[type=\glsdefaulttype]{anp}{ANP}{ac nunc praesent}
+
+\newacronym[type=\glsdefaulttype]{esv}{ESV}{eget sem vel}
+
+\newacronym[type=\glsdefaulttype]{lub}{LUB}{leo ultrices bibendum}
+
+\newacronym[type=\glsdefaulttype]{afm}{AFM}{aenean faucibus morbi}
+
+\newacronym[type=\glsdefaulttype]{dnm}{DNM}{dolor nulla malesuada}
+
+\newacronym[type=\glsdefaulttype]{epa}{EPA}{eu pulvinar at}
+
+\newacronym[type=\glsdefaulttype]{man}{MAC}{mollis ac nulla}
+
+\newacronym[type=\glsdefaulttype]{cas}{CAS}{curabitur auctor semper}
+
+\newacronym[type=\glsdefaulttype]{ndv}{NDV}{nulla donec varius}
+
+\newacronym[type=\glsdefaulttype]{oer}{OER}{orci eget risus}
+
+\newacronym[type=\glsdefaulttype]{dnmc}{DNMC}{duis nibh mi congue}
+
+\newacronym[type=\glsdefaulttype]{cea}{CEA}{congue eu accumsan}
+
+\newacronym[type=\glsdefaulttype]{esq}{ESQ}{eleifend sagittis quis}
+
+\newacronym[type=\glsdefaulttype]{dia}{DIA}{duis eget orci}
+
+\newacronym[type=\glsdefaulttype]{sao}{SAO}{sit amet orci}
+
+\newacronym[type=\glsdefaulttype]{drn}{DRN}{dignissim rutrum nam}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</example-glossaries-acronym.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*example-glossaries-acronyms-lang.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is part of the glossaries bundle
+ % These are test acronym entries where some are provided with
+ % "translations", which are stored in the user1 key.
+
+\newacronym[type=\glsdefaulttype,user1={love itself}]{li}{LI}{lorem ipsum}
+
+\newacronym[type=\glsdefaulttype,user1={produces none}]{np}{NP}{nulla pariatur}
+
+\newacronym[type=\glsdefaulttype,user1={blame belongs}]{sic}{SIC}{sunt in culpa}
+
+\newacronym[type=\glsdefaulttype,user1={blinded by
+desire}]{esoc}{ESOC}{excepturi sint obcaecati cupiditat}
+
+\newacronym[type=\glsdefaulttype]{nmruu}{NMRUU}{nulla malesuada
+risus ut urna}
+
+\newacronym[type=\glsdefaulttype]{di}{DI}{duis iaculi}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</example-glossaries-acronyms-lang.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*example-glossaries-brief.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is part of the glossaries bundle
+ % These are test glossary entries with brief descriptions.
+
+\newglossaryentry{lorem}{name={lorem},description={ipsum}}
+
+\newglossaryentry{dolor}{name={dolor},description={sit}}
+
+\newglossaryentry{amet}{name={amet},description={consectetuer}}
+
+\newglossaryentry{adipiscing}{name={adipiscing},description={elit}}
+
+\newglossaryentry{ut}{name={ut},description={purus}}
+
+\newglossaryentry{elit}{name={elit},description={vestibulum}}
+
+\newglossaryentry{placerat}{name={placerat},description={ac}}
+
+\newglossaryentry{vitae}{name={vitae},description={felis}}
+
+\newglossaryentry{curabitur}{name={curabitur},description={gravida}}
+
+\newglossaryentry{mauris}{name={mauris},description={nam}}
+
+\newglossaryentry{arcu}{name={arcu},description={libero}}
+
+\newglossaryentry{nonummy}{name={nonummy},description={eget}}
+
+\newglossaryentry{consectetuer}{name={consectetuer},description={id}}
+
+\newglossaryentry{vulputate}{name={vulputate},description={a magna}}
+
+\newglossaryentry{donec}{name={donec},description={vehicula}}
+
+\newglossaryentry{augue}{name={augue},description={eu neque}}
+
+\newglossaryentry{pellentesque}{name={pellentesque},description={habitant}}
+
+\newglossaryentry{morbi}{name={morbi},description={tristique}}
+
+\newglossaryentry{senectus}{name={senectus},description={et netus}}
+
+\newglossaryentry{et}{name={et},description={malesuada}}
+
+\newglossaryentry{fames}{name={fames},description={ac}}
+
+\newglossaryentry{turpis}{name={turpis},description={egestas}}
+
+\newglossaryentry{leo}{name={leo},description={cras}}
+
+\newglossaryentry{viverra}{name={viverra},description={metus}}
+
+\newglossaryentry{rhoncus}{name={rhoncus},description={sem}}
+
+\newglossaryentry{nulla}{name={nulla},description={et}}
+
+\newglossaryentry{lectus}{name={lectus},description={vestibulum}}
+
+\newglossaryentry{urna}{name={urna},description={fringilla}}
+
+\newglossaryentry{ultrices}{name={ultrices},description={phasellus}}
+
+\newglossaryentry{eu}{name={eu},description={tellus}}
+
+\newglossaryentry{sit}{name={sit},description={amet}}
+
+\newglossaryentry{tortor}{name={tortor},description={gravida}}
+
+\newglossaryentry{integer}{name={integer},description={sapien}}
+
+\newglossaryentry{est}{name={est},description={iaculis}}
+
+\newglossaryentry{in}{name={in},description={pretium}}
+
+\newglossaryentry{quis}{name={quis},description={viverra}}
+
+\newglossaryentry{ac}{name={ac},description={nunc}}
+
+\newglossaryentry{praesent}{name={praesent},description={eget}}
+
+\newglossaryentry{sem}{name={sem},description={vel leo}}
+
+\newglossaryentry{bibendum}{name={bibendum},description={ultrices}}
+
+\newglossaryentry{aenean}{name={aenean},description={faucibus}}
+
+\newglossaryentry{malesuada}{name={malesuada},description={eu}}
+
+\newglossaryentry{pulvinar}{name={pulvinar},description={at}}
+
+\newglossaryentry{mollis}{name={mollis},description={ac nulla}}
+
+\newglossaryentry{auctor}{name={auctor},description={semper}}
+
+\newglossaryentry{varius}{name={varius},description={orci}}
+
+\newglossaryentry{eget}{name={eget},description={risus}}
+
+\newglossaryentry{duis}{name={duis},description={nibh}}
+
+\newglossaryentry{mi}{name={mi},description={congue}}
+
+\newglossaryentry{accumsan}{name={accumsan},description={eleifend}}
+
+\newglossaryentry{sagittis}{name={sagittis},description={quis}}
+
+\newglossaryentry{diam}{name={diam},description={duis}}
+
+\newglossaryentry{orci}{name={orci},description={dignissim}}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</example-glossaries-brief.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*example-glossaries-childnoname.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is part of the glossaries bundle
+ % These are test glossary entries with child entries that don't have
+ % a name supplied. (The name is the same as the parent name.)
+
+\newglossaryentry{scelerisque}{name={scelerisque},description={at}}
+
+\newglossaryentry{vestibulum}{parent={scelerisque},description={eu, nulla}}
+
+\newglossaryentry{utodionisl}{parent={scelerisque},description={facilisis id}}
+
+\newglossaryentry{molliset}{parent={scelerisque},description={nec, enim}}
+
+\newglossaryentry{aeneansem}{parent={scelerisque},description={sem leo}}
+
+\newglossaryentry{pellentesquesit}{parent={scelerisque},description={sit amet}}
+
+\newglossaryentry{sapien}{parent={scelerisque},description={vehicula
+pellentesque}}
+
+\newglossaryentry{consequat}{parent={scelerisque},description={tellus
+et tortor}}
+
+\newglossaryentry{uttempor}{name={ut tempor},description={laoreet
+quam}}
+
+\newglossaryentry{nullamid}{parent={uttempor},description={wisi a
+libero}}
+
+\newglossaryentry{tristique}{parent={uttempor},description={semper}}
+
+\newglossaryentry{nullamnislmassa}{parent={uttempor},description={rutrum
+ut}}
+
+\newglossaryentry{eleifend}{name={eleifend},description={sit amet
+faucibus}}
+
+\newglossaryentry{elementum}{parent={eleifend},description={elementum}}
+
+\newglossaryentry{urnasapien}{parent={eleifend},description={urna sapien}}
+
+\newglossaryentry{consectetuermauris}{name={consectetuer},description={mauris}}
+
+\newglossaryentry{quisegestas}{parent={consectetuermauris},description={quis egestas}}
+
+\newglossaryentry{leojusto}{parent={consectetuermauris},description={leo
+justo}}
+
+\newglossaryentry{nonrisus}{name={non risus},description={morbi non
+felis}}
+
+\newglossaryentry{aclibero}{parent={nonrisus},description={ac libero}}
+
+\newglossaryentry{vulputatefringilla}{parent={nonrisus},description={vulputate
+fringilla}}
+
+\newglossaryentry{maurislibero}{name={mauris},description={libero eros}}
+
+\newglossaryentry{lacinia}{parent={maurislibero},description={lacinia
+non}}
+
+\newglossaryentry{sodales}{parent={maurislibero},description={sodales
+quis}}
+
+\newglossaryentry{dapibus}{parent={maurislibero},description={dapibus
+porttitor, pede}}
+
+\newglossaryentry{class}{name={class},description={aptent taciti}}
+
+\newglossaryentry{sociosqu}{parent={class},description={sociosqu}}
+
+\newglossaryentry{adlitora}{parent={class},description={ad litora}}
+
+\newglossaryentry{torquent}{parent={class},description={torquent per
+conubia}}
+
+\newglossaryentry{nostra}{name={nostra},description={per inceptos
+hymenaeos}}
+
+\newglossaryentry{morbidapibus}{parent={nostra},description={morbi
+dapibus}}
+
+\newglossaryentry{mauriscondimentum}{parent={nostra},description={mauris
+condimentum nulla}}
+
+\newglossaryentry{cumsociis}{name={cum sociis},description={natoque
+penatibus}}
+
+\newglossaryentry{etmagnis}{parent={cumsociis},description={et
+magnis}}
+
+\newglossaryentry{disparturient}{parent={cumsociis},description={dis
+parturient montes}}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</example-glossaries-childnoname.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*example-glossaries-cite.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is part of the glossaries bundle
+ % These are test glossary entries with citation labels stored in
+ % the user1 field. (The citations are defined in the xampl.bib file
+ % that should be available on modern TeX distributions.)
+
+\newglossaryentry{fusce}{name={fusce},
+description={suscipit cursus sem},user1={article-minimal}}
+
+\newglossaryentry{vivamus}{name={vivamus},
+description={risus mi, egestas ac},user1={article-full}}
+
+\newglossaryentry{imperdiet}{name={imperdiet},
+description={varius, faucibus quis, leo},user1={whole-journal}}
+
+\newglossaryentry{aenean2}{name={aenean},
+description={tincidunt},user1={inbook-minimal}}
+
+\newglossaryentry{crasid}{name={cras id},
+description={justo quis nibh scelerisque dignissim},
+user1={inbook-full}}
+
+\newglossaryentry{aliquam2}{name={aliquam},
+description={sagittis elementum dolor},
+user1={book-minimal}}
+
+\newglossaryentry{aeneanconsectetuer}{name={aenean consectetuer},
+description={justo in pede},
+user1={book-full}}
+
+\newglossaryentry{curabiturullamcorper}{name={curabitur ullamcorper},
+description={ligula nec orci},
+user1={booklet-minimal}}
+
+\newglossaryentry{aliquampurus}{name={aliquam purus},
+description={turpis, aliquam id},
+user1={booklet-full}}
+
+\newglossaryentry{ornarevitae}{name={ornare vitae},
+description={porttitor non, wisi},
+user1={incollection-minimal}}
+
+\newglossaryentry{maecenasluctus}{name={maecenas luctus},
+description={porta lorem},
+user1={incollection-full}}
+
+\newglossaryentry{donecvitae}{name={donec vitae},
+description={ligula eu ante pretium varius},
+user1={manual-minimal}}
+
+\newglossaryentry{proin}{name={proin},
+description={tortor metus, convallis et},
+user1={manual-full}}
+
+\newglossaryentry{hendrerit}{name={hendrerit},
+description={non, scelerisque in, urna},
+user1={mastersthesis-minimal}}
+
+\newglossaryentry{crasquis}{name={cras qui},
+description={libero eu ligula bibendum tempor},
+user1={mastersthesis-full}}
+
+\newglossaryentry{vivamustellus}{name={vivamus tellus},
+description={quam, malesuada eu, tempus sed, tempor sed, velit},
+user1={misc-minimal}}
+
+\newglossaryentry{doneclacinia}{name={donec lacinia},
+description={auctor libero},
+user1={misc-full}}
+
+\newglossaryentry{praesent2}{name={praesent},
+description={sed neque id pede mollis rutrum},
+user1={inproceedings-minimal}}
+
+ % Here's one with multiple cites:
+\newglossaryentry{vestibulum2}{name={vestibulum},
+description={iaculis risus},
+user1={inproceedings-minimal,phdthesis-minimal}}
+
+ % Here's one without a user1 key for comparison:
+\newglossaryentry{pellentesque2}{name={pellentesque},
+description={lacus}}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</example-glossaries-cite.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*example-glossaries-images.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is part of the glossaries bundle
+ % These are test glossary entries with multi-paragraph descriptions
+ % that have an associated image file (stored in user1).
+ % The referenced image files are provided by the mwe package.
+
+\longnewglossaryentry{sedfeugiat}{name={sed feugiat},user1={example-image}}%
+{%
+Cum sociis natoque penatibus et magnis dis parturient montes,
+nascetur ridiculus mus. Ut pellentesque augue sed urna. Vestibulum
+diam eros, fringilla et, consectetuer eu, nonummy id, sapien. Nullam
+at lectus. In sagittis ultrices mauris. Curabitur malesuada erat sit
+amet massa. Fusce blandit. Aliquam erat volutpat. Aliquam euismod.
+Aenean vel lectus. Nunc imperdiet justo nec dolor.
+
+Etiam euismod. Fusce facilisis lacinia dui. Suspendisse potenti. In
+mi erat, cursus id, nonummy sed, ullamcorper eget, sapien. Praesent
+pretium, magna in eleifend egestas, pede pede pretium lorem, quis
+consectetuer tortor sapien facilisis magna. Mauris quis magna
+varius nulla scelerisque imperdiet. Aliquam non quam. Aliquam
+porttitor quam a lacus. Praesent vel arcu ut tortor cursus volutpat.
+In vitae pede quis diam bibendum placerat. Fusce elementum convallis
+neque. Sed dolor orci, scelerisque ac, dapibus nec, ultricies ut,
+mi. Duis nec dui quis leo sagittis commodo.
+}
+
+\longnewglossaryentry{aliquamlectus}%
+{name={aliquam lectus},user1={example-image-a}}%
+{%
+Vivamus leo. Quisque ornare tellus ullamcorper nulla. Mauris
+porttitor pharetra tortor. Sed fringilla justo sed mauris. Mauris
+tellus. Sed non leo. Nullam elementum, magna in cursus sodales,
+augue est scelerisque sapien, venenatis congue nulla arcu et pede.
+Ut suscipit enim vel sapien. Donec congue. Maecenas urna mi,
+suscipit in, placerat ut, vestibulum ut, massa. Fusce ultrices nulla
+et nisl.
+
+Etiam ac leo a risus tristique nonummy. Donec dignissim tincidunt
+nulla. Vestibulum rhoncus molestie odio. Sed lobortis, justo et
+pretium lobortis, mauris turpis condimentum augue, nec ultricies
+nibh arcu pretium enim. Nunc purus neque, placerat id, imperdiet
+sed, pellentesque nec, nisl. Vestibulum imperdiet neque non sem
+accumsan laoreet. In hac habitasse platea dictumst. Etiam
+condimentum facilisis libero. Suspendisse in elit quis nisl aliquam
+dapibus. Pellentesque auctor sapien. Sed egestas sapien nec lectus.
+Pellentesque vel dui vel neque bibendum viverra. Aliquam porttitor
+nisl nec pede. Proin mattis libero vel turpis. Donec rutrum mauris
+et libero. Proin euismod porta felis. Nam lobortis, metus quis
+elementum commodo, nunc lectus elementum mauris, eget vulputate
+ligula tellus eu neque. Vivamus eu dolor.
+}
+
+\longnewglossaryentry{nullainipsum}%
+{name={nulla in ipsum},user1={example-image-b}}%
+{%
+ Praesent eros nulla, congue vitae, euismod ut, commodo a, wisi.
+Pellentesque habitant morbi tristique senectus et netus et malesuada
+fames ac turpis egestas. Aenean nonummy magna non leo. Sed felis
+erat, ullamcorper in, dictum non, ultricies ut, lectus. Proin vel
+arcu a odio lobortis euismod. Vestibulum ante ipsum primis in
+faucibus orci luctus et ultrices posuere cubilia Curae; Proin ut
+est. Aliquam odio. Pellentesque massa turpis, cursus eu, euismod
+nec, tempor congue, nulla. Duis viverra gravida mauris. Cras
+tincidunt. Curabitur eros ligula, varius ut, pulvinar in, cursus
+faucibus, augue.
+
+Nulla mattis luctus nulla. Duis commodo velit at leo. Aliquam
+vulputate magna et leo. Nam vestibulum ullamcorper leo. Vestibulum
+condimentum rutrum mauris. Donec id mauris. Morbi molestie justo et
+pede. Vivamus eget turpis sed nisl cursus tempor. Curabitur mollis
+sapien condimentum nunc. In wisi nisl, malesuada at, dignissim sit
+amet, lobortis in, odio. Aenean consequat arcu a ante. Pellentesque
+porta elit sit amet orci. Etiam at turpis nec elit ultricies
+imperdiet. Nulla facilisi. In hac habitasse platea dictumst.
+Suspendisse viverra aliquam risus. Nullam pede justo, molestie
+nonummy, scelerisque eu, facilisis vel, arcu.
+}
+
+\longnewglossaryentry{curabiturtellusmagna}%
+{name={curabitur tellus magna},user1={example-image-c}}%
+{%
+Donec interdum. Praesent scelerisque. Maecenas posuere sodales
+odio. Vivamus metus lacus, varius quis, imperdiet quis, rhoncus a,
+turpis. Etiam ligula arcu, elementum a, venenatis quis, sollicitudin
+sed, metus. Donec nunc pede, tincidunt in, venenatis vitae, faucibus
+vel, nibh. Pellentesque wisi. Nullam malesuada. Morbi ut tellus ut
+pede tincidunt porta. Lorem ipsum dolor sit amet, consectetuer
+adipiscing elit. Etiam congue neque id dolor.
+
+Donec et nisl at wisi luctus bibendum. Nam interdum tellus ac
+libero. Sed sem justo, laoreet vitae, fringilla at, adipiscing ut,
+nibh. Maecenas non sem quis tortor eleifend fermentum. Etiam id
+tortor ac mauris porta vulputate. Integer porta neque vitae massa.
+Maecenas tempus libero a libero posuere dictum. Vestibulum ante
+ipsum primis in faucibus orci luctus et ultrices posuere cubilia
+Curae; Aenean quis mauris sed elit commodo placerat. Class aptent
+taciti sociosqu ad litora torquent per conubia nostra, per inceptos
+hymenaeos. Vivamus rhoncus tincidunt libero. Etiam elementum pretium
+justo. Vivamus est. Morbi a tellus eget pede tristique commodo.
+Nulla nisl. Vestibulum sed nisl eu sapien cursus rutrum.
+}
+
+\longnewglossaryentry{nullanonmauris}%
+{name={nulla non mauris},user1={example-image-16x10}}%
+{%
+Nullam varius. Etiam dignissim elementum metus. Vestibulum faucibus,
+metus sit amet mattis rhoncus, sapien dui laoreet odio, nec
+ultricies nibh augue a enim. Fusce in ligula. Quisque at magna et
+nulla commodo consequat. Proin accumsan imperdiet sem. Nunc porta.
+Donec feugiat mi at justo. Phasellus facilisis ipsum quis ante. In
+ac elit eget ipsum pharetra faucibus. Maecenas viverra nulla in
+massa.
+
+Nulla ac nisl. Nullam urna nulla, ullamcorper in, interdum sit amet,
+gravida ut, risus. Aenean ac enim. In luctus. Phasellus eu quam
+vitae turpis viverra pellentesque. Duis feugiat felis ut enim.
+Phasellus pharetra, sem id porttitor sodales, magna nunc aliquet
+nibh, nec blandit nisl mauris at pede. Suspendisse risus risus,
+lobortis eget, semper at, imperdiet sit amet, quam. Quisque
+scelerisque dapibus nibh. Nam enim. Lorem ipsum dolor sit amet,
+consectetuer adipiscing elit. Nunc ut metus. Ut metus justo, auctor
+at, ultrices eu, sagittis ut, purus. Aliquam aliquam.
+}
+
+\longnewglossaryentry{etiampedemassa}%
+{name={etiam pede massa},user1={example-image-10x16}}%
+{%
+Vestibulum luctus commodo lacus. Morbi lacus dui, tempor sed,
+euismod eget, condimentum at, tortor. Phasellus aliquet odio ac
+lacus tempor faucibus. Praesent sed sem. Praesent iaculis. Cras
+rhoncus tellus sed justo ullamcorper sagittis. Donec quis orci.
+Sed ut tortor quis tellus euismod tincidunt. Suspendisse congue nisl
+eu elit. Aliquam tortor diam, tempus id, tristique eget, sodales
+vel, nulla. Praesent tellus mi, condimentum sed, viverra at,
+consectetuer quis, lectus. In auctor vehicula orci. Sed pede sapien,
+euismod in, suscipit in, pharetra placerat, metus. Vivamus commodo
+dui non odio. Donec et felis.
+
+Etiam suscipit aliquam arcu. Aliquam sit amet est ac purus bibendum
+congue. Sed in eros. Morbi non orci. Pellentesque mattis lacinia
+elit. Fusce molestie velit in ligula. Nullam et orci vitae nibh
+vulputate auctor. Aliquam eget purus. Nulla auctor wisi sed ipsum.
+Morbi porttitor tellus ac enim. Fusce ornare. Proin ipsum enim,
+tincidunt in, ornare venenatis, molestie a, augue. Donec vel pede in
+lacus sagittis porta. Sed hendrerit ipsum quis nisl. Suspendisse
+quis massa ac nibh pretium cursus. Sed sodales. Nam eu neque quis
+pede dignissim ornare. Maecenas eu purus ac urna tincidunt congue.
+}
+
+\longnewglossaryentry{donecetnisl}%
+{name={donec et nisl},user1={example-image-16x9}}%
+{%
+Aenean dictum odio sit amet risus. Morbi purus. Nulla a est sit amet
+purus venenatis iaculis. Vivamus viverra purus vel magna. Donec in
+justo sed odio malesuada dapibus. Nunc ultrices aliquam nunc.
+Vivamus facilisis pellentesque velit. Nulla nunc velit, vulputate
+dapibus, vulputate id, mattis ac, justo. Nam mattis elit dapibus
+purus. Quisque enim risus, congue non, elementum ut, mattis quis,
+sem. Quisque elit.
+
+Maecenas non massa. Vestibulum pharetra nulla at lorem. Duis quis
+quam id lacus dapibus interdum. Nulla lorem. Donec ut ante quis
+dolor bibendum condimentum. Etiam egestas tortor vitae lacus.
+Praesent cursus. Mauris bibendum pede at elit. Morbi et felis a
+lectus interdum facilisis. Sed suscipit gravida turpis. Nulla at
+lectus. Vestibulum ante ipsum primis in faucibus orci luctus et
+ultrices posuere cubilia Curae; Praesent nonummy luctus nibh. Proin
+turpis nunc, congue eu, egestas ut, fringilla at, tellus. In hac
+habitasse platea dictumst.
+}
+
+\longnewglossaryentry{vivamuseutellus}%
+{name={vivamus eu tellus},user1={example-image-9x16}}%
+{%
+ Nam orci orci, malesuada id, gravida nec, ultricies vitae, erat.
+Donec risus turpis, luctus sit amet, interdum quis, porta sed,
+ipsum. Suspendisse condimentum, tortor at egestas posuere, neque
+metus tempor orci, et tincidunt urna nunc a purus. Sed facilisis
+blandit tellus. Nunc risus sem, suscipit nec, eleifend quis, cursus
+quis, libero. Curabitur et dolor. Sed vitae sem. Cum sociis natoque
+penatibus et magnis dis parturient montes, nascetur ridiculus mus.
+Maecenas ante. Duis ullamcorper enim. Donec tristique enim eu leo.
+Nullam molestie elit eu dolor. Nullam bibendum, turpis vitae
+tristique gravida, quam sapien tempor lectus, quis pretium tellus
+purus ac quam. Nulla facilisi.
+
+Duis aliquet dui in est. Donec eget est. Nunc lectus odio, varius
+at, fermentum in, accumsan non, enim. Aliquam erat volutpat. Proin
+sit amet nulla ut eros consectetuer cursus. Phasellus dapibus
+aliquam justo. Nunc laoreet. Donec consequat placerat magna. Duis
+pretium tincidunt justo. Sed sollicitudin vestibulum quam. Nam quis
+ligula. Vivamus at metus. Etiam imperdiet imperdiet pede. Aenean
+turpis. Fusce augue velit, scelerisque sollicitudin, dictum vitae,
+tempor et, pede. Donec wisi sapien, feugiat in, fermentum ut,
+sollicitudin adipiscing, metus.
+}
+
+\longnewglossaryentry{donecvelnibh}%
+{name={donec vel nibh},user1={example-image-golden}}%
+{%
+ Donec pede. Sed id quam id wisi laoreet suscipit. Nulla lectus
+dolor, aliquam ac, fringilla eget, mollis ut, orci. In pellentesque
+justo in ligula. Maecenas turpis. Donec eleifend leo at felis
+tincidunt consequat. Aenean turpis metus, malesuada sed, condimentum
+sit amet, auctor a, wisi. Pellentesque sapien elit, bibendum ac,
+posuere et, congue eu, felis. Vestibulum mattis libero quis metus
+scelerisque ultrices. Sed purus.
+
+Donec molestie, magna ut luctus ultrices, tellus arcu nonummy velit,
+sit amet pulvinar elit justo et mauris. In pede. Maecenas euismod
+elit eu erat. Aliquam augue wisi, facilisis congue, suscipit in,
+adipiscing et, ante. In justo. Cras lobortis neque ac ipsum. Nunc
+fermentum massa at ante. Donec orci tortor, egestas sit amet,
+ultrices eget, venenatis eget, mi. Maecenas vehicula leo semper
+est. Mauris vel metus. Aliquam erat volutpat. In rhoncus sapien ac
+tellus. Pellentesque ligula.
+}
+
+\longnewglossaryentry{crasdapibus}%
+{name={cras dapibus},user1={example-image-golden-upright}}%
+{%
+Aenean interdum nibh sed wisi. Praesent sollicitudin vulputate dui.
+Praesent iaculis viverra augue. Quisque in libero. Aenean gravida
+lorem vitae sem ullamcorper cursus. Nunc adipiscing rutrum ante.
+Nunc ipsum massa, faucibus sit amet, viverra vel, elementum semper,
+orci. Cras eros sem, vulputate et, tincidunt id, ultrices eget,
+magna. Nulla varius ornare odio. Donec accumsan mauris sit amet
+augue. Sed ligula lacus, laoreet non, aliquam sit amet, iaculis
+tempor, lorem. Suspendisse eros. Nam porta, leo sed congue tempor,
+felis est ultrices eros, id mattis velit felis non metus. Curabitur
+vitae elit non mauris varius pretium. Aenean lacus sem, tincidunt
+ut, consequat quis, porta vitae, turpis. Nullam laoreet fermentum
+urna. Proin iaculis lectus.
+
+Sed mattis, erat sit amet gravida malesuada, elit augue egestas
+diam, tempus scelerisque nunc nisl vitae libero. Sed consequat
+feugiat massa. Nunc porta, eros in eleifend varius, erat leo rutrum
+dui, non convallis lectus orci ut nibh. Sed lorem massa, nonummy
+quis, egestas id, condimentum at, nisl. Maecenas at nibh. Aliquam
+et augue at nunc pellentesque ullamcorper. Duis nisl nibh, laoreet
+suscipit, convallis ut, rutrum id, enim. Phasellus odio. Nulla
+nulla elit, molestie non, scelerisque at, vestibulum eu, nulla. Ut
+odio nisl, facilisis id, mollis et, scelerisque nec, enim. Aenean
+sem leo, pellentesque sit amet, scelerisque sit amet, vehicula
+pellentesque, sapien.
+}
+
+\longnewglossaryentry{sedconsequat}%
+{name={sed consequat},user1={example-image-1x1}}%
+{%
+Ut tempor laoreet quam. Nullam id wisi a libero tristique semper.
+Nullam nisl massa, rutrum ut, egestas semper, mollis id, leo. Nulla
+ac massa eu risus blandit mattis. Mauris ut nunc. In hac habitasse
+platea dictumst. Aliquam eget tortor. Quisque dapibus pede in erat.
+Nunc enim. In dui nulla, commodo at, consectetuer nec, malesuada
+nec, elit. Aliquam ornare tellus eu urna. Sed nec metus. Cum sociis
+natoque penatibus et magnis dis parturient montes, nascetur
+ridiculus mus. Pellentesque habitant morbi tristique senectus et
+netus et malesuada fames ac turpis egestas.
+
+Phasellus id magna. Duis malesuada interdum arcu. Integer metus.
+Morbi pulvinar pellentesque mi. Suspendisse sed est eu magna
+molestie egestas. Quisque mi lorem, pulvinar eget, egestas quis,
+luctus at, ante. Proin auctor vehicula purus. Fusce ac nisl aliquam
+ante hendrerit pellentesque. Class aptent taciti sociosqu ad litora
+torquent per conubia nostra, per inceptos hymenaeos. Morbi wisi.
+Etiam arcu mauris, facilisis sed, eleifend non, nonummy ut, pede.
+Cras ut lacus tempor metus mollis placerat. Vivamus eu tortor vel
+metus interdum malesuada.
+}
+
+ % This one doesn't have an image. The style can test whether an
+ % image has been supplied using \ifglshasfield
+
+\longnewglossaryentry{sedeleifend}%
+{name={sed eleifend}}%
+{%
+Morbi non felis ac libero vulputate fringilla. Mauris libero eros,
+lacinia non, sodales quis, dapibus porttitor, pede. Class aptent
+taciti sociosqu ad litora torquent per conubia nostra, per inceptos
+hymenaeos. Morbi dapibus mauris condimentum nulla. Cum sociis
+natoque penatibus et magnis dis parturient montes, nascetur
+ridiculus mus. Etiam sit amet erat. Nulla varius. Etiam tincidunt
+dui vitae turpis. Donec leo. Morbi vulputate convallis est. Integer
+aliquet. Pellentesque aliquet sodales urna.
+}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</example-glossaries-images.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*example-glossaries-long.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is part of the glossaries bundle
+ % These are test glossary entries with long descriptions.
+
+\newglossaryentry{loremipsum}{name={lorem ipsum},
+description={dolor sit amet, consectetuer adipiscing elit. Ut purus
+elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur
+dictum gravida mauris.}}
+
+\newglossaryentry{namearcu}{name={name arcu},
+description={libero, nonummy eget, consectetuer id, vulputate a, magna. Donec
+vehicula augue eu neque. Pellentesque habitant morbi tristique
+senectus et netus et malesuada fames ac turpis egestas. Mauris ut
+leo.}}
+
+\newglossaryentry{crasviverra}{name={cras viverra},
+description={metus rhoncus sem. Nulla et lectus vestibulum
+urna fringilla ultrices. Phasellus eu tellus sit amet tortor gravida
+placerat.}}
+
+\newglossaryentry{integersapien}{name={integer sapien},
+description={est, iaculis in, pretium quis, viverra ac,
+nunc. Praesent eget sem vel leo ultrices bibendum. Aenean
+faucibus.}}
+
+\newglossaryentry{morbidolor}{name={morbi dolor},
+description={nulla, malesuada eu, pulvinar at, mollis ac, nulla.
+Curabitur auctor semper nulla. Donec varius orci eget risus. Duis
+nibh mi, congue eu, accumsan eleifend, sagittis quis, diam. Duis
+eget orci sit amet orci dignissim rutrum.}}
+
+\newglossaryentry{namdui}{name={nam dui},
+description={ligula, fringilla a, euismod sodales,
+sollicitudin vel, wisi. Morbi auctor lorem non justo.}}
+
+\newglossaryentry{namlacus}{name={nam lacus},
+description={libero, pretium at, lobortis vitae, ultricies et,
+tellus. Donec aliquet, tortor sed accumsan bibendum, erat ligula aliquet magna,
+vitae ornare odio metus a mi.}}
+
+\newglossaryentry{morbiac}{name={morbi ac},
+description={orci et nisl hendrerit mollis. Suspendisse ut massa.
+Cras nec ante. Pellentesque a nulla. Cum sociis natoque penatibus
+et magnis dis parturient montes, nascetur ridiculus mus.}}
+
+\newglossaryentry{aliquam}{name={aliquam},
+description={tincidunt urna. Nulla ullamcorper
+vestibulum turpis. Pellentesque cursus luctus mauris.}}
+
+\newglossaryentry{nullamalesuada}{name={nulla malesuada},
+description={porttitor diam. Donec felis erat, congue non, volutpat at,
+tincidunt tristique, libero. Vivamus viverra fermentum felis.}}
+
+\newglossaryentry{donecnonummy}{name={donec nonummy},
+description={pellentesque ante. Phasellus
+adipiscing semper elit. Proin fermentum massa ac quam. Sed diam
+turpis, molestie vitae, placerat a, molestie nec, leo.}}
+
+\newglossaryentry{maecenaslacinia}{name={maecenas lacinia},
+description={nam ipsum ligula, eleifend at, accumsan nec, suscipit
+a, ipsum. Morbi blandit ligula feugiat magna. Nunc eleifend consequat
+lorem.}}
+
+\newglossaryentry{sedlacinia}{name={sed lacinia},
+description={nulla vitae enim. Pellentesque tincidunt purus
+vel magna. Integer non enim. Praesent euismod nunc eu purus. Donec
+bibendum quam in tellus.}}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</example-glossaries-long.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*example-glossaries-multipar.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is part of the glossaries bundle
+ % These are test glossary entries with multi-paragraph descriptions.
+
+\longnewglossaryentry{loremi-ii}{name={lorem 1--2}}%
+{%
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit,
+vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur
+dictum gravida mauris. Nam arcu libero, nonummy eget, consectetuer
+id, vulputate a, magna. Donec vehicula augue eu neque. Pellentesque
+habitant morbi tristique senectus et netus et malesuada fames ac
+turpis egestas. Mauris ut leo. Cras viverra metus rhoncus sem. Nulla
+et lectus vestibulum urna fringilla ultrices. Phasellus eu tellus
+sit amet tortor gravida placerat. Integer sapien est, iaculis in,
+pretium quis, viverra ac, nunc. Praesent eget sem vel leo ultrices
+bibendum. Aenean faucibus. Morbi dolor nulla, malesuada eu, pulvinar
+at, mollis ac, nulla. Curabitur auctor semper nulla. Donec varius
+orci eget risus. Duis nibh mi, congue eu, accumsan eleifend,
+sagittis quis, diam. Duis eget orci sit amet orci dignissim rutrum.
+
+Nam dui ligula, fringilla a, euismod sodales, sollicitudin vel,
+wisi. Morbi auctor lorem non justo. Nam lacus libero, pretium at,
+lobortis vitae, ultricies et, tellus. Donec aliquet, tortor sed
+accumsan bibendum, erat ligula aliquet magna, vitae ornare odio
+metus a mi. Morbi ac orci et nisl hendrerit mollis. Suspendisse ut
+massa. Cras nec ante. Pellentesque a nulla. Cum sociis natoque
+penatibus et magnis dis parturient montes, nascetur ridiculus mus.
+Aliquam tincidunt urna. Nulla ullamcorper vestibulum turpis.
+Pellentesque cursus luctus mauris.%
+}
+
+\longnewglossaryentry{loremiii-iv}{name={lorem 3--4}}%
+{%
+Nulla malesuada porttitor diam. Donec felis erat, congue non,
+volutpat at, tincidunt tristique, libero. Vivamus viverra fermentum
+felis. Donec nonummy pellentesque ante. Phasellus adipiscing semper
+elit. Proin fermentum massa ac quam. Sed diam turpis, molestie
+vitae, placerat a, molestie nec, leo. Maecenas lacinia. Nam ipsum
+ligula, eleifend at, accumsan nec, suscipit a, ipsum. Morbi blandit
+ligula feugiat magna. Nunc eleifend consequat lorem. Sed lacinia
+nulla vitae enim. Pellentesque tincidunt purus vel magna. Integer
+non enim. Praesent euismod nunc eu purus. Donec bibendum quam in
+tellus. Nullam cursus pulvinar lectus. Donec et mi. Nam vulputate
+metus eu enim. Vestibulum pellentesque felis eu massa.
+
+Quisque ullamcorper placerat ipsum. Cras nibh. Morbi vel justo
+vitae lacus tincidunt ultrices. Lorem ipsum dolor sit amet,
+consectetuer adipiscing elit. In hac habitasse platea dictumst.
+Integer tempus convallis augue. Etiam facilisis. Nunc elementum
+fermentum wisi. Aenean placerat. Ut imperdiet, enim sed gravida
+sollicitudin, felis odio placerat quam, ac pulvinar elit purus eget
+enim. Nunc vitae tortor. Proin tempus nibh sit amet nisl. Vivamus
+quis tortor vitae risus porta vehicula.%
+}
+
+\longnewglossaryentry{loremv-vi}{name={lorem 5--6}}%
+{%
+Fusce mauris. Vestibulum luctus nibh at lectus. Sed bibendum, nulla
+a faucibus semper, leo velit ultricies tellus, ac venenatis arcu
+wisi vel nisl. Vestibulum diam. Aliquam pellentesque, augue quis
+sagittis posuere, turpis lacus congue quam, in hendrerit risus eros
+eget felis. Maecenas eget erat in sapien mattis porttitor.
+Vestibulum porttitor. Nulla facilisi. Sed a turpis eu lacus commodo
+facilisis. Morbi fringilla, wisi in dignissim interdum, justo lectus
+sagittis dui, et vehicula libero dui cursus dui. Mauris tempor
+ligula sed lacus. Duis cursus enim ut augue. Cras ac magna. Cras
+nulla. Nulla egestas. Curabitur a leo. Quisque egestas wisi eget
+nunc. Nam feugiat lacus vel est. Curabitur consectetuer.%
+
+Suspendisse vel felis. Ut lorem lorem, interdum eu, tincidunt sit
+amet, laoreet vitae, arcu. Aenean faucibus pede eu ante. Praesent
+enim elit, rutrum at, molestie non, nonummy vel, nisl. Ut lectus
+eros, malesuada sit amet, fermentum eu, sodales cursus, magna. Donec
+eu purus. Quisque vehicula, urna sed ultricies auctor, pede lorem
+egestas dui, et convallis elit erat sed nulla. Donec luctus.
+Curabitur et nunc. Aliquam dolor odio, commodo pretium, ultricies
+non, pharetra in, velit. Integer arcu est, nonummy in, fermentum
+faucibus, egestas vel, odio.%
+}
+
+\longnewglossaryentry{loremvii-viii}{name={lorem 7--8}}%
+{%
+Sed commodo posuere pede. Mauris ut est. Ut quis purus. Sed ac odio.
+Sed vehicula hendrerit sem. Duis non odio. Morbi ut dui. Sed
+accumsan risus eget odio. In hac habitasse platea dictumst.
+Pellentesque non elit. Fusce sed justo eu urna porta tincidunt.
+Mauris felis odio, sollicitudin sed, volutpat a, ornare ac, erat.
+Morbi quis dolor. Donec pellentesque, erat ac sagittis semper, nunc
+dui lobortis purus, quis congue purus metus ultricies tellus. Proin
+et quam. Class aptent taciti sociosqu ad litora torquent per conubia
+nostra, per inceptos hymenaeos. Praesent sapien turpis, fermentum
+vel, eleifend faucibus, vehicula eu, lacus.
+
+Pellentesque habitant morbi tristique senectus et netus et malesuada
+fames ac turpis egestas. Donec odio elit, dictum in, hendrerit sit
+amet, egestas sed, leo. Praesent feugiat sapien aliquet odio.
+Integer vitae justo. Aliquam vestibulum fringilla lorem. Sed neque
+lectus, consectetuer at, consectetuer sed, eleifend ac, lectus.
+Nulla facilisi. Pellentesque eget lectus. Proin eu metus. Sed
+porttitor. In hac habitasse platea dictumst. Suspendisse eu lectus.
+Ut mi mi, lacinia sit amet, placerat et, mollis vitae, dui. Sed ante
+tellus, tristique ut, iaculis eu, malesuada ac, dui. Mauris nibh
+leo, facilisis non, adipiscing quis, ultrices a, dui.%
+}
+
+\longnewglossaryentry{loremix-x}{name={lorem 9--10}}%
+{%
+Morbi luctus, wisi viverra faucibus pretium, nibh est placerat odio,
+nec commodo wisi enim eget quam. Quisque libero justo, consectetuer
+a, feugiat vitae, porttitor eu, libero. Suspendisse sed mauris
+vitae elit sollicitudin malesuada. Maecenas ultricies eros sit amet
+ante. Ut venenatis velit. Maecenas sed mi eget dui varius euismod.
+Phasellus aliquet volutpat odio. Vestibulum ante ipsum primis in
+faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque
+sit amet pede ac sem eleifend consectetuer. Nullam elementum, urna
+vel imperdiet sodales, elit ipsum pharetra ligula, ac pretium ante
+justo a nulla. Curabitur tristique arcu eu metus. Vestibulum lectus.
+Proin mauris. Proin eu nunc eu urna hendrerit faucibus. Aliquam
+auctor, pede consequat laoreet varius, eros tellus scelerisque quam,
+pellentesque hendrerit ipsum dolor sed augue. Nulla nec lacus.
+
+Suspendisse vitae elit. Aliquam arcu neque, ornare in, ullamcorper
+quis, commodo eu, libero. Fusce sagittis erat at erat tristique
+mollis. Maecenas sapien libero, molestie et, lobortis in, sodales
+eget, dui. Morbi ultrices rutrum lorem. Nam elementum ullamcorper
+leo. Morbi dui. Aliquam sagittis. Nunc placerat. Pellentesque
+tristique sodales est. Maecenas imperdiet lacinia velit. Cras non
+urna. Morbi eros pede, suscipit ac, varius vel, egestas non, eros.
+Praesent malesuada, diam id pretium elementum, eros sem dictum
+tortor, vel consectetuer odio sem sed wisi.%
+}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</example-glossaries-multipar.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*example-glossaries-parent.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is part of the glossaries bundle
+ % These are test glossary entries with child entries.
+
+\newglossaryentry{sedmattis}{name={sed mattis},description={erat sit amet}}
+
+\newglossaryentry{gravida}{parent={sedmattis},name={gravida},description={malesuada}}
+
+\newglossaryentry{elitaugue}{parent={sedmattis},name={elit augue},
+description={egestas diam}}
+
+\newglossaryentry{tempus}{parent={sedmattis},name={tempus},
+description={scelerisque}}
+
+\newglossaryentry{nunc}{name={nunc},description={nisl vitae}}
+
+\newglossaryentry{libero}{parent={nunc},name={libero},description={sed
+consequat}}
+
+\newglossaryentry{feugiat}{parent={nunc},name={feugiat},description={massa}}
+
+\newglossaryentry{porta}{parent={nunc},name={porta},description={eros
+in eleifend}}
+
+\newglossaryentry{variuserat}{parent={nunc},name={varius erat},
+description={leo rutrum dui}}
+
+\newglossaryentry{nonconvallis}{name={non
+convallis},description={lectus orci ut nibh}}
+
+\newglossaryentry{sedlorem}{parent={nonconvallis},name={sedlorem},description={massa}}
+
+\newglossaryentry{nonummyquis}{parent={nonconvallis},name={nonummy
+quis}, description={egestas id}}
+
+\newglossaryentry{condimentum}{name={condimentum},description={at
+nisl}}
+
+\newglossaryentry{maecenas}{parent={condimentum},name={maecenas},
+description={at nibh}}
+
+\newglossaryentry{aliquamet}{name={aliquam et},description={augue}}
+
+\newglossaryentry{atnunc}{parent={aliquamet},name={at nunc},description={pellentesque
+ullamcorper}}
+
+\newglossaryentry{duisnisl}{parent={atnunc},name={duisnisl},description={laoreet
+suscipit}}
+
+\newglossaryentry{duisnibh}{parent={atnunc},name={duisnibh},
+description={convallis ut}}
+
+\newglossaryentry{rutrum}{name={rutrum},description={id, enim}}
+
+\newglossaryentry{phasellus}{parent={rutrum},name={phasellus},
+description={odio}}
+
+\newglossaryentry{nullanulla}{parent={rutrum},name={nulla nulla},
+description={elit, molestie non}}
+
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</example-glossaries-parent.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*example-glossaries-symbolnames.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is part of the glossaries bundle
+ % These are test glossary entries with associated symbols.
+
+\newglossaryentry{sym.alpha}{sort={alpha},name={\ensuremath{\alpha}},
+description={Quisque ullamcorper placerat ipsum.}}
+
+\newglossaryentry{sym.beta}{sort={beta},name={\ensuremath{\beta}},
+description={Cras nibh.}}
+
+\newglossaryentry{sym.gamma}{sort={gamma},name={\ensuremath{\gamma}},
+description={Morbi vel justo vitae lacus tincidunt ultrices.}}
+
+\newglossaryentry{sym.delta}{sort={delta},name={\ensuremath{\delta}},
+description={Lorem ipsum dolor sit amet, consectetuer adipiscing
+elit.}}
+
+\newglossaryentry{sym.epsilon}{sort={epsilon},name={\ensuremath{\epsilon}},
+description={In hac habitasse platea dictumst.}}
+
+\newglossaryentry{sym.zeta}{sort={zeta},name={\ensuremath{\zeta}},
+description={Integer tempus convallis augue.}}
+
+\newglossaryentry{sym.eta}{sort={eta},name={\ensuremath{\eta}},
+description={Etiam facilisis.}}
+
+\newglossaryentry{sym.theta}{sort={theta},name={\ensuremath{\theta}},
+description={Nunc elementum fermentum wisi.}}
+
+\newglossaryentry{sym.iota}{sort={iota},name={\ensuremath{i}},
+description={Aenean placerat.}}
+
+\newglossaryentry{sym.kappa}{sort={kappa},name={\ensuremath{\kappa}},
+description={Ut imperdiet, enim sed gravida sollicitudin, felis odio
+placerat quam, ac pulvinar elit purus eget enim.}}
+
+\newglossaryentry{sym.lambda}{sort={lambda},name={\ensuremath{\lambda}},
+description={Nunc vitae tortor.}}
+
+\newglossaryentry{sym.mu}{sort={mu},name={\ensuremath{\mu}},
+description={Proin tempus nibh sit amet nisl.}}
+
+\newglossaryentry{sym.nu}{sort={nu},name={\ensuremath{\nu}},
+description={Vivamus quis tortor vitae risus porta vehicula.}}
+
+\newglossaryentry{sym.xi}{sort={xi},name={\ensuremath{\xi}},
+description={Fusce mauris.}}
+
+\newglossaryentry{sym.pi}{sort={pi},name={\ensuremath{\pi}},
+description={Vestibulum luctus nibh at lectus.}}
+
+\newglossaryentry{sym.rho}{sort={rho},name={\ensuremath{\rho}},
+description={Sed bibendum, nulla a faucibus semper, leo velit
+ultricies tellus, ac venenatis arcu wisi vel nisl. Vestibulum diam.}}
+
+\newglossaryentry{sym.sigma}{sort={sigma},name={\ensuremath{\sigma}},
+description={Aliquam pellentesque, augue quis sagittis posuere,
+turpis lacus congue quam, in hendrerit risus eros eget felis.}}
+
+\newglossaryentry{sym.tau}{sort={tau},name={\ensuremath{\tau}},
+description={Maecenas eget erat in sapien mattis porttitor.}}
+
+\newglossaryentry{sym.upsilon}{sort={upsilon},name={\ensuremath{\upsilon}},
+description={Vestibulum porttitor.}}
+
+\newglossaryentry{sym.phi}{sort={phi},name={\ensuremath{\phi}},
+description={Nulla facilisi.}}
+
+\newglossaryentry{sym.chi}{sort={chi},name={\ensuremath{\chi}},
+description={Sed a turpis eu lacus commodo facilisis.}}
+
+\newglossaryentry{sym.psi}{sort={psi},name={\ensuremath{\psi}},
+description={Morbi fringilla, wisi in dignissim interdum, justo
+lectus sagittis dui, et vehicula libero dui cursus dui.}}
+
+\newglossaryentry{sym.omega}{sort={omega},name={\ensuremath{\omega}},
+description={Mauris tempor ligula sed lacus.}}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</example-glossaries-symbolnames.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*example-glossaries-symbols.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is part of the glossaries bundle
+ % These are test glossary entries with associated symbols.
+
+\newglossaryentry{alpha}{name={alpha},symbol={\ensuremath{\alpha}},
+description={Quisque ullamcorper placerat ipsum.}}
+
+\newglossaryentry{beta}{name={beta},symbol={\ensuremath{\beta}},
+description={Cras nibh.}}
+
+\newglossaryentry{gamma}{name={gamma},symbol={\ensuremath{\gamma}},
+description={Morbi vel justo vitae lacus tincidunt ultrices.}}
+
+\newglossaryentry{delta}{name={delta},symbol={\ensuremath{\delta}},
+description={Lorem ipsum dolor sit amet, consectetuer adipiscing
+elit.}}
+
+\newglossaryentry{epsilon}{name={epsilon},symbol={\ensuremath{\epsilon}},
+description={In hac habitasse platea dictumst.}}
+
+\newglossaryentry{zeta}{name={zeta},symbol={\ensuremath{\zeta}},
+description={Integer tempus convallis augue.}}
+
+\newglossaryentry{eta}{name={eta},symbol={\ensuremath{\eta}},
+description={Etiam facilisis.}}
+
+\newglossaryentry{theta}{name={theta},symbol={\ensuremath{\theta}},
+description={Nunc elementum fermentum wisi.}}
+
+\newglossaryentry{iota}{name={iota},symbol={\ensuremath{i}},
+description={Aenean placerat.}}
+
+\newglossaryentry{kappa}{name={kappa},symbol={\ensuremath{\kappa}},
+description={Ut imperdiet, enim sed gravida sollicitudin, felis odio
+placerat quam, ac pulvinar elit purus eget enim.}}
+
+\newglossaryentry{lambda}{name={lambda},symbol={\ensuremath{\lambda}},
+description={Nunc vitae tortor.}}
+
+\newglossaryentry{mu}{name={mu},symbol={\ensuremath{\mu}},
+description={Proin tempus nibh sit amet nisl.}}
+
+\newglossaryentry{nu}{name={nu},symbol={\ensuremath{\nu}},
+description={Vivamus quis tortor vitae risus porta vehicula.}}
+
+\newglossaryentry{xi}{name={xi},symbol={\ensuremath{\xi}},
+description={Fusce mauris.}}
+
+\newglossaryentry{pi}{name={pi},symbol={\ensuremath{\pi}},
+description={Vestibulum luctus nibh at lectus.}}
+
+\newglossaryentry{rho}{name={rho},symbol={\ensuremath{\rho}},
+description={Sed bibendum, nulla a faucibus semper, leo velit
+ultricies tellus, ac venenatis arcu wisi vel nisl. Vestibulum diam.}}
+
+\newglossaryentry{sigma}{name={sigma},symbol={\ensuremath{\sigma}},
+description={Aliquam pellentesque, augue quis sagittis posuere,
+turpis lacus congue quam, in hendrerit risus eros eget felis.}}
+
+\newglossaryentry{tau}{name={tau},symbol={\ensuremath{\tau}},
+description={Maecenas eget erat in sapien mattis porttitor.}}
+
+\newglossaryentry{upsilon}{name={upsilon},symbol={\ensuremath{\upsilon}},
+description={Vestibulum porttitor.}}
+
+\newglossaryentry{phi}{name={phi},symbol={\ensuremath{\phi}},
+description={Nulla facilisi.}}
+
+\newglossaryentry{chi}{name={chi},symbol={\ensuremath{\chi}},
+description={Sed a turpis eu lacus commodo facilisis.}}
+
+\newglossaryentry{psi}{name={psi},symbol={\ensuremath{\psi}},
+description={Morbi fringilla, wisi in dignissim interdum, justo
+lectus sagittis dui, et vehicula libero dui cursus dui.}}
+
+\newglossaryentry{omega}{name={omega},symbol={\ensuremath{\omega}},
+description={Mauris tempor ligula sed lacus.}}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</example-glossaries-symbols.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*example-glossaries-url.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is part of the glossaries bundle
+ % These are test glossary entries with URLs stored in
+ % the user1 field.
+
+\newglossaryentry{aenean-url}{name={aenean},
+ description={adipiscing auctor est},
+ user1={http://uk.tug.org/}}
+
+\newglossaryentry{morbi-url}{name={morbi},
+ description={quam arcu, malesuada sed, volutpat et, elementum sit
+amet, libero},
+ user1={http://www.ctan.org/}}
+
+\newglossaryentry{duis-url}{name={duis},
+ description={mattis},
+ user1={http://www.tug.org/}}
+
+ % Now try an active character
+\newglossaryentry{sed-url}{name={sed},
+ description={cursus lectus quis odio (uses
+\texttt{\string\protect\string~})},
+ user1={http://theoval.cmp.uea.ac.uk/\protect~nlct/}}
+
+\newglossaryentry{sed2-url}{name={sed},
+ description={cursus lectus quis odio (uses
+\texttt{\string\string\string~})},
+ user1={http://theoval.cmp.uea.ac.uk/\string~nlct/}}
+
+\newglossaryentry{sed3-url}{name={sed},
+ description={cursus lectus quis odio (uses
+\texttt{\string\glstildechar})},
+ user1={http://theoval.cmp.uea.ac.uk/\glstildechar nlct/}}
+
+ % How do we deal with a percent character?
+
+ % Temporarily change the category code
+
+\catcode`\%=12
+\newglossaryentry{phasellus-url}{name={phasellus},
+ description={arcu (catcode change)},
+ user1=http://theoval.cmp.uea.ac.uk/%7Enlct
+}
+\catcode`\%=14
+
+ % Use \%
+
+\newglossaryentry{phasellus2-url}{name={phasellus},
+ description={arcu (uses \texttt{\string\%})},
+ user1=http://theoval.cmp.uea.ac.uk/\%7Enlct
+}
+
+ % Use \glspercentchar
+
+\newglossaryentry{phasellus3-url}{name={phasellus},
+ description={arcu (uses
+ \texttt{\string\glspercentchar})},
+ user1=http://theoval.cmp.uea.ac.uk/\glspercentchar 7Enlct
+}
+
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</example-glossaries-url.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-chap-hyperfirst.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex
+ % arara: makeglossaries
+ % arara: pdflatex
+\documentclass{report}
+
+\usepackage[colorlinks]{hyperref}
+\usepackage{glossaries}
+
+\makeglossaries
+
+\glsaddstoragekey{chapter}{0}{\glschapnum}
+
+\loadglsentries{example-glossaries-brief}
+
+\renewcommand*{\glslinkpostsetkeys}{%
+ \edef\currentchap{\arabic{chapter}}%
+ \ifnum\currentchap=\glschapnum{\glslabel}\relax
+ % Already used this entry in the current chapter, so switch
+ % off the hyperlink.
+ \setkeys{glslink}{hyper=false}%
+ \else
+ % Hasn't been used in the current chapter. Update the value
+ % of the "chapter" field unless the hyperlink has been switched
+ % off.
+ \glsifhyperon
+ {%
+ \glsfieldxdef{\glslabel}{chapter}{\currentchap}%
+ }%
+ {}%
+ \fi
+}
+
+\begin{document}
+\chapter{Sample}
+
+Use all entries: \forglsentries{\thislabel}{\gls{\thislabel}. }
+
+Use them again: \forglsentries{\thislabel}{\gls{\thislabel}. }
+
+\chapter{Another}
+
+Use all entries: \forglsentries{\thislabel}{\gls{\thislabel}. }
+
+Use them again: \forglsentries{\thislabel}{\gls{\thislabel}. }
+
+\chapter{Start with a Star}
+
+Use all entries but suppress hyperlink:
+\forglsentries{\thislabel}{\gls*{\thislabel}. }
+
+Use all entries: \forglsentries{\thislabel}{\gls{\thislabel}. }
+
+Use them again: \forglsentries{\thislabel}{\gls{\thislabel}. }
+
+\printglossaries
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-chap-hyperfirst.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-crossref.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+\documentclass{article}
+
+\usepackage[colorlinks]{hyperref}
+\usepackage{glossaries}
+
+\makeglossaries
+
+\renewcommand{\glsseeitemformat}[1]{\textsc{\glsentryname{#1}}}
+
+\newglossaryentry{pear}{name=pear,
+description={an oddly shaped fruit}}
+
+\newglossaryentry{apple}{name=apple,
+description={firm, round fruit},
+see=[see also]{pear}}
+
+\newglossaryentry{banana}{name=banana,
+description={a yellow fruit with an even odder shape than
+a \gls{pear}}}
+
+\newglossaryentry{fruit}{name=fruit,
+description={sweet, fleshy product of plant containing seed}}
+
+\glssee{fruit}{pear,apple,banana}
+
+\begin{document}
+\gls{pear}, \gls{apple} and \gls{banana}.
+
+\printglossaries
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-crossref.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-custom-acronym.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+\documentclass{report}
+
+\usepackage[colorlinks]{hyperref}
+\usepackage[acronym,% create list of acronyms
+ % The package option "nomain" is used here to suppress the
+ % main glossary, since this example doesn't use it. If you
+ % want to use the main glossary, remove the "nomain" option.
+ nomain
+ ]{glossaries}
+
+\makeglossaries
+
+ % This is a sample file to illustrate how to define a custom
+ % acronym style. This example defines the acronyms so that on first use
+ % they display the short form in the text and with the long form
+ % and description in a footnote. In the main body of the
+ % document the short form will be displayed in small caps, but in
+ % the list of acronyms the short form is displayed in normal
+ % capitals. To ensure this, the short form should be written in
+ % lower case when the acronym is defined, and \MakeTextUppercase is
+ % used when it's displayed in the list of acronyms.
+
+\newacronymstyle{custom-fn}% new style name
+{% Check for long form in case of a mixed glossary
+ \ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}%
+}%
+{% Style definitions:
+ % User needs to supply the description:
+ \renewcommand*{\GenericAcronymFields}{}%
+ % Need to ensure hyperlinks are switched off on first use:
+ \glshyperfirstfalse
+ % Redefine the commands used by \glsgenacfmt on first use:
+ \renewcommand*{\genacrfullformat}[2]{%
+ \firstacronymfont{\glsentryshort{##1}}##2%
+ \footnote{\glsentrylong{##1}: \glsentrydesc{##1}}%
+ }%
+ \renewcommand*{\Genacrfullformat}[2]{%
+ \firstacronymfont{\Glsentryshort{##1}}##2%
+ \footnote{\glsentrylong{##1}: \glsentrydesc{##1}}%
+ }%
+ \renewcommand*{\genplacrfullformat}[2]{%
+ \firstacronymfont{\glsentryshortpl{##1}}##2%
+ \footnote{\glsentrylongpl{##1}: \glsentrydesc{##1}}%
+ }%
+ \renewcommand*{\Genplacrfullformat}[2]{%
+ \firstacronymfont{\Glsentryshortpl{##1}}##2%
+ \footnote{\glsentrylongpl{##1}: \glsentrydesc{##1}}%
+ }%
+ % Redefine the no-link full forms:
+ \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}})%
+ }%
+ % Redefine the link full forms:
+ \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}{%
+ \MakeTextUppercase{%
+ \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}{%
+ \MakeTextUppercase{%
+ \glsentrylongpl{##2}##3\space
+ (\acronymfont{\glsentryshortpl{##2}})%
+ }%
+ }%
+ }%
+ % Use smallcaps for the acronym in the document text:
+ \renewcommand*{\acronymfont}[1]{\textsc{##1}}%
+ \renewcommand*{\acrpluralsuffix}{\glstextup{\glspluralsuffix}}%
+ % Sort acronyms according to the long form:
+ \renewcommand*{\acronymsort}[2]{##2}%
+ % Set the name in the list of acronyms to the long form followed by
+ % the short form (in upper case) in parentheses:
+ \renewcommand*{\acronymentry}[1]{%
+ \Glsentrylong{##1}\space(\MakeTextUppercase{\glsentryshort{##1}})}%
+}
+
+ % Now set the new acronym style (to override the default style)
+\setacronymstyle{custom-fn}
+
+ % Set an appropriate glossary style:
+\setglossarystyle{altlist}
+
+ % Now define the acronyms (must be done after setting the custom
+ % style)
+
+\newacronym[description={set of tags for use in developing hypertext
+documents}]{html}{html}{hyper text markup language}
+
+\newacronym[description={language used to describe the layout of a
+document written in a markup language}]{css}{css}{cascading style
+sheet}
+
+\begin{document}
+
+\gls{css}. \gls{html}.
+
+\gls{css}. \gls{html}.
+
+No-link full forms: \glsentryfull{css}, \Glsentryfull{css}.
+Linking full forms: \acrfull{css}, \Acrfull{css}, \ACRfull{css}.
+Linking with insert: \acrfull{css}['s], \Acrfull{css}['s],
+\ACRfull{css}['s].
+
+Now test plurals.
+
+No-link full forms: \glsentryfullpl{html}, \Glsentryfullpl{html}.
+Linking full forms: \acrfullpl{html}, \Acrfullpl{html}, \ACRfullpl{html}.
+Linking with insert: \acrfullpl{html}['s], \Acrfullpl{html}['s],
+\ACRfullpl{html}['s].
+
+\printglossaries
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-custom-acronym.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-dot-abbr.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % arara: pdflatex
+ % arara: makeglossaries
+ % arara: pdflatex
+\documentclass{article}
+
+\usepackage{glossaries}
+
+\makeglossaries
+
+\glsaddstoragekey{abbrtype}{word}{\abbrtype}
+
+\setacronymstyle{long-short}
+
+\newcommand*{\newabbr}[1][]{%
+ \newacronym[abbrtype=initials,#1]}
+
+\newabbr{eg}{e.g.}{exempli gratia}
+\newabbr{ie}{i.e.}{id est}
+\newabbr{bsc}{B.Sc.}{Bachelor of Science}
+\newabbr{ba}{B.A.}{Bachelor of Arts}
+\newabbr{agm}{A.G.M.}{annual general meeting}
+
+\newacronym{laser}{laser}{light amplification by stimulated
+emission of radiation}
+
+ % See the sample-initialisms.tex example file provided with
+ % glossaries-extra.sty for a better way of doing this.
+
+\makeatletter
+\renewcommand{\glspostlinkhook}{%
+ \ifglsfieldeq{\glslabel}{abbrtype}{initials}%
+ {\new@ifnextchar.\doendsentence\doendword}
+ {}%
+}
+\makeatother
+
+\newcommand{\doendsentence}[1]{\spacefactor=10000{}}
+\newcommand{\doendword}{\spacefactor=1000{}}
+
+\begin{document}
+This is a sample document that illustrates abbreviations with
+full stops (periods) and abbreviations that are words (i.e.\
+acronyms). The examples switch to a typewriter font to make it
+easier to see the inter-word and inter-sentence spaces.
+
+The extension package glossaries-extra.sty provides a better way of
+doing this.
+
+First use: \gls{laser} \gls{eg} \gls{ie} \gls{bsc} \gls{ba} \gls{agm} end of
+sentence.
+
+End of sentence use:
+
+\ttfamily
+
+\gls{laser}. \gls{eg}. \gls{ie}. \gls{bsc}. \gls{ba}. \gls{agm}.
+Done.
+
+laser. e.g. i.e. B.Sc. B.A\@. A.G.M\@. Done.
+
+\rmfamily
+
+Mid-sentence use:
+
+\ttfamily
+
+\gls{laser} \gls{eg} \gls{ie} \gls{bsc} \gls{ba} \gls{agm} Done.
+
+laser e.g.\ i.e.\ B.Sc.\ B.A. A.G.M. Done.
+
+\rmfamily
+
+Check other sentence terminators:
+
+\ttfamily
+
+\gls{laser}? \gls{eg}? \gls{ie}? \gls{bsc}! \gls{ba}! \gls{agm}? Done.
+
+laser? e.g.? i.e.? B.Sc.! B.A.! A.G.M.? Done.
+
+\rmfamily
+
+\glsresetall Reset. End of sentence use:
+
+\ttfamily
+
+\gls{laser}. \gls{eg}. \gls{ie}. \gls{bsc}. \gls{ba}. \gls{agm}.
+Done.
+
+\rmfamily
+\printglossaries
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-dot-abbr.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-dual.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+\documentclass{article}
+
+\usepackage[acronym]{glossaries}
+
+ % \newdualentry[main options]{label}{short}{long}{description}
+
+\newcommand*{\newdualentry}[5][]{%
+ \newglossaryentry{main-#2}{name={#4},%
+ text={#3\glsadd{#2}},%
+ description={#5},%
+ #1
+ }%
+ \newacronym{#2}{#3\glsadd{main-#2}}{#4}
+}
+
+\newdualentry{svm}% label
+ {SVM}% abbreviation
+ {support vector machine}% long form
+ {Statistical pattern recognition technique}% description
+
+\makeglossaries
+
+\begin{document}
+
+\gls{svm}.
+
+\printglossaries
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-dual.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-entrycount.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+\documentclass{article}
+
+\usepackage[colorlinks]{hyperref}
+\usepackage
+ [nomain,% 'nomain' is used to suppress the main glossary
+ acronym% 'acronym' is used to create the 'acronym' glossary
+ ]
+ {glossaries}
+\makeglossaries
+
+\glsenableentrycount
+
+\setacronymstyle{long-short}
+
+\newacronym{html}{HTML}{hypertext markup language}
+\newacronym{css}{CSS}{cascading style sheets}
+\newacronym{xml}{XML}{extensible markup language}
+\newacronym{sql}{SQL}{structured query language}
+\newacronym{rdbms}{RDBMS}{relational database management system}
+\newacronym{rdsms}{RDSMS}{relational data stream management system}
+
+\begin{document}
+These entries are only used once: \cgls{sql}, \cgls{rdbms},
+\cgls{xml}. These entries are used multiple times:
+\cgls{html}, \cgls{html}, \cgls{css}, \cgls{css}, \cgls{css},
+\cgls{rdsms}, \cgls{rdsms}.
+
+\printglossaries
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-entrycount.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-entryfmt.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+\documentclass{article}
+
+\usepackage[colorlinks]{hyperref}
+\usepackage[style=tree]{glossaries}
+
+\makeglossaries
+
+\renewcommand*{\glsentryfmt}{%
+ \glsgenentryfmt
+ \ifglsused{\glslabel}{}{\space (\glsentrysymbol{\glslabel})}%
+}
+
+\newglossaryentry{distance}{name=distance,
+description={The length between two points},
+symbol={km}}
+
+\begin{document}
+
+First use: \gls{distance}. Next use: \gls{distance}.
+
+\printglossaries
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-entryfmt.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-FnDesc.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you are using arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+\documentclass{report}
+
+\usepackage[colorlinks]{hyperref}
+\usepackage[hyperfirst=false]{glossaries}
+
+\makeglossaries
+
+\renewcommand*{\glsentryfmt}{%
+ \glsgenentryfmt
+ \ifglsused{\glslabel}{}{\footnote{\glsentrydesc{\glslabel}}}%
+}
+
+\newglossaryentry{sample}{name={sample},description={an example
+description}}
+
+\begin{document}
+\chapter{Sample Chapter}
+
+First use: \gls{sample}.
+
+Next use: \gls{sample}.
+
+\printglossaries
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-FnDesc.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-font-abbr.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % arara: pdflatex
+ % arara: makeglossaries
+ % arara: pdflatex
+\documentclass{article}
+
+\usepackage{glossaries}
+
+\makeglossaries
+
+\glsaddstoragekey{font}{}{\entryfont}
+
+\newacronymstyle{long-font-short}
+{%
+ \GlsUseAcrEntryDispStyle{long-short}%
+}
+{%
+ \GlsUseAcrStyleDefs{long-short}%
+ \renewcommand*{\genacrfullformat}[2]{%
+ \glsentrylong{##1}##2\space
+ ({\entryfont{##1}\glsentryshort{##1}})%
+ }%
+ \renewcommand*{\Genacrfullformat}[2]{%
+ \Glsentrylong{##1}##2\space
+ ({\entryfont{##1}\glsentryshort{##1}})%
+ }%
+ \renewcommand*{\genplacrfullformat}[2]{%
+ \glsentrylongpl{##1}##2\space
+ ({\entryfont{##1}\glsentryshortpl{##1}})%
+ }%
+ \renewcommand*{\Genplacrfullformat}[2]{%
+ \Glsentrylongpl{##1}##2\space
+ ({\entryfont{##1}\glsentryshortpl{##1}})%
+ }%
+ \renewcommand*{\acronymfont}[1]{{\entryfont{\glslabel}##1}}%
+ \renewcommand*{\acronymentry}[1]{{\entryfont{##1}\glsentryshort{##1}}}%
+}
+
+\setacronymstyle{long-font-short}
+
+\newcommand*{\newitabbr}[1][]{\newacronym[font=\em,#1]}
+\newcommand*{\newupabbr}[1][]{\newacronym[#1]}
+
+\newitabbr{eg}{e.g.}{exempli gratia}
+\newitabbr{ie}{i.e.}{id est}
+
+\newupabbr{bsc}{BSc}{Bachelor of Science}
+\newupabbr{ba}{BA}{Bachelor of Arts}
+\newupabbr{agm}{AGM}{annual general meeting}
+
+\begin{document}
+
+First use: \gls{eg} \gls{ie} \gls{bsc} \gls{ba} \gls{agm}.
+
+Next use: \gls{eg} \gls{ie} \gls{bsc} \gls{ba} \gls{agm}.
+
+Short: \acrshort{eg} \acrshort{ie} \acrshort{bsc} \acrshort{ba}
+\acrshort{agm}.
+
+Full: \acrfull{eg} \acrfull{ie} \acrfull{bsc} \acrfull{ba}
+\acrfull{agm}.
+
+\printglossaries
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-font-abbr.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-ignored.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+\documentclass{article}
+
+\usepackage[colorlinks]{hyperref}
+\usepackage{glossaries}
+
+\newignoredglossary{common}
+
+\makeglossaries
+
+\newglossaryentry{sample}{name={sample},description={an example}}
+
+\newglossaryentry{commonex}{type=common,name={common term}}
+
+\begin{document}
+
+\gls{sample}. \gls{commonex}.
+
+\printglossaries
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-ignored.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-index.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+\documentclass{report}
+
+\usepackage[colorlinks]{hyperref}
+\usepackage[toc,index,nohypertypes={index}]{glossaries}
+\usepackage{glossary-mcols}
+
+\makeglossaries
+
+ % define terms for the index
+
+\newterm[plural={stegosauruses}]{stegosaurus}
+\newterm[plural={triceratopses}]{triceratops}
+\newterm[plural={apatosauruses}]{apatosaurus}
+
+ % To avoid labels conflicting with the same name in the main glossary
+ % prefix the index label with "ind-". (This means that the name must
+ % be set independently.)
+\newterm[name={dinosaur}]{ind-dinosaur}
+\newterm[name={Triassic}]{ind-triassic}
+
+ % define terms for the main glossary
+
+\newglossaryentry{dinosaur}%
+{%
+ name={dinosaur\glsadd{ind-dinosaur}},%
+ description={One of a group of dinosauria}%
+}
+
+\newglossaryentry{Triassic}%
+{%
+ name={Triassic\glsadd{ind-triassic}},%
+ description={The first period of the Mesozoic Era}
+}
+
+\begin{document}
+\tableofcontents
+
+\chapter{Dinosaurs}
+
+\Glspl{dinosaur} are now extinct. They first appeared during the
+\gls{Triassic} period. Examples of \glspl{dinosaur} include the
+\gls{triceratops}, the \gls{apatosaurus} and the \gls{stegosaurus}.
+
+Indexed term: \gls{ind-dinosaur}.
+
+\renewcommand*{\glsnamefont}[1]{\textbf{\makefirstuc{#1}}}
+
+\printglossary[style=long,nogroupskip]
+
+\renewcommand*{\glsnamefont}[1]{\textmd{#1}}
+
+\printindex[style=mcolindexgroup]
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-index.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-inline.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+ % arara: pdflatex: { synctex: on }
+\documentclass[a4paper]{report}
+
+\usepackage[plainpages=false,colorlinks]{hyperref}
+\usepackage[toc,order=word,subentrycounter]{glossaries}
+
+\usepackage{glossary-inline}
+
+\renewcommand*{\glossarysection}[2][]{\textbf{#1}: }
+\renewcommand{\glsnamefont}[1]{\textsc{#1}}
+\setglossarystyle{inline}
+
+\makeglossaries
+
+\newglossaryentry{Perl}{name=\texttt{Perl},
+sort=Perl, % need a sort key because name contains a command
+description=A scripting language}
+
+\newglossaryentry{glossary}{name=glossary,
+description={\nopostdesc},
+plural={glossaries}}
+
+\newglossaryentry{glossarycol}{
+description={collection of glosses},
+sort={2},
+parent={glossary}}
+
+\newglossaryentry{glossarylist}{
+description={list of technical words},
+sort={1},
+parent={glossary}}
+
+\newglossaryentry{pagelist}{name=page list,
+ % description value has to be enclosed in braces
+ % because it contains commas
+description={a list of individual pages or page ranges
+(e.g.\ 1,2,4,7-9)}}
+
+\newglossaryentry{mtrx}{name=matrix,
+description={rectangular array of quantities},
+ % plural is not simply obtained by appending an s, so specify
+plural=matrices}
+
+ % entry with a paragraph break in the description
+
+\newglossaryentry{par}{name=paragraph,
+description={distinct section of piece of
+writing. Beginning on new, usually indented, line}}
+
+ % entry with two types of plural. Set the plural form to the
+ % form most likely to be used. If you want to use a different
+ % plural, you will need to explicity specify it in \glslink
+\newglossaryentry{cow}{name=cow,
+ % this isn't necessary, as this form (appending an s) is
+ % the default
+plural=cows,
+ % description:
+description={(\emph{pl.}\ cows, \emph{archaic} kine) an adult
+female of any bovine animal}}
+
+\newglossaryentry{bravo}{name={bravo},
+description={\nopostdesc}}
+
+\newglossaryentry{bravo1}{description={cry of approval (pl.\ bravos)},
+sort={1},
+plural={bravos},
+parent=bravo}
+
+\newglossaryentry{bravo2}{description={hired ruffian or killer (pl.\ bravoes)},
+sort={2},
+plural={bravoes},
+parent=bravo}
+
+\newglossaryentry{seal}{name=seal,description={sea mammal with
+flippers that eats fish}}
+
+\newglossaryentry{sealion}{name={sea lion},
+description={large seal}}
+
+\begin{document}
+
+\title{Sample Document Using glossary Package}
+\author{Nicola Talbot}
+\pagenumbering{alph}% prevent duplicate page link names if using PDF
+\maketitle
+
+\pagenumbering{roman}
+\tableofcontents
+
+\chapter{Introduction}
+\pagenumbering{arabic}
+
+This document has a glossary in a footnote\footnote{\printglossaries}.
+
+A \gls{glossarylist} (definition~\glsrefentry{glossarylist}) is a
+very useful addition to any technical document, although a
+\gls{glossarycol} (definition~\glsrefentry{glossarycol}) can also
+simply be a collection of glosses, which is another thing entirely.
+Some documents have multiple \glspl{glossarylist}.
+
+Once you have run your document through \LaTeX, you
+will then need to run the \texttt{.glo} file through
+\texttt{makeindex}. You will need to set the output
+file so that it creates a \texttt{.gls} file instead
+of an \texttt{.ind} file, and change the name of
+the log file so that it doesn't overwrite the index
+log file (if you have an index for your document).
+Rather than having to remember all the command line
+switches, you can call the \gls{Perl} script
+\texttt{makeglossaries} which provides a convenient
+wrapper.
+
+If a comma appears within the name or description, grouping
+must be used, e.g.\ in the description of \gls{pagelist}.
+
+\chapter{Plurals and Paragraphs}
+
+Plurals are assumed to have the letter s appended, but if this is
+not the case, as in \glspl{mtrx}, then you need to specify the
+plural when you define the entry. If a term may have multiple
+plurals (for example \glspl{cow}/\glslink{cow}{kine}) then
+define the entry with the plural form most likely to be used and
+explicitly specify the alternative form using \verb|\glslink|.
+\Glspl{seal} and \glspl{sealion} have regular plural forms.
+
+\Gls{bravo} is a homograph, but the plural forms are spelt
+differently. The plural of \gls{bravo1}, a cry of approval
+(definition~\glsrefentry{bravo1}), is \glspl{bravo1}, whereas the
+plural of \gls{bravo2}, a hired ruffian or killer
+(definition~\glsrefentry{bravo2}), is \glspl{bravo2}.
+
+\Glspl{par} can cause a problem in commands, so care is needed
+when having a paragraph break in a \gls{glossarylist} entry.
+
+\chapter{Ordering}
+
+There are two types of ordering: word ordering (which places
+``\gls{sealion}'' before ``\gls{seal}'') and letter ordering
+(which places ``\gls{seal}'' before ``\gls{sealion}'').
+
+
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-inline.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-langdict.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+
+ % This file also requires the glossaries-english
+ % and glossaries-french language modules. These must
+ % be installed in addition to installing the glossaries package.
+\documentclass[english,french]{article}
+
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{babel}
+ % The package option "nomain" is used here to suppress the
+ % main glossary, since this example doesn't use it. If you
+ % want to use the main glossary, remove the "nomain" option.
+\usepackage[nomain]{glossaries}
+
+\newglossary[glg]{english}{gls}{glo}{English to French}
+\newglossary[flg]{french}{flx}{flo}{French to English}
+
+\makeglossaries
+
+ % \newword{label}{english}{determiner}{french}
+\newcommand*{\newword}[4]{%
+ \newglossaryentry{en-#1}{type=english,name={#2},description={#3 #4}}%
+ \newglossaryentry{fr-#1}{type=french,name={#3 #4},text={#4},sort={#4},description={#2}}%
+}
+
+\newword{cat}{cat}{le}{chat}
+\newword{mat}{mat}{la}{natte}
+
+\begin{document}
+\selectlanguage{english}
+The \gls{en-cat} sat on the \gls{en-mat}.
+
+\selectlanguage{french}
+Le \gls{fr-cat} s'est repos\'e sur la \gls{fr-mat}.
+
+\selectlanguage{english}
+\printglossary[type=english]
+
+\selectlanguage{french}
+\printglossary[type=french]
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-langdict.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-newkeys.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you are using arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+\documentclass{article}
+
+\usepackage[colorlinks]{hyperref}
+\usepackage[nopostdot,nogroupskip]{glossaries}
+
+\glsaddkey*% star version needed as default value needs expanding
+ {ed}% key
+ {\glsentrytext{\glslabel}ed}% default value
+ {\glsentryed}% command analogous to \glsentrytext
+ {\Glsentryed}% command analogous to \Glsentrytext
+ {\glsed}% command analogous to \glstext
+ {\Glsed}% command analogous to \Glstext
+ {\GLSed}% command analogous to \GLStext
+
+\glsaddkey*
+ {ing}% key
+ {\glsentrytext{\glslabel}ing}% default value
+ {\glsentrying}% command analogous to \glsentrytext
+ {\Glsentrying}% command analogous to \Glsentrytext
+ {\glsing}% command analogous to \glstext
+ {\Glsing}% command analogous to \Glstext
+ {\GLSing}% command analogous to \GLStext
+
+
+\makeglossaries
+
+\newglossaryentry{jump}{name={jump},description={}}
+
+\newglossaryentry{run}{name={run},%
+ ed={ran},%
+ ing={running},
+ description={}}
+
+\newglossaryentry{waddle}{name={waddle},%
+ ed={waddled},%
+ ing={waddling},%
+ description={}}
+
+\begin{document}
+
+This is a sample document illustrating how to add new glossary entry
+keys.
+
+The dog \glsed{jump} over the duck.
+
+The duck was \glsing{waddle} round the dog.
+
+The dog \glsed{run} away from the duck.
+
+First letter uppercase: \Glsed{jump}, \Glsing{jump},
+\Glsed{waddle}, \Glsing{waddle},
+\Glsed{run}, \Glsing{run}.
+
+All uppercase: \GLSed{jump}, \GLSing{jump},
+\GLSed{waddle}, \GLSing{waddle},
+\GLSed{run}, \GLSing{run}.
+
+\printglossaries
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-newkeys.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-noidxapp-utf8.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex
+ % arara: pdflatex
+\documentclass{report}
+
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+
+\usepackage[colorlinks]{hyperref}
+\usepackage[index,symbols,nohypertypes={index}]{glossaries}
+\usepackage{glossary-mcols}
+
+\makenoidxglossaries
+
+\renewcommand{\theHequation}{\theequation}
+
+ % main entries
+
+\newglossaryentry{elite}{%
+ name={{é}lite},
+ description={select group of people}
+}
+
+\newglossaryentry{elephant}{%
+ name={elephant},
+ description={very large mammal with tusks}
+}
+
+\newglossaryentry{elk}{%
+ name={elk},
+ description={large northern deer}
+}
+
+\newglossaryentry{emigre}{%
+ name={{é}migré},
+ description={person who has emigrated to another country,
+ especially for political reasons}
+}
+
+ % Symbols
+
+\newglossaryentry{set}{%
+ type=symbols,
+ name={$\mathcal{S}$},
+ text={\mathcal{S}},
+ sort={S},
+ description={A set}}
+
+\newglossaryentry{U}{%
+ type=symbols,
+ name={$\mathcal{U}$},
+ text={\mathcal{U}},
+ sort={U},
+ description={The universal set}}
+
+\newglossaryentry{card}{%
+ type=symbols,
+ name={$|\glsentrytext{set}|$},
+ text={|\glsentrytext{set}|},
+ sort={|},
+ description={cardinality of $\gls{set}$}}
+
+\newglossaryentry{factorial}{%
+ type=symbols,
+ name={$!$},
+ text={!},
+ sort={!},
+ description={factorial}}
+
+ % index entries
+
+\newterm{seal}
+
+\newterm{dinosaur}
+
+\newterm[parent=dinosaur]{ceratopsidae}
+
+\newterm[parent=dinosaur,plural={stegosauruses}]{stegosaurus}
+\newterm[parent=ceratopsidae,plural={triceratopses}]{triceratops}
+\newterm[parent=ceratopsidae,plural={styracosauruses}]{styracosaurus}
+\newterm[parent=dinosaur,plural={apatosauruses}]{apatosaurus}
+
+\newterm{Triassic}
+
+\newterm{Devonian}
+
+\newterm[see={[see also]seal}]{sea lion}
+
+\begin{document}
+
+\chapter{Mathematical Notation}
+
+The cardinality of a set $\gls{set}$ is denoted $\gls{card}$
+The $\gls{factorial}$ symbol indicates factorial.
+$\gls{U}$ is the universal set.
+
+\glsaddall[types=main]
+
+\chapter{Dinosaurs}
+
+\Glspl{dinosaur} are now extinct. They first appeared during the
+\gls{Triassic} period. Examples of \glspl{dinosaur} include the
+\gls{triceratops}, the \gls{styracosaurus}, the \gls{apatosaurus} and the \gls{stegosaurus}.
+
+\Glspl{seal} and \glspl{sea lion} are marine mammals.
+The \gls{Devonian} period was the age of fish.
+
+\glsaddall[types=main]
+
+\chapter{Location Lists}
+
+Dinosaur: \glsdisplaynumberlist{dinosaur}.
+
+Set: \glsdisplaynumberlist{set}.
+
+\Gls{elite}: \glsdisplaynumberlist{elite}.
+
+\begin{equation}
+3\gls[counter=equation]{factorial} = 3 \times 2 \times 1
+\end{equation}
+
+\newcommand{\myhandler}[4]{%
+ Prefix: #1.
+ Counter: #2.
+ Format: #3.
+ Value: #4.
+ Link: \setentrycounter[#1]{#2}%
+ \csuse{#3}{#4}.
+ \par
+}
+\newcommand{\myxrhandler}[2][]{XR (#1): #2. }
+
+Factorial locations:
+\glsnumberlistloop{factorial}{\myhandler}{\myxrhandler}
+
+Sea lion locations:
+\glsnumberlistloop{sea lion}{\myhandler}{\myxrhandler}
+
+\printnoidxglossary[type=main,sort=word]
+
+\printnoidxglossary[type=symbols,sort=use]
+
+\renewcommand*{\glsnamefont}[1]{\textmd{#1}}
+
+\printnoidxglossary[type=index,style=mcolindexgroup,sort=word]
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-noidxapp-utf8.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-noidxapp.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex
+ % arara: pdflatex
+\documentclass{report}
+
+\usepackage[colorlinks]{hyperref}
+\usepackage[index,symbols,nohypertypes={index}]{glossaries}
+\usepackage{glossary-mcols}
+
+\makenoidxglossaries
+
+\renewcommand{\theHequation}{\theequation}
+
+ % main entries
+
+\newglossaryentry{elite}{%
+ name={{\'e}lite},
+ description={select group of people}
+}
+
+\newglossaryentry{elephant}{%
+ name={elephant},
+ description={very large mammal with tusks}
+}
+
+\newglossaryentry{elk}{%
+ name={elk},
+ description={large northern deer}
+}
+
+\newglossaryentry{emigre}{%
+ name={{\'e}migr\'e},
+ description={person who has emigrated to another country,
+ especially for political reasons}
+}
+
+ % Symbols
+
+\newglossaryentry{set}{%
+ type=symbols,
+ name={$\mathcal{S}$},
+ text={\mathcal{S}},
+ sort={S},
+ description={A set}}
+
+\newglossaryentry{U}{%
+ type=symbols,
+ name={$\mathcal{U}$},
+ text={\mathcal{U}},
+ sort={U},
+ description={The universal set}}
+
+\newglossaryentry{card}{%
+ type=symbols,
+ name={$|\glsentrytext{set}|$},
+ text={|\glsentrytext{set}|},
+ sort={|},
+ description={cardinality of $\gls{set}$}}
+
+\newglossaryentry{factorial}{%
+ type=symbols,
+ name={$!$},
+ text={!},
+ sort={!},
+ description={factorial}}
+
+ % index entries
+
+\newterm{seal}
+
+\newterm{dinosaur}
+
+\newterm[parent=dinosaur]{ceratopsidae}
+
+\newterm[parent=dinosaur,plural={stegosauruses}]{stegosaurus}
+\newterm[parent=ceratopsidae,plural={triceratopses}]{triceratops}
+\newterm[parent=ceratopsidae,plural={styracosauruses}]{styracosaurus}
+\newterm[parent=dinosaur,plural={apatosauruses}]{apatosaurus}
+
+\newterm{Triassic}
+
+\newterm{Devonian}
+
+\newterm[see={[see also]seal}]{sea lion}
+
+\begin{document}
+
+\chapter{Mathematical Notation}
+
+The cardinality of a set $\gls{set}$ is denoted $\gls{card}$
+The $\gls{factorial}$ symbol indicates factorial.
+$\gls{U}$ is the universal set.
+
+\glsaddall[types=main]
+
+\chapter{Dinosaurs}
+
+\Glspl{dinosaur} are now extinct. They first appeared during the
+\gls{Triassic} period. Examples of \glspl{dinosaur} include the
+\gls{triceratops}, the \gls{styracosaurus}, the \gls{apatosaurus} and the \gls{stegosaurus}.
+
+\Glspl{seal} and \glspl{sea lion} are marine mammals.
+The \gls{Devonian} period was the age of fish.
+
+\glsaddall[types=main]
+
+\chapter{Location Lists}
+
+Dinosaur: \glsdisplaynumberlist{dinosaur}.
+
+Set: \glsdisplaynumberlist{set}.
+
+\Gls{elite}: \glsdisplaynumberlist{elite}.
+
+\begin{equation}
+3\gls[counter=equation]{factorial} = 3 \times 2 \times 1
+\end{equation}
+
+\newcommand{\myhandler}[4]{%
+ Prefix: #1.
+ Counter: #2.
+ Format: #3.
+ Value: #4.
+ Link: \setentrycounter[#1]{#2}%
+ \csuse{#3}{#4}.
+ \par
+}
+\newcommand{\myxrhandler}[2][]{XR (#1): #2. }
+
+Factorial locations:
+\glsnumberlistloop{factorial}{\myhandler}{\myxrhandler}
+
+Sea lion locations:
+\glsnumberlistloop{sea lion}{\myhandler}{\myxrhandler}
+
+\printnoidxglossary[type=main,sort=word]
+
+\printnoidxglossary[type=symbols,sort=use]
+
+\renewcommand*{\glsnamefont}[1]{\textmd{#1}}
+
+\printnoidxglossary[type=index,style=mcolindexgroup,sort=letter]
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-noidxapp.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-nomathhyper.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+\documentclass{report}
+
+\usepackage[colorlinks]{hyperref}
+\usepackage{glossaries}
+
+\GlsDeclareNoHyperList{main}
+
+\makeglossaries
+
+ % redefine \glsentryfmt so that it adds a hyperlink
+ % if not in math mode and the hyperlinks haven't been forced on
+\renewcommand*{\glsentryfmt}{%
+ \ifmmode
+ \glsgenentryfmt
+ \else
+ \glsifhyperon
+ {\glsgenentryfmt}% hyperlink already on
+ {\glshyperlink[\glsgenentryfmt]{\glslabel}}%
+ \fi
+}
+
+ % define a sample entry:
+\newglossaryentry{x}{name={x},description={sample entry}}
+
+\begin{document}
+\chapter{Sample}
+In text mode: \gls{x}. Inline maths: $\gls{x}$. Displayed
+maths:
+\[
+ \gls{x}
+\]
+
+Back to text mode again: \gls{x}. Don't check the first use flag:
+\glstext{x}. Force on the hyperlink: \glstext+{x}.
+
+\printglossaries
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-nomathhyper.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-numberlist.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+ % arara: pdflatex: { synctex: on }
+\documentclass{report}
+
+\usepackage[colorlinks]{hyperref}
+\usepackage[savenumberlist,counter=chapter]{glossaries}
+
+\makeglossaries
+
+\newglossaryentry{sample}{name=sample,description=an example}
+
+\begin{document}
+\chapter{Introduction}
+
+This is a \glsentryname{sample} document. \Glsentryplural{sample}
+are discussed in chapters~\glsdisplaynumberlist{sample}.
+
+\chapter{Sample Documents}
+
+\Gls{sample} documents are provided for testing and illustration
+purposes.
+
+\chapter{More About Samples}
+
+Here's more information about \glspl{sample}.
+
+\chapter{Another chapter}
+
+A chapter about something else.
+
+\chapter{Another About Samples}
+
+Here's some more information about \glspl{sample}.
+
+\printglossaries
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-numberlist.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-prefix.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+ % arara: pdflatex: { synctex: on }
+
+\documentclass{article}
+
+\usepackage[colorlinks]{hyperref}
+\usepackage[toc,acronym]{glossaries-prefix}
+
+\makeglossaries
+
+\newglossaryentry{sample}{name={sample},
+ description={an example},
+ prefix={a~},
+ prefixplural={the\space}%
+}
+
+\newglossaryentry{oeil}{name={oeil},
+ plural={yeux},
+ description={eye},
+ prefix={l'},
+ prefixplural={les\space}}
+
+\newacronym
+ [%
+ prefix={an\space},prefixfirst={a~}%
+ ]{svm}{SVM}{support vector machine}
+
+\newglossarystyle{plist}{%
+ \setglossarystyle{list}%
+ \renewcommand*{\glossentry}[2]{%
+ \item[\glsentryitem{##1}%
+ \Glsentryprefix{##1}%
+ \glstarget{##1}{\glossentryname{##1}}]
+ \glossentrydesc{##1}\glspostdescription\space ##2}%
+}
+
+\begin{document}
+
+\tableofcontents
+
+\section{Sample}
+
+First use: \pgls{sample}, \pgls{svm}, \pgls{oeil}. Next use: \pgls{sample}, \pgls{svm}, \pgls{oeil}.
+
+Reset. \glsresetall
+
+First use: \pglspl{sample}, \pglspl{svm}, \pglspl{oeil}. Next use:
+\pglspl{sample}, \pglspl{svm}, \pglspl{oeil}.
+
+Reset. \glsresetall
+
+First use: \Pgls{sample}, \Pgls{svm}. Next use: \Pgls{sample}, \Pgls{svm}.
+
+Reset. \glsresetall
+
+First use: \Pglspl{sample}, \Pglspl{svm}. Next use: \Pglspl{sample}, \Pglspl{svm}.
+
+Reset. \glsresetall
+
+First use: \PGLS{sample}, \PGLS{svm}. Next use: \PGLS{sample}, \PGLS{svm}.
+
+Reset. \glsresetall
+
+First use: \PGLSpl{sample}, \PGLSpl{svm}. Next use: \PGLSpl{sample}, \PGLSpl{svm}.
+
+\printglossary[style=plist]
+
+\printacronyms
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-prefix.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-si.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+\documentclass{article}
+\usepackage{siunitx}
+\usepackage[style=long4col]{glossaries}
+
+\makeglossaries
+
+\newglossaryentry{ohm}{%
+ name=ohm,
+ symbol={\si{\ohm}},
+ description=unit of electrical resistance%
+}
+
+\begin{document}
+\glsaddallunused
+
+\printglossaries
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-si.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-storage-abbr-desc.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex
+ % arara: makeglossaries
+ % arara: pdflatex
+\documentclass{article}
+
+\usepackage{glossaries}
+
+\makeglossaries
+
+\glsaddstoragekey
+ {abbrtype}% key/field name
+ {acronym}% default value if not explicitly set
+ {\abbrtype}% custom command to access the value if required
+
+\newacronymstyle
+ {mystyle}% style name
+ {% Use the generic display
+ \ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}%
+ }
+ {% User needs to explicitly set the description
+ \renewcommand*{\GenericAcronymFields}{}%
+ % For the full format, test the value of the "abbrtype" key.
+ % If it's set to "acronym" put the short form first with
+ % the long form in brackets.
+ \renewcommand*{\genacrfullformat}[2]{%
+ \ifglsfieldeq{##1}{abbrtype}{acronym}
+ {% is a proper acronym
+ \protect\firstacronymfont{\glsentryshort{##1}}##2\space
+ (\glsentrylong{##1})%
+ }
+ {% is another form of abbreviation
+ \glsentrylong{##1}##2\space
+ (\protect\firstacronymfont{\glsentryshort{##1}})%
+ }%
+ }%
+ % first letter upper case version:
+ \renewcommand*{\Genacrfullformat}[2]{%
+ \ifglsfieldeq{##1}{abbrtype}{acronym}
+ {% is a proper acronym
+ \protect\firstacronymfont{\Glsentryshort{##1}}##2\space
+ (\glsentrylong{##1})%
+ }
+ {% is another form of abbreviation
+ \Glsentrylong{##1}##2\space
+ (\protect\firstacronymfont{\glsentryshort{##1}})%
+ }%
+ }%
+ % plural
+ \renewcommand*{\genplacrfullformat}[2]{%
+ \ifglsfieldeq{##1}{abbrtype}{acronym}
+ {% is a proper acronym
+ \protect\firstacronymfont{\glsentryshortpl{##1}}##2\space
+ (\glsentrylong{##1})%
+ }
+ {% is another form of abbreviation
+ \glsentrylongpl{##1}##2\space
+ (\protect\firstacronymfont{\glsentryshortpl{##1}})%
+ }%
+ }%
+ % plural and first letter upper case
+ \renewcommand*{\Genplacrfullformat}[2]{%
+ \ifglsfieldeq{##1}{abbrtype}{acronym}
+ {% is a proper acronym
+ \protect\firstacronymfont{\Glsentryshortpl{##1}}##2\space
+ (\glsentrylong{##1})%
+ }
+ {% is another form of abbreviation
+ \Glsentrylongpl{##1}##2\space
+ (\protect\firstacronymfont{\glsentryshortpl{##1}})%
+ }%
+ }%
+ % Just use the short form as the name part in the glossary:
+ \renewcommand*{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}}%
+ % Sort by the short form:
+ \renewcommand*{\acronymsort}[2]{##1}%
+ % Just use the surrounding font for the short form:
+ \renewcommand*{\acronymfont}[1]{##1}%
+ % Same for first use:
+ \renewcommand*{\firstacronymfont}[1]{\acronymfont{##1}}%
+ % Default plural suffix if the plural isn't explicitly set
+ \renewcommand*{\acrpluralsuffix}{\glspluralsuffix}%
+ }
+
+\setacronymstyle{mystyle}
+
+ % The default for "abbrtype" is "acronym" so we don't need
+ % this new key for acronyms:
+\newacronym[description={system for detecting the position and
+speed of aircraft, ships, etc}]{radar}{radar}{radio detecting
+and ranging}
+
+\newacronym[description={device that creates a narrow beam
+of intense light}]{laser}{laser}{light amplification by
+stimulated emission of radiation}
+
+\newacronym[description={portable breathing device for
+divers}]{scuba}{scuba}{self-contained underwater breathing
+apparatus}
+
+\newcommand*{\newinitialism}[4][]{%
+ \newacronym[abbrtype=initialism,#1]{#2}{#3}{#4}%
+}
+
+\newinitialism[description={mathematical manipulation of an
+information signal}]{dsp}{DSP}{digital signal processing}
+\newinitialism[description={device that allows customers of
+financial institutions to perform transactions, such as
+cash withdrawal, without the need for a teller}]{atm}{ATM}
+{automated teller machine}
+
+\newcommand*{\newcontraction}[4][]{%
+ \newacronym[abbrtype=contraction,#1]{#2}{#3}{#4}%
+}
+
+\newcontraction[description={front part of a ship below the
+deck}]{focsle}{fo'c's'le}{forecastle}
+
+\newglossaryentry{apple}{name={apple},description={a fruit}}
+
+\newglossarystyle
+ {mystyle}% style name
+ {% base it on the "list" style
+ \setglossarystyle{list}%
+ \renewcommand*{\glossentry}[2]{%
+ \item[\glsentryitem{##1}%
+ \glstarget{##1}{\glossentryname{##1}}]
+ \ifglshaslong{##1}%
+ { (\abbrtype{##1}: \glsentrylong{##1})\space}{}%
+ \glossentrydesc{##1}\glspostdescription\space ##2}%
+ }
+
+\setglossarystyle{mystyle}
+
+\begin{document}
+
+First use: \gls{radar}, \gls{laser}, \gls{scuba}, \gls{dsp},
+\gls{atm}, \gls{focsle}.
+
+Next use: \gls{radar}, \gls{laser}, \gls{scuba}, \gls{dsp},
+\gls{atm}, \gls{focsle}.
+
+Regular term: \gls{apple}.
+
+\printglossaries
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-storage-abbr-desc.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-storage-abbr.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex
+ % arara: makeglossaries
+ % arara: pdflatex
+\documentclass{article}
+
+\usepackage{glossaries}
+
+\makeglossaries
+
+\glsaddstoragekey
+ {abbrtype}% key/field name
+ {word}% default value if not explicitly set
+ {\abbrtype}% custom command to access the value if required
+
+\newacronymstyle
+ {mystyle}% style name
+ {% Use the generic display
+ \ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}%
+ }
+ {% Put the long form in the description
+ \renewcommand*{\GenericAcronymFields}{description={\the\glslongtok}}%
+ % For the full format, test the value of the "abbrtype" key.
+ % If it's set to "word" put the short form first with
+ % the long form in brackets.
+ \renewcommand*{\genacrfullformat}[2]{%
+ \ifglsfieldeq{##1}{abbrtype}{word}
+ {% is a proper acronym
+ \protect\firstacronymfont{\glsentryshort{##1}}##2\space
+ (\glsentrylong{##1})%
+ }
+ {% is another form of abbreviation
+ \glsentrylong{##1}##2\space
+ (\protect\firstacronymfont{\glsentryshort{##1}})%
+ }%
+ }%
+ % first letter upper case version:
+ \renewcommand*{\Genacrfullformat}[2]{%
+ \ifglsfieldeq{##1}{abbrtype}{word}
+ {% is a proper acronym
+ \protect\firstacronymfont{\Glsentryshort{##1}}##2\space
+ (\glsentrylong{##1})%
+ }
+ {% is another form of abbreviation
+ \Glsentrylong{##1}##2\space
+ (\protect\firstacronymfont{\glsentryshort{##1}})%
+ }%
+ }%
+ % plural
+ \renewcommand*{\genplacrfullformat}[2]{%
+ \ifglsfieldeq{##1}{abbrtype}{word}
+ {% is a proper acronym
+ \protect\firstacronymfont{\glsentryshortpl{##1}}##2\space
+ (\glsentrylong{##1})%
+ }
+ {% is another form of abbreviation
+ \glsentrylongpl{##1}##2\space
+ (\protect\firstacronymfont{\glsentryshortpl{##1}})%
+ }%
+ }%
+ % plural and first letter upper case
+ \renewcommand*{\Genplacrfullformat}[2]{%
+ \ifglsfieldeq{##1}{abbrtype}{word}
+ {% is a proper acronym
+ \protect\firstacronymfont{\Glsentryshortpl{##1}}##2\space
+ (\glsentrylong{##1})%
+ }
+ {% is another form of abbreviation
+ \Glsentrylongpl{##1}##2\space
+ (\protect\firstacronymfont{\glsentryshortpl{##1}})%
+ }%
+ }%
+ % Just use the short form as the name part in the glossary:
+ \renewcommand*{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}}%
+ % Sort by the short form:
+ \renewcommand*{\acronymsort}[2]{##1}%
+ % Just use the surrounding font for the short form:
+ \renewcommand*{\acronymfont}[1]{##1}%
+ % Same for first use:
+ \renewcommand*{\firstacronymfont}[1]{\acronymfont{##1}}%
+ % Default plural suffix if the plural isn't explicitly set
+ \renewcommand*{\acrpluralsuffix}{\glspluralsuffix}%
+ }
+
+\setacronymstyle{mystyle}
+
+ % The default for "abbrtype" is "acronym" so we don't need
+ % this new key for acronyms:
+\newacronym{radar}{radar}{radio detecting and ranging}
+\newacronym{laser}{laser}{light amplification by stimulated
+emission of radiation}
+\newacronym{scuba}{scuba}{self-contained underwater breathing
+apparatus}
+
+\newcommand*{\newinitialism}[4][]{%
+ \newacronym[abbrtype=initialism,#1]{#2}{#3}{#4}%
+}
+
+\newinitialism{dsp}{DSP}{digital signal processing}
+\newinitialism{atm}{ATM}{automated teller machine}
+
+\begin{document}
+
+First use: \gls{radar}, \gls{laser}, \gls{scuba}, \gls{dsp},
+\gls{atm}.
+
+Next use: \gls{radar}, \gls{laser}, \gls{scuba}, \gls{dsp},
+\gls{atm}.
+
+\printglossaries
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-storage-abbr.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+ % arara: pdflatex: { synctex: on }
+\documentclass[a4paper]{report}
+
+\usepackage[plainpages=false,colorlinks]{hyperref}
+\usepackage[toc,style=treenoname,order=word,subentrycounter]{glossaries}
+
+\makeglossaries
+
+\newglossaryentry{Perl}{name=\texttt{Perl},
+sort=Perl, % need a sort key because name contains a command
+description=A scripting language}
+
+\newglossaryentry{glossary}{name=glossary,
+description={\nopostdesc},
+plural={glossaries}}
+
+\newglossaryentry{glossarycol}{
+description={collection of glosses},
+sort={2},
+parent={glossary}}
+
+\newglossaryentry{glossarylist}{
+description={list of technical words},
+sort={1},
+parent={glossary}}
+
+\newglossaryentry{pagelist}{name=page list,
+ % description value has to be enclosed in braces
+ % because it contains commas
+description={a list of individual pages or page ranges
+(e.g.\ 1,2,4,7-9)}}
+
+\newglossaryentry{mtrx}{name=matrix,
+description={rectangular array of quantities},
+ % plural is not simply obtained by appending an s, so specify
+plural=matrices}
+
+ % Entry with a paragraph break in the description:
+ % (If you use \newglossaryentry, the paragraph break
+ % must be identified with \glspar not with \par or a blank line.
+ % It's easier to use \longnewglossaryentry.)
+
+\longnewglossaryentry{par}% label
+{name=paragraph}% options
+{% multi-paragraph description
+distinct section of a piece of writing.
+
+Beginning on new, usually indented, line}
+
+ % entry with two types of plural. Set the plural form to the
+ % form most likely to be used. If you want to use a different
+ % plural, you will need to explicity specify it in \glslink
+\newglossaryentry{cow}{name=cow,
+ % this isn't necessary, as this form (appending an s) is
+ % the default
+plural=cows,
+ % description:
+description={(\emph{pl.}\ cows, \emph{archaic} kine) an adult
+female of any bovine animal}}
+
+\newglossaryentry{bravo}{name={bravo},
+description={\nopostdesc}}
+
+\newglossaryentry{bravo1}{description={cry of approval (pl.\ bravos)},
+sort={1},
+plural={bravos},
+parent=bravo}
+
+\newglossaryentry{bravo2}{description={hired ruffian or killer (pl.\ bravoes)},
+sort={2},
+plural={bravoes},
+parent=bravo}
+
+\newglossaryentry{seal}{%
+ name=seal,%
+ description={sea mammal with flippers that eats fish}
+}
+
+\newglossaryentry{sealion}{%
+ name={sea lion},%
+ description={large seal}%
+}
+
+ % If a value contains a comma, you must use braces to hide
+ % it from the key=value list parser. Take care to avoid
+ % accidentally introducing unwanted space as leading and trailing
+ % spaces within the braces aren't stripped. For example,
+ % text={ spurious space } will result in extra space appearing
+ % when the entry is referenced.
+\newglossaryentry{spuriousspace}{%
+ name={space, spurious},
+ text={spurious space},
+ description={unwanted spaces accidentally introduced by
+uncommented line breaks or attempts to pretty-print the \LaTeX\ code}
+}
+
+\begin{document}
+
+\title{Sample Document Using the glossaries Package}
+\author{Nicola Talbot}
+\pagenumbering{alph}% prevent duplicate page link names if using PDF
+\maketitle
+
+\pagenumbering{roman}
+\tableofcontents
+
+\chapter{Introduction}
+\pagenumbering{arabic}
+
+A \gls{glossarylist} (definition~\glsrefentry{glossarylist}) is a
+very useful addition to any technical document, although a
+\gls{glossarycol} (definition~\glsrefentry{glossarycol}) can also
+simply be a collection of glosses, which is another thing entirely.
+Some documents have multiple \glspl{glossarylist}.
+
+Once you have run your document through \LaTeX, you will then need
+to run the \texttt{.glo} file through \texttt{makeindex} (default)
+or \texttt{xindy}. You will need to set the output file so that the
+indexing application
+creates a \texttt{.gls} file instead of an \texttt{.ind} file, and
+change the name of the log file so that it doesn't overwrite the
+index log file (if you have an index for your document). Rather
+than having to remember all the command line switches, you can call
+the \gls{Perl} script \texttt{makeglossaries} which provides a
+convenient wrapper. See
+\href{https://www.dickimaw-books.com/latex/buildglossaries}{Incorporating makeglossaries or makeglossaries-lite or bib2gls into the document build} for help.
+
+If a comma appears within the name or description, grouping
+must be used, e.g.\ in the description of \gls{pagelist}.
+Be careful about \glspl{spuriousspace} appearing in your code.
+
+\chapter{Plurals and Paragraphs}
+
+Plurals are assumed to have the letter s appended, but if this is
+not the case, as in \glspl{mtrx}, then you need to specify the
+plural when you define the entry. If a term may have multiple
+plurals (for example \glspl{cow}/\glslink{cow}{kine}) then
+define the entry with the plural form most likely to be used and
+explicitly specify the alternative form using \verb|\glslink|
+(e.g.\ \glslink{cow}{kine})
+or \verb|\glsdisp| (e.g.\ \glsdisp{cow}{kine}).
+\Glspl{seal} and \glspl{sealion} have regular plural forms.
+
+\Gls{bravo} is a homograph, but the plural forms are spelt
+differently. The plural of \gls{bravo1}, a cry of approval
+(definition~\glsrefentry{bravo1}), is \glspl{bravo1}, whereas the
+plural of \gls{bravo2}, a hired ruffian or killer
+(definition~\glsrefentry{bravo2}), is \glspl{bravo2}.
+
+\Glspl{par} can cause a problem in commands, so care is needed
+when having a paragraph break in a \gls{glossarylist} entry.
+
+\chapter{Ordering}
+
+There are two types of ordering: word ordering (which places
+``\gls{sealion}'' before ``\gls{seal}'') and letter ordering
+(which places ``\gls{seal}'' before ``\gls{sealion}'').
+
+\printglossaries
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample4col.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+\documentclass[a4paper]{article}
+
+\usepackage[style=long4colheaderborder]{glossaries}
+
+\makeglossaries
+
+\newglossaryentry{w}{name={$w$},
+sort=w,
+description={width},
+symbol=m}
+
+\newglossaryentry{M}{name={$M$},
+sort=M,
+description={mass},
+symbol=kg}
+
+\begin{document}
+
+\printglossaries
+
+The width, \gls{w}, is measured in meters. The mass, \gls{M} is
+measured in kilograms.
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample4col.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sampleaccsupp.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+\documentclass[a4paper]{article}
+
+\usepackage[margin=0.5in]{geometry}
+\usepackage{booktabs}
+\usepackage[acronym]{glossaries-accsupp}
+
+\makeglossaries
+
+\newglossaryentry{dr}{name=Dr,description={Doctor},access={Doctor}}
+
+\newacronym[shortaccess=S V M]{svm}{svm}{support vector machine}
+
+\newacronym{eg}{e.g.}{for example}
+
+\newcommand*{\samplerow}[1]{%
+ \gls{#1} & \gls{#1} & \acrshort{#1} & \acrlong{#1}\\
+ \glsreset{#1}\Gls{#1} & \Gls{#1} & \Acrshort{#1} & \Acrlong{#1}\\
+ \glsreset{#1}\GLS{#1} & \GLS{#1} & \ACRshort{#1} & \ACRlong{#1}\\
+}
+
+\begin{document}
+
+\begin{center}
+\begin{tabular}{lllll}
+\toprule
+\bfseries First & \bfseries Next & \bfseries Short & \bfseries Long
+\\\midrule
+\samplerow{dr}
+\midrule
+\samplerow{eg}
+\midrule
+\samplerow{svm}
+\bottomrule
+\end{tabular}
+\end{center}
+
+
+\printglossaries
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sampleaccsupp.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sampleAcr.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+ % arara: pdflatex: { synctex: on }
+\documentclass[a4paper]{report}
+
+\usepackage[colorlinks,plainpages=false]{hyperref}
+\usepackage[style=long,% use 'long' style for the glossary
+ toc,% add glossary to table of contents
+ ]{glossaries}
+
+\makeglossaries
+
+ % Set the acronym style
+\setacronymstyle{long-sc-short}
+
+\newacronym{svm}% label
+{svm}% abbreviation
+{support vector machine}% long form
+
+\newacronym{ksvm}{ksvm}{kernel support vector machine}
+
+\newacronym{rna}{rna}{ribonukleins\"aure}
+
+\begin{document}
+\tableofcontents
+
+\chapter{Support Vector Machines}
+
+\Glspl{svm} are used widely in the area of pattern recognition.
+Subsequent use: \gls{svm}.
+
+Short version: \acrshort{svm}. Long version: \acrlong{svm}. Full
+version: \acrfull{svm}. Description: \glsentrydesc{svm}.
+
+This is the entry in uppercase: \GLS{svm}.
+
+\chapter{Kernel Support Vector Machines}
+
+The \gls{ksvm} is \ifglsused{svm}{an}{a} \gls{svm} that uses
+the so called ``kernel trick''. Plural: \glspl{ksvm}. Resetting
+acronyms.
+
+\glsresetall
+Possessive: \gls{ksvm}['s].
+Make the glossary entry number bold for this
+one \gls[format=hyperbf]{ksvm}.
+
+\chapter{Short, Long and Full Forms}
+
+These commands don't affect the first use flag:
+
+\begin{center}
+\begin{tabular}{lll}
+ & Unstarred & Starred\\
+acrshort & \acrshort{svm} & \acrshort*{svm}\\
+Acrshort & \Acrshort{svm} & \Acrshort*{svm}\\
+ACRshort & \ACRshort{svm} & \ACRshort*{svm}\\
+acrlong & \acrlong{svm} & \acrlong*{svm}\\
+Acrlong & \Acrlong{svm} & \Acrlong*{svm}\\
+ACRlong & \ACRlong{svm} & \ACRlong*{svm}\\
+acrfull & \acrfull{svm} & \acrfull*{svm}\\
+Acrfull & \Acrfull{svm} & \Acrfull*{svm}\\
+ACRfull & \ACRfull{svm} & \ACRfull*{svm}\\
+\\
+& Insert Unstarred & Insert Starred\\
+acrshort & \acrshort{svm}['s] & \acrshort*{svm}['s]\\
+Acrshort & \Acrshort{svm}['s] & \Acrshort*{svm}['s]\\
+ACRshort & \ACRshort{svm}['s] & \ACRshort*{svm}['s]\\
+acrlong & \acrlong{svm}['s] & \acrlong*{svm}['s]\\
+Acrlong & \Acrlong{svm}['s] & \Acrlong*{svm}['s]\\
+ACRlong & \ACRlong{svm}['s] & \ACRlong*{svm}['s]\\
+acrfull & \acrfull{svm}['s] & \acrfull*{svm}['s]\\
+Acrfull & \Acrfull{svm}['s] & \Acrfull*{svm}['s]\\
+ACRfull & \ACRfull{svm}['s] & \ACRfull*{svm}['s]
+\end{tabular}
+\end{center}
+
+\chapter{Another chapter}
+
+You don't need to worry about makeindex's special characters:
+\gls{rna}.
+
+\printglossary[title={List of Acronyms}]
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sampleAcr.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sampleAcrDesc.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+ % arara: pdflatex: { synctex: on }
+\documentclass[a4paper]{report}
+
+\usepackage[colorlinks,plainpages=false]{hyperref}
+\usepackage[acronym,% create 'acronym' glossary type
+ % The package option "nomain" is used here to suppress the
+ % main glossary, since this example doesn't use it. If you
+ % want to use the main glossary, remove the "nomain" option.
+ nomain,%
+ style=altlist, % use altlist style
+ toc, % add the glossary to the table of contents
+ ]{glossaries}
+
+\makeglossaries
+
+ % Change the acronym style to long-sc-short-desc:
+\setacronymstyle{long-sc-short-desc}
+
+ % Change the "see" items so that they use \acronymfont:
+\renewcommand*{\glsseeitemformat}[1]{\acronymfont{\glsentrytext{#1}}}
+
+ % Not using a font that supports bold smallcaps so change the way
+ % the name is formatted in the glossary:
+
+\renewcommand*{\glsnamefont}[1]{\textmd{#1}}
+
+\newacronym[description={Statistical pattern recognition
+technique~\protect\cite{svm}}, % acronym's description
+]{svm}{svm}{support vector machine}
+
+\newacronym
+ [description={Statistical pattern recognition technique
+ using the ``kernel trick''},% acronym's description
+ see={[see also]{svm}},
+]
+{ksvm}{ksvm}{kernel support vector machine}
+
+\begin{document}
+\tableofcontents
+
+\chapter{Support Vector Machines}
+
+The \gls{svm} is used widely in the area of pattern recognition.
+ % plural form with initial letter in uppercase:
+\Glspl{svm} are \ldots\ (but beware, converting the initial letter to
+upper case for a small caps acronym is sometimes considered
+poor style).
+
+Short version: \acrshort{svm}. Long version: \acrlong{svm}. Full
+version: \acrfull{svm}. Description: \glsentrydesc{svm}.
+
+This is the entry in uppercase: \GLS{svm}.
+
+\chapter{Kernel Support Vector Machines}
+
+The \gls{ksvm} is \ifglsused{svm}{an}{a} \gls{svm} that uses
+the so called ``kernel trick''. This is the entry's description without
+a link: \glsentrydesc{ksvm}.
+
+\glsresetall
+Possessive: \gls{ksvm}['s].
+Make the glossary entry number bold for this
+one \gls[format=hyperbf]{svm}.
+
+\begin{thebibliography}{1}
+\bibitem{svm} \ldots
+\end{thebibliography}
+
+\printglossary
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sampleAcrDesc.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sampleacronyms.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+\documentclass{article}
+
+\usepackage[acronym,acronymlists={main,acronym2}]{glossaries}
+
+\newglossary[alg2]{acronym2}{acr2}{acn2}{Statistical Acronyms}
+
+\makeglossaries
+
+ % Use long (short) acronym style:
+\setacronymstyle{long-short}
+
+ % Main glossary is a list of calculus acronyms
+
+\renewcommand{\glossaryname}{Calculus Acronyms}
+
+\newacronym[type=main]{vc}{VC}{Vector Calculus}
+\newacronym[type=main]{ftoc}{FTOC}{Fundamental Theorem of Calculus}
+
+ % "acronym" glossary is a list of computer related acronyms
+
+\renewcommand{\acronymname}{Computer Acronyms}
+
+\newacronym{kb}{kb}{KiloBit}
+\newacronym{kB}{kB}{KiloByte}
+
+ % "acronym2" glossary is a list of statistical acronyms
+
+\newacronym[type=acronym2]{svm}{SVM}{Support Vector Machine}
+
+\begin{document}
+\section{Sample Section}
+\gls{kb}. \gls{kB}. \gls{vc}. \gls{ftoc}. \gls{svm}.
+
+\gls{kb}. \gls{kB}. \gls{vc}. \gls{ftoc}. \gls{svm}.
+
+\printglossaries
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sampleacronyms.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sampleCustomAcr.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+ % arara: pdflatex: { synctex: on }
+\documentclass[a4paper]{report}
+
+\usepackage[colorlinks,plainpages=false]{hyperref}
+\usepackage[acronym,% create 'acronym' glossary type
+ % The package option "nomain" is used here to suppress the
+ % main glossary, since this example doesn't use it. If you
+ % want to use the main glossary, remove the "nomain" option.
+ nomain,
+ style=altlist, % use altlist style
+ toc, % add the glossary to the table of contents
+ ]{glossaries}
+
+\makeglossaries
+
+ % Define a new acronym style called "altfn" that's based on the
+ % footnote-sc-desc style
+
+\newacronymstyle
+ {altfn}% style name
+ {% Inherit display style from "footnote-sc-desc"
+ \GlsUseAcrEntryDispStyle{footnote-sc-desc}%
+ }%
+ {% Inherit definitions from "footnote-sc-desc"
+ \GlsUseAcrStyleDefs{footnote-sc-desc}%
+ % Modify the first use display styles so they put the long form
+ % followed by the description in the footnote:
+ %
+ % First use of \gls:
+ \renewcommand*{\genacrfullformat}[2]{%
+ \protect\firstacronymfont{\glsentryshort{##1}}##2%
+ \protect\footnote{\glsentrylong{##1}: \glsentrydesc{##1}}%
+ }%
+ % First use of \Gls:
+ \renewcommand*{\Genacrfullformat}[2]{%
+ \firstacronymfont{\Glsentryshort{##1}}##2%
+ \protect\footnote{\glsentrylong{##1}: \glsentrydesc{##1}}%
+ }%
+ % First use of \glspl:
+ \renewcommand*{\genplacrfullformat}[2]{%
+ \protect\firstacronymfont{\glsentryshortpl{##1}}##2%
+ \protect\footnote{\glsentrylongpl{##1}: \glsentrydesc{##1}}%
+ }%
+ % First use of \Glspl:
+ \renewcommand*{\Genplacrfullformat}[2]{%
+ \protect\firstacronymfont{\Glsentryshortpl{##1}}##2%
+ \protect\footnote{\glsentrylongpl{##1}: \glsentrydesc{##1}}%
+ }%
+ % Sort according to long form:
+ \renewcommand*{\acronymsort}[2]{##2}%
+ % Set the name (as displayed in the glossary) to long (short)
+ \renewcommand*{\acronymentry}[1]{%
+ \glsentrylong{##1} (\acronymfont{\glsentryshort{##1}})}%
+ % Since bold small caps isn't supported with this document's
+ % fonts, adjust \acronymfont so that it switches to medium
+ % small caps:
+ \renewcommand{\acronymfont}[1]{\textmd{\scshape ##1}}%
+ }
+
+ % Now use this new style:
+\setacronymstyle{altfn}
+
+ % Change the "see" items so that they use \acronymfont:
+\renewcommand*{\glsseeitemformat}[1]{\acronymfont{\glsentrytext{#1}}}
+
+\newacronym[description={Statistical pattern recognition
+technique~\protect\cite{svm}}, % acronym's description
+]{svm}{svm}{support vector machine}
+
+\newacronym[description={Statistical pattern recognition technique
+using the ``kernel trick''},% acronym's description
+see={[see also]{svm}},
+]{ksvm}{ksvm}{kernel
+support vector machine}
+
+\begin{document}
+\tableofcontents
+
+\chapter{Support Vector Machines}
+
+The \gls{svm} is used widely in the area of pattern recognition.
+ % plural form with initial letter in uppercase:
+\Glspl{svm} are \ldots\ (but beware, converting the initial letter to
+upper case for a small caps acronym is sometimes considered
+poor style).
+
+Short version: \acrshort{svm}. Long version: \acrlong{svm}. Full
+version: \acrfull{svm}. Description: \glsentrydesc{svm}.
+
+This is the entry in uppercase: \GLS{svm}.
+
+\chapter{Kernel Support Vector Machines}
+
+The \gls{ksvm} is \ifglsused{svm}{an}{a} \gls{svm} that uses
+the so called ``kernel trick''. This is the entry's description without
+a link: \glsentrydesc{ksvm}.
+
+\glsresetall
+(Reset all.)
+Possessive: \gls{ksvm}['s].
+Make the glossary entry number bold for this
+one \gls[format=hyperbf]{svm}.
+
+\begin{thebibliography}{1}
+\bibitem{svm} \ldots
+\end{thebibliography}
+
+\printglossary
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sampleCustomAcr.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sampleDB.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+\documentclass{article}
+
+\usepackage[colorlinks,plainpages=false]{hyperref}
+\usepackage[nonumberlist]{glossaries}
+
+\newglossary[nlg]{symbols}{not}{ntn}{Symbols}
+
+\makeglossaries
+
+\loadglsentries{database1}
+\loadglsentries[symbols]{database2}
+
+\begin{document}
+
+\glsaddall
+
+\printglossaries
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sampleDB.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sampleDesc.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ %
+ % See also sampleAcrDesc.tex
+ %
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+ % arara: pdflatex: { synctex: on }
+\documentclass[a4paper]{report}
+
+\usepackage[colorlinks,plainpages=false]{hyperref}
+
+\usepackage[style=altlist, % use altlist style
+ toc % add the glossary to the table of contents
+ ]{glossaries}
+
+\makeglossaries
+
+\newglossaryentry{svm}{
+ % how the entry name should appear in the glossary
+name={Support vector machine (SVM)},
+ % how the description should appear in the glossary
+description={Statistical pattern recognition
+technique~\cite{svm}},
+ % how the entry should appear in the document text
+text={svm},
+ % how the entry should appear the first time it is
+ % used in the document text
+first={support vector machine (svm)}}
+
+\newglossaryentry{ksvm}{
+name={Kernel support vector machine (KSVM)},
+description={Statistical pattern recognition technique
+using the ``kernel trick'' (see also SVM)},
+text={ksvm},
+first={kernel support vector machine}}
+
+\begin{document}
+\tableofcontents
+
+\chapter{Support Vector Machines}
+
+The \gls{svm} is used widely in the area of pattern recognition.
+ % plural form with initial letter in uppercase:
+\Glspl{svm} are \ldots
+
+This is the text produced without a link: \glsentrytext{svm}.
+This is the text produced on first use without a link:
+\glsentryfirst{svm}. This is the entry's description without
+a link: \glsentrydesc{svm}.
+
+This is the entry in uppercase: \GLS{svm}.
+
+\chapter{Kernel Support Vector Machines}
+
+The \gls{ksvm} is \ifglsused{svm}{an}{a} \gls{svm} that uses
+the so called ``kernel trick''.
+
+\glsresetall
+Possessive: \gls{ksvm}['s].
+Make the glossary entry number bold for this
+one \gls[format=hyperbf]{svm}.
+
+\begin{thebibliography}{1}
+\bibitem{svm} \ldots
+\end{thebibliography}
+
+\printglossary[title={Acronyms}]
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sampleDesc.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sampleEq.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+\documentclass[a4paper,12pt]{report}
+
+\usepackage{amsmath}
+\usepackage[colorlinks]{hyperref}
+\usepackage[xindy,toc,ucmark,style=long3colheader,counter=equation]{glossaries}
+
+\makeglossaries
+
+\newcommand{\erf}{\operatorname{erf}}
+\newcommand{\erfc}{\operatorname{erfc}}
+
+\pagestyle{headings}
+
+ % redefine the way hyperref creates the target for equations
+ % so that the glossary links to equation numbers work
+
+ \renewcommand*\theHequation{\theHchapter.\arabic{equation}}
+
+ % Change the glossary headings
+
+\renewcommand{\entryname}{Notation}
+\renewcommand{\descriptionname}{Function Name}
+\renewcommand{\pagelistname}{Number of Formula}
+
+ % define glossary entries
+
+\newglossaryentry{Gamma}{name=\ensuremath{\Gamma(z)},
+description=Gamma function,
+sort=Gamma}
+
+\newglossaryentry{gamma}{name={\ensuremath{\gamma(\alpha,x)}},
+description=Incomplete gamma function,
+sort=gamma1}
+
+\newglossaryentry{iGamma}{name={\ensuremath{\Gamma(\alpha,x)}},
+description=Incomplete gamma function,
+sort=Gamma2}
+
+\newglossaryentry{psi}{name=\ensuremath{\psi(x)},
+description=Psi function,sort=psi}
+
+\newglossaryentry{erf}{name=\ensuremath{\erf(x)},
+description=Error function,sort=erf}
+
+\newglossaryentry{erfc}{name=\ensuremath{\erfc},
+description=Complementary error function,sort=erfc}
+
+\newglossaryentry{B}{name={\ensuremath{B(x,y)}},
+description=Beta function,sort=B}
+
+\newglossaryentry{Bx}{name={\ensuremath{B_x(p,q)}},
+description=Incomplete beta function,sort=Bx}
+
+\newglossaryentry{Tn}{name=\ensuremath{T_n(x)},
+description=Chebyshev's polynomials of the first kind,sort=Tn}
+
+\newglossaryentry{Un}{name=\ensuremath{U_n(x)},
+description=Chebyshev's polynomials of the second kind,sort=Un}
+
+\newglossaryentry{Hn}{name=\ensuremath{H_n(x)},
+description=Hermite polynomials,sort=Hn}
+
+\newglossaryentry{Ln}{name=\ensuremath{L_n^\alpha(x)},
+description=Laguerre polynomials,sort=Lna}
+
+\newglossaryentry{Znu}{name=\ensuremath{Z_\nu(z)},
+description=Bessel functions,sort=Z}
+
+\newglossaryentry{Phi}{name={\ensuremath{\Phi(\alpha,\gamma;z)}},
+description=confluent hypergeometric function,sort=Pagz}
+
+\newglossaryentry{knu}{name=\ensuremath{k_\nu(x)},
+description=Bateman's function,sort=kv}
+
+\newglossaryentry{Dp}{name=\ensuremath{D_p(z)},
+description=Parabolic cylinder functions,sort=Dp}
+
+\newglossaryentry{F}{name={\ensuremath{F(\phi,k)}},
+description=Elliptical integral of the first kind,sort=Fpk}
+
+\newglossaryentry{C}{name=\ensuremath{C},
+description=Euler's constant,sort=C}
+
+\newglossaryentry{G}{name=\ensuremath{G},
+description=Catalan's constant,sort=G}
+
+\begin{document}
+\title{A Sample Document Using glossaries.sty}
+\author{Nicola Talbot}
+\maketitle
+
+\begin{abstract}
+This is a sample document illustrating the use of the \textsf{glossaries}
+package. The functions here have been taken from ``Tables of
+Integrals, Series, and Products'' by I.S.~Gradshteyn and I.M~Ryzhik.
+The glossary is a list of special functions, so
+the equation number has been used rather than the page number. This
+can be done using the \texttt{counter=equation} package
+option.
+\end{abstract}
+
+\printglossary[title={Index of Special Functions and Notations}]
+
+\chapter{Gamma Functions}
+
+\begin{equation}
+\gls{Gamma} = \int_{0}^{\infty}e^{-t}t^{z-1}\,dt
+\end{equation}
+
+\verb|\ensuremath| is only required here if using
+hyperlinks.
+\begin{equation}
+\glslink{Gamma}{\ensuremath{\Gamma(x+1)}} = x\Gamma(x)
+\end{equation}
+
+\begin{equation}
+\gls{gamma} = \int_0^x e^{-t}t^{\alpha-1}\,dt
+\end{equation}
+
+\begin{equation}
+\gls{iGamma} = \int_x^\infty e^{-t}t^{\alpha-1}\,dt
+\end{equation}
+
+\newpage
+
+\begin{equation}
+\gls{Gamma} = \Gamma(\alpha, x) + \gamma(\alpha, x)
+\end{equation}
+
+\begin{equation}
+\gls{psi} = \frac{d}{dx}\ln\Gamma(x)
+\end{equation}
+
+\chapter{Error Functions}
+
+\begin{equation}
+\gls{erf} = \frac{2}{\surd\pi}\int_0^x e^{-t^2}\,dt
+\end{equation}
+
+\begin{equation}
+\gls{erfc} = 1 - \erf(x)
+\end{equation}
+
+\chapter{Beta Function}
+
+\begin{equation}
+\gls{B} = 2\int_0^1 t^{x-1}(1-t^2)^{y-1}\,dt
+\end{equation}
+Alternatively:
+\begin{equation}
+\gls{B} = 2\int_0^{\frac\pi2}\sin^{2x-1}\phi\cos^{2y-1}\phi\,d\phi
+\end{equation}
+
+\begin{equation}
+\gls{B} = \frac{\Gamma(x)\Gamma(y)}{\Gamma(x+y)} = B(y,x)
+\end{equation}
+
+\begin{equation}
+\gls{Bx} = \int_0^x t^{p-1}(1-t)^{q-1}\,dt
+\end{equation}
+
+\chapter{Polynomials}
+
+\section{Chebyshev's polynomials}
+
+\begin{equation}
+\gls{Tn} = \cos(n\arccos x)
+\end{equation}
+
+\begin{equation}
+\gls{Un} = \frac{\sin[(n+1)\arccos x]}{\sin[\arccos x]}
+\end{equation}
+
+\section{Hermite polynomials}
+
+\begin{equation}
+\gls{Hn} = (-1)^n e^{x^2} \frac{d^n}{dx^n}(e^{-x^2})
+\end{equation}
+
+\section{Laguerre polynomials}
+
+\begin{equation}
+L_n^{\alpha} (x) = \frac{1}{n!}e^x x^{-\alpha}
+\frac{d^n}{dx^n}(e^{-x}x^{n+\alpha})
+\end{equation}
+
+\chapter{Bessel Functions}
+
+Bessel functions $Z_\nu$ are solutions of
+\begin{equation}
+\frac{d^2\glslink{Znu}{Z_\nu}}{dz^2}
++ \frac{1}{z}\,\frac{dZ_\nu}{dz} +
+\left( 1-\frac{\nu^2}{z^2}Z_\nu = 0 \right)
+\end{equation}
+
+\chapter{Confluent hypergeometric function}
+
+\begin{equation}
+\gls{Phi} = 1 + \frac{\alpha}{\gamma}\,\frac{z}{1!}
++ \frac{\alpha(\alpha+1)}{\gamma(\gamma+1)}\,\frac{z^2}{2!}
++\frac{\alpha(\alpha+1)(\alpha+2)}{\gamma(\gamma+1)(\gamma+2)}\,
+\frac{z^3}{3!} + \cdots
+\end{equation}
+
+\begin{equation}
+\gls{knu} = \frac{2}{\pi}\int_0^{\pi/2}
+\cos(x \tan\theta - \nu\theta)\,d\theta
+\end{equation}
+
+\chapter{Parabolic cylinder functions}
+
+\begin{equation}
+\gls{Dp} = 2^{\frac{p}{2}}e^{-\frac{z^2}{4}}
+\left\{
+\frac{\surd\pi}{\Gamma\left(\frac{1-p}{2}\right)}
+\Phi\left(-\frac{p}{2},\frac{1}{2};\frac{z^2}{2}\right)
+-\frac{\sqrt{2\pi}z}{\Gamma\left(-\frac{p}{2}\right)}
+\Phi\left(\frac{1-p}{2},\frac{3}{2};\frac{z^2}{2}\right)
+\right\}
+\end{equation}
+
+\chapter{Elliptical Integral of the First Kind}
+
+\begin{equation}
+\gls{F} = \int_0^\phi \frac{d\alpha}{\sqrt{1-k^2\sin^2\alpha}}
+\end{equation}
+
+\chapter{Constants}
+
+\begin{equation}
+\gls{C} = 0.577\,215\,664\,901\ldots
+\end{equation}
+
+\begin{equation}
+\gls{G} = 0.915\,965\,594\ldots
+\end{equation}
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sampleEq.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sampleEqPg.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ %
+ % To ensure that the page numbers are up-to-date:
+ %
+ % latex sampleEqPg
+ % makeglossaries sampleEqPg
+ % latex sampleEqPg
+ % makeglossaries sampleEqPg
+ % latex sampleEqPg
+ %
+ % The extra makeglossaries run is required because adding the
+ % glossary in the second LaTeX run shifts the page numbers on
+ % which means that the glossary needs to be updated again.
+ % (Note that this problem is avoided if the page numbering is
+ % reset after the glossary. For example, if the glossary has
+ % roman numbering and the subsequent pages have arabic numbering)
+ %
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+\documentclass[a4paper,12pt]{report}
+
+\usepackage{amsmath}
+\usepackage[colorlinks]{hyperref}
+\usepackage[style=long3colheader,toc,
+ counter=equation]{glossaries}
+
+\newcommand{\erf}{\operatorname{erf}}
+\newcommand{\erfc}{\operatorname{erfc}}
+
+ % redefine the way hyperref creates the target for equations
+ % so that the glossary links to equation numbers work
+
+\renewcommand*\theHequation{\thechapter.\arabic{equation}}
+
+\renewcommand{\glossaryname}{Index of Special Functions and Notations}
+
+\renewcommand{\glossarypreamble}{Numbers in italic indicate the equation number,
+numbers in bold indicate page numbers where the main definition occurs.\par}
+
+ % set the glossary number style to italic
+ % hyperit is used instead of textit because
+ % the hyperref package is being used.
+\renewcommand{\glsnumberformat}[1]{\hyperit{#1}}
+
+ % 1st column heading
+\renewcommand{\entryname}{Notation}
+
+ % 2nd column heading
+\renewcommand{\descriptionname}{Function Name}
+
+ % 3rd column heading
+\renewcommand{\pagelistname}{}
+
+ % Redefine header row so that it
+ % adds a blank row after the title row
+\renewcommand{\glossaryheader}{\bfseries\entryname &
+\bfseries\descriptionname&\bfseries\pagelistname\\
+& & \\\endhead}
+
+ % Define glossary entries
+
+\newglossaryentry{Gamma}{name=\ensuremath{\Gamma(z)},
+description=Gamma function,sort=Gamma}
+
+\newglossaryentry{gamma}{name=\ensuremath{\gamma(\alpha,x)},
+description=Incomplete gamma function,sort=gamma}
+
+\newglossaryentry{iGamma}{name=\ensuremath{\Gamma(\alpha,x)},
+description=Incomplete gamma function,sort=Gamma}
+
+\newglossaryentry{psi}{name=\ensuremath{\psi(x)},
+description=Psi function,sort=psi}
+
+\newglossaryentry{erf}{name=\ensuremath{\erf(x)},
+description=Error function,sort=erf}
+
+\newglossaryentry{erfc}{name=\ensuremath{\erfc(x)},
+description=Complementary error function,sort=erfc}
+
+\newglossaryentry{beta}{name=\ensuremath{B(x,y)},
+description=Beta function,sort=B}
+
+\newglossaryentry{Bx}{name=\ensuremath{B_x(p,q)},
+description=Incomplete beta function,sort=Bx}
+
+\newglossaryentry{Tn}{name=\ensuremath{T_n(x)},
+description=Chebyshev's polynomials of the first kind,
+sort=Tn}
+
+\newglossaryentry{Un}{name=\ensuremath{U_n(x)},
+description=Chebyshev's polynomials of the second kind,
+sort=Un}
+
+\newglossaryentry{Hn}{name=\ensuremath{H_n(x)},
+description=Hermite polynomials,sort=Hn}
+
+\newglossaryentry{Lna}{name=\ensuremath{L_n^\alpha(x)},
+description=Laguerre polynomials,sort=Lna}
+
+\newglossaryentry{Znu}{name=\ensuremath{Z_\nu(z)},
+description=Bessel functions,sort=Z}
+
+\newglossaryentry{Pagz}{name=\ensuremath{\Phi(\alpha,\gamma;z)},
+description=confluent hypergeometric function,sort=Pagz}
+
+\newglossaryentry{kv}{name=\ensuremath{k_\nu(x)},
+description=Bateman's function,sort=kv}
+
+\newglossaryentry{Dp}{name=\ensuremath{D_p(z)},
+description=Parabolic cylinder functions,sort=Dp}
+
+\newglossaryentry{Fpk}{name=\ensuremath{F(\phi,k)},
+description=Elliptical integral of the first kind,sort=Fpk}
+
+\newglossaryentry{C}{name=\ensuremath{C},
+description=Euler's constant,sort=C}
+
+\newglossaryentry{G}{name=\ensuremath{G},
+description=Catalan's constant,sort=G}
+
+\makeglossaries
+
+\pagestyle{headings}
+
+\begin{document}
+
+\title{Sample Document Using Interchangable Numbering}
+\author{Nicola Talbot}
+\maketitle
+
+\begin{abstract}
+This is a sample document illustrating the use of the \textsf{glossaries}
+package. The functions here have been taken from ``Tables of
+Integrals, Series, and Products'' by I.S.~Gradshteyn and I.M~Ryzhik.
+
+The glossary lists both page numbers and equation numbers.
+Since the majority of the entries use the equation number,
+\texttt{counter=equation} was used as a package option.
+Note that this example will only work where the
+page number and equation number compositor is the same. So
+it won't work if, say, the page numbers are of the form
+2-4 and the equation numbers are of the form 4.6.
+As most of the glossary entries should have an italic
+format, it is easiest to set the default format to
+italic.
+
+\end{abstract}
+
+\tableofcontents
+
+\printglossary[toctitle={Special Functions}]
+
+\chapter{Gamma Functions}
+
+The \glslink[format=hyperbf,counter=page]{Gamma}{gamma function} is
+defined as
+\begin{equation}
+\gls{Gamma} = \int_{0}^{\infty}e^{-t}t^{z-1}\,dt
+\end{equation}
+
+\begin{equation}
+\glslink{Gamma}{\ensuremath{\Gamma(x+1)}} = x\Gamma(x)
+\end{equation}
+
+\begin{equation}
+\gls{gamma} = \int_0^x e^{-t}t^{\alpha-1}\,dt
+\end{equation}
+
+\begin{equation}
+\gls{iGamma} = \int_x^\infty e^{-t}t^{\alpha-1}\,dt
+\end{equation}
+
+\newpage
+
+\begin{equation}
+\glslink{Gamma}{\ensuremath{\Gamma(\alpha)}} =
+\Gamma(\alpha, x) + \gamma(\alpha, x)
+\end{equation}
+
+\begin{equation}
+\gls{psi} = \frac{d}{dx}\ln\Gamma(x)
+\end{equation}
+
+\chapter{Error Functions}
+
+The \glslink[format=hyperbf,counter=page]{erf}{error function} is defined as:
+\begin{equation}
+\gls{erf} = \frac{2}{\surd\pi}\int_0^x e^{-t^2}\,dt
+\end{equation}
+
+\begin{equation}
+\gls{erfc} = 1 - \erf(x)
+\end{equation}
+
+\chapter{Beta Function}
+
+\begin{equation}
+\gls{beta} = 2\int_0^1 t^{x-1}(1-t^2)^{y-1}\,dt
+\end{equation}
+Alternatively:
+\begin{equation}
+\gls{beta} = 2\int_0^{\frac\pi2}\sin^{2x-1}\phi\cos^{2y-1}\phi\,d\phi
+\end{equation}
+
+\begin{equation}
+\gls{beta} = \frac{\Gamma(x)\Gamma(y)}{\Gamma(x+y)} = B(y,x)
+\end{equation}
+
+\begin{equation}
+\gls{Bx} = \int_0^x t^{p-1}(1-t)^{q-1}\,dt
+\end{equation}
+
+\chapter{Chebyshev's polynomials}
+
+\begin{equation}
+\gls{Tn} = \cos(n\arccos x)
+\end{equation}
+
+\begin{equation}
+\gls{Un} = \frac{\sin[(n+1)\arccos x]}{\sin[\arccos x]}
+\end{equation}
+
+\chapter{Hermite polynomials}
+
+\begin{equation}
+\gls{Hn} = (-1)^n e^{x^2} \frac{d^n}{dx^n}(e^{-x^2})
+\end{equation}
+
+\chapter{Laguerre polynomials}
+
+\begin{equation}
+\gls{Lna} = \frac{1}{n!}e^x x^{-\alpha}
+\frac{d^n}{dx^n}(e^{-x}x^{n+\alpha})
+\end{equation}
+
+\chapter{Bessel Functions}
+
+Bessel functions $Z_\nu(z)$ are solutions of
+\begin{equation}
+\frac{d^2\glslink{Znu}{Z_\nu}}{dz^2} + \frac{1}{z}\,\frac{dZ_\nu}{dz} +
+\left(
+1-\frac{\nu^2}{z^2}Z_\nu = 0
+\right)
+\end{equation}
+
+\chapter{Confluent hypergeometric function}
+
+\begin{equation}
+\gls{Pagz} = 1 + \frac{\alpha}{\gamma}\,\frac{z}{1!}
++ \frac{\alpha(\alpha+1)}{\gamma(\gamma+1)}\,\frac{z^2}{2!}
++\frac{\alpha(\alpha+1)(\alpha+2)}
+ {\gamma(\gamma+1)(\gamma+2)}
+\,\frac{z^3}{3!}
++ \cdots
+\end{equation}
+
+\begin{equation}
+\gls{kv} = \frac{2}{\pi}\int_0^{\pi/2}
+\cos(x \tan\theta - \nu\theta)\,d\theta
+\end{equation}
+
+\chapter{Parabolic cylinder functions}
+
+\begin{equation}
+\gls{Dp} = 2^{\frac{p}{2}}e^{-\frac{z^2}{4}}
+\left\{
+\frac{\surd\pi}{\Gamma\left(\frac{1-p}{2}\right)}
+\Phi\left(-\frac{p}{2},\frac{1}{2};\frac{z^2}{2}\right)
+-\frac{\sqrt{2\pi}z}{\Gamma\left(-\frac{p}{2}\right)}
+\Phi\left(\frac{1-p}{2},\frac{3}{2};\frac{z^2}{2}\right)
+\right\}
+\end{equation}
+
+\chapter{Elliptical Integral of the First Kind}
+
+\begin{equation}
+\gls{Fpk} = \int_0^\phi
+\frac{d\alpha}{\sqrt{1-k^2\sin^2\alpha}}
+\end{equation}
+
+\chapter{Constants}
+
+\begin{equation}
+\gls{C} = 0.577\,215\,664\,901\ldots
+\end{equation}
+
+\begin{equation}
+\gls{G} = 0.915\,965\,594\ldots
+\end{equation}
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sampleEqPg.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sampleFnAcrDesc.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+ % arara: pdflatex: { synctex: on }
+\documentclass[a4paper]{report}
+
+\usepackage[colorlinks,plainpages=false]{hyperref}
+\usepackage[acronym,% create 'acronym' glossary type
+ % The package option "nomain" is used here to suppress the
+ % main glossary, since this example doesn't use it. If you
+ % want to use the main glossary, remove the "nomain" option.
+ nomain,
+ style=altlist, % use altlist style
+ toc, % add the glossary to the table of contents
+ ]{glossaries}
+
+\makeglossaries
+
+ % Change the acronym style to a small-caps footnote style:
+\setacronymstyle{footnote-sc-desc}
+
+ % Make some minor adjustments to the style:
+\renewcommand*{\acronymsort}[2]{#1}% sort by short form
+\renewcommand*{\acronymentry}[1]{%
+ \acronymfont{\glsentryshort{#1}}\space (\glsentrylong{#1})}
+
+ % Not using a font that supports bold smallcaps so ensure
+ % the acronym is always in medium weight.
+\renewcommand*{\acronymfont}[1]{\textmd{\scshape #1}}
+
+ % Change the "see" items so that they use \acronymfont:
+\renewcommand*{\glsseeitemformat}[1]{\acronymfont{\glsentrytext{#1}}}
+
+
+\newacronym[description={Statistical pattern recognition
+technique~\protect\cite{svm}}, % acronym's description
+]{svm}{svm}{support vector machine}
+
+\newacronym[description={Statistical pattern recognition technique
+using the ``kernel trick''},% acronym's description
+see={[see also]{svm}},
+]{ksvm}{ksvm}{kernel
+support vector machine}
+
+\begin{document}
+\tableofcontents
+
+\chapter{Support Vector Machines}
+
+The \gls{svm} is used widely in the area of pattern recognition.
+ % plural form with initial letter in uppercase:
+\Glspl{svm} are \ldots\ (but beware, converting the initial letter to
+upper case for a small caps acronym is sometimes considered
+poor style).
+
+Short version: \acrshort{svm}. Long version: \acrlong{svm}. Full
+version: \acrfull{svm}. Description: \glsentrydesc{svm}.
+
+This is the entry in uppercase: \GLS{svm}.
+
+\chapter{Kernel Support Vector Machines}
+
+The \gls{ksvm} is \ifglsused{svm}{an}{a} \gls{svm} that uses
+the so called ``kernel trick''. This is the entry's description without
+a link: \glsentrydesc{ksvm}.
+
+\glsresetall
+Possessive: \gls{ksvm}['s].
+Make the glossary entry number bold for this
+one \gls[format=hyperbf]{svm}.
+
+\begin{thebibliography}{1}
+\bibitem{svm} \ldots
+\end{thebibliography}
+
+\printglossary
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sampleFnAcrDesc.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sampleNtn.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+ % arara: pdflatex: { synctex: on }
+\documentclass{report}
+
+ % If you want to add babel to this document, you may have to
+ % replace the : character in the labels if you are using a
+ % language setting (e.g. french) that makes : active.
+
+\usepackage[plainpages=false,colorlinks]{hyperref}
+\usepackage{html}
+\usepackage[toc,xindy]{glossaries}
+
+ % Define a new glossary type called notation
+\newglossary[nlg]{notation}{not}{ntn}{Notation}
+
+\makeglossaries
+
+ % Notation definitions
+
+\newglossaryentry{not:set}{type=notation, % glossary type
+name={$\mathcal{S}$},
+description={A set},
+sort={S}}
+
+\newglossaryentry{not:U}{type=notation,
+name={$\mathcal{U}$},
+description={The universal set},
+sort=U}
+
+\newglossaryentry{not:card}{type=notation,
+name={$|\mathcal{S}|$},
+description={cardinality of $\mathcal{S}$},
+sort=cardinality}
+
+\newglossaryentry{not:fact}{type=notation,
+name={$!$},
+description={factorial},
+sort=factorial}
+
+ % Main glossary definitions
+
+\newglossaryentry{gls:set}{name=set,
+description={A collection of distinct objects}}
+
+\newglossaryentry{gls:card}{name=cardinality,
+description={The number of elements in the specified set}}
+
+\begin{document}
+\title{Sample Document using the glossaries Package}
+\author{Nicola Talbot}
+\pagenumbering{alph}
+\maketitle
+
+\begin{abstract}
+ %stop hyperref complaining about duplicate page identifiers:
+\pagenumbering{Alph}
+This is a sample document illustrating the use of the
+\textsf{glossaries} package. In this example, a new glossary type
+called \texttt{notation} is defined, so that the document can have a
+separate glossary of terms and index of notation. The index of notation
+doesn't have associated numbers.
+\end{abstract}
+
+
+\pagenumbering{roman}
+\tableofcontents
+
+\printglossaries
+
+\chapter{Introduction}
+\pagenumbering{arabic}
+
+\Glspl{gls:set} are denoted by a calligraphic font
+e.g.\ \gls{not:set}.
+
+Let \gls[format=hyperit]{not:U} denote the universal set.
+
+The \gls{gls:card} of a set $\mathcal{S}$ is denoted
+\gls{not:card}.
+
+\chapter{Another Chapter}
+
+Another mention of the universal set \gls{not:U}.
+
+The factorial symbol: \gls{not:fact}.
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sampleNtn.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*samplePeople.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you are using arara, you need the following directives:
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+ % arara: pdflatex: { synctex: on }
+\documentclass{report}
+
+\usepackage[colorlinks]{hyperref}
+\usepackage[toc,style=listgroup]{glossaries}
+
+\makeglossaries
+
+\newcommand{\sortname}[2]{#2, #1}
+\newcommand{\textname}[2]{#1 #2}
+
+ % Syntax: \name{first name}{surname}
+ \let\name\textname
+
+\renewcommand{\glsprestandardsort}[3]{%
+ \let\name\sortname
+ \edef#1{\expandafter\expandonce\expandafter{#1}}%
+ \let\name\textname
+ \glsdosanitizesort
+}
+
+\newglossaryentry{joebloggs}{name={\name{Joe}{Bloggs}},description={\nopostdesc}}
+
+\newglossaryentry{johnsmith}{name={\name{John}{Smith}},description={\nopostdesc}}
+
+\newglossaryentry{zoeadams}{name={\name{Zo\'e}{Adams}},description={\nopostdesc}}
+
+\newglossaryentry{maryadams}{name={\name{Mary}{Adams}},description={\nopostdesc}}
+
+\begin{document}
+\tableofcontents
+
+\chapter{\glsentrytext{joebloggs}}
+
+\gls{joebloggs} was a fairly ordinary person.
+
+\chapter{\glsentrytext{johnsmith}}
+
+\gls{johnsmith} was great friends with \gls{joebloggs}.
+
+\chapter{\glsentrytext{maryadams}}
+
+\gls{maryadams} worked with \gls{johnsmith} but never met
+\gls{joebloggs}.
+
+\chapter{\glsentrytext{zoeadams}}
+
+\gls{zoeadams} was \gls{maryadams}['s] sister.
+\printglossaries
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</samplePeople.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sampleSec.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+ % arara: pdflatex: { synctex: on }
+\documentclass{report}
+
+\usepackage[plainpages=false,colorlinks]{hyperref}
+\usepackage[style=altlist,toc,counter=section]{glossaries}
+
+\makeglossaries
+
+\newglossaryentry{ident}{name=identity matrix,
+description=diagonal matrix with 1s along the leading diagonal,
+plural=identity matrices}
+
+\newglossaryentry{diag}{name=diagonal matrix,
+description=matrix whose only non-zero entries are along
+the leading diagonal,
+plural=diagonal matrices}
+
+\newglossaryentry{sing}{name=singular matrix,
+description=matrix with zero determinant,
+plural=singular matrices}
+
+\begin{document}
+
+\pagenumbering{roman}
+\tableofcontents
+
+\printglossaries
+
+\chapter{Introduction}
+\pagenumbering{arabic}
+This is a sample document illustrating the use of the
+\textsf{glossaries} package.
+
+\chapter{Diagonal matrices}
+
+A \gls[format=hyperit]{diag} is a matrix where all elements not on the
+leading diagonal are zero. This is the
+primary definition, so an italic font is used for the page number.
+
+\newpage
+\section{Identity matrix}
+The \gls[format=hyperit]{ident} is a \gls{diag} whose leading
+diagonal elements are all equal to 1.
+
+Here is another entry for a \gls{diag}. And this is the
+plural: \glspl{ident}.
+
+This adds an entry into the glossary with a bold number, but
+it doesn't create a hyperlink: \gls*[format=hyperbf]{ident}.
+
+\chapter{Singular Matrices}
+
+A \gls{sing} is a matrix with zero determinant.
+\Glspl{sing} are non-invertible. Possessive:
+a \gls{sing}['s] dimensions are not necessarily equal.
+
+Another \gls{ident} entry.
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sampleSec.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sampleSort.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+ % arara: pdflatex: { synctex: on }
+\documentclass{report}
+
+ % If you want to add babel to this document, you may have to
+ % replace the : character in the labels if you are using a
+ % language setting (e.g. french) that makes : active.
+
+\usepackage[plainpages=false,colorlinks]{hyperref}
+\usepackage[toc,acronym]{glossaries}
+
+ % Define a new glossary type called notation
+\newglossary[nlg]{notation}{not}{ntn}{Notation}
+
+\makeglossaries
+
+\newcounter{sortcount}
+
+\renewcommand{\glsprestandardsort}[3]{%
+ \ifdefstring{#2}{notation}%
+ {%
+ \stepcounter{sortcount}%
+ \edef#1{\glssortnumberfmt{\arabic{sortcount}}}%
+ }%
+ {%
+ \glsdosanitizesort
+ }%
+}
+
+ % Notation definitions
+
+\newglossaryentry{not:set}{type=notation, % glossary type
+name={$\mathcal{S}$},
+text={\mathcal{S}},
+description={A set}}
+
+\newglossaryentry{not:emptyset}{type=notation,
+name={$\emptyset$},
+text={\emptyset},
+description={The empty set}}
+
+\newglossaryentry{not:card}{type=notation,
+name={$|\mathcal{S}|$},
+text={|\mathcal{S}|},
+description={cardinality of $\mathcal{S}$}}
+
+ % Main glossary definitions
+
+\newglossaryentry{gls:set}{name=set,
+description={A collection of distinct objects}}
+
+\newglossaryentry{gls:card}{name=cardinality,
+description={The number of elements in the specified set}}
+
+ % Acronym definitions
+
+\newacronym{zfc}{ZFC}{Zermelo-Fraenkel set theory}
+
+\newacronym{ad}{AD}{axiom of determinacy}
+
+\newacronym{nf}{NF}{new foundations}
+
+\begin{document}
+\title{Sample Document using the glossaries Package}
+\author{Nicola Talbot}
+\pagenumbering{alph}
+\maketitle
+
+\begin{abstract}
+ %stop hyperref complaining about duplicate page identifiers:
+\pagenumbering{Alph}
+This is a sample document illustrating the use of the
+\textsf{glossaries} package. In this example, a new glossary type
+called \texttt{notation} is defined, so that the document can have a
+separate glossary of terms, list of acronyms and index of notation.
+\end{abstract}
+
+
+\pagenumbering{roman}
+\tableofcontents
+
+\printglossaries
+
+\chapter{Introduction}
+\pagenumbering{arabic}
+
+\Glspl{gls:set} are denoted by a calligraphic font
+e.g.\ $\gls{not:set}$.
+
+The \gls{gls:card} of a set $\mathcal{S}$ is denoted
+$\gls{not:card}$. The empty set is denoted
+$\gls{not:emptyset}$.
+
+Here are some acronyms: \gls{nf}, \gls{zfc} and \gls{ad}.
+
+\chapter{Another Chapter}
+
+Another mention of the empty set $\gls{not:emptyset}$.
+
+Here are the acronyms again: \gls{nf}, \gls{zfc} and \gls{ad}.
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sampleSort.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sampletree.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+\documentclass{report}
+
+\usepackage[colorlinks]{hyperref}
+\usepackage[style=alttreehypergroup,nolong,nosuper]{glossaries}
+
+ % The alttree type of glossary styles need to know the
+ % widest entry name for each level
+\glssetwidest{Roman letters} % level 0 widest name
+\glssetwidest[1]{Sigma} % level 1 widest name
+
+\makeglossaries
+
+\newglossaryentry{greekletter}{name={Greek letters},
+text={Greek letter},
+description={\nopostdesc}}
+
+\newglossaryentry{sigma}{name={Sigma},
+text={\ensuremath{\Sigma}},
+first={\ensuremath{\Sigma} (uppercase sigma)},
+symbol={\ensuremath{\Sigma}},
+description={Used to indicate summation},
+parent=greekletter}
+
+\newglossaryentry{pi}{name={pi},
+text={\ensuremath{\pi}},
+first={\ensuremath{\pi} (lowercase pi)},
+symbol={\ensuremath{\pi}},
+description={Transcendental number},
+parent=greekletter}
+
+\newglossaryentry{romanletter}{name={Roman letters},
+text={Roman letter},
+description={\nopostdesc}}
+
+\newglossaryentry{e}{name={e},
+description={Unique real number such that the derivative of
+the function $e^x$ is the function itself},
+parent=romanletter}
+
+\newglossaryentry{C}{name={C},
+description={Euler's constant},
+parent=romanletter}
+
+\begin{document}
+This is a sample document illustrating hierarchical glossary
+entries.
+
+\chapter{Greek Letters Used in Mathematics}
+
+Some information about \glspl{greekletter}.
+The letter \gls{pi} is used to represent the ratio of a circle's
+circumference to its diameter.
+The letter \gls{sigma} is used to represent summation.
+
+\chapter{Roman Letters Used in Mathematics}
+
+Some information about \glspl{romanletter}.
+The letter \gls{e} is the unique real number such that
+the derivative of the function $e^x$ is the function itself.
+The letter \gls{C} represents Euler's constant.
+
+\printglossaries
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sampletree.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sampleutf8.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+\documentclass{article}
+
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[xindy,nonumberlist,style=listgroup]{glossaries}
+
+\makeglossaries
+
+ % Note that because the é is the first letter of the
+ % name, it needs to be grouped or it will cause a
+ % problem for \makefirstuc due to expansion issues.
+\newglossaryentry{elite}{name={{é}lite},
+description={select group or class}}
+
+\newglossaryentry{elephant}{name=elephant,
+description={large animal with trunk and tusks}}
+
+\newglossaryentry{elk}{name=elk,
+description=large deer}
+
+\newglossaryentry{mannerly}{name=mannerly,
+description=polite}
+
+ % The œ is not the first letter, so it doesn't need to
+ % be grouped.
+\newglossaryentry{manoeuvre}{name={manœuvre},
+description=planned and controlled movement}
+
+\newglossaryentry{manor}{name=manor,
+description=large landed estate or its house}
+
+\newglossaryentry{odometer}{name=odometer,
+description=instrument for measuring distance travelled by
+a wheeled vehicle}
+
+\newglossaryentry{oesophagus}{name={{œ}sophagus},
+plural={{œ}sophagi},
+description={canal from mouth to stomach}}
+
+\newglossaryentry{ogre}{name=ogre,
+description=man-eating giant}
+
+\begin{document}
+\glsaddall
+
+\printglossaries
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sampleutf8.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*samplexdy.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<<COMMENT
+% This file is public domain.
+%
+% This is a sample document illustrating how to use the
+% glossaries package with xindy. To create the document:
+%
+% latex samplexdy
+% makeglossaries samplexdy
+% latex samplexdy
+%
+% If you don't have Perl installed, then use one of the
+% following instead of makeglossaries:
+%
+% If you want to have a separate "Mc" letter group do:
+%
+% xindy -I xindy -M samplexdy-mc -t samplexdy.glg -o samplexdy.gls samplexdy.glo
+%
+% Otherwise do:
+%
+% xindy -L english -C utf8 -I xindy -M samplexdy -t samplexdy.glg -o samplexdy.gls samplexdy.glo
+%
+% If you want to use arara, you need the following directives:
+% arara: pdflatex: { synctex: on }
+% arara: makeglossaries
+% arara: pdflatex: { synctex: on }
+\documentclass{article}
+
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[notext,notextcomp]{stix}
+
+\usepackage[colorlinks,plainpages]{hyperref}
+\usepackage[xindy,style=altlistgroup]{glossaries}
+
+% Define a new command to do bold italic:
+
+\newcommand*{\hyperbfit}[1]{\textit{\hyperbf{#1}}}
+
+% Need to add this to the list of attributes in order
+% to use it with xindy:
+% (This command will have no effect if \noist is used)
+
+\GlsAddXdyAttribute{hyperbfit}
+
+% Redefine the page numbers to a custom format (requires stix
+% package for the dice commands):
+
+% \tallynum{n} displays a die or dice where the dots add up to n
+\newrobustcmd{\tallynum}[1]{%
+ \ifnum\number#1<7
+ $\csname dice\romannumeral#1\endcsname$%
+ \else
+ $\dicevi$%
+ \expandafter\tallynum\expandafter{\numexpr#1-6}%
+ \fi
+}
+
+% \tally{counter} expands to \tallynum{n} where n is the counter
+% value. In order to work with glossaries and xindy this requires
+% a very specific format. (See the glossaries user manual for more
+% details.)
+
+\newcommand{\tally}[1]{\tallynum{\arabic{page}}}
+
+% Now redefine \thepage
+% (\texorpdfstring is used in case the page number ends up in a PDF
+% bookmark, although this is unlikely)
+\renewcommand*{\thepage}{\texorpdfstring{\tally{page}}{\arabic{page}}}
+
+% Need to add this to the list of location styles.
+% This requires knowing how \thepage expands when written to a file.
+% You can check by inspecting the ':locref' attributes in the .glo
+% file. In this case, \thepage expands to \tallynum {n}
+% (the space is significant) where n is an arabic number.
+% (This command will have no effect if \noist is used)
+
+\GlsAddXdyLocation{tally}{% tally location format
+ :sep "\string\tallynum\space\glsopenbrace" % -> \tallynum {
+ "arabic-numbers" % -> arabic number (0, 1, 2, etc)
+ :sep "\glsclosebrace" % -> }
+}
+
+% If the definition of \tally changes so that it expands to
+% something slightly different then the above will have to be
+% changed accordingly.
+
+% (Need to redefine \glsXpageXhyperbfit and
+% \glsXpageXglsnumberformat after \makeglossaries to get the
+% hyperlinks working correctly.)
+
+% To have Mc as a separate group uncomment the following three
+% lines:
+
+%\setStyleFile{samplexdy-mc} % note no extension
+%\noist
+%\GlsSetXdyLanguage{}
+
+% The above three lines specify to use samplexdy-mc.xdy (supplied
+% with this file) and don't overwrite it. The language is
+% unset using \GlsSetXdyLanguage{} as all the language
+% dependent information is contained in samplexdy-mc.xdy
+% Note that using \noist means that commands like
+% \GlsAddXdyAttribute and \GlsAddXdyLocation will no longer have
+% an effect.
+
+% Write the style file (if \noist isn't used)
+% and activate glossary entries
+
+\makeglossaries
+
+% Each page location will be specified in the form:
+%
+% "\glsXpageXglsnumberformat{}{\tallynum {" number "}}"
+% or
+% "\glsXpageXhyperbfit{}{\tallynum {" number "}}"
+%
+% Knowing this, we can redefine \glsXpageXglsnumberformat
+% and \glsXpageXhyperbfit to grab the number part to work out the
+% location's numeric value. If the definition of \tally changes
+% so that it expands to something slightly different then this
+% code will no longer work.
+%
+% Redefine to allow hyperlinks:
+
+\renewcommand{\glsXpageXglsnumberformat}[2]{%
+ % remember that #2 is in the form \tallynum {n}
+ % so this does \linkpagenumber\tallynum{n}
+ \linkpagenumber#2%
+}
+
+\renewcommand{\glsXpageXhyperbfit}[2]{%
+ \textbf{\em\linkpagenumber#2}%
+}
+
+% Syntax: \linkpagenumber\tallynum{page number}
+% This creates hyperlink to the given page.
+\newcommand{\linkpagenumber}[2]{\hyperlink{page.#2}{#1{#2}}}
+
+% Define glossary entries
+% \glshyperlink is used instead of \gls to prevent the glossary
+% page numbers also appear in the locations, however I need
+% to ensure that the referenced entries are added to the
+% glossary via commands that use \glslink, \glsadd or \glssee
+
+\newglossaryentry{mcadam}{name={McAdam, John Loudon},
+first={John Loudon McAdam},text={McAdam},
+description={Scottish engineer}}
+
+\newglossaryentry{maclaurin}{name={Maclaurin, Colin},
+first={Colin Maclaurin},text={Maclaurin},
+description={Scottish mathematician best known for the
+\gls{maclaurinseries}}}
+
+\newglossaryentry{maclaurinseries}{name={Maclaurin series},
+description={Series expansion},see={taylorstheorem}}
+
+\newglossaryentry{taylorstheorem}{name={Taylor's theorem},
+description={Theorem expressing a function $f(x)$ as the sum of
+a polynomial and a remainder:
+\[f(x) = f(a)+f'(a)(x-a)+f''(a)(x-a^2)/2!+\cdots+R_n\]
+If $n\to\infty$ the expansion is a \glshyperlink{taylorseries}
+and if $a=0$, the series is called a
+\gls{maclaurinseries}}}
+
+\newglossaryentry{taylorseries}{name={Taylor series},
+description={Series expansion},see={taylorstheorem}}
+
+\newglossaryentry{taylor}{name={Taylor, Brook},
+first={Brook Taylor},text={Taylor},
+description={English mathematician}}
+
+\newglossaryentry{mcnemar}{name={McNemar, Quinn},
+first={Quinn McNemar},text={McNemar},
+description={Mathematician who introduced
+\gls{mcnemarstest}. This entry has the number list
+suppressed},nonumberlist}
+
+\newglossaryentry{mcnemarstest}{name={McNemar's test},
+description={A nonparametric test introduced by
+\gls{mcnemar} in 1947}}
+
+\newglossaryentry{mach}{name={Mach, Ernst},
+first={Ernst Mach},text={Mach},
+% if using samplexdy-mc.xdy, the following line is needed
+% to prevent this entry being put in the "Mc" group
+sort={mach, Ernst},
+description={Czech/Austrian physicist and philosopher}}
+
+\newglossaryentry{machnumber}{name={Mach number},
+% if using samplexdy-mc.xdy, the following line is needed
+% to prevent this entry being put in the "Mc" group
+sort={mach number},
+description={Ratio of the speed of a body in a fluid to the
+speed of sound in that fluid named after \gls{mach}}}
+
+\newglossaryentry{malthus}{name={Malthus, Thomas Robert},
+first={Thomas Robert Malthus},text={Malthus},
+description={English mathematician, sociologist and classicist}}
+
+\newglossaryentry{ampereandre}{name={Ampère, André-Marie},
+first={André-Marie Ampère},text={Ampère},
+description={French mathematician and physicist}}
+
+\newglossaryentry{ampere}{name={ampere},
+description={SI unit of electric current named after
+\gls{ampereandre}}}
+
+\newglossaryentry{archimedes}{name={Archimedes of Syracuse},
+first={Archimedes of Syracuse},text={Archimedes},
+description={Greek mathematician}}
+
+\newglossaryentry{archimedesprinciple}{name={Archimedes' principle},
+description={Principle that if a body is submerged in a fluid
+it experiences upthrust equal to the weight of the displaced
+fluid. Named after \gls{archimedes}}}
+
+\newglossaryentry{galton}{name={Galton, Sir Francis},
+first={Sir Francis Galton},text={Galton},
+description={English anthropologist}}
+
+\newglossaryentry{gauss}{name={Gauss, Karl Friedrich},
+first={Karl Friedrich Gauss},text={Gauss},
+description={German mathematician}}
+
+\newglossaryentry{gaussianint}{name={Gaussian integer},
+description={Complex number where both real and imaginary
+parts are integers}}
+
+\newglossaryentry{gaussianfn}{name={Gaussian function},
+ description={A function of the form:
+ \[f(x) = a \exp\left(-\frac{(x-b)^2}{2c^2}\right)\]
+ for some constants $a$, $b$ and $c$}}
+
+\newglossaryentry{peano}{name={Peano, Giuseppe},
+first={Giuseppe Peano},text={Peano},
+description={Italian mathematician}}
+
+\newglossaryentry{peanoscurve}{name={Peano's curve},
+description={A space-filling curve discovered by
+\gls{peano}}}
+
+\newglossaryentry{pearson}{name={Pearson, Karl},
+first={Karl Pearson},text={Pearson},
+description={English mathematician}}
+
+\newglossaryentry{pearspmcc}{name={Pearson's product moment
+correlation coefficient},description={Product moment correlation
+coefficient named after \gls{pearson}}}
+
+\begin{document}
+\title{Sample Document Using the Glossaries Package With Xindy}
+\author{Nicola Talbot}
+\maketitle
+
+\section{\glsentryfirst{gauss}}
+
+This is a section on \gls[format=(]{gauss}. This section spans
+several pages.
+
+\rule{1pt}{0.6\textheight}
+
+This paragraph has been shoved to the bottom of the page using a rule.
+This paragraph spans a page break for testing purposes to ensure the
+glossary entry in this paragraph has the correct location. Here's
+the glossary entry: \gls{gaussianfn}. Check that the location is
+correct.
+
+This page talks about \glspl[format=hyperbfit]{gaussianint}. Since
+it's the principle definition, the user-defined hyperbfit format is
+used.
+
+\newpage
+
+The section on \gls[format=)]{gauss} ends here.
+
+\section{Series Expansions}
+
+This section is about series expansions. It mentions
+\gls{maclaurin} and \gls{taylor}. It also discusses
+\gls{taylorstheorem} which is related to the \gls{taylorseries}.
+The \gls{maclaurinseries} is a special case of the
+\gls{taylorseries}.
+
+\section{\glsentryname{archimedesprinciple}}
+
+This section discusses \gls{archimedesprinciple} which was
+introduced by \gls{archimedes}.
+
+\section{Another section}
+
+This section covers \gls{mach} who introduced the \gls{machnumber}.
+It also mentions \gls{ampereandre} after whom the
+SI unit \gls{ampere} is named. It then discusses \gls{galton}
+and \gls{malthus}. Finally it mentions \gls{mcadam}.
+
+\newpage
+This page discusses \gls{mcnemar} who introduced
+\gls{mcnemarstest} and \gls{peano} who discovered \gls{peanoscurve}.
+
+\printglossaries
+\end{document}
+%COMMENT
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</samplexdy.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*samplexdy2.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ %
+ % This is a sample document illustrating how to use the
+ % glossaries package with xindy. To create the document:
+ %
+ % pdflatex samplexdy2
+ % makeglossaries samplexdy2
+ % pdflatex samplexdy2
+ %
+ % This sample file won't work with makeindex
+ %
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex: { synctex: on }
+ % arara: makeglossaries
+ % arara: pdflatex: { synctex: on }
+\documentclass{report}
+
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[colorlinks]{hyperref}
+\usepackage[xindy,counter=section]{glossaries}
+
+ % Set up somewhat eccentric section numbering system:
+
+\renewcommand*{\thesection}{[\thechapter]\arabic{section}}
+
+\renewcommand*{\theHsection}{\thepart.\thesection}
+\renewcommand*{\thepart}{\Roman{part}}
+
+\GlsAddXdyLocation["roman-numbers-uppercase"]{section}{:sep "["
+ "arabic-numbers" :sep "]" "arabic-numbers"
+}
+
+ % If part is 0, then \thepart will be empty, so add an extra
+ % case to catch this:
+
+\GlsAddXdyLocation{zero.section}{:sep "["
+ "arabic-numbers" :sep "]" "arabic-numbers"
+}
+
+ % (Note that the above will stop xindy giving a warning, but the
+ % location hyper links will be invalid if no \part is used.)
+
+\makeglossaries
+
+\newglossaryentry{sample}{name=sample,description={an example}}
+\newglossaryentry{sample2}{name=sample2,description={another example}}
+
+\begin{document}
+This is a sample document illustrating Xindy specific commands in
+the glossaries package.
+
+\part{First Part}
+
+\chapter{Sample Chapter}
+This example document has an eccentric section numbering system
+where the section number is prefixed by the chapter number in square
+brackets.
+
+\section{First Section}
+
+\gls{sample}. \gls{sample2}.
+
+\section{Second Section}
+
+\gls{sample2}.
+
+\section{Third Section}
+
+\gls{sample}. \gls{sample2}.
+
+\printglossaries
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</samplexdy2.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*samplexdy3.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<<COMMENT
+% This file is public domain.
+%
+% This is a sample document illustrating how to use the
+% glossaries package with xindy. To create the document:
+%
+% latex samplexdy
+% makeglossaries samplexdy
+% latex samplexdy
+%
+% If you don't have Perl installed, then use one of the
+% following instead of makeglossaries:
+%
+% If you want to have a separate "Mc" letter group do:
+%
+% xindy -I xindy -M samplexdy-mc -t samplexdy.glg -o samplexdy.gls samplexdy.glo
+%
+% Otherwise do:
+%
+% xindy -L english -C utf8 -I xindy -M samplexdy -t samplexdy.glg -o samplexdy.gls samplexdy.glo
+%
+% If you want to use arara, you need the following directives:
+% arara: pdflatex: { synctex: on }
+% arara: makeglossaries
+% arara: pdflatex: { synctex: on }
+ \documentclass{article}
+
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{fmtcount}
+
+\usepackage[colorlinks,plainpages]{hyperref}
+\usepackage[xindy,style=altlistgroup]{glossaries}
+
+% Define a new command to do bold italic:
+
+\newcommand*{\hyperbfit}[1]{\textit{\hyperbf{#1}}}
+
+% Need to add this to the list of attributes in order
+% to use it with xindy:
+% (This command will have no effect if \noist is used)
+
+\GlsAddXdyAttribute{hyperbfit}
+
+% Redefine the page numbers so that they appear as a word:
+
+\renewcommand*{\thepage}{\texorpdfstring{\customfmt{page}}{\arabic{page}}}
+
+\newcommand{\customfmt}[1]{\customfmtnum{\arabic{#1}}}
+\newrobustcmd{\customfmtnum}[1]{\Numberstringnum{#1}}
+
+% Need to add this to the list of location styles.
+% \customfmt{page} gets expanded to
+% \custommfmtnum {<n>} (where <n> is the page number)
+% so need to define the location in that format:
+% (This command will have no effect if \noist is used)
+
+\GlsAddXdyLocation{customfmt}{:sep "\string\customfmtnum\space\glsopenbrace"
+ "arabic-numbers" :sep "\glsclosebrace"}
+
+% (Need to redefine \glsXpageXhyperbfit and
+% \glsXpageXglsnumberformat after \makeglossaries to get the
+% hyperlinks working correctly.)
+
+% To have Mc as a separate group uncomment the following three
+% lines:
+
+%\setStyleFile{samplexdy-mc} % note no extension
+%\noist
+%\GlsSetXdyLanguage{}
+
+% The above three lines specify to use samplexdy-mc.xdy (supplied
+% with this file) and don't overwrite it. The language is
+% unset using \GlsSetXdyLanguage{} as all the language
+% dependent information is contained in samplexdy-mc.xdy
+% Note that using \noist means that commands like
+% \GlsAddXdyAttribute and \GlsAddXdyLocation will no longer have
+% an effect.
+
+% Write the style file (if \noist isn't used)
+% and activate glossary entries
+
+\makeglossaries
+
+% Each page location will be specified in the form:
+%
+% "\glsXpageXglsnumberformat{}{\customfmtnum "\marg{n}"}"
+% or
+% "\glsXpageXhyperbfit{}{\customfmtnum "\marg{n}"}"
+%
+% Redefine to allow hyperlinks:
+
+\renewcommand{\glsXpageXglsnumberformat}[2]{%
+ \linkpagenumber#2%
+}
+
+\renewcommand{\glsXpageXhyperbfit}[2]{%
+ \textbf{\em\linkpagenumber#2}%
+}
+
+% The arguments of \linkpagenumber will be
+% #1 -> \customfmtnum
+% #2 -> n
+% This means that the page number (n) can be used to
+% form the hyperlink target.
+\newcommand{\linkpagenumber}[2]{\hyperlink{page.#2}{#1{#2}}}
+
+% Define glossary entries
+% \glshyperlink is used instead of \gls to prevent the glossary
+% page numbers also appear in the locations, however I need
+% to ensure that the referenced entries are added to the
+% glossary via commands that use \glslink, \glsadd or \glssee
+
+\newglossaryentry{mcadam}{name={McAdam, John Loudon},
+first={John Loudon McAdam},text={McAdam},
+description={Scottish engineer}}
+
+\newglossaryentry{maclaurin}{name={Maclaurin, Colin},
+first={Colin Maclaurin},text={Maclaurin},
+description={Scottish mathematician best known for the
+\gls{maclaurinseries}}}
+
+\newglossaryentry{maclaurinseries}{name={Maclaurin series},
+description={Series expansion},see={taylorstheorem}}
+
+\newglossaryentry{taylorstheorem}{name={Taylor's theorem},
+description={Theorem expressing a function $f(x)$ as the sum of
+a polynomial and a remainder:
+\[f(x) = f(a)+f'(a)(x-a)+f''(a)(x-a^2)/2!+\cdots+R_n\]
+If $n\to\infty$ the expansion is a \glshyperlink{taylorseries}
+and if $a=0$, the series is called a
+\gls{maclaurinseries}}}
+
+\newglossaryentry{taylorseries}{name={Taylor series},
+description={Series expansion},see={taylorstheorem}}
+
+\newglossaryentry{taylor}{name={Taylor, Brook},
+first={Brook Taylor},text={Taylor},
+description={English mathematician}}
+
+\newglossaryentry{mcnemar}{name={McNemar, Quinn},
+first={Quinn McNemar},text={McNemar},
+description={Mathematician who introduced
+\gls{mcnemarstest}. This entry has the number list
+suppressed},nonumberlist}
+
+\newglossaryentry{mcnemarstest}{name={McNemar's test},
+description={A nonparametric test introduced by
+\gls{mcnemar} in 1947}}
+
+\newglossaryentry{mach}{name={Mach, Ernst},
+first={Ernst Mach},text={Mach},
+% if using samplexdy-mc.xdy, the following line is needed
+% to prevent this entry being put in the "Mc" group
+sort={mach, Ernst},
+description={Czech/Austrian physicist and philosopher}}
+
+\newglossaryentry{machnumber}{name={Mach number},
+% if using samplexdy-mc.xdy, the following line is needed
+% to prevent this entry being put in the "Mc" group
+sort={mach number},
+description={Ratio of the speed of a body in a fluid to the
+speed of sound in that fluid named after \gls{mach}}}
+
+\newglossaryentry{malthus}{name={Malthus, Thomas Robert},
+first={Thomas Robert Malthus},text={Malthus},
+description={English mathematician, sociologist and classicist}}
+
+\newglossaryentry{ampereandre}{name={Ampère, André-Marie},
+first={André-Marie Ampère},text={Ampère},
+description={French mathematician and physicist}}
+
+\newglossaryentry{ampere}{name={ampere},
+description={SI unit of electric current named after
+\gls{ampereandre}}}
+
+\newglossaryentry{archimedes}{name={Archimedes of Syracuse},
+first={Archimedes of Syracuse},text={Archimedes},
+description={Greek mathematician}}
+
+\newglossaryentry{archimedesprinciple}{name={Archimedes' principle},
+description={Principle that if a body is submerged in a fluid
+it experiences upthrust equal to the weight of the displaced
+fluid. Named after \gls{archimedes}}}
+
+\newglossaryentry{galton}{name={Galton, Sir Francis},
+first={Sir Francis Galton},text={Galton},
+description={English anthropologist}}
+
+\newglossaryentry{gauss}{name={Gauss, Karl Friedrich},
+first={Karl Friedrich Gauss},text={Gauss},
+description={German mathematician}}
+
+\newglossaryentry{gaussianint}{name={Gaussian integer},
+description={Complex number where both real and imaginary
+parts are integers}}
+
+\newglossaryentry{gaussianfn}{name={Gaussian function},
+ description={A function of the form:
+ \[f(x) = a \exp\left(-\frac{(x-b)^2}{2c^2}\right)\]
+ for some constants $a$, $b$ and $c$}}
+
+\newglossaryentry{peano}{name={Peano, Giuseppe},
+first={Giuseppe Peano},text={Peano},
+description={Italian mathematician}}
+
+\newglossaryentry{peanoscurve}{name={Peano's curve},
+description={A space-filling curve discovered by
+\gls{peano}}}
+
+\newglossaryentry{pearson}{name={Pearson, Karl},
+first={Karl Pearson},text={Pearson},
+description={English mathematician}}
+
+\newglossaryentry{pearspmcc}{name={Pearson's product moment
+correlation coefficient},description={Product moment correlation
+coefficient named after \gls{pearson}}}
+
+\begin{document}
+\title{Sample Document Using the Glossaries Package With Xindy}
+\author{Nicola Talbot}
+\maketitle
+
+\section{\glsentryfirst{gauss}}
+
+This is a section on
+\gls[format=(]{gauss}. This section spans
+several pages.
+
+\rule{1pt}{0.6\textheight}
+
+This paragraph has been shoved to the bottom of the page using a rule.
+This paragraph spans a page break for testing purposes to ensure the
+glossary entry in this paragraph has the correct location. Here's
+the glossary entry: \gls{gaussianfn}.
+
+This page talks about \glspl[format=hyperbfit]{gaussianint}. Since
+it's the principle definition, the user-defined hyperbfit format is
+used.
+
+\newpage
+
+The section on \gls[format=)]{gauss} ends here.
+
+\section{Series Expansions}
+
+This section is about series expansions. It mentions
+\gls{maclaurin} and \gls{taylor}. It also discusses
+\gls{taylorstheorem} which is related to the \gls{taylorseries}.
+The \gls{maclaurinseries} is a special case of the
+\gls{taylorseries}.
+
+\section{\glsentryname{archimedesprinciple}}
+
+This section discusses \gls{archimedesprinciple} which was
+introduced by \gls{archimedes}.
+
+\section{Another section}
+
+This section covers \gls{mach} who introduced the \gls{machnumber}.
+It also mentions \gls{ampereandre} after whom the
+SI unit \gls{ampere} is named. It then discusses \gls{galton}
+and \gls{malthus}. Finally it mentions \gls{mcadam}.
+
+\newpage
+This page discusses \gls{mcnemar} who introduced
+\gls{mcnemarstest} and \gls{peano} who discovered \gls{peanoscurve}.
+
+\printglossaries
+\end{document}
+%COMMENT
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</samplexdy3.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*mwe-acr-desc.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex
+ % arara: makeglossaries
+ % arara: pdflatex
+\documentclass{article}
+
+\usepackage{glossaries}
+
+\makeglossaries
+
+\setacronymstyle{short-long-desc}
+
+\newacronym[description={a device that emits a narrow beam of
+light}]{laser}{laser}{light amplification by stimulated
+emission of radiation}
+
+\begin{document}
+
+First use: \gls{laser}.
+
+Next use: \gls{laser} or \glspl{laser}.
+
+\printglossaries
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</mwe-acr-desc.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*mwe-acr.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex
+ % arara: makeglossaries
+ % arara: pdflatex
+\documentclass{article}
+
+\usepackage{glossaries}
+
+\makeglossaries
+
+\setacronymstyle{long-short}
+
+\newacronym{laser}{laser}{light amplification by stimulated
+emission of radiation}
+
+\begin{document}
+
+First use: \gls{laser}.
+
+Next use: \gls{laser} or \glspl{laser}.
+
+\printglossaries
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</mwe-acr.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*mwe-gls.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain
+ % If you want to use arara, you need the following directives:
+ % arara: pdflatex
+ % arara: makeglossaries
+ % arara: pdflatex
+\documentclass{article}
+
+\usepackage{glossaries}
+
+\makeglossaries
+
+\newglossaryentry{apple}{name={apple},description={a fruit}}
+
+\begin{document}
+
+\Gls{apple} or \gls{apple} or \glspl{apple}.
+
+\printglossaries
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</mwe-gls.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*samplexdy-mc.xdy>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+;; xindy style file for samplexdy.tex that has Mc letter group
+
+(define-letter-group "A" :prefixes ("€"))
+(define-letter-group "B" :after "A" :prefixes ("„"))
+(define-letter-group "C" :after "B" :prefixes ("†"))
+(define-letter-group "D" :after "C" :prefixes (""))
+(define-letter-group "E" :after "D" :prefixes ("—"))
+(define-letter-group "F" :after "E" :prefixes ("œ"))
+(define-letter-group "G" :after "F" :prefixes (""))
+(define-letter-group "H" :after "G" :prefixes ("¤"))
+(define-letter-group "I" :after "H" :prefixes ("¨"))
+(define-letter-group "J" :after "I" :prefixes ("¬"))
+(define-letter-group "K" :after "J" :prefixes ("®"))
+(define-letter-group "L" :after "K" :prefixes ("´"))
+(define-letter-group "Mc" :after "L" :prefixes ("Ƞ"))
+(define-letter-group "M" :after "Mc" :prefixes ("»"))
+(define-letter-group "N" :after "M" :prefixes ("¼"))
+(define-letter-group "O" :after "N" :prefixes ("Ã"))
+(define-letter-group "P" :after "O" :prefixes ("È"))
+(define-letter-group "Q" :after "P" :prefixes ("Ê"))
+(define-letter-group "R" :after "Q" :prefixes ("Ë"))
+(define-letter-group "S" :after "R" :prefixes ("Ð"))
+(define-letter-group "T" :after "S" :prefixes ("Ú"))
+(define-letter-group "U" :after "T" :prefixes ("à"))
+(define-letter-group "V" :after "U" :prefixes ("å"))
+(define-letter-group "W" :after "V" :prefixes ("æ"))
+(define-letter-group "X" :after "W" :prefixes ("ë"))
+(define-letter-group "Y" :after "X" :prefixes ("í"))
+(define-letter-group "Ȝ" :after "Y" :prefixes ("ï"))
+(define-letter-group "Z" :after "Ȝ" :prefixes ("ð"))
+(define-letter-group "Þ" :after "Z" :prefixes ("ö"))
+(define-letter-group "Æ¿" :after "Þ" :prefixes ("÷"))
+
+(define-rule-set "en-alphabetize"
+
+ :rules (("à" "€" :string)
+ ("À" "€" :string)
+ ("Æ" "€—" :string)
+ ("æ" "€—" :string)
+ ("Ç" "†" :string)
+ ("ç" "†" :string)
+ ("ð" "" :string)
+ ("Ð" "" :string)
+ ("É" "—" :string)
+ ("Ê" "—" :string)
+ ("È" "—" :string)
+ ("Ë" "—" :string)
+ ("è" "—" :string)
+ ("ë" "—" :string)
+ ("ê" "—" :string)
+ ("é" "—" :string)
+ ("Ï" "¨" :string)
+ ("ï" "¨" :string)
+ ("Ñ" "¼" :string)
+ ("ñ" "¼" :string)
+ ("Ö" "Ã" :string)
+ ("Ô" "Ã" :string)
+ ("ô" "Ã" :string)
+ ("ö" "Ã" :string)
+ ("œ" "×" :string)
+ ("Œ" "×" :string)
+ ("ȝ" "ï" :string)
+ ("Ȝ" "ï" :string)
+ ("þ" "ö" :string)
+ ("Þ" "ö" :string)
+ ("Ç·" "÷" :string)
+ ("Æ¿" "÷" :string)
+ ("a" "€" :string)
+ ("A" "€" :string)
+ ("b" "„" :string)
+ ("B" "„" :string)
+ ("C" "†" :string)
+ ("c" "†" :string)
+ ("d" "" :string)
+ ("D" "" :string)
+ ("E" "—" :string)
+ ("e" "—" :string)
+ ("F" "œ" :string)
+ ("f" "œ" :string)
+ ("g" "" :string)
+ ("G" "" :string)
+ ("H" "¤" :string)
+ ("h" "¤" :string)
+ ("I" "¨" :string)
+ ("i" "¨" :string)
+ ("J" "¬" :string)
+ ("j" "¬" :string)
+ ("K" "®" :string)
+ ("k" "®" :string)
+ ("L" "´" :string)
+ ("l" "´" :string)
+ ("Mc" "Ƞ" :string)
+ ("Mac" "Ƞ" :string)
+ ("M" "»" :string)
+ ("m" "»" :string)
+ ("N" "¼" :string)
+ ("n" "¼" :string)
+ ("O" "Ã" :string)
+ ("o" "Ã" :string)
+ ("P" "È" :string)
+ ("p" "È" :string)
+ ("q" "Ê" :string)
+ ("Q" "Ê" :string)
+ ("r" "Ë" :string)
+ ("R" "Ë" :string)
+ ("S" "Ð" :string)
+ ("s" "Ð" :string)
+ ("T" "Ú" :string)
+ ("t" "Ú" :string)
+ ("u" "à" :string)
+ ("U" "à" :string)
+ ("v" "å" :string)
+ ("V" "å" :string)
+ ("w" "æ" :string)
+ ("W" "æ" :string)
+ ("X" "ë" :string)
+ ("x" "ë" :string)
+ ("Y" "í" :string)
+ ("y" "í" :string)
+ ("z" "ð" :string)
+ ("Z" "ð" :string)
+ ))
+
+(define-rule-set "en-resolve-diacritics"
+
+ :rules (("ȝ" "¢" :string)
+ ("þ" "¢" :string)
+ ("Ç·" "¢" :string)
+ ("Þ" "¢" :string)
+ ("Ȝ" "¢" :string)
+ ("Æ¿" "¢" :string)
+ ("Ö" "£" :string)
+ ("Ñ" "£" :string)
+ ("ð" "£" :string)
+ ("Ç" "£" :string)
+ ("É" "£" :string)
+ ("Ï" "£" :string)
+ ("ï" "£" :string)
+ ("ö" "£" :string)
+ ("ñ" "£" :string)
+ ("ç" "£" :string)
+ ("à" "£" :string)
+ ("À" "£" :string)
+ ("é" "£" :string)
+ ("Ð" "£" :string)
+ ("Ô" "¤" :string)
+ ("ô" "¤" :string)
+ ("È" "¤" :string)
+ ("è" "¤" :string)
+ ("Ë" "¥" :string)
+ ("ë" "¥" :string)
+ ("Ê" "¦" :string)
+ ("ê" "¦" :string)
+ ("œ" "ÿ" :string)
+ ("Æ" "ÿ" :string)
+ ("Œ" "ÿ" :string)
+ ("æ" "ÿ" :string)
+ ("S" "¢" :string)
+ ("K" "¢" :string)
+ ("d" "¢" :string)
+ ("Y" "¢" :string)
+ ("E" "¢" :string)
+ ("y" "¢" :string)
+ ("g" "¢" :string)
+ ("e" "¢" :string)
+ ("J" "¢" :string)
+ ("q" "¢" :string)
+ ("D" "¢" :string)
+ ("b" "¢" :string)
+ ("z" "¢" :string)
+ ("w" "¢" :string)
+ ("Q" "¢" :string)
+ ("M" "¢" :string)
+ ("C" "¢" :string)
+ ("L" "¢" :string)
+ ("X" "¢" :string)
+ ("P" "¢" :string)
+ ("T" "¢" :string)
+ ("a" "¢" :string)
+ ("N" "¢" :string)
+ ("j" "¢" :string)
+ ("Z" "¢" :string)
+ ("u" "¢" :string)
+ ("k" "¢" :string)
+ ("t" "¢" :string)
+ ("W" "¢" :string)
+ ("v" "¢" :string)
+ ("s" "¢" :string)
+ ("B" "¢" :string)
+ ("H" "¢" :string)
+ ("c" "¢" :string)
+ ("I" "¢" :string)
+ ("G" "¢" :string)
+ ("U" "¢" :string)
+ ("F" "¢" :string)
+ ("r" "¢" :string)
+ ("x" "¢" :string)
+ ("V" "¢" :string)
+ ("h" "¢" :string)
+ ("f" "¢" :string)
+ ("i" "¢" :string)
+ ("A" "¢" :string)
+ ("O" "¢" :string)
+ ("n" "¢" :string)
+ ("m" "¢" :string)
+ ("l" "¢" :string)
+ ("p" "¢" :string)
+ ("R" "¢" :string)
+ ("o" "¢" :string)
+ ))
+
+(define-rule-set "en-resolve-case"
+
+ :rules (("Ö" "8" :string)
+ ("Ñ" "8" :string)
+ ("Ô" "8" :string)
+ ("Ç" "8" :string)
+ ("É" "8" :string)
+ ("Ï" "8" :string)
+ ("Ê" "8" :string)
+ ("È" "8" :string)
+ ("Ë" "8" :string)
+ ("Ç·" "8" :string)
+ ("À" "8" :string)
+ ("Þ" "8" :string)
+ ("Ȝ" "8" :string)
+ ("Ð" "8" :string)
+ ("Æ" "89" :string)
+ ("Œ" "89" :string)
+ ("ð" "9" :string)
+ ("ô" "9" :string)
+ ("ȝ" "9" :string)
+ ("ï" "9" :string)
+ ("ö" "9" :string)
+ ("ñ" "9" :string)
+ ("ç" "9" :string)
+ ("à" "9" :string)
+ ("þ" "9" :string)
+ ("è" "9" :string)
+ ("ë" "9" :string)
+ ("ê" "9" :string)
+ ("é" "9" :string)
+ ("Æ¿" "9" :string)
+ ("œ" "99" :string)
+ ("æ" "99" :string)
+ ("S" "8" :string)
+ ("K" "8" :string)
+ ("Y" "8" :string)
+ ("E" "8" :string)
+ ("J" "8" :string)
+ ("D" "8" :string)
+ ("Q" "8" :string)
+ ("M" "8" :string)
+ ("C" "8" :string)
+ ("L" "8" :string)
+ ("X" "8" :string)
+ ("P" "8" :string)
+ ("T" "8" :string)
+ ("N" "8" :string)
+ ("Z" "8" :string)
+ ("W" "8" :string)
+ ("B" "8" :string)
+ ("H" "8" :string)
+ ("I" "8" :string)
+ ("G" "8" :string)
+ ("U" "8" :string)
+ ("F" "8" :string)
+ ("V" "8" :string)
+ ("A" "8" :string)
+ ("O" "8" :string)
+ ("R" "8" :string)
+ ("d" "9" :string)
+ ("y" "9" :string)
+ ("g" "9" :string)
+ ("e" "9" :string)
+ ("q" "9" :string)
+ ("b" "9" :string)
+ ("z" "9" :string)
+ ("w" "9" :string)
+ ("a" "9" :string)
+ ("j" "9" :string)
+ ("u" "9" :string)
+ ("k" "9" :string)
+ ("t" "9" :string)
+ ("v" "9" :string)
+ ("s" "9" :string)
+ ("c" "9" :string)
+ ("r" "9" :string)
+ ("x" "9" :string)
+ ("h" "9" :string)
+ ("f" "9" :string)
+ ("i" "9" :string)
+ ("n" "9" :string)
+ ("m" "9" :string)
+ ("l" "9" :string)
+ ("p" "9" :string)
+ ("o" "9" :string)
+ ))
+
+(define-rule-set "en-ignore-special"
+
+ :rules (("-" "" :string)
+ ("!" "" :string)
+ ("{" "" :string)
+ ("'" "" :string)
+ ("}" "" :string)
+ ("?" "" :string)
+ ("." "" :string)
+ ))
+
+(define-rule-set "en-resolve-special"
+
+ :rules (("Ö" "¤" :string)
+ ("Ñ" "¤" :string)
+ ("ð" "¤" :string)
+ ("Ô" "¤" :string)
+ ("Ç" "¤" :string)
+ ("É" "¤" :string)
+ ("ô" "¤" :string)
+ ("Ï" "¤" :string)
+ ("ȝ" "¤" :string)
+ ("ï" "¤" :string)
+ ("Ê" "¤" :string)
+ ("ö" "¤" :string)
+ ("ñ" "¤" :string)
+ ("È" "¤" :string)
+ ("ç" "¤" :string)
+ ("Ë" "¤" :string)
+ ("à" "¤" :string)
+ ("þ" "¤" :string)
+ ("Ç·" "¤" :string)
+ ("è" "¤" :string)
+ ("À" "¤" :string)
+ ("ë" "¤" :string)
+ ("Þ" "¤" :string)
+ ("ê" "¤" :string)
+ ("é" "¤" :string)
+ ("Ȝ" "¤" :string)
+ ("Æ¿" "¤" :string)
+ ("Ð" "¤" :string)
+ ("œ" "¤¤" :string)
+ ("Æ" "¤¤" :string)
+ ("Œ" "¤¤" :string)
+ ("æ" "¤¤" :string)
+ ("?" "¡" :string)
+ ("!" "¢" :string)
+ ("." "£" :string)
+ ("S" "¤" :string)
+ ("K" "¤" :string)
+ ("d" "¤" :string)
+ ("Y" "¤" :string)
+ ("E" "¤" :string)
+ ("y" "¤" :string)
+ ("g" "¤" :string)
+ ("e" "¤" :string)
+ ("J" "¤" :string)
+ ("q" "¤" :string)
+ ("D" "¤" :string)
+ ("b" "¤" :string)
+ ("z" "¤" :string)
+ ("w" "¤" :string)
+ ("Q" "¤" :string)
+ ("M" "¤" :string)
+ ("C" "¤" :string)
+ ("L" "¤" :string)
+ ("X" "¤" :string)
+ ("P" "¤" :string)
+ ("T" "¤" :string)
+ ("a" "¤" :string)
+ ("N" "¤" :string)
+ ("j" "¤" :string)
+ ("Z" "¤" :string)
+ ("u" "¤" :string)
+ ("k" "¤" :string)
+ ("t" "¤" :string)
+ ("W" "¤" :string)
+ ("v" "¤" :string)
+ ("s" "¤" :string)
+ ("B" "¤" :string)
+ ("H" "¤" :string)
+ ("c" "¤" :string)
+ ("I" "¤" :string)
+ ("G" "¤" :string)
+ ("U" "¤" :string)
+ ("F" "¤" :string)
+ ("r" "¤" :string)
+ ("x" "¤" :string)
+ ("V" "¤" :string)
+ ("h" "¤" :string)
+ ("f" "¤" :string)
+ ("i" "¤" :string)
+ ("A" "¤" :string)
+ ("O" "¤" :string)
+ ("n" "¤" :string)
+ ("m" "¤" :string)
+ ("l" "¤" :string)
+ ("p" "¤" :string)
+ ("R" "¤" :string)
+ ("o" "¤" :string)
+ ("-" "¥" :string)
+ ("'" "¦" :string)
+ ("{" "§" :string)
+ ("}" "¨" :string)
+ ))
+
+; The following section is customised for samplexdy.tex
+; (copied from samplexdy.xdy automatically generated by
+; samplexdy.tex)
+
+; required styles
+
+(require "tex.xdy")
+
+; list of allowed attributes (number formats)
+
+(define-attributes (("default"
+ "hyperbfit"
+ "pagehyperbfit"
+ "glsnumberformat"
+ "pageglsnumberformat"
+ "textrm"
+ "pagetextrm"
+ "textsf"
+ "pagetextsf"
+ "texttt"
+ "pagetexttt"
+ "textbf"
+ "pagetextbf"
+ "textmd"
+ "pagetextmd"
+ "textit"
+ "pagetextit"
+ "textup"
+ "pagetextup"
+ "textsl"
+ "pagetextsl"
+ "textsc"
+ "pagetextsc"
+ "emph"
+ "pageemph"
+ "glshypernumber"
+ "pageglshypernumber"
+ "hyperrm"
+ "pagehyperrm"
+ "hypersf"
+ "pagehypersf"
+ "hypertt"
+ "pagehypertt"
+ "hyperbf"
+ "pagehyperbf"
+ "hypermd"
+ "pagehypermd"
+ "hyperit"
+ "pagehyperit"
+ "hyperup"
+ "pagehyperup"
+ "hypersl"
+ "pagehypersl"
+ "hypersc"
+ "pagehypersc"
+ "hyperemph"
+ "pagehyperemph")))
+
+; user defined alphabets
+
+
+
+; location class definitions
+
+(define-location-class "roman-page-numbers"
+ ( :sep "{}{" "roman-numbers-lowercase" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "roman-page-numbers-roman-page-numbers"
+ ( :sep "{" "roman-numbers-lowercase" :sep "}{" "roman-numbers-lowercase" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "Roman-page-numbers-roman-page-numbers"
+ ( :sep "{" "roman-numbers-uppercase" :sep "}{" "roman-numbers-lowercase" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "arabic-page-numbers-roman-page-numbers"
+ ( :sep "{" "arabic-numbers" :sep "}{" "roman-numbers-lowercase" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "alpha-page-numbers-roman-page-numbers"
+ ( :sep "{" "alpha" :sep "}{" "roman-numbers-lowercase" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "Alpha-page-numbers-roman-page-numbers"
+ ( :sep "{" "ALPHA" :sep "}{" "roman-numbers-lowercase" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "Appendix-page-numbers-roman-page-numbers"
+ ( :sep "{" "ALPHA" :sep "." "arabic-numbers" :sep "}{" "roman-numbers-lowercase" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "arabic-section-numbers-roman-page-numbers"
+ ( :sep "{" "arabic-numbers" :sep "." "arabic-numbers" :sep "}{" "roman-numbers-lowercase" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "Roman-page-numbers"
+ ( :sep "{}{" "roman-numbers-uppercase" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "roman-page-numbers-Roman-page-numbers"
+ ( :sep "{" "roman-numbers-lowercase" :sep "}{" "roman-numbers-uppercase" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "Roman-page-numbers-Roman-page-numbers"
+ ( :sep "{" "roman-numbers-uppercase" :sep "}{" "roman-numbers-uppercase" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "arabic-page-numbers-Roman-page-numbers"
+ ( :sep "{" "arabic-numbers" :sep "}{" "roman-numbers-uppercase" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "alpha-page-numbers-Roman-page-numbers"
+ ( :sep "{" "alpha" :sep "}{" "roman-numbers-uppercase" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "Alpha-page-numbers-Roman-page-numbers"
+ ( :sep "{" "ALPHA" :sep "}{" "roman-numbers-uppercase" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "Appendix-page-numbers-Roman-page-numbers"
+ ( :sep "{" "ALPHA" :sep "." "arabic-numbers" :sep "}{" "roman-numbers-uppercase" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "arabic-section-numbers-Roman-page-numbers"
+ ( :sep "{" "arabic-numbers" :sep "." "arabic-numbers" :sep "}{" "roman-numbers-uppercase" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "arabic-page-numbers"
+ ( :sep "{}{" "arabic-numbers" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "roman-page-numbers-arabic-page-numbers"
+ ( :sep "{" "roman-numbers-lowercase" :sep "}{" "arabic-numbers" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "Roman-page-numbers-arabic-page-numbers"
+ ( :sep "{" "roman-numbers-uppercase" :sep "}{" "arabic-numbers" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "arabic-page-numbers-arabic-page-numbers"
+ ( :sep "{" "arabic-numbers" :sep "}{" "arabic-numbers" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "alpha-page-numbers-arabic-page-numbers"
+ ( :sep "{" "alpha" :sep "}{" "arabic-numbers" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "Alpha-page-numbers-arabic-page-numbers"
+ ( :sep "{" "ALPHA" :sep "}{" "arabic-numbers" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "Appendix-page-numbers-arabic-page-numbers"
+ ( :sep "{" "ALPHA" :sep "." "arabic-numbers" :sep "}{" "arabic-numbers" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "arabic-section-numbers-arabic-page-numbers"
+ ( :sep "{" "arabic-numbers" :sep "." "arabic-numbers" :sep "}{" "arabic-numbers" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "alpha-page-numbers"
+ ( :sep "{}{" "alpha" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "roman-page-numbers-alpha-page-numbers"
+ ( :sep "{" "roman-numbers-lowercase" :sep "}{" "alpha" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "Roman-page-numbers-alpha-page-numbers"
+ ( :sep "{" "roman-numbers-uppercase" :sep "}{" "alpha" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "arabic-page-numbers-alpha-page-numbers"
+ ( :sep "{" "arabic-numbers" :sep "}{" "alpha" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "alpha-page-numbers-alpha-page-numbers"
+ ( :sep "{" "alpha" :sep "}{" "alpha" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "Alpha-page-numbers-alpha-page-numbers"
+ ( :sep "{" "ALPHA" :sep "}{" "alpha" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "Appendix-page-numbers-alpha-page-numbers"
+ ( :sep "{" "ALPHA" :sep "." "arabic-numbers" :sep "}{" "alpha" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "arabic-section-numbers-alpha-page-numbers"
+ ( :sep "{" "arabic-numbers" :sep "." "arabic-numbers" :sep "}{" "alpha" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "Alpha-page-numbers"
+ ( :sep "{}{" "ALPHA" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "roman-page-numbers-Alpha-page-numbers"
+ ( :sep "{" "roman-numbers-lowercase" :sep "}{" "ALPHA" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "Roman-page-numbers-Alpha-page-numbers"
+ ( :sep "{" "roman-numbers-uppercase" :sep "}{" "ALPHA" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "arabic-page-numbers-Alpha-page-numbers"
+ ( :sep "{" "arabic-numbers" :sep "}{" "ALPHA" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "alpha-page-numbers-Alpha-page-numbers"
+ ( :sep "{" "alpha" :sep "}{" "ALPHA" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "Alpha-page-numbers-Alpha-page-numbers"
+ ( :sep "{" "ALPHA" :sep "}{" "ALPHA" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "Appendix-page-numbers-Alpha-page-numbers"
+ ( :sep "{" "ALPHA" :sep "." "arabic-numbers" :sep "}{" "ALPHA" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "arabic-section-numbers-Alpha-page-numbers"
+ ( :sep "{" "arabic-numbers" :sep "." "arabic-numbers" :sep "}{" "ALPHA" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "Appendix-page-numbers"
+ ( :sep "{}{" "ALPHA" :sep "." "arabic-numbers" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "roman-page-numbers-Appendix-page-numbers"
+ ( :sep "{" "roman-numbers-lowercase" :sep "}{" "ALPHA" :sep "." "arabic-numbers" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "Roman-page-numbers-Appendix-page-numbers"
+ ( :sep "{" "roman-numbers-uppercase" :sep "}{" "ALPHA" :sep "." "arabic-numbers" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "arabic-page-numbers-Appendix-page-numbers"
+ ( :sep "{" "arabic-numbers" :sep "}{" "ALPHA" :sep "." "arabic-numbers" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "alpha-page-numbers-Appendix-page-numbers"
+ ( :sep "{" "alpha" :sep "}{" "ALPHA" :sep "." "arabic-numbers" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "Alpha-page-numbers-Appendix-page-numbers"
+ ( :sep "{" "ALPHA" :sep "}{" "ALPHA" :sep "." "arabic-numbers" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "Appendix-page-numbers-Appendix-page-numbers"
+ ( :sep "{" "ALPHA" :sep "." "arabic-numbers" :sep "}{" "ALPHA" :sep "." "arabic-numbers" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "arabic-section-numbers-Appendix-page-numbers"
+ ( :sep "{" "arabic-numbers" :sep "." "arabic-numbers" :sep "}{" "ALPHA" :sep "." "arabic-numbers" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "arabic-section-numbers"
+ ( :sep "{}{" "arabic-numbers" :sep "." "arabic-numbers" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "roman-page-numbers-arabic-section-numbers"
+ ( :sep "{" "roman-numbers-lowercase" :sep "}{" "arabic-numbers" :sep "." "arabic-numbers" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "Roman-page-numbers-arabic-section-numbers"
+ ( :sep "{" "roman-numbers-uppercase" :sep "}{" "arabic-numbers" :sep "." "arabic-numbers" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "arabic-page-numbers-arabic-section-numbers"
+ ( :sep "{" "arabic-numbers" :sep "}{" "arabic-numbers" :sep "." "arabic-numbers" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "alpha-page-numbers-arabic-section-numbers"
+ ( :sep "{" "alpha" :sep "}{" "arabic-numbers" :sep "." "arabic-numbers" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "Alpha-page-numbers-arabic-section-numbers"
+ ( :sep "{" "ALPHA" :sep "}{" "arabic-numbers" :sep "." "arabic-numbers" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "Appendix-page-numbers-arabic-section-numbers"
+ ( :sep "{" "ALPHA" :sep "." "arabic-numbers" :sep "}{" "arabic-numbers" :sep "." "arabic-numbers" :sep "}" )
+ :min-range-length 2
+)
+(define-location-class "arabic-section-numbers-arabic-section-numbers"
+ ( :sep "{" "arabic-numbers" :sep "." "arabic-numbers" :sep "}{" "arabic-numbers" :sep "." "arabic-numbers" :sep "}" )
+ :min-range-length 2
+)
+
+; user defined location classes
+
+(define-location-class "Numberstring"
+ (:sep "{}{" :sep "\protect \Numberstringnum {" "arabic-numbers" :sep "}" :sep "}"))
+
+; define cross-reference class
+
+(define-crossref-class "see" :unverified )
+(markup-crossref-list :class "see"
+ :open "\glsseeformat" :close "{}")
+
+; define the order of the location classes
+(define-location-class-order (
+ "roman-page-numbers"
+ "arabic-page-numbers"
+ "arabic-section-numbers"
+ "alpha-page-numbers"
+ "Roman-page-numbers"
+ "Alpha-page-numbers"
+ "Appendix-page-numbers"
+ "see" ))
+
+; define the glossary markup
+
+(markup-index
+ :open "\glossarysection[\glossarytoctitle]{\glossarytitle}\glossarypreamble
+\providecommand*\glsXpageXhyperbfit[2]{\setentrycounter[#1]{page}\hyperbfit{#2}}
+\providecommand*\glsXpageXglsnumberformat[2]{\setentrycounter[#1]{page}\glsnumberformat{#2}}
+\providecommand*\glsXpageXtextrm[2]{\setentrycounter[#1]{page}\textrm{#2}}
+\providecommand*\glsXpageXtextsf[2]{\setentrycounter[#1]{page}\textsf{#2}}
+\providecommand*\glsXpageXtexttt[2]{\setentrycounter[#1]{page}\texttt{#2}}
+\providecommand*\glsXpageXtextbf[2]{\setentrycounter[#1]{page}\textbf{#2}}
+\providecommand*\glsXpageXtextmd[2]{\setentrycounter[#1]{page}\textmd{#2}}
+\providecommand*\glsXpageXtextit[2]{\setentrycounter[#1]{page}\textit{#2}}
+\providecommand*\glsXpageXtextup[2]{\setentrycounter[#1]{page}\textup{#2}}
+\providecommand*\glsXpageXtextsl[2]{\setentrycounter[#1]{page}\textsl{#2}}
+\providecommand*\glsXpageXtextsc[2]{\setentrycounter[#1]{page}\textsc{#2}}
+\providecommand*\glsXpageXemph[2]{\setentrycounter[#1]{page}\emph{#2}}
+\providecommand*\glsXpageXglshypernumber[2]{\setentrycounter[#1]{page}\glshypernumber{#2}}
+\providecommand*\glsXpageXhyperrm[2]{\setentrycounter[#1]{page}\hyperrm{#2}}
+\providecommand*\glsXpageXhypersf[2]{\setentrycounter[#1]{page}\hypersf{#2}}
+\providecommand*\glsXpageXhypertt[2]{\setentrycounter[#1]{page}\hypertt{#2}}
+\providecommand*\glsXpageXhyperbf[2]{\setentrycounter[#1]{page}\hyperbf{#2}}
+\providecommand*\glsXpageXhypermd[2]{\setentrycounter[#1]{page}\hypermd{#2}}
+\providecommand*\glsXpageXhyperit[2]{\setentrycounter[#1]{page}\hyperit{#2}}
+\providecommand*\glsXpageXhyperup[2]{\setentrycounter[#1]{page}\hyperup{#2}}
+\providecommand*\glsXpageXhypersl[2]{\setentrycounter[#1]{page}\hypersl{#2}}
+\providecommand*\glsXpageXhypersc[2]{\setentrycounter[#1]{page}\hypersc{#2}}
+\providecommand*\glsXpageXhyperemph[2]{\setentrycounter[#1]{page}\hyperemph{#2}}
+\begin{theglossary}\glossaryheader~n"
+ :close "%~n\end{theglossary}\glossarypostamble~n"
+ :tree)
+(markup-letter-group-list :sep "\glsgroupskip~n")
+(markup-indexentry :open "\relax\glsresetentrylist~n")
+(markup-locclass-list :open "{\glossaryentrynumbers{\relax "
+ :sep ", " :close "}}")
+(markup-locref-list :sep "\delimN ")
+(markup-range :sep "\delimR ")
+
+; define format to use for locations
+
+
+(markup-locref :open "~n\glsXpageXhyperbfit"
+ :close ""
+ :attr "pagehyperbfit")
+(markup-locref :open "~n\glsXpageXglsnumberformat"
+ :close ""
+ :attr "pageglsnumberformat")
+(markup-locref :open "~n\glsXpageXtextrm"
+ :close ""
+ :attr "pagetextrm")
+(markup-locref :open "~n\glsXpageXtextsf"
+ :close ""
+ :attr "pagetextsf")
+(markup-locref :open "~n\glsXpageXtexttt"
+ :close ""
+ :attr "pagetexttt")
+(markup-locref :open "~n\glsXpageXtextbf"
+ :close ""
+ :attr "pagetextbf")
+(markup-locref :open "~n\glsXpageXtextmd"
+ :close ""
+ :attr "pagetextmd")
+(markup-locref :open "~n\glsXpageXtextit"
+ :close ""
+ :attr "pagetextit")
+(markup-locref :open "~n\glsXpageXtextup"
+ :close ""
+ :attr "pagetextup")
+(markup-locref :open "~n\glsXpageXtextsl"
+ :close ""
+ :attr "pagetextsl")
+(markup-locref :open "~n\glsXpageXtextsc"
+ :close ""
+ :attr "pagetextsc")
+(markup-locref :open "~n\glsXpageXemph"
+ :close ""
+ :attr "pageemph")
+(markup-locref :open "~n\glsXpageXglshypernumber"
+ :close ""
+ :attr "pageglshypernumber")
+(markup-locref :open "~n\glsXpageXhyperrm"
+ :close ""
+ :attr "pagehyperrm")
+(markup-locref :open "~n\glsXpageXhypersf"
+ :close ""
+ :attr "pagehypersf")
+(markup-locref :open "~n\glsXpageXhypertt"
+ :close ""
+ :attr "pagehypertt")
+(markup-locref :open "~n\glsXpageXhyperbf"
+ :close ""
+ :attr "pagehyperbf")
+(markup-locref :open "~n\glsXpageXhypermd"
+ :close ""
+ :attr "pagehypermd")
+(markup-locref :open "~n\glsXpageXhyperit"
+ :close ""
+ :attr "pagehyperit")
+(markup-locref :open "~n\glsXpageXhyperup"
+ :close ""
+ :attr "pagehyperup")
+(markup-locref :open "~n\glsXpageXhypersl"
+ :close ""
+ :attr "pagehypersl")
+(markup-locref :open "~n\glsXpageXhypersc"
+ :close ""
+ :attr "pagehypersc")
+(markup-locref :open "~n\glsXpageXhyperemph"
+ :close ""
+ :attr "pagehyperemph")
+
+; define letter group list format
+
+(markup-letter-group-list :sep "\glsgroupskip~n")
+
+; letter group headings
+
+(markup-letter-group :open-head "\glsgroupheading{"
+ :close-head "}")
+
+; additional letter groups
+
+(define-letter-group "glsnumbers"
+ :prefixes ("0" "1" "2" "3" "4" "5" "6" "7" "8" "9")
+ :before "A")
+
+; additional sort rules
+
+
+; The following is copied from xindy/lang/english/utf8-lang.xdy
+
+(define-sort-rule-orientations (forward backward forward forward))
+(use-rule-set :run 0
+ :rule-set ("en-alphabetize" "en-ignore-special"))
+(use-rule-set :run 1
+ :rule-set ("en-resolve-diacritics" "en-ignore-special"))
+(use-rule-set :run 2
+ :rule-set ("en-resolve-case" "en-ignore-special"))
+(use-rule-set :run 3
+ :rule-set ("en-resolve-special"))
+
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</samplexdy-mc.xdy>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*samplexdy-mc207.xdy>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+;; xindy style file for samplexdy.tex that has Mc letter group
+
+(define-letter-group "A" :prefixes ("€"))
+(define-letter-group "B" :after "A" :prefixes ("„"))
+(define-letter-group "C" :after "B" :prefixes ("†"))
+(define-letter-group "D" :after "C" :prefixes (""))
+(define-letter-group "E" :after "D" :prefixes ("—"))
+(define-letter-group "F" :after "E" :prefixes ("œ"))
+(define-letter-group "G" :after "F" :prefixes (""))
+(define-letter-group "H" :after "G" :prefixes ("¤"))
+(define-letter-group "I" :after "H" :prefixes ("¨"))
+(define-letter-group "J" :after "I" :prefixes ("¬"))
+(define-letter-group "K" :after "J" :prefixes ("®"))
+(define-letter-group "L" :after "K" :prefixes ("´"))
+(define-letter-group "Mc" :after "L" :prefixes ("Ƞ"))
+(define-letter-group "M" :after "Mc" :prefixes ("»"))
+(define-letter-group "N" :after "M" :prefixes ("¼"))
+(define-letter-group "O" :after "N" :prefixes ("Ã"))
+(define-letter-group "P" :after "O" :prefixes ("È"))
+(define-letter-group "Q" :after "P" :prefixes ("Ê"))
+(define-letter-group "R" :after "Q" :prefixes ("Ë"))
+(define-letter-group "S" :after "R" :prefixes ("Ð"))
+(define-letter-group "T" :after "S" :prefixes ("Ú"))
+(define-letter-group "U" :after "T" :prefixes ("à"))
+(define-letter-group "V" :after "U" :prefixes ("å"))
+(define-letter-group "W" :after "V" :prefixes ("æ"))
+(define-letter-group "X" :after "W" :prefixes ("ë"))
+(define-letter-group "Y" :after "X" :prefixes ("í"))
+(define-letter-group "Ȝ" :after "Y" :prefixes ("ï"))
+(define-letter-group "Z" :after "Ȝ" :prefixes ("ð"))
+(define-letter-group "Þ" :after "Z" :prefixes ("ö"))
+(define-letter-group "Æ¿" :after "Þ" :prefixes ("÷"))
+
+(define-rule-set "en-alphabetize"
+
+ :rules (("à" "€" :string)
+ ("À" "€" :string)
+ ("Æ" "€—" :string)
+ ("æ" "€—" :string)
+ ("Ç" "†" :string)
+ ("ç" "†" :string)
+ ("ð" "" :string)
+ ("Ð" "" :string)
+ ("É" "—" :string)
+ ("Ê" "—" :string)
+ ("È" "—" :string)
+ ("Ë" "—" :string)
+ ("è" "—" :string)
+ ("ë" "—" :string)
+ ("ê" "—" :string)
+ ("é" "—" :string)
+ ("Ï" "¨" :string)
+ ("ï" "¨" :string)
+ ("Ñ" "¼" :string)
+ ("ñ" "¼" :string)
+ ("Ö" "Ã" :string)
+ ("Ô" "Ã" :string)
+ ("ô" "Ã" :string)
+ ("ö" "Ã" :string)
+ ("œ" "×" :string)
+ ("Œ" "×" :string)
+ ("ȝ" "ï" :string)
+ ("Ȝ" "ï" :string)
+ ("þ" "ö" :string)
+ ("Þ" "ö" :string)
+ ("Ç·" "÷" :string)
+ ("Æ¿" "÷" :string)
+ ("a" "€" :string)
+ ("A" "€" :string)
+ ("b" "„" :string)
+ ("B" "„" :string)
+ ("C" "†" :string)
+ ("c" "†" :string)
+ ("d" "" :string)
+ ("D" "" :string)
+ ("E" "—" :string)
+ ("e" "—" :string)
+ ("F" "œ" :string)
+ ("f" "œ" :string)
+ ("g" "" :string)
+ ("G" "" :string)
+ ("H" "¤" :string)
+ ("h" "¤" :string)
+ ("I" "¨" :string)
+ ("i" "¨" :string)
+ ("J" "¬" :string)
+ ("j" "¬" :string)
+ ("K" "®" :string)
+ ("k" "®" :string)
+ ("L" "´" :string)
+ ("l" "´" :string)
+ ("Mc" "Ƞ" :string)
+ ("Mac" "Ƞ" :string)
+ ("M" "»" :string)
+ ("m" "»" :string)
+ ("N" "¼" :string)
+ ("n" "¼" :string)
+ ("O" "Ã" :string)
+ ("o" "Ã" :string)
+ ("P" "È" :string)
+ ("p" "È" :string)
+ ("q" "Ê" :string)
+ ("Q" "Ê" :string)
+ ("r" "Ë" :string)
+ ("R" "Ë" :string)
+ ("S" "Ð" :string)
+ ("s" "Ð" :string)
+ ("T" "Ú" :string)
+ ("t" "Ú" :string)
+ ("u" "à" :string)
+ ("U" "à" :string)
+ ("v" "å" :string)
+ ("V" "å" :string)
+ ("w" "æ" :string)
+ ("W" "æ" :string)
+ ("X" "ë" :string)
+ ("x" "ë" :string)
+ ("Y" "í" :string)
+ ("y" "í" :string)
+ ("z" "ð" :string)
+ ("Z" "ð" :string)
+ ))
+
+(define-rule-set "en-resolve-diacritics"
+
+ :rules (("ȝ" "¢" :string)
+ ("þ" "¢" :string)
+ ("Ç·" "¢" :string)
+ ("Þ" "¢" :string)
+ ("Ȝ" "¢" :string)
+ ("Æ¿" "¢" :string)
+ ("Ö" "£" :string)
+ ("Ñ" "£" :string)
+ ("ð" "£" :string)
+ ("Ç" "£" :string)
+ ("É" "£" :string)
+ ("Ï" "£" :string)
+ ("ï" "£" :string)
+ ("ö" "£" :string)
+ ("ñ" "£" :string)
+ ("ç" "£" :string)
+ ("à" "£" :string)
+ ("À" "£" :string)
+ ("é" "£" :string)
+ ("Ð" "£" :string)
+ ("Ô" "¤" :string)
+ ("ô" "¤" :string)
+ ("È" "¤" :string)
+ ("è" "¤" :string)
+ ("Ë" "¥" :string)
+ ("ë" "¥" :string)
+ ("Ê" "¦" :string)
+ ("ê" "¦" :string)
+ ("œ" "ÿ" :string)
+ ("Æ" "ÿ" :string)
+ ("Œ" "ÿ" :string)
+ ("æ" "ÿ" :string)
+ ("S" "¢" :string)
+ ("K" "¢" :string)
+ ("d" "¢" :string)
+ ("Y" "¢" :string)
+ ("E" "¢" :string)
+ ("y" "¢" :string)
+ ("g" "¢" :string)
+ ("e" "¢" :string)
+ ("J" "¢" :string)
+ ("q" "¢" :string)
+ ("D" "¢" :string)
+ ("b" "¢" :string)
+ ("z" "¢" :string)
+ ("w" "¢" :string)
+ ("Q" "¢" :string)
+ ("M" "¢" :string)
+ ("C" "¢" :string)
+ ("L" "¢" :string)
+ ("X" "¢" :string)
+ ("P" "¢" :string)
+ ("T" "¢" :string)
+ ("a" "¢" :string)
+ ("N" "¢" :string)
+ ("j" "¢" :string)
+ ("Z" "¢" :string)
+ ("u" "¢" :string)
+ ("k" "¢" :string)
+ ("t" "¢" :string)
+ ("W" "¢" :string)
+ ("v" "¢" :string)
+ ("s" "¢" :string)
+ ("B" "¢" :string)
+ ("H" "¢" :string)
+ ("c" "¢" :string)
+ ("I" "¢" :string)
+ ("G" "¢" :string)
+ ("U" "¢" :string)
+ ("F" "¢" :string)
+ ("r" "¢" :string)
+ ("x" "¢" :string)
+ ("V" "¢" :string)
+ ("h" "¢" :string)
+ ("f" "¢" :string)
+ ("i" "¢" :string)
+ ("A" "¢" :string)
+ ("O" "¢" :string)
+ ("n" "¢" :string)
+ ("m" "¢" :string)
+ ("l" "¢" :string)
+ ("p" "¢" :string)
+ ("R" "¢" :string)
+ ("o" "¢" :string)
+ ))
+
+(define-rule-set "en-resolve-case"
+
+ :rules (("Ö" "8" :string)
+ ("Ñ" "8" :string)
+ ("Ô" "8" :string)
+ ("Ç" "8" :string)
+ ("É" "8" :string)
+ ("Ï" "8" :string)
+ ("Ê" "8" :string)
+ ("È" "8" :string)
+ ("Ë" "8" :string)
+ ("Ç·" "8" :string)
+ ("À" "8" :string)
+ ("Þ" "8" :string)
+ ("Ȝ" "8" :string)
+ ("Ð" "8" :string)
+ ("Æ" "89" :string)
+ ("Œ" "89" :string)
+ ("ð" "9" :string)
+ ("ô" "9" :string)
+ ("ȝ" "9" :string)
+ ("ï" "9" :string)
+ ("ö" "9" :string)
+ ("ñ" "9" :string)
+ ("ç" "9" :string)
+ ("à" "9" :string)
+ ("þ" "9" :string)
+ ("è" "9" :string)
+ ("ë" "9" :string)
+ ("ê" "9" :string)
+ ("é" "9" :string)
+ ("Æ¿" "9" :string)
+ ("œ" "99" :string)
+ ("æ" "99" :string)
+ ("S" "8" :string)
+ ("K" "8" :string)
+ ("Y" "8" :string)
+ ("E" "8" :string)
+ ("J" "8" :string)
+ ("D" "8" :string)
+ ("Q" "8" :string)
+ ("M" "8" :string)
+ ("C" "8" :string)
+ ("L" "8" :string)
+ ("X" "8" :string)
+ ("P" "8" :string)
+ ("T" "8" :string)
+ ("N" "8" :string)
+ ("Z" "8" :string)
+ ("W" "8" :string)
+ ("B" "8" :string)
+ ("H" "8" :string)
+ ("I" "8" :string)
+ ("G" "8" :string)
+ ("U" "8" :string)
+ ("F" "8" :string)
+ ("V" "8" :string)
+ ("A" "8" :string)
+ ("O" "8" :string)
+ ("R" "8" :string)
+ ("d" "9" :string)
+ ("y" "9" :string)
+ ("g" "9" :string)
+ ("e" "9" :string)
+ ("q" "9" :string)
+ ("b" "9" :string)
+ ("z" "9" :string)
+ ("w" "9" :string)
+ ("a" "9" :string)
+ ("j" "9" :string)
+ ("u" "9" :string)
+ ("k" "9" :string)
+ ("t" "9" :string)
+ ("v" "9" :string)
+ ("s" "9" :string)
+ ("c" "9" :string)
+ ("r" "9" :string)
+ ("x" "9" :string)
+ ("h" "9" :string)
+ ("f" "9" :string)
+ ("i" "9" :string)
+ ("n" "9" :string)
+ ("m" "9" :string)
+ ("l" "9" :string)
+ ("p" "9" :string)
+ ("o" "9" :string)
+ ))
+
+(define-rule-set "en-ignore-special"
+
+ :rules (("-" "" :string)
+ ("!" "" :string)
+ ("{" "" :string)
+ ("'" "" :string)
+ ("}" "" :string)
+ ("?" "" :string)
+ ("." "" :string)
+ ))
+
+(define-rule-set "en-resolve-special"
+
+ :rules (("Ö" "¤" :string)
+ ("Ñ" "¤" :string)
+ ("ð" "¤" :string)
+ ("Ô" "¤" :string)
+ ("Ç" "¤" :string)
+ ("É" "¤" :string)
+ ("ô" "¤" :string)
+ ("Ï" "¤" :string)
+ ("ȝ" "¤" :string)
+ ("ï" "¤" :string)
+ ("Ê" "¤" :string)
+ ("ö" "¤" :string)
+ ("ñ" "¤" :string)
+ ("È" "¤" :string)
+ ("ç" "¤" :string)
+ ("Ë" "¤" :string)
+ ("à" "¤" :string)
+ ("þ" "¤" :string)
+ ("Ç·" "¤" :string)
+ ("è" "¤" :string)
+ ("À" "¤" :string)
+ ("ë" "¤" :string)
+ ("Þ" "¤" :string)
+ ("ê" "¤" :string)
+ ("é" "¤" :string)
+ ("Ȝ" "¤" :string)
+ ("Æ¿" "¤" :string)
+ ("Ð" "¤" :string)
+ ("œ" "¤¤" :string)
+ ("Æ" "¤¤" :string)
+ ("Œ" "¤¤" :string)
+ ("æ" "¤¤" :string)
+ ("?" "¡" :string)
+ ("!" "¢" :string)
+ ("." "£" :string)
+ ("S" "¤" :string)
+ ("K" "¤" :string)
+ ("d" "¤" :string)
+ ("Y" "¤" :string)
+ ("E" "¤" :string)
+ ("y" "¤" :string)
+ ("g" "¤" :string)
+ ("e" "¤" :string)
+ ("J" "¤" :string)
+ ("q" "¤" :string)
+ ("D" "¤" :string)
+ ("b" "¤" :string)
+ ("z" "¤" :string)
+ ("w" "¤" :string)
+ ("Q" "¤" :string)
+ ("M" "¤" :string)
+ ("C" "¤" :string)
+ ("L" "¤" :string)
+ ("X" "¤" :string)
+ ("P" "¤" :string)
+ ("T" "¤" :string)
+ ("a" "¤" :string)
+ ("N" "¤" :string)
+ ("j" "¤" :string)
+ ("Z" "¤" :string)
+ ("u" "¤" :string)
+ ("k" "¤" :string)
+ ("t" "¤" :string)
+ ("W" "¤" :string)
+ ("v" "¤" :string)
+ ("s" "¤" :string)
+ ("B" "¤" :string)
+ ("H" "¤" :string)
+ ("c" "¤" :string)
+ ("I" "¤" :string)
+ ("G" "¤" :string)
+ ("U" "¤" :string)
+ ("F" "¤" :string)
+ ("r" "¤" :string)
+ ("x" "¤" :string)
+ ("V" "¤" :string)
+ ("h" "¤" :string)
+ ("f" "¤" :string)
+ ("i" "¤" :string)
+ ("A" "¤" :string)
+ ("O" "¤" :string)
+ ("n" "¤" :string)
+ ("m" "¤" :string)
+ ("l" "¤" :string)
+ ("p" "¤" :string)
+ ("R" "¤" :string)
+ ("o" "¤" :string)
+ ("-" "¥" :string)
+ ("'" "¦" :string)
+ ("{" "§" :string)
+ ("}" "¨" :string)
+ ))
+
+; The following section is customised for samplexdy.tex
+; (copied from samplexdy.xdy automatically generated by
+; samplexdy.tex)
+
+; required styles
+
+(require "tex.xdy")
+
+; list of allowed attributes (number formats)
+
+(define-attributes (("default"
+ "glsnumberformat"
+ "textrm"
+ "textsf"
+ "texttt"
+ "textbf"
+ "textmd"
+ "textit"
+ "textup"
+ "textsl"
+ "textsc"
+ "emph"
+ "glshypernumber"
+ "hyperrm"
+ "hypersf"
+ "hypertt"
+ "hyperbf"
+ "hypermd"
+ "hyperit"
+ "hyperup"
+ "hypersl"
+ "hypersc"
+ "hyperemph"
+ "hyperbfit")))
+
+; user defined alphabets
+
+
+
+; location class definitions
+
+(define-location-class "roman-page-numbers"
+ ("roman-numbers-lowercase"))
+(define-location-class "Roman-page-numbers"
+ ("roman-numbers-uppercase"))
+(define-location-class "arabic-page-numbers"
+ ("arabic-numbers"))
+(define-location-class "alpha-page-numbers"
+ ("alpha"))
+(define-location-class "Alpha-page-numbers"
+ ("ALPHA"))
+(define-location-class "Appendix-page-numbers"
+ ("ALPHA" :sep "." "arabic-numbers"))
+(define-location-class "arabic-section-numbers"
+ ("arabic-numbers" :sep "." "arabic-numbers"))
+
+; user defined location classes
+
+(define-location-class "Numberstring"
+ (:sep "\protect \Numberstringnum {" "arabic-numbers" :sep "}"))
+
+; define cross-reference class
+
+(define-crossref-class "see" :unverified )
+(markup-crossref-list :class "see"
+ :open "\glsseeformat" :close "{}")
+
+; define the order of the location classes
+(define-location-class-order (
+ "roman-page-numbers"
+ "arabic-page-numbers"
+ "arabic-section-numbers"
+ "alpha-page-numbers"
+ "Roman-page-numbers"
+ "Alpha-page-numbers"
+ "Appendix-page-numbers"
+ "see" ))
+
+; define the glossary markup
+
+(markup-index
+ :open "\glossarysection[\glossarytoctitle]{\glossarytitle}\glossarypreamble~n\begin{theglossary}\glossaryheader~n"
+ :close "~n\end{theglossary}~n\glossarypostamble~n"
+ :tree)
+(markup-letter-group-list :sep "\glsgroupskip~n")
+(markup-indexentry :open "~n" :depth 0)
+(markup-locclass-list :open "{\glossaryentrynumbers{\relax "
+ :sep ", " :close "}}")
+(markup-locref-list :sep "\delimN ")
+(markup-range :sep "\delimR ")
+
+; define format to use for locations
+
+
+(markup-locref :open "~n\setentrycounter{page}\glsnumberformat{"
+ :close "}"
+ :attr "glsnumberformat")
+(markup-locref :open "~n\setentrycounter{page}\textrm{"
+ :close "}"
+ :attr "textrm")
+(markup-locref :open "~n\setentrycounter{page}\textsf{"
+ :close "}"
+ :attr "textsf")
+(markup-locref :open "~n\setentrycounter{page}\texttt{"
+ :close "}"
+ :attr "texttt")
+(markup-locref :open "~n\setentrycounter{page}\textbf{"
+ :close "}"
+ :attr "textbf")
+(markup-locref :open "~n\setentrycounter{page}\textmd{"
+ :close "}"
+ :attr "textmd")
+(markup-locref :open "~n\setentrycounter{page}\textit{"
+ :close "}"
+ :attr "textit")
+(markup-locref :open "~n\setentrycounter{page}\textup{"
+ :close "}"
+ :attr "textup")
+(markup-locref :open "~n\setentrycounter{page}\textsl{"
+ :close "}"
+ :attr "textsl")
+(markup-locref :open "~n\setentrycounter{page}\textsc{"
+ :close "}"
+ :attr "textsc")
+(markup-locref :open "~n\setentrycounter{page}\emph{"
+ :close "}"
+ :attr "emph")
+(markup-locref :open "~n\setentrycounter{page}\glshypernumber{"
+ :close "}"
+ :attr "glshypernumber")
+(markup-locref :open "~n\setentrycounter{page}\hyperrm{"
+ :close "}"
+ :attr "hyperrm")
+(markup-locref :open "~n\setentrycounter{page}\hypersf{"
+ :close "}"
+ :attr "hypersf")
+(markup-locref :open "~n\setentrycounter{page}\hypertt{"
+ :close "}"
+ :attr "hypertt")
+(markup-locref :open "~n\setentrycounter{page}\hyperbf{"
+ :close "}"
+ :attr "hyperbf")
+(markup-locref :open "~n\setentrycounter{page}\hypermd{"
+ :close "}"
+ :attr "hypermd")
+(markup-locref :open "~n\setentrycounter{page}\hyperit{"
+ :close "}"
+ :attr "hyperit")
+(markup-locref :open "~n\setentrycounter{page}\hyperup{"
+ :close "}"
+ :attr "hyperup")
+(markup-locref :open "~n\setentrycounter{page}\hypersl{"
+ :close "}"
+ :attr "hypersl")
+(markup-locref :open "~n\setentrycounter{page}\hypersc{"
+ :close "}"
+ :attr "hypersc")
+(markup-locref :open "~n\setentrycounter{page}\hyperemph{"
+ :close "}"
+ :attr "hyperemph")
+(markup-locref :open "~n\setentrycounter{page}\hyperbfit{"
+ :close "}"
+ :attr "hyperbfit")
+
+; define letter group list format
+
+(markup-letter-group-list :sep "\glsgroupskip~n")
+
+; letter group headings
+
+(markup-letter-group :open-head "\glsgroupheading{"
+ :close-head "}")
+
+(define-letter-group "glsnumbers"
+ :prefixes ("0" "1" "2" "3" "4" "5" "6" "7" "8" "9")
+ :before "A")
+
+; The following is copied from xindy/lang/english/utf8-lang.xdy
+
+(define-sort-rule-orientations (forward backward forward forward))
+(use-rule-set :run 0
+ :rule-set ("en-alphabetize" "en-ignore-special"))
+(use-rule-set :run 1
+ :rule-set ("en-resolve-diacritics" "en-ignore-special"))
+(use-rule-set :run 2
+ :rule-set ("en-resolve-case" "en-ignore-special"))
+(use-rule-set :run 3
+ :rule-set ("en-resolve-special"))
+
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</samplexdy-mc207.xdy>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*database1.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This is a sample database of glossary entries
+ % Only those entries used in the document with \glslink, \gls,
+ % \glspl, and uppercase variants will have entries in the
+ % glossary. Note that the type key is not used, as the
+ % glossary type can be specified in \loadglsentries
+
+\newglossaryentry{array}{name=array,
+description={A list of values identified by a numeric value}}
+
+\newglossaryentry{binary}{name=binary,
+description={Pertaining to numbers represented in base 2}}
+
+\newglossaryentry{comment}{name=comment,
+description={A remark that doesn't affect the meaning of the
+code}}
+
+\newglossaryentry{global}{name=global,
+description={Something that maintains its state when it leaves
+the current group}}
+
+\newglossaryentry{local}{name=local,
+description={Something that only maintains its state until
+it leaves the group in which it was defined/changed}}
+
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</database1.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*database2.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This is a sample database of glossary entries
+ % Only those entries used in the document with \glslink, \gls,
+ % \glspl, and uppercase variants will have entries in the
+ % glossary. Note that the type key is not used, as the
+ % glossary type can be specified in \loadglsentries
+
+ % Don't need to worry about makeindex special characters
+\newglossaryentry{quote}{name={"},
+description={the double quote symbol}}
+
+\newglossaryentry{at}{name={@},
+description={the ``at'' symbol}}
+
+\newglossaryentry{excl}{name={!},
+description={the exclamation mark symbol}}
+
+\newglossaryentry{bar}{name={\ensuremath{|}},
+description={the vertical bar symbol}}
+
+\newglossaryentry{hash}{name={\#},
+description={the hash symbol}}
+
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</database2.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*glossaries.perl>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+# File : glossaries.perl
+# Author : Nicola L.C. Talbot
+# Date : 14th June 2007
+# Last Modified : 2014-09-24
+# Version : 1.06
+# Description : LaTeX2HTML (limited!) implementation of glossaries
+# package. Note that not all the glossaries.sty
+# macros have been implemented.
+# Note that this may not work with new versions of
+# LaTeX2HTML.
+
+# This is a LaTeX2HTML style implementing the glossaries package, and
+# is distributed as part of that package.
+# Copyright 2007 Nicola L.C. Talbot
+# This work may be distributed and/or modified under the
+# conditions of the LaTeX Project Public License, either version 1.3
+# of this license of (at your option) any later version.
+# The latest version of this license is in
+# http://www.latex-project.org/lppl.txt
+# and version 1.3 or later is part of all distributions of LaTeX
+# version 2005/12/01 or later.
+#
+# This work has the LPPL maintenance status `maintained'.
+#
+# The Current Maintainer of this work is Nicola Talbot.
+
+# This work consists of the files glossaries.dtx and glossaries.ins
+# and the derived files glossaries.sty, glossaries-prefix.sty,
+# glossary-hypernav.sty, glossary-inline.sty, glossary-list.sty,
+# glossary-long.sty, glossary-longbooktabs.sty, glossary-longragged.sty,
+# glossary-mcols.sty, glossary-super.sty, glossary-superragged.sty,
+# glossary-tree.sty, glossaries-compatible-207.sty,
+# glossaries-compatible-307.sty, glossaries-accsupp.sty,
+# glossaries-babel.sty, glossaries-polyglossia.sty, glossaries.perl.
+# Also makeglossaries and makeglossaries-lite.lua.
+
+
+package main;
+
+&do_require_package("mfirstuc");
+
+ %glossary_style = ();
+ &set_glossarystyle('altlist');# default style
+
+ $CURRENT_STYLE='altlist';
+
+&process_commands_nowrap_in_tex( <<_RAW_ARG_CMDS_);
+newglossarystyle # {} # {}
+_RAW_ARG_CMDS_
+
+# These are the only package options implemented.
+
+sub do_glossaries_style_altlist{
+}
+
+sub do_glossaries_toc{
+}
+
+sub do_glossaries_toc_true{
+}
+
+$INDEXONLYFIRST=0;
+
+sub do_glossaries_indexonlyfirst{
+ $INDEXONLYFIRST=1;
+}
+
+$gls_nonumberlist{'main'} = 0;
+
+sub do_glossaries_nonumberlist{
+ $gls_nonumberlist{'main'} = 1;
+}
+
+$GLSCURRENTFORMAT="textrm" if (!defined($GLSCURRENTFORMAT));
+$GLOSSARY_END_DESCRIPTION = '.' if (!defined($GLOSSARY_END_DESCRIPTION));
+
+sub do_cmd_glossaryname{
+ "Glossary$_[0]"
+}
+
+$gls_mark{'main'} = "<tex2html_gls_main_mark>";
+$gls_file_mark{'main'} = "<tex2html_gls_main_file_mark>";
+$gls_title{'main'} = "\\glossaryname";
+$gls_toctitle{'main'} = "\\glossaryname";
+$delimN{'main'} = ", ";
+$glsnumformat{'main'} = $GLSCURRENTFORMAT;
+@{$gls_entries{'main'}} = ();
+$gls_displayfirst{'main'} = "glsdisplayfirst";
+$gls_display{'main'} = "glsdisplay";
+
+ %glsentry = ();
+
+$acronymtype = 'main';
+
+sub do_glossaries_acronym{
+ &do_glossaries_acronym_true
+}
+
+sub do_glossaries_acronym_true{
+ &make_newglossarytype("acronym", "\\acronymname");
+ $acronymtype = 'acronym';
+}
+
+sub do_glossaries_acronym_false{
+ $acronymtype = 'main';
+}
+
+sub do_cmd_acronymname{
+ join('', 'Acronyms', $_[0]);
+}
+
+sub do_cmd_acronymtype{
+ join('', $acronymtype, $_[0]);
+}
+
+$global{'glossaryentry'} = 0;
+$global{'glossarysubentry'} = 0;
+
+sub do_cmd_theglossaryentry{
+ join('', $global{'glossaryentry'}, $_[0]);
+}
+
+sub do_cmd_theglossarysubentry{
+ join('', $global{'glossarysubentry'}, $_[0]);
+}
+
+sub do_glossaries_entrycounter{
+ &do_glossaries_entrycounter_true
+}
+
+sub do_glossaries_entrycounter_true{
+ eval(<<'_END_DEF');
+ sub do_cmd_glsresetentrycounter{
+ $global{'entrycounter'} = 0;
+ $_[0];
+ }
+_END_DEF
+}
+
+sub do_glossaries_entrycounter_false{
+ eval(<<'_END_DEF');
+ sub do_cmd_glsresetentrycounter{
+ $_[0];
+ }
+_END_DEF
+}
+
+sub do_cmd_glsresetentrycounter{$_[0];}
+
+sub do_glossaries_subentrycounter{
+ &do_glossaries_subentrycounter_true
+}
+
+sub do_glossaries_subentrycounter_true{
+ eval(<<'_END_DEF');
+ sub do_cmd_glsresetsubentrycounter{
+ $global{'subentrycounter'} = 0;
+ $_[0];
+ }
+_END_DEF
+}
+
+sub do_glossaries_subentrycounter_false{
+ eval(<<'_END_DEF');
+ sub do_cmd_glsresetsubentrycounter{
+ $_[0];
+ }
+_END_DEF
+}
+
+sub do_cmd_glsresetsubentrycounter{ $_[0]; }
+
+# modify set_depth_levels so that glossary is added
+
+sub replace_glossary_markers{
+ foreach $type (keys %gls_mark)
+ {
+ if (defined &add_gls_hook)
+ {&add_gls_hook if (/$gls_mark{$type}/);}
+ else
+ {&add_gls($type) if (/$gls_mark{$type}/);}
+
+ s/$gls_file_mark{$type}/$glsfile{$type}/g;
+ }
+}
+
+# there must be a better way of doing this
+# other than copying the original code and adding to it.
+sub replace_general_markers {
+ if (defined &replace_infopage_hook) {&replace_infopage_hook if (/$info_page_mark/);}
+ else { &replace_infopage if (/$info_page_mark/); }
+ if (defined &add_idx_hook) {&add_idx_hook if (/$idx_mark/);}
+ else {&add_idx if (/$idx_mark/);}
+ &replace_glossary_markers;
+
+ if ($segment_figure_captions) {
+s/$lof_mark/$segment_figure_captions/o
+ } else { s/$lof_mark/$figure_captions/o }
+ if ($segment_table_captions) {
+s/$lot_mark/$segment_table_captions/o
+ } else { s/$lot_mark/$table_captions/o }
+ &replace_morelinks();
+ if (defined &replace_citations_hook) {&replace_citations_hook if /$bbl_mark/;}
+ else {&replace_bbl_marks if /$bbl_mark/;}
+ if (defined &add_toc_hook) {&add_toc_hook if (/$toc_mark/);}
+ else {&add_toc if (/$toc_mark/);}
+ if (defined &add_childs_hook) {&add_childs_hook if (/$childlinks_on_mark/);}
+ else {&add_childlinks if (/$childlinks_on_mark/);}
+ &remove_child_marks;
+
+ if (defined &replace_cross_references_hook) {&replace_cross_references_hook;}
+ else {&replace_cross_ref_marks if /$cross_ref_mark||$cross_ref_visible_mark/;}
+ if (defined &replace_external_references_hook) {&replace_external_references_hook;}
+ else {&replace_external_ref_marks if /$external_ref_mark/;}
+ if (defined &replace_cite_references_hook) {&replace_cite_references_hook;}
+ else { &replace_cite_marks if /$cite_mark/; }
+ if (defined &replace_user_references) {
+ &replace_user_references if /$user_ref_mark/; }
+
+}
+
+sub add_gls{
+ local($sidx_style, $eidx_style) =('<STRONG>','</STRONG>');
+ if ($INDEX_STYLES) {
+if ($INDEX_STYLES =~/,/) {
+local(@styles) = split(/\s*,\s*/,$INDEX_STYLES);
+ $sidx_style = join('','<', join('><',@styles) ,'>');
+ $eidx_style = join('','</', join('></',reverse(@styles)) ,'>');
+} else {
+ $sidx_style = join('','<', $INDEX_STYLES,'>');
+ $eidx_style = join('','</', $INDEX_STYLES,'>');
+}
+ }
+ &add_real_gls
+}
+
+sub gls_compare{
+ local($x, $y) = @_;
+
+ if ($x eq '' or $y eq '')
+ {
+ if ($x ne '')
+ {
+ # y is the shorter string
+ return 1;
+ }
+ elsif ($y ne '')
+ {
+ # x is the shorter string
+ return -1;
+ }
+ else
+ {
+ # both empty
+ return 0;
+ }
+ }
+
+ local($x0) = '';
+ local($y0) = '';
+
+ #v1.06 added /i for case-insensitive match
+ if ($x=~s/^(&#(?:\d+|x[\da-f]+);)//i)
+ {
+ $x0 = $1;
+ }
+ elsif ($x=~s/^(.)//)
+ {
+ $x0 = $1;
+ }
+
+ if ($y=~s/^(&#(?:\d+|x[\da-f]+);)//i)
+ {
+ $y0 = $1;
+ }
+ elsif ($y=~s/^(.)//)
+ {
+ $y0 = $1;
+ }
+
+ local($numx);
+
+ if ($x0=~/&#(\d+|x[\da-f]+);/i)
+ {
+ $numx = $1;
+
+ $numx = hex("0$numx") if $numx=~/^x/;
+ }
+ else
+ {
+ $numx = ord($x0);
+ }
+
+ local($numy);
+
+ if ($y0=~/&#(\d+|x[\da-f]+);/i)
+ {
+ $numy = $1;
+
+ $numy = hex("0$numy") if $numy=~/^x/;
+ }
+ else
+ {
+ $numy = ord($y0);
+ }
+
+ if ($numx == $numy)
+ {
+ return &gls_compare($x, $y);
+ }
+ elsif ($numx >= 48 and $numx <= 57) # x in range '0' ... '9'
+ {
+ if ($numy >= 48 and $numy <= 57) # y in range '0' ... '9'
+ {
+ return $numx <=> $numy;
+ }
+ elsif (($numy >= 97 and $numy <= 122) or ($numy >= 65 and $numy <= 90)) # y a letter
+ {
+ # digits are less than letters
+ return -1;
+ }
+ else
+ {
+ # digits are greater than symbols
+ return 1;
+ }
+ }
+ elsif (($numx >= 97 and $numx <= 122) or ($numx >= 65 and $numx <= 90)) # x a letter
+ {
+ if (($numy >= 97 and $numy <= 122) or ($numy >= 65 and $numy <= 90)) # y a letter
+ {
+ if (($numx <= 90 and $numy <= 90) or ($numx >= 97 and $numy >= 97))
+ {
+ # same case (already checked if they are equal)
+
+ return $numx <=> $numy;
+ }
+
+ # are they upper/lower case versions of each other?
+
+ if (($numx >= 97 and $numy == $numx-32))
+ {
+ # x is upper case version of y
+
+ if ($x or $y)
+ {
+ return &gls_compare($x, $y);
+ }
+ else
+ {
+ return -1;
+ }
+ }
+
+ if (($numy >= 97 and $numx == $numy-32))
+ {
+ # y is upper case version of x
+
+ if ($x or $y)
+ {
+ return &gls_compare($x, $y);
+ }
+ else
+ {
+ return 1;
+ }
+ }
+
+ # compare lower case values
+ return lc(chr($numx)) cmp lc(chr($numy));
+ }
+ else
+ {
+ # a-z greater than symbols and digits
+ return 1;
+ }
+ }
+ elsif ($numy >= 48 and $numy <= 57) # y in range '0' ... '9'
+ {
+ # already checked for '0' < x < '9' and '0' < y < '9'
+ # already checked for 'a' < x < 'z' and '0' < y < '9'
+
+ # digits greater than symbols
+ return 1;
+ }
+ elsif (($numy >= 97 and $numy <= 122) or ($numy >= 65 and $numy <= 90)) # y is a letter
+ {
+ # already checked for x is digit and y a is letter
+ # already checked for x is letter and y a is letter
+
+ # symbols and digits are less than letters
+
+ return -1;
+ }
+
+ $numx <=> $numy
+}
+
+sub gloskeysort{
+
+ $a=~/^(.*)###(\d+)$/;
+
+ local($labelx) = $1;
+ local($x_id) =$2;
+
+ $b=~/^(.*)###(\d+)$/;
+
+ local($labely) = $1;
+ local($y_id) = $2;
+
+ local($sortx) = &gls_get_sort($labelx);
+ local($sorty) = &gls_get_sort($labely);
+
+ local($n);
+
+ # are they case-insensitive equivalent?
+
+ if (lc($sortx) eq lc($sorty))
+ {
+ $n = ($sortx cmp $sorty);
+ }
+ else
+ {
+ $n = &gls_compare($sortx, $sorty);
+ }
+
+ unless ($n)
+ {
+ $n = ($x_id <=> $y_id);
+ }
+
+ $n
+}
+
+sub add_parent_if_required{
+ local($label) = @_;
+
+ local($parent) = &gls_get_parent($label);
+
+ if ($parent)
+ {
+ local($type) = &gls_get_type($parent);
+
+ # does this parent have a backlink?
+
+ for my $key (keys %{$glossary{$type}})
+ {
+ return if $key=~/^$parent###\d+$/;
+ }
+
+ # none found, so add empty one
+
+ my $id = ++$global{'max_id'};
+
+ $glossary{$type}{"$parent###$id"} = '';
+ $glossary_entry{$type}{"$parent###$id"} = $parent;
+
+ # check if parent also has a parent
+
+ &add_parent_if_required($parent);
+ }
+}
+
+sub add_real_gls{
+ local($type) = @_;
+ print "\nDoing glossary '$type' ...";
+ local($key, $str, @keys, $thisglsentry, $level, $count,
+ $previous, $current, $id, $linktext, $delimN);
+
+ $TITLE = $gls_toctitle{$type};
+
+ local($oldstyle) = $CURRENT_STYLE;
+
+ if ($gls_style{$type})
+ {
+ &set_glossarystyle($gls_style{$type});
+ }
+
+ # add any parent entries that haven't been referenced
+
+ for my $key (keys %{$glossary{$type}})
+ {
+ my $label = $key;
+ $label =~ s/###\d+$//o; # Remove the unique id's
+
+ &add_parent_if_required($label);
+ }
+
+ @keys = keys %{$glossary{$type}};
+
+ @keys = sort gloskeysort @keys;
+
+ $level = 0;
+
+ $delimN = $delimN{$type};
+
+ $previous = '';
+
+ local($previousentry) = '';
+
+ my $glossaryentryfield = '';
+
+ my $previouscat = '';
+
+ local ($entry);
+
+ foreach $key (@keys)
+ {
+ $current = $key;
+ $current =~ s/\#\#\#\d+$//o; # Remove the unique id's
+
+ my $issame = ($current eq $previous ? 1 : 0);
+
+ $previous = $current;
+
+ $entry = $glossary_entry{$type}{$key};
+
+ unless ($issame)
+ {
+ if ($glossaryentryfield)
+ {
+ $id = ++$global{'max_id'};
+
+ my $level = &gls_get_level($previousentry);
+
+ if ($level > 0)
+ {
+ my $id2 = ++$global{'max_id'};
+
+ $thisglsentry .=
+ "\\glossarysubentryfield $OP$id2$CP$level$OP$id2$CP$glossaryentryfield$OP$id$CP$linktext$OP$id$CP";
+ }
+ else
+ {
+ $thisglsentry .=
+ "\\glossaryentryfield $glossaryentryfield$OP$id$CP$linktext$OP$id$CP";
+ }
+
+ $glossaryentryfield = '';
+ }
+
+ $linktext = '';
+
+ my $currentcat = substr(&gls_get_sort($current), 0, 1);
+
+ if ($currentcat=~/[a-zA-Z]/)
+ {
+ $currentcat = uc($currentcat);
+ }
+ elsif ($currentcat=~/[0-9]/)
+ {
+ $currentcat = 'glsnumbers';
+ }
+ else
+ {
+ $currentcat = 'glssymbols';
+ }
+
+ unless ($previouscat eq $currentcat)
+ {
+ $id = ++$global{'max_id'};
+ $thisglsentry .= "\\glsgroupheading$OP$id$CP$currentcat$OP$id$CP";
+
+ $previouscat = $currentcat;
+ }
+ }
+
+ $previousentry = $entry;
+
+ # Back ref
+
+ if ($gls_nonumberlist{$type})
+ {
+ $linktext = '';
+ }
+ elsif ($glossary{$type}{$key})
+ {
+ $id = ++$global{'max_id'};
+
+ $linktext .= $delimN if ($linktext);
+
+ $linktext .= "$glossary{$type}{$key}\\$glossary_format{$type}{$key}${OP}$id${CP}$glossary_linktext{$type}{$key}${OP}$id${CP}</A>";
+
+ }
+
+ unless ($issame)
+ {
+ $id = ++$global{'max_id'};
+ local($name) = &translate_commands(
+ "\\glsnamefont $OP$id$CP$glsentry{$entry}{name}$OP$id$CP");
+
+ local($symbol) = ($glsentry{$entry}{'symbol'} ?
+ " $glsentry{$entry}{symbol}" : '');
+
+ $id = ++$global{'max_id'};
+ my $id2 = ++$global{'max_id'};
+ my $id3 = ++$global{'max_id'};
+ my $id4 = ++$global{'max_id'};
+
+ $glossaryentryfield = "$OP$id$CP$entry$OP$id$CP" # label
+ . "$OP$id2$CP$name$OP$id2$CP" # name
+ . "$OP$id3$CP$glsentry{$entry}{description}$OP$id3$CP" # description
+ . "$OP$id4$CP$symbol$OP$id4$CP" # symbol
+ }
+
+ }
+
+ if ($glossaryentryfield and $entry)
+ {
+ my $level = &gls_get_level($entry);
+
+ if ($level > 0)
+ {
+ my $id2 = ++$global{'max_id'};
+
+ $thisglsentry .=
+ "\\glossarysubentryfield $OP$id2$CP$level$OP$id2$CP$glossaryentryfield$OP$id$CP$linktext$OP$id$CP";
+ }
+ else
+ {
+ $id = ++$global{'max_id'};
+ $thisglsentry .=
+ "\\glossaryentryfield $glossaryentryfield$OP$id$CP$linktext$OP$id$CP";
+ }
+ }
+
+ $str = &do_env_theglossary($thisglsentry) . &translate_commands("\\glossarypostamble");
+
+ if ($gls_style{$type})
+ {
+ &set_glossarystyle($oldstyle);
+ }
+
+ s/$gls_mark{$type}/$preglossary\n$str\n/s;
+}
+
+sub do_cmd_glstarget{
+ local($_) = @_;
+
+ local($id, $label, $text);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$label=$2;''/eo;
+
+ $text = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$text=$2;''/eo;
+
+ "<A NAME=\"gls:$label\">$text</A>$_";
+}
+
+sub do_cmd_newglossarystyle{
+ local($_) = @_;
+
+ local($id,$style,$defs);
+
+ $style = &missing_braces unless
+ s/$next_pair_rx/$id=$1;$style=$2;''/eo;
+
+ $defs = &missing_braces unless
+ s/$next_pair_rx/$id=$1;$defs=$2;''/eo;
+
+ $glossary_style{$style} = $defs;
+
+ $_;
+}
+
+sub do_cmd_glossarystyle{
+ local($_) = @_;
+
+ local($id,$style);
+
+ $style = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$style=$2;''/eo;
+
+ &set_glossarystyle($style);
+
+ $_;
+}
+
+sub set_glossarystyle{
+ local($style) = @_;
+
+ $CURRENT_STYLE = $style;
+
+ if ($glossary_style{$style})
+ {
+ local($_) = $glossary_style{$style};
+
+ s/$O(\d+)$C/$OP$1$CP/g;
+
+ &translate_commands($_);
+ }
+ else
+ {
+ my $cmd_sub = "set_glossarystyle_$style";
+
+ if (defined(&$cmd_sub))
+ {
+ &$cmd_sub();
+ }
+ else
+ {
+ &write_warnings("Unknown glossary style '$style', defaulting to 'altlist'");
+ &set_glossarystyle_altlist();
+
+ $CURRENT_STYLE = 'altlist';
+ }
+ }
+
+}
+
+sub do_cmd_glspar{ "<P>".$_[0]; }
+
+sub do_cmd_glossaryheader{
+ local($_) = @_;
+ $_
+}
+
+sub do_cmd_glsentryitem{
+ local($_) = @_;
+
+ local($id, $label);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$label=$2;''/eo;
+
+ $_
+}
+
+sub do_cmd_glssubentryitem{
+ local($_) = @_;
+
+ local($id, $label);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$label=$2;''/eo;
+
+ $_
+}
+
+sub do_cmd_glsgroupheading{
+ local($_) = @_;
+
+ local($id, $heading);
+
+ $heading = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$heading=$2;''/eo;
+
+ $_;
+}
+
+sub do_cmd_glossaryentryfield{
+ local($_) = @_;
+
+ local($id, $label, $name, $desc, $symbol, $backlink);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$label=$2;''/eo;
+
+ $name = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$name=$2;''/eo;
+
+ $desc = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$desc=$2;''/eo;
+
+ $symbol = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$symbol=$2;''/eo;
+
+ $backlink = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$backlink=$2;''/eo;
+
+ local($id2) = ++$global{'max_id'};
+
+ "\\glstarget $OP$id$CP$label$OP$id$CP$OP$id2$CP$name$OP$id2$CP\n$desc $backlink\n$_";
+}
+
+sub do_cmd_glossarysubentryfield{
+ local($_) = @_;
+
+ local($id, $level, $label, $name, $desc, $symbol, $backlink);
+
+ $level = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$level=$2;''/eo;
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$label=$2;''/eo;
+
+ $name = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$name=$2;''/eo;
+
+ $desc = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$desc=$2;''/eo;
+
+ $symbol = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$symbol=$2;''/eo;
+
+ $backlink = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$backlink=$2;''/eo;
+
+ local($id2) = ++$global{'max_id'};
+
+ "\\glstarget $OP$id$CP$label$OP$id$CP$OP$id2$CP$name$OP$id2$CP\n$desc $backlink\n$_";
+}
+
+sub do_env_theglossary{
+ local($_) = @_;
+
+ &translate_commands($_);
+}
+
+sub set_glossarystyle_altlist{
+ eval(<<'END_STYLE');
+ sub do_cmd_glossaryheader{
+ local($_) = @_;
+ $_
+ }
+
+ sub do_cmd_glsgroupheading{
+ local($_) = @_;
+
+ local($id, $heading);
+
+ $heading = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$heading=$2;''/eo;
+
+ $_
+ }
+
+ sub do_cmd_glossaryentryfield{
+ local($_) = @_;
+
+ local($id, $id2, $id3, $id4, $id5, $label, $name, $desc, $symbol, $backlink);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$label=$2;''/eo;
+
+ $name = &missing_braces unless
+ s/$next_pair_pr_rx/$id2=$1;$name=$2;''/eo;
+
+ $desc = &missing_braces unless
+ s/$next_pair_pr_rx/$id3=$1;$desc=$2;''/eo;
+
+ $symbol = &missing_braces unless
+ s/$next_pair_pr_rx/$id4=$1;$symbol=$2;''/eo;
+
+ $backlink = &missing_braces unless
+ s/$next_pair_pr_rx/$id5=$1;$backlink=$2;''/eo;
+
+ "<DT>\\glstarget $OP$id$CP$label$OP$id$CP$OP$id2$CP$name$OP$id2$CP\n<DD>"
+ . "$desc\\glspostdescription\\space $backlink$_";
+ }
+
+ sub do_cmd_glossarysubentryfield{
+ local($_) = @_;
+
+ local($id, $id2, $id3, $id4, $id5, $id6, $level,
+ $label, $name, $desc, $symbol, $backlink);
+
+ $level = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$level=$2;''/eo;
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$id2=$1;$label=$2;''/eo;
+
+ $name = &missing_braces unless
+ s/$next_pair_pr_rx/$id3=$1;$name=$2;''/eo;
+
+ $desc = &missing_braces unless
+ s/$next_pair_pr_rx/$id4=$1;$desc=$2;''/eo;
+
+ $symbol = &missing_braces unless
+ s/$next_pair_pr_rx/$id5=$1;$symbol=$2;''/eo;
+
+ $backlink = &missing_braces unless
+ s/$next_pair_pr_rx/$id6=$1;$backlink=$2;''/eo;
+
+ "<P>\\glssubentryitem $OP$id$CP$label$OP$id$CP"
+ ."\\glstarget $OP$id2$CP$label$OP$id2$CP$OP$id3$CP$name$OP$id3$CP"
+ ."$desc\\glspostdescription\\space $backlink\n$_";
+ }
+
+ sub do_env_theglossary{
+ local($_) = @_;
+
+ "<DL>".&translate_commands("\\glossaryheader $_")."</DL>";
+ }
+END_STYLE
+}
+
+sub set_glossarystyle_inline{
+ eval(<<'END_STYLE');
+ sub do_cmd_glossaryheader{
+ local($_) = @_;
+ $_
+ }
+
+ sub do_cmd_glsgroupheading{
+ local($_) = @_;
+
+ local($id, $heading);
+
+ $heading = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$heading=$2;''/eo;
+
+ $_;
+ }
+
+ sub do_cmd_glossaryentryfield{
+ local($_) = @_;
+
+ local($id, $id2, $id3, $id4, $id5, $label, $name, $desc, $symbol, $backlink);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$label=$2;''/eo;
+
+ $name = &missing_braces unless
+ s/$next_pair_pr_rx/$id2=$1;$name=$2;''/eo;
+
+ $desc = &missing_braces unless
+ s/$next_pair_pr_rx/$id3=$1;$desc=$2;''/eo;
+
+ $symbol = &missing_braces unless
+ s/$next_pair_pr_rx/$id4=$1;$symbol=$2;''/eo;
+
+ $backlink = &missing_braces unless
+ s/$next_pair_pr_rx/$id5=$1;$backlink=$2;''/eo;
+
+ local($field) = "\\glsinlinedopostchild $glsinlinesep";
+
+ $field .= "\\glsentryitem $OP$id$CP$label$OP$id$CP"
+ . "\\glsinlinenameformat $OP$id2$CP$label$OP$id2$CP$OP$id3$CP$name$OP$id3$CP";
+
+ $id3 = ++$global{'max_id'};
+
+ if ($desc)
+ {
+ $field .=
+ "\\glsinlinedescformat $OP$id3$CP$desc$OP$id3$CP"
+ ."$OP$id4$CP$symbol$OP$id4$CP"
+ ."$OP$id5$CP$backlink$OP$id5$CP";
+ }
+ else
+ {
+ $field .=
+ "\\glsinlineemptydescformat "
+ ."$OP$id4$CP$symbol$OP$id4$CP"
+ ."$OP$id5$CP$backlink$OP$id5$CP";
+ }
+
+# TODO : check if has children
+
+ local($haschildren) = 0;
+
+ if ($haschildren)
+ {
+ $field .= "\\glsresetsubentrycounter "
+ . "\\glsinlineparentchildseparator "
+ . "\\glsinlinepostchild ";
+ }
+
+ $glsinlinesep = &translate_commands("\\glsinlineseparator ")
+ unless $glsinlinesep;
+
+ $field.$_;
+ }
+
+ sub do_cmd_glossarysubentryfield{
+ local($_) = @_;
+
+ local($id, $id2, $id3, $id4,$id5,$id6,$level,
+ $label, $name, $desc, $symbol, $backlink);
+
+ $level = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1;$level=$2;''/eo;
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$id2=$1;$label=$2;''/eo;
+
+ $name = &missing_braces unless
+ s/$next_pair_pr_rx/$id3=$1;$name=$2;''/eo;
+
+ $desc = &missing_braces unless
+ s/$next_pair_pr_rx/$id4=$1;$desc=$2;''/eo;
+
+ $symbol = &missing_braces unless
+ s/$next_pair_pr_rx/$id5=$1;$symbol=$2;''/eo;
+
+ $backlink = &missing_braces unless
+ s/$next_pair_pr_rx/$id6=$1;$backlink=$2;''/eo;
+
+ "\\glsinlinesubnameformat $OP$id$CP$label$OP$id$CP$OP$id2$CP$name$OP$id2$CP"
+ ."\\glssubentryitem $OP$id3$CP$label$OP$id3$CP"
+ ."\\glsinlinesubdescformat $OP$id4$CP$desc$OP$id4$CP$OP$id5$CP$symbol$OP$id5$CP$OP$id6$CP$backlink$OP$id6$CP"
+ .$_;
+ }
+
+ sub do_env_theglossary{
+ local($_) = @_;
+
+ $glsinlinesep = '';
+
+ &translate_commands("\\glossaryheader $_\\glspostinline ");
+ }
+END_STYLE
+}
+
+local($glsinlinesep,$glsinlinepostchild);
+
+sub do_cmd_glsinlineseparator{
+ local($_) = @_;
+
+ "; $_";
+}
+
+sub do_cmd_glsinlinedopostchild{
+ local($_) = @_;
+
+ $_;
+}
+
+sub do_cmd_glspostdescription{
+ local($_) = @_;
+
+ $GLOSSARY_END_DESCRIPTION.$_;
+}
+
+sub do_cmd_glspostinline{
+ local($_) = @_;
+
+ &translate_commands("\\glspostdescription\\space ").$_;
+}
+
+sub do_cmd_glsinlinepostchild{
+ local($_) = @_;
+
+ $_;
+}
+
+sub do_cmd_glsinlineparentchildseparator{
+ local($_) = @_;
+
+ ": $_";
+}
+
+sub do_cmd_glsinlinesubseparator{
+ local($_) = @_;
+
+ ", $_";
+}
+
+sub do_cmd_glsinlinenameformat{
+ &do_cmd_glstarget(@_);
+}
+
+sub do_cmd_glsinlinedescformat{
+ local($_) = @_;
+
+ local($id, $desc, $symbol, $backlinks);
+
+ $desc = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$desc=$2;''/eo;
+
+ $symbol = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$symbol=$2;''/eo;
+
+ $backlinks = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$backlinks=$2;''/eo;
+
+ "\\space $desc$_";
+}
+
+sub do_cmd_glsinlineemptydescformat{
+ local($_) = @_;
+
+ local($id, $symbol, $backlinks);
+
+ $symbol = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$symbol=$2;''/eo;
+
+ $backlinks = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$backlinks=$2;''/eo;
+
+ $_;
+}
+
+sub do_cmd_glsinlinesubnameformat{
+ local($_) = @_;
+
+ local($id, $id2, $label, $name);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$label=$2;''/eo;
+
+ $name = &missing_braces unless
+ s/$next_pair_pr_rx/$id2=$1,$name=$2;''/eo;
+
+ "\\glstarget $OP$id$CP$label$OP$id$CP$OP$id2$CP$OP$id2$CP$_";
+}
+
+sub do_cmd_glsinlinesubdescformat{
+ local($_) = @_;
+
+ local($id, $desc, $symbol, $backlinks);
+
+ $desc = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$desc=$2;''/eo;
+
+ $symbol = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$symbol=$2;''/eo;
+
+ $backlinks = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$backlinks=$2;''/eo;
+
+ "$desc$_";
+}
+
+sub set_depth_levels {
+ # Sets $outermost_level
+ local($level);
+ # scan the document body, not the preamble, for use of sectioning commands
+ my ($contents) = $_;
+ if ($contents =~ /\\begin\s*((?:$O|$OP)\d+(?:$C|$CP))document\1|\\startdocument/s) {
+$contents = $';
+ }
+ foreach $level ("part", "chapter", "section", "subsection",
+ "subsubsection", "paragraph") {
+last if (($outermost_level) = $contents =~ /\\($level)$delimiter_rx/);
+last if (($outermost_level) = $contents =~ /\\endsegment\s*\[\s*($level)\s*\]/s);
+if ($contents =~ /\\segment\s*($O\d+$C)[^<]+\1\s*($O\d+$C)\s*($level)\s*\2/s)
+{ $outermost_level = $3; last };
+ }
+ $level = ($outermost_level ? $section_commands{$outermost_level} :
+ do {$outermost_level = 'section'; 3;});
+
+ if ($REL_DEPTH && $MAX_SPLIT_DEPTH) {
+$MAX_SPLIT_DEPTH = $level + $MAX_SPLIT_DEPTH;
+ } elsif (!($MAX_SPLIT_DEPTH)) { $MAX_SPLIT_DEPTH = 1 };
+
+ %unnumbered_section_commands = (
+ 'tableofcontents', $level
+, 'listoffigures', $level
+, 'listoftables', $level
+, 'bibliography', $level
+, 'textohtmlindex', $level
+, 'textohtmlglossary', $level
+, 'textohtmlglossaries', $level
+ , %unnumbered_section_commands
+ );
+
+ %section_commands = (
+ %unnumbered_section_commands
+ , %section_commands
+ );
+}
+
+sub add_bbl_and_idx_dummy_commands {
+ local($id) = $global{'max_id'};
+
+ s/([\\]begin\s*$O\d+$C\s*thebibliography)/$bbl_cnt++; $1/eg;
+ ## if ($bbl_cnt == 1) {
+s/([\\]begin\s*$O\d+$C\s*thebibliography)/$id++; "\\bibliography$O$id$C$O$id$C $1"/geo;
+ #}
+ $global{'max_id'} = $id;
+ s/([\\]begin\s*$O\d+$C\s*theindex)/\\textohtmlindex $1/o;
+ s/[\\]printindex/\\textohtmlindex /o;
+ &add_gls_dummy_commands;
+ &lib_add_bbl_and_idx_dummy_commands() if defined(&lib_add_bbl_and_idx_dummy_commands);
+}
+
+sub add_gls_dummy_commands{
+ s/[\\]printglossary/\\textohtmlglossary/sg;
+ s/[\\]printglossaries/\\textohtmlglossaries/sg;
+}
+
+sub get_firstkeyval{
+ local($key,$_) = @_;
+ local($value);
+
+ s/\b$key\s*=$OP(\d+)$CP(.*)$OP\1$CP\s*(,|$)/$value=$2;','/es;
+ undef($value) if $`=~/\b$key\s*=/;
+
+ unless (defined($value))
+ {
+ s/(^|,)\s*$key\s*=\s*([^,]*)\s*(,|$)/,/s;
+ $value=$2;
+ }
+
+ ($value,$_);
+}
+
+# need to get the value of the last key of a given name
+# in the event of multiple occurrences.
+sub get_keyval{
+ local($key,$_) = @_;
+ local($value);
+
+ while (/\b$key\s*=/g)
+ {
+ ($value,$_) = &get_firstkeyval($key, $_);
+ last unless defined($value);
+ }
+
+ ($value,$_);
+}
+
+sub get_boolval{
+ local($key,$_) = @_;
+ local($value);
+
+ while (/\b$key\s*(?:=(true|false))?\b/g)
+ {
+ $value = ($1 ? $1 : 'true');
+ }
+
+ ($value eq 'true' ? 1 : 0, $_);
+}
+
+# This is modified from do_cmd_textohtmlindex
+
+sub do_cmd_textohtmlglossary{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ local($type,$title,$toctitle,$style,$nonumberlist);
+
+ $nonumberlist = 'default';
+
+ ($type,$keyval) = &get_keyval('type', $keyval);
+ ($title,$keyval) = &get_keyval('title', $keyval);
+ ($toctitle,$keyval) = &get_keyval('toctitle', $keyval);
+ ($style,$keyval) = &get_keyval('style', $keyval);
+ ($nonumberlist,$keyval) = &get_boolval('nonumberlist', $keyval);
+
+ &make_textohtmlglossary($type,$toctitle,$title,$style,$nonumberlist).$_;
+}
+
+# add_real_gls does the actual glossary
+sub make_textohtmlglossary{
+ local($type,$toctitle,$title,$style,$nonumberlist) = @_;
+
+ unless (defined($type)) {$type = 'main';}
+
+ unless (defined $gls_mark{$type})
+ {
+ &write_warnings("glossary type '$type' not implemented");
+ }
+
+ if ($style)
+ {
+ $gls_style{$type} = $style;
+ }
+
+ $toctitle = $gls_toctitle{$type} unless ($toctitle or $title);
+
+ $title = $gls_title{$type} unless ($title);
+ $toctitle = $title unless ($toctitle);
+
+ $gls_toctitle{$type} = $toctitle;
+
+ $gls_nonumberlist{$type} = $nonumberlist unless ($nonumberlist eq 'default');
+
+ $toc_sec_title = $toctitle;
+ $glsfile{$type} = $CURRENT_FILE;
+
+ if (defined($frame_main_suffix))
+ {
+ $glsfile{$type}=~s/$frame_main_suffix/$frame_body_suffix/;
+ }
+
+ $TITLE=&translate_commands($toctitle);
+
+ if (%glossary_labels) { &make_glossary_labels(); }
+
+ if (($SHORT_INDEX) && (%glossary_segment))
+ {
+ &make_preglossary();
+ }
+ else
+ {
+ $preglossary = &translate_commands("\\glossarypreamble");
+ }
+
+ local $idx_head = $section_headings{'textohtmlindex'};
+ local($heading) = join(''
+ , &make_section_heading($title, $idx_head)
+ , $gls_mark{$type} );
+ local($pre,$post) = &minimize_open_tags($heading);
+
+ join('',"<BR>\n" , $pre);
+}
+
+sub do_cmd_textohtmlglossaries{
+ local($_) = @_;
+
+ foreach $type (keys %gls_mark)
+ {
+ $id = ++$global{'max_id'};
+ $_ = &make_textohtmlglossary($type,$gls_title{'main'}).$_;
+ }
+
+ $_;
+}
+
+sub make_glossary_labels {
+ local($key, @keys);
+ @keys = keys %glossary_labels;
+ foreach $key (@keys) {
+ if (($ref_files{$key}) && !($ref_files{$key} eq "$glsfile{'main'}")) {
+ local($tmp) = $ref_files{$key};
+ &write_warnings("\nmultiple label $key , target in $glsfile{'main'} masks $tmp ");
+ }
+ $ref_files{$key} .= $glsfile{'main'};
+ }
+}
+
+sub make_preglossary{ &make_real_preglossary }
+sub make_real_preglossary{
+ local($key, @keys, $head, $body);
+ $head = "<HR>\n<H4>Legend:</H4>\n<DL COMPACT>";
+ @keys = keys %glossary_segment;
+ foreach $key (@keys) {
+ local($tmp) = "segment$key";
+ $tmp = $ref_files{$tmp};
+ $body .= "\n<DT>$key<DD>".&make_named_href('',$tmp,$glossary_segment{$key});
+ }
+ $preglossary = join('', $head, $body, "\n</DL>") if ($body);
+}
+
+sub do_cmd_glossary { &do_real_glossary(@_) }
+sub do_real_glossary {
+ local($_) = @_;
+ local($type) = "main";
+ local($anchor,$entry);
+
+ local($type,$pat) = &get_next_optional_argument;
+
+ $entry = &missing_braces unless
+ (s/$next_pair_pr_rx//o&&($entry=$2));
+
+ $anchor = &make_glossary_entry($entry,$anchor_invisible_mark,$type);
+
+ join('', $anchor, $_);
+}
+
+sub make_glossary_entry { &make_real_glossary_entry(@_) }
+sub make_real_glossary_entry {
+ local($entry,$text,$type) = @_;
+ local($this_file) = $CURRENT_FILE;
+
+ $TITLE = $saved_title
+ if (($saved_title)&&(!($TITLE)||($TITLE eq $default_title)));
+
+ # Save the reference
+ local($str) = "$label###" . ++$global{'max_id'}; # Make unique
+
+ local($id) = ++$glsentry{$entry}{'maxid'};
+ local($glsanchor)="gls:$entry$id";
+
+ local($target) = $frame_body_name;
+
+ if (defined($frame_main_suffix))
+ {
+ $this_file=~s/$frame_main_suffix/$frame_body_suffix/;
+ }
+
+ $glossary{$type}{$str} .= &make_half_href($this_file."#$glsanchor");
+ $glossary_format{$type}{$str} = $GLSCURRENTFORMAT;
+ $glossary_entry{$type}{$str} = $entry;
+ $glossary_linktext{$type}{$str} = $TITLE;
+
+ local($mark) = $gls_file_mark{$type};
+
+ $mark = &get_gls_file_mark($type, $entry) if (defined(&get_gls_file_mark));
+
+ $text = &translate_commands($text);
+
+ if (defined($frame_foot_name))
+ {
+ "<A HREF=\"$mark#gls:$entry\" NAME=\"$glsanchor\" TARGET=\"$frame_foot_name\">$text<\/A>";
+ }
+ else
+ {
+ "<A HREF=\"$mark#gls:$entry\" NAME=\"$glsanchor\">$text<\/A>";
+ }
+}
+
+sub make_real_glossary_entry_no_backlink {
+ local($entry,$text,$type) = @_;
+ local($this_file) = $CURRENT_FILE;
+
+ local($target) = $frame_body_name;
+
+ if (defined($frame_main_suffix))
+ {
+ $this_file=~s/$frame_main_suffix/$frame_body_suffix/;
+ }
+
+ local($mark) = $gls_file_mark{$type};
+
+ $mark = &get_gls_file_mark($type, $entry) if (defined(&get_gls_file_mark));
+
+ $text = &translate_commands($text);
+
+ if (defined($frame_foot_name))
+ {
+ "<A HREF=\"$mark#gls:$entry\" NAME=\"$glsanchor\" TARGET=\"$frame_foot_name\">$text<\/A>";
+ }
+ else
+ {
+ "<A HREF=\"$mark#gls:$entry\" >$text<\/A>";
+ }
+}
+
+sub do_cmd_newglossary{
+ local($_) = @_;
+ local($type,$out,$in,$opt,$pat,$title);
+
+ ($opt,$pat) = &get_next_optional_argument;
+
+ $type = &missing_braces unless
+ (s/$next_pair_pr_rx//o&&($type=$2));
+ $in = &missing_braces unless
+ (s/$next_pair_pr_rx//o&&($in=$2));
+ $out = &missing_braces unless
+ (s/$next_pair_pr_rx//o&&($out=$2));
+ $title = &missing_braces unless
+ (s/$next_pair_pr_rx//o&&($title=$2));
+
+ ($opt,$pat) = &get_next_optional_argument;
+
+ &make_newglossarytype($type, $title);
+
+ $_;
+}
+
+sub make_newglossarytype{
+ local($type, $title) = @_;
+
+ $gls_mark{$type} = "<tex2html_gls_${type}_mark>";
+ $gls_file_mark{$type} = "<tex2html_gls_${type}_file_mark>";
+ $gls_title{$type} = $title;
+ $gls_toctitle{$type} = $title;
+ $delimN{$type} = ", ";
+ $glsnumformat{$type} = $GLSCURRENTFORMAT;
+ @{$gls_entries{$type}} = ();
+ $gls_displayfirst{$type} = "glsdisplayfirst";
+ $gls_display{$type} = "glsdisplay";
+ $gls_nonumberlist{$type} = $gls_nonumberlist{'main'};
+}
+
+sub do_cmd_glsdisplay{
+ local($_) = @_;
+ local($text,$description,$symbol,$insert);
+
+ $text = &missing_braces unless
+ (s/$next_pair_pr_rx/$text=$2;''/eo);
+
+ $description = &missing_braces unless
+ (s/$next_pair_pr_rx/$description=$2;''/eo);
+
+ $symbol = &missing_braces unless
+ (s/$next_pair_pr_rx/$symbol=$2;''/eo);
+
+ $insert = &missing_braces unless
+ (s/$next_pair_pr_rx/$insert=$2;''/eo);
+
+ "$text$insert" . $_;
+}
+
+sub do_cmd_glsdisplayfirst{
+ local($_) = @_;
+ local($text,$description,$symbol,$insert);
+
+ $text = &missing_braces unless
+ (s/$next_pair_pr_rx/$text=$2;''/eo);
+
+ $description = &missing_braces unless
+ (s/$next_pair_pr_rx/$description=$2;''/eo);
+
+ $symbol = &missing_braces unless
+ (s/$next_pair_pr_rx/$symbol=$2;''/eo);
+
+ $insert = &missing_braces unless
+ (s/$next_pair_pr_rx/$insert=$2;''/eo);
+
+ "$text$insert" . $_;
+}
+
+sub gls_get_displayfirst{
+ local($type) = @_;
+ local($display)= $gls_displayfirst{$type};
+
+ if (not defined($display))
+ {
+ &write_warnings("Glossary '$type' is not defined");
+ $display='';
+ }
+ elsif ($display eq '')
+ {
+ &write_warnings("glsdisplayfirst not set for glossary '$type'");
+ }
+ else
+ {
+ $display = "\\$display ";
+ }
+
+ $display;
+}
+
+sub gls_get_display{
+ local($type) = @_;
+ local($display)= $gls_display{$type};
+
+ if (not defined($display))
+ {
+ &write_warnings("Glossary '$type' is not defined");
+ $display = '';
+ }
+ elsif ($display eq '')
+ {
+ &write_warnings("glsdisplay not set for glossary '$type'");
+ }
+ else
+ {
+ $display = "\\$display ";
+ }
+
+ $display;
+}
+
+sub do_cmd_glsnamefont{
+ local($_) = @_;
+ local($text);
+
+ $text = &missing_braces unless
+ (s/$next_pair_pr_rx/$text=$2;''/eo);
+
+ "<B>$text</B>$_";
+}
+
+sub do_cmd_newacronym{
+ local($_) = @_;
+ local($label,$abbrev,$long,$opt,$shortplural,$longplural);
+
+ ($opt,$pat) = &get_next_optional_argument;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+ $abbrv = &missing_braces unless
+ (s/$next_pair_pr_rx/$abbrv=$2;''/eo);
+ $long = &missing_braces unless
+ (s/$next_pair_pr_rx/$long=$2;''/eo);
+
+ ($longplural,$opt) = &get_keyval('longplural', $opt);
+ ($shortplural,$opt) = &get_keyval('shortplural', $opt);
+
+ $longplural = $long.'s' unless ($longplural);
+ $shortplural = $abbrv.'s' unless ($shortplural);
+
+ local($cmd) = "\\newglossaryentry";
+ local($id);
+ $id = ++$global{'max_id'};
+ $cmd .= "$OP$id$CP$label$OP$id$CP";
+ $id = ++$global{'max_id'};
+ local($entry) = "type=$OP$id$CP\\acronymtype$OP$id$CP,";
+ $id = ++$global{'max_id'};
+ $entry .= "name=$OP$id$CP$abbrv$OP$id$CP,";
+ $id = ++$global{'max_id'};
+ $entry .= "description=$OP$id$CP$long$OP$id$CP,";
+ $id = ++$global{'max_id'};
+ $entry .= "text=$OP$id$CP$abbrv$OP$id$CP,";
+ $id = ++$global{'max_id'};
+ $entry .= "first=$OP$id$CP$long ($abbrv)$OP$id$CP,";
+ $id = ++$global{'max_id'};
+ $entry .= "plural=$OP$id$CP$shortplural$OP$id$CP,";
+ $id = ++$global{'max_id'};
+ $entry .= "firstplural=$OP$id$CP$longplural ($shortplural)$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $cmd .= "$OP$id$CP$entry,$opt$OP$id$CP";
+
+ &translate_commands($cmd).$_;
+}
+
+sub gls_entry_init{
+ local($label, $type, $name, $desc) = @_;
+
+ %{$glsentry{$label}} =
+ ( type => $type,
+ name => $name,
+ 'sort' => $name,
+ description => $desc,
+ text => $name,
+ first => $name,
+ plural => "${name}s",
+ firstplural => "${name}s",
+ symbol => '',
+ flag => 0,
+ maxid => 0,
+ level => 0,
+ parent => ''
+ );
+
+ $#{@{$glsentry{$label}{children}}} = -1;
+
+ $glsentry{$label};
+}
+
+sub gls_get_type{
+ local($label) = @_;
+ local($type) = '';
+
+ if (&gls_entry_defined($label))
+ {
+ $type = $glsentry{$label}{'type'};
+ }
+ else
+ {
+ &write_warnings("gls_get_type: glossary entry '$label' has not been defined");
+ }
+
+ $type;
+}
+
+sub gls_set_type{
+ local($label, $type) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'type'} = $type;
+ }
+ else
+ {
+ &write_warnings("gls_set_type: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_get_name{
+ local($label) = @_;
+ local($name) = '';
+
+ if (&gls_entry_defined($label))
+ {
+ $name = $glsentry{$label}{'name'};
+ }
+ else
+ {
+ &write_warnings("gls_get_name: glossary entry '$label' has not been defined");
+ }
+
+ $name;
+}
+
+sub gls_set_name{
+ local($label, $name) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'name'} = $name;
+ }
+ else
+ {
+ &write_warnings("gls_set_name: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_get_description{
+ local($label) = @_;
+ local($description) = '';
+
+ if (&gls_entry_defined($label))
+ {
+ $description = $glsentry{$label}{'description'};
+ }
+ else
+ {
+ &write_warnings("gls_get_description: glossary entry '$label' has not been defined");
+ }
+
+ $description;
+}
+
+sub gls_set_description{
+ local($label, $description) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'description'} = $description;
+ }
+ else
+ {
+ &write_warnings("gls_set_description: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_get_symbol{
+ local($label) = @_;
+ local($symbol) = '';
+
+ if (&gls_entry_defined($label))
+ {
+ $symbol = $glsentry{$label}{'symbol'};
+ }
+ else
+ {
+ &write_warnings("gls_get_symbol: glossary entry '$label' has not been defined");
+ }
+
+ $symbol;
+}
+
+sub gls_set_symbol{
+ local($label, $symbol) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'symbol'} = $symbol;
+ }
+ else
+ {
+ &write_warnings("gls_set_symbol: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_get_sort{
+ local($label) = @_;
+ local($sort) = '';
+
+ if (&gls_entry_defined($label))
+ {
+ $sort = $glsentry{$label}{'sort'};
+ }
+ else
+ {
+ &write_warnings("gls_get_sort: glossary entry '$label' has not been defined");
+ }
+
+ $sort;
+}
+
+sub gls_set_sort{
+ local($label, $sort) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'sort'} = $sort;
+ }
+ else
+ {
+ &write_warnings("gls_set_sort: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_get_text{
+ local($label) = @_;
+ local($text) = '';
+
+ if (&gls_entry_defined($label))
+ {
+ $text = $glsentry{$label}{'text'};
+ }
+ else
+ {
+ &write_warnings("gls_get_text: glossary entry '$label' has not been defined");
+ }
+
+ $text;
+}
+
+sub gls_set_text{
+ local($label, $text) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'text'} = $text;
+ }
+ else
+ {
+ &write_warnings("gls_set_text: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_get_plural{
+ local($label) = @_;
+ local($plural) = '';
+
+ if (&gls_entry_defined($label))
+ {
+ $plural = $glsentry{$label}{'plural'};
+ }
+ else
+ {
+ &write_warnings("gls_get_plural: glossary entry '$label' has not been defined");
+ }
+
+ $plural;
+}
+
+sub gls_set_plural{
+ local($label, $plural) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'plural'} = $plural;
+ }
+ else
+ {
+ &write_warnings("gls_set_plural: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_get_firstplural{
+ local($label) = @_;
+ local($firstplural) = '';
+
+ if (&gls_entry_defined($label))
+ {
+ $firstplural = $glsentry{$label}{'firstplural'};
+ }
+ else
+ {
+ &write_warnings("gls_get_firstplural: glossary entry '$label' has not been defined");
+ }
+
+ $firstplural;
+}
+
+sub gls_set_firstplural{
+ local($label, $firstplural) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'firstplural'} = $firstplural;
+ }
+ else
+ {
+ &write_warnings("gls_set_firstplural: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_get_first{
+ local($label) = @_;
+ local($first) = '';
+
+ if (&gls_entry_defined($label))
+ {
+ $first = $glsentry{$label}{'first'};
+ }
+ else
+ {
+ &write_warnings("gls_get_first: glossary entry '$label' has not been defined");
+ }
+
+ $first;
+}
+
+sub gls_set_first{
+ local($label, $first) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'first'} = $first;
+ }
+ else
+ {
+ &write_warnings("gls_set_first: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_get_parent{
+ local($label) = @_;
+
+ local($parent);
+
+ if (&gls_entry_defined($label))
+ {
+ $parent = $glsentry{$label}{'parent'};
+ }
+ else
+ {
+ &write_warnings("gls_get_parent: glossary entry '$label' has not been defined");
+ }
+
+ $parent;
+}
+
+sub gls_get_level{
+ local($label) = @_;
+
+ local($level) = 0;
+
+ if (&gls_entry_defined($label))
+ {
+ $level = $glsentry{$label}{'level'};
+ }
+ else
+ {
+ &write_warnings("gls_get_level: glossary entry '$label' has not been defined");
+ }
+
+ $level;
+}
+
+sub gls_set_parent{
+ local ($label, $parent) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ if ($parent)
+ {
+ if (&gls_entry_defined($parent))
+ {
+ $glsentry{$label}{'parent'} = $parent;
+
+ push @{$glsentry{$parent}{'children'}}, $label;
+
+ $glsentry{$label}{'level'} = $glsentry{$parent}{'level'}+1;
+ }
+ else
+ {
+ &write_warnings("gls_set_parent: parent '$parent' for glossary entry '$label' has not been defined");
+ }
+ }
+ else
+ {
+ $glsentry{$label}{'parent'} = '';
+ }
+ }
+ else
+ {
+ &write_warnings("gls_set_parent: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_get_childcount{
+ my($label) = @_;
+
+ my($count) = 0;
+
+ if (&gls_entry_defined($label))
+ {
+ $count = scalar(@{$glsentry{$label}{'children'}});
+ }
+ else
+ {
+ &write_warnings("gls_get_childcount: glossary entry '$label' has not been defined");
+ }
+
+ $count;
+}
+
+sub gls_get_referenced_childcount{
+ my($label) = @_;
+
+ my($count) = 0;
+
+ if (&gls_entry_defined($label))
+ {
+ $count = scalar(grep(($glsentry{$_}{'maxid'} > 0), @{$glsentry{$label}{'children'}}));
+ }
+ else
+ {
+ &write_warnings("gls_get_childcount: glossary entry '$label' has not been defined");
+ }
+
+ $count;
+}
+
+sub gls_set_userkeys{
+ local($label, @user) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ for (my $idx = 0; $idx < 6; $idx++)
+ {
+ $glsentry{$label}{"user".($idx+1)} = $user[$idx];
+ }
+ }
+ else
+ {
+ &write_warnings("gls_set_user: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_set_user{
+ local($label, $idx, $text) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{"user$idx"} = $text;
+ }
+ else
+ {
+ &write_warnings("gls_set_user: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_set_useri{
+ local($label, $text) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'user1'} = $text;
+ }
+ else
+ {
+ &write_warnings("gls_set_useri: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_set_userii{
+ local($label, $text) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'user2'} = $text;
+ }
+ else
+ {
+ &write_warnings("gls_set_userii: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_set_useriii{
+ local($label, $text) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'user3'} = $text;
+ }
+ else
+ {
+ &write_warnings("gls_set_useriii: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_set_useriv{
+ local($label, $text) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'user4'} = $text;
+ }
+ else
+ {
+ &write_warnings("gls_set_useriv: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_set_userv{
+ local($label, $text) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'user5'} = $text;
+ }
+ else
+ {
+ &write_warnings("gls_set_userv: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_set_uservi{
+ local($label, $text) = @_;
+
+ if (&gls_entry_defined($label))
+ {
+ $glsentry{$label}{'user6'} = $text;
+ }
+ else
+ {
+ &write_warnings("gls_set_uservi: glossary entry '$label' has not been defined");
+ }
+}
+
+sub gls_get_user{
+ local($label, $idx) = @_;
+ local($value) = '';
+
+ if (&gls_entry_defined($label))
+ {
+ $value = $glsentry{$label}{"user".$idx};
+ }
+ else
+ {
+ &write_warnings("gls_get_user[$idx]: glossary entry '$label' has not been defined");
+ }
+
+ $value;
+}
+
+sub gls_used{
+ local($label) = @_;
+ local($flag) = 0;
+
+ if (&gls_entry_defined($label))
+ {
+ $flag = $glsentry{$label}{'flag'};
+ }
+ else
+ {
+ &write_warnings("gls_used: glossary entry '$label' has not been defined");
+ }
+
+ $flag;
+}
+
+sub gls_entry_defined{
+ local($label) = @_;
+
+ (%{$glsentry{$label}}) ? 1 : 0;
+}
+
+sub do_cmd_newglossaryentry{
+ local($_) = @_;
+ local($label,$name,$description,$symbol,$sort,$text,$first,
+ $plural,$firstplural,$type,$keyval,$parent,@user);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$label=$2;''/eo;
+
+ $keyval = &missing_braces unless
+ s/$next_pair_pr_rx/$keyval=$2;''/eo;
+
+ ($name,$keyval) = &get_keyval('name', $keyval);
+ ($description,$keyval) = &get_keyval('description', $keyval);
+ ($symbol,$keyval) = &get_keyval('symbol', $keyval);
+ ($sort,$keyval) = &get_keyval('sort', $keyval);
+ ($text,$keyval) = &get_keyval('text', $keyval);
+ ($first,$keyval) = &get_keyval('first', $keyval);
+ ($firstplural,$keyval) = &get_keyval('firstplural', $keyval);
+ ($plural,$keyval) = &get_keyval('plural', $keyval);
+ ($type,$keyval) = &get_keyval('type', $keyval);
+ ($parent,$keyval) = &get_keyval('parent', $keyval);
+
+ if ($parent and not $name)
+ {
+ $name = &gls_get_name($parent);
+ }
+
+ @user = ();
+
+ for (my $idx = 0; $idx < 6; $idx++)
+ {
+ ($user[$idx],$keyval) = &get_keyval("user".($idx+1), $keyval);
+ }
+
+ if (defined($type))
+ {
+ $type = &translate_commands($type);
+ }
+ else
+ {
+ $type = 'main';
+ }
+
+ &gls_entry_init($label, $type, $name, $description);
+
+ &gls_set_symbol($label, defined($symbol)?$symbol:'');
+
+ $sort = "$name $description" unless (defined($sort) and $sort);
+
+ &gls_set_sort($label, $sort);
+
+ $text = $name unless (defined($text) and $text);
+
+ &gls_set_text($label, $text);
+
+ $first = $text unless (defined($first) and $first);
+
+ &gls_set_first($label, $first);
+
+ $plural = "${text}s" unless (defined($plural) and $plural);
+
+ &gls_set_plural($label, $plural);
+
+ $firstplural = "${first}s" unless (defined($firstplural) and $firstplural);
+
+ &gls_set_firstplural($label, $firstplural);
+
+ &gls_set_userkeys($label, @user);
+
+ &gls_set_parent($label, $parent);
+
+ push @{$gls_entries{$type}}, $label;
+
+ $_;
+}
+
+sub reset_entry{
+ local($label) = @_;
+
+ $glsentry{$label}{'flag'} = 0;
+}
+
+sub unset_entry{
+ local($label) = @_;
+
+ $glsentry{$label}{'flag'} = 1;
+}
+
+sub do_cmd_glsreset{
+ local($_) = @_;
+ local($label);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$label=$2;''/eo;
+
+ &reset_entry($label);
+
+ $_;
+}
+
+sub do_cmd_glsunset{
+ local($_) = @_;
+ local($label);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$label=$2;''/eo;
+
+ &unset_entry($label);
+
+ $_;
+}
+
+sub do_cmd_ifglsused{
+ local($_) = @_;
+ local($label,$true,$false);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$label=$2;''/eo;
+
+ $true = &missing_braces unless
+ s/$next_pair_pr_rx/$true=$2;''/eo;
+
+ $false = &missing_braces unless
+ s/$next_pair_pr_rx/$false=$2;''/eo;
+
+ (&gls_used($label) ? $true : $false) . $_;
+}
+
+sub do_cmd_ifglsentryexists{
+ local($_) = @_;
+ local($label,$true,$false);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$label=$2;''/eo;
+
+ $true = &missing_braces unless
+ s/$next_pair_pr_rx/$true=$2;''/eo;
+
+ $false = &missing_braces unless
+ s/$next_pair_pr_rx/$false=$2;''/eo;
+
+ (&gls_entry_defined($label) ? $true : $false) . $_;
+}
+
+sub gls_add_entry{
+ local($type, $label, $format, $text) = @_;
+
+ local($oldfmt) = $GLSCURRENTFORMAT;
+
+ if (defined($format))
+ {
+ $format=~s/[\(\)]//;
+
+ if ($format)
+ {
+ $GLSCURRENTFORMAT=$format;
+ }
+ }
+
+ $id = ++$global{'max_id'};
+
+ local($str) = &make_real_glossary_entry($label,$text,$type);
+ $GLSCURRENTFORMAT = $oldfmt;
+
+ $str;
+}
+
+sub do_cmd_glsadd{
+ local($_) = @_;
+ local($optarg,$pat,$label,$str,$id,$type,$format);
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ $type = &gls_get_type($label);
+
+ local($dobacklink) = 1;
+
+ if (&gls_used($label))
+ {
+ if ($INDEXONLYFIRST)
+ {
+ $dobacklink = 0;
+ }
+ }
+ else
+ {
+ &unset_entry($label);
+ }
+
+ if (defined $type)
+ {
+ ($format,$optarg) = &get_keyval('format', $optarg);
+ $format='' unless(defined($format));
+
+ if ($dobacklink)
+ {
+ &gls_add_entry($type,$label,$format,"");
+ }
+ else
+ {
+ $glsentry{$label}{'maxid'} = ++$glsentry{$entry}{'maxid'};
+ my $key = $label."###".$glsentry{$label}{'maxid'};
+ $glossary{$type}{$key}='';
+ }
+ }
+ else
+ {
+ &write_warnings("gls_add: glossary entry '$label' undefined");
+ $str = '';
+ }
+
+ $str . $_;
+}
+
+sub do_cmd_glsaddall{
+ local($_) = @_;
+ local($optarg,$pat) = &get_next_optional_argument;
+
+ local($format,$list);
+
+ ($list,$optarg) = &get_keyval('types', $optarg);
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $format='' unless(defined($format));
+
+ local(@types) = keys(%gls_mark);
+
+ if ($list)
+ {
+ @types = split /\s*,\s*/, $list;
+ }
+
+ foreach $type (@types)
+ {
+ # strip leading and trailing spaces
+ $type=~s/^\s*([^\s]+)\s*$/\1/;
+
+ foreach $label (@{$gls_entries{$type}})
+ {
+ local($dobacklink) = 1;
+
+ if (&gls_used($label))
+ {
+ if ($INDEXONLYFIRST)
+ {
+ $dobacklink = 0;
+ }
+ }
+ else
+ {
+ &unset_entry($label);
+ }
+
+ if ($dobacklink)
+ {
+ &gls_add_entry($type,$label,$format,"");
+ }
+ }
+ }
+
+ $_;
+}
+
+sub do_cmd_glsresetall{
+ local($_) = @_;
+ local($types,$pat) = &get_next_optional_argument;
+
+ local(@types) = keys(%gls_mark);
+
+ if (defined($types) and $types)
+ {
+ @types = split /,/, $types;
+ }
+
+ foreach $type (@types)
+ {
+ # strip leasing and trailing spaces
+ $type=~s/^\s*([^\s]+)\s*$/\1/;
+
+ foreach $label (@{$gls_entries{$type}})
+ {
+ &reset_entry($label);
+ }
+ }
+
+ $_;
+}
+
+sub do_cmd_glsunsetall{
+ local($_) = @_;
+ local($types,$pat) = &get_next_optional_argument;
+
+ local(@types) = keys(%gls_mark);
+
+ if (defined($types) and $types)
+ {
+ @types = split /,/, $types;
+ }
+
+ foreach $type (@types)
+ {
+ # strip leasing and trailing spaces
+ $type=~s/^\s*([^\s]+)\s*$/\1/;
+
+ foreach $label (@{$gls_entries{$type}})
+ {
+ &reset_entry($label);
+ }
+ }
+
+ $_;
+}
+
+$glslabel = '';
+
+sub do_cmd_glslabel{ $glslabel.$_[0] }
+
+sub make_glslink{
+ local($type,$label,$format,$text) = @_;
+ local($str) = '';
+
+ $glslabel = $label;
+
+ if (defined $type)
+ {
+ $str = &gls_add_entry($type,$label,$format,$text);
+ }
+ else
+ {
+ &write_warnings("glossary '$type' undefined");
+ }
+
+ $str;
+}
+
+sub do_cmd_glslink{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text,$type,$format,$str);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ $text = &missing_braces unless
+ (s/$next_pair_pr_rx/$text=$2;''/eo);
+
+ # v1.01 removed following lines (\glslink doesn't have
+ # a final optional argument!
+ #local ($space) = '';
+ #if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+ #($optarg,$pat) = &get_next_optional_argument;
+
+ $type = &gls_get_type($label);
+
+ #&make_glslink($type, $label, $format, $text).$space . $_;
+ &make_glslink($type, $label, $format, $text) . $_;
+}
+
+sub do_cmd_glslinkstar{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text,$type,$format,$str);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ $text = &missing_braces unless
+ (s/$next_pair_pr_rx/$text=$2;''/eo);
+
+ $type = &gls_get_type($label);
+
+ $text . $_;
+}
+
+sub do_cmd_glsdisp{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text,$type,$format,$str);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ $text = &missing_braces unless
+ (s/$next_pair_pr_rx/$text=$2;''/eo);
+
+ local($dobacklink) = 1;
+
+ if (&gls_used($label))
+ {
+ if ($INDEXONLYFIRST)
+ {
+ $dobacklink = 0;
+ }
+ }
+ else
+ {
+ &unset_entry($label);
+ }
+
+ $type = &gls_get_type($label);
+
+ if ($dobacklink)
+ {
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+ }
+ else
+ {
+ &make_real_glossary_entry_no_backlink($label, $text, $type). $space . $_;
+ }
+}
+
+sub do_cmd_glshyperlink{
+ local($_) = @_;
+
+ local($text,$pat) = &get_next_optional_argument;
+
+ local($id, $label);
+
+ $label = &missing_braces unless
+ s/$next_pair_pr_rx/$id=$1,$label=$2;''/eo;
+
+ $text = &gls_get_text($label) unless $text;
+
+ local($type) = &gls_get_type($label);
+
+ "<A HREF=\"$gls_file_mark{$type}#gls:$label\">$text<\/A>"
+ .$_;
+}
+
+sub do_cmd_glsentrydesc{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &gls_get_description($label).$_;
+}
+
+sub do_cmd_Glsentrydesc{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &do_real_makefirstuc(&gls_get_description($label)).$_;
+}
+
+sub do_cmd_glsentrytext{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &gls_get_text($label).$_;
+}
+
+sub do_cmd_Glsentrytext{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &do_real_makefirstuc(&gls_get_text($label)).$_;
+}
+
+sub do_cmd_glsentryname{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &gls_get_name($label).$_;
+}
+
+sub do_cmd_Glsentryname{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &do_real_makefirstuc(&gls_get_name($label)).$_;
+}
+
+sub do_cmd_glsentryfirst{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &gls_get_first($label).$_;
+}
+
+sub do_cmd_Glsentryfirst{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &do_real_makefirstuc(&gls_get_first($label)).$_;
+}
+
+sub do_cmd_glsentryplural{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &gls_get_plural($label).$_;
+}
+
+sub do_cmd_Glsentryplural{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &do_real_makefirstuc(&gls_get_plural($label)).$_;
+}
+
+sub do_cmd_glsentryfirstplural{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local($text)=$glsentry{$label}{'firstplural'};
+
+ unless (defined($text))
+ {
+ &write_warnings("glossary entry '$label' has not been defined");
+ $text = '';
+ }
+
+ "$text$_";
+ &gls_get_firstplural($label).$_;
+}
+
+sub do_cmd_Glsentryfirstplural{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &do_real_makefirstuc(&gls_get_firstplural($label)).$_;
+}
+
+sub do_cmd_glsentrysymbol{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &gls_get_symbol($label).$_;
+}
+
+sub do_cmd_Glsentrysymbol{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &do_real_makefirstuc(&gls_get_symbol($label)).$_;
+}
+
+sub do_cmd_glsentryuseri{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &gls_get_user($label, 1).$_;
+}
+
+sub do_cmd_glsentryuserii{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &gls_get_user($label, 2).$_;
+}
+
+sub do_cmd_glsentryuseriii{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &gls_get_user($label, 3).$_;
+}
+
+sub do_cmd_glsentryuseriv{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &gls_get_user($label, 4).$_;
+}
+
+sub do_cmd_glsentryuserv{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &gls_get_user($label, 5).$_;
+}
+
+sub do_cmd_glsentryuservi{
+ local($_) = @_;
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ &gls_get_user($label, 6).$_;
+}
+
+sub do_cmd_gls{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ local($dobacklink) = 1;
+
+ if (&gls_used($label))
+ {
+ # entry has already been used
+
+ $text = &gls_get_text($label);
+ $display = &gls_get_display($type);
+
+ if ($INDEXONLYFIRST)
+ {
+ $dobacklink = 0;
+ }
+ }
+ else
+ {
+ # entry hasn't been used
+
+ $text = &gls_get_first($label);
+ $display = &gls_get_displayfirst($type);
+
+ &unset_entry($label);
+ }
+
+ local($args) = '';
+
+ local($id) = ++$global{'max_id'};
+ $args .= "$OP$id$CP$text$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{description}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{symbol}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$insert$OP$id$CP";
+
+ local($link_text) = &translate_commands("$display$args");
+
+ if ($dobacklink)
+ {
+ &make_glslink($type, $label, $format, $link_text) .$space . $_;
+ }
+ else
+ {
+ &make_real_glossary_entry_no_backlink($label, $link_text, $type). $space . $_;
+ }
+}
+
+# added v1.04
+sub do_cmd_glsstar{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ if (&gls_used($label))
+ {
+ # entry has already been used
+
+ $text = &gls_get_text($label);
+ $display = &gls_get_display($type);
+ }
+ else
+ {
+ # entry hasn't been used
+
+ $text = &gls_get_first($label);
+ $display = &gls_get_displayfirst($type);
+
+ &unset_entry($label);
+ }
+
+ local($args) = '';
+
+ local($id) = ++$global{'max_id'};
+ $args .= "$OP$id$CP$text$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{description}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{symbol}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$insert$OP$id$CP";
+
+ local($link_text) = &translate_commands("$display$args");
+
+ $link_text . $space . $_;
+}
+
+sub do_cmd_glspl{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = $glsentry{$label}{'type'};
+
+ local($dobacklink) = 1;
+
+ if (&gls_used($label))
+ {
+ # entry has already been used
+
+ $text = &gls_get_plural($label);
+ $display = &gls_get_display($type);;
+
+ if ($INDEXONLYFIRST)
+ {
+ $dobacklink = 0;
+ }
+ }
+ else
+ {
+ # entry hasn't been used
+
+ $text = &gls_get_firstplural($label);
+ $display = &gls_get_displayfirst($type);
+
+ &unset_entry($label);
+ }
+
+ local($args) = '';
+
+ local($id) = ++$global{'max_id'};
+ $args .= "$OP$id$CP$text$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{description}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{symbol}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$insert$OP$id$CP";
+
+ local($link_text) = &translate_commands("$display$args");
+
+ if ($dobacklink)
+ {
+ &make_glslink($type, $label, $format, $link_text) .$space . $_;
+ }
+ else
+ {
+ &make_real_glossary_entry_no_backlink($label, $link_text, $type). $space . $_;
+ }
+}
+
+# added v1.04
+sub do_cmd_glsplstar{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = $glsentry{$label}{'type'};
+
+ if (&gls_used($label))
+ {
+ # entry has already been used
+
+ $text = &gls_get_plural($label);
+ $display = &gls_get_display($type);;
+ }
+ else
+ {
+ # entry hasn't been used
+
+ $text = &gls_get_firstplural($label);
+ $display = &gls_get_displayfirst($type);
+
+ &unset_entry($label);
+ }
+
+ local($args) = '';
+
+ local($id) = ++$global{'max_id'};
+ $args .= "$OP$id$CP$text$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{description}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{symbol}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$insert$OP$id$CP";
+
+ local($link_text) = &translate_commands("$display$args");
+
+ $link_text . $space . $_;
+}
+
+sub do_cmd_Gls{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = $glsentry{$label}{'type'};
+
+ local($dobacklink) = 1;
+
+ if (&gls_used($label))
+ {
+ # entry has already been used
+
+ $text = &gls_get_text($label);
+ $display = &gls_get_display($type);;
+
+ if ($INDEXONLYFIRST)
+ {
+ $dobacklink = 0;
+ }
+ }
+ else
+ {
+ # entry hasn't been used
+
+ $text = &gls_get_first($label);
+ $display = &gls_get_displayfirst($type);
+
+ &unset_entry($label);
+ }
+
+ local($args) = '';
+
+ local($id) = ++$global{'max_id'};
+ $args .= "$OP$id$CP$text$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{description}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{symbol}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$insert$OP$id$CP";
+
+ local($link_text) = &do_real_makefirstuc(&translate_commands("$display$args"));
+
+ if ($dobacklink)
+ {
+ &make_glslink($type, $label, $format, $link_text) .$space . $_;
+ }
+ else
+ {
+ &make_real_glossary_entry_no_backlink($label, $link_text, $type). $space . $_;
+ }
+}
+
+# added v1.04
+sub do_cmd_Glsstar{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = $glsentry{$label}{'type'};
+
+ if (&gls_used($label))
+ {
+ # entry has already been used
+
+ $text = &gls_get_text($label);
+ $display = &gls_get_display($type);;
+ }
+ else
+ {
+ # entry hasn't been used
+
+ $text = &gls_get_first($label);
+ $display = &gls_get_displayfirst($type);
+
+ &unset_entry($label);
+ }
+
+ local($args) = '';
+
+ local($id) = ++$global{'max_id'};
+ $args .= "$OP$id$CP$text$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{description}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{symbol}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$insert$OP$id$CP";
+
+ local($link_text) = &translate_commands("$display$args");
+
+ &do_real_makefirstuc($link_text). $space . $_;
+}
+
+sub do_cmd_Glspl{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = $glsentry{$label}{'type'};
+
+ local($dobacklink) = 1;
+
+ if (&gls_used($label))
+ {
+ # entry has already been used
+
+ $text = &gls_get_plural($label);
+ $display = &gls_get_display($type);;
+
+ if ($INDEXONLYFIRST)
+ {
+ $dobacklink = 0;
+ }
+ }
+ else
+ {
+ # entry hasn't been used
+
+ $text = &gls_get_firstplural($label);
+ $display = &gls_get_displayfirst($type);
+
+ &unset_entry($label);
+ }
+
+ local($args) = '';
+
+ local($id) = ++$global{'max_id'};
+ $args .= "$OP$id$CP$text$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{description}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{symbol}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$insert$OP$id$CP";
+
+ local($link_text) = &do_real_makefirstuc(&translate_commands("$display$args"));
+
+ if ($dobacklink)
+ {
+ &make_glslink($type, $label, $format, $link_text) .$space . $_;
+ }
+ else
+ {
+ &make_real_glossary_entry_no_backlink($label, $link_text, $type). $space . $_;
+ }
+}
+
+# added v1.04
+sub do_cmd_Glsplstar{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = $glsentry{$label}{'type'};
+
+ if (&gls_used($label))
+ {
+ # entry has already been used
+
+ $text = &gls_get_plural($label);
+ $display = &gls_get_display($type);;
+ }
+ else
+ {
+ # entry hasn't been used
+
+ $text = &gls_get_firstplural($label);
+ $display = &gls_get_displayfirst($type);
+
+ &unset_entry($label);
+ }
+
+ local($args) = '';
+
+ local($id) = ++$global{'max_id'};
+ $args .= "$OP$id$CP$text$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{description}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{symbol}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$insert$OP$id$CP";
+
+ local($link_text) = &translate_commands("$display$args");
+
+ &do_real_makefirstuc($link_text).$space . $_;
+}
+
+sub do_cmd_GLS{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = $glsentry{$label}{'type'};
+
+ local($dobacklink) = 1;
+
+ if (&gls_used($label))
+ {
+ # entry has already been used
+
+ $text = &gls_get_text($label);
+ $display = &gls_get_display($type);;
+
+ if ($INDEXONLYFIRST)
+ {
+ $dobacklink = 0;
+ }
+ }
+ else
+ {
+ # entry hasn't been used
+
+ $text = &gls_get_first($label);
+ $display = &gls_get_displayfirst($type);
+
+ &unset_entry($label);
+ }
+
+ local($args) = '';
+
+ local($id) = ++$global{'max_id'};
+ $args .= "$OP$id$CP$text$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{description}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{symbol}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$insert$OP$id$CP";
+
+ local($link_text) = uc(&translate_commands("$display$args"));
+
+ if ($dobacklink)
+ {
+ &make_glslink($type, $label, $format, $link_text) .$space . $_;
+ }
+ else
+ {
+ &make_real_glossary_entry_no_backlink($label, $link_text, $type). $space . $_;
+ }
+}
+
+# added v1.04
+sub do_cmd_GLSstar{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = $glsentry{$label}{'type'};
+
+ if (&gls_used($label))
+ {
+ # entry has already been used
+
+ $text = &gls_get_text($label);
+ $display = &gls_get_display($type);;
+ }
+ else
+ {
+ # entry hasn't been used
+
+ $text = &gls_get_first($label);
+ $display = &gls_get_displayfirst($type);
+
+ &unset_entry($label);
+ }
+
+ local($args) = '';
+
+ local($id) = ++$global{'max_id'};
+ $args .= "$OP$id$CP$text$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{description}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{symbol}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$insert$OP$id$CP";
+
+ local($link_text) = &translate_commands("$display$args");
+
+ uc($link_text).$space . $_;
+}
+
+sub do_cmd_GLSpl{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = $glsentry{$label}{'type'};
+
+ local($dobacklink) = 1;
+
+ if (&gls_used($label))
+ {
+ # entry has already been used
+
+ $text = &gls_get_plural($label);
+ $display = &gls_get_display($type);;
+
+ if ($INDEXONLYFIRST)
+ {
+ $dobacklink = 0;
+ }
+ }
+ else
+ {
+ # entry hasn't been used
+
+ $text = &gls_get_firstplural($label);
+ $display = &gls_get_displayfirst($type);
+
+ &unset_entry($label);
+ }
+
+ local($args) = '';
+
+ local($id) = ++$global{'max_id'};
+ $args .= "$OP$id$CP$text$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{description}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{symbol}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$insert$OP$id$CP";
+
+ local($link_text) = uc(&translate_commands("$display$args"));
+
+ if ($dobacklink)
+ {
+ &make_glslink($type, $label, $format, $link_text) .$space . $_;
+ }
+ else
+ {
+ &make_real_glossary_entry_no_backlink($label, $link_text, $type). $space . $_;
+ }
+}
+
+# added v1.04
+sub do_cmd_GLSplstar{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = $glsentry{$label}{'type'};
+
+ if (&gls_used($label))
+ {
+ # entry has already been used
+
+ $text = &gls_get_plural($label);
+ $display = &gls_get_display($type);;
+ }
+ else
+ {
+ # entry hasn't been used
+
+ $text = &gls_get_firstplural($label);
+ $display = &gls_get_displayfirst($type);
+
+ &unset_entry($label);
+ }
+
+ local($args) = '';
+
+ local($id) = ++$global{'max_id'};
+ $args .= "$OP$id$CP$text$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{description}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$glsentry{$label}{symbol}$OP$id$CP";
+
+ $id = ++$global{'max_id'};
+ $args .= "$OP$id$CP$insert$OP$id$CP";
+
+ local($link_text) = &translate_commands("$display$args");
+
+ uc($link_text).$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_glstext{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_text($label);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_Glstext{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_text($label);
+
+ &make_glslink($type, $label, $format, &do_real_makefirstuc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_GLStext{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_text($label);
+
+ &make_glslink($type, $label, $format, uc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_glsname{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_name($label);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_Glsname{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_name($label);
+
+ &make_glslink($type, $label, $format, &do_real_makefirstuc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_GLSname{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_name($label);
+
+ &make_glslink($type, $label, $format, uc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_glsfirst{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_first($label);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_Glsfirst{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_first($label);
+
+ &make_glslink($type, $label, $format, &do_real_makefirstuc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_GLSfirst{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_first($label);
+
+ &make_glslink($type, $label, $format, uc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_glsfirstplural{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_firstplural($label);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_Glsfirstplural{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_firstplural($label);
+
+ &make_glslink($type, $label, $format, &do_real_makefirstuc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_GLSfirstplural{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_firstplural($label);
+
+ &make_glslink($type, $label, $format, uc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_glsplural{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_plural($label);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_Glsplural{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_plural($label);
+
+ &make_glslink($type, $label, $format, &do_real_makefirstuc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_GLSplural{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_plural($label);
+
+ &make_glslink($type, $label, $format, uc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_glsdesc{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_description($label);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_Glsdesc{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_description($label);
+
+ &make_glslink($type, $label, $format, &do_real_makefirstuc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_GLSdesc{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_description($label);
+
+ &make_glslink($type, $label, $format, uc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_glssymbol{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_symbol($label);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_Glssymbol{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_symbol($label);
+
+ &make_glslink($type, $label, $format, &do_real_makefirstuc($text)) .$space . $_;
+}
+
+# added 22 Feb 2008
+sub do_cmd_GLSsymbol{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_symbol($label);
+
+ &make_glslink($type, $label, $format, uc($text)) .$space . $_;
+}
+
+sub do_cmd_glsuseri{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_user($label, 1);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+sub do_cmd_Glsuseri{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &do_real_makefirstuc(&gls_get_user($label, 1));
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+sub do_cmd_glsuserii{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_user($label, 2);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+sub do_cmd_Glsuserii{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &do_real_makefirstuc(&gls_get_user($label, 2));
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+sub do_cmd_glsuseriii{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_user($label, 3);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+sub do_cmd_Glsuseriii{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &do_real_makefirstuc(&gls_get_user($label, 3));
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+sub do_cmd_glsuseriv{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_user($label, 4);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+sub do_cmd_Glsuseriv{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &do_real_makefirstuc(&gls_get_user($label, 4));
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+sub do_cmd_glsuserv{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_user($label, 5);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+sub do_cmd_Glsuserv{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &do_real_makefirstuc(&gls_get_user($label, 5));
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+sub do_cmd_glsuservi{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &gls_get_user($label, 6);
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+sub do_cmd_Glsuservi{
+ local($_) = @_;
+ local($optarg,$pat,$label,$text, $format, $insert);
+
+ ($optarg,$pat) = &get_next_optional_argument;
+
+ ($format,$optarg) = &get_keyval('format', $optarg);
+
+ $label = &missing_braces unless
+ (s/$next_pair_pr_rx/$label=$2;''/eo);
+
+ local ($space) = '';
+ if (/^\s+[^\[]/ or /^\s*\[.*\]\s/) {$space = ' ';}
+
+ $insert = '';
+ ($insert,$pat) = &get_next_optional_argument;
+
+ local($display) = '';
+
+ local($type) = &gls_get_type($label);
+
+ $text = &do_real_makefirstuc(&gls_get_user($label, 6));
+
+ &make_glslink($type, $label, $format, $text) .$space . $_;
+}
+
+sub do_cmd_acrshort{
+ &do_cmd_glstext(@_)
+}
+
+sub do_cmd_Acrshort{
+ &do_cmd_Glstext(@_)
+}
+
+sub do_cmd_ACRshort{
+ &do_cmd_GLStext(@_)
+}
+
+sub do_cmd_acrlong{
+ &do_cmd_glsdesc(@_)
+}
+
+sub do_cmd_Acrlong{
+ &do_cmd_Glsdesc(@_)
+}
+
+sub do_cmd_ACRlong{
+ &do_cmd_GLSdesc(@_)
+}
+
+sub do_cmd_acrfull{
+ &do_cmd_glsfirst(@_)
+}
+
+sub do_cmd_Acrfull{
+ &do_cmd_Glsfirst(@_)
+}
+
+sub do_cmd_ACRfull{
+ &do_cmd_GLSfirst(@_)
+}
+
+sub do_cmd_glossarypreamble{
+ local($_) = @_;
+ $_[0];
+}
+
+sub do_cmd_glossarypostamble{
+ local($_) = @_;
+ $_[0];
+}
+
+sub do_cmd_glsnumformat{
+ local($_) = @_;
+
+ $_;
+}
+
+sub do_cmd_hyperit{
+ join('', "\\textit ", $_[0]);
+}
+
+sub do_cmd_hyperrm{
+ join('', "\\textrm ", $_[0]);
+}
+
+sub do_cmd_hypertt{
+ join('', "\\texttt ", $_[0]);
+}
+
+sub do_cmd_hypersf{
+ join('', "\\textsf ", $_[0]);
+}
+
+sub do_cmd_hyperbf{
+ join('', "\\textbf ", $_[0]);
+}
+
+&ignore_commands( <<_IGNORED_CMDS_ );
+makeglossary
+makeglossaries
+glossaryentrynumbers # {}
+_IGNORED_CMDS_
+
+1;
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</glossaries.perl>
+% \end{macrocode}
+%\fi
+%\Finale
+\endinput