From 5d714d9476cbb90b125ff14a9d764ad90bb7c2ed Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Fri, 24 Sep 2021 03:01:47 +0000 Subject: CTAN sync 202109240301 --- macros/latex/contrib/etoc/README.md | 13 +- macros/latex/contrib/etoc/etoc-DE.pdf | Bin 583023 -> 583401 bytes macros/latex/contrib/etoc/etoc.dtx | 84 +- macros/latex/contrib/etoc/etoc.pdf | Bin 639634 -> 642026 bytes macros/latex/contrib/glossaries-extra/CHANGES | 67 + macros/latex/contrib/glossaries-extra/README | 4 +- .../glossaries-extra/glossaries-extra-code.pdf | Bin 1374458 -> 1387050 bytes .../glossaries-extra/glossaries-extra-manual.html | 18956 ++++---- .../glossaries-extra/glossaries-extra-manual.pdf | Bin 801550 -> 818478 bytes .../glossaries-extra/glossaries-extra-manual.tex | 179 +- .../contrib/glossaries-extra/glossaries-extra.dtx | 906 +- .../contrib/glossaries-extra/glossaries-extra.ins | 8 +- .../samples/sample-abbr-styles.pdf | Bin 537732 -> 556798 bytes .../glossaries-extra/samples/sample-abbrv.pdf | Bin 44753 -> 47272 bytes .../glossaries-extra/samples/sample-accsupp.pdf | Bin 82844 -> 83788 bytes .../samples/sample-acronym-desc.pdf | Bin 50363 -> 53686 bytes .../glossaries-extra/samples/sample-acronym.pdf | Bin 36739 -> 39250 bytes .../glossaries-extra/samples/sample-alias.pdf | Bin 43869 -> 46970 bytes .../samples/sample-altmodifier.pdf | Bin 35301 -> 37816 bytes .../samples/sample-alttree-marginpar.pdf | Bin 90995 -> 94539 bytes .../samples/sample-alttree-sym.pdf | Bin 69534 -> 74492 bytes .../glossaries-extra/samples/sample-alttree.pdf | Bin 54920 -> 58146 bytes .../samples/sample-autoindex-hyp.pdf | Bin 141398 -> 147083 bytes .../glossaries-extra/samples/sample-autoindex.pdf | Bin 160937 -> 171657 bytes .../glossaries-extra/samples/sample-crossref.pdf | Bin 41287 -> 44640 bytes .../glossaries-extra/samples/sample-crossref2.pdf | Bin 41613 -> 44943 bytes .../glossaries-extra/samples/sample-docdef.pdf | Bin 45256 -> 48587 bytes .../glossaries-extra/samples/sample-entrycount.pdf | Bin 54617 -> 58670 bytes .../glossaries-extra/samples/sample-external.pdf | Bin 34181 -> 36694 bytes .../glossaries-extra/samples/sample-fmt.pdf | Bin 75259 -> 89113 bytes .../glossaries-extra/samples/sample-footnote.pdf | Bin 63227 -> 68245 bytes .../glossaries-extra/samples/sample-header.pdf | Bin 125913 -> 135383 bytes .../glossaries-extra/samples/sample-indexhook.pdf | Bin 42721 -> 46049 bytes .../samples/sample-initialisms.pdf | Bin 81588 -> 87251 bytes .../glossaries-extra/samples/sample-linkcount.pdf | Bin 38230 -> 40776 bytes .../samples/sample-mixed-abbrv-styles.pdf | Bin 57823 -> 62798 bytes .../glossaries-extra/samples/sample-mixedsort.pdf | Bin 45155 -> 48427 bytes .../glossaries-extra/samples/sample-mixture.pdf | Bin 159361 -> 169231 bytes .../glossaries-extra/samples/sample-name-font.pdf | Bin 224741 -> 214732 bytes .../glossaries-extra/samples/sample-nested.pdf | Bin 67732 -> 72406 bytes .../samples/sample-noidx-restricteddocdefs.pdf | Bin 47583 -> 50840 bytes .../glossaries-extra/samples/sample-onelink.pdf | Bin 44513 -> 25876 bytes .../samples/sample-onthefly-utf8.pdf | Bin 106065 -> 111705 bytes .../samples/sample-onthefly-xetex.pdf | Bin 19644 -> 19673 bytes .../glossaries-extra/samples/sample-onthefly.pdf | Bin 43482 -> 46377 bytes .../glossaries-extra/samples/sample-pages.pdf | Bin 38802 -> 41301 bytes .../glossaries-extra/samples/sample-postdot.pdf | Bin 37059 -> 39567 bytes .../glossaries-extra/samples/sample-postlink.pdf | Bin 67884 -> 73859 bytes .../glossaries-extra/samples/sample-prefix.pdf | Bin 33119 -> 35615 bytes .../samples/sample-record-nameref.pdf | Bin 71307 -> 76228 bytes .../glossaries-extra/samples/sample-record.pdf | Bin 50225 -> 53526 bytes .../samples/sample-restricteddocdefs.pdf | Bin 47895 -> 51149 bytes .../glossaries-extra/samples/sample-suppl-hyp.pdf | Bin 34937 -> 37492 bytes .../samples/sample-suppl-main-hyp.pdf | Bin 46396 -> 49676 bytes .../glossaries-extra/samples/sample-suppl-main.pdf | Bin 31607 -> 34110 bytes .../glossaries-extra/samples/sample-suppl.pdf | Bin 13423 -> 14259 bytes .../glossaries-extra/samples/sample-trans.pdf | Bin 49449 -> 53230 bytes .../glossaries-extra/samples/sample-undef.pdf | Bin 33226 -> 35740 bytes .../samples/sample-unitentrycount.pdf | Bin 61049 -> 64568 bytes .../contrib/glossaries-extra/samples/sample.pdf | Bin 45741 -> 48278 bytes macros/latex/contrib/glossaries/CHANGES | 106 + macros/latex/contrib/glossaries/README.md | 4 +- .../latex/contrib/glossaries/glossaries-code.pdf | Bin 1234267 -> 1570009 bytes .../latex/contrib/glossaries/glossaries-user.html | 48433 ++++++++++--------- .../latex/contrib/glossaries/glossaries-user.pdf | Bin 1242843 -> 1288797 bytes .../latex/contrib/glossaries/glossaries-user.tex | 10931 +++-- macros/latex/contrib/glossaries/glossaries.dtx | 9096 +++- macros/latex/contrib/glossaries/glossaries.ins | 10 +- .../latex/contrib/glossaries/glossariesbegin.html | 1750 +- .../latex/contrib/glossaries/glossariesbegin.pdf | Bin 190682 -> 199351 bytes .../latex/contrib/glossaries/glossariesbegin.tex | 4 +- .../contrib/glossaries/glossary2glossaries.html | 252 +- .../contrib/glossaries/glossary2glossaries.pdf | Bin 143122 -> 150980 bytes .../contrib/glossaries/glossary2glossaries.tex | 2 +- macros/latex/contrib/glossaries/makeglossaries | 53 +- .../latex/contrib/glossaries/makeglossaries-lite.1 | 4 +- .../contrib/glossaries/makeglossaries-lite.lua | 55 +- macros/latex/contrib/glossaries/makeglossaries.1 | 4 +- .../samples/glossary-lipsum-examples.pdf | Bin 248669 -> 253763 bytes .../contrib/glossaries/samples/minimalgls.pdf | Bin 49022 -> 52292 bytes .../contrib/glossaries/samples/mwe-acr-desc.pdf | Bin 37957 -> 40465 bytes .../latex/contrib/glossaries/samples/mwe-acr.pdf | Bin 33649 -> 36154 bytes .../latex/contrib/glossaries/samples/mwe-gls.pdf | Bin 29939 -> 32446 bytes .../contrib/glossaries/samples/sample-FnDesc.pdf | Bin 58811 -> 63852 bytes .../glossaries/samples/sample-chap-hyperfirst.pdf | Bin 54816 -> 57374 bytes .../contrib/glossaries/samples/sample-crossref.pdf | Bin 56716 -> 60867 bytes .../glossaries/samples/sample-custom-acronym.pdf | Bin 82179 -> 87966 bytes .../contrib/glossaries/samples/sample-dot-abbr.pdf | Bin 52797 -> 56062 bytes .../contrib/glossaries/samples/sample-dual.pdf | Bin 36452 -> 38963 bytes .../glossaries/samples/sample-entrycount.pdf | Bin 36834 -> 39340 bytes .../contrib/glossaries/samples/sample-entryfmt.pdf | Bin 34899 -> 37408 bytes .../glossaries/samples/sample-font-abbr.pdf | Bin 50704 -> 54892 bytes .../contrib/glossaries/samples/sample-ignored.pdf | Bin 31808 -> 34318 bytes .../contrib/glossaries/samples/sample-index.pdf | Bin 43377 -> 45918 bytes .../contrib/glossaries/samples/sample-inline.pdf | Bin 147218 -> 158386 bytes .../contrib/glossaries/samples/sample-langdict.pdf | Bin 38866 -> 41705 bytes .../contrib/glossaries/samples/sample-newkeys.pdf | Bin 39193 -> 41704 bytes .../glossaries/samples/sample-noidxapp-utf8.pdf | Bin 96319 -> 102938 bytes .../contrib/glossaries/samples/sample-noidxapp.pdf | Bin 67184 -> 71472 bytes .../glossaries/samples/sample-nomathhyper.pdf | Bin 41742 -> 45042 bytes .../glossaries/samples/sample-numberlist.pdf | Bin 42099 -> 44612 bytes .../contrib/glossaries/samples/sample-prefix.pdf | Bin 46274 -> 48819 bytes .../latex/contrib/glossaries/samples/sample-si.pdf | Bin 21710 -> 23394 bytes .../samples/sample-storage-abbr-desc.pdf | Bin 39894 -> 42402 bytes .../glossaries/samples/sample-storage-abbr.pdf | Bin 37660 -> 40167 bytes macros/latex/contrib/glossaries/samples/sample.pdf | Bin 119797 -> 128521 bytes .../contrib/glossaries/samples/sample4col.pdf | Bin 43324 -> 46610 bytes .../latex/contrib/glossaries/samples/sampleAcr.pdf | Bin 65501 -> 68921 bytes .../contrib/glossaries/samples/sampleAcrDesc.pdf | Bin 92746 -> 99395 bytes .../contrib/glossaries/samples/sampleCustomAcr.pdf | Bin 151105 -> 160568 bytes .../latex/contrib/glossaries/samples/sampleDB.pdf | Bin 47803 -> 51300 bytes .../contrib/glossaries/samples/sampleDesc.pdf | Bin 48390 -> 50967 bytes .../latex/contrib/glossaries/samples/sampleEq.pdf | Bin 156042 -> 167759 bytes .../contrib/glossaries/samples/sampleEqPg.pdf | Bin 169258 -> 181669 bytes .../contrib/glossaries/samples/sampleFnAcrDesc.pdf | Bin 148773 -> 158228 bytes .../latex/contrib/glossaries/samples/sampleNtn.pdf | Bin 98406 -> 106521 bytes .../contrib/glossaries/samples/samplePeople.pdf | Bin 47455 -> 50000 bytes .../latex/contrib/glossaries/samples/sampleSec.pdf | Bin 65663 -> 69922 bytes .../contrib/glossaries/samples/sampleSort.pdf | Bin 94924 -> 102149 bytes .../contrib/glossaries/samples/sampleaccsupp.pdf | Bin 81351 -> 86117 bytes .../contrib/glossaries/samples/sampleacronyms.pdf | Bin 37201 -> 39707 bytes .../contrib/glossaries/samples/sampletree.pdf | Bin 60191 -> 72397 bytes .../contrib/glossaries/samples/sampleutf8.pdf | Bin 44940 -> 47778 bytes .../latex/contrib/glossaries/samples/samplexdy.pdf | Bin 133114 -> 144709 bytes .../contrib/glossaries/samples/samplexdy2.pdf | Bin 68389 -> 73171 bytes .../contrib/glossaries/samples/samplexdy3.pdf | Bin 178189 -> 191382 bytes macros/latex/contrib/hvfloat/Changes | 1 + .../contrib/hvfloat/doc/examples/after1s1c.pdf | Bin 80294 -> 80294 bytes .../contrib/hvfloat/doc/examples/after2s2c.pdf | Bin 86722 -> 86720 bytes .../latex/contrib/hvfloat/doc/examples/capPos.pdf | Bin 95389 -> 95390 bytes .../contrib/hvfloat/doc/examples/default1s1c.pdf | Bin 81991 -> 81992 bytes .../contrib/hvfloat/doc/examples/default1s2c.pdf | Bin 83275 -> 83375 bytes .../contrib/hvfloat/doc/examples/default2s1c.pdf | Bin 79445 -> 79445 bytes .../contrib/hvfloat/doc/examples/default2s2c.pdf | Bin 85824 -> 85825 bytes .../hvfloat/doc/examples/doublepage2s1c.pdf | Bin 2314853 -> 2317102 bytes .../hvfloat/doc/examples/doublepage2s2c.pdf | Bin 619030 -> 619035 bytes .../contrib/hvfloat/doc/examples/even1s1c.pdf | Bin 77658 -> 77658 bytes .../contrib/hvfloat/doc/examples/even1s2c.pdf | Bin 86404 -> 86404 bytes .../contrib/hvfloat/doc/examples/even2s1c.pdf | Bin 84813 -> 84815 bytes .../contrib/hvfloat/doc/examples/even2s2c.pdf | Bin 85098 -> 85100 bytes .../contrib/hvfloat/doc/examples/fullpage1s2c.pdf | Bin 86773 -> 86778 bytes .../contrib/hvfloat/doc/examples/inner1s2c.pdf | Bin 84020 -> 84024 bytes .../contrib/hvfloat/doc/examples/inner2s1c.pdf | Bin 83977 -> 83979 bytes .../contrib/hvfloat/doc/examples/inner2s2c.pdf | Bin 84013 -> 84014 bytes .../contrib/hvfloat/doc/examples/left2s2c.pdf | Bin 85512 -> 85511 bytes .../hvfloat/doc/examples/multi-after1s1c.pdf | Bin 142624 -> 142627 bytes .../hvfloat/doc/examples/multi-default1s1c.pdf | Bin 146172 -> 146171 bytes .../hvfloat/doc/examples/multi-default1s2c.pdf | Bin 94586 -> 94585 bytes .../hvfloat/doc/examples/multi-default2s1c.pdf | Bin 146343 -> 146344 bytes .../hvfloat/doc/examples/multi-default2s2c.pdf | Bin 92182 -> 92184 bytes .../hvfloat/doc/examples/multi-inner2s2c.pdf | Bin 89784 -> 89789 bytes .../hvfloat/doc/examples/multi-outer2s2c.pdf | Bin 92984 -> 92987 bytes .../hvfloat/doc/examples/multi-right1s1c.pdf | Bin 145736 -> 145742 bytes .../latex/contrib/hvfloat/doc/examples/odd1s1c.pdf | Bin 77805 -> 77806 bytes .../latex/contrib/hvfloat/doc/examples/odd1s1c.tex | 2 +- .../latex/contrib/hvfloat/doc/examples/odd1s2c.pdf | Bin 86523 -> 86525 bytes .../latex/contrib/hvfloat/doc/examples/odd2s1c.pdf | Bin 174218 -> 174218 bytes .../latex/contrib/hvfloat/doc/examples/odd2s2c.pdf | Bin 85566 -> 85567 bytes .../contrib/hvfloat/doc/examples/outer1s2c.pdf | Bin 86318 -> 86320 bytes .../contrib/hvfloat/doc/examples/outer2s1c.pdf | Bin 84292 -> 84295 bytes .../contrib/hvfloat/doc/examples/outer2s2c.pdf | Bin 84680 -> 84682 bytes .../hvfloat/doc/examples/paper-after1s1c.pdf | Bin 79267 -> 79176 bytes .../hvfloat/doc/examples/paper-default1s1c.pdf | Bin 79967 -> 79887 bytes .../hvfloat/doc/examples/paper-default1s2c.pdf | Bin 90508 -> 90508 bytes .../hvfloat/doc/examples/paper-default2s1c.pdf | Bin 87935 -> 0 bytes .../hvfloat/doc/examples/paper-default2s1c.tex | 81 - .../hvfloat/doc/examples/paper-default2s2c.pdf | Bin 90332 -> 90333 bytes .../hvfloat/doc/examples/paper-inner2s2c.pdf | Bin 87855 -> 87859 bytes .../hvfloat/doc/examples/paper-right1s1c.pdf | Bin 80290 -> 80205 bytes .../contrib/hvfloat/doc/examples/right1s1c.pdf | Bin 80126 -> 80126 bytes .../contrib/hvfloat/doc/examples/right1s2c.pdf | Bin 89340 -> 89342 bytes .../contrib/hvfloat/doc/examples/right2s1c.pdf | Bin 81033 -> 81033 bytes .../contrib/hvfloat/doc/examples/right2s2c.pdf | Bin 85585 -> 85585 bytes .../contrib/hvfloat/doc/examples/sub-after1s1c.pdf | Bin 143952 -> 143893 bytes .../contrib/hvfloat/doc/examples/sub-after2s2c.pdf | Bin 144771 -> 144709 bytes .../hvfloat/doc/examples/sub-default1s1c.pdf | Bin 144003 -> 144111 bytes .../hvfloat/doc/examples/sub-default1s2c.pdf | Bin 144217 -> 144341 bytes .../hvfloat/doc/examples/sub-default2s2c.pdf | Bin 143517 -> 143647 bytes .../contrib/hvfloat/doc/examples/sub-right1s1c.pdf | Bin 143873 -> 143826 bytes .../contrib/hvfloat/doc/examples/sub-right1s2c.pdf | Bin 144879 -> 144812 bytes .../contrib/hvfloat/doc/examples/sub-right2s2c.pdf | Bin 144315 -> 144268 bytes .../contrib/hvfloat/doc/examples/wide1s2c.pdf | Bin 120949 -> 120954 bytes .../contrib/hvfloat/doc/examples/wide2s2c.pdf | Bin 121917 -> 121929 bytes macros/latex/contrib/hvfloat/doc/hvfloat.pdf | Bin 5722430 -> 7126768 bytes .../hvfloat/doc/images/felsen-wasser-small.pdf | Bin 1362739 -> 0 bytes .../latex/contrib/hvfloat/doc/images/missing.txt | 4 - .../contrib/hvfloat/doc/images/sonne-meer.jpg | Bin 501524 -> 0 bytes macros/latex/contrib/hvfloat/latex/hvfloat-fps.sty | 2 +- macros/latex/contrib/hvfloat/latex/hvfloat.sty | 112 +- .../membranecomputing/membranecomputing.pdf | Bin 267458 -> 275518 bytes .../membranecomputing/membranecomputing.sty | 25 +- .../membranecomputing/membranecomputing.tex | 20 +- macros/latex/contrib/xmpincl/xmpincl.dtx | 18 +- macros/latex/contrib/xmpincl/xmpincl.ins | 4 +- 194 files changed, 52106 insertions(+), 39084 deletions(-) delete mode 100644 macros/latex/contrib/hvfloat/doc/examples/paper-default2s1c.pdf delete mode 100644 macros/latex/contrib/hvfloat/doc/examples/paper-default2s1c.tex delete mode 100644 macros/latex/contrib/hvfloat/doc/images/felsen-wasser-small.pdf delete mode 100644 macros/latex/contrib/hvfloat/doc/images/missing.txt delete mode 100644 macros/latex/contrib/hvfloat/doc/images/sonne-meer.jpg (limited to 'macros/latex') diff --git a/macros/latex/contrib/etoc/README.md b/macros/latex/contrib/etoc/README.md index b6fd46940a..2ac0559259 100644 --- a/macros/latex/contrib/etoc/README.md +++ b/macros/latex/contrib/etoc/README.md @@ -1,6 +1,6 @@ - Source: etoc.dtx (v1.09d) + Source: etoc.dtx (v1.09e) Author: Jean-Francois Burnol Author: Christine Roemer et al. (German tranlation) Info: Completely customisable TOCs @@ -107,8 +107,17 @@ etoc.pdf, etoc-DE.pdf, etoc.dvi, etoc-DE.dvi. RECENT CHANGES ============== +v1.09e \[2021/09/23\] +--------------------- + +Needed (if etoc is used without hyperref) updates to +internal macros to prepare for the upcoming LaTeX November +2021 change to `\contentsline`. + +Related updates to the user macro `\etoctoccontentsline`. + v1.09d \[2021/07/13\] -------------------------- +--------------------- Some minor synching with tableof 1.4c. diff --git a/macros/latex/contrib/etoc/etoc-DE.pdf b/macros/latex/contrib/etoc/etoc-DE.pdf index 6a2b623e0f..a9faaa3b06 100644 Binary files a/macros/latex/contrib/etoc/etoc-DE.pdf and b/macros/latex/contrib/etoc/etoc-DE.pdf differ diff --git a/macros/latex/contrib/etoc/etoc.dtx b/macros/latex/contrib/etoc/etoc.dtx index 9a0fc5716a..ed175a0bab 100644 --- a/macros/latex/contrib/etoc/etoc.dtx +++ b/macros/latex/contrib/etoc/etoc.dtx @@ -2,12 +2,12 @@ % N.B.: this dtx file is NOT for use with \DocInput. The latex source of the % user manual is not prefixed with percent signs. %<*none> -\def\etocdtxtimestamp {Time-stamp: <13-07-2021 at 10:15:28 CEST>}% +\def\etocdtxtimestamp {Time-stamp: <23-09-2021 at 19:28:24 CEST>}% % %<*!readme> %% %% Package: etoc -%% Version: 1.09d +%% Version: 1.09e %% License: LPPL 1.3c %% Copyright (C) 2012-2021 Jean-Francois Burnol %% @@ -16,12 +16,12 @@ %% (translation into German of the documentation) % %<*none> -\def\etocpkgdate {2021/07/13} -\def\etocdocdate {2021/07/13} -\def\etocpkgversion {v1.09d} +\def\etocpkgdate {2021/09/23} +\def\etocdocdate {2021/09/23} +\def\etocpkgversion {v1.09e} \def\etocpkgdescription {Completely customisable TOCs (JFB)} -\def\etocDEpkgdate {13.07.2021}% METTRE À JOUR À CHAQUE BUMP! -\def\etocDEdocdate {13.07.2021} +\def\etocDEpkgdate {23.09.2021}% METTRE À JOUR À CHAQUE BUMP! +\def\etocDEdocdate {23.09.2021} \def\etocDEDEdocdate {09.04.2015}% \def\etocDEDEpkgversion {v1.08d}% % Definition of \etocLicense @@ -32,7 +32,7 @@ \catcode32=13\catcode`\\=12^^Brelax^^A ^^Bfirstofone{^^Bendgroup^^Bdef^^BetocLicense^^A {% Package: etoc -% Version: 1.09d +% Version: 1.09e % License: LPPL 1.3c % Copyright (C) 2012-2021 Jean-Francois Burnol % Copyright (C) 2014-2015 Christine Roemer and collaborators @@ -67,7 +67,7 @@ %<*readme> - Source: etoc.dtx (v1.09d) + Source: etoc.dtx (v1.09e) Author: Jean-Francois Burnol Author: Christine Roemer et al. (German tranlation) Info: Completely customisable TOCs @@ -174,8 +174,17 @@ etoc.pdf, etoc-DE.pdf, etoc.dvi, etoc-DE.dvi. RECENT CHANGES ============== +v1.09e \[2021/09/23\] +--------------------- + +Needed (if etoc is used without hyperref) updates to +internal macros to prepare for the upcoming LaTeX November +2021 change to `\contentsline`. + +Related updates to the user macro `\etoctoccontentsline`. + v1.09d \[2021/07/13\] -------------------------- +--------------------- Some minor synching with tableof 1.4c. @@ -10631,7 +10640,15 @@ Dokumentation erzeugt von der Quelldatei mit dem Stempel \begin{multicols}{2} \begin{jfverbatim} -v1.09d [2021/07/13]^ +v1.09e [2021/09/23]^ + + Needed (if etoc is used without hyperref) updates to + internal macros to prepare for the upcoming LaTeX November + 2021 change to \contentsline. + + Related updates to the user macro \etoctoccontentsline. + +~v1.09d [2021/07/13]^ Some minor synching with tableof 1.4c. @@ -11363,6 +11380,13 @@ v1.09d [2021/07/13]^ % |\Etoc@etoccontentsline|. % % |1.08i| as a |fourorthree| rather than as formerly a |sixorfive|. +% +% \LaTeX\ of November 2021 will have its |\contentsline| always grab four +% arguments. So we must adjust |\Etoc@et@hop| et al., else usage of \etoc +% without hyperref will be broken. Done at |1.09e 2021/09/23|. +% +% Side note to myself: I see there is now a |\@gobblethree| in latex.ltx and +% I wonder since when. No time to lose on checking that. % \begin{macrocode} \AtBeginDocument{% \@ifpackageloaded{parskip}{\Etoc@parskiptrue}{}% @@ -11371,6 +11395,10 @@ v1.09d [2021/07/13]^ \long\def\Etoc@gobblefourorthree#1#2#3#4{}} {\def\Etoc@et@hop#1#2#3#4{#2{#3}{#4}#1}% \long\def\Etoc@gobblefourorthree#1#2#3{}}% +\@ifl@t@r\fmtversion{2021/11/15}{% + \def\Etoc@et@hop#1#2#3#4#5{#2{#3}{#4}{#5}#1}% + \let\Etoc@gobblefourorthree\@gobblefour + }{}% } % \end{macrocode} % |2015/03/08| One has to be careful about the |Etoc@end@| user @@ -11709,7 +11737,15 @@ v1.09d [2021/07/13]^ % opt for global definitions of |\etocname| and the like, thus use % freely |&| and other group closing things. Also, some care has been % put into doing only expandable things after expansion of the -% \meta{prefix} and \meta{contents} parts of a sectioning unit style. +% \meta{prefix} and \meta{contents} parts of a sectioning unit +% style. +% +% |1.09e| prepares for LaTeX November 2021 upcoming release +% whose |\contentsline| will always grab four arguments whether or +% not hyperref is loaded. The |\Etoc@et@hop| definition done at +% begin document must now swap the same number of arguments +% whether or not hyperref is loaded (else \etoc would be broken in +% absence of hyperref). % \begin{macrocode} \Etoc@et@hop{\Etoc@prefix\Etoc@contents}{\Etoc@savedcontentsline{#1}}% } @@ -13465,16 +13501,32 @@ v1.09d [2021/07/13]^ }% } % \end{macrocode} -% placeholder for comments +% \LaTeX\ 2021 fall release lets |\contentsline| always grab four arguments, +% so with |1.09e 2021/09/23| we make sure our |\addtocontents| will always +% provide |\contentsline| with four arguments. This extra |{}| is done +% without checking LaTeX's version by laziness, as an impact on documents +% compiled with former LaTeX could be visible only with very special contexts +% that only the author himself would ever consider. +% +% Let's also add |\protected@file@percent| at |1.09e| although this is a +% priori of no relevance as \etoc reads the toc file with |\endlinechar=-1| +% regime. +% +% When using |\addcontentsline| nothing needs to be done as both things are +% handled by \LaTeX\ upstream. % \begin{macrocode} \def\Etoc@addtocontents #1#2% {\ifEtoc@hyperref \addtocontents {toc}{\protect\contentsline {#1}{#2}% - {\thepage }{\@currentHref }}% + {\thepage }{\@currentHref }% + \ifdefined\protected@file@percent\protected@file@percent\fi + }% \else \addtocontents {toc}{\protect\contentsline - {#1}{#2}{\thepage }}% + {#1}{#2}{\thepage }{}% + \ifdefined\protected@file@percent\protected@file@percent\fi + }% \fi} \def\Etoc@addcontentsline@ #1#2#3% {\@namedef{toclevel@#1}{#3}% @@ -13735,7 +13787,7 @@ v1.09d [2021/07/13]^ Grave accent \` Left brace \{ Vertical bar \| Right brace \} Tilde \~} -\CheckSum{3513}% +\CheckSum{3528}% \csname check@checksum\endcsname \Finale diff --git a/macros/latex/contrib/etoc/etoc.pdf b/macros/latex/contrib/etoc/etoc.pdf index 7ed8db0803..7189d96cea 100644 Binary files a/macros/latex/contrib/etoc/etoc.pdf and b/macros/latex/contrib/etoc/etoc.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/CHANGES b/macros/latex/contrib/glossaries-extra/CHANGES index ea884160d6..ca2536846a 100644 --- a/macros/latex/contrib/glossaries-extra/CHANGES +++ b/macros/latex/contrib/glossaries-extra/CHANGES @@ -1,3 +1,70 @@ +1.46 (2021-09-20): + + * Test bib files added to provide bib2gls support for the + corresponding test files added to glossaries v4.47: + + example-glossaries-childmultipar.bib + example-glossaries-longchild.bib + + * glossaries-extra.sty: + + - Package option record=alsoindex is has been changed to record=hybrid + (alsoindex is now a deprecated synonym). + + This name change is to avoid ambiguity. The "alsoindex" refers to not + only adding records to the aux file (for bib2gls) but also indexing + using the more conventional makeindex/xindy route. This hybrid approach + is provided for the rare instances where an existing xindy + rule or module is too complicated to convert to a bib2gls rule but the + entries need to be fetched from a bib file. There's + no benefit in using this option with makeindex. + + - Altered the warning text if \printglossary (or + \printglossaries) is omitted with record=hybrid (since the + default text with \makeglossaries provided by glossaries.sty + assumes no bib2gls). + + - Bug fix #175: https://www.dickimaw-books.com/bugtracker.php?key=175 + (Spurious space with hyperoutside being false in math mode) + + This is actually a bug in \@glsxtrsetaliasnoindex which + introduced unwanted scoping in v1.21 when \ifglshasfield (which + doesn't add grouping) was replaced with the unstarred version of + \glsxtrifhasfield (which does). This was causing + \glsxtrsetaliasnoindex to be scoped so it no longer had any + effect but it also introduced {} which only makes a noticeable + visual difference under very specific circumstances, such as + the one in the bug report. + + - replaced some instances of \edef with \protected@edef when + defining control sequences that store labels or lists of + labels. Similarly for \xdef and \eappto. (Aiming towards support + for UTF-8 characters in labels with PDFLaTeX, but may not be fully + implemented so not yet documented.) + + Note that letter group formations using TeX + (\printnoidxglossary or \printunsrtglossary without bib2gls) still + don't work if the sort value starts with a UTF-8 character with + PDFLaTeX. (This is also a limitation of makeindex regardless of + the TeX engine.) + + * glossaries-extra-stylemods.sty: + + - Bug fix #181: https://www.dickimaw-books.com/bugtracker.php?key=181 + (stylemods alttree introduces a space at the start of descriptions) + + New commands have now been added to replace the use of + \glstreepredesc and \glstreechildpredesc (which were causing + the problem): \glsalttreepredesc and \glsalttreechildpredesc + + * glossary-topic.sty: + + - Bug fix #176: https://www.dickimaw-books.com/bugtracker.php?key=176 + (Last displayed topic subitem has invalid indentation) + + - Bug fix #182: https://www.dickimaw-books.com/bugtracker.php?key=182 + (topic style doesn't retain hangindent for multi-paragraph descriptions) + 1.45 (2020-04-01): * glossaries-extra-stylemods.sty: diff --git a/macros/latex/contrib/glossaries-extra/README b/macros/latex/contrib/glossaries-extra/README index 8c1893e335..f61f7ca805 100644 --- a/macros/latex/contrib/glossaries-extra/README +++ b/macros/latex/contrib/glossaries-extra/README @@ -1,4 +1,4 @@ -LaTeX Package : glossaries-extra v1.45 (2020-04-01) +LaTeX Package : glossaries-extra v1.46 (2021-09-20) Author : Nicola Talbot https://www.dickimaw-books.com/contact @@ -9,7 +9,7 @@ This material is subject to the LaTeX Project Public License. See http://www.ctan.org/license/lppl1.3 for the details of that license. -Copyright 2015-2020 Nicola Talbot +Copyright 2015-2021 Nicola Talbot DESCRIPTION diff --git a/macros/latex/contrib/glossaries-extra/glossaries-extra-code.pdf b/macros/latex/contrib/glossaries-extra/glossaries-extra-code.pdf index a7bac16a1d..350f8ec1b9 100644 Binary files a/macros/latex/contrib/glossaries-extra/glossaries-extra-code.pdf and b/macros/latex/contrib/glossaries-extra/glossaries-extra-code.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/glossaries-extra-manual.html b/macros/latex/contrib/glossaries-extra/glossaries-extra-manual.html index a01186aa3d..8f52130edf 100644 --- a/macros/latex/contrib/glossaries-extra/glossaries-extra-manual.html +++ b/macros/latex/contrib/glossaries-extra/glossaries-extra-manual.html @@ -6,8 +6,8 @@ > - - + + @@ -34,6 +34,10 @@ .cmtt-10{font-family: monospace,monospace;} .cmtt-10{font-family: monospace,monospace;} .cmtt-10{font-family: monospace,monospace;} +.cmssbx-10{ font-family: sans-serif; font-weight: bold;} +.cmssbx-10{ font-family: sans-serif; font-weight: bold;} +.cmssbx-10{ font-family: sans-serif; font-weight: bold;} +.cmssbx-10{ font-family: sans-serif; font-weight: bold;} .cmr-9{font-size:90%;} .cmss-8{font-size:80%; font-family: sans-serif;} .cmss-8{ font-family: sans-serif;} @@ -45,10 +49,6 @@ .cmtt-9{font-family: monospace,monospace;} .cmtt-9{font-family: monospace,monospace;} .cmti-10{ font-style: italic;} -.cmssbx-10{ font-family: sans-serif; font-weight: bold;} -.cmssbx-10{ font-family: sans-serif; font-weight: bold;} -.cmssbx-10{ font-family: sans-serif; font-weight: bold;} -.cmssbx-10{ font-family: sans-serif; font-weight: bold;} .cmitt-10{font-family: monospace,monospace; font-style: italic;} .cmmi-9{font-size:90%;font-style: italic;} .cmssi-10{ font-family: sans-serif; font-style: oblique;} @@ -66,15 +66,19 @@ p.indent{text-indent:0;} p + p{margin-top:1em;} p + div, p + pre {margin-top:1em;} div + p, pre + p {margin-top:1em;} +a { overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; hyphens: auto; } @media print {div.crosslinks {visibility:hidden;}} a img { border-top: 0; border-left: 0; border-right: 0; } center { margin-top:1em; margin-bottom:1em; } td center { margin-top:0em; margin-bottom:0em; } .Canvas { position:relative; } img.math{vertical-align:middle;} +div.par-math-display, div.math-display{text-align:center;} li p.indent { text-indent: 0em } li p:first-child{ margin-top:0em; } +li p:first-child{ margin-bottom; } li p:last-child, li div:last-child { margin-bottom:0.5em; } +li p:first-child{ margin-bottom:0; } li p~ul:last-child, li p~ol:last-child{ margin-bottom:0.5em; } .enumerate1 {list-style-type:decimal;} .enumerate2 {list-style-type:lower-alpha;} @@ -88,7 +92,7 @@ div.obeylines-v p { margin-top:0; margin-bottom:0; } td.displaylines {text-align:center; white-space:nowrap;} .centerline {text-align:center;} .rightline {text-align:right;} -div.verbatim {font-family: monospace,monospace; white-space: nowrap; text-align:left; clear:both; } +pre.verbatim {font-family: monospace,monospace; text-align:left; clear:both; } .fbox {padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } div.fbox {display:table} div.center div.fbox {text-align:center; clear:both; padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } @@ -159,19 +163,18 @@ p.bibitem { text-indent: -2em; margin-left: 2em; margin-top:0.6em; margin-bottom p.bibitem-p { text-indent: 0em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; } .paragraphHead, .likeparagraphHead { margin-top:2em; font-weight: bold;} .subparagraphHead, .likesubparagraphHead { font-weight: bold;} -.quote {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; margin-right:1em; text-align:justify;} .verse{white-space:nowrap; margin-left:2em} div.maketitle {text-align:center;} h2.titleHead{text-align:center;} div.maketitle{ margin-bottom: 2em; } div.author, div.date {text-align:center;} div.thanks{text-align:left; margin-left:10%; font-size:85%; font-style:italic; } -.quotation {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; } h1.partHead{text-align: center} -.abstract p {margin-left:5%; margin-right:5%;} +div.abstract p {margin-left:5%; margin-right:5%;} div.abstract {width:100%;} +.abstracttitle{text-align:center;margin-bottom:1em;} .alltt P { margin-bottom : 0em; margin-top : 0em; } -.alltt { margin-bottom : 1em; margin-top : 1em; } +.alltt { margin-bottom : 1em; margin-top : 1em; font-family:monospace,monospace; } .equation td{text-align:center; } .equation-star td{text-align:center; } table.equation-star { width:100%; } @@ -219,12 +222,12 @@ a span.HoLogo-TeX span.HoLogo-e{text-decoration:none;} >

glossaries-extra.sty v1.45: an extension to the +class="cmr-17">glossaries-extra.sty v1.46: an extension to the glossaries package

http://www.dickimaw-books.com/

2020-04-01

+class="cmr-12">2021-09-20

@@ -252,11 +255,10 @@ class="abstract"

-
-

-

Abstract

+

+Abstract +

The glossaries-extra package is an extension to the glossaries package, providing @@ -278,12 +280,20 @@ class="cmtt-10">.bib files for use with id="dx1-2">bib2gls. +

The glossaries-extra package uses a different set of defaults to the base +glossaries package. See the Introduction for more details. +

-

Since

Since glossaries-extra internally loads the glossaries package, you also need to have How do I update my TeX distribution? or Updating TeX on Linux.)
-

-

Additional resources:

+

+

Additional resources:

+class="cmss-10">glossaries
package.

@@ -479,15 +495,15 @@ href="#glossary">Glossary -

1.

1. Introduction

-

The

The glossaries package is a flexible package, but it’s also a heavy-weight package that uses a lot of resources. As package developer, I’m caught between those users who complain about the drawbacks of a heavy-weight package with a large user manual and those users who want more features (which necessarily adds to the package weight and manual size). -

The

The glossaries-extra package is an attempt to provide a compromise for this conflict. Version 4.22 of the glossaries package is the last version to incorporate new @@ -503,10 +519,10 @@ of package loading time and allocation of resources, but those users who do want extra features available will have more of a chance of getting their feature requests accepted.

-

Top

1.1 Package Defaults

-

I’m not happy with some of the default settings assumed by the

I’m not happy with some of the default settings assumed by the glossaries package, and, judging from code I’ve seen, other users also seem unhappy with them, as certain package options are often used in questions posted on various sites. I can’t @@ -516,9 +532,10 @@ but since glossaries-extra is a separate package, I have decided to implement some of these commonly-used options by default. You can switch them back if they’re not appropriate. -

The new defaults are:

+

The new defaults are:

- - - -

The examples below illustrate the difference in explicit package options between +

The examples below illustrate the difference in explicit package options between glossaries and glossaries-extra. There may be other differences resulting from modifications to commands provided by glossaries (see §2 Modifications to Existing -Commands and Styles). -

+class="tcrm-1000">§??sec:modifications +Modifications to Existing Commands and Styles). +

    -
  1. +
  2. +

    Basic defaults: -

    +

    +
          \documentclass{article}
    -      
    \usepackage{glossaries-extra} -
    -

    This is like: + \usepackage{glossaries-extra} + +

    This is like:

    -
    +
          \documentclass{article}
    -      
    \usepackage[toc,nopostdot]{glossaries} -  
    \usepackage{glossaries-extra} -
    -

    + \usepackage[toc,nopostdot]{glossaries} + \usepackage{glossaries-extra} + +

  3. -
  4. +
  5. +

    Language defaults: -

    +

    +
          \documentclass[british]{article}
    -      
    \usepackage{babel} -  
    \usepackage{glossaries-extra} -
    -

    This is like: + \usepackage{babel} + \usepackage{glossaries-extra} + +

    This is like:

    -
    +
          \documentclass[british]{article}
    -      
    \usepackage{babel} -  
    \usepackage[toc,nopostdot,translate=babel]{glossaries} -  
    \usepackage{glossaries-extra} -
    -

    + \usepackage{babel} + \usepackage[toc,nopostdot,translate=babel]{glossaries} + \usepackage{glossaries-extra} + +

  6. -
  7. +
  8. +

    Combined with memoir -

    +

    +
          \documentclass{memoir}
    -      
    \usepackage{glossaries-extra} -
    -

    This is like: + \usepackage{glossaries-extra} + +

    This is like:

    -
    +
          \documentclass{memoir}
    -      
    \usepackage[toc,nopostdot,noredefwarn]{glossaries} -  
    \usepackage{glossaries-extra} -
    -

    +

    However

    -
    +
          \documentclass{memoir}
    -      
    \usepackage{glossaries} -  
    \usepackage{glossaries-extra} -
    -

    This is like: + \usepackage{glossaries} + \usepackage{glossaries-extra} + +

    This is like:

    -
    +
          \documentclass{memoir}
    -      
    \usepackage[toc,nopostdot]{glossaries} -  
    \usepackage{glossaries-extra} -
    -

    Since by the time +

    Since by the time glossaries-extra has been loaded, glossaries has already redefined memoir’s glossary-related commands.

-

Another noticeable change is that by default ’s glossary-related commands. +

+
  • +

    Abbreviations are defined with \newabbreviation: + + + +

    +
    +     \usepackage{glossaries-extra}
    +     \newabbreviation{svm}{SVM}{support vector machine}
    +     \begin{document}
    +     First use: \gls{svm}. Explicit full form: \glsxtrfull{svm}.
    +     \end{document}
    +
    +

    This is the closest to: + + + +

    +
    +     \usepackage{glossaries}
    +     \newacronym{svm}{SVM}{support vector machine}
    +     \begin{document}
    +     First use: \gls{svm}. Explicit full form: \acrfull{svm}.
    +     \end{document}
    +
    +

    If you want to continue using \newacronym then you will need to change the + style for the acronym category: + + + +

    +
    +     \usepackage{glossaries-extra}
    +     \setabbreviationstyle[acronym]{long-short}
    +     \newacronym{svm}{SVM}{support vector machine}
    +     \begin{document}
    +     First use: \gls{svm}. Explicit full form: \glsxtrfull{svm}.
    +     \end{document}
    +
    +

  • +

    Another noticeable change is that by default \printglossary will now display information text in the document if the external glossary file doesn’t exist. This is explanatory text to help new users who can’t work out what to do next to complete the document build. Once the document is set up correctly and the external files have been generated, this text will disappear. -

    This change is mostly likely to be noticed by users with one or more +

    This change is mostly likely to be noticed by users with one or more redundant empty glossaries who ignore transcript messages, explicitly use makeindex/xindy on just the non-empty glossary (or glossaries) and use the iterative \printglossaries command instead of command instead of \printglossary. For example, consider the + id="dx1-3032">. For example, consider the following:

    -
    +
     \documentclass{article}
    - 
    \usepackage[acronym]{glossaries} - 
    \makeglossaries - 
    \newacronym{laser}{laser}{light amplification by stimulated - 
    emission of radiation} - 
    \begin{document} - 
    \gls{laser} - 
    \printglossaries - 
    \end{document} -
    -

    The above document will only display the list of acronyms at the place where +\usepackage[acronym]{glossaries} +\makeglossaries +\newacronym{laser}{laser}{light amplification by stimulated +emission of radiation} +\begin{document} +\gls{laser} +\printglossaries +\end{document} + +

    The above document will only display the list of acronyms at the place where \printglossaries occurs. However it will also attempt to input the occurs. However it will also attempt to input the .gls file associated with the main glossary. -

    If you use

    If you use makeglossaries, you’ll get the warning message:

    -
    +
     Warning: File 'test.glo' is empty.
    - 
    Have you used any entries defined in glossary 'main'? - 
    Remember to use package option 'nomain' if you - 
    don't want to use the main glossary. -
    -

    (where the original file is called +

    (where the original file is called test.tex) but if you simply call makeindex directly to generate the -

    +
     No file test.gls.
    -
    -

    This doesn’t occur with +

    This doesn’t occur with makeglossaries as it will create the .gls file containing the single command \null. -

    If you simply change from

    If you simply change from glossaries to glossaries-extra in this document, you’ll find a change in the resulting PDF if you don’t use makeglossaries and you only generate the .acr file with makeindex. -

    The transcript file will still contain the message about the missing

    The transcript file will still contain the message about the missing .gls, but now you’ll also see information in the actual PDF document. The simplest remedy is to follow the advice inserted into the document at that point, which is to add the nomain package option: + id="dx1-3039"> package option:

    -
    +
     \documentclass{article}
    - 
    \usepackage[nomain,acronym,postdot]{glossaries-extra} - 
    \makeglossaries - 
    \setabbreviationstyle[acronym]{long-short} - 
    \newacronym{laser}{laser}{light amplification by stimulated - 
    emission of radiation} - 
    \begin{document} - 
    \gls{laser} - 
    \printglossaries - 
    \end{document} -
    -

    (Note the need to set the acronym style using \setabbreviationstyle before - +

    (Note the need to set the acronym style using \setabbreviationstyle +before \newacronym. See §4 Abbreviations for further details.) -

    +class="tcrm-1000">§??sec:abbreviations Abbreviations for further +details.) +

    -

    Top

    1.2 New or Modified Package Options

    -

    If you haven’t already loaded

    If you haven’t already loaded glossaries, you can use any of the package options provided by glossaries when you load \setupglossariesglossaries package options may be used in that command. -

    This section only lists options that are either unrecognised by the

    This section only lists options that are either unrecognised by the glossaries package or are a modified version of options of the same name provided by glossaries. See the glossaries user manual for details about the unmodified options.
    -

    -

    The new and modified options provided by

    +

    The new and modified options provided by glossaries-extra are described below:

    +

    debug

    The

    +

    The glossaries package has a debug option that allows the values false, @@ -865,7 +956,7 @@ class="cmss-10">glossaries v4.32, so if you want to use this option with class="cmss-10">glossaries-extra you must make sure that your version of glossaries supports it. -

    The

    The glossaries-extra package extends this option to provide the additional values debug=all. -

    The

    The debug=showwrglossdebug=true and uses -



    \glsxtrwrglossmark

    -

    +

    to show a mark just before the write operation performed by the indexing commands. If you use record=alsoindex=hybrid there will be a mark for the write operation to the .aux file for makeindex or id="dx1-4012">xindy. -

    The

    The debug=alldebug=showwrgloss.

    +

    postdot

    (New to version 1.12.) This option is just a shortcut for

    +

    (New to version 1.12.) This option is just a shortcut for nopostdot=false. -

    +

    +

    postpunc

    (New to version 1.21.) This option sets the post-description punctuation to - the given value. For example:

    +

    (New to version 1.21.) This option sets the post-description punctuation to the + given value. For example: postpunc=; does -

    +

    +
          \renewcommand{\glspostdescription}{;}
    -
    -

    The value may also be one of the following keywords: + +

    The value may also be one of the following keywords:

    +

    comma:

    :

    +

    postpunc=comma=comma +

    +
              \renewcommand{\glspostdescription}{,}
    -
    -

    + +

    +

    dot:

    :

    +

    postpunc=dot=dot +

    +
              \renewcommand{\glspostdescription}{.\spacefactor\sfcode`\. }
    -
    -

    + +

    +

    none:

    :

    +

    postpunc=none=none +

    +
              \renewcommand{\glspostdescription}{}
    -

    -

    -

    The default definition is + +

    +

    The default definition is

    -
    +
          \newcommand*{\glspostdescription}{%
    -      
      \ifglsnopostdot\else.\spacefactor\sfcode`\. \fi -  
    } -
    -

    where the conditional is determined by the +

    where the conditional is determined by the nopostdot package option. @@ -1024,7 +1129,7 @@ class="cmss-10">postdot will restore the original definition of \glspostdescription. -

    The

    The glossaries-extra-stylemods package adjusts the predefined styles that had a hard-coded \hfil:

    -
    +
          \usepackage[postpunc=comma,stylemods]{glossaries-extra}
    -      
    \renewcommand{\glsxtrprelocation}{\hfil} -
    -

    Be careful with doing this as it will look odd if the +

    Be careful with doing this as it will look odd if the number list is missing. (With loc-prefix which will only apply if the entry has a number list.)

    +

    prefix

    Load the

    +

    Load the glossaries-prefix package (if not already loaded). -

    +

    +

    accsupp

    Load the

    +

    Load the glossaries-accsupp package (if not already loaded). -

    The

    The glossaries-accsupp package is still experimental and so accessibility features are liable to change.
    -

    -

    If you want to define styles that can interface with the accessibility support +

    +

    If you want to define styles that can interface with the accessibility support provided by glossaries-accsupp use the \glsaccesstext just does \glsentrytext) but if it has been loaded, then the \glsaccessxxx⟩ commands will add the - accessibility information. (See xxx⟩ commands will add the accessibility + information. (See §12.2 §??sec:accsupp Accessibility Support for further details.) -

    Note that the

    Note that the accsupp option can only be used as a package option (and can’t @@ -1122,23 +1232,29 @@ class="cmss-10">glossaries-accsuppglossaries-extra if it’s required.

    +

    stylemods

    This is a ⟨

    + + + +

    This is a ⟨key⟩=⟨value⟩ option used to load the glossaries-extra-stylemods - package. The value may be a comma-separated list of options to pass to that - package. (Remember to group ⟨value⟩ if it contains any commas.) The value may - be omitted if no options need to be passed. See package. + The value may be a comma-separated list of options to pass to that package. + (Remember to group ⟨value⟩ if it contains any commas.) The value may be + omitted if no options need to be passed. See §2.10.1 Glossary Style - Modifications for further details. There are two special keyword values: +class="tcrm-1000">§??sec:glosstylemods Glossary + Style Modifications for further details. There are two special keyword values: stylemodsstylemods=all, which loads all the predefined styles. -

    +

    +

    undefaction

    This is a ⟨

    +

    This is a ⟨key⟩=⟨value⟩ option, which has two allowed values: warn and - - - - error. This indicates what to do if an undefined glossary entry is referenced. The - default behaviour is warn and error. This + indicates what to do if an undefined glossary entry is referenced. The default + behaviour is undefaction=error, which produces an error message (the - default for glossaries). You can switch this to a warning message (and ?? - appearing in the text) with , which produces an error message (the default + for glossaries). You can switch this to a warning message (and ?? appearing in + the text) with undefaction=warn. -

    Undefined entries can’t be picked up by any commands that iterate +

    Undefined entries can’t be picked up by any commands that iterate over a glossary list. This includes \forglsentries and \glsaddall.
    -

    -

    Note that

    +

    Note that \ifglsused will display ?? in the document text with - will display ?? in the document text with undefaction=warn if the entry hasn’t been defined, as the underlying boolean - variable doesn’t exist and so is neither true nor false. (There will also - be a warning in the transcript.) See + if the entry hasn’t been defined, as the underlying boolean variable + doesn’t exist and so is neither true nor false. (There will also be a + warning in the transcript.) See §2.6 §??sec:glsunset First Use Flag for further details.

    +

    indexcrossrefs

    This is a boolean option. If

    +

    This is a boolean option. If true, this will automatically index any cross-referenced entries that haven’t been marked as used at the end of the document. Note that this necessarily adds to the overall document build time, @@ -1228,7 +1346,7 @@ class="cmss-10">indexcrossrefs to false. -

    Note that

    Note that bib2gls can automatically find dependent entries when it @@ -1243,23 +1361,28 @@ class="cmss-10">indexcrossrefs=false.

    + + + +

    autoseeindex

    (New to v1.16.) This is a boolean option. If true (default), this makes - the

    +

    (New to v1.16.) This is a boolean option. If true (default), this makes the see and + and seealso keys automatically index the cross-reference when an entry - is defined. If false, the value of those keys will still be stored in their + id="dx1-4068"> keys automatically index the cross-reference when an entry is + defined. If false, the value of those keys will still be stored in their corresponding fields (and can be accessed using commands like \glsxtrusesee and \glsxtruseseealso) but cross-reference won’t be automatically indexed. -

    Note that the

    Note that the record=onlyautoseeindex=false. -

    For example, if an entry is defined as +

    For example, if an entry is defined as

    -
    +
          \newglossaryentry{foo}{name={foo},description={},see={bar,baz}}
    -
    -

    then with +

    then with autoseeindex=true, this is equivalent to

    -
    +
          \newglossaryentry{foo}{name={foo},description={}}
    -      
    \glssee{foo}{bar,baz} -  
    \glossariesextrasetup{indexcrossrefs=true} -  
    \GlsXtrSetField{foo}{see}{bar,baz} -
    -

    but with +

    but with autoseeindex=false, this is equivalent to

    -
    +
          \newglossaryentry{foo}{name={foo},description={}}
    -      
    \GlsXtrSetField{foo}{see}{bar,baz} -
    -

    Note that +

    Note that indexcrossrefs isn’t automatically implemented by the presence of the @@ -1308,9 +1431,9 @@ class="cmss-10">seeautoseeindex is false. -

    It’s therefore possible to remove the cross-references from the location lists and +

    It’s therefore possible to remove the cross-references from the location lists and set their position within the glossary style. -

    Another method of preventing the automatic indexing is to define the entries +

    Another method of preventing the automatic indexing is to define the entries before the external indexing files have been opened with \makeglossaries. Since the appropriate file isn’t open, the information can’t be written to it. @@ -1319,33 +1442,50 @@ class="cmss-10">seenoindex=ignore (provided by glossaries) to prevent an error occurring.

    +

    record

    (New to v1.08.) This is a ⟨

    +

    (New to v1.08.) This is a ⟨key⟩=⟨value⟩ option provided for the benefit of - value⟩ option provided for the benefit of bib2gls (see bib2gls + (see §9 §??sec:bib2gls bib2gls: Managing Reference Databases). -

    The option may only be set in the preamble and can’t be used after +class="cmtt-10">bib2gls: Managing Reference Databases). If you want to + use bib2gls, the recommended setting is record=nameref if you have hyperlinks + and record=only if you don’t have hyperlinks. +

    The option may only be set in the preamble and can’t be used after \GlsXtrLoadResources. If the value is missing record=only is assumed. + id="dx1-4079"> is assumed. Permitted values:

    +

    off

    This is the default setting. The indexing is performed as normal using +class="cmssbx-10">off

    +

    This is the default setting. The indexing is performed as normal using either \makeglossaries or \makenoidxglossaries. This setting @@ -1353,94 +1493,118 @@ class="cmtt-10">\makenoidxglossaries. This setting href="#styopt.undefaction">undefaction=error. -

    + id="dx1-4080">. +

    +

    only

    The indexing is performed by bib2gls (see only

    +

    The indexing (recording) is performed by bib2gls (see §9 §??sec:bib2gls + bib2gls: - Managing Reference Databases). Neither \makeglossaries nor - \makenoidxglossaries is permitted. This setting implements - bib2gls: Managing Reference Databases). + Neither \makeglossaries nor \makenoidxglossaries is permitted. + This setting implements undefaction=warn and automatically loads the supplementary - and automatically loads + the supplementary glossaries-extra-bib2gls package. (There should be no need to explicitly - load package. (There should be + no need to explicitly load glossaries-extra-bib2gls.) -

    The glossaries should be displayed using .) + + + +

    The glossaries should be displayed using \printunsrtglossary (or \printunsrtglossaries). -

    The document build process is (assuming the file is called

    The document build process is (assuming the file is called myDoc.tex):

    -
    +
              pdflatex myDoc
    -          
    bib2gls myDoc -  
    pdflatex myDoc -
    -

    -

    Note that +

    If you want letter groups you will need the --group or -g switch when + invoking bib2gls: + + + +

    +
    +         pdflatex myDoc
    +         bib2gls -g myDoc
    +         pdflatex myDoc
    +
    +

    +

    Note that record=only will prevent the will prevent the see from automatically + id="dx1-4087"> from automatically implementing \glssee. (bib2gls deals with the see field.) You + id="dx1-4089"> field.) You may explicitly use \glssee in the document, but bib2gls will ignore the cross-reference if the see field was already set for that + id="dx1-4091"> field was already set for that entry. -

    The

    The record=only option will automatically set the option will automatically set the glossaries package’s sort=none option if available. (That option value was only introduced to + id="dx1-4093"> option if available. (That option value was only introduced to glossaries v4.30.)

    +

    nameref

    (New to v1.37 and requires nameref

    +

    (New to v1.37 and requires bib2gls v1.8+.) This option is like record=only but additionally records the current label information given by + id="dx1-4095"> but additionally records the current label information given by \@currentlabel and \@currentHref, and provides a more reliable way of @@ -1449,7 +1613,7 @@ class="cmtt-10">\theH⟨counter⟩ for the given location. This option requires hyperref otherwise it will fall back on the usual location records. + id="dx1-4096"> otherwise it will fall back on the usual location records. Remember that \@currentHref is always globally updated whenever \@currentlabel isn’t. This can cause some indexcounter option increments the associated counter every time an entry + id="dx1-4097"> option increments the associated counter every time an entry is indexed, which affects this option. See §9.3.2 Nameref Record for further - details. -

    This option is best used with §??sec:recordnameref Nameref + Record for further details. +

    This option is best used with counter=chapter or or counter=section if you + id="dx1-4099"> if you want the title included in the location list. If the indexing counter is the default page, only the location number is shown. Similarly for + id="dx1-4100">, only the location number is shown. Similarly for counter=equation (or (or equations=true). + id="dx1-4102">). +

    +

    + alsoindex

    +

    Deprecated synonym of hybrid.

    +

    alsoindex

    This is a hybrid setting that uses bib2gls to fetch entry information - from hybrid

    +

    This is a hybrid setting that uses bib2gls to fetch entry information from + + + + .bib files, but uses makeindex or xindy to create the glossary files (which + are input with \printglossary). Note that this requires a slower and + more complicated build process (see below). +

    This hybrid approach is provided for the rare instances where an existing + xindy to create the glossary - files. This option should be used with \makeglossaries but not - with its optional argument. This option should not be used with +class="cmtt-10">xindy rule or module is too complicated to convert to a bib2gls rule but + the entries need to be fetched from a bib file. There’s no benefit in using + this option with makeindex. +

    Since it’s redundant to make bib2gls also sort, use sort=none in \makenoidxglossaries. You may need to change the transcript file used - by bib2gls to avoid a clash with the transcript file used by makeindex - or xindy. (This can be done with \GlsXtrLoadResources for a faster build.
    +

    +

    This option must be used with \makeglossaries but not with its optional + argument. This option should not be used with \makenoidxglossaries. + You may need to change the transcript file used by bib2gls to avoid a + clash with the transcript file used by makeindex or xindy. (This can be + done with bib2gls’s --log-file or -t - option.) -

    The glossaries should be displayed using -t option.) +

    Each glossary should be displayed using \printglossary (or \printglossaries). This option is expected to be used with bib2gls’s - \printglossaries for all of them). This option is expected to be used + with bib2gls’s sort=none setting and so glossaries-extra-bib2gls is not automatically - - - - loaded. -

    The document build process is (assuming the file is called is not + automatically loaded. +

    The document build process is (assuming the file is called myDoc.tex):

    -
    +
              pdflatex myDoc
    -          
    bib2gls myDoc -  
    pdflatex myDoc -  
    makeglossaries myDoc -  
    pdflatex myDoc -
    -

    -

    With the recording on ( +

    Note that, in this case, it’s redundant to call bib2gls with the --group + or -g switch as makeindex/xindy will insert the group heading + information into the corresponding glossary file. (If you want + bib2gls to form the letter groups then this hybrid method is + inappropriate.)

    +

    With the recording on (record=only or , record=alsoindex), any of the commands - that would typically index the entry (such as =nameref or record=hybrid), any of + the commands that would typically index the entry (such as \gls, \glstext or \glsadd) - will add a \glstext or + \glsadd) will add a \glsxtr@record entry to the .aux file. bib2gls can then - read these lines to find out which entries have been used. (Remember - that commands like \glsentryname don’t index, so any use of these - commands won’t add a corresponding \glsxtr@record entry to the - .aux file.) See bib2gls can then + read these lines to find out which entries have been used. (Remember that + commands like \glsentryname don’t index, so any use of these commands + won’t add a corresponding \glsxtr@record entry to the .aux file.) See + §9 §??sec:bib2gls bib2gls: Managing Reference Databases for further details. +

    The hybrid method additionally performs the standard indexing action that’s + required for makeindex or xindy to work.

    +

    equations

    (New to v1.37.) This option will cause the default location counter to + id="dx1-4129">

    +

    (New to v1.37.) This option will cause the default location counter to automatically switch to equation when inside a numbered equation + id="dx1-4130"> when inside a numbered equation environment, such as equation or or align. The counter can be explicitly overridden + id="dx1-4133">. The counter can be explicitly overridden with counter in the optional arguments of commands like in the optional arguments of commands like \glslink or \gls as usual. -

    +

    +

    floats

    (New to v1.37.) This option will cause the default location counter to + id="dx1-4136">

    +

    (New to v1.37.) This option will cause the default location counter to automatically switch to the corresponding counter when inside a floating environment, such as figure or or table. The counter can be explicitly overridden + id="dx1-4139">. The counter can be explicitly overridden with counter in the optional arguments of commands like in the optional arguments of commands like \glslink or \gls as usual. Remember that within floats it’s the \caption command that - actually uses \refstepcounter, so indexing before the caption will - result in the wrong reference. The commands for use in captions and - sections, such as \caption command that actually + uses \refstepcounter, so indexing before the caption will result in the wrong + + + + reference. The commands for use in captions and sections, such as + \glsfmttext and \glsfmtshort, don’t index. (See §5 +class="tcrm-1000">§??sec:headtitle Entries in Sectioning Titles, Headers, Captions and Contents). You may want to consider using \glsadd after the caption (not before). For -

    +

    +
          \begin{figure}[htbp]
    -      
      \centering -  
      \includegraphics{example-image} -  
      \caption{Sample \glsfmttext{foobar} figure} -  
      \glsadd{foobar} -  
    \end{figure} -
    -

    +   \centering +   \includegraphics{example-image} +   \caption{Sample \glsfmttext{foobar} figure} +   \glsadd{foobar} + \end{figure} + +

    +

    indexcounter

    (New to v1.29.) This option (which doesn’t take a value) is primarily + id="dx1-4142">

    +

    (New to v1.29.) This option (which doesn’t take a value) is primarily intended for use with bib2gls (v1.4+) and hyperref. It can be used + id="dx1-4144">. It can be used with makeindex or xindy but it will interfere with the number list collation, so you won’t have ranges and you’ll have duplicate page numbers present (but each page number will link to the relevant part of the page @@ -1674,53 +1912,53 @@ href="#glo:numberlist">number list href="#styopt.counter">counter=wrglossary. -

    This option works by incrementing . +

    This option works by incrementing wrglossary and adding and adding \label. This can + id="dx1-4150">. This can cause a problem if the indexing occurs in an equation environment as environment as amsmath + id="dx1-4153"> forbids multiple occurrences of \label (resulting in the “Multiple \label’s” error). It’s best to change the counter to page or or equation when in maths mode + id="dx1-4155"> when in maths mode with this option. For example:

    -
    +
          \renewcommand{\glslinkpresetkeys}{%
    -      
     \ifmmode \setkeys{glslink}{counter=equation}\fi} -  
    \renewcommand{\glsaddpresetkeys}{% -  
     \ifmmode \setkeys{glossadd}{counter=equation}\fi} -
    -

    -

    -

    By default (with +

    +

    +

    By default (with hyperref), the page numbers in ), the page numbers in number lists link back to the top of the relevant page (provided the format uses \glshypernumber). The indexcounter option is designed to link back to the place within the page where + id="dx1-4158"> option is designed to link back to the place within the page where the indexing occurred. It does this by creating a new counter (called wrglossary) + id="dx1-4159">) that’s incremented with \refstepcounter every time an entry is indexed (but not via cross-referencing commands, such as \label is placed class="cmtt-10">\pageref. The location, as seen by the indexing application, is the value of the wrglossary counter but this value is substituted with the page + id="dx1-4160"> counter but this value is substituted with the page reference when number list is typeset. Since the counter is used by all + id="dx1-4161">number list is typeset. Since the counter is used by all entries and is incremented every time any indexing occurs, neither makeindex nor xindy can correctly collate the lists. For example, if the first term to be referenced is indexed three times on page 5 without any intervening terms then the actual locations obtained from wrglossary + id="dx1-4164"> will be 1, 2 and 3, which xindy and makeindex will try to form into the range 1–3, but they should actually all simply appear as page 5, whereas it can actually end up with 5–5. Conversely, a range may not be formed where it would naturally occur if just the page counter was + id="dx1-4167"> counter was used. -

    Since

    Since bib2gls is designed specifically to work with glossaries-extra, bib2gls (v1.4+) will check for wrglossary locations. If the default + id="dx1-4170"> locations. If the default --merge-wrglossary-records is on, then any records for the same page for a given entry will be merged. In the above example with three references on page 5, only a single record for page 5 for that entry will be added to the number list and it will link back to the first instance on + id="dx1-4171">number list and it will link back to the first instance on that page. Whereas if you use the --no-merge-wrglossary-records switch, the number list will contain three instance of page 5, with + id="dx1-4172">number list will contain three instance of page 5, with each linking to the corresponding place on that page. In both cases, consecutive pages can form ranges, but it may look strange in the second case. -

    See the

    See the bib2gls documentation for the save-index-counter resource option for more details. @@ -1789,38 +2027,42 @@ class="cmtt-10">save-index-counter resource option

    +

    docdef

    This option governs the use of \newglossaryentry. It was originally a - boolean option, but as from version 1.06, it can now take one of the following - values (if the value is omitted, true is assumed): + id="dx1-4174">

    +

    This option governs the use of \newglossaryentry. It was originally a boolean + option, but as from version 1.06, it can now take one of the following values (if + the value is omitted, true is assumed):

      -
    • +

      \newglossaryentry is not permitted in the is not permitted in the document environment + id="dx1-4177"> environment (default). -

    • -
    • +
    • +

      \newglossaryentry behaves as it does in the base glossaries package. That is, where its use is permitted in the document environment, it + id="dx1-4180"> environment, it uses the .glsdefs temporary file to store the entry definitions so that on the next LaTeX run the entries are defined at the beginning of the document environment. This allows the entry information + id="dx1-4182"> environment. This allows the entry information to be referenced in the glossary, even if the glossary occurs before \newglossaryentry. (For example, when the glossary is displayed @@ -1828,31 +2070,32 @@ class="cmtt-10">\newglossaryentry. (For example, when the glossary is dis next LaTeX run has drawbacks that are detailed in the glossaries user manual. -

      Remember that if

      Remember that if \newglossaryentry wouldn’t be allowed in the document environment with the base environment with the base glossaries package, then it still won’t be allowed with docdefs=true. If your glossaries occur at the + id="dx1-4186">. If your glossaries occur at the end of the document, consider using docdef=restricted instead. + id="dx1-4187"> instead.

    • -
    • (new to version 1.06) +

      (new to version 1.06) \newglossaryentry is permitted in the + id="dx1-4189"> is permitted in the document environment without using the environment without using the .glsdefs file. This means that all entries must be defined before the glossary is displayed, but it avoids the complications associated with saving the entry details @@ -1861,15 +2104,15 @@ class="cmtt-10">.glsdefs file. This means class="cmti-10">key⟩=⟨value⟩ mechanism (that is, the comma and equal sign) and any makeindex or xindy character that occurs in the sort key or label. If any of those characters + id="dx1-4194"> key or label. If any of those characters are made active in the document, then it can cause problems with the entry definition. This option will allow \newglossaryentry to @@ -1877,52 +2120,77 @@ class="cmtt-10">\newglossaryentry to class="cmtt-10">\makenoidxglossaries, but note that \longnewglossaryentry remains a preamble-only command. -

      With this option, if an entry appears in the glossary before it has been +

      With this option, if an entry appears in the glossary before it has been defined, an error will occur (or a warning if the undefaction=warn + id="dx1-4195"> option is used.) If you edit your document and either remove an entry + + + or change its label, you may need to delete the document’s temporary files (such as the .aux and .gls files).

    • -
    • (new to version 1.34) This option behaves like +

      (new to version 1.34) This option behaves like docdef=restricted but + id="dx1-4197"> but creates the .glsdefs file for atom’s autocomplete support. This file isn’t input by glossaries-extra and so associated problems with the - - - use of this file are avoided, but it allows the autocomplete support to find the labels in the file. As with docdef=restricted, entries may + id="dx1-4198">, entries may be defined in the preamble or anywhere in the document, but they may only be referenced after they have been defined. Entries must be defined before the associated glossary is displayed. +

      If you need a list of all entry labels for the use of an editor or helper + script you may also want to consider the package options writeglslabels + and writeglslabelnames provided by the base glossaries package. Note + that with these options and docdef=atom, only the entry labels visible + to LaTeX can be saved. So if you are using bib2gls you will only + get the labels of the entries that are selected by bib2gls. +

    -

    The

    The glossaries package allows \newglossaryentry within the document + id="dx1-4205"> environment (when used with makeindex or xindy) but the user manual warns against this usage. By default the prohibits this, only allowing definitions within the preamble. If you are really determined to define entries in the document environment, despite all the associated drawbacks, you + id="dx1-4209"> environment, despite all the associated drawbacks, you can restore this with docdef=true. Note that this doesn’t change the + id="dx1-4211">. Note that this doesn’t change the prohibitions that the glossaries package has in certain circumstances (for example, when using “option 1”). See the glossaries user manual for href="#styopt.docdef">docdef=restricted. Only use . Only use docdef=true if document definitions + id="dx1-4213"> if document definitions are necessary and one or more of the glossaries occurs in the front matter. -

    This option affects commands that internally use

    This option affects commands that internally use \newglossaryentry, such as \newabbreviation, but not the “on-the-fly” commands described in \newabbreviation, but not the “on-the-fly” commands described in + §11 - §??sec:onthefly On-the-Fly Document Definitions.

    +

    nomissingglstext

    This is a boolean option. If true, this will suppress the - warning written to the transcript and the warning text that will appear - in the document if the external glossary files haven’t been generated - due to an incomplete document build. However, it’s probably simpler - just to fix whatever has caused the failure to build the external file or - files. -
    + id="dx1-4214">

    +

    This is a boolean option. If true, this will suppress the warning written to the + transcript and the warning text that will appear in the document if the + external glossary files haven’t been generated due to an incomplete document + build. However, it’s probably simpler just to fix whatever has caused the failure + to build the external file or files. + + + +

    +

    abbreviations

    This option has no value and can’t be cancelled. If used, it will - automatically create a new glossary with the label abbreviations and - redefines

    +

    This option has no value and can’t be cancelled. If used, it will automatically + create a new glossary with the label abbreviations and redefines + \glsxtrabbrvtype to this label. (The file extensions are glg-abr, + id="dx1-4216">, gls-abr and and glo-abr.) In addition, this option defines a shortcut + id="dx1-4218">.) In addition, this option defines a shortcut command -



    \printabbreviations[options]

    -

    +

    which is equivalent to

    \printglossary[type=\glsxtrabbrvtype,options] - - -
    If glossaries-extra-bib2gls is also loaded then this option will additionally + id="dx1-4220"> is also loaded then this option will additionally provide: -



    \printunsrtabbreviations[options]

    -

    +

    which uses \printunsrtglossary. -

    The title of the new glossary is given by -


    . +

    The title of the new glossary is given by +


    \abbreviationsname

    -

    - If this command is already defined, it’s left unchanged. Otherwise it’s defined - to “Abbreviations” if

    + If this command is already defined, it’s left unchanged. Otherwise it’s defined to + “Abbreviations” if babel hasn’t been loaded or \acronymname if - hasn’t been loaded or \acronymname if babel has been loaded. However, if you’re using has + been loaded. However, if you’re using babel it’s likely you - will need to change this. (See it’s likely you will need + to change this. (See §14 §??sec:lang Multi-Lingual Support for further details.) -

    If you don’t use the

    If you don’t use the abbreviations package option, the package option, the \abbreviationsname command won’t be defined (unless it’s defined by an included language file).
    -

    -

    If the

    +

    If the abbreviations option is used and the option is used and the acronym option provided by the + id="dx1-4229"> option provided by the glossaries package hasn’t been used, then \acronymtype will be set to + id="dx1-4230"> will be set to \glsxtrabbrvtype so that acronyms defined with so that acronyms defined with \newacronym can be added + id="dx1-4232"> can be added to the list of abbreviations. If you want acronyms in the main glossary and other abbreviations in the main:

    -
    +
          \renewcommand*{\acronymtype}{main}
    -
    -

    -

    Note that there are no analogous options to the +

    +

    Note that there are no analogous options to the glossaries package’s acronymlists + id="dx1-4233"> option (or associated commands) as the abbreviation mechanism is handled differently with glossaries-extra.

    +

    symbols

    This is passed to

    +

    This is passed to glossaries but will additionally define -



    \glsxtrnewsymbol[options]{label}{symbol}

    -

    +

    which is equivalent to

    }
    Note that the sort key is set to the ⟨ key is set to the ⟨label⟩ not the ⟨symbol⟩ as the symbol will likely contain commands. -

    If

    If glossaries-extra-bib2gls is also loaded then this option will additionally + id="dx1-4237"> is also loaded then this option will additionally provide: -



    \printunsrtsymbols[options]

    -

    +

    which uses \printunsrtglossary. + id="dx1-4239">.

    +

    numbers

    This is passed to

    +

    This is passed to glossaries but will additionally define -



    \glsxtrnewnumber[options]{number}

    -

    +

    which is equivalent to

    + + +
    \newglossaryentry{label},type=numbers,category=number,options} - - -
    -

    If

    If glossaries-extra-bib2gls is also loaded then this option will additionally + id="dx1-4242"> is also loaded then this option will additionally provide: -



    \printunsrtnumbers[options]

    -

    +

    which uses \printunsrtglossary. + id="dx1-4244">.

    +

    acronyms (or acronym)

    This is passed to )

    +

    This is passed to glossaries but if glossaries-extra-bib2gls is - also loaded then this option will additionally provide: -


    is also loaded then this + option will additionally provide: +


    \printunsrtacronyms[options]

    -

    +

    which uses \printunsrtglossary. -

    This option defines a new glossary with the label . +

    This option defines a new glossary with the label acronym not acronyms. You may find it easier to reference it with the command \acronymtype. + id="dx1-4250">.
    -

    +

    +

    index

    This is passed to

    +

    This is passed to glossaries but if glossaries-extra-bib2gls is also loaded then this + id="dx1-4252"> is also loaded then this option will additionally provide: -



    \printunsrtindex[options]

    -

    +

    which uses \printunsrtglossary. + id="dx1-4254">.

    +

    shortcuts

    Unlike the glossaries package option of the same name, this option isn’t - boolean but has multiple values: + id="dx1-4255">

    +

    Unlike the glossaries package option of the same name, this option isn’t boolean + but has multiple values:

    + + +
      -
    • +

      shortcuts=acronyms (or (or shortcuts=acro): set the shortcuts provided + id="dx1-4257">): set the shortcuts provided by the glossaries package for acronyms (such as \ac). Note that the @@ -2273,13 +2560,14 @@ class="cmss-10">glossaries-extra href="#styopt.shortcuts">shortcuts=ac. -

    • -
    • . +

    • +
    • +

      shortcuts=ac: set the shortcuts provided by the : set the shortcuts provided by the glossaries package for acronyms (such as \ac) but uses the \ac is defined as \cgls rather than \gls. - - - -

    • -
    • +
    • +

      shortcuts=abbreviations (or (or shortcuts=abbr): - set the abbreviation shortcuts provided by glossaries-extra. (See ): set the abbreviation + shortcuts provided by glossaries-extra. (See §4.3 +class="tcrm-1000">§??sec:abbrshortcuts Shortcut Commands.) These settings don’t switch on the acronym shortcuts provided by the glossaries package. -

    • -
    • +
    • +

      shortcuts=other: set the “other” shortcut commands, but not the shortcut + id="dx1-4262">: set the “other” shortcut commands, but not the shortcut commands for abbreviations or the acronym shortcuts provided by glossaries. The “other” shortcuts are: +class="cmss-10">glossaries. The “other” shortcuts are:

        -
      • +

        \newentry equivalent to equivalent to \newglossaryentry -

      • -
      • +

      • +
      • +

        \newsym equivalent to equivalent to \glsxtrnewsymbol (see the (see the symbols + id="dx1-4267"> option). -

      • -
      • +
      • +

        \newnum equivalent to equivalent to \glsxtrnewnumber (see the (see the numbers - option).

      + id="dx1-4270"> + option).

    -
  • +

    shortcuts=all (or (or shortcuts=true): implements ): implements shortcuts=ac, + id="dx1-4273">, shortcuts=abbreviations and and shortcuts=other. -

  • -
  • . +

  • +
  • +

    shortcuts=none (or (or shortcuts=false): don’t define any of the shortcut - commands (default).

  • -

    Note that multiple invocations of the ): don’t define any of the shortcut + commands (default).

    + + + +

    Note that multiple invocations of the shortcuts option option within the same option list will override each other.

    -

    After the

    After the glossaries-extra package has been loaded, you can set available options using -



    \glossariesextrasetup{options}

    -

    +

    The abbreviations and and docdef options may only be used in the preamble. Additionally, + id="dx1-4281"> options may only be used in the preamble. Additionally, docdef can’t be used after can’t be used after \makenoidxglossaries. + id="dx1-4283">.

    -

    -

    +

    Top

    2. Modifications to Existing Commands and Styles

    -

    Top

    2.1 Defining Entries

    -

    The

    The glossaries package provides \nopostdesc which may be used in the descriptionglossaries-extra package provides another command -



    \glsxtrnopostpunc

    -

    +

    which has a similar function but only suppresses the post-description punctuation. It doesn’t suppress the use of \glsxtrpostdescription which allows the use of @@ -2446,19 +2742,20 @@ class="cmtt-10">\glsxtrpostdescription not before.) The post-description hook can counter-act the effect of \glsxtrnopostpunc using -



    \glsxtrrestorepostpunc

    -

    +

    These commands have no effect outside of the glossary (except with standalone entries that use \glsxtractivatenopost and \glspostdescription, see \glspostdescription, see +§10.4 -§??sec:glossentry Standalone Entry Items). -

    The commands used by

    The commands used by glossaries to automatically produce an error if an entry is undefined (such as \glsdoifexistsundefaction option into account. -

    The

    The \newglossaryentry command has three new keys:

      -
    • +

      category, which sets the category label for the given entry. By default this is general. See §6 Categories for further information about categories. -

    • -
    • §??sec:categories Categories for further information about + categories. +

    • +
    • +

      alias, which allows an entry to be alias to another entry. See §10.5 Entry - Aliases for further details. -

    • -
    • §??sec:alias + Entry Aliases for further details. +

    • +
    • +

      seealso, which performs much like see, but allows for separate “see” and - “see also” treatment. See §2.3 Cross-References (“see” and “see also”) for - further details.

    -

    This apply to all entry defining commands (such as §??sec:see Cross-References (“see” and “see + also”) for further details.

    + + + +

    This apply to all entry defining commands (such as \newabbreviation). -

    The test file

    The test file example-glossaries-xr.tex contains dummy entries with a mixture of seeexample-glossaries-*.tex file for testing bib2gls. - - - -

    The

    The \longnewglossaryentry command now has a starred version (as from v1.12) that doesn’t automatically insert

    -
    +
     \leavevmode\unskip\nopostdesc
    -
    -

    at the end of the description field. -


    +

    at the end of the description field. +


    \longnewglossaryentry*{labeloptions}{description}

    -

    +

    The descriptionplural key is left unset unless explicitly set in ⟨options⟩. -

    The unstarred version no longer hard-codes the above code (which removes +

    The unstarred version no longer hard-codes the above code (which removes trailing space and suppresses the post-description hook) but instead uses: -



    \glsxtrpostlongdescription

    -

    +

    This can be redefined to allow the post-description hook to work but retain the \unskip part if required. For example: @@ -2556,12 +2860,12 @@ class="cmtt-10">\unskip part if required. For example:

    -
    +
     \renewcommand*{\glsxtrpostlongdescription}{\leavevmode\unskip}
    -
    -

    This will discarded unwanted trailing space at the end of the description but won’t + +

    This will discarded unwanted trailing space at the end of the description but won’t suppress the post-description hook. -

    The unstarred version also alters the base

    The unstarred version also alters the base glossaries package’s treatment of the 2.1 -

    Note that this modified unstarred version doesn’t append

    Note that this modified unstarred version doesn’t append \glsxtrpostlongdescription to the description’s plural form. -

    The

    The \newterm command (defined through the index. The \newacronym command is modified -to use the new abbreviation interface provided by command is modified to use +the new abbreviation interface provided by glossaries-extra. (See §4 +class="tcrm-1000">§??sec:abbreviations Abbreviations.) -

    The

    The \makeglossaries command now has an optional argument. -



    \makeglossaries[list]

    -

    +

    If ⟨list⟩ is empty, \makeglossaries behaves as per its original definition in the @@ -2615,36 +2920,36 @@ class="cmtt-10">\makeglossaries behaves as per its original definition in class="cmss-10">glossaries package, otherwise ⟨list⟩ can be a comma-separated list of glossaries that need processing with an external indexing application. -

    This command is not permitted with the

    This command is not permitted with the record=only package option. Without -the optional argument, it’s permitted with record=alsoindex. With the optional -argument, it’s only permitted with the default =hybrid. With the optional argument, +it’s only permitted with the default record=off. -

    It should then be possible to use

    It should then be possible to use \printglossary for those glossaries listed in ⟨list⟩ and \printnoidxglossary for the other glossaries. (See the accompanying file sample-mixedsort.tex for an example.) -

    If you use the optional argument ⟨

    If you use the optional argument ⟨list⟩, you can’t define entries in the document (even with the docdef option).
    -

    -

    You will need at least version 2.20 of

    +

    You will need at least version 2.20 of makeglossaries or at least version 1.3 of @@ -2662,25 +2967,25 @@ href="#styopt.automake">automake option. -

    +

    -

    Top

    2.2 Entry Indexing

    -

    As from version 1.31, there is a new command like

    As from version 1.31, there is a new command like \glsadd where the mandatory argument is a comma-separated list of labels: -



    \glsaddeach[options]{list}

    -

    +

    This simply iterates over ⟨list⟩ and does \glsadd[]{label} for each entry in the list. -

    As from version 1.37, you can make commands like

    As from version 1.37, you can make commands like \gls or \glslink automatically use } in the optional argument of the corresponding \gls, \glslink etc). -



    \GlsXtrAutoAddOnFormat[label}{glsadd options}

    -

    +

    The optional argument ⟨label⟩ defaults to \glslabel and indicates the label to use in @@ -2726,61 +3031,63 @@ class="cmtt-10">format={⟨format} prepended to the list. -

    For example, with: +

    For example, with:

    -
    +
     \GlsXtrAutoAddOnFormat{hyperbf}{counter=chapter}
    -
    -

    then +

    then \gls[format=hyperbf]{sample} will be equivalent to

    -
    +
     \glsadd[format=hyperbf,counter=chapter]{sample}\gls[format=hyperbf]{sample}
    -
    -

    Note that the explicit range markers will prevent a match unless you include + +

    Note that the explicit range markers will prevent a match unless you include them in ⟨format list⟩ (in which case, be sure to add both the start and end formats). -

    Here’s another example: +

    Here’s another example:

    -
    +
     \GlsXtrAutoAddOnFormat[dual.\glslabel]{hyperbf}{}
    -
    -

    In this case +

    In this case \gls[format=hyperbf]{sample} will now be equivalent to:

    -
    +
     \glsadd[format=hyperbf]{dual.sample}\gls[format=hyperbf]{sample}
    -
    -

    -

    +

    +

    \GlsXtrAutoAddOnFormat is not applied to \glsadd as it could cause an infinite loop.
    -

    -

    The

    +

    The glossaries-extra package provides extra keys for commands like \gls and \glstext:

    +

    noindex

    This is a boolean key. If true, this suppresses the indexing. (That is, - it prevents

    +

    This is a boolean key. If true, this suppresses the indexing. (That is, it + prevents \gls or whatever from adding a line to the external glossary file.) This is more useful than the first use might not be the most pertinent use. (If you want to apply indexonlyfirst to selected entries, rather than all of them, you - can use the to selected entries, rather than all of them, + you can use the indexonlyfirst attribute, see §6 Categories for further details.) - Note that the §??sec:categories Categories + for further details.) Note that the noindex key isn’t available for \glsadd (and + (and \glsaddall) - since the whole purpose of that command is to index an entry. -

    + id="dx1-7010">) since the whole purpose of that command is to index + an entry. +

    +

    wrgloss

    (New to v1.14.) This is may only take the values

    +

    (New to v1.14.) This is may only take the values before or after. By - default, commands that both index and display link text (such as \gls, - \glstext and \glslink), perform the indexing before the link text as the - indexing creates a whatsit that can cause problems if it occurs after the - link text. However, it may be that in some cases (such as long phrases) you - may actually want the indexing performed after the link text. In this case - you can use wrgloss=after for specific instances. Note that this option - doesn’t have an effect if the indexing has been suppressed through other - settings (such as after. By default, + commands that both index and display link text (such as \gls, \glstext + and \glslink), perform the indexing before the link text as the indexing + creates a whatsit that can cause problems if it occurs after the link text. + However, it may be that in some cases (such as long phrases) you may + actually want the indexing performed after the link text. In this case you + can use wrgloss=after for specific instances. Note that this option doesn’t + have an effect if the indexing has been suppressed through other settings + (such as noindex). -

    The default value is set up using -


    The default value is set up using +


    \glsxtrinitwrgloss

    -

    +

    which is defined as:

    -
    +
          \newcommand*{\glsxtrinitwrgloss}{%
    -      
     \glsifattribute{\glslabel}{wrgloss}{after}% -  
     {% -  
       \glsxtrinitwrglossbeforefalse -  
     }% -  
     {% -  
       \glsxtrinitwrglossbeforetrue -  
     }% -  
    } -
    -

    This sets the conditional -


    +

    This sets the conditional +


    \ifglsxtrinitwrgloss

    -

    +

    which is used to determine where to perform the indexing. -

    This means you can set the

    This means you can set the wrgloss attribute to \GlsXtrSetDefaultGlsOpts\glsxtrinitwrgloss.)

    +

    hyperoutside

    (New to v1.21.) This is a boolean key. The default is

    +

    (New to v1.21.) This is a boolean key. The default is hyperoutside=true, which puts the hyperlink outside \glstextformat, so that commands like \gls - will effectively do

    +

    textformat

    This key must have a control sequence name as its value. The - command formed from this name must exist and must take one argument. - (Use relax for default behaviour.) If set, this overrides the

    +

    This key must have a control sequence name as its value. The command formed + from this name must exist and must take one argument. (Use relax for + default behaviour.) If set, this overrides the textformat - attribute and attribute and + \glstextformat. See the soul example in §2.6 §??sec:glsunset First Use Flag. -

    +

    +

    prefix

    Locally redefines

    +

    Locally redefines \glolinkprefix to the given value. It should match the prefix for the desired glossary. -

    +

    +

    thevalue

    Explicitly set the location to this value (see below). -
    + id="dx1-7027">

    +

    Explicitly set the location to this value (see below). +

    +

    theHvalue

    Set the corresponding hyperlink location (see below). + id="dx1-7028">

    +

    Set the corresponding hyperlink location (see below). +

    -

    You can set the default options used by

    You can set the default options used by \glslink, \gls etc with: -



    \GlsXtrSetDefaultGlsOpts{options}

    -

    +

    For example, if you mostly don’t want to index entries then you can do:

    -
    +
     \GlsXtrSetDefaultGlsOpts{noindex}
    -
    -

    and then use, for example, +

    and then use, for example, \gls[noindex=false]{sample} when you actually want the location added to the \glslink and \gls. -

    Note that if you don’t want

    Note that if you don’t want any indexing, just omit \makeglossaries and wrgloss\glsxtrinitwrgloss instead. -

    \GlsXtrSetDefaultGlsOpts doesn’t affect \glsadd.
    -

    -

    If you want to change the default value of

    +

    If you want to change the default value of format, you can instead use: -



    \GlsXtrSetDefaultNumberFormat{format}

    -

    +

    This has the advantage of also working for \glsadd. For example, if you want all locations in the back matter to appear in italic (unless explicitly @@ -3055,12 +3381,12 @@ overridden):

    -
    +
     \backmatter
    - 
    \GlsXtrSetDefaultNumberFormat{hyperit} -
    -

    -

    Commands like +

    +

    Commands like \gls have star (*) and plus (hyper=false and hyper=true. The glossaries-extra package provides a way to add a third modifier, if required, using -



    \GlsXtrSetAltModifier{char}{options}

    -

    +

    where ⟨char⟩ is the character used as the modifier and ⟨options⟩ is the default set of options (which may be overridden). Note that ⟨char⟩ must be a single character (not a UTF-8 character, unless you are using XƎLATEX or LuaLATEX). -

    When choosing the character ⟨

    When choosing the character ⟨char⟩ take care of any changes in category code.
    -

    -

    Example: +

    +

    Example:

    -
    +
     \GlsXtrSetAltModifier{!}{noindex}
    -
    -

    This means that +

    This means that \gls!{sample} will be equivalent to \gls[noindex]{sample}. It’s not possible to mix modifiers. For example, if you want to do @@ -3104,51 +3430,51 @@ not possible to mix modifiers. For example, if you want to do

    -
    +
     \gls[noindex,hyper=false]{sample}
    -
    -

    you can use +

    you can use \gls*[noindex]{sample} or \gls![hyper=false]{sample} but you can’t combine the * and ! modifiers. -

    There is a new hook that’s used each time indexing information is written to the +

    There is a new hook that’s used each time indexing information is written to the external glossary files: -



    \glsxtrdowrglossaryhook{label}

    -

    +

    where ⟨label⟩ is the entry’s label. This does nothing by default but may be redefined. (See, for example, the accompanying sample file sample-indexhook.tex, which uses this hook to determine which entries haven’t been indexed.) -

    There’s also a new hook (from v1.26) that’s used immediately before the options +

    There’s also a new hook (from v1.26) that’s used immediately before the options are set by the \gls-like and \glstext-like commands: -



    \glslinkpresetkeys

    -

    +

    (The base package provides \glslinkpostsetkeys that’s used immediately after the options are set.) -

    As from version 1.30 there are also similar hooks for

    As from version 1.30 there are also similar hooks for \glsadd: -



    \glsaddpresetkeys

    -

    +

    and -



    \glsaddpostsetkeys

    -

    +

    For example, to default to using the equation counter in maths mode: @@ -3156,13 +3482,13 @@ class="cmss-10">equation -

    -

    In this case, the counter can be overridden with an explicit use of +

    In this case, the counter can be overridden with an explicit use of counter in the optional argument of equations package option.) -

    Alternatively, to enforce this (overriding the option argument): +

    Alternatively, to enforce this (overriding the option argument):

    -
    +
     \renewcommand{\glslinkpostsetkeys}{%
    - 
     \ifmmode \setkeys{glslink}{counter=equation}\fi} - 
    \renewcommand{\glsaddpostsetkeys}{% - 
     \ifmmode \setkeys{glossadd}{counter=equation}\fi} -
    -

    -

    As from version 1.14, there are two new keys for +

    +

    As from version 1.14, there are two new keys for \glsadd: thevalue and thevalue keys is intended primarily for adding locations in supplementary material that can’t be obtained from a counter. -

    The principle key

    The principle key thevalue is for the location value. The other key theHvalueprefix⟩⟨location⟩. In general, there’s little need for this key as the prefix is typically associated with a counter that can be used to form hypertargets. -

    If you use

    If you use thevalue, you must make sure that you use an indexing application that will accept the given value.
    -

    -

    For example,

    +

    For example, makeindex will only accept locations in the form [⟨num⟩⟨ -

    +
     \glsadd[thevalue={Supplementary Material}]{sample}
    -
    -

    This location value will be accepted by +

    This location value will be accepted by bib2gls, since it will allow any location and @@ -3256,24 +3582,24 @@ class="cmss-10">format key to prevent a hyperlink if one can’t naturally be formed from the prefix, counter and location value. -

    For example, suppose the file

    For example, suppose the file suppl.tex contains:

    -
    +
     \documentclass{article}
    - 
    \usepackage{glossaries-extra} - 
    \newglossaryentry{sample}{name={sample},description={an example}} - 
    \renewcommand{\thepage}{S.\arabic{page}} - 
    \begin{document} - 
    First page. - 
    \newpage - 
    \gls{sample}. - 
    \end{document} -
    -

    This has an entry on page S.2. Suppose another document wants to include this +\usepackage{glossaries-extra} +\newglossaryentry{sample}{name={sample},description={an example}} +\renewcommand{\thepage}{S.\arabic{page}} +\begin{document} +First page. +\newpage +\gls{sample}. +\end{document} + +

    This has an entry on page S.2. Suppose another document wants to include this location in the glossary. Then this can be done by setting thevalue to -

    +
     \documentclass{article}
    - 
    \usepackage{glossaries-extra} - 
    \makeglossaries - 
    \newglossaryentry{sample}{name={sample},description={an example}} - 
    \begin{document} - 
    Some \gls{sample} text. - 
    \printglossaries - 
    \glsadd[thevalue={S.2}]{sample} - 
    \end{document} -
    -

    This location value will be accepted by +

    This location value will be accepted by makeindex as it’s in the form ⟨num⟩⟨sep⟩⟨num⟩. -

    If you want hyperlinks, things are more complicated. First you need to set the +

    If you want hyperlinks, things are more complicated. First you need to set the externallocationexternallocation -

    -

    Next you need to add +

    Next you need to add glsxtrsupphypernumber as the format:

    -
    +
     \glsadd[thevalue={S.2},format=glsxtrsupphypernumber]{sample}
    -
    -

    Both documents will need to use the +

    Both documents will need to use the hyperref package. Remember that the counter used for the location also needs to match. If sample-suppl-main-hyp.tex for an example that uses hyperref. -

    The hyperlink for the supplementary location may or

    The hyperlink for the supplementary location may or may not take you to the relevant place in the external PDF file depending on your PDF viewer. Some may not support external links, and some may take you to the first page or last visited page.
    -

    -

    For example, if both

    +

    For example, if both sample-suppl-hyp.pdf and sample-suppl-main-hyp.pdf are in the same directory, then viewing sample-suppl-main-hyp.pdf in Evince will take you to the correct location in the linked document (when you click on the S.2 external link), but Okular will take you to the top of the first page of the linked document. -

    This method can only be used where there is one external source for the +

    This method can only be used where there is one external source for the designated category (identified by the externallocation.aux files of the designated external documents without the need to explicitly use \glsadd. -

    +

    -

    Top

    2.3 Cross-References (“see” and “see also”)

    -

    The value of the

    The value of the see key is now saved as a field. This isn’t the case with glossaries, -where the key is now saved as a field. This isn’t the case with +glossaries, where the see value is simply used to directly write a line to the corresponding -glossary file and is then discarded. This is why the value is simply used to directly write a line to the +corresponding glossary file and is then discarded. This is why the see key can’t be used -before key +can’t be used before \makeglossaries (since the file hasn’t been opened yet). It’s also the -reason why the see key doesn’t have any effect when used in entries that -are defined in the document environment. Since the value isn’t saved, it’s -not available when the .glsdefs file is created at the end of the document -and so isn’t available at the start of the document environment on the next -run. -

    This modification allows (since the file hasn’t been opened +yet). +

    This modification allows glossaries-extra to provide -



    \glsxtraddallcrossrefs

    - - - -

    +

    which is used at the end of the document to automatically add any unused cross-references unless the package option indexcrossrefs was set to false. -

    As a by-product of this enhancement, the was set to false. + + + +

    Note that even though the see key will now work for entries -defined in the key will now work for entries defined in the +document environment, but it’s still best to define entries in the -preamble, and the environment, it’s still best to define entries in the preamble, and +the see key still can’t perform any indexing before the file has been -opened by key still can’t perform any indexing before the file has been opened +by \makeglossaries. Note that glossaries v4.24 introduced the seenoindex + id="dx1-8011"> package option, which can be used to suppress the error when the see key + id="dx1-8012"> key is used before \makeglossaries, so seenoindex=ignore will allow the will allow the see + id="dx1-8014"> value to be stored even though it may not be possible to index it at that point. -

    As from version 1.06, you can display the cross-referenced information for a given +

    As from version 1.06, you can display the cross-referenced information for a given entry using -



    \glsxtrusesee{label}

    -

    +

    This internally uses -



    \glsxtruseseeformat{tag}{xr list}

    -

    +

    where ⟨tag⟩ and ⟨xr list⟩ are obtained from the value of the entry’s see field (if + id="dx1-8017"> field (if non-empty). By default, this just does \glsseeformat[tagxr list}{}, which is how the cross-reference is displayed in the number list. Note that \glsxtrusesee does nothing if the see field hasn’t been set for the entry given by + id="dx1-8019"> field hasn’t been set for the entry given by ⟨label⟩. -

    As with the base

    As with the base glossaries package, package, \glsseeformat is defined to do \emph{tagxr list}. The third argument is always ignored and is present for makeindex, which always requires a final argument to encapsulate the associated + id="dx1-8021">, which always requires a final argument to encapsulate the associated location. The command -



    \glsseelist{xr list}

    -

    +

    used to iterate over the list of cross-reference labels is also unchanged from the base glossaries package, with each item in the list formatted according + id="dx1-8023"> package, with each item in the list formatted according to: -



    \glsseeitem{label}

    -

    +

    This is defined by the glossaries package to:

    + id="dx1-8025"> package to:

    \glshyperlink[\glsseeitemformat{}
    So the actual formatting for each cross-referenced entry is performed by \glsseeitemformat, which is redefined by , which is redefined by glossaries-extra, as described in , as described in +§2 -Modifications to Existing Commands and Styles. This now displays the value of the -§??sec:modifications Modifications to Existing Commands and Styles. This now +displays the value of the text field for abbreviations and the value of the field for abbreviations and the value of the name field otherwise. There’s no -indication of the entry hierarchy, which could confuse the reader. Therefore, as from - - - - field +otherwise. There’s no indication of the entry hierarchy, which could confuse +the reader. Therefore, as from glossaries-extra v1.37, there are some new commands that include the hierarchical -information. You may prefer to redefine \glsseeitemformat to use one of this if you -have sub-entries. For example: + id="dx1-8030"> v1.37, there are some new +commands that include the hierarchical information. You may prefer to +redefine \glsseeitemformat to use one of this if you have sub-entries. For +example: -
    +
     \renewcommand*{\glsseeitemformat}[1]{\glsxtrhiername{#1}}
    -
    -

    -

    The +

    +

    The glossaries package provides -



    \glsseeitemformat{label}

    -

    +

    to format items in a cross-reference list (identified with the see key or key or \glssee). This was originally defined to use \glsentryname{} since it makes more sense for the cross-reference to match the way the term appears in the glossary. Unfortunately this caused a problem when the name field was sanitized, which used to be the default + id="dx1-8033"> field was sanitized, which used to be the default setting, so glossaries v3.0 changed the default definition of this command to use \glsentrytext instead. Since the name and and text field are quite often + id="dx1-8035"> field are quite often the same, this change usually doesn’t have a noticeable effect. However, now that the name field is no longer sanitized (following the redesign of + id="dx1-8036"> field is no longer sanitized (following the redesign of glossaries v4.0) it makes more sense to restore this command to its original behaviour, but to take account of abbreviations -

    +
     \renewcommand*{\glsseeitemformat}[1]{%
    - 
     \ifglshasshort{\glslabel}{\glsfmttext{#1}}{\glsfmtname{#1}}% - 
    } -
    -

    (Note that as from +

    (Note that as from glossaries-extra version 1.42, this now uses \glsfmttext and \glsfmtname instead of just referencing the text and and name fields. This helps to ensure + id="dx1-8038"> fields. This helps to ensure that any formatting is correctly applied.) -

    If you want to restore the

    If you want to restore the glossaries v3.0+ definition just do:

    -
    +
     \renewcommand*{\glsseeitemformat}[1]{\glsentrytext{#1}}
    -
    -

    -

    The +

    +

    The glossaries-extra package provides package provides \glsxtrhiername and its case-changing + id="dx1-8040"> and its case-changing variants that may be used within the definition of \glsseeitemformat if required. These display the hierarchy for sub-entries rather than just the name, which may be more helpful in cross-references. -



    \glsxtrhiername{label}

    -

    +

    performs a recursive action:

      -
    1. If the entry given by ⟨ +

      If the entry given by ⟨label⟩ has a parent, then \glsxtrhiername{parent @@ -3650,84 +3963,85 @@ class="cmti-10">parent class="cmti-10">label⟩} is done followed by \glsxtrhiernamesep then: -

    2. -
    3. If the entry given by ⟨
    4. +
    5. +

      If the entry given by ⟨label⟩ is an abbreviation (that is, it has the short field + id="dx1-8046"> field set) then the short form is displayed (using \glsfmtshort) otherwise the name is displayed (using \glsfmtname).

    -

    The first step above is skipped if the entry doesn’t have a parent. Each level is separated +class="cmtt-10">\glsfmtname).

    +

    The first step above is skipped if the entry doesn’t have a parent. Each level is separated by: -



    \glsxtrhiernamesep

    -

    +

    which defaults to “ ”. This can be redefined as appropriate. -

    There are some case-changing variants: -


    There are some case-changing variants: +


    \Glsxtrhiername{label}

    -

    +

    The top-level has the first letter changed to upper case (either \Glsfmtshort or \Glsfmtname). There’s no case-change for sub-entries. -



    \GlsXtrhiername{label}

    -

    +

    All levels have the first letter changed to upper case (either \Glsfmtshort or \Glsfmtname). -



    \GLSxtrhiername{label}

    -

    +

    The top-level is converted to upper case (either \GLSfmtshort or \GLSfmtname). There’s no case-change for sub-entries. -



    \GLSXTRhiername{label}

    -

    +

    All levels are converted to upper case (either \GLSfmtshort or \GLSfmtname). - - - -

    Suppose you want to suppress the number list using

    Suppose you want to suppress the number list using nonumberlist. This + id="dx1-8053">. This will automatically prevent the cross-references from being displayed. The seeautonumberlist package option will automatically enable the number list for entries + id="dx1-8054"> package option will automatically enable the number list for entries that have the see key set, but this will also show the rest of the number + id="dx1-8056"> key set, but this will also show the rest of the number list. -

    Another approach in this situation is to use the post description hook +

    Another approach in this situation is to use the post description hook with \glsxtrusesee to append the cross-reference after the description. For example: @@ -3735,22 +4049,22 @@ example:

    -
    +
     \renewcommand*{\glsxtrpostdescgeneral}{%
    - 
     \ifglshasfield{see}{\glscurrententrylabel} - 
     {, \glsxtrusesee{\glscurrententrylabel}}% - 
     {}% - 
    } -
    -

    Now the cross-references can appear even though the +

    Now the cross-references can appear even though the number list has been suppressed. -

    As from v1.16, there’s a separate

    As from v1.16, there’s a separate seealso key. Unlike key. Unlike see, this doesn’t have an + id="dx1-8060">, this doesn’t have an optional part for the textual tag. The syntax seealso={xr-labelsxr-labels} but the information is stored in a separate field. If you need a different tag, use the see key + id="dx1-8061"> key instead (or redefine \seealsoname or \glsxtruseseealsoformat, described below). -

    You can display the formatted list of cross-references stored in the

    You can display the formatted list of cross-references stored in the seealso key + id="dx1-8062"> key using: -



    \glsxtruseseealso{label}

    -

    +

    This works in much the same way as \glsxtrusesee but it internally uses -



    \glsxtruseseealsoformat{xr list}

    -

    +

    For example:

    -
    +
     \renewcommand*{\glsxtrpostdescgeneral}{%
    - 
     \ifglshasfield{see}{\glscurrententrylabel} - 
     {, \glsxtrusesee{\glscurrententrylabel}}% - 
     {}% - 
     \ifglshasfield{seealso}{\glscurrententrylabel} - 
     { (\glsxtruseseealso{\glscurrententrylabel})}% - 
     {}% - 
    } -
    -

    -

    The +

    +

    The alias key only contains a single label not a list, but if you want to ensure + id="dx1-8065"> key only contains a single label not a list, but if you want to ensure consistent formatting with \glsxtrusesee and \glsxtruseseealso you can use (from v1.42): -



    \glsxtrusealias{label}

    -

    -

    The actual unformatted comma-separated list ⟨

    +

    The actual unformatted comma-separated list ⟨xr-list⟩ stored in the seealso field + id="dx1-8067"> field can be accessed with: -



    \glsxtrseealsolabels{label}

    -

    +

    This will just expand to the ⟨xr-labels⟩ provided in the value of the seealso key. There’s + id="dx1-8069"> key. There’s no corresponding command to access the see field. If you really need to access it, you + id="dx1-8070"> field. If you really need to access it, you can use commands like \glsxtrfielduse, but remember that it may start with [tag], so it can’t be automatically treated as a simple comma-separated list. -

    As mentioned above, the base

    As mentioned above, the base glossaries package provides \glsseelist, which + id="dx1-8071">, which requires a comma-separated list of labels as the argument. The argument isn’t fully expanded, so it’s not suitable to use, for example, \glsxtrseealsolabels{label} as the argument. For convenience, glossaries-extra provides -



    \glsxtrseelist{xr list}

    -

    +

    which fully expands its argument and passes it to \glsseelist. -

    The

    The seealso key implements the automatic indexing using -


    key implements the automatic indexing using +


    \glsxtrindexseealso{label}{xr list}

    -

    +

    which just does

    }
    unless the xindy option is used with option is used with glossaries v4.30+, in which case a distinct + id="dx1-8076"> v4.30+, in which case a distinct seealso cross-reference class is used instead. -

    The command that produces this “see also” text is -


    The command that produces this “see also” text is +


    \seealsoname

    -

    +

    If \alsoname (provided by language packages) is defined then (provided by language packages) is defined then \seealsoname will simply be defined to \alsoname otherwise it will be defined to see also. -

    The language-sensitive

    The language-sensitive \alsoname is used by general indexing packages, such as makeidx, so if you redefine , so if you redefine \alsoname the change will apply to normal indexes as well as glossaries. If you only want to change the text produced by the seealso key + id="dx1-8080"> key without affecting general indexing (with \index) then redefine \seealsoname instead. -

    +

    -

    Top

    2.4 Entry Display Style Modifications

    -

    Recall from the

    Recall from the glossaries package that commands such as \gls display text at that point in the document (optionally with a hyperlink to the relevant @@ -3930,7 +4244,7 @@ whether or not it actually has a hyperlink. The actual text and the way it’s displayed depends on the command used (such as \gls) and the entry format. -

    The default entry format (

    The default entry format (\glsentryfmt) used in the link-text by commands like @@ -3953,35 +4267,39 @@ class="cmss-10">glossaries-extra to test for regular entries, which are determined as follows:

      -
    • If an entry is assigned to a category that has the +

      If an entry is assigned to a category that has the regular attribute set (see attribute set + (see §6 - Categories), the entry is considered a regular entry, even if it has a value - for the §??sec:categories Categories), the entry is considered a regular entry, + even if it has a value for the short key. In this case \glsentryfmt uses \glsentryfmt + uses \glsgenentryfmt - (provided by (provided by glossaries), which uses the first (or (or + firstplural) value on first - use and the first use and the text (or plural) value on subsequent use. -

    • -
    • An entry that doesn’t have a value for the ) value on subsequent + use. +

    • +
    • +

      An entry that doesn’t have a value for the short key is assumed to be a regular entry, even if the regular\glsentryfmt uses \glsgenentryfmt. -

    • -
    • If an entry does has a value for the short key and hasn’t been marked as - a regular entry through the regular attribute, it’s not considered a regular - entry. In this case \glsentryfmt uses
    • +
    • +

      If an entry does has a value for the short key and hasn’t been marked + as a regular entry through the regular attribute, it’s not considered + a regular entry. In this case \glsentryfmt uses \glsxtrgenabbrvfmt (defined by - glossaries-extra) which is governed by the abbreviation style (see + (defined by glossaries-extra) which is governed by the abbreviation style + (see §4.2 - §??sec:abbrstyle Abbreviation Styles). +

    -

    This means that entries with a short form can be treated as regular entries rather +

    This means that entries with a short form can be treated as regular entries rather than abbreviations if it’s more appropriate for the desired style. -

    As from version 1.04,

    As from version 1.04, \glsentryfmt now puts \glsgenentry in the argument of the new command -



    \glsxtrregularfont{text}

    -

    +

    This just does its argument ⟨text⟩ by default. This means that if you want regular entries in a different font but don’t want that font to apply to abbreviations, then @@ -4041,60 +4362,60 @@ overridden by the textformat attribute. -

    For example: +

    For example:

    -
    +
     \renewcommand*{\glsxtrregularfont}[1]{\textsf{#1}}
    -
    -

    You can access the label through +

    You can access the label through \glslabel. For example, you can query the category:

    -
    +
     \renewcommand*{\glsxtrregularfont}[1]{%
    - 
     \glsifcategory{\glslabel}{general}{\textsf{#1}}{#1}} -
    -

    or query the category attribute, for example, provide a custom attribute called + \glsifcategory{\glslabel}{general}{\textsf{#1}}{#1}} + +

    or query the category attribute, for example, provide a custom attribute called font:

    -
    +
     \glssetcategoryattribute{general}{font}{sf}
    - 
    \renewcommand*{\glsxtrregularfont}[1]{% - 
     \glsifattribute{\glslabel}{font}{sf}{\textsf{#1}}{#1}} -
    -

    As from version 1.21, it’s simpler to just do, for example: +\renewcommand*{\glsxtrregularfont}[1]{% + \glsifattribute{\glslabel}{font}{sf}{\textsf{#1}}{#1}} + +

    As from version 1.21, it’s simpler to just do, for example:

    -
    +
     \glssetcategoryattribute{general}{textformat}{textsf}
    -
    -

    without redefining +

    without redefining \glsxtrregularfont. -

    As from version 1.30, there is also a command for abbreviations that encapsulates +

    As from version 1.30, there is also a command for abbreviations that encapsulates \glsxtrgenabbrvfmt: -



    \glsxtrabbreviationfont{text}

    -

    +

    This also just does its argument by default. Font changes made by abbreviation styles are within ⟨text⟩. -

    The

    The \glspostlinkhook provided by the glossaries package to insert information after the link-text produced by commands like \gls and \glstext is redefined to -



    \glsxtrpostlinkhook

    -

    +

    This command will discard a following full stop (period) if the discardperiod attribute is set to “true” for the current entry’s category. It will also do -



    \glsxtrpostlink

    -

    +

    if a full stop hasn’t be discarded and -



    \glsxtrpostlinkendsentence

    -

    +

    if a full stop has been discarded. -

    It may be that you want to check some other setting (rather than a category +

    It may be that you want to check some other setting (rather than a category attribute) to determine whether or not to discard a following full stop. In which case you can redefine: -



    \glsxtrifcustomdiscardperiod{true}{false}

    -

    +

    You can access the field’s label using \glslabel. This command should do ⟨true⟩ if the @@ -4143,12 +4464,12 @@ definition is simply:

    -
    +
     \newcommand*{\glsxtrifcustomdiscardperiod}[2]{#2}
    -
    -

    which means that no additional checks are performed. (Only the recognised category + +

    which means that no additional checks are performed. (Only the recognised category attributes will be checked.) -

    Avoid the use of

    Avoid the use of \gls-like and \glstext-like commands within the post-link hook as they will cause interference. Consider using commands like @@ -4157,11 +4478,12 @@ class="cmtt-10">\glsentrytext, \glsaccesstext or \glsxtrp (§2.8 §??sec:nested Nested Links) instead.
    -

    -

    By default

    +

    By default \glsxtrpostlink just does \glsxtrpostlinkcategorygeneral category, \glsxtrpostlinkgeneral if it has been defined.) -

    You can define the post-link hook command using

    You can define the post-link hook command using \newcommand, for example:

    -
    +
     \newcommand*{\glsxtrpostlinkgeneral}{%
    - 
     \glsxtrpostlinkAddDescOnFirstUse - 
    } -
    -

    or, as from v1.31, you can use -


    +

    or, as from v1.31, you can use +


    \glsdefpostlink{category}{definition}

    -

    +

    This is simply a shortcut for:

    definition}
    Note that it doesn’t check if the command has already been defined. -

    The sentence-ending hook is slightly more complicated. If the command +

    The sentence-ending hook is slightly more complicated. If the command \glsxtrpostlinkcategory

    There are some convenient commands you might want to use when customizing +

    There are some convenient commands you might want to use when customizing the post-link-text category hooks: -



    \glsxtrpostlinkAddDescOnFirstUse

    -

    +

    This will add the description in parentheses on first use. -

    For example, suppose you want to append the description in parentheses on

    For example, suppose you want to append the description in parentheses on first use for entries in the symbolsymbol -

    -

    -


    +

    +


    \glsxtrpostlinkAddSymbolOnFirstUse

    -

    +

    This will append the symbol (if defined) in parentheses on first use. (Does nothing if the symbol hasn’t been set.) -



    \glsxtrpostlinkAddSymbolDescOnFirstUse

    -

    +

    (New to v1.31.) On first use, this will append \space(⟨description⟩) if the symbol is defined otherwise it just appends \space(⟨description⟩). -

    If you want to provide your own custom format be aware that you can’t use +

    If you want to provide your own custom format be aware that you can’t use \ifglsused within the post-link-text hook as by this point the first use flag will have been unset. Instead you can use -



    \glsxtrifwasfirstuse{true}{false}

    -

    +

    This will do ⟨true⟩ if the last used entry was the first use for that entry, otherwise it @@ -4295,7 +4617,7 @@ locally set by commands like \gls, so don’t rely on it outside of the post-link-text hook. -

    Note that commands like

    Note that commands like \glsfirst and \glsxtrfull\glsxtrfull so that it fakes non-first use otherwise the inline full format would include the footnote, which is inappropriate.
    -

    -

    For example, if you want to place the description in a footnote after the

    +

    For example, if you want to place the description in a footnote after the link-text on first use for the general -

    -

    -

    The +

    +

    The short-postfootnote abbreviation style uses the post-link-text hook to place the footnote after trailing punctuation characters. -

    +

    -

    Top

    2.5 Entry Counting Modifications

    -

    If you are using

    If you are using bib2gls you may find it more convenient to use the record -count commands described in bib2gls you may find it more convenient to use the record count +commands described in §9 §??sec:bib2gls bib2gls: Managing Reference Databases instead. -

    The

    The \glsenableentrycount command is modified to allow for the entrycount attribute. This means that you not only need to enable entry counting with \glsenableentrycount, but you also need to set the appropriate attribute (see \glsenableentrycount, but you also need to set the appropriate attribute (see +§6 -§??sec:categories Categories). -

    For example, instead of just doing: +

    For example, instead of just doing:

    -
    +
     \glsenableentrycount
    -
    -

    you now need to do: + +

    you now need to do:

    -
    +
     \glsenableentrycount
    - 
    \glssetcategoryattribute{abbreviation}{entrycount}{1} -
    -

    This will enable the entry counting for entries in the +

    This will enable the entry counting for entries in the abbreviation category, but any entries assigned to other categories will be unchanged. -

    Further information about entry counting, including the new per-unit feature, is +

    Further information about entry counting, including the new per-unit feature, is described in §7.1 §??sec:entrycount Entry Counting (First Use Flag). -

    +

    -

    Top

    2.6 First Use Flag

    -

    The

    The glossaries package provides -



    \ifglsused{true}{false}

    -

    +

    to determine whether or not an entry has been used. This requires the entry to have been defined. If the entry is undefined, then the underlying boolean variable doesn’t exist and so is neither true nor false. This command will produce an error with the @@ -4432,7 +4757,7 @@ class="cmti-10">true⟩ nor ⟨false⟩ will be performed if ⟨label⟩ doesn’t exist. -

    The

    The record option automatically implements bib2gls. In this case, you may prefer to use: -



    \GlsXtrIfUnusedOrUndefined{labeltrue}{false}

    -

    +

    (new to v1.34) which does ⟨true⟩ if the entry given by ⟨label⟩ is undefined or if the entry is marked as unused. Remember that neither \ifglsused nor \GlsXtrIfUnusedOrUndefined should be used in the post-link hook as the -\GlsXtrIfUnusedOrUndefined should be used in the post-link hook as the first use flag will have already been unset before the hook is performed. -(Instead, first use +flag will have already been unset before the hook is performed. (Instead, +\glsxtrifwasfirstuse should be used, see §2.4 Entry Display Style -Modifications.) -

    There are two new commands provided with version 1.31+: -


    §??sec:entryfmtmods Entry Display +Style Modifications.) +

    There are two new commands provided with version 1.31+: +


    \glslocalreseteach{list}

    -

    +

    and -



    \glslocalunseteach{list}

    -

    +

    These behave like \glslocalreset and \glslocalunset but the argument is a @@ -4493,7 +4819,7 @@ comma-separated list of labels. -

    The internal command used by

    The internal command used by \glsunset is modified first to allow for the changing in entry counting, described above, but also to allow for buffering pending unsets when commands like -

    +
     \ul{Some text about \gls{html}.}
    -
    -

    This causes the confusing error: + +

    This causes the confusing error:

    -
    +
     Glossary entry `{html}' has not been defined.
    -
    -

    The simplest workaround is to put +

    The simplest workaround is to put \gls{html} inside the argument of \mbox. For example: @@ -4525,27 +4851,27 @@ example:

    -
    +
     \ul{Some text about \mbox{\gls{html}}.}
    -
    -

    This can work provided it’s not the first use of this entry. It if is, then unsetting the + +

    This can work provided it’s not the first use of this entry. It if is, then unsetting the first use flag causes a problem and results in the error:

    -
    +
     ! Package soul Error: Reconstruction failed.
    -
    -

    The +

    The glossaries-extra package provides a way of temporarily switching off \glsunset so that it just makes a note of the entry’s label but doesn’t actually perform the change: -



    \GlsXtrStartUnsetBuffering

    -

    +

    The unstarred version doesn’t check for duplicates, so the internal list may end up with multiple occurrences of the same label. The starred version only adds a label to the internal list if it’s not already in it. Note that this @@ -4553,12 +4879,12 @@ buffering only applies to the global \glsunset and does not affect the local \glslocalunset. -

    Later you can restore

    Later you can restore \glsunset and unset all buffered labels using: -



    \GlsXtrStopUnsetBuffering

    -

    +

    The starred form \GlsXtrStopUnsetBuffering* uses \glslocalunset instead. For @@ -4567,84 +4893,84 @@ example:

    -
    +
     \documentclass{article}
    - 
    \usepackage[T1]{fontenc} - 
    \usepackage{soul} - 
    \usepackage{glossaries-extra} - 
    \newabbreviation{html}{HTML}{hypertext markup language} - 
    \begin{document} - 
    \GlsXtrStartUnsetBuffering - 
    \ul{Some text about \mbox{\gls{html}}.} - 
    \GlsXtrStopUnsetBuffering - 
    Next use: \gls{html}. - 
    \end{document} -
    -

    Before you stop the unset buffering, you can iterate over the current buffer +\usepackage[T1]{fontenc} +\usepackage{soul} +\usepackage{glossaries-extra} +\newabbreviation{html}{HTML}{hypertext markup language} +\begin{document} +\GlsXtrStartUnsetBuffering +\ul{Some text about \mbox{\gls{html}}.} +\GlsXtrStopUnsetBuffering +Next use: \gls{html}. +\end{document} + +

    Before you stop the unset buffering, you can iterate over the current buffer using -



    \GlsXtrForUnsetBufferedList{cs}

    -

    +

    where ⟨cs⟩ is a control sequence that takes a single argument (which is the entry label). This is best used with the starred version \GlsXtrStartUnsetBuffering* to avoid duplicates. -

    You can discard the buffer and restore

    You can discard the buffer and restore \glsunset to its normal behaviour with (new to v1.42): -



    \GlsXtrDiscardUnsetBuffering

    -

    -

    Note that since the change in the first use flag now doesn’t occur until +

    +

    Note that since the change in the first use flag now doesn’t occur until \GlsXtrStopUnsetBuffering, multiple references of the same term within the buffering zone will always be treated as first use (if the term wasn’t used before the buffering started).
    -

    -

    There can still be a problem here as content within

    +

    There can still be a problem here as content within \mbox can’t break across a line so you may end up with an overfull line or excessive white space within the paragraph. -

    An alternative is to use

    An alternative is to use \protect:

    -
    +
     \GlsXtrStartUnsetBuffering
    - 
    \ul{Some text about \protect\gls{html}.} - 
    \GlsXtrStopUnsetBuffering -
    -

    but the formatting (underlining in this example) won’t be applied. Another +\ul{Some text about \protect\gls{html}.} +\GlsXtrStopUnsetBuffering + +

    but the formatting (underlining in this example) won’t be applied. Another possibility is:

    -
    +
     \usepackage[T1]{fontenc}
    - 
    \usepackage{soul} - 
    \usepackage{glossaries-extra} - 
    \newabbreviation{html}{HTML}{hypertext markup language} - 
    \newrobustcmd{\gul}[1]{% - 
      {% - 
       \def\glsxtrabbreviationfont##1{\GlsXtrExpandedFmt{\ul}{##1}}% - 
       \def\glsxtrregularfont##1{\GlsXtrExpandedFmt{\ul}{##1}}% - 
       #1% - 
      }% - 
    } - 
    \begin{document} - 
    \ul{Some text about }\gls[textformat=gul]{html}. - 
    Next use: \gls{html}. - 
    \end{document} -
    -

    This moves +

    This moves \gls outside of \ul and uses textformattextformat\gul, which locally changes the regular font and the default abbreviation font to use \ul. It then uses -



    \GlsXtrExpandedFmt{cs}{text}

    -

    +

    which (protected) fully expands ⟨text⟩ before applying ⟨cs⟩, which must be a control @@ -4678,12 +5004,12 @@ something that \ul can’t deal with. For example, if an abbreviation style is used that contains complex formatting or if the field value contains problematic content. -

    +

    -

    Top

    2.7 Plurals

    -

    Some languages, such as English, have a general rule that plurals are formed from +

    Some languages, such as English, have a general rule that plurals are formed from the singular with a suffix appended. This isn’t an absolute rule. There are plenty of exceptions (for example, geese, children, churches, elves, fairies, sheep). The

    To make life easier for languages where the majority of plurals can simply be +

    To make life easier for languages where the majority of plurals can simply be formed by appending a suffix to the singular, the glossaries package lets the plural supplied as well, and you only need to use it for the exceptions. -

    For languages that don’t have this general rule, the

    For languages that don’t have this general rule, the plural field will always need to be supplied, where needed. -

    There are other plural fields, such as

    There are other plural fields, such as firstplural, longpluralshortplural

    If these fields are omitted, the

    If these fields are omitted, the glossaries package follows these rules:

      -
    • If +

      If firstplural is missing, then \glspluralsuffix is appended to the text field) with \glspluralsuffix appended. -

    • -
    • If the
    • +
    • +

      If the longplural field is missing, then \glspluralsuffix is appended to @@ -4773,8 +5101,9 @@ class="cmss-10">long field, if the long field has been supplied. -

    • -
    • If the
    • +
    • +

      If the shortplural field is missing then, with the base \acrpluralsuffix is appended to the short field. +

    -

    This

    This last case is changed with glossaries-extra. With this extension package, the \abbrvpluralsuffix is redefined. In most cases its redefined to use -



    \glsxtrabbrvpluralsuffix

    -

    +

    which defaults to just \glspluralsuffix. Some of the abbreviation styles have their + + + own command for the plural suffix, such as \glsxtrscsuffix, so if you want to completely strip all the plural suffixes used for abbreviations then you need to @@ -4819,10 +5152,7 @@ class="cmtt-10">\abbrvpluralsuffix, which changes with the style. Redefining \acrpluralsuffix will have no affect, since it’s not used by the new abbreviation mechanism. - - - -

    If you require a mixture (for example, in a multilingual document), there are two +

    If you require a mixture (for example, in a multilingual document), there are two attributes that affect the short plural suffix formation. The first is aposplural -

    -

    That is, an apostrophe followed by +

    That is, an apostrophe followed by \abbrvpluralsuffix is appended. The second attribute is shortpluralshort. -

    +

    -

    Top

    2.8 Nested Links

    -

    Complications arise when you use

    Complications arise when you use \gls in the value of the name

    Things can go wrong if we try the following with the

    Things can go wrong if we try the following with the glossaries package:

    -
    +
     \newacronym{ssi}{SSI}{Server Side Includes}
    - 
    \newacronym{html}{HTML}{Hypertext Markup Language} - 
    \newacronym{shtml}{S\gls{html}}{\gls{ssi} enabled \gls{html}} -
    -

    -

    The main problems are: +\newacronym{html}{HTML}{Hypertext Markup Language} +\newacronym{shtml}{S\gls{html}}{\gls{ssi} enabled \gls{html}} + +

    +

    The main problems are:

      -
    1. +

      The first letter upper casing commands, such as \Gls, won’t work for the @@ -4892,28 +5223,30 @@ href="#glo:firstuse">first use if the long form is displayed before the shor -

      +

      +
            \gls{\uppercase ssi} enabled \gls{html}
      -
      -

      which just doesn’t work. Grouping the +

      which just doesn’t work. Grouping the \gls{ssi} doesn’t work either as this will effectively try to do

      -
      +
            \uppercase{\gls{ssi}} enabled \gls{html}
      -
      -

      This will upper case the label +

      This will upper case the label ssi so the entry won’t be recognised. This problem will also occur if you use the all capitals version, such as \GLS.

    2. -
    3. +

      The long and abbreviated forms accessed through \glsentrylong and @@ -4921,16 +5254,18 @@ class="cmtt-10">\glsentrylong\glsentryshort are no longer expandable and so can’t be used be used in contexts that require this, such as PDF bookmarks. -

    4. -
    5. +
    6. +

      The nested commands may end up in the sort key, which will confuse the indexing. -

    7. -
    8. +
    9. +

      The shtml entry produces inconsistent results depending on whether the ssi @@ -4943,18 +5278,19 @@ class="cmtt-10">shtml. For example: -

      +

      +
            This section discusses \gls{ssi}, \gls{html} and \gls{shtml}.
      -
      -

      This produces: -

      -

      This section discusses server side includes (SSI), hypertext - markup language (HTML) and SSI enabled HTML (SHTML).

      -

      So the +

      This produces: +

      +

      This section discusses server side includes (SSI), hypertext + markup language (HTML) and SSI enabled HTML (SHTML).

      +

      So the first use of the shtml entry produces “SSI enabled HTML (SHTML)”. -

      Now let’s suppose the

      Now let’s suppose the html entry is used before the shtml but the ssi entry is @@ -4964,41 +5300,41 @@ class="cmtt-10">shtml entry, for example:

      -
      +
            The sample files are either \gls{html} or \gls{shtml}, but let's
      -      
      first discuss \gls{ssi}. -
      -

      This produces: -

      -

      The sample files are either hypertext markup language (HTML) + first discuss \gls{ssi}. + +

      This produces: +

      +

      The sample files are either hypertext markup language (HTML) or server side includes (SSI) enabled HTML (SHTML), but let’s - first discuss SSI.

      -

      So the +

      So the first use of the shtml entry now produces “server side includes (SSI) enabled HTML (SHTML)”, which looks a bit strange. -

      Now let’s suppose the

      Now let’s suppose the shtml entry is used before (or without) the other two entries:

      -
      +
            This article is an introduction to \gls{shtml}.
      -
      -

      This produces: -

      -

      This article is an introduction to server side includes (SSI) - enabled hypertext markup language (HTML) (SHTML).

      -

      So the +

      This produces: +

      +

      This article is an introduction to server side includes (SSI) + enabled hypertext markup language (HTML) (SHTML).

      +

      So the first use of the shtml entry now produces “server side includes (SSI) enabled hypertext markup language (HTML) (SHTML)”, which is even more strange. -

      This is all aggravated by setting the style using the

      This is all aggravated by setting the style using the glossaries package’s \setacronymstyle. For example: @@ -5006,10 +5342,10 @@ class="cmtt-10">\setacronymstyle. For example:

      -
      +
            \setacronymstyle{long-short}
      -
      -

      as this references the label through the use of +

      as this references the label through the use of \glslabel when displaying the long and short forms, but this value changes with each use of \gls, so @@ -5021,7 +5357,7 @@ class="cmtt-10">\glslabel has been changed to html by \gls{html}. -

      Another oddity occurs if you reset the

      Another oddity occurs if you reset the html entry between uses of the shtml entry. For example: @@ -5029,13 +5365,13 @@ class="cmtt-10">shtml

      -
      +
            \gls{shtml} ... \glsreset{html}\gls{shtml}
      -
      -

      The next use of +

      The next use of shtml produces “Shypertext markup language (HTML)”, which is downright weird. -

      Even without this, the short form has nested formatting commands, which +

      Even without this, the short form has nested formatting commands, which amount to \acronymfont{S\acronymfont{HTML}}. This may not be a problem for some styles, but if you use one of the “sm” styles (that use \textsmaller), this will produce an odd result.

    10. -
    11. +

      Each time the shtml entry is used, the html entry will also be indexed and @@ -5055,9 +5392,10 @@ class="cmtt-10">ssi and html entries. This kind of duplication in the location list isn’t usually particularly helpful to the reader. -

    12. -
    13. +
    14. +

      If hyperref is in use, you’ll get nested hyperlinks and there’s no consistent way @@ -5067,8 +5405,9 @@ class="cmss-10">hyperref

    -

    For these reasons it’s better to use the simple expandable commands +

    For these reasons it’s better to use the simple expandable commands like \glsentrytext or -

    +
     \newacronym
    - 
     [description={\acrshort{ssi} enabled \acrshort{html}}] - 
     {shtml}{SHTML}{SSI enabled HTML} -
    -

    with +

    with glossaries or:

    -
    +
     \newabbreviation
    - 
     [description={\glsxtrshort{ssi} enabled \glsxtrshort{html}}] - 
     {shtml}{SHTML}{SSI enabled HTML} -
    -

    with +

    with glossaries-extra. This fixes all the above listed problems (as long as you don’t use \glsdescfirst use issue, but it doesn’t fix any of the other problems listed above. -

    If it’s simply that you want to use the abbreviation font, you can use +

    If it’s simply that you want to use the abbreviation font, you can use \glsabbrvfont:

    -
    +
     \setabbreviationstyle{long-short-sc}
    - 
    \newabbreviation{ssi}{ssi}{server-side includes} - 
    \newabbreviation{html}{html}{hypertext markup language} - 
    \newabbreviation{shtml}{shtml}{\glsabbrvfont{ssi} enabled - 
    \glsabbrvfont{html}} -
    -

    This will pick up the font style setting of the outer entry (shtml, in the above case). +\newabbreviation{ssi}{ssi}{server-side includes} +\newabbreviation{html}{html}{hypertext markup language} +\newabbreviation{shtml}{shtml}{\glsabbrvfont{ssi} enabled +\glsabbrvfont{html}} + +

    This will pick up the font style setting of the outer entry (shtml, in the above case). This isn’t a problem in the above example as all the abbreviations use the same style. -

    However if you’re really determined to use

    However if you’re really determined to use \gls in a field that may be included within some -

    -

    is treated as + +

    is treated as

    -
    +
     {\glstext[hyper=false,noindex]{ssi}} enabled
    - 
    {\glstext[hyper=false,noindex]{html}} -
    -

    This overcomes problems  +

    This overcomes problems 4, 5 and 6 listed above, but still doesn’t fix problems long-noshort-desc). -

    Additionally, any instance of the long form commands, such as

    Additionally, any instance of the long form commands, such as \glsxtrlong or shtml entry had instead been defined as: -

    +
     \newacronym{shtml}{SHTML}{\acrshort{ssi} enabled \acrshort{html}}
    -
    -

    then (using the +

    then (using the long-short style) the first use will be like

    -
    +
     {\acronymfont{\glsentryshort{ssi}}} enabled
    - 
    {\acronymfont{\glsentryshort{html}}} (SHTML) -
    -

    whereas if the entry is defined as: +{\acronymfont{\glsentryshort{html}}} (SHTML) + +

    whereas if the entry is defined as:

    -
    +
     \newabbreviation{shtml}{SHTML}{\glsxtrshort{ssi} enabled
    - 
    \glsxtrshort{html}} -
    -

    then the +

    then the first use will be like:

    -
    +
     {\glsabbrvfont{\glsentryshort{ssi}}} enabled
    - 
    {\glsabbrvfont{\glsentryshort{html}}} (SHTML) -
    -

    Note that the first optional argument of +

    Note that the first optional argument of \acrshort or \glsxtrshort is ignored in this context. (The final optional argument will be inserted, if present.) The @@ -5256,15 +5595,15 @@ class="cmtt-10">\glsxtrshort. Note that \acrshort doesn’t set the abbreviation style. -

    Alternatively you can use: -


    Alternatively you can use: +


    \glsxtrp{field}{label}

    -

    +

    where ⟨field⟩ is the field label and corresponds to a command in the form \gls\glstext) or in the form \glsxtrfield⟩ (e.g. \glsxtrshort). -

    There’s a shortcut command for the most common fields: -


    There’s a shortcut command for the most common fields: +


    \glsps{label}

    -

    +

    which is equivalent to \glsxtrp{short}{label}, and -



    \glspt{label}

    -

    +

    which is equivalent to \glsxtrp{text}{label}. -

    The

    The \glsxtrp command behaves much like the \glsfmtfield⟩ commands described in §5 Entries in Sectioning Titles, Headers, Captions and Contents but the post-link -hook is also suppressed and extra grouping is added. It automatically sets -§??sec:headtitle Entries in Sectioning Titles, Headers, Captions and Contents but +the post-link hook is also suppressed and extra grouping is added. It automatically +sets hyper to false and noindex to true. If you want to change this, you can use -



    \glsxtrsetpopts{options}

    -

    +

    For example:

    -
    +
     \glsxtrsetpopts{hyper=false}
    -
    -

    will just switch off the hyperlinks but not the indexing. Be careful using + +

    will just switch off the hyperlinks but not the indexing. Be careful using this command or you can end up back to the original problem of nested links. -

    The hyper link is re-enabled within glossaries. This is done through the +

    The hyper link is re-enabled within glossaries. This is done through the command: -



    \glossxtrsetpopts

    -

    +

    which by default just does

    -
    +
     \glsxtrsetpopts{noindex}
    -
    -

    You can redefine this if you want to adjust the setting when +

    You can redefine this if you want to adjust the setting when \glsxtrp is used in the glossary. For example:

    -
    +
     \renewcommand{\glossxtrsetpopts}{\glsxtrsetpopts{noindex=false}}
    -
    -

    -

    For example, + +

    +

    For example,

    -
    +
     \glsxtrp{short}{ssi}
    -
    -

    is equivalent to + +

    is equivalent to

    -
    +
     {\let\glspostlinkhook\relax
    - 
     \glsxtrshort[hyper=false,noindex]{ssi}[]% - 
    } -
    -

    in the main body of the document or + \glsxtrshort[hyper=false,noindex]{ssi}[]% +} + +

    in the main body of the document or

    -
    +
     {\let\glspostlinkhook\relax
    - 
     \glsxtrshort[noindex]{ssi}[]% - 
    } -
    -

    inside the glossary. (Note the post-link hook is locally disabled.) -

    If +

    inside the glossary. (Note the post-link hook is locally disabled.) +

    If \glsxtrp{short}{ssi} occurs in a sectioning mark, it’s equivalent to

    -
    +
     {\glsxtrheadshort{ssi}}
    -
    -

    (which recognises the +

    (which recognises the headuc attribute.) -

    If

    If hyperref has been loaded, then the bookmark will use \glsentryfield⟩ (\glsentryshort{ssi} in the above example). -

    There are similar commands -


    There are similar commands +


    \Glsxtrp{field}{label}

    -

    +

    for first letter upper case and -



    \GLSxtrp{field}{label}

    -

    +

    for all upper case. -

    If you use any of the case-changing commands, such as

    If you use any of the case-changing commands, such as \Gls or \Glstext\gls\glstext, in the definition of entries for any of the fields that may be used by those case-changing commands.
    -

    -

    You can, with care, protect against issue 

    +

    You can, with care, protect against issue 1 by inserting an empty group at the start if the long form starts with a command that breaks the first letter uppercasing commands like \Gls, but you still won’t be able to use the all caps commands, such as \GLS. -

    If you

    If you really need nested commands, the safest method is

    -
    +
     \newabbreviation{shtml}{shtml}{{}\glsxtrp{short}{ssi} enabled
    - 
    \glsxtrp{short}{html}} -
    -

    but be aware that it may have some unexpected results occasionally. -

    Example document: +\glsxtrp{short}{html}} + +

    but be aware that it may have some unexpected results occasionally. +

    Example document:

    -
    +
     \documentclass{report}
    - 
    \usepackage[utf8]{inputenc} - 
    \usepackage[T1]{fontenc} - 
    \usepackage{slantsc} - 
    \usepackage[colorlinks]{hyperref} - 
    \usepackage[nopostdot=false]{glossaries-extra} - 
    \makeglossaries - 
    \setabbreviationstyle{long-short-sc} - 
    \newabbreviation{ssi}{ssi}{server-side includes} - 
    \newabbreviation{html}{html}{hypertext markup language} - 
    \newabbreviation{shtml}{shtml}{{}\glsps{ssi} enabled {}\glsps{html}} - 
    \pagestyle{headings} - 
    \glssetcategoryattribute{abbreviation}{headuc}{true} - 
    \glssetcategoryattribute{abbreviation}{glossdesc}{title} - 
    \begin{document} - 
    \tableofcontents - 
    \chapter{\glsfmtfull{shtml}} - 
    First use: \gls{shtml}, \gls{ssi} and \gls{html}. - 
    Next use: \gls{shtml}, \gls{ssi} and \gls{html}. - 
    \newpage - 
    Next page. - 
    \printglossaries - 
    \end{document} -
    -

    -

    -

    -

    +

    +

    +

    +

    Top

    2.9 Acronym Style Modifications

    -

    The

    The glossaries-extra package provides a new way of dealing with abbreviations and @@ -5502,21 +5842,22 @@ class="cmtt-10">\newacronym to use \newabbreviation (see §4 Abbreviations). The -simplest way to update a document that uses \newacronym from glossaries to +class="tcrm-1000">§??sec:abbreviations +Abbreviations). The simplest way to update a document that uses \newacronym from glossaries to glossaries-extra is do just add

    -
    +
     \setabbreviationstyle[acronym]{long-short}
    -
    -

    before you define any entries. If you have used commands like +

    before you define any entries. If you have used commands like \acrshort, \acrlong\glsxtrshort\acrshort etc. -

    For example, the following document using just

    For example, the following document using just glossaries

    -
    +
     \documentclass{article}
    - 
    \usepackage[acronym,nopostdot,toc]{glossaries} - 
    \makeglossaries - 
    \setacronymstyle{long-short} - 
    \newacronym{html}{HTML}{hypertext markup language} - 
    \begin{document} - 
    \gls{html} - 
    \printglossaries - 
    \end{document} -
    -

    can be easily adapted to use +

    can be easily adapted to use glossaries-extra:

    -
    +
     \documentclass{article}
    - 
    \usepackage[acronym]{glossaries-extra} - 
    \makeglossaries - 
    \setabbreviationstyle[acronym]{long-short} - 
    \newacronym{html}{HTML}{hypertext markup language} - 
    \begin{document} - 
    \gls{html} - 
    \printglossaries - 
    \end{document} -
    -

    Table  +

    Table 2.1 lists the nearest equivalent glossaries-extra abbreviation styles for the predefined acronym styles provided by glossaries, but note that the new styles use different formatting commands. See §4.4 Predefined Abbreviation Styles for further -details. +class="tcrm-1000">§??sec:predefabbrvstyles Predefined +Abbreviation Styles for further details.

    -


    @@ -5618,39 +5960,39 @@ class="cmtt-10">]{⟨new-style-name}

    Old Style Name

    New Style Name

    long-sc-short

    long-short-sc

    long-sm-short

    long-short-sm

    long-sp-short

    long-short
    #1}}

    short-long

    short-long

    sc-short-long

    short-sc-long

    sm-short-long

    short-sm-long

    long-short-desc

    long-short-desc

    long-sc-short-desc

    long-short-sc-desc

    long-sm-short-desc

    long-short-sm-desc

    long-sp-short-desc

    long-short-desc
    #1}}

    short-long-desc

    short-long-desc

    sc-short-long-desc

    short-sc-long-desc

    sm-short-long-desc

    short-sm-long-desc

    dua

    long-noshort

    dua-desc

    long-noshort-desc

    footnote

    short-footnote

    footnote-sc

    short-sc-footnote

    footnote-sm

    short-sm-footnote

    footnote-desc

    short-footnote-desc

    footnote-sc-desc

    short-sc-footnote-desc

    footnote-sm-desc

    short-sm-footnote-desc

    @@ -5843,7 +6185,7 @@ class="cmss-10">short-sm-footnote-desc
    -

    The reason for introducing the new style of abbreviation commands provided by +

    The reason for introducing the new style of abbreviation commands provided by glossaries-extra is because the original acronym commands provided by glossaries are @@ -5852,13 +6194,13 @@ class="cmss-10">glossaries-extra. However, if you really want to restore the generic acronym function provided by glossaries you can use -



    \RestoreAcronyms

    -

    +

    (before any use of \newacronym). -

    \RestoreAcronyms should not be used in combination with the newer glossaries-extra abbreviations. Don’t combine old and new style entries with the same @@ -5868,7 +6210,7 @@ class="cmss-10">typeglossaries acronym mechanism doesn’t work well with the newer glossaries-extra commands. -

    If you use

    -

    -

    In general, there’s rarely any need for \RestoreAcronyms. If you have a -document that uses

    +

    In general, there’s rarely any need for \RestoreAcronyms. If you have a document +that uses \newacronymstyle, then it’s best to either stick with just -glossaries for that document or define an equivalent abbreviation style with -, then it’s best to either stick with just glossaries for that +document or define an equivalent abbreviation style with \newabbreviationstyle. (See . +(See §4.5 §??sec:newabbrvstyle Defining New Abbreviation Styles for further details.) -



    \glsacspace{label}

    -

    +

    The space command \glsacspace used by the long-sp-short acronym style provided by glossaries is modified so that it uses -



    \glsacspacemax

    -

    +

    instead of the hard-coded 3em. This is a command not a length and so can be changed using \renewcommand. -

    Any of the new abbreviation styles that use

    Any of the new abbreviation styles that use \glsxtrfullsep (such as \glsacspace with

    -
    +
     \renewcommand*{\glsxtrfullsep}[1]{\glsacspace{#1}}
    -
    -

    -

    The +

    +

    The first use acronym font command -



    \firstacronymfont{text}

    -

    +

    is redefined to use the first use abbreviation font command \glsfirstabbrvfont. This will be reset if you use \RestoreAcronyms. -

    The subsequent use acronym font command -


    The subsequent use acronym font command +


    \acronymfont{text}

    -

    +

    is redefined to use the subsequent use abbreviation font command \glsabbrvfont. This will be reset if you use \RestoreAcronyms.

    -

    Top

    2.10 Glossaries

    -

    The

    The \newignoredglossary{targeturl attribute to create a link to an external URL. (See attribute to create a link to an external URL. (See +§6 -Categories for further details.) As from v1.12 both the starred and unstarred version -check that the glossary doesn’t already exist. (The glossaries package omits this -check.) -

    You can now provide an ignored glossary with: -


    §??sec:categories Categories for further details.) As from v1.12 both the starred and +unstarred version check that the glossary doesn’t already exist. (The glossaries +package omits this check.) +

    You can now provide an ignored glossary with: +


    \provideignoredglossary{type}

    -

    +

    which will only define the glossary if it doesn’t already exist. This also has a starred version that doesn’t automatically switch off hyperlinks. -

    The individual glossary displaying commands

    The individual glossary displaying commands \printglossary, \printnoidxglossary\printunsrtglossary have extra keys:

      -
    • +

      target. This is a boolean key which can be used to switch off the automatic hypertarget for each entry. Unlike \glsdisablehyper this doesn’t switch -

    • -
    • +
    • +

      targetnameprefix={}. Another way of avoiding duplicate target names class="cmtt-10">\glolinkprefix this doesn’t affect any hyperlinks (such as those created with \gls). -

    • -
    • +
    • +

      prefix={prefix key in commands like \gls. -

    • -
    • +
    • +

      label={} and also defines class="cmtt-10">\@currentlabelname to the glossary’s TOC title (to provide text for \nameref). You can also set the label before the glossary using: -



      \glsxtrsetglossarylabel{label}

      -

      +

      but take care of duplicate labels if it’s not scoped.

    • -
    • +

      groups. This is a boolean key (new to v1.44) designed for use with variations). It has no effect with \printglossary and \printnoidxglossary. -

      If true (default), group formation (group header and group skip) will be +

      If true (default), group formation (group header and group skip) will be attempted if the group key has been defined and set. Note that some styles @@ -6074,7 +6423,8 @@ class="cmss-10">group

    • -
    • +

      leveloffset. This key (new to v1.44) is designed for use with \printunsrtglossary @@ -6084,7 +6434,7 @@ class="cmtt-10">… variations). It has no effect with \printglossary and \printnoidxglossary. -

      The value may either be a simple integer ⟨

      The value may either be a simple integer ⟨n⟩ to indicate assignment or in the form ++n⟩ to indicate an increment. This will locally as class="cmmi-10">N more than it would normally be (where N is the level offset). For example, a top-level entry (that is, an entry without a + + + parent) would normally have a hierarchical level of 0. With a level offset of 1, it would be treated by the glossary style as though it was actually a level 1 entry. (Remember that some styles don’t support hierarchical glossaries.) -

      Note that the group formation (if supported) will still occur between entries +

      Note that the group formation (if supported) will still occur between entries that don’t have a parent, regardless of the level offset. This can cause odd - results.

    - - - -

    + results but can be switched off with groups. See Gallery: Inner or Nested + Glossaries for an example.

    +

    -

    Top

    2.10.1 Glossary Style Modifications

    -

    The

    The glossaries-extra-stylemods package (more conveniently loaded through the glossaries package. These modifications are described in more detail in §2.10.1 §??sec:stylemods The glossaries-extra-stylemods Package. -

    The

    The glossaries package tries to determine the group title from its label by first checking if \glsxtr@grouptitle@label⟩ which shouldn’t clash with another package. You can set the group title using -



    \glsxtrsetgrouptitle{label}{title}

    -

    +

    For example:

    -
    +
     \glsxtrsetgrouptitle{A}{A (a)}
    -
    -

    This uses a global assignment. If you need to scope the change you can + +

    This uses a global assignment. If you need to scope the change you can use -



    \glsxtrlocalsetgrouptitle{label}{title}

    -

    -

    +

    +

    Style Hooks
    -

    The commands

    The commands \glossentryname and \glossentrydescglossdesc and glossdescfont attributes -(see attributes (see +§6 §??sec:categories Categories). This means you can make simple font or case-changing modifications to the name and description without defining a new glossary style. -

    (New to version 1.42.) The command

    (New to version 1.42.) The command \glossentrysymbol is modified to take into account the TeX code⟩ part is robust and deals with the actual typesetting of the symbol. The ⟨PDF⟩ part is simply: -



    \glsentrypdfsymbol{label}

    -

    +

    which is defined to just do \glsentrysymbol{labelsymbol\glsentrypdfsymbol to use a more appropriate field. (If you do redefine this command, remember that it needs to fully expand.) -

    For example, if you are using

    For example, if you are using glossaries-accsupp, you could use the symbolaccess -

    -

    Alternatively, if you are using +

    Alternatively, if you are using bib2gls you can use the TeX parser library to @@ -6270,11 +6626,11 @@ options:

    -
    +
       replicate-fields={symbol=user1},
    - 
      interpret-fields={user1} -
    -

    This stores the interpreted value of the symbol in the +

    This stores the interpreted value of the symbol in the user1 field, so you can then do: @@ -6282,24 +6638,24 @@ do:

    -
    +
     \renewcommand{\glsentrypdfsymbol}[1]{\glsentryuseri{#1}}
    -
    -

    (You may need XƎLATEX or LuaLATEX with this method.) This allows + +

    (You may need XƎLATEX or LuaLATEX with this method.) This allows \glossentrysymbol to be used in a section heading with standalone definitions. -

    If you want to adapt a style to use another field instead of

    If you want to adapt a style to use another field instead of name, you can use -



    \glossentrynameother{label}{field}

    -

    +

    This behaves just like \glossentryname (that is, it obeys description). See the key to field mappings table in the glossaries user manual. -

    There is a hook after

    There is a hook after \glossentryname and \Glossentryname: -



    \glsxtrpostnamehook{label}

    -

    +

    By default this checks the indexname attribute. If the attribute exists for the category to which the label belongs, then the name is automatically indexed using -



    \glsxtrdoautoindexname{}{indexname}

    -

    +

    See §8 §??sec:autoindex Auto-Indexing for further details. -

    As from version 1.04, the post-name hook

    As from version 1.04, the post-name hook \glsxtrpostnamehook will also use \glsxtrpostname -

    +
     \newcommand*{\glsxtrpostnamesymbol}{\space
    - 
     (\glsentrysymbol{\glscurrententrylabel})} -
    -

    For convenience, as from v1.31, you can use -


    +

    For convenience, as from v1.31, you can use +


    \glsdefpostname{category}{definition}

    -

    +

    This is simply a shortcut for:

    definition}
    Note that it doesn’t check if the command has already been defined. -

    As from version 1.25, the post-name hook also does -


    As from version 1.25, the post-name hook also does +


    \glsextrapostnamehook{label}

    -

    +

    (before \glsxtrpostnamecategory⟩) to allow for additional non-category related code. This does nothing by default. -

    The post-description code used within the glossary is modified so that it also +

    The post-description code used within the glossary is modified so that it also does -



    \glsxtrpostdescription

    -

    +

    This occurs before the original \glspostdescription, so if the nopostdot=false option is used, it will be inserted before the terminating full stop. -

    This new command will do

    This new command will do \glsxtrpostdesccategory⟩ if it exists, where ⟨\glsxtrpostdescacronym for entries with the category set class="cmss-10">acronym. For convenience, as from v1.31, you can use -



    \glsdefpostdesc{category}{definition}

    -

    +

    This is simply a shortcut for:

    definition}
    Note that it doesn’t check if the command has already been defined. -

    Since both

    Since both \glossentry and \subglossentry set -



    \glscurrententrylabel

    -

    +

    to the label for the current entry, you can use this within the definition of these post-description hooks if you need to reference the label. -

    For example, suppose you want to insert the plural form in brackets after the +

    For example, suppose you want to insert the plural form in brackets after the description in the glossary, but only for entries in the general category, then you could @@ -6472,14 +6829,14 @@ do:

    -
    +
     \renewcommand{\glsxtrpostdescgeneral}{\space
    - 
     (plural: \glsentryplural{\glscurrententrylabel})} -
    -

    This means you don’t have to define a custom glossary style, which you may find + (plural: \glsentryplural{\glscurrententrylabel})} + +

    This means you don’t have to define a custom glossary style, which you may find more complicated. (It also allows more flexibility if you decide to change the underlying glossary style.) -

    This feature can’t be used for glossary styles that ignore

    This feature can’t be used for glossary styles that ignore \glspostdescription or if you redefine \glspostdescription without including nopostdot option to suppress the terminating full stop.) See §2.10.1 §??sec:stylemods The glossaries-extra-stylemods Package to patch the predefined styles provided by glossaries that are missing \glspostdescription.
    -

    -

    +

    +

    Number List
    -

    The

    The number list is now placed inside the argument of -



    \GlsXtrFormatLocationList{number list}

    -

    +

    This is internally used by \glossaryentrynumbers. The \glossaryentrynumbers so that it doesn’t display th id="dx1-18004">number list, but it still saves the number list in case it’s required. -

    If you want to suppress the

    If you want to suppress the number list always use the nonumberlist option instead of redefining \glossaryentrynumbers to do nothing.
    -

    -

    For example, to change the font for the entire

    +

    For example, to change the font for the entire number list redefine \GlsXtrFormatLocationList as appropriate. Don’t modify \glossaryentrynumbers. -

    Sometimes users like to insert “page” or “pages” in front of the

    Sometimes users like to insert “page” or “pages” in front of the number list. This is quite fiddly to do with the base glossaries package, but glossaries-extra provides a way of doing this. First you need to enable this option and specify the text to display using: -



    \GlsXtrEnablePreLocationTag{page}{pages}

    -

    +

    where ⟨page⟩ is the text to display if the number list only contains a single location and @@ -6559,28 +6917,28 @@ class="cmti-10">pages⟩ is the text to display otherwise. For examp

    -
    +
     \GlsXtrEnablePreLocationTag{Page: }{Pages: }
    -
    -

    An extra run is required when using this command. -

    Use +

    An extra run is required when using this command. +

    Use glsignore not @gobble as the format if you want to suppress the page number (and only index the entry once).
    -

    -

    See the accompanying sample file

    +

    See the accompanying sample file sample-pages.tex. -

    Note that

    Note that bib2gls can be instructed to insert a prefix at the start of non-empty location lists, which can be used as an alternative to \GlsXtrEnablePreLocationTag. -

    Location lists displayed with \printnoidxglossary internally use -



    \glsnoidxdisplayloc{prefixformat}{location}

    -

    +

    This command is provided by glossaries, but is modified by glossaries-extra to check @@ -6600,42 +6958,42 @@ class="cmtt-10">( and ) which are discarded to obtain the actual control sequence name that forms the location formatting command. -

    If the range identifiers aren’t present, this just uses -


    If the range identifiers aren’t present, this just uses +


    \glsxtrdisplaysingleloc{format}{location}

    -

    +

    otherwise it uses -



    \glsxtrdisplaystartloc{format}{location}

    -

    +

    for the start of a range (where the identifier has been stripped from ⟨format⟩) or -



    \glsxtrdisplayendloc{format}{location}

    -

    +

    for the end of a range (where the identifier has been stripped from ⟨format⟩). -

    By default the start range command saves the format in -


    By default the start range command saves the format in +


    \glsxtrlocrangefmt

    -

    +

    and does
    \glsxtrdisplaysingleloc{}
    (If the format is empty, it will be replaced with glsnumberformat.) -

    The end command checks that the format matches the start of the range, +

    The end command checks that the format matches the start of the range, does -



    \glsxtrdisplayendlochook{format}{location}

    -

    +

    (which does nothing by default), followed by
    \glsxtrdisplaysingleloc{}
    and then sets \glsxtrlocrangefmt to empty. -

    This means that the list +

    This means that the list

    -
    +
     \glsnoidxdisplayloc{}{page}{(textbf}{1},
    - 
    \glsnoidxdisplayloc{}{page}{textbf}{1}, - 
    \glsnoidxdisplayloc{}{page}{)textbf}{1}. -
    -

    doesn’t display any differently from +\glsnoidxdisplayloc{}{page}{textbf}{1}, +\glsnoidxdisplayloc{}{page}{)textbf}{1}. + +

    doesn’t display any differently from

    -
    +
     \glsnoidxdisplayloc{}{page}{textbf}{1},
    - 
    \glsnoidxdisplayloc{}{page}{textbf}{1}, - 
    \glsnoidxdisplayloc{}{page}{textbf}{1}. -
    -

    but it does make it easier to define your own custom list handler that can +\glsnoidxdisplayloc{}{page}{textbf}{1}, +\glsnoidxdisplayloc{}{page}{textbf}{1}. + +

    but it does make it easier to define your own custom list handler that can accommodate the ranges. -

    +

    The glossaries-extra-stylemods Package
    -

    As from v1.02,

    As from v1.02, glossaries-extra now includes the package glossaries-extra-stylemods that @@ -6708,12 +7066,12 @@ class="cmss-10">glossaries-extra. For example:

    -
    +
     \usepackage{glossaries-extra}
    - 
    \usepackage{glossary-longragged} - 
    \usepackage{glossaries-extra-stylemods} -
    -

    Alternatively you can load +

    Alternatively you can load glossary-name.sty at the same time by passing ⟨glossaries-extra-stylemods -

    -

    Another option is to use the +

    Another option is to use the stylemods key when you load long3col -

    -

    Or the value of +

    Or the value of stylemods may be a comma-separated list of the style package @@ -6755,19 +7113,19 @@ identifiers. For example:

    -
    +
     \usepackage[style=mcoltree,stylemods=mcols]{glossaries-extra}
    -
    -

    Remember to group the value if it contains any commas: + +

    Remember to group the value if it contains any commas:

    -
    +
     \usepackage[stylemods={mcols,longbooktabs}]{glossaries-extra}
    -
    -

    -

    Note that the +

    +

    Note that the inline style is dealt with slightly differently. The original definition provided by the nopostdot option, but the post-description category hook can still be used. -

    The

    The tabular-like styles, such as \printglossary, \printnoidxglossary or \printunsrtglossary, you must also reset the glossary style. -

    As from version 1.21, the hard-coded

    As from version 1.21, the hard-coded \space before the number list in many of the predefined styles is replaced with -



    \glsxtrprelocation

    -

    +

    This just defaults to \space but may be redefined as required. For example:

    -
    +
     \renewcommand{\glsxtrprelocation}{\dotfill}
    -
    -

    -

    The +

    +

    The list styles use -



    \glslistprelocation

    -

    +

    (which defaults to \glsxtrprelocation) for top-level items and -



    \glslistchildprelocation

    -

    +

    (which defaults to \glslistprelocation) for child items. -

    As from v1.31, the description (including the post-description hook) is governed +

    As from v1.31, the description (including the post-description hook) is governed by: -



    \glslistdesc{label}

    -

    +

    for the list and altlist styles (but not the listdotted variations). -

    For just the

    For just the list style and its letter group variations (not the altlistlistdottednumber list for child entries is followed by -



    \glslistchildpostlocation

    -

    +

    which defaults to a full stop. -

    The default value of

    The default value of \glslistdottedwidth is changed so that it’s set at the start of the document (if it hasn’t been changed in the preamble). This should take into account situations where \hsize isn’t set until the start of the document. -

    The separator between groups (if not

    The separator between groups (if not nogroupskip) is now given by: -



    \glslistgroupskip

    -

    +

    This defaults to \indexspace with penalties to deter page breaks. This command isn’t used if nogroupskip is set. -

    The

    The glossary-tree package introduced new commands in v4.22, \glstreegroupheaderfmt\glstreenamefmt has been defined, as from v1.31 glossaries-extra-stylemods defines: -



    \glstreedefaultnamefmt{text}

    -

    +

    which simply does \textbf{text\glstreegroupheaderfmt and \glstreenavigationfmt all in terms of \glstreedefaultnamefmt. -

    This means that if you want to change all three to use a particular style you only +

    This means that if you want to change all three to use a particular style you only need to redefine \glstreedefaultnamefmt, but if you only want to redefine \glstreenamefmt without affecting the other two commands, then you now can. -

    The separator between groups without headers is given by: -


    The separator between groups without headers is given by: +


    \glstreegroupskip

    -

    +

    This defaults to just \indexspace without penalties. This command isn’t @@ -6967,24 +7325,24 @@ class="cmss-10">nogroupskip\glstreeheadergroupskip in v1.42 as they are inappropriate when there’s no header.) -

    The separator between groups with headers is now given by (as from +

    The separator between groups with headers is now given by (as from v1.42): -



    \glstreegroupheaderskip

    -

    +

    This defaults to \glstreegroupskip with penalties to deter page breaks after the group heading. -

    The styles that display the group titles now use: -


    The styles that display the group titles now use: +


    \glstreePreHeader{label}{title}

    -

    +

    where ⟨label⟩ is the group label and ⟨title⟩ is the group title. This does nothing by @@ -6996,345 +7354,378 @@ then:

    -
    +
     \renewcommand{\glstreePreHeader}[2]{%
    - 
     \pdfbookmark[1]{#2}{\currentglossary.#1}% - 
    } -
    -

    will insert section-level bookmarks. The use of +

    will insert section-level bookmarks. The use of \currentglossary helps to provide unique bookmark labels in the event of multiple glossaries. -

    The

    The glossary-tree package provides the commands +


    \glstreepredesc

    +

    +and +


    \glstreechildpredesc

    +

    +(which both default to a space) and uses them in the tree-like styles, but not for the +alttree style. The glossaries-extra-stylemods package modifies the alttree style so that it +has equivalent hooks: +


    \glsalttreepredesc

    +

    +and +


    \glsalttreechildpredesc

    +

    +These do nothing by default. +

    The index-like and -like and tree-like styles insert the pre--like styles insert the pre-number list space with -



    \glstreeprelocation

    -

    +

    (which defaults to \glsxtrprelocation) for top-level items and -



    \glstreechildprelocation

    -

    +

    (which defaults to \glstreeprelocation) for child items. -

    As from version 1.31, the

    As from version 1.31, the glossaries-extra-stylemods package also provides: -



    \glstreenonamedesc{label}

    -

    +

    which is used by the treenoname styles to display the pre-description separator, the + id="dx1-19060"> styles to display the pre-description separator, the description and the post-description hook. Similarly for the symbol: -



    \glstreenonamesymbol{label}

    -

    +

    The above are just used for top-level entries. Child entries don’t have the name or symbol displayed for the treenoname styles, so there’s only a command for the child + id="dx1-19062"> styles, so there’s only a command for the child description: -



    \glstreenonamechilddesc{label}

    -

    -

    For the

    + + + +

    For the tree styles (but not the styles (but not the treenoname or or alttree styles), the description is + id="dx1-19066"> styles), the description is displayed using: -



    \glstreedesc{label}

    -

    +

    and the symbol with: -



    \glstreesymbol{label}

    -

    +

    Again the above two commands are just for top-level entries. The child entries use: -



    \glstreechilddesc{label}

    -

    +

    for the description and -



    \glstreechildsymbol{label}

    -

    +

    for the symbol. As from version 1.41, there are now wrapper commands for \glstreedesc and \glstreechilddesc that check for the description - - - and symbol to determine what separator to use before the page list. These are: -



    \glstreeDescLoc{label}{location}

    -

    +

    for top-level entries and -



    \glstreeChildDescLoc{label}{location}

    -

    +

    for sub-entries. -

    If either the symbol or description is present these will use

    If either the symbol or description is present these will use \glstreeprelocation or \glstreechildprelocation, respectively. Otherwise, both will use (from v1.42): -



    \glstreeNoDescSymbolPreLocation

    -

    +

    The default is a space. This means that you could have, say, a comma followed by a space for terms that are simply an alias, but just have a space for terms that have a description that ends with a full stop (or that just have a symbol without a description) where the comma would be inappropriate. -

    Note that version 1.42 has corrected an error that was introduced to v1.41 that +

    Note that version 1.42 has corrected an error that was introduced to v1.41 that caused the name to run into the location list if there was no symbol and no description. -

    As from version 1.05, the

    As from version 1.05, the glossaries-extra-stylemods package provides some additional commands for use with the alttree style to make it easier to modify. These + id="dx1-19074"> style to make it easier to modify. These commands are only defined if the glossary-tree package has already been loaded, + id="dx1-19075"> package has already been loaded, which is typically the case unless the notree option has been used when loading + id="dx1-19076"> option has been used when loading glossaries. -



    \gglssetwidest[level]{name}

    -

    +

    (New to version 1.21.) This is like \glssetwidest (provided by glossary-tree) but + id="dx1-19078">) but performs a global assignment. -



    \eglssetwidest[level]{name}

    -

    + + + +

    This is like \glssetwidest but performs a protected expansion on ⟨name⟩. This has a localised effect. For a global setting, use -



    \xglssetwidest[level]{name}

    -

    +

    The following only set the value if ⟨name⟩ is wider than the current value (new to version 1.23). Local update: -



    \glsupdatewidest[level]{name}

    -

    +

    Global update: -



    \gglsupdatewidest[level]{name}

    -

    +

    Locale update (expands ⟨name⟩): -



    \eglsupdatewidest[level]{name}

    -

    +

    Global update (expands ⟨name⟩): - - - -



    \xglsupdatewidest[level]{name}

    -

    -

    The widest entry value can later be retrieved using -


    +

    The widest entry value can later be retrieved using +


    \glsgetwidestname

    -

    +

    for the top-level entries and -



    \glsgetwidestsubname{level}

    -

    +

    for sub-entries, where ⟨level⟩ is the level number. -

    Note that if you are using

    Note that if you are using bib2gls, you can use the resource option set-widest which will try to determine the widest name of all the selected entries. This isn’t guaranteed to work as it may depend on fonts or commands that bib2gls can’t replicate, but it should be suitable for names that just consist of text, and can be more efficient than iterating over all the defined entries using TeX. -

    The command

    The command \glsfindwidesttoplevelname provided by glossary-tree has a + id="dx1-19089"> has a CamelCase synonym: -



    \glsFindWidestTopLevelName[glossary list]

    -

    +

    Similar commands are also provided: -



    \glsFindWidestUsedTopLevelName[glossary list]

    -

    +

    This has an additional check that the entry has been used. Naturally this is only useful if the glossaries that use the alttree style occur at the end of the document. + id="dx1-19092"> style occur at the end of the document. This command should be placed just before the start of the glossary. (Alternatively, place it at the end of the document and save the value in the auxiliary file for the next run.) -



    \glsFindWidestUsedAnyName[glossary list]

    -

    + + + +

    This is like the previous command but if doesn’t check the parent key. This is useful if + id="dx1-19094"> key. This is useful if all levels should have the same width for the name. -



    \glsFindWidestAnyName[glossary list]

    -

    +

    This is like the previous command but doesn’t check if the entry has been used. -



    \glsFindWidestUsedLevelTwo[glossary list]

    -

    +

    This is like \glsFindWidestUsedTopLevelName but also sets the first two sub-levels as well. Any entry that has a great-grandparent is ignored. -



    \glsFindWidestLevelTwo[glossary list]

    -

    +

    This is like the previous command but doesn’t check if the entry has been used. -



    \glsFindWidestUsedAnyNameSymbol[glossary list]{register}

    - - - -

    +

    This is like \glsFindWidestUsedAnyName but also measures the symbol. The length of the widest symbol is stored in ⟨register⟩. -



    \glsFindWidestAnyNameSymbol[glossary list]{register}

    -

    +

    This is like the previous command but it doesn’t check if the entry has been used. -



    \glsFindWidestUsedAnyNameSymbolLocation[glossary list]{register}{location register}

    -

    +

    This is like \glsFindWidestUsedAnyNameSymbol but also measures the number list. This requires \glsentrynumberlist (see the (see the glossaries user manual). The length of the widest symbol is stored in ⟨symbol register⟩ and the length of the widest number + id="dx1-19103">number list is stored in ⟨location register⟩. -



    \glsFindWidestAnyNameSymbolLocation[glossary list]{register}{location register}

    -

    +

    This is like the previous command but it doesn’t check if the entry has been used. -



    \glsFindWidestUsedAnyNameLocation[glossary list]{register}

    -

    +

    This is like \glsFindWidestUsedAnyNameSymbolLocation but doesn’t measure the symbol. The length of the widest number list is stored in ⟨number list is stored in ⟨register⟩. -



    \glsFindWidestAnyNameLocation[glossary list]{register}

    -

    +

    This is like the previous command but doesn’t check if the entry has been used. -

    The layout of the symbol, description and number list is governed by -


    The layout of the symbol, description and number list is governed by + + + +


    \glsxtralttreeSymbolDescLocation{label}{number list}

    -

    +

    for top-level entries and -



    \glsxtralttreeSubSymbolDescLocation{label}{number list}

    -

    +

    for sub-entries. -

    There is now a user level command that performs the initialisation for the

    There is now a user level command that performs the initialisation for the alttree + id="dx1-19111"> style: -



    \glsxtralttreeInit

    -

    -

    The paragraph indent for subsequent paragraphs in multi-paragraph descriptions +

    +

    The paragraph indent for subsequent paragraphs in multi-paragraph descriptions is provided by the length -



    \glsxtrAltTreeIndent

    -

    - - - -

    For additional commands that are available with the

    +

    For additional commands that are available with the alttree style, + id="dx1-19114"> style, see the documented code (glossaries-extra-code.pdf). See also the accompanying sample files sample-alttree-marginpar.tex.

    -

    -

    +

    Top

    3. New Glossary Styles

    -

    The

    The glossaries-extra package comes with some new styles. The associated style package needs to be loaded. This can be done with \usepackage but it’s simpler to @@ -7460,11 +7851,11 @@ href="#styopt.stylemods">stylemods option.

    -

    Top

    3.1 glossary-bookindex package

    -

    As from v1.21,

    As from v1.21, glossaries-extra has a new supplementary package glossary-bookindex @@ -7480,12 +7871,12 @@ style:

    -
    +
     \usepackage{glossaries-extra}
    - 
    \usepackage{glossary-bookindex} - 
    \setglossarystyle{bookindex} -
    -

    or use both the +

    or use both the stylemods and style -

    -

    The +

    The bookindex style only supports a maximum hierarchical level of 2 (top-level, level 1 and level 2). It’s primarily designed for use with record package option.) -

    The number of columns is given by -


    The number of columns is given by +


    \glsxtrbookindexcols

    -

    +

    which defaults to 2. -

    This style uses the

    This style uses the multicols environment. If the command -



    \glsxtrbookindexcolspread

    -

    +

    isn’t empty then it’s supplied as the optional argument following \begin{multicols} multicolsmulticols* by redefining -



    \glsxtrbookindexmulticolsenv

    -

    +

    For example

    -
    +
     \renewcommand{\glsxtrbookindexmulticolsenv}{multicols*}
    -
    -

    -

    Each top-level entry is displayed using -


    +

    +

    Each top-level entry is displayed using +


    \glsxtrbookindexname{label}

    -

    +

    where the entry is identified by ⟨label⟩. This just does \glossentryname{ -

    +
     \renewcommand*{\glsxtrbookindexname}[1]{%
    - 
     \glossentryname{#1}% - 
     \ifglshassymbol{#1}{\space (\glossentrysymbol{#1})}{}% - 
    } -
    -

    or if you want the description (if set): + \glossentryname{#1}% + \ifglshassymbol{#1}{\space (\glossentrysymbol{#1})}{}% +} + +

    or if you want the description (if set):

    -
    +
     \renewcommand*{\glsxtrbookindexname}[1]{%
    - 
     \glossentryname{#1}% - 
     \ifglshasdesc{#1}{\space \glossentrydesc{#1}\glspostdescription}{}% - 
    } -
    -

    (which picks up the post-description hook). -

    Alternatively you can use the +

    (which picks up the post-description hook). +

    Alternatively you can use the \glsxtrpostnamecategory⟩ hook to append information after the name according to the entry’s category. -

    Sub-entries are displayed using -


    Sub-entries are displayed using +


    \glsxtrbookindexsubname{label}

    -

    +

    which just defaults to \glsxtrbookindexname{label}. -

    The separator used before the location list for top-level entries is given +

    The separator used before the location list for top-level entries is given by -



    \glsxtrbookindexprelocation{label}

    -

    +

    where ⟨label⟩ is the entry’s label. This checks if the location field has been set. If it @@ -7621,10 +8012,10 @@ has, it does

    -
    +
     ,\glsxtrprelocation
    -
    -

    otherwise it just does +

    otherwise it just does \glsxtrprelocation (which defaults to \space). If you’re not using bib2gls, the location field won’t be set. -

    The separator used before the location list for sub-entries is given by -


    The separator used before the location list for sub-entries is given by +


    \glsxtrbookindexsubprelocation{label}

    -

    +

    which defaults to \glsxtrbookindexprelocation{label}. -

    The actual location list is encapsulated with: -


    The actual location list is encapsulated with: +


    \glsxtrbookindexlocation{label}{location list}

    -

    +

    for top-level entries and -



    \glsxtrbookindexsublocation{label}{location list}

    -

    +

    for sub-entries. These both just do ⟨location list⟩ by default. -

    The separator used between a top-level parent and child entry is given +

    The separator used between a top-level parent and child entry is given by -



    \glsxtrbookindexparentchildsep

    -

    +

    This defaults to \nopagebreak. -

    The separator used between a sub-level parent and child entry is given +

    The separator used between a sub-level parent and child entry is given by -



    \glsxtrbookindexparentsubchildsep

    -

    +

    This defaults to \glsxtrbookindexparentchildsep. -

    The separator between top-level entries is given by -


    The separator between top-level entries is given by +


    \glsxtrbookindexbetween{label1}{label2}

    -

    +

    This comes after the entry given by ⟨label1⟩, if the entry has no children, or after the last descendent otherwise, so it always comes immediately before the entry given by ⟨label2⟩ unless the entry occurs at the start of a group. This does nothing by default. -

    The separator between two level 1 entries is given by -


    The separator between two level 1 entries is given by +


    \glsxtrbookindexsubbetween{label1}{label2}

    -

    -

    The separator between two level 2 entries is given by -


    +

    The separator between two level 2 entries is given by +


    \glsxtrbookindexsubsubbetween{label1}{label2}

    -

    +

    At the end of each letter group, the following hooks are done in order: -



    \glsxtrbookindexsubsubatendgroup{sub-sub-label}

    -

    -


    +


    \glsxtrbookindexsubatendgroup{sub-label}

    -

    -


    +


    \glsxtrbookindexatendgroup{label}

    -

    +

    where ⟨sub-sub-label⟩ is the label of the last level 2 entry, ⟨sub-label⟩ is the label of the last level 1 entry and ⟨label⟩ is the label of the last level 0 entry. -

    For example, the resource option

    For example, the resource option seealso=omit instructs -

    -

    This uses +

    This uses \glstreesubitem and \glstreesubsubitem to indent the cross-reference according to the next level down, so the cross-reference for a top-level entry is aligned @@ -7787,7 +8178,7 @@ indented a bit further (but it won’t be aligned with any deeper level as t class="cmss-10">bookindex style only supports a maximum of two sub-levels). -

    The

    The bookindex style uses group headings. (If you use bib2gls remember to invoke it with the --group or -g switch.) The heading will use -



    \glsxtrbookindexbookmark{group title}{name}

    -

    +

    If \pdfbookmark has been defined, this will use that command to bookmark the group title. If \pdfbookmark hasn’t been defined, this command does nothin. -

    The group heading is formatted according to -


    The group heading is formatted according to +


    \glsxtrbookindexformatheader{group title}

    -

    +

    which is defined as

    -
    +
     \newcommand*{\glsxtrbookindexformatheader}[1]{%
    - 
      \par{\centering\glstreegroupheaderfmt{#1}\par}% - 
    } -
    -

    where +

    where \glstreegroupheaderfmt is provided by the glossary-tree package, which is automatically loaded. Note that the entry names aren’t encapsulated with \glstreenamefmt. -

    The

    The glossary-bookindex package provides some supplementary commands that aren’t used by default, but may be used when adjusting the style. These commands @@ -7847,43 +8238,43 @@ should only be used within one of the \print…glossary commands. (That is, they should only be used in glossary styles.) -



    \glsxtrbookindexmarkentry{label}

    -

    +

    This writes information to the .aux file that can be read on the next run to obtain the first and last entry on each page of the glossary. -

    You can display the first entry associated with the current page using: -


    You can display the first entry associated with the current page using: +


    \glsxtrbookindexfirstmark

    -

    +

    and the last entry associated with the current page using: -



    \glsxtrbookindexlastmark

    -

    +

    These do nothing if there are no entries marked on the current page (or if the document build isn’t up to date). -

    The entry is formatted using: -


    The entry is formatted using: +


    \glsxtrbookindexfirstmarkfmt{label}

    -

    +

    for the first instance and -



    \glsxtrbookindexlastmarkfmt{label}

    -

    +

    for the last. -

    These commands are designed for use in page headers or footers where the page +

    These commands are designed for use in page headers or footers where the page number is stable. For example, \glsxtrbookindexname can be redefined to mark the current entry: @@ -7891,13 +8282,13 @@ current entry:

    -
    +
     \renewcommand{\glsxtrbookindexname}[1]{%
    - 
      \glsxtrbookindexmarkentry{#1}% - 
      \glossentryname{#1}% - 
    } -
    -

    If you only want to mark the top-level entries, remember to redefine +  \glsxtrbookindexmarkentry{#1}% +  \glossentryname{#1}% +} + +

    If you only want to mark the top-level entries, remember to redefine \glsxtrbookindexsubname as it defaults to \glsxtrbookindexname: @@ -7905,13 +8296,13 @@ class="cmtt-10">\glsxtrbookindexname:

    -
    +
     \renewcommand{\glsxtrbookindexsubname}[1]{%
    - 
      \glossentryname{#1}% - 
    } -
    -

    -

    Then if you’re using +

    +

    Then if you’re using fancyhdr you can set the page style to show the first and last entry for the current page with: @@ -7919,21 +8310,21 @@ entry for the current page with:

    -
    +
       \pagestyle{fancy}%
    - 
      \lhead{\thepage}% - 
      \lfoot{\glsxtrbookindexfirstmark}% - 
      \cfoot{}% - 
      \rfoot{\glsxtrbookindexlastmark}% -
    -

    -

    -

    -

    +

    +

    +

    +

    Top

    3.2 glossary-longextra package

    -

    As from version 1.37, the

    As from version 1.37, the glossaries-extra package comes with the supplementary package glossary-longextratabular instead. In order to do this you must use -



    \GlsLongExtraUseTabulartrue

    -

    +

    before the style is set. For example:

    -
    +
     \GlsLongExtraUseTabulartrue
    - 
    \setglossarystyle{long-name-desc} -
    -

    or +\setglossarystyle{long-name-desc} + +

    or

    -
    +
     \GlsLongExtraUseTabulartrue
    - 
    \printunsrtglossary[style={long-name-desc}] -
    -

    If you use this setting, you can change the default vertical alignment with: -


    +

    If you use this setting, you can change the default vertical alignment with: +


    \glslongextraTabularVAlign

    -

    +

    The default definition is c. -

    The column titles are formatted according to: -


    The column titles are formatted according to: +


    \glslongextraHeaderFmt{text}

    -

    +

    which simply does \textbf{text} by default. -

    The name column has the title given by

    The name column has the title given by \entryname and the column alignment is given by: -



    \glslongextraNameAlign

    -

    +

    which expands to l (left) by default. -

    The symbol column (where applicable) has the title given by

    The symbol column (where applicable) has the title given by \symbolname and the column alignment is given by: -



    \glslongextraSymbolAlign

    -

    +

    which expands to c (centred) by default. -

    The location list column (where applicable) has the title given by

    The location list column (where applicable) has the title given by \pagelistname and the column alignment is given by: -



    \glslongextraLocationAlign

    -

    +

    which expands to

    -
    +
     >{\raggedright}p{\glspagelistwidth}
    -
    -

    by default. (Ragged-right paragraph, +

    by default. (Ragged-right paragraph, \glspagelistwidth is defined in glossary-long, which is automatically loaded.) -

    The description column has the title given by

    The description column has the title given by \descriptionname and the column alignment is given by: -



    \glslongextraDescAlign

    -

    +

    which expands to

    -
    +
     >{\raggedright}p{\glsdescwidth}
    -
    -

    by default. (Ragged-right paragraph, +

    by default. (Ragged-right paragraph, \glsdescwidth is defined in glossary-long, which is automatically loaded.) -

    Unlike the long styles provided by the base

    Unlike the long styles provided by the base glossaries package, these new styles try to determine the value of \glsdescwidth at the start of the glossary according to the number of columns provided by the style. The calculations are performed by the following commands: -



    \glslongextraSetDescWidth

    -

    +

    This is used by the styles that have a name and description column. The value of \glsdescwidth is computed as:

    -
    - \glsdescwidth = \linewidth- 4\tabcolsep- W -
    -

    -where W is a guess at the width of the name column. This is first set to the width of -the name column header:

    +
    +\glsdescwidth = \linewidth- 4\tabcolsep- W
+
    +

    where W is a guess at the width of the name column. This is first set to the width +of the name column header:

    \settowidth{}
    If any names in that column are larger than this, then you need to specify the widest name using: -



    \glslongextraSetWidest{widest name}

    -

    +

    or -



    \glslongextraUpdateWidest{text}

    - - - -

    +

    These work like the analogous commands \glssetwidest and \glsupdatewidest @@ -8120,6 +8501,9 @@ class="cmss-10">alttreealttree top-level name if set, otherwise it’s empty, + + + so you can use bib2gls’s set-widest option. If you have the entry counter enabled, you will need to include this with the name for the extra material to be taken into account. -

    The name isn’t shown for child entries by default, but if you change this and you +

    The name isn’t shown for child entries by default, but if you change this and you want to use set-widest option (for bib2gls v1.8+) then you need to redefine: -



    \glslongextraUpdateWidestChild{level}{text}

    -

    +

    This does nothing by default, but if you are including the child names then you need to redefine this command:

    -
    +
     \renewcommand{\glslongextraUpdateWidestChild}[2]{%
    - 
     \glslongextraUpdateWidest{#2}% - 
    } -
    -

    -

    If you prefer to set an explicit width for the description column then you need to + \glslongextraUpdateWidest{#2}% +} + +

    +

    If you prefer to set an explicit width for the description column then you need to redefine \glslongextraSetDescWidth. For example:

    -
    +
     \renewcommand{\glslongextraSetDescWidth}{%
    - 
      \setlength{\glsdescwidth}{0.6\linewidth}% - 
    } -
    -

    -

    The styles that have a name, symbol and description, +

    +

    The styles that have a name, symbol and description, \glsdescwidth is set with: -



    \glslongextraSymSetDescWidth

    -

    +

    This first uses \glslongextraSetDescWidth and then subtracts 2\tabcolsep and @@ -8187,30 +8571,30 @@ you can redefine this command. For example:

    -
    +
     \renewcommand{\glslongextraSymSetDescWidth}{%
    - 
      \glslongextraSetDescWidth - 
      \addtolength{\glsdescwidth}{-3cm}% - 
    } -
    -

    or +  \glslongextraSetDescWidth +  \addtolength{\glsdescwidth}{-3cm}% +} + +

    or

    -
    +
     \renewcommand{\glslongextraSymSetDescWidth}{%
    - 
      \setlength{\glsdescwidth}{.5\linewidth}% - 
    } -
    -

    -

    For the styles that have a name, description and location column, +

    +

    For the styles that have a name, description and location column, \glsdescwidth is set using: -



    \glslongextraLocSetDescWidth

    -

    +

    This uses \glslongextraSetDescWidth and then subtracts 2\tabcolsep and @@ -8220,13 +8604,13 @@ class="cmtt-10">\glsdescwidth. You can redefine this command to set both \glsdescwidth and \glspagelistwidth if appropriate. -

    For the styles that have a name, description, symbol and location column, +

    For the styles that have a name, description, symbol and location column, \glsdescwidth is set using: -



    \glslongextraSymLocSetDescWidth

    -

    +

    This uses \glslongextraSymSetDescWidth and then subtracts 2\tabcolsep and @@ -8234,13 +8618,13 @@ class="cmtt-10">\tabcolsep and class="cmtt-10">\glspagelistwidth from \glsdescwidth. Again, you can redefine this command to explicitly set both lengths. -

    In all cases, the top-level name is formatted according to: -


    In all cases, the top-level name is formatted according to: +


    \glslongextraNameFmt{label}

    -

    +

    This does

    }
    which includes the entry counter (if enabled), the target and the post-name link. -

    The top-level description is formatted according to: -


    The top-level description is formatted according to: +


    \glslongextraDescFmt{label}

    -

    +

    This does \glossentrydesc{label} followed by the post-description hook. -

    The styles that have a symbol column format the symbol using: -


    The styles that have a symbol column format the symbol using: +


    \glslongextraSymbolFmt{label}

    -

    +

    This just does \glossentrysymbol{label}. -

    The styles that have a location list column format the list using: -


    The styles that have a location list column format the list using: +


    \glslongextraLocationFmt{label}{locations}

    -

    +

    This just does ⟨locations⟩ and ignores the label. -

    The child entries have their name formatted according to: -


    The child entries have their name formatted according to: +


    \glslongextraSubNameFmt{level}{label}

    -

    +

    where ⟨level⟩ is the hierarchical level. This defaults to:

    @@ -8317,34 +8701,34 @@ class="cmsy-10">}
    This includes the sub-entry counter (if enabled) and the target but doesn’t show the name. The child description is formatted according to: -



    \glslongextraSubDescFmt{level}{label}

    -

    +

    which defaults to just \glslongextraDescFmt{label} -

    The child symbol is formatted (where appropriate) according to: -


    The child symbol is formatted (where appropriate) according to: +


    \glslongextraSubSymbolFmt{level}{label}

    -

    +

    This just does \glslongextraSymbolFmt{label} by default. -

    The styles that have a location list column format the list for child entries +

    The styles that have a location list column format the list for child entries using: -



    \glslongextraSubLocationFmtlevellabel}{locations}

    -

    +

    This just does ⟨locations⟩ and ignores the level and label. -

    The letter group headings are formatted according to: -


    The letter group headings are formatted according to: +


    \glslongextraGroupHeading{n}{label}

    -

    +

    which does nothing by default. The first argument ⟨n⟩ is the number of columns in the table. The second argument ⟨label⟩ is the group label (not the title, although they may happen to be the same). -

    This can be redefined to show the group heading. For example: +

    This can be redefined to show the group heading. For example:

    -
    +
     \renewcommand*{\glslongextraGroupHeading}[2]{%
    - 
      \glsxtrgetgrouptitle{#2}{\thisgrptitle}% - 
      \glslongextraHeaderFmt{\thisgrptitle}% - 
      \tabularnewline - 
      \noalign{\vskip\normalbaselineskip}% - 
    } -
    -

    This ignores the first argument and just puts the group title in the first column +  \glsxtrgetgrouptitle{#2}{\thisgrptitle}% +  \glslongextraHeaderFmt{\thisgrptitle}% +  \tabularnewline +  \noalign{\vskip\normalbaselineskip}% +} + +

    This ignores the first argument and just puts the group title in the first column formatted according to \glslongextraHeaderFmt (to match the column header). -

    Remember that you can also adjust the styles through category attributes. The +

    Remember that you can also adjust the styles through category attributes. The name column’s title is given by \entryname, the description column’s title is given by \descriptionname and (where present) the symbol column \symbolname, as for the other long styles that have headers.

    -

    +

    +

    long-name-desc This is like the longragged-booktabs style but doesn’t show the - location list (regardless of the style but doesn’t show + the location list (regardless of the nonumberlist option). The name is shown in - the first column and the description in the second. -

    The symbol is not displayed. The header row is produced with: -


    option). The name is shown + in the first column and the description in the second. +

    The symbol is not displayed. The header row is produced with: +


    \glslongextraNameDescHeader

    -

    +

    This essentially uses the same code as for longragged-booktabs but makes it @@ -8420,20 +8806,20 @@ class="cmss-10">longragged-booktabs -

    -

    where: -


    +

    where: +


    \glslongextraNameDescTabularHeader

    -

    +

    sets up the header and -



    \glslongextraNameDescTabularFooter

    -

    +

    sets up the footer. If you have setup the tabulartabular environment (and \glslongextraNameDescHeader isn’t used). -

    For example, to simply remove the header and footer (for the default

    For example, to simply remove the header and footer (for the default longtable @@ -8453,81 +8839,90 @@ class="cmss-10">longtable -

    -

    Or to change the name alignment to centred: + +

    Or to change the name alignment to centred:

    -
    +
          \renewcommand{\glslongextraNameAlign}{c}
    -
    -

    + +

    -

    +

    +

    long-name-desc-loc This is like the long-name-desc style but has a third column for - the location list. The style but has a third column + for the location list. The longtable header is given by: -



    \glslongextraNameDescLocationHeader

    -

    +

    which similarly defined in terms of the commands used for the tabular version: -



    \glslongextraNameDescLocationTabularHeader

    -

    +

    and -



    \glslongextraNameDescLocationTabularFooter

    -

    +

    -

    +

    +

    long-desc-name This is like the long-name-desc style but swaps the columns. Note - that if the entry counter is displayed it will appear at the start of the + id="dx1-22067"> style but swaps the columns. + Note that if the entry counter is displayed it will appear at the start of the second column by default. The longtable header is formatted according to: -



    \glslongextraDescNameHeader

    -

    +

    which similarly defined in terms of the commands used for the tabular version: -



    \glslongextraDescNameTabularHeader

    -

    +

    and -



    \glslongextraDescNameTabularFooter

    -

    +

    + + +

    -

    +

    +

    long-loc-desc-name This has three columns containing the location list, description and name. The longtable header is formatted according to: - - - -



    \glslongextraLocationDescNameHeader

    -

    +

    which similarly defined in terms of the commands used for the tabular version: -



    \glslongextraLocationDescNameTabularHeader

    -

    +

    and -



    \glslongextraLocationDescNameTabularFooter

    -

    +

    -

    +

    +

    long-name-desc-sym This is has three columns, with the name in the first, the description in the second and the symbol in the third. -

    The

    The longtable header row is produced with: -



    \glslongextraNameDescSymHeader

    -

    +

    which similarly defined in terms of the commands used for the tabular version: -



    \glslongextraNameDescSymTabularHeader

    -

    +

    and -



    \glslongextraNameDescSymTabularFooter

    -

    +

    -

    +

    +

    long-name-desc-sym-loc This is has four columns, with the name in the first, the description in the second, the symbol in the third and the location list in the fourth. -

    The

    The longtable header row is produced with: -



    \glslongextraNameDescSymLocationHeader

    -

    +

    which similarly defined in terms of the commands used for the tabular version: -



    \glslongextraNameDescSymLocationTabularHeader

    -

    +

    and -



    \glslongextraNameDescSymLocationTabularFooter

    -

    - - - +

    -

    +

    +

    long-name-sym-desc This is like the long-name-desc-sym but the second and third - column are swapped. The but the second and + third column are swapped. The longtable header row is given by: -



    \glslongextraNameSymDescHeader

    -

    +

    which similarly defined in terms of the commands used for the tabular version: -



    \glslongextraNameSymDescTabularHeader

    -

    +

    and -



    \glslongextraNameSymDescTabularFooter

    -

    +

    -

    +

    +

    long-name-sym-desc-loc This is like the long-name-desc-sym-loc but the second and - third column are swapped. The but the + second and third column are swapped. The longtable header row is given by: -


    header row is given + by: +


    \glslongextraNameSymDescLocationHeader

    -

    +

    which similarly defined in terms of the commands used for the tabular version: -



    \glslongextraNameSymDescLocationTabularHeader

    -

    + + + +

    and -



    \glslongextraNameSymDescLocationTabularFooter

    -

    +

    -

    +

    +

    long-sym-desc-name This has the symbol in the first column, the description in the - second and the name in the third. The This has the symbol in the first column, the description in + the second and the name in the third. The longtable header row is given by: -



    \glslongextraSymDescNameHeader

    -

    +

    which similarly defined in terms of the commands used for the tabular version: -



    \glslongextraSymDescNameTabularHeader

    -

    +

    and -



    \glslongextraSymDescNameTabularFooter

    -

    - - - +

    -

    +

    +

    long-loc-sym-desc-name This has the location list in the first column, symbol in the - second column, the description in the third and the name in the fourth. The + id="dx1-22125"> This has the location list in the first column, symbol in + the second column, the description in the third and the name in the fourth. The longtable header row is given by: -



    \glslongextraLocationSymDescNameHeader

    -

    +

    which similarly defined in terms of the commands used for the tabular version: -



    \glslongextraLocationSymDescNameTabularHeader

    -

    +

    and -



    \glslongextraLocationSymDescNameTabularFooter

    -

    +

    + + +

    -

    +

    +

    long-desc-sym-name This has the description in the first column, the symbol in the - second and the name in the third. The This has the description in the first column, the symbol in + the second and the name in the third. The longtable header row is given by: -



    \glslongextraDescSymNameHeader

    -

    +

    which similarly defined in terms of the commands used for the tabular version: -



    \glslongextraDescSymNameTabularHeader

    -

    +

    and -



    \glslongextraDescSymNameTabularFooter

    -

    +

    -

    +

    +

    long-loc-desc-sym-name This has the location list in the first column, the description - in the second column, the symbol in the third and the name in the fourth. The - This has the location list in the first column, the + description in the second column, the symbol in the third and the name in the + fourth. The longtable header row is given by: -



    \glslongextraLocationDescSymNameHeader

    -

    +

    which similarly defined in terms of the commands used for the tabular version: -



    \glslongextraLocationDescSymNameTabularHeader

    -

    +

    and - - - -



    \glslongextraLocationDescSymNameTabularFooter

    -

    +

    -

    + + + +

    -

    Top

    3.3 glossary-topic package

    -

    As from version 1.40, the

    As from version 1.40, the glossaries-extra package comes with the supplementary package glossary-topictree style.

    +

    topic

    This style is similar to the

    +

    This style is similar to the tree style but the indentation doesn’t start until the second sub-item level. The top-level entries have the name displayed @@ -8832,48 +9246,50 @@ class="cmss-10">treenogroupskip setting. -

    +

    +

    topicmcols

    This style is like the

    +

    This style is like the topic style but the sub-entries are placed inside a - style but the sub-entries are placed inside a multicols environment. The environment name is supplied in the value of the + id="dx1-23012"> + environment. The environment name is supplied in the value of the command: -



    \glstopicColsEnv

    -

    +

    You can change this to the starred form. For example:

    -
    +
          \renewcommand{\glstopicColsEnv}{multicols*}
    -
    -

    The number of columns is given by the command: -


    +

    The number of columns is given by the command: +


    \glstopicCols

    -

    +

    The default value is 2.

    -

    Both styles use the following commands. -


    Both styles use the following commands. +


    \glstopicParIndent

    -

    +

    This command is a length that’s used for the paragraph indentation in any multi-paragraph description for top-level entries, but not for the first paragraph (at the start of the description) which isn’t indented. -



    \glstopicSubIndent

    -

    +

    This command is a length that’s used to calculate the hanging indentation for sub-entries. The level 1 sub-entries don’t indent the name. Level n sub-entries have @@ -8883,20 +9299,32 @@ class="cmsy-10">- 1)×\glstopicSubIndent. The hanging indent depends on whether or not a widest name has been set for the level. -


    As from v1.46, there is also a length for additional indentation used +in the second paragraph onwards for child entries with multi-paragraph +descriptions: +


    \glstopicSubItemParIndent

    +

    +This is initialised to \parindent when glossary-topic is loaded. +


    \glstopicInit

    -

    +

    Hook used at the start of the glossary. Does nothing by default. -

    Although the styles don’t support letter groups by default, if you have many +

    Although the styles don’t support letter groups by default, if you have many topics (top-level entries) and you feel that it would help the reader to divide them up into headed letter groups, you can redefine: -



    \glstopicGroupHeading{group label}

    -

    +

    This does nothing by default. If you want to redefine it, you can fetch the title corresponding to the group label with \glsxtrgetgrouptitle. For @@ -8905,120 +9333,120 @@ example:

    -
    +
     \renewcommand*{\glstopicGroupHeading}[1]{%
    - 
      \glsxtrgetgrouptitle{#1}{\thisgrptitle}% - 
      \section*{\thisgrptitle}% - 
    } -
    -

    Remember that if you use +

    Remember that if you use bib2gls, you will need the --group (or -g) switch to support this. -



    \glstopicItem{label}{location list}

    -

    +

    Used to format the name, symbol, description and location list for the top-level entries. This starts with a paragraph break followed by: -



    \glstopicPreSkip

    -

    +

    which defaults to \medskip. There is then a hook: -



    \glstopicMarker{label}

    -

    +

    which does nothing by default, but may be redefined. For example, to add a line to the table of contents. The name and symbol are set in the form of a title using: -



    \glstopicTitle{label}

    -

    +

    This uses \Glossentryname which converts the first letter to upper case. If there’s a symbol, this is added in parentheses. Both name and symbol (if present) are encapsulated by -



    \glstopicTitleFont{text}

    -

    +

    This uses a bold, large font by default. -

    If the entry has the description key set (tested with

    If the entry has the description key set (tested with \ifglshasdesc) then a paragraph break is inserted followed by: -



    \glstopicMidSkip

    -

    +

    which defaults to \smallskip. This is followed by the description which is formatted according to: -



    \glstopicDesc{label}

    -

    +

    This just does \Glossentrydesc{label} followed by the post-description hook. -

    A paragraph break followed by: -


    A paragraph break followed by: +


    \glstopicPostSkip

    -

    +

    comes next regardless of whether or not the description was displayed. This defaults to \smallskip. This is then followed by: -



    \glstopicLoc{label}{location list}

    -

    +

    which may be used to display the location list, but does nothing by default. -

    The sub-entries first set up the paragraph and hanging indentations using: -


    The sub-entries first set up the paragraph and hanging indentations using: +


    \glstopicAssignSubIndent{level}

    -

    +

    This uses: -



    \glstopicAssignWidest{level}

    -

    +

    to determine if a widest name has been set for the given level. -

    The sub-entry has its information displayed using: -


    The sub-entry has its information displayed using: +


    \glstopicSubItem{level}{label}{location}

    -

    +

    This encapsulates the name with: -



    \glstopicSubNameFont{text}

    -

    +

    By default this just uses \textbf. This is followed by: -



    \glstopicSubItemSep

    -

    +

    which defaults to \quad. The name and separator are passed in the ⟨text⟩ argument of: -



    \glstopicSubItemBox{level}{text}

    -

    +

    If a widest name was set for the given level, this will put ⟨text⟩ inside a box of that width otherwise it just does ⟨text⟩. -

    This is followed by the symbol in parentheses if set. Then, if the description is set, +

    This is followed by the symbol in parentheses if set. Then, if the description is set, the description and post-description hook are displayed followed by: -



    \glstopicSubPreLocSep

    -

    +

    (This command isn’t used if the description isn’t set.) -

    Finally the location list is displayed using: -


    Finally the location list is displayed using: +


    \glstopicSubLoc{label}{location}

    -

    +

    which just does ⟨location⟩ by default.

    -

    -

    +

    Top

    4. Abbreviations

    -

    The new abbreviation system provided by

    The new abbreviation system provided by glossaries-extra is more flexible than the acronym handling provided by the base glossaries package. The @@ -9096,7 +9524,7 @@ class="cmtt-10">\gls (and its variants) displays the desired output. See the file sample-abbr-styles.pdf for samples of all provided abbreviation styles. -

    Don’t use

    -

    -

    This lack of flexibility in

    +

    This lack of flexibility in \glsfirst can be demonstrated with the following document:

    -
    +
     \documentclass{article}
    - 
    \usepackage{glossaries-extra} - 
    \setabbreviationstyle{footnote} - 
    \newabbreviation{ex}{EX}{Example} - 
    \begin{document} - 
    Compare \gls{ex}['s] with \glsfirst{ex}['s]. - 
    \end{document} -
    -

    The +

    The first use \gls has the footnote marker after the inserted material “EX’spostfootnote\footnote is in the post-link hook. -

    There are some instances where

    There are some instances where \glstext can be useful. It’s used internally by \glsfmttext\glsfmttext. -

    Abbreviations include acronyms (words formed from initial letters, such as +

    Abbreviations include acronyms (words formed from initial letters, such as “laser”), initialisms (initial letters of a phrase, such as “html”, that aren’t pronounced as words) and contractions (where parts of words are omitted, often replaced by an apostrophe, such as “don’t”). The “acronym” code provided by the @@ -9175,10 +9603,10 @@ to be described for readers unfamiliar with the term). They are therefore more like a regular term, which may or may not require a description in the glossary. -

    The

    The glossaries-extra package corrects this misnomer, and provides better abbreviation handling, with -



    \newabbreviation[optionsshort}{long}

    -

    -

    This sets the

    +

    This sets the category key to abbreviation by default, but that value may be -overridden in ⟨options⟩. The category may have attributes that modify the way -abbreviations are defined. For example, the abbreviation by default, but that value may +be overridden in ⟨options⟩. The category may have attributes that modify +the way abbreviations are defined. For example, the insertdots attribute will automatically -insert full stops (periods) into ⟨ attribute +will automatically insert full stops (periods) into ⟨short⟩ or the noshortplural attribute will set the default -value of the +attribute will set the default value of the shortplural key to just ⟨short⟩ (without appending the plural suffix). See short⟩ (without +appending the plural suffix). See §6 -Categories for further details. -

    See §??sec:categories Categories for further +details. +

    See §2.8 §??sec:nested Nested Links regarding the pitfalls of using commands like \gls or - + + + +or \glsxtrshort within ⟨short⟩ or ⟨long⟩. - - - -

    Make sure that you set the category attributes before defining new abbreviations +

    Make sure that you set the category attributes before defining new abbreviations or they may not be correctly applied.
    -

    -

    The

    +

    The \newacronym command provided by the glossaries package is redefined by @@ -9242,9 +9673,10 @@ class="cmss-10">categoryacronym (see also §2.9 §??sec:acronymmods Acronym Style Modifications) so -



    \newacronym[optionsshort}{long}

    -

    +

    is now equivalent @@ -9278,7 +9710,7 @@ class="cmtt-10">{⟨long}
    -

    The

    The \newabbreviation command is superficially similar to the glossaries package’s abbreviationglossaries package, although they may produce similar results.) -

    The way the abbreviations are displayed by commands like

    The way the abbreviations are displayed by commands like \gls varies according to the abbreviation style. The styles are set according to the entry’s category so, unlike the base glossaries package, you can have different abbreviation styles within the same glossary. -

    There are two types of full forms. The display full form, which is used on +

    There are two types of full forms. The display full form, which is used on first use by commands like short-footnote, the display and inline full forms are different. -

    These formatting commands aren’t stored in the

    These formatting commands aren’t stored in the short, shortplural\glsxtrlong and the case-changing variants don’t use \glsfirstlongfont. -

    You can apply the formatting command used for the short form to some arbitrary +

    You can apply the formatting command used for the short form to some arbitrary text using -



    \glsuseabbrvfont{text}{category}

    - - - -

    +

    where ⟨category⟩ is the category label that identifies the abbreviation style. Similarly for the formatting command use by the long form: -



    \glsuselongfont{text}{category}

    -

    -

    You can’t use the acronym commands provided by the base package with the new +

    +

    You can’t use the acronym commands provided by the base package with the new abbreviations provided by the glossaries-extra package. The style commands that replace \setacronymstyle, \acrshort etc are described in §4.2 Abbreviation Styles. -The §??sec:abbrstyle +Abbreviation Styles. The acronymlists package option and associated commands aren’t supported. The - package option and associated commands +aren’t supported. The \forallacronyms command, which iterates over all acronym lists, should be replaced -with: -


    command, which iterates over all acronym +lists, should be replaced with: +


    \forallabbreviationlists{cs}{body}

    -

    +

    -

    Top

    4.1 Tagging Initials

    -

    If you would like to tag the initial letters in the long form such that those letters are +

    If you would like to tag the initial letters in the long form such that those letters are underlined in the glossary but not in the main part of the document, you can use -



    \GlsXtrEnableInitialTagging{categories}{cs}

    -

    +

    before you define your abbreviations. -

    This command (robustly) defines ⟨

    This command (robustly) defines ⟨cs⟩ (a control sequence) to accept a single argument, which is the letter (or letters) that needs to be tagged. The normal behaviour of this command within the document is to simply do its argument, but in @@ -9418,19 +9851,19 @@ href="#catattr.tagging">tagging attribute set to “true”. For those cases it will use -



    \glsxtrtagfont{text}

    -

    +

    This command defaults to \underline{text} but may be redefined as required. -

    The control sequence ⟨

    The control sequence ⟨cs⟩ can’t already be defined when used with the unstarred version of \GlsXtrEnableInitialTagging for safety reasons. The starred @@ -9439,19 +9872,24 @@ class="cmti-10">cs⟩. As with redefining any commands, ensure that you don’t redefine something important. In fact, just forget the existence of the starred version and let’s pretend I didn’t mention it. -

    The first argument of \GlsXtrEnableInitialTagging is a comma-separated list -of category names. The

    The first argument of \GlsXtrEnableInitialTagging is a comma-separated +list of category names. The tagging attribute will automatically be set for those -categories. You can later set this attribute for other categories (see attribute will automatically be set for +those categories. You can later set this attribute for other categories (see +§6 Categories) but -this must be done before the glossary is displayed. -

    The accompanying sample file §??sec:categories Categories) but this must be done before the glossary is +displayed. +

    The accompanying sample file sample-mixtures.tex uses initial tagging for both + + + the acronym and abbreviation -

    -

    This defines the command +

    This defines the command \itag which can be used in the definitions. For example:

    -
    +
     \newacronym
    - 
     [description={a system for detecting the location and - 
     speed of ships, aircraft, etc, through the use of radio - 
     waves}% description of this term - 
     ] - 
     {radar}% identifying label - 
     {radar}% short form (i.e. the word) - 
     {\itag{ra}dio \itag{d}etection \itag{a}nd \itag{r}anging} - 
    \newabbreviation{xml}{XML} - 
     {e\itag{x}tensible \itag{m}arkup \itag{l}anguage} -
    -

    The underlining of the tagged letters only occurs in the glossary and then only for + [description={a system for detecting the location and + speed of ships, aircraft, etc, through the use of radio + waves}% description of this term + ] + {radar}% identifying label + {radar}% short form (i.e. the word) + {\itag{ra}dio \itag{d}etection \itag{a}nd \itag{r}anging} +\newabbreviation{xml}{XML} + {e\itag{x}tensible \itag{m}arkup \itag{l}anguage} + +

    The underlining of the tagged letters only occurs in the glossary and then only for entries with the tagging attribute set. -

    +

    -

    Top

    4.2 Abbreviation Styles

    -

    The abbreviation style must be set before abbreviations are defined using: -


    The abbreviation style must be set before abbreviations are defined using: +


    \setabbreviationstyle[category]{style-name}

    -

    +

    where ⟨style-name⟩ is the name of the style and ⟨category⟩ is the category label @@ -9523,11 +9961,11 @@ class="cmss-10">regular attribute to true. -

    If you want to apply different styles to groups of abbreviations, assign a +

    If you want to apply different styles to groups of abbreviations, assign a different category to each group and set the style for the given category.
    -

    -

    Note that

    +

    Note that \setacronymstyle is disabled by glossaries-extra. Use

    @@ -9545,10 +9983,11 @@ class="cmtt-10">\RestoreAcronyms (see §2.9 Acronym Style Modifications). However the original acronym interface is -incompatible with all the commands described here. -

    Abbreviations can be used with the standard §??sec:acronymmods Acronym Style Modifications). However the original acronym +interface is incompatible with all the commands described here. +

    Abbreviations can be used with the standard glossaries commands, such as \gls, @@ -9558,7 +9997,7 @@ class="cmtt-10">\acrshort\acronymfont). The short form can be produced with: -



    \glsxtrshort[optionslabel}[insert]

    -

    +

    (Use this instead of \acrshort.) -

    The long form can be produced with -


    The long form can be produced with +


    \glsxtrlong[optionslabel}[insert]

    -

    +

    (Use this instead of \acrlong.) -

    The

    The inline full form can be produced with -



    \glsxtrfull[optionslabel}[insert]

    -

    +

    (This this instead of \acrfull.) -

    In general, it’s best not to use commands like

    In general, it’s best not to use commands like \glsfirst for abbreviations, especially if you use the ⟨insert⟩ optional argument. Use either \gls (possibly with a reset) or \glsxtrfull.
    -

    -

    As mentioned earlier, the inline full form may not necessarily match the format +

    +

    As mentioned earlier, the inline full form may not necessarily match the format used on first use with short-nolongfirst use, but the full form will display the long form followed by the short form in parentheses. -

    If you want to use an abbreviation in a chapter or section title, use the +

    If you want to use an abbreviation in a chapter or section title, use the commands described in §5 Entries in Sectioning Titles, Headers, Captions and -Contents instead.
    -

    -

    The arguments ⟨§??sec:headtitle Entries in Sectioning Titles, Headers, +Captions and Contents instead.

    +

    +

    The arguments ⟨options⟩, ⟨label⟩ and ⟨insert⟩ are the same as for commands such as \glstext. There are also analogous case-changing commands: -

    First letter upper case short form: -


    First letter upper case short form: +


    \Glsxtrshort[optionslabel}[insert]

    -

    -

    First letter upper case long form: -


    +

    First letter upper case long form: +


    \Glsxtrlong[optionslabel}[insert]

    -

    -

    First letter upper case inline full form: -


    +

    First letter upper case inline full form: +


    \Glsxtrfull[optionslabel}[insert]

    -

    -

    All upper case short form: +

    +

    All upper case short form: -



    \GLSxtrshort[optionslabel}[insert]

    -

    -

    All upper case long form: -


    +

    All upper case long form: +


    \GLSxtrlong[optionslabel}[insert]

    -

    -

    All upper case inline full form: -


    +

    All upper case inline full form: +


    \GLSxtrfull[optionslabel}[insert]

    -

    -

    Plural forms are also available. -

    Short form plurals: -


    +

    Plural forms are also available. +

    Short form plurals: +


    \glsxtrshortpl[optionslabel}[insert]

    -

    -


    +


    \Glsxtrshortpl[optionslabel}[insert]

    -

    -


    +


    \GLSxtrshortpl[optionslabel}[insert]

    -

    -

    Long form plurals: -


    +

    Long form plurals: +


    \glsxtrlongpl[optionslabel}[insert]

    -

    -


    +


    \Glsxtrlongpl[optionslabel}[insert]

    -

    -


    +


    \GLSxtrlongpl[optionslabel}[insert]

    -

    -

    Full form plurals: -


    +

    Full form plurals: +


    \glsxtrfullpl[optionslabel}[insert]

    -

    -


    +


    \Glsxtrfullpl[optionslabel}[insert]

    -

    -


    +


    \GLSxtrfullpl[optionslabel}[insert]

    -

    -

    Be careful about using

    +

    Be careful about using \glsentryfull, \Glsentryfull, \glsentryfullpl and @@ -9811,13 +10251,13 @@ class="cmtt-10">\glsentryshort etc.
    -

    -

    +

    +

    -

    Top

    4.3 Shortcut Commands

    -

    The abbreviation shortcut commands can be enabled using the

    The abbreviation shortcut commands can be enabled using the shortcuts=abbreviationsshortcuts=ac. (You can use both settings at the same time.) The provided shortcut commands listed in table 4.1. +href="#tab:abbrshortcuts">table ??tab:abbrshortcuts.

    -


    @@ -9848,7 +10289,7 @@ href="#tab:abbrshortcuts">table 4.1. >Table 4.1: Abbreviation Shortcut Commands
    \newabbreviation
    -

    Top

    4.4 Predefined Abbreviation Styles

    -

    There are two types of abbreviation styles: those that treat the abbreviation as a +

    There are two types of abbreviation styles: those that treat the abbreviation as a regular entry (so that \gls uses \gls uses \glsxtrgenabbrvfmt). -

    The regular entry abbreviation styles set the

    The regular entry abbreviation styles set the regular attribute to “true” for the @@ -10195,7 +10636,7 @@ class="cmss-10">long\glsxtrshort. -

    The other abbreviation styles don’t modify the

    The other abbreviation styles don’t modify the regular attribute. The \glsxtrfullformat that are defined by the style). -

    In both cases, the

    In both cases, the first use of \gls may not match the text produced by \glsfirst (and likewise for the plural and case-changing versions). -

    The sample file

    The sample file sample-abbr-styles.tex demonstrates all predefined styles described here. -

    For the “sc” styles that use

    For the “sc” styles that use \textsc, be careful about your choice of fonts as some only have limited support. For example, you may not be able to combine bold @@ -10234,8 +10675,8 @@ class="cmss-10">fontenc package with the T1 option or something similar.
    -

    -

    Many of the styles have helper commands in the form

    +

    Many of the styles have helper commands in the form \glsxtr...name and \glsxtr...sort that are expanded within the \theregister⟩. It’s essential that these expand when the abbreviation is defined so don’t hide them behind no-expandable content if you redefine these helper commands. -

    The parenthetical styles, such as

    The parenthetical styles, such as long-short, use -



    \glsxtrparen{text}

    -

    +

    to set the parenthetical material. This just puts parentheses around the text: (⟨text⟩). -

    The basic abbreviation styles, such as

    The basic abbreviation styles, such as long-short and short-long use -



    \glsabbrvdefaultfont{text}

    -

    +

    for the short form. This just does ⟨text⟩ by default. (That is, no font change is applied.) On first use, -



    \glsfirstabbrvdefaultfont{text}

    -

    +

    is used instead. By default, this just does \glsabbrvdefaultfont. The long form is formatted according to -



    \glslongdefaultfont{text}

    -

    +

    which again just does ⟨text⟩ (no font change). On first use, -



    \glsfirstlongdefaultfont{text}

    -

    +

    is used instead. This just does \glslongdefaultfont. The plural suffix used for the short form is given by -



    \glsxtrabbrvpluralsuffix

    -

    +

    which defaults to \glspluralsuffix. -

    The small-cap styles, such as

    The small-cap styles, such as long-short-sc and short-sc-long, use -



    \glsabbrvscfont{text}

    -

    +

    which uses \textsc.4.1 On first use -



    \glsfirstabbrvscfont{text}

    -

    +

    is used instead. This uses \glsabbrvscfont by default. So redefine, \glsabbrvscfont to change first and subsequent uses or \glsfirstabbrvscfont to change just the first use. -

    The long form for the small-cap styles uses

    The long form for the small-cap styles uses \glslongdefaultfont or \glsfirstlongdefaultfont, as with the basic style. The suffix is given by -



    \glsxtrscsuffix

    -

    +

    This is defined as

    -
    +
     \newcommand*{\glsxtrscsuffix}{\glstextup{\glsxtrabbrvpluralsuffix}}
    -
    -

    The +

    The \glstextup command is provided by glossaries and is used to switch off the -small caps font for the suffix. If you override the default short plural using the -glossaries and is used to switch off +the small caps font for the suffix. If you override the default short plural +using the shortplural key when you define the abbreviation you will need to make the -appropriate adjustment if necessary. (Remember that the default plural suffix -behaviour can be modified through the use of the key when you define the abbreviation you will need to +make the appropriate adjustment if necessary. (Remember that the default +plural suffix behaviour can be modified through the use of the aposplural and +and noshortplural -attributes. See attributes. See §6 Categories for further details.) -

    The small styles, such as §??sec:categories Categories for further +details.) +

    The small styles, such as long-short-sm and short-sm-long, use -



    \glsabbrvsmfont{text}

    -

    +

    which uses \textsmaller. (This requires the relsizes package, which isn’t loaded by glossaries-extra, so must be loaded explicitly.) On first use -



    \glsfirstabbrvsmfont{text}

    -

    +

    is used instead. This uses \glsabbrvsmfont by default. -

    The long form for the smaller styles uses

    The long form for the smaller styles uses \glslongdefaultfont or \glsfirstlongdefaultfont, as with the basic style. The suffix is given by -



    \glsxtrsmsuffix

    -

    +

    which defaults to just \glsxtrabbrvpluralsuffix. -

    The “short-em” (emphasize short) styles, such as

    The “short-em” (emphasize short) styles, such as long-short-em or short-em-long, use -



    \glsabbrvemfont{text}

    -

    +

    On first use -



    \glsfirstabbrvemfont{text}

    -

    +

    is used instead. This uses \glsabbrvemfont by default. The suffix is given by -



    \glsxtremsuffix

    -

    +

    which defaults to just \glsxtrabbrvpluralsuffix. The long form is as for the basic style unless the style is a “long-em” style. -

    The “long-em” (emphasize long) styles, such as

    The “long-em” (emphasize long) styles, such as long-em-short-em or short-em-long-em, use -



    \glsfirstlongemfont{long-form}

    -

    +

    instead of \glsfirstlongdefaultfont{long-form} and -



    \glslongemfont{long-form}

    - - - -

    +

    instead of \glslongdefaultfont{long-form}. The first form \glsfirstlongemfont is initialised to use \glslongemfont. -

    The user styles have similar commands: -


    The user styles have similar commands: +


    \glsabbrvuserfont{text}

    -

    +

    for the short form, -



    \glsfirstabbrvuserfont{text}

    -

    +

    for the first use short form, -



    \glslonguserfont{text}

    -

    +

    for the long form, -



    \glsfirstlonguserfont{text}

    -

    +

    for the first use long form, and -



    \glsxtrusersuffix

    -

    +

    for the short plural suffix. -

    Similarly for the hyphen styles: -


    Similarly for the hyphen styles: +


    \glsabbrvhyphenfont{text}

    -

    +

    for the short form, -



    \glsfirstabbrvhyphenfont{text}

    -

    +

    for the first use short form, -



    \glslonghyphenfont{text}

    -

    +

    for the long form, -



    \glsfirstlonghyphenfont{text}

    -

    +

    for the first use long form, and -



    \glsxtrhyphensuffix

    -

    +

    for the short plural suffix. -

    Similarly for the “only” styles, such as

    Similarly for the “only” styles, such as long-only-short-only: -



    \glsabbrvonlyfont{text}

    -

    +

    for the short form, -



    \glsfirstabbrvonlyfont{text}

    -

    +

    for the first use short form, -



    \glslongonlyfont{text}

    -

    +

    for the long form, -



    \glsfirstlongonlyfont{text}

    - - - -

    +

    for the first use long form, and -



    \glsxtronlysuffix

    -

    +

    for the short plural suffix. -

    Note that by default inserted material (provided in the final optional argument of +

    Note that by default inserted material (provided in the final optional argument of commands like \gls), is placed outside the font command in the predefined styles. To move it inside, use: -



    \glsxtrinsertinsidetrue

    -

    +

    This applies to all the predefined styles. For example:

    -
    +
     \setabbreviationstyle{long-short}
    - 
    \renewcommand*{\glsfirstlongdefaultfont}[1]{\emph{#1}} - 
    \glsxtrinsertinsidetrue -
    -

    This will make the long form and the inserted text emphasized, whereas the default +\renewcommand*{\glsfirstlongdefaultfont}[1]{\emph{#1}} +\glsxtrinsertinsidetrue + +

    This will make the long form and the inserted text emphasized, whereas the default (without \glsxtrinsertinsidetrue) would place the inserted text outside of the emphasized font. -

    Note that for some styles, such as the

    Note that for some styles, such as the short-long, the inserted text would be placed inside the font command for the short form (rather than the long form in the above example). -

    Remember that

    Remember that \textsc renders lowercase letters as small capitals. Uppercase letters are rendered as normal uppercase letters, so if you specify the short form in @@ -10636,49 +11079,50 @@ convert its argument to lowercase. For example:

    -
    +
     \renewcommand*{\glsabbrvscfont}[1]{\textsc{\MakeLowercase{#1}}}
    -
    -

    -

    If you want to easily switch between the “sc” and “sm” styles, you may find it + +

    +

    If you want to easily switch between the “sc” and “sm” styles, you may find it easier to redefine this command to convert case:

    -
    +
     \renewcommand*{\glsabbrvscfont}[1]{\textsc{\MakeTextLowercase{#1}}}
    - 
    \renewcommand*{\glsabbrvsmfont}[1]{\textsmaller{\MakeTextUppercase{#1}}} -
    -

    -

    Some of the styles use -


    +

    +

    Some of the styles use +


    \glsxtrfullsep{label}

    -

    +

    as a separator between the long and short forms. This is defined as a space by default, but may be changed as required. For example:

    -
    +
     \renewcommand*{\glsxtrfullsep}[1]{~}
    -
    -

    or + +

    or

    -
    +
     \renewcommand*{\glsxtrfullsep}[1]{\glsacspace{#1}}
    -
    -

    -

    The new naming scheme for abbreviation styles is as follows:

    + +

    +

    The new naming scheme for abbreviation styles is as follows:

      -
    • +

      field1⟩[-modifier1⟩]field2⟩[-modifier2⟩][-user] -

      This is for the parenthetical styles. The

      This is for the parenthetical styles. The -modifier⟩ parts may be omitted. These styles display ⟨field1⟩ or ⟨field2⟩ starts with “no” then that element is omitted from the display style (no parenthetical part) but is included in the inline style. -

      If the

      If the -modifier⟩ part is present, then the field has a font changing command applied to it. The special modifier -only indicates that field is only present according to whether or not the entry has been used. -

      If

      If post is present then ⟨field2⟩ is placed after the link-text using the post-link hook. -

      If the

      If the -user part is present, then the user1 value, if provided, is inserted into the parenthetical material . (The field used for the inserted material may be changed.) -

      Examples:

      +

      Examples:

        -
      • +

        long-noshort-sc: ⟨field1⟩ is the long form, the short form is set in smallcaps but omitted in the display style. -

      • -
      • +
      • +

        long-em-short-em: both the long form and the short form are emphasized. The short form is in parentheses. -

      • -
      • +
      • +

        long-short-em: the short form is emphasized but not the long form. The short form is in parentheses. -

      • -
      • +
      • +

        long-short-user: if the short⟩, ⟨user1⟩) otherwise it just produces ⟨long⟩ (⟨short⟩). -

      • -
      • +
      • +

        long-hyphen-postshort-hyphen: the short form and the inserted @@ -10763,15 +11215,13 @@ class="cmtt-10">\glsfirstlonghyphenfont \glsabbrvhyphenfont (or \glsfirstabbrvhyphenfont on first - use).

      - - - + use).

    -
  • +

    style-noreg -

    Some styles set the

    Some styles set the regular attribute. In some cases, there’s a version of the @@ -10787,7 +11237,7 @@ href="#abbrstyle.long-em-noshort-em-noreg">long-em-noshort-em-noreg style is a minor variation that style that doesn’t set the attribute. -

    There are a few “noshort” styles, such as

    There are a few “noshort” styles, such as long-hyphen-noshort-noreg, that have @@ -10798,14 +11248,15 @@ class="cmss-10">regular set, but the naming scheme is maintained for consistency with the other “noshort” styles.

  • -
  • +

    field1⟩[-modifier1⟩]-[post]footnote -

    The display style uses ⟨

    The display style uses ⟨field1⟩ followed by a footnote with the other field in it. If post is present then the footnote is placed after the link-text using the post-link hook. The inline style does ⟨field1⟩ followed by the other field in parentheses. -

    If

    If -modifier1⟩ is present, ⟨field1⟩ has a font-changing command applied to it. -

    Examples:

    +

    Examples:

    -

    Take care with the footnote styles. Remember that there are some situations + id="dx1-28100">link-text.

  • +

    Take care with the footnote styles. Remember that there are some situations where \footnote doesn’t work.
    -

    + + + +

    -
  • +

    style-desc -

    Like ⟨

    Like ⟨style⟩ but the description key must be provided when defining abbreviations with this style. -

    Examples:

    +

    Examples:

    - - - + description.

  • -

    Not all combinations that fit the above syntax are provided. Pre-version 1.04 +

    Not all combinations that fit the above syntax are provided. Pre-version 1.04 styles that didn’t fit this naming scheme are either provided with a synonym (where the former name wasn’t ambiguous) or provided with a deprecated synonym (where the former name was confusing). The deprecated style names generate a warning using: -



    \GlsXtrWarnDeprecatedAbbrStyle{old-name}{new-name}

    -

    +

    where ⟨old-name⟩ is the deprecated name and ⟨new-name⟩ is the preferred name. You can suppress these warnings by redefining this command to do nothing. -

    +

    -

    Top

    4.4.1 Predefined Abbreviation Styles that Set the Regular Attribute

    -

    The following abbreviation styles set the

    The following abbreviation styles set the regular attribute to “true” for all categories that have abbreviations defined with any of these styles.

    +

    short-nolong

    This only displays the short form on

    +

    This only displays the short form on first use. The name is set to the - short form through the command -


    is set to the short form + through the command +


    \glsxtrshortnolongname

    -

    + + + +

    (Similarly for the other shortmodifier\newacronym) for it to take effect. Make sure to \protect any formatting commands (or anything else that shouldn’t be expanded). -

    The

    The description is set to the long form. The inline full form displays ⟨short⟩ @@ -10933,155 +11394,176 @@ class="cmti-10">long⟩). The long form on its own can be displayed class="cmtt-10">\glsxtrlong.

    +

    short

    A synonym for

    +

    A synonym for short-nolong. -

    +

    +

    nolong-short

    Like

    +

    Like short-nolong but the inline full form displays ⟨long⟩ (⟨short⟩). -

    +

    +

    short-sc-nolong

    Like

    +

    Like short-nolong but redefines \glsabbrvfont to use - \glsabbrvfont to use \glsabbrvscfont (which defaults to (which + defaults to \textsc). -

    +

    +

    short-sc

    A synonym for

    +

    A synonym for short-sc-nolong - - - -

    +

    +

    nolong-short-sc

    Like

    +

    Like short-sc-nolong but the inline full form displays ⟨long⟩ (⟨short⟩). - The name is still obtained from \glsxtrshortnolongname (similarly for the - other styles in the form short⟩). The name is + still obtained from \glsxtrshortnolongname (similarly for the other + styles in the form nolongmodifier-shortmodifier⟩ unless indicated otherwise). -

    +

    +

    short-sm-nolong

    Like

    +

    Like short-nolong but redefines \glsabbrvfont to use - \glsabbrvfont to use \glsabbrvsmfont (which defaults to (which + defaults to \textsmaller). -

    + + + +

    +

    short-sm

    A synonym for

    +

    A synonym for short-sm-nolong. -

    +

    +

    nolong-short-sm

    Like

    +

    Like short-sm-nolong but the inline full form displays ⟨long⟩ - (⟨long⟩ (⟨short⟩). -

    +

    +

    short-em-nolong

    Like

    +

    Like short-nolong but redefines \glsabbrvfont to use - \glsabbrvfont to use \glsabbrvemfont. -

    +

    +

    short-em

    A synonym for

    +

    A synonym for short-em-nolong -

    +

    +

    nolong-short-em

    Like

    +

    Like short-em-nolong but the inline full form displays ⟨long⟩ - (⟨long⟩ (⟨short⟩). -

    +

    +

    short-nolong-desc

    Like the

    +

    Like the short-nolong style, but the name is set to the full form - obtained by expanding -


    is set to the full form obtained by + expanding +


    \glsxtrshortdescname

    -

    +

    (Similarly for the other shortmodifier\protect fragile and formatting commands and only redefin before \newabbreviation (or \newacronym). -

    The

    The description must be supplied by the user. You may prefer to use the description key. (See the sample file sample-acronym-desc.tex.) + + +

    +

    short-desc

    A synonym for

    +

    A synonym for short-nolong-desc. -

    +

    +

    short-sc-nolong-desc

    Like

    +

    Like short-nolong but redefines \glsabbrvfont to use - \glsabbrvfont to use \glsabbrvscfont (which defaults to (which + defaults to \textsc). - - - -

    +

    +

    short-sc-desc

    A synonym for

    +

    A synonym for short-sc-nolong-desc. -

    +

    +

    short-sm-nolong-desc

    Like

    +

    Like short-nolong-desc but redefines \glsabbrvfont to use - \glsabbrvfont to use \glsabbrvsmfont (which defaults to + (which defaults to \textsmaller). -

    +

    +

    short-sm-desc

    A synonym for

    +

    A synonym for short-sm-nolong-desc. -

    +

    +

    short-em-nolong-desc

    Like

    +

    Like short-nolong-desc but redefines \glsabbrvfont to use - \glsabbrvfont to use \glsabbrvemfont. -

    +

    +

    short-em-desc

    A synonym for

    +

    A synonym for short-em-nolong-desc. -

    +

    +

    long-noshort-desc

    This style only displays the long form, regardless of first or - subsequent use of commands

    +

    This style only displays the long form, regardless of first or subsequent use of + commands \gls. The short form may be accessed - through commands like . The short form may be accessed through commands like + \glsxtrshort. The inline full form displays ⟨long⟩ - (⟨long⟩ (⟨short⟩). -

    The

    The sort key are set to the long form. The name key is also set to the long form, but this is done by expanding -



    \glsxtrlongnoshortdescname

    -

    +

    (Similarly for the other longmodifier-desc styles, unless indicated otherwise.) This command should only be redefined before abbreviations are defined, and any fragile or formatting commands within it need protecting. -

    The

    The description must be provided by the user. The predefined glossary styles won’t display the short form. You can use the post-description hook to @@ -11229,93 +11728,104 @@ class="cmss-10">descriptionlong⟩ (⟨short⟩).

    +

    long-desc

    A synonym for

    +

    A synonym for long-noshort-desc. -

    +

    +

    long-noshort-sc-desc

    Like the

    +

    Like the long-noshort-desc style but the short form (accessed - through commands like style but the short form (accessed through commands + like \glsxtrshort) use \glsabbrvscfont. (This style was - originally called . (This style was originally called + long-desc-sc. Renamed in version 1.04, but original name - retained as a deprecated synonym for backward-compatibility.) -

    + id="dx1-29070">. Renamed in version 1.04, but original name retained as a + deprecated synonym for backward-compatibility.) +

    +

    long-noshort-sm-desc

    Like

    +

    Like long-noshort-desc but redefines \glsabbrvfont to use - \glsabbrvfont to use \glsabbrvsmfont. (This style was originally called . + (This style was originally called long-desc-sm. Renamed in - version 1.04, but original name retained as a deprecated synonym for - backward-compatibility.) - - - -

    + id="dx1-29074">. Renamed in version 1.04, but + original name retained as a deprecated synonym for backward-compatibility.) +

    +

    long-noshort-em-desc

    Like

    +

    Like long-noshort-desc but redefines \glsabbrvfont to use - \glsabbrvfont to use \glsabbrvemfont. The long form isn’t emphasized. (This style was originally - called . + The long form isn’t emphasized. (This style was originally called long-desc-em. Renamed in version 1.04, but original name retained as a - deprecated synonym for backward-compatibility.) -

    + id="dx1-29078">. + Renamed in version 1.04, but original name retained as a deprecated synonym + for backward-compatibility.) +

    +

    long-em-noshort-em-desc

    New to version 1.04, like

    + + + +

    New to version 1.04, like long-noshort-desc but - redefines \glsabbrvfont to use \glsabbrvemfont. The long form uses + id="dx1-29080"> but redefines \glsabbrvfont to use \glsabbrvemfont. The long form uses \glsfirstlongemfont and and + \glslongemfont. -

    +

    +

    long-noshort

    This style doesn’t really make sense if you don’t use the short form + id="dx1-29084">

    +

    This style doesn’t really make sense if you don’t use the short form anywhere in the document, but is provided for completeness. This is like the sortname key is also set to the short form, but this is done by expanding -



    \glsxtrlongnoshortname

    -

    +

    (Similarly for other longmodifier-noshortmodifier⟩ styles, unless indicated otherwise.) This command should only be redefined before abbreviations are defined, and fragile or formatting commands should be protected. -

    The

    The description is set to the long form.

    +

    long

    A synonym for

    +

    A synonym for long-noshort -

    +

    +

    long-noshort-sc

    Like the

    +

    Like the long-noshort style but the short form (accessed through - commands like style but the short form (accessed through commands like + \glsxtrshort) use \glsabbrvscfont. (This style was originally - called . (This style was originally called long-sc. Renamed in version 1.04, but original name retained as a - deprecated synonym for backward-compatibility.) -

    + id="dx1-29096">. + Renamed in version 1.04, but original name retained as a deprecated synonym + for backward-compatibility.) +

    +

    long-noshort-sm

    Like

    +

    Like long-noshort but redefines \glsabbrvfont to use - \glsabbrvfont to use \glsabbrvsmfont. (This style was originally called . (This + style was originally called long-sm. Renamed in - version 1.04, but original name retained as a deprecated synonym for - backward-compatibility.) -

    + id="dx1-29100">. Renamed in version 1.04, but original name + retained as a deprecated synonym for backward-compatibility.) +

    +

    long-noshort-em

    This style is like

    + + + +

    This style is like long-noshort but redefines \glsabbrvemfontlong-em. Renamed in version 1.04, but original name retained as a deprecated synonym for backward-compatibility.) -

    +

    +

    long-em-noshort-em

    New to version 1.04, this style is like

    +

    New to version 1.04, this style is like long-noshort but redefines - - - - \glsabbrvfont to use but redefines \glsabbrvfont + to use \glsabbrvemfont, \glsfirstlongfont to use - \glsfirstlongemfont and \glsfirstlongfont to use \glsfirstlongemfont + and \glslongfont to use \glslongemfont. The short - form isn’t used by commands like \glslongemfont. The short form isn’t used by + commands like \gls, but can be obtained using - , but can be obtained using \glsxtrshort. The related style . The related + style long-em-noshort-em-noreg doesn’t set the - doesn’t set the regular attribute. +

    -

    +

    -

    Top

    4.4.2 Predefined Abbreviation Styles that Don’t Set the Regular Attribute

    -

    The following abbreviation styles will set the

    The following abbreviation styles will set the regular attribute to “false” if it has previously been set. If it hasn’t already been set, it’s left unset. Other attributes may also be set, depending on the style.

    +

    long-short

    On

    +

    On first use, this style uses the format ⟨long⟩ (⟨short⟩). The inline and - display full forms are the same. The short⟩). The inline and display full + forms are the same. The sort key is set to the short form. The name - is also set to the short form through -


    is also set + to the short form through +


    \glsxtrlongshortname

    -

    +

    (Similarly for other longmodifiermodifier⟩ styles, unless indicated class="cmtt-10">\the\glslongtok and the short form can be referenced with \the\glsshorttok. -

    The

    The description is set to the long form. The long and short forms are separated by \glsxtrfullsep. If you want to insert material within the href="#abbrstyle.long-short-user">long-short-user style. + + +

    +

    long-short-sc

    Like

    +

    Like long-short but redefines \glsabbrvfont to use \glsabbrvscfont. -

    +

    +

    long-short-sm

    Like

    +

    Like long-short but redefines \glsabbrvfont to use \glsabbrvsmfont. -

    +

    +

    long-short-em

    Like

    +

    Like long-short but redefines \glsabbrvfont to use \glsabbrvemfont. -

    +

    +

    long-em-short-em

    New to version 1.04, this style is like

    +

    New to version 1.04, this style is like long-short-em but redefines @@ -11538,25 +12070,24 @@ class="cmss-10">long-short-em\glsfirstlongfont to use \glsfirstlongemfont. - - - -

    +

    +

    long-only-short-only

    New to version 1.17, this style only shows the long form on first - use and only shows the short form on subsequent use. The inline full form - \glsxtrfull shows the long form followed by the short form in parentheses. - The

    +

    New to version 1.17, this style only shows the long form on first use and only + shows the short form on subsequent use. The inline full form \glsxtrfull + shows the long form followed by the short form in parentheses. The name field is obtained from -


    field + is obtained from +


    \glsxtronlyname

    -

    +

    Any redefinition of this command must come before the abbreviations are defined as it expands on definition. Make sure you protect any commands that shouldn’t be expanded. The long form can be referenced @@ -11565,22 +12096,26 @@ class="cmtt-10">\the\glslongtok and the short form can be referenced with \the\glsshorttok.

    +

    long-only-short-only-desc

    New to version 1.17, this style is like

    +

    New to version 1.17, this style is like long-only-short-only - but the user must supply the description. The but the user must + supply the description. The name field is obtained - from -


    field is obtained from +


    \glsxtronlydescname

    -

    + + + +

    Any redefinition of this command must come before the abbreviations are defined as it expands on definition. Make sure you protect any commands that shouldn’t be expanded. The long form can be referenced @@ -11589,33 +12124,37 @@ class="cmtt-10">\the\glslongtok and the short form can be referenced with \the\glsshorttok.

    +

    long-em-noshort-em-noreg

    New to version 1.17, this style is like

    +

    New to version 1.17, this style is like long-em-noshort-em - but doesn’t set the but doesn’t set the + regular attribute. -

    +

    +

    long-short-user

    This style was introduced in version 1.04. It’s like the

    +

    This style was introduced in version 1.04. It’s like the long-short style - but additional information can be inserted into the parenthetical material. This + id="dx1-30032"> style but + additional information can be inserted into the parenthetical material. This checks the value of the field given by -



    \glsxtruserfield

    -

    +

    (which defaults to useri) using \ifglshasfieldlong⟩ (⟨short⟩, ⟨field-value⟩). The format is governed by -



    \glsxtruserparen{text}{label}

    -

    +

    where ⟨text⟩ is the short form (for the long-short-usershort-long-user style). This command first inserts a space using - - - \glsxtrfullsep and then the parenthetical content (using \glsxtrparen\glsxtrparendescription is set to -



    \glsuserdescription{long}{label}

    -

    +

    The default definition ignores the ⟨label⟩ and encapsulates ⟨long⟩ with \glslonguserfont. -

    The

    The name is obtained by expanding \glsxtrlongshortname (see above). The @@ -11694,40 +12230,40 @@ class="cmtt-10">} href="#abbrstyle.short-long-user">short-long-user style. -

    For example: +

    For example:

    -
    +
          \setabbreviationstyle[acronym]{long-short-user}
    -      
    \newacronym{tug}{TUG}{\TeX\ User Group} -  
    \newacronym -  
     [user1={German Speaking \TeX\ User Group}] -  
     {dante}{DANTE}{Deutschsprachige Anwendervereinigung \TeX\ e.V} -
    -

    On first use, +

    On first use, \gls{tug} will appear as: -

    -

    TeX User Group (TUG)

    -

    whereas

    +

    TeX User Group (TUG)

    +

    whereas \gls{dante} will appear as: -

    -

    Deutschsprachige Anwendervereinigung TeX e.V (DANTE, - German Speaking TeX User Group)

    -

    The short form is formatted according to -


    +

    Deutschsprachige Anwendervereinigung TeX e.V (DANTE, + German Speaking TeX User Group)

    +

    The short form is formatted according to +


    \glsabbrvuserfont{text}

    -

    +

    and the plural suffix is given by -



    \glsxtrusersuffix

    -

    -

    These may be redefined as appropriate. For example, if you want a smallcaps +

    +

    These may be redefined as appropriate. For example, if you want a smallcaps style, you can just set these commands to those used by the long-short-sclong-short-sc -

    -

    + \renewcommand{\glsxtrusersuffix}{\glsxtrscsuffix} + +

    +

    long-noshort-noreg

    This style is like

    +

    This style is like long-noshort but it doesn’t set the regular - attribute. -

    + id="dx1-30050"> attribute. +

    +

    long-noshort-desc-noreg

    This style is like

    +

    This style is like long-noshort-desc but it doesn’t set the - but it doesn’t set the regular attribute. -

    +

    +

    long-short-desc

    On

    +

    On first use, this style uses the format ⟨long⟩ (⟨short⟩). The - inline and display full forms are the same. The short⟩). The inline and display full + forms are the same. The name is set to the full - form. The is set to the full form. The sort key is set to ⟨long⟩ (⟨short⟩). Before version 1.04, this was - incorrectly set to the short form. If you want to revert back to this you can - redefine -


    long⟩ + (⟨short⟩). Before version 1.04, this was incorrectly set to the short form. If you + want to revert back to this you can redefine +


    \glsxtrlongshortdescsort

    -

    +

    For example:

    -
    +
          \renewcommand*{\glsxtrlongshortdescsort}{\the\glsshorttok}
    -
    -

    The +

    The description must be supplied by the user. The long and short forms are separated by \glsxtrfullsep. The name field is obtained from -



    \glsxtrlongshortdescname

    -

    +

    (Similarly for other longmodifier\the\glslongtok and the short form can be referenced with \the\glsshorttok.

    +

    long-short-sc-desc

    Like

    +

    Like long-short-desc but redefines \glsabbrvfont to use - \glsabbrvfont to use \glsabbrvscfont. -

    +

    +

    long-short-sm-desc

    Like

    +

    Like long-short-desc but redefines \glsabbrvfont to use - \glsabbrvfont to use \glsabbrvsmfont. -

    +

    +

    long-short-em-desc

    Like

    +

    Like long-short-desc but redefines \glsabbrvfont to use - \glsabbrvfont to use \glsabbrvemfont. -

    +

    +

    long-em-short-em-desc

    New to version 1.04, this style is like

    +

    New to version 1.04, this style is like long-short-em-desc but - redefines but redefines + \glsfirstlongfont to use \glsfirstlongemfont. -

    +

    +

    long-em-noshort-em-desc-noreg

    New to version 1.17, this style is like -

    +

    New to version 1.17, this style is like long-em-noshort-em-desc but doesn’t set the but doesn’t set + the regular attribute. -

    + + + +

    +

    long-short-user-desc

    New to version 1.04, this style is like a cross between the -

    +

    New to version 1.04, this style is like a cross between the long-short-desc style and the style + and the long-short-user style. The display and - inline forms are as for style. The display and inline forms are as for + long-short-user and the name key is obtained - from -


    key is obtained from +


    \glsxtrlongshortuserdescname

    - - - -

    +

    Again, this should only be redefined before \newabbreviation (or \newacronym), and fragile and formatting commands need protecting. -

    The

    The description key must be supplied in the optional argument of long-short-desc style.

    +

    short-nolong-noreg

    This is like

    +

    This is like short-nolong but doesn’t set the regular attribute. -

    +

    +

    nolong-short-noreg

    This is like

    +

    This is like nolong-short but doesn’t set the regular attribute. -

    +

    +

    short-long

    On

    +

    On first use, this style uses the format ⟨short⟩ (⟨short-long-user style. -

    The

    The name field is obtained from -



    \glsxtrshortlongname

    -

    +

    (Similarly for other shortmodifiermodifier⟩ styles, unless indicated class="cmtt-10">\the\glslongtok and the short form can be referenced with \the\glsshorttok. + + +

    +

    short-sc-long

    Like

    +

    Like short-long but redefines \glsabbrvfont to use \glsabbrvscfont. -

    +

    +

    short-sm-long

    Like

    +

    Like short-long but redefines \glsabbrvfont to use \glsabbrvsmfont. -

    +

    +

    short-em-long

    Like

    +

    Like short-long but redefines \glsabbrvfont to use \glsabbrvemfont. -

    +

    +

    short-em-long-em

    New to version 1.04, this style is like

    +

    New to version 1.04, this style is like short-em-long but redefines @@ -12052,30 +12616,29 @@ class="cmss-10">short-em-long\glsfirstlongfont to use \glsfirstlongemfont. -

    +

    +

    short-long-user

    New to version 1.04. This style is like the

    +

    New to version 1.04. This style is like the long-short-user style but - with the long and short forms switched. The parenthetical material is governed - by the same command style but with the long + and short forms switched. The parenthetical material is governed by the same + command \glsxtruserparen, but the first argument supplied to it - - - - is the long form instead of the short form. The , but the first argument supplied to it is the + long form instead of the short form. The name field is obtained by expanding -



    \glsxtrshortlongname

    -

    +

    Again, this should only be redefined before \newabbreviation (or }{label}.

    +

    short-nolong-desc-noreg

    This style is like

    +

    This style is like short-nolong-desc but it doesn’t set the - but it doesn’t set the regular attribute. -

    +

    +

    short-long-desc

    On

    + + + +

    On first use, this style uses the format ⟨short⟩ (⟨long⟩). The - inline and display full forms are the same. The long⟩). The inline and display full + forms are the same. The name is set to the full - form. The is set to the full form. The description must be supplied by the user. The short and long - forms are separated by must + be supplied by the user. The short and long forms are separated by + \glsxtrfullsep. The name field is obtained - from -


    field is obtained from +


    \glsxtrshortlongdescname

    -

    +

    (Similarly for other shortmodifier\the\glslongtok and the short form can be referenced with \the\glsshorttok.

    +

    short-sc-long-desc

    Like

    +

    Like short-long-desc but redefines \glsabbrvfont to use - \glsabbrvfont to use \glsabbrvscfont. -

    +

    +

    short-sm-long-desc

    Like

    +

    Like short-long-desc but redefines \glsabbrvfont to use - \glsabbrvfont to use \glsabbrvsmfont. -

    +

    +

    short-em-long-desc

    Like

    +

    Like short-long-desc but redefines \glsabbrvfont to use - \glsabbrvfont to use \glsabbrvemfont. -

    +

    +

    short-em-long-em-desc

    New to version 1.04, this style is like

    +

    New to version 1.04, this style is like short-em-long-desc but - redefines but redefines + \glsfirstlongfont to use \glsfirstlongemfont. -

    +

    +

    short-long-user-desc

    New to version 1.04, this style is like a cross between the -

    +

    New to version 1.04, this style is like a cross between the short-long-desc style and the style + and the short-long-user style. The display and - inline forms are as for style. The display and inline forms are as for + short-long-user, but the name key is obtained - from - - - -


    key is obtained from +


    \glsxtrshortlonguserdescname

    -

    +

    Again, this should only be redefined before \newabbreviation (or \newacronym), and fragile and formatting commands need protecting. -

    The

    The description key must be supplied in the optional argument of \newabbreviation (or \newacronym).

    +

    short-footnote

    On

    +

    On first use, this style displays the short form with the long form as - a footnote. This style automatically sets the first use, this style displays the short form with the long form as a footnote. + This style automatically sets the nohyperfirst attribute to “true” for - the supplied category, so the attribute to “true” for the + supplied category, so the first use won’t be hyperlinked (but the footnote marker may be, if the hyperref package is used). -

    The inline full form uses the ⟨

    The inline full form uses the ⟨short⟩ (⟨long⟩) style. The namedescriptionname key is obtained by expanding: -



    \glsxtrfootnotename

    -

    +

    (Similarly for other shortmodifierfootnote styles, unless class="cmtt-10">\newabbreviation (or \newacronym), and fragile or formatting commands should be protected from expansion. -

    As from version 1.05, all the footnote styles use: -


    As from version 1.05, all the footnote styles use: +


    \glsfirstlongfootnotefont{text}

    -

    +

    to format the long form on first use or for the full form and -



    \glslongfootnotefont{text}

    -

    +

    to format the long form elsewhere (for example, when used with \glsxtrlong). -

    As from version 1.07, all the footnote styles use: -


    As from version 1.07, all the footnote styles use: +


    \glsxtrabbrvfootnote{label}{long}

    -

    +

    By default, this just does \footnote} (the first argument is ignored). For

    -
    +
          \renewcommand{\glsxtrabbrvfootnote}[2]{%
    -      
      \footnote{\glshyperlink[#2]{#1}}% -  
    } -
    -

    or to include the short form with a hyperlink: +   \footnote{\glshyperlink[#2]{#1}}% + } + +

    or to include the short form with a hyperlink:

    -
    +
          \renewcommand{\glsxtrabbrvfootnote}[2]{%
    -      
      \footnote{\glshyperlink[\glsfmtshort{#1}]{#1}: #2}% -  
    } -
    -

    Note that I haven’t used commands like +

    Note that I haven’t used commands like \glsxtrshort to avoid interference (see §2.4 §??sec:entryfmtmods Entry Display Style Modifications and §2.8 §??sec:nested + Nested Links).

    +

    footnote

    A synonym for

    +

    A synonym for short-footnote. -

    +

    +

    short-sc-footnote

    Like

    +

    Like short-footnote but redefines \glsabbrvfont to use - \glsabbrvfont to use \glsabbrvscfont. (This style was originally called . + (This style was originally called footnote-sc. Renamed in - version 1.04, but original name retained as a deprecated synonym for - backward-compatibility.) -

    + id="dx1-30165">. Renamed in version 1.04, but + original name retained as a deprecated synonym for backward-compatibility.) +

    +

    short-sc-footnote

    Like

    +

    Like short-footnote but redefines \glsabbrvfont to use - \glsabbrvfont to use \glsabbrvsmfont. (This style was originally called . + (This style was originally called footnote-sm. Renamed in - version 1.04, but original name retained as a deprecated synonym for - backward-compatibility.) -

    + id="dx1-30169">. Renamed in version 1.04, but + original name retained as a deprecated synonym for backward-compatibility.) +

    +

    short-em-footnote

    Like

    +

    Like short-footnote but redefines \glsabbrvfont to use - \glsabbrvfont to use \glsabbrvemfont. (This style was originally called . + (This style was originally called footnote-em. Renamed in - version 1.04, but original name retained as a deprecated synonym for - backward-compatibility.) -

    + id="dx1-30173">. Renamed in version 1.04, but + original name retained as a deprecated synonym for backward-compatibility.) +

    +

    short-footnote-desc

    (New to v1.42.) This is similar to

    +

    (New to v1.42.) This is similar to short-footnote, but the - , but the description must be supplied by the user. The must be + supplied by the user. The name field is obtained - from: -


    field is obtained from: + + + +


    \glsxtrfootnotedescname

    -

    +

    which defaults to ⟨short⟩ followed by ⟨long⟩ in parentheses, and the sort field is obtained from: -



    \glsxtrfootnotedescsort

    -

    +

    which defaults to just the short form. (Similarly for other shortmodifier-[post]footnote-desc styles, unless indicated otherwise.) - - - -

    Any redefinition of these commands must come before the abbreviations +

    Any redefinition of these commands must come before the abbreviations are defined as it expands on definition. Make sure you protect any commands that shouldn’t be expanded. The long form can be referenced with \the\glslongtok and the short form can be referenced with \the\glsshorttok.

    +

    footnote-desc

    A synonym for

    +

    A synonym for short-footnote-desc. -

    +

    +

    short-sc-footnote-desc

    Like

    +

    Like short-footnote-desc but redefines \glsabbrvfont to use - \glsabbrvfont to use \glsabbrvscfont. -

    +

    +

    short-sm-footnote-desc

    Like

    +

    Like short-footnote-desc but redefines \glsabbrvfont to use - \glsabbrvfont to use \glsabbrvsmfont. -

    +

    +

    short-em-footnote-desc

    Like

    +

    Like short-footnote-desc but redefines \glsabbrvfont to use - \glsabbrvfont to use \glsabbrvemfont. -

    +

    +

    short-postfootnote

    This is similar to the

    +

    This is similar to the short-footnote style but doesn’t modify the - category attribute. Instead it changes style but doesn’t modify the category + attribute. Instead it changes \glsxtrpostlinkcategory to insert the @@ -12507,7 +13099,10 @@ href="#glo:firstuse">first use. This will also defer the footnote \glsxtrifnextpunc. -

    The inline full form uses the ⟨

    The inline full form uses the ⟨short⟩ (⟨long⟩) style. The name\glsxtrfull (and its variants) so that it fakes non-first use. (Otherwise the footnote would appear after the inline form.)

    +

    postfootnote

    A synonym for

    +

    A synonym for short-postfootnote. -

    +

    +

    short-sc-postfootnote

    Like

    +

    Like short-postfootnote but redefines \glsabbrvfont to use - \glsabbrvfont to use \glsabbrvscfont. (This style was originally called . + (This style was originally called postfootnote-sc. Renamed in - version 1.04, but original name retained as a deprecated synonym for - backward-compatibility.) -

    + id="dx1-30206">. Renamed in version 1.04, but + original name retained as a deprecated synonym for backward-compatibility.) +

    +

    short-sm-postfootnote

    Like

    +

    Like short-postfootnote but redefines \glsabbrvfont to use - \glsabbrvfont to use \glsabbrvsmfont. (This style was originally called . + (This style was originally called postfootnote-sm. Renamed - in version 1.04, but original name retained as a deprecated synonym for - backward-compatibility.) - - - -

    + id="dx1-30210">. Renamed in version 1.04, but + original name retained as a deprecated synonym for backward-compatibility.) +

    +

    short-em-postfootnote

    Like

    +

    Like short-postfootnote but redefines \glsabbrvfont to use - \glsabbrvfont to use \glsabbrvemfont. (This style was originally called . + (This style was originally called postfootnote-em. Renamed - in version 1.04, but original name retained as a deprecated synonym for - backward-compatibility.) -

    + id="dx1-30214">. Renamed in version 1.04, but + original name retained as a deprecated synonym for backward-compatibility.) +

    +

    short-postfootnote-desc

    (New to v1.42.) This is similar to

    +

    (New to v1.42.) This is similar to short-postfootnote, but - the , but the description must be supplied by the user. The must be + supplied by the user. The name and sort are set as for - are set as for short-footnote-desc. -

    +

    +

    postfootnote-desc

    A synonym for

    +

    A synonym for short-postfootnote-desc. -

    + + + +

    +

    short-sc-postfootnote-desc

    Like

    +

    Like short-postfootnote-desc but redefines \glsabbrvfont - to use \glsabbrvfont to use + \glsabbrvscfont. -

    +

    +

    short-sm-postfootnote-desc

    Like

    +

    Like short-postfootnote-desc but redefines \glsabbrvfont - to use \glsabbrvfont to use + \glsabbrvsmfont. -

    +

    +

    short-em-postfootnote-desc

    Like

    +

    Like short-postfootnote-desc but redefines \glsabbrvfont - to use \glsabbrvfont to use + \glsabbrvemfont. -

    +

    +

    short-postlong-user

    This style was introduced in version 1.12. It’s like the -

    +

    This style was introduced in version 1.12. It’s like the short-long-user style but defers the parenthetical material to after the link-text. - This means that you don’t have such a long hyperlink (which can cause - problems for the DVI LaTeX format) and it also means that the user supplied - material can include a hyperlink to another location. The style but + defers the parenthetical material to after the link-text. This means that you + don’t have such a long hyperlink (which can cause problems for the DVI + LaTeX format) and it also means that the user supplied material can + include a hyperlink to another location. The name key is obtained - from key is obtained from + \glsxtrshortlongname. -

    +

    +

    short-postlong-user-desc

    This style was introduced in version 1.12. It’s like the - above

    +

    This style was introduced in version 1.12. It’s like the above short-postlong-user style but the + style but the description must be specified. The name - is obtained from is obtained from + \glsxtrshortlonguserdescname. -

    +

    +

    long-postshort-user

    This style was introduced in version 1.12. It’s like the - above

    +

    This style was introduced in version 1.12. It’s like the above short-postlong-user style but the long form is shown first and - the short form is in the parenthetical material (as for + style but the long form is shown first and the short form is in the parenthetical + material (as for long-short-user) - style. -

    + id="dx1-30241">) style. + + + +

    +

    long-postshort-user-desc

    This style was introduced in version 1.12. It’s like the - above

    +

    This style was introduced in version 1.12. It’s like the above long-postshort-user style but the + style but the description must be specified. The name - is obtained from is obtained from + \glsxtrlongshortuserdescname. - - - -

    +

    +

    long-hyphen-short-hyphen

    This style (new to v1.17) is designed to work - with the

    +

    This style (new to v1.17) is designed to work with the markwords category attribute. The full form is formatted - using -


    category + attribute. The full form is formatted using +


    \glsxtrlonghyphenshort{label}{short}{insert}

    -

    +

    where ⟨insert⟩ is the inserted material provided in the final optional argument of commands like name key is obtained from \glsxtrlongshortname. -

    Unlike the other ⟨

    Unlike the other ⟨long⟩ (⟨short⟩) type of styles, such as long-short, this style also repeats the insertion in the parenthetical part, so that the first use form is: -

    -

    +

    \glsfirstlonghyphenfont{long}insert⟩ class="cmtt-10">\glsfirstabbrvhyphenfont{⟨short}insert⟩)

    -

    The space before the parenthetical material is actually given by +class="cmti-10">insert⟩)

    +

    The space before the parenthetical material is actually given by \glsxtrfullsep{labelinsert⟩ may be moved into the formatting commands according to the conditional \ifglsxtrinsertinside. -

    For example, if

    For example, if ip is defined using:

    -
    +
          \glssetcategoryattribute{english}{markwords}{true}
    -      
    \setabbreviationstyle[english]{long-hyphen-short-hyphen} -  
    \newabbreviation[category=english]{ip}{IP}{Internet Protocol} -
    -

    then + \setabbreviationstyle[english]{long-hyphen-short-hyphen} + \newabbreviation[category=english]{ip}{IP}{Internet Protocol} + +

    then

    -
    +
          \gls{ip}[-Adressen]
    -
    -

    will do -

    -

    Internet-Protocol-Adressen (IP-Adressen)

    -

    on first use, whereas + +

    will do +

    +

    Internet-Protocol-Adressen (IP-Adressen)

    +

    on first use, whereas

    -
    +
          \gls{ip}[ Address]
    -
    -

    will do -

    -

    Internet Protocol Address (IP Address)

    -

    on first use. -

    Note that the hyphenation isn’t applied when using commands like + +

    will do +

    +

    Internet Protocol Address (IP Address)

    +

    on first use. +

    Note that the hyphenation isn’t applied when using commands like \glsxtrlong. This means that

    -
    +
          \glsxtrlong{ip}[-Adressen]
    -
    -

    will do -

    -

    Internet Protocol-Adressen

    + +

    will do +

    +

    Internet Protocol-Adressen

    -

    -

    If the

    +

    If the markwords attribute hadn’t been set, then the first use of @@ -12842,14 +13459,14 @@ class="cmss-10">markwords -

    -

    would do -

    -

    Internet Protocol-Adressen (IP-Adressen)

    -

    instead. -

    If the inserted material ⟨ +

    would do +

    +

    Internet Protocol-Adressen (IP-Adressen)

    +

    instead. +

    -

    -

    If you want the short version in small-caps, you can just redefine +

    +

    If you want the short version in small-caps, you can just redefine \glsabbrvhyphenfont and \glsxtrhyphensuffix to use the small-caps @@ -12867,23 +13484,25 @@ class="cmtt-10">\glsxtrhyphensuffix to use the small-caps

    -
    +
          \renewcommand{\glsabbrvhyphenfont}{\glsabbrvscfont}
    -      
    \renewcommand{\glsxtrhyphensuffix}{\glsxtrscsuffix} -
    -

    Similarly for other font-changing variations. + \renewcommand{\glsxtrhyphensuffix}{\glsxtrscsuffix} + +

    Similarly for other font-changing variations.

    +

    long-hyphen-noshort-desc-noreg

    New to version 1.17, this style is like -

    +

    New to version 1.17, this style is like long-hyphen-short-hyphen-desc except that the parenthetical part is omitted and - the long form is displayed on subsequent use. The short form can be accessed - with + except that the parenthetical part is omitted and the long form is + displayed on subsequent use. The short form can be accessed with + \glsxtrshort but just uses the default abbreviation font. There’s no regular version of this style as the regular form doesn’t have the flexibility to deal with the hyphen switch. The name is obtained from \glsxtrlongnoshortdescname. -

    +

    +

    long-hyphen-noshort-noreg

    New to version 1.17, this style is like -

    +

    New to version 1.17, this style is like long-hyphen-noshort-desc-noreg but the name is set to the short form and the - description is set to the long form. -

    + id="dx1-30259"> but the + name is set to the short form and the description is set to the long + form. +

    +

    long-hyphen-short-hyphen-desc

    -

    New to version 1.17. This is similar to

    +

    New to version 1.17. This is similar to long-hyphen-short-hyphen but the user @@ -12917,12 +13540,14 @@ class="cmss-10">name is obtained from \glsxtrlongshortdescname.

    +

    long-hyphen-postshort-hyphen

    -

    New to version 1.17. This is similar to

    +

    New to version 1.17. This is similar to long-hyphen-short-hyphen but the @@ -12946,15 +13571,18 @@ class="cmtt-10">{⟨label}insert⟩ + + +
    where -



    \glsxtrposthyphenshort{label}insert

    -

    +

    is in the post-link hook. This uses the format:
    insert⟩ (short}isnert⟩)
    - - - -

    The singular short form is always used here, even with

    The singular short form is always used here, even with \glspl. (Unlike long-hyphen-long-hyphen.)
    -

    -

    The part in the link-text on first use: -


    +

    The part in the link-text on first use: +


    \glsxtrlonghyphen{longlabel}{insert}

    -

    +

    checks if ⟨insert⟩ starts with a hyphen. If it does, then \glsxtrwordsep is locally @@ -12996,15 +13621,15 @@ class="cmti-10">insert⟩ for this style without causing nested hyperlinks, but only for commands like \gls. -

    Don’t use

    Don’t use \gls in the ⟨insert⟩ part for commands like \glsxtrfull, \glsxtrshort or \glsxtrlong.
    -

    -

    The inline full display format used by commands like

    +

    The inline full display format used by commands like \glsxtrfull behaves differently to the first use of \gls with this style. It’s better @@ -13016,12 +13641,14 @@ class="cmti-10">label⟩} if you want to ensure the full format.

    +

    long-hyphen-postshort-hyphen-desc

    -

    New to version 1.17. This is similar to

    +

    New to version 1.17. This is similar to long-hyphen-postshort-hyphen @@ -13031,18 +13658,23 @@ class="cmss-10">name\glsxtrlongshortdescname.

    +

    short-hyphen-long-hyphen

    This style (new to v1.17) is like

    + + + +

    This style (new to v1.17) is like long-hyphen-short-hyphen, - except that the short form is displayed first followed by the long form in - parentheses. The full form is formatted using -


    , except that the short + form is displayed first followed by the long form in parentheses. The full form is + formatted using +


    \glsxtrshorthyphenlong{label}{long}{insert}

    -

    +

    which behaves in an analogous way to \glsxtrlonghyphenshort. The namename\glsxtrshortlongname.

    +

    short-hyphen-long-hyphen-desc

    -

    New to version 1.17. This is similar to

    +

    New to version 1.17. This is similar to short-hyphen-long-hyphen but the user @@ -13073,26 +13707,24 @@ class="cmss-10">short-hyphen-long-hyphenname is obtained from \glsxtrshortlongdescname. - - -

    +

    short-hyphen-postlong-hyphen

    This style (new to v1.17) is like -

    +

    This style (new to v1.17) is like long-hyphen-postshort-hyphen, but the short form is displayed first followed by - the long form in parentheses. On first use, , but the short + form is displayed first followed by the long form in parentheses. On first use, + \gls{label}[insert] will do - +class="cmtt-10">] will do
    \glsxtrshorthyphen{short}insert
    where -



    \glsxtrposthyphenlong{label}insert

    -

    +

    is in the post-link hook. These commands behave in an analogous manner to those used with name is obtained from \glsxtrshortlongname. -

    Don’t use

    Don’t use \gls in the ⟨insert⟩ part for commands like \glsxtrfull, \glsxtrshort or \glsxtrlong.
    -

    -

    The inline full display format used by commands like

    +

    The inline full display format used by commands like \glsxtrfull behaves differently to the first use of \gls with this style. It’s better @@ -13144,12 +13776,17 @@ class="cmti-10">label⟩} if you want to ensure the full format.

    +

    short-hyphen-postlong-hyphen-desc

    -

    New to version 1.17. This is similar to

    +

    New to version 1.17. This is similar to short-hyphen-postlong-hyphen @@ -13160,13 +13797,13 @@ class="cmss-10">name\glsxtrshortlongdescname.

    -

    +

    -

    Top

    4.5 Defining New Abbreviation Styles

    -

    New abbreviation styles may be defined using: -


    New abbreviation styles may be defined using: +


    \newabbreviationstyle{namesetup}{fmts}

    -

    -

    where ⟨

    +

    where ⟨name⟩ is the name of the new style (as used in the mandatory argument of \setabbreviationstyleglossaries package’s \newacronymstyle command. - - - -

    You can’t use styles defined by

    You can’t use styles defined by \newacronymstyle with glossaries-extra unless you have reverted glossaries package can’t be used with abbreviations defined with \newabbreviation.
    -

    -

    The ⟨

    +

    The ⟨setup⟩ argument deals with the way the entry is defined and may set attributes for the given abbreviation category. This argument should redefine -



    \CustomAbbreviationFields

    -

    +

    to set the entry fields including the name (defaults to the short form if omitted), @@ -13228,12 +13862,12 @@ class="cmss-10">pluraldescription. -

    \CustomAbbreviationFields is expanded by \newabbreviation so take care to protect commands that shouldn’t be expanded.
    -

    -

    For example, the

    +

    For example, the long-short style has the following in ⟨setup⟩:

    -
    +
       \renewcommand*{\CustomAbbreviationFields}{%
    - 
        name={\protect\glsabbrvfont{\the\glsshorttok}}, - 
        sort={\the\glsshorttok}, - 
        first={\protect\glsfirstlongfont{\the\glslongtok}% - 
         \protect\glsxtrfullsep{\the\glslabeltok}% - 
         \glsxtrparen{\protect\glsfirstabbrvfont{\the\glsshorttok}}},% - 
        firstplural={\protect\glsfirstlongfont{\the\glslongpltok}% - 
         \protect\glsxtrfullsep{\the\glslabeltok}% - 
         \glsxtrparen{\protect\glsfirstabbrvfont{\the\glsshortpltok}}},% - 
        plural={\protect\glsabbrvfont{\the\glsshortpltok}},% - 
        description={\the\glslongtok}}% -
    -

    Note that the +

    Note that the first and firstplural are set even though they’re not used by \gls. -

    The basic styles, such as

    The basic styles, such as long-short, use commands like fmts⟩ argument even if they’re not used within \CustomAbbreviationFields. -

    The ⟨

    The ⟨setup⟩ argument may also redefine -



    \GlsXtrPostNewAbbreviation

    -

    +

    which can be used to assign attributes. (This will automatically be initialised to do nothing.) -

    For example, the

    For example, the short-footnote includes the following in ⟨setup⟩:

    -
    +
       \renewcommand*{\GlsXtrPostNewAbbreviation}{%
    - 
        \glssetattribute{\the\glslabeltok}{nohyperfirst}{true}% - 
        \glshasattribute{\the\glslabeltok}{regular}% - 
        {% - 
          \glssetattribute{\the\glslabeltok}{regular}{false}% - 
        }% - 
        {}% - 
      }% -
    -

    This sets the +

    This sets the nohyperfirst attribute to “true”. It also unsets the nohyperfirst attribute doesn’t get unset by other styles, so take care not to switch styles for the same category. -

    You can access the short, long, short plural and long plural values through the +

    You can access the short, long, short plural and long plural values through the following token registers. -

    Short value (defined by

    Short value (defined by glossaries): -



    \glsshorttok

    -

    -

    Short plural value (defined by

    +

    Short plural value (defined by glossaries-extra): -



    \glsshortpltok

    -

    +

    (This may be the default value or, if provided, the value provided by the user through the shortplural key in the optional argument of \newabbreviation.) -

    Long value (defined by

    Long value (defined by glossaries): -



    \glslongtok

    -

    -

    Long plural value (defined by

    +

    Long plural value (defined by glossaries-extra): -



    \glslongpltok

    -

    +

    (This may be the default value or, if provided, the value provided by the user through the longplural key in the optional argument of \newabbreviation.) -

    The short or long values may be modified by attributes (such as

    The short or long values may be modified by attributes (such as markwords). The @@ -13365,15 +13999,15 @@ above registers reflect the modification. If you want to access the original (unmodified) short or long form (as provided in the final two arguments of \newabbreviation), then use the commands: -



    \glsxtrorgshort

    -

    +

    for the short form and -



    \glsxtrorglong

    -

    +

    for the long form. (These may be useful for the sort key to avoid any formatting that @@ -13381,36 +14015,36 @@ class="cmss-10">sort

    There are two other registers available that are defined by

    There are two other registers available that are defined by glossaries: -



    \glslabeltok

    -

    +

    which contains the entry’s label and -



    \glskeylisttok

    -

    +

    which contains the values provided in the optional argument of \newabbreviation. -

    Remember put

    Remember put \the in front of the register command as in the examples above. The category label can be access through the command (not a register): -



    \glscategorylabel

    -

    +

    This may be used inside the definition of \GlsXtrPostNewAbbreviation. -

    If you want to base a style on an existing style, you can use -


    If you want to base a style on an existing style, you can use +


    \GlsXtrUseAbbrStyleSetup{name}

    -

    +

    where ⟨name⟩ is the name of the existing style. For example, the -

    -

    within ⟨ +

    within ⟨setup⟩. -

    The ⟨

    The ⟨fmts⟩ argument deals with the way the entry is displayed in the document. This argument should redefine the following commands. -

    The default suffix for the plural short form (if not overridden by the

    The default suffix for the plural short form (if not overridden by the shortplural key): -



    \abbrvpluralsuffix

    -

    +

    (Note that this isn’t used for the plural long form, which just uses the regular \glspluralsuffix.) -

    The font used for the short form on

    The font used for the short form on first use or in the full forms: -



    \glsfirstabbrvfont{text}

    -

    -

    The font used for the short form on subsequent use or through commands like +

    +

    The font used for the short form on subsequent use or through commands like \glsxtrshort: -



    \glsabbrvfont{text}

    -

    -

    The font used for the long form on

    +

    The font used for the long form on first use or in the full forms: -



    \glsfirstlongfont{text}

    -

    -

    The font used for the long form in commands like

    +

    The font used for the long form in commands like \glsxtrlong use: -



    \glslongfont{text}

    -

    -

    Display full form singular no case-change (used by

    +

    Display full form singular no case-change (used by \gls on first use for @@ -13483,15 +14117,15 @@ abbreviations without the regular attribute set): -



    \glsxtrfullformat{label}{insert}

    -

    -

    Display full form singular first letter converted to upper case (used by

    +

    Display full form singular first letter converted to upper case (used by \Gls on \Glsregular attribute set): -



    \Glsxtrfullformat{label}{insert}

    -

    -

    Display full form plural no case-change (used by

    +

    Display full form plural no case-change (used by \glspl on first use for @@ -13515,7 +14149,7 @@ abbreviations without the regular attribute set): -



    \glsxtrfullplformat{label}

    -

    -

    Display full form plural first letter converted to upper case (used by

    +

    Display full form plural first letter converted to upper case (used by \Glspl on first use for abbreviations without the regular attribute set): -



    \Glsxtrfullplformat{label}{insert}

    -

    -

    In addition ⟨

    +

    In addition ⟨fmts⟩ may also redefine the following commands that govern the inline full formats. If the style doesn’t redefine them, they will default to the same as the display full forms. -

    Inline singular no case-change (used by

    Inline singular no case-change (used by \glsentryfull, \glsxtrfull\glsxtrfull\GLSxtrfull): -



    \glsxtrinlinefullformat{label}{insert}

    -

    -

    Inline singular first letter converted to upper case (used by

    +

    Inline singular first letter converted to upper case (used by \Glsentryfull and \Glsxtrfull): -



    \Glsxtrinlinefullformat{label}{insert}

    -

    -

    Inline plural no case-change (used by

    +

    Inline plural no case-change (used by \glsentryfullpl, \glsxtrfullpl\glsxtrfullpl\GLSxtrfullpl): -



    \glsxtrinlinefullplformat{label}{insert}

    -

    -

    Inline plural first letter converted to upper case (used by

    +

    Inline plural first letter converted to upper case (used by \Glsentryfullpl and \Glsxtrfullpl): -



    \Glsxtrinlinefullplformat{label}{insert}

    -

    -

    (New to version 1.17.) You can also modify the way the subsequent use is +

    +

    (New to version 1.17.) You can also modify the way the subsequent use is formatted by redefining the following four commands, but these won’t be used for abbreviations with the regular attribute set. If the style doesn’t redefine these commands, the default values are used. -

    Singular with no case-change: -


    Singular with no case-change: +


    \glsxtrsubsequentfmt{label}{insert}

    -

    -

    Singular with first letter upper case: -


    +

    Singular with first letter upper case: +


    \Glsxtrsubsequentfmt{label}{insert}

    -

    -

    Plural with no case-change: -


    +

    Plural with no case-change: +


    \glsxtrsubsequentplfmt{label}{insert}

    -

    +

    -

    Plural with first letter upper case: -


    Plural with first letter upper case: +


    \Glsxtrsubsequentplfmt{label}{insert}

    -

    -

    If you want to provide support for

    +

    If you want to provide support for glossaries-accsupp use the following \glsaccessxxx⟩ commands (§12.2 Accessibility Support) within the definitions of -§??sec:accsupp Accessibility Support) within the +definitions of \glsxtrfullformat etc instead of the analogous \glsentryxxx⟩ commands. (If you -don’t use xxx⟩ +commands. (If you don’t use glossaries-accsupp, they will just do the corresponding , they will just do the corresponding +\glsentryxxx⟩ -command.) -

    For example, the xxx⟩ command.) +

    For example, the short-long style has the following in ⟨fmts⟩:

    -
    +
       \renewcommand*{\abbrvpluralsuffix}{\glsxtrabbrvpluralsuffix}%
    - 
      \renewcommand*{\glsabbrvfont}[1]{\glsabbrvdefaultfont{##1}}% - 
      \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvdefaultfont{##1}}% - 
      \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}% - 
      \renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}% - 
      \renewcommand*{\glsxtrfullformat}[2]{% - 
        \glsfirstabbrvfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% - 
        \ifglsxtrinsertinside\else##2\fi - 
        \glsxtrfullsep{##1}% - 
        \glsxtrparen{\glsfirstlongfont{\glsaccesslong{##1}}}% - 
      }% - 
      \renewcommand*{\glsxtrfullplformat}[2]{% - 
        \glsfirstabbrvfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% - 
        \ifglsxtrinsertinside\else##2\fi - 
        \glsxtrfullsep{##1}% - 
        \glsxtrparen{\glsfirstlongfont{\glsaccesslongpl{##1}}}% - 
      }% - 
      \renewcommand*{\Glsxtrfullformat}[2]{% - 
        \glsfirstabbrvfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% - 
        \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% - 
        \glsxtrparen{\glsfirstlongfont{\glsaccesslong{##1}}}% - 
      }% - 
      \renewcommand*{\Glsxtrfullplformat}[2]{% - 
        \glsfirstabbrvfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% - 
         \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% - 
        \glsxtrparen{\glsfirstlongfont{\glsaccesslongpl{##1}}}% - 
      }% -
    -

    Since the inline full commands aren’t redefined, they default to the same as the +  \renewcommand*{\glsabbrvfont}[1]{\glsabbrvdefaultfont{##1}}% +  \renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvdefaultfont{##1}}% +  \renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}% +  \renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}% +  \renewcommand*{\glsxtrfullformat}[2]{% +    \glsfirstabbrvfont{\glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% +    \ifglsxtrinsertinside\else##2\fi +    \glsxtrfullsep{##1}% +    \glsxtrparen{\glsfirstlongfont{\glsaccesslong{##1}}}% +  }% +  \renewcommand*{\glsxtrfullplformat}[2]{% +    \glsfirstabbrvfont{\glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% +    \ifglsxtrinsertinside\else##2\fi +    \glsxtrfullsep{##1}% +    \glsxtrparen{\glsfirstlongfont{\glsaccesslongpl{##1}}}% +  }% +  \renewcommand*{\Glsxtrfullformat}[2]{% +    \glsfirstabbrvfont{\Glsaccessshort{##1}\ifglsxtrinsertinside##2\fi}% +    \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% +    \glsxtrparen{\glsfirstlongfont{\glsaccesslong{##1}}}% +  }% +  \renewcommand*{\Glsxtrfullplformat}[2]{% +    \glsfirstabbrvfont{\Glsaccessshortpl{##1}\ifglsxtrinsertinside##2\fi}% +     \ifglsxtrinsertinside\else##2\fi\glsxtrfullsep{##1}% +    \glsxtrparen{\glsfirstlongfont{\glsaccesslongpl{##1}}}% +  }% + +

    Since the inline full commands aren’t redefined, they default to the same as the display versions. -

    If you want to base a style on an existing style, you can use -


    If you want to base a style on an existing style, you can use +


    \GlsXtrUseAbbrStyleFmts{name}

    -

    +

    within ⟨fmts⟩, where ⟨name⟩ is the name of the existing style. For example, the @@ -13731,11 +14366,11 @@ class="cmti-10">fmts⟩:

    -
    +
       \GlsXtrUseAbbrStyleFmts{long-short}%
    -
    -

    -

    Here’s an example of an abbreviation style that’s based on +

    +

    Here’s an example of an abbreviation style that’s based on long-short that displays @@ -13745,18 +14380,18 @@ class="cmtt-10">\textsf:

    -
    +
     \newabbreviationstyle
    - 
    {custom-sf}% label - 
    {% setup - 
      \GlsXtrUseAbbrStyleSetup{short-long}% - 
    }% - 
    {% fmts - 
      \GlsXtrUseAbbrStyleFmts{short-long}% - 
      \renewcommand*{\glsabbrvfont}[1]{\textsf{##1}}% - 
    } -
    -

    Note that this wouldn’t work if it was instead based on one of the modified versions +{custom-sf}% label +{% setup +  \GlsXtrUseAbbrStyleSetup{short-long}% +}% +{% fmts +  \GlsXtrUseAbbrStyleFmts{short-long}% +  \renewcommand*{\glsabbrvfont}[1]{\textsf{##1}}% +} + +

    Note that this wouldn’t work if it was instead based on one of the modified versions such as short-sc-longshort-long\glsabbrvfont etc which makes them easier to adapt than the modified styles. -

    For further details, see the “Abbreviations” section in the documented code +

    For further details, see the “Abbreviations” section in the documented code (glossaries-extra-code.pdf).

    -

    -

    +

    Top

    5. Entries in Sectioning Titles, Headers, Captions and Contents

    -

    The

    The glossaries user manual cautions against using commands like \gls in chapter or section titles. The principle problems are:

      -
    • if you have a table of contents, the +

      if you have a table of contents, the first use flag will be unset in the contents rather than later in the document; -

    • -
    • if you have the location lists displayed in the glossary, unwanted locations +

    • +
    • +

      if you have the location lists displayed in the glossary, unwanted locations will be added to it corresponding to the table of contents (if present) and every page that contains the entry in the page header (if the page style in use adds the chapter or section title to the header); -

    • -
    • if the page style in use adds the chapter or section title to the header and +

    • +
    • +

      if the page style in use adds the chapter or section title to the header and attempts to convert it to upper case, the entry label (in the argument of \gls etc) will be converted to upper case and the entry won’t be recognised; -

    • -
    • if you use
    • +
    • +

      if you use hyperref, commands like \gls can’t be expanded to a simple @@ -13809,18 +14448,19 @@ class="cmtt-10">\gls can’t be expanded to a simple from hyperref); -

    • -
    • if you use
    • +
    • +

      if you use hyperref, you will end up with nested hyperlinks in the table of - contents.

    -

    Similar problems can also occur with captions (except for the page header and bookmark + contents.

    +

    Similar problems can also occur with captions (except for the page header and bookmark issues).

    -

    Top

    5.1 Simplistic Approach

    -

    To get around all these problems, the

    To get around all these problems, the glossaries user manual recommends using the expandable non-hyperlink commands, such as \glsentrytext\glstext or \glsxtrshort. This means + + + that if, for example, you are using one of the abbreviation styles that uses \textsc -

    -

    Or, if you are using +

    Or, if you are using hyperref:

    -
    +
     \chapter{A Chapter about
    - 
    \texorpdfstring{\glsabbrvfont{\glsentryshort{html}}}{\glsentryshort{html}}} -
    -

    -

    Since this is a bit cumbersome, you might want to define a new command to do +\texorpdfstring{\glsabbrvfont{\glsentryshort{html}}}{\glsentryshort{html}}} + +

    +

    Since this is a bit cumbersome, you might want to define a new command to do this for you. However, if you have mixed styles this won’t work as commands like \gls and \MakeUppercase. -

    The

    The glossaries-extra package tries to resolve this by modifying \markright and @@ -13886,16 +14529,16 @@ class="cmtt-10">\markboth and \@starttoc. If you don’t like this change, you can restore their former definitions using -



    \glsxtrRevertMarks

    -

    +

    If you only want to restore \@starttoc you can use: -



    \glsxtrRevertTocMarks

    -

    +

    If you restore the header or table of contents commands, you’ll have to use the glossaries manual’s recommendations of either simply using -

    +
     \chapter[A Chapter about \glsentryshort{html}]{A Chapter about \gls{html}}
    -
    -

    Alternatively, you need to find a way to insert +

    Alternatively, you need to find a way to insert \glsxtrmarkhook and \@glsxtrinmark at the start of the header or table of contents either scoped or afterwards cancelled with \@glsxtrnotinmark and \glsxtrrestoremarkhook. -

    If you don’t revert the mark commands back with

    If you don’t revert the mark commands back with \glsxtrRevertMarks, you can use the commands described below in the argument of sectioning commands. You can still use them even if the mark commands have been reverted, but only where they don’t conflict with the page style. -

    +

    -

    Top

    5.2 New Commands Designed for Chapter/Section Headings

    -

    The commands listed below are designed for use in chapter or section headings. +

    The commands listed below are designed for use in chapter or section headings. There are still limitations, but they provide a better solution. They all use \texorpdfstring\texorpdfstring will be needed as appropriate in that field. (Take care if the field has its value expanded before being assigned.) -

    These commands essentially behave as though you have used

    These commands essentially behave as though you have used \glsxtrshort, \glstext etc with the options headuc attribute to “true” for the appropriate category. -

    If you use one of the

    If you use one of the \textsc styles, be aware that the default fonts don’t provide bold small-caps or italic small-caps. This means that if the chapter @@ -13973,9 +14616,9 @@ class="cmtt-10">\glsabbrvfont. You may want to consider using the slantsc package in this case.
    -

    -

    Display the short form: -


    +

    Display the short form: +


    \glsfmtshort{label}

    -

    -

    Display the plural short form: -


    +

    Display the plural short form: +


    \glsfmtshortpl{label}

    -

    -

    First letter upper case singular short form: -


    +

    First letter upper case singular short form: +


    \Glsfmtshort{label}

    -

    +

    (No case-change applied to PDF bookmarks.) -

    First letter upper case plural short form: -


    First letter upper case plural short form: +


    \Glsfmtshortpl{label}

    -

    +

    (No case-change applied to PDF bookmarks.) -

    All caps singular short form: -


    All caps singular short form: +


    \GLSfmtshort{label}

    -

    +

    (No case-change applied to PDF bookmarks.) -

    All caps plural short form: -


    All caps plural short form: +


    \Glsfmtshortpl{label}

    -

    +

    (No case-change applied to PDF bookmarks.) -

    Display the long form: -


    Display the long form: +


    \glsfmtlong{label}

    -

    -

    Display the plural long form: -


    +

    Display the plural long form: +


    \glsfmtlongpl{label}

    -

    -

    First letter upper case singular long form: -


    +

    First letter upper case singular long form: +


    \Glsfmtlong{label}

    -

    +

    (No case-change applied to PDF bookmarks.) -

    First letter upper case plural long form: -


    First letter upper case plural long form: +


    \Glsfmtlongpl{label}

    -

    +

    (No case-change applied to PDF bookmarks.) -

    All caps singular long form: -


    All caps singular long form: +


    \GLSfmtlong{label}

    -

    +

    (No case-change applied to PDF bookmarks.) -

    All caps plural long form: -


    All caps plural long form: +


    \GLSfmtlongpl{label}

    -

    +

    (No case-change applied to PDF bookmarks.) -

    There are similar commands for the full form, but note that these use the

    There are similar commands for the full form, but note that these use the inline full form, which may be different from the full form used by \gls. The PDF version has to be a simple fully expandable command, so one of two commands that are unrelated to the style is used instead: -



    \glspdffmtfull{label}

    -

    +

    for the singular form or: -



    \glspdffmtfullpl{label}

    -

    +

    for the full form. These simply do the long form followed by the short form in parentheses. -

    Display the full form: -


    Display the full form: +


    \glsfmtfull{label}

    -

    -

    Display the plural full form: -


    +

    Display the plural full form: +


    \glsfmtfullpl{label}

    -

    -

    First letter upper case singular full form: -


    +

    First letter upper case singular full form: +


    \Glsfmtfull{label}

    -

    +

    (No case-change applied to PDF bookmarks.) -

    First letter upper case plural full form: -


    First letter upper case plural full form: +


    \Glsfmtfullpl{label}

    -

    +

    (No case-change applied to PDF bookmarks.) -

    All caps singular full form: -


    All caps singular full form: +


    \GLSfmtfull{label}

    -

    +

    (No case-change applied to PDF bookmarks.) -

    All caps plural full form: -


    All caps plural full form: +


    \GLSfmtfullpl{label}

    -

    +

    (No case-change applied to PDF bookmarks.) -

    There are also equivalent commands for the value of the

    There are also equivalent commands for the value of the text field: -



    \glsfmttext{label}

    -

    -

    First letter converted to upper case: -


    +

    First letter converted to upper case: +


    \Glsfmttext{label}

    -

    +

    (No case-change applied to PDF bookmarks.) -

    All caps: -


    All caps: +


    \GLSfmttext{label}

    -

    +

    (No case-change applied to PDF bookmarks.) -

    The plural equivalents: -


    The plural equivalents: +


    \glsfmtplural{label}

    -

    +

    First letter upper case: -



    \Glsfmtplural{label}

    -

    +

    and all caps: -



    \GLSfmtplural{label}

    -

    -

    Likewise for the value of the

    +

    Likewise for the value of the name field: -



    \glsfmtname{label}

    -

    -

    First letter converted to upper case: -


    +

    First letter converted to upper case: +


    \Glsfmtname{label}

    -

    +

    (No case-change applied to PDF bookmarks.) -

    All caps: -


    All caps: +


    \GLSfmtname{label}

    -

    +

    (No case-change applied to PDF bookmarks.) -

    Similarly for the value of the

    Similarly for the value of the first field: -



    \glsfmtfirst{label}

    -

    -

    First letter converted to upper case: -


    +

    First letter converted to upper case: +


    \Glsfmtfirst{label}

    -

    +

    (No case-change applied to PDF bookmarks.) -

    All caps: -


    All caps: +


    \GLSfmtfirst{label}

    -

    +

    (No case-change applied to PDF bookmarks.) -

    The plural equivalents: -


    The plural equivalents: +


    \glsfmtfirstpl{label}

    -

    +

    First letter upper case: -



    \Glsfmtfirstpl{label}

    -

    +

    and all caps: -



    \GLSfmtfirstpl{label}

    -

    +

    @@ -14266,11 +14909,11 @@ class="cmtt-10">}


    -

    -

    +

    Top

    6. Categories

    -

    Each entry defined by

    Each entry defined by \newglossaryentry (or commands that internally use it such as babel shorthands on that make some characters active.) -

    The use of categories can give you more control over the way entries are displayed +

    The use of categories can give you more control over the way entries are displayed in the text or glossary. Note that an entry’s category is independent of the glossary type. Be careful not to confuse category with type. -

    The default category assumed by

    The default category assumed by \newglossaryentry is labelled general. @@ -14304,7 +14947,7 @@ class="cmtt-10">\newacronym have the category set to acronym by default. -

    Additionally, if you have enabled

    Additionally, if you have enabled \newterm with the numbersnumber. -

    You can obtain the category label for a given entry using -


    You can obtain the category label for a given entry using +


    \glscategory{label}

    -

    +

    This is equivalent to commands like \glsentryname and so may be used in an expandable context. No error is generated if the entry doesn’t exist. -

    You can test the category for a given entry using -


    You can test the category for a given entry using +


    \glsifcategory{entry-label}{false part}

    -

    +

    This is equivalent to

    }
    so any restrictions that apply to \ifglsfieldeq also apply to \glsifcategory. -

    Each category may have a set of attributes. For example, the

    Each category may have a set of attributes. For example, the general and acronym\glsentryfmt to determine whether to use \glsgenentryfmt or \glsxtrgenabbrvfmt. -

    Other attributes recognised by

    Other attributes recognised by glossaries-extra are:

    +

    + + + nohyperfirst

    When using commands like

    +

    When using commands like \gls this will automatically suppress the - - - - hyperlink on this will automatically suppress the hyperlink + on first use for entries with a category that has this attribute set to “true”. (This settings can be overridden by explicitly setting the nohyperfirst attribute then just redefine -



    \glsxtrchecknohyperfirst{label}

    -

    +

    to do nothing.

    +

    nohyper

    When using commands like

    +

    When using commands like \gls this will automatically suppress the - hyperlink for entries with a category that has this attribute set to “true”. (This - settings can be overridden by explicitly setting the this will automatically suppress the hyperlink + for entries with a category that has this attribute set to “true”. (This settings + can be overridden by explicitly setting the hyper key on or off in the - optional argument of commands like key on or off in the optional + argument of commands like \gls.) -

    +

    +

    indexonlyfirst

    This is similar to the

    +

    This is similar to the indexonlyfirst package option but only for entries - that have a category with this attribute set to “true”. -

    + id="dx1-35038"> package option but only for entries that have + a category with this attribute set to “true”. +

    +

    wrgloss

    When using commands like

    +

    When using commands like \gls, if this attribute is set to “after”, it will automatically implement wrgloss=after. (New to v1.14.) -

    +

    +

    discardperiod

    If set to “true”, the post-

    +

    If set to “true”, the post-link-text hook will discard a full stop - (period) that follows link-text hook will discard a full stop (period) that + follows non-plural commands like \gls or \glstext. (Provided - for entries such as abbreviations that end with a full stop.) This attribute is - only applicable to entries defined using \glstext. (Provided for entries such + as abbreviations that end with a full stop.) This attribute is only applicable to + entries defined using \newabbreviation (or \newacronym if - it’s using \newacronym if it’s using + \newabbreviation.) This attribute doesn’t apply to the accessibility fields. -

    Note that this can cause a problem if you access a field that doesn’t end with a + + + +

    Note that this can cause a problem if you access a field that doesn’t end with a full stop. For example:

    -
    +
          \newabbreviation
    -      
     [user1={German Speaking \TeX\ User Group}] -  
     {dante}{DANTE e.V.}{Deutschsprachige Anwendervereinigung \TeX\ -  
    e.V.} -
    -

    Here the +

    Here the short and longuser1 -

    -

    This will bring the punctuation character inside the +

    This will bring the punctuation character inside the link-text and it won’t be discarded.

    +

    pluraldiscardperiod

    If this attribute is set to “true”

    +

    If this attribute is set to “true” and the discardperiod attribute is - set to “true”, this will behave as above for the plural commands like \glspl or - \glsplural. This attribute is only applicable to entries defined using + id="dx1-35049"> attribute is set to “true”, + this will behave as above for the plural commands like \glspl or \glsplural. + This attribute is only applicable to entries defined using \newabbreviation (or \newabbreviation (or \newacronym if it’s using \newabbreviation.) -

    +

    +

    retainfirstuseperiod

    If this attribute is set to “true” then the full stop won’t be - discarded for

    +

    If this attribute is set to “true” then the full stop won’t be discarded + for first use instances, even if \newacronym if it’s using \newabbreviation.) This attribute doesn’t apply to the accessibility fields. -

    +

    +

    markwords

    If this attribute is set to “true” any entry defined using

    +

    If this attribute is set to “true” any entry defined using \newabbreviation - will automatically have spaces in the long form replaced with -


    will + automatically have spaces in the long form replaced with +


    \glsxtrwordsep

    -

    +

    and each word is encapsulated with -



    \glsxtrword{word}

    -

    +

    For example:

    -
    +
          \glssetcategoryattribute{abbreviation}{markwords}{true}
    -      
    \newabbreviation{ip}{IP}{Internet Protocol} -
    -

    is essentially the same as + \newabbreviation{ip}{IP}{Internet Protocol} + +

    is essentially the same as

    -
    +
          \newabbreviation{ip}{IP}
    -      
    {\glsxtrword{Internet}\glsxtrwordsep\glsxtrword{Protocol}} -
    -

    The “hyphen” styles, such as +

    The “hyphen” styles, such as long-hyphen-short-hyphen, take advantage of this @@ -14630,68 +15292,72 @@ class="cmtt-10">\glsxtrlong. You can provide your own

    -
    +
          \newcommand{\hyplong}[2][]{%
    -      
     {\def\glsxtrwordsep{-}\glsxtrlong[#1]{#2}}} -
    -

    -

    This setting will also adjust the long plural. This attribute is only applicable to +  {\def\glsxtrwordsep{-}\glsxtrlong[#1]{#2}}} + +

    +

    This setting will also adjust the long plural. This attribute is only applicable to entries defined using \newabbreviation (or \newacronym if it’s using \newabbreviation.) -

    This setting may result in the

    This setting may result in the \glsxtrword and \glsxtrwordsep markup ending up in the sort field, depending on the style in use.
    -

    +

    +

    markshortwords

    This is similar to

    +

    This is similar to markwords but applies to the short form. (Only - useful for abbreviations that contain spaces.) This attribute is only applicable - to entries defined using but applies to the short form. (Only useful for + abbreviations that contain spaces.) This attribute is only applicable to + entries defined using \newabbreviation (or \newacronym if it’s using \newabbreviation.) -

    This setting will only adjust the short plural if the

    This setting will only adjust the short plural if the shortplural key isn’t used. This setting will take precedence over insertdots. -

    This setting may result in the

    This setting may result in the \glsxtrword and \glsxtrwordsep markup ending up in the sort field, depending on the style in use.
    -

    +

    +

    insertdots

    If this attribute is set to “true” any entry defined using

    +

    If this attribute is set to “true” any entry defined using \newabbreviation - will automatically have full stops (periods) inserted after each letter. The entry - will be defined with those dots present as though they had been present in the - ⟨short⟩ argument of \newabbreviation (rather than inserting them every time - the entry is used). The short plural form defaults to the new dotted version of - the original ⟨ will + automatically have full stops (periods) inserted after each letter. The entry will + be defined with those dots present as though they had been present in the ⟨short⟩ + argument of \newabbreviation (rather than inserting them every time the + entry is used). The short plural form defaults to the new dotted version of the + original ⟨short⟩ form with the plural suffix appended. This setting is \newabbreviation (or \newacronym if it’s using \newabbreviation.) -

    If you explicitly override the short plural using the

    If you explicitly override the short plural using the shortplural key, you must explicitly insert the dots yourself (since there’s no way for the code to determine if the plural has a suffix that shouldn’t be followed by a dot).
    -

    - - - -

    This attribute is best used with the

    +

    This attribute is best used with the discardperiod attribute set to “true”.

    +

    aposplural

    If this attribute is set to “true”,

    +

    If this attribute is set to “true”, \newabbreviation will insert an apostrophe (’) before the plural suffix for the \newacronym if it’s using \newabbreviation.) Check with your supervisor, publisher or editor if you want to use this attribute as this usage is controversial. -

    +

    +

    noshortplural

    If this attribute is set to “true”,

    +

    If this attribute is set to “true”, \newabbreviation won’t append the plural suffix for the short plural form. This means the \newabbreviation (or \newacronym if it’s using \newabbreviation.) -

    +

    +

    headuc

    If this attribute is set to “true”, commands like

    +

    If this attribute is set to “true”, commands like \glsfmtshort will use the upper case version in the page headers. -

    +

    +

    tagging

    If this attribute is set to “true”, the tagging command defined by + id="dx1-35082">

    +

    If this attribute is set to “true”, the tagging command defined by \GlsXtrEnableInitialTagging will be activated to use \glsxtrtagfont in the glossary (see §4.1 §??sec:tagging Tagging Initials). -

    +

    + + + +

    entrycount

    Unlike the above attributes, this attribute isn’t boolean but instead must - be an integer value and is used in combination with

    +

    Unlike the above attributes, this attribute isn’t boolean but instead must be an + integer value and is used in combination with \glsenableentrycount - (see (see + §2.5 Entry Counting Modifications). Leave blank or undefined for - categories that shouldn’t have this facility enabled. The value of this attribute - is used by §??sec:entrycountmods Entry Counting Modifications). Leave blank or + undefined for categories that shouldn’t have this facility enabled. The value of + this attribute is used by \glsxtrifcounttrigger to determine how commands such as to determine how commands + such as \cgls - should behave. -

    With should behave. +

    With glossaries, commands like \cgls use \cglsformat only if the previous @@ -14826,53 +15507,60 @@ class="cmss-10">entrycount

    +

    linkcount

    This attribute is set to

    +

    This attribute is set to true by \GlsXtrEnableLinkCounting (see (see + §7.2 - §??sec:linkcount Link Counting). -

    +

    +

    linkcountmaster

    This attribute is set to the name of the master counter by - - - + id="dx1-35092">

    +

    This attribute is set to the name of the master counter by \GlsXtrEnableLinkCounting if the optional argument is provided (see if the optional argument is provided (see + §7.2 - §??sec:linkcount Link Counting). -

    +

    +

    glossdesc

    The

    +

    The \glossentrydesc command (used in the predefined glossary styles) is modified by glossaries-extra to check for this attribute. The attribute may have - one of the following values: + one of the following values:

      -
    • +

      firstuc: the first letter of the description will be converted to upper case (using \Glsentrydesc). -

    • -
    • +
    • +

      title: the description will be used in the argument of the title casing command \capitalisewords\capitalisewordsmfirstuc). If you want to use a different command you can redefine: -



      \glsxtrfieldtitlecasecs{phrase cs}

      -

      + + + +

      For example:

      -
      +
                \newcommand*{\glsxtrfieldtitlecasecs}[1]{\xcapitalisefmtwords*{#1}}
      -
      -

      (Note that the argument to +

      (Note that the argument to \glsxtrfieldtitlecasecs will be a control sequence whose replacement text is the entry’s description, which is why \xcapitalisefmtwords is needed instead of \capitalisefmtwords.)

    -

    Any other values of this attribute are ignored. Remember that there are design +

    Any other values of this attribute are ignored. Remember that there are design limitations for both the first letter uppercasing and the title casing commands. See the mfirstuc user manual for further details.

    +

    glossdescfont

    (New to version 1.04) In addition to the above, the modified -

    +

    (New to version 1.04) In addition to the above, the modified \glossentrydesc command also checks this attribute. If set, it should be the - name of a control sequence (without the leading backslash) that takes one - argument. This control sequence will be applied to the description text. For - example: + id="dx1-35102"> + command also checks this attribute. If set, it should be the name of a control + sequence (without the leading backslash) that takes one argument. This control + sequence will be applied to the description text. For example: -

    +

    +
          \glssetcategoryattribute{general}{glossdescfont}{emph}
    -
    -

    + +

    +

    glossname

    As

    +

    As glossdesc but applies to \glossentryname. Additionally, if this - attribute is set to “uc” the name is converted to all capitals. -

    + id="dx1-35105">. Additionally, if this attribute is + set to “uc” the name is converted to all capitals. +

    +

    indexname

    If set, the

    +

    If set, the \glsxtrpostnamehook hook used at the end of \glossentryname @@ -14951,86 +15648,98 @@ class="cmtt-10">\glossentryname\index. See §8 Auto-Indexing for further - details. -

    +class="tcrm-1000">§??sec:autoindex Auto-Indexing for + further details. +

    +

    glossnamefont

    (New to version 1.04) In addition to the above, the modified -

    +

    (New to version 1.04) In addition to the above, the modified \glossentryname command also checks this attribute. If set, it should be the - name of a control sequence (without the leading backslash) that takes one - argument. This control sequence will be applied to the name text. For - example: + id="dx1-35110"> + command also checks this attribute. If set, it should be the name of a control + sequence (without the leading backslash) that takes one argument. This control + sequence will be applied to the name text. For example: -

    +

    +
          \glssetcategoryattribute{general}{glossnamefont}{emph}
    -
    -

    Note that this overrides +

    Note that this overrides \glsnamefont which will only be used if this attribute hasn’t been set. -

    Remember that glossary styles may additionally apply a font change, +

    Remember that glossary styles may additionally apply a font change, such as the list styles which put the name in the optional argument of \item.

    +

    glosssymbolfont

    (New to version 1.42.) This is similar to

    +

    (New to version 1.42.) This is similar to glossnamefont and - and glossdescfont but is used by but is + used by \glossentrysymbol. -

    +

    +

    textformat

    (New to version 1.21.) Commands like

    +

    (New to version 1.21.) Commands like \gls and \glstext have the link - text encapsulated in the argument of \glstextformat by default. If this - attribute is set, the control sequence given by the attribute value will be used - instead. As with the above, the attribute value should be the name (without - the leading backslash) of a command that takes a single argument (the link - text). Remember that the abbreviation styles may apply an additional font +class="cmtt-10">\glstext have the link text + encapsulated in the argument of \glstextformat by default. If this attribute is + set, the control sequence given by the attribute value will be used instead. As + with the above, the attribute value should be the name (without the leading + backslash) of a command that takes a single argument (the link text). + Remember that the abbreviation styles may apply an additional font change. -

    +

    +

    hyperoutside

    (New to v1.21.) The attribute value may be

    +

    (New to v1.21.) The attribute value may be false, true or unset. If - unset, true or unset. If unset, + true is assumed. This indicates the default setting of the hyperoutside - key, described in key, + described in §2.2 §??sec:wrglossary Entry Indexing. -

    +

    +

    dualindex

    If set, whenever a glossary entry has information written to the external + id="dx1-35118">

    +

    If set, whenever a glossary entry has information written to the external glossary file through commands like \gls and \glsadd\index. See §8 Auto-Indexing for - further details. -

    +class="tcrm-1000">§??sec:autoindex + Auto-Indexing for further details. + + + +

    +

    targeturl

    If set, the hyperlink generated by commands like \gls will be set to the - URL provided by this attributes value. For example: + id="dx1-35122">

    +

    If set, the hyperlink generated by commands like \gls will be set to the URL + provided by this attributes value. For example: -

    +

    +
          \glssetcategoryattribute{general}{targeturl}{master-doc.pdf}
    -
    -

    (See also the accompanying sample file +

    (See also the accompanying sample file sample-external.tex.) If the URL contains awkward characters (such as % or \glspercentchar and \glstildechar that expand to literal characters. -

    If you want to a named anchor within the target URL (notionally adding +

    If you want to a named anchor within the target URL (notionally adding #name⟩ to the URL), then you also need to set \glslabel within ⟨name⟩ which is set by commands like \gls to the entry’s label. -

    All the predefined glossary styles start each entry listing with

    All the predefined glossary styles start each entry listing with \glstarget which sets the anchor to \glolinkprefix\glslabel, so if you want @@ -15094,13 +15810,13 @@ class="cmss-10">targeturl -

    -

    (If the target document changed +

    (If the target document changed \glolinkprefix then you will need to adjust the above as appropriate.) -

    If the anchor is in the form ⟨

    If the anchor is in the form ⟨name1.name2⟩ then use targetcategory for the ⟨name1⟩ part. -

    For example: +

    For example:

    -
    +
          \glssetcategoryattribute{general}{targeturl}{master-doc.pdf}
    -      
    \glssetcategoryattribute{general}{targetcategory}{page} -  
    \glssetcategoryattribute{general}{targetname}{7} -
    -

    will cause all link text for +

    will cause all link text for general entries to link to master-doc.pdf#page.7 (page 7 of that PDF). -

    If you want a mixture in your document of entries that link to an internal +

    If you want a mixture in your document of entries that link to an internal glossary and entries that link to an external URL then you can use the starred form of \newignoredglossary\newignoredglossary -

    -

    + \glssetcategoryattribute{external}{targeturl}{master-doc.pdf} + \glssetcategoryattribute{general}{targetname}{\glolinkprefix\glslabel} + \newglossaryentry{sample}{name={sample},description={local example}} + \newglossaryentry{sample2}{name={sample2}, +   type=external, +   category=external, +   description={external example}} + +

    +

    externallocation

    The value should be the file name of the target document when - manually indexing an external location (see

    +

    The value should be the file name of the target document when manually + indexing an external location (see §2.2 Entry Indexing). In general, - it’s better to use §??sec:wrglossary Entry Indexing). In + general, it’s better to use bib2gls v1.7+ which can handle multiple external sources - and doesn’t require this attribute. +class="cmtt-10">bib2gls v1.7+ which can handle multiple external + sources and doesn’t require this attribute. +

    -

    If a term is defined using

    If a term is defined using \newabbreviation and accessibility support has been supplied via the accsuppshortaccess isn’t set its value will be obtained from: -



    \glsdefaultshortaccess{short}{long}

    -

    +

    This is defined by glossaries-accsupp to just do ⟨accessnoshortplural attributes below refer to the ⟨short⟩ form that’s passed to this command. -

    The following attributes are only applicable to entries defined using +

    The following attributes are only applicable to entries defined using \newabbreviation (or \newacronym if it’s using accsupp package option hasn’t been used.

    +

    accessinsertdots

    If this attribute is set to “true” and the

    +

    If this attribute is set to “true” and the glossaries-accsupp - package has been loaded (with the package has + been loaded (with the accsupp option), then this behaves - like option), then this behaves like insertdots but for the ⟨ + but for the ⟨short⟩ part used in the shortaccess field instead - of the field instead of the short field. This setting will be overridden by an explicit use of - the + + + + field. This setting will be overridden by an explicit use of the shortaccess key in the optional argument of \newabbreviation (or - + key in the optional argument of \newabbreviation (or \newacronym). -

    +

    +

    accessaposplural

    This boolean attribute overrides

    +

    This boolean attribute overrides aposplural for - - - - the for the shortpluralaccess key. Has no effect if there’s no accessibility support - or if the key. + Has no effect if there’s no accessibility support or if the shortaccess key hasn’t been set or if the key + hasn’t been set or if the shortpluralaccess key - is explicitly set. If the key is explicitly set. If the + aposplural is set and this attribute isn’t set and - the is set and this attribute isn’t set and the shortaccess key is set, then the key is set, + then the aposplural setting governs the default - setting governs the default shortpluralaccess setting. If you want setting. + If you want aposplural but don’t want it applied to - the accessibility support, set the but don’t want it applied to the accessibility + support, set the accessaposplural attribute to “false”. This - attribute is only applicable to entries defined using \newabbreviation (or - \newacronym if it’s using attribute to “false”. This attribute is only + applicable to entries defined using \newabbreviation (or \newacronym if + it’s using \newabbreviation.) -

    +

    +

    accessnoshortplural

    - This boolean attribute overrides

    This boolean attribute overrides noshortplural for the \newabbreviation (or \newacronym if it’s using \newabbreviation.) -

    +

    +

    nameshortaccess

    If this attribute is set to “true”, the

    +

    If this attribute is set to “true”, the access field (used for - the field (used for the name field’s accessibility support) automatically assigned if it’s not - provided. -

    + id="dx1-35165"> field’s + accessibility support) automatically assigned if it’s not provided. +

    +

    textshortaccess

    Like

    +

    Like nameshortaccess but applies to the textaccess field - automatically assigned if it’s not provided. -

    + id="dx1-35168"> field automatically + assigned if it’s not provided. +

    +

    firstshortaccess

    Like

    +

    Like nameshortaccess but applies to the firstaccess field - automatically assigned if it’s not provided. + id="dx1-35171"> field automatically + assigned if it’s not provided. +

    -

    An attribute can be set using: -


    An attribute can be set using: +


    \glssetcategoryattribute{category-label}{value}

    -

    +

    where ⟨category-label⟩ is the category label, ⟨attribute-label⟩ is the attribute label and ⟨value⟩ is the new value for the attribute. -

    There is a shortcut version to set the

    There is a shortcut version to set the regular attribute to “true”: -



    \glssetregularcategory{category-label}

    -

    -

    If you need to lookup the category label for a particular entry, you can use the +

    +

    If you need to lookup the category label for a particular entry, you can use the shortcut command: -



    \glssetattribute{entry-labelattribute-label}{value}

    -

    +

    This uses \glssetcategoryattribute with \glscategory to set the attribute. Note that this will affect all other entries that share this entry’s category. -

    You can fetch the value of an attribute for a particular category using: - - - -


    You can fetch the value of an attribute for a particular category using: +


    \glsgetcategoryattribute{category-label}{attribute-label}

    -

    +

    Again there is a shortcut if you need to lookup the category label for a given entry: -



    \glsgetattribute{entry-label}{attribute-label}

    -

    -

    You can test if an attribute has been assigned to a given category using: -


    +

    You can test if an attribute has been assigned to a given category using: +


    \glshascategoryattribute{category-labelcode}{false code}

    -

    +

    This uses etoolbox’s true code⟩ if the attribute has been set and isn’t blank and isn’t \relax. The shortcut if you need to lookup the category label from an entry is: -



    \glshasattribute{entry-labelfalse code}

    -

    -

    You can test the value of an attribute for a particular category using: -


    +

    You can test the value of an attribute for a particular category using: +


    \glsifcategoryattribute{category-labeltrue-part}{false-part}

    -

    +

    This tests if the attribute (given by ⟨attribute-label⟩) for the category (given by ⟨true-part⟩ is done. If the attribute isn’t set or is set but isn’t equal to ⟨value⟩, ⟨false part⟩ is done. -

    For example: +

    For example:

    -
    +
     \glsifcategoryattribute{general}{nohyper}{true}{NO HYPER}{HYPER}
    -
    -

    This does “NO HYPER” if the +

    This does “NO HYPER” if the general category has the nohyper attribute set to true otherwise if does “HYPER”. -

    With boolean-style attributes like

    With boolean-style attributes like nohyper, make sure you always test for true not false in case the attribute hasn’t been set. -

    Again there’s a shortcut if you need to lookup the category label from a particular +

    Again there’s a shortcut if you need to lookup the category label from a particular entry: -



    \glsifattribute{entry-label} class="cmtt-10">{⟨false-part}

    -

    -

    There’s also a shortcut to determine if a particular category has the

    +

    There’s also a shortcut to determine if a particular category has the regular attribute set to “true”: -



    \glsifregularcategory{category-label}{false-part}

    -

    +

    Alternatively, if you need to lookup the category for a particular entry: -



    \glsifregular{entry-labeltrue-part}{false-part}

    -

    +

    Note that if the regularregular attribute has been set to “false”: -



    \glsifnotregularcategory{category-label}{false-part}

    -

    +

    or for a particular entry: -



    \glsifnotregular{entry-labeltrue-part}{false-part}

    -

    +

    Again, if the regular attribute hasn’t been set, the above do ⟨false-part⟩, so these reverse commands aren’t logically opposite in the strict sense. -

    You can iterate through all entries with a given category using: -


    You can iterate through all entries with a given category using: +


    \glsforeachincategory[glossary-labels]{label-cs}{body}

    -

    +

    This iterates through all entries in the glossaries identified by the comma-separated list ⟨glossary-labels⟩ that have the category given by ⟨label-cs⟩ (which much be control sequences) to access the current glossary and entry label. If ⟨glossary-labels⟩ is omitted, all glossaries are assumed. -

    Similarly, you can iterate through all entries that have a category with a given +

    Similarly, you can iterate through all entries that have a category with a given attribute using: -



    \glsforeachwithattribute[glossary-labelslabel-cs}{body}

    -

    +

    This will do ⟨body⟩ for each entry that has a category with the attribute ⟨attribute-label⟩ set to ⟨attribute-value⟩. The remaining arguments are as the previous command. -

    You can change the category for a particular entry using the standard glossary +

    You can change the category for a particular entry using the standard glossary field changing commands, such as \glsfielddef. Alternatively, you can use -



    \glsxtrsetcategory{entry-labels}{category-label}

    -

    +

    This will change the category to ⟨category-label⟩ for each entry listed in the comma-separated list ⟨\glsfieldxdef so it will expand ⟨category-label⟩ and make the change global. -

    You can also change the category for all entries with a glossary or glossaries +

    You can also change the category for all entries with a glossary or glossaries using: -



    \glsxtrsetcategoryforall{glossary-labels}{category-label}

    -

    +

    where ⟨glossary-labels⟩ is a comma-separated list of glossary labels.

    -

    -

    +

    Top

    7. Counting References

    -

    There are three basic ways of counting entry references: +

    There are three basic ways of counting entry references:

      -
    1. Counting the total number of times +

      Counting the total number of times \glsunset is used (\glsreset resets the count and is best avoided). This is provided by the base glossaries has to be written to the .aux file so that it’s available on the next LaTeX run. -

      This method is extended by glossaries-extra and is described in

      This method is extended by glossaries-extra and is described in + §7.1 Entry - Counting (First Use Flag). +class="tcrm-1000">§??sec:entrycount Entry Counting (First Use Flag).

    2. -
    3. Counting the total number of records. This method is only available with +
    4. +

      Counting the total number of records. This method is only available with bib2gls and is intended for documents where the term differently if it’s only been recorded (indexed) a certain number of times. See §9.5 §??sec:recordcount Record Counting for further details. -

    5. -
    6. Counting the number of times the
    7. +
    8. +

      Counting the number of times the \gls-like or \glstext-like commands are used. (That is, those commands that internally use @@ -15718,40 +16453,48 @@ class="cmtt-10">\@gls@link.) Unlike the other two methods, this ju class="cmtt-10">\glslinkcheckfirsthyperhook, \glslinkpostsetkeys or \glslinkpresetkeys. See \glslinkpresetkeys. See §7.2 Link Counting for further details.

    -

    §??sec:linkcount Link Counting for further + details.

    +

    Top

    7.1 Entry Counting (First Use Flag)

    -

    As mentioned in

    As mentioned in §2.5 §??sec:entrycountmods Entry Counting Modifications, glossaries-extra modifies the -glossaries-extra +modifies the \glsenableentrycount command to allow for the entrycount attribute. This means -that you not only need to enable entry counting with +attribute. This means that you not only need to enable entry counting with +\glsenableentrycount, but -you also need to set the appropriate attribute (see , but you also need to set the appropriate attribute (see +§6 §??sec:categories Categories). -

    Remember that entry counting only counts the number of times an entry is used +

    Remember that entry counting only counts the number of times an entry is used by commands that change the first use flag. (That is, all those commands + + + that mark the entry as having been used.) There are many commands that don’t modify this flag and they won’t contribute to the entry use count.
    -

    -

    With

    +

    With glossaries-extra, you may use \cgls instead of entrycount attribute. (With glossaries, commands like \cgls -will generate a warning if \glsenableentrycount hasn’t been used.) The - - - -abbreviation shortcut will +generate a warning if \glsenableentrycount hasn’t been used.) The abbreviation +shortcut \ab uses \cgls (see §4.3 §??sec:abbrshortcuts Shortcut Commands). The acronym shortcut \acshortcuts=acro). -

    All upper case versions (not provided by

    All upper case versions (not provided by glossaries) are also available: -



    \cGLS[optionslabel}[insert]

    -

    +

    and -



    \cGLSpl[optionslabel}[insert]

    -

    +

    These are analogous to \cgls and \cglspl but they use -



    \cGLSformat{label}{insert}

    -

    +

    and -



    \cGLSplformat{label}{insert}

    -

    +

    which convert the analogous \cglsformat and \cglsplformat to upper case. -

    Just using

    Just using glossaries:

    -
    +
     \documentclass{article}
    - 
    \usepackage{glossaries} - 
    \makeglossaries - 
    \glsenableentrycount - 
    \newacronym{html}{HTML}{hypertext markup language} - 
    \newacronym{xml}{XML}{extensible markup language} - 
    \begin{document} - 
    Used once: \cgls{html}. - 
    Used twice: \cgls{xml} and \cgls{xml}. - 
    \printglossaries - 
    \end{document} -
    -

    -

    If you switch to +

    +

    If you switch to glossaries-extra you must set the entrycountentrycount -

    -

    -

    When activated with +

    +

    When activated with \glsenableentrycount, commands such as \cgls now use -



    \glsxtrifcounttrigger{labeltrigger code}{normal code}

    -

    +

    to determine if the entry trips the entry count trigger. The ⟨trigger code⟩ uses commands like trigger code⟩ but the usual \gls behaviour in ⟨normal code⟩). -

    The default definition is: +

    The default definition is:

    -
    +
     \newcommand*{\glsxtrifcounttrigger}[3]{%
    - 
     \glshasattribute{#1}{entrycount}% - 
     {% - 
       \ifnum\glsentryprevcount{#1}>\glsgetattribute{#1}{entrycount}\relax - 
        #3% - 
       \else - 
        #2% - 
       \fi - 
     }% - 
     {#3}% - 
    } -
    -

    This means that if an entry is assigned to a category that has the +

    This means that if an entry is assigned to a category that has the entrycount @@ -15948,17 +16689,17 @@ attribute then the ⟨trigger code⟩ will be used if the previous count value (the number of times the entry was used on the last run) is greater than the value of the attribute. -

    For example, to trigger normal use if the previous count value is greater than +

    For example, to trigger normal use if the previous count value is greater than four:

    -
    +
     \glssetcategoryattribute{abbreviation}{entrycount}{4}
    -
    -

    -

    There is a convenient command provided to enable entry counting, set the + +

    +

    There is a convenient command provided to enable entry counting, set the entrycount\gls, etc to use \cgls etc: -



    \GlsXtrEnableEntryCounting{categories}{value}

    -

    +

    The first argument ⟨categories⟩ is a comma-separated list of categories. For each category, the value⟩. In addition, this does:

    -
    +
     \renewcommand*{\gls}{\cgls}%
    - 
    \renewcommand*{\Gls}{\cGls}% - 
    \renewcommand*{\glspl}{\cglspl}% - 
    \renewcommand*{\Glspl}{\cGlspl}% - 
    \renewcommand*{\GLS}{\cGLS}% - 
    \renewcommand*{\GLSpl}{\cGLSpl}% -
    -

    This makes it easier to enable entry-counting on existing documents. -

    If you use +

    This makes it easier to enable entry-counting on existing documents. +

    If you use \GlsXtrEnableEntryCounting more than once, subsequent uses will just set the entrycount attribute for each listed category. -

    The above example document can then become: +

    The above example document can then become:

    -
    +
     \documentclass{article}
    - 
    \usepackage{glossaries-extra} - 
    \makeglossaries - 
    \GlsXtrEnableEntryCounting{abbreviation}{1} - 
    \newabbreviation{html}{HTML}{hypertext markup language} - 
    \newabbreviation{xml}{XML}{extensible markup language} - 
    \begin{document} - 
    Used once: \gls{html}. - 
    Used twice: \gls{xml} and \gls{xml}. - 
    \printglossaries - 
    \end{document} -
    -

    -

    The standard entry-counting function describe above counts the number of times +\usepackage{glossaries-extra} +\makeglossaries +\GlsXtrEnableEntryCounting{abbreviation}{1} +\newabbreviation{html}{HTML}{hypertext markup language} +\newabbreviation{xml}{XML}{extensible markup language} +\begin{document} +Used once: \gls{html}. +Used twice: \gls{xml} and \gls{xml}. +\printglossaries +\end{document} + +

    +

    The standard entry-counting function describe above counts the number of times an entry has been marked as used throughout the document. (The reset commands will reset the total back to zero.) If you prefer to count per sectional-unit, you can use -



    \GlsXtrEnableEntryUnitCounting{categories}{counter-name}

    -

    +

    where ⟨categories⟩ is a comma-separated list of categories to which this feature should be applied, ⟨value⟩ is the trigger value and ⟨counter-name⟩ is the name of the counter used by the sectional unit. -

    Due to the asynchronous nature of TeX’s output routine, discrepancies will occur +

    Due to the asynchronous nature of TeX’s output routine, discrepancies will occur in page spanning paragraphs if you use the page counter.
    -

    -

    Note that you can’t use both the document-wide counting and the per-unit +

    +

    Note that you can’t use both the document-wide counting and the per-unit counting in the same document. -

    The counter value is used as part of a label, which means that

    The counter value is used as part of a label, which means that \thecounter-name⟩ needs to be expandable. Since \theHcounter-name⟩ if it exists otherwise it will use \thecounter-name⟩. -

    The per-unit counting function uses two attributes:

    The per-unit counting function uses two attributes: entrycount (as before) and @@ -16074,69 +16815,69 @@ class="cmss-10">entrycountunitcount (the name of the counter). -

    Both the original document-wide counting mechanism and the per-unit counting +

    Both the original document-wide counting mechanism and the per-unit counting mechanism provide a command that can be used to access the current count value for this run: -



    \glsentrycurrcount{label}

    -

    +

    and the final value from the previous run: -



    \glsentryprevcount{label}

    -

    +

    In the case of the per-unit counting, this is the final value for the current unit. In both commands ⟨label⟩ is the entry’s label. -

    The per-unit counting mechanism additionally provides: -


    The per-unit counting mechanism additionally provides: +


    \glsentryprevtotalcount{label}

    -

    +

    which gives the sum of all the per-unit totals from the previous run for the entry given by ⟨label⟩, and -



    \glsentryprevmaxcount{label}

    -

    +

    which gives the maximum per-unit total from the previous run. -

    The above two commands are unavailable for the document-wide counting. -

    Example of per-unit counting, where the unit is the chapter: +

    The above two commands are unavailable for the document-wide counting. +

    Example of per-unit counting, where the unit is the chapter:

    -
    +
     \documentclass{report}
    - 
    \usepackage{glossaries-extra} - 
    \GlsXtrEnableEntryUnitCounting{abbreviation}{2}{chapter} - 
    \makeglossaries - 
    \newabbreviation{html}{HTML}{hypertext markup language} - 
    \newabbreviation{css}{CSS}{cascading style sheet} - 
    \newglossaryentry{sample}{name={sample},description={sample}} - 
    \begin{document} - 
    \chapter{Sample} - 
    Used once: \gls{html}. - 
    Used three times: \gls{css} and \gls{css} and \gls{css}. - 
    Used once: \gls{sample}. - 
    \chapter{Another Sample} - 
    Used once: \gls{css}. - 
    Used twice: \gls{html} and \gls{html}. - 
    \printglossaries - 
    \end{document} -
    -

    In this document, the +

    In this document, the css entry is used three times in the first chapter. This is more than the trigger value of 2, so \gls{css} is expanded on \gls{css} doesn’t get a line added to the glossary file. -

    The

    The html is used a total of three times, but the expansion and indexing suppression trigger is tripped in both chapters because the per-unit total (1 for the first chapter and 2 for the second chapter) is less than or equal to the trigger value. -

    The

    The sample entry has only been used once, but it doesn’t trip the indexing suppression because it’s in the general\GlsXtrEnableEntryUnitCounting. -

    The per-unit entry counting can be used for other purposes. In the following +

    The per-unit entry counting can be used for other purposes. In the following example document the trigger value is set to zero, which means the index suppression won’t be triggered, but the unit entry count is used to automatically suppress the hyperlink for commands like \gls by modifying the hook -



    \glslinkcheckfirsthyperhook

    -

    +

    which is used at the end of the macro the determines whether or not to suppress the hyperlink.

    -
    +
     \documentclass{article}
    - 
    \usepackage[colorlinks]{hyperref} - 
    \usepackage{glossaries-extra} - 
    \makeglossaries - 
    \GlsXtrEnableEntryUnitCounting{general}{0}{page} - 
    \newglossaryentry{sample}{name={sample},description={an example}} - 
    \renewcommand*{\glslinkcheckfirsthyperhook}{% - 
      \ifnum\glsentrycurrcount\glslabel>0 - 
       \setkeys{glslink}{hyper=false}% - 
      \fi - 
    } - 
    \begin{document} - 
    A \gls{sample} entry. - 
    Next use: \gls{sample}. - 
    \newpage - 
    Next page: \gls{sample}. - 
    Again: \gls{sample}. - 
    \printglossaries - 
    \end{document} -
    -

    This only produces a hyperlink for the first instance of +

    This only produces a hyperlink for the first instance of \gls{sample} on each page. -

    The earlier warning about using the

    The earlier warning about using the page counter still applies. If the first instance of \gls occurs at the top of the page within a paragraph that started on the previous page, then the count will continue from the previous page. -

    +

    -

    Top

    7.2 Link Counting

    -

    As from version 1.26, an alternative method of entry counting is to count the number +

    As from version 1.26, an alternative method of entry counting is to count the number @@ -16233,15 +16974,15 @@ class="cmtt-10">\hyperlink when displaying the link-text.) -

    To enable link counting use the preamble-only command: -


    To enable link counting use the preamble-only command: +


    \GlsXtrEnableLinkCounting[master counter]{categories}

    -

    +

    where ⟨categories⟩ is a list of category labels. The optional argument ⟨master @@ -16257,16 +16998,16 @@ href="#catattr.linkcountmaster">linkcountmaster attribute. -

    When enabled, commands like

    When enabled, commands like \gls and \glstext increment the associated counter using -



    \glsxtrinclinkcounter{counter name}

    -

    +

    This just does \stepcounter{counter name\refstepcounter instead, just redefine this command:

    -
    +
     \renewcommand*{\glsxtrinclinkcounter}[1]{\refstepcounter{#1}}
    -
    -

    -

    You can access the internal count register using -


    +

    +

    You can access the internal count register using +


    \GlsXtrLinkCounterValue{label}

    -

    +

    where ⟨label⟩ is the entry’s label. This will expand to 0 if the counter hasn’t been defined. -

    It’s also possible to access the display value (

    It’s also possible to access the display value (\thecounter⟩) using -



    \GlsXtrTheLinkCounter{counter}

    -

    +

    (This will expand to 0 if the counter hasn’t been defined.) -

    In order to conserve resources, the counter is only defined when it first +

    In order to conserve resources, the counter is only defined when it first needs to be incremented so terms that have been defined but haven’t been used in the document won’t have the associated count register allocated.
    -

    -

    You can test if the counter has been defined using: -


    +

    You can test if the counter has been defined using: +


    \GlsXtrIfLinkCounterDef{labeltrue}{false}

    -

    +

    where ⟨label⟩ is the entry’s label. -

    The counter name can be obtained using -


    The counter name can be obtained using +


    \GlsXtrLinkCounterName{label}

    -

    +

    This simply expands to the counter name associated with the entry given by ⟨label⟩ without any check for existence. For example, to change the display command @@ -16338,10 +17079,10 @@ class="cmss-10">etoolbox -

    -

    This is useful if you just want to change the display for specific entries but isn’t + +

    This is useful if you just want to change the display for specific entries but isn’t convenient if you want to change the display for all entries. Instead, it’s simpler to redefine \GlsXtrTheLinkCounter. For example: @@ -16349,16 +17090,16 @@ class="cmtt-10">\GlsXtrTheLinkCounter. For example:

    -
    +
     \renewcommand*{\GlsXtrTheLinkCounter}[1]{%
    - 
     \GlsXtrIfLinkCounterDef{#1}% - 
     {\Roman{\GlsXtrLinkCounterName{#1}}}% - 
     {0}% - 
    } -
    -

    In both cases, the redefinition should be implemented after +

    In both cases, the redefinition should be implemented after \GlsXtrEnableLinkCounting. -

    Here’s an example document that uses link counting to disable the hyperlink after +

    Here’s an example document that uses link counting to disable the hyperlink after the first reference. This redefines \glslinkpresetkeys (which is used by both \glstext).

    -
    +
     \documentclass{article}
    - 
    \usepackage[colorlinks]{hyperref} - 
    \usepackage{glossaries-extra} - 
    \makeglossaries - 
    \renewcommand*{\glslinkpresetkeys}{% - 
     \ifnum\GlsXtrLinkCounterValue{\glslabel}>1 - 
      \setkeys{glslink}{hyper=false}% - 
     \fi - 
    } - 
    \GlsXtrEnableLinkCounting{general} - 
    \newglossaryentry{sample1}{name={sample1},description={an example}} - 
    \newglossaryentry{sample2}{name={sample2},description={another example}} - 
    \newabbreviation{ex}{ex}{example} - 
    \begin{document} - 
    \section{Sample Section} - 
    \Gls{sample1}, \gls{sample2} and \gls{ex}. - 
    \Glstext{sample1} and \gls{ex} again. - 
    \section{Another Sample Section} - 
    \Gls{sample1}, \gls{sample2} and \gls{ex}. - 
    \printglossaries - 
    \end{document} -
    -

    The use of +

    The use of \glslinkpresetkeys means that the options can override this. For example @@ -16404,10 +17145,10 @@ example

    -
    +
     \gls[hyper=true]{sample1}
    -
    -

    will override the +

    will override the hyper=false setting in \glslinkpresetkeys. If \glslinkpostsetkeyshyper=false setting will override the setting provided in the optional argument. -

    The

    The abbreviation category doesn’t have the -

    -

    will always be false. This means that the abbreviation won’t have +

    will always be false. This means that the abbreviation won’t have hyper=false applied. If the test is changed to

    -
    +
     \ifnum\GlsXtrLinkCounterValue{\glslabel}=1
    - 
    \else - 
     \setkeys{glslink}{hyper=false}% - 
    \fi -
    -

    Then the abbreviation will always have +

    Then the abbreviation will always have hyper=false applied. -

    To reset the counter every section use the optional argument to set the master +

    To reset the counter every section use the optional argument to set the master counter:

    -
    +
     \GlsXtrEnableLinkCounting[section]{general}
    -
    -

    + +

    -

    -

    +

    Top

    8. Auto-Indexing

    -

    It’s possible that you may also want a normal index as well as the glossary, +

    It’s possible that you may also want a normal index as well as the glossary, and you may want entries to automatically be added to the index (as in this document). There are two attributes that govern this: indexnamedualindex. -

    The auto-indexing is designed for

    The auto-indexing is designed for makeindex syntax. If you’ve used the bib2gls and its dual entries as an alternative approach.
    -

    -

    The

    +

    The \glsxtrpostnamehook macro, used at the end of \glossentrynamename key. -

    The internal macro used by the

    The internal macro used by the glossaries package to write the information to the external glossary file is modified to check for the dualindex attribute. -

    In both cases, the indexing is done through -


    In both cases, the indexing is done through +


    \glsxtrdoautoindexname{label}{attribute-label}

    -

    +

    This uses the standard \index command with the sort value taken from the entry’s @@ -16549,35 +17290,35 @@ class="cmti-10">label⟩}. As from v1.16, there are user-level commands available to change the sort and actual value used by the automated index. -

    The actual value is given by -


    The actual value is given by +


    \glsxtrautoindexentry{label}

    -

    +

    where ⟨label⟩ is the entry’s label. The default definition is:

    -
    +
     \newcommand*{\glsxtrautoindexentry}[1]{\string\glsentryname{#1}}
    -
    -

    Note the use of +

    Note the use of \string to prevent \glsentryname from being expanded as it’s written to the index file. -

    The sort value is assigned using: -


    The sort value is assigned using: +


    \glsxtrautoindexassignsort{cs}{label}

    -

    +

    where ⟨label⟩ is the entry label and ⟨cs⟩ is the command which needs to be set to the @@ -16586,21 +17327,21 @@ sort value. The default definition is:

    -
    +
     \newcommand*{\glsxtrautoindexassignsort}[2]{%
    - 
      \glsletentryfield{#1}{#2}{sort}% - 
    } -
    -

    After this macro is called, ⟨ +

    After this macro is called, ⟨cs⟩ is then processed to escape any of makeindex’s special characters. Note that this escaping is only performed on the sort not on the actual value. The escaping of the sort value is performed by -



    \glsxtrautoindexesc

    -

    +

    You can redefine this to do nothing if you want to omit the escaping. You may want to consider providing another field to obtain the appropriate sort value if the one provided in the sort field isn’t suitable (because it may already have had special characters escaped or it may be a numeric value in the case of sort by use or definition). -

    The command used to perform the actual indexing is: -


    The command used to perform the actual indexing is: +


    \glsxtrautoindex{text}

    -

    +

    This just does \index{text} by default. -

    The entry’s

    The entry’s parent field isn’t referenced in this automated indexing.
    -

    -

    For example, to index the value of the

    +

    For example, to index the value of the first key, instead of the namename -

    -

    and if the sort value also needs to be set to the +

    and if the sort value also needs to be set to the long field, if present, otherwise the sort -

    -

    -

    If the value of the attribute given by ⟨ +

    +

    If the value of the attribute given by ⟨attribute-label⟩ is “true”, no encap will be added, otherwise the encap will be the attribute value. For example:

    -
    +
     \glssetcategoryattribute{general}{indexname}{textbf}
    -
    -

    will set the encap to +

    will set the encap to textbf which will display the relevant page number in bold whereas

    -
    +
     \glssetcategoryattribute{general}{dualindex}{true}
    -
    -

    won’t apply any formatting to the page number in the index. -

    The location used in the index will always be the page number not the counter + +

    won’t apply any formatting to the page number in the index. +

    The location used in the index will always be the page number not the counter used in the glossary. (Unless some other loaded package has modified the definition of \index to use some thing else.)
    -

    -

    By default the

    +

    By default the format key won’t be used with the format key to override the attribute value by using the preamble-only command: -



    \GlsXtrEnableIndexFormatOverride

    -

    +

    If you use this command and hyperref has been loaded, then the \glshypernumber to allow formats that use that command. -

    The

    The dualindex attribute will still be used on subsequent use even if the @@ -16721,8 +17462,8 @@ class="cmss-10">dualindexnoindex key.
    -

    -

    The

    +

    The \glsxtrdoautoindexname command will attempt to escape any of \makeindex\encapchar have been defined before glossaries-extra is loaded). -

    If this isn’t the case, you can use the following preamble-only commands to set +

    If this isn’t the case, you can use the following preamble-only commands to set the correct characters. -

    Be very careful of possible shifting category codes!
    -

    -


    Be very careful of possible shifting category codes!
    +

    +


    \GlsXtrSetActualChar{char}

    -

    +

    Set the actual character to ⟨char⟩. -



    \GlsXtrSetLevelChar{char}

    -

    +

    Set the level character to ⟨char⟩. -



    \GlsXtrSetEscChar{char}

    -

    +

    Set the escape (quote) character to ⟨char⟩. -



    \GlsXtrSetEncapChar{char}

    -

    +

    Set the encap character to ⟨char⟩.

    -

    -

    +

    Top

    9. bib2gls: Managing Reference Databases

    -

    There is a new command line application called

    There is a new command line application called bib2gls, which works in much @@ -16811,7 +17552,7 @@ class="cmtt-10">.glstex file which is loaded using \glsxtrresourcefile (or \GlsXtrLoadResources). -

    This means that you can use a reference managing system, such as JabRef, to +

    This means that you can use a reference managing system, such as JabRef, to maintain the database and it reduces the TeX overhead by only defining the entries that are actually required in the document. If you currently have a .tex file that @@ -16826,19 +17567,19 @@ class="cmtt-10">convertgls2bibbib2gls.) -

    There are some new commands and options added to

    There are some new commands and options added to glossaries-extra to help assist the integration of bib2gls into the document build process. -

    This chapter just provides a general overview of

    This chapter just provides a general overview of bib2gls. The full details and some sample documents are provided in the bib2gls manual. -

    An example of the contents of

    An example of the contents of .bib file that stores glossary entries that can be extracted with bib2gls:

    -
    +
     @entry{bird,
    - 
      name={bird}, - 
      description = {feathered animal}, - 
      see={[see also]{duck,goose}} - 
    } - 
    @entry{duck, - 
      name={duck}, - 
      description = {a waterbird with short legs} - 
    } - 
    @entry{goose, - 
      name="goose", - 
      plural="geese", - 
      description={a waterbird with a long neck} - 
    } -
    -

    -

    The follow provides some abbreviations: - - - -

    -
    +  name={bird}, +  description = {feathered animal}, +  see={[see also]{duck,goose}} +} +@entry{duck, +  name={duck}, +  description = {a waterbird with short legs} +} +@entry{goose, +  name="goose", +  plural="geese", +  description={a waterbird with a long neck} +} + +

    +

    The follow provides some abbreviations: + + + +

    +
     @string{ssi={server-side includes}}
    - 
    @string{html={hypertext markup language}} - 
    @abbreviation{shtml, - 
      short="shtml", - 
      long= ssi # " enabled " # html, - 
      description={a combination of \gls{html} and \gls{ssi}} - 
    } - 
    @abbreviation{html, - 
      short ="html", - 
      long  = html, - 
      description={a markup language for creating web pages} - 
    } - 
    @abbreviation{ssi, - 
      short="ssi", - 
      long = ssi, - 
      description={a simple interpreted server-side scripting language} - 
    } -
    -

    -

    Here are some symbols: - - - -

    -
    +@string{html={hypertext markup language}} +@abbreviation{shtml, +  short="shtml", +  long= ssi # " enabled " # html, +  description={a combination of \gls{html} and \gls{ssi}} +} +@abbreviation{html, +  short ="html", +  long  = html, +  description={a markup language for creating web pages} +} +@abbreviation{ssi, +  short="ssi", +  long = ssi, +  description={a simple interpreted server-side scripting language} +} + +

    +

    Here are some symbols: + + + +

    +
     preamble{"\providecommand{\mtx}[1]{\boldsymbol{#1}}"}
    - 
    @symbol{M, - 
      name={$\mtx{M}$}, - 
      text={\mtx{M}}, - 
      description={a matrix} - 
    } - 
    @symbol{v, - 
      name={$\vec{v}$}, - 
      text={\vec{v}}, - 
      description={a vector} - 
    } - 
    @symbol{S, - 
      name={$\mathcal{S}$}, - 
      text={\mathcal{S}}, - 
      description={a set} - 
    } -
    -

    -

    To ensure that +

    +

    To ensure that bib2gls can find out which entries have been used in the @@ -16925,25 +17666,25 @@ class="cmss-10">record -

    -

    If this option’s value is omitted (as above), the normal indexing will be switched off, + +

    If this option’s value is omitted (as above), the normal indexing will be switched off, since bib2gls can also sort the entries and collate the locations. -

    If you still want to use an indexing application (for example, you need a custom +

    If you still want to use an indexing application (for example, you need a custom xindy rule), then just use record=alsoindex=hybrid and continue to use \makeglossaries -and \makeglossaries and +\printglossary (or \printglossaries), but you also need to instruct bib2gls to omit sorting to save time and to prevent the < class="cmss-10">sort key from being set. -

    The

    The .glstex file created by bib2gls is loaded using: -



    \glsxtrresourcefile[options]{filename}

    -

    +

    (Don’t include the file extension in ⟨filename⟩.) There’s a shortcut version (recommended over the above) that sets ⟨filename⟩ to use \jobname: -



    \GlsXtrLoadResources[options]

    -

    +

    On the first use, this command is a shortcut for

    }
    where ⟨n⟩ is the current value of -



    \glsxtrresourcecount

    -

    +

    which is incremented at the end of \GlsXtrLoadResources. Any advisory notes regarding \glsxtrresourcefile also apply to \GlsXtrLoadResources. -

    The

    The \glsxtrresourcefile command writes the line

    9.2

    Since the

    Since the .glstex file won’t exist on the first LaTeX run, the record.glstex file the references should be resolved. This may cause a shift in the locations if the actual text produced once the entry is defined is significantly larger than the placeholder ?? (as this can alter the page breaking). -

    Note that as from v1.12,

    Note that as from v1.12, \glsxtrresourcefile temporarily switches the category code of @ to 11 (letter) while it reads the file to allow for any internal commands stored in the location field.

    -

    Top

    9.1 Selection

    -

    The default behaviour is for

    The default behaviour is for bib2gls to select all entries that have a record in the @@ -17077,20 +17818,20 @@ methods), so you can do, for example,

    -
    +
     \GlsXtrSetDefaultNumberFormat{glsignore}
    -
    -

    at the start of the front matter and + +

    at the start of the front matter and

    -
    +
     \GlsXtrSetDefaultNumberFormat{glsnumberformat}
    -
    -

    at the start of the main matter to prevent any records in the front matter from + +

    at the start of the main matter to prevent any records in the front matter from occurring in the location lists. -

    Note that commands like

    Note that commands like \glsaddall and \glsaddallunused don’t work with bib2gls.
    -

    -

    If you want to add all entries to the glossary, you need to tell

    +

    If you want to add all entries to the glossary, you need to tell bib2gls this in the options list. For example: @@ -17111,22 +17852,22 @@ options list. For example:

    -
    +
     \GlsXtrLoadResources[src={terms},selection={all}]
    -
    -

    This will add all entries, regardless of whether or not they have any records in the + +

    This will add all entries, regardless of whether or not they have any records in the .aux file. Those that don’t have any records will have an empty location list. See the bib2gls user manual for more details of this option. -

    +

    -

    Top

    9.2 Sorting and Displaying the Glossary

    -

    There are many sorting options provided by

    There are many sorting options provided by bib2gls. The default is to sort according to the system locale. If the document has a language setting, you can use @@ -17144,13 +17885,13 @@ example:

    -
    +
     \GlsXtrLoadResources[
    - 
      src=terms, % data in terms.bib - 
      sort=de-DE-1996 % sort according to this locale - 
    ] -
    -

    The locale-sensitive sort methods usually ignore most punctuation so for lists of +  src=terms, % data in terms.bib +  sort=de-DE-1996 % sort according to this locale +] + +

    The locale-sensitive sort methods usually ignore most punctuation so for lists of symbols you may find it more appropriate to use one of the letter-base sort methods that sort according to the Unicode value of each character. Alternatively you can provide a custom rule. See the bib2gls manual for full details of all the available sort methods. -

    Since the

    Since the .glstex file only defines those references required within the document (selected according to the selection option) and the definitions have been written in @@ -17170,9 +17911,10 @@ class="cmtt-10">\printunsrtglossary (or \printunsrtglossaries), described in §10.2 §??sec:printunsrt Display All Entries Without Sorting or Indexing. -

    Suppose the

    Suppose the .bib examples shown above have been stored in the files terms.bib, -

    +
     \documentclass{article}
    - 
    \usepackage[record]{glossaries-extra} - 
    \setabbreviationstyle{long-short-desc} - 
    \GlsXtrLoadResources[src={terms,abbrvs,symbols}] - 
    \begin{document} - 
    \gls{bird} - 
    \gls{shtml} - 
    \gls{M} - 
    \printunsrtglossaries - 
    \end{document} -
    -

    The document build process (assuming the document is called +

    The document build process (assuming the document is called mydoc) is:

    -
    +
     pdflatex mydoc
    - 
    bib2gls mydoc - 
    pdflatex mydoc -
    -

    This creates a single glossary containing the entries: +

    This creates a single glossary containing the entries: bird, duck, goose, shtml. These cross-referenced entries won’t have a location list when the glossary is first displayed, but depending on how they are referenced, they may pick up a location list on the next document build. -

    The entries can be separated into different glossaries with different sort +

    The entries can be separated into different glossaries with different sort methods:

    -
    +
     \documentclass{article}
    - 
    \usepackage[record,abbreviations,symbols]{glossaries-extra} - 
    \setabbreviationstyle{long-short-desc} - 
    \GlsXtrLoadResources[src={terms},sort={en-GB},type=main] - 
    \GlsXtrLoadResources - 
     [src={abbrvs},sort={letter-nocase},type=abbreviations] - 
    \GlsXtrLoadResources - 
     [src={symbols},sort={use},type={symbols}] - 
    \begin{document} - 
    \gls{bird} - 
    \gls{shtml} - 
    \gls{M} - 
    \printunsrtglossaries - 
    \end{document} -
    -

    -

    Or you can have multiple instance of +

    +

    Or you can have multiple instance of \GlsXtrLoadResources with the same type, which will produce a glossary with ordered sub-blocks. For example: @@ -17274,25 +18016,25 @@ class="cmtt-10">type, which will produce a glossary with ordered sub-bloc

    -
    +
     \documentclass{article}
    - 
    \usepackage[record,style=indexgroup]{glossaries-extra} - 
    \setabbreviationstyle{long-short-desc} - 
    \GlsXtrLoadResources - 
     [src={abbrvs},sort={letter-nocase},type=main, - 
      group={Abbreviations}] - 
    \GlsXtrLoadResources - 
     [src={symbols},sort={use},type=main, - 
      group={Symbols}] - 
    \GlsXtrLoadResources[src={terms},sort={en-GB},type=main] - 
    \begin{document} - 
    \gls{bird} - 
    \gls{shtml} - 
    \gls{M} - 
    \printunsrtglossaries - 
    \end{document} -
    -

    This will result in a glossary where the first group has the title “Abbreviations”, the +\usepackage[record,style=indexgroup]{glossaries-extra} +\setabbreviationstyle{long-short-desc} +\GlsXtrLoadResources + [src={abbrvs},sort={letter-nocase},type=main, +  group={Abbreviations}] +\GlsXtrLoadResources + [src={symbols},sort={use},type=main, +  group={Symbols}] +\GlsXtrLoadResources[src={terms},sort={en-GB},type=main] +\begin{document} +\gls{bird} +\gls{shtml} +\gls{M} +\printunsrtglossaries +\end{document} + +

    This will result in a glossary where the first group has the title “Abbreviations”, the second group has the title “Symbols” and then follow the usual letter groups. Note that for this example to work, you must run myDoc.tex:

    -
    +
     pdflatex myDoc
    - 
    bib2gls -g myDoc - 
    pdflatex myDoc -
    -

    The value of the +

    The value of the group field must always be a label. You can set the corresponding title with \glsxtrsetgrouptitle (see §2.10.1 Glossary Style Modifications). If no -title is set then the label is used as the group title. -

    You can provide your own custom sort rule. For example, if you are using +class="tcrm-1000">§??sec:glosstylemods Glossary Style +Modifications). If no title is set then the label is used as the group title. +

    You can provide your own custom sort rule. For example, if you are using XƎLATEX or LuaLATEX:

    }]
    -

    +

    -

    Top

    9.3 The glossaries-extra-bib2gls package

    -

    The package option

    The package option record=onlybib2gls. The package isn’t loaded by record=alsoindex as that option -is intended for sorting with =hybrid as that option is +intended for sorting with makeindex or xindy and it is expected that the sorting -will be switched off (with the resource option xindy and it is expected that the sorting will +be switched off (with the resource option sort=none). -

    If

    If glossaries-extra-bib2gls is loaded via the record package option then the -check for associated language resource files (see package option then the check for +associated language resource files (see §14 §??sec:lang Multi-Lingual Support) will also search for the existence of glossariesxtr-script⟩ is the four letter script identifier, such as Latn). -

    This package provides some shortcut commands that use

    This package provides some shortcut commands that use \printunsrtglossary if the relevant package option has defined the associated glossary: \printunsrtnumbers\printunsrtindex. -

    The

    The savenumberlist package option doesn’t have any effect with \glsdisplaynumberlistlocation field -



    \glsxtrprovidecommand{csdefault]{definition}

    -

    +

    This command is intended for use in @preamble. It’s simply defined to -

    +
     @preamble{"\glsxtrprovidecommand{\int}{integral}"}
    -
    -

    This will force +

    This will force bib2gls to treat .glstex file (as it is by default) then it won’t override the current definition (provided by the kernel or redefined by a package). -

    The helper commands in the resource files are defined using

    The helper commands in the resource files are defined using \providecommand. For many of them, if you want to provide an alternative definition then you need to define the command before the resource file is loaded. There are a few that may be @@ -17754,7 +18498,7 @@ class="cmtt-10">\renewcommand then you will get an error on the first LaTeX run when the .glstex file doesn’t exist. In this case, you may prefer to use: -



    \glsrenewcommand{csdefault]{definition}

    -

    +

    This behaves like \renewcommand but only generates a warning rather than an error if the command isn’t already defined so it won’t interrupt the document build. -



    \GlsXtrIndexCounterLink{text}{label}

    -

    +

    If the \hyperref command has been defined (that is, bib2gls manual for further details (at least version 1.4). -

    If you use the

    If you use the set-widest resource option, bib2gls v1.8+ will now use: -



    \glsxtrSetWidest{typelevel}{text}

    -

    +

    (if it has been defined) to set the widest name for the given glossary type and level. This allows for both the alttreealttreeglossary-longextra, which need to know the widest name. -

    If

    If bib2gls can’t determine the widest name (typically because the name field consists of commands that aren’t recognised by the interpreter) then bib2gls v1.8+ will now use: -



    \glsxtrSetWidestFallback{max depth}{list}

    -

    +

    (if defined). Currently the maximum hierarchical depth ⟨max depth⟩ may only be 0 or 2. This command requires commands provided by the alttree\glssetwidest. -

    +

    -

    Top

    9.3.1 Supplemental Locations

    -



    \glsxtrdisplaysupploc{prefix}{location}

    -

    +

    This is used by externallocation attribute. This command sets up the location counter and prefix (used in the formation of hyperlinks) and then uses -



    \glsxtrmultisupplocation{locationsrc}{format}

    -

    +

    to format the actual location (with an external hyperlink, if supported). -

    +

    -

    Top

    9.3.2 Nameref Record

    -

    Normally locations are recorded in the

    Normally locations are recorded in the .aux file in the form: -



    \glsxtr@record{label}{}{location}

    -

    +

    The record=namerefbib2gls v1.8, instead uses: -



    \glsxtr@record@nameref{label}{href}{hcounter}

    -

    +

    where ⟨title⟩ is obtained from \@currentlabelname and ⟨title⟩ and class="cmti-10">href ⟩ will be left empty and bib2gls will treat it as a regular record. -

    Be careful with this option as ⟨

    Be careful with this option as ⟨href ⟩ will globally change on every instance of \refstepcounter but ⟨title⟩ won’t necessarily change. It can therefore cause unexpected behaviour.
    -

    -

    The final argument ⟨

    +

    The final argument ⟨hcounter⟩ is obtained from \theHcounter⟩ which provides the @@ -18003,7 +18747,7 @@ class="cmti-10">counter⟩ (most notably the equation counter with chapters) so this can fail. -

    Since

    Since bib2gls is customized specifically for use with \refstepcounter. However, you may choose to switch to using the ⟨href ⟩ target, which will take you to the nearest target before the indexing took place. -

    With

    With bib2gls v1.8+, normal locations are displayed using: -



    \glsnoidxdisplayloc{prefix}{format}{location}

    -

    +

    This is provided by the base glossaries package and is simply defined to do: -



    \setentrycounter[prefix]{}{location}

    -

    +

    Earlier versions of bib2gls only used this in the \setentrycounter command sets up the prefix needed for \glshypernumber to reform the target name from the given location. -

    The locations identified by

    The locations identified by \glsxtr@record@nameref are written by bib2gls to the location list using: -



    \glsxtrdisplaylocnameref{prefixhcounter}{file}

    -

    +

    With normal internal locations, ⟨file⟩ will always be empty. With supplemental locations, ⟨file⟩ will be the external file reference. -

    The default definition is: +

    The default definition is:

    -
    +
     \newcommand*{\glsxtrdisplaylocnameref}[8]{%
    - 
      \ifstrequal{#2}{equation}% - 
      {\glsxtrnamereflink{#3}{(#4)}{#2.#7}{#8}}% - 
      {% - 
         \ifstrempty{#5}% - 
         {% - 
           \glsxtrnamereflink{#3}{#4}{#2.#7}{#8}% - 
         }% - 
         {% - 
           \ifstrequal{#2}{page}% - 
           {\glsxtrnamereflink{#3}{#4}{#2.#7}{#8}}% - 
           {\glsxtrnamereflink{#3}{#5}{#2.#7}{#8}}% - 
         }% - 
      }% - 
    } -
    -

    which uses: -


    +

    which uses: +


    \glsxtrnamereflink{formattarget}{file}

    -

    +

    This ignores the ⟨prefix⟩, ⟨counter⟩ and } arguments and instead creates a hyperlink with the target name obtained from ⟨target⟩ (and ⟨file⟩, if not empty). -

    Since pages and equations typically don’t have titles, the default definition of +

    Since pages and equations typically don’t have titles, the default definition of \glsxtrdisplaylocnameref checks the counter was used as the location. If it’s pageequation, then the text is the location in parentheses. Otherwise the text is obtained from ⟨title⟩. -

    If ⟨

    If ⟨file⟩ is empty an internal link is created with: -



    \glsxtrfmtinternalnameref{targetformat}{title}

    -

    +

    otherwise an external link is created with: -



    \glsxtrfmtexternalnameref{targettitle}{file}

    -

    +

    The ⟨file⟩ argument is set by bib2gls for supplemental locations. -

    Here’s alternative definition that uses the ⟨

    Here’s alternative definition that uses the ⟨prefix⟩ and ⟨counter⟩ to reform the target name (as -

    +
     \renewcommand*{\glsxtrdisplaylocnameref}[7]{%
    - 
     \glsxtrnamereflink{#3}{#5}{#6}{#7}% - 
    } -
    -

    which uses: -


    +

    which uses: +


    \glsxtrnameloclink{prefix} class="cmtt-10">{⟨file}

    -

    +

    This uses the same commands as \glsxtrnamereflink to produce the hyperlinks. -

    In both cases, the link is encapsulated with the text-block command whose +

    In both cases, the link is encapsulated with the text-block command whose name is given by ⟨format⟩, but \glshypernumber is first locally redefined to @@ -18240,7 +18984,7 @@ class="cmti-10">format⟩ is hyperbf then it will simply behave like textbf. -

    For compactness,

    For compactness, bib2gls merges normal records if the ⟨location class="cmti-10">location⟩, as regular records). In all cases, the ⟨counter⟩ must also match. -

    +

    -

    Top

    9.3.3 Helper Commands for Resource Options

    -



    \glshex

    -

    +

    This is just defined as \string\u, which is required when you need to indicate a Unicode character in the form \uhex⟩ in some of the resource options (as illustrated above). -



    \glscapturedgroup

    -

    +

    This is just defined as \string\$ and is used for the captured group reference in a replacement part of a regular expression substitution (requires at least -

    -

    This only removes a full stop that follows any of the characters a,…,z or + +

    This only removes a full stop that follows any of the characters a,…,z or A,…,Z. -

    If you use the

    If you use the save-child-count resource option, you can test if the childcount field is non-zero using: -



    \GlsXtrIfHasNonZeroChildCount{labeltrue}{false}

    -

    +

    This internally uses \GlsXtrIfFieldNonZero and will do ⟨false⟩ if the field isn’t set. @@ -18323,12 +19067,12 @@ class="cmti-10">false⟩ you can use \glscurrentfieldvalue to access the value. (It will be 0 in ⟨false⟩ if the field isn’t set.) -

    A convenient shortcut for use in the

    A convenient shortcut for use in the entry-type-aliases setting: -



    \GlsXtrBibTeXEntryAliases

    -

    +

    This provides aliases for BibTeX’s standard entry types to @bibtexentry entry type (requires at least bib2gls version 1.4). -

    You may also want to provide storage keys for BibTeX’s standard fields rather +

    You may also want to provide storage keys for BibTeX’s standard fields rather than having to alias them all. This can be done with: -



    \GlsXtrProvideBibTeXFields

    -

    +

    Note that BibTeX’s type field clashes with the glossariesbibtextype field can be accessed with \glsxtrbibtype. Each of these commands takes the entry label as the sole argument. -

    The

    The glossaries-extra-bib2gls package also provides definitions of the missing mathematical Greek commands: upgreek has been loaded, the missing upright Greek commands are also provided. -

    The remaining commands provide common rule blocks for use in the +

    The remaining commands provide common rule blocks for use in the sort-rule resource option. If you want a rule for a specific locale, you can provide similar commands in a file called -

    +
     \ProvidesGlossariesExtraLang{welsh}[2018/02/23 v1.0]
    - 
    \@ifpackageloaded{glossaries-extra-bib2gls} - 
    { - 
      \newcommand{\glsxtrWelshRules}{% - 
       \glsxtrLatinA - 
       \string<b,B - 
       \string<c,C - 
       \string<ch,CH - 
       \string<d,D - 
       \string<dd,DD - 
       \string<\glsxtrLatinE - 
       \string<f,F - 
       \string<ff,FF - 
       \string<g,G - 
       \string<ng,NG - 
       \string<\glsxtrLatinH - 
       \string<\glsxtrLatinI - 
       \string<j,J - 
       \string<\glsxtrLatinL - 
       \string<ll,LL - 
       \string<\glsxtrLatinM - 
       \string<\glsxtrLatinN - 
       \string<\glsxtrLatinO - 
       \string<\glsxtrLatinP - 
       \string<ph,PH - 
       \string<r,R - 
       \string<rh,RH - 
       \string<\glsxtrLatinS - 
       \string<\glsxtrLatinT - 
       \string<th,TH - 
       \string<u,U - 
       \string<w,W - 
       \string<y,Y - 
      } - 
    } - 
    {}% glossaries-extra-bib2gls.sty not loaded -
    -

    (The use of +

    (The use of \string is in case the < character has been made active.) You can provide more than one rule-block per local, to allow for loanwords or foreign words. @@ -18485,7 +19229,7 @@ For example, you could provide \glsxtrWelshIRules, \glsxtrWelshIIRules etc. -

    If the rules are for a particular script (independent of language or region) then +

    If the rules are for a particular script (independent of language or region) then they can be provided in a file given by glossariesxtr-scriptglossariesxtr-Cyrl.ldf could contain:

    -
    +
     \ProvidesGlossariesExtraLang{Cyrl}[2018/02/23 v1.0]
    - 
    \newcommand*{\glsxtrGeneralCyrillicIRules}{% - 
      % Cyrillic rules - 
    } - 
    \newcommand*{\glsxtrGeneralCyrillicIIRules}{% - 
      % an alternative set of Cyrillic rules - 
    } -
    -

    (Remember that the required document language scripts need to be tracked through +\newcommand*{\glsxtrGeneralCyrillicIRules}{% +  % Cyrillic rules +} +\newcommand*{\glsxtrGeneralCyrillicIIRules}{% +  % an alternative set of Cyrillic rules +} + +

    (Remember that the required document language scripts need to be tracked through the tracklang package, in order for these files to be automatically loaded. This @@ -18518,7 +19262,7 @@ class="cmss-10">glossariestracklang documentation for further details.) -

    Alternatively, if the rules are specific to a subject rather than a region or +

    Alternatively, if the rules are specific to a subject rather than a region or language, then you can provide a supplementary package. For example, if you have a package called, say, mapsymbols that provides map symbols, then the file @@ -18528,23 +19272,23 @@ class="cmtt-10">mapsymbols.sty might contain:

    -
    +
     \NeedsTeXFormat{LaTeX2e}
    - 
    \ProvidesPackage{mapsymbols} - 
     some package or font loading stuff here to provide - 
     the appropriate symbols - 
    \newcommand{\Stadium}{...} - 
    \newcommand{\Battlefield}{...} - 
    \newcommand{\Harbour}{...} - 
     etc - 
     Provide a rule block: - 
    \newcommand{\MapSymbolOrder}{% - 
     \glshex 2694 % crossed-swords 0x2694 - 
     \string< \glshex 2693 % anchor 0x2693 - 
     \string< \glshex 26BD % football 0x26BD - 
    } -
    -

    and the supplementary file +

    and the supplementary file mapsymbols.bib can provide the appropriate definitions for bib2gls:

    -
    +
     @preamble{"\glsxtrprovidecommand{\Harbour}{\char"2693}
    - 
    \glsxtrprovidecommand{\Battlefield}{\char"2694} - 
    \glsxtrprovidecommand{\Stadium}{\char"26BD}"} -
    -

    Now both the preamble and rule block can be used in the resource set: +\glsxtrprovidecommand{\Battlefield}{\char"2694} +\glsxtrprovidecommand{\Stadium}{\char"26BD}"} + +

    Now both the preamble and rule block can be used in the resource set:

    -
    +
     \usepackage{mapsymbols}% my custom package
    - 
    \usepackage[record]{glossaries-extra} - 
    \GlsXtrLoadResources[ - 
      src={mapsymbols,% <--- my custom mapsymbols.bib - 
       entries% data in entries.bib - 
      }, - 
      sort={custom}, - 
      sort-rule={\glsxtrcontrolrules % control codes - 
     ;\glsxtrspacerules % space characters - 
     ;\glsxtrnonprintablerules % non-printable characters - 
     ;\glsxtrcombiningdiacriticrules % combining diacritics - 
     ,\glsxtrhyphenrules % hyphens - 
     <\glsxtrgeneralpuncrules % general punctuation - 
     <\glsxtrdigitrules % 0, ..., 9 - 
     <\glsxtrfractionrules % fraction symbols - 
     <\MapSymbolOrder % <--- custom map symbols - 
     <\glsxtrMathItalicGreekIrules % math-greek symbols - 
     <\glsxtrGeneralLatinIrules % Latin letters - 
     } - 
    ] -
    -

    -

    The following commands are provided by +

    +

    The following commands are provided by glossaries-extra-bib2gls. They should be separated by the rule separator characters & (ampersand) or < (less than). See Java’s RuleBasedCollator documentation for details of the rule syntax. -

    For example, the following will place the mathematical Greek symbols (

    For example, the following will place the mathematical Greek symbols (\alpha, \Beta -

    -

    -


    +

    +


    \glsxtrcontrolrules

    -

    +

    These are control characters that are usually placed at the start of a rule in the ignored section. They typically won’t occur in any sort values, but if they do they should normally be ignored. -



    \glsxtrspacerules

    -

    +

    These are space characters. They typically come after the control characters with the two blocks separated by a ; (semi-colon). -



    \glsxtrnonprintablerules

    -

    +

    These are non-printable characters (BOM, tabs, line feed and carriage return). They typically come after the spaces separated by a ; (semi-colon). These characters @@ -18655,10 +19399,10 @@ href="#glo:bib2gls">bib2gls when it determines whether or not to use the interpreter, so a TAB or newline character may end up in the sort value if it wasn’t interpreted. -



    \glsxtrcombiningdiacriticrules

    -

    +

    These are combining diacritic marks which typically follow the space and non-printable blocks (separated by a semi-colon). This command is defined in terms of sub-block commands: @@ -18666,35 +19410,35 @@ of sub-block commands:

    -
    +
     \newcommand*{\glsxtrcombiningdiacriticrules}{%
    - 
     \glsxtrcombiningdiacriticIrules\string; - 
     \glsxtrcombiningdiacriticIIrules\string; - 
     \glsxtrcombiningdiacriticIIIrules\string; - 
     \glsxtrcombiningdiacriticIVrules - 
    } -
    -

    If you prefer, you can use the sub-blocks directly in your required ordered. -


    +

    If you prefer, you can use the sub-blocks directly in your required ordered. +


    \glsxtrcombiningdiacriticIrules

    -

    +

    This contains the combining diacritics: acute, grave, breve, circumflex, caron, ring, vertical line above, diaeresis (umlaut), double acute, tilde, dot above, combining macron. -



    \glsxtrcombiningdiacriticIIrules

    -

    +

    This contains the combining diacritics: short solidus overlay, cedilla, ogonek, dot below, low line, overline, hook above, double vertical line above, double grave accent, candrabindu, inverted breve, turned comma above, comma above, reversed comma above, comma above right, grave accent below, acute accent below. -



    \glsxtrcombiningdiacriticIIIrules

    -

    +

    This contains the combining diacritics: left tack below, right tack below, left angle above, horn, left half ring below, up tack below, down tack below, plus sign below, minus sign below, palatalized hook below, retroflex hook below, diaresis below, ring @@ -18706,29 +19450,29 @@ seagull below, x above, vertical tilde, double overline, Greek perispomeni, Gree dialytika tonos, Greek ypogegrammeni, double tilde, double inverted breve, Cyrillic titlo, Cyrillic palatalization, Cyrillic dasia pneumata, Cyrillic psili pneumata. -



    \glsxtrcombiningdiacriticIVrules

    -

    +

    This contains the combining diacritics: left harpoon above, right harpoon above, long vertical line overlay, short vertical line overlay, anticlockwise arrow above, clockwise arrow above, left arrow above, right arrow above, ring overlay, clockwise ring overlay, anticlockwise ring overlay, three dots above, four dots above, enclosing circle, enclosing square, enclosing diamond, enclosing circle backslash, left right arrow above. -



    \glsxtrhyphenrules

    -

    +

    This contains hyphens (including the minus sign 0x2212). This rule block typically comes after the diacritic rules separated by a comma. -



    \glsxtrgeneralpuncrules

    -

    +

    This contains punctuation characters. This rule block typically comes after the hyphen rules separated by a less than (<). As with the combining diacritics, this @@ -18738,18 +19482,18 @@ different order is required:

    -
    +
     \newcommand*{\glsxtrgeneralpuncrules}{%
    - 
      \glsxtrgeneralpuncIrules - 
      \string<\glsxtrcurrencyrules - 
      \string<\glsxtrgeneralpuncIIrules - 
    } -
    -

    -


    +

    +


    \glsxtrgeneralpuncIrules

    -

    +

    This is the first punctuation sub-block containing: underscore, macron, comma, semi-colon, colon, exclamation mark, inverted exclamation mark, question mark, inverted question mark, solidus, full stop, acute accent, grave accent, @@ -18758,26 +19502,26 @@ straight double quote, left guillemet, right guillemet, left parenthesis, right parenthesis, left square bracket, right square bracket, left curly bracket, right curly bracket, section sign, pilcrow sign, copyright sign, registered sign, at sign. -



    \glsxtrcurrencyrules

    -

    +

    This sub-block contains some currency symbols: currency sign, Thai currency symbol baht, cent sign, colon sign, cruzeiro sign, dollar sign, dong sign, euro sign, French franc sign, lira sign, mill sign, naira sign, peseta sign, pound sign, rupee sign, new sheqel sign, won sign, yen sign. -



    \glsxtrgeneralpuncIIrules

    -

    +

    This sub-block contains some other punctuation symbols: asterisk, backslash, ampersand, hash sign, percent sign, plus sign, plus-minus sign, division sign, multiplication sign, less-than sign, equals sign, greater-than sign, not sign, vertical bar (pipe), broken bar, degree sign, micron sign. -



    \glsxtrdigitrules

    -

    +

    This rule block contains the Basic Latin digits (0, …, 9) and the subscript and superscript digits (0 0 etc) made equivalent to the corresponding Basic Lat The digit block typically comes after the punctuation rules separated by a less than (<). -



    \glsxtrBasicDigitrules

    -

    +

    This rule block contains just the Basic Latin digits (0, …, 9). -



    \glsxtrSubScriptDigitrules

    -

    +

    This rule block contains just the subscript digits (0 … 9). -



    \glsxtrSuperScriptDigitrules

    -

    +

    This rule block contains just the superscript digits (0 … 9). -



    \glsxtrfractionrules

    -

    +

    This rule block contains vulgar fraction characters. The digit block typically comes after the digit rules separated by a less than (<). -

    There are a number of Latin rule blocks. Some of these included extended +

    There are a number of Latin rule blocks. Some of these included extended characters or ligatures (such as ß or œ) but they don’t include accented characters. If you require a Latin rule block that includes accented characters, digraphs, trigraphs or other extended characters, then it’s best to provide similar @@ -18823,10 +19567,10 @@ class="cmtt-10">glossariesxtr-⟨tag.ldf file for the particular language or region. -



    \glsxtrGeneralLatinIrules

    -

    +

    This is just the basic (non-extended) Latin alphabet with the superscript and subscript Latin letters (a a etc) treated as the equivalent basic Latin letter. don’t want the subscripts and superscripts included you can redefine \glsxtrLatinA etc to omit them.) -



    \glsxtrGeneralLatinIIrules

    -

    +

    This is like \glsxtrGeneralLatinIrules but it includes eth (Ð) between ‘D’ and ‘E’ and eszett (ß) treated as ‘ss’. -



    \glsxtrGeneralLatinIIIrules

    -

    +

    This is like \glsxtrGeneralLatinIrules but it includes eth (Ð) between ‘D’ and ‘E’ and eszett (ß) treated as ‘sz’. -



    \glsxtrGeneralLatinIVrules

    -

    +

    This is like \glsxtrGeneralLatinIrules but it includes eth (Ð) between ‘D’ and ‘E’, ae-ligature (æ) is treated as ‘ae’, oe-ligature (œ) is treated as ‘oe’, eszett (ß) treated as ‘ss’ and thorn (þ) is treated as ‘th’. -



    \glsxtrGeneralLatinVrules

    -

    +

    This is like \glsxtrGeneralLatinIrules but it includes eth (Ð) between ‘D’ and ‘E’, eszett (ß) treated as ‘ss’ and thorn (þ) treated as ‘th’. -



    \glsxtrGeneralLatinVIrules

    -

    +

    This is like \glsxtrGeneralLatinIrules but it includes eth (Ð) between ‘D’ and ‘E’, eszett (ß) treated as ‘sz’ and thorn (þ) treated as ‘th’. -



    \glsxtrGeneralLatinVIIrules

    -

    +

    This is like \glsxtrGeneralLatinIrules but it includes ae-ligature (æ) between ‘A’ and ‘B’, eth (Ð) between ‘D’ and ‘E’, insular G (Ᵹ) instead of ‘G’, oe-ligature between ‘O’ and ‘P’, long s (ſ) equivalent to ‘s’, thorn (þ) between ‘T’ and ‘U’ and wynn (Ƿ) instead of W. -



    \glsxtrGeneralLatinVIIIrules

    -

    +

    This is like \glsxtrGeneralLatinIrules but ae-ligature (æ) is treated as ‘ae’, oe-ligature (œ) is treated as ‘oe’, eszett (ß) treated as ‘ss’, thorn (þ) is treated as ‘th’, Ø is treated as ‘O’ and ‘Ł’ is treated as ‘L’. -



    \glsxtrLatinA

    -

    +

    A mini-rule that just covers ‘A’ but includes the sub- and superscript A. -



    \glsxtrLatinE

    -

    +

    A mini-rule that just covers ‘E’ but includes the subscript E. -



    \glsxtrLatinH

    -

    +

    A mini-rule that just covers ‘H’ but includes the subscript H. -



    \glsxtrLatinK

    -

    +

    A mini-rule that just covers ‘K’ but includes the subscript K. -



    \glsxtrLatinI

    -

    +

    A mini-rule that just covers ‘I’ but includes the superscript I. -



    \glsxtrLatinL

    -

    +

    A mini-rule that just covers ‘L’ but includes the subscript L. -



    \glsxtrLatinM

    -

    +

    A mini-rule that just covers ‘M’ but includes the subscript M. -



    \glsxtrLatinN

    -

    +

    A mini-rule that just covers ‘N’ but includes the sub- and superscript N. -



    \glsxtrLatinO

    -

    +

    A mini-rule that just covers ‘O’ but includes the sub- and superscript O. -



    \glsxtrLatinP

    -

    +

    A mini-rule that just covers ‘P’ but includes the subscript P. -



    \glsxtrLatinS

    -

    +

    A mini-rule that just covers ‘S’ but includes the subscript S. -



    \glsxtrLatinT

    -

    +

    A mini-rule that just covers ‘T’ but includes the subscript T. -



    \glsxtrLatinX

    -

    +

    A mini-rule that just covers ‘X’ but includes the subscript X. -



    \glsxtrLatinEszettSs

    -

    +

    A mini-rule that just covers eszett (ß) and makes long s (ſ) followed by short ‘s’ equivalent to ‘ß’. (This is used in the above blocks that treat ‘ß’ as ‘ss’.) -



    \glsxtrLatinEszettSz

    -

    +

    A mini-rule that just covers eszett (ß) and makes long s (ſ) followed by ‘z’ equivalent to ‘ß’. (This is used in the above blocks that treat ‘ß’ as ‘sz’.) -



    \glsxtrLatinEth

    -

    +

    A mini-rule for eth (Ð) so you don’t need to remember the Unicode values. -



    \glsxtrLatinThorn

    -

    +

    A mini-rule for thorn (þ) so you don’t need to remember the Unicode values. -



    \glsxtrLatinAELigature

    -

    +

    A mini-rule for ae-ligature (æ) so you don’t need to remember the Unicode values. -



    \glsxtrLatinOELigature

    -

    +

    A mini-rule for oe-ligature (œ) so you don’t need to remember the Unicode values. -



    \glsxtrLatinOslash

    -

    +

    A mini-rule for ‘Ø’ so you don’t need to remember the Unicode values. -



    \glsxtrLatinLslash

    -

    +

    A mini-rule for ‘Ł’ so you don’t need to remember the Unicode values. -



    \glsxtrLatinWynn

    -

    +

    A mini-rule for wynn (Ƿ) so you don’t need to remember the Unicode values. -



    \glsxtrLatinInsularG

    -

    +

    A mini-rule for insular G (Ᵹ) so you don’t need to remember the Unicode values. -



    \glsxtrLatinSchwa

    -

    +

    A mini-rule that just covers schwa (Ə) but includes the subscript schwa. (Not used in any of the provided Latin rule blocks described above.) -



    \glsxtrLatinAA

    -

    +

    A mini-rule for ‘Å’ so you don’t need to remember the Unicode values. (Not used in any of the provided Latin rule blocks described above.) -



    \glsxtrMathGreekIrules

    -

    +

    A rule block for mathematical Greek (\alpha,



    \glsxtrMathGreekIIrules

    -

    +

    As \glsxtrMathGreekIrules but doesn’t include digamma. -



    \glsxtrMathUpGreekIrules

    -

    +

    A rule block for upright Greek (\upalpha, etc, from the \digamma\Digamma) between epsilon and zeta. -



    \glsxtrMathUpGreekIIrules

    -

    +

    A rule block for upright Greek (\upalpha, etc, from the upgreek package) that doesn’t include digamma. -



    \glsxtrMathItalicGreekIrules

    -

    +

    A rule block for mathematical Greek (\alpha, bib2gls’s interpreter treats them as italic to help keep them close to the lower case versions. -



    \glsxtrMathItalicGreekIIrules

    -

    +

    A rule block for mathematical Greek (\alpha, \Alpha, etc) characters that doesn’t include digamma. -



    \glsxtrMathItalicUpperGreekIrules

    -

    +

    A rule block for upper case mathematical Greek (\Alpha, \Beta\Digamma) between epsilon and zeta. -



    \glsxtrMathItalicUpperGreekIIrules

    -

    +

    A rule block for upper case mathematical Greek (\Alpha, \Beta, etc) characters that doesn’t include digamma. -



    \glsxtrMathItalicLowerGreekIrules

    -

    +

    A rule block for lower case mathematical Greek (\alpha, \beta\digamma) between epsilon and zeta. -



    \glsxtrMathItalicLowerGreekIIrules

    -

    +

    A rule block for lower case mathematical Greek (\alpha, \beta, etc) characters that doesn’t include digamma. -

    Additionally, there are commands in the form

    Additionally, there are commands in the form \glsxtrUpAlpha, \glsxtrUpBeta etc and \upalpha etc and \Alpha, \alpha etc) as well as the following: -



    \glsxtrMathItalicPartial

    -

    +

    The partial derivative symbol (). -



    \glsxtrMathItalicNabla

    -

    +

    The nabla symbol (). -

    +

    -

    Top

    9.4 Supplementary Commands

    -

    These commands are provided by

    These commands are provided by glossaries-extra for use with bib2gls. -

    The information provided with

    The information provided with \GlsXtrLoadResources is written to the .aux file using

    @@ -19210,10 +19954,10 @@ class="cmti-10">information⟩ is the information to pass to bib2gls. The command in the second argument -



    \glsxtrresourceinit

    -

    +

    may be used to temporarily redefine commands before the information is written to the file. This does nothing by default, but may be redefined to allow the use of short commands for convenience. For example, with: @@ -19221,73 +19965,73 @@ commands for convenience. For example, with:

    -
    +
     \renewcommand{\glsxtrresourceinit}{\let\u\glshex}
    -
    -

    you can just use, for example, +

    you can just use, for example, \u E6 instead of \string\uE6 in the custom rule. This redefinition of \u is scoped so its original definition is restored after the write operation. -

    If you have multiple resource commands and you want a default set of options you +

    If you have multiple resource commands and you want a default set of options you can supply them in the definition of: -



    \GlsXtrDefaultResourceOptions

    -

    +

    For example:

    -
    +
     \renewcommand{\GlsXtrDefaultResourceOptions}{selection=all}
    -
    -

    This should be done before the resource commands. -

    It’s possible to specify label prefixes. For example, modifying the earlier + +

    This should be done before the resource commands. +

    It’s possible to specify label prefixes. For example, modifying the earlier example:

    -
    +
     \documentclass{article}
    - 
    \usepackage[record,style=indexgroup]{glossaries-extra} - 
    \setabbreviationstyle{long-short-desc} - 
    \GlsXtrLoadResources - 
     [src={abbrvs},sort={letter-nocase},type=main, - 
      label-prefix={abr.}, - 
      group={Abbreviations}] - 
    \GlsXtrLoadResources - 
     [src={symbols},sort={use},type=main, - 
      label-prefix={sym.}, - 
      group={Symbols}] - 
    \GlsXtrLoadResources[src={terms},sort={en-GB},type=main - 
      label-prefix={trm.}] - 
    \begin{document} - 
    \gls{trm.bird} - 
    \gls{abr.shtml} - 
    \gls{sym.M} - 
    \printunsrtglossaries - 
    \end{document} -
    -

    If you do something like this, you may find it more convenient to define custom +\usepackage[record,style=indexgroup]{glossaries-extra} +\setabbreviationstyle{long-short-desc} +\GlsXtrLoadResources + [src={abbrvs},sort={letter-nocase},type=main, +  label-prefix={abr.}, +  group={Abbreviations}] +\GlsXtrLoadResources + [src={symbols},sort={use},type=main, +  label-prefix={sym.}, +  group={Symbols}] +\GlsXtrLoadResources[src={terms},sort={en-GB},type=main +  label-prefix={trm.}] +\begin{document} +\gls{trm.bird} +\gls{abr.shtml} +\gls{sym.M} +\printunsrtglossaries +\end{document} + +

    If you do something like this, you may find it more convenient to define custom commands that set the prefix. For example:

    -
    +
     \newcommand*{\sym}[2][]{\gls[#1]{sym.#2}}
    -
    -

    The problem with this is that the custom command +

    The problem with this is that the custom command \sym doesn’t allow for modifiers (such as \gls* or \gls+). Instead you can use: -



    \glsxtrnewgls[default optionsprefix}{cs}

    -

    +

    which defines the command ⟨cs⟩ that behaves like

    @@ -19321,23 +20065,23 @@ class="cmtt-10">] -
    +
     \glsxtrnewgls{sym.}{\sym}
    -
    -

    or (to default to no hyperlinks) + +

    or (to default to no hyperlinks)

    -
    +
     \glsxtrnewgls[hyper=false]{sym.}{\sym}
    -
    -

    now you can use +

    now you can use \sym+{M} to behave like \gls+{sym.M}. -

    If you also want the plural and first letter upper case versions you can +

    If you also want the plural and first letter upper case versions you can use -



    \glsxtrnewglslike[default options\Gls-like cs}{\Glspl-like cs}

    -

    +

    For example:

    -
    +
     \glsxtrnewglslike[hyper=false]{idx.}{\idx}{\idxpl}{\Idx}{\Idxpl}
    -
    -

    For the all caps versions: -


    +

    For the all caps versions: +


    \glsxtrnewGLSlike[default options} class="cmtt-10">{⟨\GLSpl-like cs}

    -

    +

    For example:

    -
    +
     \glsxtrnewGLSlike[hyper=false]{idx.}{\IDX}{\IDXpl}
    -
    -

    -

    There’s an analogous command for +

    +

    There’s an analogous command for \rgls: -



    \glsxtrnewrgls[default optionsprefix}{cs}

    -

    +

    and for \rgls, \rglspl, \rGls and \rGlspl: -



    \glsxtrnewrglslike[default options\rGls-like cs}{\rGlspl-like cs}

    -

    +

    and for the all caps: -



    \glsxtrnewrGLSlike[default options} class="cmtt-10">{⟨\rGLSpl-like cs}

    -

    -

    If you provide your own custom command with just

    +

    If you provide your own custom command with just \newcommand that has syntax that starts with [}, then you can notify bib2gls using: -



    \glsxtridentifyglslike{prefix}{command}

    -

    +

    This writes information to the .aux file so that bib2gls can search for the given command when looking for dependencies. -

    Another possibility is to set up known label prefixes, with each one identified +

    Another possibility is to set up known label prefixes, with each one identified by: -



    \glsxtraddlabelprefix{prefix}

    -

    +

    These should be listed in order of precedence. Since no entries are defined on the first LaTeX run, the final prefix should be the fallback. You can prepend a prefix to the list using: -



    \glsxtrprependlabelprefix{prefix}

    -

    +

    which gives it the highest order of precedence. -

    The ⟨

    The ⟨prefix⟩ argument may be empty. You can clear the list with: -



    \glsxtrclearlabelprefixes

    -

    -

    You can test if a prefix is already in the list with: -


    +

    You can test if a prefix is already in the list with: +


    \glsxtrifinlabelprefixlist{prefixtrue}{false}

    -

    +

    In general it’s best to avoid adding multiple instances of the same prefix, so you can check with this command before adding a prefix to the list. However, it can be useful @@ -19504,9 +20248,9 @@ check with this command before adding a prefix to the list. However, it can be u to repeat a prefix at the end of the list so that it can be used as a fallback for entries that haven’t yet been defined. -

    With the list of possible prefixes set up (including an empty prefix if necessary), +

    With the list of possible prefixes set up (including an empty prefix if necessary), you can use: -



    \dgls[optionslabel}[insert]

    -

    +

    which behaves like

    prefix⟩ is the first prefix in the list such that class="cmti-10">prefix⟩⟨label⟩ matches a defined entry (or the last entry in the prefix list if none match). -

    There are also analogous commands for the plural and case-changing +

    There are also analogous commands for the plural and case-changing versions: -



    \dglspl[optionslabel}[insert]

    -

    +

    (uses \glspl), -



    \dGls[optionslabel}[insert]

    -

    +

    (uses \Gls), -



    \dGlspl[optionslabel}[insert]

    -

    +

    (uses \Glspl), -



    \dGLS[optionslabel}[insert]

    -

    +

    (uses \GLS), -



    \dGLSpl[optionslabel}[insert]

    -

    +

    (uses \GLSpl), -



    \dglslink[optionslabel}[insert]

    -

    +

    (uses \glslink), -



    \dglsdisp[optionslabel}[insert]

    -

    +

    (uses \glsdisp). -

    These commands are essentially provided for a mixture of single and dual entries. +

    These commands are essentially provided for a mixture of single and dual entries. Suppose the file entries.bib contains:

    -
    +
     @index{duck}
    - 
    @dualindexabbreviation{svm, - 
      short={SVM}, - 
      long={support vector machine} - 
    } - 
    @dualindexsymbol{pi, - 
      symbol={\ensuremath{\pi}}, - 
      description={ratio of a circle's circumference to its - 
        diameter} - 
    } -
    -

    and suppose the document code is: +@dualindexabbreviation{svm, +  short={SVM}, +  long={support vector machine} +} +@dualindexsymbol{pi, +  symbol={\ensuremath{\pi}}, +  description={ratio of a circle's circumference to its +    diameter} +} + +

    and suppose the document code is:

    -
    +
     \documentclass{article}
    - 
    \usepackage{hyperref} - 
    \usepackage[record,abbreviations,symbols]{glossaries-extra} - 
    \newcommand{\bibglsnewdualindexsymbolsecondary}[5]{% - 
     \longnewglossaryentry*{#1}{name={#3},category={symbol}, - 
       type={symbols},symbol={#4},#2}{#5}% - 
    } - 
    \GlsXtrLoadResources[src=entries] - 
    \begin{document} - 
    First use: \gls{duck}, \gls{svm}, \gls{pi}. - 
    Next use: \gls{duck}, \gls{svm}, \gls{pi}. - 
    \printunsrtglossaries - 
    \end{document} -
    -

    This uses the default empty primary prefix and +

    This uses the default empty primary prefix and dual. for the dual prefix, so \gls{svm} is referencing the primary entry, which is (essentially) an \gls{pi}, which references the primary @index entry rather than the symbol. -

    What’s really needed is: +

    What’s really needed is:

    -
    +
     \gls{duck}, \gls{dual.svm}, \gls{dual.pi}.
    -
    -

    or with + +

    or with

    -
    +
     \GlsXtrLoadResources[src=entries,
    - 
     label-prefix={idx.}, - 
     dual-prefix={} - 
    ] -
    -

    then only the entries without a dual need a prefix: + label-prefix={idx.}, + dual-prefix={} +] + +

    then only the entries without a dual need a prefix:

    -
    +
     \gls{idx.duck}, \gls{svm}, \gls{pi}.
    -
    -

    Using +

    Using \glsxtrnewglslike, as earlier, this can be simplified to:

    -
    +
     \idx{duck}, \gls{svm}, \gls{pi}.
    -
    -

    but this requires remembering which terms have duals. -

    An alternative is to use +

    but this requires remembering which terms have duals. +

    An alternative is to use \dgls instead:

    -
    +
     \documentclass{article}
    - 
    \usepackage{hyperref} - 
    \usepackage[record,abbreviations,symbols]{glossaries-extra} - 
    \newcommand{\bibglsnewdualindexsymbolsecondary}[5]{% - 
     \longnewglossaryentry*{#1}{name={#3},category={symbol}, - 
       type={symbols},symbol={#4},#2}{#5}% - 
    } - 
    \GlsXtrLoadResources[src=entries] - 
    \glsxtraddlabelprefix{dual.} - 
    \glsxtraddlabelprefix{} - 
    \begin{document} - 
    First use: \dgls{duck}, \dgls{svm}, \dgls{pi}. - 
    Next use: \dgls{duck}, \dgls{svm}, \dgls{pi}. - 
    \printunsrtglossaries - 
    \end{document} -
    -

    On the first LaTeX call (when the +

    On the first LaTeX call (when the .glstex file doesn’t exist), neither dual.svm nor dual.svm) entry to be selected. The location will be added to the primary entry’s location list, unless overridden by resource options, such as combine-dual-locations. -

    Once

    Once bib2gls has been run and the \dgls{svm} now behaves like \gls{dual.svm}, which follows the abbreviation style and hyperlinks to the list of abbreviations. -

    Similarly for the index-symbol combination

    Similarly for the index-symbol combination dual.pi and pi. In the case of \dgls{duck} always behaves like \gls{duck}. -

    If you haven’t used

    If you haven’t used combine-dual-locations an extra bib2gls+LaTeX run may be required to correct the location lists. -

    If you change the label prefixes, remember to update the corresponding +

    If you change the label prefixes, remember to update the corresponding \glsxtraddlabelprefix{prefix}. If no prefixes have been added to the list (or if the list is cleared), just an empty prefix is assumed. -

    As from version 1.8,

    As from version 1.8, bib2gls provides hooks that identify the label prefixes in the +

     \newcommand{\bibglsprimaryprefixlabel}[1]{\glsxtraddlabelprefix{#1}}
    - 
    \newcommand{\bibglsdualprefixlabel}[1]{\glsxtrprependlabelprefix{#1}} - 
    \GlsXtrLoadResources[src=entries] -
    -

    Remember that this will only have an effect once the +

    Remember that this will only have an effect once the .glstex file has been created. The prefix list will be empty on the first run (which is treated as a single empty prefix). If this isn’t a suitable fallback, it may be necessary to add one after all the @@ -19831,20 +20575,20 @@ resource commands:

    -
    +
     \newcommand{\bibglsprimaryprefixlabel}[1]{\glsxtraddlabelprefix{#1}}
    - 
    \newcommand{\bibglsdualprefixlabel}[1]{\glsxtrprependlabelprefix{#1}} - 
    \GlsXtrLoadResources[src=entries,label-prefix={idx.}] - 
    \glsxtraddlabelprefix{idx.} -
    -

    Although this rather defeats the purpose of using the hooks as you still have to keep +\newcommand{\bibglsdualprefixlabel}[1]{\glsxtrprependlabelprefix{#1}} +\GlsXtrLoadResources[src=entries,label-prefix={idx.}] +\glsxtraddlabelprefix{idx.} + +

    Although this rather defeats the purpose of using the hooks as you still have to keep track of the fallback prefix. -

    +

    -

    Top

    9.5 Record Counting

    -

    As from version 1.1 of

    As from version 1.1 of bib2gls, you can save the total record count for each entry by @@ -19860,38 +20604,44 @@ class="cmtt-10">.glstex file class="cmtt-10">bib2gls will additionally set the following internal fields for that entry:

      -
    • +

      recordcount: set to the total number of records found for the entry; -

    • -
    • +
    • +

      recordcount.counter⟩: set to the total number of records found for the - entry for the given counter.

    -

    If +

    If --record-count-unit is used then additionally:

      -
    • +

      recordcount.counter.location⟩: set to the total number of records - found for the entry for the given counter with the given location.

    -

    Only use the unit counting option if the locations don’t contain any special characters. If + found for the entry for the given counter with the given location.

    +

    Only use the unit counting option if the locations don’t contain any special characters. If you really need it with locations that may contain formatting commands, then you can try redefining: -



    \glsxtrdetoklocation{location}

    -

    +

    so that it detokenizes ⟨location⟩ but take care when using \GlsXtrLocationRecordCount with commands like \thepage as they can end up becoming detokenized too early. -

    Note that the record count includes locations that

    Note that the record count includes locations that bib2gls discards, such as ignored records, duplicates and partial duplicates. It doesn’t include cross-reference @@ -19899,9 +20649,6 @@ records. For example, if \gls{bird} is used twice on page 1, once on page 2 and fours times on page 3, and \gls[counter=section]{bird} is used once in - - - section 3, then the total record count (stored in the recordcount field) is 2 + 1 + 4 + 1 = 8, the total for the section counter (stored in the recordcount.section field) is 1. -

    With the unit counting on as well, the field

    With the unit counting on as well, the field recordcount.page.1 is set to 2, recordcount.page.2 is set to 1, recordcount.page.3 is set to 4 and recordcount.section.3 is set to 1. -

    You can access these fields using the following commands which will expand to +

    You can access these fields using the following commands which will expand to the field value if set or to 0 if unset: -



    \GlsXtrTotalRecordCount{label}

    -

    +

    This expands to the total record count for the entry given by ⟨label⟩.

    -
    +
     \GlsXtrTotalRecordCount{bird}
    -
    -

    expands to 8. -


    +

    expands to 8. +


    \GlsXtrRecordCount{label}{counter}

    -

    +

    This expands to the counter total for the entry given by ⟨label⟩ where ⟨counter⟩ is the @@ -19952,19 +20699,19 @@ counter name. For example:

    -
    +
     \GlsXtrRecordCount{bird}{page}
    -
    -

    expands to 7 and + +

    expands to 7 and

    -
    +
     \GlsXtrRecordCount{bird}{section}
    -
    -

    expands to 1. -


    +

    expands to 1. +


    \GlsXtrLocationRecordCount{labelcounter}{location}

    -

    +

    This expands to the total for the given location. For example

    -
    +
     \GlsXtrLocationRecordCount{bird}{page}{3}
    -
    -

    expands to 4. Be careful about using +

    expands to 4. Be careful about using \thepage in the ⟨location⟩ part. Remember that due to TeX’s asynchronous output routine, \thepage may not be correct. -

    There are commands analogous to the entry counting commands like

    There are commands analogous to the entry counting commands like \cgls and \cglsformat that are triggered by the record count. These are listed below. -



    \rglsmodifierlabel}[insert]

    -

    -


    +


    \rglsplmodifierlabel}[insert]

    -

    -


    +


    \rGlsmodifierlabel}[insert]

    -

    -


    +


    \rGlsplmodifierlabel}[insert]

    -

    -


    +


    \rGLSmodifierlabel}[insert]

    -

    -


    +


    \rGLSplmodifierlabel}[insert]

    -

    +

    These commands check the recordcount -

    -

    For convenience, you can use -


    +

    For convenience, you can use +


    \GlsXtrSetRecordCountAttribute{category list}{n}

    -

    +

    to set the recordcountn⟩ for all the categories listed in ⟨category list⟩. -

    The

    The \rgls-like commands use -



    \glsxtrifrecordtrigger{labeltrigger code}{normal}

    -

    +

    to determine whether the \rgls-like command should behave like its \gls counterpart (⟨normal⟩) or whether it should instead use ⟨trigger code⟩. -

    This command checks if the

    This command checks if the recordcount attribute is set. If not is just does ⟨normal⟩, otherwise it tests if -



    \glsxtrrecordtriggervalue{label}

    -

    +

    is greater than the value given in the recordcount -

    -

    The ⟨ +

    The ⟨trigger code⟩ part writes a record with the format set to trigger format⟩. Then it unsets the first use flag. Note that it doesn’t implement the post-link hook. This ensures that the record count is correct on the next run. -

    The ⟨

    The ⟨trigger format⟩ depends on the \rgls-like command used and will be one of the following: -



    \rglsformat{label}{insert}

    -

    -


    +


    \rglsplformat{label}{insert}

    -

    -


    +


    \rGlsformat{label}{insert}

    -

    -


    +


    \rGlsplformat{label}{insert}

    -

    -


    +


    \rGLSformat{label}{insert}

    -

    -


    +


    \rGLSplformat{label}{insert}

    -

    +

    These all behave much like their \cglsformat counterparts. If the entry’s regular attribute is set or if the entry doesn’t have a long form, the first or first plural is used, otherwise the long or long plural form is used. -

    You can use -


    You can use +


    \glsxtrenablerecordcount

    -

    +

    to redefine \gls, \glspl, \rGls, class="cmtt-10">\rGlspl, \rGLS, \rGLSpl, respectively, for convenience. -

    If you don’t want the entries that use ⟨

    If you don’t want the entries that use ⟨trigger code⟩ to appear in the glossary, you need to use the resource option trigger-type to assign them to another glossary. @@ -20242,24 +20989,24 @@ For example:

    -
    +
     \documentclass{article}
    - 
    \usepackage[record]{glossaries-extra} - 
    \newignoredglossary{ignored} - 
    \GlsXtrLoadResources[ - 
     src=example-glossaries-acronym, - 
     trigger-type=ignored, - 
     category=abbreviation - 
    ] - 
    \glsxtrenablerecordcount - 
    \GlsXtrSetRecordCountAttribute{abbreviation}{1} - 
    \begin{document} - 
    \gls{lid}.  \gls{stc}. \gls{lid}.  \gls{aeu}. - 
    \gls{upa}. \gls{aeu}. - 
    \printunsrtglossaries - 
    \end{document} -
    -

    In the above, +

    In the above, stc and upa both only have one record, so they are assigned to the main one.

    -

    -

    +

    Top

    10. Miscellaneous New Commands

    -

    The

    The glossaries package provides \glsrefentry entry to cross-reference entries @@ -20286,26 +21033,26 @@ class="cmss-10">subentrycounter options. The glossaries-extra package provides a supplementary command -



    \glsxtrpageref{label}

    -

    +

    that works in the same way except that it uses \pageref instead of \ref. -

    You can copy an entry to another glossary using -


    You can copy an entry to another glossary using +


    \glsxtrcopytoglossary{entry-label}{glossary-type}

    -

    +

    This appends ⟨entry-label⟩ to the end of the internal list for the glossary given by ⟨ -

    +
     \printunsrtglossary[target=false]
    -
    -

    -

    The +

    +

    The glossaries package allows you to set preamble code for a given glossary type using \setglossarypreamble. This overrides any previous setting. With glossaries-extra (as from v1.12) you can instead append to the preamble using -



    \apptoglossarypreamble[type]{code}

    -

    +

    or prepend using -



    \pretoglossarypreamble[type]{code}

    -

    +

    -

    Top

    10.1 Entry Fields

    -

    A field may now be used to store the name of a text-block command that takes a +

    A field may now be used to store the name of a text-block command that takes a single argument. The field is given by -



    \GlsXtrFmtField

    -

    +

    The default value is useri. Note that the value must be the control sequence name without the initial backslash. -

    For example: +

    For example:

    -
    +
     \newcommand*{\mtx}[1]{\boldsymbol{#1}}
    - 
    \newcommand*{\mtxinv}[1]{\mtx{#1}\sp{-1}} - 
    \newglossaryentry{matrix}{% - 
      name={matrix}, - 
      symbol={\ensuremath{\mtx{M}}}, - 
      plural={matrices}, - 
      user1={mtx}, - 
      description={rectangular array of values} - 
    } - 
    \newglossaryentry{identitymatrix}{% - 
      name={identity matrix}, - 
      symbol={\ensuremath{\mtx{I}}}, - 
      plural={identity matrices}, - 
      description={a diagonal matrix with all diagonal elements equal to - 
    1 and all other elements equal to 0} - 
    } - 
    \newglossaryentry{matrixinv}{% - 
      name={matrix inverse}, - 
      symbol={\ensuremath{\mtxinv{M}}}, - 
      user1={mtxinv}, - 
      description={a square \gls{matrix} such that - 
       $\mtx{M}\mtxinv{M}=\glssymbol{identitymatrix}$} - 
    } -
    -

    -

    There are two commands provided that allow you to apply the command to an +\newcommand*{\mtxinv}[1]{\mtx{#1}\sp{-1}} +\newglossaryentry{matrix}{% +  name={matrix}, +  symbol={\ensuremath{\mtx{M}}}, +  plural={matrices}, +  user1={mtx}, +  description={rectangular array of values} +} +\newglossaryentry{identitymatrix}{% +  name={identity matrix}, +  symbol={\ensuremath{\mtx{I}}}, +  plural={identity matrices}, +  description={a diagonal matrix with all diagonal elements equal to +1 and all other elements equal to 0} +} +\newglossaryentry{matrixinv}{% +  name={matrix inverse}, +  symbol={\ensuremath{\mtxinv{M}}}, +  user1={mtxinv}, +  description={a square \gls{matrix} such that +   $\mtx{M}\mtxinv{M}=\glssymbol{identitymatrix}$} +} + +

    +

    There are two commands provided that allow you to apply the command to an argument: -



    \glsxtrfmt[optionslabel}{text}

    -

    +

    This effectively does

    cs name⟩ is the control sequence name supplied in must be defined to take a single required argument. Although it effectively acts like \glslink it misses out the post-link hook. -

    The default ⟨

    The default ⟨default-options⟩ are given by -



    \GlsXtrFmtDefaultOptions

    -

    +

    This is defined as noindex but may be redefined as appropriate. Note that the replacement text of \GlsXtrFmtDefaultOptions is prepended to the optional argument of \glslink. -

    As from version 1.23, there’s also a starred version of this command that has a +

    As from version 1.23, there’s also a starred version of this command that has a final optional argument: -



    \glsxtrfmt*[optionstext}[insert]

    -

    +

    Both the starred and unstarred versions use: -



    \glsxtrfmtdisplay{cs nametext}{insert}

    -

    +

    within the link text. In the case of the unstarred version ⟨insert⟩ will be empty. It will also be empty if the final option argument is missing from the starred form. If the @@ -20494,33 +21241,33 @@ default definition is:

    -
    +
     \newcommand{\glsxtrfmtdisplay}[3]{\csuse{#1}{#2}#3}
    -
    -

    which puts ⟨ +

    which puts ⟨text⟩ inside the argument of the control sequence and ⟨insert⟩ outside it (but it will still be inside the link text). -

    Remember that nested links cause a problem so avoid using commands like

    Remember that nested links cause a problem so avoid using commands like \gls or \glsxtrfmt within ⟨text⟩.
    -

    -

    For example: +

    +

    For example:

    -
    +
     \[
    - 
      \glsxtrfmt{matrix}{A} - 
      \glsxtrfmt{matrixinv}{A} - 
      = - 
      \glssymbol{identitymatrix} - 
    \] -
    -

    If the default options are set to +

    If the default options are set to noindex then \glsxtrfmt won’t index, but will create a hyperlink (if -

    +
     \renewcommand{\GlsXtrFmtDefaultOptions}{hyper=false,noindex}
    -
    -

    -

    Note that +

    +

    Note that \glsxtrfmt won’t work with PDF bookmarks. Instead you can use -



    \glsxtrentryfmt{label}{text}

    -

    +

    If hyperref is used, this uses \texorpdfstring and will expand to -



    \glsxtrpdfentryfmt{label}{text}

    -

    +

    within the PDF bookmarks, but in the document it will do ⟨cs{text⟩ otherwise. The PDF bookmark version simply does ⟨text⟩. It may be redefined, but remember that it needs to expand fully. -

    The

    The glossaries package provides \glsaddstoragekey to add new keys. This command will cause an error if the key has already been defined. The glossaries-extra package provides a supplementary command that will only define the key if it doesn’t already exist: -



    \glsxtrprovidestoragekey{keydefault}{cs}

    -

    +

    If the key has already been defined, it will still provide the command given in the third argument ⟨cs⟩ (if it hasn’t already been defined). Unlike cs⟩ may be left empty if you’re happy to just use \glsfieldfetch to fetch the value of this new key. -

    You can test if a key has been provided with: -


    You can test if a key has been provided with: +


    \glsxtrifkeydefined{keytrue}{false}

    -

    +

    This tests if ⟨key⟩ is available for use in the ⟨key⟩= list in the second argument of @@ -20612,7 +21359,7 @@ class="cmtt-10">\newglossaryentry (or the optional argument of commands l class="cmtt-10">\newabbreviation). The corresponding field may not have been set for any of the entries if no default was provided. -

    There are now commands provided to set individual fields. Note that +

    There are now commands provided to set individual fields. Note that these only change the specified field, not any related values. For example, changing the value of the textparent field). Unexpected results may occur if they are subsequently changed. -



    \GlsXtrSetField{labelfield}{value}

    -

    +

    Sets the field given by ⟨field⟩ to ⟨value⟩ for the entry given by ⟨\newglossaryentry. If a field without a corresponding key is assigned a value, the key remains undefined. This command is robust. -

    \GlsXtrSetField uses -



    \glsxtrsetfieldifexists{labelfield}{code}

    -

    +

    where ⟨label⟩ is the entry label and ⟨code⟩ is the assignment code. -

    This command just uses

    This command just uses \glsdoifexists{=warn\glsxtrsetfieldifexists to simply do ⟨code⟩ if you want to skip the existence check. Alternatively you can instead use -



    \glsxtrdeffield{label{replacement text}

    -

    +

    This simply uses etoolbox’s \protected@csedef instead:10.1 -



    \glsxtredeffield{label{replacement text}

    -

    -


    +


    \gGlsXtrSetField{labelfield}{value}

    -

    +

    As \GlsXtrSetField but globally. -



    \eGlsXtrSetField{labelfield}{value}

    -

    +

    As \GlsXtrSetField but uses protected expansion. -



    \xGlsXtrSetField{labelfield}{value}

    -

    +

    As \gGlsXtrSetField but uses protected expansion. -



    \GlsXtrLetField{labelfield}{cs}

    -

    +

    Sets the field given by ⟨field⟩ to the replacement text of ⟨cs⟩ for the entry given by ⟨label⟩ (using \let). -



    \csGlsXtrLetField{labelfield}{cs name}

    -

    +

    As \GlsXtrLetField but the control sequence name is supplied instead. -



    \GlsXtrLetFieldToField{label-1}{field-2}

    -

    +

    Sets the field given by ⟨field-1⟩ for the entry given by ⟨label-1⟩ to the field given by @@ -20815,13 +21562,13 @@ class="cmtt-10">\GlsXtrSetField. -

    The

    The glossaries package provides \ifglshasfield to determine if a field has been set. The glossaries-extra package provides a simpler version: -



    \glsxtrifhasfield{fieldtrue}{false}

    -

    +

    (New to v1.19.) Note that in this case the ⟨field⟩ must be the internal field label (for @@ -20849,15 +21596,15 @@ class="cmti-10">true⟩ part is done otherwise it does ⟨false⟩. Within ⟨true⟩ you may use -



    \glscurrentfieldvalue

    -

    +

    to access the field value. This command includes grouping which scopes the ⟨true⟩ and ⟨false⟩ parts. The starred version -



    \glsxtrifhasfield*{fieldtrue}{false}

    -

    +

    omits the implicit grouping. -

    Be careful of keys that use

    Be careful of keys that use \relax as the default value (such as the symbol). Use \ifglshassymbol instead.
    -

    -

    There is also a version that simply uses

    +

    There is also a version that simply uses \ifcsundef. It doesn’t save the field value, but can be used if you only need to check if the field is defined without accessing it: -



    \GlsXtrIfFieldUndef{fieldtrue}{false}

    -

    -

    There’s a difference between an undefined field and an unset field. An undefined +

    +

    There’s a difference between an undefined field and an unset field. An undefined field hasn’t been assigned any value (no associated internal control sequence has been defined). If a defined field has been defined to empty, then it’s considered unset. \GlsXtrIfFieldUndef for fields that can only be defined through commands like \GlsXtrSetField.
    -

    -

    You can test if a field value equals a string using -


    +

    You can test if a field value equals a string using +


    \GlsXtrIfFieldEqStr{fieldtrue}{false}

    -

    +

    If the entry exists and has the given field set to the given text then this does ⟨true⟩ otherwise it does ⟨\ifdefstring. Version 1.39 introduced a starred form of t which uses the starred form of \glsxtrifhasfield. -

    As from version 1.31, there’s a similar command: -


    As from version 1.31, there’s a similar command: +


    \GlsXtrIfFieldEqXpStr{fieldtrue}{false}

    -

    +

    This is like \GlsXtrIfFieldEqStr but first (protected) fully expands ⟨text⟩ (but not the field value). If you want to compare the (protected) full expansion of both the field value and ⟨text⟩ use: -



    \GlsXtrIfXpFieldEqXpStr{field}{false}

    -

    +

    Again, version 1.39 introduced a starred form of these commands, which use the starred form of \glsxtrifhasfield. -

    As from v1.42, you can test if the field value is contained in a comma-separated +

    As from v1.42, you can test if the field value is contained in a comma-separated list with: -



    \GlsXtrIfFieldValueInCsvList{label}{false}

    -

    +

    The unstarred version uses the unstarred form of \glsxtrifhasfield (which adds grouping so ⟨list⟩. See the datatool documentation for further details. -

    This command is intended for fields that contain a label. For example, to test if +

    This command is intended for fields that contain a label. For example, to test if the category is one of a set of labels:

    -
    +
     \GlsXtrIfFieldValueInCsvList{examplelabel}{category}%
    - 
     {abbreviation,acronym}% set of labels - 
     {true part}{false part} -
    -

    -

    As from v1.31, if a field represents a numeric (integer) value, you can use the + {abbreviation,acronym}% set of labels + {true part}{false part} + +

    +

    As from v1.31, if a field represents a numeric (integer) value, you can use the following two numeric tests. If the field is set, it must expand to an integer. You may use \glscurrentfieldvalue within ⟨\glscurrentfieldvalue is set accordingly. As from version 1.39, these numeric tests have starred versions. The unstarred versions add implicit grouping. The starred versions don’t. -

    To test if the value is non-zero: -


    To test if the value is non-zero: +


    \GlsXtrIfFieldNonZero{fieldtrue}{false}

    -

    +

    Alternatively, you can test if the field expands to a specific number using: -



    \GlsXtrIfFieldEqNum{fieldtrue}{false}

    -

    +

    This does ⟨true⟩ if the field value equals ⟨n⟩ (using \ifnum for the comparison) otherwise it does ⟨false⟩. For a more general numeric comparison you can use: -



    \GlsXtrIfFieldCmpNum{field}{false}

    -

    +

    where ⟨comparison⟩ is one of =, < or >. -

    The

    The glossaries package provides \glsfieldfetch which can be used to fetch the value of the given field and store it in a control sequence. The glossaries-extra package provides another way of accessing the field value: -



    \glsxtrusefield{entry-label}{field-label}

    -

    +

    This works in the same way as commands like \glsentrytext but the field label is specified in the first argument. Note that the ⟨glossaries manual. No error occurs if the entry or field haven’t been defined. This command is not robust. -

    There is also a version that converts the first letter to uppercase (analogous to +

    There is also a version that converts the first letter to uppercase (analogous to \Glsentrytext): -



    \Glsxtrusefield{entry-label}{field-label}

    -

    +

    and, as from v1.37, a command that converts the entire value to upper case: -



    \GLSxtrusefield{entry-label}

    -

    -

    If you want to use a field to store a list that can be used as an

    +

    If you want to use a field to store a list that can be used as an etoolbox internal list, you can use the following command that adds an item to the field using @@ -21158,7 +21905,7 @@ list, you can use the following command that adds an item to the field using class="cmss-10">etoolbox’s \listcsadd: -



    \glsxtrfieldlistadd{labelfield}{item}

    -

    +

    where ⟨label⟩ is the entry’s label, ⟨field⟩ is the entry’s field and ⟨\listgadd, \listeadd and \listxadd: -



    \glsxtrfieldlistgadd{labelfield}{item}

    -

    -


    +


    \glsxtrfieldlisteadd{labelfield}{item}

    -

    -


    +


    \glsxtrfieldlistxadd{labelfield}{item}

    -

    +

    You can then iterate over the list using: -



    \glsxtrfielddolistloop{label}{field}

    -

    +

    or -



    \glsxtrfieldforlistloop{labelfield}{handler}

    -

    +

    that internally use \dolistcsloop and \forlistloop, respectively. You can use @@ -21236,18 +21983,18 @@ class="cmtt-10">\listbreaketoolbox manual for further details). -

    For fields that contain comma-separated lists use

    For fields that contain comma-separated lists use \glsxtrforcsvfield instead. -

    New to v1.42: -


    New to v1.42: +


    \glsxtrfieldformatlist{label}{field}

    -

    +

    Like datatool-base’s datatool-base command, this command has no starred version. Grouping is automatically applied. -

    For example, with

    For example, with bib2gls’s save-child-count resource option:

    -
    +
     \newcommand*{\listchildren}[1]{%
    - 
      \GlsXtrIfFieldNonZero{childcount}{#1}% - 
      {child count: \glscurrentfieldvalue; children: - 
       \let\DTLlistformatitem\glsfmtname - 
       \glsxtrfieldformatlist{#1}{childlist}% - 
      }% - 
      {no children}% - 
    } -
    -

    For fields that contain a comma-separated list use +

    For fields that contain a comma-separated list use \glsxtrfieldformatcsvlist instead. -

    There are also commands that use

    There are also commands that use \ifinlistcs: -



    \glsxtrfieldifinlist{labeltrue}{false}

    -

    +

    and \xifinlistcs -



    \glsxtrfieldxifinlist{labeltrue}{false}

    -

    -

    See the

    +

    See the etoolbox’s user manual for further details of these commands, in particular the limitations of \ifinlist. -

    If the field has a comma-separated list value instead, you can iterate over it +

    If the field has a comma-separated list value instead, you can iterate over it using: -



    \glsxtrforcsvfield{labelfield}{handler}

    -

    +

    where again ⟨handler⟩ is a control sequence that takes a single argument. Unlike the \@endfortrue. The \glsxtrforcsvfield command locally defines a user level command: -



    \glsxtrendfor

    -

    +

    which is just a synonym for \@endfortrue. -

    The loop is performed within the true part of

    The loop is performed within the true part of \glsxtrifhasfield so scoping is automatically applied. -

    New to v1.42: -


    New to v1.42: +


    \glsxtrfieldformatcsvlist{label}{field}

    -

    +

    Like \glsxtrfieldformatcsvlist but for fields that contain comma-separated lists. -

    As from version 1.32, if the field given by -


    As from version 1.32, if the field given by +


    \GlsXtrForeignTextField

    -

    +

    (which defaults to userii) contains a locale tag, then -



    \GlsXtrForeignText{entry label}{text}

    -

    +

    can be used to encapsulate ⟨text⟩ in \foreignlanguage{text⟩. For example:

    -
    +
     \documentclass{article}
    - 
    \usepackage[main=british,brazilian,ngerman]{babel} - 
    \usepackage{glossaries-extra} - 
    \setabbreviationstyle{long-short-user} - 
    \newabbreviation - 
     [user1={Associa\c{c}\~ao Brasileria de Normas T\'ecnicas}, - 
      user2= {pt-BR} - 
     ] - 
     {abnt}{ABNT}{Brazilian National Standards Organization} - 
    \newabbreviation - 
     [user1={Deutsches Institut f\"ur Normung e.V.}, - 
      user2={de-DE-1996}] - 
     {din}{DIN}{German Institute for Standardization} - 
    \renewcommand*{\glsxtruserparen}[2]{% - 
      \glsxtrfullsep{#2}% - 
      \glsxtrparen - 
      {#1% - 
       \ifglshasfield{\glsxtruserfield}{#2}% - 
       {, \emph{\GlsXtrForeignText{#2}{\glscurrentfieldvalue}}}% - 
       {}% - 
      }% - 
    } - 
    \begin{document} - 
    \gls{abnt}, \gls{din}. - 
    \end{document} -
    -

    -

    When using the +

    +

    When using the record option, in addition to recording the usual location, you can also record the current value of another counter at the same time using the preamble-only command: -



    \GlsXtrRecordCounter{counter name}

    -

    +

    For example:

    -
    +
     \usepackage[record]{glossaries-extra}
    - 
    \GlsXtrRecordCounter{section} -
    -

    Each time an entry is referenced with commands like +

    Each time an entry is referenced with commands like \gls or \glstext, the \gls{bird} is used in section 1.2 th -

    +
     \glsxtrfieldlistgadd{bird}{record.section}{1.2}
    -
    -

    Note that there’s no key corresponding to this new +

    Note that there’s no key corresponding to this new record.section field, but its value can be accessed with \glsxtrfielduse or the list can be iterated over with \glsxtrfielddolistloop etc. -

    +

    -

    Top

    10.2 Display All Entries Without Sorting or Indexing

    -



    \printunsrtglossary[options]

    -

    +

    This behaves like \printnoidxglossary but never sorts the entries and always lists all the defined entries for the given glossary (and doesn’t require @@ -21549,15 +22296,15 @@ the definition of \glsgroupskip to avoid the “Incomplete \iftrue” error that may otherwise occur. -

    There’s also a starred form -


    There’s also a starred form +


    \printunsrtglossary*[options]{code}

    -

    +

    which is equivalent to

    \endgroup class="cmtt-10">\glossarypreamble, the supplied ⟨code⟩ is done before the glossary header. -

    This means you now have the option to simply list all entries on the first +

    This means you now have the option to simply list all entries on the first LaTeX run without the need for a post-processor, however there will be no number list in this case, as that has to be set by a post-processor such as bib2gls (see bib2gls (see +§9 -§??sec:bib2gls bib2gls: Managing Reference Databases). -

    No attempt is made to gather hierarchical elements. If child entries aren’t defined +

    No attempt is made to gather hierarchical elements. If child entries aren’t defined immediately after their parent entry, they won’t be together in the glossary when using \printunsrtglossary.
    -

    +

    -

    There’s a difference in behaviour depending on whether or not the

    There’s a difference in behaviour depending on whether or not the group key is defined. If not defined (default), the group label will be formed from the first letter of the name field. The corresponding group title will be obtained as discussed -in field. The corresponding group title will be obtained as discussed in +§2.10.1 §??sec:glosstylemods Glossary Style Modifications. This can lead to an odd effect if you are using a style that separates letter groups when the ordering isn’t alphabetical. -

    If the

    If the group key is defined (which it is with the group field is non-empty, then the corresponding title is obtained as described earlier. -

    In either case, if the

    In either case, if the groups option is set to false then no group formation will be performed. -

    If you want to use a different field for the group label, you can redefine -


    If you want to use a different field for the group label, you can redefine +


    \glsxtrgroupfield

    -

    +

    to the relevant internal field label, but the group bib2gls for secondary entries, which have the group label stored in the secondarygroup internal field.) -

    If you have any entries with the

    If you have any entries with the see key set, you will need the glossariesrecord=only package option will automatically deal with this. -

    For example: +

    For example:

    -
    +
     \documentclass{article}
    - 
    \usepackage{glossaries-extra} - 
    \newglossaryentry{zebra}{name={zebra},description={stripy animal}} - 
    \newglossaryentry{ant}{name={ant},description={an insect}} - 
    \begin{document} - 
    \gls{ant} and \gls{zebra} - 
    \printunsrtglossaries - 
    \end{document} -
    -

    In the above, zebra will be listed before ant as it was defined first. -

    If you allow document definitions with the +

    In the above, zebra will be listed before ant as it was defined first. +

    If you allow document definitions with the docdefs option, the document will require a second LaTeX run if the entries are defined after \printunsrtglossary. -

    The optional argument is as for

    The optional argument is as for \printnoidxglossary (except for the sort key, which isn’t available). -

    All glossaries may be displayed in the order of their definition using: -


    All glossaries may be displayed in the order of their definition using: +


    \printunsrtglossaries

    -

    +

    which is analogous to \printnoidxglossaries. This just iterates over all defined glossaries (that aren’t on the ignored list) and does \printunsrtglossary[type=⟨type⟩]. -

    +

    -

    Top

    10.2.1 Hooks

    -

    To avoid complications caused by

    To avoid complications caused by tabular-like glossary styles,



    \printunsrtglossaryentryprocesshook{label}

    -

    +

    This hook should not display any content, but may be used to perform calculations. For example, to calculate widths. Within this hook you can use: -



    \printunsrtglossaryskipentry

    -

    +

    to skip the current entry. This will prevent the entry from being added to the internal command. -

    There’s another hook immediately before the internal command containing the +

    There’s another hook immediately before the internal command containing the glossary code is performed: -



    \printunsrtglossarypredoglossary

    -

    -

    The internal command uses -


    +

    The internal command uses +


    \printunsrtglossaryhandler{label}

    -

    +

    to display each item in the list, where ⟨label⟩ is the current label. -

    By default the handler just does -


    By default the handler just does +


    \glsxtrunsrtdo{label}

    -

    +

    which determines whether to use \glossentry or \subglossentry and checks the @@ -21774,24 +22523,24 @@ href="#glo:numberlist">number list. If you want to use a different field to used instead of location then redefine: -



    \GlsXtrLocationField

    -

    +

    to the internal name of the desired field. For example:

    -
    +
     \renewcommand{\GlsXtrLocationField}{primarylocation}
    -
    -

    -

    Note that if the given location field is undefined or unset, the handler will + +

    +

    Note that if the given location field is undefined or unset, the handler will fallback on the loclist field.
    -

    +

    You can instruct loclist field with the resource option --save-loclist=false to prevent it from being used as a fallback. -

    +

    -

    Top

    10.2.2 Filtering

    -

    You can redefine the handler used by

    You can redefine the handler used by \printunsrtglossary if required. For example, you may want to filter entries according to the category label. You can test if a label is contained in a comma-separated list of labels using: -



    \glsxtriflabelinlist{labeltrue}{false}

    -

    +

    The ⟨label⟩ and ⟨label list⟩ will be fully expanded. -

    If you redefine the handler to exclude entries, you may end up with an empty +

    If you redefine the handler to exclude entries, you may end up with an empty glossary. This could cause a problem for the list-based styles.
    -

    -

    For example, if the preamble includes: +

    +

    For example, if the preamble includes:

    -
    +
     \usepackage[record,style=index]{glossaries-extra}
    - 
    \GlsXtrRecordCounter{section} -
    -

    then you can print the glossary but first redefine the handler to only select entries +\GlsXtrRecordCounter{section} + +

    then you can print the glossary but first redefine the handler to only select entries that include the current section number in the record.section field:

    -
    +
     \renewcommand{\printunsrtglossaryhandler}[1]{%
    - 
      \glsxtrfieldxifinlist{#1}{record.section}{\thesection} - 
      {\glsxtrunsrtdo{#1}}% - 
      {}% - 
    } -
    -

    -

    Alternatively you can use the starred form of +

    +

    Alternatively you can use the starred form of \printunsrtglossary which will localise the change:

    -
    +
     \printunsrtglossary*{%
    - 
      \renewcommand{\printunsrtglossaryhandler}[1]{% - 
        \glsxtrfieldxifinlist{#1}{record.section}{\thesection} - 
        {\glsxtrunsrtdo{#1}}% - 
        {}% - 
      }% - 
    } -
    -

    -

    If you are using the +

    +

    If you are using the hyperref package and want to display the same glossary more than once, you can also add a temporary redefinition of -

    +
     \printunsrtglossary*{%
    - 
      \renewcommand{\printunsrtglossaryhandler}[1]{% - 
        \glsxtrfieldxifinlist{#1}{record.section}{\thesection} - 
        {\glsxtrunsrtdo{#1}}% - 
        {}% - 
      }% - 
      \ifcsundef{theHsection}% - 
      {% - 
        \renewcommand*{\glolinkprefix}{record.\csuse{thesection}.}% - 
      }% - 
      {% - 
        \renewcommand*{\glolinkprefix}{record.\csuse{theHsection}.}% - 
      }% - 
    } -
    -

    Note that this will cause a problem if your descriptions contain commands like +

    Note that this will cause a problem if your descriptions contain commands like \gls that need to link an entry that doesn’t appear in the summary. In this case, it’s a better approach to use: @@ -21902,97 +22651,97 @@ better approach to use:

    -
    +
     \printunsrtglossary*{%
    - 
      \renewcommand{\printunsrtglossaryhandler}[1]{% - 
        \glsxtrfieldxifinlist{#1}{record.section}{\thesection} - 
        {\glsxtrunsrtdo{#1}}% - 
        {}% - 
      }% - 
      \ifcsundef{theHsection}% - 
      {% - 
        \setkeys{printgloss}{targetnameprefix={record.\csuse{thesection}.}}% - 
      }% - 
      {% - 
        \setkeys{printgloss}{targetnameprefix={record.\csuse{theHsection}.}}% - 
      }% - 
    } -
    -

    -

    If it’s a short summary at the start of a section, you might also want to suppress +  \renewcommand{\printunsrtglossaryhandler}[1]{% +    \glsxtrfieldxifinlist{#1}{record.section}{\thesection} +    {\glsxtrunsrtdo{#1}}% +    {}% +  }% +  \ifcsundef{theHsection}% +  {% +    \setkeys{printgloss}{targetnameprefix={record.\csuse{thesection}.}}% +  }% +  {% +    \setkeys{printgloss}{targetnameprefix={record.\csuse{theHsection}.}}% +  }% +} + +

    +

    If it’s a short summary at the start of a section, you might also want to suppress the glossary header and add some vertical space afterwards:

    -
    +
     \printunsrtglossary*{%
    - 
      \renewcommand{\printunsrtglossaryhandler}[1]{% - 
        \glsxtrfieldxifinlist{#1}{record.section}{\thesection} - 
        {\glsxtrunsrtdo{#1}}% - 
        {}% - 
      }% - 
      \ifcsundef{theHsection}% - 
      {% - 
        \renewcommand*{\glolinkprefix}{record.\csuse{thesection}.}% - 
      }% - 
      {% - 
        \renewcommand*{\glolinkprefix}{record.\csuse{theHsection}.}% - 
      }% - 
      \renewcommand*{\glossarysection}[2][]{}% - 
      \appto\glossarypostamble{\glspar\medskip\glspar}% - 
    } -
    -

    -

    There’s a shortcut command that essentially does this: -


    +

    +

    There’s a shortcut command that essentially does this: +


    \printunsrtglossaryunit[options]{counter name}

    -

    +

    The above example can simply be replaced with:

    -
    +
     \printunsrtglossaryunit{section}
    -
    -

    -

    This shortcut command is actually defined to use +

    +

    This shortcut command is actually defined to use \printunsrtglossary* with -



    \printunsrtglossaryunitsetup{counter name}

    -

    +

    so if you want to just make some minor modifications you can do

    -
    +
     \printunsrtglossary*{\printunsrtglossaryunitsetup{section}%
    - 
      \renewcommand*{\glossarysection}[2][]{\subsection*{Summary}}% - 
    } -
    -

    which will start the list with a subsection header with the title “Summary” +  \renewcommand*{\glossarysection}[2][]{\subsection*{Summary}}% +} + +

    which will start the list with a subsection header with the title “Summary” (overriding the glossary’s title). -

    Note that this shortcut command is only available with the

    Note that this shortcut command is only available with the record (or record=alsoindex=hybrid) package option. -

    This temporary change in the hypertarget prefix means you need to explicitly use +

    This temporary change in the hypertarget prefix means you need to explicitly use \hyperlink to create a link to it as commands like \gls will try to link to the target @@ -22004,12 +22753,12 @@ the front or back matter) which can be the target for all glossary references an just use \printunsrtglossaryunit for a quick summary at the start of a section etc. -

    +

    -

    Top

    10.3 Partial Glossaries

    -

    It’s possible that you may require greater customisation over the way the glossary is +

    It’s possible that you may require greater customisation over the way the glossary is displayed that can’t be simply achieved with the hooks or glossary styles. This section describes a command and environment provided to assist with this, but note that they aren’t compatible with tabular-like glossary styles, such as glossary-list package). -

    To get a better understanding of how this works, it’s useful to consider how a +

    To get a better understanding of how this works, it’s useful to consider how a glossary with makeindex works. Here’s a simple example docume

    -
    +
     \documentclass{article}
    - 
    \usepackage{glossaries} - 
    \makeglossaries - 
    \newglossaryentry{cabbage}{name={cabbage}, - 
     description={vegetable with thick green or purple leaves}} - 
    \newglossaryentry{broccoli}{name={broccoli}, - 
     description={vegetable with heads of small green or purple flower buds}} - 
    \begin{document} - 
    \Gls{cabbage} and \gls{broccoli}. - 
    \printglossary - 
    \end{document} -
    -

    When the document is built, +

    When the document is built, makeindex creates a file that contains:

    @@ -22095,7 +22844,7 @@ class="cmtt-10">\end{theglossary}\glossarypostamble The \printglossary command defines the commands shown above after it’s detected the glossary type, the title and style. It then inputs the file. -

    The

    The \printunsrtglossary command performs the same preliminary setup but there’s no file to input. Instead it then does the section heading (\glossarysection) @@ -22105,7 +22854,7 @@ class="cmtt-10">\glossarypreamble) and constructs a control sequence that class="cmtt-10">\begin{theglossary} ⟨content\end{theglossary}. -

    The letter group markup (

    The letter group markup (\glsgroupheading and \glsgroupskip) is inserted whenever the group label changes between top-level entries. In this case, ⟨\glossentry or \subglossentry). -



    \begin{printunsrtglossarywrap}[options]
    content\end{printunsrtglossarywrap}

    -

    +

    The printunsrtglossarywrap\printunsrtglossary, but note that in this case the type key simply provides the glossary title and doesn’t identify the content. -

    This environment essentially does:

    +

    This environment essentially does:

    initialtheglossary\glossentry and \subglossentry. -

    Whilst it is possible to explicitly use the commands that create letter group +

    Whilst it is possible to explicitly use the commands that create letter group headings and the handler within ⟨content⟩, it would be quite laborious and prone to error to do so for anything other than a very short list. This can be illustrated with @@ -22203,24 +22952,24 @@ the following silly example:

    -
    +
     \begin{printunsrtglossarywrap}[style=indexgroup]%
    - 
    \glsgroupheading{W}% - 
    \gdef\glscurrententrylabel{cabbage}% - 
    \printunsrtglossaryhandler\glscurrententrylabel - 
    \glsgroupskip - 
    \glsgroupheading{Z}% - 
    \gdef\glscurrententrylabel{broccoli}% - 
    \printunsrtglossaryhandler\glscurrententrylabel - 
    \end{printunsrtglossarywrap} -
    -

    This trivial example will work with a tabular-like style, such as +

    This trivial example will work with a tabular-like style, such as long (although the group headings will be ignored). A more practical example that uses a loop within ⟨content⟩ won’t. -



    \printunsrtinnerglossary[pre-code}{post-code}

    -

    +

    This command is provided for use within printunsrtglossarywrapnumberedsection and label. -

    This will do:

    +

    This will do:

     \begingroup @@ -22287,25 +23036,25 @@ insert within the theglossary environment. -

    For example: +

    For example:

    -
    +
     \begin{printunsrtglossarywrap}[style=indexgroup]
    - 
    \printunsrtinnerglossary[type=main]{}{} - 
    \end{printunsrtglossarywrap} -
    -

    This produces a result very similar to that obtained with just: +\printunsrtinnerglossary[type=main]{}{} +\end{printunsrtglossarywrap} + +

    This produces a result very similar to that obtained with just:

    -
    +
     \printunsrtglossary[style=indexgroup,type=main]
    -
    -

    The first case is unsuitable for use with a tabular-style. It will also cause a + +

    The first case is unsuitable for use with a tabular-style. It will also cause a problem with a list style when used with bib2gls (where the inner content will be empty on the first LaTeX run which will cause a missing \item error). -

    This partial glossary command is more useful when you need to apply filtering +

    This partial glossary command is more useful when you need to apply filtering (which can be set up in the ⟨pre-code⟩ argument as in \printunsrtglossary*) or if @@ -22322,47 +23071,47 @@ you have multiple glossaries. For example:

    -
    +
     \begin{printunsrtglossarywrap}[style=list]
    - 
    \item[Animals] - 
    \printunsrtinnerglossary[type=animal]{}{} - 
    \item[Vegetables] - 
    \printunsrtinnerglossary[type=vegetable]{}{} - 
    \item[Minerals] - 
    \printunsrtinnerglossary[type=mineral]{}{} - 
    \end{printunsrtglossarywrap} -
    -

    In this case, the +

    In this case, the list style doesn’t cause a problem as there will be three instances of \item on the first LaTeX run. -

    Here’s another example: +

    Here’s another example:

    -
    +
     \begin{printunsrtglossarywrap}[style=indexgroup]
    - 
    \glsgroupheading{animal}% - 
    \printunsrtinnerglossary[type=animal]{}{} - 
    \glsgroupskip - 
    \glsgroupheading{vegetable}% - 
    \printunsrtinnerglossary[type=vegetable]{}{} - 
    \glsgroupskip - 
    \glsgroupheading{mineral}% - 
    \printunsrtinnerglossary[type=mineral]{}{} - 
    \end{printunsrtglossarywrap} -
    -

    Note that in both of the above cases, the inner glossaries have been arranged +\glsgroupheading{animal}% +\printunsrtinnerglossary[type=animal]{}{} +\glsgroupskip +\glsgroupheading{vegetable}% +\printunsrtinnerglossary[type=vegetable]{}{} +\glsgroupskip +\glsgroupheading{mineral}% +\printunsrtinnerglossary[type=mineral]{}{} +\end{printunsrtglossarywrap} + +

    Note that in both of the above cases, the inner glossaries have been arranged manually (animal, then vegetable and then mineral). -

    It’s also possible to use

    It’s also possible to use \printunsrtinnerglossary within the handler function used by \printunsrtglossary. The internal scoping within \printunsrtinnerglossary helps to reduce interference. -

    This is a rather more complicated example that requires

    This is a rather more complicated example that requires bib2gls. Suppose I have @@ -22372,37 +23121,37 @@ class="cmtt-10">topictitles.bib that contains:

    -
    +
     @indexplural{animal}
    - 
    @indexplural{mineral} - 
    @indexplural{vegetable} -
    -

    And also a file called +

    And also a file called topics.bib that contains entries like:

    -
    +
     @entry{zebra,
    - 
      name={zebra}, - 
      description={striped African horse}, - 
      category={animal} - 
    } - 
    @entry{broccoli, - 
      name={broccoli}, - 
      description={vegetable with heads of small green or purple flower buds}, - 
      category={vegetable} - 
    } - 
    @entry{quartz, - 
      name={quartz}, - 
      description={hard mineral consisting of silica}, - 
      category={mineral} - 
    } -
    -

    Note that the category labels in the second file match the entry labels in the first +  name={zebra}, +  description={striped African horse}, +  category={animal} +} +@entry{broccoli, +  name={broccoli}, +  description={vegetable with heads of small green or purple flower buds}, +  category={vegetable} +} +@entry{quartz, +  name={quartz}, +  description={hard mineral consisting of silica}, +  category={mineral} +} + +

    Note that the category labels in the second file match the entry labels in the first file. -

    The simplest way of creating a hierarchical glossary from this data is to input +

    The simplest way of creating a hierarchical glossary from this data is to input both files and copy the category field to the parent -

    -

    The glossary can then simply be displayed with: + replicate-fields={category=parent}] + +

    The glossary can then simply be displayed with:

    -
    +
     \printunsrtglossary[style=indexgroup]
    -
    -

    This will now be ordered: animal (followed by animal child entries), mineral + +

    This will now be ordered: animal (followed by animal child entries), mineral (followed by mineral child entries), vegetable (followed by vegetable child entries). -

    Suppose (for some strange reason) that I now need the ordering to be vegetable, +

    Suppose (for some strange reason) that I now need the ordering to be vegetable, mineral, animal (that is, reverse alphabetical) but the child entries still need to be in the normal alphabetical order. -

    It’s not possible to use different sort methods for different hierarchical levels with +

    It’s not possible to use different sort methods for different hierarchical levels with bib2gls, but it is possible to simulate it. -

    Instead of making the entries within

    Instead of making the entries within topics.bib children of the entries defined in topictitles.bib, I’m now going to create separate glossaries for each @@ -22444,30 +23193,30 @@ type:

    -
    +
     \newignoredglossary*{animal}
    - 
    \newignoredglossary*{mineral} - 
    \newignoredglossary*{vegetable} -
    -

    The entries in +

    The entries in topictitles.bib go in the default main glossary and are sorted in reverse:

    -
    +
     \GlsXtrLoadResources[src=topictitles,type=main,selection=all,
    - 
     sort=en-GB-reverse] -
    -

    Note that I’ve selected all entries in this example. It becomes more complicated with + sort=en-GB-reverse] + +

    Note that I’ve selected all entries in this example. It becomes more complicated with the default selection criteria. (See the sample-nested.tex example provided with bib2gls v2.3+.) -

    Now the entries in

    Now the entries in topics.bib are selected but the type field is set to the -

    +
     \GlsXtrLoadResources[src=topics,type={same as category},selection=all,
    - 
     sort=en-GB] -
    -

    The aim here is to use +

    The aim here is to use \printunsrtglossary to list all the entries in the main glossary (that is, all the topic titles) and use a handler that tests if there is a glossary that has the same label as the current entry label. If one exists, it’s then listed using @@ -22493,21 +23242,21 @@ appearance:

    -
    +
     \newcommand{\nestedhandler}[1]{%
    - 
      \glsxtrunsrtdo{#1}% - 
      \ifglossaryexists*{#1}% - 
      {% - 
        \printunsrtinnerglossary[type={#1},leveloffset=++1]{}{}% - 
      }% - 
      {}% - 
    } - 
    \printunsrtglossary*[type=main,style=index]{% - 
      \let\printunsrtglossaryhandler\nestedhandler - 
    } -
    -

    -

    I’ve used +

    +

    I’ve used \newignoredglossary* as I don’t need to specify a title for any of those glossaries nor do I need to use those glossaries with \printunsrtglossaries. With @@ -22524,12 +23273,12 @@ any unknown glossaries (with \provideignoredglossary) in the .glstex file. -

    +

    -

    Top

    10.4 Standalone Entry Items

    -

    It may be that you don’t want a list but would rather display entry details +

    It may be that you don’t want a list but would rather display entry details throughout the document. You can simply do \glsentryname followed by -

    +
     \newcommand{\displayterm}[1]{%
    - 
     \par\medskip\par\noindent - 
     Definition: \glsentryname{#1}.\par - 
     \glsentrydesc{#1} - 
     \par\medskip - 
    } -
    -

    define your entries + \par\medskip\par\noindent + Definition: \glsentryname{#1}.\par + \glsentrydesc{#1} + \par\medskip +} + +

    define your entries

    -
    +
     \newglossaryentry{function}{name={function},
    - 
      description={a relation or expression involving variables} - 
    } -
    -

    and then later in the text: +  description={a relation or expression involving variables} +} + +

    and then later in the text:

    -
    +
     \displayterm{function}
    -
    -

    -

    However, if may be that you want to use +

    +

    However, if may be that you want to use hyperref and have commands like \gls link back to the place where the term is described. Instead of using \glsentryname use -



    \glsxtrglossentry{label}

    -

    +

    where ⟨label⟩ is the entry’s label. -

    This is designed to behave much like the way the name is displayed in the +

    This is designed to behave much like the way the name is displayed in the glossary. It performs the following:

      -
    • Defines +

      Defines \glscurrententrylabel to the entry’s label. This is usually done at the start of the glossary style commands \glossentry and @@ -22600,8 +23350,9 @@ class="cmtt-10">\subglossentry and may be used by hooks, such as hooks. Here the definition is localised so that it’s only available for use in \glossentryname. -

    • -
    • Defines
    • +
    • +

      Defines \currentglossary to the entry’s glossary type. This is usually done at the start of commands like \printglossary and may be used by style hooks. @@ -22610,31 +23361,37 @@ class="cmtt-10">\printglossary and may be used by style hooks. class="cmtt-10">\glsentryitem and \glssubentryitem. The value is obtained by fully expanding: -



      \GlsXtrStandaloneGlossaryType

      -

      +

      which defaults to the value of the type field for the current entry.

    • -
    • Increments and display the entry counters if the +

      Increments and display the entry counters if the entrycounter or subentrycounter - package options are set. If the entry doesn’t have a parent, then this - does + package options are set. If the entry doesn’t have a parent, then this does +

        -
      • +

        \glsentryitem{label}

      -

      otherwise it does (as from v1.31)

      +class="cmtt-10">}

    +

    otherwise it does (as from v1.31)

    + + +
      -
    • +

      \GlsXtrStandaloneSubEntryItem } which defaults to \glssubentryitem{label} if the entry has - a parent but not a grandparent.

    - - - -

    This reflects the behaviour of the predefined hierarchical styles. A bug in + a parent but not a grandparent.

    +

    This reflects the behaviour of the predefined hierarchical styles. A bug in pre-version 1.31 used \glsentryitem for all child levels, which doesn’t match the hierarchical glossary styles. If you want to restore this behaviour, just @@ -22657,20 +23411,21 @@ class="cmtt-10">\glsentryitem for all child levels, which doesn’t m

    -
    +
          \renewcommand*{\GlsXtrStandaloneSubEntryItem}[1]{\glssubentryitem{#1}}
    -
    -

    + +

    -
  • Sets the hyper-target if supported (using +

    Sets the hyper-target if supported (using \glstarget) and displays the entry name using: -



    \GlsXtrStandaloneEntryName{label}

    -

    +

    which uses \glstarget{label\glsnamefont or picks up the style href="#catattr.glossnamefont">glossnamefont.

  • -

    If you have used

    If you have used \nopostdesc or \glsxtrnopostpunc in any of your description fields, you can use -



    \glsxtractivatenopost

    -

    +

    to make these commands behave as they normally do within a glossary. This needs to be placed before

    @@ -22709,10 +23464,10 @@ class="cmtt-10">}\glspostdescription class="cmtt-10">\glsnonextpages and \glsnextpages have no effect outside of the glossary and are not intended for use in a standalone context. -

    It’s also possible to select a different field (rather than using

    It’s also possible to select a different field (rather than using name): -



    \glsxtrglossentryother{headerlabel}{field}

    -

    +

    The ⟨field⟩ must be given using its internal field label which may not be the same as the key used to set the field. See the key to field mappings table in the header⟩ argument is the code to pass to the third class="cmtt-10">\glsxtrtitleorpdforheading. It may be left empty in which case the default is determined as follows:

      -
    • If +

      If \glsxtrheadfield⟩ is defined, then ⟨header⟩ is field⟩ class="cmtt-10">{⟨label}. -

    • -
    • Otherwise ⟨header⟩ is simply the field value.
    -

    The +

  • +

    Otherwise ⟨header⟩ is simply the field value.

  • +

    The \glsxtrglossentryother command internally uses -



    \GlsXtrStandaloneEntryOther{label}{field}

    -

    +

    instead of \GlsXtrStandaloneEntryName, which uses \glossentrynameother{} instead of \glossentryname{label}. -

    If you have loaded the

    If you have loaded the glossaries-accsupp package (through the }

    (for example, \glssymbolaccessdisplay). -

    This means that my custom command can be changed to: +

    This means that my custom command can be changed to:

    -
    +
     \newcommand{\displayterm}[1]{%
    - 
     \par\medskip\par\noindent - 
     Definition: \glsxtrglossentry{#1}.\par - 
     \glsentrydesc{#1} - 
     \par\medskip - 
    } -
    -

    If I want numbered definitions, then I can use the package options +

    If I want numbered definitions, then I can use the package options entrycounter or subentrycounter -

    -

    The counter label uses a dot after the number by default but this can be changed to + \par\medskip\par\noindent + Definition \glsxtrglossentry{#1}.\par + \glsentrydesc{#1} + \par\medskip +} + +

    The counter label uses a dot after the number by default but this can be changed to a colon:

    -
    +
     \renewcommand*{\glsentrycounterlabel}{\theglossaryentry:\space}
    -
    -

    It’s now possible to not only use +

    It’s now possible to not only use \gls to link back to the definition but also use \glsrefentry to reference the counter and \glsxtrpageref to reference the page number. -

    If I want the description to behave more like it does in a glossary in need to make +

    If I want the description to behave more like it does in a glossary in need to make the following modification:

    -
    +
     \newcommand{\displayterm}[1]{%
    - 
     \par\medskip\par\noindent - 
     Definition \glsxtrglossentry{#1}.\par - 
     \begingroup - 
      \glsxtractivatenopost - 
      \glossentrydesc{#1}\glspostdescription - 
     \endgroup - 
     \par\medskip - 
    } -
    -

    (Note the grouping to localise +

    (Note the grouping to localise \glsxtractivatenopost.) -

    You can also use

    You can also use \glsxtrglossentry within section headings. For example:

    -
    +
     \section{\glsxtrglossentry{function}}
    -
    -

    This will use +

    This will use \glsentryname in PDF bookmarks (if \texorpdfstring is defined) and will use \@glsxtrnotinmark and \glsxtrrestoremarkhook.) -

    +

    -

    Top

    10.5 Entry Aliases

    -

    An entry can be made an alias of another entry using the

    An entry can be made an alias of another entry using the alias key. The value should be the label of the other term. There’s no check for the other’s @@ -22895,17 +23652,18 @@ defining the other entry after the aliased entry. (For example, when used with id="dx1-56002">bib2gls.) -

    If an entry ⟨

    If an entry ⟨entry-1⟩ is made an alias of ⟨entry-2⟩ then:

      -
    • If the +

      If the see field wasn’t provided when ⟨entry-1⟩ was defined, the alias key will - automatically trigger

      + automatically trigger

      \glssee{}
    • -
    • If the +

      If the hyperref package has been loaded then \gls{targeturl attribute has been set for ⟨entry-1⟩’s category.) -

    • -
    • With
    • +
    • + + + +

      With record=off or record=alsoindex=hybrid, the noindex setting will automatically @@ -22955,23 +23718,22 @@ class="cmtt-10">\glssee) unless it’s been explicitly class="cmtt-10">\glsadd or if the indexing has been explicitly set using noindex=false. - - - -

      Note that with

      Note that with record=only, the location list for aliased entries is controlled + id="dx1-56012">location list for aliased entries is controlled with bib2gls’s settings.

    -

    The index suppression trigger is performed by -


    bib2gls’s settings.

    +

    The index suppression trigger is performed by +


    \glsxtrsetaliasnoindex

    -

    +

    This is performed after the default options provided by \GlsXtrSetDefaultGlsOpts @@ -22982,45 +23744,45 @@ class="cmss-10">=only, \glsxtrsetaliasnoindex will default to do nothing. -

    Within the definition of

    Within the definition of \glsxtrsetaliasnoindex you can use -



    \glsxtrindexaliased

    -

    +

    to index ⟨entry-2⟩. -

    The index suppression command can be redefined to index the main term instead. +

    The index suppression command can be redefined to index the main term instead. For example:

    -
    +
     \renewcommand{\glsxtrsetaliasnoindex}{%
    - 
     \glsxtrindexaliased - 
     \setkeys{glslink}{noindex}% - 
    } -
    -

    -

    The value of the +

    +

    The value of the alias field can be accessed using -



    \glsxtralias{label}

    -

    +

    -

    -

    +

    Top

    11. On-the-Fly Document Definitions

    -

    The commands described here may superficially look like ⟨

    The commands described here may superficially look like ⟨word\index{word\index then just use \index.
    -

    -

    The

    +

    The glossaries package advises against defining entries in the document environment. As mentioned in §1.2 New or Modified Package Options above, this -ability is disabled by default with glossaries-extra but can be enabled using the -§??sec:pkgopts New or Modified Package Options +above, this ability is disabled by default with glossaries-extra but can be enabled using +the docdefs package options. -

    Although this can be problematic, the

    Although this can be problematic, the glossaries-extra package provides a way of defining and using entries within the documentdocdefsThere are limitations with this approach, so take care with it. This function is disabled by default, but can be enabled using the preamble-only command: -



    \GlsXtrEnableOnTheFly

    -

    +

    When used, this defines the commands described below. -

    The commands

    The commands \glsxtr, \glsxtrpl, \Glsxtr and \printglossary\gls or there may be unexpected results.
    -

    -


    +


    \glsxtr[gls-optionsdfn-options]{label}

    -

    +

    If an entry with the label ⟨label⟩ has already been defined, this just does \gls @@ -23119,7 +23882,7 @@ class="cmitt-10">dfn-options⟩}

    -

    The ⟨

    The ⟨label⟩ must contain any non-expandable commands, such as formatting commands or problematic characters. If the term requires any of these, they must be omitted from the ⟨name key must be provided in the optional argument ⟨dfn-options⟩.
    -

    +

    -

    The second optional argument ⟨

    The second optional argument ⟨dfn-options⟩ should be empty if the entry has already been defined, since it’s too late for them. If it’s not empty, a warning will be generated with -



    \GlsXtrWarning{dfn-options}{label}

    -

    -

    For example, this warning will be generated on the second instance of

    +

    For example, this warning will be generated on the second instance of \glsxtr below:

    -
    +
     \glsxtr[][plural=geese]{goose}
    - 
     ... later - 
    \glsxtr[][plural=geese]{goose} -
    -

    -

    If you are considering doing something like: + ... later +\glsxtr[][plural=geese]{goose} + +

    +

    If you are considering doing something like:

    -
    +
     \newcommand*{\goose}{\glsxtr[][plural=geese]{goose}}
    - 
    \renewcommand*{\GlsXtrWarning}[2]{} - 
     ... later - 
    \goose\ some more text here -
    -

    then don’t bother. It’s simpler and less problematic to just define the entries in the +\renewcommand*{\GlsXtrWarning}[2]{} + ... later +\goose\ some more text here + +

    then don’t bother. It’s simpler and less problematic to just define the entries in the preamble with \newglossaryentry and then use \gls in the document. -

    There are plural and case-changing alternatives to

    There are plural and case-changing alternatives to \glsxtr: -



    \glsxtrpl[gls-optionsdfn-options]{label}

    -

    +

    This is like \glsxtr but uses \glspl instead of \gls. -



    \Glsxtr[gls-optionsdfn-options]{label}

    -

    +

    This is like \glsxtr but uses \Gls instead of \gls. -



    \Glsxtrpl[gls-optionsdfn-options]{label}

    -

    +

    This is like \glsxtr but uses \Glspl instead of \gls. -

    If you use UTF-8 and don’t want the inconvenient of needing to use an +

    If you use UTF-8 and don’t want the inconvenient of needing to use an ASCII-only label, then it’s better to use XƎLATEX or LuaLATEX instead of LaTeX (or pdfLATEX). If you really desperately want to use UTF-8 entry labels without switching to XƎLATEX or LuaLATEX then there is a starred version of @@ -23225,20 +23988,20 @@ without switching to X\GlsXtrEnableOnTheFly that allows you to use UTF-8 characters in ⟨label⟩, but it’s experimental and may not work in some cases. -

    If you use the starred version of

    If you use the starred version of \GlsXtrEnableOnTheFly don’t use any commands in the ⟨label⟩, even if they expand to just text.
    -

    +

    -

    -

    +

    Top

    12. Supplemental Packages

    -

    The

    The glossaries bundle provides additional support packages glossaries-prefix (for @@ -23247,10 +24010,10 @@ class="cmss-10">glossaries-accsupp (for accessibility support). These packages aren’t automatically loaded.

    -

    Top

    12.1 Prefixes or Determiners

    -

    If prefixing is required, you can simply load

    If prefixing is required, you can simply load glossaries-prefix after glossaries-extra. For @@ -23259,33 +24022,33 @@ example:

    -
    +
     \documentclass{article}
    - 
    \usepackage{glossaries-extra} - 
    \usepackage{glossaries-prefix} - 
    \makeglossaries - 
    \newabbreviation - 
     [prefix={an\space}, - 
     prefixfirst={a~}] - 
     {svm}{SVM}{support vector machine} - 
    \begin{document} - 
    First use: \pgls{svm}. - 
    Next use: \pgls{svm}. - 
    \printglossaries - 
    \end{document} -
    -

    -

    -

    -

    +

    +

    +

    +

    Top

    12.2 Accessibility Support

    -

    The

    The glossaries-accsupp package is still experimental and so accessibility features are liable to change.
    -

    -

    The

    +

    The glossaries-accsupp package needs to be loaded before glossaries-extra or through @@ -23297,10 +24060,10 @@ class="cmss-10">accsupp -

    -

    If you don’t load +

    If you don’t load glossaries-accsupp or you load glossaries-accsupp\newabbreviationglossaries-accsupp is loaded too late. -

    The following

    The following \glsaccessxxx⟩ commands add accessibility information wrapped around the corresponding \glsentryxxx⟩ commands. There is no check for existence of the entry nor do any of these commands add formatting, hyperlinks or indexing information. -



    \glsaccessname{label}

    -

    +

    This displays the value of the name field for the entry identified by ⟨label⟩. -

    If the

    If the glossaries-accsupp package isn’t loaded, this is simply defined as:

    -
    +
     \newcommand*{\glsaccessname}[1]{\glsentryname{#1}}
    -
    -

    otherwise it’s defined as: + +

    otherwise it’s defined as:

    -
    +
     \newcommand*{\glsaccessname}[1]{%
    - 
      \glsnameaccessdisplay - 
      {% - 
        \glsentryname{#1}% - 
      }% - 
      {#1}% - 
    } -
    -

    ( +

    (\glsnameaccessdisplay is defined by the glossaries-accsupp package.) The first letter upper case version is: -



    \Glsaccessname{label}

    -

    +

    Without the glossaries-accsupp package this is just defined as: @@ -23379,113 +24142,113 @@ class="cmss-10">glossaries-accsupp -

    -

    With the +

    With the glossaries-accsupp package this is defined as:

    -
    +
     \newcommand*{\Glsaccessname}[1]{%
    - 
      \glsnameaccessdisplay - 
      {% - 
        \Glsentryname{#1}% - 
      }% - 
      {#1}% - 
    } -
    -

    -

    The following commands are all defined in an analogous manner. -


    +

    +

    The following commands are all defined in an analogous manner. +


    \glsaccesstext{label}

    -

    +

    This displays the value of the text field. -



    \Glsaccesstext{label}

    -

    +

    This displays the value of the text field with the first letter converted to upper case. -



    \glsaccessplural{label}

    -

    +

    This displays the value of the plural field. -



    \Glsaccessplural{label}

    -

    +

    This displays the value of the plural field with the first letter converted to upper case. -



    \glsaccessfirst{label}

    -

    +

    This displays the value of the first field. -



    \Glsaccessfirst{label}

    -

    +

    This displays the value of the first field with the first letter converted to upper case. -



    \glsaccessfirstplural{label}

    -

    +

    This displays the value of the firstplural field. -



    \Glsaccessfirstplural{label}

    -

    +

    This displays the value of the firstplural field with the first letter converted to upper case. -



    \glsaccesssymbol{label}

    -

    +

    This displays the value of the symbol field. -



    \Glsaccesssymbol{label}

    -

    +

    This displays the value of the symbol field with the first letter converted to upper case. -



    \glsaccesssymbolplural{label}

    -

    +

    This displays the value of the symbolplural field. -



    \Glsaccesssymbolplural{label}

    -

    +

    This displays the value of the symbolplural field with the first letter converted to upper case. -



    \glsaccessdesc{label}

    -

    +

    This displays the value of the description field. -



    \Glsaccessdesc{label}

    -

    +

    This displays the value of the description field with the first letter converted to upper case. -



    \glsaccessdescplural{label}

    -

    +

    This displays the value of the descriptionplural field. -



    \Glsaccessdescplural{label}

    -

    +

    This displays the value of the descriptionplural field with the first letter converted to upper case. -



    \glsaccessshort{label}

    -

    +

    This displays the value of the short field. -



    \Glsaccessshort{label}

    -

    +

    This displays the value of the short field with the first letter converted to upper case. -



    \glsaccessshortpl{label}

    -

    +

    This displays the value of the shortplural field. -



    \Glsaccessshortpl{label}

    -

    +

    This displays the value of the shortplural field with the first letter converted to upper case. -



    \glsaccesslong{label}

    -

    +

    This displays the value of the long field. -



    \Glsaccesslong{label}

    -

    +

    This displays the value of the long field with the first letter converted to upper case. -



    \glsaccesslongpl{label}

    -

    +

    This displays the value of the longplural field. -



    \Glsaccesslongpl{label}

    -

    +

    This displays the value of the longplural field with the first letter converted to upper @@ -23638,307 +24401,390 @@ case.

    -

    -

    +

    Top

    13. Sample Files

    -

    The following sample files are provided with this package: +

    The following sample files are provided with this package:

    +

    sample.tex

    Simple sample file that uses one of the dummy files provided by - the sample.tex

    +

    Simple sample file that uses one of the dummy files provided by the + glossaries package for testing. -

    +

    +

    sample-abbr-styles.tex

    Demonstrates all predefined abbreviation styles. -
    +class="cmbx-10">sample-abbr-styles.tex

    +

    Demonstrates all predefined abbreviation styles. +

    +

    sample-mixture.tex

    General entries, acronyms and initialisms all treated - differently. -
    +class="cmbx-10">sample-mixture.tex

    +

    General entries, acronyms and initialisms all treated differently. +

    +

    sample-name-font

    Categories and attributes are used to customize the way - different entries appear. -
    +class="cmbx-10">sample-name-font

    +

    Categories and attributes are used to customize the way different entries + appear. +

    +

    sample-abbrv.tex

    General abbreviations. -
    +class="cmbx-10">sample-abbrv.tex

    +

    General abbreviations. +

    +

    sample-acronym.tex

    Acronyms aren’t initialisms and don’t expand on sample-acronym.tex

    +

    Acronyms aren’t initialisms and don’t expand on first - use. -

    +href="#glo:firstuse">first use. +

    +

    sample-acronym-desc.tex

    Acronyms that have a separate long form and - description. -
    +class="cmbx-10">sample-acronym-desc.tex

    +

    Acronyms that have a separate long form and description. +

    +

    sample-crossref.tex

    Unused entries that have been cross-referenced - automatically are added at the end of the document. -
    +class="cmbx-10">sample-crossref.tex

    + + + +

    Unused entries that have been cross-referenced automatically are added + at the end of the document. +

    +

    sample-indexhook.tex

    Use the index hook to track which entries have been - indexed (and therefore find out which ones haven’t been indexed). -
    +class="cmbx-10">sample-indexhook.tex

    +

    Use the index hook to track which entries have been indexed (and therefore + find out which ones haven’t been indexed). +

    +

    sample-footnote.tex

    Footnote abbreviation style that moves the footnote - marker outside of the hyperlink generated by \gls and moves it after - certain punctuation characters for neatness. -
    +class="cmbx-10">sample-footnote.tex

    +

    Footnote abbreviation style that moves the footnote marker outside of + the hyperlink generated by \gls and moves it after certain punctuation + characters for neatness. +

    +

    sample-undef.tex

    Warn on undefined entries instead of generating an error. -
    +class="cmbx-10">sample-undef.tex

    +

    Warn on undefined entries instead of generating an error. +

    +

    sample-mixed-abbrv-styles.tex

    Different abbreviation styles for different - entries. - - - -
    +class="cmbx-10">sample-mixed-abbrv-styles.tex

    +

    Different abbreviation styles for different entries. +

    +

    sample-initialisms.tex

    Automatically insert dots into initialisms. -
    +class="cmbx-10">sample-initialisms.tex

    +

    Automatically insert dots into initialisms. +

    +

    sample-postdot.tex

    Another initialisms example. -
    +class="cmbx-10">sample-postdot.tex

    +

    Another initialisms example. +

    +

    sample-postlink.tex

    Automatically inserting text after the sample-postlink.tex

    +

    Automatically inserting text after the link-text - produced by commands like link-text produced by commands + like \gls (outside of hyperlink, if present). -

    +

    + + + +

    sample-header.tex

    Using entries in section/chapter headings. -
    +class="cmbx-10">sample-header.tex

    +

    Using entries in section/chapter headings. +

    +

    sample-autoindex.tex

    Using the sample-autoindex.tex

    +

    Using the dualindex and indexname attributes to - automatically add glossary entries to the index (in addition to the glossary - attributes to automatically add + glossary entries to the index (in addition to the glossary location list). -

    +

    +

    sample-autoindex-hyp.tex

    As previous but uses sample-autoindex-hyp.tex

    +

    As previous but uses hyperref. -

    +

    +

    sample-nested.tex

    Using sample-nested.tex

    +

    Using \gls within the value of the name key. -

    +

    +

    sample-entrycount.tex

    Enable entry-use counting (only index if used more - than n times, see sample-entrycount.tex

    +

    Enable entry-use counting (only index if used more than n times, see + §7.1 §??sec:entrycount Entry Counting (First Use Flag)). -

    +

    +

    sample-unitentrycount.tex

    Enable use of per-unit entry-use counting (sample-unitentrycount.tex

    +

    Enable use of per-unit entry-use counting (§7.1 - Entry Counting (First Use Flag)). -

    +class="tcrm-1000">§??sec:entrycount Entry + Counting (First Use Flag)). +

    +

    sample-onelink.tex

    Using the per-unit entry counting (sample-onelink.tex

    +

    Using the per-unit entry counting (§7.1 Entry Counting +class="tcrm-1000">§??sec:entrycount Entry Counting (First Use Flag)) to only have one hyperlink per entry per page. -

    +

    +

    sample-linkcount.tex

    Using link counting (sample-linkcount.tex

    +

    Using link counting (§7.2 Link Counting) to only have - one hyperlink per entry. -

    +class="tcrm-1000">§??sec:linkcount Link Counting) to only have one + hyperlink per entry. + + + +

    +

    sample-pages.tex

    Insert “page” or “pages” before the location list. -
    +class="cmbx-10">sample-pages.tex

    +

    Insert “page” or “pages” before the location list. +

    +

    sample-altmodifier.tex

    Set the default options for commands like \gls and - add an alternative modifier. -
    +class="cmbx-10">sample-altmodifier.tex

    +

    Set the default options for commands like \gls and add an alternative + modifier. +

    +

    sample-mixedsort.tex

    Uses the optional argument of \makeglossaries to - allow a mixture of sample-mixedsort.tex

    +

    Uses the optional argument of \makeglossaries to allow a mixture of + \printglossary and \printnoidxglossary. - - - -

    +

    +

    sample-external.tex

    Uses the sample-external.tex

    +

    Uses the targeturl attribute to allow for entries that - should link to an external URL rather than to an internal glossary. -

    + id="dx1-61009"> attribute to allow for entries that should link to an + external URL rather than to an internal glossary. +

    +

    sample-fmt.tex

    Provides text-block commands associated with entries in - order to use sample-fmt.tex

    +

    Provides text-block commands associated with entries in order to use + \glsxtrfmt. -

    +

    +

    sample-alias.tex

    Uses the sample-alias.tex

    +

    Uses the alias key. (See §10.5 §??sec:alias Entry Aliases.) -

    +

    +

    sample-alttree.tex

    Uses the sample-alttree.tex

    +

    Uses the glossaries-extra-stylemods package with the package with the alttree - style (see style (see + §2.10.1 §??sec:stylemods The glossaries-extra-stylemods Package). -

    +

    +

    sample-alttree-sym.tex

    Another sample-alttree-sym.tex

    + + + +

    Another alttree example that measures the symbol - widths. -

    + id="dx1-61013"> example that measures the symbol widths. +

    +

    sample-alttree-marginpar.tex

    Another sample-alttree-marginpar.tex

    +

    Another alttree example that puts the - example that puts the number list in the margin. -

    +

    +

    sample-onthefly.tex

    Using on-the-fly commands. Terms with accents must - have the sample-onthefly.tex

    +

    Using on-the-fly commands. Terms with accents must have the name key explicitly set. -

    + id="dx1-61016"> key + explicitly set. +

    +

    sample-onthefly-xetex.tex

    Using on-the-fly commands with XƎLATEX. - Terms with UTF-8 characters don’t need to have the sample-onthefly-xetex.tex

    +

    Using on-the-fly commands with XƎLATEX. Terms with UTF-8 characters + don’t need to have the name key explicitly - set. Terms that contain commands must have the key explicitly set. Terms that contain + commands must have the name key explicitly set - with the commands removed from the label. -

    + id="dx1-61018"> key explicitly set with the commands + removed from the label. +

    +

    sample-onthefly-utf8.tex

    Tries to emulate the previous sample file for use - with LaTeX through the starred version of sample-onthefly-utf8.tex

    +

    Tries to emulate the previous sample file for use with LaTeX through the + starred version of \GlsXtrEnableOnTheFly. - This is a bit iffy and may not always work. Terms that contain commands - must have the . This is a bit iffy and may + not always work. Terms that contain commands must have the name key explicitly set with the commands removed from - the label. -

    + id="dx1-61020"> key + explicitly set with the commands removed from the label. +

    +

    sample-accsupp.tex

    Integrate sample-accsupp.tex

    +

    Integrate glossaries-accsupp. -

    +

    +

    sample-prefix.tex

    Integrate sample-prefix.tex

    +

    Integrate glossaries-prefix. -

    +

    +

    sample-suppl-main.tex

    Uses sample-suppl-main.tex

    +

    Uses thevalue to reference a location in the - supplementary file to reference a location in the supplementary file + sample-suppl.tex. -

    +

    +

    sample-suppl-main-hyp.tex

    A more complicated version to the above that - uses the sample-suppl-main-hyp.tex

    +

    A more complicated version to the above that uses the hyperref package to reference a location in the supplementary file - package + to reference a location in the supplementary file sample-suppl-hyp.tex. +

    -

    -

    +

    Top

    14. Multi-Lingual Support

    -

    There’s only one command provided by

    There’s only one command provided by glossaries-extra that you’re likely to want to change in your document and that’s \abbreviationsname (§1.2 §??sec:pkgopts New or Modified Package Options) if you use the \acronymname (provided by glossaries). -

    You can redefine it in the usual way. For example: +

    You can redefine it in the usual way. For example:

    -
    +
     \renewcommand*{\abbreviationsname}{List of Abbreviations}
    -
    -

    Or using +

    Or using babel or polyglossiapolyglossia -

    -

    -

    Alternatively you can use the +

    +

    Alternatively you can use the title key when you print the list of abbreviations. For example: @@ -23984,21 +24830,21 @@ For example:

    -
    +
     \printabbreviations[title={List of Abbreviations}]
    -
    -

    or + +

    or

    -
    +
     \printglossary[type=abbreviations,title={List of Abbreviations}]
    -
    -

    -

    The other fixed text commands are the diagnostic messages, which shouldn’t + +

    +

    The other fixed text commands are the diagnostic messages, which shouldn’t appear in the final draft of your document. -

    The

    The glossaries-extra package has the facility to load language modules (whose filename is in the form glossariesxtr-Latn, associated with the given dialect. There’s no warning if the associated file isn’t found. The script file is loaded after the dialect file. -

    If you want to write your own language module, you just need to create a file +

    If you want to write your own language module, you just need to create a file called glossariesxtr-langtracklang package). For example, glossariesxtr-french.ldf. -

    The simplest code for this file is: +

    The simplest code for this file is:

    -
    +
     \ProvidesGlossariesExtraLang{french}[2015/12/09 v1.0]
    - 
    \newcommand*{\glossariesxtrcaptionsfrench}{% - 
     \def\abbreviationsname{Abr\'eviations}% - 
    } - 
    \glossariesxtrcaptionsfrench - 
    \ifcsdef{captions\CurrentTrackedDialect} - 
    {% - 
      \csappto{captions\CurrentTrackedDialect}% - 
      {% - 
        \glossariesxtrcaptionsfrench - 
      }% - 
    }% - 
    {% - 
      \ifcsdef{captions\CurrentTrackedLanguage} - 
      {% - 
        \csappto{captions\CurrentTrackedLanguage}% - 
        {% - 
          \glossariesxtrcaptionsfrench - 
        }% - 
      }% - 
      {}% - 
    } -
    -

    -

    You can adapt this for other languages by replacing all instances of the language +\newcommand*{\glossariesxtrcaptionsfrench}{% + \def\abbreviationsname{Abr\'eviations}% +} +\glossariesxtrcaptionsfrench +\ifcsdef{captions\CurrentTrackedDialect} +{% +  \csappto{captions\CurrentTrackedDialect}% +  {% +    \glossariesxtrcaptionsfrench +  }% +}% +{% +  \ifcsdef{captions\CurrentTrackedLanguage} +  {% +    \csappto{captions\CurrentTrackedLanguage}% +    {% +      \glossariesxtrcaptionsfrench +    }% +  }% +  {}% +} + +

    +

    You can adapt this for other languages by replacing all instances of the language identifier french and the translated text Abr\’eviations as appropriate. You can @@ -24071,62 +24917,63 @@ class="cmtt-10">.ldf file to provide rule blocks for a particular languag href="#glo:bib2gls">bib2gls’s custom sort rule. See §9.3 §??sec:bib2glssty The glossaries-extra-bib2gls package for further -details. -

    This glossaries-extra-bib2gls package +for further details. +

    This .ldf file then needs to be put somewhere on TeX’s path so that it can be found by glossaries-extra. You might also want to consider uploading it to CTAN so that it can be useful to others. (Please don’t send it to me. I already have more packages than I am able to maintain.) -

    If you additionally want to provide translations for the diagnostic messages used +

    If you additionally want to provide translations for the diagnostic messages used when a glossary is missing, you need to redefine the following commands: -



    \GlsXtrNoGlsWarningHead{label}{file}

    -

    +

    This produces the following text in English: -

    -

    This document is incomplete. The external file associated with the +

    +

    This document is incomplete. The external file associated with the glossary ‘⟨label⟩’ (which should be called ⟨file⟩) hasn’t been created.

    +class="cmitt-10">file⟩) hasn’t been created.

    -



    \GlsXtrNoGlsWarningEmptyStart

    -

    +

    This produces the following text in English: -

    -

    This has probably happened because there are no entries defined in - this glossary.

    -


    +

    This has probably happened because there are no entries defined in + this glossary.

    +


    \GlsXtrNoGlsWarningEmptyMain

    -

    +

    This produces the following text in English: -

    -

    If you don’t want this glossary, add

    +

    If you don’t want this glossary, add nomain to your package option list when you load glossaries-extra.sty. For example:

    -


    glossaries-extra.sty. For example:

    +


    \GlsXtrNoGlsWarningEmptyNotMain{label}

    -

    +

    This produces the following text in English: -

    -

    Did you forget to use

    +

    Did you forget to use type=label⟩ when you defined your entries? If you tried to load entries into this glossary with label] as the optional argument? If you did, check that the definitions in the file you loaded all had the type set to \glsdefaulttype.

    -


    \glsdefaulttype.

    +


    \GlsXtrNoGlsWarningCheckFile{file}

    -

    +

    This produces the following text in English: -

    -

    Check the contents of the file ⟨

    +

    Check the contents of the file ⟨file⟩. If it’s empty, that means you haven’t indexed any of your entries in this glossary (using commands like \gls or \glsadd) so this list can’t be generated. If the file isn’t - empty, the document build process hasn’t been completed.

    -


    +


    \GlsXtrNoGlsWarningMisMatch

    -

    +

    This produces the following text in English: -

    -

    You need +

    +

    You need to either replace \makenoidxglossaries with \makeglossaries or @@ -24169,44 +25016,44 @@ class="cmtt-10">\printglossaries) with \printnoidxglossary (or \printnoidxglossaries) and then - rebuild this document.

    + rebuild this document.

    -



    \GlsXtrNoGlsWarningNoOut{file}

    -

    +

    This produces the following text in English: -

    -

    The file ⟨

    +

    The file ⟨file⟩ doesn’t exist. This most likely means you haven’t used \makeglossaries or you have used \nofiles. If this is just a draft version of the document, you can suppress this message using the nomissingglstext package option.

    -


    nomissingglstext package option.

    +


    \GlsXtrNoGlsWarningTail

    -

    +

    This produces the following text in English: -

    -

    This message will be removed once the problem has been fixed.

    -


    +

    This message will be removed once the problem has been fixed.

    +


    \GlsXtrNoGlsWarningBuildInfo

    -

    +

    This is advice on how to generate the glossary files. -



    \GlsXtrNoGlsWarningAutoMake{label}

    -

    +

    This is the message produced when the automakeautomake

    See the documented code (

    See the documented code (glossaries-extra-code.pdf) for further details. @@ -24222,6 +25069,7 @@ details.

    @@ -24230,14 +25078,16 @@ details.

    Top

    Glossary

    + id="x1-630001">Glossary
    +

    bib2gls

    A command line Java application that selects entries from a .bib file - and converts them + id="dx1-63001">

    +

    A command line Java application that selects entries from a .bib file and + converts them to glossary definitions (like bibtex but also performs hierarchical sorting and collation, thus omitting the need for makeindex). Further details at: http://www.dickimaw-books.com/software/bib2gls/. -

    +

    +

    entry location

    The location of the entry in the document. This defaults to - the page number on which the entry appears. An entry may have multiple - locations. -
    + id="dx1-63004">

    +

    The location of the entry in the document. This defaults to the page + number on which the entry appears. An entry may have multiple locations. +

    +

    first use

    The first time a glossary entry is used (from the start of the document + id="dx1-63005">

    +

    The first time a glossary entry is used (from the start of the document or after a reset) with one of the following commands: \gls, \GLSpl or \glsdisp. -

    +

    +

    first use flag

    A conditional that determines whether or not the entry has been - used according to the rules of

    +

    A conditional that determines whether or not the entry has been used + according to the rules of first use. -

    +

    +

    first use text

    The text that is displayed on first use, which is governed by the -

    +

    The text that is displayed on first use, which is governed by the first and and + firstplural keys of keys of \newglossaryentry. (May be overridden by - . (May be overridden by \glsdisp.) -

    + + + +

    +

    link-text

    The text produced by commands such as

    +

    The text produced by commands such as \gls. It may or may not - have a hyperlink to the glossary. -

    + id="dx1-63022">. It may or may not have a + hyperlink to the glossary. +

    +

    location list

    A list of

    +

    A list of entry locations. See number list. -

    +

    +

    makeglossaries

    A custom designed Perl script interface provided with the - glossaries package to run xindy or makeindex according to the document - settings. - - - -
    + id="dx1-63026">

    +

    A custom designed Perl script interface provided with the glossaries + package to run xindy or makeindex according to the document settings. +

    +

    makeglossaries-lite

    A custom designed Lua script interface to

    +

    A custom designed Lua script interface to xindy and - xindy and makeindex provided with the glossaries package. This is a cut-down - alternative to the Perl makeglossaries script. If you have Perl installed, - use the Perl script instead. This script is distributed in the source code - on CTAN with the file name makeglossaries-lite.lua but TeX Live - on Unix-like systems creates a symbolic link called makeglossaries-lite - (without the .lua extension) to the actual makeglossaries-lite.lua - script, and TeX distributions on Windows convert the script to an - executable makeindex provided + with the glossaries package. This is a cut-down alternative to the Perl + makeglossaries script. If you have Perl installed, use the Perl script + instead. This script is distributed in the source code on CTAN with + the file name makeglossaries-lite.lua but TeX Live on Unix-like + systems creates a symbolic link called makeglossaries-lite (without + the .lua extension) to the actual makeglossaries-lite.lua script, + and TeX distributions on Windows convert the script to an executable + makeglossaries-lite.exe. -

    +

    +

    makeindex

    An indexing application. -
    + id="dx1-63033">

    +

    An indexing application. +

    +

    number list

    A list of entry locations (also called a location list). The number - list can be suppressed using the

    +

    A list of entry locations (also called a location list). The number list can + be suppressed using the nonumberlist package option. -

    +

    +

    xindy

    An flexible indexing application with multilingual support written in - Perl.
    + id="dx1-63037">

    + + + +

    An flexible indexing application with multilingual support written in Perl.

    @@ -24797,5015 +25669,5079 @@ class="cmss-10">short-long-user-desc  219
        short-nolong  220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233
    +href="glossaries-extra-manual.html#dx1-3016" >220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234
        short-nolong-desc  234, 235, 236, 237, 238
    +href="glossaries-extra-manual.html#dx1-29033" >235, 236, 237, 238, 239
        short-nolong-desc-noreg  239
    +href="glossaries-extra-manual.html#dx1-30118" >240
        short-nolong-noreg  240
    +href="glossaries-extra-manual.html#dx1-30086" >241
        short-postfootnote  241, 242, 243, 244, 245, 246, 247, 248
    +href="glossaries-extra-manual.html#dx1-9062" >242, 243, 244, 245, 246, 247, 248, 249
        short-postfootnote-desc  249, 250, 251, 252, 253
    +href="glossaries-extra-manual.html#dx1-30215" >250, 251, 252, 253, 254
        short-postlong-user  254, 255, 256
    +href="glossaries-extra-manual.html#dx1-30232" >255, 256, 257
        short-postlong-user-desc  257
    +href="glossaries-extra-manual.html#dx1-30235" >258
        short-sc  258
    +href="glossaries-extra-manual.html#dx1-29015" >259
        short-sc-desc  259
    +href="glossaries-extra-manual.html#dx1-29045" >260
        short-sc-footnote  260, 261, 262
    +href="glossaries-extra-manual.html#dx1-14048" >261, 262, 263
        short-sc-footnote-desc  263, 264
    +href="glossaries-extra-manual.html#dx1-14054" >264, 265
        short-sc-long  265, 266, 267, 268
    +href="glossaries-extra-manual.html#dx1-14024" >266, 267, 268, 269
        short-sc-long-desc  269, 270
    +href="glossaries-extra-manual.html#dx1-14038" >270, 271
        short-sc-nolong  271, 272, 273
    +href="glossaries-extra-manual.html#dx1-29012" >272, 273, 274
        short-sc-nolong-desc  274, 275
    +href="glossaries-extra-manual.html#dx1-29042" >275, 276
        short-sc-postfootnote  276, 277
    +href="glossaries-extra-manual.html#dx1-28099" >277, 278
        short-sc-postfootnote-desc  278
    +href="glossaries-extra-manual.html#dx1-30223" >279
        short-sm  279
    +href="glossaries-extra-manual.html#dx1-29022" >280
        short-sm-desc  280
    +href="glossaries-extra-manual.html#dx1-29050" >281
        short-sm-footnote  281
    +href="glossaries-extra-manual.html#dx1-14050" >282
        short-sm-footnote-desc  282, 283
    +href="glossaries-extra-manual.html#dx1-14056" >283, 284
        short-sm-long  284, 285, 286
    +href="glossaries-extra-manual.html#dx1-14026" >285, 286, 287
        short-sm-long-desc  287, 288
    +href="glossaries-extra-manual.html#dx1-14040" >288, 289
        short-sm-nolong  289, 290, 291
    +href="glossaries-extra-manual.html#dx1-29019" >290, 291, 292
        short-sm-nolong-desc  292, 293
    +href="glossaries-extra-manual.html#dx1-29047" >293, 294
        short-sm-postfootnote  294
    +href="glossaries-extra-manual.html#dx1-30207" >295
        short-sm-postfootnote-desc  295
    +href="glossaries-extra-manual.html#dx1-30226" >296
    \abbreviationsname  296
    +href="glossaries-extra-manual.html#dx1-4223" >297
    \abbrvpluralsuffix  297
    +class="cmti-10">298
    acronym styles (glossaries):
        dua  298
    +href="glossaries-extra-manual.html#dx1-14041" >299
        dua-desc  299
    +href="glossaries-extra-manual.html#dx1-14043" >300
        footnote  300
    +href="glossaries-extra-manual.html#dx1-14045" >301
        footnote-desc  301
    +href="glossaries-extra-manual.html#dx1-14051" >302
        footnote-sc  302
    +href="glossaries-extra-manual.html#dx1-14047" >303
        footnote-sc-desc  303
    +href="glossaries-extra-manual.html#dx1-14053" >304
        footnote-sm  304
    +href="glossaries-extra-manual.html#dx1-14049" >305
        footnote-sm-desc  305
    +href="glossaries-extra-manual.html#dx1-14055" >306
        long-sc-short  306
    +href="glossaries-extra-manual.html#dx1-14015" >307
        long-sc-short-desc  307
    +href="glossaries-extra-manual.html#dx1-14029" >308
        long-short-desc  308
    +href="glossaries-extra-manual.html#dx1-14027" >309
        long-sm-short  309
    +href="glossaries-extra-manual.html#dx1-14017" >310
        long-sm-short-desc  310
    +href="glossaries-extra-manual.html#dx1-14031" >311
        long-sp-short  311, 312
    +href="glossaries-extra-manual.html#dx1-14019" >312, 313
        long-sp-short-desc  313
    +href="glossaries-extra-manual.html#dx1-14033" >314
        sc-short-long  314
    +href="glossaries-extra-manual.html#dx1-14023" >315
        sc-short-long-desc  315
    +href="glossaries-extra-manual.html#dx1-14037" >316
        short-long  316
    +href="glossaries-extra-manual.html#dx1-14021" >317
        short-long-desc  317
    +href="glossaries-extra-manual.html#dx1-14035" >318
        sm-short-long  318
    +href="glossaries-extra-manual.html#dx1-14025" >319
        sm-short-long-desc  319
    +href="glossaries-extra-manual.html#dx1-14039" >320
    amsgen package  320
    +href="glossaries-extra-manual.html#dx1-10" >321
    amsmath package  321
    +href="glossaries-extra-manual.html#dx1-4153" >322
    \apptoglossarypreamble  322
    +class="cmti-10">323

    B babel package  323, 324, 325, 326, 327, 328, 329, 330, 331
    +href="glossaries-extra-manual.html#dx1-3010" >324, 325, 326, 327, 328, 329, 330, 331, 332
    bib2gls  332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 450
    +class="cmbx-10">459

    C categories:
        abbreviation  451, 452, 453, 454, 455
    +href="glossaries-extra-manual.html#dx1-10004" >460, 461, 462, 463, 464
        acronym  456, 457, 458, 459, 460
    +href="glossaries-extra-manual.html#dx1-3028" >465, 466, 467, 468, 469, 470
        general  461, 462, 463, 464, 465, 466, 467, 468
    +href="glossaries-extra-manual.html#dx1-9037" >471, 472, 473, 474, 475, 476, 477, 478
        glossnamefont  469
    +href="glossaries-extra-manual.html#dx1-17004" >479
        index  470, 471
    +href="glossaries-extra-manual.html#dx1-6030" >480, 481
        number  472
    +href="glossaries-extra-manual.html#dx1-35018" >482
        symbol  473, 474
    +href="glossaries-extra-manual.html#dx1-9045" >483, 484
    category attributes:
        accessaposplural  475, 476, 477, 478
    +href="glossaries-extra-manual.html#dx1-35138" >485, 486, 487, 488
        accessinsertdots  479, 480
    +href="glossaries-extra-manual.html#dx1-35137" >489, 490
        accessnoshortplural  481, 482
    +href="glossaries-extra-manual.html#dx1-35139" >491, 492
        aposplural  483, 484, 485, 486, 487, 488, 489, 490
    +href="glossaries-extra-manual.html#dx1-12036" >493, 494, 495, 496, 497, 498, 499, 500
        discardperiod  491, 492, 493, 494, 495
    +href="glossaries-extra-manual.html#dx1-9032" >501, 502, 503, 504, 505
        dualindex  496, 497, 498, 499, 500, 501, 502
    +href="glossaries-extra-manual.html#dx1-35118" >506, 507, 508, 509, 510, 511, 512
        entrycount  503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513
    +href="glossaries-extra-manual.html#dx1-10003" >513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523
        externallocation  514, 515, 516, 517
    +href="glossaries-extra-manual.html#dx1-7061" >524, 525, 526, 527
        firstshortaccess  518
    +href="glossaries-extra-manual.html#dx1-35169" >528
        glossdesc  519, 520, 521
    +href="glossaries-extra-manual.html#dx1-17005" >529, 530, 531
        glossdescfont  522, 523, 524
    +href="glossaries-extra-manual.html#dx1-17006" >532, 533, 534
        glossname  525, 526, 527
    +href="glossaries-extra-manual.html#dx1-17003" >535, 536, 537
        glossnamefont  528, 529, 530, 531
    +href="glossaries-extra-manual.html#dx1-17022" >538, 539, 540, 541
        glosssymbolfont  532, 533
    +href="glossaries-extra-manual.html#dx1-17008" >542, 543
        headuc  534, 535, 536, 537
    +href="glossaries-extra-manual.html#dx1-13059" >544, 545, 546, 547
        hyperoutside  538, 539
    +href="glossaries-extra-manual.html#dx1-7019" >548, 549
        indexname  540, 541, 542, 543, 544
    +href="glossaries-extra-manual.html#dx1-17027" >550, 551, 552, 553, 554
        indexonlyfirst  545, 546, 547
    +href="glossaries-extra-manual.html#dx1-7007" >555, 556, 557
        insertdots  548, 549, 550, 551
    +href="glossaries-extra-manual.html#dx1-24013" >558, 559, 560, 561
        linkcount  552, 553, 554
    +href="glossaries-extra-manual.html#dx1-35090" >562, 563, 564
        linkcountmaster  555, 556
    +href="glossaries-extra-manual.html#dx1-35092" >565, 566
        markshortwords  557, 558
    +href="glossaries-extra-manual.html#dx1-35061" >567, 568
        markwords  559, 560, 561, 562, 563, 564
    +href="glossaries-extra-manual.html#dx1-30247" >569, 570, 571, 572, 573, 574
        nameshortaccess  565
    +href="glossaries-extra-manual.html#dx1-35163" >575
        nohyper  566, 567, 568
    +href="glossaries-extra-manual.html#dx1-35034" >576, 577, 578
        nohyperfirst  569, 570, 571, 572, 573
    +href="glossaries-extra-manual.html#dx1-30148" >579, 580, 581, 582, 583
        noshortplural  574, 575, 576, 577, 578, 579
    +href="glossaries-extra-manual.html#dx1-12037" >584, 585, 586, 587, 588, 589
        pluraldiscardperiod  580, 581
    +href="glossaries-extra-manual.html#dx1-35048" >590, 591
        recordcount  582, 583, 584, 585
    +href="glossaries-extra-manual.html#dx1-48015" >592, 593, 594, 595
        regular  586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617
    +href="glossaries-extra-manual.html#dx1-9010" >596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627
        retainfirstuseperiod  618
    +href="glossaries-extra-manual.html#dx1-35050" >628
        tagging  619, 620, 621, 622
    +href="glossaries-extra-manual.html#dx1-25002" >629, 630, 631, 632
        targetcategory  623
    +href="glossaries-extra-manual.html#dx1-35127" >633
        targetname  624, 625
    +href="glossaries-extra-manual.html#dx1-35124" >634, 635
        targeturl  626, 627, 628, 629, 630
    +href="glossaries-extra-manual.html#dx1-15002" >636, 637, 638, 639, 640
        textformat  631, 632, 633, 634, 635
    +href="glossaries-extra-manual.html#dx1-7020" >641, 642, 643, 644, 645
        textshortaccess  636
    +href="glossaries-extra-manual.html#dx1-35166" >646
        unitcount  637
    +href="glossaries-extra-manual.html#dx1-37034" >647
        wrgloss  638, 639
    +href="glossaries-extra-manual.html#dx1-7015" >648, 649
    \cGLS  640
    +class="cmti-10">650
    \cGLSformat  641
    +class="cmti-10">651
    \cGLSpl  642
    +class="cmti-10">652
    \cGLSplformat  643
    +class="cmti-10">653
    convertgls2bib  644
    +href="glossaries-extra-manual.html#dx1-40003" >654
    \csGlsXtrLetField  645
    +class="cmti-10">655
    \CustomAbbreviationFields  646
    +class="cmti-10">656

    D datatool package  647
    +href="glossaries-extra-manual.html#dx1-50042" >657
    datatool-base package  648, 649, 650, 651
    +href="glossaries-extra-manual.html#dx1-9" >658, 659, 660, 661
    \dGLS  652
    +class="cmti-10">662
    \dGls  653
    +class="cmti-10">663
    \dgls  654
    +class="cmti-10">664
    \dglsdisp  655
    +class="cmti-10">665
    \dglslink  656
    +class="cmti-10">666
    \dGLSpl  657
    +class="cmti-10">667
    \dGlspl  658
    +class="cmti-10">668
    \dglspl  659
    +class="cmti-10">669

    E \eglssetwidest  660
    +href="glossaries-extra-manual.html#dx1-19079" >670
    \eglsupdatewidest  661
    +href="glossaries-extra-manual.html#dx1-19083" >671
    \eGlsXtrSetField  662
    +class="cmti-10">672
    entry location  663, 664, 665
    +class="cmbx-10">673, 674, 675
    entrycounter package  666
    +href="glossaries-extra-manual.html#dx1-55020" >676
    equation (counter)  667, 668, 669, 670, 671
    +href="glossaries-extra-manual.html#dx1-4130" >677, 678, 679, 680, 681
    etoolbox package  672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682
    +href="glossaries-extra-manual.html#dx1-5" >682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692

    F \false options
    +    groups  693
    +fancyhdr package  683
    +href="glossaries-extra-manual.html#dx1-21049" >694
    file types
        bib  695
    +    glg-abr  684
    +href="glossaries-extra-manual.html#dx1-4216" >696
        glo-abr  685
    +href="glossaries-extra-manual.html#dx1-4218" >697
        gls-abr  686
    +href="glossaries-extra-manual.html#dx1-4217" >698
    first use  687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 738, 739, 740
    +class="cmbx-10">751, 752, 753
    first use flag  741, 742, 743, 744, 745, 746, 754, 755, 756, 757, 758, 759, 747
    +class="cmbx-10">760
    first use text  748, 749
    +class="cmbx-10">761, 762
    fontenc package  750
    +href="glossaries-extra-manual.html#dx1-28024" >763
    \forallabbreviationlists  751
    +class="cmti-10">764

    G \gglssetwidest  752
    +href="glossaries-extra-manual.html#dx1-19077" >765
    \gglsupdatewidest  753
    +href="glossaries-extra-manual.html#dx1-19082" >766
    \gGlsXtrSetField  754
    +class="cmti-10">767
    glossaries package  755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773
    +href="glossaries-extra-manual.html#dx1-4201" >768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787
    glossaries-accsupp package  774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795
    +href="glossaries-extra-manual.html#dx1-4036" >788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809
    glossaries-extra package  796, 797, 798, 799, 800, 801, 802
    +href="glossaries-extra-manual.html#dx1-6020" >810, 811, 812, 813, 814, 815, 816
    glossaries-extra-bib2gls package  803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817
    +href="glossaries-extra-manual.html#dx1-4083" >817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831
    glossaries-extra-stylemods package  818, 819, 820, 821, 822, 823, 824, 825, 826
    +href="glossaries-extra-manual.html#dx1-4026" >832, 833, 834, 835, 836, 837, 838, 839, 840, 841
    glossaries-prefix package  827, 828, 829, 830
    +href="glossaries-extra-manual.html#dx1-4034" >842, 843, 844, 845
    \glossariesextrasetup  831
    +href="glossaries-extra-manual.html#dx1-4279" >846
    glossary styles:
        altlist  832, 833
    +href="glossaries-extra-manual.html#dx1-19023" >847, 848
        alttree  834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846
    +href="glossaries-extra-manual.html#dx1-19049" >849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863
    + + +     bookindex  847, 848, 849, 850
    +href="glossaries-extra-manual.html#dx1-21002" >864, 865, 866, 867
        index  851
    +href="glossaries-extra-manual.html#dx1-19054" >868
        inline  852, 853
    - - - +href="glossaries-extra-manual.html#dx1-19006" >869, 870
        list  854, 855, 856, 857
    +href="glossaries-extra-manual.html#dx1-19018" >871, 872, 873, 874
        listdotted  858, 859
    +href="glossaries-extra-manual.html#dx1-19024" >875, 876
        long  860, 861, 862
    +href="glossaries-extra-manual.html#dx1-19012" >877, 878, 879
        long-desc-name  863
    +href="glossaries-extra-manual.html#dx1-22066" >880
        long-desc-sym-name  864
    +href="glossaries-extra-manual.html#dx1-22133" >881
        long-loc-desc-name  865
    +href="glossaries-extra-manual.html#dx1-22075" >882
        long-loc-desc-sym-name  866
    +href="glossaries-extra-manual.html#dx1-22141" >883
        long-loc-sym-desc-name  867
    +href="glossaries-extra-manual.html#dx1-22125" >884
        long-name-desc  868, 869, 870
    +href="glossaries-extra-manual.html#dx1-22044" >885, 886, 887
        long-name-desc-loc  871
    +href="glossaries-extra-manual.html#dx1-22057" >888
        long-name-desc-sym  872, 873
    +href="glossaries-extra-manual.html#dx1-22083" >889, 890
        long-name-desc-sym-loc  874, 875
    +href="glossaries-extra-manual.html#dx1-22091" >891, 892
        long-name-sym-desc  876
    +href="glossaries-extra-manual.html#dx1-22099" >893
        long-name-sym-desc-loc  877
    +href="glossaries-extra-manual.html#dx1-22108" >894
        long-sym-desc-name  878
    +href="glossaries-extra-manual.html#dx1-22117" >895
        long3col  879
    +href="glossaries-extra-manual.html#dx1-19004" >896
        longragged-booktabs  880, 881
    +href="glossaries-extra-manual.html#dx1-22045" >897, 898
        mcolindexgroup  882
    +href="glossaries-extra-manual.html#dx1-21003" >899
        super  883
    +href="glossaries-extra-manual.html#dx1-54002" >900
        topic  884, 885
    +href="glossaries-extra-manual.html#dx1-23006" >901, 902
        topicmcols  886
    +href="glossaries-extra-manual.html#dx1-23009" >903
        tree  887, 888, 889, 890
    +href="glossaries-extra-manual.html#dx1-19048" >904, 905, 906, 907, 908
        treenoname  891, 892, 893
    +href="glossaries-extra-manual.html#dx1-19060" >909, 910, 911
    glossary-bookindex package  894, 895
    +href="glossaries-extra-manual.html#dx1-21001" >912, 913
    glossary-inline package  896
    +href="glossaries-extra-manual.html#dx1-19007" >914
    glossary-list package  897
    +href="glossaries-extra-manual.html#dx1-54003" >915
    glossary-long package  898, 899
    +href="glossaries-extra-manual.html#dx1-22018" >916, 917
    glossary-longextra package  900, 901
    +href="glossaries-extra-manual.html#dx1-22001" >918, 919
    glossary-topic package  902
    +href="glossaries-extra-manual.html#dx1-23001" >920, 921
    glossary-tree package  903, 904, 905, 906, 907, 908
    +href="glossaries-extra-manual.html#dx1-19034" >922, 923, 924, 925, 926, 927, 928
    \glossentrynameother  909
    +class="cmti-10">929
    \glossxtrsetpopts  910
    +class="cmti-10">930
    \glsabbrvdefaultfont  911, 931, 912
    +class="cmti-10">932
    \glsabbrvemfont  913
    +class="cmti-10">933
    \glsabbrvfont  914
    +class="cmti-10">934
    \glsabbrvhyphenfont  915
    +class="cmti-10">935
    \glsabbrvonlyfont  916
    +class="cmti-10">936
    \glsabbrvscfont  917
    +class="cmti-10">937
    \glsabbrvsmfont  918
    +class="cmti-10">938
    \glsabbrvuserfont  919, 939, 920
    +class="cmti-10">940
    \Glsaccessdesc  921
    +class="cmti-10">941
    \glsaccessdesc  922
    +class="cmti-10">942
    \Glsaccessdescplural  923
    +class="cmti-10">943
    + + + \glsaccessdescplural  924
    +class="cmti-10">944
    \Glsaccessfirst  925
    +class="cmti-10">945
    \glsaccessfirst  926
    - - - +class="cmti-10">946
    \Glsaccessfirstplural  927
    +class="cmti-10">947
    \glsaccessfirstplural  928
    +class="cmti-10">948
    \Glsaccesslong  929
    +class="cmti-10">949
    \glsaccesslong  930
    +class="cmti-10">950
    \Glsaccesslongpl  931
    +class="cmti-10">951
    \glsaccesslongpl  932
    +class="cmti-10">952
    \Glsaccessname  933
    +class="cmti-10">953
    \glsaccessname  934
    +class="cmti-10">954
    \Glsaccessplural  935
    +class="cmti-10">955
    \glsaccessplural  936
    +class="cmti-10">956
    \Glsaccessshort  937
    +class="cmti-10">957
    \glsaccessshort  938
    +class="cmti-10">958
    \Glsaccessshortpl  939
    +class="cmti-10">959
    \glsaccessshortpl  940
    +class="cmti-10">960
    \Glsaccesssymbol  941
    +class="cmti-10">961
    \glsaccesssymbol  942
    +class="cmti-10">962
    \Glsaccesssymbolplural  943
    +class="cmti-10">963
    \glsaccesssymbolplural  944
    +class="cmti-10">964
    \Glsaccesstext  945
    +class="cmti-10">965
    \glsaccesstext  946
    +class="cmti-10">966
    \glsacspace  947
    +class="cmti-10">967
    \glsacspacemax  948
    +class="cmti-10">968
    \glsadd options
        format  949
    +href="glossaries-extra-manual.html#dx1-7035" >969
        theHvalue  950, 951
    +href="glossaries-extra-manual.html#dx1-7047" >970, 971
        thevalue  952, 953, 954, 955, 956
    +href="glossaries-extra-manual.html#dx1-7046" >972, 973, 974, 975, 976
    \glsaddeach  957
    +class="cmti-10">977
    \glsaddpostsetkeys  958
    +class="cmti-10">978
    \glsaddpresetkeys  959
    +class="cmti-10">979
    +\glsalttreechildpredesc  980
    +\glsalttreepredesc  981
    \glscapturedgroup  960
    +class="cmti-10">982
    \glscategory  961
    +class="cmti-10">983
    \glscategorylabel  962
    +class="cmti-10">984
    \glscurrententrylabel  963
    +class="cmti-10">985
    \glscurrentfieldvalue  964
    +class="cmti-10">986
    \glsdefaultshortaccess  965
    +class="cmti-10">987
    \glsdefpostdesc  966
    +class="cmti-10">988
    \glsdefpostlink  967
    +class="cmti-10">989
    \glsdefpostname  968
    +class="cmti-10">990
    \glsentrycurrcount  969
    +class="cmti-10">991
    \glsentrypdfsymbol  970
    +class="cmti-10">992
    \glsentryprevcount  971
    +class="cmti-10">993
    + + + \glsentryprevmaxcount  972
    +class="cmti-10">994
    \glsentryprevtotalcount  973
    +class="cmti-10">995
    \glsextrapostnamehook  974
    +class="cmti-10">996
    \glsFindWidestAnyName  975
    +href="glossaries-extra-manual.html#dx1-19095" >997
    \glsFindWidestAnyNameLocation  976
    - - - +href="glossaries-extra-manual.html#dx1-19107" >998
    \glsFindWidestAnyNameSymbol  977
    +href="glossaries-extra-manual.html#dx1-19099" >999
    \glsFindWidestAnyNameSymbolLocation  978
    +href="glossaries-extra-manual.html#dx1-19104" >1000
    \glsFindWidestLevelTwo  979
    +href="glossaries-extra-manual.html#dx1-19097" >1001
    \glsFindWidestTopLevelName  980
    +href="glossaries-extra-manual.html#dx1-19090" >1002
    \glsFindWidestUsedAnyName  981
    +href="glossaries-extra-manual.html#dx1-19093" >1003
    \glsFindWidestUsedAnyNameLocation  982
    +href="glossaries-extra-manual.html#dx1-19105" >1004
    \glsFindWidestUsedAnyNameSymbol  983
    +href="glossaries-extra-manual.html#dx1-19098" >1005
    \glsFindWidestUsedAnyNameSymbolLocation  984
    +href="glossaries-extra-manual.html#dx1-19100" >1006
    \glsFindWidestUsedLevelTwo  985
    +href="glossaries-extra-manual.html#dx1-19096" >1007
    \glsFindWidestUsedTopLevelName  986
    +href="glossaries-extra-manual.html#dx1-19091" >1008
    \glsfirstabbrvdefaultfont  987
    +class="cmti-10">1009
    \glsfirstabbrvemfont  988
    +class="cmti-10">1010
    \glsfirstabbrvfont  989
    +class="cmti-10">1011
    \glsfirstabbrvhyphenfont  990
    +class="cmti-10">1012
    \glsfirstabbrvonlyfont  991
    +class="cmti-10">1013
    \glsfirstabbrvsmfont  992
    +class="cmti-10">1014
    \glsfirstabbrvuserfont  993
    +class="cmti-10">1015
    \glsfirstlongdefaultfont  994
    +class="cmti-10">1016
    \glsfirstlongemfont  995
    +class="cmti-10">1017
    \glsfirstlongfont  996
    +class="cmti-10">1018
    \glsfirstlongfootnotefont  997
    +class="cmti-10">1019
    \glsfirstlonghyphenfont  998
    +class="cmti-10">1020
    \glsfirstlongonlyfont  999
    +class="cmti-10">1021
    \glsfirstlonguserfont  1000
    +class="cmti-10">1022
    \GLSfmtfirst  1001
    +class="cmti-10">1023
    \Glsfmtfirst  1002
    +class="cmti-10">1024
    \glsfmtfirst  1003
    +class="cmti-10">1025
    \GLSfmtfirstpl  1004
    +class="cmti-10">1026
    \Glsfmtfirstpl  1005
    +class="cmti-10">1027
    \glsfmtfirstpl  1006
    +class="cmti-10">1028
    \GLSfmtfull  1007
    +class="cmti-10">1029
    \Glsfmtfull  1008
    +class="cmti-10">1030
    \glsfmtfull  1009
    +class="cmti-10">1031
    \GLSfmtfullpl  1010
    +class="cmti-10">1032
    \Glsfmtfullpl  1011
    +class="cmti-10">1033
    \glsfmtfullpl  1012
    +class="cmti-10">1034
    \GLSfmtlong  1013
    +class="cmti-10">1035
    \Glsfmtlong  1014
    +class="cmti-10">1036
    \glsfmtlong  1015
    +class="cmti-10">1037
    \GLSfmtlongpl  1016
    +class="cmti-10">1038
    \Glsfmtlongpl  1017
    +class="cmti-10">1039
    + + + \glsfmtlongpl  1018
    +class="cmti-10">1040
    \GLSfmtname  1019
    +class="cmti-10">1041
    \Glsfmtname  1020
    +class="cmti-10">1042
    \glsfmtname  1021
    +class="cmti-10">1043
    \GLSfmtplural  1022
    - - - +class="cmti-10">1044
    \Glsfmtplural  1023
    +class="cmti-10">1045
    \glsfmtplural  1024
    +class="cmti-10">1046
    \GLSfmtshort  1025
    +class="cmti-10">1047
    \Glsfmtshort  1026
    +class="cmti-10">1048
    \glsfmtshort  1027
    +class="cmti-10">1049
    \Glsfmtshortpl  1028, 1050, 1029
    +class="cmti-10">1051
    \glsfmtshortpl  1030
    +class="cmti-10">1052
    \GLSfmttext  1031
    +class="cmti-10">1053
    \Glsfmttext  1032
    +class="cmti-10">1054
    \glsfmttext  1033
    +class="cmti-10">1055
    \glsforeachwithattribute  1034
    +class="cmti-10">1056
    \glsgetattribute  1035
    +class="cmti-10">1057
    \glsgetcategoryattribute  1036
    +class="cmti-10">1058
    \glsgetwidestname  1037
    +href="glossaries-extra-manual.html#dx1-19085" >1059
    \glsgetwidestsubname  1038
    +href="glossaries-extra-manual.html#dx1-19086" >1060
    \glshasattribute  1039
    +class="cmti-10">1061
    \glshascategoryattribute  1040
    +class="cmti-10">1062
    \glshex  1041
    +class="cmti-10">1063
    \glsifattribute  1042
    +class="cmti-10">1064
    \glsifcategory  1043
    +class="cmti-10">1065
    \glsifcategoryattribute  1044
    +class="cmti-10">1066
    \glsifnotregular  1045
    +class="cmti-10">1067
    \glsifnotregularcategory  1046
    +class="cmti-10">1068
    \glsifregular  1047
    +class="cmti-10">1069
    \glsifregularcategory  1048
    +class="cmti-10">1070
    \glskeylisttok  1049
    +class="cmti-10">1071
    \glslabeltok  1050
    +class="cmti-10">1072
    \glslink options
        counter  1051, 1052
    +href="glossaries-extra-manual.html#dx1-4135" >1073, 1074
        format  1053, 1054, 1055, 1056
    +href="glossaries-extra-manual.html#dx1-7058" >1075, 1076, 1077, 1078
        hyper  1057, 1058, 1059
    +href="glossaries-extra-manual.html#dx1-13055" >1079, 1080, 1081
        hyper=false  1060
    +href="glossaries-extra-manual.html#dx1-34005" >1082
        hyperoutside  1061, 1062
    +href="glossaries-extra-manual.html#dx1-7018" >1083, 1084
        noindex  1063, 1064, 1065, 1066, 1067, 1068, 1069
    +href="glossaries-extra-manual.html#dx1-7003" >1085, 1086, 1087, 1088, 1089, 1090, 1091
        prefix  1070, 1071
    +href="glossaries-extra-manual.html#dx1-7025" >1092, 1093
        textformat  1072, 1073
    +href="glossaries-extra-manual.html#dx1-7022" >1094, 1095
        theHvalue  1074, 1075
    +href="glossaries-extra-manual.html#dx1-7028" >1096, 1097
        thevalue  1076, 1077
    +href="glossaries-extra-manual.html#dx1-7027" >1098, 1099
        wrgloss  1078, 1079, 1080, 1081
    +href="glossaries-extra-manual.html#dx1-7011" >1100, 1101, 1102, 1103
    \glslinkcheckfirsthyperhook  1082
    +class="cmti-10">1104
    \glslinkpresetkeys  1083
    +class="cmti-10">1105
    + + + \glslistchildpostlocation  1084
    +class="cmti-10">1106
    \glslistchildprelocation  1085
    +class="cmti-10">1107
    \glslistdesc  1086
    +class="cmti-10">1108
    \glslistgroupskip  1087
    +class="cmti-10">1109
    \glslistprelocation  1088
    - - - +class="cmti-10">1110
    \glslocalreseteach  1089
    +class="cmti-10">1111
    \glslocalunseteach  1090
    +class="cmti-10">1112
    \glslongdefaultfont  1091
    +class="cmti-10">1113
    \glslongemfont  1092
    +class="cmti-10">1114
    \glslongextraDescAlign  1093
    +class="cmti-10">1115
    \glslongextraDescFmt  1094
    +class="cmti-10">1116
    \glslongextraDescNameHeader  1095
    +class="cmti-10">1117
    \glslongextraDescNameTabularFooter  1096
    +class="cmti-10">1118
    \glslongextraDescNameTabularHeader  1097
    +class="cmti-10">1119
    \glslongextraDescSymNameHeader  1098
    +class="cmti-10">1120
    \glslongextraDescSymNameTabularFooter  1099
    +class="cmti-10">1121
    \glslongextraDescSymNameTabularHeader  1100
    +class="cmti-10">1122
    \glslongextraGroupHeading  1101
    +class="cmti-10">1123
    \glslongextraHeaderFmt  1102
    +class="cmti-10">1124
    \glslongextraLocationAlign  1103
    +class="cmti-10">1125
    \glslongextraLocationDescNameHeader  1104
    +class="cmti-10">1126
    \glslongextraLocationDescNameTabularFooter  1105
    +class="cmti-10">1127
    \glslongextraLocationDescNameTabularHeader  1106
    +class="cmti-10">1128
    \glslongextraLocationDescSymNameHeader  1107
    +class="cmti-10">1129
    \glslongextraLocationDescSymNameTabularFooter  1108
    +class="cmti-10">1130
    \glslongextraLocationDescSymNameTabularHeader  1109
    +class="cmti-10">1131
    \glslongextraLocationFmt  1110, 1132, 1111
    +class="cmti-10">1133
    \glslongextraLocationSymDescNameHeader  1112
    +class="cmti-10">1134
    \glslongextraLocationSymDescNameTabularFooter  1113
    +class="cmti-10">1135
    \glslongextraLocationSymDescNameTabularHeader  1114
    +class="cmti-10">1136
    \glslongextraLocSetDescWidth  1115
    +class="cmti-10">1137
    \glslongextraNameAlign  1116
    +class="cmti-10">1138
    \glslongextraNameDescHeader  1117
    +class="cmti-10">1139
    \glslongextraNameDescLocationHeader  1118
    +class="cmti-10">1140
    \glslongextraNameDescLocationTabularFooter  1119
    +class="cmti-10">1141
    \glslongextraNameDescLocationTabularHeader  1120
    +class="cmti-10">1142
    \glslongextraNameDescSymHeader  1121
    +class="cmti-10">1143
    \glslongextraNameDescSymLocationHeader  1122
    +class="cmti-10">1144
    \glslongextraNameDescSymLocationTabularFooter  1123
    +class="cmti-10">1145
    \glslongextraNameDescSymLocationTabularHeader  1124
    +class="cmti-10">1146
    \glslongextraNameDescSymTabularFooter  1125
    +class="cmti-10">1147
    \glslongextraNameDescSymTabularHeader  1126
    +class="cmti-10">1148
    \glslongextraNameDescTabularFooter  1127
    +class="cmti-10">1149
    \glslongextraNameDescTabularHeader  1128
    +class="cmti-10">1150
    \glslongextraNameFmt  1129
    +class="cmti-10">1151
    \glslongextraNameSymDescHeader  1130
    +class="cmti-10">1152
    + + + \glslongextraNameSymDescLocationHeader  1131
    +class="cmti-10">1153
    \glslongextraNameSymDescLocationTabularFooter  1132
    +class="cmti-10">1154
    \glslongextraNameSymDescLocationTabularHeader  1133
    +class="cmti-10">1155
    \glslongextraNameSymDescTabularFooter  1134
    +class="cmti-10">1156
    \glslongextraNameSymDescTabularHeader  1135
    - - - +class="cmti-10">1157
    \glslongextraSetDescWidth  1136
    +class="cmti-10">1158
    \glslongextraSetWidest  1137
    +class="cmti-10">1159
    \glslongextraSubDescFmt  1138
    +class="cmti-10">1160
    \glslongextraSubNameFmt  1139
    +class="cmti-10">1161
    \glslongextraSubSymbolFmt  1140
    +class="cmti-10">1162
    \glslongextraSymbolAlign  1141
    +class="cmti-10">1163
    \glslongextraSymbolFmt  1142
    +class="cmti-10">1164
    \glslongextraSymDescNameHeader  1143
    +class="cmti-10">1165
    \glslongextraSymDescNameTabularFooter  1144
    +class="cmti-10">1166
    \glslongextraSymDescNameTabularHeader  1145
    +class="cmti-10">1167
    \glslongextraSymLocSetDescWidth  1146
    +class="cmti-10">1168
    \glslongextraSymSetDescWidth  1147
    +class="cmti-10">1169
    \glslongextraTabularVAlign  1148
    +class="cmti-10">1170
    \glslongextraUpdateWidest  1149
    +class="cmti-10">1171
    \glslongextraUpdateWidestChild  1150
    +class="cmti-10">1172
    \GlsLongExtraUseTabulartrue  1151
    +class="cmti-10">1173
    \glslongfont  1152
    +class="cmti-10">1174
    \glslongfootnotefont  1153
    +class="cmti-10">1175
    \glslonghyphenfont  1154
    +class="cmti-10">1176
    \glslongonlyfont  1155
    +class="cmti-10">1177
    \glslongpltok  1156
    +class="cmti-10">1178
    \glslongtok  1157
    +class="cmti-10">1179
    \glslonguserfont  1158
    +class="cmti-10">1180
    \glsnoidxdisplayloc  1159
    +class="cmti-10">1181
    \glspdffmtfull  1160
    +class="cmti-10">1182
    \glspdffmtfullpl  1161
    +class="cmti-10">1183
    \glsps  1162
    +class="cmti-10">1184
    \glspt  1163
    +class="cmti-10">1185
    \glsrenewcommand  1164
    +class="cmti-10">1186
    \glsseeitemformat  1165
    +href="glossaries-extra-manual.html#dx1-8031" >1187
    \glssetattribute  1166
    +class="cmti-10">1188
    \glssetcategoryattribute  1167
    +class="cmti-10">1189
    \glssetregularcategory  1168
    +class="cmti-10">1190
    \glsshortpltok  1169
    +class="cmti-10">1191
    \glsshorttok  1170
    +class="cmti-10">1192
    \glstopicAssignSubIndent  1171
    +href="glossaries-extra-manual.html#dx1-23032" >1193
    \glstopicAssignWidest  1172
    +href="glossaries-extra-manual.html#dx1-23033" >1194
    \glstopicCols  1173
    +class="cmti-10">1195
    \glstopicColsEnv  1174
    +class="cmti-10">1196
    \glstopicDesc  1175
    +href="glossaries-extra-manual.html#dx1-23029" >1197
    \glstopicGroupHeading  1176
    -\glstopicInit  1177
    +href="glossaries-extra-manual.html#dx1-23021" >1198
    + + + \glstopicItem  \glstopicInit  1178
    +class="cmti-10">1199
    +\glstopicItem  1200
    \glstopicLoc  1179
    +href="glossaries-extra-manual.html#dx1-23031" >1201
    \glstopicMarker  1180
    +href="glossaries-extra-manual.html#dx1-23025" >1202
    \glstopicMidSkip  1181
    - - - +href="glossaries-extra-manual.html#dx1-23028" >1203
    \glstopicParIndent  1182
    +class="cmti-10">1204
    \glstopicPostSkip  1183
    +href="glossaries-extra-manual.html#dx1-23030" >1205
    \glstopicPreSkip  1184
    +href="glossaries-extra-manual.html#dx1-23024" >1206
    \glstopicSubIndent  1185
    +class="cmti-10">1207
    \glstopicSubItem  1186
    +href="glossaries-extra-manual.html#dx1-23034" >1208
    \glstopicSubItemBox  1187
    +href="glossaries-extra-manual.html#dx1-23037" >1209
    +\glstopicSubItemParIndent  1210
    \glstopicSubItemSep  1188
    +href="glossaries-extra-manual.html#dx1-23036" >1211
    \glstopicSubLoc  1189
    +href="glossaries-extra-manual.html#dx1-23039" >1212
    \glstopicSubNameFont  1190
    +href="glossaries-extra-manual.html#dx1-23035" >1213
    \glstopicSubPreLocSep  1191
    +href="glossaries-extra-manual.html#dx1-23038" >1214
    \glstopicTitle  1192
    +href="glossaries-extra-manual.html#dx1-23026" >1215
    \glstopicTitleFont  1193
    +href="glossaries-extra-manual.html#dx1-23027" >1216
    \glstreechilddesc  1194
    +href="glossaries-extra-manual.html#dx1-19069" >1217
    \glstreeChildDescLoc  1195
    +href="glossaries-extra-manual.html#dx1-19072" >1218
    +\glstreechildpredesc  1219
    \glstreechildprelocation  1196
    +href="glossaries-extra-manual.html#dx1-19058" >1220
    \glstreechildsymbol  1197
    +href="glossaries-extra-manual.html#dx1-19070" >1221
    \glstreedefaultnamefmt  1198
    +class="cmti-10">1222
    \glstreedesc  1199
    +href="glossaries-extra-manual.html#dx1-19067" >1223
    \glstreeDescLoc  1200
    +href="glossaries-extra-manual.html#dx1-19071" >1224
    \glstreegroupskip  1201
    +class="cmti-10">1225
    \glstreeheadergroupskip  1202
    +class="cmti-10">1226
    \glstreeNoDescSymbolPreLocation  1203
    +href="glossaries-extra-manual.html#dx1-19073" >1227
    \glstreenonamechilddesc  1204
    +href="glossaries-extra-manual.html#dx1-19063" >1228
    \glstreenonamedesc  1205
    +href="glossaries-extra-manual.html#dx1-19059" >1229
    \glstreenonamesymbol  1206
    +href="glossaries-extra-manual.html#dx1-19061" >1230
    +\glstreepredesc  1231
    \glstreePreHeader  1207
    +class="cmti-10">1232
    \glstreeprelocation  1208
    +href="glossaries-extra-manual.html#dx1-19057" >1233
    \glstreesymbol  1209
    +href="glossaries-extra-manual.html#dx1-19068" >1234
    \glsupdatewidest  1210
    +href="glossaries-extra-manual.html#dx1-19081" >1235
    \glsuseabbrvfont  1211
    +class="cmti-10">1236
    \glsuselongfont  1212
    +class="cmti-10">1237
    \glsuserdescription  1213
    +class="cmti-10">1238
    \Glsxtr  1214
    +class="cmti-10">1239
    \glsxtr  1215
    +class="cmti-10">1240
    \glsxtrabbreviationfont  1216
    +class="cmti-10">1241
    \glsxtrabbrvfootnote  1217
    +class="cmti-10">1242
    \glsxtrabbrvpluralsuffix  1218, 1243, 1219
    +class="cmti-10">1244
    \glsxtractivatenopost  1220
    +class="cmti-10">1245
    + + + \glsxtraddallcrossrefs  1221
    +href="glossaries-extra-manual.html#dx1-8005" >1246
    \glsxtraddlabelprefix  1222
    +class="cmti-10">1247
    \glsxtralias  1223
    +class="cmti-10">1248
    \glsxtrAltTreeIndent  1224
    +href="glossaries-extra-manual.html#dx1-19113" >1249
    \glsxtralttreeInit  1225
    +href="glossaries-extra-manual.html#dx1-19112" >1250
    \glsxtralttreeSubSymbolDescLocation  1226
    +href="glossaries-extra-manual.html#dx1-19110" >1251
    \glsxtralttreeSymbolDescLocation  1227
    +href="glossaries-extra-manual.html#dx1-19109" >1252
    \GlsXtrAutoAddOnFormat  1228
    - - - +class="cmti-10">1253
    \glsxtrautoindex  1229
    +class="cmti-10">1254
    \glsxtrautoindexassignsort  1230
    +class="cmti-10">1255
    \glsxtrautoindexentry  1231
    +class="cmti-10">1256
    \glsxtrautoindexesc  1232
    +class="cmti-10">1257
    \glsxtrBasicDigitrules  1233
    +class="cmti-10">1258
    \GlsXtrBibTeXEntryAliases  1234
    +class="cmti-10">1259
    \glsxtrbookindexatendgroup  1235
    +class="cmti-10">1260
    \glsxtrbookindexbetween  1236
    +class="cmti-10">1261
    \glsxtrbookindexbookmark  1237
    +class="cmti-10">1262
    \glsxtrbookindexcols  1238
    +class="cmti-10">1263
    \glsxtrbookindexcolspread  1239
    +class="cmti-10">1264
    \glsxtrbookindexfirstmark  1240
    +class="cmti-10">1265
    \glsxtrbookindexfirstmarkfmt  1241
    +class="cmti-10">1266
    \glsxtrbookindexformatheader  1242
    +class="cmti-10">1267
    \glsxtrbookindexlastmark  1243
    +class="cmti-10">1268
    \glsxtrbookindexlastmarkfmt  1244
    +class="cmti-10">1269
    \glsxtrbookindexlocation  1245
    +class="cmti-10">1270
    \glsxtrbookindexmarkentry  1246
    +class="cmti-10">1271
    \glsxtrbookindexmulticolsenv  1247
    +class="cmti-10">1272
    \glsxtrbookindexname  1248
    +class="cmti-10">1273
    \glsxtrbookindexparentchildsep  1249
    +class="cmti-10">1274
    \glsxtrbookindexparentsubchildsep  1250
    +class="cmti-10">1275
    \glsxtrbookindexprelocation  1251
    +class="cmti-10">1276
    \glsxtrbookindexsubatendgroup  1252
    +class="cmti-10">1277
    \glsxtrbookindexsubbetween  1253
    +class="cmti-10">1278
    \glsxtrbookindexsublocation  1254
    +class="cmti-10">1279
    \glsxtrbookindexsubname  1255
    +class="cmti-10">1280
    \glsxtrbookindexsubprelocation  1256
    +class="cmti-10">1281
    \glsxtrbookindexsubsubatendgroup  1257
    +class="cmti-10">1282
    \glsxtrbookindexsubsubbetween  1258
    +class="cmti-10">1283
    \glsxtrchecknohyperfirst  1259
    +class="cmti-10">1284
    \glsxtrclearlabelprefixes  1260
    +class="cmti-10">1285
    \glsxtrcombiningdiacriticIIIrules  1261
    +class="cmti-10">1286
    \glsxtrcombiningdiacriticIIrules  1262
    +class="cmti-10">1287
    \glsxtrcombiningdiacriticIrules  1263
    +class="cmti-10">1288
    \glsxtrcombiningdiacriticIVrules  1264
    +class="cmti-10">1289
    \glsxtrcombiningdiacriticrules  1265
    +class="cmti-10">1290
    \glsxtrcontrolrules  1266
    +class="cmti-10">1291
    + + + \glsxtrcopytoglossary  1267
    +class="cmti-10">1292
    \glsxtrcurrencyrules  1268
    +class="cmti-10">1293
    \GlsXtrDefaultResourceOptions  1269
    +class="cmti-10">1294
    \glsxtrdeffield  1270
    +class="cmti-10">1295
    \glsxtrdetoklocation  1271
    +class="cmti-10">1296
    \glsxtrdigitrules  1272
    +class="cmti-10">1297
    \GlsXtrDiscardUnsetBuffering  1273
    +class="cmti-10">1298
    \glsxtrdisplayendloc  1274
    - - - +class="cmti-10">1299
    \glsxtrdisplayendlochook  1275
    +class="cmti-10">1300
    \glsxtrdisplaylocnameref  1276
    +class="cmti-10">1301
    \glsxtrdisplaysingleloc  1277
    +class="cmti-10">1302
    \glsxtrdisplaystartloc  1278
    +class="cmti-10">1303
    \glsxtrdisplaysupploc  1279
    +class="cmti-10">1304
    \glsxtrdoautoindexname  1280
    +class="cmti-10">1305
    \glsxtrdowrglossaryhook  1281
    +class="cmti-10">1306
    \glsxtredeffield  1282
    +class="cmti-10">1307
    \glsxtremsuffix  1283
    +class="cmti-10">1308
    \GlsXtrEnableEntryCounting  1284
    +class="cmti-10">1309
    \GlsXtrEnableEntryUnitCounting  1285
    +class="cmti-10">1310
    \GlsXtrEnableIndexFormatOverride  1286
    +class="cmti-10">1311
    \GlsXtrEnableInitialTagging  1287
    +class="cmti-10">1312
    \GlsXtrEnableLinkCounting  1288
    +class="cmti-10">1313
    \GlsXtrEnableOnTheFly  1289
    +class="cmti-10">1314
    \GlsXtrEnablePreLocationTag  1290
    +class="cmti-10">1315
    \glsxtrenablerecordcount  1291
    +class="cmti-10">1316
    \glsxtrendfor  1292
    +class="cmti-10">1317
    \glsxtrentryfmt  1293
    +class="cmti-10">1318
    \GlsXtrExpandedFmt  1294
    +class="cmti-10">1319
    \glsxtrfielddolistloop  1295
    +class="cmti-10">1320
    \glsxtrfieldforlistloop  1296
    +class="cmti-10">1321
    \glsxtrfieldformatcsvlist  1297
    +class="cmti-10">1322
    \glsxtrfieldformatlist  1298
    +class="cmti-10">1323
    \glsxtrfieldifinlist  1299
    +class="cmti-10">1324
    \glsxtrfieldlistadd  1300
    +class="cmti-10">1325
    \glsxtrfieldlisteadd  1301
    +class="cmti-10">1326
    \glsxtrfieldlistgadd  1302
    +class="cmti-10">1327
    \glsxtrfieldlistxadd  1303
    +class="cmti-10">1328
    \glsxtrfieldtitlecasecs  1304
    +class="cmti-10">1329
    \glsxtrfieldxifinlist  1305
    +class="cmti-10">1330
    \glsxtrfmt  1306
    +class="cmti-10">1331
    \glsxtrfmt*  1307
    +class="cmti-10">1332
    \GlsXtrFmtDefaultOptions  1308
    +class="cmti-10">1333
    \glsxtrfmtdisplay  1309
    +class="cmti-10">1334
    \glsxtrfmtexternalnameref  1310
    +class="cmti-10">1335
    \GlsXtrFmtField  1311
    +class="cmti-10">1336
    \glsxtrfmtinternalnameref  1312
    +class="cmti-10">1337
    + + + \glsxtrfootnotedescname  1313
    +class="cmti-10">1338
    \glsxtrfootnotedescsort  1314
    +class="cmti-10">1339
    \glsxtrfootnotename  1315
    +class="cmti-10">1340
    \glsxtrforcsvfield  1316
    +class="cmti-10">1341
    \GlsXtrForeignText  1317
    +class="cmti-10">1342
    \GlsXtrForeignTextField  1318
    +class="cmti-10">1343
    \GlsXtrFormatLocationList  1319
    +class="cmti-10">1344
    \GlsXtrForUnsetBufferedList  1320
    - - - +class="cmti-10">1345
    \glsxtrfractionrules  1321
    +class="cmti-10">1346
    \GLSxtrfull  1322
    +class="cmti-10">1347
    \Glsxtrfull  1323
    +class="cmti-10">1348
    \glsxtrfull  1324
    +class="cmti-10">1349
    \Glsxtrfullformat  1325
    +class="cmti-10">1350
    \glsxtrfullformat  1326
    +class="cmti-10">1351
    \GLSxtrfullpl  1327
    +class="cmti-10">1352
    \Glsxtrfullpl  1328
    +class="cmti-10">1353
    \glsxtrfullpl  1329
    +class="cmti-10">1354
    \Glsxtrfullplformat  1330
    +class="cmti-10">1355
    \glsxtrfullplformat  1331
    +class="cmti-10">1356
    \glsxtrfullsep  1332
    +class="cmti-10">1357
    \glsxtrGeneralLatinIIIrules  1333
    +class="cmti-10">1358
    \glsxtrGeneralLatinIIrules  1334
    +class="cmti-10">1359
    \glsxtrGeneralLatinIrules  1335
    +class="cmti-10">1360
    \glsxtrGeneralLatinIVrules  1336
    +class="cmti-10">1361
    \glsxtrGeneralLatinVIIIrules  1337
    +class="cmti-10">1362
    \glsxtrGeneralLatinVIIrules  1338
    +class="cmti-10">1363
    \glsxtrGeneralLatinVIrules  1339
    +class="cmti-10">1364
    \glsxtrGeneralLatinVrules  1340
    +class="cmti-10">1365
    \glsxtrgeneralpuncIIrules  1341
    +class="cmti-10">1366
    \glsxtrgeneralpuncIrules  1342
    +class="cmti-10">1367
    \glsxtrgeneralpuncrules  1343
    +class="cmti-10">1368
    \glsxtrglossentry  1344
    +class="cmti-10">1369
    \glsxtrglossentryother  1345
    +class="cmti-10">1370
    \glsxtrgroupfield  1346
    +class="cmti-10">1371
    \GLSXTRhiername  1347
    +href="glossaries-extra-manual.html#dx1-8051" >1372
    \GLSxtrhiername  1348
    +href="glossaries-extra-manual.html#dx1-8050" >1373
    \GlsXtrhiername  1349
    +href="glossaries-extra-manual.html#dx1-8049" >1374
    \Glsxtrhiername  1350
    +href="glossaries-extra-manual.html#dx1-8048" >1375
    \glsxtrhiername  1351
    +href="glossaries-extra-manual.html#dx1-8041" >1376
    \glsxtrhiernamesep  1352
    +href="glossaries-extra-manual.html#dx1-8047" >1377
    \glsxtrhyphenrules  1353
    +class="cmti-10">1378
    \glsxtrhyphensuffix  1354
    +class="cmti-10">1379
    \glsxtridentifyglslike  1355
    +class="cmti-10">1380
    \glsxtrifcounttrigger  1356
    +class="cmti-10">1381
    \glsxtrifcustomdiscardperiod  1357
    +class="cmti-10">1382
    \GlsXtrIfFieldCmpNum  1358
    +class="cmti-10">1383
    + + + \GlsXtrIfFieldEqNum  1359
    +class="cmti-10">1384
    \GlsXtrIfFieldEqStr  1360
    +class="cmti-10">1385
    \GlsXtrIfFieldEqXpStr  1361
    +class="cmti-10">1386
    \GlsXtrIfFieldNonZero  1362
    +class="cmti-10">1387
    \GlsXtrIfFieldUndef  1363
    +class="cmti-10">1388
    \GlsXtrIfFieldValueInCsvList  1364
    +class="cmti-10">1389
    \glsxtrifhasfield  1365
    +class="cmti-10">1390
    \glsxtrifhasfield*  1366
    - - - +class="cmti-10">1391
    \GlsXtrIfHasNonZeroChildCount  1367
    +class="cmti-10">1392
    \glsxtrifinlabelprefixlist  1368
    +class="cmti-10">1393
    \glsxtrifkeydefined  1369
    +class="cmti-10">1394
    \glsxtriflabelinlist  1370
    +class="cmti-10">1395
    \GlsXtrIfLinkCounterDef  1371
    +class="cmti-10">1396
    \glsxtrifrecordtrigger  1372
    +class="cmti-10">1397
    \GlsXtrIfUnusedOrUndefined  1373
    +class="cmti-10">1398
    \glsxtrifwasfirstuse  1374
    +class="cmti-10">1399
    \GlsXtrIfXpFieldEqXpStr  1375
    +class="cmti-10">1400
    \glsxtrinclinkcounter  1376
    +class="cmti-10">1401
    \glsxtrindexaliased  1377
    +class="cmti-10">1402
    \GlsXtrIndexCounterLink  1378
    +class="cmti-10">1403
    \glsxtrindexseealso  1379
    +href="glossaries-extra-manual.html#dx1-8074" >1404
    \glsxtrinitwrgloss  1380
    +class="cmti-10">1405
    \Glsxtrinlinefullformat  1381
    +class="cmti-10">1406
    \glsxtrinlinefullformat  1382
    +class="cmti-10">1407
    \Glsxtrinlinefullplformat  1383
    +class="cmti-10">1408
    \glsxtrinlinefullplformat  1384
    +class="cmti-10">1409
    \glsxtrinsertinsidetrue  1385
    +class="cmti-10">1410
    \glsxtrLatinA  1386
    +class="cmti-10">1411
    \glsxtrLatinAA  1387
    +class="cmti-10">1412
    \glsxtrLatinAELigature  1388
    +class="cmti-10">1413
    \glsxtrLatinE  1389
    +class="cmti-10">1414
    \glsxtrLatinEszettSs  1390
    +class="cmti-10">1415
    \glsxtrLatinEszettSz  1391
    +class="cmti-10">1416
    \glsxtrLatinEth  1392
    +class="cmti-10">1417
    \glsxtrLatinH  1393
    +class="cmti-10">1418
    \glsxtrLatinI  1394
    +class="cmti-10">1419
    \glsxtrLatinInsularG  1395
    +class="cmti-10">1420
    \glsxtrLatinK  1396
    +class="cmti-10">1421
    \glsxtrLatinL  1397
    +class="cmti-10">1422
    \glsxtrLatinLslash  1398
    +class="cmti-10">1423
    \glsxtrLatinM  1399
    +class="cmti-10">1424
    \glsxtrLatinN  1400
    +class="cmti-10">1425
    \glsxtrLatinO  1401
    +class="cmti-10">1426
    \glsxtrLatinOELigature  1402
    +class="cmti-10">1427
    \glsxtrLatinOslash  1403
    +class="cmti-10">1428
    \glsxtrLatinP  1404
    +class="cmti-10">1429
    + + + \glsxtrLatinS  1405
    +class="cmti-10">1430
    \glsxtrLatinSchwa  1406
    +class="cmti-10">1431
    \glsxtrLatinT  1407
    +class="cmti-10">1432
    \glsxtrLatinThorn  1408
    +class="cmti-10">1433
    \glsxtrLatinWynn  1409
    +class="cmti-10">1434
    \glsxtrLatinX  1410
    +class="cmti-10">1435
    \GlsXtrLetField  1411
    +class="cmti-10">1436
    \GlsXtrLetFieldToField  1412
    - - - +class="cmti-10">1437
    \GlsXtrLinkCounterName  1413
    +class="cmti-10">1438
    \GlsXtrLinkCounterValue  1414
    +class="cmti-10">1439
    \GlsXtrLoadResources  1415
    +class="cmti-10">1440
    \glsxtrlocalsetgrouptitle  1416
    +class="cmti-10">1441
    \GlsXtrLocationField  1417
    +class="cmti-10">1442
    \GlsXtrLocationRecordCount  1418
    +class="cmti-10">1443
    \glsxtrlocrangefmt  1419
    +class="cmti-10">1444
    \Glsxtrlong  1420, 1445, 1421
    +class="cmti-10">1446
    \glsxtrlong  1422
    +class="cmti-10">1447
    \glsxtrlonghyphen  1423
    +class="cmti-10">1448
    \glsxtrlonghyphenshort  1424
    +class="cmti-10">1449
    \glsxtrlongnoshortdescname  1425
    +class="cmti-10">1450
    \glsxtrlongnoshortname  1426
    +class="cmti-10">1451
    \GLSxtrlongpl  1427
    +class="cmti-10">1452
    \Glsxtrlongpl  1428
    +class="cmti-10">1453
    \glsxtrlongpl  1429
    +class="cmti-10">1454
    \glsxtrlongshortdescname  1430
    +class="cmti-10">1455
    \glsxtrlongshortdescsort  1431
    +class="cmti-10">1456
    \glsxtrlongshortname  1432
    +class="cmti-10">1457
    \glsxtrlongshortuserdescname  1433
    +class="cmti-10">1458
    \glsxtrMathGreekIIrules  1434
    +class="cmti-10">1459
    \glsxtrMathGreekIrules  1435
    +class="cmti-10">1460
    \glsxtrMathItalicGreekIIrules  1436
    +class="cmti-10">1461
    \glsxtrMathItalicGreekIrules  1437
    +class="cmti-10">1462
    \glsxtrMathItalicLowerGreekIIrules  1438
    +class="cmti-10">1463
    \glsxtrMathItalicLowerGreekIrules  1439
    +class="cmti-10">1464
    \glsxtrMathItalicNabla  1440
    +class="cmti-10">1465
    \glsxtrMathItalicPartial  1441
    +class="cmti-10">1466
    \glsxtrMathItalicUpperGreekIIrules  1442
    +class="cmti-10">1467
    \glsxtrMathItalicUpperGreekIrules  1443
    +class="cmti-10">1468
    \glsxtrMathUpGreekIIrules  1444
    +class="cmti-10">1469
    \glsxtrMathUpGreekIrules  1445
    +class="cmti-10">1470
    \glsxtrmultisupplocation  1446
    +class="cmti-10">1471
    \glsxtrnameloclink  1447
    +class="cmti-10">1472
    \glsxtrnamereflink  1448
    +class="cmti-10">1473
    \glsxtrnewgls  1449
    +class="cmti-10">1474
    \glsxtrnewGLSlike  1450
    +class="cmti-10">1475
    \glsxtrnewglslike  1451
    +class="cmti-10">1476
    + + + \glsxtrnewnumber  1452
    +href="glossaries-extra-manual.html#dx1-4241" >1477
    \glsxtrnewrgls  1453
    +class="cmti-10">1478
    \glsxtrnewrGLSlike  1454
    +class="cmti-10">1479
    \glsxtrnewrglslike  1455
    +class="cmti-10">1480
    \glsxtrnewsymbol  1456
    +href="glossaries-extra-manual.html#dx1-4235" >1481
    \GlsXtrNoGlsWarningAutoMake  1457
    +class="cmti-10">1482
    \GlsXtrNoGlsWarningBuildInfo  1458
    +class="cmti-10">1483
    \GlsXtrNoGlsWarningCheckFile  1459
    - - - +class="cmti-10">1484
    \GlsXtrNoGlsWarningEmptyMain  1460
    +class="cmti-10">1485
    \GlsXtrNoGlsWarningEmptyNotMain  1461
    +class="cmti-10">1486
    \GlsXtrNoGlsWarningEmptyStart  1462
    +class="cmti-10">1487
    \GlsXtrNoGlsWarningHead  1463
    +class="cmti-10">1488
    \GlsXtrNoGlsWarningMisMatch  1464
    +class="cmti-10">1489
    \GlsXtrNoGlsWarningNoOut  1465
    +class="cmti-10">1490
    \GlsXtrNoGlsWarningTail  1466
    +class="cmti-10">1491
    \glsxtrnonprintablerules  1467
    +class="cmti-10">1492
    \glsxtrnopostpunc  1468
    +class="cmti-10">1493
    \glsxtronlydescname  1469
    +class="cmti-10">1494
    \glsxtronlyname  1470
    +class="cmti-10">1495
    \glsxtronlysuffix  1471
    +class="cmti-10">1496
    \glsxtrorglong  1472
    +class="cmti-10">1497
    \glsxtrorgshort  1473
    +class="cmti-10">1498
    \GLSxtrp  1474
    +class="cmti-10">1499
    \Glsxtrp  1475
    +class="cmti-10">1500
    \glsxtrp  1476
    +class="cmti-10">1501
    \glsxtrpageref  1477
    +class="cmti-10">1502
    \glsxtrparen  1478
    +class="cmti-10">1503
    \glsxtrpdfentryfmt  1479
    +class="cmti-10">1504
    \Glsxtrpl  1480
    +class="cmti-10">1505
    \glsxtrpl  1481
    +class="cmti-10">1506
    \glsxtrpostdescription  1482
    +class="cmti-10">1507
    \glsxtrposthyphenlong  1483
    +class="cmti-10">1508
    \glsxtrposthyphenshort  1484
    +class="cmti-10">1509
    \glsxtrpostlink  1485
    +class="cmti-10">1510
    \glsxtrpostlinkAddDescOnFirstUse  1486
    +class="cmti-10">1511
    \glsxtrpostlinkAddSymbolDescOnFirstUse  1487
    +class="cmti-10">1512
    \glsxtrpostlinkAddSymbolOnFirstUse  1488
    +class="cmti-10">1513
    \glsxtrpostlinkendsentence  1489
    +class="cmti-10">1514
    \glsxtrpostlinkhook  1490
    +class="cmti-10">1515
    \glsxtrpostlongdescription  1491
    +class="cmti-10">1516
    \glsxtrpostnamehook  1492
    +class="cmti-10">1517
    \GlsXtrPostNewAbbreviation  1493
    +class="cmti-10">1518
    \glsxtrprelocation  1494
    +class="cmti-10">1519
    \glsxtrprependlabelprefix  1495
    +class="cmti-10">1520
    \GlsXtrProvideBibTeXFields  1496
    +class="cmti-10">1521
    \glsxtrprovidecommand  1497
    +class="cmti-10">1522
    + + + \glsxtrprovidestoragekey  1498
    +class="cmti-10">1523
    \GlsXtrRecordCount  1499
    +class="cmti-10">1524
    \GlsXtrRecordCounter  1500
    +class="cmti-10">1525
    \glsxtrrecordtriggervalue  1501
    +class="cmti-10">1526
    \glsxtrregularfont  1502
    +class="cmti-10">1527
    \glsxtrresourcefile  1503
    +class="cmti-10">1528
    \glsxtrresourceinit  1504
    +class="cmti-10">1529
    \glsxtrrestorepostpunc  1505
    - - - +class="cmti-10">1530
    \glsxtrRevertMarks  1506
    +class="cmti-10">1531
    \glsxtrRevertTocMarks  1507
    +class="cmti-10">1532
    \glsxtrscsuffix  1508
    +class="cmti-10">1533
    \glsxtrseealsolabels  1509
    +href="glossaries-extra-manual.html#dx1-8068" >1534
    \glsxtrseelist  1510
    +href="glossaries-extra-manual.html#dx1-8072" >1535
    \GlsXtrSetActualChar  1511
    +class="cmti-10">1536
    \glsxtrsetaliasnoindex  1512
    +class="cmti-10">1537
    \GlsXtrSetAltModifier  1513
    +class="cmti-10">1538
    \glsxtrsetcategory  1514
    +class="cmti-10">1539
    \glsxtrsetcategoryforall  1515
    +class="cmti-10">1540
    \GlsXtrSetDefaultGlsOpts  1516
    +class="cmti-10">1541
    \GlsXtrSetEncapChar  1517
    +class="cmti-10">1542
    \GlsXtrSetEscChar  1518
    +class="cmti-10">1543
    \GlsXtrSetField  1519
    +class="cmti-10">1544
    \glsxtrsetfieldifexists  1520
    +class="cmti-10">1545
    \glsxtrsetglossarylabel  1521
    +class="cmti-10">1546
    \glsxtrsetgrouptitle  1522
    +class="cmti-10">1547
    \GlsXtrSetLevelChar  1523
    +class="cmti-10">1548
    \glsxtrsetpopts  1524
    +class="cmti-10">1549
    \GlsXtrSetRecordCountAttribute  1525
    +class="cmti-10">1550
    \glsxtrSetWidest  1526
    +class="cmti-10">1551
    \glsxtrSetWidestFallback  1527
    +class="cmti-10">1552
    \Glsxtrshort  1528, 1553, 1529
    +class="cmti-10">1554
    \glsxtrshort  1530
    +class="cmti-10">1555
    \glsxtrshortdescname  1531
    +class="cmti-10">1556
    \glsxtrshorthyphenlong  1532
    +class="cmti-10">1557
    \glsxtrshortlongdescname  1533
    +class="cmti-10">1558
    \glsxtrshortlongname  1534, 1559, 1535
    +class="cmti-10">1560
    \glsxtrshortlonguserdescname  1536
    +class="cmti-10">1561
    \glsxtrshortnolongname  1537
    +class="cmti-10">1562
    \GLSxtrshortpl  1538
    +class="cmti-10">1563
    \Glsxtrshortpl  1539
    +class="cmti-10">1564
    \glsxtrshortpl  1540
    +class="cmti-10">1565
    \glsxtrsmsuffix  1541
    +class="cmti-10">1566
    \glsxtrspacerules  1542
    +class="cmti-10">1567
    \GlsXtrStandaloneEntryName  1543
    +class="cmti-10">1568
    \GlsXtrStandaloneEntryOther  1544
    +class="cmti-10">1569
    \GlsXtrStandaloneGlossaryType  1545
    +class="cmti-10">1570
    + + + \GlsXtrStartUnsetBuffering  1546
    +class="cmti-10">1571
    \GlsXtrStopUnsetBuffering  1547
    +class="cmti-10">1572
    \glsxtrSubScriptDigitrules  1548
    +class="cmti-10">1573
    \Glsxtrsubsequentfmt  1549
    +class="cmti-10">1574
    \glsxtrsubsequentfmt  1550
    +class="cmti-10">1575
    \Glsxtrsubsequentplfmt  1551
    +class="cmti-10">1576
    \glsxtrsubsequentplfmt  1552
    +class="cmti-10">1577
    \glsxtrSuperScriptDigitrules  1553
    - - - +class="cmti-10">1578
    \glsxtrtagfont  1554
    +class="cmti-10">1579
    \GlsXtrTheLinkCounter  1555
    +class="cmti-10">1580
    \GlsXtrTotalRecordCount  1556
    +class="cmti-10">1581
    \glsxtrunsrtdo  1557
    +class="cmti-10">1582
    \GlsXtrUseAbbrStyleFmts  1558
    +class="cmti-10">1583
    \GlsXtrUseAbbrStyleSetup  1559
    +class="cmti-10">1584
    \glsxtrusealias  1560
    +href="glossaries-extra-manual.html#dx1-8066" >1585
    \GLSxtrusefield  1561
    +class="cmti-10">1586
    \Glsxtrusefield  1562
    +class="cmti-10">1587
    \glsxtrusefield  1563
    +class="cmti-10">1588
    \glsxtruserfield  1564
    +class="cmti-10">1589
    \glsxtruserparen  1565
    +class="cmti-10">1590
    \glsxtrusersuffix  1566, 1591, 1567
    +class="cmti-10">1592
    \glsxtrusesee  1568
    +href="glossaries-extra-manual.html#dx1-8015" >1593
    \glsxtruseseealso  1569
    +href="glossaries-extra-manual.html#dx1-8063" >1594
    \glsxtruseseeformat  1570, 1571
    +href="glossaries-extra-manual.html#dx1-8016" >1595, 1596
    \GlsXtrWarnDeprecatedAbbrStyle  1572
    +class="cmti-10">1597
    \GlsXtrWarning  1573
    +class="cmti-10">1598
    \glsxtrword  1574
    +class="cmti-10">1599
    \glsxtrwordsep  1575
    +class="cmti-10">1600
    \glsxtrwrglossmark  1576
    +class="cmti-10">1601

    H hyperref package  1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602
    +href="glossaries-extra-manual.html#dx1-4096" >1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627

    I inputenc package  1603
    +href="glossaries-extra-manual.html#dx1-42012" >1628

    L link-text  1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1623
    +class="cmbx-10">1648
    location list  1624, 1625, 1626, 1627, 1649, 1650, 1651, 1652, 1628
    +class="cmbx-10">1653
    \longnewglossaryentry  1629
    +class="cmti-10">1654

    M makeglossaries  1630, 1631, 1632, 1633, 1655, 1656, 1657, 1658, 1634
    +class="cmbx-10">1659
    + + + \makeglossaries  1635
    +class="cmti-10">1660
    makeglossaries-lite  1636, 1661, 1637
    +class="cmbx-10">1662
    makeglossaries-lite  1638, 1663, 1639
    +class="cmbx-10">1664
    makeidx package  1640
    +href="glossaries-extra-manual.html#dx1-8079" >1665
    makeindex  1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1662
    +class="cmbx-10">1690
    makeindex  1663, 1664, 1665, 1666, 1667
    - - - +href="glossaries-extra-manual.html#dx1-7053" >1691, 1692, 1693, 1694, 1695
    memoir class  1668
    +href="glossaries-extra-manual.html#dx1-3024" >1696, 1697
    mfirstuc package  1669, 1670, 1671
    +href="glossaries-extra-manual.html#dx1-4" >1698, 1699, 1700
    multicols package  1672
    +href="glossaries-extra-manual.html#dx1-23002" >1701

    N \newabbreviation  1673
    +class="cmti-10">1702
    \newabbreviationstyle  1674
    +class="cmti-10">1703
    \newacronym  1675
    +class="cmti-10">1704
    \newglossaryentry options
        access  1676
    +href="glossaries-extra-manual.html#dx1-35164" >1705
        alias  1677, 1678, 1679, 1680, 1681, 1682, 1683
    +href="glossaries-extra-manual.html#dx1-6008" >1706, 1707, 1708, 1709, 1710, 1711, 1712
        category  1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691
    +href="glossaries-extra-manual.html#dx1-6007" >1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720
        counter  1692
    +href="glossaries-extra-manual.html#dx1-7044" >1721
        description  1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718
    +href="glossaries-extra-manual.html#dx1-6002" >1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747
        descriptionplural  1719, 1720, 1721, 1722, 1723, 1724
    +href="glossaries-extra-manual.html#dx1-6016" >1748, 1749, 1750, 1751, 1752, 1753
        first  1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737
    +href="glossaries-extra-manual.html#dx1-9013" >1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766
        firstaccess  1738
    +href="glossaries-extra-manual.html#dx1-35171" >1767
        firstplural  1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748
    +href="glossaries-extra-manual.html#dx1-9014" >1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777
        group  1749, 1750, 1751, 1752, 1753, 1754
    +href="glossaries-extra-manual.html#dx1-15014" >1778, 1779, 1780, 1781, 1782, 1783
        location  1755, 1756, 1757, 1758, 1759
    +href="glossaries-extra-manual.html#dx1-21023" >1784, 1785, 1786, 1787, 1788
        loclist  1760, 1761, 1762, 1763
    +href="glossaries-extra-manual.html#dx1-45014" >1789, 1790, 1791, 1792
        long  1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772
    +href="glossaries-extra-manual.html#dx1-12026" >1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801
        longplural  1773, 1774, 1775, 1776, 1777, 1778
    +href="glossaries-extra-manual.html#dx1-12010" >1802, 1803, 1804, 1805, 1806, 1807
        name  1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835
    +href="glossaries-extra-manual.html#dx1-8029" >1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864
        nameshortaccess  1836, 1837
    +href="glossaries-extra-manual.html#dx1-35167" >1865, 1866
        parent  1838, 1839, 1840, 1841
    +href="glossaries-extra-manual.html#dx1-19094" >1867, 1868, 1869, 1870
        plural  1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854
    +href="glossaries-extra-manual.html#dx1-9017" >1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883
        prefix  1855
    +href="glossaries-extra-manual.html#dx1-15009" >1884
        see  1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882
    +href="glossaries-extra-manual.html#dx1-4057" >1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910
        seealso  1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893
    +href="glossaries-extra-manual.html#dx1-4058" >1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921
        short  1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909
    +href="glossaries-extra-manual.html#dx1-8046" >1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937
        shortaccess  1910, 1911, 1912, 1913, 1914
    +href="glossaries-extra-manual.html#dx1-35133" >1938, 1939, 1940, 1941, 1942
        shortplural  1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929
    +href="glossaries-extra-manual.html#dx1-12011" >1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957
        shortpluralaccess  1930, 1931, 1932, 1933
    +href="glossaries-extra-manual.html#dx1-35150" >1958, 1959, 1960, 1961
    + + +     sort  1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956
    +href="glossaries-extra-manual.html#dx1-4194" >1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984
        symbol  1957, 1958, 1959, 1960, 1961, 1962
    +href="glossaries-extra-manual.html#dx1-17013" >1985, 1986, 1987, 1988, 1989, 1990
        symbolaccess  1963
    +href="glossaries-extra-manual.html#dx1-17015" >1991
        symbolplural  1964, 1965
    +href="glossaries-extra-manual.html#dx1-60037" >1992, 1993
        text  1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980
    +href="glossaries-extra-manual.html#dx1-8028" >1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
        textaccess  1981
    +href="glossaries-extra-manual.html#dx1-35168" >2009
        type  1982, 1983, 1984, 1985, 1986
    - - - +href="glossaries-extra-manual.html#dx1-14058" >2010, 2011, 2012, 2013, 2014
        user1  1987, 1988, 1989, 1990
    +href="glossaries-extra-manual.html#dx1-17018" >2015, 2016, 2017, 2018
    number list  1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2024
    +class="cmbx-10">2052

    P package options:
        abbreviations  2025, 2026, 2027, 2028, 2029
    +href="glossaries-extra-manual.html#dx1-4215" >2053, 2054, 2055, 2056, 2057
        accsupp  2030, 2031, 2032, 2033, 2034, 2035, 2036
    +href="glossaries-extra-manual.html#dx1-4035" >2058, 2059, 2060, 2061, 2062, 2063, 2064
        acronym  2037, 2038
    +href="glossaries-extra-manual.html#dx1-4229" >2065, 2066
        acronymlists  2039, 2040
    +href="glossaries-extra-manual.html#dx1-4233" >2067, 2068
        acronyms  2041
    +href="glossaries-extra-manual.html#dx1-4245" >2069
        automake  2042, 2043
    +href="glossaries-extra-manual.html#dx1-6040" >2070, 2071
        autoseeindex  2044, 2045
    +href="glossaries-extra-manual.html#dx1-4066" >2072, 2073
            false  2046, 2047
    +href="glossaries-extra-manual.html#dx1-4059" >2074, 2075
        counter
            chapter  2048
    +href="glossaries-extra-manual.html#dx1-4098" >2076
            equation  2049
    +href="glossaries-extra-manual.html#dx1-4101" >2077
            section  2050
    +href="glossaries-extra-manual.html#dx1-4099" >2078
            wrglossary  2051
    +href="glossaries-extra-manual.html#dx1-4148" >2079
        debug  2052
    +href="glossaries-extra-manual.html#dx1-4002" >2080
            all  2053, 2054
    +href="glossaries-extra-manual.html#dx1-4005" >2081, 2082
            showtargets  2055, 2056
    +href="glossaries-extra-manual.html#dx1-4003" >2083, 2084
            showwrgloss  2057, 2058, 2059
    +href="glossaries-extra-manual.html#dx1-4004" >2085, 2086, 2087
            true  2060
    +href="glossaries-extra-manual.html#dx1-4007" >2088
        docdef  2061, 2062, 2063, 2064
    +href="glossaries-extra-manual.html#dx1-4174" >2089, 2090, 2091, 2092
    +        atom  2093
            restricted  2065, 2066, 2067, 2068
    +href="glossaries-extra-manual.html#dx1-4187" >2094, 2095, 2096, 2097
            true  2069, 2070
    +href="glossaries-extra-manual.html#dx1-4211" >2098, 2099
        docdefs  2071, 2072, 2073
    +href="glossaries-extra-manual.html#dx1-51023" >2100, 2101, 2102
            true  2074
    +href="glossaries-extra-manual.html#dx1-4186" >2103
        entrycounter  2075, 2076
    +href="glossaries-extra-manual.html#dx1-49002" >2104, 2105
        equations  2077, 2078
    +href="glossaries-extra-manual.html#dx1-4129" >2106, 2107
            true  2079
    +href="glossaries-extra-manual.html#dx1-4102" >2108
        floats  2080
    +href="glossaries-extra-manual.html#dx1-4136" >2109
        hyperfirst
            false  2081
    +href="glossaries-extra-manual.html#dx1-35030" >2110
        index  2082, 2083, 2084
    +href="glossaries-extra-manual.html#dx1-4251" >2111, 2112, 2113
    + + +     indexcounter  2085, 2086, 2087, 2088
    +href="glossaries-extra-manual.html#dx1-4097" >2114, 2115, 2116, 2117
        indexcrossrefs  2089, 2090, 2091, 2092
    +href="glossaries-extra-manual.html#dx1-4056" >2118, 2119, 2120, 2121
            false  2093
    +href="glossaries-extra-manual.html#dx1-4065" >2122
        indexonlyfirst  2094, 2095, 2096, 2097
    +href="glossaries-extra-manual.html#dx1-7004" >2123, 2124, 2125, 2126
        makeindex  2098
    +href="glossaries-extra-manual.html#dx1-45016" >2127
        nogroupskip  2099, 2100, 2101, 2102, 2103
    +href="glossaries-extra-manual.html#dx1-19014" >2128, 2129, 2130, 2131, 2132
        nomain  2104
    +href="glossaries-extra-manual.html#dx1-3039" >2133
        nomissingglstext  2105
    +href="glossaries-extra-manual.html#dx1-4214" >2134
        nonumberlist  2106, 2107, 2108, 2109, 2110
    - - - +href="glossaries-extra-manual.html#dx1-8053" >2135, 2136, 2137, 2138, 2139
        nopostdot  2111, 2112, 2113, 2114
    +href="glossaries-extra-manual.html#dx1-4022" >2140, 2141, 2142, 2143
            false  2115, 2116, 2117
    +href="glossaries-extra-manual.html#dx1-3004" >2144, 2145, 2146
            true  2118
    +href="glossaries-extra-manual.html#dx1-3003" >2147
        noredefwarn
            false  2119
    +href="glossaries-extra-manual.html#dx1-3009" >2148
            true  2120
    +href="glossaries-extra-manual.html#dx1-3006" >2149
        notree  2121
    +href="glossaries-extra-manual.html#dx1-19076" >2150
        numbers  2122, 2123, 2124
    +href="glossaries-extra-manual.html#dx1-4240" >2151, 2152, 2153
        postdot  2125, 2126, 2127
    +href="glossaries-extra-manual.html#dx1-3005" >2154, 2155, 2156
        postpunc  2128, 2129, 2130
    +href="glossaries-extra-manual.html#dx1-4018" >2157, 2158, 2159
            comma  2131
    +href="glossaries-extra-manual.html#dx1-4019" >2160
            dot  2132
    +href="glossaries-extra-manual.html#dx1-4020" >2161
            none  2133
    +href="glossaries-extra-manual.html#dx1-4021" >2162
        prefix  2134
    +href="glossaries-extra-manual.html#dx1-4033" >2163
        record  2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147
    +href="glossaries-extra-manual.html#dx1-4064" >2164, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176
            alsoindex  2148, 2149, 2150, 2151, 2152, 2153, 2154
    +class="cmss-10">hybrid  2177, 2178, 2179, 2180, 2181, 2182, 2183
            nameref  2155, 2156
    +href="glossaries-extra-manual.html#dx1-4077" >2184, 2185, 2186, 2187
            off  2157, 2158
    +href="glossaries-extra-manual.html#dx1-6035" >2188, 2189
            only  2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2168, 2169
    +href="glossaries-extra-manual.html#dx1-4069" >2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201
        savenumberlist  2170
    +href="glossaries-extra-manual.html#dx1-43016" >2202
        section
            chapter  2171
    +href="glossaries-extra-manual.html#dx1-21040" >2203
        seeautonumberlist  2172
    +href="glossaries-extra-manual.html#dx1-8054" >2204
        seenoindex  2173
    +href="glossaries-extra-manual.html#dx1-8011" >2205
            ignore  2174, 2175
    +href="glossaries-extra-manual.html#dx1-8013" >2206, 2207
            warn  2176
    +href="glossaries-extra-manual.html#dx1-51021" >2208
        shortcuts  2177, 2178, 2179
    +href="glossaries-extra-manual.html#dx1-4255" >2209, 2210, 2211
            abbr  2180, 2181
    +href="glossaries-extra-manual.html#dx1-4261" >2212, 2213
            abbreviations  2182, 2183, 2184, 2185
    +href="glossaries-extra-manual.html#dx1-4260" >2214, 2215, 2216, 2217
            ac  2186, 2187, 2188, 2189, 2190, 2191, 2192
    +href="glossaries-extra-manual.html#dx1-4258" >2218, 2219, 2220, 2221, 2222, 2223, 2224
            acro  2193, 2194
    +href="glossaries-extra-manual.html#dx1-4257" >2225, 2226
            acronyms  2195, 2196
    +href="glossaries-extra-manual.html#dx1-4256" >2227, 2228
            all  2197, 2198
    +href="glossaries-extra-manual.html#dx1-4271" >2229, 2230
            false  2199
    +href="glossaries-extra-manual.html#dx1-4277" >2231
            none  2200
    +href="glossaries-extra-manual.html#dx1-4276" >2232
            other  2201, 2202
    +href="glossaries-extra-manual.html#dx1-4262" >2233, 2234
            true  2203
    +href="glossaries-extra-manual.html#dx1-4272" >2235
    + + +     sort
            none  2204, 2205
    +href="glossaries-extra-manual.html#dx1-4093" >2236, 2237
        stylemods  2206, 2207, 2208, 2209, 2210, 2211
    +href="glossaries-extra-manual.html#dx1-4045" >2238, 2239, 2240, 2241, 2242, 2243
            all  2212
    +href="glossaries-extra-manual.html#dx1-4048" >2244
            default  2213
    +href="glossaries-extra-manual.html#dx1-4047" >2245
        subentrycounter  2214, 2215
    +href="glossaries-extra-manual.html#dx1-49003" >2246, 2247
        symbols  2216, 2217, 2218
    +href="glossaries-extra-manual.html#dx1-4234" >2248, 2249, 2250
        toc
            false  2219
    - - - +href="glossaries-extra-manual.html#dx1-3002" >2251
            true  2220
    +href="glossaries-extra-manual.html#dx1-3001" >2252
        translate
            babel  2221
    +href="glossaries-extra-manual.html#dx1-3011" >2253
            true  2222
    +href="glossaries-extra-manual.html#dx1-3013" >2254
        undefaction  2223, 2224
    +href="glossaries-extra-manual.html#dx1-4049" >2255, 2256
            error  2225, 2226, 2227
    +href="glossaries-extra-manual.html#dx1-4050" >2257, 2258, 2259
            warn  2228, 2229, 2230, 2231, 2232, 2233, 2234, 2235, 2236
    +href="glossaries-extra-manual.html#dx1-4051" >2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268
    +    writeglslabelnames  2269
    +    writeglslabels  2270
        xindy  2237, 2238
    +href="glossaries-extra-manual.html#dx1-8075" >2271, 2272
    page (counter)  2239, 2240, 2241, 2242, 2243, 2244
    +href="glossaries-extra-manual.html#dx1-4100" >2273, 2274, 2275, 2276, 2277, 2278
    polyglossia package  2245, 2246
    +href="glossaries-extra-manual.html#dx1-50083" >2279, 2280
    \pretoglossarypreamble  2247
    +class="cmti-10">2281
    \printabbreviations  2248
    +href="glossaries-extra-manual.html#dx1-4219" >2282
    \printglossary options
        label  2249, 2250
    +href="glossaries-extra-manual.html#dx1-15011" >2283, 2284
        nogroupskip  2251
    +href="glossaries-extra-manual.html#dx1-19015" >2285
        numberedsection  2252
    +href="glossaries-extra-manual.html#dx1-54038" >2286
        prefix  2253
    +href="glossaries-extra-manual.html#dx1-15008" >2287
        style  2254
    +href="glossaries-extra-manual.html#dx1-54037" >2288
        target  2255, 2256
    +href="glossaries-extra-manual.html#dx1-15006" >2289, 2290
        targetnameprefix  2257
    +href="glossaries-extra-manual.html#dx1-15007" >2291
        title  2258, 2259
    +href="glossaries-extra-manual.html#dx1-54035" >2292, 2293
        toctitle  2260
    +href="glossaries-extra-manual.html#dx1-54036" >2294
        type  2261
    +href="glossaries-extra-manual.html#dx1-54023" >2295
    \printnoidxglossary options
        sort  2262
    +href="glossaries-extra-manual.html#dx1-51024" >2296
    \printunsrtabbreviations  2263
    +href="glossaries-extra-manual.html#dx1-4221" >2297
    \printunsrtacronyms  2264
    +href="glossaries-extra-manual.html#dx1-4248" >2298
    \printunsrtglossaries  2265
    +class="cmti-10">2299
    \printunsrtglossary  2266
    +class="cmti-10">2300
    \printunsrtglossary options
        groups  2267, 2268
    +href="glossaries-extra-manual.html#dx1-15013" >2301, 2302
        leveloffset  2269
    +href="glossaries-extra-manual.html#dx1-15015" >2303
    \printunsrtglossary*  2270
    +class="cmti-10">2304
    \printunsrtglossaryentryprocesshook  2271
    +class="cmti-10">2305
    \printunsrtglossaryhandler  2272
    +class="cmti-10">2306
    + + + \printunsrtglossarypredoglossary  2273
    +class="cmti-10">2307
    \printunsrtglossaryskipentry  2274
    +class="cmti-10">2308
    \printunsrtglossaryunit  2275
    +class="cmti-10">2309
    \printunsrtglossaryunitsetup  2276
    +class="cmti-10">2310
    \printunsrtindex  2277
    +href="glossaries-extra-manual.html#dx1-4253" >2311
    \printunsrtnumbers  2278
    +href="glossaries-extra-manual.html#dx1-4243" >2312
    \printunsrtsymbols  2279
    +href="glossaries-extra-manual.html#dx1-4238" >2313
    \provideignoredglossary  2280
    +class="cmti-10">2314

    R relsizes package  2281
    - - - +href="glossaries-extra-manual.html#dx1-28052" >2315
    \RestoreAcronyms  2282
    +class="cmti-10">2316
    \rGLS  2283
    +class="cmti-10">2317
    \rGls  2284
    +class="cmti-10">2318
    \rgls  2285
    +class="cmti-10">2319
    \rGLSformat  2286
    +class="cmti-10">2320
    \rGlsformat  2287
    +class="cmti-10">2321
    \rglsformat  2288
    +class="cmti-10">2322
    \rGLSpl  2289
    +class="cmti-10">2323
    \rGlspl  2290
    +class="cmti-10">2324
    \rglspl  2291
    +class="cmti-10">2325
    \rGLSplformat  2292
    +class="cmti-10">2326
    \rGlsplformat  2293
    +class="cmti-10">2327
    \rglsplformat  2294
    +class="cmti-10">2328

    S \seealsoname  2295
    +href="glossaries-extra-manual.html#dx1-8077" >2329
    \setabbreviationstyle  2296
    +class="cmti-10">2330
    slantsc package  2297
    +href="glossaries-extra-manual.html#dx1-34009" >2331
    soul package  2298, 2299
    +href="glossaries-extra-manual.html#dx1-7024" >2332, 2333
    style package  2300
    +href="glossaries-extra-manual.html#dx1-21005" >2334
    subentrycounter package  2301
    +href="glossaries-extra-manual.html#dx1-55021" >2335

    T texindy  2302
    +href="glossaries-extra-manual.html#dx1-39007" >2336
    textcase package  2303
    +href="glossaries-extra-manual.html#dx1-7" >2337
    tracklang package  2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313
    +href="glossaries-extra-manual.html#dx1-3" >2338, 2339, 2340, 2341, 2342, 2343, 2344, 2345, 2346, 2347
    translator package  2314
    +href="glossaries-extra-manual.html#dx1-3012" >2348

    U upgreek package  2315, 2316, 2317, 2318
    +href="glossaries-extra-manual.html#dx1-46029" >2349, 2350, 2351, 2352

    W + + + wrglossary (counter)  2319, 2320, 2321, 2322, 2323
    +href="glossaries-extra-manual.html#dx1-4149" >2353, 2354, 2355, 2356, 2357

    X xfor package  2324, 2325, 2326
    +href="glossaries-extra-manual.html#dx1-8" >2358, 2359, 2360
    \xglssetwidest  2327
    +href="glossaries-extra-manual.html#dx1-19080" >2361
    \xglsupdatewidest  2328
    +href="glossaries-extra-manual.html#dx1-19084" >2362
    \xGlsXtrSetField  2329
    +class="cmti-10">2363
    xindy  2330, 2331, 2332, 2333, 2334, 2335, 2336, 2337, 2338, 2339, 2340, 2341, 2342, 2343, 2344, 2345, 2364, 2365, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2346
    - - - +class="cmbx-10">2383
    xindy  2347
    +href="glossaries-extra-manual.html#dx1-7056" >2384
    xkeyval package  2348
    +href="glossaries-extra-manual.html#dx1-6" >2385

    1.14.21 was originally intended as the last release of glossaries to incorporate new features, but a few new minor features slipped in with some bug fixes in v4.21.

    -

    2.1The descriptionpluralfield and the short form was stored in the symbol field.

    -

    4.1For compatibility with earlier versions, \glsabbrvscfont \glsxtrscfont is now deprecated. Likewise for similar commands.

    -

    9.1Version 1.11 only allowed one use of \GlsXtrLoadResources per document.

    -

    9.2v1.08 assumed filename.glstex extension was enforced by version 1.11.

    -

    10.1Pre version 1.28 used \csedef#1={\protect\ttfamily#1}|main}} \DeleteShortVerb{\|} \MakeShortVerb{"} - \title{glossaries-extra.sty v1.45: + \title{glossaries-extra.sty v1.46: an extension to the glossaries package} \author{Nicola L.C. Talbot\\[10pt] Dickimaw Books\\ \url{http://www.dickimaw-books.com/}} - \date{2020-04-01} + \date{2021-09-20} \maketitle \begin{abstract} @@ -248,6 +248,9 @@ package. (The base \styfmt{glossaries} package provides additional files, but this one needs \styfmt{glossaries-extra}.) There are equivalent \texttt{.bib} files for use with \gls{bib2gls}. +\textbf{The \styfmt{glossaries-extra} package uses a different set +of defaults to the base \styfmt{glossaries} package.} See the +Introduction for more details. \end{abstract} \begin{important} @@ -351,6 +354,10 @@ option is switched on. To revert to using the \sty{translator} interface, use \pkgopt[true]{translate}. There is no change to the default if \sty{babel} hasn't been loaded. +\item The default style used by \ics{newacronym} is +\abbrstyle{short-nolong}. (That is, the long form is not shown on +\gls{firstuse}.) + \end{itemize} The examples below illustrate the difference in explicit @@ -360,7 +367,7 @@ resulting from modifications to commands provided by \styfmt{glossaries} (see \sectionref{sec:modifications}). \begin{enumerate} -\item +\item Basic defaults: \begin{verbatim} \documentclass{article} \usepackage{glossaries-extra} @@ -372,7 +379,7 @@ This is like: \usepackage{glossaries-extra} \end{verbatim} -\item +\item Language defaults: \begin{verbatim} \documentclass[british]{article} \usepackage{babel} @@ -386,7 +393,7 @@ This is like: \usepackage{glossaries-extra} \end{verbatim} -\item +\item Combined with \cls{memoir} \begin{verbatim} \documentclass{memoir} \usepackage{glossaries-extra} @@ -412,6 +419,33 @@ This is like: Since by the time \styfmt{glossaries-extra} has been loaded, \styfmt{glossaries} has already redefined \cls{memoir}'s glossary-related commands. + +\item Abbreviations are defined with \cs{newabbreviation}: +\begin{verbatim} +\usepackage{glossaries-extra} +\newabbreviation{svm}{SVM}{support vector machine} +\begin{document} +First use: \gls{svm}. Explicit full form: \glsxtrfull{svm}. +\end{document} +\end{verbatim} +This is the closest to: +\begin{verbatim} +\usepackage{glossaries} +\newacronym{svm}{SVM}{support vector machine} +\begin{document} +First use: \gls{svm}. Explicit full form: \acrfull{svm}. +\end{document} +\end{verbatim} +If you want to continue using \cs{newacronym} then you will need to +change the style for the \category{acronym} category: +\begin{verbatim} +\usepackage{glossaries-extra} +\setabbreviationstyle[acronym]{long-short} +\newacronym{svm}{SVM}{support vector machine} +\begin{document} +First use: \gls{svm}. Explicit full form: \glsxtrfull{svm}. +\end{document} +\end{verbatim} \end{enumerate} Another noticeable change is that by default \cs{printglossary} @@ -545,7 +579,7 @@ The \pkgopt[showwrgloss]{debug} option implements \end{definition} to show a mark \ensuremath{\cdot} just before the write operation performed by the indexing commands. If you use -\pkgopt[alsoindex]{record} there will be a mark for the +\pkgopt[hybrid]{record} there will be a mark for the write operation to the \texttt{.aux} file for \gls{bib2gls} and a mark for the write operation to the associated glossary file for \gls{makeindex} or \gls{xindy}. @@ -730,7 +764,9 @@ the package option \pkgoptfmt{seenoindex=ignore} (provided by \item[{\pkgoptdef{record}}]\label{opt:record}(New to v1.08.) This is a \meta{key}=\meta{value} option provided for the benefit of -\gls{bib2gls} (see \sectionref{sec:bib2gls}). +\gls{bib2gls} (see \sectionref{sec:bib2gls}). If you want to use +\gls{bib2gls}, the recommended setting is \pkgopt[nameref]{record} +if you have hyperlinks and \pkgopt[only]{record} if you don't have hyperlinks. The option may only be set in the preamble and can't be used after \cs{GlsXtrLoadResources}. If the value is missing @@ -740,7 +776,7 @@ The option may only be set in the preamble and can't be used after is performed as normal using either \cs{makeglossaries} or \cs{makenoidxglossaries}. This setting implements \pkgopt[error]{undefaction}. -\item[\pkgoptfmt{only}] The indexing is performed by +\item[\pkgoptfmt{only}] The indexing (recording) is performed by \gls{bib2gls} (see \sectionref{sec:bib2gls}). Neither \cs{makeglossaries} nor \cs{makenoidxglossaries} is permitted. This setting implements \pkgopt[warn]{undefaction} and automatically @@ -757,6 +793,13 @@ pdflatex myDoc bib2gls myDoc pdflatex myDoc \end{verbatim} +If you want letter groups you will need the \verb|--group| +or \verb|-g| switch when invoking \gls{bib2gls}: +\begin{verbatim} +pdflatex myDoc +bib2gls -g myDoc +pdflatex myDoc +\end{verbatim} Note that \pkgopt[only]{record} will prevent the \gloskey{see} from automatically implementing \cs{glssee}. (\gls{bib2gls} deals with the @@ -788,20 +831,35 @@ location list. If the indexing counter is the default \ctr{page}, only the location number is shown. Similarly for \pkgopt[equation]{counter} (or \pkgopt[true]{equations}). -\item[\pkgoptfmt{alsoindex}] This is a hybrid setting +\item[\pkgoptfmt{alsoindex}] Deprecated synonym of \pkgoptfmt{hybrid}. + +\item[\pkgoptfmt{hybrid}] This is a hybrid setting that uses \gls{bib2gls} to fetch entry information from \texttt{.bib} files, but uses \gls{makeindex} or \gls{xindy} -to create the glossary files. This option should be used -with \cs{makeglossaries} but not with its optional argument. -This option should not be used with \cs{makenoidxglossaries}. -You may need to change the transcript file used by \gls{bib2gls} -to avoid a clash with the transcript file used by -\gls{makeindex} or \gls{xindy}. (This can be done with +to create the glossary files (which are input with \ics{printglossary}). +Note that this requires a slower and more complicated build process +(see below). + +This hybrid approach is provided for the rare instances +where an existing \gls{xindy} rule or module is too complicated to convert to +a \gls{bib2gls} rule but the entries need to be fetched from a +\filetype{bib} file. There's no benefit in using this option with \gls{makeindex}. + +\begin{important} +Since it's redundant to make \gls{bib2gls} also sort, use \texttt{sort=none} in +\cs{GlsXtrLoadResources} for a faster build. +\end{important} + +This option must be used with \ics{makeglossaries} but not with +its optional argument. This option should not be used with +\cs{makenoidxglossaries}. You may need to change the transcript +file used by \gls{bib2gls} to avoid a clash with the transcript file +used by \gls{makeindex} or \gls{xindy}. (This can be done with \gls{bib2gls}['s] \verb|--log-file| or \verb|-t| option.) -The glossaries should be displayed using \cs{printglossary} -(or \cs{printglossaries}). This option is expected to be used with -\gls{bib2gls}'s \texttt{sort=none} setting and so +Each glossary should be displayed using \cs{printglossary} (or +\cs{printglossaries} for all of them). This option is expected to be +used with \gls{bib2gls}'s \texttt{sort=none} setting and so \sty{glossaries-extra-bib2gls} is not automatically loaded. The document build process is (assuming the file is called @@ -813,18 +871,26 @@ pdflatex myDoc makeglossaries myDoc pdflatex myDoc \end{verbatim} +Note that, in this case, it's redundant to call \gls{bib2gls} with the +\verb|--group| or \verb|-g| switch as \gls{makeindex}/\gls{xindy} +will insert the group heading information into the corresponding +glossary file. (If you want \gls{bib2gls} to form the letter groups +then this hybrid method is inappropriate.) \end{description} -With the recording on (\pkgopt[only]{record} or -\pkgopt[alsoindex]{record}), any of the commands that would typically -index the entry (such as \cs{gls}, \cs{glstext} or \cs{glsadd}) -will add a \cs{glsxtr@record} entry to the \texttt{.aux} file. -\gls{bib2gls} can then read these lines to find -out which entries have been used. (Remember that commands like +With the recording on (\pkgopt[only]{record}, +\pkgopt[nameref]{record} or \pkgopt[hybrid]{record}), any of the +commands that would typically index the entry (such as \cs{gls}, +\cs{glstext} or \cs{glsadd}) will add a \cs{glsxtr@record} entry to +the \texttt{.aux} file. \gls{bib2gls} can then read these lines to +find out which entries have been used. (Remember that commands like \cs{glsentryname} don't index, so any use of these commands won't add a corresponding \cs{glsxtr@record} entry to the \texttt{.aux} file.) See \sectionref{sec:bib2gls} for further details. +The hybrid method additionally performs the standard indexing action +that's required for \gls{makeindex} or \gls{xindy} to work. + \item[{\pkgoptdef{equations}}] (New to v1.37.) This option will cause the default location counter to automatically switch to \ctr{equation} when inside a numbered equation environment, such @@ -981,6 +1047,14 @@ entries may be defined in the preamble or anywhere in the document, but they may only be referenced after they have been defined. Entries must be defined before the associated glossary is displayed. +If you need a list of all entry labels for the use of an editor or +helper script you may also want to consider the package options +\pkgopt{writeglslabels} and \pkgopt{writeglslabelnames} provided by +the base \sty{glossaries} package. Note that with these options +and \pkgopt[atom]{docdef}, only the entry labels visible to \LaTeX\ can +be saved. So if you are using \gls{bib2gls} you will only get the +labels of the entries that are selected by \gls{bib2gls}. + \end{itemize} The \styfmt{glossaries} package allows @@ -1301,8 +1375,8 @@ otherwise \meta{list} can be a comma-separated list of glossaries that need processing with an external indexing application. This command is not permitted with the \pkgopt[only]{record} -package option. Without the optional argument, it's permitted -with \pkgopt[alsoindex]{record}. With the optional argument, +package option. Without the optional argument, it's required +with \pkgopt[hybrid]{record}. With the optional argument, it's only permitted with the default \pkgopt[off]{record}. It should then be possible to use \cs{printglossary} for those @@ -1739,12 +1813,7 @@ the \gloskey{see} value is simply used to directly write a line to the corresponding glossary file and is then discarded. This is why the \gloskey{see} key can't be used before \ics{makeglossaries} (since the file hasn't been opened -yet). It's also the reason why the \gloskey{see} key doesn't have -any effect when used in entries that are defined in the -\env{document} environment. Since the value isn't saved, -it's not available when the \texttt{.glsdefs} file is created at the -end of the document and so isn't available at the start of the -\env{document} environment on the next run. +yet). This modification allows \styfmt{glossaries-extra} to provide \begin{definition}[\DescribeMacro\glsxtraddallcrossrefs] @@ -1754,8 +1823,8 @@ which is used at the end of the document to automatically add any unused cross-references unless the package option \pkgopt{indexcrossrefs} was set to false. -As a by-product of this enhancement, the \gloskey{see} key will now -work for entries defined in the \env{document} environment, but it's still +Note that even though the \gloskey{see} key will now +work for entries defined in the \env{document} environment, it's still best to define entries in the preamble, and the \gloskey{see} key still can't perform any indexing before the file has been opened by \cs{makeglossaries}. Note that \styfmt{glossaries} v4.24 introduced @@ -3156,7 +3225,9 @@ support hierarchical glossaries.) Note that the group formation (if supported) will still occur between entries that don't have a parent, regardless of the level -offset. This can cause odd results. +offset. This can cause odd results but can be switched off with +\gloskey[false]{groups}. See \href{https://dickimaw-books.com/gallery/index.php?label=bib2gls-inner}{Gallery: Inner or Nested +Glossaries} for an example. \end{itemize} \subsection{Glossary Style Modifications} @@ -3648,6 +3719,27 @@ will insert section-level bookmarks. The use of \cs{currentglossary} helps to provide unique bookmark labels in the event of multiple glossaries. +The \sty{glossary-tree} package provides the commands +\begin{definition}[\DescribeMacro\glstreepredesc] +\cs{glstreepredesc} +\end{definition} +and +\begin{definition}[\DescribeMacro\glstreechildpredesc] +\cs{glstreechildpredesc} +\end{definition} +(which both default to a space) and uses them in the \glostyle{tree}-like +styles, but not for the \glostyle{alttree} style. The +\sty{glossaries-extra-stylemods} package modifies the +\glostyle{alttree} style so that it has equivalent hooks: +\begin{definition}[\DescribeMacro\glsalttreepredesc] +\cs{glsalttreepredesc} +\end{definition} +and +\begin{definition}[\DescribeMacro\glsalttreechildpredesc] +\cs{glsalttreechildpredesc} +\end{definition} +These do nothing by default. + The \glostyle{index}-like and \glostyle{tree}-like styles insert the pre-\gls{numberlist} space with \begin{definition}[\DescribeMacro\glstreeprelocation] @@ -4752,6 +4844,15 @@ the name. Level~$n$ sub-entries have the name indented by $(n-1)\times$\cs{glstopicSubIndent}. The hanging indent depends on whether or not a widest name has been set for the level. +As from v1.46, there is also a length for additional indentation +used in the second paragraph onwards for child entries with +multi-paragraph descriptions: +\begin{definition}[\DescribeMacro\glstopicSubItemParIndent] +\cs{glstopicSubItemParIndent} +\end{definition} +This is initialised to \ics{parindent} when \sty{glossary-topic} is +loaded. + \begin{definition}[\DescribeMacro\glstopicInit] \cs{glstopicInit} \end{definition} @@ -8860,7 +8961,7 @@ collate the locations. If you still want to use an indexing application (for example, you need a custom \gls{xindy} rule), then just use -\pkgopt[alsoindex]{record} and continue to use \cs{makeglossaries} +\pkgopt[hybrid]{record} and continue to use \cs{makeglossaries} and \cs{printglossary} (or \cs{printglossaries}), but you also need to instruct \gls{bib2gls} to omit sorting to save time and to prevent the \gloskey{sort} key from being set. @@ -9163,7 +9264,7 @@ The package option \pkgopt[only]{record} (or simply \pkgopt{record}) automatically loads the supplementary package \sty{glossaries-extra-bib2gls}, which provides some commands that are specific to \gls{bib2gls}. The package isn't -loaded by \pkgopt[alsoindex]{record} as that option is intended +loaded by \pkgopt[hybrid]{record} as that option is intended for sorting with \gls{makeindex} or \gls{xindy} and it is expected that the sorting will be switched off (with the resource option \texttt{sort=none}). @@ -11640,7 +11741,7 @@ which will start the list with a subsection header with the title \qt{Summary} (overriding the glossary's title). Note that this shortcut command is only available with the -\pkgopt{record} (or \pkgopt[alsoindex]{record}) package option. +\pkgopt{record} (or \pkgopt[hybrid]{record}) package option. This temporary change in the hypertarget prefix means you need to explicitly use \cs{hyperlink} to create a link to it @@ -12177,7 +12278,7 @@ was defined, the \gloskey{alias} key will automatically trigger \cs{gls}\marg{entry-1} will link to \meta{entry-2}'s target. (Unless the \catattr{targeturl} attribute has been set for \meta{entry-1}'s category.) -\item With \pkgopt[off]{record} or \pkgopt[alsoindex]{record}, the \gloskey[glslink]{noindex} setting will automatically be triggered +\item With \pkgopt[off]{record} or \pkgopt[hybrid]{record}, the \gloskey[glslink]{noindex} setting will automatically be triggered when referencing \meta{entry-1} with commands like \cs{gls} or \cs{glstext}. This prevents \meta{entry-1} from have a \gls{locationlist} (aside from the cross-reference added with diff --git a/macros/latex/contrib/glossaries-extra/glossaries-extra.dtx b/macros/latex/contrib/glossaries-extra/glossaries-extra.dtx index b9f90f6ca8..da86005507 100644 --- a/macros/latex/contrib/glossaries-extra/glossaries-extra.dtx +++ b/macros/latex/contrib/glossaries-extra/glossaries-extra.dtx @@ -1,12 +1,10 @@ %\iffalse % glossaries-extra.dtx generated using makedtx version 1.2 (c) Nicola Talbot % Command line args: -% -setambles ".*\.bib=>\nopreamble\nopostamble" -% -section "chapter" -% -doc "glossaries-extra-codedoc.tex" -% -author "Nicola Talbot" % -macrocode ".*\.tex" % -macrocode ".*\.bib" +% -setambles ".*\.bib=>\nopreamble\nopostamble" +% -section "chapter" % -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 +13,13 @@ % -src "glossary-topic.sty\Z=>glossary-topic.sty" % -src "(example-glossaries-.+\.tex)\Z=>\1" % -src "(example-glossaries-.+\.bib)\Z=>\1" +% -codetitle "Main Package Code (\\styfmt{glossaries-extra.sty})" +% -author "Nicola Talbot" +% -doc "glossaries-extra-codedoc.tex" % -comment ".*\.tex" % -comment ".*\.bib" -% -codetitle "Main Package Code (\\styfmt{glossaries-extra.sty})" % glossaries-extra -% Created on 2020/4/1 13:56 +% Created on 2021/9/22 14:44 %\fi %\iffalse %<*package> @@ -42,7 +42,7 @@ %\fi % \iffalse % Doc-Source file to use with LaTeX2e -% Copyright (C) 2020 Nicola Talbot, all rights reserved. +% Copyright (C) 2021 Nicola Talbot, all rights reserved. % \fi % \iffalse %<*driver> @@ -142,7 +142,7 @@ governed by the \gloskey{first} and \gloskey{firstplural} keys of \setcounter{IndexColumns}{2} -\CheckSum{27181} +\CheckSum{27294} \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.45: +\title{glossaries-extra.sty v1.46: documented code} \author{Nicola L.C. Talbot\\[10pt] Dickimaw Books\\ \url{http://www.dickimaw-books.com/}} -\date{2020-04-01} +\date{2021-09-20} \begin{document} \DocInput{glossaries-extra.dtx} @@ -233,7 +233,7 @@ Dickimaw Books\\ %\section{Package Initialisation and Options} % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{glossaries-extra}[2020/04/01 v1.45 (NLCT)] +\ProvidesPackage{glossaries-extra}[2021/09/20 v1.46 (NLCT)] % \end{macrocode} % Requires \sty{xkeyval} to define package options. % \begin{macrocode} @@ -355,10 +355,11 @@ Dickimaw Books\\ % %\begin{macro}{\@glsxtr@do@redef@forglsentries} %\changes{1.11}{2017-01-19}{new} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand*{\@glsxtr@do@redef@forglsentries}{% \renewcommand*{\forglsentries}[3][\glsdefaulttype]{% - \edef\@@glo@list{\csname glolist@##1\endcsname}% + \protected@edef\@@glo@list{\csname glolist@##1\endcsname}% \ifdefstring{\@@glo@list}{,}% {% \GlossariesExtraWarning{No entries defined in glossary `##1'}% @@ -449,7 +450,10 @@ Dickimaw Books\\ \begingroup \ifKV@glslink@noindex \else - \edef\@gls@label{\glsdetoklabel{#1}}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@gls@label{\glsdetoklabel{#1}}% \let\glslabel\@gls@label \glswriteentry{#1}% {% @@ -515,8 +519,9 @@ Dickimaw Books\\ %Save the label in case it's needed. This needs to be outside the %existence check to allow the post-link hook to reference it. %\changes{1.42}{2020-02-03}{moved label definition outside of conditional} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} - \edef\@gls@label{\glsdetoklabel{#2}}% + \protected@edef\@gls@label{\glsdetoklabel{#2}}% \let\glslabel\@gls@label \ifglsentryexists{#2}{}% {% @@ -654,7 +659,7 @@ Dickimaw Books\\ %\begin{macro}{\@glsxtr@dorecord} %\changes{1.08}{2016-12-13}{new} %\changes{1.15}{2017-05-10}{corrected premature expansion of \cs{@glslocref}} -%If \pkgopt[alsoindex]{record} is used, then \cs{@glslocref} may +%If \pkgopt[alsoindex]{record} or \pkgopt[hybrid]{record} is used, then \cs{@glslocref} may %have been escaped, but this isn't appropriate here. %\changes{1.19}{2017-09-09}{Use \cs{@glsrecordlocref} instead of \cs{@glslocref}} % \begin{macrocode} @@ -808,16 +813,17 @@ Dickimaw Books\\ % \begin{macrocode} \newcommand*{\@glsxtr@noop@recordcounter}[1]{% \PackageError{glossaries-extra}{\string\GlsXtrRecordCounter\space - requires record=only or record=alsoindex package option}{}% + requires record=only or record=hybrid package option}{}% } % \end{macrocode} %\end{macro} % %\begin{macro}{\@glsxtr@op@recordcounter} %\changes{1.12}{2017-02-03}{new} +%\changes{1.46}{2021-09-20}{changed \cs{eappto} to \cs{protected@eappto}} % \begin{macrocode} \newcommand*{\@glsxtr@op@recordcounter}[1]{% - \eappto\@glsxtr@counterrecordhook{\noexpand\@glsxtr@docounterrecord{#1}}% + \protected@eappto\@glsxtr@counterrecordhook{\noexpand\@glsxtr@docounterrecord{#1}}% } % \end{macrocode} %\end{macro} @@ -927,6 +933,12 @@ Dickimaw Books\\ % %\begin{macro}{\@glsxtr@record@setting@alsoindex} %\changes{1.19}{2017-09-09}{new} +%As from v1.46, the \pkgopt[alsoindex]{record} is renamed to +%\pkgopt[hybrid]{record} with \pkgopt[alsoindex]{record} as a +%deprecated synonym to avoid confusion. The internal commands +%that include \texttt{alsoindex} in the name will remain unchanged +%to avoid breaking things, but this command will need to be +%redefined by \pkgopt[hybrid]{record}. % \begin{macrocode} \newcommand*{\@glsxtr@record@setting@alsoindex}{alsoindex} % \end{macrocode} @@ -970,6 +982,29 @@ Dickimaw Books\\ % \end{macrocode} %\end{macro} % +%\begin{macro}{\@glsxtr@warn@hybrid@noprintgloss} +%\changes{1.46}{2021-09-20}{new} +%Used by hybrid method if \cs{printglossary} isn't used. +% \begin{macrocode} +\newcommand\@glsxtr@warn@hybrid@noprintgloss{% + \ifdefstring{\@glo@types}{,}% + {% + \GlossariesExtraWarningNoLine{No glossaries have been defined}% + }% + {% + \GlossariesExtraWarningNoLine{No \string\printglossary\space + or \string\printglossaries\space + found. ^^JYou have requested the hybrid setting + record=\@glsxtr@record@setting\space which requires a + combination of bib2gls (to fetch entries) and makeindex/xindy + (to sort and collate the entries). If you only want to use + bib2gls then change the option to record=only or record=nameref}% + }% +} +% \end{macrocode} +%\end{macro} +% +% %\begin{macro}{\@glsxtr@record@only@setup} %\changes{1.37}{2018-11-30}{new} %Initialisation code for record=only and record=nameref @@ -1016,10 +1051,13 @@ Dickimaw Books\\ %\begin{option}{record} %Now define the \pkgopt{record} package option. %\changes{1.08}{2016-12-13}{added \pkgopt{record} package option} +%\changes{1.46}{2021-09-20}{added hybrid} +% As from v1.46, \pkgopt[alsoindex]{record} is a deprecated synonym of +% \pkgopt[hybrid]{record} to avoid confusion. % \begin{macrocode} \define@choicekey{glossaries-extra.sty}{record} [\@glsxtr@record@setting\glsxtr@record@nr]% - {off,only,alsoindex,nameref}% + {off,only,alsoindex,nameref,hybrid}% [only]% {% \ifcase\glsxtr@record@nr\relax @@ -1046,9 +1084,14 @@ Dickimaw Books\\ % \end{macrocode} %Record and index. This option doesn't load %\sty{glossaries-extra-bib2gls} as the sorting is performed by -%\app{xindy} or \app{makeindex}. +%\app{xindy} or \app{makeindex}. Index in this sense refers to the +%indexing mechanism used with indexing applications such as +%makeindex and xindy, but this could be confused with recording +%locations so \qt{alsoindex} is now deprecated in favour of +%\qt{hybrid}, which is more obvious. % \begin{macrocode} \def\glsxtr@setup@record{% + \renewcommand*{\@glsxtr@record@setting@alsoindex}{alsoindex}% \renewcommand*{\@do@seeglossary}{\@glsxtr@dosee@alsoindex@glossary}% \let\@glsxtr@record\@@glsxtr@record \let\@@do@wrglossary\glsxtr@do@alsoindex@wrglossary @@ -1069,6 +1112,24 @@ Dickimaw Books\\ {\GlossariesExtraWarning{You have requested record=nameref but the document doesn't support hyperlinks}}% {}% + \or +% \end{macrocode} +% Hybrid record (use bib2gls to fetch definitions) and index (use +% makeindex/xindy to sort and collate). +% \begin{macrocode} + \def\glsxtr@setup@record{% + \renewcommand*{\@glsxtr@record@setting@alsoindex}{hybrid}% + \renewcommand*{\@do@seeglossary}{\@glsxtr@dosee@alsoindex@glossary}% + \let\@glsxtr@record\@@glsxtr@record + \let\@@do@wrglossary\glsxtr@do@alsoindex@wrglossary + \let\@gls@saveentrycounter\glsxtr@indexonly@saveentrycounter + \let\glsxtrundefaction\@glsxtr@warn@undefaction + \let\glsxtr@warnonexistsordo\@glsxtr@warn@onexistsordo + \glsxtr@addloclistfield + \let\@@glsxtr@recordcounter\@glsxtr@op@recordcounter + \def\printunsrtglossaryunit{\print@op@unsrtglossaryunit}% + \undef\glsxtrsetaliasnoindex + }% \fi } % \end{macrocode} @@ -2458,9 +2519,10 @@ Dickimaw Books\\ %label. %\changes{1.43}{2020-02-28}{changed \cs{def} to \cs{edef} to avoid %infinite recursion} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} {% - \edef\glslabel{#1}% + \protected@edef\glslabel{#1}% \glsdoifexistsordo{#1}% {% \ifglshasfield{\GlsXtrFmtField}{#1}% @@ -3446,10 +3508,13 @@ Dickimaw Books\\ {% \ifdefempty\@ignored@glossaries {% - \edef\@ignored@glossaries{#1}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@ignored@glossaries{#1}% }% {% - \eappto\@ignored@glossaries{,#1}% + \protected@eappto\@ignored@glossaries{,#1}% }% \csgdef{glolist@#1}{,}% \ifcsundef{gls@#1@entryfmt}% @@ -3462,7 +3527,10 @@ Dickimaw Books\\ \renewcommand*{\@gls@nohyperlist}{#1}% }% {% - \eappto\@gls@nohyperlist{,#1}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{eappto} to \cs{protected@eappto}} +% \begin{macrocode} + \protected@eappto\@gls@nohyperlist{,#1}% }% }% } @@ -3480,12 +3548,15 @@ Dickimaw Books\\ \glsxtrundefaction{Glossary type `#1' already exists}{}% }% {% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} \ifdefempty\@ignored@glossaries {% - \edef\@ignored@glossaries{#1}% + \protected@edef\@ignored@glossaries{#1}% }% {% - \eappto\@ignored@glossaries{,#1}% + \protected@eappto\@ignored@glossaries{,#1}% }% \csgdef{glolist@#1}{,}% \ifcsundef{gls@#1@entryfmt}% @@ -3546,12 +3617,15 @@ Dickimaw Books\\ \ifcsdef{glolist@#1} {}% {% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} \ifdefempty\@ignored@glossaries {% - \edef\@ignored@glossaries{#1}% + \protected@edef\@ignored@glossaries{#1}% }% {% - \eappto\@ignored@glossaries{,#1}% + \protected@eappto\@ignored@glossaries{,#1}% }% \csgdef{glolist@#1}{,}% \ifcsundef{gls@#1@entryfmt}% @@ -3564,7 +3638,10 @@ Dickimaw Books\\ \renewcommand*{\@gls@nohyperlist}{#1}% }% {% - \eappto\@gls@nohyperlist{,#1}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{eappto} to \cs{protected@eappto}} +% \begin{macrocode} + \protected@eappto\@gls@nohyperlist{,#1}% }% }% } @@ -3579,12 +3656,15 @@ Dickimaw Books\\ \ifcsdef{glolist@#1} {}% {% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} \ifdefempty\@ignored@glossaries {% - \edef\@ignored@glossaries{#1}% + \protected@edef\@ignored@glossaries{#1}% }% {% - \eappto\@ignored@glossaries{,#1}% + \protected@eappto\@ignored@glossaries{,#1}% }% \csgdef{glolist@#1}{,}% \ifcsundef{gls@#1@entryfmt}% @@ -3629,8 +3709,9 @@ Dickimaw Books\\ % Define \cs{glslabel} in case it's needed after this command (for % example in the post-link hook). %\changes{1.08}{2016-12-13}{now defines \cs{glslabel}} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} - \edef\glslabel{\glsdetoklabel{#1}}% + \protected@edef\glslabel{\glsdetoklabel{#1}}% \glsxtrundefaction{Glossary entry `\glslabel' has not been defined}{You need to define a glossary entry before you can reference it.}% @@ -3993,9 +4074,10 @@ Dickimaw Books\\ %Fully expands argument before passing to \cs{glsseelist}. %(The argument to \cs{glsseelist} must be a comma-separated list of %entry labels.) +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newrobustcmd{\glsxtrseelist}[1]{% - \edef\@glo@tmp{\noexpand\glsseelist{#1}}\@glo@tmp + \protected@edef\@glo@tmp{\noexpand\glsseelist{#1}}\@glo@tmp } % \end{macrocode} %\end{macro} @@ -4143,7 +4225,10 @@ Dickimaw Books\\ \ifdefvoid\@glo@seealso {}% {% - \edef\@do@glssee{\noexpand\glsxtrindexseealso +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@do@glssee{\noexpand\glsxtrindexseealso {\@glo@label}{\@glo@seealso}}% \@do@glssee }% @@ -4151,10 +4236,11 @@ Dickimaw Books\\ {% % \end{macrocode} %Add cross-reference if see key hasn't been used. +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \ifdefvoid\@glo@see {% - \edef\@do@glssee{\noexpand\glssee{\@glo@label}{\@glo@alias}}% + \protected@edef\@do@glssee{\noexpand\glssee{\@glo@label}{\@glo@alias}}% \@do@glssee }% {}% @@ -4192,7 +4278,10 @@ Dickimaw Books\\ \ifcsvoid{glo@\@glo@label @seealso}% {}% {% - \edef\@do@glssee{\noexpand\glsxtrindexseealso +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@do@glssee{\noexpand\glsxtrindexseealso {\@glo@label}{\csuse{glo@\@glo@label @seealso}}}% \@do@glssee }% @@ -4203,7 +4292,10 @@ Dickimaw Books\\ % \begin{macrocode} \ifdefvoid\@glo@see {% - \edef\@do@glssee{\noexpand\glssee +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@do@glssee{\noexpand\glssee {\@glo@label}{\csuse{glo@\@glo@label @alias}}}% \@do@glssee }% @@ -4373,7 +4465,10 @@ Dickimaw Books\\ % \begin{macrocode} \renewcommand{\@do@seeglossary}[2]{% \@@glsxtrwrglossmark - \edef\@gls@label{\glsdetoklabel{##1}}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@gls@label{\glsdetoklabel{##1}}% \protected@write\@auxout{}{% \string\@gls@reference {\csname glo@\@gls@label @type\endcsname}% @@ -5363,12 +5458,15 @@ Dickimaw Books\\ % \begin{macrocode} \def\@gls@link[#1]#2#3{% \leavevmode - \edef\glslabel{\glsdetoklabel{#2}}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\glslabel{\glsdetoklabel{#2}}% \def\@gls@link@opts{#1}% \let\@gls@link@label\glslabel \let\@glsnumberformat\@glsxtr@defaultnumberformat - \edef\@gls@counter{\csname glo@\glslabel @counter\endcsname}% - \edef\glstype{\csname glo@\glslabel @type\endcsname}% + \protected@edef\@gls@counter{\csname glo@\glslabel @counter\endcsname}% + \protected@edef\glstype{\csname glo@\glslabel @type\endcsname}% \let\org@ifKV@glslink@hyper\ifKV@glslink@hyper % \end{macrocode} %Save current value of \cs{glolinkprefix}: @@ -5447,10 +5545,11 @@ Dickimaw Books\\ \ifx\@glsxtr@local@textformat\relax % \end{macrocode} % Check \catattr{textformat} attribute (new to v1.21). +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \glshasattribute{\glslabel}{textformat}% {% - \edef\@glsxtr@attrval{\glsgetattribute{\glslabel}{textformat}}% + \protected@edef\@glsxtr@attrval{\glsgetattribute{\glslabel}{textformat}}% \ifcsdef{\@glsxtr@attrval}% {% \letcs{\@glsxtr@textformat}{\@glsxtr@attrval}% @@ -5548,7 +5647,10 @@ Dickimaw Books\\ \glsdoifexists{#2}% {% \let\@glsnumberformat\@glsxtr@defaultnumberformat - \edef\@gls@counter{\csname glo@\glsdetoklabel{#2}@counter\endcsname}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@gls@counter{\csname glo@\glsdetoklabel{#2}@counter\endcsname}% \def\@glsxtr@thevalue{}% \def\@glsxtr@theHvalue{\@glsxtr@thevalue}% % \end{macrocode} @@ -6785,8 +6887,9 @@ Dickimaw Books\\ {\let\glsxtrifwasfirstuse\@firstoftwo}% % \end{macrocode} % Store the category label for convenience. +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} - \edef\glscategorylabel{\glscategory{\glslabel}}% + \protected@edef\glscategorylabel{\glscategory{\glslabel}}% \ifglsused{\glslabel}% {% \glsifcategoryattribute{\glscategorylabel}{nohypernext}{true}% @@ -6870,9 +6973,11 @@ Dickimaw Books\\ %\changes{1.12}{2017-02-03}{new} %\changes{1.21}{2017-11-03}{changed to use \cs{glsxtrifhasfield} instead of %\cs{ifglshasfield}} +%\changes{1.46}{2021-09-18}{changed to use starred version of +%\cs{glsxtrifhasfield}} % \begin{macrocode} \newcommand*{\@glsxtrsetaliasnoindex}{% - \glsxtrifhasfield{alias}{\glslabel}% + \s@glsxtrifhasfield{alias}{\glslabel}% {% \let\glsxtrindexaliased\@glsxtrindexaliased \glsxtrsetaliasnoindex @@ -6891,7 +6996,10 @@ Dickimaw Books\\ \else \begingroup \let\@glsnumberformat\@glsxtr@defaultnumberformat - \edef\@gls@counter{\csname glo@\glsdetoklabel{\glslabel}@counter\endcsname}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@gls@counter{\csname glo@\glsdetoklabel{\glslabel}@counter\endcsname}% \glsxtr@saveentrycounter \@@do@wrglossary{\glsxtralias{\glslabel}}% \endgroup @@ -7108,7 +7216,10 @@ Dickimaw Books\\ \ifdef\glsnavhyperlink { \renewcommand*{\glsnavhyperlink}[3][\@glo@type]{% - \edef\gls@grplabel{#2}\protected@edef\@gls@grptitle{#3}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\gls@grplabel{#2}\protected@edef\@gls@grptitle{#3}% % \end{macrocode} %Scope: % \begin{macrocode} @@ -7220,7 +7331,10 @@ Dickimaw Books\\ \glsdoifexists{#2}% {% \def\@glo@label{#2}% - {\edef\glslabel{#2}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + {\protected@edef\glslabel{#2}% \@glslink{\glolinkprefix\glslabel}{#1}}% }% } @@ -8560,9 +8674,10 @@ Dickimaw Books\\ % %\begin{macro}{\@@newglossaryentry@defunitcounters} %\changes{0.5.4}{2015-12-15}{new} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand*{\@@newglossaryentry@defunitcounters}{% - \edef\@glo@countunit{\csuse{@glsxtr@categoryattr@@\@glo@category @unitcount}}% + \protected@edef\@glo@countunit{\csuse{@glsxtr@categoryattr@@\@glo@category @unitcount}}% \ifdefvoid\@glo@countunit {}% {% @@ -8628,11 +8743,12 @@ Dickimaw Books\\ % %\begin{macro}{\@gls@increment@currunitcount} %\changes{0.5.4}{2015-12-15}{new} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand*{\@gls@increment@currunitcount}[1]{% \glshasattribute{#1}{unitcount}% {% - \edef\@glsxtr@csname{\@glsxtr@currentunitcount{#1}}% + \protected@edef\@glsxtr@csname{\@glsxtr@currentunitcount{#1}}% \ifcsundef{\@glsxtr@csname}% {% \csgdef{\@glsxtr@csname}{1}% @@ -8654,11 +8770,12 @@ Dickimaw Books\\ % %\begin{macro}{\@gls@local@increment@currunitcount} %\changes{0.5.4}{2015-12-15}{new} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand*{\@gls@local@increment@currunitcount}[1]{% \glshasattribute{#1}{unitcount}% {% - \edef\@glsxtr@csname{\@glsxtr@currentunitcount{#1}}% + \protected@edef\@glsxtr@csname{\@glsxtr@currentunitcount{#1}}% \ifcsundef{\@glsxtr@csname}% {% \csdef{\@glsxtr@csname}{1}% @@ -8770,7 +8887,10 @@ Dickimaw Books\\ \renewcommand*{\glsxtrpostreset}[1]{% \glshasattribute{##1}{unitcount}% {% - \edef\@glsxtr@csname{\@glsxtr@currentunitcount{##1}}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@glsxtr@csname{\@glsxtr@currentunitcount{##1}}% \ifcsundef{\@glsxtr@csname}% {}% {\csgdef{\@glsxtr@csname}{0}}% @@ -8782,7 +8902,10 @@ Dickimaw Books\\ \@glsxtr@entryunitcount@org@localreset{##1}% \glshasattribute{##1}{unitcount}% {% - \edef\@glsxtr@csname{\@glsxtr@currentunitcount{##1}}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@glsxtr@csname{\@glsxtr@currentunitcount{##1}}% \ifcsundef{\@glsxtr@csname}% {}% {\csdef{\@glsxtr@csname}{0}}% @@ -9067,17 +9190,21 @@ Dickimaw Books\\ % %\begin{macro}{\@glsxtr@addabbreviationlist} %\changes{1.42}{2020-02-03}{new} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand*{\@glsxtr@addabbreviationlist}[1]{% - \edef\@glo@type{#1}% + \protected@edef\@glo@type{#1}% \ifdefempty\@glsxtr@abbrlists {\let\@glsxtr@abbrlists\@glo@type}% {% \ifdefequal\@glsxtr@abbrlists\@glo@type {}% {% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{eappto} to \cs{protected@eappto}} +% \begin{macrocode} \expandafter\DTLifinlist\expandafter{\@glo@type}{\@glsxtr@abbrlists}{}% - {\eappto\@glsxtr@abbrlists{,\@glo@type}}% + {\protected@eappto\@glsxtr@abbrlists{,\@glo@type}}% }% }% } @@ -9237,6 +9364,27 @@ Dickimaw Books\\ \let\@glsxtr@org@makeglossaries\makeglossaries % \end{macrocode} % +%\begin{macro}{\@makeglossaries@warn@noprintglossary} +%\changes{1.46}{2021-09-20}{new} +%This command was only introduced to \sty{glossaries} v4.47 so it +%may not be defined. +% \begin{macrocode} +\providecommand\@makeglossaries@warn@noprintglossary{% + \ifdefstring{\@glo@types}{,}% + {% + \GlossariesWarningNoLine{No glossaries have been defined}% + }% + {% + \GlossariesWarningNoLine{No \string\printglossary\space + or \string\printglossaries\space + found. ^^J(Remove \string\makeglossaries\space if you + don't want any glossaries.) ^^JThis document will not + have a glossary}% + }% +}% +% \begin{macrocode} +%\end{macro} +% %\begin{macro}{\@domakeglossaries} %\changes{1.42}{2020-02-03}{provided definition for \cs{@domakeglossaries}} % \sty{glossaries} v4.45 introduced \cs{@domakeglossaries} to @@ -9266,24 +9414,33 @@ Dickimaw Books\\ not permitted\MessageBreak with record=\@glsxtr@record@setting\space package option}% {You may only use \string\makeglossaries\space with - record=off or record=alsoindex options}% + record=off or record=hybrid options}% }% {% \ifblank{#1}% - {\@glsxtr@org@makeglossaries}% + {% + \@glsxtr@org@makeglossaries +% \end{macrocode} +%\changes{1.46}{2021-09-20}{adjust warning on missing glossary for \qt{alsoindex}} +% \begin{macrocode} + \ifx\@glsxtr@record@setting\@glsxtr@record@setting@alsoindex + \let\warn@noprintglossary\@glsxtr@warn@hybrid@noprintgloss + \fi + }% {% \ifx\@glsxtr@record@setting\@glsxtr@record@setting@alsoindex \PackageError{glossaries-extra}{\string\makeglossaries[#1]\space - not permitted\MessageBreak with record=alsoindex package option}% + not permitted\MessageBreak with record=\@glsxtr@record@setting\space package option}% {You may only use the hybrid \string\makeglossaries[...]\space with record=off option}% \else % \end{macrocode} %\cs{@gls@@automake@immediate} was introduced to \sty{glossaries} %v4.42 so it may not be defined. +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \ifdef\@gls@@automake@immediate{\@gls@@automake@immediate}{}% - \edef\@glsxtr@reg@glosslist{#1}% + \protected@edef\@glsxtr@reg@glosslist{#1}% \ifundef{\glswrite}{\newwrite\glswrite}{}% \protected@write\@auxout{}{\string\providecommand \string\@glsorder[1]{}} @@ -9334,8 +9491,11 @@ Dickimaw Books\\ \renewcommand*{\@do@seeglossary}[2]{% \glsdoifexists{##1}% {% - \edef\@gls@label{\glsdetoklabel{##1}}% - \edef\@gls@type{\csname glo@\@gls@label @type\endcsname}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@gls@label{\glsdetoklabel{##1}}% + \protected@edef\@gls@type{\csname glo@\@gls@label @type\endcsname}% \expandafter\DTLifinlist\expandafter{\@gls@type}{\@glsxtr@reg@glosslist}% {\@glsxtr@org@doseeglossary{##1}{##2}}% {% @@ -9352,7 +9512,10 @@ Dickimaw Books\\ % \begin{macrocode} \let\@glsxtr@@do@@wrglossary\@@do@@wrglossary \def\@@do@@wrglossary{% - \edef\@gls@type{\csname glo@\@gls@label @type\endcsname}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@gls@type{\csname glo@\@gls@label @type\endcsname}% \expandafter\DTLifinlist\expandafter{\@gls@type}{\@glsxtr@reg@glosslist}% {\@glsxtr@@do@@wrglossary}% {\gls@noidxglossary}% @@ -9361,17 +9524,15 @@ Dickimaw Books\\ % Suppress warning about no \cs{makeglossaries} % \begin{macrocode} \let\warn@nomakeglossaries\relax - \def\warn@noprintglossary{% - \GlossariesWarningNoLine{No \string\printglossary\space - or \string\printglossaries\space - found.^^J(Remove \string\makeglossaries\space if you don't want - any glossaries.)^^JThis document will not have a glossary}% - }% + \let\warn@noprintglossary\@makeglossaries@warn@noprintglossary % \end{macrocode} % Only warn for glossaries not listed. % \begin{macrocode} \renewcommand{\@gls@noref@warn}[1]{% - \edef\@gls@type{##1}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@gls@type{##1}% \expandafter\DTLifinlist\expandafter{\@gls@type}{\@glsxtr@reg@glosslist}% {% \GlossariesExtraWarning{Can't use @@ -9548,6 +9709,7 @@ Dickimaw Books\\ % \end{macrocode} %\changes{1.22}{2017-11-08}{changed explicit \cs{let} for \cs{nopostdesc} %to \cs{glsxtractivatenopost}} +%\changes{1.46}{2021-09-20}{changed \cs{xdef} to \cs{protected@xdef}} % \begin{macrocode} \glsxtractivatenopost \gls@dotoctitle @@ -9555,11 +9717,11 @@ Dickimaw Books\\ \let\gls@org@glossaryentryfield\glossentry \let\gls@org@glossarysubentryfield\subglossentry \renewcommand{\glossentry}[1]{% - \xdef\glscurrententrylabel{\glsdetoklabel{##1}}% + \protected@xdef\glscurrententrylabel{\glsdetoklabel{##1}}% \gls@org@glossaryentryfield{##1}% }% \renewcommand{\subglossentry}[2]{% - \xdef\glscurrententrylabel{\glsdetoklabel{##2}}% + \protected@xdef\glscurrententrylabel{\glsdetoklabel{##2}}% \gls@org@glossarysubentryfield{##1}{##2}% }% \@gls@preglossaryhook @@ -9812,7 +9974,10 @@ Dickimaw Books\\ %\changes{1.09}{2016-12-16}{new} % \begin{macrocode} \newcommand\@glsxtr@mixed@assign@sortkey[1]{% - \edef\@glo@type{\@glo@type}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@glo@type{\@glo@type}% \expandafter\DTLifinlist\expandafter{\@glo@type}{\@glsxtr@reg@glosslist}% {% \@glo@no@assign@sortkey{#1}% @@ -10133,9 +10298,10 @@ Dickimaw Books\\ %\begin{macro}{\glsxtrdisplaystartloc} %\changes{1.12}{2017-02-03}{new} %Start of a location range. +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand*{\glsxtrdisplaystartloc}[2]{% - \edef\glsxtrlocrangefmt{#1}% + \protected@edef\glsxtrlocrangefmt{#1}% \ifx\glsxtrlocrangefmt\empty \def\glsxtrlocrangefmt{glsnumberformat}% \fi @@ -10149,9 +10315,10 @@ Dickimaw Books\\ %\changes{1.12}{2017-02-03}{new} %\changes{1.14}{2017-04-18}{added check for empty format} %End of a location range. +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand*{\glsxtrdisplayendloc}[2]{% - \edef\@glsxtr@tmp{#1}% + \protected@edef\@glsxtr@tmp{#1}% \ifdefempty{\@glsxtr@tmp}{\def\@glsxtr@tmp{glsnumberformat}}{}% \ifx\glsxtrlocrangefmt\@glsxtr@tmp \else @@ -10936,8 +11103,11 @@ Dickimaw Books\\ \glsdoifexists{#1}% {% \begingroup - \edef\glscurrententrylabel{\glsdetoklabel{#1}}% - \edef\currentglossary{\GlsXtrStandaloneGlossaryType}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\glscurrententrylabel{\glsdetoklabel{#1}}% + \protected@edef\currentglossary{\GlsXtrStandaloneGlossaryType}% \ifglshasparent{#1}% {\GlsXtrStandaloneSubEntryItem{#1}}% {\glsentryitem{#1}}% @@ -11026,8 +11196,11 @@ Dickimaw Books\\ \glsdoifexists{#1}% {% \begingroup - \edef\glscurrententrylabel{\glsdetoklabel{#1}}% - \edef\currentglossary{\GlsXtrStandaloneGlossaryType}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\glscurrententrylabel{\glsdetoklabel{#1}}% + \protected@edef\currentglossary{\GlsXtrStandaloneGlossaryType}% \ifglshasparent{#1}% {\GlsXtrStandaloneSubEntryItem{#1}}% {\glsentryitem{#1}}% @@ -11168,7 +11341,10 @@ Dickimaw Books\\ {\@glsxtr@groupheading}% }% \fi - \eappto\@glsxtr@doglossary{% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{eappto} to \cs{protected@eappto}} +% \begin{macrocode} + \protected@eappto\@glsxtr@doglossary{% \noexpand\@printunsrt@glossary@handler{\glscurrententrylabel}}% }% }% @@ -11253,12 +11429,15 @@ Dickimaw Books\\ \@glossarystyle \let\gls@org@glossaryentryfield\glossentry \let\gls@org@glossarysubentryfield\subglossentry +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{xdef} to \cs{protected@xdef}} +% \begin{macrocode} \renewcommand{\glossentry}[1]{% - \xdef\glscurrententrylabel{\glsdetoklabel{##1}}% + \protected@xdef\glscurrententrylabel{\glsdetoklabel{##1}}% \gls@org@glossaryentryfield{##1}% }% \renewcommand{\subglossentry}[2]{% - \xdef\glscurrententrylabel{\glsdetoklabel{##2}}% + \protected@xdef\glscurrententrylabel{\glsdetoklabel{##2}}% \gls@org@glossarysubentryfield{##1}{##2}% }% \@gls@preglossaryhook @@ -11330,7 +11509,10 @@ Dickimaw Books\\ {\@glsxtr@groupheading}% }% \fi - \eappto\@glsxtr@doglossary{% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{eappto} to \cs{protected@eappto}} +% \begin{macrocode} + \protected@eappto\@glsxtr@doglossary{% \noexpand\@printunsrt@glossary@handler{\glscurrententrylabel}}% }% }% @@ -11381,9 +11563,10 @@ can only be used within \string\printunsrtglossaryentryprocesshook}{}% % %\begin{macro}{\@printunsrt@glossary@handler} %\changes{1.16}{2017-06-15}{new} +%\changes{1.46}{2021-09-20}{changed \cs{xdef} to \cs{protected@xdef}} % \begin{macrocode} \newcommand{\@printunsrt@glossary@handler}[1]{% - \xdef\glscurrententrylabel{#1}% + \protected@xdef\glscurrententrylabel{#1}% \printunsrtglossaryhandler\glscurrententrylabel } % \end{macrocode} @@ -11531,7 +11714,7 @@ can only be used within \string\printunsrtglossaryentryprocesshook}{}% {% \ifdefempty{\@gls@currentlettergroup}{}% {\def\@glsxtr@groupheading{\glsgroupskip}}% - \eappto\@glsxtr@groupheading{% + \protected@eappto\@glsxtr@groupheading{% \noexpand\glsgroupheading{\expandonce\@glo@thislettergrp}% }% }% @@ -11904,15 +12087,16 @@ defined}{}% %\begin{macro}{\@glsxtr@rglstrigger@record} %\changes{1.21}{2017-11-03}{new} %Still need a record to ensure that \app{bib2gls} selects the entry. +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand*{\@glsxtr@rglstrigger@record}[3]{% - \edef\glslabel{\glsdetoklabel{#2}}% + \protected@edef\glslabel{\glsdetoklabel{#2}}% \let\@gls@link@label\glslabel \def\@glsxtr@thevalue{}% \def\@glsxtr@theHvalue{\@glsxtr@thevalue}% \def\@glsnumberformat{glstriggerrecordformat}% - \edef\@gls@counter{\csname glo@\glslabel @counter\endcsname}% - \edef\glstype{\csname glo@\glslabel @type\endcsname}% + \protected@edef\@gls@counter{\csname glo@\glslabel @counter\endcsname}% + \protected@edef\glstype{\csname glo@\glslabel @type\endcsname}% \def\@glsxtr@thevalue{}% \def\@glsxtr@theHvalue{\@glsxtr@thevalue}% \glsxtrinitwrgloss @@ -12233,11 +12417,12 @@ defined}{}% {% % \end{macrocode} %Need to ensure values are fully expanded. +%\changes{1.46}{2021-09-20}{changed \cs{x} to \cs{@glo@tmp}} % \begin{macrocode} \begingroup - \edef\x{\endgroup\noexpand\@addtoreset{glsxtr@linkcount@\glslabel}% + \edef\@glo@tmp{\endgroup\noexpand\@addtoreset{glsxtr@linkcount@\glslabel}% {\glsgetattribute{\glslabel}{linkcountmaster}}}% - \x + \@glo@tmp }% {}% }% @@ -13091,11 +13276,14 @@ defined}{}% {}% \ifdefempty\@gls@longaccess {% - \edef\@gls@shortaccess{\glsdefaultshortaccess +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@gls@shortaccess{\glsdefaultshortaccess {\expandonce\@gls@actuallong}{\expandonce\@gls@actualshort}}% }% {% - \edef\@gls@shortaccess{\glsdefaultshortaccess + \protected@edef\@gls@shortaccess{\glsdefaultshortaccess {\expandonce\@gls@longaccess}{\expandonce\@gls@actualshort}}% }% \eappto\ExtraCustomAbbreviationFields{shortaccess={\@gls@shortaccess},}% @@ -13120,11 +13308,14 @@ defined}{}% }% \ifdefempty\@gls@longaccesspl {% - \edef\@gls@shortaccesspl{\glsdefaultshortaccess +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@gls@shortaccesspl{\glsdefaultshortaccess {\expandonce\@gls@actuallongpl}{\expandonce\@gls@actualshortpl}}% }% {% - \edef\@gls@shortaccesspl{\glsdefaultshortaccess + \protected@edef\@gls@shortaccesspl{\glsdefaultshortaccess {\expandonce\@gls@longaccesspl}{\expandonce\@gls@actualshort}}% }% \eappto\ExtraCustomAbbreviationFields{shortpluralaccess={\@gls@shortaccesspl},}% @@ -14095,10 +14286,11 @@ defined}{}% % As from version 1.04, allow the \catattr{glossdescfont} attribute % to determine the font applied. %\changes{1.04}{2016-05-02}{added glossdescfont attribute check} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \glshasattribute{#1}{glossdescfont}% {% - \edef\@glsxtr@attrval{\glsgetattribute{#1}{glossdescfont}}% + \protected@edef\@glsxtr@attrval{\glsgetattribute{#1}{glossdescfont}}% \ifcsdef{\@glsxtr@attrval}% {% \letcs{\@glsxtr@glossdescfont}{\@glsxtr@attrval}% @@ -14139,7 +14331,10 @@ defined}{}% \glssetabbrvfmt{\glscategory{#1}}% \glshasattribute{#1}{glossdescfont}% {% - \edef\@glsxtr@attrval{\glsgetattribute{#1}{glossdescfont}}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@glsxtr@attrval{\glsgetattribute{#1}{glossdescfont}}% \ifcsdef{\@glsxtr@attrval}% {% \letcs{\@glsxtr@glossdescfont}{\@glsxtr@attrval}% @@ -14187,10 +14382,11 @@ defined}{}% % As from version 1.04, allow the \catattr{glossnamefont} attribute % to determine the font applied. %\changes{1.04}{2016-05-02}{added glossnamefont attribute check} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \glshasattribute{#1}{glossnamefont}% {% - \edef\@glsxtr@attrval{\glsgetattribute{#1}{glossnamefont}}% + \protected@edef\@glsxtr@attrval{\glsgetattribute{#1}{glossnamefont}}% \ifcsdef{\@glsxtr@attrval}% {% \letcs{\@glsxtr@glossnamefont}{\@glsxtr@attrval}% @@ -14258,7 +14454,10 @@ defined}{}% \glssetabbrvfmt{\glscategory{#1}}% \glshasattribute{#1}{glossnamefont}% {% - \edef\@glsxtr@attrval{\glsgetattribute{#1}{glossnamefont}}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@glsxtr@attrval{\glsgetattribute{#1}{glossnamefont}}% \ifcsdef{\@glsxtr@attrval}% {% \letcs{\@glsxtr@glossnamefont}{\@glsxtr@attrval}% @@ -14329,7 +14528,10 @@ defined}{}% % \begin{macrocode} \glshasattribute{#1}{glossnamefont}% {% - \edef\@glsxtr@attrval{\glsgetattribute{#1}{glossnamefont}}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@glsxtr@attrval{\glsgetattribute{#1}{glossnamefont}}% \ifcsdef{\@glsxtr@attrval}% {% \letcs{\@glsxtr@glossnamefont}{\@glsxtr@attrval}% @@ -14361,7 +14563,10 @@ defined}{}% \glssetabbrvfmt{\glscategory{#1}}% \glshasattribute{#1}{glossnamefont}% {% - \edef\@glsxtr@attrval{\glsgetattribute{#1}{glossnamefont}}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@glsxtr@attrval{\glsgetattribute{#1}{glossnamefont}}% \ifcsdef{\@glsxtr@attrval}% {% \letcs{\@glsxtr@glossnamefont}{\@glsxtr@attrval}% @@ -14441,13 +14646,14 @@ defined}{}% %This is essentially the reverse of \cs{@gls@fetchfield}, since the %field supplied to \cs{glossentryname} has to be the internal label, %but the \cs{gls\meta{field}accessdisplay} commands use the key name. +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} - \edef\@gls@thisval{#1}% + \protected@edef\@gls@thisval{#1}% \@for\@gls@map:=\@gls@keymap\do{% - \edef\@this@key{\expandafter\@secondoftwo\@gls@map}% + \protected@edef\@this@key{\expandafter\@secondoftwo\@gls@map}% \ifdefequal{\@this@key}{\@gls@thisval}% {% - \edef\@gls@thisval{\expandafter\@firstoftwo\@gls@map}% + \protected@edef\@gls@thisval{\expandafter\@firstoftwo\@gls@map}% \@endfortrue }% {}% @@ -14480,11 +14686,12 @@ defined}{}% \glsxtr@setaccessdisplay{#2}% % \end{macrocode} %Set the abbreviation format: +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \glssetabbrvfmt{\glscategory{#1}}% \glshasattribute{#1}{glossnamefont}% {% - \edef\@glsxtr@attrval{\glsgetattribute{#1}{glossnamefont}}% + \protected@edef\@glsxtr@attrval{\glsgetattribute{#1}{glossnamefont}}% \ifcsdef{\@glsxtr@attrval}% {% \letcs{\@glsxtr@glossnamefont}{\@glsxtr@attrval}% @@ -14604,9 +14811,12 @@ defined}{}% \let\@glsxtr@attrval\@glsnumberformat \fi \fi +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{eappto} to \cs{protected@eappto}} +% \begin{macrocode} \ifdefstring{\@glsxtr@attrval}{true}% {}% - {\eappto\@glo@name{\@glsxtr@autoindex@encap\@glsxtr@attrval}}% + {\protected@eappto\@glo@name{\@glsxtr@autoindex@encap\@glsxtr@attrval}}% \expandafter\glsxtrautoindex\expandafter{\@glo@name}% }% {}% @@ -14918,6 +15128,7 @@ defined}{}% %\changes{1.4.2}{??}{new} %There are no case-changing attributes as it's less usual for %symbols. +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newrobustcmd*{\@glossentrysymbol}[1]{% \glsdoifexistsorwarn{#1}% @@ -14926,7 +15137,7 @@ defined}{}% \glssetabbrvfmt{\glscategory{#1}}% \glshasattribute{#1}{glosssymbolfont}% {% - \edef\@glsxtr@attrval{\glsgetattribute{#1}{glosssymbolfont}}% + \protected@edef\@glsxtr@attrval{\glsgetattribute{#1}{glosssymbolfont}}% \ifcsdef{\@glsxtr@attrval}% {% \letcs{\@glsxtr@glosssymbolfont}{\@glsxtr@attrval}% @@ -15509,9 +15720,10 @@ defined}{}% % % If there's a style for the given category, it needs to be applied % by \cs{newabbreviation}. +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \define@key{glsxtrabbrv}{category}{% - \edef\glscategorylabel{#1}% + \protected@edef\glscategorylabel{#1}% } % \end{macrocode} % Save the short plural form. This may be needed before the entry is @@ -17028,9 +17240,10 @@ defined}{}% \@glsxtr@dostylewarn % \end{macrocode} % Set up the style for the given category. +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \csdef{@glsabbrv@current@#1}{#2}% - \edef\glscategorylabel{#1}% + \protected@edef\glscategorylabel{#1}% \glsxtr@applyabbrvstyle{#2}% }% }% @@ -25645,7 +25858,7 @@ defined}{}% %automatically loaded by the record option. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{glossaries-extra-bib2gls}[2020/04/01 v1.45 (NLCT)] +\ProvidesPackage{glossaries-extra-bib2gls}[2021/09/20 v1.46 (NLCT)] % \end{macrocode} %Provide convenient shortcut commands for predefined glossary types. %\begin{macro}{\printunsrtacronyms} @@ -26045,17 +26258,20 @@ defined}{}% \def\@glsxtr@bibgls@removespaces#1 #2\@nil{% \toks@=\expandafter{\the\toks@#1}% \ifx\\#2\\% - \edef\x{\the\toks@}% - \ifx\x\empty +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{x} to \cs{@glo@tmp}} +% \begin{macrocode} + \edef\@glo@tmp{\the\toks@}% + \ifx\@glo@tmp\empty \else - \protected@edef\x{\glsentrycounter\@glo@counterprefix\the\toks@}% + \protected@edef\@glo@tmp{\glsentrycounter\@glo@counterprefix\the\toks@}% \ifdefvoid\glsxtrsupplocationurl {% - \expandafter\glsxtrfmtinternalnameref\expandafter{\x}% + \expandafter\glsxtrfmtinternalnameref\expandafter{\@glo@tmp}% {\@glsnumberformat}{\glsxtr@locationhypertext}% }% {% - \expandafter\glsxtrfmtexternalnameref\expandafter{\x}% + \expandafter\glsxtrfmtexternalnameref\expandafter{\@glo@tmp}% {\@glsnumberformat}{\glsxtr@locationhypertext}{\glsxtrsupplocationurl}% }% \fi @@ -26363,14 +26579,18 @@ defined}{}% % \end{macrocode} %Initialise to the unprefixed label in the event that the list is %empty. +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} - \edef\@gls@thislabel{#1}% + \protected@edef\@gls@thislabel{#1}% \@for\@glsxtr@prefix:=\@glsxtr@labelprefixes\do {% - \edef\@gls@thislabel{\@glsxtr@prefix#1}% + \protected@edef\@gls@thislabel{\@glsxtr@prefix#1}% \ifglsentryexists{\@gls@thislabel}{\@endfortrue}{}% }% - \edef\x{\endgroup\noexpand\def\noexpand\@gls@thislabel{\@gls@thislabel}}\x +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{x} to \cs{@glo@tmp}} +% \begin{macrocode} + \edef\@glo@tmp{\endgroup\noexpand\def\noexpand\@gls@thislabel{\@gls@thislabel}}\@glo@tmp } % \end{macrocode} %\end{macro} @@ -28730,7 +28950,7 @@ defined}{}% % First identify package: % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{glossaries-extra-stylemods}[2020/04/01 v1.45 (NLCT)] +\ProvidesPackage{glossaries-extra-stylemods}[2021/09/20 v1.46 (NLCT)] % \end{macrocode} % Provide package options to automatically load required predefined % styles. The simplest method is to just test for the existence of @@ -29622,6 +29842,22 @@ defined}{}% \ifdef{\@glsstyle@tree} {% % \end{macrocode} +% The original \glostyle{alttree} style doesn't use \cs{glstreepredesc} +% but since v1.42 the modified style (below) has switched to using +% \cs{glstreeDescLoc} so provide an alternative that can be used +% with \glostyle{alttree}. +%\begin{macro}{\glsxtrtreepredesc} +%\changes{1.46}{2021-09-20}{new} +% \begin{macrocode} +\newcommand{\glsxtrtreepredesc}{\glstreepredesc} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\glsxtrtreechildpredesc} +%\changes{1.46}{2021-09-20}{new} +% \begin{macrocode} +\newcommand{\glsxtrtreechildpredesc}{\glstreechildpredesc} +% \end{macrocode} +%\end{macro} %Provide a command for use with the \glostyle{tree} styles that displays %the pre-description separator, the %description and post-description hook. @@ -29629,7 +29865,7 @@ defined}{}% %\changes{1.31}{2018-05-09}{new} % \begin{macrocode} \newcommand{\glstreedesc}[1]{% - \glstreepredesc\glossentrydesc{#1}\glspostdescription + \glsxtrtreepredesc\glossentrydesc{#1}\glspostdescription } % \end{macrocode} %\end{macro} @@ -29674,7 +29910,7 @@ defined}{}% %\changes{1.31}{2018-05-09}{new} % \begin{macrocode} \newcommand{\glstreechilddesc}[1]{% - \glstreechildpredesc\glossentrydesc{#1}\glspostdescription + \glsxtrtreechildpredesc\glossentrydesc{#1}\glspostdescription }% % \end{macrocode} %\end{macro} @@ -29909,6 +30145,18 @@ defined}{}% % \end{macrocode} % Only redefine this style if it's already been defined. % +%\begin{macro}{\glsalttreepredesc} +%\changes{1.46}{2021-09-20}{new} +% \begin{macrocode} +\newcommand{\glsalttreepredesc}{} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\glsalttreechildpredesc} +%\changes{1.46}{2021-09-20}{new} +% \begin{macrocode} +\newcommand{\glsalttreechildpredesc}{\glsalttreepredesc} +% \end{macrocode} +%\end{macro} %\begin{macro}{\glsxtralttreeSymbolDescLocation} %\changes{1.05}{2016-06-10}{new} %\begin{definition} @@ -29920,6 +30168,12 @@ defined}{}% \newcommand{\glsxtralttreeSymbolDescLocation}[2]{% {% \let\par\glsxtrAltTreePar +% \end{macrocode} +%\changes{1.46}{2021-09-20}{switch to using \cs{glsalttreepredesc} and +%\cs{glsalttreechildpredesc}} +% \begin{macrocode} + \let\glsxtrtreepredesc\glsalttreepredesc + \let\glsxtrtreechildpredesc\glsalttreechildpredesc \ifglshassymbol{#1}{(\glossentrysymbol{#1})\space}{}% % \end{macrocode} %\changes{1.41}{2019-04-09}{added check for description} @@ -30225,10 +30479,13 @@ defined}{}% {% \ifglshasparent{\@glo@label}% {% - \edef\@glo@parent{\csuse{glo@\glsdetoklabel{\@glo@label}@parent}}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@glo@parent{\csuse{glo@\glsdetoklabel{\@glo@label}@parent}}% \ifglshasparent{\@glo@parent}% {% - \edef\@glo@parent{\csuse{glo@\glsdetoklabel{\@glo@parent}@parent}}% + \protected@edef\@glo@parent{\csuse{glo@\glsdetoklabel{\@glo@parent}@parent}}% \ifglshasparent{\@glo@parent}% {}% {% @@ -30280,10 +30537,13 @@ defined}{}% {% \ifglshasparent{\@glo@label}% {% - \edef\@glo@parent{\csuse{glo@\glsdetoklabel{\@glo@label}@parent}}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@glo@parent{\csuse{glo@\glsdetoklabel{\@glo@label}@parent}}% \ifglshasparent{\@glo@parent}% {% - \edef\@glo@parent{\csuse{glo@\glsdetoklabel{\@glo@parent}@parent}}% + \protected@edef\@glo@parent{\csuse{glo@\glsdetoklabel{\@glo@parent}@parent}}% \ifglshasparent{\@glo@parent}% {}% {% @@ -31053,7 +31313,7 @@ defined}{}% %\section{Package Initialisation and Options} % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{glossary-bookindex}[2020/04/01 v1.45 (NLCT)] +\ProvidesPackage{glossary-bookindex}[2021/09/20 v1.46 (NLCT)] % \end{macrocode} %Load required packages. % \begin{macrocode} @@ -31549,7 +31809,7 @@ defined}{}% %Provides additional long styles. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{glossary-longextra}[2020/04/01 v1.45 (NLCT)] +\ProvidesPackage{glossary-longextra}[2021/09/20 v1.46 (NLCT)] % \end{macrocode} %Load required packages. % \begin{macrocode} @@ -32978,7 +33238,7 @@ defined}{}% %topic. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{glossary-topic}[2020/04/01 v1.45 (NLCT)] +\ProvidesPackage{glossary-topic}[2021/09/20 v1.46 (NLCT)] % \end{macrocode} %Load required package. % \begin{macrocode} @@ -33021,8 +33281,18 @@ defined}{}% \renewcommand{\subglossentry}[3]{% \ifnum\glstopic@prevlevel=0\relax\glstopic@prechildren\fi \def\glstopic@prevlevel{##1}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{grouping added to scope \cs{everypar} (bug 182)} +%Grouping is added to scope the effect of \cs{everypar}. +% \begin{macrocode} + \begingroup \glstopicAssignSubIndent{##1}% \glstopicSubItem{##1}{##2}{##3}% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{added \cs{par} (bug 176)} +% \begin{macrocode} + \par + \endgroup }% \renewcommand*{\glsgroupskip}{}% } @@ -33133,11 +33403,32 @@ defined}{}% \par \parindent\dimexpr#1\glstopicSubIndent-\glstopicSubIndent\relax \glstopicAssignWidest{#1}% - \hangindent\dimexpr\parindent+\glstopicwidest\relax + \glstopicsubitemhangindent=\dimexpr\parindent+\glstopicwidest\relax + \hangindent\glstopicsubitemhangindent\relax +% \end{macrocode} +%\changes{1.46}{2021-09-20}{bug 182 maintain hangindent for multiple paragraphs} +% \begin{macrocode} + \everypar{\hangindent\glstopicsubitemhangindent\relax + \parindent\dimexpr\glstopicSubItemParIndent+\glstopicsubitemhangindent\relax}% } % \end{macrocode} %\end{macro} % +%\begin{macro}{\glstopicsubitemhangindent} +%\changes{1.46}{2021-09-20}{new} +% \begin{macrocode} +\newlength\glstopicsubitemhangindent +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\glstopicSubItemParIndent} +%\changes{1.46}{2021-09-20}{new} +% \begin{macrocode} +\newlength\glstopicSubItemParIndent +\glstopicSubItemParIndent\parindent +% \end{macrocode} +%\end{macro} +% %\begin{macro}{\glstopicwidest} %\changes{1.40}{2019-03-22}{new} % \begin{macrocode} @@ -34127,6 +34418,182 @@ risus ut urna} %\fi %\iffalse % \begin{macrocode} +%<*example-glossaries-childmultipar.bib> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +% Encoding: UTF-8 +@entry{hiersedmattis, + user1 = {example-image}, + name = {sed mattis}, + description = {Erat sit amet dolor sit amet, consectetuer adipiscing elit. Ut purus +elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur +dictum gravida mauris. Ut pellentesque augue sed urna. Vestibulum +diam eros, fringilla et, consectetuer eu, nonummy id, sapien. Nullam +at lectus. In sagittis ultrices mauris. Curabitur malesuada erat sit +amet massa. Fusce blandit. Aliquam erat volutpat.} +} + +@entry{hierloremi-ii, + parent = {hiersedmattis}, + name = {lorem 1--2}, + description = {Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit, +vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur +dictum gravida mauris. Nam arcu libero, nonummy eget, consectetuer +id, vulputate a, magna. Donec vehicula augue eu neque. Pellentesque +habitant morbi tristique senectus et netus et malesuada fames ac +turpis egestas. Mauris ut leo. Cras viverra metus rhoncus sem. Nulla +et lectus vestibulum urna fringilla ultrices. Phasellus eu tellus +sit amet tortor gravida placerat. Integer sapien est, iaculis in, +pretium quis, viverra ac, nunc. Praesent eget sem vel leo ultrices +bibendum. Aenean faucibus. Morbi dolor nulla, malesuada eu, pulvinar +at, mollis ac, nulla. Curabitur auctor semper nulla. Donec varius +orci eget risus. Duis nibh mi, congue eu, accumsan eleifend, +sagittis quis, diam. Duis eget orci sit amet orci dignissim rutrum. + +Nam dui ligula, fringilla a, euismod sodales, sollicitudin vel, +wisi. Morbi auctor lorem non justo. Nam lacus libero, pretium at, +lobortis vitae, ultricies et, tellus. Donec aliquet, tortor sed +accumsan bibendum, erat ligula aliquet magna, vitae ornare odio +metus a mi. Morbi ac orci et nisl hendrerit mollis. Suspendisse ut +massa. Cras nec ante. Pellentesque a nulla. Cum sociis natoque +penatibus et magnis dis parturient montes, nascetur ridiculus mus. +Aliquam tincidunt urna. Nulla ullamcorper vestibulum turpis. +Pellentesque cursus luctus mauris.} +} + +@entry{hierloremiii-iv, + user1 = {example-image}, + parent = {hiersedmattis}, + name = {lorem 3--4}, + description = {Nulla malesuada porttitor diam. Donec felis erat, congue non, +volutpat at, tincidunt tristique, libero. Vivamus viverra fermentum +felis. Donec nonummy pellentesque ante. Phasellus adipiscing semper +elit. Proin fermentum massa ac quam. Sed diam turpis, molestie +vitae, placerat a, molestie nec, leo. Maecenas lacinia. Nam ipsum +ligula, eleifend at, accumsan nec, suscipit a, ipsum. Morbi blandit +ligula feugiat magna. Nunc eleifend consequat lorem. Sed lacinia +nulla vitae enim. Pellentesque tincidunt purus vel magna. Integer +non enim. Praesent euismod nunc eu purus. Donec bibendum quam in +tellus. Nullam cursus pulvinar lectus. Donec et mi. Nam vulputate +metus eu enim. Vestibulum pellentesque felis eu massa. + +Quisque ullamcorper placerat ipsum. Cras nibh. Morbi vel justo +vitae lacus tincidunt ultrices. Lorem ipsum dolor sit amet, +consectetuer adipiscing elit. In hac habitasse platea dictumst. +Integer tempus convallis augue. Etiam facilisis. Nunc elementum +fermentum wisi. Aenean placerat. Ut imperdiet, enim sed gravida +sollicitudin, felis odio placerat quam, ac pulvinar elit purus eget +enim. Nunc vitae tortor. Proin tempus nibh sit amet nisl. Vivamus +quis tortor vitae risus porta vehicula.} +} + +@entry{hierloremv-vi, + parent = {hiersedmattis}, + name = {lorem 5--6}, + description = {Fusce mauris. Vestibulum luctus nibh at lectus. Sed bibendum, nulla +a faucibus semper, leo velit ultricies tellus, ac venenatis arcu +wisi vel nisl. Vestibulum diam. Aliquam pellentesque, augue quis +sagittis posuere, turpis lacus congue quam, in hendrerit risus eros +eget felis. Maecenas eget erat in sapien mattis porttitor. +Vestibulum porttitor. Nulla facilisi. Sed a turpis eu lacus commodo +facilisis. Morbi fringilla, wisi in dignissim interdum, justo lectus +sagittis dui, et vehicula libero dui cursus dui. Mauris tempor +ligula sed lacus. Duis cursus enim ut augue. Cras ac magna. Cras +nulla. Nulla egestas. Curabitur a leo. Quisque egestas wisi eget +nunc. Nam feugiat lacus vel est. Curabitur consectetuer.% + + +Suspendisse vel felis. Ut lorem lorem, interdum eu, tincidunt sit +amet, laoreet vitae, arcu. Aenean faucibus pede eu ante. Praesent +enim elit, rutrum at, molestie non, nonummy vel, nisl. Ut lectus +eros, malesuada sit amet, fermentum eu, sodales cursus, magna. Donec +eu purus. Quisque vehicula, urna sed ultricies auctor, pede lorem +egestas dui, et convallis elit erat sed nulla. Donec luctus. +Curabitur et nunc. Aliquam dolor odio, commodo pretium, ultricies +non, pharetra in, velit. Integer arcu est, nonummy in, fermentum +faucibus, egestas vel, odio.} +} + +@entry{hiergravida, + name = {gravida}, + description = {Malesuada libero, nonummy eget, consectetuer id, vulputate a, magna. Donec +vehicula augue eu neque. Pellentesque habitant morbi tristique +senectus et netus et malesuada fames ac turpis egestas. Mauris ut +leo. + +Morbi ultrices rutrum lorem. Nam elementum ullamcorper +leo. Morbi dui. Aliquam sagittis. Nunc placerat. Pellentesque +tristique sodales est. Maecenas imperdiet lacinia velit. Cras non +urna. Morbi eros pede, suscipit ac, varius vel, egestas non, eros.} +} + +@entry{hierloremvii-viii, + user1 = {example-image-b}, + parent = {hiergravida}, + name = {lorem 7--8}, + description = {Sed commodo posuere pede. Mauris ut est. Ut quis purus. Sed ac odio. +Sed vehicula hendrerit sem. Duis non odio. Morbi ut dui. Sed +accumsan risus eget odio. In hac habitasse platea dictumst. +Pellentesque non elit. Fusce sed justo eu urna porta tincidunt. +Mauris felis odio, sollicitudin sed, volutpat a, ornare ac, erat. +Morbi quis dolor. Donec pellentesque, erat ac sagittis semper, nunc +dui lobortis purus, quis congue purus metus ultricies tellus. Proin +et quam. Class aptent taciti sociosqu ad litora torquent per conubia +nostra, per inceptos hymenaeos. Praesent sapien turpis, fermentum +vel, eleifend faucibus, vehicula eu, lacus. + +Pellentesque habitant morbi tristique senectus et netus et malesuada +fames ac turpis egestas. Donec odio elit, dictum in, hendrerit sit +amet, egestas sed, leo. Praesent feugiat sapien aliquet odio. +Integer vitae justo. Aliquam vestibulum fringilla lorem. Sed neque +lectus, consectetuer at, consectetuer sed, eleifend ac, lectus. +Nulla facilisi. Pellentesque eget lectus. Proin eu metus. Sed +porttitor. In hac habitasse platea dictumst. Suspendisse eu lectus. +Ut mi mi, lacinia sit amet, placerat et, mollis vitae, dui. Sed ante +tellus, tristique ut, iaculis eu, malesuada ac, dui. Mauris nibh +leo, facilisis non, adipiscing quis, ultrices a, dui.} +} + +@entry{hierloremix-x, + user1 = {example-image-c}, + parent = {hiergravida}, + name = {lorem 9--10}, + description = {Morbi luctus, wisi viverra faucibus pretium, nibh est placerat odio, +nec commodo wisi enim eget quam. Quisque libero justo, consectetuer +a, feugiat vitae, porttitor eu, libero. Suspendisse sed mauris +vitae elit sollicitudin malesuada. Maecenas ultricies eros sit amet +ante. Ut venenatis velit. Maecenas sed mi eget dui varius euismod. +Phasellus aliquet volutpat odio. Vestibulum ante ipsum primis in +faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque +sit amet pede ac sem eleifend consectetuer. Nullam elementum, urna +vel imperdiet sodales, elit ipsum pharetra ligula, ac pretium ante +justo a nulla. Curabitur tristique arcu eu metus. Vestibulum lectus. +Proin mauris. Proin eu nunc eu urna hendrerit faucibus. Aliquam +auctor, pede consequat laoreet varius, eros tellus scelerisque quam, +pellentesque hendrerit ipsum dolor sed augue. Nulla nec lacus. + +Suspendisse vitae elit. Aliquam arcu neque, ornare in, ullamcorper +quis, commodo eu, libero. Fusce sagittis erat at erat tristique +mollis. Maecenas sapien libero, molestie et, lobortis in, sodales +eget, dui. Morbi ultrices rutrum lorem. Nam elementum ullamcorper +leo. Morbi dui. Aliquam sagittis. Nunc placerat. Pellentesque +tristique sodales est. Maecenas imperdiet lacinia velit. Cras non +urna. Morbi eros pede, suscipit ac, varius vel, egestas non, eros. +Praesent malesuada, diam id pretium elementum, eros sem dictum +tortor, vel consectetuer odio sem sed wisi.} +} + +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +% +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} %<*example-glossaries-childnoname.bib> % \end{macrocode} %\fi @@ -34888,6 +35355,193 @@ bibendum quam in tellus.} %\fi %\iffalse % \begin{macrocode} +%<*example-glossaries-longchild.bib> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +% Encoding: UTF-8 +@entry{longsedmattis, + name = {sed mattis}, + description = {erat sit amet dolor sit amet, consectetuer adipiscing elit. Ut purus +elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur +dictum gravida mauris.} +} + +@entry{longgravida, + parent = {longsedmattis}, + name = {gravida}, + description = {malesuada libero, nonummy eget, consectetuer id, vulputate a, magna. Donec +vehicula augue eu neque. Pellentesque habitant morbi tristique +senectus et netus et malesuada fames ac turpis egestas. Mauris ut +leo.} +} + +@entry{longelitaugue, + parent = {longsedmattis}, + name = {elit augue}, + description = {egestas diam metus rhoncus sem. Nulla et lectus vestibulum +urna fringilla ultrices. Phasellus eu tellus sit amet tortor gravida +placerat.} +} + +@entry{longtempus, + parent = {longsedmattis}, + name = {tempus}, + description = {scelerisque est, iaculis in, pretium quis, viverra ac, +nunc. Praesent eget sem vel leo ultrices bibendum. Aenean +faucibus.} +} + +@entry{longnunc, + name = {nunc}, + description = {nisl vitae nulla, malesuada eu, pulvinar at, mollis ac, nulla. +Curabitur auctor semper nulla. Donec varius orci eget risus. Duis +nibh mi, congue eu, accumsan eleifend, sagittis quis, diam. Duis +eget orci sit amet orci dignissim rutrum.} +} + +@entry{longlibero, + parent = {longnunc}, + name = {libero}, + description = {sed consequat ligula, fringilla a, euismod sodales, +sollicitudin vel, wisi. Morbi auctor lorem non justo.} +} + +@entry{longfeugiat, + parent = {longnunc}, + name = {feugiat}, + description = {massa libero, pretium at, lobortis vitae, ultricies et, +tellus. Donec aliquet, tortor sed accumsan bibendum, erat ligula aliquet magna, +vitae ornare odio metus a mi.} +} + +@entry{longporta, + parent = {longnunc}, + name = {porta}, + description = {eros in eleifend orci et nisl hendrerit mollis. Suspendisse ut massa. +Cras nec ante. Pellentesque a nulla. Cum sociis natoque penatibus +et magnis dis parturient montes, nascetur ridiculus mus.} +} + +@entry{longvariuserat, + parent = {longnunc}, + name = {varius erat}, + description = {leo rutrum dui tincidunt urna. Nulla ullamcorper +vestibulum turpis. Pellentesque cursus luctus mauris.} +} + +@entry{longnonconvallis, + name = {non convallis}, + description = {lectus orci ut nibh porttitor diam. Donec felis erat, +congue non, volutpat at, tincidunt tristique, libero. Vivamus +viverra fermentum felis.} +} + +@entry{longsedlorem, + parent = {longnonconvallis}, + name = {sedlorem}, + description = {massa pellentesque ante. Phasellus +adipiscing semper elit. Proin fermentum massa ac quam. Sed diam +turpis, molestie vitae, placerat a, molestie nec, leo.} +} + +@entry{longnonummyquis, + parent = {longnonconvallis}, + name = {nonummy +quis}, + description = {egestas id nam ipsum ligula, eleifend at, accumsan nec, suscipit +a, ipsum. Morbi blandit ligula feugiat magna. Nunc eleifend consequat +lorem.} +} + +@entry{longcondimentum, + name = {condimentum}, + description = {at nisl nulla vitae enim. Pellentesque tincidunt purus +vel magna. Integer non enim. Praesent euismod nunc eu purus. Donec +bibendum quam in tellus.} +} + +@entry{longmaecenas, + parent = {longcondimentum}, + name = {maecenas}, + description = {at nibh fringilla a, euismod sodales, sollicitudin vel, +wisi. Morbi auctor lorem non justo. Nam lacus libero, pretium at, +lobortis vitae, ultricies et, tellus. Donec aliquet, tortor sed +accumsan bibendum, erat ligula aliquet magna, vitae ornare odio +metus a mi. Morbi ac orci et nisl hendrerit mollis. Suspendisse ut +massa. Cras nec ante. Pellentesque a nulla. Cum sociis natoque +penatibus et magnis dis parturient montes, nascetur ridiculus mus. +Aliquam tincidunt urna. Nulla ullamcorper vestibulum turpis. +Pellentesque cursus luctus mauris.} +} + +@entry{longaliquamet, + name = {aliquam et}, + description = {augue felis erat, congue non, +volutpat at, tincidunt tristique, libero. Vivamus viverra fermentum +felis. Donec nonummy pellentesque ante.} +} + +@entry{longatnunc, + parent = {longaliquamet}, + name = {at nunc}, + description = {pellentesque ullamcorper el justo +vitae lacus tincidunt ultrices. Lorem ipsum dolor sit amet, +consectetuer adipiscing elit.} +} + +@entry{longduisnisl, + parent = {longatnunc}, + name = {duisnisl}, + description = {laoreet suscipit ac venenatis arcu +wisi vel nisl. Vestibulum diam. Aliquam pellentesque, augue quis +sagittis posuere, turpis lacus congue quam, in hendrerit risus eros +eget felis. Maecenas eget erat in sapien mattis porttitor.} +} + +@entry{longduisnibh, + parent = {longatnunc}, + name = {duisnibh}, + description = {convallis ut justo lectus +sagittis dui, et vehicula libero dui cursus dui. Mauris tempor +ligula sed lacus. Duis cursus enim ut augue. Cras ac magna.} +} + +@entry{longrutrum, + name = {rutrum}, + description = {id, enim elit, rutrum at, molestie non, nonummy vel, nisl. Ut lectus +eros, malesuada sit amet, fermentum eu, sodales cursus, magna. Donec +eu purus. Quisque vehicula, urna sed ultricies auctor, pede lorem +egestas dui, et convallis elit erat sed nulla.} +} + +@entry{longphasellus, + parent = {longrutrum}, + name = {phasellus}, + description = {odio volutpat a, ornare ac, erat. +Morbi quis dolor. Donec pellentesque, erat ac sagittis semper, nunc +dui lobortis purus, quis congue purus metus ultricies tellus. Proin +et quam.} +} + +@entry{longnullanulla, + parent = {longrutrum}, + name = {nulla nulla}, + description = {elit, molestie non wisi viverra faucibus pretium, nibh est placerat odio, +nec commodo wisi enim eget quam. Quisque libero justo, consectetuer +a, feugiat vitae, porttitor eu, libero.} +} + +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +% +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} %<*example-glossaries-multipar.bib> % \end{macrocode} %\fi diff --git a/macros/latex/contrib/glossaries-extra/glossaries-extra.ins b/macros/latex/contrib/glossaries-extra/glossaries-extra.ins index cc2f94010c..298b3991a9 100644 --- a/macros/latex/contrib/glossaries-extra/glossaries-extra.ins +++ b/macros/latex/contrib/glossaries-extra/glossaries-extra.ins @@ -1,10 +1,10 @@ -% glossaries-extra.ins generated using makedtx version 1.2 2020/4/1 13:56 +% glossaries-extra.ins generated using makedtx version 1.2 2021/9/22 14:44 \input docstrip \preamble glossaries-extra.dtx - Copyright 2020 Nicola Talbot + Copyright 2021 Nicola Talbot This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3 @@ -18,7 +18,7 @@ The Current Maintainer of this work is Nicola Talbot. - This work consists of the files glossaries-extra.dtx and glossaries-extra.ins and the derived files glossaries-extra.sty, glossaries-extra-bib2gls.sty, glossaries-extra-stylemods.sty, glossary-bookindex.sty, glossary-longextra.sty, glossary-topic.sty, example-glossaries-xr.tex, example-glossaries-acronym-desc.bib, example-glossaries-acronym.bib, example-glossaries-acronyms-lang.bib, example-glossaries-brief.bib, example-glossaries-childnoname.bib, example-glossaries-cite.bib, example-glossaries-images.bib, example-glossaries-long.bib, example-glossaries-multipar.bib, example-glossaries-parent.bib, example-glossaries-symbolnames.bib, example-glossaries-symbols.bib, example-glossaries-url.bib, example-glossaries-xr.bib. + This work consists of the files glossaries-extra.dtx and glossaries-extra.ins and the derived files glossaries-extra.sty, glossaries-extra-bib2gls.sty, glossaries-extra-stylemods.sty, glossary-bookindex.sty, glossary-longextra.sty, glossary-topic.sty, example-glossaries-xr.tex, example-glossaries-acronym-desc.bib, example-glossaries-acronym.bib, example-glossaries-acronyms-lang.bib, example-glossaries-brief.bib, example-glossaries-childmultipar.bib, example-glossaries-childnoname.bib, example-glossaries-cite.bib, example-glossaries-images.bib, example-glossaries-long.bib, example-glossaries-longchild.bib, example-glossaries-multipar.bib, example-glossaries-parent.bib, example-glossaries-symbolnames.bib, example-glossaries-symbols.bib, example-glossaries-url.bib, example-glossaries-xr.bib. \endpreamble @@ -42,10 +42,12 @@ \file{example-glossaries-acronym.bib}{\nopreamble\nopostamble\from{glossaries-extra.dtx}{example-glossaries-acronym.bib}} \file{example-glossaries-acronyms-lang.bib}{\nopreamble\nopostamble\from{glossaries-extra.dtx}{example-glossaries-acronyms-lang.bib}} \file{example-glossaries-brief.bib}{\nopreamble\nopostamble\from{glossaries-extra.dtx}{example-glossaries-brief.bib}} +\file{example-glossaries-childmultipar.bib}{\nopreamble\nopostamble\from{glossaries-extra.dtx}{example-glossaries-childmultipar.bib}} \file{example-glossaries-childnoname.bib}{\nopreamble\nopostamble\from{glossaries-extra.dtx}{example-glossaries-childnoname.bib}} \file{example-glossaries-cite.bib}{\nopreamble\nopostamble\from{glossaries-extra.dtx}{example-glossaries-cite.bib}} \file{example-glossaries-images.bib}{\nopreamble\nopostamble\from{glossaries-extra.dtx}{example-glossaries-images.bib}} \file{example-glossaries-long.bib}{\nopreamble\nopostamble\from{glossaries-extra.dtx}{example-glossaries-long.bib}} +\file{example-glossaries-longchild.bib}{\nopreamble\nopostamble\from{glossaries-extra.dtx}{example-glossaries-longchild.bib}} \file{example-glossaries-multipar.bib}{\nopreamble\nopostamble\from{glossaries-extra.dtx}{example-glossaries-multipar.bib}} \file{example-glossaries-parent.bib}{\nopreamble\nopostamble\from{glossaries-extra.dtx}{example-glossaries-parent.bib}} \file{example-glossaries-symbolnames.bib}{\nopreamble\nopostamble\from{glossaries-extra.dtx}{example-glossaries-symbolnames.bib}} diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-abbr-styles.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-abbr-styles.pdf index f90e2bf9e0..b1299241f2 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-abbr-styles.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-abbr-styles.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-abbrv.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-abbrv.pdf index 3ba4c0d2c3..2400e7c85c 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-abbrv.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-abbrv.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-accsupp.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-accsupp.pdf index c070b1a1c1..198218b782 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-accsupp.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-accsupp.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-acronym-desc.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-acronym-desc.pdf index b1ca94ef98..37562e0818 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-acronym-desc.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-acronym-desc.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-acronym.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-acronym.pdf index e5d3aabee0..ff21c49fcb 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-acronym.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-acronym.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-alias.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-alias.pdf index 5f95e8c10d..257379eeb2 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-alias.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-alias.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-altmodifier.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-altmodifier.pdf index 4bf0cfc14b..2d3943e797 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-altmodifier.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-altmodifier.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-alttree-marginpar.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-alttree-marginpar.pdf index d87c56c028..b04fd8815e 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-alttree-marginpar.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-alttree-marginpar.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-alttree-sym.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-alttree-sym.pdf index 6b2326755e..5cd51b3fe3 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-alttree-sym.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-alttree-sym.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-alttree.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-alttree.pdf index 5ace7e5e2e..67ac0e9685 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-alttree.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-alttree.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-autoindex-hyp.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-autoindex-hyp.pdf index cf75773e80..d26fcb43ec 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-autoindex-hyp.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-autoindex-hyp.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-autoindex.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-autoindex.pdf index 44d3c2df33..3a355e13db 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-autoindex.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-autoindex.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-crossref.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-crossref.pdf index 6656a68b92..975fc7d22f 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-crossref.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-crossref.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-crossref2.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-crossref2.pdf index 0dc9e3931c..d3f6f7e928 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-crossref2.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-crossref2.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-docdef.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-docdef.pdf index 1b88b47f31..5dbe569182 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-docdef.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-docdef.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-entrycount.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-entrycount.pdf index f376f4b6e8..4cbd165528 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-entrycount.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-entrycount.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-external.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-external.pdf index cdcf6be76a..02c66a6935 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-external.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-external.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-fmt.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-fmt.pdf index 9d57d9290a..93864f595a 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-fmt.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-fmt.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-footnote.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-footnote.pdf index 4b0605157c..a858c01203 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-footnote.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-footnote.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-header.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-header.pdf index f48bb2ab24..5e45a1b41e 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-header.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-header.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-indexhook.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-indexhook.pdf index 78849f09e4..1d0ede157d 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-indexhook.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-indexhook.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-initialisms.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-initialisms.pdf index 3ccebde9f1..fce7ed81a7 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-initialisms.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-initialisms.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-linkcount.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-linkcount.pdf index d0bd830ca0..82cb9cd64a 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-linkcount.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-linkcount.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-mixed-abbrv-styles.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-mixed-abbrv-styles.pdf index ead60a83b4..7af132fb1c 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-mixed-abbrv-styles.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-mixed-abbrv-styles.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-mixedsort.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-mixedsort.pdf index 6aedfbfd3b..229d7922cd 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-mixedsort.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-mixedsort.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-mixture.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-mixture.pdf index 642c20dbf7..d5fa7b0a80 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-mixture.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-mixture.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-name-font.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-name-font.pdf index 32a0b98094..93e99f7519 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-name-font.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-name-font.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-nested.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-nested.pdf index 5da7a933d6..5e063f838a 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-nested.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-nested.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-noidx-restricteddocdefs.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-noidx-restricteddocdefs.pdf index 28bdb492a3..283df168fc 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-noidx-restricteddocdefs.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-noidx-restricteddocdefs.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-onelink.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-onelink.pdf index 3a408d73d1..a601bd8488 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-onelink.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-onelink.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-onthefly-utf8.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-onthefly-utf8.pdf index e381014d44..91f073b81b 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-onthefly-utf8.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-onthefly-utf8.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-onthefly-xetex.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-onthefly-xetex.pdf index 5c4220a185..286372c39d 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-onthefly-xetex.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-onthefly-xetex.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-onthefly.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-onthefly.pdf index eee065e89a..566b741cea 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-onthefly.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-onthefly.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-pages.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-pages.pdf index e86ecc0201..33ac172987 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-pages.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-pages.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-postdot.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-postdot.pdf index 8d4c7cdc2e..f93e89c9d1 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-postdot.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-postdot.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-postlink.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-postlink.pdf index a4c0b17bda..eca5f53942 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-postlink.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-postlink.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-prefix.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-prefix.pdf index 3eede737cf..800f944c73 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-prefix.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-prefix.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-record-nameref.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-record-nameref.pdf index e37e644536..a4733fb80f 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-record-nameref.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-record-nameref.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-record.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-record.pdf index d003fbd686..b3d2a6d6ec 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-record.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-record.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-restricteddocdefs.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-restricteddocdefs.pdf index 4b702408d2..f59d5c8939 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-restricteddocdefs.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-restricteddocdefs.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-suppl-hyp.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-suppl-hyp.pdf index 2b624456f4..929979828e 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-suppl-hyp.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-suppl-hyp.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-suppl-main-hyp.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-suppl-main-hyp.pdf index f4123f6561..b16334edb1 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-suppl-main-hyp.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-suppl-main-hyp.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-suppl-main.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-suppl-main.pdf index 63142c9f26..472db7f7e5 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-suppl-main.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-suppl-main.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-suppl.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-suppl.pdf index b3978b8883..e4f92a66ca 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-suppl.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-suppl.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-trans.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-trans.pdf index f2f7259725..d101c737ab 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-trans.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-trans.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-undef.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-undef.pdf index 82d972fd7d..6d3589f719 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-undef.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-undef.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample-unitentrycount.pdf b/macros/latex/contrib/glossaries-extra/samples/sample-unitentrycount.pdf index ad37602acd..c55c48ed61 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample-unitentrycount.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample-unitentrycount.pdf differ diff --git a/macros/latex/contrib/glossaries-extra/samples/sample.pdf b/macros/latex/contrib/glossaries-extra/samples/sample.pdf index 61564941cd..3d229abd18 100644 Binary files a/macros/latex/contrib/glossaries-extra/samples/sample.pdf and b/macros/latex/contrib/glossaries-extra/samples/sample.pdf differ diff --git a/macros/latex/contrib/glossaries/CHANGES b/macros/latex/contrib/glossaries/CHANGES index 9b66723996..95fcef16c5 100644 --- a/macros/latex/contrib/glossaries/CHANGES +++ b/macros/latex/contrib/glossaries/CHANGES @@ -1,5 +1,111 @@ glossaries change log: +v4.47 (2021-09-20): + + * added new files containing dummy entries for testing: + + - example-glossaries-longchild.tex + - example-glossaries-childmultipar.tex + + * glossaries.sty: + + - Rollback to v4.46 is available, if necessary: + + \usepackage{glossaries}[=v4.46] + + - bug fix #173 https://www.dickimaw-books.com/bugtracker.php?key=173 + (.glsdefs not updated if entry definition modified) + + This bug fix has also led to support for the use of the 'see' key + within the document environment. + + ** Delete your .glsdefs files on upgrading ** + + Note that this update slightly changes the format of the .glsdefs file. + If you have a system that parses this file (for example, to pick + up labels for autocompletion) it will need to be modified. + + Old format: + +\ifglsentryexists{

    -

    +

    -

    +

    -

    -

    User Manual for glossaries.sty v4.46 +

    +

    User Manual for glossaries.sty v4.47

    dickimaw-books.com/contact
    -

    2020-03-19

    +

    2021-09-20

    -

    +

    -
    -

    -

    Abstract

    -

    The glossaries package provides a means to define terms or abbreviations or symbols that can be referenced within -your document. Sorted lists with collated locations can be generated either using TeX or using a supplementary - +Abstract + +

    The glossaries package provides a means to define terms or abbreviations or symbols that can be referenced +within your document. Sorted lists with collated locations can be generated either using TeX or using a +supplementary indexing application. Sample documents are provided with the glossaries package. These are listed in §19 Sample -Documents. -

    +class="cmss-10">glossaries package. These are +listed in §18 Sample Documents. +

    -

    Additional features not provided here may be available through the extension package

    Additional features not provided here may be available through the extension package glossaries-extra which, if required, needs to be installed separately. New features will be added to bib2gls) which isn’t available with just the base glossaries package.
    -

    -

    If you require multilingual support you must also separately install the relevant language module. Each +

    +

    If you require multilingual support you must also separately install the relevant language module. Each language module is distributed under the name glossaries-language⟩, where ⟨title key in \printglossary.) -

    The

    The glossaries package requires a number of other packages including, but not limited to, tracklang, How do I update my TeX distribution? or (for Linux users) Updating TeX on Linux. -

    Note that occasionally you may find that certain packages need to be loaded

    Note that occasionally you may find that certain packages need to be loaded after packages that are required by glossaries. For example, a package ⟨amsgen), then ⟨X⟩, and finally load glossaries. -

    Documents have wide-ranging styles when it comes to presenting glossaries or lists of terms or +

    Documents have wide-ranging styles when it comes to presenting glossaries or lists of terms or notation. People have their own preferences and to a large extent this is determined by the kind of information that needs to go in the glossary. They may just have symbols with terse descriptions or they may have long technical words with complicated descriptions. The glossaries package is flexible enough to accommodate such varied requirements, but this flexibility comes at a price: a big manual. -

    😱 If you’re freaking out at the size of this manual, start with

    😱 If you’re freaking out at the size of this manual, start with glossariesbegin.pdf (“The glossaries package: a guide for beginnners”). You should find it in the same directory as this document or try texdoc glossariesbegin.pdf. Once you’ve got to grips with the basics, then come back to this manual to find out how to adjust the settings.

    -

    -

    The glossaries bundle comes with the following documentation: +

    +

    The glossaries bundle includes the following documentation:

    +

    glossariesbegin.pdf

    If you are a complete beginner, start with “The glossaries package: a guide for - beginners”. -
    -glossary2glossaries.pdf
    If you are moving over from the obsolete glossary package, read “Upgrading - from the glossary package to the glossaries package”. +class="cmtt-10">glossariesbegin.pdf

    +

    If you are a complete beginner, start with “The glossaries package: a guide for beginners”. +

    +

    -

    glossaries-user.pdf
    This document is the main user guide for the glossaries-user.pdf

    +

    This document is the main user guide for the glossaries package. -

    +

    +

    glossaries-code.pdf

    Advanced users wishing to know more about the inner workings of all the - packages provided in the glossaries bundle should read “Documented Code for glossaries v4.46”. -
    -INSTALL
    Installation instructions. -
    +class="cmtt-10">glossaries-code.pdf

    +

    Advanced users wishing to know more about the inner workings of all the packages provided in the + glossaries bundle should read “Documented Code for glossaries v4.47”. +

    +

    CHANGES

    Change log. -
    +class="cmbx-10">CHANGES

    +

    Change log. +

    +

    README.md

    Package summary. +class="cmbx-10">README.md

    +

    Package summary. +

    -

    Related resources:

    +

    Related resources:

    -

    If you use bib2gls

    +

    If you use hyperref and and glossaries, you must load hyperref first (although hyperref should be loaded after + id="dx1-18"> should be loaded after most other packages). Similarly the doc package must also be loaded before package must also be loaded before glossaries. (If doc is loaded, the file + id="dx1-20"> is loaded, the file extensions for the default main glossary are changed to gls2, , glo2 and and glg2 to avoid conflict with to avoid conflict with doc’s changes + id="dx1-24">’s changes glossary.) - - -

    If you are using

    If you are using hyperref, it’s best to use , it’s best to use pdflatex rather than rather than latex (DVI format) as (DVI format) as pdflatex deals with hyperlinks much better. If you use the DVI format, you will encounter problems where you have long hyperlinks or hyperlinks in subscripts or superscripts. This is an issue with the DVI format not with glossaries-extra with the hyperoutside and and textformat attributes set to appropriate values for problematic entries. + id="dx1-29"> attributes set to appropriate values for problematic entries.

    -

    -

    The

    +

    The glossaries package replaces the glossary package which is now obsolete. Please see the document Dummy Entries for Testing href="#sec:languages" id="QQ2-1-15">Multi-Lingual Support
      1.3.1 Changing the Fixed Names +
      1.3.2 Creating a New Language Module
     1.4 Generating the Associated Glossary Files
      1.4.1 Using the makeglossaries Perl Script
      1.4.2
    Using the makeglossaries-lite Lua Script

      1.4.3 Using xindy explicitly (Option 3) +href="#sec:xindyapp" id="QQ2-1-23">Using xindy explicitly (Option3)
      1.4.4 Using makeindex explicitly (Option 2) +href="#sec:makeindexapp" id="QQ2-1-24">Using makeindex explicitly (Option2)
     1.5 Note to Front-End and Script Developers
      1.5.1 Package Options
     2.1 General Options
     2.2 Sectioning, Headings and TOC Options +href="#sec:pkgopts-sec" id="QQ2-1-43">Sectioning, Headings and TOC Options
     2.3 Glossary Appearance Options +href="#sec:pkgopts-printglos" id="QQ2-1-49">Glossary Appearance Options
     2.4 Indexing Options +href="#sec:pkgopts-indexing" id="QQ2-1-66">Indexing Options
     2.5 Sorting Options +href="#sec:pkgopts-sort" id="QQ2-1-76">Sorting Options
     2.6 Glossary Type Options +href="#sec:pkgopts-type" id="QQ2-1-87">Glossary Type Options
     2.7 Acronym and Abbreviation Options -
      2.7.1 Deprecated Acronym Style Options +href="#sec:pkgopts-acronym" id="QQ2-1-94">Acronym and Abbreviation Options
     2.8 Other Options +href="#sec:pkgopts-old-acronym" id="QQ2-1-100">Deprecated Acronym Style Options
     2.9 Setting Options After the Package is Loaded +href="#sec:pkgopts-other" id="QQ2-1-106">Other Options +
     2.10 Setting Options After the Package is Loaded
    3 Setting Up +href="#sec:setup" id="QQ2-1-114">Setting Up
     3.1 Option 1 +href="#sec:setupopt1" id="QQ2-1-115">Option 1
     3.2 Options 2 and 3 +href="#sec:setupopt23" id="QQ2-1-116">Options 2 and 3
    4 Defining Glossary Entries +href="#sec:newglosentry" id="QQ2-1-117">Defining Glossary Entries
     4.1 Plurals +href="#sec:plurals" id="QQ2-1-118">Plurals
     4.2 Other Grammatical Constructs +href="#sec:grammar" id="QQ2-1-119">Other Grammatical Constructs
     4.3 Additional Keys +href="#sec:addkey" id="QQ2-1-120">Additional Keys
      4.3.1 Document Keys -
      4.3.2 Storage Keys +href="#sec:glsaddkey" id="QQ2-1-121">Document Keys +
      4.3.2 Storage Keys
     4.4 Expansion +href="#sec:expansion" id="QQ2-1-123">Expansion
     4.5 Sub-Entries +href="#sec:subentries" id="QQ2-1-125">Sub-Entries
      4.5.1 Hierarchical Categories +href="#sec:hierarchical" id="QQ2-1-126">Hierarchical Categories
      4.5.2 Homographs +href="#sec:homographs" id="QQ2-1-127">Homographs
     4.6 Loading Entries From a File +href="#sec:loadglsentries" id="QQ2-1-128">Loading Entries From a File
     4.7 Moving Entries to Another Glossary +href="#sec:moveentry" id="QQ2-1-129">Moving Entries to Another Glossary
     4.8 Drawbacks With Defining Entries in the Document Environment +href="#sec:docdefs" id="QQ2-1-130">Drawbacks With Defining Entries in the Document Environment
      4.8.1 Technical Issues +href="#sec:techissues" id="QQ2-1-131">Technical Issues
      4.8.2 Good Practice Issues +href="#sec:goodpractice" id="QQ2-1-132">Good Practice Issues
    5 Number lists +href="#sec:usingentries" id="QQ2-1-133">Referencing Entries in the Document
     5.1 Encap Values +href="#sec:glslink" id="QQ2-1-134">Links to Glossary Entries +
      5.1.1 The \gls-Like Commands (First Use Flag Queried) +
      5.1.2 The \glstext-Like Commands (First Use Flag Not Queried) +
      5.1.3 Changing the format of the link text +
      5.1.4 Enabling and disabling hyperlinks to glossary entries
     5.2 Locations -
     5.3 Range Formations -
     5.4 Style Hook +href="#sec:glsnolink" id="QQ2-1-140">Using Glossary Terms Without Links
    6 Links to Glossary Entries +href="#sec:acronyms" id="QQ2-1-141">Acronyms and Other Abbreviations
     6.1 The \gls-Like Commands (First Use Flag Queried) +href="#sec:longshortfull" id="QQ2-1-142">Displaying the Long, Short and Full Forms (Independent of First Use)
     6.2 The \glstext-Like Commands (First Use Flag Not Queried) +href="#sec:setacronymstyle" id="QQ2-1-144">Changing the Acronym Style +
      6.2.1 Predefined Acronym Styles +
      6.2.2 Defining A Custom Acronym Style
     6.3 Changing the format of the link text +href="#sec:disploa" id="QQ2-1-147">Displaying the List of Acronyms
     6.4 Enabling and disabling hyperlinks to glossary entries +href="#sec:oldacronym" id="QQ2-1-148">Upgrading From the glossary Package
    7 Adding an Entry to the Glossary Without Generating Text +href="#sec:glsunset" id="QQ2-1-150">Unsetting and Resetting Entry Flags +
     7.1 Counting the Number of Times an Entry has been Used (First Use Flag Unset)
    8 Cross-Referencing Entries -
     8.1 Customising Cross-reference Text +href="#sec:printglossary" id="QQ2-1-152">Displaying a Glossary
    9 Using Glossary Terms Without Links +href="#sec:newglossary" id="QQ2-1-153">Defining New Glossaries
    10 Displaying a glossary +href="#sec:glsadd" id="QQ2-1-154">Adding an Entry to the Glossary Without Generating Text
    11 Xindy (Option 3) +href="#sec:crossref" id="QQ2-1-155">Cross-Referencing Entries
     11.1 Language and Encodings -
     11.2 Locations and Number lists -
     11.3 Glossary Groups +href="#sec:customxr" id="QQ2-1-156">Customising Cross-reference Text
    12 Defining New Glossaries +href="#sec:numberlists" id="QQ2-1-157">Number Lists +
     12.1 Encap Values (Location Formats) +
     12.2 Locations +
     12.3 Range Formations +
     12.4 Style Hook
    13 Acronyms and Other Abbreviations +href="#sec:styles" id="QQ2-1-162">Glossary Styles
     13.1 Changing the Abbreviation Style +href="#sec:predefinedstyles" id="QQ2-1-163">Predefined Styles
      13.1.1 Predefined Acronym Styles +href="#sec:liststyles" id="QQ2-1-165">List Styles
      13.1.2 Defining A Custom Acronym Style +href="#sec:longstyles" id="QQ2-1-166">Longtable Styles +
      13.1.3 Longtable Styles (Ragged Right) +
      13.1.4 Longtable Styles (booktabs) +
      13.1.5 Supertabular Styles +
      13.1.6 Supertabular Styles (Ragged Right) +
      13.1.7 Tree-Like Styles +
      13.1.8 Multicols Style + + +
      13.1.9 In-Line Style
     13.2 Displaying the List of Acronyms -
     13.3 Upgrading From the glossary Package +href="#sec:newglossarystyle" id="QQ2-1-175">Defining your own glossary style
    14 Unsetting and Resetting Entry Flags +href="#sec:xindy" id="QQ2-1-176">Xindy (Option 3)
     14.1 Counting the Number of Times an Entry has been Used (First Use Flag Unset) +href="#sec:langenc" id="QQ2-1-177">Language and Encodings +
     14.2 Locations and Number lists +
     14.3 Glossary Groups
    15 Glossary Styles +href="#sec:utilities" id="QQ2-1-180">Utilities
     15.1 Predefined Styles -
      15.1.1 List Styles -
      15.1.2 Longtable Styles -
      15.1.3 Longtable Styles (Ragged Right) -
      15.1.4 Longtable Styles (booktabs) -
      15.1.5 Supertabular Styles -
      15.1.6 Supertabular Styles (Ragged Right) -
      15.1.7 Tree-Like Styles - - -
      15.1.8 Multicols Style -
      15.1.9 In-Line Style +href="#sec:loops" id="QQ2-1-181">Loops
     15.2 Defining your own glossary style +href="#sec:conditionals" id="QQ2-1-182">Conditionals +
     15.3 Fetching and Updating the Value of a Field
    16 Utilities -
     16.1 Loops -
     16.2 Conditionals -
     16.3 Fetching and Updating the Value of a Field +href="#sec:prefix" id="QQ2-1-184">Prefixes or Determiners
    17 Prefixes or Determiners +href="#sec:accsupp" id="QQ2-1-185">Accessibility Support
    18 Accessibility Support +href="#sec:samples" id="QQ2-1-186">Sample Documents +
     18.1 Basic +
     18.2 Acronyms and First Use +
     18.3 Non-Page Locations +
     18.4 Multiple Glossaries +
     18.5 Sorting +
     18.6 Child Entries +
     18.7 Cross-Referencing +
     18.8 Custom Keys +
     18.9 Xindy (Option 3) +
     18.10 No Indexing Application (Option 1) +
     18.11 Other
    19 Sample Documents -
     19.1 Basic -
     19.2 Acronyms and First Use -
     19.3 Non-Page Locations -
     19.4 Multiple Glossaries -
     19.5 Sorting -
     19.6 Child Entries -
     19.7 Cross-Referencing -
     19.8 Custom Keys -
     19.9 Xindy (Option 3) -
     19.10 No Indexing Application (Option 1) -
     19.11 Other -
    20 Troubleshooting +href="#sec:trouble" id="QQ2-1-240">Troubleshooting

    @@ -1816,14 +1860,14 @@ href="#tab:predefinednames">Customised Text
    Commands and package options that have no effect when using xindy or makeindex explicitly
    4.1 Key to Field Mappings
    6.1 Key to Field Mappings
    5.1 Predefined Hyperlinked Location -Formats
    13.1 
    6.1 
    Synonyms provided by the package option shortcuts
    13.2 The -effect of using xspace
    15.1 Glossary Styles
    15.2 shortcuts
    6.2 The effect +of using xspace
    13.1 Glossary Styles
    13.2 Multicolumn Styles
    @@ -1832,16 +1876,17 @@ href="#tab:mcols">Multicolumn Styles

    Glossary

    + id="x1-30001">Glossary

    This glossary style was setup using:

    xindy,

    nonumberlist,

    toc,

    nopostdot,

    style=altlist,

    glossaries}

    +

    bib2gls


    +


    An indexing application that combines two functions in one: (1) fetches entry definition from a bibglossaries-extra and can’t be used with just th class="cmss-10">glossaries package. See Option 4.
    -

    +

    +

    Command Line Interface (CLI)


    Command Line Interface (CLI)

    +


    An application that doesn’t have a graphical user interface. That is, an application that doesn’t have any windows, buttons or menus and can be run in a command prompt or terminal.
    -

    +

    +

    convertgls2bib


    +


    An application provided with bib2glsbibbib2gls. This application is designed for files that just contain entry + + definitions, but it can work on a complete document file. However, there will be a lot of “undefined command” warnings as bib2gls v2.0).
    -

    +

    +

    Entry location


    +


    The location of the entry in the document. This defaults to the page number on which the entry appears. An entry may have multiple locations.
    -

    +

    +

    Extended Latin Alphabet


    +


    An alphabet consisting of Latin characters and extended Latin characters.
    -

    +

    +

    Extended Latin Character


    +


    A character that’s created by combining Latin characters to form ligatures (e.g. æ) or by applying @@ -1989,12 +2048,14 @@ href="#glo:latinchar">Latin characternon-Latin character.
    -

    +

    +

    First use


    +


    The first time a glossary entry is used (from the start of the document or after a reset) with one of the following commands: \glsfirst use flag & first use text.)
    -

    +

    +

    First use flag


    +


    A conditional that determines whether or not the entry has been used according to the rules of first use. Commands to unset or reset this conditional are described in §14 Unsetting and Resetting - Entry Flags.
    §??sec:glsunset Unsetting + and Resetting Entry Flags.
    -

    + + +

    +

    First use text


    +


    The text that is displayed on first use, which is governed by the first\glsdisp\defglsentry.)
    -

    +

    +

    glossaries-extra


    glossaries-extra

    +


    A separate package that extends the glossaries package, providing new features or improving existing features. If you want to use glossaries package and the glossaries-extra package installed.
    -

    +

    +

    Indexing application


    Indexing application

    +


    An application (piece of software) separate from TeX/LaTeX that collates and sorts information that has an associated page reference. Generally the information is an index entry but in this case the information is a glossary entry. There are two main indexing applications that are used with @@ -2078,25 +2150,27 @@ class="cmtt-10">xindy. These are both command line interface (CLI) applications.
    - - -

    +

    +

    Latin Alphabet


    +


    The alphabet consisting of Latin characters. See also extended Latin alphabet.
    -

    +

    +

    Latin Character


    +


    One of the letters a, …, z, Z. See also extended Latin character.
    -

    +

    +

    Link text


    + + +


    The text produced by commands such as \gls. It may or may not be a hyperlink to the glossary.
    -

    +

    +

    makeglossaries


    +


    A custom designed Perl script interface to xindymakeglossaries script into an executable makeglossaries.exe for convenience (but Perl is still required).
    -

    +

    +

    makeglossariesgui


    +


    A Java GUI alternative to makeglossariesmakeglossariesCTAN.
    -

    +

    +

    makeglossaries-lite


    +


    A custom designed Lua script interface to xindy.lua extension) to the actual makeglossaries-lite.lua script.
    -

    +

    +

    makeindex


    +


    An indexing application. See Option 2.
    -

    +

    +

    Non-Latin Alphabet


    + + +


    An alphabet consisting of non-Latin characters.
    - - -

    +

    +

    Non-Latin Character


    +


    An extended Latin character or a character that isn’t a Latin character.
    -

    +

    +

    Number list


    +


    A list of entry locations (also called a location list). The number list can be suppressed using the nonumberlist package option.
    -

    +

    +

    Sanitize


    +


    Converts command names into character sequences. That is, a command called, say, \foo, is converted into the sequence of characters: o, o. Depending on the font, the backslash character may appear as a dash when used in the main document text, so \foo will appear as: —foo. -

    Earlier versions of

    Earlier versions of glossaries used this technique to write information to the files used by the indexing applications to prevent problems caused by fragile commands. Now, this is only used for the sortsort

    +

    Small caps


    +


    Small capitals. The LaTeX kernel provides \textsctext⟩ should be uppercase (otherwise the effect slanted properties. In this case, there will be a font substitution warning and one of the properties (such as small caps or slanted) will be dropped.
    -

    + + +

    +

    Standard LaTeX Extended Latin Character


    +


    An extended Latin character that can be created by a core LaTeX command, such as \o (ø) or \’e (é). That is, the character can be produced without the need to load a particular package.
    -

    +

    +

    +UTF-8

    +


    A variable-width character encoding. This means that some characters are represented by more + that one byte. XeLaTeX and LuaLaTeX treat the multi-byte sequence as a single token, but the + older LaTeX formats have single-byte tokens, which causes complications. Related blog article: + Binary Files, Text Files and File Encodings.
    +

    +

    xindy


    +


    A flexible indexing application with multilingual support written in Perl. See Option 3.

    +class="newline" />

    -

    1.

    1. Introduction

    -

    The

    The glossaries package is provided to assist generating lists of terms, symbols or abbreviations. (For convenience, these lists are all referred to as glossaries in this manual. The terms, symbols and abbreviations are collectively referred to as entries.) The package has a certain amount of flexibility, allowing the user to customize the format of the glossary and define multiple glossaries. It also supports glossary styles that include an associated symbol (in addition to a name and description) for each glossary entry. -

    There is provision for loading a database of glossary entries. Only those entries +

    There is provision for loading a database of glossary entries. Only those entries indexed1.1 in the document will be displayed in the glossary. (Unless you use Option 5, which doesn’t use any indexing but will instead list all defined entries in order of definition.) -

    It’s not necessary to actually have a glossary in the document. You may be interested in using this package +

    It’s not necessary to actually have a glossary in the document. You may be interested in using this package just as means to consistently format certain types of terms, such as abbreviations, or you may prefer to have descriptions scattered about the document and be able to easily link to the relevant description (Option 6). -

    The simplest document is one without a glossary: +

    The simplest document is one without a glossary:

    -
    +
     \documentclass{article}
    - 
    \usepackage[ - 
      sort=none % no sorting or indexing required - 
    ] - 
    {glossaries} - 
    \newglossaryentry - 
     {cafe}% label - 
     {% definition: - 
       name={caf\'e}, - 
       description={small restaurant selling refreshments} - 
     } - 
    \setacronymstyle{long-short} - 
    \newacronym - 
     {html}% label - 
     {HTML}% short form - 
     {hypertext markup language}% long form - 
    \newglossaryentry - 
     {pi}% label - 
     {% definition: - 
       name={\ensuremath{\pi}}, - 
       description={Archimedes' Constant} - 
     } - 
    \newglossaryentry - 
     {distance}% label - 
     {% definition: - 
       name={distance}, - 
       description={the length between two points}, - 
       symbol={m} - 
     } - 
    \begin{document} - 
    First use: \gls{cafe}, \gls{html}, \gls{pi}. - 
    Next use: \gls{cafe}, \gls{html}, \gls{pi}. - 
    \Gls{distance} (\glsentrydesc{distance}) is measured in - 
    \glssymbol{distance}. - 
    \end{document} -
    -

    (This is a trivial example. For a real document I recommend you use +

    (This is a trivial example. For a real document I recommend you use siunitx for units.) -



    glossaries-extraThe glossaries package):

    -
    +
     \documentclass{article}
    -
    -

    + +

    \usepackage[ @@ -2435,15 +2551,15 @@ class="cmtt-10">]{glossaries-extra}
    -
    +
     \newglossaryentry % provided by glossaries.sty
    - 
     {cafe}% label - 
     {% definition: - 
       name={caf\'e}, - 
       description={small restaurant selling refreshments} - 
     } -
    -

    + {cafe}% label + {% definition: +   name={caf\'e}, +   description={small restaurant selling refreshments} + } + +

    % symbol
    -
    +
     \newglossaryentry % provided by glossaries.sty
    - 
     {distance}% label - 
     {% definition: - 
       name={distance}, - 
       description={the length between two points}, - 
       symbol={m} - 
     } - 
    \begin{document} - 
    First use: \gls{cafe}, \gls{html}, \gls{pi}. - 
    Next use: \gls{cafe}, \gls{html}, \gls{pi}. - 
    \Gls{distance} is measured in \glssymbol{distance}. -
    -

    + {distance}% label + {% definition: +   name={distance}, +   description={the length between two points}, +   symbol={m} + } +\begin{document} +First use: \gls{cafe}, \gls{html}, \gls{pi}. +Next use: \gls{cafe}, \gls{html}, \gls{pi}. +\Gls{distance} is measured in \glssymbol{distance}. + +

    \printunsrtglossariesglossaries-extra. Other options are passed to the base glossaries package. -

    In this document, commands and options displayed in teal, such as

    In this user manual, commands and options displayed in teal, such as \newabbreviation and stylemods, are @@ -2557,13 +2673,13 @@ class="cmss-10">glossaries-extra package. See the glossaries-extra user manual for further details of those commands.
    -

    -

    One of the strengths of the

    +

    One of the strengths of the glossaries package is its flexibility, however the drawback of this is the necessity of having a large manual that covers all the various settings. If you are daunted by the size of the manual, try starting off with the much shorter guide for beginners. -

    There’s a common misconception that you have to have Perl installed in order to use the

    There’s a common misconception that you have to have Perl installed in order to use the glossaries package. Perl is not a requirement (as demonstrated by the above examples) but it does increase the @@ -2571,8 +2687,8 @@ available options, particularly if you use an extended Latin alphabet or a non-Latin alphabet.
    -

    -

    This document uses the

    +

    This document uses the glossaries package. For example, when viewing the PDF version of this document in a hyperlinked-enabled PDF viewer (such as Adobe Reader or Okular) if you click on the word “xindy”. This is the way the glossaries mechanism works. An indexing application is used to generated the sorted list of terms. The indexing application is used to generate the sorted list of terms. The indexing applications are command line interface (CLI) tools, which means they can be run directly from a command @@ -2593,43 +2709,54 @@ prompt or terminal, or can be integrated into some text editors, or you can use class="cmtt-10">arara to run them. -

    Neither of the above two examples require an

    Neither of the above two examples require an indexing application. The first is just using the glossaries package for consistent formatting, and there is no list. The second has lists but they are unsorted (see Option 5). -

    The remainder of this introductory section covers the following:

    +

    The remainder of this introductory section covers the following:

    -

    There are some sample documents provided with this package. They are described in §??sec:samples Sample +Documents. +

    +

    Top

    1.1 Indexing Options

    -

    The basic idea behind the

    The basic idea behind the glossaries package is that you first define your entries (terms, symbols or abbreviations). Then you can reference these within your document (like \cite or 4 and 5) as well as an option for standalone descriptions within the document body (Option 6). -

    An overview of Options 

    An overview of Options 15 is given in table 1.1. table ??tab:options. Option 6 is omitted from the table as it doesn’t produce a list. For a more detailed comparison of the various methods, see the glossaries performance page. -

    If you are developing a class or package that loads

    If you are developing a class or package that loads glossaries, I recommend that you don’t force the user into a particular indexing method by adding an unconditional \makeglossaries @@ -2665,24 +2793,24 @@ means that they’re unable to use any commands that must come before \makeglossaries (such as \newglossary) and they can’t switch off the indexing whilst working on a draft document. + +
    -

    -

    Strictly speaking, Options 

    +

    Strictly speaking, Options 5 and 6 aren’t actually indexing options as no indexing is performed. In the case of Option 5, all defined entries are listed in order of definition. In the case of Option 6, the entry hypertargets and descriptions are manually inserted at appropriate points in the document. - - These two options are included here for completeness and for comparison with the actual indexing options.

    -

    ______________________________________________________________________________________ -

    ______________________________________________________________________________________ +

    * Strips standard LaTeX accents (that is, accents generated by core LaTeX\AAis treated the same as A. -

    Only with the hybrid method provided with glossaries-extra. -

    Provided sort=none is used. -

    § Entries with the same sort value are merged. -

    Requires some setting up. -

    The locations must be set explicitly through the custom locationlocationfield provided by glossaries-extra. -

    # Unlimited but unreliable. -

    Entries are defined in bibbibformat. \newglossaryentry should not be used explicitly. -

    Provided docdef==restricted but not recommended. -

    Provided docdef=restricted. -

    Irrelevant with sortoption automatically switches this on.)

    🔗Option 1 (TeX)

    -

    Example Document: +

    This option isn’t generally recommended for reasons given below. Example Document:

    -
    +
     \documentclass{article}
    - 
    \usepackage{glossaries} -
    -

    +\usepackage{glossaries} + +

    \makenoidxglossaries sort
    -
    +
     \newglossaryentry{sample}{name={sample},
    - 
      description={an example}} - 
    \begin{document} - 
    \gls{sample}. -
    -

    +  description={an example}} +\begin{document} +\gls{sample}. + +

    \printnoidxglossary\loadglsentriesafter \makenoidxglossaries). -

    This option doesn’t require an external

    This option doesn’t require an external indexing application but, with the default alphabetic sorting, it’s very slow with severe limitations. If you want a sorted list, it doesn’t work well for extended Latin alphabets or non-Latin alphabets. However, if you use the non-Latin alphabets and there’s no guarantee that it will work with UTF-8. However, if you use +the sanitizesort=false package option (the default for Option 1) then -the standard LaTeX accent commands will be ignored, so if an entry’s name is set to {\’e}lite then the sort -value will default to package option (the default for Option 1) then the standard LaTeX accent +commands will be ignored, so if an entry’s name is set to {\’e}lite then the sort value will default to +elite if sanitizesort=\’elite if sanitizesort=true is used. If -you have any other kinds of commands that don’t expand to ASCII characters, such as is used. If you +have any other kinds of commands that don’t expand to ASCII characters, such as \alpha or \si, then you must use sort={alpha},description={...}}

    -

    The

    The glossaries-extra package has a modified symbolssort key to the entry label (instead of the name).
    -

    -

    This option works best with the

    +

    This option works best with the sort=defnumber listindexing application consider using Option 5 instead. -

    +

    Summary: + +

      -
    1. Add +
    2. +

      Add -

      +

      +
            \makenoidxglossaries
      -
      -

      to your preamble (before you start defining your entries, as described in §4 Defining Glossary - Entries). + +

      to your preamble (before you start defining your entries, as described in §??sec:newglosentry Defining + Glossary Entries).

    3. -
    4. Put +
    5. +

      Put -

      +

      +
            \printnoidxglossary
      -
      -

      where you want your list of entries to appear (described in §10 Displaying a glossary). Alternatively, to - display all glossaries use the iterative command: + +

      where you want your list of entries to appear (described in §??sec:printglossary Displaying a Glossary). + Alternatively, to display all glossaries use the iterative command:

      -
      +
            \printnoidxglossaries
      -
      -

      + +

    6. -
    7. Run LaTeX twice on your document. (As you would do to make a table of contents appear.) For example, - click twice on the “typeset” or “build” or “PDFLaTeX” button in your editor.
    +
  • +

    Run LaTeX twice on your document. (As you would do to make a table of contents appear.) For example, + click twice on the “typeset” or “build” or “PDFLaTeX” button in your editor.

  • -

    +

    🔗Option 2 (makeindex)

    -

    Example document: +

    Example document:

    -
    +
     \documentclass{article}
    - 
    \usepackage{glossaries} -
    -

    +\usepackage{glossaries} + +

    \makeglossaries files
    -
    +
     \newglossaryentry{sample}{name={sample},
    - 
     description={an example}} - 
    \begin{document} - 
    \gls{sample}. -
    -

    + description={an example}} +\begin{document} +\gls{sample}. + +

    \printglossary\loadglsentriesafter \makeglossaries). -

    This option uses a 

    This option uses a CLI application called makeindexLatin alphabet. It can’t correctly sort accent commands (such as \’ or \c) and fails with UTF-8 characters, especially for any sort values that start -with a UTF-8 character (as it separates the octets resulting in an invalid file encoding). This process involves +class="cmtt-10">\c) and fails with UTF-8 characters, especially for any sort values that start +with a UTF-8 character (as it separates the octets resulting in an invalid file encoding). This process involves making LaTeX write the glossary information to a temporary file which makeindexmakeindex\printglossary reads this file in on the next run. -

    This option works best if you want to sort entries according to the English alphabet and you don’t want to +

    This option works best if you want to sort entries according to the English alphabet and you don’t want to install Perl or Java. This method can also work with the restricted shell escape since makeindexautomake package option provided the shell escape hasn’t been completely disabled.) -

    This method can form ranges in the

    This method can form ranges in the number list but only accepts limited number formats: \arabic, \roman, class="cmtt-10">\Roman, \alph and \Alph. -

    This option does not allow a mixture of sort methods. All glossaries must be sorted according to the same +

    This option does not allow a mixture of sort methods. All glossaries must be sorted according to the same method: word/letter ordering or order of use or order of definition. If you need word ordering for one glossary and letter ordering for another you’ll have to explicitly call makeindex for each glossary type. -

    The

    The glossaries-extra package allows a hybrid mix of Options 1 and 2 to provide word/letter ordering -with 2 to provide word/letter ordering with +Option 2 and order of use/definition with Option 1. See the glossaries-extra documentation -for further details. See also the glossaries-extra documentation for further +details. See also the glossaries-extra alternative to sampleSort.tex in §19.5 §??sec:samplessort Sorting.
    -

    -

    +

    +

    Summary:

      -
    1. If you want to use +

      If you want to use makeindex’s \GlsSetQuote +

      +
            \GlsSetQuote{+}
      -
    -

    This must be used before +

    This must be used before \makeglossaries. Note that if you are using babel, the shorthands aren’t enabled until the start of the document, so you won’t be able to use the shorthands in definitions made in the preamble.

    -
  • Add +
  • +

    Add -

    +

    +
          \makeglossaries
    -
    -

    to your preamble (before you start defining your entries, as described in §4 Defining Glossary - Entries). + +

    to your preamble (before you start defining your entries, as described in §??sec:newglosentry Defining + Glossary Entries).

  • -
  • Put +
  • +

    Put -

    +

    +
          \printglossary
    -
    -

    where you want your list of entries to appear (described in §10 Displaying a glossary). Alternatively, to - display all glossaries use the iterative command: + +

    where you want your list of entries to appear (described in §??sec:printglossary Displaying a Glossary). + Alternatively, to display all glossaries use the iterative command:

    -
    +
          \printglossaries
    -
    -

    + +

  • -
  • Run LaTeX on your document. This creates files with the extensions +

    Run LaTeX on your document. This creates files with the extensions glo and istmyDoc.ist). If you look at your document at this point, y href="#glo:glossaries-extra">glossaries-extra you’ll see the section heading and some boilerplate text.) -

    If you have used package options such as

    If you have used package options such as symbols there will also be other sets of files corresponding to the extra glossaries that were created by those options.

  • -
  • 🔗 +

    🔗 Run makeindex.ist file as the style so that it creates an class="cmtt-10">.gls. If you have access to a terminal or a command prompt (for example, the MSDOS command prompt for Windows users or the bash console for Unix-like users) then you need to run the command: -

    
    +     

    
          
    makeindex -s myDoc.ist -o myDoc.gls myDoc.glo

    @@ -3578,38 +3730,39 @@ class="cmtt-10">.gls. If you have access to a terminal or a command promp class="cmtt-10">myDoc with the base name of your LaTeX document file. Avoid spaces in the file name if possible. The $ symbol indicates the command prompt and should be omitted.) -

    The file extensions vary according to the glossary

    The file extensions vary according to the glossary type. See §1.4.4 §??sec:makeindexapp Using makeindex explicitly (Option 2) - for further details. + explicitly (Option 2) for further details. makeindex must be called for each set of files.
    -

    -

    If you don’t know how to use the command prompt, then you can probably access

    +

    If you don’t know how to use the command prompt, then you can probably access makeindex via your text editor, but each editor has a different method of doing this. See Incorporating makeglossaries or makeglossaries-lite or bib2gls into the document build for some examples. -

    Alternatively, run

    Alternatively, run makeindex indirectly via the makeglossaries script: -

    
    -     
    makeglossaries myDoc -
    +

    
                                                                                           
                                                                                           
    +     
    makeglossaries myDoc +

    Note that the file extension isn’t supplied in this case. (Replace makeindex the appropriate number of times with all the necessary switches. -

    The simplest approach is to use

    The simplest approach is to use arara and add the following comment lines to the start of your document:

    @@ -3648,23 +3801,24 @@ class="cmtt-10"> pdflatex class="cmtt-10">makeglossaries with makeglossarieslite in the second line above if you don’t have Perl installed. Note that there’s no hyphen in this case.) -

    The default sort is word order (“sea lion” comes before “seal”). If you want letter ordering you need to +

    The default sort is word order (“sea lion” comes before “seal”). If you want letter ordering you need to add the -l switch: -

    
    +     

    
          
    makeindex -l -s myDoc.ist -o myDoc.gls myDoc.glo

    (See §1.4.4 §??sec:makeindexapp Using makeindex explicitly (Option 2) for further details on using makeindex explicitly.) If you - use + explicitly.) If you use makeglossaries or makeglossaries-liteorder=letter package option and the package option + and the -l option - will be added automatically. + id="dx1-7048"> option will be added automatically.

  • -
  • 🔗 +

    🔗 Once you have successfully completed the previous step, you can now run LaTeX on your document - again.

  • -

    You’ll need to repeat the last step if you have used the +

    You’ll need to repeat the last step if you have used the toc option (unless you’re using 6 if you have cross-references which can’t be indexed until the glossary file has been created. -

    + + +

    🔗Option 3 (xindy)

    -

    Example document:

    - - +

    Example document:

    \documentclass{article} @@ -3721,13 +3876,13 @@ class="cmtt-10"> files
    -
    +
     \newglossaryentry{sample}{name={sample},
    - 
     description={an example}} - 
    \begin{document} - 
    \gls{sample}. -
    -

    + description={an example}} +\begin{document} +\gls{sample}. + +

    \printglossary\loadglsentriesafter \makeglossaries). -

    This option uses a 

    This option uses a CLI application called xindymakeindex and is able to sort extended Latin alphabets or non-Latin alphabets, however it does still have some limitations. -

    The

    The xindy application comes with both TeX Live and MiKTeX, but since xindy\printglossary reads this file in on the next run. -

    This is the best option with just the base glossaries package if you want to sort according to a language -other than English or if you want non-standard location lists, but it can require some setting up (see §11 Xindy -(Option 3)). There are some problems with certain sort values:

    +

    This is the best option with just the base glossaries package if you want to sort according to +a language other than English or if you want non-standard location lists, but it can require some +setting up (see §??sec:xindy Xindy (Option 3)). There are some problems with certain sort values: +

      -
    • entries with the same sort value are merged by +

      entries with the same sort value are merged by xindy into a single glossary line so you must make sure that each entry has a unique sort value; -

    • -
    • +
    • +

      xindy forbids empty sort values; -

    • -
    • +
    • +

      xindy automatically strips control sequences, the math-shift character $ and braces {} from the sort value, which is usually desired but this can cause the sort value to collapse to an empty string which xindy forbids.

    -

    In these problematic cases, you must set the forbids.

    +

    In these problematic cases, you must set the sort field explicitly. For example:

    + +
    \newglossaryentry{alpha}{name={\ensuremath{\alpha}}, @@ -3806,11 +3968,9 @@ class="cmtt-10">\newglossaryentry{alpha}{name={\ensuremath{\alpha}}, class="cmtt-10"> sort={alpha},description={...}} - -
    -

    The

    The glossaries-extra package has a modified symbolssort key to the entry label (instead of the name).
    -

    -

    All glossaries must be sorted according to the same method (word/letter ordering, order of use, or order of +

    +

    All glossaries must be sorted according to the same method (word/letter ordering, order of use, or order of definition). -

    The

    The glossaries-extra package allows a hybrid mix of Options 1 and Option 1. See the glossaries-extra documentation for further details.
    -

    -

    +

    +

    Summary:

      -
    1. Add the +

      Add the xindy option to the glossaries package option list: -

      +

      +
            \usepackage[xindy]{glossaries}
      -
      -

      If you are using a non-Latin script you’ll also need to either switch off the creation of the number + +

      If you are using a non-Latin script you’ll also need to either switch off the creation of the number group:

      -
      +
            \usepackage[xindy={glsnumbers=false}]{glossaries}
      -
      -

      or use either +

      or use either \GlsSetXdyFirstLetterAfterDigits{letter} (to indicate the first letter group to follow the @@ -3866,18 +4028,22 @@ class="cmtt-10">\GlsSetXdyNumberGroupOrder{⟨spec} to indicate where the number group should be placed (see §11 §??sec:xindy Xindy (Option 3)).

    2. -
    3. Add \makeglossaries to your preamble (before you start defining your entries, as described in §4 Defining - Glossary Entries). -
    4. -
    5. Run LaTeX on your document. This creates files with the extensions +

      Add \makeglossaries to your preamble (before you start defining your entries, as described in + §??sec:newglosentry Defining Glossary Entries). +

    6. +
    7. +

      Run LaTeX on your document. This creates files with the extensions glo and xdymyDoc.xdy). href="#glo:glossaries-extra">glossaries-extra extension package, you’ll see the section header and some boilerplate text.) -

      If you have used package options such as

      If you have used package options such as symbols there will also be other sets of files corresponding to the extra glossaries that were created by those options.

    8. -
    9. Run +

      Run xindy with the .gls. You also need to set the language name and input en access to a terminal or a command prompt (for example, the MSDOS command prompt for Windows users or the bash console for Unix-like users) then you need to run the command (all on one line): -

      
      +     

      
            
      xindy -L english -C utf8 -I xindy -M myDoc -t myDoc.glg -o myDoc.gls myDoc.glo

      @@ -3923,27 +4090,28 @@ class="cmtt-10">-Lgerman -C din5007-utf8.) -

      The file extensions vary according to the glossary

      The file extensions vary according to the glossary type. See §1.4.3 §??sec:xindyapp Using xindy explicitly (Option 3) for - further details. explicitly + (Option 3) for further details. xindy must be called for each set of files.
      -

      -

      It’s much simpler to use

      +

      It’s much simpler to use makeglossaries instead: -

      
      +     

      
            
      makeglossaries myDoc - -

      Note that the file extension isn’t supplied in this case. This will pick up all the file extensions from the auxxindy the appropriate number of times with all the necessary switches. -

      There’s no benefit in using

      There’s no benefit in using makeglossaries-lite with xindy either.) -

      If you don’t know how to use the command prompt, then you can probably access

      If you don’t know how to use the command prompt, then you can probably access xindy or @@ -3989,7 +4157,7 @@ class="cmtt-10">makeglossariesIncorporating makeglossaries or makeglossaries-lite or bib2gls into the document build for some examples. -

      Again, a convenient method is to use

      Again, a convenient method is to use arara and add the follow comment lines to the start of your document:

      @@ -4007,7 +4175,7 @@ class="cmtt-10"> arara: pdflatex
      -

      The default sort is word order (“sea lion” comes before “seal”). If you want letter ordering you need to +

      The default sort is word order (“sea lion” comes before “seal”). If you want letter ordering you need to add the order=letter -

      -

      (and return to the previous step). This option is picked up by +

      (and return to the previous step). This option is picked up by makeglossaries. If you are explicitly using @@ -4028,33 +4196,36 @@ href="#glo:xindy">xindy then you’ll need to add -M ord/letorder to the options list. See §1.4.3 §??sec:xindyapp Using xindy explicitly - (Option 3) for further details on using + explicitly (Option 3) for further details on using xindy explicitly.

    10. -
    11. Once you have successfully completed the previous step, you can now run LaTeX on your document +
    12. +

      Once you have successfully completed the previous step, you can now run LaTeX on your document again. As with makeindex (Option 2), you may need to repeat the previous step and this step to ensure the table of contents and cross-references are resolved. +

    -

    +

    🔗Option 4 (bib2gls)

    -



    glossaries-extraThis option is only available with the bib2gls to both fetch entry definitions from bib files and to hierarchically sort and collate. -

    Example document:

    +

    Example document:

    \documentclass{article} @@ -4094,6 +4265,8 @@ class="cmtt-10">\end{document}
    where the file entries.bib contains:
    + +
    @entry description={an example}
    } - -
    @symbol
     language} class="cmtt-10">}
    -

    All entries must be provided in one or more

    All entries must be provided in one or more bib files. See the bib2gls user manual for the required format. -

    Note that the

    Note that the sort key should not be used. Each entry type (@entrysortbib2gls gallery: sorting for examples.
    -

    -

    The

    +

    The glossaries-extra package needs to be loaded with the recordrecord=nameref option is the best method. -

    (It’s possible to use a hybrid of this method and Options 

    (It’s possible to use a hybrid of this method and Options 2 or 3 with record=alsoindexhybrid but in general there is little need for this and it complicates the build process.) -

    Each resource set is loaded with

    Each resource set is loaded with \GlsXtrLoadResources[options]. For example:

    + +
    \GlsXtrLoadResources in entries1.bib and entries2.bib: - -
     src
    sort

    If you want to ensure that all entries are selected, even if they haven’t been referenced in the document, then +

    If you want to ensure that all entries are selected, even if they haven’t been referenced in the document, then add the option selection=allbib2gls user manual for further details.) -

    The glossary is displayed using:

    +

    The glossary is displayed using:

    \printunsrtglossary\printunsrtglossaries
    The document is built using: -

    
    +

    
        
    pdflatex myDoc
    bib2gls myDoc
    pdflatex myDoc @@ -4288,7 +4459,7 @@ class="cmtt-10">\printunsrtglossaries
    --group switch: -

    
    +

    
        
    bib2gls --group myDoc

    @@ -4304,20 +4475,20 @@ class="cmtt-10"> { group: on } + +
    (You will also need an appropriate glossary style.) -

    Unlike Options 

    Unlike Options 2 and 3, this method doesn’t create a file containing the typeset glossary but simply determines which entries are needed for the document, their associated locations and (if required) their associated letter group. This option allows a mixture of sort methods. For example, sorting by word order for - - one glossary and order of use for another or even sorting one block of the glossary differently to another block in the same glossary. See bib2gls gallery: sorting. -

    This method supports Unicode and uses the Common Locale Data Repository, which provides more extensive language support +

    This method supports Unicode and uses the Common Locale Data Repository, which provides more extensive language support than xindybib2gls can deduce a numerical value it will attempt to form ranges otherwise it will simply list the locations. -

    See

    Summary: +

      +
    1. +

      Use glossaries-extra with the p=recordackage option: + + +

      +
      +     \usepackage[record]{glossaries-extra}
      +
      +

      +

    2. +
    3. +

      Use \*GlsXtrLoadResources to identify the bib file(s) and bib2gls options: + + +

      +
      +     \GlsXtrLoadResources[src={terms.bib,abbreviations.bib},sort=en]
      +
      +

      +

    4. +
    5. +

      Put

      +
      + \*printunsrtglossary +
      +
      where you want your list of entries to appear. Alternatively to display all glossaries use the iterative + command:
      +
      + \*printunsrtglossaries +
      +
      +
    6. +
    7. +

      Run LaTeX on your document. +

    8. +
    9. +

      Run bib2gls with just the document base name. +

    10. +
    11. +

      Run LaTeX on your document. +

      +
    + + +

    See glossaries-extra and bib2gls: An Introductory Guide or the bib2gls user manual for further details of + id="dx1-9056"> user manual for further details of this method, and also Incorporating makeglossaries or makeglossaries-lite or bib2gls into the document build. -

    + id="x1-9057r5"> +

    🔗Option 5 (no sorting)

    -



    glossaries-extraThis option is only available with the extension package glossaries-extra. No indexing application is required. -

    Example document: +

    Example document:

    -
    +
     \documentclass{article}
    - 
    \usepackage[sort=none]{glossaries-extra} - 
    \newglossaryentry{sample}{name={sample}, - 
     description={an example}} - 
    \newglossaryentry{alpha}{name={\ensuremath{\alpha}}, - 
     description={...}} - 
    \begin{document} - 
    \gls{sample}. -
    -

    +\usepackage[sort=none]{glossaries-extra} +\newglossaryentry{sample}{name={sample}, + description={an example}} +\newglossaryentry{alpha}{name={\ensuremath{\alpha}}, + description={...}} +\begin{document} +\gls{sample}. + +

    -\printunsrtglossary
    \end{document}
    -

    This method is best used with the package option

    This method is best used with the package option sort=nonenone\makeglossaries for Options 2 and 3). -

    All entries must be defined before the glossary is displayed (preferably in the preamble) in the +href="#option3">3). In general it’s best to use a style that doesn’t show +letter group headings. If you do want letter headings then you must ensure that you have defined +your entries in alphabetical order, and use XeLaTeX or LuaLaTeX if you require UTF-8 letter +groups. +

    All entries must be defined before the glossary is displayed (preferably in the preamble) in the required order, and child entries must be defined immediately after their parent entry if they must be kept together in the glossary. (Some glossary styles indent entries that have a parent but it’s the \loadglsentries. -

    The glossary is displayed using:

    +

    The glossary is displayed using:

    -\printunsrtglossary
    Alternatively all glossaries can be displayed using the iterative command:
    -\printunsrtglossaries + +
    This will display all defined entries, regardless of whether or not they have been used in the document. The @@ -4421,37 +4667,35 @@ class="cmtt-10">bib2gls takes advantage of this method by defining the wanted entries in the required order and setting the locations (and letter group information, if required). - - -

    Therefore, the above example document has a glossary containing the entries: sample and

    Therefore, the above example document has a glossary containing the entries: sample and α (in that order). Note that the alpha entry has been included even though it wasn’t referenced in the document. -

    This just requires a single LaTeX call: -

    
    +

    This just requires a single LaTeX call: +

    
        
    pdflatex myDoc

    unless the glossary needs to appear in the table of contents, in which case a second run is required: -

    
    +

    
        
    pdflatex myDoc
    pdflatex myDoc

    (Naturally if the document also contains citations, and so on, then additional steps are required. Similarly for all the other options above.) -

    See the

    See the glossaries-extra documentation for further details of this method. -

    +

    🔗Option 6 (standalone)

    -



    glossaries-extraThis option is only available with the 1.3 Instead of creating a list, this has standalone definitions throughout the document. The entry name may or may not be in a section heading. -

    You can either define entries in the document preamble (or in an external file loaded with

    You can either define entries in the document preamble (or in an external file loaded with \loadglsentries), as with Option 5, for example:

    -
    +
     \documentclass{article}
    - 
    \usepackage[colorlinks]{hyperref} - 
    \usepackage[sort=none, - 
       nostyles% <- no glossary styles are required - 
     ]{glossaries-extra} - 
    \newglossaryentry{set}{name={set}, - 
      description={a collection of any kind of objects}, - 
      symbol={\ensuremath{\mathcal{S}}} - 
    } - 
    \newglossaryentry{function}{name={function}, - 
      description={a rule that assigns every element in the - 
      domain \gls{set} to an element in the range \gls{set}}, - 
      symbol={\ensuremath{f(x)}} - 
    } -
    -

    +\usepackage[colorlinks]{hyperref} +\usepackage[sort=none, +   nostyles% <- no glossary styles are required + ]{glossaries-extra} +\newglossaryentry{set}{name={set}, +  description={a collection of any kind of objects}, +  symbol={\ensuremath{\mathcal{S}}} +} +\newglossaryentry{function}{name={function}, +  description={a rule that assigns every element in the +  domain \gls{set} to an element in the range \gls{set}}, +  symbol={\ensuremath{f(x)}} +} +
    +

    \newcommand*{\termdef}[1]{%
      \section{ \section{\glsxtrglossentry{#1}}
    -
    +
     \begin{document}
    - 
    \tableofcontents - 
    \section{Introduction} - 
    Sample document about \glspl{function} and \glspl{set}. - 
    \termdef{set} - 
    More detailed information about \glspl{set} with examples. - 
    \termdef{function} - 
    More detailed information about \glspl{function} with examples. - 
    \end{document} -
    -

    Or you can use +

    Or you can use bib2gls if you want to manage a large database of terms. For example (requires \documentclass{article}
    \usepackage[colorlinks]{hyperref}
    \usepackage[\usepackage[record,
     required class="cmtt-10"> 
     ]{glossaries-extra}
    -
    \GlsXtrLoadResources
    [[src=terms,=terms,sort=none,=none,save-locations=false] @@ -4569,7 +4813,7 @@ class="cmtt-10">=false] class="cmtt-10">\newcommand*{\termdef}[1]{%
      \section{ \section{\glsxtrglossentry{#1}}

    -
    +
     \begin{document}
    - 
    \tableofcontents - 
    \section{Introduction} - 
    Sample document about \glspl{function} and \glspl{set}. - 
    \termdef{set} - 
    More detailed information about \glspl{set} with examples. - 
    \termdef{function} - 
    More detailed information about \glspl{function} with examples. - 
    \end{document} -
    -

    Where the file +

    Where the file terms.bib contains:

    -@entry{set, @@ -4632,7 +4876,7 @@ class="cmtt-10">  symbol={\ensuremath{\mathcal{S}}}
    } -
    @entry{function, @@ -4673,11 +4917,11 @@ href="#glo:bib2gls">bib2gls) is that you can use an existing database of entries shared across multiple documents, ensuring consistent notation for all of them. -

    In both cases, there’s no need to load all the glossary styles packages, as they’re not required, so I’ve used +

    In both cases, there’s no need to load all the glossary styles packages, as they’re not required, so I’ve used the nostyles package option to prevent them from being loaded. -

    In the first case, you need the

    In the first case, you need the sort=nonenoneOption 5) and then define the terms in the preamble. No external tool is required. Just run LaTeX as normal. (Twice to ensure that the table of contents is up to date.) -

    
    +

    
        
    pdflatex myDoc
    pdflatex myDoc

    -

    In the second case, you need the

    In the second case, you need the record package option (as in Option 4) since bib2gls is needed to select the required entries, but you don’t need a sorted list:

    -\GlsXtrLoadResources[[src={terms},={terms},sort=none] @@ -4721,28 +4965,28 @@ selected by bib2gls, but it will skip the sorting step. (The chances are you probably also won’t need location -lists either. If so, you can add the option save-locations=false.) -

    Remember that for this second case you need to run

    Remember that for this second case you need to run bib2gls as per Option 4: -

    
    +

    
        
    pdflatex myDoc
    bib2gls myDoc
    pdflatex myDoc
    pdflatex myDoc

    -

    For both cases (with or without

    For both cases (with or without bib2gls), instead of listing all the entries using ), instead of listing all the entries using \printunsrtglossary, you -use \glsxtrglossentry{\termdef to simplify the code and ensure consistency. Extra styling, such as placing the description in a coloured frame, can be added to this custom definition as required. -

    (Instead of using

    (Instead of using \glsentrydesc or \Glsentrydesc, you can use \glossentrydesc\glossentrydesc{⟨label}, which -will obey attributes such as glossdesc and and glossdescfont. See the glossaries-extra manual for further details.) -

    The symbol (if required) can be displayed with either

    The symbol (if required) can be displayed with either \glsentrysymbol{bib2gls if the symbol needs to go in a section title as the entries aren’t defined on the first LaTeX run. -

    In normal document text,

    In normal document text, \glsentrysymbol will silently do nothing if the entry hasn’t been defined, but when used in a section heading it will expand to an undefined internal command when written to the aux file, which triggers an error. -

    The

    The \glossentrysymbol command performs an existence check, which triggers a warning if the entry is undefined. (All entries will be undefined before the first \texorpdfstringglossaries-extra user manual for further details). -

    If you want to test if the

    If you want to test if the symbol field has been set, you need to use \ifglshassymbol

    -

    In both of the above examples, the section titles start with a lowercase character (because the

    In both of the above examples, the section titles start with a lowercase character (because the name value is -all lowercase in entry definitions). You can apply automatic case-change with the glossname attribute. For example:

    -\glssetcategoryattribute{general}{glossname}{firstuc}
    or (for title-case)
    -\glssetcategoryattribute{general}{glossname}{title}
    However, this won’t apply the case-change in the table of contents or bookmarks. -

    In the second example, you can instead use

    In the second example, you can instead use bib2gls to apply a case-change:

    \GlsXtrLoadResources[\GlsXtrLoadResources[src=terms,
      sort=none,=none,save-locations=false,
      replicate-fields={name=text},
      name-case-change=firstuc

    ]
    -
    (Or (Or name-case-change=title for title-case.) This copies the link text\gls is still lowercase. -

    In the first example (without

    In the first example (without bib2gls) you need to do this manually. For example:

    @@ -4953,7 +5197,7 @@ class="cmtt-10">}
    -

    Note that if you use the default

    Note that if you use the default save-locations=true with bib2gls4 and 6 to have both standalone definitions and an index. Now I do need a glossary style. In this case I’m going -to use bookindex, which is provided in the glossary-bookindexglossary-bookindex

    I also need to sort the entries, so the resource command is now:
    -\GlsXtrLoadResources[[src=terms,% definitions in terms.bib
      sort=en-GB,% by this locale
      replicate-fields={name=text},
      name-case-change={firstuc}
    ]
    At the end of the document, I can add the glossary:
    -\printunsrtglossary[title=Index,target=false]
    Note that I’ve had to switch off the hypertargets with target=false (otherwise there would be duplicate -targets). If you want letter group headings you need to use the --group switch: -

    
    +

    
        
    bib2gls --group myDoc

    @@ -5079,11 +5323,11 @@ class="cmtt-10"> }
    -

    The

    The bookindex style doesn’t show the description, so only the name and location is displayed. Remember that the name has had a case-conversion so it now starts with an initial capital. If you feel this is inappropriate -for the index, you can adjust the bookindex style so that it uses the texttext

    \renewcommand*{\renewcommand*{\glsxtrbookindexname}[1]{%
       \glossentrynameother{#1}{text}} @@ -5105,24 +5349,24 @@ class="cmtt-10">{#1}{text}}
    See the glossaries-extra user manual for further details about this style. -

    Note that on the first LaTeX run none of the entries will be defined. Once they are defined, the page +

    Note that on the first LaTeX run none of the entries will be defined. Once they are defined, the page numbers may shift due to the increased amount of document text. You may therefore need to repeat the document build to ensure the page numbers are correct. -

    If there are extra terms that need to be included in the index that don’t have a description, you can define -them with

    If there are extra terms that need to be included in the index that don’t have a description, you can define +them with @index in the bib file. For example:

    -@index{element} -
    @index{member,{member,alias={element}} @@ -5130,11 +5374,11 @@ class="cmtt-10">={element}}
    They can be used in the document as usual: -
    +
     The objects that make up a set are the \glspl{element}
    - 
    or \glspl{member}. -
    -

    See +

    See glossaries-extra and bib2gls: An Introductory Guide or the bib2gls user manual for further details. -

    The

    The glossaries package comes with a number of sample documents that illustrate the various functions. These are listed in §19 §??sec:samples Sample Documents. -

    +

    -

    Top

    1.2 Dummy Entries for Testing

    -

    In addition to the sample files described above,

    In addition to the sample files described above, glossaries also provides some files containing lorum ipsum dummy entries. These are provided for testing purposes and are on TeX’s path (in @@ -5172,115 +5417,136 @@ class="cmtt-10">bib2gls. The files are as follows:

    +

    example-glossaries-brief.tex

    These entries all have brief descriptions. For example: +class="cmbx-10">example-glossaries-brief.tex

    +

    These entries all have brief descriptions. For example: -

    +

    +
          \newglossaryentry{lorem}{name={lorem},description={ipsum}}
    -
    -

    +

    +

    +

    example-glossaries-long.tex

    These entries all have long descriptions. For example: +class="cmbx-10">example-glossaries-long.tex

    +

    These entries all have long descriptions. For example: -

    +

    +
          \newglossaryentry{loremipsum}{name={lorem ipsum},
    -      
    description={dolor sit amet, consectetuer adipiscing -  
    elit. Ut purus elit, vestibulum ut, placerat ac, -  
    adipiscing vitae, felis. Curabitur dictum gravida -  
    mauris.}} -
    -

    + description={dolor sit amet, consectetuer adipiscing + elit. Ut purus elit, vestibulum ut, placerat ac, + adipiscing vitae, felis. Curabitur dictum gravida + mauris.}} + +

    +

    example-glossaries-multipar.tex

    These entries all have multi-paragraph descriptions. For example: +class="cmbx-10">example-glossaries-multipar.tex

    +

    These entries all have multi-paragraph descriptions. For example: -

    +

    +
          \longnewglossaryentry{loremi-ii}{name={lorem 1--2}}%
    -      
    {% -  
    Lorem ipsum ... -  
    Nam dui ligula... -  
    } -
    -

    + {% + Lorem ipsum ... + Nam dui ligula... + } + +

    +

    example-glossaries-symbols.tex

    These entries all use the example-glossaries-symbols.tex

    +

    These entries all use the symbol key. For example: -

    +

    +
          \newglossaryentry{alpha}{name={alpha},
    -      
    symbol={\ensuremath{\alpha}}, -  
    description={Quisque ullamcorper placerat ipsum.}} -
    -

    + symbol={\ensuremath{\alpha}}, + description={Quisque ullamcorper placerat ipsum.}} + +

    +

    example-glossaries-symbolnames.tex

    Similar to the previous file but the example-glossaries-symbolnames.tex

    +

    Similar to the previous file but the symbol key isn’t used. Instead the - symbol is stored in the key isn’t used. Instead the symbol is stored in the name key. For example: + id="dx1-12008"> key. + For example: -

    +

    +
          \newglossaryentry{sym.alpha}{sort={alpha},
    -      
    name={\ensuremath{\alpha}}, -  
    description={Quisque ullamcorper placerat ipsum.}} -
    -

    + name={\ensuremath{\alpha}}, + description={Quisque ullamcorper placerat ipsum.}} + +

    +

    example-glossaries-images.tex

    These entries use the example-glossaries-images.tex

    +

    These entries use the user1 key to store the name of an image file. (The - images are provided by the key to store the name of an image file. (The images are provided by the mwe package and should be on TeX’s path.) One entry doesn’t have an - associated image to help test for a missing key. The descriptions are long to allow for tests with the text - wrapping around the image. For example: + id="dx1-12010"> + package and should be on TeX’s path.) One entry doesn’t have an associated image to help test for + a missing key. The descriptions are long to allow for tests with the text wrapping around the image. For + example: -

    +

    +
          \longnewglossaryentry{sedfeugiat}{name={sed feugiat},
    -      
    user1={example-image}}% -  
    {% -  
    Cum sociis natoque... -  
    Etiam... -  
    } -
    -

    + user1={example-image}}% + {% + Cum sociis natoque... + Etiam... + } + +

    +

    example-glossaries-acronym.tex

    These entries are all abbreviations. For example: +class="cmbx-10">example-glossaries-acronym.tex

    +

    These entries are all abbreviations. For example: -

    +

    +
          \newacronym[type=\glsdefaulttype]{lid}{LID}{lorem ipsum
    -      
    dolor} -
    -

    -

    If you use the +

    +

    If you use the glossaries-extra extension package, then \newacronym is redefined to use is redefined to use \newabbreviation - with the category key set to acronym (rather than the default acronym category. For example:

    -
    +
          \setabbreviationstyle[acronym]{long-short}
    -
    -

    -

    + +

    +

    +

    example-glossaries-acronym-desc.tex

    This file contains entries that are all abbreviations that use the - example-glossaries-acronym-desc.tex

    +

    This file contains entries that are all abbreviations that use the description key. For example: -

    +

    +
          \newacronym[type=\glsdefaulttype,
    -      
      description={fringilla a, euismod sodales, -  
      sollicitudin vel, wisi}]{ndl}{NDL}{nam dui ligula} -
    -

    -

    If you use the +

    +

    If you use the glossaries-extra extension package, then \newacronym is redefined to use is redefined to use \newabbreviation - with the category key set to acronym (rather than the default acronym category. For example:

    -
    +
          \setabbreviationstyle[acronym]{long-short-desc}
    -
    -

    -

    + +

    +

    +

    example-glossaries-acronyms-lang.tex

    These entries are all abbreviations, where some of them have - a translation supplied in the example-glossaries-acronyms-lang.tex

    +

    These entries are all abbreviations, where some of them have a translation supplied in the user1 key. For example: + id="dx1-12018"> key. For + example: -

    +

    +
          \newacronym[type=\glsdefaulttype,user1={love itself}]
    -      
     {li}{LI}{lorem ipsum} -
    -

    -

    If you use the +

    +

    If you use the glossaries-extra extension package, then \newacronym is redefined to use is redefined to use \newabbreviation - with the category key set to acronym (rather than the default acronym category. For example:

    -
    +
          \setabbreviationstyle[acronym]{long-short-user}
    -
    -

    -

    + +

    +

    +

    example-glossaries-parent.tex

    These are hierarchical entries where the child entries use the example-glossaries-parent.tex

    +

    These are hierarchical entries where the child entries use the name key. For - example: + id="dx1-12022"> key. For example: -

    +

    +
          \newglossaryentry{sedmattis}{name={sed mattis},
    -      
    description={erat sit amet} -  
    \newglossaryentry{gravida}{parent={sedmattis}, -  
      name={gravida},description={malesuada}} -
    -

    + description={erat sit amet} + \newglossaryentry{gravida}{parent={sedmattis}, +   name={gravida},description={malesuada}} + +

    +

    example-glossaries-childnoname.tex

    These are hierarchical entries where the child entries don’t use the - example-glossaries-childnoname.tex

    +

    These are hierarchical entries where the child entries don’t use the name key. For example: -

    +

    +
          \newglossaryentry{scelerisque}{name={scelerisque},
    -      
      description={at}} -  
    \newglossaryentry{vestibulum}{parent={scelerisque}, -  
      description={eu, nulla}} -
    -

    +   description={at}} + \newglossaryentry{vestibulum}{parent={scelerisque}, +   description={eu, nulla}} + +

    +

    example-glossaries-cite.tex

    These entries use the user1 key to store a citation key (or comma-separated list - of citation keys). The citations are defined in xampl.bib, which should be available on all modern - TeX distributions. One entry doesn’t have an associated citation to help test for a missing key. For +class="cmbx-10">example-glossaries-longchild.tex

    +

    (New to v4.47.) These entries all have long descriptions and there are some child entries. For example: -

    +

    +
    +     \newglossaryentry{longsedmattis}{name={sed mattis},
    +      description={erat sit amet dolor sit amet, consectetuer adipiscing elit.
    +      Ut purus elit, vestibulum ut, placerat ac, adipiscing vitae, felis.
    +      Curabitur dictum gravida mauris.}}
    +     \newglossaryentry{longgravida}{parent={longsedmattis},name={gravida},
    +      description={malesuada libero, nonummy eget, consectetuer id, vulputate a,
    +      magna. Donec vehicula augue eu neque. Pellentesque habitant morbi tristique
    +     senectus et netus et malesuada fames ac turpis egestas. Mauris ut
    +     leo.}}
    +
    +

    +

    +

    +example-glossaries-childmultipar.tex

    +

    (New to v4.47.) This consists of parent entries with single paragraph descriptions and child entries with + multi-paragraph descriptions. Some entries have the user1 key set to the name of an image file provided + by the mwe package. For example: + + +

    +
    +     \newglossaryentry{hiersedmattis}{name={sed mattis},user1={example-image},
    +      description={Erat sit amet dolor sit amet, consectetuer adipiscing elit.
    +      Ut purus elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur
    +     dictum gravida mauris. Ut pellentesque augue sed urna. Vestibulum
    +     diam eros, fringilla et, consectetuer eu, nonummy id, sapien. Nullam
    +     at lectus. In sagittis ultrices mauris. Curabitur malesuada erat sit
    +     amet massa. Fusce blandit. Aliquam erat volutpat.}}
    +     \longnewglossaryentry{hierloremi-ii}
    +     {name={lorem 1--2},parent={hiersedmattis}}%
    +     {%
    +     Lorem ipsum ...
    +     Nam dui ligula...
    +     }
    +
    +

    +

    +

    +example-glossaries-cite.tex

    +

    These entries use the user1 key to store a citation key (or comma-separated list of citation keys). The + citations are defined in xampl.bib, which should be available on all modern TeX distributions. One entry + doesn’t have an associated citation to help test for a missing key. For example: + + +

    +
          \newglossaryentry{fusce}{name={fusce},
    -      
    description={suscipit cursus sem},user1={article-minimal}} -
    -

    + description={suscipit cursus sem},user1={article-minimal}} + +

    +

    example-glossaries-url.tex

    These entries use the example-glossaries-url.tex

    +

    These entries use the user1 key to store an URL associated with the entry. For - example: + id="dx1-12027"> key to store an URL associated with the entry. For example: -

    +

    +
          \newglossaryentry{aenean-url}{name={aenean},
    -      
     description={adipiscing auctor est}, -  
     user1={http://uk.tug.org/}} -
    -

    -

    The sample file +

    +

    The sample file glossary-lipsum-examples.tex in the doc/latex/glossaries/samples directory uses all these files. See also https://www.dickimaw-books.com/gallery/#glossaries. -


    glossaries gallery. +


    glossaries-extraThe glossaries-extra package provides the additional test file:

    +

    example-glossaries-xr.tex

    These entries use the example-glossaries-xr.tex

    +

    These entries use the see key provided by the base glossaries package and also the - key provided by the base glossaries package and also the alias and and seealso keys that require + keys that require glossaries-extra. For example: -

    - \newglossaryentry{alias-lorem}{name={alias-lorem}, -  
     description={ipsum},alias={lorem}} -  
    \newglossaryentry{amet}{name={amet},description={consectetuer}, -  
     see={dolor}} -  
    \newglossaryentry{arcu}{name={arcu},description={libero}, -  
     seealso={placerat,vitae,curabitur}} -
    -

    -

    -

    + \newglossaryentry{alias-lorem}{name={alias-lorem}, +  description={ipsum},alias={lorem}} + \newglossaryentry{amet}{name={amet},description={consectetuer}, +  see={dolor}} + \newglossaryentry{arcu}{name={arcu},description={libero}, +  seealso={placerat,vitae,curabitur}} + +

    +

    +

    +

    Top

    1.3 Multi-Lingual Support

    -

    The

    The glossaries package uses the tracklang package to determine the document languages. Unfortunately, because there isn’t a standard language identification framework provided with LaTeX, Localisation with tracklang.tex for further details.
    -

    -

    As from version 1.17, the

    +

    As from version 1.17, the glossaries package can be used with xindyLatin alphabet and Option 1 can only perform limited ASCII comparisons. -

    This means that with Options 

    This means that with Options 3 or 4 you are not restricted to the A, …, Z letter groups. If you want to use xindy -

    -

    If you want to use +\documentclass[french]{article} +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage{babel} +\usepackage[xindy]{glossaries} + +

    If you want to use bib2gls, you need to use the , you need to use the record option with bibbib2gls user manual for further details.) -

    For further details, see the “UTF-8” section in the mfirstuc user manual. -

    If you are using

    If you are using xindy or -Cxindy manual for further details of this option. -

    As from v4.24, if you are writing in German (for example, using the

    As from v4.24, if you are writing in German (for example, using the ngerman package-gmakeindex’s quote character using: -



    \GlsSetQuote{character}

    -

    +

    Note that ⟨character⟩ may not be one of ? (question mark), -

    +
     \GlsSetQuote{+}
    -
    -

    This must be done before +

    This must be done before \makeglossaries and any entry definitions. It’s only applicable for makeindex-gmakeindex. -

    Be careful of

    Be careful of babel’s shorthands. These aren’t switched on until the start of the document, so any entries defined in the preamble won’t be able to use those shorthands. However, if you define the entries in the @@ -5671,29 +6006,29 @@ double-quote) then this will interfere with code that tries to escape any of tho sort key.
    -

    -

    In general, it’s best not to use

    +

    In general, it’s best not to use babel’s shorthands in entry definitions. For example:

    -
    +
     \documentclass{article}
    - 
    \usepackage[ngerman]{babel} - 
    \usepackage{glossaries} - 
    \GlsSetQuote{+} - 
    \makeglossaries - 
    \newglossaryentry{rna}{name={ribonukleins\"aure}, - 
      sort={ribonukleins"aure}, - 
      description={eine Nukleins\"aure}} - 
    \begin{document} - 
    \gls{rna} - 
    \printglossaries - 
    \end{document} -
    -

    -

    The +

    +

    The ngerman package has the shorthands on in the preamble, so they can be used in definitions if makeindex -

    -

    -

    -

    -

    +

    +

    +

    +

    Top

    1.3.1 Changing the Fixed Names

    -

    The fixed names are produced using the commands listed in table 1.2. If you aren’t using a language package -such as

    The fixed names are produced using the commands listed in table ??tab:predefinednames. If you aren’t using a +language package such as babel or polyglossia that uses caption hooks, you can just redefine these commands as appropriate. If -you are using that uses caption hooks, you can just redefine these commands as +appropriate. If you are using babel or polyglossiababel -

    -

    and then use +

    and then use babel’s caption hook mechanism. Note that if you pass the language options directly to babel -


    @@ -5813,7 +6149,7 @@ class="content">Customised Text
    Command Name

    Translator Key Word

    Purpose

    \glossaryname

    Glossary

    Title +class="td10">

    Title of the main @@ -5846,9 +6182,9 @@ class="td10">

    Title class="td01">\acronymname

    Acronyms

    Title +class="td10">

    Title of the list @@ -5867,11 +6203,11 @@ class="cmss-10">acronym\entryname

    Notation (glossaries)

    Header +class="td10">

    Header for first column @@ -5893,11 +6229,11 @@ class="td10">

    Header class="td01">\descriptionname

    Description (glossaries)

    Header +class="td10">

    Header for second column @@ -5919,11 +6255,11 @@ class="td10">

    Header class="td01">\symbolname

    Symbol (glossaries)

    Header +class="td10">

    Header for symbol column @@ -5942,13 +6278,13 @@ class="td10">

    Header class="td01">\pagelistname

    Page List (glossaries)

    Header +class="td10">

    Header for page list @@ -5967,11 +6303,11 @@ class="td10">

    Header class="td01">\glssymbolsgroupname

    Symbols (glossaries)

    Header +class="td10">

    Header for symbols section @@ -5990,11 +6326,11 @@ class="td10">

    Header class="td01">\glsnumbersgroupname

    Numbers (glossaries)

    Header +class="td10">

    Header for numbers section @@ -6015,7 +6351,7 @@ class="td10">

    Header


    -

    As from version 4.12, multilingual support is provided by separate language modules that need to be +

    As from version 4.12, multilingual support is provided by separate language modules that need to be installed in addition to installing the glossaries package. You only need to install the modules for the languages that you require. If the language module has an unmaintained status, you can volunteer to take over the @@ -6028,35 +6364,39 @@ dictionary files for glossaries are now provided by the appropriate language module. For further details about information specific to a given language, please see the documentation for that language module. -

    Examples of use:

    +

    Examples of use:

      -
    • Using +

      Using babel and translator: -

      +

      +
            \documentclass[english,french]{article}
      -      
      \usepackage{babel} -  
      \usepackage{glossaries} -
      -

      ( +

      (translator is automatically loaded).

    • -
    • Using +

      Using babel: -

      +

      +
            \documentclass[english,french]{article}
      -      
      \usepackage{babel} -  
      \usepackage[translate=babel]{glossaries} -
      -

      ( +

      (translator isn’t loaded). The babel has been loaded.

    • -
    • Using +

      Using polyglossia: -

      +

      +
            \documentclass{article}
      -      
      \usepackage{polyglossia} -  
      \setmainlanguage{english} -  
      \usepackage{glossaries} -
      -

      + \usepackage{polyglossia} + \setmainlanguage{english} + \usepackage{glossaries} + +

    -

    Due to the varied nature of glossaries, it’s likely that the predefined translations may not be +

    Due to the varied nature of glossaries, it’s likely that the predefined translations may not be appropriate. If you are using the babel package and the title\printglossary (but not the iterative commands like \printglossaries). -

    Note that the

    Note that the translator dictionaries are loaded at the beginning of the document, so it won’t have any effect if you put translatorbeamer documentation.)
    -

    -

    Your custom dictionary doesn’t have to be just a translation from English to another language. You may +

    +

    Your custom dictionary doesn’t have to be just a translation from English to another language. You may prefer to have a dictionary for a particular type of document. For example, suppose your institution’s in-house reports have to have the glossary labelled as “Nomenclature” and the page list should be labelled “Location”, then you can create a file called, say,

    -
    +
     myinstitute-glossaries-dictionary-English.dict
    -
    -

    that contains the following: + +

    that contains the following:

    -
    +
     \ProvidesDictionary{myinstitute-glossaries-dictionary}{English}
    - 
    \deftranslation{Glossary}{Nomenclature} - 
    \deftranslation{Page List (glossaries)}{Location} -
    -

    You can now load it using: +\deftranslation{Glossary}{Nomenclature} +\deftranslation{Page List (glossaries)}{Location} + +

    You can now load it using:

    -
    +
     \usedictionary{myinstitute-glossaries-dictionary}
    -
    -

    (Make sure that +

    (Make sure that myinstitute-glossaries-dictionary-English.dict can be found by TeX.) If you want to share your custom dictionary, you can upload it to CTAN. -

    If you are using

    If you are using babel and don’t want to use the translatorbabel -

    -

    -

    Note that +

    +

    Note that xindy and 3 or 4 if you have glossary entries that contain non-Latin characters. See §11 Xindy -(Option 3) for further details on §??sec:xindy +Xindy (Option 3) for further details on xindy, and see the bib2gls user manual for further details of that application.

    -
    Creating a New Language Module
    -

    The

    Top

    1.3.2 Creating a New Language Module

    +

    The glossaries package now uses the tracklang package to determine which language modules need @@ -6207,7 +6551,7 @@ to be loaded. If you want to create a new language module, you should first read class="cmss-10">tracklang documentation. -

    To create a new language module, you need to at least create two files called:

    To create a new language module, you need to at least create two files called: glossaries-lang.ldftranslator (for example, English). -

    Here’s an example of

    Here’s an example of glossaries-dictionary-English.dict:

    -
    +
     \ProvidesDictionary{glossaries-dictionary}{English}
    - 
    \providetranslation{Glossary}{Glossary} - 
    \providetranslation{Acronyms}{Acronyms} - 
    \providetranslation{Notation (glossaries)}{Notation} - 
    \providetranslation{Description (glossaries)}{Description} - 
    \providetranslation{Symbol (glossaries)}{Symbol} - 
    \providetranslation{Page List (glossaries)}{Page List} - 
    \providetranslation{Symbols (glossaries)}{Symbols} - 
    \providetranslation{Numbers (glossaries)}{Numbers} -
    -

    You can use this as a template for your dictionary file. Change +

    You can use this as a template for your dictionary file. Change English to the translator name for your @@ -6250,71 +6594,71 @@ class="cmti-10">Lang⟩.dict) and, for each \providetranslation, change the second argument to the appropriate translation. -

    Here’s an example of

    Here’s an example of glossaries-english.ldf:

    -
    +
     \ProvidesGlossariesLang{english}
    - 
    \glsifusedtranslatordict{English} - 
    {% - 
      \addglossarytocaptions{\CurrentTrackedLanguage}% - 
      \addglossarytocaptions{\CurrentTrackedDialect}% - 
    } - 
    {% - 
      \@ifpackageloaded{polyglossia}% - 
      {% - 
        \newcommand*{\glossariescaptionsenglish}{% - 
          \renewcommand*{\glossaryname}{\textenglish{Glossary}}% - 
          \renewcommand*{\acronymname}{\textenglish{Acronyms}}% - 
          \renewcommand*{\entryname}{\textenglish{Notation}}% - 
          \renewcommand*{\descriptionname}{\textenglish{Description}}% - 
          \renewcommand*{\symbolname}{\textenglish{Symbol}}% - 
          \renewcommand*{\pagelistname}{\textenglish{Page List}}% - 
          \renewcommand*{\glssymbolsgroupname}{\textenglish{Symbols}}% - 
          \renewcommand*{\glsnumbersgroupname}{\textenglish{Numbers}}% - 
        }% - 
      }% - 
      {% - 
        \newcommand*{\glossariescaptionsenglish}{% - 
          \renewcommand*{\glossaryname}{Glossary}% - 
          \renewcommand*{\acronymname}{Acronyms}% - 
          \renewcommand*{\entryname}{Notation}% - 
          \renewcommand*{\descriptionname}{Description}% - 
          \renewcommand*{\symbolname}{Symbol}% - 
          \renewcommand*{\pagelistname}{Page List}% - 
          \renewcommand*{\glssymbolsgroupname}{Symbols}% - 
          \renewcommand*{\glsnumbersgroupname}{Numbers}% - 
        }% - 
      }% - 
      \ifcsdef{captions\CurrentTrackedDialect} - 
      {% - 
        \csappto{captions\CurrentTrackedDialect}% - 
        {% - 
          \glossariescaptionsenglish - 
        }% - 
      }% - 
      {% - 
        \ifcsdef{captions\CurrentTrackedLanguage} - 
        { - 
          \csappto{captions\CurrentTrackedLanguage}% - 
          {% - 
            \glossariescaptionsenglish - - - 
          }% - 
        }% - 
        {% - 
        }% - 
      }% - 
      \glossariescaptionsenglish - 
    } - 
    \renewcommand*{\glspluralsuffix}{s} - 
    \renewcommand*{\glsacrpluralsuffix}{\glspluralsuffix} - 
    \renewcommand*{\glsupacrpluralsuffix}{\glstextup{\glspluralsuffix}} -
    -

    This is a somewhat longer file, but again you can use it as a template. Replace +

    This is a somewhat longer file, but again you can use it as a template. Replace English with the translator @@ -6326,7 +6670,7 @@ the definition of \glossariescaptionslang⟩, replace the English text (such as “Glossaries”) with the appropriate translation. -

    The suffixes used to generate the plural forms when the plural hasn’t been specified are given by +

    The suffixes used to generate the plural forms when the plural hasn’t been specified are given by \glspluralsuffix (for general entries). For abbreviations defined with \newacronym, \glsacrpluralsuffix for other acronym styles. There’ They may be expanded on definition or they may be expanded on use, depending on the glossaries configuration. -

    Therefore these plural suffix command definitions aren’t included in the caption mechanism as that’s +

    Therefore these plural suffix command definitions aren’t included in the caption mechanism as that’s typically not switched on until the start of the document. This means that the suffix in effect will be for the last loaded language that redefined these commands. It’s best to initialise these commands to the most common suffix required in your document and use the longpluralshortplural etc keys to override exceptions.
    -

    -

    If you want to add a regional variation, create a file called

    +

    If you want to add a regional variation, create a file called glossaries-iso lang- -

    +
      \ProvidesGlossariesLang{en-GB}
    - 
     \RequireGlossariesLang{english} - 
     \glsifusedtranslatordict{British} - 
     {% - 
       \addglossarytocaptions{\CurrentTrackedLanguage}% - 
       \addglossarytocaptions{\CurrentTrackedDialect}% - 
     } - 
     {% - 
       \@ifpackageloaded{polyglossia}% - 
       {% - 
         % Modify \glossariescaptionsenglish as appropriate for - 
         % polyglossia - 
       }% - 
       {% - 
         % Modify \glossariescaptionsenglish as appropriate for - 
         % non-polyglossia - 
       }% - 
     } -
    -

    -

    If the translations includes +

    +

    If the translations includes non-Latin characters, it’s necessary to provide code that’s independent of the -input encoding. Remember that while some users may use UTF-8, others may use Latin-1 or any other +input encoding. Remember that while some users may use UTF-8, others may use Latin-1 or any other supported encoding, but while users won’t appreciate you enforcing your preference on them, it’s useful to -provide a UTF-8 version for XeLaTeX users. -

    The UTF-8 version for XeLaTeX and LuaLaTeX users. +

    The glossaries-irish.ldf file provides this as follows:

    -
    +
     \ProvidesGlossariesLang{irish}
    - 
    \glsifusedtranslatordict{Irish} - 
    {% - 
      \addglossarytocaptions{\CurrentTrackedLanguage}% - 
      \addglossarytocaptions{\CurrentTrackedDialect}% - 
    } - 
    {% - 
      \ifdefstring{\inputencodingname}{utf8} - 
      {\input{glossaries-irish-utf8.ldf}}% - 
      {% - 
        \ifdef{\XeTeXinputencoding}% XeTeX defaults to UTF-8 - 
        {\input{glossaries-irish-utf8.ldf}}% - 
        {\input{glossaries-irish-noenc.ldf}} - 
      } - 
      \ifcsdef{captions\CurrentTrackedDialect} - 
      {% - 
        \csappto{captions\CurrentTrackedDialect}% - 
        {% - 
          \glossariescaptionsirish - 
        }% - 
      }% - 
      {% - 
        \ifcsdef{captions\CurrentTrackedLanguage} - 
        { - 
          \csappto{captions\CurrentTrackedLanguage}% - 
          {% - 
            \glossariescaptionsirish - 
          }% - 
        }% - 
        {% - 
        }% - 
      }% - 
      \glossariescaptionsirish - 
    } -
    -

    (Again you can use this as a template. Replace +

    (Again you can use this as a template. Replace irish with your root language label and Irish with the translator dictionary label.) -

    There are now two extra files:

    There are now two extra files: glossaries-irish-noenc.ldf (no encoding information) and glossaries-irish-utf8.ldf (UTF-8). -

    These both define glossaries-irish-utf8.ldf (UTF-8). +

    These both define \glossariescaptionsirish but the *-noenc.ldf uses LaTeX accent commands:

    -
    +
     \@ifpackageloaded{polyglossia}%
    - 
    {% - 
      \newcommand*{\glossariescaptionsirish}{% - 
        \renewcommand*{\glossaryname}{\textirish{Gluais}}% - 
        \renewcommand*{\acronymname}{\textirish{Acrainmneacha}}% - 
        \renewcommand*{\entryname}{\textirish{Ciall}}% - 
        \renewcommand*{\descriptionname}{\textirish{Tuairisc}}% - 
        \renewcommand*{\symbolname}{\textirish{Comhartha}}% - 
        \renewcommand*{\glssymbolsgroupname}{\textirish{Comhartha\'{\i}}}% - 
        \renewcommand*{\pagelistname}{\textirish{Leathanaigh}}% - 
        \renewcommand*{\glsnumbersgroupname}{\textirish{Uimhreacha}}% - 
      }% - 
    }% - 
    {% - 
      \newcommand*{\glossariescaptionsirish}{% - 
        \renewcommand*{\glossaryname}{Gluais}% - 
        \renewcommand*{\acronymname}{Acrainmneacha}% - 
        \renewcommand*{\entryname}{Ciall}% - 
        \renewcommand*{\descriptionname}{Tuairisc}% - 
        \renewcommand*{\symbolname}{Comhartha}% - 
        \renewcommand*{\glssymbolsgroupname}{Comhartha\'{\i}}% - 
        \renewcommand*{\pagelistname}{Leathanaigh}% - 
        \renewcommand*{\glsnumbersgroupname}{Uimhreacha}% - 
      }% - 
    } -
    -

    whereas the *-utf8.ldf replaces the accent commands with the appropriate UTF-8 characters. -

    -

    -

    +

    whereas the *-utf8.ldf replaces the accent commands with the appropriate UTF-8 characters. +

    +

    +

    Top

    1.4 Generating the Associated Glossary Files

    -

    This section is only applicable if you have chosen Options 

    This section is only applicable if you have chosen Options 2 or 3. You can ignore this section if you have chosen any of the other options. If you want to alphabetically sort your entries always remember to @@ -6497,8 +6845,8 @@ href="#glo:bib2gls">bib2gls).
    -

    -

    If this section seriously confuses you, and you can’t work out how to run external tools like

    +

    If this section seriously confuses you, and you can’t work out how to run external tools like makeglossaries or @@ -6508,64 +6856,66 @@ class="cmtt-10">makeindex, you can try using the automake package option, described in §2.5 Sorting Options, but you will need -TeX’s shell escape enabled. See also Incorporating makeglossaries or makeglossaries-lite or bib2gls into the -document build. -

    In order to generate a sorted glossary with compact §??sec:pkgopts-sort Sorting Options, +but you will need TeX’s shell escape enabled. See also Incorporating makeglossaries or makeglossaries-lite or +bib2gls into the document build. +

    In order to generate a sorted glossary with compact number lists, it is necessary to use an external indexing application as an intermediate step (unless you have chosen Option 1, which uses TeX to do the -sorting or Option 5, which doesn’t perform any sorting). It is this application that creates the file -containing the code required to typeset the glossary. If this step is omitted, the glossaries will -not appear in your document. The two indexing applications that are most commonly used with -LaTeX are Option 1, which uses TeX to do the sorting or +Option 5, which doesn’t perform any sorting). It is this application that creates the file containing +the code required to typeset the glossary. If this step is omitted, the glossaries will not appear in +your document. The two indexing applications that are most commonly used with LaTeX are +makeindex and xindy. As from version 1.17, the glossaries package can be used with either of -these applications. Previous versions were designed to be used with glossaries package can be used with either of these +applications. Previous versions were designed to be used with makeindex only. With the - only. With the glossaries-extra package, you can also use glossaries-extra +package, you can also use bib2gls as the indexing application. (See the glossaries-extra -and glossaries-extra and bib2gls user manuals for further details.) Note that +user manuals for further details.) Note that xindy and bib2gls have much better -multi-lingual support than have much better multi-lingual +support than makeindex, so xindy or bib2gls are recommended if you’re not writing in -English. Commands that only have an effect when are recommended if you’re not writing in English. +Commands that only have an effect when xindy is used are described in §11 §??sec:xindy Xindy (Option 3). -

    This is a multi-stage process, but there are methods of automating document compilation using applications +

    This is a multi-stage process, but there are methods of automating document compilation using applications such as latexmk and  pdflatex
    With latexmk you need to set up the required dependencies.
    -

    -

    The

    +

    The glossaries package comes with the Perl script makeglossariesmakeindex or xindy on all -the glossary files using a customized style file (which is created by +on all the glossary files using a customized style file (which is created by \makeglossaries). See §1.4.1 -Using the makeglossaries Perl Script for further details. Perl is stable, cross-platform, open source -software that is used by a number of TeX-related applications (including ). See +§??sec:makeglossariesapp Using the makeglossaries Perl Script for further details. Perl is stable, cross-platform, +open source software that is used by a number of TeX-related applications (including xindy and latexmkhttp://www.perl.org/about.html and MiKTeX and Perl scripts (and one Python script). -

    The advantages of using

    The advantages of using makeglossaries:

    -

    As from version 4.16, the

    As from version 4.16, the glossaries package also comes with a Lua script called makeglossaries-liteOption 2 href="#glo:makeindex">makeindex). -

    If things go wrong and you can’t work out why your glossaries aren’t being generated correctly, you can use +

    If things go wrong and you can’t work out why your glossaries aren’t being generated correctly, you can use makeglossariesguimakeglossariesmakeglossaries-lite. -

    Whilst I strongly recommended that you use the

    Whilst I strongly recommended that you use the makeglossaries Perl script or the xindy. These are listed in table 1.3. -

    If you are choosing not to use table ??tab:makeglossariesCmds. +

    If you are choosing not to use makeglossaries because you don’t want to install Perl, you will only be able to use xindyepstopdf and latexmk, so it’s well-worth the effort to install Perl.)
    -

    -

    Note that if any of your entries use an entry that is not referenced outside the glossary, you will need to do an +

    +

    Note that if any of your entries use an entry that is not referenced outside the glossary, you will need to do an additional makeglossaries1.7 -

    -

    and suppose you have +

    and suppose you have \gls{citrusfruit} in your document but don’t reference the orange entry, then the xindy. For example, if the document is called myDoc.tex, then you must do: -

    
    +

    
        
    pdflatex myDoc
    makeglossaries myDoc
    pdflatex myDoc @@ -6823,7 +7181,7 @@ required. See the and bib2gls manual for further details.) -

    Likewise, an additional

    Likewise, an additional makeglossaries and LaTeX run may be required if the document pages shift with @@ -6832,7 +7190,7 @@ contents on the second LaTeX run may push glossary entries across page bo number lists in the glossary may need updating. -

    The examples in this document assume that you are accessing

    The examples in this document assume that you are accessing makeglossaries, >All Programs->Accessories menu. -

    Alternatively, your text editor may have the facility to create a function that will call the required +

    Alternatively, your text editor may have the facility to create a function that will call the required application. See Incorporating makeglossaries or makeglossaries-lite or bib2gls into the document build. -

    If any problems occur, remember to check the transcript files (e.g. 

    If any problems occur, remember to check the transcript files (e.g. glg or algalg -


    @@ -6880,7 +7238,7 @@ href="#glo:makeindex">makeindex explicitly
    code⟩

    -

    Top

    1.4.1 Using the makeglossaries Perl Script

    -

    The

    The makeglossaries script picks up the relevant information from the auxiliary (makeglossaries. For example, if your document is called myDoc.tex, type the following in your terminal: -

    
    +

    
        
    pdflatex myDoc
    makeglossaries myDoc
    pdflatex myDoc @@ -7000,11 +7358,11 @@ You may need to explicitly load makeglossaries into Perl: -

    
    +

    
        
    perl makeglossaries myDoc

    -

    Windows users: TeX Live on Windows has its own internal Perl interpreter and provides +

    Windows users: TeX Live on Windows has its own internal Perl interpreter and provides makeglossaries.exe as a convenient wrapper for the http://tex.stackexchange.com/q/158796/19862 on the TeX.SX site. -

    The

    The makeglossaries script attempts to fork the -q (quiet) switch doesn’t work as well. -

    You can specify in which directory the

    You can specify in which directory the aux, glo etc files are located using the -d switch. For example: -

    
    +

    
        
    pdflatex -output-directory myTmpDir myDoc
    makeglossaries -d myTmpDir myDoc
    @@ -7088,7 +7446,7 @@ class="cmtt-10">xindy
    . -

    As from

    As from makeglossaries v2.18, if you are using -

    -

    If you explicitly use +

    If you explicitly use makeindex, this will cause a warning and the location list will be “1, xindyxindy won’t produce any warning and will simply discard duplicates. -

    For a complete list of options do

    For a complete list of options do makeglossaries --help. -

    When upgrading the

    When upgrading the glossaries package, make sure you also upgrade your version of makeglossaries. The -current version is 4.45.
    -

    -

    +current version is 4.47.

    +

    +

    -

    Top

    1.4.2 Using the makeglossaries-lite Lua Script

    -

    The Lua alternative to the

    The Lua alternative to the makeglossaries Perl script requires a Lua interpreter, which should already be @@ -7160,15 +7518,15 @@ class="cmtt-10">makeglossaries-d option.) -

    Note that TeX Live on Unix-like systems creates a symbolic link called

    Note that TeX Live on Unix-like systems creates a symbolic link called makeglossaries-lite (without the lua extension) to the actual makeglossaries-lite.lua script, so you may not need to supply the extension.
    -

    -

    The

    +

    The makeglossaries-lite script can be invoked in the same way as makeglossaries. For example, if your document is called myDoc.tex, then do -

    
    +

    
        
    makeglossaries-lite.lua myDoc

    or -

    
    +

    
        
    makeglossaries-lite myDoc

    -

    Some of the options available with the Perl makeglossariesmakeglossariesmakeglossaries-lite script. For a complete list of available options, do -

    
    +

    
        
    makeglossaries-lite.lua --help

    -

    +

    -

    Top

    1.4.3 Using xindy explicitly (Option 3)

    -

    Xindy comes with TeX Live. It has also been added to MikTeX, but if you don’t have it installed, see How to use Xindy with MikTeX on TeX on StackExchange. -

    If you want to use

    If you want to use xindy to process the glossary files, you must make sure you have used the -

    +
     \usepackage[xindy]{glossaries}
    -
    -

    This is required regardless of whether you use +

    This is required regardless of whether you use xindy explicitly or whether it’s called implicitly via applications @@ -7246,11 +7604,11 @@ class="cmti-10">not -I tex. -

    To run

    To run xindy type the following in your terminal (all on one line): -

    
    +

    
        
    xindy -L ⟨language⟩ -C ⟨encoding⟩ -I xindy -M ⟨style}. You may need to specify the full path name depending on the current working directory. If any of the file names contain spaces, you must delimit them using double-quotes. -

    For example, if your document is called

    For example, if your document is called myDoc.tex and you are using UTF8 encoding in English, then type the following in your terminal: -

    
    +

    
        
    xindy -L english -C utf8 -I xindy -M myDoc -t myDoc.glg -o myDoc.gls myDoc.glo

    -

    Note that this just creates the main glossary. You need to do the same for each of the other glossaries +

    Note that this just creates the main glossary. You need to do the same for each of the other glossaries (including the list of acronyms if you have used the acronym package option), substituting acronym package option, then you would need to do: -

    
    +

    
        
    xindy -L english -C utf8 -I xindy -M myDoc -t myDoc.alg -o myDoc.acr myDoc.acn

    @@ -7313,7 +7671,7 @@ For additional glossaries, the extensions are those supplied when you created th \newglossary. -

    Note that if you use

    Note that if you use makeglossaries instead, you can replace all those calls to xindymakeglossaries: -

    
    +

    
        
    makeglossaries myDoc

    @@ -7334,17 +7692,18 @@ class="cmtt-10">xindymakeglossaries. These are listed in table 1.3. +href="#tab:makeglossariesCmds">table ??tab:makeglossariesCmds. -

    +

    -

    Top

    1.4.4 Using makeindex explicitly (Option 2)

    -

    If you want to use

    If you want to use makeindex explicitly, you must make sure that you haven’t used the makeindex, type the following in your terminal: -

    
    +

    
        
    makeindex -s ⟨style⟩.ist -t ⟨base⟩.glg -o ⟨-lmakeindex
    manual for further details. -

    For example, if your document is called

    For example, if your document is called myDoc.tex, then type the following at the terminal: -

    
    +

    
        
    makeindex -s myDoc.ist -t myDoc.glg -o myDoc.gls myDoc.glo

    @@ -7410,7 +7769,7 @@ the relevant extensions. For example, if you have used the acronym package option, then you need to type the following in your terminal: -

    
    +

    
        
    makeindex -s myDoc.ist -t myDoc.alg -o myDoc.acr myDoc.acn

    @@ -7418,7 +7777,7 @@ For additional glossaries, the extensions are those supplied when you created th \newglossary. -

    Note that if you use

    Note that if you use makeglossaries instead, you can replace all those calls to makeindexmakeglossaries: -

    
    +

    
        
    makeglossaries myDoc

    @@ -7439,13 +7798,14 @@ using makeglossaries. These are listed in table 1.3. -

    +href="#tab:makeglossariesCmds">table ??tab:makeglossariesCmds. +

    -

    Top

    1.5 Note to Front-End and Script Developers

    -

    The information needed to determine whether to use

    The information needed to determine whether to use xindy,

    +

    -

    Top

    1.5.1 MakeIndex and Xindy

    -

    The file extensions used by each defined (but not ignored) glossary are given by -


    The file extensions used by each defined (but not ignored) glossary are given by +


    \@newglossary{labelout-ext}{in-ext}

    -

    +

    where ⟨in-ext⟩ is the extension of the -

    -

    If +

    If glossaries-extra’s hybrid method has been used (with \makeglossaries[sub-list]), then the sub-list of glossaries that need to be processed will be identified with:

    -\glsxtr@makeglossaries{list}
    -

    The

    The indexing application’s style file is specified by -



    \@istfilename{filename}

    -

    +

    The file extension indicates whether to use makeindexxdy). Note that the glossary information is formatted differently depending on which indexing application is supposed to be used, so it’s important to call the correct one. -

    For example, with

    For example, with arara you can easily determine whether to run makeindexxindy -

    Note that if you choose to explicitly call

    -

    -

    Word or letter ordering is specified by: -


    +

    Word or letter ordering is specified by: +


    \@glsorder{order}

    -

    +

    where ⟨order⟩ can be either word or letter. -

    If

    If xindy should be used, the language and code page for each glossary is specified by -



    \@xdylanguage{label}{code}

    -

    +

    where ⟨label⟩ identifies the glossary, ⟨language⟩ is the root language (e.g. utf8). These commands are omitted if makeindex should be used. -

    If

    If Option 1 has been used, the aux file will contain -



    \@gls@reference{typelabel}{location}

    -

    +

    for every time an entry has been referenced. -

    +

    -

    Top

    1.5.2 Entry Labels

    -

    If you need to gather labels for auto-completion, the

    If you need to gather labels for auto-completion, the writeglslabels package option will create a file containing the -labels of all defined entries (regardless of whether or not the entry has been used in the document). The -glossaries-extra package also provides writeglslabelnames that writes both the label and name (separated by a +tab). +

    The glossaries-extra package also provides docdef=atom, which will create the , which will create the glsdefs file but will act like - file but will act like +docdef=restricted. -

    + id="dx1-23005">.

    +

    +

    -

    Top

    1.5.3 Bib2Gls

    -

    bib2glsIf Option 4 has been used, the aux file will contain one or more instances of

    -\glsxtr@resource{basename⟩ also indicates the name of the associate class="cmtt-10">bib file. -

    For example, with

    For example, with arara you can easily determine whether or not to run  if found("aux", "glsxtr@resource")

    -
    (It gets more complicated if both (It gets more complicated if both \glsxtr@resource and \@istfilename are present as that indicates the -hybrid record=alsoindexhybrid option.) -

    Remember that with

    Remember that with bib2gls, the entries will never be defined on the first LaTeX call (because their @@ -7733,7 +8098,7 @@ class="cmtt-10">bib2glsaux file, which will be in the form:

    -\glsxtr@record{}{loc}
    -
    or (with or (with record=nameref)
    + +
    -\glsxtr@record@nameref{}
    or (with \glssee)
    - -
    -\glsxtr@recordsee{xr list}
    -
    You can also pick up the commands defined with You can also pick up the commands defined with \glsxtrnewglslike, which are added to the auxbib2gls’s benefit:
    -\@glsxtr@newglslike{}{cs}
    -
    If If \GlsXtrSetAltModifier is used, then the modifier is identified with:
    -\@glsxtr@altmodifier{character}
    -
    Label prefixes (for the Label prefixes (for the \dgls set of commands) are identified with:
    -\@glsxtr@prefixlabellist{}
    -

    -

    +

    Top

    2. Package Options

    -

    This section describes the available

    This section describes the available glossaries package options. You may omit the =true for boolean options. (For example, acronym=true). -

    The

    The glossaries-extra package has additional options described in the glossaries-extra manual. The extension @@ -7862,8 +8227,8 @@ writing are included here. Future versions of glossaries-extra may have additional package options or new values for existing settings that aren’t listed here.
    -

    -

    Note that ⟨

    +

    Note that ⟨key⟩=⟨value⟩ package options can’t be passed via the document class options. (This includes options where the ⟨value⟩ (such as makeindex) may be passed via the document class options.
    -

    +

    -

    Top

    2.1 General Options

    -

    +

    nowarn

    -

    This suppresses all warnings generated by the

    This suppresses all warnings generated by the glossaries package. Don’t use this option if you’re new to using glossaries as the warnings are designed to help detect common mistakes (such as forgetting to use @@ -7899,20 +8264,20 @@ class="cmss-10">debug with any value other than false it will override this option. -

    +

    nolangwarn

    -

    This suppresses the warning generated by a missing language module. -

    +

    This suppresses the warning generated by a missing language module. +

    noredefwarn

    -

    If you load

    If you load glossaries with a class or another package that already defines glossary related commands, by default glossaries will warn you that it’s redefining those commands. If you are aware of the consequences of using @@ -7926,7 +8291,7 @@ href="#glo:glossaries-extra">glossaries-extra.) -

    +

    debug={value}

    -

    Introduced in version 4.24. The default setting is

    Introduced in version 4.24. The default setting is debug=falsedebug=true is assumed. -

    The

    The glossaries-extra package provides extra values glossaries-extra package provides extra values showwrgloss, that may be used to show where the indexing -is occurring, and all, which switches on all debugging options. See the glossaries-extra manual for further details.
    -

    -

    All values other than

    +

    All values other than debug=falsedebug=showtargets option will additionally use: -



    \glsshowtarget{target name}

    -

    +

    to show the hypertarget or hyperlink name when \glsdohypertarget is used by commands like \glsdohyperlink is used by commands like \gls. In math mode or inner mode, this puts the target name in square brackets just before the link or anchor. In outer mode it uses: -



    \glsshowtargetouter{label}

    -

    +

    which by default places the target name in the margin. The font is given by: -



    \glsshowtargetfont

    -

    +

    The default definition is \ttfamily\small. This command is included in the definition of -

    +
     \renewcommand*{\glsshowtargetouter}[1]{%
    - 
     {\glsshowtargetfont [#1]}} -
    -

    -

    Similarly, the +

    +

    Similarly, the debug=showaccsupp will add the accessibility support information using: -



    \glsshowaccsupp{optionstag}{replacement text}

    -

    +

    This internally uses \glsshowtarget. This option is provided for use with glossaries-accsupp. -

    The purpose of the debug mode can be demonstrated with the following example document: +

    The purpose of the debug mode can be demonstrated with the following example document:

    \makeglossaries. Since the file isn’t open yet, the information can’t be written to it, which is why the sample2 entry doesn’t appear in the glossary. -

    Without

    Without \makeglossaries the indexing is suppressed with Options 2 and 3 but, other than that, commands like \gls behave as usual. -

    This situation doesn’t cause any errors or warnings as it’s perfectly legitimate for a user to want to use +

    This situation doesn’t cause any errors or warnings as it’s perfectly legitimate for a user to want to use glossaries to format the entries (e.g. abbreviation expansion) but not display any lists of terms, abbreviations, symbols etc (or the user may prefer to use the unsorted Options 1 or 4 for indexing, which don’t use \makeglossaries. -

    Therefore

    Therefore \makeglossaries can’t be used to enable \newglossaryentry and commands like \gls and @@ -8100,23 +8465,23 @@ class="cmtt-10">\glsadd. These commands must be enabled by default. (It d class="cmtt-10">see key as that’s a more common problem. See below.) -

    The debug mode, enabled with the

    The debug mode, enabled with the debug option,

    -
    +
     \usepackage[debug]{glossaries}
    -
    -

    will write information to the log file when the indexing can’t occur because the associated file isn’t open. The +

    +

    will write information to the log file when the indexing can’t occur because the associated file isn’t open. The message is written in the form -

    -

    Package glossaries Info: wrglossary(⟨

    +

    Package glossaries Info: wrglossary(⟨type⟩)(⟨text⟩) on input line ⟨line number⟩.

    -

    where ⟨line number⟩.

    +

    where ⟨type⟩ is the glossary label and ⟨text⟩ is the line of text that would’ve been written to the associated file if it had been open. So if any entries haven’t appeared in the glossary but you’re sure you used commands like \glsaddall, try switching on the debug option and see if any information has been written to the log file. -

    +

    savewrites={boolean}

    -

    This is a boolean option to minimise the number of write registers used by the

    This is a boolean option to minimise the number of write registers used by the glossaries package. The default is savewritesfalse2 and 3, one write register is required per (non-ignored) glossary and one for the style file. -

    With all options except Options 

    With all options except Options 1 and 4, another write register is required if the docdefs4, no write registers are required (document definitions aren’t permitted and indexing information is written to the aux file). If you really need document definitions -but you want to minimise the number of write registers then consider using docdef=restrictedrestrictedglossaries-extra. -

    There are only a limited number of write registers, and if you have a large number of glossaries +

    There are only a limited number of write registers, and if you have a large number of glossaries or if you are using a class or other packages that create a lot of external files, you may exceed the maximum number of available registers. If savewrites is set, the glossary information will be stored in token registers until the end of the document when they will be written to the external files. -

    This option can significantly slow document compilation and may cause the indexing to fail. Page numbers +

    This option can significantly slow document compilation and may cause the indexing to fail. Page numbers in the number list will be incorrect on page boundaries due to TeX’s asynchronous output routine. As an @@ -8179,8 +8544,8 @@ alternative, you can use the scrwfile package (part of the KOMA-Script bundle) and not use this option.
    -

    -

    By way of comparison,

    +

    By way of comparison, sample-multi2.tex provided with bib2glsbib2gls

    If you want to use TeX’s

    If you want to use TeX’s \write18 mechanism to call -

    -

    -

    In general, this package option is best avoided. -

    +\write18{makeindex -s \istfilename\space +-t \jobname.glg -o \jobname.gls \jobname} +\let\glswritefiles\relax +

    +

    +

    In general, this package option is best avoided. +

    translate={value}

    -

    This can take the following values: +

    This can take the following values:

    +

    true

    If

    +

    If babel has been loaded and the translatorpolyglossiaglossaries-polyglossia will be loaded. -

    +

    +

    false

    Don’t provide translations, even if

    +

    Don’t provide translations, even if babel or polyglossia\glossaryname so that will still be translated if you have loaded babel.) -

    +

    +

    babel

    Don’t load the

    +

    Don’t load the translator package. Instead load glossaries-babel. -

    I recommend you use

    I recommend you use translate=babel=true.
    -

    +

    + +

    -

    If

    If translate is specified without a value, translate=false is assumed. -

    With

    - - -

    -

    See §1.3.1

    +

    See §??sec:fixednames Changing the Fixed Names for further details. -

    +

    notranslate

    -

    This is equivalent to

    This is equivalent to translate=false and may be passed via the document class options. -

    +

    hyperfirst={boolean}

    -

    This is a boolean option that specifies whether each term has a hyperlink on

    This is a boolean option that specifies whether each term has a hyperlink on first use. The default is hyperfirst\glslink or \glstext). -

    The

    The hyperfirst setting applies to all glossary types (unless identified by nohypertypes\newignoredglossaryhyper key when referencing an entry (or by using the plus or starred version of the referencing command). -

    It may be that you only want to apply this to just the acronyms (where the first use explains the meaning of +

    It may be that you only want to apply this to just the acronyms (where the first use explains the meaning of the acronym) but not for ordinary glossary entries (where the first use is identical to subsequent uses). In this case, you can use hyperfirst -

    +
      \usepackage[acronym,hyperfirst=false]{glossaries}
    - 
     % acronym and glossary entry definitions - 
     % at the end of the preamble - 
     \glsunsetall[main] -
    -

    -

    Alternatively you can redefine the hook -


    +

    +

    Alternatively you can redefine the hook +


    \glslinkcheckfirsthyperhook

    -

    +

    which is used by the commands that check the first use flag, such as \gls -

    -

    -

    Note that this hook isn’t used by the commands that don’t check the +

    +

    Note that this hook isn’t used by the commands that don’t check the first use flag, such as \glstext\gls-like and \glstext-like commands.) -

    The

    The glossaries-extra package provides a method of disabling the first use hyperlink according to the entry’s associated category. For example, if you only to switch off the first use hyperlink for abbreviations and -acronyms then you simply need to set the nohyperfirst attribute for the abbreviation and nohyperfirstglossaries-extra manual for further details. -

    +

    writeglslabels

    -

    This is a valueless option that will create a file called

    This is a valueless option that will create a file called \jobname.glslabels at the end of the document. This file simply contains a list of all defined entry labels (including those in any ignored glossaries). It’s provided for the benefit of text editors that need to know labels for auto-completion. (See also . If you also want the name, use +writeglslabelnames. (See also glossaries-extra’s glossaries-extra’s docdef=atom -package option.) -

    Note that with package option.) +

    Note that with bib2gls the file will only contain the entries that the file will only contain the entries that bib2gls has selected from the has selected from the bib files. + id="dx1-35007"> files.
    -

    -

    +

    +

    +

    +

    writeglslabelnames

    +

    Similar to the above but writes both the label and name (separated by a tab). +

    undefaction={value} (glossaries-extra.sty)

    -

    The value may be one of: +

    The value may be one of: + +

    +

    error

    generate an error if a referenced entry is undefined (default, and only available setting with just - error

    +

    generate an error if a referenced entry is undefined (default, and the only available setting with + just glossaries); -

    +

    +

    warn

    only warn if a referenced entry is undefined (automatically activated with Option 4).
    - - -

    +class="cmssbx-10">warn

    +

    only warn if a referenced entry is undefined (automatically activated with Option 4).

    +

    docdef={value} (glossaries-extra.sty)

    -

    This option governs the use of

    This option governs the use of \newglossaryentry. Available values:

    +

    false

    false

    +

    \newglossaryentry is not permitted in the document environment (default with environment (default with glossaries-extra and for Option 1 with just the base glossaries package); -

    +

    +

    restricted

    restricted

    +

    \newglossaryentry is only permitted in the document environment if it occurs before + id="dx1-38003"> environment if it occurs before \printglossary (not available for some indexing options); -

    +

    +

    atom

    as atom

    +

    as restricted but creates the docdefs file for use by file for use by atom (without the limitations of (without the limitations of docdef=true); -

    + id="dx1-38007">); +

    +

    true

    true

    +

    \newglossaryentry is permitted in the document environment where it would normally be + id="dx1-38008"> environment where it would normally be permitted by the base glossaries package. This will create the docdefs file if file if \newglossaryentry is found in the document environment.

    -

    + id="dx1-38011"> environment.

    + + +

    -

    Top

    2.2 Sectioning, Headings and TOC Options

    -

    +

    toc={boolean}

    -

    Add the glossaries to the table of contents. Note that an extra LaTeX run is required with this option. +

    Add the glossaries to the table of contents. Note that an extra LaTeX run is required with this option. Alternatively, you can switch this function on and off using -



    \glstoctrue

    -

    +

    and -



    \glstocfalse

    -

    +

    The default value is toc=false for the base for the base glossaries package and toc=true for for glossaries-extra. -

    +

    numberline={boolean}

    - - -

    When used with the above

    When used with the above toc=true option, this will add option, this will add \numberline{} in the final argument of \addcontentsline. This will align the table of contents entry with the numbered section titles. Note that this + id="dx1-41003">. This will align the table of contents entry with the numbered section titles. Note that this option has no effect if the toc option is omitted. If option is omitted. If toc is used without is used without numberline, the title will be aligned with + id="dx1-41006">, the title will be aligned with the section numbers rather than the section titles. -

    +

    section={value}

    -

    This option indicates the sectional unit to use for the glossary. The value should be the control +

    This option indicates the sectional unit to use for the glossary. The value should be the control sequence name without the leading backslash or following star (e.g. just chapter not \chapter or chapter*). -

    The default behaviour is for the glossary heading to use

    The default behaviour is for the glossary heading to use \chapter, if that command exists, or \section otherwise. The starred or unstarred form is determined by the numberedsection option. -

    Example: + id="dx1-42001"> option. +

    Example:

    -
    +
     \usepackage[section=subsection]{glossaries}
    -
    -

    You can omit the value if you want to use +

    You can omit the value if you want to use \section, i.e. 

    -
    +
     \usepackage[section]{glossaries}
    -
    -

    is equivalent to +

    +

    is equivalent to

    -
    +
     \usepackage[section=section]{glossaries}
    -
    -

    You can change this value later in the document using -


    +

    You can change this value later in the document using +


    \setglossarysection{name}

    -

    +

    where ⟨name⟩ is the sectional unit. -

    The start of each glossary adds information to the page header via -


    The start of each glossary adds information to the page header via +


    \glsglossarymark{glossary title}

    -

    +

    By default this uses \@mkboth2.2 + id="x1-42004f2"> but you may need to redefine it. For example, to only change the right header:

    -
    +
     \renewcommand{\glsglossarymark}[1]{\markright{#1}}
    -
    -

    or to prevent it from changing the headers: +

    +

    or to prevent it from changing the headers:

    -
    +
     \renewcommand{\glsglossarymark}[1]{}
    -
    -

    If you want +

    If you want \glsglossarymark to use \MakeUppercase in the header, use the ucmark option described + id="dx1-42007"> option described below. -

    Occasionally you may find that another package defines

    Occasionally you may find that another package defines \cleardoublepage when it is not required. This may cause an unwanted blank page to appear before each glossary. This can be fixed by redefining \glsclearpage:

    -
    +
     \renewcommand*{\glsclearpage}{\clearpage}
    -
    -

    -

    +

    +

    +

    ucmark={boolean}

    -

    This is a boolean option. The default is

    This is a boolean option. The default is ucmark=false, unless , unless memoir has been loaded, in which case the default + id="dx1-43002"> has been loaded, in which case the default is ucmark=true. -

    If set, . +

    If set, \glsglossarymark uses + id="dx1-43004"> uses \MakeTextUppercase2.3. + id="x1-43006f3">. You can test whether this option has been set or not using -



    \ifglsucmarktrue part\else false part\fi

    -

    +

    For example:

    -
    +
     \renewcommand{\glsglossarymark}[1]{%
    - 
      \ifglsucmark - 
        \markright{\MakeTextUppercase{#1}}% - 
      \else - 
        \markright{#1}% - 
      \fi} -
    -

    If +

    If memoir has been loaded and has been loaded and ucmark is set, then is set, then memoir’s ’s \memUChead is used. -

    + id="dx1-43015"> is used. +

    numberedsection={value}

    -

    The glossaries are placed in unnumbered sectional units by default, but this can be changed using +

    The glossaries are placed in unnumbered sectional units by default, but this can be changed using numberedsection. This option can take one of the following values:

    + id="dx1-44001">. This option can take one of the following values:

      -
    • +

      false: no number, i.e. use starred form of sectioning command (e.g. : no number, i.e. use starred form of sectioning command (e.g. \chapter* or \section*); -

    • -
    • +
    • +

      nolabel: use a numbered section, i.e. the unstarred form of sectioning command (e.g. : use a numbered section, i.e. the unstarred form of sectioning command (e.g. \chapter or \section), but the section not labelled; -

    • -
    • +
    • +

      autolabel: numbered with automatic labelling. Each glossary uses the unstarred form of a sectioning + id="dx1-44004">: numbered with automatic labelling. Each glossary uses the unstarred form of a sectioning command (e.g. \chapter or \section) and is assigned a label (via \label). The label is formed + id="dx1-44005">). The label is formed from -



      \glsautoprefix type

      -

      +

      where ⟨type⟩ is the label identifying that glossary. The default value of \glsautoprefix is empty. For @@ -8896,167 +9292,170 @@ class="cmss-10">glossaries using:

      -
      +
            \usepackage[section,numberedsection=autolabel]
      -      
        {glossaries} -
      -

      then each glossary will appear in a numbered section, and can be referenced using something +   {glossaries} +

    +

    then each glossary will appear in a numbered section, and can be referenced using something like:

    -
    +
          The main glossary is in section~\ref{main} and
    -      
    the list of acronyms is in section~\ref{acronym}. -
    -

    If you can’t decide whether to have the acronyms in the main glossary or a separate list of acronyms, you + the list of acronyms is in section~\ref{acronym}. +

    +

    If you can’t decide whether to have the acronyms in the main glossary or a separate list of acronyms, you can use \acronymtype which is set to which is set to main if the acronym option is not used and is set to option is not used and is set to acronym if the acronym option is used. For example: + id="dx1-44009"> option is used. For example:

    -
    +
          The list of acronyms is in section~\ref{\acronymtype}.
    -
    -

    You can redefine the prefix if the default label clashes with another label in your document. For +

    +

    You can redefine the prefix if the default label clashes with another label in your document. For example:

    -
    +
          \renewcommand*{\glsautoprefix}{glo:}
    -
    -

    will add +

    will add glo: to the automatically generated label, so you can then, for example, refer to the list of acronyms as follows:

    -
    +
          The list of acronyms is in
    -      
    section~\ref{glo:\acronymtype}. -
    -

    Or, if you are undecided on a prefix: + section~\ref{glo:\acronymtype}. +

    +

    Or, if you are undecided on a prefix:

    -
    +
          The list of acronyms is in
    -      
    section~\ref{\glsautoprefix\acronymtype}. -
    -

    + section~\ref{\glsautoprefix\acronymtype}. +

    +

    -
  • +

    nameref: this is like : this is like autolabel but uses an unnumbered sectioning command (e.g.  but uses an unnumbered sectioning command (e.g. \chapter* or + id="dx1-44012"> or \section*). It’s designed for use with the ). It’s designed for use with the nameref package. For example: + id="dx1-44014"> package. For example: -

    +

    +
          \usepackage{nameref}
    -      
    \usepackage[numberedsection=nameref]{glossaries} -
    -

    Now +

    Now \nameref{main} will display the (TOC) section title associated with the main glossary. As above, you can redefine \glsautoprefix to provide a prefix for the label.

  • -

    +

    -

    Top

    2.3 Glossary Appearance Options

    -

    +

    savenumberlist={boolean}

    -

    This is a boolean option that specifies whether or not to gather and store the

    This is a boolean option that specifies whether or not to gather and store the number list for each entry. The + id="dx1-46001"> for each entry. The default is savenumberlist=false. (See . (See \glsentrynumberlist and and \glsdisplaynumberlist in §9 Using Glossary -Terms Without Links.) This is always true if you use in §??sec:glsnolink +Using Glossary Terms Without Links.) This is always true if you use Option 1. -

    If you use the

    If you use the record option (with either no value or option (with either no value or record=only or or record=nameref) then this package option + id="dx1-46007">) then this package option has no effect. With bib2gls, the , the number lists are automatically saved with the default s are automatically saved with the default save-locations=true -and +and save-loclist=true resource settings.
    -

    -

    + id="dx1-46011"> resource settings.

    +

    +

    entrycounter={boolean}

    -

    This is a boolean option. (Default is

    This is a boolean option. (Default is entrycounter=false.) If set, each main (level 0) glossary entry will be + id="dx1-47001">.) If set, each main (level 0) glossary entry will be numbered when using the standard glossary styles. This option creates the counter glossaryentry. -

    If you use this option, you can reference the entry number within the document using -


    If you use this option, you can reference the entry number within the document using +


    \glsrefentry{label}

    -

    +

    where ⟨label⟩ is the label associated with that glossary entry. The labelling systems uses ⟨prefix⟩⟨label⟩, where ⟨label⟩ is the entry’s label and ⟨prefix⟩ is given by -



    \GlsEntryCounterLabelPrefix

    -

    +

    (which defaults to glsentry-). -

    If you use

    If you use \glsrefentry, you must run LaTeX twice after creating the glossary files using makeglossaries, , makeindex or or xindy to ensure the cross-references are up-to-date.
    - - -

    -

    + id="dx1-47008"> to ensure the cross-references are up-to-date.

    +

    +

    counterwithin={value}

    -

    This is a ⟨

    This is a ⟨key⟩=⟨value⟩ option where ⟨value⟩ is the name of a counter. If used, this option will automatically set @@ -9102,379 +9501,384 @@ class="cmti-10">value⟩ is the name of a counter. If used, this opt class="cmss-10">entrycounter=true and the and the glossaryentry counter will be reset every time ⟨ counter will be reset every time ⟨value⟩ is incremented. -

    The

    The glossaryentry counter isn’t automatically reset at the start of each glossary, except when glossary section + id="dx1-48003"> counter isn’t automatically reset at the start of each glossary, except when glossary section numbering is on and the counter used by counterwithin is the same as the counter used in the glossary’s + id="dx1-48004"> is the same as the counter used in the glossary’s sectioning command.
    -

    -

    If you want the counter reset at the start of each glossary, you can modify the glossary preamble +

    +

    If you want the counter reset at the start of each glossary, you can modify the glossary preamble (\glossarypreamble) to use -


    ) to use +


    \glsresetentrycounter

    -

    +

    which sets glossaryentry to zero: + id="dx1-48007"> to zero:

    -
    +
     \renewcommand{\glossarypreamble}{%
    - 
      \glsresetentrycounter - 
    } -
    -

    or if you are using +

    or if you are using \setglossarypreamble, add it to each glossary preamble, as required. For + id="dx1-48008">, add it to each glossary preamble, as required. For example:

    -
    +
     \setglossarypreamble[acronym]{%
    - 
      \glsresetentrycounter - 
      The preamble text here for the list of acronyms. - 
    } - 
    \setglossarypreamble{% - 
      \glsresetentrycounter - 
      The preamble text here for the main glossary. - 
    } -
    -

    -

    +  \glsresetentrycounter +  The preamble text here for the list of acronyms. +} +\setglossarypreamble{% +  \glsresetentrycounter +  The preamble text here for the main glossary. +} +

    +

    +

    subentrycounter={boolean}

    -

    This is a boolean option. (Default is

    This is a boolean option. (Default is subentrycounter=false.) If set, each level 1 glossary entry will be numbered + id="dx1-49001">.) If set, each level 1 glossary entry will be numbered when using the standard glossary styles. This option creates the counter glossarysubentry. The counter is reset with each main (level 0) entry. Note that this package option is independent of entrycounter. You can reference + id="dx1-49004">. You can reference the number within the document using \glsrefentry{label} where ⟨label⟩ is the label associated with the sub-entry. -

    +

    style={value}

    -

    This is a ⟨

    This is a ⟨key⟩=⟨value⟩ option. (Default is style=list, unless , unless classicthesis has been loaded, in which case the default is + id="dx1-50002"> has been loaded, in which case the default is style=index.) Its value should be the name of the glossary style to use. This key may only be used for styles + id="dx1-50003">.) Its value should be the name of the glossary style to use. This key may only be used for styles defined in glossary-list, , glossary-long, , glossary-super or or glossary-tree. Alternatively, you can set the style + id="dx1-50007">. Alternatively, you can set the style using -



    \setglossarystyle{style name}

    -

    +

    (See §15 §??sec:styles Glossary Styles for further details.) -

    +

    nolong

    -

    This prevents the

    This prevents the glossaries package from automatically loading glossary-long (which means that the (which means that the longtable + id="dx1-51002"> package also won’t be loaded). This reduces overhead by not defining unwanted styles and commands. Note that if you use this option, you won’t be able to use any of the glossary styles defined in the glossary-long package (unless you explicitly load glossary-long). + id="dx1-51003">). -

    +

    nosuper

    -

    This prevents the

    This prevents the glossaries package from automatically loading glossary-super (which means that the + id="dx1-52001"> (which means that the supertabular package also won’t be loaded). This reduces overhead by not defining unwanted styles and + id="dx1-52002"> package also won’t be loaded). This reduces overhead by not defining unwanted styles and commands. Note that if you use this option, you won’t be able to use any of the glossary styles defined in the glossary-super package (unless you explicitly load glossary-super). -

    + id="dx1-52003">). +

    nolist

    -

    This prevents the

    This prevents the glossaries package from automatically loading glossary-list. This reduces overhead by not + id="dx1-53001">. This reduces overhead by not defining unwanted styles. Note that if you use this option, you won’t be able to use any of the glossary styles defined in the glossary-list package (unless you explicitly load glossary-list). Note that since the default style is ). Note that since the default style is list + id="dx1-53003"> (unless classicthesis has been loaded), you will also need to use the has been loaded), you will also need to use the style option to set the style to something + id="dx1-53005"> option to set the style to something else. -

    +

    notree

    -

    This prevents the

    This prevents the glossaries package from automatically loading glossary-tree. This reduces overhead by not + id="dx1-54001">. This reduces overhead by not defining unwanted styles. Note that if you use this option, you won’t be able to use any of the glossary styles defined in the glossary-tree package (unless you explicitly load glossary-tree). Note that if ). Note that if classicthesis has been + id="dx1-54003"> has been loaded, the default style is index, which is provided by , which is provided by glossary-tree. -

    + id="dx1-54005">. +

    nostyles

    -

    This prevents all the predefined styles from being loaded. If you use this option, you need to load a glossary +

    This prevents all the predefined styles from being loaded. If you use this option, you need to load a glossary style package (such as glossary-mcols). Also if you use this option, you can’t use the ). Also if you use this option, you can’t use the style package option. Instead + id="dx1-55002"> package option. Instead you must either use \setglossarystyle{style} or the style key in the optional argument to key in the optional argument to \printglossary. + id="dx1-55005">. Example:

    -
    +
     \usepackage[nostyles]{glossaries}
    - 
    \usepackage{glossary-mcols} - 
    \setglossarystyle{mcoltree} -
    -

    -

    +\usepackage{glossary-mcols} +\setglossarystyle{mcoltree} +

    +

    +

    nonumberlist

    -

    This option will suppress the associated

    This option will suppress the associated number lists in the glossaries (see also §5 Number lists). Note -that if you use Options s in the glossaries (see also §??sec:numberlists Number Lists). +Note that if you use Options 2 or 3 (makeindex or or xindy) then the locations must still be valid. This + id="dx1-56003">) then the locations must still be valid. This package option merely prevents the number list from being displayed, but both from being displayed, but both makeindex and and xindy + id="dx1-56006"> still require a location or cross-reference for each term that’s indexed. Remember that number list + id="dx1-56007"> includes any cross-references, so suppressing the number list will also hide the cross-references (see + id="dx1-56008"> will also hide the cross-references (see below). -

    +

    seeautonumberlist

    -

    If you suppress the

    If you suppress the number lists with s with nonumberlist, described above, this will also suppress any cross-referencing -information supplied by the , described above, this will also suppress any +cross-referencing information supplied by the see key in key in \newglossaryentry or or \glssee. If you use . If you +use seeautonumberlist, the , the see -key will automatically implement key will automatically implement nonumberlist=false for that entry. (Note this doesn’t affect \glssee.) For -further details see §8 Cross-Referencing Entries. -

    + id="dx1-57008"> for that +entry. (Note this doesn’t affect \glssee.) For further details see §??sec:crossref Cross-Referencing +Entries. +

    counter={value}

    -

    This is a ⟨

    This is a ⟨key⟩=⟨value⟩ option. (Default is counter=page.) The value should be the name of the default counter to + id="dx1-58001">.) The value should be the name of the default counter to use in the number lists (see §5 Number lists). -

    + id="dx1-58002">s (see §??sec:numberlists Number Lists). +

    nopostdot={boolean}

    -

    This is a boolean option. If no value is specified,

    This is a boolean option. If no value is specified, true is assumed. When set to is assumed. When set to true, this option suppresses the + id="dx1-59002">, this option suppresses the default post description dot used by some of the predefined styles. -

    The default setting is

    The default setting is nopostdot=false for the base for the base glossaries package and nopostdot=true for + id="dx1-59004"> for glossaries-extra. - - -

    The

    The glossaries-extra package provides glossaries-extra package provides postdot, which is equivalent to , which is equivalent to nopostdot=false, and also , and also postpunc, + id="dx1-59007">, which allows you to choose a different punctuation character.
    -

    -

    +

    +

    nogroupskip={boolean}

    -

    This is a boolean option. If no value is specified,

    This is a boolean option. If no value is specified, true is assumed. When set to true, this option suppresses the default vertical gap between letter groups used by some of the predefined styles. The default setting is @@ -9482,31 +9886,31 @@ default vertical gap between letter groups used by some of the predefined styles class="cmss-10">nogroupskip=false. -

    If you are using . +

    If you are using bib2gls without the without the --group (or -g) switch then you don’t need to use nogroupskip=true as there won’t be any letter groups.
    -

    -

    +

    +

    stylemods={list} (glossaries-extra.sty)

    -

    Load the

    Load the glossaries-extra-stylemods package and patch the predefined styles. The ⟨ package, which patches the predefined styles. The ⟨list⟩ argument is optional. If present, this will also load glossary-.sty for each ⟨element⟩ in the comma-separated ⟨list⟩. -

    +

    -

    Top

    2.4 Indexing Options

    -

    +

    seenoindex={value}

    -

    Introduced in version 4.24, this option may take one of three values:

    Introduced in version 4.24, this option may take one of three values: error, warn or ignore. The see key + id="dx1-63001"> key automatically indexes the cross-referenced entry using \glsadd. This means that if this key is +class="cmtt-10">\glssee. This means that if this key is used in an entry definition before the relevant glossary file has been opened, the indexing can’t be performed. Since this is easy to miss, the glossaries package by default issues an error message if the see key is used before key is used before \makeglossaries. This option allows you to change the error into just a + id="dx1-63004">. This option allows you to change the error into just a warning (seenoindex=warn) or ignore it () or ignore it (seenoindex=ignore) if, for example, you want to temporarily + id="dx1-63006">) if, for example, you want to temporarily comment out \makeglossaries to speed up the compilation of a draft document by omitting the indexing. -

    +

    esclocations={boolean}

    -

    This is a boolean option. The default is

    This is a boolean option. The default is esclocations=true, which is needed for Options , which is needed for Options 2 and 3. With Option 1 \makenoidxglossaries changes it to changes it to esclocations=false. With . With Option 4 (bib2gls), this setting is + id="dx1-64004">), this setting is ignored. -

    Both

    Both makeindex and and xindy are fussy about the location formats ( are fussy about the location formats (makeindex more so than more so than xindy) so the + id="dx1-64008">) so the glossaries package tries to ensure that special characters are escaped and allows for the location to be substituted for a format that’s more acceptable to the indexing application. This requires a bit of trickery to circumvent the problem posed by TeX’s asynchronous output routine, which can go wrong and also adds to the complexity of the document build. -

    If you’re sure that your locations will always expand to an acceptable format (or you’re prepared to +

    If you’re sure that your locations will always expand to an acceptable format (or you’re prepared to post-process the glossary file before passing it to the relevant indexing application) then use esclocations=false to + id="dx1-64009"> to avoid the complex escaping of location values. (See “Writing information to associated files” in the documented code for further details.) -

    This isn’t an issue for Options 

    This isn’t an issue for Options 1 or 4 as the locations are written to the aux file so no syntax conversion is + id="dx1-64010"> file so no syntax conversion is required. -

    +

    indexonlyfirst={boolean}

    -

    This is a boolean option that specifies whether to only add information to the external glossary file on

    This is a boolean option that specifies whether to only add information to the external glossary file on first use. The default is indexonlyfirst=false, which will add a line to the file every time one of the , which will add a line to the file every time one of the \gls-like or \glstext-like commands are used. Note that \glsadd will always add information to the external glossary + id="dx1-65002"> will always add information to the external glossary file2.4 (since + id="x1-65003f4"> (since that’s the purpose of that command). -

    Resetting the

    Resetting the first use flag with commands like \glsreset after an entry has been indexed will cause that + id="dx1-65004"> after an entry has been indexed will cause that entry to be indexed multiple times if it’s used again after the reset. Likewise unsetting the first use flag before an entry has been indexed will prevent it from being indexed (unless specifically indexed with \glsadd).
    -

    -

    You can customise this by redefining -


    +

    You can customise this by redefining +


    \glswriteentry{label}{wr-code}

    -

    +

    where ⟨label⟩ is the entry’s label and ⟨wr-code⟩ is the code that writes the entry’s information to the external file. @@ -9674,391 +10079,427 @@ class="cmtt-10">\glswriteentry is:

    -
    +
     \newcommand*{\glswriteentry}[2]{%
    - 
      \ifglsindexonlyfirst - 
        \ifglsused{#1}{}{#2}% - 
      \else - 
        #2% - 
      \fi - 
    } -
    -

    This checks the +

    This checks the indexonlyfirst package option (using package option (using \ifglsindexonlyfirst) and does ⟨wr-code⟩ if this is false otherwise it only does ⟨wr-code⟩ of the entry hasn’t been used. -

    For example, suppose you only want to index the first use for entries in the

    For example, suppose you only want to index the first use for entries in the acronym glossary and not in the main (or any other) glossary:

    -
    +
     \renewcommand*{\glswriteentry}[2]{%
    - 
     \ifthenelse{\equal{\glsentrytype{#1}}{acronym}} - 
     {\ifglsused{#1}{}{#2}}% - 
     {#2}% - 
    } -
    -

    Here I’ve used +

    Here I’ve used \ifthenelse to ensure the arguments of \equal are fully expanded before the comparison is made. -

    With the

    With the glossaries-extra package it’s possible to only index first use for particular categories. For example, if -you only want this enabled for abbreviations and acronyms then you can set the indexonlyfirst attribute for the + id="dx1-65007"> attribute for the abbreviation and acronym categories. (Instead of using the indexonlyfirst package option.) See the + id="dx1-65008"> package option.) See the glossaries-extra manual for further details. -

    +

    indexcrossrefs={boolean} (glossaries-extra.sty)

    -

    If true, this will automatically index any cross-referenced entries that haven’t been marked as used at +

    If true, this will automatically index (\glsadd) any cross-referenced entries that haven’t been marked as used at the end of the document. Increases document build time. See glossaries-extra manual for further details. -

    +

    Note that bib2gls can automatically find dependent entries when it parses the bib file. Use the selection +option to \GlsXtrLoadResources to determine the selection of dependencies.
    +

    +

    autoseeindex={boolean} (glossaries-extra.sty)

    -

    If

    If true, makes the see and and seealso keys automatically index the cross-reference when the entry is defined -(default, and the only option with just the base keys automatically index the cross-reference (with \glssee) when the entry +is defined (default, and the only option with just the base glossaries package). -

    +

    With bib2gls, use the selection option to \GlsXtrLoadResources to determine the selection of +dependencies.
    +

    +

    record={value} (glossaries-extra.sty)

    -

    If not

    If not off, this option indicates that bib2gls is required. If the value is omitted, is required. If the value is omitted, only is assumed. Permitted values: + +

    +

    off

    off

    +

    bib2gls isn’t being used; -

    + id="dx1-68002"> isn’t being used; +

    +

    only

    only

    +

    bib2gls is being used to fetch entries from a is being used to fetch entries from a bib file, to sort the entries and collate the file, to sort the entries and collate the number lists, where the location information is the same as for Options s, where the location information is the same as for Options 13; - - -

    +

    +

    nameref

    like only but provides extra information that allows the associated title to be used instead of - the location number; -
    +class="cmssbx-10">nameref

    +

    like only but provides extra information that allows the associated title to be used instead of the + location number and provides better support for hyperlinked locations; +

    +

    alsoindex

    a hybrid approach where hybrid

    +

    a hybrid approach where bib2gls is begin used to fetch entries from a is used to fetch entries from a bib file but file but makeindex - or or xindy are used for the indexing. This requires a more complicated document build and isn’t - recommended.

    -

    See + are used for the indexing. This requires a more complicated document build and isn’t recommended.

    +

    See glossaries-extra manual for further details. -

    +

    equations={boolean} (glossaries-extra.sty)

    -

    If

    If true, this option will cause the default location counter to automatically switch to equation when inside a numbered equation environment. -

    +

    floats={boolean} (glossaries-extra.sty)

    -

    If

    If true, this option will cause the default location counter to automatically switch to the corresponding counter when inside a float. (Remember that with floats it’s the \caption command that increments the counter so the location will be incorrect if an entry is indexed within the float before the caption.) -

    + + +

    indexcounter (glossaries-extra.sty)

    -

    This valueless option is primarily intended for use with

    This valueless option is primarily intended for use with bib2gls and and hyperref allowing the page location -hyperlink to the relevant point in the page (rather than the top of the page). Unexpected results will occur with -other indexing methods. See allowing the page location +hyperlink target to be set to the relevant point within the page (rather than the top of the page). +Unexpected results will occur with other indexing methods. See glossaries-extra manual for further details. -

    +class="cmss-10">glossaries-extra manual for further +details. +

    -

    Top

    2.5 Sorting Options

    -

    This section is mostly for Options 

    This section is mostly for Options 2 and 3. Only the sort and and order options are applicable for + id="dx1-72002"> options are applicable for Option 1. -

    With Options 

    With Options 46, only sort=none is applicable (and this is automatically implemented by - is applicable (and this is automatically implemented by +record=only and and record=nameref). With ). With bib2gls, the sort method is provided in the optional argument of -, the sort method is provided in the optional argument of +\GlsXtrLoadResources not with the not with the sort package option. There’s no sorting with Options 5 and 6.
    - - -

    -

    +

    +

    sanitizesort={boolean}

    -

    This is a boolean option that determines whether or not to

    This is a boolean option that determines whether or not to sanitize the sort value when writing to the external + id="dx1-73001"> the sort value when writing to the external glossary file. For example, suppose you define an entry as follows:

    -
    +
     \newglossaryentry{hash}{name={\#},sort={#},
    - 
     description={hash symbol}} -
    -

    The sort value ( +

    The sort value (#) must be sanitized before writing it to the glossary file, otherwise LaTeX will try to interpret it as a parameter reference. If, on the other hand, you want the sort value expanded, you need to switch off the sanitization. For example, suppose you do:

    -
    +
     \newcommand{\mysortvalue}{AAA}
    - 
    \newglossaryentry{sample}{% - 
      name={sample}, - 
      sort={\mysortvalue}, - 
      description={an example}} -
    -

    and you actually want +

    and you actually want \mysortvalue expanded, so that the entry is sorted according to AAA, then use the package option sanitizesort=false. -

    The default for Options . +

    The default for Options 2 and 3 is sanitizesort=true, and the default for , and the default for Option 1 is sanitizesort=false. -

    + id="dx1-73004">. +

    sort={value}

    -

    If you use Options 

    If you use Options 2 or 3, this package option is the only way of specifying how to sort the glossaries. Only Option 1 allows you to specify sort methods for individual glossaries via the sort key in the optional argument + id="dx1-74001"> key in the optional argument of \printnoidxglossary. If you have multiple glossaries in your document and you are using . If you have multiple glossaries in your document and you are using Option 1, only use the package options sort=def or or sort=use if you want to set this sort method for if you want to set this sort method for all your glossaries. -

    This is a ⟨

    This is a ⟨key⟩=⟨value⟩ option where ⟨value⟩ may be one of the following:

      -
    • +

      standard : entries are sorted according to the value of the : entries are sorted according to the value of the sort key used in key used in \newglossaryentry (if + id="dx1-74007"> (if present) or the name key (if key (if sort key is missing); -

    • -
    • key is missing); +

    • +
    • +

      def : entries are sorted in the order in which they were defined (the : entries are sorted in the order in which they were defined (the sort key in key in \newglossaryentry is ignored); -

    • -
    • +
    • +

      use : entries are sorted according to the order in which they are used in the document (the : entries are sorted according to the order in which they are used in the document (the sort + id="dx1-74013"> key in \newglossaryentry is ignored). -

      Both

      Both sort=def and and sort=use set the sort key to a six digit number via -


      set the sort key to a six digit number via +


      \glssortnumberfmt{number}

      -

      +

      (padded with leading zeros, where necessary). This can be redefined, if required, before the entries are defined (in the case of sort=def) or before the entries are used (in the case of ) or before the entries are used (in the case of sort=use). + id="dx1-74018">). + +

    • -
    • +

      none : this setting is new to version 4.30 and is only for documents that don’t use : this setting is new to version 4.30 and is only for documents that don’t use \makeglossaries (Options 2 or \makenoidxglossaries (Option 1). It omits the code used to sanitize or escape the sort value, since it’s not required. This can help to improve the document build speed, especially if there are a large number of entries. - - -

      This option can’t be used with

      This option can’t be used with \printglossary or \printnoidxglossary (or the iterative versions glossaries-extra’s \printunsrtglossary (Option 5).

    -

    Note that the group styles (such as

    Note that the group styles (such as listgroup) are incompatible with the ) are incompatible with the sort=use and and sort=def options. -

    The default is options. +

    The default is sort=standard. When the standard sort option is in use, you can hook into the sort mechanism + id="dx1-74023">. When the standard sort option is in use, you can hook into the sort mechanism by redefining: -



    \glsprestandardsort{sort cs}{type}{label}

    -

    +

    where ⟨sort cs⟩ is a temporary control sequence that stores the sort value (which was either explicitly set via the sort key or implicitly set via the key or implicitly set via the name key) before any escaping of the key) before any escaping of the makeindex//xindy special characters is + id="dx1-74028"> special characters is performed. By default \glsprestandardsort just does: -



    \glsdosanitizesort

    -

    +

    which sanitizes ⟨s ⟨sort cs⟩ if the sanitizesort package option is set (or does nothing if the package option + id="dx1-74031"> package option is set (or does nothing if the package option sanitizesort=false is used). -

    The other arguments, ⟨ is used). +

    The other arguments, ⟨type⟩ and ⟨label⟩, are the glossary type and the entry label for the current entry. Note that ⟨type⟩ will always be a control sequence, but ' class="cmti-10">label⟩ will be in the form used in the first argument of \newglossaryentry. -

    Redefining . +

    Redefining \glsprestandardsort won’t affect any entries that have already been defined and will have no effect at all if you are using sort=def or or sort=use.
    -

    + id="dx1-74035">.

    +

    -

    Example 1 (Mixing Alphabetical and Order of Definition Sorting) -

    Suppose I have three glossaries: +

    Suppose I have three glossaries: main, acronym and notation, and let’s suppose I want the main and class="cmtt-10">acronym glossaries to be sorted alphabetically, but the notation type should be sorted in order of definition. -

    For

    For Option 1, the sort option can be used in option can be used in \printnoidxglossary: + id="dx1-74039">:

    -
    +
     \printnoidxglossary[sort=word]
    - 
    \printnoidxglossary[type=acronym,sort=word] - 
    \printnoidxglossary[type=notation,sort=def] -
    -

    -

    For Options  +

    +

    For Options 2 or 3, I can set the sort to standard (which is the default, but can be explicitly set via the @@ -10196,7 +10635,7 @@ package option sort=standard), and I can either define all my ), and I can either define all my main and acronym entries, then redefine sort cs⟩ if ⟨type⟩ is notation. -

    The first option can be achieved as follows: +

    The first option can be achieved as follows:

    -
    +
     \newcounter{sortcount}
    - 
    \renewcommand{\glsprestandardsort}[3]{% - 
      \stepcounter{sortcount}% - 
      \edef#1{\glssortnumberfmt{\arabic{sortcount}}}% - 
    } -
    -

    The second option can be achieved as follows: +\renewcommand{\glsprestandardsort}[3]{% +  \stepcounter{sortcount}% +  \edef#1{\glssortnumberfmt{\arabic{sortcount}}}% +} +

    +

    The second option can be achieved as follows:

    -
    +
     \newcounter{sortcount}
    - 
    \renewcommand{\glsprestandardsort}[3]{% - 
      \ifdefstring{#2}{notation}% - 
      {% - 
         \stepcounter{sortcount}% - 
         \edef#1{\glssortnumberfmt{\arabic{sortcount}}}% - 
      }% - 
      {% - 
         \glsdosanitizesort - 
      }% - 
    } -
    -

    ( +

    (\ifdefstring is defined by the etoolbox package.) For a complete document, see the sample file + id="dx1-74041"> package.) For a complete document, see the sample file sampleSort.tex.

    -

    -

    ____________________________

    +

    +

    ____________________________

    -

    Example 2 (Customizing Standard Sort (Options 2 or 3)) -

    Suppose you want a glossary of people and you want the names listed as ⟨ +

    Suppose you want a glossary of people and you want the names listed as ⟨first-name⟩ ⟨surname⟩ in the glossary, but you want the names sorted by ⟨}{surname} that you can use in the name key when you define the entry, but + id="dx1-74044"> key when you define the entry, but hook into the standard sort mechanism to temporarily redefine \name while the sort value is being set. -

    First, define two commands to set the person’s name: +

    First, define two commands to set the person’s name:

    -
    +
     \newcommand{\sortname}[2]{#2, #1}
    - 
    \newcommand{\textname}[2]{#1 #2} -
    -

    and +

    and \name needs to be initialised to \textname:

    -
    +
     \let\name\textname
    -
    -

    Now redefine +

    Now redefine \glsprestandardsort so that it temporarily sets \name to \sortname and expands the sort @@ -10301,221 +10740,223 @@ text:

    -
    +
     \renewcommand{\glsprestandardsort}[3]{%
    - 
     \let\name\sortname - 
     \edef#1{\expandafter\expandonce\expandafter{#1}}% - 
     \let\name\textname - 
     \glsdosanitizesort - 
    } -
    -

    (The somewhat complicate use of +

    (The somewhat complicate use of \expandafter etc helps to protect fragile commands, but care is still needed.) -

    Now the entries can be defined: +

    Now the entries can be defined:

    -
    +
     \newglossaryentry{joebloggs}{name={\name{Joe}{Bloggs}},
    - 
      description={some information about Joe Bloggs}} - 
    \newglossaryentry{johnsmith}{name={\name{John}{Smith}}, - 
      description={some information about John Smith}} -
    -

    For a complete document, see the sample file +

    For a complete document, see the sample file samplePeople.tex.

    -

    -

    ____________________________

    -

    +

    +

    ____________________________

    +

    order={value}

    -

    This may take two values:

    This may take two values: word or or letter. The default is word ordering. -

    Note that with Options . The default is word ordering. +

    Note that with Options 2 and 3, the order option has no effect if you don’t use option has no effect if you don’t use makeglossaries. + id="dx1-75004">.
    -

    -

    If you use

    +

    If you use Option 1, this setting will be used if you use sort=standard in the optional argument of \printnoidxglossary: + id="dx1-75006">:

    -
    +
     \printnoidxglossary[sort=standard]
    -
    -

    Alternatively, you can specify the order for individual glossaries: + +

    Alternatively, you can specify the order for individual glossaries:

    -
    +
     \printnoidxglossary[sort=word]
    - 
    \printnoidxglossary[type=acronym,sort=letter] -
    -

    -

    With +

    +

    With bib2gls, use the , use the break-at option in option in \GlsXtrLoadResources instead of instead of order.
    -

    -

    +

    +

    makeindex

    -

    (

    (Option 2) The glossary information and indexing style file will be written in makeindex format. If you use + id="dx1-76001"> format. If you use makeglossaries, it will automatically detect that it needs to call , it will automatically detect that it needs to call makeindex. If you don’t use . If you don’t use makeglossaries, + id="dx1-76004">, you need to remember to use makeindex not not xindy. The indexing style file will been given a . The indexing style file will been given a ist + id="dx1-76007"> extension. -

    You may omit this package option if you are using

    You may omit this package option if you are using Option 2 as this is the default. It’s available in case you need to override the effect of an earlier occurrence of xindy in the package option list. -

    + id="dx1-76008"> in the package option list. +

    xindy

    -

    (

    (Option 3) The glossary information and indexing style file will be written in xindy format. If you use + id="dx1-77001"> format. If you use makeglossaries, it will automatically detect that it needs to call , it will automatically detect that it needs to call xindy. If you don’t use . If you don’t use makeglossaries, + id="dx1-77004">, you need to remember to use xindy not not makeindex. The indexing style file will been given a . The indexing style file will been given a xdy + id="dx1-77007"> extension. -

    This package option may additionally have a value that is a ⟨

    This package option may additionally have a value that is a ⟨key⟩=⟨value⟩ comma-separated list to override the language and codepage. For example:

    -
    +
     \usepackage[xindy={language=english,codepage=utf8}]
    - 
      {glossaries} -
    -

    You can also specify whether you want a number group in the glossary. This defaults to true, but can be +  {glossaries} + +

    You can also specify whether you want a number group in the glossary. This defaults to true, but can be suppressed. For example:

    -
    +
     \usepackage[xindy={glsnumbers=false}]{glossaries}
    -
    -

    If no value is supplied to this package option (either simply writing +

    If no value is supplied to this package option (either simply writing xindy or writing xindy={}) then the language, codepage and number group settings are unchanged. See §11 Xindy (Option 3) for further details on -using §??sec:xindy Xindy (Option 3) for further +details on using xindy with the with the glossaries package. -

    +

    xindygloss

    -

    (

    (Option 3) This is equivalent to xindy={} (that is, the xindy option without any value supplied) and may be + id="dx1-78001"> option without any value supplied) and may be used as a document class option. The language and code page can be set via \GlsSetXdyLanguage and + id="dx1-78002"> and \GlsSetXdyCodePage (see §11.1 (see §??sec:langenc Language and Encodings.) -

    +

    xindynoglsnumbers

    -

    (

    (Option 3) This is equivalent to xindy={glsnumbers=false} and may be used as a document class option. -

    +

    automake={value}

    -

    This is option was introduced to version 4.08 as a boolean option. As from version 4.42 it may now take three +

    This is option was introduced to version 4.08 as a boolean option. As from version 4.42 it may now take three values: false (default), true or automake=true will attempt to run will attempt to run makeindex or or xindy using TeX’s using TeX’s \write18 mechanism + id="dx1-80004"> mechanism at the end of the document. The option automake=immediate will attempt to run will attempt to run makeindex or + id="dx1-80006"> or xindy at the start of at the start of \makeglossaries using using \immediate (before the glossary files have been opened). -

    In the case of

    In the case of automake=true, the associated files are created at the end of the document ready + id="dx1-80009">, the associated files are created at the end of the document ready for the next LaTeX run. Since there is a possibility of commands such as \gls occurring on the last page of the document, it’s not possible to use \write18 fails. In such cases, you will need to use automake=immediate + id="dx1-80010"> instead. -

    With

    With automake=immediate, you will get a warning on the first LaTeX run as the associated glossary files + id="dx1-80011">, you will get a warning on the first LaTeX run as the associated glossary files don’t exist yet. -

    Since this mechanism can be a security risk, some TeX distributions disable it completely, in which case this +

    Since this mechanism can be a security risk, some TeX distributions disable it completely, in which case this option won’t have an effect. (If this option doesn’t appear to work, search the log file for “runsystem” and see if it is followed by “enabled” or “disabled”.) -

    Some distributions allow

    Some distributions allow \write18 in a restricted mode. This mode has a limited number of trusted applications, which usually includes makeindex but may not include but may not include xindy. So if you have the restricted mode + id="dx1-80013">. So if you have the restricted mode on, automake should work with should work with makeindex but may not work with but may not work with xindy. -

    However even in unrestricted mode this option may not work with . +

    However even in unrestricted mode this option may not work with xindy as as xindy uses language names that + id="dx1-80018"> uses language names that don’t always correspond with \babel’s language names. (The babel’s language names. (The makeglossaries script applies mappings to assist + id="dx1-80020"> script applies mappings to assist you.) Note that you still need at least two LaTeX runs to ensure the document is up-to-date with this setting. -

    Since this package option attempts to run the

    Since this package option attempts to run the indexing application on every LaTeX run, its use should be considered a last resort for those who can’t work out how to incorporate the indexing application into their document build. The default value for this option is automake=false. -

    + id="dx1-80021">. +

    disablemakegloss

    -

    This valueless option indicates that

    This valueless option indicates that \makeglossaries and and \makenoidxglossaries should be disabled. This -option is provided in the event that you have to use a class or package that disregards the advice in §1.1 Indexing -Options and automatically performs should be disabled. +This option is provided in the event that you have to use a class or package that disregards the +advice in §??sec:indexingoptions Indexing Options and automatically performs \makeglossaries or or +\makenoidxglossaries but you don’t want this. (For -example, you want to use a different indexing method or you want to disable indexing while working on a draft -document.) -

    This option may be passed in the standard document class option list or passed using but you don’t want this. (For example, you want to use a different indexing method or +you want to disable indexing while working on a draft document.) +

    This option may be passed in the standard document class option list or passed using \PassOptionsToPackage before glossaries is loaded. Note that this does nothing if is loaded. Note that this does nothing if \makeglossaries or or \makenoidxglossaries has + id="dx1-81007"> has already been used whilst enabled. -

    +

    restoremakegloss

    -

    Cancels the effect of

    Cancels the effect of disablemakegloss. This option may be used in . This option may be used in \setupglossaries. It issues a warning if \makeglossaries or or \makenoidxglossaries has already been used whilst enabled. For + id="dx1-82003"> has already been used whilst enabled. For example, suppose the class customclass.cls automatically loads glossaries and does -

    +
     \documentclass[disablemakegloss]{customclass}
    - 
    \newglossary*{functions}{Functions} - 
    \setupglossaries{restoremakegloss} - 
    \makeglossaries -
    -

    or +\newglossary*{functions}{Functions} +\setupglossaries{restoremakegloss} +\makeglossaries + +

    or

    -
    +
     \PassOptionsToPackage{disablemakegloss}{glossaries}
    - 
    \documentclass{customclass} - 
    \newglossary*{functions}{Functions} - 
    \setupglossaries{restoremakegloss} - 
    \makeglossaries -
    -

    -

    Note that restoring these commands doesn’t necessarily mean that they can be used. It just means that their -normal behaviour given the current settings will apply. For example, if you use the +

    +

    Note that restoring these commands doesn’t necessarily mean that they can be used. It just means that their +normal behaviour given the current settings will apply. For example, if you use the record=only or or record=nameref + id="dx1-82005"> options with glossaries-extra then you can’t use \makeglossaries or \makenoidxglossaries regardless of restoremakegloss. -

    + id="dx1-82006">. +

    -

    Top

    2.6 Glossary Type Options

    -

    +

    nohypertypes={list}

    -

    Use this option if you have multiple glossaries and you want to suppress the entry hyperlinks for a particular +

    Use this option if you have multiple glossaries and you want to suppress the entry hyperlinks for a particular glossary or glossaries. The value of this option should be a comma-separated list of glossary types where \gls + id="dx1-84001"> etc shouldn’t have hyperlinks by default. Make sure you enclose the value in braces if it contains any commas. Example:

    -
    +
     \usepackage[acronym,nohypertypes={acronym,notation}]
    - 
      {glossaries} - 
    \newglossary[nlg]{notation}{not}{ntn}{Notation} -
    -

    The values must be fully expanded, so don’t try +

    The values must be fully expanded, so don’t try nohypertypes=\acronymtype. You may also + id="dx1-84002">. You may also use -



    \GlsDeclareNoHyperList{list}

    -

    +

    instead or additionally. See §6 §??sec:glslink Links to Glossary Entries for further details. -

    +

    nomain

    -

    This suppresses the creation of the main glossary and associated

    This suppresses the creation of the main glossary and associated glo file, if unrequired. Note that if you use this + id="dx1-85001"> file, if unrequired. Note that if you use this option, you must create another glossary in which to put all your entries (either via the acronym (or (or acronyms) + id="dx1-85003">) package option described in §2.7 §??sec:pkgopts-acronym Acronym and Abbreviation Options or via the symbols, numbers or + id="dx1-85004">, numbers or index options described in §2.8 options described in §??sec:pkgopts-other Other Options or via \newglossary described in §12 Defining New -Glossaries). -

    If you don’t use the main glossary and you don’t use this option, described in +§??sec:newglossary Defining New Glossaries). +

    If you don’t use the main glossary and you don’t use this option, makeglossaries will produce a warning. + id="dx1-85008"> will produce a warning.
    -

    +

     glossary.
    If you did actually want to use the main glossary and you see this warning, check that you have referenced the entries in that glossary via commands such as \gls. -

    + id="dx1-85009">. +

    symbols

    -

    This valueless option defines a new glossary type with the label

    This valueless option defines a new glossary type with the label symbols via

    -
    +
     \newglossary[slg]{symbols}{sls}{slo}{\glssymbolsgroupname}
    -
    -

    It also defines -


    +

    It also defines +


    \printsymbols[options]

    -

    +

    which is a synonym for

    \printglossary[type=symbols,options]
    -

    If you use

    If you use Option 1, you need to use:

    \printnoidxglossary[type=symbols,options]
    to display the list of symbols. -

    Remember to use the

    Remember to use the nomain package option if you’re only interested in using this package option if you’re only interested in using this symbols glossary and don’t intend to use the main glossary.
    -

    -

    The

    +

    The glossaries-extra package has a slightly modified version of this option which additionally provides -\glsxtrnewsymbol as a convenient shortcut method for defining symbols. See the as a convenient shortcut method for defining symbols. See the glossaries-extra manual for further details.
    -

    -

    +

    +

    numbers

    -

    This valueless option defines a new glossary type with the label

    This valueless option defines a new glossary type with the label numbers via

    -
    +
     \newglossary[nlg]{numbers}{nls}{nlo}{\glsnumbersgroupname}
    -
    -

    It also defines -


    +

    It also defines +


    \printnumbers[options]

    -

    +

    which is a synonym for

    \printglossary[type=numbers,options]
    -

    If you use

    If you use Option 1, you need to use:

    \printnoidxglossary[type=numbers,options]
    to display the list of numbers. -

    Remember to use the

    Remember to use the nomain package option if you’re only interested in using this package option if you’re only interested in using this numbers glossary and don’t intend to use the main glossary.
    -

    -

    The

    +

    The glossaries-extra package has a slightly modified version of this option which additionally provides -\glsxtrnewnumber as a convenient shortcut method for defining numbers. See the as a convenient shortcut method for defining numbers. See the glossaries-extra manual for further details.
    -

    -

    +

    +

    index

    -

    This valueless option defines a new glossary type with the label

    This valueless option defines a new glossary type with the label index via

    -
    +
     \newglossary[ilg]{index}{ind}{idx}{\indexname}%
    -
    -

    It also defines -


    +

    It also defines +


    \newterm[options]{term}

    -

    +

    which is a synonym for

    \newglossaryentry{term}[type=index,name={term},%
    description=\nopostdesc,options]
    and -



    \printindex[options]

    -

    +

    which is a synonym for

    \printglossary[type=index,options]
    -

    If you use

    If you use Option 1, you need to use:

    \printnoidxglossary[type=index,options]
    to display this glossary. -

    Remember to use the

    Remember to use the nomain package option if you’re only interested in using this package option if you’re only interested in using this index glossary and don’t intend to use the main glossary. Note that you can’t mix this option with \index. Either use + id="dx1-88008">. Either use glossaries for the indexing or use a custom indexing package, such as makeidx, , index or or imakeidx. (You + id="dx1-88011">. (You can, of course, load one of those packages and load glossaries without the index package option.) + id="dx1-88012"> package option.)
    -

    -

    Since the index isn’t designed for terms with descriptions, you might also want to disable the hyperlinks for +

    +

    Since the index isn’t designed for terms with descriptions, you might also want to disable the hyperlinks for this glossary using the package option nohypertypes=index or the command + id="dx1-88013"> or the command
    \GlsDeclareNoHyperList{index}
    -

    The example file

    The example file sample-index.tex illustrates the use of the index package option. + id="dx1-88015"> package option. -

    +

    noglossaryindex

    -

    This valueless option switches off

    This valueless option switches off index if if index has been passed implicitly (for example, through global + id="dx1-89002"> has been passed implicitly (for example, through global document options). This option can’t be used in \setupglossaries. -

    +

    -

    Top

    2.7 Acronym and Abbreviation Options

    -

    +

    acronym={boolean}

    -

    If true, this creates a new glossary with the label

    If true, this creates a new glossary with the label acronym. This is equivalent to:

    -
    +
     \newglossary[alg]{acronym}{acr}{acn}{\acronymname}
    -
    -

    It will also define -


    +

    It will also define +


    \printacronyms[options]

    -

    +

    that’s equivalent to

    \printglossary[type=acronym,options] @@ -11111,162 +11557,162 @@ class="cmtt-10">]
    (unless that command is already defined before the beginning of the document or the package option compatible-3.07 is used). -

    If you are using is used). +

    If you are using Option 1, you need to use

    \printnoidxglossary[type=acronym,options]
    to display the list of acronyms. -

    If the

    If the acronym package option is used, package option is used, \acronymtype is set to is set to acronym otherwise it is set to main.2.5 + id="x1-91007f5"> Entries that are defined using \newacronym are placed in the glossary whose label is given by are placed in the glossary whose label is given by \acronymtype, + id="dx1-91014">, unless another glossary is explicitly specified. -

    Remember to use the

    Remember to use the nomain package option if you’re only interested in using this package option if you’re only interested in using this acronym glossary. (That is, you don’t intend to use the main glossary.)
    -

    -

    The

    +

    The glossaries-extra extension package comes with an analogous glossaries-extra extension package comes with an analogous abbreviations option, which creates a new + id="dx1-91016"> option, which creates a new glossary with the label abbreviations and sets the command abbreviations and sets the command \glsxtrabbrvtype to this. If the to this. If the acronym option + id="dx1-91018"> option hasn’t also been used, then \acronymtype will be set to will be set to \glsxtrabbrvtype. This enables both . This enables both \newacronym -and +and \newabbreviation to use the same glossary. -

    Make sure you have at least v1.42 of to use the same glossary. +

    Make sure you have at least v1.42 of glossaries-extra if you use the acronym (or (or acronyms) package option + id="dx1-91024">) package option with the extension package to avoid a bug that interferes with the abbreviation style.

    -

    -

    +

    +

    acronyms

    -

    This is equivalent to

    This is equivalent to acronym=true and may be used in the document class option list. + id="dx1-92001"> and may be used in the document class option list. -

    +

    abbreviations (glossaries-extra.sty)

    -

    This valueless option creates a new glossary type using: +

    This valueless option creates a new glossary type using:

    -
    +
     \newglossary[glg-abr]{abbreviations}{gls-abr}{glo-abr}{\abbreviationsname}
    -
    -

    The label can be accessed with +

    The label can be accessed with \glsxtrabbrvtype, which is analogous to , which is analogous to \acronymtype. See glossaries-extra manual for further details. -

    +

    acronymlists={value}

    -

    By default, only the

    By default, only the \acronymtype glossary is considered to be a list of acronyms. If you have other lists of acronyms, you can specify them as a comma-separated list in the value of acronymlists. For example, if you use + id="dx1-94001">. For example, if you use the acronym package option but you also want the package option but you also want the main glossary to also contain a list of acronyms, you can do:

    -
    +
     \usepackage[acronym,acronymlists={main}]{glossaries}
    -
    -

    No check is performed to determine if the listed glossaries exist, so you can add glossaries you haven’t defined + +

    No check is performed to determine if the listed glossaries exist, so you can add glossaries you haven’t defined yet. For example:

    -
    +
     \usepackage[acronym,acronymlists={main,acronym2}]
    - 
      {glossaries} - 
    \newglossary[alg2]{acronym2}{acr2}{acn2}% - 
      {Statistical Acronyms} -
    -

    You can use -


    +

    You can use +


    \DeclareAcronymList{list}

    -

    +

    instead of or in addition to the acronymlists option. This will add the glossaries given in ⟨ option. This will add the glossaries given in ⟨list⟩ to the list of glossaries that are identified as lists of acronyms. To replace the list of acronym lists with a new list use: -



    \SetAcronymLists{list}

    -

    -

    You can determine if a glossary has been identified as being a list of acronyms using: -


    +

    You can determine if a glossary has been identified as being a list of acronyms using: +


    \glsIfListOfAcronyms{label}{true part}{false part}

    -

    -

    This option is incompatible with

    +

    -

    -

    +class="cmss-10">glossaries-extra’s abbreviation mechanism. +

    +

    +

    shortcuts

    -

    This option provides shortcut commands for acronyms. See §13 Acronyms and Other Abbreviations for further -details. Alternatively you can use: -


    This option provides shortcut commands for acronyms. See §??sec:acronyms Acronyms and Other Abbreviations +for further details. Alternatively you can use: +


    \DefineAcronymSynonyms

    -

    -

    The

    +

    The glossaries-extra package provides additional shortcuts.
    -

    -

    +

    +

    -

    Top

    2.7.1 Deprecated Acronym Style Options

    -

    The package options listed in this section are now deprecated but are kept for backward-compatibility. Use -\setacronymstyle instead. See §13 Acronyms and Other Abbreviations for further details. +

    Top

    2.8 Deprecated Acronym Style Options

    +

    The package options listed in this section are now deprecated but are kept for backward-compatibility. Use -

    +\setacronymstyle instead. See §??sec:acronyms Acronyms and Other Abbreviations for further +details. +

    description

    -

    This option changes the definition of

    This option changes the definition of \newacronym to allow a description. This option may be replaced + id="dx1-97001"> to allow a description. This option may be replaced by

    -
    +
     \setacronymstyle{long-short-desc}
    -
    -

    or (with +

    or (with smallcaps) + id="dx1-97002">)

    -
    +
     \setacronymstyle{long-sc-short-desc}
    -
    -

    or (with +

    or (with smaller) + id="dx1-97003">)

    -
    +
     \setacronymstyle{long-sm-short-desc}
    -
    -

    or (with +

    or (with footnote) + id="dx1-97004">)

    -
    +
     \setacronymstyle{footnote-desc}
    -
    -

    or (with +

    or (with footnote and and smallcaps) + id="dx1-97006">)

    -
    +
     \setacronymstyle{footnote-sc-desc}
    -
    -

    or (with +

    or (with footnote and and smaller) + id="dx1-97008">)

    -
    +
     \setacronymstyle{footnote-sm-desc}
    -
    -

    or (with +

    or (with dua) + id="dx1-97009">)

    -
    +
     \setacronymstyle{dua-desc}
    -
    -

    -

    + +

    +

    smallcaps

    -

    This option changes the definition of

    This option changes the definition of \newacronym and the way that acronyms are displayed. This option may + id="dx1-98001"> and the way that acronyms are displayed. This option may be replaced by:

    -
    +
     \setacronymstyle{long-sc-short}
    -
    -

    or (with +

    or (with description) + id="dx1-98002">)

    -
    +
     \setacronymstyle{long-sc-short-desc}
    -
    -

    or (with +

    or (with description and and footnote) + id="dx1-98004">)

    -
    +
     \setacronymstyle{footnote-sc-desc}
    -
    -

    -

    + +

    +

    smaller

    -

    This option changes the definition of

    This option changes the definition of \newacronym and the way that acronyms are displayed. -

    If you use this option, you will need to include the and the way that acronyms are displayed. +

    If you use this option, you will need to include the relsize package or otherwise define package or otherwise define \textsmaller or + id="dx1-99003"> or redefine \acronymfont.
    -

    + id="dx1-99004">.

    +

    This option may be replaced by:

    -
    +
     \setacronymstyle{long-sm-short}
    -
    -

    or (with +

    or (with description) + id="dx1-99005">)

    -
    +
     \setacronymstyle{long-sm-short-desc}
    -
    -

    or (with +

    or (with description and and footnote) + id="dx1-99007">)

    -
    +
     \setacronymstyle{footnote-sm-desc}
    -
    -

    -

    + +

    +

    footnote

    -

    This option changes the definition of

    This option changes the definition of \newacronym and the way that acronyms are displayed. This option may + id="dx1-100001"> and the way that acronyms are displayed. This option may be replaced by:

    -
    +
     \setacronymstyle{footnote}
    -
    -

    or (with +

    or (with smallcaps) + id="dx1-100002">)

    -
    +
     \setacronymstyle{footnote-sc}
    -
    -

    or (with +

    or (with smaller) + id="dx1-100003">)

    -
    +
     \setacronymstyle{footnote-sm}
    -
    -

    or (with +

    or (with description) + id="dx1-100004">)

    -
    +
     \setacronymstyle{footnote-desc}
    -
    -

    or (with +

    or (with smallcaps and and description) + id="dx1-100006">)

    -
    +
     \setacronymstyle{footnote-sc-desc}
    -
    -

    or (with +

    or (with smaller and and description) + id="dx1-100008">)

    -
    +
     \setacronymstyle{footnote-sm-desc}
    -
    -

    -

    + +

    +

    dua

    -

    This option changes the definition of

    This option changes the definition of \newacronym so that acronyms are always expanded. This option may be + id="dx1-101001"> so that acronyms are always expanded. This option may be replaced by:

    -
    +
     \setacronymstyle{dua}
    -
    -

    or (with +

    or (with description) + id="dx1-101002">)

    -
    +
     \setacronymstyle{dua-desc}
    -
    -

    -

    + +

    +

    -

    Top

    2.8

    Top

    2.9 Other Options

    -

    Other available options that don’t fit any of the above categories are described below. -

    +

    Other available options that don’t fit any of the above categories are described below. +

    accsupp (glossaries-extra.sty)

    -

    Load the

    Load the glossaries-accsupp package. -

    + id="dx1-103001"> package. +

    prefix (glossaries-extra.sty)

    -

    Load the

    Load the glossaries-prefix package. -

    + id="dx1-104001"> package. +

    nomissingglstext={boolean} (glossaries-extra.sty)

    -

    This option may be used to suppress the boilerplate text generated by

    This option may be used to suppress the boilerplate text generated by \printglossary if the glossary file is missing. -

    +

    compatible-2.07={boolean}

    -

    Compatibility mode for old documents created using version 2.07 or below. +

    Compatibility mode for old documents created using version 2.07 or below. -

    +

    compatible-3.07={boolean}

    -

    Compatibility mode for old documents created using version 3.07 or below. -

    +

    Compatibility mode for old documents created using version 3.07 or below. +

    kernelglossredefs={value}

    -

    As a legacy from the precursor

    As a legacy from the precursor glossary package, the standard glossary commands provided by the LaTeX kernel + id="dx1-108001"> package, the standard glossary commands provided by the LaTeX kernel (\makeglossary and \glossary) are redefined in terms of the glossaries package’s commands. However, they were never documented in this user manual, and the conversion guide (“Upgrading from the glossary package to the glossaries package”) explicitly discourages their use. -

    The use of those kernel commands (instead of the appropriate commands documented in this user guide) are +

    The use of those kernel commands (instead of the appropriate commands documented in this user guide) are deprecated, and you will now get a warning if you try using them. -

    In the event that you require the original form of these kernel commands, for example, if you need to use the +

    In the event that you require the original form of these kernel commands, for example, if you need to use the glossaries package with another class or package that also performs glossary-style indexing, then you can restore these commands to their previous definition (that is, their definitions prior to loading the kernelglossredefs=false. You may also need to use the . You may also need to use the nomain option in the event of file + id="dx1-108003"> option in the event of file extension conflicts. (In which case, you must provide a new default glossary for use with the glossaries + id="dx1-108004"> package.) -

    This option may take one of three values:

    This option may take one of three values: true (redefine with warnings, default), false (restore previous definitions) or nowarn (redefine without warnings, not recommended). -

    The only glossary-related commands provided by the LaTeX kernel are

    The only glossary-related commands provided by the LaTeX kernel are \makeglossary and \glossary. Other packages or classes may provide additional glossary-related commands or environments that conflict with @@ -11669,149 +12119,166 @@ Other packages or classes may provide additional glossary-related commands or en class="cmss-10">glossaries (such as \printglossary and theglossary). These non-kernel commands aren’t affected by this + id="dx1-108005">). These non-kernel commands aren’t affected by this package option, and you will have to find some way to resolve the conflict if you require both glossary mechanisms. (The glossaries package will override the existing definitions of package will override the existing definitions of \printglossary and theglossary.) -

    In general, if possible, it’s best to stick with just one package that provides a glossary mechanism. (The + id="dx1-108008">.) +

    In general, if possible, it’s best to stick with just one package that provides a glossary mechanism. (The glossaries package does check for the doc package and patches package and patches \PrintChanges.) -

    +

    -

    Top

    2.9

    Top

    2.10 Setting Options After the Package is Loaded

    -

    Some of the options described above may also be set after the

    Some of the options described above may also be set after the glossaries package has been loaded using -



    \setupglossaries{key-val list}

    -

    +

    The following package options can’t be used in \setupglossaries: xindy, , xindygloss, , xindynoglsnumbers, + id="dx1-109004">, makeindex, , nolong, , nosuper, , nolist, , notree, , nostyles, , nomain, , compatible-2.07, , translate, , notranslate, -, acronym. These options have to be set while the package is loading, except for the . These +options have to be set while the package is loading, except for the xindy sub-options -which can be set using commands like sub-options which can +be set using commands like \GlsSetXdyLanguage (see §11 (see §??sec:xindy Xindy (Option 3) for further details). -

    If you need to use this command, use it as soon as possible after loading

    If you need to use this command, use it as soon as possible after loading glossaries otherwise you might end up using it too late for the change to take effect. For example, if you try changing the acronym styles (such as smallcaps) after you have started defining your acronyms, you are likely to get unexpected results. If you try + id="dx1-109018">) after you have started defining your acronyms, you are likely to get unexpected results. If you try changing the sort option after you have started to define entries, you may get unexpected results.
    -

    +

    +

    With glossaries-extra, use \glossariesextrasetup instead.
    +

    -

    -

    +

    Top

    3. Setting Up

    -

    In the preamble you need to indicate whether you want to use Option 1, Option 2 or Option 3. It’s not -possible to mix these options within a document, although some combinations are possible with glossaries-extra. -(For Options 4 and 5 see the

    In the preamble you need to indicate which method you want to use to generate the glossary +(or glossaries). The available options with both glossaries and glossaries-extra are summarized in +§??sec:indexingoptions Indexing Options. This chapter documents Options 13, which are provided by the +base package. See the glossaries-extra and bib2gls and glossaries-extra manuals.) -

    -

    manuals for the full documentation of the other +options. +

    If you don’t need to display any glossaries, for example, if you are just using the glossaries package to enable +consistent formatting, then skip ahead to §??sec:newglosentry Defining Glossary Entries. +

    +

    Top

    3.1 Option 1

    -

    The command -


    The command +


    \makenoidxglossaries

    -

    +

    must be placed in the preamble. This sets up the internal commands required to make Option 1 work. If you omit \makenoidxglossaries none of the glossaries will be displayed. -

    +

    -

    Top

    3.2 Options 2 and 3

    -

    The command -


    The command +


    \makeglossaries

    -

    +

    must be placed in the preamble in order to create the customised makeindex ( (ist) or ) or xindy ( (xdy) style file (for + id="dx1-112005">) style file (for Options 2 or 3, respectively) and to ensure that glossary entries are written to the appropriate output files. If you omit \makeglossaries none of the glossary files will be created. -

    If you are using

    If you are using glossaries-extra, \makeglossaries has an optional argument that allows you to @@ -11823,8 +12290,8 @@ href="#option3">3. See glossaries-extra manual for further details.
    -

    -

    Note that some of the commands provided by the

    +

    Note that some of the commands provided by the glossaries package must not be used after \makeglossaries as they are required when creating the customised style file. If you attempt to use those @@ -11832,165 +12299,196 @@ commands after \makeglossaries you will generate an error. Similarly, there are some commands that must not be used before \makeglossaries. -

    You can suppress the creation of the customised

    You can suppress the creation of the customised xindy or or makeindex style file using -


    style file using +


    \noist

    -

    +

    That this command must not be used after \makeglossaries. -

    Note that if you have a custom

    Note that if you have a custom xdy file created when using file created when using glossaries version 2.07 or below, you will need to use the compatible-2.07 package option with it.
    -

    -

    The default name for the customised style file is given by package option with it.

    + + +

    +

    The default name for the customised style file is given by \jobnameist (.ist (Option 2) or \jobnamexdy + id="dx1-112013">.xdy (Option 3). This name may be changed using: -



    \setStyleFile{name}

    - - -

    +

    where ⟨name⟩ is the name of the style file without the extension. Note that this command must not be used after \makeglossaries. -

    Each glossary entry is assigned a

    Each glossary entry is assigned a number list that lists all the locations in the document where that entry + id="dx1-112016"> that lists all the locations in the document where that entry was used. By default, the location refers to the page number but this may be overridden using the counter package option. The default form of the location number assumes a full stop compositor + id="dx1-112017"> package option. The default form of the location number assumes a full stop compositor (e.g. 1.2), but if your location numbers use a different compositor (e.g. 1-2) you need to set this using -



    \glsSetCompositor{symbol}

    -

    +

    For example:

    -
    +
     \glsSetCompositor{-}
    -
    -

    This command must not be used after +

    This command must not be used after \makeglossaries. -

    If you use

    If you use Option 3, you can have a different compositor for page numbers starting with an upper case alphabetical character using: -



    \glsSetAlphaCompositor{symbol}

    -

    +

    This command has no effect if you use Option 2. For example, if you want number lists containing a mixture of + id="dx1-112020">s containing a mixture of A-1 and 2.3 style formats, then do:

    -
    +
     \glsSetCompositor{.}\glsSetAlphaCompositor{-}
    -
    -

    See §5 Number lists for further information about +

    See §??sec:numberlists Number Lists for further information about number lists. + id="dx1-112021">s.

    -

    -

    +

    Top

    4. Defining Glossary Entries

    -

    All glossary entries must be defined before they are used, so it is better to define them in the -preamble to ensure this. In fact, some commands such as \longnewglossaryentry may only be used -in the preamble. See §4.8

    If you want to use bib2gls, entries must be defined in bib files using the syntax described in the bib2gls +user manual.
    +

    +

    Acronyms are covered in §??sec:acronyms Acronyms and Other Abbreviations but they use the same +underlying mechanism as all the other entries, so it’s a good idea to read this chapter first. The keys provided +for \newglossaryentry can also be used in the optional argument of \newacronym, although some of them, +such as first and plural, interfere with the acronym styles. +

    All glossary entries must be defined before they are used, so it is better to define them in the preamble to +ensure this. In fact, some commands such as \longnewglossaryentry may only be used in the +preamble. See §??sec:docdefs Drawbacks With Defining Entries in the Document Environment for a -discussion of the problems with defining entries within the document instead of in the preamble. -(The glossaries-extra package has an option that provides a restricted form of document definitions -that avoids some of the issues discussed in §4.8 glossaries-extra package has an option that provides a restricted form of document definitions that avoids +some of the issues discussed in §??sec:docdefs Drawbacks With Defining Entries in the Document Environment.) -

    Option 1 enforces the preamble-only restriction on \newglossaryentry. . Option 4 requires that definitions are provided in bib format. format. Option 5 requires either preamble-only definitions or the use of the glossaries-extra package option docdef=restricted.
    -

    -

    Only those entries that are indexed in the document (using any of the commands described in §6 Links to -Glossary Entries, §7 Adding an Entry to the Glossary Without Generating Text or §8 Cross-Referencing -Entries) will appear in the glossary. See §10 Displaying a glossary to find out how to display the -glossary. -

    New glossary entries are defined using the command: -


    +

    Only those entries that are indexed in the document (using any of the commands described in §??sec:glslink +Links to Glossary Entries, §??sec:glsadd Adding an Entry to the Glossary Without Generating Text or +§??sec:crossref Cross-Referencing Entries) will appear in the glossary. See §??sec:printglossary Displaying a +Glossary to find out how to display the glossary. +

    New glossary entries are defined using the command: +


    \newglossaryentry{label}{key=value list}

    -

    +

    This is a short command, so values in ⟨key-val list⟩ can’t contain any paragraph breaks. Take care to enclose values containing any commas (,) or equal signs (=) with braces to hide them from the key=value list parser. -

    If you have a long description that needs to span multiple paragraphs, use -


    If you have a long description that needs to span multiple paragraphs, use +


    \longnewglossaryentry{label}{key=value list}{long description}

    -

    +

    instead. Note that this command may only be used in the preamble. Be careful of unwanted spaces. \longnewglossaryentry will remove trailing spaces in the description (via \longnewglossaryentry that doesn’t append either \unskip or \nopostdesc. -

    There are also commands that will only define the entry if it hasn’t already been defined: -


    There are also commands that will only define the entry if it hasn’t already been defined: +


    \provideglossaryentry{label}{key=value list}

    -

    +

    and -



    \longprovideglossaryentry{label}{key=value list}{long description}

    -

    + + +

    (These are both preamble-only commands.) -

    For all the above commands, the first argument, ⟨

    For all the above commands, the first argument, ⟨label⟩, must be a unique label with which to identify this entry. This can’t contain any non-expandable commands or active characters. The reason for this restriction is that the label is used to construct internal commands that store the associated information (similarly to commands like \label) and therefore must be able to expand to a valid control sequence name. -

    Note that although an

    Note that although an extended Latin character or other or other non-Latin character, such as é or - - + id="dx1-113013">, such as é or ß, looks like a plain character in your .tex file, it’s actually a macro (an active character) and therefore can’t be used in the label. (This applies to LaTeX rather than XeLaTeX.) Also be careful of babel’s options that change certain punctuation characters (such as ’s options that change certain punctuation characters (such as : or -) to active characters.
    -

    -

    The second argument, ⟨

    +

    The second argument, ⟨key=value list⟩, is a ⟨key⟩=⟨value⟩ list that supplies the relevant information about this entry. There are two required fields: description and either and either name or or parent. The description is set in the third + id="dx1-113017">. The description is set in the third argument of \longnewglossaryentry and \longprovideglossaryentry. With the other commands it’s set via the description key. As is typical with ⟨ key. As is typical with ⟨key⟩=⟨value⟩ lists, values that contain a comma or equal sign -must be enclosed in braces. Available fields are listed below. Additional fields are provided by the -supplementary packages value⟩ lists, values that contain a comma or equal sign must be +enclosed in braces. Available fields are listed below. Additional fields are provided by the supplementary +packages glossaries-prefix (§17 (§??sec:prefix Prefixes or Determiners) and glossaries-accsupp (§18 Accessibility -Support) and also by (§??sec:accsupp +Accessibility Support) and also by glossaries-extra. You can also define your own custom keys (see §4.3 Additional -Keys). +href="#sec:addkey">§??sec:addkey +Additional Keys).

    +

    name

    The name of the entry (as it will appear in the glossary). If this key is omitted and the

    +

    The name of the entry (as it will appear in the glossary). If this key is omitted and the parent - key is supplied, this value will be the same as the parent’s name. -

    If the key + is supplied, this value will be the same as the parent’s name. +

    If the name key contains any commands, you must also use the key contains any commands, you must also use the sort key (described below) if + id="dx1-113024"> key (described below) if you intend sorting the entries alphabetically, otherwise the entries can’t be sorted correctly.
    -

    +

    +

    description

    A brief description of this term (to appear in the glossary). Within this value, you can - use: -


    +

    A brief description of this term (to appear in the glossary). Within this value, you can use: +


    \nopostdesc

    -

    +

    to suppress the description terminator for this entry. For example, if this entry is a parent entry that doesn’t require a description, you can do description={\nopostdesc}. If you want a paragraph break in the description use: -



    \glspar

    -

    + + +

    or, better, use \longnewglossaryentry. However, note that not all glossary styles support multi-line descriptions. If you are using one of the tabular-like glossary styles that permit multi-line descriptions, use \newline not not \\ if you want to force a line break. -

    With

    With glossaries-extra, use glossaries-extra, use \glsxtrnopostpunc instead of instead of \nopostdesc to suppress the post-description punctuation.
    -

    +

    +

    parent

    The label of the parent entry. Note that the parent entry must be defined before its sub-entries. See §4.5 -

    +

    The label of the parent entry. Note that the parent entry must be defined before its sub-entries. See + §??sec:subentries Sub-Entries for further details. - - -

    +

    +

    descriptionplural

    The plural form of the description, if required. If omitted, the value is set to the same as - the

    +

    The plural form of the description, if required. If omitted, the value is set to the same as the description key. -

    + id="dx1-113032"> + key. +

    +

    text

    How this entry will appear in the document text when using

    +

    How this entry will appear in the document text when using \gls (or one of its upper case variants). If + id="dx1-113034"> (or one of its upper case variants). If this field is omitted, the value of the name key is used. -

    + id="dx1-113035"> key is used. +

    This key is automatically set by \newacronym. Although it is possible to override it by using text in the + optional argument of \newacronym, it will interfere with the acronym style and cause unexpected + results. +

    +

    first

    How the entry will appear in the document text on

    +

    How the entry will appear in the document text on first use with \gls (or one of its upper case - variants). If this field is omitted, the value of the (or one of its upper + case variants). If this field is omitted, the value of the text key is used. Note that if you use \glspl, + id="dx1-113039"> key is used. Note that if you use \glspl, \Glspl, , \GLSpl, , \glsdisp before using before using \gls, the firstplural value won’t be used with + id="dx1-113044">, the first value won’t be used with \gls. -

    + id="dx1-113046">. +

    You may prefer to use abbreviations (§??sec:acronyms Acronyms and Other Abbreviations) or the + category post-link hook (\glsdefpostlink) provided by glossaries-extra if you would like to + automatically append content on first use in a consistent manner. See, for example, Gallery: Units + (glossaries-extra.sty). +

    Although it is possible to use first in the optional argument of \newacronym, it can interfere with the + acronym style and cause unexpected results. + + +

    +

    plural

    How the entry will appear in the document text when using

    +

    How the entry will appear in the document text when using \glspl (or one of its upper case variants). - If this field is omitted, the value is obtained by appending (or one of its upper case variants). If + this field is omitted, the value is obtained by appending \glspluralsuffix to the value of the to the value of the text - field. The default value of field. + The default value of \glspluralsuffix is the letter “s”. -

    + id="dx1-113053"> is the letter “s”. +

    Although it is possible to use plural in the optional argument of \newacronym, it can interfere with the + acronym style and cause unexpected results. Use shortplural instead, if the default value is + inappropriate. +

    +

    firstplural

    How the entry will appear in the document text on

    +

    How the entry will appear in the document text on first use with \glspl (or one of its upper case + id="dx1-113057"> (or one of its upper case variants). If this field is omitted, the value is obtained from the plural key, if the key, if the first key is omitted, or + id="dx1-113059"> key is omitted, or by appending \glspluralsuffix to the value of the to the value of the first field, if the field, if the first field is present. Note that if + id="dx1-113062"> field is present. Note that if you use \gls, , \Gls, , \GLS, , \glsdisp before using \glspl, the , the firstplural value won’t be used with + id="dx1-113067"> value won’t be used with \glspl. -

    Note: prior to version 1.13, the default value of . +

    Although it is possible to use firstplural in the optional argument of \newacronym, it can interfere with + the acronym style and cause unexpected results. Use shortplural and longplural instead, if the default + value is inappropriate. +

    Note: prior to version 1.13, the default value of firstplural was always taken by appending “s” to the + id="dx1-113072"> was always taken by appending “s” to the first key, which meant that you had to specify both key, which meant that you had to specify both plural and and firstplural, even if you hadn’t used + id="dx1-113075">, even if you hadn’t used the first key. + id="dx1-113076"> key.

    +

    symbol

    This field is provided to allow the user to specify an associated symbol. If omitted, the value is set to + id="dx1-113077">

    +

    This field is provided to allow the user to specify an associated symbol. If omitted, the value is set to \relax. Note that not all glossary styles display the symbol. -

    +

    +

    symbolplural

    This is the plural form of the symbol (as passed to

    +

    This is the plural form of the symbol (as passed to \glsdisplay and and \glsdisplayfirst by - by \glspl, , + \Glspl and and \GLSpl). If omitted, the value is set to the same as the ). If omitted, the value is set to the same as the symbol key. -

    + id="dx1-113084"> key. +

    +

    sort

    This value indicates how this entry should be sorted. If omitted, the value is given by the -

    +

    This value indicates the text to be used by the sort comparator when ordering all the entries. If omitted, + the value is given by the name field unless one of the package options field unless one of the package options sort=def and and sort=use have been used. In general, - it’s best to use the have been used. + With Option 2 it’s best to use the sort key if the key if the name contains commands (e.g. \ensuremath{\alpha}). - You can also override the contains commands (e.g. \ensuremath{\alpha}) + + + and with Options 1 and 3, it’s strongly recommended as the indexing may fail if you don’t (see + below). +

    You can also override the sort key by redefining key by redefining \glsprestandardsort (see §2.5 (see §??sec:pkgopts-sort Sorting Options). -

    The

    The sort key shouldn’t be used with key shouldn’t be used with bib2gls. It has a system of fallbacks that allow different types of + id="dx1-113094">. It has a system of fallbacks that allow different types of entries to obtain the sort value from the most relevant field. See the bib2gls manual for further details + id="dx1-113095"> manual for further details and see also bib2gls gallery: sorting.
    -

    - - -

    +

    Option 1 by default strips the standard LaTeX accents (that is, accents generated by core LaTeX commands) from the name key when it sets the key when it sets the sort key. So with key. So with Option 1:

    -
    +
          \newglossaryentry{elite}{%
    -      
      name={{\'e}lite}, -  
      description={select group of people} -  
    } -
    -

    This is equivalent to: +   name={{\'e}lite}, +   description={select group of people} + } + +

    This is equivalent to:

    -
    +
          \newglossaryentry{elite}{%
    -      
      name={{\'e}lite}, -  
      description={select group of people}, -  
      sort={elite} -  
    } -
    -

    Unless you use the package option +

    Unless you use the package option sanitizesort=true, in which case it’s equivalent to: + id="dx1-113098">, in which case it’s equivalent to:

    -
    +
          \newglossaryentry{elite}{%
    -      
      name={{\'e}lite}, -  
      description={select group of people}, -  
      sort={\'elite} -  
    } -
    -

    This will place the entry before the “A” letter group since the sort value starts with a symbol. -

    Similarly if you use the +

    This will place the entry before the “A” letter group since the sort value starts with a symbol. +

    Similarly if you use the inputenc package:

    + id="dx1-113099"> package:

    \newglossaryentry{elite}{% @@ -12401,7 +12976,7 @@ class="cmtt-10">} class="cmtt-10">\newglossaryentry{elite}{%
      name=i{{ name={{é}lite},
    } class="cmss-10">sanitizesort=true, in which case it’s equivalent to:
    + id="dx1-113100">, in which case it’s equivalent to:
    \newglossaryentry{elite}{% @@ -12444,139 +13019,129 @@ class="cmtt-10">lite class="cmtt-10">}
    Again, this will place the entry before the “A” group. -

    With Options 

    With Options 2 and 3, the default value of sort will either be set to the will either be set to the name key (if key (if sanitizesort=true) or + id="dx1-113103">) or it will set it to the expansion of the name key (if key (if sanitizesort=false). + id="dx1-113105">). -

    Take care with

    Take care with xindy ( (Option 3): if you have entries with the same sort value they will be treated as + id="dx1-113107"> value they will be treated as the same entry. If you use xindy and aren’t using the and aren’t using the def or use sort methods, always use the sort key for entries where the name just consists of a control sequence (for example + id="dx1-113109"> key for entries where the name just consists of a control sequence (for example name={\alpha}). -

    Take care if you use

    Take care if you use Option 1 and the name contains fragile commands. You will either need to explicitly + id="dx1-113110"> contains fragile commands. You will either need to explicitly set the sort key or use the key or use the sanitizesort=true package option (unless you use the package option (unless you use the def or use sort methods).

    -

    +

    +

    type

    This specifies the label of the glossary in which this entry belongs. If omitted, the default glossary is - assumed unless

    +

    This specifies the label of the glossary in which this entry belongs. If omitted, the default + glossary is assumed unless \newacronym is used (see §13 Acronyms and Other Abbreviations). -

    + id="dx1-113114"> is used (see §??sec:acronyms Acronyms and Other + Abbreviations). +

    +

    user1, …, user6

    Six keys provided for any additional information the user may want to specify. (For - example, an associated dimension or an alternative plural or some other grammatical construct.) - Alternatively, you can add new keys using

    +

    Six keys provided for any additional information the user may want to specify. (For example, an associated + dimension or an alternative plural or some other grammatical construct.) Alternatively, you + can add new keys using \glsaddkey or or \glsaddstoragekey (see §4.3 (see §??sec:addkey Additional Keys). -

    +

    +

    nonumberlist

    A boolean key. If the value is missing or is

    +

    A boolean key. If the value is missing or is true, this will suppress the number - list just for this entry. Conversely, if you have used the package option number list just for this + entry. Conversely, if you have used the package option nonumberlist, you - can activate the number list just for this entry with , you can activate the + number list just for this entry with nonumberlist=false. (See §5 . (See §??sec:numberlists Number - lists.) -

    + Lists.) +

    +

    see

    Cross-reference another entry. Using the see key will automatically add this entry to the glossary, but will - not automatically add the cross-referenced entry. The referenced entry should be supplied as the value to - this key. If you want to override the “see” tag, you can supply the new tag in square brackets before the - label. For example see=[see also]{anotherlabel}. Note that if you have suppressed the number list, - the cross-referencing information won’t appear in the glossary, as it forms part of the number list. You can - override this for individual glossary entries using nonumberlist=false (see above). Alternatively, you - can use the seeautonumberlist package option. For further details, see §8 Cross-Referencing - Entries. -

    This key essentially provides a convenient shortcut that performs

    + id="dx1-113128">

    +

    This key essentially provides a convenient shortcut that performs

    \glssee[xr-label list}
    -
    after the entry has been defined. -

    For Options  after the entry has been defined. (See §??sec:crossref Cross-Referencing Entries.) It was originally designed + for synonyms that may not occur in the document text but needed to be included in the glossary in order + to redirect the reader. Note that it doesn’t index the cross-referenced entry (or entries) as that would + interfere with their number lists. +

    Using the see key will automatically add this entry to the glossary, but will not automatically add the + cross-referenced entry.
    +

    +

    For example: + + +

    +
    +     \newglossaryentry{courgette}{name={courgette},
    +       description={variety of small marrow}}
    +     \newglossaryentry{zucchini}{name={zucchini},
    +       description={(North American)},
    +       see={courgette}}
    +
    +

    This defines two entries (courgette and zucchini) and automatically adds a cross-reference from zucchini + to courgette. (That is, it adds “see courgette” to zucchini’s number list.) This doesn’t automatically index + courgette since this would create an unwanted location in courgette’s number list. (Page 1, if the + definitions occur in the preamble.) +

    Note that while it’s possible to put the cross-reference in the description instead, for example: + + +

    +
    +     \newglossaryentry{zucchini}{name={zucchini},
    +       description={(North American) see \gls{courgette}}}
    +
    +

    this won’t index the zucchini entry, so if zucchini isn’t indexed elsewhere (with commands like \gls or + \glsadd) then it won’t appear in the glossary even if courgette does. +

    The referenced entry should be supplied as the value to this key. If you want to override + the “see” tag, you can supply the new tag in square brackets before the label. For example + see=[see also]{anotherlabel}. Note that if you have suppressed the number list, the cross-referencing + information won’t appear in the glossary, as it forms part of the number list. You can override this for + individual glossary entries using nonumberlist=false (see above). Alternatively, you can use the + seeautonumberlist package option. For further details, see §??sec:crossref Cross-Referencing + Entries. +

    For Options 2 and 3, \makeglossaries must be used before any occurrence of must be used before any occurrence of \newglossaryentry that + id="dx1-113138"> that contains the see key. This key should not be used with entries defined in the key. This key should not be used with entries defined in the document environment. + id="dx1-113140"> environment.
    - - -

    +

    Since it’s useful to suppress the indexing while working on a draft document, consider using the seenoindex package option to warn or ignore the package option to warn or ignore the see key while key while \makeglossaries is commented out. -

    If you use the

    If you use the see key, you may want to consider using the key, you may want to consider using the glossaries-extra package which additionally provides a seealso and alias key. If you want to avoid the automatic indexing triggered by the see key, + id="dx1-113145"> key, consider using Option 4. +href="#option4">Option 4. See also the FAQ item Why does the see key automatically index the + entry? +

    The analogous bib2gls see field (and seealso) have a slightly different meaning. The selection + resource option determines the behaviour.
    +

    -

    +seealso

    This key is only available with

    +

    This key is only available with glossaries-extra and is similar to see but it doesn’t allow for the - optional tag. The but it doesn’t allow for the optional + tag. The glossaries-extra package provides glossaries-extra package provides \seealsoname and and seealso={list} is essentially like see=[see=[\seealsoname]list⟩ (Options 3 and 4 may treat these differently). -

    -
    +

    +alias

    This key is only available with

    + + +

    This key is only available with glossaries-extra and is another form of cross-referencing. An entry can be aliased to another entry with } but also alters the behaviour of commands like \gls so that they index the entry given by ⟨label⟩ instead of the original entry. - More variations with the key are available with Gallery: Aliases.) +

    More variations with the key are available with bib2gls. -
    -.
    +

    +

    +

    +category

    This key is only available with

    +

    This key is only available with glossaries-extra and is used to assign a category to the entry. The value should be a label that can be used to identify the category. See glossaries-extra manual for further details. +

    -

    The following keys are reserved for

    The following keys are reserved for \newacronym (see §13 (see §??sec:acronyms Acronyms and Other Abbreviations) -and also for \newabbreviation (see the (see the glossaries-extra manual): long, , longplural, , short and + id="dx1-113161"> and shortplural. -

    There are also special internal field names used by . +

    There are also special internal field names used by bib2gls. See the . See the bib2gls manual for further details. + id="dx1-113164"> manual for further details.
    -

    -

    The supplementary packages

    +

    The supplementary packages glossaries-prefix (§17 §??sec:prefix Prefixes or Determiners) and glossaries-accsupp (§18 -glossaries-accsupp +(§??sec:accsupp Accessibility Support) provide additional keys. -

    Avoid using any of the

    Avoid using any of the \gls-like or \glstext-like commands within the text, , first, , short or or long keys + id="dx1-113168"> keys (or their plural equivalent) or any other key that you plan to access through those commands. (For example, the symbol key if you intend to use key if you intend to use \glssymbol.) Otherwise you end up with nested links, which can cause complications and they won’t work with the case-changing commands. You can use them within the value of keys that won’t be accessed through those commands. For example, the description key if you don’t + id="dx1-113170"> key if you don’t use \glsdesc. Additionally, they’ll confuse the entry formatting commands, such as \glslabel.
    -

    -

    Note that if the name starts with

    +

    Note that if the name starts with non-Latin character, you must group the character, otherwise it will cause + id="dx1-113171">, you must group the character, otherwise it will cause a problem for commands like \Gls and and \Glspl. For example: + id="dx1-113173">. For example:

    -
    +
     \newglossaryentry{elite}{name={{\'e}lite},
    - 
    description={select group or class}} -
    -

    Note that the same applies if you are using the +

    Note that the same applies if you are using the inputenc package:

    + id="dx1-113174"> package:

    \newglossaryentry{elite}{name={{ group or class}}
    -
    (This doesn’t apply for XeLaTeX documents using the fontspec package. For further details, see the “UTF-8” -section in the (This doesn’t apply for XeLaTeX or LuaLaTeX documents. For further details, see the “UTF-8” section in the +mfirstuc user manual.) -

    Note that in both of the above examples, you will also need to supply the user manual.) +

    Note that in both of the above examples, you will also need to supply the sort key if you are + id="dx1-113176"> key if you are using Option 2 whereas xindy ( (Option 3) is usually able to sort non-Latin characters correctly. + id="dx1-113178">s correctly. Option 1 discards accents from standard LaTeX extended Latin characters unless you use the + id="dx1-113179">s unless you use the sanitizesort=true. + id="dx1-113180">.

    -

    Top

    4.1 Plurals

    -

    You may have noticed from above that you can specify the plural form when you define a term. If you omit this, +

    You may have noticed from above that you can specify the plural form when you define a term. If you omit this, the plural will be obtained by appending -



    \glspluralsuffix

    -

    +

    to the singular form. This command defaults to the letter “s”. For example:

    -
    +
     \newglossaryentry{cow}{name=cow,description={a fully grown
    - 
    female of any bovine animal}} -
    -

    defines a new entry whose singular form is “cow” and plural form is “cows”. However, if you are writing in +female of any bovine animal}} + +

    defines a new entry whose singular form is “cow” and plural form is “cows”. However, if you are writing in archaic English, you may want to use “kine” as the plural form, in which case you would have to do:

    -
    +
     \newglossaryentry{cow}{name=cow,plural=kine,
    - 
    description={a fully grown female of any bovine animal}} -
    -

    -

    If you are writing in a language that supports multiple plurals (for a given term) then use the +

    +

    If you are writing in a language that supports multiple plurals (for a given term) then use the plural key for + id="dx1-114002"> key for one of them and one of the user keys to specify the other plural form. For example:

    -
    +
     \newglossaryentry{cow}{%
    - 
      name=cow,% - 
      description={a fully grown female of any bovine animal - 
                   (plural cows, archaic plural kine)},% - 
      user1={kine}} -
    -

    You can then use +

    You can then use \glspl{cow} to produce “cows” and \glsuseri{cow} to produce “kine”. You can, of course, define an easy to remember synonym. For example:

    -
    +
     \let\glsaltpl\glsuseri
    -
    -

    Then you don’t have to remember which key you used to store the second plural. Alternatively, you can define + +

    Then you don’t have to remember which key you used to store the second plural. Alternatively, you can define your own keys using \glsaddkey, described in §4.3 , described in §??sec:addkey Additional Keys. -

    If you are using a language that usually forms plurals by appending a different letter, or sequence of letters, +

    If you are using a language that usually forms plurals by appending a different letter, or sequence of letters, you can redefine \glspluralsuffix as required. However, this must be done before the entries are defined. For languages that don’t form plurals by simply appending a suffix, all the plural forms must be specified using the plural key (and the key (and the firstplural key where necessary). -

    + id="dx1-114005"> key where necessary). +

    -

    Top

    4.2 Other Grammatical Constructs

    -

    You can use the six user keys to provide alternatives, such as participles. For example: +

    You can use the six user keys to provide alternatives, such as participles. For example:

    -
    +
     \let\glsing\glsuseri
    - 
    \let\glsd\glsuserii - 
    \newcommand*{\ingkey}{user1} - 
    \newcommand*{\edkey}{user2} - 
    \newcommand*{\newword}[3][]{% - 
      \newglossaryentry{#2}{% - 
       name={#2},% - 
       description={#3},% - 
       \edkey={#2ed},% - 
       \ingkey={#2ing},#1% - 
      }% - 
    } -
    -

    With the above definitions, I can now define terms like this: - - -

    -
    +\let\glsd\glsuserii +\newcommand*{\ingkey}{user1} +\newcommand*{\edkey}{user2} +\newcommand*{\newword}[3][]{% +  \newglossaryentry{#2}{% +   name={#2},% +   description={#3},% +   \edkey={#2ed},% +   \ingkey={#2ing},#1% +  }% +} + +

    With the above definitions, I can now define terms like this: + + +

    +
     \newword{play}{to take part in activities for enjoyment}
    - 
    \newword[\edkey={ran},\ingkey={running}]{run}{to move fast using - 
    the legs} -
    -

    and use them in the text: +\newword[\edkey={ran},\ingkey={running}]{run}{to move fast using +the legs} + +

    and use them in the text:

    -
    +
     Peter is \glsing{play} in the park today.
    - 
    Jane \glsd{play} in the park yesterday. - 
    Peter and Jane \glsd{run} in the park last week. -
    -

    -

    Alternatively, you can define your own keys using +

    +

    Alternatively, you can define your own keys using \glsaddkey, described below in §4.3 , described below in §??sec:addkey Additional Keys. -

    +

    -

    Top

    4.3 Additional Keys

    -

    You can now also define your own custom keys using the commands described in this section. There are two +

    You can now also define your own custom keys using the commands described in this section. There are two types of keys: those for use within the document and those to store information used behind the scenes by other commands. -

    For example, if you want to add a key that indicates the associated unit for a term, you might want to +

    For example, if you want to add a key that indicates the associated unit for a term, you might want to reference this unit in your document. In this case use \glsaddkey described in §4.3.1 Document Keys. If, on the -other hand, you want to add a key to indicate to a glossary style or acronym style that this entry should be -formatted differently to other entries, then you can use \glsaddstoragekey described in §4.3.2 Storage -Keys. -

    In both cases, a new command ⟨§??sec:glsaddkey Document Keys. +If, on the other hand, you want to add a key to indicate to a glossary style or acronym style that this entry +should be formatted differently to other entries, then you can use \glsaddstoragekey described in +§??sec:glsaddstoragekey Storage Keys. +

    In both cases, a new command ⟨no link cs⟩ will be defined that can be used to access the value of this key (analogous to commands such as \glsentrytext). This can be used in an expandable context (provided any @@ -12946,14 +13607,14 @@ fragile commands stored in the key have been protected). The new keys must be ad class="cmtt-10">\glsaddkey or \glsaddstoragekey before glossary entries are defined. -

    +

    -

    Top

    4.3.1 Document Keys

    -

    A custom key that can be used in the document is defined using: -


    A custom key that can be used in the document is defined using: +


    \glsaddkey{key}{cs}{link allcaps cs}

    -

    +

    where:

    +

    key

    is the new key to use in key

    +

    is the new key to use in \newglossaryentry (or similar commands such as + id="dx1-117002"> (or similar commands such as \longnewglossaryentry); + id="dx1-117003">); -

    +

    +

    default value

    is the default value to use if this key isn’t used in an entry definition (this may reference - the current entry label via \glslabel, but you will have to switch on expansion via the starred - version of default value

    +

    is the default value to use if this key isn’t used in an entry definition (this may reference the current + entry label via \glslabel, but you will have to switch on expansion via the starred version of + \glsaddkey and protect fragile commands); -

    +

    +

    no link cs

    is the control sequence to use analogous to commands like no link cs

    +

    is the control sequence to use analogous to commands like \glsentrytext; -

    + id="dx1-117004">; +

    +

    no link ucfirst cs

    is the control sequence to use analogous to commands like no link ucfirst cs

    +

    is the control sequence to use analogous to commands like \Glsentrytext; -

    + id="dx1-117005">; +

    +

    link cs

    is the control sequence to use analogous to commands like link cs

    +

    is the control sequence to use analogous to commands like \glstext; -

    + id="dx1-117006">; +

    +

    link ucfirst cs

    is the control sequence to use analogous to commands like link ucfirst cs

    +

    is the control sequence to use analogous to commands like \Glstext; -

    + id="dx1-117007">; +

    +

    link allcaps cs

    is the control sequence to use analogous to commands like link allcaps cs

    +

    is the control sequence to use analogous to commands like \GLStext.

    -

    The starred version of .

    +

    The starred version of \glsaddkey switches on expansion for this key. The unstarred version doesn’t override the current expansion setting. -

    Example 3 (Defining Custom Keys) -

    Suppose I want to define two new keys, +

    Suppose I want to define two new keys, ed and ing, that default to the entry text followed by “ed” and “ing”, respectively. The default value will need expanding in both cases, so I need to use the starred @@ -13039,68 +13714,68 @@ form:

    -
    +
      % Define "ed" key:
    - 
     \glsaddkey* - 
      {ed}% key - 
      {\glsentrytext{\glslabel}ed}% default value - 
      {\glsentryed}% command analogous to \glsentrytext - 
      {\Glsentryed}% command analogous to \Glsentrytext - 
      {\glsed}% command analogous to \glstext - 
      {\Glsed}% command analogous to \Glstext - 
      {\GLSed}% command analogous to \GLStext - 
     % Define "ing" key: - 
     \glsaddkey* - 
      {ing}% key - 
      {\glsentrytext{\glslabel}ing}% default value - 
      {\glsentrying}% command analogous to \glsentrytext - 
      {\Glsentrying}% command analogous to \Glsentrytext - 
      {\glsing}% command analogous to \glstext - 
      {\Glsing}% command analogous to \Glstext - 
      {\GLSing}% command analogous to \GLStext -
    -

    Now I can define some entries: - - -

    -
    + \glsaddkey* +  {ed}% key +  {\glsentrytext{\glslabel}ed}% default value +  {\glsentryed}% command analogous to \glsentrytext +  {\Glsentryed}% command analogous to \Glsentrytext +  {\glsed}% command analogous to \glstext +  {\Glsed}% command analogous to \Glstext +  {\GLSed}% command analogous to \GLStext + % Define "ing" key: + \glsaddkey* +  {ing}% key +  {\glsentrytext{\glslabel}ing}% default value +  {\glsentrying}% command analogous to \glsentrytext +  {\Glsentrying}% command analogous to \Glsentrytext +  {\glsing}% command analogous to \glstext +  {\Glsing}% command analogous to \Glstext +  {\GLSing}% command analogous to \GLStext + +

    Now I can define some entries: + + +

    +
      % No need to override defaults for this entry:
    - 
     \newglossaryentry{jump}{name={jump},description={}} - 
     % Need to override defaults on these entries: - 
     \newglossaryentry{run}{name={run},% - 
       ed={ran},% - 
       ing={running},% - 
       description={}} - 
     \newglossaryentry{waddle}{name={waddle},% - 
       ed={waddled},% - 
       ing={waddling},% - 
       description={}} -
    -

    -

    These entries can later be used in the document: - - -

    -
    + \newglossaryentry{jump}{name={jump},description={}} + % Need to override defaults on these entries: + \newglossaryentry{run}{name={run},% +   ed={ran},% +   ing={running},% +   description={}} + \newglossaryentry{waddle}{name={waddle},% +   ed={waddled},% +   ing={waddling},% +   description={}} + +

    +

    These entries can later be used in the document: + + +

    +
     The dog \glsed{jump} over the duck.
    - 
    The duck was \glsing{waddle} round the dog. - 
    The dog \glsed{run} away from the duck. -
    -

    For a complete document, see the sample file +

    For a complete document, see the sample file sample-newkeys.tex.

    -

    -

    ____________________________

    -

    +

    +

    ____________________________

    +

    -

    Top

    4.3.2 Storage Keys

    -

    A custom key that can be used for simply storing information is defined using: -


    A custom key that can be used for simply storing information is defined using: +


    \glsaddstoragekey{key}{default value}{no link cs}

    -

    +

    where the arguments are as the first three arguments of \glsaddkey, described above in §4.3.1 Document -Keys. -

    This is essentially the same as §??sec:glsaddkey +Document Keys. +

    This is essentially the same as \glsaddkey except that it doesn’t define the additional commands. You can access or update the value of your new field using the commands described in §16.3 Fetching and Updating the -Value of a Field. +href="#sec:fetchset">§??sec:fetchset Fetching and +Updating the Value of a Field. -

    Example 4 (Defining Custom Storage Key (Acronyms and Initialisms)) -

    Suppose I want to define acronyms and other forms of abbreviations, such as initialisms, but I want them all + id="x1-118003"> +

    Suppose I want to define acronyms and other forms of abbreviations, such as initialisms, but I want them all in the same glossary and I want the acronyms on first use to be displayed with the short form followed by the long form in parentheses, but the opposite way round for other forms of abbreviations. (The glossaries-extra package provides a simpler way of achieving this.) -

    Here I can define a new key that determines whether the term is actually an acronym rather +

    Here I can define a new key that determines whether the term is actually an acronym rather than some other form of abbreviation. I’m going to call this key abbrtype (since type already @@ -13140,138 +13817,138 @@ exists):

    -
    +
     \glsaddstoragekey
    - 
     {abbrtype}% key/field name - 
     {word}% default value if not explicitly set - 
     {\abbrtype}% custom command to access the value if required -
    -

    -

    Now I can define a style that looks up the value of this new key to determine how to display the full + {abbrtype}% key/field name + {word}% default value if not explicitly set + {\abbrtype}% custom command to access the value if required + +

    +

    Now I can define a style that looks up the value of this new key to determine how to display the full form:

    -
    +
     \newacronymstyle
    - 
     {mystyle}% style name - 
     {% Use the generic display - 
       \ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}% - 
     } - 
     {% Put the long form in the description - 
       \renewcommand*{\GenericAcronymFields}{% - 
           description={\the\glslongtok}}% - 
       % For the full format, test the value of the "abbrtype" key. - 
       % If it's set to "word" put the short form first with - 
       % the long form in brackets. - 
       \renewcommand*{\genacrfullformat}[2]{% - 
        \ifglsfieldeq{##1}{abbrtype}{word} - 
        {% is a proper acronym - 
          \protect\firstacronymfont{\glsentryshort{##1}}##2\space - 
           (\glsentrylong{##1})% - 
        } - 
        {% is another form of abbreviation - 
         \glsentrylong{##1}##2\space - 
          (\protect\firstacronymfont{\glsentryshort{##1}})% - 
        }% - 
      }% - 
      % first letter upper case version: - 
       \renewcommand*{\Genacrfullformat}[2]{% - 
        \ifglsfieldeq{##1}{abbrtype}{word} - 
        {% is a proper acronym - 
          \protect\firstacronymfont{\Glsentryshort{##1}}##2\space - 
           (\glsentrylong{##1})% - 
        } - 
        {% is another form of abbreviation - 
         \Glsentrylong{##1}##2\space - 
          (\protect\firstacronymfont{\glsentryshort{##1}})% - 
        }% - 
      }% - 
      % plural - 
       \renewcommand*{\genplacrfullformat}[2]{% - 
        \ifglsfieldeq{##1}{abbrtype}{word} - 
        {% is a proper acronym - 
          \protect\firstacronymfont{\glsentryshortpl{##1}}##2\space - 
           (\glsentrylong{##1})% - 
        } - 
        {% is another form of abbreviation - 
         \glsentrylongpl{##1}##2\space - 
          (\protect\firstacronymfont{\glsentryshortpl{##1}})% - 
        }% - 
      }% - - - 
      % plural and first letter upper case - 
      \renewcommand*{\Genplacrfullformat}[2]{% - 
        \ifglsfieldeq{##1}{abbrtype}{word} - 
        {% is a proper acronym - 
          \protect\firstacronymfont{\Glsentryshortpl{##1}}##2\space - 
           (\glsentrylong{##1})% - 
        } - 
        {% is another form of abbreviation - 
         \Glsentrylongpl{##1}##2\space - 
          (\protect\firstacronymfont{\glsentryshortpl{##1}})% - 
        }% - 
      }% - 
      % Just use the short form as the name part in the glossary: - 
      \renewcommand*{\acronymentry}[1]{% - 
         \acronymfont{\glsentryshort{##1}}}% - 
      % Sort by the short form: - 
      \renewcommand*{\acronymsort}[2]{##1}% - 
      % Just use the surrounding font for the short form: - 
      \renewcommand*{\acronymfont}[1]{##1}% - 
      % Same for first use: - 
      \renewcommand*{\firstacronymfont}[1]{\acronymfont{##1}}% - 
      % Default plural suffix if the plural isn't explicitly set - 
      \renewcommand*{\acrpluralsuffix}{\glspluralsuffix}% - 
     } -
    -

    Remember that the new style needs to be set before defining any terms: - - -

    -
    + {mystyle}% style name + {% Use the generic display +   \ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}% + } + {% Put the long form in the description +   \renewcommand*{\GenericAcronymFields}{% +       description={\the\glslongtok}}% +   % For the full format, test the value of the "abbrtype" key. +   % If it's set to "word" put the short form first with +   % the long form in brackets. +   \renewcommand*{\genacrfullformat}[2]{% +    \ifglsfieldeq{##1}{abbrtype}{word} +    {% is a proper acronym +      \protect\firstacronymfont{\glsentryshort{##1}}##2\space +       (\glsentrylong{##1})% +    } +    {% is another form of abbreviation +     \glsentrylong{##1}##2\space +      (\protect\firstacronymfont{\glsentryshort{##1}})% +    }% +  }% +  % first letter upper case version: +   \renewcommand*{\Genacrfullformat}[2]{% +    \ifglsfieldeq{##1}{abbrtype}{word} +    {% is a proper acronym +      \protect\firstacronymfont{\Glsentryshort{##1}}##2\space +       (\glsentrylong{##1})% +    } +    {% is another form of abbreviation +     \Glsentrylong{##1}##2\space +      (\protect\firstacronymfont{\glsentryshort{##1}})% +    }% +  }% +  % plural +   \renewcommand*{\genplacrfullformat}[2]{% +    \ifglsfieldeq{##1}{abbrtype}{word} +    {% is a proper acronym +      \protect\firstacronymfont{\glsentryshortpl{##1}}##2\space +       (\glsentrylong{##1})% +    } +    {% is another form of abbreviation +     \glsentrylongpl{##1}##2\space +      (\protect\firstacronymfont{\glsentryshortpl{##1}})% +    }% +  }% + + +  % plural and first letter upper case +  \renewcommand*{\Genplacrfullformat}[2]{% +    \ifglsfieldeq{##1}{abbrtype}{word} +    {% is a proper acronym +      \protect\firstacronymfont{\Glsentryshortpl{##1}}##2\space +       (\glsentrylong{##1})% +    } +    {% is another form of abbreviation +     \Glsentrylongpl{##1}##2\space +      (\protect\firstacronymfont{\glsentryshortpl{##1}})% +    }% +  }% +  % Just use the short form as the name part in the glossary: +  \renewcommand*{\acronymentry}[1]{% +     \acronymfont{\glsentryshort{##1}}}% +  % Sort by the short form: +  \renewcommand*{\acronymsort}[2]{##1}% +  % Just use the surrounding font for the short form: +  \renewcommand*{\acronymfont}[1]{##1}% +  % Same for first use: +  \renewcommand*{\firstacronymfont}[1]{\acronymfont{##1}}% +  % Default plural suffix if the plural isn't explicitly set +  \renewcommand*{\acrpluralsuffix}{\glspluralsuffix}% + } + +

    Remember that the new style needs to be set before defining any terms: + + +

    +
     \setacronymstyle{mystyle}
    -
    -

    -

    Since it’s a bit confusing to use +

    +

    Since it’s a bit confusing to use \newacronym for something that’s not technically an acronym, let’s define a + id="dx1-118004"> for something that’s not technically an acronym, let’s define a new command for initialisms:

    -
    +
     \newcommand*{\newinitialism}[4][]{%
    - 
      \newacronym[abbrtype=initialism,#1]{#2}{#3}{#4}% - 
    } -
    -

    Now the entries can all be defined: +  \newacronym[abbrtype=initialism,#1]{#2}{#3}{#4}% +} + +

    Now the entries can all be defined:

    -
    +
     \newacronym{radar}{radar}{radio detecting and ranging}
    - 
    \newacronym{laser}{laser}{light amplification by stimulated - 
    emission of radiation} - 
    \newacronym{scuba}{scuba}{self-contained underwater breathing - 
    apparatus} - 
    \newinitialism{dsp}{DSP}{digital signal processing} - 
    \newinitialism{atm}{ATM}{automated teller machine} -
    -

    On +

    On first use, \gls{radar} will produce “radar (radio detecting and ranging)” but \gls{dsp} will produce “DSP (digital signal processing)”. -

    For a complete document, see the sample file

    For a complete document, see the sample file sample-storage-abbr.tex.

    -

    -

    ____________________________

    -

    In the above example, if

    +

    ____________________________

    +

    In the above example, if \newglossaryentry is explicitly used (instead of through \newacronym) the abbrtype key will be set to its default value of “w class="cmtt-10">\ifglshaslong test in the custom acronym style will be false (since the long key hasn’t been set) so the display style will switch to that given by + id="dx1-118005"> key hasn’t been set) so the display style will switch to that given by \glsgenentryfmt and they’ll be no test performed on the abbrtype field. -

    Example 5 (Defining Custom Storage Key (Acronyms and Non-Acronyms with Descriptions)) -

    The previous example can be modified if the +

    The previous example can be modified if the description also needs to be provided. Here I’ve changed + id="dx1-118008"> also needs to be provided. Here I’ve changed “word” to “acronym”:

    -
    +
     \glsaddstoragekey
    - 
     {abbrtype}% key/field name - 
     {acronym}% default value if not explicitly set - 
     {\abbrtype}% custom command to access the value if required -
    -

    This may seem a little odd for non-abbreviated entries defined using +

    This may seem a little odd for non-abbreviated entries defined using \newglossaryentry directly, but \ifglshaslong can be used to determine whether or not to reference the value of this new can be used to determine whether or not to reference the value of this new abbrtype field. -

    The new acronym style has a minor modification that forces the user to specify a description. In the +

    The new acronym style has a minor modification that forces the user to specify a description. In the previous example, the line:

    -
    +
        \renewcommand*{\GenericAcronymFields}{%
    - 
         description={\the\glslongtok}}% -
    -

    needs to be changed to: +     description={\the\glslongtok}}% + +

    needs to be changed to:

    -
    +
        \renewcommand*{\GenericAcronymFields}{}%
    -
    -

    Additionally, to accommodate the change in the default value of the +

    Additionally, to accommodate the change in the default value of the abbrtype key, all instances of

    -
    +
         \ifglsfieldeq{##1}{abbrtype}{word}
    -
    -

    need to be changed to: + +

    need to be changed to:

    -
    +
         \ifglsfieldeq{##1}{abbrtype}{acronym}
    -
    -

    -

    Once this new style has been set, the new acronyms can be defined using the optional argument to set the + +

    +

    Once this new style has been set, the new acronyms can be defined using the optional argument to set the description:

    -
    +
     \newacronym[description={system for detecting the position and
    - 
    speed of aircraft, ships, etc}]{radar}{radar}{radio detecting - 
    and ranging} -
    -

    -

    No change is required for the definition of +

    +

    No change is required for the definition of \newinitialism but again the optional argument is required to set the description:

    -
    +
     \newinitialism[description={mathematical manipulation of an
    - 
    information signal}]{dsp}{DSP}{digital signal processing} -
    -

    -

    We can also accommodate contractions in a similar manner to the initialisms: +information signal}]{dsp}{DSP}{digital signal processing} + +

    +

    We can also accommodate contractions in a similar manner to the initialisms:

    -
    +
     \newcommand*{\newcontraction}[4][]{%
    - 
      \newacronym[abbrtype=contraction,#1]{#2}{#3}{#4}% - 
    } -
    -

    The contractions can similarly been defined using this new command: +  \newacronym[abbrtype=contraction,#1]{#2}{#3}{#4}% +} + +

    The contractions can similarly been defined using this new command:

    -
    +
     \newcontraction[description={front part of a ship below the
    - 
    deck}]{focsle}{fo'c's'le}{forecastle} -
    -

    -

    Since the custom acronym style just checks if +

    +

    Since the custom acronym style just checks if abbrtype is acronym, the contractions will be treated the same as the initialisms, but the style could be modified by a further test of the abbrtype value if required. -

    To test regular non-abbreviated entries, I’ve also defined a simple word: +

    To test regular non-abbreviated entries, I’ve also defined a simple word:

    -
    +
     \newglossaryentry{apple}{name={apple},description={a fruit}}
    -
    -

    -

    Now for a new glossary style that provides information about the abbreviation (in addition to the + +

    +

    Now for a new glossary style that provides information about the abbreviation (in addition to the description):

    -
    +
     \newglossarystyle
    - 
     {mystyle}% style name - 
     {% base it on the "list" style - 
       \setglossarystyle{list}% - 
       \renewcommand*{\glossentry}[2]{% - 
         \item[\glsentryitem{##1}% - 
              \glstarget{##1}{\glossentryname{##1}}] - 
           \ifglshaslong{##1}% - 
           { (\abbrtype{##1}: \glsentrylong{##1})\space}{}% - 
           \glossentrydesc{##1}\glspostdescription\space ##2}% - 
     } -
    -

    This uses +

    This uses \ifglshaslong to determine whether or not the term is an abbreviation. If it has an abbreviation, + id="dx1-118010"> to determine whether or not the term is an abbreviation. If it has an abbreviation, the full form is supplied in parentheses and \abbrtype (defined by \glsaddstoragekey earlier) is used to indicate the type of abbreviation. -

    With this style set, the

    With this style set, the apple entry is simply displayed in the glossary as

    +

    apple

    a fruit.
    -

    but the abbreviations are displayed in the form +class="cmbx-10">apple

    +

    a fruit.

    +

    but the abbreviations are displayed in the form

    +

    laser

    (acronym: light amplification by stimulated emission of radiation) device that creates a narrow - beam of intense light.
    -

    (for acronyms) or +class="cmbx-10">laser

    +

    (acronym: light amplification by stimulated emission of radiation) device that creates a narrow + beam of intense light.

    +

    (for acronyms) or

    +

    DSP

    (initialism: digital signal processing) mathematical manipulation of an information signal.
    -

    (for initalisms) or +class="cmbx-10">DSP

    +

    (initialism: digital signal processing) mathematical manipulation of an information signal.

    +

    (for initalisms) or

    +

    fo’c’s’le

    (contraction: forecastle) front part of a ship below the deck.
    -

    (for contractions). -

    For a complete document, see fo’c’s’le

    +

    (contraction: forecastle) front part of a ship below the deck.

    + + +

    (for contractions). +

    For a complete document, see sample-storage-abbr-desc.tex.

    -

    -

    ____________________________

    - - -

    +

    +

    ____________________________

    +

    -

    Top

    4.4 Expansion

    -

    When you define new glossary entries expansion is performed by default, except for the

    When you define new glossary entries expansion is performed by default, except for the name, , description, + id="dx1-119002">, descriptionplural, , symbol, , symbolplural and and sort keys (these keys all have expansion suppressed via + id="dx1-119006"> keys (these keys all have expansion suppressed via \glssetnoexpandfield). -

    You can switch expansion on or off for individual keys using -


    You can switch expansion on or off for individual keys using +


    \glssetexpandfield{field}

    -

    +

    or -



    \glssetnoexpandfield{field}

    -

    +

    respectively, where ⟨field⟩ is the field tag corresponding to the key. In most cases, this is the same as the name of the key except for those listed in table 4.1. +href="#tab:fieldmap">table ??tab:fieldmap.

    -


    Table 4.1: Key to Field Mappings
    +class="content">Key to Field Mappings
    Field style="vertical-align:baseline;" id="TBL-5-2-">
    sort sortvalue
    firstplural firstpl
    description desc
    descriptionplural descplural
    user1 useri
    user2 userii
    user3 useriii
    user4 useriv
    user5 userv
    user6 uservi
    longplural longpl
    shortplural shortpl
    @@ -13604,279 +14290,284 @@ class="cmtt-10">shortpl

    -

    Any keys that haven’t had the expansion explicitly set using

    Any keys that haven’t had the expansion explicitly set using \glssetexpandfield or \glssetnoexpandfield are governed by -



    \glsexpandfields

    -

    +

    and -



    \glsnoexpandfields

    -

    -

    If your entries contain any fragile commands, I recommend you switch off expansion via

    +

    If your entries contain any fragile commands, I recommend you switch off expansion via \glsnoexpandfields. (This should be used before you define the entries.)

    -

    Top

    4.5 Sub-Entries

    -

    As from version 1.17, it is possible to specify sub-entries. These may be used to order the glossary into +

    As from version 1.17, it is possible to specify sub-entries. These may be used to order the glossary into categories, in which case the sub-entry will have a different name to its parent entry, or it may be used to distinguish different definitions for the same word, in which case the sub-entries will have the same name as the parent entry. Note that not all glossary styles support hierarchical entries and may display all the entries in a flat format. Of the styles that support sub-entries, some display the sub-entry’s name whilst others don’t. Therefore you need to ensure that you use a suitable style. (See §15 Glossary Styles for a list of predefined -styles.) As from version 3.0, level 1 sub-entries are automatically numbered in the predefined styles -if you use the §??sec:styles Glossary Styles for a list of +predefined styles.) As from version 3.0, level 1 sub-entries are automatically numbered in the predefined styles if +you use the subentrycounter package option (see §2.3 Glossary Appearance Options for further -details). -

    Note that the parent entry will automatically be added to the glossary if any of its child entries are used in + id="dx1-120001"> package option (see §??sec:pkgopts-printglos Glossary Appearance Options for +further details). +

    Note that the parent entry will automatically be added to the glossary if any of its child entries are used in the document. If the parent entry is not referenced in the document, it will not have a number list. Note also + id="dx1-120002">. Note also that makeindex has a restriction on the maximum sub-entry depth. -

    + id="dx1-120003"> has a restriction on the maximum sub-entry depth. +

    -

    Top

    4.5.1 Hierarchical Categories

    -

    To arrange a glossary with hierarchical categories, you need to first define the category and then define the +

    To arrange a glossary with hierarchical categories, you need to first define the category and then define the sub-entries using the relevant category entry as the value of the parent key. + id="dx1-121001"> key. -

    Example 6 (Hierarchical Categories—Greek and Roman Mathematical Symbols) -

    Suppose I want a glossary of mathematical symbols that are divided into Greek letters and Roman letters. + id="x1-121003"> +

    Suppose I want a glossary of mathematical symbols that are divided into Greek letters and Roman letters. Then I can define the categories as follows:

    -
    +
     \newglossaryentry{greekletter}{name={Greek letters},
    - 
    description={\nopostdesc}} - 
    \newglossaryentry{romanletter}{name={Roman letters}, - 
    description={\nopostdesc}} -
    -

    -

    Note that in this example, the category entries don’t need a description so I have set the descriptions to +description={\nopostdesc}} +\newglossaryentry{romanletter}{name={Roman letters}, +description={\nopostdesc}} + +

    +

    Note that in this example, the category entries don’t need a description so I have set the descriptions to \nopostdesc. This gives a blank description and suppresses the description terminator. -

    I can now define my sub-entries as follows: + id="dx1-121004">. This gives a blank description and suppresses the description terminator. +

    I can now define my sub-entries as follows:

    -
    +
     \newglossaryentry{pi}{name={\ensuremath{\pi}},sort={pi},
    - 
    description={ratio of the circumference of a circle to - 
    the diameter}, - 
    parent=greekletter} - 
    \newglossaryentry{C}{name={\ensuremath{C}},sort={C}, - 
    description={Euler's constant}, - 
    parent=romanletter} -
    -

    For a complete document, see the sample file +

    For a complete document, see the sample file sampletree.tex.

    -

    -

    ____________________________

    -

    +

    +

    ____________________________

    +

    -

    Top

    4.5.2 Homographs

    -

    Sub-entries that have the same name as the parent entry, don’t need to have the

    Sub-entries that have the same name as the parent entry, don’t need to have the name key. For example, the + id="dx1-122001"> key. For example, the word “glossary” can mean a list of technical words or a collection of glosses. In both cases the plural is “glossaries”. So first define the parent entry:

    -
    +
     \newglossaryentry{glossary}{name=glossary,
    - 
    description={\nopostdesc}, - 
    plural={glossaries}} -
    -

    Again, the parent entry has no description, so the description terminator needs to be suppressed using +description={\nopostdesc}, +plural={glossaries}} + +

    Again, the parent entry has no description, so the description terminator needs to be suppressed using \nopostdesc. -

    Now define the two different meanings of the word: + id="dx1-122002">. +

    Now define the two different meanings of the word:

    -
    +
     \newglossaryentry{glossarylist}{
    - 
    description={list of technical words}, - 
    sort={1}, - 
    parent={glossary}} - 
    \newglossaryentry{glossarycol}{ - 
    description={collection of glosses}, - 
    sort={2}, - 
    parent={glossary}} -
    -

    Note that if I reference the parent entry, the location will be added to the parent’s +

    Note that if I reference the parent entry, the location will be added to the parent’s number list, whereas if I + id="dx1-122003">, whereas if I reference any of the child entries, the location will be added to the child entry’s number list. Note also that since the sub-entries have the same name, the sort key is required unless you are using the key is required unless you are using the sort=use or - or sort=def package options (see §2.5 +package options (see §??sec:pkgopts-sort Sorting Options). You can use the subentrycounter package option to + id="dx1-122007"> package option to automatically number the first-level child entries. See §2.3 Glossary Appearance Options for further -details. -

    In the above example, the plural form for both of the child entries is the same as the parent entry, so the +href="#sec:pkgopts-printglos">§??sec:pkgopts-printglos Glossary Appearance Options for +further details. +

    In the above example, the plural form for both of the child entries is the same as the parent entry, so the plural key was not required for the child entries. However, if the sub-entries have different plurals, they will + id="dx1-122008"> key was not required for the child entries. However, if the sub-entries have different plurals, they will need to be specified. For example:

    -
    +
     \newglossaryentry{bravo}{name={bravo},
    - 
    description={\nopostdesc}} - 
    \newglossaryentry{bravocry}{description={cry of approval - 
    (pl.\ bravos)}, - 
    sort={1}, - 
    plural={bravos}, - 
    parent=bravo} - 
    \newglossaryentry{bravoruffian}{description={hired - 
    ruffian or killer (pl.\ bravoes)}, - 
    sort={2}, - 
    plural={bravoes}, - 
    parent=bravo} -
    -

    -

    -

    -

    +

    +

    +

    +

    Top

    4.6 Loading Entries From a File

    -

    You can store all your glossary entry definitions in another file and use: -


    You can store all your glossary entry definitions in another file and use: +


    \loadglsentries[type]{filename}

    -

    +

    where ⟨filename⟩ is the name of the file containing all the \newglossaryentry or or \longnewglossaryentry + id="dx1-123003"> commands. The optional argument ⟨type⟩ is the name of the glossary to which those entries should belong, for those entries where the type key has been omitted (or, more specifically, for those entries + id="dx1-123004"> key has been omitted (or, more specifically, for those entries whose type has been specified by \glsdefaulttype, which is what , which is what \newglossaryentry uses by + id="dx1-123006"> uses by default). -

    This is a preamble-only command. You may also use

    This is a preamble-only command. You may also use \input to load the file but don’t use to load the file but don’t use \include. If you + id="dx1-123008">. If you find that your file is becoming unmanageably large, you may want to consider switching to bib2gls and use an + id="dx1-123009"> and use an application such as JabRef to manage the entry definitions. -

    If you want to use

    If you want to use \AtBeginDocument to to \input all your entries automatically at the start of the document, add the \AtBeginDocument command before you load the glossaries package (and package (and babel, if you are also loading + id="dx1-123012">, if you are also loading that) to avoid the creation of the glsdefs file and any associated problems that are caused by defining + id="dx1-123013"> file and any associated problems that are caused by defining commands in the document environment. (See §4.8 environment. (See §??sec:docdefs Drawbacks With Defining Entries in the Document Environment.)
    -

    +

    -

    Example 7 (Loading Entries from Another File) -

    Suppose I have a file called +

    Suppose I have a file called myentries.tex which contains:

    -
    +
     \newglossaryentry{perl}{type=main,
    - 
    name={Perl}, - 
    description={A scripting language}} - 
    \newglossaryentry{tex}{name={\TeX}, - 
    description={A typesetting language},sort={TeX}} - 
    \newglossaryentry{html}{type=\glsdefaulttype, - 
    name={html}, - 
    description={A mark up language}} -
    -

    and suppose in my document preamble I use the command: +name={Perl}, +description={A scripting language}} +\newglossaryentry{tex}{name={\TeX}, +description={A typesetting language},sort={TeX}} +\newglossaryentry{html}{type=\glsdefaulttype, +name={html}, +description={A mark up language}} + +

    and suppose in my document preamble I use the command:

    -
    +
     \loadglsentries[languages]{myentries}
    -
    -

    then this will add the entries +

    then this will add the entries tex and html to the glossary whose type is given by languages, @@ -13886,12 +14577,13 @@ class="cmtt-10">main.

    -

    -

    ____________________________

    -

    Note: if you use

    +

    ____________________________

    +

    Note: if you use \newacronym (see §13 (see §??sec:acronyms Acronyms and Other Abbreviations) the type is set as type=\acronymtype unless you explicitly override it. For example, if my file -

    +
     \newacronym{aca}{aca}{a contrived acronym}
    -
    -

    then (supposing I have defined a new glossary type called +

    then (supposing I have defined a new glossary type called altacronym)

    -
    +
     \loadglsentries[altacronym]{myacronyms}
    -
    -

    will add +

    will add aca to the glossary type acronym, if the package option acronym has been specified, + id="dx1-123019"> has been specified, or will add aca to the glossary type altacronym, if the package option acronym is not + id="dx1-123020"> is not specified.4.1 -

    If you have used the +

    If you have used the acronym package option, there are two possible solutions to this problem: + id="dx1-123025"> package option, there are two possible solutions to this problem:

      -
    1. Change +

      Change myacronyms.tex so that entries are defined in the form: -

      +

      +
            \newacronym[type=\glsdefaulttype]{aca}{aca}{a
      -      
      contrived acronym} -
      -

      and do: + contrived acronym} + +

      and do:

      -
      +
            \loadglsentries[altacronym]{myacronyms}
      -
      -

      + +

    2. -
    3. Temporarily change +

      Temporarily change \acronymtype to the target glossary: -

      +

      +
            \let\orgacronymtype\acronymtype
      -      
      \renewcommand{\acronymtype}{altacronym} -  
      \loadglsentries{myacronyms} -  
      \let\acronymtype\orgacronymtype -
      -

    -

    Note that only those entries that have been used in the text will appear in the relevant glossaries. Note also + \renewcommand{\acronymtype}{altacronym} + \loadglsentries{myacronyms} + \let\acronymtype\orgacronymtype + +

    +

    Note that only those entries that have been used in the text will appear in the relevant glossaries. Note also that \loadglsentries may only be used in the preamble. -

    Remember that you can use

    Remember that you can use \provideglossaryentry rather than rather than \newglossaryentry. Suppose you want + id="dx1-123031">. Suppose you want to maintain a large database of acronyms or terms that you’re likely to use in your documents, but you may want to use a modified version of some of those entries. (Suppose, for example, one document may require a more detailed description.) Then if you define the entries using terms.tex) contains:

    -
    +
     \provideglossaryentry{mallard}{name=mallard,
    - 
     description={a type of duck}} -
    -

    but suppose your document requires a more detailed description, you can do: + description={a type of duck}} + +

    but suppose your document requires a more detailed description, you can do:

    -
    +
     \usepackage{glossaries}
    - 
    \makeglossaries - 
    \newglossaryentry{mallard}{name=mallard, - 
     description={a dabbling duck where the male has a green head}} - 
    \loadglsentries{terms} -
    -

    Now the +

    Now the mallard definition in the terms.tex file will be ignored. -

    +

    -

    Top

    4.7 Moving Entries to Another Glossary

    -

    As from version 3.02, you can move an entry from one glossary to another using: -


    As from version 3.02, you can move an entry from one glossary to another using: +


    \glsmoveentry{label}{target glossary label}

    -

    +

    where ⟨label⟩ is the unique label identifying the required entry and ⟨target glossary label⟩ is the unique label identifying the glossary in which to put the entry. -

    Note that no check is performed to determine the existence of the target glossary. If you want to move an +

    Note that no check is performed to determine the existence of the target glossary. If you want to move an entry to a glossary that’s skipped by \printglossaries, then define an ignored glossary with + id="dx1-124002">, then define an ignored glossary with \newignoredglossary. (See §12 . (See §??sec:newglossary Defining New Glossaries.) -

    Unpredictable results may occur if you move an entry to a different glossary from its parent or children. +

    Unpredictable results may occur if you move an entry to a different glossary from its parent or children.
    -

    -

    +

    +

    -

    Top

    4.8 Drawbacks With Defining Entries in the Document Environment

    -

    Originally,

    Originally, \newglossaryentry (and (and \newacronym) could only be used in the preamble. I reluctantly removed + id="dx1-125002">) could only be used in the preamble. I reluctantly removed this restriction in version 1.13, but there are issues with defining commands in the document environment + id="dx1-125003"> environment instead of the preamble, which is why the restriction is maintained for newer commands. This restriction is also reimposed for \newglossaryentry by the new Option 1. (The glossaries-extra package automatically -reimposes this restriction for Options glossaries-extra package automatically reimposes +this restriction for Options 2 and 3 but provides a package option to allow document -definitions.) +href="#option3">3 but provides a package option to allow document definitions if +necessary.) -

    +

    -

    Top

    4.8.1 Technical Issues

    -

    +

      -
    1. If you define an entry mid-way through your document, but subsequently shuffle sections around, +
    2. +

      If you define an entry mid-way through your document, but subsequently shuffle sections around, you could end up using an entry before it has been defined. -

    3. -
    4. Entry information is required when displaying the glossary. If this occurs at the start of the +

    5. +
    6. +

      Entry information is required when displaying the glossary. If this occurs at the start of the document, but the entries aren’t defined until later, then the entry details are being looked up - before the entry has been defined. -

    7. -
    8. If you use a package, such as document environment on the next run (in a similar way that \label and \ref + work). +

    9. +
    10. +

      If you use a package, such as babel, that makes certain characters active at the start of the , that makes certain characters active at the start of the document + id="dx1-126010"> environment, there will be a problem if those characters have a special significance when defining glossary entries. These characters include the double-quote " character, the exclamation mark ? character, and the pipe | character. They must not be active when defining a glossary entry where they occur in the sort key (and they should be avoided in the label + id="dx1-126012"> key (and they should be avoided in the label if they may be active at any point in the document). Additionally, the comma , character and the equals = character should not be active when using commands that have ⟨key⟩=⟨value⟩ arguments. +

    -

    To overcome the first two problems, as from version 4.0 the

    To overcome the first two problems, as from version 4.0 the glossaries package modifies the definition of \newglossaryentry at the beginning of the document environment so that the definitions are written to an + id="dx1-126013"> environment so that the definitions are written to an external file (\jobnameglsdefs) which is then read in at the start of the document on the next run. The entry -will then only be defined in the document environment if it doesn’t already exist. This means that the -entry can now be looked up in the glossary, even if the glossary occurs at the beginning of the +class="cmtt-10">\jobname.glsdefs) which is then read in at the start of the document on the next run. This +means that the entry can now be looked up in the glossary, even if the glossary occurs at the beginning of the document. -

    There are drawbacks to this mechanism: if you modify an entry definition, you need a second run to see the -effect of your modification; this method requires an extra \newwrite, which may exceed TeX’s maximum -allocation; unexpected expansion issues could occur; the see key isn’t stored, which means it can’t be added to -the glsdefs file when it’s created at the end of the document (and therefore won’t be present on subsequent -runs). -

    The

    There are drawbacks to this mechanism: if you modify an entry definition, you need a second run to see the +effect of your modification in \printglossary (if it occurs at the start of the document); this method requires +an extra \newwrite, which may exceed TeX’s maximum allocation; unexpected expansion issues could +occur. +

    Version 4.47 has introduced changes that have removed some of the issues involved, and there are now +warning messages if there is an attempt to multiple define the same entry label. + + +

    The glossaries-extra package provides a setting (but only for Options 2 and 3) that allows \newglossaryentry to occur in the document environment but doesn’t create the glsdefs file. This circumvents some problems but + id="dx1-126016"> file. This circumvents some problems but it means that you can’t display any of the glossaries before all the entries have been defined (so it’s all right if all the glossaries are at the end of the document but not if any occur in the front matter). -

    +

    -

    Top

    4.8.2 Good Practice Issues

    -

    The above section covers technical issues that can cause your document to have compilation errors or produce +

    The above section covers technical issues that can cause your document to have compilation errors or produce incorrect output. This section focuses on good writing practice. The main reason cited by users wanting to - - define entries within the document environment rather than in the preamble is that they want to + id="dx1-127001"> environment rather than in the preamble is that they want to write the definition as they type in their document text. This suggests a “stream of consciousness” style of writing that may be acceptable in certain literary genres but is inappropriate for factual documents. -

    When you write technical documents, regardless of whether it’s a PhD thesis or an article for a journal or +

    When you write technical documents, regardless of whether it’s a PhD thesis or an article for a journal or proceedings, you must plan what you write in advance. If you plan in advance, you should have a fairly good idea of the type of terminology that your document will contain, so while you are planning, create a new file with all your entry definitions. If, while you’re writing your document, you remember another term you need, @@ -14156,1907 +14859,1159 @@ definition.

    -

    -

    +

    Top

    5. Number lists

    -

    Each entry in the glossary has an associated Referencing Entries in the Document

    +

    Once you have defined a glossary entry using a command like \newglossaryentry (§??sec:newglosentry +Defining Glossary Entries) or \newacronym (§??sec:acronyms Acronyms and Other Abbreviations), you can refer +to that entry in the document with one of the provided commands that are describe in this manual. (There are +some additional commands provided by glossaries-extra.) The text produced at that point in the document is +determined by the command and can also be governed by whether or not the entry has been marked as +used. +

    Some of these commands are more complicated than others. Many of them are robust and can’t be used in +fully expandable contexts, such as in PDF bookmarks. +

    The commands are broadly divided into: +

      +
    1. +

      Those that display text in the document (where the formatting can be adjusted by a style or + hook) and also index the entry (so that it’s added to the document) are described in §??sec:glslink + Links to Glossary Entries. This set of commands can be further sub-divided into those that mark + the entry as having been used (the \gls-like commands, §??sec:gls-like The \gls-Like Commands + (First Use Flag Queried)) and those that don’t (the \glstext-like commands, §??sec:glstext-like + The \glstext-Like Commands (First Use Flag Not Queried)). +

    2. +
    3. +

      Those that display text in the document without indexing or applying any additional formatting + (§??sec:glsnolink Using Glossary Terms Without Links).

    +

    There are additional commands specific to entries defined with \newacronym that are described in +§??sec:longshortfull Displaying the Long, Short and Full Forms (Independent of First Use). +

    +

    Top

    5.1 Links to Glossary Entries

    +

    The text which appears at the point in the document when using any of the commands described in +§??sec:gls-like The \gls-Like Commands (First Use Flag Queried) or §??sec:glstext-like The \glstext-Like +Commands (First Use Flag Not Queried) is referred to as the link text (even if there are no hyperlinks). These +commands also add a line to an external file that is used to generate the relevant entry in the glossary. This +information includes an associated location that is added to the number list. By default, these numbers refer to the -pages on which that entry has been indexed (using any of the commands described in §6 Links to -Glossary Entries and §7 Adding an Entry to the Glossary Without Generating Text). The number list -can be suppressed using the nonumberlist package option, or an alternative counter can be set as -the default using the counter package option. The number list is also referred to as the location -list. -

    Number lists are more common with indexes rather than glossaries (although you can use the glossaries -package for indexes as well). However, the glossaries package makes use of for that entry. By default, the +location refers to the page number. For further information on number lists, see §??sec:numberlists Number +Lists. These external files need to be post-processed by makeindex or or xindy to hierarchically -sort and collate the entries since they are readily available with most modern TeX distributions. Since these are -both designed as indexing applications they both require that terms either have a valid location or a -cross-reference. Even if you use nonumberlist, the locations must still be provided and acceptable to the indexing -application or they will cause an error during the indexing stage, which will interrupt the document build. -However, if you’re not interested in the locations, each entry only needs to be indexed once, so consider using -indexonlyfirst, which can improve the document build time by only indexing the first use of each -term. -

    The \glsaddall command (see §7 Adding an Entry to the Glossary Without Generating Text), which is used -to automatically index all entries, iterates over all defined entries and does \glsadd{label} for -each entry (where ⟨label⟩ is that entry’s label). This means that \glsaddall automatically adds -the same location to every entry’s unless you have chosen Options 1 +or 4. If you don’t use \makeglossaries these external files won’t be created. (Options 1 and 4 write the +information to the aux file.) +

    Note that repeated use of these commands for the same entry can cause the number list, which looks weird if the number list hasn’t been -suppressed. -

    With Option 4, the indexing is performed by bib2gls, which was specifically designed for the to become quite +long, which may not be particular helpful to the reader. In this case, you can use the non-indexing commands +described in §??sec:glsnolink Using Glossary Terms Without Links or you can use the supplemental +glossaries-extra -package. So it will allow any location format, and its selection=all option will select all entries without -adding an unwanted location to the number list. If bib2gls can deduce a numerical value for a location, it will -attempt to form a range over consecutive locations, otherwise it won’t try to form a range and the location will -just form an individual item in the list. Option 1 also allows any location but it doesn’t form -ranges. -

    -

    Top

    5.1 Encap Values

    -

    Each location in the number list is encapsulated with a command formed from the encap value. By default this -is the \glsnumberformat command, which corresponds to the encap glsnumberformat, but this may be -overridden using the format key in the optional argument to commands like \gls. (See §6 Links to Glossary -Entries.) For example, you may want the location to appear in bold to indicate the principle use of a term or -symbol. If the encap starts with an open parenthesis ( this signifies the start of a range and if the encap starts -with close parenthesis ) this signifies the end of a range. These must always occur in matching -pairs. -

    The glossaries package provides the command \glsignore which ignores its argument. This is the format -used by \glsaddallunused to suppress the location, which works fine as long as no other locations are added to -the number list. For example, if you use \gls{sample} on page 2 then reset the first use flag and then use -\glsaddallunused on page 10, the number list for sample will be 2, \glsignore{10} which will result in -“2, ” which has a spurious comma. -

    This isn’t a problem with bib2gls because you’d use selection=all instead of \glsaddallunused, but -even if you explicitly had, for example, \gls[format=glsignore]{label} for some reason, bib2gls will +class="cmss-10">glossaries-extra package, which provides a means to suppress the automated indexing of the commands listed in -recognise glsignore as a special encap indicating an ignored location, so it will select the entry but not add -that location to the number list. It’s a problem for all the other options (except Option 5, which doesn’t -perform any indexing). -

    Complications can arise if you use different encap values for the same location. For example, suppose on -page 10 you have both the default glsnumberformat and textbf encaps. While it may seem apparent that +this chapter. +

    I strongly recommend that you don’t use the commands defined in this chapter in the arguments of +sectioning or caption commands or any other command that has a moving argument. +

    Aside from problems with expansion issues, PDF bookmarks and possible nested hyperlinks in the table of +contents (or list of whatever) any use of the commands described in §??sec:gls-like The \gls-Like Commands +(First Use Flag Queried) will have their first use flag unset when they appear in the table of contents (or list of +whatever).

    +

    +

    The above warning is particularly important if you are using the glossaries package in conjunction with the textbf should override glsnumberformat in this situation, the indexing application may not know it. This is -therefore something you need to be careful about if you use the format key or if you use a command that -implicitly sets it. -

    In the case of xindy, it only accepts one encap (according to the order of precedence given in the xindy -module) and discards the others for identical locations (for the same entry). This can cause a problem if a -discarded location forms the start or end of a range. -

    In the case of makeindex, it accepts different encaps for the same location, but warns about it. This leads to -a number list with the same location repeated in different formats. If you use the makeglossaries Perl script -with Option 2 it will detect makeindex’s warning and attempt to fix the problem, ensuring that the +class="cmss-10">hyperref package. Instead, use one of the expandable commands listed in §??sec:glsnolink Using Glossary Terms +Without Links (such as \glsentrytext but not the non-expandable case changing versions like glsnumberformat encap always has the least precedence unless it includes a range identifier. Other conflicting -encaps will have the last one override earlier ones for the same location with range identifiers taking -priority. -

    No discard occurs with Option 1 so again you get the same location repeated in different formats. With -Option 4, bib2gls will discard according to order of precedence, giving priority to start and end range encaps. -(See the bib2gls manual for further details.) -

    -

    -

    Top

    5.2 Locations

    -

    Neither Option 1 nor Option 4 care about the location syntax as long as it’s valid LaTeX code (and doesn’t -contain fragile commands). In both cases, the indexing is performed by writing a line to the aux file. The write -operation is deferred to avoid the problems associated with TeX’s asynchronous output routine. (See, for -example, Finding if you’re on an odd or an even page for more details on this issue.) Unfortunately -Options 2 and 3 are far more problematic and need some complex code to deal with awkward -locations. -

    If you know that your locations will always expand to a format acceptable to your chosen indexing -application then use the package option esclocations=false to bypass this operation. This setting only affects -Options 2 and 3 as the problem doesn’t arise with the other indexing options. -

    Both makeindex and xindy are fussy about the syntax of the locations. In the case of makeindex, only the -numbering system obtained with \arabic, \roman, \Roman, \alph and \Alph or composites formed from them -with the same separator (set with \glsSetCompositor{char}) are accepted. (makeindex won’t accept an empty -location.) In the case of xindy, you can define your own location classes, but if the location contains a robust -command then the leading backslash must be escaped. The glossaries package tries to do this, but it’s caught -between two conflicting requirements: -

      -
    1. The location must be fully expanded before \ can be converted to \\ (there’s no point converting - \thepage to \\thepage); -
    2. - - -
    3. The page number can’t be expanded until the deferred write operation (so \c@page mustn’t - expand in the previous step but \the\c@page mustn’t be converted to \\the\\c@page and - \number\c@page mustn’t be converted to \\number\\c@page etc).
    -

    There’s a certain amount of trickery needed to deal with this conflict and the code requires the location to be in a -form that doesn’t embed the counter’s internal register in commands like \value. For example, -suppose you have a robust command called \tallynum that takes a number as the argument and an -expandable command called \tally that converts a counter name into the associated register or -number to pass to \tallynum. Let’s suppose that this command is used to represent the page -number: +class="cmtt-10">\Glsentrytext). Alternatively, provide an alternative via the optional argument to the sectioning/caption +command or use hyperref’s \texorpdfstring. Examples:

    -
    -\renewcommand{\thepage}{\tally{page}} -
    -

    Now let’s suppose that a term is indexed at the beginning of page 2 at the end of a paragraph that started on -page 1. With xindy, the location \tally{page} needs to be written to the file as \\tallynum{2}. If it’s written -as \tallynum{2} then xindy will interpret \t as the character “t” (which means the location would appear as -“tallynum2”). So +\chapter{An overview of \glsentrytext{perl}} +\chapter[An overview of Perl]{An overview of \gls{perl}} +\chapter{An overview of \texorpdfstring{\gls{perl}}{Perl}} + +

    +

    If you want to retain the formatting that’s available through commands like \acrshort (for example, if you +are using one of the small caps styles), then you might want to consider the glossaries-extra package which +provides commands for this purpose.
    +

    +

    If you want the link text to produce a hyperlink to the corresponding entry details in the glossary, you +should load the hyperref package before the glossaries package. That’s what I’ve done in this document, so if you +see a hyperlinked term, such as link text, you can click on the word or phrase and it will take you to a brief +description in this document’s glossary. +

    If you use the hyperref package, I strongly recommend you use pdflatex rather than latex to compile your +document, if possible. The DVI format of LaTeX has limitations with the hyperlinks that can cause a problem +when used with the glossaries package. Firstly, the DVI format can’t break a hyperlink across a line +whereas PDFLaTeX can. This means that long glossary entries (for example, the full form of an +acronym) won’t be able to break across a line with the DVI format. Secondly, the DVI format doesn’t +correctly size hyperlinks in subscripts or superscripts. This means that if you define a term that may +be used as a subscript or superscript, if you use the DVI format, it won’t come out the correct +size. +

    These are limitations of the DVI format not of the glossaries tries to expand \thepage without expanding \c@page and then escapes all the -backslashes, except for the page counter’s internal command. The following definitions of \tally will work: -

    -
      -
    • In the following, \arabic works as its internal command \c@arabic is temporarily redefined to check for - \c@page: - - -
      - \newcommand{\tally}[1]{\tallynum{\arabic{#1}}} -
      -

      -

    • -
    • The form \expandafter\the\csname c@counter\endcsname also works (provided \the is allowed to be - temporarily redefined, see below): - - -
      - \newcommand{\tally}[1]{% -  
       \tallynum{\expandafter\the\csname c@#1\endcsname}} -
      -

      -

    • -
    • \expandafter\the\value{counter} now also works (with the same condition as above): - - -
      - \newcommand{\tally}[1]{\tallynum{\expandafter\the\value{#1}}} -
      -

      -

    • -
    • Another variation that will work: - - -
      - \newcommand{\tally}[1]{% -  
        \expandafter\tallynum\expandafter{\the\csname c@#1\endcsname}} -
      -

      -

    • -
    • and also: - - -
      - \newcommand{\tally}[1]{\tallynum{\the\csname c@#1\endcsname}} -
      -

    -

    The following don’t work:

    -
      -
    • This definition leads to the premature expansion of \c@page to “1” when, in this case, it should be - “2”: - - -
      - \newcommand{\tally}[1]{\tallynum{\the\value{#1}}} -
      -

      -

    • -
    • This definition leads to \\c@page in the glossary file: - - -
      - \newcommand{\tally}[1]{\tallynum{\csname c@#1\endcsname}} -
      -

    -

    If you have a numbering system where \cs name{page} expands to \internal cs name\c@page (for example, if -\tally{page} expands to \tallynum\c@page) then you need to use: -


    \glsaddprotectedpagefmt{internal cs name package.
    +

    +

    It may be that you only want terms in certain glossaries to have hyperlinks, but not for other +glossaries. In this case, you can use the package option nohypertypes to identify the glossary lists +that shouldn’t have hyperlinked link text. See §??sec:pkgopts-general General Options for further +details. +

    The way the link text is displayed depends on +


    \glstextformat{text}

    -

    -Note that the backslash must be omitted from ⟨internal cs name⟩ and the corresponding command must be able -to process a count register as the (sole) argument. -

    For example, suppose you have a style samplenum that is implemented as follows: - - -

    -
    - \newcommand*{\samplenum}[1]{% - 
       \expandafter\@samplenum\csname c@#1\endcsname} - 
     \newcommand*{\@samplenum}[1]{\two@digits{#1}} -
    -

    (That is, it displays the value of the counter as a two-digit number.) Then to ensure the location is correct for -entries in page-spanning paragraphs, you need to do: +

    +For example, to make all link text appear in a sans-serif font, do:

    -
    -\glsaddprotectedpagefmt{@samplenum} -
    -

    (If you are using a different counter for the location, such as section or equation, you don’t need to worry -about this provided the inner command is expandable.) -

    If the inner macro (as given by \internal cs name⟩) contains non-expandable commands then you may need -to redefine \glsinternal cs namepage after using

    -
    +
    +\renewcommand*{\glstextformat}[1]{\textsf{#1}}
    +
    +

    Further customisation can be done via \defglsentryfmt or by redefining \glsentryfmt. See §??sec:glsdisplay +Changing the format of the link text for further details. +

    Each entry has an associated conditional referred to as the first use flag. Some of the commands described in +this chapter automatically unset this flag and can also use it to determine what text should be displayed. These +types of commands are the \gls-like commands and are described in §??sec:gls-like The \gls-Like +Commands (First Use Flag Queried). The commands that don’t reference or change the first use flag are +\glstext-like commands and are described in §??sec:glstext-like The \glstext-Like Commands (First Use Flag +Not Queried). See §??sec:glsunset Unsetting and Resetting Entry Flags for commands that unset (mark the +entry as having been used) or reset (mark the entry as not used) the first use flag without referencing the +entries. +

    The \gls-like and \glstext-like commands all take a first optional argument that is a comma-separated +list of ⟨key⟩=⟨value⟩ options, described below. They also have a star-variant, which inserts hyper=false at the +start of the list of options and a plus-variant, which inserts hyper=true at the start of the list of options. For +example \gls*{sample} is the same as \gls[hyper=false]{sample} and \gls+{sample} is the same as +\gls[hyper=true]{sample}, whereas just \gls{sample} will use the default hyperlink setting which depends +on a number of factors (such as whether the entry is in a glossary that has been identified in the \glsaddprotectedpagefmt{internal cs name} +class="cmss-10">nohypertypes list). You can override the hyper key in the variant’s optional argument, for example, +\gls*[hyper=true]{sample} but this creates redundancy and is best avoided. The glossaries-extra package +provides the option to add a third custom variant. +

    Avoid nesting these commands. For example don’t do \glslink{label}{\gls{label2}} as this is likely to +cause problems. By implication, this means that you should avoid using any of these commands within the +text, first, short or long keys (or their plural equivalent) or any other key that you plan to +access through these commands. (For example, the symbol key if you intend to use \glssymbol.)
    -
    This command doesn’t take any arguments as the location is assumed to be given by \c@page because that’s -the only occasion this command should be used. For example, suppose now my page counter format uses small -caps Roman numerals: +

    +

    The keys listed below are available for the optional first argument. The glossaries-extra package provides +additional keys. (See the glossaries-extra manual for further details.) +

    +

    +hyper

    +

    This is a boolean key which can be used to enable/disable the hyperlink to the relevant entry in + the glossary. If this key is omitted, the value is determined by current settings, as indicated above. + For example, when used with a \gls-like command, if this is the first use and the hyperfirst=false + package option has been used, then the default value is hyper=false. The hyperlink can be forced + on using hyper=true unless the hyperlinks have been suppressed using \glsdisablehyper. You + must load the hyperref package before the glossaries package to ensure the hyperlinks work. +

    -
    - \newcommand*{\samplenum}[1]{% - 
      \expandafter\@samplenum\csname c@#1\endcsname} - 
     \newcommand*{\@samplenum}[1]{\textsc{\romannumeral#1}} -
    -

    Again, the inner macro needs to be identified using: +

    +format

    +

    This specifies how to format the associated location number for this entry in the glossary. This value is + equivalent to the makeindex encap value, and (as with \index) the value needs to be the name of a + command without the initial backslash. As with \index, the characters ( and ) can also be used to specify + the beginning and ending of a number range and they must be in matching pairs. (For example, + \gls[format={(}]{sample} on one page to start the range and later \gls[format={)}]{sample} to + close the range.) Again as with \index, the command should be the name of a command + which takes an argument (which will be the associated location). Be careful not to use a + declaration (such as bfseries) instead of a text block command (such as textbf) as the + effect is not guaranteed to be localised. If you want to apply more than one style to a given + entry (e.g. bold and italic) you will need to create a command that applies both formats, + e.g. 

    -
    -\glsaddprotectedpagefmt{@samplenum} -
    -

    However, since \textsc isn’t fully expandable, the location is written to the file as \textsc  {i} (for page 1), -\textsc  {ii} (for page 2), etc. This format may cause a problem for the indexing application -(particularly for + \newcommand*{\textbfem}[1]{\textbf{\emph{#1}}} + +

    and use that command. +

    In this document, the standard formats refer to the standard text block commands such as \textbf or + \emph or any of the commands listed in table ??tab:hyperxx. You can combine a range and format using + (format⟩ to start the range and )format⟩ to end the range. The ⟨format⟩ part must match. For example, + format={(emph} and format={)emph}. +

    If you use xindy instead of makeindex). To compensate for this, the \glsinternal cs namepage command -may be redefined so that it expands to a format that’s acceptable to the indexing application. For -example: + id="dx1-129047">, you must specify any non-standard formats that you want to use + with the format key using \GlsAddXdyAttribute{name}. So if you use xindy with the above example, + you would need to add:

    -
    -\renewcommand*{\gls@samplenumpage}{\romannumeral\c@page} -
    -

    While this modification means that the number list in the glossary won’t exactly match the format of the page -numbers (displaying lower case Roman numbers instead of small cap Roman numerals) this method -will at least work correctly for both + \GlsAddXdyAttribute{textbfem} + +

    See §??sec:xindy Xindy (Option 3) for further details.

    +

    +

    If you are using hyperlinks and you want to change the font of the hyperlinked location, don’t use + \hyperpage (provided by the hyperref package) as the locations may not refer to a page number. Instead, + the glossaries package provides number formats listed in table ??tab:hyperxx. These commands are + designed to work with the particular location formats created by makeindex and xindy. If you are using and xindy, the following -definition: - - + id="dx1-129054"> and shouldn’t be + used in other contexts.

    -
    - \renewcommand*{\gls@samplenumpage}{% - 
       \glsbackslash\string\textsc{\romannumeral\c@page}} +
    +


    +
    Table 5.1: Predefined Hyperlinked Location Formats
    +
    + + + + + + + + +
    hyperrm serif hyperlink
    hypersf sans-serif hyperlink
    hypertt monospaced hyperlink
    hyperbf bold hyperlink
    hypermd medium weight hyperlink
    hyperit italic hyperlink
    hypersl slanted hyperlink
    hyperup upright hyperlink
    hypersc small caps hyperlink
    hyperemph emphasized hyperlink
    -

    combined with +


    +
    +

    Note that if the \hyperlink command hasn’t been defined, the hyperxx⟩ formats are equivalent to the + analogous textxx⟩ font commands (and hyperemph is equivalent to emph). If you want to make a new + format, you will need to define a command which takes one argument and use that. For example, if you + want the location number to be in a bold sans-serif font, you can define a command called, say, + \hyperbsf:

    -
    -\GlsAddXdyLocation{romansc}{:sep "\string\textsc\glsopenbrace" - 
     "roman-numbers-lowercase" :sep "\glsclosebrace"} -
    -

    will now have lowercase Roman numerals in the location list (see §11.2 Locations and Number lists for -further details on that command). Take care of the backslashes. The location (which ends up in the -:locref attribute) needs \\ but the location class (identified with \GlsAddXdyLocation) just -has a single backslash. Note that this example will cause problems if your locations should be -hyperlinks. -

    Another possibility that may work with both makeindex and + \newcommand{\hyperbsf}[1]{\textbf{\hypersf{#1}}} + +

    and then use hyperbsf as the value for the format + key.5.1 +

    When defining a custom location format command that uses one of the \hyperxx commands, make sure + that the argument of \hyperxx is just the location. Any formatting must be outside of \hyperxx (as in + the above \hyperbfsf example).
    +

    +

    Remember that if you use xindy is to redefine \glsinternal cs namepage -(\gls@samplenumpage in this example) to just expand to the decimal page number (\number\c@page) and -redefine \glsnumberformat to change the displayed format: + id="dx1-129073">, you will need to add this to the list of location attributes:

    -
    -\renewcommand*{\gls@samplenumpage}{\number\c@page} - 
    \renewcommand*{\glsnumberformat}[1]{\textsc{\romannumeral#1}} -
    -

    -

    If you redefine \glsinternal cs namepage, you must make sure that \c@page is expanded when it’s written -to the file. (So don’t, for example, hide \c@page inside a robust command.)
    -

    -

    The mechanism that allows this to work temporarily redefines \the and \number while it processes the -location. If this causes a problem you can disallow it using -


    \glswrallowprimitivemodsfalse

    -

    -but you will need to find some other way to ensure the location expands correctly. -

    -

    -

    Top

    5.3 Range Formations

    -

    Both makeindex and xindy (Options 2 and 3) concatenate a sequence of 3 or more consecutive pages into a -range. With xindy (Option 3) you can vary the minimum sequence length using \GlsSetXdyMinRangeLength +

    +     \GlsAddXdyAttribute{hyperbsf}
    +
    +

    +

    +

    {n} where ⟨n⟩ is either an integer or the keyword none which indicates that there should be no range formation -(see §11.2 Locations and Number lists for further details). -

    Note that \GlsSetXdyMinRangeLength must be used before \makeglossaries and has no effect if \noist -is used.
    -

    -

    With both makeindex and xindy (Options 2 and 3), you can replace the separator and the closing number -in the range using: -


    \glsSetSuffixF{suffix}

    -

    -


    \glsSetSuffixFF{suffix}

    -

    -where the former command specifies the suffix to use for a 2 page list and the latter specifies the suffix to use for -longer lists. For example: - - -

    -
    -\glsSetSuffixF{f.} - 
    \glsSetSuffixFF{ff.} -
    -

    Note that if you use xindy (Option 3), you will also need to set the minimum range length to 1 if you want to -change these suffixes: +class="cmtt-10">counter

    +

    This specifies which counter to use for this location. This overrides the default counter used by this entry. + (See also §??sec:numberlists Number Lists.) +

    +

    +local

    +

    This is a boolean key that only makes a difference when used with \gls-like commands that change the + entry’s first use flag. If local=true, the change to the first use flag will be localised to the current scope. + The default is local=false. +

    +

    +noindex

    +

    This is a boolean key that suppresses the indexing. Only available with glossaries-extra. +

    +

    +hyperoutside

    +

    This is a boolean key that determines whether to put the hyperlink outside of \glstextformat. Only + available with glossaries-extra. +

    +

    +wrgloss

    +

    This key determines whether to index before (wrgloss=before) or after (wrgloss=after) the link text. + Only available with glossaries-extra. +

    +

    +textformat

    +

    This key identifies the name of the control sequence to encapsulate the link text instead of the default + \glstextformat. Only available with glossaries-extra. +

    +

    +prefix

    +

    This key locally redefines \glolinkprefix to the given value. Only available with glossaries-extra. +

    +

    +thevalue

    +

    This key explicitly sets the location. Only available with glossaries-extra. +

    +

    +theHvalue

    +

    This key explicitly sets the hyperlink location. Only available with glossaries-extra.

    -
    -\GlsSetXdyMinRangeLength{1} -
    -

    Note that if you use the hyperref package, you will need to use \nohyperpage in the suffix to ensure that the -hyperlinks work correctly. For example: +

    +

    The link text isn’t scoped by default with just the base glossaries package. Any unscoped declarations in the +link text may affect subsequent text.
    +

    +

    +

    +

    Top

    5.1.1 The \gls-Like Commands (First Use Flag Queried)

    +

    This section describes the commands that unset (mark as used) the first use flag on completion, and in most +cases they use the current state of the flag to determine the text to be displayed. As described above, these +commands all have a star-variant (hyper=false) and a plus-variant (hyper=true) and have an optional first +argument that is a ⟨key⟩=⟨value⟩ list. These commands use \glsentryfmt or the equivalent definition provided by +\defglsentryfmt to determine the automatically generated text and its format (see §??sec:glsdisplay Changing +the format of the link text). +

    Apart from \glsdisp, the commands described in this section also have a final optional argument ⟨insert⟩ +which may be used to insert material into the automatically generated text. +

    Since the commands have a final optional argument, take care if you actually want to display an open +square bracket after the command when the final optional argument is absent. Insert an empty set of braces {} +immediately before the opening square bracket to prevent it from being interpreted as the final argument. For +example:

    -
    -\glsSetSuffixF{\nohyperpage{f.}} - 
    \glsSetSuffixFF{\nohyperpage{ff.}} -
    -

    -

    Note that \glsSetSuffixF and \glsSetSuffixFF must be used before \makeglossaries and have no -effect if \noist is used.
    -

    -

    It’s also possible to concatenate a sequence of consecutive locations into a range or have suffixes with -Option 4, but with bib2gls these implicit ranges can’t be merged with explicit ranges (created with the ( and -) encaps). See the bib2gls manual for further details. -

    Option 1 doesn’t form ranges. However, with this option you can iterate over an entry’s number list -using: -


    \glsnumberlistloop{ +\gls{sample} {}[Editor's comment] + +

    +

    Don’t use any of the \gls-like or \glstext-like commands in the ⟨insert⟩ argument.

    +

    +

    Take care using these commands within commands or environments that are processed multiple times as this +can confuse the first use flag query and state change. This includes frames with overlays in beamer and the +tabularx environment provided by tabularx. The glossaries package automatically deals with this issue in +amsmath’s align environment. You can apply a patch to tabularx by placing the following command (new to +v4.28) in the preamble: +


    \glspatchtabularx

    +

    +This does nothing if tabularx hasn’t been loaded. There’s no patch available for beamer. See §??sec:glsunset +Unsetting and Resetting Entry Flags for more details. +


    \gls[options]{label}{handler cs}{xr handler cs}

    -

    -where ⟨label⟩ is the entry’s label and ⟨handler cs⟩ is a handler control sequence of the form: -


    handler cs{prefix}{counter}{format}{location}

    -

    -where ⟨prefix⟩ is the hyperref prefix, ⟨counter⟩ is the name of the counter used for the location, ⟨format⟩ is the -format used to display the location (e.g. textbf) and ⟨location⟩ is the location. The third argument -is the control sequence to use for any cross-references in the list. This handler should have the -syntax: -


    xr handler cs[tag}[insert]

    +

    +This command typically determines the link text from the values of the text or first keys supplied when the +entry was defined using \newglossaryentry. However, if the entry was defined using \newacronym and +\setacronymstyle was used, then the link text will usually be determined from the long or short +keys. +

    There are two upper case variants: +


    \Gls[options]{xr list}

    -

    -where ⟨tag⟩ is the cross-referenced text (e.g. “see”) and ⟨xr list⟩ is a comma-separated list of labels. (This actually -has a third argument but it’s always empty when used with Option 1.) -

    For example, if on page 12 I have used +class="cmitt-10">label⟩}[insert]


    +

    +and +


    \GLS[options]{label}[insert]

    +

    +which make the first letter of the link text or all the link text upper case, respectively. For the former, the +uppercasing of the first letter is performed by \makefirstuc. +

    The first letter uppercasing command \makefirstuc has limitations which must be taken into +account if you use \Gls or any of the other commands that convert the first letter to uppercase. +
    +

    +The upper casing is performed as follows:

    +
      +
    • +

      If the first thing in the link text is a command follow by a group, the upper casing is performed on the + first object of the group. For example, if an entry has been defined as

      -
      -\gls[format=textbf]{apple} -
      -

      and on page 18 I have used +

      +     \newglossaryentry{sample}{
      +      name={\emph{sample} phrase},
      +      sort={sample phrase},
      +      description={an example}}
      +
      +

      Then \Gls{sample} will set the link text to5.2

      -
      -\gls[format=emph]{apple} -
      -

      then +

      +     \emph{\MakeUppercase sample} phrase
      +
      +

      which will appear as Sample phrase. +

    • +
    • +

      If the first thing in the link text isn’t a command or is a command but isn’t followed by a group, then the + upper casing will be performed on that first thing. For example, if an entry has been defined + as:

      -
      -\glsnumberlistloop{apple}{\myhandler} -
      -

      will be equivalent to: +

      +     \newglossaryentry{sample}{
      +       name={\oe-ligature},
      +       sort={oe-ligature},
      +       description={an example}
      +     }
      +
      +

      Then \Gls{sample} will set the link text to

      -
      -\myhandler{}{page}{textbf}{12}% - 
      \myhandler{}{page}{emph}{18}% -
      -

      There is a predefined handler that’s used to display the number list in the glossary: -


      \glsnoidxdisplayloc{prefix}{counter}{format}{location}

      -

      -The predefined handler used for the cross-references in the glossary is: -


      \glsseeformat[tag]{xr list}{location}

      -

      -which is described in §8.1 Customising Cross-reference Text. -

      \glsnumberlistloop is not available for Options 2 and 3.
      -

      -

      +

      +     \MakeUppercase \oe-ligature
      +
      +

      which will appear as Œ-ligature. +

    • +
    • +

      If you have mfirstuc v2.01 or above, an extra case is added. If the first thing is \protect it will be + discarded and the above rules will then be tried.

      -

      Top

      5.4 Style Hook

      -

      As from version 4.24, there’s a hook that’s used near the end of \writeist before the file is closed. You can set -the code to be performed then using: -


      \GlsSetWriteIstHook{code}

      -

      -If you want the ⟨code⟩ to write any information to the file, you need to use -


      \write\glswrite{style information}

      -

      -Make sure you use the correct format within ⟨style information⟩. For example, if you are using makeindex: +

    +

    (Note the use of the sort key in the above examples.) +

    There are hundreds of LaTeX packages that altogether define thousands of commands with +various syntax and it’s impossible for mfirstuc to take them all into account. The above rules are +quite simplistic and are designed for link text that starts with a text-block command (such as +\emph) or a command that produces a character (such as \oe). This means that if your link text +starts with something that doesn’t adhere to mfirstuc’s assumptions then things are likely to go +wrong. +

    For example, starting with a math-shift symbol:

    -
    -\GlsSetWriteIstHook{% - 
     \write\glswrite{page_precedence "arnAR"}% - 
     \write\glswrite{line_max 80}% - 
    } -
    -

    This changes the page type precedence and the maximum line length used by makeindex. -

    Remember that if you switch to xindy, this will no longer be valid code. +

    +\newglossaryentry{sample}{
    +  name={$a$},
    +  sort={a},
    +  description={an example}
    +}
    +
    +

    This falls into case 2 above, so the link text will be set to

    -

    -

    Top

    6. Links to Glossary Entries

    -

    Once you have defined a glossary entry using \newglossaryentry (§4 Defining Glossary Entries) or -\newacronym (see §13 Acronyms and Other Abbreviations), you can refer to that entry in the document using -one of the commands listed in §6.1 The \gls-Like Commands (First Use Flag Queried) or §6.2 The \glstext-Like -Commands (First Use Flag Not Queried). The text which appears at that point in the document when using -one of these commands is referred to as the link text (even if there are no hyperlinks). These commands also -add a line to an external file that is used to generate the relevant entry in the glossary. This information -includes an associated location that is added to the number list for that entry. By default, the location refers to -the page number. For further information on number lists, see §5 Number lists. These external files need to be -post-processed by makeindex or xindy unless you have chosen Options 1 or 4. If you don’t use -\makeglossaries these external files won’t be created. (Options 1 and 4 write the information to the aux -file.) -

    Note that repeated use of these commands for the same entry can cause the number list to become quite -long, which may not be particular helpful to the reader. In this case, you can use the non-indexing commands -described in §9 Using Glossary Terms Without Links or you can use the supplemental glossaries-extra -package, which provides a means to suppress the automated indexing of the commands listed in this -chapter. -

    I strongly recommend that you don’t use the commands defined in this chapter in the arguments of -sectioning or caption commands or any other command that has a moving argument. -

    Aside from problems with expansion issues, PDF bookmarks and possible nested hyperlinks in the table of -contents (or list of whatever) any use of the commands described in §6.1 The \gls-Like Commands (First Use -Flag Queried) will have their first use flag unset when they appear in the table of contents (or list of whatever). -

    -

    -

    The above warning is particularly important if you are using the glossaries package in conjunction with the -hyperref package. Instead, use one of the expandable commands listed in §9 Using Glossary Terms Without Links -(such as \glsentrytext but not the non-expandable case changing versions like \Glsentrytext). Alternatively, -provide an alternative via the optional argument to the sectioning/caption command or use hyperref’s -\texorpdfstring. Examples: +

    +\MakeUppercase $a$
    +
    +

    This attempts to uppercase the math-shift $, which will go wrong. In this case it’s not appropriate to perform +any case-changing, but it may be that you want to use \Gls programmatically without checking if +the text contains any maths. In this case, the simplest solution is to insert an empty brace at the +start:

    -
    -\chapter{An overview of \glsentrytext{perl}} - 
    \chapter[An overview of Perl]{An overview of \gls{perl}} - 
    \chapter{An overview of \texorpdfstring{\gls{perl}}{Perl}} -
    -

    If you want to retain the formatting that’s available through commands like \acrshort (for example, if you are -using one of the small caps styles), then you might want to consider the glossaries-extra package which provides -commands for this purpose. -

    If you want the +\newglossaryentry{sample}{ +  name={{}$a$}, +  sort={a}, +  description={an example} +} + +

    Now the link text to produce a hyperlink to the corresponding entry details in the glossary, you -should load the hyperref package before the glossaries package. That’s what I’ve done in this document, so if you -see a hyperlinked term, such as will be set to + + +

    +
    +\MakeUppercase{}$a$
    +
    +

    and the \uppercase becomes harmless. +

    Another issue occurs when the link text, you can click on the word or phrase and it will take you to a brief -description in this document’s glossary. -

    If you use the hyperref package, I strongly recommend you use pdflatex rather than latex to compile your -document, if possible. The DVI format of LaTeX has limitations with the hyperlinks that can cause a problem -when used with the glossaries package. Firstly, the DVI format can’t break a hyperlink across a line -whereas PDFLaTeX can. This means that long glossary entries (for example, the full form of an -acronym) won’t be able to break across a line with the DVI format. Secondly, the DVI format doesn’t -correctly size hyperlinks in subscripts or superscripts. This means that if you define a term that may -be used as a subscript or superscript, if you use the DVI format, it won’t come out the correct -size. -

    These are limitations of the DVI format not of the glossaries package.

    -

    -

    It may be that you only want terms in certain glossaries to have hyperlinks, but not for other glossaries. In -this case, you can use the package option nohypertypes to identify the glossary lists that shouldn’t have -hyperlinked starts with a command followed by an argument (case 1) but the +argument is a label, identifier or something else that shouldn’t have a case-change. A common example is when +the link text. See §2.1 General Options for further details. -

    The way the starts with one of the commands described in this chapter. (But you haven’t done that, have you? +What with the warning not to do it at the beginning of the chapter.) Or when the link text is displayed depends on -


    \glstextformat{text}

    -

    -For example, to make all starts with one of +the non-linking commands described in §??sec:glsnolink Using Glossary Terms Without Links. For +example: + + +

    +
    +\newglossaryentry{sample}{name={sample},description={an example}}
    +\newglossaryentry{sample2}{
    +   name={\glsentrytext{sample} two},
    +   sort={sample two},
    +   description={another example}
    + }
    +
    +

    Now the link text appear in a sans-serif font, do: + id="dx1-130040"> will be set to:

    -
    -\renewcommand*{\glstextformat}[1]{\textsf{#1}} -
    -

    Further customisation can be done via \defglsentryfmt or by redefining \glsentryfmt. See §6.3 Changing the -format of the link text for further details. -

    Each entry has an associated conditional referred to as the first use flag. Some of the commands described in -this chapter automatically unset this flag and can also use it to determine what text should be displayed. -These types of commands are the \gls-like commands and are described in §6.1 The \gls-Like -Commands (First Use Flag Queried). The commands that don’t reference or change the first use flag are -\glstext-like commands and are described in §6.2 The \glstext-Like Commands (First Use Flag Not -Queried). See §14 Unsetting and Resetting Entry Flags for commands that unset (mark the entry as -having been used) or reset (mark the entry as not used) the first use flag without referencing the -entries. -

    The \gls-like and \glstext-like commands all take a first optional argument that is a comma-separated -list of ⟨key⟩=⟨value⟩ options, described below. They also have a star-variant, which inserts hyper=false at the -start of the list of options and a plus-variant, which inserts hyper=true at the start of the list of options. For -example \gls*{sample} is the same as \gls[hyper=false]{sample} and \gls+{sample} is the same as -\gls[hyper=true]{sample}, whereas just \gls{sample} will use the default hyperlink setting which depends -on a number of factors (such as whether the entry is in a glossary that has been identified in the -nohypertypes list). You can override the hyper key in the variant’s optional argument, for example, -\gls*[hyper=true]{sample} but this creates redundancy and is best avoided. The glossaries-extra package -provides the option to add a third custom variant. -

    Avoid nesting these commands. For example don’t do \glslink{label}{\gls{label2}} as this is likely to -cause problems. By implication, this means that you should avoid using any of these commands within the - +\glsentrytext{\MakeUppercase sample} two + +

    This will generate an error because there’s no entry with the label “\MakeUppercase sample”. The best +solution here is to write the term out in the text, first, short or long keys (or their plural equivalent) or any other key that you plan to -access through these commands. (For example, the symbol key if you intend to use \glssymbol.) -

    -

    -

    The keys listed below are available for the optional argument. The glossaries-extra package provides -additional keys. (See the glossaries-extra manual for further details.) -

    -hyper
    This is a boolean key which can be used to enable/disable the hyperlink to the relevant entry in - the glossary. If this key is omitted, the value is determined by current settings, as indicated above. - For example, when used with a \gls-like command, if this is the first use and the hyperfirst=false - package option has been used, then the default value is hyper=false. The hyperlink can be forced - on using hyper=true unless the hyperlinks have been suppressed using \glsdisablehyper. You - must load the hyperref package before the glossaries package to ensure the hyperlinks work. -
    + id="dx1-130041"> field and use the command in the name field. If you don’t use format
    This specifies how to format the associated location number for this entry in the glossary. This value is - equivalent to the makeindex encap value, and (as with \index) the value needs to be the name of a - command without the initial backslash. As with \index, the characters ( and ) can also be used to specify - the beginning and ending of a number range and they must be in matching pairs. (For example, +class="cmtt-10">\glsname anywhere in your document, you can use \gls in the name field: - \gls[format={(}]{sample} on one page to start the range and later \gls[format={)}]{sample} to - close the range.) Again as with \index, the command should be the name of a command - which takes an argument (which will be the associated location). Be careful not to use a - declaration (such as bfseries) instead of a text block command (such as textbf) as the - effect is not guaranteed to be localised. If you want to apply more than one style to a given - entry (e.g. bold and italic) you will need to create a command that applies both formats, - e.g.  +

    +
    +\newglossaryentry{sample}{name={sample},description={an example}}
    +\newglossaryentry{sample2}{
    +   name={\gls{sample} two},
    +   sort={sample two},
    +   text={sample two},
    +   description={another example}
    + }
    +
    +

    +

    If the link text starts with a command that has an optional argument or with multiple arguments where the +actual text isn’t in the first argument, then \makefirstuc will also fail. For example: -

    - \newcommand*{\textbfem}[1]{\textbf{\emph{#1}}} -
    -

    and use that command. -

    In this document, the standard formats refer to the standard text block commands such as \textbf or - \emph or any of the commands listed in table 6.1. You can combine a range and format using (format⟩ to - start the range and )format⟩ to end the range. The ⟨format⟩ part must match. For example, - format={(emph} and format={)emph}. -

    If you use xindy instead of makeindex, you must specify any non-standard formats that you want to use - with the format key using \GlsAddXdyAttribute{name}. So if you use xindy with the above example, - you would need to add: +

    +
    +\newglossaryentry{sample}{
    + name={\textcolor{blue}{sample} phrase},
    + sort={sample phrase},
    + description={an example}}
    +
    +

    Now the link text will be set to:

    -
    - \GlsAddXdyAttribute{textbfem} -
    -

    See §11 Xindy (Option 3) for further details.

    -

    -

    If you are using hyperlinks and you want to change the font of the hyperlinked location, don’t use - \hyperpage (provided by the hyperref package) as the locations may not refer to a page number. Instead, - the glossaries package provides number formats listed in table 6.1. These commands are designed to work - with the particular location formats created by makeindex and xindy and shouldn’t be used in other - contexts. +

    +\textcolor{\MakeUppercase blue}{sample} phrase
    +
    +

    This won’t work because \MakeUppercase blue isn’t a recognised colour name. In this case you will have to +define a helper command where the first argument is the text. For example: + +

    -
    -


    -
    Table 6.1: Predefined Hyperlinked Location Formats
    -
    - - - - - - - - -
    hyperrm serif hyperlink
    hypersf sans-serif hyperlink
    hypertt monospaced hyperlink
    hyperbf bold hyperlink
    hypermd medium weight hyperlink
    hyperit italic hyperlink
    hypersl slanted hyperlink
    hyperup upright hyperlink
    hypersc small caps hyperlink
    hyperemph emphasized hyperlink
    -
    -

    -
    -

    Note that if the \hyperlink command hasn’t been defined, the hyperxx⟩ formats are equivalent to the - analogous textxx⟩ font commands (and hyperemph is equivalent to emph). If you want to make a new - format, you will need to define a command which takes one argument and use that. For example, if you - want the location number to be in a bold sans-serif font, you can define a command called, say, - \hyperbsf: - - -

    -
    - \newcommand{\hyperbsf}[1]{\textbf{\hypersf{#1}}} -
    -

    and then use hyperbsf as the value for the format - key.6.1 -

    When defining a custom location format command that uses one of the \hyperxx commands, make sure - that the argument of \hyperxx is just the location. Any formatting must be outside of \hyperxx (as in - the above \hyperbfsf example).
    -

    -

    Remember that if you use xindy, you will need to add this to the list of location attributes: - - -

    -
    - \GlsAddXdyAttribute{hyperbsf} -
    -

    -

    -counter
    This specifies which counter to use for this location. This overrides the default counter used by this - entry. (See also §5 Number lists.) -
    -local
    This is a boolean key that only makes a difference when used with \gls-like commands that change the - entry’s first use flag. If local=true, the change to the first use flag will be localised to the current scope. - The default is local=false. -
    -noindex
    This is a boolean key that suppresses the indexing. Only available with glossaries-extra. -
    -hyperoutside
    This is a boolean key that determines whether to put the hyperlink outside of \glstextformat. - Only available with glossaries-extra. -
    -wrgloss
    This key determines whether to index before (wrgloss=before) or after (wrgloss=after) the link - text. Only available with glossaries-extra. -
    -textformat
    This key identifies the name of the control sequence to encapsulate the link text instead of the - default \glstextformat. Only available with glossaries-extra. -
    -prefix
    This key locally redefines \glolinkprefix to the given value. Only available with glossaries-extra. -
    -thevalue
    This key explicitly sets the location. Only available with glossaries-extra. -
    -theHvalue
    This key explicitly sets the hyperlink location. Only available with glossaries-extra. -
    -

    The link text isn’t scoped by default with just the base glossaries package. Any unscoped declarations in the -link text may affect subsequent text.
    -

    -

    - - -

    Top

    6.1 The \gls-Like Commands (First Use Flag Queried)

    -

    This section describes the commands that unset (mark as used) the first use flag on completion, and in most -cases they use the current state of the flag to determine the text to be displayed. As described above, these -commands all have a star-variant (hyper=false) and a plus-variant (hyper=true) and have an optional first -argument that is a ⟨key⟩=⟨value⟩ list. These commands use \glsentryfmt or the equivalent definition provided by -\defglsentryfmt to determine the automatically generated text and its format (see §6.3 Changing the format of -the link text). -

    Apart from \glsdisp, the commands described in this section also have a final optional argument ⟨insert⟩ -which may be used to insert material into the automatically generated text. -

    Since the commands have a final optional argument, take care if you actually want to display an open -square bracket after the command when the final optional argument is absent. Insert an empty set of braces {} -immediately before the opening square bracket to prevent it from being interpreted as the final argument. For -example: +
    +\newglossaryentry{sample}{
    +\newcommand*{\blue}[1]{\textcolor{blue}{#1}}
    + name={\blue{sample} phrase},
    + sort={sample phrase},
    + description={an example}}
    +
    +

    In fact, since the whole design ethos of LaTeX is the separation of content and style, it’s better to use a +semantic command. For example:

    -
    -\gls{sample} {}[Editor's comment] -
    -

    -

    Don’t use any of the \gls-like or \glstext-like commands in the ⟨insert⟩ argument.

    -

    -

    Take care using these commands within commands or environments that are processed multiple times as this -can confuse the first use flag query and state change. This includes frames with overlays in beamer and the -tabularx environment provided by tabularx. The glossaries package automatically deals with this issue in -amsmath’s align environment. You can apply a patch to tabularx by placing the following command (new to -v4.28) in the preamble: -


    \glspatchtabularx

    -

    -This does nothing if tabularx hasn’t been loaded. There’s no patch available for beamer. See §14 Unsetting and -Resetting Entry Flags for more details. -


    \gls[ +\newglossaryentry{sample}{ +\newcommand*{\keyword}[1]{\textcolor{blue}{#1}} + name={\keyword{sample} phrase}, + sort={sample phrase}, + description={an example}} + +

    For further details see the mfirstuc user manual. +

    There are plural forms that are analogous to \gls: +


    \glspl[options]{label}[insert]

    -

    -This command typically determines the link text from the values of the text or first keys supplied when the -entry was defined using \newglossaryentry. However, if the entry was defined using \newacronym and -\setacronymstyle was used, then the link text will usually be determined from the long or short -keys. -

    There are two upper case variants: -


    \Gls[

    +


    \Glspl[options]{label}[insert]

    -

    -and -


    \GLS[

    +


    \GLSpl[options]{label}[insert]

    -

    -which make the first letter of the link text or all the link text upper case, respectively. For the former, the -uppercasing of the first letter is performed by \makefirstuc. -

    The first letter uppercasing command \makefirstuc has limitations which must be taken into -account if you use \Gls or any of the other commands that convert the first letter to uppercase. -
    -

    -The upper casing is performed as follows:

    -
      -
    • If the first thing in the link text is a command follow by a group, the upper casing is performed on the - first object of the group. For example, if an entry has been defined as +

      +These typically determine the link text from the plural or firstplural keys supplied when the entry was +defined using \newglossaryentry or, if the entry is an abbreviation and \setacronymstyle was used, from the +longplural or shortplural keys. +

      Be careful when you use glossary entries in math mode especially if you are using hyperref as it can affect +the spacing of subscripts and superscripts. For example, suppose you have defined the following +entry: -
      - \newglossaryentry{sample}{ -  
       name={\emph{sample} phrase}, -  
       sort={sample phrase}, -  
       description={an example}} -
      -

      Then \Gls{sample} will set the link text to6.2 +

      +
      +\newglossaryentry{Falpha}{name={F_\alpha},
      +description=sample}
      +
      +

      and later you use it in math mode:

      -
      - \emph{\MakeUppercase sample} phrase -
      -

      which will appear as Sample phrase. -

    • -
    • If the first thing in the link text isn’t a command or is a command but isn’t followed by a group, then the - upper casing will be performed on that first thing. For example, if an entry has been defined - as: - - -
      - \newglossaryentry{sample}{ -  
        name={\oe-ligature}, -  
        sort={oe-ligature}, -  
        description={an example} -  
      } -
      -

      Then \Gls{sample} will set the link text to - - -

      -
      - \MakeUppercase \oe-ligature -
      -

      which will appear as Œ-ligature. -

    • -
    • If you have mfirstuc v2.01 or above, an extra case is added. If the first thing is \protect it will be - discarded and the above rules will then be tried. -
    -

    (Note the use of the sort key in the above examples.) -

    There are hundreds of LaTeX packages that altogether define thousands of commands with -various syntax and it’s impossible for mfirstuc to take them all into account. The above rules are -quite simplistic and are designed for link text that starts with a text-block command (such as -\emph) or a command that produces a character (such as \oe). This means that if your link text -starts with something that doesn’t adhere to mfirstuc’s assumptions then things are likely to go -wrong. -

    For example, starting with a math-shift symbol: - - -

    -
    -\newglossaryentry{sample}{ - 
      name={$a$}, - 
      sort={a}, - 
      description={an example} - 
    } -
    -

    This falls into case 2 above, so the link text will be set to - - -

    -
    -\MakeUppercase $a$ -
    -

    This attempts to uppercase the math-shift $, which will go wrong. In this case it’s not appropriate to perform -any case-changing, but it may be that you want to use \Gls programmatically without checking if -the text contains any maths. In this case, the simplest solution is to insert an empty brace at the -start: - - -

    -
    -\newglossaryentry{sample}{ - 
      name={{}$a$}, - 
      sort={a}, - 
      description={an example} - 
    } -
    -

    Now the link text will be set to - - -

    -
    -\MakeUppercase{}$a$ -
    -

    and the \uppercase becomes harmless. -

    Another issue occurs when the link text starts with a command followed by an argument (case 1) but the -argument is a label, identifier or something else that shouldn’t have a case-change. A common example is when -the link text starts with one of the commands described in this chapter. (But you haven’t done that, have you? -What with the warning not to do it at the beginning of the chapter.) Or when the link text starts -with one of the non-linking commands described in §9 Using Glossary Terms Without Links. For -example: - - -

    -
    -\newglossaryentry{sample}{name={sample},description={an example}} - 
    \newglossaryentry{sample2}{ - 
       name={\glsentrytext{sample} two}, - 
       sort={sample two}, - 
       description={another example} - 
     } -
    -

    Now the link text will be set to: - - -

    -
    -\glsentrytext{\MakeUppercase sample} two -
    -

    This will generate an error because there’s no entry with the label “\MakeUppercase sample”. The best -solution here is to write the term out in the text field and use the command in the name field. If you don’t use -\glsname anywhere in your document, you can use \gls in the name field: - - -

    -
    -\newglossaryentry{sample}{name={sample},description={an example}} - 
    \newglossaryentry{sample2}{ - 
       name={\gls{sample} two}, - 
       sort={sample two}, - 
       text={sample two}, - 
       description={another example} - 
     } -
    -

    -

    If the link text starts with a command that has an optional argument or with multiple arguments where the -actual text isn’t in the first argument, then \makefirstuc will also fail. For example: - - -

    -
    -\newglossaryentry{sample}{ - 
     name={\textcolor{blue}{sample} phrase}, - 
     sort={sample phrase}, - 
     description={an example}} -
    -

    Now the link text will be set to: - - -

    -
    -\textcolor{\MakeUppercase blue}{sample} phrase -
    -

    This won’t work because \MakeUppercase blue isn’t a recognised colour name. In this case you will have to -define a helper command where the first argument is the text. For example: - - -

    -
    -\newglossaryentry{sample}{ - 
    \newcommand*{\blue}[1]{\textcolor{blue}{#1}} - 
     name={\blue{sample} phrase}, - 
     sort={sample phrase}, - 
     description={an example}} -
    -

    In fact, since the whole design ethos of LaTeX is the separation of content and style, it’s better to use a -semantic command. For example: - - -

    -
    -\newglossaryentry{sample}{ - 
    \newcommand*{\keyword}[1]{\textcolor{blue}{#1}} - 
     name={\keyword{sample} phrase}, - 
     sort={sample phrase}, - 
     description={an example}} -
    -

    For further details see the mfirstuc user manual. -

    There are plural forms that are analogous to \gls: -


    \glspl[options]{label}[insert]

    -

    -


    \Glspl[options]{label}[insert]

    -

    -


    \GLSpl[options]{label}[insert]

    -

    -These typically determine the link text from the plural or firstplural keys supplied when the entry was -defined using \newglossaryentry or, if the entry is an abbreviation and \setacronymstyle was used, from the -longplural or shortplural keys. -

    Be careful when you use glossary entries in math mode especially if you are using hyperref as it can affect -the spacing of subscripts and superscripts. For example, suppose you have defined the following -entry: - - -

    -
    -\newglossaryentry{Falpha}{name={F_\alpha}, - 
    description=sample} -
    -

    and later you use it in math mode: - - -

    -
    +
     $\gls{Falpha}^2$
    -
    -

    This will result in +

    This will result in Fα2 instead of insert⟩ optional argument:

    -
    +
     $\gls{Falpha}[^2]$
    -
    -

    -

    -


    +

    +

    +


    \glsdisp[options]{label}{link text}

    -

    +

    This behaves in the same way as the above commands, except that the ⟨link text⟩ is explicitly set. There’s no final optional argument as any inserted material can be added to the ⟨link text⟩ argument. -

    Don’t use any of the

    Don’t use any of the \gls-like or \glstext-like commands in the ⟨link text⟩ argument of \glsdisp.
    -

    -

    +

    +

    -

    Top

    6.2

    Top

    5.1.2 The \glstext-Like Commands (First Use Flag Not Queried)

    -

    This section describes the commands that don’t change or reference the \glstext-Like Commands (First Use Flag Not Queried) +

    This section describes the commands that don’t change or reference the first use flag. As described above, these commands all have a star-variant (hyper=false) and a plus-variant (key⟩=⟨value⟩ list. These commands also don’t use \glsentryfmt or the equivalent definition -provided by or the equivalent +definition provided by \defglsentryfmt (see §6.3 Changing the format of the link text). Additional commands for -abbreviations are described in §13 Acronyms and Other Abbreviations. -

    Apart from (see §??sec:glsdisplay Changing the format of the link text). +Additional commands for abbreviations are described in §??sec:acronyms Acronyms and Other +Abbreviations. +

    Apart from \glslink, the commands described in this section also have a , the commands described in this section also have a final optional argument ⟨insert⟩ -which may be used to insert material into the automatically generated text. See the caveat above in §6.1 The -§??sec:gls-like The \gls-Like Commands (First Use Flag Queried). -



    \glslink[options]{label}{link text}

    -

    +

    This command explicitly sets the link text as given in the final argument. -

    Don’t use any of the as given in the final argument. +

    Don’t use any of the \gls-like or \glstext-like commands in the argument of \glslink. By extension, this means that you can’t use them in the value of fields that are used to form link text. + id="dx1-131006">.
    -

    -


    +


    \glstext[options]{label}[insert]

    -

    +

    This command always uses the value of the text key as the key as the link text. -

    There are also analogous commands: -


    . +

    There are also analogous commands: +


    \Glstext[options]{text}[insert]

    -

    +

    -



    \GLStext[options]{text}[insert]

    -

    +

    These convert the first character or all the characters to uppercase, respectively. See the note on \Gls above for details on the limitations of converting the first letter to upper case. -

    There’s no equivalent command for title-casing, but you can use the more generic command +

    There’s no equivalent command for title-casing, but you can use the more generic command \glsentrytitlecase in combination with in combination with \glslink. For example:

    -
    +
     \glslink{sample}{\glsentrytitlecase{sample}{text}}
    -
    -

    (See §9 +

    (See §??sec:glsnolink Using Glossary Terms Without Links.) -



    \glsfirst[options]{label}[insert]

    -

    +

    This command always uses the value of the first key as the key as the link text. -

    There are also analogous uppercasing commands: -


    . +

    There are also analogous uppercasing commands: +


    \Glsfirst[options]{text}[insert]

    -

    -


    +


    \GLSfirst[options]{text}[insert]

    -

    -

    The value of the

    +

    The value of the first key (and key (and firstplural key) doesn’t necessarily match the text produced by key) doesn’t necessarily match the text produced by \gls (or + id="dx1-131020"> (or \glspl) on ) on first use as the link text used by used by \gls may be modified through commands like may be modified through commands like \defglsentry. + id="dx1-131024">. (Similarly, the value of the text and and plural keys don’t necessarily match the link text used by keys don’t necessarily match the link text used by \gls or \glspl on subsequent use.)
    -

    -


    +


    \glsplural[options]{label}[insert]

    -

    +

    This command always uses the value of the plural key as the key as the link text. -

    There are also analogous uppercasing commands: -


    . +

    There are also analogous uppercasing commands: +


    \Glsplural[options]{text}[insert]

    -

    -


    +


    \GLSplural[options]{text}[insert]

    -

    -


    +


    \glsfirstplural[options]{label}[insert]

    -

    +

    This command always uses the value of the firstplural key as the key as the link text. -

    There are also analogous uppercasing commands: -


    . +

    There are also analogous uppercasing commands: +


    \Glsfirstplural[options]{text}[insert]

    -

    -


    +


    \GLSfirstplural[options]{text}[insert]

    -

    -


    +


    \glsname[options]{label}[insert]

    -

    +

    This command always uses the value of the name key as the key as the link text. Note that this may be different from the + id="dx1-131040">. Note that this may be different from the values of the text or or first keys. In general it’s better to use keys. In general it’s better to use \glstext or \glsfirst instead of \glsname. -

    There are also analogous uppercasing commands: -


    There are also analogous uppercasing commands: +


    \Glsname[options]{text}[insert]

    -

    -


    +


    \GLSname[options]{text}[insert]

    -

    -

    In general it’s best to avoid

    +

    In general it’s best to avoid \Glsname with acronyms. Instead, consider using \Acrlong, \Acrshort or \Acrfull.
    -

    -


    +


    \glssymbol[options]{label}[insert]

    -

    +

    This command always uses the value of the symbol key as the key as the link text. -

    There are also analogous uppercasing commands: -


    . +

    There are also analogous uppercasing commands: +


    \Glssymbol[options]{text}[insert]

    -

    -


    +


    \GLSsymbol[options]{text}[insert]

    -

    -


    +


    \glsdesc[options]{label}[insert]

    -

    +

    This command always uses the value of the description key as the key as the link text. -

    There are also analogous uppercasing commands: -


    . +

    There are also analogous uppercasing commands: +


    \Glsdesc[options]{text}[insert]

    -

    -


    +


    \GLSdesc[options]{text}[insert]

    -

    -

    If you want the title case version you can use +

    +

    If you want the title case version you can use

    -
    +
     \glslink{sample}{\glsentrytitlecase{sample}{desc}}
    -
    -

    -


    +

    +


    \glsuseri[options]{label}[insert]

    -

    +

    This command always uses the value of the user1 key as the key as the link text. -

    There are also analogous uppercasing commands: -


    . +

    There are also analogous uppercasing commands: +


    \Glsuseri[options]{text}[insert]

    -

    -


    +


    \GLSuseri[options]{text}[insert]

    -

    -


    +


    \glsuserii[options]{text}[insert]

    -

    +

    This command always uses the value of the user2 key as the key as the link text. -

    There are also analogous uppercasing commands: -


    . +

    There are also analogous uppercasing commands: +


    \Glsuserii[options]{text}[insert]

    -

    -


    +


    \GLSuserii[options]{text}[insert]

    -

    -


    +


    \glsuseriii[options]{text}[insert]

    -

    +

    This command always uses the value of the user3 key as the key as the link text. -

    There are also analogous uppercasing commands: -


    . +

    There are also analogous uppercasing commands: +


    \Glsuseriii[options]{text}[insert]

    -

    -


    +


    \GLSuseriii[options]{text}[insert]

    -

    -


    +


    \glsuseriv[options]{text}[insert]

    -

    +

    This command always uses the value of the user4 key as the key as the link text. -

    There are also analogous uppercasing commands: -


    . +

    There are also analogous uppercasing commands: +


    \Glsuseriv[options]{text}[insert]

    -

    -


    +


    \GLSuseriv[options]{insert]

    -

    -


    +


    \glsuserv[options]{text}[insert]

    -

    +

    This command always uses the value of the user5 key as the key as the link text. -

    There are also analogous uppercasing commands: -


    . +

    There are also analogous uppercasing commands: +


    \Glsuserv[options]{text}[insert]

    -

    -


    +


    \GLSuserv[options]{text}[insert]

    -

    -


    +


    \glsuservi[options]{text}[insert]

    -

    +

    This command always uses the value of the user6 key as the key as the link text. -

    There are also analogous uppercasing commands: -


    . +

    There are also analogous uppercasing commands: +


    \Glsuservi[options]{text}[insert]

    -

    -


    +


    \GLSuservi[options]{text}[insert]

    -

    -

    +

    +

    -

    Top

    6.3 Changing the format of the link text

    -

    The

    Top

    5.1.3 Changing the format of the link text

    +

    The glossaries-extra package provides ways of altering the format according to the category. See the glossaries-extra manual for further details.
    -

    -

    The default format of the

    +

    The default format of the link text for the for the \gls-like commands is governed by6.3: -


    5.3: +


    \glsentryfmt

    -

    +

    This may be redefined but if you only want the change the display style for a given glossary, then you need to use -



    \defglsentryfmt[type]{definition}

    -

    +

    instead of redefining \glsentryfmt. The optional first argument ⟨type⟩ is the glossary type. This defaults to \glsdefaulttype if omitted. The second argument is the entry format definition. -

    Note that \glsentryfmt is the default display format for entries. Once the display format has been -changed for an individual glossary using if omitted. The second argument is the entry format definition. +

    Note that \glsentryfmt is the default display format for entries. Once the display format has been changed +for an individual glossary using \defglsentryfmt, redefining \glsentryfmt won’t have an -effect on that glossary, you must instead use \defglsentryfmt again. Note that glossaries that -have been identified as lists of acronyms (via the package option , redefining \glsentryfmt won’t have an effect on that +glossary, you must instead use \defglsentryfmt again. Note that glossaries that have been identified as +lists of acronyms (via the package option acronymlists or the command - - - or the command \DeclareAcronymList, see §2.7 , see +§??sec:pkgopts-acronym Acronym and Abbreviation Options) use \defglsentryfmt to set their display -style.
    -

    -

    Within the ⟨\defglsentryfmt to set their display style. + + +

    +

    +

    Within the ⟨definition⟩ argument of \defglsentryfmt, or if you want to redefine \glsentryfmt, you may use the following commands: -



    \glslabel

    -

    +

    This is the label of the entry being referenced. As from version 4.08, you can also access the glossary entry type using: -



    \glstype

    -

    +

    This is defined using \edef so the replacement text is the actual glossary type rather than + id="dx1-132014"> so the replacement text is the actual glossary type rather than \glsentrytype{\glslabel}. -



    \glscustomtext

    -

    +

    This is the custom text supplied in \glsdisp. It’s always empty for \gls, , \glspl and their upper case variants. + id="dx1-132017"> and their upper case variants. (You can use etoolbox’s ’s \ifdefempty to determine if \glscustomtext is empty.) -



    \glsinsert

    -

    +

    The custom text supplied in the final optional argument to \gls, \glspl and their upper case variants. -



    \glsifplural{true text}{false text}

    -

    +

    If \glspl, \Glspl or \GLSpl was used, this command does ⟨true text⟩ otherwise it does ⟨false text⟩. -



    \glscapscase{no case}{first uc}{all caps}

    -

    +

    If \gls, \glspl or first uc⟩. If class="cmtt-10">\GLS or \GLSpl were used, this does ⟨all caps⟩. -



    \glsifhyperon{hyper true}{hyper false}

    -

    +

    This will do ⟨hyper true⟩ if the hyperlinks are on for the current reference, otherwise it will do ⟨hyper false⟩. The hyperlink may be off even if it wasn’t explicitly switched off with the hyper key or the use of a starred + id="dx1-132023"> key or the use of a starred command. It may be off because the hyperref package hasn’t been loaded or because package hasn’t been loaded or because \glsdisablehyper + id="dx1-132025"> has been used or because the entry is in a glossary type that’s had the hyperlinks switched off (using nohypertypes) or because it’s the ) or because it’s the first use and the hyperlinks have been suppressed on first use. -

    The

    The \glsifhyperon command should be used instead of \glsifhyper, which is now deprecated (and no + id="dx1-132027">, which is now deprecated (and no longer documented).
    -

    -

    If you want to know if the command used to reference this entry was used with the star or plus variant, you +

    +

    If you want to know if the command used to reference this entry was used with the star or plus variant, you can use: -



    \glslinkvar{unmodified}{star}{plus}

    -

    +

    This will do ⟨unmodified⟩ if the unmodified version was used, or will do ⟨star⟩ if the starred version was used, or - - will do ⟨plus⟩ if the plus version was used. Note that this doesn’t take into account if the hyper key was used to + id="dx1-132029"> key was used to + + override the default setting, so this command shouldn’t be used to guess whether or not the hyperlink is on for this reference. -

    Note that you can also use commands such as

    Note that you can also use commands such as \ifglsused within the definition of \glsentryfmt (see §14 - within the definition of \glsentryfmt (see +§??sec:glsunset Unsetting and Resetting Entry Flags). -

    The commands

    The commands \glslabel, , \glstype, , \glsifplural, , \glscapscase, , \glsinsert and and \glscustomtext are + id="dx1-132036"> are typically updated at the start of the \gls-like and \glstext-like commands so they can usually be accessed in the hook user commands, such as \glspostlinkhook and and \glslinkpostsetkeys. -

    This means that using commands like . +

    This means that using commands like \gls within the fields that are accessed using the within the fields that are accessed using the \gls-like or \glstext-like commands (such as the first, , text, , long or or short keys) will cause a problem. The entry + id="dx1-132043"> keys) will cause a problem. The entry formatting performed by \glsentryfmt and related commands isn’t scoped (otherwise if would cause problems for \glspostlinkhook which may need to look ahead as well as means that any nested commands will, at the very least, change the label stored in \glslabel.
    -

    -

    If you only want to make minor modifications to

    +

    If you only want to make minor modifications to \glsentryfmt, you can use -



    \glsgenentryfmt

    -

    +

    This uses the above commands to display just the first, , text, , plural or or firstplural keys (or the custom + id="dx1-132048"> keys (or the custom text) with the insert text appended. -

    Alternatively, if you want to change the entry format for abbreviations (defined via

    Alternatively, if you want to change the entry format for abbreviations (defined via \newacronym) you can + id="dx1-132049">) you can use: -



    \glsgenacfmt

    -

    +

    This uses the values from the long, , short, , longplural and and shortplural keys, rather than using the keys, rather than using the text, + id="dx1-132055">, plural, , first and and firstplural keys. The first use singular text is obtained via: -


    keys. The first use singular text is obtained via: +


    \genacrfullformat{label}{insert}

    -

    +

    instead of from the first key, and the first use plural text is obtained via: -


    key, and the first use plural text is obtained via: +


    \genplacrfullformat{label}{insert}

    -

    +

    instead of from the firstplural key. In both cases, ⟨ key. In both cases, ⟨label⟩ is the entry’s label and ⟨insert⟩ is the insert text provided in the final optional argument of commands like \gls. The default behaviour is to do the long form (or + id="dx1-132063">. The default behaviour is to do the long form (or plural long form) followed by ⟨insert⟩ and a space and the short form (or plural short form) in parentheses, where the short form is in the argument of \firstacronymfont. There are also first letter upper case + id="dx1-132064">. There are also first letter upper case versions: -



    \Genacrfullformat{label}{insert}

    -

    +

    and -



    \Genplacrfullformat{label}{insert}

    -

    -By default these perform a protected expansion on their no-case-change equivalents and then use

    +By default these perform a protected expansion on their no-case-change equivalents and then use +\makefirstuc -to convert the first character to upper case. If there are issues caused by this expansion, you will need to -redefine those commands to explicitly use commands like to convert the first character to upper case. If there are issues caused by this expansion, you +will need to redefine those commands to explicitly use commands like \Glsentrylong (which is what the predefined -acronym styles, such as (which is +what the predefined acronym styles, such as long-short, do). Otherwise, you only need to redefine \genacrfullformat and - - + id="dx1-132069">, do). Otherwise, you only need to redefine \genacrfullformat and \genplacrfullformat to change the behaviour of to change the behaviour of \glsgenacfmt. See §13 Acronyms and Other Abbreviations -for further details on changing the style of acronyms. -

    Note that . See + + +§??sec:acronyms Acronyms and Other Abbreviations for further details on changing the style of +acronyms. +

    Note that \glsentryfmt (or the formatting given by \defglsentryfmt) is not used by the \glstext-like commands.
    -

    -

    As from version 4.16, both the

    +

    As from version 4.16, both the \gls-like and \glstext-like commands use -



    \glslinkpostsetkeys

    -

    +

    after the ⟨options⟩ are set. This macro does nothing by default but can be redefined. (For example, to switch off the hyperlink under certain conditions.) This version also introduces -



    \glspostlinkhook

    -

    +

    which is done after the link text has been displayed and also after the first use flag has been unset (see example 25). +href="#ex:dotabbr">18). -

    Example 8 (Custom Entry Display in Text) -

    Suppose you want a glossary of measurements and units, you can use the +

    Suppose you want a glossary of measurements and units, you can use the symbol key to store the + id="dx1-132077"> key to store the unit:

    -
    +
     \newglossaryentry{distance}{name=distance,
    - 
    description={The length between two points}, - 
    symbol={km}} -
    -

    and now suppose you want +

    and now suppose you want \gls{distance} to produce “distance (km)” on first use, then you can redefine \glsentryfmt as follows: + id="dx1-132078"> as follows:

    -
    +
     \renewcommand*{\glsentryfmt}{%
    - 
      \glsgenentryfmt - 
      \ifglsused{\glslabel}{}{\space (\glsentrysymbol{\glslabel})}% - 
    } -
    -

    -

    (Note that I’ve used +

    +

    (Note that I’ve used \glsentrysymbol rather than rather than \glssymbol to avoid nested hyperlinks.) -

    Note also that all of the to avoid nested hyperlinks.) +

    Note also that all of the link text will be formatted according to will be formatted according to \glstextformat (described earlier). So if + id="dx1-132082"> (described earlier). So if you do, say:

    -
    +
     \renewcommand{\glstextformat}[1]{\textbf{#1}}
    - 
    \renewcommand*{\glsentryfmt}{% - 
      \glsgenentryfmt - 
      \ifglsused{\glslabel}{}{\space(\glsentrysymbol{\glslabel})}% - 
    } -
    -

    then +

    then \gls{distance} will produce “distance (km)”. -

    For a complete document, see the sample file

    For a complete document, see the sample file sample-entryfmt.tex.

    -

    -

    ____________________________

    +

    +

    ____________________________

    -

    Example 9 (Custom Format for Particular Glossary) -

    Suppose you have created a new glossary called +

    Suppose you have created a new glossary called notation and you want to change the way the entry is displayed on first use so that it includes the symbol, you can do:

    -
    +
     \defglsentryfmt[notation]{\glsgenentryfmt
    - 
     \ifglsused{\glslabel}{}{\space - 
       (denoted \glsentrysymbol{\glslabel})}} -
    -

    Now suppose you have defined an entry as follows: + \ifglsused{\glslabel}{}{\space +   (denoted \glsentrysymbol{\glslabel})}} + +

    Now suppose you have defined an entry as follows:

    -
    +
     \newglossaryentry{set}{type=notation,
    - 
      name=set, - 
      description={A collection of objects}, - 
      symbol={$S$} - 
    } -
    -

    The +

    The first time you reference this entry it will be displayed as: “set (denoted S)” (assuming \gls was + id="dx1-132085"> was used). -

    Alternatively, if you expect all the symbols to be set in math mode, you can do: +

    Alternatively, if you expect all the symbols to be set in math mode, you can do:

    -
    +
     \defglsentryfmt[notation]{\glsgenentryfmt
    - 
     \ifglsused{\glslabel}{}{\space - 
       (denoted $\glsentrysymbol{\glslabel}$)}} -
    -

    and define entries like this: + \ifglsused{\glslabel}{}{\space +   (denoted $\glsentrysymbol{\glslabel}$)}} + +

    and define entries like this:

    -
    +
     \newglossaryentry{set}{type=notation,
    - 
      name=set, - 
      description={A collection of objects}, - 
      symbol={S} - 
    } -
    -

    +  name=set, +  description={A collection of objects}, +  symbol={S} +} + +

    -

    -

    ____________________________

    -

    Remember that if you use the

    +

    ____________________________

    +

    Remember that if you use the symbol key, you need to use a glossary style that displays the symbol, as many + id="dx1-132086"> key, you need to use a glossary style that displays the symbol, as many of the styles ignore it. -

    +

    -

    Top

    6.4 Enabling and disabling hyperlinks to glossary entries

    -

    If you load the

    Top

    5.1.4 Enabling and disabling hyperlinks to glossary entries

    +

    If you load the hyperref or or html packages prior to loading the packages prior to loading the glossaries package, the \gls-like and @@ -17232,223 +17196,231 @@ class="cmtt-10">\gls-like and href="#sec:glstext-like">\glstext-like commands will automatically have hyperlinks to the relevant glossary entry, unless the hyper + id="dx1-133003"> option has been switched off (either explicitly or through implicit means, such as via the nohypertypes package + id="dx1-133004"> package option). -

    You can disable or enable links using: -


    You can disable or enable links using: +


    \glsdisablehyper

    -

    +

    and -



    \glsenablehyper

    -

    +

    respectively. The effect can be localised by placing the commands within a group. Note that you should only use \glsenablehyper if the commands \hyperlink and and \hypertarget have been defined (for example, by the + id="dx1-133008"> have been defined (for example, by the hyperref package). -

    You can disable just the package). +

    You can disable just the first use links using the package option hyperfirst=false. Note that this option only + id="dx1-133010">. Note that this option only affects the \gls-like commands that recognise the first use flag. -

    Example 10 (First Use With Hyperlinked Footnote Description) -

    Suppose I want the first use to have a hyperlink to the description in a footnote instead of hyperlinking to + id="x1-133012"> +

    Suppose I want the first use to have a hyperlink to the description in a footnote instead of hyperlinking to the relevant place in the glossary. First I need to disable the hyperlinks on first use via the package option hyperfirst=false: + id="dx1-133013">:

    -
    +
     \usepackage[hyperfirst=false]{glossaries}
    -
    -

    Now I need to redefine +

    Now I need to redefine \glsentryfmt (see §6.3 (see §??sec:glsdisplay Changing the format of the link text):

    -
    +
     \renewcommand*{\glsentryfmt}{%
    - 
      \glsgenentryfmt - 
      \ifglsused{\glslabel}{}{\footnote{\glsentrydesc{\glslabel}}}% - 
    } -
    -

    -

    Now the first use won’t have hyperlinked text, but will be followed by a footnote. See the sample file +  \glsgenentryfmt +  \ifglsused{\glslabel}{}{\footnote{\glsentrydesc{\glslabel}}}% +} + +

    +

    Now the first use won’t have hyperlinked text, but will be followed by a footnote. See the sample file sample-FnDesc.tex for a complete document.

    -

    -

    ____________________________

    -

    Note that the

    +

    ____________________________

    +

    Note that the hyperfirst option applies to all defined glossaries. It may be that you only want to disable the + id="dx1-133015"> option applies to all defined glossaries. It may be that you only want to disable the hyperlinks on first use for glossaries that have a different form on first use. This can be achieved by noting that since the entries that require hyperlinking for all instances have identical first and subsequent text, they can be unset via \glsunsetall (see §14 (see §??sec:glsunset Unsetting and Resetting Entry Flags) so that the hyperfirst option doesn’t get -applied. + id="dx1-133017"> option +doesn’t get applied. -

    Example 11 (Suppressing Hyperlinks on First Use Just For Acronyms) -

    Suppose I want to suppress the hyperlink on +

    Suppose I want to suppress the hyperlink on first use for acronyms but not for entries in the main glossary. I can load the glossaries package using:

    -
    +
     \usepackage[hyperfirst=false,acronym]{glossaries}
    -
    -

    Once all glossary entries have been defined I then do: + +

    Once all glossary entries have been defined I then do:

    -
    +
     \glsunsetall[main]
    -
    -

    + +

    -

    -

    ____________________________

    -

    For more complex requirements, you might find it easier to switch off all hyperlinks via

    +

    ____________________________

    +

    For more complex requirements, you might find it easier to switch off all hyperlinks via \glsdisablehyper + id="dx1-133020"> and put the hyperlinks (where required) within the definition of \glsentryfmt (see §6.3 Changing the format of -the link text) via (see §??sec:glsdisplay Changing +the format of the link text) via \glshyperlink (see §9 Using Glossary Terms Without Links). + id="dx1-133022"> (see §??sec:glsnolink Using Glossary Terms Without +Links). -

    Example 12 (Only Hyperlink in Text Mode Not Math Mode) -

    This is a bit of a contrived example, but suppose, for some reason, I only want the +

    This is a bit of a contrived example, but suppose, for some reason, I only want the \gls-like commands to have hyperlinks when used in text mode, but not in math mode. I can do this by adding the glossary to the list of nohypertypes and redefining \glsentryfmt: + id="dx1-133025">:

    -
    +
     \GlsDeclareNoHyperList{main}
    - 
    \renewcommand*{\glsentryfmt}{% - 
      \ifmmode - 
        \glsgenentryfmt - 
      \else - 
        \glsifhyperon - 
        {\glsgenentryfmt}% hyperlink already on - 
        {\glshyperlink[\glsgenentryfmt]{\glslabel}}% - 
      \fi - 
    } -
    -

    Note that this doesn’t affect the +

    Note that this doesn’t affect the \glstext-like commands, which will have the hyperlinks off unless they’re forced on using the plus variant. -

    See the sample file

    See the sample file sample-nomathhyper.tex for a complete document.

    -

    -

    ____________________________

    +

    +

    ____________________________

    -

    Example 13 (One Hyper Link Per Entry Per Chapter) -

    Here’s a more complicated example that will only have the hyperlink on the first time an entry is -used per chapter. This doesn’t involve resetting the first use flag. Instead it adds a new key using - +

    Here’s a more complicated example that will only have the hyperlink on the first time an entry is used per +chapter. This doesn’t involve resetting the first use flag. Instead it adds a new key using \glsaddstoragekey (see §4.3.2 Storage Keys) that keeps track of the chapter number that the entry was last -used in: + id="dx1-133028"> +(see §??sec:glsaddstoragekey Storage Keys) that keeps track of the chapter number that the entry was last used +in:

    -
    +
     \glsaddstoragekey{chapter}{0}{\glschapnum}
    -
    -

    This creates a new user command called +

    This creates a new user command called \glschapnum that’s analogous to \glsentrytext. The default value for this key is 0. I then define my glossary entries as usual. -

    Next I redefine the hook

    Next I redefine the hook \glslinkpostsetkeys (see §6.3 Changing the format of the link text) so that it -determines the current chapter number (which is stored in (see §??sec:glsdisplay Changing the format of the link text) +so that it determines the current chapter number (which is stored in \currentchap using \edef). This value is then -compared with the value of the entry’s \edef). This value is +then compared with the value of the entry’s chapter key that I defined earlier. If they’re the same, this entry has already been used in this chapter so the hyperlink is switched off using xkeyval’s \setkeys -command. If the chapter number isn’t the same, then this entry hasn’t been used in the current -chapter. The ’s \setkeys command. +If the chapter number isn’t the same, then this entry hasn’t been used in the current chapter. +The chapter field is updated using \glsfieldxdef (§16.3 (§??sec:fetchset Fetching and Updating the Value of a Field) provided the user hasn’t switched off the hyperlink. (This test is performed using \glsifhyperon.

    -
    +
     \renewcommand*{\glslinkpostsetkeys}{%
    - 
     \edef\currentchap{\arabic{chapter}}% - 
     \ifnum\currentchap=\glschapnum{\glslabel}\relax - 
      \setkeys{glslink}{hyper=false}% - 
     \else - 
      \glsifhyperon{\glsfieldxdef{\glslabel}{chapter}{\currentchap}}{}% - 
     \fi - 
    } -
    -

    Note that this will be confused if you use +

    Note that this will be confused if you use \gls etc when the chapter counter is 0. (That is, before the first \chapter.) -

    See the sample file

    See the sample file sample-chap-hyperfirst.tex for a complete document.

    -

    -

    ____________________________

    - - -

    -

    Top

    7. Adding an Entry to the Glossary Without Generating Text

    -

    It is possible to add a line to the glossary file without generating any text at that point in the document -using: -


    \glsadd[options]{

    +

    ____________________________

    +

    +

    +

    Top

    5.2 Using Glossary Terms Without Links

    +

    The commands described in this section display entry details without adding any information to the glossary. +They don’t use \glstextformat, they don’t have any optional arguments, they don’t affect the first use +flag and, apart from \glshyperlink, they don’t produce hyperlinks. +

    Commands that aren’t expandable will be ignored by PDF bookmarks, so you will need to provide an +alternative via hyperref’s \texorpdfstring if you want to use them in sectioning commands. (This isn’t specific +to the glossaries package.) See the hyperref documentation for further details. All the commands that convert the +first letter to upper case aren’t expandable. The other commands depend on whether their corresponding keys +were assigned non-expandable values.
    +

    +

    If you want to title case a field, you can use: +


    \glsentrytitlecase{label}{field}

    -

    -This is similar to the \glstext-like commands, only it doesn’t produce any text (so therefore, there is no hyper -key available in ⟨options⟩ but all the other options that can be used with \glstext-like commands can be passed -to \glsadd). For example, to add a page range to the glossary number list for the entry whose label is given by -set: - - -

    -
    -\glsadd[format=(]{set} - 
    Lots of text about sets spanning many pages. - 
    \glsadd[format=)]{set} -
    -

    -

    To add all entries that have been defined, use: -


    \glsaddall[options]

    -

    -The optional argument is the same as for \glsadd, except there is also a key types which can be -used to specify which glossaries to use. This should be a comma-separated list. For example, if -you only want to add all the entries belonging to the list of acronyms (specified by the glossary -type \acronymtype) and a list of notation (specified by the glossary type notation) then you can -do: +

    +where ⟨label⟩ is the label identifying the glossary entry, ⟨field⟩ is the field label (see table ??tab:fieldmap). For +example:

    -
    -\glsaddall[types={\acronymtype,notation}] -
    -

    If you are using bib2gls with glossaries-extra, you can’t use \glsaddall. Instead use the selection=all resource -option to select all entries in the given bib files. -

    Note that \glsadd and \glsaddall add the current location to the number list. In the case of \glsaddall, -all entries in the glossary will have the same location in the number list. If you want to use \glsaddall, it’s -best to suppress the number list with the nonumberlist package option. (See sections 2.3 and 5.) -
    -

    -

    There is now a variation of \glsaddall that skips any entries that have already been used: -


    \glsaddallunused[list]

    -

    -This command uses \glsadd[format=glsignore] which will ignore this location in the number list. The -optional argument ⟨list⟩ is a comma-separated list of glossary types. If omitted, it defaults to the list of all defined -glossaries. -

    If you want to use \glsaddallunused, it’s best to place the command at the end of the document to ensure -that all the commands you intend to use have already been used. Otherwise you could end up with a spurious -comma or dash in the location list.
    -

    -

    With +\glsentrytitlecase{sample}{desc} + +

    (If you want title-casing in your glossary style, you might want to investigate the glossaries-extra and bib2gls, glsignore indicates an “ignored location” which influences selection but -isn’t added to the location list. In this case, if you use selection=all then only those entries that have been -explicitly indexed in the document will have location lists. The other entries that were selected as a result of +class="cmss-10">glossaries-extra package.) This +command will trigger an error if the entry is undefined. +

    Note that this command has the same limitations as \makefirstuc which is used by commands like \Gls +and \Glsentryname to upper-case the first letter (see the notes about \Gls in §??sec:gls-like The \gls-Like +Commands (First Use Flag Queried)). +


    \glsentryname{label}

    +

    +


    \Glsentryname{label}

    +

    +These commands display the name of the glossary entry given by ⟨label⟩, as specified by the name key. selection=all won’t have location lists. -

    Base glossaries package only: - - -

    -
    -\documentclass{article} - 
    \usepackage{glossaries} - 
    \makeglossaries - 
    \newglossaryentry{cat}{name={cat},description={feline}} - 
    \newglossaryentry{dog}{name={dog},description={canine}} - 
    \begin{document} - 
    \gls{cat}. - 
    \printglossaries - 
    \glsaddallunused % <- make sure dog is also listed - 
    \end{document} -
    -

    Corresponding glossaries-extra and bib2gls document code: - - -

    -
    -\documentclass{article} - 
    \usepackage[record]{glossaries-extra} - 
    \GlsXtrLoadResources[src={entries},selection=all] - 
    \begin{document} - 
    \gls{cat}. - 
    \printunsrtglossaries - 
    \end{document} -
    -

    With the file entries.bib: - - -

    -
    -@entry{cat,name={cat},description={feline}} - 
    @entry{dog,name={dog},description={canine}} -
    -

    - -

    Example 14 (Dual Entries) -

    The example file sample-dual.tex makes use of \glsadd to allow for an entry that should appear both in -the main glossary and in the list of acronyms. This example sets up the list of acronyms using the acronym -package option: - - -

    -
    -\usepackage[acronym]{glossaries} -
    -

    A new command is then defined to make it easier to define dual entries: +class="cmtt-10">\Glsentryname makes the first letter upper case. Neither of these commands check for the existence of ⟨label⟩. +The first form \glsentryname is expandable (unless the name contains unexpandable commands). Note that +this may be different from the values of the text or first keys. In general it’s better to use \glsentrytext or +\glsentryfirst instead of \glsentryname. +

    In general it’s best to avoid \Glsentryname with abbreviations. Instead, consider using \Glsentrylong, +\Glsentryshort or \Glsentryfull.
    +

    +


    \glossentryname{label}

    +

    +This is like \glsnamefont{\glsentryname{label}} but also checks for the existence of ⟨label⟩. This command is +not expandable. It’s used in the predefined glossary styles, so if you want to change the way the +name is formatted in the glossary, you can redefine \glsnamefont to use the required fonts. For +example:

    -
    -\newcommand*{\newdualentry}[5][]{% - 
      \newglossaryentry{main-#2}{name={#4},% - 
      text={#3\glsadd{#2}},% - 
      description={#5},% - 
      #1 - 
      }% - 
      \newacronym{#2}{#3\glsadd{main-#2}}{#4}% - 
    } -
    -

    This has the following syntax:

    -
    +
    +\renewcommand*{\glsnamefont}[1]{\textmd{\sffamily #1}}
    +
    +

    +


    \Glossentryname{label}

    +

    +This is like \glossentryname but makes the first letter of the name upper case. +


    \glsentrytext{label}

    +

    +


    \Glsentrytext{label}

    +

    +These commands display the subsequent use text for the glossary entry given by ⟨label⟩, as specified by the text +key. \Glsentrytext makes the first letter upper case. The first form is expandable (unless the text contains +unexpandable commands). The second form is not expandable. Neither checks for the existence of +⟨label⟩. +


    \glsentryplural{label}

    +

    +


    \Glsentryplural{label}

    +

    +These commands display the subsequent use plural text for the glossary entry given by ⟨label⟩, as specified by the \newdualentry[options]{plural key. \Glsentryplural makes the first letter upper case. The first form is expandable (unless the value +of that key contains unexpandable commands). The second form is not expandable. Neither checks for the +existence of ⟨label⟩. +


    \glsentryfirst{label}{abbrv}{long}{description} -
    -
    You can then define a new dual entry: +class="cmtt-10">}

    +

    +


    \Glsentryfirst{label}

    +

    +These commands display the first use text for the glossary entry given by ⟨label⟩, as specified by the first key. +\Glsentryfirst makes the first letter upper case. The first form is expandable (unless the value of that key +contains unexpandable commands). The second form is not expandable. Neither checks for the existence of +⟨label⟩. +


    \glsentryfirstplural{label}

    +

    +


    \Glsentryfirstplural{label}

    +

    +These commands display the plural form of the first use text for the glossary entry given by ⟨label⟩, as specified +by the firstplural key. \Glsentryfirstplural makes the first letter upper case. The first form is expandable +(unless the value of that key contains unexpandable commands). The second form is not expandable. Neither +checks for the existence of ⟨label⟩. -

    -\newdualentry{svm}% label - 
      {SVM}% abbreviation - 
      {support vector machine}% long form - 
      {Statistical pattern recognition technique}% description -
    -

    Now you can reference the acronym with \gls{svm} or you can reference the entry in the main glossary with -\gls{main-svm}. -

    Note that with bib2gls, there are special dual entry types that implement this behaviour. That is, if an -entry is referenced then its corresponding dual entry will automatically be selected as well. So there -is less need for \glsadd with bib2gls. (Although it can still be useful, as shown in Option 6.) -

    -
    -

    -

    ____________________________

    - - -

    -

    Top

    8. Cross-Referencing Entries

    -

    You must use \makeglossaries (Options 2 or 3) or \makenoidxglossaries (Option 1) before -defining any terms that cross-reference entries. If any of the terms that you have cross-referenced -don’t appear in the glossary, check that you have put \makeglossaries/\makenoidxglossaries -before all entry definitions. The glossaries-extra package provides better cross-reference handling. -
    -

    -

    There are several ways of cross-referencing entries in the glossary: -

      -
    1. You can use commands such as \gls in the entries description. For example: - - -
      - \newglossaryentry{apple}{name=apple, -  
      description={firm, round fruit. See also \gls{pear}}} -
      -

      Note that with this method, if you don’t use the cross-referenced term in the main part of the document, - you will need two runs of makeglossaries: -

      
      -     
      pdflatex filename -
      makeglossaries filename -
      pdflatex filename -
      makeglossaries filename -
      pdflatex filename -
      -
      -

    2. -
    3. As described in §4 Defining Glossary Entries, you can use the see key when you define the entry. For - example: - - -
      - \newglossaryentry{MaclaurinSeries}{name={Maclaurin -  
      series}, -  
      description={Series expansion}, -  
      see={TaylorsTheorem}} -
      -

      Note that in this case, the entry with the see key will automatically be added to the glossary, but the - cross-referenced entry won’t. You therefore need to ensure that you use the cross-referenced term with the - commands described in §6 Links to Glossary Entries or §7 Adding an Entry to the Glossary Without - Generating Text. -

      The “see” tag is produce using \seename, but can be overridden in specific instances using square brackets - at the start of the see value. For example: - - -

      -
      - \newglossaryentry{MaclaurinSeries}{name={Maclaurin -  
      series}, -  
      description={Series expansion}, -  
      see=[see also]{TaylorsTheorem}} -
      -

      Take care if you want to use the optional argument of commands such as \newacronym or \newterm as - the value will need to be grouped. For example: - - -

      -
      - \newterm{seal} -  
      \newterm[see={[see also]seal}]{sea lion} -
      -

      Similarly if the value contains a list. For example: - - -

      -
      - \glossaryentry{lemon}{ -  
        name={lemon}, -  
        description={Yellow citrus fruit} -  
      } -  
      \glossaryentry{lime} -  
      { -  
        name={lime}, -  
        description={Green citrus fruit} -  
      } -  
      \glossaryentry{citrus} -  
      { -  
        name={citrus}, -  
        description={Plant in the Rutaceae family}, -  
        see={lemon,lime} -  
      } -
      -

      -

    4. -
    5. After you have defined the entry, use -


      \glssee[tag]{


      \glsentrydesc{label}{xr label list}

      -

      - where ⟨xr label list⟩ is a comma-separated list of entry labels to be cross-referenced, ⟨label⟩ is the label of the - entry doing the cross-referencing and ⟨tag⟩ is the “see” tag. (The default value of ⟨tag⟩ is \seename.) For - example: - - -

      -
      - \glssee[see also]{series}{FourierSeries,TaylorsTheorem} -
      -

      Note that this automatically adds the entry given by ⟨label⟩ to the glossary but doesn’t add the - cross-referenced entries (specified by ⟨xr label list⟩) to the glossary.

    -

    In both cases 2 and 3 above, the cross-referenced information appears in the number list, whereas in case 1, -the cross-referenced information appears in the description. (See the sample-crossref.tex example file that -comes with this package.) This means that in cases 2 and 3, the cross-referencing information won’t appear if -you have suppressed the number list. In this case, you will need to activate the number list for -the given entries using nonumberlist=false. Alternatively, if you just use the see key instead -of \glssee, you can automatically activate the number list using the seeautonumberlist package -option. -

    -

    Top

    8.1 Customising Cross-reference Text

    -

    When you use either the see key or the command \glssee, the cross-referencing information will be typeset in -the glossary according to: -


    \glsseeformat[tag]{label-list}{location

    +


    \Glsentrydesc{label}

    -

    -The default definition of \glsseeformat is: -
    \emph{tag} \glsseelist{label-list} -
    -Note that the location is always ignored.8.1 -For example, if you want the tag to appear in bold, you can -do:8.2 - - -

    -
    -\renewcommand*{\glsseeformat}[3][\seename]{\textbf{#1} - 
     \glsseelist{#2}} -
    -

    -

    The list of labels is dealt with by \glsseelist, which iterates through the list and typesets each entry in -the label. The entries are separated by -


    \glsseesep

    -

    -or (for the last pair) -


    \glsseelastsep

    -

    -These default to “,\space” and “\space\andname\space” respectively. The list entry text is displayed -using: -


    \glsseeitemformat{

    +These commands display the description for the glossary entry given by ⟨label⟩. +

    \Glsentrydesc makes the first letter upper case. The first form is expandable (unless the value of that key +contains unexpandable commands). The second form is not expandable. Neither checks for the existence of +⟨label⟩. +


    \glossentrydesc{label}

    -

    -This defaults to \glsentrytext{

    +This is like \glsentrydesc{label}.8.3 -For example, to make the cross-referenced list use small caps: - - -

    -
    -\renewcommand{\glsseeitemformat}[1]{% - 
      \textsc{\glsentrytext{#1}}} -
    -

    -

    You can use \glsseeformat and \glsseelist in the main body of the text, but they won’t automatically -add the cross-referenced entries to the glossary. If you want them added with that location, you can -do: - - -

    -
    -Some information (see also - 
    \glsseelist{FourierSeries,TaylorsTheorem}% - 
    \glsadd{FourierSeries}\glsadd{TaylorsTheorem}). -
    -

    -

    - - -

    -

    -

    Top

    9. Using Glossary Terms Without Links

    -

    The commands described in this section display entry details without adding any information to the -glossary. They don’t use \glstextformat, they don’t have any optional arguments, they don’t affect the first -use flag and, apart from \glshyperlink, they don’t produce hyperlinks. -

    Commands that aren’t expandable will be ignored by PDF bookmarks, so you will need to provide an -alternative via hyperref’s \texorpdfstring if you want to use them in sectioning commands. (This isn’t specific -to the glossaries package.) See the hyperref documentation for further details. All the commands that convert the -first letter to upper case aren’t expandable. The other commands depend on whether their corresponding keys -were assigned non-expandable values.
    -

    -

    If you want to title case a field, you can use: -


    \glsentrytitlecase{} but also checks for the existence of ⟨label⟩. This command is not expandable. +It’s used in the predefined glossary styles to display the description. +


    \Glossentrydesc{label}{field}

    -

    -where ⟨label⟩ is the label identifying the glossary entry, ⟨field⟩ is the field label (see table 4.1). For -example: - - -

    -
    -\glsentrytitlecase{sample}{desc} -
    -

    (If you want title-casing in your glossary style, you might want to investigate the glossaries-extra package.) This -command will trigger an error if the entry is undefined. -

    Note that this command has the same limitations as \makefirstuc which is used by commands like \Gls -and \Glsentryname to upper-case the first letter (see the notes about \Gls in §6.1 The \gls-Like Commands -(First Use Flag Queried)). -


    \glsentryname{

    +This is like \glossentrydesc but converts the first letter to upper case. This command is not +expandable. +


    \glsentrydescplural{label}

    -

    -


    \Glsentryname{

    +


    \Glsentrydescplural{label}

    -

    -These commands display the name of the glossary entry given by ⟨label⟩, as specified by the name key. -\Glsentryname makes the first letter upper case. Neither of these commands check for the existence of ⟨

    +These commands display the plural description for the glossary entry given by ⟨label⟩. \Glsentrydescplural +makes the first letter upper case. The first form is expandable (unless the value of that key contains +unexpandable commands). The second form is not expandable. Neither checks for the existence of +⟨label⟩. -The first form \glsentryname is expandable (unless the name contains unexpandable commands). Note that -this may be different from the values of the text or first keys. In general it’s better to use \glsentrytext or -\glsentryfirst instead of \glsentryname. -

    In general it’s best to avoid \Glsentryname with abbreviations. Instead, consider using \Glsentrylong, -\Glsentryshort or \Glsentryfull.
    -

    -


    \glossentryname{label}

    -

    -This is like \glsnamefont{\glsentryname{label}} but also checks for the existence of ⟨label⟩. This command is -not expandable. It’s used in the predefined glossary styles, so if you want to change the way the -name is formatted in the glossary, you can redefine \glsnamefont to use the required fonts. For -example: - - -

    -
    -\renewcommand*{\glsnamefont}[1]{\textmd{\sffamily #1}} -
    -

    -


    \Glossentryname{label}

    -

    -This is like \glossentryname but makes the first letter of the name upper case. -


    \glsentrytext{label}

    -

    -


    \Glsentrytext{label}

    -

    -These commands display the subsequent use text for the glossary entry given by ⟨label⟩, as specified by the text -key. \Glsentrytext makes the first letter upper case. The first form is expandable (unless the text contains -unexpandable commands). The second form is not expandable. Neither checks for the existence of -⟨label⟩. -


    \glsentryplural{label}

    -

    -


    \Glsentryplural{label}

    -

    -These commands display the subsequent use plural text for the glossary entry given by ⟨label⟩, as specified by the -plural key. \Glsentryplural makes the first letter upper case. The first form is expandable (unless the value -of that key contains unexpandable commands). The second form is not expandable. Neither checks for the -existence of ⟨label⟩. -


    \glsentryfirst{label}

    -

    -


    \Glsentryfirst{label}

    -

    -These commands display the first use text for the glossary entry given by ⟨label⟩, as specified by the first key. -\Glsentryfirst makes the first letter upper case. The first form is expandable (unless the value of that key -contains unexpandable commands). The second form is not expandable. Neither checks for the existence of -⟨label⟩. -


    \glsentryfirstplural{label}

    -

    -


    \Glsentryfirstplural{label}

    -

    -These commands display the plural form of the first use text for the glossary entry given by ⟨label⟩, as specified -by the firstplural key. \Glsentryfirstplural makes the first letter upper case. The first form is expandable -(unless the value of that key contains unexpandable commands). The second form is not expandable. Neither -checks for the existence of ⟨label⟩. -


    \glsentrydesc{label}

    - - -

    -


    \Glsentrydesc{label}

    -

    -These commands display the description for the glossary entry given by ⟨label⟩. -

    \Glsentrydesc makes the first letter upper case. The first form is expandable (unless the value of that key -contains unexpandable commands). The second form is not expandable. Neither checks for the existence of -⟨label⟩. -


    \glossentrydesc{label}

    -

    -This is like \glsentrydesc{label} but also checks for the existence of ⟨label⟩. This command is not expandable. -It’s used in the predefined glossary styles to display the description. -


    \Glossentrydesc{label}

    -

    -This is like \glossentrydesc but converts the first letter to upper case. This command is not -expandable. -


    \glsentrydescplural{label}

    -

    -


    \Glsentrydescplural{label}

    -

    -These commands display the plural description for the glossary entry given by ⟨label⟩. \Glsentrydescplural -makes the first letter upper case. The first form is expandable (unless the value of that key contains -unexpandable commands). The second form is not expandable. Neither checks for the existence of -⟨label⟩. -



    \glsentrysymbol{label}

    -

    -


    +


    \Glsentrysymbol{label}

    -

    +

    These commands display the symbol for the glossary entry given by ⟨label⟩. -

    \Glsentrysymbol makes the first letter upper case. The first form is expandable (unless the value of that key contains unexpandable commands). The second form is not expandable. Neither checks for the existence of ⟨label⟩. -



    \glsletentryfield{cs}{label}{field}

    -

    -This command doesn’t display anything. It merely fetches the value associated with the given field (where -the available field names are listed in table 4.1) and stores the result in the control sequence ⟨

    +This command doesn’t display anything. It merely fetches the value associated with the given field (where the +available field names are listed in table ??tab:fieldmap) and stores the result in the control sequence ⟨cs⟩. For example, to store the description for the entry whose label is “apple” in the control sequence \tmp:

    -
    +
     \glsletentryfield{\tmp}{apple}{desc}
    -
    -

    -


    +

    +


    \glossentrysymbol{label}

    -

    +

    This is like \glsentrysymbol{label} but also checks for the existence of ⟨label⟩. This command is not expandable. It’s used in some of the predefined glossary styles to display the symbol. -



    \Glossentrysymbol{label}

    -

    +

    This is like \glossentrysymbol but converts the first letter to upper case. This command is not expandable. -



    \glsentrysymbolplural{label}

    -

    -


    +


    \Glsentrysymbolplural{label}

    -

    +

    These commands display the plural symbol for the glossary entry given by ⟨label⟩. \Glsentrysymbolplural @@ -18362,140 +17811,143 @@ makes the first letter upper case. The first form is expandable (unless the valu unexpandable commands). The second form is not expandable. Neither checks for the existence of ⟨label⟩. -



    \glsentryuseri{label}

    -

    -


    +


    \Glsentryuseri{label}

    -

    -


    +


    \glsentryuserii{label}

    -

    -


    +


    \Glsentryuserii{label}

    -

    -


    +


    \glsentryuseriii{label}

    -

    -


    +


    \Glsentryuseriii{label}

    -

    -


    +


    \glsentryuseriv{label}

    -

    -


    +


    \Glsentryuseriv{label}

    -

    -


    +


    \glsentryuserv{label}

    -

    -


    +


    \Glsentryuserv{label}

    -

    -


    +


    \glsentryuservi{label}

    -

    -


    +


    \Glsentryuservi{label}

    -

    +

    These commands display the value of the user keys for the glossary entry given by ⟨label⟩. The lower case forms are expandable (unless the value of the key contains unexpandable commands). The commands beginning with an upper case letter convert the first letter of the required value to upper case and are not expandable. None of these commands check for the existence of ⟨label⟩. -



    \glshyperlink[link text]{label}

    -

    +

    This command provides a hyperlink to the glossary entry given by ⟨labelbut does not add any information to the glossary file. The link text is given by \glsentrytext{label} by default9.1, +href="#fn4x5" id="fn4x5-bk">5.4, but can be overridden using the optional argument. Note that the hyperlink will be suppressed if you have used \glsdisablehyper or if you haven’t loaded the or if you haven’t loaded the hyperref package. -

    If you use package. +

    If you use \glshyperlink, you need to ensure that the relevant entry has been added to the glossary using any of the commands described in §6 §??sec:glslink Links to Glossary Entries or §7 Adding an Entry to the Glossary Without -Generating Text otherwise you will end up with an undefined link.
    -

    -

    The next two commands are only available with §??sec:glsadd Adding an +Entry to the Glossary Without Generating Text otherwise you will end up with an undefined link. +

    +

    +

    The next two commands are only available with Option 1 or with the savenumberlist package + id="dx1-134058"> package option: -



    \glsentrynumberlist{label}

    -

    -


    +


    \glsdisplaynumberlist{label}

    -

    +

    Both display the number list for the entry given by ⟨ for the entry given by ⟨label⟩. When used with Option 1 a rerun is required to ensure this list is up-to-date, when used with Options 2 or 3 a run of makeglossaries (or (or makeindex//xindy) + id="dx1-134064">) followed by one or two runs of LaTeX is required. -

    The first command,

    The first command, \glsentrynumberlist, simply displays the number list as is. The second command, \glsdisplaynumberlist, formats the list using: -



    \glsnumlistsep

    -

    +

    as the separator between all but the last two elements and -



    \glsnumlistlastsep

    -

    +

    between the final two elements. The defaults are ,␣ and ␣\&␣, respectively. -

    \glsdisplaynumberlist is fairly experimental. It works with Option 1, but for Options 

    \glsdisplaynumberlist is fairly experimental. It works with Options 1 and 4, but for Options 2 or 3 it only works when the default counter format is used (that is, when the format key is set to + id="dx1-134067"> key is set to glsnumberformat). This command will only work with hyperref if you choose Option 1. If you try using + id="dx1-134068"> if you choose Options 1 or 4. If you try using this command with Options 2 or 3 and hyperref, , \glsentrynumberlist will be used instead.
    -

    -

    For further information see “Displaying entry details without adding information to the glossary” in the +

    +

    For further information see “Displaying entry details without adding information to the glossary” in the documented code (glossaries-code.pdf).

    -

    -

    Top

    10. Displaying a glossary

    -

    All defined glossaries may be displayed using: -

    -Option 1:
    (Must be used with \makenoidxglossaries in the preamble.) -


    \printnoidxglossaries

    -

    -

    -Options 2 and 3:
    (Must be used with \makeglossaries in the preamble.) -


    \printglossaries

    -

    -

    -

    These commands will display all the glossaries in the order in which they were defined. -

    Note that, in the case of Options 2 and 3, no glossaries will appear until you have either used the Perl script -makeglossaries or Lua script makeglossaries-lite or have directly used makeindex or xindy (as described -in §1.4 Generating the Associated Glossary Files). -

    While the external files are missing, \printglossary will just do \null for each missing glossary to assist -dictionary style documents that just use \glsaddall without inserting any text. This use of \null ensures that -all indexing information is written before the final page is shipped out. Once the external files are present \null -will no longer be used. This can cause a spurious blank page on the first LaTeX run before the glossary files -have been created. Once these files are present, \null will no longer be used and so shouldn’t cause interference -for the final document.
    -

    -

    If you use glossaries-extra, it will insert a heading and boilerplate text when the external files are missing. -The extension package also provides \printunsrtglossaries as an alternative. See the

    +

    Top

    6. Acronyms and Other Abbreviations

    +

    The glossaries-extra manual -for further details.
    -

    -

    If the glossary still does not appear after you re-LaTeX your document, check the makeindex/xindy log files -to see if there is a problem. With Option 1, you just need two LaTeX runs to make the glossaries appear, but -you may need further runs to make the number lists up-to-date. -

    An individual glossary can be displayed using: -

    -Option 1:
    -


    \printnoidxglossary[options]

    -

    - (Must be used with \makenoidxglossaries in the preamble.) -

    +class="cmss-10">glossaries-extra package provides superior abbreviation handling. You may want to consider using that +package instead of the commands described here.
    +

    +

    Note that although this chapter uses the term “acronym”, you can also use the commands +described here for initialisms or contractions (as in the case of some of the examples given below). If +the glossary title is no longer applicable (for example, it should be “Abbreviations” rather than +“Acronyms”) then you can change the title either by redefining \acronymname (see §??sec:languages +Multi-Lingual Support) or by using the title key in the optional argument of \printglossary (or Options 2 and 3:
    +class="cmtt-10">\printacronyms). Alternatively consider using the glossaries-extra package’s abbreviations option instead. +
    +

    +

    Acronyms use the same underlying mechanism as terms defined with \newglossaryentry so you can +reference them with \gls and \glspl. The way the acronym is displayed on first use is governed by the +acronym style, which should be set before you define your acronyms. For example: -


    \printglossary[options]

    -

    - (Must be used with \makeglossaries in the preamble.)

    -

    where ⟨options⟩ is a ⟨key⟩=⟨value⟩ list of options. (Again, when the associated external file is missing, \null is inserted -into the document.) -

    The following keys are available: -

    -type
    The value of this key specifies which glossary to print. If omitted, the default glossary is assumed. For - example, to print the list of acronyms: - - -
    - \printglossary[type=\acronymtype] -
    -

    Note that you can’t display an ignored glossary, so don’t try setting type to the name of a glossary that - was defined using \newignoredglossary, described in §12 Defining New Glossaries. (You can display an - ignored glossary with \printunsrtglossary provided by +

    +\documentclass{article}
    +\usepackage{glossaries}
    +\setacronymstyle{long-short}
    +\newacronym{html}{HTML}{hypertext markup language}
    +\newacronym{xml}{XML}{extensible markup language}
    +\begin{document}
    +First use: \gls{html} and \gls{xml}.
    +Next use: \gls{html} and \gls{xml}.
    +\end{document}
    +
    +

    If you don’t specify a style, you will have a less-flexible, but backward-compatible, “long (short)” style with just +the base glossaries package or the short-nolong style (which only displays the short form on first use) with +glossaries-extra.) -

    -title
    This is the glossary’s title (overriding the title specified when the glossary was defined). -
    -toctitle
    This is the title to use for the table of contents (if the toc package option has been used). It may also - be used for the page header, depending on the page style. If omitted, the value of title is - used. -
    -style
    This specifies which glossary style to use for this glossary, overriding the effect of the style package option - or \glossarystyle. -
    -numberedsection
    This specifies whether to use a numbered section for this glossary, overriding the effect of the - numberedsection package option. This key has the same syntax as the numberedsection package option, - described in §2.2 Sectioning, Headings and TOC Options. -
    +class="cmss-10">glossaries-extra. +

    Acronyms are defined using: +


    \newacronym[key-val list]{label}{abbrv}{long}

    +

    +

    This creates an entry with the given label in the glossary given by \acronymtype. You can specify a different +glossary using the type key within the optional argument. The \newacronym command also uses the long, nonumberlist

    This is a boolean key. If true (nonumberlist=true) the numberlist is suppressed for this - glossary. If false (nonumberlist=false) the numberlist is displayed for this glossary. -
    +class="cmtt-10">longplural, short and shortplural keys in \newglossaryentry to store the long and abbreviated forms and +their plurals. +

    If you use \newacronym with glossaries-extra, you need to first set the style with:

    +
    +\setabbreviationstyle[acronym]{style-name} +
    +
    +

    +

    Note that the same restrictions on the entry ⟨label⟩ in \newglossaryentry also apply to \newacronym (see +§??sec:newglosentry Defining Glossary Entries). Since \newacronym works like \newglossaryentry, you can use nogroupskip

    This is a boolean key. If true the vertical gap between groups is suppressed for this - glossary. -
    +class="cmtt-10">\glsreset to reset the first use flag. +

    If you haven’t identified the specified glossary type as a list of acronyms (via the package option acronymlists +or the command \DeclareAcronymList, see §??sec:pkgopts-acronym Acronym and Abbreviation Options) nopostdot
    This is a boolean key. If true the full stop after the description is suppressed for this - glossary. -
    +class="cmtt-10">\newacronym will add it to the list and reset the display style for that glossary via \defglsentryfmt. If you +have a mixture of acronyms and regular entries within the same glossary, care is needed if you want to change +the display style: you must first identify that glossary as a list of acronyms and then use \defglsentryfmt (not +redefine \glsentryfmt) before defining your entries. Alternatively, use glossaries-extra to have better support for +a mixed glossary.
    +

    +

    The optional argument {key-val list} allows you to specify additional information. Any key that can be used +in the second argument of \newglossaryentry can also be used here in ⟨key-val list⟩. For example, description + + +(when used with one of the styles that require a description, described in §??sec:setacronymstyle Changing the +Acronym Style) or you can override plural forms of ⟨abbrv⟩ or ⟨long⟩ using the shortplural or longplural keys. +For example: + + +

    +
    +\newacronym[longplural={diagonal matrices}]%
    +  {dm}{DM}{diagonal matrix}
    +
    +

    If the first use uses the plural form, \glspl{dm} will display: diagonal matrices (DMs). If you want to use the entrycounter

    This is a boolean key. Behaves similar to the package option of the same name. The - corresponding package option must be used to make \glsrefentry work correctly. -
    +class="cmtt-10">longplural or shortplural keys, I recommend you use \setacronymstyle to set the display style rather than +using one of the pre-version 4.02 acronym styles (described in §??sec:pkgopts-old-acronym Deprecated Acronym +Style Options). +

    As with plural, if longplural is missing, it’s obtained by appending \glspluralsuffix to the singular +form. The short plural shortplural is obtained (if not explicitly set) by appending \glsacrpluralsuffix to +the short form. These commands may be changed by the associated language files, but they can’t be +added to the usual caption hooks as there’s no guarantee when they’ll be expanded (as discussed +earlier). +

    A different approach is used by glossaries-extra, which has category attributes to determine whether or not +to append a suffix when forming the default value of shortplural.
    +

    +

    Since \newacronym sets type=\acronymtype, if you want to load a file containing acronym definitions using subentrycounter
    This is a boolean key. Behaves similar to the package option of the same name. If you want - to set both entrycounter and subentrycounter, make sure you specify entrycounter first. The - corresponding package option must be used to make \glsrefentry work correctly. -
    +class="cmtt-10">\loadglsentries[type]{filename}, the optional argument ⟨type⟩ will not have an effect unless you explicitly set +the type as type=\glsdefaulttype in the optional argument to \newacronym. See §??sec:loadglsentries Loading +Entries From a File.
    +

    + +

    Example 14 (Defining an Abbreviation) +

    The following defines the abbreviation IDN: + + +

    +
    +\setacronymstyle{long-short}
    +\newacronym{idn}{IDN}{identification number}
    +
    +

    \gls{idn} will produce “identification number (IDN)” on first use and “IDN” on subsequent uses. If you want +to use one of the small caps acronym styles, described in §??sec:setacronymstyle Changing the Acronym Style, +you need to use lower case characters for the shortened form: + + +

    +
    +\setacronymstyle{long-sc-short}
    +\newacronym{idn}{idn}{identification number}
    +
    +

    Now \gls{idn} will produce “identification number (idn)” on first use and “idn” on subsequent uses. +

    +
    +

    +

    ____________________________

    +

    Avoid nested definitions.
    +

    +

    Recall from the warning in §??sec:newglosentry Defining Glossary Entries that you should avoid +using the \gls-like and \glstext-like commands within the value of keys like text and first +due to complications arising from nested links. The same applies to abbreviations defined using sort

    This key is only available for Option 1. Possible values are: word (word order), letter (letter order), +class="cmtt-10">\newacronym. +

    For example, suppose you have defined: - standard (word or letter ordering taken from the order package option), use (order of use), def (order of - definition) nocase (case-insensitive) or case (case-sensitive). Note that the word and letter comparisons - (that is, everything other than sort=use and sort=def) just use a simple character code comparison. For - a locale-sensitive sort, you must use either xindy (Option 3) or bib2gls (Option 4). Note that bib2gls - provides many other sort options. -

    If you use the use or def values make sure that you select a glossary style that doesn’t have a visual - indicator between groups, as the grouping no longer makes sense. Consider using the nogroupskip option. -
    -

    -

    The - word - and - letter - order - sort - methods - use - datatool’s - \dtlwordindexcompare - and - \dtlletterindexcompare - handlers. - The - case-insensitive - sort - method - uses - datatool’s - \dtlicompare - handler. - The - case-sensitive - sort - method - uses - datatool’s - \dtlcompare - handler. - See - the - datatool - documentation - for - further - - - details. -

    If you don’t get an error with sort=use and sort=def but you do get an error with one of the other sort - options, then you probably need to use the sanitizesort=true package option or make sure none of the - entries have fragile commands in their sort field. -

    -label={label}
    This key is only available with glossaries-extra and labels the glossary with \label{label}. This - is an alternative to the package option numberedsection=autolabel -
    -target
    This is a boolean key only available with glossaries-extra, which can be used to switch off the - automatic hypertarget for each entry. (This refers to the target used by commands like \gls and - \glslink.) -

    This option is useful with \printunsrtglossary as it allows the same list (of sub-list) of entries to be - displayed multiple times without causing duplicate hypertarget names. -

    -prefix={prefix}
    This key is only available with glossaries-extra and provides another way of avoiding - duplicate hypertarget names is to use a different prefix for those names. This locally redefines - \glolinkprefix but note this will also affect the target for any entry referenced within the glossary with - commands like \gls, \glslink or \glshypertarget. -
    -targetnameprefix={prefix}
    This key is only available with glossaries-extra. This is similar to the prefix - option, but it alters the prefix of the hypertarget anchors without changing \glslinkprefix (so it won’t - change the hyperlinks for any entries referenced in the glossary). -
    -

    By default, the glossary is started either by \chapter* or by \section*, depending on whether or not -\chapter is defined. This can be overridden by the section package option or the \setglossarysection -command. Numbered sectional units can be obtained using the numberedsection package option. Each glossary -sets the page header via the command -


    \glsglossarymark{title}

    -

    -If this mechanism is unsuitable for your chosen class file or page style package, you will need to redefine -\glsglossarymark. Further information about these options and commands is given in §2.2 Sectioning, Headings -and TOC Options. -

    Information can be added to the start of the glossary (after the title and before the main body of the -glossary) by redefining -


    \glossarypreamble

    -

    -For example: +

    +
    +\newacronym{ssi}{SSI}{server side includes}
    +\newacronym{html}{HTML}{hypertext markup language}
    +
    +

    you may be tempted to do:

    -
    -\renewcommand{\glossarypreamble}{Numbers in italic - 
    indicate primary definitions.} -
    -

    This needs to be done before the glossary is displayed. -

    If you want a different preamble per glossary you can use -


    \setglossarypreamble[type]{preamble text}

    -

    -If ⟨type⟩ is omitted, \glsdefaulttype is used. -

    For example: +

    +\newacronym{shtml}{S\gls{html}}{\gls{ssi} enabled \gls{html}}
    +
    +

    Don’t! This will break the case-changing commands, such as \Gls, it will cause inconsistencies on first use, and, +if hyperlinks are enabled, will cause nested hyperlinks. It will also confuse the commands used by the entry +formatting (such as \glslabel). +

    Instead, consider doing:

    -
    -\setglossarypreamble{Numbers in italic - 
    indicate primary definitions.} -
    -

    This will print the given preamble text for the main glossary, but not have any preamble text for any other -glossaries. -

    There is an analogous command to \glossarypreamble called -


    \glossarypostamble

    -

    -which is placed at the end of each glossary. - -

    Example 15 (Switch to Two Column Mode for Glossary) -

    Suppose you are using the superheaderborder -style10.1, -and you want the glossary to be in two columns, but after the glossary you want to switch back to one column -mode, you could do: +

    +\newacronym
    + [description={\gls{ssi} enabled \gls{html}}]
    + {shtml}{SHTML}{SSI enabled HTML}
    +
    +

    or

    -
    -\renewcommand*{\glossarysection}[2][]{% - 
      \twocolumn[{\chapter*{#2}}]% - 
      \setlength\glsdescwidth{0.6\linewidth}% - 
      \glsglossarymark{\glossarytoctitle}% - 
    } - 
    \renewcommand*{\glossarypostamble}{\onecolumn} -
    -

    +

    +\newacronym
    + [description={\gls{ssi} enabled \gls{html}}]
    + {shtml}{SHTML}
    + {server side includes enabled hypertext markup language}
    +
    +

    Similarly for the \glstext-like commands. +

    Other approaches are available with glossaries-extra. See the section “Nested Links” in the glossaries-extra +user manual.
    +

    -
    -

    -

    ____________________________

    -

    Within each glossary, each entry name is formatted according to -


    \glsnamefont{name}

    -

    -which takes one argument: the entry name. This command is always used regardless of the glossary style. By -default, \glsnamefont simply displays its argument in whatever the surrounding font happens to be. -This means that in the list-like glossary styles (defined in the glossary-list style file) the name will -appear in bold, since the name is placed in the optional argument of \item, whereas in the tabular -styles (defined in the glossary-long and glossary-super style files) the name will appear in the normal -font. The hierarchical glossary styles (defined in the glossary-tree style file) also set the name in -bold. -

    If you want to change the font for the description, or if you only want to change the name -font for some types of entries but not others, you might want to consider using the

    Top

    6.1 Displaying the Long, Short and Full Forms (Independent of First Use)

    +

    It may be that you want the long, short or full form regardless of whether or not the acronym has already been +used in the document. You can do so with the commands described in this section. +

    The \acrcommands described below are part of the set of \glstext-like commands. That is, they +index and can form hyperlinks, but they don’t modify the first use flag. However, their display is +governed by \defentryfmt with \glscustomtext set as appropriate. All caveats that apply to the +\glstext-like commands also apply to the following commands. (Including the above warning about nested +links.) +

    If you are using glossaries-extra, don’t use the commands described in this section. The glossaries-extra -package. - -

    Example 16 (Changing the Font Used to Display Entry Names in the -Glossary) -

    Suppose you want all the entry names to appear in medium weight small caps in your glossaries, then you -can do: - - -

    -
    -\renewcommand{\glsnamefont}[1]{\textsc{\mdseries #1}} -
    -

    -
    -

    -

    ____________________________

    - - -

    -

    Top

    11. Xindy (Option 3)

    -

    If you want to use xindy to sort the glossary, you must use the package option xindy: +package provides analogous \glsxtror \glsfmtcommands. For example, \glsxtrshort instead of +\acrshort or, if needed in a heading, \glsfmtshort. (Similarly for the case-changing variants.) +

    +

    +

    The optional arguments are the same as those for the \glstext-like commands, and there are similar star +and plus variants that switch off or on the hyperlinks. As with the \glstext-like commands, the link text is +placed in the argument of \glstextformat. +


    \acrshort[options]{label}[insert]

    +

    +This sets the link text to the short form (within the argument of \acronymfont) for the entry given by ⟨label⟩. +The short form is as supplied by the short key, which \newacronym implicitly sets. +

    There are also analogous upper case variants: +


    \Acrshort[options]{label}[insert]

    +

    +


    \ACRshort[options]{label}[insert]

    +

    +There are also plural versions: +


    \acrshortpl[options]{label}[insert]

    +

    -

    -
    -\usepackage[xindy]{glossaries} -
    -

    This ensures that the glossary information is written in xindy syntax. -

    §1.4 Generating the Associated Glossary Files covers how to use the external indexing application, and §5.2 -Locations covers the issues involved in the location syntax. This section covers the commands provided by the -glossaries package that allow you to adjust the xindy style file (xdy) and parameters. -

    To assist writing information to the xindy style file, the glossaries package provides the following -commands: -


    \glsopenbrace

    -

    -


    \glsclosebrace

    -

    -which produce an open and closing brace. (This is needed because \{ and \} don’t expand to a simple brace -character when written to a file.) Similarly, you can write a percent character using: -


    \glspercentchar

    -

    -and a tilde character using: -


    \glstildechar

    -

    -For example, a newline character is specified in a xindy style file using ~n so you can use \glstildechar n to -write this correctly (or you can do \string~n). A backslash can be written to a file using -


    \glsbackslash

    -

    -

    In addition, if you are using a package that makes the double quote character active (e.g. ngerman) you can -use: -


    \glsquote{text}

    -

    -which will produce "text". Alternatively, you can use \string" to write the double-quote character. This -document assumes that the double quote character has not been made active, so the examples just use " for -clarity. -

    If you want greater control over the xindy style file than is available through the LaTeX commands -provided by the glossaries package, you will need to edit the xindy style file. In which case, you must use -\noist to prevent the style file from being overwritten by the glossaries package. For additional -information about xindy, read the xindy documentation. I’m sorry I can’t provide any assistance -with writing xindy style files. If you need help, I recommend you ask on the xindy mailing list -(http://xindy.sourceforge.net/mailing-list.html). -

    -

    Top

    11.1 Language and Encodings

    -

    When you use xindy, you need to specify the language and encoding used (unless you have written your own - - -custom xindy style file that defines the relevant alphabet and sort rules). If you use makeglossaries, -this information is obtained from the document’s auxiliary (aux) file. The makeglossaries script -attempts to find the root language given your document settings, but in the event that it gets -it wrong or if xindy doesn’t support that language, then you can specify the required language -using: -


    \GlsSetXdyLanguage[glossary type


    \Acrshortpl[options]{languagelabel}[insert]

    +

    +


    \ACRshortpl[options]{label}[insert]

    +

    +The short plural form is as supplied by the shortplural key, which \newacronym implicitly sets. +


    \acrlong[options]{label}[insert]

    +

    +This sets the link text to the long form for the entry given by ⟨label⟩. The long form is as supplied by the long +key, which \newacronym implicitly sets. +

    There are also analogous upper case variants: +


    \Acrlong[options]{label}[insert]

    +

    +


    \ACRlong[options]{label}[insert]

    +

    +Again there are also plural versions: +


    \acrlongpl[options]{label}[insert]

    +

    +


    \Acrlongpl[options]{label}[insert]

    +

    +


    \ACRlongpl[options]{label}[insert]

    +

    +The long plural form is as supplied by the longplural key, which \newacronym implicitly sets. +

    The commands below display the full form of the acronym, but note that this isn’t necessarily the same as +the form used on first use. These full-form commands are shortcuts that use the above commands, rather than +creating the link text from the complete full form. These full-form commands have star and plus variants and +optional arguments that are passed to the above commands. +


    \acrfull[options]{label}[insert]

    +

    +This is a shortcut for +


    \acrfullfmt{options}{label}{insert}

    -

    -where ⟨language⟩ is the name of the language. The optional argument can be used if you have multiple glossaries -in different languages. If ⟨glossary type⟩ is omitted, it will be applied to all glossaries, otherwise the language -setting will only be applied to the glossary given by ⟨glossary type⟩. -

    If the inputenc package is used, the encoding will be obtained from the value of \inputencodingname. -Alternatively, you can specify the encoding using: -


    \GlsSetXdyCodePage{code

    +which by default does

    +
    +\acrfullformat +
     {\acrlong[options]{label}{insert}} +
     {\acrshort[options]{label}} +
    +
    where +


    \acrfullformat{long}{short}

    -

    -where ⟨code⟩ is the name of the encoding. For example: +

    +by default does ⟨long⟩ (⟨short⟩). This command is now deprecated for new acronym styles but is used by default +for backward compatibility if \setacronymstyle (§??sec:setacronymstyle Changing the Acronym +Style) hasn’t been used. (For further details of these format commands see the documented code, +glossaries-code.pdf.) +

    There are also analogous upper case variants: +


    \Acrfull[options]{label}[insert]

    +

    +


    \ACRfull[options]{label}[insert]

    +

    +and plural versions: +


    \acrfullpl[options]{label}[insert]

    +

    +


    \Acrfullpl[options]{label}[insert]

    +

    +


    \ACRfullpl[options]{label}[insert]

    +

    +

    If you find the above commands too cumbersome to write, you can use the shortcuts package option to +activate the shorter command names listed in table ??tab:shortcuts.

    -
    -\GlsSetXdyCodePage{utf8} -
    -

    -

    Note that you can also specify the language and encoding using the package option -xindy={language=lang,codepage=code}. For example: +

    -

    -
    -\usepackage[xindy={language=english,codepage=utf8}]{glossaries} -
    -

    -

    If you write your own custom xindy style file that includes the language settings, you need to set the -language to nothing: +


    -

    -
    -\GlsSetXdyLanguage{} -
    -

    (and remember to use \noist to prevent the style file from being overwritten). -

    The commands \GlsSetXdyLanguage and \GlsSetXdyCodePage have no effect if you don’t use -makeglossaries. If you call xindy without makeglossaries you need to remember to set the language and -encoding using the -L and -C switches.
    -

    -

    -

    -

    Top

    11.2 Locations and Number lists

    -

    If you use xindy, the glossaries package needs to know which counters you will be using in the number list in -order to correctly format the xindy style file. Counters specified using the counter package option or the ⟨counter⟩ -option of \newglossary are automatically taken care of, but if you plan to use a different counter in the -counter key for commands like \glslink, then you need to identify these counters before \makeglossaries -using: -


    \GlsAddXdyCounters{counter list}

    -

    -where ⟨counter list⟩ is a comma-separated list of counter names. -

    The most likely attributes used in the format key (textrm, hyperrm etc) are automatically added to the -xindy style file, but if you want to use another attribute, you need to add it using: -


    \GlsAddXdyAttribute{name}

    -

    -where ⟨name⟩ is the name of the attribute, as used in the format key. -

    Take care if you have multiple instances of the same location with different formats. The duplicate locations -will be discarded according to the order in which the attributes are listed. Consider defining semantic commands -to use for primary references. For example: - - -

    -
    -\newcommand*{\primary}[1]{\textbf{#1}} - 
    \GlsAddXdyAttribute{primary} -
    -

    Then in the document: - - -

    -
    -A \gls[format=primary]{duck} is an aquatic bird. - 
    There are lots of different types of \gls{duck}. +
    Table 6.1: Synonyms provided by the package option shortcuts
    +
    + + + + + + + + + + + + + + + +
    Shortcut Command Equivalent Command
    \acs \acrshort
    \Acs \Acrshort
    \acsp \acrshortpl
    \Acsp \Acrshortpl
    \acl \acrlong
    \Acl \Acrlong
    \aclp \acrlongpl
    \Aclp \Acrlongpl
    \acf \acrfull
    \Acf \Acrfull
    \acfp \acrfullpl
    \Acfp \Acrfullpl
    \ac \gls
    \Ac \Gls
    \acp \glspl
    \Acp \Glspl
    -

    This will give the format=primary instance preference over the next use that doesn’t use the format -key. - -

    Example 17 (Custom Font for Displaying a Location) -

    Suppose I want a bold, italic, hyperlinked location. I first need to define a command that will do -this: -

    -
    -\newcommand*{\hyperbfit}[1]{\textit{\hyperbf{#1}}} +

    +
    +

    It is also possible to access the long and short forms without adding information to the glossary using +commands analogous to \glsentrytext (described in §??sec:glsnolink Using Glossary Terms Without +Links). +

    The commands that convert the first letter to upper case come with the same caveats as those for analogous +commands like \Glsentrytext (non-expandable, can’t be used in PDF bookmarks, care needs to be taken if the +first letter is an accented character etc). See §??sec:glsnolink Using Glossary Terms Without Links.
    -

    but with xindy, I also need to add this as an allowed attribute: +

    +

    The long form can be accessed using: +


    \glsentrylong{label}

    +

    +or, with the first letter converted to upper case: +


    \Glsentrylong{label}

    +

    +Plural forms: +


    \glsentrylongpl{label}

    +

    +


    \Glsentrylongpl{label}

    +

    +

    Similarly, to access the short form: +


    \glsentryshort{label}

    +

    +or, with the first letter converted to upper case: +


    \Glsentryshort{label}

    +

    +Plural forms: +


    \glsentryshortpl{label}

    +

    +


    \Glsentryshortpl{label}

    +

    +

    And the full form can be obtained using: +


    \glsentryfull{label}

    +

    +


    \Glsentryfull{label}

    +

    +


    \glsentryfullpl{label}

    +

    +


    \Glsentryfullpl{label}

    +

    +These again use \acrfullformat by default, but the new styles described in the section below use different +formatting commands.

    -
    -\GlsAddXdyAttribute{hyperbfit} -
    -

    Now I can use it in the optional argument of commands like \gls: +

    Top

    6.2 Changing the Acronym Style

    +

    If you are using glossaries-extra, don’t use the commands described in this section. Use \setabbreviationstyle to +set the style. This uses a different (but more consistent) naming scheme. For example, long-noshort instead of +dua. See the “Acronym Style Modifications” section and the “Abbreviations” chapter in the glossaries-extra +manual for further details.
    +

    +

    The acronym style is set using: +


    \setacronymstyle{style name}

    +

    +where ⟨style name⟩ is the name of the required style. +

    You must use \setacronymstyle before you define the acronyms with \newacronym.
    +

    +

    For example:

    -
    -Here is a \gls[format=hyperbfit]{sample} entry. -
    -

    (where sample is the label of the required entry).

    -
    -

    -

    ____________________________

    -

    Note that \GlsAddXdyAttribute has no effect if \noist is used or if \makeglossaries is omitted. +
    +\usepackage[acronym]{glossaries}
    +\makeglossaries
    +\setacronymstyle{long-sc-short}
    +\newacronym{html}{html}{hypertext markup language}
    +\newacronym{xml}{xml}{extensible markup language}
    +
    +

    Unpredictable results can occur if you try to use multiple styles. +

    If you need multiple abbreviation styles, then use the glossaries-extra package, which has better abbreviation +management. See, for example, Gallery: Mixing Styles.
    +

    +

    Unlike the backward-compatible default behaviour of \newacronym, the styles set via \setacronymstyle +don’t use the first or text keys, but instead they use \defglsentryfmt to set a custom format +that uses the long and short keys (or their plural equivalents). This means that these styles cope +better with plurals that aren’t formed by simply appending the singular form with the letter “s”. In +fact, most of the predefined styles use \glsgenacfmt and modify the definitions of commands like \GlsAddXdyAttribute must be used before \makeglossaries. Additionally, \GlsAddXdyCounters must come -before \GlsAddXdyAttribute.

    -

    -

    If the location numbers include formatting commands, then you need to add a location style in the -appropriate format using -


    \GlsAddXdyLocation[prefix-location]{name}{definition\genacrfullformat. +

    Note that when you use \setacronymstyle the name key is set to +


    \acronymentry{label}

    -

    -where ⟨name⟩ is the name of the format and ⟨definition⟩ is the xindy definition. The optional argument -⟨prefix-location⟩ is needed if \theHcounter⟩ either isn’t defined or is different from \thecounter⟩. Be sure to also -read §5.2 Locations for some issues that you may encounter. -

    Note that \GlsAddXdyLocation has no effect if \noist is used or if \makeglossaries is omitted. -\GlsAddXdyLocation must be used before \makeglossaries.
    -

    - -

    Example 18 (Custom Numbering System for Locations) -

    Suppose I decide to use a somewhat eccentric numbering system for sections where I redefine \thesection -as follows: - - -

    -
    -\renewcommand*{\thesection}{[\thechapter]\arabic{section}} -
    -

    If I haven’t done counter=section in the package option, I need to specify that the counter will be used as a -location number: - - -

    -
    -\GlsAddXdyCounters{section} -
    -

    Next I need to add the location style (\thechapter is assumed to be the standard \arabic{chapter}): - - -

    -
    -\GlsAddXdyLocation{section}{:sep "[" "arabic-numbers" :sep "]" - 
      "arabic-numbers" - 
    } -
    -

    Note that if I have further decided to use the hyperref package and want to redefine \theHsection -as: - - -

    -
    -\renewcommand*{\theHsection}{\thepart.\thesection} - 
    \renewcommand*{\thepart}{\Roman{part}} -
    -

    then I need to modify the \GlsAddXdyLocation code above to: - - +

    +and the sort key is set to +


    \acronymsort{short}{long}

    +

    +These commands are redefined by the acronym styles. However, you can redefine them again after the style has +been set but before you use \newacronym. Protected expansion is performed on \acronymsort when the entry is +defined. +

    -
    -\GlsAddXdyLocation["roman-numbers-uppercase"]{section}{:sep "[" - 
      "arabic-numbers" :sep "]" "arabic-numbers" - 
    } -
    -

    Since \Roman will result in an empty string if the counter is zero, it’s a good idea to add an extra location to -catch this: +

    Top

    6.2.1 Predefined Acronym Styles

    +

    The glossaries package provides a number of predefined styles. These styles apply +


    \firstacronymfont{text}

    +

    +to the short form on first use and +


    \acronymfont{text}

    +

    +on subsequent use. The styles modify the definition of \acronymfont as required, but \firstacronymfont is +only set once by the package when it’s loaded. By default \firstacronymfont{text} is the same as -

    -
    -\GlsAddXdyLocation{zero.section}{:sep "[" - 
      "arabic-numbers" :sep "]" "arabic-numbers" - 
    } -
    -

    This example is illustrated in the sample file samplexdy2.tex.

    -
    -

    -

    ____________________________

    +\acronymfont{text}. If you want the short form displayed differently on first use, you can redefine +\firstacronymfont independently of the acronym style. +

    The predefined styles that contain sc in their name (for example long-sc-short) redefine \acronymfont to use +\textsc, which means that the short form needs to be specified in lower case. +

    +

    Some fonts don’t support bold small caps, so you may need to redefine \glsnamefont (see -

    Example 19 (Locations as Dice) -

    Suppose I want a rather eccentric page numbering system that’s represented by the number of -dots on dice. The stix package provides \dicei, …, \dicevi that represent the six sides of a die. I -can define a command that takes a number as its argument. If the number is less than seven, the -appropriate \dicen⟩ command is used otherwise it does \dicevi the required number of times with the -leftover in a final \dicen⟩. For example, the number 16 is represented by \dicevi\dicevi\diceiv -(6 + 6 + 4 = 16). I’ve called this command \tallynum to match the example given earlier in §5.2 -Locations: - - -

    -
    -\newrobustcmd{\tallynum}[1]{% - 
     \ifnum\number#1<7 - 
      $\csname dice\romannumeral#1\endcsname$% - 
     \else - 
      $\dicevi$% - 
      \expandafter\tallynum\expandafter{\numexpr#1-6}% - 
     \fi - 
    } +href="#sec:printglossary">§??sec:printglossary Displaying a Glossary) to switch to medium weight if you are using a glossary +style that displays entry names in bold and you have chosen an acronym style that uses \textsc.
    -

    Here’s the counter command: - - -

    -
    -newcommand{\tally}[1]{\tallynum{\arabic{#1}}} +

    +

    The predefined styles that contain sm in their name (for example long-sm-short) redefine \acronymfont to +use \textsmaller. +

    +

    Note that the glossaries package doesn’t define or load any package that defines \textsmaller. If you use +one of the acronym styles that set \acronymfont to \textsmaller you must explicitly load the relsize package +or otherwise define \textsmaller.
    +

    +

    The remaining predefined styles redefine \acronymfont{text} to simply do its argument ⟨text⟩. +

    In most cases, the predefined styles adjust \acrfull and \glsentryfull (and their plural and upper case +variants) to reflect the style. The only exceptions to this are the dua and footnote styles (and their variants).
    -

    The page counter representation (\thepage) needs to be changed to use this command: +

    +

    The following styles are supplied by the glossaries package:

    +
      +
    • +

      long-short, long-sc-short, long-sm-short, long-sp-short: +

      With these three styles, acronyms are displayed in the form +


      long(\firstacronymfont{short})

      +

      + on first use and +


      \acronymfont{short}

      +

      + on subsequent use. They also set \acronymsort{short}{long} to just ⟨short⟩. This means that the + acronyms are sorted according to their short form. In addition, \acronymentry{label} is set to + just the short form (enclosed in \acronymfont) and the description key is set to the long + form. +

      The long-sp-short style was introduced in version 4.16 and uses +


      \glsacspace{label}

      +

      + for the space between the long and short forms. This defaults to a non-breakable space (~) if -

      -
      -\renewcommand*{\thepage}{\tally{page}} -
      -

      The \tally command expands to \tallynum {number} so this needs a location class that matches this -format: + (\acronymfont{short}) is less than 3em, otherwise it uses a normal space. This may be redefined as + required. For example, to always use a non-breakable space:

      -
      -\GlsAddXdyLocation{tally}{% - 
       :sep "\string\tallynum\space\glsopenbrace" - 
       "arabic-numbers" - 
       :sep "\glsclosebrace" - 
      } -
      -

      The space between \tallynum and + \renewcommand*{\glsacspace}[1]{~} + +

      +

    • +
    • +

      short-long, sc-short-long, sm-short-long: +

      These three styles are analogous to the above three styles, except the display order is swapped + to +


      \firstacronymfont{number} is significant to xindy so \space is required. -

      Note that \GlsAddXdyLocation{name}{definition} will define commands in the form: -


      \glsXcounterXnameshort} (long)

      +

      + on first use. +

      Note, however, that \acronymsort and \acronymentry are the same as for the ⟨long⟩ (⟨short⟩) styles above, + so the acronyms are still sorted according to the short form. +

    • +
    • +

      long-short-desc, long-sc-short-desc, long-sm-short-desc, long-sp-short-desc: +

      These are like the long-short, long-sc-short, long-sm-short and long-sp-short styles described above, except + that the description key must be supplied in the optional argument of \newacronym. They also redefine + \acronymentry to {Hprefix}{location}


    -

    -for each counter that has been identified either by the counter package option, the ⟨counter⟩ option for -\newglossary or in the argument of \GlsAddXdyCounters. The first argument ⟨Hprefix⟩ is only relevant when -used with the hyperref package and indicates that \theHcounter⟩ is given by \Hprefix.\thecounter⟩. -

    The sample file samplexdy.tex, which comes with the glossaries package, uses the default page counter for -locations, and it uses the default \glsnumberformat and a custom \hyperbfit format. A new xindy location -called tallynum, as illustrated above, is defined to make the page numbers appear as dice. In order for the -location numbers to hyperlink to the relevant pages, I need to redefine the necessary \glsXcounterXformat⟩ -commands: - - -

    -
    -\renewcommand{\glsXpageXglsnumberformat}[2]{% - 
     \linkpagenumber#2% - 
    } - 
    \renewcommand{\glsXpageXhyperbfit}[2]{% - 
     \textbf{\em\linkpagenumber#2}% - 
    } - 
    \newcommand{\linkpagenumber}[2]{\hyperlink{page.#2}{#1{#2}}} -
    -

    Note that the second argument of \glsXpageXglsnumberformat is in the format \tallynum{n} so the -line +class="cmti-10">long⟩} (\acronymfont{short}) and redefine \acronymsort{short}{long} to just ⟨long⟩. + This means that the acronyms are sorted according to the long form, and in the list of acronyms + the name field has the long form followed by the short form in parentheses. I recommend + you use a glossary style such as altlist with these acronym styles to allow for the long name + field. +

    +
  • +

    short-long-desc, sc-short-long-desc, sm-short-long-desc: +

    These styles are analogous to the above three styles, but the first use display style is: +


    \firstacronymfont{short} (long)

    +

    + The definitions of \acronymsort and \acronymentry are the same as those for long-short-desc + etc. +

  • +
  • +

    dua, dua-desc: +

    With these styles, the \gls-like commands always display the long form regardless of whether + the entry has been used or not. However, \acrfull and \glsentryfull will display ⟨long⟩ + (\acronymfont{short}). In the case of dua, the name and sort keys are set to the short + form and the description is set to the long form. In the case of dua-desc, the name and sort + keys are set to the long form and the description is supplied in the optional argument of + \newacronym. +

  • +
  • +

    footnote, footnote-sc, footnote-sm: +

    With these three styles, on first use the \gls-like commands display: +


    \firstacronymfont{short}\footnote{long}

    +

    + However, \acrfull and \glsentryfull are set to \acronymfont{short} (⟨long⟩). On subsequent use the + display is: +


    \acronymfont{short}

    +

    + The sort and name keys are set to the short form, and the description is set to the long + form. +

    In order to avoid nested hyperlinks on first use the footnote styles automatically implement + hyperfirst=false for the acronym lists.
    +

    +

  • +
  • +

    footnote-desc, footnote-sc-desc, footnote-sm-desc: +

    These three styles are similar to the previous three styles, but the description has to be supplied in the + optional argument of \newacronym. The name key is set to the long form followed by the short form in + parentheses and the sort key is set to the long form. This means that the acronyms will be sorted + according to the long form. In addition, since the name will typically be quite wide it’s best to choose a + glossary style that can accommodate this, such as altlist.

    -
    - \linkpagenumber#2% -
    -

    does

    -
    - \linkpagenumber\tallynum{number} -
    -
    so \tallynum is the first argument of \linkpagenumber and ⟨number⟩ is the second argument. -
    -

    -

    ____________________________

    -

    This method is very sensitive to the internal definition of the location command.
    -

    +

  • -

    Example 20 (Locations as Words not Digits) -

    Suppose I want the page numbers written as words rather than digits and I use the fmtcount package to do -this. I can redefine \thepage as follows: + id="ex:acrstyle"> +

    Example 15 (Adapting a Predefined Acronym Style) +

    Suppose I want to use the footnote-sc-desc style, but I want the name key set to the short form followed by +the long form in parentheses and the sort key set to the short form. Then I need to specify the footnote-sc-desc +style:

    -
    -\renewcommand*{\thepage}{\Numberstring{page}} -
    -

    This used to get expanded to \protect \Numberstringnum {n} where ⟨n⟩ is the Arabic page number. This -means that I needed to define a new location with the form: +

    +\setacronymstyle{footnote-sc-desc}
    +
    +

    and then redefine \acronymsort and \acronymentry:

    -
    -\GlsAddXdyLocation{Numberstring}{:sep "\string\protect\space - 
      \string\Numberstringnum\space\glsopenbrace" - 
      "arabic-numbers" :sep "\glsclosebrace"} -
    -

    and if I’d used the \linkpagenumber command from the previous example, it would need three arguments (the -first being \protect): +

    +\renewcommand*{\acronymsort}[2]{#1}% sort by short form
    +\renewcommand*{\acronymentry}[1]{%
    +  \acronymfont{\glsentryshort{#1}}\space (\glsentrylong{#1})}%
    +
    +

    (I’ve used \space for extra clarity, but you can just use an actual space instead.) +

    Note that the default Computer Modern fonts don’t support bold small caps, so another font is required. For +example:

    -
    -\newcommand{\linkpagenumber}[3]{\hyperlink{page.#3}{#1#2{#3}}} -
    -

    -

    The internal definition of \Numberstring has since changed so that it now expands to \Numberstringnum  -{n} (no \protect). This means that the location class definition must be changed to: +

    +\usepackage[T1]{fontenc}
    +
    +

    The alternative is to redefine \acronymfont so that it always switches to medium weight to ensure the small +caps setting is used. For example:

    -
    -\GlsAddXdyLocation{Numberstring}{% no \protect now! - 
      :sep "\string\Numberstringnum\space\glsopenbrace" - 
      "arabic-numbers" :sep "\glsclosebrace"} -
    -

    and \linkpagenumber goes back to only two arguments: +

    +\renewcommand*{\acronymfont}[1]{\textmd{\scshape #1}}
    +
    +

    +

    The sample file sampleFnAcrDesc.tex illustrates this example.

    +
    +

    +

    ____________________________

    +

    +

    +

    Top

    6.2.2 Defining A Custom Acronym Style

    +

    You may find that the predefined acronyms styles that come with the glossaries package don’t suit your +requirements. In this case you can define your own style using: +


    \newacronymstyle{style name}{display}{definitions}

    +

    +where ⟨style name⟩ is the name of the new style (avoid active characters). The second argument, ⟨display⟩, is +equivalent to the mandatory argument of \defglsentryfmt. You can simply use \glsgenacfmt or you can +customize the display using commands like \ifglsused, \glsifplural and \glscapscase. (See +§??sec:glsdisplay Changing the format of the link text for further details.) If the style is likely to be used with a +mixed glossary (that is entries in that glossary are defined both with \newacronym and \newglossaryentry) +then you can test if the entry is an acronym and use \glsgenacfmt if it is or \glsgenentryfmt if it isn’t. For +example, the long-short style sets ⟨display⟩ as

    -
    -\newcommand{\linkpagenumber}[2]{\hyperlink{page.#2}{#1{#2}}} -
    -

    The other change is that \Numberstring uses

    -
    +
    +\ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}%
    +
    +

    (You can use \ifglshasshort instead of \ifglshaslong to test if the entry is an acronym if you +prefer.) +

    The third argument, ⟨definitions⟩, can be used to redefine the commands that affect the display style, such as \the\value{counter} -

    -
    instead of
    -
    -\expandafter\the\csname c@counter\endcsname -
    -
    so it hides \c@page from the location escaping mechanism (see §5.2 Locations). This means that the page -number may be incorrect if the indexing occurs during the output routine. -

    A more recent change to fmtcount (v3.03) now puts three instances of \expandafter before -\the\value which no longer hides \c@page from the location escaping mechanism, so the page -numbers should once more be correct. Further changes to the fmtcount package may cause a problem -again. -

    When dealing with custom formats where the internal definitions are outside of your control and liable to -change, it’s best to provide a wrapper command.
    -

    -

    Instead of directly using \Numberstring in the definition of \thepage, I can provide a custom command in -the same form as the earlier \tally command: +class="cmtt-10">\acronymfont or, if ⟨display⟩ uses \glsgenacfmt, \genacrfullformat and its variants. +

    Note that \setacronymstyle redefines \glsentryfull and \acrfullfmt to use \genacrfullformat (and +similarly for the plural and upper case variants). If this isn’t appropriate for the style (as in the +case of styles like footnote and dua) \newacronymstyle should redefine these commands within +⟨definitions⟩. +

    Within \newacronymstyle’s ⟨definitions⟩ argument you can also redefine +


    \GenericAcronymFields

    +

    +This is a list of additional fields to be set in \newacronym. You can use the following token registers to access +the entry label, long form and short form: \glslabeltok, \glslongtok and \glsshorttok. As with all +TeX registers, you can access their values by preceding the register with \the. For example, the long-short style +does:

    -
    -\newcommand{\customfmt}[1]{\customfmtnum{\arabic{#1}}} - 
    \newrobustcmd{\customfmtnum}[1]{\Numberstringnum{#1}} -
    -

    This ensures that the location will always be written to the indexing file in the form:

    -
    -:locref "{}{\\customfmtnum {n}}" -
    -
    So the location class can be defined as: - - -
    -\GlsAddXdyLocation{customfmt}{ - 
     :sep "\string\customfmtnum\space\glsopenbrace" - 
     "arabic-numbers" - 
     :sep "\glsclosebrace"} -
    -

    -

    The sample file samplexdy3.tex illustrates this.

    -
    -

    -

    ____________________________

    -

    In the number list, the locations are sorted according to the list of provided location classes. -The default ordering is: roman-page-numbers (i, ii, …), arabic-page-numbers (1, 2, …), -arabic-section-numbers (for example, 1.1 if the compositor is a full stop or 1-1 if the compositor is a -hyphen11.1), -alpha-page-numbers (a, b, …), Roman-page-numbers (I, II, …), Alpha-page-numbers (A, B, …), -Appendix-page-numbers (for example, A.1 if the Alpha compositor is a full stop or A-1 if the Alpha compositor is a -hyphen11.2), user defined -location names (as specified by \GlsAddXdyLocation in the order in which they were defined), and finally see (cross-referenced -entries).11.3 -This ordering can be changed using: -


    \GlsSetXdyLocationClassOrder{location names}

    -

    -where each location name is delimited by double quote marks and separated by white space. For -example: +

    +\renewcommand*{\GenericAcronymFields}{%
    +   description={\the\glslongtok}}%
    +
    +

    which sets the description field to the long form of the acronym whereas the long-short-desc style +does:

    -
    -\GlsSetXdyLocationClassOrder{ - 
      "arabic-page-numbers" - 
      "arabic-section-numbers" - 
      "roman-page-numbers" - 
      "Roman-page-numbers" - 
      "alpha-page-numbers" - 
      "Alpha-page-numbers" - 
      "Appendix-page-numbers" - 
      "see" - 
    } -
    -

    (Remember to add "seealso" if you’re using glossaries-extra.) -

    Note that \GlsSetXdyLocationClassOrder has no effect if \noist is used or if \makeglossaries is -omitted. \GlsSetXdyLocationClassOrder must be used before \makeglossaries.
    -

    -

    If a number list consists of a sequence of consecutive numbers, the range will be concatenated. The -number of consecutive locations that causes a range formation defaults to 2, but can be changed -using: -


    \GlsSetXdyMinRangeLength{n +\renewcommand*{\GenericAcronymFields}{}% + +

    since the description needs to be specified by the user. +

    It may be that you want to define a new acronym style that’s based on an existing style. Within ⟨display⟩ you +can use +


    \GlsUseAcrEntryDispStyle{style name}

    -

    -For example: +

    +to use the ⟨display⟩ definition from the style given by ⟨style name⟩. Within ⟨definitions⟩ you can use +


    \GlsUseAcrStyleDefs{style name}

    +

    +to use the ⟨definitions⟩ from the style given by ⟨style name⟩. For example, the long-sc-short acronym style is +based on the long-short style with minor modifications (remember to use ## instead of # within +⟨definitions⟩):

    -
    -\GlsSetXdyMinRangeLength{3} -
    -

    The argument may also be the keyword none, to indicate that there should be no range formations. See the +

    +\newacronymstyle{long-sc-short}%
    +{% use the same display as "long-short"
    +  \GlsUseAcrEntryDispStyle{long-short}%
    +}%
    +{% use the same definitions as "long-short"
    +  \GlsUseAcrStyleDefs{long-short}%
    +  % Minor modifications:
    +  \renewcommand{\acronymfont}[1]{\textsc{##1}}%
    +  \renewcommand*{\acrpluralsuffix}{\glstextup{\glspluralsuffix}}%
    +}
    +
    +

    (\glstextup is used to cancel the effect of \textsc. This defaults to \textulc, if defined, otherwise \textup. +For example, the plural of svm should be rendered as svms rather than svms.) xindy manual for further details on range formations. -

    Note that \GlsSetXdyMinRangeLength has no effect if \noist is used or if \makeglossaries is omitted. + id="ex:customacrstyle"> +

    Example 16 (Defining a Custom Acronym Style) +

    Suppose I want my acronym on first use to have the short form in the text and the long form with the +description in a footnote. Suppose also that I want the short form to be put in small caps in the main body of +the document, but I want it in normal capitals in the list of acronyms. In my list of acronyms, I want the long +form as the name with the short form in brackets followed by the description. That is, in the text I want \gls +on first use to display: +
    \textsc{abbrv}\footnote{long⟩: ⟨description} +
    +on subsequent use: +
    \textsc{abbrv} +
    +and in the list of acronyms, each entry will be displayed in the form: +
    long⟩ (⟨short⟩) ⟨description⟩ +
    +

    Let’s suppose it’s possible that I may have a mixed glossary. I can check this in the second argument of \GlsSetXdyMinRangeLength must be used before \makeglossaries.

    -

    -See also §5.3 Range Formations. -

    +class="cmtt-10">\newacronymstyle using: + +

    -

    Top

    11.3 Glossary Groups

    -

    The glossary is divided into groups according to the first letter of the sort key. The glossaries package also adds a -number group by default, unless you suppress it in the xindy package option. For example: +

    +\ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}%
    +
    +

    This will use \glsgenentryfmt if the entry isn’t an acronym, otherwise it will use \glsgenacfmt. The third +argument (⟨definitions⟩) of \newacronymstyle needs to redefine \genacrfullformat etc so that the first +use displays the short form in the text with the long form in a footnote followed by the description. This is done +as follows (remember to use ## instead of #):

    -
    -\usepackage[xindy={glsnumbers=false}]{glossaries} -
    -

    Any entry that doesn’t go in one of the letter groups or the number group is placed in the default group. If you -want xindy to sort the number group numerically (rather than by a string sort) then you need to use xindy’s -numeric-sort module: +

    + % No case change, singular first use:
    +  \renewcommand*{\genacrfullformat}[2]{%
    +   \firstacronymfont{\glsentryshort{##1}}##2%
    +   \footnote{\glsentrylong{##1}: \glsentrydesc{##1}}%
    +  }%
    + % First letter upper case, singular first use:
    +  \renewcommand*{\Genacrfullformat}[2]{%
    +   \firstacronymfont{\Glsentryshort{##1}}##2%
    +   \footnote{\glsentrylong{##1}: \glsentrydesc{##1}}%
    +  }%
    + % No case change, plural first use:
    +  \renewcommand*{\genplacrfullformat}[2]{%
    +   \firstacronymfont{\glsentryshortpl{##1}}##2%
    +   \footnote{\glsentrylongpl{##1}: \glsentrydesc{##1}}%
    +  }%
    + % First letter upper case, plural first use:
    +  \renewcommand*{\Genplacrfullformat}[2]{%
    +   \firstacronymfont{\Glsentryshortpl{##1}}##2%
    +   \footnote{\glsentrylongpl{##1}: \glsentrydesc{##1}}%
    +  }%
    +
    +

    If you think it inappropriate for the short form to be capitalised at the start of a sentence you can change the +above to:

    -
    -\GlsAddXdyStyle{numeric-sort} -
    -

    -

    If you don’t use glsnumbers=false, the default behaviour is to locate the number group before the “A” -letter group. If you are not using a Roman alphabet, you need to change this using: -


    \GlsSetXdyFirstLetterAfterDigits{letter}

    -

    -where ⟨letter⟩ is the first letter of your alphabet. Take care if you’re using inputenc as non-ASCII characters are -actually active characters that expand. (This isn’t a problem with the native UTF-8 engines and -fontspec.) The starred form will sanitize the argument to prevent expansion. Alternatively you can -use: -


    \GlsSetXdyNumberGroupOrder{relative location}

    -

    -to change the default

    -
    -:before \string"letter\string" -
    -
    to ⟨relative location⟩. For example: +
    + % No case change, singular first use:
    +  \renewcommand*{\genacrfullformat}[2]{%
    +   \firstacronymfont{\glsentryshort{##1}}##2%
    +   \footnote{\glsentrylong{##1}: \glsentrydesc{##1}}%
    +  }%
    + % No case change, plural first use:
    +  \renewcommand*{\genplacrfullformat}[2]{%
    +   \firstacronymfont{\glsentryshortpl{##1}}##2%
    +   \footnote{\glsentrylongpl{##1}: \glsentrydesc{##1}}%
    +  }%
    + \let\Genacrfullformat\genacrfullformat
    + \let\Genplacrfullformat\genplacrfullformat
    +
    +

    Another variation is to use \Glsentrylong and \Glsentrylongpl in the footnote instead of \glsentrylong +and \glsentrylongpl. +

    Now let’s suppose that commands such as \glsentryfull and \acrfull shouldn’t use a footnote, but +instead use the format: ⟨long⟩ (⟨short⟩). This means that the style needs to redefine \glsentryfull, \acrfullfmt +and their plural and upper case variants. +

    First, the non-linking commands: -

    -\GlsSetXdyNumberGroupOrder{:after \string"Z\string"} -
    -

    will put the number group after the “Z” letter group. Again take care of active characters. There’s a starred -version that sanitizes the argument (so don’t use \string in it).

    -
    -\GlsSetXdyNumberGroupOrder*{:after "Ö"} -
    -
    -

    Note that these commands have no effect if \noist is used or if \makeglossaries is omitted. -\GlsSetXdyFirstLetterAfterDigits must be used before \makeglossaries. -
    -

    +

    +
    +  \renewcommand*{\glsentryfull}[1]{%
    +    \glsentrylong{##1}\space
    +      (\acronymfont{\glsentryshort{##1}})%
    +  }%
    +  \renewcommand*{\Glsentryfull}[1]{%
    +    \Glsentrylong{##1}\space
    +      (\acronymfont{\glsentryshort{##1}})%
    +  }%
    +  \renewcommand*{\glsentryfullpl}[1]{%
    +    \glsentrylongpl{##1}\space
    +      (\acronymfont{\glsentryshortpl{##1}})%
    +  }%
    +  \renewcommand*{\Glsentryfullpl}[1]{%
    +    \Glsentrylongpl{##1}\space
    +      (\acronymfont{\glsentryshortpl{##1}})%
    +  }%
    +
    +

    Now for the linking commands: + + +

    +
    +  \renewcommand*{\acrfullfmt}[3]{%
    +    \glslink[##1]{##2}{%
    +     \glsentrylong{##2}##3\space
    +      (\acronymfont{\glsentryshort{##2}})%
    +    }%
    +  }%
    +  \renewcommand*{\Acrfullfmt}[3]{%
    +    \glslink[##1]{##2}{%
    +     \Glsentrylong{##2}##3\space
    +      (\acronymfont{\glsentryshort{##2}})%
    +    }%
    +  }%
    +  \renewcommand*{\ACRfullfmt}[3]{%
    +    \glslink[##1]{##2}{%
    +     \MakeTextUppercase{%
    +       \glsentrylong{##2}##3\space
    +         (\acronymfont{\glsentryshort{##2}})%
    +     }%
    +    }%
    +  }%
    +  \renewcommand*{\acrfullplfmt}[3]{%
    +    \glslink[##1]{##2}{%
    +     \glsentrylongpl{##2}##3\space
    +       (\acronymfont{\glsentryshortpl{##2}})%
    +    }%
    +  }%
    +  \renewcommand*{\Acrfullplfmt}[3]{%
    +    \glslink[##1]{##2}{%
    +     \Glsentrylongpl{##2}##3\space
    +       (\acronymfont{\glsentryshortpl{##2}})%
    +    }%
    +  }%
    +  \renewcommand*{\ACRfullplfmt}[3]{%
    +    \glslink[##1]{##2}{%
    +     \MakeTextUppercase{%
    +       \glsentrylongpl{##2}##3\space
    +         (\acronymfont{\glsentryshortpl{##2}})%
    +     }%
    +    }%
    +  }%
    +
    +

    (This may cause problems with long hyperlinks, in which case adjust the definitions so that, for example, only +the short form is inside the argument of \glslink.) +

    The style also needs to redefine \acronymsort so that the acronyms are sorted according to the long +form:

    -

    -

    Top

    12. Defining New Glossaries

    -

    A new glossary can be defined using: -


    \newglossary[log-ext]{name}{in-ext}{out-ext} -{title}[counter]

    -

    -where ⟨name⟩ is the label to assign to this glossary. The arguments ⟨in-ext⟩ and ⟨out-ext⟩ specify the extensions to -give to the input and output files for that glossary, ⟨title⟩ is the default title for this new glossary and the final -optional argument ⟨counter⟩ specifies which counter to use for the associated number lists (see also §5 Number -lists). The first optional argument specifies the extension for the makeindex (Option 2) or xindy -(Option 3) transcript file (this information is only used by makeglossaries which picks up the -information from the auxiliary file). If you use Option 1, the ⟨log-ext⟩, ⟨in-ext⟩ and ⟨out-ext⟩ arguments are -ignored. -

    The glossary label ⟨name⟩ must not contain any active characters. It’s generally best to stick with just -characters that have category code 11 (typically the non-extended Latin characters for standard LaTeX). -
    -

    -

    There is also a starred version (new to v4.08): -


    \newglossary*{name}{title}[counter]

    -

    -which is equivalent to

    -
    -\newglossary[name-glg]{name}{name-gls}{name-glo}{title}[counter] -
    -
    or you can also use: -


    \altnewglossary{name}{tag}{title}[counter]

    -

    -which is equivalent to

    -
    -\newglossary[tag-glg]{name}{tag-gls}{tag-glo}{title}[counter] -
    -
    -

    It may be that you have some terms that are so common that they don’t need to be listed. In this case, you -can define a special type of glossary that doesn’t create any associated files. This is referred to as an “ignored -glossary” and it’s ignored by commands that iterate over all the glossaries, such as \printglossaries. To -define an ignored glossary, use -


    \newignoredglossary{name}

    -

    -where ⟨name⟩ is the name of the glossary (as above). This glossary type will automatically be added to the -nohypertypes list, since there are no hypertargets for the entries in an ignored glossary. (The sample file -sample-entryfmt.tex defines an ignored glossary.) +

    +  \renewcommand*{\acronymsort}[2]{##2}%
    +
    +

    If you prefer them to be sorted according to the short form you can change the above to: -

    The glossaries-extra package provides a starred version of this command that allows hyperlinks (since -ignored glossaries can be useful with bib2gls). There is also an analogous \provideignoredglossary -command.
    -

    -

    You can test if a glossary is an ignored one using: -


    \ifignoredglossary{name}{true}{false}

    -

    -This does ⟨true⟩ if ⟨name⟩ was defined as an ignored glossary, otherwise it does ⟨false⟩. -

    Note that the main (default) glossary is automatically created as: +

    +
    +  \renewcommand*{\acronymsort}[2]{##1}%
    +
    +

    The acronym font needs to be set to \textsc and the plural suffix adjusted so that the “s” suffix in the plural +short form doesn’t get converted to small caps:

    -
    -\newglossary{main}{gls}{glo}{\glossaryname} -
    -

    so it can be identified by the label main (unless the nomain package option is used). Using the acronym package -option is equivalent to: +

    +  \renewcommand*{\acronymfont}[1]{\textsc{##1}}%
    +  \renewcommand*{\acrpluralsuffix}{\glstextup{\glspluralsuffix}}%
    +
    +

    There are a number of ways of dealing with the format in the list of acronyms. The simplest way is to redefine +\acronymentry to the long form followed by the upper case short form in parentheses:

    -
    -\newglossary[alg]{acronym}{acr}{acn}{\acronymname} -
    -

    so it can be identified by the label acronym. If you are not sure whether the acronym option has been used, you -can identify the list of acronyms by the command \acronymtype which is set to acronym, if the acronym -option has been used, otherwise it is set to main. Note that if you are using the main glossary -as your list of acronyms, you need to declare it as a list of acronyms using the package option +

    + \renewcommand*{\acronymentry}[1]{%
    +   \Glsentrylong{##1}\space
    +     (\MakeTextUppercase{\glsentryshort{##1}})}%
    +
    +

    (I’ve used \Glsentrylong instead of \glsentrylong to capitalise the name in the glossary.) +

    An alternative approach is to set \acronymentry to just the long form and redefine \GenericAcronymFields to +set the symbol key to the short form and use a glossary style that displays the symbol in parentheses after the acronymlists. -

    The symbols package option creates a new glossary with the label symbols using: +class="cmtt-10">name (such as the tree style) like this:

    -
    -\newglossary[slg]{symbols}{sls}{slo}{\glssymbolsgroupname} -
    -

    The numbers package option creates a new glossary with the label numbers using: +

    + \renewcommand*{\acronymentry}[1]{\Glsentrylong{##1}}%
    + \renewcommand*{\GenericAcronymFields}{%
    +    symbol={\protect\MakeTextUppercase{\the\glsshorttok}}}%
    +
    +

    I’m going to use the first approach and set \GenericAcronymFields to do nothing:

    -
    -\newglossary[nlg]{numbers}{nls}{nlo}{\glsnumbersgroupname} -
    -

    The index package option creates a new glossary with the label index using: +

    + \renewcommand*{\GenericAcronymFields}{}%
    +
    +

    +

    Finally, this style needs to switch off hyperlinks on first use to avoid nested links:

    -
    -\newglossary[ilg]{index}{ind}{idx}{\indexname} -
    -

    -

    Options 2 and 3: all glossaries must be defined before \makeglossaries to ensure that the relevant output -files are opened. -

    See §1.3.1 Changing the Fixed Names if you want to redefine \glossaryname, especially if you are using -babel or translator. (Similarly for \glssymbolsgroupname and \glsnumbersgroupname.) If you -want to redefine \indexname, just follow the advice in How to change LaTeX’s “fixed names”. -

    -

    +

    + \glshyperfirstfalse
    +
    +

    Putting this all together:

    -

    -

    Top

    13. Acronyms and Other Abbreviations

    -

    The glossaries-extra package provides superior abbreviation handling. You may want to consider using that -package instead of the commands described here.
    -

    -

    Note that although this chapter uses the term “acronym”, you can also use the commands described here -for initialisms or contractions (as in the case of some of the examples given below). If the glossary title is no -longer applicable (for example, it should be “Abbreviations” rather than “Acronyms”) then you can change the -title either by redefining \acronymname (see §1.3 Multi-Lingual Support) or by using the title in the optional -argument of \printglossary (or \printacronyms). Alternatively consider using the glossaries-extra package’s -abbreviations option instead.
    -

    -

    You may have noticed in §4 Defining Glossary Entries that when you specify a new entry, you can specify -alternate text to use when the term is first used in the document. This provides a useful means to define -abbreviations. For convenience, the glossaries package defines the command: -


    \newacronym[key-val list]{label}{abbrv}{long}

    -

    -

    This uses \newglossaryentry to create an entry with the given label in the glossary given by -\acronymtype. You can specify a different glossary using the type key within the optional argument. The -\newacronym command also uses the long, longplural, short and shortplural keys in \newglossaryentry -to store the long and abbreviated forms and their plurals. -

    Note that the same restrictions on the entry ⟨label⟩ in \newglossaryentry also apply to \newacronym (see §4 -Defining Glossary Entries). -

    If you haven’t identified the specified glossary type as a list of acronyms (via the package option acronymlists -or the command \DeclareAcronymList, see §2.7 Acronym and Abbreviation Options) \newacronym will add it -to the list and reset the display style for that glossary via \defglsentryfmt. If you have a mixture of acronyms -and regular entries within the same glossary, care is needed if you want to change the display style: you must -first identify that glossary as a list of acronyms and then use \defglsentryfmt (not redefine \glsentryfmt) -before defining your entries.
    -

    -

    The optional argument {key-val list} allows you to specify additional information. Any key that can be used -in the second argument of \newglossaryentry can also be used here in ⟨key-val list⟩. For example, description -(when used with one of the styles that require a description, described in §13.1 Changing the Abbreviation Style) -or you can override plural forms of ⟨abbrv⟩ or ⟨long⟩ using the shortplural or longplural keys. For -example: +

    +\newacronymstyle{custom-fn}% new style name
    +{%
    +  \ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}%
    +}%
    +{%
    + \renewcommand*{\GenericAcronymFields}{}%
    + \glshyperfirstfalse
    +  \renewcommand*{\genacrfullformat}[2]{%
    +   \firstacronymfont{\glsentryshort{##1}}##2%
    +   \footnote{\glsentrylong{##1}: \glsentrydesc{##1}}%
    +  }%
    +  \renewcommand*{\Genacrfullformat}[2]{%
    +   \firstacronymfont{\Glsentryshort{##1}}##2%
    +   \footnote{\glsentrylong{##1}: \glsentrydesc{##1}}%
    +  }%
    +  \renewcommand*{\genplacrfullformat}[2]{%
    +   \firstacronymfont{\glsentryshortpl{##1}}##2%
    +   \footnote{\glsentrylongpl{##1}: \glsentrydesc{##1}}%
    +  }%
    +  \renewcommand*{\Genplacrfullformat}[2]{%
    +   \firstacronymfont{\Glsentryshortpl{##1}}##2%
    +   \footnote{\glsentrylongpl{##1}: \glsentrydesc{##1}}%
    +  }%
    +  \renewcommand*{\glsentryfull}[1]{%
    +    \glsentrylong{##1}\space
    +      (\acronymfont{\glsentryshort{##1}})%
    +  }%
    +  \renewcommand*{\Glsentryfull}[1]{%
    +    \Glsentrylong{##1}\space
    +      (\acronymfont{\glsentryshort{##1}})%
    +  }%
    +  \renewcommand*{\glsentryfullpl}[1]{%
    +    \glsentrylongpl{##1}\space
    +      (\acronymfont{\glsentryshortpl{##1}})%
    +  }%
    +  \renewcommand*{\Glsentryfullpl}[1]{%
    +    \Glsentrylongpl{##1}\space
    +      (\acronymfont{\glsentryshortpl{##1}})%
    +  }%
    +  \renewcommand*{\acrfullfmt}[3]{%
    +    \glslink[##1]{##2}{%
    +     \glsentrylong{##2}##3\space
    +      (\acronymfont{\glsentryshort{##2}})%
    +    }%
    +  }%
    +  \renewcommand*{\Acrfullfmt}[3]{%
    +                                                                                      
    +                                                                                      
    +    \glslink[##1]{##2}{%
    +     \Glsentrylong{##2}##3\space
    +      (\acronymfont{\glsentryshort{##2}})%
    +    }%
    +  }%
    +  \renewcommand*{\ACRfullfmt}[3]{%
    +    \glslink[##1]{##2}{%
    +     \MakeTextUppercase{%
    +       \glsentrylong{##2}##3\space
    +         (\acronymfont{\glsentryshort{##2}})%
    +     }%
    +    }%
    +  }%
    +  \renewcommand*{\acrfullplfmt}[3]{%
    +    \glslink[##1]{##2}{%
    +     \glsentrylongpl{##2}##3\space
    +       (\acronymfont{\glsentryshortpl{##2}})%
    +    }%
    +  }%
    +  \renewcommand*{\Acrfullplfmt}[3]{%
    +    \glslink[##1]{##2}{%
    +     \Glsentrylongpl{##2}##3\space
    +       (\acronymfont{\glsentryshortpl{##2}})%
    +    }%
    +  }%
    +  \renewcommand*{\ACRfullplfmt}[3]{%
    +    \glslink[##1]{##2}{%
    +     \MakeTextUppercase{%
    +       \glsentrylongpl{##2}##3\space
    +         (\acronymfont{\glsentryshortpl{##2}})%
    +     }%
    +    }%
    +  }%
    +  \renewcommand*{\acronymfont}[1]{\textsc{##1}}%
    +  \renewcommand*{\acrpluralsuffix}{\glstextup{\glspluralsuffix}}%
    +  \renewcommand*{\acronymsort}[2]{##2}%
    +  \renewcommand*{\acronymentry}[1]{%
    +   \Glsentrylong{##1}\space
    +     (\MakeTextUppercase{\glsentryshort{##1}})}%
    +}
    +
    +

    +

    Now I need to specify that I want to use this new style:

    -
    -\newacronym[longplural={diagonal matrices}]% - 
      {dm}{DM}{diagonal matrix} -
    -

    If the first use uses the plural form, \glspl{dm} will display: diagonal matrices (DMs). If you want to use the -longplural or shortplural keys, I recommend you use \setacronymstyle to set the display style rather than -using one of the pre-version 4.02 acronym styles. -

    As with plural and firstplural, if longplural is missing, it’s obtained by appended \glspluralsuffix -to the singular form. The short plural shortplural is obtained (is not explicitly set) by appending -\glsacrpluralsuffix to the short form. These commands may be changed by the associated -language files, but they can’t be added to the usual caption hooks as there’s no guarantee when -they’ll be expanded (as discussed earlier). A different approach is used by glossaries-extra, which has -category attributes to determine whether or not to append a suffix when forming the default value of -shortplural. -

    Since \newacronym uses \newglossaryentry, you can use commands like \gls and \glsreset as with any -other glossary entry. -

    Since \newacronym sets type=\acronymtype, if you want to load a file containing acronym definitions using -\loadglsentries[type]{filename}, the optional argument ⟨type⟩ will not have an effect unless you explicitly set -the type as type=\glsdefaulttype in the optional argument to \newacronym. See §4.6 Loading Entries From a -File.
    -

    - -

    Example 21 (Defining an Abbreviation) -

    The following defines the abbreviation IDN: +

    +\setacronymstyle{custom-fn}
    +
    +

    I also need to use a glossary style that suits this acronym style, for example altlist:

    -
    -\newacronym{idn}{IDN}{identification number} -
    -

    \gls{idn} will produce “identification number (IDN)” on first use and “IDN” on subsequent uses. If you want -to use one of the small caps acronym styles, described in §13.1 Changing the Abbreviation Style, you need to use -lower case characters for the shortened form: +

    +\setglossarystyle{altlist}
    +
    +

    +

    Once the acronym style has been set, I can define my acronyms:

    -
    -\newacronym{idn}{idn}{identification number} -
    -

    Now \gls{idn} will produce “identification number (idn)” on first use and “idn” on subsequent uses. -

    +
    +\newacronym[description={set of tags for use in
    +developing hypertext documents}]{html}{html}{Hyper
    +Text Markup Language}
    +\newacronym[description={language used to describe the
    +layout of a document written in a markup language}]{css}
    +{css}{Cascading Style Sheet}
    +
    +

    +

    The sample file sample-custom-acronym.tex illustrates this example.

    -

    -

    ____________________________

    -

    Avoid nested definitions.
    -

    -

    Recall from the warning in §4 Defining Glossary Entries that you should avoid using the \gls-like and +

    +

    ____________________________

    \glstext-like commands within the value of keys like text and first due to complications arising from nested -links. The same applies to abbreviations defined using \newacronym. -

    For example, suppose you have defined: + id="ex:font-abbr"> +

    Example 17 (Italic and Upright Abbreviations) +

    Suppose I want to have some abbreviations in italic and some that just use the surrounding font. +Hard-coding this into the ⟨short⟩ argument of \newacronym can cause complications. +

    This example uses \glsaddstoragekey to add an extra field that can be used to store the formatting +declaration (such as \em).

    -
    -\newacronym{ssi}{SSI}{server side includes} - 
    \newacronym{html}{HTML}{hypertext markup language} -
    -

    you may be tempted to do: +

    +\glsaddstoragekey{font}{}{\entryfont}
    +
    +

    This defines a new field/key called font, which defaults to nothing if it’s not explicitly set. This also defines a +command called \entryfont that’s analogous to \glsentrytext. A new style is then created to format +abbreviations that access this field. +

    There are two ways to do this. The first is to create a style that doesn’t use \glsgenacfmt +but instead provides a modified version that doesn’t use \acronymfont{short} but instead uses +{\entryfont{\glslabel}short}. The full format given by commands such as \genacrfullformat need to be +similarly adjusted. For example:

    -
    -\newacronym{shtml}{S\gls{html}}{\gls{ssi} enabled \gls{html}} -
    -

    Don’t! This will break the case-changing commands, such as \Gls, it will cause inconsistencies on first use, and, -if hyperlinks are enabled, will cause nested hyperlinks. It will also confuse the commands used by the entry -formatting (such as +  \renewcommand*{\genacrfullformat}[2]{% +   \glsentrylong{##1}##2\space +   ({\entryfont{##1}\glsentryshort{##1}})% +  }% + +

    This will deal with commands like \gls but not commands like \acrshort which still use \acronymfont. +Another approach is to redefine \acronymfont to look up the required font declaration. Since \acronymfont +doesn’t take the entry label as an argument, the following will only work if \acronymfont is used in a context +where the label is provided by \glslabel). -

    Instead, consider doing: + id="dx1-139077">. This is true in \gls, \acrshort and \acrfull. The redefinition is +now:

    -
    -\newacronym - 
     [description={\gls{ssi} enabled \gls{html}}] - 
     {shtml}{SHTML}{SSI enabled HTML} -
    -

    or +

    +\renewcommand*{\acronymfont}[1]{{\entryfont{\glslabel}#1}}%
    +
    +

    So the new style can be defined as:

    -
    -\newacronym - 
     [description={\gls{ssi} enabled \gls{html}}] - 
     {shtml}{SHTML} - 
     {server side includes enabled hypertext markup language} -
    -

    Similarly for the \glstext-like commands. -

    Other approaches are available with +\newacronymstyle{long-font-short} +{% +  \GlsUseAcrEntryDispStyle{long-short}% +} +{% +  \GlsUseAcrStyleDefs{long-short}% +  \renewcommand*{\genacrfullformat}[2]{% +   \glsentrylong{##1}##2\space +   ({\entryfont{##1}\glsentryshort{##1}})% +  }% +  \renewcommand*{\Genacrfullformat}[2]{% +   \Glsentrylong{##1}##2\space +   ({\entryfont{##1}\glsentryshort{##1}})% +  }% +  \renewcommand*{\genplacrfullformat}[2]{% +   \glsentrylongpl{##1}##2\space +   ({\entryfont{##1}\glsentryshortpl{##1}})% +  }% +  \renewcommand*{\Genplacrfullformat}[2]{% +   \Glsentrylongpl{##1}##2\space +   ({\entryfont{##1}\glsentryshortpl{##1}})% +  }% +  \renewcommand*{\acronymfont}[1]{{\entryfont{\glslabel}##1}}% +  \renewcommand*{\acronymentry}[1]{{\entryfont{##1}\glsentryshort{##1}}}% +} + +

    Remember the style needs to be set before defining the entries: + + +

    +
    +\setacronymstyle{long-font-short}
    +
    +

    +

    The complete document is contained in the sample file sample-font-abbr.tex.

    +
    +

    +

    ____________________________

    +

    Some writers and publishing houses have started to drop full stops (periods) from upper case initials but +may still retain them for lower case abbreviations, while others may still use them for both upper and lower +case. This can cause complications. Chapter 12 of The TeXbook discusses the spacing between words but, +briefly, the default behaviour of TeX is to assume that an upper case character followed by a full stop and +space is an abbreviation, so the space is the default inter-word space whereas a lower case character followed by +a full stop and space is a word occurring at the end of a sentence. In the event that this isn’t true, you +need to make a manual adjustment using (back slash space) in place of just a space character +for an inter-word mid-sentence space and use \@ before the full stop to indicate the end of the +sentence. +

    For example: + + +

    +
    +I was awarded a B.Sc. and a Ph.D. (From the same place.)
    +
    +

    is typeset as +
    I was awarded a B.Sc. and a Ph.D. (From the same place.) +
    +The spacing is more noticeable with the typewriter font: + + +

    +
    +\ttfamily
    +I was awarded a B.Sc. and a Ph.D. (From the same place.)
    +
    +

    is typeset as +
    I was awarded a B.Sc. and a Ph.D. (From the same place.) +
    +The lower case letter at the end of “B.Sc.” is confusing TeX into thinking that the full stop after it marks the +end of the sentence. Whereas the upper case letter at the end of “Ph.D.” has confused TeX into thinking that +the following full stop is just part of the abbreviation. These can be corrected: + + +

    +
    +I was awarded a B.Sc.\ and a Ph.D\@. (From the same place.)
    +
    +

    +

    This situation is a bit problematic for glossaries. The full stops can form part of the ⟨short⟩ argument of +\newacronym and the B.Sc.\␣ part can be dealt with by remembering to add \␣ (for example, +\gls{bsc}\␣) but the end of sentence case is more troublesome as you need to omit the sentence +terminating full stop (to avoid two dots) which can make the source code look a little strange +but you also need to adjust the space factor, which is usually done by inserting \@ before the full +stop. +

    The next example shows one way of achieving this. (Note that the supplemental glossaries-extra. See the section “Nested Links” in the glossaries-extra -user manual. -

    The commands described below are similar to the \glstext-like commands in that they don’t modify the +class="cmss-10">glossaries-extra +package provides a much simpler way of doing this, which you may prefer to use. See Gallery: +Initialisms.) first use flag. However, their display is governed by \defentryfmt with \glscustomtext set as appropriate. All -caveats that apply to the \glstext-like commands also apply to the following commands. (Including the -warning immediately above this box.)
    -

    -

    The optional arguments are the same as those for the \glstext-like commands, and there are similar star -and plus variants that switch off or on the hyperlinks. As with the \glstext-like commands, the link text is -placed in the argument of \glstextformat. -


    \acrshort[options]{label}[insert]

    -

    -This sets the link text to the short form (within the argument of \acronymfont) for the entry given by ⟨label⟩. -The short form is as supplied by the short key, which \newacronym implicitly sets. -

    There are also analogous upper case variants: -


    \Acrshort[options]{label}[insert]

    -

    -


    \ACRshort[options]{label}[insert]

    -

    -There are also plural versions: -


    \acrshortpl[options]{label}[insert]

    -

    -


    \Acrshortpl[options]{label}[insert]

    -

    -


    \ACRshortpl[options]{label}[insert]

    -

    -The short plural form is as supplied by the shortplural key, which \newacronym implicitly sets. -


    \acrlong[options]{label}[insert]

    -

    -This sets the link text to the long form for the entry given by ⟨label⟩. The long form is as supplied by the long -key, which \newacronym implicitly sets. -

    There are also analogous upper case variants: -


    \Acrlong[options]{label}[insert]

    + id="ex:dotabbr"> +

    Example 18 (Abbreviations with Full Stops (Periods)) +

    As from version 4.16, there’s now a hook (\glspostlinkhook) that’s called at the very end of the +\gls-like and \glstext-like commands. This can be redefined to check if the following character is a full stop. +The amsgen package (which is automatically loaded by glossaries) provides an internal command called +\new@ifnextchar that can be used to determine if the given character appears next. (For more information see +the amsgen documentation.) +

    It’s possible that I may also want acronyms or contractions in my document, so I need some way to +differentiate between them. Here I’m going to use the same method as in example 4 where a new field is defined +to indicate the type of abbreviation: -

    -


    \ACRlong[options]{label}[insert]

    -

    -Again there are also plural versions: -


    \acrlongpl[options]{label}[insert]

    -

    -


    \Acrlongpl[options]{label}[insert]

    -

    -


    \ACRlongpl[options]{label}[insert]

    -

    -The long plural form is as supplied by the longplural key, which +

    +\glsaddstoragekey{abbrtype}{word}{\abbrtype}
    +\newcommand*{\newabbr}[1][]{\newacronym[abbrtype=initials,#1]}
    +
    +

    Now I just use \newacronym implicitly sets. -

    The commands below display the full form of the acronym, but note that this isn’t necessarily the same as -the form used on first use. These full-form commands are shortcuts that use the above commands, rather than -creating the link text from the complete full form. These full-form commands have star and plus variants and -optional arguments that are passed to the above commands. -


    \acrfull[options]{label}[insert]

    -

    -This is a shortcut for -


    \acrfullfmt{options}{label}{insert}

    -

    -which by default does

    -
    -\acrfullformat -
     {\acrlong[options]{label}{insert}} -
     {\acrshort[options]{label}} -
    -
    where -


    \acrfullformat{long}{short}

    -

    -by default does ⟨long⟩ (⟨short⟩). This command is now deprecated for new acronym styles but is used by -the default for backward compatibility if \setacronymstyle (§13.1 Changing the Abbreviation -Style) hasn’t been used. (For further details of these format commands see the documented code, -glossaries-code.pdf.) -

    There are also analogous upper case variants: -


    \Acrfull[options]{label}[insert]

    -

    -


    \ACRfull[options]{label}[insert]

    -

    -and plural versions: -


    \acrfullpl[options]{label}[insert]

    + id="dx1-139083"> for the acronyms, for example, -

    -


    \Acrfullpl[options]{label}[insert]

    -

    -


    \ACRfullpl[options]{label}[insert]

    -

    -

    If you find the above commands too cumbersome to write, you can use the shortcuts package option to -activate the shorter command names listed in table 13.1.

    -
    +
    +\newacronym{laser}{laser}{light amplification by stimulated
    +emission of radiation}
    +
    +

    and my new command \newabbr for initials, for example, -


    +

    +
    +\newabbr{eg}{e.g.}{exempli gratia}
    +\newabbr{ie}{i.e.}{id est}
    +\newabbr{bsc}{B.Sc.}{Bachelor of Science}
    +\newabbr{ba}{B.A.}{Bachelor of Arts}
    +\newabbr{agm}{A.G.M.}{annual general meeting}
    +
    +

    Within \glspostlinkhook the entry’s label can be accessed using \glslabel and \ifglsfieldeq can be used +to determine if the current entry has the new abbrtype field set to “initials”. If it doesn’t, then nothing needs to +happen, but if it does, a check is performed to see if the next character is a full stop. If it is, this signals the +end of a sentence otherwise it’s mid-sentence. +

    Remember that internal commands within the document file (rather than in a class or package) need to be +placed between \makeatletter and \makeatother: -

    Table 13.1: Synonyms provided by the package option shortcuts
    -
    - - - - - - - - - -
    Shortcut Command Equivalent Command
    \acs \acrshort
    \Acs \Acrshort
    \acsp +
    +\makeatletter
    +\renewcommand{\glspostlinkhook}{%
    + \ifglsfieldeq{\glslabel}{abbrtype}{initials}%
    + {\new@ifnextchar.\doendsentence\doendword}
    + {}%
    +}
    +\makeatother
    +
    +

    In the event that a full stop is found \doendsentence is performed but it will be followed by the full stop, +which needs to be discarded. Otherwise \doendword will be done but it won’t be followed by a full stop so +there’s nothing to discard. The definitions for these commands are: + + +

    +
    +\newcommand{\doendsentence}[1]{\spacefactor=10000{}}
    +\newcommand{\doendword}{\spacefactor=1000{}}
    +
    +

    Now, I can just do \gls{bsc} mid-sentence and \gls{phd}. at the end of the sentence. The terminating full +stop will be discarded in the latter case, but it won’t be discarded in, say, \gls{laser}. as that doesn’t have +the abbrtype field set to “initials”. +

    This also works on first use when the style is set to one of the ⟨long⟩ (⟨short⟩) styles but it will fail with the +⟨short⟩ (⟨long⟩) styles as in this case the terminating full stop shouldn’t be discarded. Since \glspostlinkhook is +used after the first use flag has been unset for the entry, this can’t be fixed by simply checking with +\ifglsused. One possible solution to this is to redefine \glslinkpostsetkeys to check for the first use +flag and define a macro that can then be used in \glspostlinkhook. +

    The other thing to consider is what to do with plurals. One possibility is to check for plural use +within \doendsentence (using \glsifplural) and put the full stop back if the plural has been +used. +

    The complete document is contained in the sample file sample-dot-abbr.tex.

    +
    +

    +

    ____________________________

    +

    +

    +

    Top

    6.3 Displaying the List of Acronyms

    +

    The list of acronyms is just like any other type of glossary and can be displayed on its own using: +

    +

    +Option 1:

    +

    +

    +
    +
    + \printnoidxglossary[type=\acronymtype] +
    +
    + + +
    +

    +Options 2 and 3:

    +

    +

    +
    +
    + \printglossary[type=\acronymtype] +
    +
    +

    (If you use the acronym package option you can also use

    +
    + \printacronyms[options] +
    +
    as a synonym for
    +
    + \printglossary[type=\acronymtype,options] +
    +
    See §??sec:pkgopts-acronym Acronym and Abbreviation Options.) +
    +

    Alternatively the list of acronyms can be displayed with all the other glossaries using: +

    +

    +Option 1:

    +

    \printnoidxglossaries +

    +

    +Options 2 and 3:

    +

    \printglossaries

    +

    However, care must be taken to choose a glossary style that’s appropriate to your acronym style. +Alternatively, you can define your own custom style (see §??sec:newglossarystyle Defining your own glossary style +for further details). + + +

    +

    +

    Top

    6.4 Upgrading From the glossary Package

    +

    Users of the obsolete glossary package may recall that the syntax used to define new acronyms has changed with +the replacement glossaries package. In addition, the old glossary package created the command \acr-name⟩ when +defining the acronym ⟨acr-name⟩. +

    In order to facilitate migrating from the old package to the new one, the glossaries +package6.1 +provides the command: +


    \oldacronym[label]{abbrv}{long}{key-val list}

    +

    +This uses the same syntax as the glossary package’s method of defining acronyms. It is equivalent to: + +
    \newacronym[key-val list]{label}{abbrv}{long} +
    +In addition, \oldacronym also defines the commands \label⟩, which is equivalent to \gls{label}, and \label*, +which is equivalent to \Gls{label}. If ⟨label⟩ is omitted, ⟨abbrv⟩ is used. Since commands names must consist only +of alphabetical characters, ⟨label⟩ must also only consist of alphabetical characters. Note that \label⟩ doesn’t allow +you to use the first optional argument of \gls or \Gls — you will need to explicitly use \gls or \Gls to change +the settings. +

    Recall that, in general, LaTeX ignores spaces following command names consisting of alphabetical +characters. This is also true for \label⟩ unless you additionally load the xspace package, but be aware that there +are some issues with using xspace.6.2
    +

    + +

    The glossaries package doesn’t load the xspace package since there are both advantages and disadvantages to +using \xspace in \label⟩. If you don’t use the xspace package you need to explicitly force a space +using \␣ (backslash space) however you can follow \label⟩ with additional text in square brackets +(the final optional argument to \gls). If you use the xspace package you don’t need to escape +the spaces but you can’t use the optional argument to insert text (you will have to explicitly use +\gls). +

    To illustrate this, suppose I define the acronym “abc” as follows: + + +

    +
    +\oldacronym{abc}{example acronym}{}
    +
    +

    This will create the command \abc and its starred version \abc*. Table ??tab:xspace illustrates the effect of +\abc (on subsequent use) according to whether or not the xspace package has been loaded. As can be seen +from the final row in the table, the xspace package prevents the optional argument from being +recognised. +

    +
    + + +


    + + +
    Table 6.2: The effect of using xspace with \oldacronym
    +
    - +class="cmbx-10">Without xspace + style="vertical-align:baseline;" id="TBL-8-2-"> + style="vertical-align:baseline;" id="TBL-8-3-"> + style="vertical-align:baseline;" id="TBL-8-4-"> + style="vertical-align:baseline;" id="TBL-8-5-">
    \acrshortpl
    Code \Acsp With xspace \Acrshortpl
    \acl \acrlong \abc. abc. abc.
    \Acl \Acrlong \abc xyz abc xyz abcxyz
    \aclp \acrlongpl \abc\ xyz abc xyz abc xyz
    \Aclp \Acrlongpl \abc* xyz Abc xyz Abc xyz
    \acf \abc[’s] xyz abc [’s] xyz abc’s xyz
    +
    + + +

    +
    + + +

    +

    Top

    7. Unsetting and Resetting Entry Flags

    +

    When using the \gls-like commands it is possible that you may want to use the value given by the first +key, even though you have already used the glossary entry. Conversely, you may want to use the value given by +the text key, even though you haven’t used the glossary entry. The former can be achieved by one of the +following commands: +


    \glsreset{label}

    +

    +


    \glslocalreset{label}

    +

    +while the latter can be achieved by one of the following commands: +


    \glsunset{label}

    +

    +


    \glslocalunset{label}

    +

    +You can also reset or unset all entries for a given glossary or list of glossaries using: +


    \glsresetall[glossary list]

    +

    +


    \glslocalresetall[glossary list]

    +

    +


    \glsunsetall[glossary list]

    +

    +


    \glslocalunsetall[glossary list]

    +

    +where ⟨glossary list⟩ is a comma-separated list of glossary labels. If omitted, all defined glossaries are assumed +(except for the ignored ones). For example, to reset all entries in the main glossary and the list of +acronyms: + + +

    +
    +\glsresetall[main,acronym]
    +
    +

    +

    You can determine whether an entry’s first use flag is set using: +


    \ifglsused{label}{true part}{false part}

    +

    +where ⟨label⟩ is the label of the required entry. If the entry has been used, ⟨true part⟩ will be done, otherwise ⟨false +part⟩ will be done. +

    Note that \ifglsused is unreliable with bib2gls as the entry isn’t defined on the first LaTeX run, +which means there’s no way of determining if it has been used, so glossaries-extra provides a similar +command: +


    \GlsXtrIfUnusedOrUndefined{label}{true part}{false part}

    +

    +

    Be careful when using \gls-like commands within an environment or command argument that gets +processed multiple times as it can cause unwanted side-effects when the first use displayed text is different from +subsequent use.
    +

    +

    For example, the frame environment in beamer processes its argument for each overlay. This means that the +first use flag will be unset on the first overlay and subsequent overlays will use the non-first use +form. +

    Consider the following example: + + +

    +
    +\documentclass{beamer}
    +\usepackage{glossaries}
    +\newacronym{svm}{SVM}{support vector machine}
    +\begin{document}
    +\begin{frame}
    + \frametitle{Frame 1}
    + \begin{itemize}
    +  \item<+-> \gls{svm}
    +  \item<+-> Stuff.
    + \end{itemize}
    +\end{frame}
    +\end{document}
    +
    +

    +

    On the first overlay, \gls{svm} produces “support vector machine (SVM)” and then unsets the first use flag. +When the second overlay is processed, \gls{svm} now produces “SVM”, which is unlikely to be the desired +effect. I don’t know anyway around this and I can only offer two suggestions. +

    Firstly, unset all acronyms at the start of the document and explicitly use \acrfull

    \Acf \Acrfull
    \acfp \acrfullpl
    \Acfp \Acrfullpl
    \ac \gls
    \Ac \Gls
    \acp \glspl
    \Acp \Glspl
    + id="dx1-142017"> when you want the full +version to be displayed: + + +

    +
    +\documentclass{beamer}
    +\usepackage{glossaries}
    +\newacronym{svm}{SVM}{support vector machine}
    +\glsunsetall
    +\begin{document}
    +\begin{frame}
    + \frametitle{Frame 1}
    + \begin{itemize}
    +  \item<+-> \acrfull{svm}
    +  \item<+-> Stuff.
    + \end{itemize}
    +\end{frame}
    +\end{document}
    +
    +

    +

    Secondly, explicitly reset each acronym on first use: + + +

    +
    +\begin{frame}
    + \frametitle{Frame 1}
    + \begin{itemize}
    +  \item<+-> \glsreset{svm}\gls{svm}
    +  \item<+-> Stuff.
    + \end{itemize}
    +\end{frame}
    +
    +

    These are non-optimal, but the beamer class is too complex for me to provide a programmatic solution. Other +potentially problematic environments are some tabular-like environments (but not tabular itself) that process the +contents in order to work out the column widths and then reprocess the contents to do the actual +typesetting. +

    The amsmath environments, such as align, also process their contents multiple times, but the glossaries +package now checks for this. For tabularx, you need to explicitly patch it by placing \glspatchtabularx in the +preamble (or anywhere before the problematic use of tabularx). +

    If you need to use commands like \gls in any problematic context that interferes with the first use flag, +then you can try using the buffering system provided with glossaries-extra. See the “First Use Flag” section of +the glossaries-extra manual.
    +

    +

    +

    Top

    7.1 Counting the Number of Times an Entry has been Used (First Use Flag Unset)

    +

    As from version 4.14, it’s now possible to keep track of how many times an entry is used. That is, +how many times the first use flag is unset. Note that the supplemental glossaries-extra package +improves this function and also provides per-unit counting, which isn’t available with the glossaries +package. +

    This function is disabled by default as it adds extra overhead to the document build time and +also switches \newglossaryentry (and therefore \newacronym) into a preamble-only command.
    +

    +

    To enable this function, use +


    \glsenableentrycount

    +

    +before defining your entries. This adds two extra (internal) fields to entries: currcount and prevcount. +

    The currcount field keeps track of how many times \glsunset is used within the document. A local unset +(using \glslocalunset) performs a local rather than global increment to currcount. Remember that +not all commands use \glsunset. Only the \gls-like commands do this. The reset commands +\glsreset and \glslocalreset reset this field back to zero (where \glslocalreset performs a local +change). -


    -
    -

    It is also possible to access the long and short forms without adding information to the glossary using -commands analogous to \glsentrytext (described in §9 Using Glossary Terms Without Links). -

    The commands that convert the first letter to upper case come with the same caveats as those for analogous -commands like \Glsentrytext (non-expandable, can’t be used in PDF bookmarks, care needs to be -taken if the first letter is an accented character etc). See §9 Using Glossary Terms Without Links. +

    The prevcount field stores the final value of the currcount field from the previous run. This value is read +from the aux file at the beginning of the document environment. +

    You can access these fields using +


    \glsentrycurrcount{label}

    +

    +for the currcount field, and +


    \glsentryprevcount{label}

    +

    +for the prevcount field. +

    These commands are only defined if you have used \glsenableentrycount.
    +

    +

    For example: + + +

    +
    +\documentclass{article}
    +\usepackage{glossaries}
    +\makeglossaries
    +\glsenableentrycount
    +\newglossaryentry{apple}{name=apple,description={a fruit}}
    +\begin{document}
    +Total usage on previous run: \glsentryprevcount{apple}.
    +\gls{apple}. \gls{apple}. \glsadd{apple}\glsentrytext{apple}.
    +\glslink{apple}{apple}. \glsdisp{apple}{apple}. \Gls{apple}.
    +Number of times apple has been used: \glsentrycurrcount{apple}.
    +\end{document}
    +
    +

    On the first LaTeX run, \glsentryprevcount{apple} produces 0. At the end of the document, +\glsentrycurrcount{apple} produces 4. This is because the only commands that have incremented the entry +count are those that use \glsunset. That is: \gls, \glsdisp and \Gls. The other commands used in the above +example, \glsadd, \glsentrytext and \glslink, don’t use \glsunset so they don’t increment the +entry count. On the next LaTeX run, \glsentryprevcount{apple} now produces 4 as that was +the value of the currcount field for the apple entry at the end of the document on the previous +run. +

    When you enable the entry count using \glsenableentrycount, you also enable the following +commands: +


    \cgls[options]{label}[insert]

    +

    +(no case-change, singular) +


    \cglspl[options]{label}[insert]

    +

    +(no case-change, plural) +


    \cGls[options]{label}[insert]

    +

    +(first letter uppercase, singular), and +


    \cGlspl[options]{label}[insert]

    +

    +(first letter uppercase, plural). These all have plus and starred variants like the analogous \gls, \glspl, \Gls +and \Glspl commands. +

    If you don’t use \glsenableentrycount, these commands behave like \gls, \glspl, \Gls and \Glspl, +respectively, only there will be a warning that you haven’t enabled entry counting. If you have enabled entry +counting with \glsenableentrycount then these commands test if \glsentryprevcount{label} equals 1. If it +doesn’t then the analogous \gls etc will be used. If it does, then the first optional argument will be ignored and +

    + + +
    +⟨cs format{label}{insert}\glsunset{label}
    -

    -

    The long form can be accessed using: -


    \glsentrylong{ will be performed, where ⟨cs format⟩ is a command that takes two arguments. The command used depends +whether you have used \cgls, \cglspl, \cGls or \cGlspl. +


    \cglsformat{label}{insert}

    -

    -or, with the first letter converted to upper case: -


    \Glsentrylong{

    +This command is used by \cgls and defaults to

    +
    +\glsentrylong{label}

    -

    -Plural forms: -


    \glsentrylongpl{}insert⟩ +
    +
    if the entry given by ⟨label⟩ has a long form or
    +
    +\glsentryfirst{label}

    -

    -


    \Glsentrylongpl{}insert⟩ +
    +
    otherwise. +


    \cglsplformat{label}{insert}

    -

    -

    Similarly, to access the short form: -


    \glsentryshort{

    +This command is used by \cglspl and defaults to

    +
    +\glsentrylongpl{label}

    -

    -or, with the first letter converted to upper case: -


    \Glsentryshort{}insert⟩ +
    +
    if the entry given by ⟨label⟩ has a long form or
    +
    +\glsentryfirstplural{label}

    -

    -Plural forms: -


    \glsentryshortpl{}insert⟩ +
    +
    otherwise. +


    \cGlsformat{label}{insert}

    -

    -


    \Glsentryshortpl{

    +This command is used by \cGls and defaults to

    +
    +\Glsentrylong{label}

    -

    -

    And the full form can be obtained using: -


    \glsentryfull{}insert⟩ +
    +
    if the entry given by ⟨label⟩ has a long form or
    + + +
    +\Glsentryfirst{label}

    -

    -


    \Glsentryfull{}insert⟩ +
    +
    otherwise. +


    \cGlsplformat{label}{insert}

    -

    -


    \glsentryfullpl{

    +This command is used by \cGlspl and defaults to

    +
    +\Glsentrylongpl{label}insert⟩ +
    +
    if the entry given by ⟨label⟩ has a long form or
    +
    +\Glsentryfirstplural{label}insert⟩ +
    +
    otherwise. +

    This means that if the previous count for the given entry was 1, the entry won’t be hyperlinked with the +\cgls-like commands and they won’t add a line to the external glossary file. If you haven’t used any of the +other commands that add information to the glossary file (such as \glsadd or the \glstext-like commands) +then the entry won’t appear in the glossary. +

    Remember that since these commands use \glsentryprevcount you need to run LaTeX twice to ensure +they work correctly. The document build order is now (at least): (pdf)latex, (pdf)latex, makeglossaries, +(pdf)latex. + +

    Example 19 (Don’t index entries that are only used once) +

    In this example, the abbreviations that have only been used once (on the previous run) only have their long +form shown with \cgls. + + +

    +
    +\documentclass{article}
    +\usepackage[colorlinks]{hyperref}
    +\usepackage[acronym]{glossaries}
    +\makeglossaries
    +\glsenableentrycount
    +\setacronymstyle{long-short}
    +\newacronym{html}{HTML}{hypertext markup language}
    +\newacronym{css}{CSS}{cascading style sheets}
    +\newacronym{xml}{XML}{extensible markup language}
    +\newacronym{sql}{SQL}{structured query language}
    +\newacronym{rdbms}{RDBMS}{relational database management system}
    +\newacronym{rdsms}{RDSMS}{relational data stream management system}
    +\begin{document}
    +These entries are only used once: \cgls{sql}, \cgls{rdbms},
    +\cgls{xml}. These entries are used multiple times:
    +\cgls{html}, \cgls{html}, \cgls{css}, \cgls{css}, \cgls{css},
    +\cgls{rdsms}, \cgls{rdsms}.
    +\printglossaries
    +\end{document}
    +
    +

    After a complete document build (latex, latex, makeglossaries, latex) the list of abbreviations only +includes the entries HTML, CSS and RDSMS. The entries SQL, RDBMS and XML only have their long forms +displayed and don’t have a hyperlink.

    +
    +

    +

    ____________________________

    +

    Remember that if you don’t like typing \cgls you can create a synonym. For example + + +

    +
    +\let\ac\cgls
    +
    +

    +

    With bib2gls there’s an analogous record counting set of commands. See glossaries-extra and bib2gls +manuals for further details.
    +

    + + +

    +

    +

    Top

    8. Displaying a Glossary

    +

    All defined glossaries may be displayed using: +

    +

    +Option 1:

    +

    (Must be used with \makenoidxglossaries in the preamble.) +


    \printnoidxglossaries

    +

    + which internally uses \printnoidxglossary for each glossary. +

    +

    +Options 2 and 3:

    +

    (Must be used with \makeglossaries in the preamble.) +


    \printglossaries

    +

    + which internally uses \printglossary for each glossary. +

    +

    +Options 46:

    +

    (glossaries-extra only) +


    \printunsrtglossaries

    +

    + which internally uses \printunsrtglossary for each glossary.

    +

    These commands will display all the glossaries in the order in which they were defined. +

    Note that, in the case of Options 2 and 3, no glossaries will appear until you have either used the Perl script +makeglossaries or Lua script makeglossaries-lite or have directly used makeindex or xindy (as described +in §??sec:makeglossaries Generating the Associated Glossary Files). In the case of Option 4, no glossary will +appear until you have used bib2gls. +

    While the external files are missing, \printglossary will just do \null for each missing glossary to assist +dictionary style documents that just use \glsaddall without inserting any text. This use of \null ensures that +all indexing information is written before the final page is shipped out. Once the external files are present \null +will no longer be used. This can cause a spurious blank page on the first LaTeX run before the glossary files +have been created. Once these files are present, \null will no longer be used and so shouldn’t cause interference +for the final document.
    +

    +

    If you use glossaries-extra, it will insert a heading and boilerplate text when the external files are missing. +See the glossaries-extra manual for further details.
    + + +

    +

    If the glossary still does not appear after you re-LaTeX your document, check the makeindex, xindy or +bib2gls log files, as applicable, to see if there is a problem. With Option 1, you just need two +LaTeX runs to make the glossaries appear, but you may need further runs to make the number lists +up-to-date. +

    An individual glossary can be displayed using: +

    +

    +Option 1:

    +

    +


    \printnoidxglossary[options]

    +

    + (Must be used with \makenoidxglossaries in the preamble.) +

    +

    +Options 2 and 3:

    +

    +


    \printglossary[options]

    +

    + (Must be used with \makeglossaries in the preamble.) +

    +

    +Options 46:

    +

    +


    \printunsrtglossary[options]

    +

    + (May be used with or without bib2gls.)

    +

    where ⟨options⟩ is a ⟨key⟩=⟨value⟩ list of options. (Again, when the associated external file is missing, \null is inserted +into the document.) +

    The glossaries-extra package also provides +


    \printunsrtinnerglossary[options]{pre code}{post code}

    -

    +

    +which is designed for inner or nested glossaries. It allows many, but not all, of the options listed below. There’s +an example available in the gallery: Inner or Nested Glossaries. See the glossaries-extra package for further +details.

    +

    +

    The following keys are available in {options}: +

    -


    \Glsentryfullpl{label}

    -

    -These again use \acrfullformat by default, but the new styles described in the section below use different -formatting commands. -

    -

    Top

    13.1 Changing the Abbreviation Style

    -

    It may be that the default style doesn’t suit your requirements in which case you can switch to another style -using -


    \setacronymstyle{style name}

    -

    -where ⟨style name⟩ is the name of the required style. -

    You must use \setacronymstyle before you define the acronyms with \newacronym.
    -

    -

    For example: +

    +type

    +

    The value of this key specifies which glossary to print. If omitted, the default glossary is assumed. For + example, to print the list of acronyms:

    -
    -\usepackage[acronym]{glossaries} - 
    \makeglossaries - 
    \setacronymstyle{long-sc-short} - 
    \newacronym{html}{html}{hypertext markup language} - 
    \newacronym{xml}{xml}{extensible markup language} -
    -

    Unpredictable results can occur if you try to use multiple styles. -

    If you need multiple abbreviation styles, then try using the glossaries-extra package, which has better -abbreviation management.
    -

    -

    Unlike the default behaviour of \newacronym, the styles used via \setacronymstyle don’t use the first or +

    +     \printglossary[type=\acronymtype]
    +
    +

    Note that you can’t display an ignored glossary, so don’t try setting type to the name of a glossary + that was defined using \newignoredglossary, described in §??sec:newglossary Defining New + Glossaries. (You can display an ignored glossary with \printunsrtglossary provided by + glossaries-extra.) +

    +

    text keys, but instead they use \defglsentryfmt to set a custom format that uses the long and short keys -(or their plural equivalents). This means that these styles cope better with plurals that aren’t formed by simply -appending the singular form with the letter “s”. In fact, most of the predefined styles use \glsgenacfmt and -modify the definitions of commands like \genacrfullformat. -

    Note that when you use \setacronymstyle the name key is set to -


    \acronymentry{label}

    -

    -and the sort key is set to -


    \acronymsort{short}{long}

    -

    -These commands are redefined by the acronym styles. However, you can redefine them again after the style has -been set but before you use \newacronym. Protected expansion is performed on \acronymsort when the entry is -defined. -

    -

    -

    Top

    13.1.1 Predefined Acronym Styles

    -

    The glossaries package provides a number of predefined styles. These styles apply -


    \firstacronymfont{text}

    -

    -to the short form on first use and -


    \acronymfont{text}

    -

    -on subsequent use. The styles modify the definition of \acronymfont as required, but \firstacronymfont is -only set once by the package when it’s loaded. By default \firstacronymfont{text} is the same as +class="cmtt-10">title

    +

    This is the glossary’s title (overriding the title specified when the glossary was defined). +

    +

    \acronymfont{text}. If you want the short form displayed differently on first use, you can redefine +class="cmtt-10">toctitle

    +

    This is the title to use for the table of contents (if the toc package option has been used). It may also + be used for the page header, depending on the page style. If omitted, the value of title is + used. +

    +

    \firstacronymfont independently of the acronym style. - - -

    The predefined styles that contain sc in their name (for example long-sc-short) redefine \acronymfont to use +class="cmtt-10">style

    +

    This specifies which glossary style to use for this glossary, overriding the effect of the style package option + or \glossarystyle. +

    +

    \textsc, which means that the short form needs to be specified in lower case. -

    -

    Some fonts don’t support bold small caps, so you may need to redefine \glsnamefont (see §10 Displaying a -glossary) to switch to medium weight if you are using a glossary style that displays entry names in bold and you -have chosen an acronym style that uses \textsc.
    -

    -

    The predefined styles that contain sm in their name (for example long-sm-short) redefine \acronymfont to -use \textsmaller. -

    -

    Note that the glossaries package doesn’t define or load any package that defines \textsmaller. If you use -one of the acronym styles that set \acronymfont to \textsmaller you must explicitly load the relsize package -or otherwise define \textsmaller.
    -

    -

    The remaining predefined styles redefine \acronymfont{text} to simply do its argument ⟨text⟩. -

    In most cases, the predefined styles adjust \acrfull and \glsentryfull (and their plural and upper case -variants) to reflect the style. The only exceptions to this are the dua and footnote styles (and their variants). -
    -

    -

    The following styles are supplied by the glossaries package:

    -
      -
    • long-short, long-sc-short, long-sm-short, long-sp-short: -

      With these three styles, acronyms are displayed in the form -


      long(\firstacronymfont{short})

      -

      - on first use and -


      \acronymfont{short}

      -

      - on subsequent use. They also set \acronymsort{short}{long} to just ⟨short⟩. This means that the - acronyms are sorted according to their short form. In addition, \acronymentry{label} is set to - just the short form (enclosed in \acronymfont) and the description key is set to the long - form. -

      The long-sp-short style was introduced in version 4.16 and uses -


      \glsacspace{label}

      -

      - for the space between the long and short forms. This defaults to a non-breakable space (~) if - (\acronymfont{short}) is less than 3em, otherwise it uses a normal space. This may be redefined as - required. For example, to always use a non-breakable space: +class="cmtt-10">numberedsection

    +

    This specifies whether to use a numbered section for this glossary, overriding the effect of the + numberedsection package option. This key has the same syntax as the numberedsection package option, + described in §??sec:pkgopts-sec Sectioning, Headings and TOC Options. +

    +

    +nonumberlist

    +

    This is a boolean key. If true (nonumberlist=true) the numberlist is suppressed for this glossary. If false + (nonumberlist=false) the numberlist is displayed for this glossary. +

    -

    -
    - \renewcommand*{\glsacspace}[1]{~} -
    -

    -

    -
  • short-long, sc-short-long, sm-short-long: -

    These three styles are analogous to the above three styles, except the display order is swapped - to -


    \firstacronymfont{short} (long)

    -

    - on first use. -

    Note, however, that \acronymsort and \acronymentry are the same as for the ⟨long⟩ (⟨short⟩) styles above, - so the acronyms are still sorted according to the short form. -

  • -
  • long-short-desc, long-sc-short-desc, long-sm-short-desc, long-sp-short-desc: -

    These are like the long-short, long-sc-short, long-sm-short and long-sp-short styles described above, except - that the description key must be supplied in the optional argument of \newacronym. They also redefine +

    +nogroupskip

  • +

    This is a boolean key. If true the vertical gap between groups is suppressed for this glossary. +

    +

    +nopostdot

    +

    This is a boolean key. If true the full stop after the description is suppressed for this glossary. +

    +

    +entrycounter

    +

    This is a boolean key. Behaves similar to the package option of the same name. The corresponding package + option must be used to make \glsrefentry work correctly. +

    +

    +subentrycounter

    +

    This is a boolean key. Behaves similar to the package option of the same name. If you want to set both \acronymentry to {long} (\acronymfont{short}) and redefine \acronymsort{short}{long} to just ⟨long⟩. - This means that the acronyms are sorted according to the long form, and in the list of acronyms - the name field has the long form followed by the short form in parentheses. I recommend - you use a glossary style such as altlist with these acronym styles to allow for the long name - field. -

    -
  • short-long-desc, sc-short-long-desc, sm-short-long-desc: -

    These styles are analogous to the above three styles, but the first use display style is: -


    \firstacronymfont{short} (long)

    -

    - The definitions of \acronymsort and \acronymentry are the same as those for long-short-desc - etc. -

  • -
  • dua, dua-desc: -

    With these styles, the \gls-like commands always display the long form regardless of whether - the entry has been used or not. However, \acrfull and \glsentryfull will display ⟨long⟩ - (\acronymfont{short}). In the case of dua, the name and sort keys are set to the short - form and the description is set to the long form. In the case of dua-desc, the name and entrycounter and subentrycounter, make sure you specify entrycounter first. The corresponding + package option must be used to make \glsrefentry work correctly. +

  • +

    +sort - keys are set to the long form and the description is supplied in the optional argument of + id="dx1-144048">

    +

    This key is only available for Option 1. Possible values are: word (word order), letter (letter order), \newacronym. +class="cmtt-10">standard (word or letter ordering taken from the order package option), use (order of use), def (order of + definition) nocase (case-insensitive) or case (case-sensitive). Note that the word and letter comparisons + (that is, everything other than sort=use and sort=def) just use a simple character code comparison. For + a locale-sensitive sort, you must use either xindy (Option 3) or bib2gls (Option 4). Note that bib2gls + provides many other sort options. +

    If you use the use or def values make sure that you select a glossary style that doesn’t have a visual + indicator between groups, as the grouping no longer makes sense. Consider using the nogroupskip option. +
    +

    +

    The + word + and + letter + order + sort + methods + use -

    -
  • footnote, footnote-sc, footnote-sm: -

    With these three styles, on first use the \gls-like commands display: -


    \firstacronymfont{short}\footnote{long}

    -

    - However, \acrfull and \glsentryfull are set to \acronymfont{short} (⟨long⟩). On subsequent use the - display is: -


    \acronymfont{short}

    -

    - The sort and name keys are set to the short form, and the description is set to the long - form. -

    In order to avoid nested hyperlinks on first use the footnote styles automatically implement hyperfirstdatatool’s + \dtlwordindexcompare + and + \dtlletterindexcompare + handlers. + The + case-insensitive + sort + method + uses + datatool’s + \dtlicompare + handler. + The + case-sensitive + sort + method + uses + datatool’s + \dtlcompare + handler. + See + the + datatool + documentation + for + further + details. +

    If you don’t get an error with sort=use and sort=def but you do get an error with one of the other sort + options, then you probably need to use the sanitizesort=false for the acronym lists.

    -

    -

  • -
  • footnote-desc, footnote-sc-desc, footnote-sm-desc: -

    These three styles are similar to the previous three styles, but the description has to be supplied in the - optional argument of \newacronym. The name key is set to the long form followed by the short form in - parentheses and the true package option or make sure none of the + entries have fragile commands in their sort key is set to the long form. This means that the acronyms will be sorted - according to the long form. In addition, since the name will typically be quite wide it’s best to choose a - glossary style that can accommodate this, such as altlist. -

    -
  • + id="dx1-144063"> field. +

    +

    -

    Example 22 (Adapting a Predefined Acronym Style) -

    Suppose I want to use the footnote-sc-desc style, but I want the name key set to the short form followed by -the long form in parentheses and the sort key set to the short form. Then I need to specify the footnote-sc-desc -style: + id="dx1-144064">label={label}

    +

    This key is only available with glossaries-extra and labels the glossary with \label{label}. This is an + alternative to the package option numberedsection=autolabel +

    +

    +target={boolean}

    +

    This boolean key is only available with glossaries-extra and can be used to switch off the + automatic hypertarget for each entry. (This refers to the target used by commands like \gls and + \glslink.) +

    This option is useful with \printunsrtglossary as it allows the same list (or sub-list) of entries to be + + + displayed multiple times without causing duplicate hypertarget names. +

    +

    +prefix={prefix}

    +

    This key is only available with glossaries-extra and provides another way of avoiding duplicate hypertarget + names. In this case it uses a different prefix for those names. This locally redefines \glolinkprefix but + note this will also affect the target for any entry referenced within the glossary with commands like \gls, + \glslink or \glshypertarget. +

    +

    +targetnameprefix={prefix}

    +

    This key is only available with glossaries-extra. This is similar to the prefix option, but it alters the prefix of + the hypertarget anchors without changing \glslinkprefix (so it won’t change the hyperlinks for any + entries referenced in the glossary). +

    +

    +groups={boolean}

    +

    This boolean key is only available with glossaries-extra and, if true, will attempt to perform group + formation. See the glossaries-extra manual for further details. +

    +

    +leveloffset={n}

    +

    This key is only available with \printunsrtglossary. It can be used to locally adjust the hierarchical + level used by the glossary style. See the glossaries-extra manual for further details.

    +

    By default, the glossary is started either by \chapter* or by \section*, depending on whether or not +\chapter is defined. This can be overridden by the section package option or the \setglossarysection +command. Numbered sectional units can be obtained using the numberedsection package option. Each glossary +sets the page header via the command +


    \glsglossarymark{title}

    +

    +If this mechanism is unsuitable for your chosen class file or page style package, you will need to redefine +\glsglossarymark. Further information about these options and commands is given in §??sec:pkgopts-sec +Sectioning, Headings and TOC Options. +

    Information can be added to the start of the glossary (after the title and before the main body of the +glossary) by redefining +


    \glossarypreamble

    +

    +For example:

    -
    -\setacronymstyle{footnote-sc-desc} -
    -

    and then redefine \acronymsort and \acronymentry: +

    +\renewcommand{\glossarypreamble}{Numbers in italic
    +indicate primary definitions.}
    +
    +

    This needs to be done before the glossary is displayed. +

    If you want a different preamble per glossary you can use +


    \setglossarypreamble[type]{preamble text}

    +

    +If ⟨type⟩ is omitted, \glsdefaulttype is used. +

    For example:

    -
    -\renewcommand*{\acronymsort}[2]{#1}% sort by short form - 
    \renewcommand*{\acronymentry}[1]{% - 
      \acronymfont{\glsentryshort{#1}}\space (\glsentrylong{#1})}% -
    -

    (I’ve used \space for extra clarity, but you can just use an actual space instead.) -

    Note that the default Computer Modern fonts don’t support bold small caps, so another font is required. For -example: +

    +\setglossarypreamble{Numbers in italic
    +indicate primary definitions.}
    +
    +

    This will print the given preamble text for the main glossary, but not have any preamble text for any other +glossaries. +

    There is an analogous command to \glossarypreamble called +


    \glossarypostamble

    +

    +which is placed at the end of each glossary. + +

    Example 20 (Switch to Two Column Mode for Glossary) +

    Suppose you are using the superheaderborder +style8.1, +and you want the glossary to be in two columns, but after the glossary you want to switch back to one column +mode, you could do:

    -
    -\usepackage[T1]{fontenc} -
    -

    The alternative is to redefine \acronymfont so that it always switches to medium weight to ensure the small -caps setting is used. For example: - - +

    +\renewcommand*{\glossarysection}[2][]{%
    +  \twocolumn[{\chapter*{#2}}]%
    +  \setlength\glsdescwidth{0.6\linewidth}%
    +  \glsglossarymark{\glossarytoctitle}%
    +}
    +\renewcommand*{\glossarypostamble}{\onecolumn}
    +
    +

    -
    -\renewcommand*{\acronymfont}[1]{\textmd{\scshape #1}} -
    -

    -

    The sample file sampleFnAcrDesc.tex illustrates this example.

    -

    -

    ____________________________

    -

    -

    -

    Top

    13.1.2 Defining A Custom Acronym Style

    -

    You may find that the predefined acronyms styles that come with the glossaries package don’t suit your -requirements. In this case you can define your own style using: -


    \newacronymstyle{style name}{display}{definitions

    +

    ____________________________

    +

    Within each glossary, each entry name is formatted according to +


    \glsnamefont{name}

    -

    -where ⟨style name⟩ is the name of the new style (avoid active characters). The second argument, ⟨display⟩, is -equivalent to the mandatory argument of \defglsentryfmt. You can simply use \glsgenacfmt or you can -customize the display using commands like \ifglsused, \glsifplural and \glscapscase. (See §6.3 Changing -the format of the link text for further details.) If the style is likely to be used with a mixed glossary (that is -entries in that glossary are defined both with \newacronym and \newglossaryentry) then you can test if the -entry is an acronym and use \glsgenacfmt if it is or \glsgenentryfmt if it isn’t. For example, the long-short -style sets ⟨display⟩ as +

    +which takes one argument: the entry name. This command is always used regardless of the glossary style. By +default, \glsnamefont simply displays its argument in whatever the surrounding font happens to be. +This means that in the list-like glossary styles (defined in the glossary-list style file) the name will +appear in bold, since the name is placed in the optional argument of \item, whereas in the tabular +styles (defined in the glossary-long and glossary-super style files) the name will appear in the normal +font. The hierarchical glossary styles (defined in the glossary-tree style file) also set the name in +bold. +

    If you want to change the font for the description, or if you only want to change the name +font for some types of entries but not others, you might want to consider using the glossaries-extra +package. + +

    Example 21 (Changing the Font Used to Display Entry Names in the +Glossary) +

    Suppose you want all the entry names to appear in medium weight small caps in your glossaries, then you +can do:

    -
    -\ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}% +
    +\renewcommand{\glsnamefont}[1]{\textsc{\mdseries #1}}
    +
    +

    +
    +

    +

    ____________________________

    +

    The glossaries-extra package provides additional hooks that can be used to make other minor adjustments.
    -

    (You can use \ifglshasshort instead of \ifglshaslong to test if the entry is an acronym if you -prefer.) -

    The third argument, ⟨definitions⟩, can be used to redefine the commands that affect the display style, such as -\acronymfont or, if ⟨display⟩ uses \glsgenacfmt, \genacrfullformat and its variants. -

    Note that \setacronymstyle redefines \glsentryfull and \acrfullfmt to use \genacrfullformat (and -similarly for the plural and upper case variants). If this isn’t appropriate for the style (as in the -case of styles like footnote and dua) \newacronymstyle should redefine these commands within -⟨definitions⟩. -

    Within \newacronymstyle’s ⟨definitions⟩ argument you can also redefine -


    \GenericAcronymFields

    -

    -This is a list of additional fields to be set in \newacronym. You can use the following token registers to access -the entry label, long form and short form: \glslabeltok, \glslongtok and \glsshorttok. As with all -TeX registers, you can access their values by preceding the register with \the. For example, the long-short style -does: +

    +

    The letter group titles (which are displayed for styles like indexgroup) can be changed either by redefining the +corresponding \group-labelgroupname commands, such as \glssymbolsgroupname, (see §??sec:fixednames +Changing the Fixed Names) or by using the glossaries-extra commands \glsxtrsetgrouptitle and +\glsxtrlocalsetgrouptitle. The ⟨group-label⟩ is typically obtained by the indexing application.

    -
    -\renewcommand*{\GenericAcronymFields}{% - 
       description={\the\glslongtok}}% +

    +

    Top

    9. Defining New Glossaries

    +

    A new glossary can be defined using: +


    \newglossary[log-ext]{name}{in-ext}{out-ext} +{title}[counter]

    +

    +where ⟨name⟩ is the label to assign to this glossary. The arguments ⟨in-ext⟩ and ⟨out-ext⟩ specify the extensions to +give to the input and output files for that glossary, ⟨title⟩ is the default title for this new glossary and the final +optional argument ⟨counter⟩ specifies which counter to use for the associated number lists (see also +§??sec:numberlists Number Lists). The first optional argument specifies the extension for the makeindex +(Option 2) or xindy (Option 3) transcript file (this information is only used by makeglossaries which picks +up the information from the auxiliary file). If you use Option 1, the ⟨log-ext⟩, ⟨in-ext⟩ and ⟨out-ext⟩ arguments are +ignored. +

    The glossary label ⟨name⟩ must not contain any active characters. It’s generally best to stick with just +characters that have category code 11 (typically the non-extended Latin characters for standard LaTeX). +
    +

    +

    There is also a starred version (new to v4.08): +


    \newglossary*{name}{title}[counter]

    +

    +which is equivalent to

    +
    +\newglossary[name-glg]{name}{name-gls}{name-glo}{title}[counter] +
    +
    or you can also use: +


    \altnewglossary{name}{tag}{title}[counter]

    +

    +which is equivalent to

    +
    +\newglossary[tag-glg]{name}{tag-gls}{tag-glo}{title}[counter]
    -

    which sets the description field to the long form of the acronym whereas the long-short-desc style -does: - - -

    -
    -\renewcommand*{\GenericAcronymFields}{}%
    -

    since the description needs to be specified by the user. -

    It may be that you want to define a new acronym style that’s based on an existing style. Within ⟨display⟩ you -can use -


    \GlsUseAcrEntryDispStyle{style name}

    -

    -to use the ⟨display⟩ definition from the style given by ⟨style name⟩. Within ⟨definitions⟩ you can use -


    \GlsUseAcrStyleDefs{style name

    It may be that you have some terms that are so common that they don’t need to be listed. In this case, you +can define a special type of glossary that doesn’t create any associated files. This is referred to as an “ignored +glossary” and it’s ignored by commands that iterate over all the glossaries, such as \printglossaries. To +define an ignored glossary, use +


    \newignoredglossary{name}

    -

    -to use the ⟨definitions⟩ from the style given by ⟨style name⟩. For example, the long-sc-short acronym style is -based on the long-short style with minor modifications (remember to use ## instead of # within -⟨definitions⟩): - - -

    -
    -\newacronymstyle{long-sc-short}% - 
    {% use the same display as "long-short" - 
      \GlsUseAcrEntryDispStyle{long-short}% - 
    }% - 
    {% use the same definitions as "long-short" - 
      \GlsUseAcrStyleDefs{long-short}% - 
      % Minor modifications: - 
      \renewcommand{\acronymfont}[1]{\textsc{##1}}% - 
      \renewcommand*{\acrpluralsuffix}{\glstextup{\glspluralsuffix}}% - 
    } -
    -

    (\glstextup is used to cancel the effect of \textsc. This defaults to \textulc, if defined, otherwise \textup. -For example, the plural of svm should be rendered as svms rather than svms.) - -

    Example 23 (Defining a Custom Acronym Style) -

    Suppose I want my acronym on first use to have the short form in the text and the long form with the -description in a footnote. Suppose also that I want the short form to be put in small caps in the main body of -the document, but I want it in normal capitals in the list of acronyms. In my list of acronyms, I want the long -form as the name with the short form in brackets followed by the description. That is, in the text I want \gls -on first use to display: -
    \textsc{abbrv}\footnote{long⟩: ⟨description} -
    -on subsequent use: -
    \textsc{abbrv} -
    -and in the list of acronyms, each entry will be displayed in the form: -
    long⟩ (⟨short⟩) ⟨description⟩ -
    -

    Let’s suppose it’s possible that I may have a mixed glossary. I can check this in the second argument of +

    +where ⟨name⟩ is the name of the glossary (as above). This glossary type will automatically be added to the \newacronymstyle using: - - -

    -
    -\ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}% -
    -

    This will use \glsgenentryfmt if the entry isn’t an acronym, otherwise it will use \glsgenacfmt. The third -argument (⟨definitions⟩) of \newacronymstyle needs to redefine \genacrfullformat etc so that the first -use displays the short form in the text with the long form in a footnote followed by the description. This is done -as follows (remember to use ## instead of #): +class="cmss-10">nohypertypes list, since there are no hypertargets for the entries in an ignored glossary. (The sample file +sample-entryfmt.tex defines an ignored glossary.) -

    -
    - % No case change, singular first use: - 
      \renewcommand*{\genacrfullformat}[2]{% - 
       \firstacronymfont{\glsentryshort{##1}}##2% - 
       \footnote{\glsentrylong{##1}: \glsentrydesc{##1}}% - 
      }% - 
     % First letter upper case, singular first use: - 
      \renewcommand*{\Genacrfullformat}[2]{% - 
       \firstacronymfont{\Glsentryshort{##1}}##2% - 
       \footnote{\glsentrylong{##1}: \glsentrydesc{##1}}% - 
      }% - 
     % No case change, plural first use: - 
      \renewcommand*{\genplacrfullformat}[2]{% - 
       \firstacronymfont{\glsentryshortpl{##1}}##2% - 
       \footnote{\glsentrylongpl{##1}: \glsentrydesc{##1}}% - 
      }% - 
     % First letter upper case, plural first use: - 
      \renewcommand*{\Genplacrfullformat}[2]{% - 
       \firstacronymfont{\Glsentryshortpl{##1}}##2% - 
       \footnote{\glsentrylongpl{##1}: \glsentrydesc{##1}}% - 
      }% -
    -

    If you think it inappropriate for the short form to be capitalised at the start of a sentence you can change the -above to: +

    The glossaries-extra package provides a starred version of this command that allows hyperlinks (since +ignored glossaries can be useful with bib2gls). There is also an analogous \provideignoredglossary +command.
    +

    +

    You can test if a glossary is an ignored one using: +


    \ifignoredglossary{name}{true}{false}

    +

    +This does ⟨true⟩ if ⟨name⟩ was defined as an ignored glossary, otherwise it does ⟨false⟩. +

    Note that the main (default) glossary is automatically created as:

    -
    - % No case change, singular first use: - 
      \renewcommand*{\genacrfullformat}[2]{% - 
       \firstacronymfont{\glsentryshort{##1}}##2% - 
       \footnote{\glsentrylong{##1}: \glsentrydesc{##1}}% - 
      }% - 
     % No case change, plural first use: - 
      \renewcommand*{\genplacrfullformat}[2]{% - 
       \firstacronymfont{\glsentryshortpl{##1}}##2% - 
       \footnote{\glsentrylongpl{##1}: \glsentrydesc{##1}}% - 
      }% - 
     \let\Genacrfullformat\genacrfullformat - 
     \let\Genplacrfullformat\genplacrfullformat -
    -

    Another variation is to use \Glsentrylong and \Glsentrylongpl in the footnote instead of \glsentrylong -and \glsentrylongpl. -

    Now let’s suppose that commands such as \glsentryfull and \acrfull shouldn’t use a footnote, but -instead use the format: ⟨long⟩ (⟨short⟩). This means that the style needs to redefine \glsentryfull, \acrfullfmt -and their plural and upper case variants. -

    First, the non-linking commands: +

    +\newglossary{main}{gls}{glo}{\glossaryname}
    +
    +

    so it can be identified by the label main (unless the nomain package option is used). Using the acronym package +option is equivalent to:

    -
    -  \renewcommand*{\glsentryfull}[1]{% - 
        \glsentrylong{##1}\space - 
          (\acronymfont{\glsentryshort{##1}})% - 
      }% - 
      \renewcommand*{\Glsentryfull}[1]{% - 
        \Glsentrylong{##1}\space - 
          (\acronymfont{\glsentryshort{##1}})% - 
      }% - 
      \renewcommand*{\glsentryfullpl}[1]{% - 
        \glsentrylongpl{##1}\space - 
          (\acronymfont{\glsentryshortpl{##1}})% - 
      }% - 
      \renewcommand*{\Glsentryfullpl}[1]{% - 
        \Glsentrylongpl{##1}\space - 
          (\acronymfont{\glsentryshortpl{##1}})% - 
      }% -
    -

    Now for the linking commands: - - -

    -
    -  \renewcommand*{\acrfullfmt}[3]{% - 
        \glslink[##1]{##2}{% - 
         \glsentrylong{##2}##3\space - 
          (\acronymfont{\glsentryshort{##2}})% - 
        }% - 
      }% - 
      \renewcommand*{\Acrfullfmt}[3]{% - 
        \glslink[##1]{##2}{% - 
         \Glsentrylong{##2}##3\space - 
          (\acronymfont{\glsentryshort{##2}})% - 
        }% - 
      }% - 
      \renewcommand*{\ACRfullfmt}[3]{% - 
        \glslink[##1]{##2}{% - 
         \MakeTextUppercase{% - 
           \glsentrylong{##2}##3\space - 
             (\acronymfont{\glsentryshort{##2}})% - 
         }% - 
        }% - 
      }% - 
      \renewcommand*{\acrfullplfmt}[3]{% - 
        \glslink[##1]{##2}{% - 
         \glsentrylongpl{##2}##3\space - 
           (\acronymfont{\glsentryshortpl{##2}})% - 
        }% - 
      }% - 
      \renewcommand*{\Acrfullplfmt}[3]{% - 
        \glslink[##1]{##2}{% - 
         \Glsentrylongpl{##2}##3\space - 
           (\acronymfont{\glsentryshortpl{##2}})% - 
        }% - 
      }% - 
      \renewcommand*{\ACRfullplfmt}[3]{% - 
        \glslink[##1]{##2}{% - 
         \MakeTextUppercase{% - 
           \glsentrylongpl{##2}##3\space - 
             (\acronymfont{\glsentryshortpl{##2}})% - 
         }% - 
        }% - 
      }% -
    -

    (This may cause problems with long hyperlinks, in which case adjust the definitions so that, for example, only -the short form is inside the argument of \glslink.) -

    The style also needs to redefine \acronymsort so that the acronyms are sorted according to the long -form: +

    +\newglossary[alg]{acronym}{acr}{acn}{\acronymname}
    +
    +

    so it can be identified by the label acronym. If you are not sure whether the acronym option has been used, you +can identify the list of acronyms by the command \acronymtype which is set to acronym, if the acronym +option has been used, otherwise it is set to main. Note that if you are using the main glossary +as your list of acronyms, you need to declare it as a list of acronyms using the package option +acronymlists. +

    The symbols package option creates a new glossary with the label symbols using:

    -
    -  \renewcommand*{\acronymsort}[2]{##2}% -
    -

    If you prefer them to be sorted according to the short form you can change the above to: +

    +\newglossary[slg]{symbols}{sls}{slo}{\glssymbolsgroupname}
    +
    +

    The numbers package option creates a new glossary with the label numbers using:

    -
    -  \renewcommand*{\acronymsort}[2]{##1}% -
    -

    The acronym font needs to be set to \textsc and the plural suffix adjusted so that the “s” suffix in the plural -short form doesn’t get converted to small caps: +

    +\newglossary[nlg]{numbers}{nls}{nlo}{\glsnumbersgroupname}
    +
    +

    The index package option creates a new glossary with the label index using:

    -
    -  \renewcommand*{\acronymfont}[1]{\textsc{##1}}% - 
      \renewcommand*{\acrpluralsuffix}{\glstextup{\glspluralsuffix}}% +
    +\newglossary[ilg]{index}{ind}{idx}{\indexname}
    +
    +

    +

    Options 2 and 3: all glossaries must be defined before \makeglossaries to ensure that the relevant output +files are opened. +

    See §??sec:fixednames Changing the Fixed Names if you want to redefine \glossaryname, especially if you +are using babel or translator. (Similarly for \glssymbolsgroupname and \glsnumbersgroupname.) If you +want to redefine \indexname, just follow the advice in How to change LaTeX’s “fixed names”.

    -

    There are a number of ways of dealing with the format in the list of acronyms. The simplest way is to redefine -\acronymentry to the long form followed by the upper case short form in parentheses: +

    -
    - \renewcommand*{\acronymentry}[1]{% - 
       \Glsentrylong{##1}\space - 
         (\MakeTextUppercase{\glsentryshort{##1}})}% -
    -

    (I’ve used \Glsentrylong instead of \glsentrylong to capitalise the name in the glossary.) -

    An alternative approach is to set \acronymentry to just the long form and redefine \GenericAcronymFields to -set the symbol key to the short form and use a glossary style that displays the symbol in parentheses after the +

    +

    Top

    10. Adding an Entry to the Glossary Without Generating Text

    +

    It is possible to add a line to the glossary file without generating any text at that point in the document +using: +


    \glsadd[options]{label}

    +

    +This is similar to the \glstext-like commands, only it doesn’t produce any text (so therefore, there is no hyper +key available in ⟨options⟩ but all the other options that can be used with \glstext-like commands can be passed +to \glsadd). +

    This command essentially works like \index (provided by the LaTeX kernel) in that it doesn’t produce text +but it does add a line with an associated location to the glossary file. In this case, the “encap” (the page +encapsulator information) is specified with the format key. (See §??sec:encap Encap Values (Location +Formats).) +

    For example, to add a page range to the glossary number list for the entry whose label is given by name (such as the tree style) like this: - - -

    -
    - \renewcommand*{\acronymentry}[1]{\Glsentrylong{##1}}% - 
     \renewcommand*{\GenericAcronymFields}{% - 
        symbol={\protect\MakeTextUppercase{\the\glsshorttok}}}% -
    -

    I’m going to use the first approach and set \GenericAcronymFields to do nothing: +class="cmtt-10">set:

    -
    - \renewcommand*{\GenericAcronymFields}{}% -
    -

    -

    Finally, this style needs to switch off hyperlinks on first use to avoid nested links: +

    +\glsadd[format=(]{set}
    +Lots of text about sets spanning many pages.
    +\glsadd[format=)]{set}
    +
    +

    +

    To add all entries that have been defined, use: +


    \glsaddall[options]

    +

    +The optional argument is the same as for \glsadd, except there is also a key types which can be +used to specify which glossaries to use. This should be a comma-separated list. For example, if +you only want to add all the entries belonging to the list of acronyms (specified by the glossary +type \acronymtype) and a list of notation (specified by the glossary type notation) then you can +do:

    -
    - \glshyperfirstfalse -
    -

    Putting this all together: +

    +\glsaddall[types={\acronymtype,notation}]
    +
    +

    +

    If you are using bib2gls with glossaries-extra, you can’t use \glsaddall. Instead use the selection=all +resource option to select all entries in the given bib files.
    +

    +

    Note that \glsadd and \glsaddall add the current location to the number list. In the case of \glsaddall, +all entries in the glossary will have the same location in the number list. If you want to use \glsaddall, it’s +best to suppress the number list with the nonumberlist package option. (See sections 2.3 and 12.) +
    +

    +

    There is now a variation of \glsaddall that skips any entries that have been marked as used: +


    \glsaddallunused[list]

    +

    +This command uses \glsadd[format=glsignore] which will ignore this location in the number list. (See +§??sec:encap Encap Values (Location Formats).) The optional argument ⟨list⟩ is a comma-separated list of +glossary types. If omitted, it defaults to the list of all defined glossaries. +

    If you want to use \glsaddallunused, it’s best to place the command at the end of the document to ensure +that all the commands you intend to use have already been used. Otherwise you could end up with a spurious +comma or dash in the location list.
    +

    +

    With glossaries-extra and bib2gls, glsignore indicates an “ignored location” which influences selection but +isn’t added to the location list. In this case, if you use selection=all then only those entries that have been +explicitly indexed in the document will have location lists. The other entries that were selected as a result of +selection=all won’t have location lists.
    +

    +

    Base glossaries package only:

    -
    -\newacronymstyle{custom-fn}% new style name - 
    {% - 
      \ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}% - 
    }% - 
    {% - 
     \renewcommand*{\GenericAcronymFields}{}% - 
     \glshyperfirstfalse - 
      \renewcommand*{\genacrfullformat}[2]{% - 
       \firstacronymfont{\glsentryshort{##1}}##2% - 
       \footnote{\glsentrylong{##1}: \glsentrydesc{##1}}% - 
      }% - 
      \renewcommand*{\Genacrfullformat}[2]{% - 
       \firstacronymfont{\Glsentryshort{##1}}##2% - 
       \footnote{\glsentrylong{##1}: \glsentrydesc{##1}}% - 
      }% - 
      \renewcommand*{\genplacrfullformat}[2]{% - 
       \firstacronymfont{\glsentryshortpl{##1}}##2% - 
       \footnote{\glsentrylongpl{##1}: \glsentrydesc{##1}}% - 
      }% - 
      \renewcommand*{\Genplacrfullformat}[2]{% - 
       \firstacronymfont{\Glsentryshortpl{##1}}##2% - 
       \footnote{\glsentrylongpl{##1}: \glsentrydesc{##1}}% - 
      }% - 
      \renewcommand*{\glsentryfull}[1]{% - 
        \glsentrylong{##1}\space - 
          (\acronymfont{\glsentryshort{##1}})% - 
      }% - 
      \renewcommand*{\Glsentryfull}[1]{% - 
        \Glsentrylong{##1}\space - 
          (\acronymfont{\glsentryshort{##1}})% - 
      }% - 
      \renewcommand*{\glsentryfullpl}[1]{% - 
        \glsentrylongpl{##1}\space - 
          (\acronymfont{\glsentryshortpl{##1}})% - 
      }% - 
      \renewcommand*{\Glsentryfullpl}[1]{% - 
        \Glsentrylongpl{##1}\space - 
          (\acronymfont{\glsentryshortpl{##1}})% - 
      }% - 
      \renewcommand*{\acrfullfmt}[3]{% - 
        \glslink[##1]{##2}{% - 
         \glsentrylong{##2}##3\space - 
          (\acronymfont{\glsentryshort{##2}})% - 
        }% - 
      }% - 
      \renewcommand*{\Acrfullfmt}[3]{% - - - 
        \glslink[##1]{##2}{% - 
         \Glsentrylong{##2}##3\space - 
          (\acronymfont{\glsentryshort{##2}})% - 
        }% - 
      }% - 
      \renewcommand*{\ACRfullfmt}[3]{% - 
        \glslink[##1]{##2}{% - 
         \MakeTextUppercase{% - 
           \glsentrylong{##2}##3\space - 
             (\acronymfont{\glsentryshort{##2}})% - 
         }% - 
        }% - 
      }% - 
      \renewcommand*{\acrfullplfmt}[3]{% - 
        \glslink[##1]{##2}{% - 
         \glsentrylongpl{##2}##3\space - 
           (\acronymfont{\glsentryshortpl{##2}})% - 
        }% - 
      }% - 
      \renewcommand*{\Acrfullplfmt}[3]{% - 
        \glslink[##1]{##2}{% - 
         \Glsentrylongpl{##2}##3\space - 
           (\acronymfont{\glsentryshortpl{##2}})% - 
        }% - 
      }% - 
      \renewcommand*{\ACRfullplfmt}[3]{% - 
        \glslink[##1]{##2}{% - 
         \MakeTextUppercase{% - 
           \glsentrylongpl{##2}##3\space - 
             (\acronymfont{\glsentryshortpl{##2}})% - 
         }% - 
        }% - 
      }% - 
      \renewcommand*{\acronymfont}[1]{\textsc{##1}}% - 
      \renewcommand*{\acrpluralsuffix}{\glstextup{\glspluralsuffix}}% - 
      \renewcommand*{\acronymsort}[2]{##2}% - 
      \renewcommand*{\acronymentry}[1]{% - 
       \Glsentrylong{##1}\space - 
         (\MakeTextUppercase{\glsentryshort{##1}})}% - 
    } -
    -

    -

    Now I need to specify that I want to use this new style: - - -

    -
    -\setacronymstyle{custom-fn} -
    -

    I also need to use a glossary style that suits this acronym style, for example altlist: +

    +\documentclass{article}
    +\usepackage{glossaries}
    +\makeglossaries
    +\newglossaryentry{cat}{name={cat},description={feline}}
    +\newglossaryentry{dog}{name={dog},description={canine}}
    +\begin{document}
    +\gls{cat}.
    +\printglossaries
    +\glsaddallunused % <- make sure dog is also listed
    +\end{document}
    +
    +

    Corresponding glossaries-extra and bib2gls document code:

    -
    -\setglossarystyle{altlist} -
    -

    -

    Once the acronym style has been set, I can define my acronyms: +

    +\documentclass{article}
    +\usepackage[record]{glossaries-extra}
    +\GlsXtrLoadResources[src={entries},selection=all]
    +\begin{document}
    +\gls{cat}.
    +\printunsrtglossaries
    +\end{document}
    +
    +

    With the file entries.bib:

    -
    -\newacronym[description={set of tags for use in - 
    developing hypertext documents}]{html}{html}{Hyper - 
    Text Markup Language} - 
    \newacronym[description={language used to describe the - 
    layout of a document written in a markup language}]{css} - 
    {css}{Cascading Style Sheet} -
    -

    -

    The sample file sample-custom-acronym.tex illustrates this example.

    -
    -

    -

    ____________________________

    +
    +@entry{cat,name={cat},description={feline}}
    +@entry{dog,name={dog},description={canine}}
    +
    +

    -

    Example 24 (Italic and Upright Abbreviations) -

    Suppose I want to have some abbreviations in italic and some that just use the surrounding font. -Hard-coding this into the ⟨short⟩ argument of \newacronym can cause complications. -

    This example uses \glsaddstoragekey to add an extra field that can be used to store the formatting -declaration (such as \em). + id="ex:dual"> +

    Example 22 (Dual Entries) +

    The example file sample-dual.tex makes use of \glsadd to allow for an entry that should appear both in +the main glossary and in the list of acronyms. This example sets up the list of acronyms using the acronym +package option:

    -
    -\glsaddstoragekey{font}{}{\entryfont} -
    -

    This defines a new field/key called font, which defaults to nothing if it’s not explicitly set. This also defines a -command called \entryfont that’s analogous to \glsentrytext. A new style is then created to format -abbreviations that access this field. -

    There are two ways to do this. The first is to create a style that doesn’t use \glsgenacfmt -but instead provides a modified version that doesn’t use \acronymfont{short} but instead uses -{\entryfont{\glslabel}short}. The full format given by commands such as \genacrfullformat need to be -similarly adjusted. For example: +

    +\usepackage[acronym]{glossaries}
    +
    +

    A new command is then defined to make it easier to define dual entries:

    -
    -  \renewcommand*{\genacrfullformat}[2]{% - 
       \glsentrylong{##1}##2\space - 
       ({\entryfont{##1}\glsentryshort{##1}})% - 
      }% +
    +\newcommand*{\newdualentry}[5][]{%
    +  \newglossaryentry{main-#2}{name={#4},%
    +  text={#3\glsadd{#2}},%
    +  description={#5},%
    +  #1
    +  }%
    +  \newacronym{#2}{#3\glsadd{main-#2}}{#4}%
    +}
    +
    +

    This has the following syntax:

    +
    +\newdualentry[options]{label}{abbrv}{long}{description}
    -

    This will deal with commands like \gls but not commands like \acrshort which still use \acronymfont. -Another approach is to redefine \acronymfont to look up the required font declaration. Since \acronymfont -doesn’t take the entry label as an argument, the following will only work if \acronymfont is used in a context -where the label is provided by \glslabel. This is true in \gls, \acrshort and \acrfull. The redefinition is -now: +

    You can then define a new dual entry: -

    -
    -\renewcommand*{\acronymfont}[1]{{\entryfont{\glslabel}#1}}% +
    +\newdualentry{svm}% label
    +  {SVM}% abbreviation
    +  {support vector machine}% long form
    +  {Statistical pattern recognition technique}% description
    +
    +

    Now you can reference the acronym with \gls{svm} or you can reference the entry in the main glossary with +\gls{main-svm}. +

    This is just an example. In general, think twice before you add this kind of duplication. If all information +(short, long and description) can be provided in a single list, it’s redundant to provide a second list unless any of +the short forms start with a different letter to the associated long form, which may make it harder to +lookup. +

    Note that with bib2gls, there are special dual entry types that implement this behaviour. That is, if an +entry is referenced then its corresponding dual entry will automatically be selected as well. So there +is less need for \glsadd with bib2gls. (Although it can still be useful, as shown in Option 6.)
    -

    So the new style can be defined as: - - +

    -
    -\newacronymstyle{long-font-short} - 
    {% - 
      \GlsUseAcrEntryDispStyle{long-short}% - 
    } - 
    {% - 
      \GlsUseAcrStyleDefs{long-short}% - 
      \renewcommand*{\genacrfullformat}[2]{% - 
       \glsentrylong{##1}##2\space - 
       ({\entryfont{##1}\glsentryshort{##1}})% - 
      }% - 
      \renewcommand*{\Genacrfullformat}[2]{% - 
       \Glsentrylong{##1}##2\space - 
       ({\entryfont{##1}\glsentryshort{##1}})% - 
      }% - 
      \renewcommand*{\genplacrfullformat}[2]{% - 
       \glsentrylongpl{##1}##2\space - 
       ({\entryfont{##1}\glsentryshortpl{##1}})% - 
      }% - 
      \renewcommand*{\Genplacrfullformat}[2]{% - 
       \Glsentrylongpl{##1}##2\space - 
       ({\entryfont{##1}\glsentryshortpl{##1}})% - 
      }% - 
      \renewcommand*{\acronymfont}[1]{{\entryfont{\glslabel}##1}}% - 
      \renewcommand*{\acronymentry}[1]{{\entryfont{##1}\glsentryshort{##1}}}% - 
    } -
    -

    Remember the style needs to be set before defining the entries: - - -

    -
    -\setacronymstyle{long-font-short} -
    -

    -

    The complete document is contained in the sample file sample-font-abbr.tex.

    -

    -

    ____________________________

    -

    Some writers and publishing houses have started to drop full stops (periods) from upper case initials but -may still retain them for lower case abbreviations, while others may still use them for both upper and lower -case. This can cause complications. Chapter 12 of The TeXbook discusses the spacing between words but, -briefly, the default behaviour of TeX is to assume that an upper case character followed by a full stop and -space is an abbreviation, so the space is the default inter-word space whereas a lower case character followed by -a full stop and space is a word occurring at the end of a sentence. In the event that this isn’t true, you -need to make a manual adjustment using (back slash space) in place of just a space character -for an inter-word mid-sentence space and use \@ before the full stop to indicate the end of the -sentence. -

    For example: +

    +

    ____________________________

    -

    -
    -I was awarded a B.Sc. and a Ph.D. (From the same place.) +

    +

    Top

    11. Cross-Referencing Entries

    +

    You must use \makeglossaries (Options 2 or 3) or \makenoidxglossaries (Option 1) before +defining any terms that cross-reference entries. If any of the terms that you have cross-referenced +don’t appear in the glossary, check that you have put \makeglossaries/\makenoidxglossaries +before all entry definitions. The glossaries-extra package provides better cross-reference handling.
    -

    is typeset as -
    I was awarded a B.Sc. and a Ph.D. (From the same place.) -
    -The spacing is more noticeable with the typewriter font: +

    +

    There are several ways of cross-referencing entries in the glossary: +

      +
    1. +

      You can use commands such as \gls in the entries description. For example:

      -
      -\ttfamily - 
      I was awarded a B.Sc. and a Ph.D. (From the same place.) -
      -

      is typeset as -
      I was awarded a B.Sc. and a Ph.D. (From the same place.) -
      -The lower case letter at the end of “B.Sc.” is confusing TeX into thinking that the full stop after it marks the -end of the sentence. Whereas the upper case letter at the end of “Ph.D.” has confused TeX into thinking that -the following full stop is just part of the abbreviation. These can be corrected: +

      +     \newglossaryentry{apple}{name=apple,
      +     description={firm, round fruit. See also \gls{pear}}}
      +
      +

      Note that with this method, if you don’t use the cross-referenced term in the main part of the document, + you will need two runs of makeglossaries: +

      
      +     
      pdflatex filename +
      makeglossaries filename +
      pdflatex filename +
      makeglossaries filename +
      pdflatex filename +
      +
      + This is because the \gls in the description won’t be detected until the glossary has been created (unless + the description is used elsewhere in the document with \glsentrydesc). Take care not to use \glsdesc + (or \Glsdesc) in this case as it will cause a nested link. +

    2. +
    3. +

      As described in §??sec:newglosentry Defining Glossary Entries, you can use the see key when you define + the entry. For example:

      -
      -I was awarded a B.Sc.\ and a Ph.D\@. (From the same place.) -
      -

      -

      This situation is a bit problematic for glossaries. The full stops can form part of the ⟨short⟩ argument of -\newacronym and the B.Sc.\␣ part can be dealt with by remembering to add \␣ (for example, -\gls{bsc}\␣) but the end of sentence case is more troublesome as you need to omit the sentence -terminating full stop (to avoid two dots) which can make the source code look a little strange -but you also need to adjust the space factor, which is usually done by inserting \@ before the full -stop. -

      The next example shows one way of achieving this. (Note that the supplemental glossaries-extra -package provides a much simpler way of doing this, which you may prefer to use. See the initialisms -example.) - -

      Example 25 (Abbreviations with Full Stops (Periods)) -

      As from version 4.16, there’s now a hook (\glspostlinkhook) that’s called at the very end of the -\gls-like and \glstext-like commands. This can be redefined to check if the following character is a full stop. -The amsgen package (which is automatically loaded by glossaries) provides an internal command called -\new@ifnextchar that can be used to determine if the given character appears next. (For more information see -the amsgen documentation.) -

      It’s possible that I may also want acronyms or contractions in my document, so I need some way to -differentiate between them. Here I’m going to use the same method as in example 4 where a new field is defined -to indicate the type of abbreviation: +

      +     \newglossaryentry{MaclaurinSeries}{name={Maclaurin
      +     series},
      +     description={Series expansion},
      +     see={TaylorsTheorem}}
      +
      +

      Note that in this case, the entry with the see key will automatically be added to the glossary, but the + cross-referenced entry won’t. You therefore need to ensure that you use the cross-referenced term with the + commands described in §??sec:glslink Links to Glossary Entries or §??sec:glsadd Adding an Entry to the + Glossary Without Generating Text. +

      The “see” tag is produce using \seename, but can be overridden in specific instances using square brackets + at the start of the see value. For example:

      -
      -\glsaddstoragekey{abbrtype}{word}{\abbrtype} - 
      \newcommand*{\newabbr}[1][]{\newacronym[abbrtype=initials,#1]} -
      -

      Now I just use + \newglossaryentry{MaclaurinSeries}{name={Maclaurin + series}, + description={Series expansion}, + see=[see also]{TaylorsTheorem}} + +

      Take care if you want to use the optional argument of commands such as \newacronym for the acronyms, for example, + id="dx1-147016"> or \newterm as + the value will need to be grouped. For example:

      -
      -\newacronym{laser}{laser}{light amplification by stimulated - 
      emission of radiation} -
      -

      and my new command \newabbr for initials, for example, +

      +     \newterm{seal}
      +     \newterm[see={[see also]seal}]{sea lion}
      +
      +

      Similarly if the value contains a list. For example:

      -
      -\newabbr{eg}{e.g.}{exempli gratia} - 
      \newabbr{ie}{i.e.}{id est} - 
      \newabbr{bsc}{B.Sc.}{Bachelor of Science} - 
      \newabbr{ba}{B.A.}{Bachelor of Arts} - 
      \newabbr{agm}{A.G.M.}{annual general meeting} -
      -

      Within \glspostlinkhook the entry’s label can be accessed using \glslabel and \ifglsfieldeq can be used -to determine if the current entry has the new abbrtype field set to “initials”. If it doesn’t, then nothing needs to -happen, but if it does, a check is performed to see if the next character is a full stop. If it is, this signals the -end of a sentence otherwise it’s mid-sentence. -

      Remember that internal commands within the document file (rather than in a class or package) need to be -placed between \makeatletter and \makeatother: +

      +     \glossaryentry{lemon}{
      +       name={lemon},
      +       description={Yellow citrus fruit}
      +     }
      +     \glossaryentry{lime}
      +     {
      +       name={lime},
      +       description={Green citrus fruit}
      +     }
      +     \glossaryentry{citrus}
      +     {
      +       name={citrus},
      +       description={Plant in the Rutaceae family},
      +       see={lemon,lime}
      +     }
      +
      +

      +

    4. +
    5. +

      After you have defined the entry, use +


      \glssee[tag]{label}{xr label list}

      +

      + where ⟨xr label list⟩ is a comma-separated list of entry labels to be cross-referenced, ⟨label⟩ is the label of the + entry doing the cross-referencing and ⟨tag⟩ is the “see” tag. (The default value of ⟨tag⟩ is \seename.) For + example:

      -
      -\makeatletter - 
      \renewcommand{\glspostlinkhook}{% - 
       \ifglsfieldeq{\glslabel}{abbrtype}{initials}% - 
       {\new@ifnextchar.\doendsentence\doendword} - 
       {}% - 
      } - 
      \makeatother -
      -

      In the event that a full stop is found \doendsentence is performed but it will be followed by the full stop, -which needs to be discarded. Otherwise \doendword will be done but it won’t be followed by a full stop so -there’s nothing to discard. The definitions for these commands are: +

      +     \glssee[see also]{series}{FourierSeries,TaylorsTheorem}
      +
      +

      Note that this automatically adds the entry given by ⟨label⟩ to the glossary but doesn’t add the + cross-referenced entries (specified by ⟨xr label list⟩) to the glossary.

    +

    In both cases 2 and 3 above, the cross-referenced information appears in the number list, whereas in case 1, +the cross-referenced information appears in the description. (See the sample-crossref.tex example file that +comes with this package.) This means that in cases 2 and 3, the cross-referencing information won’t appear if +you have suppressed the number list. In this case, you will need to activate the number list for +the given entries using nonumberlist=false. Alternatively, if you just use the see key instead +of \glssee, you can automatically activate the number list using the seeautonumberlist package +option. +

    bib2gls provides much better support for cross-references. See, for example, Gallery: Cross-References +(bib2gls).
    +

    +

    +

    Top

    11.1 Customising Cross-reference Text

    +

    When you use either the see key or the command \glssee, the cross-referencing information will be typeset in +the glossary according to: +


    \glsseeformat[tag]{label-list}{location}

    +

    +The default definition of \glsseeformat is: +
    \emph{tag} \glsseelist{label-list} +
    +Note that the location is always ignored.11.1 +For example, if you want the tag to appear in bold, you can +do:11.2

    -
    -\newcommand{\doendsentence}[1]{\spacefactor=10000{}} - 
    \newcommand{\doendword}{\spacefactor=1000{}} -
    -

    Now, I can just do \gls{bsc} mid-sentence and \gls{phd}. at the end of the sentence. The terminating full -stop will be discarded in the latter case, but it won’t be discarded in, say, \gls{laser}. as that doesn’t have -the abbrtype field set to “initials”. -

    This also works on first use when the style is set to one of the ⟨long⟩ (⟨short⟩) styles but it will fail with the -⟨short⟩ (⟨long⟩) styles as in this case the terminating full stop shouldn’t be discarded. Since \glspostlinkhook is -used after the first use flag has been unset for the entry, this can’t be fixed by simply checking with -\ifglsused. One possible solution to this is to redefine \glslinkpostsetkeys to check for the first use -flag and define a macro that can then be used in \glspostlinkhook. -

    The other thing to consider is what to do with plurals. One possibility is to check for plural use -within \doendsentence (using \glsifplural) and put the full stop back if the plural has been -used. -

    The complete document is contained in the sample file sample-dot-abbr.tex.

    -
    -

    -

    ____________________________

    -

    +

    +\renewcommand*{\glsseeformat}[3][\seename]{\textbf{#1}
    + \glsseelist{#2}}
    +
    +

    +

    The list of labels is dealt with by \glsseelist, which iterates through the list and typesets each entry in +the label. The entries are separated by +


    \glsseesep

    +

    +or (for the last pair) +


    \glsseelastsep

    +

    +These default to “,\space” and “\space\andname\space” respectively. The list entry text is displayed +using: +


    \glsseeitemformat{label}

    +

    +This defaults to \glsentrytext{label}.11.3 +For example, to make the cross-referenced list use small caps: + +

    -

    Top

    13.2 Displaying the List of Acronyms

    -

    The list of acronyms is just like any other type of glossary and can be displayed on its own using: -

    -Option 1:
    -
    -
    - \printnoidxglossary[type=\acronymtype] +
    +\renewcommand{\glsseeitemformat}[1]{%
    +  \textsc{\glsentrytext{#1}}}
    +
    +

    +

    The glossaries-extra package redefines \glsseeitemformat and additionally provides \glsxtrhiername +which can be used as an alternative to \glsentrytext. See the glossaries-extra manual for further details.
    -
    -
    -Options 2 and 3:
    -
    +

    +

    You can use \glsseeformat and \glsseelist in the main body of the text, but they won’t automatically +add the cross-referenced entries to the glossary. If you want them added with that location, you can +do: -
    - \printglossary[type=\acronymtype] -
    -
    -

    (If you use the acronym package option you can also use

    -
    - \printacronyms[options] -
    -
    as a synonym for
    -
    - \printglossary[type=\acronymtype,options] -
    -
    See §2.7 Acronym and Abbreviation Options.) -
    -

    Alternatively the list of acronyms can be displayed with all the other glossaries using: -

    -Option 1:
    \printnoidxglossaries -
    -Options 2 and 3:
    \printglossaries
    -

    However, care must be taken to choose a glossary style that’s appropriate to your acronym style. -Alternatively, you can define your own custom style (see §15.2 Defining your own glossary style for further -details). -

    -

    Top

    13.3 Upgrading From the glossary Package

    -

    Users of the obsolete glossary package may recall that the syntax used to define new acronyms has changed with -the replacement glossaries package. In addition, the old glossary package created the command \acr-name⟩ when -defining the acronym ⟨acr-name⟩. -

    In order to facilitate migrating from the old package to the new one, the glossaries -package13.1 -provides the command: -


    \oldacronym[label]{abbrv}{long}{key-val list +Some information (see also +\glsseelist{FourierSeries,TaylorsTheorem}% +\glsadd{FourierSeries}\glsadd{TaylorsTheorem}). + +

    +

    + + +

    +

    +

    Top

    12. Number Lists

    +

    Each entry in the glossary has an associated number list. By default, these numbers refer to the pages on +which that entry has been indexed (using any of the commands described in §??sec:glslink Links to Glossary +Entries and §??sec:glsadd Adding an Entry to the Glossary Without Generating Text). The number list +can be suppressed using the nonumberlist package option, or an alternative counter can be set as +the default using the counter package option. The number list is also referred to as the location +list. +

    Number lists are more common with indexes rather than glossaries (although you can use the glossaries +package for indexes as well). However, the glossaries package makes use of makeindex or xindy to hierarchically +sort and collate the entries since they are readily available with most modern TeX distributions. Since these are +both designed as indexing applications they both require that terms either have a valid location or a +cross-reference. Even if you use nonumberlist, the locations must still be provided and acceptable to the indexing +application or they will cause an error during the indexing stage, which will interrupt the document build. +However, if you’re not interested in the locations, each entry only needs to be indexed once, so consider using +indexonlyfirst, which can improve the document build time by only indexing the first use of each +term. +

    The \glsaddall command (see §??sec:glsadd Adding an Entry to the Glossary Without Generating Text), +which is used to automatically index all entries, iterates over all defined entries and does \glsadd{label} for +each entry (where ⟨label⟩ is that entry’s label). This means that \glsaddall automatically adds +the same location to every entry’s number list, which looks weird if the number list hasn’t been +suppressed. +

    With Option 4, the indexing is performed by bib2gls, which was specifically designed for the glossaries-extra +package. So it will allow any location format, and its selection=all option will select all entries without +adding an unwanted location to the number list. If bib2gls can deduce a numerical value for a location, it will +attempt to form a range over consecutive locations, otherwise it won’t try to form a range and the location will +just form an individual item in the list. Option 1 also allows any location but it doesn’t form +ranges. +

    +

    Top

    12.1 Encap Values (Location Formats)

    +

    Each location in the number list is encapsulated with a command formed from the encap value. By default this +is the \glsnumberformat command, which corresponds to the encap glsnumberformat, but this may be +overridden using the format key in the optional argument to commands like \gls. (See §??sec:glslink Links to +Glossary Entries.) For example, you may want the location to appear in bold to indicate the principle use of a +term or symbol. If the encap starts with an open parenthesis ( this signifies the start of a range and if the encap +starts with close parenthesis ) this signifies the end of a range. These must always occur in matching +pairs. +

    The glossaries package provides the command: +


    \glsignore{text}

    +

    +which ignores its argument. This is the format used by \glsaddallunused to suppress the location, +which works fine as long as no other locations are added to the number list. For example, if you use +\gls{sample} on page 2 then reset the first use flag and then use \glsaddallunused on page 10, the +number list for sample will be 2, \glsignore{10} which will result in “2, ” which has a spurious -

    -This uses the same syntax as the glossary package’s method of defining acronyms. It is equivalent to: - -
    \newacronym[key-val list]{label}{abbrv}{long} -
    -In addition, \oldacronym also defines the commands \label⟩, which is equivalent to \gls{label}, and \label*, -which is equivalent to \Gls

    This isn’t a problem with bib2gls because you would need to use selection=all instead of +\glsaddallunused, but even if you explicitly had used glsignore, for example, \gls[format=glsignore] +{label}. If ⟨label⟩ is omitted, ⟨abbrv⟩ is used. Since commands names must consist only -of alphabetical characters, ⟨label⟩ must also only consist of alphabetical characters. Note that \label⟩ doesn’t allow -you to use the first optional argument of \gls or \Gls — you will need to explicitly use \gls or \Gls to change -the settings. -

    Recall that, in general, LaTeX ignores spaces following command names consisting of alphabetical -characters. This is also true for \label⟩ unless you additionally load the xspace package, but be aware that there -are some issues with using xspace.13.2
    -

    - -

    The glossaries package doesn’t load the xspace package since there are both advantages and disadvantages to -using \xspace in \label⟩. If you don’t use the xspace package you need to explicitly force a space -using \␣ (backslash space) however you can follow \label⟩ with additional text in square brackets -(the final optional argument to \gls). If you use the xspace package you don’t need to escape -the spaces but you can’t use the optional argument to insert text (you will have to explicitly use +class="cmtt-10">}, then bib2gls will recognise glsignore as a special encap indicating an ignored location, so it will +select the entry but not add that location to the number list. It’s a problem for all the other indexing +options. +

    Complications can arise if you use different encap values for the same location. For example, suppose on +page 10 you have both the default glsnumberformat and textbf encaps. While it may seem apparent that \gls). -

    To illustrate this, suppose I define the acronym “abc” as follows: +class="cmtt-10">textbf should override glsnumberformat in this situation, the indexing application may not know it. This is +therefore something you need to be careful about if you use the format key or if you use a command that +implicitly sets it. +

    In the case of xindy, it only accepts one encap (according to the order of precedence given in the xindy +module) and discards the others for identical locations (for the same entry). This can cause a problem if a +discarded location forms the start or end of a range. +

    In the case of makeindex, it accepts different encaps for the same location, but warns about it. This leads to +a number list with the same location repeated in different formats. If you use the makeglossaries Perl script +with Option 2 it will detect makeindex’s warning and attempt to fix the problem, ensuring that the +glsnumberformat encap always has the least precedence unless it includes a range identifier. Other conflicting +encaps will have the last one override earlier ones for the same location with range identifiers taking +priority. +

    No discard occurs with Option 1 so again you get the same location repeated in different formats. With +Option 4, bib2gls will discard according to order of precedence, giving priority to start and end range encaps. +(See the bib2gls manual for further details.) +

    +

    +

    Top

    12.2 Locations

    +

    Neither Option 1 nor Option 4 care about the location syntax as long as it’s valid LaTeX code (and doesn’t +contain fragile commands). In both cases, the indexing is performed by writing a line to the aux file. The write +operation is deferred to avoid the problems associated with TeX’s asynchronous output routine. (See, for +example, Finding if you’re on an odd or an even page for more details on this issue.) Unfortunately +Options 2 and 3 are far more problematic and need some complex code to deal with awkward +locations. +

    If you know that your locations will always expand to a format acceptable to your chosen indexing +application then use the package option esclocations=false to bypass this operation. This setting only affects +Options 2 and 3 as the problem doesn’t arise with the other indexing options. +

    Both makeindex and xindy are fussy about the syntax of the locations. In the case of makeindex, only the +numbering system obtained with \arabic, \roman, \Roman, \alph and \Alph or composites formed from them +with the same separator (set with \glsSetCompositor{char}) are accepted. (makeindex won’t accept an empty +location.) In the case of xindy, you can define your own location classes, but if the location contains a robust +command then the leading backslash must be escaped. The glossaries package tries to do this, but it’s caught +between two conflicting requirements: +

      + + +
    1. +

      The location must be fully expanded before \ can be converted to \\ (there’s no point converting + \thepage to \\thepage); +

    2. +
    3. +

      The page number can’t be expanded until the deferred write operation (so \c@page mustn’t + expand in the previous step but \the\c@page mustn’t be converted to \\the\\c@page and + \number\c@page mustn’t be converted to \\number\\c@page etc).

    +

    There’s a certain amount of trickery needed to deal with this conflict and the code requires the location to be in a +form that doesn’t embed the counter’s internal register in commands like \value. For example, +suppose you have a robust command called \tallynum that takes a number as the argument and an +expandable command called \tally that converts a counter name into the associated register or +number to pass to \tallynum. Let’s suppose that this command is used to represent the page +number: + + +

    +
    +\renewcommand{\thepage}{\tally{page}}
    +
    +

    Now let’s suppose that a term is indexed at the beginning of page 2 at the end of a paragraph that started on +page 1. With xindy, the location \tally{page} needs to be written to the file as \\tallynum{2}. If it’s written +as \tallynum{2} then xindy will interpret \t as the character “t” (which means the location would appear as +“tallynum2”). So glossaries tries to expand \thepage without expanding \c@page and then escapes all the +backslashes, except for the page counter’s internal command. The following definitions of \tally will work: +

    +
      +
    • +

      In the following, \arabic works as its internal command \c@arabic is temporarily redefined to check for + \c@page:

      -
      -\oldacronym{abc}{example acronym}{} -
      -

      This will create the command \abc and its starred version \abc*. Table 13.2 illustrates the effect of \abc (on -subsequent use) according to whether or not the xspace package has been loaded. As can be seen -from the final row in the table, the xspace package prevents the optional argument from being -recognised. +

      +     \newcommand{\tally}[1]{\tallynum{\arabic{#1}}}
      +
      +

      +

    • +
    • +

      The form \expandafter\the\csname c@counter\endcsname also works (provided \the is allowed to be + temporarily redefined, see below): + +

      -
      +
      +     \newcommand{\tally}[1]{%
      +      \tallynum{\expandafter\the\csname c@#1\endcsname}}
      +
      +

      +

    • +
    • +

      \expandafter\the\value{counter} now also works (with the same condition as above): -


      +

      +
      +     \newcommand{\tally}[1]{\tallynum{\expandafter\the\value{#1}}}
      +
      +

      +

    • +
    • +

      Another variation that will work: -

      Table 13.2: The effect of using xspace with \oldacronym
      -
      - - - - -
      Code With xspace Without xspace
      \abc. abc. abc.
      \abc xyz abc xyz abcxyz
      \abc\ xyz abc xyz abc xyz
      \abc* xyz Abc xyz Abc xyz
      \abc[’s] xyz abc [’s] xyz abc’s xyz
      -
      +

      +
      +     \newcommand{\tally}[1]{%
      +       \expandafter\tallynum\expandafter{\the\csname c@#1\endcsname}}
      +
      +

      +

    • +
    • +

      and also: -


    -
    +

    +
    +     \newcommand{\tally}[1]{\tallynum{\the\csname c@#1\endcsname}}
    +
    +

    +

    The following don’t work:

    +
      +
    • +

      This definition leads to the premature expansion of \c@page to “1” when, in this case, it should be + “2”: -

    -

    Top

    14. Unsetting and Resetting Entry Flags

    -

    When using the \gls-like commands it is possible that you may want to use the value given by the first -key, even though you have already used the glossary entry. Conversely, you may want to use the value given by -the text key, even though you haven’t used the glossary entry. The former can be achieved by one of the -following commands: -


    \glsreset{label}

    -

    -


    \glslocalreset{label}

    -

    -while the latter can be achieved by one of the following commands: -


    \glsunset{label}

    -

    -


    \glslocalunset{label}

    -

    -You can also reset or unset all entries for a given glossary or list of glossaries using: -


    \glsresetall[glossary list]

    -

    -


    \glslocalresetall[glossary list]

    -

    -


    \glsunsetall[glossary list]

    -

    -


    \glslocalunsetall[glossary list]

    -

    -where ⟨glossary list⟩ is a comma-separated list of glossary labels. If omitted, all defined glossaries are assumed -(except for the ignored ones). For example, to reset all entries in the main glossary and the list of -acronyms: +

    +
    +     \newcommand{\tally}[1]{\tallynum{\the\value{#1}}}
    +
    +

    +

    +
  • +

    This definition leads to \\c@page in the glossary file:

    -
    -\glsresetall[main,acronym] -
    -

    -

    You can determine whether an entry’s first use flag is set using: -


    \ifglsused{label}{true part}{false part + \newcommand{\tally}[1]{\tallynum{\csname c@#1\endcsname}} + +

  • +

    If you have a numbering system where \cs name{page} expands to \internal cs name\c@page (for example, if +\tally{page} expands to \tallynum\c@page) then you need to use: +


    \glsaddprotectedpagefmt{internal cs name}

    -

    -where ⟨label⟩ is the label of the required entry. If the entry has been used, ⟨true part⟩ will be done, otherwise ⟨false +

    +Note that the backslash must be omitted from ⟨internal cs name⟩ and the corresponding command must be able +to process a count register as the (sole) argument. +

    For example, suppose you have a style samplenum that is implemented as follows: + + +

    +
    + \newcommand*{\samplenum}[1]{%
    +   \expandafter\@samplenum\csname c@#1\endcsname}
    + \newcommand*{\@samplenum}[1]{\two@digits{#1}}
    +
    +

    (That is, it displays the value of the counter as a two-digit number.) Then to ensure the location is correct for +entries in page-spanning paragraphs, you need to do: + + +

    +
    +\glsaddprotectedpagefmt{@samplenum}
    +
    +

    (If you are using a different counter for the location, such as section or equation, you don’t need to worry +about this provided the inner command is expandable.) +

    If the inner macro (as given by \internal cs name⟩) contains non-expandable commands then you may need +to redefine \glsinternal cs namepage after using

    +
    part⟩ will be done. -

    Be careful when using \gls-like commands within an environment or command argument that gets -processed multiple times as it can cause unwanted side-effects when the first use displayed text is different from -subsequent use.
    -

    -

    For example, the frame environment in beamer processes its argument for each overlay. This means that the -first use flag will be unset on the first overlay and subsequent overlays will use the non-first use -form. -

    Consider the following example: +class="cmtt-10">\glsaddprotectedpagefmt{⟨internal cs name} +

    +
    This command doesn’t take any arguments as the location is assumed to be given by \c@page because that’s +the only occasion this command should be used. For example, suppose now my page counter format uses small +caps Roman numerals: + + +
    + \newcommand*{\samplenum}[1]{%
    +  \expandafter\@samplenum\csname c@#1\endcsname}
    + \newcommand*{\@samplenum}[1]{\textsc{\romannumeral#1}}
    +
    +

    Again, the inner macro needs to be identified using: + + +

    +
    +\glsaddprotectedpagefmt{@samplenum}
    +
    +

    However, since \textsc isn’t fully expandable, the location is written to the file as \textsc  {i} (for page 1), +\textsc  {ii} (for page 2), etc. This format may cause a problem for the indexing application +(particularly for makeindex). To compensate for this, the \glsinternal cs namepage command +may be redefined so that it expands to a format that’s acceptable to the indexing application. For +example: + + +

    +
    +\renewcommand*{\gls@samplenumpage}{\romannumeral\c@page}
    +
    +

    While this modification means that the number list in the glossary won’t exactly match the format of the page +numbers (displaying lower case Roman numbers instead of small cap Roman numerals) this method +will at least work correctly for both makeindex and xindy. If you are using xindy, the following +definition:

    -
    -\documentclass{beamer} - 
    \usepackage{glossaries} - 
    \newacronym{svm}{SVM}{support vector machine} - 
    \begin{document} - 
    \begin{frame} - 
     \frametitle{Frame 1} - 
     \begin{itemize} - 
      \item<+-> \gls{svm} - 
      \item<+-> Stuff. - 
     \end{itemize} - 
    \end{frame} - 
    \end{document} -
    -

    -

    On the first overlay, \gls{svm} produces “support vector machine (SVM)” and then unsets the first use flag. -When the second overlay is processed, \gls{svm} now produces “SVM”, which is unlikely to be the desired -effect. I don’t know anyway around this and I can only offer two suggestions. -

    Firstly, unset all acronyms at the start of the document and explicitly use \acrfull when you want the full -version to be displayed: +

    + \renewcommand*{\gls@samplenumpage}{%
    +   \glsbackslash\string\textsc{\romannumeral\c@page}}
    +
    +

    combined with

    -
    -\documentclass{beamer} - 
    \usepackage{glossaries} - 
    \newacronym{svm}{SVM}{support vector machine} - 
    \glsunsetall - 
    \begin{document} - 
    \begin{frame} - 
     \frametitle{Frame 1} - 
     \begin{itemize} - 
      \item<+-> \acrfull{svm} - 
      \item<+-> Stuff. - 
     \end{itemize} - 
    \end{frame} - 
    \end{document} -
    -

    -

    Secondly, explicitly reset each acronym on first use: +

    +\GlsAddXdyLocation{romansc}{:sep "\string\textsc\glsopenbrace"
    + "roman-numbers-lowercase" :sep "\glsclosebrace"}
    +
    +

    will now have lowercase Roman numerals in the location list (see §??sec:xindyloc Locations and Number lists for +further details on that command). Take care of the backslashes. The location (which ends up in the +:locref attribute) needs \\ but the location class (identified with \GlsAddXdyLocation) just +has a single backslash. Note that this example will cause problems if your locations should be +hyperlinks. +

    Another possibility that may work with both makeindex and xindy is to redefine \glsinternal cs namepage +(\gls@samplenumpage in this example) to just expand to the decimal page number (\number\c@page) and +redefine \glsnumberformat to change the displayed format:

    -
    -\begin{frame} - 
     \frametitle{Frame 1} - 
     \begin{itemize} - 
      \item<+-> \glsreset{svm}\gls{svm} - 
      \item<+-> Stuff. - 
     \end{itemize} - 
    \end{frame} -
    -

    These are non-optimal, but the beamer class is too complex for me to provide a programmatic solution. Other -potentially problematic environments are some tabular-like environments (but not tabular itself) that process the -contents in order to work out the column widths and then reprocess the contents to do the actual -typesetting. -

    The amsmath environments, such as align, also process their contents multiple times, but the glossaries -package now checks for this. For tabularx, you need to explicitly patch it by placing \glspatchtabularx in the -preamble (or anywhere before the problematic use of tabularx). -

    If you need to use commands like \gls in any problematic context that interferes with the first use flag, -then you can try using the buffering system provided with glossaries-extra. See the “First Use Flag” section of -the glossaries-extra manual.
    -

    +

    +\renewcommand*{\gls@samplenumpage}{\number\c@page}
    +\renewcommand*{\glsnumberformat}[1]{\textsc{\romannumeral#1}}
    +
    +

    +

    If you redefine \glsinternal cs namepage, you must make sure that \c@page is expanded when it’s written +to the file. (So don’t, for example, hide \c@page inside a robust command.)
    +

    +

    The mechanism that allows this to work temporarily redefines \the and \number while it processes the +location. If this causes a problem you can disallow it using +


    \glswrallowprimitivemodsfalse

    +

    +but you will need to find some other way to ensure the location expands correctly. +

    -

    Top

    14.1 Counting the Number of Times an Entry has been Used (First Use Flag Unset)

    -

    As from version 4.14, it’s now possible to keep track of how many times an entry is used. That is, -how many times the first use flag is unset. Note that the supplemental glossaries-extra package -improves this function and also provides per-unit counting, which isn’t available with the glossaries -package. -

    This function is disabled by default as it adds extra overhead to the document build time and -also switches \newglossaryentry (and therefore \newacronym) into a preamble-only command. -
    -

    -

    To enable this function, use -


    \glsenableentrycount

    -

    -before defining your entries. This adds two extra (internal) fields to entries: currcount and prevcount. -

    The currcount field keeps track of how many times \glsunset is used within the document. A local unset -(using \glslocalunset) performs a local rather than global increment to currcount. Remember that -not all commands use \glsunset. Only the \gls-like commands do this. The reset commands +

    Top

    12.3 Range Formations

    +

    Both makeindex and xindy (Options 2 and 3) concatenate a sequence of 3 or more consecutive +pages into a range. With xindy (Option 3) you can vary the minimum sequence length using \glsreset and \glslocalreset reset this field back to zero (where \glslocalreset performs a local -change). - - -

    The prevcount field stores the final value of the currcount field from the previous run. This value is read -from the aux file at the beginning of the document environment. -

    You can access these fields using -


    \glsentrycurrcount{label\GlsSetXdyMinRangeLength{n} where ⟨n⟩ is either an integer or the keyword none which indicates that +there should be no range formation (see §??sec:xindyloc Locations and Number lists for further +details). +

    Note that \GlsSetXdyMinRangeLength must be used before \makeglossaries and has no effect if \noist +is used.
    +

    +

    With both makeindex and xindy (Options 2 and 3), you can replace the separator and the closing number +in the range using: +


    \glsSetSuffixF{suffix}

    -

    -for the currcount field, and -


    \glsentryprevcount{label

    +


    \glsSetSuffixFF{suffix}

    -

    -for the prevcount field. -

    These commands are only defined if you have used \glsenableentrycount.
    -

    -

    For example: +

    +where the former command specifies the suffix to use for a 2 page list and the latter specifies the suffix to use for +longer lists. For example:

    -
    -\documentclass{article} - 
    \usepackage{glossaries} - 
    \makeglossaries - 
    \glsenableentrycount - 
    \newglossaryentry{apple}{name=apple,description={a fruit}} - 
    \begin{document} - 
    Total usage on previous run: \glsentryprevcount{apple}. - 
    \gls{apple}. \gls{apple}. \glsadd{apple}\glsentrytext{apple}. - 
    \glslink{apple}{apple}. \glsdisp{apple}{apple}. \Gls{apple}. - 
    Number of times apple has been used: \glsentrycurrcount{apple}. - 
    \end{document} -
    -

    On the first LaTeX run, \glsentryprevcount{apple} produces 0. At the end of the document, -\glsentrycurrcount{apple} produces 4. This is because the only commands that have incremented the entry -count are those that use \glsunset. That is: \gls, \glsdisp and \Gls. The other commands used in the above -example, \glsadd, \glsentrytext and \glslink, don’t use \glsunset so they don’t increment the -entry count. On the next LaTeX run, \glsentryprevcount{apple} now produces 4 as that was -the value of the currcount field for the apple entry at the end of the document on the previous -run. -

    When you enable the entry count using \glsenableentrycount, you also enable the following -commands: -


    \cgls[options]{label}[insert]

    -

    -(no case-change, singular) -


    \cglspl[options]{label}[insert]

    -

    -(no case-change, plural) -


    \cGls[options]{label}[insert]

    -

    -(first letter uppercase, singular), and -


    \cGlspl[options]{label}[insert]

    -

    -(first letter uppercase, plural). These all have plus and starred variants like the analogous \gls, \glspl, \Gls -and \Glspl commands. -

    If you don’t use \glsenableentrycount, these commands behave like \gls, \glspl, \Gls and \Glspl, -respectively, only there will be a warning that you haven’t enabled entry counting. If you have enabled entry -counting with \glsenableentrycount then these commands test if \glsentryprevcount{label} equals 1. If it -doesn’t then the analogous \gls etc will be used. If it does, then the first optional argument will be ignored and -

    +
    +\glsSetSuffixF{f.}
    +\glsSetSuffixFF{ff.}
    +
    +

    Note that if you use xindy (Option 3), you will also need to set the minimum range length to 1 if you want to +change these suffixes: -

    -⟨cs format{ +
    +\GlsSetXdyMinRangeLength{1}
    +
    +

    Note that if you use the hyperref package, you will need to use \nohyperpage in the suffix to ensure that the +hyperlinks work correctly. For example: + + +

    +
    +\glsSetSuffixF{\nohyperpage{f.}}
    +\glsSetSuffixFF{\nohyperpage{ff.}}
    +
    +

    +

    Note that \glsSetSuffixF and \glsSetSuffixFF must be used before \makeglossaries and have no +effect if \noist is used.
    +

    +

    It’s also possible to concatenate a sequence of consecutive locations into a range or have suffixes with +Option 4, but with bib2gls these implicit ranges can’t be merged with explicit ranges (created with the ( and +) encaps). See the bib2gls manual for further details. +

    Option 1 doesn’t form ranges. However, with this option you can iterate over an entry’s number list +using: +


    \glsnumberlistloop{label}{insert}\glsunset{label} -
    -
    will be performed, where ⟨cs format⟩ is a command that takes two arguments. The command used depends -whether you have used \cgls, \cglspl, \cGls or \cGlspl. -


    \cglsformat{labelhandler cs}{insertxr handler cs}

    -

    -This command is used by \cgls and defaults to

    -
    -\glsentrylong{label}insert⟩ -
    -
    if the entry given by ⟨label⟩ has a long form or
    -
    -\glsentryfirst{label}insert⟩ -
    -
    otherwise. -


    \cglsplformat{label

    +where ⟨label⟩ is the entry’s label and ⟨handler cs⟩ is a handler control sequence of the form: +


    handler cs{prefix}{insert}

    -

    -This command is used by \cglspl and defaults to

    -
    -\glsentrylongpl{label}insert⟩ -
    -
    if the entry given by ⟨label⟩ has a long form or
    -
    -\glsentryfirstplural{label}insert⟩ -
    -
    otherwise. -


    \cGlsformat{labelcounter}{insertformat}{location}

    -

    -This command is used by \cGls and defaults to

    -
    -\Glsentrylong{label}insert⟩ -
    -
    if the entry given by ⟨label⟩ has a long form or
    +

    +where ⟨prefix⟩ is the hyperref prefix, ⟨counter⟩ is the name of the counter used for the location, ⟨format⟩ is the +format used to display the location (e.g. textbf) and ⟨location⟩ is the location. The third argument +is the control sequence to use for any cross-references in the list. This handler should have the +syntax: +


    xr handler cs[tag]{xr list}

    +

    +where ⟨tag⟩ is the cross-referenced text (e.g. “see”) and ⟨xr list⟩ is a comma-separated list of labels. (This actually +has a third argument but it’s always empty when used with Option 1.) +

    For example, if on page 12 I have used -

    -\Glsentryfirst{label}insert⟩ -
    -
    otherwise. -


    \cGlsplformat{label}{insert}

    -

    -This command is used by \cGlspl and defaults to

    -
    -\Glsentrylongpl{label}insert⟩ -
    -
    if the entry given by ⟨label⟩ has a long form or
    -
    -\Glsentryfirstplural{label}insert⟩ -
    -
    otherwise. -

    This means that if the previous count for the given entry was 1, the entry won’t be hyperlinked with the -\cgls-like commands and they won’t add a line to the external glossary file. If you haven’t used any of the -other commands that add information to glossary file (such as \glsadd or the \glstext-like commands) then -the entry won’t appear in the glossary. -

    Remember that since these commands use \glsentryprevcount you need to run LaTeX twice to ensure -they work correctly. The document build order is now (at least): (pdf)latex, (pdf)latex, makeglossaries, -(pdf)latex. - -

    Example 26 (Don’t index entries that are only used once) -

    In this example, the abbreviations that have only been used once (on the previous run) only have their long -form shown with \cgls. +

    +
    +\gls[format=textbf]{apple}
    +
    +

    and on page 18 I have used

    -
    -\documentclass{article} - 
    \usepackage[colorlinks]{hyperref} - 
    \usepackage[acronym]{glossaries} - 
    \makeglossaries - 
    \glsenableentrycount - 
    \setacronymstyle{long-short} - 
    \newacronym{html}{HTML}{hypertext markup language} - 
    \newacronym{css}{CSS}{cascading style sheets} - 
    \newacronym{xml}{XML}{extensible markup language} - 
    \newacronym{sql}{SQL}{structured query language} - 
    \newacronym{rdbms}{RDBMS}{relational database management system} - 
    \newacronym{rdsms}{RDSMS}{relational data stream management system} - 
    \begin{document} - 
    These entries are only used once: \cgls{sql}, \cgls{rdbms}, - 
    \cgls{xml}. These entries are used multiple times: - 
    \cgls{html}, \cgls{html}, \cgls{css}, \cgls{css}, \cgls{css}, - 
    \cgls{rdsms}, \cgls{rdsms}. - 
    \printglossaries - 
    \end{document} -
    -

    After a complete document build (latex, latex, makeglossaries, latex) the list of abbrevaitions only -includes the entries HTML, CSS and RDSMS. The entries SQL, RDBMS and XML only have their long forms -displayed and don’t have a hyperlink.

    -
    -

    -

    ____________________________

    -

    Remember that if you don’t like typing \cgls you can create a synonym. For example +

    +\gls[format=emph]{apple}
    +
    +

    then

    -
    -\let\ac\cgls -
    -

    -

    With bib2gls there’s an analogous record counting set of commands. See glossaries-extra and bib2gls -manuals for further details.
    -

    +

    +\glsnumberlistloop{apple}{\myhandler}
    +
    +

    will be equivalent to:

    -

    -

    Top

    15. +\myhandler{}{page}{textbf}{12}% +\myhandler{}{page}{emph}{18}% + +

    There is a predefined handler that’s used to display the number list in the glossary: +


    \glsnoidxdisplayloc{prefix}{counter}{format}{location}

    +

    +The predefined handler used for the cross-references in the glossary is: +


    \glsseeformat[tag]{xr list}{location}

    +

    +which is described in §??sec:customxr Customising Cross-reference Text. +

    \glsnumberlistloop is not available for Options 2 and 3.
    +

    +

    +

    +

    Top

    12.4 Style Hook

    +

    As from version 4.24, there’s a hook that’s used near the end of \writeist before the file is closed. You can set +the code to be performed then using: +


    \GlsSetWriteIstHook{code}

    +

    +If you want the ⟨code⟩ to write any information to the file, you need to use +


    \write\glswrite{style information}

    +

    +Make sure you use the correct format within ⟨style information⟩. For example, if you are using makeindex: + + +

    +
    +\GlsSetWriteIstHook{%
    + \write\glswrite{page_precedence "arnAR"}%
    + \write\glswrite{line_max 80}%
    +}
    +
    +

    This changes the page type precedence and the maximum line length used by makeindex. +

    Remember that if you switch to xindy, this will no longer be valid code. + + +

    +

    +

    Top

    13. Glossary Styles

    -

    Glossaries vary from lists that simply contain a symbol with a terse description to lists of terms or phrases -with lengthy descriptions. Some glossaries may have terms with associated symbols. Some may have hierarchical -entries. There is therefore no single style that fits every type of glossary. The glossaries package comes with a -number of pre-defined glossary styles, described in §15.1 Predefined Styles. You can choose one of these that best -suits your type of glossary or, if none of them suit your document, you can defined your own style (see -§15.2 Defining your own glossary style). There are some examples of glossary styles available at -

    Glossaries vary from lists that simply contain a symbol with a terse description to lists of terms or phrases +with lengthy descriptions. Some glossaries may have terms with associated symbols. Some may have +hierarchical entries. There is therefore no single style that fits every type of glossary. The glossaries +package comes with a number of pre-defined glossary styles, described in §??sec:predefinedstyles +Predefined Styles. You can choose one of these that best suits your type of glossary or, if none of +them suit your document, you can defined your own style (see §??sec:newglossarystyle Defining +your own glossary style). There are some examples of glossary styles available at the https://www.dickimaw-books.com/gallery/#glossaries. -

    The glossary style can be set using the glossaries +gallery. +

    The glossary style can be set using the style key in the optional argument to key in the optional argument to \printnoidxglossary + id="dx1-154002"> (Option 1) or \printglossary (Options  (Options 2 and 3) or using the command: -



    \setglossarystyle{style-name}

    -

    +

    (before the glossary is displayed). -

    Some of the predefined glossary styles may also be set using the

    Some of the predefined glossary styles may also be set using the style package option, it depends if the + id="dx1-154005"> package option, it depends if the package in which they are defined is automatically loaded by the glossaries package. -

    You can use the lorum ipsum dummy entries provided in the accompanying

    You can use the lorum ipsum dummy entries provided in the accompanying example-glossaries-*.tex files (described in §1.2 §??sec:lipsum Dummy Entries for Testing) to test the different styles. -

    The

    The glossaries-extra-stylemods package provided with package provided with glossaries-extra patches the predefined styles. There also more styles available with glossaries-extra.
    -

    +

    -

    Top

    15.1

    Top

    13.1 Predefined Styles

    -

    The predefined styles can accommodate numbered level 0 (main) and level 1 entries. See the package options +

    The predefined styles can accommodate numbered level 0 (main) and level 1 entries. See the package options entrycounter, , counterwithin and and subentrycounter described in §2.3 Glossary Appearance Options. There is a -summary of available styles in table 15.1. You can view samples of all the predefined styles at - described in §??sec:pkgopts-printglos Glossary Appearance +Options. There is a summary of available styles in table ??tab:styles. You can view samples of all the predefined +styles at https://www.dickimaw-books.com/gallery/glossaries-styles/. Note that glossaries-extra provides -additional styles in the supplementary packages glossaries-extra +provides additional styles in the supplementary packages glossary-bookindex and glossary-longnoloc. See the , glossary-topic and glossary-longextra. +See the glossaries-extra -manual for further details. -

    Note that the group styles (such as glossaries-extra manual for further details. +

    Note that the group styles (such as listgroup) will have unexpected results if used with the ) will have unexpected results if used with the sort=def or + id="dx1-155008"> or sort=use options. If you don’t sort your entries alphabetically, it’s best to set the options. If you don’t sort your entries alphabetically, it’s best to set the nogroupskip package option to + id="dx1-155010"> package option to prevent odd vertical gaps appearing.
    -

    -

    The group title is obtained using

    +

    The group title is obtained using \glsgetgrouptitle{label}, which is described in §15.2 Defining your own -glossary style. +href="#sec:newglossarystyle">§??sec:newglossarystyle +Defining your own glossary style.

    -


    Table 15.1: Table 13.1: Glossary Styles. An asterisk in the style name indicates anything that matches that doesn’t match any previously listed style (e.g. long3col* matches long3col, , long3colheader, , long3colborder and + id="dx1-155014"> and long3colheaderborder). A maximum level of 0 indicates a flat glossary (sub-entries are displayed in the + id="dx1-155015">). A maximum level of 0 indicates a flat glossary (sub-entries are displayed in the same way as main entries). Where the maximum level is given as — there is no limit, but note that makeindex ( (Option 2) imposes a limit of 2 sub-levels. If the homograph column is checked, then the -name is not displayed for sub-entries. If the symbol column is checked, then the symbol will be displayed.
    +name is not displayed for sub-entries. If the symbol column is checked, then the symbol will be displayed.

    -

    The tabular-like styles that allow multi-line descriptions and page lists use the length -


    The tabular-like styles that allow multi-line descriptions and page lists use the length +


    \glsdescwidth

    -

    +

    to set the width of the description column and the length -



    \glspagelistwidth

    -

    +

    to set the width of the page list column.15.1 +href="#fn1x13" id="fn1x13-bk">13.1 These will need to be changed using \setlength if the glossary is too wide. Note that the long4col and and super4col + id="dx1-155024"> styles (and their header and border variations) don’t use these lengths as they are designed for single line entries. Instead you should use the analogous altlong4col and and altsuper4col styles. If you want to explicitly create + id="dx1-155026"> styles. If you want to explicitly create a line-break within a multi-line description in a tabular-like style it’s better to use \newline instead of + id="dx1-155027"> instead of \\. -

    Remember that a cell within a tabular-like environment can’t be broken across a page, so even if a +

    Remember that a cell within a tabular-like environment can’t be broken across a page, so even if a tabular-like style, such as long, allows multilined descriptions, you’ll probably encounter page-breaking problems + id="dx1-155028">, allows multilined descriptions, you’ll probably encounter page-breaking problems if you have entries with long descriptions. You may want to consider using the alttree style instead. + id="dx1-155029"> style instead.
    -

    -

    Note that if you use the

    +

    Note that if you use the style key in the optional argument to key in the optional argument to \printnoidxglossary ( (Option 1) or \printglossary (Options  (Options 2 and 3), it will override any previous style settings for the given glossary, so if, for example, you do

    -
    +
     \renewcommand*{\glsgroupskip}{}
    - 
    \printglossary[style=long] -
    -

    then the new definition of +

    then the new definition of \glsgroupskip will not have an affect for this glossary, as will not have an affect for this glossary, as \glsgroupskip is redefined by style=long. Likewise, \setglossarystyle will also override any previous style definitions, so, + id="dx1-155034"> will also override any previous style definitions, so, again

    -
    +
     \renewcommand*{\glsgroupskip}{}
    - 
    \setglossarystyle{long} -
    -

    will reset +

    will reset \glsgroupskip back to its default definition for the named glossary style (long in this case). If you + id="dx1-155035"> in this case). If you want to modify the styles, either use \newglossarystyle (described in the next section) or make the + id="dx1-155036"> (described in the next section) or make the modifications after \setglossarystyle, e.g.: + id="dx1-155037">, e.g.:

    -
    +
     \setglossarystyle{long}
    - 
    \renewcommand*{\glsgroupskip}{} -
    -

    As from version 3.03, you can now use the package option +

    As from version 3.03, you can now use the package option nogroupskip to suppress the gap between groups for + id="dx1-155038"> to suppress the gap between groups for the default styles instead of redefining \glsgroupskip. -

    All the styles except for the three- and four-column styles and the

    All the styles except for the three- and four-column styles and the listdotted style use the command -


    style use the command +


    \glspostdescription

    -

    +

    after the description. This simply displays a full stop by default. To eliminate this full stop (or replace it with something else, say, a comma) you will need to redefine \glspostdescription before the glossary is displayed. Alternatively, you can suppress it for a given entry by placing \nopostdesc in the entry’s description. Note that + id="dx1-155041"> in the entry’s description. Note that \longnewglossaryentry puts puts \nopostdesc at the end of the description. The glossaries-extra package provides a starred version that doesn’t. -

    As from version 3.03 you can now use the package option

    As from version 3.03 you can now use the package option nopostdot to suppress this full stop. This is the + id="dx1-155043"> to suppress this full stop. This is the better option if you want to use the glossaries-extra package. The glossaries-extra-stylemods package provides + id="dx1-155044"> package provides some adjustments some of to the predefined styles listed here, allowing for greater flexibility. See the glossaries-extra documentation for further details.

    -

    Top

    15.1.1

    Top

    13.1.1 List Styles

    -

    The styles described in this section are all defined in the package

    The styles described in this section are all defined in the package glossary-list. Since they all use the . Since they all use the description + id="dx1-156002"> environment, they are governed by the same parameters as that environment. These styles all ignore the entry’s symbol. Note that these styles will automatically be available unless you use the nolist or or nostyles package + id="dx1-156005"> package options. -

    Note that, except for the

    Note that, except for the listdotted style, these list styles are incompatible with style, these list styles are incompatible with classicthesis. They + id="dx1-156007">. They may also be incompatible with other classes or packages that modify the description environment. + id="dx1-156008"> environment.
    -

    +

    +

    list

    The list

    +

    The list style uses the style uses the description environment. The entry name is placed in the optional argument of - the environment. The entry name is placed in the optional argument + of the \item command (so it will usually appear in bold by default). The description follows, + and then the associated number list for that entry. The symbol is ignored. If the entry has child + entries, the description and number list follows (but not the name) for each child entry. Groups are + separated using \indexspace. +

    The closest matching non-list style is the index style. + + +

    +

    +listgroup

    +

    The listgroup style is like list but the glossary groups have headings obtained using + \glsgetgrouptitle{label}, which is described in §??sec:newglossarystyle Defining your own + glossary style. +

    +

    +listhypergroup

    +

    The listhypergroup style is like listgroup but has a navigation line at the start of the glossary with links to + each group that is present in the glossary. This requires an additional run through LaTeX to + ensure the group information is up to date. In the navigation line, each group is separated + by +


    \glshypernavsep

    +

    + which defaults to a vertical bar with a space on either side. For example, to simply have a space separating + each group, do: + + +

    +
    +     \renewcommand*{\glshypernavsep}{\space}
    +
    +

    +

    Note that the hyper-navigation line is now (as from version 1.14) set inside the optional + argument to \item command (so it will usually appear in bold by default). The description follows, and then - the associated instead of after it to prevent a spurious space at the start. This can cause a + problem if the navigation line is too long. As from v4.22, if you need to adjust this, you can + redefine +


    \glslistnavigationitem{navigation line}

    +

    + The default definition is \item[navigation line] but may be redefined independently of setting the style. + For example: + + +

    +
    +     \renewcommand*{\glslistnavigationitem}[1]{\item \textbf{#1}}
    +
    +

    +

    You may prefer to use the tree-like styles, such as treehypergroup instead. +

    +

    +altlist

    +

    The altlist style is like list but the description starts on the line following the name. (As with the list style, + the symbol is ignored.) Each child entry starts a new line, but as with the list style, the name associated + with each child entry is ignored. +

    The closest matching non-list style is the index style with the following adjustment: + + +

    +
    +     \renewcommand{\glstreepredesc}{%
    +      \glstreeitem\parindent\hangindent}
    +
    +

    +

    +

    +altlistgroup

    +

    The altlistgroup style is like altlist but the glossary groups have headings. +

    +

    +altlisthypergroup

    +

    The altlisthypergroup style is like altlistgroup but has a set of links to the glossary groups. The navigation + line is the same as that for listhypergroup, described above. +

    +

    +listdotted

    +

    This style uses the description environment.13.2 + Each entry starts with \item[], followed by the name followed by a dotted line, followed + by the description. Note that this style ignores both the number list and the symbol. The + length +


    \glslistdottedwidth

    +

    + governs where the description should start. This is a flat style, so child entries are formatted in the same + way as the parent entries. +

    A non-list alternative is to use the index style with + + +

    +
    +     \renewcommand{\glstreepredesc}{\dotfill}
    +     \renewcommand{\glstreechildpredesc}{\dotfill}
    +
    +

    Note that this doesn’t use \glslistdottedwidth and causes the description to be flush-right and will + display the symbol, if provided. (It also doesn’t suppress the number list, but that can be achieved with + the nonumberlist option.) +

    +

    +sublistdotted

    +

    This is a variation on the listdotted style designed for hierarchical glossaries. The main entries have just + the name displayed. The sub entries are displayed in the same manner as listdotted. Unlike the listdotted + style, this style is incompatible with classicthesis.

    +

    +

    +

    Top

    13.1.2 Longtable Styles

    +

    The styles described in this section are all defined in the package glossary-long. Since they all use the longtable +environment, they are governed by the same parameters as that environment. Note that these styles will +automatically be available unless you use the nolong or nostyles package options. These styles fully justify the +description and page list columns. If you want ragged right formatting instead, use the analogous styles +described in §??sec:longraggedstyles Longtable Styles (Ragged Right). If you want to incorporate rules +from the booktabs package, try the styles described in §??sec:longbooktabsstyles Longtable Styles +(booktabs). +

    +

    +long

    +

    The long style uses the longtable environment (defined by the longtable package). It has two columns: + the first column contains the entry’s name and the second column contains the description followed + by the number list. The entry’s symbol is ignored. Sub groups are separated with a blank row. The + width of the first column is governed by the widest entry in that column. The width of the second + column is governed by the length \glsdescwidth. Child entries have a similar format to the parent + entries except that their name is suppressed. +

    +

    +longborder

    +

    The longborder style is like long but has horizontal and vertical lines around it. + + +

    +

    +longheader

    +

    The longheader style is like long but has a header row. +

    +

    +longheaderborder

    +

    The longheaderborder style is like longheader but has horizontal and vertical lines around it. +

    +

    +long3col

    +

    The long3col style is like long but has three columns. The first column contains the entry’s name, + the second column contains the description and the third column contains the number list. The + entry’s symbol is ignored. The width of the first column is governed by the widest entry in that + column, the width of the second column is governed by the length \glsdescwidth, and the width + of the third column is governed by the length \glspagelistwidth. +

    +

    +long3colborder

    +

    The long3colborder style is like the long3col style but has horizontal and vertical lines around it. +

    +

    +long3colheader

    +

    The long3colheader style is like long3col but has a header row. +

    +

    +long3colheaderborder

    +

    The long3colheaderborder style is like long3colheader but has horizontal and vertical lines around + it. +

    +

    +long4col

    +

    The long4col style is like long3col but has an additional column in which the entry’s associated + symbol appears. This style is used for brief single line descriptions. The column widths are governed + by the widest entry in the given column. Use altlong4col for multi-line descriptions. + + +

    +

    +long4colborder

    +

    The long4colborder style is like the long4col style but has horizontal and vertical lines around it. +

    +

    +long4colheader

    +

    The long4colheader style is like long4col but has a header row. +

    +

    +long4colheaderborder

    +

    The long4colheaderborder style is like long4colheader but has horizontal and vertical lines around + it. +

    +

    +altlong4col

    +

    The altlong4col style is like long4col but allows multi-line descriptions and page lists. The width + of the description column is governed by the length \glsdescwidth and the width of the page + list column is governed by the length \glspagelistwidth. The widths of the name and symbol + columns are governed by the widest entry in the given column. +

    +

    +altlong4colborder

    +

    The altlong4colborder style is like the long4colborder but allows multi-line descriptions and page + lists. +

    +

    +altlong4colheader

    +

    The altlong4colheader style is like long4colheader but allows multi-line descriptions and page lists. +

    +

    +altlong4colheaderborder

    +

    The altlong4colheaderborder style is like long4colheaderborder but allows multi-line descriptions and + page lists.

    + + +

    +

    +

    Top

    13.1.3 Longtable Styles (Ragged Right)

    +

    The styles described in this section are all defined in the package glossary-longragged. These styles are analogous +to those defined in glossary-long but the multiline columns are left justified instead of fully justified. Since these +styles all use the longtable environment, they are governed by the same parameters as that environment. The +glossary-longragged package additionally requires the array package. Note that these styles will only be available +if you explicitly load glossary-longragged: + + +

    +
    +\usepackage{glossaries}
    +\usepackage{glossary-longragged}
    +
    +

    Note that you can’t set these styles using the style package option since the styles aren’t defined until after the +glossaries package has been loaded. If you want to incorporate rules from the booktabs package, try the styles +described in §??sec:longbooktabsstyles Longtable Styles (booktabs). +

    +

    +longragged

    +

    The longragged style has two columns: the first column contains the entry’s name and the second + column contains the (left-justified) description followed by the number list for that entry. The symbol is ignored. If the entry has child entries, the - description and number list follows (but not the name) for each child entry. Groups are separated - using \indexspace. -

    The closest matching non-list style is the index style. + id="dx1-158011">. The entry’s symbol is + ignored. Sub groups are separated with a blank row. The width of the first column is governed + by the widest entry in that column. The width of the second column is governed by the length + \glsdescwidth. Child entries have a similar format to the parent entries except that their name + is suppressed.

    +

    listgroup

    The listgroup style is like list but the glossary groups have headings obtained using +class="cmbx-10">longraggedborder

    +

    The longraggedborder style is like longragged but has horizontal and vertical lines around it. +

    +

    +longraggedheader

    +

    The longraggedheader style is like longragged but has a header row. +

    +

    +longraggedheaderborder

    +

    The longraggedheaderborder style is like longraggedheader but has horizontal and vertical lines + around it. +

    +

    +longragged3col

    +

    The longragged3col style is like longragged but has three columns. The first column contains the + entry’s name, the second column contains the (left justified) description and the third column + contains the (left justified) number list. The entry’s symbol is ignored. The width of the first + column is governed by the widest entry in that column, the width of the second column is governed + by the length \glsdescwidth, and the width of the third column is governed by the length \glsgetgrouptitle{label}, which is described in §15.2 Defining your own glossary style. +class="cmtt-10">\glspagelistwidth. -

    +

    +

    listhypergroup

    The listhypergroup style is like listgroup but has a navigation line at the start of the glossary - with links to each group that is present in the glossary. This requires an additional run through LaTeX to - ensure the group information is up to date. In the navigation line, each group is separated - by -


    \glshypernavsep

    -

    - which defaults to a vertical bar with a space on either side. For example, to simply have a space separating - each group, do: +class="cmbx-10">longragged3colborder

    +

    The longragged3colborder style is like the longragged3col style but has horizontal and vertical lines + around it. +

    +

    +longragged3colheader

    +

    The longragged3colheader style is like longragged3col but has a header row. +

    +

    +longragged3colheaderborder

    +

    The longragged3colheaderborder style is like longragged3colheader but has horizontal and vertical + lines around it. +

    +

    +altlongragged4col

    +

    The altlongragged4col style is like longragged3col but has an additional column in which the + entry’s associated symbol appears. The width of the description column is governed by the + length \glsdescwidth and the width of the page list column is governed by the length + \glspagelistwidth. The widths of the name and symbol columns are governed by the widest + entry in the given column. +

    +

    +altlongragged4colborder

    +

    The altlongragged4colborder style is like the altlongragged4col but has horizontal and vertical lines + around it. +

    +

    +altlongragged4colheader

    +

    The altlongragged4colheader style is like altlongragged4col but has a header row. +

    +

    +altlongragged4colheaderborder

    +

    The altlongragged4colheaderborder style is like altlongragged4colheader but has horizontal and + vertical lines around it. +

    +
    +

    -
    - \renewcommand*{\glshypernavsep}{\space} -
    -

    -

    Note that the hyper-navigation line is now (as from version 1.14) set inside the optional - argument to \item instead of after it to prevent a spurious space at the start. This can cause a - problem if the navigation line is too long. As from v4.22, if you need to adjust this, you can - redefine -


    \glslistnavigationitem{navigation line}

    -

    - The default definition is \item[navigation line] but may be redefined independently of setting the style. - For example: +

    Top

    13.1.4 Longtable Styles (booktabs)

    +

    The styles described in this section are all defined in the package glossary-longbooktabs. +

    Since these styles all use the longtable environment, they are governed by the same parameters as that +environment. The glossary-longbooktabs package automatically loads the glossary-long (§??sec:longstyles +Longtable Styles) and glossary-longragged (§??sec:longraggedstyles Longtable Styles (Ragged Right)) packages. +Note that these styles will only be available if you explicitly load glossary-longbooktabs:

    -
    - \renewcommand*{\glslistnavigationitem}[1]{\item \textbf{#1}} -
    -

    -

    You may prefer to use the tree-like styles, such as treehypergroup instead. +

    +\usepackage{glossaries}
    +\usepackage{glossary-longbooktabs}
    +
    +

    Note that you can’t set these styles using the style package option since the styles aren’t defined until after the +glossaries package has been loaded. +

    These styles are similar to the “header” styles in the glossary-long and glossary-ragged packages, but they add +the rules provided by the booktabs package, \toprule, \midrule and \bottomrule. Additionally these styles +patch the longtable environment to check for instances of the group skip occurring at a page break. If you don’t +want this patch to affect any other use of longtable in your document, you can scope the effect by only setting +the style through the style key in the optional argument of \printglossary. (The nogroupskip package option +is checked by these styles.) +

    Alternatively, you can restore the original longtable behaviour with: +


    \glsrestoreLToutput

    +

    +For more information about the patch, see the documented code (glossaries-code.pdf). +

    +

    +long-booktabs

    +

    This style is similar to the longheader style but adds rules above and below the header (\toprule + and \midrule) and inserts a rule at the bottom of the table (\bottomrule).

    +

    altlist

    The altlist style is like list but the description starts on the line following the name. (As with the list - style, the symbol is ignored.) Each child entry starts a new line, but as with the list style, the name - associated with each child entry is ignored. -

    The closest matching non-list style is the index style with the following adjustment: - - -

    -
    - \renewcommand{\glstreepredesc}{% -  
     \glstreeitem\parindent\hangindent} -
    -

    +class="cmssbx-10">long3col-booktabs

    +

    This style is similar to the long3colheader style but adds rules as per long-booktabs.

    +

    altlistgroup

    The altlistgroup style is like altlist but the glossary groups have headings. -
    +class="cmssbx-10">long4col-booktabs

    +

    This style is similar to the long4colheader style but adds rules as above. +

    +

    altlisthypergroup

    The altlisthypergroup style is like altlistgroup but has a set of links to the glossary groups. - The navigation line is the same as that for listhypergroup, described above. -
    +class="cmssbx-10">altlong4col-booktabs

    +

    This style is similar to the altlong4colheader style but adds rules as above. +

    +

    listdotted

    This style uses the description - environment.15.2 - Each entry starts with \item[], followed by the name followed by a dotted line, followed - by the description. Note that this style ignores both the number list and the symbol. The - length -


    \glslistdottedwidth

    -

    - governs where the description should start. This is a flat style, so child entries are formatted in the same - way as the parent entries. -

    A non-list alternative is to use the index style with +class="cmssbx-10">longragged-booktabs

    +

    This style is similar to the longraggedheader style but adds rules as above. -

    -
    - \renewcommand{\glstreepredesc}{\dotfill} -  
    \renewcommand{\glstreechildpredesc}{\dotfill} -
    -

    Note that this doesn’t use \glslistdottedwidth and causes the description to be flush-right and will - display the symbol, if provided. (It also doesn’t suppress the number list, but that can be achieved with - the nonumberlist option.)

    +

    sublistdotted

    This is a variation on the listdotted style designed for hierarchical glossaries. The main entries - have just the name displayed. The sub entries are displayed in the same manner as listdotted. Unlike the - listdotted style, this style is incompatible with classicthesis.
    -

    +class="cmssbx-10">longragged3col-booktabs

    +

    This style is similar to the longragged3colheader style but adds rules as above. +

    +

    +altlongragged4col-booktabs

    +

    This style is similar to the altlongragged4colheader style but adds rules as above.

    -

    Top

    15.1.2 Longtable Styles

    -

    The styles described in this section are all defined in the package glossary-long. Since they all use the +

    +

    +

    +

    Top

    13.1.5 Supertabular Styles

    +

    The styles described in this section are all defined in the package glossary-super. Since they all use the longtable environment, they are governed by the same parameters as that environment. Note that -these styles will automatically be available unless you use the nolong or supertabular environment, they are governed by the same parameters as that environment. Note that these styles +will automatically be available unless you use the nosuper or nostyles package options. + id="dx1-160005"> package options. In general, +the longtable environment is better, but there are some circumstances where it is better to use +supertabular.13.3 These styles fully justify the description and page list columns. If you want ragged right formatting instead, use the analogous styles described in §15.1.3 Longtable Styles (Ragged Right). If you want to -incorporate rules from the booktabs package, try the styles described in §15.1.4 Longtable Styles -(booktabs). +href="#sec:superraggedstyles">§??sec:superraggedstyles Supertabular Styles (Ragged +Right).

    +

    long

    The long style uses the longtable environment (defined by the longtable package). It has two columns: - the first column contains the entry’s name and the second column contains the description followed - by the super

    +

    The super style uses the supertabular environment (defined by the supertabular package). It has two + columns: the first column contains the entry’s name and the second column contains the description + followed by the number list. The entry’s symbol is ignored. Sub groups are separated with a blank row. The - width of the first column is governed by the widest entry in that column. The width of the second - column is governed by the length . The entry’s symbol is ignored. Sub groups are separated with a blank + row. The width of the first column is governed by the widest entry in that column. The width of + the second column is governed by the length \glsdescwidth. Child entries have a similar format to the parent - entries except that their name is suppressed. -

    -longborder
    The longborder style is like long but has horizontal and vertical lines around it. -
    + id="dx1-160017">. Child entries have a similar format + to the parent entries except that their name is suppressed. +

    +

    longheader

    The longheader style is like long but has a header row. -
    +class="cmbx-10">superborder

    +

    The superborder style is like super but has horizontal and vertical lines around it. +

    +

    longheaderborder

    The longheaderborder style is like longheader but has horizontal and vertical lines - around it. +class="cmbx-10">superheader

    -
    +

    The superheader style is like super but has a header row. +

    +

    long3col

    The long3col style is like long but has three columns. The first column contains the entry’s - name, the second column contains the description and the third column contains the superheaderborder

    +

    The superheaderborder style is like superheader but has horizontal and vertical lines around it. +

    +

    +super3col

    +

    The super3col style is like super but has three columns. The first column contains the entry’s name, + the second column contains the description and the third column contains the number list. - The entry’s symbol is ignored. The width of the first column is governed by the widest entry in - that column, the width of the second column is governed by the length . The + entry’s symbol is ignored. The width of the first column is governed by the widest entry in that + column. The width of the second column is governed by the length \glsdescwidth, and the - width of the third column is governed by the length . The width of + the third column is governed by the length \glspagelistwidth. -

    + id="dx1-160028">. +

    +

    long3colborder

    The long3colborder style is like the long3col style but has horizontal and vertical lines - around it. -
    +class="cmbx-10">super3colborder

    +

    The super3colborder style is like the super3col style but has horizontal and vertical lines around it. +

    +

    long3colheader

    The long3colheader style is like long3col but has a header row. -
    +class="cmbx-10">super3colheader

    +

    The super3colheader style is like super3col but has a header row. +

    +

    long3colheaderborder

    The long3colheaderborder style is like long3colheader but has horizontal and - vertical lines around it. -
    +class="cmbx-10">super3colheaderborder

    +

    The super3colheaderborder style is like the super3colheader style but has horizontal and vertical lines + around it. +

    +

    long4col

    The long4col style is like long3col but has an additional column in which the entry’s associated - symbol appears. This style is used for brief single line descriptions. The column widths are governed - by the widest entry in the given column. Use altlong4col for multi-line descriptions. -
    +class="cmbx-10">super4col

    +

    The super4col style is like super3col but has an additional column in which the entry’s associated + symbol appears. This style is designed for entries with brief single line descriptions. The column + widths are governed by the widest entry in the given column. Use altsuper4col for multi-line + descriptions. +

    +

    long4colborder

    The long4colborder style is like the long4col style but has horizontal and vertical lines - around it. -
    +class="cmbx-10">super4colborder

    +

    The super4colborder style is like the super4col style but has horizontal and vertical lines around it. + + +

    +

    long4colheader

    The long4colheader style is like long4col but has a header row. -
    +class="cmbx-10">super4colheader

    +

    The super4colheader style is like super4col but has a header row. +

    +

    long4colheaderborder

    The long4colheaderborder style is like long4colheader but has horizontal and - vertical lines around it. -
    +class="cmbx-10">super4colheaderborder

    +

    The super4colheaderborder style is like the super4colheader style but has horizontal and vertical lines + around it. +

    +

    altlong4col

    The altlong4col style is like long4col but allows multi-line descriptions and page lists. The - width of the description column is governed by the length altsuper4col

    +

    The altsuper4col style is like super4col but allows multi-line descriptions and page lists. The width + of the description column is governed by the length \glsdescwidth and the width of the page - list column is governed by the length and the width of the page list + column is governed by the length \glspagelistwidth. The widths of the name and symbol - columns are governed by the widest entry in the given column. -

    + id="dx1-160047">. The width of the name and symbol columns + is governed by the widest entry in the given column. +

    +

    altlong4colborder

    The altlong4colborder style is like the long4colborder but allows multi-line - descriptions and page lists. -
    +class="cmbx-10">altsuper4colborder

    +

    The altsuper4colborder style is like the super4colborder style but allows multi-line descriptions and + page lists. +

    +

    altlong4colheader

    The altlong4colheader style is like long4colheader but allows multi-line descriptions - and page lists. -
    +class="cmbx-10">altsuper4colheader

    +

    The altsuper4colheader style is like super4colheader but allows multi-line descriptions and page lists. +

    +

    altlong4colheaderborder

    The altlong4colheaderborder style is like long4colheaderborder but allows - multi-line descriptions and page lists.
    - - -

    +class="cmbx-10">altsuper4colheaderborder

    +

    The altsuper4colheaderborder style is like super4colheaderborder but allows multi-line descriptions + and page lists.

    +

    -

    Top

    15.1.3 Longtable Styles (Ragged Right)

    -

    The styles described in this section are all defined in the package glossary-longragged. These styles are analogous -to those defined in glossary-long but the multiline columns are left justified instead of fully justified. Since these -styles all use the longtable environment, they are governed by the same parameters as that environment. The -glossary-longragged package additionally requires the

    Top

    13.1.6 Supertabular Styles (Ragged Right)

    +

    The styles described in this section are all defined in the package glossary-superragged. These styles are +analogous to those defined in glossary-super but the multiline columns are left justified instead of fully justified. +Since these styles all use the supertabular environment, they are governed by the same parameters as that +environment. The glossary-superragged package additionally requires the array package. Note that these styles will only be available -if you explicitly load glossary-longragged: + id="dx1-161006"> package. Note that these styles +will only be available if you explicitly load glossary-superragged:

    -
    +
     \usepackage{glossaries}
    - 
    \usepackage{glossary-longragged} -
    -

    Note that you can’t set these styles using the +

    Note that you can’t set these styles using the style package option since the styles aren’t defined until after the + id="dx1-161008"> package option since the styles aren’t defined until after the glossaries package has been loaded. If you want to incorporate rules from the booktabs package, try the styles -described in §15.1.4 Longtable Styles (booktabs). +class="cmss-10">glossaries package has been loaded.

    +

    longragged

    The longragged style has two columns: the first column contains the entry’s name and the - second column contains the (left-justified) description followed by the number list. The entry’s - symbol is ignored. Sub groups are separated with a blank row. The width of the first column is - governed by the widest entry in that column. The width of the second column is governed by the - length \glsdescwidth. Child entries have a similar format to the parent entries except that their - name is suppressed. -
    -longraggedborder
    The longraggedborder style is like longragged but has horizontal and vertical lines - around it. -
    -longraggedheader
    The longraggedheader style is like longragged but has a header row. -
    -longraggedheaderborder
    The longraggedheaderborder style is like longraggedheader but has horizontal - and vertical lines around it. -
    -longragged3col
    The longragged3col style is like longragged but has three columns. The first column - contains the entry’s name, the second column contains the (left justified) description and the third - column contains the (left justified) superragged

    +

    The superragged style uses the supertabular environment (defined by the supertabular package). It + has two columns: the first column contains the entry’s name and the second column contains the + (left justified) description followed by the number list. The entry’s symbol is ignored. The width of the - first column is governed by the widest entry in that column, the width of the second column is - governed by the length . The entry’s symbol is ignored. Sub groups + are separated with a blank row. The width of the first column is governed by the widest entry in + that column. The width of the second column is governed by the length \glsdescwidth, and the width of the third column is governed by the - length \glspagelistwidth. -

    -longragged3colborder
    The longragged3colborder style is like the longragged3col style but has horizontal - and vertical lines around it. -
    -longragged3colheader
    The longragged3colheader style is like longragged3col but has a header row. -
    -longragged3colheaderborder
    The longragged3colheaderborder style is like longragged3colheader but - has horizontal and vertical lines around it. - - -
    + id="dx1-161014">. Child + entries have a similar format to the parent entries except that their name is suppressed. +

    +

    altlongragged4col

    The altlongragged4col style is like longragged3col but has an additional column in - which the entry’s associated symbol appears. The width of the description column is governed - by the length \glsdescwidth and the width of the page list column is governed by the length - \glspagelistwidth. The widths of the name and symbol columns are governed by the widest - entry in the given column. -
    +class="cmbx-10">superraggedborder

    +

    The superraggedborder style is like superragged but has horizontal and vertical lines around it. +

    +

    altlongragged4colborder

    The altlongragged4colborder style is like the altlongragged4col but has - horizontal and vertical lines around it. -
    +class="cmbx-10">superraggedheader

    +

    The superraggedheader style is like superragged but has a header row. +

    +

    altlongragged4colheader

    The altlongragged4colheader style is like altlongragged4col but has a header - row. -
    +class="cmbx-10">superraggedheaderborder

    +

    The superraggedheaderborder style is like superraggedheader but has horizontal and vertical lines + around it. +

    +

    altlongragged4colheaderborder

    The altlongragged4colheaderborder style is like - altlongragged4colheader but has horizontal and vertical lines around it. -
    -

    -

    -

    Top

    15.1.4 Longtable Styles (booktabs)

    -

    The styles described in this section are all defined in the package glossary-longbooktabs. -

    Since these styles all use the longtable environment, they are governed by the same parameters as that -environment. The glossary-longbooktabs package automatically loads the glossary-long (§15.1.2 Longtable Styles) -and glossary-longragged (§15.1.3 Longtable Styles (Ragged Right)) packages. Note that these styles will only be -available if you explicitly load glossary-longbooktabs: +class="cmbx-10">superragged3col

    +

    The superragged3col style is like superragged but has three columns. The first column contains + the entry’s name, the second column contains the (left justified) description and the third column + contains the (left justified) number list. The entry’s symbol is ignored. The width of the first + column is governed by the widest entry in that column. The width of the second column is + governed by the length \glsdescwidth. The width of the third column is governed by the length + \glspagelistwidth. -

    -
    -\usepackage{glossaries} - 
    \usepackage{glossary-longbooktabs} -
    -

    Note that you can’t set these styles using the style package option since the styles aren’t defined until after the -glossaries package has been loaded. -

    These styles are similar to the “header” styles in the glossary-long and glossary-ragged packages, but they add -the rules provided by the booktabs package, \toprule, \midrule and \bottomrule. Additionally these styles -patch the longtable environment to check for instances of the group skip occurring at a page break. If you don’t -want this patch to affect any other use of longtable in your document, you can scope the effect by only setting -the style through the style key in the optional argument of \printglossary. (The nogroupskip package option -is checked by these styles.) -

    Alternatively, you can restore the original longtable behaviour with: -


    \glsrestoreLToutput

    -

    -For more information about the patch, see the documented code (glossaries-code.pdf). -

    +

    +

    long-booktabs

    This style is similar to the longheader style but adds rules above and below the header - (\toprule and \midrule) and inserts a rule at the bottom of the table (\bottomrule). -
    +class="cmbx-10">superragged3colborder

    +

    The superragged3colborder style is like the superragged3col style but has horizontal and vertical + lines around it. +

    +

    long3col-booktabs

    This style is similar to the long3colheader style but adds rules as per long-booktabs. -
    +class="cmbx-10">superragged3colheader

    +

    The superragged3colheader style is like superragged3col but has a header row. +

    +

    long4col-booktabs

    This style is similar to the long4colheader style but adds rules as above. -
    +class="cmbx-10">superragged3colheaderborder

    +

    The superragged3colheaderborder style is like the above but has horizontal and vertical lines around + it. +

    +

    altlong4col-booktabs

    This style is similar to the altlong4colheader style but adds rules as above. -
    +class="cmbx-10">altsuperragged4col

    +

    The altsuperragged4col style is like superragged3col but has an additional column in which the entry’s + associated symbol appears. The column widths for the name and symbol column are governed by + the widest entry in the given column. +

    +

    longragged-booktabs

    This style is similar to the longraggedheader style but adds rules as above. -
    +class="cmbx-10">altsuperragged4colborder

    +

    The altsuperragged4colborder style is like the altsuperragged4col style but has horizontal and vertical + lines around it. +

    +

    longragged3col-booktabs

    This style is similar to the longragged3colheader style but adds rules as above. -
    +class="cmbx-10">altsuperragged4colheader

    +

    The altsuperragged4colheader style is like altsuperragged4col but has a header row. +

    +

    altlongragged4col-booktabs

    This style is similar to the altlongragged4colheader style but adds rules as - above. +class="cmbx-10">altsuperragged4colheaderborder

    +

    The altsuperragged4colheaderborder style is like the above but has horizontal and vertical lines + around it. +

    -

    +

    -

    Top

    15.1.5 Supertabular Styles

    -

    The styles described in this section are all defined in the package glossary-super. Since they all use the +

    Top

    13.1.7 Tree-Like Styles

    +

    The styles described in this section are all defined in the package glossary-tree. These styles are designed for +hierarchical glossaries but can also be used with glossaries that don’t have sub-entries. These styles will display +the entry’s symbol if it exists. Note that these styles will automatically be available unless you use the notree or supertabular environment, they are governed by the same parameters as that environment. Note that these styles -will automatically be available unless you use the nosuper or nostyles package options. In general, -the longtable environment is better, but there are some circumstances where it is better to use + id="dx1-162003"> package options. +

    These styles all format the entry name using: +


    \glstreenamefmt{name}

    +

    +This defaults to \textbf{name}, but note that ⟨name⟩ includes \glsnamefont so the bold setting in supertabular.15.3 -These styles fully justify the description and page list columns. If you want ragged right formatting instead, use -the analogous styles described in §15.1.6 Supertabular Styles (Ragged Right). +class="cmtt-10">\glstreenamefont may be counteracted by another font change in \glsnamefont (or in \acronymfont). The +tree-like styles that also display the header use +


    \glstreegroupheaderfmt{text}

    +

    +to format the heading. This defaults to \glstreenamefmt{text}. The tree-like styles that display navigation +links to the groups (such as indexhypergroup), format the navigation line using +


    \glstreenavigationfmt{text}

    +

    +which defaults to \glstreenamefmt{text}. +

    Note that this is different from \glslistnavigationitem, provided with the styles such as listhypergroup, as +that also includes \item. +

    With the exception of the alttree style (and those derived from it), the space before the description for +top-level entries is produced with +


    \glstreepredesc

    +

    +This defaults to \space. +

    With the exception of the treenoname and alttree styles (and those derived from them), the space before the +description for child entries is produced with +


    \glstreechildpredesc

    +

    +This defaults to \space. +

    Most of these styles are not designed for multi-paragraph descriptions. (The tree style isn’t too bad for +multi-paragraph top-level entry descriptions, or you can use the index style with the adjustment shown below.) +
    +

    +

    super

    The super style uses the supertabular environment (defined by the supertabular package). It has two - columns: the first column contains the entry’s name and the second column contains the description - followed by the number list. The entry’s symbol is ignored. Sub groups are separated with a blank - row. The width of the first column is governed by the widest entry in that column. The width of - the second column is governed by the length \glsdescwidth. Child entries have a similar format - to the parent entries except that their name is suppressed. -
    +class="cmbx-10">index

    +

    The index style is similar to the way indices are usually formatted in that it has a hierarchical + structure up to three levels (the main level plus two sub-levels). The name is typeset in bold, and if + the symbol is present it is set in parentheses after the name and before the description. Sub-entries + are indented and also include the name, the symbol in brackets (if present) and the description. + + + Groups are separated using \indexspace. +

    Each main level item is started with +


    \glstreeitem

    +

    + The level 1 entries are started with +


    \glstreesubitem

    +

    +

    The level 2 entries are started with +


    \glstreesubsubitem

    +

    +

    Note that the index style automatically sets + + +

    +
    +     \let\item\glstreeitem
    +     \let\subitem\glstreesubitem
    +     \let\subsubitem\glstreesubsubitem
    +
    +

    at the start of the glossary for backward compatibility. +

    The index style isn’t suitable for multi-paragraph descriptions, but this limitation can be overcome by + redefining the above commands. For example: + + +

    +
    +     \renewcommand{\glstreeitem}{%
    +      \parindent0pt\par\hangindent40pt
    +      \everypar{\parindent50pt\hangindent40pt}}
    +
    +

    +

    +

    superborder

    The superborder style is like super but has horizontal and vertical lines around it. -
    +class="cmbx-10">indexgroup

    +

    The indexgroup style is similar to the index style except that each group has a heading obtained using + \glsgetgrouptitle{label}, which is described in §??sec:newglossarystyle Defining your own glossary + style. +

    +

    superheader

    The superheader style is like super but has a header row. -
    +class="cmbx-10">indexhypergroup

    +

    The indexhypergroup style is like indexgroup but has a set of links to the glossary groups. The + navigation line is the same as that for listhypergroup, described above, but is formatted using + \glstreenavigationfmt. +

    +

    superheaderborder

    The superheaderborder style is like superheader but has horizontal and vertical - lines around it. -
    +class="cmbx-10">tree

    +

    The tree style is similar to the index style except that it can have arbitrary levels. (Note that makeindex is + limited to three levels, so you will need to use xindy if you want more than three levels.) Each sub-level is + indented by \glstreeindent. Note that the name, symbol (if present) and description are placed in the + same paragraph block. If you want the name to be apart from the description, use the alttree style instead. + (See below.) +

    +

    super3col

    The super3col style is like super but has three columns. The first column contains the entry’s - name, the second column contains the description and the third column contains the number list. - The entry’s symbol is ignored. The width of the first column is governed by the widest entry in that - column. The width of the second column is governed by the length \glsdescwidth. The width of - the third column is governed by the length \glspagelistwidth. -
    +class="cmbx-10">treegroup

    +

    The treegroup style is similar to the tree style except that each group has a heading. +

    +

    +treehypergroup

    +

    The treehypergroup style is like treegroup but has a set of links to the glossary groups. The + navigation line is the same as that for listhypergroup, described above, but is formatted using + \glstreenavigationfmt. + + +

    +

    +treenoname

    +

    The treenoname style is like the tree style except that the name for each sub-entry is ignored. +

    +

    super3colborder

    The super3colborder style is like the super3col style but has horizontal and vertical - lines around it. -
    +class="cmbx-10">treenonamegroup

    +

    The treenonamegroup style is similar to the treenoname style except that each group has a + heading. +

    +

    super3colheader

    The super3colheader style is like super3col but has a header row. -
    +class="cmbx-10">treenonamehypergroup

    +

    The treenonamehypergroup style is like treenonamegroup but has a set of links to the glossary groups. The + navigation line is the same as that for listhypergroup, described above, but is formatted using + \glstreenavigationfmt. +

    +

    super3colheaderborder

    The super3colheaderborder style is like the super3colheader style but has - horizontal and vertical lines around it. +class="cmbx-10">alttree

    +

    The alttree style is similar to the tree style except that the indentation for each level is determined by the + width of the text specified by +


    \glssetwidest[level]{text}

    +

    + The optional argument ⟨level⟩ indicates the level, where 0 indicates the top-most level, 1 indicates the first + level sub-entries, etc. If \glssetwidest hasn’t been used for a given sub-level, the level 0 widest text is + used instead. If ⟨level⟩ is omitted, 0 is assumed. +

    As from v4.22, the glossary-tree package also provides +


    \glsfindwidesttoplevelname[glossary list]

    +

    + This iterates over all parentless entries in the given glossary lists and determines the widest entry. If the + optional argument is omitted, all glossaries are assumed (as per \forallglossaries). +

    For example, to have the same name width for all glossaries: -

    -super4col
    The super4col style is like super3col but has an additional column in which the entry’s - associated symbol appears. This style is designed for entries with brief single line descriptions. The - column widths are governed by the widest entry in the given column. Use altsuper4col for multi-line - descriptions. -
    -super4colborder
    The super4colborder style is like the super4col style but has horizontal and vertical - lines around it. -
    +

    +
    +     \glsfindwidesttoplevelname
    +     \setglossarystyle{alttree}
    +     \printglossaries
    +
    +

    Alternatively, to compute the widest entry for each glossary before it’s displayed: + + +

    +
    +     \renewcommand{\glossarypreamble}{%
    +       \glsfindwidesttoplevelname[\currentglossary]}
    +     \setglossarystyle{alttree}
    +     \printglossaries
    +
    +

    +

    These commands only affects the alttree styles, including those listed below and the ones in the + glossary-mcols package. If you forget to set the widest entry name, the description will overwrite the name. +
    +

    +

    For each level, the name is placed to the left of the paragraph block containing the symbol + (optional) and the description. If the symbol is present, it is placed in parentheses before the + description. +

    The name is placed inside a left-aligned \makebox. As from v4.19, this can now be adjusted by + redefining +


    \glstreenamebox{width}{text}

    +

    + where ⟨width⟩ is the width of the box and ⟨text⟩ is the contents of the box. For example, to make the name + right-aligned: + + +

    +
    +     \renewcommand*{\glstreenamebox}[2]{%
    +       \makebox[#1][r]{#2}%
    +     }
    +
    +

    +

    +

    super4colheader

    The super4colheader style is like super4col but has a header row. -
    +class="cmbx-10">alttreegroup

    +

    The alttreegroup is like the alttree style except that each group has a heading. +

    +

    super4colheaderborder

    The super4colheaderborder style is like the super4colheader style but has - horizontal and vertical lines around it. -
    +class="cmbx-10">alttreehypergroup

    +

    The alttreehypergroup style is like alttreegroup but has a set of links to the glossary groups. The navigation + line is the same as that for listhypergroup, described above. +

    +
    +

    +

    +

    Top

    13.1.8 Multicols Style

    +

    The glossary-mcols package provides tree-like styles that are in the multicols environment (defined by the multicol +package). The style names are as their analogous tree styles (as defined in §??sec:treestyles Tree-Like Styles) but +are prefixed with “mcol”. For example, the mcolindex style is essentially the index style but put in a multicols +environment. For the complete list, see table ??tab:mcols. The glossary-tree package is automatically loaded by altsuper4col

    The altsuper4col style is like super4col but allows multi-line descriptions and page lists. - The width of the description column is governed by the length \glsdescwidth and the width of - the page list column is governed by the length \glspagelistwidth. The width of the name and - symbol columns is governed by the widest entry in the given column. -
    +class="cmss-10">glossary-mcols (even if the notree package option is used when loading glossaries). The formatting commands altsuper4colborder
    The altsuper4colborder style is like the super4colborder style but allows multi-line - descriptions and page lists. -
    +class="cmtt-10">\glstreenamefmt, \glstreegroupheaderfmt and \glstreenavigationfmt are all used by the corresponding altsuper4colheader
    The altsuper4colheader style is like super4colheader but allows multi-line - descriptions and page lists. -
    +class="cmss-10">glossary-mcols styles. +

    Note that glossary-mcols is not loaded by glossaries. If you want to use any of the multicol styles in that +package you need to load it explicitly with \usepackage and set the required glossary style using altsuper4colheaderborder
    The altsuper4colheaderborder style is like super4colheaderborder but allows - multi-line descriptions and page lists.
    -

    +class="cmtt-10">\setglossarystyle.

    +

    +

    The default number of columns is 2, but can be changed by redefining +


    \glsmcols

    +

    +to the required number. For example, for a three column glossary: + +

    -

    Top

    15.1.6 Supertabular Styles (Ragged Right)

    -

    The styles described in this section are all defined in the package glossary-superragged. These styles are -analogous to those defined in glossary-super but the multiline columns are left justified instead of fully justified. -Since these styles all use the supertabular environment, they are governed by the same parameters as that -environment. The glossary-superragged package additionally requires the array package. Note that these styles -will only be available if you explicitly load glossary-superragged: +

    +\usepackage{glossary-mcols}
    +\renewcommand*{\glsmcols}{3}
    +\setglossarystyle{mcolindex}
    +
    +

    +

    +
    + + +


    + + +
    Table 13.2: Multicolumn Styles
    +
    + + + + + + + + + +
    glossary-mcols Style Analogous Tree Style
    mcolindex index
    mcolindexgroup indexgroup
    mcolindexhypergroup or mcolindexspannav indexhypergroup
    mcoltree tree
    mcoltreegroup treegroup
    mcoltreehypergroup or mcoltreespannav treehypergroup
    mcoltreenoname treenoname
    mcoltreenonamegroup treenonamegroup
    mcoltreenonamehypergroup or mcoltreenonamespannav treenonamehypergroup
    mcolalttree alttree
    mcolalttreegroup alttreegroup
    mcolalttreehypergroup or mcolalttreespannav alttreehypergroup
    + + +

    +
    +

    The styles with a navigation line, such as mcoltreehypergroup, now have a variant (as from +v4.22) with “hypergroup” replaced with “spannav” in the style name. The original “hypergroup” +styles place the navigation line at the start of the first column. The newer “spannav” styles put the +navigation line in the optional argument of the multicols environment so that it spans across all the +columns. +

    +

    Top

    13.1.9 In-Line Style

    +

    This section covers the glossary-inline package that supplies the inline style. This is a style that is designed for +in-line use (as opposed to block styles, such as lists or tables). This style doesn’t display the number +list. +

    You will most likely need to redefine \glossarysection with this style. For example, suppose you are +required to have your glossaries and list of acronyms in a footnote, you can do:

    -
    -\usepackage{glossaries} - 
    \usepackage{glossary-superragged} -
    -

    Note that you can’t set these styles using the style package option since the styles aren’t defined until after the -glossaries package has been loaded. -

    -superragged
    The superragged style uses the supertabular environment (defined by the supertabular - package). It has two columns: the first column contains the entry’s name and the second column - contains the (left justified) description followed by the number list. The entry’s symbol is ignored. - Sub groups are separated with a blank row. The width of the first column is governed by the widest - entry in that column. The width of the second column is governed by the length \glsdescwidth. - Child entries have a similar format to the parent entries except that their name is suppressed. -
    -superraggedborder
    The superraggedborder style is like superragged but has horizontal and vertical - lines around it. -
    -superraggedheader
    The superraggedheader style is like superragged but has a header row. -
    -superraggedheaderborder
    The superraggedheaderborder style is like superraggedheader but has - horizontal and vertical lines around it. -
    -superragged3col
    The superragged3col style is like superragged but has three columns. The first column - contains the entry’s name, the second column contains the (left justified) description and the third - column contains the (left justified) number list. The entry’s symbol is ignored. The width of the - first column is governed by the widest entry in that column. The width of the second column is - governed by the length \glsdescwidth. The width of the third column is governed by the length - \glspagelistwidth. -
    -superragged3colborder
    The superragged3colborder style is like the superragged3col style but has - horizontal and vertical lines around it. -
    -superragged3colheader
    The superragged3colheader style is like superragged3col but has a header row. -
    +
    + \usepackage{glossary-inline}
    + \renewcommand*{\glossarysection}[2][]{\textbf{#1}: }
    + \setglossarystyle{inline}
    +
    +

    +

    Note that you need to include glossary-inline with \usepackage as it’s not automatically included by the superragged3colheaderborder
    The superragged3colheaderborder style is like the above but has - horizontal and vertical lines around it. +class="cmss-10">glossaries package and then set the style using \setglossarystyle.
    +

    +

    Where you need to include your glossaries as a footnote you can do: -

    -altsuperragged4col
    The altsuperragged4col style is like superragged3col but has an additional column - in which the entry’s associated symbol appears. The column widths for the name and symbol - column are governed by the widest entry in the given column. -
    -altsuperragged4colborder
    The altsuperragged4colborder style is like the altsuperragged4col style but - has horizontal and vertical lines around it. -
    -altsuperragged4colheader
    The altsuperragged4colheader style is like altsuperragged4col but has a - header row. -
    -altsuperragged4colheaderborder
    The altsuperragged4colheaderborder style is like the above but has - horizontal and vertical lines around it. -
    -

    -

    Top

    15.1.7 Tree-Like Styles

    -

    The styles described in this section are all defined in the package glossary-tree. These styles are designed for -hierarchical glossaries but can also be used with glossaries that don’t have sub-entries. These styles will display -the entry’s symbol if it exists. Note that these styles will automatically be available unless you use the notree or -nostyles package options. -

    These styles all format the entry name using: -


    \glstreenamefmt{ +\footnote{\printglossaries} + +

    +

    The inline style is governed by the following: +


    \glsinlineseparator

    +

    +This defaults to “; ” and is used between main (i.e. level 0) entries. +


    \glsinlinesubseparator

    +

    +This defaults to “, ” and is used between sub-entries. +


    \glsinlineparentchildseparator

    +

    +This defaults to “: ” and is used between a parent main entry and its first sub-entry. +


    \glspostinline

    +

    +This defaults to “; ” and is used at the end of the glossary. +


    \glsinlinenameformat{label}{name}

    -

    -This defaults to \textbf{

    +This is used to format the entry name and defaults to \glstarget{label}{name}, but note that ⟨name⟩ includes \glsnamefont so the bold setting in -\glstreenamefont may be counteracted by another font change in \glsnamefont (or in \acronymfont). The -tree-like styles that also display the header use -


    \glstreegroupheaderfmt{text}

    -

    -to format the heading. This defaults to \glstreenamefmt{text}. The tree-like styles that display navigation -links to the groups (such as indexhypergroup), format the navigation line using -


    \glstreenavigationfmt{text}

    -

    -which defaults to \glstreenamefmt{text}. -

    Note that this is different from \glslistnavigationitem, provided with the styles such as listhypergroup, as -that also includes \item. -

    With the exception of the alttree style (and those derived from it), the space before the description for -top-level entries is produced with -


    \glstreepredesc

    -

    -This defaults to \space. +class="cmtt-10">}, where ⟨name⟩ is provided in +the form \glossentryname{label} and ⟨label⟩ is the entry’s label. For example, if you want the name to appear in +small caps: -

    With the exception of the treenoname and alttree styles (and those derived from them), the space before the -description for child entries is produced with -


    \glstreechildpredesc

    -

    +

    +
    +\renewcommand*{\glsinlinenameformat}[2]{\glstarget{#1}{\textsc{#2}}}
    +
    +

    Sub-entry names are formatted according to +


    \glsinlinesubnameformat{label}{name}

    +

    This defaults to \space. -

    Most of these styles are not designed for multi-paragraph descriptions. (The tree style isn’t too bad for -multi-paragraph top-level entry descriptions, or you can use the index style with the adjustment shown below.) -
    -

    -

    -index
    The index style is similar to the way indices are usually formatted in that it has a hierarchical - structure up to three levels (the main level plus two sub-levels). The name is typeset in bold, and if - the symbol is present it is set in parentheses after the name and before the description. Sub-entries - are indented and also include the name, the symbol in brackets (if present) and the description. - Groups are separated using \indexspace. -

    Each main level item is started with -


    \glstreeitem

    -

    - The level 1 entries are started with -


    \glstreesubitem

    -

    -

    The level 2 entries are started with -


    \glstreesubsubitem

    -

    -

    Note that the index style automatically sets +class="cmtt-10">\glstarget{⟨label}{} so the sub-entry name is ignored. +

    If the description has been suppressed (according to \ifglsdescsuppressed) then +


    \glsinlineemptydescformat{symbol}{number list}

    +

    +(which defaults to nothing) is used, otherwise the description is formatted according to +


    \glsinlinedescformat{description}{symbol}{number list}

    +

    +This defaults to just \spacedescription⟩ so the symbol and location list are ignored. If the description is missing +(according to \ifglshasdesc), then \glsinlineemptydescformat is used instead. +

    For example, if you want a colon between the name and the description:

    -
    - \let\item\glstreeitem -  
    \let\subitem\glstreesubitem -  
    \let\subsubitem\glstreesubsubitem -
    -

    at the start of the glossary for backward compatibility. -

    The index style isn’t suitable for multi-paragraph descriptions, but this limitation can be overcome by - redefining the above commands. For example: +

    +\renewcommand*{\glsinlinedescformat}[3]{: #1}
    +
    +

    +

    The sub-entry description is formatted according to: +


    \glsinlinesubdescformat{description}{symbol}{number list}

    +

    +This defaults to just ⟨description⟩. +

    +

    +

    Top

    13.2 Defining your own glossary style

    +

    Commands like \printglossary are designed to produce content in the PDF. If your intention is to design a +style that doesn’t print any content (for example, to simply capture information) then you are likely to +experience unwanted side-effects. If you just want to capture indexing information (such as locations) then a +much better approach is to use bib2gls, which automatically stores this information in dedicated fields when +the entry is defined.
    +

    +

    If the predefined styles don’t fit your requirements, you can define your own style using: +


    \newglossarystyle{name}{definitions}

    +

    +where ⟨name⟩ is the name of the new glossary style (to be used in \setglossarystyle). The second argument +⟨definitions⟩ needs to redefine all of the following: +


    theglossary

    +

    +This environment defines how the main body of the glossary should be typeset. +

    Note that this does not include the section heading, the glossary preamble (defined by \glossarypreamble) +or the glossary postamble (defined by \glossarypostamble). For example, the list style uses the description +environment, so the theglossary environment is simply redefined to begin and end the description +environment. +


    \glossaryheader

    +

    +This macro indicates what to do at the start of the main body of the glossary. Note that this is not the same as +\glossarypreamble, which should not be affected by changes in the glossary style. The list glossary style +redefines \glossaryheader to do nothing, whereas the longheader glossary style redefines \glossaryheader to +do a header row. +


    \glsgroupheading{label}

    +

    +This macro indicates what to do at the start of each logical block within the main body of the glossary. If you +use makeindex the glossary is sub-divided into a maximum of twenty-eight logical blocks that are determined by -

    -
    - \renewcommand{\glstreeitem}{% -  
     \parindent0pt\par\hangindent40pt -  
     \everypar{\parindent50pt\hangindent40pt}} -
    -

    -

    -indexgroup
    The indexgroup style is similar to the index style except that each group has a heading - obtained using sort key (or name key if the sort key is omitted). The sub-divisions are in the +following order: symbols, numbers, A, …, Z. If you use xindy, the sub-divisions depend on the language +settings. +

    Note that the argument to \glsgroupheading is a label not the group title. The group title can be obtained +via +


    \glsgetgrouptitle{label}

    +

    +This obtains the title as follows: if ⟨label⟩ consists of a single non-active character or ⟨label⟩ is equal to glssymbols +or glsnumbers and \label}, which is described in §15.2 Defining your own glossary - style. -

    -indexhypergroup
    The indexhypergroup style is like indexgroup but has a set of links to the glossary groups. - The navigation line is the same as that for listhypergroup, described above, but is formatted using - \glstreenavigationfmt. -
    -tree
    The tree style is similar to the index style except that it can have arbitrary levels. (Note that makeindex is - limited to three levels, so you will need to use groupname exists, this is taken to be the title, otherwise the title is just ⟨label⟩. +(The “symbols” group has the label glssymbols, so the command \glssymbolsgroupname is used, +and the “numbers” group has the label glsnumbers, so the command \glsnumbersgrouptitle is +used.) If you are using xindy if you want more than three levels.) Each sub-level is - indented by \glstreeindent. Note that the name, symbol (if present) and description are placed in the - same paragraph block. If you want the name to be apart from the description, use the alttree style instead. - (See below.) -
    -treegroup
    The treegroup style is similar to the tree style except that each group has a heading. -
    + id="dx1-165030">, ⟨label⟩ may be an active character (for example ø), in which case the +title will be set to just ⟨label⟩. You can redefine \glsgetgrouptitle if this is unsuitable for your +document. +

    A navigation hypertarget can be created using +


    \glsnavhypertarget{label}{text}

    +

    +This typically requires \glossaryheader to be redefined to use +


    \glsnavigation

    +

    +which displays the navigation line. +

    For further details about \glsnavhypertarget, see the documented code (glossaries-code.pdf). +

    Most of the predefined glossary styles redefine \glsgroupheading to simply ignore its argument. The treehypergroup

    The treehypergroup style is like treegroup but has a set of links to the glossary groups. The - navigation line is the same as that for listhypergroup, described above, but is formatted using - \glstreenavigationfmt. -
    + id="dx1-165033"> style redefines \glsgroupheading as follows: + + +

    +
    +\renewcommand*{\glsgroupheading}[1]{%
    +\item[\glsnavhypertarget{##1}{\glsgetgrouptitle{##1}}]}
    +
    +

    See also \glsgroupskip below. +

    Note that command definitions within \newglossarystyle must use ##1 instead of #1 etc. +


    \glsgroupskip

    +

    +This macro determines what to do after one logical group but before the header for the next logical group. The treenoname

    The treenoname style is like the tree style except that the name for each sub-entry is - ignored. -
    +class="cmss-10">list glossary style simply redefines \glsgroupskip to be \indexspace, whereas the tabular-like styles redefine treenonamegroup
    The treenonamegroup style is similar to the treenoname style except that each group has a - heading. -
    +class="cmtt-10">\glsgroupskip to produce a blank row. +

    As from version 3.03, the package option nogroupskip can be used to suppress this default gap for the +predefined styles. +


    \glossentry{label}{number list}

    +

    +This macro indicates what to do for each top-level (level 0) glossary entry. The entry label is given by ⟨label⟩ and +the associated number list is given by ⟨number list⟩. You can redefine \glossentry to use commands like treenonamehypergroup

    The treenonamehypergroup style is like treenonamegroup but has a set of links to the - glossary groups. The navigation line is the same as that for listhypergroup, described above, but is - formatted using \glstreenavigationfmt. +class="cmtt-10">\glossentryname{label}, \glossentrydesc{label} and \glossentrysymbol{label} to display the name, +description and symbol fields, or to access other fields, use commands like \glsentryuseri{label}. (See +§??sec:glsnolink Using Glossary Terms Without Links for further details.) You can also use the following +commands: +


    \glsentryitem{label}

    +

    +This macro will increment and display the associated counter for the main (level 0) entries if the entrycounter or +counterwithin package options have been used. This macro is typically called by \glossentry before +\glstarget. The format of the counter is controlled by the macro +


    \glsentrycounterlabel

    +

    +

    Each time you use a glossary entry it creates a hyperlink (if hyperlinks are enabled) to the relevant line in +the glossary. Your new glossary style must therefore redefine \glossentry to set the appropriate target. This is +done using +


    \glstarget{label}{text}

    +

    +where ⟨label⟩ is the entry’s label. Note that you don’t need to worry about whether the hyperref package has been +loaded, as \glstarget won’t create a target if \hypertarget hasn’t been defined. +

    For example, the list style defines \glossentry as follows: -

    +

    +
    +  \renewcommand*{\glossentry}[2]{%
    +    \item[\glsentryitem{##1}%
    +          \glstarget{##1}{\glossentryname{##1}}]
    +       \glossentrydesc{##1}\glspostdescription\space ##2}
    +
    +

    +

    Note also that ⟨number list⟩ will always be of the form +


    \glossaryentrynumbers{\relax
    \setentrycounter[Hprefix]{counter name}format cmd{number(s)}}

    +

    +where ⟨number(s)⟩ may contain \delimN (to delimit individual numbers) and/or \delimR (to indicate a range of +numbers). There may be multiple occurrences of \setentrycounter[Hprefix]{counter name}format cmdalttree

    The alttree style is similar to the tree style except that the indentation for each level is determined by - the width of the text specified by -


    \glssetwidest[{number(s)}, but note that the entire number list is enclosed within the argument of \glossaryentrynumbers. +The user can redefine this to change the way the entire number list is formatted, regardless of the glossary style. +However the most common use of \glossaryentrynumbers is to provide a means of suppressing the number list +altogether. (In fact, the nonumberlist option redefines \glossaryentrynumbers to ignore its argument.) +Therefore, when you define a new glossary style, you don’t need to worry about whether the user has specified +the nonumberlist package option. +


    \subglossentry{level]{text}{label}{number list}

    -

    - The optional argument ⟨level⟩ indicates the level, where 0 indicates the top-most level, 1 indicates the first - level sub-entries, etc. If \glssetwidest hasn’t been used for a given sub-level, the level 0 widest text is - used instead. If ⟨level⟩ is omitted, 0 is assumed. -

    As from v4.22, the glossary-tree package also provides -


    \glsfindwidesttoplevelname[glossary list]

    -

    - This iterates over all parentless entries in the given glossary lists and determines the widest entry. If the - optional argument is omitted, all glossaries are assumed (as per \forallglossaries). -

    For example, to have the same name width for all glossaries: +

    +This is used to display sub-entries. The first argument, ⟨level⟩, indicates the sub-entry level. This must be an +integer from 1 (first sub-level) onwards. The remaining arguments are analogous to those for \glossentry +described above. +


    \glssubentryitem{label}

    +

    +This macro will increment and display the associated counter for the level 1 entries if the subentrycounter +package option has been used. This macro is typically called by \subglossentry before \glstarget. The +format of the counter is controlled by the macro +


    \glssubentrycounterlabel

    +

    +

    Note that \printglossary (which \printglossaries calls) sets +


    \currentglossary

    +

    +to the current glossary label, so it’s possible to create a glossary style that varies according to the glossary +type. +

    For further details of these commands, see “Displaying the glossary” in the documented code +(glossaries-code.pdf). + +

    Example 23 (Creating a completely new style) +

    If you want a completely new style, you will need to redefine all of the commands and the environment listed -

    -
    - \glsfindwidesttoplevelname -  
    \setglossarystyle{alttree} -  
    \printglossaries -
    -

    Alternatively, to compute the widest entry for each glossary before it’s displayed: +above. +

    For example, suppose you want each entry to start with a bullet point. This means that the glossary should +be placed in the itemize environment, so theglossary should start and end that environment. Let’s also suppose +that you don’t want anything between the glossary groups (so \glsgroupheading and \glsgroupskip should +do nothing) and suppose you don’t want anything to appear immediately after \begin{theglossary} (so +\glossaryheader should do nothing). In addition, let’s suppose the symbol should appear in brackets +after the name, followed by the description and last of all the number list should appear within +square brackets at the end. Then you can create this new glossary style, called, say, mylist, as +follows:

    -
    - \renewcommand{\glossarypreamble}{% -  
      \glsfindwidesttoplevelname[\currentglossary]} -  
    \setglossarystyle{alttree} -  
    \printglossaries -
    -

    -

    These commands only affects the alttree styles, including those listed below and the ones in the +
    + \newglossarystyle{mylist}{%
    + % put the glossary in the itemize environment:
    + \renewenvironment{theglossary}%
    +   {\begin{itemize}}{\end{itemize}}%
    + % have nothing after \begin{theglossary}:
    + \renewcommand*{\glossaryheader}{}%
    + % have nothing between glossary groups:
    + \renewcommand*{\glsgroupheading}[1]{}%
    + \renewcommand*{\glsgroupskip}{}%
    + % set how each entry should appear:
    + \renewcommand*{\glossentry}[2]{%
    + \item % bullet point
    + \glstarget{##1}{\glossentryname{##1}}% the entry name
    + \space (\glossentrysymbol{##1})% the symbol in brackets
    + \space \glossentrydesc{##1}% the description
    + \space [##2]% the number list in square brackets
    + }%
    + % set how sub-entries appear:
    + \renewcommand*{\subglossentry}[3]{%
    +   \glossentry{##2}{##3}}%
    + }
    +
    +

    Note that this style creates a flat glossary, where sub-entries are displayed in exactly the same way as the top +level entries. It also hasn’t used \glsentryitem or \glssubentryitem so it won’t be affected by the +entrycounter, counterwithin or subentrycounter package options. +

    Variations:

    +
      +
    • +

      You might want the entry name to be capitalised, in which case use \Glossentryname instead of glossary-mcols package. If you forget to set the widest entry name, the description will overwrite the name. -

    -

    -

    For each level, the name is placed to the left of the paragraph block containing the symbol - (optional) and the description. If the symbol is present, it is placed in parentheses before the - description. -

    The name is placed inside a left-aligned \makebox. As from v4.19, this can now be adjusted by - redefining -


    \glstreenamebox{width}{text}

    -

    - where ⟨width⟩ is the width of the box and ⟨text⟩ is the contents of the box. For example, to make the name - right-aligned: +class="cmtt-10">\glossentryname. +

    +
  • +

    You might want to check if the symbol hasn’t been set and omit the parentheses if the symbol is absent. In + this case you can use \ifglshassymbol (see §??sec:utilities Utilities):

    -
    - \renewcommand*{\glstreenamebox}[2]{% -  
      \makebox[#1][r]{#2}% -  
    } -
    -

    -

  • -alttreegroup
    The alttreegroup is like the alttree style except that each group has a heading. -
    -alttreehypergroup
    The alttreehypergroup style is like alttreegroup but has a set of links to the glossary groups. - The navigation line is the same as that for listhypergroup, described above. -
    -

    -

    -

    Top

    15.1.8 Multicols Style

    -

    The glossary-mcols package provides tree-like styles that are in the multicols environment (defined by the multicol -package). The style names are as their analogous tree styles (as defined in §15.1.7 Tree-Like Styles) but are -prefixed with “mcol”. For example, the mcolindex style is essentially the index style but put in a multicols -environment. For the complete list, see table 15.2. The glossary-tree package is automatically loaded by -glossary-mcols (even if the notree package option is used when loading glossaries). The formatting commands -\glstreenamefmt, \glstreegroupheaderfmt and \glstreenavigationfmt are all used by the corresponding -glossary-mcols styles. -

    Note that glossary-mcols is not loaded by glossaries. If you want to use any of the multicol styles in that -package you need to load it explicitly with \usepackage and set the required glossary style using +
    +      \renewcommand*{\glossentry}[2]{%
    +      \item % bullet point
    +      \glstarget{##1}{\glossentryname{##1}}% the entry name
    +      \ifglshassymbol{##1}% check if symbol exists
    +      {%
    +        \space (\glossentrysymbol{##1})% the symbol in brackets
    +      }%
    +      {}% no symbol so do nothing
    +      \space \glossentrydesc{##1}% the description
    +      \space [##2]% the number list in square brackets
    +      }%
    +
    +

    +
    +

    +

    ____________________________

    + +

    Example 24 (Creating a new glossary style based on an existing style) +

    If you want to define a new style that is a slightly modified version of an existing style, you can use \setglossarystyle.

    -

    -

    The default number of columns is 2, but can be changed by redefining -


    \glsmcols

    -

    -to the required number. For example, for a three column glossary: + id="dx1-165092"> within the second argument of \newglossarystyle followed by whatever alterations you +require. For example, suppose you want a style like the list style but you don’t want the extra vertical space +created by \indexspace between groups, then you can create a new glossary style called, say, mylist as +follows:

    -
    -\usepackage{glossary-mcols} - 
    \renewcommand*{\glsmcols}{3} - 
    \setglossarystyle{mcolindex} -
    -

    -

    -
    - - -


    +\newglossarystyle{mylist}{% +\setglossarystyle{list}% base this style on the list style +\renewcommand{\glsgroupskip}{}% make nothing happen +                              % between groups +} + +

    (In this case, you can actually achieve the same effect using the list style in combination with the package +option nogroupskip.)

    +
    +

    +

    ____________________________

    + +

    Example 25 (Example: creating a glossary style that uses the user1, …, user6 +keys) +

    Suppose each entry not only has an associated symbol, but also units (stored in user1) and dimension +(stored in user2). Then you can define a glossary style that displays each entry in a longtable as +follows: -

    Table 15.2: Multicolumn Styles
    -
    - - - - - - - - - -
    glossary-mcols Style Analogous Tree Style
    mcolindex index
    mcolindexgroup indexgroup
    mcolindexhypergroup or mcolindexspannav indexhypergroup
    mcoltree tree
    mcoltreegroup treegroup
    mcoltreehypergroup or mcoltreespannav treehypergroup
    mcoltreenoname treenoname
    mcoltreenonamegroup treenonamegroup
    mcoltreenonamehypergroup or mcoltreenonamespannav treenonamehypergroup
    mcolalttree alttree
    mcolalttreegroup alttreegroup
    mcolalttreehypergroup or mcolalttreespannav alttreehypergroup
    +

    +
    +\newglossarystyle{long6col}{%
    + % put the glossary in a longtable environment:
    + \renewenvironment{theglossary}%
    +  {\begin{longtable}{lp{\glsdescwidth}cccp{\glspagelistwidth}}}%
    +  {\end{longtable}}%
    + % Set the table's header:
    + \renewcommand*{\glossaryheader}{%
    +  \bfseries Term & \bfseries Description & \bfseries Symbol &
    +  \bfseries Units & \bfseries Dimensions & \bfseries Page List
    +  \\\endhead}%
    + % No heading between groups:
    +  \renewcommand*{\glsgroupheading}[1]{}%
    + % Main (level 0) entries displayed in a row optionally numbered:
    +  \renewcommand*{\glossentry}[2]{%
    +    \glsentryitem{##1}% Entry number if required
    +    \glstarget{##1}{\glossentryname{##1}}% Name
    +    & \glossentrydesc{##1}% Description
    +    & \glossentrysymbol{##1}% Symbol
    +    & \glsentryuseri{##1}% Units
    +    & \glsentryuserii{##1}% Dimensions
    +    & ##2% Page list
    +    \tabularnewline % end of row
    +  }%
    + % Similarly for sub-entries (no sub-entry numbers):
    + \renewcommand*{\subglossentry}[3]{%
    +    % ignoring first argument (sub-level)
    +    \glstarget{##2}{\glossentryname{##2}}% Name
    +    & \glossentrydesc{##2}% Description
    +    & \glossentrysymbol{##2}% Symbol
    +    & \glsentryuseri{##2}% Units
    +    & \glsentryuserii{##2}% Dimensions
    +    & ##3% Page list
    +    \tabularnewline % end of row
    +  }%
    + % Nothing between groups:
    + \renewcommand*{\glsgroupskip}{}%
    +}
    +
    +

    +
    +

    +

    ____________________________

    -

    -
    -

    The styles with a navigation line, such as mcoltreehypergroup, now have a variant (as from -v4.22) with “hypergroup” replaced with “spannav” in the style name. The original “hypergroup” -styles place the navigation line at the start of the first column. The newer “spannav” styles put the -navigation line in the optional argument of the multicols environment so that it spans across all the -columns. -

    -

    Top

    15.1.9 In-Line Style

    -

    This section covers the glossary-inline package that supplies the inline style. This is a style that is designed for -in-line use (as opposed to block styles, such as lists or tables). This style doesn’t display the number -list. -

    You will most likely need to redefine \glossarysection with this style. For example, suppose you are -required to have your glossaries and list of acronyms in a footnote, you can do: +

    +

    Top

    14. Xindy (Option 3)

    +

    If you want to use xindy to sort the glossary, you must use the package option xindy:

    -
    - \usepackage{glossary-inline} - 
     \renewcommand*{\glossarysection}[2][]{\textbf{#1}: } - 
     \setglossarystyle{inline} -
    -

    -

    Note that you need to include glossary-inline with \usepackage as it’s not automatically included by the +
    +\usepackage[xindy]{glossaries}
    +
    +

    This ensures that the glossary information is written in xindy syntax. +

    §??sec:makeglossaries Generating the Associated Glossary Files covers how to use the external indexing +application, and §??sec:locationsyntax Locations covers the issues involved in the location syntax. This section +covers the commands provided by the glossaries package that allow you to adjust the xindy style file (xdy) and +parameters. +

    To assist writing information to the xindy style file, the glossaries package provides the following +commands: +


    \glsopenbrace

    +

    +


    \glsclosebrace

    +

    +which produce an open and closing brace. (This is needed because \{ and \} don’t expand to a simple brace +character when written to a file.) Similarly, you can write a percent character using: +


    \glspercentchar

    +

    +and a tilde character using: +


    \glstildechar

    +

    +For example, a newline character is specified in a xindy style file using ~n so you can use \glstildechar n to +write this correctly (or you can do \string~n). A backslash can be written to a file using +


    \glsbackslash

    +

    +

    In addition, if you are using a package that makes the double quote character active (e.g. ngerman) you can +use: +


    \glsquote{text}

    +

    +which will produce "text". Alternatively, you can use \string" to write the double-quote character. This +document assumes that the double quote character has not been made active, so the examples just use " for +clarity. +

    If you want greater control over the xindy style file than is available through the LaTeX commands +provided by the glossaries package, you will need to edit the xindy style file. In which case, you must use glossaries package and then set the style using \setglossarystyle.

    -

    -

    Where you need to include your glossaries as a footnote you can do: +class="cmtt-10">\noist to prevent the style file from being overwritten by the glossaries package. For additional +information about xindy, read the xindy documentation. I’m sorry I can’t provide any assistance +with writing xindy style files. If you need help, I recommend you ask on the xindy mailing list +(http://xindy.sourceforge.net/mailing-list.html). +

    -

    -
    -\footnote{\printglossaries} -
    -

    -

    The inline style is governed by the following: -


    \glsinlineseparator

    -

    -This defaults to “; ” and is used between main (i.e. level 0) entries. -


    \glsinlinesubseparator

    -

    -This defaults to “, ” and is used between sub-entries. -


    \glsinlineparentchildseparator

    -

    -This defaults to “: ” and is used between a parent main entry and its first sub-entry. -


    \glspostinline

    -

    -This defaults to “; ” and is used at the end of the glossary. -


    \glsinlinenameformat{label}{name

    Top

    14.1 Language and Encodings

    +

    When you use xindy, you need to specify the language and encoding used (unless you have written your own +custom xindy style file that defines the relevant alphabet and sort rules). If you use makeglossaries, +this information is obtained from the document’s auxiliary (aux) file. The makeglossaries script +attempts to find the root language given your document settings, but in the event that it gets +it wrong or if xindy doesn’t support that language, then you can specify the required language +using: +


    \GlsSetXdyLanguage[glossary type]{language}

    -

    -This is used to format the entry name and defaults to \glstarget{label}{name}, where ⟨name⟩ is provided in -the form \glossentryname{label} and ⟨label⟩ is the entry’s label. For example, if you want the name to appear in -small caps: +

    +where ⟨language⟩ is the name of the language. The optional argument can be used if you have multiple glossaries +in different languages. If ⟨glossary type⟩ is omitted, it will be applied to all glossaries, otherwise the language +setting will only be applied to the glossary given by ⟨glossary type⟩. +

    If the inputenc package is used, the encoding will be obtained from the value of \inputencodingname. +Alternatively, you can specify the encoding using: +


    \GlsSetXdyCodePage{code}

    +

    +where ⟨code⟩ is the name of the encoding. For example:

    -
    -\renewcommand*{\glsinlinenameformat}[2]{\glstarget{#1}{\textsc{#2}}} -
    -

    Sub-entry names are formatted according to -


    \glsinlinesubnameformat{label}{name}

    -

    -This defaults to \glstarget{label}{} so the sub-entry name is ignored. -

    If the description has been suppressed (according to \ifglsdescsuppressed) then -


    \glsinlineemptydescformat{symbol}{number list}

    -

    -(which defaults to nothing) is used, otherwise the description is formatted according to -


    \glsinlinedescformat{description}{symbol}{number list}

    -

    -This defaults to just \spacedescription⟩ so the symbol and location list are ignored. If the description is missing -(according to \ifglshasdesc), then \glsinlineemptydescformat is used instead. -

    For example, if you want a colon between the name and the description: +

    +\GlsSetXdyCodePage{utf8}
    +
    +

    +

    Note that you can also specify the language and encoding using the package option +xindy={language=lang,codepage=code}. For example:

    -
    -\renewcommand*{\glsinlinedescformat}[3]{: #1} -
    -

    -

    The sub-entry description is formatted according to: -


    \glsinlinesubdescformat{description}{symbol}{number list}

    -

    -This defaults to just ⟨description⟩. -

    +

    +\usepackage[xindy={language=english,codepage=utf8}]{glossaries}
    +
    +

    +

    If you write your own custom xindy style file that includes the language settings, you need to set the +language to nothing: + +

    -

    Top

    15.2 Defining your own glossary style

    -

    If the predefined styles don’t fit your requirements, you can define your own style using: -


    \newglossarystyle{name}{definitions}

    -

    -where ⟨name⟩ is the name of the new glossary style (to be used in \setglossarystyle). The second argument -⟨definitions⟩ needs to redefine all of the following: -


    theglossary

    -

    -This environment defines how the main body of the glossary should be typeset. -

    Note that this does not include the section heading, the glossary preamble (defined by \glossarypreamble) -or the glossary postamble (defined by \glossarypostamble). For example, the list style uses the description -environment, so the theglossary environment is simply redefined to begin and end the description -environment. -


    \glossaryheader

    -

    -This macro indicates what to do at the start of the main body of the glossary. Note that this is not the same as -\glossarypreamble, which should not be affected by changes in the glossary style. The list glossary style -redefines \glossaryheader to do nothing, whereas the longheader glossary style redefines \glossaryheader to -do a header row. -


    \glsgroupheading{label +\GlsSetXdyLanguage{} + +

    (and remember to use \noist to prevent the style file from being overwritten). +

    The commands \GlsSetXdyLanguage and \GlsSetXdyCodePage have no effect if you don’t use +makeglossaries. If you call xindy without makeglossaries you need to remember to set the language and +encoding using the -L and -C switches.
    +

    +

    +

    +

    Top

    14.2 Locations and Number lists

    +

    If you use xindy, the glossaries package needs to know which counters you will be using in the number list in +order to correctly format the xindy style file. Counters specified using the counter package option or the ⟨counter⟩ +option of \newglossary are automatically taken care of, but if you plan to use a different counter in the +counter key for commands like \glslink, then you need to identify these counters before \makeglossaries +using: +


    \GlsAddXdyCounters{counter list}

    -

    -This macro indicates what to do at the start of each logical block within the main body of the glossary. If you -use makeindex the glossary is sub-divided into a maximum of twenty-eight logical blocks that are determined by -the first character of the sort key (or name key if the sort key is omitted). The sub-divisions are in the -following order: symbols, numbers, A, …, Z. If you use

    +where ⟨counter list⟩ is a comma-separated list of counter names. +

    The most likely attributes used in the format key (textrm, hyperrm etc) are automatically added to the +xindy, the sub-divisions depend on the language -settings. -

    Note that the argument to \glsgroupheading is a label not the group title. The group title can be obtained -via -


    \glsgetgrouptitle{label style file, but if you want to use another attribute, you need to add it using: +


    \GlsAddXdyAttribute{name}

    +

    +where ⟨name⟩ is the name of the attribute, as used in the format key. +

    Take care if you have multiple instances of the same location with different formats. The duplicate locations +will be discarded according to the order in which the attributes are listed. Consider defining semantic commands +to use for primary references. For example: -

    -This obtains the title as follows: if ⟨label⟩ consists of a single non-active character or ⟨label⟩ is equal to glssymbols -or glsnumbers and \labelgroupname exists, this is taken to be the title, otherwise the title is just ⟨label⟩. -(The “symbols” group has the label glssymbols, so the command \glssymbolsgroupname is used, -and the “numbers” group has the label glsnumbers, so the command \glsnumbersgrouptitle is -used.) If you are using +

    +\newcommand*{\primary}[1]{\textbf{#1}}
    +\GlsAddXdyAttribute{primary}
    +
    +

    Then in the document: + + +

    +
    +A \gls[format=primary]{duck} is an aquatic bird.
    +There are lots of different types of \gls{duck}.
    +
    +

    This will give the format=primary instance preference over the next use that doesn’t use the format +key. + +

    Example 26 (Custom Font for Displaying a Location) +

    Suppose I want a bold, italic, hyperlinked location. I first need to define a command that will do +this: + + +

    +
    +\newcommand*{\hyperbfit}[1]{\textit{\hyperbf{#1}}}
    +
    +

    but with xindy, ⟨label⟩ may be an active character (for example ø), in which case the -title will be set to just ⟨label⟩. You can redefine \glsgetgrouptitle if this is unsuitable for your -document. -

    A navigation hypertarget can be created using -


    \glsnavhypertarget{label}{text}

    -

    -This typically requires \glossaryheader to be redefined to use -


    \glsnavigation

    -

    -which displays the navigation line. -

    For further details about \glsnavhypertarget, see the documented code (glossaries-code.pdf). -

    Most of the predefined glossary styles redefine \glsgroupheading to simply ignore its argument. The -listhypergroup style redefines \glsgroupheading as follows: + id="dx1-168021">, I also need to add this as an allowed attribute:

    -
    -\renewcommand*{\glsgroupheading}[1]{% - 
    \item[\glsnavhypertarget{##1}{\glsgetgrouptitle{##1}}]} -
    -

    See also \glsgroupskip below. -

    Note that command definitions within \newglossarystyle must use ##1 instead of #1 etc. -


    \glsgroupskip

    -

    -This macro determines what to do after one logical group but before the header for the next logical group. The -list glossary style simply redefines \glsgroupskip to be \indexspace, whereas the tabular-like styles redefine +

    +\GlsAddXdyAttribute{hyperbfit}
    +
    +

    Now I can use it in the optional argument of commands like \gls: + + +

    +
    +Here is a \gls[format=hyperbfit]{sample} entry.
    +
    +

    (where sample is the label of the required entry).

    +
    +

    +

    ____________________________

    +

    Note that \GlsAddXdyAttribute has no effect if \noist is used or if \makeglossaries is omitted. \glsgroupskip to produce a blank row. -

    As from version 3.03, the package option nogroupskip can be used to suppress this default gap for the -predefined styles. -


    \glossentry{label\GlsAddXdyAttribute must be used before \makeglossaries. Additionally, \GlsAddXdyCounters must come +before \GlsAddXdyAttribute.
    +

    +

    If the location numbers include formatting commands, then you need to add a location style in the +appropriate format using +


    \GlsAddXdyLocation[prefix-location]{name}{number listdefinition}

    -

    -This macro indicates what to do for each top-level (level 0) glossary entry. The entry label is given by ⟨label⟩ and -the associated number list is given by ⟨number list⟩. You can redefine \glossentry to use commands like +

    +where ⟨name⟩ is the name of the format and ⟨definition⟩ is the xindy definition. The optional argument +⟨prefix-location⟩ is needed if \theHcounter⟩ either isn’t defined or is different from \thecounter⟩. Be sure to also +read §??sec:locationsyntax Locations for some issues that you may encounter. +

    Note that \GlsAddXdyLocation has no effect if \noist is used or if \makeglossaries is omitted. \glossentryname{label}, \glossentrydesc{label} and \glossentrysymbol\GlsAddXdyLocation must be used before \makeglossaries.
    +

    + +

    Example 27 (Custom Numbering System for Locations) +

    Suppose I decide to use a somewhat eccentric numbering system for sections where I redefine \thesection +as follows: + + +

    +
    +\renewcommand*{\thesection}{[\thechapter]\arabic{section}}
    +
    +

    If I haven’t done counter=section in the package option, I need to specify that the counter will be used as a +location number: + + +

    +
    +\GlsAddXdyCounters{section}
    +
    +

    Next I need to add the location style (\thechapter is assumed to be the standard \arabic{chapter}): + + +

    +
    +\GlsAddXdyLocation{section}{:sep "[" "arabic-numbers" :sep "]"
    +  "arabic-numbers"
    +}
    +
    +

    Note that if I have further decided to use the hyperref package and want to redefine \theHsection +as: + + +

    +
    +\renewcommand*{\theHsection}{\thepart.\thesection}
    +\renewcommand*{\thepart}{\Roman{part}}
    +
    +

    then I need to modify the \GlsAddXdyLocation code above to: + + +

    +
    +\GlsAddXdyLocation["roman-numbers-uppercase"]{section}{:sep "["
    +  "arabic-numbers" :sep "]" "arabic-numbers"
    +}
    +
    +

    Since \Roman will result in an empty string if the counter is zero, it’s a good idea to add an extra location to +catch this: + + +

    +
    +\GlsAddXdyLocation{zero.section}{:sep "["
    +  "arabic-numbers" :sep "]" "arabic-numbers"
    +}
    +
    +

    This example is illustrated in the sample file samplexdy2.tex.

    +
    +

    +

    ____________________________

    + +

    Example 28 (Locations as Dice) +

    Suppose I want a rather eccentric page numbering system that’s represented by the number of dots on dice. +The stix package provides \dicei, …, \dicevi that represent the six sides of a die. I can define a command +that takes a number as its argument. If the number is less than seven, the appropriate \dicen⟩ +command is used otherwise it does \dicevi the required number of times with the leftover in a final +\dicen⟩. For example, the number 16 is represented by \dicevi\dicevi\diceiv (6 + 6 + 4 = 16). +I’ve called this command \tallynum to match the example given earlier in §??sec:locationsyntax +Locations: + + +

    +
    +\newrobustcmd{\tallynum}[1]{%
    + \ifnum\number#1<7
    +  $\csname dice\romannumeral#1\endcsname$%
    + \else
    +  $\dicevi$%
    +  \expandafter\tallynum\expandafter{\numexpr#1-6}%
    + \fi
    +}
    +
    +

    Here’s the counter command: + + +

    +
    +newcommand{\tally}[1]{\tallynum{\arabic{#1}}}
    +
    +

    The page counter representation (\thepage) needs to be changed to use this command: + + +

    +
    +\renewcommand*{\thepage}{\tally{page}}
    +
    +

    The \tally command expands to \tallynum {number} so this needs a location class that matches this +format: + + +

    +
    +\GlsAddXdyLocation{tally}{%
    + :sep "\string\tallynum\space\glsopenbrace"
    + "arabic-numbers"
    + :sep "\glsclosebrace"
    +}
    +
    +

    The space between \tallynum and {label} to display the name, -description and symbol fields, or to access other fields, use commands like \glsentryuserinumber} is significant to xindy so \space is required. +

    Note that \GlsAddXdyLocation{name}{definition} will define commands in the form: +


    \glsXcounterXname{label}. -(See §9 Using Glossary Terms Without Links for further details.) You can also use the following -commands: -


    \glsentryitem{label}

    -

    -This macro will increment and display the associated counter for the main (level 0) entries if the entrycounter or -counterwithin package options have been used. This macro is typically called by \glossentry before -\glstarget. The format of the counter is controlled by the macro -


    \glsentrycounterlabel

    -

    -

    Each time you use a glossary entry it creates a hyperlink (if hyperlinks are enabled) to the relevant line in -the glossary. Your new glossary style must therefore redefine \glossentry to set the appropriate target. This is -done using -


    \glstarget{labelHprefix}{textlocation}

    -

    -where ⟨label⟩ is the entry’s label. Note that you don’t need to worry about whether the

    +for each counter that has been identified either by the counter package option, the ⟨counter⟩ option for +\newglossary or in the argument of \GlsAddXdyCounters. The first argument ⟨Hprefix⟩ is only relevant when +used with the hyperref package has been -loaded, as \glstarget won’t create a target if \hypertarget hasn’t been defined. -

    For example, the list style defines \glossentry as follows: + id="dx1-168044"> package and indicates that \theHcounter⟩ is given by \Hprefix.\thecounter⟩. +

    The sample file samplexdy.tex, which comes with the glossaries package, uses the default page counter for +locations, and it uses the default \glsnumberformat and a custom \hyperbfit format. A new xindy location +called tallynum, as illustrated above, is defined to make the page numbers appear as dice. In order for the +location numbers to hyperlink to the relevant pages, I need to redefine the necessary \glsXcounterXformat⟩ +commands:

    -
    -  \renewcommand*{\glossentry}[2]{% - 
        \item[\glsentryitem{##1}% - 
              \glstarget{##1}{\glossentryname{##1}}] - 
           \glossentrydesc{##1}\glspostdescription\space ##2} +
    +\renewcommand{\glsXpageXglsnumberformat}[2]{%
    + \linkpagenumber#2%
    +}
    +\renewcommand{\glsXpageXhyperbfit}[2]{%
    + \textbf{\em\linkpagenumber#2}%
    +}
    +\newcommand{\linkpagenumber}[2]{\hyperlink{page.#2}{#1{#2}}}
    +
    +

    Note that the second argument of \glsXpageXglsnumberformat is in the format \tallynum{n} so the +line + + +

    +
    + \linkpagenumber#2%
    +
    +

    does

    +
    + \linkpagenumber\tallynum{number}
    -

    -

    Note also that ⟨number list⟩ will always be of the form -


    \glossaryentrynumbers{\relax
    \setentrycounter[Hprefix]{counter name}format cmd so \tallynum is the first argument of \linkpagenumber and ⟨number⟩ is the second argument. +
    +

    +

    ____________________________

    +

    This method is very sensitive to the internal definition of the location command.
    +

    + +

    Example 29 (Locations as Words not Digits) +

    Suppose I want the page numbers written as words rather than digits and I use the fmtcount package to do +this. I can redefine \thepage as follows: + + +

    +
    +\renewcommand*{\thepage}{\Numberstring{page}}
    +
    +

    This used to get expanded to \protect \Numberstringnum {number(s)}}


    -

    -where ⟨number(s)⟩ may contain \delimN (to delimit individual numbers) and/or \delimR (to indicate a range of -numbers). There may be multiple occurrences of \setentrycounter[Hprefix]{counter name}format cmd⟩ +class="cmti-10">n⟩} where ⟨n⟩ is the Arabic page number. This +means that I needed to define a new location with the form: + + +

    +
    +\GlsAddXdyLocation{Numberstring}{:sep "\string\protect\space
    +  \string\Numberstringnum\space\glsopenbrace"
    +  "arabic-numbers" :sep "\glsclosebrace"}
    +
    +

    and if I’d used the \linkpagenumber command from the previous example, it would need three arguments (the +first being \protect): + + +

    +
    +\newcommand{\linkpagenumber}[3]{\hyperlink{page.#3}{#1#2{#3}}}
    +
    +

    +

    The internal definition of \Numberstring has since changed so that it now expands to \Numberstringnum  {number(s)}, but note that the entire number list is enclosed within the argument of \glossaryentrynumbers. -The user can redefine this to change the way the entire number list is formatted, regardless of the glossary style. -However the most common use of \glossaryentrynumbers is to provide a means of suppressing the number list -altogether. (In fact, the nonumberlist option redefines \glossaryentrynumbers to ignore its argument.) -Therefore, when you define a new glossary style, you don’t need to worry about whether the user has specified -the nonumberlist package option. -


    \subglossentry{level}{label}{number list}

    -

    -This is used to display sub-entries. The first argument, ⟨level⟩, indicates the sub-entry level. This must be an -integer from 1 (first sub-level) onwards. The remaining arguments are analogous to those for \glossentry -described above. -


    \glssubentryitem{label}

    -

    -This macro will increment and display the associated counter for the level 1 entries if the subentrycounter -package option has been used. This macro is typically called by \subglossentry before \glstarget. The -format of the counter is controlled by the macro -


    \glssubentrycounterlabel

    -

    -

    Note that \printglossary (which \printglossaries calls) sets -


    \currentglossary

    -

    -to the current glossary label, so it’s possible to create a glossary style that varies according to the glossary -type. -

    For further details of these commands, see “Displaying the glossary” in the documented code -(glossaries-code.pdf). - -

    Example 27 (Creating a completely new style) -

    If you want a completely new style, you will need to redefine all of the commands and the environment listed +class="cmti-10">n⟩} (no \protect). This means that the location class definition must be changed to: -above. -

    For example, suppose you want each entry to start with a bullet point. This means that the glossary should -be placed in the itemize environment, so theglossary should start and end that environment. Let’s also suppose -that you don’t want anything between the glossary groups (so \glsgroupheading and \glsgroupskip should -do nothing) and suppose you don’t want anything to appear immediately after \begin{theglossary} (so +

    +
    +\GlsAddXdyLocation{Numberstring}{% no \protect now!
    +  :sep "\string\Numberstringnum\space\glsopenbrace"
    +  "arabic-numbers" :sep "\glsclosebrace"}
    +
    +

    and \linkpagenumber goes back to only two arguments: + + +

    +
    +\newcommand{\linkpagenumber}[2]{\hyperlink{page.#2}{#1{#2}}}
    +
    +

    The other change is that \Numberstring uses

    +
    \glossaryheader should do nothing). In addition, let’s suppose the symbol should appear in brackets -after the name, followed by the description and last of all the number list should appear within -square brackets at the end. Then you can create this new glossary style, called, say, mylist, as -follows: +class="cmtt-10">\the\value{⟨counter} +
    +
    instead of
    +
    +\expandafter\the\csname c@counter\endcsname +
    +
    so it hides \c@page from the location escaping mechanism (see §??sec:locationsyntax Locations). This means +that the page number may be incorrect if the indexing occurs during the output routine. +

    A more recent change to fmtcount (v3.03) now puts three instances of \expandafter before +\the\value which no longer hides \c@page from the location escaping mechanism, so the page +numbers should once more be correct. Further changes to the fmtcount package may cause a problem +again. +

    When dealing with custom formats where the internal definitions are outside of your control and liable to +change, it’s best to provide a wrapper command.
    +

    +

    Instead of directly using \Numberstring in the definition of \thepage, I can provide a custom command in +the same form as the earlier \tally command:

    -
    - \newglossarystyle{mylist}{% - 
     % put the glossary in the itemize environment: - 
     \renewenvironment{theglossary}% - 
       {\begin{itemize}}{\end{itemize}}% - 
     % have nothing after \begin{theglossary}: - 
     \renewcommand*{\glossaryheader}{}% - 
     % have nothing between glossary groups: - 
     \renewcommand*{\glsgroupheading}[1]{}% - 
     \renewcommand*{\glsgroupskip}{}% - 
     % set how each entry should appear: - 
     \renewcommand*{\glossentry}[2]{% - 
     \item % bullet point - 
     \glstarget{##1}{\glossentryname{##1}}% the entry name - 
     \space (\glossentrysymbol{##1})% the symbol in brackets - 
     \space \glossentrydesc{##1}% the description - 
     \space [##2]% the number list in square brackets - 
     }% - 
     % set how sub-entries appear: - 
     \renewcommand*{\subglossentry}[3]{% - 
       \glossentry{##2}{##3}}% - 
     } -
    -

    Note that this style creates a flat glossary, where sub-entries are displayed in exactly the same way as the top -level entries. It also hasn’t used \glsentryitem or \glssubentryitem so it won’t be affected by the +

    +\newcommand{\customfmt}[1]{\customfmtnum{\arabic{#1}}}
    +\newrobustcmd{\customfmtnum}[1]{\Numberstringnum{#1}}
    +
    +

    This ensures that the location will always be written to the indexing file in the form:

    +
    entrycounter, counterwithin or subentrycounter package options. -

    Variations:

    -
      -
    • You might want the entry name to be capitalised, in which case use \Glossentryname instead of - \glossentryname. -
    • -
    • You might want to check if the symbol hasn’t been set and omit the parentheses if the symbol is absent. In - this case you can use \ifglshassymbol (see §16 Utilities): +class="cmtt-10">:locref "{}{\\customfmtnum {n}}" +
    +
    So the location class can be defined as: -
    -  \renewcommand*{\glossentry}[2]{% -  
     \item % bullet point -  
     \glstarget{##1}{\glossentryname{##1}}% the entry name -  
     \ifglshassymbol{##1}% check if symbol exists -  
     {% -  
       \space (\glossentrysymbol{##1})% the symbol in brackets -  
     }% -  
     {}% no symbol so do nothing -  
     \space \glossentrydesc{##1}% the description -  
     \space [##2]% the number list in square brackets -  
     }% -
    -

    +
    +\GlsAddXdyLocation{customfmt}{
    + :sep "\string\customfmtnum\space\glsopenbrace"
    + "arabic-numbers"
    + :sep "\glsclosebrace"}
    +
    +

    +

    The sample file samplexdy3.tex illustrates this.

    -

    -

    ____________________________

    - -

    Example 28 (Creating a new glossary style based on an existing style) -

    If you want to define a new style that is a slightly modified version of an existing style, you can use +

    +

    ____________________________

    +

    In the number list, the locations are sorted according to the list of provided location classes. +The default ordering is: roman-page-numbers (i, ii, …), arabic-page-numbers (1, 2, …), \setglossarystyle within the second argument of \newglossarystyle followed by whatever alterations you -require. For example, suppose you want a style like the list style but you don’t want the extra vertical space -created by \indexspace between groups, then you can create a new glossary style called, say, mylist as -follows: +class="cmtt-10">arabic-section-numbers (for example, 1.1 if the compositor is a full stop or 1-1 if the compositor is a +hyphen14.1), +alpha-page-numbers (a, b, …), Roman-page-numbers (I, II, …), Alpha-page-numbers (A, B, …), +Appendix-page-numbers (for example, A.1 if the Alpha compositor is a full stop or A-1 if the Alpha compositor is a +hyphen14.2), user defined +location names (as specified by \GlsAddXdyLocation in the order in which they were defined), and finally see (cross-referenced +entries).14.3 +This ordering can be changed using: +


    \GlsSetXdyLocationClassOrder{location names}

    +

    +where each location name is delimited by double quote marks and separated by white space. For +example:

    -
    -\newglossarystyle{mylist}{% - 
    \setglossarystyle{list}% base this style on the list style - 
    \renewcommand{\glsgroupskip}{}% make nothing happen - 
                                  % between groups - 
    } -
    -

    (In this case, you can actually achieve the same effect using the list style in combination with the package -option nogroupskip.)

    -
    -

    -

    ____________________________

    +
    +\GlsSetXdyLocationClassOrder{
    +  "arabic-page-numbers"
    +  "arabic-section-numbers"
    +  "roman-page-numbers"
    +  "Roman-page-numbers"
    +  "alpha-page-numbers"
    +  "Alpha-page-numbers"
    +  "Appendix-page-numbers"
    +  "see"
    +}
    +
    +

    (Remember to add "seealso" if you’re using glossaries-extra.) +

    Note that \GlsSetXdyLocationClassOrder has no effect if \noist is used or if \makeglossaries is +omitted. \GlsSetXdyLocationClassOrder must be used before \makeglossaries.
    +

    +

    If a number list consists of a sequence of consecutive numbers, the range will be concatenated. The +number of consecutive locations that causes a range formation defaults to 2, but can be changed +using: +


    \GlsSetXdyMinRangeLength{n}

    +

    +For example: + + +

    +
    +\GlsSetXdyMinRangeLength{3}
    +
    +

    The argument may also be the keyword none, to indicate that there should be no range formations. See the -

    Example 29 (Example: creating a glossary style that uses the user1, …, user6 +href="#glo:xindy">xindy manual for further details on range formations. +

    Note that \GlsSetXdyMinRangeLength has no effect if \noist is used or if \makeglossaries is omitted. keys) -

    Suppose each entry not only has an associated symbol, but also units (stored in user1) and dimension -(stored in user2). Then you can define a glossary style that displays each entry in a longtable as -follows: +class="cmtt-10">\GlsSetXdyMinRangeLength must be used before \makeglossaries.

    +

    +See also §??sec:ranges Range Formations. +

    +

    +

    Top

    14.3 Glossary Groups

    +

    The glossary is divided into groups according to the first letter of the sort key. The glossaries package also adds a +number group by default, unless you suppress it in the xindy package option. For example:

    -
    -\newglossarystyle{long6col}{% - 
     % put the glossary in a longtable environment: - 
     \renewenvironment{theglossary}% - 
      {\begin{longtable}{lp{\glsdescwidth}cccp{\glspagelistwidth}}}% - 
      {\end{longtable}}% - 
     % Set the table's header: - 
     \renewcommand*{\glossaryheader}{% - 
      \bfseries Term & \bfseries Description & \bfseries Symbol & - 
      \bfseries Units & \bfseries Dimensions & \bfseries Page List - 
      \\\endhead}% - 
     % No heading between groups: - 
      \renewcommand*{\glsgroupheading}[1]{}% - 
     % Main (level 0) entries displayed in a row optionally numbered: - 
      \renewcommand*{\glossentry}[2]{% - 
        \glsentryitem{##1}% Entry number if required - 
        \glstarget{##1}{\glossentryname{##1}}% Name - 
        & \glossentrydesc{##1}% Description - 
        & \glossentrysymbol{##1}% Symbol - 
        & \glsentryuseri{##1}% Units - 
        & \glsentryuserii{##1}% Dimensions - 
        & ##2% Page list - 
        \tabularnewline % end of row - 
      }% - 
     % Similarly for sub-entries (no sub-entry numbers): - 
     \renewcommand*{\subglossentry}[3]{% - 
        % ignoring first argument (sub-level) - 
        \glstarget{##2}{\glossentryname{##2}}% Name - 
        & \glossentrydesc{##2}% Description - 
        & \glossentrysymbol{##2}% Symbol - 
        & \glsentryuseri{##2}% Units - 
        & \glsentryuserii{##2}% Dimensions - 
        & ##3% Page list - 
        \tabularnewline % end of row - 
      }% - 
     % Nothing between groups: - 
     \renewcommand*{\glsgroupskip}{}% - 
    } -
    -

    -
    -

    -

    ____________________________

    +
    +\usepackage[xindy={glsnumbers=false}]{glossaries}
    +
    +

    Any entry that doesn’t go in one of the letter groups or the number group is placed in the default group. If you +want xindy to sort the number group numerically (rather than by a string sort) then you need to use xindy’s +numeric-sort module: -

    -

    Top

    16. +
    +\GlsAddXdyStyle{numeric-sort}
    +
    +

    +

    If you don’t use glsnumbers=false, the default behaviour is to locate the number group before the “A” +letter group. If you are not using a Roman alphabet, you need to change this using: +


    \GlsSetXdyFirstLetterAfterDigits{letter}

    +

    +where ⟨letter⟩ is the first letter of your alphabet. Take care if you’re using inputenc as non-ASCII characters are +actually active characters that expand. (This isn’t a problem with the native UTF-8 engines and +fontspec.) The starred form will sanitize the argument to prevent expansion. Alternatively you can +use: +


    \GlsSetXdyNumberGroupOrder{relative location}

    +

    +to change the default

    +
    +:before \string"letter\string" +
    +
    to ⟨relative location⟩. For example: + + +
    +\GlsSetXdyNumberGroupOrder{:after \string"Z\string"}
    +
    +

    will put the number group after the “Z” letter group. Again take care of active characters. There’s a starred +version that sanitizes the argument (so don’t use \string in it).

    +
    +\GlsSetXdyNumberGroupOrder*{:after "Ö"} +
    +
    +

    Note that these commands have no effect if \noist is used or if \makeglossaries is omitted. +\GlsSetXdyFirstLetterAfterDigits must be used before \makeglossaries. +
    +

    + + +

    +

    +

    Top

    15. Utilities

    -

    This section describes some utility commands. Additional commands can be found in the documented code +

    This section describes some utility commands. Additional commands can be found in the documented code (glossaries-code.pdf). -

    The

    The glossaries-extra package provides extra utility commands. See the “Utilities” section of the glossaries-extra manual.
    -

    +

    -

    Top

    16.1

    Top

    15.1 Loops

    -

    Some of the commands described here take a comma-separated list as an argument. As with LaTeX’s

    Some of the commands described here take a comma-separated list as an argument. As with LaTeX’s \@for command, make sure your list doesn’t have any unwanted spaces in it as they don’t get stripped. (Discussed in more detail in §2.7.2 of “LaTeX for Administrative Work”.)
    -

    -


    +


    \forallglossaries[glossary list]{cs}{body}

    -

    +

    This iterates through ⟨glossary list⟩, a comma-separated list of glossary labels (as supplied when the glossary was defined). At each iteration ⟨body⟩ is performed. If ⟨glossary list⟩ is omitted, the default is to iterate over all glossaries (except the ignored ones). -



    \forallacronyms{cs}{body}

    -

    +

    This is like \forallglossaries but only iterates over the lists of acronyms (that have previously been declared using \DeclareAcronymList or the or the acronymlists package option). This command doesn’t have an optional + id="dx1-171004"> package option). This command doesn’t have an optional argument. If you want to explicitly say which lists to iterate over, just use the optional argument of \forallglossaries. -


    The glossaries-extra package provides an analogous command \forallabbreviationlists.
    +

    +


    \forglsentries[glossary label]{cs}{body}

    -

    +

    This iterates through all entries in the glossary given by ⟨glossary label⟩. At each iteration ⟨cs⟩ (which must be a @@ -26577,9 +28043,9 @@ class="cmti-10">body⟩ is performed. If ⟨glossary label⟩ is omitted, \glsdefaulttype (usually the main glossary) is used. -


    (usually the main glossary) is used. +


    \forallglsentries[glossary list]{cs}{body}

    -

    +

    This is like \forglsentries but for each glossary in ⟨glossary list⟩ (a comma-separated list of glossary labels). If @@ -26601,20 +28067,20 @@ class="cmtt-10">\glsentrytype{⟨cs} within ⟨body⟩.) -

    + + +

    -

    Top

    16.2

    Top

    15.2 Conditionals

    -



    \ifglossaryexistslabel⟩⟨true part⟩⟨false part

    - - -

    +

    This checks if the glossary given by ⟨label⟩ exists. If it does ⟨true part⟩ is performed, otherwise ⟨ \newignoredglossary{common}

    then -
    +
     \ifglossaryexists{common}{true}{false}
    - 
    \ifglossaryexists*{common}{true}{false} -
    -

    will produce “false true”. -


    +

    will produce “false true”. +


    \ifglsentryexistslabel⟩⟨true part⟩⟨false part

    -

    +

    This checks if the glossary entry given by ⟨label⟩ exists. If it does ⟨true part⟩ is performed, otherwise ⟨false part⟩. class="cmtt-10">\ifglsentryexists will always be true after the containing glossary has been displayed via \printglossary or or \printglossaries even if the entry is explicitly defined later in the document. This is + id="dx1-172005"> even if the entry is explicitly defined later in the document. This is because the entry has to be defined before it can be displayed in the glossary, see §4.8.1 Technical Issues for -further details.) -


    §??sec:techissues Technical +Issues for further details.) +


    \glsdoifexists{label}{code}

    -

    +

    Does ⟨code⟩ if the entry given by ⟨label⟩ exists. If it doesn’t exist, an error is generated. (This command uses \ifglsentryexists.) -



    \glsdoifnoexists{label}{code}

    -

    +

    Does the reverse of \glsdoifexists. (This command uses \ifglsentryexists.) -



    \glsdoifexistsorwarn{label}{code}

    -

    +

    As \glsdoifexists but issues a warning rather than an error if the entry doesn’t exist. -



    \glsdoifexistsordo{label}{code}{else code}

    -

    +

    Does ⟨code⟩ if the entry given by ⟨label⟩ exists otherwise generate an error and do ⟨else code⟩. -



    \glsdoifnoexistsordo{label}{code}{else code}

    -

    +

    Does ⟨code⟩ if the entry given by ⟨label⟩ doesn’t exist otherwise generate an error and do ⟨else code⟩. -



    \ifglsusedlabel⟩⟨true part⟩⟨false part

    -

    +

    See §14 §??sec:glsunset Unsetting and Resetting Entry Flags. -



    \ifglshaschildrenlabel⟩⟨true part⟩⟨false part

    -

    +

    This checks if the glossary entry given by ⟨label⟩ has any sub-entries. If it does, ⟨true part⟩ is performed, otherwise ⟨false part⟩. -


    false part⟩. This uses an inefficient method since this information isn’t stored. +

    If you use bib2gls, a more efficient method is to use the save-child-count resource option and test the +value of the childcount field.
    +

    +


    \ifglshasparentlabel⟩⟨true part⟩⟨false part

    -

    +

    This checks if the glossary entry given by ⟨label⟩ has a parent entry. If it does, ⟨true part⟩ is performed, otherwise ⟨false part⟩. -



    \ifglshassymbol{label}{true part}{false part}

    -

    + + +

    This checks if the glossary entry given by ⟨label⟩ has had the symbol field set. If it has, ⟨ field set. If it has, ⟨true part⟩ is performed, otherwise ⟨false part⟩. -



    \ifglshaslong{label}{true part}{false part}

    - - -

    +

    This checks if the glossary entry given by ⟨label⟩ has had the long field set. If it has, ⟨ field set. If it has, ⟨true part⟩ is performed, otherwise ⟨false part⟩. This should be true for any entry that has been defined via \newacronym. There is no + id="dx1-172021">. There is no check for the existence of ⟨label⟩. -



    \ifglshasshort{label}{true part}{false part}

    -

    +

    This checks if the glossary entry given by ⟨label⟩ has had the short field set. If it has, ⟨ field set. If it has, ⟨true part⟩ is performed, otherwise ⟨false part⟩. This should be true for any entry that has been defined via \newacronym. There is no + id="dx1-172024">. There is no check for the existence of ⟨label⟩. -



    \ifglshasdesc{label}{true part}{false part}

    -

    +

    This checks if the description field is non-empty for the entry given by ⟨ field is non-empty for the entry given by ⟨label⟩. If it has, ⟨true part⟩ is performed, otherwise ⟨false part⟩. Compare with: -



    \ifglsdescsuppressed{label}{true part}{false part}

    -

    +

    This checks if the description field has been set to just field has been set to just \nopostdesc for the entry given by ⟨ for the entry given by ⟨label⟩. If it has, ⟨true part⟩ is performed, otherwise ⟨false part⟩. There is no check for the existence of ⟨label⟩. -

    For all other fields you can use: -


    For all other fields you can use: +


    \ifglshasfield{field}{true part}{false part}

    -

    +

    This tests the value of the field given by ⟨field⟩ for the entry identified by ⟨label⟩. If the value is empty true part⟩ is performed. If the field supplied is class="cmti-10">false part⟩ is performed and a warning is issued. Unlike the above commands, such as \ifglshasshort, an error occurs if the entry is undefined. -

    As from version 4.23, within ⟨

    As from version 4.23, within ⟨true part⟩ you can use -



    \glscurrentfieldvalue

    -

    +

    to access the field value. This command is initially defined to nothing but has no relevance outside ⟨true part⟩. This saves re-accessing the field if the test is true. For example:

    -
    +
     \ifglshasfield{useri}{sample}{, \glscurrentfieldvalue}{}
    -
    -

    will insert a comma, space and the field value if the +

    will insert a comma, space and the field value if the user1 key has been set for the entry whose label is + id="dx1-172032"> key has been set for the entry whose label is sample. -

    You can test if the value of the field is equal to a given string using: -


    You can test if the value of the field is equal to a given string using: +


    \ifglsfieldeq{label}{true}{false}

    -

    +

    In this case the ⟨field⟩ must be the field name not the key (see table 4.1). If the field isn’t recognised, an error will -occur. This command internally uses table ??tab:fieldmap). If the field isn’t recognised, +an error will occur. This command internally uses etoolbox’s ’s \ifcsstring to perform the comparison. The string is not +class="cmti-10">The expanded during the test. -

    The result may vary depending on whether or not expansion is on for the given field (when the entry was +class="cmti-10">string is not expanded during the test. +

    The result may vary depending on whether or not expansion is on for the given field (when the entry was defined). For example:

    -
    +
     \documentclass{article}
    - 
    \usepackage{glossaries} - 
    \newcommand*{\foo}{FOO} - 
    \newglossaryentry{sample1}{name={sample1},description={an example}, - 
    user1={FOO}} - 
    \newglossaryentry{sample2}{name={sample2},description={an example}, - 
    user1={\foo}} - 
    \begin{document} - 
    \ifglsfieldeq{sample1}{useri}{FOO}{TRUE}{FALSE}. - 
    \ifglsfieldeq{sample2}{useri}{FOO}{TRUE}{FALSE}. - 
    \end{document} -
    -

    This will produce “TRUE” in both cases since expansion is on, so +

    This will produce “TRUE” in both cases since expansion is on, so \foo was expanded to “FOO” when sample2 was defined. If the tests are changed to:

    -
    +
     \ifglsfieldeq{sample1}{useri}{\foo}{TRUE}{FALSE}.
    - 
    \ifglsfieldeq{sample2}{useri}{\foo}{TRUE}{FALSE}. -
    -

    then this will produce “FALSE” in both cases. Now suppose expansion is switched off for the +

    then this will produce “FALSE” in both cases. Now suppose expansion is switched off for the user1 + id="dx1-172035"> key:

    -
    +
     \documentclass{article}
    - 
    \usepackage{glossaries} - 
    \newcommand*{\foo}{FOO} - 
    \glssetnoexpandfield{useri} - 
    \newglossaryentry{sample1}{name={sample1},description={an example}, - 
    user1={FOO}} - 
    \newglossaryentry{sample2}{name={sample2},description={an example}, - 
    user1={\foo}} - 
    \begin{document} - 
    \ifglsfieldeq{sample1}{useri}{FOO}{TRUE}{FALSE}. - 
    \ifglsfieldeq{sample2}{useri}{FOO}{TRUE}{FALSE}. - 
    \end{document} -
    -

    This now produces “TRUE” for the first case (comparing “FOO” with “FOO”) and “FALSE” for the second +\usepackage{glossaries} +\newcommand*{\foo}{FOO} +\glssetnoexpandfield{useri} +\newglossaryentry{sample1}{name={sample1},description={an example}, +user1={FOO}} +\newglossaryentry{sample2}{name={sample2},description={an example}, +user1={\foo}} +\begin{document} +\ifglsfieldeq{sample1}{useri}{FOO}{TRUE}{FALSE}. +\ifglsfieldeq{sample2}{useri}{FOO}{TRUE}{FALSE}. +\end{document} + +

    This now produces “TRUE” for the first case (comparing “FOO” with “FOO”) and “FALSE” for the second case (comparing “\foo” with “FOO”). -

    The reverse happens in the following: +

    The reverse happens in the following:

    -
    +
     \documentclass{article}
    - 
    \usepackage{glossaries} - 
    \newcommand*{\foo}{FOO} - 
    \glssetnoexpandfield{useri} - 
    \newglossaryentry{sample1}{name={sample1},description={an example}, - 
    user1={FOO}} - 
    \newglossaryentry{sample2}{name={sample2},description={an example}, - 
    user1={\foo}} - 
    \begin{document} - 
    \ifglsfieldeq{sample1}{useri}{\foo}{TRUE}{FALSE}. - 
    \ifglsfieldeq{sample2}{useri}{\foo}{TRUE}{FALSE}. - 
    \end{document} -
    -

    This now produces “FALSE” for the first case (comparing “FOO” with “ +

    This now produces “FALSE” for the first case (comparing “FOO” with “\foo”) and “TRUE” for the second case (comparing “\foo” with “\foo”). -

    You can test if the value of a field is equal to the replacement text of a command using: -


    You can test if the value of a field is equal to the replacement text of a command using: +


    \ifglsfielddefeq{label}{true}{false}

    -

    +

    This internally uses etoolbox’s ’s \ifdefstrequal command to perform the comparison. The argument ⟨command⟩ must be a macro. -

    For example: +

    For example:

    -
    +
     \documentclass{article}
    - 
    \usepackage{glossaries} - 
    \newcommand*{\foo}{FOO} - 
    \glssetnoexpandfield{useri} - 
    \newglossaryentry{sample1}{name={sample1},description={an example}, - 
    user1={FOO}} - 
    \newglossaryentry{sample2}{name={sample2},description={an example}, - 
    user1={\foo}} - 
    \begin{document} - 
    \ifglsfielddefeq{sample1}{useri}{\foo}{TRUE}{FALSE}. - 
    \ifglsfielddefeq{sample2}{useri}{\foo}{TRUE}{FALSE}. - 
    \end{document} -
    -

    Here, the first case produces “TRUE” since the value of the +

    Here, the first case produces “TRUE” since the value of the useri field (“FOO”) is the same as the replacement text (definition) of \foo (“FOO”). We have the result “FOO” is equal to “FOO”. -

    The second case produces “FALSE” since the value of the

    The second case produces “FALSE” since the value of the useri field (“\foo”) is not the same as the replacement text (definition) of useri field. We have the result “\foo” is not equal to “FOO”. -

    If we add: +

    If we add:

    -
    +
     \newcommand{\FOO}{\foo}
    - 
    \ifglsfielddefeq{sample2}{useri}{\FOO}{TRUE}{FALSE}. -
    -

    we now get “TRUE” since the value of the +

    we now get “TRUE” since the value of the useri field (“\foo”) is the same as the replacement text (definition) of \FOO (“\foo”). We have the result “\foo” is equal to “\foo”. -

    There is a similar command that requires the control sequence name (without the leading backslash) instead +

    There is a similar command that requires the control sequence name (without the leading backslash) instead of the actual control sequence: -



    \ifglsfieldcseq{label}{true}{false}

    -

    +

    This internally uses etoolbox’s ’s \ifcsstrequal command instead of \ifdefstrequal. -

    +

    -

    Top

    16.3

    Top

    15.3 Fetching and Updating the Value of a Field

    -

    In addition to the commands described in §9 Using Glossary Terms Without Links, the following may also be -used to fetch field information. -


    In addition to the commands described in §??sec:glsnolink Using Glossary Terms Without Links, the following +may also be used to fetch field information. +


    \glsentrytype{label}

    -

    +

    Expands to the entry’s glossary type. No existence check is performed. -



    \glsentryparent{label}

    -

    +

    Expands to the label of the entry’s parent. No existence check is performed. -



    \glsentrysort{label}

    -

    +

    Expands to the entry’s sort value. No existence check is performed. -

    You can fetch the value of a given field and store it in a control sequence using: -


    You can fetch the value of a given field and store it in a control sequence using: +


    \glsfieldfetch{label}{field}{cs}

    -

    +

    where ⟨label⟩ is the label identifying the glossary entry, ⟨field⟩ is the field label (see table 4.1) and ⟨cs⟩ is the control -sequence in which to store the value. Remember that ⟨field⟩ is the internal label and is not necessarily the same as -the key used to set that field in the argument of table ??tab:fieldmap) and ⟨cs⟩ is +the control sequence in which to store the value. Remember that ⟨field⟩ is the internal label and is not necessarily +the same as the key used to set that field in the argument of \newglossaryentry (or the optional argument of \newacronym). -

    You can change the value of a given field using one of the following commands. Note that these commands +

    You can change the value of a given field using one of the following commands. Note that these commands only change the value of the given field. They have no affect on any related field. For example, if you change the value of the text field, it won’t modify the value given by the field, it won’t modify the value given by the name, , plural, , first or any other related + id="dx1-173008"> or any other related key. -

    In all the four related commands below, ⟨

    In all the four related commands below, ⟨label⟩ and ⟨field⟩ are as above and ⟨definition⟩ is the new value of the field. -



    \glsfielddef{label}{field}{definition}

    -

    +

    This uses \def to change the value of the field (so it will be localised by any grouping). -



    \glsfieldedef{label}{field}{definition}

    -

    +

    This uses \edef to change the value of the field (so it will be localised by any grouping). Any fragile commands contained in the ⟨definition⟩ must be protected. -



    \glsfieldgdef{label}{field}{definition}

    -

    +

    This uses \gdef to change the value of the field. -



    \glsfieldxdef{label}{field}{definition}

    -

    +

    This uses \xdef to change the value of the field. Any fragile commands contained in the ⟨definition⟩ must be @@ -27217,102 +28698,109 @@ protected.

    -

    -

    Top

    17.

    +

    Top

    16. Prefixes or Determiners

    -

    The

    The glossaries-prefix package that comes with the package that comes with the glossaries package provides additional keys that can be used as prefixes. For example, if you want to specify determiners (such as “a”, “an” or “the”). The glossaries-prefix package automatically loads the glossaries package and has the same package options. -

    The extra keys for

    The extra keys for \newglossaryentry are as follows: + id="dx1-174002"> are as follows:

    +

    prefix

    The prefix associated with the

    +

    The prefix associated with the text key. This defaults to nothing. -

    + id="dx1-174004"> key. This defaults to nothing. +

    +

    prefixplural

    The prefix associated with the

    +

    The prefix associated with the plural key. This defaults to nothing. -

    + id="dx1-174006"> key. This defaults to nothing. +

    +

    prefixfirst

    The prefix associated with the

    +

    The prefix associated with the first key. If omitted, this defaults to the value of the - key. If omitted, this defaults to the value of the prefix key. -

    + id="dx1-174009"> key. +

    +

    prefixfirstplural

    The prefix associated with the

    +

    The prefix associated with the firstplural key. If omitted, this defaults to the - value of the key. If omitted, this defaults to the value of the + prefixplural key.

    + id="dx1-174012"> key.

    -

    Example 30 (Defining Determiners) -

    Here’s the start of my example document: + id="x1-174014"> +

    Here’s the start of my example document:

    -
    +
     \documentclass{article}
    - 
    \usepackage[colorlinks]{hyperref} - 
    \usepackage[toc,acronym]{glossaries-prefix} -
    -

    Note that I’ve simply replaced +

    Note that I’ve simply replaced glossaries from previous sample documents with glossaries-prefix. Now for a sample definition17.1: +href="#fn1x16" id="fn1x16-bk">16.1:

    -
    +
     \newglossaryentry{sample}{name={sample},%
    - 
      description={an example},% - 
      prefix={a~},% - 
      prefixplural={the\space}% - 
    } -
    -

    Note that I’ve had to explicitly insert a space after the prefix since there’s no designated separator between the +  description={an example},% +  prefix={a~},% +  prefixplural={the\space}% +} + +

    Note that I’ve had to explicitly insert a space after the prefix since there’s no designated separator between the prefix and the term being referenced. This not only means that you can vary between a breaking space and non-breaking space, but also allows for the possibility of prefixes that shouldn’t have a space, such as:

    -
    +
     \newglossaryentry{oeil}{name={oeil},
    - 
      plural={yeux}, - 
      description={eye}, - 
      prefix={l'}, - 
      prefixplural={les\space}} -
    -

    Where a space is required at the end of the prefix, you must use a spacing command, such as +  plural={yeux}, +  description={eye}, +  prefix={l'}, +  prefixplural={les\space}} + +

    Where a space is required at the end of the prefix, you must use a spacing command, such as \space, \␣ (backslash space) or ~ due to the automatic spacing trimming per class="cmti-10">key⟩=⟨value⟩ options. -

    In the event that you always require a space between the prefix and the term, then you can instead +

    In the event that you always require a space between the prefix and the term, then you can instead redefine -



    \glsprefixsep

    -

    +

    to do a space. (This command does nothing by default.) For example:

    -
    +
     \renewcommand{\glsprefixsep}{\space}
    -
    -

    -

    The prefixes can also be used with acronyms. For example: + +

    +

    The prefixes can also be used with acronyms. For example:

    -
    +
     \newacronym
    - 
     [% - 
       prefix={an\space},prefixfirst={a~}% - 
     ]{svm}{SVM}{support vector machine} -
    -

    + [% +   prefix={an\space},prefixfirst={a~}% + ]{svm}{SVM}{support vector machine} + +

    -

    -

    ____________________________

    -

    The

    +

    ____________________________

    +

    The glossaries-prefix package provides convenient commands to use these prefixes with commands such as + id="dx1-174018"> package provides convenient commands to use these prefixes with commands such as \gls. Note that the prefix is not considered part of the . Note that the prefix is not considered part of the link text, so it’s not included in the hyperlink (where + id="dx1-174020">, so it’s not included in the hyperlink (where hyperlinks are enabled). The options and any star or plus modifier are passed on to the \gls-like command. (See §6 §??sec:glslink Links to Glossary Entries for further details.) -



    \pgls[options]{label}[insert]

    -

    +

    This is inserts the value of the prefix key (or key (or prefixfirst key, on key, on first use) in front of \gls[options} class="cmtt-10">[insert]. -



    \Pgls[options]{label}[insert]

    -

    +

    If the prefix key (or key (or prefixfirst, on first use) has been set, this displays the value of that key with the first + id="dx1-174026">, on first use) has been set, this displays the value of that key with the first letter converted to upper case followed by \gls[optionsinsert]. If that key hasn’t been set, this is equivalent to \Gls[options]{label}[insert]. -



    \PGLS[options]{label}[insert]

    -

    +

    As \pgls but converts the prefix to upper case and uses \GLS instead of instead of \gls. -



    \pglspl[options]{label}[insert]

    -

    +

    This is inserts the value of the prefixplural key (or key (or prefixfirstplural key, on key, on first use) in front of \glspl label}[insert]. -



    \Pglspl[options]{label}[insert]

    -

    +

    If the prefixplural key (or key (or prefixfirstplural, on first use) has been set, this displays the value of that key + id="dx1-174035">, on first use) has been set, this displays the value of that key with the first letter converted to upper case followed by \glspl[optionsinsert]. If that key hasn’t been set, this is equivalent to \Glspl[options]{label}[insert]. -



    \PGLSpl[options]{label}[insert]

    -

    +

    As \pglspl but converts the prefix to upper case and uses \GLSpl instead of instead of \glspl. -

    Example 31 (Using Prefixes) -

    Continuing from Example  +

    Continuing from Example 30, now that I’ve defined my entries, I can use them in the text via the above @@ -27523,26 +29012,26 @@ commands:

    -
    +
     First use: \pgls{svm}. Next use: \pgls{svm}.
    - 
    Singular: \pgls{sample}, \pgls{oeil}. - 
    Plural: \pglspl{sample}, \pglspl{oeil}. -
    -

    which produces: -

    -

    First use: a support vector machine (SVM). Next use: an SVM. Singular: a sample, l’oeil. - Plural: the samples, les yeux.

    -

    For a complete document, see +

    which produces: +

    +

    First use: a support vector machine (SVM). Next use: an SVM. Singular: a sample, l’oeil. + Plural: the samples, les yeux.

    +

    For a complete document, see sample-prefix.tex.

    -

    -

    ____________________________

    -

    This package also provides the commands described below, none of which perform any check to determine +

    +

    ____________________________

    +

    This package also provides the commands described below, none of which perform any check to determine the entry’s existence. -



    \ifglshasprefix{label}{true part}{false part}

    -

    +

    Does ⟨true part⟩ if the entry identified by ⟨label⟩ has a non-empty value for the prefix key. -

    This package also provides the following commands: -


    key. +

    This package also provides the following commands: +


    \ifglshasprefixplural{label}{true part}{false part}

    -

    +

    Does ⟨true part⟩ if the entry identified by ⟨label⟩ has a non-empty value for the prefixplural key. -


    key. +


    \ifglshasprefixfirst{label}{true part}{false part}

    -

    +

    Does ⟨true part⟩ if the entry identified by ⟨label⟩ has a non-empty value for the prefixfirst key. -


    key. +


    \ifglshasprefixfirstplural{label}{true part}{false part}

    -

    +

    Does ⟨true part⟩ if the entry identified by ⟨label⟩ has a non-empty value for the prefixfirstplural key. -



    \glsentryprefix{label}

    -

    +

    Displays the value of the prefix key for the entry given by ⟨ key for the entry given by ⟨label⟩. -



    \glsentryprefixfirst{label}

    -

    +

    Displays the value of the prefixfirst key for the entry given by ⟨ key for the entry given by ⟨label⟩. -



    \glsentryprefixplural{label}

    -

    +

    Displays the value of the prefixplural key for the entry given by ⟨ key for the entry given by ⟨label⟩. (No check is performed to determine if the entry exists.) -



    \glsentryprefixfirstplural{label}

    -

    +

    Displays the value of the prefixfirstplural key for the entry given by ⟨ key for the entry given by ⟨label⟩. (No check is performed to determine if the entry exists.) -

    There are also variants that convert the first letter to upper +

    There are also variants that convert the first letter to upper case17.2: -


    16.2: +


    \Glsentryprefix{label}

    -

    -


    +


    \Glsentryprefixfirst{label}

    -

    -


    +


    \Glsentryprefixplural{label}

    -

    -


    +


    \Glsentryprefixfirstplural{label}

    -

    -

    As with analogous commands such as

    +

    As with analogous commands such as \Glsentrytext, these commands aren’t expandable so can’t be used + id="dx1-174061">, these commands aren’t expandable so can’t be used in PDF bookmarks.
    -

    +

    -

    Example 32 (Adding Determiner to Glossary Style) -

    You can use the above commands to define a new glossary style that uses the determiner. For + id="x1-174063"> +

    You can use the above commands to define a new glossary style that uses the determiner. For example, the following style is a slight modification of the list style that inserts the prefix before the + id="dx1-174064"> style that inserts the prefix before the name:

    -
    +
     \newglossarystyle{plist}{%
    - 
      \setglossarystyle{list}% - 
      \renewcommand*{\glossentry}[2]{% - 
        \item[\glsentryitem{##1}% - 
              \glsentryprefix{##1}% - 
              \glstarget{##1}{\glossentryname{##1}}] - 
           \glossentrydesc{##1}\glspostdescription\space ##2}% - 
    } -
    -

    If you want to change the prefix separator ( +

    If you want to change the prefix separator (\glsprefixsep) then the following is better:

    -
    +
     \newglossarystyle{plist}{%
    - 
      \setglossarystyle{list}% - 
      \renewcommand*{\glossentry}[2]{% - 
        \item[\glsentryitem{##1}% - 
              \ifglshasprefix{##1}{\glsentryprefix{##1}\glsprefixsep}{}% - 
              \glstarget{##1}{\glossentryname{##1}}] - 
           \glossentrydesc{##1}\glspostdescription\space ##2}% - 
    } -
    -

    The conditional is also useful if you want the style to use an uppercase letter at the start of the entry +  \setglossarystyle{list}% +  \renewcommand*{\glossentry}[2]{% +    \item[\glsentryitem{##1}% +          \ifglshasprefix{##1}{\glsentryprefix{##1}\glsprefixsep}{}% +          \glstarget{##1}{\glossentryname{##1}}] +       \glossentrydesc{##1}\glspostdescription\space ##2}% +} + +

    The conditional is also useful if you want the style to use an uppercase letter at the start of the entry item:

    -
    +
     \newglossarystyle{plist}{%
    - 
      \setglossarystyle{list}% - 
      \renewcommand*{\glossentry}[2]{% - 
        \item[\glsentryitem{##1}% - 
              \glstarget{##1}% - 
              {% - 
                \ifglshasprefix{##1}% - 
                {\Glsentryprefix{##1}\glsprefixsep\glossentryname{##1}}% - 
                {\Glossentryname{##1}}% - 
              }] - 
           \glossentrydesc{##1}\glspostdescription\space ##2}% - 
    } -
    -

    +  \setglossarystyle{list}% +  \renewcommand*{\glossentry}[2]{% +    \item[\glsentryitem{##1}% +          \glstarget{##1}% +          {% +            \ifglshasprefix{##1}% +            {\Glsentryprefix{##1}\glsprefixsep\glossentryname{##1}}% +            {\Glossentryname{##1}}% +          }] +       \glossentrydesc{##1}\glspostdescription\space ##2}% +} + +

    -

    -

    ____________________________

    +

    +

    ____________________________

    -

    -

    Top

    18.

    +

    Top

    17. Accessibility Support

    -

    Limited accessibility support is provided by the accompanying

    Limited accessibility support is provided by the accompanying glossaries-accsupp package, but note that this + id="dx1-175001"> package, but note that this package is experimental and it requires the accsupp package which is also listed as experimental. This package + id="dx1-175002"> package which is also listed as experimental. This package automatically loads the glossaries package. Any options are passed to package. Any options are passed to glossaries (if it hasn’t already been loaded). + id="dx1-175004"> (if it hasn’t already been loaded). For example:

    -
    +
     \usepackage[acronym]{glossaries-accsupp}
    -
    -

    This will load +

    This will load glossaries with the with the acronym package option as well as loading package option as well as loading glossaries-accsupp. -

    If you are using the . +

    If you are using the glossaries-extra extension package, you need to load glossaries-extra with the glossaries-extra with the accsupp + id="dx1-175008"> package option. For example:

    -
    +
     \usepackage[abbreviations,accsupp]{glossaries-extra}
    -
    -

    This will load +

    This will load glossaries-extra (with the glossaries-extra (with the abbreviations option), option), glossaries and and glossaries-accsupp and make + id="dx1-175011"> and make appropriate patches to integrate the accessibility support with the extension commands. -

    The

    The glossaries-accsupp package defines additional keys that may be used when defining glossary entries. The + id="dx1-175012"> package defines additional keys that may be used when defining glossary entries. The keys are as follows:

    +

    access

    - The +

    The replacement text corresponding @@ -27814,14 +29304,15 @@ class="description"> the name + id="dx1-175014"> key. -

    +

    +

    textaccess

    - The +

    The replacement text corresponding @@ -27829,31 +29320,33 @@ class="description"> the text + id="dx1-175016"> key. -

    +

    +

    firstaccess

    - The +

    The replacement text corresponding to + + the first + id="dx1-175018"> key. -

    - - +

    +

    pluralaccess

    - The +

    The replacement text corresponding @@ -27861,14 +29354,15 @@ class="description"> the plural + id="dx1-175020"> key. -

    +

    +

    firstpluralaccess

    - The +

    The replacement text corresponding @@ -27876,14 +29370,15 @@ class="description"> the firstplural + id="dx1-175022"> key. -

    +

    +

    symbolaccess

    - The +

    The replacement text corresponding @@ -27891,14 +29386,17 @@ class="description"> the symbol + id="dx1-175024"> key. -

    +

    +

    + + symbolpluralaccess

    - The +

    The replacement text corresponding @@ -27906,16 +29404,15 @@ class="description"> the symbolplural + id="dx1-175026"> key. -

    - - +

    +

    descriptionaccess

    - The +

    The replacement text corresponding @@ -27923,14 +29420,15 @@ class="description"> the description + id="dx1-175028"> key. -

    +

    +

    descriptionpluralaccess

    - The +

    The replacement text corresponding @@ -27938,34 +29436,38 @@ class="description"> the descriptionplural + id="dx1-175030"> key. -

    +

    +

    longaccess

    - The +

    The replacement text corresponding + + to the long + id="dx1-175032"> key (used by \newacronym). -

    + id="dx1-175033">). +

    +

    shortaccess

    - The +

    The replacement text corresponding @@ -27973,21 +29475,20 @@ class="description"> the short - - + id="dx1-175035"> key (used by \newacronym). -

    + id="dx1-175036">). +

    +

    longpluralaccess

    - The +

    The replacement text corresponding @@ -27995,19 +29496,22 @@ class="description"> the longplural + id="dx1-175038"> key (used by \newacronym). -

    + id="dx1-175039">). +

    +

    shortpluralaccess

    - The +

    The + + replacement text corresponding @@ -28015,19 +29519,20 @@ class="description"> the shortplural + id="dx1-175041"> key (used by \newacronym). -

    + id="dx1-175042">). +

    +

    user1access

    - The +

    The replacement text corresponding @@ -28035,16 +29540,15 @@ class="description"> the user1 + id="dx1-175044"> key. -

    - - +

    +

    user2access

    - The +

    The replacement text corresponding @@ -28052,29 +29556,33 @@ class="description"> the user2 + id="dx1-175046"> key. -

    +

    +

    user3access

    - The +

    The replacement text corresponding + + to the user3 + id="dx1-175048"> key. -

    +

    +

    user4access

    - The +

    The replacement text corresponding @@ -28082,14 +29590,15 @@ class="description"> the user4 + id="dx1-175050"> key. -

    +

    +

    user5access

    - The +

    The replacement text corresponding @@ -28097,16 +29606,15 @@ class="description"> the user5 + id="dx1-175052"> key. -

    - - +

    +

    user6access

    - The +

    The replacement text corresponding @@ -28114,79 +29622,85 @@ class="description"> the user6 - key.

    -

    For example: + id="dx1-175054"> + key.

    +

    For example:

    -
    +
     \newglossaryentry{tex}{name={\TeX},description={Document
    - 
    preparation language},access={TeX}} -
    -

    Now the +

    Now the link text produced by produced by \gls{tex} will be:

    -
    +
     \BeginAccSupp{ActualText={TeX}}\TeX\EndAccSupp{}
    -
    -

    The sample file +

    The sample file sampleaccsupp.tex illustrates the glossaries-accsupp package. -

    If you prefer to use package. +

    If you prefer to use accessibility or or tagpdf instead of instead of accsupp then you’ll need to define then you’ll need to define \gls@accsupp@engine and \gls@accessibility before loading glossaries-accsupp. See the section “Accessibility Support”in the + id="dx1-175060">. See the section “Accessibility Support”in the documented code for further details. -

    The PDF specification identifies three different types of replacement text: +

    The PDF specification identifies three different types of replacement text:

    +

    Alt

    Description of some content that’s non-textual (for example, an image). A word break is assumed +class="cmbx-10">Alt

    +

    Description of some content that’s non-textual (for example, an image). A word break is assumed after the content. -

    +

    +

    ActualText

    A character or sequence of characters that replaces textual content (for example, a dropped - capital, a ligature or a symbol). No word break is assumed after the content. -
    +class="cmbx-10">ActualText

    +

    A character or sequence of characters that replaces textual content (for example, a dropped capital, + a ligature or a symbol). No word break is assumed after the content. +

    +

    E

    Expansion of an abbreviation to avoid ambiguity (for example, “St” could be short for “saint” or - “street”).
    -

    Many PDF viewers don’t actually support any type of replacement text. Some may support “ActualText” +class="cmbx-10">E

    +

    Expansion of an abbreviation to avoid ambiguity (for example, “St” could be short for “saint” or + “street”).

    +

    Many PDF viewers don’t actually support any type of replacement text. Some may support “ActualText” but not “Alt” or “E”. PDFBox’s “PDFDebugger” tool can be used to inspect the PDF content to make sure that the replacement text has been correctly set.
    -

    -

    If you define abbreviations with

    +

    If you define abbreviations with \newacronym, the , the shortaccess field will automatically be set + id="dx1-175062"> field will automatically be set to: -



    \glsdefaultshortaccess{long}{short}

    -

    +

    With the base glossaries package this just expands to ⟨long⟩. With glossaries-extra this expands to ⟨long⟩ (⟨short⟩). This command must be fully expandable. It expands when the abbreviation is defined. -

    As from

    As from glossaries-accsupp v4.45, the helper command used to identify the replacement text depends on the + id="dx1-175064"> v4.45, the helper command used to identify the replacement text depends on the field name. Previous versions just used: -



    \glsaccsupp{replacement}{content}

    -

    +

    for all fields. This is defined to use ActualText, which is appropriate for symbols but not for abbreviations. -

    As from v4.45, there’s a new helper command: -


    As from v4.45, there’s a new helper command: + + +


    \glsfieldaccsupp{replacement}{field}{label}

    -

    +

    This will use \glsfieldaccsupp if it’s defined otherwise it will just use if it’s defined otherwise it will just use \glsaccsupp. There are just two of these field commands for short and and shortplural: -


    : +


    \glsshortaccsupp{replacement}{content}

    -

    +

    which is like \glsaccsupp but uses E instead of ActualText and -



    \glsshortplaccsupp{replacement}{content}

    - - -

    +

    which just does \glsshortaccsupp{replacementinternal field name (such as shortpl) not the key name (such as shortplural). See table 4.1. -

    Rather than explicitly using table ??tab:fieldmap. +

    Rather than explicitly using \BeginAccSupp, these helper commands can use: -


    , these helper commands can use: +


    \glsaccessibility[options]{value}{content}

    -

    +

    where ⟨tag⟩ is one of E,

    \BeginAccSupp{tag={options}content\EndAccSupp{}
    but it also provides debugging information if debug=showaccsupp is used. If you explicitly use is used. If you explicitly use \BeginAccSupp instead of this command then the debugging support won’t be available. -

    You can define your own custom helper commands for specific fields that require them. For +

    You can define your own custom helper commands for specific fields that require them. For example:

    -
    +
     \newcommand{\glssymbolaccsupp}[2]{%
    - 
     \glsaccessibility[method=hex,unicode]{ActualText}{#1}{#2}% - 
    } -
    -

    This definition requires the replacement text to be specified with the hexadecimal character code. For + \glsaccessibility[method=hex,unicode]{ActualText}{#1}{#2}% +} + +

    This definition requires the replacement text to be specified with the hexadecimal character code. For example:

    -
    +
     \newglossaryentry{int}{name={int},description={integral},
    - 
      symbol={\ensuremath{\int}},symbolaccess={222B} - 
    } -
    -

    -

    If you are using +

    +

    If you are using glossaries-extra, then \glsfieldaccsupp will first test for the existence of -\glsxtrcategory⟩⟨fieldaccsupp and and \glsxtrcategoryaccsupp and then for and then for \glsfieldaccsupp. For + id="dx1-175079">. For example:

    -
    +
     \usepackage{siunitx}
    - 
    \usepackage[accsupp]{glossaries-extra} - 
    \glsnoexpandfields - 
    \newcommand{\glsxtrsymbolaccsupp}[2]{% - 
     \glsaccessibility[method=hex,unicode]{ActualText}{#1}{#2}% - 
    } - 
    \newcommand{\glsxtrunitaccsupp}[2]{\glsaccessibility{E}{#1}{#2}} - 
    \newglossaryentry{cm}{name={\si{\centi\metre}}, - 
     access={centimetre}, - 
     description={centimetre}, - 
     category=unit - 
    } - 
    \newglossaryentry{int}{name={\ensuremath{\int}},access={222B}, - 
      description={integral},category={symbol} - 
    } -
    -

    The above uses the +

    The above uses the \glsxtrcategoryaccsupp form that doesn’t include the field name. Remember that if you + id="dx1-175080"> form that doesn’t include the field name. Remember that if you want to supply a command specifically for the name field then it won’t be picked up by the field then it won’t be picked up by the text, , plural, + id="dx1-175083">, firstplural and and first fields. You’d need to supply them all. For example: + id="dx1-175085"> fields. You’d need to supply them all. For example:

    -
    +
     \newcommand{\glsnameaccsupp}[2]{%
    - 
     \glsaccessibility[method=hex,unicode]{ActualText}{#1}{#2}% - 
    } - 
    \newcommand{\glstextaccsupp}{\glsnameaccsupp} - 
    \newcommand{\glspluralaccsupp}{\glsnameaccsupp} - 
    \newcommand{\glsfirstaccsupp}{\glsnameaccsupp} - 
    \newcommand{\glsfirstplaccsupp}{\glsnameaccsupp} -
    -

    -

    See the documented code ( +

    +

    See the documented code (glossaries-code.pdf) for further details. I recommend that you also read the accsupp documentation. See also the documentation. See also the accessibility and and tagpdf packages. + id="dx1-175088"> packages.

    -

    -

    Top

    19.

    +

    Top

    18. Sample Documents

    -

    The

    The glossaries package is provided with some sample documents that illustrate the various functions. These should be located in the samples subdirectory (folder) of the texdoc to locate the main glossaries documentation. For example, in a terminal or command prompt, type: -

    
    +

    
        
    texdoc -l glossaries

    @@ -28437,153 +29952,160 @@ This should display a list of all the files in the glossaries documentation directory with their full pathnames. (The GUI version of texdoc may also provide you with the information.) -

    If you can’t find the sample files on your computer, they are also available from your nearest CTAN mirror +

    If you can’t find the sample files on your computer, they are also available from your nearest CTAN mirror at http://mirror.ctan.org/macros/latex/contrib/glossaries/samples/. Each sample file listed below has a hyperlink to the file’s location on the CTAN mirror. -

    The

    The glossaries-extra package and bib2gls provide some additional sample files. There are also examples in + id="dx1-176001"> provide some additional sample files. There are also examples in the Dickimaw Books Gallery. -

    If you prefer to use UTF-8 aware engines (

    If you prefer to use UTF-8 aware engines (xelatex or lualatex) remember that you’ll need to switch from fontenc & inputenc to fontspec where appropriate. -

    If you get any errors or unexpected results, check that you have up-to-date versions of all the required +

    If you get any errors or unexpected results, check that you have up-to-date versions of all the required packages. (Search the log file for lines starting with “Package: ”.) Where hyperref is loaded you will get + id="dx1-176002"> is loaded you will get warnings about non-existent references that look something like:

    -
    +
     pdfTeX warning (dest): name{glo:aca} has been
    - 
    referenced but does not exist, replaced by a fixed one -
    -

    These warnings may be ignored on the first LaTeX run. (The destinations won’t be defined until the glossary +referenced but does not exist, replaced by a fixed one +

    +

    These warnings may be ignored on the first LaTeX run. (The destinations won’t be defined until the glossary has been created.)

    -

    Top

    19.1

    Top

    18.1 Basic

    -

    + id="x1-177001r1"> +

    🔗minimalgls.tex

    -

    This document is a minimal working example. You can test your installation using this file. To create the +

    This document is a minimal working example. You can test your installation using this file. To create the complete document you will need to do the following steps:

      -
    1. Run +

      Run minimalgls.tex through LaTeX either by typing -

      
      +     

      
            
      pdflatex minimalgls

      in a terminal or by using the relevant button or menu item in your text editor or front-end. This will create the required associated files but you will not see the glossary in the document.

    2. -
    3. If you have Perl installed, run +

      If you have Perl installed, run makeglossaries on the document (§1.4 Generating the Associated Glossary - Files). This can be done on a terminal by typing: -

      
      + id="dx1-178005"> on the document (§??sec:makeglossaries Generating the
      +     Associated Glossary Files). This can be done on a terminal by typing:
      +     

      
            
      makeglossaries minimalgls

      otherwise do: -

      
      +     

      
      +                                                                                      
      +                                                                                      
            
      makeglossaries-lite minimalgls

      If for some reason you want to call makeindex explicitly, you can do this in a terminal by typing (all on + id="dx1-178006"> explicitly, you can do this in a terminal by typing (all on one line): - - -

      
      +     

      
            
      makeindex -s minimalgls.ist -t minimalgls.glg -o minimalgls.gls minimalgls.glo

      See §1.4.4 §??sec:makeindexapp Using makeindex explicitly (Option 2) for further details on using explicitly (Option 2) for further details on using makeindex explicitly. -

      Note that if the file name contains spaces, you will need to use the double-quote character to delimit the + id="dx1-178008"> + explicitly. +

      Note that if the file name contains spaces, you will need to use the double-quote character to delimit the name.

    4. -
    5. Run minimalgls.tex through LaTeX again (as step 1)
    -

    You should now have a complete document. The number following each entry in the glossary is the location +

  • +

    Run minimalgls.tex through LaTeX again (as step 1)

  • +

    You should now have a complete document. The number following each entry in the glossary is the location number. By default, this is the page number where the entry was referenced. -

    The

    The acronym package option creates a second glossary with the label package option creates a second glossary with the label acronym (which can be referenced with \acronymtype). If you decide to enable this option then there will be a second set of glossary files that need to be processed by makeindex. If you use . If you use makeglossaries or or makeglossaries-lite you don’t need to worry + id="dx1-178014"> you don’t need to worry about it, as those scripts automatically detect which files need to be processed and will run makeindex (or + id="dx1-178015"> (or xindy) the appropriate number of times. -

    If for some reason you don’t want to use ) the appropriate number of times. +

    If for some reason you don’t want to use makeglossaries or or makeglossaries-lite and you want the + id="dx1-178018"> and you want the acronym package option then the complete build process is: -

    
    + id="dx1-178019"> package option then the complete build process is:
    +

    
        
    pdflatex minimalgls
    makeindex -s minimalgls.ist -t minimalgls.glg -o minimalgls.gls minimalgls.glo
    makeindex -s minimalgls.ist -t minimalgls.alg -o minimalgls.acr minimalgls.acn
    pdflatex minimalgls

    -

    There are three other files that can be used as

    There are three other files that can be used as minimal working examples: mwe-gls.tex, mwe-acr.tex and mwe-acr-desc.tex. -



    glossaries-extraIf you want to try out the

    with:
    \usepackage[acronym,,postdot,,stylemods]{glossaries-extra} - -
    Note the different default package options. (You may omit the acronym
    package option in both cases if + id="dx1-178020"> package option in both cases if you only want a single glossary.) The glossaries-extra package internally loads the base glossaries-extra load glossaries). -

    Next, replace:

    +

    Next, replace:

    \setacronymstyle{long-short}
    with:
    -\setabbreviationstyle[acronym]{long-short}
    -
    The optional argument The optional argument acronym identifies the category that this style should be applied to. The identifies the category that this style should be applied to. The \newacronym command provided by the base glossaries package is redefined by glossaries-extra to use glossaries-extra to use \newabbreviation with -the category set to with +the category set to acronym. -

    If you prefer to replace \newacronym with . +

    If you prefer to replace \newacronym with \newabbreviation then the default category is then the default category is abbreviation so the + id="dx1-178026"> so the style should instead be:

    -\setabbreviationstyle[abbreviation]{long-short} @@ -28675,107 +30197,107 @@ class="cmtt-10">]{long-short}
    This is actually the default category if the optional argument is omitted, so you can simply do:
    -\setabbreviationstyle{long-short}
    -
    The The long-short style is the default for the style is the default for the abbreviation category so you can omit this line completely if you + id="dx1-178030"> category so you can omit this line completely if you replace \newacronym. (The default style for the \newacronym. (The default style for the acronym category is category is short-nolong, which only shows the short + id="dx1-178032">, which only shows the short form on first use.) -

    As mentioned earlier, the

    As mentioned earlier, the acronym package option creates a new glossary with the label package option creates a new glossary with the label acronym. This is -independent of the acronym category. You can use the category. You can use the acronym package option with either package option with either \newacronym or -\newabbreviation. -

    You may instead prefer to use the . +

    You may instead prefer to use the abbreviations package option, which creates a new glossary with the label + id="dx1-178037"> package option, which creates a new glossary with the label abbreviations:

    + +
    \usepackage[\usepackage[abbreviations,,postdot,,stylemods]{glossaries-extra} - -
    This can again be used with either \newacronym or \newacronym or \newabbreviation, but the file extensions are different. + id="dx1-178038">, but the file extensions are different. This isn’t a problem if you are using makeglossaries or or makeglossaries-lite. If you are explicitly calling + id="dx1-178040">. If you are explicitly calling makeindex (or (or xindy) then you need to modify the file extensions. See the ) then you need to modify the file extensions. See the glossaries-extra user manual for further details. -

    If you use both the

    If you use both the acronym and and abbreviations package options then package options then \newacronym will default to the acronym -glossary and \newabbreviation will default to the will default to the abbreviations glossary. -

    bib2glsIf you want to try If you want to try bib2gls, you first need to convert the document to use , you first need to convert the document to use glossaries-extra as -described above. Then add the record package option. For example:

    + id="dx1-178048"> package option. For example:

    \usepackage[\usepackage[record,,postdot,,stylemods]{glossaries-extra}
    Next you need to convert the entry definitions into the bib format required by format required by bib2gls. This can easily be + id="dx1-178050">. This can easily be done with convertgls2bib. For example: -

    
    + id="dx1-178051">. For example:
    +

    
        
    convertgls2bib --preamble-only minimalgls.tex entries.bib

    @@ -28803,12 +30325,12 @@ class="cmtt-10">\makeglossaries
    with:
    -\GlsXtrLoadResources[[src=entries] @@ -28819,74 +30341,74 @@ class="cmtt-10">\newglossaryentry and \newacronym or \newabbreviation). -

    The abbreviation style command must go before

    The abbreviation style command must go before \GlsXtrLoadResources. For example (if you are using + id="dx1-178054">. For example (if you are using \newacronym):

    -\setabbreviationstyle[acronym]{long-short} -
    \GlsXtrLoadResources[[src=entries]
    Finally, replace: -
    +
     \printglossaries
    -
    -

    with:

    + +

    with:

    -\printunsrtglossaries + id="dx1-178058">
    The document build is now: -

    
    +

    
        
    pdflatex minimalgls
    bib2gls minimalgls
    pdflatex minimalgls

    -

    + id="x1-178059r2"> +

    🔗sampleDB.tex

    -

    This document illustrates how to load external files containing the glossary definitions. It also illustrates how to +

    This document illustrates how to load external files containing the glossary definitions. It also illustrates how to define a new glossary type. This document has the number list suppressed and uses suppressed and uses \glsaddall to add all the + id="dx1-179002"> to add all the entries to the glossaries without referencing each one explicitly. (Note that it’s more efficient to use glossaries-extra and bib2gls if you have a large number of entries.) To create the document + id="dx1-179003"> if you have a large number of entries.) To create the document do: -

    
    +

    
        
    pdflatex sampleDB
    makeglossaries sampleDB
    pdflatex sampleDB

    or -

    
    +

    
        
    pdflatex sampleDB
    makeglossaries-lite sampleDB
    pdflatex sampleDB @@ -28900,43 +30422,45 @@ class="cmtt-10">database2.tex
    . If for some reason you want to call makeindex explicitly you must have a separate call for each + id="dx1-179004"> explicitly you must have a separate call for each glossary:

      -
    1. Create the main glossary (all on one line): -

      
      +
    2. +

      Create the main glossary (all on one line): +

      
            
      makeindex -s sampleDB.ist -t sampleDB.glg -o sampleDB.gls sampleDB.glo

    3. -
    4. Create the secondary glossary (all on one line): -

      
      +
    5. +

      Create the secondary glossary (all on one line): +

      
            
      makeindex -s sampleDB.ist -t sampleDB.nlg -o sampleDB.not sampleDB.ntn

      Note that both makeglossaries and and makeglossaries-lite do this all in one call, so they not only make + id="dx1-179010"> do this all in one call, so they not only make it easier because you don’t need to supply all the switches and remember all the extensions but they also call makeindex the appropriate number of times.

    -

    the appropriate number of times.

    +

    bib2glsIf you want to switch to using If you want to switch to using bib2gls with with glossaries-extra, you can convert database1.tex and href="http://mirrors.ctan.org/macros/latex/contrib/glossaries/samples/database2.tex" >database2.tex to bib files using files using convertgls2bib: -

    
    + id="dx1-179015">:
    +

    
        
    convertgls2bib database1.tex database1.bib
    convertgls2bib database2.tex database2.bib
    @@ -28962,9 +30486,9 @@ class="cmtt-10">\documentclass{article}

    \usepackage[colorlinks,plainpages=false]{hyperref}
    \usepackage[\usepackage[record,,postdot]{glossaries-extra}

    \newglossary*
    {punc}{Punctuation Characters}
    -
    \GlsXtrLoadResources[[src={database1},
      selection=all,,sort=en] -
    \GlsXtrLoadResources[[src={database2},={database2},type=punc, + +
      selection=all,,sort=letter-case]

    \begin{document} -
    \printunsrtglossaries
    \end{document} - -
    Note that the nonumberlist package option has been omitted. It’s not needed because there are no + id="dx1-179023"> package option has been omitted. It’s not needed because there are no locations in this amended document (whereas in the original sampleDB.tex locations are created with \glsaddall). The starred \newglossary* is used since the is used since the makeindex//xindy extensions are now + id="dx1-179026"> extensions are now irrelevant. -

    Instead of using

    Instead of using makeglossaries you need to use you need to use bib2gls when you build the document: -

    
    + id="dx1-179028"> when you build the document:
    +

    
        
    pdflatex sampleDB
    bib2gls sampleDB
    pdflatex sampleDB @@ -29053,30 +30577,30 @@ class="cmtt-10">bib2gls
    bib2gls call processes all the indexing (rather than one call per glossary). Unlike call processes all the indexing (rather than one call per glossary). Unlike makeindex and + id="dx1-179030"> and xindy, , bib2gls processes each resource set in turn, but the resource sets aren’t linked to a specific glossary. + id="dx1-179032"> processes each resource set in turn, but the resource sets aren’t linked to a specific glossary. Multiple glossaries may be processed in a single resource set or sub-blocks of a single glossary may be processed by multiple resource sets. In this example, there happens to be one resource set per glossary because each glossary requires a different sort method. (A locale-sensitive alphabetical sort for the first and a character code sort for the second.) -

    If you want letter groups, you need to use the

    If you want letter groups, you need to use the --group switch: -

    
    + id="dx1-179033"> switch:
    +

    
        
    bib2gls --group sampleDB

    and use an appropriate glossary style. -

    See also

    See also bib2gls gallery: sorting, glossaries-extra and bib2gls: An Introductory Guide and the bib2gls user + id="dx1-179034"> user manual. -

    +

    -

    Top

    19.2

    Top

    18.2 Acronyms and First Use

    -

    + id="x1-180001r3"> +

    🔗sampleAcr.tex

    -

    This document has some sample abbreviations. It also adds the glossary to the table of contents, so an extra run +

    This document has some sample abbreviations. It also adds the glossary to the table of contents, so an extra run through LaTeX is required to ensure the document is up to date: -

    
    +

    
    +                                                                                      
    +                                                                                      
        
    pdflatex sampleAcr
    makeglossaries sampleAcr
    pdflatex sampleAcr
    pdflatex sampleAcr
    - -
    (or use makeglossaries-lite). -

    Note that if the glossary is at the start of the document and spans across multiple pages, then this can cause + id="dx1-181001">). +

    Note that if the glossary is at the start of the document and spans across multiple pages, then this can cause the locations to be shifted. In that case, an extra makeglossaries and LaTeX call are required. In + id="dx1-181002"> and LaTeX call are required. In this particular example, the glossary is at the end of the document so it’s not a problem. It’s also not a problem for a glossary at the start of the document if the page numbering is reset at the end of the glossary. For example, if the glossary is at the end of the front matter in a book-style document. -

    This document uses

    This document uses \ifglsused to determine whether to use “a” or “an” in:

    + id="dx1-181003"> to determine whether to use “a” or “an” in:

     is \ifglsused{svm}{an}{a} \gls{svm} 
    This clumsy bit of code can be tidied up with the glossaries-prefix package. Since that package automatically + id="dx1-181005"> package. Since that package automatically loads glossaries and passes all its options to the base package it’s possible to do a simple replacement of: -
    +
     \usepackage[style=long,toc]{glossaries}
    -
    -

    with:

    +
    +

    with:

    \usepackage[style=long,toc]{svm now needs an adjustment:
    \newacronym[description={statistical pattern recognition @@ -29168,7 +30692,7 @@ class="cmtt-10"> recognition class="cmtt-10">technique~\protect\cite{svm}},
    prefixfirst={a~},prefix={an\space}
    ]{svm}{svm}{support machine} class="cmtt-10">… is \pgls{svm} 
    -



    glossaries-extraIf you want to convert this sample document to use glossaries-extra, you may want the patched version of the styles provided in glossary-long, in which case you can also add , in which case you can also add stylemods: + id="dx1-181010">:

    \usepackage[\usepackage[stylemods,style=long]{}
    If you want to suppress all the other glossary style packages with nostyles, then you need to specify exactly + id="dx1-181011">, then you need to specify exactly which package (or packages) that you do want:
    \usepackage[nostyles,nostyles,stylemods=long,style=long]{glossaries-extra}
    (Now that glossaries-extra is being used, there are more available “long” styles in the glossaries-extra is being used, there are more available “long” styles in the glossary-longextra package, + id="dx1-181012"> package, which you may prefer.) -

    If you want to use

    If you want to use glossaries-prefix, you can either load it after , you can either load it after glossaries-extra or (with at least glossaries-extra -v1.42) you can simply use the prefix package option. -

    Note that the package option. +

    Note that the toc package option has been dropped. This is the default with package option has been dropped. This is the default with glossaries-extra, so it doesn’t need to be specified now. The document build is now shorter: -

    
    +

    
        
    pdflatex sampleAcr
    makeglossaries sampleAcr
    pdflatex sampleAcr @@ -29255,115 +30779,115 @@ href="#glo:glossaries-extra">glossaries-extra provides boilerplate text on the first LaTeX call when the glossary files are missing. This means that the glossary header is added to the toc file on the first LaTeX call, whereas with just the base file on the first LaTeX call, whereas with just the base glossaries package, the header isn’t present until the second LaTeX call. (As with just the base glossaries package, if the glossary occurs at the start of the document without a page reset after it then part of the build process needs repeating to ensure all referenced page numbers are up-to-date. This problem isn’t specific to the glossaries + id="dx1-181017"> package.) -

    The other different default setting is the post-description punctuation. The base package has

    The other different default setting is the post-description punctuation. The base package has nopostdot=false + id="dx1-181018"> as the default. This means that a full stop (period) is automatically inserted after the description in the glossary. The extension package has nopostdot=true as the default. If you want the original behaviour then you + id="dx1-181019"> as the default. If you want the original behaviour then you can use nopostdot=false or the shorter synonym or the shorter synonym postdot. -

    The . +

    The glossaries-extra package has different abbreviation handling that’s far more flexible than that provided by the base glossaries package. The style now needs to be set with glossaries package. The style now needs to be set with \setabbreviationstyle instead of + id="dx1-181022"> instead of \setacronymstyle:

    + id="dx1-181023">:

    -\setabbreviationstyle[acronym]{long-short-sc}
    \newacronym{svm}{svm}{support vector machine}
    -
    (Note the different style name (Note the different style name long-short-sc instead of instead of long-sc-short and the optional argument and the optional argument acronym.) If + id="dx1-181028">.) If you prefer to replace \newacronym with with \newabbreviation then omit the optional argument: + id="dx1-181030"> then omit the optional argument:
    -\setabbreviationstyle{long-short-sc} -
    \newabbreviation{svm}{svm}{support vector machine}
    -
    (The optional argument of (The optional argument of \setabbreviationstyle is the category to which the style should be -applied. If it’s omitted, is the category to which the style should be +applied. If it’s omitted, abbreviation is assumed. You can therefore have different styles for different + id="dx1-181034"> is assumed. You can therefore have different styles for different categories.) -

    Finally, you need to replace

    Finally, you need to replace \acrshort, , \acrlong and and \acrfull and their variants with and their variants with \glsxtrshort, -, +\glsxtrlong and and \glsxtrfull etc. + id="dx1-181040"> etc. + id="x1-181041r4"> -

    +

    🔗sampleAcrDesc.tex

    -

    This is similar to the previous example, except that the abbreviations have an associated description. As with +

    This is similar to the previous example, except that the abbreviations have an associated description. As with the previous example, the glossary is added to the table of contents, so an extra run through LaTeX is required: -

    
    +

    
        
    pdflatex sampleAcrDesc
    makeglossaries sampleAcrDesc
    pdflatex sampleAcrDesc @@ -29372,21 +30896,21 @@ required:
    This document uses the acronym package option, which creates a new glossary used by package option, which creates a new glossary used by \newacronym. This leaves the default main glossary available for general terms. However, in this case there are no general terms so the main glossary is redundant. The nomain package option will prevent its creation. Obviously, if you decide to + id="dx1-182002"> package option will prevent its creation. Obviously, if you decide to add some terms with \newglossaryentry you will need to remove the nomain option as the option as the main glossary will now be required. -



    glossaries-extraAs with the previous example, if you want to convert this document to use glossaries-extra in the \usepackage argument. Again you can omit toc as this is the default for as this is the default for glossaries-extra. As in the previous example, you may want to use the patched styles. This document uses altlist which is provided by which is provided by glossary-list, so -the style can be patched with , so +the style can be patched with stylemods.

    + id="dx1-182007">.

    \usepackage[acronym,nomain,style=altlist,,stylemods]{glossaries-extra}
    You may prefer to replace the acronym option with option with abbreviations, but this will change the file + id="dx1-182009">, but this will change the file extensions. If you use makeglossaries or or makeglossaries-lite you don’t need to worry about + id="dx1-182011"> you don’t need to worry about it. -

    Again the style command needs to be changed:

    +

    Again the style command needs to be changed:

    -\setabbreviationstyle[acronym]{long-short-sc-desc}
    -
    (Note the change in style name (Note the change in style name long-short-sc-desc instead of instead of long-sc-short-desc and the optional argument - and the optional argument +acronym.) -

    As with the previous example, if you prefer to use .) +

    As with the previous example, if you prefer to use \newabbreviation instead of instead of \newacronym then you need + id="dx1-182017"> then you need to omit the optional argument:

    -\setabbreviationstyle{long-short-sc-desc} @@ -29463,44 +30987,44 @@ class="cmtt-10">{long-short-sc-desc}
    \renewcommand*{\glsseeitemformat}[1]{%
     \acronymfont{\glsentrytext{#1}}}
    to ensure that the cross-references (from the see key) use the acronym font. The new abbreviation styles don’t + id="dx1-182022"> key) use the acronym font. The new abbreviation styles don’t use \acronymfont so this isn’t appropriate with so this isn’t appropriate with glossaries-extra. If you’re using at least version 1.42 of glossaries-extra, you don’t need to do anything as it automatically redefines \glsseeitemformat to take the + id="dx1-182024"> to take the style formatting into account. If you have an earlier version you can redefine this command as follows:
    \renewcommand*{\glsseeitemformat}[1]{%
     \ifglshasshort{#1}{{#1}{\glsfmttext{#1}}{{#1}}{\glsfmtname{#1}}%
    } @@ -29510,29 +31034,29 @@ short and long form) you can use:
    \renewcommand*{\glsseeitemformat}[1]{}[1]{\glsfmtname{#1}}
    -

    The

    The glossaries-extra package provides two additional cross-referencing keys glossaries-extra package provides two additional cross-referencing keys seealso and and alias, so , so see={[see also]{svm}} can be replaced with a more appropriate key:

    \newacronym[description={Statistical pattern recognition @@ -29542,9 +31066,9 @@ class="cmtt-10"> using the ``kernel trick''}, -
    seealso={svm},
     vector machine}
    -

    Finally, as with the previous example, you need to replace

    Finally, as with the previous example, you need to replace \acrshort, , \acrlong and and \acrfull etc with - etc with +\glsxtrshort, , \glsxtrlong and and \glsxtrfull etc. -

    etc. +

    bib2glsIf you want to convert this document so that it uses If you want to convert this document so that it uses bib2gls, you first need to convert it to use + id="dx1-182043">, you first need to convert it to use glossaries-extra, as above, but remember that you now need the glossaries-extra, as above, but remember that you now need the record option:

    + id="dx1-182044"> option:

    \usepackage[acronym,nomain,style=altlist,\usepackage[acronym,nomain,style=altlist,record,,postdot,,stylemods]
    }
    Now you need to convert the abbreviation definitions to the bib format required by format required by bib2gls. This can be done + id="dx1-182046">. This can be done with: -

    
    +

    
        
    convertgls2bib --preamble-only sampleAcrDesc.tex entries.bib

    If you retained \newacronym from the original example file, then the new from the original example file, then the new entries.bib file will contain entries -defined with @acronym. For example:

    + id="dx1-182048">. For example:

    -@acronym{ksvm,
      ``kernel trick''},
       seealso = {svm}, @@ -29655,159 +31179,159 @@ class="cmtt-10"> machine}
    }
    -
    If you switched to If you switched to \newabbreviation then the entries will instead be defined with then the entries will instead be defined with @abbreviation. -

    Next replace . +

    Next replace \makeglossaries with the resource command, but note that the abbreviation style must be set first:

    -\setabbreviationstyle[acronym]{long-short-sc-desc} -
    \GlsXtrLoadResources[[src=entries,% terms defined in entries.bib
      abbreviation-sort-fallback=long]
    -
    Another possibility is to make Another possibility is to make @acronym behave as though it was actually behave as though it was actually @abbreviation:
    + id="dx1-182056">:
    -\setabbreviationstyle{long-short-sc-desc} -
    \GlsXtrLoadResources[[src=entries,=entries,abbreviation-sort-fallback=long,
     entry-type-aliases={acronym=abbreviation}
    ]
    -
    Note that the category is now Note that the category is now abbreviation not not acronym so the optional argument of so the optional argument of \setabbreviationstyle + id="dx1-182063"> needs adjusting. -

    If the

    If the sort field is missing (which should usually be the case), then both field is missing (which should usually be the case), then both @acronym and and @abbreviation will + id="dx1-182066"> will fallback on the short field (not the field (not the name field, which is usually set by the style and therefore not visible to + id="dx1-182068"> field, which is usually set by the style and therefore not visible to bib2gls). For some styles, as in this example, it’s more appropriate to sort by the long form so the fallback is + id="dx1-182069">). For some styles, as in this example, it’s more appropriate to sort by the long form so the fallback is changed. (Remember that you will break this fallback mechanism if you explicitly set the sort value.) See the bib2gls manual for further details and other examples. -

    Remember to delete any manual for further details and other examples. +

    Remember to delete any \newacronym or \newabbreviation in the tex file. Finally replace file. Finally replace \printglossary -with \printunsrtglossary. The document build is now: -

    
    + id="dx1-182072">. The document build is now:
    +

    
        
    pdflatex sampleAcrDesc
    bib2gls sampleAcrDesc
    pdflatex sampleAcrDesc

    -

    Note that it’s now much easier to revert back to the descriptionless style used in

    Note that it’s now much easier to revert back to the descriptionless style used in sampleAcr.tex:

    -\setabbreviationstyle[acronym]{long-short-sc} -
    \GlsXtrLoadResources[[src=entries,,ignore-fields=description]
    With the other options it would be necessary to delete all the description fields from the abbreviation + id="dx1-182077"> fields from the abbreviation definitions in order to omit them, but with bib2gls you can simply instruct you can simply instruct bib2gls to ignore the description. + id="dx1-182079"> to ignore the description. This makes it much easier to have a large database of abbreviations for use across multiple documents that may or may not require the description. -

    + id="x1-182080r5"> +

    🔗sampleDesc.tex

    -

    This is similar to the previous example, except that it defines the abbreviations using

    This is similar to the previous example, except that it defines the abbreviations using \newglossaryentry + id="dx1-183001"> instead of \newacronym. As with the previous example, the glossary is added to the table of contents, so an + id="dx1-183002">. As with the previous example, the glossary is added to the table of contents, so an extra run through LaTeX is required: -

    
    +

    
        
    pdflatex sampleDesc
    makeglossaries sampleDesc
    pdflatex sampleDesc @@ -29816,14 +31340,14 @@ extra run through LaTeX is required:
    This sample file demonstrates the use of the first and and text keys but in general it’s better to use keys but in general it’s better to use \newacronym -instead as it’s more flexible. For even greater flexibility use +instead as it’s more flexible. For even greater flexibility use \newabbreviation provided by provided by glossaries-extra. For other variations, such as showing the symbol on glossaries-extra and bib2gls: An Introductory Guide. + id="x1-183007r6"> -

    +

    🔗sampleFnAcrDesc.tex

    -

    This document has some sample abbreviations that use the

    This document has some sample abbreviations that use the footnote-sc-desc acronym style. As with the + id="dx1-184001"> acronym style. As with the previous example, the glossary is added to the table of contents, so an extra run through LaTeX is required: -

    
    +

    
        
    pdflatex sampleFnAcrDesc
    makeglossaries sampleFnAcrDesc
    pdflatex sampleFnAcrDesc @@ -29862,32 +31386,32 @@ href="#glo:glossaries-extra">glossaries-extra, then you just need to follow the same steps as for sampleAcr.tex with a slight modification. This time the sampleAcr.tex with a slight modification. This time the short-sc-footnote-desc + id="dx1-184002"> abbreviation style is needed:

    -\setabbreviationstyle[acronym]{short-sc-footnote-desc}
    The command redefinitions (performed with \renewcommand) should now all be deleted as they are no longer applicable. -

    You may prefer to use the

    You may prefer to use the short-sc-postfootnote-desc style instead. There are subtle differences between the - style instead. There are subtle differences between the +postfootnote and and footnote set of styles. Try changing the abbreviation style to set of styles. Try changing the abbreviation style to short-sc-footnote and compare the + id="dx1-184007"> and compare the location of the footnote marker with the two styles. -

    This modified sample file now has a shorter build: -

    
    +

    This modified sample file now has a shorter build: +

    
        
    pdflatex sampleFnAcrDesc
    makeglossaries sampleFnAcrDesc
    pdflatex sampleFnAcrDesc @@ -29898,18 +31422,18 @@ href="#glo:glossaries-extra">glossaries-extra package produces boilerplate text when the glossary file is missing (on the first LaTeX run) which adds the glossary title to the table of contents (toc) file. + id="dx1-184008">) file. -

    + id="x1-184009r7"> +

    🔗sampleCustomAcr.tex

    -

    This document has some sample abbreviations with a custom acronym style. It also adds the glossary to the +

    This document has some sample abbreviations with a custom acronym style. It also adds the glossary to the table of contents, so an extra run through LaTeX is required: -

    
    +

    
        
    pdflatex sampleCustomAcr
    makeglossaries sampleCustomAcr @@ -29925,15 +31449,15 @@ class="cmti-10">short
    ⟩ (⟨long⟩), and the sort key is set to the long form instead of the short form. On key is set to the long form instead of the short form. On first use, the footnote text is in the form ⟨long⟩: ⟨description⟩ (instead of just the long form). This requires defining a new acronym style that inherits from the footnote-sc-desc style. -


    style. +


    glossaries-extraThe conversion to glossaries-extra starts in much the same way as the p

    \usepackage[acronym,nomain,\usepackage[acronym,nomain,postdot,,stylemods,style=altlist] @@ -29954,57 +31478,57 @@ class="cmtt-10">}
    The abbreviation styles have associated helper commands that may be redefined to make minor modifications. These redefinitions should be done before the abbreviations are defined. -

    The

    The short-sc-footnote-desc abbreviation style is the closest match to the requirement, so replace the + id="dx1-185003"> abbreviation style is the closest match to the requirement, so replace the \setacronymstyle command with:

    -\setabbreviationstyle[acronym]{short-sc-footnote-desc}
    -
    Again, you may prefer Again, you may prefer short-sc-postfootnote-desc. Both styles use the same helper commands. -

    Next some adjustments need to be made to fit the new requirements. The name needs to be ⟨. Both styles use the same helper commands. +

    Next some adjustments need to be made to fit the new requirements. The name needs to be ⟨long⟩ (⟨short⟩):

    \renewcommand*{\renewcommand*{\glsxtrfootnotedescname}{%
      \protect \protect\glslongfont{\the\glslongtok}%
      \protect \protect\glsxtrfullsep{\the\glslabeltok}%
      \protect \protect\glsxtrparen{\protect{\protect\glsabbrvfont{\the\glsshorttok}}%
    \renewcommand*{\renewcommand*{\glsxtrfootnotedescsort}{\the\glslongtok}
    The footnote for all the footnote abbreviation styles is produced with:
    -\glsxtrabbrvfootnote{label}{\gls, \glspl etc). This can simply be redefined as:
    \renewcommand*{\renewcommand*{\glsxtrabbrvfootnote}[2]{\footnote{%
      #2: \glsentrydesc{#1}}}
    This will mimic the result from the original sample document. -

    You may prefer to replace

    You may prefer to replace #2 with a reference to a specific field (or fields). For example:

    \renewcommand*{\renewcommand*{\glsxtrabbrvfootnote}[2]{\footnote{%
      \Glsfmtlong{#1} ( (\glsfmtshort{#1}): \glsentrydesc{#1}.}}
    As with the earlier sampleAcrDesc.tex, you need to remove or change the redefinition of \glsseeitemformat + id="dx1-185025"> since \acronymfont is no longer appropriate. -

    In the original

    In the original sampleCustomAcr.tex source code, I started the description with a capital:

    -
    +
     \newacronym[description={Statistical pattern recognition
    - 
    technique using the ``kernel trick''}, - 
    see={[see also]{svm}}, - 
    ]{ksvm}{ksvm}{kernel support vector machine} -
    -

    This leads to a capital letter after the colon in the footnote, which is undesirable, but I would like to +technique using the ``kernel trick''}, +see={[see also]{svm}}, +]{ksvm}{ksvm}{kernel support vector machine} +

    +

    This leads to a capital letter after the colon in the footnote, which is undesirable, but I would like to have the description start with a capital in the glossary. The solution to this problem is easy with glossaries-extra. I start the description with a lowercase letter and set the glossaries-extra. I start the description with a lowercase letter and set the glossdesc attribute to attribute to firstuc:

    -\glssetcategoryattribute{acronym}{glossdesc}{firstuc}
    The abbreviation definitions are modified slightly:
    \newacronym[description={statistical using the ``kernel trick''}, -
    seealso={svm},
     support vector machine}
    -
    Note the use of the Note the use of the seealso key, which is only available with key, which is only available with glossaries-extra. -

    If you prefer to use

    If you prefer to use \newabbreviation instead of instead of \newacronym, then the category needs to be , then the category needs to be abbreviation -rather than +rather than acronym:

    + id="dx1-185034">:

    -\glssetcategoryattribute{abbreviation}{glossdesc}{firstuc} @@ -30167,25 +31691,25 @@ class="cmtt-10">}{glossdesc}{firstuc}
    and the style command needs to be adjusted so that it omits the optional argument. For example:
    -\setabbreviationstyle{short-sc-postfootnote-desc}
    + id="x1-185037r8"> -

    +

    🔗sample-FnDesc.tex

    -

    This example defines a custom display format that puts the description in a footnote on

    This example defines a custom display format that puts the description in a footnote on first use. -

    
    +

    
        
    pdflatex sample-FnDesc
    makeglossaries sample-FnDesc
    pdflatex sample-FnDesc @@ -30195,142 +31719,142 @@ In order to prevent nested hyperlinks, this document uses the hyperfirst=false package option (otherwise the + id="dx1-186001"> package option (otherwise the footnote marker hyperlink would be inside the hyperlink around the link text which would result in a nested + id="dx1-186002"> which would result in a nested hyperlink). -



    glossaries-extraThe glossaries-extra package has category post-link hooks that make it easier to adjust the formatting. The post-link hook is placed after the hyperlink around the link text, so a hyperlink created by + id="dx1-186003">, so a hyperlink created by \footnote in the post-link hook won’t cause a nested link. This means that the in the post-link hook won’t cause a nested link. This means that the hyperfirst=false option isn’t + id="dx1-186005"> option isn’t required:

    \usepackage[\usepackage[postdot,,stylemods]{glossaries-extra}
    -

    Never use commands like

    Never use commands like \gls or \glsdesc in the post-link hook as you can end up with infinite recursion. Use commands that don’t themselves have a post-link hook, such as \glsentrydesc or \glossentrydesc, instead.
    -

    -

    In the original

    +

    In the original sample-FnDesc.tex file, the format was adjusted with:

    \renewcommand*{\glsentryfmt}{%
      \glsgenentryfmt + id="dx1-186007">
      \ifglsused{\glslabel}{}{\footnote{\glsentrydesc{\glslabel}}}%
    }
    This can be changed to:
    -\glsdefpostlink + id="dx1-186013">
    {general}% category label
    {{\glsxtrifwasfirstuse{\footnote{\glsentrydesc{\glslabel}}}{}}
    -
    This sets the post-link hook for the This sets the post-link hook for the general category (which is the default category for entries defined with + id="dx1-186018"> category (which is the default category for entries defined with \newglossaryentry). If I added some abbreviations (which have a different category) then this change wouldn’t + id="dx1-186019">). If I added some abbreviations (which have a different category) then this change wouldn’t apply to them. -

    The first paragraph in the document is: +

    The first paragraph in the document is:

    -
    +
     First use: \gls{sample}.
    -
    -

    So the PDF will have the word “sample” (the +

    So the PDF will have the word “sample” (the link text created by created by \gls{sample}) as a hyperlink to the entry in the glossary followed by the footnote marker, which is a hyperlink to the footnote. This is then followed by the sentence terminator. “First use: sample1.” -

    It would look tidier if the footnote marker could be shifted after the full stop. “First use: sample.

    It would look tidier if the footnote marker could be shifted after the full stop. “First use: sample.1” This can easily be achieved with a minor modification:

    -\glsdefpostlink + id="dx1-186021">
    {general}% category label
    {{\glsxtrifwasfirstuse + id="dx1-186022">
     { {\glsxtrdopostpunc{\footnote{\glsentrydesc{\glslabel}}}}%
     {}% @@ -30339,40 +31863,40 @@ class="cmtt-10">}
    You may prefer to use \glossentrydesc instead of instead of \glsentrydesc. This will obey the . This will obey the glossdesc attribute. If + id="dx1-186029"> attribute. If you append \glspostdescription, you can also pick up the , you can also pick up the postdot package option. For example: + id="dx1-186031"> package option. For example:
    -\glssetcategoryattribute{general}{glossdesc}{firstuc}
    -
    \glsdefpostlink + id="dx1-186033">
    {general}% category label
    {{\glsxtrifwasfirstuse + id="dx1-186034">
     { {\glsxtrdopostpunc{\footnote{%
        \glossentrydesc
    {\glslabel}\glspostdescription
    }}}%
     {}% @@ -30394,20 +31918,20 @@ class="cmtt-10">}
    Alternatively, you could just use \Glsentrydesc and explicitly append the full stop. + id="dx1-186040"> and explicitly append the full stop. -

    + id="x1-186041r9"> +

    🔗sample-custom-acronym.tex

    -

    This document illustrates how to define your own acronym style if the predefined styles don’t suit your +

    This document illustrates how to define your own acronym style if the predefined styles don’t suit your requirements. -

    
    +

    
        
    pdflatex sample-custom-acronym
    makeglossaries sample-custom-acronym
    pdflatex sample-custom-acronym @@ -30417,44 +31941,44 @@ In this case, a style is defined to show the short form in the text with the lon footnote on first use. The long form is used for the sort value. The short form is displayed in value. The short form is displayed in small caps in the + id="dx1-187002"> in the main part of the document but in uppercase in the list of acronyms. (So it’s a slight variation of some of the examples above.) The name is set to the long form (starting with an initial capital) followed by the all caps short + id="dx1-187003"> is set to the long form (starting with an initial capital) followed by the all caps short form in parentheses. The final requirement is that the inline form should show the long form followed by the short form in parentheses. -



    glossaries-extraAs with sampleFnAcrDesc.tex, the sampleFnAcrDesc.tex, the short-sc-footnote-desc and and short-sc-postfootnote-desc + id="dx1-187005"> abbreviation styles produce almost the required effect so one of those can be used as a starting point. However the final requirement doesn’t fit. It’s now necessary to actually define a custom abbreviation -style, but it can mostly inherit from the short-sc-footnote-desc or or short-sc-postfootnote-desc style: + id="dx1-187007"> style:

    -\newabbreviationstyle{custom-fn}%
    {%
       \GlsXtrUseAbbrStyleSetup{short-sc-footnote-desc}%
    }% @@ -30462,26 +31986,26 @@ class="cmtt-10">}%
    class="cmtt-10">{%

       \GlsXtrUseAbbrStyleFmts{short-sc-footnote-desc}%
      \renewcommand*{ \renewcommand*{\glsxtrinlinefullformat}[2]{%
         \glsfirstlongfootnotefont{{\glsaccesslong{##1}%
          \ifglsxtrinsertinside##2\fi}%
          \ifglsxtrinsertinside\else##2\fi\else##2\fi\glsxtrfullsep{##1}%
         \glsxtrparen{{\glsfirstabbrvscfont{{\glsaccessshort{##1}}}%
      }%
      \renewcommand*{ \renewcommand*{\glsxtrinlinefullplformat}[2]{%
         \glsfirstlongfootnotefont{{\glsaccesslongpl{##1}%
          \ifglsxtrinsertinside##2\fi}%
         \ifglsxtrinsertinside\else##2\fi\else##2\fi\glsxtrfullsep{##1}%
         \glsxtrparen{{\glsfirstabbrvscfont{{\glsaccessshortpl{##1}}}%
      }%
      \renewcommand*{ \renewcommand*{\Glsxtrinlinefullformat}[2]{%
         \glsfirstlongfootnotefont{{\Glsaccesslong{##1}%
          \ifglsxtrinsertinside##2\fi}%
          \ifglsxtrinsertinside\else##2\fi\else##2\fi\glsxtrfullsep{##1}%
         \glsxtrparen{{\glsfirstabbrvscfont{{\glsaccessshort{##1}}}%
      }%
      \renewcommand*{ \renewcommand*{\Glsxtrinlinefullplformat}[2]{%
         \glsfirstlongfootnotefont{{\Glsaccesslongpl{##1}% @@ -30669,34 +32193,34 @@ class="cmtt-10">      \ifglsxtrinsertinside##2\fi}%
         \ifglsxtrinsertinside\else##2\fi\else##2\fi\glsxtrfullsep{##1}%
         \glsxtrparen{{\glsfirstabbrvscfont{{\glsaccessshortpl{##1}}}%
    }
    (See the glossaries-extra user manual for further details.) -

    This new custom style now needs to be set:

    +

    This new custom style now needs to be set:

    -\setabbreviationstyle[acronym]{custom-fn}
    -
    Remember that if you decide to use Remember that if you decide to use \newabbreviation instead of instead of \newacronym then the category will be - then the category will be +abbreviation not not acronym:
    + id="dx1-187051">:
    -\setabbreviationstyle{custom-fn}
    This custom style simply adjusts the inline full form. There are other adjustments to be made that apply to the @@ -30737,15 +32261,15 @@ long form followed by the description. This is the same as the modification to a
    \renewcommand*{\renewcommand*{\glsxtrabbrvfootnote}[2]{\footnote{#2:
    \glsentrydesc{#1}.}}
    As with sampleCustomAcr.tex, if you specifically want the sin argument. For example:
    \renewcommand*{\renewcommand*{\glsxtrabbrvfootnote}[2]{\footnote + id="dx1-187057">
     { {\Glsfmtlong{#1}: \glsentrydesc{#1}.}}
    -

    The

    The name now needs to be the long form followed by the short form in parentheses, but note the new + id="dx1-187060"> now needs to be the long form followed by the short form in parentheses, but note the new requirement that the short form should now be in all capitals not small caps and the long form should start with + id="dx1-187061"> and the long form should start with a capital letter.

    \renewcommand*{\renewcommand*{\glsxtrfootnotedescname}{%
      \protect \protect\glsfirstlongfootnotefont + id="dx1-187063">
        {\makefirstuc{\the\glslongtok}}
      (\protect\MakeTextUppercase{\the\glsshorttok})%
    }
    The inherited abbreviation style uses the short form as the sort value by default. This needs to be changed to + id="dx1-187068"> value by default. This needs to be changed to the long form:
    \renewcommand*{\renewcommand*{\glsxtrfootnotedescsort}{\the\glslongtok}
    -

    If you want to switch to using

    If you want to switch to using bib2gls, remember to set the abbreviation style before the + id="dx1-187071">, remember to set the abbreviation style before the resource command and change the default sort fallback field to long, as with , as with sampleAcrDesc.tex.
    -

    +

    -

    + id="x1-187073r10"> +

    🔗sample-dot-abbr.tex

    -

    This document illustrates how to use the base post link hook to adjust the space factor after abbreviations. -

    
    +

    This document illustrates how to use the base post link hook to adjust the space factor after abbreviations. +

    
        
    pdflatex sample-dot-abbr
    makeglossaries sampledot-abbrf
    pdflatex sample-dot-abbr @@ -30851,11 +32375,11 @@ class="cmtt-10">sample-dot-abbr.tex

    This example creates a custom storage key that provides a similar function to glossaries-extra’s glossaries-extra’s category + id="dx1-188001"> key. -



    glossaries-extraThis example is much simpler with

    \glsaddstoragekey{abbrtype}{word}{\abbrtype}
    can now be removed. -

    The

    The category key is set to key is set to initials for the initialisms (which are defined with the custom \newacr command). The abbreviation styles can be set with:

    -\setabbreviationstyle[acronym]{long-short} -
    \setabbreviationstyle[initials]{long-short}
    -
    The The discardperiod attribute will discard any full stop (period) following commands like attribute will discard any full stop (period) following commands like \gls:
    -\glssetcategoryattribute{initials}{discardperiod}{true}
    -
    (If you want to use the (If you want to use the noshortplural attribute then you will also need to set the attribute then you will also need to set the pluraldiscardperiod + id="dx1-188009"> attribute.) -

    The first use is governed by the

    The first use is governed by the retainfirstuseperiod attribute. If set, the period won’t be discarded if it + id="dx1-188010"> attribute. If set, the period won’t be discarded if it follows the first use of commands like \gls. This is useful for styles where the first use doesn’t end with the short form. In this case, the first use of the first use of the long-short style ends with a closing parenthesis, so the end of + id="dx1-188011"> style ends with a closing parenthesis, so the end of sentence might be clearer if the period is retained:

    -\glssetcategoryattribute{initials}{retainfirstuseperiod}{true}
    -

    The

    The insertdots attribute can automatically insert dots into the short form with a final space factor + id="dx1-188013"> attribute can automatically insert dots into the short form with a final space factor adjustment:

    -\glssetcategoryattribute{initials}{insertdots}{true}
    -

    The custom helper command defined in the example needs to be slightly modified:

    +

    The custom helper command defined in the example needs to be slightly modified:

    \newcommand*{\newabbr}[1][]{%
      \newabbreviation[[category=initials,#1]}
    -
    The definitions need to be slightly modified to work with the The definitions need to be slightly modified to work with the insertdots attribute:
    + id="dx1-188016"> attribute:
    \newabbr{eg}{}{AGM}
    (This makes it much easier to change your mind if you decide at a later date to omit the dots, especially if you are storing all your definitions in a file that’s shared across multiple documents, but note the need to group “Sc”.) -

    The “laser” definition remains unchanged: +

    The “laser” definition remains unchanged:

    -
    +
     \newacronym{laser}{laser}{light amplification by stimulated
    - 
    emission of radiation} -
    -

    The remaining code in the preamble must now be removed. (It will interfere with +

    The remaining code in the preamble must now be removed. (It will interfere with glossaries-extra’s category post-link hooks.) No change is required in the document body. -

    See the

    See the glossaries-extra user manual for further details about category attributes and post-link hooks. -

    + id="x1-188017r11"> +

    🔗sample-font-abbr.tex

    -

    This document illustrates how to have different fonts for abbreviations within the style. The document build +

    This document illustrates how to have different fonts for abbreviations within the style. The document build is: -

    
    +

    
        
    pdflatex sample-font-abbr
    makeglossaries sample-font-abbr
    pdflatex sample-font-abbr @@ -31013,35 +32537,35 @@ The acronym mechanism provided by the base glossaries package isn’t well suited to having a mixture of styles. This example provides a workaround that involves defining a new storage key with \glsaddstoragekey that’s + id="dx1-189001"> that’s used to hold the font declaration (such as \em).

    -
    +
     \glsaddstoragekey{font}{}{\entryfont}
    -
    -

    A new custom acronym style is defined that fetches the font information from this new key so that it can be +

    +

    A new custom acronym style is defined that fetches the font information from this new key so that it can be applied to the abbreviation. Some helper commands are also provided to define the different types of abbreviation:

    -
    +
     \newcommand*{\newitabbr}[1][]{\newacronym[font=\em,#1]}
    - 
    \newcommand*{\newupabbr}{\newacronym} - 
    \newitabbr{eg}{e.g.}{exempli gratia} - 
    \newupabbr{bsc}{BSc}{Bachelor of Science} -
    -

    This makes the +

    This makes the first use of \gls{eg} appear as “exempli gratia (e.g.)” whereas the first use of \gls{bsc} is “Bachelor of Science (BSc)”. -



    glossaries-extraThis example document is much simpler with \usepackage command needs adjusting:

    \usepackage[\usepackage[postdot,,stylemods]{glossaries-extra}
    The custom storage key can now be removed and also the custom acronym style. Now replace the \setacronymstyle
    line with:
    + id="dx1-189002"> line with:
    -\setabbreviationstyle[acronym]{long-short-em}
    and change the definition of the helper commands:
    \newcommand*{\newitabbr}{\newacronym}
    \newcommand*{\newupabbr}{\newcommand*{\newupabbr}{\newabbreviation}
    Note that the font=\em, part has been removed from the definition of the first command and the second -command uses \newabbreviation instead of instead of \newacronym. This means that . This means that \newitabbr will default to -category=acronym and \newupabbr will default to \newupabbr will default to category=abbreviation. The default style for the -abbreviation category is category is long-short, which is the required style for this example. This just means that -only the , which is the required style for this example. This just means that +only the acronym category needs to have the style set (with the above category needs to have the style set (with the above \setabbreviationstyle + id="dx1-189013"> command). -

    Finally, the

    Finally, the \acrshort, , \acrlong and \acrfull commands need to be replaced with and \acrfull commands need to be replaced with \glsxtrshort, -, +\glsxtrlong and and \glsxtrfull. -

    You may notice that the spacing after “e.g.” and “i.e.” isn’t correct. This is similar to the . +

    You may notice that the spacing after “e.g.” and “i.e.” isn’t correct. This is similar to the sample-dot-abbr.tex example where the space factor needs adjusting. In this case I’ve inserted the dots manually (rather than relying -on the insertdots attribute). You can either remove the dots and use attribute). You can either remove the dots and use insertdots with with discardperiod: + id="dx1-189021">:

    -\glssetcategoryattribute{acronym}{insertdots}{true} -
    \glssetcategoryattribute{acronym}{discardperiod}{true}

    ie
    }{id est}
    -
    Or you can manually insert the space factor adjustment and only use the Or you can manually insert the space factor adjustment and only use the discardperiod attribute: + id="dx1-189024"> attribute:
    -\glssetcategoryattribute{acronym}{discardperiod}{true}

    \newitabbr{eg}{e.g.\@}{exempli gratia}
    \newitabbr{ie}{i.e.\@}{id est}
    -

    You don’t have to use the

    You don’t have to use the acronym category. You may prefer a different label that fits better semantically. + id="dx1-189028"> category. You may prefer a different label that fits better semantically. For example:

    -\setabbreviationstyle[latinabbr]{long-short-em}
    \newcommand*{\newlatinabbr}[1][]{abbr}[1][]{\newabbreviation[[category=latinabbr,#1]} -
    \glssetcategoryattribute{latinabbr}{insertdots}{true} -
    \glssetcategoryattribute{latinabbr}{discardperiod}{true} @@ -31219,7 +32743,7 @@ class="cmtt-10">\newlatinabbr{eg}{e.g.\@}{exempli gratia}
    \newlatinabbr{ie}{i.e.\@}{id est}
    -

    +

    -

    Top

    19.3

    Top

    18.3 Non-Page Locations

    -

    + id="x1-190001r12"> +

    🔗sampleEq.tex

    -

    This document illustrates how to change the location to something other than the page number. In this case, +

    This document illustrates how to change the location to something other than the page number. In this case, the equation counter is used since all glossary entries appear inside an equation environment. To create the + id="dx1-191001"> environment. To create the document do: -

    
    +

    
        
    pdflatex sampleEq
    makeglossaries sampleEq
    pdflatex sampleEq @@ -31263,45 +32787,45 @@ document do: The glossaries package provides some location formats, such as \hyperrm and and \hyperbf, that allow the + id="dx1-191004">, that allow the locations in the number list to hyperlink to the appropriate place in the document (if to hyperlink to the appropriate place in the document (if hyperref has + id="dx1-191006"> has been used). Since it’s not possible to include the hyperlink name in the indexing information with makeindex and and xindy, the , the glossaries package has to reform the name from a prefix and the location value. -

    Unfortunately it’s not always possible to split the link name into a prefix and location. That happens with +

    Unfortunately it’s not always possible to split the link name into a prefix and location. That happens with the equation counter in certain classes, such as the report class (which is used in this example). This means that it’s necessary to redefine \theHequation so that it has a format that fits the + id="dx1-191009"> so that it has a format that fits the requirement:

    -
    +
     \renewcommand*\theHequation{\theHchapter.\arabic{equation}}
    -
    -

    If you don’t do this, the equation locations in the glossary won’t form valid hyperlinks. -

    Each glossary entry represents a mathematical symbol. This means that with Options  +

    If you don’t do this, the equation locations in the glossary won’t form valid hyperlinks. +

    Each glossary entry represents a mathematical symbol. This means that with Options 13 it’s necessary to use the sort key. For example:

    + id="dx1-191010"> key. For example:

    \newglossaryentry{Gamma}{name=\ensuremath{\Gamma(z)}, @@ -31312,45 +32836,45 @@ class="cmtt-10">sort=Gamma}
    -

    bib2glsIf you want to switch to using If you want to switch to using bib2gls, the first change you need to make is to switch from + id="dx1-191012">, the first change you need to make is to switch from explicitly loading glossaries to loading glossaries-extra with the glossaries-extra with the record package option. If package option. If record=only (or (or record + id="dx1-191015"> without a value) is used, then the above redefinition of \theHequation is still required. If \theHequation is still required. If record=nameref is used + id="dx1-191016"> is used instead then the redefinition of \theHequation isn’t required. You may also want to use the \theHequation isn’t required. You may also want to use the stylemods and - and +postdot options:

    + id="dx1-191018"> options:

    \usepackage[\usepackage[record=nameref,,stylemods,,postdot,
    }
    The entries now need to be converted into the bib format required by format required by bib2gls, which can be done with + id="dx1-191020">, which can be done with convertgls2bib: -

    
    + id="dx1-191021">:
    +

    
        
    convertgls2bib --preamble-only sampleEq.tex entries.bib

    @@ -31379,9 +32903,9 @@ class="cmtt-10">entries.bib that starts:

    class="cmtt-10">% Encoding: UTF-8 -
    @entry{Gamma,
      function}
    }
    -
    You may prefer to change You may prefer to change @entry to to @symbol. (This should be easy to do with your text editor’s search and + id="dx1-191024">. (This should be easy to do with your text editor’s search and replace function.) -

    Note that the

    Note that the sort key has been omitted. This is because it typically shouldn’t be used. The difference -between using key has been omitted. This is because it typically shouldn’t be used. The difference +between using @entry and and @symbol is that with is that with @entry the sort value will be obtained from the the sort value will be obtained from the name but with - but with +@symbol the sort value will be obtained from the label. If you explicitly use the the sort value will be obtained from the label. If you explicitly use the sort key then you will break -this behaviour. (If you try this example out, notice the difference in the ordering if you switch between key then you will break +this behaviour. (If you try this example out, notice the difference in the ordering if you switch between @entry -and +and @symbol. See also . See also bib2gls gallery: sorting.) -

    Next replace

    Next replace \makeglossaries with:

    -\GlsXtrLoadResources[[src=entries]
    -
    If you have used If you have used record=nameref then you can remove the redefinition of then you can remove the redefinition of \theHequation. Next remove all the lines defining the glossary entries (since they’re now defined in the bib file). -

    Finally, replace file). +

    Finally, replace \printglossary with with \printunsrtglossary:

    + id="dx1-191039">:

    -\printunsrtglossary[title={Index of Special and
    Notations}]
    -
    The rest of the document remains unchanged (unless you want to use The rest of the document remains unchanged (unless you want to use \glsxtrfmt as described in the following + id="dx1-191041"> as described in the following example). -

    + id="x1-191042r13"> +

    🔗sampleEqPg.tex

    -

    This is similar to the previous example, but the

    This is similar to the previous example, but the number lists are a mixture of page numbers and + id="dx1-192001">s are a mixture of page numbers and equation numbers. This example adds the glossary to the table of contents, so an extra LaTeX run is required: -

    
    +

    
        
    pdflatex sampleEqPg
    makeglossaries sampleEqPg
    pdflatex sampleEqPg @@ -31495,64 +33019,64 @@ As with the previous example, entries are defined like this:

    -
    +
     \newglossaryentry{Gamma}{name=\ensuremath{\Gamma(z)},
    - 
    description=Gamma function,sort=Gamma} -
    -

    The +

    The counter=equation package option is used to set the default indexing counter to package option is used to set the default indexing counter to equation. This means that it has to be changed for indexing outside of any numbered equation. For example:

    -
    +
     \glslink[format=hyperbf,counter=page]{Gamma}{gamma function}
    -
    -

    I’ve set the +

    I’ve set the format to to hyperbf to indicate that this is a primary reference. (Note that I’m using to indicate that this is a primary reference. (Note that I’m using \hyperbf not + id="dx1-192005"> not \textbf in order to include a hyperlink in the location.) -

    The in order to include a hyperlink in the location.) +

    The link text here is almost identical to the description. The only difference is that the description starts + id="dx1-192007"> here is almost identical to the description. The only difference is that the description starts with a capital. If it started with a lowercase character instead, I could simply use \glsdesc instead of + id="dx1-192008"> instead of \glslink. If I change the entry descriptions so that they all start with a lowercase letter then I would need to + id="dx1-192009">. If I change the entry descriptions so that they all start with a lowercase letter then I would need to create a custom glossary style that used \Glossentrydesc instead of instead of \glossentrydesc. -


    . +


    glossaries-extraIf I switch to using glossaries-extra I wouldn’t need a new glossary style. Instead I could just -use the glossdesc attribute to perform the case change. Remember that the first change to make is to replace + id="dx1-192012"> attribute to perform the case change. Remember that the first change to make is to replace glossaries with glossaries-extra:

    \usepackage[style=long3colheader,\usepackage[style=long3colheader,postdot,,stylemods,
    \newglossaryentry{Gamma}{name=\ensuremath{\Gamma(z)},
    description=gamma function,sort=Gamma}
    -
    The The glossdesc attribute needs setting:
    + id="dx1-192014"> attribute needs setting:
    -\glssetcategoryattribute{general}{glossdesc}{firstuc}
    This means that I can now use \glsdesc instead of instead of \glslink. -

    It’s a bit cumbersome typing . +

    It’s a bit cumbersome typing [format=hyperbf,counter=page] for each primary reference, but * or + which are already in use). For example:

    -\GlsXtrSetAltModifier{!}{format=hyperbf,counter=page} @@ -31621,13 +33145,13 @@ class="cmtt-10">}{format=hyperbf,counter=page}
    Now \glsdesc!{Gamma} is equivalent to:
    \glsdesc[format=hyperbf,counter=page]{Gamma}
    So the text at the start of the “Gamma Functions” chapter is now just:
    @@ -31635,7 +33159,7 @@ class="cmtt-10">[format=hyperbf,counter=page]{Gamma} The \glsdesc!{Gamma} is defined as
    which is much more compact. Similar changes can be made for the other instance of \glslink where the where the link text is just the description:
    + id="dx1-192023"> is just the description:
    The \glsdesc!{erf} is defined as
    -

    There are three other instances of

    There are three other instances of \glslink, such as:

    + id="dx1-192025">, such as:

    \glslink{Gamma}{\Gamma(x+1)}
    If I just use \gls{Gamma} then I would get Γ(z) as the link text. For entries like this that represent functions + id="dx1-192027">. For entries like this that represent functions with variable parameters it would be more convenient (and help with consistency) if a command was available to easily replace the parameters. -

    With the base

    With the base glossaries package, one simple solution that works for this example is to save just the function symbol in the symbol field, for example:

    + id="dx1-192028"> field, for example:

    \newglossaryentry{Gamma}{name=\ensuremath{\Gamma(z)},
    symbol={\ensuremath{\Gamma}}, @@ -31694,7 +33218,7 @@ class="cmtt-10"> function,sort=Gamma}
    \glssymbol{Gamma}[(\Gamma(x+1))]
    (which includes the function parameter inside the link text) or just:
    + id="dx1-192031">) or just:
    \glssymbol{Gamma}(\Gamma(x+1))
    (which has the function parameter after the link text). This is a convenient approach where the extra material + id="dx1-192033">). This is a convenient approach where the extra material can simply follow the symbol, and it can also be used with glossaries-extra. -

    The

    The glossaries-extra package provides another possibility. It requires a command that takes a single argument, for example:

    -
    +
     \newcommand{\Gammafunction}[1]{\Gamma(#1)}
    -
    -

    The control sequence name (the command name without the leading backslash) is stored in the field identified -by the command +

    The control sequence name (the command name without the leading backslash) is stored in the field identified +by the command \GlsXtrFmtField (this should be the internal field name not the key name, see table 4.1). -The default is (this should be the internal field name not the key name, see +table ??tab:fieldmap). The default is useri which corresponds to the which corresponds to the user1 key. This means that the Gamma entry would need to be -defined with user1=Gammafunction. With this approach, each function entry would need a separate associated -command. -

    Another approach is to store the parameterless function in the key. This means that the Gamma +entry would need to be defined with user1=Gammafunction. With this approach, each function entry would +need a separate associated command. +

    Another approach is to store the parameterless function in the symbol key (as earlier) and have a more + id="dx1-192037"> key (as earlier) and have a more generic command that uses this symbol. This requires the entry label, which can be obtained with \glslabel within the link text:

    + id="dx1-192038">:

    \newcommand{\entryfunc}[1]{\glsentrysymbol{\glslabel}(#1)}
    (Obviously, this command can’t be used outside of the link text or post-link hooks since it uses + id="dx1-192041"> or post-link hooks since it uses \glslabel.) -

    So the entry now needs the parameterless function in .) +

    So the entry now needs the parameterless function in symbol and the control sequence name of this generic + id="dx1-192043"> and the control sequence name of this generic command in user1. For example:

    + id="dx1-192044">. For example:

    \newglossaryentry{Gamma}{name=\ensuremath{\Gamma(z)},
    symbol={\ensuremath{\Gamma}},user1=entryfunc, @@ -31783,72 +33308,72 @@ class="cmtt-10"> function,sort=Gamma}
    (This doesn’t need to be done for the C and G entries since they’re constants not functions.) -

    You may want to consider providing helper commands to make the functions easier to define. For +

    You may want to consider providing helper commands to make the functions easier to define. For example:

    -
    +
     \newcommand{\func}[2]{#1(#2)}
    - 
    \newcommand{\entryfunc}[1]{\func{\glsentrysymbol{\glslabel}}{#1}} - 
    \newcommand{\newfunc}[5][]{% - 
     \newglossaryentry{#2}{name={\ensuremath{\func{#3}{#4}}}, - 
       symbol={#3}, - 
       user1={entryfunc}, - 
       description={#5}, - 
       sort={#2},#1 - 
     }% - 
    } -
    -

    The entries can now be defined using this custom +

    The entries can now be defined using this custom \newfunc command. For example:

    -
    +
     \newfunc{Gamma}{\Gamma}{z}{gamma function}
    - 
    \newfunc[sort=gamma1]{gamma}{\gamma}{\alpha,x}{lower - 
      incomplete gamma function} - 
    \newfunc[sort=Gamma2]{iGamma}{\Gamma}{\alpha,x}{upper - 
      incomplete gamma function} -
    -

    -

    Note that in +

    +

    Note that in \newfunc the symbol key doesn’t have its value encapsulated with key doesn’t have its value encapsulated with \ensuremath so so \glssymbol will need to explicitly be placed in math mode. If you switch to a glossary style that displays the symbol, you will either need to adjust the definition of \newfunc to use \ensuremath in the in the symbol field or you can add the -encapsulation with the field or you can add the +encapsulation with the glosssymbolfont attribute. -

    Now attribute. +

    Now \glslink{Znu}{Z_\nu} can simply be replaced with \glssymbol{Znu} (no parameter is required in this case). For the other cases, where the parameter is different from that given in the text field (which is + id="dx1-192052"> field (which is obtained from the name), you can use ), you can use \glsxtrfmt. For example, . For example, \glslink{Gamma}{\Gamma(x+1)} can now be replaced with:

    -\glsxtrfmt{Gamma}{x+1}
    This effectively works like \glslink but omits the post-link hook. (See the glossaries-extra user manual for further details.) -

    Don’t use

    Don’t use \glsxtrfmt within the argument of another within the argument of another \glsxtrfmt command (or inside any other command (or inside any other link text).
    -

    -

    Similarly ).

    +

    +

    Similarly \glslink{Gamma}{\Gamma(\alpha)} can now be replaced with:

    -\glsxtrfmt{Gamma}{\alpha}
    Note that it’s still possible to use:
    \glssymbol{Gamma}[(\alpha)]
    You may prefer to define a helper command that makes it easier to switch between your preferred method. For example: -
    +
     \newcommand*{\Fn}[3][]{\glssymbol[#1]{#2}[(#3)]}
    -
    -

    or:

    +
    +

    or:

    \newcommand*{\Fn}[3][]{\newcommand*{\Fn}[3][]{\glsxtrfmt[#1]{#2}{#3}}
    -

    bib2glsIf you want to convert this example so that it works with If you want to convert this example so that it works with bib2gls, first convert it to use + id="dx1-192063">, first convert it to use glossaries-extra (as described above), and then follow the instructions from sampleEq.tex. The convertgls2bib application recognises application recognises \newcommand so it will be able to parse the custom \newfunc commands. -

    Note that

    Note that bib2gls allows you to separate the locations in the allows you to separate the locations in the number list into different groups according to -the counter used for the location. This can be done with the into different groups according to +the counter used for the location. This can be done with the loc-counters resource option. It’s also possible to + id="dx1-192067"> resource option. It’s also possible to identify primary formats (such as hyperbf used in this example) using the used in this example) using the primary-location-formats option. + id="dx1-192069"> option. The primary locations can then be given a more prominent position in the number list. See the . See the bib2gls user + id="dx1-192071"> user manual for further details. -

    + id="x1-192072r14"> +

    🔗sampleSec.tex

    -

    This document also illustrates how to change the location to something other than the page number. In this +

    This document also illustrates how to change the location to something other than the page number. In this case, the section counter is used. This example adds the glossary to the table of contents, so an extra LaTeX run is required: -

    
    +

    
        
    pdflatex sampleSec
    makeglossaries sampleSec
    pdflatex sampleSec @@ -31958,87 +33483,87 @@ LaTeX run is required: Note that there are conflicting location formats, which trigger a warning from makeindex: + id="dx1-193001">:

    -
    +
     ## Warning (input = sampleSec.glo, line = 6; output =
    - 
    sampleSec.gls, line = 9): - 
       -- Conflicting entries: multiple encaps for the same page - 
    under same key. - 
    ## Warning (input = sampleSec.glo, line = 2; output = - 
    sampleSec.gls, line = 10): - 
       -- Conflicting entries: multiple encaps for the same page - 
    under same key. -
    -

    This is the result of indexing an entry multiple times for the same +sampleSec.gls, line = 9): +   -- Conflicting entries: multiple encaps for the same page +under same key. +## Warning (input = sampleSec.glo, line = 2; output = +sampleSec.gls, line = 10): +   -- Conflicting entries: multiple encaps for the same page +under same key. +

    +

    This is the result of indexing an entry multiple times for the same location19.1 +href="#fn1x18" id="fn1x18-bk">18.1 with different values of the format key. In this case, it’s caused by three references to the key. In this case, it’s caused by three references to the ident entry in section 2.1:

    -
    +
     \gls[format=hyperit]{ident}
    - 
    \glspl{ident} % default format=glsnumberformat - 
    \gls*[format=hyperbf]{ident} -
    -

    -

    If you use the +

    +

    If you use the makeglossaries Perl script it will detect the warnings in the Perl script it will detect the warnings in the makeindex transcript file and + id="dx1-193006"> transcript file and attempt to fix the conflict by removing entries from the glo file: + id="dx1-193007"> file:

    -
    +
     Multiple encaps detected. Attempting to remedy.
    - 
    Reading sampleSec.glo... - 
    Writing sampleSec.glo... - 
    Retrying -
    -

    (Range formats have highest precedence. The default +

    (Range formats have highest precedence. The default glsnumberformat has the lowest precedence.) -

    If you use has the lowest precedence.) +

    If you use makeglossaries-lite or call or call makeindex directly then the problem won’t be fixed and the + id="dx1-193010"> directly then the problem won’t be fixed and the glossary will end up with the rather odd number list for the identity matrix entry consisting of three references + id="dx1-193011"> for the identity matrix entry consisting of three references to section 2.1: the first in the default font, followed by bold (hyperbf) and then italic () and then italic (hyperit), + id="dx1-193013">), which results in 2.1, 2.1, 2.1. If you use makeglossaries then only the bold entry ( then only the bold entry (2.1) will be present. -

    If you switch to

    If you switch to xindy:

    + id="dx1-193015">:

    \usepackage[,style=altlist,toc,counter=section]{glossaries}
    then the conflict will be resolved using the number format attribute list order of priority. In this case, glsnumberformat has the highest priority. This means that only the upright medium weight entry (2.1) will be + id="dx1-193016"> has the highest priority. This means that only the upright medium weight entry (2.1) will be present. The simplest way of altering this is to provide your own custom format. For example:
    @@ -32056,11 +33581,11 @@ present. The simplest way of altering this is to provide your own custom format. class="cmtt-10">\newcommand*{\primary}[1]{\hyperit{#1}}
    \GlsAddXdyAttribute{primary} @@ -32071,35 +33596,35 @@ class="cmtt-10">\gls[format=primary] etc. This will give format=primary the highest + id="dx1-193020"> the highest priority. (It’s also better practice to provide this kind of semantic command.) -

    With

    With bib2gls, you can supply rules to deal with location format conflicts, as illustrated below. -

    , you can supply rules to deal with location format conflicts, as illustrated below. +

    bib2glsIn order to switch to In order to switch to bib2gls, first replace , first replace glossaries with glossaries-extra, and add the glossaries-extra, and add the record + id="dx1-193024"> package option. Remember that glossaries-extra has a different set of defaults and you may also want to patch the predefined base styles. For example:

    \usepackage[style=altlist,\usepackage[style=altlist,postdot,,stylemods,counter=section]
    glossaries-extra
    }
    -

    The entry definitions now need to be converted into

    The entry definitions now need to be converted into bib2gls format and saved in a format and saved in a bib file (say, + id="dx1-193026"> file (say, entries.bib). You can use convertgls2bib: + id="dx1-193027">: -

    
    +

    
        
    convertgls2bib --preamble-only sampleSec.tex entries.bib

    -

    Next replace

    Next replace \makeglossaries with:

    + id="dx1-193028"> with:

    -\GlsXtrLoadResources[src=entries]
    and remove all the \newglossaryentry commands. -

    Finally, replace

    Finally, replace \printglossaries with with \printunsrtglossaries. The document build is now: -

    
    + id="dx1-193031">. The document build is now:
    +

    
        
    pdflatex sampleSec
    bib2gls sampleSec
    pdflatex sampleSec @@ -32150,46 +33675,46 @@ class="cmtt-10">\printunsrtglossaries
    bib2gls warns about: + id="dx1-193032"> warns about:

    -
    +
     Warning: Entry location conflict for formats: hyperbf and hyperit
    - 
    Discarding: {ident}{}{section}{hyperbf}{2.1} - 
    Conflicts with: {ident}{}{section}{hyperit}{2.1} -
    -

    This means that it has discarded the bold location and kept the italic one. (As with +

    This means that it has discarded the bold location and kept the italic one. (As with makeglossaries, range + id="dx1-193033">, range formats have the highest priority and glsnumberformat has the lowest.) -

    It would be better if the conflict could be merged into a single location that was both bold and italic. To + id="dx1-193034"> has the lowest.) +

    It would be better if the conflict could be merged into a single location that was both bold and italic. To achieve this, it’s first necessary to define a command that produces this effect:

    \newcommand*{\hyperbfit}[1]{\textbf{\hyperit{#1}}}
    Now bib2gls needs to be invoked with the appropriate mapping with the needs to be invoked with the appropriate mapping with the --map-format or or -m + id="dx1-193038"> switch: -

    
    +

    
        
    bib2gls -m ”hyperbf:hyperbfit,hyperit:hyperbfit” sampleSec

    If you are using arara the directive should be:

    + id="dx1-193039"> the directive should be:

    % ] }
    -

    If you try out this example, notice the difference between

    If you try out this example, notice the difference between record=only and and record=nameref. If you use the + id="dx1-193041">. If you use the latter, the locations will now be the section titles rather than the section numbers. If you use the nameref setting you can customize the location by defining the command:

    -\glsxtrcounterlocfmt{location}{title}
    -

    In this case the counter is section, so the command should be

    In this case the counter is section, so the command should be \glsxtrsectionlocfmt. It takes two + id="dx1-193043">. It takes two arguments: the first is the location and the second is the title. For example:

    \newcommand*{\newcommand*{\glsxtrsectionlocfmt}[2]{\S#1 #2} @@ -32254,32 +33779,33 @@ class="cmtt-10"> #2}
    (The only command of this type that is defined by default is the one for the equation counter, -\glsxtrequationlocfmt.) Make sure that you have at least version 1.42 of .) Make sure that you have at least version 1.42 of glossaries-extra. -

    +

    -

    Top

    19.4

    Top

    18.4 Multiple Glossaries

    -

    See also

    See also sampleSort.tex in §19.5 §??sec:samplessort Sorting, which has three glossaries. -

    + id="x1-194001r15"> +

    🔗sampleNtn.tex

    -

    This document illustrates how to create an additional glossary type. This example adds the glossary to the table +

    This document illustrates how to create an additional glossary type. This example adds the glossary to the table of contents, so an extra LaTeX run is required: -

    
    +

    
        
    pdflatex sampleNtn
    makeglossaries sampleNtn
    pdflatex sampleNtn @@ -32289,39 +33815,41 @@ of contents, so an extra LaTeX run is required: Note that if you want to call makeindex explicitly instead of using the explicitly instead of using the makeglossaries or or makeglossaries-lite + id="dx1-195003"> scripts then you need to call makeindex twice: + id="dx1-195004"> twice:

      -
    1. Create the main glossary (all on one line): -

      
      +
    2. +

      Create the main glossary (all on one line): +

      
            
      makeindex -s sampleNtn.ist -t sampleNtn.glg -o sampleNtn.gls sampleNtn.glo

    3. -
    4. Create the secondary glossary (all on one line): -

      
      +
    5. +

      Create the secondary glossary (all on one line): +

      
            
      makeindex -s sampleNtn.ist -t sampleNtn.nlg -o sampleNtn.not sampleNtn.ntn
      -
      -

    -

    This document creates a new glossary using:

    +
    +

    +

    This document creates a new glossary using:

    \newglossary[nlg]{notation}{not}{ntn}{Notation}
    This defines a glossary that can be identified with the label glossaries package needs to know the input and output files required by makeindex or or xindy. -

    (The optional argument is the file extension of the indexing transcript file, which . +

    (The optional argument is the file extension of the indexing transcript file, which glossaries doesn’t need to know about, but it writes the information to the aux file for the benefit of file for the benefit of makeglossaries and + id="dx1-195013"> and makeglossaries-lite.) -

    If you switch to a different indexing option then these file extensions aren’t required, in which case it’s + id="dx1-195014">.) +

    If you switch to a different indexing option then these file extensions aren’t required, in which case it’s simpler to use the starred form:

    \newglossary*{notation}{Notation}
    -

    This example uses a label prefixing system19.2 to +

    This example uses a label prefixing system18.2 to differentiate between the different types of entries. For example, the term “set” is defined as:

    -
    +
     \newglossaryentry{gls:set}{name=set,
    - 
    description={A collection of distinct objects}} -
    -

    and the set notation is defined as: +description={A collection of distinct objects}} +

    +

    and the set notation is defined as:

    -
    +
     \newglossaryentry{not:set}{type=notation,
    - 
    name={\ensuremath{\mathcal{S}}}, - 
    description={A \gls{gls:set}},sort={S}} -
    -

    Notice that the latter description contains +

    Notice that the latter description contains \gls. This means you shouldn’t use \glsdesc with this entry + id="dx1-195018"> with this entry otherwise you will end up with nested links. -



    glossaries-extraThe glossaries-extra package provides a command for use in within field values to prevent nested link text:

    + id="dx1-195019">:

    -\glsxtrp{field}{label}
    -
    There are convenient shortcuts for common fields: There are convenient shortcuts for common fields: \glsps{label} (for the short field) and field) and \glspt{label} (for the text field). So the set notation definition can be modified:
    + id="dx1-195024"> field). So the set notation definition can be modified:
    \newglossaryentry{not:set}{type=notation, @@ -32424,30 +33952,30 @@ class="cmtt-10">\newglossaryentry{not:set}{type=notation, class="cmtt-10">name={\ensuremath{\mathcal{S}}},
    description={A  \glspt{gls:set}},sort=S}
    This will stop the inner reference from causing interference if you use \glsdesc. It will also suppress indexing + id="dx1-195026">. It will also suppress indexing within the glossary but will have a hyperlink (if hyperref is used). -

    The

    The glossaries-extra package provides a way of defining commands like \gls that automatically insert a prefix. For example:

    -\glsxtrnewgls{not:}{\sym} -
    \glsxtrnewglslike{gls:}{\term}{\termpl}{\Term}{\Termpl}
    (there’s no point providing commands for plural or case-changing with symbols). Now \sym{set} and \gls{gls:set} can be replaced with \term{set}. -

    bib2glsThese two commands are primarily provided for the benefit of These two commands are primarily provided for the benefit of bib2gls as the information is written + id="dx1-195030"> as the information is written to the aux file. This allows file. This allows bib2gls to recognise the custom commands if they have been used in the to recognise the custom commands if they have been used in the bib files. -When combined with files. +When combined with label-prefix and and ext-prefixes (see below) this makes it much simpler to change the + id="dx1-195035"> (see below) this makes it much simpler to change the prefixes if necessary. -

    If you want to convert this document to use

    If you want to convert this document to use bib2gls, remember that you need the , remember that you need the record or or record=nameref + id="dx1-195038"> option. For example:

    \usepackage[\usepackage[record,,postdot,,stylemods]{glossaries-extra}
    As with earlier examples, convertgls2bib can be used to convert the entry definitions into + id="dx1-195039"> can be used to convert the entry definitions into the required bib format. You may prefer to split the entries into separate files according to + id="dx1-195040"> format. You may prefer to split the entries into separate files according to type.19.3 +href="#fn3x18" id="fn3x18-bk">18.3
    This is useful if you want to reuse a large database of entries across multiple documents as it doesn’t lock you into using a specific glossary. For example: -

    
    +

    
        
    convertgls2bib --split-on-type --preamble-only sampleNtn.tex entries.bib

    This will create a file called entries.bib that contains the entries that didn’t have a type assigned in the + id="dx1-195043"> assigned in the original file, such as:

    -@entry{gls:set,
     }
    It will also create a file called notation.bib that contains the entries that had the type set to set to notation in the original file, such as:
    -@entry{not:set,
       description = {A  \glspt{gls:set}}
    }
    Note that the type field has been removed. The above entry in the field has been removed. The above entry in the notation.bib file references a term in the entries.bib file. It’s possible to strip all the prefixes from the bib files and get files and get bib2gls to + id="dx1-195050"> to automatically insert them. In which case, this cross-reference needs adjusting to indicate that it’s -referring to an entry in another file. This can be done with one of the special extn. prefixes:
    -@entry{set, @@ -32605,10 +34133,10 @@ class="cmtt-10">  description = {A  \glspt{{ext1.set}}
    }
    The corresponding term in the entries.bib file is now:
    -@entry{set, @@ -32643,76 +34171,76 @@ class="cmtt-10"> objects} class="cmtt-10">}
    -

    Now you can replace

    Now you can replace \makeglossaries with:

    -\GlsXtrLoadResources[[src={entries},={entries},label-prefix={gls:}] -
    \GlsXtrLoadResources[[src={notation},={notation},type=notation,
      label-prefix={not:},={not:},ext-prefixes={gls:}]
    Remove all the \newglossaryentry definitions and replace \printglossaries with \printglossaries with \printunsrtglossaries. -

    Regardless of how many resource sets the document contains, only one . +

    Regardless of how many resource sets the document contains, only one bib2gls call is required: -

    
    + id="dx1-195060"> call is required:
    +

    
        
    pdflatex sampleNtn
    bib2gls sampleNtn
    pdflatex sampleNtn

    -

    You may notice that the ordering in the notations list has changed from the original. This is because the +

    You may notice that the ordering in the notations list has changed from the original. This is because the sort field was automatically removed by field was automatically removed by convertgls2bib, so the entries are now sorted according to the , so the entries are now sorted according to the name -field (since they are defined with +field (since they are defined with @entry). You can use your text editor’s search and replace function to replace -all instances of ). You can use your text editor’s search and replace function to replace +all instances of @entry with with @symbol in the in the notations.bib file so that, for example, the set definition becomes:

    -@symbol{set,
       description = {A  \glspt{{ext1.set}}
    }
    -
    Now these Now these @symbol entries will be sorted according to their label. (The original label in the entries will be sorted according to their label. (The original label in the bib file, not the + id="dx1-195070"> file, not the prefixed label.) This will put them in the same order as the original document. (See the “Examples” chapter of the bib2gls user manual for examples of varying the sorting and also user manual for examples of varying the sorting and also bib2gls gallery: sorting.) + id="x1-195072r16"> -

    +

    🔗sample-dual.tex

    -

    This document illustrates how to define an entry that both appears in the list of acronyms and in the main +

    This document illustrates how to define an entry that both appears in the list of acronyms and in the main glossary. To create the document do: -

    
    +

    
        
    pdflatex sample-dual
    makeglossaries sample-dual
    pdflatex sample-dual @@ -32766,37 +34294,37 @@ glossary. To create the document do:
    This defines a custom command \newdualentry that defines two entries at once (a normal entry and + id="dx1-196001"> that defines two entries at once (a normal entry and an abbreviation). It uses \glsadd to ensure that if one is used then the other is automatically + id="dx1-196002"> to ensure that if one is used then the other is automatically indexed:

    -
    +
     \newcommand*{\newdualentry}[5][]{%
    - 
      % main entry: - 
      \newglossaryentry{main-#2}{name={#4},% - 
      text={#3\glsadd{#2}},% - 
      description={#5},% - 
      #1% additional options for main entry - 
      }% - 
      % abbreviation: - 
      \newacronym{#2}{#3\glsadd{main-#2}}{#4}% - 
    } -
    -

    A sample dual entry is defined with this command: +  % main entry: +  \newglossaryentry{main-#2}{name={#4},% +  text={#3\glsadd{#2}},% +  description={#5},% +  #1% additional options for main entry +  }% +  % abbreviation: +  \newacronym{#2}{#3\glsadd{main-#2}}{#4}% +} +

    +

    A sample dual entry is defined with this command:

    -
    +
     \newdualentry{svm}% label
    - 
      {SVM}% abbreviation - 
      {support vector machine}% long form - 
      {Statistical pattern recognition technique}% description -
    -

    This defines an acronym with the label +

    This defines an acronym with the label svm that can be referenced with \gls{svm} but it also defines an entry with the label \gls but it’s automatically added from the \glsadd{main-svm} in the short form of svm. -

    For this trivial document, this kind of dual entry is redundant and unnecessarily leads the +

    For this trivial document, this kind of dual entry is redundant and unnecessarily leads the reader down a trail, first to the list of acronyms and from there the reader then has to go to the main glossary to look up the description. It’s better to simply include the description in the list of acronyms. -

    bib2glsIf you want to switch over to If you want to switch over to bib2gls, first change to , first change to glossaries-extra:

    \usepackage[\usepackage[record,,postdot,,stylemods,acronym]{glossaries-extra}
    Next, the definition needs to be converted to the bib format required by format required by bib2gls. If you do: -

    
    + id="dx1-196006">. If you do:
    +

    
        
    convertgls2bib --preamble-only sample-dual.tex entries.bib

    then convertgls2bib will report the following: + id="dx1-196007"> will report the following:

    -
    +
     Overriding default definition of \newdualentry with custom
    - 
    definition. (Change \newcommand to \providecommand if you want - 
    \newdualentry[options]{label}{short}{long}{description} - 
    converted to @dualabbreviationentry.) -
    -

    This is because +

    This is because convertgls2bib has its own internal definition of has its own internal definition of \newdualentry, but if it encounters a new definition that will override its default. If you want to retain convertgls2bib’s definition + id="dx1-196009">’s definition (recommended) then just replace \newcommand with \providecommand in the document source and rerun convertgls2bib. -

    With . +

    With \providecommand, the new entries.bib file created by convertgls2bib contains:

    + id="dx1-196011"> contains:

    -@dualabbreviationentry{svm,
     }
    If \newcommand is retained, it will instead contain:
    -@entry{main-svm,
      {SVM\glsadd{svm}}
    }
    -
    @acronym{svm,
     }
    In the first case, bib2gls creates two linked entries using its primary-dual mechanism. In the second case, + id="dx1-196015"> creates two linked entries using its primary-dual mechanism. In the second case, bib2gls creates two entries that simply reference each other. -

    Assuming that your entries.bib file just contains creates two entries that simply reference each other. +

    Assuming that your entries.bib file just contains @dualabbreviationentry, now replace + id="dx1-196017">, now replace \makeglossaries with:

    \GlsXtrLoadResources[\GlsXtrLoadResources[src=entries,% entries.bib
       type=acronym,=acronym,dual-type=main,=main,dual-prefix={main-}]
    -

    Then remove the definition of

    Then remove the definition of \newdualentry and the entry definition. Finally, replace \printglossaries -with \printunsrtglossaries. The document build is: -

    
    + id="dx1-196022">. The document build is:
    +

    
        
    pdflatex sample-dual
    bib2gls sample-dual
    pdflatex sample-dual

    -

    If, instead, your entries.bib file contains separate

    If, instead, your entries.bib file contains separate @entry and and @acronym, then you need:

    + id="dx1-196024">, then you need:

    -\setabbreviationstyle[acronym]{long-short} -
    \GlsXtrLoadResources[[src=entries]
    If you need number lists, the document build is now -

    
    + id="dx1-196028">s, the document build is now
    +

    
        
    pdflatex sample-dual
    bib2gls sample-dual
    pdflatex sample-dual @@ -33034,40 +34562,40 @@ href="#glo:numberlist">number listbib2gls complains about the use of complains about the use of \glsadd within the within the short and and text fields as + id="dx1-196032"> fields as this can be problematic. (The extra bib2gls and LaTeX calls are to ensure the and LaTeX calls are to ensure the number list is + id="dx1-196034"> is up to date for the main-svm entry, which can only be indexed with \glsadd after svm has been defined.) -

    Dual entries make much more sense when one entry is for a glossary with the description displayed but +

    Dual entries make much more sense when one entry is for a glossary with the description displayed but no number list, and the other is for the index without the description but with a , and the other is for the index without the description but with a number list. -This can be created with by replacing . +This can be created with by replacing @dualabbreviationentry with with @dualindexabbreviation: + id="dx1-196038">:

    -@dualindexabbreviation{svm,
      machine}
    }
    -
    This can be mixed with This can be mixed with @index terms for example:
    + id="dx1-196040"> terms for example:
    -@index{machlearn,
     \documentclass{article}

    \usepackage[[record,,postdot,
     nostyles, nostyles,stylemods={={bookindex,list},% only styles
     acronym]{glossaries-extra}
    -
    \setabbreviationstyle{long-short-desc} -
    \GlsXtrLoadResources[[src=entries,% entries.bib
      dual-type=acronym,
      label-prefix={idx.},},dual-prefix={},
      combine-dual-locations={primary}]
    -
    \glsxtrnewglslike{idx.}{ \idx{machlearn}.
    -
    \printunsrtglossary[type=main,style=altlist] -
    \printunsrtglossary[style=bookindex,title={Index}]
    \end{document} @@ -33202,18 +34730,18 @@ class="cmtt-10">\end{document}
    See the bib2gls manual for further details. + id="dx1-196052"> manual for further details. -

    + id="x1-196053r17"> +

    🔗sample-langdict.tex

    -

    This document illustrates how to use the glossaries package to create English to French and French to English +

    This document illustrates how to use the glossaries package to create English to French and French to English dictionaries. To create the document do: -

    
    +

    
        
    pdflatex sample-langdict
    makeglossaries sample-langdict
    pdflatex sample-langdict @@ -33223,22 +34751,22 @@ dictionaries. To create the document do:
    This example uses the nomain package option to prevent the creation of the package option to prevent the creation of the main glossary. This means that the document must provide its own glossaries:

    -
    +
     \newglossary[glg]{english}{gls}{glo}{English to French}
    - 
    \newglossary[flg]{french}{flx}{flo}{French to English} -
    -

    This means that if you want to call +

    This means that if you want to call makeindex explicitly you need to take these new extensions into + id="dx1-197002"> explicitly you need to take these new extensions into account: -

    
    +

    
        
    makeindex -s sample-langdict.ist -t sample-langdict.glg -o sample-langdict.gls sample-langdict.glo
    makeindex -s sample-langdict.ist -t sample-langdict.flg -o sample-langdict.flx sample-langdict.flo
    @@ -33248,14 +34776,14 @@ entries:

    -
    +
     \newcommand*{\newword}[4]{%
    - 
      \newglossaryentry{en-#1}{type=english,name={#2},description={#3 #4}}% - 
      \newglossaryentry{fr-#1}{type=french,name={#3 #4},text={#4},sort={#4}, - 
        description={#2}}% - 
    } -
    -

    This has the syntax:

    +  \newglossaryentry{en-#1}{type=english,name={#2},description={#3 #4}}% +  \newglossaryentry{fr-#1}{type=french,name={#3 #4},text={#4},sort={#4}, +    description={#2}}% +} +
    +

    This has the syntax:

    \newword{label⟩ (for the French term). So -
    +
     \newword{cat}{cat}{le}{chat}
    -
    -

    is equivalent to: +

    +

    is equivalent to:

    -
    +
     \newglossaryentry{en-cat}{type=english,name={cat},description={le chat}}
    - 
    \newglossaryentry{fr-cat}{type=french,name={le chat},sort={chat}, - 
      description={cat}} -
    -

    -

    Unlike the previous example ( +

    +

    Unlike the previous example (sample-dual.tex), there’s no link between these two entries. If the document only uses english glossary but the fr-cat entry won’t appear in the french one. -

    bib2glsIf you want to switch to If you want to switch to bib2gls then you first need to convert the document so that it + id="dx1-197004"> then you first need to convert the document so that it uses glossaries-extra, but include the glossaries-extra, but include the prefix option to ensure that option to ensure that glossaries-prefix is also loaded: + id="dx1-197006"> is also loaded:

    \usepackage[\usepackage[record,,prefix,,postdot,,stylemods,nomain]{glossaries-extra English}
    Next the entries need to be converted to the bib format required by format required by bib2gls: -

    
    + id="dx1-197008">:
    +

    
        
    convertgls2bib --only-preamble sample-langdict.tex entries.bib

    This creates the file entries.bib that contains entries defined like:

    -@entry{en-cat,
      {english}
    }
    -
    @entry{fr-cat,
     }
    (Note that the sort field has been omitted.) -

    This would be more flexible, and much briefer, if these entries were defined using field has been omitted.) +

    This would be more flexible, and much briefer, if these entries were defined using bib2gls’s dual entry + id="dx1-197012">’s dual entry system combined with the glossaries-prefix package:

    + id="dx1-197013"> package:

    -@dualentry{cat,
      {cat},
      prefix = {le},
      prefixplural = {les}
    }
    Similarly for the “chair” entry:
    -@dualentry{chair,
      {chair},
      prefix = {la},
      prefixplural = {les}
    }
    -

    With

    With @dualentry, the English and French terms are now automatically linked from , the English and French terms are now automatically linked from bib2gls’s point of view. + id="dx1-197021">’s point of view. If only one is referenced in the document, the other will also be added by default. -

    Now that the determiner has been moved out of the description, it won’t show in the glossary. However, it’s +

    Now that the determiner has been moved out of the description, it won’t show in the glossary. However, it’s possible to include it by providing a command to encapsulate the description (which can also apply the language change as well).

    -\GlsXtrLoadResources[[src=entries,% entries.bib
      append-prefix-field={space},
      category={same as type}, type},dual-category={same as type},
      label-prefix={en-},={en-},dual-prefix={fr-},
      type=english,=english,dual-type=french,
      sort=en,=en,dual-sort=fr] @@ -33551,68 +35079,68 @@ class="cmtt-10">=fr] class="cmtt-10">\newcommand{\FrEncap}[1]{%
     \foreignlanguage{french}{\glsentryprefix{\glscurrententrylabel}#1}}
    \newcommand{\EnEncap}[1]{\foreignlanguage{english}{#1}}
    -
    \glssetcategoryattribute{english}{glossnamefont}{EnEncap} -
    \glssetcategoryattribute{english}{glossdescfont}{FrEncap} -
    \glssetcategoryattribute{french}{glossnamefont}{FrEncap} -
    \glssetcategoryattribute{french}{glossdescfont}{EnEncap}
    -

    Remember to remove

    Remember to remove \makeglossaries, the definition of \newword and the entry definitions from the document preamble, and replace \printglossary with:

    -\printunsrtglossary + id="dx1-197039">
    -

    Other refinements that you might like to make include using

    Other refinements that you might like to make include using \glsxtrnewglslike so you don’t have to worry + id="dx1-197040"> so you don’t have to worry about the label prefix (“en-” and “fr-”). -

    + id="x1-197041r18"> +

    🔗sample-index.tex

    -

    This document uses the

    This document uses the glossaries package to create both a glossary and an index. This requires two makeglossaries (or (or makeglossaries-lite) calls to ensure the document is up to date: -

    
    + id="dx1-198002">) calls to ensure the document is up to date:
    +

    
        
    pdflatex sample-index
    makeglossaries sample-index
    pdflatex sample-index @@ -33620,24 +35148,24 @@ class="cmtt-10">makeglossaries-lite
    pdflatex sample-index

    -

    +

    -

    Top

    19.5

    Top

    18.5 Sorting

    + id="x1-199001r19"> -

    +

    🔗samplePeople.tex

    -

    This document illustrates how you can hook into the standard sort mechanism to adjust the way the sort key is +

    This document illustrates how you can hook into the standard sort mechanism to adjust the way the sort key is set. This requires an additional run to ensure the table of contents is up-to-date: -

    
    +

    
        
    pdflatex samplePeople
    makeglossaries samplePeople
    pdflatex samplePeople @@ -33648,29 +35176,29 @@ This provides two commands for typesetting a name:

    -
    +
     \newcommand{\sortname}[2]{#2, #1}
    - 
    \newcommand{\textname}[2]{#1 #2} -
    -

    where the first argument contains the forenames and the second is the surname. The first command is the one +\newcommand{\textname}[2]{#1 #2} +

    +

    where the first argument contains the forenames and the second is the surname. The first command is the one required for sorting the name and the second is the one required for displaying the name in the document. A synonym is then defined:

    -
    +
     \let\name\textname
    -
    -

    This command defaults to the display name command ( +

    This command defaults to the display name command (\textname) but is temporarily redefined to the sort name command (\sortname) within the sort field assignment hook:

    + id="dx1-200001"> field assignment hook:

    \renewcommand{\glsprestandardsort}[3]{%
      \let\name\textname
     \glsdosanitizesort + id="dx1-200003">
    }
    @@ -33699,25 +35227,25 @@ class="cmtt-10"> description={\nopostdesc}}
    Since \name is temporarily changed while the sort key is being assigned, the sort value for this entry ends up + id="dx1-200004"> key is being assigned, the sort value for this entry ends up as “Bloggs, Joe”, but the name appears in the document as “Joe Bloggs”. -

    bib2glsIf you want to use If you want to use bib2gls, you first need to convert the document to use , you first need to convert the document to use glossaries-extra but make -sure you include the record option:

    + id="dx1-200007"> option:

    \usepackage[\usepackage[record,,stylemods,style=listgroup]{glossaries-extra}
    Next it’s necessary to convert the entry definitions to the bib format required by format required by bib2gls. You can simply + id="dx1-200009">. You can simply do: -

    
    +

    
        
    convertgls2bib --preamble-only samplePeople people.bib

    @@ -33739,9 +35267,9 @@ class="cmtt-10">people.bib that contains definitions like:

    -@entry{joebloggs,
       description = {\nopostdesc}
    } @@ -33761,30 +35289,30 @@ class="cmtt-10">}
    However, you may prefer to use the --index-conversion (-i) switch: -

    
    +

    
        
    convertgls2bib -i --preamble-only samplePeople people.bib

    This will discard the description field and use field and use @index instead of instead of @entry if the if the description is either empty or + id="dx1-200015"> is either empty or simply set to \nopostdesc or or \glsxtrnopostpunc. The . The people.bib file now contains definitions like:

    -@index{joebloggs,
     }
    Regardless of which approach you used to create the bib file, you now need to edit it to provide a definition of + id="dx1-200019"> file, you now need to edit it to provide a definition of the custom \name command for bib2gls’s use:
    + id="dx1-200020">’s use:
    -@preamble{"\providecommand{\name}[2]{#2, #1}"}
    Note the use of \providecommand instead of \newcommand. -

    In the document (

    In the document (samplePeople.tex) you now need to delete \makeglossaries, the definitions of

    \newcommand{\name}[2]{#1 #2} -
    \GlsXtrLoadResources[[src=people]
    Next, use your text editor’s search and replace function to subsitute all instances of \glsentrytext in the -chapter headings with \glsfmttext. For example:
    + id="dx1-200025">. For example:
    \chapter{{\glsfmttext{joebloggs}}
    Finally, replace \printunsrtglossaries with:
    -\printunsrtglossaries + id="dx1-200028">
    The document build is now: -

    
    +

    
        
    pdflatex samplePeople
    bib2gls samplePeople
    pdflatex samplePeople @@ -33871,44 +35399,44 @@ The third LaTeX call is required to ensure that the PDF bookmarks are up aren’t defined until after the bib2gls run (which is why you have to use run (which is why you have to use \glsfmttext instead of + id="dx1-200030"> instead of \glsentrytext). -

    This again leads to a list sorted by surname. The reason this works is because

    This again leads to a list sorted by surname. The reason this works is because bib2gls only sees the + id="dx1-200031"> only sees the definition of \name provided in \name provided in @preamble, but the document uses the definition of , but the document uses the definition of \name provided before \GlsXtrLoadResources. The use of \providecommand in in @preamble prevents prevents \name from being redefined within the document. -

    See also the “Examples” chapter of the

    See also the “Examples” chapter of the bib2gls user manual, which provides another “people” + id="dx1-200035"> user manual, which provides another “people” example. -

    + id="x1-200036r20"> +

    🔗sampleSort.tex

    -

    This is another document that illustrates how to hook into the standard sort mechanism. An additional run is +

    This is another document that illustrates how to hook into the standard sort mechanism. An additional run is required to ensure the table of contents is up-to-date: -

    
    +

    
        
    pdflatex sampleSort
    makeglossaries sampleSort
    pdflatex sampleSort @@ -33922,12 +35450,12 @@ class="cmtt-10">notation
    ), so if you want to use makeindex explicitly you will need to have three explicitly you will need to have three makeindex calls with the appropriate file + id="dx1-201002"> calls with the appropriate file extensions: -

    
    +

    
        
    pdflatex sampleSort
    makeindex -s sampleSort.ist -t sampleSort.alg -o sampleSort.acr sampleSort.acn
    makeindex -s sampleSort.ist -t sampleSort.glg -o sampleSort.gls sampleSort.glo @@ -33941,42 +35469,42 @@ extensions: It’s much simpler to just use makeglossaries or or makeglossaries-lite. -

    In this example, the sort hook is adjusted to ensure the list of notation is sorted according to the order of + id="dx1-201004">. +

    In this example, the sort hook is adjusted to ensure the list of notation is sorted according to the order of definition. A new counter is defined to keep track of the entry number:

    -
    +
     \newcounter{sortcount}
    -
    -

    The sort hook is then redefined to increment this counter and assign the sort key to that numerical +

    +

    The sort hook is then redefined to increment this counter and assign the sort key to that numerical value, but only for the notation glossary. The other two glossaries have their sort keys assigned as normal:

    -
    +
     \renewcommand{\glsprestandardsort}[3]{%
    - 
      \ifdefstring{#2}{notation}% - 
      {% - 
         \stepcounter{sortcount}% - 
         \edef#1{\glssortnumberfmt{\arabic{sortcount}}}% - 
      }% - 
      {% - 
         \glsdosanitizesort - 
      }% - 
    } -
    -

    This means that +

    This means that makeindex will sort the notation in numerical order. -


    will sort the notation in numerical order. +


    glossaries-extraIf you want to convert this document to use glossaries-extra, a much simpler approach is available with its hybrid method. First change the package loading line to:

    \usepackage[\usepackage[postdot,,stylemods,acronym]{glossaries-extra}
    Either remove \setacronymstyle and replace all instances of \newacronym with \newacronym with \newabbreviation or + id="dx1-201006"> or replace: -
    +
     \setacronymstyle{long-short}
    -
    -

    with:

    +
    +

    with:

    -\setabbreviationstyle[acronym]{long-short}
    -

    The custom counter and redefinition of

    The custom counter and redefinition of \glsprestandardsort can now be removed. The file extensions for the custom notation glossary are no longer relevant so the glossary definition can be changed to: @@ -34024,11 +35552,11 @@ class="cmtt-10">{notation}{Notation}

    The \makeglossaries command now needs to be adjusted to indicate which glossaries need to be processed by + id="dx1-201008"> command now needs to be adjusted to indicate which glossaries need to be processed by makeindex:
    + id="dx1-201009">:
    \makeglossaries[main,acronym]
    Finally, \printglossaries needs to be replaced with:
    + id="dx1-201010"> needs to be replaced with:
    \printglossary @@ -34054,22 +35582,22 @@ class="cmtt-10">notation glossary, which hasn’t been listed in the class="cmtt-10">\makeglossaries, must be displayed with \printnoidxglossary. -

    This means that . +

    This means that makeindex only needs to process the only needs to process the main and acronym glossaries. No actual sorting is performed for the notation glossary because, when used with sort=def, \printnoidxglossary simply iterates over the list of entries that have been indexed. -

    The document build doesn’t need the third LaTeX call now (since none of the glossaries extend beyond a +

    The document build doesn’t need the third LaTeX call now (since none of the glossaries extend beyond a page break): -

    
    +

    
        
    pdflatex sampleSort
    makeglossaries sampleSort @@ -34080,44 +35608,44 @@ page break): This time makeglossaries will include the message: + id="dx1-201014"> will include the message:

    -
    +
     only processing subset 'main,acronym'
    -
    -

    This means that although +

    This means that although makeglossaries has noticed the has noticed the notation glossary, it will be skipped. -

    If you are explicitly calling

    If you are explicitly calling makeindex then you need to drop the call for the then you need to drop the call for the notation glossary: -

    
    +

    
        
    pdflatex sampleSort
    makeindex -s sampleSort.ist -t sampleSort.alg -o sampleSort.acr sampleSort.acn
    makeindex -s sampleSort.ist -t sampleSort.glg -o sampleSort.gls sampleSort.glo
    pdflatex sampleSort

    -

    bib2glsIf you prefer to use If you prefer to use bib2gls, the package loading line needs to be changed to:

    + id="dx1-201018">, the package loading line needs to be changed to:

    \usepackage[\usepackage[record,,postdot,,stylemods,acronym]{glossaries-extra}
    Next the entry definitions need to be convert to the bib format required by format required by bib2gls. -

    For this example, it’s simpler to split the entries into different files according to the glossary type. This can + id="dx1-201020">. +

    For this example, it’s simpler to split the entries into different files according to the glossary type. This can be done with the --split-on-type or -t switch: -

    
    +

    
        
    convertgls2bib -t --preamble-only sampleSort.tex entries.bib

    This will create three files:

    +

    entries.bib

    which contains the entries that were defined with entries.bib

    +

    which contains the entries that were defined with \newglossaryentry. For example: -

    + id="dx1-201021">. For example:

    - @entry{gls:set,
     }
    +

    abbreviations.bib

    which contains the entries that were defined with abbreviations.bib

    +

    which contains the entries that were defined with \newacronym. For example: -

    + id="dx1-201023">. For example:

    - @acronym{zfc,
     }
    If you changed \newacronym to to \newabbreviation then then @abbreviation will be used instead: + id="dx1-201027"> will be used instead:
    - @abbreviation{zfc,
     }
    +

    notation.bib

    which contains the entries that were defined with notation.bib

    +

    which contains the entries that were defined with type=notation. For example: -

    + id="dx1-201029">=notation. For example:

    - @entry{not:set,
      {\mathcal{S}}
    }
    -
    You may prefer to replace You may prefer to replace @entry with with @symbol in this file.
    -

    in this file. +

    After the definition of the notation glossary (\newglossary), add:

    @@ -34282,52 +35813,52 @@ class="cmtt-10"> must be set first: -
    \setabbreviationstyle[acronym]{long-short} -
    \GlsXtrLoadResources[[src={entries,abbreviations}] -
    \GlsXtrLoadResources[[src={notation},% notation.bib
      type=notation,,sort=unsrt]
    Delete the remainder of the preamble (\makeglossaries and entry definitions). -

    Finally, replace the lines that display the glossaries with:

    +

    Finally, replace the lines that display the glossaries with:

    -\printunsrtglossaries + id="dx1-201039">
    The build process is now: -

    
    +

    
        
    pdflatex sampleSort
    bib2gls sampleSort
    pdflatex sampleSort

    -

    In this case, I have one resource command that processes two glossaries (

    In this case, I have one resource command that processes two glossaries (main and acronym) at the same time. The entries in these glossaries are ordered alphabetically. The second resource command processes the @@ -34335,39 +35866,39 @@ time. The entries in these glossaries are ordered alphabetically. The second res class="cmtt-10">notation glossary but the entries in this glossary aren’t sorted (and so will appear in the order of definition within the bib file). -

    See also file). +

    See also sampleNtn.tex, bib2gls gallery: sorting and the bib2gls user manual for more examples. -

    + id="dx1-201041"> user manual for more examples. +

    -

    Top

    19.6

    Top

    18.6 Child Entries

    -

    + id="x1-202001r21"> +

    🔗sample.tex

    -

    This document illustrates some of the basics, including how to create child entries that use the same name as +

    This document illustrates some of the basics, including how to create child entries that use the same name as the parent entry. This example adds the glossary to the table of contents and it also uses \glsrefentry, so an + id="dx1-203001">, so an extra LaTeX run is required: -

    
    -   
    pdflatex sample -
    makeglossaries sample +

    
        
    pdflatex sample +
    makeglossaries sample +
    pdflatex sample
    pdflatex sample

    @@ -34375,21 +35906,21 @@ You can see the difference between word and letter ordering if you add the packa class="cmss-10">order=letter. (Note + id="dx1-203002">. (Note that this will only have an effect if you use makeglossaries or or makeglossaries-lite. If you use . If you use makeindex + id="dx1-203005"> explicitly, you will need to use the -l switch to indicate letter ordering.) -

    One of the entries has its name encapsulated with a semantic command:

    + id="dx1-203006"> switch to indicate letter ordering.) +

    One of the entries has its name encapsulated with a semantic command:

    \newcommand{ language}}
    This means that this entry needs to have the sort key set otherwise key set otherwise makeindex will assign it + id="dx1-203008"> will assign it to the “symbol” letter group, since it starts with a backslash (which makeindex simply treats as + id="dx1-203009"> simply treats as punctuation). -

    The homograph entries “glossary” and “bravo” are defined as sub-entries that inherit the name from the +

    The homograph entries “glossary” and “bravo” are defined as sub-entries that inherit the name from the parent entry. The parent entry doesn’t have a description, but with the default nopostdot=false setting this will + id="dx1-203010"> setting this will lead to a spurious dot. This can be removed by adding \nopostdesc to the description, which suppresses the + id="dx1-203011"> to the description, which suppresses the post-description hook for that entry. -

    Since the child entries have the same name as the parent, this means that the child entries will have +

    Since the child entries have the same name as the parent, this means that the child entries will have duplicate sort values unless the default is changed with the sort key:

    + id="dx1-203012"> key:

    \newglossaryentry{glossary}{name=glossary,
     description={\nopostdesc
    },plural={glossaries}}

    \newglossaryentry{glossarycol}{
     description={collectionglossarylist before glossarycol, but both will come immediately after their parent glossary entry. -



    glossaries-extraIf you switch to using glossaries-extra, remember that the default package options are different:

    - -
    \usepackage[\usepackage[postdot,,stylemods,style=treenonamegroup,order=word,
    glossaries-extra
    }
    -

    You may now want to consider replacing

    You may now want to consider replacing \nopostdesc in the descriptions with in the descriptions with \glsxtrnopostpunc (using + id="dx1-203016"> (using your text editor’s search and replace function). This suppresses the post-description punctuation but not the category post-description hook. -

    You may have noticed that some of the descriptions include the plural form, but it’s not done very +

    You may have noticed that some of the descriptions include the plural form, but it’s not done very consistently. For example:

    -
    +
     \newglossaryentry{cow}{name=cow,
    - 
      plural=cows,% not required as this is the default - 
      user1=kine, - 
      description={(\emph{pl.}\ cows, \emph{archaic} kine) an adult - 
    female of any bovine animal} - 
    } -
    -

    which has the parenthetical material at the start of the description with emphasis, +  plural=cows,% not required as this is the default +  user1=kine, +  description={(\emph{pl.}\ cows, \emph{archaic} kine) an adult +female of any bovine animal} +} +

    +

    which has the parenthetical material at the start of the description with emphasis,

    -
    +
     \newglossaryentry{bravocry}{
    - 
      description={cry of approval (pl.\ bravos)}, - 
      sort={1}, - 
      parent={bravo} - 
    } -
    -

    which has the parenthetical material at the end of the description without emphasis even though it’s a regular +  description={cry of approval (pl.\ bravos)}, +  sort={1}, +  parent={bravo} +} +

    +

    which has the parenthetical material at the end of the description without emphasis even though it’s a regular plural,

    -
    +
     \newglossaryentry{bravoruffian}{
    - 
      description={hired ruffian or killer (pl.\ bravoes)}, - 
      sort={2}, - 
      plural={bravoes}, - 
      parent=bravo} -
    -

    which has the parenthetical material at the end of the description without emphasis, and +  description={hired ruffian or killer (pl.\ bravoes)}, +  sort={2}, +  plural={bravoes}, +  parent=bravo} +

    +

    which has the parenthetical material at the end of the description without emphasis, and

    -
    +
     \newglossaryentry{glossary}{name=glossary,
    - 
      description={\nopostdesc}, - 
      plural={glossaries}} -
    -

    which doesn’t show the plural in the description. -

    With +

    which doesn’t show the plural in the description. +

    With glossaries-extra, you can remove this parenthetical material and implement it using the category post-description hook instead. For example, the above definitions become:

    -
    +
     \newglossaryentry{cow}{name=cow,
    - 
      user1=kine, - 
      description={an adult female of any bovine animal} - 
    } - 
    \newglossaryentry{bravocry}{ - 
      description={cry of approval}, - 
      sort={1}, - 
      parent={bravo} - 
    } - 
    \newglossaryentry{bravoruffian}{ - 
      description={hired ruffian or killer}, - 
      sort={2}, - 
      plural={bravoes}, - 
      parent=bravo} -
    -

    +  user1=kine, +  description={an adult female of any bovine animal} +} +\newglossaryentry{bravocry}{ +  description={cry of approval}, +  sort={1}, +  parent={bravo} +} +\newglossaryentry{bravoruffian}{ +  description={hired ruffian or killer}, +  sort={2}, +  plural={bravoes}, +  parent=bravo} +
    +

    \newglossaryentry{glossary}{name=glossary,
      description={ description={\glsxtrnopostpunc},
      plural={glossaries}}
    -
    The post-description hook for the The post-description hook for the general category can now be set:
    + id="dx1-203018"> category can now be set:
    -\glsdefpostdesc{general}{%
    % been set?
       \glsxtrifhasfield{useri}{\glscurrententrylabel}%
      {\space(\emph{pl.}\ \glsentryplural{\glscurrententrylabel},
        \emph{archaic} \glscurrentfieldvalue)%
      appended? class="cmtt-10"> 
        \GlsXtrIfXpFieldEqXpStr{plural}{\glscurrententrylabel}%
        {\glsentrytext{\glscurrententrylabel}\glspluralsuffix}%
      with bib2gls (see below)
          \GlsXtrIfXpFieldEqXpStr{plural}{\glscurrententrylabel}%
        {\space(\emph{pl.}\ \glsentryplural{\glscurrententrylabel})}%
     }
    (If you try this example out, notice the difference for the glossary entry if you use \nopostdesc and then -replace it with \glsxtrnopostpunc.) See the .) See the glossaries-extra user manual for further details and also glossaries-extra and bib2gls: An Introductory Guide. -

    The “bravo” homographs are an oddity where the singular form is identical but the plural is different +

    The “bravo” homographs are an oddity where the singular form is identical but the plural is different (“bravos” and “bravoes”). In the original, both descriptions included the plural term. The above modifications drop the display of the regular “bravos” plural (for the bravocry term) and only show the “bravoes” plural (for the bravoruffian term). In this particular case it might be useful to show the regular plural in order to highlight the difference. -

    While it’s straightforward to access an entry’s parent label (with

    While it’s straightforward to access an entry’s parent label (with \glsentryparent) it’s much harder to + id="dx1-203035">) it’s much harder to access entry’s children or siblings. The \ifglshaschildren command has to iterate over all entries to determine + id="dx1-203036"> command has to iterate over all entries to determine if any have a parent that matches the given label. This is obviously very time-consuming if you have a large database of entries. It also doesn’t provide a way of determining whether or not the child entries have been indexed. -

    With

    With bib2gls, it’s possible to save this information with the , it’s possible to save this information with the save-child-count and and save-sibling-count, + id="dx1-203039">, which not only save the total but also save the child or sibling labels in an etoolbox internal list. This makes the + id="dx1-203040"> internal list. This makes the information much faster to access and also only includes the labels of those entries that have actually been indexed. -

    In the above, the comment line:

    +

    In the above, the comment line:

    % with bib2gls (see below)
    indicates where to put the extra code. If you switch to bib2gls and make sure to use and make sure to use save-sibling-count + id="dx1-203043"> then you can insert the following code in the block above where that comment is:
    -\GlsXtrIfFieldNonZero{siblingcount}{\glscurrententrylabel}%
    {%  siblingcount field value non-zero
      \glsxtrfieldforlistloop % iterate handler class="cmtt-10">}%
    {}%  siblingcount field value 0 missing class="cmtt-10">\newcommand{\siblinghandler}[1]{%
       \GlsXtrIfXpFieldEqXpStr*{plural}{\glscurrententrylabel}%
         \listbreak + id="dx1-203049">
      }% @@ -35024,46 +36555,46 @@ class="cmtt-10">}
    The \listbreak command is provided by etoolbox and is used for prematurely exiting a loop. The handler + id="dx1-203050"> and is used for prematurely exiting a loop. The handler tests if the sibling’s plural field is identical to the current entry’s field is identical to the current entry’s plural field. If they are the + id="dx1-203052"> field. If they are the same, it does nothing. If they are different, it displays the current entry’s plural and breaks the loop. -

    Note that this assumes that the parent entry hasn’t had the plural form explicitly set to “bravoes” instead of +

    Note that this assumes that the parent entry hasn’t had the plural form explicitly set to “bravoes” instead of the default “bravos”. In that case, the parent entry would show the plural but the bravoruffian child entry wouldn’t show the plural (since this case would led to the empty code block identified with the comment “child and parent plurals the same”). The “bravoes” plural form would instead be shown for the parent, which wouldn’t look right. -

    If you don’t use

    If you don’t use bib2gls or if you use it without the or if you use it without the save-sibling-count resource option then the sibling + id="dx1-203054"> resource option then the sibling information won’t be available. -

    bib2glsIn order to switch to using In order to switch to using bib2gls, it’s first necessary to switch to using , it’s first necessary to switch to using glossaries-extra (as above). -Remember that the record option is required:

    + id="dx1-203057"> option is required:

    \usepackage[\usepackage[record,,postdot,,stylemods,style=treenonamegroup,
    subentrycounter]{glossaries-extra}
    Next the entry definitions need to be converted to the bib format required by format required by bib2gls. This can be done with + id="dx1-203059">. This can be done with convertgls2bib:
    + id="dx1-203060">:
    @@ -35090,44 +36621,44 @@ class="cmtt-10"> entries.
    The semantic command may be moved to the bib file to ensure it’s defined:
    + id="dx1-203061"> file to ensure it’s defined:
    -@preamble{"\providecommand{\scriptlang}[1]{\textsf{#1}}"}
    -

    The

    The sort field typically shouldn’t be set when using field typically shouldn’t be set when using bib2gls, so , so convertgls2bib strips it. If the strips it. If the sort field + id="dx1-203066"> field is missing, bib2gls will obtain it from the sort fallback for that entry type. In this case, will obtain it from the sort fallback for that entry type. In this case, @entry has the has the name + id="dx1-203069"> field as the sort fallback. If this is also missing then its value is obtained from the parent’s name field (see + id="dx1-203070"> field (see bib2gls gallery: sorting for other examples). -

    Therefore the “Perl” entry is simply defined as:

    +

    Therefore the “Perl” entry is simply defined as:

    -@entry{Perl,
     }
    This isn’t a problem for bib2gls. In this case, the command has been provided in the . In this case, the command has been provided in the @preamble, but , but bib2gls + id="dx1-203074"> strips font information so the sort value becomes Perl. If the definition isn’t placed in Perl. If the definition isn’t placed in @preamble then + id="dx1-203075"> then bib2gls will simply ignore the command (as will simply ignore the command (as xindy does) so the sort value will still end up as + id="dx1-203077"> does) so the sort value will still end up as Perl. -

    The homograph entries have also had their

    The homograph entries have also had their sort fields omitted:

    + id="dx1-203078"> fields omitted:

    -@entry{glossarycol,
      glosses}
    }
    -
    @entry{glossarylist,
     }
    -

    This means that the sort value for both these child entries is “glossary”. When

    This means that the sort value for both these child entries is “glossary”. When bib2gls encounters identical -sort values it acts according to its encounters identical +sort values it acts according to its identical-sort-action setting. The default action is to sort by the label + id="dx1-203082"> setting. The default action is to sort by the label using a simple string comparison. In this case, it would put glossarycol before glossarylist. In the original document, the sort value was manually chosen to ensure that the entries are ordered according to value was manually chosen to ensure that the entries are ordered according to first use. This ordering can easily be obtained by changing bib2gls’s identical sort action (requires at least ’s identical sort action (requires at least bib2gls + id="dx1-203085"> v2.0):

    -\GlsXtrLoadResources[[src={entries},={entries},identical-sort-action=use]
    This command should replace \makeglossaries. If you want the sibling information (see earlier), then you -need to remember to add save-sibling-count to the list of options. -

    Note that this is a better solution than in the original example. If I edit the document so that to the list of options. +

    Note that this is a better solution than in the original example. If I edit the document so that glossarycol is used first, then the ordering will be updated accordingly, but with the original example, the sort keys would + id="dx1-203089"> keys would need to be manually changed. -

    The remainder of the preamble (that is, the definition of

    The remainder of the preamble (that is, the definition of \scriptlang and all the entry definitions) should now be removed. -

    Finally, replace \printglossaries with

    Finally, replace \printglossaries with \printunsrtglossaries. The document build is now: -

    
    + id="dx1-203090">. The document build is now:
    +

    
        
    pdflatex sample
    bib2gls --group sample
    pdflatex sample
    pdflatex sample

    -Note use of the --group (or (or -g) switch, which is needed to support the ) switch, which is needed to support the treenonamegroup style. The third + id="dx1-203093"> style. The third LaTeX call is needed because the document contains \glsrefentry. -

    Note that you can’t use the . +

    Note that you can’t use the order=letter package option with package option with bib2gls. Instead use the . Instead use the break-at=none + id="dx1-203097"> resource option:

    -\GlsXtrLoadResources[[src={entries},={entries},identical-sort-action=use,
       break-at=none
    ]
    -

    + id="x1-203100r22"> +

    🔗sample-inline.tex

    -

    This document is like

    This document is like sample.tex, above, but uses the inline glossary style to put the glossary in a footnote. + id="dx1-204001"> glossary style to put the glossary in a footnote. The document build is: -

    
    +

    
        
    pdflatex sample-inline
    makeglossaries sample-inline
    pdflatex sample-inline @@ -35340,20 +36871,20 @@ class="cmss-10">glossaries-extra
    , follow the same procedure as above. bib2gls then you don’t need the then you don’t need the --group switch since no letter groups are required. + id="dx1-204003"> switch since no letter groups are required. -

    + id="x1-204004r23"> +

    🔗sampletree.tex

    -

    This document illustrates a hierarchical glossary structure where child entries have different names to their +

    This document illustrates a hierarchical glossary structure where child entries have different names to their corresponding parent entry. To create the document do: -

    
    +

    
        
    pdflatex sampletree
    makeglossaries sampletree
    pdflatex sampletree @@ -35361,31 +36892,31 @@ corresponding parent entry. To create the document do:
    The document uses the alttreehypergroup glossary style, which needs to know the widest name for each + id="dx1-205001"> glossary style, which needs to know the widest name for each hierarchical level. This has been assigned manually in the preamble with \glssetwidest: + id="dx1-205002">:

    -
    +
     \glssetwidest{Roman letters} % level 0 widest name
    - 
    \glssetwidest[1]{Sigma}      % level 1 widest name -
    -

    (Level 0 is the top-most level. That is, entries that don’t have a parent.) It’s possible to get +

    (Level 0 is the top-most level. That is, entries that don’t have a parent.) It’s possible to get glossaries to compute the widest top-level entry with \glsfindwidesttoplevelname but this will iterate over all top-level + id="dx1-205003"> but this will iterate over all top-level entries, regardless of whether or not they appear in the glossary. If you have a large database of entries, this will firstly take time and secondly the width may be too large due to an unindexed entry with a big name. -

    This sample document doesn’t require any of the tabular styles so I’ve prevented those packages from being +

    This sample document doesn’t require any of the tabular styles so I’ve prevented those packages from being loaded with nolong and and nosuper. The reduces the overall package loading.

    + id="dx1-205005">. The reduces the overall package loading.

    \usepackage[style=alttreehypergroup,]
    {glossaries}
    -
    (This example glossary is actually better suited for one of the topic styles provided with (This example glossary is actually better suited for one of the topic styles provided with glossary-topic, see + id="dx1-205006">, see below.) -

    This is obviously a contrived example since it’s strange to have the symbol names (such as “Sigma”) in the +

    This is obviously a contrived example since it’s strange to have the symbol names (such as “Sigma”) in the glossary. The purpose is to demonstrate the alttreehypergroup with an entry that’s noticeably wider than the + id="dx1-205007"> with an entry that’s noticeably wider than the others in the same hierarchical level. A more sensible document would have the symbol in the name + id="dx1-205008"> key. -



    glossaries-extraIf you want to switch to glossaries-extra, then you can instead use a combination of nostyles -and +and stylemods:

    + id="dx1-205010">:

    \usepackage[style=alttreehypergroup,\usepackage[style=alttreehypergroup,postdot,nostyles, -
    stylemods=tree
    ]{glossaries-extra}
    -
    The The stylemods package not only patches the original styles provided by the base package not only patches the original styles provided by the base glossaries package (such as glossary-tree used in this example) but also provides extra helper commands. In this case, it + id="dx1-205012"> used in this example) but also provides extra helper commands. In this case, it provides additional commands to calculate the widest name. For example, instead of manually setting the widest entry with \glssetwidest, you could add the following before the glossary: + id="dx1-205013">, you could add the following before the glossary:
    -\glsFindWidestUsedTopLevelName -
    +
    \glsFindWidestUsedLevelTwo + id="dx1-205015">
    This will only take into account the entries that have actually been used in the document, but it can still be time-consuming if you have a large number of entries. -

    Note that the glossary must be at the end of the document (after all required entries have been used) with +

    Note that the glossary must be at the end of the document (after all required entries have been used) with this method. The alternative is to perform the calculation at the end of the document and save the results in the aux file for the next run.
    -

    -

    This example document is using top-level entries for topics without descriptions. This means that the + id="dx1-205016"> file for the next run.

    +

    +

    This example document is using top-level entries for topics without descriptions. This means that the descriptions simply contain \nopostdesc to prevent the post-description punctuation from being automatically + id="dx1-205017"> to prevent the post-description punctuation from being automatically inserted. For example:

    -
    +
     \newglossaryentry{greekletter}{name={Greek letters},
    - 
    text={Greek letter}, - 
    description={\nopostdesc}} -
    -

    With +

    With glossaries-extra, you can convert this to glossaries-extra, you can convert this to \glsxtrnopostpunc which will prevent the post-description + id="dx1-205018"> which will prevent the post-description punctuation without interfering with the category post-description hook. -

    In order to distinguish between the child entries, which are symbols, and the parent entries, which are topics, -it’s useful to give these two different types of entries different categories. The topics can use the default

    In order to distinguish between the child entries, which are symbols, and the parent entries, which are topics, +it’s useful to give these two different types of entries different categories. The topics can use the default general -category, but the symbol entries can be assigned to a different category. The value of the +category, but the symbol entries can be assigned to a different category. The value of the category key must be + id="dx1-205020"> key must be a label. For example:

    \newglossaryentry{C}{name={C},
    description={Euler's constant}, -
    category=symbol,
    parent=romanletter}
    -

    There is some redundancy caused by a parenthetical note after the

    There is some redundancy caused by a parenthetical note after the first use in some of the symbol entries. For example:

    -
    +
     \newglossaryentry{pi}{name={pi},
    - 
    text={\ensuremath{\pi}}, - 
    first={\ensuremath{\pi} (lowercase pi)}, - 
    description={Transcendental number}, - 
    parent=greekletter} -
    -

    With +

    With glossaries-extra this can be dealt with through the category post-link hook:

    -\glsdefpostlink{symbol}{%
       \glsxtrifwasfirstuse + id="dx1-205022">
      {% use class="cmtt-10"> 
        \glsxtrifhasfield{useri}{\glslabel}%
        { (\glscurrentfieldvalue)}{}%
     }
    The parenthetical material is now stored in the user1 key. For example:
    + id="dx1-205026"> key. For example:
    \newglossaryentry{sigma}{name=Sigma, @@ -35581,43 +37112,43 @@ class="cmtt-10">parent=greekletter}
    The category post-description link is also set to ensure that the symbol is displayed after the description in the glossary:
    -\glsdefpostdesc{symbol}{\space
      ($\glsentrytext{\glscurrententrylabel}$)}
    -
    These modifications only affect entries with the These modifications only affect entries with the category set to set to symbol. -

    With . +

    With glossaries-extra, it’s now possible to use the topic styles provided with the glossaries-extra, it’s now possible to use the topic styles provided with the glossary-topic package: + id="dx1-205032"> package:

    \usepackage[style=\usepackage[style=topic,,postdot,nostyles,nostyles,stylemods={tree,topic}{glossaries-extra}
    -
    The The topic style is designed for this kind of hierarchy where all the top-level entries don’t have descriptions. This + id="dx1-205033"> style is designed for this kind of hierarchy where all the top-level entries don’t have descriptions. This means that the \nopostdot and and \glsxtrnopostpunc commands aren’t required. The top-level entries can + id="dx1-205035"> commands aren’t required. The top-level entries can simply be defined as:
     description={}}
    I’ve now loaded both the glossary-tree and and glossary-topic packages (via packages (via stylemods={tree,topic}). The glossary-topic package can be used without package can be used without glossary-tree, in which case it will behave more like the normal , in which case it will behave more like the normal tree + id="dx1-205041"> rather than alttree styles (but with different indentation and no description in the top-level). However, + id="dx1-205042"> styles (but with different indentation and no description in the top-level). However, if you use \glssetwidest (provided by (provided by glossary-tree) then the ) then the topic style will behave more like + id="dx1-205045"> style will behave more like alttree. -

    Since there’s no description for the top-level entries, the . +

    Since there’s no description for the top-level entries, the topic style ignores the widest name setting for the + id="dx1-205047"> style ignores the widest name setting for the top-level, so I can just have the level 1 setting:

    -
    +
     \glssetwidest[1]{Sigma}
    -
    -

    -

    +

    +

    bib2glsIf you want to convert this document so that it uses If you want to convert this document so that it uses bib2gls, you first need to convert it + id="dx1-205049">, you first need to convert it to using glossaries-extra, as described above, but remember that you now need the glossaries-extra, as described above, but remember that you now need the record option. + id="dx1-205050"> option.

    \usepackage[\usepackage[record,style=topic,style=topic,postdot,nostyles,,nostyles,stylemods={tree,topic}]
    }
    Next convert the entries to the bib format required by format required by bib2gls: -

    
    + id="dx1-205052">:
    +

    
        
    convertgls2bib --preamble-only sampletree.tex entries.bib

    Now replace \makeglossaries with:

    -\GlsXtrLoadResources[[src=entries,=entries,set-widest]
    -
    I’ve used the I’ve used the set-widest option here to get option here to get bib2gls to compute the widest name. (Obviously, it can only do + id="dx1-205056"> to compute the widest name. (Obviously, it can only do this if it can correctly interpret any commands contained in the name field.) -

    This means that the field.) +

    This means that the \glssetwidest commands can now be removed completely. All the commands can now be removed completely. All the \newglossaryentry commands also need to be removed from the preamble. Finally, \printunsrtglossaries needs to be replaced -with \printunsrtglossaries. The document build is now: -

    
    + id="dx1-205059">. The document build is now:
    +

    
        
    pdflatex sampletree
    bib2gls sampletree
    pdflatex sampletree

    -

    This produces the same result as with just

    This produces the same result as with just glossaries-extra and makeglossaries. However, there are some + id="dx1-205060">. However, there are some modifications that can be made to the bib file to make it neater. -

    The top-level entries are defined as:

    + id="dx1-205061"> file to make it neater. +

    The top-level entries are defined as:

    -@entry{greekletter,
      letter}
    }
    -
    @entry{romanletter,
      letter} class="cmtt-10">}
    This is a direct translation from the \newglossaryentry commands (after switching to the \newglossaryentry commands (after switching to the topic style). There’s + id="dx1-205064"> style). There’s a more appropriate entry type:
    -@indexplural{greekletter,
      letter}
    }
    -
    @indexplural{romanletter,
      letter}
    }
    -
    The The @indexplural entry type doesn’t require the entry type doesn’t require the description and will set the and will set the name field to the same as the + id="dx1-205069"> field to the same as the plural field. Since the field. Since the plural field hasn’t been set it’s obtained by appending “s” to the field hasn’t been set it’s obtained by appending “s” to the text + id="dx1-205072"> field. -

    Now let’s assume that the symbol entries are defined in a more rational manner, with the actual symbol in +

    Now let’s assume that the symbol entries are defined in a more rational manner, with the actual symbol in the name field. For example:

    + id="dx1-205073"> field. For example:

    -@entry{sigma,
      {symbol}
    }
    -
    @entry{C,
      {symbol}
    }
    -
    The category post-description hook (provided with The category post-description hook (provided with \glsdefpostdesc) should now be removed from the + id="dx1-205076">) should now be removed from the document. -

    If you make these changes and rebuild the document, you’ll find that the order has changed. Now the

    If you make these changes and rebuild the document, you’ll find that the order has changed. Now the sigma entry is before the pi entry. This is because bib2gls is obtaining the sort values from the is obtaining the sort values from the name field, -which is the sort fallback for field, +which is the sort fallback for @entry. This means that the sort values end up as Σ and . This means that the sort values end up as Σ and π (bib2gls + id="dx1-205080"> recognises the commands \Sigma and and \pi and converts them to the Unicode characters 0x1D6F4 and + id="dx1-205082"> and converts them to the Unicode characters 0x1D6F4 and 0x1D70B). -

    If you change

    If you change @entry to to @symbol then you will once again get the order from the original example ( then you will once again get the order from the original example (pi before Sigma). This is because the sort fallback for Sigma). This is because the sort fallback for @symbol is the label not the is the label not the name. (Remember that the sort + id="dx1-205086">. (Remember that the sort fallback is only used if the sort field isn’t set. If you explicitly set the field isn’t set. If you explicitly set the sort field then no fallback is required. See + id="dx1-205088"> field then no fallback is required. See bib2gls gallery: sorting.) -

    You can further tidy the

    You can further tidy the bib file by removing the file by removing the category fields. For example:

    + id="dx1-205090"> fields. For example:

    -@symbol{sigma,
      {\ensuremath{\Sigma}}
    }
    -
    You can then assign the You can then assign the category in the resource set:
    + id="dx1-205092"> in the resource set:
    -\GlsXtrLoadResources[[src=entries,=entries,set-widest,,category={same as entry}]
    -
    This means that all the entries defined with This means that all the entries defined with @symbol will have the will have the category set to set to symbol and all the entries -defined with @indexplural will have the will have the category set to indexplural. (Only the set to indexplural. (Only the symbol category is significant + id="dx1-205099"> category is significant in this example.) -

    You can make the

    You can make the bib files even more flexible by introducing field and entry aliases with files even more flexible by introducing field and entry aliases with field-aliases and - and +entry-type-aliases. See the . See the bib2gls manual for further details. -

    + id="dx1-205103"> manual for further details. +

    -

    Top

    19.7

    Top

    18.7 Cross-Referencing

    + id="x1-206001r24"> -

    +

    🔗sample-crossref.tex

    -

    This document illustrates how to cross-reference entries in the glossary. -

    
    +

    This document illustrates how to cross-reference entries in the glossary. +

    
        
    pdflatex sample-crossref
    makeglossaries sample-crossref
    pdflatex sample-crossref @@ -36100,43 +37631,43 @@ class="cmtt-10">sample-crossref.tex

    The document provides a command \alsoname to produce some fixed text, which can be changed as + id="dx1-207001"> to produce some fixed text, which can be changed as appropriate (usually within a language hook):

    -
    +
     \providecommand{\alsoname}{see also}
    -
    -

    I’ve used +

    I’ve used \providecommand as some packages define this command. This is used to create a “see also” cross-reference with the see key: + id="dx1-207002"> key:

    -
    +
     \newglossaryentry{apple}{name=apple,description={firm, round fruit},
    - 
    see=[\alsoname]{pear}} - 
    \newglossaryentry{marrow}{name={marrow}, - 
     description={long vegetable with thin green skin and white flesh}, - 
     see={[\alsoname]courgette}} -
    -

    -

    Note that “marrow” is included in the glossary even though it hasn’t been referenced in the text. This is +see=[\alsoname]{pear}} +\newglossaryentry{marrow}{name={marrow}, + description={long vegetable with thin green skin and white flesh}, + see={[\alsoname]courgette}} +

    +

    +

    Note that “marrow” is included in the glossary even though it hasn’t been referenced in the text. This is because the see key automatically triggers key automatically triggers \glssee which indexes the term. This behaviour is intended for + id="dx1-207004"> which indexes the term. This behaviour is intended for documents where only the terms that are actually required in the document are defined. It’s not suitable for a large database of terms shared across multiple documents that may or may not be used in a particular document. In that case, you may want to consider using glossaries-extra (see below). -



    glossaries-extraThis example is quite simple to convert to nopostdot=false or or postdot package option. You may also want to consider using the - package option. You may also want to consider using the +stylemods option. -

    In order to prevent the “marrow” entry from being automatically being added to the glossary as a result of -the cross-reference, you can use option. +

    In order to prevent the “marrow” entry from being automatically being added to the glossary as a result of +the cross-reference, you can use autoseeindex=false to prevent the automatic indexing triggered by the to prevent the automatic indexing triggered by the see key -(or the key +(or the seealso key provided by key provided by glossaries-extra).

    \usepackage[\usepackage[autoseeindex=false,,postdot,,stylemods]{glossaries-extra}
    The document build is the same, but now the “marrow” and “zucchini” entries aren’t present in the document. -

    Note that the “fruit” entry is still included even though it hasn’t been used in the document. This is because +

    Note that the “fruit” entry is still included even though it hasn’t been used in the document. This is because it was explicitly indexed with \glssee not via the not via the see key. -

    The entries that contains see=[\alsoname] can be converted to use the key. +

    The entries that contains see=[\alsoname] can be converted to use the seealso key:

    + id="dx1-207013"> key:

    \newglossaryentry{apple}{name=apple,description={firm, round fruit}, -
    seealso={pear}} @@ -36212,7 +37743,7 @@ class="cmtt-10"> and white flesh},
      seealso={courgette}} @@ -36221,15 +37752,15 @@ class="cmtt-10">}
    (The provided \alsoname definition may be removed.) -

    The original example redefines the cross-referencing format to use

    The original example redefines the cross-referencing format to use small caps:

    + id="dx1-207014">:

    \renewcommand{\glsseeitemformat}[1]{\textsc{\glsentryname{#1}}}
    This will still produce the desired effect with sampleAcrDesc.tex, this redefinition isn’t necessary if you have at least glossaries-extra v1.42. -

    bib2glsIf you want to switch to If you want to switch to bib2gls then you first need to switch to then you first need to switch to glossaries-extra, as -described above, but you now need the record option but no longer need the option but no longer need the autoseeindex=false option: + id="dx1-207020"> option:

    \usepackage[\usepackage[record,,postdot,,stylemods]{glossaries-extra}
    Next the entry definitions need to be converted to the bib format required by format required by bib2gls. -

    
    + id="dx1-207022">.
    +

    
        
    convertgls2bib sample-crossref.tex entries.bib

    If you have at least v2.0 then convertgls2bib will absorb the cross-referencing information supplied + id="dx1-207023"> will absorb the cross-referencing information supplied by:

    -
    +
     \glssee{fruit}{pear,apple,banana}
    -
    -

    into the +

    into the fruit definition:

    -@entry{fruit,
     \makeglossaries and all the entry definition commands (in class="cmtt-10">\glssee
    from the preamble) and add:
    -\GlsXtrLoadResources[[src=entries.bib]
    Finally, replace \printglossaries with \printglossaries with \printunsrtglossaries. The document build is now: -

    
    + id="dx1-207027">. The document build is now:
    +

    
        
    pdflatex sample-crossref
    bib2gls sample-crossref
    pdflatex sample-crossref @@ -36344,17 +37875,17 @@ class="cmtt-10">\printunsrtglossaries
    The glossary now contains: apple, banana, courgette and pear. Note that it doesn’t contain fruit, zucchini or marrow. -

    Now change the selection criteria:

    +

    Now change the selection criteria:

    -\GlsXtrLoadResources[[src=entries.bib,
      selection={recorded and see}]
    The glossary now includes fruit, zucchini and marrow. -

    The fruit and zucchini use the

    The fruit and zucchini use the see key which is a simple redirection for the reader. There’s no key which is a simple redirection for the reader. There’s no number list -for either of these entries. Whereas marrow uses the +for either of these entries. Whereas marrow uses the seealso key, which is typically intended as a + id="dx1-207032"> key, which is typically intended as a supplement to a number list but in this case there are no locations as marrow hasn’t been used in the + id="dx1-207033"> but in this case there are no locations as marrow hasn’t been used in the text. -

    With at least v2.0, there’s an alternative:

    +

    With at least v2.0, there’s an alternative:

    -\GlsXtrLoadResources[[src=entries.bib,
      selection={recorded and deps also
    }]
    In this case, the glossary includes fruit and zucchini but not marrow. -

    +

    -

    Top

    19.8

    Top

    18.8 Custom Keys

    -

    + id="x1-208001r25"> +

    🔗sample-newkeys.tex

    -

    This document illustrates how add custom keys (using

    This document illustrates how add custom keys (using \glsaddkey). There are two custom keys ). There are two custom keys ed, where the default value is the text field with “ed” appended, and field with “ed” appended, and ing, where the default value is the text field with “ing” + id="dx1-209003"> field with “ing” appended. Since the default value in both cases references the text field, the starred version field, the starred version \glsaddkey* is required to ensure that the default value is expanded on definition if no alternative has been provided. -

    The entries are then defined as follows: +

    The entries are then defined as follows:

    -
    +
     \newglossaryentry{jump}{name={jump},description={}}
    - 
    \newglossaryentry{run}{name={run},% - 
     ed={ran},% - 
     ing={running}, - 
     description={}} - 
    \newglossaryentry{waddle}{name={waddle},% - 
     ed={waddled},% - 
     ing={waddling},% - 
     description={}} -
    -

    -

    Each custom key is provided a set of commands analogous to +

    +

    Each custom key is provided a set of commands analogous to \glsentrytext, that allows the key value to be accessed, and \glstext that allows the key value to be access with indexing and hyperlinking (where applicable). -

    If you find yourself wanting to create a lot of custom keys that produce minor variations of existing keys +

    If you find yourself wanting to create a lot of custom keys that produce minor variations of existing keys (such as different tenses) you may find it simpler to just use \glsdisp. When editing the document source, it’s usually simpler to read:

    -
    +
     The dog \glsdisp{jump}{jumped} over the duck.
    -
    -

    than +

    +

    than

    -
    +
     The dog \glsed{jump} over the duck.
    -
    -

    -

    +

    +

    bib2glsIf you want to convert this document to use If you want to convert this document to use bib2gls, you first need to switch to , you first need to switch to glossaries-extra, but -remember that you need the record option:

    + id="dx1-209007"> option:

    \usepackage[\usepackage[record]glossaries-extra
    Next convert the entry definitions to the bib format required by format required by bib2gls: -

    
    + id="dx1-209009">:
    +

    
        
    convertgls2bib --index-conversion --preamble-only sample-newkeys.tex entries.bib

    @@ -36502,19 +38033,19 @@ The --index-conversion switch requires at least v2.0 and will convert entries without a description (or where the description is simply \nopostdesc or or \glsxtrnopostpunc) to ) to @index instead of instead of @entry. This means that + id="dx1-209013">. This means that the new entries.bib file will contain:

    -@index{jump,
      {jump}
    }
    -
    @index{run,
      {ran}
    }
    -
    @index{waddle,
     }
    Now replace \makeglossaries with
    -\GlsXtrLoadResources[[src=entries]
    and delete the \newglossaryentry commands. Finally replace \printglossaries with \printglossaries with \printunsrtglossaries. -

    The document build is now: -

    
    + id="dx1-209019">.
    +

    The document build is now: +

    
        
    pdflatex sample-newkeys
    bib2gls sample-newkeys
    pdflatex sample-newkeys @@ -36595,30 +38126,30 @@ class="cmtt-10">\printunsrtglossaries
    Note that there’s no need for the nonumberlist package option when you don’t use package option when you don’t use bib2gls’s ’s --group switch. -

    + id="x1-209022r26"> +

    🔗sample-storage-abbr.tex

    -

    This document illustrates how add custom storage keys (using

    This document illustrates how add custom storage keys (using \glsaddstoragekey). The document build is: -

    
    +

    
        
    pdflatex sample-storage-abbr
    makeglossaries sample-storage-abbr
    pdflatex sample-storage-abbr

    -

    The custom storage key is called

    The custom storage key is called abbrtype which defaults to word if not explicitly set. Its value can be accessed with the provided custom command \abbrtype.

    \glsaddstoragekey{abbrtype}{word}{\abbrtype}
    A custom abbreviation style is then defined that checks the value of this key and makes certain adjustments depending on whether or not its value is the default word. -

    This essentially forms a very similar function to the

    This essentially forms a very similar function to the glossaries-extra package’s glossaries-extra package’s category key, which is also + id="dx1-210002"> key, which is also defined as a storage key:

    \glsaddstoragekey{category}{general}{\glsaddstoragekey{category}{general}{\glscategory}
    -



    glossaries-extraThis document is much simpler with the glossaries-extra package:

    \documentclass{article}
    \usepackage[\usepackage[postdot]{glossaries-extra}
    \makeglossaries -
    \setabbreviationstyle[acronym]{short-long}
    \newacronym{radar}{radar}{radio detecting and ranging}
    \newacronym{laser}{laser}{light amplification by of radiation}
    \newacronym{scuba}{scuba}{self-contained underwater breathing
    apparatus}
    -
    \newabbreviation{dsp}{DSP}{digital signal processing} -
    \newabbreviation{atm}{ATM}{automated teller machine} @@ -36740,23 +38271,23 @@ class="cmtt-10">\end{document}
    -

    + id="x1-210010r27"> +

    🔗sample-storage-abbr-desc.tex

    -

    An extension of the previous example where the user needs to provide a description. +

    An extension of the previous example where the user needs to provide a description. -

    + id="x1-211001r28"> +

    🔗sample-chap-hyperfirst.tex

    -

    This document illustrates how to add a custom key using

    This document illustrates how to add a custom key using \glsaddstoragekey and hook into the \gls-like and @@ -36764,7 +38295,7 @@ class="cmtt-10">\gls-like and href="#sec:glstext-like">\glstext-like mechanism used to determine whether or not to hyperlink an entry. The document build is: -

    
    +

    
        
    pdflatex sample-chap-hyperfirst @@ -36777,7 +38308,7 @@ class="cmtt-10">chapter
    used to store the chapter number.

    \glsaddstoragekey{chapter}{0}{}
    It’s initialised to 0 and the \glslinkpostsetkeys hook is used to check this value against the current chapter + id="dx1-212002"> hook is used to check this value against the current chapter number. If the values are the same then the hyperlink is switched off, otherwise the key value is updated unless the hyperlink has been switched off (through the optional argument of commands like \gls and \glstext).
    \renewcommand*{\glslinkpostsetkeys}{%
     \edef\currentchap{\arabic{chapter}}% @@ -36811,9 +38342,9 @@ class="cmtt-10"> \else

      \glsifhyperon{\glsfieldxdef{\glslabel}{chapter}{\currentchap}}{}% @@ -36825,12 +38356,12 @@ class="cmtt-10">}
    Since this key isn’t intended for use when the entry is being defined, it would be more appropriate to simply use an internal field that doesn’t have an associated key or helper command, but \glsfieldxdef requires the + id="dx1-212006"> requires the existence of the field. The glossaries-extra package provides utility commands designed to work on internal fields that don’t have an associated key and may not have had a value assigned. -



    glossaries-extraIf you want to switch to glossaries-extra you need to change the package loadi

    \usepackage[\usepackage[postdot]{glossaries-extra}
    The custom storage key (provided with \glsaddstoragekey) can be removed, and the \glslinkpostsetkeys + id="dx1-212007"> hook can be changed to:
    \renewcommand*{\glslinkpostsetkeys}{%
     \edef\currentchap{\arabic{chapter}}%
      \GlsXtrIfFieldEqNum*{chapter {% class="cmtt-10">   \glsifhyperon{{\xGlsXtrSetField{\glslabel}{chapter}{\currentchap}}{}% @@ -36894,91 +38425,91 @@ class="cmtt-10">}
    The field name is still called chapter but there’s no longer an associated key or command. -

    +

    -

    Top

    19.9

    Top

    18.9 Xindy (Option 3)

    -

    Most of the earlier

    Most of the earlier makeindex sample files can be adapted to use sample files can be adapted to use xindy instead by adding the instead by adding the xindy package + id="dx1-213003"> package option. Situations that you need to be careful about are when the sort value (obtained from the name if the if the sort + id="dx1-213005"> key is omitted) contains commands (such as name={\pi}) or is identical to another value (or is identical after xindy has stripped all commands and braces). This section describes sample documents that use features which + id="dx1-213006"> has stripped all commands and braces). This section describes sample documents that use features which are unavailable with makeindex. + id="dx1-213007">. -

    + id="x1-213008r29"> +

    🔗samplexdy.tex

    -

    The document uses UTF8 encoding (with the

    The document uses UTF8 encoding (with the inputenc package). This is information that needs to be passed to + id="dx1-214001"> package). This is information that needs to be passed to xindy, so the encoding is picked up by , so the encoding is picked up by makeglossaries from the from the aux file. -

    By default, this document will create a file. +

    By default, this document will create a xindy style file called style file called samplexdy.xdy, but if you uncomment the lines

    -
    +
     \setStyleFile{samplexdy-mc}
    - 
    \noist - 
    \GlsSetXdyLanguage{} -
    -

    it will set the style file to +

    it will set the style file to samplexdy-mc.xdy instead. This provides an additional letter group for entries starting with “Mc” or “Mac”. If you use makeglossaries or or makeglossaries-lite, you don’t need to supply + id="dx1-214007">, you don’t need to supply any additional information. If you don’t use makeglossaries, you will need to specify the required + id="dx1-214008">, you will need to specify the required information. Note that if you set the style file to samplexdy-mc.xdy you must also specify \noist, + id="dx1-214009">, otherwise the glossaries package will overwrite samplexdy-mc.xdy and you will lose the “Mc” letter group. -

    To create the document do: -

    
    +

    To create the document do: +

    
        
    pdflatex samplexdy
    makeglossaries samplexdy
    pdflatex samplexdy @@ -36987,82 +38518,85 @@ group. If you don’t have Perl installed then you can’t use makeglossaries, but you also can’t use , but you also can’t use xindy! However, if + id="dx1-214011">! However, if for some reason you want to call xindy explicitly instead of using explicitly instead of using makeglossaries (or (or makeglossaries-lite): + id="dx1-214014">):

      -
    • if you are using the default style file +

      if you are using the default style file samplexdy.xdy, then do (no line breaks): -

      
      +     

      
            
      xindy -L english -C utf8 -I xindy -M samplexdy -t samplexdy.glg -o samplexdy.gls samplexdy.glo

    • -
    • if you are using +

      if you are using samplexdy-mc.xdy, then do (no line breaks): -

      
      +     

      
            
      xindy -I xindy -M samplexdy-mc -t samplexdy.glg -o samplexdy.gls samplexdy.glo

    -

    This document creates a new command to use with the

    This document creates a new command to use with the format key in the optional argument of commands + id="dx1-214015"> key in the optional argument of commands like \gls to format the location in the number list. The usual type of definition when a hyperlinked location is + id="dx1-214016">. The usual type of definition when a hyperlinked location is required should use one of the \hyperxx commands listed in table 6.1: + id="dx1-214017"> commands listed in table ??tab:hyperxx:

    -
    +
     \newcommand*{\hyperbfit}[1]{\textit{\hyperbf{#1}}}
    -
    -

    Unfortunately, this definition doesn’t work for this particular document and some adjustments are needed (see +

    +

    Unfortunately, this definition doesn’t work for this particular document and some adjustments are needed (see below). As a result of the adjustments, this command doesn’t actually get used by TeX, even though hyperbfit is used in the format key. It does, however, need to be identified as an attribute so that key. It does, however, need to be identified as an attribute so that xindy can recognise + id="dx1-214019"> can recognise it:

    -
    +
     \GlsAddXdyAttribute{hyperbfit}
    -
    -

    This will add information to the +

    This will add information to the xdy file when it’s created by file when it’s created by \makeglossaries. If you prevent the creation of this file with \noist then you will need to add the attribute to your custom then you will need to add the attribute to your custom xdy file (see the provided + id="dx1-214022"> file (see the provided samplexdy-mc.xdy file). -

    In order to illustrate unusual location formats, this sample document provides a command called +

    In order to illustrate unusual location formats, this sample document provides a command called \tallynum{nn⟩:

    -
    +
     \newrobustcmd*{\tallynum}[1]{%
    - 
     \ifnum\number#1<7 - 
      $\csname dice\romannumeral#1\endcsname$% - 
     \else - 
      $\dicevi$% - 
      \expandafter\tallynum\expandafter{\numexpr#1-6}% - 
     \fi - 
    } -
    -

    This command needs to be robust to prevent it from being expanded when it’s written to any of the auxiliary + \ifnum\number#1<7 +  $\csname dice\romannumeral#1\endcsname$% + \else +  $\dicevi$% +  \expandafter\tallynum\expandafter{\numexpr#1-6}% + \fi +} +

    +

    This command needs to be robust to prevent it from being expanded when it’s written to any of the auxiliary files. The \dicei, …, , …, \dicevi commands are provided by the stix package, so that needs to be + id="dx1-214024"> package, so that needs to be loaded. -

    An associated command

    An associated command \tally{counter} is defined that formats the value of the named ⟨\tallynum:

    -
    +
     \newcommand*{\tally}[1]{\tallynum{\arabic{#1}}}
    -
    -

    (This shouldn’t be robust as it needs the counter value to expand.) The page numbers are altered to use this +

    +

    (This shouldn’t be robust as it needs the counter value to expand.) The page numbers are altered to use this format (by redefining \thepage). -

    This custom location format also needs to be identified in the ). +

    This custom location format also needs to be identified in the xdy file so that file so that xindy can recognise it and + id="dx1-214027"> can recognise it and determine how to form ranges if required.

    -
    +
     \GlsAddXdyLocation{tally}{% tally location format
    - 
     :sep "\string\tallynum\space\glsopenbrace" - 
     "arabic-numbers" - 
     :sep "\glsclosebrace" - 
    } -
    -

    Again this information is written to the +

    Again this information is written to the xdy file by file by \makeglossaries so if you use \noist then you need to manually add it to your custom xdy file. -

    When file. +

    When xindy creates the associated glossary files, the locations will be written using:

    + id="dx1-214030"> creates the associated glossary files, the locations will be written using:

    \glsXcounterXformat{hyper-prefix}{\tally is changed so that it expands differently then these modifications won’t work. -

    Remember that in both cases, the second argument

    Remember that in both cases, the second argument #2 is in the form \tally{n}:

    -
    +
     \renewcommand{\glsXpageXglsnumberformat}[2]{%
    - 
     \linkpagenumber#2% - 
    } - 
    \renewcommand{\glsXpageXhyperbfit}[2]{% - 
     \textbf{\em\linkpagenumber#2}% - 
    } -
    -

    These need a command that can grab the actual number and correctly encapsulate it: + \linkpagenumber#2% +} +\renewcommand{\glsXpageXhyperbfit}[2]{% + \textbf{\em\linkpagenumber#2}% +} +

    +

    These need a command that can grab the actual number and correctly encapsulate it:

    -
    +
     \newcommand{\linkpagenumber}[2]{\hyperlink{page.#2}{#1{#2}}}
    -
    -

    -

    If you want to try out the +

    +

    If you want to try out the samplexdy-mc.xdy file, the entries starting with “Mac” or “Mc” will be placed in their own “Mc” letter group. Ideally it should be possible to do this simply with \GlsAddLetterGroup (and not + id="dx1-214032"> (and not require a custom xdy file) but unfortunately the “M” letter group will have already been defined and take + id="dx1-214033"> file) but unfortunately the “M” letter group will have already been defined and take precedence over “Mc”, which is why a custom file is required and the normal language module must be suppressed:

    -
    +
     \setStyleFile{samplexdy-mc}
    - 
    \noist - 
    \GlsSetXdyLanguage{} -
    -

    -

    This “Mc” group is suitable for names like “Maclaurin” but not for “Mach”. To prevent this, the +

    +

    This “Mc” group is suitable for names like “Maclaurin” but not for “Mach”. To prevent this, the sort key + id="dx1-214034"> key for that value is set to lower case:

    -
    +
     \newglossaryentry{mach}{name={Mach, Ernst},
    - 
    first={Ernst Mach},text={Mach}, - 
    sort={mach, Ernst}, - 
    description={Czech/Austrian physicist and philosopher}} -
    -

    -

    +

    +

    bib2glsIf you want to convert this document so that it uses If you want to convert this document so that it uses bib2gls, you first need to switch to + id="dx1-214036">, you first need to switch to glossaries-extra and use the glossaries-extra and use the record package option:

    + id="dx1-214037"> package option:

    \usepackage[\usepackage[record,,postdot]{glossaries-extra}
    The xindy-only commands can now all be removed (attribute -only commands can now all be removed (attribute \GlsAddXdyAttribute, location \GlsAddXdyLocation, language \glsXcounterXformat and the + id="dx1-214039"> and the custom helper \linkpagenumber). Also \noist and \setStyleFile aren’t relevant with bib2gls and so should + id="dx1-214040"> and so should be removed. -

    The definitions of

    The definitions of \hyperbfit should be retained (as well as \tallynum, \tally and the redefinition of \thepage). -

    The entries all need to be converted to the

    The entries all need to be converted to the bib format required by format required by bib2gls. -

    
    + id="dx1-214042">.
    +

    
        
    convertgls2bib --preamble-only samplexdy.tex entries.bib

    Next replace \makeglossaries with:

    -\GlsXtrLoadResources[[src=entries]
    and remove all the entry definitions from the preamble. Use the search and replace function on your text editor to replace all instances of \glsentryfirst with with \glsfmtfirst, and all instances of , and all instances of \glsentryname with - with +\glsfmtname. -

    Finally, replace . +

    Finally, replace \printglossaries with with \printunsrtglossaries. The document build is now: -

    
    + id="dx1-214050">. The document build is now:
    +

    
        
    pdflatex samplexdy
    bib2gls --group samplexdy
    pdflatex samplexdy @@ -37323,81 +38857,81 @@ class="cmtt-10">\printunsrtglossaries
    -

    This results in a slightly different ordering from the original document (without the “Mc” letter group). In +

    This results in a slightly different ordering from the original document (without the “Mc” letter group). In the original example, “Mach number” was listed before “Mach, Ernest”. The modified document now has “Mach, Ernest” before “Mach number”. This difference is due to bib2gls’s default ’s default break-at=word setting, + id="dx1-214052"> setting, which marks word boundaries with the pipe (|) character, so the sort values for bib2gls are are Mach|Earnest| and Mach|number|. See the bib2gls manual for further details of this option, and also see the + id="dx1-214054"> manual for further details of this option, and also see the examples chapter of that manual for alternative approaches when creating entries that contain people’s names. -

    If you want the “Mc” letter group, it can be obtained by providing a custom sort rule:

    +

    If you want the “Mc” letter group, it can be obtained by providing a custom sort rule:

    -\GlsXtrLoadResources[[src=entries,
        sort=custom,
        sort-rule={={\glsxtrcontrolrules + id="dx1-214058">
       ; ;\glsxtrspacerules;;\glsxtrnonprintablerules + id="dx1-214060">
       ; ;\glsxtrcombiningdiacriticrules,,\glsxtrhyphenrules + id="dx1-214062">
       < <\glsxtrgeneralpuncrules<<\glsxtrdigitrules + id="dx1-214064">
      ]
    Unfortunately, as with xindy, this puts “Mach” into the “Mc” letter group. -

    One way to get around this problem is to define a custom command to help identify genuine “Mc”/“Mac” + id="dx1-214065">, this puts “Mach” into the “Mc” letter group. +

    One way to get around this problem is to define a custom command to help identify genuine “Mc”/“Mac” prefixes with names that happen to start with “Mac”. For example:

    -@entry{mcadam,
      McAdam}
    }
    -
    @entry{maclaurin,
     }
    -@entry{mach,
     }
    With LaTeX, this command should simply do its argument: -
    +
     \newcommand{\Mac}[1]{#1}
    -
    -

    However, when +

    However, when bib2gls works out the works out the sort value, it needs to be defined with something unique that won’t + id="dx1-214070"> value, it needs to be defined with something unique that won’t happen to occur at the start of another term. For example:

    -
    +
     \providecommand{\Mac}[1]{MC}
    -
    -

    (Remember that +

    (Remember that break-at=word will strip spaces and punctuation so don’t include them unless you switch to - will strip spaces and punctuation so don’t include them unless you switch to +break-at=none.) -

    So add the first definition of .) +

    So add the first definition of \Mac to the tex file and modify file and modify entries.bib so that it includes the second definition:

    -@preamble{"\providecommand{\Mac}[1]{MC}"}
    Then modify the “Mc”/“Mac” entries as appropriate (see the above “McAdam” and “Maclaurin” examples). -

    The custom sort rule needs to be modified:

    +

    The custom sort rule needs to be modified:

    -\GlsXtrLoadResources[[src=entries,
        write-preamble=false,
        sort=custom,
        sort-rule={={\glsxtrcontrolrules + id="dx1-214079">
       ; ;\glsxtrspacerules;;\glsxtrnonprintablerules + id="dx1-214081">
       ; ;\glsxtrcombiningdiacriticrules,,\glsxtrhyphenrules + id="dx1-214083">
       < <\glsxtrgeneralpuncrules<<\glsxtrdigitrules + id="dx1-214085">
      ]
    This will create a “Mc” letter group that only includes the names that start with the custom \Mac command. -

    Other alternatives include moving

    Other alternatives include moving @preamble into a separate into a separate bib file, so that you can choose + id="dx1-214087"> file, so that you can choose whether or not to include it. See the “Examples” chapter of the bib2gls user manual for further + id="dx1-214088"> user manual for further examples. -

    + id="x1-214089r30"> +

    🔗samplexdy2.tex

    -

    This document illustrates how to use the

    This document illustrates how to use the glossaries package where the location numbers don’t follow a standard format. This example will only work with xindy. To create the document do: + id="dx1-215001">. To create the document do: -

    
    +

    
        
    pdflatex samplexdy2
    makeglossaries samplexdy2
    pdflatex samplexdy2 @@ -37683,8 +39217,8 @@ class="cmtt-10">xindy
    xindy call is: -

    
    + id="dx1-215002"> call is:
    +

    
        
    xindy -L english -C utf8 -I xindy -M samplexdy2 -t samplexdy2.glg -o samplexdy2.gls samplexdy2.glo

    @@ -37692,77 +39226,77 @@ This example uses the section counter with xindy: + id="dx1-215003">:

    -
    +
     \usepackage[xindy,counter=section]{glossaries}
    -
    -

    The document employs an eccentric section numbering system for illustrative purposes. The section numbers +

    +

    The document employs an eccentric section numbering system for illustrative purposes. The section numbers are prefixed by the chapter number in square brackets:

    -
    +
     \renewcommand*{\thesection}{[\thechapter]\arabic{section}}
    -
    -

    Parts use Roman numerals: +

    +

    Parts use Roman numerals:

    -
    +
     \renewcommand*{\thepart}{\Roman{part}}
    -
    -

    The section hyperlink name includes the part: +

    +

    The section hyperlink name includes the part:

    -
    +
     \renewcommand*{\theHsection}{\thepart.\thesection}
    -
    -

    This custom numbering scheme needs to be identified in the +

    This custom numbering scheme needs to be identified in the xdy file: + id="dx1-215004"> file:

    -
    +
     \GlsAddXdyLocation["roman-numbers-uppercase"]{section}{:sep "["
    - 
      "arabic-numbers" :sep "]" "arabic-numbers" - 
    } -
    -

    If the part is 0 then +

    If the part is 0 then \thepart will be empty (there isn’t a zero Roman numeral). An extra case is needed to catch this:

    -
    +
     \GlsAddXdyLocation{zero.section}{:sep "["
    - 
      "arabic-numbers" :sep "]" "arabic-numbers" - 
    } -
    -

    Note that this will stop xindy giving a warning, but the location hyperlinks will be invalid if no +

    Note that this will stop xindy giving a warning, but the location hyperlinks will be invalid if no \part is used. -

    bib2glsIf you want to switch to If you want to switch to bib2gls, you first need to switch to , you first need to switch to glossaries-extra but remember to use -record instead of instead of xindy:

    + id="dx1-215008">:

    \usepackage[\usepackage[record,counter=section]{glossaries-extra}
    Next remove the \GlsAddXdyLocation commands and convert the entry definitions to the bib format required + id="dx1-215009"> format required by bib2gls: -

    
    + id="dx1-215010">:
    +

    
        
    convertgls2bib --preamble-only samplexdy2.tex entries.bib

    Now replace \makeglossaries with:

    -\GlsXtrLoadResources[[src=entries]
    and remove the \newglossaryentry commands. Finally, replace \printglossaries with -\printunsrtglossaries. -

    The document build is: -

    
    + id="dx1-215013">.
    +

    The document build is: +

    
        
    pdflatex samplexdy2
    bib2gls samplexdy2
    pdflatex samplexdy2

    -

    With unusual numbering systems, it’s sometimes better to use

    With unusual numbering systems, it’s sometimes better to use record=nameref:

    + id="dx1-215014">:

    \usepackage[\usepackage[record=nameref,counter=section]{} the number appear instead you need to define:
    \newcommand*{\newcommand*{\glsxtrsectionlocfmt}[2]{#1}
    (Make sure you have at least v1.42 of glossaries-extra
    .) See also the earlier sampleSec.tex. -

    + id="x1-215016r31"> +

    🔗samplexdy3.tex

    -

    This document is very similar to

    This document is very similar to samplexdy.tex but uses the command \Numberstring from the fmtcount package to format the page numbers instead of the package to format the page numbers instead of the \tally command from the earlier example. -

    + id="x1-216002r32"> +

    🔗sampleutf8.tex

    -

    This is another example that uses

    This is another example that uses xindy. Unlike . Unlike makeindex, , xindy can cope with can cope with non-Latin characters. This -document uses UTF-8 encoding. To create the document do: -

    
    + id="dx1-217004">s. This
    +document uses UTF-8 encoding. To create the document do:
    +

    
        
    pdflatex sampleutf8
    makeglossaries sampleutf8
    pdflatex sampleutf8 @@ -37881,8 +39416,8 @@ document uses UTF-8 encoding. To create the document do: The explicit xindy call is (no line breaks): -

    + id="dx1-217005"> call is (no line breaks): +

    
     
    xindy -L @@ -37902,18 +39437,18 @@ sampleutf8.gls sampleutf8.glo

    -

    If you remove the

    If you remove the xindy option from option from sampleutf8.tex and do: -

    
    +

    
        
    pdflatex sampleutf8
    makeglossaries sampleutf8
    pdflatex sampleutf8

    or -

    
    +

    
        
    pdflatex sampleutf8
    makeglossaries-lite sampleutf8
    pdflatex sampleutf8 @@ -37921,37 +39456,37 @@ or
    you will see that the entries that start with an extended Latin character now appear in the symbols group, and + id="dx1-217007"> now appear in the symbols group, and the word “manœuvre” is now after “manor” instead of before it. If you want to explicitly call makeindex (no + id="dx1-217008"> (no line breaks): -

    
    +

    
        
    makeindex -s sampleutf8.ist -t sampleutf8.glg -o sampleutf8.gls sampleutf8.glo

    -

    bib2glsIf you want to switch to If you want to switch to bib2gls, you first need to switch to , you first need to switch to glossaries-extra but replace xindy with - with +record:

    + id="dx1-217012">:

    \usepackage[\usepackage[record,,postdot,,stylemods,style=listgroup]{glossaries-extra}
    Note that you don’t need the nonumberlist option with option with bib2gls. You can instruct . You can instruct bib2gls to + id="dx1-217015"> to simply not save the number lists, but in this case there won’t be any locations as there’s no actual + id="dx1-217016">s, but in this case there won’t be any locations as there’s no actual indexing. -

    The entries need to be converted to the

    The entries need to be converted to the bib format required by format required by bib2gls: -

    
    + id="dx1-217018">:
    +

    
        
    convertgls2bib --preamble-only --texenc UTF-8 --bibenc UTF-8 sampleutf8.tex entries.bib

    @@ -37992,77 +39527,77 @@ class="cmtt-10"> UTF-8
    This is the encoding of the bib file. It doesn’t have to match the encoding of the file. It doesn’t have to match the encoding of the tex file, but it’s generally + id="dx1-217020"> file, but it’s generally better to be consistent. When bib2gls parses this file, it will look for this encoding line. (If the parses this file, it will look for this encoding line. (If the --texenc and --bibenc switches aren’t used, convertgls2bib will assume your system’s default encoding. See the will assume your system’s default encoding. See the bib2gls + id="dx1-217023"> manual for further details.) -

    Next replace

    Next replace \makeglossaries with:

    -\GlsXtrLoadResources[[src=entries,=entries,selection=all]
    and remove all the \newglossaryentry commands. -

    Iterative commands like

    Iterative commands like \glsaddall don’t work with don’t work with bib2gls. Instead, you can select all entries using the -. Instead, you can select all entries using the +selection=all option. This is actually better than option. This is actually better than \glsaddall, which enforces the selection of all entries by indexing each entry. As a result, with makeindex and and xindy (and (and Option 1), every entry will have the same location (which is the location of the \glsaddall command, in this case page 1). With \glsaddall command, in this case page 1). With selection=all, + id="dx1-217032">, bib2gls will automatically selection all entries even if they don’t have any records (indexing information) so in + id="dx1-217033"> will automatically selection all entries even if they don’t have any records (indexing information) so in this case there are no number lists. -

    Finally, replace \printglossaries with s. +

    Finally, replace \printglossaries with \printunsrtglossaries. The build process is now: -

    
    + id="dx1-217035">. The build process is now:
    +

    
        
    pdflatex sampleutf8
    bib2gls --group sampleutf8
    pdflatex sampleutf8 @@ -38071,111 +39606,111 @@ class="cmtt-10">\printunsrtglossaries
    bib2gls picks up the encoding of the picks up the encoding of the tex file from the file from the aux file:

    + id="dx1-217038"> file:

    -\glsxtr@texencoding{utf8}
    If you experience any encoding issues, check the aux file for this command and check the file for this command and check the bib file for the + id="dx1-217041"> file for the encoding comment line. Also check bib2gls’s ’s glg transcript file for encoding messages, which should look + id="dx1-217043"> transcript file for encoding messages, which should look like: -
    +
     TeX character encoding: UTF-8
    -
    -

    -

    The document language, if it has been set, is also added to the +

    +

    The document language, if it has been set, is also added to the aux file when the file when the record option is used. In + id="dx1-217045"> option is used. In this case, no language package has been used, so bib2gls will fallback on the system’s default locale. If no sort + id="dx1-217046"> will fallback on the system’s default locale. If no sort method is set, the entries will be sorted according to the document language, if set, or the default -locale. You can specify a specific locale using the sort key with a locale tag identifier. For example: + id="dx1-217047"> key with a locale tag identifier. For example:

    -\GlsXtrLoadResources[[src=entries,=entries,selection=all,,sort=de-CH-1996]
    (Swiss German new orthography) or:
    -\GlsXtrLoadResources[[src=entries,=entries,selection=all,,sort=is]
    (Icelandic). -

    +

    -

    Top

    19.10

    Top

    18.10 No Indexing Application (Option 1)

    -

    + id="x1-218001r33"> +

    🔗sample-noidxapp.tex

    -

    This document illustrates how to use the

    This document illustrates how to use the glossaries package without an external indexing application (Option 1). To create the complete document, you need to do: -

    
    +

    
        
    pdflatex sample-noidxapp
    pdflatex sample-noidxapp

    Note the need to group the accent command that occurs at the start of the name:

    + id="dx1-219001">:

    @@ -38185,7 +39720,7 @@ class="cmtt-10">\newglossaryentry{elite}{% class="cmtt-10">  name={{\'e}lite},
    }
    This is necessary to allow the term to work with \Gls. Notice also how the . Notice also how the number lists can’t be compacted + id="dx1-219004">s can’t be compacted into ranges. For example, the list “1, 2, 3” would be converted to “1–3” with a proper indexing application (Options 2 or 3 or, with glossaries-extra, Option 4). -

    The larger the list of entries, the longer the document build time. This method is very inefficient for large +

    The larger the list of entries, the longer the document build time. This method is very inefficient for large glossaries. See Gallery: glossaries performance for a comparison. -

    + id="x1-219005r34"> +

    🔗sample-noidxapp-utf8.tex

    -

    As the previous example, except that it uses the

    As the previous example, except that it uses the inputenc package. To create the complete document, you need + id="dx1-220001"> package. To create the complete document, you need to do: -

    
    +

    
        
    pdflatex sample-noidxapp-utf8
    pdflatex sample-noidxapp-utf8
    @@ -38235,22 +39770,22 @@ href="#glo:nonlatinalph">non-Latin alphabets. Use Options 3 or 4 instead. -

    +

    -

    Top

    19.11

    Top

    18.11 Other

    -

    + id="x1-221001r35"> +

    🔗sample4col.tex

    -

    This document illustrates a four column glossary where the entries have a symbol in addition to the name and +

    This document illustrates a four column glossary where the entries have a symbol in addition to the name and description. To create the complete document, you need to do: -

    
    +

    
        
    pdflatex sample4col
    makeglossaries sample4col
    pdflatex sample4col @@ -38259,7 +39794,7 @@ description. To create the complete document, you need to do:

    or -

    
    +

    
        
    pdflatex sample4col
    makeglossaries-lite sample4col
    pdflatex sample4col @@ -38268,28 +39803,28 @@ or The vertical gap between entries is the gap created at the start of each group. This can be suppressed using the nogroupskip package option. (If you switch to package option. (If you switch to bib2gls, simply omit the , simply omit the --group command line option.) -

    This example uses the

    This example uses the long4colheaderborder. This style doesn’t allow multi-line descriptions. You may prefer + id="dx1-222003">. This style doesn’t allow multi-line descriptions. You may prefer to use altlong4colheaderborder with long descriptions. However, in either case a style that uses with long descriptions. However, in either case a style that uses booktabs is + id="dx1-222005"> is preferable. For example, long4col-booktabs or or altlongragged4col-booktabs. Note that this requires + id="dx1-222007">. Note that this requires glossary-longbooktabs, which needs to be explicitly loaded. The style can only be set once this package has been + id="dx1-222008">, which needs to be explicitly loaded. The style can only be set once this package has been loaded:

    \usepackage{glossary-longbooktabs} class="cmtt-10">\setglossarystyle{altlongragged4col-booktabs}
    -



    glossaries-extraThe glossaries-extra package provides a more compact way of doing this with the glossaries-extra package provides a more compact way of doing this with the stylemods + id="dx1-222009"> option:

    \usepackage[style=altlongragged4col-booktabs,\usepackage[style=altlongragged4col-booktabs,stylemods=longbooktabs}
    The glossaries-extra package provides additional styles, including more “long” styles with the glossaries-extra package provides additional styles, including more “long” styles with the glossary-longextra -package. For example, the +package. For example, the long-name-desc-sym-loc style:
    + id="dx1-222011"> style:
    \usepackage[style=\usepackage[style=long-name-desc-sym-loc,,stylemods=longextra]
    {glossaries-extra}
    -
    If you use the If you use the stylemods option with an argument, you may prefer to use it with option with an argument, you may prefer to use it with nostyles to prevent unwanted + id="dx1-222013"> to prevent unwanted styles from being automatically loaded. For example:
    \usepackage[style=\usepackage[style=long-name-desc-sym-loc,,nostyles,,stylemods=longextra]
    {glossaries-extra}
    See also the gallery of predefined styles. -

    + id="x1-222014r36"> +

    🔗sample-numberlist.tex

    -

    This document illustrates how to reference the

    This document illustrates how to reference the number list in the document text. This requires an additional + id="dx1-223001"> in the document text. This requires an additional LaTeX run: -

    
    +

    
        
    pdflatex sample-numberlist
    makeglossaries sample-numberlist
    pdflatex sample-numberlist @@ -38383,39 +39918,39 @@ LaTeX run:
    This uses the savenumberlist package option, which enables package option, which enables \glsentrynumberlist and and \glsdisplaynumberlist + id="dx1-223004"> (with limitations). The location counter is set to chapter, so the number list refers to the chapter + id="dx1-223005"> refers to the chapter numbers.

    -
    +
     \usepackage[savenumberlist,counter=chapter]{glossaries}
    -
    -

    The +

    The number list can’t be obtained until can’t be obtained until makeindex (or (or xindy) has created the glossary file. The ) has created the glossary file. The number list is + id="dx1-223009"> is picked up when this file is input by \printglossary and is then saved in the aux file so that it’s available on + id="dx1-223010"> file so that it’s available on the next LaTeX run. -

    This document contains both commands:

    +

    This document contains both commands:

    This discussed in chapters~\glsdisplaynumberlist{sample}
    (or \glsentrynumberlist{sample}).
    Without hyperref, the first list shows as “1–3, 5 & 6” and the second list shows as “1–3, 5, 6”. -

    Note that you can’t use , the first list shows as “1–3, 5 & 6” and the second list shows as “1–3, 5, 6”. +

    Note that you can’t use \glsdisplaynumberlist with with hyperref and Options  and Options 2 or 3. If you do, you will get the warning:

    -
    +
     Package glossaries Warning: \glsdisplaynumberlist doesn't work with
    - 
    hyperref. - 
    Using \glsentrynumberlist instead -
    -

    Now both lists show as “1–3, 5, 6”. -

    If you switch to +

    Now both lists show as “1–3, 5, 6”. +

    If you switch to Option 1 (replace \makeglossaries with \makenoidxglossaries and replace \printglossaries with \printnoidxglossaries), then the document build is simply: -

    
    +

    
        
    pdflatex sample-numberlist
    pdflatex sample-numberlist

    Now \glsdisplaynumberlist works with works with hyperref, however there are no ranges, so the first list shows as “1, 2, + id="dx1-223017">, however there are no ranges, so the first list shows as “1, 2, 3, 5, & 6” and the second list shows as “1, 2, 3, 4, 5, 6”. -

    bib2glsIf you want to switch to If you want to switch to bib2gls, you first need to switch to , you first need to switch to glossaries-extra (at least v1.42) but remember to include the record option:

    + id="dx1-223020"> option:

    \usepackage[\usepackage[record,counter=chapter]{glossaries-extra}
    Note that the savenumberlist option is no longer required. Next convert the entry to the option is no longer required. Next convert the entry to the bib format required by + id="dx1-223022"> format required by bib2gls: -

    
    + id="dx1-223023">:
    +

    
        
    convertgls2bib sample-numberlist.tex entries.bib

    Replace \makeglossaries with:

    -\GlsXtrLoadResources[[src=entries.bib]
    and remove the \newglossaryentry command from the document preamble. Finally, replace \printglossaries with \printglossaries with \printunsrtglossaries. The build process is now: -

    
    + id="dx1-223026">. The build process is now:
    +

    
        
    pdflatex sample-numberlist
    bib2gls sample-numberlist
    pdflatex sample-numberlist @@ -38538,95 +40073,95 @@ You can also use:

    -\glsxtrfieldformatlist{sample}{loclist}
    which will show the complete list without ranges “1, 2, 3, 5 & 6”. -

    This method works much better than using the

    This method works much better than using the savenumberlist option because option because bib2gls saves the formatted + id="dx1-223029"> saves the formatted number list in the in the location field (which is an internal field provided by field (which is an internal field provided by glossaries-extra for the benefit of bib2gls) and the unformatted ) and the unformatted number list in the in the loclist internal field (which is also used by + id="dx1-223034"> internal field (which is also used by Option 1). -

    With Options 

    With Options 2 and 3, both makeindex and and xindy simply create a file containing the commands to typeset + id="dx1-223036"> simply create a file containing the commands to typeset the glossary, which is input by \printglossary. This means that it’s quite hard to gather information obtained by the indexing application. -

    bib2gls, on the other hand, doesn’t write a file containing the glossary. It writes a file containing the entry + id="dx1-223037">, on the other hand, doesn’t write a file containing the glossary. It writes a file containing the entry definitions and uses internal fields to save the indexing information. The glossary is then displayed with -\printunsrtglossary, which simply iterates over all defined entries and fetches the required information from + id="dx1-223038">, which simply iterates over all defined entries and fetches the required information from those internal fields. -

    The

    The \glsdisplaynumberlist and and \glsentrynumberlist commands are redefined by commands are redefined by glossaries-extra-bib2gls -to simply access the +to simply access the location field. However, if you want a complete list without ranges you can use: + id="dx1-223042"> field. However, if you want a complete list without ranges you can use:

    -\glsxtrfieldformatlist{sample}{loclist}
    In this example, this produces “1, 2, 3, 5 & 6”. -

    Note the difference if you use the

    Note the difference if you use the record=nameref package option instead of just package option instead of just record. + id="dx1-223045">. -

    + id="x1-223046r37"> +

    🔗sample-nomathhyper.tex

    -

    This document illustrates how to selectively enable and disable entry hyperlinks in

    This document illustrates how to selectively enable and disable entry hyperlinks in \glsentryfmt. The + id="dx1-224001">. The document build is: -

    
    +

    
        
    pdflatex sample-nomathhyper
    makeglossaries sample-nomathhyper
    pdflatex sample-nomathhyper @@ -38636,7 +40171,7 @@ This disables the hyperlinks for the main glossary with:

    \GlsDeclareNoHyperList{main} @@ -38645,9 +40180,9 @@ class="cmtt-10">{main} class="cmtt-10">\glsentryfmt so that it adds a hyperlink if not in maths mode and the hyperlinks haven’t been forced off (with the hyper=false key). -



    glossaries-extraIf you want to switch to } class="cmtt-10">\makeglossaries

    \renewcommand{\renewcommand{\glslinkpresetkeys
    }{%
     \ifmmode definition

    -

    + id="x1-224005r38"> +

    🔗sample-entryfmt.tex

    -

    This document illustrates how to change the way an entry is displayed in the text. (This is just a test document. +

    This document illustrates how to change the way an entry is displayed in the text. (This is just a test document. For a real document, I recommend you use the siunitx package to typeset units.) The document build + id="dx1-225001"> package to typeset units.) The document build is: -

    
    +

    
        
    pdflatex sample-entryfmt
    makeglossaries sample-entryfmt
    pdflatex sample-entryfmt @@ -38700,7 +40235,7 @@ is:
    This redefines \glsentryfmt to add the symbol on to add the symbol on first use:

    \renewcommand*{\glsentryfmt}{%
      \glsgenentryfmt + id="dx1-225003">
      \ifglsused{\glslabel}{}{\space (\glsentrysymbol{\glslabel})}%
    } @@ -38726,8 +40261,8 @@ class="cmtt-10">\glsentrysymbol
    not \glssymbol (which would result in nested link text). -


    ). +


    glossaries-extraIf you want to switch to the

    \usepackage[\usepackage[stylemods,style=tree]{glossaries-extra}
    \makeglossaries
    -
    \glsdefpostlink
    {unit}{}{\glsxtrpostlinkAddSymbolOnFirstUse}

    \newglossaryentry{distance}{ -
    category={unitsymbol={km}}
    Note that in this case the symbol is now outside of the hyperlink. -

    + id="x1-225009r39"> +

    🔗sample-prefix.tex

    -

    This document illustrates the use of the

    This document illustrates the use of the glossaries-prefix package. An additional run is required to ensure the + id="dx1-226001"> package. An additional run is required to ensure the table of contents is up-to-date: -

    
    +

    
        
    pdflatex sample-prefix
    makeglossaries sample-prefix
    pdflatex sample-prefix @@ -38798,7 +40333,7 @@ Remember that the default separator between the prefix and \gls (or one of its variants) is empty, so if a space is required it must be inserted at the end of the prefix. However, the xkeyval package (which is used to parse the + id="dx1-226002"> package (which is used to parse the ⟨key=\space
    }}
    -



    glossaries-extraIf you want to convert this example to use glossaries-extra, then (as from v1.42) you can use -the prefix option:

    + id="dx1-226003"> option:

    \usepackage[\usepackage[prefix,,postdot,acronym]{glossaries-extra}
    (Alternatively load glossaries-prefix after after glossaries-extra.) The rest of the document is the same as for the base glossaries package, unless you want to switch to using bib2gls. -

    . +

    bib2glsIf you want to switch to If you want to switch to bib2gls, first switch to , first switch to glossaries-extra (as above) but make sure you -include the record package option:

    + id="dx1-226008"> package option:

    \usepackage[\usepackage[record,,prefix,,postdot,acronym]{glossaries-extra}
    Next convert the entries into the bib format required by format required by bib2gls: -

    
    + id="dx1-226010">:
    +

    
        
    convertgls2bib --preamble-only sample-prefix.tex entries.bib

    Replace \makeglossaries with

    -\setabbreviationstyle[acronym]{long-short} -
    \GlsXtrLoadResources[[src=entries]
    remove the entry definitions from the preamble, and replace
    @@ -38928,39 +40463,39 @@ class="cmtt-10">\printacronyms
    with
    -\printunsrtglossary[style=plist] -
    \printunsrtacronyms + id="dx1-226015">
    The document build is now: -

    
    +

    
        
    pdflatex sample-prefix
    bib2gls sample-prefix
    pdflatex sample-prefix

    -

    With

    With bib2gls v2.0+, you don’t need to manually insert the spaces at the end of the prefixes. Instead you + id="dx1-226016"> v2.0+, you don’t need to manually insert the spaces at the end of the prefixes. Instead you can instruct bib2gls to insert them. To try this out, remove the trailing to insert them. To try this out, remove the trailing ~ and \space from the entries.bib file:

    -@entry{sample,
      {the}
    }
    -
    @entry{oeil,
      {les}
    }
    -
    @acronym{svm,
      machine}
    }
    -
    Now add the Now add the append-prefix-field={space or nbsp} resource option:
    + id="dx1-226021"> resource option:
    -\GlsXtrLoadResources[[src=entries,=entries,append-prefix-field={space or]
    See the bib2gls manual for further details. + id="dx1-226024"> manual for further details. + id="x1-226025r40"> -

    +

    🔗sampleaccsupp.tex

    -

    This document uses the

    This document uses the glossaries-accsupp package (see §18 Accessibility Support). That package automatically -loads glossaries and passes all options to the base package. So you can load both packages at once with -just: + id="dx1-227001"> package (see §??sec:accsupp Accessibility Support). That package +automatically loads glossaries and passes all options to the base package. So you can load both packages at once +with just:

    -
    +
     \usepackage[acronym]{glossaries-accsupp}
    -
    -

    This provides additional keys that aren’t available with just the base package, which may be used to provide +

    +

    This provides additional keys that aren’t available with just the base package, which may be used to provide replacement text. The replacement text is inserted using accsupp’s ’s \BeginAccSupp and and \EndAccSupp + id="dx1-227004"> commands. See the accsupp package for further details of those commands. -

    Note that this example document is provided to demonstrate package for further details of those commands. +

    Note that this example document is provided to demonstrate glossaries-accsupp as succinctly as possible. The + id="dx1-227006"> as succinctly as possible. The resulting document isn’t fully accessible as it’s not tagged. See the accessibility and and tagpdf packages for further + id="dx1-227008"> packages for further information about tagging documents. -

    It’s not essential to use

    It’s not essential to use glossaries-accsupp. You can simply insert the replacement text directly into the field + id="dx1-227009">. You can simply insert the replacement text directly into the field values. For example:

    -
    +
     \newglossaryentry{Drive}{
    - 
     name={\BeginAccSupp{Actual=Drive}Dr.\EndAccSupp{}}, - 
     description={Drive} - 
    } - 
    \newglossaryentry{image}{name={sample image}, - 
     description={an example image}, - 
     user1={\protect\BeginAccSupp{Alt={a boilerplate image used in - 
      examples}}\protect\includegraphics - 
      [height=20pt]{example-image}\protect\EndAccSupp{}} - 
    } -
    -

    However, this can cause interference (especially with case-changing). With +

    However, this can cause interference (especially with case-changing). With glossaries-accsupp it’s possible to + id="dx1-227010"> it’s possible to obtain the field values without the accessibility information if required. (If in the future \includegraphics is given extra options to provide replacement text then the image example here won’t be necessary. However, the example can be adapted for images created with TeX code.) -

    The acronym style is set using: +

    The acronym style is set using:

    -
    +
     \setacronymstyle{long-short}
    -
    -

    The first abbreviation is straightforward: +

    +

    The first abbreviation is straightforward:

    -
    +
     \newacronym{eg}{e.g.}{for example}
    -
    -

    The +

    The shortaccess replacement text is automatically set to the long form. The next abbreviation is awkward as + id="dx1-227011"> replacement text is automatically set to the long form. The next abbreviation is awkward as the long form contains formatting commands which can’t be included in the replacement text. This means that the shortaccess key must be supplied:

    + id="dx1-227012"> key must be supplied:

    \newacronym[ Zeichenprogramm}
    In the above two cases, the short form obtained in \gls will use the “E” PDF element. -

    By way of comparison, there are some entries that are technically abbreviations but are defined using +

    By way of comparison, there are some entries that are technically abbreviations but are defined using \newglossaryentry instead of instead of \newacronym. The replacement text is provided in the . The replacement text is provided in the access key: + id="dx1-227015"> key:

    access={Drive}}
    These will use PDF’s “ActualText” element (not “E”). -

    The next entry is a symbol (the integration symbol

    The next entry is a symbol (the integration symbol ). This could be defined simply as:

    -
    +
     \newglossaryentry{int}{name={int},description={integral},
    - 
     symbol={\ensuremath{\int}}} -
    -

    and then referenced in the text like this: + symbol={\ensuremath{\int}}} +

    +

    and then referenced in the text like this:

    -
    +
     Symbol: \gls{int} (\glssymbol{int}).
    -
    -

    This results in the text “Symbol: integral ( +

    This results in the text “Symbol: integral ( ).” However if you copy and paste this from the PDF you will find the resulting text is “Symbol: int (R).” This is what’s actually read out by the text-to-speech system. -

    It would be better if the actual text was the Unicode character 0x222B. This would not only assist the +

    It would be better if the actual text was the Unicode character 0x222B. This would not only assist the text-to-speech system but also make it easier to copy and paste the text. The simplest method is to identify the character by its hexadecimal code, but in order to do this the \BeginAccSupp command needs to have the + id="dx1-227016"> command needs to have the options adjusted. -

    In order to determine whether to use “E”, “ActualText” or “Alt” for a particular field,

    In order to determine whether to use “E”, “ActualText” or “Alt” for a particular field, glossaries-accsupp will + id="dx1-227017"> will check if the command \glsfieldaccsupp exists (where ⟨ exists (where ⟨field⟩ is the internal field label, see table 4.1). Only two -of these commands are predefined: table ??tab:fieldmap). +Only two of these commands are predefined: \glsshortaccsupp and and \glsshortplaccsupp, which is why the + id="dx1-227020">, which is why the shortaccess field uses “E”. If the given command doesn’t exist then the generic field uses “E”. If the given command doesn’t exist then the generic \glsaccsupp command is used + id="dx1-227022"> command is used instead. -

    This means that in order to simply set

    This means that in order to simply set symbolaccess to the hexadecimal character code, I need to provide a + id="dx1-227023"> to the hexadecimal character code, I need to provide a command called \glssymbolaccsupp:

    + id="dx1-227024">:

    \newcommand{\glssymbolaccsupp}[2]{%
     \glsaccessibility[method=hex,unicode]{symbolaccess={222B} class="cmtt-10">}
    -

    The final entry has an image stored in the

    The final entry has an image stored in the user1 key. (The image file is provided with the key. (The image file is provided with the mwe + id="dx1-227027"> package.) This should use “Alt” instead of “ActualText” so I need to define \glsuseriaccsupp: + id="dx1-227028">:

    accsupp}[2]{%
      \glsaccessibility{Alt}{#1}{#2}% @@ -39311,7 +40848,7 @@ class="cmtt-10">}
    The image description is provided in the user1access key:
    + id="dx1-227030"> key:
    \newglossaryentry{sampleimage}{name={sample example image},
     user1={\protect\includegraphics[height=20pt]{example-image}},
     }
    (Note the need to protect the fragile \includegraphics. The alternative is to use . The alternative is to use \glsnoexpandfields before defining the command. See §4.4 §??sec:expansion Expansion.) -

    If you try this example and inspect the +

    If you try this example and inspect the PDF19.4 then +href="#fn4x18" id="fn4x18-bk">18.4 then you will find content like:

    -
    +
     /Span << /ActualText (Doctor) >> BDC
    - 
      BT - 
        /F8 9.9626 Tf - 
        73.102 697.123 Td - 
        [ (Dr) ] TJ - 
      ET - 
    EMC -
    -

    This shows that “ActualText” was used for +

    This shows that “ActualText” was used for \gls{Doctor}. The integral symbol ( ) created with @@ -39369,104 +40907,104 @@ class="cmtt-10">\glssymbol{int} is:

    -
    +
     /Span << /ActualText (\376\377"+) >> BDC
    - 
      BT - 
        /F1 9.9626 Tf - 
        97.732 650.382 Td - 
        [ (R) ] TJ - 
      ET - 
    EMC -
    -

    Again, “ActualText” has been used, but the character code has been supplied. The image created with +  BT +    /F1 9.9626 Tf +    97.732 650.382 Td +    [ (R) ] TJ +  ET +EMC +

    +

    Again, “ActualText” has been used, but the character code has been supplied. The image created with \glsuseri{sampleimage} is:

    -
    +
     /Span << /Alt (a boilerplate image used in examples) >> BDC
    - 
      1 0 0 1 106.588 618.391 cm - 
      q - 
        0.08301 0 0 0.08301 0 0 cm - 
        q - 
          1 0 0 1 0 0 cm - 
          /Im1 Do - 
        Q - 
      Q - 
    EMC -
    -

    This shows that “Alt” has been used. -

    The first use of +

    This shows that “Alt” has been used. +

    The first use of \gls{eg} produces the long form (not reproduced here) followed by the short form:

    -
    +
     /Span << /E (for example) >> BDC
    - 
      BT - 
        /F8 9.9626 Tf - 
        161.687 563.624 Td - 
        [ (e.g.) ] TJ - 
      ET - 
    EMC -
    -

    The subsequent use also has the “E” element: +  BT +    /F8 9.9626 Tf +    161.687 563.624 Td +    [ (e.g.) ] TJ +  ET +EMC +

    +

    The subsequent use also has the “E” element:

    -
    +
     /Span << /E (for example) >> BDC
    - 
      BT - 
        /F8 9.9626 Tf - 
        118.543 551.669 Td - 
        [ (e.g.) ] TJ - 
      ET - 
    EMC -
    -

    Similarly for +

    Similarly for \acrshort{eg}. You can also use the debug=showaccsupp package option. This will show + id="dx1-227034"> package option. This will show the replacement text in the document, but note that this is the content before it’s processed by \BeginAccSupp. -

    If the

    If the \setacronymstyle command is removed (or commented out) then the result would be different. The + id="dx1-227035"> command is removed (or commented out) then the result would be different. The first use of \gls uses “E” for the short form but the subsequent use has “ActualText” instead. This is because without \setacronymstyle the original acronym mechanism is used, which is less sophisticated than the newer + id="dx1-227036"> the original acronym mechanism is used, which is less sophisticated than the newer acronym mechanism that’s triggered with \setacronymstyle. -

    If you want to convert this example so that it uses . +

    If you want to convert this example so that it uses glossaries-extra, make sure you have at least version 1.42 of the extension package.
    -

    -


    +


    glossaries-extraIf you want to convert this example so that it uses glossaries-extra, you need to replace the explicit loading of glossaries-accsupp with an implicit load through the with an implicit load through the accsupp package option: + id="dx1-227039"> package option:

    \usepackage[\usepackage[abbreviations,,accsupp]{glossaries-extra}
    I’m switching from \newacronym to to \newabbreviation, which means that the default category is , which means that the default category is abbreviation + id="dx1-227042"> and also the file extensions are different. If you are using makeglossaries or or makeglossaries-lite you don’t + id="dx1-227044"> you don’t need to worry about it. However, if you’re not using those helper scripts then you will need to adjust the file extensions in your document build process. -

    The style command

    The style command \setacronymstyle{long-short} needs to be replaced with:

    \setabbreviationstyle{long-short}
    This is actually the default so you can simply delete the \setacronymstyle line. Substitute the two instances of \newacronym with with \newabbreviation. For example:
    + id="dx1-227047">. For example:
    -\newabbreviation{eg}{e.g.}{for example} @@ -39515,15 +41053,15 @@ class="cmtt-10"> example}
    Note that for the tikz entry you can now remove the explicit assignment of shortaccess with with glossaries-extra v1.42 as it will strip formatting commands like \emph:
    -\newabbreviation + id="dx1-227050">
     {tikz}{Ti\emph{k}Z}{Ti\emph{k}Z ist Zeichenprogramm}
    It’s also necessary to replace \acrshort, \acrlong and \acrfull with \acrfull with \glsxtrshort, , \glsxtrlong and - and +\glsxtrfull. -

    You may notice a slight difference from the original example. The . +

    You may notice a slight difference from the original example. The shortaccess field now shows ⟨ field now shows ⟨long⟩ (⟨short⟩) instead of just ⟨long⟩. This is because glossaries-extra redefines \glsdefaultshortaccess to include the short + id="dx1-227055"> to include the short form. -

    Now that the extension package is being used, there are some other modifications that would tidy up the +

    Now that the extension package is being used, there are some other modifications that would tidy up the code and fix a few issues. -

    The “Doctor” and “Drive” entries should really be defined as abbreviations but they shouldn’t be -expanded on first use. The

    The “Doctor” and “Drive” entries should really be defined as abbreviations but they shouldn’t be +expanded on first use. The short-nolong style can achieve this and it happens to be the default style -for the style can achieve this and it happens to be the default style +for the acronym category. This means that you can simply replace the “Doctor” definition with: + id="dx1-227057"> category. This means that you can simply replace the “Doctor” definition with:

    \newacronym{Doctor}{Dr}{Doctor}
    The first use of \gls{Doctor}
    is just “Dr”. This means that the “E” element will be used instead of “ActualText”. Now I don’t need to supply the accessibility text as its obtained from the long form. -

    The “Drive” entry can be similarly defined but it has the awkward terminating full stop. This means that I +

    The “Drive” entry can be similarly defined but it has the awkward terminating full stop. This means that I had to omit the end of sentence terminator in:

    -
    +
     \gls{Doctor} Smith lives at 2, Blueberry \gls{Drive}
    -
    -

    This looks odd when reading the document source and it’s easy to forgot. This is very similar to the situation +

    +

    This looks odd when reading the document source and it’s easy to forgot. This is very similar to the situation in the sample-dot-abbr.tex example. I can again use the sample-dot-abbr.tex example. I can again use the discardperiod attribute, but I need to assign a + id="dx1-227059"> attribute, but I need to assign a different category so that it doesn’t interfere with the “Doctor” entry. -

    The category is simply a label that’s used in the construction of some internal command names. This means -that it must be fully expandable, but I can choose whatever label I like (

    The category is simply a label that’s used in the construction of some internal command names. This means +that it must be fully expandable, but I can choose whatever label I like (general, , abbreviation, , acronym, , index, -, +symbol and and number are used by various commands provided by are used by various commands provided by glossaries-extra). -

    In this case, I’ve decided to have a category called

    In this case, I’ve decided to have a category called shortdotted to indicate an abbreviation that ends with a dot but only the short form is shown on first use:

    -\setabbreviationstyle[shortdotted]{short-nolong-noreg} -
    \glssetcategoryattribute{shortdotted}{discardperiod}{true} -
    \newabbreviation[category=shortdotted]{Drive}{Dr.\@}{Drive}
    In the sample-dot-abbr.tex example, I also used the sample-dot-abbr.tex example, I also used the insertdots attribute to automatically insert the dots and -add the space factor (which is adjusted if attribute to automatically insert the dots and +add the space factor (which is adjusted if discardperiod discards a period). In this case I’m inserting the dot + id="dx1-227070"> discards a period). In this case I’m inserting the dot manually so I’ve also added the space factor with \@ in case the abbreviation is used mid-sentence. For + id="dx1-227071"> in case the abbreviation is used mid-sentence. For example: -
    +
     \gls{Doctor} Smith lives at 2, Blueberry \gls{Drive}. Next sentence.
    - 
    \gls{Doctor} Smith lives at 2, Blueberry \gls{Drive} end of sentence. -
    -

    (The spacing is more noticeable if you first switch to a monospaced font with +

    (The spacing is more noticeable if you first switch to a monospaced font with \ttfamily.) -

    The “e.g.” abbreviation similarly ends with a dot. It’s not usual to write “for example (e.g.)” in a +

    The “e.g.” abbreviation similarly ends with a dot. It’s not usual to write “for example (e.g.)” in a document, so it really ought to have the same shortdotted category, but it has a long-short form for illustrative purposes in this test document. In this case I need to choose another category so that I can apply a different style. For example:

    -\setabbreviationstyle[longshortdotted]{long-short} -
    \glssetcategoryattribute{longshortdotted}{discardperiod}{true} -
    \newabbreviation[category=longshortdotted]{e.g.}{e.g.\@}{for
    example}
    -

    To further illustrate categories, let’s suppose the symbol and image should be in the

    To further illustrate categories, let’s suppose the symbol and image should be in the name field instead of the + id="dx1-227075"> field instead of the symbol and and user1 fields. Now the fields. Now the \glssymbolaccsupp and \glsuseriaccsupp commands won’t be used. I can’t deal with both cases if I just provide \glsnameaccsupp. -

    I could provide category-field versions, such as

    I could provide category-field versions, such as \glsxtrsymbolnameaccsupp, but remember that this only covers accessing the name field, which is typically only done in the glossary. I would also need similar commands + id="dx1-227078"> field, which is typically only done in the glossary. I would also need similar commands for the first, , firstplural, , text and and plural keys. This is quite complicated, but since I don’t need to worry -about any of the other fields it’s simpler to just provide the keys. This is quite complicated, but since I don’t need to worry +about any of the other fields it’s simpler to just provide the \glsxtrcategoryaccsupp version: + id="dx1-227083"> version:

    \newcommand{\newcommand{\glsxtrsymbolaccsupp}[2]{%
     \glsaccessibility[method=hex,unicode]{ActualText}{#1}{#2}%
    }
    \newcommand{\newcommand{\glsxtrimageaccsupp}[2]{%
      \glsaccessibility{Alt}{#1}{#2}%
    }

    \newglossaryentry{int}{\newglossaryentry{int}{category=symbol, @@ -39744,7 +41282,7 @@ class="cmtt-10"> description={integral} class="cmtt-10">}


    \newglossaryentry{sampleimage}{\newglossaryentry{sampleimage}{category=image, @@ -39771,28 +41309,28 @@ class="cmtt-10"> examples} class="cmtt-10">}
    If it’s necessary to provide support for additional fields, then the category-field command -\glsxtrcategory⟩⟨fieldaccsupp could be used to override the more general category command - could be used to override the more general category command +\glsxtrcategoryaccsupp. + id="dx1-227087">. -

    + id="x1-227088r41"> +

    🔗sample-ignored.tex

    -

    This document defines an ignored glossary for common terms that don’t need a definition. The document build +

    This document defines an ignored glossary for common terms that don’t need a definition. The document build is: -

    
    +

    
        
    pdflatex sample-ignored
    makeglossaries sample-ignored
    pdflatex sample-ignored @@ -39802,39 +41340,40 @@ A new “ignored” glossary is defined with:

    \newignoredglossary{common}
    There are no associated files with an ignored glossary. An entry is defined with this as its glossary type: -
    +
     \newglossaryentry{commonex}{type=common,name={common term}}
    -
    -

    Note that the +

    Note that the description key isn’t required. This term may be referenced with key isn’t required. This term may be referenced with \gls (which is useful for consistent formatting) but it won’t be indexed. -

    + id="x1-228003r42"> +

    🔗sample-entrycount.tex

    -

    This document uses

    This document uses \glsenableentrycount and and \cgls (described in §14.1 Counting the Number of Times an -Entry has been Used (First Use Flag Unset)) so that acronyms only used once don’t appear in the list of -acronyms. The document build is: -

    
    + id="dx1-229002"> (described in §??sec:enableentrycount Counting the
    +Number of Times an Entry has been Used (First Use Flag Unset)) so that acronyms only used once don’t
    +appear in the list of acronyms. The document build is:
    +

    
        
    pdflatex sample-entrycount
    pdflatex sample-entrycount
    makeglossaries sample-entrycount @@ -39844,39 +41383,40 @@ acronyms. The document build is: Note the need to call LaTeX twice before makeglossaries, and then a final LaTeX call is required at the + id="dx1-229003">, and then a final LaTeX call is required at the end. -

    The

    The glossaries-extra package has additions that extend this mechanism and comes with some other sample files related to entry counting.
    -

    -

    If you switch to

    +

    If you switch to bib2gls you can use record counting instead. See the you can use record counting instead. See the bib2gls manual for further details. + id="dx1-229005"> manual for further details.
    -

    +

    -

    -

    Top

    20.

    +

    Top

    19. Troubleshooting

    -

    In addition to the sample files listed in §19

    In addition to the sample files listed in §??sec:samples Sample Documents, the glossaries package comes with some -minimal example files, glossaries package comes with +some minimal example files, minimalgls.tex, mwe-gls.tex, mwe-acr.tex and mwe-acr-desc.tex, which can be -used for testing. These should be located in the mwe-acr-desc.tex, which can +be used for testing. These should be located in the samples subdirectory (folder) of the glossaries documentation directory. The location varies according to your operating system and TeX installation. For example, on my @@ -39885,38 +41425,38 @@ class="cmtt-10">/usr/local/texlive/2014/texmf-dist/doc/latex/glossaries/. makeglossariesgui application can also be used to test for various problems. Further information on + id="dx1-230001"> application can also be used to test for various problems. Further information on debugging LaTeX code is available at http://www.dickimaw-books.com/latex/minexample/. -

    If you have any problems, please first consult the

    If you have any problems, please first consult the glossaries FAQ. If that doesn’t help, try posting your query to somewhere like the comp.text.tex newsgroup, the LaTeX Community Forum or TeX on StackExchange. +href="https://latex.org/forum/" >LaTeX Community Forum or TeX on StackExchange. Bug reports can be submitted via my package bug report form. +href="https://www.dickimaw-books.com/bug-report.html" >my package bug report form.

    Top

    Index

    + id="x1-23100019">Index Symbols
    \’  1
    +href="glossaries-user.html#dx1-219002" >1
    \@  2, 3, 4, 5, 6
    +href="glossaries-user.html#dx1-189026" >2, 3, 4, 5, 6
    \@gls@codepage  16
    class="tcrm-0900">†abbreviation styles:
        footnote  17
    +href="glossaries-user.html#dx1-184006" >17
    +    long-noshort  18
        long-short  18, 19, 20
    +href="glossaries-user.html#dx1-178029" >19, 20, 21
        long-short-sc  21
    +href="glossaries-user.html#dx1-181026" >22
        long-short-sc-desc  22
    +href="glossaries-user.html#dx1-182013" >23
        postfootnote  23
    +href="glossaries-user.html#dx1-184005" >24
        short-nolong  24, 25
    +href="glossaries-user.html#dx1-135008" >25, 26, 27
        short-sc-footnote  26
    +href="glossaries-user.html#dx1-184007" >28
        short-sc-footnote-desc  27, 28, 29, 30
    +href="glossaries-user.html#dx1-184002" >29, 30, 31, 32
        short-sc-postfootnote-desc  31, 32, 33, 34
    +href="glossaries-user.html#dx1-184004" >33, 34, 35, 36
    \Ac  35
    +href="glossaries-user.html#dx1-136065" >37
    \ac  36
    +href="glossaries-user.html#dx1-136063" >38
    accessibility package  37, 38, 39
    +href="glossaries-user.html#dx1-175057" >39, 40, 41
    accsupp package  40, 41, 42, 43, 44
    +href="glossaries-user.html#dx1-175002" >42, 43, 44, 45, 46
    \Acf  45
    +href="glossaries-user.html#dx1-136057" >47
    \acf  46
    +href="glossaries-user.html#dx1-136055" >48
    \Acfp  47
    -\acfp  48
    +href="glossaries-user.html#dx1-136061" >49
    +\acfp  50
    \Acl  49
    +href="glossaries-user.html#dx1-136049" >51
    \acl  50
    +href="glossaries-user.html#dx1-136047" >52
    \Aclp  51
    +href="glossaries-user.html#dx1-136053" >53
    \aclp  52
    +href="glossaries-user.html#dx1-136051" >54
    \Acp  53
    +href="glossaries-user.html#dx1-136069" >55
    \acp  54
    +href="glossaries-user.html#dx1-136067" >56
    \ACRfull  55
    +href="glossaries-user.html#dx1-136033" >57
    \Acrfull  56, 57
    +href="glossaries-user.html#dx1-136032" >58, 59
    \acrfull  58, 59, 60, 61, 62, 63, 64, 65, 66
    +href="glossaries-user.html#dx1-136029" >60, 61, 62, 63, 64, 65, 66, 67, 68
    \acrfullfmt  67, 68, 69
    +href="glossaries-user.html#dx1-136030" >69, 70, 71
    \acrfullformat  70, 71
    +href="glossaries-user.html#dx1-136031" >72, 73
    \ACRfullpl  72
    +href="glossaries-user.html#dx1-136036" >74
    \Acrfullpl  73, 74
    +href="glossaries-user.html#dx1-136035" >75, 76
    \acrfullpl  75, 76
    +href="glossaries-user.html#dx1-136034" >77, 78
    \ACRlong  77
    +href="glossaries-user.html#dx1-136022" >79
    \Acrlong  78, 79
    +href="glossaries-user.html#dx1-136021" >80, 81
    \acrlong  80, 81, 82, 83, 84
    +href="glossaries-user.html#dx1-136017" >82, 83, 84, 85, 86
    \ACRlongpl  85
    +href="glossaries-user.html#dx1-136025" >87
    \Acrlongpl  86, 87
    +href="glossaries-user.html#dx1-136024" >88, 89
    \acrlongpl  88, 89
    +href="glossaries-user.html#dx1-136023" >90, 91
    acronym styles:
        dua  90, 91, 92, 93
    +href="glossaries-user.html#dx1-137003" >92, 93, 94, 95, 96
        dua-desc  94, 95
    +href="glossaries-user.html#dx1-138054" >97, 98
        footnote  96, 97, 98
    +href="glossaries-user.html#dx1-138020" >99, 100, 101
        footnote-desc  99
    +href="glossaries-user.html#dx1-138074" >102
        footnote-sc  100
    +href="glossaries-user.html#dx1-138065" >103
        footnote-sc-desc  101, 102, 103, 104, 105
    +href="glossaries-user.html#dx1-138075" >104, 105, 106, 107, 108
        footnote-sm  106
    +href="glossaries-user.html#dx1-138066" >109
        footnote-sm-desc  107
    +href="glossaries-user.html#dx1-138076" >110
        long-sc-short  108, 109, 110, 111, 112
    +href="glossaries-user.html#dx1-138007" >111, 112, 113, 114, 115
        long-sc-short-desc  113, 114
    +href="glossaries-user.html#dx1-138037" >116, 117
        long-short  115, 116, 117, 118, 119, 120
    +href="glossaries-user.html#dx1-132069" >118, 119, 120, 121, 122, 123
        long-short-desc  121, 122, 123
    +href="glossaries-user.html#dx1-138036" >124, 125, 126
        long-sm-short  124, 125, 126
    +href="glossaries-user.html#dx1-138012" >127, 128, 129
        long-sm-short-desc  127
    +href="glossaries-user.html#dx1-138038" >130
        long-sp-short  128, 129, 130
    +href="glossaries-user.html#dx1-138024" >131, 132, 133
        long-sp-short-desc  131
    +href="glossaries-user.html#dx1-138039" >134
        sc-short-long  132
    +href="glossaries-user.html#dx1-138031" >135
        sc-short-long-desc  133
    +href="glossaries-user.html#dx1-138050" >136
        short-long  134
    +href="glossaries-user.html#dx1-138030" >137
        short-long-desc  135
    +href="glossaries-user.html#dx1-138049" >138
        sm-short-long  136
    +href="glossaries-user.html#dx1-138032" >139
        sm-short-long-desc  137
    +href="glossaries-user.html#dx1-138051" >140
    \acronymentry  138, 139, 140, 141, 142, 143
    +href="glossaries-user.html#dx1-137013" >141, 142, 143, 144, 145, 146
    \acronymfont  144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154
    -\acronymname  155, 156
    +href="glossaries-user.html#dx1-99004" >147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157
    +\acronymname  158, 159
    \acronymsort  157, 158, 159, 160, 161
    +href="glossaries-user.html#dx1-137015" >160, 161, 162, 163, 164
    \acronymtype  162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174
    +href="glossaries-user.html#dx1-44007" >165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177
    \ACRshort  175
    +href="glossaries-user.html#dx1-136011" >178
    \Acrshort  176, 177
    +href="glossaries-user.html#dx1-136010" >179, 180
    \acrshort  178, 179, 180, 181, 182, 183, 184
    +href="glossaries-user.html#dx1-136005" >181, 182, 183, 184, 185, 186, 187
    \ACRshortpl  185
    +href="glossaries-user.html#dx1-136014" >188
    \Acrshortpl  186, 187
    +href="glossaries-user.html#dx1-136013" >189, 190
    \acrshortpl  188, 189
    +href="glossaries-user.html#dx1-136012" >191, 192
    \Acs  190
    +href="glossaries-user.html#dx1-136041" >193
    \acs  191
    +href="glossaries-user.html#dx1-136039" >194
    \Acsp  192
    +href="glossaries-user.html#dx1-136045" >195
    \acsp  193
    +href="glossaries-user.html#dx1-136043" >196
    \addcontentsline  194
    +href="glossaries-user.html#dx1-41003" >197
    \alsoname  195
    +href="glossaries-user.html#dx1-207001" >198
    \altnewglossary  196
    +href="glossaries-user.html#dx1-145008" >199
    amsgen package  197, 198, 199, 200, 201
    +href="glossaries-user.html#dx1-13" >200, 201, 202, 203, 204
    amsmath package  202, 203
    +href="glossaries-user.html#dx1-130006" >205, 206
    \andname  204
    +href="glossaries-user.html#dx1-148010" >207
    arara  205, 206, 207, 208, 209, 210, 211, 212, 213
    +href="glossaries-user.html#dx1-4018" >208, 209, 210, 211, 212, 213, 214, 215, 216
    array package  214, 215
    +href="glossaries-user.html#dx1-158006" >217, 218
    \AtBeginDocument  216
    +href="glossaries-user.html#dx1-123010" >219
    atom  217
    +href="glossaries-user.html#dx1-38006" >220
    auto-completion  218
    +href="glossaries-user.html#dx1-35002" >221

    B -\babel  219
    babel package  220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249
    +href="glossaries-user.html#dx1-7018" >222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252
    beamer class  250, 251, 252, 253
    +href="glossaries-user.html#dx1-130004" >253, 254, 255, 256
    beamer package  254
    +href="glossaries-user.html#dx1-14048" >257
    \BeginAccSupp  255, 256, 257, 258
    +href="glossaries-user.html#dx1-175072" >258, 259, 260, 261
    bib2gls  259, 262, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480
    +class="cmbx-10">263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497
        --group  481, 482, 483, 484, 485
    +href="glossaries-user.html#dx1-9033" >498, 499, 500, 501, 502
        --map-format  486
    +href="glossaries-user.html#dx1-193037" >503
        -g  487
    +href="glossaries-user.html#dx1-203092" >504
        -m  488
    +href="glossaries-user.html#dx1-193038" >505
    bib2gls entry types
        @abbreviation  489, 490, 491, 492, 493, 494, 495
    +href="glossaries-user.html#dx1-9008" >506, 507, 508, 509, 510, 511, 512
        @acronym  496, 497, 498, 499, 500, 501, 502, 503
    +href="glossaries-user.html#dx1-182048" >513, 514, 515, 516, 517, 518, 519, 520
        @dualabbreviationentry  504, 505, 506
    +href="glossaries-user.html#dx1-196012" >521, 522, 523
        @dualentry  507, 508, 509
    +href="glossaries-user.html#dx1-197014" >524, 525, 526
        @dualindexabbreviation  510, 511
    +href="glossaries-user.html#dx1-196038" >527, 528
        @entry  512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552
    - - +href="glossaries-user.html#dx1-9006" >529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569
        @index  553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563
    +href="glossaries-user.html#dx1-11089" >570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580
    + +     @indexplural  564, 565, 566, 567
    +href="glossaries-user.html#dx1-205065" >581, 582, 583, 584
        @preamble  568, 569, 570, 571, 572, 573, 574, 575
    +href="glossaries-user.html#dx1-200021" >585, 586, 587, 588, 589, 590, 591, 592
        @symbol  576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589
    +href="glossaries-user.html#dx1-9007" >593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606
    booktabs package  590, 591, 592, 593
    +href="glossaries-user.html#dx1-157006" >607, 608, 609, 610
    \bottomrule  594
    +href="glossaries-user.html#dx1-159014" >611

    C categories
        abbreviation  595, 596, 597, 598, 599, 600, 601, 602, 603
    +href="glossaries-user.html#dx1-178026" >612, 613, 614, 615, 616, 617, 618, 619, 620
        acronym  604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616
    +href="glossaries-user.html#dx1-178022" >621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633
        general  617, 618, 619, 620
    +href="glossaries-user.html#dx1-186018" >634, 635, 636, 637
        index  621
    +href="glossaries-user.html#dx1-227063" >638
        number  622
    +href="glossaries-user.html#dx1-227065" >639
        symbol  623, 624, 625
    +href="glossaries-user.html#dx1-205031" >640, 641, 642
    category attributes  626
    +href="glossaries-user.html#dx1-135038" >643
        discardperiod  627, 628, 629, 630, 631
    +href="glossaries-user.html#dx1-188006" >644, 645, 646, 647, 648
        glossdesc  632, 633, 634, 635, 636
    +href="glossaries-user.html#dx1-11039" >649, 650, 651, 652, 653
        glossdescfont  637
    +href="glossaries-user.html#dx1-11040" >654
        glossname  638
    +href="glossaries-user.html#dx1-11054" >655
        glosssymbolfont  639
    +href="glossaries-user.html#dx1-192050" >656
        hyperoutside  640
    +href="glossaries-user.html#dx1-28" >657
        indexonlyfirst  641
    +href="glossaries-user.html#dx1-65007" >658
        insertdots  642, 643, 644, 645, 646
    +href="glossaries-user.html#dx1-188013" >659, 660, 661, 662, 663
        nohyperfirst  647
    +href="glossaries-user.html#dx1-34024" >664
        noshortplural  648
    +href="glossaries-user.html#dx1-188008" >665
        pluraldiscardperiod  649
    +href="glossaries-user.html#dx1-188009" >666
        retainfirstuseperiod  650
    +href="glossaries-user.html#dx1-188010" >667
        textformat  651
    +href="glossaries-user.html#dx1-29" >668
    \cGls  652
    +href="glossaries-user.html#dx1-143011" >669
    \cgls  653, 654
    +href="glossaries-user.html#dx1-143009" >670, 671
    \cGlsformat  655
    +href="glossaries-user.html#dx1-143015" >672
    \cglsformat  656
    +href="glossaries-user.html#dx1-143013" >673
    \cGlspl  657
    +href="glossaries-user.html#dx1-143012" >674
    \cglspl  658
    +href="glossaries-user.html#dx1-143010" >675
    \cGlsplformat  659
    +href="glossaries-user.html#dx1-143016" >676
    \cglsplformat  660
    +href="glossaries-user.html#dx1-143014" >677
    \chapter  661, 662
    +href="glossaries-user.html#dx1-144077" >678, 679
    \chapter*  663, 664
    +href="glossaries-user.html#dx1-44012" >680, 681
    classicthesis package  665, 666, 667, 668, 669
    +href="glossaries-user.html#dx1-50002" >682, 683, 684, 685, 686
    convertgls2bib  670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687
    +class="cmbx-10">687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704
    \currentglossary  688
    +href="glossaries-user.html#dx1-165071" >705

    D datatool package  689, 690, 691, 692, 693
    +href="glossaries-user.html#dx1-12" >706, 707, 708, 709, 710
    datatool-base package  694
    +href="glossaries-user.html#dx1-11" >711
    \DeclareAcronymList  695, 696, 697, 698
    +href="glossaries-user.html#dx1-94003" >712, 713, 714, 715
    \defentryfmt  699
    +href="glossaries-user.html#dx1-136001" >716
    \defglsentry  700, 701
    +href="glossaries-user.html#dx1-3035" >717, 718
    \defglsentryfmt  702, 703, 704, 705, 706, 707, 708, 709, 710
    +href="glossaries-user.html#dx1-129025" >719, 720, 721, 722, 723, 724, 725, 726, 727
    \DefineAcronymSynonyms  711
    +href="glossaries-user.html#dx1-95001" >728
    \delimN  712
    +href="glossaries-user.html#dx1-165055" >729
    \delimR  713
    +href="glossaries-user.html#dx1-165056" >730
    \descriptionname  714
    +href="glossaries-user.html#dx1-14028" >731
    \dgls  715
    +href="glossaries-user.html#dx1-24025" >732
    \dicei  716
    +href="glossaries-user.html#dx1-214023" >733
    doc package  717, 718, 719, 720
    +href="glossaries-user.html#dx1-19" >734, 735, 736, 737
    \dtlcompare  721
    +href="glossaries-user.html#dx1-144060" >738
    \dtlicompare  722
    +href="glossaries-user.html#dx1-144058" >739
    \dtlletterindexcompare  723
    +href="glossaries-user.html#dx1-144056" >740
    \dtlwordindexcompare  724
    +href="glossaries-user.html#dx1-144055" >741

    E \edef  725
    +href="glossaries-user.html#dx1-132014" >742
    \emph  726
    +href="glossaries-user.html#dx1-129045" >743
    encap  727
    +href="glossaries-user.html#dx1-150002" >744
    \EndAccSupp  728, 729
    +href="glossaries-user.html#dx1-175075" >745, 746
    \ensuremath  730, 731
    +href="glossaries-user.html#dx1-192047" >747, 748
    entry location  732
    +class="cmbx-10">749
    \entryname  733
    +href="glossaries-user.html#dx1-14027" >750
    environments:
        theglossary  734
    +href="glossaries-user.html#dx1-165004" >751
    etoolbox package  735, 736, 737, 738, 739, 740, 741, 742
    +href="glossaries-user.html#dx1-7" >752, 753, 754, 755, 756, 757, 758, 759
    Extended Latin Alphabet  743
    +class="cmbx-10">760
    extended Latin character  744, 761, 745, 746, 747, 748, 749, 750
    +class="cmbx-10">762, 763, 764, 765, 766, 767

    F file types
        alg  751
    +href="glossaries-user.html#dx1-16082" >768
        aux  752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777
    +href="glossaries-user.html#dx1-3003" >769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794
        bib  778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824
    +href="glossaries-user.html#dx1-3002" >795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844
        dict  825
    +href="glossaries-user.html#dx1-15004" >845
        docdefs  826, 827, 828
    +href="glossaries-user.html#dx1-31002" >846, 847, 848
        glg  829, 830, 831, 832
    +href="glossaries-user.html#dx1-16081" >849, 850, 851, 852
        glg2  833
    +href="glossaries-user.html#dx1-23" >853
        glo  834, 835, 836, 837, 838, 839, 840
    +href="glossaries-user.html#dx1-7025" >854, 855, 856, 857, 858, 859, 860
        glo2  841
    - - +href="glossaries-user.html#dx1-22" >861
        gls  842, 843
    +href="glossaries-user.html#dx1-19017" >862, 863
    + +     gls2  844
    +href="glossaries-user.html#dx1-21" >864
        glsdefs  845, 846, 847, 848, 849
    +href="glossaries-user.html#dx1-23004" >865, 866, 867, 868
        glslabels  850
    +href="glossaries-user.html#dx1-35001" >869
        glstex  851, 852
    +href="glossaries-user.html#dx1-24004" >870, 871
        ist  853, 854, 855, 856, 857, 858, 859
    +href="glossaries-user.html#dx1-7026" >872, 873, 874, 875, 876, 877, 878
        ldf  860
    +href="glossaries-user.html#dx1-15003" >879
        lua  861
    +href="glossaries-user.html#dx1-18005" >880
        tex  862, 863, 864, 865, 866, 867, 868, 869, 870
    +href="glossaries-user.html#dx1-3008" >881, 882, 883, 884, 885, 886, 887, 888, 889
        toc  871, 872
    +href="glossaries-user.html#dx1-181016" >890, 891
        xdy  873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888
    +href="glossaries-user.html#dx1-8027" >892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907
    first use  889
    +href="glossaries-user.html#dx1-3021" >908
        flag  890
    +href="glossaries-user.html#dx1-3029" >909
        text  891
    +href="glossaries-user.html#dx1-3030" >910
    \firstacronymfont  892, 893, 894, 895, 896, 897, 898
    +href="glossaries-user.html#dx1-132064" >911, 912, 913, 914, 915, 916, 917
    flowfram package  899
    +href="glossaries-user.html#dx1-160011" >918
    fmtcount package  900, 901, 902, 903
    +href="glossaries-user.html#dx1-168050" >919, 920, 921, 922
    fontspec package  904, 905
    +href="glossaries-user.html#dx1-169006" >923
    \footnote  906, 907, 908, 909, 910, 911, 912, 913, 914, 915
    +href="glossaries-user.html#dx1-138067" >924, 925, 926, 927, 928, 929, 930, 931, 932, 933
    +\forallabbreviationlists  934
    \forallacronyms  916
    +href="glossaries-user.html#dx1-171002" >935
    \forallglossaries  917
    +href="glossaries-user.html#dx1-171001" >936
    \forallglsentries  918
    +href="glossaries-user.html#dx1-171008" >937
    \foreignlanguage  919, 920
    +href="glossaries-user.html#dx1-197031" >938, 939
    \forglsentries  921
    +href="glossaries-user.html#dx1-171006" >940

    G \Genacrfullformat  922
    +href="glossaries-user.html#dx1-132065" >941
    \genacrfullformat  923, 924, 925, 926, 927, 928
    +href="glossaries-user.html#dx1-132059" >942, 943, 944, 945, 946, 947
    \GenericAcronymFields  929, 930, 931
    +href="glossaries-user.html#dx1-139022" >948, 949, 950
    \Genplacrfullformat  932
    +href="glossaries-user.html#dx1-132066" >951
    \genplacrfullformat  933, 934
    +href="glossaries-user.html#dx1-132061" >952, 953
    \glolinkprefix  935, 936
    +href="glossaries-user.html#dx1-129086" >954, 955
    glossaries package  937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953
    +href="glossaries-user.html#dx1-12001" >956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972
    glossaries-accsupp package  954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969
    +href="glossaries-user.html#dx1-30014" >973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988
    glossaries-babel package  970, 971
    +href="glossaries-user.html#dx1-32008" >989, 990
    glossaries-extra-bib2gls package  972
    +href="glossaries-user.html#dx1-223041" >991
    glossaries-extra-stylemods package  973, 974, 975
    +href="glossaries-user.html#dx1-61001" >992, 993, 994
    glossaries-polyglossia package  976
    +href="glossaries-user.html#dx1-32010" >995
    glossaries-prefix package  977, 978, 979, 980, 981, 982, 983, 984, 985, 986
    +href="glossaries-user.html#dx1-104001" >996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005
    +\glossariesextrasetup  1006
    glossary counters:
        glossaryentry  987
    +href="glossaries-user.html#dx1-47003" >1007
        glossarysubentry  988
    +href="glossaries-user.html#dx1-49003" >1008
    glossary package  989, 990, 991, 992, 993
    +href="glossaries-user.html#dx1-108001" >1009, 1010, 1011, 1012
    glossary styles:
    -    altlist  994, 995, 996, 997, 998, 999
    +    altlist  1013, 1014, 1015, 1016, 1017, 1018
        altlistgroup  1000, 1001
    +href="glossaries-user.html#dx1-156030" >1019, 1020
        altlisthypergroup  1002
    +href="glossaries-user.html#dx1-156032" >1021
        altlong4col  1003, 1004, 1005
    +href="glossaries-user.html#dx1-155025" >1022, 1023, 1024
        altlong4col-booktabs  1006
    +href="glossaries-user.html#dx1-159031" >1025
        altlong4colborder  1007
    +href="glossaries-user.html#dx1-157043" >1026
        altlong4colheader  1008, 1009
    +href="glossaries-user.html#dx1-157045" >1027, 1028
        altlong4colheaderborder  1010, 1011
    +href="glossaries-user.html#dx1-157047" >1029, 1030
        altlongragged4col  1012, 1013, 1014
    +href="glossaries-user.html#dx1-158030" >1031, 1032, 1033
        altlongragged4col-booktabs  1015, 1016
    +href="glossaries-user.html#dx1-159037" >1034, 1035
        altlongragged4colborder  1017
    +href="glossaries-user.html#dx1-158034" >1036
        altlongragged4colheader  1018, 1019, 1020
    +href="glossaries-user.html#dx1-158036" >1037, 1038, 1039
        altlongragged4colheaderborder  1021
    +href="glossaries-user.html#dx1-158038" >1040
        altsuper4col  1022, 1023, 1024
    +href="glossaries-user.html#dx1-155026" >1041, 1042, 1043
        altsuper4colborder  1025
    +href="glossaries-user.html#dx1-160048" >1044
        altsuper4colheader  1026
    +href="glossaries-user.html#dx1-160050" >1045
        altsuper4colheaderborder  1027
    +href="glossaries-user.html#dx1-160052" >1046
        altsuperragged4col  1028, 1029, 1030
    +href="glossaries-user.html#dx1-161031" >1047, 1048, 1049
        altsuperragged4colborder  1031
    +href="glossaries-user.html#dx1-161033" >1050
        altsuperragged4colheader  1032
    +href="glossaries-user.html#dx1-161035" >1051
        altsuperragged4colheaderborder  1033
    +href="glossaries-user.html#dx1-161037" >1052
        alttree  1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043
    +href="glossaries-user.html#dx1-155029" >1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062
        alttreegroup  1044, 1045, 1046
    +href="glossaries-user.html#dx1-162055" >1063, 1064, 1065
        alttreehypergroup  1047, 1048, 1049, 1050
    +href="glossaries-user.html#dx1-162057" >1066, 1067, 1068, 1069
        bookindex  1051, 1052, 1053
    +href="glossaries-user.html#dx1-11072" >1070, 1071, 1072
        index  1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065
    +href="glossaries-user.html#dx1-54004" >1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084
        indexgroup  1066, 1067, 1068
    +href="glossaries-user.html#dx1-144101" >1085, 1086, 1087, 1088
        indexhypergroup  1069, 1070, 1071
    +href="glossaries-user.html#dx1-162007" >1089, 1090, 1091
        inline  1072, 1073, 1074
    +href="glossaries-user.html#dx1-164002" >1092, 1093, 1094
        list  1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087
    +href="glossaries-user.html#dx1-53003" >1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107
        listdotted  1088, 1089, 1090, 1091, 1092
    +href="glossaries-user.html#dx1-155039" >1108, 1109, 1110, 1111, 1112
        listgroup  1093, 1094, 1095, 1096
    +href="glossaries-user.html#dx1-74020" >1113, 1114, 1115, 1116
        listhypergroup  1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104
    +href="glossaries-user.html#dx1-156019" >1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124
        long  1105, 1106, 1107, 1108, 1109, 1110
    +href="glossaries-user.html#dx1-155028" >1125, 1126, 1127, 1128, 1129, 1130
        long-booktabs  1111, 1112
    +href="glossaries-user.html#dx1-159024" >1131, 1132
        long-name-desc-sym-loc  1113
    +href="glossaries-user.html#dx1-222011" >1133
        long3col  1114, 1115, 1116, 1117, 1118
    +href="glossaries-user.html#dx1-155012" >1134, 1135, 1136, 1137, 1138
        long3col-booktabs  1119
    +href="glossaries-user.html#dx1-159026" >1139
        long3colborder  1120, 1121
    +href="glossaries-user.html#dx1-155014" >1140, 1141
        long3colheader  1122, 1123, 1124, 1125
    +href="glossaries-user.html#dx1-155013" >1142, 1143, 1144, 1145
        long3colheaderborder  1126, 1127
    +href="glossaries-user.html#dx1-155015" >1146, 1147
        long4col  1128, 1129, 1130, 1131, 1132
    +href="glossaries-user.html#dx1-155023" >1148, 1149, 1150, 1151, 1152
        long4col-booktabs  1133, 1134
    +href="glossaries-user.html#dx1-159029" >1153, 1154
        long4colborder  1135, 1136
    +href="glossaries-user.html#dx1-157033" >1155, 1156
        long4colheader  1137, 1138, 1139, 1140
    +href="glossaries-user.html#dx1-157035" >1157, 1158, 1159, 1160
        long4colheaderborder  1141, 1142, 1143
    -    longborder  1144
    +href="glossaries-user.html#dx1-157037" >1161, 1162, 1163
    +    longborder  1164
        longheader  1145, 1146, 1147, 1148
    +href="glossaries-user.html#dx1-157015" >1165, 1166, 1167, 1168
        longheaderborder  1149, 1150
    +href="glossaries-user.html#dx1-157017" >1169, 1170
        longragged  1151, 1152, 1153, 1154
    +href="glossaries-user.html#dx1-158010" >1171, 1172, 1173, 1174
        longragged-booktabs  1155
    +href="glossaries-user.html#dx1-159033" >1175
        longragged3col  1156, 1157, 1158, 1159
    +href="glossaries-user.html#dx1-158019" >1176, 1177, 1178, 1179
        longragged3col-booktabs  1160
    +href="glossaries-user.html#dx1-159035" >1180
        longragged3colborder  1161
    +href="glossaries-user.html#dx1-158024" >1181
        longragged3colheader  1162, 1163, 1164
    +href="glossaries-user.html#dx1-158026" >1182, 1183, 1184
        longragged3colheaderborder  1165
    +href="glossaries-user.html#dx1-158028" >1185
        longraggedborder  1166
    +href="glossaries-user.html#dx1-158013" >1186
        longraggedheader  1167, 1168, 1169
    +href="glossaries-user.html#dx1-158015" >1187, 1188, 1189
        longraggedheaderborder  1170
    +href="glossaries-user.html#dx1-158017" >1190
        mcolalttree  1171
    +href="glossaries-user.html#dx1-163039" >1191
        mcolalttreegroup  1172
    +href="glossaries-user.html#dx1-163041" >1192
        mcolalttreehypergroup  1173
    +href="glossaries-user.html#dx1-163043" >1193
        mcolalttreespannav  1174
    +href="glossaries-user.html#dx1-163044" >1194
        mcolindex  1175, 1176
    +href="glossaries-user.html#dx1-163005" >1195, 1196
        mcolindexgroup  1177
    +href="glossaries-user.html#dx1-163020" >1197
        mcolindexhypergroup  1178
    +href="glossaries-user.html#dx1-163022" >1198
        mcolindexspannav  1179
    +href="glossaries-user.html#dx1-163023" >1199
        mcoltree  1180
    +href="glossaries-user.html#dx1-163025" >1200
        mcoltreegroup  1181
    +href="glossaries-user.html#dx1-163027" >1201
        mcoltreehypergroup  1182, 1183
    +href="glossaries-user.html#dx1-163029" >1202, 1203
        mcoltreenoname  1184
    +href="glossaries-user.html#dx1-163032" >1204
        mcoltreenonamegroup  1185
    +href="glossaries-user.html#dx1-163034" >1205
        mcoltreenonamehypergroup  1186
    +href="glossaries-user.html#dx1-163036" >1206
        mcoltreenonamespannav  1187
    +href="glossaries-user.html#dx1-163037" >1207
        mcoltreespannav  1188
    +href="glossaries-user.html#dx1-163030" >1208
        super  1189, 1190, 1191, 1192
    +href="glossaries-user.html#dx1-160012" >1209, 1210, 1211, 1212
        super3col  1193, 1194, 1195, 1196
    +href="glossaries-user.html#dx1-160024" >1213, 1214, 1215, 1216
        super3colborder  1197
    +href="glossaries-user.html#dx1-160029" >1217
        super3colheader  1198, 1199
    +href="glossaries-user.html#dx1-160031" >1218, 1219
        super3colheaderborder  1200
    +href="glossaries-user.html#dx1-160033" >1220
        super4col  1201, 1202, 1203, 1204, 1205
    +href="glossaries-user.html#dx1-155024" >1221, 1222, 1223, 1224, 1225
        super4colborder  1206, 1207
    +href="glossaries-user.html#dx1-160038" >1226, 1227
        super4colheader  1208, 1209, 1210
    +href="glossaries-user.html#dx1-160040" >1228, 1229, 1230
        super4colheaderborder  1211, 1212
    +href="glossaries-user.html#dx1-160042" >1231, 1232
        superborder  1213
    +href="glossaries-user.html#dx1-160018" >1233
        superheader  1214, 1215
    +href="glossaries-user.html#dx1-160020" >1234, 1235
        superheaderborder  1216, 1217
    +href="glossaries-user.html#dx1-144089" >1236, 1237
        superragged  1218, 1219, 1220, 1221
    +href="glossaries-user.html#dx1-161009" >1238, 1239, 1240, 1241
        superragged3col  1222, 1223, 1224, 1225
    +href="glossaries-user.html#dx1-161021" >1242, 1243, 1244, 1245
        superragged3colborder  1226
    +href="glossaries-user.html#dx1-161026" >1246
        superragged3colheader  1227
    +href="glossaries-user.html#dx1-161028" >1247
        superragged3colheaderborder  1228
    -    superraggedborder  1229
    +href="glossaries-user.html#dx1-161030" >1248
    +    superraggedborder  1249
        superraggedheader  1230, 1231
    +href="glossaries-user.html#dx1-161017" >1250, 1251
        superraggedheaderborder  1232
    +href="glossaries-user.html#dx1-161019" >1252
        topic  1233, 1234, 1235, 1236
    +href="glossaries-user.html#dx1-205033" >1253, 1254, 1255, 1256
        tree  1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244
    +href="glossaries-user.html#dx1-139067" >1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264
        treegroup  1245, 1246, 1247
    +href="glossaries-user.html#dx1-162035" >1265, 1266, 1267
        treehypergroup  1248, 1249, 1250
    +href="glossaries-user.html#dx1-156024" >1268, 1269, 1270
        treenoname  1251, 1252, 1253, 1254
    +href="glossaries-user.html#dx1-162012" >1271, 1272, 1273, 1274
        treenonamegroup  1255, 1256, 1257, 1258
    +href="glossaries-user.html#dx1-162042" >1275, 1276, 1277, 1278
        treenonamehypergroup  1259, 1260
    +href="glossaries-user.html#dx1-162044" >1279, 1280
    glossary-bookindex package  1261, 1262, 1263
    +href="glossaries-user.html#dx1-11073" >1281, 1282, 1283
    glossary-inline package  1264, 1265
    +href="glossaries-user.html#dx1-164001" >1284, 1285
    glossary-list package  1266, 1267, 1268, 1269, 1270, 1271
    +href="glossaries-user.html#dx1-50004" >1286, 1287, 1288, 1289, 1290, 1291
    glossary-long package  1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280
    +href="glossaries-user.html#dx1-50005" >1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300
    glossary-longbooktabs package  1281, 1282, 1283, 1284
    +href="glossaries-user.html#dx1-159001" >1301, 1302, 1303, 1304
    glossary-longextra package  1285, 1286
    +href="glossaries-user.html#dx1-181012" >1305, 1306
    glossary-longnoloc package  1287
    +class="cmss-10">glossary-longextra package  1307
    glossary-longragged package  1288, 1289, 1290, 1291
    +href="glossaries-user.html#dx1-158001" >1308, 1309, 1310, 1311
    glossary-mcols package  1292, 1293, 1294, 1295, 1296, 1297, 1298
    +href="glossaries-user.html#dx1-55001" >1312, 1313, 1314, 1315, 1316, 1317, 1318
    glossary-ragged package  1299
    +href="glossaries-user.html#dx1-159010" >1319
    glossary-super package  1300, 1301, 1302, 1303, 1304, 1305
    +href="glossaries-user.html#dx1-50006" >1320, 1321, 1322, 1323, 1324, 1325
    glossary-superragged package  1306, 1307, 1308
    +href="glossaries-user.html#dx1-161001" >1326, 1327, 1328
    glossary-topic package  1309, 1310
    +href="glossaries-user.html#dx1-205006" >1329, 1330
    glossary-topic package  1311, 1312
    +href="glossaries-user.html#dx1-155005" >1331, 1332, 1333
    glossary-tree package  1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324
    +href="glossaries-user.html#dx1-50007" >1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345
    glossaryentry (counter)  1325, 1326, 1327, 1328
    +href="glossaries-user.html#dx1-47002" >1346, 1347, 1348, 1349
    \glossaryentrynumbers  1329, 1330, 1331, 1332
    +href="glossaries-user.html#dx1-165053" >1350, 1351, 1352, 1353
    \glossaryheader  1333, 1334, 1335
    +href="glossaries-user.html#dx1-165016" >1354, 1355, 1356
    \glossaryname  1336, 1337
    +href="glossaries-user.html#dx1-14024" >1357, 1358
    \glossarypostamble  1338, 1339
    +href="glossaries-user.html#dx1-144086" >1359, 1360
    \glossarypreamble  1340, 1341, 1342, 1343
    +href="glossaries-user.html#dx1-48005" >1361, 1362, 1363, 1364
    \glossarysection  1344
    +href="glossaries-user.html#dx1-164004" >1365
    \glossarystyle  1345
    +href="glossaries-user.html#dx1-144034" >1366
    glossarysubentry (counter)  1346
    +href="glossaries-user.html#dx1-49002" >1367
    \glossentry  1347, 1348, 1349
    +href="glossaries-user.html#dx1-165039" >1368, 1369, 1370
    \Glossentrydesc  1350, 1351
    +href="glossaries-user.html#dx1-134028" >1371, 1372
    \glossentrydesc  1352, 1353, 1354, 1355, 1356, 1357
    +href="glossaries-user.html#dx1-11038" >1373, 1374, 1375, 1376, 1377, 1378
    \Glossentryname  1358, 1359
    +href="glossaries-user.html#dx1-134012" >1379, 1380
    \glossentryname  1360, 1361, 1362
    +href="glossaries-user.html#dx1-134011" >1381, 1382, 1383
    \glossentrynameother  1363
    +href="glossaries-user.html#dx1-11088" >1384
    \Glossentrysymbol  1364
    +href="glossaries-user.html#dx1-134035" >1385
    \glossentrysymbol  1365, 1366, 1367, 1368, 1369, 1370
    +href="glossaries-user.html#dx1-11014" >1386, 1387, 1388, 1389, 1390, 1391
    \GLS  1371, 1372, 1373, 1374
    +href="glossaries-user.html#dx1-3024" >1392, 1393, 1394, 1395
    \Gls  1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386
    -\gls  1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419
    +href="glossaries-user.html#dx1-135047" >1401, 1402, 1403, 1404, 1405, 1406, 1407
    \gls*  1420
    +class="cmtt-10">\gls  1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440
    +\gls*  1441
    \glsabbrvfont  1421
    +href="glossaries-user.html#dx1-185012" >1442
    \glsaccessibility  1422, 1423, 1424, 1425, 1426
    +href="glossaries-user.html#dx1-175073" >1443, 1444, 1445, 1446, 1447
    \Glsaccesslong  1427
    +href="glossaries-user.html#dx1-187031" >1448
    \glsaccesslong  1428
    +href="glossaries-user.html#dx1-187013" >1449
    \Glsaccesslongpl  1429
    +href="glossaries-user.html#dx1-187040" >1450
    \glsaccesslongpl  1430
    +href="glossaries-user.html#dx1-187022" >1451
    \glsaccessshort  1431, 1432
    +href="glossaries-user.html#dx1-187019" >1452, 1453
    \glsaccessshortpl  1433, 1434
    +href="glossaries-user.html#dx1-187028" >1454, 1455
    \glsaccsupp  1435, 1436
    +href="glossaries-user.html#dx1-175065" >1456, 1457
    \glsacrpluralsuffix  1437
    +href="glossaries-user.html#dx1-135037" >1458
    \glsacspace  1438
    +href="glossaries-user.html#dx1-138029" >1459
    \glsadd  1439, 1440, 1441, 1442, 1443, 1444, 1445
    +href="glossaries-user.html#dx1-11015" >1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467
    \glsaddall  1446, 1447, 1448, 1449
    +href="glossaries-user.html#dx1-146004" >1468, 1469, 1470, 1471
    \glsaddall options
        types  1450
    +href="glossaries-user.html#dx1-146005" >1472
    \glsaddallunused  1451
    +href="glossaries-user.html#dx1-146011" >1473
    \glsaddkey  1452, 1453, 1454, 1455, 1456
    +href="glossaries-user.html#dx1-113121" >1474, 1475, 1476, 1477, 1478
    \GlsAddLetterGroup  1457
    +href="glossaries-user.html#dx1-214032" >1479
    \glsaddprotectedpagefmt  1458
    +href="glossaries-user.html#dx1-151016" >1480
    \glsaddstoragekey  1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466
    +href="glossaries-user.html#dx1-113122" >1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488
    \GlsAddXdyAttribute  1467, 1468, 1469
    +href="glossaries-user.html#dx1-129049" >1489, 1490, 1491
    \GlsAddXdyCounters  1470, 1471
    +href="glossaries-user.html#dx1-168009" >1492, 1493
    \GlsAddXdyLocation  1472, 1473
    +href="glossaries-user.html#dx1-168027" >1494, 1495
    \glsautoprefix  1474
    +href="glossaries-user.html#dx1-44006" >1496
    \glsbackslash  1475
    +href="glossaries-user.html#dx1-166012" >1497
    \glscapscase  1476, 1477, 1478
    +href="glossaries-user.html#dx1-132021" >1498, 1499, 1500
    \glscategory  1479
    +href="glossaries-user.html#dx1-210003" >1501
    \glsclearpage  1480
    +href="glossaries-user.html#dx1-42008" >1502
    \glsclosebrace  1481
    +href="glossaries-user.html#dx1-166008" >1503
    \glscurrententrylabel  1482, 1483, 1484, 1485, 1486, 1487, 1488
    +href="glossaries-user.html#dx1-197033" >1504, 1505, 1506, 1507, 1508, 1509, 1510
    \glscurrentfieldvalue  1489, 1490, 1491
    +href="glossaries-user.html#dx1-172031" >1511, 1512, 1513
    \glscustomtext  1492, 1493, 1494
    +href="glossaries-user.html#dx1-132015" >1514, 1515, 1516
    \GlsDeclareNoHyperList  1495, 1496, 1497
    +href="glossaries-user.html#dx1-84003" >1517, 1518, 1519
    \glsdefaultshortaccess  1498, 1499
    +href="glossaries-user.html#dx1-175063" >1520, 1521
    \glsdefaulttype  1500, 1501, 1502, 1503, 1504, 1505
    +href="glossaries-user.html#dx1-123005" >1522, 1523, 1524, 1525, 1526, 1527
    \glsdefpostdesc  1506, 1507, 1508
    +href="glossaries-user.html#dx1-203019" >1528, 1529, 1530
    \glsdefpostlink  1509, 1510, 1511, 1512, 1513
    +href="glossaries-user.html#dx1-113047" >1531, 1532, 1533, 1534, 1535, 1536
    \GLSdesc  1514
    +href="glossaries-user.html#dx1-131054" >1537
    \Glsdesc  1515
    +href="glossaries-user.html#dx1-131053" >1538, 1539
    \glsdesc  1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524
    +href="glossaries-user.html#dx1-131050" >1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549
    \glsdescwidth  1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536
    +href="glossaries-user.html#dx1-155017" >1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561
    \glsdisablehyper  1537, 1538, 1539, 1540, 1541
    +href="glossaries-user.html#dx1-129036" >1562, 1563, 1564, 1565, 1566
    \glsdisp  1542, 1543, 1544, 1545, 1546, 1547
    +href="glossaries-user.html#dx1-3028" >1567, 1568, 1569, 1570, 1571, 1572
    \glsdisplay  1548, 1549
    +href="glossaries-user.html#dx1-113079" >1573, 1574
    \glsdisplayfirst  1550, 1551
    -\glsdisplaynumberlist  1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559
    +href="glossaries-user.html#dx1-113080" >1575, 1576
    +\glsdisplaynumberlist  1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584
    \glsdoifexists  1560
    +href="glossaries-user.html#dx1-172006" >1585
    \glsdoifexistsordo  1561
    +href="glossaries-user.html#dx1-172009" >1586
    \glsdoifexistsorwarn  1562
    +href="glossaries-user.html#dx1-172008" >1587
    \glsdoifnoexists  1563
    +href="glossaries-user.html#dx1-172007" >1588
    \glsdoifnoexistsordo  1564
    +href="glossaries-user.html#dx1-172010" >1589
    \glsdosanitizesort  1565, 1566
    +href="glossaries-user.html#dx1-74029" >1590, 1591
    \glsenableentrycount  1567, 1568
    +href="glossaries-user.html#dx1-143003" >1592, 1593
    \glsenablehyper  1569
    +href="glossaries-user.html#dx1-133006" >1594
    \glsentrycounterlabel  1570
    +href="glossaries-user.html#dx1-165049" >1595
    \GlsEntryCounterLabelPrefix  1571
    +href="glossaries-user.html#dx1-47005" >1596
    \glsentrycurrcount  1572
    +href="glossaries-user.html#dx1-143007" >1597
    \Glsentrydesc  1573, 1574, 1575, 1576, 1577
    +href="glossaries-user.html#dx1-11007" >1598, 1599, 1600, 1601, 1602
    \glsentrydesc  1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587
    +href="glossaries-user.html#dx1-11036" >1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613
    \Glsentrydescplural  1588
    +href="glossaries-user.html#dx1-134030" >1614
    \glsentrydescplural  1589
    +href="glossaries-user.html#dx1-134029" >1615
    \Glsentryfirst  1590
    +href="glossaries-user.html#dx1-134020" >1616
    \glsentryfirst  1591, 1592
    +href="glossaries-user.html#dx1-134019" >1617, 1618
    \Glsentryfirstplural  1593
    +href="glossaries-user.html#dx1-134023" >1619
    \glsentryfirstplural  1594
    +href="glossaries-user.html#dx1-134022" >1620
    \glsentryfmt  1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606
    +href="glossaries-user.html#dx1-129026" >1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632
    \Glsentryfull  1607
    +href="glossaries-user.html#dx1-136082" >1633
    \glsentryfull  1608, 1609, 1610, 1611, 1612, 1613
    +href="glossaries-user.html#dx1-136081" >1634, 1635, 1636, 1637, 1638, 1639
    \Glsentryfullpl  1614
    +href="glossaries-user.html#dx1-136084" >1640
    \glsentryfullpl  1615
    +href="glossaries-user.html#dx1-136083" >1641
    \glsentryitem  1616, 1617
    +href="glossaries-user.html#dx1-165046" >1642, 1643
    \Glsentrylong  1618, 1619, 1620, 1621
    +href="glossaries-user.html#dx1-132068" >1644, 1645, 1646, 1647
    \glsentrylong  1622, 1623, 1624
    +href="glossaries-user.html#dx1-136073" >1648, 1649, 1650
    \Glsentrylongpl  1625, 1626
    +href="glossaries-user.html#dx1-136076" >1651, 1652
    \glsentrylongpl  1627, 1628
    +href="glossaries-user.html#dx1-136075" >1653, 1654
    \Glsentryname  1629, 1630
    +href="glossaries-user.html#dx1-134007" >1655, 1656
    \glsentryname  1631, 1632, 1633, 1634, 1635
    +href="glossaries-user.html#dx1-134006" >1657, 1658, 1659, 1660, 1661
    \glsentrynumberlist  1636, 1637, 1638, 1639, 1640
    +href="glossaries-user.html#dx1-46003" >1662, 1663, 1664, 1665, 1666
    \glsentryparent  1641, 1642
    +href="glossaries-user.html#dx1-173002" >1667, 1668
    \Glsentryplural  1643
    +href="glossaries-user.html#dx1-134017" >1669
    \glsentryplural  1644, 1645, 1646
    +href="glossaries-user.html#dx1-134016" >1670, 1671, 1672
    \Glsentryprefix  1647
    +href="glossaries-user.html#dx1-174057" >1673
    \glsentryprefix  1648, 1649
    +href="glossaries-user.html#dx1-174048" >1674, 1675
    \Glsentryprefixfirst  1650
    +href="glossaries-user.html#dx1-174058" >1676
    \glsentryprefixfirst  1651
    +href="glossaries-user.html#dx1-174050" >1677
    \Glsentryprefixfirstplural  1652
    +href="glossaries-user.html#dx1-174060" >1678
    \glsentryprefixfirstplural  1653
    +href="glossaries-user.html#dx1-174054" >1679
    \Glsentryprefixplural  1654
    +href="glossaries-user.html#dx1-174059" >1680
    \glsentryprefixplural  1655
    +href="glossaries-user.html#dx1-174052" >1681
    \glsentryprevcount  1656
    +href="glossaries-user.html#dx1-143008" >1682
    \Glsentryshort  1657
    -\glsentryshort  1658
    +href="glossaries-user.html#dx1-136078" >1683
    +\glsentryshort  1684
    \Glsentryshortpl  1659
    +href="glossaries-user.html#dx1-136080" >1685
    \glsentryshortpl  1660
    +href="glossaries-user.html#dx1-136079" >1686
    \glsentrysort  1661
    +href="glossaries-user.html#dx1-173003" >1687
    \Glsentrysymbol  1662
    +href="glossaries-user.html#dx1-134032" >1688
    \glsentrysymbol  1663, 1664, 1665, 1666, 1667, 1668
    +href="glossaries-user.html#dx1-11006" >1689, 1690, 1691, 1692, 1693, 1694
    \Glsentrysymbolplural  1669
    +href="glossaries-user.html#dx1-134037" >1695
    \glsentrysymbolplural  1670
    +href="glossaries-user.html#dx1-134036" >1696
    \Glsentrytext  1671, 1672, 1673, 1674, 1675
    +href="glossaries-user.html#dx1-117005" >1697, 1698, 1699, 1700, 1701
    \glsentrytext  1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684
    +href="glossaries-user.html#dx1-117004" >1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710
    \glsentrytitlecase  1685, 1686
    +href="glossaries-user.html#dx1-131012" >1711, 1712
    \glsentrytype  1687
    +href="glossaries-user.html#dx1-173001" >1713
    \Glsentryuseri  1688
    +href="glossaries-user.html#dx1-134039" >1714
    \glsentryuseri  1689, 1690
    +href="glossaries-user.html#dx1-134038" >1715, 1716
    \Glsentryuserii  1691
    +href="glossaries-user.html#dx1-134041" >1717
    \glsentryuserii  1692
    +href="glossaries-user.html#dx1-134040" >1718
    \Glsentryuseriii  1693
    +href="glossaries-user.html#dx1-134043" >1719
    \glsentryuseriii  1694
    +href="glossaries-user.html#dx1-134042" >1720
    \Glsentryuseriv  1695
    +href="glossaries-user.html#dx1-134045" >1721
    \glsentryuseriv  1696
    +href="glossaries-user.html#dx1-134044" >1722
    \Glsentryuserv  1697
    +href="glossaries-user.html#dx1-134047" >1723
    \glsentryuserv  1698
    +href="glossaries-user.html#dx1-134046" >1724
    \Glsentryuservi  1699
    +href="glossaries-user.html#dx1-134049" >1725
    \glsentryuservi  1700
    +href="glossaries-user.html#dx1-134048" >1726
    \glsexpandfields  1701
    +href="glossaries-user.html#dx1-119022" >1727
    \glsfieldaccsupp  1702
    +href="glossaries-user.html#dx1-175066" >1728
    \glsfielddef  1703
    +href="glossaries-user.html#dx1-173009" >1729
    \glsfieldedef  1704
    +href="glossaries-user.html#dx1-173010" >1730
    \glsfieldfetch  1705
    +href="glossaries-user.html#dx1-173004" >1731
    \glsfieldgdef  1706
    +href="glossaries-user.html#dx1-173011" >1732
    \glsfieldxdef  1707, 1708, 1709, 1710
    +href="glossaries-user.html#dx1-133031" >1733, 1734, 1735, 1736
    \glsfindwidesttoplevelname  1711, 1712
    +href="glossaries-user.html#dx1-162051" >1737, 1738
    \glsFindWidestUsedLevelTwo  1713
    +href="glossaries-user.html#dx1-205015" >1739
    \glsFindWidestUsedTopLevelName  1714
    +href="glossaries-user.html#dx1-205014" >1740
    \GLSfirst  1715
    +href="glossaries-user.html#dx1-131017" >1741
    \Glsfirst  1716
    +href="glossaries-user.html#dx1-131016" >1742
    \glsfirst  1717
    +href="glossaries-user.html#dx1-131013" >1743
    \glsfirstabbrvscfont  1718, 1719, 1720, 1721
    +href="glossaries-user.html#dx1-187018" >1744, 1745, 1746, 1747
    \glsfirstlongfootnotefont  1722, 1723, 1724, 1725, 1726
    +href="glossaries-user.html#dx1-187012" >1748, 1749, 1750, 1751, 1752
    \GLSfirstplural  1727
    +href="glossaries-user.html#dx1-131037" >1753
    \Glsfirstplural  1728
    +href="glossaries-user.html#dx1-131036" >1754
    \glsfirstplural  1729
    +href="glossaries-user.html#dx1-131033" >1755
    \glsfmtfirst  1730
    +href="glossaries-user.html#dx1-214046" >1756
    \Glsfmtlong  1731, 1732
    +href="glossaries-user.html#dx1-185022" >1757, 1758
    \glsfmtname  1733, 1734, 1735
    +href="glossaries-user.html#dx1-182028" >1759, 1760, 1761
    \glsfmtshort  1736
    +href="glossaries-user.html#dx1-185023" >1762
    + + \glsfmttext  1737, 1738, 1739, 1740
    - - +href="glossaries-user.html#dx1-182027" >1763, 1764, 1765, 1766
    \glsgenacfmt  1741, 1742, 1743, 1744, 1745, 1746, 1747
    +href="glossaries-user.html#dx1-132050" >1767, 1768, 1769, 1770, 1771, 1772, 1773
    \glsgenentryfmt  1748, 1749, 1750, 1751, 1752
    +href="glossaries-user.html#dx1-132044" >1774, 1775, 1776, 1777, 1778
    \glsgetgrouptitle  1753
    +href="glossaries-user.html#dx1-165027" >1779
    \glsglossarymark  1754, 1755, 1756, 1757, 1758
    +href="glossaries-user.html#dx1-42003" >1780, 1781, 1782, 1783, 1784
    \glsgroupheading  1759, 1760
    +href="glossaries-user.html#dx1-165021" >1785, 1786
    \glsgroupskip  1761, 1762, 1763
    +href="glossaries-user.html#dx1-155033" >1787, 1788, 1789
    \glshyperlink  1764, 1765, 1766
    +href="glossaries-user.html#dx1-133022" >1790, 1791, 1792
    \glshypernavsep  1767
    +href="glossaries-user.html#dx1-156021" >1793
    \glsifhyper  1768
    +href="glossaries-user.html#dx1-132027" >1794
    \glsifhyperon  1769, 1770, 1771
    +href="glossaries-user.html#dx1-132022" >1795, 1796, 1797
    \glsIfListOfAcronyms  1772
    +href="glossaries-user.html#dx1-94006" >1798
    \glsifplural  1773, 1774, 1775, 1776
    -\glsignore  1777
    +href="glossaries-user.html#dx1-132020" >1799, 1800, 1801, 1802
    \glsinlinedescformat  1778
    +href="glossaries-user.html#dx1-164020" >1803
    \glsinlineemptydescformat  1779
    +href="glossaries-user.html#dx1-164019" >1804
    \glsinlinenameformat  1780
    +href="glossaries-user.html#dx1-164016" >1805
    \glsinlineparentchildseparator  1781, 1782
    +href="glossaries-user.html#dx1-164012" >1806, 1807
    \glsinlineseparator  1783, 1784
    +href="glossaries-user.html#dx1-164008" >1808, 1809
    \glsinlinesubdescformat  1785
    +href="glossaries-user.html#dx1-164021" >1810
    \glsinlinesubnameformat  1786
    +href="glossaries-user.html#dx1-164018" >1811
    \glsinlinesubseparator  1787, 1788
    +href="glossaries-user.html#dx1-164010" >1812, 1813
    \glsinsert  1789, 1790
    +href="glossaries-user.html#dx1-132019" >1814, 1815
    \glslabel  1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804
    +href="glossaries-user.html#dx1-34017" >1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829
    \glslabeltok  1805, 1806
    +href="glossaries-user.html#dx1-139024" >1830, 1831
    \glsletentryfield  1807
    +href="glossaries-user.html#dx1-134033" >1832
    \glslink  1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817
    +href="glossaries-user.html#dx1-34008" >1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842
    \glslink options
        counter  1818, 1819
    +href="glossaries-user.html#dx1-129075" >1843, 1844
        format  1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833
    +href="glossaries-user.html#dx1-129039" >1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858
        hyper  1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841
    +href="glossaries-user.html#dx1-34013" >1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866
        hyperoutside  1842
    +href="glossaries-user.html#dx1-129078" >1867
        local  1843
    +href="glossaries-user.html#dx1-129076" >1868
        noindex  1844
    +href="glossaries-user.html#dx1-129077" >1869
        prefix  1845
    +href="glossaries-user.html#dx1-129085" >1870
        textformat  1846
    +href="glossaries-user.html#dx1-129082" >1871
        theHvalue  1847
    +href="glossaries-user.html#dx1-129088" >1872
        thevalue  1848
    +href="glossaries-user.html#dx1-129087" >1873
        wrgloss  1849
    +href="glossaries-user.html#dx1-129080" >1874
    \glslinkcheckfirsthyperhook  1850
    +class="cmti-10">1875
    \glslinkpostsetkeys  1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859
    +href="glossaries-user.html#dx1-34023" >1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884
    \glslinkprefix  1860
    +href="glossaries-user.html#dx1-144071" >1885
    \glslinkpresetkeys  1861
    +href="glossaries-user.html#dx1-224004" >1886
    \glslinkvar  1862
    +href="glossaries-user.html#dx1-132028" >1887
    \glslistdottedwidth  1863
    +href="glossaries-user.html#dx1-156039" >1888
    \glslistnavigationitem  1864
    +href="glossaries-user.html#dx1-156023" >1889
    \glslocalreset  1865
    +href="glossaries-user.html#dx1-142004" >1890
    \glslocalresetall  1866
    +href="glossaries-user.html#dx1-142008" >1891
    \glslocalunset  1867
    +href="glossaries-user.html#dx1-142006" >1892
    \glslocalunsetall  1868
    +href="glossaries-user.html#dx1-142010" >1893
    \glslongfont  1869
    +href="glossaries-user.html#dx1-185007" >1894
    \glslongtok  1870, 1871, 1872, 1873, 1874
    +href="glossaries-user.html#dx1-139025" >1895, 1896, 1897, 1898, 1899
    \glsmcols  1875
    +href="glossaries-user.html#dx1-163015" >1900
    \glsmoveentry  1876
    +href="glossaries-user.html#dx1-124001" >1901
    \GLSname  1877
    +href="glossaries-user.html#dx1-131044" >1902
    \Glsname  1878
    +href="glossaries-user.html#dx1-131043" >1903
    \glsname  1879
    +href="glossaries-user.html#dx1-131038" >1904
    \glsnamefont  1880, 1881, 1882
    +href="glossaries-user.html#dx1-138010" >1905, 1906, 1907
    \glsnavhypertarget  1883
    +href="glossaries-user.html#dx1-165031" >1908
    \glsnavigation  1884
    +href="glossaries-user.html#dx1-165032" >1909
    \glsnoexpandfields  1885
    +href="glossaries-user.html#dx1-119023" >1910
    \glsnoidxdisplayloc  1886
    +href="glossaries-user.html#dx1-152022" >1911
    \glsnumberformat  1887, 1888, 1889, 1890, 1891, 1892
    +href="glossaries-user.html#dx1-150003" >1912, 1913, 1914, 1915, 1916, 1917
    \glsnumberlistloop  1893
    +href="glossaries-user.html#dx1-152019" >1918
    \glsnumbersgroupname  1894
    +href="glossaries-user.html#dx1-14032" >1919
    \glsnumbersgrouptitle  1895
    +href="glossaries-user.html#dx1-165029" >1920
    \glsnumlistlastsep  1896
    +href="glossaries-user.html#dx1-134066" >1921
    \glsnumlistsep  1897
    +href="glossaries-user.html#dx1-134065" >1922
    \glsopenbrace  1898
    +href="glossaries-user.html#dx1-166007" >1923
    \glspagelistwidth  1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906
    +href="glossaries-user.html#dx1-155018" >1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931
    \glspar  1907
    +href="glossaries-user.html#dx1-113027" >1932
    \glspatchtabularx  1908
    +href="glossaries-user.html#dx1-130008" >1933
    \glspercentchar  1909
    +href="glossaries-user.html#dx1-166009" >1934
    \GLSpl  1910, 1911, 1912, 1913, 1914
    +href="glossaries-user.html#dx1-3027" >1935, 1936, 1937, 1938, 1939
    \Glspl  1915, 1916, 1917, 1918, 1919, 1920, 1921
    +href="glossaries-user.html#dx1-3026" >1940, 1941, 1942, 1943, 1944, 1945, 1946
    \glspl  1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932
    +href="glossaries-user.html#dx1-3025" >1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958
    \GLSplural  1933
    +href="glossaries-user.html#dx1-131032" >1959
    \Glsplural  1934
    +href="glossaries-user.html#dx1-131031" >1960
    \glsplural  1935
    +href="glossaries-user.html#dx1-131028" >1961
    \glspluralsuffix  1936, 1937, 1938, 1939, 1940, 1941
    +href="glossaries-user.html#dx1-113051" >1962, 1963, 1964, 1965, 1966, 1967
    \glspostdescription  1942, 1943, 1944
    +href="glossaries-user.html#dx1-155040" >1968, 1969, 1970
    \glspostinline  1945, 1946
    +href="glossaries-user.html#dx1-164014" >1971, 1972
    \glspostlinkhook  1947, 1948, 1949, 1950, 1951
    +href="glossaries-user.html#dx1-132037" >1973, 1974, 1975, 1976, 1977
    \glsprefixsep  1952
    +href="glossaries-user.html#dx1-174017" >1978
    \glsprestandardsort  1953, 1954, 1955
    +href="glossaries-user.html#dx1-74024" >1979, 1980, 1981
    \glsps  1956
    +href="glossaries-user.html#dx1-195021" >1982
    \glspt  1957, 1958, 1959, 1960, 1961
    +href="glossaries-user.html#dx1-195023" >1983, 1984, 1985, 1986, 1987
    \glsquote  1962
    +href="glossaries-user.html#dx1-166014" >1988
    \glsrefentry  1963, 1964, 1965, 1966, 1967, 1968
    +href="glossaries-user.html#dx1-47004" >1989, 1990, 1991, 1992, 1993, 1994
    \glsreset  1969, 1970, 1971
    +href="glossaries-user.html#dx1-65004" >1995, 1996, 1997
    \glsresetall  1972
    +href="glossaries-user.html#dx1-142007" >1998
    \glsresetentrycounter  1973
    +href="glossaries-user.html#dx1-48006" >1999
    \glsrestoreLToutput  1974
    +href="glossaries-user.html#dx1-159023" >2000
    \glssee  1975, 1976, 1977, 1978, 1979, 1980
    +href="glossaries-user.html#dx1-57005" >2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
    \glsseeformat  1981, 1982
    +href="glossaries-user.html#dx1-148002" >2009, 2010
    \glsseeitemformat  1983, 1984, 1985, 1986, 1987, 1988, 1989
    +href="glossaries-user.html#dx1-148011" >2011, 2012, 2013, 2014, 2015, 2016, 2017
    \glsseelastsep  1990
    +href="glossaries-user.html#dx1-148009" >2018
    \glsseelist  1991
    +href="glossaries-user.html#dx1-148018" >2019
    \glsseesep  1992
    +href="glossaries-user.html#dx1-148008" >2020
    \glsSetAlphaCompositor  1993, 1994
    +href="glossaries-user.html#dx1-112019" >2021, 2022
    \glssetcategoryattribute  1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014
    +href="glossaries-user.html#dx1-11055" >2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042
    \glsSetCompositor  2015, 2016
    +href="glossaries-user.html#dx1-112018" >2043, 2044
    \glssetexpandfield  2017
    +href="glossaries-user.html#dx1-119007" >2045
    \glssetnoexpandfield  2018
    +href="glossaries-user.html#dx1-119008" >2046
    \GlsSetQuote  2019, 2047, 2020
    +class="cmti-10">2048
    \glsSetSuffixF  2021
    +href="glossaries-user.html#dx1-152009" >2049
    \glsSetSuffixFF  2022
    +href="glossaries-user.html#dx1-152010" >2050
    \glssetwidest  2023, 2024, 2025, 2026, 2027
    +href="glossaries-user.html#dx1-162049" >2051, 2052, 2053, 2054, 2055
    \GlsSetWriteIstHook  2028
    +href="glossaries-user.html#dx1-153002" >2056
    \GlsSetXdyCodePage  2029, 2030, 2031
    +href="glossaries-user.html#dx1-16097" >2057, 2058, 2059
    \GlsSetXdyFirstLetterAfterDigits  2032
    +href="glossaries-user.html#dx1-169004" >2060
    \GlsSetXdyLanguage  2033, 2034, 2035, 2036
    +href="glossaries-user.html#dx1-16095" >2061, 2062, 2063, 2064
    \GlsSetXdyLocationClassOrder  2037
    +href="glossaries-user.html#dx1-168061" >2065
    \GlsSetXdyMinRangeLength  2038, 2039
    +href="glossaries-user.html#dx1-152004" >2066, 2067
    \GlsSetXdyNumberGroupOrder  2040
    +href="glossaries-user.html#dx1-169007" >2068
    \glsshortaccsupp  2041, 2042
    +href="glossaries-user.html#dx1-175070" >2069, 2070
    \glsshortplaccsupp  2043, 2044
    +href="glossaries-user.html#dx1-175071" >2071, 2072
    \glsshorttok  2045, 2046, 2047
    +href="glossaries-user.html#dx1-139026" >2073, 2074, 2075
    \glsshowaccsupp  2048
    +class="cmti-10">2076
    \glsshowtarget  2049, 2050
    +class="cmti-10">2077, 2078
    \glsshowtargetfont  2051
    +class="cmti-10">2079
    \glsshowtargetouter  2052
    +class="cmti-10">2080
    \glssortnumberfmt  2053
    +href="glossaries-user.html#dx1-74016" >2081
    \glssubentrycounterlabel  2054
    +href="glossaries-user.html#dx1-165068" >2082
    \glssubentryitem  2055, 2056
    +href="glossaries-user.html#dx1-165065" >2083, 2084
    \GLSsymbol  2057
    +href="glossaries-user.html#dx1-131049" >2085
    \Glssymbol  2058
    +href="glossaries-user.html#dx1-131048" >2086
    \glssymbol  2059, 2060, 2061, 2062, 2063, 2064
    +href="glossaries-user.html#dx1-131045" >2087, 2088, 2089, 2090, 2091, 2092
    \glssymbolaccsupp  2065
    +href="glossaries-user.html#dx1-227024" >2093
    \glssymbolsgroupname  2066, 2067
    +href="glossaries-user.html#dx1-14031" >2094, 2095, 2096
    \glstarget  2068, 2069
    +href="glossaries-user.html#dx1-165050" >2097, 2098
    \GLStext  2070, 2071
    +href="glossaries-user.html#dx1-117008" >2099, 2100
    \Glstext  2072, 2073
    +href="glossaries-user.html#dx1-117007" >2101, 2102
    \glstext  2074, 2075, 2076, 2077
    +href="glossaries-user.html#dx1-34009" >2103, 2104, 2105, 2106
    \glstextformat  2078, 2079, 2080, 2081, 2082, 2083
    +href="glossaries-user.html#dx1-129023" >2107, 2108, 2109, 2110, 2111, 2112
    \glstextup  2084
    +href="glossaries-user.html#dx1-139035" >2113
    \glstildechar  2085
    +href="glossaries-user.html#dx1-166010" >2114
    \glstocfalse  2086
    +href="glossaries-user.html#dx1-40002" >2115
    \glstoctrue  2087
    +href="glossaries-user.html#dx1-40001" >2116
    \glstreechildpredesc  2088
    +href="glossaries-user.html#dx1-162014" >2117
    \glstreegroupheaderfmt  2089
    +href="glossaries-user.html#dx1-162006" >2118
    \glstreeindent  2090
    +href="glossaries-user.html#dx1-162033" >2119
    \glstreeitem  2091
    +href="glossaries-user.html#dx1-162019" >2120
    \glstreenamebox  2092
    +href="glossaries-user.html#dx1-162054" >2121
    \glstreenamefmt  2093
    +href="glossaries-user.html#dx1-162004" >2122
    \glstreenavigationfmt  2094
    +href="glossaries-user.html#dx1-162008" >2123
    \glstreepredesc  2095
    +href="glossaries-user.html#dx1-162011" >2124
    \glstreesubitem  2096
    +href="glossaries-user.html#dx1-162020" >2125
    \glstreesubsubitem  2097
    +href="glossaries-user.html#dx1-162021" >2126
    \glstype  2098, 2099, 2100
    +href="glossaries-user.html#dx1-34018" >2127, 2128, 2129
    \glsunset  2101
    +href="glossaries-user.html#dx1-142005" >2130
    \glsunsetall  2102, 2103
    +href="glossaries-user.html#dx1-133016" >2131, 2132
    \GlsUseAcrEntryDispStyle  2104
    +href="glossaries-user.html#dx1-139031" >2133
    \GlsUseAcrStyleDefs  2105
    +href="glossaries-user.html#dx1-139032" >2134
    \GLSuseri  2106
    +href="glossaries-user.html#dx1-131059" >2135
    \Glsuseri  2107
    +href="glossaries-user.html#dx1-131058" >2136
    \glsuseri  2108
    +href="glossaries-user.html#dx1-131055" >2137
    \glsuseriaccsupp  2109
    +href="glossaries-user.html#dx1-227028" >2138
    \GLSuserii  2110
    +href="glossaries-user.html#dx1-131064" >2139
    \Glsuserii  2111
    +href="glossaries-user.html#dx1-131063" >2140
    \glsuserii  2112
    +href="glossaries-user.html#dx1-131060" >2141
    \GLSuseriii  2113
    +href="glossaries-user.html#dx1-131069" >2142
    \Glsuseriii  2114
    +href="glossaries-user.html#dx1-131068" >2143
    \glsuseriii  2115
    +href="glossaries-user.html#dx1-131065" >2144
    \GLSuseriv  2116
    +href="glossaries-user.html#dx1-131074" >2145
    \Glsuseriv  2117
    +href="glossaries-user.html#dx1-131073" >2146
    \glsuseriv  2118
    +href="glossaries-user.html#dx1-131070" >2147
    \GLSuserv  2119
    +href="glossaries-user.html#dx1-131079" >2148
    \Glsuserv  2120
    +href="glossaries-user.html#dx1-131078" >2149
    \glsuserv  2121
    +href="glossaries-user.html#dx1-131075" >2150
    \GLSuservi  2122
    +href="glossaries-user.html#dx1-131084" >2151
    \Glsuservi  2123
    +href="glossaries-user.html#dx1-131083" >2152
    \glsuservi  2124
    +href="glossaries-user.html#dx1-131080" >2153
    \glswrallowprimitivemodsfalse  2125
    +href="glossaries-user.html#dx1-151028" >2154
    \glswrite  2126
    +href="glossaries-user.html#dx1-153003" >2155
    \glswriteentry  2127
    +href="glossaries-user.html#dx1-65005" >2156
    \glsxtr@makeglossaries  2128
    +href="glossaries-user.html#dx1-22004" >2157
    \glsxtr@record  2129
    +href="glossaries-user.html#dx1-24015" >2158
    \glsxtr@record@nameref  2130
    +href="glossaries-user.html#dx1-24017" >2159
    \glsxtr@recordsee  2131
    +href="glossaries-user.html#dx1-24018" >2160
    \glsxtr@resource  2132, 2133
    +href="glossaries-user.html#dx1-24003" >2161, 2162
    \glsxtr@texencoding  2134
    +href="glossaries-user.html#dx1-217039" >2163
    \glsxtrabbrvfootnote  2135, 2136, 2137, 2138, 2139
    +href="glossaries-user.html#dx1-185016" >2164, 2165, 2166, 2167, 2168
    \glsxtrabbrvtype  2140, 2141, 2142
    +href="glossaries-user.html#dx1-91017" >2169, 2170, 2171
    \glsxtrbookindexname  2143
    +href="glossaries-user.html#dx1-11087" >2172
    \glsxtrcombiningdiacriticrules  2144, 2145
    +href="glossaries-user.html#dx1-214061" >2173, 2174
    \glsxtrcontrolrules  2146, 2147
    +href="glossaries-user.html#dx1-214058" >2175, 2176
    \glsxtrdigitrules  2148, 2149
    +href="glossaries-user.html#dx1-214064" >2177, 2178
    \glsxtrdopostpunc  2150, 2151
    +href="glossaries-user.html#dx1-186023" >2179, 2180
    \glsxtrequationlocfmt  2152
    +href="glossaries-user.html#dx1-193046" >2181
    \glsxtrfieldforlistloop  2153
    +href="glossaries-user.html#dx1-203046" >2182
    \glsxtrfieldformatlist  2154, 2155
    +href="glossaries-user.html#dx1-223027" >2183, 2184
    \glsxtrfmt  2156, 2157, 2158, 2159, 2160, 2161, 2162
    +href="glossaries-user.html#dx1-191041" >2185, 2186, 2187, 2188, 2189, 2190, 2191
    \GlsXtrFmtField  2163
    +href="glossaries-user.html#dx1-192034" >2192
    \glsxtrfootnotedescname  2164, 2165
    +href="glossaries-user.html#dx1-185006" >2193, 2194
    \glsxtrfootnotedescsort  2166, 2167
    +href="glossaries-user.html#dx1-185014" >2195, 2196
    \glsxtrfull  2168, 2169, 2170, 2171
    +href="glossaries-user.html#dx1-181040" >2197, 2198, 2199, 2200
    \glsxtrfullsep  2172, 2173, 2174, 2175, 2176
    +href="glossaries-user.html#dx1-185009" >2201, 2202, 2203, 2204, 2205
    \glsxtrgeneralpuncrules  2177, 2178
    +href="glossaries-user.html#dx1-214063" >2206, 2207
    \glsxtrglossentry  2179, 2180, 2181
    +href="glossaries-user.html#dx1-11005" >2208, 2209, 2210
    +\glsxtrhiername  2211
    \glsxtrhyphenrules  2182, 2183
    +href="glossaries-user.html#dx1-214062" >2212, 2213
    \GlsXtrIfFieldEqNum  2184
    +href="glossaries-user.html#dx1-212009" >2214
    \GlsXtrIfFieldNonZero  2185
    +href="glossaries-user.html#dx1-203044" >2215
    \glsxtrifhasfield  2186, 2187
    +href="glossaries-user.html#dx1-203020" >2216, 2217
    +\GlsXtrIfUnusedOrUndefined  2218
    \glsxtrifwasfirstuse  2188, 2189, 2190, 2191
    +href="glossaries-user.html#dx1-186014" >2219, 2220, 2221, 2222
    \GlsXtrIfXpFieldEqXpStr  2192, 2193, 2194
    +href="glossaries-user.html#dx1-203025" >2223, 2224, 2225
    \Glsxtrinlinefullformat  2195
    +href="glossaries-user.html#dx1-187029" >2226
    \glsxtrinlinefullformat  2196
    +href="glossaries-user.html#dx1-187011" >2227
    \Glsxtrinlinefullplformat  2197
    +href="glossaries-user.html#dx1-187038" >2228
    \glsxtrinlinefullplformat  2198
    +href="glossaries-user.html#dx1-187020" >2229
    \GlsXtrLoadResources  2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2241, 2242
    +href="glossaries-user.html#dx1-9003" >2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275
    \GlsXtrLoadResources options
        abbreviation-sort-fallback  2243
    +href="glossaries-user.html#dx1-182060" >2276
        append-prefix-field  2244
    +href="glossaries-user.html#dx1-226021" >2277
        break-at  2245, 2246, 2247, 2248, 2249
    +href="glossaries-user.html#dx1-75008" >2278, 2279, 2280, 2281, 2282
        category  2250
    +href="glossaries-user.html#dx1-197024" >2283
        combine-dual-locations  2251
    +href="glossaries-user.html#dx1-196048" >2284
        dual-category  2252
    +href="glossaries-user.html#dx1-197025" >2285
        dual-prefix  2253, 2254, 2255
    +href="glossaries-user.html#dx1-196021" >2286, 2287, 2288
        dual-sort  2256
    +href="glossaries-user.html#dx1-197030" >2289
        dual-type  2257, 2258, 2259
    +href="glossaries-user.html#dx1-196020" >2290, 2291, 2292
        entry-type-aliases  2260
    +href="glossaries-user.html#dx1-205102" >2293
        ext-prefixes  2261
    +href="glossaries-user.html#dx1-195035" >2294
        field-aliases  2262
    +href="glossaries-user.html#dx1-205101" >2295
        identical-sort-action  2263
    +href="glossaries-user.html#dx1-203082" >2296
        ignore-fields  2264
    +href="glossaries-user.html#dx1-182076" >2297
        label-prefix  2265
    +href="glossaries-user.html#dx1-195034" >2298
        loc-counters  2266
    +href="glossaries-user.html#dx1-192067" >2299
    + +     name-case-change  2267
    +href="glossaries-user.html#dx1-11062" >2300
        primary-location-formats  2268
    - - +href="glossaries-user.html#dx1-192069" >2301
        replicate-fields  2269, 2270
    +href="glossaries-user.html#dx1-11061" >2302, 2303
        save-child-count  2271
    +href="glossaries-user.html#dx1-172014" >2304, 2305
        save-locations  2272, 2273, 2274
    +href="glossaries-user.html#dx1-11030" >2306, 2307, 2308
        save-loclist  2275
    +href="glossaries-user.html#dx1-46011" >2309
        save-sibling-count  2276, 2277, 2278, 2279
    +href="glossaries-user.html#dx1-203039" >2310, 2311, 2312, 2313
        save-locations  2280, 2281
    +href="glossaries-user.html#dx1-11012" >2314, 2315
        selection  2282, 2283, 2284, 2285, 2286, 2287, 2288
    +href="glossaries-user.html#dx1-9029" >2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323
        set-widest  2289
    +href="glossaries-user.html#dx1-205055" >2324
        sort  2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301
    +href="glossaries-user.html#dx1-9025" >2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336
        sort-rule  2302
    +href="glossaries-user.html#dx1-214078" >2337
        src  2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2337, 2338, 2339, 2340, 2341, 2342, 2343, 2344
    +href="glossaries-user.html#dx1-9004" >2338, 2339, 2340, 2341, 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2351, 2352, 2353, 2354, 2355, 2356, 2357, 2358, 2359, 2360, 2361, 2362, 2363, 2364, 2365, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379
        type  2345, 2346, 2347
    +href="glossaries-user.html#dx1-195058" >2380, 2381, 2382
    +\glsxtrlocalsetgrouptitle  2383
    \glsxtrlong  2348, 2349, 2350, 2351
    +href="glossaries-user.html#dx1-181039" >2384, 2385, 2386, 2387
    \glsxtrnewgls  2352
    +href="glossaries-user.html#dx1-195027" >2388
    \glsxtrnewglslike  2353, 2354, 2355, 2356
    +href="glossaries-user.html#dx1-24019" >2389, 2390, 2391, 2392
    \glsxtrnewnumber  2357
    +href="glossaries-user.html#dx1-87005" >2393
    \glsxtrnewsymbol  2358, 2359, 2360, 2361
    +href="glossaries-user.html#dx1-4009" >2394, 2395, 2396, 2397
    \glsxtrnonprintablerules  2362, 2363
    +href="glossaries-user.html#dx1-214060" >2398, 2399
    \glsxtrnopostpunc  2364, 2365, 2366, 2367, 2368, 2369, 2370, 2371
    +href="glossaries-user.html#dx1-113029" >2400, 2401, 2402, 2403, 2404, 2405, 2406, 2407
    \glsxtrp  2372
    +href="glossaries-user.html#dx1-195020" >2408
    \glsxtrparen  2373, 2374, 2375, 2376, 2377
    +href="glossaries-user.html#dx1-185011" >2409, 2410, 2411, 2412, 2413
    \glsxtrpostlinkAddSymbolOnFirstUse  2378
    +href="glossaries-user.html#dx1-225008" >2414
    \glsxtrsectionlocfmt  2379, 2380, 2381
    +href="glossaries-user.html#dx1-193043" >2415, 2416, 2417
    \GlsXtrSetAltModifier  2382, 2383
    +href="glossaries-user.html#dx1-24023" >2418, 2419
    +\glsxtrsetgrouptitle  2420
    \glsxtrshort  2384, 2385, 2386, 2387, 2388
    +href="glossaries-user.html#dx1-181038" >2421, 2422, 2423, 2424, 2425
    \glsxtrspacerules  2389, 2390
    +href="glossaries-user.html#dx1-214059" >2426, 2427
    \GlsXtrUseAbbrStyleFmts  2391
    +href="glossaries-user.html#dx1-187010" >2428
    \GlsXtrUseAbbrStyleSetup  2392
    +href="glossaries-user.html#dx1-187009" >2429

    H html package  2393
    +href="glossaries-user.html#dx1-133002" >2430
    \hyperbf  2394, 2395, 2396, 2397, 2398, 2399
    +href="glossaries-user.html#dx1-129059" >2431, 2432, 2433, 2434, 2435, 2436
    \hyperbfit  2400
    +href="glossaries-user.html#dx1-193035" >2437
    \hyperbsf  2401
    +href="glossaries-user.html#dx1-129067" >2438
    \hyperemph  2402
    +href="glossaries-user.html#dx1-129065" >2439
    \hyperit  2403, 2404, 2405
    +href="glossaries-user.html#dx1-129061" >2440, 2441, 2442
    \hyperlink  2406, 2407
    +href="glossaries-user.html#dx1-129066" >2443, 2444
    \hypermd  2408
    +href="glossaries-user.html#dx1-129060" >2445
    \hyperpage  2409
    +href="glossaries-user.html#dx1-129051" >2446
    hyperref package  2410, 2411, 2412, 2413, 2414, 2415, 2416, 2417, 2418, 2419, 2420, 2421, 2422, 2423, 2424, 2425, 2426, 2427, 2428, 2429, 2430, 2431, 2432, 2433, 2434, 2435, 2436, 2437, 2438, 2439, 2440, 2441, 2442
    +href="glossaries-user.html#dx1-16" >2447, 2448, 2449, 2450, 2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 2467, 2468, 2469, 2470, 2471, 2472, 2473, 2474, 2475, 2476, 2477, 2478, 2479
    + + \hyperrm  2443, 2444, 2445
    +href="glossaries-user.html#dx1-129056" >2480, 2481, 2482
    \hypersc  2446
    +href="glossaries-user.html#dx1-129064" >2483
    \hypersf  2447
    - - +href="glossaries-user.html#dx1-129057" >2484
    \hypersl  2448
    +href="glossaries-user.html#dx1-129062" >2485
    \hypertarget  2449
    +href="glossaries-user.html#dx1-133008" >2486
    \hypertt  2450
    +href="glossaries-user.html#dx1-129058" >2487
    \hyperup  2451
    +href="glossaries-user.html#dx1-129063" >2488

    I \ifglossaryexists  2452
    +href="glossaries-user.html#dx1-172001" >2489
    \ifglsdescsuppressed  2453
    +href="glossaries-user.html#dx1-172027" >2490
    \ifglsentryexists  2454
    +href="glossaries-user.html#dx1-172003" >2491
    \ifglsfieldcseq  2455
    +href="glossaries-user.html#dx1-172038" >2492
    \ifglsfielddefeq  2456
    +href="glossaries-user.html#dx1-172036" >2493
    \ifglsfieldeq  2457, 2458
    +href="glossaries-user.html#dx1-139085" >2494, 2495
    \ifglshaschildren  2459, 2460
    +href="glossaries-user.html#dx1-172012" >2496, 2497
    \ifglshasdesc  2461
    +href="glossaries-user.html#dx1-172025" >2498
    \ifglshasfield  2462
    +href="glossaries-user.html#dx1-172030" >2499
    \ifglshaslong  2463, 2464, 2465, 2466, 2467
    +href="glossaries-user.html#dx1-34021" >2500, 2501, 2502, 2503, 2504
    \ifglshasparent  2468
    +href="glossaries-user.html#dx1-172016" >2505
    \ifglshasprefix  2469
    +href="glossaries-user.html#dx1-174041" >2506
    \ifglshasprefixfirst  2470
    +href="glossaries-user.html#dx1-174045" >2507
    \ifglshasprefixfirstplural  2471
    +href="glossaries-user.html#dx1-174047" >2508
    \ifglshasprefixplural  2472
    +href="glossaries-user.html#dx1-174043" >2509
    \ifglshasshort  2473, 2474, 2475
    +href="glossaries-user.html#dx1-139012" >2510, 2511, 2512
    \ifglshassymbol  2476, 2477, 2478
    +href="glossaries-user.html#dx1-11052" >2513, 2514, 2515
    \ifglsucmark  2479
    +href="glossaries-user.html#dx1-43011" >2516
    \ifglsused  2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 2489
    +href="glossaries-user.html#dx1-34019" >2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524, 2525, 2526
    \ifglsxtrinsertinside  2490, 2491, 2492, 2493, 2494, 2495, 2496, 2497
    +href="glossaries-user.html#dx1-187014" >2527, 2528, 2529, 2530, 2531, 2532, 2533, 2534
    \ifignoredglossary  2498
    +href="glossaries-user.html#dx1-145014" >2535
    imakeidx package  2499
    +href="glossaries-user.html#dx1-88011" >2536
    \include  2500
    +href="glossaries-user.html#dx1-123008" >2537
    \includegraphics  2501, 2502
    +href="glossaries-user.html#dx1-227031" >2538, 2539
    \index  2503, 2504, 2505, 2506
    +href="glossaries-user.html#dx1-88008" >2540, 2541, 2542, 2543
    index package  2507
    +href="glossaries-user.html#dx1-88010" >2544
    \indexname  2508
    +href="glossaries-user.html#dx1-145027" >2545
    \indexspace  2509, 2510, 2511, 2512
    +href="glossaries-user.html#dx1-156015" >2546, 2547, 2548, 2549
    \input  2513, 2514
    +href="glossaries-user.html#dx1-12002" >2550, 2551
    inputenc package  2515, 2516, 2517, 2518, 2519, 2520, 2521
    +href="glossaries-user.html#dx1-13015" >2552, 2553, 2554, 2555, 2556, 2557, 2558
    \inputencodingname  2522
    +href="glossaries-user.html#dx1-167009" >2559
    internal fields:
    +    childcount  2560
        location  2523, 2524, 2525
    +href="glossaries-user.html#dx1-5009" >2561, 2562, 2563
        loclist  2526
    +href="glossaries-user.html#dx1-223034" >2564
    + +     siblingcount  2527, 2528
    +href="glossaries-user.html#dx1-203045" >2565, 2566
        useri  2529
    +href="glossaries-user.html#dx1-192035" >2567
    \item  2530, 2531
    +href="glossaries-user.html#dx1-156013" >2568, 2569

    J - - \jobname  2532, 2533
    +href="glossaries-user.html#dx1-112011" >2570, 2571

    L \label  2534
    +href="glossaries-user.html#dx1-44005" >2572
    latex  2535, 2536
    +href="glossaries-user.html#dx1-27" >2573, 2574
    latexmk  2537, 2538, 2539
    +href="glossaries-user.html#dx1-16019" >2575, 2576, 2577
    Latin alphabet  2540, 2541, 2542
    +class="cmbx-10">2578, 2579, 2580
    Latin character  2543, 2544, 2545, 2546, 2581, 2582, 2583, 2584, 2547, 2548, 2549
    +class="cmbx-10">2585, 2586, 2587
    link text  2550, 2551, 2552, 2553, 2554, 2555, 2556, 2557, 2558, 2559, 2560, 2561, 2562, 2563, 2564, 2565, 2566, 2567, 2568, 2569, 2570, 2571, 2572, 2573, 2574, 2575, 2576, 2577, 2578, 2579, 2580, 2581, 2582, 2583, 2584, 2585, 2586, 2587, 2588, 2589, 2590, 2591, 2592, 2593, 2594, 2595, 2596, 2597, 2598, 2599, 2600, 2601, 2602, 2603, 2604, 2605, 2606, 2607, 2608, 2609, 2610, 2611, 2612, 2613, 2614, 2615, 2616
    +class="cmbx-10">2588, 2589, 2590, 2591, 2592, 2593, 2594, 2595, 2596, 2597, 2598, 2599, 2600, 2601, 2602, 2603, 2604, 2605, 2606, 2607, 2608, 2609, 2610, 2611, 2612, 2613, 2614, 2615, 2616, 2617, 2618, 2619, 2620, 2621, 2622, 2623, 2624, 2625, 2626, 2627, 2628, 2629, 2630, 2631, 2632, 2633, 2634, 2635, 2636, 2637, 2638, 2639, 2640, 2641, 2642, 2643, 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2651, 2652, 2653, 2654
    \listbreak  2617
    +href="glossaries-user.html#dx1-203049" >2655
    \loadglsentries  2618, 2619, 2620, 2621, 2622, 2623, 2624, 2625, 2626
    +href="glossaries-user.html#dx1-6003" >2656, 2657, 2658, 2659, 2660, 2661, 2662, 2663, 2664
    location list  see number list
    +href="glossaries-user.html#dx1-149004" >number list
    \longnewglossaryentry  2628, 2629, 2630, 2631
    +href="glossaries-user.html#dx1-113009" >2666, 2667, 2668, 2669
    \longprovideglossaryentry  2632
    +href="glossaries-user.html#dx1-113011" >2670
    longtable package  2633, 2634
    +href="glossaries-user.html#dx1-51002" >2671, 2672

    M \makeatletter  2635
    +href="glossaries-user.html#dx1-139086" >2673
    \makeatother  2636
    +href="glossaries-user.html#dx1-139087" >2674
    \makefirstuc  2637, 2638, 2639, 2640
    +href="glossaries-user.html#dx1-130023" >2675, 2676, 2677, 2678
    makeglossaries  2641, 2642, 2643, 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2651, 2652, 2653, 2654, 2655, 2656, 2657, 2658, 2659, 2660, 2661, 2662, 2663, 2664, 2665, 2666, 2667, 2668, 2669, 2670, 2671, 2672, 2673, 2674, 2675, 2676, 2677, 2678, 2679, 2680, 2681, 2682, 2683, 2684, 2685, 2686, 2687, 2688, 2689, 2690, 2691, 2692, 2693, 2694, 2695, 2696, 2697, 2698, 2699, 2700, 2701, 2702, 2703, 2704, 2705, 2706, 2707, 2708, 2709, 2710, 2711, 2712, 2713, 2714, 2715, 2716, 2717, 2718, 2719, 2720, 2721, 2722, 2723, 2724, 2725, 2726, 2727, 2728, 2729, 2730, 2731, 2732, 2733, 2734, 2735, 2736, 2737, 2738, 2739, 2740
    +class="cmbx-10">2679, 2680, 2681, 2682, 2683, 2684, 2685, 2686, 2687, 2688, 2689, 2690, 2691, 2692, 2693, 2694, 2695, 2696, 2697, 2698, 2699, 2700, 2701, 2702, 2703, 2704, 2705, 2706, 2707, 2708, 2709, 2710, 2711, 2712, 2713, 2714, 2715, 2716, 2717, 2718, 2719, 2720, 2721, 2722, 2723, 2724, 2725, 2726, 2727, 2728, 2729, 2730, 2731, 2732, 2733, 2734, 2735, 2736, 2737, 2738, 2739, 2740, 2741, 2742, 2743, 2744, 2745, 2746, 2747, 2748, 2749, 2750, 2751, 2752, 2753, 2754, 2755, 2756, 2757, 2758, 2759, 2760, 2761, 2762, 2763, 2764, 2765, 2766, 2767, 2768, 2769, 2770, 2771, 2772, 2773, 2774, 2775, 2776, 2777, 2778
        -d  2741
    +href="glossaries-user.html#dx1-18004" >2779
        -k  2742
    +href="glossaries-user.html#dx1-17015" >2780
        -m  2743
    +href="glossaries-user.html#dx1-17023" >2781
        -Q  2744
    +href="glossaries-user.html#dx1-17014" >2782
        -q  2745
    +href="glossaries-user.html#dx1-17017" >2783
        -x  2746
    +href="glossaries-user.html#dx1-17025" >2784
    \makeglossaries  2747, 2748, 2749, 2750, 2751, 2752, 2753, 2754, 2755, 2756, 2757, 2758, 2759, 2760, 2761, 2762, 2763, 2764, 2765, 2766, 2767, 2768, 2769, 2770, 2771, 2772, 2773, 2774, 2775, 2776, 2777, 2778, 2779, 2780, 2781, 2782, 2783
    +href="glossaries-user.html#dx1-7001" >2785, 2786, 2787, 2788, 2789, 2790, 2791, 2792, 2793, 2794, 2795, 2796, 2797, 2798, 2799, 2800, 2801, 2802, 2803, 2804, 2805, 2806, 2807, 2808, 2809, 2810, 2811, 2812, 2813, 2814, 2815, 2816, 2817, 2818, 2819, 2820, 2821
    makeglossaries-lite  2784, 2785, 2786, 2787, 2788, 2789, 2790, 2791, 2792, 2793, 2794, 2795, 2796, 2797, 2798, 2799, 2800, 2801, 2802, 2803, 2804, 2805, 2806, 2807, 2808, 2809, 2810
    +class="cmbx-10">2822, 2823, 2824, 2825, 2826, 2827, 2828, 2829, 2830, 2831, 2832, 2833, 2834, 2835, 2836, 2837, 2838, 2839, 2840, 2841, 2842, 2843, 2844, 2845, 2846, 2847, 2848
    makeglossariesgui  2811, 2812, 2813
    +class="cmbx-10">2849, 2850, 2851
    makeidx package  2814
    +href="glossaries-user.html#dx1-88009" >2852
    makeindex  2815, 2816, 2817, 2818, 2853, 2854, 2855, 2856, 2819, 2820, 2821, 2822, 2823, 2824, 2825, 2826, 2827, 2828, 2829, 2830, 2831, 2832, 2833, 2834, 2835, 2836, 2837, 2838, 2839, 2840, 2841, 2842, 2843, 2844, 2845, 2846, 2847, 2848, 2849, 2850, 2851, 2852, 2853, 2854, 2855, 2856, 2857, 2858, 2859, 2860, 2861, 2862, 2863, 2864, 2865, 2866, 2867, 2868, 2869, 2870, 2871, 2872, 2873, 2874, 2875, 2876, 2877, 2878, 2879, 2880, 2881, 2882, 2883, 2884, 2885, 2886, 2887, 2888, 2889, 2890, 2891, 2892, 2893, 2894, 2895, 2896, 2897, 2898, 2899, 2900, 2901, 2902, 2903, 2904, 2905, 2906, 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, 2916, 2917, 2918, 2919, 2920, 2921, 2922, 2923, 2924, 2925, 2926, 2927, 2928, 2929, 2930, 2931, 2932, 2933, 2934, 2935, 2936, 2937, 2938, 2939, 2940, 2941, 2942, 2943, 2944, 2945, 2946, 2947, 2948, 2949, 2950, 2951, 2952, 2953, 2954, 2955, 2956, 2957, 2958, 2959, 2960, 2961, 2962, 2963
    +class="cmbx-10">2857, 2858, 2859, 2860, 2861, 2862, 2863, 2864, 2865, 2866, 2867, 2868, 2869, 2870, 2871, 2872, 2873, 2874, 2875, 2876, 2877, 2878, 2879, 2880, 2881, 2882, 2883, 2884, 2885, 2886, 2887, 2888, 2889, 2890, 2891, 2892, 2893, 2894, 2895, 2896, 2897, 2898, 2899, 2900, 2901, 2902, 2903, 2904, 2905, 2906, 2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, 2916, 2917, 2918, 2919, 2920, 2921, 2922, 2923, 2924, 2925, 2926, 2927, 2928, 2929, 2930, 2931, 2932, 2933, 2934, 2935, 2936, 2937, 2938, 2939, 2940, 2941, 2942, 2943, 2944, 2945, 2946, 2947, 2948, 2949, 2950, 2951, 2952, 2953, 2954, 2955, 2956, 2957, 2958, 2959, 2960, 2961, 2962, 2963, 2964, 2965, 2966, 2967, 2968, 2969, 2970, 2971, 2972, 2973, 2974, 2975, 2976, 2977, 2978, 2979, 2980, 2981, 2982, 2983, 2984, 2985, 2986, 2987, 2988, 2989, 2990, 2991, 2992, 2993, 2994, 2995, 2996, 2997, 2998, 2999, 3000, 3001
        -g  2964, 2965, 2966
    +href="glossaries-user.html#dx1-7016" >3002, 3003, 3004
    + +     -l  2967, 2968, 2969, 2970, 2971
    +href="glossaries-user.html#dx1-7042" >3005, 3006, 3007, 3008, 3009
    \makenoidxglossaries  2972, 2973, 2974, 2975, 2976, 2977, 2978, 2979, 2980, 2981, 2982
    +href="glossaries-user.html#dx1-6001" >3010, 3011, 3012, 3013, 3014, 3015, 3016, 3017, 3018, 3019, 3020
    \MakeTextUppercase  2983, 2984
    +href="glossaries-user.html#dx1-43005" >3021, 3022
    \markboth  2985
    - - +href="glossaries-user.html#dx1-42006" >3023
    memoir class  2986, 2987, 2988, 2989
    +href="glossaries-user.html#dx1-43002" >3024, 3025, 3026, 3027
    \memUChead  2990
    +href="glossaries-user.html#dx1-43015" >3028
    mfirstuc package  2991, 2992, 2993, 2994, 2995, 2996, 2997
    +href="glossaries-user.html#dx1-6" >3029, 3030, 3031, 3032, 3033, 3034, 3035
    \mfirstucMakeUppercase  2998
    +href="glossaries-user.html#dx1-43007" >3036
    \midrule  2999
    +href="glossaries-user.html#dx1-159013" >3037
    multicol package  3000
    +href="glossaries-user.html#dx1-163004" >3038
    mwe package  3001, 3002
    +href="glossaries-user.html#dx1-12010" >3039, 3040, 3041

    N nameref package  3003
    +href="glossaries-user.html#dx1-44014" >3042
    \newabbreviation  3004, 3005, 3006, 3007, 3008, 3009, 3010, 3011, 3012, 3013, 3014, 3015, 3016, 3017, 3018, 3019, 3020, 3021, 3022, 3023, 3024, 3025, 3026, 3027, 3028, 3029, 3030, 3031, 3032, 3033, 3034, 3035
    +href="glossaries-user.html#dx1-4008" >3043, 3044, 3045, 3046, 3047, 3048, 3049, 3050, 3051, 3052, 3053, 3054, 3055, 3056, 3057, 3058, 3059, 3060, 3061, 3062, 3063, 3064, 3065, 3066, 3067, 3068, 3069, 3070, 3071, 3072, 3073, 3074
    \newabbreviationstyle  3036
    +href="glossaries-user.html#dx1-187008" >3075
    \newacronym  3037, 3038, 3039, 3040, 3041, 3042, 3043, 3044, 3045, 3046, 3047, 3048, 3049, 3050, 3051, 3052, 3053, 3054, 3055, 3056, 3057, 3058, 3059, 3060, 3061, 3062, 3063, 3064, 3065, 3066, 3067, 3068, 3069, 3070, 3071, 3072, 3073, 3074, 3075, 3076, 3077, 3078, 3079, 3080, 3081, 3082, 3083, 3084, 3085, 3086, 3087, 3088, 3089, 3090, 3091, 3092, 3093, 3094, 3095, 3096, 3097, 3098, 3099
    +href="glossaries-user.html#dx1-12011" >3076, 3077, 3078, 3079, 3080, 3081, 3082, 3083, 3084, 3085, 3086, 3087, 3088, 3089, 3090, 3091, 3092, 3093, 3094, 3095, 3096, 3097, 3098, 3099, 3100, 3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3109, 3110, 3111, 3112, 3113, 3114, 3115, 3116, 3117, 3118, 3119, 3120, 3121, 3122, 3123, 3124, 3125, 3126, 3127, 3128, 3129, 3130, 3131, 3132, 3133, 3134, 3135, 3136, 3137, 3138
    \newacronymstyle  3100, 3101, 3102
    +href="glossaries-user.html#dx1-139001" >3139, 3140, 3141
    \newdualentry  3103, 3104
    +href="glossaries-user.html#dx1-146018" >3142, 3143
    \newglossary  3105, 3106, 3107, 3108, 3109, 3110, 3111
    +href="glossaries-user.html#dx1-19020" >3144, 3145, 3146, 3147, 3148, 3149, 3150
    \newglossary*  3112, 3113, 3114, 3115
    +href="glossaries-user.html#dx1-145007" >3151, 3152, 3153, 3154
    \newglossaryentry  3116, 3117, 3118, 3119, 3120, 3121, 3122, 3123, 3124, 3125, 3126, 3127, 3128, 3129, 3130, 3131, 3132, 3133, 3134, 3135, 3136, 3137, 3138, 3139, 3140, 3141, 3142, 3143, 3144, 3145, 3146, 3147, 3148
    +href="glossaries-user.html#dx1-3033" >3155, 3156, 3157, 3158, 3159, 3160, 3161, 3162, 3163, 3164, 3165, 3166, 3167, 3168, 3169, 3170, 3171, 3172, 3173, 3174, 3175, 3176, 3177, 3178, 3179, 3180, 3181, 3182, 3183, 3184, 3185, 3186
    \newglossaryentry options
        access  3149, 3150
    +href="glossaries-user.html#dx1-175013" >3187, 3188
        alias  3151, 3152, 3153, 3154
    +href="glossaries-user.html#dx1-11093" >3189, 3190, 3191, 3192
        category  3155, 3156, 3157, 3158, 3159, 3160, 3161, 3162, 3163, 3164, 3165, 3166, 3167, 3168, 3169
    +href="glossaries-user.html#dx1-12013" >3193, 3194, 3195, 3196, 3197, 3198, 3199, 3200, 3201, 3202, 3203, 3204, 3205, 3206, 3207
        description  3170, 3171, 3172, 3173, 3174, 3175, 3176, 3177, 3178, 3179, 3180, 3181, 3182, 3183, 3184, 3185, 3186, 3187, 3188, 3189, 3190, 3191, 3192
    +href="glossaries-user.html#dx1-12014" >3208, 3209, 3210, 3211, 3212, 3213, 3214, 3215, 3216, 3217, 3218, 3219, 3220, 3221, 3222, 3223, 3224, 3225, 3226, 3227, 3228, 3229, 3230
        descriptionaccess  3193
    +href="glossaries-user.html#dx1-175027" >3231
        descriptionplural  3194, 3195, 3196, 3197
    +href="glossaries-user.html#dx1-113031" >3232, 3233, 3234, 3235
        descriptionpluralaccess  3198
    +href="glossaries-user.html#dx1-175029" >3236
        entrycounter  3199, 3200
    +href="glossaries-user.html#dx1-144044" >3237, 3238
        first  3201, 3202, 3203, 3204, 3205, 3206, 3207, 3208, 3209, 3210, 3211, 3212, 3213, 3214, 3215, 3216, 3217, 3218, 3219, 3220, 3221, 3222, 3223, 3224, 3225, 3226, 3227, 3228
    +href="glossaries-user.html#dx1-3031" >3239, 3240, 3241, 3242, 3243, 3244, 3245, 3246, 3247, 3248, 3249, 3250, 3251, 3252, 3253, 3254, 3255, 3256, 3257, 3258, 3259, 3260, 3261, 3262, 3263, 3264, 3265, 3266, 3267, 3268, 3269
        firstaccess  3229
    +href="glossaries-user.html#dx1-175017" >3270
        firstplural  3230, 3231, 3232, 3233, 3234, 3235, 3236, 3237, 3238, 3239, 3240, 3241, 3242, 3243, 3244, 3245, 3246, 3247, 3248, 3249
    +href="glossaries-user.html#dx1-3032" >3271, 3272, 3273, 3274, 3275, 3276, 3277, 3278, 3279, 3280, 3281, 3282, 3283, 3284, 3285, 3286, 3287, 3288, 3289
        firstpluralaccess  3250
    +href="glossaries-user.html#dx1-175021" >3290
    +    format  3291
        long  3251, 3252, 3253, 3254, 3255, 3256, 3257, 3258, 3259, 3260, 3261, 3262, 3263, 3264
    +href="glossaries-user.html#dx1-34020" >3292, 3293, 3294, 3295, 3296, 3297, 3298, 3299, 3300, 3301, 3302, 3303, 3304, 3305
        longaccess  3265
    +href="glossaries-user.html#dx1-175031" >3306
        longplural  3266, 3267, 3268, 3269, 3270, 3271, 3272, 3273, 3274, 3275, 3276
    +href="glossaries-user.html#dx1-15009" >3307, 3308, 3309, 3310, 3311, 3312, 3313, 3314, 3315, 3316, 3317, 3318
        longpluralaccess  3277
    +href="glossaries-user.html#dx1-175037" >3319
    + +     name  3278, 3279, 3280, 3281, 3282, 3283, 3284, 3285, 3286, 3287, 3288, 3289, 3290, 3291, 3292, 3293, 3294, 3295, 3296, 3297, 3298, 3299, 3300, 3301, 3302, 3303, 3304, 3305, 3306, 3307, 3308, 3309, 3310, 3311, 3312, 3313, 3314, 3315, 3316, 3317, 3318, 3319, 3320, 3321, 3322, 3323, 3324, 3325, 3326, 3327, 3328, 3329, 3330, 3331, 3332, 3333, 3334, 3335, 3336, 3337, 3338
    +href="glossaries-user.html#dx1-6016" >3320, 3321, 3322, 3323, 3324, 3325, 3326, 3327, 3328, 3329, 3330, 3331, 3332, 3333, 3334, 3335, 3336, 3337, 3338, 3339, 3340, 3341, 3342, 3343, 3344, 3345, 3346, 3347, 3348, 3349, 3350, 3351, 3352, 3353, 3354, 3355, 3356, 3357, 3358, 3359, 3360, 3361, 3362, 3363, 3364, 3365, 3366, 3367, 3368, 3369, 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377, 3378, 3379, 3380
        nonumberlist  3339
    +href="glossaries-user.html#dx1-113123" >3381
        parent  3340, 3341, 3342, 3343
    +href="glossaries-user.html#dx1-113017" >3382, 3383, 3384, 3385
        plural  3344, 3345, 3346, 3347, 3348, 3349, 3350, 3351, 3352, 3353, 3354, 3355, 3356, 3357, 3358, 3359, 3360, 3361, 3362, 3363, 3364, 3365, 3366
    - - +href="glossaries-user.html#dx1-15008" >3386, 3387, 3388, 3389, 3390, 3391, 3392, 3393, 3394, 3395, 3396, 3397, 3398, 3399, 3400, 3401, 3402, 3403, 3404, 3405, 3406, 3407, 3408, 3409, 3410
        pluralaccess  3367
    +href="glossaries-user.html#dx1-175019" >3411
        prefix  3368, 3369, 3370, 3371, 3372, 3373, 3374, 3375, 3376
    +href="glossaries-user.html#dx1-174003" >3412, 3413, 3414, 3415, 3416, 3417, 3418, 3419, 3420
        prefixfirst  3377, 3378, 3379, 3380, 3381
    +href="glossaries-user.html#dx1-174007" >3421, 3422, 3423, 3424, 3425
        prefixfirstplural  3382, 3383, 3384, 3385
    +href="glossaries-user.html#dx1-174010" >3426, 3427, 3428, 3429
        prefixplural  3386, 3387, 3388, 3389, 3390, 3391, 3392, 3393
    +href="glossaries-user.html#dx1-174005" >3430, 3431, 3432, 3433, 3434, 3435, 3436, 3437
        see  3394, 3395, 3396, 3397, 3398, 3399, 3400, 3401, 3402, 3403, 3404, 3405, 3406, 3407, 3408, 3409, 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3417, 3418, 3419, 3420, 3421, 3422
    +href="glossaries-user.html#dx1-12028" >3438, 3439, 3440, 3441, 3442, 3443, 3444, 3445, 3446, 3447, 3448, 3449, 3450, 3451, 3452, 3453, 3454, 3455, 3456, 3457, 3458, 3459, 3460, 3461, 3462, 3463, 3464, 3465, 3466
        seealso  3423, 3424, 3425, 3426, 3427, 3428, 3429, 3430, 3431, 3432
    +href="glossaries-user.html#dx1-12030" >3467, 3468, 3469, 3470, 3471, 3472, 3473, 3474, 3475, 3476, 3477
        short  3433, 3434, 3435, 3436, 3437, 3438, 3439, 3440, 3441, 3442, 3443, 3444, 3445, 3446, 3447, 3448
    +href="glossaries-user.html#dx1-9016" >3478, 3479, 3480, 3481, 3482, 3483, 3484, 3485, 3486, 3487, 3488, 3489, 3490, 3491, 3492, 3493
        shortaccess  3449, 3450, 3451, 3452, 3453, 3454, 3455
    +href="glossaries-user.html#dx1-175034" >3494, 3495, 3496, 3497, 3498, 3499, 3500
        shortplural  3456, 3457, 3458, 3459, 3460, 3461, 3462, 3463, 3464, 3465, 3466, 3467, 3468
    +href="glossaries-user.html#dx1-15010" >3501, 3502, 3503, 3504, 3505, 3506, 3507, 3508, 3509, 3510, 3511, 3512, 3513, 3514, 3515
        shortpluralaccess  3469
    +href="glossaries-user.html#dx1-175040" >3516
        sort  3470, 3471, 3472, 3473, 3474, 3475, 3476, 3477, 3478, 3479, 3480, 3481, 3482, 3483, 3484, 3485, 3486, 3487, 3488, 3489, 3490, 3491, 3492, 3493, 3494, 3495, 3496, 3497, 3498, 3499, 3500, 3501, 3502, 3503, 3504, 3505, 3506, 3507, 3508, 3509, 3510, 3511, 3512, 3513, 3514, 3515, 3516, 3517, 3518, 3519, 3520, 3521, 3522, 3523, 3524, 3525, 3526, 3527, 3528, 3529, 3530, 3531
    +href="glossaries-user.html#dx1-3062" >3517, 3518, 3519, 3520, 3521, 3522, 3523, 3524, 3525, 3526, 3527, 3528, 3529, 3530, 3531, 3532, 3533, 3534, 3535, 3536, 3537, 3538, 3539, 3540, 3541, 3542, 3543, 3544, 3545, 3546, 3547, 3548, 3549, 3550, 3551, 3552, 3553, 3554, 3555, 3556, 3557, 3558, 3559, 3560, 3561, 3562, 3563, 3564, 3565, 3566, 3567, 3568, 3569, 3570, 3571, 3572, 3573, 3574, 3575, 3576, 3577, 3578
        subentrycounter  3532
    +href="glossaries-user.html#dx1-144045" >3579
        symbol  3533, 3534, 3535, 3536, 3537, 3538, 3539, 3540, 3541, 3542, 3543, 3544, 3545, 3546, 3547, 3548, 3549, 3550, 3551, 3552
    +href="glossaries-user.html#dx1-11051" >3580, 3581, 3582, 3583, 3584, 3585, 3586, 3587, 3588, 3589, 3590, 3591, 3592, 3593, 3594, 3595, 3596, 3597, 3598, 3599
        symbolaccess  3553, 3554
    +href="glossaries-user.html#dx1-175023" >3600, 3601
        symbolplural  3555, 3556, 3557
    +href="glossaries-user.html#dx1-113078" >3602, 3603, 3604
        symbolpluralaccess  3558
    +href="glossaries-user.html#dx1-175025" >3605
        text  3559, 3560, 3561, 3562, 3563, 3564, 3565, 3566, 3567, 3568, 3569, 3570, 3571, 3572, 3573, 3574, 3575, 3576, 3577, 3578, 3579, 3580, 3581, 3582, 3583, 3584, 3585, 3586, 3587, 3588, 3589, 3590, 3591, 3592
    +href="glossaries-user.html#dx1-11064" >3606, 3607, 3608, 3609, 3610, 3611, 3612, 3613, 3614, 3615, 3616, 3617, 3618, 3619, 3620, 3621, 3622, 3623, 3624, 3625, 3626, 3627, 3628, 3629, 3630, 3631, 3632, 3633, 3634, 3635, 3636, 3637, 3638, 3639, 3640
        textaccess  3593
    +href="glossaries-user.html#dx1-175015" >3641
        type  3594, 3595, 3596, 3597, 3598, 3599, 3600, 3601, 3602
    +href="glossaries-user.html#dx1-7031" >3642, 3643, 3644, 3645, 3646, 3647, 3648, 3649, 3650
        user1  3603, 3604, 3605, 3606, 3607, 3608, 3609, 3610, 3611, 3612, 3613, 3614, 3615, 3616, 3617, 3618, 3619
    +href="glossaries-user.html#dx1-12009" >3651, 3652, 3653, 3654, 3655, 3656, 3657, 3658, 3659, 3660, 3661, 3662, 3663, 3664, 3665, 3666, 3667, 3668
        user1access  3620, 3621
    +href="glossaries-user.html#dx1-175043" >3669, 3670
        user2  3622, 3623, 3624, 3625, 3626
    +href="glossaries-user.html#dx1-113117" >3671, 3672, 3673, 3674, 3675
        user2access  3627
    +href="glossaries-user.html#dx1-175045" >3676
        user3  3628, 3629, 3630, 3631
    +href="glossaries-user.html#dx1-113118" >3677, 3678, 3679, 3680
        user3access  3632
    +href="glossaries-user.html#dx1-175047" >3681
        user4  3633, 3634, 3635, 3636
    +href="glossaries-user.html#dx1-113119" >3682, 3683, 3684, 3685
        user4access  3637
    +href="glossaries-user.html#dx1-175049" >3686
        user5  3638, 3639, 3640, 3641
    +href="glossaries-user.html#dx1-113120" >3687, 3688, 3689, 3690
        user5access  3642
    +href="glossaries-user.html#dx1-175051" >3691
        user6  3643, 3644, 3645, 3646, 3647
    +href="glossaries-user.html#dx1-113116" >3692, 3693, 3694, 3695, 3696
        user6access  3648
    +href="glossaries-user.html#dx1-175053" >3697
    \newglossarystyle  3649, 3650, 3651, 3652
    +href="glossaries-user.html#dx1-155036" >3698, 3699, 3700, 3701
    \newignoredglossary  3653, 3654, 3655, 3656, 3657, 3658
    +href="glossaries-user.html#dx1-34012" >3702, 3703, 3704, 3705, 3706, 3707
    \newline  3659, 3660
    +href="glossaries-user.html#dx1-113028" >3708, 3709
    \newterm  3661, 3662
    +href="glossaries-user.html#dx1-88001" >3710, 3711
    ngerman package  3663, 3664, 3665, 3666
    +href="glossaries-user.html#dx1-13029" >3712, 3713, 3714, 3715
    + + \nohyperpage  3667
    +href="glossaries-user.html#dx1-152013" >3716
    \noist  3668, 3669, 3670, 3671, 3672, 3673, 3674, 3675, 3676, 3677, 3678, 3679
    +href="glossaries-user.html#dx1-112008" >3717, 3718, 3719, 3720, 3721, 3722, 3723, 3724, 3725, 3726, 3727, 3728
    Non-Latin Alphabet  3680
    +class="cmbx-10">3729
    non-Latin character  3681, 3682, 3730, 3731, 3683, 3684, 3685, 3686, 3687, 3688, 3689, 3690, 3691
    +class="cmbx-10">3732, 3733, 3734, 3735, 3736, 3737, 3738, 3739, 3740
    \nopostdesc  3692, 3693, 3694, 3695, 3696, 3697, 3698, 3699, 3700, 3701, 3702, 3703, 3704
    +href="glossaries-user.html#dx1-88003" >3741, 3742, 3743, 3744, 3745, 3746, 3747, 3748, 3749, 3750, 3751, 3752, 3753
    \nopostdot  3705
    - - +href="glossaries-user.html#dx1-205034" >3754
    \null  3706, 3707
    +href="glossaries-user.html#dx1-144011" >3755, 3756
    \number  3708
    +href="glossaries-user.html#dx1-151027" >3757
    number list  3709, 3710, 3711, 3712, 3713, 3714, 3715, 3716, 3717, 3718, 3719, 3720, 3721, 3722, 3723, 3724, 3725, 3726, 3727, 3728, 3729, 3730, 3731, 3732, 3733, 3734, 3735, 3736, 3737, 3738, 3739, 3740, 3741, 3742, 3743, 3744, 3745, 3746, 3747, 3748, 3749, 3750, 3751, 3752, 3753, 3754, 3755, 3756, 3757, 3758, 3759, 3760, 3761, 3762, 3763, 3764, 3765, 3766, 3767, 3768, 3769, 3770, 3771, 3772, 3773, 3774, 3775, 3776, 3777, 3778, 3779, 3780, 3781, 3782, 3783, 3784, 3785, 3786, 3787, 3788, 3789, 3790, 3791, 3792, 3793, 3794, 3795, 3796
    +class="cmbx-10">3758, 3759, 3760, 3761, 3762, 3763, 3764, 3765, 3766, 3767, 3768, 3769, 3770, 3771, 3772, 3773, 3774, 3775, 3776, 3777, 3778, 3779, 3780, 3781, 3782, 3783, 3784, 3785, 3786, 3787, 3788, 3789, 3790, 3791, 3792, 3793, 3794, 3795, 3796, 3797, 3798, 3799, 3800, 3801, 3802, 3803, 3804, 3805, 3806, 3807, 3808, 3809, 3810, 3811, 3812, 3813, 3814, 3815, 3816, 3817, 3818, 3819, 3820, 3821, 3822, 3823, 3824, 3825, 3826, 3827, 3828, 3829, 3830, 3831, 3832, 3833, 3834, 3835, 3836, 3837, 3838, 3839, 3840, 3841, 3842, 3843, 3844, 3845, 3846, 3847, 3848
    \numberline  3797
    +href="glossaries-user.html#dx1-41002" >3849

    O \oldacronym  3798, 3799
    +href="glossaries-user.html#dx1-141004" >3850, 3851

    P package options:
        abbreviations  3800, 3801, 3802, 3803, 3804, 3805, 3806, 3807
    +href="glossaries-user.html#dx1-4011" >3852, 3853, 3854, 3855, 3856, 3857, 3858, 3859
        accsupp  3808, 3809, 3810
    +href="glossaries-user.html#x1-1030002.9" >3860, 3861, 3862
        acronym  3811, 3812, 3813, 3814, 3815, 3816, 3817, 3818, 3819, 3820, 3821, 3822, 3823, 3824, 3825, 3826, 3827, 3828, 3829, 3830, 3831, 3832, 3833, 3834, 3835, 3836, 3837, 3838, 3839, 3840, 3841, 3842, 3843, 3844, 3845
    +href="glossaries-user.html#dx1-14026" >3863, 3864, 3865, 3866, 3867, 3868, 3869, 3870, 3871, 3872, 3873, 3874, 3875, 3876, 3877, 3878, 3879, 3880, 3881, 3882, 3883, 3884, 3885, 3886, 3887, 3888, 3889, 3890, 3891, 3892, 3893, 3894, 3895, 3896, 3897
            true  3846, 3847
    +href="glossaries-user.html#dx1-25002" >3898, 3899
        acronymlists  3848, 3849, 3850, 3851, 3852, 3853, 3854
    +href="glossaries-user.html#x1-940002.7" >3900, 3901, 3902, 3903, 3904, 3905, 3906
        acronyms  3855, 3856, 3857
    +href="glossaries-user.html#dx1-85003" >3907, 3908, 3909
        automake  3858, 3859, 3860, 3861
    +href="glossaries-user.html#dx1-7010" >3910, 3911, 3912, 3913
            false  3862
    +href="glossaries-user.html#dx1-80021" >3914
            immediate  3863, 3864, 3865
    +href="glossaries-user.html#dx1-80005" >3915, 3916, 3917
            true  3866, 3867
    +href="glossaries-user.html#dx1-80001" >3918, 3919
        autoseeindex  3868
    +href="glossaries-user.html#x1-670002.4" >3920
            false  3869, 3870
    +href="glossaries-user.html#dx1-207008" >3921, 3922
        compatible-2.07  3871, 3872, 3873
    +href="glossaries-user.html#x1-1060002.9" >3923, 3924, 3925
        compatible-3.07  3874, 3875, 3876
    +href="glossaries-user.html#dx1-91003" >3926, 3927, 3928
        counter  3877, 3878, 3879, 3880, 3881
    +href="glossaries-user.html#x1-580002.3" >3929, 3930, 3931, 3932, 3933
            equation  3882
    +href="glossaries-user.html#dx1-192002" >3934
            page  3883
    +href="glossaries-user.html#dx1-58001" >3935
        counterwithin  3884, 3885, 3886, 3887, 3888
    +href="glossaries-user.html#x1-480002.3" >3936, 3937, 3938, 3939, 3940
        debug  3889, 3890, 3891, 3892
    +href="glossaries-user.html#dx1-27002" >3941, 3942, 3943, 3944
            all  3893
    +href="glossaries-user.html#dx1-30004" >3945
            false  3894, 3895
    +href="glossaries-user.html#dx1-30001" >3946, 3947
            showaccsupp  3896, 3897, 3898
    +href="glossaries-user.html#dx1-30011" >3948, 3949, 3950
            showtargets  3899
    +href="glossaries-user.html#dx1-30007" >3951
            showwrgloss  3900
    +href="glossaries-user.html#dx1-30003" >3952
            true  3901
    +href="glossaries-user.html#dx1-30002" >3953
        description (deprecated)  3902, 3903, 3904, 3905, 3906, 3907, 3908, 3909, 3910
    +href="glossaries-user.html#x1-970002.8" >3954, 3955, 3956, 3957, 3958, 3959, 3960, 3961, 3962
    + +     disablemakegloss  3911, 3912
    +href="glossaries-user.html#x1-810002.5" >3963, 3964
        docdef  3913
    +href="glossaries-user.html#x1-380002.1" >3965
            atom  3914, 3915
    +href="glossaries-user.html#dx1-23003" >3966, 3967
            false  3916
    +href="glossaries-user.html#dx1-5013" >3968
            restricted  3917, 3918, 3919, 3920
    +href="glossaries-user.html#dx1-5012" >3969, 3970, 3971, 3972
            true  3921, 3922
    - - +href="glossaries-user.html#dx1-5011" >3973, 3974
        dua (deprecated)  3923, 3924
    +href="glossaries-user.html#dx1-97009" >3975, 3976
        entrycounter  3925, 3926, 3927, 3928, 3929
    +href="glossaries-user.html#x1-470002.3" >3977, 3978, 3979, 3980, 3981
            false  3930
    +href="glossaries-user.html#dx1-47001" >3982
            true  3931
    +href="glossaries-user.html#dx1-48001" >3983
        equations  3932
    +href="glossaries-user.html#x1-690002.4" >3984
        esclocations  3933
    +href="glossaries-user.html#x1-640002.4" >3985
            false  3934, 3935, 3936
    +href="glossaries-user.html#dx1-64003" >3986, 3987, 3988
            true  3937
    +href="glossaries-user.html#dx1-64001" >3989
        floats  3938
    +href="glossaries-user.html#x1-700002.4" >3990
        footnote (deprecated)  3939, 3940, 3941, 3942, 3943, 3944
    +href="glossaries-user.html#dx1-97004" >3991, 3992, 3993, 3994, 3995, 3996
        hyperfirst  3945, 3946, 3947, 3948
    +href="glossaries-user.html#x1-340002.1" >3997, 3998, 3999, 4000
            false  3949, 3950, 3951, 3952, 3953, 3954, 3955
    +href="glossaries-user.html#dx1-34014" >4001, 4002, 4003, 4004, 4005, 4006, 4007
            true  3956, 3957
    +href="glossaries-user.html#dx1-34001" >4008, 4009
        index  3958, 3959, 3960, 3961, 3962, 3963, 3964
    +href="glossaries-user.html#dx1-85006" >4010, 4011, 4012, 4013, 4014, 4015, 4016
        indexcounter  3965
    +href="glossaries-user.html#x1-710002.4" >4017
        indexcrossrefs  3966
    +href="glossaries-user.html#x1-660002.4" >4018
        indexonlyfirst  3967, 3968, 3969, 3970
    +href="glossaries-user.html#x1-650002.4" >4019, 4020, 4021, 4022
            false  3971
    +href="glossaries-user.html#dx1-65001" >4023
        kernelglossredefs  3972
    +href="glossaries-user.html#x1-1080002.9" >4024
            false  3973
    +href="glossaries-user.html#dx1-108002" >4025
        makeindex  3974, 3975, 3976
    +href="glossaries-user.html#dx1-25004" >4026, 4027, 4028
        noglossaryindex  3977
    +href="glossaries-user.html#x1-890002.6" >4029
        nogroupskip  3978, 3979, 3980, 3981, 3982, 3983, 3984, 3985
    +href="glossaries-user.html#x1-600002.3" >4030, 4031, 4032, 4033, 4034, 4035, 4036, 4037
            false  3986
    +href="glossaries-user.html#dx1-60001" >4038
        nohyperfirst  3987
    +href="glossaries-user.html#dx1-34025" >4039
        nohypertypes  3988, 3989, 3990, 3991, 3992, 3993, 3994, 3995, 3996
    +href="glossaries-user.html#dx1-34003" >4040, 4041, 4042, 4043, 4044, 4045, 4046, 4047, 4048
            index  3997
    +href="glossaries-user.html#dx1-88013" >4049
        nolangwarn  3998, 3999
    +href="glossaries-user.html#dx1-3" >4050, 4051
        nolist  4000, 4001, 4002
    +href="glossaries-user.html#x1-530002.3" >4052, 4053, 4054
        nolong  4003, 4004, 4005, 4006, 4007
    +href="glossaries-user.html#x1-510002.3" >4055, 4056, 4057, 4058, 4059
        nomain  4008, 4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4017, 4018, 4019
    +href="glossaries-user.html#x1-850002.6" >4060, 4061, 4062, 4063, 4064, 4065, 4066, 4067, 4068, 4069, 4070, 4071
        nomissingglstext  4020
    +href="glossaries-user.html#x1-1050002.9" >4072
        nonumberlist  4021, 4022, 4023, 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031, 4032, 4033
    +href="glossaries-user.html#dx1-3060" >4073, 4074, 4075, 4076, 4077, 4078, 4079, 4080, 4081, 4082, 4083, 4084, 4085
        nopostdot  4034, 4035
    +href="glossaries-user.html#x1-590002.3" >4086, 4087
            false  4036, 4037, 4038, 4039, 4040, 4041
    +href="glossaries-user.html#dx1-59003" >4088, 4089, 4090, 4091, 4092, 4093
            true  4042, 4043, 4044, 4045
    +href="glossaries-user.html#dx1-59001" >4094, 4095, 4096, 4097
        noredefwarn  4046
    +href="glossaries-user.html#x1-290002.1" >4098
        nostyles  4047, 4048, 4049, 4050, 4051, 4052, 4053, 4054, 4055, 4056, 4057, 4058
    +href="glossaries-user.html#dx1-11021" >4099, 4100, 4101, 4102, 4103, 4104, 4105, 4106, 4107, 4108, 4109, 4110
        nosuper  4059, 4060, 4061, 4062, 4063
    +href="glossaries-user.html#x1-520002.3" >4111, 4112, 4113, 4114, 4115
        notranslate  4064, 4065, 4066
    +href="glossaries-user.html#dx1-14010" >4116, 4117, 4118
    + +     notree  4067, 4068, 4069, 4070
    +href="glossaries-user.html#x1-540002.3" >4119, 4120, 4121, 4122
        nowarn  4071, 4072, 4073
    +href="glossaries-user.html#x1-270002.1" >4123, 4124, 4125
        numberedsection  4074, 4075, 4076, 4077, 4078, 4079
    +href="glossaries-user.html#dx1-42001" >4126, 4127, 4128, 4129, 4130, 4131
            autolabel  4080, 4081, 4082
    +href="glossaries-user.html#dx1-44004" >4132, 4133, 4134
            false  4083
    +href="glossaries-user.html#dx1-44002" >4135
            nameref  4084
    - - +href="glossaries-user.html#dx1-44010" >4136
            nolabel  4085
    +href="glossaries-user.html#dx1-44003" >4137
        numberline  4086, 4087
    +href="glossaries-user.html#x1-410002.2" >4138, 4139
        numbers  4088, 4089, 4090
    +href="glossaries-user.html#dx1-85005" >4140, 4141, 4142
        order  4091, 4092, 4093, 4094
    +href="glossaries-user.html#dx1-72002" >4143, 4144, 4145, 4146
            letter  4095, 4096, 4097, 4098, 4099, 4100
    +href="glossaries-user.html#dx1-7047" >4147, 4148, 4149, 4150, 4151, 4152
            word  4101, 4102
    +href="glossaries-user.html#dx1-16091" >4153, 4154
    +    p
    +        record  4155
        postdot  4103, 4104, 4105, 4106, 4107, 4108
    +href="glossaries-user.html#dx1-4012" >4156, 4157, 4158, 4159, 4160, 4161
        postpunc  4109
    +href="glossaries-user.html#dx1-59007" >4162
        prefix  4110, 4111, 4112, 4113
    +href="glossaries-user.html#x1-1040002.9" >4163, 4164, 4165, 4166
        record  4114, 4115, 4116, 4117, 4118, 4119, 4120, 4121, 4122, 4123, 4124, 4125, 4126, 4127, 4128, 4129, 4130, 4131, 4132, 4133, 4134
    +href="glossaries-user.html#dx1-9018" >4167, 4168, 4169, 4170, 4171, 4172, 4173, 4174, 4175, 4176, 4177, 4178, 4179, 4180, 4181, 4182, 4183, 4184, 4185, 4186, 4187
            alsoindex  4135, 4136
    +class="cmss-10">hybrid  4188, 4189
            nameref  4137, 4138, 4139, 4140, 4141, 4142, 4143, 4144, 4145, 4146, 4147
    +href="glossaries-user.html#dx1-9020" >4190, 4191, 4192, 4193, 4194, 4195, 4196, 4197, 4198, 4199, 4200
            only  4148, 4149, 4150, 4151, 4152, 4153
    +href="glossaries-user.html#dx1-5016" >4201, 4202, 4203, 4204, 4205, 4206
        record  4154, 4155
    +href="glossaries-user.html#dx1-217045" >4207, 4208
        restoremakegloss  4156, 4157
    +href="glossaries-user.html#x1-820002.5" >4209, 4210
        sanitizesort  4158, 4159, 4160
    +href="glossaries-user.html#dx1-5006" >4211, 4212, 4213
            false  4161, 4162, 4163, 4164, 4165, 4166
    +href="glossaries-user.html#dx1-6005" >4214, 4215, 4216, 4217, 4218, 4219
            true  4167, 4168, 4169, 4170, 4171, 4172, 4173, 4174, 4175
    +href="glossaries-user.html#dx1-6007" >4220, 4221, 4222, 4223, 4224, 4225, 4226, 4227, 4228
        savenumberlist  4176, 4177, 4178, 4179, 4180
    +href="glossaries-user.html#x1-460002.3" >4229, 4230, 4231, 4232, 4233
            false  4181
    +href="glossaries-user.html#dx1-46002" >4234
        savewrites  4182, 4183, 4184
    +href="glossaries-user.html#x1-310002.1" >4235, 4236, 4237
            false  4185
    +href="glossaries-user.html#dx1-31001" >4238
        section  4186, 4187
    +href="glossaries-user.html#x1-420002.2" >4239, 4240
        seeautonumberlist  4188, 4189, 4190, 4191
    +href="glossaries-user.html#x1-570002.3" >4241, 4242, 4243, 4244
        seenoindex  4192, 4193
    +href="glossaries-user.html#x1-630002.4" >4245, 4246
            ignore  4194
    +href="glossaries-user.html#dx1-63006" >4247
            warn  4195
    +href="glossaries-user.html#dx1-63005" >4248
        shortcuts  4196, 4197
    +href="glossaries-user.html#x1-950002.7" >4249, 4250
        smallcaps (deprecated)  4198, 4199, 4200, 4201, 4202, 4203
    +href="glossaries-user.html#dx1-97002" >4251, 4252, 4253, 4254, 4255, 4256
        smaller (deprecated)  4204, 4205, 4206, 4207, 4208
    +href="glossaries-user.html#dx1-97003" >4257, 4258, 4259, 4260, 4261
        sort  4209, 4210
    +href="glossaries-user.html#dx1-72001" >4262, 4263
            def  4211, 4212, 4213, 4214, 4215, 4216, 4217, 4218, 4219, 4220, 4221
    +href="glossaries-user.html#dx1-6010" >4264, 4265, 4266, 4267, 4268, 4269, 4270, 4271, 4272, 4273, 4274
            none  4222, 4223, 4224, 4225, 4226, 4227
    +href="glossaries-user.html#dx1-5008" >4275, 4276, 4277, 4278, 4279, 4280
            standard  4228, 4229, 4230
    +href="glossaries-user.html#dx1-74005" >4281, 4282, 4283
            use  4231, 4232, 4233, 4234, 4235, 4236, 4237, 4238, 4239, 4240, 4241
    +href="glossaries-user.html#dx1-6009" >4284, 4285, 4286, 4287, 4288, 4289, 4290, 4291, 4292, 4293, 4294
        style  4242, 4243, 4244, 4245, 4246, 4247, 4248, 4249
    +href="glossaries-user.html#x1-500002.3" >4295, 4296, 4297, 4298, 4299, 4300, 4301, 4302
            index  4250
    +href="glossaries-user.html#dx1-50003" >4303
            list  4251
    +href="glossaries-user.html#dx1-50001" >4304
    + +     stylemods  4252, 4253, 4254, 4255, 4256, 4257, 4258, 4259, 4260, 4261, 4262, 4263
    +href="glossaries-user.html#dx1-4013" >4305, 4306, 4307, 4308, 4309, 4310, 4311, 4312, 4313, 4314, 4315, 4316
        subentrycounter  4264, 4265, 4266, 4267, 4268, 4269
    +href="glossaries-user.html#x1-490002.3" >4317, 4318, 4319, 4320, 4321, 4322
            false  4270
    +href="glossaries-user.html#dx1-49001" >4323
        symbols  4271, 4272, 4273, 4274, 4275, 4276, 4277, 4278
    +href="glossaries-user.html#dx1-4015" >4324, 4325, 4326, 4327, 4328, 4329, 4330, 4331
        toc  4279, 4280, 4281, 4282, 4283, 4284, 4285
    +href="glossaries-user.html#dx1-7051" >4332, 4333, 4334, 4335, 4336, 4337, 4338
            false  4286
    +href="glossaries-user.html#dx1-40003" >4339
            true  4287, 4288
    +href="glossaries-user.html#dx1-40004" >4340, 4341
        translate  4289, 4290, 4291, 4292
    - - +href="glossaries-user.html#x1-320002.1" >4342, 4343, 4344, 4345
            babel  4293, 4294, 4295, 4296, 4297, 4298, 4299, 4300
    +href="glossaries-user.html#dx1-14012" >4346, 4347, 4348, 4349, 4350, 4351, 4352, 4353
            false  4301, 4302, 4303, 4304
    +href="glossaries-user.html#dx1-14011" >4354, 4355, 4356, 4357
            true  4305, 4306, 4307, 4308
    +href="glossaries-user.html#dx1-32001" >4358, 4359, 4360, 4361
        ucmark  4309, 4310, 4311
    +href="glossaries-user.html#dx1-42007" >4362, 4363, 4364
            false  4312
    +href="glossaries-user.html#dx1-43001" >4365
            true  4313
    +href="glossaries-user.html#dx1-43003" >4366
        undefaction  4314
    +href="glossaries-user.html#x1-370002.1" >4367
    +    writeglslabelnames  4368, 4369, 4370
        writeglslabels  4315, 4316
    +href="glossaries-user.html#dx1-23001" >4371, 4372
        xindy  4317, 4318, 4319, 4320, 4321, 4322, 4323, 4324, 4325, 4326, 4327, 4328, 4329, 4330, 4331, 4332, 4333
    +href="glossaries-user.html#dx1-8021" >4373, 4374, 4375, 4376, 4377, 4378, 4379, 4380, 4381, 4382, 4383, 4384, 4385, 4386, 4387, 4388, 4389
        xindygloss  4334, 4335
    +href="glossaries-user.html#x1-780002.5" >4390, 4391
        xindynoglsnumbers  4336, 4337
    +href="glossaries-user.html#x1-790002.5" >4392, 4393
    page (counter)  4338, 4339
    +href="glossaries-user.html#dx1-168039" >4394, 4395
    page type precedence  4340
    +href="glossaries-user.html#dx1-153005" >4396
    \pagelistname  4341
    +href="glossaries-user.html#dx1-14030" >4397
    pdflatex  4342, 4343
    +href="glossaries-user.html#dx1-26" >4398, 4399
    \PGLS  4344
    +href="glossaries-user.html#dx1-174028" >4400
    \Pgls  4345
    +href="glossaries-user.html#dx1-174024" >4401
    \pgls  4346, 4347
    +href="glossaries-user.html#dx1-174021" >4402, 4403
    \PGLSpl  4348
    +href="glossaries-user.html#dx1-174037" >4404
    \Pglspl  4349
    +href="glossaries-user.html#dx1-174033" >4405
    \pglspl  4350
    +href="glossaries-user.html#dx1-174030" >4406
    \pi  4351
    +href="glossaries-user.html#dx1-205082" >4407
    polyglossia package  4352, 4353, 4354, 4355, 4356, 4357, 4358
    +href="glossaries-user.html#dx1-14002" >4408, 4409, 4410, 4411, 4412, 4413, 4414
    \primary  4359
    +href="glossaries-user.html#dx1-193020" >4415
    \printacronyms  4360, 4361, 4362
    +href="glossaries-user.html#dx1-91001" >4416, 4417, 4418
    \printglossaries  4363, 4364, 4365, 4366, 4367, 4368, 4369, 4370, 4371
    +href="glossaries-user.html#dx1-124002" >4419, 4420, 4421, 4422, 4423, 4424, 4425, 4426, 4427
    \printglossary  4372, 4373, 4374, 4375, 4376, 4377, 4378, 4379, 4380, 4381, 4382, 4383, 4384, 4385, 4386, 4387
    +href="glossaries-user.html#dx1-7002" >4428, 4429, 4430, 4431, 4432, 4433, 4434, 4435, 4436, 4437, 4438, 4439, 4440, 4441, 4442, 4443
    \printglossary options
        entrycounter  4388
    +href="glossaries-user.html#dx1-144041" >4444
    +    groups  4445
        label  4389
    +href="glossaries-user.html#dx1-144064" >4446
    +    leveloffset  4447
        nogroupskip  4390
    +href="glossaries-user.html#dx1-144039" >4448
        nonumberlist  4391
    +href="glossaries-user.html#dx1-144038" >4449
        nopostdot  4392
    +href="glossaries-user.html#dx1-144040" >4450
        numberedsection  4393
    +href="glossaries-user.html#dx1-144035" >4451
        prefix  4394
    +href="glossaries-user.html#dx1-144068" >4452
    + +     style  4395, 4396, 4397, 4398, 4399
    +href="glossaries-user.html#dx1-55004" >4453, 4454, 4455, 4456, 4457
        subentrycounter  4400
    +href="glossaries-user.html#dx1-144043" >4458
        target  4401, 4402
    +href="glossaries-user.html#dx1-11081" >4459, 4460
        targetnameprefix  4403
    +href="glossaries-user.html#dx1-144070" >4461
        title  4404, 4405, 4406, 4407, 4408
    +href="glossaries-user.html#dx1-4" >4462, 4463, 4464, 4465, 4466
        toctitle  4409
    +href="glossaries-user.html#dx1-144029" >4467
        type  4410, 4411
    +href="glossaries-user.html#dx1-144024" >4468, 4469
    \printindex  4412
    +href="glossaries-user.html#dx1-88004" >4470
    \printnoidxglossaries  4413, 4414
    +href="glossaries-user.html#dx1-140009" >4471, 4472
    \printnoidxglossary  4415, 4416, 4417, 4418, 4419, 4420, 4421, 4422, 4423, 4424, 4425, 4426, 4427
    +href="glossaries-user.html#dx1-6002" >4473, 4474, 4475, 4476, 4477, 4478, 4479, 4480, 4481, 4482, 4483, 4484, 4485
    \printnoidxglossary options
    - -     sort  4428, 4429, 4430, 4431, 4432
    +href="glossaries-user.html#dx1-74001" >4486, 4487, 4488, 4489, 4490
    \printnumbers  4433
    +href="glossaries-user.html#dx1-87001" >4491
    \printsymbols  4434
    +href="glossaries-user.html#dx1-86001" >4492
    \printunsrtacronyms  4435
    +href="glossaries-user.html#dx1-226015" >4493
    \printunsrtglossaries  4436, 4437, 4438, 4439, 4440, 4441, 4442, 4443, 4444, 4445, 4446, 4447, 4448, 4449, 4450, 4451, 4452
    +href="glossaries-user.html#dx1-4010" >4494, 4495, 4496, 4497, 4498, 4499, 4500, 4501, 4502, 4503, 4504, 4505, 4506, 4507, 4508, 4509, 4510
    +\printunsrtglossaries  4511
    \printunsrtglossary  4453, 4454, 4455, 4456, 4457, 4458, 4459, 4460, 4461, 4462, 4463, 4464, 4465, 4466
    +href="glossaries-user.html#dx1-9005" >4512, 4513, 4514, 4515, 4516, 4517, 4518, 4519, 4520, 4521, 4522, 4523, 4524, 4525, 4526, 4527, 4528
    +\printunsrtinnerglossary  4529
    \providecommand  4467, 4468
    +href="glossaries-user.html#dx1-200022" >4530, 4531
    \provideglossaryentry  4469, 4470
    +href="glossaries-user.html#dx1-113010" >4532, 4533
    \provideignoredglossary  4471
    +href="glossaries-user.html#dx1-145013" >4534

    R relsize package  4472, 4473, 4474
    +href="glossaries-user.html#dx1-3065" >4535, 4536, 4537
    \Roman  4475
    +href="glossaries-user.html#dx1-168035" >4538

    S \S  4476
    +href="glossaries-user.html#dx1-193045" >4539
    sanitize  4477, 4478, 4479, 4480, 4481
    +class="cmbx-10">4540, 4541, 4542, 4543, 4544
    scrwfile package  4482
    +href="glossaries-user.html#dx1-31007" >4545
    \section*  4483, 4484
    +href="glossaries-user.html#dx1-44013" >4546, 4547
    \seealsoname  4485, 4486
    +href="glossaries-user.html#dx1-113152" >4548, 4549
    \seename  4487, 4488, 4489
    +href="glossaries-user.html#dx1-147014" >4550, 4551, 4552
    \setabbreviationstyle  4490, 4491, 4492, 4493, 4494, 4495, 4496, 4497, 4498, 4499, 4500, 4501, 4502, 4503, 4504, 4505, 4506, 4507, 4508, 4509, 4510, 4511, 4512, 4513, 4514, 4515, 4516, 4517, 4518, 4519, 4520, 4521, 4522
    +href="glossaries-user.html#dx1-4007" >4553, 4554, 4555, 4556, 4557, 4558, 4559, 4560, 4561, 4562, 4563, 4564, 4565, 4566, 4567, 4568, 4569, 4570, 4571, 4572, 4573, 4574, 4575, 4576, 4577, 4578, 4579, 4580, 4581, 4582, 4583, 4584, 4585, 4586, 4587
    \setabbreviationstyle  4523
    +href="glossaries-user.html#dx1-227045" >4588
    \SetAcronymLists  4524
    +href="glossaries-user.html#dx1-94005" >4589
    \setacronymstyle  4525, 4526, 4527, 4528, 4529, 4530, 4531, 4532, 4533, 4534
    +href="glossaries-user.html#dx1-96001" >4590, 4591, 4592, 4593, 4594, 4595, 4596, 4597, 4598, 4599
    \setentrycounter  4535, 4536
    +href="glossaries-user.html#dx1-165054" >4600, 4601
    \setglossarypreamble  4537, 4538
    +href="glossaries-user.html#dx1-48008" >4602, 4603
    \setglossarysection  4539, 4540
    +href="glossaries-user.html#dx1-42002" >4604, 4605
    \setglossarystyle  4541, 4542, 4543, 4544, 4545, 4546, 4547
    +href="glossaries-user.html#dx1-55003" >4606, 4607, 4608, 4609, 4610, 4611, 4612
    \setStyleFile  4548, 4549, 4550
    +href="glossaries-user.html#dx1-19014" >4613, 4614, 4615
    + + \setupglossaries  4551
    +href="glossaries-user.html#dx1-109001" >4616
    \Sigma  4552
    +href="glossaries-user.html#dx1-205081" >4617
    siunitx package  4553, 4554
    +href="glossaries-user.html#dx1-4006" >4618, 4619
    small caps  4555, 4556, 4557, 4558, 4559, 4560, 4561, 4562, 4563, 4564
    +class="cmbx-10">4620, 4621, 4622, 4623, 4624, 4625, 4626, 4627, 4628, 4629
    \space  4565
    +href="glossaries-user.html#dx1-181007" >4630
    standard LaTeX extended Latin character  4566, 4567
    +class="cmbx-10">4631, 4632
    stix package  4568, 4569
    +href="glossaries-user.html#dx1-168038" >4633, 4634
    \subglossentry  4570
    +href="glossaries-user.html#dx1-165063" >4635
    supertabular package  4571, 4572, 4573
    +href="glossaries-user.html#dx1-52002" >4636, 4637, 4638
    \symbolname  4574
    +href="glossaries-user.html#dx1-14029" >4639

    T tabularx package  4575, 4576, 4577, 4578
    - - +href="glossaries-user.html#dx1-130005" >4640, 4641, 4642, 4643
    tagpdf package  4579, 4580, 4581
    +href="glossaries-user.html#dx1-175058" >4644, 4645, 4646
    \texorpdfstring  4582, 4583
    +href="glossaries-user.html#dx1-11050" >4647, 4648
    \textbf  4584, 4585
    +href="glossaries-user.html#dx1-129044" >4649, 4650
    textcase package  4586, 4587, 4588
    +href="glossaries-user.html#dx1-9" >4651, 4652, 4653
    \textrm  4589
    +href="glossaries-user.html#dx1-168012" >4654
    \textsc  4590, 4591, 4592, 4593, 4594, 4595, 4596
    +href="glossaries-user.html#dx1-3064" >4655, 4656, 4657, 4658, 4659, 4660, 4661
    \textsmaller  4597, 4598, 4599, 4600
    +href="glossaries-user.html#dx1-3066" >4662, 4663, 4664, 4665
    \textulc  4601
    +href="glossaries-user.html#dx1-139037" >4666
    \textup  4602
    +href="glossaries-user.html#dx1-139038" >4667
    \the  4603, 4604
    +href="glossaries-user.html#dx1-139027" >4668, 4669
    theglossary (environment)  4605
    +href="glossaries-user.html#dx1-165003" >4670
    \theHequation  4606
    +href="glossaries-user.html#dx1-191009" >4671
    \thepage  4607, 4608
    +href="glossaries-user.html#dx1-168051" >4672, 4673
    \toprule  4609
    +href="glossaries-user.html#dx1-159012" >4674
    tracklang package  4610, 4611, 4612
    +href="glossaries-user.html#dx1-5" >4675, 4676, 4677
    translator package  4613, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4626, 4627, 4628, 4629, 4630, 4631, 4632, 4633, 4634, 4635, 4636, 4637
    +href="glossaries-user.html#dx1-14009" >4678, 4679, 4680, 4681, 4682, 4683, 4684, 4685, 4686, 4687, 4688, 4689, 4690, 4691, 4692, 4693, 4694, 4695, 4696, 4697, 4698, 4699, 4700, 4701, 4702

    U \usepackage  4638
    +href="glossaries-user.html#dx1-196042" >4703
    +UTF-8  4704

    W \write18  4639, 4640
    +href="glossaries-user.html#dx1-31012" >4705, 4706
    \writeist  4641
    +href="glossaries-user.html#dx1-153001" >4707

    X xfor package  4642
    +href="glossaries-user.html#dx1-10" >4708
    \xGlsXtrSetField  4643
    +href="glossaries-user.html#dx1-212011" >4709
    + + xindy  4644, 4645, 4646, 4647, 4648, 4649, 4650, 4651, 4652, 4653, 4654, 4655, 4656, 4657, 4658, 4659, 4660, 4661, 4662, 4663, 4664, 4665, 4666, 4667, 4668, 4669, 4670, 4671, 4672, 4673, 4674, 4675, 4676, 4677, 4678, 4679, 4680, 4681, 4682, 4683, 4684, 4685, 4686, 4687, 4688, 4689, 4690, 4691, 4692, 4693, 4694, 4695, 4696, 4697, 4698, 4699, 4700, 4701, 4702, 4703, 4704, 4705, 4706, 4707, 4708, 4709, 4710, 4711, 4712, 4713, 4714, 4715, 4716, 4717, 4718, 4719, 4720, 4721, 4722, 4723, 4724, 4725, 4726, 4727, 4728, 4729, 4730, 4731, 4732, 4733, 4734, 4735, 4736, 4737, 4738, 4739, 4740, 4741, 4742, 4743, 4744, 4745, 4746, 4747, 4748, 4749, 4750, 4751, 4752, 4753, 4754, 4755, 4756, 4757, 4758, 4759, 4760, 4761, 4762, 4763, 4764, 4765, 4766, 4767, 4768, 4769, 4770, 4771, 4772, 4773, 4774, 4775, 4776, 4777, 4778, 4779, 4780, 4781, 4782, 4783, 4784, 4785, 4786, 4787, 4788, 4789, 4790, 4791, 4792, 4793, 4794, 4795, 4796, 4797, 4798, 4799, 4800, 4801, 4802, 4803, 4804, 4805, 4806, 4807, 4808, 4809, 4810, 4811, 4812, 4813, 4814, 4815, 4816, 4817, 4818, 4819, 4820, 4821, 4822, 4823, 4824, 4825, 4826, 4827, 4828
    +href="glossaries-user.html#dx1-3005" >4710, 4711, 4712, 4713, 4714, 4715, 4716, 4717, 4718, 4719, 4720, 4721, 4722, 4723, 4724, 4725, 4726, 4727, 4728, 4729, 4730, 4731, 4732, 4733, 4734, 4735, 4736, 4737, 4738, 4739, 4740, 4741, 4742, 4743, 4744, 4745, 4746, 4747, 4748, 4749, 4750, 4751, 4752, 4753, 4754, 4755, 4756, 4757, 4758, 4759, 4760, 4761, 4762, 4763, 4764, 4765, 4766, 4767, 4768, 4769, 4770, 4771, 4772, 4773, 4774, 4775, 4776, 4777, 4778, 4779, 4780, 4781, 4782, 4783, 4784, 4785, 4786, 4787, 4788, 4789, 4790, 4791, 4792, 4793, 4794, 4795, 4796, 4797, 4798, 4799, 4800, 4801, 4802, 4803, 4804, 4805, 4806, 4807, 4808, 4809, 4810, 4811, 4812, 4813, 4814, 4815, 4816, 4817, 4818, 4819, 4820, 4821, 4822, 4823, 4824, 4825, 4826, 4827, 4828, 4829, 4830, 4831, 4832, 4833, 4834, 4835, 4836, 4837, 4838, 4839, 4840, 4841, 4842, 4843, 4844, 4845, 4846, 4847, 4848, 4849, 4850, 4851, 4852, 4853, 4854, 4855, 4856, 4857, 4858, 4859, 4860, 4861, 4862, 4863, 4864, 4865, 4866, 4867, 4868, 4869, 4870, 4871, 4872, 4873, 4874, 4875, 4876, 4877, 4878, 4879, 4880, 4881, 4882, 4883, 4884, 4885, 4886, 4887, 4888, 4889, 4890, 4891, 4892, 4893, 4894
        -C  4829, 4830, 4831, 4832, 4833
    +href="glossaries-user.html#dx1-8033" >4895, 4896, 4897, 4898, 4899
        -I  4834, 4835
    +href="glossaries-user.html#dx1-19007" >4900, 4901
        -L  4836, 4837, 4838, 4839
    +href="glossaries-user.html#dx1-8032" >4902, 4903, 4904, 4905
        -M  4840
    +href="glossaries-user.html#dx1-16090" >4906
    xindy attributes  4841, 4842, 4843, 4844, 4845
    +href="glossaries-user.html#dx1-16049" >4907, 4908, 4909, 4910, 4911
        :locref  4846
    +href="glossaries-user.html#dx1-151022" >4912
    xkeyval package  4847, 4848, 4849
    +href="glossaries-user.html#dx1-8" >4913, 4914, 4915
    \xspace  4850
    +href="glossaries-user.html#dx1-141018" >4916
    xspace package  4851, 4852, 4853, 4854, 4855, 4856, 4857
    +href="glossaries-user.html#dx1-141014" >4917, 4918, 4919, 4920, 4921, 4922, 4923

    -

    1.1That is, if the entry has been referenced using any of the commands described in §6 ??sec:glslink Links to Glossary Entries Links to Glossary Entries +and §7 ??sec:glsadd Adding -an Entry to the Glossary Without Generating Text Adding an Entry to the Glossary Without Generating Text or via \glssee (or the see key) or commands such as key) or commands such as +\acrshort or -or \glsxtrshort.

    -

    1.2Except for Klingon, which is supported by xindy, but not by the CLDR.

    -

    1.3You can just use the base glossaries label} to display the entry name.

    name.

    1.4\glossentrysymbol is defined by the base package but is redefined by glossaries-extra.

    -

    1.5deprecated, use babel instead

    -

    1.6Added to version makeglossaries 2.18.

    -

    1.7As from v3.01 \gls is no longer fragile and doesn’t need protecting.

    -

    1.8The batch file makeglossaries.bat  distributions for Windows provide makeglossaries.exe.

    -

    2.1These figures don’t include standard files and registers provided by the kernel or hyperrefaux and out.

    .

    2.2unless memoir is loaded, which case it uses \markboth

    -

    +

    2.3Actually it uses \mfirstucMakeUppercase which is set to textcase’s \MakeTextUppercase by the package. This makes it consistent with \makefirstuc. (The textcase package is automatically loaded by glossaries.)

    -

    2.4bug fix in v4.16 has corrected the code to ensure this.

    -

    2.5Actually it sets \acronymtype to \glsdefaulttype if the acronym package option is not used, but \glsdefaulttype usually has the value main unless the nomain option has been used.

    -

    4.1This is because \acronymtype is set to \glsdefaulttype if the acronym package option is not used.

    -

    6.1

    5.1See also “Displaying the glossary” in the documented code, glossaries-code.pdf.

    -

    6.2

    5.2I’ve used \MakeUppercase in all the examples for clarity, but it will actually use \mfirstucMakeUppercase.

    -

    6.3

    5.3\glsdisplayfirst and \glsdisplay are now deprecated. Backwards compatibility should be preserved but you may need to use the compatible-3.07 option

    -

    8.1

    5.4versions before 3.0 used \glsentryname as the default, but this could cause problems when name had been +sanitized.

    6.1as from version 1.18

    +

    6.2See David Carlisle’s explanation in Drawbacks of xspace

    +

    8.1you can’t use the longheaderborder style for this example as you can’t use the longtable environment in two column +mode.

    11.1makeindex will always assign a location number, even if it’s not needed, so it needs to be discarded.

    -

    8.2

    11.2If you redefine \glsseeformat, keep the default value of the optional argument as \seename as both see and \glssee explicitly write [\seename] in the output file if no optional argument is given.

    -

    8.3

    11.3In versions before 3.0, \glsentryname was used, but this could cause problems when the name key was sanitized.

    9.1versions before 3.0 used \glsentryname as the default, but this could cause problems when name had been -sanitized.

    10.1you can’t use the longheaderborder style for this example as you can’t use the longtable environment in two column + id="dx1-148015">.

    13.1These lengths will not be available if you use both the nolong and nosuper package options or if you use the nostyles package mode.

    11.1option unless you explicitly load the relevant package.

    +

    13.2This style was supplied by Axel Menzel.

    +

    13.3e.g. with the flowfram package.

    +

    14.1see \glsSetCompositor described in §3 ??sec:setup Setting Up

    -

    11.2

    14.2see \glsSetAlphaCompositor described in §3 ??sec:setup Setting Up

    -

    11.3

    14.3With glossaries-extra seealso is appended to the end of the list.

    -

    13.1as from version 1.18

    13.2See David Carlisle’s explanation in Drawbacks of xspace

    -

    15.1These lengths will not be available if you use both the nolong and nosuper package options or if you use the nostyles package -option unless you explicitly load the relevant package.

    -

    15.2This style was supplied by Axel Menzel.

    -

    15.3e.g. with the flowfram package.

    -

    17.1

    16.1Single letter words, such as “a” and “I” should typically not appear at the end of a line, hence the non-breakable space after “a” in the prefix field.

    -

    17.2

    16.2The earlier caveats about initial non-Latin characters apply.

    -

    19.1

    18.1makeindex assumes that the location is a page number

    -

    19.2

    18.2If you use babel with a language that makes the colon character : active you will need to change the prefix.

    -

    19.3

    18.3Requires at least bib2gls v2.0.

    -

    19.4

    18.4You can either uncompress the PDF file and view it in a text editor or you can use a tool such as the PDFDebugger provided with \gls{svm} + \item<+-> Stuff. + \end{itemize} +\end{frame} -The optional argument \marg{key-val list} allows you to specify -additional information. Any key that can be used in the second -argument of \ics{newglossaryentry} can also be used here in \meta{key-val -list}. -For example, \gloskey{description} (when used with one of the styles that -require a description, described in -\sectionref{sec:setacronymstyle}) or you can -override plural forms of \meta{abbrv} or \meta{long} using the -\gloskey{shortplural} or \gloskey{longplural} keys. -For example: -\begin{verbatim} -\newacronym[longplural={diagonal matrices}]% - {dm}{DM}{diagonal matrix} +\end{document} \end{verbatim} -If the \firstuse\ uses the plural form, \verb|\glspl{dm}| will -display: diagonal matrices (DMs). If you want to use -the \gloskey{longplural} or \gloskey{shortplural} keys, I recommend -you use \ics{setacronymstyle} to set the display style rather than -using one of the pre-version 4.02 acronym styles. - -As with \gloskey{plural} and \gloskey{firstplural}, if -\gloskey{longplural} is missing, it's obtained by appended -\ics{glspluralsuffix} to the singular form. The short plural -\gloskey{shortplural} is obtained (is not explicitly set) by appending -\ics{glsacrpluralsuffix} to the short form. These commands may be -changed by the associated language files, but they can't be added to -the usual caption hooks as there's no guarantee when they'll be -expanded (as \hyperref[pluralsuffix]{discussed earlier}). -A different approach is used by \styfmt{glossaries-extra}, which has -\icatattrs category attributes to determine whether or not to append a suffix -when forming the default value of \gloskey{shortplural}. - -Since \ics{newacronym} uses \ics{newglossaryentry}, you can use -commands like \ics{gls} and \ics{glsreset} as with any other -glossary entry. -\begin{important} -Since \cs{newacronym} sets \verb|type=\acronymtype|, -if you want to load a file containing acronym definitions using -\ics{loadglsentries}\oarg{type}\marg{filename}, the optional argument -\meta{type} will not have an effect unless you explicitly set the -type as \verb|type=\glsdefaulttype| in the optional argument to -\ics{newacronym}. See \sectionref{sec:loadglsentries}. -\end{important} +On the first overlay, \verb|\gls{svm}| produces \qt{support vector +machine (SVM)} and then unsets the \firstuseflag. When the second +overlay is processed, \verb|\gls{svm}| now produces \qt{SVM}, which +is unlikely to be the desired effect. I~don't know anyway around +this and I can only offer two suggestions. -\begin{example}{Defining an Abbreviation}{ex:newacronym} -The following defines the abbreviation IDN: -\begin{verbatim} -\newacronym{idn}{IDN}{identification number} -\end{verbatim} -\verb|\gls{idn}| will produce \qt{identification number (IDN)} on -\firstuse\ and \qt{IDN} on subsequent uses. If you want to use one -of the \gls{smallcaps} acronym styles, described in -\sectionref{sec:setacronymstyle}, you need to use lower case -characters for the shortened form: +Firstly, unset all acronyms at the start of the document and +explicitly use \ics{acrfull} when you want the full version to be +displayed: \begin{verbatim} -\newacronym{idn}{idn}{identification number} -\end{verbatim} -Now \verb|\gls{idn}| will produce \qt{identification number -(\textsc{idn})} on \firstuse\ and \qt{\textsc{idn}} on subsequent -uses. -\end{example} +\documentclass{beamer} -\begin{important} -Avoid nested definitions. -\end{important} +\usepackage{glossaries} -Recall from the warning in -\sectionref{sec:newglosentry} that you should avoid using -the \glslike\ and \glstextlike\ commands within the value of -keys like \gloskey{text} and \gloskey{first} due to complications -arising from nested links. The same applies to abbreviations -defined using \cs{newacronym}. +\newacronym{svm}{SVM}{support vector machine} -For example, suppose you have defined: -\begin{verbatim} -\newacronym{ssi}{SSI}{server side includes} -\newacronym{html}{HTML}{hypertext markup language} -\end{verbatim} -you may be tempted to do: -\begin{verbatim} -\newacronym{shtml}{S\gls{html}}{\gls{ssi} enabled \gls{html}} -\end{verbatim} -\strong{Don't!} This will break the case-changing commands, such -as \ics{Gls}, it will cause inconsistencies on \firstuse, and, -if hyperlinks are enabled, will cause nested hyperlinks. It will -also confuse the commands used by the entry formatting (such as -\ics{glslabel}). +\glsunsetall -Instead, consider doing: -\begin{verbatim} -\newacronym - [description={\gls{ssi} enabled \gls{html}}] - {shtml}{SHTML}{SSI enabled HTML} +\begin{document} +\begin{frame} + \frametitle{Frame 1} + + \begin{itemize} + \item<+-> \acrfull{svm} + \item<+-> Stuff. + \end{itemize} +\end{frame} +\end{document} \end{verbatim} -or + +Secondly, explicitly reset each acronym on first use: \begin{verbatim} -\newacronym - [description={\gls{ssi} enabled \gls{html}}] - {shtml}{SHTML} - {server side includes enabled hypertext markup language} +\begin{frame} + \frametitle{Frame 1} + + \begin{itemize} + \item<+-> \glsreset{svm}\gls{svm} + \item<+-> Stuff. + \end{itemize} +\end{frame} \end{verbatim} -Similarly for the \glstextlike\ commands. +These are non-optimal, but the \cls{beamer} class is too complex for +me to provide a programmatic solution. Other potentially problematic +environments are some \env{tabular}-like environments (but not +\env{tabular} itself) that process the contents in order to work out +the column widths and then reprocess the contents to do the actual +typesetting. -Other approaches are available with \gls{glossaries-extra}. -See the section \qt{Nested Links} in the \styfmt{glossaries-extra} -user manual. +The \sty{amsmath} environments, such as \env{align}, also process +their contents multiple times, but the \styfmt{glossaries} package now +checks for this. For \sty{tabularx}, you need to explicitly patch it +by placing \cs{glspatchtabularx} in the preamble (or anywhere +before the problematic use of \envfmt{tabularx}). -\begin{important} -The commands described below are similar to the \glstextlike\ -commands in that they don't modify the \firstuseflag. -However, their display is governed by \ics{defentryfmt} with -\ics{glscustomtext} set as appropriate. All caveats that apply to -the \glstextlike\ commands also apply to the following commands. -(Including the warning immediately above this box.) -\end{important} +\begin{xtr} +If you need to use commands like \cs{gls} in any problematic context +that interferes with the \gls{firstuseflag}, then you can try using +the buffering system provided with \gls{glossaries-extra}. See the +\qt{First Use Flag} section of the \gls{glossaries-extra} manual. +\end{xtr} -The optional arguments are the same as those for the \glstextlike\ -commands, and there are similar star and plus variants that switch -off or on the hyperlinks. As with the \glstextlike\ commands, the -\gls{linktext} is placed in the argument of \ics{glstextformat}. +\section{Counting the Number of Times an Entry has been Used (First Use +Flag Unset)} +\label{sec:enableentrycount} + +As from version 4.14, it's now possible to keep track of how many +times an entry is used. That is, how many times the \firstuseflag\ +is unset. Note that the supplemental \gls{glossaries-extra} package improves +this function and also provides per-unit counting, which isn't +available with the \styfmt{glossaries} package. + +\begin{important} +This function is disabled by default as it adds extra +overhead to the document build time and also switches +\ics{newglossaryentry} (and therefore \ics{newacronym}) into +a~preamble-only command. +\end{important} -\begin{definition}[\DescribeMacro{\acrshort}] -\cs{acrshort}\oarg{options}\marg{label}\oarg{insert} +To enable this function, use +\begin{definition}[\DescribeMacro\glsenableentrycount] +\cs{glsenableentrycount} \end{definition} -This sets the \gls{linktext} to the short form (within the argument -of \ics{acronymfont}) for the entry given by \meta{label}. The short -form is as supplied by the \gloskey{short} key, which -\ics{newacronym} implicitly sets. +before defining your entries. This adds two extra (internal) fields +to entries: \texttt{currcount} and \texttt{prevcount}. -There are also analogous upper case variants: -\begin{definition}[\DescribeMacro{\Acrshort}] -\cs{Acrshort}\oarg{options}\marg{label}\oarg{insert} -\end{definition} -\begin{definition}[\DescribeMacro{\ACRshort}] -\cs{ACRshort}\oarg{options}\marg{label}\oarg{insert} -\end{definition} -There are also plural versions: -\begin{definition}[\DescribeMacro\acrshortpl] -\cs{acrshortpl}\oarg{options}\marg{label}\oarg{insert} -\end{definition} -\begin{definition}[\DescribeMacro\Acrshortpl] -\cs{Acrshortpl}\oarg{options}\marg{label}\oarg{insert} -\end{definition} -\begin{definition}[\DescribeMacro\ACRshortpl] -\cs{ACRshortpl}\oarg{options}\marg{label}\oarg{insert} -\end{definition} -The short plural form is as supplied -by the \gloskey{shortplural} key, which \ics{newacronym} implicitly sets. +The \texttt{currcount} field keeps track of how many times +\cs{glsunset} is used within the document. A~local unset (using +\cs{glslocalunset}) performs a~local rather than global increment to +\texttt{currcount}. Remember that not all commands use +\cs{glsunset}. Only the \glslike\ commands do this. The reset +commands \cs{glsreset} and \cs{glslocalreset} reset this field back +to zero (where \cs{glslocalreset} performs a~local change). -\begin{definition}[\DescribeMacro{\acrlong}] -\cs{acrlong}\oarg{options}\marg{label}\oarg{insert} -\end{definition} -This sets the \gls{linktext} to the long form for the entry given by -\meta{label}. The long form is as supplied -by the \gloskey{long} key, which \ics{newacronym} implicitly sets. +The \texttt{prevcount} field stores the final value of the +\texttt{currcount} field \emph{from the previous run}. This value is +read from the \filetype{aux} file at the beginning of the +\env{document} environment. -There are also analogous upper case variants: -\begin{definition}[\DescribeMacro{\Acrlong}] -\cs{Acrlong}\oarg{options}\marg{label}\oarg{insert} -\end{definition} -\begin{definition}[\DescribeMacro{\ACRlong}] -\cs{ACRlong}\oarg{options}\marg{label}\oarg{insert} -\end{definition} -Again there are also plural versions: -\begin{definition}[\DescribeMacro{\acrlongpl}] -\cs{acrlongpl}\oarg{options}\marg{label}\oarg{insert} -\end{definition} -\begin{definition}[\DescribeMacro{\Acrlongpl}] -\cs{Acrlongpl}\oarg{options}\marg{label}\oarg{insert} +You can access these fields using +\begin{definition}[\DescribeMacro\glsentrycurrcount] +\cs{glsentrycurrcount}\marg{label} \end{definition} -\begin{definition}[\DescribeMacro{\ACRlongpl}] -\cs{ACRlongpl}\oarg{options}\marg{label}\oarg{insert} +for the \texttt{currcount} field, and +\begin{definition}[\DescribeMacro\glsentryprevcount] +\cs{glsentryprevcount}\marg{label} \end{definition} -The long plural form is as supplied by the \gloskey{longplural} key, -which \ics{newacronym} implicitly sets. +for the \texttt{prevcount} field. -The commands below display the full form of the acronym, but note -that this isn't necessarily the same as the form used on \firstuse. -These full-form commands are shortcuts that use the above commands, -rather than creating the \gls{linktext} from the complete full form. -These full-form commands have star and plus variants and optional -arguments that are passed to the above commands. +\begin{important} +These commands are only defined if you have used \cs{glsenableentrycount}. +\end{important} -\begin{definition}[\DescribeMacro{\acrfull}] -\cs{acrfull}\oarg{options}\marg{label}\oarg{insert} -\end{definition} -This is a shortcut for -\begin{definition}[\DescribeMacro{\acrfullfmt}] -\cs{acrfullfmt}\marg{options}\marg{label}\marg{insert} -\end{definition} -which by default does -\begin{alltt} -\cs{acrfullformat} - \mgroup{\cs{acrlong}\oarg{options}\marg{label}\marg{insert}} - \mgroup{\cs{acrshort}\oarg{options}\marg{label}} -\end{alltt} -where -\begin{definition}[\DescribeMacro\acrfullformat] -\cs{acrfullformat}\marg{long}\marg{short} -\end{definition} -by default does \meta{long} (\meta{short}). This command is now -deprecated for new acronym styles but is used by the default for -backward compatibility if \cs{setacronymstyle} -(\sectionref{sec:setacronymstyle}) hasn't been used. (For further -details of these format commands see \ifpdf -section~\ref*{sec:code:acronym} in \fi the documented code, -\texttt{glossaries-code.pdf}.) +For example: +\begin{verbatim} +\documentclass{article} +\usepackage{glossaries} +\makeglossaries -There are also analogous upper case variants: -\begin{definition}[\DescribeMacro{\Acrfull}] -\cs{Acrfull}\oarg{options}\marg{label}\oarg{insert} -\end{definition} -\begin{definition}[\DescribeMacro{\ACRfull}] -\cs{ACRfull}\oarg{options}\marg{label}\oarg{insert} -\end{definition} -and plural versions: -\begin{definition}[\DescribeMacro\acrfullpl] -\cs{acrfullpl}\oarg{options}\marg{label}\oarg{insert} -\end{definition} -\begin{definition}[\DescribeMacro\Acrfullpl] -\cs{Acrfullpl}\oarg{options}\marg{label}\oarg{insert} -\end{definition} -\begin{definition}[\DescribeMacro\ACRfullpl] -\cs{ACRfullpl}\oarg{options}\marg{label}\oarg{insert} -\end{definition} +\glsenableentrycount -If you find the above commands too cumbersome to write, you can use -the \pkgopt{shortcuts} package option to activate the shorter -command names listed in \tableref{tab:shortcuts}. +\newglossaryentry{apple}{name=apple,description={a fruit}} -\begin{table}[htbp] -\caption{Synonyms provided by the package option \pkgoptfmt{shortcuts}} -\label{tab:shortcuts} -\vskip\baselineskip -\centering -\begin{tabular}{ll} -\bfseries Shortcut Command & \bfseries Equivalent Command\\ -\ics{acs} & \ics{acrshort}\\ -\ics{Acs} & \ics{Acrshort}\\ -\ics{acsp} & \ics{acrshortpl}\\ -\ics{Acsp} & \ics{Acrshortpl}\\ -\ics{acl} & \ics{acrlong}\\ -\ics{Acl} & \ics{Acrlong}\\ -\ics{aclp} & \ics{acrlongpl}\\ -\ics{Aclp} & \ics{Acrlongpl}\\ -\ics{acf} & \ics{acrfull}\\ -\ics{Acf} & \ics{Acrfull}\\ -\ics{acfp} & \ics{acrfullpl}\\ -\ics{Acfp} & \ics{Acrfullpl}\\ -\ics{ac} & \ics{gls}\\ -\ics{Ac} & \ics{Gls}\\ -\ics{acp} & \ics{glspl}\\ -\ics{Acp} & \ics{Glspl} -\end{tabular} -\end{table} +\begin{document} +Total usage on previous run: \glsentryprevcount{apple}. -It is also possible to access the long and short forms without -adding information to the glossary using commands analogous to -\ics{glsentrytext} (described in \sectionref{sec:glsnolink}). +\gls{apple}. \gls{apple}. \glsadd{apple}\glsentrytext{apple}. +\glslink{apple}{apple}. \glsdisp{apple}{apple}. \Gls{apple}. -\begin{important} -The commands that convert the first letter to upper case come with -the same caveats as those for analogous commands like -\ics{Glsentrytext} (non-expandable, can't be used in PDF bookmarks, -care needs to be taken if the first letter is an accented character -etc). See \sectionref{sec:glsnolink}. -\end{important} +Number of times apple has been used: \glsentrycurrcount{apple}. +\end{document} +\end{verbatim} +On the first \LaTeX\ run, \verb|\glsentryprevcount{apple}| +produces~0. At the end of the document, +\verb|\glsentrycurrcount{apple}| produces~4. This is because +the only commands that have incremented the entry count are those +that use \cs{glsunset}. That is: \cs{gls}, \cs{glsdisp} and +\cs{Gls}. The other commands used in the above example, \cs{glsadd}, +\cs{glsentrytext} and \cs{glslink}, don't use \cs{glsunset} so they +don't increment the entry count. On the \emph{next} \LaTeX\ run, +\verb|\glsentryprevcount{apple}| now produces~4 as that was the +value of the \texttt{currcount} field for the \texttt{apple} entry +at the end of the document on the previous run. -The long form can be accessed using: -\begin{definition}[\DescribeMacro{\glsentrylong}] -\cs{glsentrylong}\marg{label} +When you enable the entry count using \cs{glsenableentrycount}, you +also enable the following commands: +\begin{definition}[\DescribeMacro\cgls] +\cs{cgls}\oarg{options}\marg{label}\oarg{insert} \end{definition} -or, with the first letter converted to upper case: -\begin{definition}[\DescribeMacro{\Glsentrylong}] -\cs{Glsentrylong}\marg{label} +(no case-change, singular) +\begin{definition}[\DescribeMacro\cglspl] +\cs{cglspl}\oarg{options}\marg{label}\oarg{insert} \end{definition} -Plural forms: -\begin{definition}[\DescribeMacro{\glsentrylongpl}] -\cs{glsentrylongpl}\marg{label} +(no case-change, plural) +\begin{definition}[\DescribeMacro\cGls] +\cs{cGls}\oarg{options}\marg{label}\oarg{insert} \end{definition} -\begin{definition}[\DescribeMacro{\Glsentrylongpl}] -\cs{Glsentrylongpl}\marg{label} +(first letter uppercase, singular), and +\begin{definition}[\DescribeMacro\cGlspl] +\cs{cGlspl}\oarg{options}\marg{label}\oarg{insert} \end{definition} +(first letter uppercase, plural). +These all have plus and starred variants like the analogous +\cs{gls}, \cs{glspl}, \cs{Gls} and \cs{Glspl} commands. -Similarly, to access the short form: -\begin{definition}[\DescribeMacro{\glsentryshort}] -\cs{glsentryshort}\marg{label} -\end{definition} -or, with the first letter converted to upper case: -\begin{definition}[\DescribeMacro{\Glsentryshort}] -\cs{Glsentryshort}\marg{label} -\end{definition} -Plural forms: -\begin{definition}[\DescribeMacro{\glsentryshortpl}] -\cs{glsentryshortpl}\marg{label} +If you don't use \cs{glsenableentrycount}, these commands behave +like \cs{gls}, \cs{glspl}, \cs{Gls} and \cs{Glspl}, +respectively, only there will be a warning that you haven't enabled +entry counting. If you have enabled entry counting with +\cs{glsenableentrycount} then these commands test if +\cs{glsentryprevcount}\marg{label} equals~1. If it doesn't then the +analogous \cs{gls} etc will be used. If it does, then the first optional +argument will be ignored and +\begin{alltt} +\meta{cs format}\marg{label}\marg{insert}\cs{glsunset}\marg{label} +\end{alltt} +will be performed, where \meta{cs format} is a command that takes +two arguments. The command used depends whether you have used +\cs{cgls}, \cs{cglspl}, \cs{cGls} or \cs{cGlspl}. + +\begin{definition}[\DescribeMacro\cglsformat] +\cs{cglsformat}\marg{label}\marg{insert} \end{definition} -\begin{definition}[\DescribeMacro{\Glsentryshortpl}] -\cs{Glsentryshortpl}\marg{label} +This command is used by \cs{cgls} and defaults to +\begin{alltt} +\cs{glsentrylong}\marg{label}\meta{insert} +\end{alltt} +if the entry given by +\meta{label} has a~long form or +\begin{alltt} +\cs{glsentryfirst}\marg{label}\meta{insert} +\end{alltt} +otherwise. + +\begin{definition}[\DescribeMacro\cglsplformat] +\cs{cglsplformat}\marg{label}\marg{insert} \end{definition} +This command is used by \cs{cglspl} and defaults to +\begin{alltt} +\cs{glsentrylongpl}\marg{label}\meta{insert} +\end{alltt} +if the entry given by +\meta{label} has a~long form or +\begin{alltt} +\cs{glsentryfirstplural}\marg{label}\meta{insert} +\end{alltt} +otherwise. -And the full form can be obtained using: -\begin{definition}[\DescribeMacro{\glsentryfull}] -\cs{glsentryfull}\marg{label} -\end{definition} -\begin{definition}[\DescribeMacro{\Glsentryfull}] -\cs{Glsentryfull}\marg{label} -\end{definition} -\begin{definition}[\DescribeMacro{\glsentryfullpl}] -\cs{glsentryfullpl}\marg{label} -\end{definition} -\begin{definition}[\DescribeMacro{\Glsentryfullpl}] -\cs{Glsentryfullpl}\marg{label} +\begin{definition}[\DescribeMacro\cGlsformat] +\cs{cGlsformat}\marg{label}\marg{insert} \end{definition} -These again use \ics{acrfullformat} by default, but -the new styles described in the section below use different -formatting commands. - -\section{Changing the Abbreviation Style} -\label{sec:setacronymstyle} +This command is used by \cs{cGls} and defaults to +\begin{alltt} +\cs{Glsentrylong}\marg{label}\meta{insert} +\end{alltt} +if the entry given by \meta{label} has a~long form or +\begin{alltt} +\cs{Glsentryfirst}\marg{label}\meta{insert} +\end{alltt} +otherwise. -It may be that the default style doesn't suit your requirements in -which case you can switch to another style using -\begin{definition}[\DescribeMacro{\setacronymstyle}] -\cs{setacronymstyle}\marg{style name} +\begin{definition}[\DescribeMacro\cGlsplformat] +\cs{cGlsplformat}\marg{label}\marg{insert} \end{definition} -where \meta{style name} is the name of the required style. +This command is used by \cs{cGlspl} and defaults to +\begin{alltt} +\cs{Glsentrylongpl}\marg{label}\meta{insert} +\end{alltt} +if the entry given by \meta{label} has a~long form or +\begin{alltt} +\cs{Glsentryfirstplural}\marg{label}\meta{insert} +\end{alltt} +otherwise. -\begin{important} -You must use \cs{setacronymstyle} \emph{before} you define the -acronyms with \cs{newacronym}. -\end{important} +This means that if the previous count for the given entry was~1, the +entry won't be hyperlinked with the \cs{cgls}-like commands and they +won't add a~line to the external glossary file. If you haven't used +any of the other commands that add information to the glossary file +(such as \cs{glsadd} or the \glstextlike\ commands) then the entry +won't appear in the glossary. -For example: +Remember that since these commands use \cs{glsentryprevcount} you +need to run \LaTeX\ twice to ensure they work correctly. The +document build order is now (at least): \texttt{(pdf)latex}, +\texttt{(pdf)latex}, \texttt{makeglossaries}, \texttt{(pdf)latex}. + +\begin{example}{Don't index entries that are only used once}{sec:entrycount} +In this example, the abbreviations that have only been used once (on the previous run) +only have their long form shown with \cs{cgls}. \begin{verbatim} -\usepackage[acronym]{glossaries} +\documentclass{article} +\usepackage[colorlinks]{hyperref} +\usepackage[acronym]{glossaries} \makeglossaries -\setacronymstyle{long-sc-short} +\glsenableentrycount -\newacronym{html}{html}{hypertext markup language} -\newacronym{xml}{xml}{extensible markup language} -\end{verbatim} -Unpredictable results can occur if you try to use multiple styles. +\setacronymstyle{long-short} -\begin{important} -If you need multiple abbreviation styles, then try -using the \gls{glossaries-extra} package, which has better -abbreviation management. -\end{important} +\newacronym{html}{HTML}{hypertext markup language} +\newacronym{css}{CSS}{cascading style sheets} +\newacronym{xml}{XML}{extensible markup language} +\newacronym{sql}{SQL}{structured query language} +\newacronym{rdbms}{RDBMS}{relational database management system} +\newacronym{rdsms}{RDSMS}{relational data stream management system} -Unlike the default behaviour of \cs{newacronym}, the -styles used via \cs{setacronymstyle} don't use the \gloskey{first} -or \gloskey{text} keys, but instead they use \ics{defglsentryfmt} to -set a~custom format that uses the \gloskey{long} and \gloskey{short} -keys (or their plural equivalents). This means that these styles -cope better with plurals that aren't formed by simply appending the -singular form with the letter \qt{s}. In fact, most of the predefined -styles use \ics{glsgenacfmt} and modify the definitions of commands -like \ics{genacrfullformat}. +\begin{document} +These entries are only used once: \cgls{sql}, \cgls{rdbms}, +\cgls{xml}. These entries are used multiple times: +\cgls{html}, \cgls{html}, \cgls{css}, \cgls{css}, \cgls{css}, +\cgls{rdsms}, \cgls{rdsms}. -Note that when you use \cs{setacronymstyle} the \gloskey{name} key -is set to -\begin{definition}[\DescribeMacro{\acronymentry}] -\cs{acronymentry}\marg{label} -\end{definition} -and the \gloskey{sort} key is set to -\begin{definition}[\DescribeMacro{\acronymsort}] -\cs{acronymsort}\marg{short}\marg{long} -\end{definition} -These commands are redefined by the acronym styles. However, you can -redefine them again after the style has been set but before you use -\cs{newacronym}. Protected expansion is performed on \cs{acronymsort} -when the entry is defined. +\printglossaries +\end{document} +\end{verbatim} +After a complete document build (\texttt{latex}, \texttt{latex}, +\texttt{makeglossaries}, \texttt{latex}) the list of abbreviations only +includes the entries HTML, CSS and RDSMS. The entries SQL, RDBMS and +XML +only have their long forms displayed and don't have a~hyperlink. +\end{example} -\subsection{Predefined Acronym Styles} -\label{sec:predefinedacrstyles} +Remember that if you don't like typing \cs{cgls} you can create a +synonym. For example +\begin{verbatim} +\let\ac\cgls +\end{verbatim} -The \styfmt{glossaries} package provides a~number of predefined -styles. These styles apply -\begin{definition}[\DescribeMacro{\firstacronymfont}] -\cs{firstacronymfont}\marg{text} -\end{definition} -to the short form on first use and -\begin{definition}[\DescribeMacro{\acronymfont}] -\cs{acronymfont}\marg{text} -\end{definition} -on subsequent use. The styles modify the definition of -\cs{acronymfont} as required, but \ics{firstacronymfont} is only set -once by the package when it's loaded. By default -\ics{firstacronymfont}\marg{text} is the same as -\ics{acronymfont}\marg{text}. -If you want the short form displayed differently on first use, you -can redefine \ics{firstacronymfont} independently of the acronym -style. +\begin{bib2gls} +With \gls{bib2gls} there's an analogous record counting set of +commands. See \gls{glossaries-extra} and \gls{bib2gls} manuals for further details. +\end{bib2gls} -The predefined styles that contain \texttt{sc} in their name (for -example \acrstyle{long-sc-short}) redefine \cs{acronymfont} to use -\ics{textsc}, which means that the short form needs to be specified -in lower case. \ifpdf Remember that \verb|\textsc{abc}| produces -\textsc{abc} but \verb|\textsc{ABC}| produces \textsc{ABC}.\fi +\chapter{Displaying a Glossary} +\label{sec:printglossary} -\hypertarget{boldsc}{}% -\begin{important}% -Some fonts don't support bold \gls{smallcaps}, so you may need to redefine -\ics{glsnamefont} (see \sectionref{sec:printglossary}) to switch to -medium weight if you are using a glossary style that displays entry -names in bold and you have chosen an acronym style that uses -\ics{textsc}. -\end{important} +All defined glossaries may be displayed using: +\begin{description} +\item[\opt1:] +(Must be used with \ics{makenoidxglossaries} in the preamble.) +\begin{definition}[\DescribeMacro\printnoidxglossaries] +\cs{printnoidxglossaries} +\end{definition} +which internally uses \cs{printnoidxglossary} for each glossary. -The predefined styles that contain \texttt{sm} in their name -(for example \acrstyle{long-sm-short}) redefine \cs{acronymfont} to -use \ics{textsmaller}. +\item[\optsand23:] +(Must be used with \ics{makeglossaries} in the preamble.) +\begin{definition}[\DescribeMacro\printglossaries] +\cs{printglossaries} +\end{definition} +which internally uses \cs{printglossary} for each glossary. -\hypertarget{smaller}{}% -\begin{important} -Note that the \styfmt{glossaries} package doesn't define or load any package that -defines \ics{textsmaller}. If you use one of the acronym styles that -set \ics{acronymfont} to \cs{textsmaller} you must -explicitly load the \sty{relsize} package or otherwise define -\cs{textsmaller}. -\end{important} +\item[\optsto46:] (\gls{glossaries-extra} only) +\begin{definition}[\DescribeMacro\printunsrtglossaries] +\cs{printunsrtglossaries} +\end{definition} +which internally uses \cs{printunsrtglossary} for each glossary. +\end{description} +These commands will display all the glossaries in the order in which +they were defined. -The remaining predefined styles redefine \cs{acronymfont}\marg{text} -to simply do its argument \meta{text}. +Note that, in the case of \optsand23, no glossaries will appear +until you have either used the Perl script \gls{makeglossaries} or +Lua script \gls{makeglossaries-lite.lua} or have directly used +\gls{makeindex} or \gls{xindy} (as described in +\sectionref{sec:makeglossaries}). In the case of \opt4, no glossary +will appear until you have used \gls{bib2gls}. \begin{important} -In most cases, the predefined styles adjust \ics{acrfull} and -\ics{glsentryfull} (and their plural and upper case variants) to -reflect the style. The only exceptions to this are the -\acrstyle{dua} and \acrstyle{footnote} styles (and their variants). +While the external files are missing, \cs{printglossary} will just do +\ics{null} for each missing glossary to assist dictionary style +documents that just use \cs{glsaddall} without inserting any text. +This use of \ics{null} ensures that all indexing information is +written before the final page is shipped out. Once the external +files are present \cs{null} will no longer be used. This can cause a +spurious blank page on the first \LaTeX\ run before the glossary +files have been created. Once these files are present, \cs{null} +will no longer be used and so shouldn't cause interference for the +final document. \end{important} -The following styles are supplied by the \styfmt{glossaries} -package: -\begin{itemize} -\item \acrstyle{long-short}, \acrstyle{long-sc-short}, -\acrstyle{long-sm-short}, \acrstyle{long-sp-short}: +\begin{xtr} +If you use \gls{glossaries-extra}, it will insert a heading and boilerplate text when the +external files are missing. See the +\gls{glossaries-extra} manual for further details. +\end{xtr} -With these three styles, acronyms are displayed in the form -\begin{definition} -\meta{long} (\ics{firstacronymfont}\marg{short}) -\end{definition} -on first use and -\begin{definition} -\ics{acronymfont}\marg{short} +If the glossary still does not appear after you re-\LaTeX\ your +document, check the \gls*{makeindex}, \gls*{xindy} or \gls*{bib2gls} +log files, as applicable, to see if there is a problem. With \opt1, +you just need two \LaTeX\ runs to make the glossaries appear, but +you may need further runs to make the \glspl{numberlist} up-to-date. + +An individual glossary can be displayed using: +\begin{description} +\itempar{\opt1:} +\begin{definition}[\DescribeMacro{\printnoidxglossary}] +\cs{printnoidxglossary}\oarg{options} \end{definition} -on subsequent use. -They also set \cs{acronymsort}\marg{short}\marg{long} to just -\meta{short}. This means that the acronyms are sorted according to -their short form. In addition, \cs{acronymentry}\marg{label} is set -to just the short form (enclosed in \cs{acronymfont}) and the -\gloskey{description} key is set to the long form. +(Must be used with \ics{makenoidxglossaries} in the preamble.) -The \acrstyle{long-sp-short} style was introduced in version~4.16 -and uses -\begin{definition}[\DescribeMacro\glsacspace] -\cs{glsacspace}\marg{label} +\itempar{\optsand23:} +\begin{definition}[\DescribeMacro{\printglossary}] +\cs{printglossary}\oarg{options} \end{definition} -for the space between the long and short forms. This defaults to -a~non-breakable space (\verb|~|) if -(\cs{acronymfont}\marg{short}) is less than 3em, otherwise it uses -a~normal space. This may be redefined as required. For example, to -always use a~non-breakable space: -\begin{verbatim} -\renewcommand*{\glsacspace}[1]{~} -\end{verbatim} +(Must be used with \ics{makeglossaries} in the preamble.) -\item \acrstyle{short-long}, \acrstyle{sc-short-long}, -\acrstyle{sm-short-long}: +\itempar{\optsto46:} +\begin{definition} +\ics*{printunsrtglossary}\oarg{options} +\end{definition} +(May be used with or without \gls{bib2gls}.) +\end{description} +where \meta{options} is a \meta{key}=\meta{value} list of options. +(Again, when the associated external file is missing, \cs{null} is +inserted into the document.) -These three styles are analogous to the above three styles, except -the display order is swapped to +\begin{xtr} +The \gls{glossaries-extra} package also provides \begin{definition} -\ics{firstacronymfont}\marg{short} (\meta{long}) +\ics*{printunsrtinnerglossary}\oarg{options}\marg{pre +code}\marg{post code} \end{definition} -on first use. +which is designed for inner or nested glossaries. It allows many, but not all, +of the options listed below. There's an example available in the gallery: +\gallery{index.php?label=bib2gls-inner}{Inner or Nested Glossaries}. +See the \gls{glossaries-extra} package for further details. +\end{xtr} -Note, however, that \ics{acronymsort} and \ics{acronymentry} are the -same as for the \meta{long} (\meta{short}) styles above, so the -acronyms are still sorted according to the short form. +The following keys are available in \marg{options}: +\begin{description} +\item[{\gloskey[printglossary]{type}}] The value of this key +specifies which glossary to print. If omitted, the default +glossary is assumed. For example, to print the list of acronyms: +\begin{verbatim} +\printglossary[type=\acronymtype] +\end{verbatim} +Note that you can't display an ignored glossary, so don't try +setting \gloskey[printglossary]{type} to the name of a glossary that +was defined using \ics{newignoredglossary}, described in +\sectionref{sec:newglossary}. (You can display an ignored glossary +with \ics*{printunsrtglossary} provided by \gls{glossaries-extra}.) -\item \acrstyle{long-short-desc}, \acrstyle{long-sc-short-desc}, -\acrstyle{long-sm-short-desc}, \acrstyle{long-sp-short-desc}: +\item[{\gloskey[printglossary]{title}}] This is the glossary's +title (overriding the title specified when the glossary was +defined). -These are like the \acrstyle{long-short}, \acrstyle{long-sc-short}, -\acrstyle{long-sm-short} and \acrstyle{long-sp-short} styles described above, except that the -\gloskey{description} key must be supplied in the optional argument -of \ics{newacronym}. They also redefine \ics{acronymentry} to -\marg{long} (\cs{acronymfont}\marg{short}) and redefine -\ics{acronymsort}\marg{short}\marg{long} to just \meta{long}. -This means that the acronyms are sorted according to the long form, -and in the list of acronyms the name field has the long form -followed by the short form in parentheses. I~recommend you use -a~glossary style such as \glostyle{altlist} with these acronym -styles to allow for the long name field. +\item[{\gloskey[printglossary]{toctitle}}] This is the title +to use for the table of contents (if the \pkgopt{toc} package +option has been used). It may also be used for the page header, +depending on the page style. If omitted, the value of +\gloskey[printglossary]{title} is used. -\item \acrstyle{short-long-desc}, \acrstyle{sc-short-long-desc}, -\acrstyle{sm-short-long-desc}: +\item[{\gloskey[printglossary]{style}}] This specifies which +glossary style to use for this glossary, overriding the effect +of the \pkgopt{style} package option or \ics{glossarystyle}. -These styles are analogous to the above three styles, but the first -use display style is: -\begin{definition} -\cs{firstacronymfont}\marg{short} (\meta{long}) -\end{definition} -The definitions of \cs{acronymsort} and \cs{acronymentry} are the -same as those for \acrstyle{long-short-desc} etc. +\item[{\gloskey[printglossary]{numberedsection}}] This specifies +whether to use a numbered section for this glossary, overriding +the effect of the \pkgopt{numberedsection} package option. This +key has the same syntax as the \pkgopt{numberedsection} package +option, described in \sectionref{sec:pkgopts-sec}. -\item \acrstyle{dua}, \acrstyle{dua-desc}: +\item[{\gloskey[printglossary]{nonumberlist}}] This is a boolean +key. If true (\verb|nonumberlist=true|) the numberlist is suppressed +for this glossary. If false (\verb|nonumberlist=false|) the +numberlist is displayed for this glossary. -With these styles, the \glslike\ commands always display the long form -regardless of whether the entry has been used or not. However, \ics{acrfull} -and \ics{glsentryfull} will display \meta{long} (\cs{acronymfont}\marg{short}). In the case -of \acrstyle{dua}, the \gloskey{name} and \gloskey{sort} keys are set to -the short form and the description is set to the long form. In the -case of \acrstyle{dua-desc}, the \gloskey{name} and \gloskey{sort} -keys are set to the long form and the description is supplied in the -optional argument of \ics{newacronym}. +\item[{\gloskey[printglossary]{nogroupskip}}] This is a boolean +key. If true the vertical gap between groups +is suppressed for this glossary. -\item \acrstyle{footnote}, \acrstyle{footnote-sc}, -\acrstyle{footnote-sm}: +\item[{\gloskey[printglossary]{nopostdot}}] This is a boolean +key. If true the full stop after the description +is suppressed for this glossary. -With these three styles, on first use the \glslike\ commands display: -\begin{definition} -\cs{firstacronymfont}\marg{short}\ics{footnote}\marg{long} -\end{definition} -However, \ics{acrfull} and \ics{glsentryfull} are set to -\cs{acronymfont}\marg{short} (\meta{long}). On subsequent use the display is: -\begin{definition} -\cs{acronymfont}\marg{short} -\end{definition} -The \gloskey{sort} and \gloskey{name} keys are set to -the short form, and the \gloskey{description} is set to the long -form. +\item[{\gloskey[printglossary]{entrycounter}}] This is a boolean +key. Behaves similar to the package option of the same name. +The corresponding package option must be used to make \ics{glsrefentry} +work correctly. + +\item[{\gloskey[printglossary]{subentrycounter}}] This is a boolean +key. Behaves similar to the package option of the same name. If you +want to set both \gloskey{entrycounter} and +\gloskey{subentrycounter}, make sure you specify +\gloskey{entrycounter} first. The corresponding package option must +be used to make \ics{glsrefentry} work correctly. + +\item[{\gloskey[printnoidxglossary]{sort}}] This key is only +available for \opt1. Possible values are: \texttt{word} (word +order), \texttt{letter} (letter order), \texttt{standard} (word or +letter ordering taken from the \pkgopt{order} package option), +\texttt{use} (order of use), \texttt{def} (order of definition) +\texttt{nocase} (case-insensitive) or \texttt{case} (case-sensitive). +Note that the word and letter comparisons (that is, everything other +than \texttt{sort=use} and \texttt{sort=def}) just use a simple +character code comparison. For a locale-sensitive sort, you must use +either \gls{xindy} (\opt3) or \gls{bib2gls} (\opt4). Note that \gls{bib2gls} +provides many other sort options. \begin{important} -In order to avoid nested hyperlinks on \firstuse\ the footnote -styles automatically implement \pkgopt[false]{hyperfirst} for the -acronym lists. +If you use the \texttt{use} or \texttt{def} values make sure +that you select a glossary style that doesn't have a visual +indicator between groups, as the grouping no longer makes sense. +Consider using the \pkgopt{nogroupskip} option. \end{important} -\item \acrstyle{footnote-desc}, \acrstyle{footnote-sc-desc}, -\acrstyle{footnote-sm-desc}: +{\raggedright +The word and letter order sort methods use +\sty{datatool}'s +\ics{dtlwordindexcompare} and \ics{dtlletterindexcompare} handlers. +The case-insensitive sort method uses \sty{datatool}'s +\ics{dtlicompare} handler. The case-sensitive sort method uses +\sty{datatool}'s \ics{dtlcompare} handler. See the \sty{datatool} +documentation for further details. +\par} -These three styles are similar to the previous three styles, but the -description has to be supplied in the optional argument of -\ics{newacronym}. The \gloskey{name} key is set to the long form -followed by the short form in parentheses and the \gloskey{sort} key -is set to the long form. This means that the acronyms will be sorted -according to the long form. In addition, since the \gloskey{name} -will typically be quite wide it's best to choose a glossary style -that can accommodate this, such as \glostyle{altlist}. +If you don't get an error with \texttt{sort=use} and +\texttt{sort=def} but you do get an error with one of the other sort +options, then you probably need to use the +\pkgopt[true]{sanitizesort} package option or make sure none of the +entries have fragile commands in their \gloskey{sort} field. -\end{itemize} +\item[{\xtrprintglosskey[\marg{label}]{label}}] +This key is only available with \gls{glossaries-extra} and labels +the glossary with \cs{label}\marg{label}. This is an alternative to +the package option \pkgopt[autolabel]{numberedsection} -\begin{example}{Adapting a Predefined Acronym Style}{ex:acrstyle} -Suppose I~want to use the \acrstyle{footnote-sc-desc} style, but -I~want the \gloskey{name} key set to the short form followed by the -long form in parentheses and the \gloskey{sort} key set to the short -form. Then I need to specify the \acrstyle{footnote-sc-desc} style: -\begin{verbatim} -\setacronymstyle{footnote-sc-desc} -\end{verbatim} -and then redefine \ics{acronymsort} and \ics{acronymentry}: +\item[{\xtrprintglosskey[\marg{boolean}]{target}}] This boolean key is only +available with \gls{glossaries-extra} and can be used to switch +off the automatic hypertarget for each entry. (This refers to the +target used by commands like \cs{gls} and \cs{glslink}.) + +This option is useful with \ics*{printunsrtglossary} as it allows +the same list (or sub-list) of entries to be displayed multiple +times without causing duplicate hypertarget names. + +\item[{\xtrprintglosskey[\marg{prefix}]{prefix}}] +This key is only available with \gls{glossaries-extra} and provides +another way of avoiding duplicate hypertarget names. In this case it uses a +different prefix for those names. This locally redefines +\ics{glolinkprefix} but note this will also affect the target for any entry +referenced within the glossary with commands like \cs{gls}, +\cs{glslink} or \cs{glshypertarget}. + +\item[{\xtrprintglosskey[\marg{prefix}]{targetnameprefix}}] +This key is only available with \gls{glossaries-extra}. +This is similar to the \pkgoptfmt{prefix} option, but it alters the prefix of +the hypertarget anchors without changing \ics{glslinkprefix} (so it +won't change the hyperlinks for any entries referenced in the +glossary). + +\item[{\xtrprintglosskey[\marg{boolean}]{groups}}] +This boolean key is only available with \gls{glossaries-extra} and, +if true, will attempt to perform group formation. See the +\gls{glossaries-extra} manual for further details. + +\item[{\xtrprintglosskey[\marg{n}]{leveloffset}}] +This key is only available with \ics*{printunsrtglossary}. +It can be used to locally adjust the +hierarchical level used by the glossary style. See the +\gls{glossaries-extra} manual for further details. +\end{description} + +By default, the glossary is started either by \ics{chapter*} or by +\ics{section*}, depending on whether or not \ics{chapter} is defined. +This can be overridden by the \pkgopt{section} package option or the +\ics{setglossarysection} command. Numbered sectional units can be +obtained using the \pkgopt{numberedsection} package option. Each +glossary sets the page header via the command +\begin{definition}[\DescribeMacro\glsglossarymark] +\ics{glsglossarymark}\marg{title} +\end{definition} +If this mechanism is unsuitable for your chosen class file or page +style package, you will need to redefine \ics{glsglossarymark}. Further +information about these options and commands is given in +\sectionref{sec:pkgopts-sec}. + +Information can be added to the start of the glossary (after the +title and before the main body of the glossary) by redefining +\begin{definition}[\DescribeMacro{\glossarypreamble}] +\cs{glossarypreamble} +\end{definition} +For example: \begin{verbatim} -\renewcommand*{\acronymsort}[2]{#1}% sort by short form -\renewcommand*{\acronymentry}[1]{% - \acronymfont{\glsentryshort{#1}}\space (\glsentrylong{#1})}% +\renewcommand{\glossarypreamble}{Numbers in italic +indicate primary definitions.} \end{verbatim} -(I've used \cs{space} for extra clarity, but you can just use an -actual space instead.) +This needs to be done before the glossary is displayed. -Note that the default Computer Modern fonts don't support bold -\gls{smallcaps}, so another font is required. For example: +If you want a different preamble per glossary you can use +\begin{definition}[\DescribeMacro{\setglossarypreamble}] +\cs{setglossarypreamble}\oarg{type}\marg{preamble text} +\end{definition} +If \meta{type} is omitted, \cs{glsdefaulttype} is used. + +For example: \begin{verbatim} -\usepackage[T1]{fontenc} +\setglossarypreamble{Numbers in italic +indicate primary definitions.} \end{verbatim} -The alternative is to redefine \ics{acronymfont} so that it -always switches to medium weight to ensure the \gls{smallcaps} setting is -used. For example: +This will print the given preamble text for the main glossary, +but not have any preamble text for any other glossaries. + +There is an analogous command to \cs{glossarypreamble} called +\begin{definition}[\DescribeMacro{\glossarypostamble}] +\cs{glossarypostamble} +\end{definition} +which is placed at the end of each glossary. + +\begin{example}{Switch to Two Column Mode for Glossary}{ex:twocolumn} +Suppose you are using the \glostyle{superheaderborder} +style\footnote{you can't use the \glostyle{longheaderborder} style +for this example as you can't use the \env{longtable} environment in +two column mode.}, and you want the glossary to be in two columns, +but after the glossary you want to switch back to one column mode, +you could do: \begin{verbatim} -\renewcommand*{\acronymfont}[1]{\textmd{\scshape #1}} +\renewcommand*{\glossarysection}[2][]{% + \twocolumn[{\chapter*{#2}}]% + \setlength\glsdescwidth{0.6\linewidth}% + \glsglossarymark{\glossarytoctitle}% +} + +\renewcommand*{\glossarypostamble}{\onecolumn} \end{verbatim} -The sample file \samplefile{FnAcrDesc} illustrates this -example. \end{example} -\subsection{Defining A Custom Acronym Style} -\label{sec:customacronym} - -You may find that the predefined acronyms styles that come with the -\styfmt{glossaries} package don't suit your requirements. In this -case you can define your own style using: -\begin{definition}[\DescribeMacro{\newacronymstyle}] -\cs{newacronymstyle}\marg{style name}\marg{display}\marg{definitions} +Within each glossary, each entry name is formatted according to +\begin{definition}[\DescribeMacro{\glsnamefont}] +\cs{glsnamefont}\marg{name} \end{definition} -where \meta{style name} is the name of the new style (avoid active -characters). The second argument, \meta{display}, is equivalent to -the mandatory argument of \ics{defglsentryfmt}. You can simply use -\ics{glsgenacfmt} or you can customize the display using commands -like \ics{ifglsused}, \ics{glsifplural} and \ics{glscapscase}. -(See \sectionref{sec:glsdisplay} for further details.) -If the style is likely to be used with a mixed glossary (that is entries in -that glossary are defined both with \ics{newacronym} and -\ics{newglossaryentry}) then you can test if the entry is an acronym -and use \ics{glsgenacfmt} if it is or \ics{glsgenentryfmt} if it -isn't. For example, the \acrstyle{long-short} style sets -\meta{display} as +which takes one argument: the entry name. This command is always +used regardless of the glossary style. By default, \cs{glsnamefont} +simply displays its argument in whatever the surrounding font +happens to be. This means that in the list-like glossary styles +(defined in the \sty{glossary-list} style file) the name will appear +in bold, since the name is placed in the optional argument of +\cs{item}, whereas in the tabular styles (defined in the +\sty{glossary-long} and \sty{glossary-super} style files) the name +will appear in the normal font. The hierarchical glossary styles +(defined in the \sty{glossary-tree} style file) also set the name in +bold. + +If you want to change the font for the description, or if you +only want to change the name font for some types of entries +but not others, you might want to consider using the +\gls{glossaries-extra} package. + +\begin{example}{Changing the Font Used to Display Entry Names in the +Glossary}{ex:glsnamefont} +Suppose you want all the entry names to appear in +medium weight small caps in your glossaries, then you can do: \begin{verbatim} -\ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}% +\renewcommand{\glsnamefont}[1]{\textsc{\mdseries #1}} \end{verbatim} -(You can use \ics{ifglshasshort} instead of \ics{ifglshaslong} to -test if the entry is an acronym if you prefer.) +\end{example} -The third argument, \meta{definitions}, can be used to redefine the -commands that affect the display style, such as \ics{acronymfont} -or, if \meta{display} uses \cs{glsgenacfmt}, \ics{genacrfullformat} -and its variants. +\begin{xtr} +The \gls{glossaries-extra} package provides additional hooks that +can be used to make other minor adjustments. +\end{xtr} -Note that \ics{setacronymstyle} redefines \ics{glsentryfull} and -\ics{acrfullfmt} to use \ics{genacrfullformat} (and similarly for -the plural and upper case variants). If this isn't appropriate for the -style (as in the case of styles like \acrstyle{footnote} and -\acrstyle{dua}) \cs{newacronymstyle} should redefine these commands -within \meta{definitions}. +The letter group titles (which are displayed for styles like +\glostyle{indexgroup}) can be changed either by redefining the +corresponding \cs{\meta{group-label}groupname} commands, such as +\ics{glssymbolsgroupname}, (see \sectionref{sec:fixednames}) or by +using the \gls{glossaries-extra} commands \ics*{glsxtrsetgrouptitle} +and \ics*{glsxtrlocalsetgrouptitle}. The \meta{group-label} is +typically obtained by the \gls{indexingapp}. +\chapter{Defining New Glossaries} +\label{sec:newglossary} -Within \cs{newacronymstyle}'s \meta{definitions} argument you -can also redefine -\begin{definition}[\DescribeMacro{\GenericAcronymFields}] -\cs{GenericAcronymFields} +A new glossary can be defined using: +\begin{definition}[\DescribeMacro{\newglossary}] +\cs{newglossary}\oarg{log-ext}\marg{name}\marg{in-ext}\marg{out-ext}\linebreak\marg{title}\oarg{counter} \end{definition} -This is a list of additional fields to be set in \ics{newacronym}. -You can use the following token registers to access the entry label, -long form and short form: \DescribeMacro{\glslabeltok}\cs{glslabeltok}, -\DescribeMacro{\glslongtok}\cs{glslongtok} and -\DescribeMacro{\glsshorttok}\cs{glsshorttok}. As with all \TeX\ -registers, you can access their values by preceding the register -with \ics{the}. For example, the \acrstyle{long-short} style does: -\begin{verbatim} -\renewcommand*{\GenericAcronymFields}{% - description={\the\glslongtok}}% -\end{verbatim} -which sets the \gloskey{description} field to the long form of the -acronym whereas the \acrstyle{long-short-desc} style does: -\begin{verbatim} -\renewcommand*{\GenericAcronymFields}{}% -\end{verbatim} -since the description needs to be specified by the user. +where \meta{name} is the label to assign to this glossary. +The arguments \meta{in-ext} and \meta{out-ext} specify the extensions to +give to the input and output files for that glossary, \meta{title} +is the default title for this new glossary and the final optional +argument \meta{counter} specifies which counter to use for the +associated \glspl{numberlist} (see also +\sectionref{sec:numberlists}). The first optional argument specifies +the extension for the \gls{makeindex} (\opt2) or \gls{xindy} (\opt3) +transcript file (this information is only used by +\gls{makeglossaries} which picks up the information from the +auxiliary file). If you use \opt1, the \meta{log-ext}, +\meta{in-ext} and \meta{out-ext} arguments are ignored. -It may be that you want to define a new acronym style that's based -on an existing style. Within \meta{display} you can use -\begin{definition}[\DescribeMacro\GlsUseAcrEntryDispStyle] -\cs{GlsUseAcrEntryDispStyle}\marg{style name} +\begin{important} +The glossary label \meta{name} must not contain any active +characters. It's generally best to stick with just characters that +have category code~11 (typically the non-extended \glspl{latinchar} +for standard \LaTeX). +\end{important} + +There is also a starred version (new to v4.08): +\begin{definition}[\DescribeMacro{\newglossary*}] +\cs{newglossary*}\marg{name}\marg{title}\oarg{counter} \end{definition} -to use the \meta{display} definition from the style given by -\meta{style name}. Within \meta{definitions} you can use -\begin{definition}[\DescribeMacro{\GlsUseAcrStyleDefs}] -\cs{GlsUseAcrStyleDefs}\marg{style name} +which is equivalent to +\begin{alltt} +\cs{newglossary}[\meta{name}-glg]\marg{name}\{\meta{name}-gls\}\{\meta{name}-glo\}\ifpdf\linebreak\fi\marg{title}\oarg{counter} +\end{alltt} +or you can also use: +\begin{definition}[\DescribeMacro{\altnewglossary}] +\cs{altnewglossary}\marg{name}\marg{tag}\marg{title}\oarg{counter} \end{definition} -to use the \meta{definitions} from the style given by \meta{style -name}. For example, the \acrstyle{long-sc-short} acronym style is -based on the \acrstyle{long-short} style with minor -modifications (remember to use \verb|##| instead of \verb|#| within -\meta{definitions}): -\begin{verbatim} -\newacronymstyle{long-sc-short}% -{% use the same display as "long-short" - \GlsUseAcrEntryDispStyle{long-short}% -}% -{% use the same definitions as "long-short" - \GlsUseAcrStyleDefs{long-short}% - % Minor modifications: - \renewcommand{\acronymfont}[1]{\textsc{##1}}% - \renewcommand*{\acrpluralsuffix}{\glstextup{\glspluralsuffix}}% -} -\end{verbatim} -(\DescribeMacro{\glstextup}\cs{glstextup} is used to cancel the effect -of \ics{textsc}. This defaults to \ics{textulc}, if defined, -otherwise \ics{textup}. For example, the plural of \textsc{svm} -should be rendered as \textsc{svm}s rather than \textsc{svms}.) - -\begin{example}{Defining a Custom Acronym Style}{ex:customacrstyle} -Suppose I want my acronym on \firstuse\ to have the -short form in the text and the long form with the description in a -footnote. Suppose also that I want the short form to be put in small -caps in the main body of the document, but I want it in normal -capitals in the list of acronyms. In my list of acronyms, I want the -long form as the name with the short form in brackets followed by -the description. That is, in the text I want \ics{gls} on \gls{firstuse} -to display: -\begin{display} -\ics{textsc}\marg{abbrv}\cs{footnote}"{"\meta{long}: \meta{description}"}" -\end{display} -on subsequent use: -\begin{display} -\ics{textsc}\marg{abbrv} -\end{display} -and in the list of acronyms, each entry will be displayed in the -form: -\begin{display} -\meta{long} (\meta{short}) \meta{description} -\end{display} +which is equivalent to +\begin{alltt} +\cs{newglossary}[\meta{tag}-glg]\marg{name}\{\meta{tag}-gls\}\{\meta{tag}-glo\}\marg{title}\oarg{counter} +\end{alltt} -Let's suppose it's possible that I may have a mixed glossary. I can -check this in the second argument of \ics{newacronymstyle} using: -\begin{verbatim} -\ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}% -\end{verbatim} -This will use \ics{glsgenentryfmt} if the entry isn't an acronym, -otherwise it will use \ics{glsgenacfmt}. The third argument -(\meta{definitions}) of -\ics{newacronymstyle} needs to redefine \ics{genacrfullformat} etc -so that the \firstuse\ displays the short form in the text with the -long form in a footnote followed by the description. This is done as -follows (remember to use \verb|##| instead of \verb|#|): -\begin{verbatim} - % No case change, singular first use: - \renewcommand*{\genacrfullformat}[2]{% - \firstacronymfont{\glsentryshort{##1}}##2% - \footnote{\glsentrylong{##1}: \glsentrydesc{##1}}% - }% - % First letter upper case, singular first use: - \renewcommand*{\Genacrfullformat}[2]{% - \firstacronymfont{\Glsentryshort{##1}}##2% - \footnote{\glsentrylong{##1}: \glsentrydesc{##1}}% - }% - % No case change, plural first use: - \renewcommand*{\genplacrfullformat}[2]{% - \firstacronymfont{\glsentryshortpl{##1}}##2% - \footnote{\glsentrylongpl{##1}: \glsentrydesc{##1}}% - }% - % First letter upper case, plural first use: - \renewcommand*{\Genplacrfullformat}[2]{% - \firstacronymfont{\Glsentryshortpl{##1}}##2% - \footnote{\glsentrylongpl{##1}: \glsentrydesc{##1}}% - }% -\end{verbatim} -If you think it inappropriate for the short form to be capitalised -at the start of a sentence you can change the above to: -\begin{verbatim} - % No case change, singular first use: - \renewcommand*{\genacrfullformat}[2]{% - \firstacronymfont{\glsentryshort{##1}}##2% - \footnote{\glsentrylong{##1}: \glsentrydesc{##1}}% - }% - % No case change, plural first use: - \renewcommand*{\genplacrfullformat}[2]{% - \firstacronymfont{\glsentryshortpl{##1}}##2% - \footnote{\glsentrylongpl{##1}: \glsentrydesc{##1}}% - }% - \let\Genacrfullformat\genacrfullformat - \let\Genplacrfullformat\genplacrfullformat -\end{verbatim} -Another variation is to use \ics{Glsentrylong} and -\ics{Glsentrylongpl} in the footnote instead of \ics{glsentrylong} and -\ics{glsentrylongpl}. +It may be that you have some terms that are so common +that they don't need to be listed. In this case, you can define +a~special type of glossary that doesn't create any associated files. +This is referred to as an \qt{ignored glossary} and it's ignored by +commands that iterate over all the glossaries, such as +\ics{printglossaries}. To define an ignored glossary, use +\begin{definition}[\DescribeMacro\newignoredglossary] +\cs{newignoredglossary}\marg{name} +\end{definition} +where \meta{name} is the name of the glossary (as above). This +glossary type will automatically be added to the +\pkgopt{nohypertypes} list, since there are no hypertargets for +the entries in an ignored glossary. +(The sample file \samplefile{-entryfmt} defines an ignored glossary.) -Now let's suppose that commands such as \ics{glsentryfull} and -\ics{acrfull} shouldn't -use a~footnote, but instead use the format: \meta{long} -(\meta{short}). -This means that the style needs to redefine \cs{glsentryfull}, -\ics{acrfullfmt} and their plural and upper case variants. +\begin{xtr} +The \gls{glossaries-extra} package provides a starred version of +this command that allows hyperlinks (since ignored glossaries can be +useful with \gls{bib2gls}). There is also an analogous +\ics*{provideignoredglossary} command. +\end{xtr} -First, the non-linking commands: +You can test if a glossary is an ignored one using: +\begin{definition}[\DescribeMacro\ifignoredglossary] +\cs{ifignoredglossary}\marg{name}\marg{true}\marg{false} +\end{definition} +This does \meta{true} if \meta{name} was defined as an ignored +glossary, otherwise it does \meta{false}. + +Note that the main (default) glossary is automatically created as: \begin{verbatim} - \renewcommand*{\glsentryfull}[1]{% - \glsentrylong{##1}\space - (\acronymfont{\glsentryshort{##1}})% - }% - \renewcommand*{\Glsentryfull}[1]{% - \Glsentrylong{##1}\space - (\acronymfont{\glsentryshort{##1}})% - }% - \renewcommand*{\glsentryfullpl}[1]{% - \glsentrylongpl{##1}\space - (\acronymfont{\glsentryshortpl{##1}})% - }% - \renewcommand*{\Glsentryfullpl}[1]{% - \Glsentrylongpl{##1}\space - (\acronymfont{\glsentryshortpl{##1}})% - }% +\newglossary{main}{gls}{glo}{\glossaryname} \end{verbatim} -Now for the linking commands: +so it can be identified by the label \texttt{main} (unless the +\pkgopt{nomain} package option is used). Using the +\pkgopt{acronym} package option is equivalent to: \begin{verbatim} - \renewcommand*{\acrfullfmt}[3]{% - \glslink[##1]{##2}{% - \glsentrylong{##2}##3\space - (\acronymfont{\glsentryshort{##2}})% - }% - }% - \renewcommand*{\Acrfullfmt}[3]{% - \glslink[##1]{##2}{% - \Glsentrylong{##2}##3\space - (\acronymfont{\glsentryshort{##2}})% - }% - }% - \renewcommand*{\ACRfullfmt}[3]{% - \glslink[##1]{##2}{% - \MakeTextUppercase{% - \glsentrylong{##2}##3\space - (\acronymfont{\glsentryshort{##2}})% - }% - }% - }% - \renewcommand*{\acrfullplfmt}[3]{% - \glslink[##1]{##2}{% - \glsentrylongpl{##2}##3\space - (\acronymfont{\glsentryshortpl{##2}})% - }% - }% - \renewcommand*{\Acrfullplfmt}[3]{% - \glslink[##1]{##2}{% - \Glsentrylongpl{##2}##3\space - (\acronymfont{\glsentryshortpl{##2}})% - }% - }% - \renewcommand*{\ACRfullplfmt}[3]{% - \glslink[##1]{##2}{% - \MakeTextUppercase{% - \glsentrylongpl{##2}##3\space - (\acronymfont{\glsentryshortpl{##2}})% - }% - }% - }% +\newglossary[alg]{acronym}{acr}{acn}{\acronymname} \end{verbatim} -(This may cause problems with long hyperlinks, in which case adjust -the definitions so that, for example, only the short form is inside -the argument of \ics{glslink}.) +so it can be identified by the label \texttt{acronym}. If you are +not sure whether the \pkgopt{acronym} option has been used, you +can identify the list of acronyms by the command +\DescribeMacro{\acronymtype}\cs{acronymtype} which is set to +\texttt{acronym}, if the \pkgopt{acronym} option has been used, +otherwise it is set to \texttt{main}. Note that if you are using +the main glossary as your list of acronyms, you need to declare +it as a list of acronyms using the package option +\pkgopt{acronymlists}. -The style also needs to redefine \ics{acronymsort} so that the -acronyms are sorted according to the long form: -\begin{verbatim} - \renewcommand*{\acronymsort}[2]{##2}% -\end{verbatim} -If you prefer them to be sorted according to the short form you can -change the above to: +The \pkgopt{symbols} package option creates a new glossary with the +label \texttt{symbols} using: \begin{verbatim} - \renewcommand*{\acronymsort}[2]{##1}% +\newglossary[slg]{symbols}{sls}{slo}{\glssymbolsgroupname} \end{verbatim} -The acronym font needs to be set to \ics{textsc} and the plural -suffix adjusted so that the \qt{s} suffix in the plural short form -doesn't get converted to \gls{smallcaps}: +The \pkgopt{numbers} package option creates a new glossary with +the label \texttt{numbers} using: \begin{verbatim} - \renewcommand*{\acronymfont}[1]{\textsc{##1}}% - \renewcommand*{\acrpluralsuffix}{\glstextup{\glspluralsuffix}}% +\newglossary[nlg]{numbers}{nls}{nlo}{\glsnumbersgroupname} \end{verbatim} -There are a number of ways of dealing with the format in the list of -acronyms. The simplest way is to redefine \ics{acronymentry} to the -long form followed by the upper case short form in parentheses: +The \pkgopt{index} package option creates a new glossary with +the label \texttt{index} using: \begin{verbatim} - \renewcommand*{\acronymentry}[1]{% - \Glsentrylong{##1}\space - (\MakeTextUppercase{\glsentryshort{##1}})}% +\newglossary[ilg]{index}{ind}{idx}{\indexname} \end{verbatim} -(I've used \ics{Glsentrylong} instead of \ics{glsentrylong} to -capitalise the name in the glossary.) -An alternative approach is to set \ics{acronymentry} to just the -long form and redefine \ics{GenericAcronymFields} to set the -\gloskey{symbol} key to the short form and use a glossary style that -displays the symbol in parentheses after the \gloskey{name} (such as -the \glostyle{tree} style) like this: -\begin{verbatim} - \renewcommand*{\acronymentry}[1]{\Glsentrylong{##1}}% - \renewcommand*{\GenericAcronymFields}{% - symbol={\protect\MakeTextUppercase{\the\glsshorttok}}}% -\end{verbatim} -I'm going to use the first approach and set -\ics{GenericAcronymFields} to do nothing: -\begin{verbatim} - \renewcommand*{\GenericAcronymFields}{}% -\end{verbatim} +\begin{important} +\optsand23: all glossaries must be defined before \ics{makeglossaries} to +ensure that the relevant output files are opened. -Finally, this style needs to switch off hyperlinks on first use to -avoid nested links: -\begin{verbatim} - \glshyperfirstfalse -\end{verbatim} -Putting this all together: -\begin{verbatim} -\newacronymstyle{custom-fn}% new style name -{% - \ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}% -}% -{% - \renewcommand*{\GenericAcronymFields}{}% - \glshyperfirstfalse - \renewcommand*{\genacrfullformat}[2]{% - \firstacronymfont{\glsentryshort{##1}}##2% - \footnote{\glsentrylong{##1}: \glsentrydesc{##1}}% - }% - \renewcommand*{\Genacrfullformat}[2]{% - \firstacronymfont{\Glsentryshort{##1}}##2% - \footnote{\glsentrylong{##1}: \glsentrydesc{##1}}% - }% - \renewcommand*{\genplacrfullformat}[2]{% - \firstacronymfont{\glsentryshortpl{##1}}##2% - \footnote{\glsentrylongpl{##1}: \glsentrydesc{##1}}% - }% - \renewcommand*{\Genplacrfullformat}[2]{% - \firstacronymfont{\Glsentryshortpl{##1}}##2% - \footnote{\glsentrylongpl{##1}: \glsentrydesc{##1}}% - }% - \renewcommand*{\glsentryfull}[1]{% - \glsentrylong{##1}\space - (\acronymfont{\glsentryshort{##1}})% - }% - \renewcommand*{\Glsentryfull}[1]{% - \Glsentrylong{##1}\space - (\acronymfont{\glsentryshort{##1}})% - }% - \renewcommand*{\glsentryfullpl}[1]{% - \glsentrylongpl{##1}\space - (\acronymfont{\glsentryshortpl{##1}})% - }% - \renewcommand*{\Glsentryfullpl}[1]{% - \Glsentrylongpl{##1}\space - (\acronymfont{\glsentryshortpl{##1}})% - }% - \renewcommand*{\acrfullfmt}[3]{% - \glslink[##1]{##2}{% - \glsentrylong{##2}##3\space - (\acronymfont{\glsentryshort{##2}})% - }% - }% - \renewcommand*{\Acrfullfmt}[3]{% - \glslink[##1]{##2}{% - \Glsentrylong{##2}##3\space - (\acronymfont{\glsentryshort{##2}})% - }% - }% - \renewcommand*{\ACRfullfmt}[3]{% - \glslink[##1]{##2}{% - \MakeTextUppercase{% - \glsentrylong{##2}##3\space - (\acronymfont{\glsentryshort{##2}})% - }% - }% - }% - \renewcommand*{\acrfullplfmt}[3]{% - \glslink[##1]{##2}{% - \glsentrylongpl{##2}##3\space - (\acronymfont{\glsentryshortpl{##2}})% - }% - }% - \renewcommand*{\Acrfullplfmt}[3]{% - \glslink[##1]{##2}{% - \Glsentrylongpl{##2}##3\space - (\acronymfont{\glsentryshortpl{##2}})% - }% - }% - \renewcommand*{\ACRfullplfmt}[3]{% - \glslink[##1]{##2}{% - \MakeTextUppercase{% - \glsentrylongpl{##2}##3\space - (\acronymfont{\glsentryshortpl{##2}})% - }% - }% - }% - \renewcommand*{\acronymfont}[1]{\textsc{##1}}% - \renewcommand*{\acrpluralsuffix}{\glstextup{\glspluralsuffix}}% - \renewcommand*{\acronymsort}[2]{##2}% - \renewcommand*{\acronymentry}[1]{% - \Glsentrylong{##1}\space - (\MakeTextUppercase{\glsentryshort{##1}})}% -} -\end{verbatim} +See \sectionref{sec:fixednames} if you want to redefine \cs{glossaryname}, +especially if you are using \sty{babel} or \sty{translator}. +(Similarly for \cs{glssymbolsgroupname} and +\cs{glsnumbersgroupname}.) If you want to redefine \ics{indexname}, +just follow the advice in +\href{https://texfaq.org/FAQ-fixnam}{How to +change LaTeX’s \qt{fixed names}}. +\end{important} -Now I need to specify that I want to use this new style: -\begin{verbatim} -\setacronymstyle{custom-fn} -\end{verbatim} -I also need to use a glossary style that suits this acronym style, -for example \glostyle{altlist}: +\chapter{Adding an Entry to the Glossary Without Generating Text} +\label{sec:glsadd} + +It is possible to add a line to the glossary file without +generating any text at that point in the document using: +\begin{definition}[\DescribeMacro{\glsadd}] +\cs{glsadd}\oarg{options}\marg{label} +\end{definition} +This is similar to the \glstextlike\ commands, only it doesn't produce +any text (so therefore, there is no \gloskey[glslink]{hyper} key +available in \meta{options} but all the other options that can +be used with \glstextlike\ commands can be passed to \cs{glsadd}). + +This command essentially works like \cs{index} (provided by the +\LaTeX\ kernel) in that it doesn't produce text but it does add a +line with an associated location to the glossary file. In this case, +the \qt{encap} (the page encapsulator information) is specified with +the \gloskey{format} key. (See \sectionref{sec:encap}.) + +For example, to add a page range to the glossary number list for the +entry whose label is given by \texttt{set}: \begin{verbatim} -\setglossarystyle{altlist} +\glsadd[format=(]{set} +Lots of text about sets spanning many pages. +\glsadd[format=)]{set} \end{verbatim} -Once the acronym style has been set, I can define my acronyms: +To add all entries that have been defined, use: +\begin{definition}[\DescribeMacro{\glsaddall}] +\cs{glsaddall}\oarg{options} +\end{definition} +The optional argument is the same as for \cs{glsadd}, except +there is also a key \gloskey[glsaddall]{types} which can be +used to specify which glossaries to use. This should be a +comma-separated list. For example, if you only want to add +all the entries belonging to the list of acronyms (specified by +the glossary type \ics{acronymtype}) and a list of +notation (specified by the glossary type \texttt{notation}) then you can +do: \begin{verbatim} -\newacronym[description={set of tags for use in -developing hypertext documents}]{html}{html}{Hyper -Text Markup Language} - -\newacronym[description={language used to describe the -layout of a document written in a markup language}]{css} -{css}{Cascading Style Sheet} +\glsaddall[types={\acronymtype,notation}] \end{verbatim} -The sample file \samplefile{-custom-acronym} illustrates this -example. -\end{example} +\begin{bib2gls} +If you are using \gls{bib2gls} with \gls{glossaries-extra}, you +can't use \cs{glsaddall}. Instead use the \optfmt{selection=all} +resource option to select all entries in the given \filetype{bib} files. +\end{bib2gls} -\begin{example}{Italic and Upright Abbreviations}{ex:font-abbr} -Suppose I~want to have some abbreviations in italic and some that -just use the surrounding font. Hard-coding this into the -\meta{short} argument of \cs{newacronym} can cause complications. +\begin{important} +Note that \cs{glsadd} and \cs{glsaddall} add the current location to +the \gls{numberlist}. In the case of \cs{glsaddall}, all entries in the +glossary will have the same location in the number list. If you want +to use \cs{glsaddall}, it's best to suppress the number list with +the \pkgopt{nonumberlist} package option. (See +sections~\ref{sec:pkgopts-printglos} and~\ref{sec:numberlists}.) +\end{important} -This example uses \ics{glsaddstoragekey} to add an extra field that -can be used to store the formatting declaration (such as \cs{em}). -\begin{verbatim} -\glsaddstoragekey{font}{}{\entryfont} -\end{verbatim} -This defines a~new field/key called \texttt{font}, which defaults to -nothing if it's not explicitly set. This also defines a command -called \cs{entryfont} that's analogous to \cs{glsentrytext}. A~new -style is then created to format abbreviations that access this field. +There is now a variation of \cs{glsaddall} that skips any entries +that have been \glsdisp{firstuseflag}{marked as used}: +\begin{definition}[\DescribeMacro\glsaddallunused] +\cs{glsaddallunused}\oarg{list} +\end{definition} +This command uses \cs{glsadd}\texttt{[format=glsignore]} which will +ignore this location in the number list. (See \sectionref{sec:encap}.) +The optional argument \meta{list} is a comma-separated list of +glossary types. If omitted, it defaults to the list of all defined +glossaries. -There are two ways to do this. The first is to create a style that -doesn't use \ics{glsgenacfmt} but instead provides a~modified -version that doesn't use \cs{acronymfont}\marg{short} -but instead uses -\verb|{|\cs{entryfont}\verb|{\glslabel}|\meta{short}\verb|}|. -The full format given by commands such as \cs{genacrfullformat} -need to be similarly adjusted. For example: -\begin{verbatim} - \renewcommand*{\genacrfullformat}[2]{% - \glsentrylong{##1}##2\space - ({\entryfont{##1}\glsentryshort{##1}})% - }% -\end{verbatim} -This will deal with commands like \ics{gls} but not commands like -\ics{acrshort} which still use \ics{acronymfont}. Another approach -is to redefine \cs{acronymfont} to look up the required font -declaration. Since \cs{acronymfont} doesn't take the entry label as -an argument, the following will only work if \cs{acronymfont} is -used in a~context where the label is provided by \ics{glslabel}. -This is true in \cs{gls}, \cs{acrshort} and \cs{acrfull}. The -redefinition is now: +\begin{important} +If you want to use \cs{glsaddallunused}, it's best to place the +command at the end of the document to ensure that all the commands +you intend to use have already been used. Otherwise you could end up +with a spurious comma or dash in the location list. +\end{important} + +\begin{bib2gls} +With \gls{glossaries-extra} and \gls{bib2gls}, \texttt{glsignore} +indicates an \qt{ignored location} which influences selection but +isn't added to the location list. In this case, if you use +\optfmt{selection=all} then only those entries that have been +explicitly indexed in the document will have location lists. The +other entries that were selected as a result of +\optfmt{selection=all} won't have location lists. +\end{bib2gls} + +Base \sty{glossaries} package only: \begin{verbatim} -\renewcommand*{\acronymfont}[1]{{\entryfont{\glslabel}#1}}% +\documentclass{article} +\usepackage{glossaries} +\makeglossaries +\newglossaryentry{cat}{name={cat},description={feline}} +\newglossaryentry{dog}{name={dog},description={canine}} +\begin{document} +\gls{cat}. +\printglossaries +\glsaddallunused % <- make sure dog is also listed +\end{document} \end{verbatim} -So the new style can be defined as: +Corresponding \gls{glossaries-extra} and \gls{bib2gls} document code: \begin{verbatim} -\newacronymstyle{long-font-short} -{% - \GlsUseAcrEntryDispStyle{long-short}% -} -{% - \GlsUseAcrStyleDefs{long-short}% - \renewcommand*{\genacrfullformat}[2]{% - \glsentrylong{##1}##2\space - ({\entryfont{##1}\glsentryshort{##1}})% - }% - \renewcommand*{\Genacrfullformat}[2]{% - \Glsentrylong{##1}##2\space - ({\entryfont{##1}\glsentryshort{##1}})% - }% - \renewcommand*{\genplacrfullformat}[2]{% - \glsentrylongpl{##1}##2\space - ({\entryfont{##1}\glsentryshortpl{##1}})% - }% - \renewcommand*{\Genplacrfullformat}[2]{% - \Glsentrylongpl{##1}##2\space - ({\entryfont{##1}\glsentryshortpl{##1}})% - }% - \renewcommand*{\acronymfont}[1]{{\entryfont{\glslabel}##1}}% - \renewcommand*{\acronymentry}[1]{{\entryfont{##1}\glsentryshort{##1}}}% -} +\documentclass{article} +\usepackage[record]{glossaries-extra} +\GlsXtrLoadResources[src={entries},selection=all] +\begin{document} +\gls{cat}. +\printunsrtglossaries +\end{document} \end{verbatim} -Remember the style needs to be set before defining the entries: +With the file \texttt{entries.bib}: \begin{verbatim} -\setacronymstyle{long-font-short} +@entry{cat,name={cat},description={feline}} +@entry{dog,name={dog},description={canine}} \end{verbatim} -The complete document is contained in the sample file -\samplefile{-font-abbr}. -\end{example} - -Some writers and publishing houses have started to drop full stops -(periods) from upper case initials but may still retain them for -lower case abbreviations, while others may still use them for both -upper and lower case. This can cause complications. Chapter~12 of -\emph{The \TeX{}book} discusses the spacing between words but, -briefly, the default behaviour of \TeX\ is to assume that an upper -case character followed by a~full stop and space is an abbreviation, -so the space is the default inter-word space whereas a~lower case -character followed by a~full stop and space is a word occurring at -the end of a~sentence. In the event that this isn't true, you need -to make a~manual adjustment using \verb*| | (back slash space) in -place of just a~space character for an inter-word mid-sentence space -and use \verb|\@| before the full stop to indicate the end of the -sentence. - -For example: +\begin{example}{Dual Entries}{ex:dual} +The example file \samplefile{-dual} makes use of \cs{glsadd} to +allow for an entry that should appear both in the main glossary and +in the list of acronyms. This example sets up the list of acronyms +using the \pkgopt{acronym} package option: \begin{verbatim} -I was awarded a B.Sc. and a Ph.D. (From the same place.) +\usepackage[acronym]{glossaries} \end{verbatim} -is typeset as -\begin{display} -I was awarded a B.Sc. and a Ph.D. (From the same place.) -\end{display} -The spacing is more noticeable with the typewriter font: +A new command is then defined to make it easier to define dual +entries: \begin{verbatim} -\ttfamily -I was awarded a B.Sc. and a Ph.D. (From the same place.) +\newcommand*{\newdualentry}[5][]{% + \newglossaryentry{main-#2}{name={#4},% + text={#3\glsadd{#2}},% + description={#5},% + #1 + }% + \newacronym{#2}{#3\glsadd{main-#2}}{#4}% +} \end{verbatim} -is typeset as -\begin{display}\ttfamily -I was awarded a B.Sc. and a Ph.D. (From the same place.) -\end{display} -The lower case letter at the end of ``B.Sc.''\ is confusing \TeX\ -into thinking that the full stop after it marks the end of the -sentence. Whereas the upper case letter at the end of ``Ph.D.'' has -confused \TeX\ into thinking that the following full stop is just -part of the abbreviation. These can be corrected: +This has the following syntax: +\begin{alltt} +\ics{newdualentry}\oarg{options}\marg{label}\marg{abbrv}\marg{long}\marg{description} +\end{alltt} +You can then define a new dual entry: \begin{verbatim} -I was awarded a B.Sc.\ and a Ph.D\@. (From the same place.) +\newdualentry{svm}% label + {SVM}% abbreviation + {support vector machine}% long form + {Statistical pattern recognition technique}% description \end{verbatim} +Now you can reference the acronym with \verb|\gls{svm}| or you can +reference the entry in the main glossary with \verb|\gls{main-svm}|. -This situation is a bit problematic for \styfmt{glossaries}. The -full stops can form part of the \meta{short} argument of -\cs{newacronym} and the \verb*|B.Sc.\ | part can be dealt with by -remembering to add \verb*|\ | (for example, \verb*|\gls{bsc}\ |) -but the end of sentence case is more troublesome as you need to omit -the sentence terminating full stop (to avoid two dots) which can -make the source code look a little strange but you also need to -adjust the space factor, which is usually done by inserting \cs{@} -before the full stop. +This is just an example. +In general, think twice before you add this kind of duplication. +If all information (short, long and description) can be provided in +a single list, it's redundant to provide a second list unless any +of the short forms start with a different letter to the associated +long form, which may make it harder to lookup. -The next example shows one way of achieving this. -(Note that the supplemental \gls{glossaries-extra} package provides a much -simpler way of doing this, which you may prefer to use. See the -\gallery{sample-initialisms.shtml}{initialisms example}.) +\begin{bib2gls} +Note that with \gls{bib2gls}, there are special dual entry types +that implement this behaviour. That is, if an entry is referenced +then its corresponding dual entry will automatically be selected as +well. So there is less need for \cs{glsadd} with \gls{bib2gls}. +(Although it can still be useful, as shown in \opt6.) +\end{bib2gls} +\end{example} -\begin{example}{Abbreviations with Full Stops (Periods)}{ex:dotabbr} -As from version 4.16, there's now a hook (\ics{glspostlinkhook}) -that's called at the very end of the \glslike\ and \glstextlike\ -commands. This can be redefined to check if the following character -is a full stop. The \sty{amsgen} package (which is automatically -loaded by \styfmt{glossaries}) provides an internal command -called \cs{new@ifnextchar} that can be used to determine if the -given character appears next. (For more information see the -\sty{amsgen} documentation.) +\chapter{Cross-Referencing Entries} +\label{sec:crossref} -It's possible that I~may also want acronyms or contractions in my -document, so I~need some way to differentiate between them. -Here I'm going to use the same method as in -example~\ref{ex:addstoragekey} where a~new field is defined -to indicate the type of abbreviation: +\begin{important} +You must use \ics{makeglossaries} (\optsor23) or +\ics{makenoidxglossaries} (\opt1) \emph{before} defining any +terms that cross-reference entries. If any of the terms that you have +cross-referenced don't appear in the glossary, check that you have +put \cs{makeglossaries}\slash\cs{makenoidxglossaries} before all +entry definitions. The \gls{glossaries-extra} package provides +better cross-reference handling. +\end{important} + +There are several ways of cross-referencing entries in the +glossary: + +\begin{enumerate} +\item You can use commands such as \ics{gls} in the +entries description. For example: \begin{verbatim} -\glsaddstoragekey{abbrtype}{word}{\abbrtype} +\newglossaryentry{apple}{name=apple, +description={firm, round fruit. See also \gls{pear}}} +\end{verbatim} +Note that with this method, if you don't use the cross-referenced term +in the main part of the document, you will need two runs of +\gls{makeglossaries}: +\begin{prompt} +pdflatex filename +makeglossaries filename +pdflatex filename +makeglossaries filename +pdflatex filename +\end{prompt} +This is because the \cs{gls} in the description won't be detected +until the glossary has been created (unless the description is used +elsewhere in the document with \ics{glsentrydesc}). Take care not to +use \ics{glsdesc} (or \ics{Glsdesc}) in this case as it will cause a +nested link. -\newcommand*{\newabbr}[1][]{\newacronym[abbrtype=initials,#1]} +\item As described in \sectionref{sec:newglosentry}, you can use the +\gloskey{see} key when you define the entry. For example: +\begin{verbatim} +\newglossaryentry{MaclaurinSeries}{name={Maclaurin +series}, +description={Series expansion}, +see={TaylorsTheorem}} \end{verbatim} -Now I just use \ics{newacronym} for the acronyms, for example, +Note that in this case, the entry with the \gloskey{see} key will +automatically be added to the glossary, but the cross-referenced +entry won't. You therefore need to ensure that you use the +cross-referenced term with the commands described in +\sectionref{sec:glslink} or \sectionref{sec:glsadd}. + +The \qt{see} tag is produce using \ics{seename}, but can be +overridden in specific instances using square brackets +at the start of the \gloskey{see} value. For example: \begin{verbatim} -\newacronym{laser}{laser}{light amplification by stimulated -emission of radiation} +\newglossaryentry{MaclaurinSeries}{name={Maclaurin +series}, +description={Series expansion}, +see=[see also]{TaylorsTheorem}} \end{verbatim} -and my new command \cs{newabbr} for initials, for example, +Take care if you want to use the optional argument of commands such +as \ics{newacronym} or \ics{newterm} as the value will need to be +grouped. For example: \begin{verbatim} -\newabbr{eg}{e.g.}{exempli gratia} -\newabbr{ie}{i.e.}{id est} -\newabbr{bsc}{B.Sc.}{Bachelor of Science} -\newabbr{ba}{B.A.}{Bachelor of Arts} -\newabbr{agm}{A.G.M.}{annual general meeting} +\newterm{seal} +\newterm[see={[see also]seal}]{sea lion} \end{verbatim} -Within \cs{glspostlinkhook} the entry's label can be accessed using -\ics{glslabel} and \ics{ifglsfieldeq} can be used to determine if -the current entry has the new \texttt{abbrtype} field set to -\qt{initials}. If it doesn't, then nothing needs to happen, but if -it does, a~check is performed to see if the next character is a~full -stop. If it is, this signals the end of a~sentence otherwise it's -mid-sentence. - -Remember that internal commands within the document file (rather -than in a~class or package) need to be placed between -\ics{makeatletter} and \ics{makeatother}: +Similarly if the value contains a list. For example: \begin{verbatim} -\makeatletter -\renewcommand{\glspostlinkhook}{% - \ifglsfieldeq{\glslabel}{abbrtype}{initials}% - {\new@ifnextchar.\doendsentence\doendword} - {}% +\glossaryentry{lemon}{ + name={lemon}, + description={Yellow citrus fruit} +} +\glossaryentry{lime} +{ + name={lime}, + description={Green citrus fruit} +} +\glossaryentry{citrus} +{ + name={citrus}, + description={Plant in the Rutaceae family}, + see={lemon,lime} } -\makeatother \end{verbatim} -In the event that a full stop is found \cs{doendsentence} is -performed but it will be followed by the full stop, which needs to -be discarded. Otherwise \cs{doendword} will be done but it won't be -followed by a full stop so there's nothing to discard. The -definitions for these commands are: + +\item After you have defined the entry, use +\begin{definition}[\DescribeMacro{\glssee}] +\cs{glssee}\oarg{tag}\marg{label}\marg{xr label list} +\end{definition} +where \meta{xr label list} is a comma-separated list of entry +labels to be cross-referenced, \meta{label} is the label of the +entry doing the cross-referencing and \meta{tag} is the \qt{see} tag. +(The default value of \meta{tag} is \ics{seename}.) +For example: \begin{verbatim} -\newcommand{\doendsentence}[1]{\spacefactor=10000{}} -\newcommand{\doendword}{\spacefactor=1000{}} +\glssee[see also]{series}{FourierSeries,TaylorsTheorem} \end{verbatim} -Now, I can just do \verb|\gls{bsc}| mid-sentence and -\verb|\gls{phd}.| at the end of the sentence. The terminating full -stop will be discarded in the latter case, but it won't be discarded -in, say, \verb|\gls{laser}.| as that doesn't have the -\texttt{abbrtype} field set to \qt{initials}. +Note that this automatically adds the entry given by \meta{label} to +the glossary but doesn't add the cross-referenced entries (specified +by \meta{xr label list}) to the glossary. +\end{enumerate} -This also works on first use when the style is set to one of the -\meta{long} (\meta{short}) styles but it will fail with the -\meta{short} (\meta{long}) styles as in this case the terminating -full stop shouldn't be discarded. Since \ics{glspostlinkhook} is -used after the \firstuseflag\ has been unset for the entry, this -can't be fixed by simply checking with \ics{ifglsused}. One possible -solution to this is to redefine \ics{glslinkpostsetkeys} to check -for the \firstuseflag\ and define a macro that can then be used in -\ics{glspostlinkhook}. +In both cases~2 and 3 above, the cross-referenced information +appears in the \gls{numberlist}, whereas in case~1, the +cross-referenced information appears in the description. (See the +\samplefile{-crossref} example file that comes with this package.) +This means that in cases~2 and~3, the cross-referencing information +won't appear if you have suppressed the \gls*{numberlist}. In this +case, you will need to activate the \gls*{numberlist} for the given +entries using \gloskey{nonumberlist=false}. Alternatively, if you +just use the \gloskey{see} key instead of \ics{glssee}, you can +automatically activate the \gls*{numberlist} using the +\pkgopt{seeautonumberlist} package option. -The other thing to consider is what to do with plurals. One -possibility is to check for plural use within \cs{doendsentence} -(using \ics{glsifplural}) and put the full stop back if the plural -has been used. +\begin{bib2gls} +\gls{bib2gls} provides much better support for cross-references. +See, for example, +\gallery{index.php?label=bib2gls-xr}{Gallery: Cross-References (bib2gls)}. +\end{bib2gls} -The complete document is contained in the sample file -\samplefile{-dot-abbr}. -\end{example} +\section{Customising Cross-reference Text} +\label{sec:customxr} -\section{Displaying the List of Acronyms} -\label{sec:disploa} +When you use either the \gloskey{see} key or the command +\cs{glssee}, the cross-referencing information will be typeset in the +glossary according to: +\begin{definition}[\DescribeMacro{\glsseeformat}] +\cs{glsseeformat}\oarg{tag}\marg{label-list}\marg{location} +\end{definition} +The default definition of \cs{glsseeformat} is: +\begin{display} +\cs{emph}\marg{tag} \cs{glsseelist}\marg{label-list} +\end{display} +Note that the location is always ignored.\footnote{\gls{makeindex} +will always assign a location number, even if it's not needed, so it +needs to be discarded.} For example, if you want the tag to appear +in bold, you can do:\footnote{If you redefine \cs{glsseeformat}, +keep the default value of the optional argument as \ics{seename} as +both \gloskey{see} and \cs{glssee} explicitly write +\texttt[\cs{seename}\texttt] in the output file if no optional +argument is given.} +\begin{verbatim} +\renewcommand*{\glsseeformat}[3][\seename]{\textbf{#1} + \glsseelist{#2}} +\end{verbatim} -The list of acronyms is just like any other type of glossary and can -be displayed on its own using: -\begin{description} -\itempar{\opt1:} -\begin{alltt} -\ics{printnoidxglossary}[type=\ics{acronymtype}] -\end{alltt} -\itempar{\optsand23:} -\begin{alltt} -\ics{printglossary}[type=\ics{acronymtype}] -\end{alltt} +The list of labels is dealt with by \cs{glsseelist}, which iterates +through the list and typesets each entry in the label. The entries +are separated by +\begin{definition}[\DescribeMacro{\glsseesep}] +\cs{glsseesep} +\end{definition} +or (for the last pair) +\begin{definition}[\DescribeMacro{\glsseelastsep}] +\cs{glsseelastsep} +\end{definition} +These default to ``",\space"'' and +\qt{\cs{space}\ics{andname}\cs{space}} respectively. The list entry text +is displayed using: +\begin{definition}[\DescribeMacro{\glsseeitemformat}] +\cs{glsseeitemformat}\marg{label} +\end{definition} +This defaults to \ics{glsentrytext}\marg{label}.\footnote{In +versions before 3.0, \cs{glsentryname} was used, but this could cause +problems when the \gloskey{name} key was \glsd{sanitize}.} For example, to +make the cross-referenced list use small caps: +\begin{verbatim} +\renewcommand{\glsseeitemformat}[1]{% + \textsc{\glsentrytext{#1}}} +\end{verbatim} +\begin{xtr} +The \gls{glossaries-extra} package redefines \cs{glsseeitemformat} +and additionally provides \ics*{glsxtrhiername} which can be used +as an alternative to \cs{glsentrytext}. See the +\gls{glossaries-extra} manual for further details. +\end{xtr} -(If you use the -\pkgopt{acronym} package option you can also use -\begin{alltt} -\ics{printacronyms}\oarg{options} -\end{alltt} -as a synonym for -\begin{alltt} -\ics{printglossary}[type=\ics{acronymtype},\meta{options}] -\end{alltt} -See \sectionref{sec:pkgopts-acronym}.) +\begin{important} +You can use \ics{glsseeformat} and \ics{glsseelist} in the main body +of the text, but they won't automatically add the cross-referenced +entries to the glossary. If you want them added with that location, +you can do: +\begin{verbatim} +Some information (see also +\glsseelist{FourierSeries,TaylorsTheorem}% +\glsadd{FourierSeries}\glsadd{TaylorsTheorem}). +\end{verbatim} +\end{important} -\end{description} -Alternatively the list of acronyms can be displayed with all the other -glossaries using: -\begin{description} -\item[\opt1:] \ics{printnoidxglossaries} +\chapter{Number Lists} +\label{sec:numberlists} + +Each entry in the glossary has an associated \gls{numberlist}. +By default, these numbers refer to the pages on which that entry has +been indexed (using any of the commands described in +\sectionref{sec:glslink} and \sectionref{sec:glsadd}). The number +list can be suppressed using the \pkgopt{nonumberlist} package +option, or an alternative counter can be set as the default using +the \pkgopt{counter} package option. The number list is also +referred to as the location list\index{location list|see{number list}}. + +\Glspl{numberlist} are more common with indexes rather than +glossaries (although you can use the \styfmt{glossaries} package for +indexes as well). However, the \styfmt{glossaries} package makes use +of \gls{makeindex} or \gls{xindy} to hierarchically sort and collate the +entries since they are readily available with most modern \TeX\ +distributions. Since these are both designed as \glspl{indexingapp} +they both require that terms either have a valid location or a +cross-reference. Even if you use \pkgopt{nonumberlist}, the +locations must still be provided and acceptable to the +\gls{indexingapp} or they will cause an error during the indexing +stage, which will interrupt the document build. However, if you're +not interested in the locations, each entry only needs to be indexed +once, so consider using \pkgopt{indexonlyfirst}, which can improve the +document build time by only indexing the \gls{firstuse} of each term. -\item[\optsand23:] \ics{printglossaries} -\end{description} +The \ics{glsaddall} command (see \sectionref{sec:glsadd}), which is used to +automatically index all entries, iterates over all defined entries +and does \cs{glsadd}\marg{label} for each entry (where \meta{label} +is that entry's label). This means that \cs{glsaddall} automatically +adds the same location to every entry's \gls{numberlist}, which +looks weird if the \gls*{numberlist} hasn't been suppressed. -However, care must be taken to choose a glossary style that's -appropriate to your acronym style. -Alternatively, you can define your own custom style (see -\sectionref{sec:newglossarystyle} for further details). +With \opt4, the indexing is performed by \gls{bib2gls}, which was +specifically designed for the \gls{glossaries-extra} package. So it +will allow any location format, and its \texttt{selection=all} +option will select all entries without adding an unwanted location to the +\gls{numberlist}. If \gls{bib2gls} can deduce a numerical value for +a location, it will attempt to form a range over consecutive +locations, otherwise it won't try to form a range and the +location will just form an individual item in the list. +\opt1 also allows any location but it doesn't form ranges. -\section{Upgrading From the glossary Package} -\label{sec:oldacronym} +\section{Encap Values (Location Formats)} +\label{sec:encap} -Users of the obsolete \sty{glossary} package may recall that -the syntax used to define new acronyms has changed with the -replacement \styfmt{glossaries} package. In addition, the old -\sty{glossary} package created the command -\cs{}\meta{acr-name} when defining the acronym \meta{acr-name}. +Each location in the \gls{numberlist} is encapsulated with a +command formed from the \termdef{encap} value. By +default this is the \ics{glsnumberformat} command, which corresponds +to the encap \texttt{glsnumberformat}, but this may be +overridden using the \gloskey[glslink]{format} key in the optional +argument to commands like \cs{gls}. (See \sectionref{sec:glslink}.) +For example, you may want the location to appear in bold to indicate +the principle use of a term or symbol. If the encap starts with an +open parenthesis~\verb|(| this signifies the start of a range and if +the encap starts with close parenthesis~\verb|)| this signifies the +end of a range. These must always occur in matching pairs. -In order to facilitate migrating from the old package to the new -one, the \styfmt{glossaries} package\footnote{as from version 1.18} -provides the command: -\begin{definition}[\DescribeMacro{\oldacronym}] -\cs{oldacronym}\oarg{label}\marg{abbrv}\marg{long}\marg{key-val list} +The \styfmt{glossaries} package provides the command: +\begin{definition}[\glsignore] +\cs{glsignore}\marg{text} \end{definition} -This uses the same syntax as the \sty{glossary} package's -method of defining acronyms. It is equivalent to: -\begin{display} -\ics{newacronym}\oarg{key-val list}\marg{label}\marg{abbrv}\marg{long} -\end{display} -In addition, \ics{oldacronym} also defines the commands -\cs{}\meta{label}, which is equivalent to \ics{gls}\marg{label}, -and \cs{}\meta{label}\texttt{*}, which is equivalent to -\ics{Gls}\marg{label}. If \meta{label} is omitted, \meta{abbrv} -is used. Since commands names must consist only of alphabetical -characters, \meta{label} must also only consist of alphabetical -characters. Note that \cs{}\meta{label} doesn't allow you to use -the first optional argument of \ics{gls} or \ics{Gls} --- you will -need to explicitly use \ics{gls} or \ics{Gls} to change the -settings. - -\begin{important} -Recall that, in general, \LaTeX\ ignores spaces following command -names consisting of alphabetical characters. This is also true for -\cs{}\meta{label} unless you additionally load the -\sty{xspace} package, but be aware that there are some issues with -using \sty{xspace}.\footnotemark -\end{important} -\footnotetext{See David Carlisle's explanation in -\href{http://tex.stackexchange.com/questions/86565/drawbacks-of-xspace}{Drawbacks -of xspace}} +which ignores its argument. This is the format used by +\cs{glsaddallunused} to suppress the location, which works fine as +long as no other locations are added to the \gls{numberlist}. For +example, if you use \verb|\gls{sample}| on page~2 then reset the +\gls{firstuseflag} and then use \cs{glsaddallunused} on page~10, the +\gls{numberlist} for \texttt{sample} will be \verb|2, \glsignore{10}| +which will result in \qt{2,~} which has a spurious comma. -The \styfmt{glossaries} package doesn't load the \sty{xspace} package -since there are both advantages and disadvantages to using -\ics{xspace} in \cs{}\meta{label}. If you don't use the -\sty{xspace} package you need to explicitly force a space using -\verb*|\ | (backslash space) however you can follow \cs{}\meta{label} -with additional text in square brackets (the final optional -argument to \ics{gls}). If you use the \sty{xspace} package -you don't need to escape the spaces but you can't use -the optional argument to insert text (you will have to explicitly -use \ics{gls}). +This isn't a problem with \gls{bib2gls} because you would need to use +\texttt{selection=all} instead of \cs{glsaddallunused}, but even if +you explicitly had used \texttt{glsignore}, for example, +\cs{gls}\texttt{[format=glsignore]}\marg{label}, then \gls{bib2gls} +will recognise \texttt{glsignore} as +a special encap indicating an ignored location, so it will select +the entry but not add that location to the \gls{numberlist}. It's a +problem for all the other indexing options. -To illustrate this, suppose I define the acronym \qt{abc} as -follows: -\begin{verbatim} -\oldacronym{abc}{example acronym}{} -\end{verbatim} -This will create the command \cs{abc} and its starred version -\cs{abc*}. \Tableref{tab:xspace} illustrates the effect of -\cs{abc} (on subsequent use) according to whether or not the -\sty{xspace} package has been loaded. As can be seen from the -final row in the table, the \sty{xspace} package prevents the -optional argument from being recognised. +Complications can arise if you use different encap values for the +same location. For example, suppose on page~10 you have both the +default \texttt{glsnumberformat} and \texttt{textbf} encaps. While it may +seem apparent that \texttt{textbf} should override \texttt{glsnumberformat} +in this situation, the \gls{indexingapp} may not know it. +This is therefore something you need to be careful about if you use the +\gloskey[glslink]{format} key or if you use a command that +implicitly sets it. -\begin{table}[htbp] -\caption[The effect of using xspace]{The effect of using -\styfmt{xspace} with \cs{oldacronym}} -\label{tab:xspace} -\vskip\baselineskip -\centering -\begin{tabular}{lll} -\bfseries Code & \bfseries With \styfmt{xspace} & -\bfseries Without \styfmt{xspace}\\ -\verb|\abc.| & abc. & abc.\\ -\verb|\abc xyz| & abc xyz & abcxyz\\ -\verb|\abc\ xyz| & abc xyz & abc xyz\\ -\verb|\abc* xyz| & Abc xyz & Abc xyz\\ -\verb|\abc['s] xyz| & abc ['s] xyz & abc's xyz -\end{tabular} -\par -\end{table} +In the case of \gls{xindy}, it only accepts one encap (according to +the order of precedence given in the \gls{xindy} module) and discards the +others for identical locations (for the same entry). This can cause +a problem if a discarded location forms the start or end of a range. -\chapter{Unsetting and Resetting Entry Flags} -\label{sec:glsunset} +In the case of \gls{makeindex}, it accepts different encaps for the +same location, but warns about it. This leads to a \gls{numberlist} +with the same location repeated in different formats. If you use +the \gls{makeglossaries} Perl script with \opt2 it will detect +\gls{makeindex}'s warning and attempt to fix the problem, ensuring +that the \texttt{glsnumberformat} encap always has the least precedence +unless it includes a range identifier. Other conflicting encaps will +have the last one override earlier ones for the same location with +range identifiers taking priority. -When using the \glslike\ commands it is -possible that you may want to use the value given by the -\gloskey{first} key, even though you have already \glslink{firstuse}{used} the glossary -entry. Conversely, you may want to use the value given by the -\gloskey{text} key, even though you haven't used the glossary entry. -The former can be achieved by one of the following commands: -\begin{definition}[\DescribeMacro{\glsreset}] -\cs{glsreset}\marg{label} -\end{definition} -\begin{definition}[\DescribeMacro{\glslocalreset}] -\cs{glslocalreset}\marg{label} -\end{definition} -while the latter can be achieved by one of the following commands: -\begin{definition}[\DescribeMacro{\glsunset}] -\cs{glsunset}\marg{label} -\end{definition} -\begin{definition}[\DescribeMacro{\glslocalunset}] -\cs{glslocalunset}\marg{label} -\end{definition} -You can also reset or unset all entries for a given glossary or list of -glossaries using: -\begin{definition}[\DescribeMacro{\glsresetall}] -\cs{glsresetall}\oarg{glossary list} -\end{definition} -\begin{definition}[\DescribeMacro{\glslocalresetall}] -\cs{glslocalresetall}\oarg{glossary list} -\end{definition} -\begin{definition}[\DescribeMacro{\glsunsetall}] -\cs{glsunsetall}\oarg{glossary list} -\end{definition} -\begin{definition}[\DescribeMacro{\glslocalunsetall}] -\cs{glslocalunsetall}\oarg{glossary list} -\end{definition} -where \meta{glossary list} is a comma-separated list of -glossary labels. If omitted, all defined glossaries are assumed -(except for the ignored ones). -For example, to reset all entries in the main glossary and the -list of acronyms: -\begin{verbatim} -\glsresetall[main,acronym] -\end{verbatim} +No discard occurs with \opt1 so again you get the same location +repeated in different formats. With \opt4, \gls{bib2gls} will discard +according to order of precedence, giving priority to start and end +range encaps. (See the \gls{bib2gls} manual for further details.) -You can determine whether an entry's \gls{firstuseflag} is set using: -\begin{definition}[\DescribeMacro{\ifglsused}] -\cs{ifglsused}\marg{label}\marg{true part}\marg{false part} -\end{definition} -where \meta{label} is the label of the required entry. If the -entry has been used, \meta{true part} will be done, otherwise -\meta{false part} will be done. +\section{Locations} +\label{sec:locationsyntax} -\begin{important} -Be careful when using \glslike\ commands within an -environment or command argument that gets processed multiple times -as it can cause unwanted side-effects when the first use displayed -text is different from subsequent use. -\end{important} +Neither \opt1 nor \opt4 care about the location syntax as long as +it's valid \LaTeX\ code (and doesn't contain fragile commands). In +both cases, the indexing is performed by writing a line to the +\filetype{aux} file. The write operation is deferred to avoid the +problems associated with \TeX's asynchronous output routine. +(See, for example, +\href{https://texfaq.org/FAQ-oddpage}{Finding +if you're on an odd or an even page} for more details on this issue.) +Unfortunately \optsand23 are far more problematic and need some +complex code to deal with awkward locations. -For example, the \env{frame} environment in \cls{beamer} processes -its argument for each overlay. This means that the \firstuseflag\ -will be unset on the first overlay and subsequent overlays will use -the non-first use form. +If you know that your locations will always expand to a format +acceptable to your chosen \gls{indexingapp} then use the package +option \pkgopt[false]{esclocations} to bypass this operation. This setting +only affects \optsand23 as the problem doesn't arise with the other +indexing options. -Consider the following example: +Both \gls{makeindex} and \gls{xindy} are fussy about the syntax of +the locations. In the case of \gls{makeindex}, only the numbering +system obtained with \cs{arabic}, \cs{roman}, \cs{Roman}, \cs{alph} +and \cs{Alph} or composites formed from them with the same separator +(set with \cs{glsSetCompositor}\marg{char}) are accepted. +(\gls{makeindex} won't accept an empty location.) In the case of +\gls{xindy}, you can define your own location classes, but if the +location contains a robust command then the leading backslash must +be escaped. The \sty{glossaries} package tries to do this, but it's +caught between two conflicting requirements: +\begin{enumerate} +\item The location must be fully expanded before \verb|\| can be +converted to \verb|\\| (there's no point converting \verb|\thepage| +to \verb|\\thepage|); +\item The page number can't be expanded until the deferred write +operation (so \verb|\c@page| mustn't expand in the previous step +but \verb|\the\c@page| mustn't be converted to \verb|\\the\\c@page| +and \verb|\number\c@page| mustn't be converted to +\verb|\\number\\c@page| etc). +\end{enumerate} +There's a certain amount of trickery needed to deal with this +conflict and the code requires the location to be in a form that +doesn't embed the counter's internal register in commands like +\cs{value}. For example, suppose you have a robust command called +\cs{tallynum} that takes a number as the argument and an expandable +command called \cs{tally} that converts a counter name into the +associated register or number to pass to \cs{tallynum}. Let's +suppose that this command is used to represent the page number: +\begin{verbatim} +\renewcommand{\thepage}{\tally{page}} +\end{verbatim} +Now let's suppose that a term is indexed at the beginning of page~2 +at the end of a paragraph that started on page~1. With \gls{xindy}, +the location \verb|\tally{page}| needs to be written to the file +as \verb|\\tallynum{2}|. If it's written as \verb|\tallynum{2}| then +\gls{xindy} will interpret \verb|\t| as the character \qt{t} +(which means the location would appear as \qt{tallynum2}). So +\sty{glossaries} tries to expand \cs{thepage} without expanding +\cs{c@page} and then escapes all the backslashes, except for the +page counter's internal command. The following definitions of +\cs{tally} will work: +\begin{itemize} +\item In the following, \cs{arabic} works as its internal command \cs{c@arabic} is +temporarily redefined to check for \cs{c@page}: \begin{verbatim} -\documentclass{beamer} - -\usepackage{glossaries} - -\newacronym{svm}{SVM}{support vector machine} - -\begin{document} - -\begin{frame} - \frametitle{Frame 1} - - \begin{itemize} - \item<+-> \gls{svm} - \item<+-> Stuff. - \end{itemize} -\end{frame} - -\end{document} +\newcommand{\tally}[1]{\tallynum{\arabic{#1}}} \end{verbatim} -On the first overlay, \verb|\gls{svm}| produces \qt{support vector -machine (SVM)} and then unsets the \firstuseflag. When the second -overlay is processed, \verb|\gls{svm}| now produces \qt{SVM}, which -is unlikely to be the desired effect. I~don't know anyway around -this and I can only offer two suggestions. - -Firstly, unset all acronyms at the start of the document and -explicitly use \ics{acrfull} when you want the full version to be -displayed: +\item The form \verb|\expandafter\the\csname c@|\meta{counter}\verb|\endcsname| +also works (provided \cs{the} is allowed to be temporarily redefined, +see below): \begin{verbatim} -\documentclass{beamer} - -\usepackage{glossaries} - -\newacronym{svm}{SVM}{support vector machine} - -\glsunsetall - -\begin{document} -\begin{frame} - \frametitle{Frame 1} - - \begin{itemize} - \item<+-> \acrfull{svm} - \item<+-> Stuff. - \end{itemize} -\end{frame} -\end{document} +\newcommand{\tally}[1]{% + \tallynum{\expandafter\the\csname c@#1\endcsname}} \end{verbatim} -Secondly, explicitly reset each acronym on first use: +\item \verb|\expandafter\the\value|\marg{counter} now also works +(with the same condition as above): \begin{verbatim} -\begin{frame} - \frametitle{Frame 1} - - \begin{itemize} - \item<+-> \glsreset{svm}\gls{svm} - \item<+-> Stuff. - \end{itemize} -\end{frame} +\newcommand{\tally}[1]{\tallynum{\expandafter\the\value{#1}}} \end{verbatim} -These are non-optimal, but the \cls{beamer} class is too complex for -me to provide a programmatic solution. Other potentially problematic -environments are some \env{tabular}-like environments (but not -\env{tabular} itself) that process the contents in order to work out -the column widths and then reprocess the contents to do the actual -typesetting. - -The \sty{amsmath} environments, such as \env{align}, also process -their contents multiple times, but the \styfmt{glossaries} package now -checks for this. For \sty{tabularx}, you need to explicitly patch it -by placing \cs{glspatchtabularx} in the preamble (or anywhere -before the problematic use of \envfmt{tabularx}). - -\begin{xtr} -If you need to use commands like \cs{gls} in any problematic context -that interferes with the \gls{firstuseflag}, then you can try using -the buffering system provided with \gls{glossaries-extra}. See the -\qt{First Use Flag} section of the \gls{glossaries-extra} manual. -\end{xtr} - -\section{Counting the Number of Times an Entry has been Used (First Use -Flag Unset)} -\label{sec:enableentrycount} - -As from version 4.14, it's now possible to keep track of how many -times an entry is used. That is, how many times the \firstuseflag\ -is unset. Note that the supplemental \gls{glossaries-extra} package improves -this function and also provides per-unit counting, which isn't -available with the \styfmt{glossaries} package. -\begin{important} -This function is disabled by default as it adds extra -overhead to the document build time and also switches -\ics{newglossaryentry} (and therefore \ics{newacronym}) into -a~preamble-only command. -\end{important} +\item Another variation that will work: +\begin{verbatim} +\newcommand{\tally}[1]{% + \expandafter\tallynum\expandafter{\the\csname c@#1\endcsname}} +\end{verbatim} -To enable this function, use -\begin{definition}[\DescribeMacro\glsenableentrycount] -\cs{glsenableentrycount} +\item and also: +\begin{verbatim} +\newcommand{\tally}[1]{\tallynum{\the\csname c@#1\endcsname}} +\end{verbatim} +\end{itemize} +The following \emph{don't work}: +\begin{itemize} +\item This definition leads to the premature expansion of \cs{c@page} +to \qt{1} when, in this case, it should be \qt{2}: +\begin{verbatim} +\newcommand{\tally}[1]{\tallynum{\the\value{#1}}} +\end{verbatim} +\item This definition leads to \verb|\\c@page| in the glossary file: +\begin{verbatim} +\newcommand{\tally}[1]{\tallynum{\csname c@#1\endcsname}} +\end{verbatim} +\end{itemize} +If you have a numbering system where +\verb|\|\meta{cs name}\verb|{page}| expands to +\verb|\|\meta{internal cs name}\cs{c@page} (for example, if +\verb|\tally{page}| expands to \verb|\tallynum\c@page|) then you +need to use: +\begin{definition}[\DescribeMacro\glsaddprotectedpagefmt] +\cs{glsaddprotectedpagefmt}\marg{internal cs name} \end{definition} -before defining your entries. This adds two extra (internal) fields -to entries: \texttt{currcount} and \texttt{prevcount}. - -The \texttt{currcount} field keeps track of how many times -\cs{glsunset} is used within the document. A~local unset (using -\cs{glslocalunset}) performs a~local rather than global increment to -\texttt{currcount}. Remember that not all commands use -\cs{glsunset}. Only the \glslike\ commands do this. The reset -commands \cs{glsreset} and \cs{glslocalreset} reset this field back -to zero (where \cs{glslocalreset} performs a~local change). +Note that the backslash must be omitted from \meta{internal cs name} +and the corresponding command must be able to process a count +register as the (sole) argument. -The \texttt{prevcount} field stores the final value of the -\texttt{currcount} field \emph{from the previous run}. This value is -read from the \filetype{aux} file at the beginning of the -\env{document} environment. +For example, suppose you have a style \texttt{samplenum} that is +implemented as follows: +\begin{verbatim} + \newcommand*{\samplenum}[1]{% + \expandafter\@samplenum\csname c@#1\endcsname} + \newcommand*{\@samplenum}[1]{\two@digits{#1}} -You can access these fields using -\begin{definition}[\DescribeMacro\glsentrycurrcount] -\cs{glsentrycurrcount}\marg{label} -\end{definition} -for the \texttt{currcount} field, and -\begin{definition}[\DescribeMacro\glsentryprevcount] -\cs{glsentryprevcount}\marg{label} -\end{definition} -for the \texttt{prevcount} field. +\end{verbatim} +(That is, it displays the value of the counter as a two-digit +number.) Then to ensure the location is correct for entries in +page-spanning paragraphs, you need to do: +\begin{verbatim} +\glsaddprotectedpagefmt{@samplenum} +\end{verbatim} +(If you are using a different counter for the location, such as +\texttt{section} or \texttt{equation}, you don't need to worry about +this provided the inner command is expandable.) -\begin{important} -These commands are only defined if you have used \cs{glsenableentrycount}. -\end{important} +If the inner macro (as given by \verb|\|\meta{internal cs name}) contains +non-expandable commands then you may need to redefine +\cs{gls}\meta{internal cs name}\texttt{page} after using +\begin{alltt} +\cs{glsaddprotectedpagefmt}\marg{internal cs name} +\end{alltt} +This command doesn't take any arguments +as \emph{the location is assumed to be given by \cs{c@page}} because +that's the only occasion this command should be used. For example, +suppose now my page counter format uses small caps Roman numerals: +\begin{verbatim} + \newcommand*{\samplenum}[1]{% + \expandafter\@samplenum\csname c@#1\endcsname} + \newcommand*{\@samplenum}[1]{\textsc{\romannumeral#1}} +\end{verbatim} +Again, the inner macro needs to be identified using: +\begin{verbatim} +\glsaddprotectedpagefmt{@samplenum} +\end{verbatim} +However, since \cs{textsc} isn't fully expandable, the location +is written to the file as \verb|\textsc {i}| (for page~1), +\verb|\textsc {ii}| (for page~2), etc. This format may cause a problem for +the \gls{indexingapp} (particularly for \gls{makeindex}). +To compensate for this, the \cs{gls}\meta{internal cs +name}\texttt{page} command may be redefined so that it expands to a +format that's acceptable to the \gls*{indexingapp}. For example: +\begin{verbatim} +\renewcommand*{\gls@samplenumpage}{\romannumeral\c@page} +\end{verbatim} +While this modification means that the \gls{numberlist} in the glossary +won't exactly match the format of the page numbers (displaying +lower case Roman numbers instead of small cap Roman numerals) +this method will at least work correctly for both \gls{makeindex} +and \gls{xindy}. If you are using \gls{xindy}, the following +definition: +\begin{verbatim} + \renewcommand*{\gls@samplenumpage}{% + \glsbackslash\string\textsc{\romannumeral\c@page}} +\end{verbatim} +combined with +\begin{verbatim} +\GlsAddXdyLocation{romansc}{:sep "\string\textsc\glsopenbrace" + "roman-numbers-lowercase" :sep "\glsclosebrace"} +\end{verbatim} +will now have lowercase Roman numerals in the location list +(see \sectionref{sec:xindyloc} for further details on that command). +Take care of the backslashes. The location (which ends up in +the \xindyattr{:locref} attribute) needs \verb|\\| but the location class +(identified with \cs{GlsAddXdyLocation}) just has a single +backslash. Note that this example will cause problems if your +locations should be hyperlinks. -For example: +Another possibility that may work with both \gls{makeindex} and +\gls{xindy} is to redefine \cs{gls}\meta{internal cs +name}\texttt{page} (\cs{gls@samplenumpage} in this example) +to just expand to the decimal page number (\verb|\number\c@page|) and redefine +\ics{glsnumberformat} to change the displayed format: \begin{verbatim} -\documentclass{article} -\usepackage{glossaries} -\makeglossaries +\renewcommand*{\gls@samplenumpage}{\number\c@page} +\renewcommand*{\glsnumberformat}[1]{\textsc{\romannumeral#1}} +\end{verbatim} -\glsenableentrycount +\begin{important} +If you redefine \cs{gls}\meta{internal cs name}\texttt{page}, +you must make sure that \cs{c@page} is expanded when it's written to +the file. (So don't, for example, hide \cs{c@page} inside a robust +command.) +\end{important} -\newglossaryentry{apple}{name=apple,description={a fruit}} +The mechanism that allows this to work temporarily redefines +\ics{the} and \ics{number} while it processes the location. If this +causes a problem you can disallow it using +\begin{definition}[\DescribeMacro\glswrallowprimitivemodsfalse] +\cs{glswrallowprimitivemodsfalse} +\end{definition} +but you will need to find some other way to ensure the location expands +correctly. -\begin{document} -Total usage on previous run: \glsentryprevcount{apple}. +\section{Range Formations} +\label{sec:ranges} -\gls{apple}. \gls{apple}. \glsadd{apple}\glsentrytext{apple}. -\glslink{apple}{apple}. \glsdisp{apple}{apple}. \Gls{apple}. +Both \gls{makeindex} and \gls{xindy} (\optsand23) concatenate a +sequence of~3 or more consecutive pages into~a range. With +\gls*{xindy} (\opt3) you can vary the minimum sequence length using +\ics{GlsSetXdyMinRangeLength}\marg{n} where \meta{n} is either +an integer or the keyword \texttt{none} which indicates that there +should be no range formation (see \sectionref{sec:xindyloc} for +further details). -Number of times apple has been used: \glsentrycurrcount{apple}. -\end{document} -\end{verbatim} -On the first \LaTeX\ run, \verb|\glsentryprevcount{apple}| -produces~0. At the end of the document, -\verb|\glsentrycurrcount{apple}| produces~4. This is because -the only commands that have incremented the entry count are those -that use \cs{glsunset}. That is: \cs{gls}, \cs{glsdisp} and -\cs{Gls}. The other commands used in the above example, \cs{glsadd}, -\cs{glsentrytext} and \cs{glslink}, don't use \cs{glsunset} so they -don't increment the entry count. On the \emph{next} \LaTeX\ run, -\verb|\glsentryprevcount{apple}| now produces~4 as that was the -value of the \texttt{currcount} field for the \texttt{apple} entry -at the end of the document on the previous run. +\begin{important} +Note that \cs{GlsSetXdyMinRangeLength} must be used before +\ics{makeglossaries} and has no effect if \ics{noist} is used. +\end{important} -When you enable the entry count using \cs{glsenableentrycount}, you -also enable the following commands: -\begin{definition}[\DescribeMacro\cgls] -\cs{cgls}\oarg{options}\marg{label}\oarg{insert} -\end{definition} -(no case-change, singular) -\begin{definition}[\DescribeMacro\cglspl] -\cs{cglspl}\oarg{options}\marg{label}\oarg{insert} -\end{definition} -(no case-change, plural) -\begin{definition}[\DescribeMacro\cGls] -\cs{cGls}\oarg{options}\marg{label}\oarg{insert} +With both \gls{makeindex} and \gls{xindy} (\optsand23), you can replace +the separator and the closing number in the range using: +\begin{definition}[\DescribeMacro{\glsSetSuffixF}] +\cs{glsSetSuffixF}\marg{suffix} \end{definition} -(first letter uppercase, singular), and -\begin{definition}[\DescribeMacro\cGlspl] -\cs{cGlspl}\oarg{options}\marg{label}\oarg{insert} +\begin{definition}[\DescribeMacro{\glsSetSuffixFF}] +\cs{glsSetSuffixFF}\marg{suffix} \end{definition} -(first letter uppercase, plural). -These all have plus and starred variants like the analogous -\cs{gls}, \cs{glspl}, \cs{Gls} and \cs{Glspl} commands. +where the former command specifies the suffix to use for a 2 page +list and the latter specifies the suffix to use for longer lists. +For example: +\begin{verbatim} +\glsSetSuffixF{f.} +\glsSetSuffixFF{ff.} +\end{verbatim} +Note that if you use \gls{xindy} (\opt3), you will also need to +set the minimum range length to 1 if you want to change these +suffixes: +\begin{verbatim} +\GlsSetXdyMinRangeLength{1} +\end{verbatim} +Note that if you use the \sty{hyperref} package, you will need +to use \ics{nohyperpage} in the suffix to ensure that the hyperlinks +work correctly. For example: +\begin{verbatim} +\glsSetSuffixF{\nohyperpage{f.}} +\glsSetSuffixFF{\nohyperpage{ff.}} +\end{verbatim} -If you don't use \cs{glsenableentrycount}, these commands behave -like \cs{gls}, \cs{glspl}, \cs{Gls} and \cs{Glspl}, -respectively, only there will be a warning that you haven't enabled -entry counting. If you have enabled entry counting with -\cs{glsenableentrycount} then these commands test if -\cs{glsentryprevcount}\marg{label} equals~1. If it doesn't then the -analogous \cs{gls} etc will be used. If it does, then the first optional -argument will be ignored and -\begin{alltt} -\meta{cs format}\marg{label}\marg{insert}\cs{glsunset}\marg{label} -\end{alltt} -will be performed, where \meta{cs format} is a command that takes -two arguments. The command used depends whether you have used -\cs{cgls}, \cs{cglspl}, \cs{cGls} or \cs{cGlspl}. +\begin{important} +Note that \cs{glsSetSuffixF} and \cs{glsSetSuffixFF} must be used +before \ics{makeglossaries} and have no effect if \ics{noist} is +used. +\end{important} -\begin{definition}[\DescribeMacro\cglsformat] -\cs{cglsformat}\marg{label}\marg{insert} -\end{definition} -This command is used by \cs{cgls} and defaults to -\begin{alltt} -\cs{glsentrylong}\marg{label}\meta{insert} -\end{alltt} -if the entry given by -\meta{label} has a~long form or -\begin{alltt} -\cs{glsentryfirst}\marg{label}\meta{insert} -\end{alltt} -otherwise. +It's also possible to concatenate a sequence of consecutive +locations into a range or have suffixes with \opt4, but with +\gls{bib2gls} these implicit ranges can't be merged with explicit +ranges (created with the \verb|(| and \verb|)| encaps). See +the \gls{bib2gls} manual for further details. -\begin{definition}[\DescribeMacro\cglsplformat] -\cs{cglsplformat}\marg{label}\marg{insert} +\opt1 doesn't form ranges. However, with this option you +can iterate over an entry's \gls{numberlist} using: +\begin{definition}[\DescribeMacro\glsnumberlistloop] +\cs{glsnumberlistloop}\marg{label}\marg{handler cs}\marg{xr handler +cs} \end{definition} -This command is used by \cs{cglspl} and defaults to -\begin{alltt} -\cs{glsentrylongpl}\marg{label}\meta{insert} -\end{alltt} -if the entry given by -\meta{label} has a~long form or -\begin{alltt} -\cs{glsentryfirstplural}\marg{label}\meta{insert} -\end{alltt} -otherwise. - -\begin{definition}[\DescribeMacro\cGlsformat] -\cs{cGlsformat}\marg{label}\marg{insert} +where \meta{label} is the entry's label and \meta{handler cs} is a +handler control sequence of the form: +\begin{definition} +\meta{handler cs}\marg{prefix}\marg{counter}\marg{format}\marg{location} \end{definition} -This command is used by \cs{cGls} and defaults to -\begin{alltt} -\cs{Glsentrylong}\marg{label}\meta{insert} -\end{alltt} -if the entry given by \meta{label} has a~long form or -\begin{alltt} -\cs{Glsentryfirst}\marg{label}\meta{insert} -\end{alltt} -otherwise. - -\begin{definition}[\DescribeMacro\cGlsplformat] -\cs{cGlsplformat}\marg{label}\marg{insert} +where \meta{prefix} is the \sty{hyperref} prefix, \meta{counter} is +the name of the counter used for the location, \meta{format} is the +format used to display the location (e.g.\ \texttt{textbf}) +and \meta{location} is the location. The third argument is the +control sequence to use for any cross-references in the list. This +handler should have the syntax: +\begin{definition} +\meta{xr handler cs}\oarg{tag}\marg{xr list} \end{definition} -This command is used by \cs{cGlspl} and defaults to -\begin{alltt} -\cs{Glsentrylongpl}\marg{label}\meta{insert} -\end{alltt} -if the entry given by \meta{label} has a~long form or -\begin{alltt} -\cs{Glsentryfirstplural}\marg{label}\meta{insert} -\end{alltt} -otherwise. - -This means that if the previous count for the given entry was~1, the -entry won't be hyperlinked with the \cs{cgls}-like commands and they -won't add a~line to the external glossary file. If you haven't used -any of the other commands that add information to glossary file -(such as \cs{glsadd} or the \glstextlike\ commands) then the entry -won't appear in the glossary. - -Remember that since these commands use \cs{glsentryprevcount} you -need to run \LaTeX\ twice to ensure they work correctly. The -document build order is now (at least): \texttt{(pdf)latex}, -\texttt{(pdf)latex}, \texttt{makeglossaries}, \texttt{(pdf)latex}. +where \meta{tag} is the cross-referenced text (e.g.\ \qt{see}) and +\meta{xr list} is a~comma-separated list of labels. (This actually +has a third argument but it's always empty when used with \opt1.) -\begin{example}{Don't index entries that are only used once}{sec:entrycount} -In this example, the abbreviations that have only been used once (on the previous run) -only have their long form shown with \cs{cgls}. +For example, if on page~12 +I~have used \begin{verbatim} -\documentclass{article} - -\usepackage[colorlinks]{hyperref} -\usepackage[acronym]{glossaries} -\makeglossaries - -\glsenableentrycount - -\setacronymstyle{long-short} - -\newacronym{html}{HTML}{hypertext markup language} -\newacronym{css}{CSS}{cascading style sheets} -\newacronym{xml}{XML}{extensible markup language} -\newacronym{sql}{SQL}{structured query language} -\newacronym{rdbms}{RDBMS}{relational database management system} -\newacronym{rdsms}{RDSMS}{relational data stream management system} +\gls[format=textbf]{apple} +\end{verbatim} +and on page~18 I~have used +\begin{verbatim} +\gls[format=emph]{apple} +\end{verbatim} +then +\begin{verbatim} +\glsnumberlistloop{apple}{\myhandler} +\end{verbatim} +will be equivalent to: +\begin{verbatim} +\myhandler{}{page}{textbf}{12}% +\myhandler{}{page}{emph}{18}% +\end{verbatim} +There is a predefined handler that's used to display the +\gls{numberlist} in the glossary: +\begin{definition}[\DescribeMacro\glsnoidxdisplayloc] +\cs{glsnoidxdisplayloc}\marg{prefix}\marg{counter}\marg{format}\marg{location} +\end{definition} +The predefined handler used for the cross-references in the glossary is: +\begin{definition} +\cs{glsseeformat}\oarg{tag}\marg{xr list}\marg{location} +\end{definition} +which is described in \sectionref{sec:customxr}. -\begin{document} -These entries are only used once: \cgls{sql}, \cgls{rdbms}, -\cgls{xml}. These entries are used multiple times: -\cgls{html}, \cgls{html}, \cgls{css}, \cgls{css}, \cgls{css}, -\cgls{rdsms}, \cgls{rdsms}. +\begin{important} +\cs{glsnumberlistloop} is not available for \optsand23. +\end{important} -\printglossaries -\end{document} -\end{verbatim} -After a complete document build (\texttt{latex}, \texttt{latex}, -\texttt{makeglossaries}, \texttt{latex}) the list of abbrevaitions only -includes the entries HTML, CSS and RDSMS. The entries SQL, RDBMS and -XML -only have their long forms displayed and don't have a~hyperlink. -\end{example} +\section{Style Hook} +\label{sec:isthook} -Remember that if you don't like typing \cs{cgls} you can create a -synonym. For example +As from version 4.24, there's a hook that's used near the end of +\ics{writeist} before the file is closed. You can set the code +to be performed then using: +\begin{definition}[\DescribeMacro\GlsSetWriteIstHook] +\cs{GlsSetWriteIstHook}\marg{code} +\end{definition} +If you want the \meta{code} to write any information to the +file, you need to use +\begin{definition}[\DescribeMacro\glswrite] +\cs{write}\cs{glswrite}\marg{style information} +\end{definition} +Make sure you use the correct format within \meta{style +information}. For example, if you are using \app{makeindex}: \begin{verbatim} -\let\ac\cgls +\GlsSetWriteIstHook{% + \write\glswrite{page_precedence "arnAR"}% + \write\glswrite{line_max 80}% +} \end{verbatim} +This changes the page type precedence\index{page type precedence|main} and the maximum line length +used by \app{makeindex}. -\begin{bib2gls} -With \gls{bib2gls} there's an analogous record counting set of -commands. See \gls{glossaries-extra} and \gls{bib2gls} manuals for further details. -\end{bib2gls} +Remember that if you switch to \app{xindy}, this will no longer be +valid code. \chapter{Glossary Styles} \label{sec:styles} @@ -11867,7 +11708,7 @@ with a number of pre-defined glossary styles, described in best suits your type of glossary or, if none of them suit your document, you can defined your own style (see \sectionref{sec:newglossarystyle}). There are some examples -of glossary styles available at \gallerytopic{glossaries}. +of glossary styles available at the \gallerytopic{glossaries}. The glossary style can be set using the \gloskey[printglossary]{style} key in the optional argument to \ics{printnoidxglossary} (\opt1) or \ics{printglossary} @@ -11904,9 +11745,9 @@ of available styles in \tableref{tab:styles}. You can view samples of all the predefined styles at \galleryurl{glossaries-styles/}. Note that \gls{glossaries-extra} provides additional styles -in the supplementary packages \sty{glossary-bookindex} and -\sty{glossary-longnoloc}. See the \gls{glossaries-extra} manual for -further details. +in the supplementary packages \sty{glossary-bookindex}, +\sty{glossary-topic} and \sty{glossary-longextra}. See the +\gls{glossaries-extra} manual for further details. \begin{important} Note that the group styles (such as \glostyle{listgroup}) will @@ -12463,874 +12304,1443 @@ width of the second column is governed by the length \ics{glsdescwidth}. The width of the third column is governed by the length \ics{glspagelistwidth}. -\item[super3colborder] The \glostyle{super3colborder} style is like -the \glostyle{super3col} style but has horizontal and vertical -lines around it. +\item[super3colborder] The \glostyle{super3colborder} style is like +the \glostyle{super3col} style but has horizontal and vertical +lines around it. + +\item[super3colheader] The \glostyle{super3colheader} style is like +\glostyle{super3col} but has a header row. + +\item[super3colheaderborder] The \glostyle{super3colheaderborder} style +is like the \glostyle{super3colheader} style but has horizontal and vertical +lines around it. + +\item[super4col] The \glostyle{super4col} style is like +\glostyle{super3col} but has an additional column in which the +entry's associated symbol appears. This style is designed for +entries with brief single line descriptions. The column widths are governed by the +widest entry in the given column. Use \glostyle{altsuper4col} +for multi-line descriptions. + +\item[super4colborder] The \glostyle{super4colborder} style is like +the \glostyle{super4col} style but has horizontal and vertical +lines around it. + +\item[super4colheader] The \glostyle{super4colheader} style is like +\glostyle{super4col} but has a header row. + +\item[super4colheaderborder] The \glostyle{super4colheaderborder} style +is like the \glostyle{super4colheader} style but has horizontal and vertical +lines around it. + +\item[altsuper4col] The \glostyle{altsuper4col} style is like +\glostyle{super4col} but allows multi-line descriptions and page +lists. +The width of the description column is governed by the length +\ics{glsdescwidth} and the width of the page list column is +governed by the length \ics{glspagelistwidth}. The width of the name +and symbol columns is governed by the widest entry in the +given column. + +\item[altsuper4colborder] The \glostyle{altsuper4colborder} style is like +the \glostyle{super4colborder} style but allows multi-line descriptions +and page lists. + +\item[altsuper4colheader] The \glostyle{altsuper4colheader} style is like +\glostyle{super4colheader} but allows multi-line descriptions and +page lists. + +\item[altsuper4colheaderborder] The \glostyle{altsuper4colheaderborder} +style is like \glostyle{super4colheaderborder} but allows multi-line +descriptions and page lists. +\end{description} + + +\subsection{Supertabular Styles (Ragged Right)} +\label{sec:superraggedstyles} + +The styles described in this section are all defined in the package +\sty{glossary-superragged}. These styles are analogous to those +defined in \sty{glossary-super} but the multiline columns are left +justified instead of fully justified. Since these styles all use the +\env{supertabular} environment, they are governed by the same +parameters as that environment. The \sty{glossary-superragged} +package additionally requires the \sty{array} package. Note that +these styles will only be available if you explicitly load +\sty{glossary-superragged}: +\begin{verbatim} +\usepackage{glossaries} +\usepackage{glossary-superragged} +\end{verbatim} +Note that you can't set these styles using the \pkgopt{style} +package option since the styles aren't defined until after +the \styfmt{glossaries} package has been loaded. + +\begin{description} +\item[superragged] The \glostyle{superragged} style uses the +\env{supertabular} environment (defined by the +\sty{supertabular} package). It has two columns: the first column +contains the entry's name and the second column contains the (left +justified) description followed by the \gls{numberlist}. The +entry's symbol is ignored. Sub groups are separated with a blank +row. The width of the first column is governed by the widest entry +in that column. The width of the second column is governed by the +length \ics{glsdescwidth}. Child entries have a similar format to +the parent entries except that their name is suppressed. + +\item[superraggedborder] The \glostyle{superraggedborder} style is +like \glostyle{superragged} but has horizontal and vertical lines +around it. + +\item[superraggedheader] The \glostyle{superraggedheader} style is +like \glostyle{superragged} but has a header row. + +\item[superraggedheaderborder] The +\glostyle{superraggedheaderborder} style is like +\glostyle{superraggedheader} but has horizontal and vertical lines +around it. + +\item[superragged3col] The \glostyle{superragged3col} style is like +\glostyle{superragged} but has three columns. The first column +contains the entry's name, the second column contains the (left +justified) description and the third column contains the (left +justified) \gls{numberlist}. The entry's symbol is ignored. The +width of the first column is governed by the widest entry in that +column. The width of the second column is governed by the length +\ics{glsdescwidth}. The width of the third column is governed by the +length \ics{glspagelistwidth}. + +\item[superragged3colborder] The \glostyle{superragged3colborder} +style is like the \glostyle{superragged3col} style but has +horizontal and vertical lines around it. + +\item[superragged3colheader] The \glostyle{superragged3colheader} +style is like \glostyle{superragged3col} but has a header row. + +\item[superragged3colheaderborder] The +\glostyle{superragged3colheaderborder} style is like +the above but has horizontal and vertical +lines around it. + +\item[altsuperragged4col] The \glostyle{altsuperragged4col} style is +like \glostyle{superragged3col} but has an additional column in +which the entry's associated symbol appears. The column widths for +the name and symbol column are governed by the widest entry in the +given column. + +\item[altsuperragged4colborder] The +\glostyle{altsuperragged4colborder} style is like the +\glostyle{altsuperragged4col} style but has horizontal and vertical +lines around it. + +\item[altsuperragged4colheader] The +\glostyle{altsuperragged4colheader} style is like +\glostyle{altsuperragged4col} but has a header row. + +\item[altsuperragged4colheaderborder] The +\glostyle{altsuperragged4colheaderborder} style is like +the above but has horizontal and vertical +lines around it. + +\end{description} + +\subsection{Tree-Like Styles} +\label{sec:treestyles} + +The styles described in this section are all defined in the package +\sty{glossary-tree}. These styles are designed for hierarchical +glossaries but can also be used with glossaries that don't have +sub-entries. These styles will display the entry's symbol if it +exists. Note that these styles will automatically be available +unless you use the \pkgopt{notree} or \pkgopt{nostyles} package +options. + +These styles all format the entry name using: +\begin{definition}[\DescribeMacro\glstreenamefmt] +\cs{glstreenamefmt}\marg{name} +\end{definition} +This defaults to \cs{textbf}\marg{name}, but note that \meta{name} +includes \ics{glsnamefont} so the bold setting in \cs{glstreenamefont} +may be counteracted by another font change in \cs{glsnamefont} (or +in \cs{acronymfont}). The tree-like styles that also display the +header use +\begin{definition}[\DescribeMacro\glstreegroupheaderfmt] +\cs{glstreegroupheaderfmt}\marg{text} +\end{definition} +to format the heading. This defaults to +\cs{glstreenamefmt}\marg{text}. The tree-like styles that display +navigation links to the groups (such as \glostyle{indexhypergroup}), format +the navigation line using +\begin{definition}[\DescribeMacro\glstreenavigationfmt] +\cs{glstreenavigationfmt}\marg{text} +\end{definition} +which defaults to \cs{glstreenamefmt}\marg{text}. + +Note that this is +different from \cs{glslistnavigationitem}, provided with the styles +such as \glostyle{listhypergroup}, as that also includes \cs{item}. + +With the exception of the \glostyle{alttree} style (and those +derived from it), the space before the description for top-level +entries is produced with +\begin{definition}[\DescribeMacro\glstreepredesc] +\cs{glstreepredesc} +\end{definition} +This defaults to \cs{space}. + +With the exception of the \glostyle{treenoname} and +\glostyle{alttree} styles (and those derived from them), the +space before the description for child +entries is produced with +\begin{definition}[\DescribeMacro\glstreechildpredesc] +\cs{glstreechildpredesc} +\end{definition} +This defaults to \cs{space}. + +\begin{important} +Most of these styles are not designed for multi-paragraph +descriptions. (The \glostyle{tree} style isn't too bad for +multi-paragraph top-level entry descriptions, or you can use the +\glostyle{index} style with the adjustment shown below.) +\end{important} + +\begin{description} +\item[index] The \glostyle{index} style is similar to the way +indices are usually formatted in that it has a hierarchical +structure up to three levels (the main level plus two sub-levels). +The name is typeset in bold, and if the symbol is present it is set +in parentheses after the name and before the description. +Sub-entries are indented and also include the name, the symbol +in brackets (if present) and the description. Groups are separated +using \ics{indexspace}. + +Each main level item is started with +\begin{definition}[\DescribeMacro\glstreeitem] +\cs{glstreeitem} +\end{definition} +The level~1 entries are started with +\begin{definition}[\DescribeMacro\glstreesubitem] +\cs{glstreesubitem} +\end{definition} + +The level~2 entries are started with +\begin{definition}[\DescribeMacro\glstreesubsubitem] +\cs{glstreesubsubitem} +\end{definition} + +Note that the \glostyle{index} style automatically sets +\begin{verbatim} +\let\item\glstreeitem +\let\subitem\glstreesubitem +\let\subsubitem\glstreesubsubitem +\end{verbatim} +at the start of the glossary for backward compatibility. + +The \glostyle{index} style isn't suitable for multi-paragraph +descriptions, but this limitation can be overcome by redefining +the above commands. For example: +\begin{verbatim} +\renewcommand{\glstreeitem}{% + \parindent0pt\par\hangindent40pt + \everypar{\parindent50pt\hangindent40pt}} +\end{verbatim} -\item[super3colheader] The \glostyle{super3colheader} style is like -\glostyle{super3col} but has a header row. +\item[indexgroup] The \glostyle{indexgroup} style is similar to +the \glostyle{index} style except that each group has a heading +obtained using \cs{glsgetgrouptitle}\marg{label}, +which is described in \sectionref{sec:newglossarystyle}. -\item[super3colheaderborder] The \glostyle{super3colheaderborder} style -is like the \glostyle{super3colheader} style but has horizontal and vertical -lines around it. +\item[indexhypergroup] The \glostyle{indexhypergroup} style is like +\glostyle{indexgroup} but has a set of links to the glossary +groups. The navigation line is the same as that for +\glostyle{listhypergroup}, described above, but is formatted using +\cs{glstreenavigationfmt}. -\item[super4col] The \glostyle{super4col} style is like -\glostyle{super3col} but has an additional column in which the -entry's associated symbol appears. This style is designed for -entries with brief single line descriptions. The column widths are governed by the -widest entry in the given column. Use \glostyle{altsuper4col} -for multi-line descriptions. +\item[tree] The \glostyle{tree} style is similar to the +\glostyle{index} style except that it can have arbitrary levels. +(Note that \gls{makeindex} is limited to three levels, so +you will need to use \gls{xindy} if you want more than +three levels.) Each sub-level is indented by +\DescribeMacro{\glstreeindent}\cs{glstreeindent}. Note that the +name, symbol (if present) and description are placed in the +same paragraph block. If you want the name to be apart from the +description, use the \glostyle{alttree} style instead. (See below.) -\item[super4colborder] The \glostyle{super4colborder} style is like -the \glostyle{super4col} style but has horizontal and vertical -lines around it. +\item[treegroup] The \glostyle{treegroup} style is similar to +the \glostyle{tree} style except that each group has a heading. -\item[super4colheader] The \glostyle{super4colheader} style is like -\glostyle{super4col} but has a header row. +\item[treehypergroup] The \glostyle{treehypergroup} style is like +\glostyle{treegroup} but has a set of links to the glossary +groups. The navigation line is the same as that for +\glostyle{listhypergroup}, described above, but is formatted using +\cs{glstreenavigationfmt}. -\item[super4colheaderborder] The \glostyle{super4colheaderborder} style -is like the \glostyle{super4colheader} style but has horizontal and vertical -lines around it. +\item[treenoname] The \glostyle{treenoname} style is like +the \glostyle{tree} style except that the name for each sub-entry +is ignored. -\item[altsuper4col] The \glostyle{altsuper4col} style is like -\glostyle{super4col} but allows multi-line descriptions and page -lists. -The width of the description column is governed by the length -\ics{glsdescwidth} and the width of the page list column is -governed by the length \ics{glspagelistwidth}. The width of the name -and symbol columns is governed by the widest entry in the -given column. +\item[treenonamegroup] The \glostyle{treenonamegroup} style is +similar to the \glostyle{treenoname} style except that each group +has a heading. -\item[altsuper4colborder] The \glostyle{altsuper4colborder} style is like -the \glostyle{super4colborder} style but allows multi-line descriptions -and page lists. +\item[treenonamehypergroup] The \glostyle{treenonamehypergroup} +style is like \glostyle{treenonamegroup} but has a set of links to +the glossary groups. The navigation line is the same as that for +\glostyle{listhypergroup}, described above, but is formatted using +\cs{glstreenavigationfmt}. -\item[altsuper4colheader] The \glostyle{altsuper4colheader} style is like -\glostyle{super4colheader} but allows multi-line descriptions and -page lists. +\item[alttree] The \glostyle{alttree} style is similar to the +\glostyle{tree} style except that the indentation for each level +is determined by the width of the text specified by +\begin{definition}[\DescribeMacro{\glssetwidest}] +\cs{glssetwidest}\oarg{level}\marg{text} +\end{definition} +The optional argument \meta{level} indicates the level, where +0 indicates the top-most level, 1 indicates the first level +sub-entries, etc. If \cs{glssetwidest} hasn't been used for a +given sub-level, the level~0 widest text is used instead. If +\meta{level} is omitted, 0 is assumed. -\item[altsuper4colheaderborder] The \glostyle{altsuper4colheaderborder} -style is like \glostyle{super4colheaderborder} but allows multi-line -descriptions and page lists. -\end{description} +As from v4.22, the \sty{glossary-tree} package also provides +\begin{definition}[\DescribeMacro\glsfindwidesttoplevelname] +\cs{glsfindwidesttoplevelname}\oarg{glossary list} +\end{definition} +This iterates over all parentless entries in the given glossary +lists and determines the widest entry. If the optional argument is +omitted, all glossaries are assumed (as per \cs{forallglossaries}). +For example, to have the same name width for all glossaries: +\begin{verbatim} +\glsfindwidesttoplevelname +\setglossarystyle{alttree} +\printglossaries +\end{verbatim} +Alternatively, to compute the widest entry for each glossary +before it's displayed: +\begin{verbatim} +\renewcommand{\glossarypreamble}{% + \glsfindwidesttoplevelname[\currentglossary]} +\setglossarystyle{alttree} +\printglossaries +\end{verbatim} -\subsection{Supertabular Styles (Ragged Right)} -\label{sec:superraggedstyles} +\begin{important} +These commands only affects the \glostyle{alttree} styles, including those +listed below and the ones in the \sty{glossary-mcols} package. +If you forget to set the widest entry name, the description will +overwrite the name. +\end{important} -The styles described in this section are all defined in the package -\sty{glossary-superragged}. These styles are analogous to those -defined in \sty{glossary-super} but the multiline columns are left -justified instead of fully justified. Since these styles all use the -\env{supertabular} environment, they are governed by the same -parameters as that environment. The \sty{glossary-superragged} -package additionally requires the \sty{array} package. Note that -these styles will only be available if you explicitly load -\sty{glossary-superragged}: +For each level, the name is placed to the left of the paragraph +block containing the symbol (optional) and the description. If the +symbol is present, it is placed in parentheses before the +description. + +The name is placed inside a left-aligned \cs{makebox}. As from +v4.19, this can now be adjusted by redefining +\begin{definition}[\DescribeMacro\glstreenamebox] +\cs{glstreenamebox}\marg{width}\marg{text} +\end{definition} +where \meta{width} is the width of the box and \meta{text} is the +contents of the box. For example, to make the name right-aligned: \begin{verbatim} -\usepackage{glossaries} -\usepackage{glossary-superragged} +\renewcommand*{\glstreenamebox}[2]{% + \makebox[#1][r]{#2}% +} \end{verbatim} -Note that you can't set these styles using the \pkgopt{style} -package option since the styles aren't defined until after -the \styfmt{glossaries} package has been loaded. -\begin{description} -\item[superragged] The \glostyle{superragged} style uses the -\env{supertabular} environment (defined by the -\sty{supertabular} package). It has two columns: the first column -contains the entry's name and the second column contains the (left -justified) description followed by the \gls{numberlist}. The -entry's symbol is ignored. Sub groups are separated with a blank -row. The width of the first column is governed by the widest entry -in that column. The width of the second column is governed by the -length \ics{glsdescwidth}. Child entries have a similar format to -the parent entries except that their name is suppressed. +\item[alttreegroup] The \glostyle{alttreegroup} is like the +\glostyle{alttree} style except that each group has a heading. -\item[superraggedborder] The \glostyle{superraggedborder} style is -like \glostyle{superragged} but has horizontal and vertical lines -around it. +\item[alttreehypergroup] The \glostyle{alttreehypergroup} style is +like \glostyle{alttreegroup} but has a set of links to the glossary +groups. The navigation line is the same as that for +\glostyle{listhypergroup}, described above. -\item[superraggedheader] The \glostyle{superraggedheader} style is -like \glostyle{superragged} but has a header row. +\end{description} -\item[superraggedheaderborder] The -\glostyle{superraggedheaderborder} style is like -\glostyle{superraggedheader} but has horizontal and vertical lines -around it. +\subsection{Multicols Style} +\label{sec:mcolstyles} -\item[superragged3col] The \glostyle{superragged3col} style is like -\glostyle{superragged} but has three columns. The first column -contains the entry's name, the second column contains the (left -justified) description and the third column contains the (left -justified) \gls{numberlist}. The entry's symbol is ignored. The -width of the first column is governed by the widest entry in that -column. The width of the second column is governed by the length -\ics{glsdescwidth}. The width of the third column is governed by the -length \ics{glspagelistwidth}. +The \sty{glossary-mcols} package provides tree-like styles that are +in the \env{multicols} environment (defined by the \sty{multicol} +package). The style names are as their analogous tree styles (as +defined in \sectionref{sec:treestyles}) but are prefixed with +\qt{mcol}. +For example, the \glostyle{mcolindex} style is essentially the +\glostyle{index} style but put in a \env{multicols} environment. +For the complete list, see \tableref{tab:mcols}. The +\sty{glossary-tree} package is automatically loaded by +\sty{glossary-mcols} (even if the \pkgopt{notree} package option is +used when loading \styfmt{glossaries}). The formatting commands +\cs{glstreenamefmt}, \cs{glstreegroupheaderfmt} and +\cs{glstreenavigationfmt} are all used by the corresponding +\sty{glossary-mcols} styles. -\item[superragged3colborder] The \glostyle{superragged3colborder} -style is like the \glostyle{superragged3col} style but has -horizontal and vertical lines around it. +\begin{important} +Note that \sty{glossary-mcols} is not loaded by \styfmt{glossaries}. If +you want to use any of the multicol styles in that package you need +to load it explicitly with \cs{usepackage} and set the required glossary +style using \ics{setglossarystyle}. +\end{important} -\item[superragged3colheader] The \glostyle{superragged3colheader} -style is like \glostyle{superragged3col} but has a header row. +The default number of columns is 2, but can be changed by redefining +\begin{definition}[\DescribeMacro{\glsmcols}] +\cs{glsmcols} +\end{definition} +to the required number. For example, for a three column glossary: +\begin{verbatim} +\usepackage{glossary-mcols} +\renewcommand*{\glsmcols}{3} +\setglossarystyle{mcolindex} +\end{verbatim} -\item[superragged3colheaderborder] The -\glostyle{superragged3colheaderborder} style is like -the above but has horizontal and vertical -lines around it. +\begin{table}[htbp] +\caption{Multicolumn Styles} +\label{tab:mcols} +\centering +\begin{tabular}{ll} +\bfseries +\sty{glossary-mcols} Style & +\bfseries +Analogous Tree Style\\ +\glostyle{mcolindex} & \glostyle{index}\\ +\glostyle{mcolindexgroup} & \glostyle{indexgroup}\\ +\glostyle{mcolindexhypergroup} or \glostyle{mcolindexspannav} & \glostyle{indexhypergroup}\\ +\glostyle{mcoltree} & \glostyle{tree}\\ +\glostyle{mcoltreegroup} & \glostyle{treegroup}\\ +\glostyle{mcoltreehypergroup} or \glostyle{mcoltreespannav} & \glostyle{treehypergroup}\\ +\glostyle{mcoltreenoname} & \glostyle{treenoname}\\ +\glostyle{mcoltreenonamegroup} & \glostyle{treenonamegroup}\\ +\glostyle{mcoltreenonamehypergroup} or +\glostyle{mcoltreenonamespannav} & \glostyle{treenonamehypergroup}\\ +\glostyle{mcolalttree} & \glostyle{alttree}\\ +\glostyle{mcolalttreegroup} & \glostyle{alttreegroup}\\ +\glostyle{mcolalttreehypergroup} or \glostyle{mcolalttreespannav} & \glostyle{alttreehypergroup} +\end{tabular} +\end{table} -\item[altsuperragged4col] The \glostyle{altsuperragged4col} style is -like \glostyle{superragged3col} but has an additional column in -which the entry's associated symbol appears. The column widths for -the name and symbol column are governed by the widest entry in the -given column. +The styles with a navigation line, such as +\glostyle{mcoltreehypergroup}, now have a variant (as from v4.22) +with \qt{hypergroup} replaced with \qt{spannav} in the style name. +The original \qt{hypergroup} styles place the navigation line at the +start of the first column. The newer \qt{spannav} styles put the +navigation line in the optional argument of the \env{multicols} +environment so that it spans across all the columns. -\item[altsuperragged4colborder] The -\glostyle{altsuperragged4colborder} style is like the -\glostyle{altsuperragged4col} style but has horizontal and vertical -lines around it. +\subsection{In-Line Style} +\label{sec:inline} -\item[altsuperragged4colheader] The -\glostyle{altsuperragged4colheader} style is like -\glostyle{altsuperragged4col} but has a header row. +This section covers the \sty{glossary-inline} package that supplies +the \glostyle{inline} style. This is a style that is designed for +in-line use (as opposed to block styles, such as lists or tables). +This style doesn't display the \gls{numberlist}. -\item[altsuperragged4colheaderborder] The -\glostyle{altsuperragged4colheaderborder} style is like -the above but has horizontal and vertical -lines around it. +You will most likely need to redefine \ics{glossarysection} with +this style. For example, suppose you are required to have your +glossaries and list of acronyms in a footnote, you can do: +\begin{verbatim} + \usepackage{glossary-inline} -\end{description} + \renewcommand*{\glossarysection}[2][]{\textbf{#1}: } + \setglossarystyle{inline} +\end{verbatim} -\subsection{Tree-Like Styles} -\label{sec:treestyles} +\begin{important} +Note that you need to include \sty{glossary-inline} with +\cs{usepackage} as it's not automatically included by the +\styfmt{glossaries} package and then set the style using +\ics{setglossarystyle}. +\end{important} -The styles described in this section are all defined in the package -\sty{glossary-tree}. These styles are designed for hierarchical -glossaries but can also be used with glossaries that don't have -sub-entries. These styles will display the entry's symbol if it -exists. Note that these styles will automatically be available -unless you use the \pkgopt{notree} or \pkgopt{nostyles} package -options. +Where you need to include your glossaries as a footnote you can do: +\begin{verbatim} +\footnote{\printglossaries} +\end{verbatim} -These styles all format the entry name using: -\begin{definition}[\DescribeMacro\glstreenamefmt] -\cs{glstreenamefmt}\marg{name} +The \glostyle{inline} style is governed by the following: +\begin{definition}[\DescribeMacro{\glsinlineseparator}] +\ics{glsinlineseparator} \end{definition} -This defaults to \cs{textbf}\marg{name}, but note that \meta{name} -includes \ics{glsnamefont} so the bold setting in \cs{glstreenamefont} -may be counteracted by another font change in \cs{glsnamefont} (or -in \cs{acronymfont}). The tree-like styles that also display the -header use -\begin{definition}[\DescribeMacro\glstreegroupheaderfmt] -\cs{glstreegroupheaderfmt}\marg{text} +This defaults to \qt{\texttt{\glsinlineseparator}} and is used between +main (i.e.\ level~0) entries. +\begin{definition}[\DescribeMacro{\glsinlinesubseparator}] +\ics{glsinlinesubseparator} \end{definition} -to format the heading. This defaults to -\cs{glstreenamefmt}\marg{text}. The tree-like styles that display -navigation links to the groups (such as \glostyle{indexhypergroup}), format -the navigation line using -\begin{definition}[\DescribeMacro\glstreenavigationfmt] -\cs{glstreenavigationfmt}\marg{text} +This defaults to \qt{\texttt{\glsinlinesubseparator}} and is used between +sub-entries. +\begin{definition}[\DescribeMacro{\glsinlineparentchildseparator}] +\ics{glsinlineparentchildseparator} \end{definition} -which defaults to \cs{glstreenamefmt}\marg{text}. - -Note that this is -different from \cs{glslistnavigationitem}, provided with the styles -such as \glostyle{listhypergroup}, as that also includes \cs{item}. +This defaults to \qt{\texttt{\glsinlineparentchildseparator}} and is used between +a parent main entry and its first sub-entry. +\begin{definition}[\DescribeMacro{\glspostinline}] +\ics{glspostinline} +\end{definition} +This defaults to \qt{\texttt{\glsinlineseparator}} and is used at the end +of the glossary. +\begin{definition}[\DescribeMacro\glsinlinenameformat] +\cs{glsinlinenameformat}\marg{label}\marg{name} +\end{definition} +This is used to format the entry name and defaults to +\cs{glstarget}\marg{label}\marg{name}, where \meta{name} is provided +in the form \cs{glossentryname}\marg{label} and \meta{label} is the +entry's label. For example, if you want the name to appear in +\gls{smallcaps}: +\begin{verbatim} +\renewcommand*{\glsinlinenameformat}[2]{\glstarget{#1}{\textsc{#2}}} +\end{verbatim} +Sub-entry names are formatted according to +\begin{definition}[\DescribeMacro\glsinlinesubnameformat] +\cs{glsinlinesubnameformat}\marg{label}\marg{name} +\end{definition} +This defaults to \cs{glstarget}\marg{label}\verb|{}| so the +sub-entry name is ignored. -With the exception of the \glostyle{alttree} style (and those -derived from it), the space before the description for top-level -entries is produced with -\begin{definition}[\DescribeMacro\glstreepredesc] -\cs{glstreepredesc} +If the description has been suppressed (according to +\cs{ifglsdescsuppressed}) then +\begin{definition}[\DescribeMacro\glsinlineemptydescformat] +\cs{glsinlineemptydescformat}\marg{symbol}\marg{number list} \end{definition} -This defaults to \cs{space}. +(which defaults to nothing) is used, +otherwise the description is formatted according to +\begin{definition}[\DescribeMacro\glsinlinedescformat] +\cs{glsinlinedescformat}\marg{description}\marg{symbol}\marg{number +list} +\end{definition} +This defaults to just \cs{space}\meta{description} so the symbol and +location list are ignored. If the description is missing (according +to \cs{ifglshasdesc}), then \cs{glsinlineemptydescformat} is used +instead. -With the exception of the \glostyle{treenoname} and -\glostyle{alttree} styles (and those derived from them), the -space before the description for child -entries is produced with -\begin{definition}[\DescribeMacro\glstreechildpredesc] -\cs{glstreechildpredesc} +For example, if you want a colon between the name and the +description: +\begin{verbatim} +\renewcommand*{\glsinlinedescformat}[3]{: #1} +\end{verbatim} + +The sub-entry description is formatted according to: +\begin{definition}[\DescribeMacro\glsinlinesubdescformat] +\cs{glsinlinesubdescformat}\marg{description}\marg{symbol}\marg{number +list} \end{definition} -This defaults to \cs{space}. +This defaults to just \meta{description}. + +\section{Defining your own glossary style} +\label{sec:newglossarystyle} \begin{important} -Most of these styles are not designed for multi-paragraph -descriptions. (The \glostyle{tree} style isn't too bad for -multi-paragraph top-level entry descriptions, or you can use the -\glostyle{index} style with the adjustment shown below.) +Commands like \cs{printglossary} are designed to produce content in +the PDF. If your intention is to design a style that doesn't print +any content (for example, to simply capture information) then you +are likely to experience unwanted side-effects. If you just want to +capture indexing information (such as locations) then a much better +approach is to use \gls{bib2gls}, which automatically stores this +information in dedicated fields when the entry is defined. \end{important} -\begin{description} -\item[index] The \glostyle{index} style is similar to the way -indices are usually formatted in that it has a hierarchical -structure up to three levels (the main level plus two sub-levels). -The name is typeset in bold, and if the symbol is present it is set -in parentheses after the name and before the description. -Sub-entries are indented and also include the name, the symbol -in brackets (if present) and the description. Groups are separated -using \ics{indexspace}. - -Each main level item is started with -\begin{definition}[\DescribeMacro\glstreeitem] -\cs{glstreeitem} -\end{definition} -The level~1 entries are started with -\begin{definition}[\DescribeMacro\glstreesubitem] -\cs{glstreesubitem} +If the predefined styles don't fit your requirements, you can +define your own style using: +\begin{definition}[\DescribeMacro{\newglossarystyle}] +\cs{newglossarystyle}\marg{name}\marg{definitions} \end{definition} +where \meta{name} is the name of the new glossary style (to be +used in \cs{setglossarystyle}). The second argument \meta{definitions} +needs to redefine all of the following: -The level~2 entries are started with -\begin{definition}[\DescribeMacro\glstreesubsubitem] -\cs{glstreesubsubitem} +\begin{definition}[\DescribeEnv{theglossary}] +\env{theglossary} \end{definition} +This environment defines how the main body of the glossary should +be typeset. -Note that the \glostyle{index} style automatically sets -\begin{verbatim} -\let\item\glstreeitem -\let\subitem\glstreesubitem -\let\subsubitem\glstreesubsubitem -\end{verbatim} -at the start of the glossary for backward compatibility. +Note that this does not include the section heading, +the glossary preamble (defined by \ics{glossarypreamble}) or the +glossary postamble (defined by \ics{glossarypostamble}). For example, +the \glostyle{list} style uses the \env{description} environment, +so the \env{theglossary} environment is simply redefined to begin +and end the \env{description} environment. -The \glostyle{index} style isn't suitable for multi-paragraph -descriptions, but this limitation can be overcome by redefining -the above commands. For example: -\begin{verbatim} -\renewcommand{\glstreeitem}{% - \parindent0pt\par\hangindent40pt - \everypar{\parindent50pt\hangindent40pt}} -\end{verbatim} +\begin{definition}[\DescribeMacro{\glossaryheader}] +\cs{glossaryheader} +\end{definition} +This macro indicates what to do at the start of the main body +of the glossary. Note that this is not the same as +\ics{glossarypreamble}, which should not be affected by changes in +the glossary style. The \glostyle{list} glossary style redefines +\ics{glossaryheader} to do nothing, whereas the \glostyle{longheader} +glossary style redefines \cs{glossaryheader} to do a header row. -\item[indexgroup] The \glostyle{indexgroup} style is similar to -the \glostyle{index} style except that each group has a heading -obtained using \cs{glsgetgrouptitle}\marg{label}, -which is described in \sectionref{sec:newglossarystyle}. +\begin{definition}[\DescribeMacro{\glsgroupheading}] +\cs{glsgroupheading}\marg{label} +\end{definition} +This macro indicates +what to do at the start of each logical block within the main body +of the glossary. If you use \gls{makeindex} the glossary is +sub-divided into a maximum of twenty-eight logical blocks that are +determined by the first character of the \gloskey{sort} key (or +\gloskey{name} key if the \gloskey{sort} key is omitted). The +sub-divisions are in the following order: symbols, numbers, A, +\ldots, Z\@. If you use \gls{xindy}, the sub-divisions depend on +the language settings. -\item[indexhypergroup] The \glostyle{indexhypergroup} style is like -\glostyle{indexgroup} but has a set of links to the glossary -groups. The navigation line is the same as that for -\glostyle{listhypergroup}, described above, but is formatted using -\cs{glstreenavigationfmt}. +Note that the argument to \cs{glsgroupheading} +is a label \emph{not} the group title. The group title can be obtained +via +\begin{definition}[\DescribeMacro{\glsgetgrouptitle}] +\cs{glsgetgrouptitle}\marg{label} +\end{definition} +This obtains the title as follows: if \meta{label} consists of a +single non-active character or \meta{label} is equal to +\texttt{glssymbols} or \texttt{glsnumbers} and +\cs{}\meta{label}\texttt{groupname} exists, this is taken to be the +title, otherwise the title is just \meta{label}. (The \qt{symbols} +group has the label \texttt{glssymbols}, so the command +\ics{glssymbolsgroupname} is used, and the \qt{numbers} group has the +label \texttt{glsnumbers}, so the command \ics{glsnumbersgrouptitle} +is used.) If you are using \gls{xindy}, \meta{label} may be an +active character (for example \o), in which case the title will be +set to just \meta{label}. You can redefine \cs{glsgetgrouptitle} if +this is unsuitable for your document. -\item[tree] The \glostyle{tree} style is similar to the -\glostyle{index} style except that it can have arbitrary levels. -(Note that \gls{makeindex} is limited to three levels, so -you will need to use \gls{xindy} if you want more than -three levels.) Each sub-level is indented by -\DescribeMacro{\glstreeindent}\cs{glstreeindent}. Note that the -name, symbol (if present) and description are placed in the -same paragraph block. If you want the name to be apart from the -description, use the \glostyle{alttree} style instead. (See below.) +A navigation hypertarget can be created using +\begin{definition}[\DescribeMacro{\glsnavhypertarget}] +\cs{glsnavhypertarget}\marg{label}\marg{text} +\end{definition} +This typically requires \cs{glossaryheader} to be redefined to use +\begin{definition}[\DescribeMacro\glsnavigation] +\cs{glsnavigation} +\end{definition} +which displays the navigation line. -\item[treegroup] The \glostyle{treegroup} style is similar to -the \glostyle{tree} style except that each group has a heading. +For further details about \cs{glsnavhypertarget}, see +\ifpdf section~\ref*{sec:code:hypernav} in \fi the documented code +(\texttt{glossaries-code.pdf}). -\item[treehypergroup] The \glostyle{treehypergroup} style is like -\glostyle{treegroup} but has a set of links to the glossary -groups. The navigation line is the same as that for -\glostyle{listhypergroup}, described above, but is formatted using -\cs{glstreenavigationfmt}. +Most of the predefined glossary styles redefine \cs{glsgroupheading} +to simply ignore its argument. The \glostyle{listhypergroup} style +redefines \cs{glsgroupheading} as follows: +\begin{verbatim} +\renewcommand*{\glsgroupheading}[1]{% +\item[\glsnavhypertarget{##1}{\glsgetgrouptitle{##1}}]} +\end{verbatim} +See also \cs{glsgroupskip} below. -\item[treenoname] The \glostyle{treenoname} style is like -the \glostyle{tree} style except that the name for each sub-entry -is ignored. +Note that command definitions within +\ics{newglossarystyle} must use \verb|##1| instead of \verb|#1| etc. -\item[treenonamegroup] The \glostyle{treenonamegroup} style is -similar to the \glostyle{treenoname} style except that each group -has a heading. +\begin{definition}[\DescribeMacro{\glsgroupskip}] +\cs{glsgroupskip} +\end{definition} +This macro determines what to do after one logical group but before +the header for the next logical group. The \glostyle{list} glossary +style simply redefines \cs{glsgroupskip} to be \ics{indexspace}, +whereas the tabular-like styles redefine \cs{glsgroupskip} to +produce a blank row. -\item[treenonamehypergroup] The \glostyle{treenonamehypergroup} -style is like \glostyle{treenonamegroup} but has a set of links to -the glossary groups. The navigation line is the same as that for -\glostyle{listhypergroup}, described above, but is formatted using -\cs{glstreenavigationfmt}. +As from version 3.03, the package option \pkgopt{nogroupskip} can be +used to suppress this default gap for the predefined styles. -\item[alttree] The \glostyle{alttree} style is similar to the -\glostyle{tree} style except that the indentation for each level -is determined by the width of the text specified by -\begin{definition}[\DescribeMacro{\glssetwidest}] -\cs{glssetwidest}\oarg{level}\marg{text} +\begin{definition}[\DescribeMacro{\glossentry}] +\cs{glossentry}\marg{label}\marg{number list} \end{definition} -The optional argument \meta{level} indicates the level, where -0 indicates the top-most level, 1 indicates the first level -sub-entries, etc. If \cs{glssetwidest} hasn't been used for a -given sub-level, the level~0 widest text is used instead. If -\meta{level} is omitted, 0 is assumed. +This macro indicates what to do for each top-level (level~0) glossary entry. +The entry label is given by \meta{label} and the associated +\gls{numberlist} is given by \meta{number list}. You can redefine +\ics{glossentry} to use commands like \ics{glossentryname}\marg{label}, +\ics{glossentrydesc}\marg{label} and \ics{glossentrysymbol}\marg{label} +to display the name, description and symbol fields, or to access +other fields, use commands like \ics{glsentryuseri}\marg{label}. +(See \sectionref{sec:glsnolink} for further details.) You can also +use the following commands: -As from v4.22, the \sty{glossary-tree} package also provides -\begin{definition}[\DescribeMacro\glsfindwidesttoplevelname] -\cs{glsfindwidesttoplevelname}\oarg{glossary list} +\begin{definition}[\DescribeMacro{\glsentryitem}] +\cs{glsentryitem}\marg{label} +\end{definition} +This macro will increment and display the associated counter for the +main (level~0) entries if the \pkgopt{entrycounter} or +\pkgopt{counterwithin} package options have been used. This macro +is typically called by \cs{glossentry} before \cs{glstarget}. +The format of the counter is controlled by the macro +\begin{definition}[\DescribeMacro{\glsentrycounterlabel}] +\cs{glsentrycounterlabel} \end{definition} -This iterates over all parentless entries in the given glossary -lists and determines the widest entry. If the optional argument is -omitted, all glossaries are assumed (as per \cs{forallglossaries}). -For example, to have the same name width for all glossaries: -\begin{verbatim} -\glsfindwidesttoplevelname -\setglossarystyle{alttree} -\printglossaries -\end{verbatim} -Alternatively, to compute the widest entry for each glossary -before it's displayed: +Each time you use a glossary entry it creates a hyperlink (if +hyperlinks are enabled) to the relevant line in the glossary. +Your new glossary style must therefore redefine +\cs{glossentry} to set the appropriate target. This +is done using +\begin{definition}[\DescribeMacro{\glstarget}] +\cs{glstarget}\marg{label}\marg{text} +\end{definition} +where \meta{label} is the entry's label. Note that you +don't need to worry about whether the \sty{hyperref} package has +been loaded, as \cs{glstarget} won't create a target if +\cs{hypertarget} hasn't been defined. + +For example, the \glostyle{list} style defines \cs{glossentry} as follows: \begin{verbatim} -\renewcommand{\glossarypreamble}{% - \glsfindwidesttoplevelname[\currentglossary]} -\setglossarystyle{alttree} -\printglossaries + \renewcommand*{\glossentry}[2]{% + \item[\glsentryitem{##1}% + \glstarget{##1}{\glossentryname{##1}}] + \glossentrydesc{##1}\glspostdescription\space ##2} \end{verbatim} -\begin{important} -These commands only affects the \glostyle{alttree} styles, including those -listed below and the ones in the \sty{glossary-mcols} package. -If you forget to set the widest entry name, the description will -overwrite the name. -\end{important} +Note also that \meta{number list} will always be of the form +\begin{definition} +\ics{glossaryentrynumbers}\{\cs{relax}\\ +\ics{setentrycounter}\oarg{Hprefix}\marg{counter name}\meta{format cmd}\marg{number(s)}\} +\end{definition} +where \meta{number(s)} +may contain \ics{delimN} (to delimit individual numbers) and/or +\ics{delimR} (to indicate a range of numbers). There may be +multiple occurrences of +\ics{setentrycounter}\oarg{Hprefix}\marg{counter name}\meta{format cmd}\marg{number(s)}, but note +that the entire number list is enclosed within the argument +of \ics{glossaryentrynumbers}. The user can redefine this to change +the way the entire number list is formatted, regardless of +the glossary style. However the most common use of +\ics{glossaryentrynumbers} is to provide a means of suppressing the +number list altogether. (In fact, the \pkgopt{nonumberlist} option +redefines \ics{glossaryentrynumbers} to ignore its argument.) +Therefore, when you define a new glossary style, you don't need +to worry about whether the user has specified the +\pkgopt{nonumberlist} package option. -For each level, the name is placed to the left of the paragraph -block containing the symbol (optional) and the description. If the -symbol is present, it is placed in parentheses before the -description. +\begin{definition}[\DescribeMacro{\subglossentry}] +\cs{subglossentry}\marg{level}\marg{label}\marg{number list} +\end{definition} +This is used to display sub-entries. +The first argument, \meta{level}, indicates the sub-entry level. +This must be an integer from 1 (first sub-level) onwards. The +remaining arguments are analogous to those for +\ics{glossentry} described above. -The name is placed inside a left-aligned \cs{makebox}. As from -v4.19, this can now be adjusted by redefining -\begin{definition}[\DescribeMacro\glstreenamebox] -\cs{glstreenamebox}\marg{width}\marg{text} +\begin{definition}[\DescribeMacro{\glssubentryitem}] +\cs{glssubentryitem}\marg{label} +\end{definition} +This macro will increment and display the associated counter for the +level~1 entries if the \pkgopt{subentrycounter} package option has +been used. This macro is typically called by \cs{subglossentry} +before \ics{glstarget}. The format of the counter is controlled by +the macro +\begin{definition}[\DescribeMacro{\glssubentrycounterlabel}] +\cs{glssubentrycounterlabel} \end{definition} -where \meta{width} is the width of the box and \meta{text} is the -contents of the box. For example, to make the name right-aligned: -\begin{verbatim} -\renewcommand*{\glstreenamebox}[2]{% - \makebox[#1][r]{#2}% -} -\end{verbatim} -\item[alttreegroup] The \glostyle{alttreegroup} is like the -\glostyle{alttree} style except that each group has a heading. +Note that \ics{printglossary} (which \ics{printglossaries} calls) +sets +\begin{definition}[\DescribeMacro{\currentglossary}] +\cs{currentglossary} +\end{definition} +to the current glossary label, so it's possible to create a glossary +style that varies according to the glossary type. -\item[alttreehypergroup] The \glostyle{alttreehypergroup} style is -like \glostyle{alttreegroup} but has a set of links to the glossary -groups. The navigation line is the same as that for -\glostyle{listhypergroup}, described above. +For further details of these commands, see \ifpdf +section~\ref*{sec:code:printglos} \fi \qt{Displaying the glossary} +in the documented code (\texttt{glossaries-code.pdf}). -\end{description} +\begin{example}{Creating a completely new style}{sec:exnewstyle} -\subsection{Multicols Style} -\label{sec:mcolstyles} +If you want a completely new style, you will need to redefine all +of the commands and the environment listed above. -The \sty{glossary-mcols} package provides tree-like styles that are -in the \env{multicols} environment (defined by the \sty{multicol} -package). The style names are as their analogous tree styles (as -defined in \sectionref{sec:treestyles}) but are prefixed with -\qt{mcol}. -For example, the \glostyle{mcolindex} style is essentially the -\glostyle{index} style but put in a \env{multicols} environment. -For the complete list, see \tableref{tab:mcols}. The -\sty{glossary-tree} package is automatically loaded by -\sty{glossary-mcols} (even if the \pkgopt{notree} package option is -used when loading \styfmt{glossaries}). The formatting commands -\cs{glstreenamefmt}, \cs{glstreegroupheaderfmt} and -\cs{glstreenavigationfmt} are all used by the corresponding -\sty{glossary-mcols} styles. +For example, suppose you want each entry to start with a bullet point. +This means that the glossary should be placed in the \env{itemize} +environment, so \env{theglossary} should start and end that +environment. Let's also suppose that you don't want anything between +the glossary groups (so \ics{glsgroupheading} and \ics{glsgroupskip} +should do nothing) and suppose you don't want anything to appear +immediately after \verb|\begin{theglossary}| (so \ics{glossaryheader} +should do nothing). In addition, let's suppose the symbol should +appear in brackets after the name, followed by the description and +last of all the \gls{numberlist} should appear within square brackets +at the end. Then you can create this new glossary style, called, say, +\texttt{mylist}, as follows: +\begin{verbatim} + \newglossarystyle{mylist}{% + % put the glossary in the itemize environment: + \renewenvironment{theglossary}% + {\begin{itemize}}{\end{itemize}}% + % have nothing after \begin{theglossary}: + \renewcommand*{\glossaryheader}{}% + % have nothing between glossary groups: + \renewcommand*{\glsgroupheading}[1]{}% + \renewcommand*{\glsgroupskip}{}% + % set how each entry should appear: + \renewcommand*{\glossentry}[2]{% + \item % bullet point + \glstarget{##1}{\glossentryname{##1}}% the entry name + \space (\glossentrysymbol{##1})% the symbol in brackets + \space \glossentrydesc{##1}% the description + \space [##2]% the number list in square brackets + }% + % set how sub-entries appear: + \renewcommand*{\subglossentry}[3]{% + \glossentry{##2}{##3}}% + } +\end{verbatim} +Note that this style creates a flat glossary, where sub-entries +are displayed in exactly the same way as the top level entries. +It also hasn't used \ics{glsentryitem} or \ics{glssubentryitem} so +it won't be affected by the \pkgopt{entrycounter}, +\pkgopt{counterwithin} or \pkgopt{subentrycounter} package options. -\begin{important} -Note that \sty{glossary-mcols} is not loaded by \styfmt{glossaries}. If -you want to use any of the multicol styles in that package you need -to load it explicitly with \cs{usepackage} and set the required glossary -style using \ics{setglossarystyle}. -\end{important} +Variations: +\begin{itemize} +\item You might want the entry name to be capitalised, in +which case use \ics{Glossentryname} instead of \ics{glossentryname}. -The default number of columns is 2, but can be changed by redefining -\begin{definition}[\DescribeMacro{\glsmcols}] -\cs{glsmcols} -\end{definition} -to the required number. For example, for a three column glossary: +\item You might want to check if the symbol hasn't been set and omit +the parentheses if the symbol is absent. In this case you can use +\ics{ifglshassymbol} (see \sectionref{sec:utilities}): \begin{verbatim} -\usepackage{glossary-mcols} -\renewcommand*{\glsmcols}{3} -\setglossarystyle{mcolindex} + \renewcommand*{\glossentry}[2]{% + \item % bullet point + \glstarget{##1}{\glossentryname{##1}}% the entry name + \ifglshassymbol{##1}% check if symbol exists + {% + \space (\glossentrysymbol{##1})% the symbol in brackets + }% + {}% no symbol so do nothing + \space \glossentrydesc{##1}% the description + \space [##2]% the number list in square brackets + }% \end{verbatim} +\end{itemize} +\end{example} -\begin{table}[htbp] -\caption{Multicolumn Styles} -\label{tab:mcols} -\centering -\begin{tabular}{ll} -\bfseries -\sty{glossary-mcols} Style & -\bfseries -Analogous Tree Style\\ -\glostyle{mcolindex} & \glostyle{index}\\ -\glostyle{mcolindexgroup} & \glostyle{indexgroup}\\ -\glostyle{mcolindexhypergroup} or \glostyle{mcolindexspannav} & \glostyle{indexhypergroup}\\ -\glostyle{mcoltree} & \glostyle{tree}\\ -\glostyle{mcoltreegroup} & \glostyle{treegroup}\\ -\glostyle{mcoltreehypergroup} or \glostyle{mcoltreespannav} & \glostyle{treehypergroup}\\ -\glostyle{mcoltreenoname} & \glostyle{treenoname}\\ -\glostyle{mcoltreenonamegroup} & \glostyle{treenonamegroup}\\ -\glostyle{mcoltreenonamehypergroup} or -\glostyle{mcoltreenonamespannav} & \glostyle{treenonamehypergroup}\\ -\glostyle{mcolalttree} & \glostyle{alttree}\\ -\glostyle{mcolalttreegroup} & \glostyle{alttreegroup}\\ -\glostyle{mcolalttreehypergroup} or \glostyle{mcolalttreespannav} & \glostyle{alttreehypergroup} -\end{tabular} -\end{table} - -The styles with a navigation line, such as -\glostyle{mcoltreehypergroup}, now have a variant (as from v4.22) -with \qt{hypergroup} replaced with \qt{spannav} in the style name. -The original \qt{hypergroup} styles place the navigation line at the -start of the first column. The newer \qt{spannav} styles put the -navigation line in the optional argument of the \env{multicols} -environment so that it spans across all the columns. +\begin{example}{Creating a new glossary style based on an +existing style}{sec:exadaptstyle} -\subsection{In-Line Style} -\label{sec:inline} +If you want to define a new style that is a slightly modified +version of an existing style, you can use \ics{setglossarystyle} +within the second argument of \ics{newglossarystyle} followed by +whatever alterations you require. For example, suppose you want +a style like the \glostyle{list} style but you don't want the extra +vertical space created by \ics{indexspace} between groups, then you +can create a new glossary style called, say, \texttt{mylist} as +follows: +\begin{verbatim} +\newglossarystyle{mylist}{% +\setglossarystyle{list}% base this style on the list style +\renewcommand{\glsgroupskip}{}% make nothing happen + % between groups +} +\end{verbatim} +(In this case, you can actually achieve the same effect using the +\glostyle{list} style in combination with the package option +\pkgopt{nogroupskip}.) +\end{example} -This section covers the \sty{glossary-inline} package that supplies -the \glostyle{inline} style. This is a style that is designed for -in-line use (as opposed to block styles, such as lists or tables). -This style doesn't display the \gls{numberlist}. +\begin{example}{Example: creating a glossary style that uses the +\texorpdfstring{\gloskey{user1}}{user1}, \ldots, +\texorpdfstring{\gloskey{user6}}{user6} keys}{sec:exuserstyle} -You will most likely need to redefine \ics{glossarysection} with -this style. For example, suppose you are required to have your -glossaries and list of acronyms in a footnote, you can do: +Suppose each entry not only has an associated symbol, +but also units (stored in \gloskey{user1}) and dimension +(stored in \gloskey{user2}). Then you can define a glossary style +that displays each entry in a \env{longtable} as follows: \begin{verbatim} - \usepackage{glossary-inline} - - \renewcommand*{\glossarysection}[2][]{\textbf{#1}: } - \setglossarystyle{inline} +\newglossarystyle{long6col}{% + % put the glossary in a longtable environment: + \renewenvironment{theglossary}% + {\begin{longtable}{lp{\glsdescwidth}cccp{\glspagelistwidth}}}% + {\end{longtable}}% + % Set the table's header: + \renewcommand*{\glossaryheader}{% + \bfseries Term & \bfseries Description & \bfseries Symbol & + \bfseries Units & \bfseries Dimensions & \bfseries Page List + \\\endhead}% + % No heading between groups: + \renewcommand*{\glsgroupheading}[1]{}% + % Main (level 0) entries displayed in a row optionally numbered: + \renewcommand*{\glossentry}[2]{% + \glsentryitem{##1}% Entry number if required + \glstarget{##1}{\glossentryname{##1}}% Name + & \glossentrydesc{##1}% Description + & \glossentrysymbol{##1}% Symbol + & \glsentryuseri{##1}% Units + & \glsentryuserii{##1}% Dimensions + & ##2% Page list + \tabularnewline % end of row + }% + % Similarly for sub-entries (no sub-entry numbers): + \renewcommand*{\subglossentry}[3]{% + % ignoring first argument (sub-level) + \glstarget{##2}{\glossentryname{##2}}% Name + & \glossentrydesc{##2}% Description + & \glossentrysymbol{##2}% Symbol + & \glsentryuseri{##2}% Units + & \glsentryuserii{##2}% Dimensions + & ##3% Page list + \tabularnewline % end of row + }% + % Nothing between groups: + \renewcommand*{\glsgroupskip}{}% +} \end{verbatim} +\end{example} -\begin{important} -Note that you need to include \sty{glossary-inline} with -\cs{usepackage} as it's not automatically included by the -\styfmt{glossaries} package and then set the style using -\ics{setglossarystyle}. -\end{important} +\chapter[Xindy (Option 3)]{Xindy (\ifpdf\opt3\else Option 3\fi)} +\label{sec:xindy} -Where you need to include your glossaries as a footnote you can do: +If you want to use \gls{xindy} to sort the glossary, you +must use the package option \pkgopt{xindy}: \begin{verbatim} -\footnote{\printglossaries} +\usepackage[xindy]{glossaries} \end{verbatim} +This ensures that the glossary information is written in +\gls*{xindy} syntax. -The \glostyle{inline} style is governed by the following: -\begin{definition}[\DescribeMacro{\glsinlineseparator}] -\ics{glsinlineseparator} +\sectionref{sec:makeglossaries} covers how to use the external +\gls{indexingapp}, and \sectionref{sec:locationsyntax} covers the +issues involved in the location syntax. This section covers the +commands provided by the \styfmt{glossaries} package that allow you +to adjust the \gls{xindy} style file (\filetype{xdy}) and +parameters. + +To assist writing information to the \gls{xindy} style +file, the \styfmt{glossaries} package provides the following +commands: +\begin{definition}[\DescribeMacro{\glsopenbrace}] +\cs{glsopenbrace} \end{definition} -This defaults to \qt{\texttt{\glsinlineseparator}} and is used between -main (i.e.\ level~0) entries. -\begin{definition}[\DescribeMacro{\glsinlinesubseparator}] -\ics{glsinlinesubseparator} +\begin{definition}[\DescribeMacro{\glsclosebrace}] +\cs{glsclosebrace} \end{definition} -This defaults to \qt{\texttt{\glsinlinesubseparator}} and is used between -sub-entries. -\begin{definition}[\DescribeMacro{\glsinlineparentchildseparator}] -\ics{glsinlineparentchildseparator} +which produce an open and closing brace. (This is needed because +\verb|\{| and \verb|\}| don't expand to a simple brace character +when written to a file.) Similarly, you can write a percent +character using: +\begin{definition}[\DescribeMacro{\glspercentchar}] +\cs{glspercentchar} \end{definition} -This defaults to \qt{\texttt{\glsinlineparentchildseparator}} and is used between -a parent main entry and its first sub-entry. -\begin{definition}[\DescribeMacro{\glspostinline}] -\ics{glspostinline} +and a tilde character using: +\begin{definition}[\DescribeMacro{\glstildechar}] +\cs{glstildechar} \end{definition} -This defaults to \qt{\texttt{\glsinlineseparator}} and is used at the end -of the glossary. -\begin{definition}[\DescribeMacro\glsinlinenameformat] -\cs{glsinlinenameformat}\marg{label}\marg{name} +For example, a newline character is specified in a \gls{xindy} style +file using \verb|~n| so you can use \texttt{\cs{glstildechar} n} +to write this correctly (or you can do \verb|\string~n|). +A backslash can be written to a file using +\begin{definition}[\DescribeMacro{\glsbackslash}] +\cs{glsbackslash} +\end{definition} + +In addition, if you are using a package that makes the double +quote character active (e.g. \sty{ngerman}) you can use: +\begin{definition}[\DescribeMacro{\glsquote}] +\cs{glsquote}\marg{text} +\end{definition} +which will produce \verb|"|\meta{text}\verb|"|. Alternatively, +you can use \verb|\string"| to write the double-quote character. +This document assumes that the double quote character has not been +made active, so the examples just use \verb|"| for clarity. + +If you want greater control over the \gls{xindy} style file than is +available through the \LaTeX\ commands provided by the +\styfmt{glossaries} package, you will need to edit the \gls*{xindy} +style file. In which case, you must use \ics{noist} to prevent the +style file from being overwritten by the \styfmt{glossaries} +package. For additional information about \gls*{xindy}, read the +\gls*{xindy} documentation. I'm sorry I can't provide any assistance +with writing \gls*{xindy} style files. If you need help, I recommend +you ask on the \gls*{xindy} mailing list +(\url{http://xindy.sourceforge.net/mailing-list.html}). + +\section{Language and Encodings} +\label{sec:langenc} + +When you use \gls{xindy}, you need to specify the language +and encoding used (unless you have written your own custom +\gls*{xindy} style file that defines the relevant alphabet +and sort rules). If you use \gls{makeglossaries}, +this information is obtained from the document's auxiliary +(\filetype{aux}) file. The \gls{makeglossaries} script attempts to +find the root language given your document settings, but in the +event that it gets it wrong or if \gls*{xindy} doesn't support +that language, then you can specify the required language using: +\begin{definition}[\DescribeMacro{\GlsSetXdyLanguage}] +\cs{GlsSetXdyLanguage}\oarg{glossary type}\marg{language} +\end{definition} +where \meta{language} is the name of the language. The +optional argument can be used if you have multiple glossaries +in different languages. If \meta{glossary type} is omitted, it +will be applied to all glossaries, otherwise the language +setting will only be applied to the glossary given by +\meta{glossary type}. + +If the \sty{inputenc} package is used, the encoding will be +obtained from the value of \ics{inputencodingname}. +Alternatively, you can specify the encoding using: +\begin{definition}[\DescribeMacro{\GlsSetXdyCodePage}] +\cs{GlsSetXdyCodePage}\marg{code} \end{definition} -This is used to format the entry name and defaults to -\cs{glstarget}\marg{label}\marg{name}, where \meta{name} is provided -in the form \cs{glossentryname}\marg{label} and \meta{label} is the -entry's label. For example, if you want the name to appear in -\gls{smallcaps}: +where \meta{code} is the name of the encoding. For example: \begin{verbatim} -\renewcommand*{\glsinlinenameformat}[2]{\glstarget{#1}{\textsc{#2}}} +\GlsSetXdyCodePage{utf8} \end{verbatim} -Sub-entry names are formatted according to -\begin{definition}[\DescribeMacro\glsinlinesubnameformat] -\cs{glsinlinesubnameformat}\marg{label}\marg{name} -\end{definition} -This defaults to \cs{glstarget}\marg{label}\verb|{}| so the -sub-entry name is ignored. -If the description has been suppressed (according to -\cs{ifglsdescsuppressed}) then -\begin{definition}[\DescribeMacro\glsinlineemptydescformat] -\cs{glsinlineemptydescformat}\marg{symbol}\marg{number list} -\end{definition} -(which defaults to nothing) is used, -otherwise the description is formatted according to -\begin{definition}[\DescribeMacro\glsinlinedescformat] -\cs{glsinlinedescformat}\marg{description}\marg{symbol}\marg{number -list} -\end{definition} -This defaults to just \cs{space}\meta{description} so the symbol and -location list are ignored. If the description is missing (according -to \cs{ifglshasdesc}), then \cs{glsinlineemptydescformat} is used -instead. +Note that you can also specify the language and encoding using +the package option +\verb|xindy={language=|\meta{lang}\verb|,codepage=|\meta{code}\verb|}|. +For example: +\begin{verbatim} +\usepackage[xindy={language=english,codepage=utf8}]{glossaries} +\end{verbatim} -For example, if you want a colon between the name and the -description: +If you write your own custom \gls{xindy} style file that +includes the language settings, you need to set the language +to nothing: \begin{verbatim} -\renewcommand*{\glsinlinedescformat}[3]{: #1} +\GlsSetXdyLanguage{} \end{verbatim} +(and remember to use \ics{noist} to prevent the style file from +being overwritten). -The sub-entry description is formatted according to: -\begin{definition}[\DescribeMacro\glsinlinesubdescformat] -\cs{glsinlinesubdescformat}\marg{description}\marg{symbol}\marg{number -list} -\end{definition} -This defaults to just \meta{description}. +\begin{important} +The commands \cs{GlsSetXdyLanguage} and \cs{GlsSetXdyCodePage} +have no effect if you don't use \gls{makeglossaries}. If +you call \gls{xindy} without \gls*{makeglossaries} you +need to remember to set the language and encoding using the +\xdyopt{L} and \xdyopt{C} switches. +\end{important} -\section{Defining your own glossary style} -\label{sec:newglossarystyle} +\section{Locations and Number lists} +\label{sec:xindyloc} -If the predefined styles don't fit your requirements, you can -define your own style using: -\begin{definition}[\DescribeMacro{\newglossarystyle}] -\cs{newglossarystyle}\marg{name}\marg{definitions} +If you use \pkgopt{xindy}, the \styfmt{glossaries} package needs to +know which counters you will be using in the \gls{numberlist} in order to correctly format the \gls{xindy} style +file. Counters specified using the \pkgopt{counter} package option +or the \meta{counter} option of \ics{newglossary} are +automatically taken care of, but if you plan to use a different +counter in the \gloskey[glslink]{counter} key for commands like +\ics{glslink}, then you need to identify these counters \emph{before} +\ics{makeglossaries} using: +\begin{definition}[\DescribeMacro{\GlsAddXdyCounters}] +\cs{GlsAddXdyCounters}\marg{counter list} \end{definition} -where \meta{name} is the name of the new glossary style (to be -used in \cs{setglossarystyle}). The second argument \meta{definitions} -needs to redefine all of the following: +where \meta{counter list} is a comma-separated list of counter names. -\begin{definition}[\DescribeEnv{theglossary}] -\env{theglossary} +The most likely \ixindyattrs attributes used in the \gloskey[glslink]{format} +key (\locfmt{textrm}, \locfmt{hyperrm} etc) are automatically added +to the \gls{xindy} style file, but if you want to use another +attribute, you need to add it using: +\begin{definition}[\DescribeMacro{\GlsAddXdyAttribute}] +\cs{GlsAddXdyAttribute}\marg{name} \end{definition} -This environment defines how the main body of the glossary should -be typeset. +where \meta{name} is the name of the attribute, as used in +the \gloskey[glslink]{format} key. -Note that this does not include the section heading, -the glossary preamble (defined by \ics{glossarypreamble}) or the -glossary postamble (defined by \ics{glossarypostamble}). For example, -the \glostyle{list} style uses the \env{description} environment, -so the \env{theglossary} environment is simply redefined to begin -and end the \env{description} environment. +Take care if you have multiple instances of the same location with +different formats. The duplicate locations will be discarded +according to the order in which the \ixindyattrs attributes are listed. Consider +defining semantic commands to use for primary references. For +example: +\begin{verbatim} +\newcommand*{\primary}[1]{\textbf{#1}} +\GlsAddXdyAttribute{primary} +\end{verbatim} +Then in the document: +\begin{verbatim} +A \gls[format=primary]{duck} is an aquatic bird. +There are lots of different types of \gls{duck}. +\end{verbatim} +This will give the \verb|format=primary| instance preference over +the next use that doesn't use the \gloskey[glslink]{format} key. -\begin{definition}[\DescribeMacro{\glossaryheader}] -\cs{glossaryheader} -\end{definition} -This macro indicates what to do at the start of the main body -of the glossary. Note that this is not the same as -\ics{glossarypreamble}, which should not be affected by changes in -the glossary style. The \glostyle{list} glossary style redefines -\ics{glossaryheader} to do nothing, whereas the \glostyle{longheader} -glossary style redefines \cs{glossaryheader} to do a header row. +\begin{example}{Custom Font for Displaying a Location}{ex:hyperbfit} +Suppose I want a bold, italic, hyperlinked location. I first need to define a +command that will do this: +\begin{verbatim} +\newcommand*{\hyperbfit}[1]{\textit{\hyperbf{#1}}} +\end{verbatim} +but with \gls{xindy}, I also need to add this as an allowed +\ixindyattrs attribute: +\begin{verbatim} +\GlsAddXdyAttribute{hyperbfit} +\end{verbatim} +Now I can use it in the optional argument of commands like +\ics{gls}: +\begin{verbatim} +Here is a \gls[format=hyperbfit]{sample} entry. +\end{verbatim} +(where \texttt{sample} is the label of the required entry). +\end{example} -\begin{definition}[\DescribeMacro{\glsgroupheading}] -\cs{glsgroupheading}\marg{label} +\begin{important} +Note that \cs{GlsAddXdyAttribute} has no effect if \ics{noist} is +used or if \ics{makeglossaries} is omitted. +\cs{GlsAddXdyAttribute} must be used before \ics{makeglossaries}. +Additionally, \cs{GlsAddXdyCounters} must come before +\cs{GlsAddXdyAttribute}. +\end{important} + +If the location numbers include formatting commands, then +you need to add a location style in the appropriate format using +\begin{definition}[\DescribeMacro{\GlsAddXdyLocation}] +\cs{GlsAddXdyLocation}\oarg{prefix-location}\marg{name}\marg{definition} \end{definition} -This macro indicates -what to do at the start of each logical block within the main body -of the glossary. If you use \gls{makeindex} the glossary is -sub-divided into a maximum of twenty-eight logical blocks that are -determined by the first character of the \gloskey{sort} key (or -\gloskey{name} key if the \gloskey{sort} key is omitted). The -sub-divisions are in the following order: symbols, numbers, A, -\ldots, Z\@. If you use \gls{xindy}, the sub-divisions depend on -the language settings. +where \meta{name} is the name of the format and \meta{definition} is +the \gls{xindy} definition. The optional argument \meta{prefix-location} +is needed if \cs{theH}\meta{counter} either isn't defined or is +different from \cs{the}\meta{counter}. +Be sure to also read \sectionref{sec:locationsyntax} for some issues +that you may encounter. + +\begin{important} +Note that \cs{GlsAddXdyLocation} has no effect if \ics{noist} is +used or if \ics{makeglossaries} is omitted. +\cs{GlsAddXdyLocation} must be used before \ics{makeglossaries}. +\end{important} + +\begin{example}{Custom Numbering System for Locations}{ex:customloc} +Suppose I decide to use a somewhat eccentric numbering +system for sections where I redefine \cs{thesection} as follows: +\begin{verbatim} +\renewcommand*{\thesection}{[\thechapter]\arabic{section}} +\end{verbatim} +If I haven't done "counter=section" in the package +option, I need to specify that the counter will be used as a +location number: +\begin{verbatim} +\GlsAddXdyCounters{section} +\end{verbatim} +Next I need to add the location style (\cs{thechapter} is assumed to +be the standard \verb"\arabic{chapter}"): +\begin{verbatim} +\GlsAddXdyLocation{section}{:sep "[" "arabic-numbers" :sep "]" + "arabic-numbers" +} +\end{verbatim} +Note that if I have further decided to use the \sty{hyperref} +package and want to redefine \cs{theHsection} as: +\begin{verbatim} +\renewcommand*{\theHsection}{\thepart.\thesection} +\renewcommand*{\thepart}{\Roman{part}} +\end{verbatim} +then I need to modify the \cs{GlsAddXdyLocation} code above to: +\begin{verbatim} +\GlsAddXdyLocation["roman-numbers-uppercase"]{section}{:sep "[" + "arabic-numbers" :sep "]" "arabic-numbers" +} +\end{verbatim} +Since \ics{Roman} will result in an empty string if the counter is +zero, it's a good idea to add an extra location to catch this: +\begin{verbatim} +\GlsAddXdyLocation{zero.section}{:sep "[" + "arabic-numbers" :sep "]" "arabic-numbers" +} +\end{verbatim} +This example is illustrated in the sample file +\samplefile{xdy2}. +\end{example} + +\begin{example}{Locations as Dice}{ex:dice} +Suppose I want a rather eccentric page numbering system that's +represented by the number of dots on dice. The \sty{stix} package +provides \cs{dicei}, \ldots, \cs{dicevi} that represent the six +sides of a die. I can define a command that takes a number as its +argument. If the number is less than seven, the appropriate +\cs{dice}\meta{n} command is used otherwise it does \cs{dicevi} the +required number of times with the leftover in a final +\cs{dice}\meta{n}. For example, the number 16 is represented by +\verb|\dicevi\dicevi\diceiv| ($6+6+4=16$). I've called this command +\cs{tallynum} to match the example given earlier in +\sectionref{sec:locationsyntax}: +\begin{verbatim} +\newrobustcmd{\tallynum}[1]{% + \ifnum\number#1<7 + $\csname dice\romannumeral#1\endcsname$% + \else + $\dicevi$% + \expandafter\tallynum\expandafter{\numexpr#1-6}% + \fi +} +\end{verbatim} +Here's the counter command: +\begin{verbatim} +newcommand{\tally}[1]{\tallynum{\arabic{#1}}} +\end{verbatim} +The \ctr{page} counter representation (\cs{thepage}) needs to be +changed to use this command: +\begin{verbatim} +\renewcommand*{\thepage}{\tally{page}} +\end{verbatim} +The \cs{tally} command expands to \cs{tallynum} \marg{number} so +this needs a location class that matches this format: +\begin{verbatim} +\GlsAddXdyLocation{tally}{% + :sep "\string\tallynum\space\glsopenbrace" + "arabic-numbers" + :sep "\glsclosebrace" +} +\end{verbatim} +The space between \cs{tallynum} and \marg{number} is +significant to \gls{xindy} so \cs{space} is required. -Note that the argument to \cs{glsgroupheading} -is a label \emph{not} the group title. The group title can be obtained -via -\begin{definition}[\DescribeMacro{\glsgetgrouptitle}] -\cs{glsgetgrouptitle}\marg{label} +Note that \cs{GlsAddXdyLocation}\marg{name}\marg{definition} will define +commands in the form: +\begin{definition} +\cs{glsX}\meta{counter}"X"\meta{name}\marg{Hprefix}\marg{location} \end{definition} -This obtains the title as follows: if \meta{label} consists of a -single non-active character or \meta{label} is equal to -\texttt{glssymbols} or \texttt{glsnumbers} and -\cs{}\meta{label}\texttt{groupname} exists, this is taken to be the -title, otherwise the title is just \meta{label}. (The \qt{symbols} -group has the label \texttt{glssymbols}, so the command -\ics{glssymbolsgroupname} is used, and the \qt{numbers} group has the -label \texttt{glsnumbers}, so the command \ics{glsnumbersgrouptitle} -is used.) If you are using \gls{xindy}, \meta{label} may be an -active character (for example \o), in which case the title will be -set to just \meta{label}. You can redefine \cs{glsgetgrouptitle} if -this is unsuitable for your document. +for each counter that has been identified either by the +\pkgopt{counter} package option, the \meta{counter} option for +\ics{newglossary} or in the argument of \ics{GlsAddXdyCounters}. +The first argument \meta{Hprefix} is only relevant when used with +the \sty{hyperref} package and indicates that \cs{theH}\meta{counter} +is given by \cs{Hprefix}"."\cs{the}\meta{counter}. -A navigation hypertarget can be created using -\begin{definition}[\DescribeMacro{\glsnavhypertarget}] -\cs{glsnavhypertarget}\marg{label}\marg{text} -\end{definition} -This typically requires \cs{glossaryheader} to be redefined to use -\begin{definition}[\DescribeMacro\glsnavigation] -\cs{glsnavigation} -\end{definition} -which displays the navigation line. +The sample file \samplefile{xdy}, which comes with the \styfmt{glossaries} +package, uses the default \ctr{page} counter for locations, and it +uses the default \ics{glsnumberformat} and a custom \cs{hyperbfit} +format. A new \gls{xindy} location called \texttt{tallynum}, as +illustrated above, is defined to make the page numbers appear as +dice. In order for the location numbers to +hyperlink to the relevant pages, I~need to redefine the necessary +\cs{glsX}\meta{counter}"X"\meta{format} commands: +\begin{verbatim} +\renewcommand{\glsXpageXglsnumberformat}[2]{% + \linkpagenumber#2% +} -For further details about \cs{glsnavhypertarget}, see -\ifpdf section~\ref*{sec:code:hypernav} in \fi the documented code -(\texttt{glossaries-code.pdf}). +\renewcommand{\glsXpageXhyperbfit}[2]{% + \textbf{\em\linkpagenumber#2}% +} -Most of the predefined glossary styles redefine \cs{glsgroupheading} -to simply ignore its argument. The \glostyle{listhypergroup} style -redefines \cs{glsgroupheading} as follows: +\newcommand{\linkpagenumber}[2]{\hyperlink{page.#2}{#1{#2}}} +\end{verbatim} +Note that the second argument of \cs{glsXpageXglsnumberformat} is +in the format \cs{tallynum}\marg{n} so the line \begin{verbatim} -\renewcommand*{\glsgroupheading}[1]{% -\item[\glsnavhypertarget{##1}{\glsgetgrouptitle{##1}}]} + \linkpagenumber#2% \end{verbatim} -See also \cs{glsgroupskip} below. - -Note that command definitions within -\ics{newglossarystyle} must use \verb|##1| instead of \verb|#1| etc. +does +\begin{alltt} + \cs{linkpagenumber}\cs{tallynum}\marg{number} +\end{alltt} +so \cs{tallynum} is the first argument of \cs{linkpagenumber} +and \meta{number} is the second argument. +\end{example} -\begin{definition}[\DescribeMacro{\glsgroupskip}] -\cs{glsgroupskip} -\end{definition} -This macro determines what to do after one logical group but before -the header for the next logical group. The \glostyle{list} glossary -style simply redefines \cs{glsgroupskip} to be \ics{indexspace}, -whereas the tabular-like styles redefine \cs{glsgroupskip} to -produce a blank row. +\begin{important} +This method is very sensitive to the internal definition of the +location command. +\end{important} -As from version 3.03, the package option \pkgopt{nogroupskip} can be -used to suppress this default gap for the predefined styles. +\begin{example}{Locations as Words not Digits}{ex:fmtcount} +Suppose I want the page numbers written as words +rather than digits and I~use the \sty{fmtcount} package to +do this. I~can redefine \ics{thepage} as follows: +\begin{verbatim} +\renewcommand*{\thepage}{\Numberstring{page}} +\end{verbatim} +This \emph{used} to get expanded to \verb|\protect \Numberstringnum |\marg{n} +where \meta{n} is the Arabic page number. This means that I~needed to +define a new location with the form: +\begin{verbatim} +\GlsAddXdyLocation{Numberstring}{:sep "\string\protect\space + \string\Numberstringnum\space\glsopenbrace" + "arabic-numbers" :sep "\glsclosebrace"} +\end{verbatim} +and if I'd used the \cs{linkpagenumber} command from the previous +example, it would need \emph{three} arguments (the first being +\cs{protect}): +\begin{verbatim} +\newcommand{\linkpagenumber}[3]{\hyperlink{page.#3}{#1#2{#3}}} +\end{verbatim} -\begin{definition}[\DescribeMacro{\glossentry}] -\cs{glossentry}\marg{label}\marg{number list} -\end{definition} -This macro indicates what to do for each top-level (level~0) glossary entry. -The entry label is given by \meta{label} and the associated -\gls{numberlist} is given by \meta{number list}. You can redefine -\ics{glossentry} to use commands like \ics{glossentryname}\marg{label}, -\ics{glossentrydesc}\marg{label} and \ics{glossentrysymbol}\marg{label} -to display the name, description and symbol fields, or to access -other fields, use commands like \ics{glsentryuseri}\marg{label}. -(See \sectionref{sec:glsnolink} for further details.) You can also -use the following commands: +The internal definition of \cs{Numberstring} has since changed +so that it now expands to \verb|\Numberstringnum |\marg{n} +(no \cs{protect}). This means that the location class definition +must be changed to: +\begin{verbatim} +\GlsAddXdyLocation{Numberstring}{% no \protect now! + :sep "\string\Numberstringnum\space\glsopenbrace" + "arabic-numbers" :sep "\glsclosebrace"} +\end{verbatim} +and \cs{linkpagenumber} goes back to only two arguments: +\begin{verbatim} +\newcommand{\linkpagenumber}[2]{\hyperlink{page.#2}{#1{#2}}} +\end{verbatim} +The other change is that \cs{Numberstring} uses +\begin{alltt} +\cs{the}\cs{value}\marg{counter} +\end{alltt} +instead of +\begin{alltt} +\cs{expandafter}\cs{the}\cs{csname} c@\meta{counter}\cs{endcsname} +\end{alltt} +so it hides \cs{c@page} from the location escaping mechanism +(see \sectionref{sec:locationsyntax}). This means that the page +number may be incorrect if the indexing occurs during the output +routine. -\begin{definition}[\DescribeMacro{\glsentryitem}] -\cs{glsentryitem}\marg{label} -\end{definition} -This macro will increment and display the associated counter for the -main (level~0) entries if the \pkgopt{entrycounter} or -\pkgopt{counterwithin} package options have been used. This macro -is typically called by \cs{glossentry} before \cs{glstarget}. -The format of the counter is controlled by the macro -\begin{definition}[\DescribeMacro{\glsentrycounterlabel}] -\cs{glsentrycounterlabel} -\end{definition} +A more recent change to \sty{fmtcount} (v3.03) now puts three +instances of \cs{expandafter} before \verb|\the\value| which +no longer hides \cs{c@page} from the location escaping mechanism, so +the page numbers should once more be correct. Further changes +to the \sty{fmtcount} package may cause a problem again. -Each time you use a glossary entry it creates a hyperlink (if -hyperlinks are enabled) to the relevant line in the glossary. -Your new glossary style must therefore redefine -\cs{glossentry} to set the appropriate target. This -is done using -\begin{definition}[\DescribeMacro{\glstarget}] -\cs{glstarget}\marg{label}\marg{text} -\end{definition} -where \meta{label} is the entry's label. Note that you -don't need to worry about whether the \sty{hyperref} package has -been loaded, as \cs{glstarget} won't create a target if -\cs{hypertarget} hasn't been defined. +\begin{important} +When dealing with custom formats where the internal definitions +are outside of your control and liable to change, it's best +to provide a wrapper command. +\end{important} -For example, the \glostyle{list} style defines \cs{glossentry} as follows: +Instead of directly using \cs{Numberstring} in the definition of +\cs{thepage}, I can provide a custom command in the same form +as the earlier \cs{tally} command: \begin{verbatim} - \renewcommand*{\glossentry}[2]{% - \item[\glsentryitem{##1}% - \glstarget{##1}{\glossentryname{##1}}] - \glossentrydesc{##1}\glspostdescription\space ##2} +\newcommand{\customfmt}[1]{\customfmtnum{\arabic{#1}}} +\newrobustcmd{\customfmtnum}[1]{\Numberstringnum{#1}} +\end{verbatim} +This ensures that the location will always be written to +the indexing file in the form: +\begin{alltt} +:locref "\glsopenbrace\glsclosebrace\glsopenbrace\string\\customfmtnum \marg{n}\glsclosebrace" +\end{alltt} +So the location class can be defined as: +\begin{verbatim} +\GlsAddXdyLocation{customfmt}{ + :sep "\string\customfmtnum\space\glsopenbrace" + "arabic-numbers" + :sep "\glsclosebrace"} \end{verbatim} -Note also that \meta{number list} will always be of the form -\begin{definition} -\ics{glossaryentrynumbers}\{\cs{relax}\\ -\ics{setentrycounter}\oarg{Hprefix}\marg{counter name}\meta{format cmd}\marg{number(s)}\} -\end{definition} -where \meta{number(s)} -may contain \ics{delimN} (to delimit individual numbers) and/or -\ics{delimR} (to indicate a range of numbers). There may be -multiple occurrences of -\ics{setentrycounter}\oarg{Hprefix}\marg{counter name}\meta{format cmd}\marg{number(s)}, but note -that the entire number list is enclosed within the argument -of \ics{glossaryentrynumbers}. The user can redefine this to change -the way the entire number list is formatted, regardless of -the glossary style. However the most common use of -\ics{glossaryentrynumbers} is to provide a means of suppressing the -number list altogether. (In fact, the \pkgopt{nonumberlist} option -redefines \ics{glossaryentrynumbers} to ignore its argument.) -Therefore, when you define a new glossary style, you don't need -to worry about whether the user has specified the -\pkgopt{nonumberlist} package option. +The sample file +\samplefile{xdy3} illustrates this. +\end{example} + +In the \gls{numberlist}, the locations are sorted according to the list +of provided location classes. The default ordering is: +\texttt{roman-page-numbers} (i, ii, \ldots), \texttt{arabic-page-numbers} +(1, 2, \ldots), \texttt{arabic-section-numbers} (for example, 1.1 if the +compositor is a full stop or 1-1 if the compositor is a +hyphen\footnote{see \ics{glsSetCompositor} described in +\sectionref{sec:setup}}), \texttt{alpha-page-numbers} (a, b, \ldots), +\texttt{Roman-page-numbers} (I, II, \ldots), \texttt{Alpha-page-numbers} +(A, B, \ldots), \texttt{Appendix-page-numbers} (for example, A.1 if the Alpha +compositor is a full stop or A-1 if the Alpha compositor is a +hyphen\footnote{see \ics{glsSetAlphaCompositor} described in +\sectionref{sec:setup}}), user defined location names (as specified +by \ics{GlsAddXdyLocation} in the order in which they were defined), +and finally \texttt{see} (cross-referenced entries).\footnote{With +\gls{glossaries-extra} \texttt{seealso} is appended to the end of +the list.} This ordering can be changed using: -\begin{definition}[\DescribeMacro{\subglossentry}] -\cs{subglossentry}\marg{level}\marg{label}\marg{number list} +\begin{definition}[\DescribeMacro\GlsSetXdyLocationClassOrder] +\cs{GlsSetXdyLocationClassOrder}\marg{location names} \end{definition} -This is used to display sub-entries. -The first argument, \meta{level}, indicates the sub-entry level. -This must be an integer from 1 (first sub-level) onwards. The -remaining arguments are analogous to those for -\ics{glossentry} described above. +where each location name is delimited by double quote marks and +separated by white space. For example: +\begin{verbatim} +\GlsSetXdyLocationClassOrder{ + "arabic-page-numbers" + "arabic-section-numbers" + "roman-page-numbers" + "Roman-page-numbers" + "alpha-page-numbers" + "Alpha-page-numbers" + "Appendix-page-numbers" + "see" +} +\end{verbatim} +(Remember to add \verb|"seealso"| if you're using +\gls{glossaries-extra}.) -\begin{definition}[\DescribeMacro{\glssubentryitem}] -\cs{glssubentryitem}\marg{label} -\end{definition} -This macro will increment and display the associated counter for the -level~1 entries if the \pkgopt{subentrycounter} package option has -been used. This macro is typically called by \cs{subglossentry} -before \ics{glstarget}. The format of the counter is controlled by -the macro -\begin{definition}[\DescribeMacro{\glssubentrycounterlabel}] -\cs{glssubentrycounterlabel} -\end{definition} +\begin{important} +Note that \cs{GlsSetXdyLocationClassOrder} has no effect if +\ics{noist} is used or if \ics{makeglossaries} is omitted. +\cs{GlsSetXdyLocationClassOrder} must be used before +\ics{makeglossaries}. +\end{important} -Note that \ics{printglossary} (which \ics{printglossaries} calls) -sets -\begin{definition}[\DescribeMacro{\currentglossary}] -\cs{currentglossary} -\end{definition} -to the current glossary label, so it's possible to create a glossary -style that varies according to the glossary type. +If a \gls{numberlist} consists of a sequence of consecutive +numbers, the range will be concatenated. The +number of consecutive locations that causes a range formation +defaults to 2, but can be changed using: -For further details of these commands, see \ifpdf -section~\ref*{sec:code:printglos} \fi \qt{Displaying the glossary} -in the documented code (\texttt{glossaries-code.pdf}). +\begin{definition}[\DescribeMacro\GlsSetXdyMinRangeLength] +\cs{GlsSetXdyMinRangeLength}\marg{n} +\end{definition} +For example: +\begin{verbatim} +\GlsSetXdyMinRangeLength{3} +\end{verbatim} +The argument may also be the keyword \texttt{none}, to indicate that +there should be no range formations. See the \gls{xindy} +manual for further details on range formations. -\begin{example}{Creating a completely new style}{sec:exnewstyle} +\begin{important} +Note that \cs{GlsSetXdyMinRangeLength} has no effect if \ics{noist} +is used or if \ics{makeglossaries} is omitted. +\cs{GlsSetXdyMinRangeLength} must be used before +\ics{makeglossaries}. +\end{important} +See also \sectionref{sec:ranges}. -If you want a completely new style, you will need to redefine all -of the commands and the environment listed above. +\section{Glossary Groups} +\label{sec:groups} -For example, suppose you want each entry to start with a bullet point. -This means that the glossary should be placed in the \env{itemize} -environment, so \env{theglossary} should start and end that -environment. Let's also suppose that you don't want anything between -the glossary groups (so \ics{glsgroupheading} and \ics{glsgroupskip} -should do nothing) and suppose you don't want anything to appear -immediately after \verb|\begin{theglossary}| (so \ics{glossaryheader} -should do nothing). In addition, let's suppose the symbol should -appear in brackets after the name, followed by the description and -last of all the \gls{numberlist} should appear within square brackets -at the end. Then you can create this new glossary style, called, say, -\texttt{mylist}, as follows: +The glossary is divided into groups according to the first +letter of the sort key. The \styfmt{glossaries} package also adds +a number group by default, unless you suppress it in the +\pkgopt{xindy} package option. For example: \begin{verbatim} - \newglossarystyle{mylist}{% - % put the glossary in the itemize environment: - \renewenvironment{theglossary}% - {\begin{itemize}}{\end{itemize}}% - % have nothing after \begin{theglossary}: - \renewcommand*{\glossaryheader}{}% - % have nothing between glossary groups: - \renewcommand*{\glsgroupheading}[1]{}% - \renewcommand*{\glsgroupskip}{}% - % set how each entry should appear: - \renewcommand*{\glossentry}[2]{% - \item % bullet point - \glstarget{##1}{\glossentryname{##1}}% the entry name - \space (\glossentrysymbol{##1})% the symbol in brackets - \space \glossentrydesc{##1}% the description - \space [##2]% the number list in square brackets - }% - % set how sub-entries appear: - \renewcommand*{\subglossentry}[3]{% - \glossentry{##2}{##3}}% - } +\usepackage[xindy={glsnumbers=false}]{glossaries} \end{verbatim} -Note that this style creates a flat glossary, where sub-entries -are displayed in exactly the same way as the top level entries. -It also hasn't used \ics{glsentryitem} or \ics{glssubentryitem} so -it won't be affected by the \pkgopt{entrycounter}, -\pkgopt{counterwithin} or \pkgopt{subentrycounter} package options. - -Variations: -\begin{itemize} -\item You might want the entry name to be capitalised, in -which case use \ics{Glossentryname} instead of \ics{glossentryname}. - -\item You might want to check if the symbol hasn't been set and omit -the parentheses if the symbol is absent. In this case you can use -\ics{ifglshassymbol} (see \sectionref{sec:utilities}): +Any entry that doesn't go in one of the letter groups or the +number group is placed in the default group. If you want \gls{xindy} +to sort the number group numerically (rather than by a string sort) +then you need to use \gls{xindy}['s] \texttt{numeric-sort} module: \begin{verbatim} - \renewcommand*{\glossentry}[2]{% - \item % bullet point - \glstarget{##1}{\glossentryname{##1}}% the entry name - \ifglshassymbol{##1}% check if symbol exists - {% - \space (\glossentrysymbol{##1})% the symbol in brackets - }% - {}% no symbol so do nothing - \space \glossentrydesc{##1}% the description - \space [##2]% the number list in square brackets - }% +\GlsAddXdyStyle{numeric-sort} \end{verbatim} -\end{itemize} -\end{example} -\begin{example}{Creating a new glossary style based on an -existing style}{sec:exadaptstyle} +If you don't use \texttt{glsnumbers=false}, the default behaviour is to locate +the number group before the \qt{A} letter group. If you are not using a +Roman alphabet, you need to change this using: -If you want to define a new style that is a slightly modified -version of an existing style, you can use \ics{setglossarystyle} -within the second argument of \ics{newglossarystyle} followed by -whatever alterations you require. For example, suppose you want -a style like the \glostyle{list} style but you don't want the extra -vertical space created by \ics{indexspace} between groups, then you -can create a new glossary style called, say, \texttt{mylist} as -follows: -\begin{verbatim} -\newglossarystyle{mylist}{% -\setglossarystyle{list}% base this style on the list style -\renewcommand{\glsgroupskip}{}% make nothing happen - % between groups -} -\end{verbatim} -(In this case, you can actually achieve the same effect using the -\glostyle{list} style in combination with the package option -\pkgopt{nogroupskip}.) -\end{example} -\begin{example}{Example: creating a glossary style that uses the -\texorpdfstring{\gloskey{user1}}{user1}, \ldots, -\texorpdfstring{\gloskey{user6}}{user6} keys}{sec:exuserstyle} +\begin{definition}[\DescribeMacro\GlsSetXdyFirstLetterAfterDigits] +\cs{GlsSetXdyFirstLetterAfterDigits}\marg{letter} +\end{definition} +where \meta{letter} is the first letter of your alphabet. Take care +if you're using \sty{inputenc} as non-ASCII characters are actually +active characters that expand. (This isn't a problem with the native +\gls{UTF-8} engines and \sty{fontspec}.) The starred form will sanitize +the argument to prevent expansion. +Alternatively you can use: -Suppose each entry not only has an associated symbol, -but also units (stored in \gloskey{user1}) and dimension -(stored in \gloskey{user2}). Then you can define a glossary style -that displays each entry in a \env{longtable} as follows: + +\begin{definition}[\DescribeMacro\GlsSetXdyNumberGroupOrder] +\cs{GlsSetXdyNumberGroupOrder}\marg{relative location} +\end{definition} +to change the default +\begin{alltt} +:before \cs{string}"\meta{letter}\cs{string}" +\end{alltt} +to \meta{relative location}. For example: \begin{verbatim} -\newglossarystyle{long6col}{% - % put the glossary in a longtable environment: - \renewenvironment{theglossary}% - {\begin{longtable}{lp{\glsdescwidth}cccp{\glspagelistwidth}}}% - {\end{longtable}}% - % Set the table's header: - \renewcommand*{\glossaryheader}{% - \bfseries Term & \bfseries Description & \bfseries Symbol & - \bfseries Units & \bfseries Dimensions & \bfseries Page List - \\\endhead}% - % No heading between groups: - \renewcommand*{\glsgroupheading}[1]{}% - % Main (level 0) entries displayed in a row optionally numbered: - \renewcommand*{\glossentry}[2]{% - \glsentryitem{##1}% Entry number if required - \glstarget{##1}{\glossentryname{##1}}% Name - & \glossentrydesc{##1}% Description - & \glossentrysymbol{##1}% Symbol - & \glsentryuseri{##1}% Units - & \glsentryuserii{##1}% Dimensions - & ##2% Page list - \tabularnewline % end of row - }% - % Similarly for sub-entries (no sub-entry numbers): - \renewcommand*{\subglossentry}[3]{% - % ignoring first argument (sub-level) - \glstarget{##2}{\glossentryname{##2}}% Name - & \glossentrydesc{##2}% Description - & \glossentrysymbol{##2}% Symbol - & \glsentryuseri{##2}% Units - & \glsentryuserii{##2}% Dimensions - & ##3% Page list - \tabularnewline % end of row - }% - % Nothing between groups: - \renewcommand*{\glsgroupskip}{}% -} +\GlsSetXdyNumberGroupOrder{:after \string"Z\string"} \end{verbatim} -\end{example} +will put the number group after the \qt{Z} letter group. +Again take care of active characters. There's a starred version +that sanitizes the argument (so don't use \cs{string} in it). +\begin{alltt} +\cs{GlsSetXdyNumberGroupOrder}*\{:after "\"O"\} +\end{alltt} + +\begin{important} +Note that these commands have no effect if +\ics{noist} is used or if \ics{makeglossaries} is omitted. +\cs{GlsSetXdyFirstLetterAfterDigits} must be used before +\ics{makeglossaries}.\par +\end{important} + \chapter{Utilities} \label{sec:utilities} @@ -13375,6 +13785,12 @@ option). This command doesn't have an optional argument. If you want to explicitly say which lists to iterate over, just use the optional argument of \cs{forallglossaries}. +\begin{xtr} +The \gls{glossaries-extra} +package provides an analogous command +\ics*{forallabbreviationlists}. +\end{xtr} + \begin{definition}[\DescribeMacro{\forglsentries}] \cs{forglsentries}\oarg{glossary label}\marg{cs}\marg{body} \end{definition} @@ -13474,7 +13890,14 @@ part}} \end{definition} This checks if the glossary entry given by \meta{label} has any sub-entries. If it does, \meta{true part} is performed, otherwise -\meta{false part}. +\meta{false part}. This uses an inefficient method since this +information isn't stored. + +\begin{bib2gls} +If you use \gls{bib2gls}, a more efficient method is to use the +\resourceopt{save-child-count} resource option and test the value of +the \field{childcount} field. +\end{bib2gls} \begin{definition}[\DescribeMacro{\ifglshasparent}] \cs{ifglshasparent}{\meta{label}}{\meta{true part}}{\meta{false @@ -14314,7 +14737,7 @@ The \gls{glossaries-extra} package and \gls{bib2gls} provide some additional sample files. There are also examples in the \gallery{}{Dickimaw Books Gallery}. -If you prefer to use UTF-8 aware engines (\texttt{xelatex} or +If you prefer to use \gls{UTF-8} aware engines (\texttt{xelatex} or \texttt{lualatex}) remember that you'll need to switch from \styfmt{fontenc} \& \styfmt{inputenc} to \styfmt{fontspec} where appropriate. @@ -18272,7 +18695,7 @@ also the earlier \samplefile{Sec}. \exitem{utf8} This is another example that uses \gls{xindy}. Unlike \gls{makeindex}, \gls{xindy} can cope with \glspl{nonlatinchar}. This -document uses UTF-8 encoding. To create the document do: +document uses \gls{UTF-8} encoding. To create the document do: \begin{prompt} pdflatex sampleutf8 makeglossaries sampleutf8 @@ -19214,10 +19637,10 @@ If you have any problems, please first consult the \urlfootref{http://www.dickimaw-books.com/faqs/glossariesfaq.html}{\styfmt{glossaries} FAQ}. If that doesn't help, try posting your query to somewhere like the \texttt{comp.text.tex} newsgroup, the -\urlfootref{http://www.latex-community.org/}{\LaTeX\ Community Forum} or -\urlfootref{http://tex.stackexchange.com/}{\TeX\ on StackExchange}. +\urlfootref{https://latex.org/forum/}{\LaTeX\ Community Forum} or +\urlfootref{https://tex.stackexchange.com/}{\TeX\ on StackExchange}. Bug reports can be submitted via -\urlfootref{http://www.dickimaw-books.com/bug-report.html}{my package bug report form}. +\urlfootref{https://www.dickimaw-books.com/bug-report.html}{my package bug report form}. \PrintIndex diff --git a/macros/latex/contrib/glossaries/glossaries.dtx b/macros/latex/contrib/glossaries/glossaries.dtx index b0d0914db2..5c9124cc63 100644 --- a/macros/latex/contrib/glossaries/glossaries.dtx +++ b/macros/latex/contrib/glossaries/glossaries.dtx @@ -1,15 +1,9 @@ %\iffalse % glossaries.dtx generated using makedtx version 1.2 (c) Nicola Talbot % Command line args: -% -setambles ".*\.perl=>\nopreamble\nopostamble" -% -setambles ".*\.tex=>\nopreamble\nopostamble" -% -section "chapter" -% -doc "glossaries-manual.tex" -% -codetitle "Main Package Code" % -comment ".*\.perl" % -comment ".*\.tex" -% -macrocode ".*\.perl" -% -macrocode ".*\.tex" +% -author "Nicola Talbot" % -src "glossaries\.sty\Z=>glossaries.sty" % -src "glossaries-prefix.sty\Z=>glossaries-prefix.sty" % -src "(glossary-.+)\.(sty)\Z=>\1.\2" @@ -19,10 +13,17 @@ % -src "(glossaries-babel)\.(sty)\Z=>\1.\2" % -src "(glossaries-polyglossia)\.(sty)\Z=>\1.\2" % -src "(example-glossaries-.*\.tex)\Z=>\1" +% -src "(glossaries-2020-03-19\.sty)\Z=>\1" % -src "(.*\.perl)\Z=>\1" -% -author "Nicola Talbot" +% -setambles ".*\.perl=>\nopreamble\nopostamble" +% -setambles ".*\.tex=>\nopreamble\nopostamble" +% -doc "glossaries-manual.tex" +% -section "chapter" +% -codetitle "Main Package Code" +% -macrocode ".*\.perl" +% -macrocode ".*\.tex" % glossaries -% Created on 2020/3/19 17:03 +% Created on 2021/9/23 17:22 %\fi %\iffalse %<*package> @@ -45,7 +46,7 @@ %\fi % \iffalse % Doc-Source file to use with LaTeX2e -% Copyright (C) 2020 Nicola Talbot, all rights reserved. +% Copyright (C) 2021 Nicola Talbot, all rights reserved. % \fi % \iffalse %<*driver> @@ -136,7 +137,7 @@ governed by the \gloskey{first} and \gloskey{firstplural} keys of \setcounter{IndexColumns}{2} -\CheckSum{20358} +\CheckSum{34113} \newcommand*{\ifirstuse}{\iterm{first use}} \newcommand*{\firstuse}{\gls{firstuse}} @@ -163,12 +164,12 @@ governed by the \gloskey{first} and \gloskey{firstplural} keys of %\fi %\MakeShortVerb{"} % -% \title{Documented Code For glossaries v4.46} +% \title{Documented Code For glossaries v4.47} % \author{Nicola L.C. Talbot\\[10pt] %Dickimaw Books\\ %\url{http://www.dickimaw-books.com/}} % -% \date{2020-03-19} +% \date{2021-09-20} % \maketitle % %This is the documented code for the \styfmt{glossaries} package. @@ -184,7 +185,7 @@ governed by the \gloskey{first} and \gloskey{firstplural} keys of %glossaries package}. % %\item[\url{glossaries-user.pdf}] -%For the main user guide, read \qt{glossaries.sty v4.46: +%For the main user guide, read \qt{glossaries.sty v4.47: %\LaTeX2e\ Package to Assist Generating Glossaries}. % %\item[\url{mfirstuc-manual.pdf}] @@ -239,7 +240,15 @@ governed by the \gloskey{first} and \gloskey{firstplural} keys of % This package requires \LaTeXe. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{glossaries}[2020/03/19 v4.46 (NLCT)] +% \end{macrocode} +% Rollback releases: +% \begin{macrocode} +\DeclareRelease{v4.46}{2020-03-19}{glossaries-2020-03-19.sty} +\DeclareCurrentRelease{v4.47}{2021-09-20} +% \end{macrocode} +% Declare package: +% \begin{macrocode} +\ProvidesPackage{glossaries}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} %\changes{4.18}{2015-09-09}{split mfirstuc into separate bundle} % Required packages: @@ -1181,8 +1190,9 @@ false,nolabel,autolabel,nameref}[nolabel]{% \def\@gls@setsort##1{% % \end{macrocode} % Get the parent, if one exists +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} - \edef\@glo@parent{\csname glo@##1@parent\endcsname}% + \protected@edef\@glo@parent{\csname glo@##1@parent\endcsname}% % \end{macrocode} % Set the information for the parent entry if not already done. % \begin{macrocode} @@ -1193,8 +1203,8 @@ false,nolabel,autolabel,nameref}[nolabel]{% % \end{macrocode} % Set index information for this entry % \begin{macrocode} - \edef\@glo@type{\csname glo@##1@type\endcsname}% - \edef\@gls@tmp{\csname glo@##1@sort\endcsname}% + \protected@edef\@glo@type{\csname glo@##1@type\endcsname}% + \protected@edef\@gls@tmp{\csname glo@##1@sort\endcsname}% \ifx\@gls@tmp\@empty \expandafter\global\expandafter \advance\csname glossary@\@glo@type @sortcount\endcsname by 1\relax @@ -1424,9 +1434,10 @@ false,nolabel,autolabel,nameref}[nolabel]{% %\end{definition} % Determines if the glossary with the given label has been identified % as being a list of acronyms. +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand{\glsIfListOfAcronyms}[1]{% - \edef\@do@gls@islistofacronyms{% + \protected@edef\@do@gls@islistofacronyms{% \noexpand\@gls@islistofacronyms{#1}{\@glsacronymlists}}% \@do@gls@islistofacronyms } @@ -2399,24 +2410,69 @@ false,nolabel,autolabel,nameref}[nolabel]{% % %\begin{macro}{\@@do@write@glslabels} %\changes{4.45}{2020-02-13}{new} +%\changes{4.47}{2021-09-20}{fully expand list} % \begin{macrocode} \newcommand*{\@@do@write@glslabels}{% \newwrite\@gls@labelsfile \immediate\openout\@gls@labelsfile=\jobname.glslabels - \forallglsentries[\@glo@types,\@ignored@glossaries]{\@glsentry}% - {\ifdefempty{\@glsentry}{}{\immediate\write\@gls@labelsfile{\@glsentry}}}% + \protected@edef\@gls@fulllist{\@glo@types}% + \ifdefempty{\@ignored@glossaries}{}% + {\protected@eappto\@gls@fulllist{,\@ignored@glossaries}}% + \forallglsentries[\@gls@fulllist]{\@glsentry}% + {% + \ifdefempty{\@glsentry}{}% + {% + \ifx\do@write@glslabelsname\@gobble + \def\@gls@thisentryname{}% + \else + \letcs{\@gls@thisentryname}{glo@\glsdetoklabel{\@glsentry}@name}% + \@onelevel@sanitize\@gls@thisentryname + \fi + \immediate\write\@gls@labelsfile + {\@glsentry\do@write@glslabelsname{\@gls@thisentryname}}% + }% + }% \immediate\closeout\@gls@labelsfile } % \end{macrocode} %\end{macro} % +%\begin{macro}{\do@write@glslabelsname} +%\changes{4.47}{2021-09-20}{new} +% Support for additionally writing the name as well as the label. +% Let to \cs{@gobble} if name not required and to +% \cs{@write@glslabelsname} if required. +% \begin{macrocode} +\newcommand*{\do@write@glslabelsname}[1]{} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@write@glslabelsname} +%\changes{4.47}{2021-09-20}{new} +% \begin{macrocode} +\begingroup +\catcode`\^^I12 +\gdef\@write@glslabelsname#1{^^I#1} +\endgroup +% \end{macrocode} +%\end{macro} +% %\begin{option}{writeglslabels} %\changes{4.45}{2020-02-13}{new} %This option will write all entry labels (including those in ignored %glossaries) to the file \cs{jobname}\texttt{.glslabels}. This file %may be used by text editors for label auto-completion. % \begin{macrocode} -\@gls@declareoption{writeglslabels}{\@do@write@glslabels} +\@gls@declareoption{writeglslabels}{\@do@write@glslabels + \let\do@write@glslabelsname\@gobble} +% \end{macrocode} +%\end{option} +%\begin{option}{writeglslabelnames} +%\changes{4.47}{2021-09-20}{new} +%As the above but also writes the name. +% \begin{macrocode} +\@gls@declareoption{writeglslabelnames}{\@do@write@glslabels + \let\do@write@glslabelsname\@write@glslabelsname} % \end{macrocode} %\end{option} %\begin{macro}{\ifglsautomake} @@ -3887,10 +3943,10 @@ false,nolabel,autolabel,nameref}[nolabel]{% \protected@edef\@gls@roman{\@roman{0\string" \string"roman-numbers-lowercase\string" :sep \string"}}% \@onelevel@sanitize\@gls@roman - \edef\@tmp{\string" \string"roman-numbers-lowercase\string" + \edef\@gls@tmp{\string" \string"roman-numbers-lowercase\string" :sep \string"}% - \@onelevel@sanitize\@tmp - \ifx\@tmp\@gls@roman + \@onelevel@sanitize\@gls@tmp + \ifx\@gls@tmp\@gls@roman \expandafter \edef\csname @gls@xdy@Lclass@roman-page-numbers\endcsname{% \string"roman-numbers-lowercase\string"% @@ -4277,9 +4333,10 @@ false,nolabel,autolabel,nameref}[nolabel]{% % current iteration. %\changes{2.01}{2009 May 30}{replaced \cs{ifthenelse} with \cs{ifx}} %\changes{3.11a}{2013-10-15}{replaced \cs{ifx} with \cs{ifdefempty}} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand*{\forglsentries}[3][\glsdefaulttype]{% - \edef\@@glo@list{\csname glolist@#1\endcsname}% + \protected@edef\@@glo@list{\csname glolist@#1\endcsname}% \@for#2:=\@@glo@list\do {% \ifdefempty{#2}{}{#3}% @@ -4507,7 +4564,10 @@ false,nolabel,autolabel,nameref}[nolabel]{% \glsdoifexists{#1}% {% \def\do@glshaschildren{#3}% - \edef\@gls@thislabel{\glsdetoklabel{#1}}% +% \end{macrocode} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@gls@thislabel{\glsdetoklabel{#1}}% \expandafter\forglsentries\expandafter [\csname glo@\@gls@thislabel @type\endcsname] {\glo@label}% @@ -4878,8 +4938,9 @@ false,nolabel,autolabel,nameref}[nolabel]{% }{}% % \end{macrocode} % Add this to the list of glossary types: +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} - \toks@{#2}\edef\@glo@types{\@glo@types\the\toks@,}% + \toks@{#2}\protected@edef\@glo@types{\@glo@types\the\toks@,}% % \end{macrocode} % Define a comma-separated list of labels for this glossary type, % so that all the entries for this glossary can be reset with a @@ -5015,19 +5076,20 @@ false,nolabel,autolabel,nameref}[nolabel]{% % %\begin{macro}{\newignoredglossary} % Creates a new glossary that doesn't have associated files. -% This glossary is ignored by and commands that iterate over +% This glossary is ignored by any commands that iterate over % glossaries, such as \ics{printglossaries}, and won't work with % commands like \ics{printglossary}. It's intended for entries that % are so commonly-known they don't require a glossary. %\changes{4.08}{2014-07-30}{new} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand*{\newignoredglossary}[1]{% \ifdefempty\@ignored@glossaries {% - \edef\@ignored@glossaries{#1}% + \protected@edef\@ignored@glossaries{#1}% }% {% - \eappto\@ignored@glossaries{,#1}% + \protected@eappto\@ignored@glossaries{,#1}% }% \csgdef{glolist@#1}{,}% \ifcsundef{gls@#1@entryfmt}% @@ -5040,7 +5102,7 @@ false,nolabel,autolabel,nameref}[nolabel]{% \renewcommand*{\@gls@nohyperlist}{#1}% }% {% - \eappto\@gls@nohyperlist{,#1}% + \protected@eappto\@gls@nohyperlist{,#1}% }% } % \end{macrocode} @@ -5059,9 +5121,10 @@ false,nolabel,autolabel,nameref}[nolabel]{% % Expansion is used in case the first argument is a control % sequence. %\changes{4.08}{2014-07-30}{new} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand*{\ifignoredglossary}[3]{% - \edef\@gls@igtype{#1}% + \protected@edef\@gls@igtype{#1}% \expandafter\DTLifinlist\expandafter {\@gls@igtype}{\@ignored@glossaries}{#2}{#3}% } @@ -5285,7 +5348,7 @@ false,nolabel,autolabel,nameref}[nolabel]{% %\changes{4.20}{2015-11-30}{new} % \begin{macrocode} \newcommand*{\gls@checkseeallowed@preambleonly}{% - \GlossariesWarning{glossaries}% + \GlossariesWarning {`\gls@xr@key' key doesn't have any effect when used in the document environment. Move the definition to the preamble after \string\makeglossaries\space @@ -5686,11 +5749,11 @@ false,nolabel,autolabel,nameref}[nolabel]{% %\begin{macro}{\gls@defdocnewglossaryentry} %\changes{4.14}{2015-02-28}{new} % The definition of \cs{newglossaryentry} is changed at the start of -% the \env{document} environment. The \gloskey{see} key doesn't work -% for entries that have been defined in the document environment. +% the \env{document} environment. As from v4.47 the \gloskey{see} +% key now works in the \env{document} environment. +%\changes{4.47}{2021-09-20}{removed see warning} % \begin{macrocode} \newcommand*{\gls@defdocnewglossaryentry}{% - \let\gls@checkseeallowed\gls@checkseeallowed@preambleonly \let\newglossaryentry\new@glossaryentry } % \end{macrocode} @@ -5712,6 +5775,38 @@ false,nolabel,autolabel,nameref}[nolabel]{% % \end{macrocode} %\end{macro} % +%\begin{macro}{\gls@glsdefs@labellist} +%\changes{4.47}{2021-09-20}{new} +% List of labels of entries defined in \texttt{.glsdefs} file. +% \begin{macrocode} +\newcommand*{\gls@glsdefs@labellist}{} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\gls@glsdefs@addlabel} +%\changes{4.47}{2021-09-20}{new} +% Save label of entry defined in \texttt{.glsdefs} file. +% \begin{macrocode} +\newcommand*{\gls@glsdefs@addlabel}[1]{\listxadd{\gls@glsdefs@labellist}{#1}} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\gls@docdef@labellist} +%\changes{4.47}{2021-09-20}{new} +% List of labels of entries defined in the \env{document} environment. +% \begin{macrocode} +\newcommand*{\gls@docdef@labellist}{} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\gls@docdef@addlabel} +%\changes{4.47}{2021-09-20}{new} +% Save label of entry defined in the \env{document} environment. +% \begin{macrocode} +\newcommand*{\gls@docdef@addlabel}[1]{\listxadd{\gls@docdef@labellist}{#1}} +% \end{macrocode} +%\end{macro} +% %\begin{macro}{\new@glossaryentry} %\changes{3.10a}{2013-10-13}{new} % For use in document environment. This opens the \texttt{.glsdefs} @@ -5726,11 +5821,55 @@ false,nolabel,autolabel,nameref}[nolabel]{% \immediate\openout\@gls@deffile=\jobname.glsdefs }% {}% - \ifglsentryexists{#1}{}% +% \end{macrocode} +%\changes{4.47}{2021-09-20}{allow overwrite if defined in \texttt{.glsdefs}} +% Don't check for existence since if the entry has been defined in +% the \texttt{.glsdefs} it will need to be redefined in case the +% entry has been updated, but keep track of which entries have been +% defined in the document environment to prevent duplicate +% definitions. +% \begin{macrocode} + \ifglsentryexists{#1}% + {% + \xifinlist{#1}{\gls@docdef@labellist}% + {% +% \end{macrocode} +% This entry has already been defined in the document environment. +% \begin{macrocode} + \GlossariesWarning{Entry `#1' has already been defined in the + document environment (ignoring new definition)}% + }% + {% + \xifinlist{#1}{\gls@glsdefs@labellist}% + {% +% \end{macrocode} +% This entry was defined in the \texttt{.glsdefs} file so update the +% definition in case it has been changed. +% \begin{macrocode} + \gls@defglossaryentry{#1}{#2}% + \gls@docdef@addlabel{#1}% + \@gls@writedef{#1}% + }% + {% +% \end{macrocode} +% This entry wasn't defined in the \texttt{.glsdefs} file so it must +% have been defined in the preamble. +% \begin{macrocode} + \GlossariesWarning{Entry `#1' has already been defined in + the preamble (in which case remove the duplicate definition) + or you have just updated to glossaries.sty + v4.47 (in which case delete `\jobname.glsdefs')}% + }% + }% + }% {% +% \end{macrocode} +% This entry hasn't been defined (new entry since last build). +% \begin{macrocode} \gls@defglossaryentry{#1}{#2}% + \gls@docdef@addlabel{#1}% + \@gls@writedef{#1}% }% - \@gls@writedef{#1}% } % \end{macrocode} %At the start of the document input the \texttt{.glsdefs} file if it @@ -5766,18 +5905,38 @@ false,nolabel,autolabel,nameref}[nolabel]{% % \end{macrocode} %\end{macro} % +%\begin{macro}{\glsdefs@newdocentry} +%\changes{4.47}{2021-09-20}{new} +% Used to define entries in the \texttt{.glsdefs} file. +% \begin{macrocode} +\newcommand*{\glsdefs@newdocentry}[2]{% + \ifglsentryexists{#1}% + {\GlossariesWarning{entry `#1' has already been defined in the preamble + (if you have moved the definition there from the document + environment, delete \jobname.glsdefs)}}% + {% + \gls@glsdefs@addlabel{#1}% + \gls@defglossaryentry{#1}{#2}% + }% +} +% \end{macrocode} +%\end{macro} +% %\begin{macro}{\@gls@writedef} %\changes{3.10a}{2013-10-13}{new} % Writes glossary entry definition to \cs{@gls@deffile}. +% Allow for the possibility that the entry definition may have been +% moved from the document environment to the preamble, so warn +% rather than generate an error. %\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}} +%\changes{4.47}{2021-09-20}{added a warning if entry has already been +%defined} % \begin{macrocode} \newcommand*{\@gls@writedef}[1]{% \immediate\write\@gls@deffile {% - \string\ifglsentryexists{#1}{}\glspercentchar^^J% - \expandafter\@gobble\string\{\glspercentchar^^J% - \string\gls@defglossaryentry{\glsdetoklabel{#1}}\glspercentchar^^J% - \expandafter\@gobble\string\{\glspercentchar% + \string\glsdefs@newdocentry{\glsdetoklabel{#1}}\glspercentchar^^J% + \expandafter\@gobble\string\{\glspercentchar% }% % \end{macrocode} % Write key value information: @@ -5803,9 +5962,8 @@ false,nolabel,autolabel,nameref}[nolabel]{% \glswritedefhook \immediate\write\@gls@deffile {% - \glspercentchar^^J% - \expandafter\@gobble\string\}\glspercentchar^^J% - \expandafter\@gobble\string\}\glspercentchar% + \glspercentchar^^J% + \expandafter\@gobble\string\}\glspercentchar^^J% }% } % \end{macrocode} @@ -6089,11 +6247,12 @@ false,nolabel,autolabel,nameref}[nolabel]{% %\end{definition} %\changes{4.16}{2015-07-08}{new} %\changes{4.42}{2019-01-06}{changed from \cs{edef} to \cs{protected@csxdef}} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand{\glsfieldxdef}[3]{% \glsdoifexists{#1}% {% - \edef\@glo@label{\glsdetoklabel{#1}}% + \protected@edef\@glo@label{\glsdetoklabel{#1}}% \ifcsdef{glo@\@glo@label @#2}% {% \protected@csxdef{glo@\@glo@label @#2}{#3}% @@ -6112,11 +6271,12 @@ false,nolabel,autolabel,nameref}[nolabel]{% %\end{definition} %\changes{4.16}{2015-07-08}{new} %\changes{4.42}{2019-01-06}{changed from \cs{edef} to \cs{protected@csedef}} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand{\glsfieldedef}[3]{% \glsdoifexists{#1}% {% - \edef\@glo@label{\glsdetoklabel{#1}}% + \protected@edef\@glo@label{\glsdetoklabel{#1}}% \ifcsdef{glo@\@glo@label @#2}% {% \protected@csedef{glo@\@glo@label @#2}{#3}% @@ -6134,11 +6294,12 @@ false,nolabel,autolabel,nameref}[nolabel]{% %\cs{glsfieldgdef}\marg{label}\marg{field}\marg{definition} %\end{definition} %\changes{4.16}{2015-07-08}{new} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand{\glsfieldgdef}[3]{% \glsdoifexists{#1}% {% - \edef\@glo@label{\glsdetoklabel{#1}}% + \protected@edef\@glo@label{\glsdetoklabel{#1}}% \ifcsdef{glo@\@glo@label @#2}% {% \expandafter\gdef\csname glo@\@glo@label @#2\endcsname{#3}% @@ -6156,11 +6317,12 @@ false,nolabel,autolabel,nameref}[nolabel]{% %\cs{glsfielddef}\marg{label}\marg{field}\marg{definition} %\end{definition} %\changes{4.16}{2015-07-08}{new} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand{\glsfielddef}[3]{% \glsdoifexists{#1}% {% - \edef\@glo@label{\glsdetoklabel{#1}}% + \protected@edef\@glo@label{\glsdetoklabel{#1}}% \ifcsdef{glo@\@glo@label @#2}% {% \expandafter\def\csname glo@\@glo@label @#2\endcsname{#3}% @@ -6180,11 +6342,12 @@ false,nolabel,autolabel,nameref}[nolabel]{% %\changes{4.16}{2015-07-08}{new} % Fetches the value of the given field and stores in the given % control sequence. +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand{\glsfieldfetch}[3]{% \glsdoifexists{#1}% {% - \edef\@glo@label{\glsdetoklabel{#1}}% + \protected@edef\@glo@label{\glsdetoklabel{#1}}% \ifcsdef{glo@\@glo@label @#2}% {% \letcs#3{glo@\@glo@label @#2}% @@ -6208,7 +6371,7 @@ false,nolabel,autolabel,nameref}[nolabel]{% \newcommand{\ifglsfieldeq}[5]{% \glsdoifexists{#1}% {% - \edef\@glo@label{\glsdetoklabel{#1}}% + \protected@edef\@glo@label{\glsdetoklabel{#1}}% \ifcsdef{glo@\@glo@label @#2}% {% \ifcsstring{glo@\@glo@label @#2}{#3}{#4}{#5}% @@ -6232,7 +6395,7 @@ false,nolabel,autolabel,nameref}[nolabel]{% \newcommand{\ifglsfielddefeq}[5]{% \glsdoifexists{#1}% {% - \edef\@glo@label{\glsdetoklabel{#1}}% + \protected@edef\@glo@label{\glsdetoklabel{#1}}% \ifcsdef{glo@\@glo@label @#2}% {% \expandafter\ifdefstrequal @@ -6252,11 +6415,12 @@ false,nolabel,autolabel,nameref}[nolabel]{% %\end{definition} %\changes{4.16}{2015-07-08}{new} %As above but uses \cs{ifcsstrequal} instead of \cs{ifdefstrequal} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand{\ifglsfieldcseq}[5]{% \glsdoifexists{#1}% {% - \edef\@glo@label{\glsdetoklabel{#1}}% + \protected@edef\@glo@label{\glsdetoklabel{#1}}% \ifcsdef{glo@\@glo@label @#2}% {% \ifcsstrequal{glo@\@glo@label @#2}{#3}{#4}{#5}% @@ -6341,8 +6505,9 @@ false,nolabel,autolabel,nameref}[nolabel]{% \let\GlsSetQuote\gls@nosetquote % \end{macrocode} % Store label +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} - \edef\@glo@label{\glsdetoklabel{#1}}% + \protected@edef\@glo@label{\glsdetoklabel{#1}}% % \end{macrocode} % \changes{3.12a}{2013-10-16}{added \cs{glslabel}} % Provide a means for user defined keys to reference the label: @@ -6456,9 +6621,10 @@ false,nolabel,autolabel,nameref}[nolabel]{% % \end{macrocode} % Assign type. This must be fully expandable %\changes{4.03}{2014-01-20}{replaced \#1 with \cs{@glo@label}} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \gls@assign@field{\glsdefaulttype}{\@glo@label}{type}{\@glo@type}% - \edef\@glo@type{\glsentrytype{\@glo@label}}% + \protected@edef\@glo@type{\glsentrytype{\@glo@label}}% % \end{macrocode} % Check to see if this glossary type has been defined, if it has, % add this label to the relevant list, otherwise generate an error. @@ -6490,7 +6656,10 @@ false,nolabel,autolabel,nameref}[nolabel]{% {% }% \protected@edef\@glolist@{\csname glolist@\@glo@type\endcsname}% - \expandafter\xdef\csname glolist@\@glo@type\endcsname{% +% \end{macrocode} +%\changes{1.46}{2021-09-20}{changed \cs{xdef} to \cs{protected@xdef}} +% \begin{macrocode} + \expandafter\protected@xdef\csname glolist@\@glo@type\endcsname{% \@glolist@{\@glo@label},}% }% % \end{macrocode} @@ -6526,8 +6695,9 @@ false,nolabel,autolabel,nameref}[nolabel]{% {% % \end{macrocode} % Parent exists. Set \cs{glo@}\meta{label}"@parent". +%\changes{1.46}{2021-09-20}{changed \cs{xdef} to \cs{protected@xdef}} % \begin{macrocode} - \expandafter\xdef\csname glo@\@glo@label @parent\endcsname{% + \expandafter\protected@xdef\csname glo@\@glo@label @parent\endcsname{% \@glo@parent}% % \end{macrocode} % Determine level. @@ -6678,13 +6848,14 @@ false,nolabel,autolabel,nameref}[nolabel]{% % \end{macrocode} % Define an associated boolean variable to determine whether this % entry has been used yet (needs to be defined globally): +%\changes{1.46}{2021-09-20}{changed \cs{xdef} to \cs{protected@xdef}} % \begin{macrocode} - \expandafter\xdef\csname glo@\@glo@label @flagfalse\endcsname{% + \expandafter\protected@xdef\csname glo@\@glo@label @flagfalse\endcsname{% \noexpand\global \noexpand\let\expandafter\noexpand \csname ifglo@\@glo@label @flag\endcsname\noexpand\iffalse }% - \expandafter\xdef\csname glo@\@glo@label @flagtrue\endcsname{% + \expandafter\protected@xdef\csname glo@\@glo@label @flagtrue\endcsname{% \noexpand\global \noexpand\let\expandafter\noexpand \csname ifglo@\@glo@label @flag\endcsname\noexpand\iftrue @@ -6773,10 +6944,11 @@ false,nolabel,autolabel,nameref}[nolabel]{% % Moves entry whose label is given by first argument to the glossary % named in the second argument. %\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newcommand*{\glsmoveentry}[2]{% - \edef\@glo@thislabel{\glsdetoklabel{#1}}% - \edef\glo@type{\csname glo@\@glo@thislabel @type\endcsname}% + \protected@edef\@glo@thislabel{\glsdetoklabel{#1}}% + \protected@edef\glo@type{\csname glo@\@glo@thislabel @type\endcsname}% \def\glo@list{,}% \forglsentries[\glo@type]{\glo@label}% {% @@ -6785,7 +6957,7 @@ false,nolabel,autolabel,nameref}[nolabel]{% %\cs{ifdefequal}} % \begin{macrocode} \ifdefequal\@glo@thislabel\glo@label - {}{\eappto\glo@list{\glo@label,}}% + {}{\protected@eappto\glo@list{\glo@label,}}% }% \cslet{glolist@\glo@type}{\glo@list}% \csdef{glo@\@glo@thislabel @type}{#2}% @@ -6841,8 +7013,9 @@ false,nolabel,autolabel,nameref}[nolabel]{% \newcommand{\@glo@storeentry}[1]{% % \end{macrocode} % Escape makeindex/xindy special characters in the label: +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} - \edef\@glo@esclabel{#1}% + \protected@edef\@glo@esclabel{#1}% \@gls@checkmkidxchars\@glo@esclabel % \end{macrocode} % Get the sort string and escape any special characters @@ -6859,7 +7032,7 @@ false,nolabel,autolabel,nameref}[nolabel]{% % \end{macrocode} % Get the parent, if one exists % \begin{macrocode} - \edef\@glo@parent{\csname glo@#1@parent\endcsname}% + \protected@edef\@glo@parent{\csname glo@#1@parent\endcsname}% % \end{macrocode} % Write the information to the glossary file. % \begin{macrocode} @@ -8498,9 +8671,10 @@ false,nolabel,autolabel,nameref}[nolabel]{% % problem with tabularx). %\changes{2.03}{2009-09-23}{added \cs{leavevmode}} %\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \leavevmode - \edef\glslabel{\glsdetoklabel{#2}}% + \protected@edef\glslabel{\glsdetoklabel{#2}}% % \end{macrocode} % Save options in \cs{@gls@link@opts} and label in \cs{@gls@link@label} %\changes{4.03}{2014-01-20}{moved \cs{@gls@link@opts} and @@ -8511,7 +8685,7 @@ false,nolabel,autolabel,nameref}[nolabel]{% % \end{macrocode} % \begin{macrocode} \def\@glsnumberformat{glsnumberformat}% - \edef\@gls@counter{\csname glo@\glslabel @counter\endcsname}% + \protected@edef\@gls@counter{\csname glo@\glslabel @counter\endcsname}% % \end{macrocode} %\changes{3.05}{2013-04-21}{added check for ``nohypertypes''}% %\changes{3.07}{2013-07-05}{fixed bug that failed to find entry in list}% @@ -8519,7 +8693,7 @@ false,nolabel,autolabel,nameref}[nolabel]{% % hyperlink by default %\changes{4.08}{2014-07-30}{renamed \cs{gls@type} to \cs{glstype}} % \begin{macrocode} - \edef\glstype{\csname glo@\glslabel @type\endcsname}% + \protected@edef\glstype{\csname glo@\glslabel @type\endcsname}% % \end{macrocode} %\changes{4.08}{2014-07-30}{removed redundancy} % Save original setting @@ -8785,6 +8959,19 @@ false,nolabel,autolabel,nameref}[nolabel]{% \def\@gls@checkedmkidx{}% \expandafter\@gls@checklevel#1\@nil!!\null \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}% +% \end{macrocode} +%\changes{4.47}{2021-09-20}{added check for \cs{"!} and backslash} +% \begin{macrocode} + \def\@gls@checkedmkidx{}% + \expandafter\@gls@checkesclevel#1\@nil\!\!\null + \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}% + \def\@gls@checkedmkidx{}% + \edef\@do@gls@checkesc{% + \noexpand\@gls@checkesc\expandonce{#1}\noexpand\@nil + \@backslashchar\@backslashchar\noexpand\null + }% + \@do@gls@checkesc + \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}% \fi } % \end{macrocode} @@ -9032,6 +9219,40 @@ false,nolabel,autolabel,nameref}[nolabel]{% } % \end{macrocode} %\end{macro} +%\begin{macro}{\@gls@checkesc} +% and for \verb"\": +%\changes{4.47}{2021-09-20}{new} +% \begin{macrocode} +\bgroup +\catcode`\|0\relax +\catcode`\\12\relax +|gdef|@gls@checkesc#1\#2\#3|null{% + |@gls@tmpb=|expandafter{|@gls@checkedmkidx}% + |toks@={#1}% + |ifx|null#2|null + |ifx|null#3|null + |edef|@gls@checkedmkidx{|the|@gls@tmpb|the|toks@}% + |def|@@gls@checkesc{|relax}% + |else + |edef|@gls@checkedmkidx{|the|@gls@tmpb|the|toks@ + |@gls@quotechar|@backslashchar|@gls@quotechar|@backslashchar}% + |def|@@gls@checkesc{|@gls@checkesc#3|null}% + |fi + |else + |edef|@gls@checkedmkidx{|the|@gls@tmpb|the|toks@ + |@gls@quotechar|@backslashchar}% + |ifx|null#3|null + |def|@@gls@checkesc{|@gls@checkesc#2\\|null}% + |else + |def|@@gls@checkesc{|@gls@checkesc#2\#3|null}% + |fi + |fi + |@@gls@checkesc +} +|egroup +% \end{macrocode} +%\end{macro} +% % %\begin{macro}{\@gls@xdycheckquote} % As before but for use with \app{xindy} @@ -12210,8 +12431,9 @@ false,nolabel,autolabel,nameref}[nolabel]{% \bgroup % \end{macrocode} %\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} - \edef\@glo@label{\glsdetoklabel{#1}}% + \protected@edef\@glo@label{\glsdetoklabel{#1}}% \let\@org@glsnumberformat\glsnumberformat \def\glsnumberformat##1{##1}% \protected@edef\the@numberlist{% @@ -12316,7 +12538,10 @@ false,nolabel,autolabel,nameref}[nolabel]{% \glsdoifexists{#2}% {% \def\@glsnumberformat{glsnumberformat}% - \edef\@gls@counter{\csname glo@\glsdetoklabel{#2}@counter\endcsname}% +% \end{macrocode} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@gls@counter{\csname glo@\glsdetoklabel{#2}@counter\endcsname}% \setkeys{glossadd}{#1}% % \end{macrocode} % Store the entry's counter in \cs{theglsentrycounter} @@ -12358,9 +12583,10 @@ false,nolabel,autolabel,nameref}[nolabel]{% % glossary types. %\begin{macro}{\glsaddall} %\changes{3.01}{2011-04-12}{made robust} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \newrobustcmd*{\glsaddall}[1][]{% - \edef\@glo@type{\@glo@types}% + \protected@edef\@glo@type{\@glo@types}% \setkeys{glossadd}{#1}% \forallglsentries[\@glo@type]{\@glo@entry}{% \glsadd[#1]{\@glo@entry}% @@ -13034,6 +13260,22 @@ false,nolabel,autolabel,nameref}[nolabel]{% \noexpand!\noexpand!\noexpand\null \noexpand\expandafter\noexpand\@gls@updatechecked \noexpand\@gls@checkedmkidx{####1}% +% \end{macrocode} +%\changes{4.47}{2021-09-20}{added check for \cs{"!}} +% \begin{macrocode} + \noexpand\def\noexpand\@gls@checkedmkidx{}% + \noexpand\expandafter\noexpand\@gls@checkesclevel####1\noexpand\@nil + \noexpand\!\noexpand\!\noexpand\null + \noexpand\expandafter\noexpand\@gls@updatechecked + \noexpand\@gls@checkedmkidx{####1}% +% \end{macrocode} +%\changes{4.47}{2021-09-20}{added check for backslash} +% \begin{macrocode} + \noexpand\def\noexpand\@gls@checkedmkidx{}% + \noexpand\expandafter\noexpand\@gls@checkesc####1\noexpand\@nil + \@backslashchar\@backslashchar\noexpand\null + \noexpand\expandafter\noexpand\@gls@updatechecked + \noexpand\@gls@checkedmkidx{####1}% }% }% \@gls@docheckquotedef @@ -13409,19 +13651,7 @@ false,nolabel,autolabel,nameref}[nolabel]{% % \end{macrocode} % Activate warning about missing \cs{printglossary} % \begin{macrocode} - \def\warn@noprintglossary{% - \ifdefstring{\@glo@types}{,}% - {% - \GlossariesWarningNoLine{No glossaries have been defined}% - }% - {% - \GlossariesWarningNoLine{No \string\printglossary\space - or \string\printglossaries\space - found. ^^J(Remove \string\makeglossaries\space if you - don't want any glossaries.) ^^JThis document will not - have a glossary}% - }% - }% + \let\warn@noprintglossary\@makeglossaries@warn@noprintglossary % \end{macrocode} % Declare list parser for \cs{glsdisplaynumberlist} %\changes{3.02}{2012-05-21}{added list parser} @@ -13465,6 +13695,26 @@ false,nolabel,autolabel,nameref}[nolabel]{% \@onlypreamble{\makeglossaries} % \end{macrocode} %\end{macro} +% +%\begin{macro}{\@makeglossaries@warn@noprintglossary} +%\changes{4.47}{??}{new} +% \begin{macrocode} +\newcommand\@makeglossaries@warn@noprintglossary{% + \ifdefstring{\@glo@types}{,}% + {% + \GlossariesWarningNoLine{No glossaries have been defined}% + }% + {% + \GlossariesWarningNoLine{No \string\printglossary\space + or \string\printglossaries\space + found. ^^J(Remove \string\makeglossaries\space if you + don't want any glossaries.) ^^JThis document will not + have a glossary}% + }% +}% +% \end{macrocode} +%\end{macro} +% %\begin{macro}{\glswrite} % The definition of \cs{glswrite} has now been moved to % \cs{makeglossaries} so that it's only defined if needed. @@ -13520,9 +13770,10 @@ false,nolabel,autolabel,nameref}[nolabel]{% \let\gls@checkseeallowed\relax % \end{macrocode} % Redefine cross-referencing macro: +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \renewcommand{\@do@seeglossary}[2]{% - \edef\@gls@label{\glsdetoklabel{##1}}% + \protected@edef\@gls@label{\glsdetoklabel{##1}}% \protected@write\@auxout{}{% \string\@gls@reference {\csname glo@\@gls@label @type\endcsname}% @@ -14005,11 +14256,12 @@ you % command that takes a \TeX\ register as the argument % (\verb|\|\meta{csname}\verb|\c@page| must be valid). %\changes{4.11}{2014-09-01}{new} +%\changes{1.46}{2021-09-20}{changed \cs{eappto} to \cs{protected@eappto}} % \begin{macrocode} \newcommand*{\glsaddprotectedpagefmt}[1]{% - \eappto\gls@protected@pagefmts{,\expandonce{\csname gls#1page\endcsname}}% + \protected@eappto\gls@protected@pagefmts{,\expandonce{\csname gls#1page\endcsname}}% \csedef{gls#1page}{\expandonce{\csname#1\endcsname}\noexpand\c@page}% - \eappto\@wrglossarynumberhook{% + \protected@eappto\@wrglossarynumberhook{% \noexpand\let\expandonce{\csname org@gls#1\endcsname}% \expandonce{\csname#1\endcsname}% \noexpand\def\expandonce{\csname#1\endcsname}{% @@ -14085,8 +14337,9 @@ you % \end{macrocode} % De-tok label if required. %\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} - \edef\@gls@label{\glsdetoklabel{#1}}% + \protected@edef\@gls@label{\glsdetoklabel{#1}}% % \end{macrocode} % Write the information to file: % \begin{macrocode} @@ -14271,8 +14524,9 @@ you % \end{macrocode} % De-tok label if required %\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} - \edef\@gls@label{\glsdetoklabel{#1}}% + \protected@edef\@gls@label{\glsdetoklabel{#1}}% % \end{macrocode} % Write the information to file: % \begin{macrocode} @@ -14543,7 +14797,10 @@ you \newcommand*{\gls@save@numberlist}[1]{% \ifglssavenumberlist \toks@{#1}% - \edef\@do@writeaux@info{% +% \end{macrocode} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@do@writeaux@info{% \noexpand\csgdef{glo@\glscurrententrylabel @numberlist}{\the\toks@}% }% \@onelevel@sanitize\@do@writeaux@info @@ -14797,15 +15054,16 @@ you % new \cs{glossentry} and \cs{subglossentry}, but this is now only % needed for backward compatibility): %\changes{4.03}{2014-01-20}{added \cs{glsdetoklabel}} +%\changes{1.46}{2021-09-20}{changed \cs{xdef} to \cs{protected@xdef}} % \begin{macrocode} \let\gls@org@glossaryentryfield\glossentry \let\gls@org@glossarysubentryfield\subglossentry \renewcommand{\glossentry}[1]{% - \xdef\glscurrententrylabel{\glsdetoklabel{##1}}% + \protected@xdef\glscurrententrylabel{\glsdetoklabel{##1}}% \gls@org@glossaryentryfield{##1}% }% \renewcommand{\subglossentry}[2]{% - \xdef\glscurrententrylabel{\glsdetoklabel{##2}}% + \protected@xdef\glscurrententrylabel{\glsdetoklabel{##2}}% \gls@org@glossarysubentryfield{##1}{##2}% }% % \end{macrocode} @@ -14941,7 +15199,10 @@ you \glosortentrieswarning \def\@glo@sortinglist{}% \def\@glo@sortinghandler{#1}% - \edef\@glo@type{#2}% +% \end{macrocode} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\@glo@type{#2}% \forlistcsloop{\@glo@do@sortentries}{@glsref@#2}% \csdef{@glsref@#2}{}% \@for\@this@label:=\@glo@sortinglist\do{% @@ -15007,8 +15268,9 @@ you {% % \end{macrocode} % This entry has a parent, so add it to the child list +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} - \edef\@glo@parent{\csuse{glo@\glsdetoklabel{#1}@parent}}% + \protected@edef\@glo@parent{\csuse{glo@\glsdetoklabel{#1}@parent}}% \ifcsundef{@glo@sortingchildren@\@glo@parent}% {% \csdef{@glo@sortingchildren@\@glo@parent}{}% @@ -15331,6 +15593,7 @@ you % %\begin{macro}{\glo@grabfirst} %\changes{4.04}{2014-03-06}{new} +%This won't work for UTF-8 and \sty{inputenc}. % \begin{macrocode} \def\glo@grabfirst#1#2\@nil{% \def\@gls@firsttok{#1}% @@ -15843,7 +16106,10 @@ you % \begin{macrocode} \newcommand*{\glsstepsubentry}[1]{% \ifglssubentrycounter - \edef\currentglssubentry{\glsdetoklabel{#1}}% +% \end{macrocode} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\currentglssubentry{\glsdetoklabel{#1}}% \refstepcounter{glossarysubentry}% \label{\GlsEntryCounterLabelPrefix\currentglssubentry}% \fi @@ -16506,8 +16772,11 @@ you \def\@gls@removespaces#1 #2\@nil{% \toks@=\expandafter{\the\toks@#1}% \ifx\\#2\\% - \edef\x{\the\toks@}% - \ifx\x\empty +% \end{macrocode} +%\changes{4.47}{2021-09-20}{changed \cs{x} to \cs{@gls@x}} +% \begin{macrocode} + \edef\@gls@x{\the\toks@}% + \ifx\@gls@x\empty \else % \end{macrocode} %\changes{3.0}{2011-04-02}{added prefix to hyperlink} @@ -18001,9 +18270,50 @@ you \let\gls@assign@firstpl\@org@gls@assign@firstpl \let\gls@assign@plural\@org@gls@assign@plural \let\gls@assign@symbolplural\@org@gls@assign@symbolplural +% \end{macrocode} +% If expansion is switched off, the default plurals won't be properly set. +% \begin{macrocode} + \@@gls@noexpand@assign@default@plurals +} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\@@gls@noexpand@assign@default@plurals} +%\changes{4.47}{2021-09-20}{new} +% \begin{macrocode} +\newcommand*{\@@gls@noexpand@assign@default@plurals}{% + \expandafter\ifx\csname glo@\the\glslabeltok @plural\endcsname\@@gls@@default@acr@plural + \csxdef{glo@\the\glslabeltok @plural}{\expandonce\@glo@shortpl}% + \fi + \expandafter\ifx\csname glo@\the\glslabeltok @firstpl\endcsname\@@gls@@default@acr@firstplural + \csxdef{glo@\the\glslabeltok @firstpl}{% + \expandonce\@glo@longpl\glsspace(\expandonce\@glo@shortpl)}% + \fi + \expandafter\ifx\csname glo@\the\glslabeltok @descplural\endcsname\@@gls@@default@acr@descplural + \csxdef{glo@\the\glslabeltok @descplural}{\expandonce\@glo@longpl}% + \fi +} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\@@gls@@default@acr@plural} +%\changes{4.47}{2021-09-20}{new} +% \begin{macrocode} +\newcommand*{\@@gls@@default@acr@plural}{\expandonce\@glo@shortpl} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\@@gls@@default@acr@firstplural} +%\changes{4.47}{2021-09-20}{new} +% \begin{macrocode} +\newcommand*{\@@gls@@default@acr@firstplural}{% + \expandonce\@glo@longpl\glsspace(\expandonce\@glo@shortpl)% } % \end{macrocode} %\end{macro} +%\begin{macro}{\@@gls@@default@acr@descplural} +%\changes{4.47}{2021-09-20}{new} +% \begin{macrocode} +\newcommand*{\@@gls@@default@acr@descplural}{\expandonce\@glo@longpl} +% \end{macrocode} +%\end{macro} %\begin{macro}{\SetDefaultAcronymStyle} %\changes{2.04}{2009-11-10}{new} % Set up the default acronym style: @@ -18151,8 +18461,23 @@ you % key. Note that since the long form is stored in the symbol key, % if you want the long form to appear in the list of acronyms, you % need to use a glossary style that displays the symbol key. +% This style was deprecated with the introduction of +% \cs{newacronymstyle}. +%\changes{4.47}{2021-09-20}{added deprecated warnings} % \begin{macrocode} \newcommand*{\SetDescriptionFootnoteAcronymStyle}{% + \ifglsacrsmallcaps + \@gls@deprecated@acr@warning{footnote,smallcaps,description}% + {footnote-sc-desc}{short-sc-footnote-desc}% + \else + \ifglsacrsmaller + \@gls@deprecated@acr@warning{footnote,smaller,description}% + {footnote-sm-desc}{short-sm-footnote-desc}% + \else + \@gls@deprecated@acr@warning{footnote,description}% + {footnote-desc}{short-footnote-desc}% + \fi + \fi \renewcommand{\newacronym}[4][]{% \ifx\@glsacronymlists\@empty \def\@glo@type{\acronymtype}% @@ -18264,6 +18589,9 @@ you % Note that the short form is stored in the \gloskey{symbol} key, % so if the short form needs to be displayed in the glossary, % use a style the displays the symbol. +% This style was deprecated with the introduction of +% \cs{newacronymstyle}. +%\changes{4.47}{2021-09-20}{added deprecated warning} % \begin{macrocode} \newcommand*{\SetDescriptionDUAAcronymStyle}{% \ifglsacrsmallcaps @@ -18275,6 +18603,7 @@ you can't both be set}{}% \fi \fi + \@gls@deprecated@acr@warning{dua,description}{dua-desc}{long-noshort-desc}% \renewcommand{\newacronym}[4][]{% \ifx\@glsacronymlists\@empty \def\@glo@type{\acronymtype}% @@ -18399,6 +18728,18 @@ you % list of acronyms. % \begin{macrocode} \newcommand*{\SetDescriptionAcronymStyle}{% + \ifglsacrsmallcaps + \@gls@deprecated@acr@warning{smallcaps,description}% + {long-sc-short-desc}{long-short-sc-desc}% + \else + \ifglsacrsmaller + \@gls@deprecated@acr@warning{smaller,description}% + {long-sm-short-desc}{long-short-sm-desc}% + \else + \@gls@deprecated@acr@warning{description}% + {long-short-desc}{long-short-desc}% + \fi + \fi \renewcommand{\newacronym}[4][]{% \ifx\@glsacronymlists\@empty \def\@glo@type{\acronymtype}% @@ -18531,8 +18872,20 @@ you % use to append the long form (stored in \gloskey{description}) as a % footnote. % Use the \gloskey{description} key to store the long form. +% This style was deprecated with the introduction of +% \cs{newacronymstyle}. +%\changes{4.47}{2021-09-20}{added deprecated warnings} % \begin{macrocode} \newcommand*{\SetFootnoteAcronymStyle}{% + \ifglsacrsmallcaps + \@gls@deprecated@acr@warning{footnote,smallcaps}{footnote-sc}{short-sc-footnote}% + \else + \ifglsacrsmaller + \@gls@deprecated@acr@warning{footnote,smaller}{footnote-sm}{short-sm-footnote}% + \else + \@gls@deprecated@acr@warning{footnote}{footnote}{short-footnote}% + \fi + \fi \renewcommand{\newacronym}[4][]{% \ifx\@glsacronymlists\@empty \def\@glo@type{\acronymtype}% @@ -18713,8 +19066,16 @@ you % smaller specified. % Use the \gloskey{symbol} key to store the short form and % \gloskey{first} to store the long form. +% This style was deprecated with the introduction of +% \cs{newacronymstyle}. +%\changes{4.47}{2021-09-20}{added deprecated warnings} % \begin{macrocode} \newcommand*{\SetSmallAcronymStyle}{% + \ifglsacrsmallcaps + \@gls@deprecated@acr@warning{smallcaps}{long-sc-short}{long-short-sc}% + \else + \@gls@deprecated@acr@warning{smaller}{long-sm-short}{long-short-sm}% + \fi \renewcommand{\newacronym}[4][]{% \ifx\@glsacronymlists\@empty \def\@glo@type{\acronymtype}% @@ -18825,8 +19186,12 @@ you %\end{macro} %\begin{macro}{\SetDUAStyle} % Always expand acronyms. +% This style was deprecated with the introduction of +% \cs{newacronymstyle}. +%\changes{4.47}{2021-09-20}{added deprecated warnings} % \begin{macrocode} \newcommand*{\SetDUAStyle}{% + \@gls@deprecated@acr@warning{dua}{dua}{long-noshort}% \renewcommand{\newacronym}[4][]{% \ifx\@glsacronymlists\@empty \def\@glo@type{\acronymtype}% @@ -18851,6 +19216,18 @@ you % \end{macrocode} %\end{macro} % +%\begin{macro}{\@gls@deprecated@acr@warning} +%\changes{4.47}{2021-09-20}{new} +% \begin{macrocode} +\newcommand*{\@gls@deprecated@acr@warning}[3]{% + \GlossariesWarning{Acronym style option #1 deprecated. + Use \string\setacronymstyle{#2} with just glossaries.sty or + use \string\setabbreviationstyle[acronym]{#3} with + glossaries-extra.sty}% +} +% \end{macrocode} +%\end{macro} +% %\begin{macro}{\SetAcronymStyle} % \begin{macrocode} \newcommand*{\SetAcronymStyle}{% @@ -19488,7 +19865,7 @@ you % \cs{gls}\marg{label}} on subsequent use. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{glossaries-prefix}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossaries-prefix}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % Pass all options to \sty{glossaries}: % \begin{macrocode} @@ -19953,7 +20330,7 @@ you %\label{sec:code:hypernav} % Package Definition: % \begin{macrocode} -\ProvidesPackage{glossary-hypernav}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossary-hypernav}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % % The commands defined in this package are provided to @@ -19975,7 +20352,10 @@ you %\cs{@glslink}} % \begin{macrocode} \newcommand*{\glsnavhyperlink}[3][\@glo@type]{% - \edef\gls@grplabel{#2}\protected@edef\@gls@grptitle{#3}% +% \end{macrocode} +%\changes{4.47}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} +% \begin{macrocode} + \protected@edef\gls@grplabel{#2}\protected@edef\@gls@grptitle{#3}% \@glslink{\glsnavhyperlinkname{#1}{#2}}{#3}} % \end{macrocode} %\end{macro} @@ -20149,7 +20529,7 @@ you % This defines an in-line style where the entries are % comma-separated with just the name and description displayed. % \begin{macrocode} -\ProvidesPackage{glossary-inline}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossary-inline}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % %\begin{style}{inline} @@ -20340,7 +20720,7 @@ you % \ics{item} command, it will appear in a bold font by % default. % \begin{macrocode} -\ProvidesPackage{glossary-list}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossary-list}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} %\begin{macro}{\indexspace} %\changes{4.13}{2015-02-03}{new} @@ -20622,7 +21002,7 @@ you % The glossary styles defined in the \isty{glossary-long} package % used the \env{longtable} environment in the glossary. % \begin{macrocode} -\ProvidesPackage{glossary-long}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossary-long}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % Requires the \isty{longtable} package: % \begin{macrocode} @@ -21119,7 +21499,7 @@ you % \url{http://tex.stackexchange.com/a/56890} % % \begin{macrocode} -\ProvidesPackage{glossary-longbooktabs}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossary-longbooktabs}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % Requires \sty{booktabs} package: % \begin{macrocode} @@ -21460,7 +21840,7 @@ you % used the \env{longtable} environment in the glossary and use % ragged right formatting for the multiline columns. % \begin{macrocode} -\ProvidesPackage{glossary-longragged}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossary-longragged}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % Requires the \isty{array} package: % \begin{macrocode} @@ -21893,7 +22273,7 @@ you %use the \sty{multicol} package. These use the tree-like glossary %styles in a multicol environment. % \begin{macrocode} -\ProvidesPackage{glossary-mcols}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossary-mcols}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % Required packages: % \begin{macrocode} @@ -22330,7 +22710,7 @@ you % The glossary styles defined in the \isty{glossary-super} package % use the \env{supertabular} environment. % \begin{macrocode} -\ProvidesPackage{glossary-super}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossary-super}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % Requires the \isty{supertabular} package: % \begin{macrocode} @@ -22862,7 +23242,7 @@ you % are like those provided by the \isty{glossary-super} package, % except that the multiline columns have ragged right justification. % \begin{macrocode} -\ProvidesPackage{glossary-superragged}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossary-superragged}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % Requires the \isty{array} package: % \begin{macrocode} @@ -23302,7 +23682,7 @@ you % that have a tree-like structure. These are designed for % hierarchical glossaries. % \begin{macrocode} -\ProvidesPackage{glossary-tree}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossary-tree}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % %\begin{macro}{\indexspace} @@ -24023,7 +24403,7 @@ you % hyperlinks may not work properly. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{glossaries-compatible-207}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossaries-compatible-207}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} %\begin{macro}{\GlsAddXdyAttribute} % Adds an attribute in old format. @@ -24384,7 +24764,7 @@ you %\section{glossaries-compatible-307} % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{glossaries-compatible-307}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossaries-compatible-307}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % % Compatibility macros for predefined glossary styles: @@ -25192,7 +25572,7 @@ you % \end{macrocode} % Package version number now in line with main glossaries package number. % \begin{macrocode} -\ProvidesPackage{glossaries-accsupp}[2020/03/19 v4.46 (NLCT) +\ProvidesPackage{glossaries-accsupp}[2021/09/20 v4.47 (NLCT) Experimental glossaries accessibility] % \end{macrocode} % Pass all options to \sty{glossaries}: @@ -28103,9 +28483,10 @@ you % % Use \cs{newacronymhook} to modify the key list to set % the access text to the long version by default. +%\changes{1.46}{2021-09-20}{changed \cs{edef} to \cs{protected@edef}} % \begin{macrocode} \renewcommand*{\newacronymhook}{% - \edef\@gls@keylist{% + \protected@edef\@gls@keylist{% shortaccess={\glsdefaultshortaccess{\the\glslongtok}{\the\glsshorttok}},% shortpluralaccess={\glsdefaultshortaccess{\the\glslongtok}{\the\glsshorttok}},% \the\glskeylisttok}% @@ -28163,6 +28544,7 @@ you \let\gls@assign@firstpl\@org@gls@assign@firstpl \let\gls@assign@plural\@org@gls@assign@plural \let\gls@assign@symbolplural\@org@gls@assign@symbolplural + \@@gls@noexpand@assign@default@plurals } % \end{macrocode} %\end{macro} @@ -28498,7 +28880,7 @@ you % modules. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{glossaries-babel}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossaries-babel}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % Load \sty{tracklang} to obtain language settings. % \begin{macrocode} @@ -28542,7 +28924,7 @@ you % modules. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{glossaries-polyglossia}[2020/03/19 v4.46 (NLCT)] +\ProvidesPackage{glossaries-polyglossia}[2021/09/20 v4.47 (NLCT)] % \end{macrocode} % Load \sty{tracklang} to obtain language settings. % \begin{macrocode} @@ -28882,6 +29264,181 @@ risus ut urna} %\fi %\iffalse % \begin{macrocode} +%<*example-glossaries-childmultipar.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%< +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} %<*example-glossaries-childnoname.tex> % \end{macrocode} %\fi @@ -29470,6 +30027,140 @@ bibendum quam in tellus.}} %\fi %\iffalse % \begin{macrocode} +%<*example-glossaries-longchild.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%< +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} %<*example-glossaries-multipar.tex> % \end{macrocode} %\fi @@ -29950,6 +30641,8181 @@ amet, libero}, %\fi %\iffalse % \begin{macrocode} +%<*glossaries-2020-03-19.sty> +% \end{macrocode} +%\fi +% \section{Rollback v4.46 (glossaries-2020-03-19.sty)} +% Version 4.46 preserved for rollback. +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{glossaries}[2020/03/19 v4.46 (NLCT)] +\RequirePackage{ifthen} +\RequirePackage{xkeyval}[2006/11/18] +\RequirePackage{mfirstuc} +\RequirePackage{textcase} +\renewcommand*{\mfirstucMakeUppercase}{\MakeTextUppercase}% +\RequirePackage{xfor} +\RequirePackage{datatool-base} +\RequirePackage{amsgen} +\RequirePackage{etoolbox} +\newif\if@gls@docloaded +\@ifpackageloaded{doc}% +{% + \@gls@docloadedtrue +}% +{% + \@ifclassloaded{nlctdoc}{\@gls@docloadedtrue}{\@gls@docloadedfalse}% +} +\if@gls@docloaded + \let\glsorg@theglossary\theglossary + \let\glsorg@endtheglossary\endtheglossary + \let\glsorg@PrintChanges\PrintChanges + \renewcommand{\PrintChanges}{% + \begingroup + \let\theglossary\glsorg@theglossary + \let\endtheglossary\glsorg@endtheglossary + \glsorg@PrintChanges + \endgroup + } +\fi +\newif\if@gls@debug +\define@choicekey{glossaries.sty}{debug}[\gls@debug@val\gls@debug@nr]% + {true,false,showtargets,showaccsupp}[true]{% + \ifcase\gls@debug@nr\relax + % debug=true + \@gls@debugtrue + \renewcommand*{\GlossariesWarning}[1]{% + \PackageWarning{glossaries}{##1}% + }% + \renewcommand*{\GlossariesWarningNoLine}[1]{% + \PackageWarningNoLine{glossaries}{##1}% + }% + \let\@glsshowtarget\@gobble + \PackageInfo{glossaries}{debug mode ON (nowarn option disabled)}% + \or + % debug=false + \@gls@debugfalse + \let\@glsshowtarget\@gobble + \let\@glsshowaccsupp\@gobblethree + \PackageInfo{glossaries}{debug mode OFF}% + \or + % debug=showtargets + \@gls@debugtrue + \renewcommand*{\GlossariesWarning}[1]{% + \PackageWarning{glossaries}{##1}% + }% + \renewcommand*{\GlossariesWarningNoLine}[1]{% + \PackageWarningNoLine{glossaries}{##1}% + }% + \PackageInfo{glossaries}{debug mode ON (nowarn option disabled)}% + \renewcommand{\@glsshowtarget}{\@@glsshowtarget}% + \or + % debug=showaccsupp + \@gls@debugtrue + \renewcommand*{\GlossariesWarning}[1]{% + \PackageWarning{glossaries}{##1}% + }% + \renewcommand*{\GlossariesWarningNoLine}[1]{% + \PackageWarningNoLine{glossaries}{##1}% + }% + \PackageInfo{glossaries}{debug mode ON (nowarn option disabled)}% + \renewcommand{\@glsshowaccsupp}{\glsshowaccsupp}% + \fi +} +\newcommand*{\glsshowtarget}[1]{% + \ifmmode + \nfss@text{\glsshowtargetfont [#1]}% + \else + \ifinner + {\glsshowtargetfont [#1]}% + \else + \glsshowtargetouter{#1}% + \fi + \fi +} +\newcommand*{\glsshowtargetouter}[1]{% + \glsshowtargetsymbol\marginpar{\glsshowtargetsymbol\glsshowtargetfont #1}} +\newcommand*{\glsshowtargetsymbol}{{\tiny$\triangleright$}} +\newcommand*{\glsshowtargetfont}{\ttfamily\footnotesize} +\newcommand*{\@glsshowtarget}[1]{} +\newrobustcmd*{\@@glsshowtarget}[1]{% + \begingroup + \protected@edef\@gls@tmp{#1}% + \@onelevel@sanitize\@gls@tmp + \expandafter\glsshowtarget\expandafter{\@gls@tmp}% + \endgroup +} +\newcommand*{\@glsshowaccsupp}[3]{} +\newrobustcmd*{\glsshowaccsupp}[3]{% + \ifstrempty{#1}% + {\@@glsshowtarget{/#2 (#3)}}% + {\@@glsshowtarget{/#2 (#3) [#1]}}% +} +\newcommand*{\@gls@see@noindex}{% + \PackageError{glossaries}% + {`\gls@xr@key' key may only be used after \string\makeglossaries\space + or \string\makenoidxglossaries\space (or move + \string\newglossaryentry\space + definitions into the preamble)}% + {You must use \string\makeglossaries\space + or \string\makenoidxglossaries\space before defining + any entries that have a `\gls@xr@key' key. It may + be that the `see' key has been written to the .glsdefs + file from the previous run, in which case you need to + move your definitions + to the preamble if you don't want to use + \string\makeglossaries\space + or \string\makenoidxglossaries}% +} +\define@choicekey{glossaries.sty}{seenoindex}% + [\gls@seenoindex@val\gls@seenoindex@nr]{error,warn,ignore}{% + \ifcase\gls@seenoindex@nr + \renewcommand*{\@gls@see@noindex}{% + \PackageError{glossaries}% + {`\gls@xr@key' key may only be used after \string\makeglossaries\space + or \string\makenoidxglossaries}% + {You must use \string\makeglossaries\space + or \string\makenoidxglossaries\space before defining + any entries that have a `\gls@xr@key' key}% + }% + \or + \renewcommand*{\@gls@see@noindex}{% + \GlossariesWarning{`\gls@xr@key' key ignored}% + }% + \or + \renewcommand*{\@gls@see@noindex}{}% + \fi +} +\define@boolkey{glossaries.sty}[gls]{toc}[true]{} +\define@boolkey{glossaries.sty}[gls]{numberline}[true]{} +\ifcsundef{chapter}% + {\newcommand*{\@@glossarysec}{section}}% + {\newcommand*{\@@glossarysec}{chapter}} +\define@choicekey{glossaries.sty}{section}{part,chapter,section,% +subsection,subsubsection,paragraph,subparagraph}[section]{% + \renewcommand*{\@@glossarysec}{#1}} +\newcommand*{\@@glossarysecstar}{*} +\newcommand*{\@@glossaryseclabel}{} +\newcommand*{\glsautoprefix}{} +\define@choicekey{glossaries.sty}{numberedsection}% + [\gls@numberedsection@val\gls@numberedsection@nr]{% +false,nolabel,autolabel,nameref}[nolabel]{% + \ifcase\gls@numberedsection@nr\relax + \renewcommand*{\@@glossarysecstar}{*}% + \renewcommand*{\@@glossaryseclabel}{}% + \or + \renewcommand*{\@@glossarysecstar}{}% + \renewcommand*{\@@glossaryseclabel}{}% + \or + \renewcommand*{\@@glossarysecstar}{}% + \renewcommand*{\@@glossaryseclabel}{% + \label{\glsautoprefix\@glo@type}}% + \or + \renewcommand*{\@@glossarysecstar}{*}% + \renewcommand*{\@@glossaryseclabel}{% + \protected@edef\@currentlabelname{\glossarytoctitle}% + \label{\glsautoprefix\@glo@type}}% + \fi +} +\@ifpackageloaded{classicthesis} +{\newcommand*{\@glossary@default@style}{index}} +{\newcommand*{\@glossary@default@style}{list}} +\define@key{glossaries.sty}{style}{% + \def\@glossary@default@style{#1}% +} +\newcommand*{\@gls@declareoption}[2]{% + \DeclareOptionX{#1}{#2}% + \DeclareOption{#1}{#2}% +} +\newcommand*{\glossaryentrynumbers}[1]{#1\gls@save@numberlist{#1}} +\@gls@declareoption{nonumberlist}{% + \renewcommand*{\glossaryentrynumbers}[1]{\gls@save@numberlist{#1}}% +} +\define@boolkey{glossaries.sty}[gls]{savenumberlist}[true]{} +\glssavenumberlistfalse +\newcommand*\@glo@seeautonumberlist{} +\@gls@declareoption{seeautonumberlist}{% + \renewcommand*{\@glo@seeautonumberlist}{% + \def\@glo@prefix{\glsnextpages}% + }% +} +\define@boolkey{glossaries.sty}[gls]{esclocations}[true]{} +\glsesclocationstrue +\newcommand*{\@gls@loadlong}{\RequirePackage{glossary-long}} +\@gls@declareoption{nolong}{\renewcommand*{\@gls@loadlong}{}} +\IfFileExists{supertabular.sty}{% + \newcommand*{\@gls@loadsuper}{\RequirePackage{glossary-super}}}{% + \newcommand*{\@gls@loadsuper}{}} +\@gls@declareoption{nosuper}{\renewcommand*{\@gls@loadsuper}{}} +\newcommand*{\@gls@loadlist}{\RequirePackage{glossary-list}} +\@gls@declareoption{nolist}{% + \renewcommand*{\@gls@loadlist}{% + \ifdefstring{\@glossary@default@style}{list}% + {\let\@glossary@default@style\relax}% + {}% + }% +} +\newcommand*{\@gls@loadtree}{\RequirePackage{glossary-tree}} +\@gls@declareoption{notree}{\renewcommand*{\@gls@loadtree}{}} +\@gls@declareoption{nostyles}{% + \renewcommand*{\@gls@loadlong}{}% + \renewcommand*{\@gls@loadsuper}{}% + \renewcommand*{\@gls@loadlist}{}% + \renewcommand*{\@gls@loadtree}{}% + \let\@glossary@default@style\relax +} +\newcommand*{\glspostdescription}{% + \ifglsnopostdot\else.\spacefactor\sfcode`\. \fi +} +\define@boolkey{glossaries.sty}[gls]{nopostdot}[true]{} +\glsnopostdotfalse +\define@boolkey{glossaries.sty}[gls]{nogroupskip}[true]{} +\glsnogroupskipfalse +\define@boolkey{glossaries.sty}[gls]{ucmark}[true]{} +\@ifclassloaded{memoir} +{% + \glsucmarktrue +}% +{% + \glsucmarkfalse +} +\newcommand*{\@gls@define@glossaryentrycounter}{% + \ifglsentrycounter + \ifundef\c@glossaryentry + {% + \ifx\@gls@counterwithin\@empty + \newcounter{glossaryentry}% + \else + \newcounter{glossaryentry}[\@gls@counterwithin]% + \fi + \def\theHglossaryentry{\currentglossary.\theglossaryentry}% + }% + {}% + \fi +} +\define@boolkey{glossaries.sty}[gls]{entrycounter}[true]{} +\glsentrycounterfalse +\define@key{glossaries.sty}{counterwithin}{% + \renewcommand*{\@gls@counterwithin}{#1}% + \glsentrycountertrue + \@gls@define@glossaryentrycounter +} +\newcommand*{\@gls@counterwithin}{} +\newcommand{\@gls@define@glossarysubentrycounter}{% + \ifundef\c@glossarysubentry + {% + \ifglssubentrycounter + \ifglsentrycounter + \newcounter{glossarysubentry}[glossaryentry]% + \else + \newcounter{glossarysubentry}% + \fi + \def\theHglossarysubentry{\currentglossary.\currentglssubentry.\theglossarysubentry}% + \fi + }% + {}% +} +\define@boolkey{glossaries.sty}[gls]{subentrycounter}[true]{} +\glssubentrycounterfalse +\newcommand*{\@glo@default@sorttype}{standard} +\define@choicekey{glossaries.sty}{sort}{standard,def,use,none}{% + \renewcommand*{\@glo@default@sorttype}{#1}% + \csname @gls@setupsort@#1\endcsname +} +\newcommand*{\glsprestandardsort}[3]{% + \glsdosanitizesort +} +\newcommand*{\@glo@check@sortallowed}[1]{} +\newcommand*{\@gls@setupsort@standard}{% + \def\do@glo@storeentry{\@glo@storeentry}% + \def\@gls@defsortcount##1{}% + \def\@gls@defsort##1##2{% + \ifx\@glo@sort\@glsdefaultsort + \let\@glo@sort\@glo@name + \fi + \let\glsdosanitizesort\@gls@sanitizesort + \glsprestandardsort{\@glo@sort}{##1}{##2}% + \expandafter\protected@xdef\csname glo@##2@sort\endcsname{\@glo@sort}% + }% + \def\@gls@setsort##1{}% + \let\@glo@check@sortallowed\@gobble +} +\@gls@setupsort@standard +\newcommand*\glssortnumberfmt[1]{% + \ifnum#1<100000 0\fi + \ifnum#1<10000 0\fi + \ifnum#1<1000 0\fi + \ifnum#1<100 0\fi + \ifnum#1<10 0\fi + \number#1% +} +\newcommand*{\@gls@setupsort@def}{% + \def\do@glo@storeentry{\@glo@storeentry}% + \def\@gls@defsortcount##1{% + \expandafter\global + \expandafter\newcount\csname glossary@##1@sortcount\endcsname + }% + \def\@gls@defsort##1##2{% + \ifcsundef{glossary@##1@sortcount}% + {\@gls@defsortcount{##1}}% + {}% + \expandafter\global\expandafter + \advance\csname glossary@##1@sortcount\endcsname by 1\relax + \expandafter\protected@xdef\csname glo@##2@sort\endcsname{% + \expandafter\glssortnumberfmt + {\csname glossary@##1@sortcount\endcsname}}% + }% + \def\@gls@setsort##1{}% + \let\@glo@check@sortallowed\@gobble +} +\newcommand*{\@gls@setupsort@use}{% + \let\do@glo@storeentry\@gobble + \def\@gls@defsortcount##1{% + \expandafter\global + \expandafter\newcount\csname glossary@##1@sortcount\endcsname + }% + \def\@gls@defsort##1##2{% + \expandafter\gdef\csname glo@##2@sort\endcsname{}% + }% + \def\@gls@setsort##1{% + \edef\@glo@parent{\csname glo@##1@parent\endcsname}% + \ifx\@glo@parent\@empty + \else + \expandafter\@gls@setsort\expandafter{\@glo@parent}% + \fi + \edef\@glo@type{\csname glo@##1@type\endcsname}% + \edef\@gls@tmp{\csname glo@##1@sort\endcsname}% + \ifx\@gls@tmp\@empty + \expandafter\global\expandafter + \advance\csname glossary@\@glo@type @sortcount\endcsname by 1\relax + \expandafter\protected@xdef\csname glo@##1@sort\endcsname{% + \expandafter\glssortnumberfmt + {\csname glossary@\@glo@type @sortcount\endcsname}}% + \@glo@storeentry{##1}% + \fi + }% + \let\@glo@check@sortallowed\@gobble +} +\newcommand*{\@gls@setupsort@none}{% + \def\do@glo@storeentry##1{}% + \def\@gls@defsortcount##1{}% + \def\@gls@defsort##1##2{% + \expandafter\global\expandafter\let\csname glo@##2@sort\endcsname\@glo@sort + }% + \def\@gls@setsort##1{}% + \renewcommand\@glo@check@sortallowed[1]{\PackageError{glossaries} + {Option sort=none not allowed with \string##1}% + {(Use sort=def instead)}}% +} +\newcommand*{\glsdefmain}{% + \if@gls@docloaded + \newglossary[glg2]{main}{gls2}{glo2}{\glossaryname}% + \else + \newglossary{main}{gls}{glo}{\glossaryname}% + \fi + \newcommand*{\gls@tr@set@main@toctitle}{% + \translatelet{\glossarytoctitle}{Glossary}% + }% +} +\newcommand*{\glsdefaulttype}{main} +\newcommand*{\acronymtype}{\glsdefaulttype} +\@gls@declareoption{nomain}{% + \let\glsdefaulttype\relax + \renewcommand*{\glsdefmain}{}% +} +\define@boolkey{glossaries.sty}[gls]{acronym}[true]{% + \ifglsacronym + \renewcommand{\@gls@do@acronymsdef}{% + \DeclareAcronymList{acronym}% + \newglossary[alg]{acronym}{acr}{acn}{\acronymname}% + \renewcommand*{\acronymtype}{acronym}% + \newcommand*{\gls@tr@set@acronym@toctitle}{% + \translatelet{\glossarytoctitle}{Acronyms}% + }% + }% + \else + \let\@gls@do@acronymsdef\relax + \fi +} +\AtBeginDocument{% + \ifglsacronym + \ifbool{glscompatible-3.07}% + {}% + {% + \providecommand*{\printacronyms}[1][]{% + \printglossary[type=\acronymtype,#1]}% + }% + \fi +} +\newcommand*{\@gls@do@acronymsdef}{} +\@gls@declareoption{acronyms}{% + \glsacronymtrue + \def\@gls@do@acronymsdef{% + \DeclareAcronymList{acronym}% + \newglossary[alg]{acronym}{acr}{acn}{\acronymname}% + \renewcommand*{\acronymtype}{acronym}% + \newcommand*{\gls@tr@set@acronym@toctitle}{% + \translatelet{\glossarytoctitle}{Acronyms}% + }% + }% +} +\newcommand*{\@glsacronymlists}{} +\newcommand*{\@addtoacronymlists}[1]{% + \ifx\@glsacronymlists\@empty + \protected@xdef\@glsacronymlists{#1}% + \else + \protected@xdef\@glsacronymlists{\@glsacronymlists,#1}% + \fi +} +\newcommand*{\DeclareAcronymList}[1]{% + \glsIfListOfAcronyms{#1}{}{\@addtoacronymlists{#1}}% +} +\newcommand{\glsIfListOfAcronyms}[1]{% + \edef\@do@gls@islistofacronyms{% + \noexpand\@gls@islistofacronyms{#1}{\@glsacronymlists}}% + \@do@gls@islistofacronyms +} +\newcommand{\@gls@islistofacronyms}[4]{% + \def\gls@islistofacronyms##1,#1,##2\end@gls@islistofacronyms{% + \def\@gls@before{##1}\def\@gls@after{##2}}% + \gls@islistofacronyms,#2,#1,\@nil\end@gls@islistofacronyms + \ifx\@gls@after\@nnil + #4% + \else + #3% + \fi +} +\newif\if@glsisacronymlist +\newcommand*{\gls@checkisacronymlist}[1]{% + \glsIfListOfAcronyms{#1}% + {\@glsisacronymlisttrue}{\@glsisacronymlistfalse}% +} +\newcommand*{\SetAcronymLists}[1]{% + \renewcommand*{\@glsacronymlists}{#1}% +} +\define@key{glossaries.sty}{acronymlists}{% + \DeclareAcronymList{#1}% +} +\newcommand{\glscounter}{page} +\define@key{glossaries.sty}{counter}{% + \renewcommand*{\glscounter}{#1}% +} +\newcommand*{\@gls@nohyperlist}{} +\newcommand*{\GlsDeclareNoHyperList}[1]{% + \ifdefempty\@gls@nohyperlist + {% + \renewcommand*{\@gls@nohyperlist}{#1}% + }% + {% + \appto\@gls@nohyperlist{,#1}% + }% +} +\define@key{glossaries.sty}{nohypertypes}{% + \GlsDeclareNoHyperList{#1}% +} +\newcommand*{\GlossariesWarning}[1]{% + \PackageWarning{glossaries}{#1}% +} +\newcommand*{\GlossariesWarningNoLine}[1]{% + \PackageWarningNoLine{glossaries}{#1}% +} +\newcommand{\glosortentrieswarning}{% + \typeout{Using TeX to sort glossary entries---this may + take a while}% +} +\@gls@declareoption{nowarn}{% + \if@gls@debug + \GlossariesWarning{Warnings can't be suppressed in debug mode}% + \else + \renewcommand*{\GlossariesWarning}[1]{}% + \renewcommand*{\GlossariesWarningNoLine}[1]{}% + \renewcommand*{\glosortentrieswarning}{}% + \renewcommand*{\@gls@missinglang@warn}[2]{}% + \fi +} +\newcommand*{\@gls@missinglang@warn}[2]{% + \PackageWarningNoLine{glossaries}% + {No language module detected for `#1'.\MessageBreak + Language modules need to be installed separately.\MessageBreak + Please check on CTAN for a bundle called\MessageBreak + `glossaries-#2' or similar}% +} +\@gls@declareoption{nolangwarn}{% + \renewcommand*{\@gls@missinglang@warn}[2]{}% +} +\newcommand*{\@gls@warnonglossdefined}{% + \GlossariesWarning{Overriding \string\printglossary}% +} +\newcommand*{\@gls@warnontheglossdefined}{% + \GlossariesWarning{Overriding `theglossary' environment}% +} +\@gls@declareoption{noredefwarn}{% + \renewcommand*{\@gls@warnonglossdefined}{}% + \renewcommand*{\@gls@warnontheglossdefined}{}% +} +\newcommand*{\@gls@sanitizedesc}{% +} +\newcommand*{\glssetexpandfield}[1]{% + \csdef{gls@assign@#1@field}##1##2{% + \@@gls@expand@field{##1}{#1}{##2}% + }% +} +\newcommand*{\glssetnoexpandfield}[1]{% + \csdef{gls@assign@#1@field}##1##2{% + \@@gls@noexpand@field{##1}{#1}{##2}% + }% +} +\glssetexpandfield{type} +\glssetnoexpandfield{desc} +\glssetnoexpandfield{descplural} +\newcommand*{\@gls@sanitizename}{} +\glssetnoexpandfield{name} +\newcommand*{\@gls@sanitizesymbol}{} +\glssetnoexpandfield{symbol} +\glssetnoexpandfield{symbolplural} +\newcommand*{\@gls@sanitizesort}{% + \ifglssanitizesort + \@@gls@sanitizesort + \else + \@@gls@nosanitizesort + \fi +} +\newcommand*\@@gls@sanitizesort{% + \@onelevel@sanitize\@glo@sort +} +\newcommand*{\@@gls@nosanitizesort}{} +\newcommand*\@gls@noidx@sanitizesort{% + \ifdefvoid\@glo@sort + {}% + {% + \expandafter\@@gls@noidx@sanitizesort\@glo@sort\gls@end@sanitizesort + }% +} +\def\@@gls@noidx@sanitizesort#1#2\gls@end@sanitizesort{% + \def\@glo@sort{#1#2}% + \@onelevel@sanitize\@glo@sort +} +\newcommand*{\@@gls@noidx@nosanitizesort}{% + \ifdefvoid\@glo@sort + {}% + {% + \expandafter\@@gls@noidx@no@sanitizesort\@glo@sort\gls@end@sanitizesort + }% +} +\def\@@gls@noidx@no@sanitizesort#1#2\gls@end@sanitizesort{% + \bgroup + \glsnoidxstripaccents + \protected@xdef\@@glo@sort{#1#2}% + \egroup + \let\@glo@sort\@@glo@sort +} +\newcommand*\glsnoidxstripaccents{% + \let\IeC\@firstofone + \let\add@accent@\@secondoftwo + \let\@text@composite@x\@secondoftwo + \let\@tabacckludge\@secondoftwo + \expandafter\def\csname \encodingdefault-cmd\endcsname##1##2##3{##3}% + \expandafter\def\csname OT1-cmd\endcsname##1##2##3{##3}% + \expandafter\def\csname T1-cmd\endcsname##1##2##3{##3}% + \expandafter\def\csname PD1-cmd\endcsname##1##2##3{##3}% + \let\'\@firstofone + \let\`\@firstofone + \let\^\@firstofone + \let\"\@firstofone + \let\u\@firstofone + \let\t\@firstofone + \let\d\@firstofone + \let\r\@firstofone + \let\=\@firstofone + \let\.\@firstofone + \let\~\@firstofone + \let\v\@firstofone + \let\H\@firstofone + \let\c\@firstofone + \let\b\@firstofone + \let\a\@secondoftwo + \def\AE{AE}% + \def\ae{ae}% + \def\OE{OE}% + \def\oe{oe}% + \def\AA{AA}% + \def\aa{aa}% + \def\L{L}% + \def\l{l}% + \def\O{O}% + \def\o{o}% + \def\SS{SS}% + \def\ss{ss}% + \def\th{th}% + \def\TH{TH}% + \def\dh{dh}% + \def\DH{DH}% +} +\@ifl@t@r\fmtversion{2019/10/01} +{% + \appto\glsnoidxstripaccents{\let\UTFviii@two@octets\UTFviii@two@octets@combine}% +} +{} +\define@boolkey[gls]{sanitize}{description}[true]{% + \GlossariesWarning{sanitize={description} package option deprecated}% + \ifgls@sanitize@description + \glssetnoexpandfield{desc}% + \glssetnoexpandfield{descplural}% + \else + \glssetexpandfield{desc}% + \glssetexpandfield{descplural}% + \fi +} +\define@boolkey[gls]{sanitize}{name}[true]{% + \GlossariesWarning{sanitize={name} package option deprecated}% + \ifgls@sanitize@name + \glssetnoexpandfield{name}% + \else + \glssetexpandfield{name}% + \fi +} +\define@boolkey[gls]{sanitize}{symbol}[true]{% + \GlossariesWarning{sanitize={symbol} package option deprecated}% + \ifgls@sanitize@symbol + \glssetnoexpandfield{symbol}% + \glssetnoexpandfield{symbolplural}% + \else + \glssetexpandfield{symbol}% + \glssetexpandfield{symbolplural}% + \fi +} +\define@boolkey{glossaries.sty}[gls]{sanitizesort}[true]{% + \ifglssanitizesort + \glssetnoexpandfield{sortvalue}% + \renewcommand*{\@gls@noidx@setsanitizesort}{% + \glssanitizesorttrue + \glssetnoexpandfield{sortvalue}% + }% + \else + \glssetexpandfield{sortvalue}% + \renewcommand*{\@gls@noidx@setsanitizesort}{% + \glssanitizesortfalse + \glssetexpandfield{sortvalue}% + }% + \fi +} +\glssanitizesorttrue +\glssetnoexpandfield{sortvalue}% +\newcommand*{\@gls@noidx@setsanitizesort}{% + \glssanitizesortfalse + \glssetexpandfield{sortvalue}% +} +\define@choicekey[gls]{sanitize}{sort}{true,false}[true]{% + \setbool{glssanitizesort}{#1}% + \ifglssanitizesort + \glssetnoexpandfield{sortvalue}% + \else + \glssetexpandfield{sortvalue}% + \fi + \GlossariesWarning{sanitize={sort} package option + deprecated. Use sanitizesort instead}% +} +\define@key{glossaries.sty}{sanitize}[description=true,symbol=true,name=true]{% + \ifthenelse{\equal{#1}{none}}% + {% + \GlossariesWarning{sanitize package option deprecated}% + \glssetexpandfield{name}% + \glssetexpandfield{symbol}% + \glssetexpandfield{symbolplural}% + \glssetexpandfield{desc}% + \glssetexpandfield{descplural}% + }% + {% + \setkeys[gls]{sanitize}{#1}% + }% +} +\newif\ifglstranslate +\newcommand*\@gls@usetranslator{% + \@ifpackageloaded{polyglossia}% + {% + \let\glsifusetranslator\@secondoftwo + }% + {% + \@ifpackageloaded{babel}% + {% + \IfFileExists{translator.sty}% + {% + \RequirePackage{translator}% + \let\glsifusetranslator\@firstoftwo + }% + {}% + }% + {}% + }% +} +\newcommand{\glsifusedtranslatordict}[3]{% + \glsifusetranslator + {\ifcsdef{ver@glossaries-dictionary-#1.dict}{#2}{#3}}% + {#3}% +} +\@gls@declareoption{notranslate}{% + \glstranslatefalse + \let\@gls@usetranslator\relax + \let\glsifusetranslator\@secondoftwo +} +\define@choicekey{glossaries.sty}{translate}% + [\gls@translate@val\gls@translate@nr]% + {true,false,babel}[true]% + {% + \ifcase\gls@translate@nr\relax + \glstranslatetrue + \renewcommand*\@gls@usetranslator{% + \@ifpackageloaded{polyglossia}% + {% + \let\glsifusetranslator\@secondoftwo + }% + {% + \@ifpackageloaded{babel}% + {% + \IfFileExists{translator.sty}% + {% + \RequirePackage{translator}% + \let\glsifusetranslator\@firstoftwo + }% + {}% + }% + {}% + }% + }% + \or + \glstranslatefalse + \let\@gls@usetranslator\relax + \let\glsifusetranslator\@secondoftwo + \or + \glstranslatetrue + \let\@gls@usetranslator\relax + \let\glsifusetranslator\@secondoftwo + \fi + } +\glstranslatefalse +\let\glsifusetranslator\@secondoftwo +\@ifpackageloaded{translator}% +{% + \glstranslatetrue + \let\glsifusetranslator\@firstoftwo +}% +{% + \@for\gls@thissty:=tracklang,babel,ngerman,polyglossia\do + { + \@ifpackageloaded{\gls@thissty}% + {% + \glstranslatetrue + \@endfortrue + }% + {}% + } +} +\define@boolkey{glossaries.sty}[gls]{indexonlyfirst}[true]{} +\glsindexonlyfirstfalse +\define@boolkey{glossaries.sty}[gls]{hyperfirst}[true]{} +\glshyperfirsttrue +\newcommand*{\@gls@setacrstyle}{} +\define@boolkey{glossaries.sty}[glsacr]{footnote}[true]{% + \ifbool{glsacrdescription}% + {}% + {% + \renewcommand*{\@gls@sanitizedesc}{}% + }% + \renewcommand*{\@gls@setacrstyle}{\SetAcronymStyle}% +} +\define@boolkey{glossaries.sty}[glsacr]{description}[true]{% + \renewcommand*{\@gls@sanitizesymbol}{}% + \renewcommand*{\@gls@setacrstyle}{\SetAcronymStyle}% +} +\define@boolkey{glossaries.sty}[glsacr]{smallcaps}[true]{% + \renewcommand*{\@gls@sanitizesymbol}{}% + \renewcommand*{\@gls@setacrstyle}{\SetAcronymStyle}% +} +\define@boolkey{glossaries.sty}[glsacr]{smaller}[true]{% + \renewcommand*{\@gls@sanitizesymbol}{}% + \renewcommand*{\@gls@setacrstyle}{\SetAcronymStyle}% +} +\define@boolkey{glossaries.sty}[glsacr]{dua}[true]{% + \renewcommand*{\@gls@sanitizesymbol}{}% + \renewcommand*{\@gls@setacrstyle}{\SetAcronymStyle}% +} +\define@boolkey{glossaries.sty}[glsacr]{shortcuts}[true]{} +\newcommand*{\glsorder}{word} +\newcommand*{\@glsorder}[1]{} +\define@choicekey{glossaries.sty}{order}{word,letter}{% + \def\glsorder{#1}} +\newif\ifglsxindy +\glsxindyfalse +\@gls@declareoption{makeindex}{\glsxindyfalse} +\define@boolkey[gls]{xindy}{glsnumbers}[true]{} +\gls@xindy@glsnumberstrue +\def\@xdy@main@language{\languagename}% +\define@key[gls]{xindy}{language}{\def\@xdy@main@language{#1}} +\ifcsundef{inputencodingname}{% + \def\gls@codepage{}}{% + \def\gls@codepage{\inputencodingname} +} +\define@key[gls]{xindy}{codepage}{\def\gls@codepage{#1}} +\define@key{glossaries.sty}{xindy}[]{% + \glsxindytrue + \setkeys[gls]{xindy}{#1}% +} +\@gls@declareoption{xindygloss}{% + \glsxindytrue +} +\@gls@declareoption{xindynoglsnumbers}{% + \glsxindytrue + \gls@xindy@glsnumbersfalse +} +\providecommand{\@domakeglossaries}[1]{#1} +\@gls@declareoption{disablemakegloss}{% + \ifdefequal\makeglossaries\@no@makeglossaries + {% + \GlossariesWarning{Option `disablemakegloss' has no effect + (\string\makenoidxglossaries\space has already been used)}% + }% + {% + \ifdefequal\@makeglossary\@gobble + {% + \GlossariesWarning{Option `disablemakegloss' has no effect + (\string\makeglossaries\space has already been used)}% + }% + {% + \renewcommand{\@domakeglossaries}[1]{% + \PackageInfo{glossaries}{\string\makeglossaries\space and + \string\makenoidxglossaries\space have been disabled}% + }% + }% + }% +} +\@gls@declareoption{restoremakegloss}{% + \ifdefequal\makeglossaries\@no@makeglossaries + {% + \GlossariesWarning{Option `restoremakegloss' has no effect + (\string\makenoidxglossaries\space has already been used)}% + }% + {% + \ifdefequal\@makeglossary\@gobble + {% + \GlossariesWarning{Option `restoremakegloss' has no effect + (\string\makeglossaries\space has already been used)}% + }% + {% + \PackageInfo{glossaries}{\string\makeglossaries\space and + \string\makenoidxglossaries\space have been restored}% + \let\@domakeglossaries\@firstofone + }% + }% +} +\newcommand*{\@do@write@glslabels}{% + \AtEndDocument{\@@do@write@glslabels}% + \let\@do@write@glslabels\relax +} +\newcommand*{\@@do@write@glslabels}{% + \newwrite\@gls@labelsfile + \immediate\openout\@gls@labelsfile=\jobname.glslabels + \forallglsentries[\@glo@types,\@ignored@glossaries]{\@glsentry}% + {\ifdefempty{\@glsentry}{}{\immediate\write\@gls@labelsfile{\@glsentry}}}% + \immediate\closeout\@gls@labelsfile +} +\@gls@declareoption{writeglslabels}{\@do@write@glslabels} +\newif\ifglsautomake +\newcommand{\gls@automake@nr}{1} +\define@choicekey{glossaries.sty}{automake}% + [\gls@automake@val\gls@automake@nr]{true,false,immediate}[true]{% + \ifnum\gls@automake@nr=1\relax + \glsautomakefalse + \else + \glsautomaketrue + \fi + \ifglsautomake + \renewcommand*{\@gls@doautomake}{% + \PackageError{glossaries}{You must use + \string\makeglossaries\space with automake=true} + {% + Either remove the automake=true setting or + add \string\makeglossaries\space to your document preamble.% + }% + }% + \else + \renewcommand*{\@gls@doautomake}{}% + \fi +} +\glsautomakefalse +\newcommand*{\@gls@doautomake}{} +\AtEndDocument{\@gls@doautomake} +\define@boolkey{glossaries.sty}[gls]{savewrites}[true]{% + \ifglssavewrites + \renewcommand*{\glswritefiles}{\@glswritefiles}% + \else + \let\glswritefiles\@empty + \fi +} +\glssavewritesfalse +\let\glswritefiles\@empty +\define@boolkey{glossaries.sty}[gls]{compatible-3.07}[true]{} +\boolfalse{glscompatible-3.07} +\define@boolkey{glossaries.sty}[gls]{compatible-2.07}[true]{% + \ifbool{glscompatible-2.07}% + {% + \booltrue{glscompatible-3.07}% + }% + {}% +} +\boolfalse{glscompatible-2.07} +\let\gls@original@makeglossary\makeglossary +\let\gls@original@glossary\glossary +\def\makeglossary{% + \GlossariesWarning{Use of \string\makeglossary\space with + glossaries.sty is \MessageBreak deprecated. Use \string\makeglossaries\space + instead. If you \MessageBreak need the original definition of + \string\makeglossary\space use \MessageBreak the package options + kernelglossredefs=false (to \MessageBreak restore the former definition of + \string\makeglossary) and \MessageBreak nomain (if the file extensions cause a + conflict)}% + \makeglossaries +} +\newcommand*{\@gls@override@glossary}[1][main]{% + \GlossariesWarning{Use of \string\glossary\space with + glossaries.sty is deprecated. \MessageBreak Indexing should be performed + with the user level \MessageBreak commands, such as \string\gls\space or + \string\glsadd. If you need the \MessageBreak original definition of + \string\glossary\space use the package \MessageBreak options + kernelglossredefs=false (to restore the \MessageBreak former definition of + \string\glossary) and nomain (if the \MessageBreak file extensions cause a + conflict)}% + \gls@glossary{#1}% +} +\if@gls@docloaded +\else + \def\glossary{\@gls@override@glossary} +\fi +\define@choicekey{glossaries.sty}{kernelglossredefs}% + [\gls@debug@val\gls@debug@nr]{true,false,nowarn}[true]% +{% + \ifcase\gls@debug@nr\relax + \def\glossary{\@gls@override@glossary}% + \def\makeglossary{% + \GlossariesWarning{Use of \string\makeglossary\space with + glossaries.sty is deprecated. Use \string\makeglossaries\space + instead. If you need the original definition of + \string\makeglossary\space use the package options + kernelglossredefs=false (to prevent redefinition of + \string\makeglossary) and nomain (if the file extensions cause a + conflict)}% + \makeglossaries + }% + \or + \let\glossary\gls@original@glossary + \let\makeglossary\gls@original@makeglossary + \or + \def\makeglossary{\makeglossaries}% + \renewcommand*{\@gls@override@glossary}[1][main]{% + \gls@glossary{##1}% + }% + \fi +} +\@gls@declareoption{symbols}{% + \let\@gls@do@symbolsdef\@gls@symbolsdef +} +\newcommand*{\@gls@do@symbolsdef}{} +\newcommand*{\@gls@symbolsdef}{% + \newglossary[slg]{symbols}{sls}{slo}{\glssymbolsgroupname}% + \newcommand*{\printsymbols}[1][]{\printglossary[type=symbols,##1]}% + \newcommand*{\gls@tr@set@symbols@toctitle}{% + \translatelet{\glossarytoctitle}{Symbols (glossaries)}% + }% +}% +\@gls@declareoption{numbers}{% + \let\@gls@do@numbersdef\@gls@numbersdef +} +\newcommand*{\@gls@do@numbersdef}{} +\newcommand*{\@gls@numbersdef}{% + \newglossary[nlg]{numbers}{nls}{nlo}{\glsnumbersgroupname}% + \newcommand*{\printnumbers}[1][]{\printglossary[type=numbers,##1]}% + \newcommand*{\gls@tr@set@numbers@toctitle}{% + \translatelet{\glossarytoctitle}{Numbers (glossaries)}% + }% +}% +\@gls@declareoption{index}{% + \ifx\@gls@do@indexdef\@empty + \let\@gls@do@indexdef\@gls@indexdef + \fi +} +\@gls@declareoption{noglossaryindex}{% + \let\@gls@do@indexdef\relax +} +\newcommand*{\@gls@do@indexdef}{} +\newcommand*{\@gls@indexdef}{% + \newglossary[ilg]{index}{ind}{idx}{\indexname}% + \newcommand*{\printindex}[1][]{\printglossary[type=index,##1]}% + \newcommand*{\newterm}[2][]{% + \newglossaryentry{##2}% + {type={index},name={##2},description={\nopostdesc},##1}} + \let\@gls@do@indexdef\relax +}% +\@for\CurrentOption :=\@declaredoptions\do{% + \ifx\CurrentOption\@empty + \else + \@expandtwoargs + \in@ {,\CurrentOption ,}{,\@classoptionslist,\@curroptions,}% + \ifin@ + \@use@ption + \expandafter \let\csname ds@\CurrentOption\endcsname\@empty + \fi + \fi +} +\ProcessOptionsX +\RequirePackage{glossaries-compatible-307} +\disable@keys{glossaries.sty}{compatible-2.07,% + xindy,xindygloss,xindynoglsnumbers,makeindex,% + acronym,translate,notranslate,nolong,nosuper,notree,nostyles,% + nomain,noglossaryindex} +\newcommand*{\setupglossaries}[1]{% + \renewcommand*{\@gls@setacrstyle}{}% + \ifglsacrshortcuts + \def\@gls@setupshortcuts{\glsacrshortcutstrue}% + \else + \def\@gls@setupshortcuts{% + \ifglsacrshortcuts + \DefineAcronymSynonyms + \fi + }% + \fi + \glsacrshortcutsfalse + \let\@gls@do@numbersdef\relax + \let\@gls@do@symbolssdef\relax + \let\@gls@do@indexdef\relax + \let\@gls@do@acronymsdef\relax + \ifglsentrycounter + \let\@gls@doentrycounterdef\relax + \else + \let\@gls@doentrycounterdef\@gls@define@glossaryentrycounter + \fi + \ifglssubentrycounter + \let\@gls@dosubentrycounterdef\relax + \else + \let\@gls@dosubentrycounterdef\@gls@define@glossarysubentrycounter + \fi + \setkeys{glossaries.sty}{#1}% + \@gls@setacrstyle + \@gls@setupshortcuts + \@gls@do@acronymsdef + \@gls@do@numbersdef + \@gls@do@symbolssdef + \@gls@do@indexdef + \@gls@doentrycounterdef + \@gls@dosubentrycounterdef +} +\ifthenelse{\equal{\glscounter}{section}}% +{% + \ifcsundef{chapter}{}% + {% + \let\@gls@old@chapter\@chapter + \def\@chapter[#1]#2{\@gls@old@chapter[{#1}]{#2}% + \ifcsundef{hyperdef}{}{\hyperdef{section}{\thesection}{}}}% + }% +}% +{} +\newcommand*{\@gls@onlypremakeg}{} +\newcommand*{\@onlypremakeg}[1]{% + \ifx\@gls@onlypremakeg\@empty + \def\@gls@onlypremakeg{#1}% + \else + \expandafter\toks@\expandafter{\@gls@onlypremakeg}% + \edef\@gls@onlypremakeg{\the\toks@,\noexpand#1}% + \fi +} +\newcommand*{\@disable@onlypremakeg}{% +\@for\@thiscs:=\@gls@onlypremakeg\do{% + \expandafter\@disable@premakecs\@thiscs% +}} +\newcommand*{\@disable@premakecs}[1]{% + \def#1{\PackageError{glossaries}{\string#1\space may only be + used before \string\makeglossaries}{You can't use + \string#1\space after \string\makeglossaries}}% +} +\providecommand*{\glossaryname}{Glossary} +\providecommand*{\acronymname}{Acronyms} +\newcommand*{\glssettoctitle}[1]{% + \def\glossarytoctitle{\csname @glotype@#1@title\endcsname}} +\providecommand*{\entryname}{Notation} +\providecommand*{\descriptionname}{Description} +\providecommand*{\symbolname}{Symbol} +\providecommand*{\pagelistname}{Page List} +\providecommand*{\glssymbolsgroupname}{Symbols} +\providecommand*{\glsnumbersgroupname}{Numbers} +\newcommand*{\glspluralsuffix}{s} +\newcommand*{\glsacrpluralsuffix}{\glspluralsuffix} +\newcommand*{\glsupacrpluralsuffix}{\glstextup{\glsacrpluralsuffix}} +\providecommand*{\seename}{see} +\providecommand*{\andname}{\&} +\newcommand*{\RequireGlossariesLang}[1]{% + \@ifundefined{ver@glossaries-#1.ldf}{\input{glossaries-#1.ldf}}{}% +} +\newcommand*{\ProvidesGlossariesLang}[1]{% + \ProvidesFile{glossaries-#1.ldf}% +} +\newcommand*{\addglossarytocaptions}[1]{} +\ifglstranslate + \RequirePackage{tracklang} + \@gls@usetranslator + \@ifpackageloaded{translator} + {% + \ifboolexpr + { + test {\ifdefstring{\trans@languages}{English}} + and not + test {\ifdefstring{bbl@loaded}{english}} + } + {% + \let\glsifusetranslator\@secondoftwo + }% + {% + \usedictionary{glossaries-dictionary}% + \renewcommand*{\addglossarytocaptions}[1]{% + \ifcsundef{captions#1}{}% + {% + \expandafter\let\expandafter\@gls@tmp\csname captions#1\endcsname + \expandafter\toks@\expandafter{\@gls@tmp + \renewcommand*{\glossaryname}{\translate{Glossary}}% + }% + \expandafter\edef\csname captions#1\endcsname{\the\toks@}% + }% + }% + }% + }% + {}% + \AnyTrackedLanguages + {% + \ForEachTrackedDialect{\this@dialect}{% + \IfTrackedLanguageFileExists{\this@dialect}% + {glossaries-}% prefix + {.ldf}% + {% + \RequireGlossariesLang{\CurrentTrackedTag}% + }% + {% + \@gls@missinglang@warn\this@dialect\CurrentTrackedLanguage + }% + }% + }% + {}% + \glsifusetranslator + {% + \renewcommand*{\glssettoctitle}[1]{% + \ifcsdef{gls@tr@set@#1@toctitle}% + {% + \csuse{gls@tr@set@#1@toctitle}% + }% + {% + \def\glossarytoctitle{\csname @glotype@#1@title\endcsname}% + }% + }% + \renewcommand*{\glossaryname}{\translate{Glossary}}% + \renewcommand*{\acronymname}{\translate{Acronyms}}% + \renewcommand*{\entryname}{\translate{Notation (glossaries)}}% + \renewcommand*{\descriptionname}{% + \translate{Description (glossaries)}}% + \renewcommand*{\symbolname}{\translate{Symbol (glossaries)}}% + \renewcommand*{\pagelistname}{% + \translate{Page List (glossaries)}}% + \renewcommand*{\glssymbolsgroupname}{% + \translate{Symbols (glossaries)}}% + \renewcommand*{\glsnumbersgroupname}{% + \translate{Numbers (glossaries)}}% + }{}% +\fi +\DeclareRobustCommand*{\nopostdesc}{} +\newcommand*{\@nopostdesc}{% + \let\org@glspostdescription\glspostdescription + \def\glspostdescription{% + \let\glspostdescription\org@glspostdescription}% +} +\newcommand*{\@no@post@desc}{\nopostdesc} +\newcommand{\glspar}{\par} +\newcommand{\setStyleFile}[1]{% + \renewcommand*{\gls@istfilebase}{#1}% + \ifglsxindy + \def\istfilename{\gls@istfilebase.xdy} + \else + \def\istfilename{\gls@istfilebase.ist} + \fi +} +\@onlypremakeg\setStyleFile +\ifglsxindy + \def\istfilename{\gls@istfilebase.xdy} +\else + \def\istfilename{\gls@istfilebase.ist} +\fi +\newcommand*{\gls@istfilebase}{\jobname} +\newcommand*{\@istfilename}[1]{} +\newcommand*{\glscompositor}{.} +\newcommand*{\glsSetCompositor}[1]{% + \renewcommand*{\glscompositor}{#1}} +\@onlypremakeg\glsSetCompositor +\newcommand*{\@glsAlphacompositor}{\glscompositor} +\ifglsxindy + \newcommand*\glsSetAlphaCompositor[1]{% + \renewcommand*\@glsAlphacompositor{#1}} +\else + \newcommand*\glsSetAlphaCompositor[1]{% + \glsnoxindywarning\glsSetAlphaCompositor} +\fi +\@onlypremakeg\glsSetAlphaCompositor +\newcommand*{\gls@suffixF}{} +\newcommand*{\glsSetSuffixF}[1]{% + \renewcommand*{\gls@suffixF}{#1}} +\@onlypremakeg\glsSetSuffixF +\newcommand*{\gls@suffixFF}{} +\newcommand*{\glsSetSuffixFF}[1]{% + \renewcommand*{\gls@suffixFF}{#1}% +} +\ifcsundef{hyperlink}% +{% + \newcommand*{\glsnumberformat}[1]{#1}% +}% +{% + \newcommand*{\glsnumberformat}[1]{\glshypernumber{#1}}% +} +\newcommand{\delimN}{, } +\newcommand{\delimR}{--} +\newcommand*{\glossarypreamble}{% + \csuse{@glossarypreamble@\currentglossary}% +} +\newcommand{\setglossarypreamble}[2][\glsdefaulttype]{% + \ifglossaryexists*{#1}% + {\csgdef{@glossarypreamble@#1}{#2}}% + {\GlossariesWarning{Glossary `#1' is not defined}}% +} +\newcommand*{\glossarypostamble}{} +\newcommand*{\glossarysection}[2][\@gls@title]{% + \def\@gls@title{#2}% + \ifcsundef{phantomsection}% + {% + \@glossarysection{#1}{#2}% + }% + {% + \@p@glossarysection{#1}{#2}% + }% + \glsglossarymark{\glossarytoctitle}% +} +\ifcsundef{glossarymark}% +{% + \newcommand{\glsglossarymark}[1]{\glossarymark{#1}} +}% +{% + \@ifclassloaded{memoir} + {% + \newcommand{\glsglossarymark}[1]{% + \ifglsucmark + \markboth{\memUChead{#1}}{\memUChead{#1}}% + \else + \markboth{#1}{#1}% + \fi + } + }% + {% + \newcommand{\glsglossarymark}[1]{% + \ifglsucmark + \@mkboth{\mfirstucMakeUppercase{#1}}{\mfirstucMakeUppercase{#1}}% + \else + \@mkboth{#1}{#1}% + \fi + } + } +} +\providecommand{\glossarymark}[1]{% + \ifglsucmark + \@mkboth{\mfirstucMakeUppercase{#1}}{\mfirstucMakeUppercase{#1}}% + \else + \@mkboth{#1}{#1}% + \fi +} +\newcommand*{\setglossarysection}[1]{% +\setkeys{glossaries.sty}{section=#1}} +\newcommand*{\@glossarysection}[2]{% + \ifdefempty\@@glossarysecstar + {% + \csname\@@glossarysec\endcsname[#1]{#2}% + }% + {% + \csname\@@glossarysec\endcsname*{#2}% + \@gls@toc{#1}{\@@glossarysec}% + }% + \@@glossaryseclabel +} +\newcommand*{\@p@glossarysection}[2]{% + \glsclearpage + \phantomsection + \ifdefempty\@@glossarysecstar + {% + \csname\@@glossarysec\endcsname{#2}% + }% + {% + \@gls@toc{#1}{\@@glossarysec}% + \csname\@@glossarysec\endcsname*{#2}% + }% + \@@glossaryseclabel +} +\newcommand*{\gls@doclearpage}{% + \ifthenelse{\equal{\@@glossarysec}{chapter}}% + {% + \ifcsundef{cleardoublepage}% + {% + \clearpage + }% + {% + \ifcsdef{if@openright}% + {% + \if@openright + \cleardoublepage + \else + \clearpage + \fi + }% + {% + \cleardoublepage + }% + }% + }% + {}% +} +\newcommand*{\glsclearpage}{\gls@doclearpage} +\newcommand*{\@gls@toc}[2]{% + \ifglstoc + \ifglsnumberline + \addcontentsline{toc}{#2}{\protect\numberline{}#1}% + \else + \addcontentsline{toc}{#2}{#1}% + \fi + \fi +} +\newcommand*{\glsnoxindywarning}[1]{% + \GlossariesWarning{Not in xindy mode --- ignoring \string#1}% +} +\newcommand*{\glsnomakeindexwarning}[1]{% + \GlossariesWarning{Not in makeindex mode --- ignoring \string#1}% +} +\ifglsxindy + \edef\@xdyattributes{\string"default\string"}% +\fi +\ifglsxindy + \edef\@xdyattributelist{}% +\fi +\ifglsxindy + \def\@xdylocref{} +\fi +\newcommand*{\@gls@ifinlist}[4]{% + \def\@do@ifinlist##1,#1,##2\end@doifinlist{% + \def\@gls@listsuffix{##2}% + \ifx\@gls@listsuffix\@empty + #4% + \else + #3% + \fi + }% + \@do@ifinlist,#2,#1,\end@doifinlist +} +\ifglsxindy + \newcommand*{\@xdycounters}{\glscounter} + \newcommand*\GlsAddXdyCounters[1]{% + \@for\@gls@ctr:=#1\do{% + \edef\@do@addcounter{% + \noexpand\@gls@ifinlist{\@gls@ctr}{\@xdycounters}{}% + {% + \noexpand\edef\noexpand\@xdycounters{\@xdycounters,% + \noexpand\@gls@ctr}% + }% + }% + \@do@addcounter + } + } + \@onlypremakeg\GlsAddXdyCounters +\else + \newcommand*\GlsAddXdyCounters[1]{% + \glsnoxindywarning\GlsAddXdyAttribute + } +\fi +\newcommand*\@disabled@glsaddxdycounters{% + \PackageError{glossaries}{\string\GlsAddXdyCounters\space + can't be used after \string\GlsAddXdyAttribute}{Move all + occurrences of \string\GlsAddXdyCounters\space before the first + instance of \string\GlsAddXdyAttribute}% +} +\ifglsxindy + \newcommand*\@glsaddxdyattribute[2]{% + \edef\@xdyattributes{\@xdyattributes ^^J \string"#1\string" ^^J + \string"#2#1\string"}% + \expandafter\toks@\expandafter{\@xdylocref}% + \edef\@xdylocref{\the\toks@ ^^J% + (markup-locref + :open \string"\glstildechar n% + \expandafter\string\csname glsX#2X#1\endcsname + \string" ^^J + :close \string"\string" ^^J + :attr \string"#2#1\string")}% + \expandafter\gdef\csname glsX#2X#1\endcsname##1##2{% + \setentrycounter[##1]{#2}\csname #1\endcsname{##2}% + }% + } + \newcommand*\GlsAddXdyAttribute[1]{% + \ifx\@xdyattributelist\@empty + \edef\@xdyattributelist{#1}% + \else + \edef\@xdyattributelist{\@xdyattributelist,#1}% + \fi + \@for\@this@counter:=\@xdycounters\do{% + \protected@edef\gls@do@addxdyattribute{% + \noexpand\@glsaddxdyattribute{#1}{\@this@counter}% + } + \gls@do@addxdyattribute + }% + \let\GlsAddXdyCounters\@disabled@glsaddxdycounters + } + \@onlypremakeg\GlsAddXdyAttribute +\else + \newcommand*\GlsAddXdyAttribute[1]{% + \glsnoxindywarning\GlsAddXdyAttribute} +\fi +\ifglsxindy +\newcommand*{\@gls@addpredefinedattributes}{% + \GlsAddXdyAttribute{glsnumberformat} + \GlsAddXdyAttribute{textrm} + \GlsAddXdyAttribute{textsf} + \GlsAddXdyAttribute{texttt} + \GlsAddXdyAttribute{textbf} + \GlsAddXdyAttribute{textmd} + \GlsAddXdyAttribute{textit} + \GlsAddXdyAttribute{textup} + \GlsAddXdyAttribute{textsl} + \GlsAddXdyAttribute{textsc} + \GlsAddXdyAttribute{emph} + \GlsAddXdyAttribute{glshypernumber} + \GlsAddXdyAttribute{hyperrm} + \GlsAddXdyAttribute{hypersf} + \GlsAddXdyAttribute{hypertt} + \GlsAddXdyAttribute{hyperbf} + \GlsAddXdyAttribute{hypermd} + \GlsAddXdyAttribute{hyperit} + \GlsAddXdyAttribute{hyperup} + \GlsAddXdyAttribute{hypersl} + \GlsAddXdyAttribute{hypersc} + \GlsAddXdyAttribute{hyperemph} + \GlsAddXdyAttribute{glsignore} +} +\else + \let\@gls@addpredefinedattributes\relax +\fi +\def\@xdyuseralphabets{} +\ifglsxindy + \newcommand*{\GlsAddXdyAlphabet}[2]{% + \edef\@xdyuseralphabets{% + \@xdyuseralphabets ^^J + (define-alphabet "#1" (#2))}} +\else + \newcommand*{\GlsAddXdyAlphabet}[2]{% + \glsnoxindywarning\GlsAddXdyAlphabet} +\fi +\ifglsxindy + \newcommand*{\@gls@xdy@locationlist}{% + roman-page-numbers,% + Roman-page-numbers,% + arabic-page-numbers,% + alpha-page-numbers,% + Alpha-page-numbers,% + Appendix-page-numbers,% + arabic-section-numbers% + } + \protected@edef\@gls@roman{\@roman{0\string" + \string"roman-numbers-lowercase\string" :sep \string"}}% + \@onelevel@sanitize\@gls@roman + \edef\@tmp{\string" \string"roman-numbers-lowercase\string" + :sep \string"}% + \@onelevel@sanitize\@tmp + \ifx\@tmp\@gls@roman + \expandafter + \edef\csname @gls@xdy@Lclass@roman-page-numbers\endcsname{% + \string"roman-numbers-lowercase\string"% + }% + \else + \expandafter + \edef\csname @gls@xdy@Lclass@roman-page-numbers\endcsname{ + :sep \string"\@gls@roman\string"% + }% + \fi + \expandafter\def\csname @gls@xdy@Lclass@Roman-page-numbers\endcsname{% + \string"roman-numbers-uppercase\string"% + }% + \expandafter\def\csname @gls@xdy@Lclass@arabic-page-numbers\endcsname{% + \string"arabic-numbers\string"% + }% + \expandafter\def\csname @gls@xdy@Lclass@alpha-page-numbers\endcsname{% + \string"alpha\string"% + }% + \expandafter\def\csname @gls@xdy@Lclass@Alpha-page-numbers\endcsname{% + \string"ALPHA\string"% + }% + \expandafter\def\csname @gls@xdy@Lclass@Appendix-page-numbers\endcsname{% + \string"ALPHA\string" + :sep \string"\@glsAlphacompositor\string" + \string"arabic-numbers\string"% + } + \expandafter\def\csname @gls@xdy@Lclass@arabic-section-numbers\endcsname{% + \string"arabic-numbers\string" + :sep \string"\glscompositor\string" + \string"arabic-numbers\string"% + }% + \def\@xdyuserlocationdefs{} + \def\@xdyuserlocationnames{} +\fi +\ifglsxindy + \newcommand\@xdycrossrefhook{} +\fi +\ifglsxindy + \newcommand*{\GlsAddXdyLocation}[3][]{% + \def\@gls@tmp{#1}% + \ifx\@gls@tmp\@empty + \edef\@xdyuserlocationdefs{% + \@xdyuserlocationdefs ^^J% + (define-location-class \string"#2\string"^^J\space\space + \space(:sep \string"{}\glsopenbrace\string" #3 + :sep \string"\glsclosebrace\string")) + }% + \else + \edef\@xdyuserlocationdefs{% + \@xdyuserlocationdefs ^^J% + (define-location-class \string"#2\string"^^J\space\space + \space(:sep "\glsopenbrace" + #1 + :sep "\glsclosebrace\glsopenbrace" #3 + :sep "\glsclosebrace")) + }% + \fi + \edef\@xdyuserlocationnames{% + \@xdyuserlocationnames^^J\space\space\space + \string"#2\string"}% + } + \@onlypremakeg\GlsAddXdyLocation +\else + \newcommand*{\GlsAddXdyLocation}[2]{% + \glsnoxindywarning\GlsAddXdyLocation} +\fi +\ifglsxindy + \def\@xdylocationclassorder{^^J\space\space\space + \string"roman-page-numbers\string"^^J\space\space\space + \string"arabic-page-numbers\string"^^J\space\space\space + \string"arabic-section-numbers\string"^^J\space\space\space + \string"alpha-page-numbers\string"^^J\space\space\space + \string"Roman-page-numbers\string"^^J\space\space\space + \string"Alpha-page-numbers\string"^^J\space\space\space + \string"Appendix-page-numbers\string" + \@xdyuserlocationnames^^J\space\space\space + \string"see\string" + } +\fi +\ifglsxindy + \newcommand*\GlsSetXdyLocationClassOrder[1]{% + \def\@xdylocationclassorder{#1}} +\else + \newcommand*\GlsSetXdyLocationClassOrder[1]{% + \glsnoxindywarning\GlsSetXdyLocationClassOrder} +\fi +\ifglsxindy + \def\@xdysortrules{} +\fi +\ifglsxindy + \newcommand*\GlsAddSortRule[2]{% + \expandafter\toks@\expandafter{\@xdysortrules}% + \protected@edef\@xdysortrules{\the\toks@ ^^J + (sort-rule \string"#1\string" \string"#2\string")}% + } +\else + \newcommand*\GlsAddSortRule[2]{% + \glsnoxindywarning\GlsAddSortRule} +\fi +\ifglsxindy + \def\@xdyrequiredstyles{tex} +\fi +\ifglsxindy + \newcommand*\GlsAddXdyStyle[1]{% + \edef\@xdyrequiredstyles{\@xdyrequiredstyles,#1}}% +\else + \newcommand*\GlsAddXdyStyle[1]{% + \glsnoxindywarning\GlsAddXdyStyle} +\fi +\ifglsxindy + \newcommand*\GlsSetXdyStyles[1]{% + \edef\@xdyrequiredstyles{#1}} +\else + \newcommand*\GlsSetXdyStyles[1]{% + \glsnoxindywarning\GlsSetXdyStyles} +\fi +\newcommand*{\findrootlanguage}{} +\def\@xdylanguage#1#2{} +\ifglsxindy + \newcommand*\GlsSetXdyLanguage[2][\glsdefaulttype]{% + \ifglossaryexists{#1}{% + \expandafter\def\csname @xdy@#1@language\endcsname{#2}% + }{% + \PackageError{glossaries}{Can't set language type for + glossary type `#1' --- no such glossary}{% + You have specified a glossary type that doesn't exist}}} +\else + \newcommand*\GlsSetXdyLanguage[2][]{% + \glsnoxindywarning\GlsSetXdyLanguage} +\fi +\def\@gls@codepage#1#2{} +\ifglsxindy + \newcommand*{\GlsSetXdyCodePage}[1]{% + \renewcommand*{\gls@codepage}{#1}% + } + \AtBeginDocument{% + \ifx\gls@codepage\@empty + \@ifpackageloaded{fontspec}{\def\gls@codepage{utf8}}{}% + \fi + } +\else + \newcommand*{\GlsSetXdyCodePage}[1]{% + \glsnoxindywarning\GlsSetXdyCodePage} +\fi +\ifglsxindy + \ifgls@xindy@glsnumbers + \def\@xdylettergroups{(define-letter-group + \string"glsnumbers\string"^^J\space\space\space + :prefixes (\string"0\string" \string"1\string" + \string"2\string" \string"3\string" \string"4\string" + \string"5\string" \string"6\string" \string"7\string" + \string"8\string" \string"9\string")^^J\space\space\space + \@xdynumbergrouporder)} + \else + \def\@xdylettergroups{} + \fi +\fi + \newcommand*\GlsAddLetterGroup[2]{% + \expandafter\toks@\expandafter{\@xdylettergroups}% + \protected@edef\@xdylettergroups{\the\toks@^^J% + (define-letter-group \string"#1\string"^^J\space\space\space#2)}% + }% +\newcommand*{\forallglossaries}[3][\@glo@types]{% + \@for#2:=#1\do{\ifx#2\@empty\else#3\fi}% +} + +\newcommand*{\forallacronyms}[2]{% + \@for#1:=\@glsacronymlists\do{\ifx#1\@empty\else#2\fi}% +} +\newcommand*{\forglsentries}[3][\glsdefaulttype]{% + \edef\@@glo@list{\csname glolist@#1\endcsname}% + \@for#2:=\@@glo@list\do + {% + \ifdefempty{#2}{}{#3}% + }% +} +\newcommand*{\forallglsentries}[3][\@glo@types]{% + \expandafter\forallglossaries\expandafter[#1]{\@@this@glo@}% + {% + \forglsentries[\@@this@glo@]{#2}{#3}% + }% +} +\newcommand{\ifglossaryexists}{% + \@ifstar\s@ifglossaryexists\@ifglossaryexists +} +\newcommand{\@ifglossaryexists}[3]{% + \ifcsundef{@glotype@#1@out}{#3}{#2}% +} +\newcommand{\s@ifglossaryexists}[3]{% + \ifcsundef{glolist@#1}{#3}{#2}% +} +\newcommand*{\glsdetoklabel}[1]{#1} +\newcommand{\ifglsentryexists}[3]{% + \ifcsundef{glo@\glsdetoklabel{#1}@name}{#3}{#2}% +} +\newcommand*{\ifglsused}[3]{% + \ifbool{glo@\glsdetoklabel{#1}@flag}{#2}{#3}% +} +\newcommand{\glsdoifexists}[2]{% + \ifglsentryexists{#1}{#2}{% + \PackageError{glossaries}{Glossary entry `\glsdetoklabel{#1}' + has not been defined}{You need to define a glossary entry before you + can use it.}}% +} +\newcommand{\glsdoifnoexists}[2]{% + \ifglsentryexists{#1}{% + \PackageError{glossaries}{Glossary entry `\glsdetoklabel{#1}' has already + been defined}{}}{#2}% +} +\newcommand{\glsdoifexistsorwarn}[2]{% + \ifglsentryexists{#1}{#2}{% + \GlossariesWarning{Glossary entry `\glsdetoklabel{#1}' + has not been defined}% + }% +} +\newcommand{\glsdoifexistsordo}[3]{% + \ifglsentryexists{#1}{#2}{% + \PackageError{glossaries}{Glossary entry `\glsdetoklabel{#1}' + has not been defined}{You need to define a glossary entry before you + can use it.}% + #3% + }% +} +\newcommand{\doifglossarynoexistsordo}[3]{% + \ifglossaryexists*{#1}% + {% + \PackageError{glossaries}{Glossary type `#1' already exists}{}% + #3% + }% + {#2}% +} +\newrobustcmd{\ifglshaschildren}[3]{% + \glsdoifexists{#1}% + {% + \def\do@glshaschildren{#3}% + \edef\@gls@thislabel{\glsdetoklabel{#1}}% + \expandafter\forglsentries\expandafter + [\csname glo@\@gls@thislabel @type\endcsname] + {\glo@label}% + {% + \letcs\glo@parent{glo@\glo@label @parent}% + \ifdefequal\@gls@thislabel\glo@parent + {% + \def\do@glshaschildren{#2}% + \@endfortrue + }% + {}% + }% + \do@glshaschildren + }% +} +\newcommand{\ifglshasparent}[3]{% + \glsdoifexists{#1}% + {% + \ifcsempty{glo@\glsdetoklabel{#1}@parent}{#3}{#2}% + }% +} +\newcommand*{\ifglshasdesc}[3]{% + \ifcsempty{glo@\glsdetoklabel{#1}@desc}% + {#3}% + {#2}% +} +\newcommand*{\ifglsdescsuppressed}[3]{% + \ifcsequal{glo@\glsdetoklabel{#1}@desc}{@no@post@desc}% + {#2}% + {#3}% +} +\newrobustcmd*{\ifglshassymbol}[3]{% + \letcs{\@glo@symbol}{glo@\glsdetoklabel{#1}@symbol}% + \ifdefempty\@glo@symbol + {#3}% + {% + \ifdefequal\@glo@symbol\@gls@default@value + {#3}% + {#2}% + }% +} +\newrobustcmd*{\ifglshaslong}[3]{% + \letcs{\@glo@long}{glo@\glsdetoklabel{#1}@long}% + \ifdefempty\@glo@long + {#3}% + {% + \ifdefequal\@glo@long\@gls@default@value + {#3}% + {#2}% + }% +} +\newrobustcmd*{\ifglshasshort}[3]{% + \letcs{\@glo@short}{glo@\glsdetoklabel{#1}@short}% + \ifdefempty\@glo@short + {#3}% + {% + \ifdefequal\@glo@short\@gls@default@value + {#3}% + {#2}% + }% +} +\newrobustcmd*{\ifglshasfield}[4]{% + \glsdoifexists{#2}% + {% + \letcs{\@glo@thisvalue}{glo@\glsdetoklabel{#2}@#1}% + \ifdef\@glo@thisvalue + {% + \ifdefempty\@glo@thisvalue + {% + #4% + }% + {% + \ifdefequal\@glo@thisvalue\@gls@default@value + {% + #4% + }% + {% + \let\glscurrentfieldvalue\@glo@thisvalue + #3% + }% + }% + }% + {% + \@gls@fetchfield{\@gls@thisfield}{#1}% + \ifdef\@gls@thisfield + {% + \letcs{\@glo@thisvalue}{glo@\glsdetoklabel{#2}@\@gls@thisfield}% + \ifdefempty\@glo@thisvalue + {% + #4% + }% + {% + \ifdefequal\@glo@thisvalue\@gls@default@value + {% + #4% + }% + {% + \let\glscurrentfieldvalue\@glo@thisvalue + #3% + }% + }% + }% + {% + \GlossariesWarning{Unknown entry field `#1'}% + #4% + }% + }% + }% +} +\newcommand*{\glscurrentfieldvalue}{} +\newcommand*{\@glo@types}{,} +\newcommand*\@gls@provide@newglossary{% + \protected@write\@auxout{}{\string\providecommand\string\@newglossary[4]{}}% + \let\@gls@provide@newglossary\relax +} +\newcommand*{\defglsentryfmt}[2][\glsdefaulttype]{% + \csgdef{gls@#1@entryfmt}{#2}% +} +\newcommand*{\gls@doentryfmt}[1]{\csuse{gls@#1@entryfmt}} +\newcommand*{\@gls@forbidtexext}[1]{% + \ifboolexpr{test {\ifdefstring{#1}{tex}} + or test {\ifdefstring{#1}{TEX}}} + {% + \def#1{nottex}% + \PackageError{glossaries}% + {Forbidden `.tex' extension replaced with `.nottex'}% + {I'm sorry, I can't allow you to do something so reckless.\MessageBreak + Don't use `.tex' as an extension for a temporary file.}% + }% + {% + }% +} +\newcommand*{\gls@gobbleopt}{\new@ifnextchar[{\@gls@gobbleopt}{}} +\def\@gls@gobbleopt[#1]{} +\newcommand*{\newglossary}{\@ifstar\s@newglossary\ns@newglossary} +\newcommand*{\s@newglossary}[2]{% + \ns@newglossary[#1-glg]{#1}{#1-gls}{#1-glo}{#2}% +} +\newcommand*{\ns@newglossary}[5][glg]{% + \doifglossarynoexistsordo{#2}% + {% + \ifundef\glsdefaulttype + {% + \gdef\glsdefaulttype{#2}% + }{}% + \toks@{#2}\edef\@glo@types{\@glo@types\the\toks@,}% + \expandafter\gdef\csname glolist@#2\endcsname{,}% + \expandafter\edef\csname @glotype@#2@log\endcsname{#1}% + \expandafter\edef\csname @glotype@#2@in\endcsname{#3}% + \expandafter\edef\csname @glotype@#2@out\endcsname{#4}% + \expandafter\@gls@forbidtexext\csname @glotype@#2@log\endcsname + \expandafter\@gls@forbidtexext\csname @glotype@#2@in\endcsname + \expandafter\@gls@forbidtexext\csname @glotype@#2@out\endcsname + \expandafter\def\csname @glotype@#2@title\endcsname{#5}% + \@gls@provide@newglossary + \protected@write\@auxout{}{\string\@newglossary{#2}{#1}{#3}{#4}}% + \ifcsundef{gls@#2@entryfmt}% + {% + \defglsentryfmt[#2]{\glsentryfmt}% + }% + {}% + \@gls@defsortcount{#2}% + \@ifnextchar[{\@gls@setcounter{#2}}% + {\@gls@setcounter{#2}[\glscounter]}% + }% + {% + \gls@gobbleopt + }% +} +\newcommand*{\altnewglossary}[3]{% + \newglossary[#2-glg]{#1}{#2-gls}{#2-glo}{#3}% +} +\@onlypreamble{\newglossary} +\@onlypremakeg\newglossary +\newcommand*{\@newglossary}[4]{} +\def\@gls@setcounter#1[#2]{% + \expandafter\def\csname @glotype@#1@counter\endcsname{#2}% + \ifglsxindy + \GlsAddXdyCounters{#2}% + \fi +} +\newcommand*{\@gls@getcounter}[1]{% + \csname @glotype@#1@counter\endcsname +} +\glsdefmain +\@gls@do@acronymsdef +\@gls@do@symbolsdef +\@gls@do@numbersdef +\@gls@do@indexdef +\newcommand*{\newignoredglossary}[1]{% + \ifdefempty\@ignored@glossaries + {% + \edef\@ignored@glossaries{#1}% + }% + {% + \eappto\@ignored@glossaries{,#1}% + }% + \csgdef{glolist@#1}{,}% + \ifcsundef{gls@#1@entryfmt}% + {% + \defglsentryfmt[#1]{\glsentryfmt}% + }% + {}% + \ifdefempty\@gls@nohyperlist + {% + \renewcommand*{\@gls@nohyperlist}{#1}% + }% + {% + \eappto\@gls@nohyperlist{,#1}% + }% +} +\newcommand*{\@ignored@glossaries}{} +\newcommand*{\ifignoredglossary}[3]{% + \edef\@gls@igtype{#1}% + \expandafter\DTLifinlist\expandafter + {\@gls@igtype}{\@ignored@glossaries}{#2}{#3}% +} +\define@key{glossentry}{name}{% +\def\@glo@name{#1}% +} +\define@key{glossentry}{description}{% +\def\@glo@desc{#1}% +} +\define@key{glossentry}{descriptionplural}{% +\def\@glo@descplural{#1}% +} +\define@key{glossentry}{sort}{% +\def\@glo@sort{#1}} +\define@key{glossentry}{text}{% +\def\@glo@text{#1}% +} +\define@key{glossentry}{plural}{% +\def\@glo@plural{#1}% +} +\define@key{glossentry}{first}{% +\def\@glo@first{#1}% +} +\define@key{glossentry}{firstplural}{% +\def\@glo@firstplural{#1}% +} +\newcommand*{\@gls@default@value}{\relax} +\define@key{glossentry}{symbol}{% +\def\@glo@symbol{#1}% +} +\define@key{glossentry}{symbolplural}{% +\def\@glo@symbolplural{#1}% +} +\define@key{glossentry}{type}{% +\def\@glo@type{#1}} +\define@key{glossentry}{counter}{% + \ifcsundef{c@#1}% + {% + \PackageError{glossaries}% + {There is no counter called `#1'}% + {% + The counter key should have the name of a valid counter + as its value% + }% + }% + {% + \def\@glo@counter{#1}% + }% +} +\define@key{glossentry}{see}{% + \gls@set@xr@key{see}{\@glo@see}{#1}% +} +\newcommand*{\gls@set@xr@key}[3]{% + \renewcommand*{\gls@xr@key}{#1}% + \gls@checkseeallowed + \def#2{#3}% + \@glo@seeautonumberlist +} +\newcommand*{\gls@xr@key}{see} +\newcommand*{\gls@checkseeallowed}{% + \@gls@see@noindex +} +\newcommand*{\gls@checkseeallowed@preambleonly}{% + \GlossariesWarning{glossaries}% + {`\gls@xr@key' key doesn't have any effect when used in the document + environment. Move the definition to the preamble + after \string\makeglossaries\space + or \string\makenoidxglossaries}% +} +\define@key{glossentry}{parent}{% +\def\@glo@parent{#1}} +\define@choicekey{glossentry}{nonumberlist}% + [\gls@nonumberlist@val\gls@nonumberlist@nr]{true,false}[true]% +{% + \ifcase\gls@nonumberlist@nr\relax + \def\@glo@prefix{\glsnonextpages}% + \@gls@savenonumberlist{true}% + \else + \def\@glo@prefix{\glsnextpages}% + \@gls@savenonumberlist{false}% + \fi +} +\newcommand*{\@gls@savenonumberlist}[1]{} +\newcommand*{\@gls@initnonumberlist}{}% +\newcommand*{\@gls@storenonumberlist}[1]{} +\newcommand*{\@gls@enablesavenonumberlist}{% + \renewcommand*{\@gls@initnonumberlist}{% + \undef\@glo@nonumberlist + }% + \renewcommand*{\@gls@savenonumberlist}[1]{% + \def\@glo@nonumberlist{##1}% + }% + \renewcommand*{\@gls@storenonumberlist}[1]{% + \ifdef\@glo@nonumberlist + {% + \cslet{glo@\glsdetoklabel{##1}@nonumberlist}{\@glo@nonumberlist}% + }% + {}% + }% + \appto\@gls@keymap{,{nonumberlist}{nonumberlist}}% +} +\define@key{glossentry}{user1}{% + \def\@glo@useri{#1}% +} +\define@key{glossentry}{user2}{% + \def\@glo@userii{#1}% +} +\define@key{glossentry}{user3}{% + \def\@glo@useriii{#1}% +} +\define@key{glossentry}{user4}{% + \def\@glo@useriv{#1}% +} +\define@key{glossentry}{user5}{% + \def\@glo@userv{#1}% +} +\define@key{glossentry}{user6}{% + \def\@glo@uservi{#1}% +} +\define@key{glossentry}{short}{% + \def\@glo@short{#1}% +} +\define@key{glossentry}{shortplural}{% + \def\@glo@shortpl{#1}% +} +\define@key{glossentry}{long}{% + \def\@glo@long{#1}% +} +\define@key{glossentry}{longplural}{% + \def\@glo@longpl{#1}% +} +\newcommand*{\@glsnoname}{% + \PackageError{glossaries}{name key required in + \string\newglossaryentry\space for entry `\@glo@label'}{You + haven't specified the entry name}} +\newcommand*\@glsnodesc{% + \PackageError{glossaries} + {% + description key required in \string\newglossaryentry\space + for entry `\@glo@label'% + }% + {% + You haven't specified the entry description% + }% +}% +\newcommand*{\@glsdefaultplural}{} +\newcommand*{\@gls@missingnumberlist}[1]{% + ??% + \ifglssavenumberlist + \GlossariesWarning{Missing number list for entry `#1'. + Maybe makeglossaries + rerun required}% + \else + \PackageError{glossaries}% + {Package option `savenumberlist=true' required}% + {% + You must use the `savenumberlist' package option + to reference location lists.% + }% + \fi +} +\newcommand*{\@glsdefaultsort}{\@glo@name} +\newcount\gls@level +\newcommand{\@@gls@noexpand@field}[3]{% + \expandafter\global\expandafter + \let\csname glo@#1@#2\endcsname#3% +} +\newcommand{\@gls@noexpand@fields}[4]{% + \ifcsdef{gls@assign@#3@field} + {% + \ifdefequal{#4}{\@gls@default@value}% + {% + \edef\@gls@value{\expandonce{#1}}% + \csuse{gls@assign@#3@field}{#2}{\@gls@value}% + }% + {% + \csuse{gls@assign@#3@field}{#2}{#4}% + }% + }% + {% + \ifdefequal{#4}{\@gls@default@value}% + {% + \edef\@gls@value{\expandonce{#1}}% + \@@gls@noexpand@field{#2}{#3}{\@gls@value}% + }% + {% + \@@gls@noexpand@field{#2}{#3}{#4}% + }% + }% +} +\newcommand{\@@gls@expand@field}[3]{% + \expandafter + \protected@xdef\csname glo@#1@#2\endcsname{#3}% +} +\newcommand{\@gls@expand@fields}[4]{% + \ifcsdef{gls@assign@#3@field} + {% + \ifdefequal{#4}{\@gls@default@value}% + {% + \edef\@gls@value{\expandonce{#1}}% + \csuse{gls@assign@#3@field}{#2}{\@gls@value}% + }% + {% + \expandafter\@gls@startswithexpandonce#4\relax\relax\gls@endcheck + {% + \@@gls@expand@field{#2}{#3}{#4}% + }% + {% + \csuse{gls@assign@#3@field}{#2}{#4}% + }% + }% + }% + {% + \ifdefequal{#4}{\@gls@default@value}% + {% + \@@gls@expand@field{#2}{#3}{#1}% + }% + {% + \@@gls@expand@field{#2}{#3}{#4}% + }% + }% +} +\def\@gls@expandonce{\expandonce} +\def\@gls@startswithexpandonce#1#2\gls@endcheck#3#4{% + \def\@gls@tmp{#1}% + \ifdefequal{\@gls@expandonce}{\@gls@tmp}{#3}{#4}% +} +\let\gls@assign@field\@gls@expand@fields +\newcommand*{\glsexpandfields}{% + \let\gls@assign@field\@gls@expand@fields +} +\newcommand*{\glsnoexpandfields}{% + \let\gls@assign@field\@gls@noexpand@fields +} +\newrobustcmd{\newglossaryentry}[2]{% + \glsdoifnoexists{#1}% + {% + \gls@defglossaryentry{#1}{#2}% + }% +} +\newcommand*{\gls@defdocnewglossaryentry}{% + \let\gls@checkseeallowed\gls@checkseeallowed@preambleonly + \let\newglossaryentry\new@glossaryentry +} +\newrobustcmd{\provideglossaryentry}[2]{% + \ifglsentryexists{#1}% + {}% + {% + \gls@defglossaryentry{#1}{#2}% + }% +} +\@onlypreamble{\provideglossaryentry} +\newrobustcmd{\new@glossaryentry}[2]{% + \ifundef\@gls@deffile + {% + \global\newwrite\@gls@deffile + \immediate\openout\@gls@deffile=\jobname.glsdefs + }% + {}% + \ifglsentryexists{#1}{}% + {% + \gls@defglossaryentry{#1}{#2}% + }% + \@gls@writedef{#1}% +} +\AtBeginDocument{\gls@begindocdefs} +\AtEndDocument{\ifdef\@gls@deffile{\closeout\@gls@deffile}{}} +\newcommand*{\gls@begindocdefs}{% + \@gls@enablesavenonumberlist + \edef\@gls@restoreat{\noexpand\catcode`\noexpand\@=\number\catcode`\@\relax}% + \makeatletter + \InputIfFileExists{\jobname.glsdefs}{}{}% + \@gls@restoreat + \undef\@gls@restoreat + \gls@defdocnewglossaryentry +} +\newcommand*{\@gls@writedef}[1]{% + \immediate\write\@gls@deffile + {% + \string\ifglsentryexists{#1}{}\glspercentchar^^J% + \expandafter\@gobble\string\{\glspercentchar^^J% + \string\gls@defglossaryentry{\glsdetoklabel{#1}}\glspercentchar^^J% + \expandafter\@gobble\string\{\glspercentchar% + }% + \@for\@gls@map:=\@gls@keymap\do + {% + \letcs\glo@value{glo@\glsdetoklabel{#1}@\expandafter\@secondoftwo\@gls@map}% + \ifdef\glo@value + {% + \@onelevel@sanitize\glo@value + \immediate\write\@gls@deffile + {% + \expandafter\@firstoftwo\@gls@map + =\expandafter\@gobble\string\{\glo@value\expandafter\@gobble\string\},% + \glspercentchar + }% + }% + {}% + }% + \glswritedefhook + \immediate\write\@gls@deffile + {% + \glspercentchar^^J% + \expandafter\@gobble\string\}\glspercentchar^^J% + \expandafter\@gobble\string\}\glspercentchar% + }% +} +\newcommand*{\@gls@keymap}{% + {name}{name},% + {sort}{sortvalue},% unescaped sort value + {type}{type},% + {first}{first},% + {firstplural}{firstpl},% + {text}{text},% + {plural}{plural},% + {description}{desc},% + {descriptionplural}{descplural},% + {symbol}{symbol},% + {symbolplural}{symbolplural},% + {user1}{useri},% + {user2}{userii},% + {user3}{useriii},% + {user4}{useriv},% + {user5}{userv},% + {user6}{uservi},% + {long}{long},% + {longplural}{longpl},% + {short}{short},% + {shortplural}{shortpl},% + {counter}{counter},% + {parent}{parent}% +} +\newcommand*{\@gls@fetchfield}[2]{% + \edef\@gls@thisval{#2}% + \@for\@gls@map:=\@gls@keymap\do{% + \edef\@this@key{\expandafter\@firstoftwo\@gls@map}% + \ifdefequal{\@this@key}{\@gls@thisval}% + {% + \edef#1{\expandafter\@secondoftwo\@gls@map}% + \@endfortrue + }% + {}% + }% +} +\newcommand*{\glsaddstoragekey}{\@ifstar\@sglsaddstoragekey\@glsaddstoragekey} +\newcommand*{\@sglsaddstoragekey}[1]{% + \key@ifundefined{glossentry}{#1}% + {% + \expandafter\newcommand\expandafter*\expandafter + {\csname gls@assign@#1@field\endcsname}[2]{% + \@@gls@expand@field{##1}{#1}{##2}% + }% + }% + {}% + \@glsaddstoragekey{#1}% +} +\newcommand*{\@glsaddstoragekey}[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}% + }% + \newcommand*{#3}[1]{\@gls@entry@field{##1}{#1}}% + }% + {% + \PackageError{glossaries}{Key `#1' already exists}{}% + }% +} +\newcommand*{\glsaddkey}{\@ifstar\@sglsaddkey\@glsaddkey} +\newcommand*{\@sglsaddkey}[1]{% + \key@ifundefined{glossentry}{#1}% + {% + \expandafter\newcommand\expandafter*\expandafter + {\csname gls@assign@#1@field\endcsname}[2]{% + \@@gls@expand@field{##1}{#1}{##2}% + }% + }% + {}% + \@glsaddkey{#1}% +} +\newcommand*{\@glsaddkey}[7]{% + \key@ifundefined{glossentry}{#1}% + {% + \define@key{glossentry}{#1}{\csdef{@glo@#1}{##1}}% + \appto\@gls@keymap{,{#1}{#1}}% + \appto\@newglossaryentryprehook{\csdef{@glo@#1}{#2}}% + \appto\@newglossaryentryposthook{% + \letcs{\@glo@tmp}{@glo@#1}% + \gls@assign@field{#2}{\@glo@label}{#1}{\@glo@tmp}% + }% + \newcommand*{#3}[1]{\@gls@entry@field{##1}{#1}}% + \newcommand*{#4}[1]{\@Gls@entry@field{##1}{#1}}% + \ifcsdef{@gls@user@#1@}% + {% + \PackageError{glossaries}% + {Can't define `\string#5' as helper command + `\expandafter\string\csname @gls@user@#1@\endcsname' already exists}% + {}% + }% + {% + \expandafter\newcommand\expandafter*\expandafter + {\csname @gls@user@#1\endcsname}[2][]{% + \new@ifnextchar[% + {\csuse{@gls@user@#1@}{##1}{##2}}% + {\csuse{@gls@user@#1@}{##1}{##2}[]}}% + \csdef{@gls@user@#1@}##1##2[##3]{% + \@gls@field@link{##1}{##2}{#3{##2}##3}% + }% + \newrobustcmd*{#5}{% + \expandafter\@gls@hyp@opt\csname @gls@user@#1\endcsname}% + }% + \ifcsdef{@Gls@user@#1@}% + {% + \PackageError{glossaries}% + {Can't define `\string#6' as helper command + `\expandafter\string\csname @Gls@user@#1@\endcsname' already exists}% + {}% + }% + {% + \expandafter\newcommand\expandafter*\expandafter + {\csname @Gls@user@#1\endcsname}[2][]{% + \new@ifnextchar[% + {\csuse{@Gls@user@#1@}{##1}{##2}}% + {\csuse{@Gls@user@#1@}{##1}{##2}[]}}% + \csdef{@Gls@user@#1@}##1##2[##3]{% + \@gls@field@link{##1}{##2}{#4{##2}##3}% + }% + \newrobustcmd*{#6}{% + \expandafter\@gls@hyp@opt\csname @Gls@user@#1\endcsname}% + }% + \ifcsdef{@GLS@user@#1@}% + {% + \PackageError{glossaries}% + {Can't define `\string#7' as helper command + `\expandafter\string\csname @GLS@user@#1@\endcsname' already exists}% + {}% + }% + {% + \expandafter\newcommand\expandafter*\expandafter + {\csname @GLS@user@#1\endcsname}[2][]{% + \new@ifnextchar[% + {\csuse{@GLS@user@#1@}{##1}{##2}}% + {\csuse{@GLS@user@#1@}{##1}{##2}[]}}% + \csdef{@GLS@user@#1@}##1##2[##3]{% + \@gls@field@link{##1}{##2}{\mfirstucMakeUppercase{#3{##2}##3}}% + }% + \newrobustcmd*{#7}{% + \expandafter\@gls@hyp@opt\csname @GLS@user@#1\endcsname}% + }% + }% + {% + \PackageError{glossaries}{Key `#1' already exists}{}% + }% +} +\newcommand{\glsfieldxdef}[3]{% + \glsdoifexists{#1}% + {% + \edef\@glo@label{\glsdetoklabel{#1}}% + \ifcsdef{glo@\@glo@label @#2}% + {% + \protected@csxdef{glo@\@glo@label @#2}{#3}% + }% + {% + \PackageError{glossaries}{Key `#2' doesn't exist}{}% + }% + }% +} +\newcommand{\glsfieldedef}[3]{% + \glsdoifexists{#1}% + {% + \edef\@glo@label{\glsdetoklabel{#1}}% + \ifcsdef{glo@\@glo@label @#2}% + {% + \protected@csedef{glo@\@glo@label @#2}{#3}% + }% + {% + \PackageError{glossaries}{Key `#2' doesn't exist}{}% + }% + }% +} +\newcommand{\glsfieldgdef}[3]{% + \glsdoifexists{#1}% + {% + \edef\@glo@label{\glsdetoklabel{#1}}% + \ifcsdef{glo@\@glo@label @#2}% + {% + \expandafter\gdef\csname glo@\@glo@label @#2\endcsname{#3}% + }% + {% + \PackageError{glossaries}{Key `#2' doesn't exist}{}% + }% + }% +} +\newcommand{\glsfielddef}[3]{% + \glsdoifexists{#1}% + {% + \edef\@glo@label{\glsdetoklabel{#1}}% + \ifcsdef{glo@\@glo@label @#2}% + {% + \expandafter\def\csname glo@\@glo@label @#2\endcsname{#3}% + }% + {% + \PackageError{glossaries}{Key `#2' doesn't exist}{}% + }% + }% +} +\newcommand{\glsfieldfetch}[3]{% + \glsdoifexists{#1}% + {% + \edef\@glo@label{\glsdetoklabel{#1}}% + \ifcsdef{glo@\@glo@label @#2}% + {% + \letcs#3{glo@\@glo@label @#2}% + }% + {% + \PackageError{glossaries}{Key `#2' doesn't exist}{}% + }% + }% +} +\newcommand{\ifglsfieldeq}[5]{% + \glsdoifexists{#1}% + {% + \edef\@glo@label{\glsdetoklabel{#1}}% + \ifcsdef{glo@\@glo@label @#2}% + {% + \ifcsstring{glo@\@glo@label @#2}{#3}{#4}{#5}% + }% + {% + \PackageError{glossaries}{Key `#2' doesn't exist}{}% + }% + }% +} +\newcommand{\ifglsfielddefeq}[5]{% + \glsdoifexists{#1}% + {% + \edef\@glo@label{\glsdetoklabel{#1}}% + \ifcsdef{glo@\@glo@label @#2}% + {% + \expandafter\ifdefstrequal + \csname glo@\@glo@label @#2\endcsname{#3}{#4}{#5}% + }% + {% + \PackageError{glossaries}{Key `#2' doesn't exist}{}% + }% + }% +} +\newcommand{\ifglsfieldcseq}[5]{% + \glsdoifexists{#1}% + {% + \edef\@glo@label{\glsdetoklabel{#1}}% + \ifcsdef{glo@\@glo@label @#2}% + {% + \ifcsstrequal{glo@\@glo@label @#2}{#3}{#4}{#5}% + }% + {% + \PackageError{glossaries}{Key `#2' doesn't exist}{}% + }% + }% +} +\newcommand*{\glswritedefhook}{} +\newcommand*{\gls@assign@desc}[1]{% + \gls@assign@field{}{#1}{desc}{\@glo@desc}% + \gls@assign@field{\@glo@desc}{#1}{descplural}{\@glo@descplural}% +} +\newcommand{\longnewglossaryentry}[3]{% + \glsdoifnoexists{#1}% + {% + \bgroup + \let\@org@newglossaryentryprehook\@newglossaryentryprehook + \long\def\@newglossaryentryprehook{% + \long\def\@glo@desc{#3\leavevmode\unskip\nopostdesc}% + \@org@newglossaryentryprehook + }% + \renewcommand*{\gls@assign@desc}[1]{% + \global\cslet{glo@\glsdetoklabel{#1}@desc}{\@glo@desc}% + \global\cslet{glo@\glsdetoklabel{#1}@descplural}{\@glo@desc}% + } + \gls@defglossaryentry{#1}{#2}% + \egroup + } +} +\@onlypreamble{\longnewglossaryentry} +\newcommand{\longprovideglossaryentry}[3]{% + \ifglsentryexists{#1}{}% + {\longnewglossaryentry{#1}{#2}{#3}}% +} +\@onlypreamble{\longprovideglossaryentry} +\newcommand{\gls@defglossaryentry}[2]{% + \let\GlsSetQuote\gls@nosetquote + \edef\@glo@label{\glsdetoklabel{#1}}% + \let\glslabel\@glo@label + \let\@glo@name\@glsnoname + \let\@glo@desc\@glsnodesc + \let\@glo@descplural\@gls@default@value + \let\@glo@type\@gls@default@value + \let\@glo@symbol\@gls@default@value + \let\@glo@symbolplural\@gls@default@value + \let\@glo@text\@gls@default@value + \let\@glo@plural\@gls@default@value + \let\@glo@first\@gls@default@value + \let\@glo@firstplural\@gls@default@value + \let\@glo@sort\@gls@default@value + \let\@glo@counter\@gls@default@value + \def\@glo@see{}% + \def\@glo@parent{}% + \def\@glo@prefix{}% + \@gls@initnonumberlist + \def\@glo@useri{}% + \def\@glo@userii{}% + \def\@glo@useriii{}% + \def\@glo@useriv{}% + \def\@glo@userv{}% + \def\@glo@uservi{}% + \def\@glo@short{}% + \def\@glo@shortpl{}% + \def\@glo@long{}% + \def\@glo@longpl{}% + \@newglossaryentryprehook + \setkeys{glossentry}{#2}% + \ifundef\glsdefaulttype + {% + \PackageError{glossaries}% + {No default glossary type (have you used `nomain' by mistake?)}% + {If you use package option `nomain' you must define + a new glossary before you can define entries}% + }% + {}% + \gls@assign@field{\glsdefaulttype}{\@glo@label}{type}{\@glo@type}% + \edef\@glo@type{\glsentrytype{\@glo@label}}% + \ifcsundef{glolist@\@glo@type}% + {% + \PackageError{glossaries}% + {Glossary type `\@glo@type' has not been defined}% + {You need to define a new glossary type, before making entries + in it}% + }% + {% + \ifignoredglossary\@glo@type + {% + \ifx\@glo@desc\@glsnodesc + \let\@glo@desc\@empty + \fi + }% + {% + }% + \protected@edef\@glolist@{\csname glolist@\@glo@type\endcsname}% + \expandafter\xdef\csname glolist@\@glo@type\endcsname{% + \@glolist@{\@glo@label},}% + }% + \gls@level=0\relax + \ifx\@glo@parent\@empty + \expandafter\gdef\csname glo@\@glo@label @parent\endcsname{}% + \else + \ifdefequal\@glo@label\@glo@parent% + {% + \PackageError{glossaries}{Entry `\@glo@label' can't be its own parent}{}% + \def\@glo@parent{}% + \expandafter\gdef\csname glo@\@glo@label @parent\endcsname{}% + }% + {% + \ifglsentryexists{\@glo@parent}% + {% + \expandafter\xdef\csname glo@\@glo@label @parent\endcsname{% + \@glo@parent}% + \gls@level=\csname glo@\@glo@parent @level\endcsname\relax + \advance\gls@level by 1\relax + \ifx\@glo@name\@glsnoname + \expandafter\let\expandafter\@glo@name + \csname glo@\@glo@parent @name\endcsname + \ifx\@glo@plural\@gls@default@value + \expandafter\let\expandafter\@glo@plural + \csname glo@\@glo@parent @plural\endcsname + \fi + \fi + }% + {% + \PackageError{glossaries}% + {% + Invalid parent `\@glo@parent' + for entry `\@glo@label' - parent doesn't exist% + }% + {% + Parent entries must be defined before their children% + }% + \def\@glo@parent{}% + \expandafter\gdef\csname glo@\@glo@label @parent\endcsname{}% + }% + }% + \fi + \expandafter\xdef\csname glo@\@glo@label @level\endcsname{\number\gls@level}% + \gls@assign@field{\@glo@name}{\@glo@label}{sortvalue}{\@glo@sort}% + \letcs\@glo@sort{glo@\@glo@label @sortvalue}% + \gls@assign@field{\@glo@name}{\@glo@label}{text}{\@glo@text}% + \expandafter\gls@assign@field\expandafter + {\csname glo@\@glo@label @text\endcsname\glspluralsuffix}% + {\@glo@label}{plural}{\@glo@plural}% + \expandafter\gls@assign@field\expandafter + {\csname glo@\@glo@label @text\endcsname}% + {\@glo@label}{first}{\@glo@first}% + \ifx\@glo@first\@gls@default@value + \expandafter\gls@assign@field\expandafter + {\csname glo@\@glo@label @plural\endcsname}% + {\@glo@label}{firstpl}{\@glo@firstplural}% + \else + \expandafter\gls@assign@field\expandafter + {\csname glo@\@glo@label @first\endcsname\glspluralsuffix}% + {\@glo@label}{firstpl}{\@glo@firstplural}% + \fi + \ifcsundef{@glotype@\@glo@type @counter}% + {% + \def\@glo@defaultcounter{\glscounter}% + }% + {% + \letcs\@glo@defaultcounter{@glotype@\@glo@type @counter}% + }% + \gls@assign@field{\@glo@defaultcounter}{\@glo@label}{counter}{\@glo@counter}% + \gls@assign@field{}{\@glo@label}{useri}{\@glo@useri}% + \gls@assign@field{}{\@glo@label}{userii}{\@glo@userii}% + \gls@assign@field{}{\@glo@label}{useriii}{\@glo@useriii}% + \gls@assign@field{}{\@glo@label}{useriv}{\@glo@useriv}% + \gls@assign@field{}{\@glo@label}{userv}{\@glo@userv}% + \gls@assign@field{}{\@glo@label}{uservi}{\@glo@uservi}% + \gls@assign@field{}{\@glo@label}{short}{\@glo@short}% + \gls@assign@field{}{\@glo@label}{shortpl}{\@glo@shortpl}% + \gls@assign@field{}{\@glo@label}{long}{\@glo@long}% + \gls@assign@field{}{\@glo@label}{longpl}{\@glo@longpl}% + \ifx\@glo@name\@glsnoname + \@glsnoname + \let\@gloname\@gls@default@value + \fi + \gls@assign@field{}{\@glo@label}{name}{\@glo@name}% + \ifcsundef{glo@\@glo@label @numberlist}% + {% + \csxdef{glo@\@glo@label @numberlist}{% + \noexpand\@gls@missingnumberlist{\@glo@label}}% + }% + {}% + \@gls@storenonumberlist{\@glo@label}% + \def\@glo@@desc{\@glo@first}% + \ifx\@glo@desc\@glo@@desc + \let\@glo@desc\@glo@first + \fi + \ifx\@glo@desc\@glsnodesc + \@glsnodesc + \let\@glodesc\@gls@default@value + \fi + \gls@assign@desc{\@glo@label}% + \@gls@defsort{\@glo@type}{\@glo@label}% + \def\@glo@@symbol{\@glo@text}% + \ifx\@glo@symbol\@glo@@symbol + \let\@glo@symbol\@glo@text + \fi + \gls@assign@field{\relax}{\@glo@label}{symbol}{\@glo@symbol}% + \expandafter + \gls@assign@field\expandafter + {\csname glo@\@glo@label @symbol\endcsname} + {\@glo@label}{symbolplural}{\@glo@symbolplural}% + \expandafter\xdef\csname glo@\@glo@label @flagfalse\endcsname{% + \noexpand\global + \noexpand\let\expandafter\noexpand + \csname ifglo@\@glo@label @flag\endcsname\noexpand\iffalse + }% + \expandafter\xdef\csname glo@\@glo@label @flagtrue\endcsname{% + \noexpand\global + \noexpand\let\expandafter\noexpand + \csname ifglo@\@glo@label @flag\endcsname\noexpand\iftrue + }% + \csname glo@\@glo@label @flagfalse\endcsname + \@glo@autosee + \ifignoredglossary\@glo@type + {% + \csdef{glo@\@glo@label @index}{}% + } + {% + \do@glo@storeentry{\@glo@label}% + }% + \@newglossaryentry@defcounters + \@newglossaryentryposthook +} +\newcommand*{\@glo@autosee}{% + \ifdefvoid\@glo@see{}% + {% + \protected@edef\@do@glssee{% + \noexpand\@gls@fixbraces\noexpand\@glo@list\@glo@see\noexpand\@nil + \noexpand\expandafter\noexpand\@glssee\noexpand\@glo@list{\@glo@label}}% + \@do@glssee + }% + \@glo@autoseehook +}% +\newcommand*{\@glo@autoseehook}{} +\newcommand*{\@newglossaryentryprehook}{} +\newcommand*{\@newglossaryentryposthook}{} +\newcommand*{\@newglossaryentry@defcounters}{} +\newcommand*{\glsmoveentry}[2]{% + \edef\@glo@thislabel{\glsdetoklabel{#1}}% + \edef\glo@type{\csname glo@\@glo@thislabel @type\endcsname}% + \def\glo@list{,}% + \forglsentries[\glo@type]{\glo@label}% + {% + \ifdefequal\@glo@thislabel\glo@label + {}{\eappto\glo@list{\glo@label,}}% + }% + \cslet{glolist@\glo@type}{\glo@list}% + \csdef{glo@\@glo@thislabel @type}{#2}% +} +\ifglsxindy + \newcommand*{\@glossaryentryfield}{\string\\glossentry} +\else + \newcommand*{\@glossaryentryfield}{\string\glossentry} +\fi +\ifglsxindy + \newcommand*{\@glossarysubentryfield}{% + \string\\subglossentry} +\else + \newcommand*{\@glossarysubentryfield}{% + \string\subglossentry} +\fi +\newcommand{\@glo@storeentry}[1]{% + \edef\@glo@esclabel{#1}% + \@gls@checkmkidxchars\@glo@esclabel + \protected@edef\@glo@sort{\csname glo@#1@sort\endcsname}% + \@gls@checkmkidxchars\@glo@sort + \@gls@checkmkidxchars\@glo@prefix + \edef\@glo@parent{\csname glo@#1@parent\endcsname}% + \ifglsxindy + \ifx\@glo@parent\@empty + \expandafter\protected@xdef\csname glo@#1@index\endcsname{% + (\string"\@glo@sort\string" % + \string"\@glo@prefix\@glossaryentryfield{\@glo@esclabel}\string") % + }% + \else + \expandafter\protected@xdef\csname glo@#1@index\endcsname{% + \csname glo@\@glo@parent @index\endcsname + (\string"\@glo@sort\string" % + \string"\@glo@prefix\@glossarysubentryfield + {\csname glo@#1@level\endcsname}{\@glo@esclabel}\string") % + }% + \fi + \else + \ifx\@glo@parent\@empty + \@onelevel@sanitize\@glo@prefix + \expandafter\protected@xdef\csname glo@#1@index\endcsname{% + \@glo@sort\@gls@actualchar\@glo@prefix + \@glossaryentryfield{\@glo@esclabel}% + }% + \else + \expandafter\protected@xdef\csname glo@#1@index\endcsname{% + \csname glo@\@glo@parent @index\endcsname\@gls@levelchar + \@glo@sort\@gls@actualchar\@glo@prefix + \@glossarysubentryfield + {\csname glo@#1@level\endcsname}{\@glo@esclabel}% + }% + \fi + \fi +} +\AtBeginDocument{% + \@ifpackageloaded{amsmath}% + {\let\gls@ifnotmeasuring\@gls@ifnotmeasuring}% + {}% +} +\newcommand*{\@gls@ifnotmeasuring}[1]{% + \ifmeasuring@ + \else + #1% + \fi +} +\newcommand*\gls@ifnotmeasuring[1]{#1} +\def\@gls@patchtabularx#1\hbox#2#3!!{% + \def\TX@trial##1{#1\hbox{\let\glsunset\@gobble#2}#3}% +} +\newcommand*\glspatchtabularx{% + \ifdef\TX@trial + {% + \expandafter\@gls@patchtabularx\TX@trial{##1}!!% + \let\glspatchtabularx\relax + }% + {}% +} +\newcommand*{\glsreset}[1]{% + \gls@ifnotmeasuring + {% + \glsdoifexists{#1}% + {% + \@glsreset{#1}% + }% + }% +} +\newcommand*{\glslocalreset}[1]{% + \gls@ifnotmeasuring + {% + \glsdoifexists{#1}% + {% + \@glslocalreset{#1}% + }% + }% +} +\newcommand*{\glsunset}[1]{% + \gls@ifnotmeasuring + {% + \glsdoifexists{#1}% + {% + \@glsunset{#1}% + }% + }% +} +\newcommand*{\glslocalunset}[1]{% + \gls@ifnotmeasuring + {% + \glsdoifexists{#1}% + {% + \@glslocalunset{#1}% + }% + }% +} +\newcommand*{\@glslocalunset}{\@@glslocalunset} +\newcommand*{\@@glslocalunset}[1]{% + \expandafter\let\csname ifglo@\glsdetoklabel{#1}@flag\endcsname\iftrue +} +\newcommand*{\@glsunset}{\@@glsunset} +\newcommand*{\@@glsunset}[1]{% + \expandafter\global\csname glo@\glsdetoklabel{#1}@flagtrue\endcsname +} +\newcommand*{\@glslocalreset}{\@@glslocalreset} +\newcommand*{\@@glslocalreset}[1]{% + \expandafter\let\csname ifglo@\glsdetoklabel{#1}@flag\endcsname\iffalse +} +\newcommand*{\@glsreset}{\@@glsreset} +\newcommand*{\@@glsreset}[1]{% + \expandafter\global\csname glo@\glsdetoklabel{#1}@flagfalse\endcsname +} +\newcommand*{\glsresetall}[1][\@glo@types]{% + \forallglsentries[#1]{\@glsentry}% + {% + \glsreset{\@glsentry}% + }% +} +\newcommand*{\glslocalresetall}[1][\@glo@types]{% + \forallglsentries[#1]{\@glsentry}% + {% + \glslocalreset{\@glsentry}% + }% +} +\newcommand*{\glsunsetall}[1][\@glo@types]{% + \forallglsentries[#1]{\@glsentry}% + {% + \glsunset{\@glsentry}% + }% +} +\newcommand*{\glslocalunsetall}[1][\@glo@types]{% + \forallglsentries[#1]{\@glsentry}% + {% + \glslocalunset{\@glsentry}% + }% +} +\newcommand*{\@@newglossaryentry@defcounters}{% + \csdef{glo@\@glo@label @currcount}{0}% + \csdef{glo@\@glo@label @prevcount}{0}% +} +\newcommand*{\glsenableentrycount}{% + \let\@newglossaryentry@defcounters\@@newglossaryentry@defcounters + \renewcommand*{\gls@defdocnewglossaryentry}{% + \renewcommand*\newglossaryentry[2]{% + \PackageError{glossaries}{\string\newglossaryentry\space + may only be used in the preamble when entry counting has + been activated}{If you use \string\glsenableentrycount\space + you must place all entry definitions in the preamble not in + the document environment}% + }% + }% + \newcommand*{\glsentrycurrcount}[1]{% + \ifcsundef{glo@\glsdetoklabel{##1}@currcount}% + {0}{\@gls@entry@field{##1}{currcount}}% + }% + \newcommand*{\glsentryprevcount}[1]{% + \ifcsundef{glo@\glsdetoklabel{##1}@prevcount}% + {0}{\@gls@entry@field{##1}{prevcount}}% + }% + \renewcommand*{\@glsunset}[1]{% + \@@glsunset{##1}% + \@gls@increment@currcount{##1}% + }% + \renewcommand*{\@glslocalunset}[1]{% + \@@glslocalunset{##1}% + \@gls@local@increment@currcount{##1}% + }% + \renewcommand*{\@glsreset}[1]{% + \@@glsreset{##1}% + \csgdef{glo@\glsdetoklabel{##1}@currcount}{0}% + }% + \renewcommand*{\@glslocalreset}[1]{% + \@@glslocalreset{##1}% + \csdef{glo@\glsdetoklabel{##1}@currcount}{0}% + }% + \def\@cgls@##1##2[##3]{% + \ifnum\glsentryprevcount{##2}=1\relax + \cglsformat{##2}{##3}% + \glsunset{##2}% + \else + \@gls@{##1}{##2}[##3]% + \fi + }% + \def\@cglspl@##1##2[##3]{% + \ifnum\glsentryprevcount{##2}=1\relax + \cglsplformat{##2}{##3}% + \glsunset{##2}% + \else + \@glspl@{##1}{##2}[##3]% + \fi + }% + \def\@cGls@##1##2[##3]{% + \ifnum\glsentryprevcount{##2}=1\relax + \cGlsformat{##2}{##3}% + \glsunset{##2}% + \else + \@Gls@{##1}{##2}[##3]% + \fi + }% + \def\@cGlspl@##1##2[##3]{% + \ifnum\glsentryprevcount{##2}=1\relax + \cGlsplformat{##2}{##3}% + \glsunset{##2}% + \else + \@Glspl@{##1}{##2}[##3]% + \fi + }% + \AtEndDocument{\@gls@write@entrycounts}% + \renewcommand*{\@gls@entry@count}[2]{% + \csgdef{glo@\glsdetoklabel{##1}@prevcount}{##2}% + }% + \let\glsenableentrycount\relax +} +\@onlypreamble\glsenableentrycount +\newcommand*{\@gls@increment@currcount}[1]{% + \csxdef{glo@\glsdetoklabel{#1}@currcount}{% + \number\numexpr\glsentrycurrcount{#1}+1}% +} +\newcommand*{\@gls@local@increment@currcount}[1]{% + \csedef{glo@\glsdetoklabel{#1}@currcount}{% + \number\numexpr\glsentrycurrcount{#1}+1}% +} +\newcommand*{\@gls@write@entrycounts}{% + \immediate\write\@auxout + {\string\providecommand*{\string\@gls@entry@count}[2]{}}% + \forallglsentries{\@glsentry}{% + \ifglsused{\@glsentry}% + {\immediate\write\@auxout + {\string\@gls@entry@count{\@glsentry}{\glsentrycurrcount{\@glsentry}}}}% + {}% + }% +} +\newcommand*{\@gls@entry@count}[2]{} +\newrobustcmd*{\cgls}{\@gls@hyp@opt\@cgls} +\newcommand*{\@cgls}[2][]{% + \new@ifnextchar[{\@cgls@{#1}{#2}}{\@cgls@{#1}{#2}[]}% +} +\def\@cgls@#1#2[#3]{% + \GlossariesWarning{\string\cgls\space is defaulting to + \string\gls\space since you haven't enabled entry counting}% + \@gls@{#1}{#2}[#3]% +} +\newcommand*{\cglsformat}[2]{% + \ifglshaslong{#1}{\glsentrylong{#1}}{\glsentryfirst{#1}}#2% +} +\newrobustcmd*{\cGls}{\@gls@hyp@opt\@cGls} +\newcommand*{\@cGls}[2][]{% + \new@ifnextchar[{\@cGls@{#1}{#2}}{\@cGls@{#1}{#2}[]}% +} +\def\@cGls@#1#2[#3]{% + \GlossariesWarning{\string\cGls\space is defaulting to + \string\Gls\space since you haven't enabled entry counting}% + \@Gls@{#1}{#2}[#3]% +} +\newcommand*{\cGlsformat}[2]{% + \ifglshaslong{#1}{\Glsentrylong{#1}}{\Glsentryfirst{#1}}#2% +} +\newrobustcmd*{\cglspl}{\@gls@hyp@opt\@cglspl} +\newcommand*{\@cglspl}[2][]{% + \new@ifnextchar[{\@cglspl@{#1}{#2}}{\@cglspl@{#1}{#2}[]}% +} +\def\@cglspl@#1#2[#3]{% + \GlossariesWarning{\string\cglspl\space is defaulting to + \string\glspl\space since you haven't enabled entry counting}% + \@glspl@{#1}{#2}[#3]% +} +\newcommand*{\cglsplformat}[2]{% + \ifglshaslong{#1}{\glsentrylongpl{#1}}{\glsentryfirstplural{#1}}#2% +} +\newrobustcmd*{\cGlspl}{\@gls@hyp@opt\@cGlspl} +\newcommand*{\@cGlspl}[2][]{% + \new@ifnextchar[{\@cGlspl@{#1}{#2}}{\@cGlspl@{#1}{#2}[]}% +} +\def\@cGlspl@#1#2[#3]{% + \GlossariesWarning{\string\cGlspl\space is defaulting to + \string\Glspl\space since you haven't enabled entry counting}% + \@Glspl@{#1}{#2}[#3]% +} +\newcommand*{\cGlsplformat}[2]{% + \ifglshaslong{#1}{\Glsentrylongpl{#1}}{\Glsentryfirstplural{#1}}#2% +} +\newcommand*{\loadglsentries}[2][\@gls@default]{% + \let\@gls@default\glsdefaulttype + \def\glsdefaulttype{#1}\input{#2}% + \let\glsdefaulttype\@gls@default +} +\@onlypreamble{\loadglsentries} +\newcommand*{\glstextformat}[1]{#1} +\newcommand*{\glsentryfmt}{% + \@@gls@default@entryfmt\glsdisplayfirst\glsdisplay +} +\newcommand*{\@@gls@default@entryfmt}[2]{% + \ifdefempty\glscustomtext + {% + \glsifplural + {% + \glscapscase + {% + \ifglsused\glslabel + {% + #2{\glsentryplural{\glslabel}}% + {\glsentrydescplural{\glslabel}}% + {\glsentrysymbolplural{\glslabel}}{\glsinsert}% + }% + {% + #1{\glsentryfirstplural{\glslabel}}% + {\glsentrydescplural{\glslabel}}% + {\glsentrysymbolplural{\glslabel}}{\glsinsert}% + }% + }% + {% + \ifglsused\glslabel + {% + \ifbool{glscompatible-3.07}% + {% + \protected@edef\@glo@etext{% + #2{\glsentryplural{\glslabel}}% + {\glsentrydescplural{\glslabel}}% + {\glsentrysymbolplural{\glslabel}}{\glsinsert}}% + \xmakefirstuc\@glo@etext + }% + {% + #2{\Glsentryplural{\glslabel}}% + {\glsentrydescplural{\glslabel}}% + {\glsentrysymbolplural{\glslabel}}{\glsinsert}% + }% + }% + {% + \ifbool{glscompatible-3.07}% + {% + \protected@edef\@glo@etext{% + #1{\glsentryfirstplural{\glslabel}}% + {\glsentrydescplural{\glslabel}}% + {\glsentrysymbolplural{\glslabel}}{\glsinsert}}% + \xmakefirstuc\@glo@etext + }% + {% + #1{\Glsentryfirstplural{\glslabel}}% + {\glsentrydescplural{\glslabel}}% + {\glsentrysymbolplural{\glslabel}}{\glsinsert}% + }% + }% + }% + {% + \ifglsused\glslabel + {% + \mfirstucMakeUppercase{#2{\glsentryplural{\glslabel}}% + {\glsentrydescplural{\glslabel}}% + {\glsentrysymbolplural{\glslabel}}{\glsinsert}}% + }% + {% + \mfirstucMakeUppercase{#1{\glsentryfirstplural{\glslabel}}% + {\glsentrydescplural{\glslabel}}% + {\glsentrysymbolplural{\glslabel}}{\glsinsert}}% + }% + }% + }% + {% + \glscapscase + {% + \ifglsused\glslabel + {% + #2{\glsentrytext{\glslabel}}% + {\glsentrydesc{\glslabel}}% + {\glsentrysymbol{\glslabel}}{\glsinsert}% + }% + {% + #1{\glsentryfirst{\glslabel}}% + {\glsentrydesc{\glslabel}}% + {\glsentrysymbol{\glslabel}}{\glsinsert}% + }% + }% + {% + \ifglsused\glslabel + {% + \ifbool{glscompatible-3.07}% + {% + \protected@edef\@glo@etext{% + #2{\glsentrytext{\glslabel}}% + {\glsentrydesc{\glslabel}}% + {\glsentrysymbol{\glslabel}}{\glsinsert}}% + \xmakefirstuc\@glo@etext + }% + {% + #2{\Glsentrytext{\glslabel}}% + {\glsentrydesc{\glslabel}}% + {\glsentrysymbol{\glslabel}}{\glsinsert}% + }% + }% + {% + \ifbool{glscompatible-3.07}% + {% + \protected@edef\@glo@etext{% + #1{\glsentryfirst{\glslabel}}% + {\glsentrydesc{\glslabel}}% + {\glsentrysymbol{\glslabel}}{\glsinsert}}% + \xmakefirstuc\@glo@etext + }% + {% + #1{\Glsentryfirst{\glslabel}}% + {\glsentrydesc{\glslabel}}% + {\glsentrysymbol{\glslabel}}{\glsinsert}% + }% + }% + }% + {% + \ifglsused\glslabel + {% + \mfirstucMakeUppercase{#2{\glsentrytext{\glslabel}}% + {\glsentrydesc{\glslabel}}% + {\glsentrysymbol{\glslabel}}{\glsinsert}}% + }% + {% + \mfirstucMakeUppercase{#1{\glsentryfirst{\glslabel}}% + {\glsentrydesc{\glslabel}}% + {\glsentrysymbol{\glslabel}}{\glsinsert}}% + }% + }% + }% + }% + {% + \ifglsused{\glslabel}% + {% + #2{\glscustomtext}% + {\glsentrydesc{\glslabel}}% + {\glsentrysymbol{\glslabel}}{}% + }% + {% + #1{\glscustomtext}% + {\glsentrydesc{\glslabel}}% + {\glsentrysymbol{\glslabel}}{}% + }% + }% +} +\newcommand*{\glsgenentryfmt}{% + \ifdefempty\glscustomtext + {% + \glsifplural + {% + \glscapscase + {% + \ifglsused\glslabel + {% + \glsentryplural{\glslabel}\glsinsert + }% + {% + \glsentryfirstplural{\glslabel}\glsinsert + }% + }% + {% + \ifglsused\glslabel + {% + \Glsentryplural{\glslabel}\glsinsert + }% + {% + \Glsentryfirstplural{\glslabel}\glsinsert + }% + }% + {% + \ifglsused\glslabel + {% + \mfirstucMakeUppercase + {\glsentryplural{\glslabel}\glsinsert}% + }% + {% + \mfirstucMakeUppercase + {\glsentryfirstplural{\glslabel}\glsinsert}% + }% + }% + }% + {% + \glscapscase + {% + \ifglsused\glslabel + {% + \glsentrytext{\glslabel}\glsinsert + }% + {% + \glsentryfirst{\glslabel}\glsinsert + }% + }% + {% + \ifglsused\glslabel + {% + \Glsentrytext{\glslabel}\glsinsert + }% + {% + \Glsentryfirst{\glslabel}\glsinsert + }% + }% + {% + \ifglsused\glslabel + {% + \mfirstucMakeUppercase{\glsentrytext{\glslabel}\glsinsert}% + }% + {% + \mfirstucMakeUppercase{\glsentryfirst{\glslabel}\glsinsert}% + }% + }% + }% + }% + {% + \glscustomtext\glsinsert + }% +} +\newcommand*{\glsgenacfmt}{% + \ifdefempty\glscustomtext + {% + \ifglsused\glslabel + {% + \glsifplural + {% + \glscapscase + {% + \acronymfont{\glsentryshortpl{\glslabel}}\glsinsert + }% + {% + \acronymfont{\Glsentryshortpl{\glslabel}}\glsinsert + }% + {% + \mfirstucMakeUppercase + {\acronymfont{\glsentryshortpl{\glslabel}}\glsinsert}% + }% + }% + {% + \glscapscase + {% + \acronymfont{\glsentryshort{\glslabel}}\glsinsert + }% + {% + \acronymfont{\Glsentryshort{\glslabel}}\glsinsert + }% + {% + \mfirstucMakeUppercase + {\acronymfont{\glsentryshort{\glslabel}}\glsinsert}% + }% + }% + }% + {% + \glsifplural + {% + \glscapscase + {% + \genplacrfullformat{\glslabel}{\glsinsert}% + }% + {% + \Genplacrfullformat{\glslabel}{\glsinsert}% + }% + {% + \mfirstucMakeUppercase + {\genplacrfullformat{\glslabel}{\glsinsert}}% + }% + }% + {% + \glscapscase + {% + \genacrfullformat{\glslabel}{\glsinsert}% + }% + {% + \Genacrfullformat{\glslabel}{\glsinsert}% + }% + {% + \mfirstucMakeUppercase + {\genacrfullformat{\glslabel}{\glsinsert}}% + }% + }% + }% + }% + {% + \glscustomtext + }% +} +\newcommand*{\genacrfullformat}[2]{% + \glsentrylong{#1}#2\space + (\protect\firstacronymfont{\glsentryshort{#1}})% +} +\newcommand*{\Genacrfullformat}[2]{% + \protected@edef\gls@text{\genacrfullformat{#1}{#2}}% + \xmakefirstuc\gls@text +} +\newcommand*{\genplacrfullformat}[2]{% + \glsentrylongpl{#1}#2\space + (\protect\firstacronymfont{\glsentryshortpl{#1}})% +} +\newcommand*{\Genplacrfullformat}[2]{% + \protected@edef\gls@text{\genplacrfullformat{#1}{#2}}% + \xmakefirstuc\gls@text +} +\newcommand*{\glsdisplayfirst}[4]{#1#4} +\newcommand*{\glsdisplay}[4]{#1#4} +\newcommand*{\defglsdisplay}[2][\glsdefaulttype]{% + \GlossariesWarning{\string\defglsdisplay\space is now obsolete.^^J + Use \string\defglsentryfmt\space instead}% + \expandafter\def\csname gls@#1@display\endcsname##1##2##3##4{#2}% + \edef\@gls@doentrydef{% + \noexpand\defglsentryfmt[#1]{% + \noexpand\ifcsdef{gls@#1@displayfirst}% + {% + \noexpand\@@gls@default@entryfmt + {\noexpand\csuse{gls@#1@displayfirst}}% + {\noexpand\csuse{gls@#1@display}}% + }% + {% + \noexpand\@@gls@default@entryfmt + {\noexpand\glsdisplayfirst}% + {\noexpand\csuse{gls@#1@display}}% + }% + }% + }% + \@gls@doentrydef +} +\newcommand*{\defglsdisplayfirst}[2][\glsdefaulttype]{% + \GlossariesWarning{\string\defglsdisplayfirst\space is now obsolete.^^J + Use \string\defglsentryfmt\space instead}% + \expandafter\def\csname gls@#1@displayfirst\endcsname##1##2##3##4{#2}% + \edef\@gls@doentrydef{% + \noexpand\defglsentryfmt[#1]{% + \noexpand\ifcsdef{gls@#1@display}% + {% + \noexpand\@@gls@default@entryfmt + {\noexpand\csuse{gls@#1@displayfirst}}% + {\noexpand\csuse{gls@#1@display}}% + }% + {% + \noexpand\@@gls@default@entryfmt + {\noexpand\csuse{gls@#1@displayfirst}}% + {\noexpand\glsdisplay}% + }% + }% + }% + \@gls@doentrydef +} +\define@key{glslink}{counter}{% + \ifcsundef{c@#1}% + {% + \PackageError{glossaries}% + {There is no counter called `#1'}% + {% + The counter key should have the name of a valid counter + as its value% + }% + }% + {% + \def\@gls@counter{#1}% + }% +} +\define@key{glslink}{format}{% + \def\@glsnumberformat{#1}} +\define@boolkey{glslink}{hyper}[true]{} +\ifdef{\hyperlink}{\KV@glslink@hypertrue}{\KV@glslink@hyperfalse} +\define@boolkey{glslink}{local}[true]{} +\newcommand*{\glslinkvar}[3]{#1} +\newcommand*{\glsifhyper}[2]{% + \glslinkvar{#1}{#2}{#1}% + \GlossariesWarning{\string\glsifhyper\space is deprecated. Did + you mean \string\glsifhyperon\space or \string\glslinkvar?}% +} +\newcommand*{\@gls@hyp@opt}[1]{% + \let\glslinkvar\@firstofthree + \let\@gls@hyp@opt@cs#1\relax + \@ifstar{\s@gls@hyp@opt}% + {\@ifnextchar+{\@firstoftwo{\p@gls@hyp@opt}}{#1}}% +} +\newcommand*{\s@gls@hyp@opt}[1][]{% + \let\glslinkvar\@secondofthree + \@gls@hyp@opt@cs[hyper=false,#1]} +\newcommand*{\p@gls@hyp@opt}[1][]{% + \let\glslinkvar\@thirdofthree + \@gls@hyp@opt@cs[hyper=true,#1]} +\newrobustcmd*{\glslink}{% + \@gls@hyp@opt\@gls@@link +} +\newcommand*{\@gls@@link}[3][]{% + \glsdoifexistsordo{#2}% + {% + \let\do@gls@link@checkfirsthyper\relax + \@gls@link[#1]{#2}{#3}% + }{% + \glstextformat{#3}% + }% + \glspostlinkhook +} +\newcommand*{\glspostlinkhook}{} +\newcommand*{\@gls@link@checkfirsthyper}{% + \ifglsused{\glslabel}% + {% + }% + {% + \gls@checkisacronymlist\glstype + \ifglshyperfirst + \if@glsisacronymlist + \ifglsacrfootnote + \KV@glslink@hyperfalse + \fi + \fi + \else + \KV@glslink@hyperfalse + \fi + }% + \glslinkcheckfirsthyperhook +} +\newcommand*{\glslinkcheckfirsthyperhook}{} +\newcommand*{\glslinkpostsetkeys}{} +\newcommand{\glsifhyperon}[2]{\ifKV@glslink@hyper#1\else#2\fi} +\newcommand*{\do@glsdisablehyperinlist}{% + \expandafter\DTLifinlist\expandafter{\glstype}{\@gls@nohyperlist}% + {\KV@glslink@hyperfalse}{}% +} +\newcommand*{\@gls@setdefault@glslink@opts}{} +\def\@gls@link[#1]#2#3{% + \leavevmode + \edef\glslabel{\glsdetoklabel{#2}}% + \def\@gls@link@opts{#1}% + \let\@gls@link@label\glslabel + \def\@glsnumberformat{glsnumberformat}% + \edef\@gls@counter{\csname glo@\glslabel @counter\endcsname}% + \edef\glstype{\csname glo@\glslabel @type\endcsname}% + \let\org@ifKV@glslink@hyper\ifKV@glslink@hyper + \@gls@setdefault@glslink@opts + \do@glsdisablehyperinlist + \do@gls@link@checkfirsthyper + \setkeys{glslink}{#1}% + \glslinkpostsetkeys + \@gls@saveentrycounter + \@gls@setsort{\glslabel}% + \@do@wrglossary{#2}% + \ifKV@glslink@hyper + \@glslink{\glolinkprefix\glslabel}{\glstextformat{#3}}% + \else + \glsdonohyperlink{\glolinkprefix\glslabel}{\glstextformat{#3}}% + \fi + \let\ifKV@glslink@hyper\org@ifKV@glslink@hyper +} +\newcommand*{\glolinkprefix}{glo:} +\def\glsentrycounter{\glscounter}% +\newcommand*{\@gls@saveentrycounter}{% + \def\@gls@Hcounter{}% + \ifthenelse{\equal{\@gls@counter}{equation}}% + { + \ifcsundef{xatlevel@}% + {% + \edef\theglsentrycounter{\expandafter\noexpand + \csname the\@gls@counter\endcsname}% + }% + {% + \ifx\xatlevel@\@empty + \edef\theglsentrycounter{\expandafter\noexpand + \csname the\@gls@counter\endcsname}% + \else + \savecounters@ + \advance\c@equation by 1\relax + \edef\theglsentrycounter{\csname the\@gls@counter\endcsname}% + \ifcsundef{theH\@gls@counter}% + {% + \def\@gls@Hcounter{\theglsentrycounter}% + }% + {% + \def\@gls@Hcounter{\csname theH\@gls@counter\endcsname}% + }% + \protected@edef\theHglsentrycounter{\@gls@Hcounter}% + \restorecounters@ + \fi + }% + }% + {% + \edef\theglsentrycounter{\expandafter\noexpand + \csname the\@gls@counter\endcsname}% + }% + \ifx\@gls@Hcounter\@empty + \ifcsundef{theH\@gls@counter}% + {% + \def\theHglsentrycounter{\theglsentrycounter}% + }% + {% + \protected@edef\theHglsentrycounter{\expandafter\noexpand + \csname theH\@gls@counter\endcsname}% + }% + \fi +} +\def\@set@glo@numformat#1#2#3#4{% + \expandafter\@glo@check@mkidxrangechar#3\@nil + \protected@edef#1{% + \@glo@prefix setentrycounter[#4]{#2}% + \expandafter\string\csname\@glo@suffix\endcsname + }% + \@gls@checkmkidxchars#1% +} +\def\@glo@check@mkidxrangechar#1#2\@nil{% +\if#1(\relax + \def\@glo@prefix{(}% + \if\relax#2\relax + \def\@glo@suffix{glsnumberformat}% + \else + \def\@glo@suffix{#2}% + \fi +\else + \if#1)\relax + \def\@glo@prefix{)}% + \if\relax#2\relax + \def\@glo@suffix{glsnumberformat}% + \else + \def\@glo@suffix{#2}% + \fi + \else + \def\@glo@prefix{}\def\@glo@suffix{#1#2}% + \fi +\fi} +\newcommand*{\@gls@escbsdq}[1]{% + \def\@gls@checkedmkidx{}% + \let\gls@xdystring=#1\relax + \@onelevel@sanitize\gls@xdystring + \edef\do@gls@xdycheckbackslash{% + \noexpand\@gls@xdycheckbackslash\gls@xdystring\noexpand\@nil + \@backslashchar\@backslashchar\noexpand\null}% + \do@gls@xdycheckbackslash + \expandafter\@gls@updatechecked\@gls@checkedmkidx{\gls@xdystring}% + \def\@gls@checkedmkidx{}% + \expandafter\@gls@xdycheckquote\gls@xdystring\@nil""\null + \expandafter\@gls@updatechecked\@gls@checkedmkidx{\gls@xdystring}% + \@for\@gls@tmp:=\gls@protected@pagefmts\do + {% + \edef\@gls@sanitized@tmp{\expandafter\@gobble\string\\\expandonce\@gls@tmp}% + \@onelevel@sanitize\@gls@sanitized@tmp + \edef\gls@dosubst{% + \noexpand\DTLsubstituteall\noexpand\gls@xdystring + {\@gls@sanitized@tmp}{\expandonce\@gls@tmp}% + }% + \gls@dosubst + }% + \let#1=\gls@xdystring +} +\newcommand{\@gls@checkmkidxchars}[1]{% + \ifglsxindy + \@gls@escbsdq{#1}% + \else + \def\@gls@checkedmkidx{}% + \expandafter\@gls@checkquote#1\@nil""\null + \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}% + \def\@gls@checkedmkidx{}% + \expandafter\@gls@checkescquote#1\@nil\"\"\null + \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}% + \def\@gls@checkedmkidx{}% + \expandafter\@gls@checkescactual#1\@nil\?\?\null + \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}% + \def\@gls@checkedmkidx{}% + \expandafter\@gls@checkactual#1\@nil??\null + \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}% + \def\@gls@checkedmkidx{}% + \expandafter\@gls@checkbar#1\@nil||\null + \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}% + \def\@gls@checkedmkidx{}% + \expandafter\@gls@checkescbar#1\@nil\|\|\null + \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}% + \def\@gls@checkedmkidx{}% + \expandafter\@gls@checklevel#1\@nil!!\null + \expandafter\@gls@updatechecked\@gls@checkedmkidx{#1}% + \fi +} +\def\@gls@updatechecked#1\@nil#2{\def#2{#1}} +\newtoks\@gls@tmpb +\def\@gls@checkquote#1"#2"#3\null{% + \@gls@tmpb=\expandafter{\@gls@checkedmkidx}% + \toks@={#1}% + \ifx\null#2\null + \ifx\null#3\null + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}% + \def\@@gls@checkquote{\relax}% + \else + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ + \@gls@quotechar\@gls@quotechar\@gls@quotechar\@gls@quotechar}% + \def\@@gls@checkquote{\@gls@checkquote#3\null}% + \fi + \else + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ + \@gls@quotechar\@gls@quotechar}% + \ifx\null#3\null + \def\@@gls@checkquote{\@gls@checkquote#2""\null}% + \else + \def\@@gls@checkquote{\@gls@checkquote#2"#3\null}% + \fi + \fi + \@@gls@checkquote +} +\def\@gls@checkescquote#1\"#2\"#3\null{% + \@gls@tmpb=\expandafter{\@gls@checkedmkidx}% + \toks@={#1}% + \ifx\null#2\null + \ifx\null#3\null + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}% + \def\@@gls@checkescquote{\relax}% + \else + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ + \@gls@quotechar\string\"\@gls@quotechar + \@gls@quotechar\string\"\@gls@quotechar}% + \def\@@gls@checkescquote{\@gls@checkescquote#3\null}% + \fi + \else + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ + \@gls@quotechar\string\"\@gls@quotechar}% + \ifx\null#3\null + \def\@@gls@checkescquote{\@gls@checkescquote#2\"\"\null}% + \else + \def\@@gls@checkescquote{\@gls@checkescquote#2\"#3\null}% + \fi + \fi +\@@gls@checkescquote +} +\def\@gls@checkescactual#1\?#2\?#3\null{% + \@gls@tmpb=\expandafter{\@gls@checkedmkidx}% + \toks@={#1}% + \ifx\null#2\null + \ifx\null#3\null + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}% + \def\@@gls@checkescactual{\relax}% + \else + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ + \@gls@quotechar\string\"\@gls@actualchar + \@gls@quotechar\string\"\@gls@actualchar}% + \def\@@gls@checkescactual{\@gls@checkescactual#3\null}% + \fi + \else + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ + \@gls@quotechar\string\"\@gls@actualchar}% + \ifx\null#3\null + \def\@@gls@checkescactual{\@gls@checkescactual#2\?\?\null}% + \else + \def\@@gls@checkescactual{\@gls@checkescactual#2\?#3\null}% + \fi + \fi +\@@gls@checkescactual +} +\def\@gls@checkescbar#1\|#2\|#3\null{% + \@gls@tmpb=\expandafter{\@gls@checkedmkidx}% + \toks@={#1}% + \ifx\null#2\null + \ifx\null#3\null + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}% + \def\@@gls@checkescbar{\relax}% + \else + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ + \@gls@quotechar\string\"\@gls@encapchar + \@gls@quotechar\string\"\@gls@encapchar}% + \def\@@gls@checkescbar{\@gls@checkescbar#3\null}% + \fi + \else + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ + \@gls@quotechar\string\"\@gls@encapchar}% + \ifx\null#3\null + \def\@@gls@checkescbar{\@gls@checkescbar#2\|\|\null}% + \else + \def\@@gls@checkescbar{\@gls@checkescbar#2\|#3\null}% + \fi + \fi +\@@gls@checkescbar +} +\def\@gls@checkesclevel#1\!#2\!#3\null{% + \@gls@tmpb=\expandafter{\@gls@checkedmkidx}% + \toks@={#1}% + \ifx\null#2\null + \ifx\null#3\null + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}% + \def\@@gls@checkesclevel{\relax}% + \else + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ + \@gls@quotechar\string\"\@gls@levelchar + \@gls@quotechar\string\"\@gls@levelchar}% + \def\@@gls@checkesclevel{\@gls@checkesclevel#3\null}% + \fi + \else + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ + \@gls@quotechar\string\"\@gls@levelchar}% + \ifx\null#3\null + \def\@@gls@checkesclevel{\@gls@checkesclevel#2\!\!\null}% + \else + \def\@@gls@checkesclevel{\@gls@checkesclevel#2\!#3\null}% + \fi + \fi +\@@gls@checkesclevel +} +\def\@gls@checkbar#1|#2|#3\null{% + \@gls@tmpb=\expandafter{\@gls@checkedmkidx}% + \toks@={#1}% + \ifx\null#2\null + \ifx\null#3\null + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}% + \def\@@gls@checkbar{\relax}% + \else + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ + \@gls@quotechar\@gls@encapchar\@gls@quotechar\@gls@encapchar}% + \def\@@gls@checkbar{\@gls@checkbar#3\null}% + \fi + \else + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ + \@gls@quotechar\@gls@encapchar}% + \ifx\null#3\null + \def\@@gls@checkbar{\@gls@checkbar#2||\null}% + \else + \def\@@gls@checkbar{\@gls@checkbar#2|#3\null}% + \fi + \fi + \@@gls@checkbar +} +\def\@gls@checklevel#1!#2!#3\null{% + \@gls@tmpb=\expandafter{\@gls@checkedmkidx}% + \toks@={#1}% + \ifx\null#2\null + \ifx\null#3\null + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}% + \def\@@gls@checklevel{\relax}% + \else + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ + \@gls@quotechar\@gls@levelchar\@gls@quotechar\@gls@levelchar}% + \def\@@gls@checklevel{\@gls@checklevel#3\null}% + \fi + \else + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ + \@gls@quotechar\@gls@levelchar}% + \ifx\null#3\null + \def\@@gls@checklevel{\@gls@checklevel#2!!\null}% + \else + \def\@@gls@checklevel{\@gls@checklevel#2!#3\null}% + \fi + \fi + \@@gls@checklevel +} +\def\@gls@checkactual#1?#2?#3\null{% + \@gls@tmpb=\expandafter{\@gls@checkedmkidx}% + \toks@={#1}% + \ifx\null#2\null + \ifx\null#3\null + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}% + \def\@@gls@checkactual{\relax}% + \else + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ + \@gls@quotechar\@gls@actualchar\@gls@quotechar\@gls@actualchar}% + \def\@@gls@checkactual{\@gls@checkactual#3\null}% + \fi + \else + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ + \@gls@quotechar\@gls@actualchar}% + \ifx\null#3\null + \def\@@gls@checkactual{\@gls@checkactual#2??\null}% + \else + \def\@@gls@checkactual{\@gls@checkactual#2?#3\null}% + \fi + \fi + \@@gls@checkactual +} +\def\@gls@xdycheckquote#1"#2"#3\null{% + \@gls@tmpb=\expandafter{\@gls@checkedmkidx}% + \toks@={#1}% + \ifx\null#2\null + \ifx\null#3\null + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@}% + \def\@@gls@xdycheckquote{\relax}% + \else + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ + \string\"\string\"}% + \def\@@gls@xdycheckquote{\@gls@xdycheckquote#3\null}% + \fi + \else + \edef\@gls@checkedmkidx{\the\@gls@tmpb\the\toks@ + \string\"}% + \ifx\null#3\null + \def\@@gls@xdycheckquote{\@gls@xdycheckquote#2""\null}% + \else + \def\@@gls@xdycheckquote{\@gls@xdycheckquote#2"#3\null}% + \fi + \fi + \@@gls@xdycheckquote +} +\edef\def@gls@xdycheckbackslash{% + \noexpand\def\noexpand\@gls@xdycheckbackslash##1\@backslashchar + ##2\@backslashchar##3\noexpand\null{% + \noexpand\@gls@tmpb=\noexpand\expandafter + {\noexpand\@gls@checkedmkidx}% + \noexpand\toks@={##1}% + \noexpand\ifx\noexpand\null##2\noexpand\null + \noexpand\ifx\noexpand\null##3\noexpand\null + \noexpand\edef\noexpand\@gls@checkedmkidx{% + \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@}% + \noexpand\def\noexpand\@@gls@xdycheckbackslash{\relax}% + \noexpand\else + \noexpand\edef\noexpand\@gls@checkedmkidx{% + \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@ + \@backslashchar\@backslashchar\@backslashchar\@backslashchar}% + \noexpand\def\noexpand\@@gls@xdycheckbackslash{% + \noexpand\@gls@xdycheckbackslash##3\noexpand\null}% + \noexpand\fi + \noexpand\else + \noexpand\edef\noexpand\@gls@checkedmkidx{% + \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@ + \@backslashchar\@backslashchar}% + \noexpand\ifx\noexpand\null##3\noexpand\null + \noexpand\def\noexpand\@@gls@xdycheckbackslash{% + \noexpand\@gls@xdycheckbackslash##2\@backslashchar + \@backslashchar\noexpand\null}% + \noexpand\else + \noexpand\def\noexpand\@@gls@xdycheckbackslash{% + \noexpand\@gls@xdycheckbackslash##2\@backslashchar + ##3\noexpand\null}% + \noexpand\fi + \noexpand\fi + \noexpand\@@gls@xdycheckbackslash + }% +} +\def@gls@xdycheckbackslash + +\newlength\gls@tmplen +\newcommand*{\glsdohypertarget}[2]{% + \@glsshowtarget{#1}% + \settoheight{\gls@tmplen}{#2}% + \raisebox{\gls@tmplen}{\hypertarget{#1}{}}#2% +} +\newcommand*{\glsdohyperlink}[2]{% + \@glsshowtarget{#1}% + \hyperlink{#1}{#2}% +} +\newcommand*{\glsdonohyperlink}[2]{#2} +\ifcsundef{hyperlink}% +{% + \let\@glslink\glsdonohyperlink +}% +{% + \let\@glslink\glsdohyperlink +} +\ifcsundef{hypertarget}% +{% + \let\@glstarget\@secondoftwo +}% +{% + \let\@glstarget\glsdohypertarget +} +\newcommand{\glsdisablehyper}{% + \KV@glslink@hyperfalse + \let\@glslink\glsdonohyperlink + \let\@glstarget\@secondoftwo +} +\newcommand{\glsenablehyper}{% + \KV@glslink@hypertrue + \let\@glslink\glsdohyperlink + \let\@glstarget\glsdohypertarget +} +\providecommand{\@firstofthree}[3]{#1} +\providecommand{\@secondofthree}[3]{#2} +\newrobustcmd*{\gls}{\@gls@hyp@opt\@gls} +\newcommand*{\@gls}[2][]{% + \new@ifnextchar[{\@gls@{#1}{#2}}{\@gls@{#1}{#2}[]}% +} +\def\@gls@#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper + \let\glsifplural\@secondoftwo + \let\glscapscase\@firstofthree + \let\glscustomtext\@empty + \def\glsinsert{#3}% + \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}% + \@gls@link[#1]{#2}{\@glo@text}% + \ifKV@glslink@local + \glslocalunset{#2}% + \else + \glsunset{#2}% + \fi + }% + \glspostlinkhook +} +\newrobustcmd*{\Gls}{\@gls@hyp@opt\@Gls} +\newcommand*{\@Gls}[2][]{% + \new@ifnextchar[{\@Gls@{#1}{#2}}{\@Gls@{#1}{#2}[]}% +} +\def\@Gls@#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper + \let\glsifplural\@secondoftwo + \let\glscapscase\@secondofthree + \let\glscustomtext\@empty + \def\glsinsert{#3}% + \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}% + \@gls@link[#1]{#2}{\@glo@text}% + \ifKV@glslink@local + \glslocalunset{#2}% + \else + \glsunset{#2}% + \fi + }% + \glspostlinkhook +} +\newrobustcmd*{\GLS}{\@gls@hyp@opt\@GLS} +\newcommand*{\@GLS}[2][]{% + \new@ifnextchar[{\@GLS@{#1}{#2}}{\@GLS@{#1}{#2}[]}% +} +\def\@GLS@#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper + \let\glsifplural\@secondoftwo + \let\glscapscase\@thirdofthree + \let\glscustomtext\@empty + \def\glsinsert{#3}% + \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}% + \@gls@link[#1]{#2}{\@glo@text}% + \ifKV@glslink@local + \glslocalunset{#2}% + \else + \glsunset{#2}% + \fi + }% + \glspostlinkhook +} +\newrobustcmd*{\glspl}{\@gls@hyp@opt\@glspl} +\newcommand*{\@glspl}[2][]{% + \new@ifnextchar[{\@glspl@{#1}{#2}}{\@glspl@{#1}{#2}[]}% +} +\def\@glspl@#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper + \let\glsifplural\@firstoftwo + \let\glscapscase\@firstofthree + \let\glscustomtext\@empty + \def\glsinsert{#3}% + \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}% + \@gls@link[#1]{#2}{\@glo@text}% + \ifKV@glslink@local + \glslocalunset{#2}% + \else + \glsunset{#2}% + \fi + }% + \glspostlinkhook +} +\newrobustcmd*{\Glspl}{\@gls@hyp@opt\@Glspl} +\newcommand*{\@Glspl}[2][]{% + \new@ifnextchar[{\@Glspl@{#1}{#2}}{\@Glspl@{#1}{#2}[]}% +} +\def\@Glspl@#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper + \let\glsifplural\@firstoftwo + \let\glscapscase\@secondofthree + \let\glscustomtext\@empty + \def\glsinsert{#3}% + \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}% + \@gls@link[#1]{#2}{\@glo@text}% + \ifKV@glslink@local + \glslocalunset{#2}% + \else + \glsunset{#2}% + \fi + }% + \glspostlinkhook +} +\newrobustcmd*{\GLSpl}{\@gls@hyp@opt\@GLSpl} +\newcommand*{\@GLSpl}[2][]{% + \new@ifnextchar[{\@GLSpl@{#1}{#2}}{\@GLSpl@{#1}{#2}[]}% +} +\def\@GLSpl@#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper + \let\glsifplural\@firstoftwo + \let\glscapscase\@thirdofthree + \let\glscustomtext\@empty + \def\glsinsert{#3}% + \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}% + \@gls@link[#1]{#2}{\@glo@text}% + \ifKV@glslink@local + \glslocalunset{#2}% + \else + \glsunset{#2}% + \fi + }% + \glspostlinkhook +} +\newrobustcmd*{\glsdisp}{\@gls@hyp@opt\@glsdisp} +\newcommand*{\@glsdisp}[3][]{% + \glsdoifexists{#2}{% + \let\do@gls@link@checkfirsthyper\@gls@link@checkfirsthyper + \let\glsifplural\@secondoftwo + \let\glscapscase\@firstofthree + \def\glscustomtext{#3}% + \def\glsinsert{}% + \def\@glo@text{\csname gls@\glstype @entryfmt\endcsname}% + \@gls@link[#1]{#2}{\@glo@text}% + \ifKV@glslink@local + \glslocalunset{#2}% + \else + \glsunset{#2}% + \fi + }% + \glspostlinkhook +} +\newcommand*{\@gls@link@nocheckfirsthyper}{} +\newcommand{\@gls@field@link}[3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \@gls@link[#1]{#2}{#3}% + }% + \glspostlinkhook +} +\newrobustcmd*{\glstext}{\@gls@hyp@opt\@glstext} +\newcommand*{\@glstext}[2][]{% + \new@ifnextchar[{\@glstext@{#1}{#2}}{\@glstext@{#1}{#2}[]}} +\def\@glstext@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentrytext{#2}#3}% +} +\newrobustcmd*{\GLStext}{\@gls@hyp@opt\@GLStext} +\newcommand*{\@GLStext}[2][]{% + \new@ifnextchar[{\@GLStext@{#1}{#2}}{\@GLStext@{#1}{#2}[]}} +\def\@GLStext@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentrytext{#2}#3}}% +} +\newrobustcmd*{\Glstext}{\@gls@hyp@opt\@Glstext} +\newcommand*{\@Glstext}[2][]{% + \new@ifnextchar[{\@Glstext@{#1}{#2}}{\@Glstext@{#1}{#2}[]}} +\def\@Glstext@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentrytext{#2}#3}% +} +\newrobustcmd*{\glsfirst}{\@gls@hyp@opt\@glsfirst} +\newcommand*{\@glsfirst}[2][]{% + \new@ifnextchar[{\@glsfirst@{#1}{#2}}{\@glsfirst@{#1}{#2}[]}} +\def\@glsfirst@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentryfirst{#2}#3}% +} +\newrobustcmd*{\Glsfirst}{\@gls@hyp@opt\@Glsfirst} +\newcommand*{\@Glsfirst}[2][]{% + \new@ifnextchar[{\@Glsfirst@{#1}{#2}}{\@Glsfirst@{#1}{#2}[]}} +\def\@Glsfirst@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentryfirst{#2}#3}% +} +\newrobustcmd*{\GLSfirst}{\@gls@hyp@opt\@GLSfirst} +\newcommand*{\@GLSfirst}[2][]{% + \new@ifnextchar[{\@GLSfirst@{#1}{#2}}{\@GLSfirst@{#1}{#2}[]}} +\def\@GLSfirst@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryfirst{#2}#3}}% +} +\newrobustcmd*{\glsplural}{\@gls@hyp@opt\@glsplural} +\newcommand*{\@glsplural}[2][]{% + \new@ifnextchar[{\@glsplural@{#1}{#2}}{\@glsplural@{#1}{#2}[]}} +\def\@glsplural@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentryplural{#2}#3}% +} +\newrobustcmd*{\Glsplural}{\@gls@hyp@opt\@Glsplural} +\newcommand*{\@Glsplural}[2][]{% + \new@ifnextchar[{\@Glsplural@{#1}{#2}}{\@Glsplural@{#1}{#2}[]}} +\def\@Glsplural@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentryplural{#2}#3}% +} +\newrobustcmd*{\GLSplural}{\@gls@hyp@opt\@GLSplural} +\newcommand*{\@GLSplural}[2][]{% + \new@ifnextchar[{\@GLSplural@{#1}{#2}}{\@GLSplural@{#1}{#2}[]}} +\def\@GLSplural@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryplural{#2}#3}}% +} +\newrobustcmd*{\glsfirstplural}{\@gls@hyp@opt\@glsfirstplural} +\newcommand*{\@glsfirstplural}[2][]{% + \new@ifnextchar[{\@glsfirstplural@{#1}{#2}}{\@glsfirstplural@{#1}{#2}[]}} +\def\@glsfirstplural@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentryfirstplural{#2}#3}% +} +\newrobustcmd*{\Glsfirstplural}{\@gls@hyp@opt\@Glsfirstplural} +\newcommand*{\@Glsfirstplural}[2][]{% + \new@ifnextchar[{\@Glsfirstplural@{#1}{#2}}{\@Glsfirstplural@{#1}{#2}[]}} +\def\@Glsfirstplural@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentryfirstplural{#2}#3}% +} +\newrobustcmd*{\GLSfirstplural}{\@gls@hyp@opt\@GLSfirstplural} +\newcommand*{\@GLSfirstplural}[2][]{% + \new@ifnextchar[{\@GLSfirstplural@{#1}{#2}}{\@GLSfirstplural@{#1}{#2}[]}} +\def\@GLSfirstplural@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryfirstplural{#2}#3}}% +} +\newrobustcmd*{\glsname}{\@gls@hyp@opt\@glsname} +\newcommand*{\@glsname}[2][]{% + \new@ifnextchar[{\@glsname@{#1}{#2}}{\@glsname@{#1}{#2}[]}} +\def\@glsname@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentryname{#2}#3}% +} +\newrobustcmd*{\Glsname}{\@gls@hyp@opt\@Glsname} +\newcommand*{\@Glsname}[2][]{% + \new@ifnextchar[{\@Glsname@{#1}{#2}}{\@Glsname@{#1}{#2}[]}} +\def\@Glsname@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentryname{#2}#3}% +} +\newrobustcmd*{\GLSname}{\@gls@hyp@opt\@GLSname} +\newcommand*{\@GLSname}[2][]{% + \new@ifnextchar[{\@GLSname@{#1}{#2}}{\@GLSname@{#1}{#2}[]}} +\def\@GLSname@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryname{#2}#3}}% +} +\newrobustcmd*{\glsdesc}{\@gls@hyp@opt\@glsdesc} +\newcommand*{\@glsdesc}[2][]{% + \new@ifnextchar[{\@glsdesc@{#1}{#2}}{\@glsdesc@{#1}{#2}[]}} +\def\@glsdesc@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentrydesc{#2}#3}% +} +\newrobustcmd*{\Glsdesc}{\@gls@hyp@opt\@Glsdesc} +\newcommand*{\@Glsdesc}[2][]{% + \new@ifnextchar[{\@Glsdesc@{#1}{#2}}{\@Glsdesc@{#1}{#2}[]}} +\def\@Glsdesc@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentrydesc{#2}#3}% +} +\newrobustcmd*{\GLSdesc}{\@gls@hyp@opt\@GLSdesc} +\newcommand*{\@GLSdesc}[2][]{% + \new@ifnextchar[{\@GLSdesc@{#1}{#2}}{\@GLSdesc@{#1}{#2}[]}} +\def\@GLSdesc@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentrydesc{#2}#3}}% +} +\newrobustcmd*{\glsdescplural}{\@gls@hyp@opt\@glsdescplural} +\newcommand*{\@glsdescplural}[2][]{% + \new@ifnextchar[{\@glsdescplural@{#1}{#2}}{\@glsdescplural@{#1}{#2}[]}} +\def\@glsdescplural@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentrydescplural{#2}#3}% +} +\newrobustcmd*{\Glsdescplural}{\@gls@hyp@opt\@Glsdescplural} +\newcommand*{\@Glsdescplural}[2][]{% + \new@ifnextchar[{\@Glsdescplural@{#1}{#2}}{\@Glsdescplural@{#1}{#2}[]}} +\def\@Glsdescplural@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentrydescplural{#2}#3}% +} +\newrobustcmd*{\GLSdescplural}{\@gls@hyp@opt\@GLSdescplural} +\newcommand*{\@GLSdescplural}[2][]{% + \new@ifnextchar[{\@GLSdescplural@{#1}{#2}}{\@GLSdescplural@{#1}{#2}[]}} +\def\@GLSdescplural@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentrydescplural{#2}#3}}% +} +\newrobustcmd*{\glssymbol}{\@gls@hyp@opt\@glssymbol} +\newcommand*{\@glssymbol}[2][]{% + \new@ifnextchar[{\@glssymbol@{#1}{#2}}{\@glssymbol@{#1}{#2}[]}} +\def\@glssymbol@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentrysymbol{#2}#3}% +} +\newrobustcmd*{\Glssymbol}{\@gls@hyp@opt\@Glssymbol} +\newcommand*{\@Glssymbol}[2][]{% + \new@ifnextchar[{\@Glssymbol@{#1}{#2}}{\@Glssymbol@{#1}{#2}[]}} +\def\@Glssymbol@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentrysymbol{#2}#3}% +} +\newrobustcmd*{\GLSsymbol}{\@gls@hyp@opt\@GLSsymbol} +\newcommand*{\@GLSsymbol}[2][]{% + \new@ifnextchar[{\@GLSsymbol@{#1}{#2}}{\@GLSsymbol@{#1}{#2}[]}} +\def\@GLSsymbol@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentrysymbol{#2}#3}}% +} +\newrobustcmd*{\glssymbolplural}{\@gls@hyp@opt\@glssymbolplural} +\newcommand*{\@glssymbolplural}[2][]{% + \new@ifnextchar[{\@glssymbolplural@{#1}{#2}}{\@glssymbolplural@{#1}{#2}[]}} +\def\@glssymbolplural@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentrysymbolplural{#2}#3}% +} +\newrobustcmd*{\Glssymbolplural}{\@gls@hyp@opt\@Glssymbolplural} +\newcommand*{\@Glssymbolplural}[2][]{% + \new@ifnextchar[{\@Glssymbolplural@{#1}{#2}}{\@Glssymbolplural@{#1}{#2}[]}} +\def\@Glssymbolplural@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentrysymbolplural{#2}#3}% +} +\newrobustcmd*{\GLSsymbolplural}{\@gls@hyp@opt\@GLSsymbolplural} +\newcommand*{\@GLSsymbolplural}[2][]{% + \new@ifnextchar[{\@GLSsymbolplural@{#1}{#2}}{\@GLSsymbolplural@{#1}{#2}[]}} +\def\@GLSsymbolplural@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentrysymbolplural{#2}#3}}% +} +\newrobustcmd*{\glsuseri}{\@gls@hyp@opt\@glsuseri} +\newcommand*{\@glsuseri}[2][]{% + \new@ifnextchar[{\@glsuseri@{#1}{#2}}{\@glsuseri@{#1}{#2}[]}} +\def\@glsuseri@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentryuseri{#2}#3}% +} +\newrobustcmd*{\Glsuseri}{\@gls@hyp@opt\@Glsuseri} +\newcommand*{\@Glsuseri}[2][]{% + \new@ifnextchar[{\@Glsuseri@{#1}{#2}}{\@Glsuseri@{#1}{#2}[]}} +\def\@Glsuseri@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentryuseri{#2}#3}% +} +\newrobustcmd*{\GLSuseri}{\@gls@hyp@opt\@GLSuseri} +\newcommand*{\@GLSuseri}[2][]{% + \new@ifnextchar[{\@GLSuseri@{#1}{#2}}{\@GLSuseri@{#1}{#2}[]}} +\def\@GLSuseri@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryuseri{#2}#3}}% +} +\newrobustcmd*{\glsuserii}{\@gls@hyp@opt\@glsuserii} +\newcommand*{\@glsuserii}[2][]{% + \new@ifnextchar[{\@glsuserii@{#1}{#2}}{\@glsuserii@{#1}{#2}[]}} +\def\@glsuserii@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentryuserii{#2}#3}% +} +\newrobustcmd*{\Glsuserii}{\@gls@hyp@opt\@Glsuserii} +\newcommand*{\@Glsuserii}[2][]{% + \new@ifnextchar[{\@Glsuserii@{#1}{#2}}{\@Glsuserii@{#1}{#2}[]}} +\def\@Glsuserii@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentryuserii{#2}#3}% +} +\newrobustcmd*{\GLSuserii}{\@gls@hyp@opt\@GLSuserii} +\newcommand*{\@GLSuserii}[2][]{% + \new@ifnextchar[{\@GLSuserii@{#1}{#2}}{\@GLSuserii@{#1}{#2}[]}} +\def\@GLSuserii@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryuserii{#2}#3}}% +} +\newrobustcmd*{\glsuseriii}{\@gls@hyp@opt\@glsuseriii} +\newcommand*{\@glsuseriii}[2][]{% + \new@ifnextchar[{\@glsuseriii@{#1}{#2}}{\@glsuseriii@{#1}{#2}[]}} +\def\@glsuseriii@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentryuseriii{#2}#3}% +} +\newrobustcmd*{\Glsuseriii}{\@gls@hyp@opt\@Glsuseriii} +\newcommand*{\@Glsuseriii}[2][]{% + \new@ifnextchar[{\@Glsuseriii@{#1}{#2}}{\@Glsuseriii@{#1}{#2}[]}} +\def\@Glsuseriii@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentryuseriii{#2}#3}% +} +\newrobustcmd*{\GLSuseriii}{\@gls@hyp@opt\@GLSuseriii} +\newcommand*{\@GLSuseriii}[2][]{% + \new@ifnextchar[{\@GLSuseriii@{#1}{#2}}{\@GLSuseriii@{#1}{#2}[]}} +\def\@GLSuseriii@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryuseriii{#2}#3}}% +} +\newrobustcmd*{\glsuseriv}{\@gls@hyp@opt\@glsuseriv} +\newcommand*{\@glsuseriv}[2][]{% + \new@ifnextchar[{\@glsuseriv@{#1}{#2}}{\@glsuseriv@{#1}{#2}[]}} +\def\@glsuseriv@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentryuseriv{#2}#3}% +} +\newrobustcmd*{\Glsuseriv}{\@gls@hyp@opt\@Glsuseriv} +\newcommand*{\@Glsuseriv}[2][]{% + \new@ifnextchar[{\@Glsuseriv@{#1}{#2}}{\@Glsuseriv@{#1}{#2}[]}} +\def\@Glsuseriv@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentryuseriv{#2}#3}% +} +\newrobustcmd*{\GLSuseriv}{\@gls@hyp@opt\@GLSuseriv} +\newcommand*{\@GLSuseriv}[2][]{% + \new@ifnextchar[{\@GLSuseriv@{#1}{#2}}{\@GLSuseriv@{#1}{#2}[]}} +\def\@GLSuseriv@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryuseriv{#2}#3}}% +} +\newrobustcmd*{\glsuserv}{\@gls@hyp@opt\@glsuserv} +\newcommand*{\@glsuserv}[2][]{% + \new@ifnextchar[{\@glsuserv@{#1}{#2}}{\@glsuserv@{#1}{#2}[]}} +\def\@glsuserv@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentryuserv{#2}#3}% +} +\newrobustcmd*{\Glsuserv}{\@gls@hyp@opt\@Glsuserv} +\newcommand*{\@Glsuserv}[2][]{% +\new@ifnextchar[{\@Glsuserv@{#1}{#2}}{\@Glsuserv@{#1}{#2}[]}} +\def\@Glsuserv@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentryuserv{#2}#3}% +} +\newrobustcmd*{\GLSuserv}{\@gls@hyp@opt\@GLSuserv} +\newcommand*{\@GLSuserv}[2][]{% +\new@ifnextchar[{\@GLSuserv@{#1}{#2}}{\@GLSuserv@{#1}{#2}[]}} +\def\@GLSuserv@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryuserv{#2}#3}}% +} +\newrobustcmd*{\glsuservi}{\@gls@hyp@opt\@glsuservi} +\newcommand*{\@glsuservi}[2][]{% + \new@ifnextchar[{\@glsuservi@{#1}{#2}}{\@glsuservi@{#1}{#2}[]}} +\def\@glsuservi@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\glsentryuservi{#2}#3}% +} +\newrobustcmd*{\Glsuservi}{\@gls@hyp@opt\@Glsuservi} +\newcommand*{\@Glsuservi}[2][]{% + \new@ifnextchar[{\@Glsuservi@{#1}{#2}}{\@Glsuservi@{#1}{#2}[]}} +\def\@Glsuservi@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\Glsentryuservi{#2}#3}% +} +\newrobustcmd*{\GLSuservi}{\@gls@hyp@opt\@GLSuservi} +\newcommand*{\@GLSuservi}[2][]{% + \new@ifnextchar[{\@GLSuservi@{#1}{#2}}{\@GLSuservi@{#1}{#2}[]}} +\def\@GLSuservi@#1#2[#3]{% + \@gls@field@link{#1}{#2}{\mfirstucMakeUppercase{\glsentryuservi{#2}#3}}% +} +\newrobustcmd*{\acrshort}{\@gls@hyp@opt\ns@acrshort} +\newcommand*{\ns@acrshort}[2][]{% + \new@ifnextchar[{\@acrshort{#1}{#2}}{\@acrshort{#1}{#2}[]}% +} +\def\@acrshort#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \let\glsifplural\@secondoftwo + \let\glscapscase\@firstofthree + \let\glsinsert\@empty + \def\glscustomtext{% + \acronymfont{\glsentryshort{#2}}#3% + }% + \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% + }% + \glspostlinkhook +} +\newrobustcmd*{\Acrshort}{\@gls@hyp@opt\ns@Acrshort} +\newcommand*{\ns@Acrshort}[2][]{% + \new@ifnextchar[{\@Acrshort{#1}{#2}}{\@Acrshort{#1}{#2}[]}% +} +\def\@Acrshort#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \def\glslabel{#2}% + \let\glsifplural\@secondoftwo + \let\glscapscase\@secondofthree + \let\glsinsert\@empty + \def\glscustomtext{% + \acronymfont{\Glsentryshort{#2}}#3% + }% + \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% + }% + \glspostlinkhook +} +\newrobustcmd*{\ACRshort}{\@gls@hyp@opt\ns@ACRshort} +\newcommand*{\ns@ACRshort}[2][]{% + \new@ifnextchar[{\@ACRshort{#1}{#2}}{\@ACRshort{#1}{#2}[]}% +} +\def\@ACRshort#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \def\glslabel{#2}% + \let\glsifplural\@secondoftwo + \let\glscapscase\@thirdofthree + \let\glsinsert\@empty + \def\glscustomtext{% + \mfirstucMakeUppercase{\acronymfont{\glsentryshort{#2}}#3}% + }% + \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% + }% + \glspostlinkhook +} +\newrobustcmd*{\acrshortpl}{\@gls@hyp@opt\ns@acrshortpl} +\newcommand*{\ns@acrshortpl}[2][]{% + \new@ifnextchar[{\@acrshortpl{#1}{#2}}{\@acrshortpl{#1}{#2}[]}% +} +\def\@acrshortpl#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \def\glslabel{#2}% + \let\glsifplural\@firstoftwo + \let\glscapscase\@firstofthree + \let\glsinsert\@empty + \def\glscustomtext{% + \acronymfont{\glsentryshortpl{#2}}#3% + }% + \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% + }% + \glspostlinkhook +} +\newrobustcmd*{\Acrshortpl}{\@gls@hyp@opt\ns@Acrshortpl} +\newcommand*{\ns@Acrshortpl}[2][]{% + \new@ifnextchar[{\@Acrshortpl{#1}{#2}}{\@Acrshortpl{#1}{#2}[]}% +} +\def\@Acrshortpl#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \def\glslabel{#2}% + \let\glsifplural\@firstoftwo + \let\glscapscase\@secondofthree + \let\glsinsert\@empty + \def\glscustomtext{% + \acronymfont{\Glsentryshortpl{#2}}#3% + }% + \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% + }% + \glspostlinkhook +} +\newrobustcmd*{\ACRshortpl}{\@gls@hyp@opt\ns@ACRshortpl} +\newcommand*{\ns@ACRshortpl}[2][]{% + \new@ifnextchar[{\@ACRshortpl{#1}{#2}}{\@ACRshortpl{#1}{#2}[]}% +} +\def\@ACRshortpl#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \def\glslabel{#2}% + \let\glsifplural\@firstoftwo + \let\glscapscase\@thirdofthree + \let\glsinsert\@empty + \def\glscustomtext{% + \mfirstucMakeUppercase{\acronymfont{\glsentryshortpl{#2}}#3}% + }% + \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% + }% + \glspostlinkhook +} +\newrobustcmd*{\acrlong}{\@gls@hyp@opt\ns@acrlong} +\newcommand*{\ns@acrlong}[2][]{% + \new@ifnextchar[{\@acrlong{#1}{#2}}{\@acrlong{#1}{#2}[]}% +} +\def\@acrlong#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \def\glslabel{#2}% + \let\glsifplural\@secondoftwo + \let\glscapscase\@firstofthree + \let\glsinsert\@empty + \def\glscustomtext{% + \glsentrylong{#2}#3% + }% + \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% + }% + \glspostlinkhook +} +\newrobustcmd*{\Acrlong}{\@gls@hyp@opt\ns@Acrlong} +\newcommand*{\ns@Acrlong}[2][]{% + \new@ifnextchar[{\@Acrlong{#1}{#2}}{\@Acrlong{#1}{#2}[]}% +} +\def\@Acrlong#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \def\glslabel{#2}% + \let\glsifplural\@secondoftwo + \let\glscapscase\@secondofthree + \let\glsinsert\@empty + \def\glscustomtext{% + \Glsentrylong{#2}#3% + }% + \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% + }% + \glspostlinkhook +} +\newrobustcmd*{\ACRlong}{\@gls@hyp@opt\ns@ACRlong} +\newcommand*{\ns@ACRlong}[2][]{% + \new@ifnextchar[{\@ACRlong{#1}{#2}}{\@ACRlong{#1}{#2}[]}% +} +\def\@ACRlong#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \def\glslabel{#2}% + \let\glsifplural\@secondoftwo + \let\glscapscase\@thirdofthree + \let\glsinsert\@empty + \def\glscustomtext{% + \mfirstucMakeUppercase{\glsentrylong{#2}#3}% + }% + \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% + }% + \glspostlinkhook +} +\newrobustcmd*{\acrlongpl}{\@gls@hyp@opt\ns@acrlongpl} +\newcommand*{\ns@acrlongpl}[2][]{% + \new@ifnextchar[{\@acrlongpl{#1}{#2}}{\@acrlongpl{#1}{#2}[]}% +} +\def\@acrlongpl#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \def\glslabel{#2}% + \let\glsifplural\@firstoftwo + \let\glscapscase\@firstofthree + \let\glsinsert\@empty + \def\glscustomtext{% + \glsentrylongpl{#2}#3% + }% + \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% + }% + \glspostlinkhook +} +\newrobustcmd*{\Acrlongpl}{\@gls@hyp@opt\ns@Acrlongpl} +\newcommand*{\ns@Acrlongpl}[2][]{% + \new@ifnextchar[{\@Acrlongpl{#1}{#2}}{\@Acrlongpl{#1}{#2}[]}% +} +\def\@Acrlongpl#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \def\glslabel{#2}% + \let\glsifplural\@firstoftwo + \let\glscapscase\@secondofthree + \let\glsinsert\@empty + \def\glscustomtext{% + \Glsentrylongpl{#2}#3% + }% + \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% + }% + \glspostlinkhook +} +\newrobustcmd*{\ACRlongpl}{\@gls@hyp@opt\ns@ACRlongpl} +\newcommand*{\ns@ACRlongpl}[2][]{% + \new@ifnextchar[{\@ACRlongpl{#1}{#2}}{\@ACRlongpl{#1}{#2}[]}% +} +\def\@ACRlongpl#1#2[#3]{% + \glsdoifexists{#2}% + {% + \let\do@gls@link@checkfirsthyper\@gls@link@nocheckfirsthyper + \def\glslabel{#2}% + \let\glsifplural\@firstoftwo + \let\glscapscase\@thirdofthree + \let\glsinsert\@empty + \def\glscustomtext{% + \mfirstucMakeUppercase{\glsentrylongpl{#2}#3}% + }% + \@gls@link[#1]{#2}{\csname gls@\glstype @entryfmt\endcsname}% + }% + \glspostlinkhook +} +\newcommand*{\@gls@entry@field}[2]{% + \csname glo@\glsdetoklabel{#1}@#2\endcsname +} +\newcommand*{\glsletentryfield}[3]{% + \letcs{#1}{glo@\glsdetoklabel{#2}@#3}% +} +\newcommand*{\@Gls@entry@field}[2]{% + \glsdoifexistsordo{#1}% + {% + \letcs\@glo@text{glo@\glsdetoklabel{#1}@#2}% + \ifdef\@glo@text + {% + \xmakefirstuc{\@glo@text}% + }% + {% + ??\PackageError{glossaries}{The field `#2' doesn't exist for glossary + entry `\glsdetoklabel{#1}'}{Check you have correctly spelt the entry + label and the field name}% + }% + }% + {% + ??% + }% +} +\newcommand*{\glsentryname}[1]{\@gls@entry@field{#1}{name}} +\newrobustcmd*{\Glsentryname}[1]{% + \@Gls@entryname{#1}% +} +\newcommand*{\@Gls@entryname}[1]{% + \@Gls@entry@field{#1}{name}% +} +\newcommand*{\@Gls@acrentryname}[1]{% + \ifglshaslong{#1}% + {% + \letcs\@glo@text{glo@\glsdetoklabel{#1}@name}% + \expandafter\@gls@getbody\@glo@text{}\@nil + \expandafter\ifx\@gls@body\glsentrylong\relax + \expandafter\Glsentrylong\@gls@rest + \else + \expandafter\ifx\@gls@body\glsentryshort\relax + \expandafter\Glsentryshort\@gls@rest + \else + \expandafter\ifx\@gls@body\acronymfont\relax + {% + \let\glsentryshort\Glsentryshort + \@glo@text + }% + \else + \expandafter\ifx\@gls@body\glsshortaccessdisplay\relax + {% + \let\glsentryshort\Glsentryshort + \@glo@text + }% + \else + \xmakefirstuc{\@glo@text}% + \fi + \fi + \fi + \fi + }% + {% + \@Gls@entry@field{#1}{name}% + }% +} +\newcommand*{\glsentrydesc}[1]{\@gls@entry@field{#1}{desc}} +\newrobustcmd*{\Glsentrydesc}[1]{% + \@Gls@entry@field{#1}{desc}% +} +\newcommand*{\glsentrydescplural}[1]{% + \@gls@entry@field{#1}{descplural}% +} +\newrobustcmd*{\Glsentrydescplural}[1]{% + \@Gls@entry@field{#1}{descplural}% +} +\newcommand*{\glsentrytext}[1]{\@gls@entry@field{#1}{text}} +\newrobustcmd*{\Glsentrytext}[1]{% + \@Gls@entry@field{#1}{text}% +} +\newcommand*{\glsentryplural}[1]{% + \@gls@entry@field{#1}{plural}% +} +\newrobustcmd*{\Glsentryplural}[1]{% + \@Gls@entry@field{#1}{plural}% +} +\newcommand*{\glsentrysymbol}[1]{% + \@gls@entry@field{#1}{symbol}% +} +\newrobustcmd*{\Glsentrysymbol}[1]{% + \@Gls@entry@field{#1}{symbol}% +} +\newcommand*{\glsentrysymbolplural}[1]{% + \@gls@entry@field{#1}{symbolplural}% +} +\newrobustcmd*{\Glsentrysymbolplural}[1]{% + \@Gls@entry@field{#1}{symbolplural}% +} +\newcommand*{\glsentryfirst}[1]{% + \@gls@entry@field{#1}{first}% +} +\newrobustcmd*{\Glsentryfirst}[1]{% + \@Gls@entry@field{#1}{first}% +} +\newcommand*{\glsentryfirstplural}[1]{% + \@gls@entry@field{#1}{firstpl}% +} +\newrobustcmd*{\Glsentryfirstplural}[1]{% + \@Gls@entry@field{#1}{firstpl}% +} +\newrobustcmd*{\@glsentrytitlecase}[2]{% + \glsdoifexists{#1}% + {% + \glsfieldfetch{#1}{#2}{\@gls@value}% + \xcapitalisewords{\@gls@value}% + }% +} +\ifdef\texorpdfstring +{ + \newcommand*{\glsentrytitlecase}[2]{% + \texorpdfstring + {\@glsentrytitlecase{#1}{#2}}% + {\@gls@entry@field{#1}{#2}}% + } +} +{ + \newcommand*{\glsentrytitlecase}[2]{\@glsentrytitlecase{#1}{#2}} +} +\newcommand*{\glsentrytype}[1]{\@gls@entry@field{#1}{type}} +\newcommand*{\glsentrysort}[1]{% + \@gls@entry@field{#1}{sort}% +} +\newcommand*{\glsentryparent}[1]{% + \@gls@entry@field{#1}{parent}% +} +\newcommand*{\glsentryuseri}[1]{% + \@gls@entry@field{#1}{useri}% +} +\newrobustcmd*{\Glsentryuseri}[1]{% + \@Gls@entry@field{#1}{useri}% +} +\newcommand*{\glsentryuserii}[1]{% + \@gls@entry@field{#1}{userii}% +} +\newrobustcmd*{\Glsentryuserii}[1]{% + \@Gls@entry@field{#1}{userii}% +} +\newcommand*{\glsentryuseriii}[1]{% + \@gls@entry@field{#1}{useriii}% +} +\newrobustcmd*{\Glsentryuseriii}[1]{% + \@Gls@entry@field{#1}{useriii}% +} +\newcommand*{\glsentryuseriv}[1]{% + \@gls@entry@field{#1}{useriv}% +} +\newrobustcmd*{\Glsentryuseriv}[1]{% + \@Gls@entry@field{#1}{useriv}% +} +\newcommand*{\glsentryuserv}[1]{% + \@gls@entry@field{#1}{userv}% +} +\newrobustcmd*{\Glsentryuserv}[1]{% + \@Gls@entry@field{#1}{userv}% +} +\newcommand*{\glsentryuservi}[1]{% + \@gls@entry@field{#1}{uservi}% +} +\newrobustcmd*{\Glsentryuservi}[1]{% + \@Gls@entry@field{#1}{uservi}% +} +\newcommand*{\glsentryshort}[1]{\@gls@entry@field{#1}{short}} +\newrobustcmd*{\Glsentryshort}[1]{% + \@Gls@entry@field{#1}{short}% +} +\newcommand*{\glsentryshortpl}[1]{\@gls@entry@field{#1}{shortpl}} +\newrobustcmd*{\Glsentryshortpl}[1]{% + \@Gls@entry@field{#1}{shortpl}% +} +\newcommand*{\glsentrylong}[1]{\@gls@entry@field{#1}{long}} +\newrobustcmd*{\Glsentrylong}[1]{% + \@Gls@entry@field{#1}{long}% +} +\newcommand*{\glsentrylongpl}[1]{\@gls@entry@field{#1}{longpl}} +\newrobustcmd*{\Glsentrylongpl}[1]{% + \@Gls@entry@field{#1}{longpl}% +} +\newcommand*{\glsentryfull}[1]{% + \acrfullformat{\glsentrylong{#1}}{\acronymfont{\glsentryshort{#1}}}% +} +\newrobustcmd*{\Glsentryfull}[1]{% + \acrfullformat{\Glsentrylong{#1}}{\acronymfont{\glsentryshort{#1}}}% +} +\newcommand*{\glsentryfullpl}[1]{% + \acrfullformat{\glsentrylongpl{#1}}{\acronymfont{\glsentryshortpl{#1}}}% +} +\newrobustcmd*{\Glsentryfullpl}[1]{% + \acrfullformat{\Glsentrylongpl{#1}}{\acronymfont{\glsentryshortpl{#1}}}% +} +\newcommand*{\glsentrynumberlist}[1]{% + \glsdoifexists{#1}% + {% + \@gls@entry@field{#1}{numberlist}% + }% +} +\@ifpackageloaded{hyperref} {% + \newcommand*{\glsdisplaynumberlist}[1]{% + \GlossariesWarning + {% + \string\glsdisplaynumberlist\space + doesn't work with hyperref.^^JUsing + \string\glsentrynumberlist\space instead% + }% + \glsentrynumberlist{#1}% + }% +}% +{% + \newcommand*{\glsdisplaynumberlist}[1]{% + \glsdoifexists{#1}% + {% + \bgroup + \edef\@glo@label{\glsdetoklabel{#1}}% + \let\@org@glsnumberformat\glsnumberformat + \def\glsnumberformat##1{##1}% + \protected@edef\the@numberlist{% + \csname glo@\@glo@label @numberlist\endcsname}% + \def\@gls@numlist@sep{}% + \def\@gls@numlist@nextsep{}% + \def\@gls@numlist@lastsep{}% + \def\@gls@thislist{}% + \def\@gls@donext@def{}% + \renewcommand\do[1]{% + \protected@edef\@gls@thislist{% + \@gls@thislist + \noexpand\@gls@numlist@sep + ##1% + }% + \let\@gls@numlist@sep\@gls@numlist@nextsep + \def\@gls@numlist@nextsep{\glsnumlistsep}% + \@gls@donext@def + \def\@gls@donext@def{% + \def\@gls@numlist@lastsep{\glsnumlistlastsep}% + }% + }% + \expandafter \glsnumlistparser \expandafter{\the@numberlist}% + \let\@gls@numlist@sep\@gls@numlist@lastsep + \@gls@thislist + \egroup + }% + } +} +\newcommand*{\glsnumlistsep}{, } +\newcommand*{\glsnumlistlastsep}{ \& } +\newcommand*{\glshyperlink}[2][\glsentrytext{\@glo@label}]{% + \def\@glo@label{#2}% + \@glslink{\glolinkprefix\glsdetoklabel{#2}}{#1}} +\define@key{glossadd}{counter}{\def\@gls@counter{#1}} +\define@key{glossadd}{format}{\def\@glsnumberformat{#1}} +\define@key{glossadd}{types}{\def\@glo@type{#1}} +\newrobustcmd*{\glsadd}[2][]{% + \@gls@adjustmode + \glsdoifexists{#2}% + {% + \def\@glsnumberformat{glsnumberformat}% + \edef\@gls@counter{\csname glo@\glsdetoklabel{#2}@counter\endcsname}% + \setkeys{glossadd}{#1}% + \@gls@saveentrycounter + \@gls@setsort{#2}% + \@@do@wrglossary{#2}% + }% +} +\newcommand*{\@gls@adjustmode}{} +\AtBeginDocument{\renewcommand*{\@gls@adjustmode}{\ifvmode\mbox{}\fi}} +\newrobustcmd*{\glsaddall}[1][]{% + \edef\@glo@type{\@glo@types}% + \setkeys{glossadd}{#1}% + \forallglsentries[\@glo@type]{\@glo@entry}{% + \glsadd[#1]{\@glo@entry}% + }% +} +\newrobustcmd*{\glsaddallunused}[1][\@glo@types]{% + \forallglsentries[#1]{\@glo@entry}% + {% + \ifglsused{\@glo@entry}{}{\glsadd[format=glsignore]{\@glo@entry}}% + }% +} +\newcommand*{\glsignore}[1]{} +\edef\glsopenbrace{\expandafter\@gobble\string\{} +\edef\glsclosebrace{\expandafter\@gobble\string\}} +\edef\glsbackslash{\expandafter\@gobble\string\\} +\edef\glsquote#1{\string"#1\string"} +\edef\glspercentchar{\expandafter\@gobble\string\%} +\edef\glstildechar{\string~} +\ifglsxindy + \newcommand*{\@glsfirstletter}{A} +\fi +\newcommand*{\GlsSetXdyFirstLetterAfterDigits}{% + \@ifstar\s@GlsSetXdyFirstLetterAfterDigits\@GlsSetXdyFirstLetterAfterDigits} +\ifglsxindy + \newcommand*{\@GlsSetXdyFirstLetterAfterDigits}[1]{% + \renewcommand*{\@glsfirstletter}{#1}} + \newcommand*{\s@GlsSetXdyFirstLetterAfterDigits}[1]{% + \renewcommand*{\@glsfirstletter}{#1}% + \@onelevel@sanitize\@glsfirstletter + } +\else + \newcommand*{\@GlsSetXdyFirstLetterAfterDigits}[1]{% + \glsnoxindywarning\GlsSetXdyFirstLetterAfterDigits} + \newcommand*{\s@GlsSetXdyFirstLetterAfterDigits}{% + \@GlsSetXdyFirstLetterAfterDigits + } +\fi +\ifglsxindy + \newcommand*{\@xdynumbergrouporder}{:before \string"\@glsfirstletter\string"} +\fi +\newcommand*{\GlsSetXdyNumberGroupOrder}[1]{% + \@ifstar\s@GlsSetXdyNumberGroupOrder\@GlsSetXdyNumberGroupOrder +} +\ifglsxindy + \newcommand*{\@GlsSetXdyNumberGroupOrder}[1]{% + \renewcommand*{\@xdynumbergrouporder}{#1}% + } + \newcommand*{\s@GlsSetXdyNumberGroupOrder}[1]{% + \renewcommand*{\@xdynumbergrouporder}{#1}% + \@onelevel@sanitize\@xdynumbergrouporder + } +\else + \newcommand*{\@GlsSetXdyNumberGroupOrder}[1]{% + \glsnoxindywarning\GlsSetXdyNumberGroupOrder} + \newcommand*{\s@GlsSetXdyNumberGroupOrder}{% + \@GlsSetXdyNumberGroupOrder} +\fi +\newcommand*{\@glsminrange}{2} +\ifglsxindy + \newcommand*{\GlsSetXdyMinRangeLength}[1]{% + \renewcommand*{\@glsminrange}{#1}} +\else + \newcommand*{\GlsSetXdyMinRangeLength}[1]{% + \glsnoxindywarning\GlsSetXdyMinRangeLength} +\fi + +\ifglsxindy + \def\writeist{% + \ifundef{\glswrite}{\newwrite\glswrite}{}% + \@gls@addpredefinedattributes + \openout\glswrite=\istfilename + \write\glswrite{;; xindy style file created by the glossaries + package}% + \write\glswrite{;; for document '\jobname' on + \the\year-\the\month-\the\day}% + \write\glswrite{^^J; required styles^^J} + \@for\@xdystyle:=\@xdyrequiredstyles\do{% + \ifx\@xdystyle\@empty + \else + \protected@write\glswrite{}{(require + \string"\@xdystyle.xdy\string")}% + \fi + }% + \write\glswrite{^^J% + ; list of allowed attributes (number formats)^^J}% + \write\glswrite{(define-attributes ((\@xdyattributes)))}% + \write\glswrite{^^J; user defined alphabets^^J}% + \write\glswrite{\@xdyuseralphabets}% + \write\glswrite{^^J; location class definitions^^J}% + \@for\@gls@classI:=\@gls@xdy@locationlist\do{% + \protected@write\glswrite{}{(define-location-class + \string"\@gls@classI\string"^^J\space\space\space + ( + :sep "{}{" + \csname @gls@xdy@Lclass@\@gls@classI\endcsname\space + :sep "}" + ) + ^^J\space\space\space + :min-range-length \@glsminrange^^J% + ) + }% + {% + \@for\@gls@classII:=\@gls@xdy@locationlist\do{% + \protected@write\glswrite{}{(define-location-class + \string"\@gls@classII-\@gls@classI\string" + ^^J\space\space\space + ( + :sep "{" + \csname @gls@xdy@Lclass@\@gls@classII\endcsname\space + :sep "}{" + \csname @gls@xdy@Lclass@\@gls@classI\endcsname\space + :sep "}" + ) + ^^J\space\space\space + :min-range-length \@glsminrange^^J% + ) + }% + }% + }% + }% + \write\glswrite{^^J; user defined location classes}% + \write\glswrite{\@xdyuserlocationdefs}% + \write\glswrite{^^J; define cross-reference class^^J}% + \write\glswrite{(define-crossref-class \string"see\string" + :unverified )}% + \write\glswrite{(markup-crossref-list + :class \string"see\string"^^J\space\space\space + :open \string"\string\glsseeformat\string" + :close \string"{}\string")}% + \@xdycrossrefhook + \write\glswrite{^^J; define the order of the location classes}% + \write\glswrite{(define-location-class-order + (\@xdylocationclassorder))}% + \write\glswrite{^^J; define the glossary markup^^J}% + \write\glswrite{(markup-index^^J\space\space\space + :open \string"\string + \glossarysection[\string\glossarytoctitle]{\string + \glossarytitle}\string\glossarypreamble}% + \@for\@this@ctr:=\@xdycounters\do{% + {% + \@for\@this@attr:=\@xdyattributelist\do{% + \protected@write\glswrite{}{\string\providecommand*% + \expandafter\string + \csname glsX\@this@ctr X\@this@attr\endcsname[2]% + {% + \string\setentrycounter + [\expandafter\@gobble\string\#1]{\@this@ctr}% + \expandafter\string + \csname\@this@attr\endcsname + {\expandafter\@gobble\string\#2}% + }% + }% + }% + }% + }% + \write\glswrite{% + \string\begin + {theglossary}\string\glossaryheader\glstildechar n\string" ^^J\space + \space\space:close \string"\glspercentchar\glstildechar n\string + \end{theglossary}\string\glossarypostamble + \glstildechar n\string" ^^J\space\space\space + :tree)}% + \write\glswrite{(markup-letter-group-list + :sep \string"\string\glsgroupskip\glstildechar n\string")}% + \write\glswrite{(markup-indexentry + :open \string"\string\relax \string\glsresetentrylist + \glstildechar n\string")}% + \write\glswrite{(markup-locclass-list :open + \string"\glsopenbrace\string\glossaryentrynumbers + \glsopenbrace\string\relax\space \string"^^J\space\space\space + :sep \string", \string" + :close \string"\glsclosebrace\glsclosebrace\string")}% + \write\glswrite{(markup-locref-list + :sep \string"\string\delimN\space\string")}% + \write\glswrite{(markup-range + :sep \string"\string\delimR\space\string")}% + \@onelevel@sanitize\gls@suffixF + \@onelevel@sanitize\gls@suffixFF + \ifx\gls@suffixF\@empty + \else + \write\glswrite{(markup-range + :close "\gls@suffixF" :length 1 :ignore-end)}% + \fi + \ifx\gls@suffixFF\@empty + \else + \write\glswrite{(markup-range + :close "\gls@suffixFF" :length 2 :ignore-end)}% + \fi + \write\glswrite{^^J; define format to use for locations^^J}% + \write\glswrite{\@xdylocref}% + \write\glswrite{^^J; define letter group list format^^J}% + \write\glswrite{(markup-letter-group-list + :sep \string"\string\glsgroupskip\glstildechar n\string")}% + \write\glswrite{^^J; letter group headings^^J}% + \write\glswrite{(markup-letter-group + :open-head \string"\string\glsgroupheading + \glsopenbrace\string"^^J\space\space\space + :close-head \string"\glsclosebrace\string")}% + \write\glswrite{^^J; additional letter groups^^J}% + \write\glswrite{\@xdylettergroups}% + \write\glswrite{^^J; additional sort rules^^J} + \write\glswrite{\@xdysortrules}% + \@gls@writeisthook + \closeout\glswrite + \let\writeist\relax + } +\else + \edef\@gls@actualchar{\string?} + \edef\@gls@encapchar{\string|} + \edef\@gls@levelchar{\string!} + \edef\@gls@quotechar{\string"}% + \let\GlsSetQuote\gls@nosetquote + \def\writeist{\relax + \ifundef{\glswrite}{\newwrite\glswrite}{}\relax + \openout\glswrite=\istfilename + \write\glswrite{\glspercentchar\space makeindex style file + created by the glossaries package} + \write\glswrite{\glspercentchar\space for document + '\jobname' on \the\year-\the\month-\the\day} + \write\glswrite{actual '\@gls@actualchar'} + \write\glswrite{encap '\@gls@encapchar'} + \write\glswrite{level '\@gls@levelchar'} + \write\glswrite{quote '\@gls@quotechar'} + \write\glswrite{keyword \string"\string\\glossaryentry\string"} + \write\glswrite{preamble \string"\string\\glossarysection[\string + \\glossarytoctitle]{\string\\glossarytitle}\string + \\glossarypreamble\string\n\string\\begin{theglossary}\string + \\glossaryheader\string\n\string"} + \write\glswrite{postamble \string"\string\%\string\n\string + \\end{theglossary}\string\\glossarypostamble\string\n + \string"} + \write\glswrite{group_skip \string"\string\\glsgroupskip\string\n + \string"} + \write\glswrite{item_0 \string"\string\%\string\n\string"} + \write\glswrite{item_1 \string"\string\%\string\n\string"} + \write\glswrite{item_2 \string"\string\%\string\n\string"} + \write\glswrite{item_01 \string"\string\%\string\n\string"} + \write\glswrite{item_x1 + \string"\string\\relax \string\\glsresetentrylist\string\n + \string"} + \write\glswrite{item_12 \string"\string\%\string\n\string"} + \write\glswrite{item_x2 + \string"\string\\relax \string\\glsresetentrylist\string\n + \string"} + \write\glswrite{delim_0 \string"\string\{\string + \\glossaryentrynumbers\string\{\string\\relax \string"} + \write\glswrite{delim_1 \string"\string\{\string + \\glossaryentrynumbers\string\{\string\\relax \string"} + \write\glswrite{delim_2 \string"\string\{\string + \\glossaryentrynumbers\string\{\string\\relax \string"} + \write\glswrite{delim_t \string"\string\}\string\}\string"} + \write\glswrite{delim_n \string"\string\\delimN \string"} + \write\glswrite{delim_r \string"\string\\delimR \string"} + \write\glswrite{headings_flag 1} + \write\glswrite{heading_prefix + \string"\string\\glsgroupheading\string\{\string"} + \write\glswrite{heading_suffix + \string"\string\}\string\\relax + \string\\glsresetentrylist \string"} + \write\glswrite{symhead_positive \string"glssymbols\string"} + \write\glswrite{numhead_positive \string"glsnumbers\string"} + \write\glswrite{page_compositor \string"\glscompositor\string"} + \@gls@escbsdq\gls@suffixF + \@gls@escbsdq\gls@suffixFF + \ifx\gls@suffixF\@empty + \else + \write\glswrite{suffix_2p \string"\gls@suffixF\string"} + \fi + \ifx\gls@suffixFF\@empty + \else + \write\glswrite{suffix_3p \string"\gls@suffixFF\string"} + \fi + \@gls@writeisthook + \closeout\glswrite + \let\writeist\relax + } +\fi +\newcommand*{\GlsSetWriteIstHook}[1]{\renewcommand*{\@gls@writeisthook}{#1}} +\@onlypremakeg\GlsSetWriteIstHook +\newcommand*{\@gls@writeisthook}{} +\ifglsxindy + \newcommand*{\GlsSetQuote}[1]{\glsnomakeindexwarning\GlsSetQuote} + \newcommand*{\gls@nosetquote}[1]{\glsnomakeindexwarning\GlsSetQuote} +\else + \newcommand*{\GlsSetQuote}[1]{\edef\@gls@quotechar{\string#1}% + \@ifpackageloaded{tracklang}% + {% + \IfTrackedLanguage{german}% + {% + \def\@@gls@extramakeindexopts{-g}% + }% + {}% + }% + {}% + \edef\@gls@docheckquotedef{% + \noexpand\def\noexpand\@gls@checkquote####1#1####2#1####3\noexpand\null{% + \noexpand\@gls@tmpb=\noexpand\expandafter{\noexpand\@gls@checkedmkidx}% + \noexpand\toks@={####1}% + \noexpand\ifx\noexpand\null####2\noexpand\null + \noexpand\ifx\noexpand\null####3\noexpand\null + \noexpand\edef\noexpand\@gls@checkedmkidx{% + \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@}% + \noexpand\def\noexpand\@@gls@checkquote{\noexpand\relax}% + \noexpand\else + \noexpand\edef\noexpand\@gls@checkedmkidx{% + \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@ + \noexpand\@gls@quotechar\noexpand\@gls@quotechar + \noexpand\@gls@quotechar\noexpand\@gls@quotechar}% + \noexpand\def\noexpand\@@gls@checkquote{% + \noexpand\@gls@checkquote####3\noexpand\null}% + \noexpand\fi + \noexpand\else + \noexpand\edef\noexpand\@gls@checkedmkidx{% + \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@ + \noexpand\@gls@quotechar\noexpand\@gls@quotechar}% + \noexpand\ifx\noexpand\null####3\noexpand\null + \noexpand\def\noexpand\@@gls@checkquote{% + \noexpand\@gls@checkquote####2#1#1\noexpand\null}% + \noexpand\else + \noexpand\def\noexpand\@@gls@checkquote{% + \noexpand\@gls@checkquote####2#1####3\noexpand\null}% + \noexpand\fi + \noexpand\fi + \noexpand\@@gls@checkquote + }% + }% + \@gls@docheckquotedef + \edef\@gls@docheckquotedef{% + \noexpand\renewcommand{\noexpand\@gls@checkmkidxchars}[1]{% + \noexpand\def\noexpand\@gls@checkedmkidx{}% + \noexpand\expandafter\noexpand\@gls@checkquote####1\noexpand\@nil + #1#1\noexpand\null + \noexpand\expandafter\noexpand\@gls@updatechecked + \noexpand\@gls@checkedmkidx{####1}% + \noexpand\def\noexpand\@gls@checkedmkidx{}% + \noexpand\expandafter\noexpand\@gls@checkescquote####1\noexpand\@nil + \expandonce{\csname#1\endcsname}\expandonce{\csname#1\endcsname}% + \noexpand\null + \noexpand\expandafter\noexpand\@gls@updatechecked + \noexpand\@gls@checkedmkidx{####1}% + \noexpand\def\noexpand\@gls@checkedmkidx{}% + \noexpand\expandafter\noexpand\@gls@checkescactual####1\noexpand\@nil + \noexpand\?\noexpand\?\noexpand\null + \noexpand\expandafter\noexpand\@gls@updatechecked + \noexpand\@gls@checkedmkidx{####1}% + \noexpand\def\noexpand\@gls@checkedmkidx{}% + \noexpand\expandafter\noexpand\@gls@checkactual####1\noexpand\@nil + \noexpand?\noexpand?\noexpand\null + \noexpand\expandafter\noexpand\@gls@updatechecked + \noexpand\@gls@checkedmkidx{####1}% + \noexpand\def\noexpand\@gls@checkedmkidx{}% + \noexpand\expandafter\noexpand\@gls@checkbar####1\noexpand\@nil + \noexpand|\noexpand|\noexpand\null + \noexpand\expandafter\noexpand\@gls@updatechecked + \noexpand\@gls@checkedmkidx{####1}% + \noexpand\def\noexpand\@gls@checkedmkidx{}% + \noexpand\expandafter\noexpand\@gls@checkescbar####1\noexpand\@nil + \noexpand\|\noexpand\|\noexpand\null + \noexpand\expandafter\noexpand\@gls@updatechecked + \noexpand\@gls@checkedmkidx{####1}% + \noexpand\def\noexpand\@gls@checkedmkidx{}% + \noexpand\expandafter\noexpand\@gls@checklevel####1\noexpand\@nil + \noexpand!\noexpand!\noexpand\null + \noexpand\expandafter\noexpand\@gls@updatechecked + \noexpand\@gls@checkedmkidx{####1}% + }% + }% + \@gls@docheckquotedef + \edef\@gls@docheckquotedef{% + \noexpand\def\noexpand\@gls@checkescquote####1% + \expandonce{\csname#1\endcsname}####2\expandonce{\csname#1\endcsname}% + ####3\noexpand\null{% + \noexpand\@gls@tmpb=\noexpand\expandafter{\noexpand\@gls@checkedmkidx}% + \noexpand\toks@={####1}% + \noexpand\ifx\noexpand\null####2\noexpand\null + \noexpand\ifx\noexpand\null####3\noexpand\null + \noexpand\edef\noexpand\@gls@checkedmkidx{% + \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@}% + \noexpand\def\noexpand\@@gls@checkescquote{\noexpand\relax}% + \noexpand\else + \noexpand\edef\noexpand\@gls@checkedmkidx{% + \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@ + \noexpand\@gls@quotechar\noexpand\string\expandonce{% + \csname#1\endcsname}\noexpand\@gls@quotechar + \noexpand\@gls@quotechar\noexpand\string\expandonce{% + \csname#1\endcsname}\noexpand\@gls@quotechar}% + \noexpand\def\noexpand\@@gls@checkescquote{% + \noexpand\@gls@checkescquote####3\noexpand\null}% + \noexpand\fi + \noexpand\else + \noexpand\edef\noexpand\@gls@checkedmkidx{% + \noexpand\the\noexpand\@gls@tmpb\noexpand\the\noexpand\toks@ + \noexpand\@gls@quotechar\noexpand\string + \expandonce{\csname#1\endcsname}\noexpand\@gls@quotechar}% + \noexpand\ifx\noexpand\null####3\noexpand\null + \noexpand\def\noexpand\@@gls@checkescquote{% + \noexpand\@gls@checkescquote####2\expandonce{\csname#1\endcsname}% + \expandonce{\csname#1\endcsname}\noexpand\null}% + \noexpand\else + \noexpand\def\noexpand\@@gls@checkescquote{% + \noexpand\@gls@checkescquote####2\expandonce{\csname#1\endcsname}% + ####3\noexpand\null}% + \noexpand\fi + \noexpand\fi + \noexpand\@@gls@checkescquote + }% + }% + \@gls@docheckquotedef + } + \newcommand*{\gls@nosetquote}[1]{\PackageError{glossaries}% + {\string\GlsSetQuote\space not permitted here}% + {Move \string\GlsSetQuote\space earlier in the preamble, as + soon as possible after glossaries.sty has been loaded}} +\fi +\newcommand*{\@gls@extramakeindexopts}[1]{} +\newcommand{\noist}{% + \@gls@addpredefinedattributes + \let\writeist\relax +} +\newcommand*{\@makeglossary}[1]{% + \ifglossaryexists{#1}% + {% + \ifglssavewrites + \expandafter\newtoks\csname glo@#1@filetok\endcsname + \else + \expandafter\newwrite\csname glo@#1@file\endcsname + \expandafter\@glsopenfile\csname glo@#1@file\endcsname{#1}% + \fi + \@gls@renewglossary + \writeist + }% + {% + \PackageError{glossaries}% + {Glossary type `#1' not defined}% + {New glossaries must be defined before using \string\makeglossaries}% + }% +} +\newcommand*{\@glsopenfile}[2]{% + \immediate\openout#1=\jobname.\csname @glotype@#2@out\endcsname + \PackageInfo{glossaries}{Writing glossary file + \jobname.\csname @glotype@#2@out\endcsname}% +} +\newcommand*{\@closegls}[1]{% + \closeout\csname glo@#1@file\endcsname +} +\ifglsxindy + \newcommand*{\@gls@automake}[1]{% + \ifglossaryexists{#1} + {% + \@closegls{#1}% + \ifdefstring{\glsorder}{letter}% + {\def\@gls@order{-M ord/letorder }}% + {\let\@gls@order\@empty}% + \ifcsundef{@xdy@#1@language}% + {\let\@gls@langmod\@xdy@main@language}% + {\letcs\@gls@langmod{@xdy@#1@language}}% + \edef\@gls@dothiswrite{\noexpand\write18{xindy + -I xindy + \@gls@order + -L \@gls@langmod\space + -M \gls@istfilebase\space + -C \gls@codepage\space + -t \jobname.\csuse{@glotype@#1@log} + -o \jobname.\csuse{@glotype@#1@in} + \jobname.\csuse{@glotype@#1@out}}% + }% + \@gls@dothiswrite + }% + {% + \GlossariesWarning{Can't make glossary `#1', it doesn't exist}% + }% + } +\else + \newcommand*{\@gls@automake}[1]{% + \ifglossaryexists{#1} + {% + \@closegls{#1}% + \ifdefstring{\glsorder}{letter}% + {\def\@gls@order{-l }}% + {\let\@gls@order\@empty}% + \edef\@gls@dothiswrite{\noexpand\write18{makeindex \@gls@order + -s \istfilename\space + -t \jobname.\csuse{@glotype@#1@log} + -o \jobname.\csuse{@glotype@#1@in} + \jobname.\csuse{@glotype@#1@out}}% + }% + \@gls@dothiswrite + }% + {% + \GlossariesWarning{Can't make glossary `#1', it doesn't exist}% + }% + } +\fi +\ifglsxindy + \newcommand*{\@gls@automake@immediate}[1]{% + \ifglossaryexists{#1} + {% + \IfFileExists{\jobname.\csuse{@glotype@#1@out}}% + {% + \ifdefstring{\glsorder}{letter}% + {\def\@gls@order{-M ord/letorder }}% + {\let\@gls@order\@empty}% + \ifcsundef{@xdy@#1@language}% + {\let\@gls@langmod\@xdy@main@language}% + {\letcs\@gls@langmod{@xdy@#1@language}}% + \edef\@gls@dothiswrite{\noexpand\immediate\noexpand\write18{xindy + -I xindy + \@gls@order + -L \@gls@langmod\space + -M \gls@istfilebase\space + -C \gls@codepage\space + -t \jobname.\csuse{@glotype@#1@log} + -o \jobname.\csuse{@glotype@#1@in} + \jobname.\csuse{@glotype@#1@out}}% + }% + \@gls@dothiswrite + }% + {\GlossariesWarning{can't automake `#1': \jobname.\csuse{@glotype@#1@out} + doesn't exist. Rerun may be required}}% + }% + {% + \GlossariesWarning{Can't make glossary `#1', it doesn't exist}% + }% + } +\else + \newcommand*{\@gls@automake@immediate}[1]{% + \ifglossaryexists{#1} + {% + \IfFileExists{\jobname.\csuse{@glotype@#1@out}}% + {% + \ifdefstring{\glsorder}{letter}% + {\def\@gls@order{-l }}% + {\let\@gls@order\@empty}% + \edef\@gls@dothiswrite{\noexpand\immediate\noexpand\write18{makeindex \@gls@order + -s \istfilename\space + -t \jobname.\csuse{@glotype@#1@log} + -o \jobname.\csuse{@glotype@#1@in} + \jobname.\csuse{@glotype@#1@out}}% + }% + \@gls@dothiswrite + }% + {\GlossariesWarning{can't automake `#1': \jobname.\csuse{@glotype@#1@out} + doesn't exist. Rerun may be required}}% + }% + {% + \GlossariesWarning{Can't make glossary `#1', it doesn't exist}% + }% + } +\fi +\newcommand*{\@warn@nomakeglossaries}{} +\newcommand*{\warn@nomakeglossaries}{\@warn@nomakeglossaries} +\newcommand{\@gls@@automake@immediate}{% + \ifnum\gls@automake@nr=2\relax + \@for\@gls@type:=\@glo@types\do{% + \ifdefempty{\@gls@type}{}% + {\@gls@automake@immediate{\@gls@type}}% + }% + \glsautomakefalse + \renewcommand*{\@gls@doautomake}{}% + \fi +} +\newcommand*{\makeglossaries}{% + \@domakeglossaries + {% + \@gls@@automake@immediate + \ifundef{\glswrite}{\newwrite\glswrite}{}% + \protected@write\@auxout{}{\string\providecommand\string\@glsorder[1]{}} + \protected@write\@auxout{}{\string\providecommand\string\@istfilename[1]{}} + \ifundef\@@gls@extramakeindexopts + {}% + {% + \protected@write\@auxout{}{\string\providecommand + \string\@gls@extramakeindexopts[1]{}} + \protected@write\@auxout{}{\string\@gls@extramakeindexopts + {\@@gls@extramakeindexopts}}% + }% + \protected@write\@auxout{}{\string\@istfilename{\istfilename}}% + \protected@write\@auxout{}{\string\@glsorder{\glsorder}} + \@for\@glo@type:=\@glo@types\do{% + \ifthenelse{\equal{\@glo@type}{}}{}{% + \@makeglossary{\@glo@type}}% + }% + \renewcommand*\newglossary[4][]{% + \PackageError{glossaries}{New glossaries + must be created before \string\makeglossaries}{You need + to move \string\makeglossaries\space after all your + \string\newglossary\space commands}}% + \let\@makeglossary\@gobble + \let\makeglossaries\relax + \@disable@onlypremakeg + \let\gls@checkseeallowed\relax + \let\warn@nomakeglossaries\relax + \def\warn@noprintglossary{% + \ifdefstring{\@glo@types}{,}% + {% + \GlossariesWarningNoLine{No glossaries have been defined}% + }% + {% + \GlossariesWarningNoLine{No \string\printglossary\space + or \string\printglossaries\space + found. ^^J(Remove \string\makeglossaries\space if you + don't want any glossaries.) ^^JThis document will not + have a glossary}% + }% + }% + \ifglssavenumberlist + \edef\@gls@dodeflistparser{\noexpand\DeclareListParser + {\noexpand\glsnumlistparser}{\delimN}}% + \@gls@dodeflistparser + \fi + \let\makenoidxglossaries\@no@makeglossaries + \renewcommand*{\@printgloss@setsort}{% + \let\@glo@assign@sortkey\@glo@no@assign@sortkey + }% + \ifglsautomake + \renewcommand*{\@gls@doautomake}{% + \@for\@gls@type:=\@glo@types\do{% + \ifdefempty{\@gls@type}{}% + {\@gls@automake{\@gls@type}}% + }% + }% + \fi + \@glo@check@sortallowed\makeglossaries + }% +} +\@onlypreamble{\makeglossaries} +\AtEndDocument{% + \warn@nomakeglossaries + \warn@noprintglossary +} +\newcommand*{\makenoidxglossaries}{% + \@domakeglossaries + {% + \renewcommand{\@gls@noref@warn}[1]{% + \GlossariesWarning{Empty glossary for + \string\printnoidxglossary[type={##1}]. + Rerun may be required (or you may have forgotten to use + commands like \string\gls)}% + }% + \let\@gls@checkmkidxchars\@gobble + \glsesclocationsfalse + \let\@@do@@wrglossary\gls@noidxglossary + \let\@gls@getgrouptitle\@gls@noidx@getgrouptitle + \let\gls@checkseeallowed\relax + \renewcommand{\@do@seeglossary}[2]{% + \edef\@gls@label{\glsdetoklabel{##1}}% + \protected@write\@auxout{}{% + \string\@gls@reference + {\csname glo@\@gls@label @type\endcsname}% + {\@gls@label}% + {% + \string\glsseeformat##2{}% + }% + }% + }% + \AtBeginDocument + {% + \write\@auxout{\string\providecommand\string\@gls@reference[3]{}}% + }% + \def\warn@noprintglossary{% + \GlossariesWarningNoLine{No \string\printnoidxglossary\space + or \string\printnoidxglossaries ^^J + found. (Remove \string\makenoidxglossaries\space if you + don't want any glossaries.)^^JThis document will not have a glossary}% + }% + \let\warn@nomakeglossaries\relax + \let\makeglossaries\@no@makeglossaries + \renewcommand*{\@printgloss@setsort}{% + \let\@glo@assign@sortkey\@@glo@assign@sortkey + \def\@glo@sorttype{\@glo@default@sorttype}% + }% + \renewcommand*\new@glossaryentry[2]{% + \PackageError{glossaries}{Glossary entries must be + defined in the preamble^^Jwhen you use + \string\makenoidxglossaries}% + {Either move your definitions to the preamble or use + \string\makeglossaries}% + }% + \renewcommand*{\glsentrynumberlist}[1]{% + \letcs{\@gls@loclist}{glo@\glsdetoklabel{##1}@loclist}% + \ifdef\@gls@loclist + {% + \glsnoidxloclist{\@gls@loclist}% + }% + {% + ??\glsdoifexists{##1}% + {% + \GlossariesWarning{Missing location list for `##1'. Either + a rerun is required or you haven't referenced the entry}% + }% + }% + }% + \renewcommand*{\glsdisplaynumberlist}[1]{% + \letcs{\@gls@loclist}{glo@\glsdetoklabel{##1}@loclist}% + \ifdef\@gls@loclist + {% + \def\@gls@noidxloclist@sep{% + \def\@gls@noidxloclist@sep{% + \def\@gls@noidxloclist@sep{% + \glsnumlistsep + }% + \def\@gls@noidxloclist@finalsep{\glsnumlistlastsep}% + }% + }% + \def\@gls@noidxloclist@finalsep{}% + \def\@gls@noidxloclist@prev{}% + \forlistloop{\glsnoidxdisplayloclisthandler}{\@gls@loclist}% + \@gls@noidxloclist@finalsep + \@gls@noidxloclist@prev + }% + {% + ??\glsdoifexists{##1}% + {% + \GlossariesWarning{Missing location list for `##1'. Either + a rerun is required or you haven't referenced the entry}% + }% + }% + }% + \renewcommand*{\glsnumberlistloop}[3]{% + \letcs{\@gls@loclist}{glo@\glsdetoklabel{##1}@loclist}% + \let\@gls@org@glsnoidxdisplayloc\glsnoidxdisplayloc + \let\@gls@org@glsseeformat\glsseeformat + \let\glsnoidxdisplayloc##2\relax + \let\glsseeformat##3\relax + \ifdef\@gls@loclist + {% + \forlistloop{\glsnoidxnumberlistloophandler}{\@gls@loclist}% + }% + {% + ??\glsdoifexists{##1}% + {% + \GlossariesWarning{Missing location list for `##1'. Either + a rerun is required or you haven't referenced the entry}% + }% + }% + \let\glsnoidxdisplayloc\@gls@org@glsnoidxdisplayloc + \let\glsseeformat\@gls@org@glsseeformat + }% + \let\@@gls@sanitizesort\@gls@noidx@sanitizesort + \let\@@gls@nosanitizesort\@@gls@noidx@nosanitizesort + \@gls@noidx@setsanitizesort + \@glo@check@sortallowed\makenoidxglossaries + }% +} +\@onlypreamble{\makenoidxglossaries} +\newcommand*{\glsnumberlistloop}[2]{% + \PackageError{glossaries}{\string\glsnumberlistloop\space + only works with \string\makenoidxglossaries}{}% +} +\newcommand*{\glsnoidxnumberlistloophandler}[1]{% + #1% +} +\newcommand*{\@no@makeglossaries}{% + \PackageError{glossaries}{You can't use both + \string\makeglossaries\space and \string\makenoidxglossaries}% + {Either use one or other (or none) of those commands but not both + together.}% +} +\newcommand{\@gls@noref@warn}[1]{% + \GlossariesWarning{\string\makenoidxglossaries\space + is required to make \string\printnoidxglossary[type={#1}] work}% +} +\newcommand*{\gls@noidxglossary}{% + \protected@write\@auxout{}{% + \string\@gls@reference + {\csname glo@\@gls@label @type\endcsname}% + {\@gls@label}% + {\string\glsnoidxdisplayloc + {\@glo@counterprefix}% + {\@gls@counter}% + {\@glsnumberformat}% + {\@glslocref}% + }% + }% +} +\providecommand\istfile{\glswrite} +\AtEndDocument{% + \glswritefiles +} +\newcommand*{\@glswritefiles}{% + \forallglossaries{\@glo@type}{% + \ifcsundef{glo@\@glo@type @filetok}% + {% + \def\gls@tmp{}% + }% + {% + \edef\gls@tmp{\expandafter\the + \csname glo@\@glo@type @filetok\endcsname}% + }% + \ifx\gls@tmp\@empty + \ifx\@glo@type\glsdefaulttype + \GlossariesWarningNoLine{Glossary `\@glo@type' has no + entries.^^JRemember to use package option `nomain' if +you + don't want to^^Juse the main glossary}% + \else + \GlossariesWarningNoLine{Glossary `\@glo@type' has no + entries}% + \fi + \else + \@glsopenfile{\glswrite}{\@glo@type}% + \immediate\write\glswrite{% + \expandafter\the + \csname glo@\@glo@type @filetok\endcsname}% + \immediate\closeout\glswrite + \fi + }% +} +\newcommand*{\gls@glossary}[1]{% + \@gls@glossary{#1}% +} +\newcommand*{\@gls@glossary}[2]{% + \if@gls@debug + \PackageInfo{glossaries}{wrglossary(#1)(#2)}% + \fi +} +\newcommand{\@gls@renewglossary}{% + \gdef\@gls@glossary##1{\@bsphack\begingroup\gls@wrglossary{##1}}% + \let\@gls@renewglossary\@empty +} +\newcommand*{\gls@wrglossary}[2]{% + \ifglssavewrites + \protected@edef\@gls@tmp{\the\csname glo@#1@filetok\endcsname#2}% + \expandafter\global\expandafter\csname glo@#1@filetok\endcsname + \expandafter{\@gls@tmp^^J}% + \else + \ifcsdef{glo@#1@file}% + {% + \expandafter\protected@write\csname glo@#1@file\endcsname{% + \gls@disablepagerefexpansion}{#2}% + }% + {% + \ifignoredglossary{#1}{}% + {% + \GlossariesWarning{No file defined for glossary `#1'}% + }% + }% + \fi + \endgroup\@esphack +} +\newcommand*{\@do@wrglossary}[1]{% + \glswriteentry{#1}{\@@do@wrglossary{#1}}% +} +\newcommand*{\glswriteentry}[2]{% + \ifglsindexonlyfirst + \ifglsused{#1}{}{#2}% + \else + #2% + \fi +} +\newcommand{\gls@protected@pagefmts}{\gls@numberpage,\gls@alphpage,% + \gls@Alphpage,\gls@romanpage,\gls@Romanpage,\gls@arabicpage} +\newcommand*{\gls@disablepagerefexpansion}{% + \@for\@gls@this:=\gls@protected@pagefmts\do + {% + \expandafter\let\@gls@this\relax + }% +} +\newcommand*{\gls@alphpage}{\@alph\c@page} +\newcommand*{\gls@Alphpage}{\@Alph\c@page} +\newcommand*{\gls@numberpage}{\number\c@page} +\newcommand*{\gls@arabicpage}{\@arabic\c@page} +\newcommand*{\gls@romanpage}{\romannumeral\c@page} +\newcommand*{\gls@Romanpage}{\@Roman\c@page} +\newcommand*{\glsaddprotectedpagefmt}[1]{% + \eappto\gls@protected@pagefmts{,\expandonce{\csname gls#1page\endcsname}}% + \csedef{gls#1page}{\expandonce{\csname#1\endcsname}\noexpand\c@page}% + \eappto\@wrglossarynumberhook{% + \noexpand\let\expandonce{\csname org@gls#1\endcsname}% + \expandonce{\csname#1\endcsname}% + \noexpand\def\expandonce{\csname#1\endcsname}{% + \noexpand\@wrglossary@pageformat + \expandonce{\csname gls#1page\endcsname}% + \expandonce{\csname org@gls#1\endcsname}% + }% + }% +} +\newcommand*\@wrglossarynumberhook{} +\newcommand{\@wrglossary@pageformat}[3]{% + \ifx#3\c@page #1\else #2#3\fi +} +\newcommand*{\@@do@wrglossary}[1]{% + \ifglsesclocations + \@@do@esc@wrglossary{#1}% + \else + \@@do@noesc@wrglossary{#1}% + \fi +} +\newcommand*{\@@do@noesc@wrglossary}[1]{% + \expandafter\def\expandafter\@glslocref\expandafter{\theglsentrycounter}% + \expandafter\def\expandafter\@glsHlocref\expandafter{\theHglsentrycounter}% + \ifx\@glsHlocref\@glslocref + \def\@glo@counterprefix{}% + \else + \protected@edef\@do@gls@getcounterprefix{\noexpand\@gls@getcounterprefix + {\@glslocref}{\@glsHlocref}% + }% + \@do@gls@getcounterprefix + \fi + \edef\@gls@label{\glsdetoklabel{#1}}% + \@@do@@wrglossary +} +\newif\ifglswrallowprimitivemods +\glswrallowprimitivemodstrue +\newcommand*{\@@do@esc@wrglossary}[1]{% please read documented code! + \begingroup + \let\gls@orgthe\the + \let\gls@orgnumber\number + \let\gls@orgarabic\@arabic + \let\gls@orgromannumeral\romannumeral + \let\gls@orgalph\@alph + \let\gls@orgAlph\@Alph + \let\gls@orgRoman\@Roman + \ifglswrallowprimitivemods + \def\gls@the##1{% + \ifx##1\c@page \gls@numberpage\else\gls@orgthe##1\fi}% + \def\the{\expandafter\gls@the}% + \def\gls@number##1{% + \ifx##1\c@page \gls@numberpage\else\gls@orgnumber##1\fi}% + \def\number{\expandafter\gls@number}% + \fi + \def\@arabic##1{% + \ifx##1\c@page \gls@arabicpage\else\gls@orgarabic##1\fi}% + \def\romannumeral##1{% + \ifx##1\c@page \gls@romanpage\else\gls@orgromannumeral##1\fi}% + \def\@Roman##1{% + \ifx##1\c@page \gls@Romanpage\else\gls@orgRoman##1\fi}% + \def\@alph##1{% + \ifx##1\c@page \gls@alphpage\else\gls@orgalph##1\fi}% + \def\@Alph##1{% + \ifx##1\c@page \gls@Alphpage\else\gls@orgAlph##1\fi}% + \@wrglossarynumberhook + \gls@disablepagerefexpansion + \protected@xdef\@glslocref{\theglsentrycounter}% + \endgroup + \@gls@checkmkidxchars\@glslocref + \expandafter\ifx\theHglsentrycounter\theglsentrycounter\relax + \def\@glo@counterprefix{}% + \else + \protected@edef\@glsHlocref{\theHglsentrycounter}% + \@gls@checkmkidxchars\@glsHlocref + \edef\@do@gls@getcounterprefix{\noexpand\@gls@getcounterprefix + {\@glslocref}{\@glsHlocref}% + }% + \@do@gls@getcounterprefix + \fi + \edef\@gls@label{\glsdetoklabel{#1}}% + \@@do@@wrglossary +} +\newcommand*{\@@do@@wrglossary}{% + \ifglsxindy + \expandafter\@glo@check@mkidxrangechar\@glsnumberformat\@nil + \def\@glo@range{}% + \expandafter\if\@glo@prefix(\relax + \def\@glo@range{:open-range}% + \else + \expandafter\if\@glo@prefix)\relax + \def\@glo@range{:close-range}% + \fi + \fi + \gls@glossary{\csname glo@\@gls@label @type\endcsname}{% + (indexentry :tkey (\csname glo@\@gls@label @index\endcsname) + :locref \string"{\@glo@counterprefix}{\@glslocref}\string" % + :attr \string"\@gls@counter\@glo@suffix\string" + \@glo@range + ) + }% + \else + \@set@glo@numformat{\@glo@numfmt}{\@gls@counter}{\@glsnumberformat}% + {\@glo@counterprefix}% + \gls@glossary{\csname glo@\@gls@label @type\endcsname}{% + \string\glossaryentry{\csname glo@\@gls@label @index\endcsname + \@gls@encapchar\@glo@numfmt}{\@glslocref}}% + \fi +} +\newcommand*\@gls@getcounterprefix[2]{% + \edef\@gls@thisloc{#1}\edef\@gls@thisHloc{#2}% + \ifx\@gls@thisloc\@gls@thisHloc + \def\@glo@counterprefix{}% + \else + \def\@gls@get@counterprefix##1.#1##2\end@getprefix{% + \def\@glo@tmp{##2}% + \ifx\@glo@tmp\@empty + \def\@glo@counterprefix{}% + \else + \def\@glo@counterprefix{##1}% + \fi + }% + \@gls@get@counterprefix#2.#1\end@getprefix + \ifx\@glo@counterprefix\@empty + \GlossariesWarning{Hyper target `#2' can't be formed by + prefixing^^Jlocation `#1'. You need to modify the + definition of \string\theH\@gls@counter^^Jotherwise you + will get the warning: "`name{\@gls@counter.#1}' has been^^J + referenced but does not exist"}% + \fi + \fi +} +\newcommand{\@do@seeglossary}[2]{% +\def\@gls@xref{#2}% +\@onelevel@sanitize\@gls@xref +\@gls@checkmkidxchars\@gls@xref +\ifglsxindy + \gls@glossary{\csname glo@#1@type\endcsname}{% + (indexentry + :tkey (\csname glo@#1@index\endcsname) + :xref (\string"\@gls@xref\string") + :attr \string"see\string" + ) + }% +\else + \gls@glossary{\csname glo@#1@type\endcsname}{% + \string\glossaryentry{\csname glo@#1@index\endcsname + \@gls@encapchar glsseeformat\@gls@xref}{Z}}% +\fi +} +\def\@gls@fixbraces#1#2#3\@nil{% + \ifx#2[\relax + \@@gls@fixbraces#1#2#3\@end@fixbraces + \else + \def#1{{#2#3}}% + \fi +} +\def\@@gls@fixbraces#1[#2]#3\@end@fixbraces{% + \def#1{[#2]{#3}}% +} +\newrobustcmd*{\glssee}[3][\seename]{% + \@do@seeglossary{#2}{[#1]{#3}}} +\newcommand*{\@glssee}[3][\seename]{% + \glssee[#1]{#3}{#2}} +\newrobustcmd*{\glsseeformat}[3][\seename]{% + \emph{#1} \glsseelist{#2}} +\newrobustcmd*{\glsseelist}[1]{% + \let\@gls@dolast\relax + \let\@gls@donext\relax + \@for\@gls@thislabel:=#1\do{% + \ifx\@xfor@nextelement\@nnil + \@gls@dolast + \else + \@gls@donext + \fi + \expandafter\glsseeitem\expandafter{\@gls@thislabel}% + \let\@gls@dolast\glsseelastsep + \let\@gls@donext\glsseesep + }% +} +\newcommand*{\glsseelastsep}{\space\andname\space} +\newcommand*{\glsseesep}{, } +\newrobustcmd*{\glsseeitem}[1]{\glshyperlink[\glsseeitemformat{#1}]{#1}} +\newcommand*{\glsseeitemformat}[1]{\glsentrytext{#1}} +\newcommand*{\gls@save@numberlist}[1]{% + \ifglssavenumberlist + \toks@{#1}% + \edef\@do@writeaux@info{% + \noexpand\csgdef{glo@\glscurrententrylabel @numberlist}{\the\toks@}% + }% + \@onelevel@sanitize\@do@writeaux@info + \protected@write\@auxout{}{\@do@writeaux@info}% + \fi +} +\newcommand*{\warn@noprintglossary}{}% +\ifcsundef{printglossary}{}% +{% + \@gls@warnonglossdefined + \undef\printglossary +} +\newcommand*{\@printgloss@checkexists@noignored}[2]{% + \@ifglossaryexists{#1}% + {#2}% + {% + \ifignoredglossary{#1}% + {\GlossariesWarning{Glossary `#1' is an ignored glossary}}% + {\GlossariesWarning{Glossary `#1' doesn't exist}}% + }% +} +\newcommand*{\@printgloss@checkexists@allowignored}[2]{% + \s@ifglossaryexists{#1}% + {#2}% + {\GlossariesWarning{Glossary `#1' doesn't exist}}% +} +\let\@printgloss@checkexists\@printgloss@checkexists@noignored +\newcommand*{\printglossary}[1][type=\glsdefaulttype]{% + \let\@printgloss@checkexists\@printgloss@checkexists@noignored + \@printglossary{#1}{\@print@glossary}% +} +\newcommand*{\printglossaries}{% + \forallglossaries{\@@glo@type}{\printglossary[type=\@@glo@type]}% +} +\newcommand*{\printnoidxglossary}[1][type=\glsdefaulttype]{% + \let\@printgloss@checkexists\@printgloss@checkexists@noignored + \@printglossary{#1}{\@print@noidx@glossary}% +} +\newcommand*{\printnoidxglossaries}{% + \forallglossaries{\@@glo@type}{\printnoidxglossary[type=\@@glo@type]}% +} +\newcommand*{\@printgloss@setsort}{} +\newcommand*{\@gls@preglossaryhook}{} +\newcommand{\@printglossary}[2]{% + \def\@glo@type{\glsdefaulttype}% + \def\glossarytitle{\csname @glotype@\@glo@type @title\endcsname}% + \def\glossarytoctitle{\glossarytitle}% + \let\org@glossarytitle\glossarytitle + \def\@glossarystyle{% + \ifx\@glossary@default@style\relax + \GlossariesWarning{No default glossary style provided \MessageBreak + for the glossary `\@glo@type'. \MessageBreak + Using deprecated fallback. \MessageBreak + To fix this set the style with \MessageBreak + \string\setglossarystyle\space or use the \MessageBreak + style key=value option}% + \fi + }% + \def\gls@dotoctitle{\glssettoctitle{\@glo@type}}% + \let\@org@glossaryentrynumbers\glossaryentrynumbers + \bgroup + \@printgloss@setsort + \setkeys{printgloss}{#1}% + \@printgloss@checkexists{\@glo@type}% + {% + \ifx\glossarytitle\org@glossarytitle + \else + \expandafter\let\csname @glotype@\@glo@type @title\endcsname + \glossarytitle + \fi + \let\currentglossary\@glo@type + \let\org@glossaryentrynumbers\glossaryentrynumbers + \let\glsnonextpages\@glsnonextpages + \let\glsnextpages\@glsnextpages + \let\nopostdesc\@nopostdesc + \gls@dotoctitle + \@glossarystyle + \let\gls@org@glossaryentryfield\glossentry + \let\gls@org@glossarysubentryfield\subglossentry + \renewcommand{\glossentry}[1]{% + \xdef\glscurrententrylabel{\glsdetoklabel{##1}}% + \gls@org@glossaryentryfield{##1}% + }% + \renewcommand{\subglossentry}[2]{% + \xdef\glscurrententrylabel{\glsdetoklabel{##2}}% + \gls@org@glossarysubentryfield{##1}{##2}% + }% + \@gls@preglossaryhook + #2% + }% + \egroup + \global\let\glossaryentrynumbers\@org@glossaryentrynumbers + \global\let\warn@noprintglossary\relax +} +\newcommand{\@print@glossary}{% + \makeatletter + \@input@{\jobname.\csname @glotype@\@glo@type @in\endcsname}% + \IfFileExists{\jobname.\csname @glotype@\@glo@type @in\endcsname}% + {}% + {\null}% + \ifglsxindy + \ifcsundef{@xdy@\@glo@type @language}% + {% + \edef\@do@auxoutstuff{% + \noexpand\AtEndDocument{% + \noexpand\immediate\noexpand\write\@auxout{% + \string\providecommand\string\@xdylanguage[2]{}}% + \noexpand\immediate\noexpand\write\@auxout{% + \string\@xdylanguage{\@glo@type}{\@xdy@main@language}}% + }% + }% + }% + {% + \edef\@do@auxoutstuff{% + \noexpand\AtEndDocument{% + \noexpand\immediate\noexpand\write\@auxout{% + \string\providecommand\string\@xdylanguage[2]{}}% + \noexpand\immediate\noexpand\write\@auxout{% + \string\@xdylanguage{\@glo@type}{\csname @xdy@\@glo@type + @language\endcsname}}% + }% + }% + }% + \@do@auxoutstuff + \edef\@do@auxoutstuff{% + \noexpand\AtEndDocument{% + \noexpand\immediate\noexpand\write\@auxout{% + \string\providecommand\string\@gls@codepage[2]{}}% + \noexpand\immediate\noexpand\write\@auxout{% + \string\@gls@codepage{\@glo@type}{\gls@codepage}}% + }% + }% + \@do@auxoutstuff + \fi + \renewcommand*{\@warn@nomakeglossaries}{% + \GlossariesWarningNoLine{\string\makeglossaries\space + hasn't been used,^^Jthe glossaries will not be updated}% + }% +} +\newcommand*{\@glo@sortentries}[2]{% + \glosortentrieswarning + \def\@glo@sortinglist{}% + \def\@glo@sortinghandler{#1}% + \edef\@glo@type{#2}% + \forlistcsloop{\@glo@do@sortentries}{@glsref@#2}% + \csdef{@glsref@#2}{}% + \@for\@this@label:=\@glo@sortinglist\do{% + \xifinlistcs{\@this@label}{@glsref@#2}% + {}% + {% + \listcsxadd{@glsref@#2}{\@this@label}% + }% + \ifcsdef{@glo@sortingchildren@\@this@label}% + {% + \@glo@addchildren{#2}{\@this@label}% + }% + {}% + }% +} +\newcommand*{\@glo@addchildren}[2]{% + \bgroup + \letcs{\@glo@childlist}{@glo@sortingchildren@#2}% + \@for\@this@childlabel:=\@glo@childlist\do + {% + \xifinlistcs{\@this@childlabel}{@glsref@#1}% + {}% + {% + \listcsxadd{@glsref@#1}{\@this@childlabel}% + }% + \ifcsdef{@glo@sortingchildren@\@this@childlabel}% + {% + \@glo@addchildren{#1}{\@this@childlabel}% + }% + {% + }% + }% + \egroup +} +\newcommand*{\@glo@do@sortentries}[1]{% + \ifglshasparent{#1}% + {% + \edef\@glo@parent{\csuse{glo@\glsdetoklabel{#1}@parent}}% + \ifcsundef{@glo@sortingchildren@\@glo@parent}% + {% + \csdef{@glo@sortingchildren@\@glo@parent}{}% + }% + {}% + \expandafter\@glo@sortedinsert + \csname @glo@sortingchildren@\@glo@parent\endcsname{#1}% + \xifinlistcs{\@glo@parent}{@glsref@\@glo@type}% + {% + }% + {% + \expandafter\@glo@do@sortentries\expandafter{\@glo@parent}% + }% + }% + {% + \@glo@sortedinsert{\@glo@sortinglist}{#1}% + }% +} +\newcommand*{\@glo@sortedinsert}[2]{% + \dtl@insertinto{#2}{#1}{\@glo@sortinghandler}% +}% +\newcommand*{\@glo@sorthandler@word}[2]{% + \letcs\@gls@sort@A{glo@\glsdetoklabel{#1}@sort}% + \letcs\@gls@sort@B{glo@\glsdetoklabel{#2}@sort}% + \edef\glo@do@compare{% + \noexpand\dtlwordindexcompare{\noexpand\dtl@sortresult}% + {\expandonce\@gls@sort@B}% + {\expandonce\@gls@sort@A}% + }% + \glo@do@compare +} +\newcommand*{\@glo@sorthandler@letter}[2]{% + \letcs\@gls@sort@A{glo@\glsdetoklabel{#1}@sort}% + \letcs\@gls@sort@B{glo@\glsdetoklabel{#2}@sort}% + \edef\glo@do@compare{% + \noexpand\dtlletterindexcompare{\noexpand\dtl@sortresult}% + {\expandonce\@gls@sort@B}% + {\expandonce\@gls@sort@A}% + }% + \glo@do@compare +} +\newcommand*{\@glo@sorthandler@case}[2]{% + \letcs\@gls@sort@A{glo@\glsdetoklabel{#1}@sort}% + \letcs\@gls@sort@B{glo@\glsdetoklabel{#2}@sort}% + \edef\glo@do@compare{% + \noexpand\dtlcompare{\noexpand\dtl@sortresult}% + {\expandonce\@gls@sort@B}% + {\expandonce\@gls@sort@A}% + }% + \glo@do@compare +} +\newcommand*{\@glo@sorthandler@nocase}[2]{% + \letcs\@gls@sort@A{glo@\glsdetoklabel{#1}@sort}% + \letcs\@gls@sort@B{glo@\glsdetoklabel{#2}@sort}% + \edef\glo@do@compare{% + \noexpand\dtlicompare{\noexpand\dtl@sortresult}% + {\expandonce\@gls@sort@B}% + {\expandonce\@gls@sort@A}% + }% + \glo@do@compare +} +\newcommand*{\@glo@sortmacro@word}[1]{% + \ifdefstring{\@glo@default@sorttype}{standard}% + {% + \@glo@sortentries{\@glo@sorthandler@word}{#1}% + }% + {% + \PackageError{glossaries}{Conflicting sort options:^^J + \string\usepackage[sort=\@glo@default@sorttype]{glossaries}^^J + \string\printnoidxglossary[sort=word]}{}% + }% +} +\newcommand*{\@glo@sortmacro@letter}[1]{% + \ifdefstring{\@glo@default@sorttype}{standard}% + {% + \@glo@sortentries{\@glo@sorthandler@letter}{#1}% + }% + {% + \PackageError{glossaries}{Conflicting sort options:^^J + \string\usepackage[sort=\@glo@default@sorttype]{glossaries}^^J + \string\printnoidxglossary[sort=letter]}{}% + }% +} +\newcommand*{\@glo@sortmacro@standard}[1]{% + \ifdefstring{\@glo@default@sorttype}{standard}% + {% + \ifcsdef{@glo@sorthandler@\glsorder}% + {% + \@glo@sortentries{\csuse{@glo@sorthandler@\glsorder}}{#1}% + }% + {% + \PackageError{glossaries}{Unknown sort handler `\glsorder'}{}% + }% + }% + {% + \PackageError{glossaries}{Conflicting sort options:^^J + \string\usepackage[sort=\@glo@default@sorttype]{glossaries}^^J + \string\printnoidxglossary[sort=standard]}{}% + }% +} +\newcommand*{\@glo@sortmacro@case}[1]{% + \ifdefstring{\@glo@default@sorttype}{standard}% + {% + \@glo@sortentries{\@glo@sorthandler@case}{#1}% + }% + {% + \PackageError{glossaries}{Conflicting sort options:^^J + \string\usepackage[sort=\@glo@default@sorttype]{glossaries}^^J + \string\printnoidxglossary[sort=case]}{}% + }% +} +\newcommand*{\@glo@sortmacro@nocase}[1]{% + \ifdefstring{\@glo@default@sorttype}{standard}% + {% + \@glo@sortentries{\@glo@sorthandler@nocase}{#1}% + }% + {% + \PackageError{glossaries}{Conflicting sort options:^^J + \string\usepackage[sort=\@glo@default@sorttype]{glossaries}^^J + \string\printnoidxglossary[sort=nocase]}{}% + }% +} +\newcommand*{\@glo@sortmacro@def}[1]{% + \def\@glo@sortinglist{}% + \forglsentries[#1]{\@gls@thislabel}% + {% + \xifinlistcs{\@gls@thislabel}{@glsref@#1}% + {% + \listeadd{\@glo@sortinglist}{\@gls@thislabel}% + }% + {% + }% + }% + \cslet{@glsref@#1}{\@glo@sortinglist}% +} +\newcommand*{\@glo@sortmacro@def@do}[1]{% + \ifinlistcs{#1}{@glsref@\@glo@type}% + {}% + {% + \listcsadd{@glsref@\@glo@type}{#1}% + }% + \ifcsdef{@glo@sortingchildren@#1}% + {% + \@glo@addchildren{\@glo@type}{#1}% + }% + {}% +} +\newcommand*{\@glo@sortmacro@use}[1]{} +\newcommand*{\@print@noidx@glossary}{% + \ifcsdef{@glsref@\@glo@type}% + {% + \ifcsdef{@glo@sortmacro@\@glo@sorttype}% + {% + \csuse{@glo@sortmacro@\@glo@sorttype}{\@glo@type}% + }% + {% + \PackageError{glossaries}{Unknown sort handler `\@glo@sorttype'}{}% + }% + \glossarysection[\glossarytoctitle]{\glossarytitle}% + \glossarypreamble + \def\@gls@currentlettergroup{}% + \begin{theglossary}% + \glossaryheader + \glsresetentrylist + \forlistcsloop{\@gls@noidx@do}{@glsref@\@glo@type}% + \end{theglossary}% + \glossarypostamble + }% + {% + \@gls@noref@warn{\@glo@type}% + }% +} +\def\glo@grabfirst#1#2\@nil{% + \def\@gls@firsttok{#1}% + \ifdefempty\@gls@firsttok + {% + \def\@glo@thislettergrp{0}% + }% + {% + \@onelevel@sanitize\@gls@firsttok + \expandafter\@glo@grabfirst\@gls@firsttok{}{}\@nil + }% +} +\def\@glo@grabfirst#1#2\@nil{% + \ifdefempty\@glo@thislettergrp + {% + \def\@glo@thislettergrp{glssymbols}% + }% + {% + \count@=\uccode`#1\relax + \ifnum\count@=0\relax + \def\@glo@thislettergrp{glssymbols}% + \else + \ifdefstring\@glo@sorttype{case}% + {% + \count@=`#1\relax + }% + {% + }% + \edef\@glo@thislettergrp{\the\count@}% + \fi + }% +} +\newcommand{\@gls@noidx@do}[1]{% + \global\letcs{\@gls@loclist}{glo@\glsdetoklabel{#1}@loclist}% + \ifglshasparent{#1}% + {% + \gls@level=\csuse{glo@\glsdetoklabel{#1}@level}\relax + \ifdefvoid{\@gls@loclist} + {% + \subglossentry{\gls@level}{#1}{}% + }% + {% + \subglossentry{\gls@level}{#1}% + {% + \glossaryentrynumbers{\glsnoidxloclist{\@gls@loclist}}% + }% + }% + }% + {% + \letcs{\@gls@sort}{glo@\glsdetoklabel{#1}@sort}% + \expandafter\glo@grabfirst\@gls@sort{}{}\@nil + \ifdefequal{\@glo@thislettergrp}{\@gls@currentlettergroup}% + {}% + {% + \ifdefempty{\@gls@currentlettergroup}{}% + {% + \global\let\@glo@thislettergrp\@glo@thislettergrp + \glsgroupskip + }% + \glsgroupheading{\@glo@thislettergrp}% + }% + \global\let\@gls@currentlettergroup\@glo@thislettergrp + \ifdefvoid{\@gls@loclist} + {% + \glossentry{#1}{}% + }% + {% + \glossentry{#1}% + {% + \glossaryentrynumbers{\glsnoidxloclist{\@gls@loclist}}% + }% + }% + }% +} +\newcommand*{\glsnoidxloclist}[1]{% + \def\@gls@noidxloclist@sep{}% + \def\@gls@noidxloclist@prev{}% + \forlistloop{\glsnoidxloclisthandler}{#1}% +} +\newcommand*{\glsnoidxloclisthandler}[1]{% + \ifdefstring{\@gls@noidxloclist@prev}{#1}% + {% + }% + {% + \@gls@noidxloclist@sep + #1% + \def\@gls@noidxloclist@sep{\delimN}% + \def\@gls@noidxloclist@prev{#1}% + }% +} +\newcommand*{\glsnoidxdisplayloclisthandler}[1]{% + \ifdefstring{\@gls@noidxloclist@prev}{#1}% + {% + }% + {% + \@gls@noidxloclist@sep + \@gls@noidxloclist@prev + \def\@gls@noidxloclist@prev{#1}% + }% +} +\newcommand*\glsnoidxdisplayloc[4]{% + \setentrycounter[#1]{#2}% + \csuse{#3}{#4}% +} +\newcommand*{\@gls@reference}[3]{% + \glsdoifexistsorwarn{#2}% + {% + \ifcsundef{@glsref@#1}{\csgdef{@glsref@#1}{}}{}% + \ifinlistcs{#2}{@glsref@#1}% + {}% + {\listcsgadd{@glsref@#1}{#2}}% + \ifcsundef{glo@\glsdetoklabel{#2}@loclist}% + {\csgdef{glo@\glsdetoklabel{#2}@loclist}{}}% + {}% + \listcsgadd{glo@\glsdetoklabel{#2}@loclist}{#3}% + }% +} +\define@key{printgloss}{type}{\def\@glo@type{#1}} +\define@key{printgloss}{title}{% + \def\glossarytitle{#1}% + \let\gls@dotoctitle\relax +} +\define@key{printgloss}{toctitle}{% + \def\glossarytoctitle{#1}% + \let\gls@dotoctitle\relax +} +\define@key{printgloss}{style}{% + \ifcsundef{@glsstyle@#1}% + {% + \PackageError{glossaries}% + {Glossary style `#1' undefined}{}% + }% + {% + \def\@glossarystyle{\setglossentrycompatibility + \csname @glsstyle@#1\endcsname}% + }% +} +\define@choicekey{printgloss}{numberedsection}% + [\gls@numberedsection@val\gls@numberedsection@nr]% + {false,nolabel,autolabel,nameref}[nolabel]% +{% + \ifcase\gls@numberedsection@nr\relax + \renewcommand*{\@@glossarysecstar}{*}% + \renewcommand*{\@@glossaryseclabel}{}% + \or + \renewcommand*{\@@glossarysecstar}{}% + \renewcommand*{\@@glossaryseclabel}{}% + \or + \renewcommand*{\@@glossarysecstar}{}% + \renewcommand*{\@@glossaryseclabel}{\label{\glsautoprefix\@glo@type}}% + \or + \renewcommand*{\@@glossarysecstar}{*}% + \renewcommand*{\@@glossaryseclabel}{% + \protected@edef\@currentlabelname{\glossarytoctitle}% + \label{\glsautoprefix\@glo@type}}% + \fi +} +\define@choicekey{printgloss}{nogroupskip}{true,false}[true]{% + \csuse{glsnogroupskip#1}% +} +\define@choicekey{printgloss}{nopostdot}{true,false}[true]{% + \csuse{glsnopostdot#1}% +} +\newcommand*{\GlsEntryCounterLabelPrefix}{glsentry-} +\define@choicekey{printgloss}{entrycounter}{true,false}[true]{% + \csuse{glsentrycounter#1}% + \@gls@define@glossaryentrycounter +} +\define@choicekey{printgloss}{subentrycounter}{true,false}[true]{% + \csuse{glssubentrycounter#1}% + \@gls@define@glossarysubentrycounter +} +\define@boolkey{printgloss}[gls]{nonumberlist}[true]{% +\ifglsnonumberlist + \def\glossaryentrynumbers##1{}% +\else + \def\glossaryentrynumbers##1{##1}% +\fi} +\define@key{printgloss}{sort}{\@glo@assign@sortkey{#1}} +\newcommand*{\@glo@no@assign@sortkey}[1]{% + \PackageError{glossaries}{`sort' key not permitted with + \string\printglossary}% + {The `sort' key may only be used with \string\printnoidxglossary}% +} +\newcommand*{\@@glo@assign@sortkey}[1]{% + \def\@glo@sorttype{#1}% +} +\newcommand*{\@glsnonextpages}{% + \gdef\glossaryentrynumbers##1{% + \glsresetentrylist + }% +} +\newcommand*{\@glsnextpages}{% + \gdef\glossaryentrynumbers##1{% + ##1\glsresetentrylist}} +\newcommand*{\glsresetentrylist}{% + \global\let\glossaryentrynumbers\org@glossaryentrynumbers} +\newcommand*{\glsnonextpages}{} +\newcommand*{\glsnextpages}{} +\@gls@define@glossaryentrycounter +\@gls@define@glossarysubentrycounter +\newcommand*{\glsresetsubentrycounter}{% + \ifglssubentrycounter + \setcounter{glossarysubentry}{0}% + \fi +} +\newcommand*{\glsresetentrycounter}{% + \ifglsentrycounter + \setcounter{glossaryentry}{0}% + \fi +} +\newcommand*{\glsstepentry}[1]{% + \ifglsentrycounter + \refstepcounter{glossaryentry}% + \label{\GlsEntryCounterLabelPrefix\glsdetoklabel{#1}}% + \fi +} +\newcommand*{\glsstepsubentry}[1]{% + \ifglssubentrycounter + \edef\currentglssubentry{\glsdetoklabel{#1}}% + \refstepcounter{glossarysubentry}% + \label{\GlsEntryCounterLabelPrefix\currentglssubentry}% + \fi +} +\newcommand*{\glsrefentry}[1]{% + \ifglsentrycounter + \ref{\GlsEntryCounterLabelPrefix\glsdetoklabel{#1}}% + \else + \ifglssubentrycounter + \ref{\GlsEntryCounterLabelPrefix\glsdetoklabel{#1}}% + \else + \gls{#1}% + \fi + \fi +} +\newcommand*{\glsentrycounterlabel}{% + \ifglsentrycounter + \theglossaryentry.\space + \fi +} +\newcommand*{\glssubentrycounterlabel}{% + \ifglssubentrycounter + \theglossarysubentry)\space + \fi +} +\newcommand*{\glsentryitem}[1]{% + \ifglsentrycounter + \glsstepentry{#1}\glsentrycounterlabel + \else + \glsresetsubentrycounter + \fi +} +\newcommand*{\glssubentryitem}[1]{% + \ifglssubentrycounter + \glsstepsubentry{#1}\glssubentrycounterlabel + \fi +} +\ifcsundef{theglossary}% +{% + \newenvironment{theglossary}{}{}% +}% +{% + \@gls@warnontheglossdefined + \renewenvironment{theglossary}{}{}% +} +\newcommand*{\glossaryheader}{} +\newcommand*{\glstarget}[2]{\@glstarget{\glolinkprefix#1}{#2}} +\providecommand*{\compatibleglossentry}[2]{% + \toks@{#2}% + \protected@edef\@do@glossentry{\noexpand\glossaryentryfield{#1}% + {\noexpand\glsnamefont + {\expandafter\expandonce\csname glo@#1@name\endcsname}}% + {\expandafter\expandonce\csname glo@#1@desc\endcsname}% + {\expandafter\expandonce\csname glo@#1@symbol\endcsname}% + {\the\toks@}% + }% + \@do@glossentry +} +\newcommand*{\glossentryname}[1]{% + \glsdoifexistsorwarn{#1}% + {% + \letcs{\glo@name}{glo@\glsdetoklabel{#1}@name}% + \expandafter\glsnamefont\expandafter{\glo@name}% + }% +} +\newcommand*{\Glossentryname}[1]{% + \glsdoifexistsorwarn{#1}% + {% + \glsnamefont{\Glsentryname{#1}}% + }% +} +\newcommand*{\glossentrydesc}[1]{% + \glsdoifexistsorwarn{#1}% + {% + \glsentrydesc{#1}% + }% +} +\newcommand*{\Glossentrydesc}[1]{% + \glsdoifexistsorwarn{#1}% + {% + \Glsentrydesc{#1}% + }% +} +\newcommand*{\glossentrysymbol}[1]{% + \glsdoifexistsorwarn{#1}% + {% + \glsentrysymbol{#1}% + }% +} +\newcommand*{\Glossentrysymbol}[1]{% + \glsdoifexistsorwarn{#1}% + {% + \Glsentrysymbol{#1}% + }% +} +\providecommand*{\compatiblesubglossentry}[3]{% + \toks@{#3}% + \protected@edef\@do@subglossentry{\noexpand\glossarysubentryfield{\number#1}% + {#2}% + {\noexpand\glsnamefont + {\expandafter\expandonce\csname glo@#2@name\endcsname}}% + {\expandafter\expandonce\csname glo@#2@desc\endcsname}% + {\expandafter\expandonce\csname glo@#2@symbol\endcsname}% + {\the\toks@}% + }% + \@do@subglossentry +} +\newcommand*{\setglossentrycompatibility}{% + \let\glossentry\compatibleglossentry + \let\subglossentry\compatiblesubglossentry +} +\setglossentrycompatibility +\newcommand{\glossaryentryfield}[5]{% + \GlossariesWarning + {Deprecated use of \string\glossaryentryfield.^^J + I recommend you change to \string\glossentry.^^J + If you've just upgraded, try removing your gls auxiliary + files^^J and recompile}% + \noindent\textbf{\glstarget{#1}{#2}} #4 #3. #5\par} +\newcommand*{\glossarysubentryfield}[6]{% + \GlossariesWarning + {Deprecated use of \string\glossarysubentryfield.^^J + I recommend you change to \string\subglossentry.^^J + If you've just upgraded, try removing your gls auxiliary + files^^J and recompile}% + \glstarget{#2}{\strut}#4. #6\par} +\newcommand*{\glsgroupskip}{} +\newcommand*{\glsgroupheading}[1]{} +\newcommand*{\glsgetgrouptitle}[1]{% + \@gls@getgrouptitle{#1}{\@gls@grptitle}% + \@gls@grptitle +} +\newcommand*{\@gls@getgrouptitle}[2]{% + \dtl@ifsingle{#1}% + {% + \ifcsundef{#1groupname}{\def#2{#1}}{\letcs#2{#1groupname}}% + }% + {% + \ifboolexpr{test{\ifstrequal{#1}{glssymbols}} + or test{\ifstrequal{#1}{glsnumbers}}}% + {% + \ifcsundef{#1groupname}{\def#2{#1}}{\letcs#2{#1groupname}}% + }% + {% + \def#2{#1}% + }% + }% +} +\newcommand*{\@gls@noidx@getgrouptitle}[2]{% + \DTLifint{#1}% + {\edef#2{\char#1\relax}}% + {% + \ifcsundef{#1groupname}{\def#2{#1}}{\letcs#2{#1groupname}}% + }% +} +\newcommand*{\glsgetgrouplabel}[1]{% +\ifthenelse{\equal{#1}{\glssymbolsgroupname}}{glssymbols}{% +\ifthenelse{\equal{#1}{\glsnumbersgroupname}}{glsnumbers}{#1}}} +\newcommand*{\setentrycounter}[2][]{% + \def\@glo@counterprefix{#1}% + \ifx\@glo@counterprefix\@empty + \def\@glo@counterprefix{.}% + \else + \def\@glo@counterprefix{.#1.}% + \fi + \def\glsentrycounter{#2}% +} +\newcommand*{\setglossarystyle}[1]{% + \ifcsundef{@glsstyle@#1}% + {% + \PackageError{glossaries}{Glossary style `#1' undefined}{}% + }% + {% + \csname @glsstyle@#1\endcsname + }% + \ifx\@glossary@default@style\relax + \protected@edef\@glossary@default@style{#1}% + \fi +} +\newcommand*{\glossarystyle}[1]{% + \ifcsundef{@glsstyle@#1}% + {% + \PackageError{glossaries}{Glossary style `#1' undefined}{}% + }% + {% + \GlossariesWarning + {Deprecated command \string\glossarystyle.^^J + I recommend you switch to \string\setglossarystyle\space unless + you want to maintain backward compatibility}% + \setglossentrycompatibility + \csname @glsstyle@#1\endcsname + \ifcsdef{@glscompstyle@#1}% + {\setglossentrycompatibility\csuse{@glscompstyle@#1}}% + {}% + }% + \ifx\@glossary@default@style\relax + \protected@edef\@glossary@default@style{#1}% + \fi +} +\newcommand{\newglossarystyle}[2]{% + \ifcsundef{@glsstyle@#1}% + {% + \expandafter\def\csname @glsstyle@#1\endcsname{#2}% + }% + {% + \PackageError{glossaries}{Glossary style `#1' is already defined}{}% + }% +} +\newcommand{\renewglossarystyle}[2]{% + \ifcsundef{@glsstyle@#1}% + {% + \PackageError{glossaries}{Glossary style `#1' isn't already defined}{}% + }% + {% + \csdef{@glsstyle@#1}{#2}% + }% +} +\newcommand*{\glsnamefont}[1]{#1} +\ifcsundef{hyperlink}% +{% + \def\glshypernumber#1{#1}% +}% +{% + \def\glshypernumber#1{\@glshypernumber#1\nohyperpage{}\@nil} +} +\def\@glshypernumber#1\nohyperpage#2#3\@nil{% + \ifx\\#1\\% + \else + \@delimR#1\delimR\delimR\\% + \fi + \ifx\\#2\\% + \else + #2% + \fi + \ifx\\#3\\% + \else + \@glshypernumber#3\@nil + \fi +} +\def\@delimR#1\delimR #2\delimR #3\\{% +\ifx\\#2\\% + \@delimN{#1}% +\else + \@gls@numberlink{#1}\delimR\@gls@numberlink{#2}% +\fi} +\def\@delimN#1{\@@delimN#1\delimN \delimN\\} +\def\@@delimN#1\delimN #2\delimN#3\\{% +\ifx\\#3\\% + \@gls@numberlink{#1}% +\else + \@gls@numberlink{#1}\delimN\@gls@numberlink{#2}% +\fi +} +\def\@gls@numberlink#1{% +\begingroup + \toks@={}% + \@gls@removespaces#1 \@nil +\endgroup} +\def\@gls@removespaces#1 #2\@nil{% + \toks@=\expandafter{\the\toks@#1}% + \ifx\\#2\\% + \edef\x{\the\toks@}% + \ifx\x\empty + \else + \hyperlink{\glsentrycounter\@glo@counterprefix\the\toks@}% + {\the\toks@}% + \fi + \else + \@gls@ReturnAfterFi{% + \@gls@removespaces#2\@nil + }% + \fi +} +\long\def\@gls@ReturnAfterFi#1\fi{\fi#1} +\newcommand*{\hyperrm}[1]{\textrm{\glshypernumber{#1}}} +\newcommand*{\hypersf}[1]{\textsf{\glshypernumber{#1}}} +\newcommand*{\hypertt}[1]{\texttt{\glshypernumber{#1}}} +\newcommand*{\hyperbf}[1]{\textbf{\glshypernumber{#1}}} +\newcommand*{\hypermd}[1]{\textmd{\glshypernumber{#1}}} +\newcommand*{\hyperit}[1]{\textit{\glshypernumber{#1}}} +\newcommand*{\hypersl}[1]{\textsl{\glshypernumber{#1}}} +\newcommand*{\hyperup}[1]{\textup{\glshypernumber{#1}}} +\newcommand*{\hypersc}[1]{\textsc{\glshypernumber{#1}}} +\newcommand*{\hyperemph}[1]{\emph{\glshypernumber{#1}}} +\newcommand{\oldacronym}[4][\gls@label]{% + \def\gls@label{#2}% + \newacronym[#4]{#1}{#2}{#3}% + \ifcsundef{xspace}% + {% + \expandafter\edef\csname#1\endcsname{% + \noexpand\@ifstar{\noexpand\Gls{#1}}{\noexpand\gls{#1}}% + }% + }% + {% + \expandafter\edef\csname#1\endcsname{% + \noexpand\@ifstar{\noexpand\Gls{#1}\noexpand\xspace}{% + \noexpand\gls{#1}\noexpand\xspace}% + }% + }% +} + \newcommand{\newacronym}[4][]{} +\newcommand*{\acrpluralsuffix}{\glsacrpluralsuffix} +\newrobustcmd*{\glstextup}[1]{\ifdef\textulc{\textulc{#1}}{\textup{#1}}} +\newcommand*{\glsshortkey}{short} +\newcommand*{\glsshortpluralkey}{shortplural} +\newcommand*{\glslongkey}{long} +\newcommand*{\glslongpluralkey}{longplural} +\newrobustcmd*{\acrfull}{\@gls@hyp@opt\ns@acrfull} +\newcommand*\ns@acrfull[2][]{% + \new@ifnextchar[{\@acrfull{#1}{#2}}% + {\@acrfull{#1}{#2}[]}% +} +\def\@acrfull#1#2[#3]{% + \acrfullfmt{#1}{#2}{#3}% +} +\newcommand*{\acrfullfmt}[3]{% + \acrlinkfullformat{\@acrlong}{\@acrshort}{#1}{#2}{#3}% +} +\newcommand{\acrlinkfullformat}[5]{% + \acrfullformat{#1{#3}{#4}[#5]}{#2{#3}{#4}[]}% +} +\newcommand{\acrfullformat}[2]{#1\glsspace(#2)} +\newrobustcmd{\glsspace}{\space} +\newrobustcmd*{\Acrfull}{\@gls@hyp@opt\ns@Acrfull} +\newcommand*\ns@Acrfull[2][]{% + \new@ifnextchar[{\@Acrfull{#1}{#2}}% + {\@Acrfull{#1}{#2}[]}% +} +\def\@Acrfull#1#2[#3]{% + \Acrfullfmt{#1}{#2}{#3}% +} +\newcommand*{\Acrfullfmt}[3]{% + \acrlinkfullformat{\@Acrlong}{\@acrshort}{#1}{#2}{#3}% +} +\newrobustcmd*{\ACRfull}{\@gls@hyp@opt\ns@ACRfull} +\newcommand*\ns@ACRfull[2][]{% + \new@ifnextchar[{\@ACRfull{#1}{#2}}% + {\@ACRfull{#1}{#2}[]}% +} +\def\@ACRfull#1#2[#3]{% + \ACRfullfmt{#1}{#2}{#3}% +} +\newcommand*{\ACRfullfmt}[3]{% + \acrlinkfullformat{\@ACRlong}{\@ACRshort}{#1}{#2}{#3}% +} +\newrobustcmd*{\acrfullpl}{\@gls@hyp@opt\ns@acrfullpl} +\newcommand*\ns@acrfullpl[2][]{% + \new@ifnextchar[{\@acrfullpl{#1}{#2}}% + {\@acrfullpl{#1}{#2}[]}% +} +\def\@acrfullpl#1#2[#3]{% + \acrfullplfmt{#1}{#2}{#3}% +} +\newcommand*{\acrfullplfmt}[3]{% + \acrlinkfullformat{\@acrlongpl}{\@acrshortpl}{#1}{#2}{#3}% +} +\newrobustcmd*{\Acrfullpl}{\@gls@hyp@opt\ns@Acrfullpl} +\newcommand*\ns@Acrfullpl[2][]{% + \new@ifnextchar[{\@Acrfullpl{#1}{#2}}% + {\@Acrfullpl{#1}{#2}[]}% +} +\def\@Acrfullpl#1#2[#3]{% + \Acrfullplfmt{#1}{#2}{#3}% +} +\newcommand*{\Acrfullplfmt}[3]{% + \acrlinkfullformat{\@Acrlongpl}{\@acrshortpl}{#1}{#2}{#3}% +} +\newrobustcmd*{\ACRfullpl}{\@gls@hyp@opt\ns@ACRfullpl} +\newcommand*\ns@ACRfullpl[2][]{% + \new@ifnextchar[{\@ACRfullpl{#1}{#2}}% + {\@ACRfullpl{#1}{#2}[]}% +} +\def\@ACRfullpl#1#2[#3]{% + \ACRfullplfmt{#1}{#2}{#3}% +} +\newcommand*{\ACRfullplfmt}[3]{% + \acrlinkfullformat{\@ACRlongpl}{\@ACRshortpl}{#1}{#2}{#3}% +} +\newcommand{\acronymfont}[1]{#1} +\newcommand{\firstacronymfont}[1]{\acronymfont{#1}} +\newcommand*{\acrnameformat}[2]{\acronymfont{#1}} +\newtoks\glskeylisttok +\newtoks\glslabeltok +\newtoks\glsshorttok +\newtoks\glslongtok +\newcommand*{\newacronymhook}{} +\newcommand*{\SetGenericNewAcronym}{% + \let\@Gls@entryname\@Gls@acrentryname + \renewcommand{\newacronym}[4][]{% + \ifdefempty{\@glsacronymlists}% + {% + \def\@glo@type{\acronymtype}% + \setkeys{glossentry}{##1}% + \DeclareAcronymList{\@glo@type}% + }% + {}% + \glskeylisttok{##1}% + \glslabeltok{##2}% + \glsshorttok{##3}% + \glslongtok{##4}% + \newacronymhook + \protected@edef\@do@newglossaryentry{% + \noexpand\newglossaryentry{\the\glslabeltok}% + {% + type=\acronymtype,% + name={\expandonce{\acronymentry{##2}}},% + sort={\acronymsort{\the\glsshorttok}{\the\glslongtok}},% + text={\the\glsshorttok},% + short={\the\glsshorttok},% + shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},% + long={\the\glslongtok},% + longplural={\the\glslongtok\noexpand\acrpluralsuffix},% + \GenericAcronymFields,% + \the\glskeylisttok + }% + }% + \@do@newglossaryentry + }% + \renewcommand*{\acrfullfmt}[3]{% + \glslink[##1]{##2}{\genacrfullformat{##2}{##3}}}% + \renewcommand*{\Acrfullfmt}[3]{% + \glslink[##1]{##2}{\Genacrfullformat{##2}{##3}}}% + \renewcommand*{\ACRfullfmt}[3]{% + \glslink[##1]{##2}{% + \mfirstucMakeUppercase{\genacrfullformat{##2}{##3}}}}% + \renewcommand*{\acrfullplfmt}[3]{% + \glslink[##1]{##2}{\genplacrfullformat{##2}{##3}}}% + \renewcommand*{\Acrfullplfmt}[3]{% + \glslink[##1]{##2}{\Genplacrfullformat{##2}{##3}}}% + \renewcommand*{\ACRfullplfmt}[3]{% + \glslink[##1]{##2}{% + \mfirstucMakeUppercase{\genplacrfullformat{##2}{##3}}}}% + \renewcommand*{\glsentryfull}[1]{\genacrfullformat{##1}{}}% + \renewcommand*{\Glsentryfull}[1]{\Genacrfullformat{##1}{}}% + \renewcommand*{\glsentryfullpl}[1]{\genplacrfullformat{##1}{}}% + \renewcommand*{\Glsentryfullpl}[1]{\Genplacrfullformat{##1}{}}% +} +\newcommand*{\GenericAcronymFields}{description={\the\glslongtok}} +\newcommand*{\acronymentry}[1]{\acronymfont{\glsentryshort{#1}}} +\newcommand*{\acronymsort}[2]{#1} +\newcommand*{\setacronymstyle}[1]{% + \ifcsundef{@glsacr@dispstyle@#1} + {% + \PackageError{glossaries}{Undefined acronym style `#1'}{}% + }% + {% + \ifdefempty{\@glsacronymlists}% + {% + \DeclareAcronymList{\acronymtype}% + }% + {}% + \SetGenericNewAcronym + \GlsUseAcrStyleDefs{#1}% + \@for\@gls@type:=\@glsacronymlists\do{% + \defglsentryfmt[\@gls@type]{\GlsUseAcrEntryDispStyle{#1}}% + }% + }% +} +\newcommand*{\newacronymstyle}[3]{% + \ifcsdef{@glsacr@dispstyle@#1}% + {% + \PackageError{glossaries}{Acronym style `#1' already exists}{}% + }% + {% + \csdef{@glsacr@dispstyle@#1}{#2}% + \csdef{@glsacr@styledefs@#1}{#3}% + }% +} +\newcommand*{\renewacronymstyle}[3]{% + \ifcsdef{@glsacr@dispstyle@#1}% + {% + \csdef{@glsacr@dispstyle@#1}{#2}% + \csdef{@glsacr@styledefs@#1}{#3}% + }% + {% + \PackageError{glossaries}{Acronym style `#1' doesn't exist}{}% + }% +} +\newcommand*{\GlsUseAcrEntryDispStyle}[1]{\csuse{@glsacr@dispstyle@#1}} +\newcommand*{\GlsUseAcrStyleDefs}[1]{\csuse{@glsacr@styledefs@#1}} +\newacronymstyle{long-short}% +{% + \ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}% +}% +{% + \renewcommand*{\GenericAcronymFields}{description={\the\glslongtok}}% + \renewcommand*{\genacrfullformat}[2]{% + \glsentrylong{##1}##2\space + (\protect\firstacronymfont{\glsentryshort{##1}})% + }% + \renewcommand*{\Genacrfullformat}[2]{% + \Glsentrylong{##1}##2\space + (\protect\firstacronymfont{\glsentryshort{##1}})% + }% + \renewcommand*{\genplacrfullformat}[2]{% + \glsentrylongpl{##1}##2\space + (\protect\firstacronymfont{\glsentryshortpl{##1}})% + }% + \renewcommand*{\Genplacrfullformat}[2]{% + \Glsentrylongpl{##1}##2\space + (\protect\firstacronymfont{\glsentryshortpl{##1}})% + }% + \renewcommand*{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}}% + \renewcommand*{\acronymsort}[2]{##1}% + \renewcommand*{\acronymfont}[1]{##1}% + \renewcommand*{\firstacronymfont}[1]{\acronymfont{##1}}% + \renewcommand*{\acrpluralsuffix}{\glspluralsuffix}% +} +\newacronymstyle{long-sp-short}% +{% + \ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}% +}% +{% + \renewcommand*{\GenericAcronymFields}{description={\the\glslongtok}}% + \renewcommand*{\genacrfullformat}[2]{% + \glsentrylong{##1}##2\glsacspace{##1}% + (\protect\firstacronymfont{\glsentryshort{##1}})% + }% + \renewcommand*{\Genacrfullformat}[2]{% + \Glsentrylong{##1}##2\glsacspace{##1}% + (\protect\firstacronymfont{\glsentryshort{##1}})% + }% + \renewcommand*{\genplacrfullformat}[2]{% + \glsentrylongpl{##1}##2\glsacspace{##1}% + (\protect\firstacronymfont{\glsentryshortpl{##1}})% + }% + \renewcommand*{\Genplacrfullformat}[2]{% + \Glsentrylongpl{##1}##2\glsacspace{##1}% + (\protect\firstacronymfont{\glsentryshortpl{##1}})% + }% + \renewcommand*{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}}% + \renewcommand*{\acronymsort}[2]{##1}% + \renewcommand*{\acronymfont}[1]{##1}% + \renewcommand*{\firstacronymfont}[1]{\acronymfont{##1}}% + \renewcommand*{\acrpluralsuffix}{\glspluralsuffix}% +} +\newcommand*{\glsacspace}[1]{% + \settowidth{\dimen@}{(\firstacronymfont{\glsentryshort{#1}})}% + \ifdim\dimen@<3em~\else\space\fi +} +\newacronymstyle{short-long}% +{% + \ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}% +}% +{% + \renewcommand*{\GenericAcronymFields}{description={\the\glslongtok}}% + \renewcommand*{\genacrfullformat}[2]{% + \protect\firstacronymfont{\glsentryshort{##1}}##2\space + (\glsentrylong{##1})% + }% + \renewcommand*{\Genacrfullformat}[2]{% + \protect\firstacronymfont{\Glsentryshort{##1}}##2\space + (\glsentrylong{##1})% + }% + \renewcommand*{\genplacrfullformat}[2]{% + \protect\firstacronymfont{\glsentryshortpl{##1}}##2\space + (\glsentrylongpl{##1})% + }% + \renewcommand*{\Genplacrfullformat}[2]{% + \protect\firstacronymfont{\Glsentryshortpl{##1}}##2\space + (\glsentrylongpl{##1})% + }% + \renewcommand*{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}}% + \renewcommand*{\acronymsort}[2]{##1}% + \renewcommand*{\acronymfont}[1]{##1}% + \renewcommand*{\firstacronymfont}[1]{\acronymfont{##1}}% + \renewcommand*{\acrpluralsuffix}{\glspluralsuffix}% +} +\newacronymstyle{long-sc-short}% +{% + \GlsUseAcrEntryDispStyle{long-short}% +}% +{% + \GlsUseAcrStyleDefs{long-short}% + \renewcommand{\acronymfont}[1]{\textsc{##1}}% + \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}% +} +\newacronymstyle{long-sm-short}% +{% + \GlsUseAcrEntryDispStyle{long-short}% +}% +{% + \GlsUseAcrStyleDefs{long-short}% + \renewcommand{\acronymfont}[1]{\textsmaller{##1}}% + \renewcommand*{\acrpluralsuffix}{\glsacrpluralsuffix}% +} +\newacronymstyle{sc-short-long}% +{% + \GlsUseAcrEntryDispStyle{short-long}% +}% +{% + \GlsUseAcrStyleDefs{short-long}% + \renewcommand{\acronymfont}[1]{\textsc{##1}}% + \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}% +} +\newacronymstyle{sm-short-long}% +{% + \GlsUseAcrEntryDispStyle{short-long}% +}% +{% + \GlsUseAcrStyleDefs{short-long}% + \renewcommand{\acronymfont}[1]{\textsmaller{##1}}% + \renewcommand*{\acrpluralsuffix}{\glsacrpluralsuffix}% +} +\newacronymstyle{long-short-desc}% +{% + \GlsUseAcrEntryDispStyle{long-short}% +}% +{% + \GlsUseAcrStyleDefs{long-short}% + \renewcommand*{\GenericAcronymFields}{}% + \renewcommand*{\acronymsort}[2]{##2}% + \renewcommand*{\acronymentry}[1]{% + \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}% +} +\newacronymstyle{long-sp-short-desc}% +{% + \GlsUseAcrEntryDispStyle{long-sp-short}% +}% +{% + \GlsUseAcrStyleDefs{long-sp-short}% + \renewcommand*{\GenericAcronymFields}{}% + \renewcommand*{\acronymsort}[2]{##2}% + \renewcommand*{\acronymentry}[1]{% + \glsentrylong{##1}\glsacspace{##1}(\acronymfont{\glsentryshort{##1}})}% +} +\newacronymstyle{long-sc-short-desc}% +{% + \GlsUseAcrEntryDispStyle{long-sc-short}% +}% +{% + \GlsUseAcrStyleDefs{long-sc-short}% + \renewcommand*{\GenericAcronymFields}{}% + \renewcommand*{\acronymsort}[2]{##2}% + \renewcommand*{\acronymentry}[1]{% + \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}% +} +\newacronymstyle{long-sm-short-desc}% +{% + \GlsUseAcrEntryDispStyle{long-sm-short}% +}% +{% + \GlsUseAcrStyleDefs{long-sm-short}% + \renewcommand*{\GenericAcronymFields}{}% + \renewcommand*{\acronymsort}[2]{##2}% + \renewcommand*{\acronymentry}[1]{% + \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}% +} +\newacronymstyle{short-long-desc}% +{% + \GlsUseAcrEntryDispStyle{short-long}% +}% +{% + \GlsUseAcrStyleDefs{short-long}% + \renewcommand*{\GenericAcronymFields}{}% + \renewcommand*{\acronymsort}[2]{##2}% + \renewcommand*{\acronymentry}[1]{% + \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}% +} +\newacronymstyle{sc-short-long-desc}% +{% + \GlsUseAcrEntryDispStyle{sc-short-long}% +}% +{% + \GlsUseAcrStyleDefs{sc-short-long}% + \renewcommand*{\GenericAcronymFields}{}% + \renewcommand*{\acronymsort}[2]{##2}% + \renewcommand*{\acronymentry}[1]{% + \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}% +} +\newacronymstyle{sm-short-long-desc}% +{% + \GlsUseAcrEntryDispStyle{sm-short-long}% +}% +{% + \GlsUseAcrStyleDefs{sm-short-long}% + \renewcommand*{\GenericAcronymFields}{}% + \renewcommand*{\acronymsort}[2]{##2}% + \renewcommand*{\acronymentry}[1]{% + \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}% +} +\newacronymstyle{dua}% +{% + \ifdefempty\glscustomtext + {% + \ifglshaslong{\glslabel}% + {% + \glsifplural + {% + \glscapscase + {% + \glsentrylongpl{\glslabel}\glsinsert + }% + {% + \Glsentrylongpl{\glslabel}\glsinsert + }% + {% + \mfirstucMakeUppercase + {\glsentrylongpl{\glslabel}\glsinsert}% + }% + }% + {% + \glscapscase + {% + \glsentrylong{\glslabel}\glsinsert + }% + {% + \Glsentrylong{\glslabel}\glsinsert + }% + {% + \mfirstucMakeUppercase + {\glsentrylong{\glslabel}\glsinsert}% + }% + }% + }% + {% + \glsgenentryfmt + }% + }% + {\glscustomtext\glsinsert}% +}% +{% + \renewcommand*{\GenericAcronymFields}{description={\the\glslongtok}}% + \renewcommand*{\acrfullfmt}[3]{% + \glslink[##1]{##2}{\glsentrylong{##2}##3\space + (\acronymfont{\glsentryshort{##2}})}}% + \renewcommand*{\Acrfullfmt}[3]{% + \glslink[##1]{##2}{\Glsentrylong{##2}##3\space + (\acronymfont{\glsentryshort{##2}})}}% + \renewcommand*{\ACRfullfmt}[3]{% + \glslink[##1]{##2}{% + \mfirstucMakeUppercase{\glsentrylong{##2}##3\space + (\acronymfont{\glsentryshort{##2}})}}}% + \renewcommand*{\acrfullplfmt}[3]{% + \glslink[##1]{##2}{\glsentrylongpl{##2}##3\space + (\acronymfont{\glsentryshortpl{##2}})}}% + \renewcommand*{\Acrfullplfmt}[3]{% + \glslink[##1]{##2}{\Glsentrylongpl{##2}##3\space + (\acronymfont{\glsentryshortpl{##2}})}}% + \renewcommand*{\ACRfullplfmt}[3]{% + \glslink[##1]{##2}{% + \mfirstucMakeUppercase{\glsentrylongpl{##2}##3\space + (\acronymfont{\glsentryshortpl{##2}})}}}% + \renewcommand*{\glsentryfull}[1]{% + \glsentrylong{##1}\space(\acronymfont{\glsentryshort{##1}})% + }% + \renewcommand*{\Glsentryfull}[1]{% + \Glsentrylong{##1}\space(\acronymfont{\glsentryshort{##1}})% + }% + \renewcommand*{\glsentryfullpl}[1]{% + \glsentrylongpl{##1}\space(\acronymfont{\glsentryshortpl{##1}})% + }% + \renewcommand*{\Glsentryfullpl}[1]{% + \Glsentrylongpl{##1}\space(\acronymfont{\glsentryshortpl{##1}})% + }% + \renewcommand*{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}}% + \renewcommand*{\acronymsort}[2]{##1}% + \renewcommand*{\acronymfont}[1]{##1}% + \renewcommand*{\acrpluralsuffix}{\glsacrpluralsuffix}% +} +\newacronymstyle{dua-desc}% +{% + \GlsUseAcrEntryDispStyle{dua}% +}% +{% + \GlsUseAcrStyleDefs{dua}% + \renewcommand*{\GenericAcronymFields}{}% + \renewcommand*{\acronymentry}[1]{\acronymfont{\glsentrylong{##1}}}% + \renewcommand*{\acronymsort}[2]{##2}% +}% +\newacronymstyle{footnote}% +{% + \ifglshaslong{\glslabel}{\glsgenacfmt}{\glsgenentryfmt}% +}% +{% + \renewcommand*{\GenericAcronymFields}{description={\the\glslongtok}}% + \glshyperfirstfalse + \renewcommand*{\genacrfullformat}[2]{% + \protect\firstacronymfont{\glsentryshort{##1}}##2% + \protect\footnote{\glsentrylong{##1}}% + }% + \renewcommand*{\Genacrfullformat}[2]{% + \firstacronymfont{\Glsentryshort{##1}}##2% + \protect\footnote{\glsentrylong{##1}}% + }% + \renewcommand*{\genplacrfullformat}[2]{% + \protect\firstacronymfont{\glsentryshortpl{##1}}##2% + \protect\footnote{\glsentrylongpl{##1}}% + }% + \renewcommand*{\Genplacrfullformat}[2]{% + \protect\firstacronymfont{\Glsentryshortpl{##1}}##2% + \protect\footnote{\glsentrylongpl{##1}}% + }% + \renewcommand*{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}}% + \renewcommand*{\acronymsort}[2]{##1}% + \renewcommand*{\acronymfont}[1]{##1}% + \renewcommand*{\acrpluralsuffix}{\glsacrpluralsuffix}% + \renewcommand*{\acrfullfmt}[3]{% + \glslink[##1]{##2}{\acronymfont{\glsentryshort{##2}}##3\space + (\glsentrylong{##2})}}% + \renewcommand*{\Acrfullfmt}[3]{% + \glslink[##1]{##2}{\acronymfont{\Glsentryshort{##2}}##3\space + (\glsentrylong{##2})}}% + \renewcommand*{\ACRfullfmt}[3]{% + \glslink[##1]{##2}{% + \mfirstucMakeUppercase{\acronymfont{\glsentryshort{##2}}##3\space + (\glsentrylong{##2})}}}% + \renewcommand*{\acrfullplfmt}[3]{% + \glslink[##1]{##2}{\acronymfont{\glsentryshortpl{##2}}##3\space + (\glsentrylongpl{##2})}}% + \renewcommand*{\Acrfullplfmt}[3]{% + \glslink[##1]{##2}{\acronymfont{\Glsentryshortpl{##2}}##3\space + (\glsentrylongpl{##2})}}% + \renewcommand*{\ACRfullplfmt}[3]{% + \glslink[##1]{##2}{% + \mfirstucMakeUppercase{\acronymfont{\glsentryshortpl{##2}}##3\space + (\glsentrylongpl{##2})}}}% + \renewcommand*{\glsentryfull}[1]{% + \acronymfont{\glsentryshort{##1}}\space(\glsentrylong{##1})}% + \renewcommand*{\Glsentryfull}[1]{% + \acronymfont{\Glsentryshort{##1}}\space(\glsentrylong{##1})}% + \renewcommand*{\glsentryfullpl}[1]{% + \acronymfont{\glsentryshortpl{##1}}\space(\glsentrylongpl{##1})}% + \renewcommand*{\Glsentryfullpl}[1]{% + \acronymfont{\Glsentryshortpl{##1}}\space(\glsentrylongpl{##1})}% +} +\newacronymstyle{footnote-sc}% +{% + \GlsUseAcrEntryDispStyle{footnote}% +}% +{% + \GlsUseAcrStyleDefs{footnote}% + \renewcommand{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}} + \renewcommand{\acronymfont}[1]{\textsc{##1}}% + \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}% +}% +\newacronymstyle{footnote-sm}% +{% + \GlsUseAcrEntryDispStyle{footnote}% +}% +{% + \GlsUseAcrStyleDefs{footnote}% + \renewcommand{\acronymentry}[1]{\acronymfont{\glsentryshort{##1}}} + \renewcommand{\acronymfont}[1]{\textsmaller{##1}}% + \renewcommand*{\acrpluralsuffix}{\glsacrpluralsuffix}% +}% +\newacronymstyle{footnote-desc}% +{% + \GlsUseAcrEntryDispStyle{footnote}% +}% +{% + \GlsUseAcrStyleDefs{footnote}% + \renewcommand*{\GenericAcronymFields}{}% + \renewcommand*{\acronymsort}[2]{##2}% + \renewcommand*{\acronymentry}[1]{% + \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}% +} +\newacronymstyle{footnote-sc-desc}% +{% + \GlsUseAcrEntryDispStyle{footnote-sc}% +}% +{% + \GlsUseAcrStyleDefs{footnote-sc}% + \renewcommand*{\GenericAcronymFields}{}% + \renewcommand*{\acronymsort}[2]{##2}% + \renewcommand*{\acronymentry}[1]{% + \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}% +} +\newacronymstyle{footnote-sm-desc}% +{% + \GlsUseAcrEntryDispStyle{footnote-sm}% +}% +{% + \GlsUseAcrStyleDefs{footnote-sm}% + \renewcommand*{\GenericAcronymFields}{}% + \renewcommand*{\acronymsort}[2]{##2}% + \renewcommand*{\acronymentry}[1]{% + \glsentrylong{##1}\space (\acronymfont{\glsentryshort{##1}})}% +} +\newcommand*{\DefineAcronymSynonyms}{% + \let\acs\acrshort + \let\Acs\Acrshort + \let\acsp\acrshortpl + \let\Acsp\Acrshortpl + \let\acl\acrlong + \let\aclp\acrlongpl + \let\Acl\Acrlong + \let\Aclp\Acrlongpl + \let\acf\acrfull + \let\acfp\acrfullpl + \let\Acf\Acrfull + \let\Acfp\Acrfullpl + \let\ac\gls + \let\Ac\Gls + \let\acp\glspl + \let\Acp\Glspl +} +\ifglsacrshortcuts + \DefineAcronymSynonyms +\fi +\newcommand*{\SetDefaultAcronymDisplayStyle}[1]{% + \defglsentryfmt[#1]{\glsgenentryfmt}% +} +\newcommand*{\DefaultNewAcronymDef}{% + \edef\@do@newglossaryentry{% + \noexpand\newglossaryentry{\the\glslabeltok}% + {% + type=\acronymtype,% + name={\the\glsshorttok},% + sort={\the\glsshorttok},% + text={\the\glsshorttok},% + first={\acrfullformat{\the\glslongtok}{\the\glsshorttok}},% + plural={\noexpand\expandonce\noexpand\@glo@shortpl},% + firstplural={\acrfullformat{\noexpand\expandonce\noexpand\@glo@longpl}% + {\noexpand\expandonce\noexpand\@glo@shortpl}},% + short={\the\glsshorttok},% + shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},% + long={\the\glslongtok},% + longplural={\the\glslongtok\noexpand\acrpluralsuffix},% + description={\the\glslongtok},% + descriptionplural={\noexpand\expandonce\noexpand\@glo@longpl},% + \the\glskeylisttok + }% + }% + \let\@org@gls@assign@firstpl\gls@assign@firstpl + \let\@org@gls@assign@plural\gls@assign@plural + \let\@org@gls@assign@descplural\gls@assign@descplural + \def\gls@assign@firstpl##1##2{% + \@@gls@expand@field{##1}{firstpl}{##2}% + }% + \def\gls@assign@plural##1##2{% + \@@gls@expand@field{##1}{plural}{##2}% + }% + \def\gls@assign@descplural##1##2{% + \@@gls@expand@field{##1}{descplural}{##2}% + }% + \@do@newglossaryentry + \let\gls@assign@firstpl\@org@gls@assign@firstpl + \let\gls@assign@plural\@org@gls@assign@plural + \let\gls@assign@symbolplural\@org@gls@assign@symbolplural +} +\newcommand*{\SetDefaultAcronymStyle}{% + \@for\@gls@type:=\@glsacronymlists\do{% + \SetDefaultAcronymDisplayStyle{\@gls@type}% + }% + \renewcommand{\newacronym}[4][]{% + \ifx\@glsacronymlists\@empty + \def\@glo@type{\acronymtype}% + \setkeys{glossentry}{##1}% + \DeclareAcronymList{\@glo@type}% + \SetDefaultAcronymDisplayStyle{\@glo@type}% + \fi + \glskeylisttok{##1}% + \glslabeltok{##2}% + \glsshorttok{##3}% + \glslongtok{##4}% + \newacronymhook + \DefaultNewAcronymDef + }% + \renewcommand*{\acrpluralsuffix}{\glsacrpluralsuffix}% +} +\newcommand*{\acrfootnote}[3]{\acrlinkfootnote{#1}{#2}{#3}} +\newcommand*{\acrlinkfootnote}[3]{% + \footnote{\glslink[#1]{#2}{#3}}% +} +\newcommand*{\acrnolinkfootnote}[3]{% + \footnote{#3}% +} +\newcommand*{\SetDescriptionFootnoteAcronymDisplayStyle}[1]{% + \defglsentryfmt[#1]{% + \ifdefempty\glscustomtext + {% + \ifglsused{\glslabel}% + {% + \acronymfont{\glsgenentryfmt}% + }% + {% + \firstacronymfont{\glsgenentryfmt}% + \ifglshassymbol{\glslabel}% + {% + \expandafter\protect\expandafter\acrfootnote\expandafter + {\@gls@link@opts}{\@gls@link@label}% + {% + \glsifplural + {\glsentrysymbolplural{\glslabel}}% + {\glsentrysymbol{\glslabel}}% + }% + }% + }% + }% + {\glscustomtext\glsinsert}% + }% +} +\newcommand*{\DescriptionFootnoteNewAcronymDef}{% + \edef\@do@newglossaryentry{% + \noexpand\newglossaryentry{\the\glslabeltok}% + {% + type=\acronymtype,% + name={\noexpand\acronymfont{\the\glsshorttok}},% + sort={\the\glsshorttok},% + first={\the\glsshorttok},% + firstplural={\noexpand\expandonce\noexpand\@glo@shortpl},% + text={\the\glsshorttok},% + plural={\noexpand\expandonce\noexpand\@glo@shortpl},% + short={\the\glsshorttok},% + shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},% + long={\the\glslongtok},% + longplural={\the\glslongtok\noexpand\acrpluralsuffix},% + symbol={\the\glslongtok},% + symbolplural={\noexpand\expandonce\noexpand\@glo@longpl},% + \the\glskeylisttok + }% + }% + \let\@org@gls@assign@firstpl\gls@assign@firstpl + \let\@org@gls@assign@plural\gls@assign@plural + \let\@org@gls@assign@symbolplural\gls@assign@symbolplural + \def\gls@assign@firstpl##1##2{% + \@@gls@expand@field{##1}{firstpl}{##2}% + }% + \def\gls@assign@plural##1##2{% + \@@gls@expand@field{##1}{plural}{##2}% + }% + \def\gls@assign@symbolplural##1##2{% + \@@gls@expand@field{##1}{symbolplural}{##2}% + }% + \@do@newglossaryentry + \let\gls@assign@plural\@org@gls@assign@plural + \let\gls@assign@firstpl\@org@gls@assign@firstpl + \let\gls@assign@symbolplural\@org@gls@assign@symbolplural +} +\newcommand*{\SetDescriptionFootnoteAcronymStyle}{% + \renewcommand{\newacronym}[4][]{% + \ifx\@glsacronymlists\@empty + \def\@glo@type{\acronymtype}% + \setkeys{glossentry}{##1}% + \DeclareAcronymList{\@glo@type}% + \SetDescriptionFootnoteAcronymDisplayStyle{\@glo@type}% + \fi + \glskeylisttok{##1}% + \glslabeltok{##2}% + \glsshorttok{##3}% + \glslongtok{##4}% + \newacronymhook + \DescriptionFootnoteNewAcronymDef + }% + \@for\@gls@type:=\@glsacronymlists\do{% + \SetDescriptionFootnoteAcronymDisplayStyle{\@gls@type}% + }% + \ifglsacrsmallcaps + \renewcommand*{\acronymfont}[1]{\textsc{##1}}% + \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}% + \else + \ifglsacrsmaller + \renewcommand*{\acronymfont}[1]{\textsmaller{##1}}% + \fi + \fi + \ifglsacrdua + \PackageError{glossaries}{Option clash: `footnote' and `dua' + can't both be set}{}% + \fi +}% +\newcommand*{\SetDescriptionDUAAcronymDisplayStyle}[1]{% + \defglsentryfmt[#1]{\glsgenentryfmt}% +} +\newcommand*{\DescriptionDUANewAcronymDef}{% + \edef\@do@newglossaryentry{% + \noexpand\newglossaryentry{\the\glslabeltok}% + {% + type=\acronymtype,% + name={\the\glslongtok},% + sort={\the\glslongtok}, + text={\the\glslongtok},% + first={\the\glslongtok},% + plural={\noexpand\expandonce\noexpand\@glo@longpl},% + firstplural={\noexpand\expandonce\noexpand\@glo@longpl},% + short={\the\glsshorttok},% + shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},% + long={\the\glslongtok},% + longplural={\the\glslongtok\noexpand\acrpluralsuffix},% + symbol={\the\glsshorttok},% + symbolplural={\noexpand\expandonce\noexpand\@glo@shortpl},% + \the\glskeylisttok + }% + }% + \let\@org@gls@assign@firstpl\gls@assign@firstpl + \let\@org@gls@assign@plural\gls@assign@plural + \let\@org@gls@assign@symbolplural\gls@assign@symbolplural + \def\gls@assign@firstpl##1##2{% + \@@gls@expand@field{##1}{firstpl}{##2}% + }% + \def\gls@assign@plural##1##2{% + \@@gls@expand@field{##1}{plural}{##2}% + }% + \def\gls@assign@symbolplural##1##2{% + \@@gls@expand@field{##1}{symbolplural}{##2}% + }% + \@do@newglossaryentry + \let\gls@assign@firstpl\@org@gls@assign@firstpl + \let\gls@assign@plural\@org@gls@assign@plural + \let\gls@assign@symbolplural\@org@gls@assign@symbolplural +} +\newcommand*{\SetDescriptionDUAAcronymStyle}{% + \ifglsacrsmallcaps + \PackageError{glossaries}{Option clash: `smallcaps' and `dua' + can't both be set}{}% + \else + \ifglsacrsmaller + \PackageError{glossaries}{Option clash: `smaller' and `dua' + can't both be set}{}% + \fi + \fi + \renewcommand{\newacronym}[4][]{% + \ifx\@glsacronymlists\@empty + \def\@glo@type{\acronymtype}% + \setkeys{glossentry}{##1}% + \DeclareAcronymList{\@glo@type}% + \SetDescriptionDUAAcronymDisplayStyle{\@glo@type}% + \fi + \glskeylisttok{##1}% + \glslabeltok{##2}% + \glsshorttok{##3}% + \glslongtok{##4}% + \newacronymhook + \DescriptionDUANewAcronymDef + }% + \@for\@gls@type:=\@glsacronymlists\do{% + \SetDescriptionDUAAcronymDisplayStyle{\@gls@type}% + }% +}% +\newcommand*{\SetDescriptionAcronymDisplayStyle}[1]{% + \defglsentryfmt[#1]{% + \ifdefempty\glscustomtext + {% + \ifglsused{\glslabel}% + {% + \let\gls@org@insert\glsinsert + \let\glsinsert\@empty + \acronymfont{\glsgenentryfmt}\gls@org@insert + }% + {% + \glsgenentryfmt + \ifglshassymbol{\glslabel}% + {% + \glsifplural + {% + \def\@glo@symbol{\glsentrysymbolplural{\glslabel}}% + }% + {% + \def\@glo@symbol{\glsentrysymbol{\glslabel}}% + }% + \space(\protect\firstacronymfont + {\glscapscase + {\@glo@symbol} + {\@glo@symbol} + {\mfirstucMakeUppercase{\@glo@symbol}}})% + }% + {}% + }% + }% + {\glscustomtext\glsinsert}% + }% +} +\newcommand*{\DescriptionNewAcronymDef}{% + \edef\@do@newglossaryentry{% + \noexpand\newglossaryentry{\the\glslabeltok}% + {% + type=\acronymtype,% + name={\noexpand + \acrnameformat{\the\glsshorttok}{\the\glslongtok}},% + sort={\the\glsshorttok},% + first={\the\glslongtok},% + firstplural={\noexpand\expandonce\noexpand\@glo@longpl},% + text={\the\glsshorttok},% + plural={\noexpand\expandonce\noexpand\@glo@shortpl},% + short={\the\glsshorttok},% + shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},% + long={\the\glslongtok},% + longplural={\the\glslongtok\noexpand\acrpluralsuffix},% + symbol={\noexpand\@glo@text},% + symbolplural={\noexpand\expandonce\noexpand\@glo@shortpl},% + \the\glskeylisttok}% + }% + \let\@org@gls@assign@firstpl\gls@assign@firstpl + \let\@org@gls@assign@plural\gls@assign@plural + \let\@org@gls@assign@symbolplural\gls@assign@symbolplural + \def\gls@assign@firstpl##1##2{% + \@@gls@expand@field{##1}{firstpl}{##2}% + }% + \def\gls@assign@plural##1##2{% + \@@gls@expand@field{##1}{plural}{##2}% + }% + \def\gls@assign@symbolplural##1##2{% + \@@gls@expand@field{##1}{symbolplural}{##2}% + }% + \@do@newglossaryentry + \let\gls@assign@firstpl\@org@gls@assign@firstpl + \let\gls@assign@plural\@org@gls@assign@plural + \let\gls@assign@symbolplural\@org@gls@assign@symbolplural +} +\newcommand*{\SetDescriptionAcronymStyle}{% + \renewcommand{\newacronym}[4][]{% + \ifx\@glsacronymlists\@empty + \def\@glo@type{\acronymtype}% + \setkeys{glossentry}{##1}% + \DeclareAcronymList{\@glo@type}% + \SetDescriptionAcronymDisplayStyle{\@glo@type}% + \fi + \glskeylisttok{##1}% + \glslabeltok{##2}% + \glsshorttok{##3}% + \glslongtok{##4}% + \newacronymhook + \DescriptionNewAcronymDef + }% + \@for\@gls@type:=\@glsacronymlists\do{% + \SetDescriptionAcronymDisplayStyle{\@gls@type}% + }% + \ifglsacrsmallcaps + \renewcommand{\acronymfont}[1]{\textsc{##1}} + \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}% + \else + \ifglsacrsmaller + \renewcommand*{\acronymfont}[1]{\textsmaller{##1}}% + \fi + \fi +}% +\newcommand*{\SetFootnoteAcronymDisplayStyle}[1]{% + \defglsentryfmt[#1]{% + \ifdefempty\glscustomtext + {% + \let\gls@org@insert\glsinsert + \let\glsinsert\@empty + \ifglsused{\glslabel}% + {% + \acronymfont{\glsgenentryfmt}\gls@org@insert + }% + {% + \firstacronymfont{\glsgenentryfmt}\gls@org@insert + \ifglshaslong{\glslabel}% + {% + \expandafter\protect\expandafter\acrfootnote\expandafter + {\@gls@link@opts}{\@gls@link@label}% + {% + \glsifplural + {\glsentrylongpl{\glslabel}}% + {\glsentrylong{\glslabel}}% + }% + }% + {}% + }% + }% + {\glscustomtext\glsinsert}% + }% +} +\newcommand*{\FootnoteNewAcronymDef}{% + \edef\@do@newglossaryentry{% + \noexpand\newglossaryentry{\the\glslabeltok}% + {% + type=\acronymtype,% + name={\noexpand\acronymfont{\the\glsshorttok}},% + sort={\the\glsshorttok},% + text={\the\glsshorttok},% + plural={\noexpand\expandonce\noexpand\@glo@shortpl},% + first={\the\glsshorttok},% + firstplural={\noexpand\expandonce\noexpand\@glo@shortpl},% + short={\the\glsshorttok},% + shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},% + long={\the\glslongtok},% + longplural={\the\glslongtok\noexpand\acrpluralsuffix},% + description={\the\glslongtok},% + descriptionplural={\noexpand\expandonce\noexpand\@glo@longpl},% + \the\glskeylisttok + }% + }% + \let\@org@gls@assign@plural\gls@assign@plural + \let\@org@gls@assign@firstpl\gls@assign@firstpl + \let\@org@gls@assign@descplural\gls@assign@descplural + \def\gls@assign@firstpl##1##2{% + \@@gls@expand@field{##1}{firstpl}{##2}% + }% + \def\gls@assign@plural##1##2{% + \@@gls@expand@field{##1}{plural}{##2}% + }% + \def\gls@assign@descplural##1##2{% + \@@gls@expand@field{##1}{descplural}{##2}% + }% + \@do@newglossaryentry + \let\gls@assign@plural\@org@gls@assign@plural + \let\gls@assign@firstpl\@org@gls@assign@firstpl + \let\gls@assign@descplural\@org@gls@assign@descplural +} +\newcommand*{\SetFootnoteAcronymStyle}{% + \renewcommand{\newacronym}[4][]{% + \ifx\@glsacronymlists\@empty + \def\@glo@type{\acronymtype}% + \setkeys{glossentry}{##1}% + \DeclareAcronymList{\@glo@type}% + \SetFootnoteAcronymDisplayStyle{\@glo@type}% + \fi + \glskeylisttok{##1}% + \glslabeltok{##2}% + \glsshorttok{##3}% + \glslongtok{##4}% + \newacronymhook + \FootnoteNewAcronymDef + }% + \@for\@gls@type:=\@glsacronymlists\do{% + \SetFootnoteAcronymDisplayStyle{\@gls@type}% + }% + \ifglsacrsmallcaps + \renewcommand*{\acronymfont}[1]{\textsc{##1}}% + \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}% + \else + \ifglsacrsmaller + \renewcommand*{\acronymfont}[1]{\textsmaller{##1}}% + \fi + \fi + \ifglsacrdua + \PackageError{glossaries}{Option clash: `footnote' and `dua' + can't both be set}{}% + \fi +}% +\DeclareRobustCommand*{\glsdoparenifnotempty}[2]{% + \protected@edef\gls@tmp{#1}% + \ifdefempty\gls@tmp + {}% + {% + \ifx\gls@tmp\@gls@default@value + \else + \space (#2{#1})% + \fi + }% +} +\newcommand*{\SetSmallAcronymDisplayStyle}[1]{% + \defglsentryfmt[#1]{% + \ifdefempty\glscustomtext + {% + \let\gls@org@insert\glsinsert + \let\glsinsert\@empty + \ifglsused{\glslabel}% + {% + \acronymfont{\glsgenentryfmt}\gls@org@insert + }% + {% + \glsgenentryfmt + \ifglshassymbol{\glslabel}% + {% + \glsifplural + {% + \def\@glo@symbol{\glsentrysymbolplural{\glslabel}}% + }% + {% + \def\@glo@symbol{\glsentrysymbol{\glslabel}}% + }% + \space + (\glscapscase + {\firstacronymfont{\@glo@symbol}}% + {\firstacronymfont{\@glo@symbol}}% + {\firstacronymfont{\mfirstucMakeUppercase{\@glo@symbol}}})% + }% + {}% + }% + }% + {\glscustomtext\glsinsert}% + }% +} +\newcommand*{\SmallNewAcronymDef}{% + \edef\@do@newglossaryentry{% + \noexpand\newglossaryentry{\the\glslabeltok}% + {% + type=\acronymtype,% + name={\noexpand\acronymfont{\the\glsshorttok}},% + sort={\the\glsshorttok},% + text={\the\glsshorttok},% + plural={\noexpand\expandonce\noexpand\@glo@shortpl},% + first={\the\glslongtok},% + firstplural={\noexpand\expandonce\noexpand\@glo@longpl},% + short={\the\glsshorttok},% + shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},% + long={\the\glslongtok},% + longplural={\the\glslongtok\noexpand\acrpluralsuffix},% + description={\noexpand\@glo@first},% + descriptionplural={\noexpand\expandonce\noexpand\@glo@longpl},% + symbol={\the\glsshorttok},% + symbolplural={\noexpand\expandonce\noexpand\@glo@shortpl},% + \the\glskeylisttok + }% + }% + \let\@org@gls@assign@firstpl\gls@assign@firstpl + \let\@org@gls@assign@plural\gls@assign@plural + \let\@org@gls@assign@descplural\gls@assign@descplural + \let\@org@gls@assign@symbolplural\gls@assign@symbolplural + \def\gls@assign@firstpl##1##2{% + \@@gls@expand@field{##1}{firstpl}{##2}% + }% + \def\gls@assign@plural##1##2{% + \@@gls@expand@field{##1}{plural}{##2}% + }% + \def\gls@assign@descplural##1##2{% + \@@gls@expand@field{##1}{descplural}{##2}% + }% + \def\gls@assign@symbolplural##1##2{% + \@@gls@expand@field{##1}{symbolplural}{##2}% + }% + \@do@newglossaryentry + \let\gls@assign@firstpl\@org@gls@assign@firstpl + \let\gls@assign@plural\@org@gls@assign@plural + \let\gls@assign@descplural\@org@gls@assign@descplural + \let\gls@assign@symbolplural\@org@gls@assign@symbolplural +} +\newcommand*{\SetSmallAcronymStyle}{% + \renewcommand{\newacronym}[4][]{% + \ifx\@glsacronymlists\@empty + \def\@glo@type{\acronymtype}% + \setkeys{glossentry}{##1}% + \DeclareAcronymList{\@glo@type}% + \SetSmallAcronymDisplayStyle{\@glo@type}% + \fi + \glskeylisttok{##1}% + \glslabeltok{##2}% + \glsshorttok{##3}% + \glslongtok{##4}% + \newacronymhook + \SmallNewAcronymDef + }% + \@for\@gls@type:=\@glsacronymlists\do{% + \SetSmallAcronymDisplayStyle{\@gls@type}% + }% + \ifglsacrsmallcaps + \renewcommand*{\acronymfont}[1]{\textsc{##1}} + \renewcommand*{\acrpluralsuffix}{\glsupacrpluralsuffix}% + \else + \renewcommand*{\acronymfont}[1]{\textsmaller{##1}} + \fi + \ifglsacrdua + \ifglsacrsmallcaps + \PackageError{glossaries}{Option clash: `smallcaps' and `dua' + can't both be set}{}% + \else + \PackageError{glossaries}{Option clash: `smaller' and `dua' + can't both be set}{}% + \fi + \fi +}% +\newcommand*{\SetDUADisplayStyle}[1]{% + \defglsentryfmt[#1]{\glsgenentryfmt}% +} +\newcommand*{\DUANewAcronymDef}{% + \edef\@do@newglossaryentry{% + \noexpand\newglossaryentry{\the\glslabeltok}% + {% + type=\acronymtype,% + name={\the\glsshorttok},% + text={\the\glslongtok},% + first={\the\glslongtok},% + plural={\noexpand\expandonce\noexpand\@glo@longpl},% + firstplural={\noexpand\expandonce\noexpand\@glo@longpl},% + short={\the\glsshorttok},% + shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},% + long={\the\glslongtok},% + longplural={\the\glslongtok\noexpand\acrpluralsuffix},% + description={\the\glslongtok},% + descriptionplural={\noexpand\expandonce\noexpand\@glo@longpl},% + symbol={\the\glsshorttok},% + symbolplural={\noexpand\expandonce\noexpand\@glo@shortpl},% + \the\glskeylisttok + }% + }% + \let\@org@gls@assign@firstpl\gls@assign@firstpl + \let\@org@gls@assign@plural\gls@assign@plural + \let\@org@gls@assign@symbolplural\gls@assign@symbolplural + \let\@org@gls@assign@descplural\gls@assign@descplural + \def\gls@assign@firstpl##1##2{% + \@@gls@expand@field{##1}{firstpl}{##2}% + }% + \def\gls@assign@plural##1##2{% + \@@gls@expand@field{##1}{plural}{##2}% + }% + \def\gls@assign@symbolplural##1##2{% + \@@gls@expand@field{##1}{symbolplural}{##2}% + }% + \def\gls@assign@descplural##1##2{% + \@@gls@expand@field{##1}{descplural}{##2}% + }% + \@do@newglossaryentry + \let\gls@assign@firstpl\@org@gls@assign@firstpl + \let\gls@assign@plural\@org@gls@assign@plural + \let\gls@assign@symbolplural\@org@gls@assign@symbolplural + \let\gls@assign@descplural\@org@gls@assign@descplural +} +\newcommand*{\SetDUAStyle}{% + \renewcommand{\newacronym}[4][]{% + \ifx\@glsacronymlists\@empty + \def\@glo@type{\acronymtype}% + \setkeys{glossentry}{##1}% + \DeclareAcronymList{\@glo@type}% + \SetDUADisplayStyle{\@glo@type}% + \fi + \glskeylisttok{##1}% + \glslabeltok{##2}% + \glsshorttok{##3}% + \glslongtok{##4}% + \newacronymhook + \DUANewAcronymDef + }% + \@for\@gls@type:=\@glsacronymlists\do{% + \SetDUADisplayStyle{\@gls@type}% + }% +} +\newcommand*{\SetAcronymStyle}{% + \SetDefaultAcronymStyle + \ifglsacrdescription + \ifglsacrfootnote + \SetDescriptionFootnoteAcronymStyle + \else + \ifglsacrdua + \SetDescriptionDUAAcronymStyle + \else + \SetDescriptionAcronymStyle + \fi + \fi + \else + \ifglsacrfootnote + \SetFootnoteAcronymStyle + \else + \ifthenelse{\boolean{glsacrsmallcaps}\OR + \boolean{glsacrsmaller}}% + {% + \SetSmallAcronymStyle + }% + {% + \ifglsacrdua + \SetDUAStyle + \fi + }% + \fi + \fi +} +\SetAcronymStyle +\newcommand*{\SetCustomDisplayStyle}[1]{% + \defglsentryfmt[#1]{\glsgenentryfmt}% +} +\newcommand*{\CustomAcronymFields}{% + name={\the\glsshorttok},% + description={\the\glslongtok},% + first={\acrfullformat{\the\glslongtok}{\the\glsshorttok}},% + firstplural={\acrfullformat + {\noexpand\glsentrylongpl{\the\glslabeltok}}% + {\noexpand\glsentryshortpl{\the\glslabeltok}}},% + text={\the\glsshorttok},% + plural={\the\glsshorttok\noexpand\acrpluralsuffix}% +} +\newcommand*{\CustomNewAcronymDef}{% + \protected@edef\@do@newglossaryentry{% + \noexpand\newglossaryentry{\the\glslabeltok}% + {% + type=\acronymtype,% + short={\the\glsshorttok},% + shortplural={\the\glsshorttok\noexpand\acrpluralsuffix},% + long={\the\glslongtok},% + longplural={\the\glslongtok\noexpand\acrpluralsuffix},% + user1={\the\glsshorttok},% + user2={\the\glsshorttok\noexpand\acrpluralsuffix},% + user3={\the\glslongtok},% + user4={\the\glslongtok\noexpand\acrpluralsuffix},% + \CustomAcronymFields,% + \the\glskeylisttok + }% + }% + \@do@newglossaryentry +} +\newcommand*{\SetCustomStyle}{% + \renewcommand{\newacronym}[4][]{% + \ifx\@glsacronymlists\@empty + \def\@glo@type{\acronymtype}% + \setkeys{glossentry}{##1}% + \DeclareAcronymList{\@glo@type}% + \SetCustomDisplayStyle{\@glo@type}% + \fi + \glskeylisttok{##1}% + \glslabeltok{##2}% + \glsshorttok{##3}% + \glslongtok{##4}% + \newacronymhook + \CustomNewAcronymDef + }% + \@for\@gls@type:=\@glsacronymlists\do{% + \SetCustomDisplayStyle{\@gls@type}% + }% +} +\RequirePackage{glossary-hypernav} +\@gls@loadlist +\@gls@loadlong +\@gls@loadsuper +\@gls@loadtree +\ifx\@glossary@default@style\relax +\else + \setglossarystyle{\@glossary@default@style} +\fi +\newcommand*{\showgloparent}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@parent\endcsname +} +\newcommand*{\showglolevel}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@level\endcsname +} +\newcommand*{\showglotext}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@text\endcsname +} +\newcommand*{\showgloplural}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@plural\endcsname +} +\newcommand*{\showglofirst}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@first\endcsname +} +\newcommand*{\showglofirstpl}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@firstpl\endcsname +} +\newcommand*{\showglotype}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@type\endcsname +} +\newcommand*{\showglocounter}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@counter\endcsname +} +\newcommand*{\showglouseri}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@useri\endcsname +} +\newcommand*{\showglouserii}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@userii\endcsname +} +\newcommand*{\showglouseriii}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@useriii\endcsname +} +\newcommand*{\showglouseriv}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@useriv\endcsname +} +\newcommand*{\showglouserv}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@userv\endcsname +} +\newcommand*{\showglouservi}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@uservi\endcsname +} +\newcommand*{\showgloname}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@name\endcsname +} +\newcommand*{\showglodesc}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@desc\endcsname +} +\newcommand*{\showglodescplural}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@descplural\endcsname +} +\newcommand*{\showglosort}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@sort\endcsname +} +\newcommand*{\showglosymbol}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@symbol\endcsname +} +\newcommand*{\showglosymbolplural}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@symbolplural\endcsname +} +\newcommand*{\showgloshort}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@short\endcsname +} +\newcommand*{\showglolong}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@long\endcsname +} +\newcommand*{\showgloindex}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@index\endcsname +} +\newcommand*{\showgloflag}[1]{% + \expandafter\show\csname ifglo@\glsdetoklabel{#1}@flag\endcsname +} +\newcommand*{\showgloloclist}[1]{% + \expandafter\show\csname glo@\glsdetoklabel{#1}@loclist\endcsname +} +\newcommand*{\showglofield}[2]{% + \csshow{glo@\glsdetoklabel{#1}@#2}% +} +\newcommand*{\showacronymlists}{% + \show\@glsacronymlists +} +\newcommand*{\showglossaries}{% + \show\@glo@types +} +\newcommand*{\showglossaryin}[1]{% + \expandafter\show\csname @glotype@#1@in\endcsname +} +\newcommand*{\showglossaryout}[1]{% + \expandafter\show\csname @glotype@#1@out\endcsname +} +\newcommand*{\showglossarytitle}[1]{% + \expandafter\show\csname @glotype@#1@title\endcsname +} +\newcommand*{\showglossarycounter}[1]{% + \expandafter\show\csname @glotype@#1@counter\endcsname +} +\newcommand*{\showglossaryentries}[1]{% + \expandafter\show\csname glolist@#1\endcsname +} +\csname ifglscompatible-2.07\endcsname + \RequirePackage{glossaries-compatible-207} +\fi +% \end{macrocode} +%\iffalse +% \begin{macrocode} +% +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} %<*glossaries.perl> % \end{macrocode} %\fi diff --git a/macros/latex/contrib/glossaries/glossaries.ins b/macros/latex/contrib/glossaries/glossaries.ins index 30d939a39e..0c8f90881b 100644 --- a/macros/latex/contrib/glossaries/glossaries.ins +++ b/macros/latex/contrib/glossaries/glossaries.ins @@ -1,10 +1,10 @@ -% glossaries.ins generated using makedtx version 1.2 2020/3/19 17:03 +% glossaries.ins generated using makedtx version 1.2 2021/9/23 17:22 \input docstrip \preamble glossaries.dtx - Copyright 2020 Nicola Talbot + Copyright 2021 Nicola Talbot This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3 @@ -18,7 +18,7 @@ The Current Maintainer of this work is Nicola Talbot. - This work consists of the files glossaries.dtx and glossaries.ins and the derived files glossaries.sty, glossaries-prefix.sty, glossary-hypernav.sty, glossary-inline.sty, glossary-list.sty, glossary-long.sty, glossary-longbooktabs.sty, glossary-longragged.sty, glossary-mcols.sty, glossary-super.sty, glossary-superragged.sty, glossary-tree.sty, glossaries-compatible-207.sty, glossaries-compatible-307.sty, glossaries-accsupp.sty, glossaries-babel.sty, glossaries-polyglossia.sty, example-glossaries-acronym-desc.tex, example-glossaries-acronym.tex, example-glossaries-acronyms-lang.tex, example-glossaries-brief.tex, example-glossaries-childnoname.tex, example-glossaries-cite.tex, example-glossaries-images.tex, example-glossaries-long.tex, example-glossaries-multipar.tex, example-glossaries-parent.tex, example-glossaries-symbolnames.tex, example-glossaries-symbols.tex, example-glossaries-url.tex, glossaries.perl. + This work consists of the files glossaries.dtx and glossaries.ins and the derived files glossaries.sty, glossaries-prefix.sty, glossary-hypernav.sty, glossary-inline.sty, glossary-list.sty, glossary-long.sty, glossary-longbooktabs.sty, glossary-longragged.sty, glossary-mcols.sty, glossary-super.sty, glossary-superragged.sty, glossary-tree.sty, glossaries-compatible-207.sty, glossaries-compatible-307.sty, glossaries-accsupp.sty, glossaries-babel.sty, glossaries-polyglossia.sty, example-glossaries-acronym-desc.tex, example-glossaries-acronym.tex, example-glossaries-acronyms-lang.tex, example-glossaries-brief.tex, example-glossaries-childmultipar.tex, example-glossaries-childnoname.tex, example-glossaries-cite.tex, example-glossaries-images.tex, example-glossaries-long.tex, example-glossaries-longchild.tex, example-glossaries-multipar.tex, example-glossaries-parent.tex, example-glossaries-symbolnames.tex, example-glossaries-symbols.tex, example-glossaries-url.tex, glossaries-2020-03-19.sty, glossaries.perl. \endpreamble @@ -62,15 +62,19 @@ \file{example-glossaries-acronym.tex}{\nopreamble\nopostamble\from{glossaries.dtx}{example-glossaries-acronym.tex}} \file{example-glossaries-acronyms-lang.tex}{\nopreamble\nopostamble\from{glossaries.dtx}{example-glossaries-acronyms-lang.tex}} \file{example-glossaries-brief.tex}{\nopreamble\nopostamble\from{glossaries.dtx}{example-glossaries-brief.tex}} +\file{example-glossaries-childmultipar.tex}{\nopreamble\nopostamble\from{glossaries.dtx}{example-glossaries-childmultipar.tex}} \file{example-glossaries-childnoname.tex}{\nopreamble\nopostamble\from{glossaries.dtx}{example-glossaries-childnoname.tex}} \file{example-glossaries-cite.tex}{\nopreamble\nopostamble\from{glossaries.dtx}{example-glossaries-cite.tex}} \file{example-glossaries-images.tex}{\nopreamble\nopostamble\from{glossaries.dtx}{example-glossaries-images.tex}} \file{example-glossaries-long.tex}{\nopreamble\nopostamble\from{glossaries.dtx}{example-glossaries-long.tex}} +\file{example-glossaries-longchild.tex}{\nopreamble\nopostamble\from{glossaries.dtx}{example-glossaries-longchild.tex}} \file{example-glossaries-multipar.tex}{\nopreamble\nopostamble\from{glossaries.dtx}{example-glossaries-multipar.tex}} \file{example-glossaries-parent.tex}{\nopreamble\nopostamble\from{glossaries.dtx}{example-glossaries-parent.tex}} \file{example-glossaries-symbolnames.tex}{\nopreamble\nopostamble\from{glossaries.dtx}{example-glossaries-symbolnames.tex}} \file{example-glossaries-symbols.tex}{\nopreamble\nopostamble\from{glossaries.dtx}{example-glossaries-symbols.tex}} \file{example-glossaries-url.tex}{\nopreamble\nopostamble\from{glossaries.dtx}{example-glossaries-url.tex}} +\file{glossaries-2020-03-19.sty}{\usepreamble\defaultpreamble +\usepostamble\defaultpostamble\from{glossaries.dtx}{glossaries-2020-03-19.sty,package}} \file{glossaries.perl}{\nopreamble\nopostamble\from{glossaries.dtx}{glossaries.perl}} } diff --git a/macros/latex/contrib/glossaries/glossariesbegin.html b/macros/latex/contrib/glossaries/glossariesbegin.html index 91e6cd7014..85fd72607d 100644 --- a/macros/latex/contrib/glossaries/glossariesbegin.html +++ b/macros/latex/contrib/glossaries/glossariesbegin.html @@ -6,8 +6,8 @@ > - - + + @@ -40,9 +40,9 @@ .cmtt-9{font-family: monospace,monospace;} .cmtt-9{font-family: monospace,monospace;} .cmtt-9{font-family: monospace,monospace;} -.cmitt-10{font-family: monospace,monospace; font-style: italic;} .cmbx-10{ font-weight: bold;} .cmbx-10{ font-weight: bold;} +.cmitt-10{font-family: monospace,monospace; font-style: italic;} .tcrm-0900{font-size:90%;} .cmss-8{font-size:80%; font-family: sans-serif;} .cmss-8{ font-family: sans-serif;} @@ -53,15 +53,19 @@ p.indent{text-indent:0;} p + p{margin-top:1em;} p + div, p + pre {margin-top:1em;} div + p, pre + p {margin-top:1em;} +a { overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; hyphens: auto; } @media print {div.crosslinks {visibility:hidden;}} a img { border-top: 0; border-left: 0; border-right: 0; } center { margin-top:1em; margin-bottom:1em; } td center { margin-top:0em; margin-bottom:0em; } .Canvas { position:relative; } img.math{vertical-align:middle;} +div.par-math-display, div.math-display{text-align:center;} li p.indent { text-indent: 0em } li p:first-child{ margin-top:0em; } +li p:first-child{ margin-bottom; } li p:last-child, li div:last-child { margin-bottom:0.5em; } +li p:first-child{ margin-bottom:0; } li p~ul:last-child, li p~ol:last-child{ margin-bottom:0.5em; } .enumerate1 {list-style-type:decimal;} .enumerate2 {list-style-type:lower-alpha;} @@ -75,7 +79,7 @@ div.obeylines-v p { margin-top:0; margin-bottom:0; } td.displaylines {text-align:center; white-space:nowrap;} .centerline {text-align:center;} .rightline {text-align:right;} -div.verbatim {font-family: monospace,monospace; white-space: nowrap; text-align:left; clear:both; } +pre.verbatim {font-family: monospace,monospace; text-align:left; clear:both; } .fbox {padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } div.fbox {display:table} div.center div.fbox {text-align:center; clear:both; padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } @@ -137,6 +141,7 @@ table.pmatrix {width:100%;} span.bar-css {text-decoration:overline;} img.cdots{vertical-align:middle;} .partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;} +.chapterToc a, .chapterToc, .likechapterToc a, .likechapterToc, .appendixToc a, .appendixToc {line-height: 200%; font-weight:bold;} .index-item, .index-subitem, .index-subsubitem {display:block} div.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:left;} div.caption span.id{font-weight: bold; white-space: nowrap; } @@ -145,18 +150,17 @@ p.bibitem { text-indent: -2em; margin-left: 2em; margin-top:0.6em; margin-bottom p.bibitem-p { text-indent: 0em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; } .paragraphHead, .likeparagraphHead { margin-top:2em; font-weight: bold;} .subparagraphHead, .likesubparagraphHead { font-weight: bold;} -.quote {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; margin-right:1em; text-align:justify;} .verse{white-space:nowrap; margin-left:2em} div.maketitle {text-align:center;} h2.titleHead{text-align:center;} div.maketitle{ margin-bottom: 2em; } div.author, div.date {text-align:center;} div.thanks{text-align:left; margin-left:10%; font-size:85%; font-style:italic; } -.quotation {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; } -.abstract p {margin-left:5%; margin-right:5%;} +div.abstract p {margin-left:5%; margin-right:5%;} div.abstract {width:100%;} +.abstracttitle{text-align:center;margin-bottom:1em;} .alltt P { margin-bottom : 0em; margin-top : 0em; } -.alltt { margin-bottom : 1em; margin-top : 1em; } +.alltt { margin-bottom : 1em; margin-top : 1em; font-family:monospace,monospace; } div.tabular, div.center div.tabular {text-align: center; margin-top:0.5em; margin-bottom:0.5em; } table.tabular td p{margin-top:0em;} table.tabular {margin-left: auto; margin-right: auto;} @@ -258,12 +262,12 @@ span#textcolor40{color:#00FF00} >

    The glossaries package v4.46: a guide for +class="cmr-17">The glossaries package v4.47: a guide for beginners

    dickimaw-books.com

    2020-03-19

    +class="cmr-12">2021-09-20

    -
    -

    -

    Abstract

    -

    +Abstract + +

    The glossaries package is very flexible, but this means that it has a lot +class="cmr-9"> lot of of options, and since a user guide is supposed to provide a complete list +class="cmr-9">options, and since a user guide is supposed to provide a complete list of all of all the high-level user commands, the main user manual is quite big. +class="cmr-9">the high-level user commands, the main user manual is quite big. This can This can be rather daunting for beginners, so this document is a brief +class="cmr-9">be rather daunting for beginners, so this document is a brief introduction introduction just to help get you started. If you find yourself saying, “Yeah, +class="cmr-9">just to help get you started. If you find yourself saying, “Yeah, but how but how can I docan I do…?” then it’s time to move on to the main user manualthat way may cause complications under certain circumstances”

    Contents

    @@ -388,34 +391,34 @@ example:

    -
    +
      \documentclass{article}
    - 
     \usepackage{glossaries} - 
     \newglossaryentry{ex}{name={sample},description={an example}} - 
     \begin{document} - 
     Here's my \gls{ex} term. - 
     \end{document} -
    + \usepackage{glossaries} + \newglossaryentry{ex}{name={sample},description={an example}} + \begin{document} + Here's my \gls{ex} term. + \end{document} +

    This produces: -

    -

    Here’s my sample term.

    +

    +

    Here’s my sample term.

    Here’s another example:

    -
    +
      \documentclass{article}
    - 
     \usepackage{glossaries} - 
     \setacronymstyle{long-short} - 
     \newacronym{svm}{SVM}{support vector machine} - 
     \begin{document} - 
     First use: \gls{svm}. Second use: \gls{svm}. - 
     \end{document} -
    + \usepackage{glossaries} + \setacronymstyle{long-short} + \newacronym{svm}{SVM}{support vector machine} + \begin{document} + First use: \gls{svm}. Second use: \gls{svm}. + \end{document} +

    This produces: -

    -

    First use: support vector machine (SVM). Second use: SVM.

    +

    +

    First use: support vector machine (SVM). Second use: SVM.

    In this case, the text produced by \gls{svm} changed after the first use. The first use produced the long form followed by the short form in parentheses because I set the @@ -444,15 +447,15 @@ class="cmss-10">glossaries-extra -

    + \usepackage{glossaries-extra} + \setabbreviationstyle{long-short}% glossaries-extra.sty + \newabbreviation{svm}{SVM}{support vector machine}% glossaries-extra.sty + \begin{document} + First use: \gls{svm}. Second use: \gls{svm}. + \end{document} +

    Since long-short happens to be the default for \newabbreviation (if you haven’t @@ -469,15 +472,15 @@ class="cmtt-10">\setabbreviationstyle:

    -
    +
      \documentclass{article}
    - 
     \usepackage{glossaries-extra} - 
     \setabbreviationstyle[acronym]{long-short}% glossaries-extra.sty only - 
     \newacronym{svm}{SVM}{support vector machine} - 
     \begin{document} - 
     First use: \gls{svm}. Second use: \gls{svm}. - 
     \end{document} -
    + \usepackage{glossaries-extra} + \setabbreviationstyle[acronym]{long-short}% glossaries-extra.sty only + \newacronym{svm}{SVM}{support vector machine} + \begin{document} + First use: \gls{svm}. Second use: \gls{svm}. + \end{document} +

    In this example, if you omit the \setabbreviationstyle line you will notice a difference because the -

    +
     \loadglsentries{defns}
    -
    +

    If you find you have a really large number of definitions that are hard to manage in a .tex file, you might want to have a look at -

    +
      \documentclass{article}
    - 
     \usepackage{glossaries} - 
     \setacronymstyle{long-sc-short} - 
     \newacronym{svm}{svm}{support vector machine} - 
     \begin{document} - 
     First use: \gls{svm}. Second use: \gls{svm}. - 
     \end{document} -
    + \usepackage{glossaries} + \setacronymstyle{long-sc-short} + \newacronym{svm}{svm}{support vector machine} + \begin{document} + First use: \gls{svm}. Second use: \gls{svm}. + \end{document} +

    The abbreviation styles have a different naming scheme with glossaries-extra: @@ -541,15 +544,15 @@ class="cmss-10">glossaries-extra -

    + \usepackage{glossaries-extra} + \setabbreviationstyle{long-short-sc}% glossaries-extra.sty + \newabbreviation{svm}{svm}{support vector machine}% glossaries-extra.sty + \begin{document} + First use: \gls{svm}. Second use: \gls{svm}. + \end{document} +

    With glossaries-extra you can have multiple abbreviation styles for different @@ -559,34 +562,34 @@ can be redefined for minor adjustments. For example:

    -
    +
      \documentclass{article}
    - 
     \usepackage{glossaries-extra} - 
     \setabbreviationstyle[statistical]{long-short-sc} - 
     \setabbreviationstyle[bacteria]{long-only-short-only} - 
     % Formatting commands used by 'long-only-short-only' style: - 
     \renewcommand*{\glsabbrvonlyfont}[1]{\emph{#1}} - 
     \renewcommand*{\glslongonlyfont}[1]{\emph{#1}} - 
     % Formatting command used by 'long-short-sc' style: - 
     % (make sure abbreviation is converted to lower case) - 
     \renewcommand*{\glsabbrvscfont}[1]{\textsc{\MakeLowercase{#1}}} - 
     \newabbreviation - 
      [ - 
        category={statistical}% glossaries-extra.sty key - 
      ] - 
      {svm}{SVM}{support vector machine} - 
     \newabbreviation - 
      [ - 
        category={bacteria}% glossaries-extra.sty key - 
      ] - 
      {cbot}{C.~botulinum}{Clostridium botulinum} - 
     \begin{document} - 
     First use: \gls{svm}, \gls{cbot}. - 
     Next use: \gls{svm}, \gls{cbot}. - 
     \end{document} -
    + \usepackage{glossaries-extra} + \setabbreviationstyle[statistical]{long-short-sc} + \setabbreviationstyle[bacteria]{long-only-short-only} + % Formatting commands used by 'long-only-short-only' style: + \renewcommand*{\glsabbrvonlyfont}[1]{\emph{#1}} + \renewcommand*{\glslongonlyfont}[1]{\emph{#1}} + % Formatting command used by 'long-short-sc' style: + % (make sure abbreviation is converted to lower case) + \renewcommand*{\glsabbrvscfont}[1]{\textsc{\MakeLowercase{#1}}} + \newabbreviation +  [ +    category={statistical}% glossaries-extra.sty key +  ] +  {svm}{SVM}{support vector machine} + \newabbreviation +  [ +    category={bacteria}% glossaries-extra.sty key +  ] +  {cbot}{C.~botulinum}{Clostridium botulinum} + \begin{document} + First use: \gls{svm}, \gls{cbot}. + Next use: \gls{svm}, \gls{cbot}. + \end{document} +

    This produces: -

    +

    First use: support vector machine (ssvm, C. botulinum.

    +class="cmti-10"> botulinum.

    As you can hopefully see from the above examples, there are two main ways of defining a term: as a general entry (\newglossaryentry) or as an abbreviation @@ -666,22 +669,22 @@ entries:

    -
    +
      \documentclass{article}
    - 
     \usepackage[sort=none]{glossaries-extra} - 
     \newglossaryentry{potato}{name={potato},plural={potatoes}, - 
      description={starchy tuber}} - 
     \newglossaryentry{cabbage}{name={cabbage}, - 
      description={vegetable with thick green or purple leaves}} - 
     \newglossaryentry{turnip}{name={turnip}, - 
      description={round pale root vegetable}} - 
     \newglossaryentry{carrot}{name={carrot}, - 
      description={orange root}} - 
     \begin{document} - 
     Chop the \gls{cabbage}, \glspl{potato} and \glspl{carrot}. - 
     \printunsrtglossaries % list all entries - 
     \end{document} -
    + \usepackage[sort=none]{glossaries-extra} + \newglossaryentry{potato}{name={potato},plural={potatoes}, +  description={starchy tuber}} + \newglossaryentry{cabbage}{name={cabbage}, +  description={vegetable with thick green or purple leaves}} + \newglossaryentry{turnip}{name={turnip}, +  description={round pale root vegetable}} + \newglossaryentry{carrot}{name={carrot}, +  description={orange root}} + \begin{document} + Chop the \gls{cabbage}, \glspl{potato} and \glspl{carrot}. + \printunsrtglossaries % list all entries + \end{document} +

    However this method doesn’t sort the entries (they’re listed in order of definition) and it will display all the defined entries, regardless of whether or not you’ve used them all in the document, so “turnip” appears in the glossary even though there’s no @@ -741,23 +744,23 @@ place where you want your glossary. For example:

    -
    +
      \documentclass{article}
    - 
     \usepackage{glossaries} - 
     \makenoidxglossaries % use TeX to sort - 
     \newglossaryentry{potato}{name={potato},plural={potatoes}, - 
      description={starchy tuber}} - 
     \newglossaryentry{cabbage}{name={cabbage}, - 
      description={vegetable with thick green or purple leaves}} - 
     \newglossaryentry{turnip}{name={turnip}, - 
      description={round pale root vegetable}} - 
     \newglossaryentry{carrot}{name={carrot}, - 
      description={orange root}} - 
     \begin{document} - 
     Chop the \gls{cabbage}, \glspl{potato} and \glspl{carrot}. - 
     \printnoidxglossaries - 
     \end{document} -
    + \usepackage{glossaries} + \makenoidxglossaries % use TeX to sort + \newglossaryentry{potato}{name={potato},plural={potatoes}, +  description={starchy tuber}} + \newglossaryentry{cabbage}{name={cabbage}, +  description={vegetable with thick green or purple leaves}} + \newglossaryentry{turnip}{name={turnip}, +  description={round pale root vegetable}} + \newglossaryentry{carrot}{name={carrot}, +  description={orange root}} + \begin{document} + Chop the \gls{cabbage}, \glspl{potato} and \glspl{carrot}. + \printnoidxglossaries + \end{document} +

    The \makenoidxglossaries method is very slow, uses an ASCII comparator and @@ -782,17 +785,17 @@ options:

    -
    +
     \usepackage[nogroupskip]{glossaries}
    -
    +

    or you may want to try out a style that shows the group headings:

    -
    +
     \usepackage[style=indexgroup]{glossaries}
    -
    +

    If you try out this example you may also notice that the description is followed by a full stop (period) and a number. The number is the location in the document where the entry was used (page 1 in this case), so you can lookup the term in the glossary @@ -805,9 +808,9 @@ option:

    -
    +
     \usepackage[nonumberlist]{glossaries}
    -
    +

    If you don’t like the terminating full stop, you can suppress that with the nopostdot @@ -816,9 +819,9 @@ package option:

    -
    +
     \usepackage[nopostdot]{glossaries}
    -
    +

    If you try out the earlier example with glossaries-extra -

    +

    or

    -
    +
     \usepackage[postdot]{glossaries-extra}
    -
    +

    If you want the number lists then you need to use an indexing option.

    You may have noticed that I’ve used another command in the above examples: xindyOption 3) or bib2gls (Option 4). If you are using -extended Latin or non-Latin characters, then Option 4). If you are +using extended Latin or non-Latin characters, then xindy or bib2gls are the -recommended methods. These methods are described in more detail in are +the recommended methods. These methods are described in more detail in +§4 Displaying -a List of Entries. +class="tcrm-1000">§??sec:printglossaries Displaying a List of Entries.

    The rest of this document briefly describes the main commands provided by the glossaries package. (Most of these are also available with }

    Examples:

      -
    1. Define the term “set” with the label +

      Define the term “set” with the label set: -

      +

      +
            \newglossaryentry{set}
      -      
      { -  
        name={set}, -  
        description={a collection of objects} -  
      } -
      + { +   name={set}, +   description={a collection of objects} + } +

    -
  • Define the symbol +

    Define the symbol with the label emptyset: -

    +

    +
          \newglossaryentry{emptyset}
    -      
    { -  
      name={\ensuremath{\emptyset}}, -  
      description={the empty set} -  
    } -
    + { +   name={\ensuremath{\emptyset}}, +   description={the empty set} + } +
  • (This will also need a sort key if you use Options 1 or 3, see below.)

    -
  • Define the phrase “Fish Age” with the label +

    Define the phrase “Fish Age” with the label fishage: -

    +

    +
          \longnewglossaryentry{fishage}
    -      
    {name={Fish Age}} -  
    {% -  
      A common name for the Devonian geologic period -  
      spanning from the end of the Silurian Period to -  
      the beginning of the Carboniferous Period. -  
      This age was known for its remarkable variety of -  
      fish species. -  
    } -
    + {name={Fish Age}} + {% +   A common name for the Devonian geologic period +   spanning from the end of the Silurian Period to +   the beginning of the Carboniferous Period. +   This age was known for its remarkable variety of +   fish species. + } +
  • (The percent character discards the end of line character that would otherwise cause an unwanted space to appear at the start of the description.)

    -
  • Take care if the first letter is an extended Latin or non-Latin character (either +
  • +

    Take care if the first letter is an extended Latin or non-Latin character (either specified via a command such as \’e or explicitly via the inputencé). This first letter must be placed in a g -

    + { +   name={{\'e}lite}, +   description={select group or class} + } +
  • or

    Fish Age}, + + +
      description= the Silurian Period to - - -
      the +
     \usepackage[record]{glossaries-extra}
    -
    +

    and the .bib file is specified in the resource command. For example, if the -

    +
     \GlsXtrLoadResources[src={entries}]
    -
    +

    You can have a comma-separated list. For example, if you also have entries defined in the file entries2.bib: @@ -1240,9 +1252,9 @@ class="cmtt-10">entries2.bib:

    -
    +
     \GlsXtrLoadResources[src={entries,entries2}]
    -
    +

    There are other keys you can use when you define an entry. For example, the name @@ -1258,15 +1270,15 @@ class="cmtt-10">text key as well.

    -
    +
     \newglossaryentry{latinalph}
    - 
    { - 
      name={Latin Alphabet}, - 
      text={Latin alphabet}, - 
      description={alphabet consisting of the letters - 
      a, \ldots, z, A, \ldots, Z} - 
    } -
    +{ +  name={Latin Alphabet}, +  text={Latin alphabet}, +  description={alphabet consisting of the letters +  a, \ldots, z, A, \ldots, Z} +} +

    This will appear in the text as “Latin alphabet” but will be listed in the glossary as “Latin Alphabet”. With bib2gls -

    +  name={Latin Alphabet}, +  text={Latin alphabet}, +  description={alphabet consisting of the letters +  a, \ldots, z, A, \ldots, Z} +} +

    Another commonly used key is plural for specifying the plural of the term. This @@ -1296,14 +1308,14 @@ class="cmtt-10">plural key to override it:

    -
    +
     \newglossaryentry{oesophagus}
    - 
    { - 
      name={{\oe}sophagus}, - 
      plural={{\oe}sophagi}, - 
      description={canal from mouth to stomach} - 
    } -
    +{ +  name={{\oe}sophagus}, +  plural={{\oe}sophagi}, +  description={canal from mouth to stomach} +} +

    (Remember from earlier that the initial ligature \oe needs to be grouped.)

    Abbreviations can be defined using: @@ -1328,9 +1340,9 @@ class="cmti-10">long⟩ is the long form. For example, the following

    -
    +
     \newacronym{svm}{SVM}{support vector machine}
    -
    +

    This internally uses \newglossaryentry to define an entry with the label svm. By @@ -1346,11 +1358,11 @@ the optional argument:

    -
    +
     \newacronym
    - 
     [description={statistical pattern recognition technique}] - 
     {svm}{SVM}{support vector machine} -
    + [description={statistical pattern recognition technique}] + {svm}{SVM}{support vector machine} +

    Before you define your acronyms (or other types of abbreviations), you need to specify which style to use with: @@ -1457,11 +1469,11 @@ class="cmtt-10">shortplural keys. For example:

    -
    +
     \newacronym
    - 
     [longplural={diagonal matrices}] - 
     {dm}{DM}{diagonal matrix} -
    + [longplural={diagonal matrices}] + {dm}{DM}{diagonal matrix} +

    or (with glossaries-extra): @@ -1469,11 +1481,11 @@ class="cmss-10">glossaries-extra -

    + [longplural={diagonal matrices}] + {dm}{DM}{diagonal matrix} +

    If omitted, the defaults are again obtained by appending an “s” to the singular versions. With bib2gls.bib file is:

    -
    +
     @abbreviation{dm,
    - 
      short={DM}, - 
      long={diagonal matrix}, - 
      longplural={diagonal matrices} - 
    } -
    +  short={DM}, +  long={diagonal matrix}, +  longplural={diagonal matrices} +} +

    It’s also possible to have both a name and a corresponding symbol. Just use the -

    +
     \newglossaryentry{emptyset}
    - 
    { - 
      name={empty set}, - 
      symbol={\ensuremath{\emptyset}}, - 
      description={the set containing no elements} - 
    } -
    +{ +  name={empty set}, +  symbol={\ensuremath{\emptyset}}, +  description={the set containing no elements} +} +

    or with bib2gls the definition in the .bib file is:

    -
    +
     @entry{emptyset,
    - 
      name={empty set}, - 
      symbol={\ensuremath{\emptyset}}, - 
      description={the set containing no elements} - 
    } -
    +  name={empty set}, +  symbol={\ensuremath{\emptyset}}, +  description={the set containing no elements} +} +

    If you want the symbol in the name field then you must supply a -

    +
     \newglossaryentry{emptyset}
    - 
    { - 
      name={\ensuremath{\emptyset}}, - 
      sort={empty set}, - 
      description={the set containing no elements} - 
    } -
    +{ +  name={\ensuremath{\emptyset}}, +  sort={empty set}, +  description={the set containing no elements} +} +

    This displays the symbol as but sorts according to “empty set”. You may want to consider using label⟩. For example:

    -
    +
     \documentclass{article}
    - 
    \usepackage[symbols]{glossaries-extra} - 
    \makeglossaries - 
    \glsxtrnewsymbol % requires glossaries-extra.sty 'symbols' option - 
     [description={the set containing no elements}] - 
     {emptyset}% label (and sort value) - 
     {\ensuremath{\emptyset}}% symbol - 
    \begin{document} - 
    \gls{emptyset} - 
    \printglossaries - 
    \end{document} -
    +\usepackage[symbols]{glossaries-extra} +\makeglossaries +\glsxtrnewsymbol % requires glossaries-extra.sty 'symbols' option + [description={the set containing no elements}] + {emptyset}% label (and sort value) + {\ensuremath{\emptyset}}% symbol +\begin{document} +\gls{emptyset} +\printglossaries +\end{document} +

    Now the sort value is “emptyset” rather than the previous “empty set”.

    With bib2gls.bib file as

    -
    +
     @entry{emptyset,
    - 
      name={\ensuremath{\emptyset}}, - 
      description={the set containing no elements} - 
    } -
    +  name={\ensuremath{\emptyset}}, +  description={the set containing no elements} +} +

    in which case bib2gls will try to interpret the -

    +
     @symbol{emptyset,
    - 
      name={\ensuremath{\emptyset}}, - 
      description={the set containing no elements} - 
    } -
    +  name={\ensuremath{\emptyset}}, +  description={the set containing no elements} +} +

    which will use the label (emptyset) as the sort value. (You don’t need the symbols -

    +\usepackage[record]{glossaries-extra} +\GlsXtrLoadResources[src=entries] +\begin{document} +\gls{emptyset} +\printunsrtglossaries +\end{document} +

    Note that while the sort key is advised for symbols when using -

    +
     \Glspl{set} are collections.
    -
    +

    produces “Sets are collections”.

    If you’ve specified a symbol using the symbol key, you can display it @@ -1763,15 +1775,17 @@ href="#top">Top

    Displaying a List of Entries

    In §1 §??sec:start Getting Started, I mentioned that there are three options you can choose from to create an automatically sorted glossary with the base glossaries package. These are also available with the extension package glossaries-extra -along with a fourth option. These four options are listed below in a little -more detail. Table 1 summarises the main advantages and disadvantages. +class="cmss-10">glossaries-extra along +with a fourth option. These four options are listed below in a little more detail. +Table ??tab:optionsp+c summarises the main advantages and disadvantages. (There’s a more detailed summary in the main glossaries user manual.) See also . >Table 1: Comparison of Glossary Options

    Requires some setting up.
    -

    +

    +

    Option 1: -

    This is the simplest option but it’s slow and if you want a sorted list, +

    This is the simplest option but it’s slow and if you want a sorted list, it doesn’t work for extended or non-Latin alphabets. The name mustn’t contain commands (or, if it does, the =use.

      -
    1. Add +

      Add \makenoidxglossaries to your preamble (before you start defining your entries, as described in §2 §??sec:defterm Defining Terms). -

    2. -
    3. Put -


    4. +
    5. +

      Put +


      \printnoidxglossary[sort=order,\printnoidxglossaries

      -
      +
                \printnoidxglossary[sort=word]% main glossary
      -          
      \printnoidxglossary[type=symbols,sort=use]% symbols glossary -
      + \printnoidxglossary[type=symbols,sort=use]% symbols glossary +

    6. -
    7. Run LaTeX twice on your document. (As you would do to make a table +
    8. +

      Run LaTeX twice on your document. (As you would do to make a table of contents appear.) For example, click twice on the “typeset” or “build” - or “PDFLaTeX” button in your editor.

    + or “PDFLaTeX” button in your editor.

    Here’s a complete document (myDoc.tex):

    -
    +
          \documentclass{article}
    -      
    \usepackage{glossaries} -  
    \makenoidxglossaries % use TeX to sort -  
    \newglossaryentry{sample}{name={sample}, -  
      description={an example}} -  
    \begin{document} -  
    A \gls{sample}. -  
    \printnoidxglossaries % iterate over all indexed entries -  
    \end{document} -
    + \usepackage{glossaries} + \makenoidxglossaries % use TeX to sort + \newglossaryentry{sample}{name={sample}, +   description={an example}} + \begin{document} + A \gls{sample}. + \printnoidxglossaries % iterate over all indexed entries + \end{document} +

    Document build:

    -
    +
          pdflatex myDoc
    -      
    pdflatex myDoc -
    + pdflatex myDoc +

    -

    +

    +

    Option 2: -

    This option uses an application called

    This option uses an application called makeindex to sort the entries. This application comes with all modern TeX distributions, but it’s hard-coded for @@ -2097,8 +2119,9 @@ class="cmtt-10">makeglossaries.aux file.

      -
    1. If you are using +

      If you are using ngerman1\GlsSetQuote to change this to some other character. -

      +

      Use this as soon as possible after you’ve loaded the glossaries package.

    2. -
    3. Add +

      Add \makeglossaries to your preamble (before you start defining your entries). -

    4. -
    5. Put -


    6. +
    7. +

      Put +


      \printglossary[options]

      @@ -2156,8 +2182,9 @@ class="cmss-10">def
      .

    8. -
    9. Run LaTeX on your document. This creates files with the extensions +

      Run LaTeX on your document. This creates files with the extensions .glo and .ist (for example, if your LaTeX document is called myDoc.glo and myDoc.ist). If you look at your document at this point, you won’t see the glossary as it hasn’t been created yet. -

    10. -
    11. Run
    12. +
    13. +

      Run makeglossaries with the base name of your document (without the .tex) extension. If you have access to a terminal or a command prompt + + + (for example, the MSDOS command prompt for Windows users or the bash console for Unix-like users) then you need to run the command: -

      +

      +
                makeglossaries myDoc
      -
      +

      (Replace myDoc with the base name of your LaTeX document file without the makeglossaries-lite -

      +

    14. -
    15. Once you have successfully completed the previous step, you can now run - LaTeX on your document again.
    +
  • +

    Once you have successfully completed the previous step, you can now run + LaTeX on your document again.

  • Here’s a complete document (myDoc.tex):

    -
    +
          \documentclass{article}
    -      
    \usepackage{glossaries} -  
    \makeglossaries % create makeindex files -  
    \newglossaryentry{sample}{name={sample}, -  
      description={an example}} -  
    \begin{document} -  
    A \gls{sample}. -  
    \printglossaries % input files created by makeindex -  
    \end{document} -
    + \usepackage{glossaries} + \makeglossaries % create makeindex files + \newglossaryentry{sample}{name={sample}, +   description={an example}} + \begin{document} + A \gls{sample}. + \printglossaries % input files created by makeindex + \end{document} +

    Document build:

    -
    +
          pdflatex myDoc
    -      
    makeglossaries myDoc -  
    pdflatex myDoc -
    + makeglossaries myDoc + pdflatex myDoc +

    or

    -
    +
          pdflatex myDoc
    -      
    makeglossaries-lite myDoc -  
    pdflatex myDoc -
    + makeglossaries-lite myDoc + pdflatex myDoc +

    -

    +

    +

    Option 3: -

    This option uses an application called

    This option uses an application called xindy to sort the entries. This application is more flexible than makeglossaries.aux file.

      -
    1. Add the +

      Add the xindy option to the glossariesglossaries +

      +
                \usepackage[xindy]{glossaries}
      -
      +

    2. -
    3. Add +

      Add \makeglossaries to your preamble (before you start defining your entries). -

    4. -
    5. Put -


    6. +
    7. +

      Put +


      \printglossary[options]

      @@ -2371,8 +2410,9 @@ class="cmss-10">def
      .

    8. -
    9. Run LaTeX on your document. This creates files with the extensions +

      Run LaTeX on your document. This creates files with the extensions .glo and .xdy (for example, if your LaTeX document is called myDoc.glo and myDoc.xdy). If you look at your document at this point, you won’t see the glossary as it hasn’t been created yet. -

    10. -
    11. Run
    12. +
    13. +

      Run makeglossaries with the base name of the document (omitting the .tex extension). If you have access to a terminal or a co -

      +

      +
                makeglossaries myDoc
      -
      +

      (Replace myDoc with the base name of your LaTeX document file without the order=letter package

      -
      +
                \usepackage[xindy,order=letter]{glossaries}
      -
      +

    14. -
    15. Once you have successfully completed the previous step, you can now run +
    16. +

      Once you have successfully completed the previous step, you can now run LaTeX on your document again. +

    Here’s a complete document (myDoc.tex): @@ -2430,35 +2474,37 @@ class="cmtt-10">myDoc.tex):

    -
    +
          \documentclass{article}
    -      
    \usepackage[xindy]{glossaries} -  
    \makeglossaries % create xindy files -  
    \newglossaryentry{sample}{name={sample}, -  
      description={an example}} -  
    \begin{document} -  
    A \gls{sample}. -  
    \printglossaries % input files created by xindy -  
    \end{document} -
    + \usepackage[xindy]{glossaries} + \makeglossaries % create xindy files + \newglossaryentry{sample}{name={sample}, +   description={an example}} + \begin{document} + A \gls{sample}. + \printglossaries % input files created by xindy + \end{document} +

    Document build:

    -
    +
          pdflatex myDoc
    -      
    makeglossaries myDoc -  
    pdflatex myDoc -
    + makeglossaries myDoc + pdflatex myDoc +

    -

    +

    +

    Option 4: -

    This requires the extension package

    This requires the extension package glossaries-extra and an application called \printunsrtglossary to class="cmtt-10">\printunsrtglossaries to display them all).

      -
    1. Add the +

      Add the record option to the glossaries-extraglossaries-extra +

      +
                \usepackage[record]{glossaries-extra}
      -
      +

    2. -
    3. Add one or more -


      +

      Add one or more +


      \GlsXtrLoadResources[src={bib list},.bib files containing the

      -
      +
                \usepackage[record,% using bib2gls
      -          
       abbreviations, -  
       symbols, -  
       numbers -  
      ]{glossaries-extra} -  
      \GlsXtrLoadResources[ -  
        src={terms},% entries in terms.bib -  
        type=main,% put these entries in the 'main' (default) list -  
        sort={de-CH-1996}% sort according to this locale -  
      ] -  
      \GlsXtrLoadResources[ -  
        src={abbrvs},% entries in abbrvs.bib -  
        type=abbreviations,% put these entries in the 'abbreviations' list -  
        sort={letter-case}% case-sensitive letter (non-locale) sort -  
      ] -  
      \GlsXtrLoadResources[ -  
        src={syms},% entries in syms.bib -  
        type=symbols,% put these entries in the 'symbols' list -  
        sort={use}% sort according to first use in the document -  
      ] -  
      \GlsXtrLoadResources[ -  
        src={constants},% entries in constants.bib -  
        type=numbers,% put these entries in the 'numbers' list -  
        sort-field={user1},% sort according to this field -  
        sort={double}% double-precision sort -  
      ] -
      +  abbreviations, +  symbols, +  numbers + ]{glossaries-extra} + \GlsXtrLoadResources[ +   src={terms},% entries in terms.bib +   type=main,% put these entries in the 'main' (default) list +   sort={de-CH-1996}% sort according to this locale + ] + \GlsXtrLoadResources[ +   src={abbrvs},% entries in abbrvs.bib +   type=abbreviations,% put these entries in the 'abbreviations' list +   sort={letter-case}% case-sensitive letter (non-locale) sort + ] + \GlsXtrLoadResources[ +   src={syms},% entries in syms.bib +   type=symbols,% put these entries in the 'symbols' list +   sort={use}% sort according to first use in the document + ] + \GlsXtrLoadResources[ +   src={constants},% entries in constants.bib +   type=numbers,% put these entries in the 'numbers' list +   sort-field={user1},% sort according to this field +   sort={double}% double-precision sort + ] +

      The last resource set assumes that the entries defined in the file constants.bib have a number stored in the user1 field. For

      -
      +
                @number{pi,
      -          
        name={\ensuremath{\pi}}, -  
        description={pi}, -  
        user1={3.141592654} -  
      } -
      +   name={\ensuremath{\pi}}, +   description={pi}, +   user1={3.141592654} + } +

    4. -
    5. Put -


      +

      Put +


      \printunsrtglossary[type={type},\GlsXtrLoadResources class="cmtt-10">\printunsrtglossaries

    6. -
    7. Run LaTeX on your document. The +

      Run LaTeX on your document. The record option adds information to the myDoc.tex: -

      +

      +
                pdflatex myDoc
      -
      +

    8. -
    9. Run +

      Run bib2gls -

      +

      +
                bib2gls myDoc
      -
      +

      or (if you need letter groups)

      -
      +
                bib2gls --group myDoc
      -
      +

    10. -
    11. Run LaTeX again.
    +
  • +

    Run LaTeX again.

  • Here’s a complete document (myDoc.tex):

    -
    +
          \documentclass{article}
    -      
    \usepackage[record]{glossaries-extra} -  
    \GlsXtrLoadResources % input file created by bib2gls -  
     [% instructions to bib2gls: -  
       src={entries}, % terms defined in entries.bib -  
       sort={en-GB}% sort according to this locale -  
     ] -  
    \newglossaryentry{sample}{name={sample}, -  
      description={an example}} -  
    \begin{document} -  
    A \gls{sample}. -  
    \printunsrtglossaries % iterate over all defined entries -  
    \end{document} -
    + \usepackage[record]{glossaries-extra} + \GlsXtrLoadResources % input file created by bib2gls +  [% instructions to bib2gls: +    src={entries}, % terms defined in entries.bib +    sort={en-GB}% sort according to this locale +  ] + \newglossaryentry{sample}{name={sample}, +   description={an example}} + \begin{document} + A \gls{sample}. + \printunsrtglossaries % iterate over all defined entries + \end{document} +

    The accompanying entries.bib file:

    -
    +
          @entry{sample,
    -      
      name = {sample}, -  
      description = {an example} -  
    } -
    +   name = {sample}, +   description = {an example} + } +

    Document build:

    -
    +
          pdflatex myDoc
    -      
    bib2gls myDoc -  
    pdflatex myDoc -
    + bib2gls myDoc + pdflatex myDoc +

    @@ -2678,22 +2733,22 @@ class="cmtt-10">myDoc.tex might start with:

    -
    +
      % arara: pdflatex
    - 
     % arara: makeglossaries - 
     % arara: pdflatex - 
     \documentclass{article} - 
     \usepackage{glossaries} - 
     \makeglossaries -
    + % arara: makeglossaries + % arara: pdflatex + \documentclass{article} + \usepackage{glossaries} + \makeglossaries +

    then to build the document you just need the single system call:

    -
    +
      arara myDoc
    -
    +

    (As from version 4.0, arara also has directives for -

    +
      \newglossaryentry{elite}
    - 
     { - 
       name={{\'e}lite}, - 
       description={select group or class} - 
     } -
    + { +   name={{\'e}lite}, +   description={select group or class} + } +

    No sort key was used, so it’s set to the same as the name key: {\’e}lite. How this is interpreted depends on which option you have used:

    +

    Option 1:

    By default, the accent command will be stripped so the sort value - will be elite. This will put the entry in the “E” letter group. However - if you use the :

    +

    By default, the accent command will be stripped so the sort value will be + elite. This will put the entry in the “E” letter group. However if you use + the sanitizesort=true package option, the sort value will be - interpreted as the sequence of characters: package option, the sort value will be interpreted as + the sequence of characters: { \ ’ e } l i t and e. This will - place this entry in the “symbols” group since it starts with a symbol. -

    +class="cmtt-10">e. This will place this entry + in the “symbols” group since it starts with a symbol. +

    +

    Option 2:

    The sort key will be interpreted the sequence of characters: :

    +

    The sort key will be interpreted the sequence of characters: { \ e - }lit and e } l i + t and e. The first character is an opening curly brace { so makeindex - will put this entry in the “symbols” group. -

    + id="dx1-5095"> will + put this entry in the “symbols” group. +

    +

    Option 3:

    :

    +

    xindy disregards LaTeX commands so it sorts on elite, which puts this - entry in the “E” group. If stripping all commands leads to an empty string +class="cmtt-10">elite, which puts this entry + in the “E” group. If stripping all commands leads to an empty string (such as \ensuremath{\emptyset}) then xindysort value that xindy will accept. -

    xindy merges entries with duplicate sort values. xindyxindy

    + + + +

    Option 4:

    :

    +

    bib2gls has a primitive LaTeX parser that recognises a limited set of commands, which includes the standard accent commands and some maths @@ -2814,14 +2881,11 @@ class="cmtt-10">lite. It disregards unknown class="cmtt-10">bib2gls doesn’t mind that. -

    Note that even if the name is given as

    Note that even if the name is given as {\’e}lite, the letter group heading (if the --group switch is used) may end up with the character É depending on the locale used by the sort comparator. In this case you - - - will need to ensure the document can support this character either with inputencinputenc -

    +

    and the entry is defined as:

    }
    then:
    +

    Option 1:

    By default the sort value will be interpreted as elite so the entry - will be put in the “E” letter group. If you use the :

    +

    By default the sort value will be interpreted as elite so the entry will be + put in the “E” letter group. If you use the sanitizesort=true package - option, the sort value will be interpreted as package option, + the sort value will be interpreted as élite where é has been - sanitized (so it’s no longer an active character and is in fact seen as two - octets 0xC3 0xA9) which will put this entry before the “A” letter group. - (The group is determined by the first octet 0xC3.) -

    +class="cmtt-10">lite where é has been sanitized + (so it’s no longer an active character and is in fact seen as two octets 0xC3 + 0xA9) which will put this entry before the “A” letter group. (The group + is determined by the first octet 0xC3.) +

    +

    Option 2:

    :

    +

    makeindex sees é as two octets (0xC3 0xA9) rather than a single + id="dx1-5108"> sees é as two octets (0xC3 0xA9) rather than a single character so it tries to put élite in the 0xC3 (“Ô) letter group (which, in this case, comes after “Z”). -

    +

    +

    Option 3:

    :

    +

    xindy will correctly recognise the sort value élite and will place - it in whatever letter group is appropriate for the given language setting. - (In English, this would just be the “E” letter group, but another language +class="cmtt-10">lite and will place it in + whatever letter group is appropriate for the given language setting. (In + English, this would just be the “E” letter group, but another language might put it in the “É” letter group.) -

    + + + +

    +

    Option 4:

    The :

    +

    The inputenc package doesn’t affect the encoding used with .bib entry @@ -2936,15 +3011,12 @@ class="cmtt-10">.bib file class="cmtt-10">bib2gls (and JabRef) by putting an encoding comment at the start of the .bib file:

    +class="cmtt-10">.bib file:

    % Encoding: UTF-8 - - -

    With the correct encoding set up, -

    +
     \newglossaryentry{elite}
    - 
    { - 
      name={{\'e}lite}, - 
      sort={elite}, - 
      description={select group or class} - 
    } -
    +{ +  name={{\'e}lite}, +  sort={elite}, +  description={select group or class} +} +

    or

    -
    +
      \newglossaryentry{P}{name={\P},sort={P},
    - 
      description={paragraph symbol}} -
    +  description={paragraph symbol}} +

    \glsnamefont:

    -
    +
     \renewcommand*{\glsnamefont}[1]{\textmd{#1}}
    -
    +

    Some classes and packages redefine the description -

    +

    or to add it with glossaries-extra:

    -
    +
     \usepackage[postdot]{glossaries-extra}
    -
    +

    By default, a location list is displayed for each entry (unless you use 2 or 3 described in §4 Displaying a List of Entries or Option 4 (with -§??sec:printglossaries Displaying a List of Entries or +Option 4 (with bib2gls and glossaries-extra) then location ranges will be compressed. For example, if -an entry was used on pages 1, 2 and 3, with Options 2 or ) then location ranges will be +compressed. For example, if an entry was used on pages 1, 2 and 3, with Options 2 +or 3 or Option 4 the -location list will appear as 1–3, but with Option 1 it will appear as 1, 2, 3. If you -don’t want the locations displayed you can hide them using the Option 4 the location list will appear as 1–3, but with Option 1 it will +appear as 1, 2, 3. If you don’t want the locations displayed you can hide them using +the nonumberlist package -option: + id="dx1-6010"> package option:

    -
    +
     \usepackage[nonumberlist]{glossaries}
    -
    +

    or with bib2gls use -

    +
     \usepackage[nogroupskip]{glossaries}
    -
    +

    If the default style doesn’t suit your document, you can change the style using: @@ -3180,9 +3253,9 @@ a style that suits your document. For example:

    -
    +
     \setglossarystyle{index}
    -
    +

    You can also use the style package option for the preloaded styles. For example: @@ -3190,14 +3263,15 @@ class="cmss-10">style -

    +

    Examples:

      -
    1. You have entries where the name is a symbol and the description is a brief +
    2. +

      You have entries where the name is a symbol and the description is a brief phrase or short sentence. Try one of the “mcol” styles defined in the glossary-mcolsglossary-mcols +

      +
            \usepackage[nopostdot]{glossaries}
      -      
      \usepackage{glossary-mcols} -  
      \setglossarystyle{mcolindex} -
    + \usepackage{glossary-mcols} + \setglossarystyle{mcolindex} +

    or

    -
    +
          \usepackage[stylemods={mcols},style=mcolindex]{glossaries-extra}
    -
    +

    -
  • You have entries where the name is a word or phrase and the description spans +
  • +

    You have entries where the name is a word or phrase and the description spans multiple paragraphs. Try one of the “altlist” styles. For example: -

    +

    +
          \usepackage[nopostdot]{glossaries}
    -      
    \setglossarystyle{altlist} -
    + \setglossarystyle{altlist} +

    or

    -
    +
          \usepackage[stylemods,style=altlist]{glossaries-extra}
    -
    +

  • -
  • You have entries where the name is a single word, the description is +
  • +

    You have entries where the name is a single word, the description is brief, and an associated symbol has been set. Use one of the styles that display the symbol (not all of them do). For example, one of the tabular styles: -

    +

    +
          \usepackage[nopostdot,nonumberlist,style=long4col]{glossaries}
    -
    +

    or one of the “tree” styles:

    -
    +
          \usepackage[nopostdot,nonumberlist,style=tree]{glossaries}
    -
    +

  • If your glossary consists of a list of abbreviations and you also want to specify a description as well as the long form, then you need to use an abbreviation style @@ -3269,19 +3348,19 @@ style:

    -
    +
     \setacronymstyle{long-short-desc}
    -
    +

    Define the acronyms with a description:

    -
    +
     \newacronym
    - 
     [description={statistical pattern recognition technique}] - 
     {svm}{SVM}{support vector machine} -
    + [description={statistical pattern recognition technique}] + {svm}{SVM}{support vector machine} +

    Alternatively with glossaries-extra: @@ -3289,21 +3368,21 @@ class="cmss-10">glossaries-extra -

    +\newabbreviation + [description={statistical pattern recognition technique}] + {svm}{SVM}{support vector machine} +

    Choose a glossary style that suits wide entry names. For example:

    -
    +
     \setglossarystyle{altlist}
    -
    +

    @@ -3316,12 +3395,13 @@ class="cmss-10">glossaries
    main glossary. When you define an entry (using one of the commands described in §2 Defining Terms), that entry is -automatically assigned to the default glossary, unless you indicate otherwise using the -type key. However you first need to make sure the desired glossary has been defined. -This is done using: +class="tcrm-1000">§??sec:defterm Defining Terms), that entry +is automatically assigned to the default glossary, unless you indicate otherwise using +the type key. However you first need to make sure the desired glossary has been +defined. This is done using:


    \newglossary[glgtitle⟩ is the section or chapter heading used by \printglossary or \printnoidxglossary. The other arguments indicate the file extensions used by -\printnoidxglossary. The other arguments indicate the file extensions +used by makeindex/xindy (described in §4 Displaying a List of Entries). If you use Option 1 -described above (or §??sec:printglossaries Displaying +a List of Entries). If you use Option 1 described above (or bib2gls and and +\printunsrtglossaries), then the ⟨glg⟩, ⟨gls⟩ and ⟨glo⟩ -arguments aren’t relevant, in which case you may prefer to use the starred version -where you don’t specify the extensions: +class="cmti-10">glo⟩ arguments aren’t relevant, in +which case you may prefer to use the starred version where you don’t specify the +extensions:


    \newglossary*{labelacronyms -
    +
     \newglossary[alg]{acronym}{acr}{acn}{\acronymname}
    -
    +

    The option also changes the behaviour of \newacronym so that acronyms are automatically put in the list of acronyms instead of the main glossary. The @@ -3428,10 +3510,10 @@ a list of notation:

    -
    +
      \usepackage[acronyms]{glossaries}
    - 
     \newglossary[nlg]{notation}{not}{ntn}{Notation} -
    + \newglossary[nlg]{notation}{not}{ntn}{Notation} +

    After \makeglossaries (or \makenoidxglossaries) you can define the entries in @@ -3440,36 +3522,36 @@ the preamble. For example:

    -
    +
      \newglossaryentry{gls:set}
    - 
     {% This entry goes in the `main' glossary - 
       name=set, - 
       description={A collection of distinct objects} - 
     } - 
     % This entry goes in the `acronym' glossary: - 
     \newacronym{svm}{svm}{support vector machine} - 
     \newglossaryentry{not:set} - 
     {% This entry goes in the `notation' glossary: - 
       type=notation, - 
       name={\ensuremath{\mathcal{S}}}, - 
       description={A set}, - 
       sort={S}} -
    + {% This entry goes in the `main' glossary +   name=set, +   description={A collection of distinct objects} + } + % This entry goes in the `acronym' glossary: + \newacronym{svm}{svm}{support vector machine} + \newglossaryentry{not:set} + {% This entry goes in the `notation' glossary: +   type=notation, +   name={\ensuremath{\mathcal{S}}}, +   description={A set}, +   sort={S}} +

    or if you don’t like using \ensuremath:

    -
    +
      \newglossaryentry{not:set}
    - 
     {% This entry goes in the `notation' glossary: - 
       type=notation, - 
       name={$\mathcal{S}$}, - 
       text={\mathcal{S}}, - 
       description={A set}, - 
       sort={S}} -
    + {% This entry goes in the `notation' glossary: +   type=notation, +   name={$\mathcal{S}$}, +   text={\mathcal{S}}, +   description={A set}, +   sort={S}} +

    Each glossary is displayed using:


    -
    +
      \usepackage[record,abbreviations,symbols]{glossaries-extra}
    - 
     \GlsXtrLoadResources[ - 
      src={terms}, % entries defined in terms.bib - 
      type={main}% put in main glossary - 
     ] - 
     \GlsXtrLoadResources[ - 
      src={abbrvs}, % entries defined in abbrvs.bib - 
      type={abbreviations}% put in abbreviations glossary - 
     ] - 
     \GlsXtrLoadResources[ - 
      src={syms}, % entries defined in syms.bib - 
      type={symbols}% put in symbols glossary - 
     ] -
    + \GlsXtrLoadResources[ +  src={terms}, % entries defined in terms.bib +  type={main}% put in main glossary + ] + \GlsXtrLoadResources[ +  src={abbrvs}, % entries defined in abbrvs.bib +  type={abbreviations}% put in abbreviations glossary + ] + \GlsXtrLoadResources[ +  src={syms}, % entries defined in syms.bib +  type={symbols}% put in symbols glossary + ] +

    Later in the document:

    -
    +
      \printunsrtglossary % main
    - 
     \printunsrtglossary[type=abbreviations] - 
     \printunsrtglossary[type=symbols] -
    + \printunsrtglossary[type=abbreviations] + \printunsrtglossary[type=symbols] +

    There’s a convenient shortcut that will display all the defined glossaries depending on the indexing method: @@ -3598,35 +3680,39 @@ class="cmtt-10">notation), specified using:

    -
    +
     \usepackage[acronyms]{glossaries}
    - 
    \newglossary[nlg]{notation}{not}{ntn}{Notation} -
    +\newglossary[nlg]{notation}{not}{ntn}{Notation} +

    Then (assuming your LaTeX document is in a file called myDoc.tex):

    -

    +

    +

    Option 2 Either use one makeglossaries or makeglossaries-lite call: + id="dx1-7024"> + call: -

    +

    +
          makeglossaries myDoc
    -
    +

    or

    -
    +
          makeglossaries-lite myDoc
    -
    +

    Or you need to run makeindex three times: @@ -3634,24 +3720,27 @@ class="cmtt-10">makeindex -

    + makeindex -t myDoc.alg -s myDoc.ist -o myDoc.acr myDoc.acn + makeindex -t myDoc.nlg -s myDoc.ist -o myDoc.not myDoc.ntn +

    -

    +

    +

    Option 3 Either use one makeglossaries call: -

    +

    +
          makeglossaries myDoc
    -
    +

    Or you need to run xindy three times (be careful not to insert line breaks @@ -3660,29 +3749,32 @@ class="cmtt-10">xindy -

    + -o myDoc.gls myDoc.glo + xindy  -L english -C utf8 -I xindy -M myDoc -t myDoc.alg + -o myDoc.acr myDoc.acn + xindy  -L english -C utf8 -I xindy -M myDoc -t myDoc.nlg + -o myDoc.not myDoc.ntn +

    -

    +

    +

    Option 4 With bib2gls only one call is required: -

    +

    +
          pdflatex myDoc
    -      
    bib2gls --group myDoc -  
    pdflatex myDoc -
    + bib2gls --group myDoc + pdflatex myDoc +

    (Omit --group if you don’t need letter groups.)

    @@ -3712,10 +3804,10 @@ class="cmss-10">hyperref -

    +\usepackage{glossaries} +

    If you use hyperref make sure you use PDFLaTeX rather than the LaTeX to DVI @@ -3746,11 +3838,11 @@ glossary, then do:

    -
    +
     \usepackage[colorlinks]{hyperref}
    - 
    \usepackage[acronym,nohypertypes={acronym,notation}]{glossaries} - 
    \newglossary[nlg]{notation}{not}{ntn}{Notation} -
    +\usepackage[acronym,nohypertypes={acronym,notation}]{glossaries} +\newglossary[nlg]{notation}{not}{ntn}{Notation} +

    If you want the hyperlinks suppressed the first time an entry is used, but you want hyperlinks for subsequence references then use the -

    +
     \usepackage[colorlinks]{hyperref}
    - 
    \usepackage[hyperfirst=false]{glossaries} -
    +\usepackage[hyperfirst=false]{glossaries} +

    The glossaries-extra extension package provides another method using category @@ -3791,9 +3883,9 @@ class="cmtt-10">\texorpdfstring. For example:

    -
    +
     \section{The \texorpdfstring{\gls{fishage}}{Fish Age}}
    -
    +

    However, it’s not a good idea to use commands like \gls in a section heading as you’ll end up with the table of contents page in your location list. Instead you can @@ -3810,9 +3902,9 @@ For example, the following works:

    -
    +
     \section{The \glsentrytext{fishage}}
    -
    +

    and it doesn’t put the table of contents in the location list.

    If you use glossaries-extra -

    +

    @@ -3842,21 +3934,21 @@ defined.

    -
    +
     \longnewglossaryentry{devonian}{name={Devonian}}%
    - 
    {% - 
      The geologic period spanning from the end of the - 
      Silurian Period to the beginning of the Carboniferous Period. - 
      This age was known for its remarkable variety of - 
      fish species. - 
    } - 
    \newglossaryentry{fishage} - 
    { - 
      name={Fish Age}, - 
      description={Common name for the Devonian period}, - 
      see={devonian} - 
    } -
    +{% +  The geologic period spanning from the end of the +  Silurian Period to the beginning of the Carboniferous Period. +  This age was known for its remarkable variety of +  fish species. +} +\newglossaryentry{fishage} +{ +  name={Fish Age}, +  description={Common name for the Devonian period}, +  see={devonian} +} +

    The cross-reference will appear as “see Devonian”. You can change the “see” tag using the format label⟩. For example:

    -
    +
     \newglossaryentry{latinalph}
    - 
    { - 
      name={Latin alphabet}, - 
      description={alphabet consisting of the letters - 
      a, \ldots, z, A, \ldots, Z}, - 
      see=[see also]{exlatinalph} - 
    } - 
    \newglossaryentry{exlatinalph} - 
    { - 
       name={extended Latin alphabet}, - 
       description={The Latin alphabet extended to include - 
       other letters such as ligatures or diacritics.} - 
    } -
    +{ +  name={Latin alphabet}, +  description={alphabet consisting of the letters +  a, \ldots, z, A, \ldots, Z}, +  see=[see also]{exlatinalph} +} +\newglossaryentry{exlatinalph} +{ +   name={extended Latin alphabet}, +   description={The Latin alphabet extended to include +   other letters such as ligatures or diacritics.} +} +

    If you use the see key in the optional argument of \newacronym, make sure you @@ -3891,12 +3983,12 @@ enclose the value in braces. For example:

    -
    +
     \newacronym{ksvm}{ksvm}{kernel support vector machine}
    - 
    \newacronym - 
     [see={[see also]{ksvm}}] - 
     {svm}{svm}{support vector machine} -
    +\newacronym + [see={[see also]{ksvm}}] + {svm}{svm}{support vector machine} +

    The glossaries-extra package provides a }. For example:

    -
    +
     \newabbreviation{ksvm}{ksvm}{kernel support vector machine}
    - 
    \newabbreviation - 
     [seealso={ksvm}] - 
     {svm}{svm}{support vector machine} -
    +\newabbreviation + [seealso={ksvm}] + {svm}{svm}{support vector machine} +

    Since the cross-reference appears in the location list, if you suppress the location list using the -

    +
     \usepackage[record,abbreviations,symbols]{glossaries-extra}
    - 
    \GlsXtrLoadResources[ - 
     src={terms}, % entries defined in terms.bib - 
     type={main}% put in main glossary - 
    ] - 
    \GlsXtrLoadResources[ - 
     src={abbrvs}, % entries defined in abbrvs.bib - 
     type={abbreviations},% put in abbreviations glossary - 
     save-locations=false% no number list for these entries - 
    ] - 
    \GlsXtrLoadResources[ - 
     src={syms}, % entries defined in syms.bib - 
     type={symbols}% put in symbols glossary - 
    ] -
    +\GlsXtrLoadResources[ + src={terms}, % entries defined in terms.bib + type={main}% put in main glossary +] +\GlsXtrLoadResources[ + src={abbrvs}, % entries defined in abbrvs.bib + type={abbreviations},% put in abbreviations glossary + save-locations=false% no number list for these entries +] +\GlsXtrLoadResources[ + src={syms}, % entries defined in syms.bib + type={symbols}% put in symbols glossary +] +

    @@ -3958,38 +4050,48 @@ example: href="#top">Top

    9 Further Information

    +class="cmtt-10">bib2gls application.

    The Dickimaw Books Gallery provides additional example documents. -

    +

    1deprecated, use babel instead

    +class="cmr-8">instead

    diff --git a/macros/latex/contrib/glossaries/glossariesbegin.pdf b/macros/latex/contrib/glossaries/glossariesbegin.pdf index b3fb491273..f0a162c069 100644 Binary files a/macros/latex/contrib/glossaries/glossariesbegin.pdf and b/macros/latex/contrib/glossaries/glossariesbegin.pdf differ diff --git a/macros/latex/contrib/glossaries/glossariesbegin.tex b/macros/latex/contrib/glossaries/glossariesbegin.tex index c84ff3074e..1eee3c98e9 100644 --- a/macros/latex/contrib/glossaries/glossariesbegin.tex +++ b/macros/latex/contrib/glossaries/glossariesbegin.tex @@ -35,10 +35,10 @@ \texorpdfstring{{\frenchspacing\obeyspaces\ttfamily#1}}{#1}} \newcommand*{\file}[1]{\texorpdfstring{\texttt{#1}}{#1}} -\title{The glossaries package v4.46: +\title{The glossaries package v4.47: a guide for beginners} \author{Nicola L.C. Talbot\\\href{https://www.dickimaw-books.com/}{\nolinkurl{dickimaw-books.com}}} -\date{2020-03-19} +\date{2021-09-20} \ifpdf \externaldocument{glossaries-user} diff --git a/macros/latex/contrib/glossaries/glossary2glossaries.html b/macros/latex/contrib/glossaries/glossary2glossaries.html index 409159bbde..08942de272 100644 --- a/macros/latex/contrib/glossaries/glossary2glossaries.html +++ b/macros/latex/contrib/glossaries/glossary2glossaries.html @@ -6,8 +6,8 @@ > - - + + @@ -60,15 +60,19 @@ p.indent{text-indent:0;} p + p{margin-top:1em;} p + div, p + pre {margin-top:1em;} div + p, pre + p {margin-top:1em;} +a { overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; hyphens: auto; } @media print {div.crosslinks {visibility:hidden;}} a img { border-top: 0; border-left: 0; border-right: 0; } center { margin-top:1em; margin-bottom:1em; } td center { margin-top:0em; margin-bottom:0em; } .Canvas { position:relative; } img.math{vertical-align:middle;} +div.par-math-display, div.math-display{text-align:center;} li p.indent { text-indent: 0em } li p:first-child{ margin-top:0em; } +li p:first-child{ margin-bottom; } li p:last-child, li div:last-child { margin-bottom:0.5em; } +li p:first-child{ margin-bottom:0; } li p~ul:last-child, li p~ol:last-child{ margin-bottom:0.5em; } .enumerate1 {list-style-type:decimal;} .enumerate2 {list-style-type:lower-alpha;} @@ -82,7 +86,7 @@ div.obeylines-v p { margin-top:0; margin-bottom:0; } td.displaylines {text-align:center; white-space:nowrap;} .centerline {text-align:center;} .rightline {text-align:right;} -div.verbatim {font-family: monospace,monospace; white-space: nowrap; text-align:left; clear:both; } +pre.verbatim {font-family: monospace,monospace; text-align:left; clear:both; } .fbox {padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } div.fbox {display:table} div.center div.fbox {text-align:center; clear:both; padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } @@ -144,6 +148,7 @@ table.pmatrix {width:100%;} span.bar-css {text-decoration:overline;} img.cdots{vertical-align:middle;} .partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;} +.chapterToc a, .chapterToc, .likechapterToc a, .likechapterToc, .appendixToc a, .appendixToc {line-height: 200%; font-weight:bold;} .index-item, .index-subitem, .index-subsubitem {display:block} div.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:left;} div.caption span.id{font-weight: bold; white-space: nowrap; } @@ -152,16 +157,15 @@ p.bibitem { text-indent: -2em; margin-left: 2em; margin-top:0.6em; margin-bottom p.bibitem-p { text-indent: 0em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; } .paragraphHead, .likeparagraphHead { margin-top:2em; font-weight: bold;} .subparagraphHead, .likesubparagraphHead { font-weight: bold;} -.quote {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; margin-right:1em; text-align:justify;} .verse{white-space:nowrap; margin-left:2em} div.maketitle {text-align:center;} h2.titleHead{text-align:center;} div.maketitle{ margin-bottom: 2em; } div.author, div.date {text-align:center;} div.thanks{text-align:left; margin-left:10%; font-size:85%; font-style:italic; } -.quotation {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; } -.abstract p {margin-left:5%; margin-right:5%;} +div.abstract p {margin-left:5%; margin-right:5%;} div.abstract {width:100%;} +.abstracttitle{text-align:center;margin-bottom:1em;} .warningsymbol { color: red; font-weight: bold;} div.important { border : solid red; } div.verbatim { font-family: monospace; white-space: nowrap; text-align:left; clear:both; padding-top: 2ex; padding-bottom: 2ex;} @@ -192,7 +196,7 @@ class="cmr-17">Upgrading from the glossary package to the class="cmr-17">glossaries package

    Nicola L.C. Talbot

    2020-03-19

    +class="cmr-12">2021-09-20

    -
    -

    -

    Abstract

    -

    The purpose of this document is to provide advice if you want to +

    +Abstract +

    +

    The purpose of this document is to provide advice if you want to convert convert a LaTeX document from using the obsolete glossary package to +class="cmr-9">a LaTeX document from using the obsolete glossary package to the the replacement replacement glossaries package.

    @@ -225,53 +228,53 @@ class="cmr-9">package.

    Contents

    @@ -291,17 +294,25 @@ class="cmss-10">glossaries package:

      -
    • you can define irregular plurals; -
    • -
    • glossary terms can have an associated symbol in addition to the name and +
    • +

      you can define irregular plurals; +

    • +
    • +

      glossary terms can have an associated symbol in addition to the name and description; -

    • -
    • new glossary styles are much easier to design; -
    • -
    • you can add dictionaries to supply translations for the fixed names used +

    • +
    • +

      new glossary styles are much easier to design; +

    • +
    • +

      you can add dictionaries to supply translations for the fixed names used in headings and by some of the glossary styles; -

    • -
    • you can choose
    • +
    • +

      you can choose1 between using xindyxindy means that: - - - +

        -
      • there is much better support for terms containing accented or +
      • +

        there is much better support for terms containing accented or non-Latin characters; -

      • -
      • there is support for non-standard location numbers;
      +

    • +
    • +

      there is support for non-standard location numbers;

    -
  • you don’t need to remember to escape +

    you don’t need to remember to escape makeindex’s special characters as this is done internally; -

  • -
  • hierarchical entries and homographs are +

  • +
  • +

    hierarchical entries and homographs are supported;2 -

  • -
  • there is better support for cross-referencing glossary entries; -
  • -
  • acronyms are just another glossary term which helps to maintain consistency; -
  • -
  • different acronym styles are supported. +

  • +
  • +

    there is better support for cross-referencing glossary entries; +

  • +
  • +

    acronyms are just another glossary term which helps to maintain consistency; +

  • +
  • +

    different acronym styles are supported. +

  • + + +

    glossaries package options

    1.

    -
    +
     \newglossarytype[nlg]{notation}{not}{ntn}[style=long,header]
    - 
    \newcommand{\notationname}{Index of Notation} -
    +\newcommand{\notationname}{Index of Notation} +

    You will need to replace the above two lines with:

    -
    +
     \newglossary[nlg]{notation}{not}{ntn}{Index of Notation}
    -
    +

    in the preamble and

    -
    +
     \setglossarystyle{longheader}
    -
    +

    immediately prior to displaying this glossary. Alternatively, you can specify the style using the style -

    +

    Note that the glossary title is no longer specified using \ -

    +
     \makeglossary
    - 
    \makeacronym -
    +\makeacronym +

    then you should replace both lines with the single line:

    -
    +
     \makeglossaries
    -
    +

    @@ -704,7 +724,8 @@ only used \glossary
    , then see §6.4 §??sec:csglossary \glossary.

    Substitute all instances of @@ -789,19 +810,19 @@ internally. For example, if your document contains the following:

    -
    +
     \storeglosentry{card}{name={$"|\mathcal{S}"|$},
    - 
    description={The cardinality of the set $\mathcal{S}$}} -
    +description={The cardinality of the set $\mathcal{S}$}} +

    then you will need to replace it with:

    -
    +
     \newglossaryentry{card}{name={$|\mathcal{S}|$},
    - 
    description={The cardinality of the set $\mathcal{S}$}} -
    +description={The cardinality of the set $\mathcal{S}$}} +

    The format}
    The mapping from ⟨old options⟩ to ⟨new options⟩ is the same as that given
    new options⟩ is the same as that given +§6.1 -§??sec:useglosentry \useglosentry.

    @@ -1108,27 +1130,27 @@ class="cmtt-10">\newacronym -

    +pattern recognition technique} +

    Then you would need to first set the style:

    -
    +
     \setacronymstyle{long-short-desc}
    -
    +

    and change the acronym definition to:

    -
    +
     \newacronym[description=Statistical pattern recognition
    - 
    technique]{svm}{SVM}{Support Vector Machine} -
    +technique]{svm}{SVM}{Support Vector Machine} +

    You can then reference the acronym using any of the new referencing commands, such as \glsglossary -

    +


    @@ -1227,11 +1249,11 @@ class="cmss-10">glossaries -
    +
     

    \oldacronym{SVM}{Support Vector Machine}{description=Statistical

    pattern recognition technique} -

    +


    @@ -1568,36 +1590,36 @@ say:

    -
    +
     \printglossary
    - 
    \printglossary[acronym] -
    +\printglossary[acronym] +

    or

    -
    +
     \printglossary
    - 
    \printacronym -
    +\printacronym +

    then you will need to replace this with either

    -
    +
     \printglossaries
    -
    +

    or

    -
    +
     \printglossary
    - 
    \printglossary[type=\acronymtype] -
    +\printglossary[type=\acronymtype] +

    The glossary package allows you to specify a short title (for the table of contents @@ -1618,9 +1640,9 @@ class="cmtt-10">notation, and you had defined

    -
    +
     \newcommand{\shortnotationname}{Notation}
    -
    +

    then you would need to use the toctitle key: @@ -1628,9 +1650,9 @@ class="cmss-10">toctitle -

    +

    The glossaries package will ignore \shortnotationname&1 |")) + if (not $opt_k and open (STATUS, "$cmdstr 2>&1 |")) { while () { @@ -861,7 +872,7 @@ sub run_app{ "Retrying without redirection.\n" unless ($quiet or $opt_Q); } - $status = `\"$appname\" $appargs`; + $status = `$cmdstr`; $log = $status; diff --git a/macros/latex/contrib/glossaries/makeglossaries-lite.1 b/macros/latex/contrib/glossaries/makeglossaries-lite.1 index 5497796c45..4032c86bc4 100644 --- a/macros/latex/contrib/glossaries/makeglossaries-lite.1 +++ b/macros/latex/contrib/glossaries/makeglossaries-lite.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man 4.12 (Pod::Simple 3.39) +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) .\" .\" Standard preamble: .\" ======================================================================== @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "MAKEGLOSSARIES-LITE 1" -.TH MAKEGLOSSARIES-LITE 1 "2020-03-19" "perl v5.30.1" "makeglossaries-lite Lua Script" +.TH MAKEGLOSSARIES-LITE 1 "2021-09-23" "perl v5.32.1" "makeglossaries-lite Lua Script" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l diff --git a/macros/latex/contrib/glossaries/makeglossaries-lite.lua b/macros/latex/contrib/glossaries/makeglossaries-lite.lua index 5e2272ff09..bee21d2cfc 100755 --- a/macros/latex/contrib/glossaries/makeglossaries-lite.lua +++ b/macros/latex/contrib/glossaries/makeglossaries-lite.lua @@ -36,13 +36,13 @@ Also makeglossaries and makeglossaries-lite.lua. History: - * 4.45: - - no change. - * 4.44: - - no change. - * 4.41: - - no change. - * 4.40: + * 4.47: + - Added hybrid instructions if record option detected but not \makeglossaries + - Added extra info to error message on -d + - Fixed bug #183 that occurs when \@istfilename is missing + - Only add double-quotes if text contains any spaces which + may help address issue #129 + * 4.40 - 4.46: - no change. * 4.39: - corrected script name in version and help messages @@ -68,7 +68,7 @@ - changed first line from lua to texlua --]] -thisversion = "4.45 (2020-01-18)" +thisversion = "4.47 (2021-09-20)" quiet = false dryrun = false @@ -163,6 +163,17 @@ function dorun(name, glg, gls, glo, language, codepage) end +-- v4.47 only add double-quotes if text contains any spaces +function quote_if_spaced(str) + + if string.find(str, " ") then + str = '"' .. str .. '"' + end + + return str; + +end + function doxindy(name, glg, gls, glo, language, codepage) if codepage == nil @@ -170,14 +181,14 @@ function doxindy(name, glg, gls, glo, language, codepage) codepage = "utf8" end - cmd = string.format('"%s" -I xindy -L %s -C %s -M "%s" -t "%s" -o "%s"', - xindyexec, language, codepage, styfile, glg, gls) + cmd = string.format('%s -I xindy -L %s -C %s -M %s -t %s -o %s', + quote_if_spaced(xindyexec), language, codepage, quote_if_spaced(styfile), quote_if_spaced(glg), quote_if_spaced(gls)) if letterorder then cmd = string.format('%s -M ord/letorder', cmd) end if quiet then cmd = string.format('%s -q', cmd) end - cmd = string.format('%s "%s"', cmd, glo) + cmd = string.format('%s %s', cmd, quote_if_spaced(glo)) if dryrun then @@ -194,7 +205,7 @@ end function domakeindex(name, glg, gls, glo) - cmd = string.format('"%s"', makeindex_m) + cmd = quote_if_spaced(makeindex_m) if makeindex_c then cmd = cmd .. " -c" end @@ -206,19 +217,19 @@ function domakeindex(name, glg, gls, glo) if quiet then cmd = cmd .. " -q" end - if glg ~= nil then cmd = string.format('%s -t "%s"', cmd, glg) end + if glg ~= nil then cmd = string.format('%s -t %s', cmd, quote_if_spaced(glg)) end - if gls ~= nil then cmd = string.format('%s -o "%s"', cmd, gls) end + if gls ~= nil then cmd = string.format('%s -o %s', cmd, quote_if_spaced(gls)) end if makeindex_p ~= nil then cmd = string.format("%s -p %s", cmd, makeindex_p) end if styfile ~= nil then - cmd = string.format('%s -s "%s"', cmd, styfile) + cmd = string.format('%s -s %s', cmd, quote_if_spaced(styfile)) end - cmd = string.format('%s "%s"', cmd, glo) + cmd = string.format('%s %s', cmd, quote_if_spaced(glo)) if dryrun then print(cmd) @@ -275,7 +286,7 @@ while i <= #arg do elseif arg[i] == "-d" then error(string.format( - "The '%s' option isn't available for this light-weight version.\nYou will need to use the Perl version instead.", + "The '%s' option isn't available for this light-weight version. \n(Lua doesn't natively provide a function to change directory.) \nYou will need to use the Perl version instead \nor just change directory before running this script.", arg[i])) -- Xindy Options @@ -382,15 +393,23 @@ then -- v4.36: corrected check for double-quotes styfile = string.match(aux, "\\@istfilename{([^}]*)}") - styfile = string.gsub(styfile, "\"", ""); + +-- v4.47: added check for null styfile (missing \@istfilename) + if styfile ~= nil + then + styfile = string.gsub(styfile, "\"", ""); + end if styfile == nil then if isbib2gls then +-- v4.47 added extra hybrid instructions error([[ No \@istfilename found but found \glsxtr@resource. You need to run bib2gls not makeglossaries-lite. +If you have used record=alsoindex or record=hybrid +then add \makeglossaries to your preamble. ]]) else error([[ diff --git a/macros/latex/contrib/glossaries/makeglossaries.1 b/macros/latex/contrib/glossaries/makeglossaries.1 index 029cd23a56..00b3dc50c7 100644 --- a/macros/latex/contrib/glossaries/makeglossaries.1 +++ b/macros/latex/contrib/glossaries/makeglossaries.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man 4.12 (Pod::Simple 3.39) +.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) .\" .\" Standard preamble: .\" ======================================================================== @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "MAKEGLOSSARIES 1" -.TH MAKEGLOSSARIES 1 "2020-03-19" "perl v5.30.1" "makeglossaries Perl Script" +.TH MAKEGLOSSARIES 1 "2021-09-23" "perl v5.32.1" "makeglossaries Perl Script" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l diff --git a/macros/latex/contrib/glossaries/samples/glossary-lipsum-examples.pdf b/macros/latex/contrib/glossaries/samples/glossary-lipsum-examples.pdf index 4ede660f69..1a65598f02 100644 Binary files a/macros/latex/contrib/glossaries/samples/glossary-lipsum-examples.pdf and b/macros/latex/contrib/glossaries/samples/glossary-lipsum-examples.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/minimalgls.pdf b/macros/latex/contrib/glossaries/samples/minimalgls.pdf index 0f9932375f..640631a1eb 100644 Binary files a/macros/latex/contrib/glossaries/samples/minimalgls.pdf and b/macros/latex/contrib/glossaries/samples/minimalgls.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/mwe-acr-desc.pdf b/macros/latex/contrib/glossaries/samples/mwe-acr-desc.pdf index bc356403a9..33500b13b0 100644 Binary files a/macros/latex/contrib/glossaries/samples/mwe-acr-desc.pdf and b/macros/latex/contrib/glossaries/samples/mwe-acr-desc.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/mwe-acr.pdf b/macros/latex/contrib/glossaries/samples/mwe-acr.pdf index 1f007570c0..72a102b1a5 100644 Binary files a/macros/latex/contrib/glossaries/samples/mwe-acr.pdf and b/macros/latex/contrib/glossaries/samples/mwe-acr.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/mwe-gls.pdf b/macros/latex/contrib/glossaries/samples/mwe-gls.pdf index e965ca4065..f369987cd7 100644 Binary files a/macros/latex/contrib/glossaries/samples/mwe-gls.pdf and b/macros/latex/contrib/glossaries/samples/mwe-gls.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sample-FnDesc.pdf b/macros/latex/contrib/glossaries/samples/sample-FnDesc.pdf index 7ab3c2b318..5aff90266f 100644 Binary files a/macros/latex/contrib/glossaries/samples/sample-FnDesc.pdf and b/macros/latex/contrib/glossaries/samples/sample-FnDesc.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sample-chap-hyperfirst.pdf b/macros/latex/contrib/glossaries/samples/sample-chap-hyperfirst.pdf index eed73e8ade..9e6d071e44 100644 Binary files a/macros/latex/contrib/glossaries/samples/sample-chap-hyperfirst.pdf and b/macros/latex/contrib/glossaries/samples/sample-chap-hyperfirst.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sample-crossref.pdf b/macros/latex/contrib/glossaries/samples/sample-crossref.pdf index c8c6109af8..f3cb6b7e2b 100644 Binary files a/macros/latex/contrib/glossaries/samples/sample-crossref.pdf and b/macros/latex/contrib/glossaries/samples/sample-crossref.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sample-custom-acronym.pdf b/macros/latex/contrib/glossaries/samples/sample-custom-acronym.pdf index 431e2b1f12..4a5a72f4b1 100644 Binary files a/macros/latex/contrib/glossaries/samples/sample-custom-acronym.pdf and b/macros/latex/contrib/glossaries/samples/sample-custom-acronym.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sample-dot-abbr.pdf b/macros/latex/contrib/glossaries/samples/sample-dot-abbr.pdf index a133b10a59..c7516f95b5 100644 Binary files a/macros/latex/contrib/glossaries/samples/sample-dot-abbr.pdf and b/macros/latex/contrib/glossaries/samples/sample-dot-abbr.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sample-dual.pdf b/macros/latex/contrib/glossaries/samples/sample-dual.pdf index 1641d2035a..a3efd9a6ee 100644 Binary files a/macros/latex/contrib/glossaries/samples/sample-dual.pdf and b/macros/latex/contrib/glossaries/samples/sample-dual.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sample-entrycount.pdf b/macros/latex/contrib/glossaries/samples/sample-entrycount.pdf index c0809e795c..df1ff6c742 100644 Binary files a/macros/latex/contrib/glossaries/samples/sample-entrycount.pdf and b/macros/latex/contrib/glossaries/samples/sample-entrycount.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sample-entryfmt.pdf b/macros/latex/contrib/glossaries/samples/sample-entryfmt.pdf index e3cfdc9f90..f2c2bfcfad 100644 Binary files a/macros/latex/contrib/glossaries/samples/sample-entryfmt.pdf and b/macros/latex/contrib/glossaries/samples/sample-entryfmt.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sample-font-abbr.pdf b/macros/latex/contrib/glossaries/samples/sample-font-abbr.pdf index 03b437a0ff..d066d60284 100644 Binary files a/macros/latex/contrib/glossaries/samples/sample-font-abbr.pdf and b/macros/latex/contrib/glossaries/samples/sample-font-abbr.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sample-ignored.pdf b/macros/latex/contrib/glossaries/samples/sample-ignored.pdf index 0e67c7f41f..11b1229470 100644 Binary files a/macros/latex/contrib/glossaries/samples/sample-ignored.pdf and b/macros/latex/contrib/glossaries/samples/sample-ignored.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sample-index.pdf b/macros/latex/contrib/glossaries/samples/sample-index.pdf index eaa8b2cdd2..6a9b34124c 100644 Binary files a/macros/latex/contrib/glossaries/samples/sample-index.pdf and b/macros/latex/contrib/glossaries/samples/sample-index.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sample-inline.pdf b/macros/latex/contrib/glossaries/samples/sample-inline.pdf index 14a6b5a2f6..e814486676 100644 Binary files a/macros/latex/contrib/glossaries/samples/sample-inline.pdf and b/macros/latex/contrib/glossaries/samples/sample-inline.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sample-langdict.pdf b/macros/latex/contrib/glossaries/samples/sample-langdict.pdf index 28ac311328..af1555e9ff 100644 Binary files a/macros/latex/contrib/glossaries/samples/sample-langdict.pdf and b/macros/latex/contrib/glossaries/samples/sample-langdict.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sample-newkeys.pdf b/macros/latex/contrib/glossaries/samples/sample-newkeys.pdf index c93fb606af..cbce49de84 100644 Binary files a/macros/latex/contrib/glossaries/samples/sample-newkeys.pdf and b/macros/latex/contrib/glossaries/samples/sample-newkeys.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sample-noidxapp-utf8.pdf b/macros/latex/contrib/glossaries/samples/sample-noidxapp-utf8.pdf index 509a5f4703..f22c15d4c9 100644 Binary files a/macros/latex/contrib/glossaries/samples/sample-noidxapp-utf8.pdf and b/macros/latex/contrib/glossaries/samples/sample-noidxapp-utf8.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sample-noidxapp.pdf b/macros/latex/contrib/glossaries/samples/sample-noidxapp.pdf index 683c4ed8f2..573100d011 100644 Binary files a/macros/latex/contrib/glossaries/samples/sample-noidxapp.pdf and b/macros/latex/contrib/glossaries/samples/sample-noidxapp.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sample-nomathhyper.pdf b/macros/latex/contrib/glossaries/samples/sample-nomathhyper.pdf index 1caec7d491..89136e7228 100644 Binary files a/macros/latex/contrib/glossaries/samples/sample-nomathhyper.pdf and b/macros/latex/contrib/glossaries/samples/sample-nomathhyper.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sample-numberlist.pdf b/macros/latex/contrib/glossaries/samples/sample-numberlist.pdf index 734c0abc0e..06f90a7d64 100644 Binary files a/macros/latex/contrib/glossaries/samples/sample-numberlist.pdf and b/macros/latex/contrib/glossaries/samples/sample-numberlist.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sample-prefix.pdf b/macros/latex/contrib/glossaries/samples/sample-prefix.pdf index 4310008784..437a5ffbc9 100644 Binary files a/macros/latex/contrib/glossaries/samples/sample-prefix.pdf and b/macros/latex/contrib/glossaries/samples/sample-prefix.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sample-si.pdf b/macros/latex/contrib/glossaries/samples/sample-si.pdf index bf51182aec..b64598dd6d 100644 Binary files a/macros/latex/contrib/glossaries/samples/sample-si.pdf and b/macros/latex/contrib/glossaries/samples/sample-si.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sample-storage-abbr-desc.pdf b/macros/latex/contrib/glossaries/samples/sample-storage-abbr-desc.pdf index 0791bedabb..630fcf10f3 100644 Binary files a/macros/latex/contrib/glossaries/samples/sample-storage-abbr-desc.pdf and b/macros/latex/contrib/glossaries/samples/sample-storage-abbr-desc.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sample-storage-abbr.pdf b/macros/latex/contrib/glossaries/samples/sample-storage-abbr.pdf index 5b9c99c628..d556c94e3b 100644 Binary files a/macros/latex/contrib/glossaries/samples/sample-storage-abbr.pdf and b/macros/latex/contrib/glossaries/samples/sample-storage-abbr.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sample.pdf b/macros/latex/contrib/glossaries/samples/sample.pdf index 96c5e7362b..29e713d287 100644 Binary files a/macros/latex/contrib/glossaries/samples/sample.pdf and b/macros/latex/contrib/glossaries/samples/sample.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sample4col.pdf b/macros/latex/contrib/glossaries/samples/sample4col.pdf index d8ed5cf314..dd7fe8e2c6 100644 Binary files a/macros/latex/contrib/glossaries/samples/sample4col.pdf and b/macros/latex/contrib/glossaries/samples/sample4col.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sampleAcr.pdf b/macros/latex/contrib/glossaries/samples/sampleAcr.pdf index 28ae1c1320..1bd305864b 100644 Binary files a/macros/latex/contrib/glossaries/samples/sampleAcr.pdf and b/macros/latex/contrib/glossaries/samples/sampleAcr.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sampleAcrDesc.pdf b/macros/latex/contrib/glossaries/samples/sampleAcrDesc.pdf index 4c3995525e..44ef7fb5be 100644 Binary files a/macros/latex/contrib/glossaries/samples/sampleAcrDesc.pdf and b/macros/latex/contrib/glossaries/samples/sampleAcrDesc.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sampleCustomAcr.pdf b/macros/latex/contrib/glossaries/samples/sampleCustomAcr.pdf index a2118b973b..9e6af363a3 100644 Binary files a/macros/latex/contrib/glossaries/samples/sampleCustomAcr.pdf and b/macros/latex/contrib/glossaries/samples/sampleCustomAcr.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sampleDB.pdf b/macros/latex/contrib/glossaries/samples/sampleDB.pdf index 0c677ce3ff..bf24d05cad 100644 Binary files a/macros/latex/contrib/glossaries/samples/sampleDB.pdf and b/macros/latex/contrib/glossaries/samples/sampleDB.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sampleDesc.pdf b/macros/latex/contrib/glossaries/samples/sampleDesc.pdf index 0a649ea48c..e88a539966 100644 Binary files a/macros/latex/contrib/glossaries/samples/sampleDesc.pdf and b/macros/latex/contrib/glossaries/samples/sampleDesc.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sampleEq.pdf b/macros/latex/contrib/glossaries/samples/sampleEq.pdf index da5b1210ec..9a4bd3cac5 100644 Binary files a/macros/latex/contrib/glossaries/samples/sampleEq.pdf and b/macros/latex/contrib/glossaries/samples/sampleEq.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sampleEqPg.pdf b/macros/latex/contrib/glossaries/samples/sampleEqPg.pdf index 4ea1b17797..aba5a2c89b 100644 Binary files a/macros/latex/contrib/glossaries/samples/sampleEqPg.pdf and b/macros/latex/contrib/glossaries/samples/sampleEqPg.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sampleFnAcrDesc.pdf b/macros/latex/contrib/glossaries/samples/sampleFnAcrDesc.pdf index e8a47def42..6c2291ada3 100644 Binary files a/macros/latex/contrib/glossaries/samples/sampleFnAcrDesc.pdf and b/macros/latex/contrib/glossaries/samples/sampleFnAcrDesc.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sampleNtn.pdf b/macros/latex/contrib/glossaries/samples/sampleNtn.pdf index 076ad52791..e339d2a91c 100644 Binary files a/macros/latex/contrib/glossaries/samples/sampleNtn.pdf and b/macros/latex/contrib/glossaries/samples/sampleNtn.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/samplePeople.pdf b/macros/latex/contrib/glossaries/samples/samplePeople.pdf index b8b2b11295..4b56859d0c 100644 Binary files a/macros/latex/contrib/glossaries/samples/samplePeople.pdf and b/macros/latex/contrib/glossaries/samples/samplePeople.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sampleSec.pdf b/macros/latex/contrib/glossaries/samples/sampleSec.pdf index d06551a306..b7683a71d6 100644 Binary files a/macros/latex/contrib/glossaries/samples/sampleSec.pdf and b/macros/latex/contrib/glossaries/samples/sampleSec.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sampleSort.pdf b/macros/latex/contrib/glossaries/samples/sampleSort.pdf index d3dcdfada9..916bdd25bc 100644 Binary files a/macros/latex/contrib/glossaries/samples/sampleSort.pdf and b/macros/latex/contrib/glossaries/samples/sampleSort.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sampleaccsupp.pdf b/macros/latex/contrib/glossaries/samples/sampleaccsupp.pdf index c955313619..0a00240e25 100644 Binary files a/macros/latex/contrib/glossaries/samples/sampleaccsupp.pdf and b/macros/latex/contrib/glossaries/samples/sampleaccsupp.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sampleacronyms.pdf b/macros/latex/contrib/glossaries/samples/sampleacronyms.pdf index dc7db40a49..f04927587e 100644 Binary files a/macros/latex/contrib/glossaries/samples/sampleacronyms.pdf and b/macros/latex/contrib/glossaries/samples/sampleacronyms.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sampletree.pdf b/macros/latex/contrib/glossaries/samples/sampletree.pdf index 48099f51e5..ce9e4cb360 100644 Binary files a/macros/latex/contrib/glossaries/samples/sampletree.pdf and b/macros/latex/contrib/glossaries/samples/sampletree.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/sampleutf8.pdf b/macros/latex/contrib/glossaries/samples/sampleutf8.pdf index aa19448f78..d99b3536f8 100644 Binary files a/macros/latex/contrib/glossaries/samples/sampleutf8.pdf and b/macros/latex/contrib/glossaries/samples/sampleutf8.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/samplexdy.pdf b/macros/latex/contrib/glossaries/samples/samplexdy.pdf index 6b67853660..1346e57359 100644 Binary files a/macros/latex/contrib/glossaries/samples/samplexdy.pdf and b/macros/latex/contrib/glossaries/samples/samplexdy.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/samplexdy2.pdf b/macros/latex/contrib/glossaries/samples/samplexdy2.pdf index 340c46cd7b..61a1b71e7c 100644 Binary files a/macros/latex/contrib/glossaries/samples/samplexdy2.pdf and b/macros/latex/contrib/glossaries/samples/samplexdy2.pdf differ diff --git a/macros/latex/contrib/glossaries/samples/samplexdy3.pdf b/macros/latex/contrib/glossaries/samples/samplexdy3.pdf index acf90a1303..6724b925bd 100644 Binary files a/macros/latex/contrib/glossaries/samples/samplexdy3.pdf and b/macros/latex/contrib/glossaries/samples/samplexdy3.pdf differ diff --git a/macros/latex/contrib/hvfloat/Changes b/macros/latex/contrib/hvfloat/Changes index b7466e9816..7f4f422ce2 100644 --- a/macros/latex/contrib/hvfloat/Changes +++ b/macros/latex/contrib/hvfloat/Changes @@ -1,4 +1,5 @@ hvfloat.sty: +2.34 2021-09-23 - fix for nonFloat and forceOutput 2.33 2021-07-14 - fix for doublePAGE, needs length setting inside the macro 2.32 2021-06-29 - make multi and multisubflots caption align with the bottom - added graphicx option doublefullPage diff --git a/macros/latex/contrib/hvfloat/doc/examples/after1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/after1s1c.pdf index 40854d1f72..d74d1e268e 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/after1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/after1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/after2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/after2s2c.pdf index 6a3f002998..9567c26d36 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/after2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/after2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/capPos.pdf b/macros/latex/contrib/hvfloat/doc/examples/capPos.pdf index 630a337a53..072c584f82 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/capPos.pdf and b/macros/latex/contrib/hvfloat/doc/examples/capPos.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/default1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/default1s1c.pdf index 861efc9ac7..ff8eec9e74 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/default1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/default1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/default1s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/default1s2c.pdf index 60e3cb94ca..752c54810d 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/default1s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/default1s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/default2s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/default2s1c.pdf index 33ac8dd876..6ac3baf5ad 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/default2s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/default2s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/default2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/default2s2c.pdf index 1291839ce8..388cf97645 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/default2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/default2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/doublepage2s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/doublepage2s1c.pdf index 0d3e2713ef..dd444dd08a 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/doublepage2s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/doublepage2s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/doublepage2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/doublepage2s2c.pdf index 1578d673ff..7aa01b02f8 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/doublepage2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/doublepage2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/even1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/even1s1c.pdf index 7be7a1cb5b..cc6273ead8 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/even1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/even1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/even1s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/even1s2c.pdf index e98663ed09..eb062f70e2 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/even1s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/even1s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/even2s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/even2s1c.pdf index 09a417c031..4f86812e09 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/even2s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/even2s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/even2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/even2s2c.pdf index e2898a14ae..263b9afc8a 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/even2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/even2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/fullpage1s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/fullpage1s2c.pdf index e0e787f994..9cdd2ea882 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/fullpage1s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/fullpage1s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/inner1s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/inner1s2c.pdf index 73a49d0a07..05ac77f5dd 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/inner1s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/inner1s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/inner2s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/inner2s1c.pdf index 3cd80ae131..200ac470d6 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/inner2s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/inner2s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/inner2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/inner2s2c.pdf index 6b794b3732..94d1d37488 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/inner2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/inner2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/left2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/left2s2c.pdf index 4e6b0cfae7..406285913d 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/left2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/left2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/multi-after1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/multi-after1s1c.pdf index bc345dc15b..6db4613d89 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/multi-after1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/multi-after1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/multi-default1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/multi-default1s1c.pdf index e37e60e626..16b1cbfb19 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/multi-default1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/multi-default1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/multi-default1s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/multi-default1s2c.pdf index 614b2fcf30..a4c58d96b9 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/multi-default1s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/multi-default1s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/multi-default2s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/multi-default2s1c.pdf index e2ec474cb7..b955807071 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/multi-default2s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/multi-default2s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/multi-default2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/multi-default2s2c.pdf index 23fdd5f04f..75107f1a34 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/multi-default2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/multi-default2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/multi-inner2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/multi-inner2s2c.pdf index 3f79249b52..4370c39d84 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/multi-inner2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/multi-inner2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/multi-outer2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/multi-outer2s2c.pdf index 7ebd9bd69a..164dc77f64 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/multi-outer2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/multi-outer2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/multi-right1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/multi-right1s1c.pdf index 23f3c0b60c..1c3c610031 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/multi-right1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/multi-right1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/odd1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/odd1s1c.pdf index 9a8f796d02..fe0ca31256 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/odd1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/odd1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/odd1s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/odd1s1c.tex index 2d93d7b2b5..dfce04c36b 100644 --- a/macros/latex/contrib/hvfloat/doc/examples/odd1s1c.tex +++ b/macros/latex/contrib/hvfloat/doc/examples/odd1s1c.tex @@ -1,5 +1,5 @@ \documentclass{scrartcl} -%% $Id: odd1s1c.tex 119 2021-06-20 13:28:09Z herbert $ +%% $Id: odd1s1c.tex 72 2021-05-02 11:40:10Z herbert $ \input{preamble.ltx} diff --git a/macros/latex/contrib/hvfloat/doc/examples/odd1s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/odd1s2c.pdf index eae0be6b8d..c24ac2fa55 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/odd1s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/odd1s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/odd2s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/odd2s1c.pdf index ef5b9fd7ab..a357bdc1e1 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/odd2s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/odd2s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/odd2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/odd2s2c.pdf index 6aa3ac83cf..d7a49ea30d 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/odd2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/odd2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/outer1s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/outer1s2c.pdf index c6676e1291..ca7e1e56ec 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/outer1s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/outer1s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/outer2s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/outer2s1c.pdf index a7d55f4c80..323011e26f 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/outer2s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/outer2s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/outer2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/outer2s2c.pdf index 204d0dad65..11003f09da 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/outer2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/outer2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-after1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/paper-after1s1c.pdf index a65718b90a..495d644d55 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/paper-after1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/paper-after1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-default1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/paper-default1s1c.pdf index fd27f7ca54..443aae8d5f 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/paper-default1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/paper-default1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-default1s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/paper-default1s2c.pdf index 6e06341ad5..bba76eb320 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/paper-default1s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/paper-default1s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-default2s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/paper-default2s1c.pdf deleted file mode 100644 index c9cd842897..0000000000 Binary files a/macros/latex/contrib/hvfloat/doc/examples/paper-default2s1c.pdf and /dev/null differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-default2s1c.tex b/macros/latex/contrib/hvfloat/doc/examples/paper-default2s1c.tex deleted file mode 100644 index 4db0220481..0000000000 --- a/macros/latex/contrib/hvfloat/doc/examples/paper-default2s1c.tex +++ /dev/null @@ -1,81 +0,0 @@ -\documentclass{scrartcl} -%% $Id: paper-default2s2c.tex 72 2021-05-02 11:40:10Z herbert $ - -\input{preamble.ltx} -\setlength\columnseprule{0.4pt} - -\begin{document} -\title{Example for FULLPAGE floats} -\author{Herbert Voß} -\maketitle - -\tableofcontents - -\blinddocument - -\section{File \texttt{\jobname}} - -\begin{lstlisting} -The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-cap}. -\end{lstlisting} - -The FULLPAGE image~\vref{fig:FULLPAGE0} has a caption~\vpageref{fig:FULLPAGE0-cap}. - -\begin{lstlisting} -\hvFloat*[FULLPAGE]% - {figure}% - {\includegraphics[FULLPAGE]{frose}}% - [A FULLPAGE float with the default caption setting]% - {A default caption of a ``FULLPAGE'' object with the default setting, which - is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no - real meaning because it fills only the space for a long caption.}% - {fig:FULLPAGE0} -\end{lstlisting} - - -\Float[default] -\hvFloat*[FULLPAGE]% - {figure}% - {\includegraphics[FULLPAGE]{frose}}% - [A FULLPAGE float with the default caption setting]% - {A default caption of a ``FULLPAGE'' object with the default setting, which - is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no - real meaning because it fills only the space for a long caption.}% - {fig:FULLPAGE0} - -\blinddocument - -\begin{lstlisting} -\hvFloat*[FULLPAGE]% - {figure}% - {\includegraphics[FULLPAGE]{frose}}% - [A FULLPAGE float with the default caption setting]% - {A default caption of a ``FULLPAGE'' object with the default setting, which - is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no - real meaning because it fills only the space for a long caption.}% - {fig:FULLPAGE1} -\end{lstlisting} - - -\Float[default] -\hvFloat*[FULLPAGE]% - {figure}% - {\includegraphics[FULLPAGE]{frose}}% - [A FULLPAGE float with the default caption setting]% - {A default caption of a ``FULLPAGE'' object with the default setting, which - is a ``left'' caption which means that it always appears before the object. - This can be an even or odd page. And some more text whch has no - real meaning because it fills only the space for a long caption.}% - {fig:FULLPAGE1} - -\blinddocument - -\Blindtext - -\blindtext - - -\end{document} \ No newline at end of file diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-default2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/paper-default2s2c.pdf index 330a7425ca..e86b9e6674 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/paper-default2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/paper-default2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-inner2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/paper-inner2s2c.pdf index b0792355fb..56253d38e2 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/paper-inner2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/paper-inner2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/paper-right1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/paper-right1s1c.pdf index 5ed8ec5a71..daca3967b6 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/paper-right1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/paper-right1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/right1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/right1s1c.pdf index c6c6bd27bd..8c43e8c1f0 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/right1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/right1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/right1s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/right1s2c.pdf index dfd03e566c..954f63954d 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/right1s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/right1s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/right2s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/right2s1c.pdf index dbb63e5fac..037f72ae10 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/right2s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/right2s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/right2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/right2s2c.pdf index e269a747a3..2fecbfbe05 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/right2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/right2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/sub-after1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/sub-after1s1c.pdf index f75bb23f56..d2391f0870 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/sub-after1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/sub-after1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/sub-after2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/sub-after2s2c.pdf index 00554afc00..a23af6e14d 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/sub-after2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/sub-after2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/sub-default1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/sub-default1s1c.pdf index efea15759c..83d13d7824 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/sub-default1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/sub-default1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/sub-default1s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/sub-default1s2c.pdf index 8d48919902..b5e7ae13b8 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/sub-default1s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/sub-default1s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/sub-default2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/sub-default2s2c.pdf index 84ab3d56cc..026910949f 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/sub-default2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/sub-default2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/sub-right1s1c.pdf b/macros/latex/contrib/hvfloat/doc/examples/sub-right1s1c.pdf index b319265630..68d689fca0 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/sub-right1s1c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/sub-right1s1c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/sub-right1s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/sub-right1s2c.pdf index 72ca919045..d67a0f806a 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/sub-right1s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/sub-right1s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/sub-right2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/sub-right2s2c.pdf index 23e0a03ee7..6456d85628 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/sub-right2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/sub-right2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/wide1s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/wide1s2c.pdf index b81fedc701..6ee1ea42d1 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/wide1s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/wide1s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/examples/wide2s2c.pdf b/macros/latex/contrib/hvfloat/doc/examples/wide2s2c.pdf index a95470d1eb..a12ef0d594 100644 Binary files a/macros/latex/contrib/hvfloat/doc/examples/wide2s2c.pdf and b/macros/latex/contrib/hvfloat/doc/examples/wide2s2c.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/hvfloat.pdf b/macros/latex/contrib/hvfloat/doc/hvfloat.pdf index 66228e90ca..cfbc05583e 100644 Binary files a/macros/latex/contrib/hvfloat/doc/hvfloat.pdf and b/macros/latex/contrib/hvfloat/doc/hvfloat.pdf differ diff --git a/macros/latex/contrib/hvfloat/doc/images/felsen-wasser-small.pdf b/macros/latex/contrib/hvfloat/doc/images/felsen-wasser-small.pdf deleted file mode 100644 index 44f19b9258..0000000000 Binary files a/macros/latex/contrib/hvfloat/doc/images/felsen-wasser-small.pdf and /dev/null differ diff --git a/macros/latex/contrib/hvfloat/doc/images/missing.txt b/macros/latex/contrib/hvfloat/doc/images/missing.txt deleted file mode 100644 index c10e55ce9c..0000000000 --- a/macros/latex/contrib/hvfloat/doc/images/missing.txt +++ /dev/null @@ -1,4 +0,0 @@ -Not all images of the documentation are listed here, because -some are not for public use. You can use any other image if you -want to run the documentation by yourselve. - diff --git a/macros/latex/contrib/hvfloat/doc/images/sonne-meer.jpg b/macros/latex/contrib/hvfloat/doc/images/sonne-meer.jpg deleted file mode 100644 index e0e4b910a7..0000000000 Binary files a/macros/latex/contrib/hvfloat/doc/images/sonne-meer.jpg and /dev/null differ diff --git a/macros/latex/contrib/hvfloat/latex/hvfloat-fps.sty b/macros/latex/contrib/hvfloat/latex/hvfloat-fps.sty index a86244b9e5..0090e80f5f 100644 --- a/macros/latex/contrib/hvfloat/latex/hvfloat-fps.sty +++ b/macros/latex/contrib/hvfloat/latex/hvfloat-fps.sty @@ -1,4 +1,4 @@ -%% $Id: hvfloat-fps.sty 121 2021-06-20 13:36:11Z herbert $ +%% $Id: hvfloat-fps.sty 120 2021-06-20 13:31:02Z herbert $ %% \NeedsTeXFormat{LaTeX2e} %% diff --git a/macros/latex/contrib/hvfloat/latex/hvfloat.sty b/macros/latex/contrib/hvfloat/latex/hvfloat.sty index 4d9e265b62..e0a378d28f 100644 --- a/macros/latex/contrib/hvfloat/latex/hvfloat.sty +++ b/macros/latex/contrib/hvfloat/latex/hvfloat.sty @@ -1,4 +1,4 @@ -%% $Id: hvfloat.sty 126 2021-06-29 12:56:04Z herbert $ +%% $Id: hvfloat.sty 257 2021-09-23 11:44:35Z herbert $ %% %% %% IMPORTANT NOTICE: @@ -15,8 +15,8 @@ %% `hvfloat' offers rotating of captions and objects for floats %% \NeedsTeXFormat{LaTeX2e} -\def\fileversion{2.33} -\def\filedate{2021/07/14} +\def\fileversion{2.34} +\def\filedate{2021/09/23} %\message{`hvfloat' v\fileversion, \filedate\space (Herbert Voss)} \ProvidesPackage{hvfloat}[\filedate\space v\fileversion\space special floating objects (hv)] \let\hvFloatFileVersion\fileversion @@ -180,6 +180,7 @@ \newif\ifhv@doublePage \newif\ifhv@setObjectLabel \newif\ifhv@global@sameHeight +\newif\ifhv@forceOutput \newlength\hvSet@bindCorrection \newlength\hvSet@sepLineskip @@ -195,7 +196,7 @@ \define@key{hvSet}{doubleFULLPAGE}[true]{\global\@nameuse{hv@doubleFULLPAGE#1}\hv@doublePagefalse\hv@doublePAGEfalse} \define@key{hvSet}{doublePAGE}[true]{\global\@nameuse{hv@doublePAGE#1}\hv@doublePagefalse\hv@doubleFULLPAGEfalse} \define@key{hvSet}{doublePage}[true]{\global\@nameuse{hv@doublePage#1}\hv@doublePAGEfalse\hv@doubleFULLPAGEfalse} -\define@key{hvSet}{bindCorr}[0]{% +\define@key{hvSet}{bindCorr}[0pt]{% \def\hv@temp{#1}% \ifx\hv@temp\hv@Inner \setlength\hvSet@bindCorr{\dimexpr1in+\oddsidemargin}% @@ -225,6 +226,8 @@ } \define@key{hvSet}{capFormat}{\def\hv@caption@format{#1}}% \define@key{hvSet}{subcapFormat}{\def\hv@subcaption@format{#1}}% +\define@boolkey{hvSet}[hv@]{forceOutput}[true]{% + \ifhv@forceOutput\hv@nonFloattrue\fi}% immediate output, no floating! \def\hv@set#1{\begingroup\edef\x{\endgroup\noexpand\setkeys{hvSet}{#1}}\x} \let\hvFloatSet\hv@set @@ -236,7 +239,7 @@ \hv@set{% floatPos=, rotAngle=0, capWidth=n, capAngle=0, objectAngle=0, capPos=bottom, capVPos=center, objectPos=center, allHPos=center, - floatCapSep=5pt, useOBox=false, nonFloat=false, + floatCapSep=5pt, useOBox=false, onlyText=false, wide=false, fullpage=false, FULLPAGE=false, doubleFULLPAGE=false, doublePage=false, doublePAGE=false, multiFloat=false,subFloat=false, @@ -245,10 +248,12 @@ sameHeight=false, bindCorr=\z@,sepLineskip=0pt, vFill=false, minTextlines=2, + forceOutput=false, nonFloat=false, }% } \let\hvFloatSetDefaults\setDefaults +\hvFloatSetDefaults% onyl for first loading of the package \newcommand\hv@typeout[1]{\ifhv@Debug\typeout{>>>> #1}\fi} @@ -452,6 +457,7 @@ % #6: label % + \def\hvFloat{\@ifnextchar*% Main macro {\global\hv@startrue\hv@maxImageWidth=\textwidth\hvFloat@i}% {\global\hv@starfalse\hv@maxImageWidth=\columnwidth\hvFloat@i*}% @@ -1091,6 +1097,9 @@ \fi \fi \hv@typeout{do@hvFloat@doublePage:hv@tempWidthA=\the\hv@tempWidthA}% + \ifhv@forceOutput + \do@hvFloat@doublePAGECaptionRight{#1}% no cheque + \else \checkoddpage \ifoddpage \if@twocolumn @@ -1142,6 +1151,7 @@ \fi \fi \let\c@fptop\hv@fptop + \fi \endgroup% started at main macro \hvFloat } % @@ -1465,10 +1475,14 @@ \expandafter\hvFloatSet\expandafter{\hv@save@setting}% \ifhv@separatorLine\drawSepLine\fi % \expandafter\captionsetup\expandafter{\hv@caption@format}% - \ifx\hv@shortCap\@empty - \captionof{\hv@floatType}{\hv@longCap}% + \ifhv@onlyText + \hv@longCap \else - \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap}% + \ifx\hv@shortCap\@empty + \captionof{\hv@floatType}{\hv@longCap}% + \else + \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap}% + \fi \fi \ifx\hv@label\@empty\else\label{\hv@label-cap}\fi \end{\hv@floatType}% @@ -1478,10 +1492,14 @@ \expandafter\hvFloatSet\expandafter{\hv@save@setting}% \ifhv@separatorLine\drawSepLine\fi % \expandafter\captionsetup\expandafter{\hv@caption@format}% - \ifx\hv@shortCap\@empty - \captionof{\hv@floatType}{\hv@longCap}% + \ifhv@onlyText + \hv@longCap \else - \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap}% + \ifx\hv@shortCap\@empty + \captionof{\hv@floatType}{\hv@longCap}% + \else + \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap}% + \fi \fi \ifx\hv@label\@empty\else\label{\hv@label-cap}\fi \end{\hv@floatType*}% @@ -1535,8 +1553,8 @@ \refstepcounter{hv@tempCNTtabA}% before caption \fi \ifx\hv@label\@empty\else\label{\hv@label}\fi -% \afterpage{% - \newpage\if@twocolumn\null\newpage\fi + \newpage + \if@twocolumn\null\newpage\fi \global\savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}% \thispagestyle{empty}% \vspace*{\the\dimexpr-1in-\voffset-\topmargin-\headheight-\headsep-\baselineskip+2\lineskip}% -0.5\paperheight+0.5\ht\hvObjectBox @@ -1553,14 +1571,18 @@ \begin{\hv@floatType}[!b] \ifhv@separatorLine\drawSepLine\fi % \expandafter\captionsetup\expandafter{\hv@caption@format}% - \ifx\hv@shortCap\@empty - \captionof{\hv@floatType}{\hv@longCap}% + \ifhv@onlyText + \hv@longCap \else - \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap}% + \ifx\hv@shortCap\@empty + \captionof{\hv@floatType}{\hv@longCap}% + \else + \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap}% + \fi \fi \ifx\hv@label\@empty\else\label{\hv@label-cap}\fi \end{\hv@floatType}% - }%}% + }% } \def\do@hvFloat@doubleFULLPAGE@CaptionAfterTwoCol{% @@ -1594,10 +1616,14 @@ \hv@twoColumnCaptiontrue \ifhv@separatorLine\drawSepLine\fi % \expandafter\captionsetup\expandafter{\hv@caption@format}% - \ifx\hv@shortCap\@empty - \captionof{\hv@floatType}{\hv@longCap}% + \ifhv@onlyText + \hv@longCap \else - \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap}% + \ifx\hv@shortCap\@empty + \captionof{\hv@floatType}{\hv@longCap}% + \else + \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap}% + \fi \fi \ifx\hv@label\@empty\else\label{\hv@label-cap}\fi \end{\hv@floatType*}% @@ -1638,20 +1664,28 @@ \ifdim\hv@tempWidthB < 2\paperwidth \rotatebox[origin=lb]{90}{\makebox[\paperheight][c]{\parbox{0.8\ht\hvObjectBox}{% % \expandafter\captionsetup\expandafter{\hv@caption@format}% - \ifx\hv@shortCap\@empty - \captionof{\hv@floatType}{\hv@longCap}% + \ifhv@onlyText + \hv@longCap \else - \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap}% + \ifx\hv@shortCap\@empty + \captionof{\hv@floatType}{\hv@longCap}% + \else + \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap}% + \fi \fi }}}% rotatebox \ifx\hv@label\@empty\else\label{\hv@label-cap}\fi \else% ifdim: no space left on page \put(-2\ht\hvCaptionBox,0.5\ht\hvObjectBox){\makebox(0,0){\rotatebox{90}{\minipage{\textwidth}\centering \parbox{0.8\textwidth}{% - \ifx\hv@shortCap\@empty - \captionof{\hv@floatType}{\hv@longCap}% - \else - \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap}% + \ifhv@onlyText + \hv@longCap + \else + \ifx\hv@shortCap\@empty + \captionof{\hv@floatType}{\hv@longCap}% + \else + \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap}% + \fi \fi }% \ifx\hv@label\@empty\else\label{\hv@label-cap}\fi @@ -1663,10 +1697,14 @@ \else \put(\the\dimexpr1.5\paperwidth-\wd\hvObjectBox-\hvSet@bindCorrection,\the\dimexpr\ht\hvCaptionBox+\abovecaptionskip+\belowcaptionskip){\makebox[0pt][c]{\parbox{\textwidth}{%% % \expandafter\captionsetup\expandafter{\hv@caption@format}% - \ifx\hv@shortCap\@empty - \captionof{\hv@floatType}{\hv@longCap}% - \else - \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap}% + \ifhv@onlyText + \hv@longCap + \else + \ifx\hv@shortCap\@empty + \captionof{\hv@floatType}{\hv@longCap}% + \else + \captionof{\hv@floatType}[\hv@shortCap]{\hv@longCap}% + \fi \fi }}}% \ifx\hv@label\@empty\else\label{\hv@label-cap}\fi @@ -1863,11 +1901,15 @@ \expandafter\hvFloatSet\expandafter{\hv@save@setting}% \setlength\belowcaptionskip{5pt}% \setlength\abovecaptionskip{0pt}% - \edef\@captype{\hv@floatType}% - \expandafter\ifx\expandafter\relax\hv@shortCap\relax - \caption{\hv@longCap}% + \ifhv@onlyText + \hv@longCap \else - \caption[\hv@shortCap]{\hv@longCap}% + \edef\@captype{\hv@floatType}% + \expandafter\ifx\expandafter\relax\hv@shortCap\relax + \caption{\hv@longCap}% + \else + \caption[\hv@shortCap]{\hv@longCap}% + \fi \fi \ifx\hv@label\@empty\else\label{\hv@label-cap}\fi \endminipage}% diff --git a/macros/latex/contrib/membranecomputing/membranecomputing.pdf b/macros/latex/contrib/membranecomputing/membranecomputing.pdf index 8fc5b20098..33aa4e8c47 100644 Binary files a/macros/latex/contrib/membranecomputing/membranecomputing.pdf and b/macros/latex/contrib/membranecomputing/membranecomputing.pdf differ diff --git a/macros/latex/contrib/membranecomputing/membranecomputing.sty b/macros/latex/contrib/membranecomputing/membranecomputing.sty index bb513168d5..f2eae32028 100644 --- a/macros/latex/contrib/membranecomputing/membranecomputing.sty +++ b/macros/latex/contrib/membranecomputing/membranecomputing.sty @@ -16,7 +16,7 @@ % This work consists of the file membranecomputing.sty. \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{membranecomputing}[2020/07/23 Membrane Computing v0.1] +\ProvidesPackage{membranecomputing}[2021/09/23 Membrane Computing v0.2] % Require Packages @@ -554,6 +554,24 @@ \newcommand{\linkdestructionP}[5]{\prule{5}{6}{{}{}{{#1}{#3}}{-}{{}{#4}}}{{}{}{{#2}{#3}}{;}{{}{#4}}{{#5}{!}}}} \newcommand{\linkdestructionPT}{\linkdestructionP{x}{y}{t_{l_{i}}}{t_{l_{j}}}{g}} +\newcommand{\tissueevolcomm}[6]{\wrule{4}{4}{{}{}{{#1}{#5}{}}{{#2}{#6}{}}}{{}{}{{#3}{#5}{}}{{#4}{#6}{}}}} +\newcommand{\tissueevolcommT}{\tissueevolcomm{u}{v}{v'}{u'}{i}{j}} +\newcommand{\tissueevolsympT}{\tissueevolcomm{u}{}{}{u'}{i}{j}} + +\newcommand{\tissueevolcommP}[6]{\prule{4}{4}{{}{}{{#1}{#5}{}}{{#2}{#6}{}}}{{}{}{{#3}{#5}{}}{{#4}{#6}{}}}} +\newcommand{\tissueevolcommPT}{\tissueevolcommP{u}{v}{v'}{u'}{i}{j}} +\newcommand{\tissueevolsympPT}{\tissueevolcommP{u}{}{}{u'}{i}{j}} + +\newcommand{\evolcomm}[6]{\wrule{3}{3}{{{#1}{#5}{}}{{}}{{#2}{#6}}}{{{#3}{#5}{}}{}{{#4}{#6}{}}}} +\newcommand{\evolcommT}{\evolcomm{u}{v}{v'}{u'}{i}{j}} +\newcommand{\evolsyminT}{\evolcomm{u}{}{}{u'}{i}{j}} +\newcommand{\evolsymoutT}{\evolcomm{}{u}{u'}{}{i}{j}} + +\newcommand{\evolcommP}[6]{\prule{3}{3}{{{#1}{#5}{}}{{}}{{#2}{#6}}}{{{#3}{#5}{}}{}{{#4}{#6}{}}}} +\newcommand{\evolcommPT}{\evolcommP{u}{v}{v'}{u'}{i}{j}} +\newcommand{\evolsyminPT}{\evolcommP{u}{}{}{u'}{i}{j}} +\newcommand{\evolsymoutPT}{\evolcommP{}{u}{u'}{}{i}{j}} + % Families of P systems \newcommand{\Pfamily}[4]{\ensuremath{\mathcal{#1}^{#2}_{#3} \IfStrEq{#4}{}{}{( #4 )}}} @@ -594,6 +612,9 @@ \endinput +v0.2 23/09/2021 + - Created new rules of membrane systems with evolutional comm rules + v0.1 23/07/2020 - Created package - - Created some examples and templates \ No newline at end of file + - Created some examples and templates diff --git a/macros/latex/contrib/membranecomputing/membranecomputing.tex b/macros/latex/contrib/membranecomputing/membranecomputing.tex index a8c9207207..8bbbb2e8bb 100644 --- a/macros/latex/contrib/membranecomputing/membranecomputing.tex +++ b/macros/latex/contrib/membranecomputing/membranecomputing.tex @@ -2,13 +2,13 @@ \usepackage[utf8]{inputenc} -\usepackage{membranecomputing} +\usepackage{membranecomputing-dev/membranecomputing} \usepackage{hyperref} \usepackage{enumitem} \usepackage{amssymb} \usepackage{longtable} -\title{Package \texttt{membranecomputing} (v0.1)} +\title{Package \texttt{membranecomputing} (v0.2)} \author{David Orellana-Martín \\ \texttt{\href{mailto:dorellana@us.es}{dorellana@us.es}}} \begin{document} @@ -437,7 +437,21 @@ of rules from the bibliography. \verb=\linkdestruction{x}{y}{t_{l_{i}}}{t_{l_{j}}}{g}= & $\linkdestruction{x}{y}{t_{l_{i}}}{t_{l_{j}}}{g}$ \\ \verb=\linkdestructionT= & $\linkdestructionT$ \\ \verb=\linkdestructionP{x}{y}{t_{l_{i}}}{t_{l_{j}}}{g}= & $\linkdestructionP{x}{y}{t_{l_{i}}}{t_{l_{j}}}{g}$ \\ - \verb=\linkdestructionPT= & $\linkdestructionPT$ + \verb=\linkdestructionPT= & $\linkdestructionPT$ \\ + \verb=\tissueevolcomm{u}{v}{v'}{u'}{i}{j}= & $\tissueevolcomm{u}{v}{v'}{u'}{i}{j}$ \\ + \verb=\tissueevolcommT= & $\tissueevolcommT$ \\ + \verb=\tissueevolsympT= & $\tissueevolsympT$ \\ + \verb=\tissueevolcommP{u}{v}{v'}{u'}{i}{j}= & $\tissueevolcommP{u}{v}{v'}{u'}{i}{j}$ \\ + \verb=\tissueevolcommPT= & $\tissueevolcommPT$ \\ + \verb=\tissueevolsympPT= & $\tissueevolsympPT$ \\ + \verb=\evolcomm{u}{v}{v'}{u'}{i}{j}= & $\evolcomm{u}{v}{v'}{u'}{i}{j}$ \\ + \verb=\evolcommT= & $\evolcommT$ \\ + \verb=\evolsyminT= & $\evolsyminT$ \\ + \verb=\evolsymoutT= & $\evolsymoutT$ \\ + \verb=\evolcommP{u}{v}{v'}{u'}{i}{j}= & $\evolcommP{u}{v}{v'}{u'}{i}{j}$ \\ + \verb=\evolcommPT= & $\evolcommPT$ \\ + \verb=\evolsyminPT= & $\evolsyminPT$ \\ + \verb=\evolsymoutPT= & $\evolsymoutPT$ \\ \end{longtable} } diff --git a/macros/latex/contrib/xmpincl/xmpincl.dtx b/macros/latex/contrib/xmpincl/xmpincl.dtx index 2b9b8744cd..7d9acbd598 100644 --- a/macros/latex/contrib/xmpincl/xmpincl.dtx +++ b/macros/latex/contrib/xmpincl/xmpincl.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -% Copyright (C) 2004 by Maarten Sneep +% Copyright (C) 2004 by Maarten Sneep % ----------------------------------------------------- % % This work is licensed under the CC-GNU GPL, the human readable license @@ -20,7 +20,7 @@ %\NeedsTeXFormat{LaTeX2e}[1999/12/01] %\ProvidesPackage{xmpincl} %<*package> - [2021/08/31 v2.3 Include XMP data in pdflatex] + [2021/09/22 v2.4 Include XMP data in pdflatex] % % %<*driver> @@ -29,7 +29,7 @@ \usepackage{url} \usepackage{xmpincl} \hypersetup{colorlinks=true, pdftitle={Including XMP in pdflatex}, - pdfauthor={Maarten Sneep }, + pdfauthor={Maarten Sneep}, pdfsubject={pdflatex and XMP inclusions.}, pdfkeywords={XMP, Creative Commons}, pdfview={FitH}, pdfstartview={FitH}, pdfstartpage={1}, plainpages=false} \includexmp{license} @@ -79,6 +79,8 @@ % characters in the xmpi file.} % \changes{v2.3}{2021/08/31}{Replaced \cs{if}\cs{par} with \cs{ifx}\cs{par} % because the former caused an error with the new definition of \cs{par}.} +% \changes{v2.4}{2021/09/22}{Replaced \cs{ifx}\cs{par} with \cs{if}\cs{endline} +% because the former caused pdf/a validation errors.} % % \GetFileInfo{xmpincl.dtx} % @@ -90,7 +92,7 @@ % % \title{The \textsf{XMP} inclusion package\thanks{This document % corresponds to \textsf{xmpincl.dtx}~\fileversion, dated \filedate.}} -% \author{Maarten Sneep \\ \href{mailto:sneep@nat.vu.nl}{sneep@nat.vu.nl}} +% \author{Maarten Sneep} % \date{\filedate} % % \maketitle @@ -151,7 +153,7 @@ % package. This new release (version 2.0) does add the || % tags, if they are \emph{not} present in the |xmp| file. % -% \subsection{New in the current release (\fileversion)} +% \subsection{New in the release v2.1} % % There used to be a clash between the Memoir document class and the |ifpdf| package. % As of version 2005/03/23 v3.9 of |mempatch.sty|, this clash has been removed, and @@ -289,8 +291,8 @@ }% % \end{macrocode} % Start the |\loop|, and read a line. Check if it is equal to the end tag -% or to |\par|, and if it isn't, write it out to the |.xmpi| file. The -% check against |\par| ensures that empty lines are skipped, and not +% or to |\endline|, and if it isn't, write it out to the |.xmpi| file. The +% check against |\endline| ensures that empty lines are skipped, and not % replaced by |\par|. % % The |\ifeof| test checks whether we've reached the end of the original @@ -302,7 +304,7 @@ \equal{\mcs@xmpinclEnd}{\xmpinclReadln}% }{% Note: no if. }{% - \ifx\par\xmpinclReadln\else% + \if\endline\xmpinclReadln\else% \immediate\write\xmpinclWrite{\xmpinclReadln}% \fi% }% diff --git a/macros/latex/contrib/xmpincl/xmpincl.ins b/macros/latex/contrib/xmpincl/xmpincl.ins index 27915835cf..fab6a301bc 100644 --- a/macros/latex/contrib/xmpincl/xmpincl.ins +++ b/macros/latex/contrib/xmpincl/xmpincl.ins @@ -1,5 +1,5 @@ %% -%% Copyright (C) 2005 by Maarten Sneep +%% Copyright (C) 2005 by Maarten Sneep %% %% This work is licensed under the CC-GNU GPL, the human readable license %% can be found here, with a link to the full text on this page. @@ -15,7 +15,7 @@ This is a generated file. -Copyright (C) 2005 by Maarten Sneep +Copyright (C) 2005 by Maarten Sneep This work is licensed under the CC-GNU GPL, the human readable license can be found here, with a link to the full text on this page. -- cgit v1.2.3