%\iffalse % glossaries-extra.dtx generated using makedtx version 1.2 (c) Nicola Talbot % Command line args: % -setambles ".*\.bib=>\nopreamble\nopostamble" % -section "chapter" % -doc "glossaries-extra-codedoc.tex" % -author "Nicola Talbot" % -macrocode ".*\.tex" % -macrocode ".*\.bib" % -src "glossaries-extra.sty\Z=>glossaries-extra.sty" % -src "glossaries-extra-bib2gls.sty\Z=>glossaries-extra-bib2gls.sty" % -src "glossaries-extra-stylemods.sty\Z=>glossaries-extra-stylemods.sty" % -src "glossary-bookindex.sty\Z=>glossary-bookindex.sty" % -src "glossary-longextra.sty\Z=>glossary-longextra.sty" % -src "glossary-topic.sty\Z=>glossary-topic.sty" % -src "(example-glossaries-.+\.tex)\Z=>\1" % -src "(example-glossaries-.+\.bib)\Z=>\1" % -comment ".*\.tex" % -comment ".*\.bib" % -codetitle "Main Package Code (\\styfmt{glossaries-extra.sty})" % glossaries-extra % Created on 2020/4/1 13:56 %\fi %\iffalse %<*package> %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} % %\fi % \iffalse % Doc-Source file to use with LaTeX2e % Copyright (C) 2020 Nicola Talbot, all rights reserved. % \fi % \iffalse %<*driver> \documentclass[report,widecs]{nlctdoc} \iffalse glossaries-extra-codedoc.tex is a stub file used by makedtx to create glossaries-extra.dtx \fi \usepackage{alltt} \usepackage{pifont} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage[colorlinks, bookmarks, hyperindex=false, pdfauthor={Nicola L.C. Talbot}, pdftitle={glossaries-extra.sty: an extension to the glossaries package}, pdfkeywords={LaTeX,package,glossary,abbreviations}]{hyperref} \usepackage[nonumberlist,nopostdot=false]{glossaries-extra} \RecordChanges \makeglossaries \renewcommand*{\main}[1]{\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}, } \newglossaryentry{bib2gls}{% name={\appfmt{bib2gls}\index{bib2gls=\appfmt{bib2gls}|htextbf}},% sort={bib2gls},% text={\appfmt{bib2gls}\iapp{bib2gls}},% description={A command line Java application that selects entries from a .bib file and converts them to glossary definitions (like \appfmt{bibtex} but also performs hierarchical sorting and collation, thus omitting the need for \gls{xindy} or \gls{makeindex}). Further details at: \url{http://www.dickimaw-books.com/software/bib2gls/}.}% } \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}. \glsadd{firstuseflag}\glsadd{firstusetext}% \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{Counter}{counter}{glossary counters} \doxitem{AbbrvStyle}{abbrvstyle}{abbreviation styles} \doxitem{Style}{style}{glossary styles} \setcounter{IndexColumns}{2} \CheckSum{27181} \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}}} \newcommand*{\locfmt}[1]{\texttt{#1}\SpecialMainIndex{#1}} \newcommand*{\mkidxspch}{\index{makeindex=\appfmt{makeindex}>special characters}} \newcommand*{\igloskey}[2][newglossaryentry]{\icsopt{#1}{#2}} \newcommand*{\gloskey}[2][newglossaryentry]{\csopt{#1}{#2}} \newcommand*{\stylefmt}[1]{\textsf{#1}} \newcommand*{\glostyle}[1]{\stylefmt{#1}% \index{glossary styles:>#1=\protect\stylefmt{#1}|main}} \newcommand*{\acrstyle}[1]{\stylefmt{#1}% \index{acronym styles (glossaries):>#1=\protect\stylefmt{#1}|main}} \newcommand*{\abbrstyle}[1]{\stylefmt{#1}% \index{abbreviation styles:>#1=\protect\stylefmt{#1}|main}} \newcommand*{\category}[1]{\textsf{#1}\index{entry categories:>#1={\protect\sffamily#1}|main}} \newcommand*{\catattr}[1]{\textsf{#1}\index{category attributes:>#1={\protect\sffamily#1}|main}} \GlossaryPrologue{% \chapter*{{Change History}}% \markboth{{Change History}}{{Change History}}% \phantomsection \addcontentsline{toc}{chapter}{Change History}% \raggedright } \title{glossaries-extra.sty v1.45: documented code} \author{Nicola L.C. Talbot\\[10pt] Dickimaw Books\\ \url{http://www.dickimaw-books.com/}} \date{2020-04-01} \begin{document} \DocInput{glossaries-extra.dtx} \end{document} % %\fi %\MakeShortVerb{"} %\DeleteShortVerb{\|} % % \maketitle % %\begin{abstract} %This is the documented code for the \sty{glossaries-extra} package. %See glossaries-extra-manual.pdf for the user manual. % %\begin{important} %This package is experimental and not stable. It's provided for %testing purposes only. Future versions may not be compatible with %this version. Once it has stabilised I'll add it to CTAN, at which %point compatibility with the first stable version will be %maintained. %\end{important} %\end{abstract} % %\tableofcontents % %\StopEventually{% % \printglossaries % \PrintChanges % \PrintIndex %} % % % %\chapter{Main Package Code (\styfmt{glossaries-extra.sty})} %\iffalse % \begin{macrocode} %<*glossaries-extra.sty> % \end{macrocode} %\fi %\changes{0.1}{2015-11-22}{Initial experimental release} %\section{Package Initialisation and Options} % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{glossaries-extra}[2020/04/01 v1.45 (NLCT)] % \end{macrocode} % Requires \sty{xkeyval} to define package options. % \begin{macrocode} \RequirePackage{xkeyval} % \end{macrocode} % Requires \sty{etoolbox} package. % \begin{macrocode} \RequirePackage{etoolbox} % \end{macrocode} % Has \styfmt{glossaries} already been loaded? % \begin{macrocode} \@ifpackageloaded{glossaries} {% % \end{macrocode} % Already loaded so pass any options to \cs{setupglossaries}. % This means that the options that can only be set when % \styfmt{glossaries} is loaded can't be used. % \begin{macrocode} \newcommand{\glsxtr@dooption}[1]{\setupglossaries{#1}}% \let\@glsxtr@declareoption\@gls@declareoption } {% % \end{macrocode} % Not already loaded, so pass options to \styfmt{glossaries}. % \begin{macrocode} \newcommand{\glsxtr@dooption}[1]{% \PassOptionsToPackage{#1}{glossaries}% }% % \end{macrocode} % Set the defaults. % \begin{macrocode} \PassOptionsToPackage{toc}{glossaries} \PassOptionsToPackage{nopostdot}{glossaries} \PassOptionsToPackage{noredefwarn}{glossaries} \@ifpackageloaded{polyglossia}% {}% {% \@ifpackageloaded{babel}% {\PassOptionsToPackage{translate=babel}{glossaries}}% {}% }% \newcommand*{\@glsxtr@declareoption}[2]{% \DeclareOptionX{#1}{#2}% \DeclareOption{#1}{#2}% } } % \end{macrocode} % Declare package options. %\begin{macro}{\glsxtrundefaction} % Determines what to do if an entry hasn't been defined. % The two arguments are the error or warning message and the help % message if an error should be produced. % \begin{macrocode} \newcommand*{\glsxtrundefaction}[2]{% \@glsxtrundeftag\PackageError{glossaries-extra}{#1}{#2}% } % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtr@warnonexistsordo} % If user wants \pkgopt[warn]{undefaction}, then \styfmt{glossaries} % v4.19 is required. % \begin{macrocode} \newcommand*{\glsxtr@warnonexistsordo}[1]{} % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrundeftag} % Text to display when an entry doesn't exist. % \begin{macrocode} \newcommand*{\glsxtrundeftag}{??} \newcommand*{\@glsxtrundeftag}{} % \end{macrocode} % This text is switched on at the start of the document to prevent % unwanted text inserted into the preamble if any tests are made % before the start of the document. %\end{macro} % %\begin{macro}{\@glsxtr@warn@undefaction} %This is how \cs{glsxtrundefaction} should behave if %\pkgopt[warn]{undefaction} is set. %\changes{1.08}{2016-12-13}{new} % \begin{macrocode} \newcommand*{\@glsxtr@warn@undefaction}[2]{% \@glsxtrundeftag\GlossariesExtraWarning{#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@err@undefaction} %This is how \cs{glsxtrundefaction} should behave if %\pkgopt[error]{undefaction} is set. %\changes{1.08}{2016-12-13}{new} % \begin{macrocode} \newcommand*{\@glsxtr@err@undefaction}[2]{% \@glsxtrundeftag\PackageError{glossaries-extra}{#1}{#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@warn@onexistsordo} %This is how \cs{glsxtr@warnonexistsordo} should behave if %\pkgopt[warn]{undefaction} is set. %\changes{1.08}{2016-12-13}{new} % \begin{macrocode} \newcommand*{\@glsxtr@warn@onexistsordo}[1]{% \GlossariesExtraWarning{\string#1\space hasn't been defined, so some errors won't be converted to warnings. (This most likely means your version of glossaries.sty is below version 4.19.)}% } % \end{macrocode} %\end{macro} %\begin{macro}{\@glsxtr@redef@forglsentries} %\changes{1.11}{2017-01-19}{new} % \begin{macrocode} \newcommand*{\@glsxtr@redef@forglsentries}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@do@redef@forglsentries} %\changes{1.11}{2017-01-19}{new} % \begin{macrocode} \newcommand*{\@glsxtr@do@redef@forglsentries}{% \renewcommand*{\forglsentries}[3][\glsdefaulttype]{% \edef\@@glo@list{\csname glolist@##1\endcsname}% \ifdefstring{\@@glo@list}{,}% {% \GlossariesExtraWarning{No entries defined in glossary `##1'}% }% {% \@for##2:=\@@glo@list\do {% \ifdefempty{##2}{}{##3}% }% }% }% }% % \end{macrocode} %\end{macro} % %\begin{option}{undefaction} % \begin{macrocode} \define@choicekey{glossaries-extra.sty}{undefaction}% [\glsxtr@undefaction@val\glsxtr@undefaction@nr]% {warn,error}% {% \ifcase\glsxtr@undefaction@nr\relax \let\glsxtrundefaction\@glsxtr@warn@undefaction \let\glsxtr@warnonexistsordo\@glsxtr@warn@onexistsordo \let\@glsxtr@redef@forglsentries\@glsxtr@do@redef@forglsentries \or \let\glsxtrundefaction\@glsxtr@err@undefaction \let\glsxtr@warnonexistsordo\@gobble \let\@glsxtr@redef@forglsentries\relax \fi } % \end{macrocode} %\end{option} % %To assist bib2gls, v1.08 introduces the \pkgopt{record} option, which will write %information to the aux file whenever an entry needs to be indexed. % %\begin{macro}{\@glsxtr@record} %\changes{1.08}{2016-12-13}{new} %\changes{1.14}{2017-04-18}{added third arg} %Does nothing by default. % \begin{macrocode} \newcommand*{\@glsxtr@record}[3]{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@recordsee} %\changes{1.14}{2017-04-18}{new} %Does nothing by default. % \begin{macrocode} \newcommand*{\glsxtr@recordsee}[2]{} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@defaultnumberformat} %\changes{1.19}{2017-09-09}{new} % \begin{macrocode} \newcommand*{\@glsxtr@defaultnumberformat}{glsnumberformat}% % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrSetDefaultNumberFormat} %\changes{1.19}{2017-09-09}{new} % \begin{macrocode} \newcommand*{\GlsXtrSetDefaultNumberFormat}[1]{% \renewcommand*{\@glsxtr@defaultnumberformat}{#1}% }% % \end{macrocode} %\end{macro} % %The \pkgopt{record} option is somewhat problematic. On the first %\LaTeX\ run the entries aren't defined. This isn't as %straight-forward as commands like \cs{cite} since attributes %associated with the entry's category may switch off the indexing %or the entry's glossary type might require a particular counter. %This kind of information can't be determined until the entry has %been defined. So there are two different commands here. One that's %used if the entry hasn't been defined, which tries to use sensible %defaults, and one which is used when the entry has been defined. % %\begin{macro}{\@glsxtr@do@record@wrglossary} %\changes{1.21}{2017-11-03}{new} %The \pkgopt[only]{record} option sets \cs{@@do@wrglossary} to this %command, which means it's done within \cs{glsadd} and %\cs{@gls@link}, and so is only done if the entry exists. % \begin{macrocode} \newcommand*{\@glsxtr@do@record@wrglossary}[1]{% \begingroup \ifKV@glslink@noindex \else \edef\@gls@label{\glsdetoklabel{#1}}% \let\glslabel\@gls@label \glswriteentry{#1}% {% \ifdefempty{\@glsxtr@thevalue}% {% \ifx\@glsxtr@org@theHvalue\@glsxtr@theHvalue \else \let\theHglsentrycounter\@glsxtr@theHvalue \fi \glsxtr@saveentrycounter \let\@@do@@wrglossary\@glsxtr@dorecord }% {% \let\theglsentrycounter\@glsxtr@thevalue \let\theHglsentrycounter\@glsxtr@theHvalue \let\@@do@@wrglossary\@glsxtr@dorecordnodefer }% \ifx\@glsxtr@record@setting\@glsxtr@record@setting@alsoindex \glsxtr@@do@wrglossary{#1}% \else \@@glsxtrwrglossmark % \end{macrocode} %Increment associated counter. % \begin{macrocode} \glsxtr@inc@wrglossaryctr{#1}% \@@do@@wrglossary \fi }% \fi \endgroup } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@do@alsoindex@wrglossary} %\changes{1.21}{2017-11-03}{new} %The \pkgopt[alsoindex]{record} option needs to both record and %index. % \begin{macrocode} \newcommand*{\glsxtr@do@alsoindex@wrglossary}[1]{% \glsxtr@@do@wrglossary{#1}% \@glsxtr@do@record@wrglossary{#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@@glsxtr@record} %\changes{1.08}{2016-12-13}{new} %The \pkgopt[only]{record} option sets \cs{@glsxtr@record} to this. %This performs the recording if the entry \emph{doesn't exist} and is done %at the start of \cs{@gls@field@link} and commands like \cs{@gls@} %(before the existence test). This means that it disregards the %\gloskey[glslink]{wrgloss} key. % %The first argument is the option list (as passed in the first optional %argument to commands like \cs{gls}). This allows the \gloskey[glslink]{noindex} %setting to be picked up. The second argument is the entry's label. % The third argument is the key family %(\texttt{glslink} in most cases, \texttt{glossadd} for \cs{glsadd}). % \begin{macrocode} \newcommand*{\@@glsxtr@record}[3]{% % \end{macrocode} %Save the label in case it's needed. This needs to be outside the %existence check to allow the post-link hook to reference it. %\changes{1.42}{2020-02-03}{moved label definition outside of conditional} % \begin{macrocode} \edef\@gls@label{\glsdetoklabel{#2}}% \let\glslabel\@gls@label \ifglsentryexists{#2}{}% {% \@@glsxtrwrglossmark \begingroup \let\@glsnumberformat\@glsxtr@defaultnumberformat \def\@glsxtr@thevalue{}% \def\@glsxtr@theHvalue{\@glsxtr@thevalue}% \let\@glsxtr@org@theHvalue\@glsxtr@theHvalue % \end{macrocode} %Entry hasn't been defined, so we'll have to assume it's %\cs{glscounter} by default. % \begin{macrocode} \let\@gls@counter\glscounter % \end{macrocode} %Unless the \pkgopt{equations} option is on and this is inside a %numbered maths environment. % \begin{macrocode} \if@glsxtr@equations \@glsxtr@use@equation@counter \fi % \end{macrocode} %Check for default options (which may switch off indexing). %\changes{1.21}{2017-11-03}{added check for default options} % \begin{macrocode} \@gls@setdefault@glslink@opts % \end{macrocode} %Implement any pre-key settings. %\changes{1.30}{2018-04-25}{added check for pre-key hook} % \begin{macrocode} \csuse{@glsxtr@#3@prekeys}% % \end{macrocode} %Assign keys. % \begin{macrocode} \setkeys{#3}{#1}% % \end{macrocode} %Implement any post-key settings. Is the auto-add on? %\changes{1.37}{2018-11-30}{added check for auto-add} % \begin{macrocode} \glsxtr@do@autoadd{#3}% % \end{macrocode} % Check post-key hook. %\changes{1.30}{2018-04-25}{added check for post-key hook} % \begin{macrocode} \csuse{@glsxtr@#3@postkeys}% % \end{macrocode} %Increment associated counter. % \begin{macrocode} \glsxtr@inc@wrglossaryctr{#2}% % \end{macrocode} %Check if \gloskey[glslink]{noindex} option has been used. % \begin{macrocode} \ifKV@glslink@noindex \else \glswriteentry{#2}% {% % \end{macrocode} %Check if \gloskey[glsadd]{thevalue} has been set. % \begin{macrocode} \ifdefempty{\@glsxtr@thevalue}% {% % \end{macrocode} %Key \gloskey[glsadd]{thevalue} hasn't been set, but check if %\gloskey[glsadd]{theHvalue} has been set. (Not particularly likely, %but allow for it.) % \begin{macrocode} \ifx\@glsxtr@org@theHvalue\@glsxtr@theHvalue \else \let\theHglsentrycounter\@glsxtr@theHvalue \fi % \end{macrocode} %Save the entry counter. % \begin{macrocode} \glsxtr@saveentrycounter % \end{macrocode} %Temporarily redefine \cs{@@do@@wrglossary} for use with %\cs{glsxtr@@do@wrglossary}. % \begin{macrocode} \let\@@do@@wrglossary\@glsxtr@dorecord }% {% % \end{macrocode} %\gloskey[glsadd]{thevalue} has been set, so there's no need to %defer writing the location value. (If it's dependent on the page %counter, the \gloskey[glslink]{counter} key should be set instead.) % \begin{macrocode} \let\theglsentrycounter\@glsxtr@thevalue \let\theHglsentrycounter\@glsxtr@theHvalue \let\@@do@@wrglossary\@glsxtr@dorecordnodefer }% \ifx\@glsxtr@record@setting\@glsxtr@record@setting@alsoindex \glsxtr@@do@wrglossary{#2}% \else % \end{macrocode} %No need to escape special characters. % \begin{macrocode} \@@do@@wrglossary \fi }% \fi \endgroup }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@glslink@prekeys} %\changes{1.30}{2018-04-25}{new} % \begin{macrocode} \newcommand{\@glsxtr@glslink@prekeys}{\glslinkpresetkeys} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@glslink@postkeys} %\changes{1.30}{2018-04-25}{new} % \begin{macrocode} \newcommand{\@glsxtr@glslink@postkeys}{\glslinkpostsetkeys} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@glossadd@prekeys} %\changes{1.30}{2018-04-25}{new} % \begin{macrocode} \newcommand{\@glsxtr@glossadd@prekeys}{\glsaddpresetkeys} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@glossadd@postkeys} %\changes{1.30}{2018-04-25}{new} % \begin{macrocode} \newcommand{\@glsxtr@glossadd@postkeys}{\glsaddpostsetkeys} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@dorecord} %\changes{1.08}{2016-12-13}{new} %\changes{1.15}{2017-05-10}{corrected premature expansion of \cs{@glslocref}} %If \pkgopt[alsoindex]{record} is used, then \cs{@glslocref} may %have been escaped, but this isn't appropriate here. %\changes{1.19}{2017-09-09}{Use \cs{@glsrecordlocref} instead of \cs{@glslocref}} % \begin{macrocode} \newcommand*\@glsxtr@dorecord{% \global\let\@glsrecordlocref\theglsentrycounter \let\@glsxtr@orgprefix\@glo@counterprefix \ifx\theglsentrycounter\theHglsentrycounter \def\@glo@counterprefix{}% \else % \end{macrocode} %\changes{1.39}{2019-03-22}{added protection for fragile commands} % Protect against non-expandable commands occurring in the location. % \begin{macrocode} \protected@edef\@glsxtr@theentrycounter{\theglsentrycounter}% \protected@edef\@glsxtr@theHentrycounter{\theHglsentrycounter}% \@onelevel@sanitize\@glsxtr@theentrycounter \@onelevel@sanitize\@glsxtr@theHentrycounter \protected@edef\@do@gls@getcounterprefix{\noexpand\@gls@getcounterprefix {\@glsxtr@theentrycounter}{\@glsxtr@theHentrycounter}% }% \@do@gls@getcounterprefix \fi % \end{macrocode} %\changes{1.30}{2018-04-25}{don't suppress expansion of \cs{@glsrecordlocref}} %\changes{1.29}{2018-04-09}{don't suppress expansion of %\cs{@glsrecordlocref} if counter isn't page} %Don't protect the \cs{@glsrecordlocref} from premature expansion. %If the counter isn't \counter{page} then it needs expanding. If the %location includes \cs{thepage} then \cs{protected@write} will %automatically deal with it. %\changes{1.37}{2018-11-30}{added check for record=nameref} % \begin{macrocode} \ifx\@glsxtr@record@setting\@glsxtr@record@setting@nameref \@glsxtr@do@nameref@record {\@gls@label}{\@glo@counterprefix}{\@gls@counter}{\@glsnumberformat}% {\@glsrecordlocref}% \else \protected@write\@auxout{}{\string\glsxtr@record {\@gls@label}{\@glo@counterprefix}{\@gls@counter}{\@glsnumberformat}% {\@glsrecordlocref}}% \fi \@glsxtr@counterrecordhook \let\@glo@counterprefix\@glsxtr@orgprefix } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@dorecordnodefer} %\changes{1.16}{2017-06-15}{new} %As above, but don't defer expansion of location. This uses %\cs{theglsentrycounter} directly for the location %rather than \cs{@glslocref} since there's no need to guard against %premature expansion of the page counter. %\changes{1.19}{2017-09-09}{Use \cs{theglsentrycounter} for the location %rather than \cs{@glslocref}} % \begin{macrocode} \newcommand*\@glsxtr@dorecordnodefer{% \ifx\theglsentrycounter\theHglsentrycounter \ifx\@glsxtr@record@setting\@glsxtr@record@setting@nameref \@glsxtr@do@nameref@record {\@gls@label}{}{\@gls@counter}{\@glsnumberformat}% {\theglsentrycounter}% \else \protected@write\@auxout{}{\string\glsxtr@record {\@gls@label}{}{\@gls@counter}{\@glsnumberformat}% {\theglsentrycounter}}% \fi \else \edef\@do@gls@getcounterprefix{\noexpand\@gls@getcounterprefix {\theglsentrycounter}{\theHglsentrycounter}% }% \@do@gls@getcounterprefix \ifx\@glsxtr@record@setting\@glsxtr@record@setting@nameref \@glsxtr@do@nameref@record {\@gls@label}{\@glo@counterprefix}{\@gls@counter}% {\@glsnumberformat}{\theglsentrycounter}% \else \protected@write\@auxout{}{\string\glsxtr@record {\@gls@label}{\@glo@counterprefix}{\@gls@counter}{\@glsnumberformat}% {\theglsentrycounter}}% \fi \fi \@glsxtr@counterrecordhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@ifnum@mmode} %\changes{1.37}{2018-11-30}{new} %Check if in a numbered maths environment. %The \sty{amsmath} package is automatically loaded by %\sty{datatool-base}, which is required by \sty{glossaries}, so \cs{ifst@rred} %and \cs{if@display} should both be defined. % \begin{macrocode} \newcommand{\@glsxtr@ifnum@mmode}[2]{% \ifmmode \ifst@rred #2% \else % \end{macrocode} % Non-\sty{amsmath} environments and regular inline math mode isn't % flagged as starred by \sty{amsmath}, but we can't use \cs{mathchoice} % in this case as it's not the current style that's relevant. % Instead we can use \sty{amsmath}'s \cs{if@display}. This may not % work for environments that aren't provided by \sty{amsmath}. % \begin{macrocode} \if@display #1\else #2\fi \fi \else #2% \fi } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@do@nameref@record} %\changes{1.37}{2018-11-30}{new} %With \pkgopt[nameref]{record}, the current label information is included %in the record, but this may not have been defined, so \cs{csuse} will %prevent an undefined control sequence error and just leave the last %two arguments blank if there's no information. In the event that a record is in %\sty{amsmath}'s \env{align} environment \cs{@currentHref} will be out. %There may be other instances where \cs{@currentHref} is out, so %this also saves \cs{theHglsentrycounter}, which is %useful if it can't be obtained by prefixing %\cs{theglsentrycounter}. % \begin{macrocode} \newcommand*{\@glsxtr@do@nameref@record}[5]{% \gls@ifnotmeasuring {% \protected@write\@auxout{}{\string\glsxtr@record@nameref {#1}{#2}{#3}{#4}{#5}% {\csuse{@currentlabelname}}{\csuse{@currentHref}}% {\theHglsentrycounter}}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@@glsxtr@recordcounter} %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newcommand*{\@@glsxtr@recordcounter}{% \@glsxtr@noop@recordcounter } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@noop@recordcounter} %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newcommand*{\@glsxtr@noop@recordcounter}[1]{% \PackageError{glossaries-extra}{\string\GlsXtrRecordCounter\space requires record=only or record=alsoindex package option}{}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@op@recordcounter} %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newcommand*{\@glsxtr@op@recordcounter}[1]{% \eappto\@glsxtr@counterrecordhook{\noexpand\@glsxtr@docounterrecord{#1}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@recordsee} %\changes{1.14}{2017-04-18}{new} %Deal with \cs{glssee} in record mode. (This doesn't increment the %associated counter.) % \begin{macrocode} \newcommand*{\@glsxtr@recordsee}[2]{% \@@glsxtrwrglossmark \def\@gls@xref{#2}% \@onelevel@sanitize\@gls@xref \protected@write\@auxout{}{\string\glsxtr@recordsee{#1}{\@gls@xref}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\printunsrtglossaryunit} %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newcommand{\printunsrtglossaryunit}{% \print@noop@unsrtglossaryunit } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@setup@record} %\changes{1.08}{2016-12-13}{new} %Initialise. % \begin{macrocode} \newcommand*{\glsxtr@setup@record}{\let\@@do@wrglossary\glsxtr@@do@wrglossary} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@indexonly@saveentrycounter} %\changes{1.08}{2016-12-13}{new} % Only store the entry counter information if the %indexing is on. % \begin{macrocode} \newcommand*{\glsxtr@indexonly@saveentrycounter}{% \ifKV@glslink@noindex \else \glsxtr@saveentrycounter \fi } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@addloclistfield} %\changes{1.08}{2016-12-13}{new} % \begin{macrocode} \newcommand*{\glsxtr@addloclistfield}{% \key@ifundefined{glossentry}{loclist}% {% \define@key{glossentry}{loclist}{\def\@glo@loclist{##1}}% \appto\@gls@keymap{,{loclist}{loclist}}% \appto\@newglossaryentryprehook{\def\@glo@loclist{}}% \appto\@newglossaryentryposthook{% \gls@assign@field{}{\@glo@label}{loclist}{\@glo@loclist}% }% \glssetnoexpandfield{loclist}% }% {}% % \end{macrocode} %\changes{1.11}{2017-01-19}{added location key} %The loclist field is just a comma-separated list. The location %field is the formatted list. % \begin{macrocode} \key@ifundefined{glossentry}{location}% {% \define@key{glossentry}{location}{\def\@glo@location{##1}}% \appto\@gls@keymap{,{location}{location}}% \appto\@newglossaryentryprehook{\def\@glo@location{}}% \appto\@newglossaryentryposthook{% \gls@assign@field{}{\@glo@label}{location}{\@glo@location}% }% \glssetnoexpandfield{location}% }% {}% % \end{macrocode} %\changes{1.11}{2017-01-19}{added group key} %Add a key to store the group heading. % \begin{macrocode} \key@ifundefined{glossentry}{group}% {% \define@key{glossentry}{group}{\def\@glo@group{##1}}% \appto\@gls@keymap{,{group}{group}}% \appto\@newglossaryentryprehook{\def\@glo@group{}}% \appto\@newglossaryentryposthook{% \gls@assign@field{}{\@glo@label}{group}{\@glo@group}% }% \glssetnoexpandfield{group}% }% {}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@record@setting} %\changes{1.19}{2017-09-09}{new} %Keep track of the \pkgopt{record} package option. % \begin{macrocode} \newcommand*{\@glsxtr@record@setting}{off} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@record@setting@alsoindex} %\changes{1.19}{2017-09-09}{new} % \begin{macrocode} \newcommand*{\@glsxtr@record@setting@alsoindex}{alsoindex} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@record@setting@only} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\@glsxtr@record@setting@only}{only} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@record@setting@nameref} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand*{\@glsxtr@record@setting@nameref}{nameref} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@if@record@only} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand*{\@glsxtr@if@record@only}[2]{% \ifx\@glsxtr@record@setting\@glsxtr@record@setting@only #1% \else \ifx\@glsxtr@record@setting\@glsxtr@record@setting@nameref #1% \else #2% \fi \fi } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@record@setting@off} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\@glsxtr@record@setting@off}{off} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@record@only@setup} %\changes{1.37}{2018-11-30}{new} %Initialisation code for record=only and record=nameref % \begin{macrocode} \newcommand*{\@glsxtr@record@only@setup}{% \def\glsxtr@setup@record{% \@glsxtr@autoseeindexfalse \let\@do@seeglossary\@glsxtr@recordsee \let\@glsxtr@record\@@glsxtr@record \let\@@do@wrglossary\@glsxtr@do@record@wrglossary \let\@gls@saveentrycounter\relax \let\glsxtrundefaction\@glsxtr@warn@undefaction \let\glsxtr@warnonexistsordo\@glsxtr@warn@onexistsordo \glsxtr@addloclistfield \renewcommand*{\@glsxtr@autoindexcrossrefs}{}% \let\@@glsxtr@recordcounter\@glsxtr@op@recordcounter \def\printunsrtglossaryunit{\print@op@unsrtglossaryunit}% % \end{macrocode} %Switch off the index suppression for aliased entries. %(bib2gls will deal with them.) % \begin{macrocode} \def\glsxtrsetaliasnoindex{}% % \end{macrocode} % \cs{@gls@setupsort@none} was only introduced to % \sty{glossaries} v4.30, so it may not be available. If it's % defined, use it to remove the unnecessary overhead of escaping and % sanitizing the sort value. %\changes{1.16}{2017-06-15}{added check for \cs{@gls@setupsort@none}} % \begin{macrocode} \ifdef\@gls@setupsort@none{\@gls@setupsort@none}{}% % \end{macrocode} % Warn about using \cs{printglossary}: % \begin{macrocode} \def\glsxtrNoGlossaryWarning{\@glsxtr@record@noglossarywarning}% % \end{macrocode} %Load \sty{glossaries-extra-bib2gls}: % \begin{macrocode} \RequirePackage{glossaries-extra-bib2gls}% }% } % \end{macrocode} %\end{macro} % %\begin{option}{record} %Now define the \pkgopt{record} package option. %\changes{1.08}{2016-12-13}{added \pkgopt{record} package option} % \begin{macrocode} \define@choicekey{glossaries-extra.sty}{record} [\@glsxtr@record@setting\glsxtr@record@nr]% {off,only,alsoindex,nameref}% [only]% {% \ifcase\glsxtr@record@nr\relax % \end{macrocode} %Don't record. % \begin{macrocode} \def\glsxtr@setup@record{% \renewcommand*{\@do@seeglossary}{\@glsxtr@doseeglossary}% \renewcommand*{\@glsxtr@record}[3]{}% \let\@@do@wrglossary\glsxtr@@do@wrglossary \let\@gls@saveentrycounter\glsxtr@indexonly@saveentrycounter \let\glsxtrundefaction\@glsxtr@err@undefaction \let\glsxtr@warnonexistsordo\@gobble \let\@@glsxtr@recordcounter\@glsxtr@noop@recordcounter \def\printunsrtglossaryunit{\print@noop@unsrtglossaryunit}% \undef\glsxtrsetaliasnoindex }% \or % \end{macrocode} %Only record (don't index). % \begin{macrocode} \@glsxtr@record@only@setup \or % \end{macrocode} %Record and index. This option doesn't load %\sty{glossaries-extra-bib2gls} as the sorting is performed by %\app{xindy} or \app{makeindex}. % \begin{macrocode} \def\glsxtr@setup@record{% \renewcommand*{\@do@seeglossary}{\@glsxtr@dosee@alsoindex@glossary}% \let\@glsxtr@record\@@glsxtr@record \let\@@do@wrglossary\glsxtr@do@alsoindex@wrglossary \let\@gls@saveentrycounter\glsxtr@indexonly@saveentrycounter \let\glsxtrundefaction\@glsxtr@warn@undefaction \let\glsxtr@warnonexistsordo\@glsxtr@warn@onexistsordo \glsxtr@addloclistfield \let\@@glsxtr@recordcounter\@glsxtr@op@recordcounter \def\printunsrtglossaryunit{\print@op@unsrtglossaryunit}% \undef\glsxtrsetaliasnoindex }% \or % \end{macrocode} %Only record (don't index) but also include nameref information. % \begin{macrocode} \@glsxtr@record@only@setup \ifundef\hyperlink {\GlossariesExtraWarning{You have requested record=nameref but the document doesn't support hyperlinks}}% {}% \fi } % \end{macrocode} %\end{option} % %\changes{1.06}{2016-06-18}{docdef option changed to choice} %Version 1.06 changes the \pkgopt{docdef} option to a choice rather %than boolean setting. The available values are: false, true or %restricted. The restricted option permits document definitions as %long as they occur before the first glossary is displayed. % %\begin{macro}{\@glsxtr@docdefval} %\changes{1.06}{2016-06-18}{new} %The \pkgopt{docdef} value is stored as an integer: 0 (false), 1 %(true) and 2 (restricted). %\changes{1.28}{2018-03-06}{changed from count register to macro} % \begin{macrocode} \newcommand*{\@glsxtr@docdefval}{0} % \end{macrocode} %\end{macro} % %Need to provide conditional commands that are backward compatible: %\begin{macro}{\if@glsxtrdocdef} % \begin{macrocode} \newcommand*{\if@glsxtrdocdef}{\ifnum\@glsxtr@docdefval>0 } % \end{macrocode} %\end{macro} %\begin{macro}{\@glsxtrdocdeftrue} % \begin{macrocode} \newcommand*{\@glsxtrdocdeftrue}{\def\@glsxtr@docdefval{1}} % \end{macrocode} %\end{macro} %\begin{macro}{\@glsxtrdocdeffalse} % \begin{macrocode} \newcommand*{\@glsxtrdocdeffalse}{\def\@glsxtr@docdefval{0}} % \end{macrocode} %\end{macro} % %\begin{option}{docdef} % By default don't allow entries to be defined in the document to % encourage the user to define them in the preamble, but if the user % is really determined to define them in the document allow them to % request this. %\changes{1.34}{2018-07-29}{added package option docdef=atom} % \begin{macrocode} \define@choicekey{glossaries-extra.sty}{docdef} [\@glsxtr@docdefsetting\@glsxtr@docdefval]% {false,true,restricted,atom}[true]% {% \ifnum\@glsxtr@docdefval>1\relax \renewcommand*{\@glsdoifexistsorwarn}{\glsdoifexists}% \else \renewcommand*{\@glsdoifexistsorwarn}{\glsdoifexistsorwarn}% \fi } % \end{macrocode} %\end{option} %\begin{macro}{\if@glsxtrdocdefrestricted} %\changes{1.06}{2016-06-18}{new} %\changes{1.34}{2018-07-29}{changed to allow for atom as well} % \begin{macrocode} \newcommand*{\if@glsxtrdocdefrestricted}{\ifnum\@glsxtr@docdefval>1 } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsdoifexistsorwarn} %\changes{1.06}{2016-06-18}{new} %Need an error to notify user if an undefined entry is being referenced in the %glossary for the \pkgopt[restricted]{docdef} option. This is used %by \cs{glossentryname} (but not by \cs{glossentrydesc} etc as one error %per entry is sufficient). % \begin{macrocode} \newcommand*{\@glsdoifexistsorwarn}{\glsdoifexistsorwarn} % \end{macrocode} %\end{macro} % %\begin{option}{indexcrossrefs} % Automatically index cross references at the end of the document % \begin{macrocode} \define@boolkey{glossaries-extra.sty}[@glsxtr]{indexcrossrefs}[true]{% \if@glsxtrindexcrossrefs \else \renewcommand*{\@glsxtr@autoindexcrossrefs}{}% \fi } % \end{macrocode} %\end{option} % Switch off since this can increase the build time. % \begin{macrocode} \@glsxtrindexcrossrefsfalse % \end{macrocode} % But allow \gloskey{see} key to switch it on automatically. %\begin{macro}{\@glsxtr@autoindexcrossrefs} %\changes{1.0}{2016-01-24}{new} % \begin{macrocode} \newcommand*{\@glsxtr@autoindexcrossrefs}{\@glsxtrindexcrossrefstrue} % \end{macrocode} %\end{macro} % %\begin{option}{autoseeindex} %Provide a boolean option to allow the user to prevent the %automatic indexing of the cross-referencing keys \gloskey{see}, %\gloskey{seealso} and \gloskey{alias}. %\changes{1.16}{2017-06-15}{new} % \begin{macrocode} \define@boolkey{glossaries-extra.sty}[@glsxtr@]{autoseeindex}[true]{% } \@glsxtr@autoseeindextrue % \end{macrocode} %\end{option} % %\begin{option}{equations} %Provide a boolean option to automatically switch to the %\ctr{equation} counter when in a numbered maths environment. %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \define@boolkey{glossaries-extra.sty}[@glsxtr@]{equations}[true]{% } \@glsxtr@equationsfalse % \end{macrocode} %\end{option} % %\begin{macro}{\glsxtr@float} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \let\glsxtr@float\@float % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@dblfloat} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \let\glsxtr@dblfloat\@dblfloat % \end{macrocode} %\end{macro} % %\begin{option}{floats} %Provide a boolean option to automatically switch to the %the corresponding counter when in a float. %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \define@boolkey{glossaries-extra.sty}[@glsxtr@]{floats}[true]{% \if@glsxtr@floats \renewcommand*{\@float}[1]{\renewcommand{\glscounter}{##1}\glsxtr@float{##1}}% \renewcommand*{\@dblfloat}[1]{\renewcommand{\glscounter}{##1}\glsxtr@dblfloat{##1}}% \else \let\@float\glsxtr@float \let\@dblfloat\glsxtr@dblfloat \fi } \@glsxtr@floatsfalse % \end{macrocode} %\end{option} % %\begin{macro}{\GlossariesExtraWarning} %Allow users to suppress warnings. % \begin{macrocode} \newcommand*{\GlossariesExtraWarning}[1]{\PackageWarning{glossaries-extra}{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\GlossariesExtraWarningNoLine} %Allow users to suppress warnings. %\changes{0.5}{2015-12-07}{new} % \begin{macrocode} \newcommand*{\GlossariesExtraWarningNoLine}[1]{% \PackageWarningNoLine{glossaries-extra}{#1}} % \end{macrocode} %\end{macro} % % \begin{macrocode} \@glsxtr@declareoption{nowarn}{% \let\GlossariesExtraWarning\@gobble \let\GlossariesExtraWarningNoLine\@gobble \glsxtr@dooption{nowarn}% } % \end{macrocode} % %\begin{macro}{\@glsxtr@defpostpunc} %Redefines \cs{glspostdescription}. The \pkgopt{postdot} and %\pkgopt{nopostdot} options will have to redefine this. %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\@glsxtr@defpostpunc}{} % \end{macrocode} %\end{macro} % %\begin{option}{postdot} %Shortcut for \pkgopt[false]{nopostdot} %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \@glsxtr@declareoption{postdot}{% \glsxtr@dooption{nopostdot=false}% \renewcommand*{\@glsxtr@defpostpunc}{% \renewcommand*{\glspostdescription}{% \ifglsnopostdot\else.\spacefactor\sfcode`\. \fi}% }% } % \end{macrocode} %\end{option} %\begin{option}{nopostdot} %Needs to redefine \cs{@glsxtr@defpostpunc} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \define@choicekey{glossaries-extra.sty}{nopostdot}{true,false}[true]{% \glsxtr@dooption{nopostdot=#1}% \renewcommand*{\@glsxtr@defpostpunc}{% \renewcommand*{\glspostdescription}{% \ifglsnopostdot\else.\spacefactor\sfcode`\. \fi}% }% } % \end{macrocode} %\end{option} % %\begin{option}{postpunc} %Set the post-description punctuation. This also sets %the \cs{ifglsnopostdot} conditional, which now indicates if %the post-description punctuation has been suppressed. %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \define@key{glossaries-extra.sty}{postpunc}{% \glsxtr@dooption{nopostdot=false}% \ifstrequal{#1}{dot}% {% \renewcommand*{\@glsxtr@defpostpunc}{% \renewcommand*{\glspostdescription}{.\spacefactor\sfcode`\. }% }% }% {% \ifstrequal{#1}{comma}% {% \renewcommand*{\@glsxtr@defpostpunc}{% \renewcommand*{\glspostdescription}{,}% }% }% {% \ifstrequal{#1}{none}% {% \glsxtr@dooption{nopostdot=true}% \renewcommand*{\@glsxtr@defpostpunc}{% \renewcommand*{\glspostdescription}{}% }% }% {% \renewcommand*{\@glsxtr@defpostpunc}{% \renewcommand*{\glspostdescription}{#1}% }% }% }% }% } % \end{macrocode} %\end{option} % %\begin{macro}{\glsxtrabbrvtype} % Glossary type for abbreviations. % \begin{macrocode} \newcommand*{\glsxtrabbrvtype}{\glsdefaulttype} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@abbreviationsdef} % Set by \pkgopt{abbreviations} option. % \begin{macrocode} \newcommand*{\@glsxtr@abbreviationsdef}{} % \end{macrocode} %\end{macro} %\begin{macro}{\@glsxtr@doabbreviationsdef} %\changes{0.5.3}{2015-12-09}{new} % \begin{macrocode} \newcommand*{\@glsxtr@doabbreviationsdef}{% \@ifpackageloaded{babel}% {\providecommand{\abbreviationsname}{\acronymname}}% {\providecommand{\abbreviationsname}{Abbreviations}}% \newglossary[glg-abr]{abbreviations}{gls-abr}{glo-abr}{\abbreviationsname}% \renewcommand*{\glsxtrabbrvtype}{abbreviations}% \newcommand*{\printabbreviations}[1][]{% \printglossary[type=\glsxtrabbrvtype,##1]% }% \disable@keys{glossaries-extra.sty}{abbreviations}% % \end{macrocode} % If the \pkgopt{acronym} option hasn't been used, change % \ics{acronymtype} to \ics{glsxtrabbrvtype}. %\changes{0.4}{2015-12-03}{added redefinition of \cs{acronymtype}} % \begin{macrocode} \ifglsacronym \else \renewcommand*{\acronymtype}{\glsxtrabbrvtype}% \fi }% % \end{macrocode} %\end{macro} % %\begin{option}{abbreviations} % If \pkgopt{abbreviations}, create a new glossary type for abbreviations. % \begin{macrocode} \@glsxtr@declareoption{abbreviations}{% \let\@glsxtr@abbreviationsdef\@glsxtr@doabbreviationsdef } % \end{macrocode} %\end{option} % %\begin{macro}{\GlsXtrDefineAbbreviationShortcuts} % Enable shortcut commands for the abbreviations. Unlike the analogous % command provided by \styfmt{glossaries}, this uses \cs{newcommand} % instead of \cs{let} as a safety feature (except for \cs{newabbr} % which is also provided with \cs{GlsXtrDefineAcShortcuts}). % \begin{macrocode} \newcommand*{\GlsXtrDefineAbbreviationShortcuts}{% \newcommand*{\ab}{\cgls}% \newcommand*{\abp}{\cglspl}% \newcommand*{\as}{\glsxtrshort}% \newcommand*{\asp}{\glsxtrshortpl}% \newcommand*{\al}{\glsxtrlong}% \newcommand*{\alp}{\glsxtrlongpl}% \newcommand*{\af}{\glsxtrfull}% \newcommand*{\afp}{\glsxtrfullpl}% \newcommand*{\Ab}{\cGls}% \newcommand*{\Abp}{\cGlspl}% \newcommand*{\As}{\Glsxtrshort}% \newcommand*{\Asp}{\Glsxtrshortpl}% \newcommand*{\Al}{\Glsxtrlong}% \newcommand*{\Alp}{\Glsxtrlongpl}% \newcommand*{\Af}{\Glsxtrfull}% \newcommand*{\Afp}{\Glsxtrfullpl}% \newcommand*{\AB}{\cGLS}% \newcommand*{\ABP}{\cGLSpl}% \newcommand*{\AS}{\GLSxtrshort}% \newcommand*{\ASP}{\GLSxtrshortpl}% \newcommand*{\AL}{\GLSxtrlong}% \newcommand*{\ALP}{\GLSxtrlongpl}% \newcommand*{\AF}{\GLSxtrfull}% \newcommand*{\AFP}{\GLSxtrfullpl}% % \end{macrocode} %\changes{1.23}{2017-11-12}{changed \cs{newabbr} definition to use \cs{providecommand}} % \begin{macrocode} \providecommand*{\newabbr}{\newabbreviation}% % \end{macrocode} % Disable this command after it's been used. % \begin{macrocode} \let\GlsXtrDefineAbbreviationShortcuts\relax } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrDefineAcShortcuts} % Enable shortcut commands for the abbreviations, but uses the % analogous commands provided by \styfmt{glossaries}. %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \newcommand*{\GlsXtrDefineAcShortcuts}{% \newcommand*{\ac}{\cgls}% \newcommand*{\acp}{\cglspl}% \newcommand*{\acs}{\glsxtrshort}% \newcommand*{\acsp}{\glsxtrshortpl}% \newcommand*{\acl}{\glsxtrlong}% \newcommand*{\aclp}{\glsxtrlongpl}% \newcommand*{\acf}{\glsxtrfull}% \newcommand*{\acfp}{\glsxtrfullpl}% \newcommand*{\Ac}{\cGls}% \newcommand*{\Acp}{\cGlspl}% \newcommand*{\Acs}{\Glsxtrshort}% \newcommand*{\Acsp}{\Glsxtrshortpl}% \newcommand*{\Acl}{\Glsxtrlong}% \newcommand*{\Aclp}{\Glsxtrlongpl}% \newcommand*{\Acf}{\Glsxtrfull}% \newcommand*{\Acfp}{\Glsxtrfullpl}% \newcommand*{\AC}{\cGLS}% \newcommand*{\ACP}{\cGLSpl}% \newcommand*{\ACS}{\GLSxtrshort}% \newcommand*{\ACSP}{\GLSxtrshortpl}% \newcommand*{\ACL}{\GLSxtrlong}% \newcommand*{\ACLP}{\GLSxtrlongpl}% \newcommand*{\ACF}{\GLSxtrfull}% \newcommand*{\ACFP}{\GLSxtrfullpl}% % \end{macrocode} %\changes{1.23}{2017-11-12}{changed \cs{newabbr} definition to use \cs{providecommand}} % \begin{macrocode} \providecommand*{\newabbr}{\newabbreviation}% % \end{macrocode} % Disable this command after it's been used. % \begin{macrocode} \let\GlsXtrDefineAcShortcuts\relax } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrDefineOtherShortcuts} % Similarly provide shortcut versions for the commands provided by % the \pkgopt{symbols} and \pkgopt{numbers} options. % \begin{macrocode} \newcommand*{\GlsXtrDefineOtherShortcuts}{% \newcommand*{\newentry}{\newglossaryentry}% \ifdef\printsymbols {% \newcommand*{\newsym}{\glsxtrnewsymbol}% }{}% \ifdef\printnumbers {% \newcommand*{\newnum}{\glsxtrnewnumber}% }{}% \let\GlsXtrDefineOtherShortcuts\relax } % \end{macrocode} %\end{macro} % % Always use the long forms, not the shortcuts, where portability is % an issue. (For example, when defining entries in a file that may % be input by multiple documents.) % %\begin{macro}{\@glsxtr@setupshortcuts} % Command used to set the shortcuts option. % \begin{macrocode} \newcommand*{\@glsxtr@setupshortcuts}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@shortcutsval} % Store the value of the shortcuts option. (Needed by bib2gls.) %\changes{1.11}{2017-01-19}{new} % \begin{macrocode} \newcommand*{\@glsxtr@shortcutsval}{\ifglsacrshortcuts acro\else none\fi}% % \end{macrocode} %\end{macro} % %\begin{option}{shortcuts} %Provide \pkgopt{shortcuts} option. Unlike the \styfmt{glossaries} %version, this is a choice rather than a boolean key but it also provides %\pkgopt[true]{shortcuts} and \pkgopt[false]{shortcuts}, which are %equivalent to \pkgopt[all]{shortcuts} and %\pkgopt[none]{shortcuts}. Multiple use of this option in the %\emph{same} option list will override each other. %New to v1.17: \pkgopt[ac]{shortcuts} which implements %\cs{GlsXtrDefineAcShortcuts} (not included in %\pkgopt[all]{shortcuts} as it conflicts with other shortcuts). % \begin{macrocode} \define@choicekey{glossaries-extra.sty}{shortcuts}% [\@glsxtr@shortcutsval\@glsxtr@shortcutsnr]% {acronyms,acro,abbreviations,abbr,other,all,true,ac,none,false}[true]{% \ifcase\@glsxtr@shortcutsnr\relax % acronyms \renewcommand*{\@glsxtr@setupshortcuts}{% \glsacrshortcutstrue \DefineAcronymSynonyms }% \or % acro \renewcommand*{\@glsxtr@setupshortcuts}{% \glsacrshortcutstrue \DefineAcronymSynonyms }% \or % abbreviations \renewcommand*{\@glsxtr@setupshortcuts}{% \GlsXtrDefineAbbreviationShortcuts }% \or % abbr \renewcommand*{\@glsxtr@setupshortcuts}{% \GlsXtrDefineAbbreviationShortcuts }% \or % other \renewcommand*{\@glsxtr@setupshortcuts}{% \GlsXtrDefineOtherShortcuts }% \or % all \renewcommand*{\@glsxtr@setupshortcuts}{% \glsacrshortcutstrue % \end{macrocode} %\changes{1.21}{2017-11-03}{changed true setting to use shortcuts=ac %instead of shortcuts=acronym} % \begin{macrocode} \GlsXtrDefineAcShortcuts \GlsXtrDefineAbbreviationShortcuts \GlsXtrDefineOtherShortcuts }% \or % true \renewcommand*{\@glsxtr@setupshortcuts}{% \glsacrshortcutstrue % \end{macrocode} %\changes{1.21}{2017-11-03}{changed true setting to use shortcuts=ac %instead of shortcuts=acronym} % \begin{macrocode} \GlsXtrDefineAcShortcuts \GlsXtrDefineAbbreviationShortcuts \GlsXtrDefineOtherShortcuts }% % \end{macrocode} %\changes{1.21}{2017-11-03}{corrected shortcuts=ac} % \begin{macrocode} \or % ac \renewcommand*{\@glsxtr@setupshortcuts}{% \glsacrshortcutstrue \GlsXtrDefineAcShortcuts }% % \end{macrocode} %Leave none and false as last option. % \begin{macrocode} \else % none, false \renewcommand*{\@glsxtr@setupshortcuts}{}% \fi } % \end{macrocode} %\end{option} % %\begin{macro}{\@glsxtr@doaccsupp} %\changes{0.5.1}{2015-12-07}{new} % \begin{macrocode} \newcommand*{\@glsxtr@doaccsupp}{} % \end{macrocode} %\end{macro} % %\sty{glossaries-accsupp} can't be loaded after %\styfmt{glossaries-extra}. \sty{glossaries-accsupp} v4.29+ checks %\cs{@glsxtr@doaccsupp} to determine if it's been loaded too late. % %\begin{option}{accsupp} % If \pkgopt{accsupp}, load \sty{glossaries-accsupp} package. % \begin{macrocode} \@glsxtr@declareoption{accsupp}{% \renewcommand*{\@glsxtr@doaccsupp}{\RequirePackage{glossaries-accsupp}}} % \end{macrocode} %\end{option} % %\begin{macro}{\@glsxtr@doloadprefix} %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \newcommand*{\@glsxtr@doloadprefix}{} % \end{macrocode} %\end{macro} % %\begin{option}{prefix} %\changes{1.42}{2020-02-03}{new} % If \pkgopt{prefix}, load \sty{glossaries-prefix} package. % \begin{macrocode} \@glsxtr@declareoption{prefix}{% \renewcommand*{\@glsxtr@doloadprefix}{\RequirePackage{glossaries-prefix}}} % \end{macrocode} %\end{option} % %\begin{macro}{\glsxtrNoGlossaryWarning} %\changes{0.3}{2015-12-02}{new} %\changes{1.34}{2018-07-29}{added package warning} % Warning text displayed in document if the external glossary file % given by the argument is missing. % \begin{macrocode} \newcommand{\glsxtrNoGlossaryWarning}[1]{% \GlossariesExtraWarning{Glossary `#1' is missing}% \@glsxtr@defaultnoglossarywarning{#1}% } % \end{macrocode} %\end{macro} % %\begin{option}{nomissingglstext} % If true, suppress the text and warning produced if the external glossary file % is missing. % \begin{macrocode} \define@choicekey{glossaries-extra.sty}{nomissingglstext} [\@glsxtr@nomissingglstextval\@glsxtr@nomissingglstextnr]% {true,false}[true]{% \ifcase\@glsxtr@nomissingglstextnr\relax % true \renewcommand{\glsxtrNoGlossaryWarning}[1]{\null}% \else % false \renewcommand{\glsxtrNoGlossaryWarning}[1]{% \@glsxtr@defaultnoglossarywarning{#1}% }% \fi } % \end{macrocode} %\end{option} % % Provide option to load \sty{glossaries-extra-stylemods} % (Deferred to the end.) %\begin{macro}{\@glsxtr@redefstyles} % \begin{macrocode} \newcommand*{\@glsxtr@redefstyles}{} % \end{macrocode} %\end{macro} % %\begin{option}{stylemods} %\changes{1.02}{2016-04-25}{new} %\changes{1.18}{2017-08-10}{changed default value to \qt{default}} % \begin{macrocode} \define@key{glossaries-extra.sty}{stylemods}[default]{% \ifstrequal{#1}{default}% {% \renewcommand*{\@glsxtr@redefstyles}{% \RequirePackage{glossaries-extra-stylemods}}% }% {% \ifstrequal{#1}{all}% {% \renewcommand*{\@glsxtr@redefstyles}{% \PassOptionsToPackage{all}{glossaries-extra-stylemods}% \RequirePackage{glossaries-extra-stylemods}% }% }% {% \renewcommand*{\@glsxtr@redefstyles}{}% \@for\@glsxtr@tmp:=#1\do{% \IfFileExists{glossary-\@glsxtr@tmp.sty}% {% \eappto\@glsxtr@redefstyles{% \noexpand\RequirePackage{glossary-\@glsxtr@tmp}}% }% {% \PackageError{glossaries-extra}% {Glossaries style package `glossary-\@glsxtr@tmp.sty' doesn't exist (did you mean to use the `style' key?)}% {The list of values (#1) in the `stylemods' key should match the glossary-xxx.sty files provided with glossaries.sty}% }% }% \appto\@glsxtr@redefstyles{\RequirePackage{glossaries-extra-stylemods}}% } }% } % \end{macrocode} %\end{option} % %\begin{macro}{\@glsxtr@do@style} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \newcommand*{\@glsxtr@do@style}{} % \end{macrocode} %\end{macro} % %\begin{option}{style} %\changes{1.04}{2016-05-02}{new} % Since the \pkgopt{stylemods} option can automatically load extra % style packages, deal with the \pkgopt{style} option after those % packages have been loaded. % \begin{macrocode} \define@key{glossaries-extra.sty}{style}{% % \end{macrocode} %Defer actual style change: % \begin{macrocode} \renewcommand*{\@glsxtr@do@style}{% % \end{macrocode} % Set this as the default style: % \begin{macrocode} \setkeys{glossaries.sty}{style={#1}}% % \end{macrocode} % Set this style: % \begin{macrocode} \setglossarystyle{#1}% }% } % \end{macrocode} %\end{option} % %\begin{macro}{\glsxtr@inc@wrglossaryctr} %\changes{1.29}{2018-04-09}{new} %Increments the associated counter if enabled. Does nothing by %default. The optional argument is the entry label in case it's %required, but the \ctr{wrglossary} counter is globally used by all %entries. % \begin{macrocode} \newcommand*{\glsxtr@inc@wrglossaryctr}[1]{} % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrInternalLocationHyperlink} %\changes{1.29}{2018-04-09}{new} %\begin{definition} %\cs{glsxtrinternallocationhyperlink}\marg{counter}\marg{prefix}\marg{location} %\end{definition} %The first two arguments are always control sequences. % \begin{macrocode} \newcommand*{\GlsXtrInternalLocationHyperlink}[3]{% \glsxtrhyperlink{#1#2#3}{#3}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@wrglossary@locationhyperlink} %\changes{1.29}{2018-04-09}{new} % \begin{macrocode} \newcommand*{\@glsxtr@wrglossary@locationhyperlink}[3]{% \pageref{wrglossary.#3}% } % \end{macrocode} %\end{macro} % %\begin{option}{indexcounter} %\changes{1.29}{2018-04-09}{new} %Define the \ctr{wrglossary} counter that's incremented every time %an entry is indexed, except for cross-references. This is designed %for use with \app{bib2gls} v1.4+. It can work with the other indexing %methods but it will interfere with the number list collation. %This option automatically implements \pkgopt[wrglossary]{counter}. % %Since \styfmt{glossaries} automatically loads \sty{amsmath}, there %may be a problem if the indexing occurs in the \env{equation} %environment, because only one \cs{label} is allowed in each %instance of that environment. It's best to change the counter when %in maths mode. % \begin{macrocode} \@glsxtr@declareoption{indexcounter}{% \glsxtr@dooption{counter=wrglossary}% \ifundef\c@wrglossary {% \newcounter{wrglossary}% \renewcommand{\thewrglossary}{\arabic{wrglossary}}% }% {}% \renewcommand*{\glsxtr@inc@wrglossaryctr}[1]{% % \end{macrocode} %Only increment if the current counter is \ctr{wrglossary}. %\changes{1.30}{2018-04-25}{added check for \ctrfmt{wrglossary} counter} % \begin{macrocode} \ifdefstring\@gls@counter{wrglossary}% {% \refstepcounter{wrglossary}% \label{wrglossary.\thewrglossary}% }% {}% }% \renewcommand*{\GlsXtrInternalLocationHyperlink}[3]{% \ifdefstring\glsentrycounter{wrglossary}% {% \@glsxtr@wrglossary@locationhyperlink{##1}{##2}{##3}% }% {\glsxtrhyperlink{##1##2##3}{##3}}% }% } % \end{macrocode} %\end{option} % %\begin{macro}{\@glsxtrwrglossmark} %\changes{1.21}{2017-11-03}{new} %Marks the place where indexing occurs. %Does nothing by default. % \begin{macrocode} \newcommand*{\@glsxtrwrglossmark}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\@@glsxtrwrglossmark} %\changes{1.21}{2017-11-03}{new} %Since \cs{glsadd} can be used in the preamble, this action needs to %be disabled until the start of the document. % \begin{macrocode} \newcommand*{\@@glsxtrwrglossmark}{} \AtBeginDocument{\renewcommand*{\@@glsxtrwrglossmark}{\@glsxtrwrglossmark}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrwrglossmark} %\changes{1.21}{2017-11-03}{new} %Does nothing by default. % \begin{macrocode} \newcommand*{\glsxtrwrglossmark}{\ensuremath{\cdot}} % \end{macrocode} %\end{macro} % %\begin{option}{debug} %\changes{1.21}{2017-11-03}{new} % Provide extra debug options. %\changes{1.42}{2020-02-03}{add support for debug=showaccsupp} % \begin{macrocode} \define@choicekey{glossaries-extra.sty}{debug} [\@glsxtr@debugval\@glsxtr@debugnr]% {true,false,showtargets,showwrgloss,all,showaccsupp}[true]{% \ifcase\@glsxtr@debugnr\relax % true \glsxtr@dooption{debug=true}% \renewcommand*{\@glsxtrwrglossmark}{}% \or % false \glsxtr@dooption{debug=false}% \renewcommand*{\@glsxtrwrglossmark}{}% \or % showtargets \glsxtr@dooption{debug=showtargets}% \or % showwrgloss \glsxtr@dooption{debug=true}% \renewcommand*{\@glsxtrwrglossmark}{\glsxtrwrglossmark}% \or % all \glsxtr@dooption{debug=showtargets,debug=showaccsupp}% \renewcommand*{\@glsxtrwrglossmark}{\glsxtrwrglossmark}% \or % showaccsupp \glsxtr@dooption{debug=showaccsupp}% \fi } % \end{macrocode} %\end{option} % % Pass all other options to \styfmt{glossaries}. % \begin{macrocode} \DeclareOptionX*{% \expandafter\glsxtr@dooption\expandafter{\CurrentOption}} % \end{macrocode} % Process options. % \begin{macrocode} \ProcessOptionsX % \end{macrocode} % Load \styfmt{glossaries} if not already loaded. % \begin{macrocode} \RequirePackage{glossaries} % \end{macrocode} % Load the \sty{glossaries-accsupp} package if required. % \begin{macrocode} \@glsxtr@doaccsupp % \end{macrocode} % Load the \sty{glossaries-prefix} package if required. % \begin{macrocode} \@glsxtr@doloadprefix % \end{macrocode} % Redefine \cs{glspostdescription} if required. % \begin{macrocode} \@glsxtr@defpostpunc % \end{macrocode} % %\begin{macro}{\glsshowtarget} %This command was introduced to \sty{glossaries} v4.32 so it may not %be defined. Therefore it's defined here using \cs{def}. %\cs{glsshowtargetouter} was introduced in \sty{glossaries} v4.45, %so that also may not be defined. %\changes{1.21}{2017-11-03}{new} %\changes{1.42}{2020-02-03}{added check for \cs{glsshowtargetouter}} % \begin{macrocode} \ifdef\glsshowtargetouter { \renewcommand*{\glsshowtarget}[1]{% \glsxtrtitleorpdforheading {% \ifmmode \nfss@text{\glsshowtargetfont [#1]}% \else \ifinner {\glsshowtargetfont [#1]}% \else \glsshowtargetouter{#1}% \fi \fi }% {[#1]}% {{\protect\glsshowtargetfont [#1]}}% } } { % \end{macrocode} %Old definition. % \begin{macrocode} \def\glsshowtarget#1{% \glsxtrtitleorpdforheading {% \ifmmode \texttt{\small [#1]}% \else \ifinner \texttt{\small [#1]}% \else \marginpar{\texttt{\small #1}}% \fi \fi }% {[#1]}% {\texttt{\small [#1]}}% } } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@org@doseeglossary} %Save original definition of \cs{@do@seeglossary} % \begin{macrocode} \let\@glsxtr@org@doseeglossary\@do@seeglossary % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@doseeglossary} %\changes{1.21}{2017-11-03}{new} %This doesn't increment the associated counter. % \begin{macrocode} \newcommand*{\@glsxtr@doseeglossary}[2]{% \glsdoifexists{#1}% {% \@@glsxtrwrglossmark \@glsxtr@org@doseeglossary{#1}{#2}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@dosee@alsoindex@glossary} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\@glsxtr@dosee@alsoindex@glossary}[2]{% \@glsxtr@recordsee{#1}{#2}% \@glsxtr@doseeglossary{#1}{#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@org@gloautosee} %\changes{1.14}{2017-04-18}{new} %Save and restore original definition of \cs{@glo@autosee}. %(That command may not be defined as it was only introduced %to \sty{glossaries} v4.30, in which case the synonym %won't be defined either.) % \begin{macrocode} \let\@glsxtr@org@gloautosee\@glo@autosee % \end{macrocode} %\end{macro} %Check if user tried \pkgopt[false]{autoseeindex} when it can't be %supported. % \begin{macrocode} \if@glsxtr@autoseeindex \else \ifdef\@glsxtr@org@gloautosee {}% {\PackageError{glossaries-extra}{`autoseeindex=false' package option requires at least v4.30 of glossaries.sty}% {You need to update the glossaries.sty package}% } \fi % \end{macrocode} % %\begin{macro}{\@glo@autosee} %\changes{1.16}{2017-06-15}{added redefinition} %If \cs{@glo@autosee} has been defined (\sty{glossaries} v4.30 %onwards), redefine it to test the \pkgopt{autoseeindex} option. % \begin{macrocode} \ifdef\@glo@autosee {% \renewcommand*{\@glo@autosee}{% \if@glsxtr@autoseeindex\@glsxtr@org@gloautosee\fi}% }% {} % \end{macrocode} %\end{macro} % %\begin{macro}{\gls@checkseeallowed} %\changes{1.16}{2017-06-15}{added redefinition} %Don't prohibit the use of the \gloskey{see} key before the indexing %files have been opened if the automatic see indexing has been %disabled, since it's no longer an issue. % \begin{macrocode} \renewcommand*{\gls@checkseeallowed}{% \if@glsxtr@autoseeindex\@gls@see@noindex\fi } % \end{macrocode} %\end{macro} % % % Define abbreviations glossaries if required. % \begin{macrocode} \@glsxtr@abbreviationsdef \let\@glsxtr@abbreviationsdef\relax % \end{macrocode} % Setup shortcuts if required. % \begin{macrocode} \@glsxtr@setupshortcuts % \end{macrocode} %Redefine \cs{@glsxtr@redef@forglsentries} if required. % \begin{macrocode} \@glsxtr@redef@forglsentries % \end{macrocode} % %\begin{macro}{\glossariesextrasetup} %Allow user to set options after the package has been loaded. % First modify \cs{glsxtr@dooption} so that it now uses % \cs{setupglossaries}: % \begin{macrocode} \renewcommand{\glsxtr@dooption}[1]{\setupglossaries{#1}}% % \end{macrocode} % Disable options that can only be used when the package is loaded: % \begin{macrocode} \disable@keys{glossaries-extra.sty}{accsupp} % \end{macrocode} % Now define the user command: % \begin{macrocode} \newcommand*{\glossariesextrasetup}[1]{% \let\glsxtr@setup@record\relax \let\@glsxtr@setupshortcuts\relax \let\@glsxtr@redef@forglsentries\relax \let\@glsxtr@doloadprefix\relax \setkeys{glossaries-extra.sty}{#1}% \@glsxtr@abbreviationsdef \let\@glsxtr@abbreviationsdef\relax \@glsxtr@setupshortcuts \glsxtr@setup@record \@glsxtr@redef@forglsentries \@glsxtr@doloadprefix } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@org@@do@wrglossary} %\changes{1.21}{2017-11-03}{new} %Save original definition of \cs{@@do@wrglossary}. % \begin{macrocode} \let\glsxtr@org@@do@wrglossary\@@do@wrglossary % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@@do@wrglossary} %\changes{1.08}{2016-12-13}{new} %The new version adds code that can show a marker for debugging and %increments the associated counter if enabled. % \begin{macrocode} \newcommand*{\glsxtr@@do@wrglossary}[1]{% \@@glsxtrwrglossmark \glsxtr@inc@wrglossaryctr{#1}% \glsxtr@org@@do@wrglossary{#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@saveentrycounter} %\changes{1.08}{2016-12-13}{new} %Save original definition of \cs{@gls@saveentrycounter}. % \begin{macrocode} \let\glsxtr@saveentrycounter\@gls@saveentrycounter % \end{macrocode} %\end{macro} % %\begin{macro}{\@gls@saveentrycounter} %\changes{1.08}{2016-12-13}{new} %Change \cs{@gls@saveentrycounter} so that it only stores the entry %counter information if the indexing is on. % \begin{macrocode} \let\@gls@saveentrycounter\glsxtr@indexonly@saveentrycounter % \end{macrocode} %\end{macro} % %\begin{macro}{\@gls@getcounterprefix} %\changes{1.37}{2018-11-30}{new} %This command is provided by the base \sty{glossaries} package, but %is redefined here. %The standard indexing methods don't directly store the hypertarget %but instead need to split it into the counter, prefix and location %parts, which can be reconstituted in the location list. %Unfortunately, not all targets are in this form, so the links fail. %With \pkgopt[nameref]{record}, the complete target name can be %saved, so this modification adjusts the warning. % \begin{macrocode} \renewcommand*\@gls@getcounterprefix[2]{% \protected@edef\@gls@thisloc{#1}\protected@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, unless \pkgopt[nameref]{record}. % \begin{macrocode} \ifx\@glo@counterprefix\@empty \ifx\@glsxtr@record@setting\@glsxtr@record@setting@nameref \else \GlossariesExtraWarning{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"% \ifx\@glsxtr@record@setting\@glsxtr@record@setting@only . You may want to consider using record=nameref instead% \fi}% \fi \fi \fi } % \end{macrocode} %\end{macro} % %Provide script dialect hook (does nothing unless %redefined by \sty{glossaries-extra-bib2gls}). %\begin{macro}{\@glsxtrdialecthook} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \newcommand*{\@glsxtrdialecthook}{} % \end{macrocode} %\end{macro} % %Set up record option if required. % \begin{macrocode} \glsxtr@setup@record % \end{macrocode} % % Disable preamble-only options and switch on the undefined tag at % the start of the document. %\changes{1.06}{2016-06-18}{disabled docdef key at the start of the %document} % \begin{macrocode} \AtBeginDocument{% \disable@keys{glossaries-extra.sty}{abbreviations,docdef,record}% \def\@glsxtrundeftag{\glsxtrundeftag}% } % \end{macrocode} % %\section{Extra Utilities} % %\begin{macro}{\GlsXtrIfUnusedOrUndefined} %\changes{1.34}{2018-07-29}{new} %\begin{definition} %\cs{GlsXtrIfUnusedOrUndefined}\marg{label}\marg{true}\marg{false} %\end{definition} % Does \meta{true} if the entry given by \meta{label} is either % undefined or hasn't been used (or has had the first use flag reset). % \begin{macrocode} \newcommand*{\GlsXtrIfUnusedOrUndefined}[3]{% \ifglsentryexists{#1}% {\ifbool{glo@\glsdetoklabel{#1}@flag}{#3}{#2}}% {#2}% } % \end{macrocode} %\end{macro} % %Starred form of \cs{ifglossaryexists} was only introduced to %\styfmt{glossaries} v4.46 so provide it if it hasn't been defined. % \begin{macrocode} \ifdef\s@ifglossaryexists {} { % \end{macrocode} %\begin{macro}{\ifglossaryexists} %\changes{1.44}{2020-03-23}{added check for starred form} % \begin{macrocode} \renewcommand{\ifglossaryexists}{% \@ifstar\s@ifglossaryexists\@ifglossaryexists } % \end{macrocode} %\end{macro} %\begin{macro}{\@ifglossaryexists} % \begin{macrocode} \newcommand{\@ifglossaryexists}[3]{% \ifcsundef{@glotype@#1@out}{#3}{#2}% } % \end{macrocode} %\end{macro} %\begin{macro}{\s@ifglossaryexists} % \begin{macrocode} \newcommand{\s@ifglossaryexists}[3]{% \ifcsundef{glolist@#1}{#3}{#2}% } % \end{macrocode} %\end{macro} % \begin{macrocode} } % \end{macrocode} % %\begin{macro}{\glsxtrifemptyglossary} %\begin{definition} %\cs{glsxtrifemptyglossary}\marg{type}\marg{true}\marg{false} %\end{definition} % Provide command to determine if any entries have been added to the % glossary (where the glossary label is provided in the first % argument). The entries are stored in the comma-separated list % \cs{glolist@\meta{type}}. If this hasn't been defined, the glosary % doesn't exist. If it has been defined and is simply a comma, the % glossary exists and is empty. (It's initialised to a comma.) %\changes{0.4}{2015-12-03}{new} % \begin{macrocode} \newcommand{\glsxtrifemptyglossary}[3]{% \ifcsdef{glolist@#1}% {% \ifcsstring{glolist@#1}{,}{#2}{#3}% }% {% \glsxtrundefaction{Glossary type `#1' doesn't exist}{}% #2% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrifkeydefined} %\changes{1.12}{2017-02-03}{new} %Tests if the key given in the first argument has been defined. % \begin{macrocode} \newcommand*{\glsxtrifkeydefined}[3]{% \key@ifundefined{glossentry}{#1}{#3}{#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrprovidestoragekey} %\changes{1.12}{2017-02-03}{new} %Like \cs{glsaddstoragekey} but does nothing if the key has already %been defined. % \begin{macrocode} \newcommand*{\glsxtrprovidestoragekey}{% \@ifstar\@sglsxtr@provide@storagekey\@glsxtr@provide@storagekey } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@provide@storagekey} %\changes{1.12}{2017-02-03}{new} %Unstarred version. % \begin{macrocode} \newcommand*{\@glsxtr@provide@storagekey}[3]{% \key@ifundefined{glossentry}{#1}% {% \define@key{glossentry}{#1}{\csdef{@glo@#1}{##1}}% \appto\@gls@keymap{,{#1}{#1}}% \appto\@newglossaryentryprehook{\csdef{@glo@#1}{#2}}% \appto\@newglossaryentryposthook{% \letcs{\@glo@tmp}{@glo@#1}% \gls@assign@field{#2}{\@glo@label}{#1}{\@glo@tmp}% }% % \end{macrocode} %Allow the user to omit the user level command if they only %intended fetching the value with \cs{glsxtrusefield} % \begin{macrocode} \ifblank{#3} {}% {% \newcommand*{#3}[1]{\@gls@entry@field{##1}{#1}}% }% }% {% % \end{macrocode} %Provide the no-link command if not already defined. % \begin{macrocode} \ifblank{#3} {}% {% \providecommand*{#3}[1]{\@gls@entry@field{##1}{#1}}% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\s@glsxtr@provide@storagekey} %\changes{1.12}{2017-02-03}{new} %Starred version. % \begin{macrocode} \newcommand*{\s@glsxtr@provide@storagekey}[1]{% \key@ifundefined{glossentry}{#1}% {% \expandafter\newcommand\expandafter*\expandafter {\csname gls@assign@#1@field\endcsname}[2]{% \@@gls@expand@field{##1}{#1}{##2}% }% }% {}% \@glsxtr@provide@addstoragekey{#1}% } % \end{macrocode} %\end{macro} % %The name of a text-block control sequence can be stored in a %field (given by \cs{GlsXtrFmtField}). This command can then be used %with \cs{glsxtrfmt}\oarg{options}\marg{label}\marg{text} which %effectively does %\cs{glslink}\oarg{options}\marg{label}\{\meta{cs}\marg{text}\} %If the field hasn't been set for that entry just \meta{text} is %done. % %\begin{macro}{\GlsXtrFmtField} %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newcommand{\GlsXtrFmtField}{useri} % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrFmtDefaultOptions} %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newcommand{\GlsXtrFmtDefaultOptions}{noindex} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrfmt} %\changes{1.12}{2017-02-03}{new} %The post-link hook isn't done. This now has a starred form %that checks for a final optional argument. % \begin{macrocode} \newrobustcmd*{\glsxtrfmt}{\@ifstar\s@glsxtrfmt\@glsxtrfmt} % \end{macrocode} %\end{macro} %\begin{macro}{\@glsxtrfmt} %\changes{1.23}{2017-11-12}{new} %Unstarred form. % \begin{macrocode} \newcommand*{\@glsxtrfmt}[3][]{\@@glsxtrfmt{#1}{#2}{#3}{}} % \end{macrocode} %\end{macro} %\begin{macro}{\s@glsxtrfmt} %\changes{1.23}{2017-11-12}{new} %Starred form. % \begin{macrocode} \newcommand*{\s@glsxtrfmt}[3][]{% \new@ifnextchar[{\s@@glsxtrfmt{#1}{#2}{#3}}% {\@@glsxtrfmt{#1}{#2}{#3}{}}% } % \end{macrocode} %\end{macro} %\begin{macro}{\s@@glsxtrfmt} %\changes{1.23}{2017-11-12}{new} %Pick up final optional argument. % \begin{macrocode} \def\s@@glsxtrfmt#1#2#3[#4]{\@@glsxtrfmt{#1}{#2}{#3}{#4}} % \end{macrocode} %\end{macro} %\begin{macro}{\@@glsxtrfmt} %\changes{1.23}{2017-11-12}{new} %Actual inner working. % \begin{macrocode} \newcommand*{\@@glsxtrfmt}[4]{% % \end{macrocode} %Since there's no post-link hook to worry about, grouping can be %added to provide some protection against nesting (but in general %nested link text should be avoided). %\changes{1.23}{2017-11-12}{added grouping} % \begin{macrocode} \begingroup \def\glslabel{#2}% \glsdoifexistsordo{#2}% {% \ifglshasfield{\GlsXtrFmtField}{#2}% {% \let\do@gls@link@checkfirsthyper\relax \expandafter\@gls@link\expandafter[\GlsXtrFmtDefaultOptions,#1]{#2}% {\glsxtrfmtdisplay{\glscurrentfieldvalue}{#3}{#4}}% }% {\glsxtrfmtdisplay{@firstofone}{#3}{#4}}% }% {% % \end{macrocode} %Has the default \verb|noindex| been counteracted? If so, this %needs \cs{glsadd} in case \app{bib2gls} needs to pick up the record. %\changes{1.23}{2017-11-12}{added check for indexing} % \begin{macrocode} \begingroup \@gls@setdefault@glslink@opts \setkeys{glslink}{\GlsXtrFmtDefaultOptions,#1}% \ifKV@glslink@noindex\else\glsadd{#2}\fi \endgroup \glsxtrfmtdisplay{@firstofone}{#3}{#4}% }% \endgroup } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrfmtdisplay} %\changes{1.23}{2017-11-12}{new} %The command used internally by \cs{glsxtrfmt} to do the actual %formatting. The first argument is the control sequence name, %the second is the control sequence's argument, the third %is the inserted material (if starred form used). % \begin{macrocode} \newcommand{\glsxtrfmtdisplay}[3]{\csuse{#1}{#2}#3} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrentryfmt} %\changes{1.12}{2017-02-03}{new} %No link or indexing. % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\glsxtrentryfmt}[2]{% \texorpdfstring{\@glsxtrentryfmt{#1}{#2}}{\glsxtrpdfentryfmt{#1}{#2}}% } } { \newcommand*{\glsxtrentryfmt}{\@glsxtrentryfmt} } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrpdfentryfmt} %\changes{1.42}{2020-02-03}{new} %Use for the PDF bookmarks. % \begin{macrocode} \newcommand*{\glsxtrpdfentryfmt}[2]{#2} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtrentryfmt} %\changes{1.12}{2017-02-03}{new} %\changes{1.23}{2017-11-12}{fixed missing label argument} % \begin{macrocode} \newrobustcmd*{\@glsxtrentryfmt}[2]{% % \end{macrocode} %\changes{1.42}{2020-02-03}{added \cs{glslabel} and scope} %Locally define \cs{glslabel} in case the helper command needs to access the %label. %\changes{1.43}{2020-02-28}{changed \cs{def} to \cs{edef} to avoid %infinite recursion} % \begin{macrocode} {% \edef\glslabel{#1}% \glsdoifexistsordo{#1}% {% \ifglshasfield{\GlsXtrFmtField}{#1}% {% \csuse{\glscurrentfieldvalue}{#2}% }% {#2}% }% {#2}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrfieldlistadd} %\changes{1.12}{2017-02-03}{new} %If a field stores an etoolbox internal list (e.g. %\gloskey{loclist}) then this macro provides a convenient %way of adding to the list via etoolbox's \cs{listcsadd}. %The first argument is the entry's label, the second is the field %label and the third is the element to add to the list. % \begin{macrocode} \newcommand*{\glsxtrfieldlistadd}[3]{% \listcsadd{glo@\glsdetoklabel{#1}@#2}{#3}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrfieldlistgadd} %\changes{1.12}{2017-02-03}{new} %Similarly but uses \cs{listcsgadd}. % \begin{macrocode} \newcommand*{\glsxtrfieldlistgadd}[3]{% \listcsgadd{glo@\glsdetoklabel{#1}@#2}{#3}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrfieldlisteadd} %\changes{1.12}{2017-02-03}{new} %Similarly but uses \cs{listcseadd}. % \begin{macrocode} \newcommand*{\glsxtrfieldlisteadd}[3]{% \listcseadd{glo@\glsdetoklabel{#1}@#2}{#3}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrfieldlistxadd} %Similarly but uses \cs{listcsxadd}. %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newcommand*{\glsxtrfieldlistxadd}[3]{% \listcsxadd{glo@\glsdetoklabel{#1}@#2}{#3}% } % \end{macrocode} %\end{macro} % %Now provide commands to iterate over these lists. %\begin{macro}{\glsxtrfielddolistloop} %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newcommand*{\glsxtrfielddolistloop}[2]{% \dolistcsloop{glo@\glsdetoklabel{#1}@#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrfieldforlistloop} %\changes{1.12}{2017-02-03}{new} %\changes{1.29}{2018-04-09}{corrected argument order in \cs{forlistcsloop}} % \begin{macrocode} \newcommand*{\glsxtrfieldforlistloop}[3]{% \forlistcsloop{#3}{glo@\glsdetoklabel{#1}@#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrfieldformatlist} %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \newrobustcmd*{\glsxtrfieldformatlist}[2]{% \begingroup \def\@dtl@formatlist@itemsep{}% \def\@dtl@formatlist@lastitem{}% \def\@dtl@formatlist@prelastitem{}% \def\@dtl@formatlist@prelastitemsep{}% \forlistcsloop{\@dtl@formatlist@handler}{glo@\glsdetoklabel{#1}@#2}% \@dtl@formatlist@prelastitem\@dtl@formatlist@lastitem \endgroup } % \end{macrocode} %\end{macro} % %List element tests: %\begin{macro}{\glsxtrfieldifinlist} %\changes{1.12}{2017-02-03}{new} %First argument label, second argument field, third argument item, %fourth true part and fifth false part. % \begin{macrocode} \newcommand*{\glsxtrfieldifinlist}[5]{% \ifinlistcs{#3}{glo@\glsdetoklabel{#1}@#2}{#4}{#5}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrfieldxifinlist} %\changes{1.12}{2017-02-03}{new} %Expands item. % \begin{macrocode} \newcommand*{\glsxtrfieldxifinlist}[5]{% \xifinlistcs{#3}{glo@\glsdetoklabel{#1}@#2}{#4}{#5}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrforcsvfield} %\changes{1.24}{2017-11-14}{new} %\begin{definition} %\cs{glsxtrforcsvfield}\marg{label}\marg{field}\marg{cs handler} %\end{definition} % \begin{macrocode} \newcommand*{\glsxtrforcsvfield}[3]{% \@glsxtrifhasfield{#2}{#1}% {% \let\glsxtrendfor\@endfortrue \@for\@glsxtr@label:=\glscurrentfieldvalue\do {\expandafter#3\expandafter{\@glsxtr@label}}}% {}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrfieldformatcsvlist} %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \newrobustcmd*{\glsxtrfieldformatcsvlist}[2]{% \@glsxtrifhasfield{#2}{#1}% {\@dtlformatlist\glscurrentfieldvalue}% {}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrIfFieldValueInCsvList} %\changes{1.42}{2020-02-03}{new} %\begin{definition} %\cs{GlsXtrIfFieldValueInCsvList}\marg{label}\marg{field}\marg{list}\marg{true}\marg{false} %\end{definition} % \begin{macrocode} \newcommand*{\GlsXtrIfFieldValueInCsvList}{% \@ifstar\s@GlsXtrIfFieldValueInCsvList\@GlsXtrIfFieldValueInCsvList } % \end{macrocode} %\end{macro} % %Note \cs{DTLifinlist} performs one level on the list but not the %element. %\begin{macro}{\@GlsXtrIfFieldValueInCsvList} %\changes{1.42}{2020-02-03}{new} %Unstarred version. % \begin{macrocode} \newcommand*{\@GlsXtrIfFieldValueInCsvList}[5]{% \@glsxtrifhasfield{#2}{#1}% {% \expandafter\DTLifinlist\expandafter{\glscurrentfieldvalue}% {#3}{#4}{#5}% }% {#5}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\s@GlsXtrIfFieldValueInCsvList} %\changes{1.42}{2020-02-03}{new} %Starred version. % \begin{macrocode} \newcommand*{\s@GlsXtrIfFieldValueInCsvList}[5]{% \s@glsxtrifhasfield{#2}{#1}% {% \expandafter\DTLifinlist\expandafter{\glscurrentfieldvalue}% {#3}{#4}{#5}% }% {#5}% } % \end{macrocode} %\end{macro} % % %\begin{macro}{\glsxtrifhasfield} %\changes{1.19}{2017-09-09}{new} %A simpler alternative to \cs{ifglshasfield} that doesn't complain %if the entry or the field doesn't exist. (No mapping is used.) %Grouping is added to the unstarred version allow for nested use. % \begin{macrocode} \newrobustcmd{\glsxtrifhasfield}{% \@ifstar{\s@glsxtrifhasfield}{\@glsxtrifhasfield}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtrifhasfield} %\changes{1.19}{2017-09-09}{new} %Unstarred version adds grouping. % \begin{macrocode} \newcommand{\@glsxtrifhasfield}[4]{% {\s@glsxtrifhasfield{#1}{#2}{#3}{#4}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\s@glsxtrifhasfield} %\changes{1.19}{2017-09-09}{new} %\changes{1.21}{2017-11-03}{switched from \cs{ifdef} to \cs{ifundef}} % Starred version omits grouping. % \begin{macrocode} \newcommand{\s@glsxtrifhasfield}[4]{% \letcs{\glscurrentfieldvalue}{glo@\glsdetoklabel{#2}@#1}% \ifundef\glscurrentfieldvalue {#4}% {% \ifdefempty\glscurrentfieldvalue{#4}{#3}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrIfFieldNonZero} %\changes{1.31}{2018-05-09}{new} %Designed for numeric fields. %\changes{1.39}{2019-03-22}{added starred version} % \begin{macrocode} \newcommand{\GlsXtrIfFieldNonZero}{% \@ifstar\s@GlsXtrIfFieldNonZero\@GlsXtrIfFieldNonZero } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GlsXtrIfFieldNonZero} %\changes{1.39}{2019-03-22}{new} % \begin{macrocode} \newcommand{\@GlsXtrIfFieldNonZero}[4]{% \@GlsXtrIfFieldCmpNum{#1}{#2}{=}{0}{#4}{#3}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrIfFieldEqNum} %\changes{1.31}{2018-05-09}{new} %\begin{definition} %\cs{GlsXtrIfFieldEqNum}\marg{field}\marg{label}\marg{value}\marg{true}\marg{false} %\end{definition} %Designed for numeric fields. %\changes{1.39}{2019-03-22}{added starred version} % \begin{macrocode} \newcommand{\GlsXtrIfFieldEqNum}{% \@ifstar\s@GlsXtrIfFieldEqNum\@GlsXtrIfFieldEqNum } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GlsXtrIfFieldEqNum} %\changes{1.39}{2019-03-22}{new} % \begin{macrocode} \newcommand{\@GlsXtrIfFieldEqNum}[5]{% \@GlsXtrIfFieldCmpNum{#1}{#2}{=}{#3}{#4}{#5}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\s@GlsXtrIfFieldEqNum} %\changes{1.39}{2019-03-22}{new} % \begin{macrocode} \newcommand{\s@GlsXtrIfFieldEqNum}[5]{% \s@GlsXtrIfFieldCmpNum{#1}{#2}{=}{#3}{#4}{#5}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrIfFieldCmpNum} %\changes{1.31}{2018-05-09}{new} %\begin{definition} %\cs{GlsXtrIfFieldCmpNum}\marg{field}\marg{label}\marg{comparison}\marg{value}\marg{true}\marg{false} %\end{definition} %Designed for numeric fields. %\changes{1.39}{2019-03-22}{added starred version} % \begin{macrocode} \newcommand{\GlsXtrIfFieldCmpNum}{% \@ifstar\s@GlsXtrIfFieldCmpNum\@GlsXtrIfFieldCmpNum } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GlsXtrIfFieldCmpNum} %\changes{1.39}{2019-03-22}{new} % \begin{macrocode} \newcommand{\@GlsXtrIfFieldCmpNum}[6]{% {% \letcs{\glscurrentfieldvalue}{glo@\glsdetoklabel{#2}@#1}% \ifundef\glscurrentfieldvalue {\def\glscurrentfieldvalue{0}}% {% \ifdefempty\glscurrentfieldvalue {\def\glscurrentfieldvalue{0}}% {}% }% \ifnum\glscurrentfieldvalue#3#4\relax #5\else #6\fi }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\s@GlsXtrIfFieldCmpNum} %\changes{1.39}{2019-03-22}{new} % \begin{macrocode} \newcommand{\s@GlsXtrIfFieldCmpNum}[6]{% \letcs{\glscurrentfieldvalue}{glo@\glsdetoklabel{#2}@#1}% \ifundef\glscurrentfieldvalue {\def\glscurrentfieldvalue{0}}% {% \ifdefempty\glscurrentfieldvalue {\def\glscurrentfieldvalue{0}}% {}% }% \ifnum\glscurrentfieldvalue#3#4\relax #5\else #6\fi } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrIfFieldUndef} %\changes{1.23}{2017-11-12}{new} %\begin{definition} %\cs{GlsXtrIfFieldUndef}\marg{field}\marg{label}\marg{true}\marg{false} %\end{definition} %Just uses \cs{ifcsundef}. % \begin{macrocode} \newcommand{\GlsXtrIfFieldUndef}[2]{% \ifcsundef{glo@\glsdetoklabel{#2}@#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrusefield} %\changes{1.12}{2017-02-03}{new} %Provide a user-level alternative to \cs{@gls@entry@field}. %The first argument is the entry label. The second argument is the %field label. % \begin{macrocode} \newcommand*{\glsxtrusefield}[2]{% \@gls@entry@field{#1}{#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrusefield} %\changes{1.12}{2017-02-03}{new} %\changes{1.37}{2018-11-30}{fixed internal command and added check for %\cs{texorpdfstring}} %Provide a user-level alternative to \cs{@Gls@entry@field}. % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\Glsxtrusefield}[2]{% \texorpdfstring {\@Gls@entry@field{#1}{#2}} {\@gls@entry@field{#1}{#2}}% } } { \newcommand*{\Glsxtrusefield}[2]{% \@Gls@entry@field{#1}{#2}% } } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSxtrusefield} %\changes{1.37}{2018-11-30}{new} %As above but convert to all caps. % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\GLSxtrusefield}[2]{% \texorpdfstring {\glsdoifexists{#1}{\mfirstucMakeUppercase{\@gls@entry@field{#1}{#2}}}}% {\@gls@entry@field{#1}{#2}}% } } { \newcommand*{\GLSxtrusefield}[2]{% \glsdoifexists{#1}{\mfirstucMakeUppercase{\@gls@entry@field{#1}{#2}}}% } } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrentryparentname} %\changes{1.39}{2019-03-22}{new} % \begin{macrocode} \newcommand*{\glsxtrentryparentname}[1]{% \ifcsdef{glo@\glsdetoklabel{#1}@parent}% {\csuse{glo@\csuse{glo@\glsdetoklabel{#1}@parent}@name}}% {}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrdeffield} %\changes{1.12}{2017-02-03}{new} %Just use \cs{csdef} to provide a field value for the given entry. % \begin{macrocode} \newcommand*{\glsxtrdeffield}[2]{\csdef{glo@\glsdetoklabel{#1}@#2}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtredeffield} %\changes{1.12}{2017-02-03}{new} %Just use \cs{csedef} to provide a field value for the given entry. %\changes{1.28}{2018-03-06}{changed \cs{csedef} to %\cs{protected@csedef}} % \begin{macrocode} \newcommand*{\glsxtredeffield}[2]{\protected@csedef{glo@\glsdetoklabel{#1}@#2}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrsetfieldifexists} %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newcommand*{\glsxtrsetfieldifexists}[3]{\glsdoifexists{#1}{#3}} % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrSetField} %\changes{1.12}{2017-02-03}{new} %Allow the user to set a field. First argument entry label, second %argument field label, third argument value. % \begin{macrocode} \newrobustcmd*{\GlsXtrSetField}[3]{% \glsxtrsetfieldifexists{#1}{#2}% {\csdef{glo@\glsdetoklabel{#1}@#2}{#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrLetField} %\changes{1.12}{2017-02-03}{new} %Uses \cs{cslet} instead. Third argument should be a macro. % \begin{macrocode} \newrobustcmd*{\GlstrLetField}[3]{% \glsxtrsetfieldifexists{#1}{#2}% {\cslet{glo@\glsdetoklabel{#1}@#2}{#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\csGlsXtrLetField} %\changes{1.12}{2017-02-03}{new} %Uses \cs{csletcs} instead. Third argument should be a control %sequence name. % \begin{macrocode} \newrobustcmd*{\csGlsXtrLetField}[3]{% \glsxtrsetfieldifexists{#1}{#2}% {\csletcs{glo@\glsdetoklabel{#1}@#2}{#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrLetFieldToField} %\changes{1.12}{2017-02-03}{new} %Sets the field for one entry to the field for another entry. %Third argument should be the other entry %and the fourth argument that other field label. % \begin{macrocode} \newrobustcmd*{\GlsXtrLetFieldToField}[4]{% \glsxtrsetfieldifexists{#1}{#2}% {\csletcs{glo@\glsdetoklabel{#1}@#2}{glo@\glsdetoklabel{#3}@#4}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\gGlsXtrSetField} %\changes{1.12}{2017-02-03}{new} %Allow the user to set a field. First argument entry label, second %argument field label, third argument value. % \begin{macrocode} \newrobustcmd*{\gGlsXtrSetField}[3]{% \glsxtrsetfieldifexists{#1}{#2}% {\csgdef{glo@\glsdetoklabel{#1}@#2}{#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\xGlsXtrSetField} %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newrobustcmd*{\xGlsXtrSetField}[3]{% \glsxtrsetfieldifexists{#1}{#2}% {\protected@csxdef{glo@\glsdetoklabel{#1}@#2}{#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\eGlsXtrSetField} %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newrobustcmd*{\eGlsXtrSetField}[3]{% \glsxtrsetfieldifexists{#1}{#2}% {\protected@csedef{glo@\glsdetoklabel{#1}@#2}{#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrIfFieldEqStr} %\changes{1.21}{2017-11-03}{new} %\changes{1.39}{2019-03-22}{added starred form} %Starred version uses starred version of \cs{glsxtrifhasfield} %(that is, no grouping). % \begin{macrocode} \newcommand*{\GlsXtrIfFieldEqStr}{% \@ifstar\s@GlsXtrIfFieldEqStr\@GlsXtrIfFieldEqStr } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GlsXtrIfFieldEqStr} %\changes{1.39}{2019-03-22}{new} % \begin{macrocode} \newrobustcmd*{\@GlsXtrIfFieldEqStr}[5]{% \@glsxtrifhasfield{#1}{#2}% {% \ifdefstring{\glscurrentfieldvalue}{#3}{#4}{#5}% }% {#5}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\s@GlsXtrIfFieldEqStr} %\changes{1.39}{2019-03-22}{new} % \begin{macrocode} \newrobustcmd*{\s@GlsXtrIfFieldEqStr}[5]{% \s@glsxtrifhasfield{#1}{#2}% {% \ifdefstring{\glscurrentfieldvalue}{#3}{#4}{#5}% }% {#5}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrIfFieldEqXpStr} %\changes{1.31}{2018-05-09}{new} %Like the above but first expands the string. %Starred version uses starred version of \cs{glsxtrifhasfield} %(that is, no grouping). %\changes{1.39}{2019-03-22}{added starred form} % \begin{macrocode} \newcommand*{\GlsXtrIfFieldEqXpStr}{% \@ifstar\s@GlsXtrIfFieldEqXpStr\@GlsXtrIfFieldEqXpStr } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GlsXtrIfFieldEqXpStr} %\changes{1.39}{2019-03-22}{new} % \begin{macrocode} \newrobustcmd*{\@GlsXtrIfFieldEqXpStr}[5]{% \@glsxtrifhasfield{#1}{#2}% {% \protected@edef\@gls@tmp{#3}% \ifdefequal{\glscurrentfieldvalue}{\@gls@tmp}{#4}{#5}% }% {#5}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\s@GlsXtrIfFieldEqXpStr} %\changes{1.39}{2019-03-22}{new} % \begin{macrocode} \newrobustcmd*{\s@GlsXtrIfFieldEqXpStr}[5]{% \s@glsxtrifhasfield{#1}{#2}% {% \protected@edef\@gls@tmp{#3}% \ifdefequal{\glscurrentfieldvalue}{\@gls@tmp}{#4}{#5}% }% {#5}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrIfXpFieldEqXpStr} %\changes{1.31}{2018-05-09}{new} %Like the above but also expands the field value. %Starred version uses starred version of \cs{glsxtrifhasfield} %(that is, no grouping). %\changes{1.39}{2019-03-22}{added starred form} % \begin{macrocode} \newcommand*{\GlsXtrIfXpFieldEqXpStr}{% \@ifstar\s@GlsXtrIfXpFieldEqXpStr\@GlsXtrIfXpFieldEqXpStr } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GlsXtrIfXpFieldEqXpStr} %\changes{1.39}{2019-03-22}{new} % \begin{macrocode} \newrobustcmd*{\@GlsXtrIfXpFieldEqXpStr}[5]{% \@glsxtrifhasfield{#1}{#2}% {% \protected@edef\@gls@tmp{\glscurrentfieldvalue}% \let\glscurrentfieldvalue\@gls@tmp \protected@edef\@gls@tmp{#3}% \ifdefequal{\glscurrentfieldvalue}{\@gls@tmp}{#4}{#5}% }% {#5}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\s@GlsXtrIfXpFieldEqXpStr} %\changes{1.39}{2019-03-22}{new} % \begin{macrocode} \newrobustcmd*{\s@GlsXtrIfXpFieldEqXpStr}[5]{% \s@glsxtrifhasfield{#1}{#2}% {% \protected@edef\@gls@tmp{\glscurrentfieldvalue}% \let\glscurrentfieldvalue\@gls@tmp \protected@edef\@gls@tmp{#3}% \ifdefequal{\glscurrentfieldvalue}{\@gls@tmp}{#4}{#5}% }% {#5}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrForeignText} %\changes{1.32}{2018-05-24}{new} %\begin{definition} %\cs{GlsXtrForeignText}\marg{entry label}\marg{text} %\end{definition} %If a field is used to store a language tag (such as \texttt{en-GB} %or \texttt{de-CH-1996}) then this command uses \sty{tracklang}'s %interface to encapsulate \meta{text}. The field identifying the %locale is given by \cs{GlsXtrForeignTextField}. % \begin{macrocode} \ifdef\foreignlanguage { \ifdef\GetTrackedDialectFromLanguageTag { \newcommand{\GlsXtrForeignText}[2]{% % \end{macrocode} %In case this is used inside the argument of \cs{glsxtrifhasfield}, %save and restore \cs{glscurrentfieldvalue}. % \begin{macrocode} \let\@glsxtr@org@currentfieldvalue\glscurrentfieldvalue \glsxtrifhasfield{\GlsXtrForeignTextField}{#1}% {% \expandafter\GetTrackedDialectFromLanguageTag\expandafter {\glscurrentfieldvalue}{\@glsxtr@dialect}% \let\@glsxtr@locale\glscurrentfieldvalue \let\glscurrentfieldvalue\@glsxtr@org@currentfieldvalue \ifdefempty\@glsxtr@dialect {% % \end{macrocode} % An exact match hasn't been found. A partial match can only be % obtained with at least \sty{tracklang} v1.3.6. % \begin{macrocode} \ifundef\TrackedDialectClosestSubMatch {% \GlossariesExtraWarning{Can't obtain dialect label (tracklang v1.3.6+ required)}% }% {\let\@glsxtr@dialect\TrackedDialectClosestSubMatch}% }% {}% \ifdefempty\@glsxtr@dialect {% % \end{macrocode} % No tracked dialect found for the root language. % \begin{macrocode} }% {% % \end{macrocode} % Check if there's a caption hook for the given dialect label. % \begin{macrocode} \ifcsundef{captions\@glsxtr@dialect}{}% {% % \end{macrocode} % Dialect label not recognised. Check if there's a known mapping. % \begin{macrocode} \IfTrackedDialectHasMapping{\@glsxtr@dialect}% {% \edef\@glsxtr@dialect{% \GetTrackedDialectToMapping{\@glsxtr@dialect}}% % \end{macrocode} % Does a caption hook exist for this? % \begin{macrocode} \ifcsundef{captions\@glsxtr@dialect}{}% {% % \end{macrocode} % No mapping. Try root language label instead. % \begin{macrocode} \ifcsundef{captions\@tracklang@lang}{}% {% \let\@glsxtr@dialect\@tracklang@lang }% }% }% {% % \end{macrocode} % No mapping. Try root language label instead. % \begin{macrocode} \ifcsundef{captions\@tracklang@lang}{}% {% \let\@glsxtr@dialect\@tracklang@lang }% }% }% }% \ifdefempty\@glsxtr@dialect {% \GlsXtrUnknownDialectWarning{\@glsxtr@locale}{\@tracklang@lang}% #2% }% {\foreignlanguage{\@glsxtr@dialect}{#2}}% }% {#2}% key not set } } { \newcommand{\GlsXtrForeignText}[2]{% \GlossariesExtraWarning{Can't encapsulate foreign text: tracklang v1.3.6+ required}% #2% } } } { % \end{macrocode} %\cs{foreignlanguage} isn't defined so just do \meta{text}. % \begin{macrocode} \newcommand{\GlsXtrForeignText}[2]{#2} } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrForeignTextField} %\changes{1.32}{2018-05-24}{new} %This is the \gloskey{user2} field by default but may be redefined %as required. % \begin{macrocode} \newcommand*{\GlsXtrForeignTextField}{userii} % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrUnknownDialectWarning} %\changes{1.32}{2018-05-24}{new} % \begin{macrocode} \newcommand*{\GlsXtrUnknownDialectWarning}[2]{% \GlossariesExtraWarning{Can't determine valid dialect label for locale `#1' (root language: #2)}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrpageref} %\changes{1.11}{2017-01-19}{new} % Like \cs{glsrefentry} but references the page number instead (if % entry counting is on). The base \sty{glossaries} package only % introduced \cs{GlsEntryCounterLabelPrefix} in version 4.38, so it % may not be defined. % \begin{macrocode} \ifdef\GlsEntryCounterLabelPrefix {% \newcommand*{\glsxtrpageref}[1]{% \ifglsentrycounter \pageref{\GlsEntryCounterLabelPrefix\glsdetoklabel{#1}}% \else \ifglssubentrycounter \pageref{\GlsEntryCounterLabelPrefix\glsdetoklabel{#1}}% \else \gls{#1}% \fi \fi } }% {% \newcommand*{\glsxtrpageref}[1]{% \ifglsentrycounter \pageref{glsentry-\glsdetoklabel{#1}}% \else \ifglssubentrycounter \pageref{glsentry-\glsdetoklabel{#1}}% \else \gls{#1}% \fi \fi } }% % \end{macrocode} %\end{macro} % %\begin{macro}{\apptoglossarypreamble} %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newcommand{\apptoglossarypreamble}[2][\glsdefaulttype]{% \ifcsdef{glolist@#1}% {% \ifcsundef{@glossarypreamble@#1}% {\csdef{@glossarypreamble@#1}{}}% {}% \csappto{@glossarypreamble@#1}{#2}% }% {% \GlossariesExtraWarning{Glossary `#1' is not defined}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\pretoglossarypreamble} %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newcommand{\preglossarypreamble}[2][\glsdefaulttype]{% \ifcsdef{glolist@#1}% {% \ifcsundef{@glossarypreamble@#1}% {\csdef{@glossarypreamble@#1}{}}% {}% \cspreto{@glossarypreamble@#1}{#2}% }% {% \GlossariesExtraWarning{Glossary `#1' is not defined}% }% } % \end{macrocode} %\end{macro} % %\section{Modifications to Commands Provided by \styfmt{glossaries}} % Some of the commands provided by \styfmt{glossaries} are modified % to take into account new options or to change default behaviour. % % The original \cs{@gls@entry@field} causes a problem for undefined % entries when used in section headings or captions. Since entries % must be defined with just the base package this isn't a % significant issue, but it will cause a problem with \gls{bib2gls} % where no entries are defined on the first \LaTeX\ call, so % redefine \cs{@gls@entry@field} to use \cs{csuse} instead of % \cs{csname}. %\begin{macro}{\@gls@entry@field} %\changes{1.42}{2020-02-03}{redefined} %\begin{definition} %\cs{@gls@entry@field}\marg{label}\marg{field} %\end{definition} %This command was introduced to \sty{glossaries} version 4.03 but %older versions are likely to be incompatible with %\sty{glossaries-extra}. % \begin{macrocode} \ifdef\@gls@entry@field { \renewcommand*{\@gls@entry@field}[2]{\csuse{glo@\glsdetoklabel{#1}@#2}} } {} % \end{macrocode} %\end{macro} % %\begin{macro}{\ifglsused} %\begin{definition} %\cs{ifglsused}\marg{label}\marg{true part}\marg{false part} %\end{definition} %\changes{1.33}{2018-07-26}{added redefinition} %In the event that undefined entries should trigger a warning rather %than an error, \cs{ifglsused} needs to be modified to check for %existence. If the boolean variable is undefined, then its state is %indeterminate and is neither true nor false, so neither \meta{true %part} nor \meta{false} part will be performed if \meta{label} is %undefined. See also \cs{GlsXtrIfUnusedOrUndefined}. % \begin{macrocode} \renewcommand*{\ifglsused}[3]{% \glsdoifexists{#1}{\ifbool{glo@\glsdetoklabel{#1}@flag}{#2}{#3}}% } % \end{macrocode} %\end{macro} % %Provide a starred version of \cs{longnewglossaryentry} that doesn't %automatically insert \verb|\leavevmode\unskip\nopostdesc| at the %end of the description. The unstarred version is modified to use %\cs{glsxtrpostlongdescription} instead. % %\begin{macro}{\longnewglossaryentry} %\changes{1.12}{2017-02-03}{added starred version} % \begin{macrocode} \renewcommand*{\longnewglossaryentry}{% \@ifstar\@glsxtr@s@longnewglossaryentry\@glsxtr@longnewglossaryentry } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@s@longnewglossaryentry} %\changes{1.12}{2017-02-03}{new} %Starred version. % \begin{macrocode} \newcommand{\@glsxtr@s@longnewglossaryentry}[3]{% \glsdoifnoexists{#1}% {% \bgroup \let\@org@newglossaryentryprehook\@newglossaryentryprehook \long\def\@newglossaryentryprehook{% \long\def\@glo@desc{#3}% \@org@newglossaryentryprehook }% \renewcommand*{\gls@assign@desc}[1]{% \global\cslet{glo@\glsdetoklabel{#1}@desc}{\@glo@desc}% \global\cslet{glo@\glsdetoklabel{#1}@descplural}{\@glo@descplural}% } \gls@defglossaryentry{#1}{#2}% \egroup }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@longnewglossaryentry} %\changes{1.12}{2017-02-03}{new} %Unstarred version. % \begin{macrocode} \newcommand{\@glsxtr@longnewglossaryentry}[3]{% \glsdoifnoexists{#1}% {% \bgroup \let\@org@newglossaryentryprehook\@newglossaryentryprehook \long\def\@newglossaryentryprehook{% \long\def\@glo@desc{#3\glsxtrpostlongdescription}% \@org@newglossaryentryprehook }% \renewcommand*{\gls@assign@desc}[1]{% \global\cslet{glo@\glsdetoklabel{#1}@desc}{\@glo@desc}% % \end{macrocode} %The following is different from the base \sty{glossaries.sty}: % \begin{macrocode} \global\cslet{glo@\glsdetoklabel{#1}@descplural}{\@glo@descplural}% } \gls@defglossaryentry{#1}{#2}% \egroup }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrpostlongdescription} %\changes{1.12}{2017-02-03}{new} %Hook at the end of the description when using the unstarred %\cs{longnewglossaryentry}. % \begin{macrocode} \newcommand*{\glsxtrpostlongdescription}{\leavevmode\unskip\nopostdesc} % \end{macrocode} %\end{macro} % %Provide a starred version of \cs{newignoredglossary} that doesn't %add the glossary to the nohyperlist list. % %\begin{macro}{\newignoredglossary} %\changes{1.11}{2017-01-19}{added starred version} %Redefine to check for star. % \begin{macrocode} \renewcommand{\newignoredglossary}{% \@ifstar\glsxtr@s@newignoredglossary\glsxtr@org@newignoredglossary } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@org@newignoredglossary} %The original definition is patched to check for existence. %\changes{1.11}{2017-01-19}{new} %\changes{1.12}{2017-02-03}{Added check for existence} % \begin{macrocode} \newcommand*{\glsxtr@org@newignoredglossary}[1]{% \ifcsdef{glolist@#1} {% \glsxtrundefaction{Glossary type `#1' already exists}{}% }% {% \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}{\glsxtr@s@newignoredglossary} %Starred form. %\changes{1.11}{2017-01-19}{new} %\changes{1.12}{2017-02-03}{Added check for existence} % \begin{macrocode} \newcommand*{\glsxtr@s@newignoredglossary}[1]{% \ifcsdef{glolist@#1} {% \glsxtrundefaction{Glossary type `#1' already exists}{}% }% {% \ifdefempty\@ignored@glossaries {% \edef\@ignored@glossaries{#1}% }% {% \eappto\@ignored@glossaries{,#1}% }% \csgdef{glolist@#1}{,}% \ifcsundef{gls@#1@entryfmt}% {% \defglsentryfmt[#1]{\glsentryfmt}% }% {}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glssettoctitle} %\changes{1.12}{2017-02-03}{added patch} %Ignored glossaries don't have an associated title, so modify %\cs{glssettoctitle} to check for it to prevent an undefined %command written to the toc file. % \begin{macrocode} \glsifusetranslator {% \renewcommand*{\glssettoctitle}[1]{% \ifcsdef{gls@tr@set@#1@toctitle}% {% \csuse{gls@tr@set@#1@toctitle}% }% {% \ifcsdef{@glotype@#1@title}% {\def\glossarytoctitle{\csname @glotype@#1@title\endcsname}}% {\def\glossarytoctitle{\glossarytitle}}% }% }% } { \renewcommand*{\glssettoctitle}[1]{% \ifcsdef{@glotype@#1@title}% {\def\glossarytoctitle{\csname @glotype@#1@title\endcsname}}% {\def\glossarytoctitle{\glossarytitle}}% } } % \end{macrocode} %\end{macro} % %\begin{macro}{\provideignoredglossary} %\changes{1.12}{2017-02-03}{new} %As above but won't do anything if the glossary already exists. % \begin{macrocode} \newcommand{\provideignoredglossary}{% \@ifstar\glsxtr@s@provideignoredglossary\glsxtr@provideignoredglossary } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@provideignoredglossary} %\changes{1.12}{2017-02-03}{new} %Unstarred version. % \begin{macrocode} \newcommand*{\glsxtr@provideignoredglossary}[1]{% \ifcsdef{glolist@#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}{\glsxtr@s@provideignoredglossary} %Starred form. %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newcommand*{\glsxtr@s@provideignoredglossary}[1]{% \ifcsdef{glolist@#1} {}% {% \ifdefempty\@ignored@glossaries {% \edef\@ignored@glossaries{#1}% }% {% \eappto\@ignored@glossaries{,#1}% }% \csgdef{glolist@#1}{,}% \ifcsundef{gls@#1@entryfmt}% {% \defglsentryfmt[#1]{\glsentryfmt}% }% {}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrcopytoglossary} %Adds an entry label to another glossary list. First argument is %entry label. Second argument is glossary label. %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newcommand*{\glsxtrcopytoglossary}[2]{% \glsdoifexists{#1}% {% \ifcsdef{glolist@#2} {% \cseappto{glolist@#2}{#1,}% }% {% \glsxtrundefaction{Glossary type `#2' doesn't exist}{}% }% }% } % \end{macrocode} %\end{macro} % %\subsection{Existence Checks} %\begin{macro}{\glsdoifexists} % Modify \cs{glsdoifexists} to take account of the % \pkgopt{undefaction} setting. % \begin{macrocode} \renewcommand{\glsdoifexists}[2]{% \ifglsentryexists{#1}{#2}% {% % \end{macrocode} % Define \cs{glslabel} in case it's needed after this command (for % example in the post-link hook). %\changes{1.08}{2016-12-13}{now defines \cs{glslabel}} % \begin{macrocode} \edef\glslabel{\glsdetoklabel{#1}}% \glsxtrundefaction{Glossary entry `\glslabel' has not been defined}{You need to define a glossary entry before you can reference it.}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsdoifnoexists} % Modify \cs{glsdoifnoexists} to take account of the % \pkgopt{undefaction} setting. % \begin{macrocode} \renewcommand{\glsdoifnoexists}[2]{% \ifglsentryexists{#1}{% \glsxtrundefaction{Glossary entry `\glsdetoklabel{#1}' has already been defined}{}}{#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsdoifexistsordo} % Modify \cs{glsdoifexistsordo} to take account of the % \pkgopt{undefaction} setting. This command was introduced in % \styfmt{glossaries} version 4.19, so check if it has been defined first. % \begin{macrocode} \ifdef\glsdoifexistsordo {% \renewcommand{\glsdoifexistsordo}[3]{% \ifglsentryexists{#1}{#2}% {% \glsxtrundefaction{Glossary entry `\glsdetoklabel{#1}' has not been defined}{You need to define a glossary entry before you can use it.}% #3% }% }% } {% \glsxtr@warnonexistsordo\glsdoifexistsordo \newcommand{\glsdoifexistsordo}[3]{% \ifglsentryexists{#1}{#2}% {% \glsxtrundefaction{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} % Similarly for \cs{doifglossarynoexistsordo}. %\changes{1.44}{2020-03-23}{switched to starred form of \cs{ifglossaryexists}} % \begin{macrocode} \ifdef\doifglossarynoexistsordo {% \renewcommand{\doifglossarynoexistsordo}[3]{% \ifglossaryexists*{#1}% {% \glsxtrundefaction{Glossary type `#1' already exists}{}% #3% }% {#2}% }% } {% \glsxtr@warnonexistsordo\doifglossarynoexistsordo \newcommand{\doifglossarynoexistsordo}[3]{% \ifglossaryexists*{#1}% {% \glsxtrundefaction{Glossary type `#1' already exists}{}% #3% }% {#2}% }% } % \end{macrocode} %\end{macro} % %There are now three types of cross-references: the \gloskey{see} key (as %original), the \gloskey{alias} key (from \styfmt{glossaries-extra} v1.12) % and the \gloskey{seealso} key (from \styfmt{glossaries-extra} v1.16). % The original \gloskey{see} key needs to have a corresponding field % (which it doesn't with the base \sty{glossaries} package). % %\begin{macro}{\@newglossaryentryposthook} % Hook into end of \cs{newglossaryentry} to add \qt{see} value as a % field. %\changes{0.5.4}{2015-12-15}{added empty see value if not set and added % `see' to field key map} % \begin{macrocode} \appto\@newglossaryentryposthook{% \ifdefvoid\@glo@see {\csxdef{glo@\@glo@label @see}{}}% {% \csxdef{glo@\@glo@label @see}{\@glo@see}% \if@glsxtr@autoseeindex \@glsxtr@autoindexcrossrefs \fi }% } \appto\@gls@keymap{,{see}{see}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrusesee} %\changes{1.06}{2016-06-18}{new} %Apply \cs{glsseeformat} to the \gloskey{see} key if not empty. % \begin{macrocode} \newcommand*{\glsxtrusesee}[1]{% \glsdoifexists{#1}% {% \letcs{\@glo@see}{glo@\glsdetoklabel{#1}@see}% \ifdefempty\@glo@see {}% {% \expandafter\glsxtr@usesee\@glo@see\@end@glsxtr@usesee }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@usesee} %\changes{1.06}{2016-06-18}{new} % \begin{macrocode} \newcommand*{\glsxtr@usesee}[1][\seename]{% \@glsxtr@usesee[#1]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@usesee} %\changes{1.06}{2016-06-18}{new} % \begin{macrocode} \def\@glsxtr@usesee[#1]#2\@end@glsxtr@usesee{% \glsxtruseseeformat{#1}{#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtruseseeformat} %\changes{1.06}{2016-06-18}{new} %The format used by \cs{glsxtrusesee}. The first argument is the tag %(such as \cs{seename}). The second argument is the comma-separated %list of cross-referenced labels. % \begin{macrocode} \newcommand*{\glsxtruseseeformat}[2]{% \glsseeformat[#1]{#2}{}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsseeitemformat} %\changes{1.21}{2017-11-03}{new} %\changes{1.22}{2017-11-08}{switched check from regular to short} %\changes{1.37}{2018-11-30}{removed reference to \cs{glslabel}} %\changes{1.42}{2020-02-03}{switched to using \cs{glsfmttext} and %\cs{glsfmtname}} %\styfmt{glossaries} originally defined \cs{glsseeitemformat} %to use \cs{glsentryname} but in v3.0 this was switched to %use \cs{glsentrytext} due to problems occurring with the %\gloskey{name} field being sanitized. Since this is no longer a %problem, \styfmt{glossaries-extra} restored the original %definition as it makes more sense to use the \gloskey{name} %in the cross-reference list. Unfortunately this doesn't take style %changes into account, so as from v1.42, this now uses %\cs{glsfmttext} and \cs{glsfmtname} instead. (The \gloskey{text} %field is chosen rather than the \gloskey{short} field to allow for %the \qt{noshort} styles.) % \begin{macrocode} \renewcommand*{\glsseeitemformat}[1]{% \ifglshasshort{#1}{\glsfmttext{#1}}{\glsfmtname{#1}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrhiername} %\changes{1.37}{2018-11-30}{new} %\changes{1.42}{2020-02-03}{switched to using \cs{glsfmttext} and %\cs{glsfmtname}} %\begin{definition} %\cs{glsxtrhiername}\marg{label} %\end{definition} %Displays the hierarchical name for the given entry. The %cross-reference format \cs{glsseeitemformat} may be redefined to %use this command to show the hierarchy, if required. This now uses %\cs{glsfmttext} and \cs{glsfmtname} instead of \cs{glsaccessshort} %and \cs{glsaccessname} to allow for style formatting. % \begin{macrocode} \newcommand*{\glsxtrhiername}[1]{% \glsdoifexists{#1}% {% \glsxtrifhasfield{parent}{#1}% {\glsxtrhiername{\glscurrentfieldvalue}\glsxtrhiernamesep}% {}% \ifglshasshort{#1}{\glsfmttext{#1}}{\glsfmtname{#1}}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrhiername} %\changes{1.37}{2018-11-30}{new} %\changes{1.42}{2020-02-03}{switched to using \cs{glsfmttext} and %\cs{glsfmtname}} %\begin{definition} %\cs{Glsxtrhiername}\marg{label} %\end{definition} %As above but displays the top-level name with an initial capital. % \begin{macrocode} \newcommand*{\Glsxtrhiername}[1]{% \glsdoifexists{#1}% {% \glsxtrifhasfield{parent}{#1}% {% \Glsxtrhiername{\glscurrentfieldvalue}\glsxtrhiernamesep \ifglshasshort{#1}{\glsfmttext{#1}}{\glsfmtname{#1}}% }% {\ifglshasshort{#1}{\Glsfmttext{#1}}{\Glsfmtname{#1}}}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrhiername} %\changes{1.37}{2018-11-30}{new} %\changes{1.42}{2020-02-03}{switched to using \cs{Glsfmttext} and %\cs{Glsfmtname}} %\begin{definition} %\cs{GlsXtrhiername}\marg{label} %\end{definition} %As above but converts the first letter of each name to a capital. %(Note that this isn't applying title case, just capitalising the %start of each hierarchical element.) % \begin{macrocode} \newcommand*{\GlsXtrhiername}[1]{% \glsdoifexists{#1}% {% \glsxtrifhasfield{parent}{#1}% {\GlsXtrhiername{\glscurrentfieldvalue}\glsxtrhiernamesep}% {}% \ifglshasshort{#1}{\Glsfmttext{#1}}{\Glsfmtname{#1}}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSxtrhiername} %\changes{1.37}{2018-11-30}{new} %\changes{1.42}{2020-02-03}{switched to using \cs{glsfmttext}, %\cs{glsfmtname}, \cs{GLSfmttext} and \cs{GLSfmtname}} %\begin{definition} %\cs{GLSxtrhiername}\marg{label} %\end{definition} %As above but displays the top-level name in all-caps. % \begin{macrocode} \newcommand*{\GLSxtrhiername}[1]{% \glsdoifexists{#1}% {% \glsxtrifhasfield{parent}{#1}% {% \GLSxtrhiername{\glscurrentfieldvalue}\glsxtrhiernamesep \ifglshasshort{#1}{\glsfmttext{#1}}{\glsfmtname{#1}}% }% {\ifglshasshort{#1}{\GLSfmttext{#1}}{\GLSfmtname{#1}}}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSXTRhiername} %\changes{1.37}{2018-11-30}{new} %\changes{1.42}{2020-02-03}{switched to using \cs{GLSfmttext} and %\cs{GLSfmtname}} %\begin{definition} %\cs{GLSXTRhiername}\marg{label} %\end{definition} %As above but displays all names in all-caps. % \begin{macrocode} \newcommand*{\GLSXTRhiername}[1]{% \glsdoifexists{#1}% {% \glsxtrifhasfield{parent}{#1}% {\GLSXTRhiername{\glscurrentfieldvalue}\glsxtrhiernamesep}% {} \ifglshasshort{#1}{\GLSfmttext{#1}}{\GLSfmtname{#1}}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrhiernamesep} %\changes{1.37}{2018-11-30}{new} %Separator used in \cs{glsxtrhiername} and variants. % \begin{macrocode} \newcommand*{\glsxtrhiernamesep}{\,{\small$\triangleright$}\,} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtruseseealso} %\changes{1.16}{2017-06-15}{new} %Apply \cs{glsseeformat} to the \gloskey{seealso} key if not empty. %There's no optional tag to worry about here. % \begin{macrocode} \newcommand*{\glsxtruseseealso}[1]{% \glsdoifexists{#1}% {% \letcs{\@glo@see}{glo@\glsdetoklabel{#1}@seealso}% \ifdefempty\@glo@see {}% {% \expandafter\glsxtruseseealsoformat\expandafter{\@glo@see}% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrusealias} %\changes{1.42}{2020-02-03}{new} %Apply \cs{glsseeformat} to the \gloskey{alias} key if not empty. %There's no optional tag to worry about here. The value also isn't a %comma-separated list, but use the same interface. % \begin{macrocode} \newcommand*{\glsxtrusealias}[1]{% \glsdoifexists{#1}% {% \letcs{\@glo@see}{glo@\glsdetoklabel{#1}@alias}% \ifdefempty\@glo@see {}% {% % \end{macrocode} %Expansion isn't necessary because the value is a single label not a %list. % \begin{macrocode} \glsxtruseseeformat{\seename}{\@glo@see}% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtruseseealsoformat} %\changes{1.16}{2017-06-15}{new} %The format used by \cs{glsxtruseseealso}. The argument is the comma-separated %list of cross-referenced labels. % \begin{macrocode} \newcommand*{\glsxtruseseealsoformat}[1]{% \glsseeformat[\seealsoname]{#1}{}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrseelist} %\changes{1.16}{2017-06-15}{new} %Fully expands argument before passing to \cs{glsseelist}. %(The argument to \cs{glsseelist} must be a comma-separated list of %entry labels.) % \begin{macrocode} \newrobustcmd{\glsxtrseelist}[1]{% \edef\@glo@tmp{\noexpand\glsseelist{#1}}\@glo@tmp } % \end{macrocode} %\end{macro} % %\begin{macro}{\seealsoname} %\changes{1.16}{2017-06-15}{new} %\changes{1.42}{2020-02-03}{add check for \cs{alsoname}} %In case this command hasn't been defined. Languages packages %actually provide \ics{alsoname} so use that if it's defined. % \begin{macrocode} \ifdef\alsoname {\providecommand{\seealsoname}{\alsoname}} {\providecommand{\seealsoname}{see also}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrindexseealso} %\changes{1.16}{2017-06-15}{new} %If \cs{@xdycrossrefhook} is defined, provide a %\texttt{seealso} crossref class. Otherwise this just does %\cs{glssee} with \cs{seealsoname} as the tag. The hook is only %defined if both \pkgopt{xindy} and \sty{glossaries} v4.30+ are %being used. % \begin{macrocode} \ifdef\@xdycrossrefhook { % \end{macrocode} %Add the cross-reference class definition to the hook. % \begin{macrocode} \appto\@xdycrossrefhook{% \write\glswrite{(define-crossref-class \string"seealso\string" :unverified )}% \write\glswrite{(markup-crossref-list :class \string"seealso\string"^^J\space\space\space :open \string"\string\glsxtruseseealsoformat\glsopenbrace\string" :close \string"\glsclosebrace\string")}% } % \end{macrocode} %Append to class list. % \begin{macrocode} \appto\@xdylocationclassorder{\space\string"seealso\string"} % \end{macrocode} %This essentially works like \cs{@do@seeglossary} but uses the %\texttt{seealso} class. %\changes{1.21}{2017-11-03}{added check that the entry exists} %This doesn't increment the associated counter. % \begin{macrocode} \newrobustcmd*{\glsxtrindexseealso}[2]{% \ifx\@glsxtr@record@setting\@glsxtr@record@setting@alsoindex \@glsxtr@recordsee{#1}{#2}% \fi \glsdoifexists{#1}% {% \@@glsxtrwrglossmark \def\@gls@xref{#2}% \@onelevel@sanitize\@gls@xref \@gls@checkmkidxchars\@gls@xref \gls@glossary{\csname glo@#1@type\endcsname}{% (indexentry :tkey (\csname glo@#1@index\endcsname) :xref (\string"\@gls@xref\string") :attr \string"seealso\string" ) }% }% } } { % \end{macrocode} % \pkgopt{xindy} not in use or \sty{glossaries} version too old to support this. % \begin{macrocode} \newrobustcmd*{\glsxtrindexseealso}{\glssee[\seealsoname]} } % \end{macrocode} %\end{macro} % %The \gloskey{alias} key should be set to the label of the synonymous entry. %The \gloskey{seealso} key essentially behaves like %\texttt{see=[\cs{seealsoname}]\marg{xr-list}}. Neither of these new keys %has the optional tag part allowed with \gloskey{see}. % % If \cs{gls@set@xr@key} has been defined (\sty{glossaries} v4.30), % use that, otherwise just use \cs{glsaddstoragekey}. % % \begin{macrocode} \ifdef\gls@set@xr@key { % \end{macrocode} % We have at least \sty{glossaries} v4.30. This means the new keys % can be governed by the same settings as the see key. % \begin{macrocode} \define@key{glossentry}{alias}{% \gls@set@xr@key{alias}{\@glo@alias}{#1}% } \define@key{glossentry}{seealso}{% \gls@set@xr@key{seealso}{\@glo@seealso}{#1}% } % \end{macrocode} % Add to the key mappings. % \begin{macrocode} \appto\@gls@keymap{,{alias}{alias},{seealso}{seealso}} % \end{macrocode} % Set the default value. % \begin{macrocode} \appto\@newglossaryentryprehook{\def\@glo@alias{}\def\@glo@seealso{}}% % \end{macrocode} % Assign the field values. % \begin{macrocode} \appto\@newglossaryentryposthook{% \ifdefvoid\@glo@seealso {\csxdef{glo@\@glo@label @seealso}{}}% {% \csxdef{glo@\@glo@label @seealso}{\@glo@seealso}% \if@glsxtr@autoseeindex \@glsxtr@autoindexcrossrefs \fi }% % \end{macrocode} % The \gloskey{alias} field doesn't trigger the automatic % cross-reference indexing performed at the end of the document. % \begin{macrocode} \ifdefvoid\@glo@alias {\csxdef{glo@\@glo@label @alias}{}}% {% \csxdef{glo@\@glo@label @alias}{\@glo@alias}% }% } % \end{macrocode} % Provide user-level commands to access the values. %\begin{macro}{\glsxtralias} % \begin{macrocode} \newcommand*{\glsxtralias}[1]{\@gls@entry@field{#1}{alias}} % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrseealsolabels} % \begin{macrocode} \newcommand*{\glsxtrseealsolabels}[1]{\@gls@entry@field{#1}{seealso}} % \end{macrocode} %\end{macro} %Add to the \cs{@glo@autosee} hook. % \begin{macrocode} \appto\@glo@autoseehook{% \ifdefvoid\@glo@alias {% \ifdefvoid\@glo@seealso {}% {% \edef\@do@glssee{\noexpand\glsxtrindexseealso {\@glo@label}{\@glo@seealso}}% \@do@glssee }% }% {% % \end{macrocode} %Add cross-reference if see key hasn't been used. % \begin{macrocode} \ifdefvoid\@glo@see {% \edef\@do@glssee{\noexpand\glssee{\@glo@label}{\@glo@alias}}% \@do@glssee }% {}% }% }% } { % \end{macrocode} % We have an older version of \sty{glossaries}, so just use % \cs{glsaddstoragekey}. %\begin{macro}{\glsxtralias} %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \glsaddstoragekey*{alias}{}{\glsxtralias} % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrseealsolabels} %\changes{1.16}{2017-06-15}{new} % \begin{macrocode} \glsaddstoragekey*{seealso}{}{\glsxtrseealsolabels} % \end{macrocode} %\end{macro} % %If \cs{gls@set@xr@key} isn't defined, then \cs{@glo@autosee} won't %be either, so use the post entry definition hook. % %\begin{macro}{\@newglossaryentryposthook} %\changes{1.12}{2017-02-03}{added check for alias key} %Append to the hook to check for the \gloskey{alias} and %\gloskey{seealso} keys. % \begin{macrocode} \appto\@newglossaryentryposthook{% \ifcsvoid{glo@\@glo@label @alias}% {% \ifcsvoid{glo@\@glo@label @seealso}% {}% {% \edef\@do@glssee{\noexpand\glsxtrindexseealso {\@glo@label}{\csuse{glo@\@glo@label @seealso}}}% \@do@glssee }% }% {% % \end{macrocode} %Add cross-reference if see key hasn't been used. % \begin{macrocode} \ifdefvoid\@glo@see {% \edef\@do@glssee{\noexpand\glssee {\@glo@label}{\csuse{glo@\@glo@label @alias}}}% \@do@glssee }% {}% }% } % \end{macrocode} %\end{macro} % % \begin{macrocode} } % \end{macrocode} % % % Add all unused cross-references at the end of the document. % \begin{macrocode} \AtEndDocument{\if@glsxtrindexcrossrefs\glsxtraddallcrossrefs\fi} % \end{macrocode} % %\begin{macro}{\glsxtraddallcrossrefs} % Iterate through all used entries and if they have a % cross-reference, make sure the cross-reference has been added. % \begin{macrocode} \newcommand*{\glsxtraddallcrossrefs}{% \forallglossaries{\@glo@type}% {% \forglsentries[\@glo@type]{\@glo@label}% {% \ifglsused{\@glo@label}% {\expandafter\@glsxtr@addunusedxrefs\expandafter{\@glo@label}}{}% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@addunusedxrefs} % If the given entry has a \gloskey{see} or \gloskey{seealso} field add all unused % cross-references. (The \gloskey{alias} field isn't checked.) %\changes{1.16}{2017-06-15}{added check for \gloskey{seealso} field} % \begin{macrocode} \newcommand*{\@glsxtr@addunusedxrefs}[1]{% \letcs{\@glo@see}{glo@\glsdetoklabel{#1}@see}% \ifdefvoid\@glo@see {}% {% \expandafter\glsxtr@addunused\@glo@see\@end@glsxtr@addunused }% \letcs{\@glo@see}{glo@\glsdetoklabel{#1}@seealso}% \ifdefvoid\@glo@see {}% {% \expandafter\glsxtr@addunused\@glo@see\@end@glsxtr@addunused }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@addunused} % Adds all the entries if they haven't been used. % \begin{macrocode} \newcommand*{\glsxtr@addunused}[1][]{% \@glsxtr@addunused } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@addunused} % Adds all the entries if they haven't been used. % \begin{macrocode} \def\@glsxtr@addunused#1\@end@glsxtr@addunused{% \@for\@glsxtr@label:=#1\do {% \ifglsused{\@glsxtr@label}{}% {% \glsadd[format=glsxtrunusedformat]{\@glsxtr@label}% \glsunset{\@glsxtr@label}% \expandafter\@glsxtr@addunusedxrefs\expandafter{\@glsxtr@label}% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrunusedformat} % \begin{macrocode} \newcommand*{\glsxtrunusedformat}[1]{\unskip} % \end{macrocode} %\end{macro} % %\subsection{Document Definitions} % %\begin{macro}{\gls@begindocdefs} %This command was only introduced to \styfmt{glossaries} v4.37, so %it may not be defined. If it has been defined, redefine it to check %\cs{@glsxtr@docdefval} so that it only inputs the \texttt{.glsdefs} %file if \pkgopt[true]{docdef}. % \begin{macrocode} \ifdef\gls@begindocdefs {% \renewcommand*{\gls@begindocdefs}{% \ifnum\@glsxtr@docdefval=1\relax \@gls@enablesavenonumberlist \edef\@gls@restoreat{% \noexpand\catcode`\noexpand\@=\number\catcode`\@\relax}% \makeatletter \InputIfFileExists{\jobname.glsdefs}{}{}% \@gls@restoreat \undef\@gls@restoreat \gls@defdocnewglossaryentry \else \ifnum\@glsxtr@docdefval=3\relax % \end{macrocode} %\changes{1.34}{2018-07-29}{added support for docdef=atom} %The \pkgopt[atom]{docdef} package option has been set. Create the %.glsdefs file for the autocomplete support but don't read it. % \begin{macrocode} \@gls@enablesavenonumberlist \let\gls@checkseeallowed\relax \let\newglossaryentry\new@atom@glossaryentry \global\newwrite\@gls@deffile \immediate\openout\@gls@deffile=\jobname.glsdefs % \end{macrocode} %Write all currently defined entries. % \begin{macrocode} \forallglsentries{\@glsentry}{\@gls@writedef{\@glsentry}}% \fi \fi } } {% \ifnum\@glsxtr@docdefval=3\relax \PackageError{glossaries-extra}{Package option `docdef=\@glsxtr@docdefsetting' requires at least version 4.37 of the base glossaries.sty package}{} \fi } % \end{macrocode} %\end{macro} % %\begin{macro}{\new@atom@glossaryentry} % \begin{macrocode} \newrobustcmd{\new@atom@glossaryentry}[2]{% \gls@defglossaryentry{#1}{#2}% \@gls@writedef{#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\makenoidxglossaries} %Modify \cs{makenoidxglossaries} so that it automatically %sets \pkgopt[false]{docdef} (unless the restricted setting is on) %and disables the \pkgopt{docdef} key. %This command isn't allowed with the \pkgopt{record} option. %\changes{1.42}{2020-02-03}{added \cs{@domakeglossaries}} % \begin{macrocode} \let\glsxtr@orgmakenoidxglossaries\makenoidxglossaries \renewcommand{\makenoidxglossaries}{% \@domakeglossaries {% \ifdefequal\@glsxtr@record@setting\@glsxtr@record@setting@off {% \glsxtr@orgmakenoidxglossaries % \end{macrocode} %Add marker to \cs{@do@seeglossary} but don't increment associated %counter. % \begin{macrocode} \renewcommand{\@do@seeglossary}[2]{% \@@glsxtrwrglossmark \edef\@gls@label{\glsdetoklabel{##1}}% \protected@write\@auxout{}{% \string\@gls@reference {\csname glo@\@gls@label @type\endcsname}% {\@gls@label}% {% \string\glsseeformat##2{}% }% }% }% % \end{macrocode} %Check for \pkgopt[restricted]{docdefs}: % \begin{macrocode} \if@glsxtrdocdefrestricted % \end{macrocode} %If restricted document definitions allowed, adjust %\cs{@gls@reference} so that it doesn't test for existence. % \begin{macrocode} \renewcommand*{\@gls@reference}[3]{% \ifcsundef{@glsref@##1}{\csgdef{@glsref@##1}{}}{}% \ifinlistcs{##2}{@glsref@##1}% {}% {\listcsgadd{@glsref@##1}{##2}}% \ifcsundef{glo@\glsdetoklabel{##2}@loclist}% {\csgdef{glo@\glsdetoklabel{##2}@loclist}{}}% {}% \listcsgadd{glo@\glsdetoklabel{##2}@loclist}{##3}% }% \else % \end{macrocode} %Disable document definitions. % \begin{macrocode} \@glsxtrdocdeffalse \fi \disable@keys{glossaries-extra.sty}{docdef}% }% {% \PackageError{glossaries-extra}{\string\makenoidxglossaries\space not permitted\MessageBreak with record=\@glsxtr@record@setting\space package option}% {You may only use \string\makenoidxglossaries\ space with the record=off option}% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\gls@defdocnewglossaryentry} % Modify \cs{gls@defdocnewglossaryentry} so that it checks % the \pkgopt{docdef} value. % \begin{macrocode} \renewcommand*{\gls@defdocnewglossaryentry}{% \ifcase\@glsxtr@docdefval % \end{macrocode} % \pkgopt[false]{docdef}: % \begin{macrocode} \renewcommand*{\newglossaryentry}[2]{% \PackageError{glossaries-extra}{Glossary entries must be \MessageBreak defined in the preamble with \MessageBreak package option `docdef=false'\MessageBreak(consider using `docdef=restricted')}{Move your glossary definitions to the preamble. You can also put them in a \MessageBreak separate file and load them with \string\loadglsentries.}% }% \or % \end{macrocode} % (\pkgopt[true]{docdef} case.) % Since the \gloskey{see} value is now saved in a field, it % can be used by entries that have been defined in the document. % \begin{macrocode} \let\gls@checkseeallowed\relax \let\newglossaryentry\new@glossaryentry \else % \end{macrocode} %Restricted mode just needs to allow the \gloskey{see} value. % \begin{macrocode} \let\gls@checkseeallowed\relax \fi }% % \end{macrocode} %\end{macro} % % Permit a special form of document definition, but only allow % it if the glossaries come at the end of the document. These % commands behave a little like a combination of \cs{newterm} % and \cs{gls}. This must be explicitly enabled with % the following. % %\begin{macro}{\GlsXtrEnableOnTheFly} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\GlsXtrEnableOnTheFly}{% \@ifstar\@sGlsXtrEnableOnTheFly\@GlsXtrEnableOnTheFly } % \end{macrocode} %\end{macro} % %\begin{macro}{\@sGlsXtrEnableOnTheFly} %\changes{0.5.4}{2015-12-15}{new} % The starred version attempts to allow UTF8 characters in the % label, but this may break! (Formatting commands mustn't be used in the % label, but the label may be a command whose replacement text is the % actual label. This doesn't take into account a command that's % defined in terms of another command that may eventually expand to % the label text.) % \begin{macrocode} \newcommand*{\@sGlsXtrEnableOnTheFly}{% \renewcommand*{\glsdetoklabel}[1]{% \expandafter\@glsxtr@ifcsstart\string##1 \@glsxtr@end@ {% \expandafter\detokenize\expandafter{##1}% }% {\detokenize{##1}}% }% \@GlsXtrEnableOnTheFly } \def\@glsxtr@ifcsstart#1#2\@glsxtr@end@#3#4{% \expandafter\if\glsbackslash#1% #3% \else #4% \fi } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrstarflywarn} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\glsxtrstarflywarn}{% \GlossariesExtraWarning{Experimental starred version of \string\GlsXtrEnableOnTheFly\space in use (please ensure you have read the warnings in the glossaries-extra user manual)}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GlsXtrEnableOnTheFly} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\@GlsXtrEnableOnTheFly}{% % \end{macrocode} %\end{macro} % Don't redefine \cs{glsdetoklabel} if LuaTeX or XeTeX is being % used, since it's mainly to allow accented characters in the % label. % % These definitions are all assigned the category given by: %\begin{macro}{\glsxtrcat} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\glsxtrcat}{general} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\glsxtr}[1][]{% \def\glsxtr@keylist{##1}% \@glsxtr } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\@glsxtr}[2][]{% \ifglsentryexists{##2}% {% \ifblank{##1}{}{\GlsXtrWarning{##1}{##2}}% }% {% \gls@defglossaryentry{##2}{name={##2},category=\glsxtrcat, description={\nopostdesc},##1}% }% \expandafter\gls\expandafter[\glsxtr@keylist]{##2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtr} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\Glsxtr}[1][]{% \def\glsxtr@keylist{##1}% \@Glsxtr } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glsxtr} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\@Glsxtr}[2][]{% \ifglsentryexists{##2}% {% \ifblank{##1}{}{\GlsXtrWarning{##1}{##2}}% }% {% \gls@defglossaryentry{##2}{name={##2},category=\glsxtrcat, description={\nopostdesc},##1}% }% \expandafter\Gls\expandafter[\glsxtr@keylist]{##2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrpl} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\glsxtrpl}[1][]{% \def\glsxtr@keylist{##1}% \@glsxtrpl } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtrpl} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\@glsxtrpl}[2][]{% \ifglsentryexists{##2}% {% \ifblank{##1}{}{\GlsXtrWarning{##1}{##2}}% }% {% \gls@defglossaryentry{##2}{name={##2},category=\glsxtrcat, description={\nopostdesc},##1}% }% \expandafter\glspl\expandafter[\glsxtr@keylist]{##2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrpl} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\Glsxtrpl}[1][]{% \def\glsxtr@keylist{##1}% \@Glsxtrpl } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glsxtrpl} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\@Glsxtrpl}[2][]{% \ifglsentryexists{##2} {% \ifblank{##1}{}{\GlsXtrWarning{##1}{##2}}% }% {% \gls@defglossaryentry{##2}{name={##2},category=\glsxtrcat, description={\nopostdesc},##1}% }% \expandafter\Glspl\expandafter[\glsxtr@keylist]{##2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrWarning} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\GlsXtrWarning}[2]{% \def\@glsxtr@optlist{##1}% \@onelevel@sanitize\@glsxtr@optlist \GlossariesExtraWarning{The options `\@glsxtr@optlist' have been ignored for entry `##2' as it has already been defined}% } % \end{macrocode} %\end{macro} % Disable commands after the glossary: % \begin{macrocode} \renewcommand\@printglossary[2]{% \def\@glsxtr@printglossopts{##1}% \@glsxtr@orgprintglossary{##1}{##2}% \def\@glsxtr{\@glsxtr@disabledflycommand\glsxtr}% \def\@glsxtrpl{\@glsxtr@disabledflycommand\glsxtrpl}% \def\@Glsxtr{\@glsxtr@disabledflycommand\Glsxtr}% \def\@Glsxtrpl{\@glsxtr@disabledflycommand\Glsxtrpl}% } % \end{macrocode} % %\begin{macro}{\@glsxtr@disabledflycommand} % \begin{macrocode} \newcommand*{\@glsxtr@disabledflycommand}[1]{% \PackageError{glossaries-extra}% {\string##1\space can't be used after any of the \MessageBreak glossaries have been displayed}% {The on-the-fly commands enabled by \string\GlsXtrEnableOnTheFly\space may only be used \MessageBreak before the glossaries. If you want to use any entries \MessageBreak after any of the glossaries, you must use the standard \MessageBreak method of first defining the entry and then using the \MessageBreak entry with commands like \string\gls}% \@@glsxtr@disabledflycommand }% \newcommand*{\@@glsxtr@disabledflycommand}[2][]{##2} % \end{macrocode} %\end{macro} % % End of \cs{GlsXtrEnableOnTheFly}. Disable since it can only % be used once. % \begin{macrocode} \let\GlsXtrEnableOnTheFly\relax } \@onlypreamble\GlsXtrEnableOnTheFly % \end{macrocode} % %\subsection{Existing Glossary Style Modifications} % % Modify \cs{setglossarystyle} to keep track of the current style. % This allows the \cs{glossaries-extra-stylemods} package to reset the % current style after the required modifications have been made. %\begin{macro}{\@glsxtr@current@style} %\changes{1.02}{2016-04-25}{new} % Initialise the current style to the default style. % \begin{macrocode} \newcommand*{\@glsxtr@current@style}{\@glossary@default@style} % \end{macrocode} %\end{macro} % % Modify \cs{setglossarystyle} to set \cs{@glsxtr@current@style}. %\begin{macro}{\setglossarystyle} % \begin{macrocode} \renewcommand*{\setglossarystyle}[1]{% \ifcsundef{@glsstyle@#1}% {% \PackageError{glossaries-extra}{Glossary style `#1' undefined}{}% }% {% \csname @glsstyle@#1\endcsname % \end{macrocode} % Only set the current style if it exists. % \begin{macrocode} \protected@edef\@glsxtr@current@style{#1}% }% \ifx\@glossary@default@style\relax \protected@edef\@glossary@default@style{#1}% \fi } % \end{macrocode} %\end{macro} % % In case we have an old version of \styfmt{glossaries}: % \begin{macrocode} \ifdef\@glossary@default@style {} {% \let\@glossary@default@style\relax } % \end{macrocode} % %\begin{macro}{\glslistdottedwidth} %If \cs{glslistdottedwidth} has been defined and is currently equal %to \verb|.5\hsize| then make the modification suggested in %\href{http://www.dickimaw-books.com/cgi-bin/bugtracker.cgi?action=view&key=92}{bug report \#92} % \begin{macrocode} \ifdef\glslistdottedwidth {% \ifdim\glslistdottedwidth=.5\hsize \setlength{\glslistdottedwidth}{-\dimexpr\maxdimen-1sp\relax} \AtBeginDocument{% \ifdim\glslistdottedwidth=-\dimexpr\maxdimen-1sp\relax \setlength{\glslistdottedwidth}{.5\columnwidth}% \fi }% \fi } {}% % \end{macrocode} %\end{macro} % %Similarly for \cs{glsdescwidth}: %\begin{macro}{\glsdescwidth} %\changes{0.5.3}{2015-12-09}{added} % \begin{macrocode} \ifdef\glsdescwidth {% \ifdim\glsdescwidth=.6\hsize \setlength{\glsdescwidth}{-\dimexpr\maxdimen-1sp\relax} \AtBeginDocument{% \ifdim\glsdescwidth=-\dimexpr\maxdimen-1sp\relax \setlength{\glsdescwidth}{.6\columnwidth}% \fi }% \fi } {}% % \end{macrocode} %\end{macro} %and for \cs{glspagelistwidth}: %\begin{macro}{\glspagelistwidth} %\changes{0.5.3}{2015-12-09}{added} % \begin{macrocode} \ifdef\glspagelistwidth {% \ifdim\glspagelistwidth=.1\hsize \setlength{\glspagelistwidth}{-\dimexpr\maxdimen-1sp\relax} \AtBeginDocument{% \ifdim\glspagelistwidth=-\dimexpr\maxdimen-1sp\relax \setlength{\glspagelistwidth}{.1\columnwidth}% \fi }% \fi } {}% % \end{macrocode} %\end{macro} % %\begin{macro}{\glossaryentrynumbers} % Has the \pkgopt{nonumberlist} option been used? %\changes{0.5.2}{2015-12-08}{added} % \begin{macrocode} \def\org@glossaryentrynumbers#1{#1\gls@save@numberlist{#1}}% \ifx\org@glossaryentrynumbers\glossaryentrynumbers \glsnonumberlistfalse \renewcommand*{\glossaryentrynumbers}[1]{% \ifglsentryexists{\glscurrententrylabel}% {% \@glsxtrpreloctag \GlsXtrFormatLocationList{#1}% \@glsxtrpostloctag \gls@save@numberlist{#1}% }{}% }% \else \glsnonumberlisttrue \renewcommand*{\glossaryentrynumbers}[1]{% \ifglsentryexists{\glscurrententrylabel}% {% \gls@save@numberlist{#1}% }{}% }% \fi % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrFormatLocationList} %\changes{0.5.2}{2015-12-08}{new} % Provide an easy interface to change the format of the location % list without removing the save number list stuff. % \begin{macrocode} \newcommand*{\GlsXtrFormatLocationList}[1]{#1} % \end{macrocode} %\end{macro} % % Sometimes users want to prefix the location list with % \qt{page}\slash\qt{pages}. The simplest way to determine if the % location list consists of a single location is to check for % instances of \cs{delimN} or \cs{delimR}, but this isn't so easy to % do as they might be embedded inside the argument of formatting % commands. With a bit of trickery we can find out by adjusting % \cs{delimN} and \cs{delimR} to set a flag and then save % information to the auxiliary file for the next run. %\begin{macro}{\GlsXtrEnablePreLocationTag} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \newcommand*{\GlsXtrEnablePreLocationTag}[2]{% \let\@glsxtrpreloctag\@@glsxtrpreloctag \let\@glsxtrpostloctag\@@glsxtrpostloctag \renewcommand*{\@glsxtr@pagetag}{#1}% \renewcommand*{\@glsxtr@pagestag}{#2}% \renewcommand*{\@glsxtr@savepreloctag}[2]{% \csgdef{@glsxtr@preloctag@##1}{##2}% }% \renewcommand*{\@glsxtr@doloctag}{% \ifcsundef{@glsxtr@preloctag@\glscurrententrylabel}% {% \GlossariesWarning{Missing pre-location tag for `\glscurrententrylabel'. Rerun required}% }% {% \csuse{@glsxtr@preloctag@\glscurrententrylabel}% }% }% } \@onlypreamble\GlsXtrEnablePreLocationTag % \end{macrocode} %\end{macro} %\begin{macro}{\@glsxtrpreloctag} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \newcommand*{\@@glsxtrpreloctag}{% \let\@glsxtr@org@delimN\delimN \let\@glsxtr@org@delimR\delimR \let\@glsxtr@org@glsignore\glsignore % \end{macrocode} % \cs{gdef} is required as the delimiters may occur inside a scope. % \begin{macrocode} \gdef\@glsxtr@thisloctag{\@glsxtr@pagetag}% \renewcommand*{\delimN}{% \gdef\@glsxtr@thisloctag{\@glsxtr@pagestag}% \@glsxtr@org@delimN}% \renewcommand*{\delimR}{% \gdef\@glsxtr@thisloctag{\@glsxtr@pagestag}% \@glsxtr@org@delimR}% \renewcommand*{\glsignore}[1]{% \gdef\@glsxtr@thisloctag{\relax}% \@glsxtr@org@glsignore{##1}}% \@glsxtr@doloctag } % \end{macrocode} %\end{macro} %\begin{macro}{\@glsxtrpreloctag} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \newcommand*{\@glsxtrpreloctag}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@pagetag} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \newcommand*{\@glsxtr@pagetag}{}% % \end{macrocode} %\end{macro} %\begin{macro}{\@glsxtr@pagestag} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \newcommand*{\@glsxtr@pagestag}{}% % \end{macrocode} %\end{macro} %\begin{macro}{\@@glsxtrpostloctag} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \newcommand*{\@@glsxtrpostloctag}{% \let\delimN\@glsxtr@org@delimN \let\delimR\@glsxtr@org@delimR \let\glsignore\@glsxtr@org@glsignore \protected@write\@auxout{}% {\string\@glsxtr@savepreloctag{\glscurrententrylabel}{\@glsxtr@thisloctag}}% } % \end{macrocode} %\end{macro} %\begin{macro}{\@glsxtrpostloctag} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \newcommand*{\@glsxtrpostloctag}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@preloctag} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \newcommand*{\@glsxtr@savepreloctag}[2]{} \protected@write\@auxout{}{% \string\providecommand\string\@glsxtr@savepreloctag[2]{}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@doloctag} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \newcommand*{\@glsxtr@doloctag}{} % \end{macrocode} %\end{macro} %\begin{macro}{\KV@printgloss@nonumberlist} % Modify the \gloskey[printglossary]{nonumberlist} key to % use \cs{GlsXtrFormatLocationList} (and also save the number list): %\changes{0.5.2}{2015-12-08}{added} % \begin{macrocode} \renewcommand*{\KV@printgloss@nonumberlist}[1]{% \XKV@plfalse \XKV@sttrue \XKV@checkchoice[\XKV@resa]{#1}{true,false}% {% \csname glsnonumberlist\XKV@resa\endcsname \ifglsnonumberlist \def\glossaryentrynumbers##1{\gls@save@numberlist{##1}}% \else \def\glossaryentrynumbers##1{% \@glsxtrpreloctag \GlsXtrFormatLocationList{##1}% \@glsxtrpostloctag \gls@save@numberlist{##1}}% \fi }% } % \end{macrocode} %\end{macro} % %\subsection{Entry Formatting, Hyperlinks and Indexing} % %\begin{macro}{\glsentryfmt} % Change default entry format. Use the generic format for regular % terms (that is, entries that have a category with the \catattr{regular} % attribute set) or non-regular terms without a short value and use the abbreviation format for non-regular % terms that have a short value. If further attributes need to be checked, then % \cs{glsentryfmt} will need redefining as appropriate (or use % \cs{defglsentryfmt}). %\changes{0.3}{2015-12-02}{added check for short} % The abbreviation format is set here for entries that have a short % form, even if they are regular entries to ensure the abbreviation % fonts are correct. %\changes{0.5.2}{2015-12-08}{moved \cs{glssetabbrvfmt} from %\cs{glsxtrabbrvfmt} to here} % \begin{macrocode} \renewcommand*{\glsentryfmt}{% \ifglshasshort{\glslabel}{\glssetabbrvfmt{\glscategory{\glslabel}}}{}% \glsifregular{\glslabel}% {\glsxtrregularfont{\glsgenentryfmt}}% {% \ifglshasshort{\glslabel}% {\glsxtrabbreviationfont{\glsxtrgenabbrvfmt}}% {\glsxtrregularfont{\glsgenentryfmt}}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrregularfont} %\changes{1.04}{2016-05-02}{new} % Font used for regular entries. % \begin{macrocode} \newcommand*{\glsxtrregularfont}[1]{#1} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrabbreviationfont} %\changes{1.30}{2018-04-25}{new} % Font used for abbreviation entries. % \begin{macrocode} \newcommand*{\glsxtrabbreviationfont}[1]{#1} % \end{macrocode} %\end{macro} % % Commands like \cs{glsifplural} are only used by the \cs{gls}-like % commands in the \styfmt{glossaries} package, but it might be useful % for the postlink hook to know if the user has used, say, % \cs{glsfirst} or \cs{glsplural}. This can provide better % consistency with the formatting of the \cs{gls}-like commands, % even though they don't use \cs{glsentryfmt}. % %\begin{macro}{\@gls@field@link} % Redefine \cs{@gls@field@link} so that commands like \cs{glsfirst} % can setup \cs{glsxtrifwasfirstuse} etc to allow the postlink hook % to work better. This now has an optional argument that sets up the % defaults. %\changes{0.3}{2015-12-02}{added optional argument} % \begin{macrocode} \renewcommand{\@gls@field@link}[4][]{% % \end{macrocode} %If the \pkgopt{record} option has been used, the information needs %to be written to the aux file regardless of whether the entry %exists (unless indexing has been switched off). %\changes{1.08}{2016-12-13}{added \cs{@glsxtr@record}} % \begin{macrocode} \@glsxtr@record{#2}{#3}{glslink}% \glsdoifexists{#3}% {% % \end{macrocode} %Save and restore the hyper setting (\cs{@gls@link} also does this, %but that's too late if the optional argument of \cs{@gls@field@link} %modifies it). % \begin{macrocode} \let\glsxtrorg@ifKV@glslink@hyper\ifKV@glslink@hyper \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \def\glscustomtext{#4}% \@glsxtr@field@linkdefs #1% \@gls@link[#2]{#3}{#4}% \let\ifKV@glslink@hyper\glsxtrorg@ifKV@glslink@hyper }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %The commands \cs{gls}, \cs{Gls} etc don't use \cs{@gls@field@link}, %so they need modifying as well to use \cs{@glsxtr@record}. % %\begin{macro}{\@gls@} %\changes{1.08}{2016-12-13}{added \cs{@glsxtr@record}} %Save the original definition and redefine. % \begin{macrocode} \let\@glsxtr@org@gls@\@gls@ \def\@gls@#1#2{% \@glsxtr@record{#1}{#2}{glslink}% \@glsxtr@org@gls@{#1}{#2}% }% % \end{macrocode} %\end{macro} % %\begin{macro}{\@glspl@} %\changes{1.08}{2016-12-13}{added \cs{@glsxtr@record}} %Save the original definition and redefine. % \begin{macrocode} \let\@glsxtr@org@glspl@\@glspl@ \def\@glspl@#1#2{% \@glsxtr@record{#1}{#2}{glslink}% \@glsxtr@org@glspl@{#1}{#2}% }% % \end{macrocode} %\end{macro} % %\begin{macro}{\@Gls@} %\changes{1.08}{2016-12-13}{added \cs{@glsxtr@record}} %Save the original definition and redefine. % \begin{macrocode} \let\@glsxtr@org@Gls@\@Gls@ \def\@Gls@#1#2{% \@glsxtr@record{#1}{#2}{glslink}% \@glsxtr@org@Gls@{#1}{#2}% }% % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glspl@} %\changes{1.08}{2016-12-13}{added \cs{@glsxtr@record}} %Save the original definition and redefine. % \begin{macrocode} \let\@glsxtr@org@Glspl@\@Glspl@ \def\@Glspl@#1#2{% \@glsxtr@record{#1}{#2}{glslink}% \@glsxtr@org@Glspl@{#1}{#2}% }% % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLS@} %\changes{1.08}{2016-12-13}{added \cs{@glsxtr@record}} %Save the original definition and redefine. % \begin{macrocode} \let\@glsxtr@org@GLS@\@GLS@ \def\@GLS@#1#2{% \@glsxtr@record{#1}{#2}{glslink}% \@glsxtr@org@GLS@{#1}{#2}% }% % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSpl@} %\changes{1.08}{2016-12-13}{added \cs{@glsxtr@record}} %\changes{1.10}{2016-12-17}{fixed bug caused by typo in command name} %Save the original definition and redefine. % \begin{macrocode} \let\@glsxtr@org@GLSpl@\@GLSpl@ \def\@GLSpl@#1#2{% \@glsxtr@record{#1}{#2}{glslink}% \@glsxtr@org@GLSpl@{#1}{#2}% }% % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsdisp} %\changes{1.08}{2016-12-13}{added \cs{@glsxtr@record}} %\changes{1.13}{2017-02-07}{removed \cs{@glsxtr@org@glsdisp}} %This is redefined to allow the recording on the first run. %Can't save and restore \cs{@glsdisp} since it has an optional %argument. % \begin{macrocode} \renewcommand*{\@glsdisp}[3][]{% \@glsxtr@record{#1}{#2}{glslink}% \glsdoifexists{#2}{% \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper \let\glsifplural\@secondoftwo \let\glscapscase\@firstofthree \def\glscustomtext{#3}% \def\glsinsert{}% \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}% \@gls@link[#1]{#2}{\@glo@text}% \ifKV@glslink@local \glslocalunset{#2}% \else \glsunset{#2}% \fi }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\@gls@@link@} %\changes{1.08}{2016-12-13}{added \cs{@glsxtr@record}} %Redefine to include \cs{@glsxtr@record} % \begin{macrocode} \renewcommand*{\@gls@@link}[3][]{% \@glsxtr@record{#1}{#2}{glslink}% \glsdoifexistsordo{#2}% {% \let\do@gls@link@checkfirsthyper\relax % \end{macrocode} %\changes{1.35}{2018-08-13}{initialise post-link hook commands} % Post-link hook commands need initialising. % \begin{macrocode} \def\glscustomtext{#3}% \@glsxtr@field@linkdefs \@gls@link[#1]{#2}{#3}% }% {% \glstextformat{#3}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrinitwrgloss} %\changes{1.14}{2017-04-18}{new} %Set the default if the \gloskey[glslink]{wrgloss} is omitted. % \begin{macrocode} \newcommand*{\glsxtrinitwrgloss}{% \glsifattribute{\glslabel}{wrgloss}{after}% {% \glsxtrinitwrglossbeforefalse }% {% \glsxtrinitwrglossbeforetrue }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\ifglsxtrwrglossbefore} %\changes{1.14}{2017-04-18}{new} %Conditional to determine if the indexing should be done before the %link text. % \begin{macrocode} \newif\ifglsxtrinitwrglossbefore \glsxtrinitwrglossbeforetrue % \end{macrocode} %\end{macro} % % Define a \gloskey[glslink]{wrgloss} key to determine whether to % write the glossary information before or after the link text. % \begin{macrocode} \define@choicekey{glslink}{wrgloss}% [\@glsxtr@wrglossval\@glsxtr@wrglossnr]% {before,after}% {% \ifcase\@glsxtr@wrglossnr\relax \glsxtrinitwrglossbeforetrue \or \glsxtrinitwrglossbeforefalse \fi } % \end{macrocode} %\changes{1.19}{2017-09-09}{added \cs{glslink} option \texttt{thevalue}} % \begin{macrocode} \define@key{glslink}{thevalue}{\def\@glsxtr@thevalue{#1}} % \end{macrocode} % %\changes{1.19}{2017-09-09}{added \cs{glslink} option \texttt{theHvalue}} % \begin{macrocode} \define@key{glslink}{theHvalue}{\def\@glsxtr@theHvalue{#1}} % \end{macrocode} % %\begin{macro}{\ifglsxtr@hyperoutside} %\changes{1.21}{2017-11-03}{new} % Define a \gloskey[glslink]{hyperoutside} key to determine whether % \cs{hyperlink} should be outside \cs{glstextformat}. % \begin{macrocode} \define@boolkey{glslink}[glsxtr@]{hyperoutside}[true]{} \glsxtr@hyperoutsidetrue % \end{macrocode} % %\end{macro} % %\begin{macro}{\@glsxtr@local@textformat} %\changes{1.30}{2018-04-25}{new} %Provide a key to locally change the text format. % \begin{macrocode} \define@key{glslink}{textformat}{% \ifcsdef{#1} {% \letcs{\@glsxtr@local@textformat}{#1}% }% {% \PackageError{glossaries-extra}{Unknown control sequence name `#1'}{}% }% } % \end{macrocode} %\end{macro} % %\changes{1.31}{2018-05-09}{added \texttt{prefix} key for \texttt{glslink}} % \begin{macrocode} \define@key{glslink}{prefix}{\def\glolinkprefix{#1}} % \end{macrocode} % %\begin{macro}{\glsxtrinithyperoutside} %\changes{1.21}{2017-11-03}{new} %Set the default if the \gloskey[glslink]{hyperoutside} is omitted. % \begin{macrocode} \newcommand*{\glsxtrinithyperoutside}{% \glsifattribute{\glslabel}{hyperoutside}{false}% {% \glsxtr@hyperoutsidefalse }% {% \glsxtr@hyperoutsidetrue }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@inc@linkcount} %\changes{1.26}{2018-01-05}{new} %Does nothing by default. % \begin{macrocode} \newcommand*{\glsxtr@inc@linkcount}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glslinkpresetkeys} %\changes{1.26}{2018-01-05}{new} %User hook performed immediately before options are set. %Does nothing by default. % \begin{macrocode} \newcommand*{\glslinkpresetkeys}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrExpandedFmt} %\changes{1.30}{2018-04-25}{new} %Helper command that (protected) fully expands second argument and %then applies it to the first, which must be a command that takes a %single argument. % \begin{macrocode} \newrobustcmd*{\GlsXtrExpandedFmt}[2]{% \protected@edef\@glsxtr@tmp{#2}% \expandafter#1\expandafter{\@glsxtr@tmp}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@use@equation@counter@or} %\changes{1.37}{2018-11-30}{new} %If in a numbered equation, change the counter to \ctr{equation}. %This can be overridden by explicitly setting the counter in the %optional argument of commands like \cs{gls} and \cs{glslink}. % \begin{macrocode} \newcommand*{\@glsxtr@use@equation@counter}{% \@glsxtr@ifnum@mmode{\def\@gls@counter{equation}}{}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@do@autoadd} %\changes{1.37}{2018-11-30}{new} %If \cs{GlsXtrAutoAddOnFormat} is used, this will automatically use %\cs{glsadd}. It's therefore only used with \cs{@gls@link} not with %\cs{glsadd} otherwise it could trigger an infinite loop. The %argument indicates the key family (glslink or glossadd). % \begin{macrocode} \newcommand*{\glsxtr@do@autoadd}[1]{} % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrAutoAddOnFormat} %\changes{1.37}{2018-11-30}{new} %\begin{definition} %\cs{GlsXtrAutoAddOnFormat}\oarg{label}\marg{format list}\marg{glsadd options} %\end{definition} %If an entry is indexed with the format set to one identified in the %comma-separated list, then automatically index it using \cs{glsadd} %with the given options, which may override the current options. %Scoping is needed to prevent leakage. % \begin{macrocode} \newcommand*{\GlsXtrAutoAddOnFormat}[3][\glslabel]{% \renewcommand*{\glsxtr@do@autoadd}[1]{% \begingroup \protected@edef\@glsxtr@do@autoadd{% \noexpand\ifstrequal{##1}{glslink}% {% \noexpand\DTLifinlist{\@glsnumberformat}{#2}{\noexpand\glsadd[format={\@glsnumberformat},#3]{#1}}{}% }% {}% }% \@glsxtr@do@autoadd \endgroup }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@gls@link} %\changes{1.14}{2017-04-18}{added redefinition} %Redefine to allow the indexing to be placed after the link text. By %default this is done before the link text to prevent problems that %can occur from the whatsit, but there may be times when the user %would like the indexing done afterwards even though it causes a %whatsit. % \begin{macrocode} \def\@gls@link[#1]#2#3{% \leavevmode \edef\glslabel{\glsdetoklabel{#2}}% \def\@gls@link@opts{#1}% \let\@gls@link@label\glslabel \let\@glsnumberformat\@glsxtr@defaultnumberformat \edef\@gls@counter{\csname glo@\glslabel @counter\endcsname}% \edef\glstype{\csname glo@\glslabel @type\endcsname}% \let\org@ifKV@glslink@hyper\ifKV@glslink@hyper % \end{macrocode} %Save current value of \cs{glolinkprefix}: % \begin{macrocode} \let\@glsxtr@org@glolinkprefix\glolinkprefix % \end{macrocode} %Initialise \cs{@glsxtr@local@textformat} % \begin{macrocode} \let\@glsxtr@local@textformat\relax % \end{macrocode} % Initialise thevalue and theHvalue (v1.19). % \begin{macrocode} \def\@glsxtr@thevalue{}% \def\@glsxtr@theHvalue{\@glsxtr@thevalue}% % \end{macrocode} % Initialise when indexing should occur (new to v1.14). % \begin{macrocode} \glsxtrinitwrgloss % \end{macrocode} % Initialise whether \cs{hyperlink} should be outside \cs{glstextformat} % (new to v1.21). % \begin{macrocode} \glsxtrinithyperoutside % \end{macrocode} % Note that the default link options may % override \cs{glsxtrinitwrgloss}. % \begin{macrocode} \@gls@setdefault@glslink@opts % \end{macrocode} %Increment link counter if enabled (new to v1.26). % \begin{macrocode} \glsxtr@inc@linkcount % \end{macrocode} % Check if the \pkgopt{equations} option has been set (new to v1.37). % \begin{macrocode} \if@glsxtr@equations \@glsxtr@use@equation@counter \fi % \end{macrocode} % As the original definition. % \begin{macrocode} \do@glsdisablehyperinlist \do@gls@link@checkfirsthyper % \end{macrocode} %User hook before options are set (new to v1.26): % \begin{macrocode} \glslinkpresetkeys % \end{macrocode} %Set options. % \begin{macrocode} \setkeys{glslink}{#1}% % \end{macrocode} %Perform auto add if set (new to v1.37) % \begin{macrocode} \glsxtr@do@autoadd{glslink}% % \end{macrocode} %User hook after options are set: % \begin{macrocode} \glslinkpostsetkeys % \end{macrocode} % Check \gloskey[glslink]{thevalue} and \gloskey[glslink]{theHvalue} % before saving (v1.19). % \begin{macrocode} \ifdefempty{\@glsxtr@thevalue}% {% \@gls@saveentrycounter }% {% \let\theglsentrycounter\@glsxtr@thevalue \def\theHglsentrycounter{\@glsxtr@theHvalue}% }% \@gls@setsort{\glslabel}% % \end{macrocode} %Check if the \gloskey[glslink]{textformat} key has been used. % \begin{macrocode} \ifx\@glsxtr@local@textformat\relax % \end{macrocode} % Check \catattr{textformat} attribute (new to v1.21). % \begin{macrocode} \glshasattribute{\glslabel}{textformat}% {% \edef\@glsxtr@attrval{\glsgetattribute{\glslabel}{textformat}}% \ifcsdef{\@glsxtr@attrval}% {% \letcs{\@glsxtr@textformat}{\@glsxtr@attrval}% }% {% \GlossariesExtraWarning{Unknown control sequence name `\@glsxtr@attrval' supplied in textformat attribute for entry `\glslabel'. Reverting to default \string\glstextformat}% \let\@glsxtr@textformat\glstextformat }% }% {% \let\@glsxtr@textformat\glstextformat }% \else \let\@glsxtr@textformat\@glsxtr@local@textformat \fi % \end{macrocode} % Do write if it should occur before the link text: % \begin{macrocode} \ifglsxtrinitwrglossbefore \@do@wrglossary{#2}% \fi % \end{macrocode} % Do the link text: % \begin{macrocode} \ifKV@glslink@hyper \ifglsxtr@hyperoutside \@glslink{\glolinkprefix\glslabel}{\@glsxtr@textformat{#3}}% \else \@glsxtr@textformat{\@glslink{\glolinkprefix\glslabel}{#3}}% \fi \else \ifglsxtr@hyperoutside \glsdonohyperlink{\glolinkprefix\glslabel}{\@glsxtr@textformat{#3}}% \else \@glsxtr@textformat{\glsdonohyperlink{\glolinkprefix\glslabel}{#3}}% \fi \fi % \end{macrocode} % Do write if it should occur after the link text: % \begin{macrocode} \ifglsxtrinitwrglossbefore \else \@do@wrglossary{#2}% \fi % \end{macrocode} %Restore original value of \cs{glolinkprefix}: % \begin{macrocode} \let\glolinkprefix\@glsxtr@org@glolinkprefix % \end{macrocode} % As the original definition: % \begin{macrocode} \let\ifKV@glslink@hyper\org@ifKV@glslink@hyper } % \end{macrocode} %\end{macro} % %\changes{1.14}{2017-04-18}{added \cs{glsadd} option \texttt{thevalue}} % \begin{macrocode} \define@key{glossadd}{thevalue}{\def\@glsxtr@thevalue{#1}} % \end{macrocode} % %\changes{1.14}{2017-04-18}{added \cs{glsadd} option \texttt{theHvalue}} % \begin{macrocode} \define@key{glossadd}{theHvalue}{\def\@glsxtr@theHvalue{#1}} % \end{macrocode} % %\begin{macro}{\glsaddpresetkeys} %\changes{1.30}{2018-04-25}{new} % \begin{macrocode} \newcommand*{\glsaddpresetkeys}{} % \end{macrocode} %\end{macro} %\begin{macro}{\glsaddpostsetkeys} %\changes{1.30}{2018-04-25}{new} % \begin{macrocode} \newcommand*{\glsaddpostsetkeys}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsadd} %\changes{1.08}{2016-12-13}{added \cs{@glsxtr@record}} %\changes{1.37}{2018-11-30}{added grouping} %Redefine to include \cs{@glsxtr@record} and suppress in headings % \begin{macrocode} \renewrobustcmd*{\glsadd}[2][]{% \glsxtrifinmark {}% {% \@gls@adjustmode \begingroup \@glsxtr@record{#1}{#2}{glossadd}% \glsdoifexists{#2}% {% \let\@glsnumberformat\@glsxtr@defaultnumberformat \edef\@gls@counter{\csname glo@\glsdetoklabel{#2}@counter\endcsname}% \def\@glsxtr@thevalue{}% \def\@glsxtr@theHvalue{\@glsxtr@thevalue}% % \end{macrocode} %Implement any default settings (before options are set) %\changes{1.30}{2018-04-25}{added \cs{glsaddpresetkeys}} % \begin{macrocode} \glsaddpresetkeys \setkeys{glossadd}{#1}% % \end{macrocode} %Implement any default settings (after options are set) %\changes{1.30}{2018-04-25}{added \cs{glsaddpostsetkeys}} % \begin{macrocode} \glsaddpostsetkeys \ifdefempty{\@glsxtr@thevalue}% {% \@gls@saveentrycounter }% {% \let\theglsentrycounter\@glsxtr@thevalue \def\theHglsentrycounter{\@glsxtr@theHvalue}% }% % \end{macrocode} % Define sort key if necessary (in case of \pkgopt[use]{sort}): %\changes{1.24}{2017-11-14}{added \cs{@gls@setsort}} % \begin{macrocode} \@gls@setsort{#2}% % \end{macrocode} %Ensure that indexing occurs (since that's the point of %\cs{glsadd}). If indexing has been switched off by default, don't %want the setting to affect \cs{glsadd}. The ignored format %\cs{glsignore} can be used for selection without location, but the %indexing still needs to be performed. %\changes{1.37}{2018-11-30}{ensure that \cs{glsadd} performs indexing} % \begin{macrocode} \KV@glslink@noindexfalse \@@do@wrglossary{#2}% }% \endgroup }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsaddeach} %\changes{1.31}{2018-05-09}{new} %Performs \cs{glsadd} for each entry listed in the mandatory %argument. % \begin{macrocode} \newrobustcmd{\glsaddeach}[2][]{% \@for\@gls@thislabel:=#2\do{\glsadd[#1]{\@gls@thislabel}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@field@linkdefs} % Default settings for \cs{@gls@field@link} %\changes{0.3}{2015-12-02}{new} % \begin{macrocode} \newcommand*{\@glsxtr@field@linkdefs}{% \let\glsxtrifwasfirstuse\@secondoftwo \let\glsifplural\@secondoftwo \let\glscapscase\@firstofthree \let\glsinsert\@empty } % \end{macrocode} %\end{macro} % %Redefine the field link commands that need to modify the above. %Also add accessibility support and set the abbreviation styles if %required. %\begin{macro}{\glsxtrassignfieldfont} %\changes{1.04}{2016-05-02}{new} %\changes{1.08}{2016-12-13}{added check for existence} % \begin{macrocode} \newcommand*{\glsxtrassignfieldfont}[1]{% \ifglsentryexists{#1}% {% \ifglshasshort{#1}% {% \glssetabbrvfmt{\glscategory{#1}}% \glsifregular{#1}% {\let\@gls@field@font\glsxtrregularfont}% {\let\@gls@field@font\@firstofone}% }% {% \glsifnotregular{#1}% {\let\@gls@field@font\@firstofone}% {\let\@gls@field@font\glsxtrregularfont}% }% }% {% \let\@gls@field@font\@gobble }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glstext@} %\changes{0.5.2}{2015-12-08}{added accessibility support} %\changes{1.04}{2016-05-02}{set abbreviation and regular format} % The abbreviation format may also need setting. % \begin{macrocode} \def\@glstext@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link{#1}{#2}{\@gls@field@font{\glsaccesstext{#2}#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLStext@} % All uppercase version of \cs{glstext}. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{1.04}{2016-05-02}{set abbreviation and regular format} %\changes{0.5.2}{2015-12-08}{added accessibility support} % The abbreviation format may also need setting. % \begin{macrocode} \def\@GLStext@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link[\let\glscapscase\@thirdofthree]{#1}{#2}% {\@gls@field@font{\GLSaccesstext{#2}\mfirstucMakeUppercase{#3}}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glstext@} % First letter uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{1.04}{2016-05-02}{set abbreviation and regular format} %\changes{0.5.2}{2015-12-08}{added accessibility support} % The abbreviation format may also need setting. % \begin{macrocode} \def\@Glstext@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link[\let\glscapscase\@secondofthree]{#1}{#2}% {\@gls@field@font{\Glsaccesstext{#2}#3}}% } % \end{macrocode} %\end{macro} % %Version 1.07 ensures that \cs{glsfirst} etc honours the %\catattr{nohyperfirst} attribute. Allow a convenient way for the %user to revert to ignoring this attribute for these commands. %\begin{macro}{\glsxtrchecknohyperfirst} %\changes{1.07}{2016-08-15}{new} % \begin{macrocode} \newcommand*{\glsxtrchecknohyperfirst}[1]{% \glsifattribute{#1}{nohyperfirst}{true}{\KV@glslink@hyperfalse}{}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsfirst@} % No case changing version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{1.04}{2016-05-02}{set abbreviation and regular format} %\changes{0.5.2}{2015-12-08}{added accessibility support} % The abbreviation format may also need setting. % \begin{macrocode} \def\@glsfirst@#1#2[#3]{% \glsxtrassignfieldfont{#2}% % \end{macrocode} % Ensure that \cs{glsfirst} honours the \catattr{nohyperfirst} attribute. %\changes{1.07}{2016-08-15}{added check for nohyperfirst attribute} % \begin{macrocode} \@gls@field@link [\let\glsxtrifwasfirstuse\@firstoftwo \glsxtrchecknohyperfirst{#2}% ]{#1}{#2}% {\@gls@field@font{\glsaccessfirst{#2}#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glsfirst@} % First letter uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{1.04}{2016-05-02}{set abbreviation and regular format} %\changes{0.5.2}{2015-12-08}{added accessibility support} % The abbreviation format may also need setting. % \begin{macrocode} \def\@Glsfirst@#1#2[#3]{% \glsxtrassignfieldfont{#2}% % \end{macrocode} % Ensure that \cs{Glsfirst} honours the \catattr{nohyperfirst} attribute. %\changes{1.07}{2016-08-15}{added check for nohyperfirst attribute} % \begin{macrocode} \@gls@field@link [\let\glsxtrifwasfirstuse\@firstoftwo \let\glscapscase\@secondofthree \glsxtrchecknohyperfirst{#2}% ]% {#1}{#2}{\@gls@field@font{\Glsaccessfirst{#2}#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSfirst@} % All uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{1.04}{2016-05-02}{set abbreviation format} %\changes{0.5.2}{2015-12-08}{added accessibility support} % The abbreviation format may also need setting. % \begin{macrocode} \def\@GLSfirst@#1#2[#3]{% \glsxtrassignfieldfont{#2}% % \end{macrocode} % Ensure that \cs{GLSfirst} honours the \catattr{nohyperfirst} attribute. %\changes{1.07}{2016-08-15}{added check for nohyperfirst attribute} % \begin{macrocode} \@gls@field@link [\let\glsxtrifwasfirstuse\@firstoftwo \let\glscapscase\@thirdofthree \glsxtrchecknohyperfirst{#2}% ]% {#1}{#2}{\@gls@field@font{\GLSaccessfirst{#2}\mfirstucMakeUppercase{#3}}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsplural@} % No case changing version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{1.03}{2016-04-27}{fixed bug \cs{@glsplural@} should be redefined %not \cs{@glsplural}} %\changes{1.04}{2016-05-02}{set abbreviation and regular format} %\changes{0.5.2}{2015-12-08}{added accessibility support} % The abbreviation format may also need setting. % \begin{macrocode} \def\@glsplural@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link[\let\glsifplural\@firstoftwo]{#1}{#2}% {\@gls@field@font{\glsaccessplural{#2}#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glsplural@} % First letter uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{1.03}{2016-04-27}{fixed bug \cs{@Glsplural@} should be redefined %not \cs{@Glsplural}} %\changes{1.04}{2016-05-02}{set abbreviation and regular format} %\changes{0.5.2}{2015-12-08}{added accessibility support} % The abbreviation format may also need setting. % \begin{macrocode} \def\@Glsplural@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link [\let\glsifplural\@firstoftwo \let\glscapscase\@secondofthree ]% {#1}{#2}{\@gls@field@font{\Glsaccessplural{#2}#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSplural@} % All uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{1.03}{2016-04-27}{fixed bug \cs{@GLSplural@} should be redefined %not \cs{@GLSplural}} %\changes{1.04}{2016-05-02}{set abbreviation and regular format} %\changes{0.5.2}{2015-12-08}{added accessibility support} % The abbreviation format may also need setting. % \begin{macrocode} \def\@GLSplural@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link [\let\glsifplural\@firstoftwo \let\glscapscase\@thirdofthree ]% {#1}{#2}{\@gls@field@font{\GLSaccessplural{#2}\mfirstucMakeUppercase{#3}}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsfirstplural@} % No case changing version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{1.04}{2016-05-02}{set abbreviation and regular format} %\changes{0.5.2}{2015-12-08}{added accessibility support} % The abbreviation format may also need setting. % \begin{macrocode} \def\@glsfirstplural@#1#2[#3]{% \glsxtrassignfieldfont{#2}% % \end{macrocode} % Ensure that \cs{glsfirstplural} honours the \catattr{nohyperfirst} attribute. %\changes{1.07}{2016-08-15}{added check for nohyperfirst attribute} % \begin{macrocode} \@gls@field@link [\let\glsxtrifwasfirstuse\@firstoftwo \let\glsifplural\@firstoftwo \glsxtrchecknohyperfirst{#2}% ]% {#1}{#2}{\@gls@field@font{\glsaccessfirstplural{#2}#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glsfirstplural@} % First letter uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{1.03}{2016-04-27}{bug fix: misspelt cs name} %\changes{1.04}{2016-05-02}{set abbreviation and regular format} %\changes{0.5.2}{2015-12-08}{added accessibility support} % The abbreviation format may also need setting. % \begin{macrocode} \def\@Glsfirstplural@#1#2[#3]{% \glsxtrassignfieldfont{#2}% % \end{macrocode} % Ensure that \cs{glsfirstplural} honours the \catattr{nohyperfirst} attribute. %\changes{1.07}{2016-08-15}{added check for nohyperfirst attribute} % \begin{macrocode} \@gls@field@link [\let\glsxtrifwasfirstuse\@firstoftwo \let\glsifplural\@firstoftwo \let\glscapscase\@secondofthree \glsxtrchecknohyperfirst{#2}% ]% {#1}{#2}{\@gls@field@font{\Glsaccessfirstplural{#2}#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSfirstplural@} % All uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{1.03}{2016-04-27}{bug fix: misspelt cs name} %\changes{1.04}{2016-05-02}{set abbreviation and regular format} %\changes{0.5.2}{2015-12-08}{added accessibility support} % The abbreviation format may also need setting. % \begin{macrocode} \def\@GLSfirstplural@#1#2[#3]{% \glsxtrassignfieldfont{#2}% % \end{macrocode} % Ensure that \cs{glsfirstplural} honours the \catattr{nohyperfirst} attribute. %\changes{1.07}{2016-08-15}{added check for nohyperfirst attribute} % \begin{macrocode} \@gls@field@link [\let\glsxtrifwasfirstuse\@firstoftwo \let\glsifplural\@firstoftwo \let\glscapscase\@thirdofthree \glsxtrchecknohyperfirst{#2}% ]% {#1}{#2}% {\@gls@field@font{\GLSaccessfirstplural{#2}\mfirstucMakeUppercase{#3}}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsname@} % Redefine to use accessibility support. %\changes{0.5.2}{2015-12-08}{added accessibility support} %\changes{1.04}{2016-05-02}{set abbreviation and regular format} % The abbreviation format may also need setting. % \begin{macrocode} \def\@glsname@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link{#1}{#2}{\@gls@field@font{\glsaccessname{#2}#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glsname@} % First letter uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{1.04}{2016-05-02}{set abbreviation and regular format} %\changes{0.5.2}{2015-12-08}{add accessibility support} % The abbreviation format may also need setting. % \begin{macrocode} \def\@Glsname@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link [\let\glscapscase\@secondoftwo]{#1}{#2}% {\@gls@field@font{\Glsaccessname{#2}#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSname@} % All uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{1.04}{2016-05-02}{set abbreviation and regular format} %\changes{0.5.2}{2015-12-08}{added accessibility support} % The abbreviation format may also need setting. % \begin{macrocode} \def\@GLSname@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link[\let\glscapscase\@thirdoftwo]% {#1}{#2}% {\@gls@field@font{\GLSaccessname{#2}\mfirstucMakeUppercase{#3}}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsdesc@} %\changes{0.5.2}{2015-12-08}{added accessibility support} %\changes{1.04}{2016-05-02}{set abbreviation and regular format} % \begin{macrocode} \def\@glsdesc@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link{#1}{#2}{\@gls@field@font{\glsaccessdesc{#2}#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glsdesc@} % First letter uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{0.5.2}{2015-12-08}{added accessibility support} %\changes{1.04}{2016-05-02}{set abbreviation and regular format} % \begin{macrocode} \def\@Glsdesc@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link [\let\glscapscase\@secondoftwo]{#1}{#2}% {\@gls@field@font{\Glsaccessdesc{#2}#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSdesc@} % All uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{0.5.2}{2015-12-08}{added accessibility support} %\changes{1.04}{2016-05-02}{set abbreviation and regular format} % \begin{macrocode} \def\@GLSdesc@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link[\let\glscapscase\@thirdoftwo]% {#1}{#2}{\@gls@field@font{\GLSaccessdesc{#2}\mfirstucMakeUppercase{#3}}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsdescplural@} % No case-changing version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{0.5.2}{2015-12-08}{added accessibility support} %\changes{1.04}{2016-05-02}{set abbreviation and regular format} % \begin{macrocode} \def\@glsdescplural@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link [\let\glscapscase\@secondoftwo \let\glsifplural\@firstoftwo ]{#1}{#2}{\@gls@field@font{\glsaccessdescplural{#2}#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glsdescplural@} % First letter uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{0.5.2}{2015-12-08}{added accessibility support} %\changes{1.04}{2016-05-02}{set abbreviation and regular format} % \begin{macrocode} \def\@Glsdescplural@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link [\let\glscapscase\@secondoftwo \let\glsifplural\@firstoftwo ]{#1}{#2}{\@gls@field@font{\Glsaccessdescplural{#2}#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSdescplural@} % All uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{0.5.2}{2015-12-08}{added accessibility support} %\changes{1.04}{2016-05-02}{set abbreviation and regular format} % \begin{macrocode} \def\@GLSdesc@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link [\let\glscapscase\@thirdoftwo \let\glsifplural\@firstoftwo ]% {#1}{#2}% {\@gls@field@font{\GLSaccessdescplural{#2}\mfirstucMakeUppercase{#3}}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glssymbol@} %\changes{0.5.2}{2015-12-08}{added accessibility support} %\changes{1.04}{2016-05-02}{set regular format} % \begin{macrocode} \def\@glssymbol@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link{#1}{#2}{\@gls@field@font{\glsaccesssymbol{#2}#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glssymbol@} % First letter uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{0.5.2}{2015-12-08}{added accessibility support} %\changes{1.04}{2016-05-02}{set regular format} % \begin{macrocode} \def\@Glssymbol@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link [\let\glscapscase\@secondoftwo]% {#1}{#2}{\@gls@field@font{\Glsaccesssymbol{#2}#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSsymbol@} % All uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{0.5.2}{2015-12-08}{added accessibility support} %\changes{1.04}{2016-05-02}{set regular format} % \begin{macrocode} \def\@GLSsymbol@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link[\let\glscapscase\@thirdoftwo]% {#1}{#2}{\@gls@field@font{\GLSaccesssymbol{#2}\mfirstucMakeUppercase{#3}}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glssymbolplural@} % No case-changing version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{0.5.2}{2015-12-08}{added accessibility support} %\changes{1.04}{2016-05-02}{set regular format} % \begin{macrocode} \def\@glssymbolplural@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link [\let\glscapscase\@secondoftwo \let\glsifplural\@firstoftwo ]{#1}{#2}{\@gls@field@font{\glsaccesssymbolplural{#2}#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glssymbolplural@} % First letter uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{0.5.2}{2015-12-08}{added accessibility support} %\changes{1.04}{2016-05-02}{set regular format} % \begin{macrocode} \def\@Glssymbolplural@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link [\let\glscapscase\@secondoftwo \let\glsifplural\@firstoftwo ]{#1}{#2}{\@gls@field@font{\Glsaccesssymbolplural{#2}#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSsymbolplural@} % All uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{0.5.2}{2015-12-08}{added accessibility support} %\changes{1.04}{2016-05-02}{set regular format} % \begin{macrocode} \def\@GLSsymbol@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link [\let\glscapscase\@thirdoftwo \let\glsifplural\@firstoftwo ]% {#1}{#2}% {\@gls@field@font{\GLSaccesssymbolplural{#2}\mfirstucMakeUppercase{#3}}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glsuseri@} % First letter uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{1.04}{2016-05-02}{set regular format} % \begin{macrocode} \def\@Glsuseri@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link [\let\glscapscase\@secondoftwo]{#1}{#2}% {\@gls@field@font{\Glsentryuseri{#2}#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSuseri@} % All uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{1.04}{2016-05-02}{set regular format} % \begin{macrocode} \def\@GLSuseri@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link[\let\glscapscase\@thirdoftwo]% {#1}{#2}{\@gls@field@font{\mfirstucMakeUppercase{\glsentryuseri{#2}#3}}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glsuserii@} % First letter uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{1.04}{2016-05-02}{set regular format} % \begin{macrocode} \def\@Glsuserii@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link [\let\glscapscase\@secondoftwo]% {#1}{#2}{\@gls@field@font{\Glsentryuserii{#2}#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSuserii@} % All uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{1.04}{2016-05-02}{set regular format} % \begin{macrocode} \def\@GLSuserii@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link[\let\glscapscase\@thirdoftwo]% {#1}{#2}{\@gls@field@font{\mfirstucMakeUppercase{\glsentryuserii{#2}#3}}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glsuseriii@} % First letter uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{1.04}{2016-05-02}{set regular format} % \begin{macrocode} \def\@Glsuseriii@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link [\let\glscapscase\@secondoftwo]% {#1}{#2}{\@gls@field@font{\Glsentryuseriii{#2}#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSuseriii@} % All uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{1.04}{2016-05-02}{set regular format} % \begin{macrocode} \def\@GLSuseriii@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link[\let\glscapscase\@thirdoftwo]% {#1}{#2}{\@gls@field@font{\mfirstucMakeUppercase{\glsentryuseriii{#2}#3}}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glsuseriv@} % First letter uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{1.04}{2016-05-02}{set regular format} % \begin{macrocode} \def\@Glsuseriv@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link [\let\glscapscase\@secondoftwo]% {#1}{#2}{\@gls@field@font{\Glsentryuseriv{#2}#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSuseriv@} % All uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{1.04}{2016-05-02}{set regular format} % \begin{macrocode} \def\@GLSuseriv@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link[\let\glscapscase\@thirdoftwo]% {#1}{#2}% {\@gls@field@font{\mfirstucMakeUppercase{\glsentryuseriv{#2}#3}}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glsuserv@} % First letter uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{1.04}{2016-05-02}{set regular format} % \begin{macrocode} \def\@Glsuserv@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link [\let\glscapscase\@secondoftwo]% {#1}{#2}{\@gls@field@font{\Glsentryuserv{#2}#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSuserv@} % All uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{1.04}{2016-05-02}{set regular format} % \begin{macrocode} \def\@GLSuserv@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link[\let\glscapscase\@thirdoftwo]% {#1}{#2}{\@gls@field@font{\mfirstucMakeUppercase{\glsentryuserv{#2}#3}}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glsuservi@} % First letter uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{1.04}{2016-05-02}{set regular format} % \begin{macrocode} \def\@Glsuservi@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link [\let\glscapscase\@secondoftwo]% {#1}{#2}{\@gls@field@font{\Glsentryuservi{#2}#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSuservi@} % All uppercase version. %\changes{0.3}{2015-12-02}{added redefinition} %\changes{1.04}{2016-05-02}{set regular format} % \begin{macrocode} \def\@GLSuservi@#1#2[#3]{% \glsxtrassignfieldfont{#2}% \@gls@field@link[\let\glscapscase\@thirdoftwo]% {#1}{#2}{\@gls@field@font{\mfirstucMakeUppercase{\glsentryuservi{#2}#3}}}% } % \end{macrocode} %\end{macro} % %Commands like \cs{acrshort} already set \cs{glsifplural}, but they %don't set \cs{glsxtrifwasfirstuse} so they need adjusting. These %commands shouldn't be used with \cs{newabbreviation}, but the %redefinitions below allow for users reverting \cs{newacronym} back %to its base definition. % %\begin{macro}{\@@glsxtr@base@acrcmd@warn} % Warn user that they need to use to new abbreviation commands. % \begin{macrocode} \newcommand*{\@@glsxtr@base@acrcmd@warn}[2]{% \GlossariesExtraWarning{Base acronym command \string#1\space should not be used with new abbreviation definitions. Use \string#2\space instead}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@base@acrcmd} %\changes{1.42}{2020-02-03}{new} % Warn user that they need to use to new abbreviation commands. % \begin{macrocode} \let\@glsxtr@base@acrcmd\@@glsxtr@base@acrcmd@warn % \end{macrocode} %\end{macro} % %\begin{macro}{\@acrshort} %\changes{0.3}{2015-12-02}{added redefinition} % No case change. % \begin{macrocode} \def\@acrshort#1#2[#3]{% \@glsxtr@base@acrcmd\acrshort\glsxtrshort \glsdoifexists{#2}% {% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsxtrifwasfirstuse\@secondoftwo \let\glsifplural\@secondoftwo \let\glscapscase\@firstofthree \let\glsinsert\@empty \def\glscustomtext{% \acronymfont{\glsaccessshort{#2}}#3% }% \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Acrshort} %\changes{0.3}{2015-12-02}{added redefinition} % First letter uppercase. % \begin{macrocode} \def\@Acrshort#1#2[#3]{% \@glsxtr@base@acrcmd\Acrshort\Glsxtrshort \glsdoifexists{#2}% {% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsxtrifwasfirstuse\@secondoftwo \let\glsifplural\@secondoftwo \let\glscapscase\@secondofthree \let\glsinsert\@empty \def\glscustomtext{% \acronymfont{\Glsaccessshort{#2}}#3% }% \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\@ACRshort} %\changes{0.3}{2015-12-02}{added redefinition} % All uppercase. % \begin{macrocode} \def\@ACRshort#1#2[#3]{% \@glsxtr@base@acrcmd\ACRshort\GLSxtrshort \glsdoifexists{#2}% {% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsxtrifwasfirstuse\@secondoftwo \let\glsifplural\@secondoftwo \let\glscapscase\@thirdofthree \let\glsinsert\@empty \def\glscustomtext{% \mfirstucMakeUppercase{\acronymfont{\glsaccessshort{#2}}#3}% }% \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\@acrshortpl} %\changes{0.3}{2015-12-02}{added redefinition} % No case change. % \begin{macrocode} \def\@acrshortpl#1#2[#3]{% \@glsxtr@base@acrcmd\acrshortpl\glsxtrshortpl \glsdoifexists{#2}% {% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsxtrifwasfirstuse\@secondoftwo \let\glsifplural\@firstoftwo \let\glscapscase\@firstofthree \let\glsinsert\@empty \def\glscustomtext{% \acronymfont{\glsaccessshortpl{#2}}#3% }% \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Acrshortpl} %\changes{0.3}{2015-12-02}{added redefinition} % First letter uppercase. % \begin{macrocode} \def\@Acrshortpl#1#2[#3]{% \@glsxtr@base@acrcmd\Acrshortpl\Glsxtrshortpl \glsdoifexists{#2}% {% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsxtrifwasfirstuse\@secondoftwo \let\glsifplural\@firstoftwo \let\glscapscase\@secondofthree \let\glsinsert\@empty \def\glscustomtext{% \acronymfont{\Glsaccessshortpl{#2}}#3% }% \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\@ACRshortpl} %\changes{0.3}{2015-12-02}{added redefinition} % All uppercase. % \begin{macrocode} \def\@ACRshortpl#1#2[#3]{% \@glsxtr@base@acrcmd\ACRshortpl\GLSxtrshortpl \glsdoifexists{#2}% {% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsxtrifwasfirstuse\@secondoftwo \let\glsifplural\@firstoftwo \let\glscapscase\@thirdofthree \let\glsinsert\@empty \def\glscustomtext{% \mfirstucMakeUppercase{\acronymfont{\glsaccessshortpl{#2}}#3}% }% \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\@acrlong} %\changes{0.3}{2015-12-02}{added redefinition} % No case change. % \begin{macrocode} \def\@acrlong#1#2[#3]{% \@glsxtr@base@acrcmd\acrlong\glsxtrlong \glsdoifexists{#2}% {% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsxtrifwasfirstuse\@secondoftwo \let\glsifplural\@secondoftwo \let\glscapscase\@firstofthree \let\glsinsert\@empty \def\glscustomtext{% \acronymfont{\glsaccesslong{#2}}#3% }% \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Acrlong} %\changes{0.3}{2015-12-02}{added redefinition} % First letter uppercase. % \begin{macrocode} \def\@Acrlong#1#2[#3]{% \@glsxtr@base@acrcmd\Acrlong\Glsxtrlong \glsdoifexists{#2}% {% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsxtrifwasfirstuse\@secondoftwo \let\glsifplural\@secondoftwo \let\glscapscase\@secondofthree \let\glsinsert\@empty \def\glscustomtext{% \acronymfont{\Glsaccesslong{#2}}#3% }% \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\@ACRlong} %\changes{0.3}{2015-12-02}{added redefinition} % All uppercase. % \begin{macrocode} \def\@ACRlong#1#2[#3]{% \@glsxtr@base@acrcmd\ACRlong\GLSxtrlong \glsdoifexists{#2}% {% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsxtrifwasfirstuse\@secondoftwo \let\glsifplural\@secondoftwo \let\glscapscase\@thirdofthree \let\glsinsert\@empty \def\glscustomtext{% \mfirstucMakeUppercase{\acronymfont{\glsaccesslong{#2}}#3}% }% \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\@acrlongpl} %\changes{0.3}{2015-12-02}{added redefinition} % No case change. % \begin{macrocode} \def\@acrlongpl#1#2[#3]{% \@glsxtr@base@acrcmd\acrlongpl\glsxtrlongpl \glsdoifexists{#2}% {% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsxtrifwasfirstuse\@secondoftwo \let\glsifplural\@firstoftwo \let\glscapscase\@firstofthree \let\glsinsert\@empty \def\glscustomtext{% \acronymfont{\glsaccesslongpl{#2}}#3% }% \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Acrlongpl} %\changes{0.3}{2015-12-02}{added redefinition} % First letter uppercase. % \begin{macrocode} \def\@Acrlongpl#1#2[#3]{% \@glsxtr@base@acrcmd\Acrlongpl\Glsxtrlongpl \glsdoifexists{#2}% {% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsxtrifwasfirstuse\@secondoftwo \let\glsifplural\@firstoftwo \let\glscapscase\@secondofthree \let\glsinsert\@empty \def\glscustomtext{% \acronymfont{\Glsaccesslongpl{#2}}#3% }% \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\@ACRlongpl} %\changes{0.3}{2015-12-02}{added redefinition} % All uppercase. % \begin{macrocode} \def\@ACRlongpl#1#2[#3]{% \@glsxtr@base@acrcmd\ACRlongpl\GLSxtrlongpl \glsdoifexists{#2}% {% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsxtrifwasfirstuse\@secondoftwo \let\glsifplural\@firstoftwo \let\glscapscase\@thirdofthree \let\glsinsert\@empty \def\glscustomtext{% \mfirstucMakeUppercase{\acronymfont{\glsaccesslongpl{#2}}#3}% }% \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %The full formats use the internal long and short commands (such as %\cs{@acrshort} and \cs{@acrlong}). Therefore they don't need %adjustments, but they do need clearer warnings. This means three %warnings per use (once for the full command and once each for the %short and long commands), but at least this way the most important %warning (replace \cs{acrfull} with \cs{glsxtrfull} etc) is present. % %\begin{macro}{\@acrfull} %\changes{1.42}{2020-02-03}{added redefinition} % \begin{macrocode} \def\@acrfull#1#2[#3]{% \@glsxtr@base@acrcmd\acrfull\glsxtrfull \acrfullfmt{#1}{#2}{#3}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Acrfull} %\changes{1.42}{2020-02-03}{added redefinition} % \begin{macrocode} \def\@Acrfull#1#2[#3]{% \@glsxtr@base@acrcmd\Acrfull\Glsxtrfull \Acrfullfmt{#1}{#2}{#3}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@ACRfull} %\changes{1.42}{2020-02-03}{added redefinition} % \begin{macrocode} \def\@ACRfull#1#2[#3]{% \@glsxtr@base@acrcmd\ACRfull\GLSxtrfull \ACRfullfmt{#1}{#2}{#3}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@acrfullpl} %\changes{1.42}{2020-02-03}{added redefinition} % \begin{macrocode} \def\@acrfullpl#1#2[#3]{% \@glsxtr@base@acrcmd\acrfullpl\glsxtrfullpl \acrfullplfmt{#1}{#2}{#3}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Acrfullpl} %\changes{1.42}{2020-02-03}{added redefinition} % \begin{macrocode} \def\@Acrfullpl#1#2[#3]{% \@glsxtr@base@acrcmd\Acrfullpl\Glsxtrfullpl \Acrfullplfmt{#1}{#2}{#3}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@ACRfullpl} %\changes{1.42}{2020-02-03}{added redefinition} % \begin{macrocode} \def\@ACRfullpl#1#2[#3]{% \@glsxtr@base@acrcmd\ACRfullpl\GLSxtrfullpl \ACRfullplfmt{#1}{#2}{#3}% } % \end{macrocode} %\end{macro} % %Modify \cs{@glsaddkey} so additional keys provided by the user can %be treated in a similar way. %\begin{macro}{\@glsaddkey} % \begin{macrocode} \renewcommand*{\@glsaddkey}[7]{% \key@ifundefined{glossentry}{#1}% {% \define@key{glossentry}{#1}{\csdef{@glo@#1}{##1}}% \appto\@gls@keymap{,{#1}{#1}}% \appto\@newglossaryentryprehook{\csdef{@glo@#1}{#2}}% \appto\@newglossaryentryposthook{% \letcs{\@glo@tmp}{@glo@#1}% \gls@assign@field{#2}{\@glo@label}{#1}{\@glo@tmp}% }% \newcommand*{#3}[1]{\@gls@entry@field{##1}{#1}}% \newcommand*{#4}[1]{\@Gls@entry@field{##1}{#1}}% % \end{macrocode} % Now for the commands with links. First the version with no case % change (same as before): % \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}% {}% }% {% \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 % (modified): % \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}% {}% }% {% \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[\let\glscapscase\@secondofthree]% {##1}{##2}{#4{##2}##3}% }% \newrobustcmd*{#6}{% \expandafter\@gls@hyp@opt\csname @Gls@user@#1\endcsname}% }% % \end{macrocode} % Finally the all caps version (modified): % \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}% {}% }% {% \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[\let\glscapscase\@thirdofthree]% {##1}{##2}{\mfirstucMakeUppercase{#3{##2}##3}}% }% \newrobustcmd*{#7}{% \expandafter\@gls@hyp@opt\csname @GLS@user@#1\endcsname}% }% }% {% \PackageError{glossaries-extra}{Key `#1' already exists}{}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@gls@link@nocheckfirsthyper} % Old versions of \styfmt{glossaries} don't define % this, so provide it just in case it hasn't been defined. % \begin{macrocode} \providecommand*{\@gls@link@nocheckfirsthyper}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\@gls@link@checkfirsthyper} % Modify check to determine if the hyperlink should be automatically % suppressed, but save the original in case the acronyms are restored. % \begin{macrocode} \let\@glsxtr@org@checkfirsthyper\@gls@link@checkfirsthyper \renewcommand*{\@gls@link@checkfirsthyper}{% % \end{macrocode} % \cs{ifglsused} isn't useful in the post link hook as it's already % been unset by then, so define a command that can be used in the % post link hook. Since \cs{@gls@link@checkfirsthyper} is only used % by commands like \cs{gls} but not by other commands, this seems % the best place to put it to automatically set the value for the % commands that change the first use flag. The other commands should % set \cs{glsxtrifwasfirstuse} to \cs{@secondoftwo} (which is done % in \cs{@glsxtr@field@linkdefs}). Note that if the entry is % undefined (as with \app{bib2gls} on the first \LaTeX\ run), % \cs{ifglsused} does neither true nor false parts. However, in that % case, this macro won't be called anyway (since it's used in the % argument of \cs{glsdoifexistsordo}). % \begin{macrocode} \ifglsused{\glslabel}% {\let\glsxtrifwasfirstuse\@secondoftwo} {\let\glsxtrifwasfirstuse\@firstoftwo}% % \end{macrocode} % Store the category label for convenience. % \begin{macrocode} \edef\glscategorylabel{\glscategory{\glslabel}}% \ifglsused{\glslabel}% {% \glsifcategoryattribute{\glscategorylabel}{nohypernext}{true}% {\KV@glslink@hyperfalse}{}% }% {% \glsifcategoryattribute{\glscategorylabel}{nohyperfirst}{true}% {\KV@glslink@hyperfalse}{}% }% \glslinkcheckfirsthyperhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\do@glsdisablehyperinlist} % This command was introduced in \styfmt{glossaries} v4.19. If it % hasn't been defined, we're using an earlier version, in which case % the \catattr{nohyper} attribute can't be implemented. % \begin{macrocode} \ifdef\do@glsdisablehyperinlist {% \let\@glsxtr@do@glsdisablehyperinlist\do@glsdisablehyperinlist \renewcommand*{\do@glsdisablehyperinlist}{% \@glsxtr@do@glsdisablehyperinlist \glsifattribute{\glslabel}{nohyper}{true}{\KV@glslink@hyperfalse}{}% } } {} % \end{macrocode} %\end{macro} % % Define a \gloskey[glslink]{noindex} key to prevent writing information to the % external file. % \begin{macrocode} \define@boolkey{glslink}{noindex}[true]{} \KV@glslink@noindexfalse % \end{macrocode} % %If \cs{@gls@setdefault@glslink@opts} has been defined %(\styfmt{glossaries} v4.20) use it to set the default keys in %\cs{@glslink}. %\begin{macro}{\@gls@setdefault@glslink@opts} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \ifdef\@gls@setdefault@glslink@opts { \renewcommand*{\@gls@setdefault@glslink@opts}{% \KV@glslink@noindexfalse \@glsxtrsetaliasnoindex } } { % \end{macrocode} % Not defined so prepend it to \cs{do@glsdisablehyperinlist} to % achieve the same effect. % \begin{macrocode} \newcommand*{\@gls@setdefault@glslink@opts}{% \KV@glslink@noindexfalse \@glsxtrsetaliasnoindex } \preto\do@glsdisablehyperinlist{\@gls@setdefault@glslink@opts} } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrsetaliasnoindex} %\changes{1.12}{2017-02-03}{new} %\changes{1.13}{2017-02-07}{switched to \cs{providecommand}} %Allow user to hook into the alias noindex setting. %Default behaviour switches off indexing for aliases. %If the record option is on, this will have been defined to do %nothing. (bib2gls will deal with records for aliased entries.) % \begin{macrocode} \providecommand*{\glsxtrsetaliasnoindex}{% \KV@glslink@noindextrue } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtrsetaliasnoindex} %\changes{1.12}{2017-02-03}{new} %\changes{1.21}{2017-11-03}{changed to use \cs{glsxtrifhasfield} instead of %\cs{ifglshasfield}} % \begin{macrocode} \newcommand*{\@glsxtrsetaliasnoindex}{% \glsxtrifhasfield{alias}{\glslabel}% {% \let\glsxtrindexaliased\@glsxtrindexaliased \glsxtrsetaliasnoindex \let\glsxtrindexaliased\@no@glsxtrindexaliased }% {}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtrindexaliased} %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newcommand{\@glsxtrindexaliased}{% \ifKV@glslink@noindex \else \begingroup \let\@glsnumberformat\@glsxtr@defaultnumberformat \edef\@gls@counter{\csname glo@\glsdetoklabel{\glslabel}@counter\endcsname}% \glsxtr@saveentrycounter \@@do@wrglossary{\glsxtralias{\glslabel}}% \endgroup \fi } % \end{macrocode} %\end{macro} % %\begin{macro}{\@no@glsxtrindexaliased} %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newcommand{\@no@glsxtrindexaliased}{% \PackageError{glossaries-extra}{\string\glsxtrindexaliased\space not permitted outside definition of \string\glsxtrsetaliasnoindex}% {}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrindexaliased} %\changes{1.12}{2017-02-03}{new} %Provide a command to redirect alias indexing, but only allow it to %be used within \cs{glsxtrsetaliasnoindex}. % \begin{macrocode} \let\glsxtrindexaliased\@no@glsxtrindexaliased % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrSetDefaultGlsOpts} %\changes{0.5.4}{2015-12-15}{new} % Set the default options for \cs{glslink} etc. % \begin{macrocode} \newcommand*{\GlsXtrSetDefaultGlsOpts}[1]{% \renewcommand*{\@gls@setdefault@glslink@opts}{% \setkeys{glslink}{#1}% \@glsxtrsetaliasnoindex }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrifindexing} % Provide user level command to access it in \cs{glswriteentry}. % \begin{macrocode} \newcommand*{\glsxtrifindexing}[2]{% \ifKV@glslink@noindex #2\else #1\fi } % \end{macrocode} %\end{macro} % %\begin{macro}{\glswriteentry} % Redefine to test for \catattr{indexonlyfirst} category attribute. %\changes{1.44}{2020-03-23}{replaced \cs{ifglsused} with \cs{GlsXtrIfUnusedOrUndefined}} %This needs to use \cs{GlsXtrIfUnusedOrUndefined} instead of %\cs{ifglsused} to allow it to work with \app{bib2gls}. % \begin{macrocode} \renewcommand*{\glswriteentry}[2]{% \glsxtrifindexing {% \ifglsindexonlyfirst \GlsXtrIfUnusedOrUndefined{#1} {#2}% {\glsxtrdoautoindexname{#1}{dualindex}}% \else \glsifattribute{#1}{indexonlyfirst}{true}% {% \GlsXtrIfUnusedOrUndefined{#1}% {#2}% {\glsxtrdoautoindexname{#1}{dualindex}}% }% {#2}% \fi }% {}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@@do@@wrglossary} % Hook into glossary indexing command so that it can also use % \ics{index} at the same time if required and add user hook. % \begin{macrocode} \appto\@@do@@wrglossary{\@glsxtr@do@@wrindex \glsxtrdowrglossaryhook{\@gls@label}% } % \end{macrocode} % (The label can be obtained from \cs{@gls@label} at this point.) %\end{macro} % Similarly for the \qt{noidx} version: %\begin{macro}{\gls@noidxglossary} % \begin{macrocode} \appto\gls@noidxglossary{\@glsxtr@do@@wrindex \glsxtrdowrglossaryhook{\@gls@label}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@do@@wrindex} % \begin{macrocode} \newcommand*{\@glsxtr@do@@wrindex}{% \glsxtrdoautoindexname{\@gls@label}{dualindex}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrdowrglossaryhook} % Allow user to hook into indexing code. (Always used by % \cs{glsadd}. Used by \cs{gls} when indexing, which may or may not occur % depending on the indexing settings.) %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\glsxtrdowrglossaryhook}[1]{} % \end{macrocode} %\end{macro} % %\begin{macro}{\@gls@alt@hyp@opt} %\changes{0.5.4}{2015-12-15}{new} % Commands like \cs{gls} have a star or plus version. Provide a % third symbol that the user can adapt for convenience. % \begin{macrocode} \newcommand*{\@gls@alt@hyp@opt}[1]{% \let\glslinkvar\@firstofthree \let\@gls@hyp@opt@cs#1\relax \@ifstar{\s@gls@hyp@opt}% {\@ifnextchar+% {\@firstoftwo{\p@gls@hyp@opt}}% {% \expandafter\@ifnextchar\@gls@alt@hyp@opt@char {\@firstoftwo{\@alt@gls@hyp@opt}}% {#1}% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@alt@gls@hyp@opt} % User version %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\@alt@gls@hyp@opt}[1][]{% \let\glslinkvar\@firstofthree \expandafter\@gls@hyp@opt@cs\expandafter[\@gls@alt@hyp@opt@keys,#1]} % \end{macrocode} %\end{macro} % %\begin{macro}{\@gls@alt@hyp@opt@char} %\changes{0.5.4}{2015-12-15}{new} %Contains the character used as the command modifier. % \begin{macrocode} \newcommand*{\@gls@alt@hyp@opt@char}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\@gls@alt@hyp@opt@keys} %\changes{0.5.4}{2015-12-15}{new} %Contains the option list used as the command modifier. % \begin{macrocode} \newcommand*{\@gls@alt@hyp@opt@keys}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrSetAltModifier} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\GlsXtrSetAltModifier}[2]{% \let\@gls@hyp@opt\@gls@alt@hyp@opt % \end{macrocode} %\changes{1.42}{2020-02-03}{added check} %Check that the supplied character isn't "+" or "*" % \begin{macrocode} \ifstrequal{#1}{+}% {\PackageError{glossaries-extra}% {Can't use '#1' as modifier (it's already in use)}{}}% {% \ifstrequal{#1}{*}% {\PackageError{glossaries-extra}% {Can't use '#1' as modifier (it's already in use)}{}}% {}% }% \def\@gls@alt@hyp@opt@char{#1}% \def\@gls@alt@hyp@opt@keys{#2}% \ifdefequal\@glsxtr@record@setting\@glsxtr@record@setting@off {}% {% % \end{macrocode} %Let \gls{bib2gls} know the modifier. %\changes{1.37}{2018-11-30}{write modifier to aux} % \begin{macrocode} \protected@write\@auxout{}{\string\providecommand{\string\@glsxtr@altmodifier}[1]{}}% \protected@write\@auxout{}{\string\@glsxtr@altmodifier{#1}}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@org@dohyperlink} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \let\glsxtr@org@dohyperlink\glsdohyperlink % \end{macrocode} %\end{macro} % %\begin{macro}{\glsnavhyperlink} %\changes{1.21}{2017-11-03}{patched} %Since \ics{glsnavhyperlink} uses \cs{@glslink}, it's necessary to %patch it uses \cs{glsdohyperlink} instead of \cs{glsxtrdohyperlink}. %The simplest way to achieve this is to locally let %\cs{glsxtrdohyperlink} to \cs{glsdohyperlink}. % %This command is provided by \sty{glossary-hypernav} so it may not %exist. % \begin{macrocode} \ifdef\glsnavhyperlink { \renewcommand*{\glsnavhyperlink}[3][\@glo@type]{% \edef\gls@grplabel{#2}\protected@edef\@gls@grptitle{#3}% % \end{macrocode} %Scope: % \begin{macrocode} {% \let\glsxtrdohyperlink\glsxtr@org@dohyperlink \@glslink{\glsnavhyperlinkname{#1}{#2}}{#3}% }% }% } {} % \end{macrocode} %\end{macro} % % %The redefinition of \cs{glsdohyperlink} has been causing problems %so introduce a new command instead. % %\begin{macro}{\glsxtrdohyperlink} % Unpleasant complications can occur if the \gloskey{text} or % \gloskey{first} key etc contains \cs{gls}, particularly if there % are hyperlinks. To get around this problem, patch % \cs{glsdohyperlink} so that it temporarily makes \ics{gls} behave % like \ics{glstext}\oarg{hyper=false,noindex}. (This will be % overridden if the user explicitly cancels either of those options % in the optional argument of \cs{gls} or using the plus version.) % This also patches the short form commands like \cs{acrshort} % and \cs{glsxtrshort} to use \cs{glsentryshort} and, similarly, the % long form commands like \cs{acrlong} and \cs{glsxtrlong} to use % \cs{glsentrylong}. Added attribute check. %\changes{0.5.4}{2015-12-15}{added} %\changes{1.42}{2020-02-03}{new (was former redefinition of %\cs{glsdohyperlink})} % \begin{macrocode} \newcommand*{\glsxtrdohyperlink}[2]{% \glshasattribute{\glslabel}{targeturl}% {% \glshasattribute{\glslabel}{targetname}% {% \glshasattribute{\glslabel}{targetcategory}% {% \hyperref{\glsgetattribute{\glslabel}{targeturl}}% {\glsgetattribute{\glslabel}{targetcategory}}% {\glsgetattribute{\glslabel}{targetname}}% {{\glsxtrprotectlinks#2}}% }% {% \hyperref{\glsgetattribute{\glslabel}{targeturl}}% {}% {\glsgetattribute{\glslabel}{targetname}}% {{\glsxtrprotectlinks#2}}% }% }% {% \href{\glsgetattribute{\glslabel}{targeturl}}% {{\glsxtrprotectlinks#2}}% }% }% {% % \end{macrocode} %Check for alias. %\changes{1.12}{2017-02-03}{added check for alias field} % \begin{macrocode} \glsfieldfetch{\glslabel}{alias}{\gloaliaslabel}% \ifdefvoid\gloaliaslabel {% \glsxtrhyperlink{#1}{{\glsxtrprotectlinks#2}}% }% {% % \end{macrocode} %Redirect link to the alias target. % \begin{macrocode} \glsxtrhyperlink {\glolinkprefix\glsdetoklabel{\gloaliaslabel}}% {{\glsxtrprotectlinks#2}}% }% }% } % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrhyperlink} %\changes{1.19}{2017-09-09}{new} %Allows integration with the base \styfmt{glossaries} package's %\pkgopt[showtargets]{debug} option. % \begin{macrocode} \ifdef\@glsshowtarget { \newcommand{\glsxtrhyperlink}[2]{% \@glsshowtarget{#1}% \hyperlink{#1}{#2}% }% } { \newcommand{\glsxtrhyperlink}[2]{\hyperlink{#1}{#2}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsdisablehyper} %\changes{1.14}{2017-04-18}{added redefinition} % Redefine to set \cs{glslabel} (to allow it to be picked up by % \cs{glsdohyperlink}). Also made it robust and added grouping to localise the % definition of \cs{glslabel}. The original internal command % {@glo@label} could probably be simply replaced with \cs{glslabel}, % but it's retained in case its removal causes unexpected problems. %\changes{1.21}{2017-11-03}{added check for existence} % \begin{macrocode} \renewrobustcmd*{\glshyperlink}[2][\glsentrytext{\@glo@label}]{% \glsdoifexists{#2}% {% \def\@glo@label{#2}% {\edef\glslabel{#2}% \@glslink{\glolinkprefix\glslabel}{#1}}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsdisablehyper} %\changes{0.5.4}{2015-12-15}{added} %\changes{1.21}{2017-11-03}{changed to use \cs{def} rather than \cs{let}} % Redefine in case we have an old version of \styfmt{glossaries}. %This now uses \cs{def} rather than \cs{let} to allow for %redefinitions of \cs{glsdonohyperlink}. % \begin{macrocode} \renewcommand{\glsdisablehyper}{% \KV@glslink@hyperfalse \def\@glslink{\glsdonohyperlink}% \let\@glstarget\@secondoftwo } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsenablehyper} %\changes{1.21}{2017-11-03}{changed to use \cs{def} rather than \cs{let}} %This now uses \cs{def} rather than \cs{let} to allow for %redefinitions of \cs{glsdohypertarget} and \cs{glsdohyperlink}. %\changes{1.42}{2020-02-03}{switched from \cs{glsdohyperlink} to %\cs{glsxtrdohyperlink}} % \begin{macrocode} \renewcommand{\glsenablehyper}{% \KV@glslink@hypertrue \def\@glslink{\glsxtrdohyperlink}% \def\@glstarget{\glsdohypertarget}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsdonohyperlink} % This command was only introduced in \styfmt{glossaries} v4.20, so it may % not be defined (therefore use \cs{def}). For older \styfmt{glossaries} versions, this won't be % used if \sty{hyperref} hasn't been loaded, which means the % indexing will still take place. The generated text is scoped % (the link text in \cs{hyperlink} is also scoped, so it's % consistent). %\changes{0.5.4}{2015-12-15}{added} % \begin{macrocode} \def\glsdonohyperlink#1#2{{\glsxtrprotectlinks #2}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glslink} % Reset \cs{@glslink} with patched versions: %\changes{1.21}{2017-11-03}{changed \cs{let} to \cs{def}} %\changes{1.42}{2020-02-03}{switched from \cs{glsdohyperlink} to %\cs{glsxtrdohyperlink}} % \begin{macrocode} \ifcsundef{hyperlink}% {% \def\@glslink{\glsdonohyperlink} }% {% \def\@glslink{\glsxtrdohyperlink} } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrprotectlinks} %\changes{0.5.4}{2015-12-15}{new} % Make \cs{gls} (and variants) behave like the corresponding % \cs{glstext} (and variants) with hyperlinking and indexing off. % \begin{macrocode} \newcommand*{\glsxtrprotectlinks}{% \KV@glslink@hyperfalse \KV@glslink@noindextrue \let\@gls@\@glsxtr@p@text@ \let\@Gls@\@Glsxtr@p@text@ \let\@GLS@\@GLSxtr@p@text@ \let\@glspl@\@glsxtr@p@plural@ \let\@Glspl@\@Glsxtr@p@plural@ \let\@GLSpl@\@GLSxtr@p@plural@ \let\@glsxtrshort\@glsxtr@p@short@ \let\@Glsxtrshort\@Glsxtr@p@short@ \let\@GLSxtrshort\@GLSxtr@p@short@ \let\@glsxtrlong\@glsxtr@p@long@ \let\@Glsxtrlong\@Glsxtr@p@long@ \let\@GLSxtrlong\@GLSxtr@p@long@ \let\@glsxtrshortpl\@glsxtr@p@shortpl@ \let\@Glsxtrshortpl\@Glsxtr@p@shortpl@ \let\@GLSxtrshortpl\@GLSxtr@p@shortpl@ \let\@glsxtrlongpl\@glsxtr@p@longpl@ \let\@Glsxtrlongpl\@Glsxtr@p@longpl@ \let\@GLSxtrlongpl\@GLSxtr@p@longpl@ \let\@acrshort\@glsxtr@p@acrshort@ \let\@Acrshort\@Glsxtr@p@acrshort@ \let\@ACRshort\@GLSxtr@p@acrshort@ \let\@acrshortpl\@glsxtr@p@acrshortpl@ \let\@Acrshortpl\@Glsxtr@p@acrshortpl@ \let\@ACRshortpl\@GLSxtr@p@acrshortpl@ \let\@acrlong\@glsxtr@p@acrlong@ \let\@Acrlong\@Glsxtr@p@acrlong@ \let\@ACRlong\@GLSxtr@p@acrlong@ \let\@acrlongpl\@glsxtr@p@acrlongpl@ \let\@Acrlongpl\@Glsxtr@p@acrlongpl@ \let\@ACRlongpl\@GLSxtr@p@acrlongpl@ } % \end{macrocode} %\end{macro} % % These protected versions need grouping to prevent the label from % getting confused. %\begin{macro}{\@glsxtr@p@text@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@glsxtr@p@text@#1#2[#3]{{\@glstext@{#1}{#2}[#3]}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glsxtr@p@text@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@Glsxtr@p@text@#1#2[#3]{{\@Glstext@{#1}{#2}[#3]}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSxtr@p@text@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@GLSxtr@p@text@#1#2[#3]{{\@GLStext@{#1}{#2}[#3]}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@p@plural@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@glsxtr@p@plural@#1#2[#3]{{\@glsplural@{#1}{#2}[#3]}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glsxtr@p@plural@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@Glsxtr@p@plural@#1#2[#3]{{\@Glsplural@{#1}{#2}[#3]}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSxtr@p@plural@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@GLSxtr@p@plural@#1#2[#3]{{\@GLSplural@{#1}{#2}[#3]}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@p@short@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@glsxtr@p@short@#1#2[#3]{% {% \glssetabbrvfmt{\glscategory{#2}}% \glsabbrvfont{\glsentryshort{#2}}#3% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glsxtr@p@short@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@Glsxtr@p@short@#1#2[#3]{% {% \glssetabbrvfmt{\glscategory{#2}}% \glsabbrvfont{\Glsentryshort{#2}}#3% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSxtr@p@short@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@GLSxtr@p@short@#1#2[#3]{% {% \glssetabbrvfmt{\glscategory{#2}}% \mfirstucMakeUppercase{\glsabbrvfont{\glsentryshort{#2}}#3}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@p@shortpl@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@glsxtr@p@shortpl@#1#2[#3]{% {% \glssetabbrvfmt{\glscategory{#2}}% \glsabbrvfont{\glsentryshortpl{#2}}#3% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glsxtr@p@shortpl@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@Glsxtr@p@shortpl@#1#2[#3]{% {% \glssetabbrvfmt{\glscategory{#2}}% \glsabbrvfont{\Glsentryshortpl{#2}}#3% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSxtr@p@shortpl@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@GLSxtr@p@shortpl@#1#2[#3]{% {% \glssetabbrvfmt{\glscategory{#2}}% \mfirstucMakeUppercase{\glsabbrvfont{\glsentryshortpl{#2}}#3}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@p@long@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@glsxtr@p@long@#1#2[#3]{{\glsentrylong{#2}#3}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glsxtr@p@long@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@Glsxtr@p@long@#1#2[#3]{{\Glsentrylong{#2}#3}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSxtr@p@long@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@GLSxtr@p@long@#1#2[#3]{% {\mfirstucMakeUppercase{\glslongfont{\glsentrylong{#2}}#3}}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@p@longpl@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@glsxtr@p@longpl@#1#2[#3]{{\glsentrylongpl{#2}#3}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glsxtr@p@longpl@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@Glsxtr@p@longpl@#1#2[#3]{{\glslongfont{\Glsentrylongpl{#2}}#3}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSxtr@p@longpl@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@GLSxtr@p@longpl@#1#2[#3]{% {\mfirstucMakeUppercase{\glslongfont{\glsentrylongpl{#2}}#3}}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@p@acrshort@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@glsxtr@p@acrshort@#1#2[#3]{{\acronymfont{\glsentryshort{#2}}#3}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glsxtr@p@acrshort@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@Glsxtr@p@acrshort@#1#2[#3]{{\acronymfont{\Glsentryshort{#2}}#3}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSxtr@p@acrshort@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@GLSxtr@p@acrshort@#1#2[#3]{% {\mfirstucMakeUppercase{\acronymfont{\glsentryshort{#2}}#3}}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@p@acrshortpl@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@glsxtr@p@acrshortpl@#1#2[#3]{{\acronymfont{\glsentryshortpl{#2}}#3}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glsxtr@p@acrshortpl@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@Glsxtr@p@acrshortpl@#1#2[#3]{{\acronymfont{\Glsentryshortpl{#2}}#3}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSxtr@p@acrshortpl@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@GLSxtr@p@acrshortpl@#1#2[#3]{% {\mfirstucMakeUppercase{\acronymfont{\glsentryshortpl{#2}}#3}}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@p@acrlong@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@glsxtr@p@acrlong@#1#2[#3]{{\glsentrylong{#2}#3}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glsxtr@p@acrlong@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@Glsxtr@p@acrlong@#1#2[#3]{{\Glsentrylong{#2}#3}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSxtr@p@acrlong@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@GLSxtr@p@acrlong@#1#2[#3]{% {\mfirstucMakeUppercase{\glsentrylong{#2}#3}}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@p@acrlongpl@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@glsxtr@p@acrlongpl@#1#2[#3]{{\glsentrylongpl{#2}#3}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glsxtr@p@acrlongpl@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@Glsxtr@p@acrlongpl@#1#2[#3]{{\Glsentrylongpl{#2}#3}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSxtr@p@acrlongpl@} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \def\@GLSxtr@p@acrlongpl@#1#2[#3]{% {\mfirstucMakeUppercase{\glsentrylongpl{#2}#3}}} % \end{macrocode} %\end{macro} % %Commands to minimise conflict. %\begin{macro}{\@glsxtrp@opt} %\changes{1.07}{2016-08-15}{new} % \begin{macrocode} \newcommand*{\@glsxtrp@opt}{hyper=false,noindex} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrsetpopts} %\changes{1.07}{2016-08-15}{new} %Used in glossary to switch hyperlinks on for the \cs{glsxtrp} type %of commands. % \begin{macrocode} \newcommand*{\glsxtrsetpopts}[1]{% \renewcommand*{\@glsxtrp@opt}{#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glossxtrsetpopts} %\changes{1.07}{2016-08-15}{new} %Used in glossary to switch hyperlinks on for the \cs{glsxtrp} type %of commands. % \begin{macrocode} \newcommand*{\glossxtrsetpopts}{% \glsxtrsetpopts{noindex}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@@glsxtrp} %\changes{1.07}{2016-08-15}{new} % \begin{macrocode} \newrobustcmd*{\@@glsxtrp}[2]{% % \end{macrocode} %Add scope. % \begin{macrocode} {% \let\glspostlinkhook\relax \csname#1\expandafter\endcsname\expandafter[\@glsxtrp@opt]{#2}[]% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtrp} %\changes{1.07}{2016-08-15}{new} % \begin{macrocode} \newrobustcmd*{\@glsxtrp}[2]{% \ifcsdef{gls#1}% {% \@@glsxtrp{gls#1}{#2}% }% {% \ifcsdef{glsxtr#1}% {% \@@glsxtrp{glsxtr#1}{#2}% }% {% \PackageError{glossaries-extra}{`#1' not recognised by \string\glsxtrp}{}% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@Glsxtrp} %\changes{1.07}{2016-08-15}{new} % \begin{macrocode} \newrobustcmd*{\@Glsxtrp}[2]{% \ifcsdef{Gls#1}% {% \@@glsxtrp{Gls#1}{#2}% }% {% \ifcsdef{Glsxtr#1}% {% \@@glsxtrp{Glsxtr#1}{#2}% }% {% \PackageError{glossaries-extra}{`#1' not recognised by \string\Glsxtrp}{}% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GLSxtrp} %\changes{1.07}{2016-08-15}{new} % \begin{macrocode} \newrobustcmd*{\@GLSxtrp}[2]{% \ifcsdef{GLS#1}% {% \@@glsxtrp{GLS#1}{#2}% }% {% \ifcsdef{GLSxtr#1}% {% \@@glsxtrp{GLSxtr#1}{#2}% }% {% \PackageError{glossaries-extra}{`#1' not recognised by \string\GLSxtrp}{}% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@entry@p} %\changes{1.07}{2016-08-15}{new} % \begin{macrocode} \newrobustcmd*{\glsxtr@headentry@p}[2]{% \glsifattribute{#1}{headuc}{true}% {% \mfirstucMakeUppercase{\@gls@entry@field{#1}{#2}}% }% {% \@gls@entry@field{#1}{#2}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrp} %\changes{1.07}{2016-08-15}{new} %Not robust as it needs to expand somewhat. % \begin{macrocode} \ifdef\texorpdfstring { \newcommand{\glsxtrp}[2]{% \protect\NoCaseChange {% \protect\texorpdfstring {% \protect\glsxtrifinmark {% \ifcsdef{glsxtrhead#1}% {% {\protect\csuse{glsxtrhead#1}{#2}}% }% {% \glsxtr@headentry@p{#2}{#1}% }% }% {% \@glsxtrp{#1}{#2}% }% }% {% \protect\@gls@entry@field{#2}{#1}% }% }% } } { \newcommand{\glsxtrp}[2]{% \protect\NoCaseChange {% \protect\glsxtrifinmark {% \ifcsdef{glsxtrhead#1}% {% {\protect\csuse{glsxtrhead#1}}% }% {% \glsxtr@headentry@p{#2}{#1}% }% }% {% \@glsxtrp{#1}{#2}% }% }% } } % \end{macrocode} %\end{macro} % %Provide short synonyms for the most common option. %\begin{macro}{\glsps} %\changes{1.07}{2016-08-15}{new} % \begin{macrocode} \newcommand*{\glsps}{\glsxtrp{short}} % \end{macrocode} %\end{macro} %\begin{macro}{\glspt} %\changes{1.07}{2016-08-15}{new} % \begin{macrocode} \newcommand*{\glspt}{\glsxtrp{text}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrp} %\changes{1.07}{2016-08-15}{new} %As above but use first letter upper case (but not for the %bookmarks, which can't process \cs{uppercase}). % \begin{macrocode} \ifdef\texorpdfstring { \newcommand{\Glsxtrp}[2]{% \protect\NoCaseChange {% \protect\texorpdfstring {% \protect\glsxtrifinmark {% \ifcsdef{Glsxtrhead#1}% {% {\protect\csuse{Glsxtrhead#1}{#2}}% }% {% \protect\@Gls@entry@field{#2}{#1}% }% }% {% \@Glsxtrp{#1}{#2}% }% }% {% \protect\@gls@entry@field{#2}{#1}% }% }% } } { \newcommand{\Glsxtrp}[2]{% \protect\NoCaseChange {% \protect\glsxtrifinmark {% \ifcsdef{Glsxtrhead#1}% {% {\protect\csuse{Glsxtrhead#1}}% }% {% \protect\@Gls@entry@field{#2}{#1}% }% }% {% \@Glsxtrp{#1}{#2}% }% }% } } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSxtrp} %\changes{1.07}{2016-08-15}{new} %As above but all upper case (but not for the %bookmarks, which can't process \cs{uppercase}). % \begin{macrocode} \ifdef\texorpdfstring { \newcommand{\GLSxtrp}[2]{% \protect\NoCaseChange {% \protect\texorpdfstring {% \protect\glsxtrifinmark {% \ifcsdef{GLSxtr#1}% {% {\protect\GLSxtrshort[noindex,hyper=false]{#1}[]}% }% {% \protect\mfirstucMakeUppercase {% \protect\@gls@entry@field{#2}{#1}% }% }% }% {% \@GLSxtrp{#1}{#2}% }% }% {% \protect\@gls@entry@field{#2}{#1}% }% }% } } { \newcommand{\GLSxtrp}[2]{% \protect\NoCaseChange {% \protect\glsxtrifinmark {% \ifcsdef{GLSxtr#1}% {% {\protect\GLSxtrshort[noindex,hyper=false]{#1}[]}% }% {% \protect\mfirstucMakeUppercase {% \protect\@gls@entry@field{#2}{#1}% }% }% }% {% \@GLSxtrp{#1}{#2}% }% }% } } % \end{macrocode} %\end{macro} % % %\subsection{Entry Counting} % % The (use) entry counting mechanism from \styfmt{glossaries} is adjusted % here to work with category attributes. Provide a convenient % command to enable entry counting, set the \catattr{entrycount} % attribute for given categories and redefine \ics{gls} etc to % use \cs{cgls} instead. This form of entry counting is provided to % adjust the formatting if the number of times an entry has been % used (through commands that unset the first use flag) doesn't % exceeding the specified threshold. For link counting, see % \sectionref{sec:linkcount}. % % First adjust definitions of the unset and reset commands to % provide a hook, but changing the flag can cause problems in % certain situations, so to allow the normal unsetting to be % temporarily disabled, \cs{@glsunset} is let to % \cs{@glsxtr@unset}, which performs the actual unsetting through % \cs{@@glsunset} and then does the hook. This means that the % unsetting (and the hook) can switched off by redefining \cs{@glsunset} % and then switched back on again by changing the definition back to % \cs{@glsxtr@unset}. % %\begin{macro}{\@glsxtr@unset} %\changes{1.30}{2018-04-25}{new} % Global unset. % \begin{macrocode} \newcommand*{\@glsxtr@unset}[1]{% \@@glsunset{#1}% \glsxtrpostunset{#1}% }% % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsunset} % Global unset. % \begin{macrocode} \let\@glsunset\@glsxtr@unset % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrpostunset} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\glsxtrpostunset}[1]{} % \end{macrocode} %\end{macro} % %Provide a command to store a list of labels that will need %unsetting. %\begin{macro}{\GlsXtrStartUnsetBuffering} %\changes{1.30}{2018-04-25}{new} % \begin{macrocode} \newcommand*{\GlsXtrStartUnsetBuffering}{% \@ifstar\s@GlsXtrStartUnsetBuffering\@GlsXtrStartUnsetBuffering } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GlsXtrStartUnsetBuffering} %\changes{1.31}{2018-05-09}{new} %Unstarred version doesn't check for duplicates. % \begin{macrocode} \newcommand*{\@GlsXtrStartUnsetBuffering}{% \let\@glsxtr@org@unset@buffer\@glsxtr@unset@buffer \def\@glsxtr@unset@buffer{}% \let\@glsunset\@glsxtrbuffer@unset } % \end{macrocode} %\end{macro} % %\begin{macro}{\s@GlsXtrStartUnsetBuffering} %\changes{1.31}{2018-05-09}{new} %Starred version checks for duplicates. % \begin{macrocode} \newcommand*{\s@GlsXtrStartUnsetBuffering}{% \let\@glsxtr@org@unset@buffer\@glsxtr@unset@buffer \def\@glsxtr@unset@buffer{}% \let\@glsunset\@glsxtrbuffer@nodup@unset } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtrbuffer@unset} %\changes{1.30}{2018-04-25}{new} %This must use a global change since \cs{gls} may have to be placed %inside \cs{mbox} (for example, with \sty{soul} commands). % \begin{macrocode} \newcommand*{\@glsxtrbuffer@unset}[1]{% \listxadd\@glsxtr@unset@buffer{#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtrbuffer@nodup@unset} %\changes{1.31}{2018-05-09}{new} %Alternative version that avoids duplicates. %One level of expansion is performed on the argument in case it's a %control sequence containing the label. (Not using \cs{xifinlist} as %the added complexity might cause problems that the buffering is %trying to overcome.) % \begin{macrocode} \newcommand*{\@glsxtrbuffer@nodup@unset}[1]{% \expandafter\ifinlist\expandafter{#1}{\@glsxtr@unset@buffer}{}% {\listxadd\@glsxtr@unset@buffer{#1}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrStopUnsetBuffering} %\changes{1.30}{2018-04-25}{new} % \begin{macrocode} \newcommand*{\GlsXtrStopUnsetBuffering}{% \@ifstar\s@GlsXtrStopUnsetBuffering\@GlsXtrStopUnsetBuffering } % \end{macrocode} %\end{macro} % %\begin{macro}{\@GlsXtrStopUnsetBuffering} %\changes{1.30}{2018-04-25}{new} %Unstarred form (global unset). % \begin{macrocode} \newcommand*{\@GlsXtrStopUnsetBuffering}{% \let\@glsunset\@glsxtr@unset \forlistloop\@glsunset\@glsxtr@unset@buffer \let\@glsxtr@unset@buffer\@glsxtr@org@unset@buffer } % \end{macrocode} %\end{macro} % %\begin{macro}{\s@GlsXtrStopUnsetBuffering} %\changes{1.30}{2018-04-25}{new} %Starred form (local unset). % \begin{macrocode} \newcommand*{\s@GlsXtrStopUnsetBuffering}{% \forlistloop\@glslocalunset\@glsxtr@unset@buffer \let\@glsunset\@glsxtr@unset } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrDiscardUnsetBuffering} %\changes{1.42}{2020-02-03}{new} %Discards pending buffer and restores \cs{glsunset}. % \begin{macrocode} \newcommand*{\GlsXtrDiscardUnsetBuffering}{% \let\@glsunset\@glsxtr@unset \let\@glsxtr@unset@buffer\@glsxtr@org@unset@buffer } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrForUnsetBufferedList} %\changes{1.31}{2018-05-09}{new} %Iterate over labels stored in the current buffer. %The argument is the handler macro. % \begin{macrocode} \newcommand*{\GlsXtrForUnsetBufferedList}[1]{% \forlistloop#1\@glsxtr@unset@buffer } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glslocalunset} % Local unset. % \begin{macrocode} \renewcommand*{\@glslocalunset}[1]{% \@@glslocalunset{#1}% \glsxtrpostlocalunset{#1}% }% % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrpostlocalunset} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\glsxtrpostlocalunset}[1]{} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsreset} % Global reset. % \begin{macrocode} \renewcommand*{\@glsreset}[1]{% \@@glsreset{#1}% \glsxtrpostreset{#1}% }% % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrpostreset} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\glsxtrpostreset}[1]{} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glslocalreset} % Local reset. % \begin{macrocode} \renewcommand*{\@glslocalreset}[1]{% \@@glslocalreset{#1}% \glsxtrpostlocalreset{#1}% }% % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrpostlocalreset} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\glsxtrpostlocalreset}[1]{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glslocalreseteach} %\changes{1.31}{2018-05-09}{new} %Locally reset a list of entries. % \begin{macrocode} \newcommand*{\glslocalreseteach}[1]{% \gls@ifnotmeasuring {% \@for\@gls@thislabel:=#1\do{% \glsdoifexists{\@gls@thislabel}% {% \@glslocalreset{\@gls@thislabel}% }% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslocalunseteach} %Locally unset a list of entries. %\changes{1.31}{2018-05-09}{new} % \begin{macrocode} \newcommand*{\glslocalunseteach}[1]{% \gls@ifnotmeasuring {% \@for\@gls@thislabel:=#1\do{% \glsdoifexists{\@gls@thislabel}% {% \@glslocalunset{\@gls@thislabel}% }% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrEnableEntryCounting} % The first argument is the list of categories and the second % argument is the value of the \catattr{entrycount} attribute. %\changes{0.5}{2015-12-07}{new} % \begin{macrocode} \newcommand*{\GlsXtrEnableEntryCounting}[2]{% % \end{macrocode} % Enable entry counting: % \begin{macrocode} \glsenableentrycount % \end{macrocode} % Redefine \cs{gls} etc: % \begin{macrocode} \renewcommand*{\gls}{\cgls}% \renewcommand*{\Gls}{\cGls}% \renewcommand*{\glspl}{\cglspl}% \renewcommand*{\Glspl}{\cGlspl}% \renewcommand*{\GLS}{\cGLS}% \renewcommand*{\GLSpl}{\cGLSpl}% % \end{macrocode} % Set the \catattr{entrycount} attribute: % \begin{macrocode} \@glsxtr@setentrycountunsetattr{#1}{#2}% % \end{macrocode} % In case this command is used again: % \begin{macrocode} \let\GlsXtrEnableEntryCounting\@glsxtr@setentrycountunsetattr \renewcommand*{\GlsXtrEnableEntryUnitCounting}[3]{% \PackageError{glossaries-extra}{\string\GlsXtrEnableEntryUnitCounting\space can't be used with \string\GlsXtrEnableEntryCounting}% {Use one or other but not both commands}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@setentrycountunsetattr} %\changes{0.5}{2015-12-07}{new} % \begin{macrocode} \newcommand*{\@glsxtr@setentrycountunsetattr}[2]{% \@for\@glsxtr@cat:=#1\do {% \ifdefempty{\@glsxtr@cat}{}% {% \glssetcategoryattribute{\@glsxtr@cat}{entrycount}{#2}% }% }% } % \end{macrocode} %\end{macro} % % Redefine the entry counting commands to take into account the %\catattr{entrycount} attribute. %\begin{macro}{\glsenableentrycount} %\changes{0.5}{2015-12-07}{new} % \begin{macrocode} \renewcommand*{\glsenableentrycount}{% % \end{macrocode} % Enable new fields: % \begin{macrocode} \appto\@newglossaryentry@defcounters{\@@newglossaryentry@defcounters}% % \end{macrocode} % Just in case the user has switched on the \pkgopt{docdef} option. % \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} % New commands to access new fields: % \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} % Adjust post unset and reset: % \begin{macrocode} \let\@glsxtr@entrycount@org@unset\glsxtrpostunset \renewcommand*{\glsxtrpostunset}[1]{% \@glsxtr@entrycount@org@unset{##1}% \@gls@increment@currcount{##1}% }% \let\@glsxtr@entrycount@org@localunset\glsxtrpostlocalunset \renewcommand*{\glsxtrpostlocalunset}[1]{% \@glsxtr@entrycount@org@localunset{##1}% \@gls@local@increment@currcount{##1}% }% \let\@glsxtr@entrycount@org@reset\glsxtrpostreset \renewcommand*{\glsxtrpostreset}[1]{% \@glsxtr@entrycount@org@reset{##1}% \csgdef{glo@\glsdetoklabel{##1}@currcount}{0}% }% \let\@glsxtr@entrycount@org@localreset\glsxtrpostlocalreset \renewcommand*{\glsxtrpostlocalreset}[1]{% \@glsxtr@entrycount@org@localreset{##1}% \csdef{glo@\glsdetoklabel{##1}@currcount}{0}% }% % \end{macrocode} % Modifications to take into account the attributes that govern % whether the entry should be unset. % \begin{macrocode} \let\@cgls@\@@cgls@ \let\@cglspl@\@@cglspl@ % \end{macrocode} %\changes{1.14}{2017-04-18}{fixed assignment of \cs{@cGls@}} % \begin{macrocode} \let\@cGls@\@@cGls@ \let\@cGlspl@\@@cGlspl@ \let\@cGLS@\@@cGLS@ \let\@cGLSpl@\@@cGLSpl@ % \end{macrocode} % The rest is as the original definition. % \begin{macrocode} \AtEndDocument{\@gls@write@entrycounts}% \renewcommand*{\@gls@entry@count}[2]{% \csgdef{glo@\glsdetoklabel{##1}@prevcount}{##2}% }% \let\glsenableentrycount\relax \renewcommand*{\glsenableentryunitcount}{% \PackageError{glossaries-extra}{\string\glsenableentryunitcount\space can't be used with \string\glsenableentrycount}% {Use one or other but not both commands}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@gls@write@entrycounts} % Modify this command so that it only writes the information for % entries with the \catattr{entrycount} attribute and issue % warning if no entries have this attribute set. % \begin{macrocode} \renewcommand*{\@gls@write@entrycounts}{% \immediate\write\@auxout {\string\providecommand*{\string\@gls@entry@count}[2]{}}% \count@=0\relax \forallglsentries{\@glsentry}{% \glshasattribute{\@glsentry}{entrycount}% {% \ifglsused{\@glsentry}% {% \immediate\write\@auxout {\string\@gls@entry@count{\@glsentry}{\glsentrycurrcount{\@glsentry}}}% }% {}% \advance\count@ by \@ne }% {}% }% \ifnum\count@=0 \GlossariesExtraWarningNoLine{Entry counting has been enabled \MessageBreak with \string\glsenableentrycount\space but the \MessageBreak attribute `entrycount' hasn't \MessageBreak been assigned to any of the defined \MessageBreak entries}% \fi } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrifcounttrigger} %\begin{definition} %\cs{glsxtrifcounttrigger}\marg{label}\marg{trigger format}\marg{normal} %\end{definition} %\changes{0.5}{2015-12-07}{new} % \begin{macrocode} \newcommand*{\glsxtrifcounttrigger}[3]{% \glshasattribute{#1}{entrycount}% {% \ifnum\glsentryprevcount{#1}>\glsgetattribute{#1}{entrycount}\relax #3% \else #2% \fi }% {#3}% } % \end{macrocode} %\end{macro} % % Actual internal definitions of \cs{cgls} used when entry counting % is enabled. % %\begin{macro}{\@@cgls@} % \begin{macrocode} \def\@@cgls@#1#2[#3]{% \glsxtrifcounttrigger{#2}% {% \cglsformat{#2}{#3}% \glsunset{#2}% }% {% \@gls@{#1}{#2}[#3]% }% }% % \end{macrocode} %\end{macro} % %\begin{macro}{\@@cglspl@} % \begin{macrocode} \def\@@cglspl@#1#2[#3]{% \glsxtrifcounttrigger{#2}% {% \cglsplformat{#2}{#3}% \glsunset{#2}% }% {% \@glspl@{#1}{#2}[#3]% }% }% % \end{macrocode} %\end{macro} % %\begin{macro}{\@@cGls@} % \begin{macrocode} \def\@@cGls@#1#2[#3]{% \glsxtrifcounttrigger{#2}% {% \cGlsformat{#2}{#3}% \glsunset{#2}% }% {% \@Gls@{#1}{#2}[#3]% }% }% % \end{macrocode} %\end{macro} % %\begin{macro}{\@@cGlspl@} % \begin{macrocode} \def\@@cGlspl@#1#2[#3]{% \glsxtrifcounttrigger{#2}% {% \cGlsplformat{#2}{#3}% \glsunset{#2}% }% {% \@Glspl@{#1}{#2}[#3]% }% }% % \end{macrocode} %\end{macro} % %\begin{macro}{\@@cGLS@} % \begin{macrocode} \def\@@cGLS@#1#2[#3]{% \glsxtrifcounttrigger{#2}% {% \cGLSformat{#2}{#3}% \glsunset{#2}% }% {% \@GLS@{#1}{#2}[#3]% }% }% % \end{macrocode} %\end{macro} % %\begin{macro}{\@@cGLSpl@} % \begin{macrocode} \def\@@cGLSpl@#1#2[#3]{% \glsxtrifcounttrigger{#2}% {% \cGLSplformat{#2}{#3}% \glsunset{#2}% }% {% \@GLSpl@{#1}{#2}[#3]% }% }% % \end{macrocode} %\end{macro} % % Remove default warnings from \cs{cgls} etc so that it can be used % interchangeable with \cs{gls} etc. %\begin{macro}{\@cgls@} % \begin{macrocode} \def\@cgls@#1#2[#3]{\@gls@{#1}{#2}[#3]} % \end{macrocode} %\end{macro} % %\begin{macro}{\@cGls@} % \begin{macrocode} \def\@cGls@#1#2[#3]{\@Gls@{#1}{#2}[#3]} % \end{macrocode} %\end{macro} % %\begin{macro}{\@cglspl@} % \begin{macrocode} \def\@cglspl@#1#2[#3]{\@glspl@{#1}{#2}[#3]} % \end{macrocode} %\end{macro} % %\begin{macro}{\@cGlspl@} % \begin{macrocode} \def\@cGlspl@#1#2[#3]{\@Glspl@{#1}{#2}[#3]} % \end{macrocode} %\end{macro} % % Add all upper case versions not provided by \styfmt{glossaries}. %\begin{macro}{\cGLS} %\changes{0.5}{2015-12-07}{new} % \begin{macrocode} \newrobustcmd*{\cGLS}{\@gls@hyp@opt\@cGLS} % \end{macrocode} %\end{macro} %\begin{macro}{\@cGLS} %\changes{0.5}{2015-12-07}{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{0.5}{2015-12-07}{new} % \begin{macrocode} \def\@cGLS@#1#2[#3]{\@GLS@{#1}{#2}[#3]} % \end{macrocode} %\end{macro} % %\begin{macro}{\cGLSformat} %\changes{0.5}{2015-12-07}{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]{% \expandafter\mfirstucMakeUppercase\expandafter{\cglsformat{#1}{#2}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\cGLSpl} %\changes{0.5}{2015-12-07}{new} % \begin{macrocode} \newrobustcmd*{\cGLSpl}{\@gls@hyp@opt\@cGLSpl} % \end{macrocode} %\end{macro} %\begin{macro}{\@cGLSpl} %\changes{0.5}{2015-12-07}{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{0.5}{2015-12-07}{new} % \begin{macrocode} \def\@cGLSpl@#1#2[#3]{\@GLSpl@{#1}{#2}[#3]} % \end{macrocode} %\end{macro} % %\begin{macro}{\cGLSplformat} %\changes{0.5}{2015-12-07}{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]{% \expandafter\mfirstucMakeUppercase\expandafter{\cglsplformat{#1}{#2}}% } % \end{macrocode} %\end{macro} % % Modify the trigger formats to check for the \catattr{regular} attribute. %\begin{macro}{\cglsformat} %\changes{0.5.4}{2015-12-15}{added} % \begin{macrocode} \renewcommand*{\cglsformat}[2]{% \glsifregular{#1} {\glsentryfirst{#1}}% {\ifglshaslong{#1}{\glsentrylong{#1}}{\glsentryfirst{#1}}}#2% } % \end{macrocode} %\end{macro} % %\begin{macro}{\cGlsformat} %\changes{0.5.4}{2015-12-15}{added} % \begin{macrocode} \renewcommand*{\cGlsformat}[2]{% \glsifregular{#1} {\Glsentryfirst{#1}}% {\ifglshaslong{#1}{\Glsentrylong{#1}}{\Glsentryfirst{#1}}}#2% } % \end{macrocode} %\end{macro} % %\begin{macro}{\cglsplformat} %\changes{0.5.4}{2015-12-15}{added} % \begin{macrocode} \renewcommand*{\cglsplformat}[2]{% \glsifregular{#1} {\glsentryfirstplural{#1}}% {\ifglshaslong{#1}{\glsentrylongpl{#1}}{\glsentryfirstplural{#1}}}#2% } % \end{macrocode} %\end{macro} % %\begin{macro}{\cGlsplformat} %\changes{0.5.4}{2015-12-15}{added} % \begin{macrocode} \renewcommand*{\cGlsplformat}[2]{% \glsifregular{#1} {\Glsentryfirstplural{#1}}% {\ifglshaslong{#1}{\Glsentrylongpl{#1}}{\Glsentryfirstplural{#1}}}#2% } % \end{macrocode} %\end{macro} % %New code similar to above for unit counting. % %\begin{macro}{\@@newglossaryentry@defunitcounters} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\@@newglossaryentry@defunitcounters}{% \edef\@glo@countunit{\csuse{@glsxtr@categoryattr@@\@glo@category @unitcount}}% \ifdefvoid\@glo@countunit {}% {% \@glsxtr@ifunitcounter{\@glo@countunit}% {}% {\expandafter\@glsxtr@addunitcounter\expandafter{\@glo@countunit}}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@unitcountlist} %\changes{0.5.4}{2015-12-15}{new} % List to keep track of which counters are being used by the entry % unit count facility. % \begin{macrocode} \newcommand*{\@glsxtr@unitcountlist}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@addunitcounter} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\@glsxtr@addunitcounter}[1]{% \listadd{\@glsxtr@unitcountlist}{#1}% \ifcsundef{glsxtr@theunit@#1} {% \ifcsdef{theH#1}% {\csdef{glsxtr@theunit@#1}{\csuse{theH#1}}}% {\csdef{glsxtr@theunit@#1}{\csuse{the#1}}}% }% {}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@ifunitcounter} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\@glsxtr@ifunitcounter}[3]{% \xifinlist{#1}{\@glsxtr@unitcountlist}{#2}{#3}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@currentunitcount} % \begin{macrocode} \newcommand*\@glsxtr@currentunitcount[1]{% glo@\glsdetoklabel{#1}@currunit@\glsgetattribute{#1}{unitcount}.% \csuse{glsxtr@theunit@\glsgetattribute{#1}{unitcount}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@previousunitcount} % \begin{macrocode} \newcommand*\@glsxtr@previousunitcount[1]{% glo@\glsdetoklabel{#1}@prevunit@\glsgetattribute{#1}{unitcount}.% \csuse{glsxtr@theunit@\glsgetattribute{#1}{unitcount}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@gls@increment@currunitcount} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\@gls@increment@currunitcount}[1]{% \glshasattribute{#1}{unitcount}% {% \edef\@glsxtr@csname{\@glsxtr@currentunitcount{#1}}% \ifcsundef{\@glsxtr@csname}% {% \csgdef{\@glsxtr@csname}{1}% \listcsxadd {glo@\glsdetoklabel{#1}@unitlist}% {\glsgetattribute{#1}{unitcount}.% \csuse{glsxtr@theunit@\glsgetattribute{#1}{unitcount}}% }% }% {% \csxdef{\@glsxtr@csname}% {\number\numexpr\csname\@glsxtr@csname\endcsname+1}% }% }% {}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@gls@local@increment@currunitcount} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\@gls@local@increment@currunitcount}[1]{% \glshasattribute{#1}{unitcount}% {% \edef\@glsxtr@csname{\@glsxtr@currentunitcount{#1}}% \ifcsundef{\@glsxtr@csname}% {% \csdef{\@glsxtr@csname}{1}% \listcseadd {glo@\glsdetoklabel{#1}@unitlist}% {\glsgetattribute{#1}{unitcount}.% \csuse{glsxtr@theunit@\glsgetattribute{#1}{unitcount}}% }% }% {% \csedef{\@glsxtr@csname}% {\number\numexpr\csname\@glsxtr@csname\endcsname+1}% }% }% {}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@currunitcount} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\@glsxtr@currunitcount}[2]{% \ifcsundef {glo@\glsdetoklabel{#1}@currunit@#2}% {0}% {\csuse{glo@\glsdetoklabel{#1}@currunit@#2}}% }% % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@prevunitcount} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\@glsxtr@prevunitcount}[2]{% \ifcsundef {glo@\glsdetoklabel{#1}@prevunit@#2}% {0}% {\csuse{glo@\glsdetoklabel{#1}@prevunit@#2}}% }% % \end{macrocode} %\end{macro} % %\begin{macro}{\glsenableentryunitcount} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\glsenableentryunitcount}{% % \end{macrocode} % Enable new fields: % \begin{macrocode} \appto\@newglossaryentry@defcounters{\@@newglossaryentry@defunitcounters}% % \end{macrocode} % Just in case the user has switched on the \pkgopt{docdef} option. % \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\glsenableentryunitcount\space you must place all entry definitions in the preamble not in the document environment}% }% }% % \end{macrocode} % New commands to access new fields: % \begin{macrocode} \newcommand*{\glsentrycurrcount}[1]{% \@glsxtr@currunitcount{##1}{\glsgetattribute{##1}{unitcount}.% \csuse{glsxtr@theunit@\glsgetattribute{##1}{unitcount}}}% }% \newcommand*{\glsentryprevcount}[1]{% \@glsxtr@prevunitcount{##1}{\glsgetattribute{##1}{unitcount}.% \csuse{glsxtr@theunit@\glsgetattribute{##1}{unitcount}}}% }% % \end{macrocode} % Access total count: % \begin{macrocode} \newcommand*{\glsentryprevtotalcount}[1]{% \ifcsundef{glo@\glsdetoklabel{##1}@prevunittotal}% {0}% {% \number\csuse{glo@\glsdetoklabel{##1}@prevunittotal} }% }% % \end{macrocode} % Access max value: % \begin{macrocode} \newcommand*{\glsentryprevmaxcount}[1]{% \ifcsundef{glo@\glsdetoklabel{##1}@prevunitmax}% {0}% {% \number\csuse{glo@\glsdetoklabel{##1}@prevunitmax} }% }% % \end{macrocode} % Adjust post unset and reset: % \begin{macrocode} \let\@glsxtr@entryunitcount@org@unset\glsxtrpostunset \renewcommand*{\glsxtrpostunset}[1]{% \@glsxtr@entryunitcount@org@unset{##1}% \@gls@increment@currunitcount{##1}% }% \let\@glsxtr@entryunitcount@org@localunset\glsxtrpostlocalunset \renewcommand*{\glsxtrpostlocalunset}[1]{% \@glsxtr@entryunitcount@org@localunset{##1}% \@gls@local@increment@currunitcount{##1}% }% \let\@glsxtr@entryunitcount@org@reset\glsxtrpostreset \renewcommand*{\glsxtrpostreset}[1]{% \glshasattribute{##1}{unitcount}% {% \edef\@glsxtr@csname{\@glsxtr@currentunitcount{##1}}% \ifcsundef{\@glsxtr@csname}% {}% {\csgdef{\@glsxtr@csname}{0}}% }% {}% }% \let\@glsxtr@entryunitcount@org@localreset\glsxtrpostlocalreset \renewcommand*{\glsxtrpostlocalreset}[1]{% \@glsxtr@entryunitcount@org@localreset{##1}% \glshasattribute{##1}{unitcount}% {% \edef\@glsxtr@csname{\@glsxtr@currentunitcount{##1}}% \ifcsundef{\@glsxtr@csname}% {}% {\csdef{\@glsxtr@csname}{0}}% }% {}% }% % \end{macrocode} % Modifications to take into account the attributes that govern % whether the entry should be unset. % \begin{macrocode} \let\@cgls@\@@cgls@ \let\@cglspl@\@@cglspl@ % \end{macrocode} %\changes{1.14}{2017-04-18}{fixed assignment of \cs{@cGls@}} % \begin{macrocode} \let\@cGls@\@@cGls@ \let\@cGlspl@\@@cGlspl@ \let\@cGLS@\@@cGLS@ \let\@cGLSpl@\@@cGLSpl@ % \end{macrocode} % Write information to the aux file. % \begin{macrocode} \AtEndDocument{\@gls@write@entryunitcounts}% \renewcommand*{\@gls@entry@unitcount}[3]{% \csgdef{glo@\glsdetoklabel{##1}@prevunit@##3}{##2}% \ifcsundef{glo@\glsdetoklabel{##1}@prevunittotal}% {\csgdef{glo@\glsdetoklabel{##1}@prevunittotal}{##2}}% {% \csxdef{glo@\glsdetoklabel{##1}@prevunittotal}{ \number\numexpr\csuse{glo@\glsdetoklabel{##1}@prevunittotal}+##2}% }% \ifcsundef{glo@\glsdetoklabel{##1}@prevunitmax}% {\csgdef{glo@\glsdetoklabel{##1}@prevunitmax}{##2}}% {% \ifnum\csuse{glo@\glsdetoklabel{##1}@prevunitmax}<##2 \csgdef{glo@\glsdetoklabel{##1}@prevunitmax}{##2}% \fi }% }% \let\glsenableentryunitcount\relax \renewcommand*{\glsenableentrycount}{% \PackageError{glossaries-extra}{\string\glsenableentrycount\space can't be used with \string\glsenableentryunitcount}% {Use one or other but not both commands}% }% } \@onlypreamble\glsenableentryunitcount % \end{macrocode} %\end{macro} % %\begin{macro}{\@gls@entry@unitcount} % \begin{macrocode} \newcommand*{\@gls@entry@unitcount}[3]{} % \end{macrocode} %\end{macro} % %\begin{macro}{\@gls@write@entryunitcounts@do} % \begin{macrocode} \newcommand*{\@gls@write@entryunitcounts@do}[1]{% \immediate\write\@auxout {\string\@gls@entry@unitcount {\@glsentry}% {\@glsxtr@currunitcount{\@glsentry}{#1}% }% {#1}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@gls@write@entryunitcounts} % \begin{macrocode} \newcommand*{\@gls@write@entryunitcounts}{% \immediate\write\@auxout {\string\providecommand*{\string\@gls@entry@unitcount}[3]{}}% \count@=0\relax \forallglsentries{\@glsentry}{% \glshasattribute{\@glsentry}{unitcount}% {% \ifglsused{\@glsentry}% {% \forlistcsloop {\@gls@write@entryunitcounts@do}% {glo@\glsdetoklabel{\@glsentry}@unitlist}% }% {}% \advance\count@ by \@ne }% {}% }% \ifnum\count@=0 \GlossariesExtraWarningNoLine{Entry counting has been enabled \MessageBreak with \string\glsenableentryunitcount\space but the \MessageBreak attribute `unitcount' hasn't \MessageBreak been assigned to any of the defined \MessageBreak entries}% \fi } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrEnableEntryUnitCounting} % The first argument is the list of categories, the second % argument is the value of the \catattr{entrycount} attribute % and the third is the counter name. %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\GlsXtrEnableEntryUnitCounting}[3]{% % \end{macrocode} % Enable entry counting: % \begin{macrocode} \glsenableentryunitcount % \end{macrocode} % Redefine \cs{gls} etc: % \begin{macrocode} \renewcommand*{\gls}{\cgls}% \renewcommand*{\Gls}{\cGls}% \renewcommand*{\glspl}{\cglspl}% \renewcommand*{\Glspl}{\cGlspl}% \renewcommand*{\GLS}{\cGLS}% \renewcommand*{\GLSpl}{\cGLSpl}% % \end{macrocode} % Set the \catattr{entrycount} attribute: % \begin{macrocode} \@glsxtr@setentryunitcountunsetattr{#1}{#2}{#3}% % \end{macrocode} % In case this command is used again: % \begin{macrocode} \let\GlsXtrEnableEntryUnitCounting\@glsxtr@setentryunitcountunsetattr \renewcommand*{\GlsXtrEnableEntryCounting}[2]{% \PackageError{glossaries-extra}{\string\GlsXtrEnableEntryCounting\space can't be used with \string\GlsXtrEnableEntryUnitCounting}% {Use one or other but not both commands}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@setentryunitcountunsetattr} %\changes{0.5.4}{2015-12-15}{new} % \begin{macrocode} \newcommand*{\@glsxtr@setentryunitcountunsetattr}[3]{% \@for\@glsxtr@cat:=#1\do {% \ifdefempty{\@glsxtr@cat}{}% {% \glssetcategoryattribute{\@glsxtr@cat}{entrycount}{#2}% \glssetcategoryattribute{\@glsxtr@cat}{unitcount}{#3}% }% }% } % \end{macrocode} %\end{macro} % % %\subsection{Acronym Modifications} % It's more consistent to use the abbreviation code for acronyms, % but make some adjustments to allow for continued use of the % \styfmt{glossaries} package's custom acronym format. (For example, % user may already have defined some acronym styles with % \cs{newacronymstyle} which they would like to continue to use.) % The original \styfmt{glossaries} acronym code can be restored % with \cs{RestoreAcronyms}, but adjust \cs{SetGenericNewAcronym} % so that \cs{newacronym} adds the category. % %\begin{macro}{\SetGenericNewAcronym} % \begin{macrocode} \renewcommand*{\SetGenericNewAcronym}{% % \end{macrocode} % Make sure \cs{RestoreAcronyms} has been used. % \begin{macrocode} \ifdefequal\@addtoacronymlists\@glsxtr@org@addtoacronynlists {}% {% \GlossariesWarning{\string\SetGenericNewAcronym\space used without restoring base acronym functions with \string\RestoreAcronyms}% }% \let\@Gls@entryname\@Gls@acrentryname % \end{macrocode} %Redefine \cs{newacronym}: % \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},% category=acronym, \GenericAcronymFields,% \the\glskeylisttok }% }% \@do@newglossaryentry }% \renewcommand*{\acrfullfmt}[3]{% \glslink[##1]{##2}{\genacrfullformat{##2}{##3}}}% \renewcommand*{\Acrfullfmt}[3]{% \glslink[##1]{##2}{\Genacrfullformat{##2}{##3}}}% \renewcommand*{\ACRfullfmt}[3]{% \glslink[##1]{##2}{% \mfirstucMakeUppercase{\genacrfullformat{##2}{##3}}}}% \renewcommand*{\acrfullplfmt}[3]{% \glslink[##1]{##2}{\genplacrfullformat{##2}{##3}}}% \renewcommand*{\Acrfullplfmt}[3]{% \glslink[##1]{##2}{\Genplacrfullformat{##2}{##3}}}% \renewcommand*{\ACRfullplfmt}[3]{% \glslink[##1]{##2}{% \mfirstucMakeUppercase{\genplacrfullformat{##2}{##3}}}}% \renewcommand*{\glsentryfull}[1]{\genacrfullformat{##1}{}}% \renewcommand*{\Glsentryfull}[1]{\Genacrfullformat{##1}{}}% \renewcommand*{\glsentryfullpl}[1]{\genplacrfullformat{##1}{}}% \renewcommand*{\Glsentryfullpl}[1]{\Genplacrfullformat{##1}{}}% } % \end{macrocode} %\end{macro} % % This will cause a problem for glossaries that contain a mixture of % acronyms and abbreviations, so redefine \cs{newacronym} to use the % new abbreviation interface. % % First save the original definitions: % \begin{macrocode} \let\@glsxtr@org@setacronymstyle\setacronymstyle \let\@glsxtr@org@newacronymstyle\newacronymstyle % \end{macrocode} % %Save the list of acronyms in case they are required. %\begin{macro}{\@glsxtr@acronymlists} %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \let\@glsxtr@acronymlists\@glsacronymlists % \end{macrocode} %\end{macro} %\begin{macro}{\@glsxtr@org@addtoacronynlists} %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \let\@glsxtr@org@addtoacronynlists\@addtoacronymlists % \end{macrocode} %\end{macro} %\begin{macro}{\@glsxtr@org@setacronymlists} %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \let\@glsxtr@org@setacronymlists\SetAcronymLists % \end{macrocode} %\end{macro} % %Need to provide a replacement for \ics{forallacronyms} since %\cs{@glsacronymlists} isn't available. % %\begin{macro}{\@glsxtr@abbrlists} %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \newcommand{\@glsxtr@abbrlists}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\forallabbreviationlists} %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \newcommand*{\forallabbreviationlists}[2]{% \@for#1:=\@glsxtr@abbrlists\do{\ifdefempty{#1}{}{#2}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@addabbreviationlist} %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \newcommand*{\@glsxtr@addabbreviationlist}[1]{% \edef\@glo@type{#1}% \ifdefempty\@glsxtr@abbrlists {\let\@glsxtr@abbrlists\@glo@type}% {% \ifdefequal\@glsxtr@abbrlists\@glo@type {}% {% \expandafter\DTLifinlist\expandafter{\@glo@type}{\@glsxtr@abbrlists}{}% {\eappto\@glsxtr@abbrlists{,\@glo@type}}% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\forallacronyms} %\changes{1.42}{2020-02-03}{new} %Modify to add warning. % \begin{macrocode} \renewcommand*{\forallacronyms}[2]{% \@glsxtr@base@acrcmd\forallacronyms\forallabbreviationlists \@for#1:=\@glsacronymlists\do{\ifx#1\@empty\else#2\fi}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\MakeAcronymsAbbreviations} % Make acronyms use the same interface as abbreviations. % Note that \cs{newacronymstyle} has a different implementation to % \cs{newabbrevationstyle} so disable \cs{newacronymstyle} and % \cs{setacronymstyle}. %\changes{0.4}{2015-12-03}{set the default type to \cs{acronymtype}} %\changes{0.5.4}{2015-12-15}{now disables \cs{setacronymstyle}} % \begin{macrocode} \newcommand*{\MakeAcronymsAbbreviations}{% % \end{macrocode} %Undo acronym display style: % \begin{macrocode} \@for\@gls@type:=\@glsacronymlists\do{% \csgdef{gls@\@gls@type @entryfmt}{\glsentryfmt}% }% % \end{macrocode} % Save and clear acronym list. % \begin{macrocode} \let\@glsxtr@acronymlists\@glsacronymlists \let\@glsacronymlists\@empty \let\@addtoacronymlists\@gobble \let\SetAcronymLists\@gobble % \end{macrocode} % Warn if \cs{acrshort} etc are used. % \begin{macrocode} \let\@glsxtr@base@acrcmd\@@glsxtr@base@acrcmd@warn % \end{macrocode} % Redefine \cs{newacronym} to use same interface as % \cs{newabbreviation}. % \begin{macrocode} \renewcommand*{\newacronym}[4][]{% \glsxtr@newabbreviation{type=\acronymtype,category=acronym,##1}{##2}{##3}{##4}% }% \renewcommand*{\firstacronymfont}[1]{\glsfirstabbrvfont{##1}}% \renewcommand*{\acronymfont}[1]{\glsabbrvfont{##1}}% \renewcommand*{\setacronymstyle}[1]{% \PackageError{glossaries-extra}{\string\setacronymstyle{##1} unavailable. Use \string\setabbreviationstyle[acronym]\space instead. The original acronym interface can be restored with \string\RestoreAcronyms}{}% }% \renewcommand*{\newacronymstyle}[1]{% \GlossariesExtraWarning{New acronym style `##1' won't be available unless you restore the original acronym interface with \string\RestoreAcronyms}% \@glsxtr@org@newacronymstyle{##1}% }% } % \end{macrocode} %\end{macro} % % Switch acronyms to abbreviations: % \begin{macrocode} \MakeAcronymsAbbreviations % \end{macrocode} % %\begin{macro}{\RestoreAcronyms} % Restore acronyms to \styfmt{glossaries} interface. % \begin{macrocode} \newcommand*{\RestoreAcronyms}{% % \end{macrocode} % Restore acronym list. % \begin{macrocode} \let\@glsacronymlists\@glsxtr@acronymlists \let\@addtoacronymlists\@glsxtr@org@addtoacronynlists \let\SetAcronymLists\@glsxtr@org@setacronymlists % \end{macrocode} % Suppress warnings if \cs{acrshort} etc are used. % \begin{macrocode} \let\@glsxtr@base@acrcmd\@gobbletwo % \end{macrocode} %Restore acronym display style: %\changes{1.42}{2020-02-03}{added display style} % \begin{macrocode} \@for\@gls@type:=\@glsacronymlists\do{% \SetDefaultAcronymDisplayStyle{\@gls@type}% }% % \end{macrocode} %Switch to the generic acronym mechanism. % \begin{macrocode} \SetGenericNewAcronym \renewcommand{\firstacronymfont}[1]{\acronymfont{##1}}% \renewcommand{\acronymfont}[1]{##1}% \let\setacronymstyle\@glsxtr@org@setacronymstyle \let\newacronymstyle\@glsxtr@org@newacronymstyle % \end{macrocode} %\changes{1.07}{2016-08-15}{modified \cs{@gls@link@checkfirsthyper} to set %\cs{glsxtrifwasfirstuse}} % Need to restore the original definition of \cs{@gls@link@checkfirsthyper} % but \cs{glsxtrifwasfirstuse} still needs setting for the benefit % of the post-link hook. % \begin{macrocode} \renewcommand*\@gls@link@checkfirsthyper{% \ifglsused{\glslabel}% {\let\glsxtrifwasfirstuse\@secondoftwo} {\let\glsxtrifwasfirstuse\@firstoftwo}% \@glsxtr@org@checkfirsthyper } \glssetcategoryattribute{acronym}{regular}{false}% \setacronymstyle{long-short}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsacspace} % Allow the user to customise the maximum value. % \begin{macrocode} \renewcommand*{\glsacspace}[1]{% \settowidth{\dimen@}{(\firstacronymfont{\glsentryshort{#1}})}% \ifdim\dimen@<\glsacspacemax~\else\space\fi } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsacspacemax} % Value used in the above. % \begin{macrocode} \newcommand*{\glsacspacemax}{3em} % \end{macrocode} %\end{macro} % %\subsection{Indexing and Displaying Glossaries} %From time-to-time users ask if they can have one glossary sorted %normally and another sorted by definition or usage. With the % base \styfmt{glossaries} package this can only be achieved with the % \qt{noidx} commands (Option~1). This is an attempt to mix and % match. % %First we need a list of the glossaries that require %\gls{makeindex}\slash\gls{xindy}. %\begin{macro}{\@glsxtr@reg@glosslist} %\changes{1.0}{2016-01-24}{new} % \begin{macrocode} \newcommand*{\@glsxtr@reg@glosslist}{} % \end{macrocode} %\end{macro} % Save the original definition of \cs{makeglossaries}: % \begin{macrocode} \let\@glsxtr@org@makeglossaries\makeglossaries % \end{macrocode} % %\begin{macro}{\@domakeglossaries} %\changes{1.42}{2020-02-03}{provided definition for \cs{@domakeglossaries}} % \sty{glossaries} v4.45 introduced \cs{@domakeglossaries} to % provide a way of disabling \cs{makeglossaries}. If it hasn't been % defined, define here to do its argument: % \begin{macrocode} \providecommand{\@domakeglossaries}[1]{#1} % \end{macrocode} %\end{macro} % % Redefine \cs{makeglossaries} to take an optional argument. % This should be empty for the usual behaviour (all glossaries % need processing with an indexing application) or a comma-separated % list of glossary labels indicating those glossaries that should be % processed with an indexing application. The optional argument % version shouldn't be used with \pkgopt{record}. %\begin{macro}{\makeglossaries} %\changes{1.0}{2016-01-24}{new} %\changes{1.42}{2020-02-03}{added \cs{@domakeglossaries}} % \begin{macrocode} \renewcommand*{\makeglossaries}[1][]{% \@domakeglossaries {% \@glsxtr@if@record@only {% \PackageError{glossaries-extra}{\string\makeglossaries\space not permitted\MessageBreak with record=\@glsxtr@record@setting\space package option}% {You may only use \string\makeglossaries\space with record=off or record=alsoindex options}% }% {% \ifblank{#1}% {\@glsxtr@org@makeglossaries}% {% \ifx\@glsxtr@record@setting\@glsxtr@record@setting@alsoindex \PackageError{glossaries-extra}{\string\makeglossaries[#1]\space not permitted\MessageBreak with record=alsoindex package option}% {You may only use the hybrid \string\makeglossaries[...]\space with record=off option}% \else % \end{macrocode} %\cs{@gls@@automake@immediate} was introduced to \sty{glossaries} %v4.42 so it may not be defined. % \begin{macrocode} \ifdef\@gls@@automake@immediate{\@gls@@automake@immediate}{}% \edef\@glsxtr@reg@glosslist{#1}% \ifundef{\glswrite}{\newwrite\glswrite}{}% \protected@write\@auxout{}{\string\providecommand \string\@glsorder[1]{}} \protected@write\@auxout{}{\string\providecommand \string\@istfilename[1]{}} \protected@write\@auxout{}{\string\@istfilename{\istfilename}}% \protected@write\@auxout{}{\string\@glsorder{\glsorder}} \protected@write\@auxout{}{\string\glsxtr@makeglossaries{#1}} \write\@auxout{\string\providecommand\string\@gls@reference[3]{}}% % \end{macrocode} % Iterate through each supplied glossary type and activate it. % \begin{macrocode} \@for\@glo@type:=#1\do{% \ifdefempty{\@glo@type}{}{\@makeglossary{\@glo@type}}% }% % \end{macrocode} % New glossaries must be created before \cs{makeglossaries}: % \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. %\changes{1.42}{2020-02-03}{let \cs{@makeglossary} to \cs{@gobble} %instead of \cs{relax}} % \begin{macrocode} \let\@makeglossary\@gobble % \end{macrocode} %\changes{1.42}{2020-02-03}{removed redefinition of \cs{makeglossary}} %Version 1.42 removed letting \cs{makeglossary} to \cs{relax} %(no kernel redefs may be in effect). % \begin{macrocode} \renewcommand\makeglossaries[1][]{}% % \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} %Adjust \cs{@do@seeglossary}. This needs to check for the entry's %existence but don't increment associated counter. % \begin{macrocode} \renewcommand*{\@do@seeglossary}[2]{% \glsdoifexists{##1}% {% \edef\@gls@label{\glsdetoklabel{##1}}% \edef\@gls@type{\csname glo@\@gls@label @type\endcsname}% \expandafter\DTLifinlist\expandafter{\@gls@type}{\@glsxtr@reg@glosslist}% {\@glsxtr@org@doseeglossary{##1}{##2}}% {% \@@glsxtrwrglossmark \protected@write\@auxout{}{% \string\@gls@reference {\gls@type}{\@gls@label}{\string\glsseeformat##2{}}% }% }% }% }% % \end{macrocode} % Adjust \cs{@@do@@wrglossary} % \begin{macrocode} \let\@glsxtr@@do@@wrglossary\@@do@@wrglossary \def\@@do@@wrglossary{% \edef\@gls@type{\csname glo@\@gls@label @type\endcsname}% \expandafter\DTLifinlist\expandafter{\@gls@type}{\@glsxtr@reg@glosslist}% {\@glsxtr@@do@@wrglossary}% {\gls@noidxglossary}% }% % \end{macrocode} % Suppress warning about no \cs{makeglossaries} % \begin{macrocode} \let\warn@nomakeglossaries\relax \def\warn@noprintglossary{% \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} % Only warn for glossaries not listed. % \begin{macrocode} \renewcommand{\@gls@noref@warn}[1]{% \edef\@gls@type{##1}% \expandafter\DTLifinlist\expandafter{\@gls@type}{\@glsxtr@reg@glosslist}% {% \GlossariesExtraWarning{Can't use \string\printnoidxglossary[type={\@gls@type}] when `\@gls@type' is listed in the optional argument of \string\makeglossaries}% }% {% \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} % Adjust display number list to check for type: % \begin{macrocode} \renewcommand*{\glsdisplaynumberlist}[1]{% \expandafter\DTLifinlist\expandafter{##1}{\@glsxtr@reg@glosslist}% {\@glsxtr@idx@displaynumberlist{##1}}% {\@glsxtr@noidx@displaynumberlist{##1}}% }% % \end{macrocode} % Adjust entry list: % \begin{macrocode} \renewcommand*{\glsentrynumberlist}[1]{% \expandafter\DTLifinlist\expandafter{##1}{\@glsxtr@reg@glosslist}% {\@glsxtr@idx@entrynumberlist{##1}}% {\@glsxtr@noidx@entrynumberlist{##1}}% }% % \end{macrocode} % Adjust number list loop % \begin{macrocode} \renewcommand*{\glsnumberlistloop}[2]{% \expandafter\DTLifinlist\expandafter{##1}{\@glsxtr@reg@glosslist}% {% \PackageError{glossaries-extra}{\string\glsnumberlistloop\space not available for glossary `##1'}{}% }% {\@glsxtr@noidx@numberlistloop{##1}{##2}}% }% % \end{macrocode} % Only sanitize sort for normal indexing glossaries. % \begin{macrocode} \renewcommand*{\glsprestandardsort}[3]{% \expandafter\DTLifinlist\expandafter{##2}{\@glsxtr@reg@glosslist}% {% \glsdosanitizesort }% {% \ifglssanitizesort \@gls@noidx@sanitizesort \else \@gls@noidx@nosanitizesort \fi }% }% % \end{macrocode} % Unlike \cs{makenoidxglossaries} we can't automatically set % sanitizesort=false. All entries must be defined in the preamble. % \begin{macrocode} \renewcommand*\new@glossaryentry[2]{% \PackageError{glossaries-extra}{Glossary entries must be defined in the preamble\MessageBreak when you use the optional argument of \string\makeglossaries}{Either move your definitions to the preamble or don't use the optional argument of \string\makeglossaries}% }% % \end{macrocode} % Only activate sort key for glossaries that aren't listed in % \verb|#1| (glossary label is stored in \cs{@glo@type} but this % defaults to \cs{glsdefaulttype} so some expansion is required). % \begin{macrocode} \let\@glo@assign@sortkey\@glsxtr@mixed@assign@sortkey \renewcommand*{\@printgloss@setsort}{% % \end{macrocode} % Need to extract just the \gloskey[printglossary]{type} value. % \begin{macrocode} \expandafter\@glsxtr@gettype\expandafter,\@glsxtr@printglossopts,% type=\glsdefaulttype,\@end@glsxtr@gettype \def\@glo@sorttype{\@glo@default@sorttype}% }% % \end{macrocode} % Check \pkgopt{automake} setting: % \begin{macrocode} \ifglsautomake \renewcommand*{\@gls@doautomake}{% \@for\@gls@type:=\@glsxtr@reg@glosslist\do{% \ifdefempty{\@gls@type}{}{\@gls@automake{\@gls@type}}% }% }% \fi % \end{macrocode} % Check the sort setting (\sty{glossaries} v4.30 onwards): % \begin{macrocode} \ifdef\@glo@check@sortallowed{\@glo@check@sortallowed\makeglossaries}{}% \fi }% }% }% } % \end{macrocode} %\end{macro} % %The optional argument version of \cs{makeglossaries} needs an %adjustment to \cs{@printglossary} to allow \cs{@glo@assign@sortkey} %to pick up the glossary type. % %Earlier versions of \styfmt{glossaries-extra} simply saved the %original version of \cs{@printglossary} with \cs{let} %\cs{@glsxtr@orgprintglossary}. This was later changed to actually %defining \cs{@glsxtr@orgprintglossary} to something similar with %some alterations to allow for ignored glossaries, which don't have %an associated title and to by-pass the existence check with %\cs{ifglossaryexists} which doesn't recognise ignored glossaries. %(bib2gls writes \cs{provideignoredglossary} to the glstex file for some settings, %so the glossary might not been defined on the first \LaTeX\ run and %it needs to be allowed with \cs{printunsrtglossary} on subsequent %runs.) % %Unfortunately, removing the existence check will cause an error %if \cs{printglossary} is used with an ignored glossary. % %As from \sty{glossaries} v4.46, some new commands have been %included to allow the existence check to be varied depending on %whether or not ignored glossaries should be allowed, so check for %them: %\begin{macro}{\glsxtr@printgloss@checkexists} %\changes{1.44}{2020-03-23}{new} % \begin{macrocode} \ifdef\@printgloss@checkexists {\newcommand{\glsxtr@printgloss@checkexists}{\@printgloss@checkexists}} {\newcommand{\glsxtr@printgloss@checkexists}[2]{#2}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@orgprintglossary} %(This command is also used for on-the-fly setting.) % \begin{macrocode} \newcommand{\@glsxtr@orgprintglossary}[2]{% \def\@glo@type{\glsdefaulttype}% % \end{macrocode} %Add check here. % \begin{macrocode} \def\glossarytitle{% \ifcsdef{@glotype@\@glo@type @title}% {\csuse{@glotype@\@glo@type @title}}% {\glossaryname}}% \def\glossarytoctitle{\glossarytitle}% \let\org@glossarytitle\glossarytitle \def\@glossarystyle{% \ifx\@glossary@default@style\relax \GlossariesWarning{No default glossary style provided \MessageBreak for the glossary `\@glo@type'. \MessageBreak Using deprecated fallback. \MessageBreak To fix this set the style with \MessageBreak \string\setglossarystyle\space or use the \MessageBreak style key=value option}% \fi }% \def\gls@dotoctitle{\glssettoctitle{\@glo@type}}% \let\@org@glossaryentrynumbers\glossaryentrynumbers \bgroup \@printgloss@setsort \setkeys{printgloss}{#1}% \ifx\glossarytitle\org@glossarytitle \else \cslet{@glotype@\@glo@type @title}{\glossarytitle}% \fi \let\currentglossary\@glo@type \let\org@glossaryentrynumbers\glossaryentrynumbers \let\glsnonextpages\@glsnonextpages \let\glsnextpages\@glsnextpages % \end{macrocode} %\changes{1.22}{2017-11-08}{changed explicit \cs{let} for \cs{nopostdesc} %to \cs{glsxtractivatenopost}} % \begin{macrocode} \glsxtractivatenopost \gls@dotoctitle \@glossarystyle \let\gls@org@glossaryentryfield\glossentry \let\gls@org@glossarysubentryfield\subglossentry \renewcommand{\glossentry}[1]{% \xdef\glscurrententrylabel{\glsdetoklabel{##1}}% \gls@org@glossaryentryfield{##1}% }% \renewcommand{\subglossentry}[2]{% \xdef\glscurrententrylabel{\glsdetoklabel{##2}}% \gls@org@glossarysubentryfield{##1}{##2}% }% \@gls@preglossaryhook \glsxtr@printgloss@checkexists{\@glo@type}{#2}% \egroup \global\let\glossaryentrynumbers\@org@glossaryentrynumbers \global\let\warn@noprintglossary\relax } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtractivatenopost} %\changes{1.22}{2017-11-08}{new} %Change \cs{nopostdesc} and \cs{glsxtrnopostpunc} to behave as they %do in the glossary. % \begin{macrocode} \newcommand*{\glsxtractivatenopost}{% \let\nopostdesc\@nopostdesc \let\glsxtrnopostpunc\@glsxtr@nopostpunc } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrnopostpunc} %\changes{1.22}{2017-11-08}{new} % \begin{macrocode} \newrobustcmd*{\glsxtrnopostpunc}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@nopostpunc} %Provide a command that works like \cs{nopostdesc} but only %switches of the punctuation without suppressing the post-description %hook. %\changes{1.22}{2017-11-08}{new} % \begin{macrocode} \newcommand{\@glsxtr@nopostpunc}{% \let\@@glsxtr@org@postdescription\glspostdescription \ifglsnopostdot \renewcommand{\glspostdescription}{% \glsnopostdottrue \let\glspostdescription\@@glsxtr@org@postdescription \let\glsxtrrestorepostpunc\@glsxtr@restore@postpunc \glsxtrpostdescription \@glsxtr@nopostpunc@postdesc}% \else \renewcommand{\glspostdescription}{% \let\glspostdescription\@@glsxtr@org@postdescription \let\glsxtrrestorepostpunc\@glsxtr@restore@postpunc \glsxtrpostdescription \@glsxtr@nopostpunc@postdesc}% \fi \glsnopostdotfalse } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@nopostpunc@postdesc} %\changes{1.23}{2017-11-12}{new} % \begin{macrocode} \newcommand*{\@glsxtr@nopostpunc@postdesc}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@restore@postpunc} %\changes{1.23}{2017-11-12}{new} % \begin{macrocode} \newcommand*{\@glsxtr@restore@postpunc}{% \def\@glsxtr@nopostpunc@postdesc{% \@glsxtr@org@postdescription \let\@glsxtr@nopostpunc@postdesc\@empty \let\glsxtrrestorepostpunc\@empty }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrrestorepostpunc} %\changes{1.23}{2017-11-12}{new} %Does nothing outside of glossary. % \begin{macrocode} \newcommand*{\glsxtrrestorepostpunc}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\@printglossary} %Redefine. %\changes{1.09}{2016-12-16}{redefined to save options} % \begin{macrocode} \renewcommand{\@printglossary}[2]{% \def\@glsxtr@printglossopts{#1}% \@glsxtr@orgprintglossary{#1}{#2}% } % \end{macrocode} %\end{macro} % %Add a key that switches off the entry targets: %\changes{1.12}{2017-02-03}{added target key to printgloss family} % \begin{macrocode} \define@choicekey{printgloss}{target} [\@glsxtr@printglossval\@glsxtr@printglossnr]% {true,false}[true]% {% \ifcase\@glsxtr@printglossnr % \end{macrocode} %\changes{1.31}{2018-05-09}{changed \cs{let} to \cs{def}} % \begin{macrocode} \def\@glstarget{\glsdohypertarget}% \else \let\@glstarget\@secondoftwo \fi } % \end{macrocode} %\begin{macro}{\@glsxtrhypernameprefix} %\changes{1.20}{2017-09-11}{new} % \begin{macrocode} \newcommand{\@glsxtrhypernameprefix}{} % \end{macrocode} %\end{macro} % %New to v1.20: % \begin{macrocode} \define@key{printgloss}{targetnameprefix}{% \renewcommand{\@glsxtrhypernameprefix}{#1}% } % \end{macrocode} % %\changes{1.31}{2018-05-09}{added \texttt{prefix} key for \texttt{printgloss}} % \begin{macrocode} \define@key{printgloss}{prefix}{% \renewcommand{\glolinkprefix}{#1}% } % \end{macrocode} % %\changes{1.39}{2019-03-22}{added \texttt{label} key for \texttt{printgloss}} % \begin{macrocode} \define@key{printgloss}{label}{% \glsxtrsetglossarylabel{#1}% } % \end{macrocode} % %\begin{macro}{\glsxtrsetglossarylabel} %\changes{1.39}{2019-03-22}{new} %Set the label for subsequent glossaries. If the label is %fixed (that is, doesn't change with each glossary) this will need %to be scoped or changed again to prevent duplicate labels. % \begin{macrocode} \newcommand{\glsxtrsetglossarylabel}[1]{% \renewcommand*{\@@glossaryseclabel}{% \protected@edef\@currentlabelname{\glossarytoctitle}% \label{#1}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@leveloffset} %\changes{1.44}{2020-03-23}{new} % \begin{macrocode} \newcount\@glsxtr@leveloffset % \end{macrocode} %\end{macro} %New to v1.44: %\changes{1.44}{2020-03-23}{added leveloffset key} % \begin{macrocode} \define@key{printgloss}{leveloffset}{% \@glsxtr@assign@leveloffset#1\relax } % \end{macrocode} % %\begin{macro}{\@glsxtr@assign@leveloffset} %\changes{1.44}{2020-03-23}{new} % \begin{macrocode} \newcommand*{\@glsxtr@assign@leveloffset}{% \@ifnextchar+{\p@glsxtr@assign@leveloffset}{\np@glsxtr@assign@leveloffset}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\p@glsxtr@assign@leveloffset} %\changes{1.44}{2020-03-23}{new} % Discard initial "+" character. % \begin{macrocode} \newcommand*{\p@glsxtr@assign@leveloffset}[1]{% \@ifnextchar+{\pp@glsxtr@assign@leveloffset}{\np@glsxtr@assign@leveloffset}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\np@glsxtr@assign@leveloffset} %\changes{1.44}{2020-03-23}{new} % \begin{macrocode} \def\np@glsxtr@assign@leveloffset#1\relax{\@glsxtr@leveloffset=#1\relax} % \end{macrocode} %\end{macro} % %\begin{macro}{\pp@glsxtr@assign@leveloffset} %\changes{1.44}{2020-03-23}{new} % \begin{macrocode} \def\pp@glsxtr@assign@leveloffset#1\relax{\advance\@glsxtr@leveloffset by #1\relax} % \end{macrocode} %\end{macro} % %\changes{1.44}{2020-03-23}{added groups key} % \begin{macrocode} \define@boolkey{printgloss}[glsxtr@printgloss@]{groups}[true]{} \glsxtr@printgloss@groupstrue % \end{macrocode} % %\begin{macro}{\glsdohypertarget} %\changes{1.20}{2017-09-11}{added redefinition} %Redefine to insert \cs{@glsxtrhypernameprefix} before the target %name. % \begin{macrocode} \let\@glsxtr@org@glsdohypertarget\glsdohypertarget \renewcommand{\glsdohypertarget}[2]{% \@glsxtr@org@glsdohypertarget{\@glsxtrhypernameprefix#1}{#2}% } % \end{macrocode} %\changes{1.31}{2018-05-09}{bug fix: ensure that new version is picked up} %Update \cs{@glstarget} to use \cs{def} instead being assigned with %\cs{let} so that it can pick up the new definition and allow any %further redefinitions: % \begin{macrocode} \ifx\@glstarget\@glsxtr@org@glsdohypertarget \def\@glstarget{\glsdohypertarget}% \fi % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtr@makeglossaries} %For the benefit of \app{makeglossaries} %\changes{1.09}{2016-12-16}{new} % \begin{macrocode} \newcommand*{\glsxtr@makeglossaries}[1]{} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@gettype} %Get just the type. %\changes{1.09}{2016-12-16}{new} % \begin{macrocode} \def\@glsxtr@gettype#1,type=#2,#3\@end@glsxtr@gettype{% \def\@glo@type{#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@mixed@assign@sortkey} %Assign the sort key. %\changes{1.09}{2016-12-16}{new} % \begin{macrocode} \newcommand\@glsxtr@mixed@assign@sortkey[1]{% \edef\@glo@type{\@glo@type}% \expandafter\DTLifinlist\expandafter{\@glo@type}{\@glsxtr@reg@glosslist}% {% \@glo@no@assign@sortkey{#1}% }% {% \@@glo@assign@sortkey{#1}% }% }% % \end{macrocode} %\end{macro} % Display number list for the regular version: %\begin{macro}{\@glsxtr@idx@displaynumberlist} %\changes{1.0}{2016-01-24}{new} % \begin{macrocode} \let\@glsxtr@idx@displaynumberlist\glsdisplaynumberlist % \end{macrocode} %\end{macro} % % Display number list for the \qt{noidx} version: %\begin{macro}{\@glsxtr@noidx@displaynumberlist} %\changes{1.0}{2016-01-24}{new} % \begin{macrocode} \newcommand*{\@glsxtr@noidx@displaynumberlist}[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 }% {% % \end{macrocode} %\changes{1.17}{2017-08-09}{replace hard-coded ?? with %\cs{glsxtrundeftag}} % \begin{macrocode} \glsxtrundeftag \glsdoifexists{#1}% {% \GlossariesWarning{Missing location list for `#1'. Either a rerun is required or you haven't referenced the entry.}% }% }% }% % \end{macrocode} %\end{macro} %And for the number list loop: %\begin{macro}{\@glsxtr@noidx@numberlistloop} %\changes{1.0}{2016-01-24}{new} % \begin{macrocode} \newcommand*{\@glsxtr@noidx@numberlistloop}[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}% }% {% % \end{macrocode} %\changes{1.17}{2017-08-09}{replace hard-coded ?? with %\cs{glsxtrundeftag}} % \begin{macrocode} \glsxtrundeftag \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} %\end{macro} % %Same for entry number list. %\begin{macro}{\@glsxtr@noidx@entrynumberlist} %\changes{1.0}{2016-01-24}{new} % \begin{macrocode} \newcommand*{\@glsxtr@noidx@entrynumberlist}[1]{% \letcs{\@gls@loclist}{glo@\glsdetoklabel{#1}@loclist}% \ifdef\@gls@loclist {% \glsnoidxloclist{\@gls@loclist}% }% {% % \end{macrocode} %\changes{1.17}{2017-08-09}{replace hard-coded ?? with %\cs{glsxtrundeftag}} % \begin{macrocode} \glsxtrundeftag \glsdoifexists{#1}% {% \GlossariesWarning{Missing location list for `#1'. Either a rerun is required or you haven't referenced the entry.}% }% }% }% % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@idx@entrynumberlist} %\changes{1.0}{2016-01-24}{new} %\changes{1.04}{2016-05-02}{switched from \cs{let} to \cs{newcommand}} % \begin{macrocode} \newcommand*{\@glsxtr@idx@entrynumberlist}[1]{\glsentrynumberlist{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@gls@noidx@getgrouptitle} %\changes{1.14}{2017-04-18}{new} %\changes{1.16}{2017-06-15}{fixed bug} %Patch. % \begin{macrocode} \renewcommand*{\@gls@noidx@getgrouptitle}[2]{% \protected@edef\@glsxtr@titlelabel{#1}% \ifdefvoid\@glsxtr@titlelabel {}% {% \protected@edef\@glsxtr@titlelabel{\csuse{glsxtr@grouptitle@#1}}% }% \ifdefvoid{\@glsxtr@titlelabel}% {% \DTLifint{#1}% {% \ifnum#1<256\relax \edef#2{\char#1\relax}% \else \edef#2{#1}% \fi }% {% \ifcsundef{#1groupname}% {\def#2{#1}}% {\letcs#2{#1groupname}}% }% }% {% \let#2\@glsxtr@titlelabel }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@org@getgrouptitle} %\changes{1.14}{2017-04-18}{new} %Save original definition of \cs{@gls@getgrouptitle} % \begin{macrocode} \let\glsxtr@org@getgrouptitle\@gls@getgrouptitle % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrgetgrouptitle} %\changes{1.14}{2017-04-18}{new} %Provide a user-level command to fetch the group title. The first %argument is the group label. The second argument is a control %sequence in which to store the title. % \begin{macrocode} \newrobustcmd{\glsxtrgetgrouptitle}[2]{% \protected@edef\@glsxtr@titlelabel{glsxtr@grouptitle@#1}% \@onelevel@sanitize\@glsxtr@titlelabel \ifcsdef{\@glsxtr@titlelabel} {\letcs{#2}{\@glsxtr@titlelabel}}% {\glsxtr@org@getgrouptitle{#1}{#2}}% } \let\@gls@getgrouptitle\glsxtrgetgrouptitle % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrsetgrouptitle} %\changes{1.14}{2017-04-18}{new} %Sets the title for the given group label. %\changes{1.28}{2018-03-06}{changed \cs{csxdef} \cs{protected@csxdef}} % \begin{macrocode} \newcommand{\glsxtrsetgrouptitle}[2]{% \protected@edef\@glsxtr@titlelabel{glsxtr@grouptitle@#1}% \@onelevel@sanitize\@glsxtr@titlelabel \protected@csxdef{\@glsxtr@titlelabel}{#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrlocalsetgrouptitle} %\changes{1.24}{2017-11-14}{new} %As above put only locally defines the title. %\changes{1.28}{2018-03-06}{changed \cs{csedef} \cs{protected@csedef}} % \begin{macrocode} \newcommand{\glsxtrlocalsetgrouptitle}[2]{% \protected@edef\@glsxtr@titlelabel{glsxtr@grouptitle@#1}% \@onelevel@sanitize\@glsxtr@titlelabel \protected@csedef{\@glsxtr@titlelabel}{#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsnavigation} %\changes{1.14}{2017-04-18}{new} %Redefine to use new user-level command. % \begin{macrocode} \renewcommand*{\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 \glsxtrgetgrouptitle{\@gls@tmp}{\@gls@grptitle}% \glsnavhyperlink{\@gls@tmp}{\@gls@grptitle}% \let\@gls@between\glshypernavsep }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@print@noidx@glossary} %\changes{1.11}{2017-01-19}{added redefinition} % \begin{macrocode} \renewcommand*{\@print@noidx@glossary}{% \ifcsdef{@glsref@\@glo@type}% {% \ifcsdef{@glo@sortmacro@\@glo@sorttype}% {% \csuse{@glo@sortmacro@\@glo@sorttype}{\@glo@type}% }% {% \PackageError{glossaries}{Unknown sort handler `\@glo@sorttype'}{}% }% \glossarysection[\glossarytoctitle]{\glossarytitle}% \glossarypreamble % \end{macrocode} %Moved this command definition outside of environment in case of %scoping issues (e.g. in tabular-like styles). % \begin{macrocode} \def\@gls@currentlettergroup{}% \begin{theglossary}% \glossaryheader \glsresetentrylist \forlistcsloop{\@gls@noidx@do}{@glsref@\@glo@type}% \end{theglossary}% \glossarypostamble }% {% % \end{macrocode} %Add section header if there are actually entries defined in this %glossary as the document is likely pending a re-run. % \begin{macrocode} \glsxtrifemptyglossary{\@glo@type}% {}% {\glossarysection[\glossarytoctitle]{\glossarytitle}}% \@gls@noref@warn{\@glo@type}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsnoidxdisplayloc} %\changes{1.12}{2017-02-03}{added redefinition} %Patch to check for range formations. % \begin{macrocode} \renewcommand*{\glsnoidxdisplayloc}[4]{% \setentrycounter[#1]{#2}% \@glsxtr@display@loc#3\empty\end@glsxtr@display@loc{#4}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@display@loc} %\changes{1.12}{2017-02-03}{new} %Patch to check for range formations. % \begin{macrocode} \def\@glsxtr@display@loc#1#2\end@glsxtr@display@loc#3{% \ifx#1(\relax \glsxtrdisplaystartloc{#2}{#3}% \else \ifx#1)\relax \glsxtrdisplayendloc{#2}{#3}% \else \glsxtrdisplaysingleloc{#1#2}{#3}% \fi \fi } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrdisplaysingleloc} %\changes{1.12}{2017-02-03}{new} %Single location. % \begin{macrocode} \newcommand*{\glsxtrdisplaysingleloc}[2]{% \csuse{#1}{#2}% } % \end{macrocode} %\end{macro} % %By default the range identifiers are simply ignored. %A custom list loop handler can be defined by the user %to test for ranges by checking the definition of %\cs{glsxtrlocrangefmt}. % %\begin{macro}{\glsxtrdisplaystartloc} %\changes{1.12}{2017-02-03}{new} %Start of a location range. % \begin{macrocode} \newcommand*{\glsxtrdisplaystartloc}[2]{% \edef\glsxtrlocrangefmt{#1}% \ifx\glsxtrlocrangefmt\empty \def\glsxtrlocrangefmt{glsnumberformat}% \fi \expandafter\glsxtrdisplaysingleloc \expandafter{\glsxtrlocrangefmt}{#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrdisplayendloc} %\changes{1.12}{2017-02-03}{new} %\changes{1.14}{2017-04-18}{added check for empty format} %End of a location range. % \begin{macrocode} \newcommand*{\glsxtrdisplayendloc}[2]{% \edef\@glsxtr@tmp{#1}% \ifdefempty{\@glsxtr@tmp}{\def\@glsxtr@tmp{glsnumberformat}}{}% \ifx\glsxtrlocrangefmt\@glsxtr@tmp \else \GlossariesExtraWarning{Mismatched end location range (start=\glsxtrlocrangefmt, end=\@glsxtr@tmp)}% \fi \expandafter\glsxtrdisplayendlochook\expandafter{\@glsxtr@tmp}{#2}% \expandafter\glsxtrdisplaysingleloc \expandafter{\glsxtrlocrangefmt}{#2}% \def\glsxtrlocrangefmt{}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrdisplayendlochook} %\changes{1.12}{2017-02-03}{new} %Allow the user to hook into the end of range command. % \begin{macrocode} \newcommand*{\glsxtrdisplayendlochook}[2]{} % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrlocrangefmt} %\changes{1.12}{2017-02-03}{new} %Current range format. Empty if not in a range. % \begin{macrocode} \newcommand*{\glsxtrlocrangefmt}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\setentrycounter} %\changes{1.29}{2018-04-09}{new} %Adjust \cs{setentrycounter} to save the original prefix. % \begin{macrocode} \renewcommand*{\setentrycounter}[2][]{% \def\glsxtrcounterprefix{#1}% \ifx\glsxtrcounterprefix\@empty \def\@glo@counterprefix{.}% \else \def\@glo@counterprefix{.#1.}% \fi \def\glsentrycounter{#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@gls@removespaces} %\changes{1.14}{2017-04-18}{new} %Redefine to allow adjustments to location hyperlink. % \begin{macrocode} \def\@gls@removespaces#1 #2\@nil{% \toks@=\expandafter{\the\toks@#1}% \ifx\\#2\\% % \end{macrocode} %\changes{1.39}{2019-03-22}{changed \cs{x} to \cs{@glo@tmp}} % \begin{macrocode} \edef\@glo@tmp{\the\toks@}% \ifx\@glo@tmp\empty \else % \end{macrocode} %Expand location (just in case \cs{toks@} is needed for something %else). %\changes{1.29}{2018-04-09}{added expansion} % \begin{macrocode} \expandafter\glsxtrlocationhyperlink\expandafter \glsentrycounter\expandafter\@glo@counterprefix\expandafter{\the\toks@}% \fi \else \@gls@ReturnAfterFi{% \@gls@removespaces#2\@nil }% \fi } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrlocationhyperlink} %\changes{1.14}{2017-04-18}{new} %\begin{definition} %\cs{glsxtrlocationhyperlink}\marg{counter}\marg{prefix}\marg{location} %\end{definition} % \begin{macrocode} \newcommand*{\glsxtrlocationhyperlink}[3]{% \ifdefvoid\glsxtrsupplocationurl {% \GlsXtrInternalLocationHyperlink{#1}{#2}{#3}% }% {% \hyperref{\glsxtrsupplocationurl}{}{#1#2#3}{#3}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrsupphypernumber} %\changes{1.14}{2017-04-18}{new} % \begin{macrocode} \newcommand*{\glsxtrsupphypernumber}[1]{% {% \glshasattribute{\glscurrententrylabel}{externallocation}% {% \def\glsxtrsupplocationurl{% \glsgetattribute{\glscurrententrylabel}{externallocation}}% }% {% \def\glsxtrsupplocationurl{}% }% \glshypernumber{#1}% }% } % \end{macrocode} %\end{macro} % % Give a bit of assistance to new users who are confused and don't % know how to read transcript messages. %\begin{macro}{\@print@glossary} %\changes{0.3}{2015-12-02}{added redefinition} % \begin{macrocode} \renewcommand{\@print@glossary}{% \makeatletter \@input@{\jobname.\csname @glotype@\@glo@type @in\endcsname}% \IfFileExists{\jobname.\csname @glotype@\@glo@type @in\endcsname}% {}% {\glsxtrNoGlossaryWarning{\@glo@type}}% \ifglsxindy \ifcsundef{@xdy@\@glo@type @language}% {% \edef\@do@auxoutstuff{% \noexpand\AtEndDocument{% \noexpand\immediate\noexpand\write\@auxout{% \string\providecommand\string\@xdylanguage[2]{}}% \noexpand\immediate\noexpand\write\@auxout{% \string\@xdylanguage{\@glo@type}{\@xdy@main@language}}% }% }% }% {% \edef\@do@auxoutstuff{% \noexpand\AtEndDocument{% \noexpand\immediate\noexpand\write\@auxout{% \string\providecommand\string\@xdylanguage[2]{}}% \noexpand\immediate\noexpand\write\@auxout{% \string\@xdylanguage{\@glo@type}{\csname @xdy@\@glo@type @language\endcsname}}% }% }% }% \@do@auxoutstuff \edef\@do@auxoutstuff{% \noexpand\AtEndDocument{% \noexpand\immediate\noexpand\write\@auxout{% \string\providecommand\string\@gls@codepage[2]{}}% \noexpand\immediate\noexpand\write\@auxout{% \string\@gls@codepage{\@glo@type}{\gls@codepage}}% }% }% \@do@auxoutstuff \fi \renewcommand*{\@warn@nomakeglossaries}{% \GlossariesWarningNoLine{\string\makeglossaries\space hasn't been used,^^Jthe glossaries will not be updated}% }% } % \end{macrocode} %\end{macro} % % Setup the warning text to display if the external file for the given % glossary is missing. % %\begin{macro}{\GlsXtrNoGlsWarningHead} % Header message. % \begin{macrocode} \newcommand{\GlsXtrNoGlsWarningHead}[2]{% This document is incomplete. The external file associated with the glossary `#1' (which should be called \texttt{#2}) hasn't been created.% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrNoGlsWarningEmptyStart} % No entries have been added to the glossary. % \begin{macrocode} \newcommand{\GlsXtrNoGlsWarningEmptyStart}{% This has probably happened because there are no entries defined in this glossary.% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrNoGlsWarningEmptyMain} % The default \qt{main} glossary is empty. % \begin{macrocode} \newcommand{\GlsXtrNoGlsWarningEmptyMain}{% If you don't want this glossary, add \texttt{nomain} to your package option list when you load \texttt{glossaries-extra.sty}. For example:% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrNoGlsWarningEmptyNotMain} % A glossary that isn't the default \qt{main} glossary is empty. % \begin{macrocode} \newcommand{\GlsXtrNoGlsWarningEmptyNotMain}[1]{% Did you forget to use \texttt{type=#1} when you defined your entries? If you tried to load entries into this glossary with \texttt{\string\loadglsentries} did you remember to use \texttt{[#1]} as the optional argument? If you did, check that the definitions in the file you loaded all had the type set to \texttt{\string\glsdefaulttype}.% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrNoGlsWarningCheckFile} % Advisory message to check the file contents. % \begin{macrocode} \newcommand{\GlsXtrNoGlsWarningCheckFile}[1]{% Check the contents of the file \texttt{#1}. If it's empty, that means you haven't indexed any of your entries in this glossary (using commands like \texttt{\string\gls} or \texttt{\string\glsadd}) so this list can't be generated. If the file isn't empty, the document build process hasn't been completed.% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrNoGlsWarningAutoMake} % Message when \pkgopt{automake} option has been used. % \begin{macrocode} \newcommand{\GlsXtrNoGlsWarningAutoMake}[1]{% You may need to rerun \LaTeX. If you already have, it may be that \TeX's shell escape doesn't allow you to run \ifglsxindy xindy\else makeindex\fi. Check the transcript file \texttt{\jobname.log}. If the shell escape is disabled, try one of the following: \begin{itemize} \item Run the external (Lua) application: \texttt{makeglossaries-lite \string"\jobname\string"} \item Run the external (Perl) application: \texttt{makeglossaries \string"\jobname\string"} \end{itemize} Then rerun \LaTeX\ on this document. \GlossariesExtraWarning{Rerun required to build the glossary `#1' or check TeX's shell escape allows you to run \ifglsxindy xindy\else makeindex\fi}% } % \end{macrocode} %\end{macro} % %\changes{0.5.3}{2015-12-09}{removed \cs{GlsXtrNoGlsWarningNoAutoMakeMain}} % %\begin{macro}{\GlsXtrNoGlsWarningMisMatch} % Mismatching \cs{makenoidxglossaries}. % \begin{macrocode} \newcommand{\GlsXtrNoGlsWarningMisMatch}{% You need to either replace \texttt{\string\makenoidxglossaries} with \texttt{\string\makeglossaries} or replace \texttt{\string\printglossary} (or \texttt{\string\printglossaries}) with \texttt{\string\printnoidxglossary} (or \texttt{\string\printnoidxglossaries}) and then rebuild this document.% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrNoGlsWarningBuildInfo} % Build advice. % \begin{macrocode} \newcommand{\GlsXtrNoGlsWarningBuildInfo}{% Try one of the following: \begin{itemize} \item Add \texttt{automake} to your package option list when you load \texttt{glossaries-extra.sty}. For example: \texttt{\string\usepackage[automake]% \glsopenbrace glossaries-extra\glsclosebrace} \item Run the external (Lua) application: \texttt{makeglossaries-lite.lua \string"\jobname\string"} \item Run the external (Perl) application: \texttt{makeglossaries \string"\jobname\string"} \end{itemize} Then rerun \LaTeX\ on this document.% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrRecordWarning} % Paragraph for \pkgopt[only]{record}. %\changes{1.31}{2018-05-09}{new} % \begin{macrocode} \newcommand{\GlsXtrRecordWarning}[1]{% \texttt{\string\printglossary} doesn't work with the \texttt{record=\@glsxtr@record@setting} package option use\par\texttt{\string\printunsrtglossary[type=#1]}\par instead (or change the package option).% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrNoGlsWarningTail} % Final paragraph. % \begin{macrocode} \newcommand{\GlsXtrNoGlsWarningTail}{% This message will be removed once the problem has been fixed.% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrNoGlsWarningNoOut} % No out file created. % Build advice. % \begin{macrocode} \newcommand{\GlsXtrNoGlsWarningNoOut}[1]{% The file \texttt{#1} doesn't exist. This most likely means you haven't used \texttt{\string\makeglossaries} or you have used \texttt{\string\nofiles}. If this is just a draft version of the document, you can suppress this message using the \texttt{nomissingglstext} package option.% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@defaultnoglossarywarning} %\changes{0.3}{2015-12-02}{new} % \begin{macrocode} \newcommand*{\@glsxtr@defaultnoglossarywarning}[1]{% \glossarysection[\glossarytoctitle]{\glossarytitle} \GlsXtrNoGlsWarningHead{#1}{\jobname.\csname @glotype@\@glo@type @in\endcsname} \par \glsxtrifemptyglossary{#1}% {% \GlsXtrNoGlsWarningEmptyStart\space \ifthenelse{\equal{#1}{main}}{\GlsXtrNoGlsWarningEmptyMain\par \medskip \noindent\texttt{\string\usepackage[nomain\ifglsacronym ,acronym\fi]% \glsopenbrace glossaries-extra\glsclosebrace} \medskip }% {\GlsXtrNoGlsWarningEmptyNotMain{#1}}% }% {% \IfFileExists{\jobname.\csname @glotype@\@glo@type @out\endcsname} {% \GlsXtrNoGlsWarningCheckFile {\jobname.\csname @glotype@\@glo@type @out\endcsname} \ifglsautomake \GlsXtrNoGlsWarningAutoMake{#1} \else \ifthenelse{\equal{#1}{main}}% {% \GlsXtrNoGlsWarningEmptyMain\par \medskip \noindent\texttt{\string\usepackage[nomain]% \glsopenbrace glossaries-extra\glsclosebrace} \medskip }% {}% \ifdefequal\makeglossaries\@no@makeglossaries {% \GlsXtrNoGlsWarningMisMatch }% {% \GlsXtrNoGlsWarningBuildInfo }% \fi }% {% \GlsXtrNoGlsWarningNoOut {\jobname.\csname @glotype@\@glo@type @out\endcsname}% }% }% \par \GlsXtrNoGlsWarningTail } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@record@noglossarywarning} %\changes{1.31}{2018-05-09}{new} %Warn about using \cs{printglossary} with \pkgopt{record} % \begin{macrocode} \newcommand*{\@glsxtr@record@noglossarywarning}[1]{% \GlossariesExtraWarning{\string\printglossary\space doesn't work\MessageBreak with record=\@glsxtr@record@setting\space package option\MessageBreak(use \string\printunsrtglossary[type=#1])\MessageBreak instead (or change the package option)}% \glossarysection[\glossarytoctitle]{\glossarytitle} \GlsXtrRecordWarning{#1} \GlsXtrNoGlsWarningTail } % \end{macrocode} %\end{macro} % %Provide some commands to accompany the \pkgopt{record} option %for use with \href{https://github.com/nlct/bib2gls}{bib2gls}. % %\begin{macro}{\GlsXtrDefaultResourceOptions} %\changes{1.40}{2019-03-31}{new} %Default resource options. % \begin{macrocode} \newcommand*{\GlsXtrDefaultResourceOptions}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrresourcefile} %\changes{1.08}{2016-12-13}{new} %\changes{1.11}{2017-01-19}{changed extension to .glstex} %Since it's dangerous for an external application to %create a file with a .tex extension, as from v1.11 this %enforces a .glstex extension to avoid conflict. % \begin{macrocode} \newcommand*{\glsxtrresourcefile}[2][]{% % \end{macrocode} %The \pkgopt{record} option can't be set after this command. %\changes{1.21}{2017-11-03}{now disables record key} % \begin{macrocode} \disable@keys{glossaries-extra.sty}{record}% \glsxtr@writefields \ifdefempty\GlsXtrDefaultResourceOptions {% \protected@write\@auxout{\glsxtrresourceinit}% {\string\glsxtr@resource{#1}{#2}}% }% {% \protected@write\@auxout{\glsxtrresourceinit}% {\string\glsxtr@resource{\GlsXtrDefaultResourceOptions,#1}{#2}}% }% \let\@glsxtr@org@see@noindex\@gls@see@noindex \let\@gls@see@noindex\relax \IfFileExists{#2.glstex}% {% % \end{macrocode} %Can't scope \cs{@input} so save and restore the category code of %\texttt{@} to allow for internal commands in the location list. %\changes{1.12}{2017-02-03}{added catcode change for @} % \begin{macrocode} \edef\@bibgls@restoreat{\noexpand\catcode\noexpand`\noexpand\@=\number\catcode`\@}% \makeatletter \@input{#2.glstex}% \@bibgls@restoreat % \end{macrocode} % If the \pkgopt[nameref]{record} option has been set, check if this % is supported by the installed version of \app{bib2gls}. % \begin{macrocode} \@glsxtr@check@bibgls@nameref }% {% \GlossariesExtraWarning{No file `#2.glstex'}% }% \let\@gls@see@noindex\@glsxtr@org@see@noindex } \@onlypreamble\glsxtrresourcefile % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@check@bibgls@nameref} %\changes{1.37}{2018-11-30}{new} %This will only warn after \app{bib2gls} has created the .glstex %file, but there's way to check before. % \begin{macrocode} \newcommand{\@glsxtr@check@bibgls@nameref}{% \ifx\@glsxtr@record@setting\@glsxtr@record@setting@nameref \ifdef\bibglshrefchar {}% {% \GlossariesExtraWarning{record=nameref requires at least version 1.8 of bib2gls}% }% \fi \let\@glsxtr@check@bibgls@nameref\relax } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrresourceinit} %\changes{1.21}{2017-11-03}{new} %Code used during the protected write operation. % \begin{macrocode} \newcommand*{\glsxtrresourceinit}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrresourcecount} %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newcount\glsxtrresourcecount % \end{macrocode} %\end{macro} %\begin{macro}{\GlsXtrLoadResources} %\changes{1.11}{2017-01-19}{new} %\changes{1.12}{2017-02-03}{removed restriction on only one per document} %Short cut that uses \cs{glsxtrresourcefile} with \cs{jobname} as %the mandatory argument. % \begin{macrocode} \newcommand*{\GlsXtrLoadResources}[1][]{% \ifnum\glsxtrresourcecount=0\relax \glsxtrresourcefile[#1]{\jobname}% \else \glsxtrresourcefile[#1]{\jobname-\the\glsxtrresourcecount}% \fi \advance\glsxtrresourcecount by 1\relax } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@resource} %\changes{1.08}{2016-12-13}{new} % \begin{macrocode} \newcommand*{\glsxtr@resource}[2]{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@fields} %\changes{1.11}{2017-01-19}{new} % \begin{macrocode} \newcommand*{\glsxtr@fields}[1]{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@texencoding} %\changes{1.11}{2017-01-19}{new} % \begin{macrocode} \newcommand*{\glsxtr@texencoding}[1]{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@langtag} %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newcommand*{\glsxtr@langtag}[1]{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@pluralsuffixes} %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newcommand*{\glsxtr@pluralsuffixes}[4]{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@shortcutsval} %\changes{1.11}{2017-01-19}{new} % \begin{macrocode} \newcommand*{\glsxtr@shortcutsval}[1]{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@linkprefix} %\changes{1.11}{2017-01-19}{new} % \begin{macrocode} \newcommand*{\glsxtr@linkprefix}[1]{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@writefields} %\changes{1.11}{2017-01-19}{new} %This information only needs to be written once, so disable it after %it's been used. % \begin{macrocode} \newcommand*{\glsxtr@writefields}{% % \end{macrocode} %\changes{1.16}{2017-06-15}{added \cs{providecommand} lines} % \begin{macrocode} \protected@write\@auxout{}% {\string\providecommand*{\string\glsxtr@fields}[1]{}}% \protected@write\@auxout{}% {\string\providecommand*{\string\glsxtr@resource}[2]{}}% \protected@write\@auxout{}% {\string\providecommand*{\string\glsxtr@pluralsuffixes}[4]{}}% \protected@write\@auxout{}% {\string\providecommand*{\string\glsxtr@shortcutsval}[1]{}}% \protected@write\@auxout{}% {\string\providecommand*{\string\glsxtr@linkprefix}[1]{}}% \protected@write\@auxout{}{\string\glsxtr@fields{\@gls@keymap}}% % \end{macrocode} %\changes{1.22}{2017-11-08}{provide \cs{glsxtr@record} in aux file} % \begin{macrocode} \protected@write\@auxout{}% {\string\providecommand*{\string\glsxtr@record}[5]{}}% % \end{macrocode} %\changes{1.37}{2018-11-30}{provide \cs{glsxtr@record@nameref} in aux file} % \begin{macrocode} \ifx\@glsxtr@record@setting\@glsxtr@record@setting@nameref \protected@write\@auxout{}% {\string\providecommand*{\string\glsxtr@record@nameref}[8]{}}% \fi % \end{macrocode} %If any languages have been loaded, the language tag will be %available in \cs{CurrentTrackedLanguageTag} (provided by %\sty{tracklang}). For multilingual %documents, the required locale will have to be indicated in the %"sort" key when using \cs{glsxtrresourcefile}. % \begin{macrocode} \ifdef\CurrentTrackedLanguageTag {% \protected@write\@auxout{}{% \string\glsxtr@langtag{\CurrentTrackedLanguageTag}}% }% {}% \protected@write\@auxout{}{\string\glsxtr@pluralsuffixes {\glspluralsuffix}{\abbrvpluralsuffix}{\acrpluralsuffix}% {\glsxtrabbrvpluralsuffix}}% \ifdef\inputencodingname {% \protected@write\@auxout{}{\string\glsxtr@texencoding{\inputencodingname}}% }% {% % \end{macrocode} %If \sty{fontspec} has been loaded, assume UTF-8. (The encoding can %be changed with \cs{XeTeXinputencoding}, but I can't work out how %to determine the current encoding.) % \begin{macrocode} \@ifpackageloaded{fontspec}% {\protected@write\@auxout{}{\string\glsxtr@texencoding{utf8}}}% {}% }% \protected@write\@auxout{}{\string\glsxtr@shortcutsval{\@glsxtr@shortcutsval}}% % \end{macrocode} %Prefix deferred until the beginning of the document in case it's %redefined later in the preamble. This is picked up by bib2gls when %the external option is used. % \begin{macrocode} \AtBeginDocument {\protected@write\@auxout{}{\string\glsxtr@linkprefix{\glolinkprefix}}}% \let\glsxtr@writefields\relax % \end{macrocode} %If the \pkgopt{automake} option is on, try running bib2gls if %the aux file exists. This has to be done before the aux file is %opened (so package options \pkgopt[immediate]{automake} and %\pkgopt[true]{automake} are identical if just bib2gls is used). %\changes{1.14}{2017-04-18}{added check for automake} %\changes{1.19}{2017-09-09}{removed double-quotes around \cs{jobname}} %The double-quotes around \cs{jobname} have been removed (v1.19) %since \cs{jobname} will include double-quotes if the file name has %spaces. % \begin{macrocode} \ifglsautomake \IfFileExists{\jobname.aux}% {\immediate\write18{bib2gls \jobname}}{}% % \end{macrocode} %If \cs{makeglossaries} is also used, allow makeindex/xindy to %also be run, otherwise disable the error message about requiring %\cs{makeglossaries} with \pkgopt[true]{automake}. % \begin{macrocode} \ifx\@gls@doautomake\@gls@doautomake@err \let\@gls@doautomake\relax \fi \fi % \end{macrocode} % Check if \pkgopt[letter]{order} has been used by mistake (but not % if \pkgopt[alsoindex]{record} has been used). %\changes{1.42}{2020-02-03}{added check for order\protect\dequals letter} % \begin{macrocode} \@glsxtr@if@record@only {\ifdefstring{\glsorder}{letter}% {\GlossariesExtraWarningNoLine{Package option `order=letter' isn't supported with `record=\@glsxtr@record@setting'. Use `break-at=none' resource option instead}}% {}% }% {}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@do@automake@err} %\changes{1.14}{2017-04-18}{new} % \begin{macrocode} \newcommand*{\@gls@doautomake@err}{% \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.% }% } % \end{macrocode} %\end{macro} % %Allow locations specific to a particular counter to be recorded. %\begin{macro}{\glsxtr@record} %\changes{1.08}{2016-12-13}{new} % \begin{macrocode} \newcommand*{\glsxtr@record}[5]{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@record@nameref} %\changes{1.37}{2018-11-30}{new} %Used with \pkgopt[nameref]{record} to include current label %information. % \begin{macrocode} \newcommand*{\glsxtr@record@nameref}[8]{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@counterrecord} %\changes{1.12}{2017-02-03}{new} %Aux file command. % \begin{macrocode} \newcommand*{\glsxtr@counterrecord}[3]{% \glsxtrfieldlistgadd{#1}{record.#2}{#3}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@counterrecordhook} %\changes{1.12}{2017-02-03}{new} %Hook used by \cs{@glsxtr@dorecord}. % \begin{macrocode} \newcommand*{\@glsxtr@counterrecordhook}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrRecordCounter} %\changes{1.12}{2017-02-03}{new} %Activate recording for a particular counter (identified in the %argument). % \begin{macrocode} \newcommand*{\GlsXtrRecordCounter}[1]{% \@@glsxtr@recordcounter{#1}% } \@onlypreamble\GlsXtrRecordCounter % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@docounterrecord} %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newcommand*{\@glsxtr@docounterrecord}[1]{% \protected@write\@auxout{}{\string\glsxtr@counterrecord {\@gls@label}{#1}{\csuse{the#1}}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrglossentry} %Users may prefer to have entries displayed throughout the document %rather than gathered together in a list. This command emulates %the way \cs{glossentry} behaves (without the style formatting %commands like \cs{item}). This needs to define \cs{currentglossary} %to the current glossary type (normally set at the start of %\cs{@printglossary}) and needs to define \cs{glscurrententrylabel} %to the entry's label (normally set before \cs{glossentry} and %\cs{subglossentry}). This needs some protection in case it's used %in a section heading. %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\glsxtrglossentry}[1]{% \glsxtrtitleorpdforheading {\@glsxtrglossentry{#1}}% {\glsentryname{#1}}% {\glsxtrheadname{#1}}% } % \end{macrocode} %\end{macro} %\begin{macro}{\@glsxtrglossentry} %\changes{1.21}{2017-11-03}{new} %Another test is needed in case \cs{@glsxtrglossentry} has been %written to the table of contents. % \begin{macrocode} \newrobustcmd*{\@glsxtrglossentry}[1]{% \glsxtrtitleorpdforheading {% \glsdoifexists{#1}% {% \begingroup \edef\glscurrententrylabel{\glsdetoklabel{#1}}% \edef\currentglossary{\GlsXtrStandaloneGlossaryType}% \ifglshasparent{#1}% {\GlsXtrStandaloneSubEntryItem{#1}}% {\glsentryitem{#1}}% \GlsXtrStandaloneEntryName{#1}% \endgroup }% }% {\glsentryname{#1}}% {\glsxtrheadname{#1}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrStandaloneEntryName} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand*{\GlsXtrStandaloneEntryName}[1]{% \glstarget{#1}{\glossentryname{#1}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrStandaloneGlossaryType} %\changes{1.31}{2018-05-09}{new} %To make it easier to adjust the definition of \cs{currentglossary} %within \cs{glsxtrglossentry}, this expands to the default %definition. (If redefined, it must fully expand to the appropriate %label.) % \begin{macrocode} \newcommand{\GlsXtrStandaloneGlossaryType}{\glsentrytype{\glscurrententrylabel}} % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrStandaloneSubEntryItem} %\changes{1.31}{2018-05-09}{new} %Used for sub-entries in standalone format. The argument is the %entry's label. % \begin{macrocode} \newcommand*{\GlsXtrStandaloneSubEntryItem}[1]{% \GlsXtrIfFieldEqNum{level}{#1}{1}{\glssubentryitem{#1}}{}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrglossentryother} %\changes{1.22}{2017-11-08}{new} %As \cs{glsxtrglossentry} but uses a different field. %First argument is code to use in the header. The second argument %is the entry's label. The third argument is the internal field %label. This needs to be expandable in case it occurs in a %sectioning command so it can't have an optional argument. % \begin{macrocode} \newcommand*{\glsxtrglossentryother}[3]{% \ifstrempty{#1}% {% \ifcsdef{glsxtrhead#3}% {% \glsxtrtitleorpdforheading {\@glsxtrglossentryother{#2}{#3}{#1}}% {\@gls@entry@field{#2}{#3}}% {\csuse{glsxtrhead#3}{#2}}% }% {% \glsxtrtitleorpdforheading {\@glsxtrglossentryother{#2}{#3}{#1}}% {\@gls@entry@field{#2}{#3}}% {\@gls@entry@field{\NoCaseChange{#2}}{#3}}% }% }% {% \glsxtrtitleorpdforheading {\@glsxtrglossentryother{#2}{#3}{#1}}% {\@gls@entry@field{#2}{#3}}% {#1}% }% } % \end{macrocode} %\end{macro} %\begin{macro}{\@glsxtrglossentryother} %\changes{1.22}{2017-11-08}{new} %As \cs{@glsxtrglossentry} but uses a different field. % \begin{macrocode} \newrobustcmd*{\@glsxtrglossentryother}[3]{% \glsxtrtitleorpdforheading {% \glsdoifexists{#1}% {% \begingroup \edef\glscurrententrylabel{\glsdetoklabel{#1}}% \edef\currentglossary{\GlsXtrStandaloneGlossaryType}% \ifglshasparent{#1}% {\GlsXtrStandaloneSubEntryItem{#1}}% {\glsentryitem{#1}}% \GlsXtrStandaloneEntryOther{#1}% \endgroup }% }% {\@gls@entry@field{#1}{#2}}% {#3}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrStandaloneEntryOther} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand*{\GlsXtrStandaloneEntryOther}[2]{% \glstarget{#1}{\glossentrynameother{#1}{#2}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\printunsrtglossary} %\changes{1.08}{2016-12-13}{new} %\changes{1.12}{2017-02-03}{added starred form} %\changes{1.44}{2020-03-23}{added check for \cs{@printgloss@checkexists}} %Similar to \cs{printnoidxglossary} but it displays all entries %defined for the given glossary without sorting. Check for \cs{@printgloss@checkexists} which was %introduced to \sty{glossaries} v4.46. % \begin{macrocode} \ifdef\@printgloss@checkexists { \newcommand*{\printunsrtglossary}{% \let\@printgloss@checkexists\@printgloss@checkexists@allowignored \@ifstar\s@printunsrtglossary\@printunsrtglossary } } { \newcommand*{\printunsrtglossary}{% \@ifstar\s@printunsrtglossary\@printunsrtglossary } } % \end{macrocode} %\end{macro} % %\begin{macro}{\@printunsrtglossary} %\changes{1.12}{2017-02-03}{new} %Unstarred version. % \begin{macrocode} \newcommand*{\@printunsrtglossary}[1][]{% \@printglossary{type=\glsdefaulttype,#1}{\@print@unsrt@glossary}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\s@printunsrtglossary} %\changes{1.12}{2017-02-03}{new} %Starred version. % \begin{macrocode} \newcommand*{\s@printunsrtglossary}[2][]{% \begingroup #2% \@printglossary{type=\glsdefaulttype,#1}{\@print@unsrt@glossary}% \endgroup } % \end{macrocode} %\end{macro} % %\begin{macro}{\printunsrtglossaries} %\changes{1.08}{2016-12-13}{new} %Similar to \cs{printnoidxglossaries} but it displays all entries %defined for the given glossary without sorting. % \begin{macrocode} \newcommand*{\printunsrtglossaries}{% \forallglossaries{\@@glo@type}{\printunsrtglossary[type=\@@glo@type]}% } % \end{macrocode} %\end{macro} %\begin{macro}{\@print@unsrt@glossary} %\changes{1.08}{2016-12-13}{new} % \begin{macrocode} \newcommand*{\@print@unsrt@glossary}{% \glossarysection[\glossarytoctitle]{\glossarytitle}% \glossarypreamble % \end{macrocode} %check for empty list % \begin{macrocode} \glsxtrifemptyglossary{\@glo@type}% {% \GlossariesExtraWarning{No entries defined in glossary `\@glo@type'}% }% {% % \end{macrocode} %\changes{1.16}{2017-06-15}{corrected misspelt command} % \begin{macrocode} \key@ifundefined{glossentry}{group}% {\let\@gls@getgrouptitle\@gls@noidx@getgrouptitle}% {\let\@gls@getgrouptitle\@glsxtr@unsrt@getgrouptitle}% \def\@gls@currentlettergroup{}% % \end{macrocode} %A loop within the tabular-like styles can cause problems, so %move the loop outside. % \begin{macrocode} \def\@glsxtr@doglossary{% \begin{theglossary}% \glossaryheader \glsresetentrylist }% \expandafter\@for\expandafter\glscurrententrylabel\expandafter :\expandafter=\csname glolist@\@glo@type\endcsname\do{% \ifdefempty{\glscurrententrylabel} {}% {% % \end{macrocode} %Provide a hook (for example to measure width). % \begin{macrocode} \let\glsxtr@process\@firstofone \let\printunsrtglossaryskipentry \@glsxtr@printunsrtglossaryskipentry \printunsrtglossaryentryprocesshook{\glscurrententrylabel}% % \end{macrocode} %Don't check group for child entries. % \begin{macrocode} \glsxtr@process {% \ifglsxtr@printgloss@groups % \end{macrocode} % This still uses \cs{ifglshasparent} to determine whether or not to % check for a change in the letter group. (It doesn't take the level % offset into account because \app{bib2gls} only saves the group % information for parentless entries.) % \begin{macrocode} \ifglshasparent{\glscurrententrylabel}{}% {% \@glsxtr@checkgroup\glscurrententrylabel \expandafter\appto\expandafter\@glsxtr@doglossary\expandafter {\@glsxtr@groupheading}% }% \fi \eappto\@glsxtr@doglossary{% \noexpand\@printunsrt@glossary@handler{\glscurrententrylabel}}% }% }% }% \appto\@glsxtr@doglossary{\end{theglossary}}% \printunsrtglossarypredoglossary \@glsxtr@doglossary }% \glossarypostamble } % \end{macrocode} %\end{macro} % %\begin{macro}{\printunsrtinnerglossary} %\changes{1.44}{2020-03-23}{new} %Similar to \cs{printunsrtglossary} but doesn't add the section %heading, preamble, postamble or start and end of \env{theglossary}. %Grouping is automatically applied so it may cause a problem within %tabular-like environments. The beginning and ending of %\env{theglossary} should be added around this command (but ensure %the style has been set first). The simplest way of doing this is to %place \cs{printunsrtinnerglossary} inside the %\env{printunsrtglossarywrap} environment. % \begin{macrocode} \newcommand*{\printunsrtinnerglossary}[3][]{% \begingroup \def\@glsxtr@printglossopts{#1}% \def\@glo@type{\glsdefaulttype}% \setkeys{printgloss}[title,toctitle,style,numberedsection,sort,label]{#1}% \let\currentglossary\@glo@type #2% \@print@unsrt@innerglossary #3% \endgroup } % \end{macrocode} %\end{macro} % %\begin{environment}{printunsrtglossarywrap} %\changes{1.44}{2020-03-23}{new} % \begin{macrocode} \newenvironment{printunsrtglossarywrap}[1][]% {% \def\@glsxtr@printglossopts{#1}% \def\@glo@type{\glsdefaulttype}% \def\glossarytitle{\csname @glotype@\@glo@type @title\endcsname}% \def\glossarytoctitle{\glossarytitle}% \let\org@glossarytitle\glossarytitle \def\@glossarystyle{% \ifx\@glossary@default@style\relax \GlossariesWarning{No default glossary style provided \MessageBreak for the glossary `\@glo@type'. \MessageBreak Using deprecated fallback. \MessageBreak To fix this set the style with \MessageBreak \string\setglossarystyle\space or use the \MessageBreak style key=value option}% \fi }% \def\gls@dotoctitle{\glssettoctitle{\@glo@type}}% \let\@org@glossaryentrynumbers\glossaryentrynumbers \@printgloss@setsort \setkeys{printgloss}{#1}% % \end{macrocode} % The type key simply allows the title to be set if the title key % isn't supplied. % \begin{macrocode} \ifglossaryexists*{\@glo@type}% {% \ifx\glossarytitle\org@glossarytitle \else \expandafter\let\csname @glotype@\@glo@type @title\endcsname \glossarytitle \fi \let\currentglossary\@glo@type }% {}% \let\org@glossaryentrynumbers\glossaryentrynumbers \let\glsnonextpages\@glsnonextpages \let\glsnextpages\@glsnextpages \let\nopostdesc\@nopostdesc \gls@dotoctitle \@glossarystyle \let\gls@org@glossaryentryfield\glossentry \let\gls@org@glossarysubentryfield\subglossentry \renewcommand{\glossentry}[1]{% \xdef\glscurrententrylabel{\glsdetoklabel{##1}}% \gls@org@glossaryentryfield{##1}% }% \renewcommand{\subglossentry}[2]{% \xdef\glscurrententrylabel{\glsdetoklabel{##2}}% \gls@org@glossarysubentryfield{##1}{##2}% }% \@gls@preglossaryhook \glossarysection[\glossarytoctitle]{\glossarytitle}% \glossarypreamble \begin{theglossary}% \glossaryheader \glsresetentrylist }% {% \end{theglossary}% \glossarypostamble \global\let\glossaryentrynumbers\@org@glossaryentrynumbers \global\let\warn@noprintglossary\relax } % \end{macrocode} %\end{environment} % %\begin{macro}{\@print@unsrt@innerglossary} %\changes{1.44}{2020-03-23}{new} %This is much like \cs{@print@unsrt@innerglossary} but only contains %what would normally be the content of the \env{theglossary}. % \begin{macrocode} \newcommand*{\@print@unsrt@innerglossary}{% % \end{macrocode} % No section header or preamble. % \begin{macrocode} \glsxtrifemptyglossary{\@glo@type}% {% \GlossariesExtraWarning{No entries defined in glossary `\@glo@type'}% }% {% \key@ifundefined{glossentry}{group}% {\let\@gls@getgrouptitle\@gls@noidx@getgrouptitle}% {\let\@gls@getgrouptitle\@glsxtr@unsrt@getgrouptitle}% \def\@gls@currentlettergroup{}% % \end{macrocode} %No header or reset. % \begin{macrocode} \def\@glsxtr@doglossary{}% \expandafter\@for\expandafter\glscurrententrylabel\expandafter :\expandafter=\csname glolist@\@glo@type\endcsname\do{% \ifdefempty{\glscurrententrylabel} {}% {% % \end{macrocode} %Provide a hook (for example to measure width). % \begin{macrocode} \let\glsxtr@process\@firstofone \let\printunsrtglossaryskipentry \@glsxtr@printunsrtglossaryskipentry \printunsrtglossaryentryprocesshook{\glscurrententrylabel}% % \end{macrocode} %Don't check group for child entries. % \begin{macrocode} \glsxtr@process {% \ifglsxtr@printgloss@groups % \end{macrocode} % This still uses \cs{ifglshasparent} to determine whether or not to % check for a change in the letter group. (It doesn't take the level % offset into account because \app{bib2gls} only saves the group % information for parentless entries.) % \begin{macrocode} \ifglshasparent{\glscurrententrylabel}{}% {% \@glsxtr@checkgroup\glscurrententrylabel \expandafter\appto\expandafter\@glsxtr@doglossary\expandafter {\@glsxtr@groupheading}% }% \fi \eappto\@glsxtr@doglossary{% \noexpand\@printunsrt@glossary@handler{\glscurrententrylabel}}% }% }% }% \printunsrtglossarypredoglossary \@glsxtr@doglossary }% % \end{macrocode} % No postamble. % \begin{macrocode} } % \end{macrocode} %\end{macro} % % %\begin{macro}{\printunsrtglossaryentryprocesshook} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\printunsrtglossaryentryprocesshook}[1]{} % \end{macrocode} %\end{macro} % %\begin{macro}{\printunsrtglossaryskipentry} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\printunsrtglossaryskipentry}{% \PackageError{glossaries-extra}{\string\printunsrtglossaryskipentry\space can only be used within \string\printunsrtglossaryentryprocesshook}{}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\printunsrtglossaryentryprocesshook} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\@glsxtr@printunsrtglossaryskipentry}{% \let\glsxtr@process\@gobble } % \end{macrocode} %\end{macro} % %\begin{macro}{\printunsrtglossarypredoglossary} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\printunsrtglossarypredoglossary}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\@printunsrt@glossary@handler} %\changes{1.16}{2017-06-15}{new} % \begin{macrocode} \newcommand{\@printunsrt@glossary@handler}[1]{% \xdef\glscurrententrylabel{#1}% \printunsrtglossaryhandler\glscurrententrylabel } % \end{macrocode} %\end{macro} % %\begin{macro}{\printunsrtglossaryhandler} %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newcommand{\printunsrtglossaryhandler}[1]{% \glsxtrunsrtdo{#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtriflabelinlist} %\begin{definition} %\cs{glsxtriflabelinlist}\marg{label}\marg{list}\marg{true}\marg{false} %\end{definition} %\changes{1.21}{2017-11-03}{new} %Might be useful for the handler to check if an entry label %or category label is contained in a list, so provide a user-level %version of \cs{@gls@ifinlist} which ensures the label and list are %fully expanded. % \begin{macrocode} \newrobustcmd*{\glsxtriflabelinlist}[4]{% \protected@edef\@glsxtr@doiflabelinlist{\noexpand\@gls@ifinlist{#1}{#2}}% \@glsxtr@doiflabelinlist{#3}{#4}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\print@op@unsrtglossaryunit} %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newcommand{\print@op@unsrtglossaryunit}[2][]{% \s@printunsrtglossary[type=\glsdefaulttype,#1]{% \printunsrtglossaryunitsetup{#2}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\printunsrtglossaryunitsetup} %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newcommand*{\printunsrtglossaryunitsetup}[1]{% \renewcommand{\printunsrtglossaryhandler}[1]{% \glsxtrfieldxifinlist{##1}{record.#1}{\csuse{the#1}} {\glsxtrunsrtdo{##1}}% {}% }% % \end{macrocode} %\changes{1.20}{2017-09-11}{switched from redefining \cs{glolinkprefix} to % \cs{@glsxtrhypernameprefix}} %Only the target names should have the prefixes adjusted as \cs{gls} %etc need the original \cs{glolinkprefix}. The \cs{@gobble} part %discards \cs{glolinkprefix}. % \begin{macrocode} \ifcsundef{theH#1}% {% \renewcommand*{\@glsxtrhypernameprefix}{record.#1.\csuse{the#1}.\@gobble}% }% {% \renewcommand*{\@glsxtrhypernameprefix}{record.#1.\csuse{theH#1}.\@gobble}% }% \renewcommand*{\glossarysection}[2][]{}% \appto\glossarypostamble{\glspar\medskip\glspar}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\print@noop@unsrtglossaryunit} %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newcommand{\print@noop@unsrtglossaryunit}[2][]{% \PackageError{glossaries-extra}{\string\printunsrtglossaryunit\space requires the record=only or record=alsoindex package option}{}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@unsrt@getgrouptitle} %\changes{1.11}{2017-01-19}{new} % \begin{macrocode} \newrobustcmd*{\@glsxtr@unsrt@getgrouptitle}[2]{% \protected@edef\@glsxtr@titlelabel{glsxtr@grouptitle@#1}% \@onelevel@sanitize\@glsxtr@titlelabel \ifcsdef{\@glsxtr@titlelabel} {\letcs{#2}{\@glsxtr@titlelabel}}% {\def#2{#1}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrunsrtdo} %\changes{1.12}{2017-02-03}{new} %Provide a user-level call to \cs{@glsxtr@noidx@do} to make it %easier to define a new handler. % \begin{macrocode} \newcommand{\glsxtrunsrtdo}{\@glsxtr@noidx@do} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrgroupfield} %\app{bib2gls} provides a supplementary field labelled %\texttt{secondarygroup} for secondary glossaries, so %provide a way of switching to that field. (The \gloskey{group} %key still needs checking. There's no associated key with the %internal field). %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\glsxtrgroupfield}{group} % \end{macrocode} %\end{macro} % %The \env{tabular}-like glossary styles cause quite a problem %with the iterative approach. In particular for the group skip. %To compensate for this, the groups are now determined while %\cs{@glsxtr@doglossary} is being constructed rather than in the %handler. %\begin{macro}{\@glsxtr@checkgroup} %\changes{1.21}{2017-11-03}{new} %The argument is the entry's label. (This block of code was %formerly in \cs{@glsxtr@noidx@do}.) Now that this is no longer %within a tabular environment, the global definitions aren't needed. %The result is now stored in \cs{@glsxtr@groupheading}, which will %be empty if no heading is required. % \begin{macrocode} \newcommand*{\@glsxtr@checkgroup}[1]{% \def\@glsxtr@groupheading{}% \key@ifundefined{glossentry}{group}% {% \letcs{\@gls@sort}{glo@\glsdetoklabel{#1}@sort}% \expandafter\glo@grabfirst\@gls@sort{}{}\@nil }% {% % \end{macrocode} %\changes{1.16}{2017-06-15}{use \cs{csuse} instead of \cs{csname}} % \begin{macrocode} \protected@edef\@glo@thislettergrp{% \csuse{glo@\glsdetoklabel{#1}@\glsxtrgroupfield}}% }% \ifdefequal{\@glo@thislettergrp}{\@gls@currentlettergroup}% {}% {% \ifdefempty{\@gls@currentlettergroup}{}% {\def\@glsxtr@groupheading{\glsgroupskip}}% \eappto\@glsxtr@groupheading{% \noexpand\glsgroupheading{\expandonce\@glo@thislettergrp}% }% }% \let\@gls@currentlettergroup\@glo@thislettergrp } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrLocationField} %\changes{1.37}{2018-11-30}{new} %Stores the internal name of the location field. % \begin{macrocode} \newcommand*{\GlsXtrLocationField}{location} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@noidx@do} %\changes{1.11}{2017-01-19}{new} %Minor modification of \cs{@gls@noidx@do} to check for location %field if present, but also need to check for the \gloskey{group} %field. % \begin{macrocode} \newcommand{\@glsxtr@noidx@do}[1]{% \ifglsentryexists{#1}% {% \global\letcs{\@gls@loclist}{glo@\glsdetoklabel{#1}@loclist}% \global\letcs{\@gls@location}{glo@\glsdetoklabel{#1}@\GlsXtrLocationField}% % \end{macrocode} % Use level number to determine whether or not this entry has a % parent. % \begin{macrocode} \gls@level=\numexpr\csuse{glo@\glsdetoklabel{#1}@level}+\@glsxtr@leveloffset\relax \ifnum\gls@level>0 \let\@glsxtr@ifischild\@firstoftwo \else \let\@glsxtr@ifischild\@secondoftwo \fi % \end{macrocode} %\changes{1.44}{2020-03-23}{replaced \cs{ifglshasparent} with \cs{@glsxtr@ifischild}} %Some glossary styles (such as topicmcols) save the level using %\cs{def} so make sure \cs{gls@level} is expanded before being %passed to \cs{subglossentry}. % \begin{macrocode} \@glsxtr@ifischild {% \ifdefvoid{\@gls@location}% {% \ifdefvoid{\@gls@loclist}% {% \expandafter\subglossentry\expandafter{\number\gls@level}{#1}{}% }% {% \expandafter\subglossentry\expandafter{\number\gls@level}{#1}% {% \glossaryentrynumbers{\glsnoidxloclist{\@gls@loclist}}% }% }% }% {% \expandafter\subglossentry\expandafter {\number\gls@level}{#1}{\glossaryentrynumbers{\@gls@location}}% }% }% {% % \end{macrocode} %\changes{1.21}{2017-11-03}{removed code dealing with the group} % \begin{macrocode} \ifdefvoid{\@gls@location}% {% \ifdefvoid{\@gls@loclist} {% \glossentry{#1}{}% }% {% \glossentry{#1}% {% \glossaryentrynumbers{\glsnoidxloclist{\@gls@loclist}}% }% }% }% {% \glossentry{#1}% {% \glossaryentrynumbers{\@gls@location}% }% }% }% }% {}% } % \end{macrocode} %\end{macro} % %Provide a way to conveniently define commands that behaves like %\cs{gls} with a label prefix. % %It's possible that the user might want minor variations %with the same prefix but different default options, so %use a counter to provide unique inner commands. %\begin{macro}{\glsxtrnewgls} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcount\@glsxtrnewgls@inner % \end{macrocode} %\end{macro} %(The default options supplied in \meta{options} below %could possibly be used to form the inner control sequence name to %help make it unique, but it might feasibly contain %\gloskey[glslink]{thevalue} where the value might contain commands.) % %\begin{macro}{\@glsxtr@providenewgls} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand*{\@glsxtr@providenewgls}{% \protected@write\@auxout{}{\string\providecommand{\string\@glsxtr@newglslike}[2]{}}% \let\@glsxtr@providenewgls\relax } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtridentifyglslike} %\changes{1.37}{2018-11-30}{new} %Identify the command given in the second argument for the benefit %of \gls{bib2gls}. % \begin{macrocode} \newcommand{\glsxtridentifyglslike}[2]{% \ifdefequal\@glsxtr@record@setting\@glsxtr@record@setting@off {}% {% \@glsxtr@providenewgls \protected@write\@auxout{}{\string\@glsxtr@newglslike{#1}{\string#2}}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtrnewgls} %\changes{1.21}{2017-11-03}{new} %\begin{definition} %\cs{glsxtrnewgls}\oarg{options}\marg{prefix}\marg{cs}\marg{inner cs %name} %\end{definition} % % \begin{macrocode} \newcommand*{\@glsxtrnewgls}[4]{% \ifdef{#3}% {% \PackageError{glossaries-extra}{Command \string#3\space already defined}{}% }% {% % \end{macrocode} %Write information to the aux file for bib2gls. % \begin{macrocode} \glsxtridentifyglslike{#2}{#3}% \ifcsdef{@#4like@#2}% {% \advance\@glsxtrnewgls@inner by \@ne \def\@glsxtrnewgls@innercsname{@#4like\number\@glsxtrnewgls@inner @#2}% }% {\def\@glsxtrnewgls@innercsname{@#4like@#2}}% \expandafter\newrobustcmd\expandafter*\expandafter #3\expandafter{\expandafter\@gls@hyp@opt\csname\@glsxtrnewgls@innercsname\endcsname}% \ifstrempty{#1}% {% \expandafter\newcommand\expandafter*\csname\@glsxtrnewgls@innercsname\endcsname[2][]{% \new@ifnextchar[% {\csname @#4@\endcsname{##1}{#2##2}}% {\csname @#4@\endcsname{##1}{#2##2}[]}% }% }% {% \expandafter\newcommand\expandafter*\csname\@glsxtrnewgls@innercsname\endcsname[2][]{% \new@ifnextchar[% {\csname @#4@\endcsname{#1,##1}{#2##2}}% {\csname @#4@\endcsname{#1,##1}{#2##2}[]}% }% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrnewgls} %\begin{definition} %\cs{glsxtrnewgls}\oarg{options}\marg{prefix}\marg{cs} %\end{definition} %The first argument prepends to the options and the second argument is the prefix. %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newrobustcmd*{\glsxtrnewgls}[3][]{% \@glsxtrnewgls{#1}{#2}{#3}{gls}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrnewglslike} %Provide a way to conveniently define commands that behave like %\cs{gls}, \cs{glspl}, \cs{Gls} and \cs{Glspl} with a label prefix. %The first argument prepends to the options and the second argument is the prefix. %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newrobustcmd*{\glsxtrnewglslike}[6][]{% \@glsxtrnewgls{#1}{#2}{#3}{gls}% \@glsxtrnewgls{#1}{#2}{#4}{glspl}% \@glsxtrnewgls{#1}{#2}{#5}{Gls}% \@glsxtrnewgls{#1}{#2}{#6}{Glspl}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrnewGLSlike} %Provide a way to conveniently define commands that behave like %\cs{GLS}, \cs{GLSpl} with a label prefix. %The first argument prepends to the options and the second argument is the prefix. %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newrobustcmd*{\glsxtrnewGLSlike}[4][]{% \@glsxtrnewgls{#1}{#2}{#3}{GLS}% \@glsxtrnewgls{#1}{#2}{#4}{GLSpl}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrnewrgls} %As \cs{glsxtrnewgls} but for \cs{rgls}. %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newrobustcmd*{\glsxtrnewrgls}[3][]{% \@glsxtrnewgls{#1}{#2}{#3}{rgls}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrnewrglslike} %As \cs{glsxtrnewglslike} but for \cs{rgls} etc. %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newrobustcmd*{\glsxtrnewrglslike}[6][]{% \@glsxtrnewgls{#1}{#2}{#3}{rgls}% \@glsxtrnewgls{#1}{#2}{#4}{rglspl}% \@glsxtrnewgls{#1}{#2}{#5}{rGls}% \@glsxtrnewgls{#1}{#2}{#6}{rGlspl}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrnewrGLSlike} %\changes{1.21}{2017-11-03}{new} %As \cs{glsxtrnewGLSlike} but for \cs{rGLS} etc. % \begin{macrocode} \newrobustcmd*{\glsxtrnewrGLSlike}[4][]{% \@glsxtrnewgls{#1}{#2}{#3}{rGLS}% \@glsxtrnewgls{#1}{#2}{#4}{rGLSpl}% } % \end{macrocode} %\end{macro} % %Provide easy access to record count fields. %\begin{macro}{\GlsXtrTotalRecordCount} %\changes{1.21}{2017-11-03}{new} %Access total record count. This is designed to %be expandable. The argument is the label. % \begin{macrocode} \newcommand*{\GlsXtrTotalRecordCount}[1]{% \ifcsdef{glo@\glsdetoklabel{#1}@recordcount}% {\csname glo@\glsdetoklabel{#1}@recordcount\endcsname}% {0}% } % \end{macrocode} %\end{macro} %\begin{macro}{\GlsXtrRecordCount} %\changes{1.21}{2017-11-03}{new} %Access record count for a particular counter. The first argument is the label. %The second argument is the counter name. % \begin{macrocode} \newcommand*{\GlsXtrRecordCount}[2]{% \ifcsdef{glo@\glsdetoklabel{#1}@recordcount.#2}% {\csname glo@\glsdetoklabel{#1}@recordcount.#2\endcsname}% {0}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrLocationRecordCount} %\changes{1.21}{2017-11-03}{new} %Access record count for a particular counter and location. %The first argument is the label. %The second argument is the counter name. %The third argument is the location. %This command shouldn't be used if the location doesn't fully %expand unless \cs{glsxtrdetoklocation} can be set to something %sensible. % \begin{macrocode} \newcommand*{\GlsXtrLocationRecordCount}[3]{% \ifcsdef{glo@\glsdetoklabel{#1}@recordcount.#2.\glsxtrdetoklocation{#3}}% {\csname glo@\glsdetoklabel{#1}@recordcount.#2.\glsxtrdetoklocation{#3}\endcsname}% {0}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrdetoklocation} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\glsxtrdetoklocation}[1]{#1} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrenablerecordcount} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\glsxtrenablerecordcount}{% \renewcommand*{\gls}{\rgls}% \renewcommand*{\Gls}{\rGls}% \renewcommand*{\glspl}{\rglspl}% \renewcommand*{\Glspl}{\rGlspl}% \renewcommand*{\GLS}{\rGLS}% \renewcommand*{\GLSpl}{\rGLSpl}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrrecordtriggervalue} %\changes{1.21}{2017-11-03}{new} %The value used by the record trigger test. %The argument is the entry's label. % \begin{macrocode} \newcommand*{\glsxtrrecordtriggervalue}[1]{% \GlsXtrTotalRecordCount{#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrSetRecordCountAttribute} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\GlsXtrSetRecordCountAttribute}[2]{% \@for\@glsxtr@cat:=#1\do {% \ifdefempty{\@glsxtr@cat}{}% {% \glssetcategoryattribute{\@glsxtr@cat}{recordcount}{#2}% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrifrecordtrigger} %\begin{definition} %\cs{glsxtrifrecordtrigger}\marg{label}\marg{trigger format}\marg{normal} %\end{definition} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\glsxtrifrecordtrigger}[3]{% \glshasattribute{#1}{recordcount}% {% \ifnum\glsxtrrecordtriggervalue{#1}>\glsgetattribute{#1}{recordcount}\relax #3% \else #2% \fi }% {#3}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@rglstrigger@record} %\changes{1.21}{2017-11-03}{new} %Still need a record to ensure that \app{bib2gls} selects the entry. % \begin{macrocode} \newcommand*{\@glsxtr@rglstrigger@record}[3]{% \edef\glslabel{\glsdetoklabel{#2}}% \let\@gls@link@label\glslabel \def\@glsxtr@thevalue{}% \def\@glsxtr@theHvalue{\@glsxtr@thevalue}% \def\@glsnumberformat{glstriggerrecordformat}% \edef\@gls@counter{\csname glo@\glslabel @counter\endcsname}% \edef\glstype{\csname glo@\glslabel @type\endcsname}% \def\@glsxtr@thevalue{}% \def\@glsxtr@theHvalue{\@glsxtr@thevalue}% \glsxtrinitwrgloss \glslinkpresetkeys \setkeys{glslink}{#1}% \glslinkpostsetkeys \ifdefempty{\@glsxtr@thevalue}% {% \@gls@saveentrycounter }% {% \let\theglsentrycounter\@glsxtr@thevalue \def\theHglsentrycounter{\@glsxtr@theHvalue}% }% \ifglsxtrinitwrglossbefore \@do@wrglossary{#2}% \fi #3% \ifglsxtrinitwrglossbefore \else \@do@wrglossary{#2}% \fi \ifKV@glslink@local \glslocalunset{#2}% \else \glsunset{#2}% \fi } % \end{macrocode} %\end{macro} % %\begin{macro}{\glstriggerrecordformat} %\changes{1.21}{2017-11-03}{new} %Typically won't be used as it should be recognised as a special %type of ignored location by \app{bib2gls}. % \begin{macrocode} \newcommand*{\glstriggerrecordformat}[1]{} % \end{macrocode} %\end{macro} % %\begin{macro}{\rgls} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newrobustcmd*{\rgls}{\@gls@hyp@opt\@rgls} % \end{macrocode} %\end{macro} %\begin{macro}{\@rgls} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\@rgls}[2][]{% \new@ifnextchar[{\@rgls@{#1}{#2}}{\@rgls@{#1}{#2}[]}% } % \end{macrocode} %\end{macro} %\begin{macro}{\@rgls@} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \def\@rgls@#1#2[#3]{% \glsxtrifrecordtrigger{#2}% {% \@glsxtr@rglstrigger@record{#1}{#2}{\rglsformat{#2}{#3}}% }% {% \@gls@{#1}{#2}[#3]% }% }% % \end{macrocode} %\end{macro} % %\begin{macro}{\rglspl} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newrobustcmd*{\rglspl}{\@gls@hyp@opt\@rglspl} % \end{macrocode} %\end{macro} %\begin{macro}{\@rglspl} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\@rglspl}[2][]{% \new@ifnextchar[{\@rglspl@{#1}{#2}}{\@rglspl@{#1}{#2}[]}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@rglspl@} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \def\@rglspl@#1#2[#3]{% \glsxtrifrecordtrigger{#2}% {% \@glsxtr@rglstrigger@record{#1}{#2}{\rglsplformat{#2}{#3}}% }% {% \@glspl@{#1}{#2}[#3]% }% }% % \end{macrocode} %\end{macro} % %\begin{macro}{\rGls} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newrobustcmd*{\rGls}{\@gls@hyp@opt\@rGls} % \end{macrocode} %\end{macro} %\begin{macro}{\@rGls} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\@rGls}[2][]{% \new@ifnextchar[{\@rGls@{#1}{#2}}{\@rGls@{#1}{#2}[]}% } % \end{macrocode} %\end{macro} %\begin{macro}{\@rGls@} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \def\@rGls@#1#2[#3]{% \glsxtrifrecordtrigger{#2}% {% \@glsxtr@rglstrigger@record{#1}{#2}{\rGlsformat{#2}{#3}}% }% {% \@Gls@{#1}{#2}[#3]% }% }% % \end{macrocode} %\end{macro} % %\begin{macro}{\rGlspl} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newrobustcmd*{\rGlspl}{\@gls@hyp@opt\@rGlspl} % \end{macrocode} %\end{macro} %\begin{macro}{\@rGlspl} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\@rGlspl}[2][]{% \new@ifnextchar[{\@rGlspl@{#1}{#2}}{\@rGlspl@{#1}{#2}[]}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@rGlspl@} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \def\@rGlspl@#1#2[#3]{% \glsxtrifrecordtrigger{#2}% {% \@glsxtr@rglstrigger@record{#1}{#2}{\rGlsplformat{#2}{#3}}% }% {% \@Glspl@{#1}{#2}[#3]% }% }% % \end{macrocode} %\end{macro} % %\begin{macro}{\rGLS} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newrobustcmd*{\rGLS}{\@gls@hyp@opt\@rGLS} % \end{macrocode} %\end{macro} %\begin{macro}{\@rGLS} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\@rGLS}[2][]{% \new@ifnextchar[{\@rGLS@{#1}{#2}}{\@rGLS@{#1}{#2}[]}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@rGLS@} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \def\@rGLS@#1#2[#3]{% \glsxtrifrecordtrigger{#2}% {% \@glsxtr@rglstrigger@record{#1}{#2}{\rGLSformat{#2}{#3}}% }% {% \@GLS@{#1}{#2}[#3]% }% }% % \end{macrocode} %\end{macro} % %\begin{macro}{\rGLSpl} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newrobustcmd*{\rGLSpl}{\@gls@hyp@opt\@rGLSpl} % \end{macrocode} %\end{macro} %\begin{macro}{\@rGLSpl} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\@rGLSpl}[2][]{% \new@ifnextchar[{\@rGLSpl@{#1}{#2}}{\@rGLSpl@{#1}{#2}[]}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@rGLSpl@} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \def\@rGLSpl@#1#2[#3]{% \glsxtrifrecordtrigger{#2}% {% \@glsxtr@rglstrigger@record{#1}{#2}{\rGLSplformat{#2}{#3}}% }% {% \@GLSpl@{#1}{#2}[#3]% }% }% % \end{macrocode} %\end{macro} % %\begin{macro}{\rglsformat} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\rglsformat}[2]{% \glsifregular{#1} {\glsentryfirst{#1}}% {\ifglshaslong{#1}{\glsentrylong{#1}}{\glsentryfirst{#1}}}#2% } % \end{macrocode} %\end{macro} % %\begin{macro}{\rglsplformat} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\rglsplformat}[2]{% \glsifregular{#1} {\glsentryfirstplural{#1}}% {\ifglshaslong{#1}{\glsentrylongplural{#1}}{\glsentryfirstplural{#1}}}#2% } % \end{macrocode} %\end{macro} % %\begin{macro}{\rGlsformat} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\rGlsformat}[2]{% \glsifregular{#1} {\Glsentryfirst{#1}}% {\ifglshaslong{#1}{\Glsentrylong{#1}}{\Glsentryfirst{#1}}}#2% } % \end{macrocode} %\end{macro} % %\begin{macro}{\rGlsplformat} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\rGlsplformat}[2]{% \glsifregular{#1} {\Glsentryfirstplural{#1}}% {\ifglshaslong{#1}{\Glsentrylongplural{#1}}{\Glsentryfirstplural{#1}}}#2% } % \end{macrocode} %\end{macro} % %\begin{macro}{\rGLSformat} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\rGLSformat}[2]{% \expandafter\mfirstucMakeUppercase\expandafter{\rglsformat{#1}{#2}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\rGLSplformat} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\rGLSplformat}[2]{% \expandafter\mfirstucMakeUppercase\expandafter{\rglsplformat{#1}{#2}}% } % \end{macrocode} %\end{macro} % %\section{Link Counting} %\label{sec:linkcount} %This is different to the entry counting provided by the base %package (which counts the number of times the first use flag is %unset). Instead, this method hooks into \cs{@gls@link} (through %\cs{glsxtr@inc@linkcount}) to increment an associated counter. %To preserve resources, the counter is only defined if it needs to %be incremented. This method is independent of the presence of %hyperlinks. (The \qt{link} part of the name refers to \cs{@gls@link} %not \cs{hyperlink}.) % %\begin{macro}{\@glsxtr@do@inc@linkcount} %\changes{1.26}{2018-01-05}{new} %This performs the actual incrementing and counter definition. %The counter is given by \cs{c@glsxtr@linkcount@\meta{label}} where %\meta{label} is the entry's label. Since this is performed within %\cs{@gls@link} the label can be accessed with \cs{glslabel}. % \begin{macrocode} \newcommand{\@glsxtr@do@inc@linkcount}{% % \end{macrocode} %Does this entry have the \catattr{linkcount} attribute set? % \begin{macrocode} \glsifattribute{\glslabel}{linkcount}{true}% {% % \end{macrocode} %Does the counter exist? % \begin{macrocode} \ifcsdef{c@glsxtr@linkcount@\glslabel}{}% {% % \end{macrocode} %Counter doesn't exist, so define it. % \begin{macrocode} \newcounter{glsxtr@linkcount@\glslabel}% % \end{macrocode} %If \catattr{linkcountmaster} is set, add to counter reset. % \begin{macrocode} \glshasattribute{\glslabel}{linkcountmaster}% {% % \end{macrocode} %Need to ensure values are fully expanded. % \begin{macrocode} \begingroup \edef\x{\endgroup\noexpand\@addtoreset{glsxtr@linkcount@\glslabel}% {\glsgetattribute{\glslabel}{linkcountmaster}}}% \x }% {}% }% % \end{macrocode} % Increment counter: % \begin{macrocode} \glsxtrinclinkcounter{glsxtr@linkcount@\glslabel}% }% {}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrinclinkcounter} %\changes{1.26}{2018-01-05}{new} %May be redefined to use \cs{refstepcounter} if required. % \begin{macrocode} \newcommand*{\glsxtrinclinkcounter}[1]{\stepcounter{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrLinkCounterValue} %\changes{1.26}{2018-01-05}{new} %Expands to the associated link counter register or 0 if not %defined. % \begin{macrocode} \newcommand*{\GlsXtrLinkCounterValue}[1]{% \ifcsundef{c@glsxtr@linkcount@#1}{0}{\csname c@glsxtr@linkcount@#1\endcsname}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrTheLinkCounter} %\changes{1.26}{2018-01-05}{new} %Expands to the display value of the associated link counter or 0 if not %defined. % \begin{macrocode} \newcommand*{\GlsXtrTheLinkCounter}[1]{% \ifcsundef{theglsxtr@linkcount@#1}{0}% {\csname theglsxtr@linkcount@#1\endcsname}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrIfLinkCounterDef} %\changes{1.26}{2018-01-05}{new} %Tests if the counter has been defined % \begin{macrocode} \newcommand*{\GlsXtrIfLinkCounterDef}[3]{% \ifcsundef{theglsxtr@linkcount@#1}{#3}{#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrLinkCounterName} %\changes{1.26}{2018-01-05}{new} %Expands to the associated link counter name. (No check for %existence.) % \begin{macrocode} \newcommand*{\GlsXtrLinkCounterName}[1]{glsxtr@linkcount@#1} % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrEnableLinkCounting} %\changes{1.26}{2018-01-05}{new} %\begin{definition} %\cs{GlsXtrEnableLinkCounting}\oarg{master counter}\marg{categories} %\end{definition} %Enable link counting for the given categories. % \begin{macrocode} \newcommand*{\GlsXtrEnableLinkCounting}[2][]{% \let\glsxtr@inc@linkcount\@glsxtr@do@inc@linkcount \@for\@glsxtr@label:=#2\do {% \glssetcategoryattribute{\@glsxtr@label}{linkcount}{true}% \ifstrempty{#1}{}% {% \ifcsundef{c@#1}% {\@nocounterr{#1}}% {\glssetcategoryattribute{\@glsxtr@label}{linkcountmaster}{#1}}% }% }% } \@onlypreamble\GlsXtrEnableLinkCounting % \end{macrocode} %\end{macro} % %\section{Integration with glossaries-accsupp} % Provide better integration with the \sty{glossaries-accsupp} % package. (Must be loaded before the main code of % \styfmt{glossaries-extra} either explicitly or through the % \pkgopt{accsupp} package option.) % % These commands have their definitions set according to whether % or not \styfmt{glossaries-extra} has been loaded. %\changes{0.5.2}{2015-12-08}{fixed typo in glossaries-accsupp and tidied up code to use % just one \cs{@ifpackageloaded}} % \begin{macrocode} \@ifpackageloaded{glossaries-accsupp} { % \end{macrocode} % Define (or redefine) commands to use the accessibility % information. %\begin{macro}{\glsaccessname} % Display the \gloskey{name} value (no link and no check for existence). %\changes{0.3}{2015-12-02}{new} % \begin{macrocode} \newcommand*{\glsaccessname}[1]{% \glsnameaccessdisplay {% \glsentryname{#1}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccessname} % Display the \gloskey{name} value (no link and no check for existence) % with the first letter converted to upper case. %\changes{0.5.1}{2015-12-07}{new} % \begin{macrocode} \newcommand*{\Glsaccessname}[1]{% \glsnameaccessdisplay {% \Glsentryname{#1}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccessname} % Display the \gloskey{name} value (no link and no check for existence) % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccessname}[1]{% \glsnameaccessdisplay {% \mfirstucMakeUppercase{\glsentryname{#1}}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsaccesstext} % Display the \gloskey{text} value (no link and no check for existence). %\changes{0.3}{2015-12-02}{new} % \begin{macrocode} \newcommand*{\glsaccesstext}[1]{% \glstextaccessdisplay {% \glsentrytext{#1}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccesstext} % Display the \gloskey{text} value (no link and no check for existence) % with the first letter converted to upper case. %\changes{0.5.1}{2015-12-02}{new} % \begin{macrocode} \newcommand*{\Glsaccesstext}[1]{% \glstextaccessdisplay {% \Glsentrytext{#1}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccesstext} % Display the \gloskey{text} value (no link and no check for existence) % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccesstext}[1]{% \glstextaccessdisplay {% \mfirstucMakeUppercase{\glsentrytext{#1}}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsaccessplural} % Display the \gloskey{plural} value (no link and no check for existence). %\changes{0.3}{2015-12-02}{new} % \begin{macrocode} \newcommand*{\glsaccessplural}[1]{% \glspluralaccessdisplay {% \glsentryplural{#1}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccessplural} % Display the \gloskey{plural} value (no link and no check for existence) % with the first letter converted to upper case. %\changes{0.5.1}{2015-12-07}{new} % \begin{macrocode} \newcommand*{\Glsaccessplural}[1]{% \glspluralaccessdisplay {% \Glsentryplural{#1}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccessplural} % Display the \gloskey{plural} value (no link and no check for existence) % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccessplural}[1]{% \glspluralaccessdisplay {% \mfirstucMakeUppercase{\glsentryplural{#1}}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsaccessfirst} % Display the \gloskey{first} value (no link and no check for existence). %\changes{0.3}{2015-12-02}{new} % \begin{macrocode} \newcommand*{\glsaccessfirst}[1]{% \glsfirstaccessdisplay {% \glsentryfirst{#1}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccessfirst} % Display the \gloskey{first} value (no link and no check for existence) % with the first letter converted to upper case. %\changes{0.5.1}{2015-12-07}{new} % \begin{macrocode} \newcommand*{\Glsaccessfirst}[1]{% \glsfirstaccessdisplay {% \Glsentryfirst{#1}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccessfirst} % Display the \gloskey{first} value (no link and no check for existence) % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccessfirst}[1]{% \glsfirstaccessdisplay {% \mfirstucMakeUppercase{\glsentryfirst{#1}}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsaccessfirstplural} % Display the \gloskey{firstplural} value (no link and no check for existence). %\changes{0.3}{2015-12-02}{new} % \begin{macrocode} \newcommand*{\glsaccessfirstplural}[1]{% \glsfirstpluralaccessdisplay {% \glsentryfirstplural{#1}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccessfirstplural} % Display the \gloskey{firstplural} value (no link and no check for existence) % with the first letter converted to upper case. %\changes{0.5.1}{2015-12-07}{new} % \begin{macrocode} \newcommand*{\Glsaccessfirstplural}[1]{% \glsfirstpluralaccessdisplay {% \Glsentryfirstplural{#1}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccessfirstplural} % Display the \gloskey{firstplural} value (no link and no check for existence) % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccessfirstplural}[1]{% \glsfirstpluralaccessdisplay {% \mfirstucMakeUppercase{\glsentryfirstplural{#1}}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsaccesssymbol} % Display the \gloskey{symbol} value (no link and no check for existence). %\changes{0.3}{2015-12-02}{new} % \begin{macrocode} \newcommand*{\glsaccesssymbol}[1]{% \glssymbolaccessdisplay {% \glsentrysymbol{#1}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccesssymbol} % Display the \gloskey{symbol} value (no link and no check for existence) % with the first letter converted to upper case. %\changes{0.5.1}{2015-12-07}{new} % \begin{macrocode} \newcommand*{\Glsaccesssymbol}[1]{% \glssymbolaccessdisplay {% \Glsentrysymbol{#1}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccesssymbol} % Display the \gloskey{symbol} value (no link and no check for existence) % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccesssymbol}[1]{% \glssymbolaccessdisplay {% \mfirstucMakeUppercase{\glsentrysymbol{#1}}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsaccesssymbolplural} % Display the \gloskey{symbolplural} value (no link and no check for existence). %\changes{0.3}{2015-12-02}{new} % \begin{macrocode} \newcommand*{\glsaccesssymbolplural}[1]{% \glssymbolpluralaccessdisplay {% \glsentrysymbolplural{#1}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccesssymbolplural} % Display the \gloskey{symbolplural} value (no link and no check for existence) % with the first letter converted to upper case. %\changes{0.5.1}{2015-12-07}{new} % \begin{macrocode} \newcommand*{\Glsaccesssymbolplural}[1]{% \glssymbolpluralaccessdisplay {% \Glsentrysymbolplural{#1}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccesssymbolplural} % Display the \gloskey{symbolplural} value (no link and no check for existence) % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccesssymbolplural}[1]{% \glssymbolpluralaccessdisplay {% \mfirstucMakeUppercase{\glsentrysymbolplural{#1}}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsaccessdesc} % Display the \gloskey{desc} value (no link and no check for existence). %\changes{0.3}{2015-12-02}{new} % \begin{macrocode} \newcommand*{\glsaccessdesc}[1]{% \glsdescriptionaccessdisplay {% \glsentrydesc{#1}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccessdesc} % Display the \gloskey{desc} value (no link and no check for existence) % with the first letter converted to upper case. %\changes{0.5.1}{2015-12-07}{new} % \begin{macrocode} \newcommand*{\Glsaccessdesc}[1]{% \glsdescriptionaccessdisplay {% \Glsentrydesc{#1}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccessdesc} % Display the \gloskey{desc} value (no link and no check for existence) % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccessdesc}[1]{% \glsdescriptionaccessdisplay {% \mfirstucMakeUppercase{\glsentrydesc{#1}}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsaccessdescplural} % Display the \gloskey{descplural} value (no link and no check for existence). %\changes{0.3}{2015-12-02}{new} % \begin{macrocode} \newcommand*{\glsaccessdescplural}[1]{% \glsdescriptionpluralaccessdisplay {% \glsentrydescplural{#1}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccessdescplural} % Display the \gloskey{descplural} value (no link and no check for existence) % with the first letter converted to upper case. %\changes{0.5.1}{2015-12-07}{new} % \begin{macrocode} \newcommand*{\Glsaccessdescplural}[1]{% \glsdescriptionpluralaccessdisplay {% \Glsentrydescplural{#1}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccessdescplural} % Display the \gloskey{descplural} value (no link and no check for existence) % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccessdescplural}[1]{% \glsdescriptionpluralaccessdisplay {% \mfirstucMakeUppercase{\glsentrydescplural{#1}}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsaccessshort} % Display the short form (no link and no check for existence). %\changes{0.3}{2015-12-02}{new} % \begin{macrocode} \newcommand*{\glsaccessshort}[1]{% \glsshortaccessdisplay {% \glsentryshort{#1}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccessshort} % Display the short form with first letter converted to uppercase % (no link and no check for existence). %\changes{0.3}{2015-12-02}{new} % \begin{macrocode} \newcommand*{\Glsaccessshort}[1]{% \glsshortaccessdisplay {% \Glsentryshort{#1}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccessshort} % Display the \gloskey{short} value (no link and no check for existence) % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccessshort}[1]{% \glsshortaccessdisplay {% \mfirstucMakeUppercase{\glsentryshort{#1}}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsaccessshortpl} % Display the short plural form (no link and no check for existence). %\changes{0.3}{2015-12-02}{new} % \begin{macrocode} \newcommand*{\glsaccessshortpl}[1]{% \glsshortpluralaccessdisplay {% \glsentryshortpl{#1}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccessshortpl} % Display the short plural form with first letter converted to % uppercase (no link and no check for existence). %\changes{0.3}{2015-12-02}{new} % \begin{macrocode} \newcommand*{\Glsaccessshortpl}[1]{% \glsshortpluralaccessdisplay {% \Glsentryshortpl{#1}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccessshortpl} % Display the \gloskey{shortplural} value (no link and no check for existence) % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccessshortpl}[1]{% \glsshortpluralaccessdisplay {% \mfirstucMakeUppercase{\glsentryshortpl{#1}}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsaccesslong} % Display the long form (no link and no check for existence). %\changes{0.3}{2015-12-02}{new} % \begin{macrocode} \newcommand*{\glsaccesslong}[1]{% \glslongaccessdisplay{\glsentrylong{#1}}{#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccesslong} % Display the long form (no link and no check for existence). %\changes{0.3}{2015-12-02}{new} % \begin{macrocode} \newcommand*{\Glsaccesslong}[1]{% \glslongaccessdisplay{\Glsentrylong{#1}}{#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccesslong} % Display the \gloskey{long} value (no link and no check for existence) % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccesslong}[1]{% \glslongaccessdisplay {% \mfirstucMakeUppercase{\glsentrylong{#1}}% }% {#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsaccesslongpl} % Display the long plural form (no link and no check for existence). %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\glsaccesslongpl}[1]{% \glslongpluralaccessdisplay{\glsentrylongpl{#1}}{#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccesslongpl} % Display the long plural form (no link and no check for existence). %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\Glsaccesslongpl}[1]{% \glslongpluralaccessdisplay{\Glsentrylongpl{#1}}{#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccesslongpl} % Display the \gloskey{longplural} value (no link and no check for existence) % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccesslongpl}[1]{% \glslongpluralaccessdisplay {% \mfirstucMakeUppercase{\glsentrylongpl{#1}}% }% {#1}% } % \end{macrocode} %\end{macro} % % Keys for accessibility support. % \begin{macrocode} \define@key{glsxtrabbrv}{access}{% \def\@gls@nameaccess{#1}% } % \end{macrocode} % % \begin{macrocode} \define@key{glsxtrabbrv}{textaccess}{% \def\@gls@textaccess{#1}% } % \end{macrocode} % % \begin{macrocode} \define@key{glsxtrabbrv}{pluralaccess}{% \def\@gls@pluralaccess{#1}% } % \end{macrocode} % % \begin{macrocode} \define@key{glsxtrabbrv}{firstaccess}{% \def\@gls@firstaccess{#1}% } % \end{macrocode} % % \begin{macrocode} \define@key{glsxtrabbrv}{firstpluralaccess}{% \def\@gls@firstpluralaccess{#1}% } % \end{macrocode} % % \begin{macrocode} \define@key{glsxtrabbrv}{shortaccess}{% \def\@gls@shortaccess{#1}% } % \end{macrocode} % % \begin{macrocode} \define@key{glsxtrabbrv}{shortpluralaccess}{% \def\@gls@shortaccesspl{#1}% } % \end{macrocode} % % \begin{macrocode} \define@key{glsxtrabbrv}{longaccess}{% \def\@gls@longaccess{#1}% } % \end{macrocode} % % \begin{macrocode} \define@key{glsxtrabbrv}{shortlonglaccess}{% \def\@gls@longaccesspl{#1}% } % \end{macrocode} %\begin{macro}{\@gls@initaccesskeys} %\changes{1.31}{2018-05-09}{new} % \begin{macrocode} \newcommand*{\@gls@initaccesskeys}{% \def\@gls@nameaccess{}% \def\@gls@textaccess{}% \def\@gls@pluralaccess{}% \def\@gls@firstaccess{}% \def\@gls@firstpluralaccess{}% \def\@gls@shortaccess{}% \def\@gls@shortaccesspl{}% \def\@gls@longaccess{}% \def\@gls@longaccesspl{}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@gls@ifaccessattribute@set} %\begin{definition} %\cs{\@gls@ifaccessattribute@set}\marg{attribute}\marg{true}\marg{false} %\end{definition} %\changes{1.31}{2018-05-09}{new} % \begin{macrocode} \newcommand*{\@gls@ifaccessattribute@set}[3]{% \glsifcategoryattribute{\glscategorylabel}{access#1}{true}% {#2}% {% \glsifcategoryattribute{\glscategorylabel}{access#1}{false}% {#3}% {% \glsifcategoryattribute{\glscategorylabel}{#1}{true}% {#2}% {#3}% }% }% } % \end{macrocode} %\end{macro} % %As from \sty{glossaries} v4.45, the replacement text support has %been corrected so that the accessibility support for abbreviations %use the \qt{E} (expanded value) element. This should actually %contain the long form since it's supposed to explain the %abbreviation. This is a bit redundant on first use for styles like %\abbrstyle{long-short}. % %\begin{macro}{\glsdefaultshortaccess} %\changes{1.42}{2020-02-03}{new} %\begin{definition} %\cs{glsdefaultshortaccess}\marg{long}\marg{short} %\end{definition} %This command was only introduced to \sty{glossaries-accsupp} 1.42 %so it may not be defined. % \begin{macrocode} \def\glsdefaultshortaccess#1#2{#1 (#2)} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrassignactualsetup} %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \newcommand{\glsxtrassignactualsetup}{% \let\@\empty \let\emph\@firstofone \let\textbf\@firstofone \let\textmd\@firstofone \let\textit\@firstofone \let\textsl\@firstofone \let\textsc\@firstofone \let\textrm\@firstofone \let\textsf\@firstofone \let\texttt\@firstofone } % \end{macrocode} %\end{macro} % %\begin{macro}{\@gls@assign@actual} %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \ifdef\pdfstringdef { \newcommand{\@gls@assign@actual}{% \begingroup \glsxtrassignactualsetup \pdfstringdef\@gls@actualshort{\glsxtrorgshort}% \pdfstringdef\@gls@actuallong{\glsxtrorglong}% \pdfstringdef\@gls@actualshortpl{\@gls@shortpl}% \pdfstringdef\@gls@actuallongpl{\@gls@longpl}% \protected@edef\@gls@tmp{\endgroup \def\noexpand\@gls@actualshort{\expandonce\@gls@actualshort}% \def\noexpand\@gls@actuallong{\expandonce\@gls@actuallong}% \def\noexpand\@gls@actualshortpl{\expandonce\@gls@actualshortpl}% \def\noexpand\@gls@actuallongpl{\expandonce\@gls@actuallongpl}% }% \@gls@tmp } } { \newcommand{\@gls@assign@actual}{% \begingroup \glsxtrassignactualsetup \protected@edef\@gls@tmp{\endgroup \def\noexpand\@gls@actualshort{\glsxtrorgshort}% \def\noexpand\@gls@actuallong{\glsxtrorglong}% \def\noexpand\@gls@actualshortpl{\@gls@shortpl}% \def\noexpand\@gls@actuallongpl{\@gls@longpl}% }% \@gls@tmp } } % \end{macrocode} %\end{macro} %\begin{macro}{\@gls@setup@default@short@access} %\changes{1.31}{2018-05-09}{new} %\changes{1.42}{2020-02-03}{renamed to \cs{@gls@setup@default@access}} %Renamed \cs{@gls@setup@default@access} and removed argument since %it can be obtained from \cs{glsxtrorgshort}. %\end{macro} %\begin{macro}{\@gls@setup@default@access} %\changes{1.42}{2020-02-03}{added \cs{glsdefaultshortaccess}} %Assign the default value of the \gloskey{shortaccess} key. The %argument is the short value passed to \cs{newabbreviation}. %The \gloskey{shortaccess} value should explain the abbreviation. % \begin{macrocode} \newcommand{\@gls@setup@default@access}{% \@gls@assign@actual \ifdefempty\@gls@shortaccess {% % \end{macrocode} %Check if the \catattr{accessinsertdots} attribute has been set but %only if \gloskey{shortaccess} hasn't been set. % \begin{macrocode} \@gls@ifaccessattribute@set{insertdots}% {% \expandafter\@glsxtr@insertdots\expandafter\@gls@actualshort\expandafter {\@gls@actualshort}% }% {}% \ifdefempty\@gls@longaccess {% \edef\@gls@shortaccess{\glsdefaultshortaccess {\expandonce\@gls@actuallong}{\expandonce\@gls@actualshort}}% }% {% \edef\@gls@shortaccess{\glsdefaultshortaccess {\expandonce\@gls@longaccess}{\expandonce\@gls@actualshort}}% }% \eappto\ExtraCustomAbbreviationFields{shortaccess={\@gls@shortaccess},}% % \end{macrocode} %If \gloskey{shortaccessplural} hasn't been set, assign plural form. % \begin{macrocode} \ifdefempty\@gls@shortaccesspl {% \@gls@ifaccessattribute@set{aposplural}% {% \expandafter\def\expandafter\@gls@shortaccesspl\expandafter{% \@gls@actualshort'\glsxtrabbrvpluralsuffix}% }% {% \@gls@ifaccessattribute@set{noshortplural}% {% \let\@gls@shortaccesspl\@gls@shortaccess }% {% \let\@gls@shortaccesspl\@gls@actualshortpl }% }% \ifdefempty\@gls@longaccesspl {% \edef\@gls@shortaccesspl{\glsdefaultshortaccess {\expandonce\@gls@actuallongpl}{\expandonce\@gls@actualshortpl}}% }% {% \edef\@gls@shortaccesspl{\glsdefaultshortaccess {\expandonce\@gls@longaccesspl}{\expandonce\@gls@actualshort}}% }% \eappto\ExtraCustomAbbreviationFields{shortpluralaccess={\@gls@shortaccesspl},}% }% {}% }% {% \ifdefempty\@gls@shortaccesspl {\let\@gls@shortaccesspl\@gls@shortaccess}% {}% }% % \end{macrocode} %If \gloskey{access} key hasn't been set, check if the %\catattr{nameshortaccess} attribute has been set. % \begin{macrocode} \ifdefempty\@gls@nameaccess {% \glsifcategoryattribute{\glscategorylabel}{nameshortaccess}{true}% {% \eappto\ExtraCustomAbbreviationFields{access={\@gls@shortaccess},}% }% {}% }% {}% % \end{macrocode} %If \gloskey{textaccess} key hasn't been set, check if the %\catattr{textshortaccess} attribute has been set. % \begin{macrocode} \ifdefempty\@gls@textaccess {% \glsifcategoryattribute{\glscategorylabel}{textshortaccess}{true}% {% \eappto\ExtraCustomAbbreviationFields{textaccess={\@gls@shortaccess},}% }% {}% }% {}% \ifdefempty\@gls@pluralaccess {% \glsifcategoryattribute{\glscategorylabel}{textshortaccess}{true}% {% \eappto\ExtraCustomAbbreviationFields{% pluralaccess={\@gls@shortaccesspl},% }% }% {}% }% {}% % \end{macrocode} %If \gloskey{firstaccess} key hasn't been set, check if the %\catattr{firstshortaccess} attribute has been set. % \begin{macrocode} \ifdefempty\@gls@firstaccess {% \glsifcategoryattribute{\glscategorylabel}{firstshortaccess}{true}% {% \eappto\ExtraCustomAbbreviationFields{firstaccess={\@gls@shortaccess},}% }% {}% }% {}% \ifdefempty\@gls@firstpluralaccess {% \glsifcategoryattribute{\glscategorylabel}{firstshortaccess}{true}% {% \eappto\ExtraCustomAbbreviationFields{% firstpluralaccess={\@gls@shortaccesspl},% }% }% {}% }% {}% } % \end{macrocode} %\end{macro} % % Provide hooks for \cs{setabbreviationstyle} that automatically set % the attributes appropriate for the style. % If the name is just the short form and the % description contains the long form, then it may not be necessary % to set \catattr{nameshortaccess} but it would depend on the glossary style. % % Need to provide \cs{glsxtr\meta{category}\meta{field}accsupp} if % not already defined. %\begin{macro}{\glsxtrprovideaccsuppcmd} %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \newcommand*{\glsxtrprovideaccsuppcmd}[2]{% \ifcsundef{glsxtr#1#2accsupp}% {\csdef{glsxtr#1#2accsupp}{\glsshortaccsupp}}% {}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrAccSuppAbbrSetNoLongAttrs} %\changes{1.42}{2020-02-03}{new} %For styles where the name, first and text are just the %abbreviation. % \begin{macrocode} \newcommand*{\glsxtrAccSuppAbbrSetNoLongAttrs}[1]{% \glssetcategoryattribute{#1}{nameshortaccess}{true}% \glssetcategoryattribute{#1}{firstshortaccess}{true}% \glssetcategoryattribute{#1}{textshortaccess}{true}% \glsxtrprovideaccsuppcmd{#1}{name}% \glsxtrprovideaccsuppcmd{#1}{first}% \glsxtrprovideaccsuppcmd{#1}{firstpl}% \glsxtrprovideaccsuppcmd{#1}{text}% \glsxtrprovideaccsuppcmd{#1}{plural}% } % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrAccSuppAbbrSetFirstLongAttrs} %\changes{1.42}{2020-02-03}{new} %For styles where the name and text are just the %abbreviation. The first form may just be long or may be short and %long. % \begin{macrocode} \newcommand*{\glsxtrAccSuppAbbrSetFirstLongAttrs}[1]{% \glssetcategoryattribute{#1}{nameshortaccess}{true}% \glssetcategoryattribute{#1}{textshortaccess}{true}% \glsxtrprovideaccsuppcmd{#1}{name}% \glsxtrprovideaccsuppcmd{#1}{text}% \glsxtrprovideaccsuppcmd{#1}{plural}% } % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrAccSuppAbbrSetTextShortAttrs} %\changes{1.42}{2020-02-03}{new} %For styles where only the text is just the abbreviation. The name %and first form may just be long or may be short and %long. The name may also be short but followed by the long form in %the description. % \begin{macrocode} \newcommand*{\glsxtrAccSuppAbbrSetTextShortAttrs}[1]{% \glssetcategoryattribute{#1}{textshortaccess}{true}% \glsxtrprovideaccsuppcmd{#1}{text}% \glsxtrprovideaccsuppcmd{#1}{plural}% } % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrAccSuppAbbrSetNameShortAttrs} %\changes{1.42}{2020-02-03}{new} %For styles where only the name is just the abbreviation. The %first and subsequent form may just be long or may be short and %long. % \begin{macrocode} \newcommand*{\glsxtrAccSuppAbbrSetNameShortAttrs}[1]{% \glssetcategoryattribute{#1}{nameshortaccess}{true}% \glsxtrprovideaccsuppcmd{#1}{name}% } % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrAccSuppAbbrSetNameLongAttrs} %\changes{1.42}{2020-02-03}{new} %For styles where the first and text are just the %abbreviation. The name may just be long or may be short and %long or the name may be short. % \begin{macrocode} \newcommand*{\glsxtrAccSuppAbbrSetNameLongAttrs}[1]{% \glssetcategoryattribute{#1}{firstshortaccess}{true}% \glssetcategoryattribute{#1}{textshortaccess}{true}% \glsxtrprovideaccsuppcmd{#1}{first}% \glsxtrprovideaccsuppcmd{#1}{firstpl}% \glsxtrprovideaccsuppcmd{#1}{text}% \glsxtrprovideaccsuppcmd{#1}{plural}% } % \end{macrocode} %\end{macro} % End of if accsupp part % \begin{macrocode} } { % \end{macrocode} % No accessibility support. Just define these commands to do % \cs{glsentry}\meta{xxx} %\begin{macro}{\glsaccessname} % Display the \gloskey{name} value (no link and no check for existence). % \begin{macrocode} \newcommand*{\glsaccessname}[1]{\glsentryname{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccessname} % Display the \gloskey{name} value (no link and no check for existence) % with the first letter converted to upper case. % \begin{macrocode} \newcommand*{\Glsaccessname}[1]{\Glsentryname{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccessname} % Display the \gloskey{name} value (no link and no check for existence). % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccessname}[1]{% \protect\mfirstucMakeUppercase{\glsentryname{#1}}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsaccesstext} % Display the \gloskey{text} value (no link and no check for existence). % \begin{macrocode} \newcommand*{\glsaccesstext}[1]{\glsentrytext{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccesstext} % Display the \gloskey{text} value (no link and no check for existence) % with the first letter converted to upper case. % \begin{macrocode} \newcommand*{\Glsaccesstext}[1]{\Glsentrytext{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccesstext} % Display the \gloskey{text} value (no link and no check for existence). % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccesstext}[1]{% \protect\mfirstucMakeUppercase{\glsentrytext{#1}}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsaccessplural} % Display the \gloskey{plural} value (no link and no check for existence). % \begin{macrocode} \newcommand*{\glsaccessplural}[1]{\glsentryplural{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccessplural} % Display the \gloskey{plural} value (no link and no check for existence) % with the first letter converted to upper case. % \begin{macrocode} \newcommand*{\Glsaccessplural}[1]{\Glsentryplural{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccessplural} % Display the \gloskey{plural} value (no link and no check for existence). % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccessplural}[1]{% \protect\mfirstucMakeUppercase{\glsentryplural{#1}}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsaccessfirst} % Display the \gloskey{first} value (no link and no check for existence). % \begin{macrocode} \newcommand*{\glsaccessfirst}[1]{\glsentryfirst{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccessfirst} % Display the \gloskey{first} value (no link and no check for existence) % with the first letter converted to upper case. % \begin{macrocode} \newcommand*{\Glsaccessfirst}[1]{\Glsentryfirst{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccessfirst} % Display the \gloskey{first} value (no link and no check for existence). % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccessfirst}[1]{% \protect\mfirstucMakeUppercase{\glsentryfirst{#1}}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsaccessfirstplural} % Display the \gloskey{firstplural} value (no link and no check for existence). % \begin{macrocode} \newcommand*{\glsaccessfirstplural}[1]{\glsentryfirstplural{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccessfirstplural} % Display the \gloskey{firstplural} value (no link and no check for existence) % with the first letter converted to upper case. % \begin{macrocode} \newcommand*{\Glsaccessfirstplural}[1]{\Glsentryfirstplural{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccessfirstplural} % Display the \gloskey{firstplural} value (no link and no check for existence). % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccessfirstplural}[1]{% \protect\mfirstucMakeUppercase{\glsentryfirstplural{#1}}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsaccesssymbol} % Display the \gloskey{symbol} value (no link and no check for existence). % \begin{macrocode} \newcommand*{\glsaccesssymbol}[1]{\glsentrysymbol{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccesssymbol} % Display the \gloskey{symbol} value (no link and no check for existence) % with the first letter converted to upper case. % \begin{macrocode} \newcommand*{\Glsaccesssymbol}[1]{\Glsentrysymbol{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccesssymbol} % Display the \gloskey{symbol} value (no link and no check for existence). % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccesssymbol}[1]{% \protect\mfirstucMakeUppercase{\glsentrysymbol{#1}}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsaccesssymbolplural} % Display the \gloskey{symbolplural} value (no link and no check for existence). % \begin{macrocode} \newcommand*{\glsaccesssymbolplural}[1]{\glsentrysymbolplural{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccesssymbolplural} % Display the \gloskey{symbolplural} value (no link and no check for existence) % with the first letter converted to upper case. % \begin{macrocode} \newcommand*{\Glsaccesssymbolplural}[1]{\Glsentrysymbolplural{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccesssymbolplural} % Display the \gloskey{symbolplural} value (no link and no check for existence). % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccesssymbolplural}[1]{% \protect\mfirstucMakeUppercase{\glsentrysymbolplural{#1}}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsaccessdesc} % Display the \gloskey{desc} value (no link and no check for existence). % \begin{macrocode} \newcommand*{\glsaccessdesc}[1]{\glsentrydesc{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccessdesc} % Display the \gloskey{desc} value (no link and no check for existence) % with the first letter converted to upper case. % \begin{macrocode} \newcommand*{\Glsaccessdesc}[1]{\Glsentrydesc{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccessdesc} % Display the \gloskey{desc} value (no link and no check for existence). % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccessdesc}[1]{% \protect\mfirstucMakeUppercase{\glsentrydesc{#1}}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsaccessdescplural} % Display the \gloskey{descplural} value (no link and no check for existence). % \begin{macrocode} \newcommand*{\glsaccessdescplural}[1]{\glsentrydescplural{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccessdescplural} % Display the \gloskey{descplural} value (no link and no check for existence) % with the first letter converted to upper case. % \begin{macrocode} \newcommand*{\Glsaccessdescplural}[1]{\Glsentrydescplural{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccessdescplural} % Display the \gloskey{descplural} value (no link and no check for existence). % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccessdescplural}[1]{% \protect\mfirstucMakeUppercase{\glsentrydescplural{#1}}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsaccessshort} % Display the short form (no link and no check for existence). % \begin{macrocode} \newcommand*{\glsaccessshort}[1]{\glsentryshort{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccessshort} % Display the short form with first letter converted to uppercase % (no link and no check for existence). % \begin{macrocode} \newcommand*{\Glsaccessshort}[1]{\Glsentryshort{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccessshort} % Display the \gloskey{short} value (no link and no check for existence). % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccessshort}[1]{% \protect\mfirstucMakeUppercase{\glsentryshort{#1}}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsaccessshortpl} % Display the short plural form (no link and no check for existence). % \begin{macrocode} \newcommand*{\glsaccessshortpl}[1]{\glsentryshortpl{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccessshortpl} % Display the short plural form with first letter converted to % uppercase (no link and no check for existence). % \begin{macrocode} \newcommand*{\Glsaccessshortpl}[1]{\Glsentryshortpl{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccessshortpl} % Display the \gloskey{shortplural} value (no link and no check for existence). % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccessshortpl}[1]{% \protect\mfirstucMakeUppercase{\glsentryshortpl{#1}}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsaccesslong} % Display the long form (no link and no check for existence). % \begin{macrocode} \newcommand*{\glsaccesslong}[1]{\glsentrylong{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccesslong} % Display the long form (no link and no check for existence). % \begin{macrocode} \newcommand*{\Glsaccesslong}[1]{\Glsentrylong{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccesslong} % Display the \gloskey{long} value (no link and no check for existence). % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccesslong}[1]{% \protect\mfirstucMakeUppercase{\glsentrylong{#1}}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsaccesslongpl} % Display the long plural form (no link and no check for existence). % \begin{macrocode} \newcommand*{\glsaccesslongpl}[1]{\glsentrylongpl{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsaccesslongpl} % Display the long plural form (no link and no check for existence). % \begin{macrocode} \newcommand*{\Glsaccesslongpl}[1]{\Glsentrylongpl{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSaccesslongpl} % Display the \gloskey{longplural} value (no link and no check for existence). % converted to upper case. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GLSaccesslongpl}[1]{% \protect\mfirstucMakeUppercase{\glsentrylongpl{#1}}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@gls@initaccesskeys} %\changes{1.31}{2018-05-09}{new} %This does nothing if there's no accessibility support. % \begin{macrocode} \newcommand*{\@gls@initaccesskeys}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\@gls@setup@default@access} %This does nothing if there's no accessibility support. % \begin{macrocode} \newcommand{\@gls@setup@default@access}{} % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrAccSuppAbbrSetNoLongAttrs} %\changes{1.42}{2020-02-03}{new} %This does nothing if there's no accessibility support. % \begin{macrocode} \newcommand*{\glsxtrAccSuppAbbrSetNoLongAttrs}[1]{} % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrAccSuppAbbrSetFirstLongAttrs} %\changes{1.42}{2020-02-03}{new} %This does nothing if there's no accessibility support. % \begin{macrocode} \newcommand*{\glsxtrAccSuppAbbrSetFirstLongAttrs}[1]{} % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrAccSuppAbbrSetTextShortAttrs} %\changes{1.42}{2020-02-03}{new} %This does nothing if there's no accessibility support. % \begin{macrocode} \newcommand*{\glsxtrAccSuppAbbrSetTextShortAttrs}[1]{} % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrAccSuppAbbrSetNameShortAttrs} %\changes{1.42}{2020-02-03}{new} %This does nothing if there's no accessibility support. % \begin{macrocode} \newcommand*{\glsxtrAccSuppAbbrSetNameShortAttrs}[1]{} % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrAccSuppAbbrSetNameLongAttrs} %\changes{1.42}{2020-02-03}{new} %This does nothing if there's no accessibility support. % \begin{macrocode} \newcommand*{\glsxtrAccSuppAbbrSetNameLongAttrs}[1]{} % \end{macrocode} % End of else part % \begin{macrocode} } % \end{macrocode} %\end{macro} % %\section{Categories} %\begin{macro}{\glscategory} % Add a new storage key that can be used to indicate a category. The % default category is \category{general}. % \begin{macrocode} \glsaddstoragekey{category}{general}{\glscategory} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsifcategory} % Convenient shortcut to determine if an entry has the given % category. % \begin{macrocode} \newcommand{\glsifcategory}[4]{% \ifglsfieldeq{#1}{category}{#2}{#3}{#4}% } % \end{macrocode} %\end{macro} % % Categories can have attributes. %\begin{macro}{\glssetcategoryattribute} %\begin{definition} %\cs{glssetcategoryattribute}\marg{category}\marg{attribute-label}\marg{value} %\end{definition} % Set (or override if already set) an attribute for the given % category. % \begin{macrocode} \newcommand*{\glssetcategoryattribute}[3]{% \csdef{@glsxtr@categoryattr@@#1@#2}{#3}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsgetcategoryattribute} %\begin{definition} %\cs{glsgetcategoryattribute}\marg{category}\marg{attribute-label} %\end{definition} % Get the value of the given attribute for the given % category. Does nothing if the attribute isn't defined. % \begin{macrocode} \newcommand*{\glsgetcategoryattribute}[2]{% \csuse{@glsxtr@categoryattr@@#1@#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glshascategoryattribute} %\begin{definition} %\cs{glshascategoryattribute}\marg{category}\marg{attribute-label}\marg{true}\marg{false} %\end{definition} %\changes{0.5}{2015-12-07}{new} % Tests if the category has the given attribute set. % \begin{macrocode} \newcommand*{\glshascategoryattribute}[4]{% \ifcsvoid{@glsxtr@categoryattr@@#1@#2}{#4}{#3}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glssetattribute} %\begin{definition} %\cs{glssetattribute}\marg{entry label}\marg{attribute-label}\marg{value} %\end{definition} % Short cut where the category label is obtained from the entry % information. % \begin{macrocode} \newcommand*{\glssetattribute}[3]{% \glssetcategoryattribute{\glscategory{#1}}{#2}{#3}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsgetattribute} %\begin{definition} %\cs{glsgetattribute}\marg{entry label}\marg{attribute-label} %\end{definition} % Short cut where the category label is obtained from the entry % information. % \begin{macrocode} \newcommand*{\glsgetattribute}[2]{% \glsgetcategoryattribute{\glscategory{#1}}{#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glshasattribute} %\begin{definition} %\cs{glshasattribute}\marg{entry %label}\marg{attribute-label}\marg{true}\marg{false} %\end{definition} %\changes{0.5}{2015-12-07}{new} %\changes{0.5.4}{2015-12-15}{added check for entry's existence} % Short cut to test if the given attribute has been set where the % category label is obtained from the entry information. % \begin{macrocode} \newcommand*{\glshasattribute}[4]{% \ifglsentryexists{#1}% {\glshascategoryattribute{\glscategory{#1}}{#2}{#3}{#4}}% {#4}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsifcategoryattribute} %\begin{definition} %\cs{glsifcategoryattribute}\marg{category}\marg{attribute-label}\marg{value}\marg{true %part}\marg{false part} %\end{definition} % True if category has the attribute with the given value. % \begin{macrocode} \newcommand{\glsifcategoryattribute}[5]{% \ifcsundef{@glsxtr@categoryattr@@#1@#2}% {#5}% {\ifcsstring{@glsxtr@categoryattr@@#1@#2}{#3}{#4}{#5}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsifattribute} %\begin{definition} %\cs{glsifattribute}\marg{entry label}\marg{attribute-label}\marg{value}\marg{true %part}\marg{false part} %\end{definition} %Short cut to determine if the given entry has a category with the %given attribute set. %\changes{0.5.4}{2015-12-15}{added check for entry's existence} % \begin{macrocode} \newcommand{\glsifattribute}[5]{% \ifglsentryexists{#1}% {\glsifcategoryattribute{\glscategory{#1}}{#2}{#3}{#4}{#5}}% {#5}% } % \end{macrocode} %\end{macro} % % Set attributes for the default \category{general} category: % \begin{macrocode} \glssetcategoryattribute{general}{regular}{true} % \end{macrocode} % Acronyms are regular by default, since they're typically just % treated like normal words. % \begin{macrocode} \glssetcategoryattribute{acronym}{regular}{true} % \end{macrocode} % %\begin{macro}{\glssetregularcategory} %Convenient shortcut to add the regular attribute. % \begin{macrocode} \newcommand*{\glssetregularcategory}[1]{% \glssetcategoryattribute{#1}{regular}{true}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsifregularcategory} %\begin{definition} %\cs{glsifregularcategory}\marg{category}\marg{true part}\marg{false part} %\end{definition} % Short cut to determine if a category has the regular attribute % explicitly set to true. % \begin{macrocode} \newcommand{\glsifregularcategory}[3]{% \glsifcategoryattribute{#1}{regular}{true}{#2}{#3}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsifnotregularcategory} %\begin{definition} %\cs{glsifnotregularcategory}\marg{category}\marg{true part}\marg{false part} %\end{definition} % Short cut to determine if a category has the regular attribute % explicitly set to false. %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \newcommand{\glsifnotregularcategory}[3]{% \glsifcategoryattribute{#1}{regular}{false}{#2}{#3}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsifregular} %\begin{definition} %\cs{glsifregular}\marg{entry label}\marg{true part}\marg{false part} %\end{definition} % Short cut to determine if an entry has a regular attribute set to % true. % \begin{macrocode} \newcommand{\glsifregular}[3]{% \glsifregularcategory{\glscategory{#1}}{#2}{#3}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsifnotregular} %\begin{definition} %\cs{glsifnotregular}\marg{entry label}\marg{true part}\marg{false part} %\end{definition} % Short cut to determine if an entry has a regular attribute set to % false. % \begin{macrocode} \newcommand{\glsifnotregular}[3]{% \glsifnotregularcategory{\glscategory{#1}}{#2}{#3}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsforeachincategory} %\begin{definition} %\cs{glsforeachincategory}\oarg{glossary %labels}\marg{category-label}\marg{glossary-cs}\marg{label-cs}\marg{body} %\end{definition} % Iterates through all entries in all the glossaries (or just those % listed in \meta{glossary labels}) and does \meta{body} if the % category matches \meta{category-label}. The control sequences % \meta{glossary-cs} and \meta{label-cs} may be used in \meta{body} % to access the glossary label and entry label for the current % iteration. % \begin{macrocode} \newcommand{\glsforeachincategory}[5][\@glo@types]{% \forallglossaries[#1]{#3}% {% \forglsentries[#3]{#4}% {% \glsifcategory{#4}{#2}{#5}{}% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsforeachwithattribute} %\begin{definition} %\cs{glsforeachwithattribute}\oarg{glossary %labels}\marg{attribute-label}\marg{attribute-value}\marg{glossary-cs}\marg{label-cs}\marg{body} %\end{definition} % Iterates through all entries in all the glossaries (or just those % listed in \meta{glossary labels}) and does \meta{body} if the % category attribute \meta{attribute-label} matches % \meta{attribute-value}. The control sequences % \meta{glossary-cs} and \meta{label-cs} may be used in \meta{body} % to access the glossary label and entry label for the current % iteration. % \begin{macrocode} \newcommand{\glsforeachwithattribute}[6][\@glo@types]{% \forallglossaries[#1]{#4}% {% \forglsentries[#4]{#5}% {% \glsifattribute{#5}{#2}{#3}{#6}{}% }% }% } % \end{macrocode} %\end{macro} % % If \cs{newterm} has been defined, redefine it so that it % automatically sets the category label to \category{index} and add % \cs{glsxtrpostdescription}. % \begin{macrocode} \ifdef\newterm {% % \end{macrocode} %\begin{macro}{\newterm} %\changes{0.4}{2015-12-03}{fixed name argument} % \begin{macrocode} \renewcommand*{\newterm}[2][]{% \newglossaryentry{#2}% {type={index},category=index,name={#2},% description={\glsxtrpostdescription\nopostdesc},#1}% } % \end{macrocode} %\end{macro} % Indexed terms are regular by default. % \begin{macrocode} \glssetcategoryattribute{index}{regular}{true} % \end{macrocode} %\begin{macro}{\glsxtrpostdescindex} % \begin{macrocode} \newcommand*{\glsxtrpostdescindex}{} % \end{macrocode} %\end{macro} % \begin{macrocode} } {} % \end{macrocode} % %If the \pkgopt{symbols} package option was used, define a similar %command for symbols, but set the default sort to the label rather %than the name as the symbols will typically contain commands that %will confuse makeindex and xindy. % \begin{macrocode} \ifdef\printsymbols {% % \end{macrocode} %\begin{macro}{\glsxtrnewsymbol} %\changes{0.4}{2015-12-03}{added extra argument} % Unlike \cs{newterm}, this has a separate argument for the label % (since the symbol will likely contain commands). % \begin{macrocode} \newcommand*{\glsxtrnewsymbol}[3][]{% \newglossaryentry{#2}{name={#3},sort={#2},type=symbols,category=symbol,#1}% } % \end{macrocode} %\end{macro} % Symbols are regular by default. % \begin{macrocode} \glssetcategoryattribute{symbol}{regular}{true} % \end{macrocode} %\begin{macro}{\glsxtrpostdescsymbol} % \begin{macrocode} \newcommand*{\glsxtrpostdescsymbol}{} % \end{macrocode} %\end{macro} % \begin{macrocode} } {} % \end{macrocode} % % Similar for the numbers option. % \begin{macrocode} \ifdef\printnumbers {% % \end{macrocode} %\begin{macro}{\glsxtrnewnumber} %\changes{0.4}{2015-12-03}{added extra argument} % \begin{macrocode} \ifdef\printnumbers \newcommand*{\glsxtrnewnumber}[3][]{% \newglossaryentry{#2}{name={#3},sort={#2},type=numbers,category=number,#1}% } % \end{macrocode} %\end{macro} % Numbers are regular by default. % \begin{macrocode} \glssetcategoryattribute{number}{regular}{true} % \end{macrocode} %\begin{macro}{\glsxtrpostdescnumber} % \begin{macrocode} \newcommand*{\glsxtrpostdescnumber}{} % \end{macrocode} %\end{macro} % \begin{macrocode} } {} % \end{macrocode} % %\begin{macro}{\glsxtrsetcategory} % Set the category for all listed labels. The first argument is the % list of entry labels and the second argument is the category label. % \begin{macrocode} \newcommand*{\glsxtrsetcategory}[2]{% \@for\@glsxtr@label:=#1\do {% \glsfieldxdef{\@glsxtr@label}{category}{#2}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrsetcategoryforall} % Set the category for all entries in the listed glossaries. The first argument % is the list of glossary labels and the second argument is the category label. % \begin{macrocode} \newcommand*{\glsxtrsetcategoryforall}[2]{% \forallglossaries[#1]{\@glsxtr@type}{% \forglsentries[\@glsxtr@type]{\@glsxtr@label}% {% \glsfieldxdef{\@glsxtr@label}{category}{#2}% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrfieldtitlecase} %\begin{definition} %\cs{glsxtrfieldtitlecase}\marg{label}\marg{field} %\end{definition} % Apply title casing to the contents of the given field. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\glsxtrfieldtitlecase}[2]{% \expandafter\glsxtrfieldtitlecasecs\expandafter {\csname glo@\glsdetoklabel{#1}@#2\endcsname}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrfieldtitlecasecs} %The command used by \cs{glsxtrfieldtitlecase}. May be %redefined to use a different command, for example, %\cs{xcapitalisefmtwords}. %\changes{1.07}{2016-08-15}{new} % \begin{macrocode} \newcommand*{\glsxtrfieldtitlecasecs}[1]{\xcapitalisewords{#1}} % \end{macrocode} %\end{macro} % % Provide a convenient way to modify glossary styles without having % to define a new style just to convert the first letter of fields % to upper case. %\begin{macro}{\glossentrydesc} % If the \catattr{glossdesc} attribute is \qt{firstuc} convert first % letter to upper case. If the attribute is \qt{title} use title % case. % \begin{macrocode} \@ifpackageloaded{glossaries-accsupp} { \renewcommand*{\glossentrydesc}[1]{% \glsdoifexistsorwarn{#1}% {% \glssetabbrvfmt{\glscategory{#1}}% % \end{macrocode} % As from version 1.04, allow the \catattr{glossdescfont} attribute % to determine the font applied. %\changes{1.04}{2016-05-02}{added glossdescfont attribute check} % \begin{macrocode} \glshasattribute{#1}{glossdescfont}% {% \edef\@glsxtr@attrval{\glsgetattribute{#1}{glossdescfont}}% \ifcsdef{\@glsxtr@attrval}% {% \letcs{\@glsxtr@glossdescfont}{\@glsxtr@attrval}% }% {% \GlossariesExtraWarning{Unknown control sequence name `\@glsxtr@attrval' supplied in glossdescfont attribute for entry `#1'. Ignoring}% \let\@glsxtr@glossdescfont\@firstofone }% }% {\let\@glsxtr@glossdescfont\@firstofone}% \glsifattribute{#1}{glossdesc}{firstuc}% {% \@glsxtr@glossdescfont{\Glsaccessdesc{#1}}% }% {% \glsifattribute{#1}{glossdesc}{title}% {% \@glsxtr@do@titlecaps@warn \glsdescriptionaccessdisplay {% \@glsxtr@glossdescfont{\glsxtrfieldtitlecase{#1}{desc}}% }% {#1}% }% {% \@glsxtr@glossdescfont{\glsaccessdesc{#1}}% }% }% }% } } { \renewcommand*{\glossentrydesc}[1]{% \glsdoifexistsorwarn{#1}% {% \glssetabbrvfmt{\glscategory{#1}}% \glshasattribute{#1}{glossdescfont}% {% \edef\@glsxtr@attrval{\glsgetattribute{#1}{glossdescfont}}% \ifcsdef{\@glsxtr@attrval}% {% \letcs{\@glsxtr@glossdescfont}{\@glsxtr@attrval}% }% {% \GlossariesExtraWarning{Unknown control sequence name `\@glsxtr@attrval' supplied in glossdescfont attribute for entry `#1'. Ignoring}% \let\@glsxtr@glossdescfont\@firstofone }% }% {\let\@glsxtr@glossdescfont\@firstofone}% \glsifattribute{#1}{glossdesc}{firstuc}% {% \@glsxtr@glossdescfont{\Glsentrydesc{#1}}% }% {% \glsifattribute{#1}{glossdesc}{title}% {% \@glsxtr@do@titlecaps@warn \@glsxtr@glossdescfont{\glsxtrfieldtitlecase{#1}{desc}}% }% {% \@glsxtr@glossdescfont{\glsentrydesc{#1}}% }% }% }% } } % \end{macrocode} %\end{macro} % %\begin{macro}{\glossentryname} % If the \catattr{glossname} attribute is \qt{firstuc} convert first % letter to upper case. If the attribute is \qt{title} use title % case. % \begin{macrocode} \@ifpackageloaded{glossaries-accsupp} { \renewcommand*{\glossentryname}[1]{% \@glsdoifexistsorwarn{#1}% {% \glssetabbrvfmt{\glscategory{#1}}% % \end{macrocode} % As from version 1.04, allow the \catattr{glossnamefont} attribute % to determine the font applied. %\changes{1.04}{2016-05-02}{added glossnamefont attribute check} % \begin{macrocode} \glshasattribute{#1}{glossnamefont}% {% \edef\@glsxtr@attrval{\glsgetattribute{#1}{glossnamefont}}% \ifcsdef{\@glsxtr@attrval}% {% \letcs{\@glsxtr@glossnamefont}{\@glsxtr@attrval}% }% {% \GlossariesExtraWarning{Unknown control sequence name `\@glsxtr@attrval' supplied in glossnamefont attribute for entry `#1'. Reverting to default \string\glsnamefont}% \let\@glsxtr@glossnamefont\glsnamefont }% }% {\let\@glsxtr@glossnamefont\glsnamefont}% \glsifattribute{#1}{glossname}{firstuc}% {% \glsnameaccessdisplay {% \@glsxtr@glossnamefont{\Glsentryname{#1}}% }% {#1}% }% {% \glsifattribute{#1}{glossname}{title}% {% \@glsxtr@do@titlecaps@warn \glsnameaccessdisplay {% \@glsxtr@glossnamefont{\glsxtrfieldtitlecase{#1}{name}}% }% {#1}% }% {% \glsifattribute{#1}{glossname}{uc}% {% \glsnameaccessdisplay {% % \end{macrocode} % Hide the label from the upper-casing command. % \begin{macrocode} \letcs{\glo@name}{glo@\glsdetoklabel{#1}@name}% \@glsxtr@glossnamefont{\mfirstucMakeUppercase{\glo@name}}% }% {#1}% }% {% \letcs{\glo@name}{glo@\glsdetoklabel{#1}@name}% \glsnameaccessdisplay {% \expandafter\@glsxtr@glossnamefont\expandafter{\glo@name}% }% {#1}% }% }% }% % \end{macrocode} % Do post-name hook: % \begin{macrocode} \glsxtrpostnamehook{#1}% }% } } { \renewcommand*{\glossentryname}[1]{% \@glsdoifexistsorwarn{#1}% {% \glssetabbrvfmt{\glscategory{#1}}% \glshasattribute{#1}{glossnamefont}% {% \edef\@glsxtr@attrval{\glsgetattribute{#1}{glossnamefont}}% \ifcsdef{\@glsxtr@attrval}% {% \letcs{\@glsxtr@glossnamefont}{\@glsxtr@attrval}% }% {% \GlossariesExtraWarning{Unknown control sequence name `\@glsxtr@attrval' supplied in glossnamefont attribute for entry `#1'. Reverting to default \string\glsnamefont}% \let\@glsxtr@glossnamefont\glsnamefont }% }% {\let\@glsxtr@glossnamefont\glsnamefont}% \glsifattribute{#1}{glossname}{firstuc}% {% \@glsxtr@glossnamefont{\Glsentryname{#1}}% }% {% \glsifattribute{#1}{glossname}{title}% {% \@glsxtr@do@titlecaps@warn \@glsxtr@glossnamefont{\glsxtrfieldtitlecase{#1}{name}}% }% {% \glsifattribute{#1}{glossname}{uc}% {% % \end{macrocode} % Hide the label from the upper-casing command. % \begin{macrocode} \letcs{\glo@name}{glo@\glsdetoklabel{#1}@name}% \@glsxtr@glossnamefont{\mfirstucMakeUppercase{\glo@name}}% }% {% % \end{macrocode} % This little trick is used by \styfmt{glossaries} to allow the user to % redefine \ics{glsnamefont} to use \cs{makefirstuc}. Support it % even though they can now use the \catattr{firstuc} attribute. % \begin{macrocode} \letcs{\glo@name}{glo@\glsdetoklabel{#1}@name}% \expandafter\@glsxtr@glossnamefont\expandafter{\glo@name}% }% }% }% % \end{macrocode} % Do post-name hook. %\changes{1.04}{2016-05-02}{moved post name hook inside condition} % \begin{macrocode} \glsxtrpostnamehook{#1}% }% } } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glossentryname} % Redefine to set the abbreviation format and accessibility support. %\changes{0.5.2}{2015-12-08}{added} % \begin{macrocode} \@ifpackageloaded{glossaries-accsupp} { \renewcommand*{\Glossentryname}[1]{% \@glsdoifexistsorwarn{#1}% {% \glssetabbrvfmt{\glscategory{#1}}% % \end{macrocode} % As from version 1.04, allow the \catattr{glossnamefont} attribute % to determine the font applied. %\changes{1.04}{2016-05-02}{added glossnamefont attribute check} % \begin{macrocode} \glshasattribute{#1}{glossnamefont}% {% \edef\@glsxtr@attrval{\glsgetattribute{#1}{glossnamefont}}% \ifcsdef{\@glsxtr@attrval}% {% \letcs{\@glsxtr@glossnamefont}{\@glsxtr@attrval}% }% {% \GlossariesExtraWarning{Unknown control sequence name `\@glsxtr@attrval' supplied in glossnamefont attribute for entry `#1'. Reverting to default \string\glsnamefont}% \let\@glsxtr@glossnamefont\glsnamefont }% }% {\let\@glsxtr@glossnamefont\glsnamefont}% \glsnameaccessdisplay {% \@glsxtr@glossnamefont{\Glsentryname{#1}}% }% {#1}% % \end{macrocode} % Do post-name hook: % \begin{macrocode} \glsxtrpostnamehook{#1}% }% } } { \renewcommand*{\Glossentryname}[1]{% \@glsdoifexistsorwarn{#1}% {% \glssetabbrvfmt{\glscategory{#1}}% \glshasattribute{#1}{glossnamefont}% {% \edef\@glsxtr@attrval{\glsgetattribute{#1}{glossnamefont}}% \ifcsdef{\@glsxtr@attrval}% {% \letcs{\@glsxtr@glossnamefont}{\@glsxtr@attrval}% }% {% \GlossariesExtraWarning{Unknown control sequence name `\@glsxtr@attrval' supplied in glossnamefont attribute for entry `#1'. Reverting to default \string\glsnamefont}% \let\@glsxtr@glossnamefont\glsnamefont }% }% {\let\@glsxtr@glossnamefont\glsnamefont}% \@glsxtr@glossnamefont{\Glsentryname{#1}}% % \end{macrocode} % Do post-name hook: % \begin{macrocode} \glsxtrpostnamehook{#1}% }% } } % \end{macrocode} %\end{macro} % % Provide a convenient way to also index the entries using the % standard \ics{index} mechanism. This may use different actual, % encap and escape characters to those used for the glossaries. % %\begin{macro}{\glsxtrpostnamehook} %\changes{0.5.3}{2015-12-09}{new} % Hook to append stuff after the name is displayed in the glossary. % The argument is the entry's label. % \begin{macrocode} \newcommand*{\glsxtrpostnamehook}[1]{% \let\@glsnumberformat\@glsxtr@defaultnumberformat \glsxtrdoautoindexname{#1}{indexname}% % \end{macrocode} %Allow additional code regardless of category: % \begin{macrocode} \glsextrapostnamehook{#1}% % \end{macrocode} % Allow categories to hook in here. %\changes{1.04}{2016-05-02}{added category check} % \begin{macrocode} \csuse{glsxtrpostname\glscategory{#1}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsextrapostnamehook} %\changes{1.25}{2017-11-24}{new} % \begin{macrocode} \newcommand*{\glsextrapostnamehook}[1]{}% % \end{macrocode} %\end{macro} % %\begin{macro}{\glsdefpostname} %\changes{1.31}{2018-05-09}{new} %Provide a convenient command for defining the post-name hook %for the given category. % \begin{macrocode} \newcommand*{\glsdefpostname}[2]{% \csdef{glsxtrpostname#1}{#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@setaccessdisplay} %\changes{1.22}{2017-11-08}{new} % \begin{macrocode} \@ifpackageloaded{glossaries-accsupp} { \newcommand*{\glsxtr@setaccessdisplay}[1]{% \ifcsdef{gls#1accessdisplay}% {\letcs\@glsxtr@accessdisplay{gls#1accessdisplay}}% {% % \end{macrocode} %This is essentially the reverse of \cs{@gls@fetchfield}, since the %field supplied to \cs{glossentryname} has to be the internal label, %but the \cs{gls\meta{field}accessdisplay} commands use the key name. % \begin{macrocode} \edef\@gls@thisval{#1}% \@for\@gls@map:=\@gls@keymap\do{% \edef\@this@key{\expandafter\@secondoftwo\@gls@map}% \ifdefequal{\@this@key}{\@gls@thisval}% {% \edef\@gls@thisval{\expandafter\@firstoftwo\@gls@map}% \@endfortrue }% {}% }% \ifcsdef{gls\@gls@thisval accessdisplay}% {\letcs\@glsxtr@accessdisplay{gls\@gls@thisval accessdisplay}}% {\let\@glsxtr@accessdisplay\@firstoftwo}% }% } } {% \newcommand*{\glsxtr@setaccessdisplay}[1]{% \let\@glsxtr@accessdisplay\@firstoftwo} } % \end{macrocode} %\end{macro} % %\begin{macro}{\glossentrynameother} % Provide a command that works like \cs{glossentryname} % but accesses a different field (which must be supplied using its % internal field label). %\changes{1.22}{2017-11-08}{new} % \begin{macrocode} \newrobustcmd*{\glossentrynameother}[2]{% \@glsdoifexistsorwarn{#1}% {% % \end{macrocode} %Accessibility support: % \begin{macrocode} \glsxtr@setaccessdisplay{#2}% % \end{macrocode} %Set the abbreviation format: % \begin{macrocode} \glssetabbrvfmt{\glscategory{#1}}% \glshasattribute{#1}{glossnamefont}% {% \edef\@glsxtr@attrval{\glsgetattribute{#1}{glossnamefont}}% \ifcsdef{\@glsxtr@attrval}% {% \letcs{\@glsxtr@glossnamefont}{\@glsxtr@attrval}% }% {% \GlossariesExtraWarning{Unknown control sequence name `\@glsxtr@attrval' supplied in glossnamefont attribute for entry `#1'. Reverting to default \string\glsnamefont}% \let\@glsxtr@glossnamefont\glsnamefont }% }% {\let\@glsxtr@glossnamefont\glsnamefont}% \glsifattribute{#1}{glossname}{firstuc}% {% \@glsxtr@accessdisplay {\@glsxtr@glossnamefont{\@Gls@entry@field{#1}{#2}}}% {#1}% }% {% \glsifattribute{#1}{glossname}{title}% {% \@glsxtr@do@titlecaps@warn \@glsxtr@accessdisplay {\@glsxtr@glossnamefont{\glsxtrfieldtitlecase{#1}{#2}}}% {#1}% }% {% \glsifattribute{#1}{glossname}{uc}% {% \letcs{\glo@name}{glo@\glsdetoklabel{#1}@#2}% \@glsxtr@accessdisplay {\@glsxtr@glossnamefont{\mfirstucMakeUppercase{\glo@name}}}% {#1}% }% {% \letcs{\glo@name}{glo@\glsdetoklabel{#1}@#2}% \@glsxtr@accessdisplay {\expandafter\@glsxtr@glossnamefont\expandafter{\glo@name}}% {#1}% }% }% }% % \end{macrocode} % Do post-name hook. % \begin{macrocode} \glsxtrpostnamehook{#1}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\if@glsxtr@format@override} %\changes{0.5.3}{2015-12-09}{new} % Determines if the \gloskey[glslink]{format} key should override % the indexing attribute value. % \begin{macrocode} \newif\if@glsxtr@format@override \@glsxtr@format@overridefalse % \end{macrocode} %\end{macro} % %If overriding is enabled, the \ics{glshypernumber} command will have to %be redefined in the index to use \cs{hyperpage} instead. %\begin{macro}{\GlsXtrEnableIndexFormatOverride} % \begin{macrocode} \@ifpackageloaded{hyperref} { % \end{macrocode} % If \sty{hyperref}'s \pkgoptfmt{hyperindex} option is on, then % \sty{hyperref} will automatically add \cs{hyperpage}, so don't % add it. % \begin{macrocode} \ifHy@hyperindex \newcommand*{\GlsXtrEnableIndexFormatOverride}{% \@glsxtr@format@overridetrue \appto\theindex{\let\glshypernumber\@firstofone}% } \else \newcommand*{\GlsXtrEnableIndexFormatOverride}{% \@glsxtr@format@overridetrue \appto\theindex{\let\glshypernumber\hyperpage}% } \fi } { \newcommand*{\GlsXtrEnableIndexFormatOverride}{% \@glsxtr@format@overridetrue } } \@onlypreamble\GlsXtrEnableIndexFormatOverride % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrdoautoindexname} %\changes{0.5.3}{2015-12-09}{new} % \begin{macrocode} \newcommand*{\glsxtrdoautoindexname}[2]{% \glshasattribute{#1}{#2}% {% % \end{macrocode} % Escape any makeindex/xindy characters in the value of the \gloskey{name} % field. Take care with \sty{babel} as this won't work if the % category code has changed for those characters. % \begin{macrocode} \@glsxtr@autoindex@setname{#1}% % \end{macrocode} % If the attribute value is simply \qt{true} don't add an encap, % otherwise use the value as the encap. % \begin{macrocode} \protected@edef\@glsxtr@attrval{\glsgetattribute{#1}{#2}}% \if@glsxtr@format@override % \end{macrocode} %\changes{1.19}{2017-09-09}{changed format test} % \begin{macrocode} \ifx\@glsnumberformat\@glsxtr@defaultnumberformat \else \let\@glsxtr@attrval\@glsnumberformat \fi \fi \ifdefstring{\@glsxtr@attrval}{true}% {}% {\eappto\@glo@name{\@glsxtr@autoindex@encap\@glsxtr@attrval}}% \expandafter\glsxtrautoindex\expandafter{\@glo@name}% }% {}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrautoindex} %\changes{1.16}{2017-06-15}{new} % \begin{macrocode} \newcommand*{\glsxtrautoindex}{\index} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrautoindexesc} %\changes{1.36}{2018-08-18}{new} % \begin{macrocode} \newcommand{\glsxtrautoindexesc}{% \@gls@checkmkidxchars\@glo@sort \@glsxtr@autoindex@doextra@esc\@glo@sort } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@autoindex@setname} %\changes{0.5.3}{2015-12-09}{new} % Assign \cs{@glo@name} for use with \catattr{indexname} attribute. % \begin{macrocode} \newcommand*{\@glsxtr@autoindex@setname}[1]{% \protected@edef\@glo@name{\glsxtrautoindexentry{#1}}% \glsxtrautoindexassignsort{\@glo@sort}{#1}% \glsxtrautoindexesc \epreto\@glo@name{\@glo@sort\@glsxtr@autoindex@at}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrautoindexentry} %\changes{1.16}{2017-06-15}{new} %Command used for the actual part when auto-indexing. % \begin{macrocode} \newcommand*{\glsxtrautoindexentry}[1]{\string\glsentryname{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrautoindexassignsort} %\changes{1.16}{2017-06-15}{new} %Used to assign the sort value when auto-indexing. % \begin{macrocode} \newcommand*{\glsxtrautoindexassignsort}[2]{% \glsletentryfield{#1}{#2}{sort}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@autoindex@doextra@esc} % \begin{macrocode} \newcommand*{\@glsxtr@autoindex@doextra@esc}[1]{% % \end{macrocode} % Escape the escape character unless it has already been escaped. % \begin{macrocode} \ifx\@glsxtr@autoindex@esc\@gls@quotechar \else \def\@gls@checkedmkidx{}% \edef\@@glsxtr@checkspch{% \noexpand\@glsxtr@autoindex@escquote\expandonce{#1}% \noexpand\@empty\@glsxtr@autoindex@esc\noexpand\@nnil \@glsxtr@autoindex@esc\noexpand\@empty\noexpand\@glsxtr@endescspch}% \@@glsxtr@checkspch \let#1\@gls@checkedmkidx\relax \fi % \end{macrocode} % Escape actual character unless it has already been escaped. % \begin{macrocode} \ifx\@glsxtr@autoindex@at\@gls@actualchar \else \def\@gls@checkedmkidx{}% \edef\@@glsxtr@checkspch{% \noexpand\@glsxtr@autoindex@escat\expandonce{#1}% \noexpand\@empty\@glsxtr@autoindex@at\noexpand\@nnil \@glsxtr@autoindex@at\noexpand\@empty\noexpand\@glsxtr@endescspch}% \@@glsxtr@checkspch \let#1\@gls@checkedmkidx\relax \fi % \end{macrocode} % Escape level character unless it has already been escaped. % \begin{macrocode} \ifx\@glsxtr@autoindex@level\@gls@levelchar \else \def\@gls@checkedmkidx{}% \edef\@@glsxtr@checkspch{% \noexpand\@glsxtr@autoindex@esclevel\expandonce{#1}% \noexpand\@empty\@glsxtr@autoindex@level\noexpand\@nnil \@glsxtr@autoindex@level\noexpand\@empty\noexpand\@glsxtr@endescspch}% \@@glsxtr@checkspch \let#1\@gls@checkedmkidx\relax \fi % \end{macrocode} % Escape encap character unless it has already been escaped. % \begin{macrocode} \ifx\@glsxtr@autoindex@encap\@gls@encapchar \else \def\@gls@checkedmkidx{}% \edef\@@glsxtr@checkspch{% \noexpand\@glsxtr@autoindex@escencap\expandonce{#1}% \noexpand\@empty\@glsxtr@autoindex@encap\noexpand\@nnil \@glsxtr@autoindex@encap\noexpand\@empty\noexpand\@glsxtr@endescspch}% \@@glsxtr@checkspch \let#1\@gls@checkedmkidx\relax \fi } % \end{macrocode} %\end{macro} % % The user commands here have a preamble-only restriction to ensure % they are set before required and also to reduce the chances of % complications caused by \sty{babel}'s shorthands. % %\begin{macro}{\@glsxtr@autoindex@at} %\changes{0.5.3}{2015-12-09}{new} % Actual character for use with \cs{index}. % \begin{macrocode} \newcommand*{\@glsxtr@autoindex@at}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrSetActualChar} % Set the actual character. % \begin{macrocode} \newcommand*{\GlsXtrSetActualChar}[1]{% \gdef\@glsxtr@autoindex@at{#1}% \def\@glsxtr@autoindex@escat##1#1##2#1##3\@glsxtr@endescspch{% \@@glsxtr@autoindex@escspch{#1}{\@glsxtr@autoindex@escat}{##1}{##2}{##3}% }% } \@onlypreamble\GlsXtrSetActualChar \makeatother \GlsXtrSetActualChar{@} \makeatletter % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@autoindex@encap} %\changes{0.5.3}{2015-12-09}{new} % Encap character for use with \cs{index}. % \begin{macrocode} \newcommand*{\@glsxtr@autoindex@encap}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrSetEncapChar} % Set the encap character. % \begin{macrocode} \newcommand*{\GlsXtrSetEncapChar}[1]{% \gdef\@glsxtr@autoindex@encap{#1}% \def\@glsxtr@autoindex@escencap##1#1##2#1##3\@glsxtr@endescspch{% \@@glsxtr@autoindex@escspch{#1}{\@glsxtr@autoindex@escencap}{##1}{##2}{##3}% }% } \GlsXtrSetEncapChar{|} \@onlypreamble\GlsXtrSetEncapChar % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@autoindex@level} %\changes{0.5.3}{2015-12-09}{new} % Level character for use with \cs{index}. % \begin{macrocode} \newcommand*{\@glsxtr@autoindex@level}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrSetLevelChar} % Set the encap character. % \begin{macrocode} \newcommand*{\GlsXtrSetLevelChar}[1]{% \gdef\@glsxtr@autoindex@level{#1}% \def\@glsxtr@autoindex@esclevel##1#1##2#1##3\@glsxtr@endescspch{% \@@glsxtr@autoindex@escspch{#1}{\@glsxtr@autoindex@esclevel}{##1}{##2}{##3}% }% } \GlsXtrSetLevelChar{!} \@onlypreamble\GlsXtrSetLevelChar % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@autoindex@esc} %\changes{0.5.3}{2015-12-09}{new} % Escape character for use with \cs{index}. % \begin{macrocode} \newcommand*{\@glsxtr@autoindex@esc}{"} % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrSetEscChar} % Set the escape character. % \begin{macrocode} \newcommand*{\GlsXtrSetEscChar}[1]{% \gdef\@glsxtr@autoindex@esc{#1}% \def\@glsxtr@autoindex@escquote##1#1##2#1##3\@glsxtr@endescspch{% \@@glsxtr@autoindex@escspch{#1}{\@glsxtr@autoindex@escquote}{##1}{##2}{##3}% }% } \GlsXtrSetEscChar{"} \@onlypreamble\GlsXtrSetEscChar % \end{macrocode} %\end{macro} % % Set if defined. (For example, if \sty{doc} package has been % loaded.) Actual character \ics{actualchar}: % \begin{macrocode} \ifdef\actualchar {\expandafter\GlsXtrSetActualChar\expandafter{\actualchar}} {} % \end{macrocode} % Quote character \ics{quotechar}: % \begin{macrocode} \ifdef\quotechar {\expandafter\GlsXtrSetEscChar\expandafter{\quotechar}} {} % \end{macrocode} % Level character \ics{levelchar}: % \begin{macrocode} \ifdef\levelchar {\expandafter\GlsXtrSetLevelChar\expandafter{\levelchar}} {} % \end{macrocode} % Encap character \ics{encapchar}: % \begin{macrocode} \ifdef\encapchar {\expandafter\GlsXtrSetEncapChar\expandafter{\encapchar}} {} % \end{macrocode} % %\begin{macro}{\@glsxtr@gobbleto@endescspch} % \begin{macrocode} \def\@glsxtr@gobbleto@endescspch#1\@glsxtr@endescspch{} % \end{macrocode} %\end{macro} % %\begin{macro}{\@@glsxtr@autoindex@esc@spch} %\begin{definition} %\cs{@@glsxtr@autoindex@escspch}\marg{char}\marg{cs}\marg{pre}\marg{mid}\marg{post} %\end{definition} % \begin{macrocode} \newcommand*{\@@glsxtr@autoindex@escspch}[5]{% \@gls@tmpb=\expandafter{\@gls@checkedmkidx}% \toks@={#3}% \ifx\@nnil#3\relax \def\@@glsxtr@checkspch{\@glsxtr@gobbleto@endescspch#5\@glsxtr@endescspch}% \else \ifx\@nnil#4\relax \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}% \def\@@glsxtr@checkspch{\@glsxtr@gobbleto@endescspch #4#5\@glsxtr@endescspch}% \else \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ \@glsxtr@autoindex@esc#1}% \def\@@glsxtr@checkspch{#2#5#1\@nnil#1\@glsxtr@endescspch}% \fi \fi \@@glsxtr@checkspch } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glossentrydesc} % Redefine to set the abbreviation format and accessibility support. %\changes{0.5.2}{2015-12-08}{added} % \begin{macrocode} \renewcommand*{\Glossentrydesc}[1]{% \glsdoifexistsorwarn{#1}% {% \glssetabbrvfmt{\glscategory{#1}}% \Glsaccessdesc{#1}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glossentrysymbol} % Redefine to set the format and accessibility support. Allow for % the possibility of being used in a section heading for standalone % entry definitions. %\changes{0.5.2}{2015-12-08}{added} % \begin{macrocode} \ifdef\texorpdfstring { \renewcommand*{\glossentrysymbol}[1]{% \texorpdfstring{\@glossentrysymbol{#1}}{\glsentrypdfsymbol{#1}}% } } { \renewcommand*{\glossentrysymbol}[1]{\@glossentrysymbol{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsentrypdfsymbol} %\changes{1.4.2}{??}{new} %May be redefined to a field that expands to a value that's more %suitable for PDF bookmarks. % \begin{macrocode} \newcommand{\glsentrypdfsymbol}[1]{\glsentrysymbol{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glossentrysymbol} %\changes{1.4.2}{??}{new} %There are no case-changing attributes as it's less usual for %symbols. % \begin{macrocode} \newrobustcmd*{\@glossentrysymbol}[1]{% \glsdoifexistsorwarn{#1}% {% \begingroup \glssetabbrvfmt{\glscategory{#1}}% \glshasattribute{#1}{glosssymbolfont}% {% \edef\@glsxtr@attrval{\glsgetattribute{#1}{glosssymbolfont}}% \ifcsdef{\@glsxtr@attrval}% {% \letcs{\@glsxtr@glosssymbolfont}{\@glsxtr@attrval}% }% {% \GlossariesExtraWarning{Unknown control sequence name `\@glsxtr@attrval' supplied in glosssymbolfont attribute for entry `#1'. Ignoring}% \let\@glsxtr@glosssymbolfont\@firstofone }% }% {\let\@glsxtr@glosssymbolfont\@firstofone}% \@glsxtr@glosssymbolfont{\glsaccesssymbol{#1}}% \endgroup }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glossentrysymbol} % Redefine to set the abbreviation format and accessibility support. %\changes{0.5.2}{2015-12-08}{added} % \begin{macrocode} \renewcommand*{\Glossentrysymbol}[1]{% \glsdoifexistsorwarn{#1}% {% \glssetabbrvfmt{\glscategory{#1}}% \Glsaccesssymbol{#1}% }% } % \end{macrocode} %\end{macro} % %Allow initials to be marked but only use the formatting for the %tag in the glossary. %\begin{macro}{\GlsXtrEnableInitialTagging} % Allow initial tagging. The first argument is a list of categories % to apply this to. The second argument is the name of the command to % use to tag the initials. This can't already be defined for safety % unless the starred version is used. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\GlsXtrEnableInitialTagging}{% \@ifstar\s@glsxtr@enabletagging\@glsxtr@enabletagging } \@onlypreamble\GlsXtrEnableInitialTagging % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@enabletagging} % Starred version undefines command. % \begin{macrocode} \newcommand*{\s@glsxtr@enabletagging}[2]{% \undef#2% \@glsxtr@enabletagging{#1}{#2}% } % \end{macrocode} %\end{macro} %\begin{macro}{\@glsxtr@enabletagging} % Internal command. % \begin{macrocode} \newcommand*{\@glsxtr@enabletagging}[2]{% % \end{macrocode} % Set attributes for categories given in the first argument. % \begin{macrocode} \@for\@glsxtr@cat:=#1\do {% \ifdefempty\@glsxtr@cat {}% {\glssetcategoryattribute{\@glsxtr@cat}{tagging}{true}}% }% \newrobustcmd*#2[1]{##1}% \def\@glsxtr@taggingcs{#2}% \renewcommand*\@glsxtr@activate@initialtagging{% \let#2\@glsxtr@tag }% \ifundef\@gls@preglossaryhook {\GlossariesExtraWarning{Initial tagging requires at least glossaries.sty v4.19 to work correctly}}% {}% } % \end{macrocode} %\end{macro} % %Are we using an old version of \sty{mfirstuc} that has a bug in %\cs{capitalisewords}? If so, patch it so we don't have a problem % with a combination of tagging and title case. %\begin{macro}{\mfu@checkword@do} %If this command hasn't been defined, then we have pre v2.02 of %\sty{mfirstuc} %\changes{0.5.2}{2015-12-08}{added} % \begin{macrocode} \ifundef\mfu@checkword@do { \newcommand*{\mfu@checkword@do}[1]{% \ifdefstring{\mfu@checkword@arg}{#1}% {% \let\@mfu@domakefirstuc\@firstofone \listbreak }% {}% } % \end{macrocode} %\end{macro} %\begin{macro}{\mfu@checkword} % \cs{capitalisewords} was introduced in \sty{mfirstuc} v1.06. % If \cs{mfu@checkword} hasn't been defined \sty{mfirstuc} is too % old to support the title case attribute. % \begin{macrocode} \ifundef\mfu@checkword { \newcommand{\@glsxtr@do@titlecaps@warn}{% \GlossariesExtraWarning{mfirstuc.sty too old. Title Caps support not available}% % \end{macrocode} % One warning should suffice. % \begin{macrocode} \let\@glsxtr@do@titlecaps@warn\relax } } { \renewcommand*{\mfu@checkword}[1]{% \def\mfu@checkword@arg{#1}% \let\@mfu@domakefirstuc\makefirstuc \forlistloop\mfu@checkword@do\@mfu@nocaplist } } } {}% no patch required % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@do@titlecaps@warn} % Do warning if title case not supported. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\@glsxtr@do@titlecaps@warn}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@activate@initialtagging} % Used in \cs{printglossary} but at least v4.19 of \styfmt{glossaries} % required. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*\@glsxtr@activate@initialtagging{} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@tag} %\changes{0.5.2}{2015-12-08}{new} % Definition of tagging command when used in glossary. % \begin{macrocode} \newrobustcmd*{\@glsxtr@tag}[1]{% \glsifattribute{\glscurrententrylabel}{tagging}{true}% {\glsxtrtagfont{#1}}{#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrtagfont} % Used in the glossary. %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\glsxtrtagfont}[1]{\underline{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\@gls@preglossaryhook} % This macro was introduced in \styfmt{glossaries} version 4.19, so it % may not be defined. If it hasn't been defined this feature is % unavailable. A check is added for the entry's existence to prevent % errors from occurring if the user removes an entry or changes the % label, which can interrupt the build process. %\changes{1.04}{2016-05-02}{added check for entry's existence} % \begin{macrocode} \ifdef\@gls@preglossaryhook { \renewcommand*{\@gls@preglossaryhook}{% \@glsxtr@activate@initialtagging % \end{macrocode} %\changes{1.12}{2017-02-03}{check for definition} %Since the glossaries are automatically scoped, %\cs{@glsxtr@org@postdescription} shouldn't already be defined, but %check anyway just as a precautionary measure. % \begin{macrocode} \ifundef\@glsxtr@org@postdescription {% \let\@glsxtr@org@postdescription\glspostdescription \renewcommand*{\glspostdescription}{% \ifglsentryexists{\glscurrententrylabel}% {% \glsxtrpostdescription \@glsxtr@org@postdescription }% {}% }% }% {}% % \end{macrocode} %\changes{1.07}{2016-08-15}{added \cs{glossxtrsetpopts}} %Enable the options used by \cs{@@glsxtrp}: % \begin{macrocode} \glossxtrsetpopts }% } {} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrpostdescription} %This command will only be used if \cs{@gls@preglossaryhook} is %available \emph{and} the glossary style uses %\cs{glspostdescription} without modifying it. (\cs{nopostdesc} %will suppress this.) The \sty{glossaries-extra-stylemods} package will %add the post description hook to all the predefined styles that %don't include it. % \begin{macrocode} \newcommand*{\glsxtrpostdescription}{% \csuse{glsxtrpostdesc\glscategory{\glscurrententrylabel}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrpostdescgeneral} % \begin{macrocode} \newcommand*{\glsxtrpostdescgeneral}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrpostdescterm} % \begin{macrocode} \newcommand*{\glsxtrpostdescterm}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrpostdescacronym} % \begin{macrocode} \newcommand*{\glsxtrpostdescacronym}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrpostdescabbreviation} % \begin{macrocode} \newcommand*{\glsxtrpostdescabbreviation}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsdefpostdesc} %\changes{1.31}{2018-05-09}{new} %Provide a convenient command for defining the post-description hook %for the given category. % \begin{macrocode} \newcommand*{\glsdefpostdesc}[2]{% \csdef{glsxtrpostdesc#1}{#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glspostlinkhook} % Redefine the post link hook used by commands like \cs{gls} to % make it easier for categories or attributes to modify this action. % Since this hook occurs outside the existence check of commands like % \cs{gls}, this needs to be checked again here. Do nothing if the % entry hasn't been defined. %\changes{0.5.4}{2015-12-15}{added existence check} % \begin{macrocode} \renewcommand*{\glspostlinkhook}{% \ifglsentryexists{\glslabel}{\glsxtrpostlinkhook}{}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrpostlinkhook} % The entry label should already be stored in \cs{glslabel} by % \cs{@gls@link}. % \begin{macrocode} \newcommand*{\glsxtrpostlinkhook}{% \glsxtrdiscardperiod{\glslabel}% {\glsxtrpostlinkendsentence}% {\glsxtrifcustomdiscardperiod {\glsxtrifperiod{\glsxtrpostlinkendsentence}{\glsxtrpostlink}}% {\glsxtrpostlink}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrifcustomdiscardperiod} %\changes{1.23}{2017-11-12}{new} %Allow user to provide a custom check. Should expand to \verb|#2| if %no check is required otherwise expand to \verb|#1|. % \begin{macrocode} \newcommand*{\glsxtrifcustomdiscardperiod}[2]{#2} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrpostlink} % \begin{macrocode} \newcommand*{\glsxtrpostlink}{% \csuse{glsxtrpostlink\glscategory{\glslabel}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsdefpostlink} %\changes{1.31}{2018-05-09}{new} %Provide a convenient command for defining the post-link hook %for the given category. Doesn't allow an empty argument (which) %would overwrite \cs{glsxtrpostlink}. % \begin{macrocode} \newcommand*{\glsdefpostlink}[2]{% % \end{macrocode} % \cs{ifthenelse} is used to ensure that the expanded value is % tested. (The category label must be fully expandable.) % \begin{macrocode} \ifthenelse{\equal{#1}{}}% {\PackageError{glossaries-extra} {Invalid empty category label in \string\glsdefpostlink}{}}% {\csdef{glsxtrpostlink#1}{#2}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrpostlinkendsentence} %\changes{0.3}{2015-12-02}{new} % Done by \cs{glsxtrpostlinkhook} if a full stop is discarded. % \begin{macrocode} \newcommand*{\glsxtrpostlinkendsentence}{% \ifcsdef{glsxtrpostlink\glscategory{\glslabel}} {% \csuse{glsxtrpostlink\glscategory{\glslabel}}% % \end{macrocode} % Put the full stop back. % \begin{macrocode} .\spacefactor\sfcode`\. \relax }% {% % \end{macrocode} % Assume the full stop was discarded because the entry ends with a % period, so adjust the spacefactor. % \begin{macrocode} \spacefactor\sfcode`\. \relax }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrpostlinkAddDescOnFirstUse} %\changes{0.3}{2015-12-02}{new} % Provide a command for appending the description in parentheses on % first use, for the convenience of users wanting to add this to the % post link hook. %\changes{1.25}{2017-11-24}{changed to use \cs{glsxtrparen}} % \begin{macrocode} \newcommand*{\glsxtrpostlinkAddDescOnFirstUse}{% \glsxtrifwasfirstuse{\space\glsxtrparen{\glsaccessdesc{\glslabel}}}{}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrpostlinkAddSymbolOnFirstUse} %\changes{0.3}{2015-12-02}{new} % Provide a command for appending the symbol (if defined) in parentheses on % first use, for the convenience of users wanting to add this to the % post link hook. %\changes{1.25}{2017-11-24}{changed to use \cs{glsxtrparen}} % \begin{macrocode} \newcommand*{\glsxtrpostlinkAddSymbolOnFirstUse}{% \glsxtrifwasfirstuse {% \ifglshassymbol{\glslabel}% {\space\glsxtrparen{\glsaccesssymbol{\glslabel}}}% {}% }% {}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrpostlinkAddSymbolDescOnFirstUse} %\changes{1.31}{2018-05-09}{new} % Provide a command for appending the symbol (if defined) and % description in parentheses on % first use, for the convenience of users wanting to add this to the % post link hook. % \begin{macrocode} \newcommand*{\glsxtrpostlinkAddSymbolDescOnFirstUse}{% \glsxtrifwasfirstuse {% \space\glsxtrparen {% \ifglshassymbol{\glslabel}% {\glsaccesssymbol{\glslabel}, }% {}% \glsaccessdesc{\glslabel}% }% }% {}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrdiscardperiod} % Discard following period (if present) if the % \catattr{discardperiod} attribute is true. If a period is % discarded, do the second argument otherwise do the third % argument. The entry label is in the first argument. % Since this is designed for abbreviations that end with a period, % check if the plural form was used (which typically won't end with % a period). %\changes{0.3}{2015-12-02}{added check for plural} %\changes{1.01}{2016-02-02}{added check for first use} % \begin{macrocode} \newcommand*{\glsxtrdiscardperiod}[3]{% \glsxtrifwasfirstuse {% \glsifattribute{#1}{retainfirstuseperiod}{true}% {#3}% {% \glsifattribute{#1}{discardperiod}{true}% {% \glsifplural {% \glsifattribute{#1}{pluraldiscardperiod}{true}% {\glsxtrifperiod{#2}{#3}}% {#3}% }% {% \glsxtrifperiod{#2}{#3}% }% }% {#3}% }% }% {% \glsifattribute{#1}{discardperiod}{true}% {% \glsifplural {% \glsifattribute{#1}{pluraldiscardperiod}{true}% {\glsxtrifperiod{#2}{#3}}% {#3}% }% {% \glsxtrifperiod{#2}{#3}% }% }% {#3}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrifperiod} % Make a convenient user command to check if the next character is a % full stop (period). Works like \cs{@ifstar} but uses % \cs{new@ifnextchar} rather than \cs{@ifnextchar} % \begin{macrocode} \newcommand*{\glsxtrifperiod}[1]{\new@ifnextchar.{\@firstoftwo{#1}}} % \end{macrocode} %\end{macro} % % Sometimes it's useful to test if there's a punctuation character % following the glossary entry. %\begin{macro}{\glsxtr@punclist} % List of characters identified as punctuation marks. (Be careful of % \sty{babel} shorthands!) This doesn't allow for punctuation marks % made up from multiple characters (such as \verb|''|). % \begin{macrocode} \newcommand*{\glsxtr@punclist}{.,:;?!} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtraddpunctuationmark} % Add character to punctuation list. % \begin{macrocode} \newcommand*{\glsxtraddpunctuationmark}[1]{\appto\glsxtr@punclist{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrsetpunctuationmarks} % Reset the punctuation list. % \begin{macrocode} \newcommand*{\glsxtrsetpunctuationmarks}[1]{\def\glsxtr@punclist{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrifpunc} %\begin{definition} %\cs{glsxtrifnextpunc}\marg{true part}\marg{false part} %\end{definition} %Test if this is followed by a punctuation mark. (Adapted from %\cs{new@ifnextchar}.) % \begin{macrocode} \newcommand*{\glsxtrifnextpunc}[2]{% \def\reserved@a{#1}% \def\reserved@b{#2}% \futurelet\@glspunc@token\glsxtr@ifnextpunc } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@ifnextpunc} % \begin{macrocode} \newcommand*{\glsxtr@ifnextpunc}{% \glsxtr@ifpunctoken{\@glspunc@token}{\let\reserved@b\reserved@a}{}% \reserved@b } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@ifpunctoken} % Test if the token given in the first argument is in the % punctuation list. % \begin{macrocode} \newcommand*{\glsxtr@ifpunctoken}[1]{% \expandafter\@glsxtr@ifpunctoken\expandafter#1\glsxtr@punclist\@nnil } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@ifpunctoken} % \begin{macrocode} \def\@glsxtr@ifpunctoken#1#2{% \let\reserved@d=#2% \ifx\reserved@d\@nnil \let\glsxtr@next\@glsxtr@notfoundinlist \else \ifx#1\reserved@d \let\glsxtr@next\@glsxtr@foundinlist \else \let\glsxtr@next\@glsxtr@ifpunctoken \fi \fi \glsxtr@next#1% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@foundinlist} % \begin{macrocode} \def\@glsxtr@foundinlist#1\@nnil{\@firstoftwo} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@notfoundinlist} % \begin{macrocode} \def\@glsxtr@notfoundinlist#1{\@secondoftwo} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrdopostpunc} %\begin{definition} %\cs{glsxtrdopostpunc}\marg{code} %\end{definition} % If this is followed be a punctuation character, do \meta{code} % after the character otherwise do \meta{code} before whatever comes % next. % \begin{macrocode} \newcommand{\glsxtrdopostpunc}[1]{% \glsxtrifnextpunc{\@glsxtr@swaptwo{#1}}{#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@swaptwo} % \begin{macrocode} \newcommand{\@glsxtr@swaptwo}[2]{#2#1} % \end{macrocode} %\end{macro} % %\section{Abbreviations} % %The \qt{acronym} code from \styfmt{glossaries} is misnamed as it's more %often used for other forms of abbreviations. This code corrects %this inconsistency, but rather than just having synonyms, provide % commands for abbreviations that have a similar, but not identical, % underlying mechanism to acronyms. % % If there's a style for the given category, it needs to be applied % by \cs{newabbreviation}. % \begin{macrocode} \define@key{glsxtrabbrv}{category}{% \edef\glscategorylabel{#1}% } % \end{macrocode} % Save the short plural form. This may be needed before the entry is % defined. % \begin{macrocode} \define@key{glsxtrabbrv}{shortplural}{% \def\@gls@shortpl{#1}% } % \end{macrocode} % Similarly for the long plural form. % \begin{macrocode} \define@key{glsxtrabbrv}{longplural}{% \def\@gls@longpl{#1}% } % \end{macrocode} % % Token registers for the short plural and long plural, provided for % use in the abbreviation style definitions. %\begin{macro}{\glsshortpltok} %\changes{0.3}{2015-12-02}{new} % \begin{macrocode} \newtoks\glsshortpltok % \end{macrocode} %\end{macro} %\begin{macro}{\glslongpltok} %\changes{0.3}{2015-12-02}{new} % \begin{macrocode} \newtoks\glslongpltok % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@insertdots} %\changes{0.3}{2015-12-02}{new} % Provided in case user wants to automatically insert dots between % each letter of the abbreviation. This should be applied before % defining the abbreviation to optimise the document build. % (Otherwise, it would have to be done each time the short form is % required, which is an unnecessary waste of time.) For this to work % the short form must be expanded when passed to % \cs{newabbreviation}. Note that explicitly using the % \gloskey{short} or \gloskey{shortplural} keys will override this. % \begin{macrocode} \newcommand*{\@glsxtr@insertdots}[2]{% \def#1{}% \@glsxtr@insert@dots#1#2\@nnil } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@insert@dots} % \begin{macrocode} \newcommand*{\@glsxtr@insert@dots}[2]{% \ifx\@nnil#2\relax \let\@glsxtr@insert@dots@next\@gobble \else \ifx\relax#2\relax \else \appto#1{#2.}% \fi \let\@glsxtr@insert@dots@next\@glsxtr@insert@dots \fi \@glsxtr@insert@dots@next#1% } % \end{macrocode} %\end{macro} % %Similarly provide a way of replacing spaces with %\cs{glsxtrwordsep}, which first needs to be defined: %\begin{macro}{\glsxtrwordsep} %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \newcommand*{\glsxtrwordsep}{\space} % \end{macrocode} %\end{macro} %Each word is marked with %\begin{macro}{\glsxtrword} %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \newcommand*{\glsxtrword}[1]{#1} % \end{macrocode} %\end{macro} %\begin{macro}{\@glsxtr@markwordseps} %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \newcommand*{\@glsxtr@markwordseps}[2]{% \def#1{}% \@glsxtr@mark@wordseps#1#2 \@nnil } % \end{macrocode} %\end{macro} %\begin{macro}{\@glsxtr@mark@wordseps} %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \def\@glsxtr@mark@wordseps#1#2 #3{% \ifdefempty{#1}% {\def#1{\protect\glsxtrword{#2}}}% {\appto#1{\protect\glsxtrwordsep\protect\glsxtrword{#2}}}% \ifx\@nnil#3\relax \let\@glsxtr@mark@wordseps@next\relax \else \def\@glsxtr@mark@wordseps@next{% \@glsxtr@mark@wordseps#1#3}% \fi \@glsxtr@mark@wordseps@next } % \end{macrocode} %\end{macro} % %\begin{macro}{\newabbreviation} % Define a new generic abbreviation. % \begin{macrocode} \newcommand*{\newabbreviation}[4][]{% \glsxtr@newabbreviation{#1}{#2}{#3}{#4}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@newabbreviation} % Internal macro. (bib2gls has an option that needs to % temporarily redefine \cs{newabbreviation}. This is just makes % it easier to save and restore the original definition.) %\changes{1.12}{2017-02-03}{new} % \begin{macrocode} \newcommand*{\glsxtr@newabbreviation}[4]{% \glskeylisttok{#1}% \glslabeltok{#2}% \glsshorttok{#3}% \glslongtok{#4}% % \end{macrocode} %Save the original short and long values (before attribute settings %modify them). %\changes{1.17}{2017-08-09}{added \cs{glsxtrorgshort} and \cs{glsxtrorglong}} % \begin{macrocode} \def\glsxtrorgshort{#3}% \def\glsxtrorglong{#4}% % \end{macrocode} %\changes{1.31}{2018-05-09}{added \cs{ExtraCustomAbbreviationFields}} %Provide extra settings for hooks (if modified, this command must %end with a comma). % \begin{macrocode} \def\ExtraCustomAbbreviationFields{}% % \end{macrocode} %Initialise accessibility settings if required. % \begin{macrocode} \@gls@initaccesskeys % \end{macrocode} % Get the category. %\changes{0.3}{2015-12-02}{fixed family name in \cs{setkeys}} %\changes{1.42}{2020-02-03}{moved apply abbreviation style to after category %key has been obtained} % \begin{macrocode} \def\glscategorylabel{abbreviation}% % \end{macrocode} % Ignore the shortplural and longplural keys. % \begin{macrocode} \setkeys*{glsxtrabbrv}[shortplural,longplural]{#1}% % \end{macrocode} % Set the abbreviation style. % \begin{macrocode} \ifcsdef{@glsabbrv@current@\glscategorylabel}% {% % \end{macrocode} % Warning should already have been issued. % \begin{macrocode} \let\@glsxtr@orgwarndep\GlsXtrWarnDeprecatedAbbrStyle \let\GlsXtrWarnDeprecatedAbbrStyle\@gobbletwo \glsxtr@applyabbrvstyle{\csname @glsabbrv@current@\glscategorylabel\endcsname}% \let\GlsXtrWarnDeprecatedAbbrStyle\@glsxtr@orgwarndep }% {% % \end{macrocode} %If no style has been associated with this category, fallback on the style %for the \category{abbreviation} category. % \begin{macrocode} \glsxtr@applyabbrvstyle{\@glsabbrv@current@abbreviation}% }% % \end{macrocode} % Set the default long plural % \begin{macrocode} \def\@gls@longpl{#4\glspluralsuffix}% \let\@gls@default@longpl\@gls@longpl % \end{macrocode} % Has the \catattr{markwords} attribute been set? % \begin{macrocode} \glsifcategoryattribute{\glscategorylabel}{markwords}{true}% {% \@glsxtr@markwordseps\@gls@long{#4}% \expandafter\def\expandafter\@gls@longpl\expandafter {\@gls@long\glspluralsuffix}% \let\@gls@default@longpl\@gls@longpl % \end{macrocode} % Update \cs{glslongtok}. % \begin{macrocode} \expandafter\glslongtok\expandafter{\@gls@long}% }% {}% % \end{macrocode} % Has the \catattr{markshortwords} attribute been set? (Not % compatible with \catattr{insertdots}.) % \begin{macrocode} \glsifcategoryattribute{\glscategorylabel}{markshortwords}{true}% {% \@glsxtr@markwordseps\@gls@short{#3}% }% {% % \end{macrocode} % Has the \catattr{insertdots} attribute been set? % \begin{macrocode} \glsifcategoryattribute{\glscategorylabel}{insertdots}{true}% {% \@glsxtr@insertdots\@gls@short{#3}% % \end{macrocode} %\changes{1.42}{2020-02-03}{removed \cs{relax} and updated \cs{@gls@short} %instead of \cs{glsshorttok}} %\changes{1.42}{2020-02-03}{replaced explicit \cs{spacefactor} with \cs{@}} % \begin{macrocode} \appto\@gls@short{\@}% }% {\def\@gls@short{#3}}% }% % \end{macrocode} % Has the \catattr{aposplural} attribute been set? (Not compatible % with \catattr{noshortplural}.) % \begin{macrocode} \glsifcategoryattribute{\glscategorylabel}{aposplural}{true}% {% \expandafter\def\expandafter\@gls@shortpl\expandafter{\@gls@short '\abbrvpluralsuffix}% }% {% % \end{macrocode} % Has the \catattr{noshortplural} attribute been set? % \begin{macrocode} \glsifcategoryattribute{\glscategorylabel}{noshortplural}{true}% {% \let\@gls@shortpl\@gls@short }% {% \expandafter\def\expandafter\@gls@shortpl\expandafter{\@gls@short \abbrvpluralsuffix}% }% }% % \end{macrocode} % Update \cs{glsshorttok}: % \begin{macrocode} \expandafter\glsshorttok\expandafter{\@gls@short}% % \end{macrocode} % Hook for further customisation if required: % \begin{macrocode} \glsxtrnewabbrevpresetkeyhook{#1}{#2}{#3}% % \end{macrocode} % Get the short and long plurals provided by user in optional % argument to override defaults, if necessary. % Ignore the category key (already obtained). % \begin{macrocode} \setkeys*{glsxtrabbrv}[category]{#1}% % \end{macrocode} % Save in case required. % \begin{macrocode} \let\@gls@org@longpl\@gls@longpl \let\@gls@org@shortpl\@gls@shortpl % \end{macrocode} % Has the plural been explicitly set? % \begin{macrocode} \ifx\@gls@default@longpl\@gls@longpl \else % \end{macrocode} % Has the \catattr{markwords} attribute been set? % \begin{macrocode} \glsifcategoryattribute{\glscategorylabel}{markwords}{true}% {% \expandafter\@glsxtr@markwordseps\expandafter\@gls@longpl\expandafter {\@gls@longpl}% }% {}% \fi % \end{macrocode} % Set the plural token registers so the values can be accessed by % the abbreviation styles. % \begin{macrocode} \expandafter\glsshortpltok\expandafter{\@gls@shortpl}% \expandafter\glslongpltok\expandafter{\@gls@longpl}% % \end{macrocode} % Hook for accessibility support (does nothing if % \sty{glossaries-accsupp} hasn't been loaded). % \begin{macrocode} \@gls@setup@default@access % \end{macrocode} % Do any extra setup provided by hook: % \begin{macrocode} \newabbreviationhook % \end{macrocode} % Define this entry: % \begin{macrocode} \protected@edef\@do@newglossaryentry{% \noexpand\newglossaryentry{\the\glslabeltok}% {% type=\glsxtrabbrvtype,% category=abbreviation,% short={\the\glsshorttok},% shortplural={\the\glsshortpltok},% long={\the\glslongtok},% longplural={\the\glslongpltok},% name={\the\glsshorttok},% \CustomAbbreviationFields,% % \end{macrocode} % Hook may override abbreviation style default settings (this hook % must end with a comma if set). % \begin{macrocode} \ExtraCustomAbbreviationFields % \end{macrocode} % Any explicit fields set in the optional argument override all % other settings. % \begin{macrocode} \the\glskeylisttok }% }% \@do@newglossaryentry % \end{macrocode} % Obtain the type and add it to the list of abbreviations. % \begin{macrocode} \@glsxtr@addabbreviationlist{\glsentrytype{\the\glslabeltok}}% \GlsXtrPostNewAbbreviation } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrnewabbrevpresetkeyhook} % Hook for extra stuff in \cs{newabbreviation} %\changes{0.5.2}{2015-12-08}{new} % \begin{macrocode} \newcommand*{\glsxtrnewabbrevpresetkeyhook}[3]{} % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrPostNewAbbreviation} % Hook used by abbreviation styles. % \begin{macrocode} \newcommand*{\GlsXtrPostNewAbbreviation}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\newabbreviationhook} % Hook for use with \cs{newabbreviation}. % \begin{macrocode} \newcommand*{\newabbreviationhook}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\CustomAbbreviationFields} % \begin{macrocode} \newcommand*{\CustomAbbreviationFields}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrparen} %\changes{1.17}{2017-08-09}{new} %For the parenthetical styles. % \begin{macrocode} \newcommand*{\glsxtrparen}[1]{(#1)} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrfullformat} % Full format without case change. % \begin{macrocode} \newcommand*{\glsxtrfullformat}[2]{% \glsfirstlongfont{\glsaccesslong{#1}}#2\glsxtrfullsep{#1}% \glsxtrparen{\protect\glsfirstabbrvfont{\glsaccessshort{#1}}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrfullformat} % Full format with case change. % \begin{macrocode} \newcommand*{\Glsxtrfullformat}[2]{% \glsfirstlongfont{\Glsaccesslong{#1}}#2\glsxtrfullsep{#1}% \glsxtrparen{\protect\glsfirstabbrvfont{\glsaccessshort{#1}}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrfullplformat} % Plural full format without case change. % \begin{macrocode} \newcommand*{\glsxtrfullplformat}[2]{% \glsfirstlongfont{\glsaccesslongpl{#1}}#2\glsxtrfullsep{#1}% \glsxtrparen{\protect\glsfirstabbrvfont{\glsaccessshortpl{#1}}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrfullplformat} % Plural full format with case change. % \begin{macrocode} \newcommand*{\Glsxtrfullplformat}[2]{% \glsfirstlongfont{\Glsaccesslongpl{#1}}#2\glsxtrfullsep{#1}% \glsxtrparen{\protect\glsfirstabbrvfont{\glsaccessshortpl{#1}}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrfullsep} % Separator used by full format is a space by default. The argument % is the entry's label. % \begin{macrocode} \newcommand*{\glsxtrfullsep}[1]{\space} % \end{macrocode} %\end{macro} % % In-line formats in case first use isn't compatible with % \cs{glsentryfull} (for example, first use suppresses the long form % or uses a footnote). %\begin{macro}{\glsxtrinlinefullformat} % Full format without case change. % \begin{macrocode} \newcommand*{\glsxtrinlinefullformat}{\glsxtrfullformat} % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrinlinefullformat} % Full format with case change. % \begin{macrocode} \newcommand*{\Glsxtrinlinefullformat}{\Glsxtrfullformat} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrfullplformat} % Plural full format without case change. % \begin{macrocode} \newcommand*{\glsxtrinlinefullplformat}{\glsxtrfullplformat} % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrinlinefullplformat} % Plural full format with case change. % \begin{macrocode} \newcommand*{\Glsxtrinlinefullplformat}{\Glsxtrfullplformat} % \end{macrocode} %\end{macro} % % Redefine \cs{glsentryfull} etc to use the inline format. % Since these commands as supposed to be expandable, they can only % use the currently applied style. If there are mixed styles, you'll % need to use the \cs{glsxtrfull} set of commands instead. %\begin{macro}{\glsentryfull} % \begin{macrocode} \renewcommand*{\glsentryfull}[1]{\glsxtrinlinefullformat{#1}{}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsentryfull} % \begin{macrocode} \renewcommand*{\Glsentryfull}[1]{\Glsxtrinlinefullformat{#1}{}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsentryfullpl} % \begin{macrocode} \renewcommand*{\glsentryfullpl}[1]{\glsxtrinlinefullplformat{#1}{}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsentryfullpl} % \begin{macrocode} \renewcommand*{\Glsentryfullpl}[1]{\Glsxtrinlinefullplformat{#1}{}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsfirstabbrvfont} % Font changing command used for the abbreviation on first use or in % the full format. % \begin{macrocode} \newcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvdefaultfont{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsfirstabbrvdefaultfont} % Font changing command used for the abbreviation on first use or in % the full format. %\changes{0.5}{2015-12-07}{new} %\changes{1.40}{2019-03-31}{changed definition from \cs{glsabbrvfont} to %\cs{glsabbrvdefaultfont} for consistency} % \begin{macrocode} \newcommand*{\glsfirstabbrvdefaultfont}[1]{\glsabbrvdefaultfont{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsabbrvfont} % Font changing command used for the abbreviation on subsequent use. % This is redefined by the abbreviation styles, as appropriate. % \begin{macrocode} \newcommand*{\glsabbrvfont}[1]{\glsabbrvdefaultfont{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsabbrvdefaultfont} %\changes{0.3}{2015-12-02}{renamed from \cs{abbrvdefaultfont}} % \begin{macrocode} \newcommand*{\glsabbrvdefaultfont}[1]{#1} % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongfont} %\changes{1.04}{2016-05-02}{new} % Font changing command used for the long form in commands like % \cs{glsxtrlong}. % \begin{macrocode} \newcommand*{\glslongfont}[1]{\glslongdefaultfont{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongdefaultfont} % Default font changing command used for the long form in commands like %\changes{1.04}{2016-05-02}{new} % \cs{glsxtrlong}. % \begin{macrocode} \newcommand*{\glslongdefaultfont}[1]{#1} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsfirstlongfont} % Font changing command used for the long form on first use or in % the full format. % \begin{macrocode} \newcommand*{\glsfirstlongfont}[1]{\glslongfont{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsfirstlongdefaultfont} %\changes{0.5}{2015-12-07}{new} % \begin{macrocode} \newcommand*{\glsfirstlongdefaultfont}[1]{\glslongdefaultfont{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrabbrvpluralsuffix} % Default plural suffix. %\changes{1.12}{2017-02-03}{new} %Allow an alternative default suffix for abbreviations. % \begin{macrocode} \newcommand*{\glsxtrabbrvpluralsuffix}{\glspluralsuffix} % \end{macrocode} %\end{macro} % %\begin{macro}{\abbrvpluralsuffix} % Default plural suffix. % \begin{macrocode} \newcommand*{\abbrvpluralsuffix}{\glsxtrabbrvpluralsuffix} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrfull} % Full form (no case-change). % \begin{macrocode} \newrobustcmd*{\glsxtrfull}{\@gls@hyp@opt\ns@glsxtrfull} \newcommand*\ns@glsxtrfull[2][]{% \new@ifnextchar[{\@glsxtr@full{#1}{#2}}% {\@glsxtr@full{#1}{#2}[]}% } % \end{macrocode} %\end{macro} %\begin{macro}{\@glsxtr@full} % Low-level macro: % \begin{macrocode} \def\@glsxtr@full#1#2[#3]{% % \end{macrocode} %If the \pkgopt{record} option has been used, the information needs %to be written to the aux file regardless of whether the entry %exists (unless indexing has been switched off). %\changes{1.30}{2018-04-25}{added \cs{@glsxtr@record}} % \begin{macrocode} \@glsxtr@record{#1}{#2}{glslink}% \glsdoifexists{#2}% {% \glssetabbrvfmt{\glscategory{#2}}% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsifplural\@secondoftwo \let\glscapscase\@firstofthree \let\glsinsert\@empty \def\glscustomtext{\glsxtrinlinefullformat{#2}{#3}}% % \end{macrocode} % What should \cs{glsxtrifwasfirstuse} be set to here? Where the inline % and display full forms are the same, this is essentially emulating % first use, to it make sense for the postlink hook to pretend it % was a first use instance. It makes less sense if the inline and % display forms are different. Provide a hook to make it easier to % reconfigure. % \begin{macrocode} \glsxtrsetupfulldefs \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrsetupfulldefs} % \begin{macrocode} \newcommand*{\glsxtrsetupfulldefs}{% \let\glsxtrifwasfirstuse\@firstoftwo } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrfull} % Full form (first letter uppercase). % \begin{macrocode} \newrobustcmd*{\Glsxtrfull}{\@gls@hyp@opt\ns@Glsxtrfull} \newcommand*\ns@Glsxtrfull[2][]{% \new@ifnextchar[{\@Glsxtr@full{#1}{#2}}% {\@Glsxtr@full{#1}{#2}[]}% } % \end{macrocode} %\end{macro} %\begin{macro}{\@Glsxtr@full} % Low-level macro: % \begin{macrocode} \def\@Glsxtr@full#1#2[#3]{% \glsdoifexists{#2}% {% \glssetabbrvfmt{\glscategory{#2}}% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsifplural\@secondoftwo \let\glscapscase\@secondofthree \let\glsinsert\@empty \def\glscustomtext{\Glsxtrinlinefullformat{#2}{#3}}% \glsxtrsetupfulldefs \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSxtrfull} % Full form (all uppercase). % \begin{macrocode} \newrobustcmd*{\GLSxtrfull}{\@gls@hyp@opt\ns@GLSxtrfull} \newcommand*\ns@GLSxtrfull[2][]{% \new@ifnextchar[{\@GLSxtr@full{#1}{#2}}% {\@GLSxtr@full{#1}{#2}[]}% } % \end{macrocode} %\end{macro} %\begin{macro}{\@GLSxtr@full} % Low-level macro: % \begin{macrocode} \def\@GLSxtr@full#1#2[#3]{% \glsdoifexists{#2}% {% \glssetabbrvfmt{\glscategory{#2}}% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsifplural\@secondoftwo \let\glscapscase\@thirdofthree \let\glsinsert\@empty \def\glscustomtext{\mfirstucMakeUppercase{\glsxtrinlinefullformat{#2}{#3}}}% \glsxtrsetupfulldefs \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrfullpl} % Plural full form (no case-change). % \begin{macrocode} \newrobustcmd*{\glsxtrfullpl}{\@gls@hyp@opt\ns@glsxtrfullpl} \newcommand*\ns@glsxtrfullpl[2][]{% \new@ifnextchar[{\@glsxtr@fullpl{#1}{#2}}% {\@glsxtr@fullpl{#1}{#2}[]}% } % \end{macrocode} %\end{macro} %\begin{macro}{\@glsxtr@fullpl} % Low-level macro: % \begin{macrocode} \def\@glsxtr@fullpl#1#2[#3]{% % \end{macrocode} %If the \pkgopt{record} option has been used, the information needs %to be written to the aux file regardless of whether the entry %exists (unless indexing has been switched off). %\changes{1.30}{2018-04-25}{added \cs{@glsxtr@record}} % \begin{macrocode} \@glsxtr@record{#1}{#2}{glslink}% \glsdoifexists{#2}% {% \glssetabbrvfmt{\glscategory{#2}}% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsifplural\@firstoftwo \let\glscapscase\@firstofthree \let\glsinsert\@empty \def\glscustomtext{\glsxtrinlinefullplformat{#2}{#3}}% \glsxtrsetupfulldefs \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrfullpl} % Plural full form (first letter uppercase). % \begin{macrocode} \newrobustcmd*{\Glsxtrfullpl}{\@gls@hyp@opt\ns@Glsxtrfullpl} \newcommand*\ns@Glsxtrfullpl[2][]{% \new@ifnextchar[{\@Glsxtr@fullpl{#1}{#2}}% {\@Glsxtr@fullpl{#1}{#2}[]}% } % \end{macrocode} %\end{macro} %\begin{macro}{\@Glsxtr@fullpl} % Low-level macro: % \begin{macrocode} \def\@Glsxtr@fullpl#1#2[#3]{% % \end{macrocode} %If the \pkgopt{record} option has been used, the information needs %to be written to the aux file regardless of whether the entry %exists (unless indexing has been switched off). %\changes{1.30}{2018-04-25}{added \cs{@glsxtr@record}} % \begin{macrocode} \@glsxtr@record{#1}{#2}{glslink}% \glsdoifexists{#2}% {% \glssetabbrvfmt{\glscategory{#2}}% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsifplural\@firstoftwo \let\glscapscase\@secondofthree \let\glsinsert\@empty \def\glscustomtext{\Glsxtrinlinefullplformat{#2}{#3}}% \glsxtrsetupfulldefs \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSxtrfullpl} % Plural full form (all upper case). % \begin{macrocode} \newrobustcmd*{\GLSxtrfullpl}{\@gls@hyp@opt\ns@GLSxtrfullpl} \newcommand*\ns@GLSxtrfullpl[2][]{% \new@ifnextchar[{\@GLSxtr@fullpl{#1}{#2}}% {\@GLSxtr@fullpl{#1}{#2}[]}% } % \end{macrocode} %\end{macro} %\begin{macro}{\@GLSxtr@fullpl} % Low-level macro: % \begin{macrocode} \def\@GLSxtr@fullpl#1#2[#3]{% % \end{macrocode} %If the \pkgopt{record} option has been used, the information needs %to be written to the aux file regardless of whether the entry %exists (unless indexing has been switched off). %\changes{1.30}{2018-04-25}{added \cs{@glsxtr@record}} % \begin{macrocode} \@glsxtr@record{#1}{#2}{glslink}% \glsdoifexists{#2}% {% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsifplural\@firstoftwo \let\glscapscase\@thirdofthree \let\glsinsert\@empty \def\glscustomtext{% \mfirstucMakeUppercase{\glsxtrinlinefullplformat{#2}{#3}}}% \glsxtrsetupfulldefs \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % % The short and long forms work in a similar way to acronyms. %\begin{macro}{\glsxtrshort} % \begin{macrocode} \newrobustcmd*{\glsxtrshort}{\@gls@hyp@opt\ns@glsxtrshort} % \end{macrocode} % Define the un-starred form. Need to determine if there is % a final optional argument % \begin{macrocode} \newcommand*{\ns@glsxtrshort}[2][]{% \new@ifnextchar[{\@glsxtrshort{#1}{#2}}{\@glsxtrshort{#1}{#2}[]}% } % \end{macrocode} % Read in the final optional argument: % \begin{macrocode} \def\@glsxtrshort#1#2[#3]{% % \end{macrocode} %If the \pkgopt{record} option has been used, the information needs %to be written to the aux file regardless of whether the entry %exists (unless indexing has been switched off). %\changes{1.30}{2018-04-25}{added \cs{@glsxtr@record}} % \begin{macrocode} \@glsxtr@record{#1}{#2}{glslink}% \glsdoifexists{#2}% {% % \end{macrocode} % Need to make sure \cs{glsabbrvfont} is set correctly. % \begin{macrocode} \glssetabbrvfmt{\glscategory{#2}}% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsxtrifwasfirstuse\@secondoftwo \let\glsifplural\@secondoftwo \let\glscapscase\@firstofthree \let\glsinsert\@empty \def\glscustomtext{% \glsabbrvfont{\glsaccessshort{#2}\ifglsxtrinsertinside#3\fi}% \ifglsxtrinsertinside\else#3\fi }% \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrshort} % \begin{macrocode} \newrobustcmd*{\Glsxtrshort}{\@gls@hyp@opt\ns@Glsxtrshort} % \end{macrocode} % Define the un-starred form. Need to determine if there is % a final optional argument % \begin{macrocode} \newcommand*{\ns@Glsxtrshort}[2][]{% \new@ifnextchar[{\@Glsxtrshort{#1}{#2}}{\@Glsxtrshort{#1}{#2}[]}% } % \end{macrocode} % Read in the final optional argument: % \begin{macrocode} \def\@Glsxtrshort#1#2[#3]{% % \end{macrocode} %If the \pkgopt{record} option has been used, the information needs %to be written to the aux file regardless of whether the entry %exists (unless indexing has been switched off). %\changes{1.30}{2018-04-25}{added \cs{@glsxtr@record}} % \begin{macrocode} \@glsxtr@record{#1}{#2}{glslink}% \glsdoifexists{#2}% {% \glssetabbrvfmt{\glscategory{#2}}% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsxtrifwasfirstuse\@secondoftwo \let\glsifplural\@secondoftwo \let\glscapscase\@secondofthree \let\glsinsert\@empty \def\glscustomtext{% \glsabbrvfont{\Glsaccessshort{#2}\ifglsxtrinsertinside#3\fi}% \ifglsxtrinsertinside\else#3\fi }% \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSxtrshort} % \begin{macrocode} \newrobustcmd*{\GLSxtrshort}{\@gls@hyp@opt\ns@GLSxtrshort} % \end{macrocode} % Define the un-starred form. Need to determine if there is % a final optional argument % \begin{macrocode} \newcommand*{\ns@GLSxtrshort}[2][]{% \new@ifnextchar[{\@GLSxtrshort{#1}{#2}}{\@GLSxtrshort{#1}{#2}[]}% } % \end{macrocode} % Read in the final optional argument: % \begin{macrocode} \def\@GLSxtrshort#1#2[#3]{% % \end{macrocode} %If the \pkgopt{record} option has been used, the information needs %to be written to the aux file regardless of whether the entry %exists (unless indexing has been switched off). %\changes{1.30}{2018-04-25}{added \cs{@glsxtr@record}} % \begin{macrocode} \@glsxtr@record{#1}{#2}{glslink}% \glsdoifexists{#2}% {% \glssetabbrvfmt{\glscategory{#2}}% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsxtrifwasfirstuse\@secondoftwo \let\glsifplural\@secondoftwo \let\glscapscase\@thirdofthree \let\glsinsert\@empty \def\glscustomtext{% \mfirstucMakeUppercase {\glsabbrvfont{\glsaccessshort{#2}\ifglsxtrinsertinside#3\fi}% \ifglsxtrinsertinside\else#3\fi }% }% \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrlong} % \begin{macrocode} \newrobustcmd*{\glsxtrlong}{\@gls@hyp@opt\ns@glsxtrlong} % \end{macrocode} % Define the un-starred form. Need to determine if there is % a final optional argument % \begin{macrocode} \newcommand*{\ns@glsxtrlong}[2][]{% \new@ifnextchar[{\@glsxtrlong{#1}{#2}}{\@glsxtrlong{#1}{#2}[]}% } % \end{macrocode} % Read in the final optional argument: % \begin{macrocode} \def\@glsxtrlong#1#2[#3]{% % \end{macrocode} %If the \pkgopt{record} option has been used, the information needs %to be written to the aux file regardless of whether the entry %exists (unless indexing has been switched off). %\changes{1.30}{2018-04-25}{added \cs{@glsxtr@record}} % \begin{macrocode} \@glsxtr@record{#1}{#2}{glslink}% \glsdoifexists{#2}% {% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsxtrifwasfirstuse\@secondoftwo \let\glsifplural\@secondoftwo \let\glscapscase\@firstofthree \let\glsinsert\@empty \def\glscustomtext{% \glslongfont{\glsaccesslong{#2}\ifglsxtrinsertinside#3\fi}% \ifglsxtrinsertinside\else#3\fi }% \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrlong} % \begin{macrocode} \newrobustcmd*{\Glsxtrlong}{\@gls@hyp@opt\ns@Glsxtrlong} % \end{macrocode} % Define the un-starred form. Need to determine if there is % a final optional argument % \begin{macrocode} \newcommand*{\ns@Glsxtrlong}[2][]{% \new@ifnextchar[{\@Glsxtrlong{#1}{#2}}{\@Glsxtrlong{#1}{#2}[]}% } % \end{macrocode} % Read in the final optional argument: % \begin{macrocode} \def\@Glsxtrlong#1#2[#3]{% % \end{macrocode} %If the \pkgopt{record} option has been used, the information needs %to be written to the aux file regardless of whether the entry %exists (unless indexing has been switched off). %\changes{1.30}{2018-04-25}{added \cs{@glsxtr@record}} % \begin{macrocode} \@glsxtr@record{#1}{#2}{glslink}% \glsdoifexists{#2}% {% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsxtrifwasfirstuse\@secondoftwo \let\glsifplural\@secondoftwo \let\glscapscase\@secondofthree \let\glsinsert\@empty \def\glscustomtext{% \glslongfont{\Glsaccesslong{#2}\ifglsxtrinsertinside#3\fi}% \ifglsxtrinsertinside\else#3\fi }% \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSxtrlong} % \begin{macrocode} \newrobustcmd*{\GLSxtrlong}{\@gls@hyp@opt\ns@GLSxtrlong} % \end{macrocode} % Define the un-starred form. Need to determine if there is % a final optional argument % \begin{macrocode} \newcommand*{\ns@GLSxtrlong}[2][]{% \new@ifnextchar[{\@GLSxtrlong{#1}{#2}}{\@GLSxtrlong{#1}{#2}[]}% } % \end{macrocode} % Read in the final optional argument: % \begin{macrocode} \def\@GLSxtrlong#1#2[#3]{% % \end{macrocode} %If the \pkgopt{record} option has been used, the information needs %to be written to the aux file regardless of whether the entry %exists (unless indexing has been switched off). %\changes{1.30}{2018-04-25}{added \cs{@glsxtr@record}} % \begin{macrocode} \@glsxtr@record{#1}{#2}{glslink}% \glsdoifexists{#2}% {% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsxtrifwasfirstuse\@secondoftwo \let\glsifplural\@secondoftwo \let\glscapscase\@thirdofthree \let\glsinsert\@empty \def\glscustomtext{% \mfirstucMakeUppercase {\glslongfont{\glsaccesslong{#2}\ifglsxtrinsertinside#3\fi}% \ifglsxtrinsertinside\else#3\fi }% }% \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % % Plural short forms: %\begin{macro}{\glsxtrshortpl} %\changes{0.3}{2015-12-02}{new} % \begin{macrocode} \newrobustcmd*{\glsxtrshortpl}{\@gls@hyp@opt\ns@glsxtrshortpl} % \end{macrocode} % Define the un-starred form. Need to determine if there is % a final optional argument % \begin{macrocode} \newcommand*{\ns@glsxtrshortpl}[2][]{% \new@ifnextchar[{\@glsxtrshortpl{#1}{#2}}{\@glsxtrshortpl{#1}{#2}[]}% } % \end{macrocode} % Read in the final optional argument: % \begin{macrocode} \def\@glsxtrshortpl#1#2[#3]{% % \end{macrocode} %If the \pkgopt{record} option has been used, the information needs %to be written to the aux file regardless of whether the entry %exists (unless indexing has been switched off). %\changes{1.30}{2018-04-25}{added \cs{@glsxtr@record}} % \begin{macrocode} \@glsxtr@record{#1}{#2}{glslink}% \glsdoifexists{#2}% {% \glssetabbrvfmt{\glscategory{#2}}% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsxtrifwasfirstuse\@secondoftwo \let\glsifplural\@firstoftwo \let\glscapscase\@firstofthree \let\glsinsert\@empty \def\glscustomtext{% \glsabbrvfont{\glsaccessshortpl{#2}\ifglsxtrinsertinside#3\fi}% \ifglsxtrinsertinside\else#3\fi }% \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrshortpl} %\changes{0.3}{2015-12-02}{new} % \begin{macrocode} \newrobustcmd*{\Glsxtrshortpl}{\@gls@hyp@opt\ns@Glsxtrshortpl} % \end{macrocode} % Define the un-starred form. Need to determine if there is % a final optional argument % \begin{macrocode} \newcommand*{\ns@Glsxtrshortpl}[2][]{% \new@ifnextchar[{\@Glsxtrshortpl{#1}{#2}}{\@Glsxtrshortpl{#1}{#2}[]}% } % \end{macrocode} % Read in the final optional argument: % \begin{macrocode} \def\@Glsxtrshortpl#1#2[#3]{% % \end{macrocode} %If the \pkgopt{record} option has been used, the information needs %to be written to the aux file regardless of whether the entry %exists (unless indexing has been switched off). %\changes{1.30}{2018-04-25}{added \cs{@glsxtr@record}} % \begin{macrocode} \@glsxtr@record{#1}{#2}{glslink}% \glsdoifexists{#2}% {% \glssetabbrvfmt{\glscategory{#2}}% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsxtrifwasfirstuse\@secondoftwo \let\glsifplural\@firstoftwo \let\glscapscase\@secondofthree \let\glsinsert\@empty \def\glscustomtext{% \glsabbrvfont{\Glsaccessshortpl{#2}\ifglsxtrinsertinside#3\fi}% \ifglsxtrinsertinside\else#3\fi }% \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSxtrshortpl} %\changes{0.3}{2015-12-02}{new} % \begin{macrocode} \newrobustcmd*{\GLSxtrshortpl}{\@gls@hyp@opt\ns@GLSxtrshortpl} % \end{macrocode} % Define the un-starred form. Need to determine if there is % a final optional argument % \begin{macrocode} \newcommand*{\ns@GLSxtrshortpl}[2][]{% \new@ifnextchar[{\@GLSxtrshortpl{#1}{#2}}{\@GLSxtrshortpl{#1}{#2}[]}% } % \end{macrocode} % Read in the final optional argument: % \begin{macrocode} \def\@GLSxtrshortpl#1#2[#3]{% % \end{macrocode} %If the \pkgopt{record} option has been used, the information needs %to be written to the aux file regardless of whether the entry %exists (unless indexing has been switched off). %\changes{1.30}{2018-04-25}{added \cs{@glsxtr@record}} % \begin{macrocode} \@glsxtr@record{#1}{#2}{glslink}% \glsdoifexists{#2}% {% \glssetabbrvfmt{\glscategory{#2}}% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsxtrifwasfirstuse\@secondoftwo \let\glsifplural\@firstoftwo \let\glscapscase\@thirdofthree \let\glsinsert\@empty \def\glscustomtext{% \mfirstucMakeUppercase {\glsabbrvfont{\glsaccessshortpl{#2}\ifglsxtrinsertinside#3\fi}% \ifglsxtrinsertinside\else#3\fi }% }% \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % % Plural long forms: %\begin{macro}{\glsxtrlongpl} %\changes{0.3}{2015-12-02}{new} % \begin{macrocode} \newrobustcmd*{\glsxtrlongpl}{\@gls@hyp@opt\ns@glsxtrlongpl} % \end{macrocode} % Define the un-starred form. Need to determine if there is % a final optional argument % \begin{macrocode} \newcommand*{\ns@glsxtrlongpl}[2][]{% \new@ifnextchar[{\@glsxtrlongpl{#1}{#2}}{\@glsxtrlongpl{#1}{#2}[]}% } % \end{macrocode} % Read in the final optional argument: % \begin{macrocode} \def\@glsxtrlongpl#1#2[#3]{% % \end{macrocode} %If the \pkgopt{record} option has been used, the information needs %to be written to the aux file regardless of whether the entry %exists (unless indexing has been switched off). %\changes{1.30}{2018-04-25}{added \cs{@glsxtr@record}} % \begin{macrocode} \@glsxtr@record{#1}{#2}{glslink}% \glsdoifexists{#2}% {% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsxtrifwasfirstuse\@secondoftwo \let\glsifplural\@firstoftwo \let\glscapscase\@firstofthree \let\glsinsert\@empty \def\glscustomtext{% \glslongfont{\glsaccesslongpl{#2}\ifglsxtrinsertinside#3\fi}% \ifglsxtrinsertinside\else#3\fi }% \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrlongpl} %\changes{0.3}{2015-12-02}{new} % \begin{macrocode} \newrobustcmd*{\Glsxtrlongpl}{\@gls@hyp@opt\ns@Glsxtrlongpl} % \end{macrocode} % Define the un-starred form. Need to determine if there is % a final optional argument % \begin{macrocode} \newcommand*{\ns@Glsxtrlongpl}[2][]{% \new@ifnextchar[{\@Glsxtrlongpl{#1}{#2}}{\@Glsxtrlongpl{#1}{#2}[]}% } % \end{macrocode} % Read in the final optional argument: % \begin{macrocode} \def\@Glsxtrlongpl#1#2[#3]{% % \end{macrocode} %If the \pkgopt{record} option has been used, the information needs %to be written to the aux file regardless of whether the entry %exists (unless indexing has been switched off). %\changes{1.30}{2018-04-25}{added \cs{@glsxtr@record}} % \begin{macrocode} \@glsxtr@record{#1}{#2}{glslink}% \glsdoifexists{#2}% {% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsxtrifwasfirstuse\@secondoftwo \let\glsifplural\@firstoftwo \let\glscapscase\@secondofthree \let\glsinsert\@empty \def\glscustomtext{% \glslongfont{\Glsaccesslongpl{#2}\ifglsxtrinsertinside#3\fi}% \ifglsxtrinsertinside\else#3\fi }% \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSxtrlongpl} %\changes{0.3}{2015-12-02}{new} % \begin{macrocode} \newrobustcmd*{\GLSxtrlongpl}{\@gls@hyp@opt\ns@GLSxtrlongpl} % \end{macrocode} % Define the un-starred form. Need to determine if there is % a final optional argument % \begin{macrocode} \newcommand*{\ns@GLSxtrlongpl}[2][]{% \new@ifnextchar[{\@GLSxtrlongpl{#1}{#2}}{\@GLSxtrlongpl{#1}{#2}[]}% } % \end{macrocode} % Read in the final optional argument: % \begin{macrocode} \def\@GLSxtrlongpl#1#2[#3]{% % \end{macrocode} %If the \pkgopt{record} option has been used, the information needs %to be written to the aux file regardless of whether the entry %exists (unless indexing has been switched off). %\changes{1.30}{2018-04-25}{added \cs{@glsxtr@record}} % \begin{macrocode} \@glsxtr@record{#1}{#2}{glslink}% \glsdoifexists{#2}% {% \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper \let\glsxtrifwasfirstuse\@secondoftwo \let\glsifplural\@firstoftwo \let\glscapscase\@thirdofthree \let\glsinsert\@empty \def\glscustomtext{% \mfirstucMakeUppercase {\glslongfont{\glsaccesslongpl{#2}\ifglsxtrinsertinside#3\fi}% \ifglsxtrinsertinside\else#3\fi }% }% \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% }% \glspostlinkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\glssetabbrvfmt} % Set the current format for the given category (or the % \category{abbreviation} category if unset). % \begin{macrocode} \newcommand*{\glssetabbrvfmt}[1]{% \ifcsdef{@glsabbrv@current@#1}% {\glsxtr@applyabbrvfmt{\csname @glsabbrv@current@#1\endcsname}}% {\glsxtr@applyabbrvfmt{\@glsabbrv@current@abbreviation}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsuseabbrvfont} % Provide a way to use the abbreviation font for a given category % for arbitrary text. %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newrobustcmd*{\glsuseabbrvfont}[2]{{\glssetabbrvfmt{#2}\glsabbrvfont{#1}}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsuselongfont} % Provide a way to use the long font for a given category % for arbitrary text. %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newrobustcmd*{\glsuselongfont}[2]{{\glssetabbrvfmt{#2}\glslongfont{#1}}} % \end{macrocode} %\end{macro} % %\changes{0.5.2}{2015-12-08}{removed \cs{glsxtrabbrvfmt}} %\begin{macro}{\glsxtrgenabbrvfmt} % Similar to \cs{glsgenacfmt}, but for abbreviations. %\changes{1.17}{2017-08-09}{added check for \cs{ifglsxtrinsertinside}} % \begin{macrocode} \newcommand*{\glsxtrgenabbrvfmt}{% \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} \glsxtrsubsequentplfmt{\glslabel}{\glsinsert}% }% {% % \end{macrocode} % Subsequent plural form, make first letter upper case: % \begin{macrocode} \Glsxtrsubsequentplfmt{\glslabel}{\glsinsert}% }% {% % \end{macrocode} % Subsequent plural form, all caps: % \begin{macrocode} \mfirstucMakeUppercase {\glsxtrsubsequentplfmt{\glslabel}{\glsinsert}}% }% }% {% % \end{macrocode} % Subsequent singular form % \begin{macrocode} \glscapscase {% % \end{macrocode} % Subsequent singular form, don't adjust case: % \begin{macrocode} \glsxtrsubsequentfmt{\glslabel}{\glsinsert}% }% {% % \end{macrocode} % Subsequent singular form, make first letter upper case: % \begin{macrocode} \Glsxtrsubsequentfmt{\glslabel}{\glsinsert}% }% {% % \end{macrocode} % Subsequent singular form, all caps: % \begin{macrocode} \mfirstucMakeUppercase {\glsxtrsubsequentfmt{\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} \glsxtrfullplformat{\glslabel}{\glsinsert}% }% {% % \end{macrocode} % First use plural form, make first letter upper case: % \begin{macrocode} \Glsxtrfullplformat{\glslabel}{\glsinsert}% }% {% % \end{macrocode} % First use plural form, all caps: % \begin{macrocode} \mfirstucMakeUppercase {\glsxtrfullplformat{\glslabel}{\glsinsert}}% }% }% {% % \end{macrocode} % First use singular form % \begin{macrocode} \glscapscase {% % \end{macrocode} % First use singular form, don't adjust case: % \begin{macrocode} \glsxtrfullformat{\glslabel}{\glsinsert}% }% {% % \end{macrocode} % First use singular form, make first letter upper case: % \begin{macrocode} \Glsxtrfullformat{\glslabel}{\glsinsert}% }% {% % \end{macrocode} % First use singular form, all caps: % \begin{macrocode} \mfirstucMakeUppercase {\glsxtrfullformat{\glslabel}{\glsinsert}}% }% }% }% }% {% % \end{macrocode} % User supplied text. % \begin{macrocode} \glscustomtext }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrsubsequentfmt} % Subsequent use format (singular no case change). %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \newcommand*{\glsxtrsubsequentfmt}[2]{% \glsabbrvfont{\glsaccessshort{#1}\ifglsxtrinsertinside #2\fi}% \ifglsxtrinsertinside \else#2\fi } \let\glsxtrdefaultsubsequentfmt\glsxtrsubsequentfmt % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrsubsequentplfmt} % Subsequent use format (plural no case change). %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \newcommand*{\glsxtrsubsequentplfmt}[2]{% \glsabbrvfont{\glsaccessshortpl{#1}\ifglsxtrinsertinside #2\fi}% \ifglsxtrinsertinside \else#2\fi } \let\glsxtrdefaultsubsequentplfmt\glsxtrsubsequentplfmt % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrsubsequentfmt} % Subsequent use format (singular, first letter uppercase). %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \newcommand*{\Glsxtrsubsequentfmt}[2]{% \glsabbrvfont{\Glsaccessshort{#1}\ifglsxtrinsertinside #2\fi}% \ifglsxtrinsertinside \else#2\fi } \let\Glsxtrdefaultsubsequentfmt\Glsxtrsubsequentfmt % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrsubsequentplfmt} % Subsequent use format (plural, first letter uppercase). %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \newcommand*{\Glsxtrsubsequentplfmt}[2]{% \glsabbrvfont{\Glsaccessshortpl{#1}\ifglsxtrinsertinside #2\fi}% \ifglsxtrinsertinside \else#2\fi } \let\Glsxtrdefaultsubsequentplfmt\Glsxtrsubsequentplfmt % \end{macrocode} %\end{macro} % %\subsection{Abbreviation Styles Setup} % %\begin{macro}{\setabbreviationstyle} % \begin{macrocode} \newcommand*{\setabbreviationstyle}[2][abbreviation]{% \ifcsundef{@glsabbrv@dispstyle@setup@#2} {% \PackageError{glossaries-extra}{Undefined abbreviation style `#2'}{}% }% {% % \end{macrocode} % Have abbreviations already been defined for this category? %\changes{0.5.2}{2015-12-08}{added check for post-definition style switch} % \begin{macrocode} \ifcsstring{@glsabbrv@current@#1}{#2}% {% % \end{macrocode} % Style already set. % \begin{macrocode} }% {% \def\@glsxtr@dostylewarn{}% \glsforeachincategory{#1}{\@gls@type}{\@gls@label}% {% \def\@glsxtr@dostylewarn{\GlossariesWarning{Abbreviation style has been switched \MessageBreak for category `#1', \MessageBreak but there have already been entries \MessageBreak defined for this category. Unwanted \MessageBreak side-effects may result}}% \@endfortrue }% \@glsxtr@dostylewarn % \end{macrocode} % Set up the style for the given category. % \begin{macrocode} \csdef{@glsabbrv@current@#1}{#2}% \edef\glscategorylabel{#1}% \glsxtr@applyabbrvstyle{#2}% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@applyabbrvstyle} % Apply the abbreviation style without existence check. % \begin{macrocode} \newcommand*{\glsxtr@applyabbrvstyle}[1]{% \csuse{@glsabbrv@dispstyle@setup@#1}% \csuse{@glsabbrv@dispstyle@fmts@#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@applyabbrvfmt} % Only apply the style formats. % \begin{macrocode} \newcommand*{\glsxtr@applyabbrvfmt}[1]{% \csuse{@glsabbrv@dispstyle@fmts@#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\newabbreviationstyle} % This is different from \cs{newacronymstyle}. The first argument is % the label, the second argument sets the information required when % defining the new abbreviation and the third argument sets the % commands used to display the full format. %\changes{1.04}{2016-05-02}{bug fix: corrected test for existence} % \begin{macrocode} \newcommand*{\newabbreviationstyle}[3]{% \ifcsdef{@glsabbrv@dispstyle@setup@#1} {% \PackageError{glossaries-extra}{Abbreviation style `#1' already defined}{}% }% {% \csdef{@glsabbrv@dispstyle@setup@#1}{% % \end{macrocode} % Initialise hook to do nothing. The style may change this. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{}% #2}% \csdef{@glsabbrv@dispstyle@fmts@#1}{% % \end{macrocode} % Assume in-line form is the same as first use. The style may change % this. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}{\glsxtrfullformat}% \renewcommand*{\Glsxtrinlinefullformat}{\Glsxtrfullformat}% \renewcommand*{\glsxtrinlinefullplformat}{\glsxtrfullplformat}% \renewcommand*{\Glsxtrinlinefullplformat}{\Glsxtrfullplformat}% % \end{macrocode} % Reset \cs{glsxtrsubsequentfmt} etc in case a style changes this. % \begin{macrocode} \let\glsxtrsubsequentfmt\glsxtrdefaultsubsequentfmt \let\glsxtrsubsequentplfmt\glsxtrdefaultsubsequentplfmt \let\Glsxtrsubsequentfmt\Glsxtrdefaultsubsequentfmt \let\Glsxtrsubsequentplfmt\Glsxtrdefaultsubsequentplfmt #3}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\renewabbreviationstyle} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \newcommand*{\renewabbreviationstyle}[3]{% \ifcsundef{@glsabbrv@dispstyle@setup@#1} {% \PackageError{glossaries-extra}{Abbreviation style `#1' not defined}{}% }% {% \csdef{@glsabbrv@dispstyle@setup@#1}{% % \end{macrocode} % Initialise hook to do nothing. The style may change this. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{}% #2}% \csdef{@glsabbrv@dispstyle@fmts@#1}{% % \end{macrocode} % Assume in-line form is the same as first use. The style may change % this. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}{\glsxtrfullformat}% \renewcommand*{\Glsxtrinlinefullformat}{\Glsxtrfullformat}% \renewcommand*{\glsxtrinlinefullplformat}{\glsxtrfullplformat}% \renewcommand*{\Glsxtrinlinefullplformat}{\Glsxtrfullplformat}% #3}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\letabbreviationstyle} %\changes{1.04}{2016-05-02}{new} % Define a synonym for an abbreviation style. The first argument is % the new name. The second argument is the original style's name. % \begin{macrocode} \newcommand*{\letabbreviationstyle}[2]{% \csletcs{@glsabbrv@dispstyle@setup@#1}{@glsabbrv@dispstyle@setup@#2}% \csletcs{@glsabbrv@dispstyle@fmts@#1}{@glsabbrv@dispstyle@fmts@#2}% } % \end{macrocode} %\end{macro} %\begin{macro}{\@glsxtr@deprecated@abbrstyle} %\changes{1.04}{2016-05-02}{new} %\begin{definition} %\cs{@glsxtr@deprecated@abbrstyle}\marg{old-name}\marg{new-name} %\end{definition} % Define a synonym for a deprecated abbreviation style. % \begin{macrocode} \newcommand*{\@glsxtr@deprecated@abbrstyle}[2]{% \csdef{@glsabbrv@dispstyle@setup@#1}{% \GlsXtrWarnDeprecatedAbbrStyle{#1}{#2}% \csuse{@glsabbrv@dispstyle@setup@#2}% }% \csletcs{@glsabbrv@dispstyle@fmts@#1}{@glsabbrv@dispstyle@fmts@#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrWarnDeprecatedAbbrStyle} %Generate warning for deprecated style use. %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \newcommand*{\GlsXtrWarnDeprecatedAbbrStyle}[2]{% \GlossariesExtraWarning{Deprecated abbreviation style name `#1', use `#2' instead}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrUseAbbrStyleSetup} % \begin{macrocode} \newcommand*{\GlsXtrUseAbbrStyleSetup}[1]{% \ifcsundef{@glsabbrv@dispstyle@setup@#1}% {% \PackageError{glossaries-extra}% {Unknown abbreviation style definitions `#1'}{}% }% {% \csname @glsabbrv@dispstyle@setup@#1\endcsname }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrUseAbbrStyleFmts} % \begin{macrocode} \newcommand*{\GlsXtrUseAbbrStyleFmts}[1]{% \ifcsundef{@glsabbrv@dispstyle@fmts@#1}% {% \PackageError{glossaries-extra}% {Unknown abbreviation style formats `#1'}{}% }% {% \csname @glsabbrv@dispstyle@fmts@#1\endcsname }% } % \end{macrocode} %\end{macro} % %\subsection{Predefined Styles (Default Font)} % Define some common styles. These will set the \gloskey{first}, % \gloskey{firstplural}, \gloskey{text} and \gloskey{plural} % keys, even if the \catattr{regular} attribute isn't set to % \qt{true}. If this attribute is set, commands like \cs{gls} will % use them as per a regular entry, otherwise those keys will be % ignored unless explicitly invoked by the user with commands like % \cs{glsfirst}. In order for the first letter uppercase versions to % work correctly, \cs{glsxtrfullformat} needs to be expanded when % those keys are set. The final optional argument of \cs{glsfirst} % will behave differently to the final optional argument of \cs{gls} % with some styles. % %\begin{macro}{\ifglsxtrinsertinside} %\changes{1.02}{2016-04-25}{new} % Switch to determine if the insert text should be inside or outside % the font changing command. The default is outside. % \begin{macrocode} \newif\ifglsxtrinsertinside \glsxtrinsertinsidefalse % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrlongshortname} %\changes{1.25}{2017-11-24}{new} % \begin{macrocode} \newcommand*{\glsxtrlongshortname}{% \protect\glsabbrvfont{\the\glsshorttok}% } % \end{macrocode} %\end{macro} % %\changes{1.17}{2017-08-09}{removed some inconsistencies in the abbreviation %styles} %\begin{abbrvstyle}{long-short} % \begin{macrocode} \newabbreviationstyle{long-short}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetFirstLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongshortname}, sort={\the\glsshorttok}, first={\protect\glsfirstlongfont{\the\glslongtok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstabbrvfont{\the\glsshorttok}}},% firstplural={\protect\glsfirstlongfont{\the\glslongpltok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstabbrvfont{\the\glsshortpltok}}},% % \end{macrocode} %\changes{1.15}{2017-05-10}{fixed spelling of \cs{glsabbrvfont}} %\changes{1.42}{2020-02-03}{added missing text key} % \begin{macrocode} plural={\protect\glsabbrvfont{\the\glsshortpltok}},% text={\protect\glsabbrvfont{\the\glsshorttok}},% description={\the\glslongtok}}% % \end{macrocode} %\changes{0.5.1}{2015-12-07}{switch off regular attribute if set} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} % In case the user wants to mix and match font styles, these are % redefined here. % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtrabbrvpluralsuffix}% \renewcommand*{\glsabbrvfont}[1]{\glsabbrvdefaultfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvdefaultfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}% % \end{macrocode} % The first use full form and the inline full form are the same for % this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstlongfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvfont{\glsaccessshort{##1}}}% }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstlongfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvfont{\glsaccessshortpl{##1}}}% }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstlongfont{\Glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvfont{\glsaccessshort{##1}}}% }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstlongfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvfont{\glsaccessshortpl{##1}}}% }% } % \end{macrocode} %\end{abbrvstyle} % % Set this as the default style for general abbreviations: % \begin{macrocode} \setabbreviationstyle{long-short} % \end{macrocode} % %\begin{macro}{\glsxtrlongshortdescsort} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \newcommand*{\glsxtrlongshortdescsort}{% \expandonce\glsxtrorglong\space (\expandonce\glsxtrorgshort)% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrlongshortdescname} %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \newcommand*{\glsxtrlongshortdescname}{% \protect\glslongfont{\the\glslongtok} \glsxtrparen{\protect\glsabbrvfont{\the\glsshorttok}}% } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{long-short-desc} % User supplies description. The long form is included in the name. %\changes{0.3}{2015-12-02}{fixed name to use \cs{glslabeltok}} % \begin{macrocode} \newabbreviationstyle{long-short-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetTextShortAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongshortdescname}, sort={\glsxtrlongshortdescsort},% first={\protect\glsfirstlongfont{\the\glslongtok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstabbrvfont{\the\glsshorttok}}},% firstplural={\protect\glsfirstlongfont{\the\glslongpltok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstabbrvfont{\the\glsshortpltok}}},% % \end{macrocode} %The \gloskey{text} key should only have the short form. %\changes{1.07}{2016-08-15}{added missing text key} % \begin{macrocode} text={\protect\glsabbrvfont{\the\glsshorttok}},% % \end{macrocode} %\changes{1.07}{2016-08-15}{fixed misspelling of \cs{glsabbrvfont}} % \begin{macrocode} plural={\protect\glsabbrvfont{\the\glsshortpltok}}% }% % \end{macrocode} %\changes{0.5.1}{2015-12-07}{switch off regular attribute if set} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{long-short}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{macro}{\glsxtrshortlongname} %\changes{1.25}{2017-11-24}{new} % \begin{macrocode} \newcommand*{\glsxtrshortlongname}{% \protect\glsabbrvfont{\the\glsshorttok}% } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{short-long} % Short form followed by long form in parenthesis on first use. % \begin{macrocode} \newabbreviationstyle{short-long}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetFirstLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortlongname}, sort={\the\glsshorttok}, description={\the\glslongtok},% first={\protect\glsfirstabbrvfont{\the\glsshorttok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstlongfont{\the\glslongtok}}},% firstplural={\protect\glsfirstabbrvfont{\the\glsshortpltok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstlongfont{\the\glslongpltok}}},% % \end{macrocode} %\changes{1.15}{2017-05-10}{fixed spelling of \cs{glsabbrvfont}} %\changes{1.42}{2020-02-03}{added missing text key} % \begin{macrocode} text={\protect\glsabbrvfont{\the\glsshorttok}},% plural={\protect\glsabbrvfont{\the\glsshortpltok}}}% % \end{macrocode} %\changes{0.5.1}{2015-12-07}{switch off regular attribute if set} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} % In case the user wants to mix and match font styles, these are % redefined here. % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtrabbrvpluralsuffix}% \renewcommand*\glsabbrvfont[1]{\glsabbrvdefaultfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvdefaultfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}% % \end{macrocode} % The first use full form and the inline full form are the same for % this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstabbrvfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfont{\glsaccesslong{##1}}}% }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstabbrvfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfont{\glsaccesslongpl{##1}}}% }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstabbrvfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfont{\glsaccesslong{##1}}}% }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstabbrvfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfont{\glsaccesslongpl{##1}}}% }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{macro}{\glsxtrshortlongdescsort} %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \newcommand*{\glsxtrshortlongdescsort}{\the\glsshorttok} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrshortlongdescname} %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \newcommand*{\glsxtrshortlongdescname}{% \protect\glsabbrvfont{\the\glsshorttok} \glsxtrparen{\protect\glslongfont{\the\glslongtok}}% } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{short-long-desc} % User supplies description. The long form is included in the name. %\changes{0.3}{2015-12-02}{fixed name to use \cs{glslabeltok}} % \begin{macrocode} \newabbreviationstyle{short-long-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetTextShortAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortlongdescname}, sort={\glsxtrshortlongdescsort}, first={\protect\glsfirstabbrvfont{\the\glsshorttok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstlongfont{\the\glslongtok}}},% firstplural={\protect\glsfirstabbrvfont{\the\glsshortpltok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstlongfont{\the\glslongpltok}}},% % \end{macrocode} %\changes{1.07}{2016-08-15}{added text key} % \begin{macrocode} text={\protect\glsabbrvfont{\the\glsshorttok}},% % \end{macrocode} %\changes{1.07}{2016-08-15}{fixed misspelling of \cs{glsabbrvfont} in plural %key} % \begin{macrocode} plural={\protect\glsabbrvfont{\the\glsshortpltok}}% }% % \end{macrocode} %\changes{0.5.1}{2015-12-07}{switch off regular attribute if set} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{short-long}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{macro}{\glsfirstlongfootnotefont} %\changes{1.05}{2016-06-10}{new} %Only used by the \qt{footnote} styles. % \begin{macrocode} \newcommand*{\glsfirstlongfootnotefont}[1]{\glslongfootnotefont{#1}}% % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongfootnotefont} %\changes{1.05}{2016-06-10}{new} %Only used by the \qt{footnote} styles. % \begin{macrocode} \newcommand*{\glslongfootnotefont}[1]{\glslongdefaultfont{#1}}% % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrabbrvfootnote} %\begin{definition} %\cs{glsxtrabbrvfootnote}\marg{label}\marg{long} %\end{definition} %\changes{1.07}{2016-08-15}{new} %Command used by footnote abbreviation styles. The default %definition ignores the first argument. The second argument %\meta{long} includes the font changing command and may be the %singular or plural form, depending on the command that was used %(for example, \cs{gls} or \cs{glspl}). % \begin{macrocode} \newcommand*{\glsxtrabbrvfootnote}[2]{\footnote{#2}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrfootnotename} %\changes{1.25}{2017-11-24}{new} % \begin{macrocode} \newcommand*{\glsxtrfootnotename}{% \protect\glsabbrvfont{\the\glsshorttok}% } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{footnote} % Short form followed by long form in footnote on first use. % \begin{macrocode} \newabbreviationstyle{footnote}% {% % \end{macrocode} % Set accessibility attributes if enabled. (Add % \catattr{firstshortaccess} since long form is hidden in a % footnote on first use.) % \begin{macrocode} \glsxtrAccSuppAbbrSetNoLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrfootnotename}, sort={\the\glsshorttok}, description={\the\glslongtok},% % \end{macrocode} %\changes{1.07}{2016-08-15}{changed first forms to use %\cs{glsfirstlongfootnotefont}} % \begin{macrocode} first={\protect\glsfirstabbrvfont{\the\glsshorttok}% \protect\glsxtrabbrvfootnote{\the\glslabeltok}% {\protect\glsfirstlongfootnotefont{\the\glslongtok}}},% firstplural={\protect\glsfirstabbrvfont{\the\glsshortpltok}% \protect\glsxtrabbrvfootnote{\the\glslabeltok}% {\protect\glsfirstlongfootnotefont{\the\glslongpltok}}},% % \end{macrocode} %\changes{1.15}{2017-05-10}{fixed spelling of \cs{glsabbrvfont}} %\changes{1.42}{2020-02-03}{added missing text key} % \begin{macrocode} text={\protect\glsabbrvfont{\the\glsshorttok}},% plural={\protect\glsabbrvfont{\the\glsshortpltok}}}% % \end{macrocode} % Switch off hyperlinks on first use to prevent nested hyperlinks, % and unset the \catattr{regular} attribute if it has been set. %\changes{0.5.1}{2015-12-07}{switch off regular attribute if set} % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glssetattribute{\the\glslabeltok}{nohyperfirst}{true}% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} % In case the user wants to mix and match font styles, these are % redefined here. % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtrabbrvpluralsuffix}% \renewcommand*\glsabbrvfont[1]{\glsabbrvdefaultfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvdefaultfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongfootnotefont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongfootnotefont{##1}}% % \end{macrocode} % The full format displays the short form followed by the long form % as a footnote. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstabbrvfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \protect\glsxtrabbrvfootnote{##1}% {\glsfirstlongfootnotefont{\glsaccesslong{##1}}}% }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstabbrvfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \protect\glsxtrabbrvfootnote{##1}% {\glsfirstlongfootnotefont{\glsaccesslongpl{##1}}}% }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstabbrvfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \protect\glsxtrabbrvfootnote{##1}% {\glsfirstlongfootnotefont{\glsaccesslong{##1}}}% }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstabbrvfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \protect\glsxtrabbrvfootnote{##1}% {\glsfirstlongfootnotefont{\glsaccesslongpl{##1}}}% }% % \end{macrocode} % The first use full form and the inline full form use the short % (long) style. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstabbrvfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslong{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstabbrvfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslongpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstabbrvfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslong{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstabbrvfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslongpl{##1}}}% }% } % \end{macrocode} %\end{abbrvstyle} %\begin{abbrvstyle}{short-footnote} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \letabbreviationstyle{short-footnote}{footnote} % \end{macrocode} %\end{abbrvstyle} % %\begin{macro}{\glsxtrfootnotedescname} %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \newcommand*{\glsxtrfootnotedescname}{% \protect\glsabbrvfont{\the\glsshorttok}% \protect\glsxtrfullsep{\the\glslabeltok}% \protect\glsxtrparen{\protect\glslongfont{\the\glslongtok}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrfootnotedescsort} %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \newcommand*{\glsxtrfootnotedescsort}{\the\glsshorttok} % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{short-footnote-desc} % Like \abbrstyle{short-footnote} but with user supplied description. %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \newabbreviationstyle{short-footnote-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled % \begin{macrocode} \glsxtrAccSuppAbbrSetNameLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrfootnotedescname}, sort={\glsxtrfootnotedescsort}, first={\protect\glsfirstabbrvfont{\the\glsshorttok}% \protect\glsxtrabbrvfootnote{\the\glslabeltok}% {\protect\glsfirstlongfootnotefont{\the\glslongtok}}},% firstplural={\protect\glsfirstabbrvfont{\the\glsshortpltok}% \protect\glsxtrabbrvfootnote{\the\glslabeltok}% {\protect\glsfirstlongfootnotefont{\the\glslongpltok}}},% text={\protect\glsabbrvfont{\the\glsshorttok}},% plural={\protect\glsabbrvfont{\the\glsshortpltok}}}% % \end{macrocode} % Switch off hyperlinks on first use to prevent nested hyperlinks, % and unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glssetattribute{\the\glslabeltok}{nohyperfirst}{true}% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{footnote}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{footnote-desc} %\changes{1.42}{2020-02-03}{new} %Synonym. % \begin{macrocode} \letabbreviationstyle{footnote-desc}{short-footnote-desc} % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{postfootnote} % Similar to \abbrstyle{footnote} but the footnote is placed afterwards, % outside the link. This avoids nested links and can also move the % footnote marker after any following punctuation mark. % Pre v1.07 included \cs{footnote} in the first keys, which was % incorrect as it caused duplicate footnotes. %\changes{1.07}{2016-08-15}{removed \cs{footnote} from first keys} % \begin{macrocode} \newabbreviationstyle{postfootnote}% {% % \end{macrocode} % Set accessibility attributes if enabled. (Add % \catattr{firstshortaccess} since long form is hidden in a % footnote on first use.) % \begin{macrocode} \glsxtrAccSuppAbbrSetNoLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrfootnotename}, sort={\the\glsshorttok}, description={\the\glslongtok},% first={\protect\glsfirstabbrvfont{\the\glsshorttok}},% firstplural={\protect\glsfirstabbrvfont{\the\glsshortpltok}},% % \end{macrocode} %\changes{1.15}{2017-05-10}{fixed spelling of \cs{glsabbrvfont}} %\changes{1.42}{2020-02-03}{added missing text key} % \begin{macrocode} text={\protect\glsabbrvfont{\the\glsshorttok}},% plural={\protect\glsabbrvfont{\the\glsshortpltok}}}% % \end{macrocode} % Make this category insert a footnote after the link if this was % the first use, and % unset the \catattr{regular} attribute if it has been set. %\changes{0.5.1}{2015-12-07}{switch off regular attribute if set} % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \csdef{glsxtrpostlink\glscategorylabel}{% \glsxtrifwasfirstuse {% % \end{macrocode} % Needs the specific font command here as the style may have been % lost by the time the footnote occurs. % \begin{macrocode} \glsxtrdopostpunc{\protect\glsxtrabbrvfootnote{\glslabel}% {\glsfirstlongfootnotefont{\glsentrylong{\glslabel}}}}% }% {}% }% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% % \end{macrocode} %\changes{1.02}{2016-04-25}{added redef of \cs{glsxtrsetupfulldefs}} % The footnote needs to be suppressed in the inline form, so % \cs{glsxtrfull} must set the first use switch off. % \begin{macrocode} \renewcommand*{\glsxtrsetupfulldefs}{% \let\glsxtrifwasfirstuse\@secondoftwo }% }% {% % \end{macrocode} % In case the user wants to mix and match font styles, these are % redefined here. % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtrabbrvpluralsuffix}% \renewcommand*\glsabbrvfont[1]{\glsabbrvdefaultfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvdefaultfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongfootnotefont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongfootnotefont{##1}}% % \end{macrocode} % The full format displays the short form. The long form is % deferred. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstabbrvfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstabbrvfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstabbrvfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstabbrvfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% % \end{macrocode} % The first use full form and the inline full form use the short % (long) style. %\changes{1.07}{2016-08-15}{switched from \cs{glsfirstlongfont} to %\cs{glsfirstlongfootnotefont}} % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstabbrvfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslong{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstabbrvfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslongpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstabbrvfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslong{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstabbrvfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslongpl{##1}}}% }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-postfootnote} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \letabbreviationstyle{short-postfootnote}{postfootnote} % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-postfootnote-desc} %\changes{1.42}{2020-02-03}{new} % Like \abbrstyle{short-postfootnote} but with user supplied description. % \begin{macrocode} \newabbreviationstyle{short-postfootnote-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNameLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrfootnotedescname}, sort={\glsxtrfootnotedescsort}, first={\protect\glsfirstabbrvfont{\the\glsshorttok}},% firstplural={\protect\glsfirstabbrvfont{\the\glsshortpltok}},% % \end{macrocode} %\changes{1.15}{2017-05-10}{fixed spelling of \cs{glsabbrvfont}} %\changes{1.42}{2020-02-03}{added missing text key} % \begin{macrocode} text={\protect\glsabbrvfont{\the\glsshorttok}},% plural={\protect\glsabbrvfont{\the\glsshortpltok}}}% % \end{macrocode} % Make this category insert a footnote after the link if this was % the first use, and % unset the \catattr{regular} attribute if it has been set. %\changes{0.5.1}{2015-12-07}{switch off regular attribute if set} % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \csdef{glsxtrpostlink\glscategorylabel}{% \glsxtrifwasfirstuse {% % \end{macrocode} % Needs the specific font command here as the style may have been % lost by the time the footnote occurs. % \begin{macrocode} \glsxtrdopostpunc{\protect\glsxtrabbrvfootnote{\glslabel}% {\glsfirstlongfootnotefont{\glsentrylong{\glslabel}}}}% }% {}% }% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% % \end{macrocode} %\changes{1.02}{2016-04-25}{added redef of \cs{glsxtrsetupfulldefs}} % The footnote needs to be suppressed in the inline form, so % \cs{glsxtrfull} must set the first use switch off. % \begin{macrocode} \renewcommand*{\glsxtrsetupfulldefs}{% \let\glsxtrifwasfirstuse\@secondoftwo }% }% {% \GlsXtrUseAbbrStyleFmts{postfootnote}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{postfootnote-desc} %\changes{1.42}{?}{new} % \begin{macrocode} \letabbreviationstyle{postfootnote-desc}{short-postfootnote-desc} % \end{macrocode} %\end{abbrvstyle} % %\begin{macro}{\glsxtrshortnolongname} %\changes{1.25}{2017-11-24}{new} % \begin{macrocode} \newcommand*{\glsxtrshortnolongname}{% \protect\glsabbrvfont{\the\glsshorttok}% } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{short} % Provide a style that only displays the short form on first use, % but the short and long form can be displayed with the \qt{full} % commands that use the inline format. If the user supplies a % description, the long form won't be displayed in the predefined % glossary styles, but the post description hook can be employed to % automatically insert it. % \begin{macrocode} \newabbreviationstyle{short}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNoLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortnolongname}, sort={\the\glsshorttok}, first={\protect\glsfirstabbrvfont{\the\glsshorttok}}, firstplural={\protect\glsfirstabbrvfont{\the\glsshortpltok}}, text={\protect\glsabbrvfont{\the\glsshorttok}}, plural={\protect\glsabbrvfont{\the\glsshortpltok}}, description={\the\glslongtok}}% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glssetattribute{\the\glslabeltok}{regular}{true}}% }% {% % \end{macrocode} % In case the user wants to mix and match font styles, these are % redefined here. % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtrabbrvpluralsuffix}% \renewcommand*\glsabbrvfont[1]{\glsabbrvdefaultfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvdefaultfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}% % \end{macrocode} % The inline full form displays the short form followed by the % long form in parentheses. %\changes{0.2}{2015-11-30}{switched inline full form to short (long)} % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \protect\glsfirstabbrvfont{\glsaccessshort{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfont{\glsaccesslong{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \protect\glsfirstabbrvfont{\glsaccessshortpl{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfont{\glsaccesslongpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \protect\glsfirstabbrvfont{\glsaccessshort{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfont{\Glsaccesslong{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \protect\glsfirstabbrvfont{\glsaccessshortpl{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfont{\Glsaccesslongpl{##1}}}% }% % \end{macrocode} % The first use full form only displays the short form, but it % typically won't be used as the \catattr{regular} attribute is set by this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstabbrvfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstabbrvfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstabbrvfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstabbrvfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% } % \end{macrocode} %\end{abbrvstyle} % Set this as the default style for acronyms: % \begin{macrocode} \setabbreviationstyle[acronym]{short} % \end{macrocode} % %\begin{abbrvstyle}{short-nolong} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \letabbreviationstyle{short-nolong}{short} % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-nolong-noreg} %\changes{1.17}{2017-08-09}{new} % Like \abbrstyle{short-nolong} but doesn't set the \catattr{regular} attribute. % \begin{macrocode} \newabbreviationstyle{short-nolong-noreg}% {% \GlsXtrUseAbbrStyleSetup{short-nolong}% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{short-nolong}% } % \end{macrocode} %\end{abbrvstyle} % % %\begin{macro}{\glsxtrshortdescname} %\changes{1.17}{2017-08-09}{new} %\changes{1.39}{2019-03-22}{corrected to show long form as advertised in the %manual} % \begin{macrocode} \newcommand*{\glsxtrshortdescname}{% \protect\glsabbrvfont{\the\glsshorttok}% \protect\glsxtrfullsep{\the\glslabeltok}% \protect\glsxtrparen{\protect\glslongfont{\the\glslongtok}}% } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{short-desc} % The user must supply the description in this style. The long form % is added to the name. The \abbrstyle{short} style (possibly with the % post-description hooks set) might be a better option. %\changes{1.01}{2016-02-02}{fixed typo in %\cs{glsxtrinlinefullformat} and added missing second argument} %\changes{1.39}{2019-03-22}{corrected to omit \gloskey{description} key as advertised in the %manual} % \begin{macrocode} \newabbreviationstyle{short-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNoLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortdescname}, sort={\the\glsshorttok}, first={\protect\glsfirstabbrvfont{\the\glsshorttok}}, firstplural={\protect\glsfirstabbrvfont{\the\glsshortpltok}}, text={\protect\glsabbrvfont{\the\glsshorttok}}, plural={\protect\glsabbrvfont{\the\glsshortpltok}}}% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glssetattribute{\the\glslabeltok}{regular}{true}}% }% {% % \end{macrocode} % In case the user wants to mix and match font styles, these are % redefined here. % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtrabbrvpluralsuffix}% \renewcommand*\glsabbrvfont[1]{\glsabbrvdefaultfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvdefaultfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}% % \end{macrocode} % The inline full form displays the short format followed by the % long form in parentheses. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstabbrvfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfont{\glsaccesslong{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstabbrvfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfont{\glsaccesslongpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstabbrvfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfont{\glsaccesslong{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstabbrvfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfont{\glsaccesslongpl{##1}}}% }% % \end{macrocode} % The first use full form only displays the short form, but it % typically won't be used as the \catattr{regular} attribute is set by this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstabbrvfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstabbrvfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstabbrvfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstabbrvfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% } % \end{macrocode} %\end{abbrvstyle} %\begin{abbrvstyle}{short-nolong-desc} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \letabbreviationstyle{short-nolong-desc}{short-desc} % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-nolong-desc-noreg} %\changes{1.17}{2017-08-09}{new} % Like \abbrstyle{short-nolong-desc} but doesn't set the \catattr{regular} attribute. % \begin{macrocode} \newabbreviationstyle{short-nolong-desc-noreg}% {% \GlsXtrUseAbbrStyleSetup{short-nolong-desc}% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{short-nolong-desc}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{nolong-short} % Similar to \abbrstyle{short-nolong} but the full form shows the % long form followed by the short form in parentheses. %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newabbreviationstyle{nolong-short}% {% \GlsXtrUseAbbrStyleSetup{short-nolong}% }% {% \GlsXtrUseAbbrStyleFmts{short-nolong}% % \end{macrocode} % The inline full form displays the long form followed by the % short form in parentheses. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \protect\glsfirstlongfont{\glsaccesslong{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvfont{\glsaccessshort{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \protect\glsfirstlongfont{\glsaccesslongpl{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvfont{\glsaccessshortpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \protect\glsfirstlongfont{\glsaccesslong{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvfont{\Glsaccessshort{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \protect\glsfirstlongfont{\glsaccesslongpl{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvfont{\Glsaccessshortpl{##1}}}% }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{nolong-short-noreg} %\changes{1.21}{2017-11-03}{new} % Like \abbrstyle{nolong-short} but doesn't set the \catattr{regular} attribute. % \begin{macrocode} \newabbreviationstyle{nolong-short-noreg}% {% \GlsXtrUseAbbrStyleSetup{nolong-short}% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{nolong-short}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{macro}{\glsxtrlongnoshortdescname} %\changes{1.25}{2017-11-24}{new} % \begin{macrocode} \newcommand*{\glsxtrlongnoshortdescname}{% \protect\glslongfont{\the\glslongtok}% } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{long-desc} % Provide a style that only displays the long form, % but the long and short form can be displayed with the \qt{full} % commands that use the inline format. The predefined glossary styles % won't show the short form. The user must supply a description for % this style. The accessibility attributes don't need setting here. % \begin{macrocode} \newabbreviationstyle{long-desc}% {% \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongnoshortdescname}, sort={\the\glslongtok}, first={\protect\glsfirstlongfont{\the\glslongtok}}, firstplural={\protect\glsfirstlongfont{\the\glslongpltok}}, text={\glslongfont{\the\glslongtok}}, plural={\glslongfont{\the\glslongpltok}}% }% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glssetattribute{\the\glslabeltok}{regular}{true}}% }% {% % \end{macrocode} % In case the user wants to mix and match font styles, these are % redefined here. % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtrabbrvpluralsuffix}% \renewcommand*\glsabbrvfont[1]{\glsabbrvdefaultfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvdefaultfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}% % \end{macrocode} % The format for subsequent use (not used when the regular attribute % is set). % \begin{macrocode} \renewcommand*{\glsxtrsubsequentfmt}[2]{% \glslongfont{\glsaccesslong{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\glsxtrsubsequentplfmt}[2]{% \glslongfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\Glsxtrsubsequentfmt}[2]{% \glslongfont{\Glsaccesslong{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\Glsxtrsubsequentplfmt}[2]{% \glslongfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% % \end{macrocode} % The inline full form displays the long format followed by the % short form in parentheses. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstlongfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvfont{\glsaccessshort{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstlongfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvfont{\glsaccessshortpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstlongfont{\Glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvfont{\glsaccessshort{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstlongfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvfont{\glsaccessshortpl{##1}}}% }% % \end{macrocode} % The first use full form only displays the long form, but it % typically won't be used as the \catattr{regular} attribute is set by this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstlongfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstlongfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstlongfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstlongfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% } % \end{macrocode} %\end{abbrvstyle} %\begin{abbrvstyle}{long-noshort-desc} %\changes{1.04}{2016-05-02}{new} %Provide a synonym that matches similar styles. % \begin{macrocode} \letabbreviationstyle{long-noshort-desc}{long-desc} % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{long-noshort-desc-noreg} %\changes{1.17}{2017-08-09}{new} % Like long-noshort-desc but doesn't set the \catattr{regular} attribute. % \begin{macrocode} \newabbreviationstyle{long-noshort-desc-noreg}% {% \GlsXtrUseAbbrStyleSetup{long-noshort-desc}% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{long-noshort-desc}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{macro}{\glsxtrlongnoshortname} %\changes{1.25}{2017-11-24}{new} % \begin{macrocode} \newcommand*{\glsxtrlongnoshortname}{% \protect\glsabbrvfont{\the\glsshorttok}% } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{long} % It doesn't really make a great deal of sense to have a long-only % style that doesn't have a description (unless no glossary is % required), but the best course of % action here is to use the short form as the name and the long % form as the description. % \begin{macrocode} \newabbreviationstyle{long}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNameShortAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongnoshortname}, sort={\the\glsshorttok}, first={\protect\glsfirstlongfont{\the\glslongtok}}, firstplural={\protect\glsfirstlongfont{\the\glslongpltok}}, text={\glslongfont{\the\glslongtok}}, plural={\glslongfont{\the\glslongpltok}},% description={\the\glslongtok}% }% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glssetattribute{\the\glslabeltok}{regular}{true}}% }% {% \GlsXtrUseAbbrStyleFmts{long-desc}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{long-noshort} %\changes{1.04}{2016-05-02}{new} %Provide a synonym that matches similar styles. % \begin{macrocode} \letabbreviationstyle{long-noshort}{long} % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{long-noshort-noreg} %\changes{1.17}{2017-08-09}{new} % Like long-noshort but doesn't set the \catattr{regular} attribute. % \begin{macrocode} \newabbreviationstyle{long-noshort-noreg}% {% \GlsXtrUseAbbrStyleSetup{long-noshort}% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{long-noshort}% } % \end{macrocode} %\end{abbrvstyle} % %\subsection{Predefined Styles (Small Capitals)} %These styles use \cs{textsc} for the short form. %\begin{macro}{\glsxtrscfont} %\changes{0.5}{2015-12-07}{new} %Maintained for backward-compatibility. % \begin{macrocode} \newcommand*{\glsxtrscfont}[1]{\textsc{#1}} % \end{macrocode} %\end{macro} %\begin{macro}{\glsabbrvscfont} %\changes{1.17}{2017-08-09}{new} %Added for consistent naming. % \begin{macrocode} \newcommand*{\glsabbrvscfont}{\glsxtrscfont} % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrfirstscfont} %\changes{1.04}{2016-05-02}{new} %Maintained for backward-compatibility. % \begin{macrocode} \newcommand*{\glsxtrfirstscfont}[1]{\glsabbrvscfont{#1}} % \end{macrocode} %\end{macro} %\begin{macro}{\glsfirstabbrvscfont} %\changes{1.17}{2017-08-09}{new} %Added for consistent naming. % \begin{macrocode} \newcommand*{\glsfirstabbrvscfont}{\glsxtrfirstscfont} % \end{macrocode} %\end{macro} % and for the default short form suffix: %\begin{macro}{\glsxtrscsuffix} %\changes{0.5}{2015-12-07}{new} %\changes{1.42}{2020-02-03}{added \cs{protect}} %\cs{protect} needs to come inside \cs{\glsxtrscsuffix} to avoid %interfering with all caps. % \begin{macrocode} \newcommand*{\glsxtrscsuffix}{\protect\glstextup{\glsxtrabbrvpluralsuffix}} % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{long-short-sc} %\changes{1.42}{2020-02-03}{added missing text key} % \begin{macrocode} \newabbreviationstyle{long-short-sc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetFirstLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongshortname}, sort={\the\glsshorttok}, first={\protect\glsfirstlongdefaultfont{\the\glslongtok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstabbrvscfont{\the\glsshorttok}}},% firstplural={\protect\glsfirstlongdefaultfont{\the\glslongpltok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstabbrvscfont{\the\glsshortpltok}}},% text={\protect\glsabbrvscfont{\the\glsshorttok}},% plural={\protect\glsabbrvscfont{\the\glsshortpltok}},% description={\the\glslongtok}}% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} % Use smallcaps and adjust the plural suffix to revert to upright. %\changes{1.42}{2020-02-03}{moved \cs{protect} inside \cs{glsxtrscsuffix}} % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtrscsuffix}% \renewcommand*\glsabbrvfont[1]{\glsabbrvscfont{##1}}% \renewcommand*\glsfirstabbrvfont[1]{\glsfirstabbrvscfont{##1}}% % \end{macrocode} % Use the default long fonts. % \begin{macrocode} \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}% % \end{macrocode} % The first use full form and the inline full form are the same for % this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvscfont{\glsaccessshort{##1}}}% }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvscfont{\glsaccessshortpl{##1}}}% }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstlongdefaultfont{\Glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvscfont{\glsaccessshort{##1}}}% }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstlongdefaultfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvscfont{\glsaccessshortpl{##1}}}% }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{long-short-sc-desc} % \begin{macrocode} \newabbreviationstyle{long-short-sc-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetTextShortAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongshortdescname}, sort={\glsxtrlongshortdescsort},% first={\protect\glsfirstlongdefaultfont{\the\glslongtok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstabbrvscfont{\the\glsshorttok}}},% firstplural={\protect\glsfirstlongdefaultfont{\the\glslongpltok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstabbrvscfont{\the\glsshortpltok}}},% text={\protect\glsabbrvscfont{\the\glsshorttok}},% plural={\protect\glsabbrvscfont{\the\glsshortpltok}}% }% % \end{macrocode} %\changes{0.5.1}{2015-12-07}{switch off regular attribute if set} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} % As long-short-sc style: % \begin{macrocode} \GlsXtrUseAbbrStyleFmts{long-short-sc}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-sc-long} % Now the short (long) version %\changes{1.42}{2020-02-03}{added missing text key} % \begin{macrocode} \newabbreviationstyle{short-sc-long}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetFirstLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortlongname}, sort={\the\glsshorttok}, description={\the\glslongtok},% first={\protect\glsfirstabbrvscfont{\the\glsshorttok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstlongdefaultfont{\the\glslongtok}}},% firstplural={\protect\glsfirstabbrvscfont{\the\glsshortpltok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstlongdefaultfont{\the\glslongpltok}}},% text={\protect\glsabbrvscfont{\the\glsshorttok}},% plural={\protect\glsabbrvscfont{\the\glsshortpltok}}}% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} % Use smallcaps and adjust the plural suffix to revert to upright. %\changes{1.42}{2020-02-03}{moved \cs{protect} inside \cs{glsxtrscsuffix}} % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtrscsuffix}% \renewcommand*\glsabbrvfont[1]{\glsabbrvscfont{##1}}% \renewcommand*\glsfirstabbrvfont[1]{\glsfirstabbrvscfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}% % \end{macrocode} % The first use full form and the inline full form are the same for % this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstabbrvscfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslong{##1}}}% }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstabbrvscfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslongpl{##1}}}% }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstabbrvscfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslong{##1}}}% }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstabbrvscfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslongpl{##1}}}% }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-sc-long-desc} % As before but user provides description % \begin{macrocode} \newabbreviationstyle{short-sc-long-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetTextShortAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortlongdescname}, sort={\glsxtrshortlongdescsort}, first={\protect\glsfirstabbrvscfont{\the\glsshorttok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstlongdefaultfont{\the\glslongtok}}},% firstplural={\protect\glsfirstabbrvscfont{\the\glsshortpltok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstlongdefaultfont{\the\glslongpltok}}},% text={\protect\glsabbrvscfont{\the\glsshorttok}},% plural={\protect\glsabbrvscfont{\the\glsshortpltok}}% }% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} % As short-sc-long style: % \begin{macrocode} \GlsXtrUseAbbrStyleFmts{short-sc-long}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-sc} % \begin{macrocode} \newabbreviationstyle{short-sc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNoLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortnolongname}, sort={\the\glsshorttok}, first={\protect\glsfirstabbrvscfont{\the\glsshorttok}}, firstplural={\protect\glsfirstabbrvscfont{\the\glsshortpltok}}, text={\protect\glsabbrvscfont{\the\glsshorttok}}, plural={\protect\glsabbrvscfont{\the\glsshortpltok}}, description={\the\glslongtok}}% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glssetattribute{\the\glslabeltok}{regular}{true}}% }% {% % \end{macrocode} % Use smallcaps and adjust the plural suffix to revert to upright. %\changes{1.42}{2020-02-03}{moved \cs{protect} inside \cs{glsxtrscsuffix}} % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtrscsuffix}% \renewcommand*\glsabbrvfont[1]{\glsabbrvscfont{##1}}% \renewcommand*\glsfirstabbrvfont[1]{\glsfirstabbrvscfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}% % \end{macrocode} % The inline full form displays the short form followed by the % long form in parentheses. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \protect\glsfirstabbrvscfont{\glsaccessshort{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslong{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \protect\glsfirstabbrvscfont{\glsaccessshortpl{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslongpl{##1}}}% }% % \end{macrocode} %\changes{1.21}{2017-11-03}{corrected first letter uppercasing} % \begin{macrocode} \renewcommand*{\Glsxtrinlinefullformat}[2]{% \protect\glsfirstabbrvscfont{\Glsaccessshort{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslong{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \protect\glsfirstabbrvscfont{\Glsaccessshortpl{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslongpl{##1}}}% }% % \end{macrocode} % The first use full form only displays the short form, but it % typically won't be used as the \catattr{regular} attribute is set by this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstabbrvscfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstabbrvscfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstabbrvscfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstabbrvscfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-sc-nolong} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \letabbreviationstyle{short-sc-nolong}{short-sc} % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-sc-desc} %\changes{1.39}{2019-03-22}{bug fix: omit \gloskey{description} key as advertised in the %manual} % \begin{macrocode} \newabbreviationstyle{short-sc-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNameLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortdescname}, sort={\the\glsshorttok}, first={\protect\glsfirstabbrvscfont{\the\glsshorttok}}, firstplural={\protect\glsfirstabbrvscfont{\the\glsshortpltok}}, text={\protect\glsabbrvscfont{\the\glsshorttok}}, plural={\protect\glsabbrvscfont{\the\glsshortpltok}}}% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glssetattribute{\the\glslabeltok}{regular}{true}}% }% {% % \end{macrocode} % Use smallcaps and adjust the plural suffix to revert to upright. %\changes{1.42}{2020-02-03}{moved \cs{protect} inside \cs{glsxtrscsuffix}} % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtrscsuffix}% \renewcommand*\glsabbrvfont[1]{\glsabbrvscfont{##1}}% \renewcommand*\glsfirstabbrvfont[1]{\glsfirstabbrvscfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}% % \end{macrocode} % The inline full form displays the short format followed by the % long form in parentheses. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstabbrvscfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslong{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstabbrvscfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslongpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstabbrvscfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslong{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstabbrvscfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslongpl{##1}}}% }% % \end{macrocode} % The first use full form only displays the short form, but it % typically won't be used as the \catattr{regular} attribute is set by this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstabbrvscfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstabbrvscfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstabbrvscfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstabbrvscfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% } % \end{macrocode} %\end{abbrvstyle} %\begin{abbrvstyle}{short-sc-nolong-desc} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \letabbreviationstyle{short-sc-nolong-desc}{short-sc-desc} % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{nolong-short-sc} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newabbreviationstyle{nolong-short-sc}% {% \GlsXtrUseAbbrStyleSetup{short-sc-nolong}% }% {% \GlsXtrUseAbbrStyleFmts{short-sc-nolong}% % \end{macrocode} % The inline full form displays the long form followed by the % short form in parentheses. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \protect\glsfirstlongdefaultfont{\glsaccesslong{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvscfont{\glsaccessshort{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \protect\glsfirstlongdefaultfont{\glsaccesslongpl{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvscfont{\glsaccessshortpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \protect\glsfirstlongdefaultfont{\Glsaccesslong{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvscfont{\glsaccessshort{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \protect\glsfirstlongdefaultfont{\Glsaccesslongpl{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvscfont{\glsaccessshortpl{##1}}}% }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{long-noshort-sc} %\changes{1.04}{2016-05-02}{renamed from \qt{long-sc}} % The smallcaps font will only be used if % the short form is explicitly invoked through commands like % \cs{glsxtrshort}. No accessibility attributes needed here. % \begin{macrocode} \newabbreviationstyle{long-noshort-sc}% {% \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongnoshortname}, sort={\the\glsshorttok}, first={\protect\glsfirstlongdefaultfont{\the\glslongtok}}, firstplural={\protect\glsfirstlongdefaultfont{\the\glslongpltok}}, text={\protect\glslongdefaultfont{\the\glslongtok}}, plural={\protect\glslongdefaultfont{\the\glslongpltok}},% description={\the\glslongtok}% }% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glssetattribute{\the\glslabeltok}{regular}{true}}% }% {% % \end{macrocode} % Use smallcaps and adjust the plural suffix to revert to upright. %\changes{1.42}{2020-02-03}{moved \cs{protect} inside \cs{glsxtrscsuffix}} % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtrscsuffix}% \renewcommand*\glsabbrvfont[1]{\glsabbrvscfont{##1}}% \renewcommand*\glsfirstabbrvfont[1]{\glsfirstabbrvscfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}% % \end{macrocode} % The format for subsequent use (not used when the regular attribute % is set). % \begin{macrocode} \renewcommand*{\glsxtrsubsequentfmt}[2]{% \glslongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\glsxtrsubsequentplfmt}[2]{% \glslongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\Glsxtrsubsequentfmt}[2]{% \glslongdefaultfont{\Glsaccesslong{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\Glsxtrsubsequentplfmt}[2]{% \glslongdefaultfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% % \end{macrocode} % The inline full form displays the long format followed by the % short form in parentheses. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvscfont{\glsaccessshort{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvscfont{\glsaccessshortpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstlongdefaultfont{\Glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvscfont{\glsaccessshort{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstlongdefaultfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvscfont{\glsaccessshortpl{##1}}}% }% % \end{macrocode} % The first use full form only displays the long form, but it % typically won't be used as the \catattr{regular} attribute is set by this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% } % \end{macrocode} %\end{abbrvstyle} %\begin{abbrvstyle}{long-sc} %Backward compatibility: % \begin{macrocode} \@glsxtr@deprecated@abbrstyle{long-sc}{long-noshort-sc} % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{long-noshort-sc-desc} %\changes{1.04}{2016-05-02}{renamed from \qt{long-desc-sc}} % The smallcaps font will only be used if % the short form is explicitly invoked through commands like % \cs{glsshort}. % \begin{macrocode} \newabbreviationstyle{long-noshort-sc-desc}% {% \GlsXtrUseAbbrStyleSetup{long-noshort-desc}% }% {% % \end{macrocode} % Use smallcaps and adjust the plural suffix to revert to upright. %\changes{1.42}{2020-02-03}{moved \cs{protect} inside \cs{glsxtrscsuffix}} % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtrscsuffix}% \renewcommand*\glsabbrvfont[1]{\glsabbrvscfont{##1}}% \renewcommand*\glsfirstabbrvfont[1]{\glsfirstabbrvscfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}% % \end{macrocode} % The format for subsequent use (not used when the regular attribute % is set). % \begin{macrocode} \renewcommand*{\glsxtrsubsequentfmt}[2]{% \glslongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\glsxtrsubsequentplfmt}[2]{% \glslongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\Glsxtrsubsequentfmt}[2]{% \glslongdefaultfont{\Glsaccesslong{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\Glsxtrsubsequentplfmt}[2]{% \glslongdefaultfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% % \end{macrocode} % The inline full form displays the long format followed by the % short form in parentheses. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvscfont{\glsaccessshort{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvscfont{\glsaccessshortpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstlongdefaultfont{\Glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvscfont{\glsaccessshort{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstlongdefaultfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvscfont{\glsaccessshortpl{##1}}}% }% % \end{macrocode} % The first use full form only displays the long form, but it % typically won't be used as the \catattr{regular} attribute is set by this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% } % \end{macrocode} %\end{abbrvstyle} %\begin{abbrvstyle}{long-desc-sc} %Backward compatibility: % \begin{macrocode} \@glsxtr@deprecated@abbrstyle{long-desc-sc}{long-noshort-sc-desc} % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-sc-footnote} %\changes{0.5}{2015-12-07}{new} %\changes{1.04}{2016-05-02}{renamed from \qt{footnote-sc}} %\changes{1.42}{2020-02-03}{added missing text key} % \begin{macrocode} \newabbreviationstyle{short-sc-footnote}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNoLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrfootnotename}, sort={\the\glsshorttok}, description={\the\glslongtok},% first={\protect\glsfirstabbrvscfont{\the\glsshorttok}% \protect\glsxtrabbrvfootnote{\the\glslabeltok}% {\protect\glsfirstlongfootnotefont{\the\glslongtok}}},% firstplural={\protect\glsfirstabbrvscfont{\the\glsshortpltok}% \protect\glsxtrabbrvfootnote{\the\glslabeltok}% {\protect\glsfirstlongfootnotefont{\the\glslongpltok}}},% text={\protect\glsabbrvscfont{\the\glsshorttok}},% plural={\protect\glsabbrvscfont{\the\glsshortpltok}}}% % \end{macrocode} % Switch off hyperlinks on first use to prevent nested hyperlinks, % and unset the \catattr{regular} attribute if it has been set. %\changes{0.5.1}{2015-12-07}{switch off regular attribute if set} % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glssetattribute{\the\glslabeltok}{nohyperfirst}{true}% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} % Use smallcaps and adjust the plural suffix to revert to upright. %\changes{1.42}{2020-02-03}{moved \cs{protect} inside \cs{glsxtrscsuffix}} % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtrscsuffix}% \renewcommand*\glsabbrvfont[1]{\glsabbrvscfont{##1}}% \renewcommand*\glsfirstabbrvfont[1]{\glsfirstabbrvscfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongfootnotefont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongfootnotefont{##1}}% % \end{macrocode} % The full format displays the short form followed by the long form % as a footnote. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstabbrvscfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \protect\glsxtrabbrvfootnote{##1}% {\glsfirstlongfootnotefont{\glsaccesslong{##1}}}% }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstabbrvscfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \protect\glsxtrabbrvfootnote{##1}% {\glsfirstlongfootnotefont{\glsaccesslongpl{##1}}}% }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstabbrvscfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \protect\glsxtrabbrvfootnote{##1}% {\glsfirstlongfootnotefont{\glsaccesslong{##1}}}% }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstabbrvscfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \protect\glsxtrabbrvfootnote{##1}% {\glsfirstlongfootnotefont{\glsaccesslongpl{##1}}}% }% % \end{macrocode} % The first use full form and the inline full form use the short % (long) style. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstabbrvscfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslong{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstabbrvscfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslongpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstabbrvscfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslong{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstabbrvscfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslongpl{##1}}}% }% } % \end{macrocode} %\end{abbrvstyle} %\begin{abbrvstyle}{footnote-sc} %Backward compatibility: % \begin{macrocode} \@glsxtr@deprecated@abbrstyle{footnote-sc}{short-sc-footnote} % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-sc-footnote-desc} % Like \abbrstyle{short-sc-footnote} but with user supplied description. %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \newabbreviationstyle{short-sc-footnote-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNameLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrfootnotedescname}, sort={\glsxtrfootnotedescsort}, first={\protect\glsfirstabbrvscfont{\the\glsshorttok}% \protect\glsxtrabbrvfootnote{\the\glslabeltok}% {\protect\glsfirstlongfootnotefont{\the\glslongtok}}},% firstplural={\protect\glsfirstabbrvscfont{\the\glsshortpltok}% \protect\glsxtrabbrvfootnote{\the\glslabeltok}% {\protect\glsfirstlongfootnotefont{\the\glslongpltok}}},% text={\protect\glsabbrvscfont{\the\glsshorttok}},% plural={\protect\glsabbrvscfont{\the\glsshortpltok}}}% % \end{macrocode} % Switch off hyperlinks on first use to prevent nested hyperlinks, % and unset the \catattr{regular} attribute if it has been set. %\changes{0.5.1}{2015-12-07}{switch off regular attribute if set} % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glssetattribute{\the\glslabeltok}{nohyperfirst}{true}% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{short-sc-footnote}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-sc-postfootnote} %\changes{0.5}{2015-12-07}{new} %\changes{1.04}{2016-05-02}{renamed from \qt{postfootnote-sc}} %\changes{1.42}{2020-02-03}{added missing text key} % \begin{macrocode} \newabbreviationstyle{short-sc-postfootnote}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNoLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrfootnotename}, sort={\the\glsshorttok}, description={\the\glslongtok},% first={\protect\glsfirstabbrvscfont{\the\glsshorttok}},% firstplural={\protect\glsfirstabbrvscfont{\the\glsshortpltok}},% text={\protect\glsabbrvscfont{\the\glsshorttok}},% plural={\protect\glsabbrvscfont{\the\glsshortpltok}}}% % \end{macrocode} % Make this category insert a footnote after the link if this was % the first use, and % unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \csdef{glsxtrpostlink\glscategorylabel}{% \glsxtrifwasfirstuse {% % \end{macrocode} % Needs the specific font command here as the style may have been % lost by the time the footnote occurs. % \begin{macrocode} \glsxtrdopostpunc{\protect\glsxtrabbrvfootnote{\glslabel}% {\glsfirstlongfootnotefont{\glsentrylong{\glslabel}}}}% }% {}% }% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% % \end{macrocode} % The footnote needs to be suppressed in the inline form, so % \cs{glsxtrfull} must set the first use switch off. % \begin{macrocode} \renewcommand*{\glsxtrsetupfulldefs}{% \let\glsxtrifwasfirstuse\@secondoftwo }% }% {% % \end{macrocode} % Use smallcaps and adjust the plural suffix to revert to upright. %\changes{1.42}{2020-02-03}{moved \cs{protect} inside \cs{glsxtrscsuffix}} % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtrscsuffix}% \renewcommand*\glsabbrvfont[1]{\glsabbrvscfont{##1}}% \renewcommand*\glsfirstabbrvfont[1]{\glsfirstabbrvscfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongfootnotefont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongfootnotefont{##1}}% % \end{macrocode} % The full format displays the short form. The long form is % deferred. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstabbrvscfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstabbrvscfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstabbrvscfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstabbrvscfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% % \end{macrocode} % The first use full form and the inline full form use the short % (long) style. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstabbrvscfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslong{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstabbrvscfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslongpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstabbrvscfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslong{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstabbrvscfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslongpl{##1}}}% }% } % \end{macrocode} %\end{abbrvstyle} %\begin{abbrvstyle}{postfootnote-sc} %Backward compatibility: % \begin{macrocode} \@glsxtr@deprecated@abbrstyle{postfootnote-sc}{short-sc-postfootnote} % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-sc-postfootnote-desc} % Like \abbrstyle{short-sc-footnote} but with user supplied description. %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \newabbreviationstyle{short-sc-postfootnote-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNameLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrfootnotedescname}, sort={\glsxtrfootnotedescsort}, first={\protect\glsfirstabbrvscfont{\the\glsshorttok}},% firstplural={\protect\glsfirstabbrvscfont{\the\glsshortpltok}},% text={\protect\glsabbrvscfont{\the\glsshorttok}},% plural={\protect\glsabbrvscfont{\the\glsshortpltok}}}% % \end{macrocode} % Make this category insert a footnote after the link if this was % the first use, and % unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \csdef{glsxtrpostlink\glscategorylabel}{% \glsxtrifwasfirstuse {% % \end{macrocode} % Needs the specific font command here as the style may have been % lost by the time the footnote occurs. % \begin{macrocode} \glsxtrdopostpunc{\protect\glsxtrabbrvfootnote{\glslabel}% {\glsfirstlongfootnotefont{\glsentrylong{\glslabel}}}}% }% {}% }% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% % \end{macrocode} % The footnote needs to be suppressed in the inline form, so % \cs{glsxtrfull} must set the first use switch off. % \begin{macrocode} \renewcommand*{\glsxtrsetupfulldefs}{% \let\glsxtrifwasfirstuse\@secondoftwo }% }% {% \GlsXtrUseAbbrStyleFmts{short-sc-postfootnote}% } % \end{macrocode} %\end{abbrvstyle} % %\subsection{Predefined Styles (Fake Small Capitals)} % These styles require the \sty{relsize} package, which must be % loaded by the user. These styles all use: %\begin{macro}{\glsxtrsmfont} %\changes{0.5}{2015-12-07}{new} %Maintained for backward compatibility. % \begin{macrocode} \newcommand*{\glsxtrsmfont}[1]{\textsmaller{#1}} % \end{macrocode} %\end{macro} %\begin{macro}{\glsabbrvsmfont} %\changes{1.17}{2017-08-09}{new} %Added for consistent naming. % \begin{macrocode} \newcommand*{\glsabbrvsmfont}{\glsxtrsmfont} % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrfirstsmfont} %\changes{1.04}{2016-05-02}{new} %Maintained for backward compatibility. % \begin{macrocode} \newcommand*{\glsxtrfirstsmfont}[1]{\glsabbrvsmfont{#1}} % \end{macrocode} %\end{macro} %\begin{macro}{\glsfirstabbrvsmfont} %\changes{1.17}{2017-08-09}{new} %Added for consistent naming. % \begin{macrocode} \newcommand*{\glsfirstabbrvsmfont}{\glsxtrfirstsmfont} % \end{macrocode} %\end{macro} % and for the default short form suffix: %\begin{macro}{\glsxtrsmsuffix} %\changes{0.5}{2015-12-07}{new} % \begin{macrocode} \newcommand*{\glsxtrsmsuffix}{\glsxtrabbrvpluralsuffix} % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{long-short-sm} %\changes{0.5}{2015-12-07}{new} %\changes{1.42}{2020-02-03}{added missing text key} % \begin{macrocode} \newabbreviationstyle{long-short-sm}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetFirstLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongshortname}, sort={\the\glsshorttok}, first={\protect\glsfirstlongdefaultfont{\the\glslongtok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstabbrvsmfont{\the\glsshorttok}}},% firstplural={\protect\glsfirstlongdefaultfont{\the\glslongpltok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstabbrvsmfont{\the\glsshortpltok}}},% text={\protect\glsabbrvsmfont{\the\glsshorttok}},% plural={\protect\glsabbrvsmfont{\the\glsshortpltok}},% description={\the\glslongtok}}% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} %\changes{1.42}{2020-02-03}{removed \cs{protect} from \cs{glsxtrsmsuffix}} % \begin{macrocode} \renewcommand*\glsabbrvfont[1]{\glsabbrvsmfont{##1}}% \renewcommand*\glsfirstabbrvfont[1]{\glsfirstabbrvsmfont{##1}}% \renewcommand*{\abbrvpluralsuffix}{\glsxtrsmsuffix}% % \end{macrocode} % Use the default long fonts. % \begin{macrocode} \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}% % \end{macrocode} % The first use full form and the inline full form are the same for % this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvsmfont{\glsaccessshort{##1}}}% }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvsmfont{\glsaccessshortpl{##1}}}% }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstlongdefaultfont{\Glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvsmfont{\glsaccessshort{##1}}}% }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstlongdefaultfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvsmfont{\glsaccessshortpl{##1}}}% }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{long-short-sm-desc} %\changes{0.5}{2015-12-07}{new} % \begin{macrocode} \newabbreviationstyle{long-short-sm-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetTextShortAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongshortdescname}, sort={\glsxtrlongshortdescsort},% first={\protect\glsfirstlongdefaultfont{\the\glslongtok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstabbrvsmfont{\the\glsshorttok}}},% firstplural={\protect\glsfirstlongdefaultfont{\the\glslongpltok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstabbrvsmfont{\the\glsshortpltok}}},% text={\protect\glsabbrvsmfont{\the\glsshorttok}},% plural={\protect\glsabbrvsmfont{\the\glsshortpltok}}% }% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} % As long-short-sm style: % \begin{macrocode} \GlsXtrUseAbbrStyleFmts{long-short-sm}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-sm-long} % Now the short (long) version %\changes{0.5}{2015-12-07}{new} %\changes{1.42}{2020-02-03}{added missing text key} % \begin{macrocode} \newabbreviationstyle{short-sm-long}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetFirstLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortlongname}, sort={\the\glsshorttok}, description={\the\glslongtok},% first={\protect\glsfirstabbrvsmfont{\the\glsshorttok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstlongdefaultfont{\the\glslongtok}}},% firstplural={\protect\glsfirstabbrvsmfont{\the\glsshortpltok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstlongdefaultfont{\the\glslongpltok}}},% text={\protect\glsabbrvsmfont{\the\glsshorttok}},% plural={\protect\glsabbrvsmfont{\the\glsshortpltok}}}% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} %\changes{1.42}{2020-02-03}{removed \cs{protect} from \cs{glsxtrsmsuffix}} % \begin{macrocode} \renewcommand*\glsabbrvfont[1]{\glsabbrvsmfont{##1}}% \renewcommand*\glsfirstabbrvfont[1]{\glsfirstabbrvsmfont{##1}}% \renewcommand*{\abbrvpluralsuffix}{\glsxtrsmsuffix}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}% % \end{macrocode} % The first use full form and the inline full form are the same for % this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstabbrvsmfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslong{##1}}}% }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstabbrvsmfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslongpl{##1}}}% }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstabbrvsmfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslong{##1}}}% }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstabbrvsmfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslongpl{##1}}}% }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-sm-long-desc} % As before but user provides description %\changes{0.5}{2015-12-07}{new} % \begin{macrocode} \newabbreviationstyle{short-sm-long-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetTextShortAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortlongdescname}, sort={\glsxtrshortlongdescsort}, first={\protect\glsfirstabbrvsmfont{\the\glsshorttok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstlongdefaultfont{\the\glslongtok}}},% firstplural={\protect\glsfirstabbrvsmfont{\the\glsshortpltok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstlongdefaultfont{\the\glslongpltok}}},% text={\protect\glsabbrvsmfont{\the\glsshorttok}},% plural={\protect\glsabbrvsmfont{\the\glsshortpltok}}% }% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} % As short-sm-long style: % \begin{macrocode} \GlsXtrUseAbbrStyleFmts{short-sm-long}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-sm} %\changes{0.5}{2015-12-07}{new} % \begin{macrocode} \newabbreviationstyle{short-sm}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNameLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortnolongname}, sort={\the\glsshorttok}, first={\protect\glsfirstabbrvsmfont{\the\glsshorttok}}, firstplural={\protect\glsfirstabbrvsmfont{\the\glsshortpltok}}, text={\protect\glsabbrvsmfont{\the\glsshorttok}}, plural={\protect\glsabbrvsmfont{\the\glsshortpltok}}, description={\the\glslongtok}}% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glssetattribute{\the\glslabeltok}{regular}{true}}% }% {% % \end{macrocode} %\changes{1.42}{2020-02-03}{removed \cs{protect} from \cs{glsxtrsmsuffix}} % \begin{macrocode} \renewcommand*\glsabbrvfont[1]{\glsabbrvsmfont{##1}}% \renewcommand*\glsfirstabbrvfont[1]{\glsfirstabbrvsmfont{##1}}% \renewcommand*{\abbrvpluralsuffix}{\glsxtrsmsuffix}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}% % \end{macrocode} % The inline full form displays the short form followed by the % long form in parentheses. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \protect\glsfirstabbrvsmfont{\glsaccessshort{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslong{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \protect\glsfirstabbrvsmfont{\glsaccessshortpl{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslongpl{##1}}}% }% % \end{macrocode} %\changes{1.21}{2017-11-03}{corrected first letter uppercasing} % \begin{macrocode} \renewcommand*{\Glsxtrinlinefullformat}[2]{% \protect\glsfirstabbrvsmfont{\Glsaccessshort{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslong{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \protect\glsfirstabbrvsmfont{\Glsaccessshortpl{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslongpl{##1}}}% }% % \end{macrocode} % The first use full form only displays the short form, but it % typically won't be used as the \catattr{regular} attribute is set by this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstabbrvsmfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstabbrvsmfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstabbrvsmfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstabbrvsmfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-sm-nolong} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \letabbreviationstyle{short-sm-nolong}{short-sm} % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-sm-desc} %\changes{0.5}{2015-12-07}{new} %\changes{1.39}{2019-03-22}{corrected to omit \gloskey{description} key as advertised in the %manual} % \begin{macrocode} \newabbreviationstyle{short-sm-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNoLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortdescname}, sort={\the\glsshorttok}, first={\protect\glsfirstabbrvsmfont{\the\glsshorttok}}, firstplural={\protect\glsfirstabbrvsmfont{\the\glsshortpltok}}, text={\protect\glsabbrvsmfont{\the\glsshorttok}}, plural={\protect\glsabbrvsmfont{\the\glsshortpltok}}}% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glssetattribute{\the\glslabeltok}{regular}{true}}% }% {% % \end{macrocode} %\changes{1.42}{2020-02-03}{removed \cs{protect} from \cs{glsxtrsmsuffix}} % \begin{macrocode} \renewcommand*\glsabbrvfont[1]{\glsabbrvsmfont{##1}}% \renewcommand*\glsfirstabbrvfont[1]{\glsfirstabbrvsmfont{##1}}% \renewcommand*{\abbrvpluralsuffix}{\glsxtrsmsuffix}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}% % \end{macrocode} % The inline full form displays the short format followed by the % long form in parentheses. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstabbrvsmfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslong{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstabbrvsmfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslongpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstabbrvsmfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslong{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstabbrvsmfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslongpl{##1}}}% }% % \end{macrocode} % The first use full form only displays the short form, but it % typically won't be used as the \catattr{regular} attribute is set by this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstabbrvsmfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstabbrvsmfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstabbrvsmfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstabbrvsmfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% } % \end{macrocode} %\end{abbrvstyle} %\begin{abbrvstyle}{short-sm-nolong-desc} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \letabbreviationstyle{short-sm-nolong-desc}{short-sm-desc} % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{nolong-short-sm} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newabbreviationstyle{nolong-short-sm}% {% \GlsXtrUseAbbrStyleSetup{short-sm-nolong}% }% {% \GlsXtrUseAbbrStyleFmts{short-sm-nolong}% % \end{macrocode} % The inline full form displays the long form followed by the % short form in parentheses. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \protect\glsfirstlongdefaultfont{\glsaccesslong{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvsmfont{\glsaccessshort{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \protect\glsfirstlongdefaultfont{\glsaccesslongpl{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvsmfont{\glsaccessshortpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \protect\glsfirstlongdefaultfont{\Glsaccesslong{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvsmfont{\glsaccessshort{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \protect\glsfirstlongdefaultfont{\Glsaccesslongpl{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvsmfont{\glsaccessshortpl{##1}}}% }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{long-noshort-sm} %\changes{0.5}{2015-12-07}{new} %\changes{1.04}{2016-05-02}{renamed from \qt{long-sm}} % The smallcaps font will only be used if % the short form is explicitly invoked through commands like % \cs{glsshort}. % \begin{macrocode} \newabbreviationstyle{long-noshort-sm}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNameShortAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongnoshortname}, sort={\the\glsshorttok}, first={\protect\glsfirstlongdefaultfont{\the\glslongtok}}, firstplural={\protect\glsfirstlongdefaultfont{\the\glslongpltok}}, text={\protect\glslongdefaultfont{\the\glslongtok}}, plural={\protect\glslongdefaultfont{\the\glslongpltok}},% description={\the\glslongtok}% }% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glssetattribute{\the\glslabeltok}{regular}{true}}% }% {% % \end{macrocode} %\changes{1.42}{2020-02-03}{removed \cs{protect} from \cs{glsxtrsmsuffix}} % \begin{macrocode} \renewcommand*\glsabbrvfont[1]{\glsabbrvsmfont{##1}}% \renewcommand*\glsfirstabbrvfont[1]{\glsfirstabbrvsmfont{##1}}% \renewcommand*{\abbrvpluralsuffix}{\glsxtrsmsuffix}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}% % \end{macrocode} % The format for subsequent use (not used when the regular attribute % is set). % \begin{macrocode} \renewcommand*{\glsxtrsubsequentfmt}[2]{% \glslongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\glsxtrsubsequentplfmt}[2]{% \glslongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\Glsxtrsubsequentfmt}[2]{% \glslongdefaultfont{\Glsaccesslong{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\Glsxtrsubsequentplfmt}[2]{% \glslongdefaultfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% % \end{macrocode} % The inline full form displays the long format followed by the % short form in parentheses. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvsmfont{\glsaccessshort{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvsmfont{\glsaccessshortpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstlongdefaultfont{\Glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvsmfont{\glsaccessshort{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstlongdefaultfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvsmfont{\glsaccessshortpl{##1}}}% }% % \end{macrocode} % The first use full form only displays the long form, but it % typically won't be used as the \catattr{regular} attribute is set by this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% } % \end{macrocode} %\end{abbrvstyle} %\begin{abbrvstyle}{long-sm} %Backward compatibility: % \begin{macrocode} \@glsxtr@deprecated@abbrstyle{long-sm}{long-noshort-sm} % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{long-noshort-sm-desc} %\changes{0.5}{2015-12-07}{new} %\changes{1.04}{2016-05-02}{renamed from \cs{long-desc-sm}} % The smaller font will only be used if % the short form is explicitly invoked through commands like % \cs{glsshort}. % \begin{macrocode} \newabbreviationstyle{long-noshort-sm-desc}% {% \GlsXtrUseAbbrStyleSetup{long-noshort-desc}% }% {% % \end{macrocode} %\changes{1.42}{2020-02-03}{removed \cs{protect} from \cs{glsxtrsmsuffix}} % \begin{macrocode} \renewcommand*\glsabbrvfont[1]{\glsabbrvsmfont{##1}}% \renewcommand*\glsfirstabbrvfont[1]{\glsfirstabbrvsmfont{##1}}% \renewcommand*{\abbrvpluralsuffix}{\glsxtrsmsuffix}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}% % \end{macrocode} % The format for subsequent use (not used when the regular attribute % is set). % \begin{macrocode} \renewcommand*{\glsxtrsubsequentfmt}[2]{% \glslongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\glsxtrsubsequentplfmt}[2]{% \glslongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\Glsxtrsubsequentfmt}[2]{% \glslongdefaultfont{\Glsaccesslong{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\Glsxtrsubsequentplfmt}[2]{% \glslongdefaultfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% % \end{macrocode} % The inline full form displays the long format followed by the % short form in parentheses. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvsmfont{\glsaccessshort{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvsmfont{\glsaccessshortpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstlongdefaultfont{\Glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvsmfont{\glsaccessshort{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstlongdefaultfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvsmfont{\glsaccessshortpl{##1}}}% }% % \end{macrocode} % The first use full form only displays the long form, but it % typically won't be used as the \catattr{regular} attribute is set by this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% } % \end{macrocode} %\end{abbrvstyle} %\begin{abbrvstyle}{long-desc-sm} %Backward compatibility: % \begin{macrocode} \@glsxtr@deprecated@abbrstyle{long-desc-sm}{long-noshort-sm-desc} % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-sm-footnote} %\changes{0.5}{2015-12-07}{new} %\changes{1.04}{2016-05-02}{renamed from \qt{footnote-sm}} %\changes{1.42}{2020-02-03}{added missing text key} % \begin{macrocode} \newabbreviationstyle{short-sm-footnote}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNoLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrfootnotename}, sort={\the\glsshorttok}, description={\the\glslongtok},% first={\protect\glsfirstabbrvsmfont{\the\glsshorttok}% \protect\glsxtrabbrvfootnote{\the\glslabeltok}% {\protect\glsfirstlongfootnotefont{\the\glslongtok}}},% firstplural={\protect\glsfirstabbrvsmfont{\the\glsshortpltok}% \protect\glsxtrabbrvfootnote{\the\glslabeltok}% {\protect\glsfirstlongfootnotefont{\the\glslongpltok}}},% text={\protect\glsabbrvsmfont{\the\glsshorttok}},% plural={\protect\glsabbrvsmfont{\the\glsshortpltok}}}% % \end{macrocode} % Switch off hyperlinks on first use to prevent nested hyperlinks, % and unset the \catattr{regular} attribute if it has been set. %\changes{0.5.1}{2015-12-07}{switch off regular attribute if set} % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glssetattribute{\the\glslabeltok}{nohyperfirst}{true}% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} %\changes{1.42}{2020-02-03}{removed \cs{protect} from \cs{glsxtrsmsuffix}} % \begin{macrocode} \renewcommand*\glsabbrvfont[1]{\glsabbrvsmfont{##1}}% \renewcommand*\glsfirstabbrvfont[1]{\glsfirstabbrvsmfont{##1}}% \renewcommand*{\abbrvpluralsuffix}{\glsxtrsmsuffix}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongfootnotefont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongfootnotefont{##1}}% % \end{macrocode} % The full format displays the short form followed by the long form % as a footnote. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstabbrvsmfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \protect\glsxtrabbrvfootnote{##1}% {\glsfirstlongfootnotefont{\glsaccesslong{##1}}}% }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstabbrvsmfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \protect\glsxtrabbrvfootnote{##1}% {\glsfirstlongfootnotefont{\glsaccesslongpl{##1}}}% }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstabbrvsmfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \protect\glsxtrabbrvfootnote{##1}% {\glsfirstlongfootnotefont{\glsaccesslong{##1}}}% }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstabbrvsmfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \protect\glsxtrabbrvfootnote{##1}% {\glsfirstlongfootnotefont{\glsaccesslongpl{##1}}}% }% % \end{macrocode} % The first use full form and the inline full form use the short % (long) style. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstabbrvsmfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslong{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstabbrvsmfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslongpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstabbrvsmfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslong{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstabbrvsmfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslongpl{##1}}}% }% } % \end{macrocode} %\end{abbrvstyle} %\begin{abbrvstyle}{footnote-sm} %Backward compatibility: % \begin{macrocode} \@glsxtr@deprecated@abbrstyle{footnote-sm}{short-sm-footnote} % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-sm-footnote-desc} % Like \abbrstyle{short-footnote} but with user supplied description. %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \newabbreviationstyle{short-sm-footnote-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNameLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrfootnotedescname}, sort={\glsxtrfootnotedescsort}, first={\protect\glsfirstabbrvsmfont{\the\glsshorttok}% \protect\glsxtrabbrvfootnote{\the\glslabeltok}% {\protect\glsfirstlongfootnotefont{\the\glslongtok}}},% firstplural={\protect\glsfirstabbrvsmfont{\the\glsshortpltok}% \protect\glsxtrabbrvfootnote{\the\glslabeltok}% {\protect\glsfirstlongfootnotefont{\the\glslongpltok}}},% text={\protect\glsabbrvsmfont{\the\glsshorttok}},% plural={\protect\glsabbrvsmfont{\the\glsshortpltok}}}% % \end{macrocode} % Switch off hyperlinks on first use to prevent nested hyperlinks, % and unset the \catattr{regular} attribute if it has been set. %\changes{0.5.1}{2015-12-07}{switch off regular attribute if set} % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glssetattribute{\the\glslabeltok}{nohyperfirst}{true}% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{short-sm-footnote}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-sm-postfootnote} %\changes{0.5}{2015-12-07}{new} %\changes{1.04}{2016-05-02}{renamed from \qt{postfootnote-sm}} %\changes{1.42}{2020-02-03}{added missing text key} % \begin{macrocode} \newabbreviationstyle{short-sm-postfootnote}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNoLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrfootnotename}, sort={\the\glsshorttok}, description={\the\glslongtok},% first={\protect\glsfirstabbrvsmfont{\the\glsshorttok}},% firstplural={\protect\glsfirstabbrvsmfont{\the\glsshortpltok}},% text={\protect\glsabbrvsmfont{\the\glsshorttok}},% plural={\protect\glsabbrvsmfont{\the\glsshortpltok}}}% % \end{macrocode} % Make this category insert a footnote after the link if this was % the first use, and % unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \csdef{glsxtrpostlink\glscategorylabel}{% \glsxtrifwasfirstuse {% % \end{macrocode} % Needs the specific font command here as the style may have been % lost by the time the footnote occurs. % \begin{macrocode} \glsxtrdopostpunc{\protect\glsxtrabbrvfootnote{\glslabel}% {\glsfirstlongfootnotefont{\glsentrylong{\glslabel}}}}% }% {}% }% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% % \end{macrocode} % The footnote needs to be suppressed in the inline form, so % \cs{glsxtrfull} must set the first use switch off. % \begin{macrocode} \renewcommand*{\glsxtrsetupfulldefs}{% \let\glsxtrifwasfirstuse\@secondoftwo }% }% {% % \end{macrocode} %\changes{1.42}{2020-02-03}{removed \cs{protect} from \cs{glsxtrsmsuffix}} % \begin{macrocode} \renewcommand*\glsabbrvfont[1]{\glsabbrvsmfont{##1}}% \renewcommand*\glsfirstabbrvfont[1]{\glsfirstabbrvsmfont{##1}}% \renewcommand*{\abbrvpluralsuffix}{\glsxtrsmsuffix}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongfootnotefont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongfootnotefont{##1}}% % \end{macrocode} % The full format displays the short form. The long form is % deferred. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstabbrvsmfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstabbrvsmfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstabbrvsmfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstabbrvsmfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% % \end{macrocode} % The first use full form and the inline full form use the short % (long) style. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstabbrvsmfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslong{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstabbrvsmfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslongpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstabbrvsmfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslong{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstabbrvsmfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslongpl{##1}}}% }% } % \end{macrocode} %\end{abbrvstyle} %\begin{abbrvstyle}{postfootnote-sm} %Backward compatibility: % \begin{macrocode} \@glsxtr@deprecated@abbrstyle{postfootnote-sm}{short-sm-postfootnote} % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-sm-postfootnote-desc} % Like \abbrstyle{short-sm-postfootnote} but with user supplied description. %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \newabbreviationstyle{short-sm-postfootnote-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNameLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrfootnotedescname}, sort={\glsxtrfootnotedescsort}, first={\protect\glsfirstabbrvsmfont{\the\glsshorttok}},% firstplural={\protect\glsfirstabbrvsmfont{\the\glsshortpltok}},% text={\protect\glsabbrvsmfont{\the\glsshorttok}},% plural={\protect\glsabbrvsmfont{\the\glsshortpltok}}}% % \end{macrocode} % Make this category insert a footnote after the link if this was % the first use, and % unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \csdef{glsxtrpostlink\glscategorylabel}{% \glsxtrifwasfirstuse {% % \end{macrocode} % Needs the specific font command here as the style may have been % lost by the time the footnote occurs. % \begin{macrocode} \glsxtrdopostpunc{\protect\glsxtrabbrvfootnote{\glslabel}% {\glsfirstlongfootnotefont{\glsentrylong{\glslabel}}}}% }% {}% }% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% % \end{macrocode} % The footnote needs to be suppressed in the inline form, so % \cs{glsxtrfull} must set the first use switch off. % \begin{macrocode} \renewcommand*{\glsxtrsetupfulldefs}{% \let\glsxtrifwasfirstuse\@secondoftwo }% }% {% \GlsXtrUseAbbrStyleFmts{short-sm-postfootnote}% } % \end{macrocode} %\end{abbrvstyle} % %\subsection{Predefined Styles (Emphasized)} % These styles use \ics{emph} for the short form. %\begin{macro}{\glsabbrvemfont} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \newcommand*{\glsabbrvemfont}[1]{\emph{#1}}% % \end{macrocode} %\end{macro} %\begin{macro}{\glsfirstabbrvemfont} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \newcommand*{\glsfirstabbrvemfont}[1]{\glsabbrvemfont{#1}}% % \end{macrocode} %\end{macro} % The default short form suffix: %\begin{macro}{\glsxtremsuffix} %\changes{0.5}{2015-12-07}{new} % \begin{macrocode} \newcommand*{\glsxtremsuffix}{\glsxtrabbrvpluralsuffix} % \end{macrocode} %\end{macro} %\begin{macro}{\glsfirstlongemfont} %\changes{1.04}{2016-05-02}{new} %Only used by the \qt{long-em} styles. % \begin{macrocode} \newcommand*{\glsfirstlongemfont}[1]{\glslongemfont{#1}}% % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongemfont} %\changes{1.04}{2016-05-02}{new} %Only used by the \qt{long-em} styles. % \begin{macrocode} \newcommand*{\glslongemfont}[1]{\emph{#1}}% % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{long-short-em} %\changes{0.5}{2015-12-07}{new} % The long form is just set in the default long font. %\changes{1.42}{2020-02-03}{added missing text key} % \begin{macrocode} \newabbreviationstyle{long-short-em}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetFirstLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongshortname}, sort={\the\glsshorttok}, first={\protect\glsfirstlongdefaultfont{\the\glslongtok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstabbrvemfont{\the\glsshorttok}}},% firstplural={\protect\glsfirstlongdefaultfont{\the\glslongpltok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstabbrvemfont{\the\glsshortpltok}}},% text={\protect\glsabbrvemfont{\the\glsshorttok}},% plural={\protect\glsabbrvemfont{\the\glsshortpltok}},% description={\the\glslongtok}}% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} %\changes{1.42}{2020-02-03}{removed \cs{protect} from \cs{glsxtremsuffix}} % \begin{macrocode} \renewcommand*\glsabbrvfont[1]{\glsabbrvemfont{##1}}% \renewcommand*\glsfirstabbrvfont[1]{\glsfirstabbrvemfont{##1}}% \renewcommand*{\abbrvpluralsuffix}{\glsxtremsuffix}% % \end{macrocode} % Use the default long fonts. % \begin{macrocode} \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}% % \end{macrocode} % The first use full form and the inline full form are the same for % this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvemfont{\glsaccessshort{##1}}}% }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvemfont{\glsaccessshortpl{##1}}}% }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstlongdefaultfont{\Glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvemfont{\glsaccessshort{##1}}}% }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstlongdefaultfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvemfont{\glsaccessshortpl{##1}}}% }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{long-short-em-desc} %\changes{0.5}{2015-12-07}{new} % \begin{macrocode} \newabbreviationstyle{long-short-em-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetTextShortAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongshortdescname}, sort={\glsxtrlongshortdescsort},% first={\protect\glsfirstlongdefaultfont{\the\glslongtok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstabbrvemfont{\the\glsshorttok}}},% firstplural={\protect\glsfirstlongdefaultfont{\the\glslongpltok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstabbrvemfont{\the\glsshortpltok}}},% text={\protect\glsabbrvemfont{\the\glsshorttok}},% plural={\protect\glsabbrvemfont{\the\glsshortpltok}}% }% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} % As long-short-em style: % \begin{macrocode} \GlsXtrUseAbbrStyleFmts{long-short-em}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{long-em-short-em} %\changes{1.04}{2016-05-02}{new} %\changes{1.42}{2020-02-03}{added missing text key} % \begin{macrocode} \newabbreviationstyle{long-em-short-em}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetFirstLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. %\cs{glslongemfont} is used in the description since \cs{glsdesc} %doesn't set the style. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongshortname}, sort={\the\glsshorttok}, first={\protect\glsfirstlongemfont{\the\glslongtok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstabbrvemfont{\the\glsshorttok}}},% firstplural={\protect\glsfirstlongemfont{\the\glslongpltok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstabbrvemfont{\the\glsshortpltok}}},% % \end{macrocode} %\changes{1.15}{2017-05-10}{fixed spelling of \cs{glsabbrvfont}} % \begin{macrocode} text={\protect\glsabbrvemfont{\the\glsshorttok}},% plural={\protect\glsabbrvemfont{\the\glsshortpltok}},% description={\protect\glslongemfont{\the\glslongtok}}}% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} %\changes{1.42}{2020-02-03}{removed \cs{protect} from \cs{glsxtremsuffix}} % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtremsuffix}% \renewcommand*{\glsabbrvfont}[1]{\glsabbrvemfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvemfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongemfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongemfont{##1}}% % \end{macrocode} % The first use full form and the inline full form are the same for % this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstlongemfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvemfont{\glsaccessshort{##1}}}% }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstlongemfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvemfont{\glsaccessshortpl{##1}}}% }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstlongemfont{\Glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvemfont{\glsaccessshort{##1}}}% }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstlongemfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvemfont{\glsaccessshortpl{##1}}}% }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{long-em-short-em-desc} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \newabbreviationstyle{long-em-short-em-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetTextShortAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongshortdescname}, sort={\glsxtrlongshortdescsort},% first={\protect\glsfirstlongemfont{\the\glslongtok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstabbrvemfont{\the\glsshorttok}}},% firstplural={\protect\glsfirstlongemfont{\the\glslongpltok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstabbrvemfont{\the\glsshortpltok}}},% text={\protect\glsabbrvemfont{\the\glsshorttok}},% plural={\protect\glsabbrvemfont{\the\glsshortpltok}}% }% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{long-em-short-em}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-em-long} % Now the short (long) version %\changes{0.5}{2015-12-07}{new} %\changes{1.42}{2020-02-03}{added missing text key} % \begin{macrocode} \newabbreviationstyle{short-em-long}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetFirstLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortlongname}, sort={\the\glsshorttok}, description={\the\glslongtok},% first={\protect\glsfirstabbrvemfont{\the\glsshorttok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstlongdefaultfont{\the\glslongtok}}},% firstplural={\protect\glsfirstabbrvemfont{\the\glsshortpltok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstlongdefaultfont{\the\glslongpltok}}},% text={\protect\glsabbrvemfont{\the\glsshorttok}},% plural={\protect\glsabbrvemfont{\the\glsshortpltok}}}% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} % Mostly as short-long style: %\changes{1.05}{2016-06-10}{fixed incorrect font used by long form} %\changes{1.42}{2020-02-03}{removed \cs{protect} from \cs{glsxtremsuffix}} % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtremsuffix}% \renewcommand*\glsabbrvfont[1]{\glsabbrvemfont{##1}}% \renewcommand*\glsfirstabbrvfont[1]{\glsfirstabbrvemfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}% % \end{macrocode} % The first use full form and the inline full form are the same for % this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstabbrvemfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslong{##1}}}% }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstabbrvemfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslongpl{##1}}}% }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstabbrvemfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslong{##1}}}% }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstabbrvemfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslongpl{##1}}}% }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-em-long-desc} % As before but user provides description %\changes{0.5}{2015-12-07}{new} % \begin{macrocode} \newabbreviationstyle{short-em-long-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetTextShortAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortlongdescname}, sort={\glsxtrshortlongdescsort}, first={\protect\glsfirstabbrvemfont{\the\glsshorttok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstlongdefaultfont{\the\glslongtok}}},% firstplural={\protect\glsfirstabbrvemfont{\the\glsshortpltok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstlongdefaultfont{\the\glslongpltok}}},% text={\protect\glsabbrvemfont{\the\glsshorttok}},% plural={\protect\glsabbrvemfont{\the\glsshortpltok}}% }% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{short-em-long}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-em-long-em} %\changes{1.04}{2016-05-02}{new} %\changes{1.42}{2020-02-03}{added missing text key} % \begin{macrocode} \newabbreviationstyle{short-em-long-em}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetFirstLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. %\cs{glslongemfont} is used in the description since \cs{glsdesc} %doesn't set the style. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortlongname}, sort={\the\glsshorttok}, description={\protect\glslongemfont{\the\glslongtok}},% first={\protect\glsfirstabbrvemfont{\the\glsshorttok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstlongemfont{\the\glslongtok}}},% firstplural={\protect\glsfirstabbrvemfont{\the\glsshortpltok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstlongemfont{\the\glslongpltok}}},% % \end{macrocode} %\changes{1.15}{2017-05-10}{fixed spelling of \cs{glsabbrvfont}} % \begin{macrocode} text={\protect\glsabbrvemfont{\the\glsshorttok}},% plural={\protect\glsabbrvemfont{\the\glsshortpltok}}}% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} %\changes{1.42}{2020-02-03}{removed \cs{protect} from \cs{glsxtremsuffix}} % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtremsuffix}% \renewcommand*{\glsabbrvfont}[1]{\glsabbrvemfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvemfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongemfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongemfont{##1}}% % \end{macrocode} % The first use full form and the inline full form are the same for % this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstabbrvemfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongemfont{\glsaccesslong{##1}}}% }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstabbrvemfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongemfont{\glsaccesslongpl{##1}}}% }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstabbrvemfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongemfont{\glsaccesslong{##1}}}% }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstabbrvemfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongemfont{\glsaccesslongpl{##1}}}% }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-em-long-em-desc} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \newabbreviationstyle{short-em-long-em-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetTextShortAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortlongdescname},% sort={\glsxtrshortlongdescsort},% first={\protect\glsfirstabbrvemfont{\the\glsshorttok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstlongemfont{\the\glslongtok}}},% firstplural={\protect\glsfirstabbrvemfont{\the\glsshortpltok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstlongemfont{\the\glslongpltok}}},% text={\protect\glsabbrvemfont{\the\glsshorttok}},% plural={\protect\glsabbrvemfont{\the\glsshortpltok}}% }% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{short-em-long-em}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-em} %\changes{0.5}{2015-12-07}{new} % \begin{macrocode} \newabbreviationstyle{short-em}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNoLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortnolongname}, sort={\the\glsshorttok}, first={\protect\glsfirstabbrvemfont{\the\glsshorttok}}, firstplural={\protect\glsfirstabbrvemfont{\the\glsshortpltok}}, text={\protect\glsabbrvemfont{\the\glsshorttok}}, plural={\protect\glsabbrvemfont{\the\glsshortpltok}}, description={\the\glslongtok}}% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glssetattribute{\the\glslabeltok}{regular}{true}}% }% {% % \end{macrocode} %\changes{1.42}{2020-02-03}{removed \cs{protect} from \cs{glsxtremsuffix}} % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtremsuffix}% \renewcommand*\glsabbrvfont[1]{\glsabbrvemfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvemfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}% % \end{macrocode} % The inline full form displays the short form followed by the % long form in parentheses. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \protect\glsfirstabbrvemfont{\glsaccessshort{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslong{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \protect\glsfirstabbrvemfont{\glsaccessshortpl{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslongpl{##1}}}% }% % \end{macrocode} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \renewcommand*{\Glsxtrinlinefullformat}[2]{% \protect\glsfirstabbrvemfont{\Glsaccessshort{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslong{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \protect\glsfirstabbrvemfont{\Glsaccessshortpl{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslongpl{##1}}}% }% % \end{macrocode} % The first use full form only displays the short form, but it % typically won't be used as the \catattr{regular} attribute is set by this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstabbrvemfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstabbrvemfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstabbrvemfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstabbrvemfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-em-nolong} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \letabbreviationstyle{short-em-nolong}{short-em} % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-em-desc} %\changes{0.5}{2015-12-07}{new} %\changes{1.39}{2019-03-22}{bug fix: omit \gloskey{description} key as advertised in the %manual} % \begin{macrocode} \newabbreviationstyle{short-em-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. The default name includes % the long form but \cs{glsxtrshortdescname} could be modified to % omit the long form, so include the \category{nameshortaccess} % attribute. % \begin{macrocode} \glsxtrAccSuppAbbrSetNoLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortdescname}, sort={\the\glsshorttok}, first={\protect\glsfirstabbrvemfont{\the\glsshorttok}}, firstplural={\protect\glsfirstabbrvemfont{\the\glsshortpltok}}, text={\protect\glsabbrvemfont{\the\glsshorttok}}, plural={\protect\glsabbrvemfont{\the\glsshortpltok}}}% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glssetattribute{\the\glslabeltok}{regular}{true}}% }% {% % \end{macrocode} %\changes{1.42}{2020-02-03}{removed \cs{protect} from \cs{glsxtremsuffix}} % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtremsuffix}% \renewcommand*\glsabbrvfont[1]{\glsabbrvemfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvemfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}% % \end{macrocode} % The inline full form displays the short format followed by the % long form in parentheses. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstabbrvemfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslong{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstabbrvemfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslongpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstabbrvemfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslong{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstabbrvemfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongdefaultfont{\glsaccesslongpl{##1}}}% }% % \end{macrocode} % The first use full form only displays the short form, but it % typically won't be used as the \catattr{regular} attribute is set by this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstabbrvemfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstabbrvemfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstabbrvemfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstabbrvemfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% } % \end{macrocode} %\end{abbrvstyle} %\begin{abbrvstyle}{short-em-nolong-desc} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \letabbreviationstyle{short-em-nolong-desc}{short-em-desc} % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{nolong-short-em} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newabbreviationstyle{nolong-short-em}% {% \GlsXtrUseAbbrStyleSetup{short-em-nolong}% }% {% \GlsXtrUseAbbrStyleFmts{short-em-nolong}% % \end{macrocode} % The inline full form displays the long form followed by the % short form in parentheses. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \protect\glsfirstlongdefaultfont{\glsaccesslong{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvemfont{\glsaccessshort{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \protect\glsfirstlongdefaultfont{\glsaccesslongpl{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvemfont{\glsaccessshortpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \protect\glsfirstlongdefaultfont{\Glsaccesslong{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvemfont{\glsaccessshort{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \protect\glsfirstlongdefaultfont{\Glsaccesslongpl{##1}% \ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstabbrvemfont{\glsaccessshortpl{##1}}}% }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{long-noshort-em} %\changes{0.5}{2015-12-07}{new} %\changes{1.04}{2016-05-02}{renamed from \qt{long-em}} % The short form is explicitly invoked through commands like % \cs{glsshort}. % \begin{macrocode} \newabbreviationstyle{long-noshort-em}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNameShortAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongnoshortname}, sort={\the\glsshorttok}, first={\protect\glsfirstlongdefaultfont{\the\glslongtok}}, firstplural={\protect\glsfirstlongdefaultfont{\the\glslongpltok}}, text={\protect\glslongdefaultfont{\the\glslongtok}}, plural={\protect\glslongdefaultfont{\the\glslongpltok}},% description={\the\glslongtok}% }% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glssetattribute{\the\glslabeltok}{regular}{true}}% }% {% % \end{macrocode} %\changes{1.42}{2020-02-03}{removed \cs{protect} from \cs{glsxtremsuffix}} % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtremsuffix}% \renewcommand*\glsabbrvfont[1]{\glsabbrvemfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvemfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}% % \end{macrocode} % The format for subsequent use (not used when the regular attribute % is set). % \begin{macrocode} \renewcommand*{\glsxtrsubsequentfmt}[2]{% \glslongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\glsxtrsubsequentplfmt}[2]{% \glslongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\Glsxtrsubsequentfmt}[2]{% \glslongdefaultfont{\Glsaccesslong{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\Glsxtrsubsequentplfmt}[2]{% \glslongdefaultfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% % \end{macrocode} % The inline full form displays the long format followed by the % short form in parentheses. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvemfont{\glsaccessshort{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvemfont{\glsaccessshortpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstlongdefaultfont{\Glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvemfont{\glsaccessshort{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstlongdefaultfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvemfont{\glsaccessshortpl{##1}}}% }% % \end{macrocode} % The first use full form only displays the long form, but it % typically won't be used as the \catattr{regular} attribute is set by this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% } % \end{macrocode} %\end{abbrvstyle} %\begin{abbrvstyle}{long-em} %Backward compatibility: % \begin{macrocode} \@glsxtr@deprecated@abbrstyle{long-em}{long-noshort-em} % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{long-em-noshort-em} %\changes{1.04}{2016-05-02}{new} % The short form is explicitly invoked through commands like % \cs{glsshort}. % \begin{macrocode} \newabbreviationstyle{long-em-noshort-em}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNameShortAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongnoshortname}, sort={\the\glsshorttok}, first={\protect\glsfirstlongemfont{\the\glslongtok}}, firstplural={\protect\glsfirstlongemfont{\the\glslongpltok}}, text={\protect\glslongemfont{\the\glslongtok}}, plural={\protect\glslongemfont{\the\glslongpltok}},% description={\protect\glslongemfont{\the\glslongtok}}% }% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glssetattribute{\the\glslabeltok}{regular}{true}}% }% {% % \end{macrocode} %\changes{1.42}{2020-02-03}{removed \cs{protect} from \cs{glsxtremsuffix}} % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtremsuffix}% \renewcommand*\glsabbrvfont[1]{\glsabbrvemfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvemfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongemfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongemfont{##1}}% % \end{macrocode} % The format for subsequent use (not used when the regular attribute % is set). % \begin{macrocode} \renewcommand*{\glsxtrsubsequentfmt}[2]{% \glslongemfont{\glsaccesslong{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\glsxtrsubsequentplfmt}[2]{% \glslongemfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\Glsxtrsubsequentfmt}[2]{% \glslongemfont{\Glsaccesslong{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\Glsxtrsubsequentplfmt}[2]{% \glslongemfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% % \end{macrocode} % The inline full form displays the long format followed by the % short form in parentheses. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstlongemfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvemfont{\glsaccessshort{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstlongemfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvemfont{\glsaccessshortpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstlongemfont{\Glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvemfont{\glsaccessshort{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstlongemfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvemfont{\glsaccessshortpl{##1}}}% }% % \end{macrocode} % The first use full form only displays the long form, but it % typically won't be used as the \catattr{regular} attribute is set by this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstlongemfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstlongemfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstlongemfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstlongemfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{long-em-noshort-em-noreg} %\changes{1.17}{2017-08-09}{new} % Like long-em-noshort-em but doesn't set the \catattr{regular} attribute. % \begin{macrocode} \newabbreviationstyle{long-em-noshort-em-noreg}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNameShortAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \GlsXtrUseAbbrStyleSetup{long-em-noshort-em}% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{long-em-noshort-em}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{long-noshort-em-desc} %\changes{1.04}{2016-05-02}{renamed from \qt{long-desc-em}} %\changes{0.5}{2015-12-07}{new} % The emphasized font will only be used if % the short form is explicitly invoked through commands like % \cs{glsshort}. % \begin{macrocode} \newabbreviationstyle{long-noshort-em-desc}% {% \GlsXtrUseAbbrStyleSetup{long-noshort-desc}% }% {% % \end{macrocode} %\changes{1.42}{2020-02-03}{removed \cs{protect} from \cs{glsxtremsuffix}} % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtremsuffix}% \renewcommand*\glsabbrvfont[1]{\glsabbrvemfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvemfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}% % \end{macrocode} % The format for subsequent use (not used when the regular attribute % is set). % \begin{macrocode} \renewcommand*{\glsxtrsubsequentfmt}[2]{% \glslongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\glsxtrsubsequentplfmt}[2]{% \glslongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\Glsxtrsubsequentfmt}[2]{% \glslongdefaultfont{\Glsaccesslong{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\Glsxtrsubsequentplfmt}[2]{% \glslongdefaultfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% % \end{macrocode} % The inline full form displays the long format followed by the % short form in parentheses. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvemfont{\glsaccessshort{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvemfont{\glsaccessshortpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstlongdefaultfont{\Glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvemfont{\glsaccessshort{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstlongdefaultfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvemfont{\glsaccessshortpl{##1}}}% }% % \end{macrocode} % The first use full form only displays the long form, but it % typically won't be used as the \catattr{regular} attribute is set by this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstlongdefaultfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% } % \end{macrocode} %\end{abbrvstyle} %\begin{abbrvstyle}{long-desc-em} %Backward compatibility: % \begin{macrocode} \@glsxtr@deprecated@abbrstyle{long-desc-em}{long-noshort-em-desc} % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{long-em-noshort-em-desc} %\changes{1.04}{2016-05-02}{new} % The short form is explicitly invoked through commands like % \cs{glsxtrshort}. The long form is emphasized. No accessibility % attributes need to be set. % \begin{macrocode} \newabbreviationstyle{long-em-noshort-em-desc}% {% \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongnoshortdescname}, sort={\the\glslongtok}, first={\protect\glsfirstlongemfont{\the\glslongtok}}, firstplural={\protect\glsfirstlongemfont{\the\glslongpltok}}, text={\glslongemfont{\the\glslongtok}}, plural={\glslongemfont{\the\glslongpltok}}% }% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glssetattribute{\the\glslabeltok}{regular}{true}}% }% {% % \end{macrocode} %\changes{1.42}{2020-02-03}{removed \cs{protect} from \cs{glsxtremsuffix}} % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtremsuffix}% \renewcommand*\glsabbrvfont[1]{\glsabbrvemfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvemfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongemfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongemfont{##1}}% % \end{macrocode} % The format for subsequent use (not used when the regular attribute % is set). % \begin{macrocode} \renewcommand*{\glsxtrsubsequentfmt}[2]{% \glslongemfont{\glsaccesslong{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\glsxtrsubsequentplfmt}[2]{% \glslongemfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\Glsxtrsubsequentfmt}[2]{% \glslongemfont{\Glsaccesslong{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% \renewcommand*{\Glsxtrsubsequentplfmt}[2]{% \glslongemfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside ##2\fi}% \ifglsxtrinsertinside \else##2\fi }% % \end{macrocode} % The inline full form displays the long format followed by the % short form in parentheses. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstlongemfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvemfont{\glsaccessshort{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstlongemfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvemfont{\glsaccessshortpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstlongemfont{\Glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvemfont{\glsaccessshort{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstlongemfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvemfont{\glsaccessshortpl{##1}}}% }% % \end{macrocode} % The first use full form only displays the long form, but it % typically won't be used as the \catattr{regular} attribute is set by this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstlongemfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstlongemfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstlongemfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstlongemfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{long-em-noshort-em-desc-noreg} %\changes{1.17}{2017-08-09}{new} % Like long-em-noshort-em-desc but doesn't set the \catattr{regular} attribute. % \begin{macrocode} \newabbreviationstyle{long-em-noshort-em-desc-noreg}% {% \GlsXtrUseAbbrStyleSetup{long-em-noshort-em-desc}% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{long-em-noshort-em-desc}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-em-footnote} %\changes{0.5}{2015-12-07}{new} %\changes{1.04}{2015-04-30}{renamed from \qt{footnote-em}} %\changes{1.42}{2020-02-03}{added missing text key} % \begin{macrocode} \newabbreviationstyle{short-em-footnote}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNoLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrfootnotename}, sort={\the\glsshorttok}, description={\the\glslongtok},% first={\protect\glsfirstabbrvemfont{\the\glsshorttok}% \protect\glsxtrabbrvfootnote{\the\glslabeltok}% {\protect\glsfirstlongfootnotefont{\the\glslongtok}}},% firstplural={\protect\glsfirstabbrvemfont{\the\glsshortpltok}% \protect\glsxtrabbrvfootnote{\the\glslabeltok}% {\protect\glsfirstlongfootnotefont{\the\glslongpltok}}},% text={\protect\glsabbrvemfont{\the\glsshorttok}},% plural={\protect\glsabbrvemfont{\the\glsshortpltok}}}% % \end{macrocode} % Switch off hyperlinks on first use to prevent nested hyperlinks, % and unset the \catattr{regular} attribute if it has been set. %\changes{0.5.1}{2015-12-07}{switch off regular attribute if set} % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glssetattribute{\the\glslabeltok}{nohyperfirst}{true}% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} %\changes{1.42}{2020-02-03}{removed \cs{protect} from \cs{glsxtremsuffix}} % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtremsuffix}% \renewcommand*\glsabbrvfont[1]{\glsabbrvemfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvemfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongfootnotefont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongfootnotefont{##1}}% % \end{macrocode} % The full format displays the short form followed by the long form % as a footnote. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstabbrvemfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \protect\glsxtrabbrvfootnote{##1}% {\glsfirstlongfootnotefont{\glsaccesslong{##1}}}% }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstabbrvemfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \protect\glsxtrabbrvfootnote{##1}% {\glsfirstlongfootnotefont{\glsaccesslongpl{##1}}}% }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstabbrvemfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \protect\glsxtrabbrvfootnote{##1}% {\glsfirstlongfootnotefont{\glsaccesslong{##1}}}% }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstabbrvemfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \protect\glsxtrabbrvfootnote{##1}% {\glsfirstlongfootnotefont{\glsaccesslongpl{##1}}}% }% % \end{macrocode} % The first use full form and the inline full form use the short % (long) style. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstabbrvemfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslong{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstabbrvemfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslongpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstabbrvemfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslong{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstabbrvemfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslongpl{##1}}}% }% } % \end{macrocode} %\end{abbrvstyle} %\begin{abbrvstyle}{footnote-em} %Backward compatibility: % \begin{macrocode} \@glsxtr@deprecated@abbrstyle{footnote-em}{short-em-footnote} % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-em-footnote-desc} % Like \abbrstyle{short-em-footnote} but with user supplied description. %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \newabbreviationstyle{short-em-footnote-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNameLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrfootnotedescname}, sort={\glsxtrfootnotedescsort}, first={\protect\glsfirstabbrvemfont{\the\glsshorttok}% \protect\glsxtrabbrvfootnote{\the\glslabeltok}% {\protect\glsfirstlongfootnotefont{\the\glslongtok}}},% firstplural={\protect\glsfirstabbrvemfont{\the\glsshortpltok}% \protect\glsxtrabbrvfootnote{\the\glslabeltok}% {\protect\glsfirstlongfootnotefont{\the\glslongpltok}}},% text={\protect\glsabbrvemfont{\the\glsshorttok}},% plural={\protect\glsabbrvemfont{\the\glsshortpltok}}}% % \end{macrocode} % Switch off hyperlinks on first use to prevent nested hyperlinks, % and unset the \catattr{regular} attribute if it has been set. %\changes{0.5.1}{2015-12-07}{switch off regular attribute if set} % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glssetattribute{\the\glslabeltok}{nohyperfirst}{true}% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{short-em-footnote}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-em-postfootnote} %\changes{0.5}{2015-12-07}{new} %\changes{1.04}{2016-05-02}{renamed from \qt{postfootnote-em}} %\changes{1.42}{2020-02-03}{added missing text key} % \begin{macrocode} \newabbreviationstyle{short-em-postfootnote}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNoLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrfootnotename}, sort={\the\glsshorttok}, description={\the\glslongtok},% first={\protect\glsfirstabbrvemfont{\the\glsshorttok}},% firstplural={\protect\glsfirstabbrvemfont{\the\glsshortpltok}},% text={\protect\glsabbrvemfont{\the\glsshorttok}},% plural={\protect\glsabbrvemfont{\the\glsshortpltok}}}% % \end{macrocode} % Make this category insert a footnote after the link if this was % the first use, and % unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \csdef{glsxtrpostlink\glscategorylabel}{% \glsxtrifwasfirstuse {% % \end{macrocode} % Needs the specific font command here as the style may have been % lost by the time the footnote occurs. % \begin{macrocode} \glsxtrdopostpunc{\protect\glsxtrabbrvfootnote{\glslabel}% {\glsfirstlongfootnotefont{\glsentrylong{\glslabel}}}}% }% {}% }% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% % \end{macrocode} % The footnote needs to be suppressed in the inline form, so % \cs{glsxtrfull} must set the first use switch off. % \begin{macrocode} \renewcommand*{\glsxtrsetupfulldefs}{% \let\glsxtrifwasfirstuse\@secondoftwo }% }% {% % \end{macrocode} %\changes{1.42}{2020-02-03}{removed \cs{protect} from \cs{glsxtremsuffix}} % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtremsuffix}% \renewcommand*\glsabbrvfont[1]{\glsabbrvemfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvemfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongfootnotefont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongfootnotefont{##1}}% % \end{macrocode} % The full format displays the short form. The long form is % deferred. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstabbrvemfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstabbrvemfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstabbrvemfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstabbrvemfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% % \end{macrocode} % The first use full form and the inline full form use the short % (long) style. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstabbrvemfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslong{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstabbrvemfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslongpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstabbrvemfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslong{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstabbrvemfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% \glsxtrparen{\glsfirstlongfootnotefont{\glsaccesslongpl{##1}}}% }% } % \end{macrocode} %\end{abbrvstyle} %\begin{abbrvstyle}{postfootnote-em} %Backward compatibility: % \begin{macrocode} \@glsxtr@deprecated@abbrstyle{postfootnote-em}{short-em-postfootnote} % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-em-postfootnote-desc} % Like \abbrstyle{short-em-postfootnote} but with user supplied description. %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \newabbreviationstyle{short-em-postfootnote-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNameLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrfootnotedescname}, sort={\glsxtrfootnotedescsort}, first={\protect\glsfirstabbrvemfont{\the\glsshorttok}},% firstplural={\protect\glsfirstabbrvemfont{\the\glsshortpltok}},% text={\protect\glsabbrvemfont{\the\glsshorttok}},% plural={\protect\glsabbrvemfont{\the\glsshortpltok}}}% % \end{macrocode} % Make this category insert a footnote after the link if this was % the first use, and % unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \csdef{glsxtrpostlink\glscategorylabel}{% \glsxtrifwasfirstuse {% % \end{macrocode} % Needs the specific font command here as the style may have been % lost by the time the footnote occurs. % \begin{macrocode} \glsxtrdopostpunc{\protect\glsxtrabbrvfootnote{\glslabel}% {\glsfirstlongfootnotefont{\glsentrylong{\glslabel}}}}% }% {}% }% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% % \end{macrocode} % The footnote needs to be suppressed in the inline form, so % \cs{glsxtrfull} must set the first use switch off. % \begin{macrocode} \renewcommand*{\glsxtrsetupfulldefs}{% \let\glsxtrifwasfirstuse\@secondoftwo }% }% {% \GlsXtrUseAbbrStyleFmts{short-em-postfootnote}% } % \end{macrocode} %\end{abbrvstyle} % %\subsection{Predefined Styles (User Parentheses Hook)} % These styles allow the user to adjust the parenthetical forms. % These styles all test for the existence of the % field given by: %\begin{macro}{\glsxtruserfield} %\changes{1.04}{2016-05-02}{new} % Default is the useri field. % \begin{macrocode} \newcommand*{\glsxtruserfield}{useri} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtruserparen} %\changes{1.04}{2016-05-02}{new} % The format of the parenthetical information. % The first argument is the long/short form. The second argument % is the entry's label. If \cs{glscurrentfieldvalue} has been % defined, then we have at least \styfmt{glossaries} v4.23, which makes % it easier for the user to adjust this. % \begin{macrocode} \ifdef\glscurrentfieldvalue { \newcommand*{\glsxtruserparen}[2]{% \glsxtrfullsep{#2}% \glsxtrparen {#1\ifglshasfield{\glsxtruserfield}{#2}{, \glscurrentfieldvalue}{}}% } } { \newcommand*{\glsxtruserparen}[2]{% \glsxtrfullsep{#2}% \glsxtrparen {#1\ifglshasfield{\glsxtruserfield}{#2}{, \@glo@thisvalue}{}}% } } % \end{macrocode} %\end{macro} % Font used for short form: %\begin{macro}{\glsabbrvuserfont} %\changes{1.04}{2016-05-02}{new} %\changes{1.17}{2017-08-09}{initialised to default font} % \begin{macrocode} \newcommand*{\glsabbrvuserfont}[1]{\glsabbrvdefaultfont{#1}} % \end{macrocode} %\end{macro} % Font used for short form on first use: %\begin{macro}{\glsfirstabbrvuserfont} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \newcommand*{\glsfirstabbrvuserfont}[1]{\glsabbrvuserfont{#1}} % \end{macrocode} %\end{macro} % Font used for long form: %\begin{macro}{\glslonguserfont} %\changes{1.04}{2016-05-02}{new} %\changes{1.17}{2017-08-09}{initialised to default font} % \begin{macrocode} \newcommand*{\glslonguserfont}[1]{\glslongdefaultfont{#1}} % \end{macrocode} %\end{macro} % Font used for long form on first use: %\begin{macro}{\glsfirstlonguserfont} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \newcommand*{\glsfirstlonguserfont}[1]{\glslonguserfont{#1}} % \end{macrocode} %\end{macro} % The default short form suffix: %\begin{macro}{\glsxtrusersuffix} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \newcommand*{\glsxtrusersuffix}{\glsxtrabbrvpluralsuffix} % \end{macrocode} %\end{macro} % % Description encapsulator. %\begin{macro}{\glsuserdescription} %\changes{1.30}{2018-04-25}{new} %The first argument is the description. The second argument is the %label. % \begin{macrocode} \newcommand*{\glsuserdescription}[2]{\glslonguserfont{#1}} % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{long-short-user} %\changes{1.04}{2016-05-02}{new} %\changes{1.42}{2020-02-03}{added missing text key} % \begin{macrocode} \newabbreviationstyle{long-short-user}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetFirstLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongshortname}, sort={\the\glsshorttok}, first={\protect\glsfirstlonguserfont{\the\glslongtok}% \protect\glsxtruserparen{\protect\glsfirstabbrvuserfont{\the\glsshorttok}}% {\the\glslabeltok}},% firstplural={\protect\glsfirstlonguserfont{\the\glslongpltok}% \protect\glsxtruserparen {\protect\glsfirstabbrvuserfont{\the\glsshortpltok}}{\the\glslabeltok}},% % \end{macrocode} %\changes{1.15}{2017-05-10}{fixed spelling of \cs{glsabbrvfont}} % \begin{macrocode} text={\protect\glsabbrvuserfont{\the\glsshorttok}},% plural={\protect\glsabbrvuserfont{\the\glsshortpltok}},% description={\protect\glsuserdescription{\the\glslongtok}% {\the\glslabeltok}}}% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} % In case the user wants to mix and match font styles, these are % redefined here. % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtrusersuffix}% \renewcommand*{\glsabbrvfont}[1]{\glsabbrvuserfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvuserfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlonguserfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslonguserfont{##1}}% % \end{macrocode} % The first use full form and the inline full form are the same for % this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstlonguserfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtruserparen{\glsfirstabbrvuserfont{\glsaccessshort{##1}}}{##1}% }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstlonguserfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtruserparen{\glsfirstabbrvuserfont{\glsaccessshortpl{##1}}}{##1}% }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstlonguserfont{\Glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtruserparen{\glsfirstabbrvuserfont{\glsaccessshort{##1}}}{##1}% }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstlonguserfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtruserparen{\glsfirstabbrvuserfont{\glsaccessshortpl{##1}}}{##1}% }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{long-postshort-user} %\changes{1.12}{2017-02-03}{new} %\changes{1.42}{2020-02-03}{added missing text key} %Like \abbrstyle{long-short-user} but defers the parenthetical %matter to after the link. % \begin{macrocode} \newabbreviationstyle{long-postshort-user}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetFirstLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongshortname}, sort={\the\glsshorttok}, first={\protect\glsfirstlonguserfont{\the\glslongtok}},% firstplural={\protect\glsfirstlonguserfont{\the\glslongpltok}},% % \end{macrocode} %\changes{1.15}{2017-05-10}{fixed spelling of \cs{glsabbrvfont}} % \begin{macrocode} text={\protect\glsabbrvuserfont{\the\glsshorttok}},% plural={\protect\glsabbrvuserfont{\the\glsshortpltok}},% description={\protect\glsuserdescription{\the\glslongtok}% {\the\glslabeltok}}}% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \csdef{glsxtrpostlink\glscategorylabel}{% \glsxtrifwasfirstuse {% \glsxtruserparen {\glsfirstabbrvuserfont{\glsentryshort{\glslabel}}}% {\glslabel}% }% {}% }% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} % In case the user wants to mix and match font styles, these are % redefined here. % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtrusersuffix}% \renewcommand*{\glsabbrvfont}[1]{\glsabbrvuserfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvuserfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlonguserfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslonguserfont{##1}}% % \end{macrocode} %First use full form: % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstlonguserfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstlonguserfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstlonguserfont{\Glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstlonguserfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% % \end{macrocode} % In-line format: % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstlonguserfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtruserparen{\glsfirstabbrvuserfont{\glsaccessshort{##1}}}{##1}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstlonguserfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtruserparen{\glsfirstabbrvuserfont{\glsaccessshortpl{##1}}}{##1}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstlonguserfont{\Glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtruserparen{\glsfirstabbrvuserfont{\glsaccessshort{##1}}}{##1}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstlonguserfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtruserparen{\glsfirstabbrvuserfont{\glsaccessshortpl{##1}}}{##1}% }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{macro}{\glsxtrlongshortuserdescname} %\changes{1.25}{2017-11-24}{new} % \begin{macrocode} \newcommand*{\glsxtrlongshortuserdescname}{% \protect\glslonguserfont{\the\glslongtok}% \protect\glsxtruserparen {\protect\glsabbrvuserfont{\the\glsshorttok}}{\the\glslabeltok}% } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{long-postshort-user-desc} %\changes{1.12}{2017-02-03}{new} %Like \abbrstyle{long-postshort-user} but the user supplies the %description. % \begin{macrocode} \newabbreviationstyle{long-postshort-user-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetTextShortAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongshortuserdescname}, sort={\the\glslongtok}, first={\protect\glsfirstlonguserfont{\the\glslongtok}},% firstplural={\protect\glsfirstlonguserfont{\the\glslongpltok}},% % \end{macrocode} %\changes{1.15}{2017-05-10}{fixed spelling of \cs{glsabbrvfont}} % \begin{macrocode} text={\protect\glsabbrvuserfont{\the\glsshorttok}},% plural={\protect\glsabbrvuserfont{\the\glsshortpltok}}% }% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \csdef{glsxtrpostlink\glscategorylabel}{% \glsxtrifwasfirstuse {% \glsxtruserparen {\glsfirstabbrvuserfont{\glsentryshort{\glslabel}}}% {\glslabel}% }% {}% }% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{long-postshort-user}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-postlong-user} %\changes{1.12}{2017-02-03}{new} %\changes{1.42}{2020-02-03}{added missing text key} %Like \abbrstyle{short-long-user} but defers the parenthetical %matter to after the link. % \begin{macrocode} \newabbreviationstyle{short-postlong-user}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetFirstLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortlongname}, sort={\the\glsshorttok}, first={\protect\glsfirstlonguserfont{\the\glslongtok}},% firstplural={\protect\glsfirstlonguserfont{\the\glslongpltok}},% % \end{macrocode} %\changes{1.15}{2017-05-10}{fixed spelling of \cs{glsabbrvfont}} % \begin{macrocode} text={\protect\glsabbrvuserfont{\the\glsshorttok}},% plural={\protect\glsabbrvuserfont{\the\glsshortpltok}},% description={\protect\glsuserdescription{\the\glslongtok}% {\the\glslabeltok}}}% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \csdef{glsxtrpostlink\glscategorylabel}{% \glsxtrifwasfirstuse {% \glsxtruserparen {\glsfirstlonguserfont{\glsentrylong{\glslabel}}}% {\glslabel}% }% {}% }% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} % In case the user wants to mix and match font styles, these are % redefined here. % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtrusersuffix}% \renewcommand*{\glsabbrvfont}[1]{\glsabbrvuserfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvuserfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlonguserfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslonguserfont{##1}}% % \end{macrocode} %First use full form: % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstabbrvuserfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstabbrvuserfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstabbrvuserfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstabbrvuserfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% % \end{macrocode} % In-line format: % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstabbrvuserfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtruserparen{\glsfirstlonguserfont{\glsaccesslong{##1}}}{##1}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstabbrvuserfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtruserparen{\glsfirstlonguserfont{\glsaccesslongpl{##1}}}{##1}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstabbrvuserfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtruserparen{\glsfirstlonguserfont{\glsaccesslong{##1}}}{##1}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstabbrvuserfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtruserparen{\glsfirstlonguserfont{\glsaccesslongpl{##1}}}{##1}% }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{macro}{\glsxtrshortlonguserdescname} %\changes{1.25}{2017-11-24}{new} % \begin{macrocode} \newcommand*{\glsxtrshortlonguserdescname}{% \protect\glsabbrvuserfont{\the\glsshorttok}% \protect\glsxtruserparen {\protect\glslonguserfont{\the\glslongpltok}}% {\the\glslabeltok}% } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{short-postlong-user-desc} %\changes{1.12}{2017-02-03}{new} %Like \abbrstyle{short-postlong-user} but leaves the user to specify %the description. % \begin{macrocode} \newabbreviationstyle{short-postlong-user-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetTextShortAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortlonguserdescname}, sort={\the\glsshorttok}, first={\protect\glsfirstlonguserfont{\the\glslongtok}},% firstplural={\protect\glsfirstlonguserfont{\the\glslongpltok}},% % \end{macrocode} %\changes{1.15}{2017-05-10}{fixed spelling of \cs{glsabbrvfont}} % \begin{macrocode} text={\protect\glsabbrvuserfont{\the\glsshorttok}},% plural={\protect\glsabbrvuserfont{\the\glsshortpltok}}% }% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \csdef{glsxtrpostlink\glscategorylabel}{% \glsxtrifwasfirstuse {% \glsxtruserparen {\glsfirstlonguserfont{\glsentrylong{\glslabel}}}% {\glslabel}% }% {}% }% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{short-postlong-user}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{long-short-user-desc} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \newabbreviationstyle{long-short-user-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetTextShortAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongshortuserdescname}, sort={\glsxtrlongshortdescsort},% % \end{macrocode} %\changes{1.17}{2017-08-09}{corrected first forms} % \begin{macrocode} first={\protect\glsfirstlonguserfont{\the\glslongtok}% \protect\glsxtruserparen{\protect\glsfirstabbrvuserfont{\the\glsshorttok}}% {\the\glslabeltok}},% firstplural={\protect\glsfirstlonguserfont{\the\glslongpltok}% \protect\glsxtruserparen {\protect\glsfirstabbrvuserfont{\the\glsshortpltok}}{\the\glslabeltok}},% text={\protect\glsabbrvfont{\the\glsshorttok}},% plural={\protect\glsabbrvfont{\the\glsshortpltok}}% }% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{long-short-user}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-long-user} %\changes{1.04}{2016-05-02}{new} %\changes{1.42}{2020-02-03}{added missing text key} % \begin{macrocode} \newabbreviationstyle{short-long-user}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetFirstLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} % \end{macrocode} %\cs{glslonguserfont} is used in the description since \cs{glsdesc} %doesn't set the style. (Now in \cs{glsuserdescription}.) % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortlongname}, sort={\the\glsshorttok}, description={\protect\glsuserdescription{\the\glslongtok}% {\the\glslabeltok}},% first={\protect\glsfirstabbrvuserfont{\the\glsshorttok}% \protect\glsxtruserparen{\protect\glsfirstlonguserfont{\the\glslongtok}}% {\the\glslabeltok}},% firstplural={\protect\glsfirstabbrvuserfont{\the\glsshortpltok}% \protect\glsxtruserparen{\protect\glsfirstlonguserfont{\the\glslongpltok}}% {\the\glslabeltok}},% % \end{macrocode} %\changes{1.15}{2017-05-10}{fixed spelling of \cs{glsabbrvfont}} % \begin{macrocode} text={\protect\glsabbrvuserfont{\the\glsshorttok}},% plural={\protect\glsabbrvuserfont{\the\glsshortpltok}}}% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} % In case the user wants to mix and match font styles, these are % redefined here. % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtrusersuffix}% \renewcommand*\glsabbrvfont[1]{\glsabbrvuserfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvuserfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlonguserfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslonguserfont{##1}}% % \end{macrocode} % The first use full form and the inline full form are the same for % this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstabbrvuserfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtruserparen{\glsfirstlonguserfont{\glsaccesslong{##1}}}{##1}% }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstabbrvuserfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtruserparen{\glsfirstlonguserfont{\glsaccesslongpl{##1}}}{##1}% }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstabbrvuserfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtruserparen{\glsfirstlonguserfont{\glsaccesslong{##1}}}{##1}% }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstabbrvuserfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtruserparen{\glsfirstlonguserfont{\glsaccesslongpl{##1}}}{##1}% }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-long-user-desc} %\changes{1.04}{2016-05-02}{new} % \begin{macrocode} \newabbreviationstyle{short-long-user-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetTextShortAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortlonguserdescname}, sort={\glsxtrshortlongdescsort},% % \end{macrocode} %\changes{1.17}{2017-08-09}{corrected first forms} % \begin{macrocode} first={\protect\glsfirstabbrvuserfont{\the\glsshorttok}% \protect\glsxtruserparen{\protect\glsfirstlonguserfont{\the\glslongtok}}% {\the\glslabeltok}},% firstplural={\protect\glsfirstabbrvuserfont{\the\glsshortpltok}% \protect\glsxtruserparen{\protect\glsfirstlonguserfont{\the\glslongpltok}}% {\the\glslabeltok}},% text={\protect\glsabbrvfont{\the\glsshorttok}},% plural={\protect\glsabbrvfont{\the\glsshortpltok}}% }% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{short-long-user}% } % \end{macrocode} %\end{abbrvstyle} % %\subsection{Predefined Styles (Hyphen)} %These styles are designed to work with the \catattr{markwords} %attribute. They check if the inserted material (provided by the final %optional argument of commands like \cs{gls}) starts with a hyphen. %If it does, the insert is added to the parenthetical material. %Note that commands like \cs{glsxtrlong} set \cs{glsinsert} to empty %with the entire link-text stored in \cs{glscustomtext}. % %\begin{macro}{\glsxtrifhyphenstart} %Checks if the argument starts with a hyphen. The argument may be %\cs{glsinsert} so check for that and expand. %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \newrobustcmd*{\glsxtrifhyphenstart}[3]{% \ifx\glsinsert#1\relax \expandafter\@glsxtrifhyphenstart#1\relax\relax \@end@glsxtrifhyphenstart{#2}{#3}% \else \@glsxtrifhyphenstart#1\relax\relax\@end@glsxtrifhyphenstart{#2}{#3}% \fi } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtrifhyphenstart} %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \def\@glsxtrifhyphenstart#1#2\@end@glsxtrifhyphenstart#3#4{% \ifx-#1\relax#3\else #4\fi } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrlonghyphenshort} %\changes{1.17}{2017-08-09}{new} %\begin{definition} %\cs{glsxtrlonghyphenshort}\marg{label}\marg{long}\marg{short}\marg{insert} %\end{definition} %The \meta{long} and \meta{short} arguments may be the plural form. %The \meta{long} argument may also be the first letter uppercase form. % \begin{macrocode} \newcommand*{\glsxtrlonghyphenshort}[4]{% % \end{macrocode} % Grouping is needed to localise the redefinitions. % \begin{macrocode} {% % \end{macrocode} % If \meta{insert} starts with a hyphen, redefine \ics{glsxtrwordsep} % to a hyphen. The inserted material is also inserted into the % parenthetical part. (The inserted material is grouped as a % precautionary measure.) No change is made to \cs{glsxtrwordsep} if % \meta{insert} doesn't start with a hyphen. % \begin{macrocode} \glsxtrifhyphenstart{#4}{\def\glsxtrwordsep{-}}{}% \glsfirstlonghyphenfont{#2\ifglsxtrinsertinside{#4}\fi}% \ifglsxtrinsertinside\else{#4}\fi \glsxtrfullsep{#1}% \glsxtrparen{\glsfirstabbrvhyphenfont{#3\ifglsxtrinsertinside{#4}\fi}% \ifglsxtrinsertinside\else{#4}\fi}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsabbrvhyphenfont} %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \newcommand*{\glsabbrvhyphenfont}{\glsabbrvdefaultfont}% % \end{macrocode} %\end{macro} %\begin{macro}{\glsfirstabbrvhyphenfont} %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \newcommand*{\glsfirstabbrvhyphenfont}{\glsabbrvhyphenfont}% % \end{macrocode} %\end{macro} %\begin{macro}{\glslonghyphenfont} %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \newcommand*{\glslonghyphenfont}{\glslongdefaultfont}% % \end{macrocode} %\end{macro} %\begin{macro}{\glsfirstlonghyphenfont} %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \newcommand*{\glsfirstlonghyphenfont}{\glslonghyphenfont}% % \end{macrocode} %\end{macro} % The default short form suffix: %\begin{macro}{\glsxtrhyphensuffix} %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \newcommand*{\glsxtrhyphensuffix}{\glsxtrabbrvpluralsuffix} % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{long-hyphen-short-hyphen} %\changes{1.17}{2017-08-09}{new} %\changes{1.42}{2020-02-03}{added missing text key} %Designed for use with the \catattr{markwords} attribute. % \begin{macrocode} \newabbreviationstyle{long-hyphen-short-hyphen}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetFirstLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongshortname}, sort={\the\glsshorttok}, first={\protect\glsfirstlonghyphenfont{\the\glslongtok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstabbrvhyphenfont{\the\glsshorttok}}},% firstplural={\protect\glsfirstlonghyphenfont{\the\glslongpltok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstabbrvhyphenfont{\the\glsshortpltok}}},% text={\protect\glsabbrvhyphenfont{\the\glsshorttok}},% plural={\protect\glsabbrvhyphenfont{\the\glsshortpltok}},% description={\protect\glslonghyphenfont{\the\glslongtok}}}% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \renewcommand*{\abbrvpluralsuffix}{\glsxtrhyphensuffix}% \renewcommand*{\glsabbrvfont}[1]{\glsabbrvhyphenfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvhyphenfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlonghyphenfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslonghyphenfont{##1}}% % \end{macrocode} % The first use full form and the inline full form are the same for % this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsxtrlonghyphenshort{##1}{\glsaccesslong{##1}}{\glsaccessshort{##1}}{##2}% }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsxtrlonghyphenshort{##1}{\glsaccesslongpl{##1}}% {\glsaccessshortpl{##1}}{##2}% }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsxtrlonghyphenshort{##1}{\Glsaccesslong{##1}}{\glsaccessshort{##1}}{##2}% }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsxtrlonghyphenshort{##1}{\Glsaccesslongpl{##1}}% {\glsaccessshortpl{##1}}{##2}% }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{long-hyphen-short-hyphen-desc} %\changes{1.17}{2017-08-09}{new} %Like \abbrstyle{long-hyphen-short-hyphen} but the description %must be supplied by the user. % \begin{macrocode} \newabbreviationstyle{long-hyphen-short-hyphen-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetTextShortAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongshortdescname}, sort={\glsxtrlongshortdescsort}, first={\protect\glsfirstlonghyphenfont{\the\glslongtok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstabbrvhyphenfont{\the\glsshorttok}}},% firstplural={\protect\glsfirstlonghyphenfont{\the\glslongpltok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstabbrvhyphenfont{\the\glsshortpltok}}},% text={\protect\glsabbrvhyphenfont{\the\glsshorttok}},% plural={\protect\glsabbrvhyphenfont{\the\glsshortpltok}}% }% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{long-hyphen-short-hyphen}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{macro}{\glsxtrlonghyphennoshort} %\changes{1.17}{2017-08-09}{new} %\begin{definition} %\cs{glsxtrlonghyphennoshort}\marg{label}\marg{long}\marg{insert} %\end{definition} % \begin{macrocode} \newcommand*{\glsxtrlonghyphennoshort}[3]{% % \end{macrocode} % Grouping is needed to localise the redefinitions. % \begin{macrocode} {% % \end{macrocode} % If \meta{insert} starts with a hyphen, redefine \ics{glsxtrwordsep} % to a hyphen. The inserted material is also inserted into the % parenthetical part. (The inserted material is grouped as a % precautionary measure.) No change is made to \cs{glsxtrwordsep} if % \meta{insert} doesn't start with a hyphen. % \begin{macrocode} \glsxtrifhyphenstart{#3}{\def\glsxtrwordsep{-}}{}% \glsfirstlonghyphenfont{#2\ifglsxtrinsertinside{#3}\fi}% \ifglsxtrinsertinside\else{#3}\fi }% } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{long-hyphen-noshort-desc-noreg} %\changes{1.17}{2017-08-09}{new} %\changes{1.42}{2020-02-03}{added missing text key} %This version doesn't show the short form (except %explicitly with \cs{glsxtrshort}). Since \cs{glsxtrshort} doesn't %support the hyphen switch, the short form just uses the default %short-form font command. This style won't work with the %\catattr{regular} as the regular form isn't flexible enough. %No accessibility attributes need to be set. % \begin{macrocode} \newabbreviationstyle{long-hyphen-noshort-desc-noreg}% {% \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongnoshortdescname}, sort={\expandonce\glsxtrorglong}, first={\protect\glsfirstlonghyphenfont{\the\glslongtok}},% firstplural={\protect\glsfirstlonghyphenfont{\the\glslongpltok}},% text={\protect\glslonghyphenfont{\the\glslongtok}},% plural={\protect\glslonghyphenfont{\the\glslongpltok}}% }% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{long-hyphen-short-hyphen}% % \end{macrocode} % In case the user wants to mix and match font styles, these are % redefined here. % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtrabbrvpluralsuffix}% \renewcommand*\glsabbrvfont[1]{\glsabbrvdefaultfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvdefaultfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlonghyphenfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslonghyphenfont{##1}}% % \end{macrocode} % The format for subsequent use (not used when the regular attribute % is set). % \begin{macrocode} \renewcommand*{\glsxtrsubsequentfmt}[2]{% \glsxtrlonghyphennoshort{##1}{\glsaccesslong{##1}}{##2}% }% \renewcommand*{\glsxtrsubsequentplfmt}[2]{% \glsxtrlonghyphennoshort{##1}{\glsaccesslongpl{##1}}{##2}% }% \renewcommand*{\Glsxtrsubsequentfmt}[2]{% \glsxtrlonghyphennoshort{##1}{\Glsaccesslong{##1}}{##2}% }% \renewcommand*{\Glsxtrsubsequentplfmt}[2]{% \glsxtrlonghyphennoshort{##1}{\Glsaccesslongpl{##1}}{##2}% }% % \end{macrocode} % The inline full form displays the long format followed by the % short form in parentheses. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsxtrlonghyphennoshort{##1}{\glsaccesslong{##1}}{##2}% \glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvfont{\glsaccessshort{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsxtrlonghyphennoshort{##1}{\glsaccesslongpl{##1}}{##2}% \glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvfont{\glsaccessshortpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsxtrlonghyphennoshort{##1}{\Glsaccesslong{##1}}{##2}% \glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvfont{\glsaccessshort{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsxtrlonghyphennoshort{##1}{\Glsaccesslongpl{##1}}{##2}% \glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvfont{\glsaccessshortpl{##1}}}% }% % \end{macrocode} % The first use full form only displays the long form. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsxtrlonghyphennoshort{##1}{\glsaccesslong{##1}}{##2}% }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsxtrlonghyphennoshort{##1}{\glsaccesslongpl{##1}}{##2}% }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsxtrlonghyphennoshort{##1}{\Glsaccesslong{##1}}{##2}% }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsxtrlonghyphennoshort{##1}{\Glsaccesslongpl{##1}}{##2}% }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{long-hyphen-noshort-noreg} %\changes{1.17}{2017-08-09}{new} % It doesn't really make a great deal of sense to have a long-only % style that doesn't have a description (unless no glossary is % required), but the best course of % action here is to use the short form as the name and the long % form as the description. % \begin{macrocode} \newabbreviationstyle{long-hyphen-noshort-noreg}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetNameShortAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongnoshortname}, sort={\the\glsshorttok}, first={\protect\glsfirstlonghyphenfont{\the\glslongtok}},% firstplural={\protect\glsfirstlonghyphenfont{\the\glslongpltok}},% text={\protect\glslonghyphenfont{\the\glslongtok}},% plural={\protect\glslonghyphenfont{\the\glslongpltok}},% description={\the\glslongtok}% }% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} %\changes{1.40}{2019-03-31}{corrected formatting commands} % \begin{macrocode} \GlsXtrUseAbbrStyleFmts{long-hyphen-noshort-desc-noreg}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{macro}{\glsxtrlonghyphen} %\changes{1.17}{2017-08-09}{new} %\begin{definition} %\cs{glsxtrlonghyphen}\marg{long}\marg{label}\marg{insert} %\end{definition} %Used by \abbrstyle{long-hyphen-postshort-hyphen}. The \meta{insert} %is check to determine if it starts with a hyphen but isn't used %here as it's moved to the post-link hook. % \begin{macrocode} \newcommand*{\glsxtrlonghyphen}[3]{% % \end{macrocode} % Grouping is needed to localise the redefinitions. % \begin{macrocode} {% \glsxtrifhyphenstart{#3}{\def\glsxtrwordsep{-}}{}% \glsfirstlonghyphenfont{#1}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrposthyphenshort} %\changes{1.17}{2017-08-09}{new} %\begin{definition} %\cs{glsxtrposthyphenshort}\marg{label}\marg{insert} %\end{definition} %Used in the post-link hook for the %\abbrstyle{long-hyphen-postshort-hyphen} style. Much like %\cs{glsxtrlonghyphenshort} but omits the \meta{long} part. This %always uses the singular short form. % \begin{macrocode} \newcommand*{\glsxtrposthyphenshort}[2]{% {% \glsxtrifhyphenstart{#2}{\def\glsxtrwordsep{-}}{}% \ifglsxtrinsertinside{\glsfirstlonghyphenfont{#2}}\else{#2}\fi \glsxtrfullsep{#1}% \glsxtrparen {\glsfirstabbrvhyphenfont{\glsentryshort{#1}\ifglsxtrinsertinside{#2}\fi}% \ifglsxtrinsertinside\else{#2}\fi }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrposthyphensubsequent} %\changes{1.17}{2017-08-09}{new} %\begin{definition} %\cs{glsxtrposthyphensubsequent}\marg{label}\marg{insert} %\end{definition} %Format in the post-link hook for subsequent use. The label is %ignored by default. % \begin{macrocode} \newcommand*{\glsxtrposthyphensubsequent}[2]{% \glsabbrvfont{\ifglsxtrinsertinside {#2}\fi}% \ifglsxtrinsertinside \else{#2}\fi } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{long-hyphen-postshort-hyphen} %\changes{1.17}{2017-08-09}{new} %\changes{1.42}{2020-02-03}{added missing text key} %Like \abbrstyle{long-hyphen-short-hyphen} but shifts the insert %and parenthetical material to the post-link hook. % \begin{macrocode} \newabbreviationstyle{long-hyphen-postshort-hyphen}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetFirstLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongshortname}, sort={\the\glsshorttok}, first={\protect\glsfirstlonghyphenfont{\the\glslongtok}},% firstplural={\protect\glsfirstlonghyphenfont{\the\glslongpltok}},% text={\protect\glsabbrvhyphenfont{\the\glsshorttok}},% plural={\protect\glsabbrvhyphenfont{\the\glsshortpltok}},% description={\protect\glslonghyphenfont{\the\glslongtok}}}% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \csdef{glsxtrpostlink\glscategorylabel}{% \glsxtrifwasfirstuse {% \glsxtrposthyphenshort{\glslabel}{\glsinsert}% }% {% % \end{macrocode} % Put the insertion into the post-link: % \begin{macrocode} \glsxtrposthyphensubsequent{\glslabel}{\glsinsert}% }% }% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} % In case the user wants to mix and match font styles, these are % redefined here. % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtrabbrvpluralsuffix}% \renewcommand*{\glsabbrvfont}[1]{\glsabbrvhyphenfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvhyphenfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlonghyphenfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslonghyphenfont{##1}}% % \end{macrocode} % Subsequent use needs to omit the insertion: % \begin{macrocode} \renewcommand*{\glsxtrsubsequentfmt}[2]{% \glsabbrvfont{\glsaccessshort{##1}}% }% \renewcommand*{\glsxtrsubsequentplfmt}[2]{% \glsabbrvfont{\glsaccessshortpl{##1}}% }% \renewcommand*{\Glsxtrsubsequentfmt}[2]{% \glsabbrvfont{\Glsaccessshort{##1}}% }% \renewcommand*{\Glsxtrsubsequentplfmt}[2]{% \glsabbrvfont{\Glsaccessshortpl{##1}}% }% % \end{macrocode} % First use full form: % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsxtrlonghyphen{\glsaccesslong{##1}}{##1}{##2}% }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsxtrlonghyphen{\glsaccesslongpl{##1}}{##1}{##2}% }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsxtrlonghyphen{\Glsaccesslong{##1}}{##1}{##2}% }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsxtrlonghyphen{\Glsaccesslongpl{##1}}{##1}{##2}% }% % \end{macrocode} % In-line format. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstlonghyphenfont{\glsaccesslong{##1}% \ifglsxtrinsertinside{##2}\fi}% \ifglsxtrinsertinside \else{##2}\fi }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstlonghyphenfont{\glsaccesslongpl{##1}% \ifglsxtrinsertinside{##2}\fi}% \ifglsxtrinsertinside \else{##2}\fi }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstlonghyphenfont{\Glsaccesslong{##1}% \ifglsxtrinsertinside{##2}\fi}% \ifglsxtrinsertinside \else{##2}\fi }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstlonghyphenfont{\Glsaccesslongpl{##1}% \ifglsxtrinsertinside{##2}\fi}% \ifglsxtrinsertinside \else{##2}\fi }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{long-hyphen-postshort-hyphen-desc} %\changes{1.17}{2017-08-09}{new} %Like \abbrstyle{long-hyphen-postshort-hyphen} but the description %must be supplied by the user. % \begin{macrocode} \newabbreviationstyle{long-hyphen-postshort-hyphen-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetTextShortAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrlongshortdescname}, sort={\glsxtrlongshortdescsort},% first={\protect\glsfirstlonghyphenfont{\the\glslongtok}},% firstplural={\protect\glsfirstlonghyphenfont{\the\glslongpltok}},% text={\protect\glsabbrvhyphenfont{\the\glsshorttok}},% plural={\protect\glsabbrvhyphenfont{\the\glsshortpltok}}% }% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \csdef{glsxtrpostlink\glscategorylabel}{% \glsxtrifwasfirstuse {% \glsxtrposthyphenshort{\glslabel}{\glsinsert}% }% {% % \end{macrocode} % Put the insertion into the post-link: % \begin{macrocode} \glsxtrposthyphensubsequent{\glslabel}{\glsinsert}% }% }% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{long-hyphen-postshort-hyphen}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{macro}{\glsxtrshorthyphenlong} %\changes{1.17}{2017-08-09}{new} %\begin{definition} %\cs{glsxtrshorthyphenlong}\marg{label}\marg{short}\marg{long}\marg{insert} %\end{definition} %The \meta{long} and \meta{short} arguments may be the plural form. %The \meta{long} argument may also be the first letter uppercase form. % \begin{macrocode} \newcommand*{\glsxtrshorthyphenlong}[4]{% % \end{macrocode} % Grouping is needed to localise the redefinitions. % \begin{macrocode} {% % \end{macrocode} % If \meta{insert} starts with a hyphen, redefine \cs{glsxtrwordsep} % to a hyphen. The inserted material is also inserted into the % parenthetical part. (The inserted material is grouped as a % precautionary measure.) % \begin{macrocode} \glsxtrifhyphenstart{#4}{\def\glsxtrwordsep{-}}{}% \glsfirstabbrvhyphenfont{#2\ifglsxtrinsertinside{#4}\fi}% \ifglsxtrinsertinside\else{#4}\fi \glsxtrfullsep{#1}% \glsxtrparen{\glsfirstlonghyphenfont{#3\ifglsxtrinsertinside{#4}\fi}% \ifglsxtrinsertinside\else{#4}\fi}% }% } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{short-hyphen-long-hyphen} %\changes{1.17}{2017-08-09}{new} %\changes{1.42}{2020-02-03}{added missing text key} %Designed for use with the \catattr{markwords} attribute. % \begin{macrocode} \newabbreviationstyle{short-hyphen-long-hyphen}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetFirstLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortlongname}, sort={\the\glsshorttok}, first={\protect\glsfirstabbrvhyphenfont{\the\glsshorttok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstlonghyphenfont{\the\glslongtok}}},% firstplural={\protect\glsfirstabbrvhyphenfont{\the\glsshortpltok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstlonghyphenfont{\the\glslongpltok}}},% text={\protect\glsabbrvhyphenfont{\the\glsshorttok}},% plural={\protect\glsabbrvhyphenfont{\the\glsshortpltok}},% description={\protect\glslonghyphenfont{\the\glslongtok}}}% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \renewcommand*{\abbrvpluralsuffix}{\glsxtrhyphensuffix}% \renewcommand*{\glsabbrvfont}[1]{\glsabbrvhyphenfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvhyphenfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlonghyphenfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslonghyphenfont{##1}}% % \end{macrocode} % The first use full form and the inline full form are the same for % this style. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsxtrshorthyphenlong{##1}{\glsaccessshort{##1}}{\glsaccesslong{##1}}{##2}% }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsxtrshorthyphenlong{##1}% {\glsaccessshortpl{##1}}{\glsaccesslongpl{##1}}{##2}% }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsxtrshorthyphenlong{##1}{\glsaccessshort{##1}}{\Glsaccesslong{##1}}{##2}% }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsxtrshorthyphenlong{##1}% {\glsaccessshortpl{##1}}{\Glsaccesslongpl{##1}}{##2}% }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-hyphen-long-hyphen-desc} %\changes{1.17}{2017-08-09}{new} %Like \abbrstyle{short-hyphen-long-hyphen} but the description %must be supplied by the user. % \begin{macrocode} \newabbreviationstyle{short-hyphen-long-hyphen-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetTextShortAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortlongdescname}, sort={\glsxtrshortlongdescsort}, first={\protect\glsfirstabbrvhyphenfont{\the\glsshorttok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstlonghyphenfont{\the\glslongtok}}},% firstplural={\protect\glsfirstabbrvhyphenfont{\the\glsshortpltok}% \protect\glsxtrfullsep{\the\glslabeltok}% \glsxtrparen{\protect\glsfirstlonghyphenfont{\the\glslongpltok}}},% text={\protect\glsabbrvhyphenfont{\the\glsshorttok}},% plural={\protect\glsabbrvhyphenfont{\the\glsshortpltok}}% }% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{short-hyphen-long-hyphen}% } % \end{macrocode} %\end{abbrvstyle} % %\begin{macro}{\glsxtrshorthyphen} %\changes{1.17}{2017-08-09}{new} %\begin{definition} %\cs{glsxtrshorthyphen}\marg{short}\marg{label}\marg{insert} %\end{definition} %Used by \abbrstyle{short-hyphen-postlong-hyphen}. The \meta{insert} %is check to determine if it starts with a hyphen but isn't used %here as it's moved to the post-link hook. % \begin{macrocode} \newcommand*{\glsxtrshorthyphen}[3]{% % \end{macrocode} % Grouping is needed to localise the redefinitions. % \begin{macrocode} {% \glsxtrifhyphenstart{#3}{\def\glsxtrwordsep{-}}{}% \glsfirstabbrvhyphenfont{#1}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrposthyphenlong} %\changes{1.17}{2017-08-09}{new} %\begin{definition} %\cs{glsxtrposthyphenlong}\marg{label}\marg{insert} %\end{definition} %Used in the post-link hook for the %\abbrstyle{short-hyphen-postlong-hyphen} style. Much like %\cs{glsxtrshorthyphenlong} but omits the \meta{short} part. This %always uses the singular long form. % \begin{macrocode} \newcommand*{\glsxtrposthyphenlong}[2]{% {% \glsxtrifhyphenstart{#2}{\def\glsxtrwordsep{-}}{}% \ifglsxtrinsertinside{\glsfirstabbrvhyphenfont{#2}}\else{#2}\fi \glsxtrfullsep{#1}% \glsxtrparen {\glsfirstlonghyphenfont{\glsentrylong{#1}\ifglsxtrinsertinside{#2}\fi}% \ifglsxtrinsertinside\else{#2}\fi }% }% } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{short-hyphen-postlong-hyphen} %\changes{1.17}{2017-08-09}{new} %\changes{1.42}{2020-02-03}{added missing text key} %Like \abbrstyle{short-hyphen-long-hyphen} but shifts the insert %and parenthetical material to the post-link hook. % \begin{macrocode} \newabbreviationstyle{short-hyphen-postlong-hyphen}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetFirstLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortlongname}, sort={\the\glsshorttok}, first={\protect\glsfirstabbrvhyphenfont{\the\glsshorttok}},% firstplural={\protect\glsfirstabbrvhyphenfont{\the\glsshortpltok}},% text={\protect\glsabbrvhyphenfont{\the\glsshorttok}},% plural={\protect\glsabbrvhyphenfont{\the\glsshortpltok}},% description={\protect\glslonghyphenfont{\the\glslongtok}}}% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \csdef{glsxtrpostlink\glscategorylabel}{% \glsxtrifwasfirstuse {% \glsxtrposthyphenlong{\glslabel}{\glsinsert}% }% {% % \end{macrocode} % Put the insertion into the post-link: % \begin{macrocode} \glsxtrposthyphensubsequent{\glslabel}{\glsinsert}% }% }% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} % In case the user wants to mix and match font styles, these are % redefined here. % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtrabbrvpluralsuffix}% \renewcommand*{\glsabbrvfont}[1]{\glsabbrvhyphenfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvhyphenfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlonghyphenfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslonghyphenfont{##1}}% % \end{macrocode} % Subsequent use needs to omit the insertion: % \begin{macrocode} \renewcommand*{\glsxtrsubsequentfmt}[2]{% \glsabbrvfont{\glsaccessshort{##1}}% }% \renewcommand*{\glsxtrsubsequentplfmt}[2]{% \glsabbrvfont{\glsaccessshortpl{##1}}% }% \renewcommand*{\Glsxtrsubsequentfmt}[2]{% \glsabbrvfont{\Glsaccessshort{##1}}% }% \renewcommand*{\Glsxtrsubsequentplfmt}[2]{% \glsabbrvfont{\Glsaccessshortpl{##1}}% }% % \end{macrocode} % First use full form: % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsxtrshorthyphen{\glsaccessshort{##1}}{##1}{##2}% }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsxtrshorthyphen{\glsaccessshortpl{##1}}{##1}{##2}% }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsxtrshorthyphen{\Glsaccessshort{##1}}{##1}{##2}% }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsxtrshorthyphen{\Glsaccessshortpl{##1}}{##1}{##2}% }% % \end{macrocode} % In-line format. Commands like \cs{glsxtrfull} set \cs{glsinsert} % to empty. The entire link-text (provided by the following % commands) is stored in \cs{glscustomtext}. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstabbrvhyphenfont{\glsaccessshort{##1}% \ifglsxtrinsertinside{##2}\fi}% \ifglsxtrinsertinside \else{##2}\fi }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstabbrvhyphenfont{\glsaccessshortpl{##1}% \ifglsxtrinsertinside{##2}\fi}% \ifglsxtrinsertinside \else{##2}\fi }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstabbrvhyphenfont{\Glsaccessshort{##1}% \ifglsxtrinsertinside{##2}\fi}% \ifglsxtrinsertinside \else{##2}\fi }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstabbrvhyphenfont{\Glsaccessshortpl{##1}% \ifglsxtrinsertinside{##2}\fi}% \ifglsxtrinsertinside \else{##2}\fi }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{abbrvstyle}{short-hyphen-postlong-hyphen-desc} %\changes{1.17}{2017-08-09}{new} %Like \abbrstyle{short-hyphen-postlong-hyphen} but the description %must be supplied by the user. % \begin{macrocode} \newabbreviationstyle{short-hyphen-postlong-hyphen-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetTextShortAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtrshortlongdescname}, sort={\glsxtrshortlongdescsort},% first={\protect\glsfirstabbrvhyphenfont{\the\glsshorttok}},% firstplural={\protect\glsfirstabbrvhyphenfont{\the\glsshortpltok}},% text={\protect\glsabbrvhyphenfont{\the\glsshorttok}},% plural={\protect\glsabbrvhyphenfont{\the\glsshortpltok}}% }% \renewcommand*{\GlsXtrPostNewAbbreviation}{% \csdef{glsxtrpostlink\glscategorylabel}{% \glsxtrifwasfirstuse {% \glsxtrposthyphenlong{\glslabel}{\glsinsert}% }% {% % \end{macrocode} % Put the insertion into the post-link: % \begin{macrocode} \glsxtrposthyphensubsequent{\glslabel}{\glsinsert}% }% }% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{short-hyphen-postlong-hyphen}% } % \end{macrocode} %\end{abbrvstyle} % %\subsection{Predefined Styles (No Short on First Use)} %These styles show only the long form on first use and only the %short form on subsequent use. %\begin{macro}{\glsabbrvonlyfont} %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \newcommand*{\glsabbrvonlyfont}{\glsabbrvdefaultfont}% % \end{macrocode} %\end{macro} %\begin{macro}{\glsfirstabbrvonlyfont} %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \newcommand*{\glsfirstabbrvonlyfont}{\glsabbrvonlyfont}% % \end{macrocode} %\end{macro} %\begin{macro}{\glslongonlyfont} %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \newcommand*{\glslongonlyfont}{\glslongdefaultfont}% % \end{macrocode} %\end{macro} %\begin{macro}{\glsfirstlongonlyfont} %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \newcommand*{\glsfirstlongonlyfont}{\glslongonlyfont}% % \end{macrocode} %\end{macro} % The default short form suffix: %\begin{macro}{\glsxtronlysuffix} %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \newcommand*{\glsxtronlysuffix}{\glsxtrabbrvpluralsuffix} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtronlyname} %\changes{1.25}{2017-11-24}{new} % The default name format for this style. % \begin{macrocode} \newcommand*{\glsxtronlyname}{% \protect\glsabbrvonlyfont{\the\glsshorttok}% } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{long-only-short-only} %\changes{1.17}{2017-08-09}{new} %\changes{1.42}{2020-02-03}{added missing text key} % \begin{macrocode} \newabbreviationstyle{long-only-short-only}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetFirstLongAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtronlyname}, sort={\the\glsshorttok}, first={\protect\glsfirstlongonlyfont{\the\glslongtok}},% firstplural={\protect\glsfirstlongonlyfont{\the\glslongpltok}},% text={\protect\glsabbrvonlyfont{\the\glsshorttok}},% plural={\protect\glsabbrvonlyfont{\the\glsshortpltok}},% description={\protect\glslongonlyfont{\the\glslongtok}}}% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% % \end{macrocode} %\changes{1.42}{2020-02-03}{removed \cs{protect} from \cs{glsxtronlysuffix}} % \begin{macrocode} \renewcommand*{\abbrvpluralsuffix}{\glsxtronlysuffix}% \renewcommand*{\glsabbrvfont}[1]{\glsabbrvonlyfont{##1}}% \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvonlyfont{##1}}% \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongonlyfont{##1}}% \renewcommand*{\glslongfont}[1]{\glslongonlyfont{##1}}% % \end{macrocode} % The first use full form doesn't show the short form. % \begin{macrocode} \renewcommand*{\glsxtrfullformat}[2]{% \glsfirstlongonlyfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\glsxtrfullplformat}[2]{% \glsfirstlongonlyfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullformat}[2]{% \glsfirstlongonlyfont{\Glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% \renewcommand*{\Glsxtrfullplformat}[2]{% \glsfirstlongonlyfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi }% % \end{macrocode} % The inline full form does show the short form. % \begin{macrocode} \renewcommand*{\glsxtrinlinefullformat}[2]{% \glsfirstlongonlyfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvonlyfont{\glsaccessshort{##1}}}% }% \renewcommand*{\glsxtrinlinefullplformat}[2]{% \glsfirstlongonlyfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvonlyfont{\glsaccessshortpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullformat}[2]{% \glsfirstlongonlyfont{\Glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvonlyfont{\glsaccessshortpl{##1}}}% }% \renewcommand*{\Glsxtrinlinefullplformat}[2]{% \glsfirstlongonlyfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% \ifglsxtrinsertinside\else##2\fi \glsxtrfullsep{##1}% \glsxtrparen{\protect\glsfirstabbrvonlyfont{\Glsaccessshortpl{##1}}}% }% } % \end{macrocode} %\end{abbrvstyle} % %\begin{macro}{\glsxtronlydescsort} %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \newcommand*{\glsxtronlydescsort}{\the\glslongtok} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtronlydescname} %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \newcommand*{\glsxtronlydescname}{% \protect\glslongfont{\the\glslongtok}% } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{long-only-short-only-desc} %\changes{1.17}{2017-08-09}{new} % \begin{macrocode} \newabbreviationstyle{long-only-short-only-desc}% {% % \end{macrocode} % Set accessibility attributes if enabled. % \begin{macrocode} \glsxtrAccSuppAbbrSetTextShortAttrs\glscategorylabel % \end{macrocode} % Setup the default fields. % \begin{macrocode} \renewcommand*{\CustomAbbreviationFields}{% name={\glsxtronlydescname}, sort={\glsxtronlydescsort},% first={\protect\glsfirstlongonlyfont{\the\glslongtok}},% firstplural={\protect\glsfirstlongonlyfont{\the\glslongpltok}},% text={\protect\glsabbrvonlyfont{\the\glsshorttok}},% plural={\protect\glsabbrvonlyfont{\the\glsshortpltok}}% }% % \end{macrocode} % Unset the \catattr{regular} attribute if it has been set. % \begin{macrocode} \renewcommand*{\GlsXtrPostNewAbbreviation}{% \glshasattribute{\the\glslabeltok}{regular}% {% \glssetattribute{\the\glslabeltok}{regular}{false}% }% {}% }% }% {% \GlsXtrUseAbbrStyleFmts{long-only-short-only}% } % \end{macrocode} %\end{abbrvstyle} % %\section{Using Entries in Headings} % % There are four main problems with using entries in sectioning % commands: they can mess with the first use flag if they end up in % the table of contents, they can add unwanted numbers to the % entry's location list, the label is corrupted if used inside % \ics{MakeUppercase} (which is used by the default headings style) % and they need to be expandable for PDF bookmarks. The % \styfmt{glossaries} package therefore recommends the use of the % expandable commands, such as \cs{glsentryshort}, instead but this % doesn't reflect the formatting since it doesn't include % \cs{glsabbrvfont}. The commands below are an attempt to get around % these problems. % % The PDF bookmark issue can easily be fixed with \sty{hyperref}'s % \cs{texorpdfstring} which can simply use the expandable command % in the PDF string case. The \TeX\ string case can now use % \cs{glsxtrshort} with the \gloskey[glslink]{noindex} key set, which % prevents the unwanted additions to the location list, and the % \gloskey[glslink]{hyper} key set to false, which prevents the problem of % nested links. This just leaves one thing left that needs to be % dealt with, and that's what to do if the heading style % uses \cs{MakeUppercase}. % % Note that \styfmt{glossaries} automatically loads \sty{textcase}, so % the label can be protected from case change with \sty{textcase}'s % \cs{NoCaseChange}. This means that we don't have a problem % provided the page style uses \cs{MakeTextUppercase}, but the % default heading page style uses \cs{MakeUppercase}. % % To get around this, save the original definition of \cs{markboth} % and \cs{markright} and adjust it so that \cs{MakeUppercase} is % temporarily redefined to \cs{MakeTextUppercase}. Some packages or % classes redefine these commands, so we can't just assume they % still have the original kernel definition. % %\begin{macro}{\markright} % Save original definition: % \begin{macrocode} \let\@glsxtr@org@markright\markright % \end{macrocode} % Redefine (grouping not added in case it interferes with the % original code): % \begin{macrocode} \renewcommand*{\markright}[1]{% \glsxtrmarkhook \@glsxtr@org@markright{\@glsxtrinmark#1\@glsxtrnotinmark}% \glsxtrrestoremarkhook } % \end{macrocode} %\end{macro} % %\begin{macro}{\markboth} % Save original definition: % \begin{macrocode} \let\@glsxtr@org@markboth\markboth % \end{macrocode} % Redefine (grouping not added in case it interferes with the % original code): % \begin{macrocode} \renewcommand*{\markboth}[2]{% \glsxtrmarkhook \@glsxtr@org@markboth {\@glsxtrinmark#1\@glsxtrnotinmark}% {\@glsxtrinmark#2\@glsxtrnotinmark}% \glsxtrrestoremarkhook } % \end{macrocode} %\end{macro} % %Also do this for \cs{@starttoc} %\begin{macro}{\@starttoc} % Save original definition: % \begin{macrocode} \let\@glsxtr@org@@starttoc\@starttoc % \end{macrocode} % Redefine: % \begin{macrocode} \renewcommand*{\@starttoc}[1]{% \glsxtrmarkhook \@glsxtrinmark \@glsxtr@org@@starttoc{#1}% \@glsxtrnotinmark \glsxtrrestoremarkhook } % \end{macrocode} %\end{macro} % % If this causes a problem provide a simple way of switching back to % the original definitions: %\begin{macro}{\glsxtrRevertMarks} % \begin{macrocode} \newcommand*{\glsxtrRevertMarks}{% \let\markright\@glsxtr@org@markright \let\markboth\@glsxtr@org@markboth \let\@starttoc\@glsxtr@org@@starttoc } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrRevertTocMarks} %\changes{1.31}{2018-05-09}{new} %Just restores \cs{@starttoc}. % \begin{macrocode} \newcommand*{\glsxtrRevertTocMarks}{% \let\@starttoc\@glsxtr@org@@starttoc } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrifinmark} %\changes{1.07}{2016-08-15}{new} % \begin{macrocode} \newcommand*{\glsxtrifinmark}[2]{#2} % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtrinmark} %\changes{1.07}{2016-08-15}{new} % \begin{macrocode} \newrobustcmd*{\@glsxtrinmark}{% \let\glsxtrifinmark\@firstoftwo } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtrnotinmark} %\changes{1.07}{2016-08-15}{new} % \begin{macrocode} \newrobustcmd*{\@glsxtrnotinmark}{% \let\glsxtrifinmark\@secondoftwo } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrtitleorpdforheading} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\glsxtrtitleorpdforheading}[3]{\texorpdfstring{#1}{#2}} } { \newcommand*{\glsxtrtitleorpdforheading}[3]{#1} } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrmarkhook} % Hook used in new definition of \cs{markboth} and \cs{markright} % to make some changes to apply to the marks: % \begin{macrocode} \newcommand*{\glsxtrmarkhook}{% % \end{macrocode} % Save current definitions: % \begin{macrocode} \let\@glsxtr@org@MakeUppercase\MakeUppercase \let\@glsxtr@org@glsxtrtitleorpdforheading\glsxtrtitleorpdforheading \let\@glsxtr@org@glsxtrtitleshort\glsxtrtitleshort \let\@glsxtr@org@glsxtrtitleshortpl\glsxtrtitleshortpl \let\@glsxtr@org@Glsxtrtitleshort\Glsxtrtitleshort \let\@glsxtr@org@Glsxtrtitleshortpl\Glsxtrtitleshortpl \let\@glsxtr@org@glsxtrtitlename\glsxtrtitlename \let\@glsxtr@org@Glsxtrtitlename\Glsxtrtitlename \let\@glsxtr@org@glsxtrtitletext\glsxtrtitletext \let\@glsxtr@org@Glsxtrtitletext\Glsxtrtitletext \let\@glsxtr@org@glsxtrtitleplural\glsxtrtitleplural \let\@glsxtr@org@Glsxtrtitleplural\Glsxtrtitleplural \let\@glsxtr@org@glsxtrtitlefirst\glsxtrtitlefirst \let\@glsxtr@org@Glsxtrtitlefirst\Glsxtrtitlefirst \let\@glsxtr@org@glsxtrtitlefirstplural\glsxtrtitlefirstplural \let\@glsxtr@org@Glsxtrtitlefirstplural\Glsxtrtitlefirstplural \let\@glsxtr@org@glsxtrtitlelong\glsxtrtitlelong \let\@glsxtr@org@glsxtrtitlelongpl\glsxtrtitlelongpl \let\@glsxtr@org@Glsxtrtitlelong\Glsxtrtitlelong \let\@glsxtr@org@Glsxtrtitlelongpl\Glsxtrtitlelongpl \let\@glsxtr@org@glsxtrtitlefull\glsxtrtitlefull \let\@glsxtr@org@glsxtrtitlefullpl\glsxtrtitlefullpl \let\@glsxtr@org@Glsxtrtitlefull\Glsxtrtitlefull \let\@glsxtr@org@Glsxtrtitlefullpl\Glsxtrtitlefullpl % \end{macrocode} % New definitions % \begin{macrocode} \let\glsxtrifinmark\@firstoftwo \let\MakeUppercase\MakeTextUppercase \let\glsxtrtitleorpdforheading\@thirdofthree \let\glsxtrtitleshort\glsxtrheadshort \let\glsxtrtitleshortpl\glsxtrheadshortpl \let\Glsxtrtitleshort\Glsxtrheadshort \let\Glsxtrtitleshortpl\Glsxtrheadshortpl \let\glsxtrtitlename\glsxtrheadname \let\Glsxtrtitlename\Glsxtrheadname \let\glsxtrtitletext\glsxtrheadtext \let\Glsxtrtitletext\Glsxtrheadtext \let\glsxtrtitleplural\glsxtrheadplural \let\Glsxtrtitleplural\Glsxtrheadplural \let\glsxtrtitlefirst\glsxtrheadfirst \let\Glsxtrtitlefirst\Glsxtrheadfirst \let\glsxtrtitlefirstplural\glsxtrheadfirstplural \let\Glsxtrtitlefirstplural\Glsxtrheadfirstplural \let\glsxtrtitlelong\glsxtrheadlong \let\glsxtrtitlelongpl\glsxtrheadlongpl \let\Glsxtrtitlelong\Glsxtrheadlong \let\Glsxtrtitlelongpl\Glsxtrheadlongpl \let\glsxtrtitlefull\glsxtrheadfull \let\glsxtrtitlefullpl\glsxtrheadfullpl \let\Glsxtrtitlefull\Glsxtrheadfull \let\Glsxtrtitlefullpl\Glsxtrheadfullpl } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrrestoremarkhook} % Hook used in new definition of \cs{markboth} and \cs{markright} % to restore the modified definitions. (This is in case the original % \cs{markboth} and \cs{markright} shouldn't be grouped for some % reason. There already is some grouping within those original % definitions, but some of the code lies outside that grouping, and % possibly there's a reason for it.) % \begin{macrocode} \newcommand*{\glsxtrrestoremarkhook}{% \let\glsxtrifinmark\@secondoftwo \let\MakeUppercase\@glsxtr@org@MakeUppercase \let\glsxtrtitleorpdforheading\@glsxtr@org@glsxtrtitleorpdforheading \let\glsxtrtitleshort\@glsxtr@org@glsxtrtitleshort \let\glsxtrtitleshortpl\@glsxtr@org@glsxtrtitleshortpl \let\Glsxtrtitleshort\@glsxtr@org@Glsxtrtitleshort \let\Glsxtrtitleshortpl\@glsxtr@org@Glsxtrtitleshortpl \let\glsxtrtitlename\@glsxtr@org@glsxtrtitlename \let\Glsxtrtitlename\@glsxtr@org@Glsxtrtitlename \let\glsxtrtitletext\@glsxtr@org@glsxtrtitletext \let\Glsxtrtitletext\@glsxtr@org@Glsxtrtitletext \let\glsxtrtitleplural\@glsxtr@org@glsxtrtitleplural \let\Glsxtrtitleplural\@glsxtr@org@Glsxtrtitleplural \let\glsxtrtitlefirst\@glsxtr@org@glsxtrtitlefirst \let\Glsxtrtitlefirst\@glsxtr@org@Glsxtrtitlefirst \let\glsxtrtitlefirstplural\@glsxtr@org@glsxtrtitlefirstplural \let\Glsxtrtitlefirstplural\@glsxtr@org@Glsxtrtitlefirstplural \let\glsxtrtitlelong\@glsxtr@org@glsxtrtitlelong \let\glsxtrtitlelongpl\@glsxtr@org@glsxtrtitlelongpl \let\Glsxtrtitlelong\@glsxtr@org@Glsxtrtitlelong \let\Glsxtrtitlelongpl\@glsxtr@org@Glsxtrtitlelongpl \let\glsxtrtitlefull\@glsxtr@org@glsxtrtitlefull \let\glsxtrtitlefullpl\@glsxtr@org@glsxtrtitlefullpl \let\Glsxtrtitlefull\@glsxtr@org@Glsxtrtitlefull \let\Glsxtrtitlefullpl\@glsxtr@org@Glsxtrtitlefullpl } % \end{macrocode} %\end{macro} % %\changes{0.5.1}{2015-12-07}{removed \cs{ifglsxtruseuchead}} % Instead of using one document-wide conditional, use % \catattr{headuc} attribute to determine whether or not to use the % all upper case form. % %\begin{macro}{\glsxtrheadshort} % Command used to display short form in the page header. %\changes{0.5.1}{2015-12-07}{now uses headuc attribute} % \begin{macrocode} \newcommand*{\glsxtrheadshort}[1]{% \protect\NoCaseChange {% \glsifattribute{#1}{headuc}{true}% {% \GLSxtrshort[noindex,hyper=false]{#1}[]% }% {% \glsxtrshort[noindex,hyper=false]{#1}[]% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrtitleshort} % Command to display short form of abbreviation in section title and % table of contents. % \begin{macrocode} \newrobustcmd*{\glsxtrtitleshort}[1]{% \glsxtrshort[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrheadshortpl} % Command used to display plural short form in the page header. % If you want the text converted to upper case, this needs to be % redefined to use \cs{GLSxtrshortpl} instead. If you are using a % smallcaps style, the default fonts don't provide italic smallcaps. %\changes{0.5.1}{2015-12-07}{now uses headuc attribute} % \begin{macrocode} \newcommand*{\glsxtrheadshortpl}[1]{% \protect\NoCaseChange {% \glsifattribute{#1}{headuc}{true}% {% \GLSxtrshortpl[noindex,hyper=false]{#1}[]% }% {% \glsxtrshortpl[noindex,hyper=false]{#1}[]% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrtitleshortpl} % Command to display plural short form of abbreviation in section title and % table of contents. %\changes{1.03}{2016-04-27}{bug fix: changed \cs{glsxtrshort} to %\cs{glsxtrshortpl}} % \begin{macrocode} \newrobustcmd*{\glsxtrtitleshortpl}[1]{% \glsxtrshortpl[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrheadshort} % Command used to display short form in the page header with the % first letter converted to upper case. %\changes{0.5.1}{2015-12-07}{now uses headuc attribute} % \begin{macrocode} \newcommand*{\Glsxtrheadshort}[1]{% \protect\NoCaseChange {% \glsifattribute{#1}{headuc}{true}% {% \GLSxtrshort[noindex,hyper=false]{#1}[]% }% {% \Glsxtrshort[noindex,hyper=false]{#1}[]% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrtitleshort} % Command to display short form of abbreviation in section title and % table of contents with the first letter converted to upper case. % \begin{macrocode} \newrobustcmd*{\Glsxtrtitleshort}[1]{% \Glsxtrshort[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSxtrtitleshort} %\changes{1.42}{2020-02-03}{new} % Command to display short form of abbreviation in section title and % table of contents in all upper case. % \begin{macrocode} \newrobustcmd*{\GLSxtrtitleshort}[1]{% \GLSxtrshort[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrheadshortpl} % Command used to display plural short form in the page header with the % first letter converted to upper case. %\changes{0.5.1}{2015-12-07}{now uses headuc attribute} % \begin{macrocode} \newcommand*{\Glsxtrheadshortpl}[1]{% \protect\NoCaseChange {% \glsifattribute{#1}{headuc}{true}% {% \GLSxtrshortpl[noindex,hyper=false]{#1}[]% }% {% \Glsxtrshortpl[noindex,hyper=false]{#1}[]% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrtitleshortpl} % Command to display plural short form of abbreviation in section title and % table of contents with the first letter converted to upper case. % \begin{macrocode} \newrobustcmd*{\Glsxtrtitleshortpl}[1]{% \Glsxtrshortpl[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSxtrtitleshortpl} %\changes{1.42}{2020-02-03}{new} % Command to display plural short form of abbreviation in section title and % table of contents in all upper case. % \begin{macrocode} \newrobustcmd*{\GLSxtrtitleshortpl}[1]{% \GLSxtrshortpl[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrheadname} % As above but for the \gloskey{name} value. %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\glsxtrheadname}[1]{% \protect\NoCaseChange {% \glsifattribute{#1}{headuc}{true}% {% \GLSname[noindex,hyper=false]{#1}[]% }% {% \glsname[noindex,hyper=false]{#1}[]% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrtitlename} % Command to display \gloskey{name} value in section title and % table of contents. %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newrobustcmd*{\glsxtrtitlename}[1]{% \glsname[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrheadname} % First letter converted to upper case %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\Glsxtrheadname}[1]{% \protect\NoCaseChange {% \glsifattribute{#1}{headuc}{true}% {% \GLSname[noindex,hyper=false]{#1}[]% }% {% \Glsname[noindex,hyper=false]{#1}[]% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrtitlename} % Command to display \gloskey{name} value in section title and % table of contents with the first letter changed to upper case. %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newrobustcmd*{\Glsxtrtitlename}[1]{% \Glsname[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSxtrtitlename} % Command to display \gloskey{name} value in section title and % table of contents in all upper case. %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \newrobustcmd*{\GLSxtrtitlename}[1]{% \GLSname[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrheadtext} % As above but for the \gloskey{text} value. %\changes{0.5.1}{2015-12-07}{now uses headuc attribute} % \begin{macrocode} \newcommand*{\glsxtrheadtext}[1]{% \protect\NoCaseChange {% \glsifattribute{#1}{headuc}{true}% {% \GLStext[noindex,hyper=false]{#1}[]% }% {% \glstext[noindex,hyper=false]{#1}[]% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrtitletext} % Command to display \gloskey{text} value in section title and % table of contents. % \begin{macrocode} \newrobustcmd*{\glsxtrtitletext}[1]{% \glstext[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % % %\begin{macro}{\Glsxtrheadtext} % First letter converted to upper case %\changes{0.5.1}{2015-12-07}{now uses headuc attribute} % \begin{macrocode} \newcommand*{\Glsxtrheadtext}[1]{% \protect\NoCaseChange {% \glsifattribute{#1}{headuc}{true}% {% \GLStext[noindex,hyper=false]{#1}[]% }% {% \Glstext[noindex,hyper=false]{#1}[]% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrtitletext} % Command to display \gloskey{text} value in section title and % table of contents with the first letter changed to upper case. % \begin{macrocode} \newrobustcmd*{\Glsxtrtitletext}[1]{% \Glstext[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSxtrtitletext} % Command to display \gloskey{text} value in section title and % table of contents in all upper case. %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \newrobustcmd*{\GLSxtrtitletext}[1]{% \GLStext[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrheadplural} % As above but for the \gloskey{plural} value. %\changes{0.5.1}{2015-12-07}{now uses headuc attribute} % \begin{macrocode} \newcommand*{\glsxtrheadplural}[1]{% \protect\NoCaseChange {% \glsifattribute{#1}{headuc}{true}% {% \GLSplural[noindex,hyper=false]{#1}[]% }% {% \glsplural[noindex,hyper=false]{#1}[]% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrtitleplural} % Command to display \gloskey{plural} value in section title and % table of contents. % \begin{macrocode} \newrobustcmd*{\glsxtrtitleplural}[1]{% \glsplural[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrheadplural} % Convert first letter to upper case. %\changes{0.5.1}{2015-12-07}{now uses headuc attribute} % \begin{macrocode} \newcommand*{\Glsxtrheadplural}[1]{% \protect\NoCaseChange {% \glsifattribute{#1}{headuc}{true}% {% \GLSplural[noindex,hyper=false]{#1}[]% }% {% \Glsplural[noindex,hyper=false]{#1}[]% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrtitleplural} % Command to display \gloskey{plural} value in section title and % table of contents with the first letter changed to upper case. % \begin{macrocode} \newrobustcmd*{\Glsxtrtitleplural}[1]{% \Glsplural[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSxtrtitleplural} %\changes{1.42}{2020-02-03}{new} % Command to display \gloskey{plural} value in section title and % table of contents in all upper case. % \begin{macrocode} \newrobustcmd*{\GLSxtrtitleplural}[1]{% \GLSplural[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrheadfirst} % As above but for the \gloskey{first} value. %\changes{0.5.1}{2015-12-07}{now uses headuc attribute} % \begin{macrocode} \newcommand*{\glsxtrheadfirst}[1]{% \protect\NoCaseChange {% \glsifattribute{#1}{headuc}{true}% {% \GLSfirst[noindex,hyper=false]{#1}[]% }% {% \glsfirst[noindex,hyper=false]{#1}[]% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrtitlefirst} % Command to display \gloskey{first} value in section title and % table of contents. % \begin{macrocode} \newrobustcmd*{\glsxtrtitlefirst}[1]{% \glsfirst[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrheadfirst} % First letter converted to upper case %\changes{0.5.1}{2015-12-07}{now uses headuc attribute} % \begin{macrocode} \newcommand*{\Glsxtrheadfirst}[1]{% \protect\NoCaseChange {% \glsifattribute{#1}{headuc}{true}% {% \GLSfirst[noindex,hyper=false]{#1}[]% }% {% \Glsfirst[noindex,hyper=false]{#1}[]% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrtitlefirst} % Command to display \gloskey{first} value in section title and % table of contents with the first letter changed to upper case. % \begin{macrocode} \newrobustcmd*{\Glsxtrtitlefirst}[1]{% \Glsfirst[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSxtrtitlefirst} %\changes{1.42}{2020-02-03}{new} % Command to display \gloskey{first} value in section title and % table of contents in all upper case. % \begin{macrocode} \newrobustcmd*{\GLSxtrtitlefirst}[1]{% \GLSfirst[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrheadfirstplural} % As above but for the \gloskey{firstplural} value. %\changes{0.5.1}{2015-12-07}{now uses headuc attribute} % \begin{macrocode} \newcommand*{\glsxtrheadfirstplural}[1]{% \protect\NoCaseChange {% \glsifattribute{#1}{headuc}{true}% {% \GLSfirstplural[noindex,hyper=false]{#1}[]% }% {% \glsfirstplural[noindex,hyper=false]{#1}[]% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrtitlefirstplural} % Command to display \gloskey{firstplural} value in section title and % table of contents. % \begin{macrocode} \newrobustcmd*{\glsxtrtitlefirstplural}[1]{% \glsfirstplural[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrheadfirstplural} % First letter converted to upper case %\changes{0.5.1}{2015-12-07}{now uses headuc attribute} % \begin{macrocode} \newcommand*{\Glsxtrheadfirstplural}[1]{% \protect\NoCaseChange {% \glsifattribute{#1}{headuc}{true}% {% \GLSfirstplural[noindex,hyper=false]{#1}[]% }% {% \Glsfirstplural[noindex,hyper=false]{#1}[]% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrtitlefirstplural} % Command to display \gloskey{first} value in section title and % table of contents with the first letter changed to upper case. % \begin{macrocode} \newrobustcmd*{\Glsxtrtitlefirstplural}[1]{% \Glsfirstplural[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSxtrtitlefirstplural} %\changes{1.42}{2020-02-03}{new} % Command to display \gloskey{first} value in section title and % table of contents in all upper case. % \begin{macrocode} \newrobustcmd*{\GLSxtrtitlefirstplural}[1]{% \GLSfirstplural[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrheadlong} % Command used to display long form in the page header. %\changes{1.02}{2016-04-25}{new} % \begin{macrocode} \newcommand*{\glsxtrheadlong}[1]{% \protect\NoCaseChange {% \glsifattribute{#1}{headuc}{true}% {% \GLSxtrlong[noindex,hyper=false]{#1}[]% }% {% \glsxtrlong[noindex,hyper=false]{#1}[]% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrtitlelong} % Command to display long form of abbreviation in section title and % table of contents. %\changes{1.02}{2016-04-25}{new} % \begin{macrocode} \newrobustcmd*{\glsxtrtitlelong}[1]{% \glsxtrlong[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrheadlongpl} % Command used to display plural long form in the page header. % If you want the text converted to upper case, this needs to be % redefined to use \cs{GLSxtrlongpl} instead. If you are using a % smallcaps style, the default fonts don't provide italic smallcaps. %\changes{1.02}{2016-04-25}{new} % \begin{macrocode} \newcommand*{\glsxtrheadlongpl}[1]{% \protect\NoCaseChange {% \glsifattribute{#1}{headuc}{true}% {% \GLSxtrlongpl[noindex,hyper=false]{#1}[]% }% {% \glsxtrlongpl[noindex,hyper=false]{#1}[]% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrtitlelongpl} % Command to display plural long form of abbreviation in section title and % table of contents. %\changes{1.02}{2016-04-25}{new} %\changes{1.03}{2016-04-27}{bug fix: changed \cs{glsxtrlong} to %\cs{glsxtrlongpl}} % \begin{macrocode} \newrobustcmd*{\glsxtrtitlelongpl}[1]{% \glsxtrlongpl[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrheadlong} % Command used to display long form in the page header with the % first letter converted to upper case. %\changes{1.02}{2016-04-25}{new} % \begin{macrocode} \newcommand*{\Glsxtrheadlong}[1]{% \protect\NoCaseChange {% \glsifattribute{#1}{headuc}{true}% {% \GLSxtrlong[noindex,hyper=false]{#1}[]% }% {% \Glsxtrlong[noindex,hyper=false]{#1}[]% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrtitlelong} % Command to display long form of abbreviation in section title and % table of contents with the first letter converted to upper case. %\changes{1.02}{2016-04-25}{new} % \begin{macrocode} \newrobustcmd*{\Glsxtrtitlelong}[1]{% \Glsxtrlong[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSxtrtitlelong} % Command to display long form of abbreviation in section title and % table of contents in all upper case. %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \newrobustcmd*{\GLSxtrtitlelong}[1]{% \GLSxtrlong[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrheadlongpl} % Command used to display plural long form in the page header with the % first letter converted to upper case. %\changes{1.02}{2016-04-25}{new} % \begin{macrocode} \newcommand*{\Glsxtrheadlongpl}[1]{% \protect\NoCaseChange {% \glsifattribute{#1}{headuc}{true}% {% \GLSxtrlongpl[noindex,hyper=false]{#1}[]% }% {% \Glsxtrlongpl[noindex,hyper=false]{#1}[]% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrtitlelongpl} % Command to display plural long form of abbreviation in section title and % table of contents with the first letter converted to upper case. %\changes{1.02}{2016-04-25}{new} % \begin{macrocode} \newrobustcmd*{\Glsxtrtitlelongpl}[1]{% \Glsxtrlongpl[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSxtrtitlelongpl} % Command to display plural long form of abbreviation in section title and % table of contents in all upper case. %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \newrobustcmd*{\GLSxtrtitlelongpl}[1]{% \GLSxtrlongpl[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrheadfull} % Command used to display full form in the page header. %\changes{1.02}{2016-04-25}{new} % \begin{macrocode} \newcommand*{\glsxtrheadfull}[1]{% \protect\NoCaseChange {% \glsifattribute{#1}{headuc}{true}% {% \GLSxtrfull[noindex,hyper=false]{#1}[]% }% {% \glsxtrfull[noindex,hyper=false]{#1}[]% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrtitlefull} % Command to display full form of abbreviation in section title and % table of contents. %\changes{1.02}{2016-04-25}{new} % \begin{macrocode} \newrobustcmd*{\glsxtrtitlefull}[1]{% \glsxtrfull[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrheadfullpl} % Command used to display plural full form in the page header. % If you want the text converted to upper case, this needs to be % redefined to use \cs{GLSxtrfullpl} instead. If you are using a % smallcaps style, the default fonts don't provide italic smallcaps. %\changes{1.02}{2016-04-25}{new} % \begin{macrocode} \newcommand*{\glsxtrheadfullpl}[1]{% \protect\NoCaseChange {% \glsifattribute{#1}{headuc}{true}% {% \GLSxtrfullpl[noindex,hyper=false]{#1}[]% }% {% \glsxtrfullpl[noindex,hyper=false]{#1}[]% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrtitlefullpl} % Command to display plural full form of abbreviation in section title and % table of contents. %\changes{1.02}{2016-04-25}{new} % \begin{macrocode} \newrobustcmd*{\glsxtrtitlefullpl}[1]{% \glsxtrfullpl[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrheadfull} % Command used to display full form in the page header with the % first letter converted to upper case. %\changes{1.02}{2016-04-25}{new} % \begin{macrocode} \newcommand*{\Glsxtrheadfull}[1]{% \protect\NoCaseChange {% \glsifattribute{#1}{headuc}{true}% {% \GLSxtrfull[noindex,hyper=false]{#1}[]% }% {% \Glsxtrfull[noindex,hyper=false]{#1}[]% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrtitlefull} % Command to display full form of abbreviation in section title and % table of contents with the first letter converted to upper case. %\changes{1.02}{2016-04-25}{new} % \begin{macrocode} \newrobustcmd*{\Glsxtrtitlefull}[1]{% \Glsxtrfull[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSxtrtitlefull} % Command to display full form of abbreviation in section title and % table of contents in all upper case. %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \newrobustcmd*{\GLSxtrtitlefull}[1]{% \GLSxtrfull[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrheadfullpl} % Command used to display plural full form in the page header with the % first letter converted to upper case. %\changes{1.02}{2016-04-25}{new} % \begin{macrocode} \newcommand*{\Glsxtrheadfullpl}[1]{% \protect\NoCaseChange {% \glsifattribute{#1}{headuc}{true}% {% \GLSxtrfullpl[noindex,hyper=false]{#1}[]% }% {% \Glsxtrfullpl[noindex,hyper=false]{#1}[]% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsxtrtitlefullpl} % Command to display plural full form of abbreviation in section title and % table of contents with the first letter converted to upper case. %\changes{1.02}{2016-04-25}{new} % \begin{macrocode} \newrobustcmd*{\Glsxtrtitlefullpl}[1]{% \Glsxtrfullpl[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSxtrtitlefullpl} % Command to display plural full form of abbreviation in section title and % table of contents in all upper case. %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \newrobustcmd*{\GLSxtrtitlefullpl}[1]{% \GLSxtrfullpl[noindex,hyper=false]{#1}[]% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsfmtshort} % Provide a way of using the formatted short form in section % headings. If \sty{hyperref} has been loaded, use % \cs{texorpdfstring} for convenience in PDF bookmarks. %\changes{0.2}{2015-11-30}{new} %\changes{0.4}{2015-12-03}{changed to use \cs{glsxtrshort}} %\changes{0.5}{2015-12-07}{changed to use \cs{glsxtrtitleshort}} %\changes{0.5}{2015-12-07}{renamed from \cs{glsentryfmtshort}} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\glsfmtshort}[1]{% \texorpdfstring {\glsxtrtitleshort{#1}}% {\glsentryshort{#1}}% } } { \newcommand*{\glsfmtshort}[1]{% \glsxtrtitleshort{#1}} } % \end{macrocode} %\end{macro} %Similarly for the plural version. %\begin{macro}{\glsfmtshortpl} %\changes{0.2}{2015-11-30}{new} %\changes{0.4}{2015-12-03}{changed to use \cs{glsxtrshortpl}} %\changes{0.5}{2015-12-07}{changed to use \cs{glsxtrtitleshortpl}} %\changes{0.5}{2015-12-07}{renamed from \cs{glsentryfmtshortpl}} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\glsfmtshortpl}[1]{% \texorpdfstring {\glsxtrtitleshortpl{#1}}% {\glsentryshortpl{#1}}% } } { \newcommand*{\glsfmtshortpl}[1]{% \glsxtrtitleshortpl{#1}} } % \end{macrocode} %\end{macro} % The case-changing version isn't suitable for PDF bookmarks, so the % PDF alternative uses the non-case-changing version. %\begin{macro}{\Glsfmtshort} % Singular form (first letter uppercase). %\changes{0.2}{2015-11-30}{new} %\changes{0.4}{2015-12-03}{changed to use \cs{Glsxtrshort}} %\changes{0.5}{2015-12-07}{changed to use \cs{Glsxtrtitleshort}} %\changes{0.5}{2015-12-07}{renamed from \cs{Glsentryfmtshort}} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\Glsfmtshort}[1]{% \texorpdfstring {\Glsxtrtitleshort{#1}}% {\glsentryshort{#1}}% } } { \newcommand*{\Glsfmtshort}[1]{% \Glsxtrtitleshort{#1}} } % \end{macrocode} %\end{macro} %\begin{macro}{\Glsfmtshortpl} %Plural form (first letter uppercase). %\changes{0.2}{2015-11-30}{new} %\changes{0.4}{2015-12-03}{changed to use \cs{glsxtrshortpl}} %\changes{0.5}{2015-12-07}{changed to use \cs{Glsxtrtitleshortpl}} %\changes{0.5}{2015-12-07}{renamed from \cs{Glsentryfmtshortpl}} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\Glsfmtshortpl}[1]{% \texorpdfstring {\Glsxtrtitleshortpl{#1}}% {\glsentryshortpl{#1}}% } } { \newcommand*{\Glsfmtshortpl}[1]{% \Glsxtrtitleshortpl{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsfmtname} %As above but for the \gloskey{name} value. %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\glsfmtname}[1]{% \texorpdfstring {\glsxtrtitlename{#1}}% {\glsentryname{#1}}% } } { \newcommand*{\glsfmtname}[1]{% \glsxtrtitlename{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsfmtname} %First letter converted to upper case. %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\Glsfmtname}[1]{% \texorpdfstring {\Glsxtrtitlename{#1}}% {\glsentryname{#1}}% } } { \newcommand*{\Glsfmtname}[1]{% \Glsxtrtitlename{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSfmtname} %All upper case. %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\GLSfmtname}[1]{% \texorpdfstring {\GLSxtrtitlename{#1}}% {\glsentryname{#1}}% } } { \newcommand*{\GLSfmtname}[1]{% \GLSxtrtitlename{#1}} } % \end{macrocode} %\end{macro} % % %\begin{macro}{\glsfmttext} %As above but for the \gloskey{text} value. %\changes{0.5}{2015-12-07}{new} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\glsfmttext}[1]{% \texorpdfstring {\glsxtrtitletext{#1}}% {\glsentrytext{#1}}% } } { \newcommand*{\glsfmttext}[1]{% \glsxtrtitletext{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsfmttext} %First letter converted to upper case. %\changes{0.5}{2015-12-07}{new} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\Glsfmttext}[1]{% \texorpdfstring {\Glsxtrtitletext{#1}}% {\glsentrytext{#1}}% } } { \newcommand*{\Glsfmttext}[1]{% \Glsxtrtitletext{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSfmttext} %All upper case. %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\GLSfmttext}[1]{% \texorpdfstring {\GLSxtrtitletext{#1}}% {\glsentrytext{#1}}% } } { \newcommand*{\GLSfmttext}[1]{% \GLSxtrtitletext{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsfmtplural} %As above but for the \gloskey{plural} value. %\changes{0.5}{2015-12-07}{new} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\glsfmtplural}[1]{% \texorpdfstring {\glsxtrtitleplural{#1}}% {\glsentryplural{#1}}% } } { \newcommand*{\glsfmtplural}[1]{% \glsxtrtitleplural{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsfmtplural} %First letter converted to upper case. %\changes{0.5}{2015-12-07}{new} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\Glsfmtplural}[1]{% \texorpdfstring {\Glsxtrtitleplural{#1}}% {\glsentryplural{#1}}% } } { \newcommand*{\Glsfmtplural}[1]{% \Glsxtrtitleplural{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSfmtplural} %All upper case. %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\GLSfmtplural}[1]{% \texorpdfstring {\GLSxtrtitleplural{#1}}% {\glsentryplural{#1}}% } } { \newcommand*{\GLSfmtplural}[1]{% \GLSxtrtitleplural{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsfmtfirst} %As above but for the \gloskey{first} value. %\changes{0.5}{2015-12-07}{new} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\glsfmtfirst}[1]{% \texorpdfstring {\glsxtrtitlefirst{#1}}% {\glsentryfirst{#1}}% } } { \newcommand*{\glsfmtfirst}[1]{% \glsxtrtitlefirst{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsfmtfirst} %First letter converted to upper case. %\changes{0.5}{2015-12-07}{new} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\Glsfmtfirst}[1]{% \texorpdfstring {\Glsxtrtitlefirst{#1}}% {\glsentryfirst{#1}}% } } { \newcommand*{\Glsfmtfirst}[1]{% \Glsxtrtitlefirst{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSfmtfirst} %All upper case. %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\GLSfmtfirst}[1]{% \texorpdfstring {\GLSxtrtitlefirst{#1}}% {\glsentryfirst{#1}}% } } { \newcommand*{\GLSfmtfirst}[1]{% \Glsxtrtitlefirst{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsfmtfirstpl} %As above but for the \gloskey{firstplural} value. %\changes{0.5}{2015-12-07}{new} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\glsfmtfirstpl}[1]{% \texorpdfstring {\glsxtrtitlefirstplural{#1}}% {\glsentryfirstplural{#1}}% } } { \newcommand*{\glsfmtfirstpl}[1]{% \glsxtrtitlefirstplural{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsfmtfirstpl} %First letter converted to upper case. %\changes{0.5}{2015-12-07}{new} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\Glsfmtfirstpl}[1]{% \texorpdfstring {\Glsxtrtitlefirstplural{#1}}% {\glsentryfirstplural{#1}}% } } { \newcommand*{\Glsfmtfirstpl}[1]{% \Glsxtrtitlefirstplural{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSfmtfirstpl} %All upper case. %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\GLSfmtfirstpl}[1]{% \texorpdfstring {\GLSxtrtitlefirstplural{#1}}% {\glsentryfirstplural{#1}}% } } { \newcommand*{\GLSfmtfirstpl}[1]{% \GLSxtrtitlefirstplural{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsfmtlong} %As above but for the \gloskey{long} value. %\changes{1.02}{2016-04-25}{new} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\glsfmtlong}[1]{% \texorpdfstring {\glsxtrtitlelong{#1}}% {\glsentrylong{#1}}% } } { \newcommand*{\glsfmtlong}[1]{% \glsxtrtitlelong{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsfmtlong} %First letter converted to upper case. %\changes{1.02}{2016-04-25}{new} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\Glsfmtlong}[1]{% \texorpdfstring {\Glsxtrtitlelong{#1}}% {\glsentrylong{#1}}% } } { \newcommand*{\Glsfmtlong}[1]{% \Glsxtrtitlelong{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSfmtlong} %All upper case. %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\GLSfmtlong}[1]{% \texorpdfstring {\GLSxtrtitlelong{#1}}% {\glsentrylong{#1}}% } } { \newcommand*{\GLSfmtlong}[1]{% \GLSxtrtitlelong{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsfmtlongpl} %As above but for the \gloskey{longplural} value. %\changes{1.02}{2016-04-25}{new} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\glsfmtlongpl}[1]{% \texorpdfstring {\glsxtrtitlelongpl{#1}}% {\glsentrylongpl{#1}}% } } { \newcommand*{\glsfmtlongpl}[1]{% \glsxtrtitlelongpl{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsfmtlongpl} %First letter converted to upper case. %\changes{1.02}{2016-04-25}{new} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\Glsfmtlongpl}[1]{% \texorpdfstring {\Glsxtrtitlelongpl{#1}}% {\glsentrylongpl{#1}}% } } { \newcommand*{\Glsfmtlongpl}[1]{% \Glsxtrtitlelongpl{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSfmtlongpl} %All upper case. %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\GLSfmtlongpl}[1]{% \texorpdfstring {\GLSxtrtitlelongpl{#1}}% {\glsentrylongpl{#1}}% } } { \newcommand*{\GLSfmtlongpl}[1]{% \GLSxtrtitlelongpl{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\glspdffmtfull} %\changes{1.42}{2020-02-03}{new} %Can't use \cs{glsxtrinlinefullformat} in PDF bookmarks as it's not %fully expandable. This command is for the PDF part of %\cs{texorpdfstring} for the full form. % \begin{macrocode} \newcommand*{\glspdffmtfull}[1]{\glsentrylong{#1} (\glsentryshort{#1})}% % \end{macrocode} %\end{macro} %\begin{macro}{\glspdffmtfullpl} %\changes{1.42}{2020-02-03}{new} %Likewise for plural. % \begin{macrocode} \newcommand*{\glspdffmtfullpl}[1]{\glsentrylongpl{#1} (\glsentryshortpl{#1})}% % \end{macrocode} %\end{macro} %\begin{macro}{\glsfmtfull} %In-line full format. %\changes{1.02}{2016-04-25}{new} %\changes{1.42}{2020-02-03}{switched pdf case to use \cs{glspdffmtfull}} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\glsfmtfull}[1]{% \texorpdfstring {\glsxtrtitlefull{#1}}% {\glspdffmtfull{#1}}% } } { \newcommand*{\glsfmtfull}[1]{% \glsxtrtitlefull{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsfmtfull} %First letter converted to upper case. %\changes{1.02}{2016-04-25}{new} %\changes{1.42}{2020-02-03}{switched pdf case to use \cs{glspdffmtfull}} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\Glsfmtfull}[1]{% \texorpdfstring {\Glsxtrtitlefull{#1}}% {\glspdffmtfull{#1}{}}% } } { \newcommand*{\Glsfmtfull}[1]{% \Glsxtrtitlefull{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSfmtfull} %All upper case. %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\GLSfmtfull}[1]{% \texorpdfstring {\GLSxtrtitlefull{#1}}% {\glspdffmtfull{#1}}% } } { \newcommand*{\GLSfmtfull}[1]{% \GLSxtrtitlefull{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsfmtfullpl} %In-line full plural format. %\changes{1.02}{2016-04-25}{new} %\changes{1.42}{2020-02-03}{switched pdf case to use \cs{glspdffmtfullpl}} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\glsfmtfullpl}[1]{% \texorpdfstring {\glsxtrtitlefullpl{#1}}% {\glspdffmtfullpl{#1}}% } } { \newcommand*{\glsfmtfullpl}[1]{% \glsxtrtitlefullpl{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\Glsfmtfullpl} %First letter converted to upper case. %\changes{1.02}{2016-04-25}{new} %\changes{1.42}{2020-02-03}{switched pdf case to use \cs{glspdffmtfullpl}} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\Glsfmtfullpl}[1]{% \texorpdfstring {\Glsxtrtitlefullpl{#1}}% {\glspdffmtfullpl{#1}{}}% } } { \newcommand*{\Glsfmtfullpl}[1]{% \Glsxtrtitlefullpl{#1}} } % \end{macrocode} %\end{macro} % %\begin{macro}{\GLSfmtfullpl} %All upper case. %\changes{1.42}{2020-02-03}{new} % \begin{macrocode} \ifdef\texorpdfstring { \newcommand*{\GLSfmtfullpl}[1]{% \texorpdfstring {\GLSxtrtitlefullpl{#1}}% {\glspdffmtfullpl{#1}{}}% } } { \newcommand*{\GLSfmtfullpl}[1]{% \GLSxtrtitlefullpl{#1}} } % \end{macrocode} %\end{macro} % %\section{Multi-Lingual Support} % Add the facility to load language modules, if they are installed, % but none are provided with this package. % %\begin{macro}{\RequireGlossariesExtraLang} %\changes{0.5.3}{2015-12-09}{new} % \begin{macrocode} \newcommand*{\RequireGlossariesExtraLang}[1]{% \@ifundefined{ver@glossariesxtr-#1.ldf}{\input{glossariesxtr-#1.ldf}}{}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\ProvidesGlossariesExtraLang} %\changes{0.5.3}{2015-12-09}{new} % \begin{macrocode} \newcommand*{\ProvidesGlossariesExtraLang}[1]{% \ProvidesFile{glossariesxtr-#1.ldf}% } % \end{macrocode} %\end{macro} % % Load any required language modules that are available. This % doesn't generate any warning if none are found, since they're not % essential. (The only command that really needs defining for the % document is \ics{abbreviationsname}, which can simply be % redefined. However, with \app{bib2gls} it might be useful to % provide custom rules for a particular locale.) % %\begin{macro}{\glsxtr@loaddialect} %The dialect label should be stored in \cs{this@dialect} %before using this command. %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \newcommand{\glsxtr@loaddialect}{% \IfTrackedLanguageFileExists{\this@dialect}% {glossariesxtr-}% prefix {.ldf}% {% \RequireGlossariesExtraLang{\CurrentTrackedTag}% }% {}% not found % \end{macrocode} % If \sty{glossaries-extra-bib2gls} has been loaded, % \cs{@glsxtrdialecthook} will check for the associated script, % otherwise it will do nothing. % \begin{macrocode} \@glsxtrdialecthook } % \end{macrocode} %\end{macro} % \begin{macrocode} \@ifpackageloaded{tracklang} {% \AnyTrackedLanguages {% \ForEachTrackedDialect{\this@dialect}{\glsxtr@loaddialect}% }% {}% } {} % \end{macrocode} % Load \sty{glossaries-extra-stylemods} if required. % \begin{macrocode} \@glsxtr@redefstyles % \end{macrocode} % and set the style: % \begin{macrocode} \@glsxtr@do@style % \end{macrocode} %\iffalse % \begin{macrocode} % % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*glossaries-extra-bib2gls.sty> % \end{macrocode} %\fi %\changes{1.27}{2018-02-26}{added glossaries-extra-bib2gls.sty} %\section{glossaries-extra-bib2gls.sty} %This package provides additional support for \app{bib2gls} and is %automatically loaded by the record option. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{glossaries-extra-bib2gls}[2020/04/01 v1.45 (NLCT)] % \end{macrocode} %Provide convenient shortcut commands for predefined glossary types. %\begin{macro}{\printunsrtacronyms} %\changes{1.40}{2019-03-31}{new} % \begin{macrocode} \ifglsacronym \providecommand*{\printunsrtacronyms}[1][]{% \printunsrtglossary[type=\acronymtype,#1]}% \fi % \end{macrocode} %\end{macro} % %\begin{macro}{\printunsrtindex} %\changes{1.40}{2019-03-31}{new} % \begin{macrocode} \ifglossaryexists{index} { \providecommand*{\printunsrtindex}[1][]{% \printunsrtglossary[type=index,#1]}% }{} % \end{macrocode} %\end{macro} % %\begin{macro}{\printunsrtsymbols} %\changes{1.40}{2019-03-31}{new} % \begin{macrocode} \ifglossaryexists{symbols} { \providecommand*{\printunsrtsymbols}[1][]{% \printunsrtglossary[type=symbols,#1]}% }{} % \end{macrocode} %\end{macro} % %\begin{macro}{\printunsrtnumbers} %\changes{1.40}{2019-03-31}{new} % \begin{macrocode} \ifglossaryexists{numbers} { \providecommand*{\printunsrtnumbers}[1][]{% \printunsrtglossary[type=numbers,#1]}% }{} % \end{macrocode} %\end{macro} % %\begin{macro}{\printunsrtabbreviations} %\changes{1.40}{2019-03-31}{new} % \begin{macrocode} \ifglossaryexists{abbreviations} { \providecommand*{\printunsrtabbreviations}[1][]{% \printunsrtglossary[type=abbreviations,#1]}% }{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsdisplaynumberlist} %\changes{1.42}{2020-02-03}{added} %Allow \cs{glsdisplaynumberlist} and make it robust. % \begin{macrocode} \renewcommand*{\glsdisplaynumberlist}[1]{% \glsdoifexists{#1}% {% {\let\bibglsdelimN\glsnumlistsep \let\bibglslastDelimN\glsnumlistlastsep \glsxtrusefield{#1}{location}% }% }% } \robustify\glsdisplaynumberlist % \end{macrocode} %\end{macro} % %\begin{macro}{\glsentrynumberlist} %\changes{1.42}{2020-02-03}{added} % \begin{macrocode} \renewcommand*{\glsentrynumberlist}[1]{\glsxtrusefield{#1}{location}} % \end{macrocode} %\end{macro} % %These are some convenient macros for use with custom rules. %\begin{macro}{\glshex} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\glshex}{\string\u} % \end{macrocode} %\end{macro} % %\begin{macro}{\glscapturedgroup} %\changes{1.31}{2018-05-09}{new} % \begin{macrocode} \newcommand*{\glscapturedgroup}{\string\$} % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrIfHasNonZeroChildCount} %\changes{1.31}{2018-05-09}{new} %For use with \app{bib2gls}'s \texttt{save-child-count} resource option. % \begin{macrocode} \newcommand*{\GlsXtrIfHasNonZeroChildCount}[3]{% \GlsXtrIfFieldNonZero{childcount}{#1}{#2}{#3}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrprovidecommand} %\changes{1.27}{2018-02-26}{new} %For use in \texttt{@preamble}, this behaves like %\cs{providecommand} in the document but like \cs{renewcommand} %in \app{bib2gls}. % \begin{macrocode} \newcommand*{\glsxtrprovidecommand}{\providecommand} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsrenewcommand} %\changes{1.37}{2018-11-30}{new} %Like \cs{renewcommand} but only generates a warning rather than an %error if the command isn't defined. % \begin{macrocode} \newcommand*{\glsrenewcommand}{\@star@or@long\glsxtr@renewcommand} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@renewcommand} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand*{\glsxtr@renewcommand}[1]{% \begingroup \escapechar\m@ne\xdef\@gtempa{{\string#1}}\endgroup \expandafter\@ifundefined\@gtempa {% \GlossariesExtraWarning{can't redefine \noexpand#1(not already defined)}% }% \relax \relax \let\@ifdefinable\@rc@ifdefinable \new@command#1% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtr@wrglossarylocation} %\changes{1.29}{2018-04-09}{new} %For use with \pkgopt{indexcounter} and \app{bib2gls}. % \begin{macrocode} \newcommand*{\glsxtr@wrglossarylocation}[2]{#1} % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrIndexCounterLink} %\changes{1.29}{2018-04-09}{new} %\begin{definition} %\cs{GlsXtrIndexCounterLink}\marg{text}\marg{label} %\end{definition} %For use with \pkgopt{indexcounter} and \app{bib2gls}. % \begin{macrocode} \ifdef\hyperref {% \newcommand*{\GlsXtrIndexCounterLink}[2]{% \glsxtrifhasfield{indexcounter}{#2}% {\hyperref[wrglossary.\glscurrentfieldvalue]{#1}}% {#1}% } } { \newcommand*{\GlsXtrIndexCounterLink}[2]{#1} } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrDualField} %\changes{1.30}{2018-04-25}{new} %\begin{definition} %\cs{GlsXtrDualField} %\end{definition} %The internal field used to store the dual label. The %\texttt{dual-field} defaults to \texttt{dual} if no value is %supplied so that's used as the default. % \begin{macrocode} \newcommand*{\GlsXtrDualField}{dual} % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrDualBackLink} %\changes{1.30}{2018-04-25}{new} %\begin{definition} %\cs{GlsXtrDualBackLink}\marg{text}\marg{label} %\end{definition} %Adds a hyperlink to the dual entry. % \begin{macrocode} \newcommand*{\GlsXtrDualBackLink}[2]{% \glsxtrifhasfield{\GlsXtrDualField}{#2}% {\glshyperlink[#1]{\glscurrentfieldvalue}}% {#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrBibTeXEntryAliases} %\changes{1.29}{2018-04-09}{new} %Convenient shortcut for use with \texttt{entry-type-aliases} to %alias standard \BibTeX\ entry types to \texttt{@bibtexentry}. % \begin{macrocode} \newcommand*{\GlsXtrBibTeXEntryAliases}{% article=bibtexentry, book=bibtexentry, booklet=bibtexentry, conference=bibtexentry, inbook=bibtexentry, incollection=bibtexentry, inproceedings=bibtexentry, manual=bibtexentry, mastersthesis=bibtexentry, misc=bibtexentry, phdthesis=bibtexentry, proceedings=bibtexentry, techreport=bibtexentry, unpublished=bibtexentry } % \end{macrocode} %\end{macro} % %\begin{macro}{\GlsXtrProvideBibTeXFields} %\changes{1.29}{2018-04-09}{new} %Convenient shortcut to define the standard \BibTeX\ fields. % \begin{macrocode} \newcommand*{\GlsXtrProvideBibTeXFields}{% \glsaddstoragekey{address}{}{\glsxtrbibaddress}% \glsaddstoragekey{author}{}{\glsxtrbibauthor}% \glsaddstoragekey{booktitle}{}{\glsxtrbibbooktitle}% \glsaddstoragekey{chapter}{}{\glsxtrbibchapter}% \glsaddstoragekey{edition}{}{\glsxtrbibedition}% \glsaddstoragekey{howpublished}{}{\glsxtrbibhowpublished}% \glsaddstoragekey{institution}{}{\glsxtrbibinstitution}% \glsaddstoragekey{journal}{}{\glsxtrbibjournal}% \glsaddstoragekey{month}{}{\glsxtrbibmonth}% \glsaddstoragekey{note}{}{\glsxtrbibnote}% \glsaddstoragekey{number}{}{\glsxtrbibnumber}% \glsaddstoragekey{organization}{}{\glsxtrbiborganization}% \glsaddstoragekey{pages}{}{\glsxtrbibpages}% \glsaddstoragekey{publisher}{}{\glsxtrbibpublisher}% \glsaddstoragekey{school}{}{\glsxtrbibschool}% \glsaddstoragekey{series}{}{\glsxtrbibseries}% \glsaddstoragekey{title}{}{\glsxtrbibtitle}% \glsaddstoragekey{bibtextype}{}{\glsxtrbibtype}% \glsaddstoragekey{volume}{}{\glsxtrbibvolume}% } % \end{macrocode} %\end{macro} % %Multiple supplementary references are only supported with %\app{bib2gls}. %\begin{macro}{\glsxtrmultisupplocation} %\changes{1.36}{2018-08-18}{new} %This is like \cs{glsxtrsupphypernumber} but the second argument is %the external file name (which isn't obtained from the %\catattr{externallocation} attribute). The third argument is the %formatting (encap) control sequence \emph{name}. This is ignored by %default, but is set by \app{bib2gls} to the original encap in case %it's required. % \begin{macrocode} \newcommand*{\glsxtrmultisupplocation}[3]{% {% \def\glsxtrsupplocationurl{#2}% \glshypernumber{#1}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrdisplaysupploc} %\changes{1.36}{2018-08-18}{new} %\begin{definition} %\cs{glsxtrdisplaysupploc}\marg{prefix}\marg{counter}\marg{format}\marg{src}\marg{location} %\end{definition} %This is like \cs{glsnoidxdisplayloc} but is used for supplementary %locations and so requires an extra argument. % \begin{macrocode} \newcommand*\glsxtrdisplaysupploc[5]{% \setentrycounter[#1]{#2}% \glsxtrmultisupplocation{#5}{#4}{#3}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrdisplaylocnameref} %\changes{1.37}{2018-11-30}{new} %\cs{glsxtrdisplaylocnameref}\marg{prefix}\marg{counter}\marg{format}\marg{location}\marg{name}\marg{href}\marg{hcounter}\marg{external %file} %Used with the \sty[nameref]{record} package option. The \meta{href} %argument was obtained from \cs{@currentHref} and the %\meta{hcounter} argument was obtained from \cs{theHentrycounter}, %which is more reliable. %If \sty{hyperref} hasn't been loaded, this just behaves like \cs{glsnoidxdisplayloc}. % \begin{macrocode} \ifundef\hyperlink { \newcommand*{\glsxtrdisplaylocnameref}[8]{% \glsnoidxdisplayloc{#1}{#2}{#3}{#4}% } } { % \end{macrocode} % Default action uses \meta{hcounter}. Equations and pages typically don't % have a title, so check the counter name (otherwise the title may % section or chapter title, which may be confusing). As from v1.42, % this now checks if the control sequence % \cs{glsxtr\meta{counter}locfmt} is defined. % \begin{macrocode} \newcommand*{\glsxtrdisplaylocnameref}[8]{% \ifcsdef{glsxtr#2locfmt}% {\glsxtrnamereflink{#3}{\csuse{glsxtr#2locfmt}{#4}{#5}}{#2.#7}{#8}}% {% \ifstrempty{#5}% {% % \end{macrocode} %No title, so just use the location as the link text. % \begin{macrocode} \glsxtrnamereflink{#3}{#4}{#2.#7}{#8}% }% {% \ifstrequal{#2}{page}% {\glsxtrnamereflink{#3}{#4}{#2.#7}{#8}}% {\glsxtrnamereflink{#3}{#5}{#2.#7}{#8}}% }% }% } } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrequationlocfmt} %\changes{1.42}{2020-02-03}{new} %\begin{definition} %\cs{glsxtrequationlocfmt}\marg{location}\marg{title} %\end{definition} % \begin{macrocode} \newcommand*{\glsxtrequationlocfmt}[2]{(#1)} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrnamereflink} %\changes{1.37}{2018-11-30}{new} %\begin{definition} %\cs{glsxtrfmtnamereflink}\marg{format}\marg{title}\marg{href}\marg{external %file} %\end{definition} % \begin{macrocode} \newcommand*{\glsxtrnamereflink}[4]{% % \end{macrocode} %Locally change \cs{glshypernumber} to \cs{@firstofone} to %remove the normal location hyperlink. % \begin{macrocode} \begingroup \let\glshypernumber\@firstofone % \end{macrocode} %If the \meta{external file} argument is empty, an internal link is used, %otherwise an external one is needed. % \begin{macrocode} \ifstrempty{#4}% {\glsxtrfmtinternalnameref{#3}{#1}{#2}}% {\glsxtrfmtexternalnameref{#3}{#1}{#2}{#4}}% \endgroup } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrnameloclink} %\changes{1.37}{2018-11-30}{new} %\begin{definition} %\cs{glsxtrnamerefloclink}\marg{prefix}\marg{counter}\marg{format}\marg{location}\marg{text}\marg{external %file} %\end{definition} %Like \cs{@gls@numberlink}, this creates a hyperlink to the %target obtained from the prefix, counter and location but uses %\meta{text} as the hyperlink text. As with regular indexing, this %will fail if the target name can't be formed by prefixing the %location value. % \begin{macrocode} \newcommand{\glsxtrnameloclink}[6]{% \begingroup \setentrycounter[#1]{#2}% \def\glsxtr@locationhypertext{#5}% \let\glshypernumber\@firstofone \def\@glsnumberformat{#3}% \def\glsxtrsupplocationurl{#6}% \toks@={}% \@glsxtr@bibgls@removespaces#4 \@nil \endgroup } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@bibgls@removespaces} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \def\@glsxtr@bibgls@removespaces#1 #2\@nil{% \toks@=\expandafter{\the\toks@#1}% \ifx\\#2\\% \edef\x{\the\toks@}% \ifx\x\empty \else \protected@edef\x{\glsentrycounter\@glo@counterprefix\the\toks@}% \ifdefvoid\glsxtrsupplocationurl {% \expandafter\glsxtrfmtinternalnameref\expandafter{\x}% {\@glsnumberformat}{\glsxtr@locationhypertext}% }% {% \expandafter\glsxtrfmtexternalnameref\expandafter{\x}% {\@glsnumberformat}{\glsxtr@locationhypertext}{\glsxtrsupplocationurl}% }% \fi \else \@gls@ReturnAfterFi{% \@glsxtr@bibgls@removespaces#2\@nil }% \fi } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrfmtinternalnameref} %\changes{1.37}{2018-11-30}{new} %\begin{definition} %\cs{glsxtrfmtinternalnameloc}\marg{target}\marg{format}\marg{title} %\end{definition} % % \begin{macrocode} \newcommand*{\glsxtrfmtinternalnameref}[3]{% \csuse{#2}{\glsdohyperlink{#1}{#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrfmtexternalnameref} %\changes{1.37}{2018-11-30}{new} %\begin{definition} %\cs{glsxtrfmtexternalnameloc}\marg{target}\marg{format}\marg{title}\marg{file} %\end{definition} % \begin{macrocode} \newcommand*{\glsxtrfmtexternalnameref}[4]{% \csuse{#2}{\hyperref{#4}{}{#1}{#3}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrSetWidest} %\changes{1.37}{2018-11-30}{new} %\begin{definition} %\cs{glsxtrSetWidest}\marg{type}\marg{level}\marg{text} %\end{definition} %As from \gls{bib2gls} v1.8, this is used by the \texttt{set-widest} %resource option for the \glostyle{alttree} and the styles %provided by the \sty{glossary-longextra} package. % \begin{macrocode} \newcommand*{\glsxtrSetWidest}[3]{% % \end{macrocode} %Check which style options have been provided. (The style packages %may not have been loaded.) % \begin{macrocode} \ifdef\glsupdatewidest {% \ifdef\glslongextraUpdateWidest {% % \end{macrocode} %Relevant style packages all loaded. %If the \meta{type} has been given, append to glossary preamble. % \begin{macrocode} \ifstrempty{#1} {% \glsupdatewidest[#2]{#3}% \ifnum#2=0\relax \glslongextraUpdateWidest{#3}% \else \glslongextraUpdateWidestChild{#2}{#3}% \fi }% {% \apptoglossarypreamble[#1]{\glsupdatewidest[#2]{#3}}% \ifnum#2=0\relax \apptoglossarypreamble[#1]{\glslongextraUpdateWidest{#3}}% \else \apptoglossarypreamble[#1]{\glslongextraUpdateWidestChild{#2}{#3}}% \fi }% }% {% % \end{macrocode} %Only \glostyle{alttree}. % \begin{macrocode} \ifstrempty{#1} {% \glsupdatewidest[#2]{#3}% }% {% \apptoglossarypreamble[#1]{\glsupdatewidest[#2]{#3}}% }% }% }% {% % \end{macrocode} %\cs{glsupdatewidest} hasn't been defined. This could just mean %that the \sty{glossaries-extra-stylemods} package hasn't been %loaded. % \begin{macrocode} \ifdef\glssetwidest {% \ifdef\glslongextraUpdateWidest {% % \end{macrocode} %Relevant \sty{glossary-tree} and \sty{glossary-longextra} have been loaded. %If the \meta{type} has been given, append to glossary preamble. % \begin{macrocode} \ifstrempty{#1} {% \glssetwidest[#2]{#3}% \ifnum#2=0\relax \glslongextraUpdateWidest{#3}% \else \glslongextraUpdateWidestChild{#2}{#3}% \fi }% {% \apptoglossarypreamble[#1]{\glssetwidest[#2]{#3}}% \ifnum#2=0\relax \apptoglossarypreamble[#1]{\glslongextraUpdateWidest{#3}}% \else \apptoglossarypreamble[#1]{\glslongextraUpdateWidestChild{#2}{#3}}% \fi }% }% {% % \end{macrocode} %Only \glostyle{alttree}. % \begin{macrocode} \ifstrempty{#1} {% \glssetwidest[#2]{#3}% }% {% \apptoglossarypreamble[#1]{\glssetwidest[#2]{#3}}% }% }% }% {% \ifdef\glslongextraUpdateWidest {% % \end{macrocode} %\sty{glossary-longextra} has been loaded. % \begin{macrocode} \ifstrempty{#1} {% \ifnum#2=0\relax \glslongextraUpdateWidest{#3}% \else \glslongextraUpdateWidestChild{#2}{#3}% \fi }% {% \ifnum#2=0\relax \apptoglossarypreamble[#1]{\glslongextraUpdateWidest{#3}}% \else \apptoglossarypreamble[#1]{\glslongextraUpdateWidestChild{#2}{#3}}% \fi }% }% % \end{macrocode} %Neither \sty{glossary-tree} nor \sty{glossary-longextra} have been %loaded. Do nothing. % \begin{macrocode} {}% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrSetWidestFallback} %\changes{1.37}{2018-11-30}{new} %\begin{definition} %\cs{glsxtrSetWidestFallback}\marg{max depth}\marg{list} %\end{definition} %Used when \gls{bib2gls} can't determine the widest name. %The \meta{list} argument is a comma-separated list of glossary %labels. The \meta{max depth} refers to the maximum hierarchical %depth. This will either be 0 (only top-level entries) or 2 %(up to two child-levels). % \begin{macrocode} \newcommand*{\glsxtrSetWidestFallback}[2]{% \ifnum#1=0\relax \ifdef\glsFindWidestTopLevelName {% \glsFindWidestTopLevelName[#2]% }% {% \GlossariesExtraWarning{You need stylemods={tree} to provide a fallback for set-widest}% }% \else \ifdef\glsFindWidestLevelTwo {% \glsFindWidestLevelTwo[#2]% \ifdef\glslongextraUpdateWidestChild {% \glslongextraUpdateWidestChild{#1}{\csuse{@glswidestnamei}}% \glslongextraUpdateWidestChild{#1}{\csuse{@glswidestnameii}}% }% {}% }% {% \GlossariesExtraWarning{You need stylemods={tree} to provide a fallback for set-widest}% }% \fi } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@labelprefixes} %\changes{1.37}{2018-11-30}{new} %List of label prefixes. % \begin{macrocode} \newcommand*{\@glsxtr@labelprefixes}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrclearlabelprefixes} %\changes{1.37}{2018-11-30}{new} %List of label prefixes. % \begin{macrocode} \newcommand*{\glsxtrclearlabelprefixes}{% \renewcommand*{\@glsxtr@labelprefixes}{}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtraddlabelprefix} %\changes{1.37}{2018-11-30}{new} %Add prefix to the list. %These should be added in the order of precedence with the last one %as a fallback. This doesn't check against %duplicates as it may be useful to replicate a prefix at the end as %the fallback. % \begin{macrocode} \newcommand*{\glsxtraddlabelprefix}[1]{% \ifstrempty{#1}% {\glsxtraddlabelprefix{\empty}}% {% \ifdefempty\@glsxtr@labelprefixes {\def\@glsxtr@labelprefixes{#1}}% {\appto\@glsxtr@labelprefixes{,#1}}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrprependlabelprefix} %\changes{1.37}{2018-11-30}{new} %Inserts at the start of the list. % \begin{macrocode} \newcommand*{\glsxtrprependlabelprefix}[1]{% \ifstrempty{#1}% {\glsxtrprependlabelprefix{\empty}}% {% \ifdefempty\@glsxtr@labelprefixes {\def\@glsxtr@labelprefixes{#1}}% {\preto\@glsxtr@labelprefixes{#1,}}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrifinlabelprefixlist} %\changes{1.37}{2018-11-30}{new} %\begin{definition} %\cs{glsxtrifinlabelprefixlist}\marg{prefix}\marg{true}\marg{false} %\end{definition} %Test if the given prefix is in the list. % \begin{macrocode} \newcommand*{\glsxtrifinlabelprefixlist}[3]{% \ifstrempty{#1}% {\glsxtrifinlabelprefixlist{\empty}{#2}{#3}}% {% \DTLifinlist{#1}{\@glsxtr@labelprefixes}{#2}{#3}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@prefixlabellist} %\changes{1.37}{2018-11-30}{new} %This is provided for the benefit of \gls{bib2gls}. It's possible %that the user may add more prefixes after the start of the %document, but that can lead to inconsistencies. The final element %of the list (the fallback) is the only prefix of interest for \gls{bib2gls}. % \begin{macrocode} \AtBeginDocument{% \protected@write\@auxout{}{\string\providecommand{\string\@glsxtr@prefixlabellist}[1]{}}% \protected@write\@auxout{}{\string\@glsxtr@prefixlabellist{\@glsxtr@labelprefixes}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@get@prefixedlabel} %\changes{1.37}{2018-11-30}{new} %Iterate through all the prefixes and find the first %prefix and label combination that exists. If none found, this could %mean that it's the first \LaTeX\ run, so the last prefix in the %list needs to be the fallback one. Grouping is used in case %of a nested for loop. % \begin{macrocode} \newcommand*{\@glsxtr@get@prefixedlabel}[1]{% \begingroup % \end{macrocode} %Initialise to the unprefixed label in the event that the list is %empty. % \begin{macrocode} \edef\@gls@thislabel{#1}% \@for\@glsxtr@prefix:=\@glsxtr@labelprefixes\do {% \edef\@gls@thislabel{\@glsxtr@prefix#1}% \ifglsentryexists{\@gls@thislabel}{\@endfortrue}{}% }% \edef\x{\endgroup\noexpand\def\noexpand\@gls@thislabel{\@gls@thislabel}}\x } % \end{macrocode} %\end{macro} % %\begin{macro}{\dgls} %\changes{1.37}{2018-11-30}{new} %Like \cs{gls} but tries the prefixes. (Can't use \cs{pgls} as %that's provided by \sty{glossaries-prefix}.) Since this command %is designed for \app{bib2gls}'s dual entry system, the \qt{d} %stands for \qt{dual}. % \begin{macrocode} \newrobustcmd*{\dgls}{\@gls@hyp@opt\@dgls} % \end{macrocode} %\end{macro} % %\begin{macro}{\@dgls} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand*{\@dgls}[2][]{% \@glsxtr@get@prefixedlabel{#2}% \new@ifnextchar[{\@gls@{#1}{\@gls@thislabel}}{\@gls@{#1}{\@gls@thislabel}[]}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\dglspl} % \begin{macrocode} \newrobustcmd*{\dglspl}{\@gls@hyp@opt\@dglspl} % \end{macrocode} %\end{macro} % %\begin{macro}{\@dglspl} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand*{\@dglspl}[2][]{% \@glsxtr@get@prefixedlabel{#2}% \new@ifnextchar[{\@glspl@{#1}{\@gls@thislabel}}{\@glspl@{#1}{\@gls@thislabel}[]}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\dGls} % \begin{macrocode} \newrobustcmd*{\dGls}{\@gls@hyp@opt\@dGls} % \end{macrocode} %\end{macro} % %\begin{macro}{\@dGls} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand*{\@dGls}[2][]{% \@glsxtr@get@prefixedlabel{#2}% \new@ifnextchar[{\@Gls@{#1}{\@gls@thislabel}}{\@Gls@{#1}{\@gls@thislabel}[]}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\dGlspl} % \begin{macrocode} \newrobustcmd*{\dGlspl}{\@gls@hyp@opt\@dGlspl} % \end{macrocode} %\end{macro} % %\begin{macro}{\@dGlspl} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand*{\@dGlspl}[2][]{% \@glsxtr@get@prefixedlabel{#2}% \new@ifnextchar[{\@Glspl@{#1}{\@gls@thislabel}}{\@Glspl@{#1}{\@gls@thislabel}[]}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\dGLS} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newrobustcmd*{\dGLS}{\@gls@hyp@opt\@dGLS} % \end{macrocode} %\end{macro} % %\begin{macro}{\@dGLS} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand*{\@dGLS}[2][]{% \@glsxtr@get@prefixedlabel{#2}% \new@ifnextchar[{\@GLS@{#1}{\@gls@thislabel}}{\@GLS@{#1}{\@gls@thislabel}[]}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\dGLSpl} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newrobustcmd*{\dGLSpl}{\@gls@hyp@opt\@dGLSpl} % \end{macrocode} %\end{macro} % %\begin{macro}{\@dGLSpl} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand*{\@dGLSpl}[2][]{% \@glsxtr@get@prefixedlabel{#2}% \new@ifnextchar[{\@GLSpl@{#1}{\@gls@thislabel}}{\@GLSpl@{#1}{\@gls@thislabel}[]}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\dglslink} %\changes{1.37}{2018-11-30}{new} %Like \cs{glslink} but tries the prefixes. % \begin{macrocode} \newrobustcmd*{\dglslink}[3][]{% \@glsxtr@get@prefixedlabel{#2}% \glslink[#1]{\@gls@thislabel}{#3}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\dglsdisp} %\changes{1.37}{2018-11-30}{new} %Like \cs{glsdisp} but tries the prefixes. % \begin{macrocode} \newrobustcmd*{\dglsdisp}[3][]{% \@glsxtr@get@prefixedlabel{#2}% \glsdisp[#1]{\@gls@thislabel}{#3}% } % \end{macrocode} %\end{macro} % %Provide missing Greek letters for use in maths mode. %These commands are recognised by \app{bib2gls} and will be mapped to the %Mathematical Greek Italic letters. This ensures that the Greek %letters that have the same shape as Latin letters are kept %with the other mathematical Greek letters for sorting purposes. %The \LaTeX\ version of these commands (provided here) use an upright font %for capitals and italic for lower case to provide a better match %with the other Greek symbols provided by the kernel. % %\begin{macro}{\Alpha} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Alpha}{\mathrm{A}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Beta} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Beta}{\mathrm{B}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Epsilon} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Epsilon}{\mathrm{E}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Zeta} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Zeta}{\mathrm{Z}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Eta} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Eta}{\mathrm{H}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Iota} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Iota}{\mathrm{I}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Kappa} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Kappa}{\mathrm{K}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Mu} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Mu}{\mathrm{M}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Nu} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Nu}{\mathrm{N}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Omicron} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Omicron}{\mathrm{O}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Rho} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Rho}{\mathrm{P}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Tau} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Tau}{\mathrm{T}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Chi} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Chi}{\mathrm{X}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Digamma} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Digamma}{\mathrm{F}} % \end{macrocode} %\end{macro} % %\begin{macro}{\omicron} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\omicron}{\mathit{o}} % \end{macrocode} %\end{macro} % %Provide corresponding upright characters if \sty{upgreek} has been %loaded. (The upper case characters are the same as above.) % \begin{macrocode} \@ifpackageloaded{upgreek}% { % \end{macrocode} %\begin{macro}{\Upalpha} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Upalpha}{\mathrm{A}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Upbeta} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Upbeta}{\mathrm{B}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Upepsilon} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Upepsilon}{\mathrm{E}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Upzeta} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Upzeta}{\mathrm{Z}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Upeta} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Upeta}{\mathrm{H}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Upiota} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Upiota}{\mathrm{I}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Upkappa} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Upkappa}{\mathrm{K}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Upmu} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Upmu}{\mathrm{M}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Upnu} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Upnu}{\mathrm{N}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Upomicron} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Upomicron}{\mathrm{O}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Uprho} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Uprho}{\mathrm{P}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Uptau} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Uptau}{\mathrm{T}} % \end{macrocode} %\end{macro} % %\begin{macro}{\Upchi} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\Upchi}{\mathrm{X}} % \end{macrocode} %\end{macro} % %\begin{macro}{\upomicron} %\changes{1.27}{2018-02-26}{new} % \begin{macrocode} \providecommand*{\upomicron}{\mathrm{o}} % \end{macrocode} %\end{macro} % % \begin{macrocode} }% {}% upgreek.sty not loaded % \end{macrocode} % %This package provides some basic rules, but it's not intended for %complete coverage of all locales. The CLDR should provide the %appropriate locale-sensitive rules. These macros are primarily to %help construct custom rules to include, for example, Greek maths symbols %mixed with Latin. For the full rule syntax, see the Java API for %\href{https://docs.oracle.com/javase/8/docs/api/java/text/RuleBasedCollator.html}{RuleBaseCollator} % %If you want to provide a rule-block for a particular locale to %allow for customization within that locale, create a file called %\texttt{glossariesxtr-\meta{tag}.ldf} (where \meta{tag} identifies %the locale) and add similar commands. See the description %of \cs{IfTrackedLanguageFileExists} in the \sty{tracklang} manual %for the allowed forms of \meta{tag}. The simplest is to just use %the root language label or ISO code. The file will then be automatically loaded %by \styfmt{glossaries-extra} if the document has support for that %language. % %When combining these blocks of rules, remember to separate them %with the appropriate character. For example: %\begin{verbatim} %sort-rule={\glsxtrcontrolrules % ;\glsxtrspacerules % ;\glsxtrnonprintablerules % ;\glsxtrcombiningdiacriticrules % ,\glsxtrhyphenrules % <\glsxtrgeneralpuncrules % <\glsxtrdigitrules % <\glsxtrfractionrules % <\glsxtrGeneralLatinIVrules % <\glsxtrMathItalicGreekIrules %} %\end{verbatim} % %\begin{macro}{\glsxtrcontrolrules} %\changes{1.27}{2018-02-26}{new} %These are control characters that are usually placed at the start %of a rule in the `ignored characters' section. These control %characters are unlikely to appear in any entry fields but are %provided for completeness. %\cs{string} is used for punctuation characters in case they've been %made active. % \begin{macrocode} \newcommand*{\glsxtrcontrolrules}{% \string'\glshex 200B\string'\string=\glshex 200C\string=\glshex 200D \string=\glshex 200E\string=\glshex 200F\string=\glshex 0000\string=\glshex 0001 \string=\glshex 0002\string=\glshex 0003\string=\glshex 0004\string=\glshex 0005 \string=\glshex 0006\string=\glshex 0007\string=\glshex 0008 \string=\string'\glshex 0009\string'\string=\string'\glshex 000B\string' \string=\glshex 000E\string=\glshex 000F\string=\string'\glshex 0010\string'\string=\glshex 0011 \string=\glshex 0012\string=\glshex 0013\string=\glshex 0014\string=\glshex 0015 \string=\glshex 0016\string=\glshex 0017\string=\glshex 0018\string=\glshex 0019 \string=\glshex 001A\string=\glshex 001B\string=\glshex 001C\string=\glshex 001D \string=\glshex 001E\string=\glshex 001F\string=\glshex 007F\string=\glshex 0080 \string=\glshex 0081\string=\glshex 0082\string=\glshex 0083\string=\glshex 0084 \string=\glshex 0085\string=\glshex 0086\string=\glshex 0087\string=\glshex 0088 \string=\glshex 0089\string=\glshex 008A\string=\glshex 008B\string=\glshex 008C \string=\glshex 008D\string=\glshex 008E\string=\glshex 008F\string=\glshex 0090 \string=\glshex 0091\string=\glshex 0092\string=\glshex 0093\string=\glshex 0094 \string=\glshex 0095\string=\glshex 0096\string=\glshex 0097\string=\glshex 0098 \string=\glshex 0099\string=\glshex 009A\string=\glshex 009B\string=\glshex 009C \string=\glshex 009D\string=\glshex 009E\string=\glshex 009F } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrspacerules} %\changes{1.27}{2018-02-26}{new} %These are space characters. % \begin{macrocode} \newcommand*{\glsxtrspacerules}{% \string' \string'\string; \string'\glshex 00A0\string'\string; \string'\glshex 2000\string'\string; \string'\glshex 2001\string'\string; \string'\glshex 2002\string'\string; \string'\glshex 2003\string'\string; \string'\glshex 2004\string'\string; \string'\glshex 2005\string'\string; \string'\glshex 2006\string'\string; \string'\glshex 2007\string'\string; \string'\glshex 2008\string'\string; \string'\glshex 2009\string'\string; \string'\glshex 200A\string'\string; \string'\glshex 3000\string' } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrnonprintablerules} %\changes{1.27}{2018-02-26}{new} %These are non-printable characters (BOM, tabs, line feed and carriage %return). % \begin{macrocode} \newcommand*{\glsxtrnonprintablerules}{% \string'\glshex FEFF\string'\string; \string'\glshex 000A\string'\string; \string'\glshex 0009\string'\string; \string'\glshex 000C\string'\string; \string'\glshex 000B\string' } % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrcombiningdiacriticrules} %\changes{1.27}{2018-02-26}{new} %Combining diacritic marks. This is split into multiple macros. % \begin{macrocode} \newcommand*{\glsxtrcombiningdiacriticrules}{% \glsxtrcombiningdiacriticIrules\string; \glsxtrcombiningdiacriticIIrules\string; \glsxtrcombiningdiacriticIIIrules\string; \glsxtrcombiningdiacriticIVrules } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrcombiningdiacriticIrules} %\changes{1.27}{2018-02-26}{new} %First set of combining diacritic marks. % \begin{macrocode} \newcommand*{\glsxtrcombiningdiacriticIrules}{% \glshex 0301\string;% combining acute \glshex 0300\string;% combining grave \glshex 0306\string;% combining breve \glshex 0302\string;% combining circumflex \glshex 030C\string;% combining caron \glshex 030A\string;% combining ring \glshex 030D\string;% combining vertical line above \glshex 0308\string;% combining diaeresis \glshex 030B\string;% combining double acute \glshex 0303\string;% combining tilde \glshex 0307\string;% combining dot above \glshex 0304% combining macron } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrcombiningdiacriticIIrules} %\changes{1.27}{2018-02-26}{new} %Second set of combining diacritic marks. % \begin{macrocode} \newcommand*{\glsxtrcombiningdiacriticIIrules}{% \glshex 0337\string;% combining short solidus overlay \glshex 0327\string;% combining cedilla \glshex 0328\string;% combining ogonek \glshex 0323\string;% combining dot below \glshex 0332\string;% combining low line \glshex 0305\string;% combining overline \glshex 0309\string;% combining hook above \glshex 030E\string;% combining double vertical line above \glshex 030F\string;% combining double grave accent \glshex 0310\string;% combining candrabindu \glshex 0311\string;% combining inverted breve \glshex 0312\string;% combining turned comma above \glshex 0313\string;% combining comma above \glshex 0314\string;% combining reversed comma above \glshex 0315\string;% combining comma above right \glshex 0316\string;% combining grave accent below \glshex 0317% combining acute accent below } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrcombiningdiacriticIIIrules} %\changes{1.27}{2018-02-26}{new} %Third set of combining diacritic marks. % \begin{macrocode} \newcommand*{\glsxtrcombiningdiacriticIIIrules}{% \glshex 0318\string;% combining left tack below \glshex 0319\string;% combining right tack below \glshex 031A\string;% combining left angle above \glshex 031B\string;% combining horn \glshex 031C\string;% combining left half ring below \glshex 031D\string;% combining up tack below \glshex 031E\string;% combining down tack below \glshex 031F\string;% combining plus sign below \glshex 0320\string;% combining minus sign below \glshex 0321\string;% combining palatalized hook below \glshex 0322\string;% combining retroflex hook below \glshex 0324\string;% combining diaresis below \glshex 0325\string;% combining ring below \glshex 0326\string;% combining comma below \glshex 0329\string;% combining vertical line below \glshex 032A\string;% combining bridge below \glshex 032B\string;% combining inverted double arch below \glshex 032C\string;% combining caron below \glshex 032D\string;% combining circumflex accent below \glshex 032E\string;% combining breve below \glshex 032F\string;% combining inverted breve below \glshex 0330\string;% combining tilde below \glshex 0331\string;% combining macron below \glshex 0333\string;% combining double low line \glshex 0334\string;% combining tilde overlay \glshex 0335\string;% combining short stroke overlay \glshex 0336\string;% combining long stroke overlay \glshex 0338\string;% combining long solidus overlay \glshex 0339\string;% combining combining right half ring below \glshex 033A\string;% combining inverted bridge below \glshex 033B\string;% combining square below \glshex 033C\string;% combining seagull below \glshex 033D\string;% combining x above \glshex 033E\string;% combining vertical tilde \glshex 033F\string;% combining double overline \glshex 0342\string;% combining Greek perispomeni \glshex 0344\string;% combining Greek dialytika tonos \glshex 0345\string;% combining Greek ypogegrammeni \glshex 0360\string;% combining double tilde \glshex 0361\string;% combining double inverted breve \glshex 0483\string;% combining Cyrillic titlo \glshex 0484\string;% combining Cyrillic palatalization \glshex 0485\string;% combining Cyrillic dasia pneumata \glshex 0486% combining Cyrillic psili pneumata } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrcombiningdiacriticIVrules} %\changes{1.27}{2018-02-26}{new} %Fourth set of combining diacritic marks. % \begin{macrocode} \newcommand*{\glsxtrcombiningdiacriticIVrules}{% \glshex 20D0\string;% combining left harpoon above \glshex 20D1\string;% combining right harpoon above \glshex 20D2\string;% combining long vertical line overlay \glshex 20D3\string;% combining short vertical line overlay \glshex 20D4\string;% combining anticlockwise arrow above \glshex 20D5\string;% combining clockwise arrow above \glshex 20D6\string;% combining left arrow above \glshex 20D7\string;% combining right arrow above \glshex 20D8\string;% combining ring overlay \glshex 20D9\string;% combining clockwise ring overlay \glshex 20DA\string;% combining anticlockwise ring overlay \glshex 20DB\string;% combining three dots above \glshex 20DC\string;% combining four dots above \glshex 20DD\string;% combining enclosing circle \glshex 20DE\string;% combining enclosing square \glshex 20DF\string;% combining enclosing diamond \glshex 20E0\string;% combining enclosing circle backslash \glshex 20E1% combining left right arrow above } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrhyphenrules} %\changes{1.27}{2018-02-26}{new} %Hyphens. % \begin{macrocode} \newcommand*{\glsxtrhyphenrules}{% \string'\string-\string'\string;% ASCII hyphen \glshex 00AD\string;% soft hyphen \glshex 2010\string;% hyphen \glshex 2011\string;% non-breaking hyphen \glshex 2012\string;% figure dash \glshex 2013\string;% en dash \glshex 2014\string;% em dash \glshex 2015\string;% horizontal bar \glshex 2212\string=\glshex 207B\string=\glshex 208B% minus sign } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrgeneralpuncrules} %\changes{1.27}{2018-02-26}{new} %General punctuation. % \begin{macrocode} \newcommand*{\glsxtrgeneralpuncrules}{% \glsxtrgeneralpuncIrules \string<\glsxtrcurrencyrules \string<\glsxtrgeneralpuncIIrules } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrgeneralpuncIrules} %\changes{1.27}{2018-02-26}{new} %First set of general punctuation. % \begin{macrocode} \newcommand*{\glsxtrgeneralpuncIrules}{% \string'\glshex 005F\string'% underscore \string<\glshex 00AF% macron \string<\string'\glshex 002C\string'% comma \string<\string'\glshex 003B\string'% semi-colon \string<\string'\glshex 003A\string'% colon \string<\string'\glshex 0021\string'% exclamation mark \string<\glshex 00A1% inverted exclamation mark \string<\string'\glshex 003F\string'% question mark \string<\glshex 00BF% inverted question mark \string<\string'\glshex 002F\string'% solidus \string<\string'\glshex 002E\string'% full stop \string<\glshex 00B4% acute accent \string<\string'\glshex 0060\string'% grave accent \string<\string'\glshex 005E\string'% circumflex accent \string<\glshex 00A8% diaersis \string<\string'\glshex 007E\string'% tilde \string<\glshex 00B7% middle dot \string<\glshex 00B8% cedilla \string<\string'\glshex 0027\string'% straight apostrophe \string<\string'\glshex 0022\string'% straight double quote \string<\glshex 00AB% left guillemet \string<\glshex 00BB% right guillemet \string<\string'\glshex 0028\string'% left parenthesis \string=\glshex 207D\string=\glshex 208D% super/subscript left parenthesis \string<\string'\glshex 0029\string'% right parenthesis \string=\glshex 207E\string=\glshex 208E% super/subscript right parenthesis \string<\string'\glshex 005B\string'% left square bracket \string<\string'\glshex 005D\string'% right square bracket \string<\string'\glshex 007B\string'% left curly bracket \string<\string'\glshex 007D\string'% right curly bracket \string<\glshex 00A7% section sign \string<\glshex 00B6% pilcrow sign \string<\glshex 00A9% copyright sign \string<\glshex 00AE% registered sign \string<\string'\glshex 0040\string'% at sign } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrcurrencyrules} %\changes{1.27}{2018-02-26}{new} %General punctuation. % \begin{macrocode} \newcommand*{\glsxtrcurrencyrules}{% \glshex 00A4% currency sign \string<\glshex 0E3F% Thai currency symbol baht \string<\glshex 00A2% cent sign \string<\glshex 20A1% colon sign \string<\glshex 20A2% cruzeiro sign \string<\string'\glshex 0024\string'% dollar sign \string<\glshex 20AB% dong sign \string<\glshex 20AC% euro sign \string<\glshex 20A3% French franc sign \string<\glshex 20A4% lira sign \string<\glshex 20A5% mill sign \string<\glshex 20A6% naira sign \string<\glshex 20A7% peseta sign \string<\glshex 00A3% pound sign \string<\glshex 20A8% rupee sign \string<\glshex 20AA% new sheqel sign \string<\glshex 20A9% won sign \string<\glshex 00A5% yen sign } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrgeneralpuncIIrules} %\changes{1.27}{2018-02-26}{new} %Second set of general punctuation. % \begin{macrocode} \newcommand*{\glsxtrgeneralpuncIIrules}{% \string'\glshex 002A\string'% asterisk \string<\string'\glshex 005C\string'% backslash \string<\string'\glshex 0026\string'% ampersand \string<\string'\glshex 0023\string'% hash sign \string<\string'\glshex 0025\string'% percent sign \string<\string'\glshex 002B\string'% plus sign \string=\glshex 207A\string=\glshex 208A% super/subscript plus sign \string<\glshex 00B1% plus-minus sign \string<\glshex 00F7% division sign \string<\glshex 00D7% multiplication sign \string<\string'\glshex 003C\string'% less-than sign \string<\string'\glshex 003D\string'% equals sign \string<\string'\glshex 003E\string'% greater-than sign \string<\glshex 00AC% not sign \string<\string'\glshex 007C\string'% vertical bar (pipe) \string<\glshex 00A6% broken bar \string<\glshex 00B0% degree sign \string<\glshex 00B5% micron sign } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrGeneralLatinIrules} %\changes{1.27}{2018-02-26}{new} %Basic Latin alphabet. % \begin{macrocode} \newcommand*{\glsxtrGeneralLatinIrules}{% \glsxtrLatinA \string % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*glossaries-extra-stylemods.sty> % \end{macrocode} %\fi %\chapter{Style Adjustments (\styfmt{glossaries-extra-stylemods.sty})} % This package adjusts the predefined styles so that they include the post % description hook. Also, some other minor adjustments may be made % to make existing styles more flexible. % %\section{Package Initialisation} % First identify package: % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{glossaries-extra-stylemods}[2020/04/01 v1.45 (NLCT)] % \end{macrocode} % Provide package options to automatically load required predefined % styles. The simplest method is to just test for the existence of % the file \texttt{glossary-}\meta{option}\texttt{.sty}. Packages % can't be loaded whilst the options are being processed, so save % the list in \cs{@glsxtr@loadstyles}. %\begin{macro}{\@glsxtr@loadstyles} % \begin{macrocode} \newcommand*{\@glsxtr@loadstyles}{} % \end{macrocode} %\end{macro} % %\begin{option}{all} %\changes{1.21}{2017-11-03}{new} %\changes{1.38}{2018-12-01}{added \styfmt{glossary-longextra}} %\changes{1.40}{2019-03-22}{added \styfmt{glossary-topic}} %Provide all known styles. % \begin{macrocode} \DeclareOption{all}{% \appto\@glsxtr@loadstyles{% \RequirePackage{glossary-inline}% \RequirePackage{glossary-list}% \RequirePackage{glossary-tree}% \RequirePackage{glossary-mcols}% \RequirePackage{glossary-long}% \RequirePackage{glossary-longragged}% \RequirePackage{glossary-longbooktabs}% \RequirePackage{glossary-super}% \RequirePackage{glossary-superragged}% \RequirePackage{glossary-bookindex}% \RequirePackage{glossary-longextra}% \RequirePackage{glossary-topic}% } } % \end{macrocode} %\end{option} % % \begin{macrocode} \DeclareOption*{% \IfFileExists{glossary-\CurrentOption.sty} {\eappto\@glsxtr@loadstyles{% \noexpand\RequirePackage{glossary-\CurrentOption}}% }% {% \PackageError{glossaries-extra-styles}% {Unknown option `\CurrentOption'}{}% }% } % \end{macrocode} % Process the package options: % \begin{macrocode} \ProcessOptions % \end{macrocode} % % Load the required packages: % \begin{macrocode} \@glsxtr@loadstyles % \end{macrocode} % Adjust the styles so that they all have the post description hook. % Also, instead of having a hard-coded \cs{space} before the % location, use: %\begin{macro}{\glsxtrprelocation} %\changes{1.21}{2017-11-03}{new} %This uses \cs{providecommand} as the same command is also %provided by \sty{glossary-bookindex}. % \begin{macrocode} \providecommand*{\glsxtrprelocation}{\space} % \end{macrocode} %\end{macro} % %In case we have an old version of \sty{glossaries}: %\begin{macro}{\renewglossarystyle} % \begin{macrocode} \providecommand{\renewglossarystyle}[2]{% \ifcsundef{@glsstyle@#1}% {% \PackageError{glossaries-extra}{Glossary style `#1' isn't already defined}{}% }% {% \csdef{@glsstyle@#1}{#2}% }% } % \end{macrocode} %\end{macro} % %\section{List-Like Styles} % The list-like styles mostly already use the post description hook. % Only the \glostyle{listdotted} style need modifying to add this. % \begin{macrocode} \ifdef{\@glsstyle@listdotted} {% \renewglossarystyle{listdotted}{% \setglossarystyle{list}% \renewcommand*{\glossentry}[2]{% \item[]\makebox[\glslistdottedwidth][l]{% \glsentryitem{##1}% \glstarget{##1}{\glossentryname{##1}}% \unskip\leaders\hbox to 2.9mm{\hss.}\hfill\strut}% \glossentrydesc{##1}\glspostdescription}% \renewcommand*{\subglossentry}[3]{% \item[]\makebox[\glslistdottedwidth][l]{% \glssubentryitem{##2}% \glstarget{##2}{\glossentryname{##2}}% \unskip\leaders\hbox to 2.9mm{\hss.}\hfill\strut}% \glossentrydesc{##2}\glspostdescription}% } } {% % \end{macrocode} % Assume the style isn't required if it hasn't already been defined. % \begin{macrocode} } % \end{macrocode} % The \glostyle{sublistdotted} style doesn't display the description % for top-level entries. Sub-level entries use the % \glostyle{listdottedstyle}. % %The other list styles would be easier to adapt if the space %before the number list wasn't hard coded. %\changes{1.21}{2017-11-03}{modified list to remove hard coded \cs{space}} % \begin{macrocode} \ifdef{\@glsstyle@list} {% % \end{macrocode} %\begin{macro}{\glslistprelocation} %\changes{1.21}{2017-11-03}{new} %Space before number list for top-level entries. % \begin{macrocode} \newcommand{\glslistprelocation}{\glsxtrprelocation} % \end{macrocode} %\end{macro} %\begin{macro}{\glslistchildprelocation} %\changes{1.21}{2017-11-03}{new} %Space before number list for child entries. % \begin{macrocode} \newcommand{\glslistchildprelocation}{\glslistprelocation} % \end{macrocode} %\end{macro} %\begin{macro}{\glslistchildpostlocation} %\changes{1.21}{2017-11-03}{new} %Full stop after number list. % \begin{macrocode} \newcommand{\glslistchildpostlocation}{.} % \end{macrocode} %\end{macro} %\begin{macro}{\glslistdesc} %\changes{1.31}{2018-05-09}{new} % \begin{macrocode} \newcommand{\glslistdesc}[1]{\glossentrydesc{#1}\glspostdescription} % \end{macrocode} %\end{macro} %\begin{macro}{\glslistgroupskip} %\changes{1.41}{2019-04-09}{new} % \begin{macrocode} \newcommand{\glslistgroupskip}{\nobreak\indexspace\nobreak} % \end{macrocode} %\end{macro} %Redefine \glostyle{list} to use these commands. % \begin{macrocode} \renewglossarystyle{list}{% \renewenvironment{theglossary}% {\begin{description}}{\end{description}}% \renewcommand*{\glossaryheader}{}% \renewcommand*{\glsgroupheading}[1]{}% \renewcommand*{\glossentry}[2]{% \item[\glsentryitem{##1}% \glstarget{##1}{\glossentryname{##1}}] \glslistdesc{##1}\glslistprelocation ##2}% \renewcommand*{\subglossentry}[3]{% \glssubentryitem{##2}% \glstarget{##2}{\strut}\space \glslistdesc{##2}% \glslistchildprelocation ##3\glslistchildpostlocation}% \renewcommand*{\glsgroupskip}{\ifglsnogroupskip\else\glslistgroupskip\fi}% } } {} % \end{macrocode} %Similarly for \glostyle{altlist}. Since it requires \glostyle{list}, %the new commands should have been defined above. % \begin{macrocode} \ifdef{\@glsstyle@altlist} {% \renewglossarystyle{altlist}{% \setglossarystyle{list}% \renewcommand*{\glossentry}[2]{% \item[\glsentryitem{##1}% \glstarget{##1}{\glossentryname{##1}}]% \mbox{}\par\nobreak\@afterheading \glslistdesc{##1}\glslistprelocation ##2}% \renewcommand{\subglossentry}[3]{% \par \glssubentryitem{##2}% \glstarget{##2}{\strut}\glslistdesc{##2}% \glslistchildprelocation ##3}% } } {} % \end{macrocode} %Redefine \glostyle{listgroup} so that it discourages a break %after group headings. %\changes{1.21}{2017-11-03}{redefined \texttt{listgroup} to discourage %breaks after group headings} % \begin{macrocode} \ifdef{\@glsstyle@listgroup} {% \renewglossarystyle{listgroup}{% \setglossarystyle{list}% \renewcommand*{\glsgroupheading}[1]{% \item[\glslistgroupheaderfmt{\glsgetgrouptitle{##1}}]% \mbox{}\par\nobreak\@afterheading }% } } {} % \end{macrocode} %Similarly for \glostyle{listhypergroup}. %\changes{1.21}{2017-11-03}{redefined \texttt{listhypergroup} to discourage %breaks after group headings} % \begin{macrocode} \ifdef{\@glsstyle@listhypergroup} {% \renewglossarystyle{listhypergroup}{% \setglossarystyle{list}% \renewcommand*{\glossaryheader}{% \glslistnavigationitem{\glsnavigation}}% \renewcommand*{\glsgroupheading}[1]{% \item[\glslistgroupheaderfmt {\glsnavhypertarget{##1}{\glsgetgrouptitle{##1}}}]% \mbox{}\par\nobreak\@afterheading }% } } {} % \end{macrocode} %Similarly for \glostyle{altlistgroup}. %\changes{1.21}{2017-11-03}{redefined \texttt{altlistgroup} to discourage %breaks after group headings} % \begin{macrocode} \ifdef{\@glsstyle@altlistgroup} {% \renewglossarystyle{altlistgroup}{% \setglossarystyle{altlist}% \renewcommand*{\glsgroupheading}[1]{% \item[\glslistgroupheaderfmt{\glsgetgrouptitle{##1}}]% \mbox{}\par\nobreak\@afterheading }% } } {} % \end{macrocode} %Similarly for \glostyle{altlisthypergroup}. %\changes{1.21}{2017-11-03}{redefined \texttt{altlisthypergroup} to discourage %breaks after group headings} % \begin{macrocode} \ifdef{\@glsstyle@altlisthypergroup} {% \renewglossarystyle{altlisthypergroup}{% \setglossarystyle{altlist}% \renewcommand*{\glossaryheader}{% \glslistnavigationitem{\glsnavigation}}% \renewcommand*{\glsgroupheading}[1]{% \item[\glslistgroupheaderfmt {\glsnavhypertarget{##1}{\glsgetgrouptitle{##1}}}]% \mbox{}\par\nobreak\@afterheading }% } } {} % \end{macrocode} % %\section{Longtable Styles} % The three and four column styles require adjustment to add the % post-description hook. The two column styles need the hard-coded % \cs{space} changed to \cs{glsxtrprelocation}. % \begin{macrocode} \ifcsdef{@glsstyle@long} {% \renewglossarystyle{long}{% \renewenvironment{theglossary}% {\begin{longtable}{lp{\glsdescwidth}}}% {\end{longtable}}% \renewcommand*{\glossaryheader}{}% \renewcommand*{\glsgroupheading}[1]{}% \renewcommand{\glossentry}[2]{% \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} & \glossentrydesc{##1}\glspostdescription \glsxtrprelocation ##2\tabularnewline }% \renewcommand{\subglossentry}[3]{% & \glssubentryitem{##2}% \glstarget{##2}{\strut}\glossentrydesc{##2}\glspostdescription \glsxtrprelocation ##3\tabularnewline }% \ifglsnogroupskip \renewcommand*{\glsgroupskip}{}% \else \renewcommand*{\glsgroupskip}{ & \tabularnewline}% \fi } } {} % \end{macrocode} %Three column style: % \begin{macrocode} \ifcsdef{@glsstyle@long3col} {% \renewglossarystyle{long3col}{% \renewenvironment{theglossary}% {\begin{longtable}{lp{\glsdescwidth}p{\glspagelistwidth}}}% {\end{longtable}}% \renewcommand*{\glossaryheader}{}% \renewcommand*{\glsgroupheading}[1]{}% \renewcommand{\glossentry}[2]{% \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} & \glossentrydesc{##1}\glspostdescription & ##2\tabularnewline }% \renewcommand{\subglossentry}[3]{% & \glssubentryitem{##2}% \glstarget{##2}{\strut}\glossentrydesc{##2}\glspostdescription & ##3\tabularnewline }% % \end{macrocode} %Conditional needs to be outside of \cs{glsgroupskip} otherwise it %can cause \qt{Incomplete \cs{iftrue}} errors. %\changes{1.21}{2017-11-03}{moved conditional outside of \cs{glsgroupskip}} % \begin{macrocode} \ifglsnogroupskip \renewcommand*{\glsgroupskip}{}% \else \renewcommand*{\glsgroupskip}{& &\tabularnewline}% \fi } } {} % \end{macrocode} % Four column style: % \begin{macrocode} \ifcsdef{@glsstyle@long4col} {% \renewglossarystyle{long4col}{% \renewenvironment{theglossary}% {\begin{longtable}{llll}}% {\end{longtable}}% \renewcommand*{\glossaryheader}{}% \renewcommand*{\glsgroupheading}[1]{}% \renewcommand{\glossentry}[2]{% \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} & \glossentrydesc{##1}\glspostdescription & \glossentrysymbol{##1} & ##2\tabularnewline }% \renewcommand{\subglossentry}[3]{% & \glssubentryitem{##2}% \glstarget{##2}{\strut}\glossentrydesc{##2}\glspostdescription & \glossentrysymbol{##2} & ##3\tabularnewline }% % \end{macrocode} %\changes{1.21}{2017-11-03}{moved conditional outside of \cs{glsgroupskip}} % \begin{macrocode} \ifglsnogroupskip \renewcommand*{\glsgroupskip}{}% \else \renewcommand*{\glsgroupskip}{& & &\tabularnewline}% \fi } } {} % \end{macrocode} % %The styles in \sty{glossary-longbooktabs} are all based on the %styles in \sty{glossary-long}, so no adjustments are needed for %that package. % %\section{Long Ragged Styles} % The three and four column styles require adjustment for the % post-description hook, but not the two column styles. However, the % two-column styles need to have \cs{space} replaced with % \cs{glsxtrprelocation}. % \begin{macrocode} \ifcsdef{@glsstyle@longragged} {% \renewglossarystyle{longragged}{% \renewenvironment{theglossary}% {\begin{longtable}{l>{\raggedright}p{\glsdescwidth}}}% {\end{longtable}}% \renewcommand*{\glossaryheader}{}% \renewcommand*{\glsgroupheading}[1]{}% \renewcommand{\glossentry}[2]{% \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} & \glossentrydesc{##1}\glspostdescription\glsxtrprelocation ##2% \tabularnewline }% \renewcommand{\subglossentry}[3]{% & \glssubentryitem{##2}% \glstarget{##2}{\strut}\glossentrydesc{##2}% \glspostdescription\glsxtrprelocation ##3% \tabularnewline }% \ifglsnogroupskip \renewcommand*{\glsgroupskip}{}% \else \renewcommand*{\glsgroupskip}{ & \tabularnewline}% \fi } } {} % \end{macrocode} %Three and four column styles don't use \cs{glsxtrprelocation} since the number %list is in its own column. % \begin{macrocode} \ifcsdef{@glsstyle@longragged3col} {% \renewglossarystyle{longragged3col}{% \renewenvironment{theglossary}% {\begin{longtable}{l>{\raggedright}p{\glsdescwidth}% >{\raggedright}p{\glspagelistwidth}}}% {\end{longtable}}% \renewcommand*{\glossaryheader}{}% \renewcommand*{\glsgroupheading}[1]{}% \renewcommand{\glossentry}[2]{% \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} & \glossentrydesc{##1}\glspostdescription & ##2\tabularnewline }% \renewcommand{\subglossentry}[3]{% & \glssubentryitem{##2}% \glstarget{##2}{\strut}\glossentrydesc{##2}\glspostdescription & ##3\tabularnewline }% % \end{macrocode} %\changes{1.21}{2017-11-03}{moved conditional outside of \cs{glsgroupskip}} % \begin{macrocode} \ifglsnogroupskip \renewcommand*{\glsgroupskip}{}% \else \renewcommand*{\glsgroupskip}{& &\tabularnewline}% \fi } } {} % \end{macrocode} % Four column style: % \begin{macrocode} \ifcsdef{@glsstyle@altlongragged4col} {% \renewglossarystyle{altlongragged4col}{% \renewenvironment{theglossary}% {\begin{longtable}{l>{\raggedright}p{\glsdescwidth}l% >{\raggedright}p{\glspagelistwidth}}}% {\end{longtable}}% \renewcommand*{\glossaryheader}{}% \renewcommand*{\glsgroupheading}[1]{}% \renewcommand{\glossentry}[2]{% \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} & \glossentrydesc{##1}\glspostdescription & \glossentrysymbol{##1} & ##2\tabularnewline }% \renewcommand{\subglossentry}[3]{% & \glssubentryitem{##2}% \glstarget{##2}{\strut}\glossentrydesc{##2}\glspostdescription & \glossentrysymbol{##2} & ##3\tabularnewline }% % \end{macrocode} %\changes{1.21}{2017-11-03}{moved conditional outside of \cs{glsgroupskip}} % \begin{macrocode} \ifglsnogroupskip \renewcommand*{\glsgroupskip}{}% \else \renewcommand*{\glsgroupskip}{& & &\tabularnewline}% \fi } } {} % \end{macrocode} % %\section{Supertabular Styles} % The three and four column styles require adjustment to add the % post-description hook. The two column styles need the hard-coded % \cs{space} changed to \cs{glsxtrprelocation}. % \begin{macrocode} \ifcsdef{@glsstyle@super} {% \renewglossarystyle{super}{% \renewenvironment{theglossary}% {\tablehead{}\tabletail{}% \begin{supertabular}{lp{\glsdescwidth}}}% {\end{supertabular}}% \renewcommand*{\glossaryheader}{}% \renewcommand*{\glsgroupheading}[1]{}% \renewcommand{\glossentry}[2]{% \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} & \glossentrydesc{##1}\glspostdescription \glsxtrprelocation ##2\tabularnewline }% \renewcommand{\subglossentry}[3]{% & \glssubentryitem{##2}% \glstarget{##2}{\strut}\glossentrydesc{##2}\glspostdescription \glsxtrprelocation ##3\tabularnewline }% \ifglsnogroupskip \renewcommand*{\glsgroupskip}{}% \else \renewcommand*{\glsgroupskip}{& \tabularnewline}% \fi } } {} % \end{macrocode} %Three column style: % \begin{macrocode} \ifcsdef{@glsstyle@super3col} {% \renewglossarystyle{super3col}{% \renewenvironment{theglossary}% {\tablehead{}\tabletail{}% \begin{supertabular}{lp{\glsdescwidth}p{\glspagelistwidth}}}% {\end{supertabular}}% \renewcommand*{\glossaryheader}{}% \renewcommand*{\glsgroupheading}[1]{}% \renewcommand{\glossentry}[2]{% \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} & \glossentrydesc{##1}\glspostdescription & ##2\tabularnewline }% \renewcommand{\subglossentry}[3]{% & \glssubentryitem{##2}% \glstarget{##2}{\strut}\glossentrydesc{##2}\glspostdescription & ##3\tabularnewline }% % \end{macrocode} %\changes{1.21}{2017-11-03}{moved conditional outside of \cs{glsgroupskip}} % \begin{macrocode} \ifglsnogroupskip \renewcommand*{\glsgroupskip}{}% \else \renewcommand*{\glsgroupskip}{ & &\tabularnewline}% \fi } } {} % \end{macrocode} % Four column styles: % \begin{macrocode} \ifcsdef{@glsstyle@super4col} {% \renewglossarystyle{super4col}{% \renewenvironment{theglossary}% {\tablehead{}\tabletail{}% \begin{supertabular}{llll}}{% \end{supertabular}}% \renewcommand*{\glossaryheader}{}% \renewcommand*{\glsgroupheading}[1]{}% \renewcommand{\glossentry}[2]{% \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} & \glossentrydesc{##1}\glspostdescription & \glossentrysymbol{##1} & ##2\tabularnewline }% \renewcommand{\subglossentry}[3]{% & \glssubentryitem{##2}% \glstarget{##2}{\strut}\glossentrydesc{##2}\glspostdescription & \glossentrysymbol{##2} & ##3\tabularnewline }% % \end{macrocode} %\changes{1.21}{2017-11-03}{moved conditional outside of \cs{glsgroupskip}} % \begin{macrocode} \ifglsnogroupskip \renewcommand*{\glsgroupskip}{}% \else \renewcommand*{\glsgroupskip}{& & &\tabularnewline}% \fi } } {} % \end{macrocode} % %\section{Super Ragged Styles} % The three and four column styles require adjustment for the % post-description hook, but not the two column styles. However, the % two-column styles need to have \cs{space} replaced with % \cs{glsxtrprelocation}. % \begin{macrocode} \ifcsdef{@glsstyle@superragged} {% \renewglossarystyle{superragged}{% \renewenvironment{theglossary}% {\tablehead{}\tabletail{}% \begin{supertabular}{l>{\raggedright}p{\glsdescwidth}}}% {\end{supertabular}}% \renewcommand*{\glossaryheader}{}% \renewcommand*{\glsgroupheading}[1]{}% \renewcommand{\glossentry}[2]{% \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} & \glossentrydesc{##1}\glspostdescription\glsxtrprelocation ##2% \tabularnewline }% \renewcommand{\subglossentry}[3]{% & \glssubentryitem{##2}% \glstarget{##2}{\strut}\glossentrydesc{##2}\glspostdescription \glsxtrprelocation ##3% \tabularnewline }% \ifglsnogroupskip \renewcommand*{\glsgroupskip}{}% \else \renewcommand*{\glsgroupskip}{& \tabularnewline}% \fi } } {} % \end{macrocode} %Three column style: % \begin{macrocode} \ifcsdef{@glsstyle@superragged3col} {% \renewglossarystyle{superragged3col}{% \renewenvironment{theglossary}% {\tablehead{}\tabletail{}% \begin{supertabular}{l>{\raggedright}p{\glsdescwidth}% >{\raggedright}p{\glspagelistwidth}}}% {\end{supertabular}}% \renewcommand*{\glossaryheader}{}% \renewcommand*{\glsgroupheading}[1]{}% \renewcommand{\glossentry}[2]{% \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} & \glossentrydesc{##1}\glspostdescription & ##2\tabularnewline }% \renewcommand{\subglossentry}[3]{% & \glssubentryitem{##2}% \glstarget{##2}{\strut}\glossentrydesc{##2}\glspostdescription & ##3\tabularnewline }% % \end{macrocode} %\changes{1.21}{2017-11-03}{moved conditional outside of \cs{glsgroupskip}} % \begin{macrocode} \ifglsnogroupskip \renewcommand*{\glsgroupskip}{}% \else \renewcommand*{\glsgroupskip}{ & &\tabularnewline}% \fi } } {} % \end{macrocode} % Four columns: % \begin{macrocode} \ifcsdef{@glsstyle@altsuperragged4col} {% \renewglossarystyle{altsuperragged4col}{% \renewenvironment{theglossary}% {\tablehead{}\tabletail{}% \begin{supertabular}{l>{\raggedright}p{\glsdescwidth}l% >{\raggedright}p{\glspagelistwidth}}}% {\end{supertabular}}% \renewcommand*{\glossaryheader}{}% \renewcommand{\glossentry}[2]{% \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} & \glossentrydesc{##1}\glspostdescription & \glossentrysymbol{##1} & ##2\tabularnewline }% \renewcommand{\subglossentry}[3]{% & \glssubentryitem{##2}% \glstarget{##2}{\strut}\glossentrydesc{##2}\glspostdescription & \glossentrysymbol{##2} & ##3\tabularnewline }% % \end{macrocode} %\changes{1.21}{2017-11-03}{moved conditional outside of \cs{glsgroupskip}} % \begin{macrocode} \ifglsnogroupskip \renewcommand*{\glsgroupskip}{}% \else \renewcommand*{\glsgroupskip}{& & &\tabularnewline}% \fi } } {} % \end{macrocode} % %\section{Inline Style} % The \glostyle{inline} style is dealt with slightly differently. % The \cs{glspostdescription} hook is actually in % \cs{glspostinline}, which is called at the end of the glossary. % The original definition of \cs{glspostinline} also includes a % space, which is unnecessary. Here, instead of redefining the % \glostyle{inline} style, just redefine \cs{glspostinline} and % \cs{glsinlinedescformat}. % \begin{macrocode} \ifdef{\@glsstyle@inline} {% \renewcommand*{\glspostinline}{.\spacefactor\sfcode`\.} % \end{macrocode} % Just use \cs{glsxtrpostdescription} instead of % \cs{glspostdescription}. % \begin{macrocode} \renewcommand*{\glsinlinedescformat}[3]{% \space#1\glsxtrpostdescription} \renewcommand*{\glsinlinesubdescformat}[3]{% #1\glsxtrpostdescription} % \end{macrocode} % The default settings don't show the location lists, so there's no % adjustment for \cs{glsxtrprelocation}. % \begin{macrocode} } {} % \end{macrocode} % %\section{Tree Styles} % Redefine both \cs{glstreenamefmt} and \cs{glstreegroupheaderfmt} % in terms of \cs{glstreedefaultnamefmt} to make it easier to change % both at the same time or only change one without affecting the % other. % \begin{macrocode} \ifdef\glstreenamefmt { % \end{macrocode} %\begin{macro}{\glstreedefaultnamefmt} %\changes{1.31}{2018-05-09}{new} % \begin{macrocode} \newcommand{\glstreedefaultnamefmt}[1]{\textbf{#1}} % \end{macrocode} %\end{macro} %\begin{macro}{\glstreenamefmt} %\changes{1.31}{2018-05-09}{added redefinition} % \begin{macrocode} \renewcommand{\glstreenamefmt}[1]{\glstreedefaultnamefmt{#1}} % \end{macrocode} %\end{macro} %\begin{macro}{\glstreegroupheaderfmt} %\changes{1.31}{2018-05-09}{added redefinition} %This command was only introduced to \sty{glossary-tree} v4.22, so %it may not be defined. % \begin{macrocode} \def\glstreegroupheaderfmt#1{\glstreedefaultnamefmt{#1}} % \end{macrocode} %\end{macro} %\begin{macro}{\glstreenavigationfmt} %\changes{1.31}{2018-05-09}{added redefinition} %This command was only introduced to \sty{glossary-tree} v4.22, so %it may not be defined. % \begin{macrocode} \def\glstreenavigationfmt#1{\glstreedefaultnamefmt{#1}} % \end{macrocode} %\end{macro} %\begin{macro}{\glstreePreHeader} %\changes{1.41}{2019-04-09}{new} %Takes the label as the first argument and title as the second %argument so this can be modified to add a bookmark. % \begin{macrocode} \newcommand{\glstreePreHeader}[2]{} % \end{macrocode} %\end{macro} % \begin{macrocode} } {} % \end{macrocode} % The \glostyle{index} style is redefined so that the space before % the number list isn't hard coded. %\changes{1.21}{2017-11-03}{modified index to remove hard coded \cs{space}} % \begin{macrocode} \ifdef{\@glsstyle@index} { % \end{macrocode} %\begin{macro}{\glstreeprelocation} %\changes{1.21}{2017-11-03}{new} %The space before the number list for top-level entries. This is %shared by the other tree styles. % \begin{macrocode} \newcommand*{\glstreeprelocation}{\glsxtrprelocation} % \end{macrocode} %\end{macro} %\begin{macro}{\glstreechildprelocation} %\changes{1.21}{2017-11-03}{new} %The space before the number list for child entries. This is %shared by the other tree styles. % \begin{macrocode} \newcommand*{\glstreechildprelocation}{\glstreeprelocation} % \end{macrocode} %\end{macro} %Don't prohibit a page break at the start of a new group if there's %no header. %\begin{macro}{\glstreegroupskip} %\changes{1.41}{2019-04-09}{new} % \begin{macrocode} \newcommand{\glstreegroupskip}{\indexspace} % \end{macrocode} %\end{macro} %\begin{macro}{\glstreegroupheaderskip} %\changes{1.42}{2020-02-03}{new} %This doesn't include \cs{@afterheading} as it can cause %interference with some styles. % \begin{macrocode} \newcommand{\glstreegroupheaderskip}{\nopagebreak\glstreegroupskip\nobreak} % \end{macrocode} %\end{macro} %Modify the \glostyle{index} style. % \begin{macrocode} \renewglossarystyle{index}{% \renewenvironment{theglossary}% {\setlength{\parindent}{0pt}% \setlength{\parskip}{0pt plus 0.3pt}% \let\item\glstreeitem \let\subitem\glstreesubitem \let\subsubitem\glstreesubsubitem }% {\par}% \renewcommand*{\glossaryheader}{}% \renewcommand*{\glsgroupheading}[1]{}% \renewcommand*{\glossentry}[2]{% \item\glsentryitem{##1}% \glstreenamefmt{\glstarget{##1}{\glossentryname{##1}}}% \glstreesymbol{##1}% \glstreeDescLoc{##1}{##2}% }% \renewcommand{\subglossentry}[3]{% \ifcase##1\relax \item \or \subitem \glssubentryitem{##2}% \else \subsubitem \fi \glstreenamefmt{\glstarget{##2}{\glossentryname{##2}}}% \glstreechildsymbol{##2}% \glstreeChildDescLoc{##2}{##3}% }% \renewcommand*{\glsgroupskip}{\ifglsnogroupskip\else\glstreegroupskip\fi}% } } {} % \end{macrocode} % % The \glostyle{indexgroup} style is redefined to discourage a page % break after the heading. %\changes{1.21}{2017-11-03}{redefined \texttt{indexgroup} to discourage %breaks after group headings} % \begin{macrocode} \ifdef{\@glsstyle@indexgroup} {% \renewglossarystyle{indexgroup}{% \setglossarystyle{index}% \renewcommand*{\glsgroupheading}[1]{% \glsxtrgetgrouptitle{##1}{\glsxtr@grptitle}% \glstreePreHeader{##1}{\glsxtr@grptitle}% \item\glstreegroupheaderfmt{\glsxtr@grptitle}% \glstreegroupheaderskip\@afterheading }% } } {} % \end{macrocode} % %Similarly for \glostyle{indexhypergroup}. %\changes{1.21}{2017-11-03}{redefined \texttt{indexhypergroup} to discourage %breaks after group headings} % \begin{macrocode} \ifdef{\@glsstyle@indexhypergroup} {% \renewglossarystyle{indexhypergroup}{% \setglossarystyle{index}% \renewcommand*{\glossaryheader}{% \item\glstreenavigationfmt{\glsnavigation}% \glstreegroupheaderskip\@afterheading}% \renewcommand*{\glsgroupheading}[1]{% \glsxtrgetgrouptitle{##1}{\glsxtr@grptitle}% \glstreePreHeader{##1}{\glsxtr@grptitle}% \item\glstreegroupheaderfmt {\glsnavhypertarget{##1}{\glsxtr@grptitle}}% \glstreegroupheaderskip\@afterheading}% }% } {} % \end{macrocode} % %Adjust \glostyle{tree} style to remove hard coded space before %number list. % \begin{macrocode} \ifdef{\@glsstyle@tree} {% % \end{macrocode} %Provide a command for use with the \glostyle{tree} styles that displays %the pre-description separator, the %description and post-description hook. %\begin{macro}{\glstreedesc} %\changes{1.31}{2018-05-09}{new} % \begin{macrocode} \newcommand{\glstreedesc}[1]{% \glstreepredesc\glossentrydesc{#1}\glspostdescription } % \end{macrocode} %\end{macro} %\begin{macro}{\glstreeDescLoc} %\changes{1.41}{2019-04-09}{new} %\begin{definition} %\cs{glstreeDescLoc}\marg{label}\marg{location} %\end{definition} %This checks for the description and symbol. If both are missing, %a different separator may be required. For example, a comma and %space if there's no description or symbol but just a space if %either of those fields are present. % \begin{macrocode} \newcommand{\glstreeDescLoc}[2]{% \ifglshasdesc{#1}% {\glstreedesc{#1}\glstreeprelocation}% {\ifglshassymbol{#1}{\glstreeprelocation}{\glstreeNoDescSymbolPreLocation}}% #2% } % \end{macrocode} %\end{macro} %\begin{macro}{\glstreeNoDescSymbolPreLocation} %\changes{1.42}{2020-02-03}{new} %\begin{definition} %\cs{glstreeNoDescSymbolPreLocation} %\end{definition} % \begin{macrocode} \newcommand{\glstreeNoDescSymbolPreLocation}{\space} % \end{macrocode} %\end{macro} %Similarly for the symbol. %\begin{macro}{\glstreesymbol} %\changes{1.31}{2018-05-09}{new} % \begin{macrocode} \newcommand{\glstreesymbol}[1]{% \ifglshassymbol{#1}{\space(\glossentrysymbol{#1})}{}% }% % \end{macrocode} %\end{macro} %And for the child entries: %\begin{macro}{\glstreechilddesc} %\changes{1.31}{2018-05-09}{new} % \begin{macrocode} \newcommand{\glstreechilddesc}[1]{% \glstreechildpredesc\glossentrydesc{#1}\glspostdescription }% % \end{macrocode} %\end{macro} %\begin{macro}{\glstreeChildDescLoc} %\changes{1.41}{2019-04-09}{new} %\changes{1.42}{2020-02-03}{added \cs{glstreeNoDescSymbolPreLocation}} % \begin{macrocode} \newcommand{\glstreeChildDescLoc}[2]{% \ifglshasdesc{#1}% {\glstreechilddesc{#1}\glstreechildprelocation}% {\ifglshassymbol{#1}{\glstreechildprelocation}% {\glstreeNoDescSymbolPreLocation}% }% #2% }% % \end{macrocode} %\end{macro} %\begin{macro}{\glstreechildsymbol} %\changes{1.31}{2018-05-09}{new} %This just behaves in the same way as the top-level. % \begin{macrocode} \newcommand{\glstreechildsymbol}[1]{% \glstreesymbol{#1}% }% % \end{macrocode} %\end{macro} % \begin{macrocode} \renewglossarystyle{tree}{% \renewenvironment{theglossary}% {\setlength{\parindent}{0pt}% \setlength{\parskip}{0pt plus 0.3pt}}% {}% \renewcommand*{\glossaryheader}{}% \renewcommand*{\glsgroupheading}[1]{}% \renewcommand{\glossentry}[2]{% \hangindent0pt\relax \parindent0pt\relax \glsentryitem{##1}\glstreenamefmt{\glstarget{##1}{\glossentryname{##1}}}% \glstreesymbol{##1}% \glstreeDescLoc{##1}{##2}\par }% \renewcommand{\subglossentry}[3]{% \hangindent##1\glstreeindent\relax \parindent##1\glstreeindent\relax \ifnum##1=1\relax \glssubentryitem{##2}% \fi \glstreenamefmt{\glstarget{##2}{\glossentryname{##2}}}% \glstreechildsymbol{##2}% \glstreeChildDescLoc{##2}{##3}\par }% \renewcommand*{\glsgroupskip}{\ifglsnogroupskip\else\glstreegroupskip\fi}% }% } {} % \end{macrocode} % % The \glostyle{treegroup} style is redefined to discourage a page % break after the heading. %\changes{1.21}{2017-11-03}{redefined \texttt{treegroup} to discourage %breaks after group headings} % \begin{macrocode} \ifdef{\@glsstyle@treegroup} {% \renewglossarystyle{treegroup}{% \setglossarystyle{tree}% \renewcommand{\glsgroupheading}[1]{% \glsxtrgetgrouptitle{##1}{\glsxtr@grptitle}% \glstreePreHeader{##1}{\glsxtr@grptitle}% \par\noindent\glstreegroupheaderfmt{\glsxtr@grptitle}% \glstreegroupheaderskip\@afterheading}% } } {} % \end{macrocode} % %Similarly for \glostyle{treehypergroup} %\changes{1.21}{2017-11-03}{redefined \texttt{treehypergroup} to discourage %breaks after group headings} % \begin{macrocode} \ifdef{\@glsstyle@treehypergroup} {% \renewglossarystyle{treehypergroup}{% \setglossarystyle{tree}% \renewcommand*{\glossaryheader}{% \par\noindent\glstreenavigationfmt{\glsnavigation}% \glstreegroupheaderskip\@afterheading}% \renewcommand*{\glsgroupheading}[1]{% \glsxtrgetgrouptitle{##1}{\glsxtr@grptitle}% \glstreePreHeader{##1}{\glsxtr@grptitle}% \par\noindent \glstreegroupheaderfmt {\glsnavhypertarget{##1}{\glsxtr@grptitle}}% \glstreegroupheaderskip\@afterheading}% } } {} % \end{macrocode} % %Adjust \glostyle{treenoname} style to remove hard coded space before %number list. % \begin{macrocode} \ifdef{\@glsstyle@treenoname} {% % \end{macrocode} %Provide a command for use with the \glostyle{treenoname} styles that displays %the pre-description separator, the %description and post-description hook. %\begin{macro}{\glstreenonamedesc} %\changes{1.31}{2018-05-09}{new} % \begin{macrocode} \newcommand{\glstreenonamedesc}[1]{% \glstreepredesc\glossentrydesc{#1}\glspostdescription }% % \end{macrocode} %\end{macro} %Similarly for the symbol. %\begin{macro}{\glstreenonamesymbol} %\changes{1.31}{2018-05-09}{new} % \begin{macrocode} \newcommand{\glstreenonamesymbol}[1]{% \ifglshassymbol{#1}{\space(\glossentrysymbol{#1})}{}% }% % \end{macrocode} %\end{macro} %\begin{macro}{\glstreenonameDescLoc} %\changes{1.45}{2020-04-01}{new} % \begin{macrocode} \newcommand{\glstreenonameDescLoc}[2]{% \glstreenonamedesc{#1}\glstreeprelocation#2% } % \end{macrocode} %\end{macro} %\begin{macro}{\glstreenonamechilddesc} %\changes{1.31}{2018-05-09}{new} %The child entry doesn't have the pre-description separator as the %name isn't displayed. % \begin{macrocode} \newcommand{\glstreenonamechilddesc}[1]{% \glossentrydesc{#1}\glspostdescription }% % \end{macrocode} %\end{macro} %\begin{macro}{\glstreenonameChildDescLoc} %\changes{1.45}{2020-04-01}{new} % \begin{macrocode} \newcommand{\glstreenonameChildDescLoc}[2]{% \glstreenonamechilddesc{#1}\glstreechildprelocation#2% } % \end{macrocode} %\end{macro} % \begin{macrocode} \renewglossarystyle{treenoname}{% \renewenvironment{theglossary}% {\setlength{\parindent}{0pt}% \setlength{\parskip}{0pt plus 0.3pt}}% {}% \renewcommand*{\glossaryheader}{}% \renewcommand*{\glsgroupheading}[1]{}% \renewcommand{\glossentry}[2]{% \hangindent0pt\relax \parindent0pt\relax \glsentryitem{##1}\glstreenamefmt{\glstarget{##1}{\glossentryname{##1}}}% \glstreenonamesymbol{##1}% % \end{macrocode} %\changes{1.45}{2020-04-01}{removed duplicate description} % \begin{macrocode} \glstreenonameDescLoc{##1}{##2}\par }% \renewcommand{\subglossentry}[3]{% \hangindent##1\glstreeindent\relax \parindent##1\glstreeindent\relax \ifnum##1=1\relax \glssubentryitem{##2}% \fi \glstarget{##2}{\strut}% \glstreenonameChildDescLoc{##2}{##3}\par }% \renewcommand*{\glsgroupskip}{\ifglsnogroupskip\else\glstreegroupskip\fi}% } } {} % \end{macrocode} % % The \glostyle{treenonamegroup} style is redefined to discourage a page % break after the heading. %\changes{1.21}{2017-11-03}{redefined \texttt{treenonamegroup} to discourage %breaks after group headings} % \begin{macrocode} \ifdef{\@glsstyle@treenonamegroup} {% \renewglossarystyle{treenonamegroup}{% \setglossarystyle{treenoname}% \renewcommand{\glsgroupheading}[1]{% \glsxtrgetgrouptitle{##1}{\glsxtr@grptitle}% \glstreePreHeader{##1}{\glsxtr@grptitle}% \par\noindent\glstreegroupheaderfmt{\glsxtr@grptitle}% \glstreegroupheaderskip\@afterheading }% } } {} % \end{macrocode} % %Similarly for \glostyle{treenonamehypergroup} %\changes{1.21}{2017-11-03}{redefined \texttt{treenonamehypergroup} to discourage %breaks after group headings} % \begin{macrocode} \ifdef{\@glsstyle@treenonamehypergroup} {% \renewglossarystyle{treenonamehypergroup}{% \setglossarystyle{treenoname}% \renewcommand*{\glossaryheader}{% \par\noindent\glstreenavigationfmt{\glsnavigation}% \glstreegroupheaderskip\@afterheading}% \renewcommand*{\glsgroupheading}[1]{% \glsxtrgetgrouptitle{##1}{\glsxtr@grptitle}% \glstreePreHeader{##1}{\glsxtr@grptitle}% \par\noindent \glstreegroupheaderfmt{\glsnavhypertarget{##1}{\glsxtr@grptitle}}% \glstreegroupheaderskip\@afterheading}% } } {} % \end{macrocode} % % The \glostyle{alttree} style is redefined to make it easier to % made minor adjustments. % \begin{macrocode} \ifdef{\@glsstyle@alttree} {% % \end{macrocode} % Only redefine this style if it's already been defined. % %\begin{macro}{\glsxtralttreeSymbolDescLocation} %\changes{1.05}{2016-06-10}{new} %\begin{definition} %\cs{glsxtralttreeSymbolDescLocation}\marg{label}\marg{location %list} %\end{definition} %Layout the symbol, description and location for top-level entries. % \begin{macrocode} \newcommand{\glsxtralttreeSymbolDescLocation}[2]{% {% \let\par\glsxtrAltTreePar \ifglshassymbol{#1}{(\glossentrysymbol{#1})\space}{}% % \end{macrocode} %\changes{1.41}{2019-04-09}{added check for description} %\changes{1.42}{2020-02-03}{switched to using \cs{glstreeDescLoc}} %\changes{1.44}{2020-03-23}{removed duplicate description} % \begin{macrocode} \glstreeDescLoc{#1}{#2}\par }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrAltTreeIndent} %\changes{1.05}{2016-06-10}{new} % Paragraph indent for subsequent paragraphs in multi-paragraph % descriptions. % \begin{macrocode} \newlength\glsxtrAltTreeIndent % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrAltTreePar} %\changes{1.05}{2016-06-10}{new} %Multi-paragraph descriptions need to keep the hanging indent. % \begin{macrocode} \newcommand{\glsxtrAltTreePar}{% \@@par \glsxtrAltTreeSetHangIndent \setlength{\parindent}{\dimexpr\hangindent+\glsxtrAltTreeIndent}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtralttreeSubSymbolDescLocation} %\changes{1.05}{2016-06-10}{new} %\begin{definition} %\cs{glsxtralttreeSubSymbolDescLocation}\marg{level}\marg{label}\marg{location %list} %\end{definition} %Layout the symbol, description and location for sub-entries. % Defaults to the same as the top-level. % \begin{macrocode} \newcommand{\glsxtralttreeSubSymbolDescLocation}[3]{% \glsxtralttreeSymbolDescLocation{#2}{#3}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrtreetopindent} %\changes{1.05}{2016-06-10}{new} % The original style has to keep computing the width of the name at % each entry. This register allows the style to compute it once for % the top-level at the start of the glossary. % \begin{macrocode} \newlength\glsxtrtreetopindent % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtralttreeInit} %\changes{1.05}{2016-06-10}{new} % User-level initialisation for the \glostyle{alttree} style. % \begin{macrocode} \newcommand*{\glsxtralttreeInit}{% \settowidth{\glsxtrtreetopindent}{\glstreenamefmt{\glsgetwidestname\space}}% \glsxtrAltTreeIndent=\parindent } % \end{macrocode} %\end{macro} % %\begin{macro}{\gglssetwidest} %\changes{1.21}{2017-11-03}{new} % The original \cs{glssetwidest} only uses \cs{def}. This uses % \cs{gdef}. % \begin{macrocode} \newcommand*{\gglssetwidest}[2][0]{% \csgdef{@glswidestname\romannumeral#1}{#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\eglssetwidest} %\changes{1.05}{2016-06-10}{new} % The original \cs{glssetwidest} only uses \cs{def}. This uses % \cs{protected@csedef}. % \begin{macrocode} \newcommand*{\eglssetwidest}[2][0]{% \protected@csedef{@glswidestname\romannumeral#1}{#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\xglssetwidest} %\changes{1.05}{2016-06-10}{new} %Like the above but uses \cs{protected@csxdef}. % \begin{macrocode} \newcommand*{\xglssetwidest}[2][0]{% \protected@csxdef{@glswidestname\romannumeral#1}{#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsupdatewidest} %\changes{1.23}{2017-11-12}{new} %Only sets if new value is wider than old value. % \begin{macrocode} \newcommand*{\glsupdatewidest}[2][0]{% \ifcsundef{@glswidestname\romannumeral#1}% {\csdef{@glswidestname\romannumeral#1}{#2}}% {% \settowidth{\dimen@}{\csuse{@glswidestname\romannumeral#1}}% \settowidth{\dimen@ii}{#2}% \ifdim\dimen@ii>\dimen@ \csdef{@glswidestname\romannumeral#1}{#2}% \fi }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\gglsupdatewidest} %\changes{1.23}{2017-11-12}{new} %As above but global definition. % \begin{macrocode} \newcommand*{\gglsupdatewidest}[2][0]{% \ifcsundef{@glswidestname\romannumeral#1}% {\csgdef{@glswidestname\romannumeral#1}{#2}}% {% \settowidth{\dimen@}{\csuse{@glswidestname\romannumeral#1}}% \settowidth{\dimen@ii}{#2}% \ifdim\dimen@ii>\dimen@ \csgdef{@glswidestname\romannumeral#1}{#2}% \fi }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\eglsupdatewidest} %\changes{1.23}{2017-11-12}{new} %As \cs{glsupdatewidest} but expands value. % \begin{macrocode} \newcommand*{\eglsupdatewidest}[2][0]{% \ifcsundef{@glswidestname\romannumeral#1}% {\protected@csedef{@glswidestname\romannumeral#1}{#2}}% {% \settowidth{\dimen@}{\csuse{@glswidestname\romannumeral#1}}% \settowidth{\dimen@ii}{#2}% \ifdim\dimen@ii>\dimen@ \protected@csedef{@glswidestname\romannumeral#1}{#2}% \fi }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\xglsupdatewidest} %\changes{1.23}{2017-11-12}{new} %As above but global. % \begin{macrocode} \newcommand*{\xglsupdatewidest}[2][0]{% \ifcsundef{@glswidestname\romannumeral#1}% {\protected@csxdef{@glswidestname\romannumeral#1}{#2}}% {% \settowidth{\dimen@}{\csuse{@glswidestname\romannumeral#1}}% \settowidth{\dimen@ii}{#2}% \ifdim\dimen@ii>\dimen@ \protected@csxdef{@glswidestname\romannumeral#1}{#2}% \fi }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsgetwidestname} %\changes{1.05}{2016-06-10}{new} % Provide a user-level macro to obtain the widest top-level name. % \begin{macrocode} \newcommand*{\glsgetwidestname}{\@glswidestname} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsgetwidestsubname} %\changes{1.05}{2016-06-10}{new} % Provide a user-level macro to obtain the widest sub-entry name. % \begin{macrocode} \newcommand*{\glsgetwidestsubname}[1]{% \ifcsundef{@glswidestname\romannumeral#1}% {\@glswidestname}% {\csuse{@glswidestname\romannumeral#1}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsFindWidestTopLevelName} %CamelCase is easier for long command names. Provide a CamelCase %synonym of \ics{glsfindwidesttoplevelname}. % \begin{macrocode} \let\glsFindWidestTopLevelName\glsfindwidesttoplevelname % \end{macrocode} %\end{macro} % %\begin{macro}{\glsFindWidestUsedTopLevelName} %\changes{1.05}{2016-06-10}{new} % Like \cs{glsfindwidesttoplevelname} but has an additional check % that the entry has been used. Only useful if the glossaries occur % at the end of the document, in which case this command should go % at the start of the glossary. Alternatively, place at the end of % the document and save for the next run. % \begin{macrocode} \newrobustcmd*{\glsFindWidestUsedTopLevelName}[1][\@glo@types]{% \dimen@=0pt\relax \gls@tmplen=0pt\relax \forallglossaries[#1]{\@gls@type}% {% \forglsentries[\@gls@type]{\@glo@label}% {% \ifglsused{\@glo@label}% {% \ifglshasparent{\@glo@label}% {}% {% \settowidth{\dimen@}% {\glstreenamefmt{\glsentryname{\@glo@label}}}% \ifdim\dimen@>\gls@tmplen \gls@tmplen=\dimen@ \eglssetwidest{\glsentryname{\@glo@label}}% \fi }% }% {}% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsFindWidestUsedAnyName} %\changes{1.05}{2016-06-10}{new} % Like the above but doesn't check the parent key. Useful if all % levels should have the same width for the name. % \begin{macrocode} \newrobustcmd*{\glsFindWidestUsedAnyName}[1][\@glo@types]{% \dimen@=0pt\relax \gls@tmplen=0pt\relax \forallglossaries[#1]{\@gls@type}% {% \forglsentries[\@gls@type]{\@glo@label}% {% \ifglsused{\@glo@label}% {% \settowidth{\dimen@}% {\glstreenamefmt{\glsentryname{\@glo@label}}}% \ifdim\dimen@>\gls@tmplen \gls@tmplen=\dimen@ \eglssetwidest{\glsentryname{\@glo@label}}% \fi }% {}% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsFindWidestAnyName} %\changes{1.05}{2016-06-10}{new} % Like the above but doesn't check is the entry has been used. % \begin{macrocode} \newrobustcmd*{\glsFindWidestAnyName}[1][\@glo@types]{% \dimen@=0pt\relax \gls@tmplen=0pt\relax \forallglossaries[#1]{\@gls@type}% {% \forglsentries[\@gls@type]{\@glo@label}% {% \settowidth{\dimen@}% {\glstreenamefmt{\glsentryname{\@glo@label}}}% \ifdim\dimen@>\gls@tmplen \gls@tmplen=\dimen@ \eglssetwidest{\glsentryname{\@glo@label}}% \fi }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsFindWidestUsedLevelTwo} %\changes{1.05}{2016-06-10}{new} % This is like \cs{glsFindWidestUsedTopLevelName} but also sets the % first two sub-levels as well. Any entry that has a % great-grandparent is ignored. % \begin{macrocode} \newrobustcmd*{\glsFindWidestUsedLevelTwo}[1][\@glo@types]{% \dimen@=0pt\relax \dimen@i=0pt\relax \dimen@ii=0pt\relax \forallglossaries[#1]{\@gls@type}% {% \forglsentries[\@gls@type]{\@glo@label}% {% \ifglsused{\@glo@label}% {% \ifglshasparent{\@glo@label}% {% \edef\@glo@parent{\csuse{glo@\glsdetoklabel{\@glo@label}@parent}}% \ifglshasparent{\@glo@parent}% {% \edef\@glo@parent{\csuse{glo@\glsdetoklabel{\@glo@parent}@parent}}% \ifglshasparent{\@glo@parent}% {}% {% \settowidth{\gls@tmplen}% {\glstreenamefmt{\glsentryname{\@glo@label}}}% \ifdim\gls@tmplen>\dimen@ii \dimen@ii=\gls@tmplen \eglssetwidest[2]{\glsentryname{\@glo@label}}% \fi }% }% {% \settowidth{\gls@tmplen}% {\glstreenamefmt{\glsentryname{\@glo@label}}}% \ifdim\gls@tmplen>\dimen@i \dimen@i=\gls@tmplen \eglssetwidest[1]{\glsentryname{\@glo@label}}% \fi }% }% {% \settowidth{\gls@tmplen}% {\glstreenamefmt{\glsentryname{\@glo@label}}}% \ifdim\gls@tmplen>\dimen@ \dimen@=\gls@tmplen \eglssetwidest{\glsentryname{\@glo@label}}% \fi }% }% {}% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsFindWidestLevelTwo} %\changes{1.05}{2016-06-10}{new} % This is like \cs{glsFindWidestUsedLevelTwo} but doesn't check if the % entry has been used. % \begin{macrocode} \newrobustcmd*{\glsFindWidestLevelTwo}[1][\@glo@types]{% \dimen@=0pt\relax \dimen@i=0pt\relax \dimen@ii=0pt\relax \forallglossaries[#1]{\@gls@type}% {% \forglsentries[\@gls@type]{\@glo@label}% {% \ifglshasparent{\@glo@label}% {% \edef\@glo@parent{\csuse{glo@\glsdetoklabel{\@glo@label}@parent}}% \ifglshasparent{\@glo@parent}% {% \edef\@glo@parent{\csuse{glo@\glsdetoklabel{\@glo@parent}@parent}}% \ifglshasparent{\@glo@parent}% {}% {% \settowidth{\gls@tmplen}% {\glstreenamefmt{\glsentryname{\@glo@label}}}% \ifdim\gls@tmplen>\dimen@ii \dimen@ii=\gls@tmplen \eglssetwidest[2]{\glsentryname{\@glo@label}}% \fi }% }% {% \settowidth{\gls@tmplen}% {\glstreenamefmt{\glsentryname{\@glo@label}}}% \ifdim\gls@tmplen>\dimen@i \dimen@i=\gls@tmplen \eglssetwidest[1]{\glsentryname{\@glo@label}}% \fi }% }% {% \settowidth{\gls@tmplen}% {\glstreenamefmt{\glsentryname{\@glo@label}}}% \ifdim\gls@tmplen>\dimen@ \dimen@=\gls@tmplen \eglssetwidest{\glsentryname{\@glo@label}}% \fi }% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsFindWidestUsedAnyNameSymbol} %\changes{1.05}{2016-06-10}{new} % Like the \cs{glsFindWidestUsedAnyName} but also measures the % symbol. The length of the widest symbol is stored in the second argument % should be a length register. % \begin{macrocode} \newrobustcmd*{\glsFindWidestUsedAnyNameSymbol}[2][\@glo@types]{% \dimen@=0pt\relax \gls@tmplen=0pt\relax #2=0pt\relax \forallglossaries[#1]{\@gls@type}% {% \forglsentries[\@gls@type]{\@glo@label}% {% \ifglsused{\@glo@label}% {% \settowidth{\dimen@}% {\glstreenamefmt{\glsentryname{\@glo@label}}}% \ifdim\dimen@>\gls@tmplen \gls@tmplen=\dimen@ \eglssetwidest{\glsentryname{\@glo@label}}% \fi \settowidth{\dimen@}% {\glsentrysymbol{\@glo@label}}% \ifdim\dimen@>#2\relax #2=\dimen@ \fi }% {}% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsFindWidestAnyNameSymbol} %\changes{1.05}{2016-06-10}{new} % Like the above but doesn't check if the entry has been used. % \begin{macrocode} \newrobustcmd*{\glsFindWidestAnyNameSymbol}[2][\@glo@types]{% \dimen@=0pt\relax \gls@tmplen=0pt\relax #2=0pt\relax \forallglossaries[#1]{\@gls@type}% {% \forglsentries[\@gls@type]{\@glo@label}% {% \settowidth{\dimen@}% {\glstreenamefmt{\glsentryname{\@glo@label}}}% \ifdim\dimen@>\gls@tmplen \gls@tmplen=\dimen@ \eglssetwidest{\glsentryname{\@glo@label}}% \fi \settowidth{\dimen@}% {\glsentrysymbol{\@glo@label}}% \ifdim\dimen@>#2\relax #2=\dimen@ \fi }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsFindWidestUsedAnyNameSymbolLocation} %\changes{1.05}{2016-06-10}{new} % Like the \cs{glsFindWidestUsedAnyNameSymbol} but also measures the % location list. This requires \ics{glsentrynumberlist}. % The length of the widest symbol is stored in the second argument % should be a length register. The length of the widest location % list is stored in the third argument, which should also be a % length register. % \begin{macrocode} \newrobustcmd*{\glsFindWidestUsedAnyNameSymbolLocation}[3][\@glo@types]{% \dimen@=0pt\relax \gls@tmplen=0pt\relax #2=0pt\relax #3=0pt\relax \forallglossaries[#1]{\@gls@type}% {% \forglsentries[\@gls@type]{\@glo@label}% {% \ifglsused{\@glo@label}% {% \settowidth{\dimen@}% {\glstreenamefmt{\glsentryname{\@glo@label}}}% \ifdim\dimen@>\gls@tmplen \gls@tmplen=\dimen@ \eglssetwidest{\glsentryname{\@glo@label}}% \fi \settowidth{\dimen@}% {\glsentrysymbol{\@glo@label}}% \ifdim\dimen@>#2\relax #2=\dimen@ \fi \settowidth{\dimen@}% {\GlsXtrFormatLocationList{\glsentrynumberlist{\@glo@label}}}% \ifdim\dimen@>#3\relax #3=\dimen@ \fi }% {}% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsFindWidestAnyNameSymbolLocation} %\changes{1.05}{2016-06-10}{new} % Like the \cs{glsFindWidestUsedAnyNameSymbol} but doesn't check if % the entry has been used. % \begin{macrocode} \newrobustcmd*{\glsFindWidestAnyNameSymbolLocation}[3][\@glo@types]{% \dimen@=0pt\relax \gls@tmplen=0pt\relax #2=0pt\relax #3=0pt\relax \forallglossaries[#1]{\@gls@type}% {% \forglsentries[\@gls@type]{\@glo@label}% {% \settowidth{\dimen@}% {\glstreenamefmt{\glsentryname{\@glo@label}}}% \ifdim\dimen@>\gls@tmplen \gls@tmplen=\dimen@ \eglssetwidest{\glsentryname{\@glo@label}}% \fi \settowidth{\dimen@}% {\glsentrysymbol{\@glo@label}}% \ifdim\dimen@>#2\relax #2=\dimen@ \fi \settowidth{\dimen@}% {\GlsXtrFormatLocationList{\glsentrynumberlist{\@glo@label}}}% \ifdim\dimen@>#3\relax #3=\dimen@ \fi }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsFindWidestUsedAnyNameLocation} %\changes{1.05}{2016-06-10}{new} % Like the \cs{glsFindWidestUsedAnyNameSymbolLocation} but doesn't % measure the symbol. The length of the widest location % list is stored in the second argument, which should be a % length register. % \begin{macrocode} \newrobustcmd*{\glsFindWidestUsedAnyNameLocation}[2][\@glo@types]{% \dimen@=0pt\relax \gls@tmplen=0pt\relax #2=0pt\relax \forallglossaries[#1]{\@gls@type}% {% \forglsentries[\@gls@type]{\@glo@label}% {% \ifglsused{\@glo@label}% {% \settowidth{\dimen@}% {\glstreenamefmt{\glsentryname{\@glo@label}}}% \ifdim\dimen@>\gls@tmplen \gls@tmplen=\dimen@ \eglssetwidest{\glsentryname{\@glo@label}}% \fi \settowidth{\dimen@}% {\GlsXtrFormatLocationList{\glsentrynumberlist{\@glo@label}}}% \ifdim\dimen@>#2\relax #2=\dimen@ \fi }% {}% }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsFindWidestAnyNameLocation} %\changes{1.05}{2016-06-10}{new} % Like the \cs{glsFindWidestAnyNameLocation} but doesn't % check the \gls{firstuse} flag. % \begin{macrocode} \newrobustcmd*{\glsFindWidestAnyNameLocation}[2][\@glo@types]{% \dimen@=0pt\relax \gls@tmplen=0pt\relax #2=0pt\relax \forallglossaries[#1]{\@gls@type}% {% \forglsentries[\@gls@type]{\@glo@label}% {% \settowidth{\dimen@}% {\glstreenamefmt{\glsentryname{\@glo@label}}}% \ifdim\dimen@>\gls@tmplen \gls@tmplen=\dimen@ \eglssetwidest{\glsentryname{\@glo@label}}% \fi \settowidth{\dimen@}% {\GlsXtrFormatLocationList{\glsentrynumberlist{\@glo@label}}}% \ifdim\dimen@>#2\relax #2=\dimen@ \fi }% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrComputeTreeIndent} %\changes{1.05}{2016-06-10}{new} % Compute the value of \cs{glstreeindent}. Argument is the entry label. % (Ignored in default definition, but this command may be redefined % to take the particular entry into account.) Note that the % sub-levels modify \cs{glstreeindent}. % \begin{macrocode} \newcommand*{\glsxtrComputeTreeIndent}[1]{% \glstreeindent=\glsxtrtreetopindent\relax } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrComputeTreeSubIndent} %\changes{1.05}{2016-06-10}{new} %\begin{definition} %\cs{glsxtrComputeTreeSubIndent}\marg{level}\marg{label}\marg{register} %\end{definition} % Compute the indent for the sub-entries. The first argument is the % level, the second argument is the entry label and the third % argument is the length register used to store the computed indent. % \begin{macrocode} \newcommand*{\glsxtrComputeTreeSubIndent}[3]{% \ifcsundef{@glswidestname\romannumeral#1}% {% \settowidth{#3}{\glstreenamefmt{\@glswidestname\space}}% }% {% \settowidth{#3}{\glstreenamefmt{% \csname @glswidestname\romannumeral#1\endcsname\space}}% }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrAltTreeSetHangIndent} %\changes{1.05}{2016-06-10}{new} % Set \cs{hangindent} for top-level entries: % \begin{macrocode} \newcommand*{\glsxtrAltTreeSetHangIndent}{\hangindent\glstreeindent} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrAltTreeSetSubHangIndent} %\changes{1.05}{2016-06-10}{new} % Set \cs{hangindent} for sub-entries: % \begin{macrocode} \newcommand*{\glsxtrAltTreeSetSubHangIndent}[1]{\hangindent\glstreeindent} % \end{macrocode} %\end{macro} % % Redefine \glostyle{alttree}: % \begin{macrocode} \renewglossarystyle{alttree}{% \renewenvironment{theglossary}% {% \glsxtralttreeInit \def\@gls@prevlevel{-1}% \mbox{}\par}% {\par}% \renewcommand*{\glossaryheader}{}% \renewcommand*{\glsgroupheading}[1]{}% \renewcommand{\glossentry}[2]{% \ifnum\@gls@prevlevel=0\relax \else \glsxtrComputeTreeIndent{##1}% \fi \parindent\glstreeindent \glsxtrAltTreeSetHangIndent \makebox[0pt][r]% {% \glstreenamebox{\glstreeindent}% {% \glsentryitem{##1}% \glstreenamefmt{\glstarget{##1}{\glossentryname{##1}}}% }% }% \glsxtralttreeSymbolDescLocation{##1}{##2}% \def\@gls@prevlevel{0}% } \renewcommand{\subglossentry}[3]{% \ifnum##1=1\relax \glssubentryitem{##2}% \fi \ifnum\@gls@prevlevel=##1\relax \else \glsxtrComputeTreeSubIndent{##1}{##2}{\gls@tmplen}% \ifnum\@gls@prevlevel<##1\relax \setlength\glstreeindent\gls@tmplen \addtolength\glstreeindent\parindent \parindent\glstreeindent \else \ifnum\@gls@prevlevel=0\relax \glsxtrComputeTreeIndent{##2}% \else \glsxtrComputeTreeSubIndent{\@gls@prevlevel}{##2}{\glstreeindent}% \fi \addtolength\parindent{-\glstreeindent}% \setlength\glstreeindent\parindent \fi \fi \glsxtrAltTreeSetSubHangIndent{##1}% \makebox[0pt][r]{\glstreenamebox{\gls@tmplen}{% \glstreenamefmt{\glstarget{##2}{\glossentryname{##2}}}}}% \glsxtralttreeSubSymbolDescLocation{##1}{##2}{##3}% \def\@gls@prevlevel{##1}% }% \renewcommand*{\glsgroupskip}{\ifglsnogroupskip\else\glstreegroupskip\fi}% } }% {% } % \end{macrocode} %Redefine \glostyle{alttreegroup} so that it discourages a break %after group headings. %\changes{1.21}{2017-11-03}{redefined \texttt{alttreegroup} to discourage %breaks after group headings} % \begin{macrocode} \ifdef{\@glsstyle@alttreegroup} {% \renewglossarystyle{alttreegroup}{% \setglossarystyle{alttree}% \renewcommand{\glsgroupheading}[1]{\par \def\@gls@prevlevel{-1}% \hangindent0pt\relax \parindent0pt\relax \glsxtrgetgrouptitle{##1}{\glsxtr@grptitle}% \glstreePreHeader{##1}{\glsxtr@grptitle}% \glstreegroupheaderfmt{\glsxtr@grptitle}% % \end{macrocode} %Can't use \cs{@afterheading} here as it messes with the first item %of the group. % \begin{macrocode} \glstreegroupheaderskip }% }% }% {% } % \end{macrocode} %Similarly for \glostyle{alttreehypergroup}. %\changes{1.21}{2017-11-03}{redefined \texttt{alttreehypergroup} to discourage %breaks after group headings} % \begin{macrocode} \ifdef{\@glsstyle@alttreehypergroup} {% \renewglossarystyle{alttreehypergroup}{% \setglossarystyle{alttree}% \renewcommand*{\glossaryheader}{% \par \def\@gls@prevlevel{-1}% \hangindent0pt\relax \parindent0pt\relax \glstreenavigationfmt{\glsnavigation}% % \end{macrocode} %Can't use \cs{@afterheading} here as it messes with the first item %of the group. % \begin{macrocode} \glstreegroupheaderskip }% \renewcommand*{\glsgroupheading}[1]{% \glsxtrgetgrouptitle{##1}{\glsxtr@grptitle}% \glstreePreHeader{##1}{\glsxtr@grptitle}% \par \def\@gls@prevlevel{-1}% \hangindent0pt\relax \parindent0pt\relax \glstreegroupheaderfmt{\glsnavhypertarget{##1}{\glsxtr@grptitle}}% % \end{macrocode} %Can't use \cs{@afterheading} here as it messes with the first item %of the group. % \begin{macrocode} \glstreegroupheaderskip }% } }% {% } % \end{macrocode} % %\section{Multicolumn Styles} %Adjust \glostyle{mcolindexgroup} to discourage page breaks after %the group headings. %\changes{1.21}{2017-11-03}{redefined \texttt{mcolindexgroup} to discourage %breaks after group headings} % \begin{macrocode} \ifdef{\@glsstyle@mcolindexgroup} {% \renewglossarystyle{mcolindexgroup}{% \setglossarystyle{mcolindex}% \renewcommand*{\glsgroupheading}[1]{% \glsxtrgetgrouptitle{##1}{\glsxtr@grptitle}% \glstreePreHeader{##1}{\glsxtr@grptitle}% \item\glstreegroupheaderfmt{\glsxtr@grptitle}% \glstreegroupheaderskip\@afterheading }% } }% {% } % \end{macrocode} %Similarly for \glostyle{mcolindexhypergroup}. %\changes{1.21}{2017-11-03}{redefined \texttt{mcolindexhypergroup} to discourage %breaks after group headings} % \begin{macrocode} \ifdef{\@glsstyle@mcolindexhypergroup} {% \renewglossarystyle{mcolindexhypergroup}{% \setglossarystyle{mcolindex}% \renewcommand*{\glossaryheader}{% \item\glstreenavigationfmt{\glsnavigation}% % \end{macrocode} %\changes{1.42}{2020-02-03}{added \cs{@afterheading}} % \begin{macrocode} \glstreegroupheaderskip\@afterheading }% \renewcommand*{\glsgroupheading}[1]{% \glsxtrgetgrouptitle{##1}{\glsxtr@grptitle}% \glstreePreHeader{##1}{\glsxtr@grptitle}% \item\glstreegroupheaderfmt {\glsnavhypertarget{##1}{\glsxtr@grptitle}}% \glstreegroupheaderskip\@afterheading }% } }% {% } % \end{macrocode} %Similarly for \glostyle{mcolindexspannav}. %\changes{1.21}{2017-11-03}{redefined \texttt{mcolindexspannav} to discourage %breaks after group headings} % \begin{macrocode} \ifdef{\@glsstyle@mcolindexspannav} {% \renewglossarystyle{mcolindexspannav}{% \setglossarystyle{index}% \renewenvironment{theglossary}% {% \begin{multicols}{\glsmcols}[\noindent\glstreenavigationfmt{\glsnavigation}]% \setlength{\parindent}{0pt}% \setlength{\parskip}{0pt plus 0.3pt}% \let\item\glstreeitem}% {\end{multicols}}% \renewcommand*{\glsgroupheading}[1]{% \glsxtrgetgrouptitle{##1}{\glsxtr@grptitle}% \glstreePreHeader{##1}{\glsxtr@grptitle}% \item\glstreegroupheaderfmt {\glsnavhypertarget{##1}{\glsxtr@grptitle}}% \glstreegroupheaderskip\@afterheading }% } }% {% } % \end{macrocode} %Similarly for \glostyle{mcoltreegroup}. %\changes{1.21}{2017-11-03}{redefined \texttt{mcoltreegroup} to discourage %breaks after group headings} % \begin{macrocode} \ifdef{\@glsstyle@mcoltreegroup} {% \renewglossarystyle{mcoltreegroup}{% \setglossarystyle{mcoltree}% \renewcommand{\glsgroupheading}[1]{% \glsxtrgetgrouptitle{##1}{\glsxtr@grptitle}% \glstreePreHeader{##1}{\glsxtr@grptitle}% \par\noindent\glstreegroupheaderfmt{\glsxtr@grptitle}% \glstreegroupheaderskip\@afterheading }% } }% {% } % \end{macrocode} %Similarly for \glostyle{mcoltreehypergroup}. %\changes{1.21}{2017-11-03}{redefined \texttt{mcoltreehypergroup} to discourage %breaks after group headings} % \begin{macrocode} \ifdef{\@glsstyle@mcoltreehypergroup} {% \renewglossarystyle{mcoltreehypergroup}{% \setglossarystyle{mcoltree}% \renewcommand*{\glossaryheader}{% \par\noindent\glstreenavigationfmt{\glsnavigation}% \glstreegroupheaderskip }% \renewcommand*{\glsgroupheading}[1]{% \glsxtrgetgrouptitle{##1}{\glsxtr@grptitle}% \glstreePreHeader{##1}{\glsxtr@grptitle}% \par\noindent \glstreegroupheaderfmt{\glsnavhypertarget{##1}{\glsxtr@grptitle}}% \glstreegroupheaderskip\@afterheading }% } }% {% } % \end{macrocode} %Similarly for \glostyle{mcoltreespannav}. %\changes{1.21}{2017-11-03}{redefined \texttt{mcoltreespannav} to discourage %breaks after group headings} % \begin{macrocode} \ifdef{\@glsstyle@mcoltreespannav} {% \renewglossarystyle{mcoltreespannav}{% \setglossarystyle{tree}% \renewenvironment{theglossary}% {% \begin{multicols}{\glsmcols}% [\noindent\glstreenavigationfmt{\glsnavigation}]% \setlength{\parindent}{0pt}% \setlength{\parskip}{0pt plus 0.3pt}% }% {\end{multicols}}% \renewcommand*{\glsgroupheading}[1]{% \glsxtrgetgrouptitle{##1}{\glsxtr@grptitle}% \glstreePreHeader{##1}{\glsxtr@grptitle}% \par\noindent \glstreegroupheaderfmt{\glsnavhypertarget{##1}{\glsxtr@grptitle}}% \glstreegroupheaderskip\@afterheading }% } }% {% } % \end{macrocode} %Similarly for \glostyle{mcoltreenonamegroup}. %\changes{1.21}{2017-11-03}{redefined \texttt{mcoltreenonamegroup} to discourage %breaks after group headings} % \begin{macrocode} \ifdef{\@glsstyle@mcoltreenonamegroup} {% \renewglossarystyle{mcoltreenonamegroup}{% \setglossarystyle{mcoltreenoname}% \renewcommand{\glsgroupheading}[1]{% \glsxtrgetgrouptitle{##1}{\glsxtr@grptitle}% \glstreePreHeader{##1}{\glsxtr@grptitle}% \par\noindent\glstreegroupheaderfmt{\glsxtr@grptitle}% \glstreegroupheaderskip\@afterheading }% } }% {% } % \end{macrocode} %Similarly for \glostyle{mcoltreenonamehypergroup}. %\changes{1.21}{2017-11-03}{redefined \texttt{mcoltreenonamehypergroup} to discourage %breaks after group headings} % \begin{macrocode} \ifdef{\@glsstyle@mcoltreenonamehypergroup} {% \renewglossarystyle{mcoltreenonamehypergroup}{% \setglossarystyle{mcoltreenoname}% \renewcommand*{\glossaryheader}{% \par\noindent\glstreenavigationfmt{\glsnavigation}% \glstreegroupheaderskip }% \renewcommand*{\glsgroupheading}[1]{% \glsxtrgetgrouptitle{##1}{\glsxtr@grptitle}% \glstreePreHeader{##1}{\glsxtr@grptitle}% \par\noindent \glstreegroupheaderfmt{\glsnavhypertarget{##1}{\glsxtr@grptitle}}% \glstreegroupheaderskip\@afterheading}% } }% {% } % \end{macrocode} %Similarly for \glostyle{mcoltreenonamespannav}. %\changes{1.21}{2017-11-03}{redefined \texttt{mcoltreenonamespannav} to discourage %breaks after group headings} % \begin{macrocode} \ifdef{\@glsstyle@mcoltreenonamespannav} {% \renewglossarystyle{mcoltreenonamespannav}{% \setglossarystyle{treenoname}% \renewenvironment{theglossary}% {% \begin{multicols}{\glsmcols}% [\noindent\glstreenavigationfmt{\glsnavigation}]% \setlength{\parindent}{0pt}% \setlength{\parskip}{0pt plus 0.3pt}% }% {\end{multicols}}% \renewcommand*{\glsgroupheading}[1]{% \glsxtrgetgrouptitle{##1}{\glsxtr@grptitle}% \glstreePreHeader{##1}{\glsxtr@grptitle}% \par\noindent \glstreegroupheaderfmt{\glsnavhypertarget{##1}{\glsxtr@grptitle}}% \glstreegroupheaderskip\@afterheading}% } }% {% } % \end{macrocode} %\glostyle{mcolalttree} needs adjusting so that it uses \cs{glsxtralttreeInit} %This doesn't use \verb|\mbox{}\par| which would unbalance the top %of the columns. %\changes{1.21}{2017-11-03}{adjusted mcolalttree} % \begin{macrocode} \ifdef{\@glsstyle@mcolalttree} {% \renewglossarystyle{mcolalttree}{% \setglossarystyle{alttree}% \renewenvironment{theglossary}% {% \glsxtralttreeInit \def\@gls@prevlevel{-1}% \begin{multicols}{\glsmcols}% }% {\par\end{multicols}}% } }% {% } % \end{macrocode} %Redefine \glostyle{mcolalttreegroup} to discourage page breaks %after the group headings. %\changes{1.21}{2017-11-03}{redefined \texttt{mcolalttreegroup} to discourage %breaks after group headings} % \begin{macrocode} \ifdef{\@glsstyle@mcolalttreegroup} {% \renewglossarystyle{mcolalttreegroup}{% \setglossarystyle{mcolalttree}% \renewcommand{\glsgroupheading}[1]{% \glsxtrgetgrouptitle{##1}{\glsxtr@grptitle}% \glstreePreHeader{##1}{\glsxtr@grptitle}% \par \def\@gls@prevlevel{-1}% \hangindent0pt\relax \parindent0pt\relax \glstreegroupheaderfmt{\glsxtr@grptitle}% \glstreegroupheaderskip }% } }% {% } % \end{macrocode} %Similarly for \glostyle{mcolalttreehypergroup}. %\changes{1.21}{2017-11-03}{redefined \texttt{mcolalttreehypergroup} to discourage %breaks after group headings} % \begin{macrocode} \ifdef{\@glsstyle@mcolalttreehypergroup} {% \renewglossarystyle{mcolalttreehypergroup}{% \setglossarystyle{mcolalttree}% \renewcommand*{\glossaryheader}{% \par \def\@gls@prevlevel{-1}% \hangindent0pt\relax \parindent0pt\relax \glstreenavigationfmt{\glsnavigation}% \glstreegroupheaderskip }% \renewcommand*{\glsgroupheading}[1]{% \glsxtrgetgrouptitle{##1}{\glsxtr@grptitle}% \glstreePreHeader{##1}{\glsxtr@grptitle}% \par \def\@gls@prevlevel{-1}% \hangindent0pt\relax \parindent0pt\relax \glstreegroupheaderfmt{\glsnavhypertarget{##1}{\glsxtr@grptitle}}% \glstreegroupheaderskip }% } }% {% } % \end{macrocode} %Similarly for \glostyle{mcolalttreespannav}. %\changes{1.21}{2017-11-03}{redefined \texttt{mcolalttreespannav} to discourage %breaks after group headings} % \begin{macrocode} \ifdef{\@glsstyle@mcolalttreespannav} {% \renewglossarystyle{mcolalttreespannav}{% \setglossarystyle{alttree}% \renewenvironment{theglossary}% {% \glsxtralttreeInit \def\@gls@prevlevel{-1}% \begin{multicols}{\glsmcols}% [\noindent\glstreenavigationfmt{\glsnavigation}]% }% {\par\end{multicols}}% \renewcommand*{\glsgroupheading}[1]{% \glsxtrgetgrouptitle{##1}{\glsxtr@grptitle}% \glstreePreHeader{##1}{\glsxtr@grptitle}% \par \def\@gls@prevlevel{-1}% \hangindent0pt\relax \parindent0pt\relax \glstreegroupheaderfmt{\glsnavhypertarget{##1}{\glsxtr@grptitle}}% \glstreegroupheaderskip }% } }% {% } % \end{macrocode} % % Reset the default style % \begin{macrocode} \ifx\@glossary@default@style\relax \else \setglossarystyle{\@glsxtr@current@style} \fi % \end{macrocode} %\iffalse % \begin{macrocode} % % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*glossary-bookindex.sty> % \end{macrocode} %\fi %\chapter{bookindex style (\styfmt{glossary-bookindex.sty})} %\changes{1.21}{2017-11-03}{new} %\section{Package Initialisation and Options} % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{glossary-bookindex}[2020/04/01 v1.45 (NLCT)] % \end{macrocode} %Load required packages. % \begin{macrocode} \RequirePackage{multicol} \RequirePackage{glossary-tree} % \end{macrocode} %\begin{macro}{\glsxtrbookindexcols} %\changes{1.21}{2017-11-03}{new} % Number of columns. % \begin{macrocode} \newcommand{\glsxtrbookindexcols}{2} % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrbookindexname} %\changes{1.21}{2017-11-03}{new} %Format used for top-level entries. % (Argument is the label.) % \begin{macrocode} \newcommand*{\glsxtrbookindexname}[1]{\glossentryname{#1}} % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrbookindexsubname} %\changes{1.21}{2017-11-03}{new} %Format used for sub entries. % \begin{macrocode} \newcommand*{\glsxtrbookindexsubname}[1]{\glsxtrbookindexname{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrprelocation} %\changes{1.21}{2017-11-03}{new} %Provide in case \sty{glossaries-stylemods} isn't loaded. % \begin{macrocode} \providecommand*{\glsxtrprelocation}{\space} % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrbookindexprelocation} %\changes{1.21}{2017-11-03}{new} %Separator used before location list for top-level entries. %Version 1.22 has removed the \cs{ifglsnopostdot} check %since this style doesn't display the description. %\changes{1.22}{2017-11-08}{removed check for no post dot} % \begin{macrocode} \newcommand*{\glsxtrbookindexprelocation}[1]{% \glsxtrifhasfield{location}{#1}% {,\glsxtrprelocation}% {\glsxtrprelocation}% } % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrbookindexsubprelocation} %\changes{1.21}{2017-11-03}{new} %Separator used before location list for sub-entries. % \begin{macrocode} \newcommand*{\glsxtrbookindexsubprelocation}[1]{% \glsxtrbookindexprelocation{#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrbookindexlocation} %\changes{1.39}{2019-03-22}{new} %\begin{definition} %\cs{glsxtrbookindexlocation}\marg{label}\marg{location} %\end{definition} %Displays the location. % \begin{macrocode} \newcommand*{\glsxtrbookindexlocation}[2]{#2} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrbookindexsublocation} %\changes{1.39}{2019-03-22}{new} %\begin{definition} %\cs{glsxtrbookindexlocation}\marg{label}\marg{location} %\end{definition} %Displays the location for sub-entries. % \begin{macrocode} \newcommand*{\glsxtrbookindexsublocation}{\glsxtrbookindexlocation} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrbookindexparentchildsep} %\changes{1.21}{2017-11-03}{new} %Separator used between top-level parent and child entry. % \begin{macrocode} \newcommand{\glsxtrbookindexparentchildsep}{\nopagebreak} % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrbookindexparentsubchildsep} %\changes{1.21}{2017-11-03}{new} %Separator used between sub-level parent and child entry. % \begin{macrocode} \newcommand{\glsxtrbookindexparentsubchildsep}{\glsxtrbookindexparentchildsep} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrbookindexbetween} %\changes{1.21}{2017-11-03}{new} %Between two top-level entries identified by the labels in the %arguments. % \begin{macrocode} \newcommand{\glsxtrbookindexbetween}[2]{} % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrbookindexsubbetween} %\changes{1.21}{2017-11-03}{new} %Between two level~1 entries identified by the labels in the %arguments. % \begin{macrocode} \newcommand{\glsxtrbookindexsubbetween}[2]{} % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrbookindexsubsubbetween} %\changes{1.21}{2017-11-03}{new} %Between two level~2 entries identified by the labels in the %arguments. % \begin{macrocode} \newcommand{\glsxtrbookindexsubsubbetween}[2]{} % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrbookindexatendgroup} %\changes{1.21}{2017-11-03}{new} %At the end of a letter group. The argument is the index of the last %top-level entry. % \begin{macrocode} \newcommand{\glsxtrbookindexatendgroup}[1]{} % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrbookindexsubatendgroup} %\changes{1.21}{2017-11-03}{new} %At the end of a letter group. The argument is the index of the last %level~1 entry. % \begin{macrocode} \newcommand{\glsxtrbookindexsubatendgroup}[1]{} % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrbookindexsubsubatendgroup} %\changes{1.21}{2017-11-03}{new} %At the end of a letter group. The argument is the index of the last %level~2 entry. % \begin{macrocode} \newcommand{\glsxtrbookindexsubsubatendgroup}[1]{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrbookindexgroupskip} %\changes{1.21}{2017-11-03}{new} %Group separator. % \begin{macrocode} \newcommand{\glsxtrbookindexgroupskip}{\ifglsnogroupskip\else\indexspace\fi} % \end{macrocode} %\end{macro} % %Format group title. %\begin{macro}{\glsxtrbookindexformatheader} %\changes{1.21}{2017-11-03}{new} %Group separator. % \begin{macrocode} \newcommand*{\glsxtrbookindexformatheader}[1]{% \par{\centering\glstreegroupheaderfmt{#1}\par}% } % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrbookindexbookmark} %\changes{1.21}{2017-11-03}{new} %Book mark group heading if supported. % \begin{macrocode} \ifdef\pdfbookmark {% \newcommand*{\glsxtrbookindexbookmark}[2]{% \ifdefstring{\@@glossarysec}{chapter}% {\pdfbookmark[1]{#1}{#2}}% {\pdfbookmark[2]{#1}{#2}}% } } {% \newcommand*{\glsxtrbookindexbookmark}[2]{} } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrbookindexbookmarkprefix} %\changes{1.42}{2020-02-03}{new} %Make the bookmark label prefix used for letter groups depend on the glossary label %(instead of original hardcoded ``index.''). % \begin{macrocode} \newcommand*{\glsxtrbookindexbookmarkprefix}{\currentglossary.} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrbookindexcolspread} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\glsxtrbookindexcolspread}{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrbookindexmulticolsenv} %\changes{1.25}{2017-11-14}{new} % \begin{macrocode} \newcommand*{\glsxtrbookindexmulticolsenv}{multicols} % \end{macrocode} %\end{macro} % %Define the style. % \begin{macrocode} \newglossarystyle{bookindex}{% \setglossarystyle{index}% \renewenvironment{theglossary}% {% \ifnum\glsxtrbookindexcols>1\relax \ifdefempty\glsxtrbookindexcolspread {% \edef\glsxtr@beginbookindex{% \noexpand\begin{\glsxtrbookindexmulticolsenv} {\glsxtrbookindexcols}% }% }% {% \edef\glsxtr@beginbookindex{% \noexpand\begin{\glsxtrbookindexmulticolsenv}% {\glsxtrbookindexcols}[\glsxtrbookindexcolspread]% }% }% \else \def\glsxtr@beginbookindex{}% \fi \glsxtr@beginbookindex \setlength{\parindent}{0pt}% \setlength{\parskip}{0pt plus 0.3pt}% \let\@glsxtr@bookindex@sep\glsxtrbookindexparentchildsep \let\@glsxtr@bookindex@subsep\glsxtrbookindexparentsubchildsep \let\@glsxtr@bookindex@between\@gobble \let\@glsxtr@bookindex@subbetween\@gobble \let\@glsxtr@bookindex@subsubbetween\@gobble \let\@glsxtr@bookindex@atendgroup\relax \let\@glsxtr@bookindex@subatendgroup\relax \let\@glsxtr@bookindex@subsubatendgroup\relax \let\@glsxtr@bookindexgroupskip\relax }% {% % \end{macrocode} % Do end group hooks. % \begin{macrocode} \@glsxtr@bookindex@subsubatendgroup \@glsxtr@bookindex@subatendgroup \@glsxtr@bookindex@atendgroup % \end{macrocode} %End \env{multicols} environment. % \begin{macrocode} \ifnum\glsxtrbookindexcols>1\relax \edef\glsxtr@endbookindex{% \noexpand\end{\glsxtrbookindexmulticolsenv}% }% \else \def\glsxtr@endbookindex{}% \fi \glsxtr@endbookindex }% % \end{macrocode} %Use ragged right as columns are likely to be narrow and %indexes tend not to be fully justified. % \begin{macrocode} \renewcommand*{\glossaryheader}{\raggedright}% % \end{macrocode} %Top level entry format. % \begin{macrocode} \renewcommand*{\glossentry}[2]{% % \end{macrocode} %Do separator. % \begin{macrocode} \@glsxtr@bookindex@between{##1}% % \end{macrocode} %Update separators. % \begin{macrocode} \let\@glsxtr@bookindex@sep\glsxtrbookindexparentchildsep \let\@glsxtr@bookindex@subsep\glsxtrbookindexparentsubchildsep \let\@glsxtr@bookindex@subbetween\@gobble \let\@glsxtr@bookindex@subsubbetween\@gobble \edef\@glsxtr@bookindex@between{% \noexpand\glsxtrbookindexbetween{##1}% }% \edef\@glsxtr@bookindex@atendgroup{% \noexpand\glsxtrbookindexatendgroup{##1}% }% \let\@glsxtr@bookindex@subatendgroup\relax \let\@glsxtr@bookindex@subsubatendgroup\relax % \end{macrocode} %Format entry. % \begin{macrocode} \glstreeitem \glsentryitem{##1}% \glstarget{##1}{\glsxtrbookindexname{##1}}% \glsxtrbookindexprelocation{##1}% \glsxtrbookindexlocation{##1}{##2}% }% \renewcommand{\subglossentry}[3]{% \ifcase##1\relax % \end{macrocode} % Level 0 (shouldn't happen as that's formatted with \cs{glossentry}). % \begin{macrocode} \glstreeitem \or % \end{macrocode} % Level 1. % \begin{macrocode} \@glsxtr@bookindex@sep \@glsxtr@bookindex@subbetween{##2}% \let\@glsxtr@bookindex@sep\relax % \end{macrocode} % Update separators. % \begin{macrocode} \let\@glsxtr@bookindex@subsubbetween\@gobble \let\@glsxtr@bookindex@subsep\glsxtrbookindexparentsubchildsep \edef\@glsxtr@bookindex@subbetween{% \noexpand\glsxtrbookindexsubbetween{##2}% }% \edef\@glsxtr@bookindex@atsubendgroup{% \noexpand\glsxtrbookindexatsubendgroup{##1}% }% % \end{macrocode} % Start sub-item. % \begin{macrocode} \glstreesubitem \glssubentryitem{##2}% \else % \end{macrocode} % All other levels. % \begin{macrocode} \@glsxtr@bookindex@subsep \@glsxtr@bookindex@subsubbetween{##2}% % \end{macrocode} % Update separators. % \begin{macrocode} \let\@glsxtr@bookindex@subsep\relax \edef\@glsxtr@bookindex@subsubbetween{% \noexpand\glsxtrbookindexsubsubbetween{##2}% }% \edef\@glsxtr@bookindex@atsubsubendgroup{% \noexpand\glsxtrbookindexatsubsubendgroup{##1}% }% % \end{macrocode} % Start sub-sub-item. % \begin{macrocode} \glstreesubsubitem \fi % \end{macrocode} % Format entry. % \begin{macrocode} \glstarget{##2}{\glsxtrbookindexsubname{##2}}% \glsxtrbookindexsubprelocation{##2}% \glsxtrbookindexsublocation{##2}{##3}% }% % \end{macrocode} % The group skip is moved to the group heading to avoid interfering % with the end letter group hooks. % \begin{macrocode} \renewcommand*{\glsgroupskip}{}% % \end{macrocode} % Group heading format. % \begin{macrocode} \renewcommand*{\glsgroupheading}[1]{% % \end{macrocode} % Do end group hooks. % \begin{macrocode} \@glsxtr@bookindex@subsubatendgroup \@glsxtr@bookindex@subatendgroup \@glsxtr@bookindex@atendgroup \@glsxtr@bookindexgroupskip % \end{macrocode} % Update separators. % \begin{macrocode} \let\@glsxtr@bookindexgroupskip\glsxtrbookindexgroupskip \let\@glsxtr@bookindex@between\@gobble \let\@glsxtr@bookindex@atendgroup\relax \let\@glsxtr@bookindex@subatendgroup\relax \let\@glsxtr@bookindex@subsubatendgroup\relax % \end{macrocode} % Fetch the group title from the label supplied in \verb|#1|. %\changes{1.41}{2019-04-09}{changed \cs{thisgrptitle} to %\cs{glsxtrcurrentgrptitle}}% % \begin{macrocode} \glsxtrgetgrouptitle{##1}{\glsxtrcurrentgrptitle}% % \end{macrocode} % Do the PDF bookmark if supported. % \begin{macrocode} \glsxtrbookindexbookmark{\glsxtrcurrentgrptitle}{\glsxtrbookindexbookmarkprefix##1}% % \end{macrocode} % Format the group title. % \begin{macrocode} \glsxtrbookindexformatheader{\glsxtrcurrentgrptitle}% \nopagebreak\indexspace\nopagebreak\@afterheading }% } % \end{macrocode} % Some supplementary commands that may be useful. % These store the entry label for the current page. Since the page % number is needed in the control sequence, this uses % \cs{glsxtrbookindexthepage} instead of \cs{thepage} in case % the page numbering has been set to something that contains % formatting commands. %\begin{macro}{\glsxtrbookindexthepage} %\changes{1.21}{2017-11-03}{new} %The \cs{@printglossary} sets \cs{currentglossary} to the current %glossary label. This is used as a prefix in case the page number is %reset. % \begin{macrocode} \newcommand{\glsxtrbookindexthepage}{% \ifdef\currentglossary{\currentglossary.\arabic{page}}{\arabic{page}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrbookindexmarkentry} %\changes{1.21}{2017-11-03}{new} %Writes entry information to the \texttt{.aux} file. The argument is %the entry label. % \begin{macrocode} \newcommand*{\glsxtrbookindexmarkentry}[1]{% \protected@write\@auxout {\let\glsxtrbookindexthepage\relax}% {\string\glsxtr@setbookindexmark{\glsxtrbookindexthepage}{#1}}% } % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtr@setbookindexmark} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\glsxtr@setbookindexmark}[2]{% \ifcsundef{glsxtr@idxfirstmark@#1}% {\csgdef{glsxtr@idxfirstmark@#1}{#2}}% {}% \csgdef{glsxtr@idxlastmark@#1}{#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrbookindexfirstmarkfmt} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\glsxtrbookindexfirstmarkfmt}[1]{% \glsentryname{#1}% } % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrbookindexfirstmark} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\glsxtrbookindexfirstmark}{% \letcs{\glsxtr@label}{glsxtr@idxfirstmark@\glsxtrbookindexthepage}% \ifdef\glsxtr@label {\glsxtrbookindexfirstmarkfmt{\glsxtr@label}}% {}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glsxtrbookindexlastmarkfmt} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\glsxtrbookindexlastmarkfmt}[1]{% \glsentryname{#1}% } % \end{macrocode} %\end{macro} %\begin{macro}{\glsxtrbookindexlastmark} %\changes{1.21}{2017-11-03}{new} % \begin{macrocode} \newcommand*{\glsxtrbookindexlastmark}{% \letcs{\glsxtr@label}{glsxtr@idxlastmark@\glsxtrbookindexthepage}% \ifdef\glsxtr@label {\glsxtrbookindexlastmarkfmt{\glsxtr@label}}% {}% } % \end{macrocode} %\end{macro} % %\iffalse % \begin{macrocode} % % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*glossary-longextra.sty> % \end{macrocode} %\fi %\chapter{longextra styles (\styfmt{glossary-longextra.sty})} %\changes{1.37}{2018-11-30}{new} %\section{Package Initialisation and Options} %Provides additional long styles. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{glossary-longextra}[2020/04/01 v1.45 (NLCT)] % \end{macrocode} %Load required packages. % \begin{macrocode} \RequirePackage{glossary-longbooktabs} % \end{macrocode} % %\begin{macro}{\glslongextraNameFmt} %\changes{1.37}{2018-11-30}{new} %\changes{1.38}{2018-12-01}{bug fix: removed double param} %\begin{definition} %\cs{glslongextraNameFmt}\marg{label} %\end{definition} %Governs the way the name is displayed. % \begin{macrocode} \newcommand{\glslongextraNameFmt}[1]{% \glsentryitem{#1}\glstarget{#1}{\glossentryname{#1}}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraDescFmt} %\changes{1.37}{2018-11-30}{new} %\begin{definition} %\cs{glslongextraDescFmt}\marg{label} %\end{definition} %Governs the way the description is displayed. % \begin{macrocode} \newcommand{\glslongextraDescFmt}[1]{% \glossentrydesc{#1}\glspostdescription } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraSymbolFmt} %\changes{1.37}{2018-11-30}{new} %\begin{definition} %\cs{glslongextraSymbolFmt}\marg{label} %\end{definition} %Governs the way the symbol is displayed. % \begin{macrocode} \newcommand{\glslongextraSymbolFmt}[1]{\glossentrysymbol{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraLocationFmt} %\changes{1.37}{2018-11-30}{new} %\begin{definition} %\cs{glslongextraLocationFmt}\marg{label}\marg{location list} %\end{definition} %Governs the way the location is displayed. % \begin{macrocode} \newcommand{\glslongextraLocationFmt}[2]{#2} % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraSubNameFmt} %\changes{1.37}{2018-11-30}{new} %\begin{definition} %\cs{glslongextraSubNameFmt}\marg{level}\marg{label} %\end{definition} %Governs the way the child name is displayed. Just does the %sub-entry counter, if enabled, and the target. % \begin{macrocode} \newcommand{\glslongextraSubNameFmt}[2]{% \glssubentryitem{#2}\glstarget{#2}{\strut}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraSubDescFmt} %\changes{1.37}{2018-11-30}{new} %\begin{definition} %\cs{glslongextraSubDescFmt}\marg{level}\marg{label} %\end{definition} %Governs the way the child description is displayed. % \begin{macrocode} \newcommand{\glslongextraSubDescFmt}[2]{% \glslongextraDescFmt{#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraSubSymbolFmt} %\changes{1.37}{2018-11-30}{new} %\begin{definition} %\cs{glslongextraSubSymbolFmt}\marg{level}\marg{label} %\end{definition} %Governs the way the child symbol is displayed. % \begin{macrocode} \newcommand{\glslongextraSubSymbolFmt}[2]{% \glslongextraSymbolFmt{#2}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraSubLocationFmt} %\changes{1.37}{2018-11-30}{new} %\begin{definition} %\cs{glslongextraSubLocationFmt}\marg{level}\marg{label}\marg{location list} %\end{definition} %Governs the way the child location list is displayed. % \begin{macrocode} \newcommand{\glslongextraSubLocationFmt}[3]{#3} % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraNameAlign} %\changes{1.37}{2018-11-30}{new} %Alignment for the name column. % \begin{macrocode} \newcommand{\glslongextraNameAlign}{l} % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraDescAlign} %\changes{1.37}{2018-11-30}{new} %Alignment for the description column. % \begin{macrocode} \newcommand{\glslongextraDescAlign}{>{\raggedright}p{\glsdescwidth}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraSymbolAlign} %\changes{1.37}{2018-11-30}{new} %Alignment for the symbol column. % \begin{macrocode} \newcommand{\glslongextraSymbolAlign}{c} % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraLocationAlign} %\changes{1.37}{2018-11-30}{new} %Alignment for the location column. % \begin{macrocode} \newcommand{\glslongextraLocationAlign}{>{\raggedright}p{\glspagelistwidth}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraGroupHeading} %\changes{1.37}{2018-11-30}{new} %Used to format the letter group headings. The first argument is the %number of columns in the table. The second is the group %\emph{label} (not the title). % \begin{macrocode} \newcommand{\glslongextraGroupHeading}[2]{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraHeaderFormat} %\changes{1.37}{2018-11-30}{new} %Format for the column headers. % \begin{macrocode} \newcommand{\glslongextraHeaderFmt}[1]{\textbf{#1}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraNameDescHeader} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraNameDescHeader}{% \glslongextraNameDescTabularHeader\endhead \glslongextraNameDescTabularFooter\endfoot } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraNameDescTabularHeader} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraNameDescTabularHeader}{% \toprule \glslongextraHeaderFmt\entryname & \glslongextraHeaderFmt\descriptionname\tabularnewline \midrule } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraNameDescTabularFooter} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraNameDescTabularFooter}{% \bottomrule } % \end{macrocode} %\end{macro} % %Unlike the \glostyle{alttree} style, there aren't different widths %for the hierarchical levels. %\begin{macro}{\glslongextraSetWidest} %\changes{1.37}{2018-11-30}{new} %Provide in case the tree styles haven't been loaded. % \begin{macrocode} \newcommand*{\glslongextraSetWidest}[1]{% \def\@glslongextrawidestname{#1}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glslongextrawidestname} %\changes{1.37}{2018-11-30}{new} %Pick up the widest name from the \glostyle{alttree} style if it has %been set. (Will expand to nothing otherwise.) % \begin{macrocode} \newcommand*{\@glslongextrawidestname}{\csuse{@glswidestname}} % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraUpdateWidest} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand*{\glslongextraUpdateWidest}[1]{% \ifundef\@glslongextrawidestname {\def\@glslongextrawidestname{#1}}% {% \settowidth{\dimen@}{\@glslongextrawidestname}% \settowidth{\dimen@ii}{#1}% \ifdim\dimen@ii>\dimen@ \def\@glslongextrawidestname{#1}% \fi }% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraUpdateWidestChild} %\changes{1.37}{2018-11-30}{new} %\begin{definition} %\cs{glslongextraUpdateWidestChild}\marg{level}\marg{text} %\end{definition} %Used by \cs{glsxtrSetWidest} in \sty{glossaries-extra-bib2gls}. %Does nothing by default, since the default action in these styles %is to omit the child name. If the child name should be displayed, %then this needs to be redefined to use %\cs{glslongextraUpdateWidest}. % \begin{macrocode} \newcommand*{\glslongextraUpdateWidestChild}[2]{} % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraSetDescWidth} %\changes{1.37}{2018-11-30}{new} % Computes the value of \cs{glsdescwidth} for the styles that only % have name and description columns. % \begin{macrocode} \newcommand{\glslongextraSetDescWidth}{% \settowidth{\gls@tmplen}{\glslongextraHeaderFmt\entryname}% % \end{macrocode} % Has the widest name been set. % \begin{macrocode} \settowidth{\dimen@}{\glsnamefont{\@glslongextrawidestname}}% \ifdim\dimen@>\gls@tmplen \gls@tmplen=\dimen@ \fi % \end{macrocode} % Description width is \cs{linewidth} less 4\cs{tabcolsep} less the % width of the name column. % \begin{macrocode} \setlength{\glsdescwidth}{\dimexpr\linewidth-4\tabcolsep-\gls@tmplen}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraSymSetDescWidth} %\changes{1.37}{2018-11-30}{new} % Computes the value of \cs{glsdescwidth} for the styles that only % have name, symbol and description columns. % \begin{macrocode} \newcommand{\glslongextraSymSetDescWidth}{% % \end{macrocode} % Work out the size for just the name and description style. % \begin{macrocode} \glslongextraSetDescWidth % \end{macrocode} % Now work out the symbol column width. This is assuming that the % column title will be the widest text in the column. % \begin{macrocode} \settowidth{\gls@tmplen}{\glslongextraHeaderFmt\symbolname}% % \end{macrocode} % Subtract 2\cs{tabcolsep} and the symbol header width. % \begin{macrocode} \setlength{\glsdescwidth}{\dimexpr\glsdescwidth-2\tabcolsep-\gls@tmplen}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraLocSetDescWidth} %\changes{1.37}{2018-11-30}{new} % Computes the value of \cs{glsdescwidth} for the styles that only % have name, location and description columns. % \begin{macrocode} \newcommand{\glslongextraLocSetDescWidth}{% % \end{macrocode} % Work out the size for just the name and description style. % \begin{macrocode} \glslongextraSetDescWidth % \end{macrocode} % Subtract 2\cs{tabcolsep} and the location list column width. % \begin{macrocode} \setlength{\glsdescwidth}{\dimexpr\glsdescwidth-2\tabcolsep-\glspagelistwidth}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraSymLocSetDescWidth} %\changes{1.37}{2018-11-30}{new} % Computes the value of \cs{glsdescwidth} for the styles that % have name, symbol, location and description columns. % \begin{macrocode} \newcommand{\glslongextraSymLocSetDescWidth}{% % \end{macrocode} % Work out the size for just the name, symbol and description style. % \begin{macrocode} \glslongextraSymSetDescWidth % \end{macrocode} % Subtract 2\cs{tabcolsep} and the location list column width. % \begin{macrocode} \setlength{\glsdescwidth}{\dimexpr\glsdescwidth-2\tabcolsep-\glspagelistwidth}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\ifGlsLongExtraUseTabular} %\changes{1.37}{2018-11-30}{new} %If true use \env{tabular} instead of \env{longtable}. Obviously %only intended for short glossaries that can fit into a single page. % \begin{macrocode} \newif\ifGlsLongExtraUseTabular \GlsLongExtraUseTabularfalse % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraTabularVAlign} %\changes{1.37}{2018-11-30}{new} %Only used with the \env{tabular} setting. % \begin{macrocode} \newcommand*{\glslongextraTabularVAlign}{c} % \end{macrocode} %\end{macro} %\begin{abbrvstyle}{long-name-desc} %\changes{1.37}{2018-11-30}{new} %Two column style with multi-lined descriptions and header. %This is similar to the \glostyle{longragged-booktabs} style. % \begin{macrocode} \newglossarystyle{long-name-desc}% {% \ifGlsLongExtraUseTabular \renewenvironment{theglossary}% {% \glslongextraSetDescWidth \edef\@glslongextra@begintab{% \noexpand\begin{tabular}[\glslongextraTabularVAlign]{% \expandonce\glslongextraNameAlign \expandonce\glslongextraDescAlign}}% \@glslongextra@begintab }% {% \glslongextraNameDescTabularFooter \end{tabular}% }% \renewcommand*{\glossaryheader}{\glslongextraNameDescTabularHeader}% \else \renewenvironment{theglossary}% {% \glspatchLToutput \glslongextraSetDescWidth \edef\@glslongextra@begintab{% \noexpand\begin{longtable}{% \expandonce\glslongextraNameAlign \expandonce\glslongextraDescAlign}}% \@glslongextra@begintab }% {\end{longtable}}% \renewcommand*{\glossaryheader}{\glslongextraNameDescHeader}% \fi \renewcommand*{\glsgroupheading}[1]{\glslongextraGroupHeading{2}{##1}}% \renewcommand{\glossentry}[2]{% \glslongextraNameFmt{##1} & \glslongextraDescFmt{##1}\tabularnewline }% \renewcommand{\subglossentry}[3]{% \glslongextraSubNameFmt{##1}{##2} & \glslongextraSubDescFmt{##1}{##2}% \tabularnewline }% \ifglsnogroupskip \renewcommand*{\glsgroupskip}{}% \else \renewcommand*{\glsgroupskip}{\glspenaltygroupskip}% \fi } % \end{macrocode} %\end{abbrvstyle} % %\begin{macro}{\glslongextraNameDescLocationHeader} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraNameDescLocationHeader}{% \glslongextraNameDescLocationTabularHeader\endhead \glslongextraNameDescLocationTabularFooter\endfoot } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraNameDescLocationTabularHeader} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraNameDescLocationTabularHeader}{% \toprule \glslongextraHeaderFmt\entryname & \glslongextraHeaderFmt\descriptionname & \glslongextraHeaderFmt\pagelistname\tabularnewline \midrule } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraNameDescLocationTabularFooter} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraNameDescLocationTabularFooter}{% \bottomrule } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{long-name-desc-loc} %\changes{1.37}{2018-11-30}{new} %Three columns: name, description and location list. % \begin{macrocode} \newglossarystyle{long-name-desc-loc}% {% \ifGlsLongExtraUseTabular \renewenvironment{theglossary}% {% \glslongextraLocSetDescWidth \edef\@glslongextra@begintab{% \noexpand\begin{tabular}[\glslongextraTabularVAlign]{% \expandonce\glslongextraNameAlign \expandonce\glslongextraDescAlign \expandonce\glslongextraLocationAlign }}% \@glslongextra@begintab }% {% \glslongextraNameDescLocationTabularFooter \end{tabular}% }% \renewcommand*{\glossaryheader}{\glslongextraNameDescLocationTabularHeader}% \else \renewenvironment{theglossary}% {% \glspatchLToutput \glslongextraLocSetDescWidth \edef\@glslongextra@begintab{% \noexpand\begin{longtable}{% \expandonce\glslongextraNameAlign \expandonce\glslongextraDescAlign \expandonce\glslongextraLocationAlign }}% \@glslongextra@begintab }% {\end{longtable}}% \renewcommand*{\glossaryheader}{\glslongextraNameDescLocationHeader}% \fi \renewcommand*{\glsgroupheading}[1]{\glslongextraGroupHeading{3}{##1}}% \renewcommand{\glossentry}[2]{% \glslongextraNameFmt{##1} & \glslongextraDescFmt{##1} & \glslongextraLocationFmt{##1}{##2}\tabularnewline }% \renewcommand{\subglossentry}[3]{% \glslongextraSubNameFmt{##1}{##2}& \glslongextraSubDescFmt{##1}{##2}& \glslongextraSubLocationFmt{##1}{##2}{##3}% \tabularnewline }% \ifglsnogroupskip \renewcommand*{\glsgroupskip}{}% \else \renewcommand*{\glsgroupskip}{\glspenaltygroupskip}% \fi } % \end{macrocode} %\end{abbrvstyle} % %\begin{macro}{\glslongextraDescNameHeader} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraDescNameHeader}{% \glslongextraDescNameTabularHeader\endhead \glslongextraDescNameTabularFooter\endfoot } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraDescNameTabularHeader} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraDescNameTabularHeader}{% \toprule \glslongextraHeaderFmt\descriptionname& \glslongextraHeaderFmt\entryname \tabularnewline \midrule } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraDescNameTabularFooter} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraDescNameTabularFooter}{% \bottomrule } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{long-desc-name} %\changes{1.37}{2018-11-30}{new} %Like \glostyle{name-desc} but swaps the columns. % \begin{macrocode} \newglossarystyle{long-desc-name}% {% \ifGlsLongExtraUseTabular \renewenvironment{theglossary}% {% \glslongextraSetDescWidth \edef\@glslongextra@begintab{% \noexpand\begin{tabular}[\glslongextraTabularVAlign]{% \expandonce\glslongextraDescAlign \expandonce\glslongextraNameAlign}}% \@glslongextra@begintab }% {% \glslongextraDescNameTabularFooter \end{tabular}% }% \renewcommand*{\glossaryheader}{\glslongextraDescNameTabularHeader}% \else \renewenvironment{theglossary}% {% \glspatchLToutput \glslongextraSetDescWidth \edef\@glslongextra@begintab{% \noexpand\begin{longtable}{% \expandonce\glslongextraDescAlign \expandonce\glslongextraNameAlign}}% \@glslongextra@begintab }% {\end{longtable}}% \renewcommand*{\glossaryheader}{\glslongextraDescNameHeader}% \fi \renewcommand*{\glsgroupheading}[1]{\glslongextraGroupHeading{2}{##1}}% \renewcommand{\glossentry}[2]{% \glslongextraDescFmt{##1} & \glslongextraNameFmt{##1}\tabularnewline }% \renewcommand{\subglossentry}[3]{% \glslongextraSubDescFmt{##1}{##2} & \glslongextraSubNameFmt{##1}{##2}\tabularnewline }% \ifglsnogroupskip \renewcommand*{\glsgroupskip}{}% \else \renewcommand*{\glsgroupskip}{\glspenaltygroupskip}% \fi } % \end{macrocode} %\end{abbrvstyle} % %\begin{macro}{\glslongextraLocationDescNameHeader} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraLocationDescNameHeader}{% \glslongextraLocationDescNameTabularHeader\endhead \glslongextraLocationDescNameTabularFooter\endfoot } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraLocationDescNameTabularHeader} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraLocationDescNameTabularHeader}{% \toprule \glslongextraHeaderFmt\pagelistname& \glslongextraHeaderFmt\descriptionname& \glslongextraHeaderFmt\entryname \tabularnewline \midrule } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraLocationDescNameTabularFooter} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraLocationDescNameTabularFooter}{% \bottomrule } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{long-loc-desc-name} %\changes{1.37}{2018-11-30}{new} %Three columns: location, description and name. % \begin{macrocode} \newglossarystyle{long-loc-desc-name}% {% \ifGlsLongExtraUseTabular {% \glslongextraLocSetDescWidth \edef\@glslongextra@begintab{% \noexpand\begin{tabular}[\glslongextraTabularVAlign]{% \expandonce\glslongextraLocationAlign \expandonce\glslongextraDescAlign \expandonce\glslongextraNameAlign}}% \@glslongextra@begintab }% {% \glslongextraLocationDescNameTabularFooter \end{tabular}% }% \renewcommand*{\glossaryheader}{\glslongextraLocationDescNameTabularHeader}% \else \renewenvironment{theglossary}% {% \glspatchLToutput \glslongextraLocSetDescWidth \edef\@glslongextra@begintab{% \noexpand\begin{longtable}{% \expandonce\glslongextraLocationAlign \expandonce\glslongextraDescAlign \expandonce\glslongextraNameAlign}}% \@glslongextra@begintab }% {\end{longtable}}% \renewcommand*{\glossaryheader}{\glslongextraLocationDescNameHeader}% \fi \renewcommand*{\glsgroupheading}[1]{\glslongextraGroupHeading{3}{##1}}% \renewcommand{\glossentry}[2]{% \glslongextraLocationFmt{##1}{##2} & \glslongextraDescFmt{##1} & \glslongextraNameFmt{##1}\tabularnewline }% \renewcommand{\subglossentry}[3]{% \glslongextraSubLocationFmt{##1}{##2}{##3} & \glslongextraSubDescFmt{##1}{##2} & \glslongextraSubNameFmt{##1}{##2}\tabularnewline }% \ifglsnogroupskip \renewcommand*{\glsgroupskip}{}% \else \renewcommand*{\glsgroupskip}{\glspenaltygroupskip}% \fi } % \end{macrocode} %\end{abbrvstyle} % %\begin{macro}{\glslongextraNameDescSymHeader} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraNameDescSymHeader}{% \glslongextraNameDescSymTabularHeader\endhead \glslongextraNameDescSymTabularFooter\endfoot } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraNameDescSymTabularHeader} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraNameDescSymTabularHeader}{% \toprule \glslongextraHeaderFmt\entryname & \glslongextraHeaderFmt\descriptionname & \glslongextraHeaderFmt\symbolname\tabularnewline \midrule } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraNameDescSymTabularFooter} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraNameDescSymTabularFooter}{% \bottomrule } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{long-name-desc-sym} %\changes{1.37}{2018-11-30}{new} %Three column style with symbol in the third column. % \begin{macrocode} \newglossarystyle{long-name-desc-sym}% {% \ifGlsLongExtraUseTabular \renewenvironment{theglossary}% {% \glslongextraSymSetDescWidth \edef\@glslongextra@begintab{% \noexpand\begin{tabular}[\glslongextraTabularVAlign]{% \expandonce\glslongextraNameAlign \expandonce\glslongextraDescAlign \expandonce\glslongextraSymbolAlign }}% \@glslongextra@begintab }% {% \glslongextraNameDescSymTabularFooter \end{tabular}% }% \renewcommand*{\glossaryheader}{\glslongextraNameDescSymTabularHeader}% \else \renewenvironment{theglossary}% {% \glspatchLToutput \glslongextraSymSetDescWidth \edef\@glslongextra@begintab{% \noexpand\begin{longtable}{% \expandonce\glslongextraNameAlign \expandonce\glslongextraDescAlign \expandonce\glslongextraSymbolAlign }}% \@glslongextra@begintab }% {\end{longtable}}% \renewcommand*{\glossaryheader}{\glslongextraNameDescSymHeader}% \fi \renewcommand*{\glsgroupheading}[1]{\glslongextraGroupHeading{3}{##1}}% \renewcommand{\glossentry}[2]{% \glslongextraNameFmt{##1} & \glslongextraDescFmt{##1} & \glslongextraSymbolFmt{##1}\tabularnewline }% \renewcommand{\subglossentry}[3]{% \glslongextraSubNameFmt{##1}{##2} & \glslongextraSubDescFmt{##1}{##2} & \glslongextraSubSymbolFmt{##1}{##2}% \tabularnewline }% \ifglsnogroupskip \renewcommand*{\glsgroupskip}{}% \else \renewcommand*{\glsgroupskip}{\glspenaltygroupskip}% \fi } % \end{macrocode} %\end{abbrvstyle} % %\begin{macro}{\glslongextraNameDescSymLocationHeader} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraNameDescSymLocationHeader}{% \glslongextraNameDescSymLocationTabularHeader\endhead \glslongextraNameDescSymLocationTabularFooter\endfoot } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraNameDescSymLocationTabularHeader} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraNameDescSymLocationTabularHeader}{% \toprule \glslongextraHeaderFmt\entryname & \glslongextraHeaderFmt\descriptionname & \glslongextraHeaderFmt\symbolname & \glslongextraHeaderFmt\pagelistname\tabularnewline \midrule } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraNameDescSymLocationTabularFooter} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraNameDescSymLocationTabularFooter}{% \bottomrule } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{long-name-desc-sym-loc} %\changes{1.37}{2018-11-30}{new} %Four columns: name, description and location % \begin{macrocode} \newglossarystyle{long-name-desc-sym-loc}% {% \ifGlsLongExtraUseTabular \renewenvironment{theglossary}% {% \glslongextraSymLocSetDescWidth \edef\@glslongextra@begintab{% \noexpand\begin{tabular}[\glslongextraTabularVAlign]{% \expandonce\glslongextraNameAlign \expandonce\glslongextraDescAlign \expandonce\glslongextraSymbolAlign \expandonce\glslongextraLocationAlign }}% \@glslongextra@begintab }% {% \glslongextraNameDescSymLocationTabularFooter \end{tabular}% }% \renewcommand*{\glossaryheader}{\glslongextraNameDescSymLocationTabularHeader}% \else \renewenvironment{theglossary}% {% \glspatchLToutput \glslongextraSymLocSetDescWidth \edef\@glslongextra@begintab{% \noexpand\begin{longtable}{% \expandonce\glslongextraNameAlign \expandonce\glslongextraDescAlign \expandonce\glslongextraSymbolAlign \expandonce\glslongextraLocationAlign }}% \@glslongextra@begintab }% {\end{longtable}}% \renewcommand*{\glossaryheader}{\glslongextraNameDescSymLocationHeader}% \fi \renewcommand*{\glsgroupheading}[1]{\glslongextraGroupHeading{4}{##1}}% \renewcommand{\glossentry}[2]{% \glslongextraNameFmt{##1} & \glslongextraDescFmt{##1} & \glslongextraSymbolFmt{##1}& \glslongextraLocationFmt{##1}{##2}\tabularnewline }% \renewcommand{\subglossentry}[3]{% \glslongextraSubNameFmt{##1}{##2} & \glslongextraSubDescFmt{##1}{##2} & \glslongextraSubSymbolFmt{##1}{##2}& \glslongextraSubLocationFmt{##1}{##2}{##3}% \tabularnewline }% \ifglsnogroupskip \renewcommand*{\glsgroupskip}{}% \else \renewcommand*{\glsgroupskip}{\glspenaltygroupskip}% \fi } % \end{macrocode} %\end{abbrvstyle} % %\begin{macro}{\glslongextraNameSymDescHeader} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraNameSymDescHeader}{% \glslongextraNameSymDescTabularHeader\endhead \glslongextraNameSymDescTabularFooter\endfoot } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraNameSymDescTabularHeader} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraNameSymDescTabularHeader}{% \toprule \glslongextraHeaderFmt\entryname & \glslongextraHeaderFmt\symbolname & \glslongextraHeaderFmt\descriptionname\tabularnewline \midrule } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraNameSymDescTabularFooter} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraNameSymDescTabularFooter}{% \bottomrule } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{long-name-sym-desc} %\changes{1.37}{2018-11-30}{new} %Three column style with symbol in the second column. % \begin{macrocode} \newglossarystyle{long-name-sym-desc}% {% \ifGlsLongExtraUseTabular \renewenvironment{theglossary}% {% \glslongextraSymSetDescWidth \edef\@glslongextra@begintab{% \noexpand\begin{tabular}[\glslongextraTabularVAlign]{% \expandonce\glslongextraNameAlign \expandonce\glslongextraSymbolAlign \expandonce\glslongextraDescAlign }}% \@glslongextra@begintab }% {% \glslongextraNameSymDescTabularFooter \end{tabular}% }% \renewcommand*{\glossaryheader}{\glslongextraNameSymDescTabularHeader}% \else \renewenvironment{theglossary}% {% \glspatchLToutput \glslongextraSymSetDescWidth \edef\@glslongextra@begintab{% \noexpand\begin{longtable}{% \expandonce\glslongextraNameAlign \expandonce\glslongextraSymbolAlign \expandonce\glslongextraDescAlign }}% \@glslongextra@begintab }% {\end{longtable}}% \renewcommand*{\glossaryheader}{\glslongextraNameSymDescHeader}% \fi \renewcommand*{\glsgroupheading}[1]{\glslongextraGroupHeading{3}{##1}}% \renewcommand{\glossentry}[2]{% \glslongextraNameFmt{##1} & \glslongextraSymbolFmt{##1} & \glslongextraDescFmt{##1}\tabularnewline }% \renewcommand{\subglossentry}[3]{% \glslongextraSubNameFmt{##1}{##2} & \glslongextraSubSymbolFmt{##1}{##2} & \glslongextraSubDescFmt{##1}{##2}\tabularnewline }% \ifglsnogroupskip \renewcommand*{\glsgroupskip}{}% \else \renewcommand*{\glsgroupskip}{\glspenaltygroupskip}% \fi } % \end{macrocode} %\end{abbrvstyle} % %\begin{macro}{\glslongextraNameSymDescLocationHeader} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraNameSymDescLocationHeader}{% \glslongextraNameSymDescLocationTabularHeader\endhead \glslongextraNameSymDescLocationTabularFooter\endfoot } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraNameSymDescLocationTabularHeader} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraNameSymDescLocationTabularHeader}{% \toprule \glslongextraHeaderFmt\entryname & \glslongextraHeaderFmt\symbolname & \glslongextraHeaderFmt\descriptionname & \glslongextraHeaderFmt\pagelistname\tabularnewline \midrule } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraNameSymDescLocationTabularFooter} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraNameSymDescLocationTabularFooter}{% \bottomrule } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{long-name-sym-desc-loc} %\changes{1.37}{2018-11-30}{new} %Four column style with symbol in the second column. % \begin{macrocode} \newglossarystyle{long-name-sym-desc-loc}% {% \ifGlsLongExtraUseTabular \renewenvironment{theglossary}% {% \glslongextraSymLocSetDescWidth \edef\@glslongextra@begintab{% \noexpand\begin{tabular}[\glslongextraTabularVAlign]{% \expandonce\glslongextraNameAlign \expandonce\glslongextraSymbolAlign \expandonce\glslongextraDescAlign \expandonce\glslongextraLocationAlign }}% \@glslongextra@begintab }% {% \glslongextraNameSymDescLocationTabularFooter \end{tabular}% }% \renewcommand*{\glossaryheader}{\glslongextraNameSymDescLocationTabularHeader}% \else \renewenvironment{theglossary}% {% \glspatchLToutput \glslongextraSymLocSetDescWidth \edef\@glslongextra@begintab{% \noexpand\begin{longtable}{% \expandonce\glslongextraNameAlign \expandonce\glslongextraSymbolAlign \expandonce\glslongextraDescAlign \expandonce\glslongextraLocationAlign }}% \@glslongextra@begintab }% {\end{longtable}}% \renewcommand*{\glossaryheader}{\glslongextraNameSymDescLocationHeader}% \fi \renewcommand*{\glsgroupheading}[1]{\glslongextraGroupHeading{4}{##1}}% \renewcommand{\glossentry}[2]{% \glslongextraNameFmt{##1} & \glslongextraSymbolFmt{##1} & \glslongextraDescFmt{##1} & \glslongextraLocationFmt{##1}{##2}\tabularnewline }% \renewcommand{\subglossentry}[3]{% \glslongextraSubNameFmt{##1}{##2} & \glslongextraSubSymbolFmt{##1}{##2} & \glslongextraSubDescFmt{##1}{##2} & \glslongextraSubLocationFmt{##1}{##2}{##3}\tabularnewline }% \ifglsnogroupskip \renewcommand*{\glsgroupskip}{}% \else \renewcommand*{\glsgroupskip}{\glspenaltygroupskip}% \fi } % \end{macrocode} %\end{abbrvstyle} % %\begin{macro}{\glslongextraSymDescNameHeader} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraSymDescNameHeader}{% \glslongextraSymDescNameTabularHeader\endhead \glslongextraSymDescNameTabularFooter\endfoot } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraSymDescNameTabularHeader} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraSymDescNameTabularHeader}{% \toprule \glslongextraHeaderFmt\symbolname & \glslongextraHeaderFmt\descriptionname & \glslongextraHeaderFmt\entryname\tabularnewline \midrule } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraSymDescNameTabularFooter} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraSymDescNameTabularFooter}{% \bottomrule } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{long-sym-desc-name} %\changes{1.37}{2018-11-30}{new} %Three column style with symbol in the first column, description in %the second and name in the third. % \begin{macrocode} \newglossarystyle{long-sym-desc-name}% {% \ifGlsLongExtraUseTabular \renewenvironment{theglossary}% {% \glslongextraSymSetDescWidth \edef\@glslongextra@begintab{% \noexpand\begin{tabular}[\glslongextraTabularVAlign]{% \expandonce\glslongextraSymbolAlign \expandonce\glslongextraDescAlign \expandonce\glslongextraNameAlign }}% \@glslongextra@begintab }% {% \glslongextraSymDescNameTabularFooter \end{tabular}% }% \renewcommand*{\glossaryheader}{\glslongextraSymDescNameTabularHeader}% \else \renewenvironment{theglossary}% {% \glspatchLToutput \glslongextraSymSetDescWidth \edef\@glslongextra@begintab{% \noexpand\begin{longtable}{% \expandonce\glslongextraSymbolAlign \expandonce\glslongextraDescAlign \expandonce\glslongextraNameAlign }}% \@glslongextra@begintab }% {\end{longtable}}% \renewcommand*{\glossaryheader}{\glslongextraSymDescNameHeader}% \fi \renewcommand*{\glsgroupheading}[1]{\glslongextraGroupHeading{3}{##1}}% \renewcommand{\glossentry}[2]{% \glslongextraSymbolFmt{##1} & \glslongextraDescFmt{##1} & \glslongextraNameFmt{##1}\tabularnewline }% \renewcommand{\subglossentry}[3]{% \glslongextraSubSymbolFmt{##1}{##2} & \glslongextraSubDescFmt{##1}{##2} & \glslongextraSubNameFmt{##1}{##2}\tabularnewline }% \ifglsnogroupskip \renewcommand*{\glsgroupskip}{}% \else \renewcommand*{\glsgroupskip}{\glspenaltygroupskip}% \fi } % \end{macrocode} %\end{abbrvstyle} % %\begin{macro}{\glslongextraLocationSymDescNameHeader} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraLocationSymDescNameHeader}{% \glslongextraLocationSymDescNameTabularHeader\endhead \glslongextraLocationSymDescNameTabularFooter\endfoot } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraLocationSymDescNameTabularHeader} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraLocationSymDescNameTabularHeader}{% \toprule \glslongextraHeaderFmt\pagelistname & \glslongextraHeaderFmt\symbolname & \glslongextraHeaderFmt\descriptionname & \glslongextraHeaderFmt\entryname\tabularnewline \midrule } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraLocationSymDescNameTabularFooter} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraLocationSymDescNameTabularFooter}{% \bottomrule } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{long-loc-sym-desc-name} %\changes{1.37}{2018-11-30}{new} %Four column style with location list, symbol, description and name. % \begin{macrocode} \newglossarystyle{long-loc-sym-desc-name}% {% \ifGlsLongExtraUseTabular \renewenvironment{theglossary}% {% \glslongextraSymLocSetDescWidth \edef\@glslongextra@begintab{% \noexpand\begin{tabular}[\glslongextraTabularVAlign]{% \expandonce\glslongextraLocationAlign \expandonce\glslongextraSymbolAlign \expandonce\glslongextraDescAlign \expandonce\glslongextraNameAlign }}% \@glslongextra@begintab }% {% \glslongextraLocationSymDescNameTabularFooter \end{tabular}% }% \renewcommand*{\glossaryheader}{\glslongextraLocationSymDescNameTabularHeader}% \else \renewenvironment{theglossary}% {% \glspatchLToutput \glslongextraSymLocSetDescWidth \edef\@glslongextra@begintab{% \noexpand\begin{longtable}{% \expandonce\glslongextraLocationAlign \expandonce\glslongextraSymbolAlign \expandonce\glslongextraDescAlign \expandonce\glslongextraNameAlign }}% \@glslongextra@begintab }% {\end{longtable}}% \renewcommand*{\glossaryheader}{\glslongextraLocationSymDescNameHeader}% \fi \renewcommand*{\glsgroupheading}[1]{\glslongextraGroupHeading{4}{##1}}% \renewcommand{\glossentry}[2]{% \glslongextraLocationFmt{##1}{##2} & \glslongextraSymbolFmt{##1} & \glslongextraDescFmt{##1} & \glslongextraNameFmt{##1}\tabularnewline }% \renewcommand{\subglossentry}[3]{% \glslongextraSubLocationFmt{##1}{##2}{##3} & \glslongextraSubSymbolFmt{##1}{##2} & \glslongextraSubDescFmt{##1}{##2} & \glslongextraSubNameFmt{##1}{##2}\tabularnewline }% \ifglsnogroupskip \renewcommand*{\glsgroupskip}{}% \else \renewcommand*{\glsgroupskip}{\glspenaltygroupskip}% \fi } % \end{macrocode} %\end{abbrvstyle} % %\begin{macro}{\glslongextraDescSymNameHeader} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraDescSymNameHeader}{% \glslongextraDescSymNameTabularHeader\endhead \glslongextraDescSymNameTabularFooter\endfoot } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraDescSymNameTabularHeader} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraDescSymNameTabularHeader}{% \toprule \glslongextraHeaderFmt\descriptionname & \glslongextraHeaderFmt\symbolname & \glslongextraHeaderFmt\entryname\tabularnewline \midrule } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraDescSymNameTabularFooter} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraDescSymNameTabularFooter}{% \bottomrule } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{long-desc-sym-name} %\changes{1.37}{2018-11-30}{new} %Three column style with description in the first column, symbol in %the second and name in the third. % \begin{macrocode} \newglossarystyle{long-desc-sym-name}% {% \ifGlsLongExtraUseTabular \renewenvironment{theglossary}% {% \glslongextraSymSetDescWidth \edef\@glslongextra@begintab{% \noexpand\begin{tabular}[\glslongextraTabularVAlign]{% \expandonce\glslongextraDescAlign \expandonce\glslongextraSymbolAlign \expandonce\glslongextraNameAlign }}% \@glslongextra@begintab }% {% \glslongextraDescSymNameTabularFooter \end{tabular}% }% \renewcommand*{\glossaryheader}{\glslongextraDescSymNameTabularHeader}% \else \renewenvironment{theglossary}% {% \glspatchLToutput \glslongextraSymSetDescWidth \edef\@glslongextra@begintab{% \noexpand\begin{longtable}{% \expandonce\glslongextraDescAlign \expandonce\glslongextraSymbolAlign \expandonce\glslongextraNameAlign }}% \@glslongextra@begintab }% {\end{longtable}}% \renewcommand*{\glossaryheader}{\glslongextraDescSymNameHeader}% \fi \renewcommand*{\glsgroupheading}[1]{\glslongextraGroupHeading{3}{##1}}% \renewcommand{\glossentry}[2]{% \glslongextraDescFmt{##1} & \glslongextraSymbolFmt{##1} & \glslongextraNameFmt{##1}\tabularnewline }% \renewcommand{\subglossentry}[3]{% \glslongextraSubDescFmt{##1}{##2} & \glslongextraSubSymbolFmt{##1}{##2} & \glslongextraSubNameFmt{##1}{##2}\tabularnewline }% \ifglsnogroupskip \renewcommand*{\glsgroupskip}{}% \else \renewcommand*{\glsgroupskip}{\glspenaltygroupskip}% \fi } % \end{macrocode} %\end{abbrvstyle} % %\begin{macro}{\glslongextraLocationDescSymNameHeader} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraLocationDescSymNameHeader}{% \glslongextraLocationDescSymNameTabularHeader\endhead \glslongextraLocationDescSymNameTabularFooter\endfoot } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraLocationDescSymNameTabularHeader} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraLocationDescSymNameTabularHeader}{% \toprule \glslongextraHeaderFmt\pagelistname & \glslongextraHeaderFmt\descriptionname & \glslongextraHeaderFmt\symbolname & \glslongextraHeaderFmt\entryname\tabularnewline \midrule } % \end{macrocode} %\end{macro} % %\begin{macro}{\glslongextraLocationDescSymNameTabularFooter} %\changes{1.37}{2018-11-30}{new} % \begin{macrocode} \newcommand{\glslongextraLocationDescSymNameTabularFooter}{% \bottomrule } % \end{macrocode} %\end{macro} % %\begin{abbrvstyle}{long-loc-desc-sym-name} %\changes{1.37}{2018-11-30}{new} %Four column style with location list, description, symbol and name. % \begin{macrocode} \newglossarystyle{long-loc-desc-sym-name}% {% \ifGlsLongExtraUseTabular \renewenvironment{theglossary}% {% \glslongextraSymLocSetDescWidth \edef\@glslongextra@begintab{% \noexpand\begin{tabular}[\glslongextraTabularVAlign]{% \expandonce\glslongextraLocationAlign \expandonce\glslongextraDescAlign \expandonce\glslongextraSymbolAlign \expandonce\glslongextraNameAlign }}% \@glslongextra@begintab }% {% \glslongextraLocationDescSymNameTabularFooter \end{tabular}% }% \renewcommand*{\glossaryheader}{\glslongextraLocationDescSymNameTabularHeader}% \else \renewenvironment{theglossary}% {% \glspatchLToutput \glslongextraSymLocSetDescWidth \edef\@glslongextra@begintab{% \noexpand\begin{longtable}{% \expandonce\glslongextraLocationAlign \expandonce\glslongextraDescAlign \expandonce\glslongextraSymbolAlign \expandonce\glslongextraNameAlign }}% \@glslongextra@begintab }% {\end{longtable}}% \renewcommand*{\glossaryheader}{\glslongextraLocationDescSymNameHeader}% \fi \renewcommand*{\glsgroupheading}[1]{\glslongextraGroupHeading{4}{##1}}% \renewcommand{\glossentry}[2]{% \glslongextraLocationFmt{##1}{##2} & \glslongextraDescFmt{##1} & \glslongextraSymbolFmt{##1} & \glslongextraNameFmt{##1}\tabularnewline }% \renewcommand{\subglossentry}[3]{% \glslongextraSubLocationFmt{##1}{##2}{##3} & \glslongextraSubDescFmt{##1}{##2} & \glslongextraSubSymbolFmt{##1}{##2} & \glslongextraSubNameFmt{##1}{##2}\tabularnewline }% \ifglsnogroupskip \renewcommand*{\glsgroupskip}{}% \else \renewcommand*{\glsgroupskip}{\glspenaltygroupskip}% \fi } % \end{macrocode} %\end{abbrvstyle} % %\iffalse % \begin{macrocode} % % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*glossary-topic.sty> % \end{macrocode} %\fi %\chapter{topic styles (\styfmt{glossary-topic.sty})} %\changes{1.40}{2019-03-22}{new} %\section{Package Initialisation and Options} %Provides \qt{topic} styles where top-level entries are considered a %topic. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{glossary-topic}[2020/04/01 v1.45 (NLCT)] % \end{macrocode} %Load required package. % \begin{macrocode} \RequirePackage{multicol} % \end{macrocode} %The top-level entries act like headers. If the top-level entry has a %description it's placed below the name. %\begin{style}{topic} %\changes{1.40}{2019-03-22}{new} % \begin{macrocode} \newglossarystyle{topic}{% \renewenvironment{theglossary}% {% \glstopicInit \def\glstopic@prechildren{}% \def\glstopic@prevlevel{-1}% }% {\par}% \renewcommand*{\glossaryheader}{}% \renewcommand*{\glsgroupheading}[1]{% \def\glstopic@prevlevel{-1}% \glstopicGroupHeading{##1}% }% \renewcommand{\glossentry}[2]{% \hangindent0pt\relax \parindent\glstopicParIndent\relax \glstopicItem{##1}{##2}% % \end{macrocode} %\changes{1.41}{2019-04-09}{added penalty if no description} %If there isn't a description, penalise a page break. % \begin{macrocode} \ifglshasdesc{##1}% {% \def\glstopic@prechildren{}% }% {% \def\glstopic@prechildren{\nopagebreak}% }% }% \renewcommand{\subglossentry}[3]{% \ifnum\glstopic@prevlevel=0\relax\glstopic@prechildren\fi \def\glstopic@prevlevel{##1}% \glstopicAssignSubIndent{##1}% \glstopicSubItem{##1}{##2}{##3}% }% \renewcommand*{\glsgroupskip}{}% } % \end{macrocode} %\end{style} %\begin{macro}{\glstopicGroupHeading} %\changes{1.40}{2019-03-22}{new} %\begin{definition} %\cs{glstopicGroupHeading}\marg{group label} %\end{definition} %May be redefined if letter group headings are required. For %example: %\begin{verbatim} %\renewcommand*{\glstopicGroupHeading}[1]{% % \glsxtrgetgrouptitle{#1}{\thisgrptitle}% % \section*{\thisgrptitle}% %} %\end{verbatim} % \begin{macrocode} \newcommand*{\glstopicGroupHeading}[1]{} % \end{macrocode} %\end{macro} %\begin{macro}{\glstopicItem} %\changes{1.40}{2019-03-22}{new} %\begin{definition} %\cs{glstopicItem}\marg{label}\marg{location list} %\end{definition} % \begin{macrocode} \newcommand*{\glstopicItem}[2]{% \glspar\glstopicPreSkip\glspar\noindent \glstopicMarker{#1}% \glstopicTitleFont {% \glsentryitem{#1}\glstarget{#1}{\glstopicTitle{#1}}% }% \ifglshasdesc{#1}% {\glspar\nobreak\glstopicMidSkip\glspar\nobreak \@afterheading\glstopicDesc{#1}\glspar\glstopicPostSkip}% {\glspar\nobreak\glstopicPostSkip}% \glstopicLoc{#1}{#2}% } % \end{macrocode} %\end{macro} %\begin{macro}{\glstopicMarker} %\changes{1.40}{2019-03-22}{new} % May be used to insert a bookmark etc if required. % \begin{macrocode} \newcommand*{\glstopicMarker}[1]{} % \end{macrocode} %\end{macro} %\begin{macro}{\glstopicName} %\changes{1.40}{2019-03-22}{new} % \begin{macrocode} \newcommand*{\glstopicTitle}[1]{\Glossentryname{#1}% \ifglshassymbol{#1}{\space(\glossentrysymbol{#1})}{}% } % \end{macrocode} %\end{macro} %\begin{macro}{\glstopicTitleFont} %\changes{1.40}{2019-03-22}{new} % \begin{macrocode} \newcommand*{\glstopicTitleFont}[1]{\textbf{\large #1}} % \end{macrocode} %\end{macro} %\begin{macro}{\glstopicDesc} %\changes{1.40}{2019-03-22}{new} % \begin{macrocode} \newcommand*{\glstopicDesc}[1]{\Glossentrydesc{#1}\glspostdescription} % \end{macrocode} %\end{macro} %\begin{macro}{\glstopicLoc} %\changes{1.40}{2019-03-22}{new} % \begin{macrocode} \newcommand*{\glstopicLoc}[2]{} % \end{macrocode} %\end{macro} %\begin{macro}{\glstopicParIndent} %\changes{1.40}{2019-03-22}{new} % \begin{macrocode} \newlength\glstopicParIndent \setlength\glstopicParIndent{20pt} % \end{macrocode} %\end{macro} %\begin{macro}{\glstopicSubIndent} %\changes{1.40}{2019-03-22}{new} % \begin{macrocode} \newlength\glstopicSubIndent \setlength\glstopicSubIndent{20pt} % \end{macrocode} %\end{macro} %\begin{macro}{\glstopicInit} %\changes{1.40}{2019-03-22}{new} % \begin{macrocode} \newcommand{\glstopicInit}{} % \end{macrocode} %\end{macro} %\begin{macro}{\glstopicAssignSubIndent} %\changes{1.40}{2019-03-22}{new} %\begin{definition} %\cs{glstopicAssignSubIndent}\marg{level} %\end{definition} %Used to set the indentation for sub-levels. % \begin{macrocode} \newcommand*{\glstopicAssignSubIndent}[1]{% % \end{macrocode} %\changes{1.41}{2019-04-09}{moved \cs{par} from \cs{glstopicSubItem}} % \begin{macrocode} \par \parindent\dimexpr#1\glstopicSubIndent-\glstopicSubIndent\relax \glstopicAssignWidest{#1}% \hangindent\dimexpr\parindent+\glstopicwidest\relax } % \end{macrocode} %\end{macro} % %\begin{macro}{\glstopicwidest} %\changes{1.40}{2019-03-22}{new} % \begin{macrocode} \newlength\glstopicwidest % \end{macrocode} %\end{macro} % %\begin{macro}{\glstopicAssignWidest} %\changes{1.40}{2019-03-22}{new} %\begin{definition} %\cs{glstopicAssignWidest}\marg{level} %\end{definition} %Used in the definition of \cs{glstopicAssignSubIndent} %to set the indentation from the widest name for the given %level. This will require \sty{glossary-tree} to set the values. % \begin{macrocode} \newcommand*{\glstopicAssignWidest}[1]{% \ifcsundef{@glswidestlength\romannumeral#1}% {% \ifcsdef{@glswidestname\romannumeral#1}% {% \settowidth{\glstopicwidest}{% \glstopicSubNameFont{\csuse{@glswidestname\romannumeral#1}}% \glstopicSubItemSep }% }% {\setlength{\glstopicwidest}{0pt}}% % \end{macrocode} %Save the value so that it doesn't have to keep being recalculated. % \begin{macrocode} \csedef{@glswidestlength\romannumeral#1}{\the\glstopicwidest}% }% {\setlength{\glstopicwidest}{\csuse{@glswidestlength\romannumeral#1}}}% } % \end{macrocode} %\end{macro} % % %\begin{macro}{\glstopicPreSkip} %\changes{1.40}{2019-03-22}{new} % \begin{macrocode} \newcommand*{\glstopicPreSkip}{\medskip} % \end{macrocode} %\end{macro} %\begin{macro}{\glstopicMidSkip} %\changes{1.40}{2019-03-22}{new} % \begin{macrocode} \newcommand*{\glstopicMidSkip}{\smallskip} % \end{macrocode} %\end{macro} %\begin{macro}{\glstopicPostSkip} %\changes{1.40}{2019-03-22}{new} % \begin{macrocode} \newcommand*{\glstopicPostSkip}{\smallskip} % \end{macrocode} %\end{macro} %\begin{macro}{\glstopicSubItem} %\changes{1.40}{2019-03-22}{new} %\begin{definition} %\cs{glstopicSubItem}\marg{level}\marg{label}\marg{location list} %\end{definition} % \begin{macrocode} \newcommand*{\glstopicSubItem}[3]{% % \end{macrocode} %\changes{1.41}{2019-04-09}{moved \cs{par} to \cs{glstopicAssignSubIndent}} % \begin{macrocode} \glstopicSubItemBox{#1}{\glstopicSubNameFont{\glsentryitem{#2}% \glstarget{#2}{\glossentryname{#2}}}% \glstopicSubItemSep }% \ifglshassymbol{#2}{(\glossentrysymbol{#2})\space}{}% % \end{macrocode} %\changes{1.41}{2019-04-09}{added check for description} % \begin{macrocode} \ifglshasdesc{#2}% {\glossentrydesc{#2}\glspostdescription\glstopicSubPreLocSep}{}% \glstopicSubLoc{#2}{#3}% } % \end{macrocode} %\end{macro} %\begin{macro}{\glstopicSubItemSep} %\changes{1.40}{2019-03-22}{new} % \begin{macrocode} \newcommand*{\glstopicSubItemSep}{\quad} % \end{macrocode} %\end{macro} %\begin{macro}{\glstopicSubItemBox} %\changes{1.40}{2019-03-22}{new} %\begin{definition} %\cs{glstopicSubItemBox}\marg{level}\marg{text} %\end{definition} % \begin{macrocode} \newcommand*{\glstopicSubItemBox}[2]{% \ifdim\glstopicwidest>0pt\relax\makebox[\glstopicwidest][l]{#2}\else#2\fi } % \end{macrocode} %\end{macro} %\begin{macro}{\glstopicSubNameFont} %\changes{1.40}{2019-03-22}{new} % \begin{macrocode} \newcommand*{\glstopicSubNameFont}[1]{\textbf{#1}} % \end{macrocode} %\end{macro} %\begin{macro}{\glstopicSubPreLocSep} %\changes{1.41}{2019-04-09}{new} % \begin{macrocode} \newcommand*{\glstopicSubPreLocSep}{\space} % \end{macrocode} %\end{macro} %\begin{macro}{\glstopicSubLoc} %\changes{1.40}{2019-03-22}{new} %\changes{1.41}{2019-04-09}{moved \cs{space} to \cs{glstopicSubPreLocSep}} % \begin{macrocode} \newcommand*{\glstopicSubLoc}[2]{#2} % \end{macrocode} %\end{macro} % %\begin{macro}{\glstopicCols} %\changes{1.40}{2019-03-22}{new} % \begin{macrocode} \newcommand*{\glstopicCols}{2} % \end{macrocode} %\end{macro} % %\begin{macro}{\glstopicColsEnv} %\changes{1.40}{2019-03-22}{new} % \begin{macrocode} \newcommand*{\glstopicColsEnv}{multicols} % \end{macrocode} %\end{macro} % %\begin{style}{topicmcols} %\changes{1.40}{2019-03-22}{new} % \begin{macrocode} \newglossarystyle{topicmcols}{% \renewenvironment{theglossary}% {% \glstopicInit \def\glstopic@prechildren{}% \def\glstopic@postchildren{}% \def\glstopic@prevlevel{-1}% }% {% \ifnum\glstopic@prevlevel>0\relax\glstopic@postchildren\fi \par }% \renewcommand*{\glossaryheader}{}% \renewcommand*{\glsgroupheading}[1]{% \ifnum\glstopic@prevlevel>0\relax\glstopic@postchildren\fi \def\glstopic@prevlevel{-1}% \glstopicGroupHeading{##1}% }% \renewcommand{\glossentry}[2]{% \ifnum\glstopic@prevlevel>0\relax\glstopic@postchildren\fi \def\glstopic@prevlevel{0}% \hangindent0pt\relax \parindent\glstopicParIndent\relax \glstopicItem{##1}{##2}% \ifnum\glstopicCols>1\relax % \end{macrocode} %\changes{1.41}{2019-04-09}{added penalty if no description} %If there isn't a description, penalise a page break. % \begin{macrocode} \ifglshasdesc{##1}% {% \edef\glstopic@prechildren{% \noexpand\begin{\glstopicColsEnv}{\glstopicCols}% }% }% {% \edef\glstopic@prechildren{% \noexpand\nopagebreak \noexpand\begin{\glstopicColsEnv}{\glstopicCols}% }% }% \edef\glstopic@postchildren{\noexpand\end{\glstopicColsEnv}}% \fi }% \renewcommand{\subglossentry}[3]{% \ifnum\glstopic@prevlevel=0\relax\glstopic@prechildren\fi \def\glstopic@prevlevel{##1}% \glstopicAssignSubIndent{##1}% \glstopicSubItem{##1}{##2}{##3}% }% \renewcommand*{\glsgroupskip}{}% } % \end{macrocode} %\end{style} %\iffalse % \begin{macrocode} % % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*example-glossaries-xr.tex> % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %< % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*example-glossaries-acronym-desc.bib> % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %< % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*example-glossaries-acronym.bib> % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %< % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*example-glossaries-acronyms-lang.bib> % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %< % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*example-glossaries-brief.bib> % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %< % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*example-glossaries-childnoname.bib> % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %< % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*example-glossaries-cite.bib> % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %< % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*example-glossaries-images.bib> % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %< % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*example-glossaries-long.bib> % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %< % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*example-glossaries-multipar.bib> % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %< % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*example-glossaries-parent.bib> % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %< % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*example-glossaries-symbolnames.bib> % \end{macrocode} %\fi %\iffalse % \begin{macrocode} % Encoding: UTF-8 @entry{sym.alpha, name = {\ensuremath{\alpha}}, description = {Quisque ullamcorper placerat ipsum.} } @entry{sym.beta, name = {\ensuremath{\beta}}, description = {Cras nibh.} } @entry{sym.gamma, name = {\ensuremath{\gamma}}, description = {Morbi vel justo vitae lacus tincidunt ultrices.} } @entry{sym.delta, name = {\ensuremath{\delta}}, description = {Lorem ipsum dolor sit amet, consectetuer adipiscing elit.} } @entry{sym.epsilon, name = {\ensuremath{\epsilon}}, description = {In hac habitasse platea dictumst.} } @entry{sym.zeta, name = {\ensuremath{\zeta}}, description = {Integer tempus convallis augue.} } @entry{sym.eta, name = {\ensuremath{\eta}}, description = {Etiam facilisis.} } @entry{sym.theta, name = {\ensuremath{\theta}}, description = {Nunc elementum fermentum wisi.} } @entry{sym.iota, name = {\ensuremath{i}}, description = {Aenean placerat.} } @entry{sym.kappa, name = {\ensuremath{\kappa}}, description = {Ut imperdiet, enim sed gravida sollicitudin, felis odio placerat quam, ac pulvinar elit purus eget enim.} } @entry{sym.lambda, name = {\ensuremath{\lambda}}, description = {Nunc vitae tortor.} } @entry{sym.mu, name = {\ensuremath{\mu}}, description = {Proin tempus nibh sit amet nisl.} } @entry{sym.nu, name = {\ensuremath{\nu}}, description = {Vivamus quis tortor vitae risus porta vehicula.} } @entry{sym.xi, name = {\ensuremath{\xi}}, description = {Fusce mauris.} } @entry{sym.pi, name = {\ensuremath{\pi}}, description = {Vestibulum luctus nibh at lectus.} } @entry{sym.rho, name = {\ensuremath{\rho}}, description = {Sed bibendum, nulla a faucibus semper, leo velit ultricies tellus, ac venenatis arcu wisi vel nisl. Vestibulum diam.} } @entry{sym.sigma, name = {\ensuremath{\sigma}}, description = {Aliquam pellentesque, augue quis sagittis posuere, turpis lacus congue quam, in hendrerit risus eros eget felis.} } @entry{sym.tau, name = {\ensuremath{\tau}}, description = {Maecenas eget erat in sapien mattis porttitor.} } @entry{sym.upsilon, name = {\ensuremath{\upsilon}}, description = {Vestibulum porttitor.} } @entry{sym.phi, name = {\ensuremath{\phi}}, description = {Nulla facilisi.} } @entry{sym.chi, name = {\ensuremath{\chi}}, description = {Sed a turpis eu lacus commodo facilisis.} } @entry{sym.psi, name = {\ensuremath{\psi}}, description = {Morbi fringilla, wisi in dignissim interdum, justo lectus sagittis dui, et vehicula libero dui cursus dui.} } @entry{sym.omega, name = {\ensuremath{\omega}}, description = {Mauris tempor ligula sed lacus.} } % \end{macrocode} %\fi %\iffalse % \begin{macrocode} % % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*example-glossaries-symbols.bib> % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %< % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*example-glossaries-url.bib> % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %< % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %<*example-glossaries-xr.bib> % \end{macrocode} %\fi %\iffalse % \begin{macrocode} %< % \end{macrocode} %\fi %\Finale \endinput