summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/glossaries-extra/glossaries-extra.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/glossaries-extra/glossaries-extra.dtx')
-rw-r--r--macros/latex/contrib/glossaries-extra/glossaries-extra.dtx4446
1 files changed, 4338 insertions, 108 deletions
diff --git a/macros/latex/contrib/glossaries-extra/glossaries-extra.dtx b/macros/latex/contrib/glossaries-extra/glossaries-extra.dtx
index ab396b83e7..530455599f 100644
--- a/macros/latex/contrib/glossaries-extra/glossaries-extra.dtx
+++ b/macros/latex/contrib/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}