diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/glossaries-extra/glossaries-extra.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/glossaries-extra/glossaries-extra.dtx | 4446 |
1 files changed, 4338 insertions, 108 deletions
diff --git a/Master/texmf-dist/source/latex/glossaries-extra/glossaries-extra.dtx b/Master/texmf-dist/source/latex/glossaries-extra/glossaries-extra.dtx index ab396b83e77..530455599ff 100644 --- a/Master/texmf-dist/source/latex/glossaries-extra/glossaries-extra.dtx +++ b/Master/texmf-dist/source/latex/glossaries-extra/glossaries-extra.dtx @@ -3,10 +3,12 @@ % Command line args: % -comment ".*\.tex" % -comment ".*\.bib" +% -setambles ".*\.bib=>\nopreamble\nopostamble" +% -author "Nicola Talbot" +% -macrocode ".*\.tex" +% -macrocode ".*\.bib" % -codetitle "Main Package Code (\\styfmt{glossaries-extra.sty})" % -doc "glossaries-extra-codedoc.tex" -% -section "chapter" -% -setambles ".*\.bib=>\nopreamble\nopostamble" % -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" @@ -15,11 +17,9 @@ % -src "glossary-topic.sty\Z=>glossary-topic.sty" % -src "(example-glossaries-.+\.tex)\Z=>\1" % -src "(example-glossaries-.+\.bib)\Z=>\1" -% -macrocode ".*\.tex" -% -macrocode ".*\.bib" -% -author "Nicola Talbot" +% -section "chapter" % glossaries-extra -% Created on 2021/11/4 19:26 +% Created on 2021/11/22 21:22 %\fi %\iffalse %<*package> @@ -142,7 +142,7 @@ governed by the \gloskey{first} and \gloskey{firstplural} keys of \setcounter{IndexColumns}{2} -\CheckSum{27468} +\CheckSum{30886} \newcommand*{\ifirstuse}{\iterm{first use}} \newcommand*{\firstuse}{\gls{firstuse}} @@ -182,13 +182,13 @@ governed by the \gloskey{first} and \gloskey{firstplural} keys of \raggedright } -\title{glossaries-extra.sty v1.47: +\title{glossaries-extra.sty v1.48: documented code} \author{Nicola L.C. Talbot\\[10pt] Dickimaw Books\\ \url{http://www.dickimaw-books.com/}} -\date{2021-11-04} +\date{2021-11-22} \begin{document} \DocInput{glossaries-extra.dtx} @@ -233,7 +233,7 @@ Dickimaw Books\\ %\section{Package Initialisation and Options} % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{glossaries-extra}[2021/11/04 v1.47 (NLCT)] +\ProvidesPackage{glossaries-extra}[2021/11/22 v1.48 (NLCT)] % \end{macrocode} % Requires \sty{xkeyval} to define package options. % \begin{macrocode} @@ -1113,10 +1113,10 @@ Dickimaw Books\\ the document doesn't support hyperlinks}}% {}% \or -% \end{macrocode} +% \end{macrocode} % Hybrid record (use bib2gls to fetch definitions) and index (use % makeindex/xindy to sort and collate). -% \begin{macrocode} +% \begin{macrocode} \def\glsxtr@setup@record{% \renewcommand*{\@glsxtr@record@setting@alsoindex}{hybrid}% \renewcommand*{\@do@seeglossary}{\@glsxtr@dosee@alsoindex@glossary}% @@ -1885,6 +1885,13 @@ Dickimaw Books\\ % \end{macrocode} %\end{macro} % +%\begin{macro}{\@glsxtr@doshowtarget} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand\@glsxtr@doshowtarget[2]{#2} +% \end{macrocode} +%\end{macro} +% %\begin{option}{debug} %\changes{1.21}{2017-11-03}{new} % Provide extra debug options. @@ -1899,14 +1906,17 @@ Dickimaw Books\\ \or % false \glsxtr@dooption{debug=false}% \renewcommand*{\@glsxtrwrglossmark}{}% + \let\@glsxtr@doshowtarget\@secondoftwo \or % showtargets \glsxtr@dooption{debug=showtargets}% + \def\@glsxtr@doshowtarget{\@glsxtrshowtargetleft}% \or % showwrgloss \glsxtr@dooption{debug=true}% \renewcommand*{\@glsxtrwrglossmark}{\glsxtrwrglossmark}% \or % all \glsxtr@dooption{debug=showtargets,debug=showaccsupp}% \renewcommand*{\@glsxtrwrglossmark}{\glsxtrwrglossmark}% + \def\@glsxtr@doshowtarget{\@glsxtrshowtargetleft}% \or % showaccsupp \glsxtr@dooption{debug=showaccsupp}% \fi @@ -1914,6 +1924,87 @@ Dickimaw Books\\ % \end{macrocode} %\end{option} % +%\begin{macro}{\glsxtrshowtargetouter} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\glsxtrshowtargetouter}{\glsshowtargetouter} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsxtrshowtargetinner} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\glsxtrshowtargetinner}[1]{\glsshowtargetinner{#1}} +% \end{macrocode} +%\end{macro} +% +%Debugging show targets. +%\begin{macro}{\@glsxtrshowtargetleft} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand{\@glsxtrshowtargetleft}[2]{\@glsshowtarget{#1}#2\@glsxtrshowtargetmark}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@glsxtrshowtargetright} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand{\@glsxtrshowtargetright}[2]{\@glsxtrshowtargetmark#2\@glsshowtarget{#1}}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@glsxtrshowtargetmark} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand{\@glsxtrshowtargetmark}{}% +% \end{macrocode} +%\end{macro} +% +%\begin{option}{showtargets} +%\changes{1.48}{2021-11-22}{new} +%Implements \pkgopt[showtargets]{debug} and provides extra +%adjustments. +% \begin{macrocode} +\define@choicekey{glossaries-extra.sty}{showtargets} + [\@glsxtr@showtargetsval\@glsxtr@showtargetsnr]% + {left,right,innerleft,innerright,annoteleft,annoteright}% + {% + \glsxtr@dooption{debug=showtargets}% + \ifcase\@glsxtr@showtargetsnr\relax + \def\@glsxtr@doshowtarget{\@glsxtrshowtargetleft}% + \def\glsxtrshowtargetouter{\glsshowtargetouter}% + \def\glsxtrshowtargetinner{\glsshowtargetinner}% + \let\@glsxtrshowtargetmark\empty + \or + \def\@glsxtr@doshowtarget{\@glsxtrshowtargetright}% + \def\glsxtrshowtargetouter{\glsshowtargetouter}% + \def\glsxtrshowtargetinner{\glsshowtargetinner}% + \let\@glsxtrshowtargetmark\empty + \or + \def\@glsxtr@doshowtarget{\@glsxtrshowtargetleft}% + \def\glsxtrshowtargetouter{\glsxtrshowtargetinner}% + \def\glsxtrshowtargetinner{\glsshowtargetinnersymleft}% + \let\@glsxtrshowtargetmark\empty + \or + \def\@glsxtr@doshowtarget{\@glsxtrshowtargetright}% + \def\glsxtrshowtargetouter{\glsxtrshowtargetinner}% + \def\glsxtrshowtargetinner{\glsshowtargetinnersymright}% + \let\@glsxtrshowtargetmark\empty + \or + \def\@glsxtr@doshowtarget{\@glsxtrshowtargetleft}% + \def\glsxtrshowtargetouter{\glsxtrshowtargetinner}% + \def\glsxtrshowtargetinner{\glsshowtargetinnersymleft}% + \def\@glsxtrshowtargetmark{\@glsshowtargetmarkfmt\glsxtrshowtargetsymbolright}% + \or + \def\@glsxtr@doshowtarget{\@glsxtrshowtargetright}% + \def\glsxtrshowtargetouter{\glsxtrshowtargetinner}% + \def\glsxtrshowtargetinner{\glsshowtargetinnersymright}% + \def\@glsxtrshowtargetmark{\@glsshowtargetmarkfmt\glsxtrshowtargetsymbolleft}% + \fi + } +% \end{macrocode} +%\end{option} +% % Pass all other options to \styfmt{glossaries}. % \begin{macrocode} \DeclareOptionX*{% @@ -1940,6 +2031,79 @@ Dickimaw Books\\ \@glsxtr@defpostpunc % \end{macrocode} % +%\begin{macro}{\glsdoshowtarget} +%\changes{1.48}{2021-11-22}{new} +%Added to \sty{glossaries} v4.50 so many not be defined. +%Need to redefine it so use \cs{def}. +% \begin{macrocode} +\def\glsdoshowtarget{\@glsxtr@doshowtarget} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsxtrshowtargetsymbolright} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand{\glsxtrshowtargetsymbolright}{{\tiny$\triangleleft$}}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsxtrshowtargetsymbolleft} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand{\glsxtrshowtargetsymbolleft}{{\tiny$\triangleright$}}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsshowtargetinner} +%\changes{1.48}{2021-11-22}{new} +%Only added to \sty{glossaries} in v4.50 so may not be defined. +% \begin{macrocode} +\providecommand*{\glsshowtargetinner}[1]{{\glsshowtargetfont [#1]}} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsshowtargetfont} +%\changes{1.48}{2021-11-22}{new} +%Only added to \sty{glossaries} in v4.45 so may not be defined. +% \begin{macrocode} +\providecommand*{\glsshowtargetfont}{\ttfamily\footnotesize} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsshowtargetinnercontentsymleft} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\glsshowtargetinnersymleft}[1]{% + \glsshowtargetinner{#1}\allowbreak\glsxtrshowtargetsymbolleft} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsshowtargetinnercontentsymright} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\glsshowtargetinnersymright}[1]{% + \glsxtrshowtargetsymbolright\allowbreak\glsshowtargetinner{#1}} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsshowtargetouter} +%\changes{1.48}{2021-11-22}{new} +%Only added to \sty{glossaries} in v4.45 so may not be defined. +% \begin{macrocode} +\providecommand*{\glsshowtargetouter}[1]{% + \glsshowtargetsymbol\marginpar{\glsshowtargetsymbol\glsshowtargetfont #1}} +% \end{macrocode} +%\end{macro} +% +% +%\begin{macro}{\@glsshowtarget} +%\changes{1.48}{2021-11-22}{new} +%Only added to \sty{glossaries} in v4.32 so may not be defined. +% \begin{macrocode} +\providecommand*{\@glsshowtarget}[1]{} +% \end{macrocode} +%\end{macro} +% %\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}. @@ -1947,46 +2111,37 @@ Dickimaw Books\\ %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}} +%\changes{1.48}{2021-11-22}{removed check for \cs{glsshowtargetouter}} % \begin{macrocode} -\ifdef\glsshowtargetouter -{ - \renewcommand*{\glsshowtarget}[1]{% - \glsxtrtitleorpdforheading - {% - \ifmmode - \nfss@text{\glsshowtargetfont [#1]}% +\def\glsshowtarget#1{% + \glsxtrtitleorpdforheading + {% + \ifmmode + \nfss@text{\glsxtrshowtargetinner{#1}}% + \else + \ifinner + \glsxtrshowtargetinner{#1}% \else - \ifinner - {\glsshowtargetfont [#1]}% - \else - \glsshowtargetouter{#1}% - \fi + \glsxtrshowtargetouter{#1}% \fi - }% - {[#1]}% - {{\protect\glsshowtargetfont [#1]}}% - } + \fi + }% + {[#1]}% + {{\protect\glsshowtargetinner{#1}}}% } -{ % \end{macrocode} -%Old definition. +%\end{macro} +% +%\begin{macro}{\@glsshowtargetmarkfmt} +%\changes{1.48}{2021-11-22}{new} % \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]}}% - } +\newcommand*{\@glsshowtargetmarkfmt}[1]{% + \glsxtrtitleorpdforheading + {% + \ifmmode \nfss@text{#1}\else #1\fi + }% + {}% + {\ifmmode \nfss@text{#1}\else #1\fi}% } % \end{macrocode} %\end{macro} @@ -2823,6 +2978,9 @@ Dickimaw Books\\ % % %\begin{macro}{\glsxtrifhasfield} +%\begin{definition} +%\cs{glsxtrifhasfield}\marg{field}\marg{label}\marg{true}\marg{false} +%\end{definition} %\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.) @@ -4228,7 +4386,7 @@ Dickimaw Books\\ \renewrobustcmd*{\glsseelist}[1]{% \let\@gls@dolast\relax \let\@gls@donext\relax - \let\@glsseeitem\glsseefirstitem + \let\@glsseeitem\@glsxtr@seefirstitem \let\@glsseelastsep\glsseelastsep \@for\@gls@thislabel:=#1\do{% \ifx\@xfor@nextelement\@nnil @@ -4239,13 +4397,49 @@ Dickimaw Books\\ \expandafter\@glsseeitem\expandafter{\@gls@thislabel}% \let\@gls@dolast\@glsseelastsep \let\@gls@donext\glsseesep - \let\@glsseeitem\glsseeitem + \let\@glsseeitem\@glsxtr@seeitem \let\@glsseelastsep\glsseelastoxfordsep }% } % \end{macrocode} %\end{macro} % +%\begin{macro}{\@glsxtr@seeitem} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@glsxtr@seeitem}[1]{% + \glsxtrifmulti{#1}{\mglsseeitem{#1}}{\glsseeitem{#1}}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@glsxtr@seefirstitem} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@glsxtr@seefirstitem}[1]{% + \glsxtrifmulti{#1}{\mglsseefirstitem{#1}}{\glsseefirstitem{#1}}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglsseeitem} +%\changes{1.48}{2021-11-22}{new} +%Multi-entry cross-reference +% \begin{macrocode} +\newcommand*{\mglsseeitem}[1]{% + \mglsname[all={noindex},setup={hyper=allmain}]{#1}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglsseefirstitem} +%\changes{1.48}{2021-11-22}{new} +%Multi-entry cross-reference +% \begin{macrocode} +\newcommand*{\mglsseefirstitem}{\mglsseeitem} +% \end{macrocode} +%\end{macro} +% %\begin{macro}{\glsseefirstitem} %\changes{1.47}{2021-11-04}{new} % \begin{macrocode} @@ -4543,15 +4737,24 @@ Dickimaw Books\\ % %\begin{macro}{\@glsxtr@addunused} % Adds all the entries if they haven't been used. +%\changes{1.48}{2021-11-22}{added check for multientry labels} % \begin{macrocode} \def\@glsxtr@addunused#1\@end@glsxtr@addunused{% \@for\@glsxtr@label:=#1\do {% - \ifglsused{\@glsxtr@label}{}% + \glsxtrifmulti\@glsxtr@label + {% + \letcs\@glsxtr@labellist{@gls@combined@\@glsxtr@label @list}% + \@for\@glsxtr@multilabel:=\@glsxtr@labellist\do + {\@glsxtr@addunused\@glsxtr@multilabel\@end@glsxtr@addunused}% + }% {% - \glsadd[format=glsxtrunusedformat]{\@glsxtr@label}% - \glsunset{\@glsxtr@label}% - \expandafter\@glsxtr@addunusedxrefs\expandafter{\@glsxtr@label}% + \ifglsused{\@glsxtr@label}{}% + {% + \glsadd[format=glsxtrunusedformat]{\@glsxtr@label}% + \glsunset{\@glsxtr@label}% + \expandafter\@glsxtr@addunusedxrefs\expandafter{\@glsxtr@label}% + }% }% }% } @@ -5307,12 +5510,17 @@ Dickimaw Books\\ %modifies it). % \begin{macrocode} \let\glsxtrorg@ifKV@glslink@hyper\ifKV@glslink@hyper +% \end{macrocode} +%Save local setting. +% \begin{macrocode} + \@gls@save@glslocal \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 + \@gls@restore@glslocal }% \glspostlinkhook } @@ -5412,11 +5620,7 @@ Dickimaw Books\\ \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 + \@gls@do@glsunset{#2}% }% \glspostlinkhook } @@ -5626,6 +5830,18 @@ Dickimaw Books\\ % \end{macrocode} %\end{macro} % +%\begin{macro}{\glslinkwrcontent} +%\changes{1.48}{2021-11-22}{new} +%This may resolve \href{https://www.dickimaw-books.com/bugtracker.php?key=189}{issue \#189} +%but it may have unexpected consequences. This is currently provided +%as a trial. If it causes a problem then redefine without the +%grouping. If no issues are reported it will be added to the base +%package. +% \begin{macrocode} +\providecommand*{\glslinkwrcontent}[1]{{#1}} +% \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 @@ -5647,6 +5863,10 @@ Dickimaw Books\\ \protected@edef\glstype{\csname glo@\glslabel @type\endcsname}% \let\org@ifKV@glslink@hyper\ifKV@glslink@hyper % \end{macrocode} +%Save local setting. +% \begin{macrocode} + \@gls@save@glslocal +% \end{macrocode} %Save current value of \cs{glolinkprefix}: % \begin{macrocode} \let\@glsxtr@org@glolinkprefix\glolinkprefix @@ -5746,34 +5966,40 @@ Dickimaw Books\\ \let\@glsxtr@textformat\@glsxtr@local@textformat \fi % \end{macrocode} +% Encapsulate link text and indexing. +% \begin{macrocode} + \glslinkwrcontent + {% +% \end{macrocode} % Do write if it should occur before the link text: % \begin{macrocode} - \ifglsxtrinitwrglossbefore - \@do@wrglossary{#2}% - \fi + \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}}% + \ifKV@glslink@hyper + \ifglsxtr@hyperoutside + \@glslink{\glolinkprefix\glslabel}{\@glsxtr@textformat{#3}}% + \else + \@glsxtr@textformat{\@glslink{\glolinkprefix\glslabel}{#3}}% + \fi \else - \@glsxtr@textformat{\glsdonohyperlink{\glolinkprefix\glslabel}{#3}}% + \ifglsxtr@hyperoutside + \glsdonohyperlink{\glolinkprefix\glslabel}{\@glsxtr@textformat{#3}}% + \else + \@glsxtr@textformat{\glsdonohyperlink{\glolinkprefix\glslabel}{#3}}% + \fi \fi - \fi % \end{macrocode} % Do write if it should occur after the link text: % \begin{macrocode} - \ifglsxtrinitwrglossbefore - \else - \@do@wrglossary{#2}% - \fi + \ifglsxtrinitwrglossbefore + \else + \@do@wrglossary{#2}% + \fi + }% % \end{macrocode} %Restore original value of \cs{glolinkprefix}: % \begin{macrocode} @@ -5782,6 +6008,7 @@ Dickimaw Books\\ % As the original definition: % \begin{macrocode} \let\ifKV@glslink@hyper\org@ifKV@glslink@hyper + \@gls@restore@glslocal } % \end{macrocode} %\end{macro} @@ -7106,6 +7333,38 @@ Dickimaw Books\\ \KV@glslink@noindexfalse % \end{macrocode} % +%\begin{macro}{\@gls@save@glslocal} +%\changes{1.48}{2021-11-22}{new} +%Defined in \sty{glossaries} v4.50 so may not be defined. +% \begin{macrocode} +\providecommand*{\@gls@save@glslocal}{% + \let\if@org@KV@glslink@local\ifKV@glslink@local +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@gls@restore@glslocal} +%\changes{1.48}{2021-11-22}{new} +%Defined in \sty{glossaries} v4.50 so may not be defined. +% \begin{macrocode} +\providecommand*{\@gls@restore@glslocal}{% + \ifKV@glslink@local + \let\@gls@do@glsunset\glslocalunset + \else + \let\@gls@do@glsunset\glsunset + \fi +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@gls@do@glsunset} +%\changes{1.48}{2021-11-22}{new} +%Defined in \sty{glossaries} v4.50 so may not be defined. +% \begin{macrocode} +\providecommand*{\@gls@do@glsunset}[1]{\glsunset{#1}} +% \end{macrocode} +%\end{macro} +% %If \cs{@gls@setdefault@glslink@opts} has been defined %(\styfmt{glossaries} v4.20) use it to set the default keys in %\cs{@glslink}. @@ -7415,6 +7674,65 @@ Dickimaw Books\\ % \end{macrocode} %\end{macro} % +%Patch if \sty{glossaries} pre 4.50. +% \begin{macrocode} +\ifdef\@@gls@navhypertarget +{} +{% +% \end{macrocode} +%\begin{macro}{\glsnavhypertarget} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} + \renewcommand*{\glsnavhypertarget}{\protect\@@gls@navhypertarget} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@@gls@navhypertarget} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} + \newcommand*{\@@gls@navhypertarget}[3][\@glo@type]{% + \@glsnavhypertarget{#1}{#2}{#3}% + } +% \end{macrocode} +%\end{macro} +% \begin{macrocode} +}% +% \end{macrocode} +% +%\begin{macro}{\@glsnavhypertarget} +%Similarly for \cs{@glsnavhypertarget} +%\changes{1.48}{2021-11-22}{added patch} +% \begin{macrocode} +\ifdef\@glsnavhypertarget +{% + \renewcommand*{\@glsnavhypertarget}[3]{% + \protected@write\@auxout{}{\string\@gls@hypergroup{#1}{#2}}% + \@glsxtr@do@org@target{\glsnavhyperlinkname{#1}{#2}}{#3}% + \ifcsdef{@gls@hypergrouplist@#1}% + {% + \letcs\@gls@list{@gls@hypergrouplist@#1}% + \protected@edef\@gls@thishypernavlabel{#2}% + \expandafter\DTLifinlist\expandafter{\@gls@thishypernavlabel}\@gls@list{}% + {% + \GlossariesWarningNoLine{Navigation panel + for glossary type `#1'^^Jmissing group `#2'}% + \gdef\gls@hypergrouprerun{% + \GlossariesWarningNoLine{Navigation panel + has changed. Rerun LaTeX}}% + }% + }% + {% + \GlossariesWarningNoLine{Navigation panel + for glossary type `#1'^^Jmissing group `#2'}% + \gdef\gls@hypergrouprerun{% + \GlossariesWarningNoLine{Navigation panel + has changed. Rerun LaTeX}}% + }% + }% +} +{} +% \end{macrocode} +%\end{macro} % %The redefinition of \cs{glsdohyperlink} has been causing problems %so introduce a new command instead. @@ -7471,6 +7789,18 @@ Dickimaw Books\\ }% {% % \end{macrocode} +%Is the alias a multi-entry? +%\changes{1.48}{2021-11-22}{added check for multi-entry} +% \begin{macrocode} + \glsxtrifmulti\gloaliaslabel + {% +% \end{macrocode} +%Get the main target. +% \begin{macrocode} + \letcs\gloaliaslabel{@gls@combined@\gloaliaslabel @main}% + }% + {}% +% \end{macrocode} %Redirect link to the alias target. % \begin{macrocode} \glsxtrhyperlink @@ -7487,16 +7817,9 @@ Dickimaw Books\\ %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}}% -} +\newcommand{\glsxtrhyperlink}[2]{% + \glsdoshowtarget{#1}{\hyperlink{#1}{#2}}% +}% % \end{macrocode} %\end{macro} % @@ -9564,7 +9887,7 @@ Dickimaw Books\\ have a glossary}% }% }% -% \begin{macrocode} +% \end{macrocode} %\end{macro} % %\begin{macro}{\@domakeglossaries} @@ -10133,6 +10456,20 @@ Dickimaw Books\\ \fi % \end{macrocode} %\end{macro} +% +%\begin{macro}{\@glsxtr@do@org@target} +%\changes{1.48}{2021-11-22}{new} +% Provide a way to locally do the original. +% \begin{macrocode} +\newcommand{\@glsxtr@do@org@target}[2]{% + {% + \let\glsdohypertarget\@glsxtr@org@glsdohypertarget + \@glstarget{#1}{#2}% + }% +} +% \end{macrocode} +%\end{macro} +% %\begin{macro}{\glsxtr@makeglossaries} %For the benefit of \app{makeglossaries} %\changes{1.09}{2016-12-16}{new} @@ -12281,6 +12618,10 @@ defined}{}% \protected@edef\glstype{\csname glo@\glslabel @type\endcsname}% \def\@glsxtr@thevalue{}% \def\@glsxtr@theHvalue{\@glsxtr@thevalue}% +% \end{macrocode} +%Save local setting. +% \begin{macrocode} + \@gls@save@glslocal \glsxtrinitwrgloss \glslinkpresetkeys \setkeys{glslink}{#1}% @@ -12293,19 +12634,19 @@ defined}{}% \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 + \glslinkwrcontent + {% + \ifglsxtrinitwrglossbefore + \@do@wrglossary{#2}% + \fi + #3% + \ifglsxtrinitwrglossbefore + \else + \@do@wrglossary{#2}% + \fi + }% + \@gls@restore@glslocal + \@gls@do@glsunset{#2}% } % \end{macrocode} %\end{macro} @@ -14084,6 +14425,41 @@ defined}{}% % \end{macrocode} %\end{macro} % +%\begin{macro}{\glssetcategoriesattribute} +%\begin{definition} +%\cs{glssetcategoriesattribute}\marg{category list}\marg{attribute-label}\marg{value} +%\end{definition} +%\changes{1.48}{2021-11-22}{new} +% Similar to above, but globally apply to each category in the list. +% \begin{macrocode} +\newcommand*{\glssetcategoriesattribute}[3]{% + \@for\@gls@thiscatlabel:=#1\do{% + \csgdef{@glsxtr@categoryattr@@\@gls@thiscatlabel @#2}{#3}% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glssetcategoriesattributes} +%\begin{definition} +%\cs{glssetcategoriesattributes}\marg{category list}\marg{attribute-label list}\marg{value} +%\end{definition} +%\changes{1.48}{2021-11-22}{new} +% Similar to above, but apply to each category and attribute in the list. +% \begin{macrocode} +\newcommand*{\glssetcategoriesattributes}[3]{% +% \end{macrocode} +% Group to avoid problems with nested \cs{@for}. +% \begin{macrocode} + {% + \@for\@gls@thisattrlabel:=#2\do{% + \glssetcategoriesattribute{#1}{\@gls@thisattrlabel}{#3}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% %\begin{macro}{\glsgetcategoryattribute} %\begin{definition} %\cs{glsgetcategoryattribute}\marg{category}\marg{attribute-label} @@ -22793,6 +23169,132 @@ defined}{}% % \end{macrocode} %\end{abbrvstyle} % +%Small-caps is awkward, so support for that is added. +%\begin{macro}{\glsabbrvscuserfont} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\glsabbrvscuserfont}{\glsabbrvscfont}% +% \end{macrocode} +%\end{macro} +%\begin{macro}{\glsfirstabbrvscuserfont} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\glsfirstabbrvscuserfont}{\glsabbrvscuserfont}% +% \end{macrocode} +%\end{macro} +% The default short form suffix: +%\begin{macro}{\glsxtrscusersuffix} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\glsxtrscusersuffix}{\glsxtrscsuffix} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsxtrscusername} +%\changes{1.48}{2021-11-22}{new} +% The default name format for this style. +% \begin{macrocode} +\newcommand*{\glsxtrlongshortscusername}{% + \protect\glsabbrvscuserfont{\the\glsshorttok}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{abbrvstyle}{long-postshort-sc-user} +%\changes{1.48}{2017-02-03}{new} +%Like \abbrstyle{long-short-sc-user} but uses smallcaps. +% \begin{macrocode} +\newabbreviationstyle{long-postshort-sc-user}% +{% +% \end{macrocode} +% Set accessibility attributes if enabled. +% \begin{macrocode} + \glsxtrAccSuppAbbrSetFirstLongAttrs\glscategorylabel +% \end{macrocode} +% Setup the default fields. +% \begin{macrocode} + \renewcommand*{\CustomAbbreviationFields}{% + name={\glsxtrlongshortscusername}, + sort={\the\glsshorttok}, + first={\protect\glsfirstlonguserfont{\the\glslongtok}},% + firstplural={\protect\glsfirstlonguserfont{\the\glslongpltok}},% + text={\protect\glsabbrvscuserfont{\the\glsshorttok}},% + plural={\protect\glsabbrvscuserfont{\the\glsshortpltok}},% + description={\protect\glsuserdescription{\the\glslongtok}% + {\the\glslabeltok}}}% + \renewcommand*{\GlsXtrPostNewAbbreviation}{% + \csdef{glsxtrpostlink\glscategorylabel}{% + \glsxtrifwasfirstuse + {% + \glsxtruserparen + {\glsfirstabbrvscuserfont{\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}{\glsxtrscusersuffix}% + \renewcommand*{\glsabbrvfont}[1]{\glsabbrvscuserfont{##1}}% + \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvscuserfont{##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{\glsfirstabbrvscuserfont{\glsaccessshort{##1}}}{##1}% + }% + \renewcommand*{\glsxtrinlinefullplformat}[2]{% + \glsfirstlonguserfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% + \ifglsxtrinsertinside\else##2\fi + \glsxtruserparen{\glsfirstabbrvscuserfont{\glsaccessshortpl{##1}}}{##1}% + }% + \renewcommand*{\Glsxtrinlinefullformat}[2]{% + \glsfirstlonguserfont{\Glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% + \ifglsxtrinsertinside\else##2\fi + \glsxtruserparen{\glsfirstabbrvscuserfont{\glsaccessshort{##1}}}{##1}% + }% + \renewcommand*{\Glsxtrinlinefullplformat}[2]{% + \glsfirstlonguserfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% + \ifglsxtrinsertinside\else##2\fi + \glsxtruserparen{\glsfirstabbrvscuserfont{\glsaccessshortpl{##1}}}{##1}% + }% +} +% \end{macrocode} +%\end{abbrvstyle} +% %\begin{macro}{\glsxtrlongshortuserdescname} %\changes{1.25}{2017-11-24}{new} % \begin{macrocode} @@ -22852,6 +23354,63 @@ defined}{}% % \end{macrocode} %\end{abbrvstyle} % +%\begin{macro}{\glsxtrlongshortscuserdescname} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\glsxtrlongshortscuserdescname}{% + \protect\glslonguserfont{\the\glslongtok}% + \protect\glsxtruserparen + {\protect\glsabbrvscuserfont{\the\glsshorttok}}{\the\glslabeltok}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{abbrvstyle}{long-postshort-sc-user-desc} +%\changes{1.48}{2021-11-22}{new} +%Like \abbrstyle{long-postshort-sc-user} but the user supplies the +%description. +% \begin{macrocode} +\newabbreviationstyle{long-postshort-sc-user-desc}% +{% +% \end{macrocode} +% Set accessibility attributes if enabled. +% \begin{macrocode} + \glsxtrAccSuppAbbrSetTextShortAttrs\glscategorylabel +% \end{macrocode} +% Setup the default fields. +% \begin{macrocode} + \renewcommand*{\CustomAbbreviationFields}{% + name={\glsxtrlongshortscuserdescname}, + sort={\the\glslongtok}, + first={\protect\glsfirstlonguserfont{\the\glslongtok}},% + firstplural={\protect\glsfirstlonguserfont{\the\glslongpltok}},% + text={\protect\glsabbrvscuserfont{\the\glsshorttok}},% + plural={\protect\glsabbrvscuserfont{\the\glsshortpltok}}% + }% + \renewcommand*{\GlsXtrPostNewAbbreviation}{% + \csdef{glsxtrpostlink\glscategorylabel}{% + \glsxtrifwasfirstuse + {% + \glsxtruserparen + {\glsfirstabbrvscuserfont{\glsentryshort{\glslabel}}}% + {\glslabel}% + }% + {}% + }% + \glshasattribute{\the\glslabeltok}{regular}% + {% + \glssetattribute{\the\glslabeltok}{regular}{false}% + }% + {}% + }% +}% +{% + \GlsXtrUseAbbrStyleFmts{long-postshort-sc-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} @@ -24309,6 +24868,175 @@ defined}{}% % \end{macrocode} %\end{abbrvstyle} % +%Small-caps is awkward, so support for that is added. +%\begin{macro}{\glsabbrvsconlyfont} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\glsabbrvsconlyfont}{\glsabbrvscfont}% +% \end{macrocode} +%\end{macro} +%\begin{macro}{\glsfirstabbrvsconlyfont} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\glsfirstabbrvsconlyfont}{\glsabbrvsconlyfont}% +% \end{macrocode} +%\end{macro} +% The default short form suffix: +%\begin{macro}{\glsxtrsconlysuffix} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\glsxtrsconlysuffix}{\glsxtrscsuffix} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsxtrsconlyname} +%\changes{1.48}{2021-11-22}{new} +% The default name format for this style. +% \begin{macrocode} +\newcommand*{\glsxtrsconlyname}{% + \protect\glsabbrvsconlyfont{\the\glsshorttok}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{abbrvstyle}{long-only-short-sc-only} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newabbreviationstyle{long-only-short-sc-only}% +{% +% \end{macrocode} +% Set accessibility attributes if enabled. +% \begin{macrocode} + \glsxtrAccSuppAbbrSetFirstLongAttrs\glscategorylabel +% \end{macrocode} +% Setup the default fields. +% \begin{macrocode} + \renewcommand*{\CustomAbbreviationFields}{% + name={\glsxtrsconlyname}, + sort={\the\glsshorttok}, + first={\protect\glsfirstlongonlyfont{\the\glslongtok}},% + firstplural={\protect\glsfirstlongonlyfont{\the\glslongpltok}},% + text={\protect\glsabbrvsconlyfont{\the\glsshorttok}},% + plural={\protect\glsabbrvsconlyfont{\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}% + }% + {}% + }% +}% +{% + \renewcommand*{\abbrvpluralsuffix}{\glsxtrsconlysuffix}% + \renewcommand*{\glsabbrvfont}[1]{\glsabbrvsconlyfont{##1}}% + \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvsconlyfont{##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\glsfirstabbrvsconlyfont{\glsaccessshort{##1}}}% + }% + \renewcommand*{\glsxtrinlinefullplformat}[2]{% + \glsfirstlongonlyfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% + \ifglsxtrinsertinside\else##2\fi + \glsxtrfullsep{##1}% + \glsxtrparen{\protect\glsfirstabbrvsconlyfont{\glsaccessshortpl{##1}}}% + }% + \renewcommand*{\Glsxtrinlinefullformat}[2]{% + \glsfirstlongonlyfont{\Glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}% + \ifglsxtrinsertinside\else##2\fi + \glsxtrfullsep{##1}% + \glsxtrparen{\protect\glsfirstabbrvsconlyfont{\glsaccessshortpl{##1}}}% + }% + \renewcommand*{\Glsxtrinlinefullplformat}[2]{% + \glsfirstlongonlyfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}% + \ifglsxtrinsertinside\else##2\fi + \glsxtrfullsep{##1}% + \glsxtrparen{\protect\glsfirstabbrvsconlyfont{\Glsaccessshortpl{##1}}}% + }% +} +% \end{macrocode} +%\end{abbrvstyle} +% +%\begin{macro}{\glsxtrsconlydescsort} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\glsxtrsconlydescsort}{\glsxtronlydescsort} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsxtrsconlydescname} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\glsxtrsconlydescname}{\glsxtronlydescname} +% \end{macrocode} +%\end{macro} +% +%\begin{abbrvstyle}{long-only-short-sc-only-desc} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newabbreviationstyle{long-only-short-sc-only-desc}% +{% +% \end{macrocode} +% Set accessibility attributes if enabled. +% \begin{macrocode} + \glsxtrAccSuppAbbrSetTextShortAttrs\glscategorylabel +% \end{macrocode} +% Setup the default fields. +% \begin{macrocode} + \renewcommand*{\CustomAbbreviationFields}{% + name={\glsxtrsconlydescname}, + sort={\glsxtrsconlydescsort},% + first={\protect\glsfirstlongonlyfont{\the\glslongtok}},% + firstplural={\protect\glsfirstlongonlyfont{\the\glslongpltok}},% + text={\protect\glsabbrvsconlyfont{\the\glsshorttok}},% + plural={\protect\glsabbrvsconlyfont{\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-sc-only}% +} +% \end{macrocode} +%\end{abbrvstyle} +% %\section{Using Entries in Headings} % % There are four main problems with using entries in sectioning @@ -25976,6 +26704,3289 @@ defined}{}% % \end{macrocode} %\end{macro} % +%\section{Multi (Combined/Compound) Entries} +%(I'd rather call these combined or compound entries but \cs{cgls} is +%already taken.) +% +%New to version 1.48, the commands here provide a way of referencing +%multiple entries as a single unit. For example, biological +%organisms are often referred to by their genus and species, such as +%\emph{Clostridium botulinum} and \emph{Clostridium perfringens} +%(where the genus is Clostridium). The genus is often abbreviated +%after first use, regardless of which species in the genus is being +%referenced. For example, \qt{\emph{Clostridium botulinum} and +%\emph{C. perfringens}}. This can't be supported by any abbreviation +%styles unless the genus and species names are defined separately. +%For example: +%\begin{verbatim} +%\setabbreviationstyle{long-only-short-only} +%\newabbreviation{clostridium}{C.}{Clostridium} +%\newglossaryentry{botulinum}{name={botulinum},description={}} +%\newglossaryentry{perfringens}{name={perfringens},description={}} +%\end{verbatim} +%This means that the entries then need to be referenced using a +%rather cumbersome method: +%\begin{verbatim} +%\gls{clostridium} \gls{botulinum} and \gls{clostridum} +%\gls{perfringens} +%\end{verbatim} +%This section provides a command that will provide a way of defining +%a label that represents a combination of entries (which must all be +%first defined). For example: +%\begin{verbatim} +%\multiglossaryentry{cbot}{clostridium,botulinum} +%\end{verbatim} +%This label can then be referenced using \cs{mgls}, which internally +%uses \cs{gls} for each component. The last component in the list is +%considered the \qt{main} component (not to be confused with the +%main glossary). If this isn't the case, the label of the main +%component should be added in the optional argument before the label +%list. Note that the multi-label (\texttt{cbot} in this case) can't be +%referenced using commands like \cs{gls}. +% +%First define the general set of options that should be applied to +%all multi-entries. These can be set with: +%\begin{macro}{\multiglossaryentrysetup} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\multiglossaryentrysetup}[1]{\setkeys{glsxtrcombined}{#1}} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\@gls@combined@indexmain} +%\changes{1.48}{2021-11-22}{new} +%Numeric value: 0=false (don't index main component), 1=true (always +%index main component), 2=first (only index main component on first +%use). Default: 1 (true); +% \begin{macrocode} +\newcommand*{\@gls@combined@indexmain}{1} +\define@choicekey{glsxtrcombined}{indexmain}% + [\@gls@combined@indexmain@val\@gls@combined@indexmain] + {false,true,first}[true]{} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\@gls@combined@indexothers} +%\changes{1.48}{2021-11-22}{new} +%Numeric value: 0=false (don't index other components), 1=true (always +%index other components), 2=first (only index other components on first +%use). Default: 2 (first); +% \begin{macrocode} +\newcommand*{\@gls@combined@indexothers}{2} +\define@choicekey{glsxtrcombined}{indexothers}% + [\@gls@combined@indexothers@val\@gls@combined@indexothers] + {false,true,first}[true]{} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\@gls@combined@hyper} +%\changes{1.48}{2021-11-22}{new} +%Numeric value: 0=none (\cs{mgls} doesn't create a hyperlink), +% 1=allmain (all content hyperlinks to the main component), +% 2=mainonly (only the main component has a hyperlink), +% 3=individual (each component has a hyperlink to their own target). +% Default: 3. +% \begin{macrocode} +\newcommand*{\@gls@combined@hyper}{3} +\define@choicekey{glsxtrcombined}{hyper}% + [\@gls@combined@hyper@val\@gls@combined@hyper] + {none,allmain,mainonly,individual,otheronly,notmainfirst,nototherfirst,notfirst}{} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@gls@combined@encapmain} +%\changes{1.48}{2021-11-22}{new} +%Location encap value for main component (corresponding to format key in \cs{gls}). +% \begin{macrocode} +\newcommand*{\@gls@combined@encapmain}{glsnumberformat} +\define@key{glsxtrcombined}{encapmain}{% + \renewcommand*{\@gls@combined@encapmain}{#1}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@gls@combined@encapothers} +%\changes{1.48}{2021-11-22}{new} +%Location encap value for other components (corresponding to format key in \cs{gls}). +% \begin{macrocode} +\newcommand*{\@gls@combined@encapothers}{glsnumberformat} +\define@key{glsxtrcombined}{encapothers}{% + \renewcommand*{\@gls@combined@encapothers}{#1}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@gls@combined@textformat} +%\changes{1.48}{2021-11-22}{new} +%Encapsulate entire content with the command identified by the given +%control sequence name. +% \begin{macrocode} +\newcommand*{\@gls@combined@textformat}{@firstofone} +\define@key{glsxtrcombined}{textformat}{% + \renewcommand*{\@gls@combined@textformat}{#1}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@gls@combined@category} +%\changes{1.48}{2021-11-22}{new} +%Assign a category to the combined set. +% \begin{macrocode} +\newcommand*{\@gls@combined@category}{} +\define@key{glsxtrcombined}{category}{% + \renewcommand*{\@gls@combined@category}{#1}% +} +% \end{macrocode} +%Pre-options family: +% \begin{macrocode} +\define@key{glsxtrcombinedpreopts}{category}{% + \renewcommand*{\@gls@combined@category}{#1}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@gls@combined@mglsopts} +%\changes{1.48}{2021-11-22}{new} +%Default options to pass to \cs{mgls}. +% \begin{macrocode} +\newcommand*{\@gls@combined@mglsopts}{} +\define@key{glsxtrcombined}{mglsopts}{% + \renewcommand*{\@gls@combined@mglsopts}{#1}% +} +\define@key{glsxtrcombinedpreopts}{mglsopts}{% + \@gls@combined@mglsopts@do + {% + \renewcommand*{\@gls@combined@mglsopts}{#1}% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@gls@combined@mglsopts@do} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@gls@combined@mglsopts@do}[1]{#1} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mgls@disable@mglsopts} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\mgls@disable@mglsopts}{% + \let\@gls@combined@mglsopts@do\@gls@combined@mglsopts@do@not +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mgls@enable@mglsopts} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\mgls@enable@mglsopts}{% + \let\@gls@combined@mglsopts@do\@firstofone +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@gls@combined@mglsopts@do} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@gls@combined@mglsopts@do@not}[1]{% + \PackageError{glossaries-extra}{`mglsopts' key not permitted inside + `setup' value}{}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@gls@combined@firstprefix} +%\changes{1.48}{2021-11-22}{new} +%Prefix for multi-entry first use. +% \begin{macrocode} +\newcommand*{\@gls@combined@firstprefix}{} +\define@key{glsxtrcombined}{firstprefix}{% + \renewcommand*{\@gls@combined@firstprefix}{#1}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@gls@combined@usedprefix} +%\changes{1.48}{2021-11-22}{new} +%Prefix for multi-entry subsequent first use. +% \begin{macrocode} +\newcommand*{\@gls@combined@usedprefix}{} +\define@key{glsxtrcombined}{usedprefix}{% + \renewcommand*{\@gls@combined@usedprefix}{#1}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@gls@combined@firstsuffix} +%\changes{1.48}{2021-11-22}{new} +%Suffix for multi-entry first use. +% \begin{macrocode} +\newcommand*{\@gls@combined@firstsuffix}{} +\define@key{glsxtrcombined}{firstsuffix}{% + \renewcommand*{\@gls@combined@firstsuffix}{#1}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@gls@combined@usedsuffix} +%\changes{1.48}{2021-11-22}{new} +%Suffix for multi-entry subsequent first use. +% \begin{macrocode} +\newcommand*{\@gls@combined@usedsuffix}{} +\define@key{glsxtrcombined}{usedsuffix}{% + \renewcommand*{\@gls@combined@usedsuffix}{#1}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@gls@combined@firstskipmain} +%\changes{1.48}{2021-11-22}{new} +%Skip the main element on first use (multi-entry first use not +%element first use). +% \begin{macrocode} +\define@boolkey{glsxtrcombined}{firstskipmain}[true]{} +\KV@glsxtrcombined@firstskipmainfalse +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@gls@combined@firstskipothers} +%\changes{1.48}{2021-11-22}{new} +%Skip the other elements on first use (multi-entry first use not +%element first use). +% \begin{macrocode} +\define@boolkey{glsxtrcombined}{firstskipothers}[true]{} +\KV@glsxtrcombined@firstskipothersfalse +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@gls@combined@usedskipmain} +%\changes{1.48}{2021-11-22}{new} +%Skip the main element on subsequent use (multi-entry subsequent use not +%element subsequent use). +% \begin{macrocode} +\define@boolkey{glsxtrcombined}{usedskipmain}[true]{} +\KV@glsxtrcombined@usedskipmainfalse +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@gls@combined@usedskipothers} +%\changes{1.48}{2021-11-22}{new} +%Skip the other elements on subsequent use (multi-entry subsequent use not +%element subsequent use). +% \begin{macrocode} +\define@boolkey{glsxtrcombined}{usedskipothers}[true]{} +\KV@glsxtrcombined@usedskipothersfalse +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@gls@combined@postlinks} +%\changes{1.48}{2021-11-22}{new} +%Determine whether or not to use the individual element post-link hooks. +% \begin{macrocode} +\newcommand*{\@gls@combined@postlinks@nr}{0} +\define@choicekey{glsxtrcombined}{postlinks}% + [\@gls@combined@postlinks@val\@gls@combined@postlinks@nr] + {none,all,notlast,mainnotlast,mainonly,othernotlast,otheronly}{} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@gls@combined@mpostlink} +%\changes{1.48}{2021-11-22}{new} +%Determine whether or not to use the multi-entry post-link hook. +% \begin{macrocode} +\newcommand*{\@gls@combined@mpostlink@nr}{1} +\define@choicekey{glsxtrcombined}{mpostlink}% + [\@gls@combined@mpostlink@val\@gls@combined@mpostlink@nr] + {false,true,firstonly,usedonly}[true]{} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@gls@combined@mpostlinkelement} +%\changes{1.48}{2021-11-22}{new} +%Determine which element to use for the post-link hook. +% \begin{macrocode} +\newcommand*{\@gls@combined@mpostlinkelement@nr}{0} +\define@choicekey{glsxtrcombined}{mpostlinkelement}% + [\@gls@combined@mpostlinkelement@val\@gls@combined@mpostlinkelement@nr] + {last,main,custom}{} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsxtrifmulti} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\glsxtrifmulti}[3]{\ifcsdef{@gls@combined@#1@main}{#2}{#3}} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsxtrmultimain} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\glsxtrmultimain}[1]{\csuse{@gls@combined@#1@main}} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsxtrmultilist} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\glsxtrmultilist}[1]{\csuse{@gls@combined@#1@list}} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsxtrmultitotalelements} +%\changes{1.48}{2021-11-22}{new} +%Total number of elements. +% \begin{macrocode} +\newcommand*{\glsxtrmultitotalelements}[1]{\csuse{@gls@combined@#1@total}} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsxtrmultimainindex} +%\changes{1.48}{2021-11-22}{new} +%Index of main element (starting from 1). If the main element is the +%last element in the list then this should equal the total number of +%elements. +% \begin{macrocode} +\newcommand*{\glsxtrmultimainindex}[1]{\csuse{@gls@combined@#1@mainindex}} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsxtrmultilastotherindex} +%\changes{1.48}{2021-11-22}{new} +%Index of the last non-main element. +% \begin{macrocode} +\newcommand*{\glsxtrmultilastotherindex}[1]{\csuse{@gls@combined@#1@lastotherindex}} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\ifmultiglossaryentryglobal} +%\changes{1.48}{2021-11-22}{new} +%Make definitions global. +% \begin{macrocode} +\newif\ifmultiglossaryentryglobal +\multiglossaryentryglobalfalse +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglselementindex} +%\changes{1.48}{2021-11-22}{new} +% Count register to keep track of the current element index. +% \begin{macrocode} +\newcount\mglselementindex +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\multiglossaryentry} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{multiglossaryentry}\oarg{options}\marg{multi-label}\oarg{main label}\marg{label +%list} +%\end{definition} +%Defines the label \meta{multi-label} that can be used in \cs{mgls}. +% \begin{macrocode} +\newrobustcmd{\multiglossaryentry}[1][]{% + \def\@gls@combined@current@opts{#1}% + \ifnum\@glsxtr@docdefval=1\relax + \let\@multi@glossentry@donext\@defmultiglossaryentry + \else + \let\@multi@glossentry@donext\@multiglossaryentry + \fi + \@multi@glossentry@donext +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@multiglossaryentry} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@multiglossaryentry}[1]{% + \def\@gls@combined@current@label{#1}% + \@multi@glossaryentry +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@multi@glossaryentry} +%\changes{1.48}{2021-11-22}{new} +% Check for existence. +% \begin{macrocode} +\newcommand*{\@multi@glossaryentry}[2][]{% + \ifcsdef{@gls@combined@\@gls@combined@current@label @main}% + {\PackageError{glossaries-extra}% + {Multi-entry label `\@gls@combined@current@label' already defined}% + {}% + }% + {% + \@multi@glossary@entry{#1}{#2}% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@defmultiglossaryentry} +%\changes{1.48}{2021-11-22}{new} +%Used if document definitions are on. +% \begin{macrocode} +\newcommand*{\@defmultiglossaryentry}[1]{% + \def\@gls@combined@current@label{#1}% + \@def@multi@glossaryentry +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@def@multi@glossaryentry} +%\changes{1.48}{2021-11-22}{new} +%Used if document definitions are on. +% \begin{macrocode} +\newcommand*{\@def@multi@glossaryentry}[2][]{% + \let\@def@multi@glossaryentry@do\@multi@glossary@entry + \ifundef\@glsxtr@docdefs@multilist + {% + \gdef\@glsxtr@docdefs@multilist{}% + \listxadd + {\@glsxtr@docdefs@multilist}{\expandonce\@gls@combined@current@label}% + }% + {% + \xifinlist{\@gls@combined@current@label}{\@glsxtr@docdefs@multilist}% + {% + \PackageError{glossaries-extra}% + {Multi-entry label `\@gls@combined@current@label' already defined}% + {}% + \let\@def@multi@glossaryentry@do\@gobbletwo + }% + {% + \listxadd + {\@glsxtr@docdefs@multilist}{\expandonce\@gls@combined@current@label}% + }% + }% + \@def@multi@glossaryentry@do{#1}{#2}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@multi@glossary@doifexists} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@multi@glossary@doifexists}{\glsdoifexists} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\providemultiglossaryentry} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{providemultiglossaryentry}\oarg{options}\marg{multi-label}\oarg{main label}\marg{label +%list} +%\end{definition} +%Defines a multi-entry unless it has already been defined. +% \begin{macrocode} +\newrobustcmd{\providemultiglossaryentry}[2][]{% + \def\@gls@combined@current@opts{#1}% + \def\@gls@combined@current@label{#2}% + \ifcsdef{@gls@combined@\@gls@combined@current@label @main}% + {\def\@multi@glossentry@donext{\@provide@multi@glossaryentry@noop}}% + {% + \ifnum\@glsxtr@docdefval=1\relax + \def\@multi@glossentry@donext{\@def@multi@glossaryentry}% + \else + \def\@multi@glossentry@donext{\@multi@glossaryentry}% + \fi + }% + \@multi@glossentry@donext +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@provide@multi@glossaryentry@noop} +%\changes{1.48}{2021-11-22}{new} +% Do nothing. +% \begin{macrocode} +\newcommand*{\@provide@multi@glossaryentry@noop}[2][]{} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@multi@glossaryentry@list} +%\changes{1.48}{2021-11-22}{new} +% List of all defined multi-entry sets. +% \begin{macrocode} +\newcommand*{\@multi@glossaryentry@list}{} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@multi@glossary@entry} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@multi@glossary@entry}[2]{% + \protected@edef\@gls@combined@current@main{#1}% +% \end{macrocode} +% Fully expand list. +% \begin{macrocode} + \protected@edef\@gls@combined@currentlist{#2}% +% \end{macrocode} +% Count items in list, check they are all defined, and find last item at the same time. +% \begin{macrocode} + \mglselementindex=0\relax + \@for\@gls@tmp:=\@gls@combined@currentlist\do{% + \advance\mglselementindex by 1\relax + \@multi@glossary@doifexists{\@gls@tmp}{}% + \let\@gls@combined@finalitem\@gls@tmp + \ifdefvoid\@gls@combined@current@main + {}% + {% + \ifx\@gls@combined@current@main\@gls@tmp + \ifmultiglossaryentryglobal + \global\cslet{@gls@combined@\@gls@combined@current@label @main}% + \@gls@combined@current@main + \csxdef{@gls@combined@\@gls@combined@current@label @mainindex}% + {\the\mglselementindex}% + \else + \cslet{@gls@combined@\@gls@combined@current@label @main}% + \@gls@combined@current@main + \csedef{@gls@combined@\@gls@combined@current@label @mainindex}% + {\the\mglselementindex}% + \fi + \else + \ifmultiglossaryentryglobal + \csxdef{@gls@combined@\@gls@combined@current@label @lastotherindex}% + {\the\mglselementindex}% + \else + \csedef{@gls@combined@\@gls@combined@current@label @lastotherindex}% + {\the\mglselementindex}% + \fi + \fi + }% + }% + \ifmultiglossaryentryglobal + \csxdef{@gls@combined@\@gls@combined@current@label @total}% + {\the\mglselementindex}% + \else + \csedef{@gls@combined@\@gls@combined@current@label @total}% + {\the\mglselementindex}% + \fi + \ifnum\mglselementindex<2\relax + \PackageError{glossaries-extra}{At least 2 labels required in + multi-entry element list (\number\mglselementindex\space found)}{}% + \else + \ifdefvoid\@gls@combined@current@main + {}% + {% +% \end{macrocode} +% If \cs{@gls@combined@\meta{label}@main} hasn't been set then it +% wasn't included in the list. +% \begin{macrocode} + \ifcsundef{@gls@combined@\@gls@combined@current@label @main}% + {\PackageError{glossaries-extra}% + {Main element `\@gls@combined@current@main' not found in list}% + {The final element `\@gls@combined@finalitem' will be used instead} +% \end{macrocode} +% Set to empty so that the default (final element) is used instead. +% \begin{macrocode} + \let\@gls@combined@current@main\@empty + }% + {}% + }% + \ifdefvoid\@gls@combined@current@main + {% +% \end{macrocode} +% Set main to final element. +% \begin{macrocode} + \ifmultiglossaryentryglobal + \global\cslet{@gls@combined@\@gls@combined@current@label @main}% + \@gls@combined@finalitem + \global\csletcs{@gls@combined@\@gls@combined@current@label @mainindex}% + {@gls@combined@\@gls@combined@current@label @total}% + \csxdef{@gls@combined@\@gls@combined@current@label @lastotherindex}% + {\the\numexpr\mglselementindex-1 }% + \else + \cslet{@gls@combined@\@gls@combined@current@label @main}% + \@gls@combined@finalitem + \csletcs{@gls@combined@\@gls@combined@current@label @mainindex}% + {@gls@combined@\@gls@combined@current@label @total}% + \csedef{@gls@combined@\@gls@combined@current@label @lastotherindex}% + {\the\numexpr\mglselementindex-1 }% + \fi + }% + {}% + \ifmultiglossaryentryglobal +% \end{macrocode} +% Globally define element list. +% \begin{macrocode} + \global\cslet{@gls@combined@\@gls@combined@current@label @list}% + \@gls@combined@currentlist +% \end{macrocode} +% Globally define options. +% \begin{macrocode} + \protected@csxdef{@gls@combined@\@gls@combined@current@label @options}% + {\@gls@combined@current@opts}% +% \end{macrocode} +% Global conditional definition. +% \begin{macrocode} + \expandafter\@ifdefinable + \csname if@gls@combined@\@gls@combined@current@label @flag\endcsname + {\expandafter\global\expandafter + \newif\csname if@gls@combined@\@gls@combined@current@label @flag\endcsname}% + \expandafter\global + \csname @gls@combined@\@gls@combined@current@label @flagfalse\endcsname + \else +% \end{macrocode} +% Locally define element list. +% \begin{macrocode} + \cslet{@gls@combined@\@gls@combined@current@label @list}% + \@gls@combined@currentlist +% \end{macrocode} +% Locally define options. +% \begin{macrocode} + \protected@csedef{@gls@combined@\@gls@combined@current@label @options}% + {\@gls@combined@current@opts}% +% \end{macrocode} +% Local conditional definition. +% \begin{macrocode} + \newboolean{@gls@combined@\@gls@combined@current@label @flag}% + \csname @gls@combined@\@gls@combined@current@label @flagfalse\endcsname + \fi + \fi + \writemultiglossentry + {\@gls@combined@current@opts}{\@gls@combined@current@label}% + {\csuse{@gls@combined@\@gls@combined@current@label @main}}{#2}% +% \end{macrocode} +%Append label to list. +% \begin{macrocode} + \ifmultiglossaryentryglobal + \ifdefempty\@multi@glossaryentry@list + {\let\@multi@glossaryentry@list\@gls@combined@current@label}% + {% + \eappto\@multi@glossaryentry@list{,\expandonce\@gls@combined@current@label}% + }% + \else + \ifdefempty\@multi@glossaryentry@list + {\global\let\@multi@glossaryentry@list\@gls@combined@current@label}% + {% + \xappto\@multi@glossaryentry@list{,\expandonce\@gls@combined@current@label}% + }% + \fi +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@glsxtr@multientry} +%\begin{definition} +%\cs{@glsxtr@multientry}\marg{options}\marg{multilabel}\marg{main}\marg{list} +%\end{definition} +%Information for aux file. Useful for \app{bib2gls} and also for +%\pkgopt{docdef}. +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@glsxtr@multientry}[4]{% + \ifnum\@glsxtr@docdefval=1\relax + \bgroup + \def\@gls@combined@current@opts{#1}% + \def\@gls@combined@current@label{#2}% + \let\@multi@glossary@doifexists\@secondoftwo + \let\writemultiglossentry\@gobblefour + \multiglossaryentryglobaltrue + \@multi@glossary@entry{#3}{#4}% + \egroup + \fi +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\writemultiglossentry} +%\changes{1.48}{2021-11-22}{new} +%This can be redefined to do nothing if the information isn't +%required. +% \begin{macrocode} +\newcommand*{\writemultiglossentry}[4]{% + \protected@write\@auxout{}{\string\@glsxtr@multientry{#1}{#2}{#3}{#4}}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\ifmglsused} +%\changes{1.48}{2021-11-22}{new} +% Determines whether or not the multi-entry set has been referenced +% by commands like \cs{mgls} or \cs{mglsname}. +% \begin{macrocode} +\newcommand*{\ifmglsused}[3]{% + \ifbool{@gls@combined@#1@flag}{#2}{#3}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglsunset} +%\changes{1.48}{2021-11-22}{new} +%Unset the flag. +% \begin{macrocode} +\newcommand*{\mglsunset}[1]{% + \gls@ifnotmeasuring + {% + \glsxtrifmulti{#1}{\@mglsunset{#1}}% + {% + \glsxtrundefaction{Multi entry `#1' hasn't been defined}% + {You need to define `#1' with \string\multiglossaryentry}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@mglsunset} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@mglsunset}[1]{% + \expandafter\global\csname @gls@combined@#1@flagtrue\endcsname +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglsreset} +%\changes{1.48}{2021-11-22}{new} +%Unset the flag. +% \begin{macrocode} +\newcommand*{\mglsreset}[1]{% + \gls@ifnotmeasuring + {% + \glsxtrifmulti{#1}{\@mglsreset{#1}}% + {% + \glsxtrundefaction{Multi entry `#1' hasn't been defined}% + {You need to define `#1' with \string\multiglossaryentry}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@mglsreset} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@mglsreset}[1]{% + \expandafter\global\csname @gls@combined@#1@flagfalse\endcsname +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglslocalunset} +%\changes{1.48}{2021-11-22}{new} +%Unset the flag. +% \begin{macrocode} +\newcommand*{\mglslocalunset}[1]{% + \gls@ifnotmeasuring + {% + \glsxtrifmulti{#1}{\@mglslocalunset{#1}}% + {% + \glsxtrundefaction{Multi entry `#1' hasn't been defined}% + {You need to define `#1' with \string\multiglossaryentry}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@mglslocalunset} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@mglslocalunset}[1]{% + \csname @gls@combined@#1@flagtrue\endcsname +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglslocalreset} +%\changes{1.48}{2021-11-22}{new} +%Unset the flag. +% \begin{macrocode} +\newcommand*{\mglslocalreset}[1]{% + \gls@ifnotmeasuring + {% + \glsxtrifmulti{#1}{\@mglslocalreset{#1}}% + {% + \glsxtrundefaction{Multi entry `#1' hasn't been defined}% + {You need to define `#1' with \string\multiglossaryentry}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@mglslocalreset} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@mglslocalreset}[1]{% + \csname @gls@combined@#1@flagfalse\endcsname +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglsunsetall} +%\changes{1.48}{2021-11-22}{new} +%Unset all. +% \begin{macrocode} +\newcommand*{\mglsunsetall}{% + \@for\@mgls@thislabel:=\@multi@glossaryentry@list\do{\mglsunset\@mgls@thislabel}% +}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglsresetall} +%\changes{1.48}{2021-11-22}{new} +%Reset all. +% \begin{macrocode} +\newcommand*{\mglsresetall}{% + \@for\@mgls@thislabel:=\@multi@glossaryentry@list\do{\mglsreset\@mgls@thislabel}% +}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglsSetMain} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{mglsSetName}\marg{multi-label}\marg{new main} +%\end{definition} +%Allow the main label to be changed (local). +% \begin{macrocode} +\newrobustcmd{\mglsSetMain}[2]{% + \ifcsundef{@gls@combined@#1@main}% + {\PackageError{glossaries-extra}{Multi-entry label `#1' not defined}{}}% + {% + \protected@edef\@gls@combined@current@main{#2}% + \letcs\@gls@combined@currentlist{@gls@combined@#1@list}% +% \end{macrocode} +% Check that the given label is in the list of elements and update +% main and last other element index. +% \begin{macrocode} + \mglselementindex=0\relax + \count@=0\relax + \@for\@gls@tmp:=\@gls@combined@currentlist\do{% + \advance\mglselementindex by 1\relax + \ifx\@gls@combined@current@main\@gls@tmp + \count@=\mglselementindex\relax + \let\@gls@combined@finalitem\@gls@tmp + \ifmultiglossaryentryglobal + \global\cslet{@gls@combined@#1@main}\@gls@combined@current@main + \csxdef{@gls@combined@#1@mainindex}{\the\mglselementindex}% + \else + \cslet{@gls@combined@#1@main}\@gls@combined@current@main + \csedef{@gls@combined@#1@mainindex}{\the\mglselementindex}% + \fi + \else + \ifmultiglossaryentryglobal + \csxdef{@gls@combined@#1@lastotherindex}{\the\mglselementindex}% + \else + \csedef{@gls@combined@#1@lastotherindex}{\the\mglselementindex}% + \fi + \fi + }% + \ifnum\count@=0\relax + \PackageError{glossaries-extra}{Label `#2' is not in `#1' set + (\@gls@combined@currentlist)}{}% +% \end{macrocode} +% Default to final item. +% \begin{macrocode} + \ifmultiglossaryentryglobal + \global\cslet{@gls@combined@#1@main}\@gls@combined@finalitem + \csxdef{@gls@combined@#1@mainindex}{\the\mglselementindex}% + \csxdef{@gls@combined@#1@lastotherindex}{% + \number\numexpr\mglselementindex-1 }% + \else + \cslet{@gls@combined@#1@main}\@gls@combined@finalitem + \csedef{@gls@combined@#1@mainindex}{\the\mglselementindex}% + \csedef{@gls@combined@#1@lastotherindex}{% + \number\numexpr\mglselementindex-1 }% + \fi + \fi + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglsSetOptions} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{mglsSetOptions}\marg{multi-label}\marg{new options} +%\end{definition} +%Allow the options to be changed (local). No expansion is applied. +% \begin{macrocode} +\newrobustcmd{\mglsSetOptions}[2]{% + \ifcsundef{@gls@combined@#1@main}% + {\PackageError{glossaries-extra}{Multi-entry label `#1' not defined}{}}% + {% + \csdef{@gls@combined@#1@options}{#2}% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglsAddOptions} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{mglsAddOptions}\marg{multi-label}\marg{extra options} +%\end{definition} +%Allow the options to be changed (local). No expansion is applied. +% \begin{macrocode} +\newrobustcmd{\mglsAddOptions}[2]{% + \ifcsundef{@gls@combined@#1@main}% + {\PackageError{glossaries-extra}{Multi-entry label `#1' not defined}{}}% + {% + \ifcsempty{@gls@combined@#1@options}% + {\csdef{@gls@combined@#1@options}{#2}}% + {\csappto{@gls@combined@#1@options}{,#2}}% + }% +} +% \end{macrocode} +%\end{macro} +% +%Options for \cs{mgls}: +%\begin{macro}{\@mgls@all} +%\changes{1.48}{2021-11-22}{new} +%Options to apply to all elements. +% \begin{macrocode} +\newcommand*{\@mgls@all}{} +\define@key{mgls}{all}{\renewcommand*{\@mgls@all}{#1}} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@mgls@main} +%\changes{1.48}{2021-11-22}{new} +%Options to apply to the main element only. +% \begin{macrocode} +\newcommand*{\@mgls@main}{} +\define@key{mgls}{main}{\renewcommand*{\@mgls@main}{#1}} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@mgls@others} +%\changes{1.48}{2021-11-22}{new} +%Options to apply to the other (no main) elements. +% \begin{macrocode} +\newcommand*{\@mgls@others}{} +\define@key{mgls}{others}{\renewcommand*{\@mgls@others}{#1}} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@mgls@setup} +%\changes{1.48}{2021-11-22}{new} +%Options to apply to \cs{multiglossaryentrysetup}. +% \begin{macrocode} +\newcommand*{\@mgls@setup}{} +\define@key{mgls}{setup}{% + \@mgls@setup@do{\renewcommand*{\@mgls@setup}{#1}}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@mgls@setup@do} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@mgls@setup@do}[1]{#1} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@mgls@setup@do@not} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@mgls@setup@do@not}[1]{% + \PackageError{glossaries-extra}{`setup' key not permitted inside + `mglsopts' value}{}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mgls@disable@setup} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\mgls@disable@setup}{% + \let\@mgls@setup@do\@mgls@setup@do@not +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mgls@enable@setup} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\mgls@enable@setup}{% + \let\@mgls@setup@do\@firstofone +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@mgls@unsetaction} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand\@mgls@unsetaction{0} +\define@choicekey{mgls}{multiunset}[\@mgls@unsetaction@val\@mgls@unsetaction]% + {global,local,none}{} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\ifKV@mgls@presetlocal} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\define@boolkey{mgls}{presetlocal}[true]{} +\KV@mgls@presetlocalfalse +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@mgls@hyper} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@mgls@hyper}{} +\define@choicekey{mgls}{hyper}[\@mgls@hyper@val\@mgls@hyper@nr]{true,false}[true]% +{% + \renewcommand*{\@mgls@hyper}{hyper=#1}% + \ifnum\@mgls@hyper@nr=1\relax + \let\@mgls@hyperlink\@secondoftwo + \else + \let\@mgls@hyperlink\@@mgls@hyperlink + \fi +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@@mgls@hyperlink} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@@mgls@hyperlink}[2]{% + \ifx\@glslink\glsdonohyperlink + #2% + \else + \glsxtr@org@dohyperlink{\glolinkprefix#1}{#2}% + \fi +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@mgls@hyperlink} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\let\@mgls@hyperlink\@@mgls@hyperlink +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglsforelements} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{mglsforelements}\marg{multi-label}\marg{cs}\marg{body} +%\end{definition} +% \begin{macrocode} +\newcommand*{\mglsforelements}[3]{% + \expandafter\@for\expandafter#2\expandafter:\expandafter + =\csname @gls@combined@#1@list\endcsname\do{#3}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglsforotherelements} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{mglsforotherelements}\marg{multi-label}\marg{cs}\marg{body} +%\end{definition} +% \begin{macrocode} +\newcommand*{\mglsforotherelements}[3]{% + \expandafter\@for\expandafter#2\expandafter:\expandafter + =\csname @gls@combined@#1@list\endcsname\do + {\expandafter\ifdefequal\csname @gls@combined@#1@main\endcsname{#2}{}{#3}}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglsunsetothers} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\mglsunsetothers}[1]{% + \mglsforotherelements{#1}{\@gls@tmp}{\glsunset{\@gls@tmp}}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglslocalunsetothers} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\mglslocalunsetothers}[1]{% + \mglsforotherelements{#1}{\@gls@tmp}{\glslocalunset{\@gls@tmp}}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglselementreset} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\mglselementreset}[1]{% + \ifKV@mgls@presetlocal + \glslocalreset{#1}% + \else + \glsreset{#1}% + \fi +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglselementunset} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\mglselementunset}[1]{% + \ifKV@mgls@presetlocal + \glslocalunset{#1}% + \else + \glsunset{#1}% + \fi +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@mgls@resetall} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@mgls@resetall}{} +\define@choicekey{mgls}{resetall}% +[\@mgls@resetall@val\@mgls@resetall@nr]{false,true}[true]% +{% + \ifcase\@mgls@resetall@nr\relax + \renewcommand*{\@mgls@resetall}{}% + \or + \renewcommand*{\@mgls@resetall}{% + \@for\@gls@resetlabel:=\mglscurrentlist\do{\mglselementreset\@gls@resetlabel}}% + \renewcommand*{\@mgls@unsetall}{}% + \fi +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@mgls@resetmain} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@mgls@resetmain}{} +\define@choicekey{mgls}{resetmain} +[\@mgls@resetmain@val\@mgls@resetmain@nr]{false,true}[true]% +{% + \ifcase\@mgls@resetmain@nr\relax + \renewcommand*{\@mgls@resetmain}{}% + \or + \renewcommand*{\@mgls@resetmain}{\mglselementreset\mglscurrentmainlabel}% + \renewcommand*{\@mgls@unsetmain}{}% + \fi +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@mgls@resetothers} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@mgls@resetothers}{} +\define@choicekey{mgls}{resetothers} +[\@mgls@resetothers@val\@mgls@resetothers@nr]{false,true}[true]% +{% + \ifcase\@mgls@resetothers@nr\relax + \renewcommand*{\@mgls@resetothers}{}% + \or + \renewcommand*{\@mgls@resetothers}{% + \@for\@gls@resetlabel:=\mglscurrentlist\do{% + \ifx\@gls@resetlabel\mglscurrentmainlabel + \else + \mglselementreset\@gls@resetlabel + \fi + }% + }% + \renewcommand*{\@mgls@unsetothers}{}% + \fi +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@mgls@unsetall} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@mgls@unsetall}{} +\define@choicekey{mgls}{unsetall}% +[\@mgls@unsetall@val\@mgls@unsetall@nr]{false,true}[true]% +{% + \ifcase\@mgls@unsetall@nr\relax + \renewcommand*{\@mgls@unsetall}{}% + \or + \renewcommand*{\@mgls@unsetall}{% + \@for\@gls@unsetlabel:=\mglscurrentlist\do{\mglselementunset\@gls@unsetlabel}}% + \renewcommand*{\@mgls@resetall}{}% + \fi +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@mgls@unsetmain} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@mgls@unsetmain}{} +\define@choicekey{mgls}{unsetmain} +[\@mgls@unsetmain@val\@mgls@unsetmain@nr]{false,true}[true]% +{% + \ifcase\@mgls@unsetmain@nr\relax + \renewcommand*{\@mgls@unsetmain}{}% + \or + \renewcommand*{\@mgls@unsetmain}{\mglselementunset\mglscurrentmainlabel}% + \renewcommand*{\@mgls@resetmain}{}% + \fi +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@mgls@unsetothers} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@mgls@unsetothers}{} +\define@choicekey{mgls}{unsetothers} +[\@mgls@unsetothers@val\@mgls@unsetothers@nr]{false,true}[true]% +{% + \ifcase\@mgls@unsetothers@nr\relax + \renewcommand*{\@mgls@unsetothers}{}% + \or + \renewcommand*{\@mgls@unsetothers}{% + \@for\@gls@unsetlabel:=\mglscurrentlist\do{% + \ifx\@gls@unsetlabel\mglscurrentmainlabel + \else + \mglselementunset\@gls@unsetlabel + \fi + }% + }% + \renewcommand*{\@mgls@resetothers}{}% + \fi +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsxtr@setup@docurrent} +%\changes{1.48}{2021-11-22}{new} +%Set up the commands to determine whether or not to do the current +%element. +% \begin{macrocode} +\newcommand{\glsxtr@setup@docurrent}{% +% \end{macrocode} +% \cs{mglscurrentlabel} expands to the label of the current element. +% Should this element be skipped? +% \begin{macrocode} + \ifx\mglscurrentlabel\mglscurrentmainlabel +% \end{macrocode} +% Main element. Should it be skipped? +% \begin{macrocode} + \mglsisfirstuse + {% + \ifKV@glsxtrcombined@firstskipmain + \let\@mgls@do@current@element\@gobble + \else + \let\@mgls@do@current@element\@firstofone + \fi + }% + {% + \ifKV@glsxtrcombined@usedskipmain + \let\@mgls@do@current@element\@gobble + \else + \let\@mgls@do@current@element\@firstofone + \fi + }% + \else +% \end{macrocode} +% Other element. Should it be skipped? +% \begin{macrocode} + \mglsisfirstuse + {% + \ifKV@glsxtrcombined@firstskipothers + \let\@mgls@do@current@element\@gobble + \else + \let\@mgls@do@current@element\@firstofone + \fi + }% + {% + \ifKV@glsxtrcombined@usedskipothers + \let\@mgls@do@current@element\@gobble + \else + \let\@mgls@do@current@element\@firstofone + \fi + }% + \fi +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsxtr@mgls@checklastelement} +%\changes{1.48}{2021-11-22}{new} +% If the last element is skipped, \cs{mglsiflast} needs +% adjusting. +% The first argument should be either "first" or "used". +% The second argument is the multi-element label. +% \begin{macrocode} +\newcommand*{\glsxtr@mgls@checklastelement}[2]{% + \ifbool{KV@glsxtrcombined@#1skipmain}% + {% + \ifbool{KV@glsxtrcombined@#1skipothers}% + {% +% \end{macrocode} +% This condition has already been checked for. +% \begin{macrocode} + }% + {% +% \end{macrocode} +% Main skipped. The last item will be the last other element. +% \begin{macrocode} + \ifnum\mglselementindex=\glsxtrmultilastotherindex{#2}\relax + \let\mglsiflast\@firstoftwo + \else + \let\mglsiflast\@secondoftwo + \fi + }% + }% + {% +% \end{macrocode} +% Main not skipped. +% \begin{macrocode} + \ifbool{KV@glsxtrcombined@#1skipothers}% + {% +% \end{macrocode} +% Others skipped. The main element is the only item. +% \begin{macrocode} + \ifnum\mglselementindex=\glsxtrmultimainindex{#2}\relax + \let\mglsiflast\@firstoftwo + \else + \let\mglsiflast\@secondoftwo + \fi + }% + {% +% \end{macrocode} +% None skipped. This isn't the last element. +% \begin{macrocode} + \let\mglsiflast\@secondoftwo + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsxtrmglsWarnAllSkipped} +%\changes{1.48}{2021-11-22}{new} +%Warning if all elements are skipped. The first argument is the +%warning message, the second argument is the inserted content (final +%optional argument), the third command is the encapsulation command +%(which may be a hyperlink). +% \begin{macrocode} +\newcommand{\glsxtrmglsWarnAllSkipped}[3]{% + \GlossariesExtraWarning{#1}% + #3{#2}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsxtr@mgls@applyopts} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\glsxtr@mgls@applyopts}[1]{% + \edef\@mgls@dooptions{\noexpand\setkeys*{mgls}{\expandonce#1}}% + \@mgls@dooptions +% \end{macrocode} +% Append any unknown options to all. +% \begin{macrocode} + \ifdefvoid\XKV@rm{}{\eappto\@mgls@all{,\expandonce\XKV@rm}}% +% \end{macrocode} +% If setup key has been used, check for pre-option keys: +% \begin{macrocode} + \ifdefvoid\@mgls@setup + {}% + {% + \edef\@mgls@dooptions{% + \noexpand\setkeys*{glsxtrcombinedpreopts}{\expandonce\@mgls@setup}}% + \mgls@disable@mglsopts + \@mgls@dooptions + \mgls@enable@mglsopts +% \end{macrocode} +% Save remaining setup options. +% \begin{macrocode} + \ifx\@mgls@setupoptions\@empty + \let\@mgls@setupoptions\XKV@rm + \else + \eappto\@mgls@setupoptions{,\expandonce\XKV@rm}% + \fi + }% +% \end{macrocode} +% Apply gls unset/reset options. +% \begin{macrocode} + \@mgls@resetall + \@mgls@unsetall + \@mgls@resetmain + \@mgls@unsetmain + \@mgls@resetothers + \@mgls@unsetothers +% \end{macrocode} +% Disable. +% \begin{macrocode} + \let\@mgls@resetall\@empty + \let\@mgls@resetmain\@empty + \let\@mgls@resetothers\@empty + \let\@mgls@unsetall\@empty + \let\@mgls@unsetmain\@empty + \let\@mgls@unsetothers\@empty +% \end{macrocode} +% First use flags. +% \begin{macrocode} + \ifmglsused\mglscurrentmultilabel + {\let\mglsisfirstuse\@secondoftwo}% + {\let\mglsisfirstuse\@firstoftwo}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@firstofthree} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\providecommand{\@firstofthree}[3]{#1} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@secondofthree} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\providecommand{\@secondofthree}[3]{#2} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@thirdofthree} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\providecommand{\@thirdofthree}[3]{#3} +% \end{macrocode} +%\end{macro} +% +%The main internal command for referencing multi-entries: +%\begin{macro}{\glsxtr@mgls@inner} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{glsxtr@mgls@inner}\marg{options}\marg{label}\marg{insert}\marg{first +%cs}\marg{not first cs}\marg{main first cs}\marg{main other cs} +%\end{definition} +% \begin{macrocode} +\newcommand*{\glsxtr@mgls@inner}[7]{% + \let\mglslastmainlabel\@empty + \let\mglsiflastmainwasfirstuse\@firstoftwo + \let\mglsiflastmainwasplural\@secondoftwo + \let\mglsiflastmaincapscase\@firstofthree + \let\mglsiflastmainskipped\@firstoftwo + \bgroup + \ifcsundef{@gls@combined@#2@main}% + {% + \glsxtrundefaction{Multi entry `#2' hasn't been defined}% + {You need to define `#2' with \string\multiglossaryentry}% + \gdef\@mgls@post@hookdefs{% + \protected@edef\mglslastmultilabel{#2}% + \let\mglswasfirstuse\@firstoftwo + \let\mglslastcategory\@empty + \let\mglsiflastelementskipped\@firstoftwo + \let\mglsiflastelementwasfirstuse\@firstoftwo + \let\mglsiflastelementwasplural\@secondoftwo + \let\mglsiflastelementcapscase\@firstofthree + \let\mglslastelementlabel\@empty + \let\mgls@do@postlinkhook\relax + }% + }% + {% + \protected@edef\mglscurrentmultilabel{#2}% + \letcs\mglscurrentmainlabel{@gls@combined@#2@main}% + \letcs\mglscurrentlist{@gls@combined@#2@list}% + \letcs\mglscurrentoptions{@gls@combined@#2@options}% +% \end{macrocode} +% Initialise (may be changed if \texttt{multiunset} is present): +% \begin{macrocode} + \ifmglsused\mglscurrentmultilabel + {\let\mglsisfirstuse\@secondoftwo}% + {\let\mglsisfirstuse\@firstoftwo}% +% \end{macrocode} +% Only obtain pre-option keys: +% \begin{macrocode} + \edef\@mgls@dooptions{% + \noexpand\setkeys*{glsxtrcombinedpreopts}{\expandonce\mglscurrentoptions}}% + \@mgls@dooptions +% \end{macrocode} +% Save remaining setup options. +% \begin{macrocode} + \let\@mgls@setupoptions\XKV@rm +% \end{macrocode} +% Apply \cs{mgls} options. +% \begin{macrocode} + \mgls@disable@setup + \ifdefvoid\@gls@combined@mglsopts + {}% + {\glsxtr@mgls@applyopts\@gls@combined@mglsopts}% + \mgls@enable@setup +% \end{macrocode} +% Apply options provided in \verb|#1|. +% \begin{macrocode} + \ifstrempty{#1}{}{\def\@mgls@options{#1}\glsxtr@mgls@applyopts\@mgls@options}% +% \end{macrocode} +% Check for attribute settings. +% \begin{macrocode} + \ifx\@gls@combined@category\empty +% \end{macrocode} +% No category +% \begin{macrocode} + \else +% \end{macrocode} +% Attribute options: +% \begin{macrocode} + \glshascategoryattribute{\@gls@combined@category}{multioptions}% + {% + \letcs\@mgls@attroptions{@glsxtr@categoryattr@@\@gls@combined@category + @multioptions}% +% \end{macrocode} +% Only obtain pre-option keys: +% \begin{macrocode} + \let\@gls@combined@mglsopts\@empty + \edef\@mgls@dooptions{% + \noexpand\setkeys*{glsxtrcombinedpreopts}{\expandonce\@mgls@attroptions}}% + \@mgls@dooptions +% \end{macrocode} +% Append remaining options: +% \begin{macrocode} + \eappto\@mgls@setupoptions{,\expandonce\XKV@rm}% + \ifx\@gls@combined@mglsopts\@empty + \else +% \end{macrocode} +% mgls options found: +% \begin{macrocode} + \let\@mgls@setup\@empty + \mgls@disable@setup + \glsxtr@mgls@applyopts\@gls@combined@mglsopts + \mgls@enable@setup + \fi + }% + {}% + \fi +% \end{macrocode} +% Apply setup options. +% \begin{macrocode} + \edef\@mgls@dooptions{% + \noexpand\setkeys{glsxtrcombined}{\expandonce\@mgls@setupoptions}}% + \@mgls@dooptions +% \end{macrocode} +% Provide local user-level access to category: +% \begin{macrocode} + \let\mglscurrentcategory\@gls@combined@category +% \end{macrocode} +% Should the entire content be a hyperlink? +% \begin{macrocode} + \ifnum\@gls@combined@hyper=1\relax + \def\@mgls@combinedlink{\@mgls@hyperlink{\mglscurrentmainlabel}}% + \else + \def\@mgls@combinedlink{\@firstofone}% + \fi +% \end{macrocode} +% Entire content encapsulator. +% \begin{macrocode} + \def\@gls@combined@encapsulator##1{% + \@mgls@combinedlink{\csuse{\@gls@combined@textformat}{##1}}}% +% \end{macrocode} +% Initialise. +% \begin{macrocode} + \let\@mgls@do@current@element\@firstofone +% \end{macrocode} +% Check if all elements are being skipped. +% \begin{macrocode} + \mglsisfirstuse + {% + \ifKV@glsxtrcombined@firstskipmain + \ifKV@glsxtrcombined@firstskipothers +% \end{macrocode} +% Just do the warning and insert. This will ignore the loop. +% \begin{macrocode} + \let\@gls@org@combined@encapsulator\@gls@combined@encapsulator + \def\@gls@combined@encapsulator##1{% + \glsxtrmglsWarnAllSkipped{All elements skipped for + first use of multi-entry `#2'}{#3}% + {\@gls@org@combined@encapsulator}% + }% + \let\@mgls@do@current@element\@gobble + \fi + \fi + }% + {% + \ifKV@glsxtrcombined@usedskipmain + \ifKV@glsxtrcombined@usedskipothers +% \end{macrocode} +% Just do the warning and insert. This will ignore the loop. +% \begin{macrocode} + \let\@gls@org@combined@encapsulator\@gls@combined@encapsulator + \def\@gls@combined@encapsulator##1{% + \glsxtrmglsWarnAllSkipped{All elements skipped for + subsequent use of multi-entry `#2'}{#3}% + {\@gls@org@combined@encapsulator}% + }% + \let\@mgls@do@current@element\@gobble + \fi + \fi + }% +% \end{macrocode} +% Determine prefix and suffix. +% \begin{macrocode} + \mglsisfirstuse + {% + \let\mglscurrentprefix\@gls@combined@firstprefix + \let\mglscurrentsuffix\@gls@combined@firstsuffix + }% + {% + \let\mglscurrentprefix\@gls@combined@usedprefix + \let\mglscurrentsuffix\@gls@combined@usedsuffix + }% +% \end{macrocode} +%Set up post-link hook used after current scope. +% \begin{macrocode} + \xdef\@mgls@post@hookdefs{% + \noexpand\def\noexpand\mglslastmultilabel{\expandonce\mglscurrentmultilabel}% + \noexpand\def\noexpand\mglslastcategory{\mglscurrentcategory}% + }% + \ifx\@mgls@do@current@element\@gobble + \gappto\@mgls@post@hookdefs{% + \let\mglsiflastelementskipped\@firstoftwo + \let\mglslastelementlabel\@empty + \let\mglsiflastelementwasfirstuse\@firstoftwo + \let\mglsiflastelementwasplural\@secondoftwo + \let\mglsiflastelementcapscase\@firstofthree + }% + \fi + \mglsisfirstuse + {% + \gappto\@mgls@post@hookdefs{\let\mglswasfirstuse\@firstoftwo}% +% \end{macrocode} +% Determine if the multi-entry post-link hook should be applied. +% \begin{macrocode} + \ifcase\@gls@combined@mpostlink@nr\relax +% \end{macrocode} +% \texttt{mpostlink=false}. +% \begin{macrocode} + \gappto\@mgls@post@hookdefs{\let\mgls@do@postlinkhook\relax}% + \or +% \end{macrocode} +% \texttt{mpostlink=true}. +% \begin{macrocode} + \ifcase\@gls@combined@mpostlinkelement@nr\relax + \gappto\@mgls@post@hookdefs{\let\mgls@do@postlinkhook\mglslastelementpostlinkhook}% + \or + \gappto\@mgls@post@hookdefs{\let\mgls@do@postlinkhook\mglslastmainpostlinkhook}% + \or + \gappto\@mgls@post@hookdefs{\let\mgls@do@postlinkhook\mglscustompostlinkhook}% + \fi + \or +% \end{macrocode} +% \texttt{mpostlink=firstonly}. +% \begin{macrocode} + \ifcase\@gls@combined@mpostlinkelement@nr\relax + \gappto\@mgls@post@hookdefs{\let\mgls@do@postlinkhook\mglslastelementpostlinkhook}% + \or + \gappto\@mgls@post@hookdefs{\let\mgls@do@postlinkhook\mglslastmainpostlinkhook}% + \or + \gappto\@mgls@post@hookdefs{\let\mgls@do@postlinkhook\mglscustompostlinkhook}% + \fi + \or +% \end{macrocode} +% \texttt{mpostlink=usedonly}. +% \begin{macrocode} + \gappto\@mgls@post@hookdefs{\let\mgls@do@postlinkhook\relax}% + \fi + }% + {% + \gappto\@mgls@post@hookdefs{\let\mglswasfirstuse\@secondoftwo}% +% \end{macrocode} +% Determine if the multi-entry post-link hook should be applied. +% \begin{macrocode} + \ifcase\@gls@combined@mpostlink@nr\relax +% \end{macrocode} +% \texttt{mpostlink=false}. +% \begin{macrocode} + \gappto\@mgls@post@hookdefs{\let\mgls@do@postlinkhook\relax}% + \or +% \end{macrocode} +% \texttt{mpostlink=true}. +% \begin{macrocode} + \ifcase\@gls@combined@mpostlinkelement@nr\relax + \gappto\@mgls@post@hookdefs{\let\mgls@do@postlinkhook\mglslastelementpostlinkhook}% + \or + \gappto\@mgls@post@hookdefs{\let\mgls@do@postlinkhook\mglslastmainpostlinkhook}% + \or + \gappto\@mgls@post@hookdefs{\let\mgls@do@postlinkhook\mglscustompostlinkhook}% + \fi + \or +% \end{macrocode} +% \texttt{mpostlink=firstonly}. +% \begin{macrocode} + \gappto\@mgls@post@hookdefs{\let\mgls@do@postlinkhook\relax}% + \or +% \end{macrocode} +% \texttt{mpostlink=usedonly}. +% \begin{macrocode} + \ifcase\@gls@combined@mpostlinkelement@nr\relax + \gappto\@mgls@post@hookdefs{\let\mgls@do@postlinkhook\mglslastelementpostlinkhook}% + \or + \gappto\@mgls@post@hookdefs{\let\mgls@do@postlinkhook\mglslastmainpostlinkhook}% + \or + \gappto\@mgls@post@hookdefs{\let\mgls@do@postlinkhook\mglscustompostlinkhook}% + \fi + \fi + }% +% \end{macrocode} +% Save current post-link hook. +% \begin{macrocode} + \let\mgls@org@postlinkhook\glspostlinkhook +% \end{macrocode} +% Prefix. +% \begin{macrocode} + \mglsprefix +% \end{macrocode} +% Initialise last element label (for \cs{mglssuffix}). +% \begin{macrocode} + \let\mglslastelementlabel\@empty + \@gls@combined@encapsulator + {% +% \end{macrocode} +% Save previous label. +% \begin{macrocode} + \def\@mgls@previouslabel{}% + \mglselementindex=0\relax + \@for\mglscurrentlabel:=\mglscurrentlist\do{% + \advance\mglselementindex by 1\relax + \glsxtr@setup@docurrent +% \end{macrocode} +% Is this the last element? +% \begin{macrocode} + \ifx\@xfor@nextelement\@nnil + \let\mglsiflast\@firstoftwo + \else + \let\mglsiflast\@secondoftwo +% \end{macrocode} +% Are any elements being skipped? +% \begin{macrocode} + \mglsisfirstuse + {% + \glsxtr@mgls@checklastelement{first}{#2}% + }% + {% + \glsxtr@mgls@checklastelement{used}{#2}% + }% + \fi +% \end{macrocode} +% Should the element post-link hook be used? +% \begin{macrocode} + \ifcase\@gls@combined@postlinks@nr\relax +% \end{macrocode} +% \texttt{postlinks=none} +% \begin{macrocode} + \let\glspostlinkhook\relax + \or +% \end{macrocode} +% \texttt{postlinks=all} +% \begin{macrocode} + \let\glspostlinkhook\mgls@org@postlinkhook + \or +% \end{macrocode} +% \texttt{postlinks=notlast} +% \begin{macrocode} + \mglsiflast + {% + \let\glspostlinkhook\relax + }% + {% + \let\glspostlinkhook\mgls@org@postlinkhook + }% + \or +% \end{macrocode} +% \texttt{postlinks=mainnotlast} +% \begin{macrocode} + \ifx\mglscurrentlabel\mglscurrentmainlabel + \mglsiflast + {% + \let\glspostlinkhook\relax + }% + {% + \let\glspostlinkhook\mgls@org@postlinkhook + }% + \else + \let\glspostlinkhook\relax + \fi + \or +% \end{macrocode} +% \texttt{postlinks=mainonly} +% \begin{macrocode} + \ifx\mglscurrentlabel\mglscurrentmainlabel + \let\glspostlinkhook\mgls@org@postlinkhook + \else + \let\glspostlinkhook\relax + \fi + \or +% \end{macrocode} +% \texttt{postlinks=othernotlast} +% \begin{macrocode} + \ifx\mglscurrentlabel\mglscurrentmainlabel + \let\glspostlinkhook\relax + \else + \mglsiflast + {% + \let\glspostlinkhook\relax + }% + {% + \let\glspostlinkhook\mgls@org@postlinkhook + }% + \fi + \or +% \end{macrocode} +% \texttt{postlinks=otheronly} +% \begin{macrocode} + \ifx\mglscurrentlabel\mglscurrentmainlabel + \let\glspostlinkhook\relax + \else + \let\glspostlinkhook\mgls@org@postlinkhook + \fi + \fi +% \end{macrocode} +% Save the last element for the multi-entry post-link hook. +% \begin{macrocode} + \mglsiflast + {% + \xappto\@mgls@post@hookdefs{% + \noexpand\def\noexpand\mglslastelementlabel + {\expandonce\mglscurrentlabel}}% + }% + {}% +% \end{macrocode} +% Do current element: +% \begin{macrocode} + \@mgls@do@current@element + {% +% \end{macrocode} +% Pre element hook. +% \begin{macrocode} + \mglselementprehook +% \end{macrocode} +% Is this the first use of the current element? +% \begin{macrocode} + \GlsXtrIfUnusedOrUndefined{\mglscurrentlabel}% + {\let\@mgls@current@iffirstuse\@firstoftwo}% + {\let\@mgls@current@iffirstuse\@secondoftwo}% + \ifx\mglscurrentlabel\mglscurrentmainlabel +% \end{macrocode} +% Main element. +% Location encap option: +% \begin{macrocode} + \edef\@mgls@current@options{format=\@gls@combined@encapmain}% +% \end{macrocode} +%Indexing option: +% \begin{macrocode} + \ifcase\@gls@combined@indexmain + \appto\@mgls@current@options{,noindex}% + \or + \appto\@mgls@current@options{,noindex=false}% + \or + \@mgls@current@iffirstuse + {\appto\@mgls@current@options{,noindex=false}}% + {\appto\@mgls@current@options{,noindex}}% + \fi +% \end{macrocode} +% Hyperlink option: +% \begin{macrocode} + \ifcase\@gls@combined@hyper\relax + \appto\@mgls@current@options{,hyper=false}% none + \or + \appto\@mgls@current@options{,hyper=false}% allmain + \or + \eappto\@mgls@current@options{,\@mgls@hyper}% mainonly + \or + \eappto\@mgls@current@options{,\@mgls@hyper}% individual + \or + \appto\@mgls@current@options{,hyper=false}% otheronly + \or + \mglsisfirstuse + {% + \appto\@mgls@current@options{,hyper=false}% notmainfirst + }% + {% + \eappto\@mgls@current@options{,\@mgls@hyper}% notmainfirst + }% + \or + \eappto\@mgls@current@options{,\@mgls@hyper}% nototherfirst + \or + \mglsisfirstuse + {% + \appto\@mgls@current@options{,hyper=false}% notfirst + }% + {% + \eappto\@mgls@current@options{,\@mgls@hyper}% notfirst + }% + \fi +% \end{macrocode} +%Append all and then main: +% \begin{macrocode} + \eappto\@mgls@current@options{,\@mgls@all,\@mgls@main}% + \else +% \end{macrocode} +% Other element. +% Location encap option: +% \begin{macrocode} + \edef\@mgls@current@options{format=\@gls@combined@encapothers}% +% \end{macrocode} +% Indexing option: +% \begin{macrocode} + \ifcase\@gls@combined@indexothers\relax + \appto\@mgls@current@options{,noindex}% + \or + \appto\@mgls@current@options{,noindex=false}% + \or + \@mgls@current@iffirstuse + {\appto\@mgls@current@options{,noindex=false}}% + {\appto\@mgls@current@options{,noindex}}% + \fi +% \end{macrocode} +% Hyperlink option: +% \begin{macrocode} + \ifcase\@gls@combined@hyper\relax + \appto\@mgls@current@options{,hyper=false}% none + \or + \appto\@mgls@current@options{,hyper=false}% allmain + \or + \appto\@mgls@current@options{,hyper=false}% mainonly + \or + \eappto\@mgls@current@options{,\@mgls@hyper}% individual + \or + \eappto\@mgls@current@options{,\@mgls@hyper}% otheronly + \or + \eappto\@mgls@current@options{,\@mgls@hyper}% notmainfirst + \or + \mglsisfirstuse + {% + \appto\@mgls@current@options{,hyper=false}% nototherfirst + }% + {% + \eappto\@mgls@current@options{,\@mgls@hyper}% nototherfirst + }% + \or + \mglsisfirstuse + {% + \appto\@mgls@current@options{,hyper=false}% notfirst + }% + {% + \eappto\@mgls@current@options{,\@mgls@hyper}% notfirst + }% + \fi +% \end{macrocode} +%Append all and then others: +% \begin{macrocode} + \eappto\@mgls@current@options{,\@mgls@all,\@mgls@others}% + \fi +% \end{macrocode} +% Is this the first element? +% \begin{macrocode} + \ifx\@mgls@previouslabel\empty + \ifx\mglscurrentlabel\mglscurrentmainlabel + \let\@mgls@cs#6\relax + \else + \let\@mgls@cs#4\relax + \fi + \else +% \end{macrocode} +% Not the first element so add separator. +% \begin{macrocode} + \@mgls@previous@iffirstuse + {% + \@mgls@current@iffirstuse + {\glscombinedfirstsepfirst{\@mgls@previouslabel}{\mglscurrentlabel}}% + {\glscombinedfirstsep{\@mgls@previouslabel}{\mglscurrentlabel}}% + }% + {% + \@mgls@current@iffirstuse + {\glscombinedsepfirst{\@mgls@previouslabel}{\mglscurrentlabel}}% + {\glscombinedsep{\@mgls@previouslabel}{\mglscurrentlabel}}% + }% + \ifx\mglscurrentlabel\mglscurrentmainlabel + \let\@mgls@cs#7\relax + \else + \let\@mgls@cs#5\relax + \fi + \fi +% \end{macrocode} +% Is this the last element? +% \begin{macrocode} + \mglsiflast + {\expandafter\@mgls@cs\expandafter{\@mgls@current@options}{\mglscurrentlabel}[#3]}% + {\expandafter\@mgls@cs\expandafter{\@mgls@current@options}{\mglscurrentlabel}[]}% +% \end{macrocode} +% Is this the main element? If so, save information for post-link +% hook. +% \begin{macrocode} + \ifx\mglscurrentlabel\mglscurrentmainlabel + \xappto\@mgls@post@hookdefs{% + \noexpand\def\noexpand\mglslastmainlabel + {\expandonce\mglscurrentmainlabel}% + }% + \glsxtrifwasfirstuse + {% + \gappto\@mgls@post@hookdefs{\let\mglsiflastmainwasfirstuse\@firstoftwo}% + }% + {% + \gappto\@mgls@post@hookdefs{\let\mglsiflastmainwasfirstuse\@secondoftwo}% + }% + \glsifplural + {% + \gappto\@mgls@post@hookdefs{\let\mglsiflastmainwasplural\@firstoftwo}% + }% + {% + \gappto\@mgls@post@hookdefs{\let\mglsiflastmainwasplural\@secondoftwo}% + }% + \glscapscase + {% + \gappto\@mgls@post@hookdefs{% + \let\mglsiflastmaincapscase\@firstofthree + }% + }% + {% + \gappto\@mgls@post@hookdefs{% + \let\mglsiflastmaincapscase\@secondofthree + }% + }% + {% + \gappto\@mgls@post@hookdefs{% + \let\mglsiflastmaincapscase\@thirdofthree + }% + }% + \fi + \let\@mgls@previouslabel\mglscurrentlabel + \let\@mgls@previous@iffirstuse\@mgls@current@iffirstuse + }% +% \end{macrocode} +% Post element hook. +% \begin{macrocode} + \mglselementposthook + }% + \ifx\mglslastmainlabel\@empty + \gappto\@mgls@post@hookdefs{\let\mglsiflastmainskipped\@firstoftwo}% + \else + \gappto\@mgls@post@hookdefs{\let\mglsiflastmainskipped\@secondoftwo}% + \fi +% \end{macrocode} +% Encapsulator may introduce grouping so check here. +% \begin{macrocode} + \ifx\@mgls@do@current@element\@gobble + \gappto\@mgls@post@hookdefs{\let\mglsiflastelementskipped\@firstoftwo}% + \else + \gappto\@mgls@post@hookdefs{\let\mglsiflastelementskipped\@secondoftwo}% + \fi + \glsxtrifwasfirstuse + {% + \gappto\@mgls@post@hookdefs{\let\mglsiflastelementwasfirstuse\@firstoftwo}% + }% + {% + \gappto\@mgls@post@hookdefs{\let\mglsiflastelementwasfirstuse\@secondoftwo}% + }% + \glsifplural + {% + \gappto\@mgls@post@hookdefs{\let\mglsiflastelementwasplural\@firstoftwo}% + }% + {% + \gappto\@mgls@post@hookdefs{\let\mglsiflastelementwasplural\@secondoftwo}% + }% + \glscapscase + {% + \gappto\@mgls@post@hookdefs{% + \let\mglsiflastelementcapscase\@firstofthree + }% + }% + {% + \gappto\@mgls@post@hookdefs{% + \let\mglsiflastelementcapscase\@secondofthree + }% + }% + {% + \gappto\@mgls@post@hookdefs{% + \let\mglsiflastelementcapscase\@thirdofthree + }% + }% + }% +% \end{macrocode} +% Suffix needs post-link hook commands. +% \begin{macrocode} + \@mgls@post@hookdefs + \mglssuffix +% \end{macrocode} +%Unset multi-entry first use flag after current scope. +% \begin{macrocode} + \ifcase\@mgls@unsetaction\relax + \xappto\@mgls@post@hookdefs{% + \noexpand\mglsunset{\expandonce\mglscurrentmultilabel}}% + \or + \xappto\@mgls@post@hookdefs{% + \noexpand\mglslocalunset{\expandonce\mglscurrentmultilabel}}% + \fi + }% + \glsxtrmglswrite{#2}% + \egroup + \@mgls@post@hookdefs + \mgls@do@postlinkhook +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglscustompostlinkhook} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\mglscustompostlinkhook}{} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglslastelementpostlinkhook} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\mglslastelementpostlinkhook}{% + \let\glsxtrifwasfirstuse\mglsiflastelementwasfirstuse + \let\glsifplural\mglsiflastelementwasplural + \let\glscapscase\mglsiflastelementcapscase + \let\glslabel\mglslastelementlabel + \glspostlinkhook +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglslastmainpostlinkhook} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\mglslastmainpostlinkhook}{% + \let\glsxtrifwasfirstuse\mglsiflastmainwasfirstuse + \let\glsifplural\mglsiflastmainwasplural + \let\glscapscase\mglsiflastmaincapscase + \let\glslabel\mglslastmainlabel + \glspostlinkhook +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglsdefcategoryprefix} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\mglsdefcategoryprefix}[2]{% + \csdef{mglsprefix@#1}{#2}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglshascategoryprefix} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\mglshascategoryprefix}[3]{% + \ifcsdef{mglsprefix@#1}{#2}{#3}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglsusecategoryprefix} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\mglsusecategoryprefix}[1]{% + \csuse{mglsprefix@#1}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglsprefix} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\mglsprefix}{% + \ifdefempty\mglscurrentcategory + {\mglscurrentprefix}% + {% + \mglshascategoryprefix{\mglscurrentcategory}% + {\mglsusecategoryprefix{\mglscurrentcategory}}% + {\mglscurrentprefix}% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglsdefcategorysuffix} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\mglsdefcategorysuffix}[2]{% + \csdef{mglssuffix@#1}{#2}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglshascategorysuffix} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\mglshascategorysuffix}[3]{% + \ifcsdef{mglssuffix@#1}{#2}{#3}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglsusecategorysuffix} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\mglsusecategorysuffix}[1]{% + \csuse{mglssuffix@#1}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglssuffix} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\mglssuffix}{% + \ifdefempty\mglscurrentcategory + {\ifdefempty{\mglscurrentsuffix}{}{\space(\mglscurrentsuffix)}}% + {% + \mglshascategorysuffix{\mglscurrentcategory}% + {\mglsusecategorysuffix{\mglscurrentcategory}}% + {\ifdefempty{\mglscurrentsuffix}{}{\space(\mglscurrentsuffix)}}% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglselementprehook} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\mglselementprehook}{} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglselementposthook} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\mglselementposthook}{} +% \end{macrocode} +%\end{macro} +% +%Separators. +%\begin{macro}{\glscombinedsep} +%\changes{1.48}{2021-11-22}{new} +%Separator between two elements that have been marked as used. +%This takes the two element labels as arguments. +% \begin{macrocode} +\newcommand*{\glscombinedsep}[2]{% + \glshasattribute{#1}{combinedsep}% + {\glsgetattribute{#1}{combinedsep}}% + { }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glscombinedfirstsepfirst} +%\changes{1.48}{2021-11-22}{new} +%Separator following and preceding a first use. +% \begin{macrocode} +\newcommand*{\glscombinedfirstsepfirst}[2]{% + \glshasattribute{#1}{combinedfirstsepfirst}% + {\glsgetattribute{#1}{combinedfirstsepfirst}}% + {\glscombinedsep{#1}{#2}}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glscombinedfirstsep} +%\changes{1.48}{2021-11-22}{new} +%Separator following a first use. +% \begin{macrocode} +\newcommand*{\glscombinedfirstsep}[2]{% + \glshasattribute{#1}{combinedfirstsep}% + {\glsgetattribute{#1}{combinedfirstsep}}% + {\glscombinedsep{#1}{#2}}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glscombinedsepfirst} +%\changes{1.48}{2021-11-22}{new} +%Separator preceding a first use. +% \begin{macrocode} +\newcommand*{\glscombinedsepfirst}[2]{% + \glshasattribute{#1}{combinedsepfirst}% + {\glsgetattribute{#1}{combinedsepfirst}}% + {\glscombinedsep{#1}{#2}}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glssetcombinedsepabbrvnbsp} +%\changes{1.48}{2021-11-22}{new} +%Provide shortcut for using non-breakable space following an +%abbreviation that has already been used. +% \begin{macrocode} +\newcommand*{\glssetcombinedsepabbrvnbsp}{% + \renewcommand*{\glscombinedsep}[2]{% + \glshasattribute{##1}{combinedsep}% + {\glsgetattribute{##1}{combinedsep}}% + {\ifhasshort{##1}{~}{ }}% + }% + \renewcommand*{\glscombinedsepfirst}[2]{% + \glshasattribute{##1}{combinedsepfirst}% + {\glsgetattribute{##1}{combinedsepfirst}}% + {\ifhasshort{##1}{~}{ }}% + }% + \renewcommand*{\glscombinedfirstsep}[2]{% + \glshasattribute{##1}{combinedfirstsep}% + {\glsgetattribute{##1}{combinedfirstsep}}% + { }% + }% + \renewcommand*{\glscombinedfirstsepfirst}[2]{% + \glshasattribute{##1}{combinedfirstsepfirst}% + {\glsgetattribute{##1}{combinedfirstsepfirst}}% + { }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glssetcombinedsepabbrvnone} +%\changes{1.48}{2021-11-22}{new} +%Provide shortcut for using nothing if either on next use are +%abbreviations (otherwise use space). +% \begin{macrocode} +\newcommand*{\glssetcombinedsepabbrvnone}{% + \renewcommand*{\glscombinedsep}[2]{% + \glshasattribute{##1}{combinedsep}% + {\glsgetattribute{##1}{combinedsep}}% + {\ifhasshort{##1}{}{\ifhasshort{##2}{}{ }}}% + }% + \renewcommand*{\glscombinedsepfirst}[2]{% + \glshasattribute{##1}{combinedsepfirst}% + {\glsgetattribute{##1}{combinedsepfirst}}% + {\ifhasshort{##1}{}{ }}% + }% + \renewcommand*{\glscombinedfirstsep}[2]{% + \glshasattribute{##1}{combinedfirstsep}% + {\glsgetattribute{##1}{combinedfirstsep}}% + {\ifhasshort{##2}{}{ }}% + }% + \renewcommand*{\glscombinedfirstsepfirst}[2]{% + \glshasattribute{##1}{combinedfirstsepfirst}% + {\glsgetattribute{##1}{combinedfirstsepfirst}}% + { }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glssetcombinedsepnarrow} +%\changes{1.48}{2021-11-22}{new} +%Measures both. +% \begin{macrocode} +\newcommand*{\glssetcombinedsepnarrow}[2]{% + \renewcommand*{\glscombinedsep}[2]{% + \glshasattribute{##1}{combinedsep}% + {\glsgetattribute{##1}{combinedsep}}% + {% + \ifhasshort{##1}% + {\settowidth{\dimen@}{\glsentryshort{##1}}}% + {\settowidth{\dimen@}{\glsentrytext{##1}}}% + \ifdim\dimen@<#1\relax + #2% + \else + \ifhasshort{##2}% + {\settowidth{\dimen@}{\glsentryshort{##2}}}% + {\settowidth{\dimen@}{\glsentrytext{##2}}}% + \ifdim\dimen@<#1\relax + #2% + \else + \space + \fi + \fi + }% + }% + \renewcommand*{\glscombinedsepfirst}[2]{% + \glshasattribute{##1}{combinedsepfirst}% + {\glsgetattribute{##1}{combinedsepfirst}}% + {% + \ifhasshort{##1}% + {\settowidth{\dimen@}{\glsentryshort{##1}}}% + {\settowidth{\dimen@}{\glsentrytext{##1}}}% + \ifdim\dimen@<#1\relax + #2% + \else + \ifhaslong{##2}% + {\settowidth{\dimen@}{\glsentrylong{##2}}}% + {\settowidth{\dimen@}{\glsentryfirst{##2}}}% + \ifdim\dimen@<#1\relax + #2% + \else + \space + \fi + \fi + }% + }% + \renewcommand*{\glscombinedfirstsep}[2]{% + \glshasattribute{##1}{combinedfirstsep}% + {\glsgetattribute{##1}{combinedfirstsep}}% + {% + \ifhaslong{##1}% + {\settowidth{\dimen@}{\glsentrylong{##1}}}% + {\settowidth{\dimen@}{\glsentryfirst{##1}}}% + \ifdim\dimen@<#1\relax + #2% + \else + \ifhasshort{##2}% + {\settowidth{\dimen@}{\glsentryshort{##2}}}% + {\settowidth{\dimen@}{\glsentrytext{##2}}}% + \ifdim\dimen@<#1\relax + #2% + \else + \space + \fi + \fi + }% + }% + \renewcommand*{\glscombinedfirstsepfirst}[2]{% + \glshasattribute{##1}{combinedfirstsepfirst}% + {\glsgetattribute{##1}{combinedfirstsepfirst}}% + {% + \ifhaslong{##1}% + {\settowidth{\dimen@}{\glsentrylong{##1}}}% + {\settowidth{\dimen@}{\glsentryfirst{##1}}}% + \ifdim\dimen@<#1\relax + #2% + \else + \ifhaslong{##2}% + {\settowidth{\dimen@}{\glsentrylong{##2}}}% + {\settowidth{\dimen@}{\glsentryfirst{##2}}}% + \ifdim\dimen@<#1\relax + #2% + \else + \space + \fi + \fi + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@glsxtr@mglswrite} +%\changes{1.48}{2021-11-22}{new} +%Write information to the aux file for \app{bib2gls} to pick up, but +%only need to do it once per label since it only indicates which multi-entry +%has been referenced without any additional information. +% \begin{macrocode} +\newcommand{\glsxtrmglswrite}[1]{% + \ifx\@glsxtr@record@setting\@glsxtr@record@setting@off + \else + \protected@edef\@glsxtr@mglslabel{#1}% + \ifdef\@glsxtr@mglsreflist + {% + \expandafter\DTLifinlist\expandafter{\@glsxtr@mglslabel}% + {\@glsxtr@mglsreflist}{}% + {% + \xappto\@glsxtr@mglsreflist{,\expandonce\@glsxtr@mglslabel}% + \if@mgls@writeseparaterefs + \protected@write\@auxout{}{\string\@glsxtr@mglsrefs{#1}}% + \fi + }% + }% + {% + \global\let\@glsxtr@mglsreflist\@glsxtr@mglslabel + \if@mgls@writeseparaterefs + \protected@write\@auxout{}{\string\@glsxtr@mglsrefs{#1}}% + \else + \AtEndDocument{\immediate\protected@write\@auxout{}% + {\string\@glsxtr@mglsrefs{\@glsxtr@mglsreflist}}}% + \fi + \@mgls@disable@writeseparateref@cond + }% + \fi +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@glsxtr@mglsrefs} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand{\@glsxtr@mglsrefs}[1]{} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\if@mgls@writeseparaterefs} +%\changes{1.48}{2021-11-22}{new} +%If this conditional is changed, it must be done before the first +%instance of any \cs{mgls}-like command. +% \begin{macrocode} +\newif\if@mgls@writeseparaterefs \@mgls@writeseparaterefsfalse +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglsWriteSeparateRefsTrue} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand{\mglsWriteSeparateRefsTrue}{\global\@mgls@writeseparaterefstrue} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglsWriteSeparateRefsFalse} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand{\mglsWriteSeparateRefsFalse}{\global\@mgls@writeseparaterefsfalse} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@mgls@disable@writeseparateref@cond} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@mgls@disable@writeseparateref@cond}{% + \gdef\mglsWriteSeparateRefsTrue{\PackageError{glossaries-extra}% + {Too late to use \string\mglsWriteSeparateRefsTrue}% + {\string\mglsWriteSeparateRefsTrue\space can only be used before + the first instance of any \string\mgls-like command}}% + \gdef\mglsWriteSeparateRefsFalse{\PackageError{glossaries-extra}% + {Too late to use \string\mglsWriteSeparateRefsFalse}% + {\string\mglsWriteSeparateRefsFalse\space can only be used before + the first instance of any \string\mgls-like command}}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsxtr@newmgls} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand{\glsxtr@newmgls}[5]{% + \edef\@glsxr@newmgls@do{% + \noexpand\newrobustcmd*{\expandonce{\csname #1\endcsname}}% + {\noexpand\@gls@hyp@opt\expandonce{\csname ns@glsxtr@#1\endcsname}}% + \noexpand\newcommand*{\expandonce{\csname ns@glsxtr@#1\endcsname}}[2][]{% + \noexpand\new@ifnextchar[% + {\expandonce{\csname glsxtr@#1\endcsname}{####1}{####2}}% + {\expandonce{\csname glsxtr@#1\endcsname}{####1}{####2}[]}% + }% + \noexpand\def\expandonce{\csname glsxtr@#1\endcsname}####1####2[####3]{% + \noexpand\def\noexpand\glsxtrcurrentmglscsname{#1}% + \noexpand\glsxtr@mgls@inner{####1}{####2}{####3}% + {\noexpand#2}{\noexpand#3}{\noexpand#4}{\noexpand#5}% + }% + }% + \@glsxr@newmgls@do + \ifx\@glsxtr@record@setting\@glsxtr@record@setting@off + \else +% \end{macrocode} +% Provide a way for \app{bib2gls} to recognise the command (this will +% make it easier to add extra commands without having to modify +% \app{bib2gls}). +% \begin{macrocode} + \ifdef\@glsxtr@mglslikelist + {\xappto\@glsxtr@mglslikelist{,#1}}% + {% + \gdef\@glsxtr@mglslikelist{#1}% + \AtEndDocument{\immediate\protected@write\@auxout{}% + {\string\@glsxtr@mglslike{\@glsxtr@mglslikelist}}}% + }% + \fi +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@glsxtr@mglslike} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@glsxtr@mglslike}[1]{} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\GlsXtrMglsOrGls} +%\begin{definition} +%\cs{GlsXtrMglsOrGls}\marg{mgls cs}\marg{gls cs}\meta{modifier}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\GlsXtrMglsOrGls}[2]{% + \def\@glsxtr@mgls@or@gls@mcs{#1}% + \def\@glsxtr@mgls@or@gls@gcs{#2}% + \@ifstar{\s@GlsXtrMglsOrGls}% + {% + \@ifnextchar+{\PLUS\@firstoftwo{\p@GlsXtrMglsOrGls}}% + {% + \ifdefempty\@gls@alt@hyp@opt@char\@GlsXtrMglsOrGls\alt@GlsXtrMglsOrGls + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\alt@GlsXtrMglsOrGls} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\alt@GlsXtrMglsOrGls}{ + \expandafter\@ifnextchar\@gls@alt@hyp@opt@char + {\@firstoftwo{\@alt@GlsXtrMglsOrGls}}{\@GlsXtrMglsOrGls}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@GlsXtrMglsOrGls} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@GlsXtrMglsOrGls}[2][]{% + \glsxtrifmulti{#2}% + {\@glsxtr@mgls@or@gls@mcs[#1]{#2}}% + {\@glsxtr@mgls@or@gls@gcs[#1]{#2}}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\s@GlsXtrMglsOrGls} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\s@GlsXtrMglsOrGls}[2][]{% + \glsxtrifmulti{#2}% + {\@glsxtr@mgls@or@gls@mcs*[#1]{#2}}% + {\@glsxtr@mgls@or@gls@gcs*[#1]{#2}}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\p@GlsXtrMglsOrGls} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\p@GlsXtrMglsOrGls}[2][]{% + \glsxtrifmulti{#2}% + {\@glsxtr@mgls@or@gls@mcs+[#1]{#2}}% + {\@glsxtr@mgls@or@gls@gcs+[#1]{#2}}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@alt@GlsXtrMglsOrGls} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@alt@GlsXtrMglsOrGls}[2][]{% + \glsxtrifmulti{#2}% + {\expandafter\@glsxtr@mgls@or@gls@mcs\@gls@alt@hyp@opt@char[#1]{#2}}% + {\expandafter\@glsxtr@mgls@or@gls@gcs\@gls@alt@hyp@opt@char[#1]{#2}}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mgls} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{mgls}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +% Use \cs{gls} for all elements. +% \begin{macrocode} +\glsxtr@newmgls{mgls}{\@gls@}{\@gls@}{\@gls@}{\@gls@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglspl} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{mglspl}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +% Use \cs{glspl} for all elements. +% \begin{macrocode} +\glsxtr@newmgls{mglspl}{\@glspl@}{\@glspl@}{\@glspl@}{\@glspl@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglsmainpl} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{mglsmainpl}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +% Only use \cs{glspl} for the main element, otherwise use \cs{gls}. +% \begin{macrocode} +\glsxtr@newmgls{mglsmainpl}{\@gls@}{\@gls@}{\@glspl@}{\@glspl@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\Mgls} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{Mgls}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +%Use \cs{Gls} for first element and \cs{gls} for others. +% \begin{macrocode} +\glsxtr@newmgls{Mgls}{\@Gls@}{\@gls@}{\@Gls@}{\@gls@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\Mglspl} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{Mglspl}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +%Use \cs{Glspl} for first element and \cs{glspl} for others. +% \begin{macrocode} +\glsxtr@newmgls{Mglspl}{\@Glspl@}{\@glspl@}{\@Glspl@}{\@glspl@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\Mglsmainpl} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{Mglsmainpl}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +%Upper case the first element, no case change for others. +%Use plural for the main element only. +% \begin{macrocode} +\glsxtr@newmgls{Mglsmainpl}{\@Gls@}{\@gls@}{\@Glspl@}{\@glspl@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\MGls} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{MGls}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +%Use \cs{Gls} for all elements. +% \begin{macrocode} +\glsxtr@newmgls{MGls}{\@Gls@}{\@Gls@}{\@Gls@}{\@Gls@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\MGlspl} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{MGlspl}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +%Use \cs{Glspl} for all elements. +% \begin{macrocode} +\glsxtr@newmgls{MGlspl}{\@Glspl@}{\@Glspl@}{\@Glspl@}{\@Glspl@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\MGlsmainpl} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{MGlsmainpl}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +%Start all elements with upper case. Only use plural for main +%element. +% \begin{macrocode} +\glsxtr@newmgls{MGlsmainpl}{\@Gls@}{\@Gls@}{\@Glspl@}{\@Glspl@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\MGLS} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{MGLS}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +%Use \cs{GLS} for all elements. +% \begin{macrocode} +\glsxtr@newmgls{MGLS}{\@GLS@}{\@GLS@}{\@GLS@}{\@GLS@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\MGLSpl} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{MGLSpl}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +%Use \cs{GLSpl} for all elements. +% \begin{macrocode} +\glsxtr@newmgls{MGLSpl}{\@GLSpl@}{\@GLSpl@}{\@GLSpl@}{\@GLSpl@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\MGLSmainpl} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{MGLSmainpl}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +%Upper case all elements. Only use plural for main element. +% \begin{macrocode} +\glsxtr@newmgls{MGLSmainpl}{\@GLS@}{\@GLS@}{\@GLSpl@}{\@GLSpl@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@glslongortext@} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\def\@glslongortext#1#2[#3]{% + \ifglshaslong{#2}{\@glsxtrlong{#1}{#2}[#3]}{\@glstext@{#1}{#2}[#3]}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@glsshortortext@} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\def\@glsshortortext#1#2[#3]{% + \ifglshasshort{#2}{\@glsxtrshort{#1}{#2}[#3]}{\@glstext@{#1}{#2}[#3]}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@glsfullorfirst@} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\def\@glsfullorfirst#1#2[#3]{% + \ifglshasshort{#2}{\@glsxtr@full{#1}{#2}[#3]}{\@glsfirst@{#1}{#2}[#3]}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@Glslongortext@} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\def\@Glslongortext#1#2[#3]{% + \ifglshaslong{#2}{\@Glsxtrlong{#1}{#2}[#3]}{\@Glstext@{#1}{#2}[#3]}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@Glsshortortext@} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\def\@Glsshortortext#1#2[#3]{% + \ifglshasshort{#2}{\@Glsxtrshort{#1}{#2}[#3]}{\@Glstext@{#1}{#2}[#3]}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@Glsfullorfirst@} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\def\@Glsfullorfirst#1#2[#3]{% + \ifglshasshort{#2}{\@Glsxtr@full{#1}{#2}[#3]}{\@Glsfirst@{#1}{#2}[#3]}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglsshort} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{mglsshort}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +% Use short or text for all elements. +% \begin{macrocode} +\glsxtr@newmgls{mglsshort}% +{\@glsshortortext}{\@glsshortortext}{\@glsshortortext}{\@glsshortortext}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglslong} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{mglslong}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +% Use long or text for all elements. +% \begin{macrocode} +\glsxtr@newmgls{mglslong}% +{\@glslongortext}{\@glslongortext}{\@glslongortext}{\@glslongortext}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglsfull} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{mglsfull}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +% Use full or first for all elements. +% \begin{macrocode} +\glsxtr@newmgls{mglsfull}% +{\@glsfullorfirst}{\@glsfullorfirst}{\@glsfullorfirst}{\@glsfullorfirst}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\Mglsshort} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{Mglsshort}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +% Use short or text for all elements with initial cap on first element. +% \begin{macrocode} +\glsxtr@newmgls{Mglsshort}% +{\@Glsshortortext}{\@glsshortortext}{\@Glsshortortext}{\@glsshortortext}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\Mglslong} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{Mglslong}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +% Use long or text for all elements with initial cap on first +% element. +% \begin{macrocode} +\glsxtr@newmgls{Mglslong}% +{\@Glslongortext}{\@glslongortext}{\@Glslongortext}{\@glslongortext}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\Mglsfull} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{Mglsfull}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +% Use full or first for all elements with initial cap on first +% element. +% \begin{macrocode} +\glsxtr@newmgls{Mglsfull}% +{\@Glsfullorfirst}{\@glsfullorfirst}{\@Glsfullorfirst}{\@glsfullorfirst}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglsname} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{mglsname}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +% Use name for all elements. +% \begin{macrocode} +\glsxtr@newmgls{mglsname}% + {\@glsname@}{\@glsname@}{\@glsname@}{\@glsname@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\Mglsname} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{Mglsname}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +% Use name for all elements with initial cap on first +% element. +% \begin{macrocode} +\glsxtr@newmgls{Mglsname}% + {\@Glsname@}{\@glsname@}{\@Glsname@}{\@glsname@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\MGlsname} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{MGlsname}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +% Use name for all elements with initial cap on all +% elements. +% \begin{macrocode} +\glsxtr@newmgls{MGlsname}% + {\@Glsname@}{\@Glsname@}{\@Glsname@}{\@Glsname@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@glssymbolorgls} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\def\@glssymbolorgls#1#2[#3]{% + \ifglshassymbol{#2}{\@glssymbol@{#1}{#2}[#3]}{\@gls@{#1}{#2}[#3]}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@glssymbolorGls} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\def\@glssymbolorGls#1#2[#3]{% + \ifglshassymbol{#2}{\@glssymbol@{#1}{#2}[#3]}{\@Gls@{#1}{#2}[#3]}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglssymbol} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{mglssymbol}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +% Use \cs{glssymbol} if the \gloskey{symbol} key is set otherwise +% use \cs{gls}. +% \begin{macrocode} +\glsxtr@newmgls{mglssymbol}% + {\@glssymbolorgls}{\@glssymbolorgls}{\@glssymbolorgls}{\@glssymbolorgls}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\Mglssymbol} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{Mglssymbol}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +% As above but initial the first element if it's not a symbol. +% \begin{macrocode} +\glsxtr@newmgls{Mglssymbol}% + {\@glssymbolorGls}{\@glssymbolorgls}{\@glssymbolorGls}{\@glssymbolorgls}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\MGlssymbol} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{MGlssymbol}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +% As above but initial each element if it's not a symbol. +% \begin{macrocode} +\glsxtr@newmgls{MGlssymbol}% + {\@glssymbolorGls}{\@glssymbolorGls}{\@glssymbolorGls}{\@glssymbolorGls}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglsfield} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand{\mglsfield}{useri} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\@glsfieldorgls} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\def\@glsfieldorgls#1#2[#3]{% + \glsxtrifhasfield{\mglsfield}{#2}% + {\@glsdisp[#1]{#2}{\glscurrentfieldvalue#3}}% + {\@gls@{#1}{#2}[#3]}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@Glsfieldorgls} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\def\@Glsfieldorgls#1#2[#3]{% + \glsxtrifhasfield{\mglsfield}{#2}% + {\@glsdisp[#1]{#2}{\xmakefirstuc\glscurrentfieldvalue#3}}% + {\@Gls@{#1}{#2}[#3]}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mglsusefield} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{mglsusefield}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +% Use the field given by \cs{\mglsfield}. +% \begin{macrocode} +\glsxtr@newmgls{mglsusefield}% + {\@glsfieldorgls}{\@glsfieldorgls}{\@glsfieldorgls}{\@glsfieldorgls}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\Mglsusefield} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{Mglsusefield}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +% As above but use initial cap for first element only. +% \begin{macrocode} +\glsxtr@newmgls{Mglsusefield}% + {\@Glsfieldorgls}{\@glsfieldorgls}{\@Glsfieldorgls}{\@glsfieldorgls}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\MGlsusefield} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{MGlsusefield}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +% As above but use initial cap for all elements. +% \begin{macrocode} +\glsxtr@newmgls{MGlsusefield}% + {\@Glsfieldorgls}{\@Glsfieldorgls}{\@Glsfieldorgls}{\@Glsfieldorgls}% +% \end{macrocode} +%\end{macro} +% +% Use commands provided by \sty{glossaries-prefix} if it has been +% loaded. +%\begin{macro}{\mpglsWarning} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\mpglsWarning}{% + \GlossariesExtraWarning{glossaries-prefix.sty is required for + \string\mpgls\space family of commands (either load after + glossaries-extra.sty or use the `prefix' package option)}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@pglsorgls} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\def\@pglsorgls#1#2[#3]{% + \ifdef\@pgls@{\@pgls@{#1}{#2}[#3]}{\mpglsWarning\@gls@{#1}{#2}[#3]}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@pglsorglspl} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\def\@pglsorglspl#1#2[#3]{% + \ifdef\@pglspl@{\@pglspl@{#1}{#2}[#3]}{\mpglsWarning\@glspl@{#1}{#2}[#3]}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@Pglsorgls} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\def\@Pglsorgls#1#2[#3]{% + \ifdef\@Pgls@{\@Pgls@{#1}{#2}[#3]}{\mpglsWarning\@Gls@{#1}{#2}[#3]}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@pglsorglspl} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\def\@pglsorglspl#1#2[#3]{% + \ifdef\@pglspl@{\@pglspl@{#1}{#2}[#3]}{\mpglsWarning\@glspl@{#1}{#2}[#3]}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@Pglsorglspl} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\def\@Pglsorglspl#1#2[#3]{% + \ifdef\@Pglspl@{\@Pglspl@{#1}{#2}[#3]}{\mpglsWarning\@Glspl@{#1}{#2}[#3]}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@PGLSorgls} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\def\@PGLSorgls#1#2[#3]{% + \ifdef\@PGLS@{\@PGLS@{#1}{#2}[#3]}{\mpglsWarning\@GLS@{#1}{#2}[#3]}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@PGLSorglspl} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\def\@PGLSorglspl#1#2[#3]{% + \ifdef\@PGLSpl@{\@PGLSpl@{#1}{#2}[#3]}{\mpglsWarning\@GLSpl@{#1}{#2}[#3]}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mpgls} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{mpgls}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +% Use \cs{pgls} for the first element and \cs{gls} for the remainder. +% \begin{macrocode} +\glsxtr@newmgls{mpgls}{\@pglsorgls@}{\@gls@}{\@pglsorgls@}{\@gls@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mpglspl} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{mpglspl}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +% Use \cs{pglspl} for the first element and \cs{glspl} for the remainder. +% \begin{macrocode} +\glsxtr@newmgls{mpglspl}{\@pglsorglspl@}{\@glspl@}{\@pglsorglspl@}{\@glspl@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\mpglsmainpl} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{mpglsmainpl}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +%Only use plural for main element and only use prefixing command for +%first element. +% \begin{macrocode} +\glsxtr@newmgls{mpglsmainpl}{\@pglsorgls@}{\@gls@}{\@pglsorglspl@}{\@glspl@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\Mpgls} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{Mpgls}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +% Use \cs{Pgls} for the first element and \cs{gls} for the remainder. +% \begin{macrocode} +\glsxtr@newmgls{Mpgls}{\@Pglsorgls@}{\@gls@}{\@Pglsorgls@}{\@gls@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\Mpglspl} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{Mpglspl}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +% Use \cs{Pglspl} for the first element and \cs{glspl} for the remainder. +% \begin{macrocode} +\glsxtr@newmgls{Mpglspl}{\@Pglsorglspl@}{\@glspl@}{\@Pglsorglspl@}{\@glspl@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\Mpglsmainpl} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{Mpglsmainpl}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +%Only use plural for main element and only use first letter +%uppercase prefixing command for first element. +% \begin{macrocode} +\glsxtr@newmgls{Mpglsmainpl}{\@Pglsorgls@}{\@gls@}{\@Pglsorglspl@}{\@glspl@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\MPGls} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{MPGls}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +%Use \cs{Pgls} for the first element and \cs{Gls} for the remainder. +% \begin{macrocode} +\glsxtr@newmgls{MPGls}{\@Pglsorgls@}{\@Gls@}{\@Pglsorgls@}{\@Gls@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\MPGlspl} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{MPGlspl}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +% Use \cs{Pglspl} for the first element and \cs{Glspl} for the remainder. +% \begin{macrocode} +\glsxtr@newmgls{MPGlspl}{\@Pglsorglspl@}{\@Glspl@}{\@Pglsorglspl@}{\@Glspl@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\MPGlsmainpl} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{MPGlsmainpl}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +%Only use plural for main element and first letter uppercase all +%elements. +% \begin{macrocode} +\glsxtr@newmgls{MPGlsmainpl}{\@Pglsorgls@}{\@Gls@}{\@Pglsorglspl@}{\@Glspl@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\MPGLS} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{MPGLS}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +% Use \cs{PGLS} for the first element and \cs{GLS} for the remainder. +% \begin{macrocode} +\glsxtr@newmgls{MPGLS}{\@PGLSorgls@}{\@GLS@}{\@PGLSorgls@}{\@GLS@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\MPGLSpl} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{MPGLSpl}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +% Use \cs{PGLSpl} for the first element and \cs{GLSpl} for the remainder. +% \begin{macrocode} +\glsxtr@newmgls{MPGLSpl}{\@PGLSorglspl@}{\@GLSpl@}{\@PGLSorglspl@}{\@GLSpl@}% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\MPGLSmainpl} +%\changes{1.48}{2021-11-22}{new} +%\begin{definition} +%\cs{MPGLSmainpl}\oarg{options}\marg{label}\oarg{insert} +%\end{definition} +%Only use plural for main element and uppercase all elements. +% \begin{macrocode} +\glsxtr@newmgls{MPGLSmainpl}{\@PGLSorgls@}{\@GLS@}{\@PGLSorglspl@}{\@GLSpl@}% +% \end{macrocode} +%\end{macro} +% +%Not currently implementing any other variations. +% %\section{Multi-Lingual Support} % Add the facility to load language modules, if they are installed, % but none are provided with this package. @@ -26028,15 +30039,13 @@ defined}{}% % \end{macrocode} %\end{macro} % \begin{macrocode} -\@ifpackageloaded{tracklang} -{% +\@ifpackageloaded{tracklang} {% \AnyTrackedLanguages {% \ForEachTrackedDialect{\this@dialect}{\glsxtr@loaddialect}% }% {}% -} -{} +} {} % \end{macrocode} % Load \sty{glossaries-extra-stylemods} if required. % \begin{macrocode} @@ -26062,7 +30071,7 @@ defined}{}% %automatically loaded by the record option. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{glossaries-extra-bib2gls}[2021/11/04 v1.47 (NLCT)] +\ProvidesPackage{glossaries-extra-bib2gls}[2021/11/22 v1.48 (NLCT)] % \end{macrocode} %Provide convenient shortcut commands for predefined glossary types. %\begin{macro}{\printunsrtacronyms} @@ -26943,6 +30952,223 @@ defined}{}% % \end{macrocode} %\end{macro} % +%Multi (compound/combined) entry commands used by \app{bib2gls}. +%\begin{macro}{\glsxtrmultientryadjustedname} +%\begin{definition} +%\cs{glsxtrmultientryadjustedname}\marg{list1}\marg{name}\marg{list2}\marg{label} +%\end{definition} +%\changes{1.48}{2021-11-22}{new} +%This command is used by \app{bib2gls} when it adjusts the name +%field of an entry that's been identified as a main entry in the +%multi-entry set \meta{label}. +% +%The final argument \meta{label} is the multi-entry label from which +%the set was obtained. The first +%argument \meta{list1} is the list of other labels that come before +%the main label. The third argument \meta{list2} is the remaining +%list of other labels. The \meta{name} argument is the previous name before +%adjustment. +% \begin{macrocode} +\newrobustcmd*{\glsxtrmultientryadjustedname}[4]{% + \bgroup + \let\@glsxtrmultientryadjustednamesep\glsxtrmultientryadjustednamesep + \let\@glsxtrmultientryadjustednamepresep\glsxtrmultientryadjustednamepresep + \let\@glsxtrmultientryadjustednamepostsep\glsxtrmultientryadjustednamepostsep + \let\@glsxtrmultientryadjustednameother\glsxtrmultientryadjustednameother + \let\@glsxtrmultientryadjustednamefmt\glsxtrmultientryadjustednamefmt + \let\@glsxtrmultientryadjustednamefirstother\glsxtrmultientryadjustednameother + \let\@glsxtrmultientryadjustednamefirstfmt\glsxtrmultientryadjustednamefmt + \@glsxtrmultientryadjustedname{#1}{#2}{#3}{#4}% + \egroup +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\Glsxtrmultientryadjustedname} +%\changes{1.48}{2021-11-22}{new} +%First letter upper case +% \begin{macrocode} +\newrobustcmd*{\Glsxtrmultientryadjustedname}[4]{% + \bgroup + \let\@glsxtrmultientryadjustednamesep\glsxtrmultientryadjustednamesep + \let\@glsxtrmultientryadjustednamepresep\glsxtrmultientryadjustednamepresep + \let\@glsxtrmultientryadjustednamepostsep\glsxtrmultientryadjustednamepostsep + \let\@glsxtrmultientryadjustednameother\glsxtrmultientryadjustednameother + \let\@glsxtrmultientryadjustednamefmt\glsxtrmultientryadjustednamefmt + \let\@glsxtrmultientryadjustednamefirstother\Glsxtrmultientryadjustednameother + \let\@glsxtrmultientryadjustednamefirstfmt\Glsxtrmultientryadjustednamefmt + \@glsxtrmultientryadjustedname{#1}{#2}{#3}{#4}% + \egroup +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\GlsXtrmultientryadjustedname} +%\changes{1.48}{2021-11-22}{new} +%Title case +% \begin{macrocode} +\newrobustcmd*{\GlsXtrmultientryadjustedname}[4]{% + \bgroup + \let\@glsxtrmultientryadjustednamesep\glsxtrmultientryadjustednamesep + \let\@glsxtrmultientryadjustednamepresep\glsxtrmultientryadjustednamepresep + \let\@glsxtrmultientryadjustednamepostsep\glsxtrmultientryadjustednamepostsep + \let\@glsxtrmultientryadjustednameother\GlsXtrmultientryadjustednameother + \let\@glsxtrmultientryadjustednamefmt\GlsXtrmultientryadjustednamefmt + \let\@glsxtrmultientryadjustednamefirstother\GlsXtrmultientryadjustednameother + \let\@glsxtrmultientryadjustednamefirstfmt\GlsXtrmultientryadjustednamefmt + \@glsxtrmultientryadjustedname{#1}{#2}{#3}{#4}% + \egroup +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\GLSxtrmultientryadjustedname} +%\changes{1.48}{2021-11-22}{new} +%All caps. +% \begin{macrocode} +\newrobustcmd*{\GLSxtrmultientryadjustedname}[4]{% + \bgroup + \let\@glsxtrmultientryadjustednamesep\glsxtrmultientryadjustednamesep + \let\@glsxtrmultientryadjustednamepresep\glsxtrmultientryadjustednamepresep + \let\@glsxtrmultientryadjustednamepostsep\glsxtrmultientryadjustednamepostsep + \let\@glsxtrmultientryadjustednameother\GLSxtrmultientryadjustednameother + \let\@glsxtrmultientryadjustednamefmt\GLSxtrmultientryadjustednamefmt + \let\@glsxtrmultientryadjustednamefirstother\GLSxtrmultientryadjustednameother + \let\@glsxtrmultientryadjustednamefirstfmt\GLSxtrmultientryadjustednamefmt + \@glsxtrmultientryadjustedname{#1}{#2}{#3}{#4}% + \egroup +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@glsxtrmultientryadjustedname} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\@glsxtrmultientryadjustedname}[4]{% + \letcs\mglscurrentmainlabel{@gls@combined@#4@main}% + \letcs\mglscurrentmainlist{@gls@combined@#4@list}% + \letcs\mglscurrentmainoptions{@gls@combined@#4@options}% + \ifblank{#1}% + {% + \@glsxtrmultientryadjustednamefirstfmt{#2}% + }% + {% + \def\@mgls@previouslabel{}% + \let\@gls@xtradjustedother\@glsxtrmultientryadjustednamefirstother + \@for\mglscurrentlabel:=#1\do{% + \ifx\@mgls@previouslabel\empty + \else + \@glsxtrmultientryadjustednamesep{\@mgls@previouslabel}{\mglscurrentlabel}% + \fi + \@gls@xtradjustedother{\mglscurrentlabel}% + \let\@mgls@previouslabel\mglscurrentlabel + \let\@gls@xtradjustedother\@glsxtrmultientryadjustednameother + }% + \@glsxtrmultientryadjustednamepresep{\@mgls@previouslabel}{\mglscurrentmainlabel}% + \@glsxtrmultientryadjustednamefmt{#2}% + }% + \ifblank{#3}% + {}% + {% + \let\@mgls@previouslabel\mglscurrentmainlabel + \let\@gls@xtrmultientryadjustednamesep\@glsxtrmultientryadjustednamepostsep + \@for\mglscurrentlabel:=#3\do{% + \@gls@xtrmultientryadjustednamesep{\@mgls@previouslabel}{\mglscurrentlabel}% + \@glsxtrmultientryadjustednameother{\mglscurrentlabel}% + \let\@mgls@previouslabel\mglscurrentlabel + \let\@gls@xtrmultientryadjustednamesep\@glsxtrmultientryadjustednamesep + }% + }% +} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\glsxtrmultientryadjustednamesep} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\glsxtrmultientryadjustednamesep}{\glscombinedfirstsepfirst} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsxtrmultientryadjustednamepresep} +%\changes{1.48}{2021-11-22}{new} +% Separator before main name. +% \begin{macrocode} +\newcommand*{\glsxtrmultientryadjustednamepresep}{\glsxtrmultientryadjustednamesep} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsxtrmultientryadjustednamepostsep} +%\changes{1.48}{2021-11-22}{new} +% Separator after main name. +% \begin{macrocode} +\newcommand*{\glsxtrmultientryadjustednamepostsep}{\glsxtrmultientryadjustednamesep} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsxtrmultientryadjustednamefmt} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\glsxtrmultientryadjustednamefmt}[1]{#1} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glsxtrmultientryadjustednameother} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\glsxtrmultientryadjustednameother}[1]{\glsentryname{#1}} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\Glsxtrmultientryadjustednamefmt} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\Glsxtrmultientryadjustednamefmt}[1]{\makefirstuc{#1}} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\Glsxtrmultientryadjustednameother} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\Glsxtrmultientryadjustednameother}[1]{\Glsentryname{#1}} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\GlsXtrmultientryadjustednameother} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\GlsXtrmultientryadjustednameother}[1]{% + \glsentrytitlecase{#1}{name}} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\GlsXtrmultientryadjustednamefmt} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\ifdef\glscapitalisewords +{% + \newcommand*{\GlsXtrmultientryadjustednamefmt}[1]{\glscapitalisewords{#1}} +} +{ + \newcommand*{\GlsXtrmultientryadjustednamefmt}[1]{\capitalisewords{#1}} +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\GLSxtrmultientryadjustednameother} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\GLSxtrmultientryadjustednameother}[1]{% + \mfirstucMakeUppercase{\glsentryname{#1}}} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\GLSxtrmultientryadjustednamefmt} +%\changes{1.48}{2021-11-22}{new} +% \begin{macrocode} +\newcommand*{\GLSxtrmultientryadjustednamefmt}[1]{\mfirstucMakeUppercase{#1}} +% \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 @@ -29173,7 +33399,7 @@ defined}{}% % First identify package: % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{glossaries-extra-stylemods}[2021/11/04 v1.47 (NLCT)] +\ProvidesPackage{glossaries-extra-stylemods}[2021/11/22 v1.48 (NLCT)] % \end{macrocode} % Provide package options to automatically load required predefined % styles. The simplest method is to just test for the existence of @@ -29355,6 +33581,10 @@ defined}{}% \let\glossentryname\glslistexpandedname \let\glslistgroupheaderfmt\@firstofone \let\glsgetgrouptitle\@firstofone +% \end{macrocode} +%Technically this has an optional argument but it's not used in the +%list styles. +% \begin{macrocode} \let\glsnavhypertarget\@secondoftwo \let\glsnavigation\relax }% @@ -31602,7 +35832,7 @@ defined}{}% %\section{Package Initialisation and Options} % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{glossary-bookindex}[2021/11/04 v1.47 (NLCT)] +\ProvidesPackage{glossary-bookindex}[2021/11/22 v1.48 (NLCT)] % \end{macrocode} %Load required packages. % \begin{macrocode} @@ -32098,7 +36328,7 @@ defined}{}% %Provides additional long styles. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{glossary-longextra}[2021/11/04 v1.47 (NLCT)] +\ProvidesPackage{glossary-longextra}[2021/11/22 v1.48 (NLCT)] % \end{macrocode} %Load required packages. % \begin{macrocode} @@ -33527,7 +37757,7 @@ defined}{}% %topic. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{glossary-topic}[2021/11/04 v1.47 (NLCT)] +\ProvidesPackage{glossary-topic}[2021/11/22 v1.48 (NLCT)] % \end{macrocode} %Load required package. % \begin{macrocode} |