summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/glossaries-extra/glossaries-extra.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2017-02-05 23:22:17 +0000
committerKarl Berry <karl@freefriends.org>2017-02-05 23:22:17 +0000
commit17efbb93c3c280ebec43438b10c53601758ef11e (patch)
treea113323608fcf1d4538b75835d3d28b8b6bae6be /Master/texmf-dist/tex/latex/glossaries-extra/glossaries-extra.sty
parent9cb0c9d7ad125c5b287bfc285ebf1bf94749494a (diff)
glossaries-extra (4feb17)
git-svn-id: svn://tug.org/texlive/trunk@43152 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/glossaries-extra/glossaries-extra.sty')
-rw-r--r--Master/texmf-dist/tex/latex/glossaries-extra/glossaries-extra.sty856
1 files changed, 809 insertions, 47 deletions
diff --git a/Master/texmf-dist/tex/latex/glossaries-extra/glossaries-extra.sty b/Master/texmf-dist/tex/latex/glossaries-extra/glossaries-extra.sty
index 159b4e1d552..ee66803885f 100644
--- a/Master/texmf-dist/tex/latex/glossaries-extra/glossaries-extra.sty
+++ b/Master/texmf-dist/tex/latex/glossaries-extra/glossaries-extra.sty
@@ -39,7 +39,7 @@
%% Grave accent \` Left brace \{ Vertical bar \|
%% Right brace \} Tilde \~}
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{glossaries-extra}[2017/01/19 v1.11 (NLCT)]
+\ProvidesPackage{glossaries-extra}[2017/02/03 v1.12 (NLCT)]
\RequirePackage{xkeyval}
\RequirePackage{etoolbox}
\@ifpackageloaded{glossaries}
@@ -141,8 +141,21 @@
\protected@write\@auxout{}{\string\glsxtr@record
{\@gls@label}{\@glo@counterprefix}{\@gls@counter}{\@glsnumberformat}%
{\@glslocref}}%
+ \@glsxtr@counterrecordhook
+}
+\newcommand*{\@@glsxtr@recordcounter}{%
+ \@glsxtr@noop@recordcounter
+}
+\newcommand*{\@glsxtr@noop@recordcounter}[1]{%
+ \PackageError{glossaries-extra}{\string\GlsXtrRecordCounter\space
+ requires record=only or record=alsoindex package option}{}%
+}
+\newcommand*{\@glsxtr@op@recordcounter}[1]{%
+ \eappto\@glsxtr@counterrecordhook{\noexpand\@glsxtr@docounterrecord{#1}}%
+}
+\newcommand{\printunsrtglossaryunit}{%
+ \print@noop@unsrtglossaryunit
}
-\newcommand*{\glsxtr@record}[5]{}
\newcommand*{\glsxtr@setup@record}{}
\newcommand*{\glsxtr@indexonly@saveentrycounter}{%
\ifKV@glslink@noindex
@@ -196,6 +209,8 @@
\let\@gls@saveentrycounter\glsxtr@indexonly@saveentrycounter
\let\glsxtrundefaction\@glsxtr@err@undefaction
\let\glsxtr@warnonexistsordo\@gobble
+ \let\@@glsxtr@recordcounter\@glsxtr@noop@recordcounter
+ \def\printunsrtglossaryunit{\print@noop@unsrtglossaryunit}%
}%
\or
\def\glsxtr@setup@record{%
@@ -205,6 +220,9 @@
\let\glsxtrundefaction\@glsxtr@warn@undefaction
\let\glsxtr@warnonexistsordo\@glsxtr@warn@onexistsordo
\glsxtr@addloclistfield
+ \renewcommand*{\@glsxtr@autoindexcrossrefs}{}%
+ \let\@@glsxtr@recordcounter\@glsxtr@op@recordcounter
+ \def\printunsrtglossaryunit{\print@op@unsrtglossaryunit}%
}%
\or
\def\glsxtr@setup@record{%
@@ -214,6 +232,8 @@
\let\glsxtrundefaction\@glsxtr@warn@undefaction
\let\glsxtr@warnonexistsordo\@glsxtr@warn@onexistsordo
\glsxtr@addloclistfield
+ \let\@@glsxtr@recordcounter\@glsxtr@op@recordcounter
+ \def\printunsrtglossaryunit{\print@op@unsrtglossaryunit}%
}%
\fi
}
@@ -247,6 +267,9 @@
\let\GlossariesExtraWarningNoLine\@gobble
\glsxtr@dooption{nowarn}%
}
+\@glsxtr@declareoption{postdot}{%
+ \glsxtr@dooption{nopostdot=false}%
+}
\newcommand*{\glsxtrabbrvtype}{\glsdefaulttype}
\newcommand*{\@glsxtr@abbreviationsdef}{}
@@ -435,7 +458,7 @@
\def\@glsxtrundeftag{\glsxtrundeftag}%
}
\newcommand{\glsxtrifemptyglossary}[3]{%
- \ifglossaryexists{#1}%
+ \ifcsdef{glolist@#1}%
{%
\ifcsstring{glolist@#1}{,}{#2}{#3}%
}%
@@ -444,6 +467,143 @@
#2%
}%
}
+\newcommand*{\glsxtrifkeydefined}[3]{%
+ \key@ifundefined{glossentry}{#1}{#3}{#2}%
+}
+\newcommand*{\glsxtrprovidestoragekey}{%
+ \@ifstar\@sglsxtr@provide@storagekey\@glsxtr@provide@storagekey
+}
+\newcommand*{\@glsxtr@provide@storagekey}[3]{%
+ \key@ifundefined{glossentry}{#1}%
+ {%
+ \define@key{glossentry}{#1}{\csdef{@glo@#1}{##1}}%
+ \appto\@gls@keymap{,{#1}{#1}}%
+ \appto\@newglossaryentryprehook{\csdef{@glo@#1}{#2}}%
+ \appto\@newglossaryentryposthook{%
+ \letcs{\@glo@tmp}{@glo@#1}%
+ \gls@assign@field{#2}{\@glo@label}{#1}{\@glo@tmp}%
+ }%
+ \ifblank{#3}
+ {}%
+ {%
+ \newcommand*{#3}[1]{\@gls@entry@field{##1}{#1}}%
+ }%
+ }%
+ {%
+ \ifblank{#3}
+ {}%
+ {%
+ \providecommand*{#3}[1]{\@gls@entry@field{##1}{#1}}%
+ }%
+ }%
+}
+\newcommand*{\s@glsxtr@provide@storagekey}[1]{%
+ \key@ifundefined{glossentry}{#1}%
+ {%
+ \expandafter\newcommand\expandafter*\expandafter
+ {\csname gls@assign@#1@field\endcsname}[2]{%
+ \@@gls@expand@field{##1}{#1}{##2}%
+ }%
+ }%
+ {}%
+ \@glsxtr@provide@addstoragekey{#1}%
+}
+\newcommand{\GlsXtrFmtField}{useri}
+\newcommand{\GlsXtrFmtDefaultOptions}{noindex}
+\newrobustcmd*{\glsxtrfmt}[3][]{%
+ \glsdoifexistsordo{#2}%
+ {%
+ \ifglshasfield{\GlsXtrFmtField}{#2}%
+ {%
+ \let\do@gls@link@checkfirsthyper\relax
+ \expandafter\@gls@link\expandafter[\GlsXtrFmtDefaultOptions,#1]{#2}%
+ {\csuse{\glscurrentfieldvalue}{#3}}%
+ }%
+ {#3}%
+ }%
+ {#3}%
+}
+\ifdef\texorpdfstring
+{
+ \newcommand*{\glsxtrentryfmt}[2]{%
+ \texorpdfstring{\@glsxtrentryfmt{#1}{#2}}{#2}%
+ }
+}
+{
+ \newcommand*{\glsxtrentryfmt}{\@glsxtrentryfmt}
+}
+\newrobustcmd*{\@glsxtrentryfmt}[2]{%
+ \glsdoifexistsordo
+ {%
+ \ifglshasfield{\GlsXtrFmtField}{#1}%
+ {%
+ \csuse{\glscurrentfieldvalue}{#2}%
+ }%
+ {#2}%
+ }%
+ {#2}%
+}
+\newcommand*{\glsxtrfieldlistadd}[3]{%
+ \listcsadd{glo@\glsdetoklabel{#1}@#2}{#3}%
+}
+\newcommand*{\glsxtrfieldlistgadd}[3]{%
+ \listcsgadd{glo@\glsdetoklabel{#1}@#2}{#3}%
+}
+\newcommand*{\glsxtrfieldlisteadd}[3]{%
+ \listcseadd{glo@\glsdetoklabel{#1}@#2}{#3}%
+}
+\newcommand*{\glsxtrfieldlistxadd}[3]{%
+ \listcsxadd{glo@\glsdetoklabel{#1}@#2}{#3}%
+}
+\newcommand*{\glsxtrfielddolistloop}[2]{%
+ \dolistcsloop{glo@\glsdetoklabel{#1}@#2}%
+}
+\newcommand*{\glsxtrfieldforlistloop}[3]{%
+ \forlistcsloop{glo@\glsdetoklabel{#1}@#2}{#3}%
+}
+\newcommand*{\glsxtrfieldifinlist}[5]{%
+ \ifinlistcs{#3}{glo@\glsdetoklabel{#1}@#2}{#4}{#5}%
+}
+\newcommand*{\glsxtrfieldxifinlist}[5]{%
+ \xifinlistcs{#3}{glo@\glsdetoklabel{#1}@#2}{#4}{#5}%
+}
+\newcommand*{\glsxtrusefield}[2]{%
+ \@gls@entry@field{#1}{#2}%
+}
+\newcommand*{\Glsxtrusefield}[2]{%
+ \@gls@entry@field{#1}{#2}%
+}
+\newcommand*{\glsxtrdeffield}[2]{\csdef{glo@\glsdetoklabel{#1}@#2}}
+\newcommand*{\glsxtredeffield}[2]{\csedef{glo@\glsdetoklabel{#1}@#2}}
+\newcommand*{\glsxtrsetfieldifexists}[3]{\glsdoifexists{#1}{#3}}
+\newrobustcmd*{\GlsXtrSetField}[3]{%
+ \glsxtrsetfieldifexists{#1}{#2}%
+ {\csdef{glo@\glsdetoklabel{#1}@#2}{#3}}%
+}
+\newrobustcmd*{\GlstrLetField}[3]{%
+ \glsxtrsetfieldifexists{#1}{#2}%
+ {\cslet{glo@\glsdetoklabel{#1}@#2}{#3}}%
+}
+\newrobustcmd*{\csGlsXtrLetField}[3]{%
+ \glsxtrsetfieldifexists{#1}{#2}%
+ {\csletcs{glo@\glsdetoklabel{#1}@#2}{#3}}%
+}
+\newrobustcmd*{\GlsXtrLetFieldToField}[4]{%
+ \glsxtrsetfieldifexists{#1}{#2}%
+ {\csletcs{glo@\glsdetoklabel{#1}@#2}{glo@\glsdetoklabel{#3}@#4}}%
+}
+\newrobustcmd*{\gGlsXtrSetField}[3]{%
+ \glsxtrsetfieldifexists{#1}{#2}%
+ {\csgdef{glo@\glsdetoklabel{#1}@#2}{#3}}%
+}
+\newrobustcmd*{\xGlsXtrSetField}[3]{%
+ \glsxtrsetfieldifexists{#1}{#2}%
+ {\protected@csxdef{glo@\glsdetoklabel{#1}@#2}{#3}}%
+}
+\newrobustcmd*{\eGlsXtrSetField}[3]{%
+ \glsxtrsetfieldifexists{#1}{#2}%
+ {\protected@csedef{glo@\glsdetoklabel{#1}@#2}{#3}}%
+}
\ifglsentrycounter
\newcommand*{\glsxtrpageref}[1]{\pageref{glsentry-\glsdetoklabel{#1}}}
\else
@@ -453,25 +613,214 @@
\newcommand*{\glsxtrpageref}[1]{\gls{#1}}
\fi
\fi
-\let\glsxtr@org@newignoredglossary\newignoredglossary
-\newcommand*{\glsxtr@s@newignoredglossary}[1]{%
- \ifdefempty\@ignored@glossaries
+\newcommand{\apptoglossarypreamble}[2][\glsdefaulttype]{%
+ \ifcsdef{glolist@#1}%
{%
- \edef\@ignored@glossaries{#1}%
+ \ifcsundef{@glossarypreamble@#1}%
+ {\csdef{@glossarypreamble@#1}{}}%
+ {}%
+ \csappto{@glossarypreamble@#1}{#2}%
}%
{%
- \eappto\@ignored@glossaries{,#1}%
+ \GlossariesExtraWarning{Glossary `#1' is not defined}%
}%
- \csgdef{glolist@#1}{,}%
- \ifcsundef{gls@#1@entryfmt}%
+}
+\newcommand{\preglossarypreamble}[2][\glsdefaulttype]{%
+ \ifcsdef{glolist@#1}%
{%
- \defglsentryfmt[#1]{\glsentryfmt}%
+ \ifcsundef{@glossarypreamble@#1}%
+ {\csdef{@glossarypreamble@#1}{}}%
+ {}%
+ \cspreto{@glossarypreamble@#1}{#2}%
+ }%
+ {%
+ \GlossariesExtraWarning{Glossary `#1' is not defined}%
}%
- {}%
}
+\glsaddstoragekey*{alias}{}{\glsxtralias}
+\appto\@newglossaryentryposthook{%
+ \ifcsvoid{glo@\@glo@label @alias}{}%
+ {%
+ \ifdefvoid\@glo@see
+ {%
+ \edef\@do@glssee{\noexpand\glssee
+ {\@glo@label}{\csuse{glo@\@glo@label @alias}}}%
+ \@do@glssee
+ }%
+ {}%
+ }%
+}
+\renewcommand*{\longnewglossaryentry}{%
+ \@ifstar\@glsxtr@s@longnewglossaryentry\@glsxtr@longnewglossaryentry
+}
+\newcommand{\@glsxtr@s@longnewglossaryentry}[3]{%
+ \glsdoifnoexists{#1}%
+ {%
+ \bgroup
+ \let\@org@newglossaryentryprehook\@newglossaryentryprehook
+ \long\def\@newglossaryentryprehook{%
+ \long\def\@glo@desc{#3}%
+ \@org@newglossaryentryprehook
+ }%
+ \renewcommand*{\gls@assign@desc}[1]{%
+ \global\cslet{glo@\glsdetoklabel{#1}@desc}{\@glo@desc}%
+ \global\cslet{glo@\glsdetoklabel{#1}@descplural}{\@glo@descplural}%
+ }
+ \gls@defglossaryentry{#1}{#2}%
+ \egroup
+ }%
+}
+\newcommand{\@glsxtr@longnewglossaryentry}[3]{%
+ \glsdoifnoexists{#1}%
+ {%
+ \bgroup
+ \let\@org@newglossaryentryprehook\@newglossaryentryprehook
+ \long\def\@newglossaryentryprehook{%
+ \long\def\@glo@desc{#3\glsxtrpostlongdescription}%
+ \@org@newglossaryentryprehook
+ }%
+ \renewcommand*{\gls@assign@desc}[1]{%
+ \global\cslet{glo@\glsdetoklabel{#1}@desc}{\@glo@desc}%
+ \global\cslet{glo@\glsdetoklabel{#1}@descplural}{\@glo@descplural}%
+ }
+ \gls@defglossaryentry{#1}{#2}%
+ \egroup
+ }%
+}
+\newcommand*{\glsxtrpostlongdescription}{\leavevmode\unskip\nopostdesc}
\renewcommand{\newignoredglossary}{%
\@ifstar\glsxtr@s@newignoredglossary\glsxtr@org@newignoredglossary
}
+\newcommand*{\glsxtr@org@newignoredglossary}[1]{%
+ \ifcsdef{glolist@#1}
+ {%
+ \glsxtrundefaction{Glossary type `#1' already exists}{}%
+ }%
+ {%
+ \ifdefempty\@ignored@glossaries
+ {%
+ \edef\@ignored@glossaries{#1}%
+ }%
+ {%
+ \eappto\@ignored@glossaries{,#1}%
+ }%
+ \csgdef{glolist@#1}{,}%
+ \ifcsundef{gls@#1@entryfmt}%
+ {%
+ \defglsentryfmt[#1]{\glsentryfmt}%
+ }%
+ {}%
+ \ifdefempty\@gls@nohyperlist
+ {%
+ \renewcommand*{\@gls@nohyperlist}{#1}%
+ }%
+ {%
+ \eappto\@gls@nohyperlist{,#1}%
+ }%
+ }%
+}
+\newcommand*{\glsxtr@s@newignoredglossary}[1]{%
+ \ifcsdef{glolist@#1}
+ {%
+ \glsxtrundefaction{Glossary type `#1' already exists}{}%
+ }%
+ {%
+ \ifdefempty\@ignored@glossaries
+ {%
+ \edef\@ignored@glossaries{#1}%
+ }%
+ {%
+ \eappto\@ignored@glossaries{,#1}%
+ }%
+ \csgdef{glolist@#1}{,}%
+ \ifcsundef{gls@#1@entryfmt}%
+ {%
+ \defglsentryfmt[#1]{\glsentryfmt}%
+ }%
+ {}%
+ }%
+}
+\glsifusetranslator
+{%
+ \renewcommand*{\glssettoctitle}[1]{%
+ \ifcsdef{gls@tr@set@#1@toctitle}%
+ {%
+ \csuse{gls@tr@set@#1@toctitle}%
+ }%
+ {%
+ \ifcsdef{@glotype@#1@title}%
+ {\def\glossarytoctitle{\csname @glotype@#1@title\endcsname}}%
+ {\def\glossarytoctitle{\glossarytitle}}%
+ }%
+ }%
+}
+{
+ \renewcommand*{\glssettoctitle}[1]{%
+ \ifcsdef{@glotype@#1@title}%
+ {\def\glossarytoctitle{\csname @glotype@#1@title\endcsname}}%
+ {\def\glossarytoctitle{\glossarytitle}}%
+ }
+}
+\newcommand{\provideignoredglossary}{%
+ \@ifstar\glsxtr@s@provideignoredglossary\glsxtr@provideignoredglossary
+}
+\newcommand*{\glsxtr@provideignoredglossary}[1]{%
+ \ifcsdef{glolist@#1}
+ {}%
+ {%
+ \ifdefempty\@ignored@glossaries
+ {%
+ \edef\@ignored@glossaries{#1}%
+ }%
+ {%
+ \eappto\@ignored@glossaries{,#1}%
+ }%
+ \csgdef{glolist@#1}{,}%
+ \ifcsundef{gls@#1@entryfmt}%
+ {%
+ \defglsentryfmt[#1]{\glsentryfmt}%
+ }%
+ {}%
+ \ifdefempty\@gls@nohyperlist
+ {%
+ \renewcommand*{\@gls@nohyperlist}{#1}%
+ }%
+ {%
+ \eappto\@gls@nohyperlist{,#1}%
+ }%
+ }%
+}
+\newcommand*{\glsxtr@s@provideignoredglossary}[1]{%
+ \ifcsdef{glolist@#1}
+ {}%
+ {%
+ \ifdefempty\@ignored@glossaries
+ {%
+ \edef\@ignored@glossaries{#1}%
+ }%
+ {%
+ \eappto\@ignored@glossaries{,#1}%
+ }%
+ \csgdef{glolist@#1}{,}%
+ \ifcsundef{gls@#1@entryfmt}%
+ {%
+ \defglsentryfmt[#1]{\glsentryfmt}%
+ }%
+ {}%
+ }%
+}
+\newcommand*{\glsxtrcopytoglossary}[2]{%
+ \glsdoifexists{#1}%
+ {%
+ \ifcsdef{glolist@#2}
+ {%
+ \cseappto{glolist@#2}{#1,}%
+ }%
+ {%
+ \glsxtrundefaction{Glossary type `#2' doesn't exist}{}%
+ }%
+ }%
+}
\renewcommand{\glsdoifexists}[2]{%
\ifglsentryexists{#1}{#2}%
{%
@@ -1548,16 +1897,50 @@
{
\renewcommand*{\@gls@setdefault@glslink@opts}{%
\KV@glslink@noindexfalse
+ \@glsxtrsetaliasnoindex
}
}
{
\newcommand*{\@gls@setdefault@glslink@opts}{%
\KV@glslink@noindexfalse
+ \@glsxtrsetaliasnoindex
}
\preto\do@glsdisablehyperinlist{\@gls@setdefault@glslink@opts}
}
+\newcommand*{\glsxtrsetaliasnoindex}{%
+ \KV@glslink@noindextrue
+}
+\newcommand*{\@glsxtrsetaliasnoindex}{%
+ \ifglshasfield{alias}{\glslabel}%
+ {%
+ \let\glsxtrindexaliased\@glsxtrindexaliased
+ \glsxtrsetaliasnoindex
+ \let\glsxtrindexaliased\@no@glsxtrindexaliased
+ }%
+ {}%
+}
+\newcommand{\@glsxtrindexaliased}{%
+ \ifKV@glslink@noindex
+ \else
+ \begingroup
+ \def\@glsnumberformat{glsnumberformat}%
+ \edef\@gls@counter{\csname glo@\glsdetoklabel{\glslabel}@counter\endcsname}%
+ \glsxtr@saveentrycounter
+ \@@do@wrglossary{\glsxtralias{\glslabel}}%
+ \endgroup
+ \fi
+}
+\newcommand{\@no@glsxtrindexaliased}{%
+ \PackageError{glossaries-extra}{\string\glsxtrindexaliased\space
+ not permitted outside definition of \string\glsxtrsetaliasnoindex}%
+ {}%
+}
+\let\glsxtrindexaliased\@no@glsxtrindexaliased
\newcommand*{\GlsXtrSetDefaultGlsOpts}[1]{%
- \renewcommand*{\@gls@setdefault@glslink@opts}{\setkeys{glslink}{#1}}%
+ \renewcommand*{\@gls@setdefault@glslink@opts}{%
+ \setkeys{glslink}{#1}%
+ \@glsxtrsetaliasnoindex
+ }%
}
\newcommand*{\glsxtrifindexing}[2]{%
\ifKV@glslink@noindex #2\else #1\fi
@@ -1637,7 +2020,16 @@
}%
}%
{%
- \hyperlink{#1}{{\glsxtrprotectlinks#2}}%
+ \glsfieldfetch{\glslabel}{alias}{\gloaliaslabel}%
+ \ifdefvoid\gloaliaslabel
+ {%
+ \hyperlink{#1}{{\glsxtrprotectlinks#2}}%
+ }%
+ {%
+ \hyperlink
+ {\glolinkprefix\glsdetoklabel{\gloaliaslabel}}%
+ {{\glsxtrprotectlinks#2}}%
+ }%
}%
}
\ifundef\glsdonohyperlink
@@ -2509,7 +2901,7 @@
\let\@glsxtr@org@newacronymstyle\newacronymstyle
\newcommand*{\MakeAcronymsAbbreviations}{%
\renewcommand*{\newacronym}[4][]{%
- \newabbreviation[type=\acronymtype,category=acronym,##1]{##2}{##3}{##4}%
+ \glsxtr@newabbreviation{type=\acronymtype,category=acronym,##1}{##2}{##3}{##4}%
}%
\renewcommand*{\firstacronymfont}[1]{\glsfirstabbrvfont{##1}}%
\renewcommand*{\acronymfont}[1]{\glsabbrvfont{##1}}%
@@ -2673,11 +3065,67 @@
\fi
}%
}
-\let\@glsxtr@orgprintglossary\@printglossary
+\newcommand{\@glsxtr@orgprintglossary}[2]{%
+ \def\@glo@type{\glsdefaulttype}%
+ \def\glossarytitle{%
+ \ifcsdef{@glotype@\@glo@type @title}%
+ {\csuse{@glotype@\@glo@type @title}}%
+ {\glossaryname}}%
+ \def\glossarytoctitle{\glossarytitle}%
+ \let\org@glossarytitle\glossarytitle
+ \def\@glossarystyle{%
+ \ifx\@glossary@default@style\relax
+ \GlossariesWarning{No default glossary style provided \MessageBreak
+ for the glossary `\@glo@type'. \MessageBreak
+ Using deprecated fallback. \MessageBreak
+ To fix this set the style with \MessageBreak
+ \string\setglossarystyle\space or use the \MessageBreak
+ style key=value option}%
+ \fi
+ }%
+ \def\gls@dotoctitle{\glssettoctitle{\@glo@type}}%
+ \let\@org@glossaryentrynumbers\glossaryentrynumbers
+ \bgroup
+ \@printgloss@setsort
+ \setkeys{printgloss}{#1}%
+ \ifx\glossarytitle\org@glossarytitle
+ \else
+ \cslet{@glotype@\@glo@type @title}{\glossarytitle}%
+ \fi
+ \let\currentglossary\@glo@type
+ \let\org@glossaryentrynumbers\glossaryentrynumbers
+ \let\glsnonextpages\@glsnonextpages
+ \let\glsnextpages\@glsnextpages
+ \let\nopostdesc\@nopostdesc
+ \gls@dotoctitle
+ \@glossarystyle
+ \let\gls@org@glossaryentryfield\glossentry
+ \let\gls@org@glossarysubentryfield\subglossentry
+ \renewcommand{\glossentry}[1]{%
+ \xdef\glscurrententrylabel{\glsdetoklabel{##1}}%
+ \gls@org@glossaryentryfield{##1}%
+ }%
+ \renewcommand{\subglossentry}[2]{%
+ \xdef\glscurrententrylabel{\glsdetoklabel{##2}}%
+ \gls@org@glossarysubentryfield{##1}{##2}%
+ }%
+ \@gls@preglossaryhook
+ #2%
+ \egroup
+ \global\let\glossaryentrynumbers\@org@glossaryentrynumbers
+ \global\let\warn@noprintglossary\relax
+}
\renewcommand{\@printglossary}[2]{%
\def\@glsxtr@printglossopts{#1}%
\@glsxtr@orgprintglossary{#1}{#2}%
}
+\define@choicekey{printgloss}{target}[\val\nr]{true,false}[true]{%
+ \ifcase\nr
+ \let\@glstarget\glsdohypertarget
+ \else
+ \let\@glstarget\@secondoftwo
+ \fi
+}
\newcommand*{\glsxtr@makeglossaries}[1]{}
\def\@glsxtr@gettype#1,type=#2,#3\@end@glsxtr@gettype{%
\def\@glo@type{#2}%
@@ -2782,6 +3230,44 @@
\@gls@noref@warn{\@glo@type}%
}%
}
+\renewcommand*{\glsnoidxdisplayloc}[4]{%
+ \setentrycounter[#1]{#2}%
+ \@glsxtr@display@loc#3\empty\end@glsxtr@display@loc{#4}%
+}
+\def\@glsxtr@display@loc#1#2\end@glsxtr@display@loc#3{%
+ \ifx#1(\relax
+ \glsxtrdisplaystartloc{#2}{#3}%
+ \else
+ \ifx#1)\relax
+ \glsxtrdisplayendloc{#2}{#3}%
+ \else
+ \glsxtrdisplaysingleloc{#1#2}{#3}%
+ \fi
+ \fi
+}
+\newcommand*{\glsxtrdisplaysingleloc}[2]{%
+ \csuse{#1}{#2}%
+}
+\newcommand*{\glsxtrdisplaystartloc}[2]{%
+ \edef\glsxtrlocrangefmt{#1}%
+ \ifx\glsxtrlocrangefmt\empty
+ \def\glsxtrlocrangefmt{glsnumberformat}%
+ \fi
+ \expandafter\glsxtrdisplaysingleloc
+ \expandafter{\glsxtrlocrangefmt}{#2}%
+}
+\newcommand*{\glsxtrdisplayendloc}[2]{%
+ \ifdefstring{\glsxtrlocrangefmt}{#1}{}%
+ {\GlossariesExtraWarning{Mismatched end location range
+ (start=\glsxtrlocrangefmt, end=#1)}%
+ }%
+ \glsxtrdisplayendlochook{#1}{#2}%
+ \expandafter\glsxtrdisplaysingleloc
+ \expandafter{\glsxtrlocrangefmt}{#2}%
+ \def\glsxtrlocrangefmt{}%
+}
+\newcommand*{\glsxtrdisplayendlochook}[2]{}
+\newcommand*{\glsxtrlocrangefmt}{}
\renewcommand{\@print@glossary}{%
\makeatletter
\@input@{\jobname.\csname @glotype@\@glo@type @in\endcsname}%
@@ -2976,30 +3462,46 @@
\glsxtr@writefields
\let\@glsxtr@org@see@noindex\@gls@see@noindex
\let\@gls@see@noindex\relax
- \InputIfFileExists{#2.glstex}{}%
+ \IfFileExists{#2.glstex}%
+ {%
+ \edef\@bibgls@restoreat{\noexpand\catcode\noexpand`\noexpand\@=\number\catcode`\@}%
+ \makeatletter
+ \@input{#2.glstex}%
+ \@bibgls@restoreat
+ }%
{%
\GlossariesExtraWarning{No file `#2.glstex'}%
}%
\let\@gls@see@noindex\@glsxtr@org@see@noindex
}
\@onlypreamble\glsxtrresourcefile
+\newcount\glsxtrresourcecount
\newcommand*{\GlsXtrLoadResources}[1][]{%
- \glsxtrresourcefile[#1]{\jobname}%
- \renewcommand*{\GlsXtrLoadResources}[1][]{%
- \PackageError{glossaries-extra}%
- {Only 1 \string\GlsXtrLoadResources\space permitted per
- document. Use \string\glsxtrresourcefile\space for additional
- resources}%
- {}%
- }%
+ \ifnum\glsxtrresourcecount=0\relax
+ \glsxtrresourcefile[#1]{\jobname}%
+ \else
+ \glsxtrresourcefile[#1]{\jobname-\the\glsxtrresourcecount}%
+ \fi
+ \advance\glsxtrresourcecount by 1\relax
}
\newcommand*{\glsxtr@resource}[2]{}
\newcommand*{\glsxtr@fields}[1]{}
\newcommand*{\glsxtr@texencoding}[1]{}
+\newcommand*{\glsxtr@langtag}[1]{}
+\newcommand*{\glsxtr@pluralsuffixes}[4]{}
\newcommand*{\glsxtr@shortcutsval}[1]{}
\newcommand*{\glsxtr@linkprefix}[1]{}
\newcommand*{\glsxtr@writefields}{%
\protected@write\@auxout{}{\string\glsxtr@fields{\@gls@keymap}}%
+ \ifdef\CurrentTrackedLanguageTag
+ {%
+ \protected@write\@auxout{}{%
+ \string\glsxtr@langtag{\CurrentTrackedLanguageTag}}%
+ }%
+ {}%
+ \protected@write\@auxout{}{\string\glsxtr@pluralsuffixes
+ {\glspluralsuffix}{\abbrvpluralsuffix}{\acrpluralsuffix}%
+ {\glsxtrabbrvpluralsuffix}}%
\ifdef\inputencodingname
{%
\protected@write\@auxout{}{\string\glsxtr@texencoding{\inputencodingname}}%
@@ -3010,11 +3512,34 @@
{}%
}%
\protected@write\@auxout{}{\string\glsxtr@shortcutsval{\@glsxtr@shortcutsval}}%
- \protected@write\@auxout{}{\string\glsxtr@linkprefix{\glolinkprefix}}%
+ \AtBeginDocument
+ {\protected@write\@auxout{}{\string\glsxtr@linkprefix{\glolinkprefix}}}%
\let\glsxtr@writefields\relax
}
-\newcommand*{\printunsrtglossary}[1][type=\glsdefaulttype]{%
- \@printglossary{#1}{\@print@unsrt@glossary}%
+\newcommand*{\glsxtr@record}[5]{}
+\newcommand*{\glsxtr@counterrecord}[3]{%
+ \glsxtrfieldlistgadd{#1}{record.#2}{#3}%
+}
+\newcommand*{\@glsxtr@counterrecordhook}{}
+\newcommand*{\GlsXtrRecordCounter}[1]{%
+ \@@glsxtr@recordcounter{#1}%
+}
+\@onlypreamble\GlsXtrRecordCounter
+\newcommand*{\@glsxtr@docounterrecord}[1]{%
+ \protected@write\@auxout{}{\string\glsxtr@counterrecord
+ {\@gls@label}{#1}{\csuse{the#1}}}%
+}
+\newcommand*{\printunsrtglossary}{%
+ \@ifstar\s@printunsrtglossary\@printunsrtglossary
+}
+\newcommand*{\@printunsrtglossary}[1][]{%
+ \@printglossary{type=\glsdefaulttype,#1}{\@print@unsrt@glossary}%
+}
+\newcommand*{\s@printunsrtglossary}[2][]{%
+ \begingroup
+ #2%
+ \@printglossary{type=\glsdefaulttype,#1}{\@print@unsrt@glossary}%
+ \endgroup
}
\newcommand*{\printunsrtglossaries}{%
\forallglossaries{\@@glo@type}{\printunsrtglossary[type=\@@glo@type]}%
@@ -3039,15 +3564,44 @@
:\expandafter=\csname glolist@\@glo@type\endcsname\do{%
\ifdefempty{\glscurrententrylabel}
{}%
- {\@glsxtr@noidx@do\glscurrententrylabel}%
+ {\printunsrtglossaryhandler\glscurrententrylabel}%
}%
\end{theglossary}%
}%
\glossarypostamble
}
+\newcommand{\printunsrtglossaryhandler}[1]{%
+ \glsxtrunsrtdo{#1}%
+}
+\newcommand{\print@op@unsrtglossaryunit}[2][]{%
+ \s@printunsrtglossary[type=\glsdefaulttype,#1]{%
+ \printunsrtglossaryunitsetup{#2}%
+ }%
+}
+\newcommand*{\printunsrtglossaryunitsetup}[1]{%
+ \renewcommand{\printunsrtglossaryhandler}[1]{%
+ \glsxtrfieldxifinlist{##1}{record.#1}{\csuse{the#1}}
+ {\glsxtrunsrtdo{##1}}%
+ {}%
+ }%
+ \ifcsundef{theH#1}%
+ {%
+ \renewcommand*{\glolinkprefix}{record.#1.\csuse{the#1}.}%
+ }%
+ {%
+ \renewcommand*{\glolinkprefix}{record.#1.\csuse{theH#1}.}%
+ }%
+ \renewcommand*{\glossarysection}[2][]{}%
+ \appto\glossarypostamble{\glspar\medskip\glspar}%
+}
+\newcommand{\print@noop@unsrtglossaryunit}[2][]{%
+ \PackageError{glossaries-extra}{\string\printunsrtglossaryunit\space
+ requires the record=only or record=alsoindex package option}{}%
+}
\newcommand*{\@glsxtr@unsrt@getgrouptitle}[2]{%
\def#2{#1}%
}
+\newcommand{\glsxtrunsrtdo}{\@glsxtr@noidx@do}
\newcommand{\@glsxtr@noidx@do}[1]{%
\global\letcs{\@gls@loclist}{glo@\glsdetoklabel{#1}@loclist}%
\global\letcs{\@gls@location}{glo@\glsdetoklabel{#1}@location}%
@@ -4031,14 +4585,19 @@
{
\renewcommand*{\@gls@preglossaryhook}{%
\@glsxtr@activate@initialtagging
- \let\@glsxtr@org@postdescription\glspostdescription
- \renewcommand*{\glspostdescription}{%
- \ifglsentryexists{\glscurrententrylabel}%
- {%
- \glsxtrpostdescription
- \@glsxtr@org@postdescription
- }{}%
+ \ifundef\@glsxtr@org@postdescription
+ {%
+ \let\@glsxtr@org@postdescription\glspostdescription
+ \renewcommand*{\glspostdescription}{%
+ \ifglsentryexists{\glscurrententrylabel}%
+ {%
+ \glsxtrpostdescription
+ \@glsxtr@org@postdescription
+ }%
+ {}%
+ }%
}%
+ {}%
\glossxtrsetpopts
}%
}
@@ -4189,6 +4748,9 @@
\@glsxtr@insert@dots@next#1%
}
\newcommand*{\newabbreviation}[4][]{%
+ \glsxtr@newabbreviation{#1}{#2}{#3}{#4}%
+}
+\newcommand*{\glsxtr@newabbreviation}[4]{%
\glskeylisttok{#1}%
\glslabeltok{#2}%
\glsshorttok{#3}%
@@ -4291,7 +4853,8 @@
\newcommand*{\glslongdefaultfont}[1]{#1}
\newcommand*{\glsfirstlongfont}[1]{\glslongfont{#1}}
\newcommand*{\glsfirstlongdefaultfont}[1]{\glslongdefaultfont{#1}}
-\newcommand*{\abbrvpluralsuffix}{\glspluralsuffix}
+\newcommand*{\glsxtrabbrvpluralsuffix}{\glspluralsuffix}
+\newcommand*{\abbrvpluralsuffix}{\glsxtrabbrvpluralsuffix}
\newrobustcmd*{\glsxtrfull}{\@gls@hyp@opt\ns@glsxtrfull}
\newcommand*\ns@glsxtrfull[2][]{%
\new@ifnextchar[{\@glsxtr@full{#1}{#2}}%
@@ -4863,7 +5426,7 @@
}%
}%
{%
- \renewcommand*{\abbrvpluralsuffix}{\glspluralsuffix}%
+ \renewcommand*{\abbrvpluralsuffix}{\glsxtrabbrvpluralsuffix}%
\renewcommand*{\glsabbrvfont}[1]{\glsabbrvdefaultfont{##1}}%
\renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvdefaultfont{##1}}%
\renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}%
@@ -4939,7 +5502,7 @@
}%
}%
{%
- \renewcommand*{\abbrvpluralsuffix}{\glspluralsuffix}%
+ \renewcommand*{\abbrvpluralsuffix}{\glsxtrabbrvpluralsuffix}%
\renewcommand*\glsabbrvfont[1]{\glsabbrvdefaultfont{##1}}%
\renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvdefaultfont{##1}}%
\renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}%
@@ -5018,7 +5581,7 @@
}%
}%
{%
- \renewcommand*{\abbrvpluralsuffix}{\glspluralsuffix}%
+ \renewcommand*{\abbrvpluralsuffix}{\glsxtrabbrvpluralsuffix}%
\renewcommand*\glsabbrvfont[1]{\glsabbrvdefaultfont{##1}}%
\renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvdefaultfont{##1}}%
\renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongfootnotefont{##1}}%
@@ -5098,7 +5661,7 @@
}%
}%
{%
- \renewcommand*{\abbrvpluralsuffix}{\glspluralsuffix}%
+ \renewcommand*{\abbrvpluralsuffix}{\glsxtrabbrvpluralsuffix}%
\renewcommand*\glsabbrvfont[1]{\glsabbrvdefaultfont{##1}}%
\renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvdefaultfont{##1}}%
\renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongfootnotefont{##1}}%
@@ -5155,7 +5718,7 @@
\glssetattribute{\the\glslabeltok}{regular}{true}}%
}%
{%
- \renewcommand*{\abbrvpluralsuffix}{\glspluralsuffix}%
+ \renewcommand*{\abbrvpluralsuffix}{\glsxtrabbrvpluralsuffix}%
\renewcommand*\glsabbrvfont[1]{\glsabbrvdefaultfont{##1}}%
\renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvdefaultfont{##1}}%
\renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}%
@@ -5217,7 +5780,7 @@
\glssetattribute{\the\glslabeltok}{regular}{true}}%
}%
{%
- \renewcommand*{\abbrvpluralsuffix}{\glspluralsuffix}%
+ \renewcommand*{\abbrvpluralsuffix}{\glsxtrabbrvpluralsuffix}%
\renewcommand*\glsabbrvfont[1]{\glsabbrvdefaultfont{##1}}%
\renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvdefaultfont{##1}}%
\renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}%
@@ -5274,7 +5837,7 @@
\glssetattribute{\the\glslabeltok}{regular}{true}}%
}%
{%
- \renewcommand*{\abbrvpluralsuffix}{\glspluralsuffix}%
+ \renewcommand*{\abbrvpluralsuffix}{\glsxtrabbrvpluralsuffix}%
\renewcommand*\glsabbrvfont[1]{\glsabbrvdefaultfont{##1}}%
\renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvdefaultfont{##1}}%
\renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}%
@@ -5337,7 +5900,7 @@
\letabbreviationstyle{long-noshort}{long}
\newcommand*{\glsxtrscfont}[1]{\textsc{#1}}
\newcommand*{\glsxtrfirstscfont}[1]{\glsxtrscfont{#1}}
-\newcommand*{\glsxtrscsuffix}{\glstextup{\glspluralsuffix}}
+\newcommand*{\glsxtrscsuffix}{\glstextup{\glsxtrabbrvpluralsuffix}}
\newabbreviationstyle{long-short-sc}%
{%
\GlsXtrUseAbbrStyleSetup{long-short}%
@@ -5446,7 +6009,7 @@
\@glsxtr@deprecated@abbrstyle{postfootnote-sc}{short-sc-postfootnote}
\newcommand*{\glsxtrsmfont}[1]{\textsmaller{#1}}
\newcommand*{\glsxtrfirstsmfont}[1]{\glsxtrsmfont{#1}}
-\newcommand*{\glsxtrsmsuffix}{\glspluralsuffix}
+\newcommand*{\glsxtrsmsuffix}{\glsxtrabbrvpluralsuffix}
\newabbreviationstyle{long-short-sm}%
{%
\GlsXtrUseAbbrStyleSetup{long-short}%
@@ -5781,7 +6344,7 @@
\newcommand*{\glsfirstabbrvuserfont}[1]{\glsabbrvuserfont{#1}}
\newcommand*{\glslonguserfont}[1]{#1}
\newcommand*{\glsfirstlonguserfont}[1]{\glslonguserfont{#1}}
-\newcommand*{\glsxtrusersuffix}{\glspluralsuffix}
+\newcommand*{\glsxtrusersuffix}{\glsxtrabbrvpluralsuffix}
\newabbreviationstyle{long-short-user}%
{%
\renewcommand*{\CustomAbbreviationFields}{%
@@ -5828,6 +6391,205 @@
\glsxtruserparen{\glsfirstabbrvfont{\glsaccessshortpl{##1}}}{##1}%
}%
}
+\newabbreviationstyle{long-postshort-user}%
+{%
+ \renewcommand*{\CustomAbbreviationFields}{%
+ name={\protect\glsabbrvfont{\the\glsshorttok}},
+ sort={\the\glsshorttok},
+ first={\protect\glsfirstlongfont{\the\glslongtok}},%
+ firstplural={\protect\glsfirstlongfont{\the\glslongpltok}},%
+ plural={\protect\glsabbvfont{\the\glsshortpltok}},%
+ description={\protect\glslonguserfont{\the\glslongtok}}}%
+ \renewcommand*{\GlsXtrPostNewAbbreviation}{%
+ \csdef{glsxtrpostlink\glscategorylabel}{%
+ \glsxtrifwasfirstuse
+ {%
+ \glsxtruserparen
+ {\glsfirstabbrvuserfont{\glsentryshort{\glslabel}}}%
+ {\glslabel}%
+ }%
+ {}%
+ }%
+ \glshasattribute{\the\glslabeltok}{regular}%
+ {%
+ \glssetattribute{\the\glslabeltok}{regular}{false}%
+ }%
+ {}%
+ }%
+}%
+{%
+ \renewcommand*{\abbrvpluralsuffix}{\glsxtrusersuffix}%
+ \renewcommand*{\glsabbrvfont}[1]{\glsabbrvuserfont{##1}}%
+ \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvuserfont{##1}}%
+ \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlonguserfont{##1}}%
+ \renewcommand*{\glslongfont}[1]{\glslonguserfont{##1}}%
+ \renewcommand*{\glsxtrfullformat}[2]{%
+ \glsfirstlongfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}%
+ \ifglsxtrinsertinside\else##2\fi
+ }%
+ \renewcommand*{\glsxtrfullplformat}[2]{%
+ \glsfirstlongfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}%
+ \ifglsxtrinsertinside\else##2\fi
+ }%
+ \renewcommand*{\Glsxtrfullformat}[2]{%
+ \glsfirstlongfont{\Glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}%
+ \ifglsxtrinsertinside\else##2\fi
+ }%
+ \renewcommand*{\Glsxtrfullplformat}[2]{%
+ \glsfirstlongfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}%
+ \ifglsxtrinsertinside\else##2\fi
+ }%
+ \renewcommand*{\glsxtrinlinefullformat}[2]{%
+ \glsfirstlongfont{\glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}%
+ \ifglsxtrinsertinside\else##2\fi
+ \glsxtruserparen{\glsfirstabbrvfont{\glsaccessshort{##1}}}{##1}%
+ }%
+ \renewcommand*{\glsxtrinlinefullplformat}[2]{%
+ \glsfirstlongfont{\glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}%
+ \ifglsxtrinsertinside\else##2\fi
+ \glsxtruserparen{\glsfirstabbrvfont{\glsaccessshortpl{##1}}}{##1}%
+ }%
+ \renewcommand*{\Glsxtrinlinefullformat}[2]{%
+ \glsfirstlongfont{\Glsaccesslong{##1}\ifglsxtrinsertinside##2\fi}%
+ \ifglsxtrinsertinside\else##2\fi
+ \glsxtruserparen{\glsfirstabbrvfont{\glsaccessshort{##1}}}{##1}%
+ }%
+ \renewcommand*{\Glsxtrinlinefullplformat}[2]{%
+ \glsfirstlongfont{\Glsaccesslongpl{##1}\ifglsxtrinsertinside##2\fi}%
+ \ifglsxtrinsertinside\else##2\fi
+ \glsxtruserparen{\glsfirstabbrvfont{\glsaccessshortpl{##1}}}{##1}%
+ }%
+}
+\newabbreviationstyle{long-postshort-user-desc}%
+{%
+ \renewcommand*{\CustomAbbreviationFields}{%
+ name={\protect\glsfirstlongfont{\the\glslongtok}%
+ \protect\glsxtruserparen
+ {\protect\glsabbrvfont{\the\glsshorttok}}{\the\glslabeltok}},
+ sort={\the\glslongtok},
+ first={\protect\glsfirstlongfont{\the\glslongtok}},%
+ firstplural={\protect\glsfirstlongfont{\the\glslongpltok}},%
+ plural={\protect\glsabbvfont{\the\glsshortpltok}}}%
+ \renewcommand*{\GlsXtrPostNewAbbreviation}{%
+ \csdef{glsxtrpostlink\glscategorylabel}{%
+ \glsxtrifwasfirstuse
+ {%
+ \glsxtruserparen
+ {\glsfirstabbrvuserfont{\glsentryshort{\glslabel}}}%
+ {\glslabel}%
+ }%
+ {}%
+ }%
+ \glshasattribute{\the\glslabeltok}{regular}%
+ {%
+ \glssetattribute{\the\glslabeltok}{regular}{false}%
+ }%
+ {}%
+ }%
+}%
+{%
+ \GlsXtrUseAbbrStyleFmts{long-postshort-user}%
+}
+\newabbreviationstyle{short-postlong-user}%
+{%
+ \renewcommand*{\CustomAbbreviationFields}{%
+ name={\protect\glsabbrvfont{\the\glsshorttok}},
+ sort={\the\glsshorttok},
+ first={\protect\glsfirstlongfont{\the\glslongtok}},%
+ firstplural={\protect\glsfirstlongfont{\the\glslongpltok}},%
+ plural={\protect\glsabbvfont{\the\glsshortpltok}},%
+ description={\protect\glslonguserfont{\the\glslongtok}}}%
+ \renewcommand*{\GlsXtrPostNewAbbreviation}{%
+ \csdef{glsxtrpostlink\glscategorylabel}{%
+ \glsxtrifwasfirstuse
+ {%
+ \glsxtruserparen
+ {\glsfirstabbrvuserfont{\glsentrylong{\glslabel}}}%
+ {\glslabel}%
+ }%
+ {}%
+ }%
+ \glshasattribute{\the\glslabeltok}{regular}%
+ {%
+ \glssetattribute{\the\glslabeltok}{regular}{false}%
+ }%
+ {}%
+ }%
+}%
+{%
+ \renewcommand*{\abbrvpluralsuffix}{\glsxtrusersuffix}%
+ \renewcommand*{\glsabbrvfont}[1]{\glsabbrvuserfont{##1}}%
+ \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvuserfont{##1}}%
+ \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlonguserfont{##1}}%
+ \renewcommand*{\glslongfont}[1]{\glslonguserfont{##1}}%
+ \renewcommand*{\glsxtrfullformat}[2]{%
+ \glsfirstabbrvfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}%
+ \ifglsxtrinsertinside\else##2\fi
+ }%
+ \renewcommand*{\glsxtrfullplformat}[2]{%
+ \glsfirstabbrvfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}%
+ \ifglsxtrinsertinside\else##2\fi
+ }%
+ \renewcommand*{\Glsxtrfullformat}[2]{%
+ \glsfirstabbrvfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}%
+ \ifglsxtrinsertinside\else##2\fi
+ }%
+ \renewcommand*{\Glsxtrfullplformat}[2]{%
+ \glsfirstabbrvfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}%
+ \ifglsxtrinsertinside\else##2\fi
+ }%
+ \renewcommand*{\glsxtrinlinefullformat}[2]{%
+ \glsfirstabbrvfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}%
+ \ifglsxtrinsertinside\else##2\fi
+ \glsxtruserparen{\glsfirstlongfont{\glsaccesslong{##1}}}{##1}%
+ }%
+ \renewcommand*{\glsxtrinlinefullplformat}[2]{%
+ \glsfirstabbrvfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}%
+ \ifglsxtrinsertinside\else##2\fi
+ \glsxtruserparen{\glsfirstlongfont{\glsaccesslongpl{##1}}}{##1}%
+ }%
+ \renewcommand*{\Glsxtrinlinefullformat}[2]{%
+ \glsfirstabbrvfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}%
+ \ifglsxtrinsertinside\else##2\fi
+ \glsxtruserparen{\glsfirstlongfont{\glsaccesslong{##1}}}{##1}%
+ }%
+ \renewcommand*{\Glsxtrinlinefullplformat}[2]{%
+ \glsfirstabbrvfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}%
+ \ifglsxtrinsertinside\else##2\fi
+ \glsxtruserparen{\glsfirstlongfont{\glsaccesslongpl{##1}}}{##1}%
+ }%
+}
+\newabbreviationstyle{short-postlong-user-desc}%
+{%
+ \renewcommand*{\CustomAbbreviationFields}{%
+ name={\protect\glsabbrvfont{\the\glsshorttok}%
+ \protect\glsxtruserparen
+ {\protect\glsfirstlongfont{\the\glslongpltok}}%
+ {\the\glslabeltok}},
+ sort={\the\glsshorttok},
+ first={\protect\glsfirstlongfont{\the\glslongtok}},%
+ firstplural={\protect\glsfirstlongfont{\the\glslongpltok}},%
+ plural={\protect\glsabbvfont{\the\glsshortpltok}}}%
+ \renewcommand*{\GlsXtrPostNewAbbreviation}{%
+ \csdef{glsxtrpostlink\glscategorylabel}{%
+ \glsxtrifwasfirstuse
+ {%
+ \glsxtruserparen
+ {\glsfirstabbrvuserfont{\glsentrylong{\glslabel}}}%
+ {\glslabel}%
+ }%
+ {}%
+ }%
+ \glshasattribute{\the\glslabeltok}{regular}%
+ {%
+ \glssetattribute{\the\glslabeltok}{regular}{false}%
+ }%
+ {}%
+ }%
+}%
+{%
+ \GlsXtrUseAbbrStyleFmts{short-postlong-user}%
+}
\newabbreviationstyle{long-short-user-desc}%
{%
\GlsXtrUseAbbrStyleSetup{long-short-desc}%