texlive[73299] Master/texmf-dist: bib2gls (4jan25)

commits+karl at tug.org commits+karl at tug.org
Sat Jan 4 21:45:53 CET 2025


Revision: 73299
          https://tug.org/svn/texlive?view=revision&revision=73299
Author:   karl
Date:     2025-01-04 21:45:53 +0100 (Sat, 04 Jan 2025)
Log Message:
-----------
bib2gls (4jan25)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/man/man1/bib2gls.1
    trunk/Master/texmf-dist/doc/man/man1/bib2gls.man1.pdf
    trunk/Master/texmf-dist/doc/man/man1/convertgls2bib.1
    trunk/Master/texmf-dist/doc/man/man1/convertgls2bib.man1.pdf
    trunk/Master/texmf-dist/doc/man/man1/datatool2bib.1
    trunk/Master/texmf-dist/doc/man/man1/datatool2bib.man1.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/CHANGES
    trunk/Master/texmf-dist/doc/support/bib2gls/README.md
    trunk/Master/texmf-dist/doc/support/bib2gls/bib2gls-begin.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/bib2gls.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-authors.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-bacteria.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-chemical.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-citations.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-constants.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-hierarchical.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-markuplanguages.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-maths.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-media.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-msymbols.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-multi1.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-multi2.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-nested.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-people.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-textsymbols.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-textsymbols2.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-units1.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-units2.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-units3.pdf
    trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-usergroups.pdf
    trunk/Master/texmf-dist/scripts/bib2gls/bib2gls.jar
    trunk/Master/texmf-dist/scripts/bib2gls/bibglscommon.jar
    trunk/Master/texmf-dist/scripts/bib2gls/convertgls2bib.jar
    trunk/Master/texmf-dist/scripts/bib2gls/datatool2bib.jar
    trunk/Master/texmf-dist/scripts/bib2gls/resources/bib2gls-en.xml
    trunk/Master/texmf-dist/scripts/bib2gls/texparserlib.jar

Added Paths:
-----------
    trunk/Master/texmf-dist/source/support/bib2gls/bib2gls-begin.tex
    trunk/Master/texmf-dist/source/support/bib2gls/bib2gls-cite.bib
    trunk/Master/texmf-dist/source/support/bib2gls/bib2gls-src.zip
    trunk/Master/texmf-dist/source/support/bib2gls/bib2gls-terms.bib
    trunk/Master/texmf-dist/source/support/bib2gls/bib2gls.bib
    trunk/Master/texmf-dist/source/support/bib2gls/bib2gls.pod
    trunk/Master/texmf-dist/source/support/bib2gls/bib2gls.tex
    trunk/Master/texmf-dist/source/support/bib2gls/convertgls2bib.pod
    trunk/Master/texmf-dist/source/support/bib2gls/datatool2bib.pod
    trunk/Master/texmf-dist/source/support/bib2gls/texparser-src.zip
    trunk/Master/texmf-dist/source/support/bib2gls/version.tex

Removed Paths:
-------------
    trunk/Master/texmf-dist/source/support/bib2gls/src/

Modified: trunk/Master/texmf-dist/doc/man/man1/bib2gls.1
===================================================================
--- trunk/Master/texmf-dist/doc/man/man1/bib2gls.1	2025-01-04 17:42:43 UTC (rev 73298)
+++ trunk/Master/texmf-dist/doc/man/man1/bib2gls.1	2025-01-04 20:45:53 UTC (rev 73299)
@@ -1,5 +1,5 @@
 .\" -*- mode: troff; coding: utf-8 -*-
-.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.45)
+.\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -52,10 +52,13 @@
 .    \}
 .\}
 .rr rF
+.\"
+.\" Required to disable full justification in groff 1.23.0.
+.if n .ds AD l
 .\" ========================================================================
 .\"
 .IX Title "BIB2GLS 1"
-.TH BIB2GLS 1 2024-01-30 "perl v5.38.2" bib2gls
+.TH BIB2GLS 1 2024-03-18 "perl v5.40.0" bib2gls
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -65,7 +68,7 @@
 \&\fBbib2gls\fR [\fIoption\fR]+ \fIauxfile\fR
 .SH DESCRIPTION
 .IX Header "DESCRIPTION"
-\&\fBbib2gls\fR is designed to work with the \fBglossaries-extra\fR LaTeX
+\&\fBbib2gls\fR is designed to work with the \fBglossaries\-extra\fR LaTeX
 package. (The \fBrecord\fR package option is required.) The application
 performs two functions in one: (1) selects entries from .bib files
 according to information found in the \fIauxfile\fR (similar to
@@ -93,7 +96,7 @@
 .IX Item "--custom-packages list"
 Instruct the TeX parser library to attempt to parse the 
 packages listed in \fIlist\fR. This is intended for simple custom
-packages that don't contain complex code.
+packages that don\*(Aqt contain complex code.
 .IP "\fB\-\-date\-in\-header\fR (or \fB\-D\fR)" 4
 .IX Item "--date-in-header (or -D)"
 The header comment at the start of the \fI.glstex\fR file will include
@@ -101,15 +104,15 @@
 .IP "\fB\-\-debug\fR [\fIn\fR]" 4
 .IX Item "--debug [n]"
 Switch on the debug mode at the given setting \fIn\fR, which
-should be a non-negative integer. If \fIn\fR is \fB0\fR then the
+should be a non\-negative integer. If \fIn\fR is \fB0\fR then the
 debug mode is switched off. If omitted, \fIn\fR is set to 1, which
 corresponds to \fB\-\-debug\-mode\fR \fBio\fR. Any positive number will
-enable all of \fBbib2gls\fR's debugging messages. The amount of
+enable all of \fBbib2gls\fR\*(Aqs debugging messages. The amount of
 TeX Parser Library debugging messages depends on bitwise operation of \fIn\fR.
 .IP "\fB\-\-debug\-mode\fR \fIsetting\fR" 4
 .IX Item "--debug-mode setting"
 May be used instead of \fB\-\-debug\fR where the level number is
-difficult to remember. The \fIsetting\fR may be a comma-separated list
+difficult to remember. The \fIsetting\fR may be a comma\-separated list
 of any of the keywords:
 .RS 4
 .IP \fBall\fR 4
@@ -128,15 +131,15 @@
 .IP \fBexpansion\fR 4
 .IX Item "expansion"
 TeX Parser expansions (may result in a large transcript file).
-.IP \fBexpansion-list\fR 4
+.IP \fBexpansion\-list\fR 4
 .IX Item "expansion-list"
 TeX Parser stack expansions (may result in a large transcript file).
-.IP \fBexpansion-once\fR 4
+.IP \fBexpansion\-once\fR 4
 .IX Item "expansion-once"
-TeX Parser one-level expansions.
-.IP \fBexpansion-once-list\fR 4
+TeX Parser one\-level expansions.
+.IP \fBexpansion\-once\-list\fR 4
 .IX Item "expansion-once-list"
-TeX Parser one-level list expansions.
+TeX Parser one\-level list expansions.
 .IP \fBio\fR 4
 .IX Item "io"
 TeX Parser I/O operations (open, close and fetch token).
@@ -146,13 +149,13 @@
 .IP \fBprocess\fR 4
 .IX Item "process"
 TeX Parser macro process (may result in a large transcript file).
-.IP \fBprocess-generic-cs\fR 4
+.IP \fBprocess\-generic\-cs\fR 4
 .IX Item "process-generic-cs"
 TeX Parser generic command process.
-.IP \fBprocess-stack\fR 4
+.IP \fBprocess\-stack\fR 4
 .IX Item "process-stack"
 TeX Parser stack process (may result in a large transcript file).
-.IP \fBprocess-stack-list\fR 4
+.IP \fBprocess\-stack\-list\fR 4
 .IX Item "process-stack-list"
 TeX Parser detailed stack process (may result in a large transcript file).
 .IP \fBread\fR 4
@@ -159,9 +162,9 @@
 .IX Item "read"
 TeX Parser codepoint read from file (likely to result in a large
 transcript file).
-.IP \fBsty-data\fR 4
+.IP \fBsty\-data\fR 4
 .IX Item "sty-data"
-TeX Parser data (typically relates to internal objects that don't
+TeX Parser data (typically relates to internal objects that don\*(Aqt
 have an analogous TeX macro). This includes data gathered from the
 aux file.
 .RE
@@ -175,14 +178,14 @@
 If omitted, the JVM default encoding is assumed.
 .IP "\fB\-\-dir\fR \fIdirectory\fR (or \fB\-d\fR <directory>)" 4
 .IX Item "--dir directory (or -d <directory>)"
-Files are relative to \fIdirectory\fR. (This doesn't change the current
+Files are relative to \fIdirectory\fR. (This doesn\*(Aqt change the current
 working directory.)
 .IP \fB\-\-expand\-fields\fR 4
 .IX Item "--expand-fields"
-Don't write \f(CW\*(C`\eglsnoexpandfields\*(C'\fR to the \fI.glstex\fR file.
+Don\*(Aqt write \f(CW\*(C`\eglsnoexpandfields\*(C'\fR to the \fI.glstex\fR file.
 .IP "\fB\-\-force\-cross\-resource\-refs\fR or \fB\-x\fR" 4
 .IX Item "--force-cross-resource-refs or -x"
-Force cross-resource referencing mode on.
+Force cross\-resource referencing mode on.
 .IP "\fB\-\-group\fR or \fB\-g\fR" 4
 .IX Item "--group or -g"
 Add \fBgroup\fR field to entries.
@@ -191,10 +194,10 @@
 Display help message and exit.
 .IP "\fB\-\-ignore\-packages\fR \fIlist\fR (or \fB\-k\fR \fIlist\fR)" 4
 .IX Item "--ignore-packages list (or -k list)"
-Don't parse the log file for the packages listed in \fIlist\fR. Note
+Don\*(Aqt parse the log file for the packages listed in \fIlist\fR. Note
 that \fB\-\-packages\fR overrides this option, so if the same package is
 listed in both \fB\-\-ignore\-packages\fR and \fB\-\-packages\fR then the
-interpreter will check if it's supported. This option has a
+interpreter will check if it\*(Aqs supported. This option has a
 cumulative action. Only known packages may be included in
 \&\fIlist\fR.
 .IP \fB\-\-interpret\fR 4
@@ -224,25 +227,25 @@
 one of: \fBhcounter\fR, \fBhref\fR, \fBtitle\fR or \fBlocation\fR.
 .IP \fB\-\-merge\-wrglossary\-records\fR 4
 .IX Item "--merge-wrglossary-records"
-Merge an entry's \fBwrglossary\fR records for the same page locations.
+Merge an entry\*(Aqs \fBwrglossary\fR records for the same page locations.
 (For use with the \fBindexcounter\fR package option.)
 .IP \fB\-\-mfirstuc\-math\-protection\fR 4
 .IX Item "--mfirstuc-math-protection"
-Switch on the auto-insertion of an empty group for math-shift (\f(CW\*(C`$\*(C'\fR).
+Switch on the auto\-insertion of an empty group for math\-shift (\f(CW\*(C`$\*(C'\fR).
 .Sp
-If \fImfirstuc\fR v2.08+, \fIglossaries\fR v4.50+ and \fIglossaries-extra\fR v1.49+ 
+If \fImfirstuc\fR v2.08+, \fIglossaries\fR v4.50+ and \fIglossaries\-extra\fR v1.49+ 
 are detected, the default will be \fB\-\-no\-mfirstuc\-math\-protection\fR
 as there should no longer be any need for this protection.
 .IP "\fB\-\-mfirstuc\-protection\fR \fIfields\fR|\fBall\fR (or \fB\-u\fR \fIfields\fR|\fBall\fR)" 4
 .IX Item "--mfirstuc-protection fields|all (or -u fields|all)"
 Insert an empty group if fields start with certain problematic
-commands to protect against case-changing commands like \f(CW\*(C`\eGls\*(C'\fR.
+commands to protect against case\-changing commands like \f(CW\*(C`\eGls\*(C'\fR.
 .Sp
 The default is to do this for all fields.  To do this for only a
-subset of fields, set \fIfields\fR to a comma-separated list of fields
+subset of fields, set \fIfields\fR to a comma\-separated list of fields
 (e.g. \fBname,short,long\fR).  The keyword \fBall\fR indicates all fields.
 .Sp
-If \fImfirstuc\fR v2.08+, \fIglossaries\fR v4.50+ and \fIglossaries-extra\fR v1.49+ 
+If \fImfirstuc\fR v2.08+, \fIglossaries\fR v4.50+ and \fIglossaries\-extra\fR v1.49+ 
 are detected, the default will be \fB\-\-no\-mfirstuc\-protection\fR
 as there should no longer be any need for this protection.
 .IP "\fB\-\-nested\-link\-check\fR \fIlist\fR|\fBnone\fR" 4
@@ -254,13 +257,13 @@
 If \fBnone\fR, disable check.
 .IP \fB\-\-no\-break\-space\fR 4
 .IX Item "--no-break-space"
-Interpret \f(CW\*(C`~\*(C'\fR (tilde) and \f(CW\*(C`\enobreakspace\*(C'\fR as a non-breaking space (default).
+Interpret \f(CW\*(C`~\*(C'\fR (tilde) and \f(CW\*(C`\enobreakspace\*(C'\fR as a non\-breaking space (default).
 .IP \fB\-\-no\-cite\-as\-record\fR 4
 .IX Item "--no-cite-as-record"
-Don't check for instances of \f(CW\*(C`\ecitation\*(C'\fR in the \fI.aux\fR file (default).
+Don\*(Aqt check for instances of \f(CW\*(C`\ecitation\*(C'\fR in the \fI.aux\fR file (default).
 .IP \fB\-\-no\-collapse\-same\-location\-range\fR 4
 .IX Item "--no-collapse-same-location-range"
-Don't collapse an explicit range that has a duplicate start and end
+Don\*(Aqt collapse an explicit range that has a duplicate start and end
 location into a normal record.
 .IP \fB\-\-no\-date\-in\-header\fR 4
 .IX Item "--no-date-in-header"
@@ -274,26 +277,26 @@
 Write \f(CW\*(C`\eglsnoexpandfields\*(C'\fR to the \fI.glstex\fR file (default).
 .IP \fB\-\-no\-force\-cross\-resource\-refs\fR 4
 .IX Item "--no-force-cross-resource-refs"
-Don't force cross-resource referencing mode on (default).
+Don\*(Aqt force cross\-resource referencing mode on (default).
 .IP \fB\-\-no\-group\fR 4
 .IX Item "--no-group"
-Don't add \fBgroup\fR field to entries (default).
+Don\*(Aqt add \fBgroup\fR field to entries (default).
 .IP \fB\-\-no\-interpret\fR 4
 .IX Item "--no-interpret"
-Don't try interpreting (La)TeX commands. The TeX Parser Library will
+Don\*(Aqt try interpreting (La)TeX commands. The TeX Parser Library will
 still be used to parse the \fIaux\fR and \fIbib\fR files.
 .IP \fB\-\-no\-merge\-wrglossary\-records\fR 4
 .IX Item "--no-merge-wrglossary-records"
-Don't merge an entry's \fBwrglossary\fR records.
+Don\*(Aqt merge an entry\*(Aqs \fBwrglossary\fR records.
 .IP \fB\-\-no\-mfirstuc\-math\-protection\fR 4
 .IX Item "--no-mfirstuc-math-protection"
-Switch off the auto-insertion of an empty group for math-shift (\f(CW\*(C`$\*(C'\fR).
+Switch off the auto\-insertion of an empty group for math\-shift (\f(CW\*(C`$\*(C'\fR).
 .IP \fB\-\-no\-mfirstuc\-protection\fR 4
 .IX Item "--no-mfirstuc-protection"
-Switch off the auto-insertion of an empty group for all fields.
+Switch off the auto\-insertion of an empty group for all fields.
 .IP \fB\-\-no\-nested\-link\-check\fR 4
 .IX Item "--no-nested-link-check"
-Don't check for potentially problematic nested link text.
+Don\*(Aqt check for potentially problematic nested link text.
 (Equivalent to \fB\-\-nested\-link\-check\fR \fBnone\fR)
 .IP \fB\-\-no\-obey\-aux\-catcode\fR 4
 .IX Item "--no-obey-aux-catcode"
@@ -300,20 +303,20 @@
 Ignore category code changing commands encountered in the aux file.
 .IP \fB\-\-no\-provide\-glossaries\fR 4
 .IX Item "--no-provide-glossaries"
-Don't write \f(CW\*(C`\eprovideignoredglossary*\*(C'\fR to the \fI.glstex\fR file to
+Don\*(Aqt write \f(CW\*(C`\eprovideignoredglossary*\*(C'\fR to the \fI.glstex\fR file to
 provide unknown glossaries except in documented situations
-(\fBmaster\fR, \fBsecondary\fR and \fBtrigger-type\fR resource options).
+(\fBmaster\fR, \fBsecondary\fR and \fBtrigger\-type\fR resource options).
 This setting is the default.
 .IP \fB\-\-no\-record\-count\fR 4
 .IX Item "--no-record-count"
-Don't add record count field to entries (default).
+Don\*(Aqt add record count field to entries (default).
 This option automatically implements \fB\-\-no\-record\-count\-unit\fR.
 .IP \fB\-\-no\-record\-count\-unit\fR 4
 .IX Item "--no-record-count-unit"
-Don't add unit record count field to entries (default).
+Don\*(Aqt add unit record count field to entries (default).
 .IP \fB\-\-no\-replace\-quotes\fR 4
 .IX Item "--no-replace-quotes"
-Don't replace quote characters (default).
+Don\*(Aqt replace quote characters (default).
 .IP \fB\-\-no\-retain\-formats\fR 4
 .IX Item "--no-retain-formats"
 Normal location merging rules apply (default).
@@ -320,12 +323,12 @@
 .IP \fB\-\-no\-support\-unicode\-script\fR 4
 .IX Item "--no-support-unicode-script"
 Text superscript (\f(CW\*(C`\etextsuperscript\*(C'\fR) or subscripts (\f(CW\*(C`\etextsubscript\*(C'\fR)
-won't be converted to Unicode superscript/subscript characters.
+won\*(Aqt be converted to Unicode superscript/subscript characters.
 For example, \f(CW\*(C`\etextsuperscript{2}\*(C'\fR will be converted to \f(CW\*(C`<sup>2</sup>\*(C'\fR
 and the markup will be stripped leaving just the character 2.
 .IP \fB\-\-no\-trim\-fields\fR 4
 .IX Item "--no-trim-fields"
-Don't trim leading and trailing spaces from fields (default).
+Don\*(Aqt trim leading and trailing spaces from fields (default).
 This option cancels \fB\-\-trim\-only\-fields\fR and \fB\-\-trim\-fields\fR.
 .IP "\fB\-\-no\-verbose\fR (or \fB\-\-noverbose\fR)" 4
 .IX Item "--no-verbose (or --noverbose)"
@@ -333,12 +336,12 @@
 STDOUT.)
 .IP \fB\-\-no\-warn\-non\-bib\-fields\fR 4
 .IX Item "--no-warn-non-bib-fields"
-Don't warn if internal non-bib fields are found in the \fI.bib\fR file.
+Don\*(Aqt warn if internal non\-bib fields are found in the \fI.bib\fR file.
 The use of these internal fields can cause unexpected results, so
 only use this option if you have taken appropriate precautions.
 .IP \fB\-\-no\-warn\-unknown\-entry\-types\fR 4
 .IX Item "--no-warn-unknown-entry-types"
-Don't warn if any unknown entry types are found in the \fI.bib\fR file.
+Don\*(Aqt warn if any unknown entry types are found in the \fI.bib\fR file.
 .IP \fB\-\-obey\-aux\-catcode\fR 4
 .IX Item "--obey-aux-catcode"
 Obey known category code changing commands encountered in the aux
@@ -346,7 +349,7 @@
 .IP "\fB\-\-packages\fR \fIlist\fR (or \fB\-p\fR \fIlist\fR)" 4
 .IX Item "--packages list (or -p list)"
 Instruct the TeX parser library to pretend the packages listed 
-in \fIlist\fR have been used by the document. Note that there's only a
+in \fIlist\fR have been used by the document. Note that there\*(Aqs only a
 limited number of packages supported by the TeX parser library.
 This option has a cumulative action so \fB\-\-packages wasysym,pifont\fR
 is the same as \fB\-\-packages wasysym \-\-packages pifont\fR.
@@ -370,7 +373,7 @@
 This option automatically implements \fB\-\-record\-count\fR.
 .Sp
 The \fIrule\fR may be: \f(CW\*(C`all\*(C'\fR or \f(CW\*(C`a\*(C'\fR (count all records), 
-\&\f(CW\*(C`non\-ignored\*(C'\fR or \f(CW\*(C`n\*(C'\fR (count all non-ignored records), 
+\&\f(CW\*(C`non\-ignored\*(C'\fR or \f(CW\*(C`n\*(C'\fR (count all non\-ignored records), 
 \&\f(CW\*(C`f/\*(C'\fR\fIregex\fR\f(CW\*(C`/\*(C'\fR (only count records where the format 
 matches the regular expression \fIregex\fR),
 \&\f(CW\*(C`c/\*(C'\fR\fIregex\fR\f(CW\*(C`/\*(C'\fR (only count records where the counter name 
@@ -441,7 +444,7 @@
 Display version information and exit.
 .IP \fB\-\-warn\-non\-bib\-fields\fR 4
 .IX Item "--warn-non-bib-fields"
-Warn if internal non-bib fields are found in the \fI.bib\fR file.
+Warn if internal non\-bib fields are found in the \fI.bib\fR file.
 .IP \fB\-\-warn\-unknown\-entry\-types\fR 4
 .IX Item "--warn-unknown-entry-types"
 Warn if any unknown entry types are found in the \fI.bib\fR file.
@@ -462,7 +465,7 @@
 \&        texdoc bib2gls
 .Ve
 .PP
-The glossaries-extra manual:
+The glossaries\-extra manual:
 .PP
 .Vb 1
 \&        texdoc glossaries\-extra

Modified: trunk/Master/texmf-dist/doc/man/man1/bib2gls.man1.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/man/man1/convertgls2bib.1
===================================================================
--- trunk/Master/texmf-dist/doc/man/man1/convertgls2bib.1	2025-01-04 17:42:43 UTC (rev 73298)
+++ trunk/Master/texmf-dist/doc/man/man1/convertgls2bib.1	2025-01-04 20:45:53 UTC (rev 73299)
@@ -58,7 +58,7 @@
 .\" ========================================================================
 .\"
 .IX Title "CONVERTGLS2BIB 1"
-.TH CONVERTGLS2BIB 1 2024-12-08 "perl v5.40.0" convertgls2bib
+.TH CONVERTGLS2BIB 1 2024-12-21 "perl v5.40.0" convertgls2bib
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l

Modified: trunk/Master/texmf-dist/doc/man/man1/convertgls2bib.man1.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/man/man1/datatool2bib.1
===================================================================
--- trunk/Master/texmf-dist/doc/man/man1/datatool2bib.1	2025-01-04 17:42:43 UTC (rev 73298)
+++ trunk/Master/texmf-dist/doc/man/man1/datatool2bib.1	2025-01-04 20:45:53 UTC (rev 73299)
@@ -58,7 +58,7 @@
 .\" ========================================================================
 .\"
 .IX Title "DATATOOL2BIB 1"
-.TH DATATOOL2BIB 1 2024-12-11 "perl v5.40.0" datatool2bib
+.TH DATATOOL2BIB 1 2024-12-21 "perl v5.40.0" datatool2bib
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l

Modified: trunk/Master/texmf-dist/doc/man/man1/datatool2bib.man1.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/CHANGES
===================================================================
--- trunk/Master/texmf-dist/doc/support/bib2gls/CHANGES	2025-01-04 17:42:43 UTC (rev 73298)
+++ trunk/Master/texmf-dist/doc/support/bib2gls/CHANGES	2025-01-04 20:45:53 UTC (rev 73299)
@@ -1,3 +1,15 @@
+v4.1 (2025-01-03)
+
+ * bib2gls
+
+   - added resource options:
+
+     omit-fields
+     omit-fields-missing-field-action
+     gather-parsed-dependencies
+
+   - added \BibGlsNoCaseChange
+
 v4.0a (2024-12-15)
 
 Corrected distribution (missing files).

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/support/bib2gls/README.md	2025-01-04 17:42:43 UTC (rev 73298)
+++ trunk/Master/texmf-dist/doc/support/bib2gls/README.md	2025-01-04 20:45:53 UTC (rev 73299)
@@ -18,7 +18,7 @@
 
 ## Licence
 
-Copyright (C) 2017-2024 Nicola L. C. Talbot (dickimaw-books.com)
+Copyright (C) 2017-2025 Nicola L. C. Talbot (dickimaw-books.com)
 
 License GPLv3+: GNU GPL version 3 or later
 http://gnu.org/licenses/gpl.html

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/bib2gls-begin.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/bib2gls.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-authors.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-bacteria.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-chemical.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-citations.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-constants.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-hierarchical.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-markuplanguages.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-maths.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-media.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-msymbols.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-multi1.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-multi2.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-nested.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-people.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-textsymbols.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-textsymbols2.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-units1.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-units2.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-units3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/bib2gls/examples/sample-usergroups.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/scripts/bib2gls/bib2gls.jar
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/scripts/bib2gls/bibglscommon.jar
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/scripts/bib2gls/convertgls2bib.jar
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/scripts/bib2gls/datatool2bib.jar
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/scripts/bib2gls/resources/bib2gls-en.xml
===================================================================
--- trunk/Master/texmf-dist/scripts/bib2gls/resources/bib2gls-en.xml	2025-01-04 17:42:43 UTC (rev 73298)
+++ trunk/Master/texmf-dist/scripts/bib2gls/resources/bib2gls-en.xml	2025-01-04 20:45:53 UTC (rev 73299)
@@ -276,6 +276,9 @@
 <entry key="message.mgls.found">Found mgls ref ''{0}''</entry>
 <entry key="message.mgls.nonefound">No mgls references found.</entry>
 <entry key="message.etc"> ETC... </entry>
+<entry key="message.omitting.field">Omitting field {0} for entry {1}</entry>
+<entry key="message.calculating.omitlist">Calculating field exclusion list for entry {0}</entry>
+<entry key="message.adding.omitlist">Adding ''{0}'' to field exclusion list.</entry>
 
 <entry key="comment.header">% This file was created by {0} v{1} on {2}.</entry>
 <entry key="comment.header.no_date">% This file was created by {0} v{1}.</entry>
@@ -411,6 +414,7 @@
 <entry key="warning.write_forbidden.cwd">Write access forbidden with security setting {0}={1} for path {2} (outside current working directory).</entry>
 <entry key="warning.write_forbidden.io">Write access forbidden by Java Virtual Machine for file {0}</entry>
 <entry key="warning.write_forbidden.security_manager">Write access forbidden by Java's Security Manager for file {0}</entry>
+<entry key="warning.unknown_field_in_omitlist">Can''t add ''{0}'' to field exclusion list for entry {1}. (Invalid field name.)</entry>
 
 <entry key="error.title">Error: {0}</entry>
 <entry key="error.no_log">File {0} not found. Remember to run LaTeX before {1}.
@@ -434,6 +438,8 @@
 <entry key="error.missing.aux.new.cs">Missing \{0} in aux file (make sure glossaries-extra.sty is at least {1}).</entry>
 <entry key="error.only.one.aux">Only one aux file permitted.</entry>
 <entry key="error.no.aux">Aux file not supplied. {0}</entry>
+<entry key="error.no.aux.args_found">Aux file not supplied or an option is missing its argument.
+{0}</entry>
 <entry key="error.file.not.found">File not found: {0}</entry>
 <entry key="error.cant.parse.file.malformed.input">Can''t parse {0}: may not be {1} encoded.
 (Try a different encoding with {2} or {3}.)</entry>

Modified: trunk/Master/texmf-dist/scripts/bib2gls/texparserlib.jar
===================================================================
(Binary files differ)

Added: trunk/Master/texmf-dist/source/support/bib2gls/bib2gls-begin.tex
===================================================================
--- trunk/Master/texmf-dist/source/support/bib2gls/bib2gls-begin.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/source/support/bib2gls/bib2gls-begin.tex	2025-01-04 20:45:53 UTC (rev 73299)
@@ -0,0 +1,6020 @@
+% arara: lualatex
+% arara: bib2gls: {group: on} if missing("glstex") || changed(toFile("bib2gls.bib")) || found("log", "Warning: Glossary entry")
+% arara: bibtex
+% arara: lualatex if changed("glstex") || missing("toc")
+% arara: bib2gls: {group: on}
+% arara: lualatex 
+% arara: lualatex if found ("log", "Rerun")
+\documentclass[titlepage=false,fontsize=12pt,captions=tableheading]{scrreprt}
+
+\usepackage[no-math]{fontspec}
+\setmainfont{Linux Libertine O}
+
+\newfontface\cyrillicmono{FreeMono}[Scale=MatchLowercase]
+\newcommand{\textcyrillicmono}[1]{{\cyrillicmono #1}}
+
+\usepackage[x11names]{xcolor}
+\usepackage{upquote}
+\usepackage{hologo}
+\usepackage{pifont}
+\usepackage{graphicx}
+\usepackage{tcolorbox}
+\usepackage{datetime2}
+\usepackage{siunitx}
+\usepackage[version=4]{mhchem}
+
+\usepackage{xr-hyper}
+\usepackage[hidelinks]{hyperref}
+\usepackage[record,
+ entrycounter,subentrycounter,%need to define counters for some examples
+ nostyles,stylemods={bookindex},style=index]{glossaries-extra}
+
+\setupglossaries{entrycounter=false,subentrycounter=false}
+
+\definecolor{field}{named}{DarkSlateGray4}
+\definecolor{cs}{named}{DarkSeaGreen4}
+\definecolor{styopt}{named}{DarkOrchid4}
+\definecolor{entry}{named}{SteelBlue4}
+\definecolor{comment}{named}{gray}
+\definecolor{attribute}{named}{Purple4}
+\definecolor{style}{named}{Blue4}
+
+\newcommand{\extstyopt}{\textsuperscript{\textdagger}}
+
+\newcommand{\dhyphen}{%
+ \texorpdfstring
+ {\discretionary{}{}{}\texttt{-}}%
+ {-}%
+}
+
+\renewrobustcmd{\-}{%
+ \discretionary
+ {{\rmfamily\char\ifnum\hyphenchar\font<0
+  \defaulthyphenchar\else\hyphenchar\font\fi
+ }}%
+ {}{}%
+}
+
+\setabbreviationstyle[common]{short-nolong}
+\setabbreviationstyle[markwordsexample]{long-hyphen-short-hyphen}
+\glssetcategoryattribute{markwordsexample}{markwords}{true}
+\GlsXtrEnableInitialTagging{taggingexample}{\itag}
+\glssetcategoryattribute{discardperiodexample}{discardperiod}{true}
+\glssetcategoryattribute{initialism}{insertdots}{true}
+\glssetcategoryattribute{initialism}{discardperiod}{true}
+\glssetcategoryattribute{initialism}{retainfirstuseperiod}{true}
+\setabbreviationstyle[initialism]{short-long}
+\setabbreviationstyle[abbrvtrans]{long-short-user}
+\setabbreviationstyle[longshortem]{long-short-em}
+\setabbreviationstyle[shortsc]{short-sc-nolong}
+
+\newcommand{\bibglspassim}{}
+\newcommand{\bibglsseealsosep}{\par\hangindent .75em\parindent .75em\relax}
+
+\newcommand*{\csfmt}[1]{%
+ \texorpdfstring
+ {\csfmtfont{\char`\\ #1}}%
+ {\string\\#1}%
+}
+
+\newcommand*{\csref}{\gls}
+
+\newcommand{\texparserdefnote}{}
+
+\newcommand*{\longargfmt}[1]{%
+ \texorpdfstring{\texttt{\longswitch #1}}%
+ {\string-\string-#1}%
+}
+
+\GlsXtrLoadResources[
+ src={bib2gls},
+ max-loc-diff=3,
+ entry-type-aliases={
+  exampleentry=entry,
+  examplesymbol=symbol,
+  exampleabbreviation=abbreviation
+ },
+ unknown-entry-alias={index},
+ field-aliases={note=user2},
+ symbol-sort-fallback={name},
+ break-at={none},
+ sort-replace={{,? +}{|},{\glshex2423}{ },
+  {\string\\([a-zA-Z])}{\glscapturedgroup1},
+  {([a-zA-Z])\string\.}{\glscapturedgroup1}}
+]
+
+\DTMsavetimestamp{creation}{2017-01-20T15:39:00Z}
+
+\IfFileExists{../java/Bib2Gls.java}
+{
+  \DTMsavefilemoddate{moddate}{../java/Bib2Gls.java}
+}
+{
+  \DTMsavenow{moddate}
+}
+
+\newcommand{\bibgls}{\appfmt{bib2gls}}
+
+\newcommand*{\BibTeX}{\hologo{BibTeX}}
+\newcommand*{\eTeX}{\hologo{eTeX}}
+\newcommand*{\XeLaTeX}{\hologo{XeLaTeX}}
+\newcommand*{\LuaLaTeX}{\hologo{LuaLaTeX}}
+\newcommand*{\pdfLaTeX}{\hologo{pdfLaTeX}}
+
+\newcommand*{\ctanfile}[2]{%
+ \href{http://mirrors.ctan.org/macros/latex/contrib/#1/#2}{\nolinkurl{#2}}%
+}
+
+\newcommand{\hex}[1]{0x#1}
+
+\newcommand{\qt}[1]{``#1''}
+
+\newcommand{\qtt}[1]{\qt{\,\texttt{#1}\,}}
+
+\newcommand{\incorrect}{\marginpar{\textcolor{red}{\ding{55}}}}
+\newcommand{\correct}{\marginpar{\textcolor{green}{\ding{52}}}}
+
+\newcounter{result}
+
+\newenvironment{result}%
+{%
+ \renewcommand{\glslinkpresetkeys}{\setkeys{glslink}{hyper=false,local}}%
+ \glsresetentrycounter
+ \stepcounter{result}%
+ \renewcommand{\GlsEntryCounterLabelPrefix}{glsentry\theresult-}%
+ \begin{quotation}%
+ \marginpar
+  [\raisebox{-2.5ex}{\ding{43}}]%
+  {\raisebox{-2.5ex}{\reflectbox{\ding{43}}}}%
+ \ignorespaces
+}
+{\end{quotation}\ignorespacesafterend}
+
+\newcommand{\dequals}{%
+ \texorpdfstring
+ {\discretionary{}{}{}\texttt{=}\discretionary{}{}{}}%
+ {=}%
+}
+
+\newcommand{\dcomma}{%
+ \texorpdfstring
+ {\texttt{,}\discretionary{}{}{}}%
+ {,}%
+}
+
+\newcommand{\dcolon}{%
+ \texorpdfstring
+ {\texttt{:}\discretionary{}{}{}}%
+ {:}%
+}
+
+\pdfstringdefDisableCommands{%
+  \def\dhyphen{-}%
+  \def\dcolon{:}%
+  \def\dcomma{,}%
+  \def\dequals{,}%
+  \let\-\empty
+}
+
+\newcommand*{\csfmtfont}[1]{\texttt{#1}}
+
+\newcommand*{\appfmt}[1]{\texorpdfstring{\texttt{#1}}{#1}}
+\newcommand*{\styfmt}[1]{\texorpdfstring{\textsf{#1}}{#1}}
+\newcommand*{\envfmt}[1]{\texorpdfstring{\textsf{#1}}{#1}}
+\newcommand*{\optfmt}[1]{\texorpdfstring{\texttt{#1}}{#1}}
+\newcommand*{\csoptfmt}[1]{\texorpdfstring{\textcolor{cs}{\optfmt{#1}}}{#1}}
+\newcommand*{\styoptfmt}[1]{\texorpdfstring{\textcolor{styopt}{\optfmt{#1}}}{#1}}
+\newcommand*{\fieldfmt}[1]{\texorpdfstring{\texttt{\color{field}#1}}{#1}}
+\newcommand*{\entryfmt}[1]{\texorpdfstring{\texttt{\color{entry}#1}}{#1}}
+\newcommand*{\atentryfmt}[1]{\entryfmt{@#1}}
+\newcommand*{\abbrstylefmt}[1]{\texorpdfstring{\textsf{\color{style}#1}}{#1}}
+\newcommand*{\glostylefmt}[1]{\texorpdfstring{\textsf{#1}}{#1}}
+\newcommand*{\catattrfmt}[1]{\texorpdfstring{\textsf{\color{attribute}#1}}{#1}}
+\newcommand*{\counterfmt}[1]{\texorpdfstring{\textsf{#1}}{#1}}
+\newcommand*{\filefmt}[1]{\texorpdfstring{\texttt{#1}}{#1}}
+\newcommand*{\metafilefmt}[3]{%
+  \filefmt{#1}\discretionary{}{}{}\meta{#2}\discretionary{}{}{}\filefmt{#3}%
+}
+
+\newcommand*{\extfmt}[1]{\filefmt{.#1}}%
+
+\newcommand*{\argor}{\texorpdfstring{\protect\textbar}{|}}
+
+\newrobustcmd*{\texmeta}[1]{{\normalfont\normalcolor$\langle$\emph{#1}$\rangle$}}
+
+\newcommand*{\meta}[1]{%
+ \texorpdfstring{\ifmmode\text{\texmeta{#1}}\else\texmeta{#1}\fi}{#1}%
+}
+
+\newcommand*{\oarg}[1]{\discretionary{}{}{}[#1]}
+\newcommand*{\oargm}[1]{\oarg{\meta{#1}}}
+
+\newcommand*{\marg}[1]{\texorpdfstring
+ {\discretionary{}{}{}\char`\{#1\char`\} }%
+ {\{#1\}}%
+}
+
+\newcommand*{\margm}[1]{\marg{\meta{#1}}}
+
+\newcommand{\switcharg}{}
+\newcommand{\switchalt}{}
+
+\makeatletter
+\newcommand{\code}[1]{\texorpdfstring{{\ttfamily\obeyspaces #1}}{#1}}
+\newcommand{\setupcodeenvfmts}{%
+   \def\cmd{\char`\\}%
+   \def\comment##1{\mbox{\textcolor{comment}{\idx{commentchar}\ ##1}}}%
+   \renewcommand*{\styfmt}[1]{##1}%
+   \renewcommand*{\counterfmt}[1]{##1}%
+   \renewcommand*{\catattrfmt}[1]{\textcolor{attribute}{##1}}%
+   \renewcommand*{\abbrstylefmt}[1]{\textcolor{style}{##1}}%
+   \renewcommand*{\csfmtfont}[1]{\textcolor{cs}{##1}}%
+}
+\newenvironment{codeenv}
+ {%
+   \renewcommand{\glslinkpresetkeys}{\setkeys{glslink}{noindex}}%
+   \setupcodeenvfmts
+    \begin{flushleft}\textcolor{lightgray}{\hrulefill}\par\nopagebreak
+     \medskip\nopagebreak
+     \ttfamily\obeylines\frenchspacing\@vobeyspaces}
+ {\nopagebreak\textcolor{lightgray}{\hrulefill}%
+  \end{flushleft}\ignorespacesafterend}
+
+\newenvironment{codeenv*}
+ {%
+   \setupcodeenvfmts
+   \begin{flushleft}\ttfamily\obeylines\frenchspacing\@vobeyspaces
+   \parindent\z@\parfillskip\@flushglue\parskip\z at skip
+ }
+ {\end{flushleft}\ignorespacesafterend}
+
+\makeatother
+
+\newcommand{\primary}{\emph}
+\newcommand{\primaryloc}[1]{\underline{\hyperbf{#1}}}
+
+\newcommand{\pidx}[1][]{\gls[textformat=primary,format=primaryloc,#1]}
+\newcommand{\pidxpl}[1][]{\glspl[textformat=primary,format=primaryloc,#1]}
+\newcommand{\pIdx}[1][]{\Gls[textformat=primary,format=primaryloc,#1]}
+\newcommand{\pIdxpl}[1][]{\Glspl[textformat=primary,format=primaryloc,#1]}
+
+\newcommand{\idx}{\gls}
+\newcommand{\idxpl}{\glspl}
+\newcommand{\Idx}{\Gls}
+\newcommand{\Idxpl}{\Glspl}
+
+\glsxtrnewgls{ext.}{\ext}
+
+\newcommand*{\iext}[1]{%
+ \glsxtrtitleorpdforheading{\idx{ext.#1}}{.#1}{\extfmt{#1}}%
+}
+
+\newcommand{\sty}{\gls}
+
+\newcommand*{\isty}[1]{%
+  \texorpdfstring{\idx{#1}}{#1}%
+}
+
+\newcommand*{\env}[1]{%
+  \texorpdfstring{\idx{env.#1}}{#1}%
+}
+
+\newcommand*{\abbrstyle}[2][]{%
+  \texorpdfstring{\idx[#1]{abbrstyle.#2}}{#2}%
+}
+
+\newcommand*{\glostyle}[1]{%
+  \texorpdfstring{\idx{glostyle.#1}}{#1}%
+}
+
+\newcommand*{\catattr}[1]{%
+  \texorpdfstring{\idx{catattr.#1}}{#1}%
+}
+
+\newcommand*{\counter}[1]{%
+  \texorpdfstring{\idx{ctr.#1}}{#1}%
+}
+
+\newcommand*{\styopt}[2][]{%
+  \texorpdfstring%
+  {%
+    \gls{styopt.#2}\styoptfmt{\ifblank{#1}{}{\dequals\marg{#1}}}%
+  }%
+  {#2\ifblank{#1}{}{=#1}}%
+}
+
+\newcommand*{\keyvallist}{%
+ \texorpdfstring
+ {key\dequals value list}%
+ {key=value list}%
+}
+
+\newcommand{\nosecformatdef}[1]{%
+  \begin{definition}
+   \gls[format=primaryloc]{#1}%
+   \glsentryuseri{#1}%
+  \end{definition}\ignorespaces
+}
+
+\newcommand*{\cs}{\gls}
+
+\newcommand*{\ics}[1][]{\cs[noindex=false,#1]}
+
+\newcommand*{\icswithargs}[2][]{\cs{#2}\glsentryuseri{#2}}
+
+\newcommand*{\postdeschook}[2][]{%
+ \glslink[#1]{idx.glsxtrpostdesccategory}{\csfmt{glsxtrpostdesc#2}}}
+
+\newcommand*{\postlinkhook}[2][]{%
+ \glslink[#1]{idx.glsxtrpostlinkcategory}{\csfmt{glsxtrpostlink#2}}}
+
+
+\glsxtrnewgls{file.}{\exfile}
+
+\newcommand*{\csopt}[2][]{\gencsopt{#1}{opt}{#2}}%
+\newcommand*{\glsopt}[2][]{\gencsopt{#1}{gls}{#2}}%
+\newcommand*{\glsaddopt}[2][]{\gencsopt{#1}{glsadd}{#2}}%
+\newcommand*{\printglossopt}[2][]{\gencsopt{#1}{printgloss}{#2}}%
+
+\newcommand*{\gencsopt}[3]{%
+  \texorpdfstring%
+  {%
+    \gls{#2.#3}%
+    \csoptfmt{\ifblank{#1}{}{\dequals\marg{#1}}}%
+  }%
+  {#3\ifblank{#1}{}{=#1}}%
+}
+
+\newcommand*{\field}[1]{%
+ \texorpdfstring
+ {\gls{field.#1}}%
+ {#1}%
+}
+
+\newcommand*{\atentry}[2][]{%
+ \texorpdfstring
+ {\gls[#1]{entry.#2}}%
+ {#2}%
+}
+
+\newrobustcmd{\longswitch}{\string-{}\string-}
+
+\newcommand*{\shortargfmt}[1]{%
+ \texorpdfstring{\texttt{\string-#1}}%
+ {\string-#1}%
+}
+
+\newcommand*{\longarg}[1]{%
+  \texorpdfstring
+  {\gls{switch.#1}}%
+  {\string-\string-#1}%
+}
+
+\definecolor{defbackground}{rgb}{1,1,0.75}
+
+\newsavebox\borderedboxcontents
+\newlength\borderedboxwidth
+
+\newenvironment{definition}%
+{%
+  \setlength{\fboxsep}{4pt}\setlength{\fboxrule}{1.25pt}%
+  \begin{lrbox}{\borderedboxcontents}%
+   \setlength\borderedboxwidth\linewidth
+   \addtolength\borderedboxwidth{-2\fboxrule}%
+   \addtolength\borderedboxwidth{-2\fboxsep}%
+   \begin{minipage}{\borderedboxwidth}
+   \flushleft\ttfamily\ignorespaces
+}%
+{%
+   \end{minipage}%
+  \end{lrbox}\par\medskip\noindent
+  \fcolorbox{black}{defbackground}{\usebox\borderedboxcontents}%
+  \medskip\par\noindent
+  \ignorespacesafterend
+}
+
+\newtcolorbox{important}{colback=red!5!white,colframe=red}
+
+\newcommand*{\sectionref}[1]{section~\ref{#1}}
+\newcommand*{\Sectionref}[1]{Section~\ref{#1}}
+
+\newcommand{\doglossaryentry}[1]{%
+  \glsxtrglossentry{#1} & \glsentrydesc{#1}\glspostdescription\\%
+}
+\newcounter{localglossary}
+\newenvironment{localglossary}
+{%
+  \stepcounter{localglossary}%
+  \renewcommand{\glolinkprefix}{\thelocalglossary.}%
+  \GlsXtrStartUnsetBuffering*
+}
+{%
+  \par
+  \begin{tabular}{ll}
+  \GlsXtrForUnsetBufferedList\doglossaryentry
+  \end{tabular}
+  \GlsXtrStopUnsetBuffering
+  \par
+}
+\pagestyle{headings}
+
+\newcommand{\glossarytitle}{Index}
+\let\orgbibcite\bibcite
+\renewcommand{\bibcite}[2]{}
+\externaldocument{bib2gls}
+\let\bibcite\orgbibcite
+
+\newcommand{\addr}[1]{\\\href{https://www.#1/}{\nolinkurl{#1}}}
+\title{\styfmt{glossaries-extra} and \bibgls: An Introductory Guide}
+\author{Nicola Talbot\addr{dickimaw-books.com}}
+\input{version}
+
+\makeatletter
+\begingroup
+ \renewcommand{\addr}[1]{}
+ \let\texorpdfstring\@secondoftwo
+ \DTMsetstyle{pdf}
+ \protected at edef\x{\endgroup
+   \noexpand\hypersetup{%
+     pdfinfo={
+       Title={\@title},
+       Author={\@author},
+       CreationDate={\DTMuse{creation}},
+       ModDate={\DTMuse{moddate}},
+     }%
+   }%
+ }\x
+
+\makeatother
+
+\begin{document}
+\maketitle
+\pagenumbering{alph}
+\thispagestyle{empty}
+
+\begin{abstract}
+This document is an introductory guide to \bibgls\ and the
+\sty{glossaries-extra} package to help you get started. For
+further information, including more complex commands and settings,
+see the main \bibgls\ user manual (\filefmt{bib2gls.pdf},
+in the same directory as this document),
+the \isty{glossaries-extra} user manual,
+(distributed with the \sty{glossaries-extra}
+package~\cite{glossaries-extra})
+and the \isty{glossaries} user manual
+(distributed with the \sty{glossaries} package~\cite{glossaries}).
+See also the gallery~\cite{gallery} for examples.
+
+The \sty{glossaries} package is the \emph{base} package. The 
+\sty{glossaries-extra} package internally loads the \sty{glossaries} package 
+and extends it, providing extra options or modifying the base
+commands to increase flexibility. If you want to use \bibgls, you
+must load \sty{glossaries-extra}, which provides the interface
+required by \bibgls.
+This document doesn't cover the other indexing methods described in
+the base package. If you get an undefined control sequence or
+unknown option error when trying out any of the examples here, check
+that you are using the latest versions of \sty{glossaries},
+\sty{glossaries-extra} and \bibgls.
+\end{abstract}
+
+\clearpage
+\pagenumbering{roman}
+\tableofcontents
+
+\clearpage
+\pagenumbering{arabic}
+
+\chapter{Introduction}
+\label{sec:beginintro}
+
+The \sty{glossaries} package provides a way of defining terms,
+notation or abbreviations that can then be used in the document.
+This ensures consistent naming and formatting. (With the help of the
+\sty{hyperref} package, it's also possible to create hyperlinks from
+the reference to a place in the document that provides a definition
+of the term, but more about that later.) Each entry (term,
+notation or abbreviation) is defined using:
+\nosecformatdef{newglossaryentry}
+Here's a simple example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\ics{usepackage}\marg{glossaries}
+\strut
+\gls{newglossaryentry}\marg{duck}\comment{label}
+\marg{\comment{ information about this term:}
+  \field{name}=\marg{duck},\comment{ display name}
+  \field{description}=\marg{a waterbird with webbed feet}\comment{description}
+}
+\strut
+\gls{newglossaryentry}\marg{goose}\comment{ label}
+\marg{\comment{information about this term:}
+  \field{name}=\marg{goose},\comment{display name}
+  \field{plural}=\marg{geese},\comment{plural form}
+  \field{description}=\marg{a large waterbird with a long neck, short legs,
+   webbed feet and a short broad bill}
+}
+\strut
+\cmd{begin}\marg{document}
+The pond contained a \gls{gls}\marg{duck} (\gls{glsentrydesc}\marg{duck}) and 
+a \gls{gls}\marg{goose} (\gls{glsentrydesc}\marg{goose}). \gls{Glspl}\marg{duck} and 
+\gls{glspl}\marg{goose} are fowl.
+\cmd{end}\marg{document}
+\end{codeenv}
+The resulting text is:
+\begin{result}
+The pond contained a \gls{ex1.duck} (\glsentrydesc{ex1.duck}) and 
+a \gls{ex1.goose} (\glsentrydesc{ex1.goose}). \Glspl{ex1.duck} and
+\glspl{ex1.goose} are fowl.
+\end{result}
+For convenience, the text produced by commands such as \cs{gls} is called the 
+\pidx{link-text} (even if there are no hyperlinks).
+
+The first argument of \gls{newglossaryentry} is a label that
+uniquely identifies the term (see \sectionref{sec:labels}). The
+second argument is a comma-separated list of
+\meta{setting}\dequals\meta{value} assignments.  Each \meta{setting}
+is referred to as a \qt{key} in the \isty{glossaries} manual or as a
+\qt{field} in the \bibgls\ manual. A list of the available base keys
+can be found in the \isty{glossaries} user manual.  The
+\isty{glossaries-extra} package provides some additional keys that
+are described in the \sty{glossaries-extra} manual. The \bibgls\
+user manual summarises all keys (fields) in \sectionref{sec:fields}.
+
+The term \qt{field} not only includes the keys that may be used with
+\gls{newglossaryentry} but also internal labels (which may or may
+not have a corresponding key) that are used to store information.
+Note that there are some fields that may be used in the document
+that are considered internal fields by \bibgls\ because the field
+value is typically set as a by-product of the way that \bibgls\
+works. If these fields are set manually then you may get unexpected
+results as this can break \bibgls's normal operation.
+
+\begin{important}
+If the field value contains commas or equal signs the value must be grouped
+to hide those characters from the \meta{key}\dequals\meta{value} parser.
+When using \bibgls, the field value must be delimited according to
+the \ext{bib} file format.
+\end{important}
+
+The two main keys are \field{name} and \field{description}. The
+\field{name} identifies how the term should be displayed in the
+glossary (see \sectionref{sec:displaygloss}). It also provides the
+default singular term, if not explicitly given. The default plural
+is obtained by appending \qt{s} to the singular form. If this isn't
+correct (as with \qt{geese}), then the plural form can be specified
+with the \field{plural} key.
+
+The description (set with the \field{description} key) is usually
+only displayed in the glossary, but you can display it in the text
+using:
+\nosecformatdef{glsentrydesc}
+as in the above example. This simply expands to the value of the
+\field{description} field (or does nothing if there's no entry
+associated with the given label).
+
+The main command used to reference a term is:
+\nosecformatdef{gls}
+In the above example, \gls{gls} just displays the singular form, but you
+can provide alternative text to use the first time a term is
+referenced (see \sectionref{sec:firstuse}). The plural form is obtained with
+the \pidx{variant} command:
+\nosecformatdef{glspl}
+There are other \idxpl{variant} of \gls{gls} that perform
+\glslink{case-change}{case-changing}.
+If you want to start a sentence with an entry then you can use:
+\nosecformatdef{Gls}
+for the singular form and
+\nosecformatdef{Glspl}
+for the plural form. For all capitals, use:
+\nosecformatdef{GLS}
+for the singular form and
+\nosecformatdef{GLSpl}
+for the plural form. Any mention of \gls{gls} and its
+\idxpl{variant} in this guide or in the user manuals means that the
+comments applied to \gls{gls} also apply to the plural and
+case-changing versions.
+
+The \meta{insert} optional argument is provided to insert additional material.
+For example:
+\begin{codeenv}
+The \gls{gls}\marg{goose} liked the \gls{gls}\marg{duck}['s] hat.
+\end{codeenv}
+which produces (assuming the above definitions):
+\begin{result}
+The \gls{ex1.goose} liked the \gls{ex1.duck}['s] hat.
+\end{result}
+In some cases, there may not be a noticeable difference between the
+above and the following:
+\begin{codeenv}
+The \gls{gls}\marg{goose} liked the \gls{gls}\marg{duck}'s hat.
+\end{codeenv}
+It depends on other settings, such as whether or not hyperlinks have
+been enabled. (The inserted material is commonly moved inside the
+hyperlink.) Take care if you need a literal open square bracket
+following \code{\cs{gls}\margm{label}} as you need to prevent it from being
+interpreted as the optional \meta{insert} argument. For example:
+\begin{codeenv}
+The \gls{gls}\marg{goose} liked the \gls{gls}\marg{duck}\marg{['s]} hat.
+\end{codeenv}
+which now produces:
+\begin{result}
+The \gls{ex1.goose} liked the \gls{ex1.duck}{['s]} hat.
+\end{result}
+An alternative in this case could be to define:
+\begin{codeenv}
+\cmd{newcommand}*\marg{\cmd{missing}}[1]\marg{[\gls*{param}1]}
+\end{codeenv}
+and then use:
+\begin{codeenv}
+The \gls{gls}\marg{goose} liked the \gls{gls}\marg{duck}\cmd{missing}\marg{'s} hat.
+\end{codeenv}
+This conveniently hides the open square bracket from \cs{gls}.
+
+\begin{important}
+Commands like \gls{gls} are \idx{robust}. Commands like
+\gls{glsentrydesc} are \idx{expandable}. (See \sectionref{sec:robust}.)
+If you want the entry to appear in a PDF bookmark, you need to use an 
+expandable command to reference it.
+\end{important}
+
+There are some helper commands that internally use
+\gls{newglossaryentry}, such as \cs{newabbreviation} (described in
+\sectionref{sec:abbreviations}) and \cs{glsxtrnewsymbol} (described
+in \sectionref{sec:symbols}). If the description contains explicit paragraph
+breaks then:
+\nosecformatdef{longnewglossaryentry}
+is required instead.
+
+\section{Labels}
+\label{sec:labels}
+
+The label used to identify the entry can't contain any special characters, such
+as \gls{commentchar} (percent), \gls{ampchar} (ampersand), \gls{param} (hash),
+\gls{mshiftchar} (dollar), or \gls{nbspchar} (tilde).  Be careful of packages
+that make other characters active (such as \isty{babel} with its shortcuts). If
+you are using \isty{inputenc}, this also includes extended Latin characters and
+characters from other scripts.
+
+Recent updates to the \LaTeX\ kernel mean that there's much better
+support for UTF-8 characters. Ensure that you have at least
+\sty{glossaries} v4.50, \sty{glossaries-extra} v1.49 and
+\sty{mfirstuc} 2.08. It's now possible to have:
+\begin{codeenv}
+\gls{newglossaryentry}\marg{élite}\comment{label}
+\marg{
+  \field{name} = \marg{élite},
+  \field{description} = \marg{group of people regarded as
+  the best of a particular society or organisation}
+}
+\end{codeenv}
+Regardless of whether or not you use a native UTF-8 engine, provided
+you have a new \TeX\ distribution.
+
+\begin{important}
+The UTF-8 information below refers to older
+versions and older kernels.
+\end{important}
+
+If you want to include UTF-8 characters in the
+label then you must use a \TeX\ engine with native Unicode support (that is,
+\XeLaTeX\ or \LuaLaTeX).
+
+For example, with no UTF-8 support (not even \sty{inputenc}):
+\begin{codeenv}
+\gls{newglossaryentry}\marg{elite}\comment{label (no UTF-8 support)}
+\marg{
+  \field{name} = \marg{\marg{\gls{acute}e}lite},
+  \field{description} = \marg{group of people regarded as
+  the best of a particular society or organisation}
+}
+\end{codeenv}
+or with \sty{inputenc}:
+\begin{codeenv}
+\gls{newglossaryentry}\marg{elite}\comment{label (UTF-8 not natively supported)}
+\marg{
+  \field{name} = \marg{élite},
+  \field{description} = \marg{group of people regarded as
+  the best of a particular society or organisation}
+}
+\end{codeenv}
+Whereas with \XeLaTeX\ or \LuaLaTeX\ you can do:
+\begin{codeenv}
+\gls{newglossaryentry}\marg{élite}\comment{label (UTF-8 natively supported)}
+\marg{
+  \field{name} = \marg{élite},
+  \field{description} = \marg{group of people regarded as
+  the best of a particular society or organisation}
+}
+\end{codeenv}
+
+You may have noticed the grouping of the initial (accented) letter
+in the \gls{ASCII} example (\code{\marg{\gls{acute}e}lite}). This is
+necessary to ensure that the first-letter case-changing commands,
+such as \ics{Gls}, work. It also used to be required around the
+\qtt{é} with \sty{inputenc}, but if you have up-to-date versions of
+\sty{glossaries} and \sty{datatool} then it should no longer be
+necessary. No special treatment is needed with \XeLaTeX\ or
+\LuaLaTeX\ where \qtt{é} is a single token.
+
+If you can't use extended characters in the label (because you're
+not using \XeLaTeX\ or \LuaLaTeX), then simply stripping the accents
+to create an \gls{ASCII} alternative may be sufficient, but take
+care if this may cause a conflict. For example:
+\begin{codeenv}
+\gls{newglossaryentry}\marg{resume}\comment{label}
+\marg{
+  \field{name} = \marg{resume},
+  \field{description} = \marg{continue after an interruption}
+}
+\strut
+\gls{newglossaryentry}\marg{resumee}\comment{label}
+\marg{
+  \field{name} = \marg{r\gls{acute}esum\gls{acute}e},
+  \field{description} = \marg{summary of something or curriculum vitae}
+}
+\end{codeenv}
+For languages that use a non-Latin script, if you can't or don't
+want to use \XeLaTeX\ or \LuaLaTeX, then you need to decide the most
+appropriate \gls{ASCII} naming scheme.
+For example:
+\begin{codeenv}
+\gls{newglossaryentry}\marg{goose}\comment{using translation for label}
+\marg{
+  \field{name} = \marg{\textcyrillicmono{гусь}},
+  \field{plural} = \marg{\textcyrillicmono{гуси}},
+  \field{description} = \marg{\textnormal{\ldots}}
+}
+\end{codeenv}
+or
+\begin{codeenv}
+\gls{newglossaryentry}\marg{hus}\comment{using closest ASCII match for label}
+\marg{
+  \field{name} = \marg{\textcyrillicmono{гусь}},
+  \field{plural} = \marg{\textcyrillicmono{гуси}},
+  \field{description} = \marg{\textnormal{\ldots}}
+}
+\end{codeenv}
+
+In addition to labels identifying entries, there are also labels
+that identify other things, such as a glossary, category or letter
+group. The same restrictions apply to those labels.
+
+\section{First Use}
+\label{sec:firstuse}
+
+Each entry has a \pidx{firstuseflag} (boolean variable) that
+determines whether or not the entry has been referenced in the
+document.  Commands like \gls{gls} and \gls{glspl} change the flag
+to indicate that the entry has been used. Commands like
+\gls{glsentrydesc} don't. Here's a modification of the earlier
+example document that provides different versions depending on 
+whether or not the entry has already been referenced:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{glossaries}
+\strut
+\gls{newglossaryentry}\marg{duck}\comment{label}
+\marg{\comment{information about this term:}
+  \field{name}   = \marg{Duck (noun)},\comment{display name}
+  \field{first}  = \marg{duck (quack, quack)},\comment{first use singular}
+  \field{firstplural} = \marg{ducks (quack, quack)},\comment{first use plural}
+  \field{text}   = \marg{duck},\comment{subsequent use singular}
+  \field{description} = \marg{a waterbird with webbed feet}\comment{description}
+}
+\strut
+\gls{newglossaryentry}\marg{goose}\comment{label}
+\marg{\comment{information about this term:}
+  \field{name}   = \marg{Goose (noun, pl.\ geese)},\comment{display name}
+  \field{first}  = \marg{goose (honk, honk)},\comment{first use singular}
+  \field{firstplural} = \marg{geese (honk, honk)},\comment{first use plural}
+  \field{text}   = \marg{goose},\comment{subsequent use singular}
+  \field{plural} = \marg{geese},\comment{subsequent use plural}
+  \field{description}=\marg{a large waterbird with a long neck, short legs,
+   webbed feet and a short broad bill}
+}
+\strut
+\cmd{begin}\marg{document}
+The pond contained a \gls{gls}\marg{duck}\cmd{footnote}\marg{\gls{glsentryname}\marg{duck}:
+\gls{glsentrydesc}\marg{duck}} and two 
+\gls{glspl}\marg{goose}\cmd{footnote}\marg{\gls{glsentryname}\marg{goose}: 
+\gls{glsentrydesc}\marg{goose}}. \gls{Glspl}\marg{duck} and \gls{glspl}\marg{goose} are fowl.
+\cmd{end}\marg{document}
+\end{codeenv}
+This now produces:
+\begin{result}
+The pond contained a \gls{ex2.duck}\footnote{\glsentryname{ex2.duck}:
+\glsentrydesc{ex2.duck}} and two
+\glspl{ex2.goose}\footnote{\glsentryname{ex2.goose}: 
+\glsentrydesc{ex2.goose}}. \Glspl{ex2.duck} and \glspl{ex2.goose} are fowl.
+\end{result}
+This uses:
+\nosecformatdef{glsentryname}
+which works in a similar way to \gls{glsentrydesc}. In this case,
+\gls{glsentryname} simply expands to the value of the \field{name}
+key. There's also a case-changing version:
+\nosecformatdef{Glsentryname}
+which changes the initial character to \idx{uppercase},
+but (unlike \cs{glsentryname}) this command isn't expandable. If,
+for example, I had instead set the duck's \field{name} key using:
+\begin{codeenv}
+\field{name} = \marg{duck (noun)}
+\end{codeenv}
+then I would need to use \code{\gls{Glsentryname}\marg{duck}}
+instead.
+
+So on \pidx{firstuse}, \cs{gls} uses the value of the \field{first} key
+and \cs{glspl} uses the value of the \field{firstplural} key. On
+\pidx{subsequentuse}, \cs{gls} uses the value of the \field{text} key and
+\cs{glspl} uses the value of the \field{plural} key. \pIdx{regular}
+abbreviations also follow this usage. \pIdx{non-regular}
+abbreviations follow a different behaviour for \gls{gls} (and its
+\idxpl{variant}) that's determined by the abbreviation style.
+
+If the first use for a particular group of terms always has the
+same pattern (such as following the term with a brief description or
+alternative representation), then it's simpler to use one of the
+automated methods provided, such as the abbreviation mechanism
+(\sectionref{sec:abbreviations}) or changing the formatting
+(\sectionref{sec:glsformats}).
+
+You can test if an entry has been used with:
+\nosecformatdef{ifglsused}
+This requires that the entry (identified by \meta{label}) is
+defined. If it isn't then neither \meta{true} nor \meta{false} is
+done and an error or warning occurs. Otherwise, the command will do
+\meta{true} if the entry has been used or \meta{false} if the entry
+hasn't been used.
+
+When using \bibgls, entries are never defined on the first \LaTeX\
+run, so you may instead prefer:
+\nosecformatdef{GlsXtrIfUnusedOrUndefined}
+which does \meta{true} if either the entry hasn't been defined or
+hasn't been marked as used, otherwise it does \meta{false}.
+
+Neither \gls{ifglsused} nor \gls{GlsXtrIfUnusedOrUndefined} should
+occur in the \idx{postlinkhook} (described later) as the entry will have already
+been used by that point. Instead, you need \gls{glsxtrifwasfirstuse} 
+(see \sectionref{sec:postlinkhooks}).
+
+\section{Categories}
+\label{sec:categories}
+
+The \isty{glossaries-extra} extension package provides the
+\field{category} key, which isn't available with just the base
+\sty{glossaries} package. The value of this key must be a
+label as it's used to construct command names. You can choose
+whatever label you like (as long as it conforms to the valid
+labelling scheme, described in \sectionref{sec:labels}). If you
+don't specify a category, then \gls{newglossaryentry} and
+\gls{longnewglossaryentry} assume \code{general}. The helper
+commands, such as \gls{newabbreviation}, have different defaults.
+
+For example:
+\begin{codeenv}
+\gls{newglossaryentry}\marg{amethyst}
+\marg{
+   \field{name} = \marg{amethyst},
+   \field{description} = \marg{a purple type of quartz},
+   \field{category} = \marg{mineral}
+}
+\end{codeenv}
+The value of the \field{category} field for a given entry can be obtained
+with:
+\nosecformatdef{glscategory}
+where \meta{label} identifies the entry. This command is expandable
+and does nothing if the entry hasn't been defined. You can test the
+value of the \field{category} field using:
+\nosecformatdef{glsifcategory}
+This checks if the \field{category} field for the entry given by
+\meta{label} is set to \meta{category}, but doesn't perform any
+expansion of \meta{category}. It generates an error if the entry
+doesn't exist (or warning with \styopt[warn]{undefaction}).
+
+The category allows you to apply certain types of formatting, such
+as the \idx{postlinkhook} (\sectionref{sec:postlinkhooks}).
+For abbreviations, the category also governs the abbreviation style (see
+\sectionref{sec:abbreviations}) and can be used for filtering.
+Categories may be assigned \pidxpl{attribute} that can also be used
+to modify formatting or styles. 
+
+Unlike the \idx{postlinkhook}, which
+needs to be defined before an entry is \emph{used} (with commands like
+\gls{gls}), some \idxpl{attribute} need to be set before the entry
+is \emph{defined}, so it's best to set them up as soon as possible in the
+preamble (after loading \sty{glossaries-extra}).
+
+\section{Adding Extra Information}
+\label{sec:userkeys}
+
+In addition to the \field{name} and \field{description} keys,
+there's also a \field{symbol} key which allows you to store an
+associated symbol. The value can be obtained with:
+\nosecformatdef{glssymbol}
+(which is robust and recognises the \idx{postlinkhook}) or with:
+\nosecformatdef{glsentrysymbol}
+(which behaves like \gls{glsentrydesc} and \gls{glsentryname}).
+Neither of the above commands affect the \idx{firstuseflag}.
+For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}[hidelinks]\marg{hyperref}
+\cmd{usepackage}\marg{glossaries}
+\strut
+\gls{newglossaryentry}\marg{pi}\comment{label}
+\marg{\comment{settings:}
+   \field{name}   = \marg{Archimedes' constant},
+   \field{symbol} = \marg{\gls[noindex=false]{ensuremath}\marg{\cmd{pi}}},
+   \field{description} = \marg{ratio of a circle's circumference to its 
+diameter}
+}
+\strut
+\gls{newglossaryentry}\marg{thetai}\comment{label}
+\marg{\comment{settings:}
+   \field{name}   = \marg{theta parameter},
+   \field{symbol} = \marg{\gls{ensuremath}\marg{\cmd{theta}\gls{sbchar}i}},
+   \field{description} = \marg{one of the model parameters}
+}
+\strut
+\cmd{begin}\marg{document}
+\gls{gls}\marg{pi} (\gls{glssymbol}\marg{pi}). Compare \gls{mshiftchar}\gls{glssymbol}\marg{thetai}\gls[noindex=false]{spchar}2\gls{mshiftchar}
+with \gls{mshiftchar}\gls{glssymbol}\marg{thetai}[\gls{spchar}2]\gls{mshiftchar}.
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces:
+\begin{result}
+\gls{ex.pi} (\glssymbol{ex.pi}). Compare $\glssymbol{ex.thetai}^2$
+with $\glssymbol{ex.thetai}[^2]$.
+\end{result}
+Note that in this case there is now a difference between using the
+final optional \meta{insert} argument and simply appending the extra
+material. This is a result of the hyperlink that causes an
+interruption between the subscript \code{\gls{sbchar}i} and the following
+superscript \code{\gls{spchar}2}. (In this case, there's no target for the
+hyperlinks. That's covered in \sectionref{sec:displaygloss}.)
+
+If you have additional information, such as a translation,
+associated image or citation, then you can supply this with the six
+user keys:
+\field{user1}\glsaddeach{field.user2,field.user3,field.user4,field.user5}, 
+\ldots, \field{user6}. The value of the
+first field (\field{user1}) can be obtained with:
+\nosecformatdef{glsuseri}
+(which behaves like \gls{glssymbol}) or with:
+\nosecformatdef{glsentryuseri}
+(which behaves like \gls{glsentrysymbol}).
+\glsaddeach{glsuserii,glsuseriii,glsuseriv,glsuserv,%
+glsentryuserii,glsentryuseriii,glsentryuseriv,glsentryuserv}%
+The other fields are similarly obtained using \idx{lowercase} Roman
+numerals, so value of the sixth field (\field{user6}) can be obtained with:
+\nosecformatdef{glsuservi}
+(which behaves like \gls{glssymbol}) or with:
+\nosecformatdef{glsentryuservi}
+(which behaves like \gls{glsentrysymbol}).
+For example:
+\begin{codeenv}
+\gls{newglossaryentry}\marg{polly.parrot}\comment{label}
+\marg{\comment{}
+   \field{name} = \marg{Polly Parrot},
+   \field{description} = \marg{Senior assistant at the International Society 
+of Duck and Geese},
+   \field{user1} = \marg{British},\comment{nationality}
+   \field{user2} = \marg{1970-12-31},\comment{date of birth}
+   \field{user3} = \marg{female},\comment{gender}
+   \field{user4} = \marg{43 The Lane, Some Town, Noshire AB1 2XY},\comment{address}
+   \field{user5} = \marg{polly.parrot at example.com}\comment{email}
+}
+\end{codeenv}
+
+Alternatively you can define your own custom keys. If you don't need
+commands equivalent to \gls{glssymbol}, then you can use:
+\nosecformatdef{glsaddstoragekey}
+where \meta{key} is the name of the new key, \meta{default value} is
+the default value if the key isn't explicitly set and \meta{no link
+cs} is the name of the command to access the field value (equivalent
+to \gls{glsentrysymbol}). If you want commands equivalent to
+\gls{glssymbol} that have the \meta{options} and \meta{insert}
+optional arguments and obey the \idx{postlinkhook}, then use
+\nosecformatdef{glsaddkey}
+The first three arguments are as for \gls{glsaddstoragekey}.
+The next argument \meta{no link ucfirst cs} is like \meta{no link
+cs} but converts the first letter to \idx{uppercase} (analogous to
+\gls{Glsentryname}). The final three commands behave like
+\gls{glssymbol}, but \meta{link ucfirst cs} converts the first
+letter to \idx{uppercase} and \meta{link allcaps cs} converts the entire
+value to \idx{uppercase}.
+
+The new keys must be provided before the entries are defined (and
+the key definitions must come before the first \idx{resourceset}
+if you use \bibgls). For example:
+\begin{codeenv}
+\gls{glsaddstoragekey}\marg{\fieldfmt{nationality}}\marg{}\marg{\cmd{Nationality}}
+\gls{glsaddstoragekey}\marg{\fieldfmt{dateofbirth}}\marg{}\marg{\cmd{DateOfBirth}}
+\gls{glsaddstoragekey}\marg{\fieldfmt{gender}}\marg{}\marg{\cmd{Gender}}
+\gls{glsaddstoragekey}\marg{\fieldfmt{address}}\marg{}\marg{\cmd{Address}}
+\gls{glsaddstoragekey}\marg{\fieldfmt{email}}\marg{}\marg{\cmd{Email}}
+\gls{newglossaryentry}\marg{polly.parrot}\comment{label}
+\marg{\comment{}
+   \field{name} = \marg{Polly Parrot},
+   \field{description} = \marg{Senior assistant at the International Society 
+of Duck and Geese},
+   \fieldfmt{nationality} = \marg{British},\comment{nationality}
+   \fieldfmt{dateofbirth} = \marg{1970-12-31},\comment{date of birth}
+   \fieldfmt{gender}  = \marg{female},\comment{gender}
+   \fieldfmt{address} = \marg{43 The Lane, Some Town, Noshire AB1 2XY},\comment{address}
+   \fieldfmt{email}   = \marg{polly.parrot at example.com}\comment{email}
+}
+\end{codeenv}
+
+In addition to the commands like \gls{glssymbol} and
+\gls{glsentrysymbol}, there are other ways of accessing the field
+value or checking if the field has been set. In the commands listed
+below, the field label is the \emph{internal} label. In some cases,
+this is the same as the key, but there are a few that have a
+different internal label. See Table~\ref*{tab:internalfields} in the
+\bibgls\ user manual or Table~4.1 in the \sty{glossaries} user
+manual~\cite{glossaries}. Custom fields provided with
+\gls{glsaddkey} or \gls{glsaddstoragekey} have matching key and
+internal field labels.
+
+The \sty{glossaries-extra} package provides a generic way of
+accessing a field, analogous to commands like \gls{glsentryname}:
+\nosecformatdef{glsxtrusefield}
+This expands to the field value if defined or does nothing if the
+entry or field isn't defined.
+
+The base \sty{glossaries} package provides:
+\nosecformatdef{ifglshassymbol}
+which tests if the \field{symbol} field has been assigned. There are similar 
+commands for other common fields. For a more general purpose test, you 
+can use:
+\nosecformatdef{ifglshasfield}
+which checks if the given entry (identified by \meta{entry label}, 
+which must be defined) has the field identified by \meta{field label}
+set to a non-empty value. Within \meta{true}, you can access the
+field value with:
+\nosecformatdef{glscurrentfieldvalue}
+The \sty{glossaries-extra} package provides a similar command:
+\nosecformatdef{glsxtrifhasfield}
+which doesn't test if the entry exists. The unstarred form adds
+implicit grouping around \meta{true} or \meta{false} (allowing
+nested use). The starred form \gls{glsxtrifhasfield*} doesn't. 
+You can compare the field value with a string using:
+\nosecformatdef{GlsXtrIfFieldEqStr}
+If you need the string to be (protected) fully expanded before
+comparison, you need:
+\nosecformatdef{GlsXtrIfFieldEqXpStr}
+If you additionally need the field value (protected) fully expanded
+before comparison, use:
+\nosecformatdef{GlsXtrIfXpFieldEqXpStr}
+For a complete list of field commands, see the
+\sty{glossaries-extra} user manual~\cite{glossaries-extra}.
+
+The earlier \code{duck} and \code{goose} examples from 
+\sectionref{sec:firstuse} can be rewritten to move the parenthetical
+material into separate keys:
+\begin{codeenv}
+\gls{newglossaryentry}\marg{duck}\comment{label}
+\marg{\comment{information about this term:}
+  \field{name}   = \marg{duck},
+  \field{user1}  = \marg{noun},
+  \field{user2}  = \marg{quack, quack},
+  description = {a waterbird with webbed feet}
+}
+\strut
+\gls{newglossaryentry}\marg{goose}\comment{label}
+\marg{\comment{information about this term:}
+  \field{name}   = \marg{goose},
+  \field{plural} = \marg{geese},
+  \field{user1}  = \marg{noun},
+  \field{user2}  = \marg{honk, honk},
+  \field{description}=\marg{a large waterbird with a long neck, short legs,
+   webbed feet and a short broad bill}
+}
+\end{codeenv}
+The \idx{postlinkhook} and glossary style can then be modified to 
+include the additional information.  For example:
+\begin{codeenv}
+\gls[noindex=false]{glsdefpostlink}\marg{general}\marg{\comment{post-link hook}
+ \gls[noindex=false]{glsxtrifwasfirstuse}\marg{\cmd{space}(\gls{glsentryuserii}\marg{\gls{glslabel}})}{}\comment{}
+}
+\strut
+\gls[noindex=false]{glssetcategoryattribute}\marg{general}\marg{glossname}\marg{firstuc}
+\strut
+\gls[noindex=false]{glsdefpostname}\marg{general}\marg{\comment{post-name hook}
+ \cmd{space}
+ (\gls{glsentryuseri}\marg{\gls[noindex=false]{glscurrententrylabel}}\comment{}
+  \gls{GlsXtrIfXpFieldEqXpStr}\marg{plural}\marg{\gls{glscurrententrylabel}}\comment{}
+  \marg{\gls[noindex=false]{glsentrytext}\marg{\gls{glscurrententrylabel}}s}\marg{}\comment{}
+  \marg{, pl.\gls{cs.space}\gls[noindex=false]{glsentryplural}{\gls{glscurrententrylabel}}}\comment{}
+ )\comment{}
+}
+\end{codeenv}
+The \idx{postlinkhook} appends the value of the \field{user2} field
+after the \idx{firstuse} of \gls{gls} (or its \idxpl{variant}).
+The \catattr{glossname} attribute is set to \code{firstuc}, which
+converts the first letter of the \field{name} field to
+\idx{uppercase} when it's displayed in the glossary.  The
+\idx{postnamehook} appends (in parentheses) the value of the
+\field{user1} field and then checks if the plural form is the same
+as the singular form with \qt{s} appended, and only displays the
+plural if they are different. See \sectionref{sec:glsformats} and
+\sectionref{sec:displaygloss} for further details.
+
+\section{Accessibility Support}
+\label{sec:accsupp}
+
+The base \sty{glossaries} package is distributed with the
+supplementary \sty{glossaries-accsupp} package, which uses the
+\sty{accsupp} package~\cite{accsupp} to provide accessibility support. With the
+\sty{glossaries-extra} extension package, the
+\sty{glossaries-accsupp} package needs to be loaded after \sty{glossaries}
+but before \sty{glossaries-extra} sets up the accessibility
+integration support. The simplest way to do this is with
+\sty{glossaries-extra}'s \styopt{accsupp} package option.
+
+The accessibility support is provided through the PDF
+\code{ActualText} specification (via the \sty{accsupp} package). 
+If you need \code{E} or \code{Alt} instead of \code{ActualText} then redefine:
+\nosecformatdef{glsaccsupp}
+as appropriate. For example:
+\begin{codeenv}
+\cmd{renewcommand}*\marg{\gls{glsaccsupp}}[2]\marg{\comment{}
+  \cmd{BeginAccSupp}\marg{Alt=\marg{\gls{param}1}}\gls{param}2\cmd{EndAccSupp}\marg{}\comment{}
+}
+\end{codeenv}
+
+The \sty{glossaries-accsupp} package provides additional keys (see
+Table~\ref{tab:accsuppfields} in the \bibgls\ user manual or
+Chapter~18 of the \sty{glossaries} user manual~\cite{glossaries}).
+The main keys are \field{access}, which provides an alternative to
+the \field{name} field, \field{symbolaccess}, which provides an
+alternative to the \field{symbol} field and \field{shortaccess},
+which provides an alternative to the \field{short} field,
+\field{firstaccess}, which provides an alternative to the
+\field{first} field, and \field{textaccess}, which provides an
+alternative to the \field{text} field. If any of the accessibility
+fields are unset, no accessibility support is provided for that
+field.
+For example:
+\begin{codeenv}
+\gls{newglossaryentry}\marg{R}\comment{label}
+\marg{\comment{settings:}
+ \field{name}        = \marg{\cmd{ensuremath}\marg{\cmd{Re}}},
+ \field{access}      = \marg{set of real numbers symbol},\comment{name access}
+ \field{textaccess}  = \marg{set of real numbers},\comment{text access}
+ \field{firstaccess} = \marg{set of real numbers},\comment{first access}
+ \field{description} = \marg{set of real numbers}
+}
+\end{codeenv}
+This means that when the \field{name} field is displayed in the
+glossary, the corresponding accessibility text is \qt{set of real
+numbers symbol}, but the \idx{link-text} for \gls{gls} is just
+\qt{set of real numbers} (for both \idx{firstuse} and subsequent
+use).
+
+There are some category attributes that govern the default settings
+of some fields when using \gls{newabbreviation} (see
+\sectionref{sec:abbreviations}). If accessibility support is
+provided, there are some additional attributes (introduced to
+\sty{glossaries-extra} version 1.31):
+\begin{description}
+\item[\catattr{accessinsertdots}] This is a boolean attribute that behaves like
+\catattr{insertdots} but only applies to the \field{shortaccess}
+field, if it hasn't explicitly been set. This is useful for
+initialisms that should be read out as letters but the screen reader
+might interpret as a word. For example:
+\begin{codeenv}
+\gls{glssetcategoryattribute}\marg{initialism}\marg{\catattr{accessinsertdots}}\marg{true}
+\gls{newabbreviation}\oarg{\field{category}=initialism}\marg{pi}\marg{PI}\marg{Private Investigator}
+\end{codeenv}
+This means that the short form appears as just \qt{PI} in the
+document text, but the accessibility text is \qt{P.I.} which prompts
+the screen reader to read it as an abbreviation instead of the word
+\qt{pi}. Since the \field{shortaccess} field is an aid to the screen
+reader and doesn't modify the visible text, there's no check
+for the \catattr{retainfirstuseperiod} or \catattr{discardperiod}
+attributes for that field. This setting doesn't affect the
+accessibility support for the \field{name}, \field{first} or
+\field{text} fields.
+
+\item[\catattr{nameshortaccess}] This is a boolean attribute, where
+the value \code{true} indicates the attribute is set. If the
+\field{shortaccess} field is assigned (either explicitly with the key or
+implicitly through the use of the \catattr{accessinsertdots}
+attribute) and the \field{access} field isn't specified, then if the
+\catattr{nameshortaccess} attribute is set this will copy the
+\field{shortaccess} field to the \field{access} field. For example:
+\begin{codeenv}
+\gls{glssetcategoryattribute}\marg{initialism}\marg{\catattr{accessinsertdots}}\marg{true}
+\gls{glssetcategoryattribute}\marg{initialism}\marg{\catattr{nameshortaccess}}\marg{true}
+\gls{newabbreviation}\oarg{\field{category}=initialism}\marg{pi}\marg{PI}\marg{Private Investigator}
+\end{codeenv}
+Abbreviations that behave like regular terms (such as
+\abbrstyle{short-nolong}) may also need \catattr{textshortaccess}
+and \catattr{firstshortaccess} set.
+
+\item[\catattr{textshortaccess}] Like \catattr{nameshortaccess}, but
+applies to the \field{textaccess} field.
+
+\item[\catattr{firstshortaccess}] Like \catattr{firstshortaccess}, but
+applies to the \field{firstaccess} field.
+
+\item[\catattr{accessaposplural}] If the \field{shortaccess} field
+is set (either explicitly with the key or implicitly through the use
+of the \catattr{accessinsertdots} attribute) and the
+\field{shortpluralaccess} field isn't set, the
+\catattr{accessaposplural} boolean attribute behaves like
+\catattr{aposplural} but only applies to the
+\field{shortpluralaccess} field. If the \catattr{accessaposplural}
+attribute isn't set but the \catattr{aposplural} attribute is set,
+then that's used instead. If you want \catattr{aposplural} on but
+not apply it to \field{shortpluralaccess} then you need to set the
+\catattr{accessaposplural} attribute to \code{false}.
+
+\item[\catattr{accessnoshortplural}] A boolean attribute like
+\catattr{accessaposplural} but analogous to \catattr{noshortplural}
+instead.
+\end{description}
+These attributes have no effect for entries that aren't defined
+using \gls{newabbreviation}. (These attributes apply to
+\gls{newacronym} provided it internally uses \gls{newabbreviation},
+which is does by default with \sty{glossaries-extra}.)
+
+\section{Prefixes}
+\label{sec:prefixes}
+
+The \sty{glossaries} package is distributed with the supplementary
+\sty{glossaries-prefix} package. This automatically loads
+\sty{glossaries}, but if you are using \sty{glossaries-extra}, it's
+best loaded after. This supplementary package supplies extra keys
+and some commands analogous to \gls{gls}. The main purpose is to
+provide a different prefix to \gls{gls}, depending on whether it's
+the \idx{firstuse} or subsequent use. For example, if the
+\idx{firstuse} starts with a vowel (or vowel sound), you may need \qt{an
+\gls{gls}\margm{label}} but if the subsequent use starts with a
+constant, you may need \qt{a \gls{gls}\margm{label}}. The prefix for
+the \idx{firstuse} form is specified in the \field{prefixfirst}
+field, and the prefix for the subsequent use form is specified in the
+\field{prefix} field. If a space is required between the prefix and
+\gls{gls}, this needs to be included, as the prefixing system allows
+for prefixes like l' which shouldn't be followed by a space.
+
+To include the prefix, use:
+\nosecformatdef{pgls}
+instead of \gls{gls}. For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{book}
+\strut
+\cmd{usepackage}\marg{glossaries-extra}
+\cmd{usepackage}\marg{glossaries-prefix}
+\strut
+\gls{newabbreviation}
+ \oarg{\field{prefixfirst}=\marg{a\gls[noindex=false]{nbspchar}},\field{prefix}=\marg{an\cmd{space}}}
+ \marg{svm}\marg{SVM}\marg{support vector machine}
+\strut
+\cmd{begin}\marg{document}
+With a prefix: \gls{pgls}\marg{svm} or \gls{pgls}\marg{svm}.
+Without a prefix: the \gls{gls}\marg{svm}.
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces:
+\begin{result}
+With a prefix: a support vector machine (SVM) or an SVM. Without a
+prefix: the SVM.
+\end{result}
+
+\section{Spaces}
+\label{sec:spaces}
+
+With \LaTeX\ in general, spaces are sometimes significant and
+sometimes ignored. When defining entries, any spaces around the
+equal sign or comma are ignored. For example, if an entry is defined
+as
+\begin{codeenv}
+\gls{newglossaryentry}\marg{sample}
+\marg{
+  \field{name} = \marg{sample} , \field{description} = \marg{an example}
+}
+\end{codeenv}
+then
+\begin{codeenv}
+/\gls{gls}\marg{sample}/
+\end{codeenv}
+will produce
+\begin{result}
+/sample/
+\end{result}
+(no spaces). Similarly with:
+\begin{codeenv}
+\gls{newglossaryentry}\marg{sample}
+\marg{
+  \field{name} = sample , \field{description} = \marg{an example}
+}
+\end{codeenv}
+However, spaces at the start or end of the value that's provided as
+an argument (rather than in a \keyvallist) often aren't ignored.
+
+The unstarred version of \gls{longnewglossaryentry} appends extra code to the end of the
+description, which removes any trailing spaces (and also the 
+\gls{postdescriptionhook}). The starred version
+\gls{longnewglossaryentry*} (only available with \sty{glossaries-extra}) 
+doesn't. In both cases any leading spaces are retained. For example,
+if the entry is defined as:
+\begin{codeenv}
+\gls{longnewglossaryentry}\marg{sample}\marg{name=\marg{sample}}\marg{ an example }\incorrect
+\end{codeenv}
+then:
+\begin{codeenv}
+/\gls{glsentrydesc}\marg{sample}/
+\end{codeenv}
+produces:
+\begin{result}
+/ an example/
+\end{result}
+(trailing space removed), whereas if the entry is defined as:
+\begin{codeenv}
+\gls{longnewglossaryentry*}\marg{sample}\marg{name=\marg{sample}}\marg{ an example }\incorrect
+\end{codeenv}
+then:
+\begin{codeenv}
+/\gls{glsentrydesc}\marg{sample}/
+\end{codeenv}
+produces:
+\begin{result}
+/ an example /
+\end{result}
+(leading and trailing spaces retained).
+
+Spaces in labels are significant. For example, in \verb|\gls{ duck }|
+the spaces are considered part of the label. If the entry was
+actually defined without spaces in the label then the entry
+referenced in \verb|\gls{ duck }| won't be found.
+
+\section{Undefined References}
+\label{sec:undefaction}
+
+If an entry that hasn't been defined is referenced with \gls{gls},
+by default an error is triggered. For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{glossaries}
+\strut
+\cmd{begin}\marg{document}
+A \gls{gls}\marg{duck}.
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces the error:
+\begin{verbatim}
+Glossary entry `duck' has not been defined.
+\end{verbatim}
+If you instruct \LaTeX\ to ignore the error and continue, the result
+is
+\begin{result}
+A .
+\end{result}
+The \sty{glossaries-extra} package provides the option
+\styopt[warn]{undefaction}, which will convert the error to a
+warning. For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}[\styopt{undefaction}=warn]\marg{glossaries-extra}
+\strut
+\cmd{begin}\marg{document}
+A \gls{gls}\marg{duck}.
+\cmd{end}\marg{document}
+\end{codeenv}
+This now produces the warning:
+\begin{verbatim}
+Glossary entry `duck' has not been defined on input line 6
+\end{verbatim}
+(There are also other warnings about an empty \code{main} glossary.)
+The result is now:
+\begin{result}
+A ??.
+\end{result}
+This replaces the undefined reference with two question marks, just like 
+undefined cross-references.
+Notice the difference between using \gls{ifglshasfield}:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}[\styopt{undefaction}=warn]\marg{glossaries-extra}
+\strut
+\cmd{begin}\marg{document}
+A \gls{gls}\marg{duck} 
+(\gls{ifglshasfield}\marg{\gls[noindex=false]{field.useri}}\marg{duck}\marg{\gls{glscurrentfieldvalue}}\marg{not set}).
+\cmd{end}\marg{document}
+\end{codeenv}
+which produces:
+\begin{result}
+A ?? (??).
+\end{result}
+(and has two undefined warnings) and using \gls{glsxtrifhasfield}:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}[\styopt{undefaction}=warn]\marg{glossaries-extra}
+\strut
+\cmd{begin}\marg{document}
+A \gls{gls}\marg{duck}
+(\gls{glsxtrifhasfield}\marg{\field{useri}}\marg{duck}\marg{\gls{glscurrentfieldvalue}}\marg{not set}).
+\cmd{end}\marg{document}
+\end{codeenv}
+which only has one undefined warning and produces:
+\begin{result}
+A ?? (not set).
+\end{result}
+
+When you incorporate \bibgls\ into the build process (see
+\sectionref{sec:bib2gls}), the first \LaTeX\ run doesn't have any 
+entries defined. One of the actions that the \styopt{record} option 
+automatically performs is to switch on \styopt[warn]{undefaction}, which avoids
+undefined errors on the first \LaTeX\ run. For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}[\styopt{record}]\marg{glossaries-extra}
+\strut
+\cmd{begin}\marg{document}
+A \gls{gls}\marg{duck}
+(\gls{glsxtrifhasfield}\marg{\field{useri}}\marg{duck}\marg{\gls{glscurrentfieldvalue}}\marg{not set}).
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces the same result as the previous example, but there's
+only the one warning (about an undefined reference) and no warning
+about the empty \code{main} glossary.
+
+\section{Robust, Fragile and Expandable Commands}
+\label{sec:robust}
+
+Commands like \gls{gls} are \pidx{robust}. This protects them from
+premature expansion in situations that would otherwise break the
+command. If content containing a \idx{robust} command is written to
+an external file, the \idx{robust} command itself is written instead of its
+definition. For example, consider the following document:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\cmd{newcommand}\marg{\csfmt{test}}\marg{some sample text}
+\cmd{begin}\marg{document}
+\gls{tableofcontents}
+\gls[noindex=false]{section}\marg{\csfmt{test}}
+\cmd{end}\marg{document}
+\end{codeenv}
+In this case, \csfmt{test} is expandable. Its definition doesn't
+contain anything complicated. The \ext{toc} file (which is input by
+\csfmt{tableofcontents}\glsadd{toc}) contains the line:
+\begin{codeenv}
+\cmd{contentsline} \marg{section}\marg{\cmd{numberline} \marg{1}some sample text}\marg{1}
+\end{codeenv}
+So \csfmt{test} has been expanded to its definition when it was
+written to the \ext{toc} file. If \csfmt{test} is defined in terms
+of another command, that will also be expanded. For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\cmd{newcommand}\marg{\csfmt{sample}}\marg{\gls{emph}\marg{sample}}
+\cmd{newcommand}\marg{\csfmt{test}}\marg{some \csfmt{sample}\gls{cs.space}text}
+\cmd{begin}\marg{document}
+\gls{tableofcontents}
+\gls{section}\marg{\csfmt{test}}
+\cmd{end}\marg{document}
+\end{codeenv}
+The \ext{toc} file now contains:
+\begin{codeenv}
+\cmd{contentsline} \marg{section}\marg{\cmd{numberline} \marg{1}some \gls{emph} \marg{sample}\gls{cs.space}text}\marg{1}
+\end{codeenv}
+So \csfmt{sample} has also been expanded but neither
+\gls{emph} nor \idx{cs.space} (backslash space) have
+been expanded. \Idx{robust} commands don't expand. For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{glossaries}
+\strut
+\gls{newglossaryentry}\marg{duck}
+\marg{
+  \field{name}=\marg{duck},
+  \field{description}=\marg{a waterbird with webbed feet}
+}
+\strut
+\cmd{begin}\marg{document}
+\gls{tableofcontents}
+\gls{section}\marg{\gls{Gls}\marg{duck}: \gls{glsentrydesc}\marg{duck}}
+\cmd{end}\marg{document}
+\end{codeenv}
+The \ext{toc} file now contains:
+\begin{codeenv}
+\cmd{contentsline} \marg{section}\marg{\cmd{numberline} \marg{1}\gls{Gls} \marg{duck}: a waterbird with 
+webbed feet}\marg{1}
+\end{codeenv}
+So \gls{Gls} doesn't expand, and the command itself is written to the
+\ext{toc} file, but \gls{glsentrydesc} does expand.
+
+A \pidx{fragile} command is one that breaks (causes an error) when
+it's expanded in this type of context. One such command is \gls{footnote}.
+For example, the following won't work:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{glossaries}
+\strut
+\gls{newglossaryentry}\marg{duck}
+\marg{
+  \field{name}=\marg{duck},
+  \field{description}=\marg{a waterbird with webbed feet}
+}
+\strut
+\cmd{begin}\marg{document}
+\gls{tableofcontents}
+\gls{section}\marg{\gls{Gls}\marg{duck}\gls{footnote}\marg{\gls{glsentrydesc}\marg{duck}}}\incorrect
+\cmd{end}\marg{document}
+\end{codeenv}
+This causes the error:
+\begin{verbatim}
+! Argument of \@sect has an extra }.
+\end{verbatim}
+Inserting \gls{protect} before the command prevents the attempted
+expansion, which makes the command behave as though it was robust:
+\begin{codeenv}
+\gls{section}\marg{\gls{Gls}\marg{duck}\gls{protect}\gls{footnote}\marg{\gls{glsentrydesc}\marg{duck}}}
+\end{codeenv}
+In this case, it's unlikely that you'd want the footnote to appear
+in the \gls{toc}, so it would be better to use the optional
+argument:
+\begin{codeenv}
+\gls{section}\oarg{Duck}\marg{\gls{Gls}\marg{duck}\gls{footnote}\marg{\gls{glsentrydesc}\marg{duck}}}\correct
+\end{codeenv}
+Now the \ext{toc} file is just:
+\begin{codeenv}
+\cmd{contentsline} \marg{section}\marg{\cmd{numberline} \marg{1}Duck}\marg{1}
+\end{codeenv}
+If the \field{description} field contains a \idx{fragile} command
+then \gls{glsentrydesc} will break in expandable contexts. For
+example, the following doesn't work:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{glossaries}
+\strut
+\gls{newglossaryentry}\marg{duck}
+\marg{
+  \field{name}=\marg{duck},
+  \field{description}=\marg{a waterbird\gls{footnote}\marg{a bird that lives on or 
+   near water} with webbed feet}
+}
+\strut
+\cmd{begin}\marg{document}
+\gls{tableofcontents}
+\gls{section}\marg{\gls{Gls}\marg{duck}: \gls{glsentrydesc}\marg{duck}}\incorrect
+\cmd{end}\marg{document}
+\end{codeenv}
+This is a contrived example. In this case, it would be better to
+also define the term \qt{waterbird}: 
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{glossaries}
+\strut
+\gls{newglossaryentry}\marg{waterbird}
+\marg{
+  \field{name}=\marg{waterbird},
+  \field{description}=\marg{a bird that lives on or near water}
+}
+\strut
+\gls{newglossaryentry}\marg{duck}
+\marg{
+  \field{name}=\marg{duck},
+  \field{description}=\marg{a \gls{gls}\marg{waterbird} with webbed feet}
+}
+\strut
+\cmd{begin}\marg{document}
+\gls{tableofcontents}
+\gls{section}\marg{\gls{Gls}\marg{duck}: \gls{glsentrydesc}\marg{duck}}
+\cmd{end}\marg{document}
+\end{codeenv}
+The \ext{toc} file now contains:
+\begin{codeenv}
+\cmd{contentsline} \marg{section}\marg{\cmd{numberline} \marg{1}\gls{Gls} \marg{duck}: a \gls{gls} \marg{waterbird} 
+with webbed feet}\marg{1}
+\end{codeenv}
+
+\begin{important}
+The examples in this section are used to illustrate the differences
+between \idx{fragile}, \idx{robust} and \idx{expandable} commands.
+In general, it's better not to use commands like \gls{gls} in
+headings or captions (see \sectionref{sec:headings}). Using
+commands like \gls{gls} in field values can be problematic (see
+\sectionref{sec:nested}).
+\end{important}
+
+By default, most of the field values are expanded when the entry is
+defined. This allows for defining entries programmatically, but it
+can cause a problem if the value contains any \idx{fragile} commands.
+For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{glossaries}
+\strut
+\gls{newglossaryentry}\marg{duck}\comment{label}
+\marg{
+  \field{name} = \marg{duck},
+  \field{first} = \marg{duck\gls{footnote}\marg{quack, quack}},\incorrect
+  \field{description} = \marg{a waterbird with webbed feet}
+}
+\strut
+\cmd{begin}\marg{document}
+A \gls{gls}\marg{duck}.
+\cmd{end}\marg{document}
+\end{codeenv}
+This causes the confusing error:
+\begin{verbatim}
+! Undefined control sequence.
+\in@ #1#2->\begingroup \def \in@@ 
+\end{verbatim}
+In order for this example to work, the \idx{fragile} command must either be
+protected:
+\begin{codeenv}
+\gls{newglossaryentry}\marg{duck}\comment{label}
+\marg{
+  \field{name} = \marg{duck},
+  \field{first} = \marg{duck\gls{protect}\gls{footnote}\marg{quack, quack}},\correct
+  \field{description} = \marg{a waterbird with webbed feet}
+}
+\end{codeenv}
+or the expansion must first be switched off:
+\begin{codeenv}
+\gls{glsnoexpandfields} \correct
+\gls{newglossaryentry}\marg{duck}\comment{label}
+\marg{
+  \field{name} = \marg{duck},
+  \field{first} = \marg{duck\gls{footnote}\marg{quack, quack}},
+  \field{description} = \marg{a waterbird with webbed feet}
+}
+\end{codeenv}
+Since it's not possible to programmatically define entries with
+\bibgls, the expansion is automatically switched off as \bibgls\
+writes \gls{glsnoexpandfields} to the \ext{glstex} file (although
+you can disable this feature with \longarg{expand-fields}).
+
+The reason why \gls{footnote} didn't cause a problem in the
+\field{description} field \emph{when the entry was defined} is that, by
+default, expansion isn't performed on the \field{name},
+\field{description} and \field{symbol} fields, regardless of whether
+or not \gls{glsnoexpandfields} has been used. This only applies to
+the point when the entries are being defined. Unprotected
+\idx{fragile} commands can still cause a problem if the value is
+later used in a problematic context (such as the earlier example
+where \gls{glsentrydesc} was used in a section heading).
+
+\chapter{Abbreviations}
+\label{sec:abbreviations}
+
+The abbreviation handling provided by the base \isty{glossaries}
+package is quite restrictive and only one abbreviation style can be
+used for all abbreviations. The \isty{glossaries-extra} package
+internally loads the \sty{glossaries} package and extends it,
+providing new options and a better abbreviation mechanism that
+allows different styles per category.
+
+The base \sty{glossaries} package provides:
+\nosecformatdef{newacronym}
+The extension package \sty{glossaries-extra} provides:
+\nosecformatdef{newabbreviation}
+which internally uses \gls{newglossaryentry} with the
+\field{category} set to \code{abbreviation} (which can be
+overridden in the optional \meta{\keyvallist}).
+The \gls{glossaries-extra} package also redefines \gls{newacronym} in 
+terms of \gls{newabbreviation} so that it effectively behaves like:
+\begin{codeenv}
+\gls{newabbreviation}\oarg{\gls[noindex=false]{field.type}=\gls{acronymtype},\field{category}=acronym,\meta{\keyvallist}}
+\margm{label}\margm{short}\margm{long}
+\end{codeenv}
+This makes it easier to transfer over from the base \sty{glossaries}
+package, but if you use \gls{newacronym} remember that the
+\field{category} is set to \code{acronym} instead of \code{abbreviation}.
+
+In both cases, \meta{label} is the entry's label used to identify
+the abbreviation in commands like \gls{gls}, \meta{short} is the
+short form and \meta{long} is the long form. Any additional
+settings, such as the \field{category} or \field{description} 
+can be set in the optional argument.
+
+The style must be set \emph{before the abbreviations are defined}
+using:
+\nosecformatdef{setabbreviationstyle}
+where \meta{category} is the category label and \meta{style-name} is
+the name of the style. If the optional argument is omitted,
+\code{abbreviation} is assumed. The \sty{glossaries-extra} package
+automatically sets the default styles:
+\begin{codeenv*}
+\gls{setabbreviationstyle}\marg{\abbrstyle{long-short}}
+\gls{setabbreviationstyle}\oarg{acronym}\marg{\abbrstyle{short-nolong}}
+\end{codeenv*}
+This means that if you don't explicitly set the style then any
+abbreviation defined with \gls{newacronym} will use the
+\abbrstyle{short-nolong} style (unless you change the category in
+the optional argument) and other abbreviations will use the
+\abbrstyle{long-short} style.
+
+If these styles aren't suitable, then you need to change them. Any
+abbreviation that's defined with a category that hasn't been
+assigned a style will fallback on the style for the default
+\code{abbreviation} category. There are many predefined styles to
+choose from and they come with commands to help adjust the
+formatting. See the \sty{glossaries-extra} user
+manual~\cite{glossaries-extra} for the
+complete list. The \sty{glossaries-extra} package also comes with a
+sample document
+\ctanfile{glossaries-extra/samples}{sample-abbr-styles.pdf}
+demonstrating all the predefined styles.
+
+The style determines whether the abbreviation is treated as a
+\idx{regular} term.  There are also some \idxpl{categoryattribute} that govern
+abbreviations (see below and \sectionref{sec:accsupp}).  These
+should also be set before the abbreviation is defined.
+
+Some of the styles set the \field{description} field (typically to
+the \meta{long} form). The styles that end with \code{-desc} don't,
+and so that key must be set explicitly in the \meta{\keyvallist} optional part.
+
+Here's a simple example that uses both \gls{newabbreviation} and
+\gls{newacronym} to illustrate the difference:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{glossaries-extra}
+\strut
+\gls{newabbreviation}\marg{tug}\marg{TUG}\marg{\cmd{TeX}\gls{cs.space}Users Group}
+\gls{newabbreviation}\marg{cldr}\marg{CLDR}\marg{Unicode Common Locale Data 
+Repository}
+\strut
+\gls{newacronym}\marg{SIunit}\marg{SI unit}\marg{International System of Units}
+\gls{newacronym}\marg{ascii}\marg{ASCII}\marg{American Standard Code for 
+Information Interchange}
+\strut
+\cmd{begin}\marg{document}
+First use: \gls{gls}\marg{tug}, \gls{gls}\marg{cldr}, \gls{gls}\marg{SIunit}, \gls{gls}\marg{ascii}.
+Next use: \gls{gls}\marg{tug}, \gls{gls}\marg{cldr}, \gls{gls}\marg{SIunit}, \gls{gls}\marg{ascii}.
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces:
+\begin{result}
+First use: \gls{TUG}, \gls{CLDR}, \gls{SIunit}, \gls{ASCII}.
+Next use: \gls{TUG}, \gls{CLDR}, \gls{SIunit}, \gls{ASCII}.
+\end{result}
+Note that the \idx{firstuse} of \code{SIunit} and \code{ascii} only
+show the short form. This is because the default style for the
+\code{acronym} category is the \abbrstyle{short-nolong} style, which
+doesn't show the long form with \gls{gls} (and its \idxpl{variant}).
+
+The final optional \meta{insert} argument of commands like \gls{gls}
+is typically moved inside, depending on the style. For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{glossaries-extra}
+\strut
+\gls{newabbreviation}\marg{svm}\marg{SVM}\marg{support vector machine}
+\strut
+\cmd{begin}\marg{document}
+The \gls{gls}\marg{svm}\oarg{'s} parameters are\cmd{ldots}
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces:
+\begin{result}
+The \gls{ex.svm}['s] parameters are\ldots
+\end{result}
+Compare this with:
+\begin{codeenv}
+The \gls{gls}\marg{svm}'s parameters are\cmd{ldots}\incorrect
+\end{codeenv}
+which produces:
+\begin{result}
+The \gls{ex.svm}'s parameters are\ldots
+\end{result}
+
+\section{Only Long or Only Short}
+\label{sec:longorshort}
+
+If you only want \gls{gls} to show the short form but not the long
+form (including on \idx{firstuse}), use one of the \code{-nolong}
+styles (such as \abbrstyle{short-nolong}). If you only want the long
+form and not the short form (including subsequent use), use one of
+the \code{-noshort} styles (such as \abbrstyle{long-noshort}).
+
+If you want only the long form on \idx{firstuse} (without the short
+form) and only the short form subsequently then use one of the
+\code{-only} styles, such as \abbrstyle{long-only-short-only}.
+
+If you need to reshow the full form, you can reset the
+\idx{firstuseflag} with:
+\nosecformatdef{glsreset}
+which will make the next instance of \code{\gls{gls}\margm{labe}}
+act according to \idx{firstuse}.
+
+\begin{important}
+If you need an abbreviation in a caption or section title, see 
+\sectionref{sec:headings}.
+\end{important}
+
+Otherwise, if you want a \emph{specific} instance to show only the short 
+form, without modifying the \idx{firstuseflag}, then use
+\nosecformatdef{glsxtrshort}
+If you want a specific instance to show only the long form, without
+modifying the \idx{firstuseflag}, then use
+\nosecformatdef{glsxtrlong}
+If you want a specific instance to show both the long and short form, without
+modifying the \idx{firstuseflag}, then use
+\nosecformatdef{glsxtrfull}
+Depending on the style, this may not exactly match the format
+produced by the \idx{firstuse} of \code{\gls{gls}\margm{label}}.
+Don't use these commands for every use. Change the style instead,
+which will make it easier to modify the document at a later date.
+
+If you find these commands quite long-winded, there are some
+shortcuts available with the \styopt{shortcuts} option, but as these
+may interfere with other packages, you might want to consider
+investigating your text editor settings as the more sophisticated
+ones provide ways of inserting commonly-used commands to save typing.
+
+\section{Plural Abbreviations}
+\label{sec:pluralabbr}
+
+If the abbreviation represents something countable then the plural
+form can again be obtained with \gls{glspl}:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{glossaries-extra}
+\strut
+\gls{newabbreviation}\marg{svm}\marg{SVM}\marg{support vector machine}
+\strut
+\cmd{begin}\marg{document}
+First use: \gls{glspl}\marg{svm}. Next use: \gls{glspl}\marg{svm}.
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces:
+\begin{result}
+First use: \glspl{ex.svm}. Next use: \glspl{ex.svm}.
+\end{result}
+The default plural short and long forms are obtained by
+appending the letter \qt{s} after the singular form. These can be
+changed on an individual basis with the \field{shortplural} and
+\field{longplural} keys. For example:
+\begin{codeenv}
+\gls{newabbreviation}
+ [\field{longplural}=\marg{lower triangular matrices}]
+ \marg{ltm}\marg{LTM}\marg{lower triangular matrix}
+\end{codeenv}
+
+It may be that you prefer to keep the short plural form the same as
+the short singular value for all abbreviations within a particular
+category. You can implement this with the
+\catattr{noshortplural} attribute, which must be set to \code{true}
+before the abbreviations for that category are defined. For example:
+\begin{codeenv}
+\gls{glssetcategoryattribute}\marg{abbreviation}\marg{\catattr{noshortplural}}\marg{true}
+\gls{newabbreviation}\marg{svm}\marg{SVM}\marg{support vector machine}
+\end{codeenv}
+Now:
+\begin{codeenv}
+First use: \gls{glspl}\marg{svm}. Next use: \gls{glspl}\marg{svm}.
+\end{codeenv}
+produces:
+\begin{result}
+First use: support vector machines (SVM). Next use: SVM.
+\end{result}
+A related attribute is \catattr{aposplural} which inserts \qtt{'s}
+(apostrophe followed by \qt{s}) to form the default short plural to
+help avoid ambiguity with \idx{lowercase} abbreviations where it might
+not be obvious that the \qt{s} indicates a plural (rather than
+another letter in the abbreviation). Again, this needs to be set
+before the abbreviations for the given category (or categories) are
+defined (but check with your supervisor, publisher or editor as this 
+usage is controversial).
+
+\section{Abbreviation Markup}
+\label{sec:markwords}
+
+The \catattr{markwords} attribute can be set to \code{true} to
+indicate that \gls{newabbreviation} should parse the long form and
+markup the words using:
+\nosecformatdef{glsxtrword}
+The words are separated with
+\nosecformatdef{glsxtrwordsep}
+For example:
+\begin{codeenv}
+\gls{glssetcategoryattribute}\marg{abbreviation}\marg{\catattr{markwords}}\marg{true}
+\gls{newabbreviation}\marg{ssl}\marg{SSL}\marg{Secure Sockets Layer}
+\end{codeenv}
+This is essentially the same as
+\begin{codeenv}
+\gls{newabbreviation}\marg{ssl}\marg{SSL}\marg{\gls{glsxtrword}\marg{Secure}\gls{glsxtrwordsep}
+\gls{glsxtrword}\marg{Sockets}\gls{glsxtrwordsep}\gls{glsxtrword}\marg{Layer}}
+\end{codeenv}
+This is typically used with the \code{-hyphen} abbreviation styles,
+such as \abbrstyle{long-hyphen-short-hyphen}.
+If the final optional \meta{insert} argument of commands like
+\gls{gls} starts with a hyphen, \gls{glsxtrwordsep} is locally
+changed to a hyphen.
+
+For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{glossaries-extra}
+\strut
+\gls{setabbreviationstyle}\marg{\abbrstyle[noindex=false]{long-hyphen-short-hyphen}}
+\strut
+\gls{glssetcategoryattribute}\marg{abbreviation}\marg{\catattr{markwords}}\marg{true}
+\strut
+\gls{newabbreviation}\marg{ssl}\marg{SSL}\marg{Secure Sockets Layer}
+\strut
+\cmd{begin}\marg{document}
+First use: \gls{gls}\marg{ssl}\oarg{-enabled}. Next use: \gls{gls}\marg{ssl}\oarg{-enabled}.
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces:
+\begin{result}
+First use: \gls{ex.ssl}[-enabled]. Next use: \gls{ex.ssl}[-enabled].
+\end{result}
+Compare this with:
+\begin{codeenv}
+First use: \gls{gls}\marg{ssl}-enabled. Next use: \gls{gls}\marg{ssl}-enabled.\incorrect
+\end{codeenv}
+which instead produces:
+\begin{result}
+First use: \gls{ex.ssl}-enabled. Next use: \gls{ex.ssl}-enabled.
+\end{result}
+Whereas:
+\begin{codeenv}
+First use: \gls{gls}\marg{ssl}\oarg{ enabled}. Next use: \gls{gls}\marg{ssl}\oarg{ enabled}.
+\end{codeenv}
+produces:
+\begin{result}
+First use: \gls{ex.ssl}[ enabled]. Next use: \gls{ex.ssl}[ enabled].
+\end{result}
+Note that this is different to the result obtained with the
+\abbrstyle{long-short} style which doesn't include the inserted
+material in the parentheses (and doesn't check if the inserted
+text starts with a hyphen).
+
+There's a related attribute \catattr{markshortwords} which applies
+to the short form instead. This is only useful if the short form contains
+spaces.
+
+Another markup-related attribute is \catattr{tagging}. In general,
+you don't need to explicitly set this attribute. Instead, you need
+to define a tagging command using:
+\nosecformatdef{GlsXtrEnableInitialTagging}
+This (robustly) defines \meta{cs} (a control sequence) to accept a
+single argument, which you need to use in the \meta{long} part of the 
+abbreviation definition (it's not inserted automatically).
+
+The \gls{GlsXtrEnableInitialTagging} command also sets the
+\catattr{tagging} attribute to \code{true} for each of the listed
+categories, which ensures that \meta{cs} uses
+\nosecformatdef{glsxtrtagfont}
+within the glossary (see \sectionref{sec:displaygloss}). Within the
+main text the command simply does its argument.
+For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{glossaries-extra}
+\strut
+\gls{GlsXtrEnableInitialTagging}\marg{abbreviation}\marg{\cmd{itag}}
+\strut
+\gls{newabbreviation}\marg{xml}\marg{XML}\marg{e\cmd{itag}\marg{x}tensible \cmd{itag}\marg{m}arkup
+\cmd{itag}\marg{l}anguage}
+\strut
+\cmd{begin}\marg{document}
+First use: \gls{gls}\marg{xml}. Next use: \gls{gls}\marg{xml}.
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces:
+\begin{result}
+First use: \gls{ex.xml}. Next use: \gls{ex.xml}.
+\end{result}
+This doesn't show the markup as the tagging command (\csfmt{itag} in
+this example) simply expands to its argument in the main document
+text. The difference is only evident in the glossary.
+
+If all your abbreviations are defined in a separate file, it's
+useful to provide a definition of the tagging command with
+\gls{providecommand} to ensure it's defined if you decide not to use
+\gls{GlsXtrEnableInitialTagging}. With \bibgls, you can include it
+in the \atentry{preamble}. For example:
+\begin{codeenv}
+\atentry{preamble}\marg{"\gls{providecommand}\marg{\cmd{itag}}\oarg{1}\marg{\gls{param}1}"}
+\end{codeenv}
+
+\section{Dotted Abbreviations}
+\label{sec:dotabbr}
+
+If an abbreviation ends with a \idx{full-stop}, it can be awkward
+when it appears at the end of a sentence, as you can end up with two
+dots by mistake. For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{glossaries-extra}
+\strut
+\gls{newabbreviation}\marg{dante}\marg{DANTE e.V.}
+\marg{Deutschsprachige Anwendervereinigung \cmd{TeX}\gls{cs.space}e.V.}
+\strut
+\gls{newabbreviation}\marg{gp}\marg{G.P.}\marg{General Practitioner}
+\strut
+\cmd{begin}\marg{document}
+\gls{gls}\marg{dante} is a local \cmd{TeX}\gls{cs.space}user group.
+The German-speaking local \cmd{TeX}\gls{cs.space}user group is \gls{gls}\marg{dante}.
+\strut
+A \gls{gls}\marg{gp} is a medical doctor.
+I went to my surgery to see the \gls{gls}\marg{gp}.
+\cmd{end}\marg{document}
+\end{codeenv}
+This results in:
+\begin{result}
+\gls{ex.dante} is a local \TeX\ user group.
+The German-speaking local \TeX\ user group is \gls{ex.dante}\relax.\incorrect
+
+A \gls{ex.gp} is a medical doctor.
+I went to my surgery to see the \gls{ex.gp}\relax.\incorrect
+\end{result}
+The awkward double-dot is caused by the final dot in the
+short form followed by the sentence terminating \idx{full-stop}.
+
+If the \catattr{discardperiod} attribute is set to \code{true}, the
+\idx{postlinkhook} will look ahead for a \idx{full-stop}. If it
+finds one, it will be discarded. For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{glossaries-extra}
+\strut
+\gls{glssetcategoryattribute}\marg{abbreviationdot}\marg{\catattr{discardperiod}}\marg{true}
+\strut
+\gls{newabbreviation}\oarg{\field{category}=abbreviationdot}
+ \marg{dante}\marg{DANTE e.V.}\marg{Deutschsprachige Anwendervereinigung \cmd{TeX}\gls{cs.space}e.V.}
+\strut
+\gls{newabbreviation}\oarg{\field{category}=abbreviationdot}
+ \marg{gp}\marg{G.P.}\marg{General Practitioner}
+\strut
+\cmd{begin}\marg{document}
+\gls{gls}\marg{dante} is a local \cmd{TeX}\gls{cs.space}user group.
+The German-speaking local \cmd{TeX}\gls{cs.space}user group is \gls{gls}\marg{dante}.
+\strut
+A \gls{gls}\marg{gp} is a medical doctor.
+I went to my surgery to see the \gls{gls}\marg{gp}.
+\cmd{end}\marg{document}
+\end{codeenv}
+This now results in:
+\begin{result}
+\gls{ex.dante} is a local \TeX\ user group.
+The German-speaking local \TeX\ user group is \gls{ex.dante}.
+
+A \gls{ex.gp} is a medical doctor.
+I went to my surgery to see the \gls{ex.gp}.
+\end{result}
+This attribute only affects the \emph{non-plural} commands, such as
+\gls{gls} and \gls{glsxtrshort}. If the last paragraph in the above 
+example is changed to:
+\begin{codeenv}
+A \gls{gls}\marg{gp} is a medical doctor.
+I went to my surgery to see the \gls{glspl}\marg{gp}.
+\end{codeenv}
+then the result is:
+\begin{result}
+A \gls{ex.gp} is a medical doctor.
+I went to my surgery to see the \glspl{ex.gp}.
+\end{result}
+In this case there's no need to discard the terminating
+\idx{full-stop} as the plural form doesn't end with one. If the
+plural form also ends with a \idx{full-stop} (for example, if the
+\catattr{noshortplural} attribute is also set) then you additionally
+need to set the \catattr{pluraldiscardperiod} attribute.
+
+The \idx{postlinkhook} is also applied to other commands, such as 
+\gls{glsxtrfull}, \gls{glsxtrlong}, \gls{glsxtrshort} and \gls{glssymbol}.
+For example:
+\begin{codeenv}
+I went to my surgery to see the \gls{glsxtrshort}\marg{gp}.
+\end{codeenv}
+results in:
+\begin{result}
+I went to my surgery to see the \glsxtrshort{ex.gp}.
+\end{result}
+In some cases, this may be inappropriate, for example:
+\begin{codeenv}
+I went to my surgery to see the \gls{glsxtrlong}\marg{gp}.
+\end{codeenv}
+results in:
+\begin{result}
+I went to my surgery to see the \glsxtrlong{ex.gp}.
+\end{result}
+In this case the terminating \idx{full-stop} shouldn't be discarded.
+There are several ways to prevent it. For example, moving the
+\idx{full-stop} into the \meta{insert} argument:
+\begin{codeenv}
+I went to my surgery to see the \gls{glsxtrlong}\marg{gp}\oarg{.}
+\end{codeenv}
+This results in:
+\begin{result}
+I went to my surgery to see the \glsxtrlong{ex.gp}[.]
+\end{result}
+Alternatively, insert \csfmt{relax} before the \idx{full-stop}:
+\begin{codeenv}
+I went to my surgery to see the \gls{glsxtrlong}\marg{gp}\cmd{relax}.
+\end{codeenv}
+
+Depending on the abbreviation style, it may be inappropriate for the
+\idx{firstuse} to discard the \idx{full-stop}. In this case, it's a
+bit of a nuisance to keep track of whether the term is being
+referenced for the first time. Instead, set the
+\catattr{retainfirstuseperiod} attribute to \code{true}.
+
+If you have many abbreviations defined without dots and then you
+later decide to insert them, you may prefer an automated approach.
+This can be done by setting the \catattr{insertdots} attribute to \code{true}.
+For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{glossaries-extra}
+\strut
+\gls{glssetcategoryattribute}\marg{initialism}\marg{\catattr{insertdots}}\marg{true}
+\gls{glssetcategoryattribute}\marg{initialism}\marg{\catattr{discardperiod}}\marg{true}
+\gls{glssetcategoryattribute}\marg{initialism}\marg{\catattr{retainfirstuseperiod}}\marg{true}
+\strut
+\gls{setabbreviationstyle}\oarg{initialism}\marg{\abbrstyle[noindex=false]{short-long}}
+\strut
+\gls{newabbreviation}\oarg{\field{category}=initialism}
+ \marg{gp}\marg{GP}\marg{General Practitioner}
+\strut
+\cmd{begin}\marg{document}
+Today I went to my surgery to see the \gls{gls}\marg{gp}.
+Tomorrow I'm going to my surgery to see the \gls{gls}\marg{gp}.
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces:
+\begin{result}
+Today I went to my surgery to see the \gls{ex2.gp}.
+Tomorrow I'm going to my surgery to see the \gls{ex2.gp}.
+\end{result}
+
+\section{Translations}
+\label{sec:abbrvtrans}
+
+If an abbreviation needs to be accompanied by a translation, then
+you can use a custom field or one of the supplied user fields
+described in \sectionref{sec:userkeys} to store the translation. The
+\code{-user} abbreviation styles can be used to include the extra
+information if the field is set. The \field{user1} field
+is the default, but you can change this by redefining:
+\nosecformatdef{glsxtruserfield}
+to the \emph{internal} field name. (For example, \field{userii} for
+\field{user2}.) In the sample document below, the translation is
+supplied in the default \field{user1} field:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{glossaries-extra}
+\strut
+\gls{setabbreviationstyle}\marg{\abbrstyle{long-short-user}}
+\strut
+\gls{newabbreviation}\oarg{\field{user1}=\marg{ribonucleic acid}}
+ \marg{rna}\marg{RNA}\marg{ribonukleins\gls[noindex=false]{umlaut}aure}
+\strut
+\cmd{begin}\marg{document}
+First use: \gls{gls}\marg{rna}.  Next use: \gls{gls}\marg{rna}.
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces:
+\begin{result}
+First use: \gls{ex.rna}.  Next use: \gls{ex.rna}.
+\end{result}
+If the field is empty, \abbrstyle{long-short-user} behaves like
+\abbrstyle{long-short}.
+
+Here's an example where the native language is English:
+\begin{codeenv}
+\gls{newabbreviation}\marg{iso}\marg{ISO}\marg{International Organization for Standardization}
+\strut
+\gls{newabbreviation}\oarg{
+  \field{user1} = \marg{Associa\gls{c}\marg{c}\gls{cs.tilde}ao Brasileria de Normas T\cs{acute}ecnicas},
+  \field{user2} = \marg{pt-BR},
+  \field{category} = \marg{foreignabbreviation}
+}
+\marg{abnt}\marg{ABNT}\marg{Brazilian National Standards Organization}
+\strut
+\gls{newabbreviation}\oarg{
+  \field{user1} = \marg{Deutsches Institut f\gls{umlaut}ur Normung e.V.},
+  \field{user2} = \marg{de-1996},
+  \field{category} = \marg{foreignabbreviation}
+}\marg{din}\marg{DIN}\marg{German Institute for Standardization}
+\end{codeenv}
+The use of the custom \field{category} label
+\code{foreignabbrevaiation} means I can set up different abbreviation
+styles. For example:
+\begin{codeenv}
+\gls{setabbreviationstyle}\marg{short-nolong}
+\gls{setabbreviationstyle}\oarg{foreignabbreviation}\marg{long-short-user}
+\end{codeenv}
+This example differs from the previous one as there are now two
+foreign languages (Portuguese and German) with English as the native
+language. The previous had German as the native language and English
+as the sole foreign language. In this case, I've used the
+\field{user2} field to identify the language of the original text
+(stored in the \field{user1} field).
+
+For example, suppose I'm using \sty{babel} with the language options
+\code{british}, \code{brazilian} and \code{ngerman}:
+\begin{codeenv}
+\cmd{usepackage}[main=british,brazilian,ngerman]\marg{babel}
+\end{codeenv}
+then I might want to modify \gls{glsxtruserparen} to use
+\gls{foreignlanguage}. This would be easier if the \field{user2}
+field used a recognised \sty{babel} dialect label, but that's less
+consistent across documents. For example, in another document I
+might use \code{UKenglish} or just \code{english} (or perhaps use
+\sty{polyglossia} instead).
+
+The \sty{glossaries} package loads \sty{tracklang}~\cite{tracklang},
+which provides:
+\nosecformatdef{GetTrackedDialectFromLanguageTag}
+If the given language tag matches a document dialect that's been
+tracked (by \sty{tracklang}), this stores the \emph{\sty{tracklang}
+dialect label} in the control sequence \meta{cs} otherwise it sets
+that control sequence to empty. The match requires that five
+properties of the language tag and \sty{tracklang}'s dialect label
+are the same: root language, region, sub-language, variant and
+script. Some of these elements may be empty, in which case those
+elements must be empty for both. If the script is missing in either
+case, the default script for the given root language is assumed. For
+example, \code{Latn} for \code{en} (English).
+
+\begin{important}
+The \sty{tracklang} dialect label isn't always the same as
+\sty{babel}'s dialect label.
+\end{important}
+
+The simplest way to test if the \sty{tracklang} label matches the
+\sty{babel} label is to test for the existence of
+\csfmt{captions}\meta{label}. For example, using \sty{etoolbox}'s
+\gls{ifcsundef}:
+\begin{codeenv}
+\gls{GetTrackedDialectFromLanguageTag}\marg{pt-BR}\marg{\cmd{dialectlabel}}
+\gls{ifdefempty}\cmd{dialectlabel}
+\marg{}\comment{no exact match found}
+\marg{\comment{exact match found}
+  \gls{ifcsundef}\marg{captions\cmd{dialectlabel}}
+  \marg{}\comment{not a recognised \sty{babel} label}
+  \marg{}\comment{recognised \sty{babel} label}
+}
+\end{codeenv}
+In the \qt{not a recognised \sty{babel} label} argument, you can
+find out if the \sty{tracklang} dialect label has a mapping to the
+closest known \sty{babel} dialect label with:
+\nosecformatdef{IfTrackedDialectHasMapping}
+If true, you can fetch the corresponding \sty{babel} label with:
+\nosecformatdef{GetTrackedDialectToMapping}
+If false, you can try the root language label instead, which can be
+obtained with:
+\nosecformatdef{TrackedLanguageFromDialect}
+For example:
+\begin{codeenv}
+\gls{GetTrackedDialectFromLanguageTag}\marg{pt-BR}\marg{\cmd{dialectlabel}}
+\gls{ifdefempty}\cmd{dialectlabel}
+\marg{}\comment{no exact match found}
+\marg{\comment{exact match found}
+  \gls{ifcsundef}\marg{captions\cmd{dialectlabel}}
+  \marg{\comment{not a recognised \sty{babel} label, use root language}
+    \cmd{edef}\cmd{dialectlabel}\marg{\gls{TrackedLanguageFromDialect}\cmd{dialectlabel}}\comment{}
+  }\comment{}
+  \marg{}\comment{recognised \sty{babel} label}
+}
+\end{codeenv}
+
+Consider the following document:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}[british]\marg{babel}
+\cmd{usepackage}\marg{tracklang}
+\strut
+\cmd{begin}\marg{document}
+\gls{GetTrackedDialectFromLanguageTag}\marg{en-GB}\marg{\cmd{trackeddialect}}\comment{}
+Tracked dialect label: \cmd{trackeddialect}.
+\gls{IfTrackedDialectHasMapping}\marg{\cmd{trackeddialect}}\comment{}
+\marg{Has mapping: \gls{GetTrackedDialectToMapping}\marg{\cmd{trackeddialect}}}\comment{}
+\marg{No mapping}.
+Root language: \gls{TrackedLanguageFromDialect}\marg{\cmd{trackeddialect}}.
+\cmd{end}\marg{document}
+\end{codeenv}
+In this case the \sty{tracklang} dialect label is the same as
+\sty{babel}'s dialect label. The above produces:
+\begin{result}
+Tracked dialect label: british. No mapping. Root language: english.
+\end{result}
+Now consider this document:
+\begin{codeenv}
+\cmd{documentclass}[en-MT]\marg{article}
+\strut
+\cmd{usepackage}[british]\oarg{babel}
+\cmd{usepackage}\marg{tracklang}
+\strut
+\cmd{begin}\marg{document}
+en-GB: \gls{GetTrackedDialectFromLanguageTag}\marg{en-GB}\marg{\cmd{trackeddialect}}\comment{} Tracked dialect label: \cmd{trackeddialect}.
+\gls{IfTrackedDialectHasMapping}\marg{\cmd{trackeddialect}}\comment{}
+\marg{Has mapping: \gls{GetTrackedDialectToMapping}\marg{\cmd{trackeddialect}}}\comment{}
+\marg{No mapping}.
+Root language: \gls{TrackedLanguageFromDialect}\marg{\cmd{trackeddialect}}.
+\strut
+en-MT: \gls{GetTrackedDialectFromLanguageTag}\marg{en-MT}\marg{\cmd{trackeddialect}}\comment{} Tracked dialect label: \cmd{trackeddialect}.
+\gls{IfTrackedDialectHasMapping}\marg{\cmd{trackeddialect}}\comment{}
+\marg{Has mapping: \gls{GetTrackedDialectToMapping}\marg{\cmd{trackeddialect}}}\comment{}
+\marg{No mapping}.
+Root language: \gls{TrackedLanguageFromDialect}\marg{\cmd{trackeddialect}}.
+\cmd{end}\marg{document}
+\end{codeenv}
+In this case the document requires Maltese English but \sty{babel}
+doesn't have an associated dialect so \code{british} is used
+instead in \sty{babel}'s options list. However, \sty{tracklang} does
+recognise \code{en-MT} as a document class option, which allows
+extra localisation from other locale-sensitive packages. (For
+example, \sty{datetime2} will use different time zone abbreviations.) If
+\sty{tracklang} picks up document class options, these override any
+\sty{babel} settings, but the mapping allows a way of accessing the
+captions hook provided by \sty{babel}.
+
+The above document produces:
+\begin{result}
+en-GB: Tracked dialect label: . No mapping. Root language: .
+
+en-MT: Tracked dialect label: maltaenglish. Has mapping: british.
+Root language: english.
+\end{result}
+So now, even though \sty{babel}'s \code{british} option has been
+used, en-GB isn't recognised as a tracked locale. Things are a
+little more complicated if the language tag is too specific compared
+to the \sty{babel} dialect label. For example, while the dialect
+label \code{nswissgerman} identifies the region, the \code{ngerman}
+label doesn't.
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}[ngerman]\marg{babel}
+\cmd{usepackage}\marg{tracklang}
+\strut
+\cmd{begin}\marg{document}
+\gls{GetTrackedDialectFromLanguageTag}\marg{de-DE-1996}\marg{\cmd{trackeddialect}}\comment{}
+Tracked dialect label: \cmd{trackeddialect}.
+\gls{IfTrackedDialectHasMapping}\marg{\cmd{trackeddialect}}\comment{}
+\marg{Has mapping: \gls{GetTrackedDialectToMapping}\marg{\cmd{trackeddialect}}}\comment{}
+\marg{No mapping}.
+\end{codeenv}
+In this case no dialect label is found. The result is:
+\begin{result}
+Tracked dialect label: . No mapping.
+\end{result}
+This is because the document doesn't have a dialect that matches
+both the language \emph{and} region. As from \sty{tracklang} version
+1.3.6, \gls{GetTrackedDialectToMapping} sets:
+\nosecformatdef{TrackedDialectClosestSubMatch}
+to the closest dialect label that has the same root language if the
+exact match isn't found. This will be empty if there's no tracked
+dialect with the given root language (and may also be empty if an
+exact match is found). 
+ 
+Returning to \sty{glossaries-extra} with the original text stored in
+the \field{user1} field (identified by \gls{glsxtruserfield} in the
+\abbrstyle{long-short-user} style) and the language tag stored in
+the \field{user2} field, then if you have at least version 1.32 of
+\sty{glossaries-extra} and version 1.3.6 of \sty{tracklang} you
+can use:
+\nosecformatdef{GlsXtrForeignText}
+to encapsulate \meta{text} with:
+\nosecformatdef{foreignlanguage}
+where the field containing the appropriate locale tag is stored in
+the field given by:
+\nosecformatdef{GlsXtrForeignTextField}
+which defaults to the \field{userii} internal field for the entry
+identified by \meta{label} (corresponding to the \field{user2} field).
+For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}[main=british,brazilian,ngerman]\marg{babel}
+\cmd{usepackage}[\styopt{record}]\marg{glossaries-extra}
+\strut
+\gls{setabbreviationstyle}\oarg{foreignabbreviation}\marg{long-short-user}
+\strut
+\gls{newabbreviation}\marg{iso}\marg{ISO}\marg{International Organization for Standardization}
+\strut
+\gls{newabbreviation}\oarg{
+  \field{user1} = \marg{Associa\gls{c}\marg{c}\gls{cs.tilde}ao Brasileria de Normas T\cs{acute}ecnicas},
+  \field{user2} = \marg{pt-BR},
+  \field{category} = \marg{foreignabbreviation}
+}
+\marg{abnt}\marg{ABNT}\marg{Brazilian National Standards Organization}
+\strut
+\gls{newabbreviation}\oarg{
+  \field{user1} = \marg{Deutsches Institut f\gls{umlaut}ur Normung e.V.},
+  \field{user2} = \marg{de-1996},
+  \field{category} = \marg{foreignabbreviation}
+}\marg{din}\marg{DIN}\marg{German Institute for Standardization}
+\strut
+\cmd{renewcommand}*\marg{\gls{glsxtruserparen}}[2]\marg{\comment{}
+  \gls[noindex=false]{glsxtrfullsep}\marg{\gls{param}2}\comment{}
+  \gls[noindex=false]{glsxtrparen}
+  \marg{\gls{param}1\comment{}
+   \gls{ifglshasfield}\marg{\gls{glsxtruserfield}}\marg{\gls{param}2}\comment{}
+   \marg{, \gls{emph}\marg{\gls{GlsXtrForeignText}\marg{\gls{param}2}\marg{\gls{glscurrentfieldvalue}}}}\comment{}
+   \marg{}\comment{}
+  }\comment{}
+}
+\strut
+\cmd{begin}\marg{document}
+\gls{gls}\marg{abnt}, \gls{gls}\marg{din}.
+\cmd{end}\marg{document}
+\end{codeenv}
+This essentially uses the earlier \sty{tracklang} code where an
+extra \gls{ifdefempty} is inserted, which sets the equivalent of
+\csfmt{trackeddialect} in the above to \gls{TrackedDialectClosestSubMatch}. If
+the test for the captions hook is false, then \gls{foreignlanguage}
+isn't used.
+
+
+\chapter{Symbols}
+\label{sec:symbols}
+
+\Sectionref{sec:userkeys} described the \field{symbol} key, which can
+be used to additionally provide a symbol. For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{\gls[noindex=false]{siunitx}}\comment{provides \gls{si}}
+\cmd{usepackage}\marg{glossaries}
+\strut
+\gls{newglossaryentry}\marg{length}\comment{label}
+\marg{\comment{settings:}
+   \field{name}   = \marg{length},
+   \field{symbol} = \marg{\gls{si}\marg{\cmd{metre}}},
+   \field{description} = \marg{measurement between two points}
+}
+\strut
+\gls{newglossaryentry}\marg{area}\comment{label}
+\marg{\comment{settings:}
+   \field{name}   = \marg{area},
+   \field{symbol} = \marg{\gls[noindex=false]{si}\marg{\cmd{metre}\cmd{squared}}},
+   \field{description} = \marg{measurement of a surface}
+}
+\strut
+\cmd{begin}\marg{document}
+Measurements: \gls{gls}\marg{length} (\gls{glssymbol}\marg{length}) and
+\gls{gls}\marg{area} (\gls{glssymbol}\marg{area}).
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces:
+\begin{result}
+Measurements: \gls{ex.length} (\glssymbol{ex.length}) and
+\gls{ex.area} (\glssymbol{ex.area}).
+\end{result}
+
+It may be that you prefer to have the symbol in the \field{name}
+field instead. The example document below is a modification of the
+above and uses the \idx{postlinkhook} to append the description on
+\idx{firstuse} (see \sectionref{sec:postlinkhooks}).
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{siunitx}
+\cmd{usepackage}\marg{glossaries-extra}
+\strut
+\gls[noindex=false]{glsnoexpandfields} \comment{name field contains \gls{si}}
+\strut
+\gls{glsdefpostlink}\marg{symbol}\marg{\gls{glsxtrpostlinkAddDescOnFirstUse}}
+\strut
+\gls{newglossaryentry}\marg{length}\comment{label}
+\marg{\comment{settings:}
+  \field{name} = \marg{\gls{si}\marg{\cmd{metre}}},
+  \field{description} = \marg{length},
+  \field{category} = \marg{symbol}
+}
+\strut
+\gls{newglossaryentry}\marg{area}\comment{label}
+\marg{\comment{settings:}
+  \field{name} = \marg{\gls{si}\marg{\cmd{metre}\cmd{squared}}},
+  \field{description} = \marg{area},
+  \field{category} = \marg{symbol}
+}
+\strut
+\cmd{begin}\marg{document}
+First use: \gls{gls}\marg{length} and \gls{gls}\marg{area}.
+Next use: \gls{gls}\marg{length} and \gls{gls}\marg{area}.
+\cmd{end}\marg{document}
+\end{codeenv}
+Note the need for \gls{glsnoexpandfields} (described in
+\sectionref{sec:robust}). This wasn't required in the previous
+example because the \sty{siunitx} commands were in the
+\field{symbol} field, which isn't expanded by default. The
+\field{name} field also isn't expanded by default, but its value is
+copied to the \field{text} and \field{first} fields, which are
+expanded by default. If \gls{glsnoexpandfields} is omitted from the
+above document, the following error would occur:
+\begin{verbatim}
+! Undefined control sequence.
+\@glo at name ->\si {\metre 
+                         }
+\end{verbatim}
+Although \gls{si} is robust, commands like \csfmt{metre} and
+\csfmt{squared} are only available within the argument of \gls{si}
+(and other similar commands provided by \sty{siunitx}) and so break
+in expandable contexts.
+With \gls{glsnoexpandfields}, the document compiles correctly and
+produces:
+\begin{result}
+\glsdefpostlink{symbol}{\glsxtrpostlinkAddDescOnFirstUse}%
+First use: \gls{ex2.length} and \gls{ex2.area}.
+Next use: \gls{ex2.length} and \gls{ex2.area}.
+\end{result}
+
+The \sty{glossaries-extra}['s] \styopt{symbols} package option
+provides the command
+\nosecformatdef{glsxtrnewsymbol}
+which is a shortcut for
+\begin{codeenv}
+\gls{newglossaryentry}\margm{label}\marg{\field{name}=\margm{symbol},\field{category}=\marg{symbol},\gls[noindex=false]{field.sort}=\margm{label},
+\gls[noindex=false]{field.type}=\marg{symbols},\meta{\keyvallist}}
+\end{codeenv}
+So the above document can be changed to:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{siunitx}
+\cmd{usepackage}[\styopt{symbols}]\marg{glossaries-extra}
+\strut
+\gls{glsnoexpandfields}
+\strut
+\gls{glsdefpostlink}\marg{symbol}\marg{\gls{glsxtrpostlinkAddDescOnFirstUse}}
+\strut
+\gls{glsxtrnewsymbol}\oarg{\field{description} = \marg{length}}\marg{length}\marg{\gls{si}\marg{\cmd{metre}}}
+\strut
+\gls{glsxtrnewsymbol}\oarg{\field{description} = \marg{area}}\marg{area}\marg{\gls{si}\marg{\cmd{metre}\cmd{squared}}}
+\strut
+\cmd{begin}{document}
+First use: \gls{gls}\marg{length} and \gls{gls}\marg{area}.
+Next use: \gls{gls}\marg{length} and \gls{gls}\marg{area}.
+\cmd{end}\marg{document}
+\end{codeenv}
+The result is the same.
+
+\section{Functions}
+\label{sec:functions}
+
+Some symbols may represent functions. For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}[\styopt{symbols}]\marg{glossaries-extra}
+\strut
+\gls{glsnoexpandfields}
+\strut
+\gls{glsxtrnewsymbol}
+ \oarg{\field{description} = \marg{derivative}}
+ \marg{deriv}\comment{label}
+ \marg{\gls{ensuremath}\marg{f'(x)}}\comment{symbol}
+\strut
+\cmd{begin}\marg{document}
+The derivative is denoted \gls{gls}\marg{deriv}.
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces:
+\begin{result}
+The derivative is denoted \gls{ex.deriv}.
+\end{result}
+What if I need to change the variable for a specific instance, for
+example, if I want $f'(x_i)$ instead of $f'(x)$? I can just use:
+\begin{codeenv}
+The gradient at \gls{mshiftchar}x\gls{sbchar}i\gls{mshiftchar} is \gls{mshiftchar}f'(x\gls{sbchar}i)\gls{mshiftchar}.
+\end{codeenv}
+So far, none of the example documents have a glossary or list of
+terms. The ultimate aim when using the \styfmt{glossaries} package
+is to ensure consistent formatting and notation, and, where
+applicable, include a list of all terms referenced in the document.
+The use of commands like \gls{gls} helps to achieve this. If the
+notation needs to be changed, only the entry definition (and
+associated formatting commands) should need to be redefined without
+having to go through the whole document changing the code. Using
+commands like \gls{gls} also identifies which entries need to be
+included in the list of terms and, if \sty{hyperref} is loaded, can
+be hyperlinked to the relevant place in that list (see
+\sectionref{sec:displaygloss}).
+
+So explicitly using \verb|f'(x_i)| won't index the \code{deriv} entry 
+or mark it has having been used or create a hyperlink. One
+possibility is to use one of the following commands:
+\nosecformatdef{glslink}
+\nosecformatdef{glsdisp}
+They both work in much the same way, indexing the entry and
+displaying \meta{text} as the \idx{link-text}. The only difference is
+that \gls{glsdisp} also unsets the \idx{firstuseflag}, which marks the entry
+as having been used. For example:
+\begin{codeenv}
+The gradient at \gls{mshiftchar}x\gls{sbchar}i\gls{mshiftchar} is \gls{glslink}\marg{deriv}\marg{\gls{mshiftchar}f'(x\gls{sbchar}i)\gls{mshiftchar}}.
+\end{codeenv}
+This solves the problem of ensuring that the \code{deriv} entry is
+indexed and, if \sty{hyperref} is loaded, ensures that the
+\idx{link-text} has a hyperlink to the relevant place in the list of
+notation, but it doesn't solve the problem of consistent formatting.
+
+One way of ensuring consistent formatting is to define a semantic
+command. For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}[\styopt{symbols}]\marg{glossaries-extra}
+\strut
+\gls{glsnoexpandfields}
+\strut
+\cmd{newcommand}\marg{\cmd{derivfn}}[1]\marg{f'(\gls{param}1)}
+\strut
+\gls{glsxtrnewsymbol}
+ \oarg{\field{description} = \marg{derivative}}
+ \marg{deriv}\comment{label}
+ \marg{\gls{ensuremath}\marg{\cmd{derivfn}\marg{x}}}\comment{symbol}
+\strut
+\cmd{begin}\marg{document}
+The derivative is denoted \gls{gls}\marg{deriv}.
+The gradient at \gls{mshiftchar}x\gls{sbchar}i\gls{mshiftchar} is \gls{glslink}\marg{deriv}\marg{\gls{mshiftchar}\cmd{derivfn}\marg{x\gls{sbchar}i}\gls{mshiftchar}}.
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces:
+\begin{result}
+\providecommand{\derivfn}[1]{f'(#1)}
+The derivative is denoted \gls{ex.deriv}.
+The gradient at $x_i$ is \glslink{ex.deriv}{$\derivfn{x_i}$}.
+\end{result}
+Now only \csfmt{derivfn} needs modifying if the notation must change.
+This requires remembering both the entry label (\code{deriv} in this
+case) and the associated formatting command (\csfmt{derivfn} in this
+case). The \sty{glossaries-extra} package provides a way of storing
+the associated formatting command in one of the additional keys (see
+\sectionref{sec:userkeys}). The field is identified by:
+\nosecformatdef{GlsXtrFmtField}
+which defaults to \field{useri} (the internal representation of the
+\field{user1} key). The value must be the name (without the leading
+backslash) of a control sequence that takes a \emph{single}
+mandatory argument. The above custom command \code{derivfn}
+satisfies this requirement, so the entry can be defined as:
+\begin{codeenv}
+\gls{glsxtrnewsymbol}
+ \oarg{\comment{settings:}
+   \field{description} = \marg{derivative},
+   \field{user1} = \marg{derivfn}
+ }
+ \marg{deriv}\comment{label}
+ \marg{\gls{ensuremath}\marg{\cmd{derivfn}\marg{x}}}\comment{symbol}
+\end{codeenv}
+The formatting command can now be applied using one of the
+following:
+\nosecformatdef{glsxtrfmt}
+\nosecformatdef{glsxtrfmt*}
+which internally use \gls{glslink} or:
+\nosecformatdef{glsxtrentryfmt}
+which doesn't (and so is more like using \gls{glsentryname}).
+
+So an alternative approach is:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}[\styopt{symbols}]\marg{glossaries-extra}
+\strut
+\gls{glsnoexpandfields}
+\strut
+\cmd{newcommand}\marg{\cmd{derivfn}}[1]\marg{f'(\gls{param}1)}
+\strut
+\gls{glsxtrnewsymbol}
+ \oarg{\comment{settings:}
+   \field{description} = \marg{derivative},
+   \field{user1} = \marg{derivfn}
+ }
+ \marg{deriv}\comment{label}
+ \marg{\gls{ensuremath}\marg{\cmd{derivfn}\marg{x}}}\comment{symbol}
+\strut
+\cmd{begin}\marg{document}
+The derivative is denoted \gls{gls}\marg{deriv}.
+The gradient at \gls{mshiftchar}x\gls{sbchar}i\gls{mshiftchar} is \gls{mshiftchar}\gls{glsxtrfmt}\marg{deriv}\marg{x\gls{sbchar}i}\gls{mshiftchar}.
+\cmd{end}\marg{document}
+\end{codeenv}
+This again produces:
+\begin{result}
+The derivative is denoted \gls{ex.deriv}.
+The gradient at $x_i$ is $\glsxtrfmt{ex.deriv}{x_i}$.
+\end{result}
+
+Both the starred \gls{glsxtrfmt*} and unstarred \gls{glsxtrfmt}
+format the \meta{text} argument using:
+\nosecformatdef{glsxtrfmtdisplay}
+where \meta{cs-name} is the control sequence name stored in the
+field identified by \gls{GlsXtrFmtField} and the \meta{insert} part
+is the final optional argument for the starred \gls{glsxtrfmt*} (if
+provided) otherwise it's empty. If the command identified by
+\meta{cs-name} doesn't exist (or if the field providing it isn't
+set) then just \meta{text}\meta{insert} is done.
+
+\begin{important}
+Nested \idx{link-text} causes problems so don't use \gls{glsxtrfmt}
+in the optional part of commands like \gls{gls} or \gls{glssymbol}
+or in field values that are used by those types of command. Also
+don't use \gls{glsxtrfmt} within the \meta{text} or \meta{insert}
+part of another instance of \gls{glsxtrfmt} or in \gls{glslink} or
+\gls{glsdisp}. Use \gls{glsxtrentryfmt} instead.
+\end{important}
+
+If more than one argument is required, then a helper macro is
+needed. For example:
+\begin{verbatim}
+\newcommand{\iderivfn}[2][f]{#1'(#2)}
+\newcommand{\derivfn}[1]{\iderivfn#1}
+\end{verbatim}
+Now to obtain $g'(x_i)$:
+\begin{codeenv}
+\gls{mshiftchar}\gls{glsxtrfmt}\marg{deriv}\marg{[g]\marg{x\gls{sbchar}i}}\gls{mshiftchar}
+\end{codeenv}
+Note that for this simplistic helper macro, the mandatory inner
+argument needs extra braces if it consists of more than a single
+token. For example:
+\begin{codeenv}
+\gls{mshiftchar}\gls{glsxtrfmt}\marg{deriv}\marg{\marg{x\gls{sbchar}i}}\gls{mshiftchar}
+\end{codeenv}
+
+\section{Dealing with Automated Case-Changing}
+\label{sec:symfirstuc}
+
+Commands like \gls{Gls} don't usually make much sense for symbols as
+a change in case can cause a change in meaning. For example,
+$\boldsymbol{x}$ might denote a vector and $\boldsymbol{X}$ might
+denote a matrix. However, you may have a mixed list of terms
+containing both symbols and words, and if you set the
+\catattr{glossname} attribute to \code{firstuc}, which automatically
+converts the first letter of each \field{name} to \idx{uppercase} in the
+glossary, then this can cause a problem for entries where the
+\field{name} starts with a symbol. The simplest solution is to
+insert an empty group at the start of the \field{name} field for
+such entries. For example:
+\begin{codeenv}
+\gls{glsxtrnewsymbol}
+ \oarg{\field{description} = \marg{length}}\comment{settings}
+ \marg{length}\comment{label}
+ \marg{\marg{}\gls{si}\marg{\cmd{metre}}}\comment{name}
+\end{codeenv}
+This is done automatically by \bibgls, but if it causes any
+interference you can switch off the behaviour with
+\longarg{no-mfirstuc-math-protection}.
+
+\chapter{Displaying the Definition}
+\label{sec:displaygloss}
+
+The examples so far only use the defined entries in the documents
+with commands like \gls{gls} or \gls{glssymbol} or
+\gls{glsentrydesc}. These are useful for ensuring consistent
+formatting, but it's also helpful to have a place in the document
+where the term is formally defined. This can be partially solved
+by including the description in parentheses on \idx{firstuse},
+either by explicitly including the description in the \field{first}
+field or with the use of the \idx{postlinkhook}, but the
+\idx{firstuse} might not be the most appropriate place for the
+description.
+
+\section{Listing the Terms (Glossary)}
+\label{sec:printgloss}
+
+If you want a complete list of all defined terms, you can use:
+\nosecformatdef{printunsrtglossary}
+This lists all the terms for the given glossary (identified by the
+\printglossopt{type} key in \meta{options}, see
+\sectionref{sec:multigloss}) according to the order of the
+glossary's internal list of labels, which is typically in the order of 
+definition. (As each entry is defined, its label is appended to the
+internal list of the associated glossary.)
+
+You can change the default title with the \printglossopt{title} option. For
+example:
+\begin{codeenv}
+\gls{printunsrtglossary}\oarg{\printglossopt[Nomenclature]{title}}
+\end{codeenv}
+The title used in the \gls{toc} is assumed to be the same,
+but you can change it with \printglossopt{toctitle}. For example:
+\begin{codeenv}
+\gls{printunsrtglossary}\oarg{
+ \printglossopt[List of Terms and Notation]{title},
+ \printglossopt[Notation]{toctitle}
+}
+\end{codeenv}
+
+The glossary style can be set with the \printglossopt{style} key
+in \meta{options}. Alternatively, you can set a default style with the
+\styopt{style} package option. There are many predefined styles to
+choose from (see the
+\href{https://www.dickimaw-books.com/gallery/glossaries-styles/}{\styfmt{glossaries}
+gallery}~\cite{glossarystylesgallery}). The styles are provided in supplementary packages, some
+of which are automatically loaded. Since each package adds to the
+document overhead, and some require additional packages to be
+loaded, when using \sty{glossaries-extra}, it's a good idea to
+disable the automatic loading of all styles with \styopt{nostyles}
+and then use \styopt{stylemods} to load the specific packages (along
+with the \sty{glossaries-extra-stylemods} package, which patches
+some of the predefined styles). For example, the
+\glostyle{index} style is provided by the \styfmt{glossary-tree}
+package, so \styopt[tree]{stylemods} will automatically load
+\styfmt{glossary-tree} and provide all the tree-like styles,
+including \glostyle{index}. The \styopt{stylemods} value may be a
+comma-separated list, so to load both \styfmt{glossary-tree} and
+\styfmt{glossary-long}, use \styopt[tree,long]{stylemods}.
+For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{scrartcl}
+\cmd{usepackage}\marg{\gls[noindex=false]{mhchem}}\comment{provides \gls{ce}}
+\cmd{usepackage}[\styopt[dot]{postpunc},\comment{full stop after description}
+ \styopt{nostyles},\comment{don't load default style packages}
+\comment{load glossaries-extra-stylemods.sty and glossary-tree.sty:}
+ \styopt[tree]{stylemods}
+]\marg{glossaries-extra}
+\strut
+\gls{newglossaryentry}\marg{area}
+\marg{
+   \field{name} = \marg{\gls{ensuremath}\marg{A}},
+   \field{description} = \marg{area}
+}
+\strut
+\gls{newglossaryentry}\marg{amethyst}
+\marg{
+   \field{name} = \marg{amethyst},
+   \field{description} = \marg{a purple type of quartz},
+   \field{symbol} = \marg{\gls[noindex=false]{ce}\marg{SiO2}}
+}
+\strut
+\gls{newglossaryentry}\marg{circumference}
+\marg{
+   \field{name} = \marg{\gls{ensuremath}\marg{C}},
+   \field{description} = \marg{circumference}
+}
+\strut
+\gls{newglossaryentry}\marg{duck}
+\marg{
+   \field{name} = \marg{duck},
+   \field{description} = \marg{a waterbird with webbed feet}
+}
+\gls{newglossaryentry}\marg{goose}
+\marg{
+   \field{name} = \marg{goose},
+   \field{description} = \marg{a large waterbird with a long neck, short legs,
+webbed feet and a short broad bill}
+}
+\strut
+\gls{newglossaryentry}\marg{radius}
+\marg{
+   \field{name} = \marg{\gls{ensuremath}\marg{r}},
+   \field{description} = \marg{radius}
+}
+\strut
+\gls{newglossaryentry}\marg{pi}
+\marg{
+   \field{name} = \marg{\gls{ensuremath}\marg{\cmd{pi}}},
+   \field{description} = \marg{Archimedes' constant}
+}
+\strut
+\cmd{begin}\marg{document}
+\gls{printunsrtglossary}\oarg{\printglossopt[index]{style}}
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces:
+\begin{result}
+\glsaddeach{ex3.goose,ex3.duck,ex2.amethyst,standalone.pi,%
+standalone.circumference,standalone.area,standalone.radius}%
+\setupglossaries{toc=false,section}%
+\glossariesextrasetup{postpunc=dot}%
+\renewcommand{\glsxtrgroupfield}{useriii}%
+\renewcommand*{\printunsrtglossaryentryprocesshook}[1]{%
+  \glsifcategory{#1}{standalone}{}{\printunsrtglossaryskipentry}%
+}%
+\printunsrtglossary[style=index,title=Glossary,nonumberlist,target=false]
+\end{result}
+The \glostyle{index} glossary style checks if the \field{symbol}
+field has been set. If it has, then the symbol is added in
+parentheses (as in the amethyst example). Only some of the styles
+include the \field{symbol} field. (Table~15.1 in the
+\sty{glossaries} user manual~\cite{glossaries} gives an overview of
+the features supported by the predefined styles.)
+
+The \glostyle{bookindex} style is provided by the
+\isty{glossary-bookindex} package, which is distributed with
+\sty{glossaries-extra}. This style is designed for indexes
+and omits both the description and the symbol by default. It's
+customized specifically for use with \bibgls. Without the
+\idxpl{locationlist} obtained by \bibgls, this simply becomes a list
+of the \field{name} values for each term.
+
+The glossary is sub-divided into letter groups. By default, these
+sub-groups are separated with a vertical gap (for example, between
+duck and goose above). In the above example, the letter group is
+determined by the first character of the \field{sort} field. Since the
+default behaviour of both \sty{glossaries} and
+\sty{glossaries-extra} is to use \idx{makeindex}, the \field{sort}
+field (which is used by \idx{makeindex}) is set to the value of the
+\field{name} field (unless explicitly set) and then sanitized.
+
+When using \gls{printunsrtglossary}, the \field{sort} field is
+irrelevant except to determine the letter group (unless the
+\field{group} field has been defined). The sub-group
+heading is displayed by some styles, such as the
+\glostyle{indexgroup} and \glostyle{bookindex} styles. For example, with:
+\begin{codeenv}
+\gls{printunsrtglossary}\oarg{\printglossopt[indexgroup]{style}}
+\end{codeenv}
+The glossary is now:
+\begin{result}
+\setupglossaries{toc=false,section}%
+\glossariesextrasetup{postpunc=dot}%
+\renewcommand{\glsxtrgroupfield}{useriii}%
+\renewcommand*{\printunsrtglossaryentryprocesshook}[1]{%
+  \glsifcategory{#1}{standalone}{}{\printunsrtglossaryskipentry}%
+}%
+\printunsrtglossary[style=indexgroup,title=Glossary,nonumberlist,target=false]
+\end{result}
+This explains why there's a gap between $A$ (area) and amethyst as
+they don't belong to the same letter group. The \field{sort} field
+for the \code{area} entry is \verb|\ensuremath{A}| which has been
+sanitized, so it starts with a literal backslash (\idx{backslashchar}).
+This means that \code{area} is assigned to the symbols letter group. The
+symbols group occurs three times, because the list is following the
+order of definition.
+
+\subsection{Groups and Locations}
+\label{sec:group}
+
+\begin{important}
+The \field{group} and \field{location} fields are considered
+internal fields by \bibgls. They may be referenced within the
+document, but they should not be assigned in the \ext{bib} file.
+\bibgls\ assigns these fields according to the resource options and
+command line switches. Explicitly assigning them can cause
+unexpected results. See also \sectionref{sec:logicaldivisions} of
+the \bibgls\ manual.
+\end{important}
+
+The \field{group} key isn't defined by default, but if it is defined
+then \gls{printunsrtglossary} will use the \field{group} field
+instead of trying to determine the group from the first character of
+the \field{sort} field (as in the example above). The value of the
+\field{group} field must be a label (see \sectionref{sec:labels}). 
+A title may be assigned to a group with:
+\nosecformatdef{glsxtrsetgrouptitle}
+If a title hasn't been assigned, the label is used as the title.
+The above command is the preferred form, but the base
+\sty{glossaries} package checks for a control sequence in the form
+\csfmt{\meta{label}groupname} where \meta{label} is the group label.
+The \sty{glossaries-extra} package also recognises this form to
+ensure backward-compatibility.  If the \field{group} field is empty
+the sub-group won't have a title.
+
+For example, the following defines the \field{group} field with a
+custom command \csfmt{grouplabel} (that's not needed, but it's
+required by the \gls{glsaddstoragekey} syntax):
+\begin{codeenv}
+\cmd{documentclass}\marg{scrartcl}
+\cmd{usepackage}\marg{mhchem}
+\cmd{usepackage}[\styopt[dot]{postpunc},\comment{full stop after description}
+ \styopt{nostyles},\comment{don't load default style packages}
+ \styopt[tree]{stylemods}\comment{load glossary-tree.sty and patch styles}
+]\marg{glossaries-extra}
+\strut
+\gls{glsaddstoragekey}\marg{group}\marg{}\marg{\cmd{grouplabel}}
+\gls{glsxtrsetgrouptitle}\marg{greek}\marg{Greek Symbols}
+\strut
+\gls{newglossaryentry}\marg{area}
+\marg{
+   \field{name} = \marg{\gls{ensuremath}\marg{A}},
+   \field{description} = \marg{area},
+   \field{group} = \marg{A}
+}
+\strut
+\gls{newglossaryentry}\marg{amethyst}
+\marg{
+   \field{name} = \marg{amethyst},
+   \field{description} = \marg{a purple type of quartz},
+   \field{symbol} = \marg{\gls{ce}\marg{SiO2}},
+   \field{group} = \marg{A}
+}
+\strut
+\gls{newglossaryentry}\marg{circumference}
+\marg{
+   \field{name} = \marg{\gls{ensuremath}\marg{C}},
+   \field{description} = \marg{circumference},
+   \field{group} = \marg{C}
+}
+\strut
+\gls{newglossaryentry}\marg{duck}
+\marg{
+   \field{name} = \marg{duck},
+   \field{description} = \marg{a waterbird with webbed feet},
+   \field{group} = \marg{D}
+}
+\strut
+\gls{newglossaryentry}\marg{goose}
+\marg{
+   \field{name} = \marg{goose},
+   \field{description} = \marg{a large waterbird with a long neck, short legs,
+   webbed feet and a short broad bill},
+   \field{group} = \marg{G}
+}
+\strut
+\gls{newglossaryentry}\marg{radius}
+\marg{
+   \field{name} = \marg{\gls{ensuremath}\marg{r}},
+   \field{description} = \marg{radius},
+   \field{group} = \marg{R}
+}
+\strut
+\gls{newglossaryentry}\marg{pi}
+\marg{
+   \field{name} = \marg{\gls{ensuremath}\marg{\cmd{pi}}},
+   \field{description} = \marg{Archimedes' constant},
+   \field{group} = \marg{greek}
+}
+\strut
+\cmd{begin}\marg{document}
+\gls{printunsrtglossary}\oarg{\printglossopt[indexgroup]{style}}
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces:
+\begin{result}
+\setupglossaries{toc=false,section}%
+\glossariesextrasetup{postpunc=dot}%
+\renewcommand{\glsxtrgroupfield}{useriv}%
+\glsxtrsetgrouptitle{greek}{Greek Symbols}%
+\renewcommand*{\printunsrtglossaryentryprocesshook}[1]{%
+  \glsifcategory{#1}{standalone}{}{\printunsrtglossaryskipentry}%
+}%
+\printunsrtglossary[style=indexgroup,title=Glossary,nonumberlist,target=false]
+\end{result}
+Note that with this method \emph{every} entry must be assigned a
+group or it will be assigned to the empty group.
+
+Similarly, if the \field{location} field is defined, you can use it
+to provide a \idx{locationlist}. The \styopt{record} package option
+conveniently defines both \field{group} and \field{location}, so the
+following can be used instead:
+\begin{codeenv}
+\cmd{usepackage}[
+ \styopt{record},\comment{provides group and location fields (and other stuff)}
+ postpunc=dot,nostyles,stylemods={tree}]\marg{glossaries-extra}
+\strut
+\gls{newglossaryentry}\marg{area}
+\marg{
+   \field{name} = \marg{\gls{ensuremath}\marg{A}},
+   \field{description} = \marg{area},
+   \field{group} = \marg{A},
+   \field{location} = \marg{page 1}
+}
+\end{codeenv}
+This very quickly becomes tedious and prone to errors as the entries
+have to be ordered manually, and every entry must be assigned the
+group and location (if required).  Every time the location changes
+through edits to the document, the locations must be updated.
+However, this is exactly the method that \bibgls\ uses, but it does
+it automatically for you by selecting the required data from one or
+more \ext{bib} files and then creating a file containing all the
+glossary entry definitions with the fields set appropriately. The \ext{aux}
+file provides \bibgls\ with the indexing information so that it
+knows which entries to select and what the locations are, and how to
+order the definitions. See \sectionref{sec:bib2gls} for further
+information.
+
+\subsection{Homographs and Hierarchical Terms}
+\label{sec:parent}
+
+An entry may be assigned a parent with the \field{parent} key. The
+value must be the label of an entry that's already defined. You can
+test if an entry has the \field{parent} field set with:
+\nosecformatdef{ifglshasparent}
+If the \field{name} key is omitted, the value is assumed to be the same as
+the parent's \field{name}.
+For example:
+\begin{codeenv}
+\comment{parent:}
+\gls{newglossaryentry}\marg{glossary}\marg{\field{name}=\marg{glossary},\field{description}=\marg{}}
+\comment{children:}
+\gls{newglossaryentry}\marg{glossarycol}
+\marg{\comment{settings:}
+ \field{parent} = \marg{glossary},\comment{parent label}
+ \field{description} = \marg{collection of glosses}
+}
+\gls{newglossaryentry}\marg{glossarylist}
+\marg{\comment{settings:}
+ \field{parent} = \marg{glossary},\comment{parent label}
+ \field{description} = \marg{list of technical words}
+}
+\end{codeenv}
+In this case the entry with the label \code{glossary} is the
+\pidx{parent-entry}, and the entries with
+the labels \code{glossarycol} and \code{glossarylist} are 
+\pidxpl{child-entry} (or sub-items). An entry that doesn't have a
+parent is a main or top-level or level~0 item. In this case, the
+\idxpl{child-entry} don't have the \field{name} key, so the name is
+obtained from the parent's name. This is an example of a
+\pidx{homograph}, where two words with different meanings
+have the same spelling. The parent entry has an empty description.
+
+Here's another example:
+\begin{codeenv}
+\comment{parent:}
+\gls{newglossaryentry}\marg{mineral}\comment{label}
+\marg{\comment{settings:}
+  \field{name} = \marg{mineral},
+  \field{description} = \marg{natural inorganic substance}
+}
+\comment{sub-entries:}
+\gls{newglossaryentry}\marg{quartz}\comment{label}
+\marg{
+  \field{parent} = \marg{mineral},\comment{parent label}
+  \field{name} = \marg{quartz},
+  \field{description} = \marg{hard mineral consisting of silica}
+}
+\gls{newglossaryentry}\marg{amethyst}\comment{label}
+\marg{
+  \field{parent} = \marg{quartz},\comment{parent label}
+  \field{name} = \marg{amethyst},
+  \field{description} = \marg{a purple type of quartz}
+}
+\end{codeenv}
+In this case, the \idxpl{child-entry} have the \field{name} key
+set. This is an example of a set of \pidxpl{hierarchical-entry},
+where each \idx{child-entry} is a sub-category of the parent.
+Some glossary styles are appropriate for \idxpl{homograph} and some
+are appropriate for \idxpl{hierarchical-entry} and some are only
+appropriate for flat glossaries (no child entries).
+For example, the \glostyle{index}, \glostyle{indexgroup},
+\glostyle{tree} and \glostyle{treegroup} styles are appropriate 
+for \idxpl{hierarchical-entry}:
+\begin{codeenv}
+\cmd{documentclass}\marg{scrartcl}
+\strut
+\cmd{usepackage}[\styopt{nostyles},\styopt[dot]{postpunc},\styopt[tree]{stylemods}]\marg{glossaries-extra}
+\strut
+\gls{newglossaryentry}\marg{animal}
+\marg{
+   \field{name} = \marg{animal},
+   \field{description} = \marg{living organism with a nervous system and sense organs
+    that can move independently}
+}
+\strut
+\gls{newglossaryentry}\marg{bird}
+\marg{
+  \field{parent} = \marg{animal},
+  \field{name} = \marg{bird},
+  \field{description} = \marg{warm-blooded egg-laying animal with feathers, wings
+   and a beak}
+}
+\strut
+\gls{newglossaryentry}\marg{duck}
+\marg{
+   \field{parent} = \marg{bird},
+   \field{name} = \marg{duck},
+   \field{description} = \marg{a waterbird with webbed feet}
+}
+\strut
+\gls{newglossaryentry}\marg{goose}
+\marg{
+   \field{parent} = \marg{bird},
+   \field{name} = \marg{goose},
+   \field{description} = \marg{a large waterbird with a long neck, short legs,
+   webbed feet and a short broad bill}
+}
+\strut
+\gls{newglossaryentry}\marg{mineral}
+\marg{
+  \field{name} = \marg{mineral},
+  \field{description} = \marg{natural inorganic substance}
+}
+\strut
+\gls{newglossaryentry}\marg{calcite}\comment{label}
+\marg{
+  \field{parent} = \marg{mineral},\comment{parent label}
+  \field{name} = \marg{calcite},
+  \field{description} = \marg{a carbonate mineral}
+}
+\strut
+\gls{newglossaryentry}\marg{quartz}
+\marg{
+  \field{parent} = \marg{mineral},
+  \field{name} = \marg{quartz},
+  \field{description} = \marg{hard mineral consisting of silica}
+}
+\strut
+\gls{newglossaryentry}\marg{amethyst}
+\marg{
+   \field{parent} = \marg{quartz},
+   \field{name} = \marg{amethyst},
+   \field{description} = \marg{a purple type of quartz},
+}
+\strut
+\gls{newglossaryentry}\marg{citrine}
+\marg{
+  \field{parent} = \marg{quartz},
+  \field{name} = \marg{citrine},
+  \field{description} = \marg{a form of quartz with a colour ranging
+  from pale yellow to brown due to ferric impurities}
+}
+\strut
+\cmd{begin}\marg{document}
+\gls{printunsrtglossary}\oarg{style=indexgroup}
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces:
+\begin{result}
+\glsaddeach{hier.animal,hier.bird,hier.duck,hier.goose,hier.mineral,%
+hier.calcite,hier.quartz,hier.amethyst,hier.citrine}%
+\setupglossaries{toc=false,section}%
+\glossariesextrasetup{postpunc=dot}%
+\renewcommand*{\printunsrtglossaryentryprocesshook}[1]{%
+  \glsifcategory{#1}{hierarchical}{}{\printunsrtglossaryskipentry}%
+}%
+\printunsrtglossary[style=indexgroup,title=Glossary,nonumberlist,target=false]
+\end{result}
+
+The \glostyle{treenoname} and \glostyle{treenonamegroup} styles are
+appropriate for \idxpl{homograph}. These are usually best with the
+\styopt{subentrycounter} package option, which defines the
+\counter{glossarysubentry} counter that's incremented and
+displayed for every level~1 entry (that is, an entry with a parent
+but not a grandparent). If the \styopt{entrycounter} option is also
+used, \counter{glossaryentry} is set as the master counter for
+\counter{glossarysubentry} (although it's not included in the 
+display form of that counter), but \styopt{subentrycounter} may be used
+without \styopt{entrycounter}, in which case
+\counter{glossarysubentry} has no master counter. If
+\styopt{subentrycounter} is used as a package option and
+\styopt{entrycounter} is later switched on outside of the package
+option list (through \gls{setupglossaries} or in the optional argument of
+\gls{printunsrtglossary}) then it won't be made the master counter.
+
+For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{scrartcl}
+\strut
+\cmd{usepackage}[\styopt{subentrycounter},\comment{create glossarysubentry counter}
+ \styopt[dot]{postpunc},\comment{append full stop after description}
+ \styopt{nostyles},\styopt[tree]{stylemods}]\marg{glossaries-extra}
+\strut
+\gls{newglossaryentry}\marg{bow1}
+\marg{
+ \field{name}=\marg{bow},
+ \field{description}=\marg{(rhymes with toe)}
+}
+\strut
+\gls{newglossaryentry}\marg{bowknot}
+\marg{
+  \field{parent} = \marg{bow1},
+  \field{description} = \marg{a knot tied with two loops and loose ends}
+}
+\strut
+\gls{newglossaryentry}\marg{bowweapon}
+\marg{
+  \field{parent} = \marg{bow1},
+  \field{description} = \marg{a weapon for shooting arrows, made of curved wood
+  joined at both ends with taut string}
+}
+\strut
+\gls{newglossaryentry}\marg{bow2}
+\marg{
+ \field{name}=\marg{bow},
+ \field{description}=\marg{(rhymes with cow)}
+}
+\strut
+\gls{newglossaryentry}\marg{bowbend}
+\marg{
+  \field{parent} = \marg{bow2},
+  \field{description} = \marg{bend head or upper body}
+}
+\strut
+\gls{newglossaryentry}\marg{bowpressure}
+\marg{
+  \field{parent} = \marg{bow2},
+  \field{description} = \marg{give in to pressure}
+}
+\strut
+\gls{newglossaryentry}\marg{bow3}
+\marg{
+ \field{name}=\marg{bow},
+ \field{description}=\marg{(also bows) the front end of a ship}
+}
+\strut
+\gls{newglossaryentry}\marg{glossary}\marg{\field{name}=\marg{glossary},\field{description}=\marg{}}
+\strut
+\gls{newglossaryentry}\marg{glossarycol}
+\marg{
+  \field{parent} = \marg{glossary},
+  \field{description} = \marg{collection of glosses}
+}
+\strut
+\gls{newglossaryentry}\marg{glossarylist}
+\marg{
+  \field{parent} = \marg{glossary},
+  \field{description} = \marg{list of technical words}
+}
+\strut
+\cmd{begin}\marg{document}
+\gls{printunsrtglossary}\oarg{style=treenoname}
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces
+\begin{result}
+\glsaddeach{hom.bow1,hom.bowknot,hom.bowweapon,%
+hom.bow2,hom.bowbend,hom.bowpressure,hom.bow3,%
+hom.glossary,hom.glossarycol,hom.glossarylist}%
+\setupglossaries{toc=false,section,subentrycounter}%
+\glossariesextrasetup{postpunc=dot}%
+\renewcommand*{\printunsrtglossaryentryprocesshook}[1]{%
+  \glsifcategory{#1}{homograph}{}{\printunsrtglossaryskipentry}%
+}%
+\printunsrtglossary[style=treenoname,title=Glossary,nonumberlist,target=false]
+\end{result}
+The empty description for the top-level \code{glossary} entry has
+caused an odd effect with a space occurring between the name and the
+post-description punctuation. This can be removed by redefining:
+\nosecformatdef{glstreenonamedesc}
+so that it checks if the \field{description} field has been set with:
+\nosecformatdef{ifglshasdesc}
+For example:
+\begin{codeenv}
+\cmd{renewcommand}\marg{\gls{glstreenonamedesc}}[1]\marg{\comment{}
+  \gls{ifglshasdesc}\marg{\gls{param}1}
+  \marg{\gls[noindex=false]{glstreepredesc}\gls{glossentrydesc}\marg{\gls{param}1}\gls{glspostdescription}}
+  \marg{}\comment{do nothing, description field is empty}
+}
+\end{codeenv}
+Another variation is to check if the entry has children add use a
+colon instead of a \idx{full-stop}. The base \sty{glossaries}
+package provides:
+\nosecformatdef{ifglshaschildren}
+However this method is very inefficient as it has to iterate over
+all defined entries and check if any have the \field{parent} field
+set to \meta{entry label}. A more efficient method can be obtained
+with \bibgls\ and the \csopt{save-child-count} resource option,
+which will save the number of child entries that have been indexed
+in an internal field labelled \field{childcount} and a list of child
+entry labels is stored in the internal field labelled
+\field{childlist}. In this case, a more efficient method is to use:
+\nosecformatdef{GlsXtrIfHasNonZeroChildCount}
+which checks the \field{childcount} field for a non-zero value.
+If you don't use \bibgls, this command will always do \meta{false}
+(unless you explicitly set the internal fields to the correct
+values, which is tedious and has to be updated whenever 
+definitions are added, deleted or have the \field{parent} field
+changed).
+
+Another variation could use custom fields (see
+\sectionref{sec:userkeys}) to store the pronunciation guide (\qt{rhymes
+with \ldots}) and the alternative version (\qt{also \ldots}) as well
+as other information, such as whether the word is a noun or verb.
+
+\subsection{Multiple Glossaries}
+\label{sec:multigloss}
+
+The default glossary has the label \code{main}, but it can also be referenced 
+with:
+\nosecformatdef{glsdefaulttype}
+The \styopt{nomain} package option suppresses the creation of the
+\code{main} glossary, in which case \gls{glsdefaulttype} will be set to
+the first glossary to be defined. (There must be at least one
+glossary defined, so if you use \styopt{nomain} you must provide
+another default.) If you use the \styopt{entrycounter} package
+option, the associated counter isn't reset at the start of the
+glossary. If you have multiple glossaries and you need it to be reset, add:
+\nosecformatdef{glsresetentrycounter}
+before the start of the appropriate glossary.
+
+Abbreviations defined with \gls{newabbreviation}
+(see \sectionref{sec:abbreviations}) are, by default, assigned to the glossary 
+given by:
+\nosecformatdef{glsxtrabbrvtype}
+This initially expands to \gls{glsdefaulttype}, but the
+\styopt{abbreviations} option redefines this to \code{abbreviations}
+and creates a glossary with that label.
+
+Abbreviations defined with \gls{newacronym} are, by default,
+assigned to the glossary given by:
+\nosecformatdef{acronymtype}
+This initially expands to \gls{glsdefaulttype}, but the
+\styopt{abbreviations} option redefines this to
+\gls{glsxtrabbrvtype}. However, the \styopt{acronyms} option
+redefines \gls{acronymtype} to \code{acronym} and creates a glossary
+with that label. So if you use both the \styopt{abbreviations} and
+\styopt{acronyms} package options, you will have two extra
+glossaries created, one as the default for \gls{newabbreviation} and
+the other as the default for \gls{newacronym}.
+
+The \styopt{symbols} package option creates a glossary with the
+label \code{symbols} and defines \gls{glsxtrnewsymbol} (see 
+\sectionref{sec:symbols}) which sets the \field{type} to
+\code{symbols}. There are also similar package options
+\styopt{numbers} and \styopt{index}, which create the \code{numbers}
+glossary (and \gls{glsxtrnewnumber}) and the \code{index} glossary
+(and \gls{newterm}).
+
+In each case, the default type can be overridden when defining an
+entry by using the \field{type} key in the assignment list. The
+value must be the label identifying a defined glossary.
+
+You can provide your own custom glossary using:
+\nosecformatdef{newglossary*}
+where \meta{type} is the label used to identify the glossary and
+\meta{title} is the default title used by \gls{printunsrtglossary}.
+(The unstarred version has a different syntax and is only applicable 
+with \gls{makeindex} or \gls{xindy}.) For example:
+\begin{codeenv}
+\gls{newglossary*}\marg{measurements}\marg{SI Units}
+\gls{newglossaryentry}\marg{length}
+\marg{\comment{settings:}
+  \field{name} = \marg{\gls{si}\marg{\cmd{metre}}},
+  \field{description} = \marg{length},
+  \field{type} = \marg{measurements}\comment{glossary label}
+}
+\end{codeenv}
+In this case, the label identifying the new glossary is
+\code{measurements} and the title is \qt{SI Units}.
+
+You can specify the glossary using the \printglossopt{type} setting
+in the optional argument of \gls{printunsrtglossary}. For example, 
+the above \code{measurements} glossary can be displayed with:
+\begin{codeenv}
+\gls{printunsrtglossary}\oarg{\printglossopt[measurements]{type}}
+\end{codeenv}
+For convenience, there's a command that iterates over all defined
+glossaries (in the order of definition) and does
+\gls{printunsrtglossary}\oarg{\printglossopt[\meta{label}]{type}}
+for each glossary:
+\nosecformatdef{printunsrtglossaries}
+There's no optional argument for this command. When creating
+glossaries with package options, such as \styopt{abbreviations}, you
+may find an unexpected order as the options aren't always processed
+in the order in which they were specified. (Some
+\sty{glossaries-extra} options are passed to the base
+\sty{glossaries} package and are processed when that package is
+internally loaded not when the extension options are processed.) In
+which case you need to use \gls{printunsrtglossary} for each
+glossary in the required order. You will also need to do this if the
+glossary settings are different. (For example, if one glossary needs
+to use the \glostyle{tree} style and another needs to use the
+\glostyle{treenoname} style.)
+
+You can also define an \pidx{ignoredglossary}, which is ignored by
+\gls{printunsrtglossaries}. This is a useful way of creating a
+glossary for common terms that shouldn't appear in a list or for
+stand-alone entries (see \sectionref{sec:standalone}). The unstarred
+form:
+\nosecformatdef{newignoredglossary}
+is useful for common terms where the list won't be displayed as it
+automatically suppresses hyperlinks for entries assigned to that
+glossary. The starred form:
+\nosecformatdef{newignoredglossary*}
+is useful for stand-alone entries as it doesn't automatically
+suppress the hyperlinks.
+Although \gls{printunsrtglossaries} skips \idxpl{ignoredglossary},
+it's still possible to display an \idx{ignoredglossary} with
+\gls{printunsrtglossary} but you'll need to use the
+\printglossopt{title} option to override the default title.
+
+\subsection{Redisplaying or Filtering a Glossary}
+\label{sec:printglossagain}
+
+It's possible to use \gls{printunsrtglossary} multiple times for the
+same glossary, but if you have hyperlinks you will need to either
+suppress the targets with \printglossopt[false]{target} or change
+the target name (see \sectionref{sec:targetnames}).
+
+The starred form of \gls{printunsrtglossary} has an extra
+argument:
+\nosecformatdef{printunsrtglossary*}
+This may be used to make local assignments. It's equivalent to:
+\begin{codeenv}
+\cmd{begingroup} \meta{code}\gls{printunsrtglossary}\oargm{options}\cmd{endgroup}
+\end{codeenv}
+For example, if the \field{group} key has been defined (see
+\sectionref{sec:group}) you can locally switch to a different field
+for the group label by redefining:
+\nosecformatdef{glsxtrgroupfield}
+within \meta{code}.
+For example, if the \field{secondarygroup} field has been defined:
+\begin{codeenv}
+\gls{printunsrtglossary*}\marg{\comment{}
+  \cmd{renewcommand}\marg{\gls{glsxtrgroupfield}}\marg{secondarygroup}\comment{}
+}
+\end{codeenv}
+Note that this just changes the group labels. The order is still
+according to the glossary's internal list of labels.
+
+Unlike \gls{printglossary} (used with \gls{makeindex} and
+\gls{xindy}) which inputs a file containing the code to typeset the glossary,
+\gls{printunsrtglossary} iterates over the labels defined in the
+given glossary and adds the appropriate code to an internal command.
+Once the construction of the internal command is completed, it's
+then performed. (The construction of this internal command is done
+to avoid complications when iterating within \env{tabular}-like
+environments, as some of the styles use \env{longtable} or
+\env{supertabular}.) There's a hook just before the internal command is 
+expanded:
+\nosecformatdef{printunsrtglossarypredoglossary}
+The glossary header and preamble are displayed before 
+the loop starts, so this hook won't change them (but you can make
+local changes in \meta{code} outside of the hook).
+The style is also set before the loop, but the start
+and end of the \env{theglossary} environment (which is defined by
+the glossary styles) is included in the internal command, so minor
+adjustments to the style can be made in this hook.
+
+There's another hook that's performed at each iteration:
+\nosecformatdef{printunsrtglossaryentryprocesshook}
+where \meta{label} is the current entry label. For example, the
+\glostyle{alttree} style needs to know the widest entry name in
+order to set up the correct indentation. The widest name is set
+using:
+\nosecformatdef{glssetwidest}
+but this requires knowing which entry has the widest name. There are
+some commands provided by the \sty{glossary-tree} and
+\sty{glossaries-extra-stylemods} packages that iterate over all
+entries, measuring each name, in order to find the widest, but since
+\gls{printunsrtglossary} already has to iterate over the list before
+typesetting it, this hook can be used to update the widest name at
+the same time. You can update the value with:
+\nosecformatdef{glsupdatewidest}
+which computes the width of \meta{text} and, if it's wider than the
+current widest name for the given level, sets the widest value to
+\meta{text} (without expanding it). If \meta{text} needs expanding
+you need to use:
+\nosecformatdef{eglsupdatewidest}
+The \meta{level} refers to the entry's hierarchical level with a
+value of~0 indicating top-level (that is, an entry without a parent).
+The level is stored in the internal \field{level} field and can only
+be accessed with \gls{glsxtrusefield} or similar commands 
+(see \sectionref{sec:userkeys}).
+
+You can also redefine this hook to filter the glossary list. 
+If an entry shouldn't appear in the list, use:
+\nosecformatdef{printunsrtglossaryskipentry}
+For example, to only include entries that have the \field{category}
+set to \code{formula}:
+\begin{codeenv}
+\gls{printunsrtglossary*}\oarg{\printglossopt{target}=false,\printglossopt{title}=\marg{Formula}}
+\marg{\comment{local code:}
+  \cmd{renewcommand}\marg{\gls{printunsrtglossaryentryprocesshook}}[1]\marg{\comment{}
+   \gls{glsifcategory}\marg{\gls{param}1}\marg{formula}
+   \marg{}\comment{category = formula}
+   \marg{\gls{printunsrtglossaryskipentry}}\comment{}
+  }\comment{}
+}
+\end{codeenv}
+This uses \gls{glsifcategory} to check the value of the entry's 
+\field{category} field (see \sectionref{sec:categories}). Another
+conditional you might find useful is:
+\nosecformatdef{glsxtriflabelinlist}
+which tests if the given \meta{label} is in the comma-separated
+\meta{list} of labels. Both \meta{label} and \meta{list} are fully
+expanded before testing. This command is only intended for labels,
+which must be fully expandable.
+For example, the following excludes any entries that have the
+\field{category} set to \code{abbreviation} or \code{acronym}:
+\begin{codeenv}
+\gls{printunsrtglossary*}\oarg{\printglossopt{target}=false,\printglossopt{title}=\marg{Formula}}
+\marg{\comment{local code:}
+  \cmd{renewcommand}\marg{\gls{printunsrtglossaryentryprocesshook}}[1]\marg{\comment{}
+   \gls{glsxtriflabelinlist}
+   \marg{\gls{glscategory}\marg{\gls{param}1}}\comment{category label for this entry}
+   \marg{abbreviation,acronym}\comment{exclusion list}
+   \marg{\gls{printunsrtglossaryskipentry}}\comment{skip (exclude)}
+   \marg{}\comment{don't skip (include)}
+  }\comment{}
+}
+\end{codeenv}
+
+\subsection{Hyperlink Targets}
+\label{sec:targetnames}
+
+The naming system used for the hyperlinks from commands like
+\gls{gls} and \gls{glssymbol} to the corresponding definition in the
+glossary is given by \meta{prefix}\meta{label} where \meta{label} is
+the entry's label and \meta{prefix} is given by:
+\nosecformatdef{glolinkprefix}
+This can locally be changed within commands like \gls{gls} and
+\gls{glssymbol} with the \glsopt{prefix} option. There is a matching
+\printglossopt{prefix} option for \gls{printunsrtglossary}.
+You can set an additional prefix in the glossary with
+\printglossopt[\meta{extra}]{targetnameprefix}, which means that the
+target name in the glossary is now
+\code{\meta{extra}\gls{glolinkprefix}\meta{label}} (so
+\printglossopt{targetnameprefix} doesn't modify \gls{glolinkprefix}
+but prepends an extra prefix).
+
+If you change the prefix either by using the above options or by
+redefining \gls{glolinkprefix}, you need to make sure that the
+target names match for the links to work correctly.
+The \styopt[showtargets]{debug} package option can be used to show
+the target names in the document. The target is displayed in the
+document using:
+\nosecformatdef{glsshowtarget}
+which may be redefined as appropriate. For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{hyperref}
+\cmd{usepackage}[\styopt{debug}=showtargets]\marg{glossaries-extra}
+\strut
+\gls{newglossaryentry}\marg{sample}\marg{\field{name}=\marg{sample},\field{description}=\marg{an example}}
+\strut
+\cmd{begin}\marg{document}
+\gls{gls}\oarg{\glsopt{prefix}=\marg{TARGET.}}\marg{sample}.
+\strut
+\gls{printunsrtglossary}\oarg{\printglossopt{prefix}=\marg{TARGET.}}
+\gls{printunsrtglossary}\oarg{\printglossopt{prefix}=\marg{TARGET.},\printglossopt{targetnameprefix}=\marg{EXTRA.}}
+\cmd{end}\marg{document}
+\end{codeenv}
+
+\section{Stand-alone Definitions}
+\label{sec:standalone}
+
+The \sty{glossaries-extra} package provides:
+\nosecformatdef{glsxtrglossentry}
+which may be used to create a target for a particular entry (identified by
+\meta{label}). This displays the value of the \field{name} field,
+but it also obeys the \idx{postnamehook} (see
+\sectionref{sec:postfieldhooks}), the \catattr{glossname}
+and \catattr{glossnamefont} attributes (see
+\sectionref{sec:glossname}), and provides accessibility support if
+the \field{access} field is set (see \sectionref{sec:accsupp}).
+This command may be used for both top-level and child entries, and
+will obey the \styopt{entrycounter} (see below) and \styopt{subentrycounter}
+(see \sectionref{sec:parent}) package options according to the
+entry's hierarchical level.
+
+This command doesn't display any of the other field values. 
+If any are required, you need to add them afterwards.
+For the description, you can use \gls{glsentrydesc}, but it's better
+to use:
+\nosecformatdef{glossentrydesc}
+Unlike \gls{glsentrydesc}, which just displays the value of the
+\field{description} field, \gls{glossentrydesc} obeys the
+\catattr{glossdesc} and \catattr{glossdescfont} attributes
+(\sectionref{sec:glossname}). Alternatively, you can use:
+\nosecformatdef{Glossentrydesc}
+which converts the first letter of the description to
+\idx{uppercase}.
+To pick up the \styopt{postpunc} setting and the
+\glslink{postdescriptionhook}{post-description category hook}, 
+append \gls{glspostdescription}
+after the description (see \sectionref{sec:postfieldhooks}).
+
+There's a similar command for symbols:
+\nosecformatdef{glossentrysymbol}
+There are currently no category attributes governing this
+command, but it does check for the \field{symbolaccess} field if
+accessibility support has been added (see \sectionref{sec:accsupp}). 
+For other fields, you can use the commands described in
+\sectionref{sec:userkeys}.
+
+If you need to substitute the \field{name} for another field in the
+target, you can use:
+\nosecformatdef{glsxtrglossentryother}
+instead of \code{\gls{glsxtrglossentry}\margm{label}},
+where \meta{label} identifies the entry and \meta{field} is the
+internal field label to use instead of the \field{name}. The
+\meta{header} argument is the code to use in the header (which
+should be left empty for the default value\footnote{The
+\meta{header} argument doesn't use standard \LaTeX\ optional syntax
+\code{\oargm{option}} because \gls{glsxtrglossentryother} has to be 
+expandable in order for it to work correctly in section arguments.})\ if
+\gls{glsxtrglossentryother} is used in a sectioning command. This
+command obeys the \catattr{glossname} and \catattr{glossnamefont}
+attributes and the \idx{postnamehook}, even though it's not actually
+displaying the name. For example,
+\begin{codeenv}
+\cmd{section}\marg{\gls{glsxtrglossentryother}\marg{}\marg{duck}\marg{\field{plural}}}
+\end{codeenv}
+
+Here's a complete example that uses \gls{glsxtrglossentry} after an
+equation to describe the notation:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{\gls[noindex=false]{xcolor}}\comment{provides colour}
+\cmd{usepackage}[colorlinks,linkcolor=purple]\marg{\gls[noindex=false]{hyperref}}
+\cmd{usepackage}[\styopt[dot]{postpunc}]\marg{glossaries-extra}
+\strut
+\gls{newglossaryentry}\marg{pi}
+\marg{
+   \field{name} = \marg{\gls{ensuremath}\marg{\cmd{pi}}},
+   \field{description} = \marg{Archimedes' constant}
+}
+\strut
+\gls{newglossaryentry}\marg{radius}
+\marg{
+   \field{name} = \marg{\gls{ensuremath}\marg{r}},
+   \field{description} = \marg{radius}
+}
+\strut
+\gls{newglossaryentry}\marg{area}
+\marg{
+   \field{name} = \marg{\gls{ensuremath}\marg{A}},
+   \field{description} = \marg{area}
+}
+\strut
+\cmd{begin}\marg{document}
+\cmd{begin}\marg{equation}
+\gls{gls}\marg{area} = \gls{gls}\marg{pi}\gls{gls}\marg{radius}[\gls{spchar}2]
+\cmd{end}\marg{equation}
+\cmd{begin}\marg{tabular}\marg{ll}
+\gls{glsxtrglossentry}\marg{area} \gls[noindex=false]{colsep} \gls{glossentrydesc}\marg{area}\gls{glspostdescription}\gls[noindex=false]{cs.backslash}
+\gls{glsxtrglossentry}\marg{pi} \gls{colsep} \gls{glossentrydesc}\marg{pi}\gls{glspostdescription}\gls{cs.backslash}
+\gls{glsxtrglossentry}\marg{radius} \gls{colsep} \gls{glossentrydesc}\marg{radius}\gls{glspostdescription}
+\cmd{end}\marg{tabular}
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces:
+\begin{result}
+\setcounter{equation}{0}%
+\renewcommand{\theequation}{\arabic{equation}}%
+\renewcommand{\theHequation}{\thechapter.standalone1.\arabic{equation}}%
+\renewcommand{\glolinkprefix}{standalone1}%
+\renewcommand{\glstextformat}[1]{\textcolor{purple}{#1}}%
+\renewcommand{\glslinkpresetkeys}{\setkeys{glslink}{local}}%
+\glossariesextrasetup{postdot}%
+\begin{equation}
+\gls{standalone.area} = \gls{standalone.pi}\gls{standalone.radius}[^2]
+\end{equation}
+\begin{tabular}{ll}
+\glsxtrglossentry{standalone.area} & \glossentrydesc{standalone.area}\glspostdescription\\
+\glsxtrglossentry{standalone.pi} & \glossentrydesc{standalone.pi}\glspostdescription\\
+\glsxtrglossentry{standalone.radius} & \glossentrydesc{standalone.radius}\glspostdescription
+\end{tabular}
+\end{result}
+The purple text shows the hyperlinks to the relevant definition. As
+with \gls{printunsrtglossary}, the hypertargets are prefixed with
+\gls{glolinkprefix} (see \sectionref{sec:printglossagain}).  This
+can be locally changed to avoid clashes if the definition needs to
+be reproduced later.
+
+A more convenient approach to the above is to define an environment that can
+list all the referenced entries automatically. The
+\sty{glossaries-extra} package provides a way of buffering the
+boolean switch performed by \gls{gls} that ensures that the
+\idx{firstuseflag} is unset (see \sectionref{sec:buffering}). 
+This is intended for use where the switch causes a problem, but it
+can also be used in this case to store a list of used entries (since
+there's no difference between \idx{firstuse} and subsequent use in
+this case, it won't affect the \idx{link-text}).
+
+Here's a modified version of the above document:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{xcolor}
+\cmd{usepackage}[colorlinks,linkcolor=purple]\marg{hyperref}
+\cmd{usepackage}[\styopt[dot]{postpunc}]\marg{glossaries-extra}
+\strut
+\gls{newglossaryentry}\marg{pi}
+\marg{
+   \field{name} = \marg{\gls{ensuremath}\marg{\cmd{pi}}},
+   \field{description} = \marg{Archimedes' constant}
+}
+\strut
+\gls{newglossaryentry}\marg{radius}
+\marg{
+   \field{name} = \marg{\gls{ensuremath}\marg{r}},
+   \field{description} = \marg{radius}
+}
+\strut
+\gls{newglossaryentry}\marg{area}
+\marg{
+   \field{name} = \marg{\gls{ensuremath}\marg{A}},
+   \field{description} = \marg{area}
+}
+\strut
+\gls{newglossaryentry}\marg{circumference}
+\marg{
+   \field{name} = \marg{\gls{ensuremath}\marg{C}},
+   \field{description} = \marg{circumference}
+}
+\strut
+\cmd{newcommand}\marg{\cmd{doglossaryentry}}[1]\marg{\comment{handler macro}
+  \gls{glsxtrglossentry}\marg{\gls{param}1} \gls{colsep} \gls{glossentrydesc}\marg{\gls{param}1}\gls{glspostdescription}\gls{cs.backslash}\comment{}
+}
+\strut
+\cmd{newcounter}\marg{localglossary}
+\strut
+\cmd{newenvironment}\marg{localglossary}
+\marg{\comment{}
+  \cmd{stepcounter}\marg{localglossary}\comment{}
+  \cmd{renewcommand}\marg{\gls{glolinkprefix}}\marg{\cmd{thelocalglossary}.}\comment{}
+  \gls{GlsXtrStartUnsetBuffering}*
+}
+\marg{\comment{}
+  \cmd{par}
+  \cmd{begin}\marg{tabular}\marg{ll}
+  \gls{GlsXtrForUnsetBufferedList}\cmd{doglossaryentry}
+  \cmd{end}\marg{tabular}
+  \gls{GlsXtrStopUnsetBuffering}
+  \cmd{par}
+}
+\strut
+\cmd{begin}\marg{document}
+The area of a circle is given by:
+\cmd{begin}\marg{localglossary}
+\cmd{begin}\marg{equation}
+\gls{gls}\marg{area} = \gls{gls}\marg{pi}\gls{gls}\marg{radius}[\gls{spchar}2]
+\cmd{end}\marg{equation}
+\cmd{end}\marg{localglossary}
+The circumference of a circle is given by:
+\cmd{begin}\marg{localglossary}
+\cmd{begin}\marg{equation}
+\gls{gls}\marg{circumference} = 2\gls{gls}\marg{pi}\gls{gls}\marg{radius}
+\cmd{end}\marg{equation}
+\cmd{end}\marg{localglossary}
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces:
+\begin{result}
+\setcounter{equation}{0}%
+\renewcommand{\theequation}{\arabic{equation}}%
+\renewcommand{\theHequation}{\thechapter.standalone2.\arabic{equation}}%
+\renewcommand{\glolinkprefix}{standalone2}%
+\renewcommand{\glstextformat}[1]{\textcolor{purple}{#1}}%
+\renewcommand{\glslinkpresetkeys}{}%
+\glossariesextrasetup{postdot}%
+The area of a circle is given by:
+\begin{localglossary}
+\begin{equation}
+\gls{standalone.area} = \gls{standalone.pi}\gls{standalone.radius}[^2]
+\end{equation}
+\end{localglossary}
+The circumference of a circle is given by:
+\begin{localglossary}
+\begin{equation}
+\gls{standalone.circumference} = 2\gls{standalone.pi}\gls{standalone.radius}
+\end{equation}
+\end{localglossary}
+\end{result}
+The custom \counterfmt{localglossary} counter is defined and incremented to
+ensure that the target prefix \gls{glolinkprefix} is unique for each
+environment. This definition of the custom \envfmt{localglossary}
+environment is intentionally kept trivial since the main point here is
+the demonstration of \gls{glsxtrglossentry} and the buffering rather
+than the actual formatting of the entries. Additional vertical
+spacing, appropriate alignment and a paragraph column specifier are
+left as an exercise for the reader.
+
+\subsection{Numbering Top-Level Entries}
+\label{sec:entrycounter}
+
+The \styopt{entrycounter} package option creates a new counter
+called \counter{glossaryentry}, which will automatically be
+incremented and displayed at the start of \gls{glsxtrglossentry}
+for top-level entries. (The \counter{glossarysubentry} counter created with the
+\styopt{subentrycounter} option, described in \sectionref{sec:parent},
+may be used independently of the \styopt{entrycounter} package option.) In
+the above example, this counter will need to depend on the custom
+\counterfmt{localglossary} counter to ensure that it's reset at the
+start of each \envfmt{localglossary} environment. This can easily be
+done by using the name of the master counter as the value of
+\styopt{counterwithin} (which automatically implements
+\styopt{entrycounter}), but the master counter must be defined
+first:
+\begin{codeenv}
+\cmd{newcounter}\marg{localglossary}
+\cmd{usepackage}[\styopt[localglossary]{counterwithin}]\marg{glossaries-extra}
+\end{codeenv}
+The default definition of \gls{theHglossaryentry} is:
+\begin{codeenv}
+\gls{currentglossary}.\gls[noindex=false]{theglossaryentry}
+\end{codeenv}
+The prefix \gls{currentglossary} is set by both
+\gls{printunsrtglossary} and \gls{glsxtrglossentry} to the current
+glossary label (given by the \printglossopt{type} option in
+\gls{printunsrtglossary} and by the entry's \field{type} field for
+\gls{glsxtrglossentry}). In the case of \gls{glsxtrglossentry}
+(and \gls{glsxtrglossentryother}), the value of
+\gls{currentglossary} is obtained from:
+\nosecformatdef{GlsXtrStandaloneGlossaryType}
+which defaults to the value of the \field{type} field for the
+current entry.
+
+Since this example is using multiple stand-alone definitions that
+may repeat the same entry, this definition isn't appropriate and will 
+cause duplicate destination warnings. The simplest solution is to redefine
+\gls{GlsXtrStandaloneGlossaryType} in terms of the custom
+\counterfmt{localglossary} counter value:
+\begin{codeenv}
+\cmd{renewcommand}\marg{\cmd{GlsXtrStandaloneGlossaryType}}\marg{\comment{}
+ standalone.\cmd{thelocalglossary}.\cmd{arabic}\marg{\counter{glossaryentry}}\comment{}
+}
+\end{codeenv}
+
+Unlike commands such as \gls{gls}, which can be problematic in moving
+arguments, \gls{glsxtrglossentry} is designed to work in section
+headings. For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{mhchem}
+\cmd{usepackage}[colorlinks,linkcolor=magenta]\marg{hyperref}
+\cmd{usepackage}[\styopt[dot]{postpunc}]\marg{glossaries-extra}
+\strut
+\gls{newglossaryentry}\marg{amethyst}
+\marg{
+   \field{name} = \marg{amethyst},
+   \field{description} = \marg{a purple type of quartz},
+   \field{symbol} = \marg{\gls{ce}\marg{SiO2}},
+   \field{category} = \marg{mineral}
+}
+\strut
+\gls{glssetcategoryattribute}\marg{mineral}\marg{glossname}\marg{firstuc}
+\strut
+\cmd{newcommand}\marg{\cmd{displayterm}}[1]\marg{\comment{}
+ \cmd{subsection}\marg{\gls{glsxtrglossentry}\marg{\gls{param}1}}\comment{}
+ Chemical formula: \gls{glossentrysymbol}\marg{\gls{param}1}.
+ \gls{Glossentrydesc}\marg{\gls{param}1}\gls{glspostdescription}\cmd{par}
+}
+\cmd{begin}\marg{document}
+\gls{tableofcontents}
+\cmd{section}\marg{Types of Quartz}
+A reference to \gls{gls}\marg{amethyst}.
+\strut
+\cmd{displayterm}\marg{amethyst}
+\cmd{end}\marg{document}
+\end{codeenv}
+(Again, improvements to the actual formatting of the custom
+\csfmt{displayterm} is left as an exercise to the reader. Additional
+fields could contain, for example, the name of an image file to
+illustrated the entry. See the
+\href{https://www.dickimaw-books.com/gallery/}{\styfmt{glossaries}
+gallery}~\cite{gallery} for further ideas.)
+
+The above example uses the \catattr{glossname} attribute to convert the first
+letter of the \field{name} to \idx{uppercase}. Unfortunately this can't be
+applied to the PDF bookmark or \gls{toc}. A solution to this
+would be to explicitly set the \field{name} with the first letter as
+an \idx{uppercase} character and the \field{text} field in
+\idx{lowercase}. For example:
+\begin{codeenv}
+\gls{newglossaryentry}\marg{amethyst}
+\marg{
+   \field{name} = \marg{Amethyst},
+   \field{text} = \marg{amethyst},
+   \field{description} = \marg{a purple type of quartz},
+   \field{symbol} = \marg{\gls{ce}\marg{SiO2}},
+   \field{category} = \marg{mineral}
+}
+\end{codeenv}
+The \catattr{glossname} attribute can then be omitted. This is a bit
+inconvenient, but if you use \bibgls\ (see \sectionref{sec:bib2gls})
+this can be performed automatically with the
+\csopt{name-case-change} resource option.
+
+\subsection{Stand-alone Hierarchical Entries}
+\label{sec:standalonehierarchy}
+
+Sub-entries can also be displayed with \gls{glsxtrglossentry} or
+\gls{glsxtrglossentryother}. These check if the entry has a parent
+(with \gls{ifglshasparent}).  If it doesn't, then it will display
+the \counter{glossaryentry} counter label if the
+\styopt{entrycounter} package option has been used. If the entry
+does have a parent, it uses:
+\nosecformatdef{GlsXtrStandaloneSubEntryItem}
+which checks the internal \field{level} field to
+determine the hierarchical level. If the \field{level} is~1 (that
+is, the entry has a parent but not a grandparent) then it will
+display the \counter{glossarysubentry} label if that counter has
+been defined, otherwise it does nothing.
+
+Here's an example document with a top-level entry (\code{mineral}),
+a level~1 entry (\code{quartz}) and a level~2 entry (\code{amethyst}).
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{xcolor}\comment{provides colour}
+\cmd{usepackage}[colorlinks,linkcolor=magenta]\marg{hyperref}
+\cmd{usepackage}[
+ \styopt{entrycounter},\comment{enable top-level counter}
+ \styopt{subentrycounter},\comment{enable level 1 counter}
+ \styopt{postpunc}=\marg{dot},\comment{put full-stop after description}
+ \styopt{nostyles},\comment{suppress automatic loading of default styles}
+ \styopt[tree]{stylemods}\comment{load glossary-tree.sty}
+]\marg{glossaries-extra}
+\strut
+\gls{newglossaryentry}\marg{mineral}
+\marg{
+  \field{name} = \marg{mineral},
+  \field{description} = \marg{natural inorganic substance},
+  \field{category} = \marg{mineral}
+}
+\strut
+\gls{newglossaryentry}\marg{calcite}
+\marg{
+  \field{parent} = \marg{mineral},
+  \field{name} = \marg{calcite},
+  \field{description} = \marg{a carbonate mineral},
+  \field{category} = \marg{mineral}
+}
+\strut
+\gls{newglossaryentry}\marg{quartz}
+\marg{
+  \field{parent} = \marg{mineral},
+  \field{name} = \marg{quartz},
+  \field{description} = \marg{hard mineral consisting of silica},
+  \field{category} = \marg{mineral}
+}
+\strut
+\gls{newglossaryentry}\marg{amethyst}
+\marg{
+  \field{parent} = \marg{quartz},
+  \field{name} = \marg{amethyst},
+  \field{description} = \marg{a purple type of quartz},
+  \field{category} = \marg{mineral}
+}
+\strut
+\gls{glssetcategoryattribute}\marg{mineral}\marg{glossname}\marg{firstuc}
+\strut
+\cmd{renewcommand}\marg{\gls[noindex=false]{GlsXtrStandaloneGlossaryType}}\marg{standalone}
+\strut
+\cmd{newcommand}\marg{\cmd{displayterm}}\oarg{1}\marg{\comment{}
+ \cmd{par}
+ Definition \gls{glsxtrglossentry}\marg{\gls{param}1}:
+ \gls{glossentrydesc}\marg{\gls{param}1}\gls{glspostdescription}\cmd{par}
+}
+\strut
+\cmd{begin}\marg{document}
+\cmd{displayterm}\marg{mineral}
+\cmd{displayterm}\marg{calcite}
+\cmd{displayterm}\marg{quartz}
+\cmd{displayterm}\marg{amethyst}
+\strut
+A reference to \gls{gls}\marg{mineral}.
+A reference to \gls{gls}\oarg{\printglossopt{prefix}={main.}}\marg{amethyst}.
+\strut
+\cmd{renewcommand}\marg{\gls[noindex=false]{GlsEntryCounterLabelPrefix}}\marg{main.glsentry-}
+\gls{glsresetentrycounter}
+\gls{printunsrtglossary}\oarg{\printglossopt{prefix}=\marg{main.},\printglossopt{style}=tree}
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces:
+\begin{result}
+\renewcommand{\glslinkpresetkeys}{\setkeys{glslink}{local}}%
+\def\glolinkprefix{standalone.hier.}%
+\renewcommand{\glstextformat}[1]{\textcolor{magenta}{#1}}%
+\setupglossaries{entrycounter,subentrycounter,section,toc=false}%
+\glossariesextrasetup{postdot}%
+\glssetcategoryattribute{hierarchical}{glossname}{firstuc}%
+\renewcommand{\GlsXtrStandaloneGlossaryType}{standalone}%
+\newcommand{\displayterm}[1]{%
+ \par
+ \begingroup
+   Definition \glsxtrglossentry{#1}:
+   \glossentrydesc{#1}\glspostdescription\par
+ \endgroup
+}%
+\displayterm{hier.mineral}
+\displayterm{hier.calcite}
+\displayterm{hier.quartz}
+\displayterm{hier.amethyst}
+
+A reference to \gls{hier.mineral}.
+A reference to \gls[prefix={hierarchical.main.}]{hier.amethyst}.
+
+\printunsrtglossary*[prefix={hierarchical.main.},style=tree,nonumberlist]
+{%
+  \glsresetentrycounter
+  \renewcommand{\GlsEntryCounterLabelPrefix}{main.glsentry-}%
+  \renewcommand*{\printunsrtglossaryentryprocesshook}[1]{%
+    \glsxtriflabelinlist{#1}{hier.mineral,hier.calcite,hier.quartz,hier.amethyst}%
+    {}{\printunsrtglossaryskipentry}%
+  }%
+}
+\end{result}
+Note the need to reset the \counter{glossaryentry} counter with 
+\gls{glsresetentrycounter} before the main glossary. The top-level
+entry (\code{mineral}) has the label formatted as
+\qt{1.\textvisiblespace} and the level~1 entries (\code{calcite}
+and \code{quartz}) have their labels formatted as
+\qt{1)\textvisiblespace} and \qt{2)\textvisiblespace} but the
+level~2 entry (\code{amethyst}) doesn't have an associated number.
+If you want to number levels deeper than 1, you will have to provide
+your own custom counters. (If the stand-alone level~2 entry shows a
+number when you try this, then you've encountered a bug that's been
+fixed in \sty{glossaries-extra} version~1.31.)
+
+The hyperlinks are shown in magenta. The first (\code{mineral}) links to the
+stand-alone target, and the second (\code{amethyst}) links to the entry in 
+the main glossary.
+
+\chapter{Changing the Formatting}
+\label{sec:glsformats}
+
+All commands like \gls{gls} and \gls{glssymbol} by default
+encapsulate the \idx{link-text} within the argument of:
+\nosecformatdef{glstextformat}
+For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{xcolor}\comment{provides colour}
+\cmd{usepackage}\marg{pifont}\comment{provides \gls{ding}}
+\cmd{usepackage}\marg{glossaries-extra}
+\strut
+\gls{newglossaryentry}\marg{duck}\comment{label}
+\marg{
+   \field{name} = \marg{duck},
+   \field{description} = \marg{a waterbird with webbed feet}
+}
+\strut
+\gls{newglossaryentry}\marg{fleuron}\comment{label}
+\marg{
+  \field{name} = \marg{fleuron},
+  \field{symbol} = \marg{\gls[noindex=false]{ding}\marg{167}},
+  \field{category} = \marg{ornament},
+  \field{description} = \marg{typographic ornament}
+}
+\strut
+\gls{newabbreviation}\marg{tug}\marg{TUG}\marg{\cmd{TeX}\gls{cs.space}Users Group}
+\strut
+\cmd{renewcommand}\marg{\gls{glstextformat}}[1]\marg{\cmd{textcolor}\marg{violet}\marg{\gls{param}1}}
+\strut
+\cmd{begin}\marg{document}
+A \gls{gls}\marg{duck}, a \gls{gls}\marg{fleuron} (\gls{glssymbol}\marg{fleuron}, 
+\gls{glsentrydesc}\marg{fleuron}) and \gls{gls}\marg{tug}.
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces:
+\begin{result}%
+\renewcommand{\glstextformat}[1]{\textcolor{violet}{#1}}%
+A \gls{ex1.duck}, a \gls{ex.fleuron} (\glssymbol{ex.fleuron}, 
+\glsentrydesc{ex.fleuron}) and \gls{TUG}.
+\end{result}
+Note that this has affected \gls{gls} and \gls{glssymbol} but not
+\gls{glsentrydesc}.
+
+A distinction can be made between abbreviations (\idx{non-regular}
+terms) and \idx{regular} terms (non-abbreviations or abbreviations
+that are considered \idx{regular} entries). 
+A \idx{regular} term is encapsulated with 
+\nosecformatdef{glsxtrregularfont}
+and an abbreviation is encapsulated with 
+\nosecformatdef{glsxtrabbreviationfont}
+For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{xcolor}\comment{provides colour}
+\cmd{usepackage}\marg{pifont}\comment{provides \gls{ding}}
+\cmd{usepackage}\marg{glossaries-extra}
+\strut
+\gls{newglossaryentry}\marg{duck}\comment{label}
+\marg{
+   \field{name} = \marg{duck},
+   \field{description} = \marg{a waterbird with webbed feet}
+}
+\strut
+\gls{newglossaryentry}\marg{fleuron}\comment{label}
+\marg{
+  \field{name} = \marg{fleuron},
+  \field{symbol} = \marg{\gls{ding}\marg{167}},
+  \field{category} = \marg{ornament},
+  \field{description} = \marg{typographic ornament}
+}
+\strut
+\gls{newabbreviation}\marg{tug}\marg{TUG}\marg{\cmd{TeX}\gls{cs.space}Users Group}
+\gls{newacronym}\marg{ascii}\marg{ASCII}\marg{American Standard Code for 
+Information Interchange}
+\strut
+\cmd{renewcommand}\marg{\gls{glstextformat}}[1]\marg{\cmd{textcolor}\marg{violet}\marg{\gls{param}1}}
+\cmd{renewcommand}\marg{\gls{glsxtrregularfont}}[1]\marg{\cmd{underline}\marg{\gls{param}1}}
+\cmd{renewcommand}\marg{\gls{glsxtrabbreviationfont}}[1]\marg{\gls{emph}\marg{\gls{param}1}}
+\strut
+\cmd{begin}\marg{document}
+Two \gls{glspl}\marg{duck}, a \gls{gls}\marg{fleuron} (\gls{glssymbol}\marg{fleuron}, 
+\gls{glsentrydesc}\marg{fleuron}), \gls{gls}\marg{tug} and \gls{gls}\marg{ascii}.
+\cmd{end}\marg{document}
+\end{codeenv}
+This now produces:
+\begin{result}%
+\renewcommand{\glstextformat}[1]{\textcolor{violet}{#1}}%
+\renewcommand{\glsxtrregularfont}[1]{\underline{#1}}%
+\renewcommand{\glsxtrabbreviationfont}[1]{\emph{#1}}%
+Two \glspl{ex1.duck}, a \gls{ex.fleuron} (\glssymbol{ex.fleuron}, 
+\glsentrydesc{ex.fleuron}), \gls{TUG} and \gls{ASCII}.
+\end{result}
+Note the difference between the abbreviation defined with
+\gls{newabbreviation} and the one defined with \gls{newacronym}.
+The above example document is using the default styles, which is
+\abbrstyle{long-short} for the \code{abbreviation} category
+and \abbrstyle{short-nolong} for the \code{acronym} category.
+The \abbrstyle{short-nolong} style makes the abbreviation behave
+like a \idx{regular} entry and so it's governed by \gls{glsxtrregularfont}
+not by \gls{glsxtrabbreviationfont}.
+
+The \gls{glstextformat} command is overridden by the
+\catattr{textformat} attribute. The value of this attribute must be
+the name (without the leading backslash) of a command that takes a
+single argument, which will be used instead of \gls{glstextformat}
+for any entry that has this attribute set for its category.
+For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{xcolor}\comment{provides colour}
+\cmd{usepackage}\marg{pifont}\comment{provides \gls{ding}}
+\cmd{usepackage}\marg{glossaries-extra}
+\strut
+\cmd{newcommand}\marg{\cmd{ornamentfmt}}[1]\marg{\cmd{textcolor}\marg{cyan}\marg{\gls{param}1}}
+\strut
+\gls{glssetcategoryattribute}\marg{ornament}\marg{\catattr{textformat}}\marg{ornamentfmt}
+\strut
+\gls{setabbreviationstyle}\marg{\abbrstyle[noindex=false]{long-short-em}}
+\gls{setabbreviationstyle}\oarg{acronym}\marg{\abbrstyle[noindex=false]{short-sc-nolong}}
+\strut
+\gls{newglossaryentry}\marg{duck}\comment{label}
+\marg{
+   \field{name} = \marg{duck},
+   \field{description} = \marg{a waterbird with webbed feet}
+}
+\strut
+\gls{newglossaryentry}\marg{fleuron}\comment{label}
+\marg{
+  \field{name} = \marg{fleuron},
+  \field{symbol} = \marg{\gls{ding}\marg{167}},
+  \field{category} = \marg{ornament},
+  \field{description} = \marg{typographic ornament}
+}
+\strut
+\gls{newabbreviation}\marg{tug}\marg{TUG}\marg{\cmd{TeX}\gls{cs.space}Users Group}
+\gls{newacronym}\marg{ascii}\comment{label}
+\marg{ascii}\comment{short form needs to be in lower case with sc styles}
+\marg{American Standard Code for Information Interchange}
+\strut
+\cmd{renewcommand}\marg{\gls{glstextformat}}[1]\marg{\cmd{textcolor}\marg{violet}\marg{\gls{param}1}}
+\cmd{renewcommand}\marg{\gls{glsxtrregularfont}}[1]\marg{\cmd{underline}\marg{\gls{param}1}}
+\cmd{renewcommand}\marg{\gls{glsxtrabbreviationfont}}[1]\marg{\gls{textbf}\marg{\gls{param}1}}
+\strut
+\cmd{begin}\marg{document}
+Two \gls{glspl}\marg{duck}, a \gls{gls}\marg{fleuron} (\gls{glssymbol}\marg{fleuron}, 
+\gls{glsentrydesc}\marg{fleuron}), \gls{gls}\marg{tug} and \gls{gls}\marg{ascii}.
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces:
+\begin{result}
+\renewcommand{\glstextformat}[1]{\textcolor{violet}{#1}}%
+\renewcommand{\glsxtrregularfont}[1]{\underline{#1}}%
+\renewcommand{\glsxtrabbreviationfont}[1]{\textbf{#1}}%
+\newcommand{\ornamentfmt}[1]{\textcolor{cyan}{#1}}%
+\glssetcategoryattribute{ornament}{textformat}{ornamentfmt}%
+Two \glspl{ex1.duck}, a \gls{ex.fleuron} (\glssymbol{ex.fleuron}, 
+\glsentrydesc{ex.fleuron}), \gls{ex.tug} and \gls{ex.ascii}.
+\end{result}
+So \code{\gls{gls}\marg{fleuron}} and \code{\gls{glssymbol}\marg{fleuron}} are now
+formatted according to the custom command \csfmt{ornamentfmt} (cyan)
+not by \gls{glstextformat} (violet), but they are still affected by
+\gls{glsxtrregularfont} (underline).
+
+The \code{tug} abbreviation has been assigned the
+\abbrstyle{long-short-em} style which encapsulates the short form
+with \gls{emph}, but it also obeys \gls{glsxtrabbreviationfont}
+(bold) and it's encapsulated by \gls{glstextformat} (violet), so the
+full form on \idx{firstuse} is all violet and bold with the short
+form in italics.
+
+The \code{ascii} entry (which has the \field{category} set to
+\code{acronym}) has been assigned the \abbrstyle{short-sc-nolong}
+style, which encapsulates the short form with \gls{textsc} (so the
+short form must be converted to \idx{lowercase}) and identifies the
+entry as a \idx{regular} term, so it obeys \gls{glsxtrregularfont}
+(underline). Again, the \idx{link-text} is encapsulated with
+\gls{glstextformat} (violet) so the abbreviation is violet,
+underlined and in small-caps.
+
+You can override a specific instance with the \glsopt{textformat}
+setting in the first optional argument of commands like \gls{gls}.
+For example, if the above is modified to:
+\begin{codeenv}
+Two \gls{glspl}\marg{duck}, a \gls{gls}\oarg{\glsopt{textformat}=textbf}\marg{fleuron} 
+(\gls{glssymbol}\marg{fleuron}, \gls{glsentrydesc}\marg{fleuron}), \gls{gls}\marg{tug} 
+and \gls{gls}\marg{ascii}.
+\end{codeenv}
+then the result is now:
+\begin{result}
+\renewcommand{\glstextformat}[1]{\textcolor{violet}{#1}}%
+\renewcommand{\glsxtrregularfont}[1]{\underline{#1}}%
+\renewcommand{\glsxtrabbreviationfont}[1]{\textbf{#1}}%
+\newcommand{\ornamentfmt}[1]{\textcolor{cyan}{#1}}%
+\glssetcategoryattribute{ornament}{textformat}{ornamentfmt}%
+Two \glspl{ex1.duck}, a \gls[textformat=textbf]{ex.fleuron} 
+(\glssymbol{ex.fleuron}, \glsentrydesc{ex.fleuron}),
+\gls{ex.tug} and \gls{ex.ascii}.
+\end{result}
+In this case, only that specific instance is changed.
+
+Take care if the formatting command needs to parse its argument as
+the argument won't be the actual text but consists of intermediary commands
+that determine the required text and any inner formatting, such as
+the formatting applied by abbreviation styles. See
+\sectionref{sec:expandedfmt} for further details.
+
+\section{Post-Link Category Hooks}
+\label{sec:postlinkhooks}
+
+Extra information can be appended after commands such as \gls{gls}
+by defining a \pidx{postlinkhook} for the given category. You can
+obtain the label of the entry that's just been referenced with:
+\nosecformatdef{glslabel}
+The \idx{postlinkhook} is a command in the form
+\nosecformatdef{glsxtrpostlinkcategory}
+where \meta{category} is the category label. This hook is
+implemented after any instances of commands such as \gls{gls} or
+\gls{glssymbol} (but not after commands like \gls{glsentryname},
+\gls{glsentrydesc} or \gls{glsentryname}, which may be used in the
+hook).
+
+Consider the following document:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{pifont}\comment{provides \gls{ding}}
+\cmd{usepackage}\marg{glossaries-extra}
+\strut
+\gls{newglossaryentry}\marg{fleuron}\comment{label}
+\marg{
+  \field{name} = \marg{fleuron},
+  \field{symbol} = \marg{\gls{ding}\marg{167}},
+  \field{description} = \marg{typographic ornament}
+}
+\strut
+\gls{newglossaryentry}\marg{pi}\comment{label}
+\marg{
+  \field{name} = \marg{Archimedes' constant},
+  \field{symbol} = \marg{\gls{ensuremath}\marg{\cmd{pi}}},
+  \field{category} = \marg{constant},
+  \field{description} = \marg{Archimedes' constant}
+}
+\strut
+\comment{post-link hook for 'constant' category:}
+\cmd{newcommand}\marg{\csfmt{glsxtrpostlinkconstant}}\marg{\comment{} 
+ \cmd{space} (\gls{glsentrysymbol}\marg{\gls{glslabel}})}
+\strut
+\cmd{begin}\marg{document}
+A \gls{gls}\marg{fleuron} and \gls{gls}\marg{pi}.
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces:
+\begin{result}
+\newcommand{\glsxtrpostlinkconstant}{\space (\glsentrysymbol{\glslabel})}%
+A \gls{ex.fleuron} and \gls{ex.pi}.
+\end{result}
+The \code{fleuron} entry doesn't have the \field{category} key
+explicitly set, so it defaults to \code{general}, but the \code{pi}
+entry has the \field{category} set to \code{constant}, so it's
+affected by the \idx{postlinkhook} for that category, which in this
+case is given by \csfmt{glsxtrpostlinkconstant}. This hook is
+defined to use \gls{glsentrysymbol} where the entry label is obtained
+from \gls{glslabel}, which is set by \gls{gls} and similar commands.
+
+\begin{important}
+If \code{\gls{glssymbol}\marg{\gls{glslabel}}} had been used instead of
+\code{\gls{glsentrysymbol}\marg{\gls{glslabel}}} it would've caused infinite
+recursion! Don't use commands like \gls{glssymbol}, \gls{glsdesc} or
+\gls{gls} in \idxpl{postlinkhook}.
+\end{important}
+
+This means that \code{\gls{gls}\marg{pi}} is automatically followed by the
+symbol in parentheses, but \code{\gls{gls}\marg{fleuron}} isn't because it's
+governed by the \code{general} \idx{postlinkhook} instead. Note that
+the above is a simple example to demonstrate one of the uses of the
+\field{category} field.
+
+Here's a minor modification that sets the category for the
+\code{fleuron} entry to \code{ornament} and creates another hook for
+that.
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{pifont}\comment{provides \gls{ding}}
+\cmd{usepackage}\marg{glossaries-extra}
+\strut
+\gls{newglossaryentry}\marg{fleuron}\comment{label}
+\marg{
+  \field{name} = \marg{fleuron},
+  \field{symbol} = \marg{\gls{ding}\marg{167}},
+  \field{category} = \marg{ornament},
+  \field{description} = \marg{typographic ornament}
+}
+\strut
+\gls{newglossaryentry}\marg{pi}\comment{label}
+\marg{
+  \field{name} = \marg{pi},
+  \field{symbol} = \marg{\gls{ensuremath}\marg{\cmd{pi}}},
+  \field{category} = \marg{constant},
+  \field{description} = \marg{Archimedes' constant}
+}
+\strut
+\comment{post-link hook for 'ornament' category:}
+\cmd{newcommand}\marg{\csfmt{glsxtrpostlinkornament}}\marg{\comment{}
+ \cmd{space} (\gls{glsentrydesc}\marg{\gls{glslabel}})}
+\strut
+\comment{post-link hook for 'constant' category:}
+\cmd{newcommand}\marg{\csfmt{glsxtrpostlinkconstant}}{\comment{}
+ \cmd{space} (\gls{glsentrysymbol}\marg{\gls{glslabel}})}
+\strut
+\cmd{begin}\marg{document}
+A \gls{gls}\marg{fleuron} and \gls{gls}\marg{pi}. Another \gls{gls}\marg{fleuron} and 
+\gls{gls}\marg{pi}. Symbols: \gls{glssymbol}\marg{fleuron} and \gls{glssymbol}\marg{pi}.
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces:
+\begin{result}
+\newcommand{\glsxtrpostlinkornament}{\space (\glsentrydesc{\glslabel})}%
+\newcommand{\glsxtrpostlinkconstant}{\space (\glsentrysymbol{\glslabel})}%
+A \gls{ex.fleuron} and \gls{ex.pi}. Another \gls{ex.fleuron} and 
+\gls{ex.pi}. Symbols: \glssymbol{ex.fleuron} and \glssymbol{ex.pi}.\incorrect
+\end{result}
+The \idx{postlinkhook} is repeated after every instance of \gls{gls}
+or \gls{glssymbol} etc. In the case of the \code{ornament} category,
+the description is appended in parentheses and in the case of the
+\code{constant} category the symbol is appended. This results in
+redundant repetition, especially with \verb|\glssymbol{pi}| which
+displays the symbol followed by the symbol in parentheses.
+
+It's more likely that the information only needs to be appended
+after the \idx{firstuse}. You can determine if the
+\idx{postlinkhook} follows the \idx{firstuse} of the entry using:
+\nosecformatdef{glsxtrifwasfirstuse}
+For example:
+\begin{codeenv}
+\cmd{newcommand}\marg{\csfmt{glsxtrpostlinkconstant}}\marg{\comment{}
+ \gls{glsxtrifwasfirstuse}\marg{\cmd{space} (\gls{glsentrysymbol}\marg{\gls{glslabel}})}\marg{}\comment{}
+}
+\end{codeenv}
+Commands that don't check or modify the \idx{firstuseflag}, such as
+\gls{glssymbol}, always set \gls{glsxtrifwasfirstuse} so that it
+expands to \meta{false}. This means that even if
+\code{\gls{glssymbol}\marg{pi}}
+is placed before the first instance of \code{\gls{gls}\marg{pi}} it still
+won't be treated as the first use of that entry.
+
+For convenience, there's a shortcut command:
+\nosecformatdef{glsxtrpostlinkAddSymbolOnFirstUse}
+So an alternative definition is:
+\begin{codeenv}
+\cmd{newcommand}\marg{\csfmt{glsxtrpostlinkconstant}}\marg{\comment{}
+  \gls{glsxtrpostlinkAddSymbolOnFirstUse}
+}
+\end{codeenv}
+This does nothing if the \field{symbol} field hasn't been set.
+
+Similarly, there's a shortcut command for the description:
+\nosecformatdef{glsxtrpostlinkAddDescOnFirstUse}
+Version 1.31+ provides a combination:
+\nosecformatdef{glsxtrpostlinkAddSymbolDescOnFirstUse}
+If the \field{symbol} field is set, this displays the symbol
+followed by a comma and space. The description is always displayed
+at the end of the parenthetical material.
+
+Also from \sty{glossaries-extra} v1.31, there's a shortcut
+command that you can use to define the \idx{postlinkhook}:
+\nosecformatdef{glsdefpostlink} 
+This is just a shortcut for:
+\begin{codeenv}
+\csfmt{csdef}\marg{glsxtrpostlink\meta{category}}\margm{definition}
+\end{codeenv}
+So the above document can be changed to:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\marg{pifont}\comment{provides \gls{ding}}
+\cmd{usepackage}\marg{glossaries-extra}
+\strut
+\gls{newglossaryentry}\marg{fleuron}\comment{label}
+\marg{
+  \field{name} = \marg{fleuron},
+  \field{symbol} = \marg{\gls{ding}\marg{167}},
+  \field{category} = \marg{ornament},
+  \field{description} = \marg{typographic ornament}
+}
+\strut
+\gls{newglossaryentry}\marg{pi}\comment{label}
+\marg{
+  \field{name} = \marg{pi},
+  \field{symbol} = \marg{\gls{ensuremath}\marg{\cmd{pi}}},
+  \field{category} = \marg{constant},
+  \field{description} = \marg{Archimedes' constant}
+}
+\strut
+\comment{post-link hook for 'ornament' category:}
+\gls{glsdefpostlink}\marg{ornament}\marg{\comment{}
+  \gls{glsxtrpostlinkAddSymbolDescOnFirstUse}
+}
+\strut
+\comment{post-link hook for 'constant' category:}
+\gls{glsdefpostlink}\marg{constant}\marg{\comment{}
+  \gls{glsxtrpostlinkAddSymbolOnFirstUse}
+}
+\strut
+\cmd{begin}\marg{document}
+Symbols: \gls{glssymbol}\marg{fleuron} and \gls{glssymbol}\marg{pi}.
+A \gls{gls}\marg{fleuron} and \gls{gls}\marg{pi}. Another \gls{gls}\marg{fleuron} and 
+\gls{gls}\marg{pi}.
+\cmd{end}\marg{document}
+\end{codeenv}
+The result is now:
+\begin{result}%
+\glsdefpostlink{ornament}{\glsxtrpostlinkAddSymbolDescOnFirstUse}%
+\glsdefpostlink{constant}{\glsxtrpostlinkAddSymbolOnFirstUse}%
+Symbols: \glssymbol{ex.fleuron} and \glssymbol{ex.pi}.
+A \gls{ex.fleuron} and \gls{ex.pi}. Another \gls{ex.fleuron} and
+\gls{ex.pi}.
+\end{result}
+
+\section{Glossary Name and Description Formatting}
+\label{sec:glossname}
+
+When an entry's definition is displayed within
+\gls{printunsrtglossary} or \gls{glsxtrglossentry} (see
+\sectionref{sec:displaygloss}), the value of the \field{name} field
+is encapsulated by
+\nosecformatdef{glsnamefont}
+This may be overridden with the \catattr{glossnamefont} attribute
+whose value must be the name (without the leading backslash) of a
+control sequence that takes a single argument. If set, this control
+sequence is used instead of \gls{glsnamefont}.
+
+By default \gls{glsnamefont} simply does its argument, but the
+glossary style may apply additional formatting. For example, the
+\glostyle{list} styles place the name in the optional argument of
+\csfmt{item} within the \envfmt{description} environment. With the
+standard document classes, this renders the name in bold, but other
+classes may apply different formatting.
+
+The \glostyle{tree} styles defined by the \sty{glossary-tree} style 
+encapsulate the name within:
+\nosecformatdef{glstreenamefmt}
+which does \code{\gls{textbf}\margm{text}} by default. So, for
+example, if \gls{glsnamefont} is redefined to use \gls{textit} and
+the \glostyle{tree} style is used, then the name will appear in
+italic bold.  The letter group headings are encapsulated within:
+\nosecformatdef{glstreegroupheaderfmt}
+which defaults to \code{\gls{glstreenamefmt}\margm{text}}, so if you
+need to redefine \gls{glstreenamefmt} you may also need to redefine
+\gls{glstreegroupheaderfmt} if the headers should have different formatting.
+The \sty{glossaries-extra-stylemods} package (as from v1.31) now
+redefine both \gls{glstreenamefmt} and \gls{glstreegroupheaderfmt}
+to use:
+\nosecformatdef{glstreedefaultnamefmt}
+which does \code{\gls{textbf}\margm{text}} by default. This means
+that if you want to change both the header and name to a different
+font, you can just redefine \gls{glstreedefaultnamefmt}, and if you
+want to change only the font used for the name, then now you only
+need to redefine \gls{glstreenamefmt}, without also having to
+redefine \gls{glstreegroupheaderfmt}.
+
+Case-changing can be automatically applied to the name with the
+\catattr{glossname} attribute, which may take one of the values:
+\code{firstuc} (convert the first letter to \idx{uppercase}), \code{title}
+(convert to title case) or \code{uc} (convert to all capitals).
+Alternatively, if you're using \bibgls, you can use the
+\csopt{name-case-change} resource option.
+
+The description is similarly governed by the
+\catattr{glossdescfont}, which again should have the name (without
+the leading backslash) of a control sequence that takes a single
+argument. There's no equivalent of \gls{glsnamefont} for the
+description but the glossary or abbreviation style may apply
+particular formatting, which will be in addition to the formatting
+command given by \catattr{glossdescfont} (if set).
+
+Case-changing is also available for descriptions with the
+\catattr{glossdesc} attribute, but this only has two allowed values:
+\code{firstuc} (convert the first letter to \idx{uppercase}) and
+\code{title} (convert to title case). 
+Alternatively, if you're using \bibgls, you can use the
+\csopt{description-case-change} resource option.
+
+\section{Post-Name and Post-Description Hooks}
+\label{sec:postfieldhooks}
+
+Information can be appended to the \field{name} in the glossary for
+a particular category using the \pidx{postnamehook}, which is given
+by the command:
+\nosecformatdef{glsxtrpostnamecategory}
+The current entry's label can be referenced with:
+\nosecformatdef{glscurrententrylabel}
+For example, if the preferred glossary style doesn't include the
+\field{symbol} field, but you want the symbol displayed after the
+name for entries with the \field{category} field set to \code{symbol}:
+\begin{codeenv}
+\cmd{newcommand}\marg{\cmd{glsxtrpostnamesymbol}}\marg{\cmd{space} 
+ (\gls{glsentrysymbol}\marg{\gls{glscurrententrylabel}})}
+\end{codeenv}
+There's a convenient shortcut:
+\nosecformatdef{glsdefpostname}
+which defines \gls{glsxtrpostnamecategory} to \meta{definition}
+(using \gls{csdef}). There's also a more general purpose \idx{postnamehook} 
+used regardless of the category:
+\nosecformatdef{glsextrapostnamehook}
+
+The \idx{postnamehook} is placed inside the formatting command used
+for the \field{name} field in the glossary. It's only present in the
+glossary (see \sectionref{sec:printgloss}) or stand-alone entries
+(see \sectionref{sec:standalone}).
+
+There is a similar \pidx{postdescriptionhook}. For a particular category,
+the hook is given by:
+\nosecformatdef{glsxtrpostdesccategory}
+There are some categories that have empty hooks already defined,
+such as
+\nosecformatdef{glsxtrpostdescgeneral}
+These will need \csfmt{renewcommand} rather than \csfmt{newcommand}.
+Again there's a shortcut command provided:
+\nosecformatdef{glsdefpostdesc}
+which just uses \gls{csdef}, so there's no check if the command is
+already defined.
+As with the \idx{postnamehook}, the entry's label can be accessed
+with \gls{glscurrententrylabel}.
+
+Punctuation (such as a \idx{full-stop} or comma) can automatically be 
+appended to the description in the
+glossary with the \styopt{postpunc} option.  (Note that the
+unstarred form of \gls{longnewglossaryentry} interferes with this
+option. Use the starred form \gls{longnewglossaryentry*} instead.)
+The post-description punctuation (if set) is placed after the
+\glslink{postdescriptionhook}{post-description category hook} (if
+provided). Both the post-description category hook and the
+post-description punctuation are implemented by
+\nosecformatdef{glspostdescription}
+The \sty{glossaries-extra-stylemods}
+package (which can be loaded with the \styopt{stylemods} option)
+patches the predefined styles provided with the base
+\sty{glossaries} package to ensure that the standard styles all use
+\gls{glspostdescription}.
+
+
+\chapter{Problematic Areas}
+\label{sec:problems}
+
+There are some places where the use of commands like \gls{gls} can
+cause problems. Common issues are listed below, with workarounds provided.
+
+\section{Headings and Captions}
+\label{sec:headings}
+
+The arguments of sectioning commands (such as \gls{chapter} or
+\gls{section}) and of captions (\gls{caption}) are
+\pidxpl{moving-argument}. The text is not only displayed at the
+point in the document where the command occurs, but may also be
+copied to the \gls{toc} or list of figures etc.
+Additionally, depending on the page style, the section argument may
+also be reproduced in the page header. This repeated use of the same
+material can cause complications, in particular it can prematurely
+triggering the \idx{firstuseflag} switch and cause unwanted
+indexing.
+
+If the content appears in the page header and the page
+styles converts headers to upper case, this can also cause a
+problem. However, if you make sure you have \sty{glossaries} v4.50+,
+\sty{glossaries-extra} v1.49+ and \sty{mfirstuc} v2.08+ with a
+recent \TeX\ distribution, most of the case-changing problems should
+now no longer occur.
+
+Here's an example that doesn't cause an error (because there's not
+enough text to trigger a page break) but does cause unexpected output:
+\begin{codeenv}
+\cmd{documentclass}\marg{book}
+\strut
+\cmd{usepackage}\marg{glossaries-extra}
+\strut
+\gls{setabbreviationstyle}\marg{\abbrstyle{long-short-sc}}
+\gls{newabbreviation}\marg{html}\marg{html}\marg{hypertext markup language}
+\strut
+\cmd{begin}\marg{document}
+\gls{tableofcontents}
+\gls{chapter}\marg{A chapter about \gls{gls}\marg{html}}
+Reference \gls{gls}\marg{html}.
+\cmd{end}\marg{document}
+\end{codeenv}
+On the first \LaTeX\ run, the \gls{toc} is empty as the
+associated \ext{toc} file didn't exist at the start. The chapter title
+appears as \qt{A chapter about hypertext markup language
+(\textsc{html})}, which shows the \idx{firstuse} of
+\code{\gls{gls}\marg{html}}. The \ext{toc} file (which was created
+but not read by \gls{tableofcontents}) now contains:
+\begin{codeenv}
+\cmd{contentsline} \marg{chapter}\marg{\cmd{numberline} \marg{1}A chapter about \gls{gls} \marg{html}}\marg{3}
+\end{codeenv}
+This means that on the next \LaTeX\ run, the \gls{toc} now
+includes \code{\gls{gls}\marg{html}}. Since the \gls{toc}
+occurs at the start of the document, this is now the \idx{firstuse}
+of \code{html}, so the full form is shown in the \gls{toc},
+but the chapter title is now \qt{A chapter about \textsc{html}}, which shows
+the subsequent use.
+
+The \sty{glossaries-extra} package provides some commands that are
+designed for use in section or caption titles. These include:
+\nosecformatdef{glsfmtshort}
+which shows the short form of an abbreviation,
+\nosecformatdef{glsfmtlong}
+which shows the long form of an abbreviation,
+\nosecformatdef{glsfmtfull}
+which shows the full form of an abbreviation, 
+\nosecformatdef{glsfmtname}
+which shows the entry's name, 
+\nosecformatdef{glsfmtfirst}
+which shows the entry's \field{first} field, and
+\nosecformatdef{glsfmttext}
+which shows the entry's \field{text} field.
+
+Here's a modified version of the above:
+\begin{codeenv}
+\cmd{documentclass}\marg{book}
+\strut
+\cmd{usepackage}\marg{lipsum}\comment{provides \cmd{lipsum}}
+\cmd{usepackage}\marg{glossaries-extra}
+\strut
+\gls{setabbreviationstyle}\marg{\abbrstyle{long-short-sc}}
+\gls{newabbreviation}\marg{html}\marg{html}\marg{hypertext markup language}
+\strut
+\cmd{begin}\marg{document}
+\gls{tableofcontents}
+\gls{chapter}\marg{A chapter about \gls{glsfmtlong}\marg{html}}
+Reference \gls{gls}\marg{html}.
+\cmd{lipsum} \comment{dummy text}
+\cmd{end}\marg{document}
+\end{codeenv}
+This now shows the long form in the \gls{toc} and the
+chapter title. Since \gls{glsfmtlong} doesn't affect the
+\idx{firstuseflag}, the reference after the chapter title now shows
+the \idx{firstuse} full form. There's no longer an error with the
+page header on the second page, but it's not quite right as the
+case-change hasn't been applied, so the page heading appears as:
+\begin{result}
+4\hfill \emph{CHAPTER 1. A CHAPTER ABOUT hypertext markup language}
+\end{result} 
+This shouldn't occur any more, but if it does, it can be corrected by 
+setting the \catattr{headuc} attribute to \code{true}:
+\begin{codeenv}
+\gls{glssetcategoryattribute}\marg{abbreviation}\marg{headuc}\marg{true}
+\end{codeenv}
+This now makes the page header too long, but remember that you can
+use the optional argument of sectioning commands to provide a
+shorter form for both the page heading and \gls{toc}:
+\begin{codeenv}
+\gls{chapter}\oarg{A chapter about \gls{glsfmtshort}\marg{html}}\marg{A chapter about 
+\gls{glsfmtlong}\marg{html}}
+\end{codeenv}
+One final problem remains and it's due to the
+\abbrstyle{long-short-sc} abbreviation style which uses \gls{textsc}
+to display the short form in small capitals. The combination of
+italic and small capitals isn't supported with the default fonts and
+results in a font substitution. There's a similar problem in the 
+\gls{toc} which displays the chapter title in bold. There's 
+a warning at the end of the transcript:
+\begin{verbatim}
+Some font shapes were not available, defaults substituted.
+\end{verbatim}
+The conflict between bold and small capitals can be solved by
+switching to the T1 font encoding:
+\begin{codeenv}
+\cmd{usepackage}[T1]\marg{\sty[noindex=false]{fontenc}}
+\end{codeenv}
+The conflict between italic and small capitals can be solved with
+the \sty{slantsc} package. Another possibility is to redefine:
+\nosecformatdef{glsabbrvscfont}
+which is used by the \qt{sc} abbreviation styles:
+\begin{codeenv}
+\cmd{renewcommand}\marg{\gls{glsabbrvscfont}}[1]\marg{\comment{}
+ \gls{glsxtrifinmark}\marg{\gls{glsuppercase}\marg{\gls{param}1}}\marg{\gls{textsc}\marg{\gls{param}1}}\comment{}
+}
+\end{codeenv}
+This uses:
+\nosecformatdef{glsxtrifinmark}
+which expands to \meta{true} in headings and the \gls{toc},
+otherwise it expands to \meta{false}. This use of
+\gls{glsuppercase} replaces the need for the \catattr{headuc}
+attribute. Both \catattr{headuc} and the above redefinition of
+\gls{glsabbrvscfont} will cause the abbreviation to appear in
+\idx{uppercase} in the \gls{toc}. If you don't want this,
+you can defer making these modifications until after the 
+\gls{toc}. Alternatively, use:
+\nosecformatdef{glsxtrRevertTocMarks}
+which makes \gls{glsxtrifinmark} expand to \meta{false} in the 
+\gls{toc}.  For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{book}
+\strut
+\cmd{usepackage}[T1]\marg{fontenc}
+\cmd{usepackage}\marg{lipsum}
+\cmd{usepackage}\marg{glossaries-extra}
+\strut
+\cmd{renewcommand}\marg{\gls{glsabbrvscfont}}[1]\marg{\comment{}
+ \gls{glsxtrifinmark}\marg{\gls{glsuppercase}\marg{\gls{param}1}}\marg{\gls{textsc}{\gls{param}1}}\comment{}
+}
+\strut
+\gls{setabbreviationstyle}\marg{\abbrstyle{long-short-sc}}
+\gls{newabbreviation}\marg{html}\marg{html}\marg{hypertext markup language}
+\strut
+\cmd{begin}\marg{document}
+\gls{tableofcontents}
+\gls{chapter}\oarg{A chapter about \gls{glsfmtshort}\marg{html}}\marg{A chapter 
+about \gls{glsfmtlong}\marg{html}}
+Reference \gls{gls}\marg{html}.
+\cmd{lipsum} \comment{dummy text}
+\cmd{end}\marg{document}
+\end{codeenv}
+
+
+\section{Nesting}
+\label{sec:nested}
+
+Nesting refers to commands like \gls{gls} and \gls{glssymbol} being
+used in the \idx{link-text} of similar commands. This occurs if
+these commands are used in fields that form part of the
+\idx{link-text} or if they occur in the final \meta{insert}
+optional argument (which is included in the \idx{link-text}) or in the 
+\idx{postlinkhook} (which isn't included in the \idx{link-text} but
+is still problematic).
+
+The most serious problem is when the \idx{postlinkhook} includes one
+of these commands that references an entry with the same category
+(and therefore the same \idx{postlinkhook} code) as
+you can end up with an infinite loop. For example:
+\begin{codeenv}
+\gls{glsdefpostlink}\marg{symbol}\marg{ (\gls{glssymbol}\marg{\gls{glslabel}})}\comment{infinite loop!}\incorrect
+\end{codeenv}
+Instead, use \gls{glsentrysymbol}:
+\begin{codeenv}
+\gls{glsdefpostlink}\marg{symbol}\marg{ (\gls{glsentrysymbol}\marg{\gls{glslabel}})}\correct
+\end{codeenv}
+Better still, use commands like
+\gls{glsxtrpostlinkAddSymbolOnFirstUse} (see \sectionref{sec:postlinkhooks}).
+
+\section{Shortcut Commands or Active Characters}
+\label{sec:activeshortcuts}
+
+Some packages, such as \sty{babel}, provide shortcut commands or
+active characters that can be enabled through a particular setting. 
+It's best not to use these in entry definitions.
+Instead use the full command name. The main problem comes when the
+shortcuts aren't enabled until the start of the \envfmt{document}
+environment. For example, the \code{ngerman} language setting in
+\sty{babel} makes the double quote character (\idx{doublequoteactivechar})
+active and it becomes a shortcut for \gls{umlaut} (the umlaut accent
+command):
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}[ngerman]\marg{babel}
+\cmd{usepackage}\marg{glossaries-extra}
+\strut
+\gls{newabbreviation}\marg{rna}\marg{RNA}\marg{ribonukleins"aure}\incorrect
+\strut
+\cmd{begin}\marg{document}
+Explicit use: ribonukleins"aure.
+Reference: \gls{gls}\marg{rna}.
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces:
+\begin{result}
+Explicit use: ribonukleins\"aure. Reference: ribonukleins"aure (RNA).
+\end{result}
+This is because the double quote character still had its normal
+meaning when the \code{rna} entry was defined, so the
+\idx{doublequotechar} in the long form is an actual double quote
+character not a shortcut for \gls{umlaut}.
+
+Another problem occurs when you have a large file containing entry
+definitions that will be shared by multiple documents. If shortcut
+commands are used in the entry definitions then every document that
+uses those entries must ensure that the appropriate shortcut
+commands are set up before use. Also, when using \bibgls, it
+recognises commands like \gls{umlaut} but not \sty{babel}
+shorthands, so the sorting will be adversely affected if you simply
+use \idx{doublequoteactivechar} instead of \gls{umlaut}.
+
+For large files that are written once (with minor subsequent edits),
+but reused many times for multiple documents, it's better to use the
+actual command (that simply requires the appropriate package to be
+loaded, if applicable, without specific options to enable it).
+
+
+\section{Formatting Commands that Need Direct Access to the Text}
+\label{sec:expandedfmt}
+
+If you want to redefine any of the formatting commands
+\gls{glstextformat}, \gls{glsxtrregularfont} or
+\gls{glsxtrabbreviationfont}, remember that their argument isn't the
+actual text but consists of intermediary commands
+that determine the required text and any inner formatting, such as
+the formatting applied by abbreviation styles.
+
+With the \glsopt{hyperoutside} setting on, the outermost level
+will be the command to apply the hyperlink with \gls{glstextformat}
+(or the equivalent provided by \catattr{textformat}) 
+inside the hyperlink text. (If hyperlinks aren't enabled the outer
+command simply does the hyperlink text.)
+
+With \glsopt[false]{hyperoutside}, the outermost level will be
+\gls{glstextformat} (or equivalent) with the command that applies
+the hyperlink inside the formatting argument.
+
+The next level down sets up the abbreviation styles for the given
+category (if appropriate). If the entry isn't an abbreviation or is
+an abbreviation classified as regular then
+\gls{glsxtrregularfont} is applied to the command that governs how
+regular entries are formatted. Otherwise \gls{glsxtrabbreviationfont}
+is applied to the command that governs how abbreviations are
+formatted.
+
+Finally, there are tests applied to determine if this is the
+\idx{firstuse}, if the plural is required, if any case-changing is
+required, if the final optional argument has been given, or if a
+command such as \gls{glssymbol} has been used.  These tests
+determine which field to obtain the \idx{link-text} from. With
+abbreviations, any formatting required by the abbreviation style is
+finally performed.
+
+This makes it very difficult to apply a formatting command that
+needs direct access to the actual text that needs to be displayed.
+One possible method is to use:
+\nosecformatdef{GlsXtrExpandedFmt}
+which first (protected) fully expands \meta{text} and then performs
+\meta{cs}\margm{expanded text} where \meta{cs} is a control
+sequence. For example, the \isty{soul} package provides the command
+\gls{ul} to underline text, but it needs to be able to parse its
+argument to work. If I simply try to change the standard
+\gls{underline} to \gls{ul} in the earlier example from
+\sectionref{sec:glsformats}:
+\begin{codeenv}
+\cmd{renewcommand}\marg{\gls{glsxtrregularfont}}[1]\marg{\cmd{ul}\marg{\gls{param}1}}
+\end{codeenv}
+then this causes the error:
+\begin{verbatim}
+! Package soul Error: Reconstruction failed.
+\end{verbatim}
+Instead I need:
+\begin{codeenv}
+\cmd{renewcommand}\marg{\gls{glsxtrregularfont}}[1]\marg{\gls{GlsXtrExpandedFmt}\cmd{ul}\marg{\gls{param}1}}
+\end{codeenv}
+\emph{and also} \gls{ding} now needs protection:
+\begin{codeenv}
+\gls{newglossaryentry}\marg{fleuron}\comment{label}
+\marg{
+  \field{name} = \marg{fleuron},
+  \field{symbol} = \marg{\gls{protect}\gls{ding}\marg{167}},
+  \field{category} = \marg{ornament},
+  \field{description} = \marg{typographic ornament}
+}
+\end{codeenv}
+
+\section{Buffering Changes to the First Use Flag}
+\label{sec:buffering}
+
+The \sty{soul} commands, described above, also have problems if the
+\idx{firstuseflag} is switched off within the argument. This can be
+demonstrated with the following:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\cmd{usepackage}\marg{soul}
+\cmd{usepackage}\marg{glossaries-extra}
+\gls{newabbreviation}\marg{ssl}\marg{SSL}\marg{Secure Sockets Layer}
+\cmd{begin}\marg{document}
+\cmd{ul}\marg{Some text about \gls{gls}\marg{ssl}.}
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces the somewhat confusing error message:
+\begin{verbatim}
+Glossary entry `{ssl}' has not been defined.
+\end{verbatim}
+Enclosing \code{\gls{gls}\marg{ssl}} inside the argument of \csfmt{mbox} 
+changes the error message to:
+\begin{verbatim}
+! Package soul Error: Reconstruction failed.
+\end{verbatim}
+The only way to avoid an error is to switch on the \gls{glsunset}
+buffering, which modifies the internal command that normally changes
+the \idx{firstuseflag}. Instead, the entry label is simply stored in
+an internal list. The buffering is switched on with:
+\nosecformatdef{GlsXtrStartUnsetBuffering}
+The unstarred form of this command may result in multiple
+occurrences of an entry in the buffer's internal list. The starred form,
+which only adds an entry's label to the list if not already present,
+is better if the list needs to contain unique items.
+
+The current buffer can be iterated over using;
+\nosecformatdef{GlsXtrForUnsetBufferedList}
+where \meta{cs} is a command that takes a single argument (the
+entry's label). Finally, entries in the buffer can be unset and the
+buffer cleared with:
+\nosecformatdef{GlsXtrStopUnsetBuffering}
+
+The above example will work if it's changed to:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\cmd{usepackage}\marg{soul}
+\cmd{usepackage}\marg{glossaries-extra}
+\gls{newabbreviation}\marg{ssl}\marg{SSL}\marg{Secure Sockets Layer}
+\cmd{begin}\marg{document}
+\gls{GlsXtrStartUnsetBuffering}
+\cmd{ul}\marg{Some text about \cmd{mbox}\marg{\gls{gls}\marg{ssl}}.}
+\gls{GlsXtrStopUnsetBuffering}
+\cmd{end}\marg{document}
+\end{codeenv}
+Note the need for \csfmt{mbox}, which can cause a problem with
+line-breaking. Another problem is that if the entry is referenced
+multiple times within the same buffer, each use of \gls{gls} (or its
+\idxpl{variant}) will be treated as the \idx{firstuse}.
+
+Another workaround is to use \glsopt{textformat} with a command that
+uses \gls{GlsXtrExpandedFmt} (see \sectionref{sec:expandedfmt}). For
+example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\cmd{usepackage}\marg{soul}
+\cmd{usepackage}\marg{glossaries-extra}
+\strut
+\cmd{newrobustcmd}\marg{\cmd{gul}}[1]\marg{\comment{}
+  \marg{\comment{}
+   \cmd{def}\gls{glsxtrabbreviationfont}\gls{param}\gls{param}1\marg{\gls{GlsXtrExpandedFmt}\marg{\cmd{ul}}\marg{\gls{param}\gls{param}1}}\comment{}
+   \cmd{def}\gls{glsxtrregularfont}\gls{param}\gls{param}1\marg{\gls{GlsXtrExpandedFmt}\marg{\cmd{ul}}\marg{\gls{param}\gls{param}1}}\comment{}
+   \gls{param}1\comment{}
+  }%
+}
+\strut
+\gls{newabbreviation}\marg{ssl}\marg{SSL}\marg{Secure Sockets Layer}
+\cmd{begin}\marg{document}
+\cmd{ul}\marg{Some text about }\gls{gls}\oarg{\glsopt{textformat}=gul}\marg{ssl}.
+\cmd{end}\marg{document}
+\end{codeenv}
+
+\chapter{Incorporating \bibgls}
+\label{sec:bib2gls}
+
+So far, the examples haven't actually used \bibgls, so what does it
+actually do? Recall the example document in \sectionref{sec:group},
+reproduced below:
+\begin{codeenv}
+\cmd{documentclass}\marg{scrartcl}
+\cmd{usepackage}\marg{mhchem}
+\cmd{usepackage}[\styopt[dot]{postpunc},\comment{full stop after description}
+ \styopt{nostyles},\comment{don't load default style packages}
+ \styopt[tree]{stylemods}\comment{load glossary-tree.sty and patch styles}
+]\marg{glossaries-extra}
+\strut
+\gls{glsaddstoragekey}\marg{group}\marg{}\marg{\cmd{grouplabel}}
+\gls{glsxtrsetgrouptitle}\marg{greek}\marg{Greek Symbols}
+\strut
+\gls{newglossaryentry}\marg{area}
+\marg{
+   \field{name} = \marg{\gls{ensuremath}\marg{A}},
+   \field{description} = \marg{area},
+   \field{group} = \marg{A}
+}
+\strut
+\gls{newglossaryentry}\marg{amethyst}
+\marg{
+   \field{name} = \marg{amethyst},
+   \field{description} = \marg{a purple type of quartz},
+   \field{symbol} = \marg{\gls{ce}\marg{SiO2}},
+   \field{group} = \marg{A}
+}
+\strut
+\gls{newglossaryentry}\marg{circumference}
+\marg{
+   \field{name} = \marg{\gls{ensuremath}\marg{C}},
+   \field{description} = \marg{circumference},
+   \field{group} = \marg{C}
+}
+\strut
+\gls{newglossaryentry}\marg{duck}
+\marg{
+   \field{name} = \marg{duck},
+   \field{description} = \marg{a waterbird with webbed feet},
+   \field{group} = \marg{D}
+}
+\strut
+\gls{newglossaryentry}\marg{goose}
+\marg{
+   \field{name} = \marg{goose},
+   \field{description} = \marg{a large waterbird with a long neck, short legs,
+   webbed feet and a short broad bill},
+   \field{group} = \marg{G}
+}
+\strut
+\gls{newglossaryentry}\marg{radius}
+\marg{
+   \field{name} = \marg{\gls{ensuremath}\marg{r}},
+   \field{description} = \marg{radius},
+   \field{group} = \marg{R}
+}
+\strut
+\gls{newglossaryentry}\marg{pi}
+\marg{
+   \field{name} = \marg{\gls{ensuremath}\marg{\cmd{pi}}},
+   \field{description} = \marg{Archimedes' constant},
+   \field{group} = \marg{greek}
+}
+\strut
+\cmd{begin}\marg{document}
+\gls{printunsrtglossary}\oarg{\printglossopt[indexgroup]{style}}
+\cmd{end}\marg{document}
+\end{codeenv}
+The document preamble is quite cluttered. It could be tidied up by
+moving all the \gls{newglossaryentry} code into a separate file
+called, say, \filefmt{entries.tex}. The main document code can now
+be simplified to:
+\begin{codeenv}
+\cmd{documentclass}\marg{scrartcl}
+\cmd{usepackage}\marg{mhchem}
+\cmd{usepackage}[
+ \styopt{record},\comment{create \field{group} field and other stuff}
+ \styopt[dot]{postpunc},\comment{full stop after description}
+ \styopt{nostyles},\comment{don't load default style packages}
+ \styopt[tree]{stylemods}\comment{load glossary-tree.sty and patch styles}
+]\marg{glossaries-extra}
+\strut
+\gls{glsxtrsetgrouptitle}\marg{greek}\marg{Greek Symbols}
+\strut
+\gls[noindex=false]{input}\marg{entries}\comment{input entries.tex}
+\strut
+\cmd{begin}\marg{document}
+\gls{printunsrtglossary}\oarg{\printglossopt[indexgroup]{style}}
+\cmd{end}\marg{document}
+\end{codeenv}
+This is much neater, but maintaining the \filefmt{entries.tex} file is
+quite troublesome. Each entry must be defined in the correct order
+(that matches the desired listing in \gls{printunsrtglossary}) and
+only those entries that should appear in \gls{printunsrtglossary}
+should be defined (unless you want the laborious task of filtering
+them out, as in \sectionref{sec:printglossagain}). The \field{group}
+field needs setting for every entry, and if the \field{location}
+field also needs setting then the \filefmt{entries.tex} file will
+need to be modified every time new document edits cause a shift in
+the page numbers.
+
+With \bibgls, you write all the entry definitions (without the
+\field{group} or \field{location} fields set) in one or more
+\ext{bib} files. It's then \bibgls\ that creates the equivalent of
+the above \filefmt{entries.tex} file with all the entry definitions
+in the correct order and with the \field{group} or \field{location}
+fields set, if appropriate. To avoid accidentally overwriting an
+important document file, \bibgls\ uses the extension \ext{glstex}
+rather than \ext{tex} (but it's still a file containing \LaTeX\ code
+that defines the entries using \gls{newabbreviation} or
+\gls{newglossaryentry}\footnote{Actually it uses
+\gls{longnewglossaryentry*} to allow for multi-paragraph descriptions,
+and \gls{longnewglossaryentry*} and \gls{newabbreviation} are used
+indirectly through helper commands.}).
+
+Instead of using \gls{input} in the document preamble, you now need
+to use:
+\nosecformatdef{GlsXtrLoadResources}
+The \ext{glstex} file doesn't exist on the first \LaTeX\ run as
+\bibgls\ can only create the file once the \ext{aux} file has been
+created (since the \ext{aux} file contains all the information about
+which entries to select, the name of the \ext{bib} files where their
+definitions are stored and how to order them).
+So \gls{GlsXtrLoadResources} tests if the \ext{glstex} file exists
+before trying to input it. The \styopt{record} option is necessary
+because it:
+\begin{itemize}
+\item enables the \styopt[warn]{undefaction} option (the entries
+aren't defined on the first \LaTeX\ run);
+\item creates the \field{group} and \field{location} fields;
+\item disables the \gls{makeindex}\slash\gls{xindy} indexing and
+instead writes the indexing information as a record in the \ext{aux}
+file;
+\item loads \sty{glossaries-extra-bib2gls} (which provides
+extra commands specific to \bibgls).
+\end{itemize}
+Each time you use a command like \gls{gls} or \gls{glssymbol} (but
+not like \gls{glsentrysymbol}) in the document, a record is added to
+the \ext{aux} file containing the entry's label, the location (by
+default the page number) where the entry was used, and extra
+information including how to format the location. The default
+behaviour of \bibgls\ is to only select those entries that have
+records in the \ext{aux} file and any dependent entries.
+
+The example above doesn't include any references (commands like
+\gls{gls}), so \bibgls\ won't select any entries and the
+\ext{glstex} file won't contain any definitions. This means that the
+glossary will be empty. If you want all entries from the specified
+\ext{bib} files selected then you need to change the \csopt{selection}
+setting:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{\csopt[all]{selection}}
+\end{codeenv}
+This doesn't explicitly name any \ext{bib} file. The default is 
+\code{\gls{jobname}\ext{bib}} but you can change this with the
+\csopt{src} option. For example, if the entries are defined in
+\filefmt{entries.bib} (regular terms), \filefmt{symbols.bib}
+(symbols) and \filefmt{abbrvs.bib} (abbreviations) then you need 
+to use:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[entries,symbols,abbrvs]{src},\comment{bib files}
+  \csopt[all]{selection}\comment{select all entries}
+}
+\end{codeenv}
+
+You can have multiple instances of \gls{GlsXtrLoadResources}, but
+remember that each instance inputs a file containing definitions, and
+the glossary produced with \gls{printunsrtglossary} follows the same
+order. This means that you can have blocks within the same glossary
+that use different sorting methods. For example:
+\begin{codeenv}\renewcommand{\glslinkpresetkeys}{}%
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[symbols]{src},\comment{bib file}
+  \csopt[letter-case]{sort},\comment{sort according to character code}
+  \csopt[symbol]{category},\comment{set this as the \field{category} field}
+  \csopt[glssymbols]{group}\comment{set this as the \field{group} field}
+}
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[entries,abbrvs]{src},\comment{bib files}
+  \csopt[en-GB]{sort}
+}
+\end{codeenv}
+The first instance fetches the data from \filefmt{symbols.bib},
+sorts the entries according to the character code, sets the
+\field{category} field to \code{symbol}, and sets the
+\field{group} field to \code{glssymbols} for each definition
+written to the \ext{glstex} file. The \code{glssymbols} group label is recognised by
+the \sty{glossaries} package, and the title is obtained from the
+language-sensitive \gls{glssymbolsgroupname} command (\qt{Symbols}
+in English). So the glossary will start with a symbols group
+that contains all the entries selected from \filefmt{symbols.bib}.
+The rest of the glossary is obtained from the data selected from the
+\filefmt{entries.bib} and \filefmt{abbrvs.bib} file sorted according
+to the en-GB locale. These entries will have the \field{group} field
+set by the locale's sort rule.
+
+The document build now needs to include a call to \bibgls. For
+example, if the main document file is called \filefmt{myDoc.tex}
+then the build process is:
+\begin{verbatim}
+pdflatex myDoc
+bib2gls --group myDoc
+pdflatex myDoc
+\end{verbatim}
+Omit the \longarg{group} switch if you want the \field{group} field
+left empty, and replace \code{pdflatex} with \code{xelatex} etc, as
+appropriate.
+
+\section{The \extfmt{bib} Format}
+\label{sec:bibentries}
+
+The \ext{bib} files define entry data in the form:
+\begin{codeenv}
+\gls[noindex=false]{atchar}\meta{entry type}\marg{\meta{id},
+  \meta{field$_1$} = \margm{value},
+  \ldots
+  \meta{field$_n$} = \margm{value}
+}
+\end{codeenv}
+where \meta{id} is the entry's label. The most basic entry type is
+\atentry{entry}. For example:
+\begin{codeenv}
+\atentry{entry}\marg{goose,
+  \field{name} = \marg{goose},
+  \field{plural} = \marg{geese},
+  \field{description} = \marg{a large waterbird with a long neck, short legs,
+   webbed feet and a short broad bill}
+}
+\end{codeenv}
+This is analogous to:
+\begin{codeenv}
+\gls{newglossaryentry}\marg{goose}
+\marg{
+  \field{name} = \marg{goose},
+  \field{plural} = \marg{geese},
+  \field{description} = \marg{a large waterbird with a long neck, short legs,
+   webbed feet and a short broad bill}
+}
+\end{codeenv}
+You can use any of the defined keys, such as \field{symbol}:
+\begin{codeenv}
+\atentry{entry}\marg{amethyst,
+  \field{name} = \marg{amethyst},
+  \field{description} = \marg{a purple type of quartz},
+  \field{symbol} = \marg{\gls{ce}\marg{SiO2}}
+}
+\end{codeenv}
+but avoid using internal fields. If you define custom keys in your
+document, make sure you define them all before the first instance of
+\gls{GlsXtrLoadResources} as all the recognised keys are written to
+the \ext{aux} file for \bibgls\ to detect. Any unrecognised fields
+in the \ext{bib} file are ignored.
+
+\begin{important}
+The \atentry{entry} type is intended mainly for words or phrases,
+optionally with an associated \field{symbol}. If
+the \field{name} field contains symbols or other non-alphabetic
+content (such as punctuation that shouldn't be ignored by the sort
+comparator) see \sectionref{sec:@symbol}.
+\end{important}
+
+\subsection{Defining Terms with Optional Descriptions}
+\label{sec:@index}
+
+The \atentry{entry} type requires the \field{description} field and
+either the \field{name} or \field{parent} field. There's a similar
+command that doesn't have any required fields: \atentry{index}. If
+the \field{name} isn't supplied, it's assumed to be the same as the
+\meta{id}. If the \field{description} isn't supplied it's assumed to
+be empty. This type behaves like \atentry{entry}, but it sets the
+default \field{category} to \code{index}.  So:
+\begin{codeenv}
+\atentry{index}\marg{duck}
+\end{codeenv}
+is analogous to:
+\begin{codeenv}
+\gls{newglossaryentry}\marg{duck}
+\marg{
+ \field{name}=\marg{duck},
+ \field{description}=\marg{},
+ \field{category}=\marg{index}
+}
+\end{codeenv}
+and
+\begin{codeenv}
+\atentry{index}\marg{goose,
+  \field{plural} = \marg{geese}
+}
+\end{codeenv}
+is analogous to:
+\begin{codeenv}
+\gls{newglossaryentry}\marg{goose}
+\marg{
+ \field{name}=\marg{goose},
+ \field{plural}=\marg{geese},
+ \field{description}=\marg{},
+ \field{category}=\marg{index}
+}
+\end{codeenv}
+If the name contains content that can't be used in a label (see
+\sectionref{sec:labels}), then
+you need the \field{name} field. For example:
+\begin{codeenv}
+\atentry{index}\marg{chateau,
+  \field{name} = \marg{ch\gls[noindex=false]{cs.circum}ateau},
+  \field{plural} = \marg{ch\gls{cs.circum}ateaux}
+}
+\end{codeenv}
+is analogous to:
+\begin{codeenv}
+\gls{newglossaryentry}\marg{chateau}
+\marg{
+ \field{name}=\marg{ch\gls{cs.circum}ateau},
+ \field{plural}=\marg{ch\gls{cs.circum}ateaux},
+ \field{description}=\marg{},
+ \field{category}=\marg{index}
+}
+\end{codeenv}
+There's a similar entry type \atentry{indexplural} that sets the
+\field{name} field (if not provided) to the plural form, which is 
+obtained from the \field{plural} field, if set. Otherwise it's 
+obtained by appending the plural suffix (\qt{s}) to the \field{text} 
+field. If the \field{text} field isn't set it's obtained from the label. 
+The other difference is that it sets the default \field{category} field to
+\code{indexplural}.  For example, 
+\begin{codeenv}
+\atentry{indexplural}\marg{duck}
+\end{codeenv}
+is analogous to:
+\begin{codeenv}
+\gls{newglossaryentry}\marg{duck}
+\marg{
+ \field{name}=\marg{ducks},
+ \field{text}=\marg{duck},
+ \field{description}=\marg{},
+ \field{category}=\marg{indexplural}
+}
+\end{codeenv}
+and
+\begin{codeenv}
+\atentry{indexplural}\marg{goose,
+  \field{plural} = \marg{geese}
+}
+\end{codeenv}
+is analogous to:
+\begin{codeenv}
+\gls{newglossaryentry}\marg{goose}
+\marg{
+ \field{name}=\marg{geese},
+ \field{text}=\marg{goose},
+ \field{plural}=\marg{geese},
+ \field{description}=\marg{},
+ \field{category}=\marg{indexplural}
+}
+\end{codeenv}
+
+The \csopt[firstuc]{name-case-change} resource option converts the
+first letter of the \field{name} field to \idx{uppercase}, so with
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{\csopt[firstuc]{name-case-change}}
+\end{codeenv}
+then 
+\begin{codeenv}
+\atentry{index}\marg{duck}
+\end{codeenv}
+is now analogous to:
+\begin{codeenv}
+\gls{newglossaryentry}\marg{duck}
+\marg{
+ \field{name}=\marg{Duck},
+ \field{text}=\marg{duck},
+ \field{description}=\marg{},
+ \field{category}=\marg{index}
+}
+\end{codeenv}
+and
+\begin{codeenv}
+\atentry{indexplural}\marg{goose,
+  \field{plural} = \marg{geese}
+}
+\end{codeenv}
+is now analogous to:
+\begin{codeenv}
+\gls{newglossaryentry}\marg{goose}
+\marg{
+ \field{name}=\marg{Geese},
+ \field{text}=\marg{goose},
+ \field{plural}=\marg{geese},
+ \field{description}=\marg{},
+ \field{category}=\marg{indexplural}
+}
+\end{codeenv}
+and
+\begin{codeenv}
+\atentry{entry}\marg{amethyst,
+  \field{name} = \marg{amethyst},
+  \field{description} = \marg{a purple type of quartz},
+  \field{symbol} = \marg{\gls{ce}\marg{SiO2}}
+}
+\end{codeenv}
+is now analogous to:
+\begin{codeenv}
+\gls{newglossaryentry}\marg{amethyst}
+\marg{
+ \field{name}=\marg{Amethyst},
+ \field{text}=\marg{amethyst},
+ \field{description}=\marg{a purple type of quartz},
+ \field{symbol} = \marg{\gls{ce}\marg{SiO2}}
+}
+\end{codeenv}
+
+\subsection{Defining Abbreviations}
+\label{sec:@abbreviation}
+
+Abbreviations can be defined with \atentry{abbreviation}. For
+example:
+\begin{codeenv}
+\atentry{abbreviation}\marg{html,
+  \field{short} = \marg{HTML},
+  \field{long} = \marg{hypertext markup language}
+}
+\end{codeenv}
+which is analogous to:
+\begin{codeenv}
+\gls{newabbreviation}\marg{html}\marg{HTML}\marg{hypertext markup language}
+\end{codeenv}
+(which sets the \field{category} to \code{abbreviation}).
+Alternatively, you can use \atentry{acronym}. For example:
+\begin{codeenv}
+\atentry{acronym}\marg{html,
+  \field{short} = \marg{HTML},
+  \field{long} = \marg{hypertext markup language}
+}
+\end{codeenv}
+which is analogous to:
+\begin{codeenv}
+\gls{newacronym}\marg{html}\marg{HTML}\marg{hypertext markup language}
+\end{codeenv}
+(which sets the \field{category} to \code{acronym}).
+If you decide to use one of the abbreviation styles that formats the
+\field{short} field with \gls{textsc} (for example,
+\abbrstyle{long-short-sc}) then the \field{short} value needs to be
+in \idx{lowercase}. (Remember that \gls{textsc} only changes
+\idx{lowercase} characters to small capitals. For example,
+\code{\gls{textsc}\marg{html}} is displayed as \textsc{html} but
+\code{\gls{textsc}\marg{HTML}} is displayed as \textsc{HTML}.)
+This can easily be accomplished with the
+\csopt{short-case-change} resource option. For example:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{\csopt[lc]{short-case-change}}
+\end{codeenv}
+Recall from \sectionref{sec:abbreviations} that the abbreviation
+style must be set \emph{before} the abbreviations are defined. This
+means that if you want to use \gls{setabbreviationstyle} it must
+come before \gls{GlsXtrLoadResources}.
+
+The default sort value used by \bibgls\ is usually taken from the
+\field{name} field. This typically isn't supplied with abbreviations.
+The actual value depends on the abbreviation style, which \bibgls\
+doesn't know about, so \bibgls\ uses the \field{short}
+field instead for abbreviations. If you want to change this, for
+example, if you are using the \abbrstyle{long-noshort-desc} style,
+then use the \csopt{abbreviation-sort-fallback} option. For example:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{\csopt[long]{abbreviation-sort-fallback}}
+\end{codeenv}
+
+\subsection{Defining Symbols}
+\label{sec:@symbol}
+
+If the \field{name} field contains the symbol (rather than having a
+textual \field{name} and the symbol in \field{symbol}) then the
+notation can be defined with \atentry{symbol}. For example:
+\begin{codeenv}
+\atentry{symbol}\marg{pi,
+  \field{name} = \marg{\gls{ensuremath}\marg{\cmd{pi}}},
+  \field{description} = \marg{Archimedes' constant}
+}
+\end{codeenv}
+This behaves much like \atentry{entry} but there are two significant
+differences: the \field{category} defaults to \code{symbol} and the
+default value used when sorting is the label not the value of the \field{name}
+field. So in this case, the sort value defaults to \code{pi}.
+Therefore the above is analogous to:
+\begin{codeenv}
+\gls{newglossaryentry}\marg{pi}
+\marg{
+  \field{name} = \marg{\gls{ensuremath}\marg{\cmd{pi}}},
+  \field{description} = \marg{Archimedes' constant},
+  \field{category} = \marg{symbol},
+  \field{sort} = \marg{pi}
+}
+\end{codeenv}
+This is essentially like \gls{glsxtrnewsymbol} but it doesn't set
+the \field{type} field.
+
+You can change the default value used for sorting symbols with the
+\csopt{symbol-sort-fallback} option. For example, to sort symbols according
+to the \field{name} field:
+\begin{codeenv}\renewcommand{\glslinkpresetkeys}{}%
+\gls{GlsXtrLoadResources}\oarg{
+ \csopt[name]{symbol-sort-fallback},
+ \csopt[none]{break-at}
+}
+\end{codeenv}
+This means that the sort value for the above example entry is now
+\code{\gls{ensuremath}\marg{\csfmt{pi}}}, which \bibgls's \TeX\
+interpreter converts to the Unicode symbol \hex{1D70B} (mathematical
+italic small pi, $\pi$). The interpreter used by \bibgls\ recognises
+all the standard mathematical Greek commands, and also the missing
+Greek commands \gls{omicron}, \gls{Alpha} etc (which are provided by
+\sty{glossaries-extra-bib2gls}). Using these commands rather than
+the Latin equivalent ensures correct sorting (\gls{omicron} comes
+between \csfmt{xi} and \csfmt{pi}, but \code{o} comes between \code{n}
+and \code{p}). See \sectionref{sec:texparserlib} (\TeX\ Parser
+Library) in the \bibgls\ user manual for further details.
+
+\begin{important}
+The default sort method is designed for words and phrases, so
+non-letters, such as punctuation characters, are discarded.
+If your sort values include symbols that need to be taken into
+account by the comparator, use \csopt[none]{break-at} to prevent
+them from being discarded.
+\end{important}
+
+Alternatively, you may prefer to sort symbols according to the
+description:
+\begin{codeenv}\renewcommand{\glslinkpresetkeys}{}%
+\gls{GlsXtrLoadResources}\oarg{\csopt[description]{symbol-sort-fallback}}
+\end{codeenv}
+
+There's a similar entry type \atentry{number}, which behaves much
+like \atentry{symbol} except that it sets the default
+\field{category} to \code{number}. It also follows the
+\csopt{symbol-sort-fallback} setting. For example, the \code{pi}
+entry could be defined as:
+\begin{codeenv}
+\atentry{symbol}\marg{pi,
+  \field{name} = \marg{\gls{ensuremath}\marg{\cmd{pi}}},
+  \field{description} = \marg{Archimedes' constant},
+  \fieldfmt{value} = \marg{3.141592654}
+}
+\end{codeenv}
+I've used a custom field here (\fieldfmt{value}) that \bibgls\ will
+ignore by default. I can instruct \bibgls\ to convert this to a
+known field with \csopt{field-aliases}. For example:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{\csopt[value=user1]{field-aliases}}
+\end{codeenv}
+This makes \bibgls\ treat;
+\begin{codeenv}
+  \fieldfmt{value} = \marg{3.141592654}
+\end{codeenv}
+as though it had been:
+\begin{codeenv}
+  \fieldfmt{user1} = \marg{3.141592654}
+\end{codeenv}
+This can now be used in one of the hooks (described in
+\sectionref{sec:glsformats}). For example, the
+\idx{postdescriptionhook}:
+\begin{codeenv}\renewcommand{\glslinkpresetkeys}{}%
+\gls{glsdefpostdesc}\marg{number}\marg{\comment{check if \field{user1} field given:}
+  \gls{glsxtrifhasfield}\marg{\field{useri}}\marg{\gls{glscurrententrylabel}}
+  \marg{ (\gls{glscurrentfieldvalue})}
+  \marg{}\comment{not provided}
+}
+\end{codeenv}
+It can also be used if you want to order the entries numerically.
+For example:
+\begin{codeenv}\renewcommand{\glslinkpresetkeys}{}%
+\gls{GlsXtrLoadResources}\oarg{
+ \csopt[value=user1]{field-aliases},
+ \csopt[double]{sort},\comment{use double-precision numeric comparisons}
+ \csopt[user1]{sort-field}
+}
+\end{codeenv}
+This uses \csopt{sort-field} to set the field used for sorting. This
+affects all entry types.
+
+There are more examples in \sectionref{sec:examples} of the main
+\bibgls\ user manual.
+
+\section{Indexing}
+\label{sec:record}
+
+By default, \bibgls\ selects entries from the specified \ext{bib}
+files that have been directly indexed in the document or that are
+dependencies of selected entries. Indexing is performed through
+commands like \gls{gls} and \gls{glssymbol} (but not by commands
+like \gls{glsentrysymbol}). The \styopt{record} package option
+ensures that the indexing is done that matches the requirements of
+\bibgls\ (rather than the default \gls{makeindex} syntax).
+
+Each instance of \gls{gls}, \gls{glssymbol} etc writes a
+\pidx{record} to the \ext{aux} file, that includes the entry's
+label, the location in the document where the record was triggered
+and the associated format to encapsulate the location. For example,
+if \code{\gls{gls}\marg{duck}} appears on page~3, the record label
+is \code{duck}, the location is~3 and the format is the default 
+\gls{glsnumberformat}.
+
+The format can be changed with the \glsopt{format} key. For example:
+\begin{codeenv}
+\gls{gls}\oarg{\glsopt{format}=hyperbf}\marg{duck}
+\end{codeenv}
+This sets the format to \code{hyperbf}, which makes a bold
+hyperlink, if \sty{hyperref} has been loaded, otherwise it just uses
+\gls{textbf}. The value of the \glsopt{format} option should be the
+name (without a leading backslash) of a text-block command that
+takes a single argument (the location to be formatted). The
+\sty{glossaries} package provides some commands like \gls{hyperbf}
+that may be used to ensure a hyperlink (if supported). The basic
+command is:
+\nosecformatdef{glshypernumber}
+which provides the hyperlink (if enabled) otherwise it just does its
+argument. So, if you want, for example, an underlined hyperlink:
+\begin{codeenv}
+\cmd{newcommand}\marg{\cmd{hyperul}}[1]\marg{\gls[noindex=false]{underline}\marg{\gls{glshypernumber}\marg{\gls{param}1}}}
+\end{codeenv}
+Now you can use \glsopt[hyperul]{format}.
+
+There's a special command \gls{glsignore} that ignores its argument.
+With \gls{makeindex} and \gls{xindy}, this can lead to spurious
+commas in the \idx{locationlist}, because the location is still
+included in the list, even though the location itself isn't
+displayed (since it's discarded by \gls{glsignore}). However, \bibgls\
+recognises \glsopt[glsignore]{format} as a special \idx{ignoredrecord}. This
+indicates that \bibgls\ should select that particular entry but not
+include that record in the \idx{locationlist}.
+
+If a selected entry depends on another entry that hasn't been
+indexed, for example, a parent entry, then the dependent entry will
+automatically be selected as well, by default. The dependent entry
+won't have a \idx{locationlist} if it hasn't been indexed anywhere.
+If you don't want the \idxpl{locationlist} to appear in a particular
+glossary, use \printglossopt{nonumberlist} in the optional argument
+of \gls{printunsrtglossary}.
+
+If you want to index an entry without actually displaying any text,
+you can use:
+\nosecformatdef{glsadd}
+where \meta{label} is the entry's label.  The \glsaddopt{format} key
+is again available in \meta{options}. For example:
+\begin{codeenv}
+\cmd{renewcommand}\marg{\gls{glsextrapostnamehook}}[1]\marg{\comment
+  \gls{glsadd}\oarg{\glsaddopt{format}=hyperbf}\marg{\gls{param}1}\comment{}
+}
+\end{codeenv}
+This automatically indexes the given entry in the
+\idx{postnamehook}. This is redundant if you only have a single
+glossary, but may be useful if the entry is repeated in a later
+list. Alternatively, if you are using a dual entry type (see
+\sectionref{sec:dualentry} in the main \bibgls\ user manual), the
+hook could check for the existence of the dual label (identified by
+the \csopt{dual-field} resource option) and use that instead. For
+example:
+\begin{codeenv}\renewcommand{\glslinkpresetkeys}{}%
+\cmd{renewcommand}\marg{\gls{glsextrapostnamehook}}[1]\marg{\comment
+  \gls{glsxtrifhasfield}\marg{\gls{GlsXtrDualField}}\marg{\gls{param}1}
+  \marg{\comment{}
+    \gls{glsadd}\oarg{\glsaddopt{format}=hyperbf}\marg{\gls{glscurrentfieldvalue}}\comment{}
+  }\comment{}
+  \marg{}\comment{no dual}
+}
+\end{codeenv}
+
+If you want to index multiple entries at the same time with the same
+set of options, you can use:
+\nosecformatdef{glsaddeach}
+This just iterates through the comma-separated list of labels and
+performs \gls{glsadd}\oargm{options}\margm{label} for each label in
+\meta{label list}. For example, to ensure that \bibgls\ selects the
+entries with the labels \code{duck}, \code{goose} and \code{parrot},
+even if they aren't referenced in the document:
+\begin{codeenv}
+\gls{glsaddeach}\oarg{\glsaddopt[glsignore]{format}}\marg{duck,goose,parrot}
+\end{codeenv}
+To select all entries, regardless of whether or not they have been
+indexed, use the \csopt[all]{selection} resource option. There are
+other selection criteria. See the main \bibgls\ user manual for
+further details.
+
+\section{Aliasing Fields and Entry Types}
+\label{sec:resourcealias}
+
+In \sectionref{sec:abbrvtrans}, the \field{user1} key was used to
+store a translation:
+\begin{codeenv}
+\gls{newabbreviation}\oarg{\field{user1}=\marg{ribonucleic acid}}
+ \marg{rna}\marg{RNA}\marg{ribonukleins\gls{umlaut}aure}
+\end{codeenv}
+You can also use the generic user fields in \ext{bib} files, but
+a more flexible approach is to use a semantic naming scheme in the
+\ext{bib} file and use resource aliasing to convert these custom
+field names into recognised keys. For example, the above
+abbreviation could be written in the \ext{bib} file as:
+\begin{codeenv}
+\atentry{abbreviation}\marg{rna,
+  \field{short} = \marg{RNA},
+  \field{long} = \marg{ribonukleins\gls{umlaut}aure},
+  \fieldfmt{translation} = \marg{ribonucleic acid}
+}
+\end{codeenv}
+The custom \fieldfmt{translation} field will be ignored by \bibgls,
+unless it's first defined in the document or aliased in the resource
+options:
+\begin{codeenv}\renewcommand{\glslinkpresetkeys}{}%
+\gls{GlsXtrLoadResources}\oarg{
+ \csopt[abbrvs]{src},\comment{entries defined in abbrvs.bib}
+ \comment{treat \fieldfmt{translation} as though it's \field{user1}:}
+ \csopt[translation=user1]{field-aliases}
+}
+\end{codeenv}
+This makes \bibgls\ behave as though the entry was defined in the
+\bibgls\ file as:
+\begin{codeenv}
+\atentry{abbreviation}\marg{rna,
+  \field{short} = \marg{RNA},
+  \field{long} = \marg{ribonukleins\gls{umlaut}aure},
+  \field{user1} = \marg{ribonucleic acid}
+}
+\end{codeenv}
+The definition is now the same as the above example from
+\sectionref{sec:abbrvtrans}. The \ext{bib} entry type can also be
+aliased. Here's a modified version:
+\begin{codeenv}
+\atentryfmt{foreignabbreviation}\marg{rna,
+  \field{short} = \marg{RNA},
+  \fieldfmt{nativelong} = \marg{ribonukleins\gls{umlaut}aure},
+  \fieldfmt{foreignlong} = \marg{ribonucleic acid}
+}
+\end{codeenv}
+and here are the aliases:
+\begin{codeenv}\renewcommand{\glslinkpresetkeys}{}%
+\gls{GlsXtrLoadResources}\oarg{
+ \csopt[abbrvs]{src},\comment{entries defined in abbrvs.bib}
+ \comment{treat \atentryfmt{foreignabbreviation} as though it's \atentry{abbreviation}:}
+ \csopt[foreignabbreviation=abbreviation]{entry-type-aliases},
+ \csopt[nativelong=long,foreignlong=user1]{field-aliases}
+}
+\end{codeenv}
+This has the same result, but suppose another document is in English
+rather than German:
+\begin{codeenv}\renewcommand{\glslinkpresetkeys}{}%
+\gls{GlsXtrLoadResources}\oarg{
+ \csopt[abbrvs]{src},\comment{entries defined in abbrvs.bib}
+ \csopt[foreignabbreviation=abbreviation]{entry-type-aliases},
+ \csopt[foreignlong=long]{field-aliases}
+}
+\end{codeenv}
+Now the \field{long} field is set to the English version, and the
+German long form is ignored.
+
+Here's another example where the native language is now English:
+\begin{codeenv}\renewcommand{\glslinkpresetkeys}{}%
+\atentry{abbreviation}\marg{iso,
+  \field{short} = \marg{ISO},
+  \field{long} = \marg{International Organization for Standardization}
+}
+\strut
+\atentryfmt{foreignabbreviation}\marg{abnt,
+  \field{short} = \marg{ABNT},
+  \fieldfmt{foreignlong} = \marg{Associa\gls{c}\marg{c}\gls{cs.tilde}ao Brasileria de Normas T\cs{acute}ecnicas},
+  \fieldfmt{nativelong} = \marg{Brazilian National Standards Organization},
+  \fieldfmt{language} = \marg{pt-BR}
+}
+\strut
+\atentryfmt{foreignabbreviation}\marg{din,
+  \field{short} = \marg{DIN},
+  \fieldfmt{foreignlong} = \marg{Deutsches Institut f\gls{umlaut}ur Normung e.V.},
+  \fieldfmt{nativelong} = \marg{German Institute for Standardization},
+  \fieldfmt{language} = \marg{de-DE-1996}
+}
+\end{codeenv}
+The aliasing is again identified in the resource options:
+\begin{codeenv}\renewcommand{\glslinkpresetkeys}{}%
+\gls{GlsXtrLoadResources}\oarg{
+ \csopt[abbrvs]{src},\comment{entries defined in abbrvs.bib}
+ \csopt[foreignabbreviation=abbreviation]{entry-type-aliases},
+ \csopt[nativelong=long,foreignlong=user1,language=user2]{field-aliases},
+ \csopt[same as original entry]{category}
+}
+\end{codeenv}
+This has an extra setting that assigns the \field{category} field to
+the original entry type (before any aliasing occurred) without the
+leading \gls{atchar} (and converted to \idx{lowercase}). This makes
+\bibgls\ act as though the abbreviations had actually been defined
+as:
+\begin{codeenv}
+\atentry{abbreviation}\marg{iso,
+  \field{short} = \marg{ISO},
+  \field{long} = \marg{International Organization for Standardization},
+  \field{category} = \marg{abbreviation}
+}
+\strut
+\atentryfmt{abbreviation}\marg{abnt,
+  \field{short} = \marg{ABNT},
+  \field{user1} = \marg{Associa\gls{c}\marg{c}\gls{cs.tilde}ao Brasileria de Normas T\cs{acute}ecnicas},
+  \field{long} = \marg{Brazilian National Standards Organization},
+  \field{user2} = \marg{pt-BR},
+  \field{category} = \marg{foreignabbreviation}
+}
+\strut
+\atentryfmt{abbreviation}\marg{din,
+  \field{short} = \marg{DIN},
+  \field{user1} = \marg{Deutsches Institut f\gls{umlaut}ur Normung e.V.},
+  \field{long} = \marg{German Institute for Standardization},
+  \field{user2} = \marg{de-1996},
+  \field{category} = \marg{foreignabbreviation}
+}
+\end{codeenv}
+which is now the same as an earlier example in
+\sectionref{sec:abbrvtrans}.
+If I don't need a particular custom field (such as
+\fieldfmt{language} in the above), I can simply omit it from the
+aliasing, but it's available for other documents if the need arises.
+Here's the complete document modified from
+\sectionref{sec:abbrvtrans}:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}[main=british,brazilian,ngerman]\marg{babel}
+\cmd{usepackage}[\styopt{record}]\marg{glossaries-extra}
+\strut
+\gls{setabbreviationstyle}\oarg{foreignabbreviation}\marg{long-short-user}
+\strut
+\gls{GlsXtrLoadResources}\oarg{
+ \csopt[abbrvs]{src},\comment{entries defined in abbrvs.bib}
+ \csopt[foreignabbreviation=abbreviation]{entry-type-aliases},
+ \csopt[nativelong=long,foreignlong=user1,language=user2]{field-aliases},
+ \csopt[same as original entry]{category}
+}
+\strut
+\cmd{renewcommand}*\marg{\gls{glsxtruserparen}}[2]\marg{\comment{}
+  \gls{glsxtrfullsep}\marg{\gls{param}2}\comment{}
+  \gls{glsxtrparen}
+  \marg{\gls{param}1\comment{}
+   \gls{ifglshasfield}\marg{\gls{glsxtruserfield}}\marg{\gls{param}2}\comment{}
+   \marg{, \gls{emph}\marg{\gls{GlsXtrForeignText}\marg{\gls{param}2}\marg{\gls{glscurrentfieldvalue}}}}\comment{}
+   \marg{}\comment{}
+  }\comment{}
+}
+\strut
+\cmd{begin}\marg{document}
+\gls{gls}\marg{abnt}, \gls{gls}\marg{din}.
+\cmd{end}\marg{document}
+\end{codeenv}
+
+Here's another example where field and entry aliasing can make the
+\ext{bib} data more flexible:
+\begin{codeenv}
+\atentryfmt{mineral}\marg{amethyst,
+ \fieldfmt{mineralname} = \marg{amethyst},
+ \fieldfmt{mineraldescription} = \marg{a purple type of quartz},
+ \fieldfmt{mineralformula} = \marg{\gls{ce}\marg{SiO2}}
+}
+\end{codeenv}
+For one document, I might use:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[entries]{src},\comment{data in entries.bib}
+  \csopt[mineral=symbol]{entry-type-aliases},
+  \csopt[
+    mineralformula=name,
+    mineralname=description
+  ]{field-aliases},
+ \csopt[same as original entry]{category}
+}
+\end{codeenv}
+This makes the \code{amethyst} entry behave as though it was defined
+as:
+\begin{codeenv}
+\atentry{symbol}\marg{amethyst,
+ \field{description} = \marg{amethyst},
+ \field{name} = \marg{\gls{ce}\marg{SiO2}},
+ \field{category} = \marg{mineral}
+}
+\end{codeenv}
+Another document might have:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[entries]{src},\comment{data in entries.bib}
+  \csopt[mineral=entry]{entry-type-aliases},
+  \csopt[
+    mineralformula=symbol,
+    mineralname=name
+    mineraldescription=description
+  ]{field-aliases},
+ \csopt[same as original entry]{category}
+}
+\end{codeenv}
+which now makes the \code{amethyst} entry behave as though it was defined
+as:
+\begin{codeenv}
+\atentry{entry}\marg{amethyst,
+ \field{name} = \marg{amethyst},
+ \field{description} = \marg{a purple type of quartz},
+ \field{symbol} = \marg{\gls{ce}\marg{SiO2}},
+ \field{category} = \marg{mineral}
+}
+\end{codeenv}
+
+See \sectionref{sec:examples} in the main \bibgls\ user manual for
+more examples of aliasing fields and entry types.
+
+\bibliographystyle{plain}
+\bibliography{bib2gls-cite}
+
+\printunsrtglossary*
+ [style=treegroup,title={Command Summary},nonumberlist]
+{%
+ \renewcommand*{\printunsrtglossaryentryprocesshook}[1]{%
+   \glsifcategory{#1}{command}{}{\printunsrtglossaryskipentry}%
+ }%
+ \glssetcategoryattribute{command}{glossdesc}{firstuc}%
+ \renewcommand*{\csfmtfont}[1]{\texttt{\color{cs}#1}}%
+ \renewcommand{\glstreenamefmt}{\texttt}%
+ \renewcommand{\glstreegroupheaderfmt}{\textbf}%
+ \renewcommand{\glstreesubitem}{\glspar\parindent=2em\hangindent2em}%
+ \renewcommand{\glstreepredesc}{\glsadd{\glscurrententrylabel}%
+   \nopagebreak\glstreesubitem}%
+ \glsdefpostname{command}{\glsentryuseri{\glscurrententrylabel}}%
+ \glsdefpostdesc{command}{.\nopagebreak\glstreesubitem
+  \Glsentryuserii{\glscurrententrylabel}.%
+  \glspar\medskip}%
+}
+
+\renewcommand*{\glstarget}[2]{%
+ \glsifcategory{#1}{command}{#2}%
+ {%
+   \glsifcategory{#1}{standalone}{#2}%
+   {\glsdohypertarget{\glolinkprefix#1}{#2}}%
+ }%
+}
+\renewcommand{\glstreeitem}{\par\parindent0pt}
+\renewcommand*{\glsxtrbookindexprelocation}[1]{%
+  \glsxtrifhasfield{location}{#1}%
+  {\enspace
+   \textcolor{lightgray}{\nolinebreak\cleaders\hbox to .5em{\hss.\hss}\hfill}%
+   \enspace}%
+  {}%
+}
+\renewcommand*{\printunsrtglossaryentryprocesshook}[1]{%
+  \glsxtriflabelinlist{\glscategory{#1}}{standalone,hierarchical,homograph}%
+  {\printunsrtglossaryskipentry}{}%
+}%
+\printunsrtglossary[style=bookindex,title=Index]
+\end{document}


Property changes on: trunk/Master/texmf-dist/source/support/bib2gls/bib2gls-begin.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/support/bib2gls/bib2gls-cite.bib
===================================================================
--- trunk/Master/texmf-dist/source/support/bib2gls/bib2gls-cite.bib	                        (rev 0)
+++ trunk/Master/texmf-dist/source/support/bib2gls/bib2gls-cite.bib	2025-01-04 20:45:53 UTC (rev 73299)
@@ -0,0 +1,164 @@
+% Encoding: UTF-8
+
+ at misc{glossaries,
+  author = "Nicola Talbot",
+  title  = "The \sty{glossaries} package",
+  note = {\url{https://ctan.org/pkg/glossaries}},
+  year = 2018
+}
+
+ at misc{glossaries-extra,
+  author = "Nicola Talbot",
+  title  = "The \sty{glossaries-extra} package",
+  note = {\url{https://ctan.org/pkg/glossaries-extra}},
+  year = 2018
+}
+
+ at misc{mfirstuc,
+  author = "Nicola Talbot",
+  title  = "The \sty{mfirstuc} package",
+  note = {\url{https://ctan.org/pkg/mfirstuc}},
+  year = 2017
+}
+
+ at misc{textcase,
+  author = "David Carlisle",
+  title  = "The \sty{textcase} package",
+  note = {\url{https://ctan.org/pkg/textcase}},
+  year = 2004
+}
+
+ at misc{tracklang,
+  author = "Nicola Talbot",
+  title  = "The \sty{tracklang} package",
+  note = {\url{https://ctan.org/pkg/tracklang}},
+  year = 2018
+}
+
+ at misc{accsupp,
+  author = "Heiko Oberdiek",
+  title  = "The \sty{accsupp} package",
+  note = {\url{https://ctan.org/pkg/accsupp}},
+  year = 2018
+}
+
+ at misc{tex.sx.2016,
+  title={Is there a program for managing glossary tags?},
+  note={\url{https://tex.stackexchange.com/questions/342544}},
+  key={TeX on StackExchange},
+  year=2016
+}
+
+ at misc{tex.sx.2013,
+  title={What controls the encoding of the {LaTeX} log file – and how to change it?},
+  note={\url{https://tex.stackexchange.com/questions/131238}},
+  key={TeX on StackExchange},
+  year=2013
+}
+
+ at misc{texparser,
+  author = "Nicola Talbot",
+  title={\code{texparserlib}: {Java} code for parsing {(La)TeX} files},
+  note={\url{https://github.com/nlct/texparser}},
+  year=2017
+}
+
+ at misc{collationkey,
+  author={Oracle},
+  title={Java {API}: \code{CollationKey} class},
+  note={\url{http://docs.oracle.com/javase/8/docs/api/java/text/CollationKey.html}},
+  year=2017
+}
+
+ at misc{pattern,
+  author={Oracle},
+  title={Java {API}: \code{Pattern} class},
+  note={\url{http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html}},
+  year=2017
+}
+
+ at misc{rulebasedcollator,
+  author={Oracle},
+  title={Java {API}: \code{RuleBasedCollator} class},
+  note={\url{http://docs.oracle.com/javase/8/docs/api/java/text/RuleBasedCollator.html}},
+  year=2017
+}
+
+ at misc{collator,
+  author={Oracle},
+  title={Java {API}: \code{Collator} class},
+  note={\url{http://docs.oracle.com/javase/8/docs/api/java/text/Collator.html}},
+  year=2017
+}
+
+ at misc{decimalformat,
+  author={Oracle},
+  title={Java {API}: \code{DecimalFormat} class},
+  note={\url{http://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html}},
+  year=2017
+}
+
+ at misc{simpledateformat,
+  author={Oracle},
+  title={Java {API}: \code{SimpleDateFormat} class},
+  note={\url{http://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html}},
+  year=2017
+}
+
+ at misc{javacldr,
+  author={Oracle},
+  title={Adoption of Unicode CLDR Data and the java.locale.providers
+System Property},
+  note={\url{https://docs.oracle.com/javase/8/docs/technotes/guides/intl/enhancements.8.html#cldr}},
+  year = 2018
+}
+
+ at misc{javaoptions,
+  author={Oracle},
+  title = {The JAVA\_TOOL\_OPTIONS Environment Variable},
+  note={\url{https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/envvars002.html}},
+  year = 2018
+}
+
+ at misc{gallery,
+  author = {Nicola Talbot},
+  title = {{Dickimaw Books} Gallery},
+  note = {\url{https://www.dickimaw-books.com/gallery/}},
+  year = 2019
+}
+
+ at misc{glossarystylesgallery,
+  author = {Nicola Talbot},
+  title = {Gallery (All Styles Provided by \sty{glossaries})},
+  note = {\url{https://www.dickimaw-books.com/gallery/glossaries-styles/}},
+  year = 2019
+}
+
+ at misc{buildglossaries,
+  author = {Nicola Talbot},
+  title = {Incorporating \idx{makeglossaries} or
+  \idx{makeglossaries-lite} or \bibgls\ into the document build},
+  note = {\url{https://www.dickimaw-books.com/latex/buildglossaries}},
+  year = 2018
+}
+
+ at inbook{iterationtips,
+ author    = "Nicola L. C. Talbot",
+ title     = "{\LaTeX} for Administrative Work",
+ publisher = "Dickimaw Books",
+ series    = "Dickimaw {\LaTeX} Series",
+ chapter   = "2.7.5",
+ volume    = 3,
+ isbn      = "978-1-909440-07-4",
+ address   = "Norfolk, UK",
+ year      = 2015,
+ note      = {\url{http://www.dickimaw-books.com/latex/admin/html/foreachtips.shtml}}
+}
+
+ at misc{tugusergroups,
+  author={{\TeX{} Users Group}},
+  title={{\TeX}\ user groups around the world},
+  note={\url{http://tug.org/usergroups.html}},
+  year=2017
+}
+


Property changes on: trunk/Master/texmf-dist/source/support/bib2gls/bib2gls-cite.bib
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/support/bib2gls/bib2gls-src.zip
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/source/support/bib2gls/bib2gls-src.zip
===================================================================
--- trunk/Master/texmf-dist/source/support/bib2gls/bib2gls-src.zip	2025-01-04 17:42:43 UTC (rev 73298)
+++ trunk/Master/texmf-dist/source/support/bib2gls/bib2gls-src.zip	2025-01-04 20:45:53 UTC (rev 73299)

Property changes on: trunk/Master/texmf-dist/source/support/bib2gls/bib2gls-src.zip
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/support/bib2gls/bib2gls-terms.bib
===================================================================
--- trunk/Master/texmf-dist/source/support/bib2gls/bib2gls-terms.bib	                        (rev 0)
+++ trunk/Master/texmf-dist/source/support/bib2gls/bib2gls-terms.bib	2025-01-04 20:45:53 UTC (rev 73299)
@@ -0,0 +1,536 @@
+% Encoding: UTF-8
+
+ at entry{entrytype,
+  name={entry type},
+  description={an entry's identifying type, as specified by \atentryfmt{entry-type}.
+  (Not to be confused with the glossary label, which is identified by 
+  the \field{type} field.) When referenced in a resource option, the 
+  leading \code{@} is typically omitted. The \emph{original} entry type
+  refers to the entry type as specified in the \ext{bib} file. The
+  \emph{actual} entry type may be different and will be the result 
+  of a conversion via resource options such as \csopt{entry-type-aliases}.
+  Although the \ext{bib} format is case-insensitive, references to the 
+  entry type in resource options should typically be in \idx{lowercase}.}
+}
+
+ at entry{primaryentry,
+  name={primary entry},
+  plural={primary entries},
+  user1={idx.primary},
+  description={The original entry created from a dual-\gls{entrytype}
+   (such as \atentry{dualentry}) or the entry from 
+   single-\glspl{entrytype} (such as \atentry{entry}) or \glspl{spawnedentry}.}
+}
+
+ at entry{dualentry,
+  name={dual entry},
+  plural={dual entries},
+  user1={idx.dual},
+  description={The duplicate entry created from a dual-\gls{entrytype}
+   (such as \atentry{dualentry}). This duplicate is based on the
+   \gls{primaryentry} with modifications made according to various
+   settings. With tertiary \glspl{entrytype}, the dual entry represents 
+   two entries: the \glsdisp{secondaryentry}{secondary} and
+   \glsdisp{tertiaryentry}{tertiary}.
+   See \sectionref{sec:dualentry}.}
+}
+
+ at entry{secondaryentry,
+  name={secondary entry},
+  plural={secondary entries},
+  user1={idx.secondary},
+  description={For the tertiary \glspl{entrytype}, such as
+  \atentry{tertiaryindexabbreviationentry}, there are only actually
+  two objects defined within \bibgls: the 
+  \glsdisp{primaryentry}{primary} and the \glsdisp{dualentry}{dual},
+  but the code that is written in the \ext{glstex} file for the 
+  \gls{dualentry} actually defines two entries, which are the 
+  secondary and tertiary entries.
+  This should not be confused with the \gls{secondaryglossary}.
+  See \sectionref{sec:tertiaryentry}.}
+}
+
+ at entry{tertiaryentry,
+  name={tertiary entry},
+  plural={tertiary entries},
+  user1={idx.tertiary},
+  description={An entry that isn't defined as a separated object
+  within \bibgls, but is defined within the \ext{glstex} file 
+  as a by-product of the dual definition code for tertiary
+  \glspl{entrytype}.}
+}
+
+ at entry{mainentry,
+  name={main entry},
+  plural={main entries},
+  description={The originating entry from which
+   the \glspl{spawnedentry} are created. A main entry may 
+   be a dual-\gls{entrytype}, consisting of a \gls{primaryentry}
+   and \gls{dualentry}.
+   (Not to be confused with the main glossary or the \gls{compmainlabel}
+    of a \gls{compoundentry}.)}
+}
+
+ at entry{progenitor,
+  name={progenitor},
+  user1={idx.progenitor},
+  description={The \gls{mainentry} for the \atentry{progenitor}
+  \gls{entrytype}.}
+}
+
+ at entry{progeny,
+  name={progeny},
+  user1={idx.progeny},
+  description={The \glspl{spawnedentry} for the \atentry{progenitor}
+  \gls{entrytype}.}
+}
+
+ at entry{multientrytype,
+  name={multi-entry type},
+  description={An \gls{entrytype} that can spawn multiple
+   \glspl{primaryentry}. Some multi-\glspl{entrytype} can also spawn a
+   \gls{dualentry}. See \sectionref{sec:multientry}. 
+   For the \sty{glossaries-extra} \qt{multi (compound or combined) entries} 
+   that are defined with \cs{multiglossaryentry} see \gls{compoundentry}.}
+}
+
+ at entry{spawnedentry,
+  name={spawned entry},
+  plural={spawned entries},
+  description={A duplicate entry created from a \gls{multientrytype}
+   (such as \atentry{spawnentry}).}
+}
+
+ at entry{principallocation,
+  name={principal (or primary) location},
+  text={principal location},
+  description={A special \gls{location} (\gls{record}) which indicates the principal 
+   or primary place in the document where the entry is mentioned
+   or discussed. The \gls{location} is identified by the principal or
+   primary format (\csopt{principal-location-formats}).}
+}
+
+ at entry{mainglossary,
+  name={main glossary},
+  description={The default glossary in the document identified by
+   \cs{glsdefaulttype} (which will have the label \code{main} unless
+   \styopt{nomain} is used). If \styopt{nomain} is used then 
+   \cs{glsdefaulttype} will be set to the label of the first glossary 
+   to be defined.}
+}
+
+ at entry{mainlist,
+  name={main (or primary) list},
+  text={main list},
+  description={The \bibgls\ list of \glspl{primaryentry}, which is sorted
+  according to the \csopt{sort} resource option. The entries may or
+  may not be assigned to the same glossary, and the list may only be
+  a subset of entries. If \csopt[combine]{dual-sort} is used, then
+  the main list will also contain all the \glspl{dualentry}.}
+}
+
+ at entry{duallist,
+  name={dual list},
+  description={The \bibgls\ list of \glspl{dualentry}, which is sorted
+  according to the \csopt{dual-sort} resource option. The entries may or
+  may not be assigned to the same glossary, and the list may only be
+  a subset of entries. If \csopt[combine]{dual-sort} is used then
+  all entries will be in the \gls{mainlist} and there won't be a dual
+  list.}
+}
+
+ at entry{primaryglossary,
+  name={primary (or principal) glossary},
+  text={primary glossary},
+  plural={primary glossaries},
+  description={A glossary that contains entries that have the \field{type}
+   field set to that glossary's label. Note that a primary glossary
+   may contain both \glsdisp{primaryentry}{primary} and
+   \glspl{dualentry}.}
+}
+
+ at entry{secondaryglossary,
+  name={secondary glossary},
+  plural={secondary glossaries},
+  description={A secondary glossary is one that contains labels of
+   entries that have been defined for another glossary. The actual
+   entry's \field{type} field will be set to the 
+   \gls{primaryglossary}.}
+}
+
+ at entry{record,
+  name={record},
+  description={Recording is \bibgls's equivalent of indexing. 
+  When the \styopt{record} package option is set, each
+  time an entry is indexed in the document (using commands like
+  \cs{gls} or \cs{glstext}) a record is added to the \ext{aux}
+  file that makes a note of the entry label, the location, the
+  counter that was used to obtain the \gls{location}, and (optionally)
+  hyperlink information. A record may be \glsdisp{ignoredrecord}{ignored} 
+  or \glsdisp{discardedrecord}{discarded} but, regardless of this, 
+  if an entry has at least one record it will be considered for selection 
+  for any of the \qt{recorded} selection options.}
+}
+
+ at entry{location,
+ name={location},
+ description={The value of the indexing counter when an entry is
+ \glsdisp{record}{recorded}. By default, this is the \counter{page}
+ counter. Each location has an associated format or \idx{encap},
+ which is the name of a formatting command that should be used to
+ encapsulate the location's value in the \gls{locationlist}.
+ The default is \encap{glsnumberformat}.}
+}
+
+ at entry{ignoredrecord,
+  name={ignored record},
+  user1={idx.ignoredrecord},
+  description={A record with the format \encap{glsignore} or
+  \encap{glstriggerrecordformat}. This record indicates that the 
+  entry should be considered for selection
+  with any of the \qt{recorded} selection options, but the record
+  should not be added to the \gls{locationlist}.}
+}
+
+ at entry{discardedrecord,
+  name={discarded record},
+  description={A record that is discarded because either it is
+  identical to another record or it conflicts with another record.}
+}
+
+ at entry{supplementalrecord,
+  name={supplemental record},
+  description={A record obtained from another document.
+  See \sectionref{sec:supplementalopts}.}
+}
+
+ at entry{supplementaldocument,
+  name={supplemental (or supplementary) document},
+  text={supplemental document},
+  description={A related document from which
+  \glspl{supplementalrecord} are obtained.}
+}
+
+ at entry{maindocument,
+  name={main document},
+  description={The principal document that has its own glossary but
+  the \glspl{locationlist} may also contain external
+  \glspl{location} obtained from a \gls{supplementaldocument}.}
+}
+
+ at entry{recordcount,
+  name={record count},
+  description={An entry's record count is the total number of records 
+   (including \glsdisp{discardedrecord}{discarded} and
+   \glsdisp{ignoredrecord}{ignored}) written to the \ext{aux} file
+   that are associated with the entry. It's also possible to have 
+   sub-totals for each record counter.}
+}
+
+ at entry{recordedentry,
+  name={recorded entry},
+  plural={recorded entries},
+  description={An entry that has one or more \glspl{record}.}
+}
+
+ at entry{unrecordedentry,
+  name={unrecorded entry},
+  plural={unrecorded entries},
+  description={An entry that doesn't have any \glspl{record}.}
+}
+
+ at entry{locationlist,
+  name={location list},
+  user1={idx.locationlist},
+  description={Formatted list of \glspl{location} obtained from an entry's
+  \glspl{record}. This won't include \glsdisp{ignoredrecord}{ignored}
+  or \glsdisp{discardedrecord}{discarded} records, and a run of
+  \glspl{location} may be compressed into a range. See
+  \sectionref{sec:locationopts} and \sectionref{sec:loclistdefs}.}
+}
+
+ at entry{parententry,
+  name={parent entry},
+  plural={parent entries},
+  user1={idx.hierarchical-entry},
+  description={An entry in a \gls{hierarchicalglossary}
+   that is linked to, but one level up from, its associated
+   \gls{childentry}. See \sectionref{sec:hierarchicalopts}.}
+}
+
+ at entry{childentry,
+  name={child entry},
+  plural={child entries},
+  user1={idx.hierarchical-entry},
+  description={An entry in a \gls{hierarchicalglossary}
+   that is linked to, but one level down from, its associated
+   \gls{parententry}. See \sectionref{sec:hierarchicalopts}.}
+}
+
+ at entry{sub-entry,
+  name={sub-entry},
+  plural={sub-entries},
+  user1={idx.hierarchical-entry},
+  description={A \gls{childentry}. More specifically, when
+  contrasted with sub-sub-entry etc, this may refer to level~1 entries 
+  (which have a \glsdisp{parententry}{parent} that is a
+  \gls{top-levelentry}). See \sectionref{sec:hierarchicalopts}.}
+}
+
+ at entry{hierarchicalglossary,
+  name={hierarchical glossary},
+  plural={hierarchical glossaries},
+  user1={idx.hierarchical-entry},
+  description={A glossary where the entries are ranked according to 
+   some classification. Level~0 indicates \glspl{top-levelentry},
+   level~1 indicates \glspl{childentry} that have a
+   level~0 \glsdisp{parententry}{parent}, level~2 indicates 
+   \glspl{childentry} that have a
+   level~1 \glsdisp{parententry}{parent}, and so on. See \sectionref{sec:hierarchicalopts}.}
+}
+
+ at entry{flatglossary,
+ name={flat glossary},
+ description={A glossary that has no \glsdisp{hierarchicalglossary}{hierarchy}.
+ That is, there are no \glspl{childentry}. See \sectionref{sec:hierarchicalopts}.}
+}
+
+ at entry{sibling,
+  name={sibling entry},
+  text={sibling},
+  description={Two or more \glspl{childentry} are siblings if
+   they all share the same \gls{parententry}.
+   See \sectionref{sec:hierarchicalopts}.}
+}
+
+ at entry{lonelychildentry,
+  name={lonely child entry},
+  plural={lonely child entries},
+  user1={idx.hierarchical-entry},
+  description={A \gls{childentry} that has no selected \glspl{sibling}.
+  See \sectionref{sec:hierarchicalopts}.}
+}
+
+ at entry{ancestor,
+  name={ancestor},
+  user1={idx.hierarchical-entry},
+  description={An entry's \glsdisp{parententry}{parent} or an ancestor of 
+  the \glsdisp{parententry}{parent}.  See \sectionref{sec:hierarchicalopts}.}
+}
+
+ at entry{top-levelentry,
+  name={top-level entry},
+  plural={top-level entries},
+  user1={idx.hierarchical-entry},
+  description={An entry that doesn't have a \gls{parententry}.
+  This entry is the hierarchical root for all its descendents.
+  See \sectionref{sec:hierarchicalopts}.}
+}
+
+ at entry{masterdocument,
+  name={master document},
+  description={A main or principal document that contains a glossary
+   with entries referenced by smaller documents that don't have their own
+   glossary. See \sectionref{sec:master}.}
+}
+
+ at entry{primarycollatorstrength,
+  name={primary collator strength},
+  description={A collator strength value that indicates only primary
+   differences are considered significant during comparison.
+   This is locale dependant, but typically different base letters
+   are considered a primary difference.}
+}
+
+ at entry{secondarycollatorstrength,
+  name={secondary collator strength},
+  description={A collator strength value that indicates only primary
+  and secondary differences are considered significant during comparison.
+  This is locale dependant. For example, in some languages different
+  accented forms of the same base letter may be considered a
+  secondary difference.}
+}
+
+ at entry{tertiarycollatorstrength,
+  name={tertiary collator strength},
+  description={A collator strength value that indicates only
+  primary, secondary and tertiary differences are considered
+  significant during comparison. This is locale dependant. For
+  example, different cases of the same base letter may be considered a
+  tertiary difference.}
+}
+
+ at entry{identicalcollatorstrength,
+  name={identical collator strength},
+  description={A collator strength value that indicates that all
+  differences are considered significant during comparison.}
+}
+
+ at entry{definitionindex,
+  name={definition index},
+  description={An index (starting from 0) that's incremented
+  every time a new entry object is created within \bibgls.
+  This relates to the order of definitions within the \ext{bib}
+  files. Each \gls{dualentry} and \gls{spawnedentry} will increment
+  the underlying counter but only when they are created, which
+  may not happen until after all \ext{bib} files for the \gls{resourceset} have
+  been parsed.}
+}
+
+ at entry{orderofuseindex,
+  name={order of use index},
+  description={The \gls{record} index is a value (starting from 0) that's incremented
+  every time a \gls{record} is created while parsing the \ext{aux} file.
+  The first time a non-\gls{ignoredrecord} is added to a given entry, the 
+  \gls{record} index is assigned to that entry's order of use index. So the 
+  index provides a relative order of use. So if entry1 is the first entry
+  to be indexed, it will have order of use index~0. If entry1 is
+  then indexed twice more and then entry2 is indexed, then entry2's
+  order of use index will be~3.}
+}
+
+ at entry{resourceset,
+  name={resource set},
+  user1={idx.resourceset},
+  description={The set of options and entries associated with a
+   \gls{resourcecommand}. See \sectionref{sec:resourcesets}.}
+}
+
+ at entry{resourcecommand,
+  name={resource command},
+  description={\gls{glsxtrresourcefile} or \gls{GlsXtrLoadResources}.}
+}
+
+ at entry{resource-locale,
+  name = {resource locale},
+  user1={idx.locale-resource},
+  description={the default locale for the given \gls{resourceset}.
+  This can be set with the \csopt{locale} resource option. If not
+  explicitly set, then the default will be the document language, if
+  it has been detected by \sty{tracklang} or identified with
+  \commonlongarg{locale}, or the \idx{JRE} locale otherwise.}
+}
+
+ at entry{document-locale,
+  name = {document locale},
+  user1={idx.locale-doc},
+  description={the locale associated with the document
+  language (or by \commonlongarg{locale}, if no document language has been
+  detected). In the case of a multi-lingual document, this
+  is the locale of the last language resource file to be loaded through
+  \isty{tracklang}'s interface. It's best to explicitly set the locale
+  for multi-lingual documents to avoid confusion (either with
+  the \csopt{locale} or as a language tag in options such as
+  \csopt{sort}).}
+}
+
+ at entry{Java-locale,
+  name = {Java locale},
+  user1={idx.locale-Java},
+  description={the default locale for the \idx{JRE}, which usually
+  matches the operating system's locale.}
+}
+
+ at entry{crossresourceref,
+  name={cross-resource reference},
+  user1={idx.crossresourceref},
+  description={A reference from a \gls{recordedentry} provided in
+  one \gls{resourceset} to an \gls{unrecordedentry} in another
+  \gls{resourceset}. See \sectionref{sec:resourcesets}.}
+}
+
+ at entry{cross-referencefield,
+ name={cross-reference field},
+ description={A field used for cross-referencing another entry:
+ \field{see}, \field{seealso} and \field{alias}.
+ Other fields can be identified as a list of dependent entry labels
+ with \csopt{dependency-fields}.}
+}
+
+ at entry{ignoredglossary,
+  name={ignored glossary},
+  plural={ignored glossaries},
+  user1={idx.ignoredglossary},
+  description={A glossary defined with commands like
+  \cs{newignoredglossary}. An ignored glossary doesn't have an
+associated title (so if one is required it needs to be explicitly
+set), and isn't picked up by iterative commands such as 
+  \cs{printunsrtglossaries}. See \sectionref{sec:newglossary}.}
+}
+
+ at entry{homograph,
+  name={homograph},
+  user1={idx.homograph},
+  description={Each word in a set of words that all have the same
+   spelling but different meanings. For example, lead (to guide
+   someone) and lead (metallic element) are homographs.}
+}
+
+ at entry{encoding,
+  name={encoding},
+  user1={idx.encoding},
+  description={A text format that maps a byte or sequence of bytes
+  to a character. See \sectionref{sec:bibencoding} and \csopt{charset}
+  for the \ext{bib} file encoding, \longarg{tex-encoding} for the
+  \ext{aux} and \ext{glstex} file encoding, and 
+  \sectionref{sec:defencoding} for the default encoding.  See also the blog article
+\href{https://dickimaw-books.com/blog/binary-files-text-files-and-file-encodings/}{Binary
+Files, Text Files and File Encodings} for further information about
+  file encodings in general.}
+}
+
+ at entry{compoundentry,
+   name={compound (combined or multi) entry},
+   text={compound entry},
+   plural={compound entries},
+   description={A compound entry corresponds to the \ics{multiglossaryentry} 
+   command. This defines a label that represents a set of entries that have 
+   already been defined. This label can then be used in commands like \ics{mgls}
+   as a shortcut for using \cs{gls} for each element in the set.
+   The \gls{compmainlabel} is the main element in the set.
+   The \qt{\glspl{compotherlabel}} are all the other (not-main) elements.
+   See \sectionref{sec:compoundsetentry}.}
+}
+
+ at entry{compmainlabel,
+  name = {main label or element (compound entry)},
+  text = {main label},
+  description = {The main element in the set that defines a 
+  \gls{compoundentry}.}
+}
+
+ at entry{compotherlabel,
+  name = {other label or element (compound entry)},
+  text = {other label},
+  description = {The non-\glslink{compmainlabel}{main} elements in the 
+  set that defines a \gls{compoundentry}.}
+}
+
+ at entry{regular-expression,
+  name = {regular expression},
+  user1={idx.regex},
+  description={A pattern that specifies how to match text. Unless
+  indicated otherwise, resource options that use regular expressions
+  are \gls{anchored}. See
+  \href{http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html}{Java's
+  Pattern class API}~\cite{pattern} for details of the regular
+  expression syntax.}
+}
+
+ at entry{anchored,
+  name = {anchored (regular expression)},
+  text={anchored},
+  description={An anchored \gls{regular-expression} must match the entire
+  string, not a sub-string. For example, \code{l\idx{regex.question}op} matches \qt{lop}
+  and \qt{op} but doesn't match \qt{clop} or \qt{cop}.}
+}
+
+ at entry{concatenation,
+  name={concatenation},
+  user1={idx.stringconcatenation},
+  description={This is where multiple fragments or substrings are
+  joined together to form a single value. The concatenation operator
+  is \idx{stringconcat} for \ext{bib} files (see
+  \sectionref{sec:bibstringconcat}) and \idx{concat-plus} for
+  resource option string concatenation (\sectionref{sec:optstringconcat}).}
+}


Property changes on: trunk/Master/texmf-dist/source/support/bib2gls/bib2gls-terms.bib
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/support/bib2gls/bib2gls.bib
===================================================================
--- trunk/Master/texmf-dist/source/support/bib2gls/bib2gls.bib	                        (rev 0)
+++ trunk/Master/texmf-dist/source/support/bib2gls/bib2gls.bib	2025-01-04 20:45:53 UTC (rev 73299)
@@ -0,0 +1,19970 @@
+% Encoding: UTF-8
+
+% Custom entry types will need aliasing.
+%
+% @bibglscommand       -> \bibgls... command provided by bib2gls
+% @glscommand          -> command provided by glossaries.sty,
+%                        glossaries-extra.sty or supplemental glossary packages.
+% @mainglscommand      -> glossary-related command with formal syntax described
+%                        in the main matter.
+% @abbrvstylecommand   -> command used by abbreviation styles.
+% @glostylecommand     -> command used by glossary styles.
+% @resourceoption      -> \GlsXtrLoadResources option
+% @command             -> command provided by kernel or other package
+% @examplecommand      -> custom command defined in the examples
+% @fileformat          -> file format
+% @application         -> application
+% @package             -> package
+% @specialchar         -> special character
+% @environment         -> environment
+% @glsenvironment      -> environment provided by glossaries.sty
+% @abbreviationstyle   -> abbreviation style
+% @glossarystyle       -> glossary style
+% @categoryattribute   -> category attribute
+% @counter             -> counter
+% @labelprefix         -> label prefix
+% @packageoption       -> package option
+% @field               -> field
+% @entrytype           -> entry type
+% @switch              -> command line switch
+% @xmltag              -> tag in XML language resource file
+% @unicodecategory     -> Unicode category
+% @texmfcnf            -> texmf.cnf setting
+% @file                -> file
+% @samplefile          -> sample file
+% @printglossoption    -> \printunsrtglossary option
+% @glslinkoption       -> \glslink option
+% @glsaddoption        -> \glsadd option
+% @exampleentry        -> example entry
+% @examplesymbol       -> example symbol
+% @exampleindex        -> example term
+% @exampleabbreviation -> example abbreviation
+% @topic               -> topic
+
+ at preamble{"\providecommand{\dhyphen}{-}
+\providecommand{\longargfmt}[1]{-{}-#1}
+\providecommand{\csfmt}[1]{\texttt{\glsbackslash #1}}
+\providecommand{\derivfn}[1]{f'(#1)}
+\providecommand{\rangestartmark}{\symbol{40}}
+\providecommand{\rangeendmark}{\symbol{41}}
+\providecommand{\abbrvword}[1]{\textup{#1}}"}
+
+ at abbreviation{IETF,
+ short = {IETF},
+ long = {Internet Engineering Task Force}
+}
+
+ at abbreviation{JVM,
+ short = {JVM},
+ long = {Java Virtual Machine}
+}
+
+ at abbreviation{JRE,
+ short = {JRE},
+ long = {Java Runtime Environment}
+}
+
+ at abbreviation{TUG,
+ short = {TUG},
+ long = {{}\TeX\ Users Group}
+}
+
+ at abbreviation{CLDR,
+ short = {CLDR},
+ long = {Unicode Common Locale Data Repository}
+}
+
+ at abbreviation{SIunit,
+ short = {SI \abbrvword{unit}},
+ long = {International System of Units},
+ longplural = {International System of Units},
+ category={common}
+}
+
+ at abbreviation{ASCII,
+  short = {ASCII},
+  long = {American Standard Code for Information Interchange},
+  category={common}
+}
+
+ at abbreviation{CJK,
+  short = {CJK},
+  long = {Chinese, Japanese, Korean languages},
+  category={common}
+}
+
+ at abbreviation{encap,
+  short = {encap},
+  long = {encapsulating command}
+}
+
+ at abbreviation{toc,
+  short = {TOC},
+  long = {table of contents}
+}
+
+ at topic{definingterms,
+  name={defining terms}
+}
+
+ at topic{convertercommands,
+  name={converter commands},
+  text={converter command}
+}
+
+ at topic{formattingcommands,
+  name={formatting commands},
+  text={formatting command}
+}
+
+ at topic{abbreviationcommands,
+  name={abbreviation commands (general)},
+  text={abbreviation command},
+  seealso={abbreviationstyles}
+}
+
+ at topic{glossarystylecommands,
+  name={glossary style commands (general)},
+  text={glossary style command},
+  seealso={glossarystyle}
+}
+
+ at topic{separatorcommands,
+  name={separator commands}
+}
+
+ at topic{crossrefcommands,
+  name={cross-referencing commands}
+}
+
+ at topic{loclistcommands,
+  name={location list commands (records)}
+}
+
+ at topic{fixedtextcommands,
+  name={fixed text commands}
+}
+
+ at topic{fieldrefcommands,
+  name={field reference commands}
+}
+
+ at topic{entryrefcommands,
+  name={entry reference commands}
+}
+
+ at topic{glossrefs,
+  name={glossary lists (\fieldfmt{type})}
+}
+
+ at topic{standalonestyles,
+  name={standalone styles}
+}
+
+ at topic{providingcommands,
+  name={defining or redefining commands}
+}
+
+ at topic{linkcommands,
+  name={hyperlink-capable commands or targets}
+}
+
+ at topic{supplementalrefs,
+  name={supplemental document references}
+}
+
+ at topic{assigncommands,
+  name={assignment commands},
+  text={assignment command}
+}
+
+ at topic{groupcommands,
+  name={glossary group commands}
+}
+
+ at topic{charcommands,
+  name={character or symbol commands}
+}
+
+ at topic{casecommands,
+  name={case-changing commands},
+  text={case-changing command}
+}
+
+ at topic{quark,
+  name={quarks (\bibgls)},
+  text={quark},
+  description={Quarks are special types of escape sequences that
+  look like \LaTeX\ commands but actually markup special tokens in 
+  resource options. See \sectionref{sec:quarks} for further details.}
+}
+
+ at topic{internalcommands,
+  name={internal commands}
+}
+
+ at topic{auxcommands,
+  name={auxiliary file commands},
+  text={auxiliary file command}
+}
+
+ at topic{capheadcommands,
+  name={caption or heading commands},
+  text={caption or heading command}
+}
+
+ at topic{listcommands,
+  name={list commands (internal or comma-separated)},
+  text={list command}
+}
+
+ at topic{collationsubrules,
+  name={collation sub-rules}
+}
+
+ at topic{catattrcommands,
+  name={categories and attributes}
+}
+
+ at index{regexp,
+  name={regexp (or regex)},
+  text={regexp},
+  alias={regex}
+}
+
+ at index{regex,
+  name={regular expressions},
+  text={regular expression},
+}
+
+ at topic{access-support,
+  name={accessibility support}
+}
+
+ at topic{conditional,
+  name={conditionals and boolean values},
+  text={conditional},
+  plural={conditionals}
+}
+ at indexplural{booleanvals,
+  text={boolean value},
+  alias={conditional}
+}
+
+ at topic{debugging,
+  name={debugging commands},
+  text={debugging command}
+}
+
+ at topic{shortcutcommands,
+  name={shortcut commands},
+  text={shortcut command}
+}
+
+ at topic{hooks,name={hooks},text={hook}}
+ at topic{loop,name={loops},text={loop}}
+ at index{iteration,see={loop}}
+ at indexplural{handler,seealso={loop}}
+ at topic{indexing}
+
+ at bibglscommand{bibglsnewentry,
+  name={\csfmt{bib\-gls\-new\-entry}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms provided with \atentry{entry}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewsymbol,
+  name={\csfmt{bib\-gls\-new\-symbol}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms provided with \atentry{symbol}},
+  topics={definingterms},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewnumber,
+  name={\csfmt{bib\-gls\-new\-number}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms provided with \atentry{number}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewindex,
+  name={\csfmt{bib\-gls\-new\-index}},
+  user1={\margm{label}\margm{options}},
+  description={defines terms provided with \atentry{index}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewindexplural,
+  name={\csfmt{bib\-gls\-new\-index\-plural}},
+  user1={\margm{label}\margm{options}\margm{name}},
+  description={defines terms provided with \atentry{index}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewabbreviation,
+  name={\csfmt{bib\-gls\-new\-abbreviation}},
+  user1={\margm{label}\margm{options}\margm{short}\margm{long}},
+  description={defines terms provided with \atentry{abbreviation}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewacronym,
+  name={\csfmt{bib\-gls\-new\-acronym}},
+  user1={\margm{label}\margm{options}\margm{short}\margm{long}},
+  description={defines terms provided with \atentry{acronym}},
+  topics={definingterms},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewdualentry,
+  name={\csfmt{bib\-gls\-new\-dual\-entry}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms provided with \atentry{dualentry}},
+  topics={definingterms},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewdualindexentry,
+  name={\csfmt{bib\-gls\-new\-dual\-index\-entry}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines primary terms provided with
+\atentry{dualindexentry}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewdualindexentrysecondary,
+  name={\csfmt{bib\-gls\-new\-dual\-index\-entry\-secondary}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines secondary terms provided with
+\atentry{dualindexentry}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewdualindexsymbol,
+  name={\csfmt{bib\-gls\-new\-dual\-index\-symbol}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{symbol}\margm{description}},
+  description={defines primary terms provided with
+\atentry{dualindexsymbol}},
+  topics={definingterms},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewdualindexsymbolsecondary,
+  name={\csfmt{bib\-gls\-new\-dual\-index\-symbol\-secondary}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines secondary terms provided with
+\atentry{dualindexsymbol}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewdualindexnumber,
+  name={\csfmt{bib\-gls\-new\-dual\-index\-number}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{symbol}\margm{description}},
+  description={defines primary terms provided with
+\atentry{dualindexnumber}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewdualindexnumbersecondary,
+  name={\csfmt{bib\-gls\-new\-dual\-index\-number\-secondary}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines secondary terms provided with
+\atentry{dualindexnumber}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewdualindexabbreviation,
+  name={\csfmt{bib\-gls\-new\-dual\-index\-abbre\-via\-tion}},
+  user1={\margm{label}\margm{dual-label}\margm{options}\margm{name}\margm{short}\margm{long}\margm{description}},
+  description={defines primary terms provided with
+\atentry{dualindexabbreviation}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewdualindexabbreviationsecondary,
+  name={\csfmt{bib\-gls\-new\-dual\-index\-abbre\-via\-tion\-sec\-ond\-ary}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{short}\margm{long}\margm{description}},
+  description={defines secondary terms provided with
+\atentry{dualindexabbreviation}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewdualabbreviationentry,
+  name={\csfmt{bib\-gls\-new\-dual\-abbre\-via\-tion\-entry}},
+  user1={\margm{label}\margm{options}\margm{short}\margm{long}\margm{description}},
+  description={defines primary terms provided with
+\atentry{dualabbreviationentry}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewdualabbreviationentrysecondary,
+  name={\csfmt{bib\-gls\-new\-dual\-abbre\-via\-tion\-entry\-sec\-ond\-ary}},
+  user1={\margm{label}\margm{options}\margm{short}\margm{long}\margm{description}},
+  description={defines secondary terms provided with
+\atentry{dualabbreviationentry}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewdualentryabbreviation,
+  name={\csfmt{bib\-gls\-new\-dual\-entry\-abbre\-via\-tion}},
+  user1={\margm{label}\margm{options}\margm{short}\margm{long}\margm{description}},
+  description={defines primary terms provided with (deprecated)
+\atentry{dualentryabbreviation}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewdualentryabbreviationsecondary,
+  name={\csfmt{bib\-gls\-new\-dual\-entry\-abbre\-via\-tion\-sec\-ond\-ary}},
+  user1={\margm{label}\margm{options}\margm{short}\margm{long}\margm{description}},
+  description={defines secondary terms provided with (deprecated)
+\atentry{dualentryabbreviation}},
+  topics={definingterms},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewdualsymbol,
+  name={\csfmt{bib\-gls\-new\-dual\-symbol}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms provided with \atentry{dualsymbol}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewdualnumber,
+  name={\csfmt{bib\-gls\-new\-dual\-number}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms provided with \atentry{dualnumber}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewdualabbreviation,
+  name={\csfmt{bib\-gls\-new\-dual\-abbre\-via\-tion}},
+  user1={\margm{label}\margm{options}\margm{short}\margm{long}},
+  description={defines terms provided with
+\atentry{dualabbreviation}},
+  topics={definingterms},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewdualacronym,
+  name={\csfmt{bib\-gls\-new\-dual\-acronym}},
+  user1={\margm{label}\margm{options}\margm{short}\margm{long}},
+  description={defines terms provided with \atentry{dualacronym}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewtertiaryindexabbreviationentry,
+  name={\csfmt{bib\-gls\-new\-tert\-iary\-index\-abbre\-via\-tion\-entry}},
+  user1={\margm{label}\margm{dual-label}\margm{options}\margm{name}\margm{short}\margm{long}\margm{description}},
+  description={defines primary terms provided with
+\atentry{tertiaryindexabbreviationentry}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewtertiaryindexabbreviationentrysecondary,
+  name={\csfmt{bib\-gls\-new\-tert\-iary\-index\-abbre\-via\-tion\-entry\-sec\-ond\-ary}},
+  user1={\margm{label}\margm{tertiary-label}\margm{options}\margm{tertiary-opts}\margm{primary-name}\margm{short}\margm{long}\margm{description}},
+  description={defines secondary and tertiary terms provided with
+\atentry{tertiaryindexabbreviationentry}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewbibtexentry,
+  name={\csfmt{bib\-gls\-new\-bib\-tex\-entry}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms provided with \atentry{bibtexentry}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewcontributor,
+  name={\csfmt{bib\-gls\-new\-con\-trib\-u\-tor}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms provided with
+   \atentry{contributor}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewprogenitor,
+  name={\csfmt{bib\-gls\-new\-progenitor}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms provided with \atentry{progenitor}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnindex,
+  name={\csfmt{bib\-gls\-new\-spawn\-index}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms provided with \atentry{spawnindex}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawndualindexentry,
+  name={\csfmt{bib\-gls\-new\-spawn\-dual\-index\-entry}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms provided with \atentry{spawndualindexentry}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawndualindexentrysecondary,
+  name={\csfmt{bib\-gls\-new\-spawn\-dual\-index\-entry\-secondary}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines secondary terms provided with \atentry{spawndualindexentry}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnedindex,
+  name={\csfmt{bib\-gls\-new\-spawned\-index}},
+  user1={\margm{label}\margm{options}},
+  description={defines terms spawned from \atentry{progenitor}
+   or \atentry{spawnindex}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnindexplural,
+  name={\csfmt{bib\-gls\-new\-spawn\-index\-plural}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms provided with \atentry{spawnindexplural}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnedindexplural,
+  name={\csfmt{bib\-gls\-new\-spawned\-index\-plural}},
+  user1={\margm{label}\margm{options}\margm{name}},
+  description={defines terms spawned from \atentry{spawnindexplural}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnentry,
+  name={\csfmt{bib\-gls\-new\-spawn\-entry}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms provided with \atentry{spawnentry}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnedentry,
+  name={\csfmt{bib\-gls\-new\-spawned\-entry}},
+  user1={\margm{label}\margm{options}},
+  description={defines terms spawned from \atentry{spawnentry}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnabbreviation,
+  name={\csfmt{bib\-gls\-new\-spawn\-abbreviation}},
+  user1={\margm{label}\margm{options}\margm{short}\margm{long}},
+  description={defines terms provided with \atentry{spawnabbreviation}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnedabbreviation,
+  name={\csfmt{bib\-gls\-new\-spawned\-abbreviation}},
+  user1={\margm{label}\margm{options}\margm{short}\margm{long}},
+  description={defines terms spawned from \atentry{spawnabbreviation}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnacronym,
+  name={\csfmt{bib\-gls\-new\-spawn\-acronym}},
+  user1={\margm{label}\margm{options}\margm{short}\margm{long}},
+  description={defines terms provided with \atentry{spawnacronym}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnedacronym,
+  name={\csfmt{bib\-gls\-new\-spawned\-acronym}},
+  user1={\margm{label}\margm{options}\margm{short}\margm{long}},
+  description={defines terms spawned from \atentry{spawnacronym}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnsymbol,
+  name={\csfmt{bib\-gls\-new\-spawn\-symbol}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms provided with \atentry{spawnsymbol}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnedsymbol,
+  name={\csfmt{bib\-gls\-new\-spawned\-symbol}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms spawned from \atentry{spawnsymbol}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnnumber,
+  name={\csfmt{bib\-gls\-new\-spawn\-number}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms provided with \atentry{spawnnumber}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsnewspawnednumber,
+  name={\csfmt{bib\-gls\-new\-spawned\-number}},
+  user1={\margm{label}\margm{options}\margm{name}\margm{description}},
+  description={defines terms spawned from \atentry{spawnnumber}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsdefcompoundset,
+  name={\csfmt{bib\-gls\-def\-compound\-set}},
+  user1={\margm{options}\margm{label}\margm{main}\margm{elements}},
+  description={defines a \gls{ext1.compoundentry} provided with \atentry{compoundset}},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglscopytoglossary,
+  name={\csfmt{bib\-gls\-copy\-to\-glossary}},
+  user1={\margm{entry-label}\margm{glossary-type}},
+  description={copies the entry identified by \meta{entry-label} to
+  the glossary identified by \meta{glossary-type} after the entry is
+  defined (if the \csopt{copy-to-glossary} option is set)},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at bibglscommand{bibglsuselongfont,
+  name={\csfmt{bib\-gls\-use\-long\-font}},
+  user1={\margm{text}\margm{category}},
+  description={ensures that the given text is formatted according to
+    the given category's long format},
+  note={\bibgls},
+  topics={definingterms},
+  category={command}
+}
+
+ at glscommand{glsuselongfont,
+  name={\csfmt{gls\-use\-long\-font}},
+  user1={\margm{text}\margm{category}},
+  description={applies the formatting command used for the long
+   form for the abbreviation style associated with the given category},
+  note={\styfmt{glossaries-extra} v1.21+},
+  topics={formattingcommands,abbreviationcommands},
+  category={command}
+}
+
+ at glscommand{ifglsxtrinsertinside,
+  name={\csfmt{if\-gls\-xtr\-insert\-inside}},
+  description={switch that determines whether or not inserted text
+  (provided in the final optional argument of commands like \cs{gls})
+  is inside or outside of the font changing commands in the predefined
+  abbreviation styles. The default is \optfmt{false}},
+  topics={abbreviationcommands,conditional},
+  note={\styfmt{glossaries-extra} v1.02+},
+  category={command}
+}
+
+ at glscommand{glsxtrinsertinsidefalse,
+  name={\csfmt{gls\-xtr\-insert\-inside\-false}},
+  description={sets the \cs{ifglsxtrinsertinside} switch to \optfmt{false}},
+  topics={abbreviationcommands,conditional},
+  note={\styfmt{glossaries-extra} v1.02+},
+  category={command}
+}
+
+ at glscommand{glsxtrinsertinsidetrue,
+  name={\csfmt{gls\-xtr\-insert\-inside\-true}},
+  description={sets the \cs{ifglsxtrinsertinside} switch to \optfmt{true}},
+  topics={abbreviationcommands,conditional},
+  note={\styfmt{glossaries-extra} v1.02+},
+  category={command}
+}
+
+ at glscommand{glsxtrfullsep,
+  name={\csfmt{gls\-xtr\-full\-sep}},
+  user1={\margm{label}},
+  description={the separator used in the full format for the
+  parenthetical abbreviation styles or for inline parenthetical
+  styles. This just does a space by default},
+  topics={formattingcommands,abbreviationcommands},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{GlsXtrAutoAddOnFormat,
+  name={\csfmt{GlsXtrAutoAddOnFormat}},
+  user1={\oargm{label}\margm{format list}\margm{glsadd options}},
+  description={makes commands like \cs{gls} and \cs{glslink}
+   (but not \cs{glsadd}) automatically insert \cs{glsadd}\oargm{glsadd
+   options}\margm{label} if the format (supplied in the optional
+   argument of the invoking \cs{gls}, \cs{glslink} etc) matches any in the given
+   comma-separated elements of \meta{format list}. The format isn't automatically
+   applied to the \cs{glsadd} options},
+  note={\styfmt{glossaries-extra} v1.37+},
+  topics={hooks,indexing},
+  category={command}
+}
+
+ at bibglscommand{bibglsuseabbrvfont,
+  name={\csfmt{bib\-gls\-use\-abbrv\-font}},
+  user1={\margm{text}\margm{category}},
+  description={ensures that the given text is formatted according to
+    the given category's short format},
+  note={\bibgls},
+  topics={formattingcommands,abbreviationcommands},
+  category={command}
+}
+
+ at glscommand{glsuseabbrvfont,
+  name={\csfmt{gls\-use\-abbrv\-font}},
+  user1={\margm{text}\margm{category}},
+  description={applies the formatting command used for the short
+   form for the abbreviation style associated with the given category},
+  note={\styfmt{glossaries-extra} v1.21+},
+  topics={formattingcommands,abbreviationcommands},
+  category={command}
+}
+
+ at bibglscommand{bibglsseesep,
+  name={\csfmt{bib\-gls\-see\-sep}},
+  user1={},
+  description={separator between \field{see} 
+   cross-references and location list},
+  note={\bibgls},
+  topics={glossarystylecommands,separatorcommands,crossrefcommands,loclistcommands},
+  category={command}
+}
+
+ at bibglscommand{bibglsaliassep,
+  name={\csfmt{bib\-gls\-alias\-sep}},
+  user1={},
+  description={separator between \field{alias} 
+   cross-reference and location list},
+  note={\bibgls},
+  topics={glossarystylecommands,separatorcommands,crossrefcommands,loclistcommands},
+  category={command}
+}
+
+ at bibglscommand{bibglsseealsosep,
+  name={\csfmt{bib\-gls\-see\-also\-sep}},
+  user1={},
+  description={separator between \field{seealso} 
+   cross-references and location list},
+  note={\bibgls},
+  topics={glossarystylecommands,separatorcommands,crossrefcommands,loclistcommands},
+  category={command}
+}
+
+ at bibglscommand{bibglscompact,
+  name={\csfmt{bib\-gls\-compact}},
+  user1={\margm{pattern}\margm{part1}\margm{part2}},
+  description={compaction used on the end range location},
+  note={\bibgls},
+  topics={glossarystylecommands,loclistcommands},
+  category={command}
+}
+
+ at bibglscommand{bibglspassim,
+  name={\csfmt{bib\-gls\-passim}},
+  user1={},
+  description={passim range suffix},
+  note={\bibgls},
+  topics={glossarystylecommands,loclistcommands},
+  category={command}
+}
+
+ at bibglscommand{bibglspassimname,
+  name={\csfmt{bib\-gls\-passim\-name}},
+  user1={},
+  description={name used by passim range suffix},
+  note={\bibgls},
+  topics={glossarystylecommands,loclistcommands,fixedtextcommands},
+  category={command}
+}
+
+ at bibglscommand{bibglsusesee,
+  name={\csfmt{bib\-gls\-use\-see}},
+  user1={\margm{label}},
+  description={display \field{see} cross-reference list for given entry},
+  note={\bibgls},
+  topics={glossarystylecommands,crossrefcommands,loclistcommands,fieldrefcommands},
+  category={command}
+}
+
+ at bibglscommand{bibglsusealias,
+  name={\csfmt{bib\-gls\-use\-alias}},
+  user1={\margm{label}},
+  description={display the \field{alias} cross-reference for given entry},
+  topics={glossarystylecommands,crossrefcommands,loclistcommands,fieldrefcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsuseseealso,
+  name={\csfmt{bib\-gls\-use\-see\-also}},
+  user1={\margm{label}},
+  description={display the \field{seealso} cross-reference list for given entry},
+  topics={glossarystylecommands,crossrefcommands,loclistcommands,fieldrefcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsdelimN,
+  name={\csfmt{bib\-gls\-delimN}},
+  user1={},
+  description={separator for individual locations (except last)},
+  seealso={bibglslastDelimN},
+  note={\bibgls},
+  topics={glossarystylecommands,loclistcommands,separatorcommands},
+  category={command}
+}
+
+ at bibglscommand{bibglslastDelimN,
+  name={\csfmt{bib\-gls\-last\-DelimN}},
+  user1={},
+  description={separator before the last location (where there is
+    more than one location)},
+  seealso={bibglsdelimN},
+  topics={glossarystylecommands,loclistcommands,separatorcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsrange,
+  name={\csfmt{bib\-gls\-range}},
+  user1={\marg{\meta{start}\cs{delimR} \meta{end}}},
+  description={Explicit range format},
+  note={\bibgls},
+  topics={glossarystylecommands,loclistcommands},
+  category={command}
+}
+
+ at bibglscommand{bibglsinterloper,
+  name={\csfmt{bib\-gls\-inter\-loper}},
+  user1={\margm{location}},
+  description={interloper location format},
+  note={\bibgls},
+  topics={glossarystylecommands,loclistcommands},
+  category={command}
+}
+
+ at bibglscommand{bibglspostlocprefix,
+  name={\csfmt{bib\-gls\-post\-loc\-prefix}},
+  user1={},
+  description={location list post prefix},
+  note={\bibgls},
+  topics={glossarystylecommands,loclistcommands},
+  category={command}
+}
+
+ at bibglscommand{bibglslocprefix,
+  name={\csfmt{bib\-gls\-loc\-prefix}},
+  user1={\margm{n}},
+  description={location list prefix},
+  topics={glossarystylecommands,loclistcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsprimary,
+  name={\csfmt{bib\-gls\-primary}},
+  user1={\margm{n}\margm{locations}},
+  description={location list encapsulator used in the
+\field{primarylocations} field},
+  topics={loclistcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglspagename,
+  name={\csfmt{bib\-gls\-page\-name}},
+  user1={},
+  description={name used for single page},
+  topics={glossarystylecommands,loclistcommands,fixedtextcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglspagesname,
+  name={\csfmt{bib\-gls\-pages\-name}},
+  user1={},
+  description={name used for multiple pages},
+  topics={glossarystylecommands,loclistcommands,fixedtextcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglslocsuffix,
+  name={\csfmt{bib\-gls\-loc\-suffix}},
+  user1={\margm{n}},
+  description={location list suffix},
+  topics={glossarystylecommands,loclistcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglshyperlink,
+  name={\csfmt{bib\-gls\-hyper\-link}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with a hyperlink to the entry
+   given by \meta{label}, if supported},
+  topics={linkcommands,fieldrefcommands},
+  note={\bibgls\texparserdefnote},
+  category={command}
+}
+
+ at bibglscommand{bibglssettotalrecordcount,
+  name={\csfmt{bib\-gls\-set\-total\-record\-count}},
+  user1={\margm{entry-label}\margm{value}},
+  description={sets the total record count for the given entry},
+  topics={assigncommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssetrecordcount,
+  name={\csfmt{bib\-gls\-set\-record\-count}},
+  user1={\margm{entry-label}\margm{counter}\margm{value}},
+  description={sets the \meta{counter} record count for the given entry},
+  topics={assigncommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssetlocationrecordcount,
+  name={\csfmt{bib\-gls\-set\-location\-record\-count}},
+  user1={\margm{entry-label}\margm{counter}\margm{location}\margm{value}},
+  description={sets the location record count for the given entry},
+  topics={assigncommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at glscommand{glsxtrdetoklocation,
+  name={\csfmt{gls\-xtr\-de\-tok\-location}},
+  user1={\margm{location}},
+  description={may be used to detokenize problematic locations, but
+just does its argument by default},
+  note={\styfmt{glossaries-extra} v1.21+},
+  topics={assigncommands},
+  category={command}
+}
+
+ at bibglscommand{bibglslocationgroup,
+  name={\csfmt{bib\-gls\-location\-group}},
+  user1={\margm{n}\margm{counter}\margm{list}},
+  description={location group encapsulator},
+  topics={glossarystylecommands,loclistcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglslocationgroupsep,
+  name={\csfmt{bib\-gls\-location\-group\-sep}},
+  user1={},
+  description={location group separator},
+  topics={glossarystylecommands,loclistcommands,separatorcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsprimarylocationgroup,
+  name={\csfmt{bib\-gls\-primary\-location\-group}},
+  user1={\margm{n}\margm{counter}\margm{list}},
+  description={primary location group encapsulator},
+  topics={glossarystylecommands,loclistcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsprimarylocationgroupsep,
+  name={\csfmt{bib\-gls\-primary\-location\-group\-sep}},
+  user1={},
+  description={primary location group separator},
+  topics={glossarystylecommands,loclistcommands,separatorcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssupplemental,
+  name={\csfmt{bib\-gls\-supple\-mental}},
+  user1={\margm{n}\margm{list}},
+  description={supplemental list encapsulator},
+  note={\bibgls},
+  topics={glossarystylecommands,loclistcommands,supplementalrefs},
+  category={command}
+}
+
+ at bibglscommand{bibglssupplementalsep,
+  name={\csfmt{bib\-gls\-supple\-mental\-sep}},
+  user1={},
+  description={separator between main and supplementary locations},
+  topics={glossarystylecommands,loclistcommands,supplementalrefs,separatorcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssupplementalsublist,
+  name={\csfmt{bib\-gls\-supple\-mental\-sub\-list}},
+  user1={\margm{n}\margm{external document}\margm{list}},
+  description={supplemental sub-list encapsulator},
+  topics={glossarystylecommands,loclistcommands,supplementalrefs},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssupplementalsubsep,
+  name={\csfmt{bib\-gls\-supple\-mental\-sub\-sep}},
+  user1={},
+  description={separator between supplementary sub-lists},
+  topics={glossarystylecommands,loclistcommands,supplementalrefs,separatorcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at mainglscommand{glsgroupheading,
+  name={\csfmt{gls\-group\-heading}},
+  user1={\margm{label}},
+  description={formats the heading for the group identified by the
+given label},
+  topics={glossarystylecommands,formattingcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at mainglscommand{glssubgroupheading,
+  name={\csfmt{gls\-sub\-group\-heading}},
+  user1={\margm{previous level}\margm{level}\margm{parent-label}\margm{group-label}},
+  description={formats the heading for the \idx{sub-group} identified by the
+given label},
+  topics={glossarystylecommands,formattingcommands},
+  note={\styfmt{glossaries-extra} v1.49+},
+  category={command}
+}
+
+ at bibglscommand{bibglssetlastgrouptitle,
+  name={\csfmt{bib\-gls\-set\-last\-group\-title}},
+  user1={\margm{cs}\margm{specs}},
+  description={sets the last group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at mainglscommand{glsxtrsetgrouptitle,
+  name={\csfmt{gls\-xtr\-set\-group\-title}},
+  user1={\margm{group label}\margm{group title}},
+  description={globally sets the title for the group identified by the given label},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\styfmt{glossaries-extra} v1.14+},
+  category={command}
+}
+
+ at glscommand{glsxtrlocalsetgrouptitle,
+  name={\csfmt{gls\-xtr\-local\-set\-group\-title}},
+  user1={\margm{group label}\margm{group title}},
+  description={locally sets the title for the group identified by the given label},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\styfmt{glossaries-extra} v1.24+},
+  category={command}
+}
+
+ at bibglscommand{bibglsgrouplevel,
+  name={\csfmt{bib\-gls\-group\-level}},
+  user1={\margm{label}{n}},
+  description={expands to the \idx{sub-group} label for hierarchical level \meta{n}
+  where \meta{label} is the label that would normally be applied to
+  level~0},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglshiersubgrouptitle,
+  name={\csfmt{bib\-gls\-hier\-sub\-group\-title}},
+  user1={\marg{level}\marg{parent}\marg{title}},
+  description={formats the title for a \idx{hiergroup} where the
+   normal non-hierarchical title would be \meta{title}},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssetlettergrouptitle,
+  name={\csfmt{bib\-gls\-set\-letter\-group\-title}},
+  user1={\marg{\margm{title}\margm{letter}\margm{id}\margm{type}}},
+  description={sets the letter group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglslettergroup,
+  name={\csfmt{bib\-gls\-letter\-group}},
+  user1={\margm{title}\margm{letter}\margm{id}\margm{type}},
+  description={expands to the letter group label},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglslettergrouptitle,
+  name={\csfmt{bib\-gls\-letter\-group\-title}},
+  user1={\margm{title}\margm{letter}\margm{id}\margm{type}},
+  description={expands to the letter group title},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssetlettergrouptitlehier,
+  name={\csfmt{bib\-gls\-set\-letter\-group\-title\-hier}},
+  user1={\marg{\margm{title}\margm{letter}\margm{id}\margm{type}\margm{parent}\margm{level}}},
+  description={sets the hierarchical letter group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglslettergrouphier,
+  name={\csfmt{bib\-gls\-letter\-group\-hier}},
+  user1={\margm{title}\margm{letter}\margm{id}\margm{type}\margm{parent}\margm{level}},
+  description={expands to the hierarchical letter group label},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglslettergrouptitlehier,
+  name={\csfmt{bib\-gls\-letter\-group\-title\-hier}},
+  user1={\margm{title}\margm{letter}\margm{id}\margm{type}\margm{parent}\margm{level}},
+  description={expands to the hierarchical letter group title},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssetothergrouptitle,
+  name={\csfmt{bib\-gls\-set\-other\-group\-title}},
+  user1={\marg{\margm{character}\margm{id}\margm{type}}},
+  description={sets the non-letter group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsothergroup,
+  name={\csfmt{bib\-gls\-other\-group}},
+  user1={\margm{character}\margm{id}\margm{type}},
+  description={expands to the non-letter group label},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsothergrouptitle,
+  name={\csfmt{bib\-gls\-other\-group\-title}},
+  user1={\margm{character}\margm{id}\margm{type}},
+  description={expands to the non-letter group title},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssetothergrouptitlehier,
+  name={\csfmt{bib\-gls\-set\-other\-group\-title\-hier}},
+  user1={\marg{\margm{character}\margm{id}\margm{type}\margm{parent}\margm{level}}},
+  description={sets the hierarchical non-letter group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsothergrouphier,
+  name={\csfmt{bib\-gls\-other\-group\-hier}},
+  user1={\margm{character}\margm{id}\margm{type}\margm{parent}\margm{level}},
+  description={expands to the hierarchical non-letter group label},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsothergrouptitlehier,
+  name={\csfmt{bib\-gls\-other\-group\-title\-hier}},
+  user1={\margm{character}\margm{id}\margm{type}\margm{parent}\margm{level}},
+  description={expands to the hierarchical non-letter group title},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssetemptygrouptitle,
+  name={\csfmt{bib\-gls\-set\-empty\-group\-title}},
+  user1={\marg{\margm{type}}},
+  description={sets the empty group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsemptygroup,
+  name={\csfmt{bib\-gls\-empty\-group}},
+  user1={\margm{type}},
+  description={expands to the empty group label},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsemptygrouptitle,
+  name={\csfmt{bib\-gls\-empty\-group\-title}},
+  user1={\margm{type}},
+  description={expands to the empty group title},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssetemptygrouptitlehier,
+  name={\csfmt{bib\-gls\-set\-empty\-group\-title\-hier}},
+  user1={\marg{\margm{type}\margm{parent}\margm{level}}},
+  description={sets the hierarchical empty group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsemptygrouphier,
+  name={\csfmt{bib\-gls\-empty\-group\-hier}},
+  user1={\margm{type}\margm{parent}\margm{level}},
+  description={expands to the hierarchical empty group label},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsemptygrouptitlehier,
+  name={\csfmt{bib\-gls\-empty\-group\-title\-hier}},
+  user1={\margm{type}\margm{parent}\margm{level}},
+  description={expands to the hierarchical empty group title},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssetunicodegrouptitle,
+  name={\csfmt{bib\-gls\-set\-unicode\-group\-title}},
+  user1={\marg{\margm{label}\margm{character}\margm{id}\margm{type}}},
+  description={sets the Unicode script, category or character code
+group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsunicodegroup,
+  name={\csfmt{bib\-gls\-unicode\-group}},
+  user1={\margm{label}\margm{character}\margm{id}\margm{type}},
+  description={expands to the Unicode script or category or
+character code group label},
+  note={\bibgls},
+  topics={glossarystylecommands,groupcommands},
+  category={command}
+}
+
+ at bibglscommand{bibglsunicodegrouptitle,
+  name={\csfmt{bib\-gls\-unicode\-group\-title}},
+  user1={\margm{label}\margm{character}\margm{id}\margm{type}},
+  description={expands to the Unicode script or category or
+character code group label},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssetunicodegrouptitlehier,
+  name={\csfmt{bib\-gls\-set\-unicode\-group\-title\-hier}},
+  user1={\marg{\margm{label}\margm{character}\margm{id}\margm{type}\margm{parent}\margm{level}}},
+  description={sets the Unicode script, category or character code
+ hierarchical group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsunicodegrouphier,
+  name={\csfmt{bib\-gls\-unicode\-group\-hier}},
+  user1={\margm{label}\margm{character}\margm{id}\margm{type}\margm{parent}\margm{level}},
+  description={expands to the Unicode script or category or
+character code hierarchical group label},
+  note={\bibgls},
+  topics={glossarystylecommands,groupcommands},
+  category={command}
+}
+
+ at bibglscommand{bibglsunicodegrouptitlehier,
+  name={\csfmt{bib\-gls\-unicode\-group\-title\-hier}},
+  user1={\margm{label}\margm{character}\margm{id}\margm{type}\margm{parent}\margm{level}},
+  description={expands to the Unicode script or category or
+character code hierarchical group label},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssetnumbergrouptitle,
+  name={\csfmt{bib\-gls\-set\-number\-group\-title}},
+  user1={\marg{\margm{value}\margm{id}\margm{type}}},
+  description={sets the number group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsnumbergroup,
+  name={\csfmt{bib\-gls\-number\-group}},
+  user1={\margm{value}\margm{id}\margm{type}},
+  description={expands to the number group label},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsnumbergrouptitle,
+  name={\csfmt{bib\-gls\-number\-group\-title}},
+  user1={\margm{value}\margm{id}\margm{type}},
+  description={expands to the number group title},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssetnumbergrouptitlehier,
+  name={\csfmt{bib\-gls\-set\-number\-group\-title\-hier}},
+  user1={\marg{\margm{value}\margm{id}\margm{type}\margm{parent}\margm{level}}},
+  description={sets the hierarchical number group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsnumbergrouphier,
+  name={\csfmt{bib\-gls\-number\-group\-hier}},
+  user1={\margm{value}\margm{id}\margm{type}\margm{parent}\margm{level}},
+  description={expands to the hierarchical number group label},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsnumbergrouptitlehier,
+  name={\csfmt{bib\-gls\-number\-group\-title\-hier}},
+  user1={\margm{value}\margm{id}\margm{type}\margm{parent}\margm{level}},
+  description={expands to the hierarchical number group title},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssetmergedgrouptitle,
+  name={\csfmt{bib\-gls\-set\-merged\-group\-title}},
+  user1={\marg{\margm{id}\margm{type}\margm{n}\margm{g$_1$}\marg{\meta{g$_2$}\ldots\marg{g$_{n-1}$}}\margm{g$_n$}}},
+  description={sets the merged group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsmergedgroup,
+  name={\csfmt{bib\-gls\-merged\-group}},
+  user1={\margm{id}\margm{type}\margm{n}\margm{g$_1$}\marg{\meta{g$_2$}\ldots\marg{g$_{n-1}$}}\margm{g$_n$}},
+  description={expands to the merged group label},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsmergedgrouptitle,
+  name={\csfmt{bib\-gls\-merged\-group\-title}},
+  user1={\margm{id}\margm{type}\margm{n}\margm{g$_1$}\marg{\meta{g$_2$}\ldots\marg{g$_{n-1}$}}\margm{g$_n$}},
+  description={expands to the merged group title},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsmergedgroupfmt,
+  name={\csfmt{bib\-gls\-merged\-group\-fmt}},
+  user1={\margm{n}\margm{g$_1$}\marg{\meta{g$_2$}\ldots\marg{g$_{n-1}$}}\margm{g$_n$}},
+  description={used by \gls{bibglsmergedgrouptitle} and
+    \gls{bibglsmergedgrouphierfmt} to format the title},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsmergedgrouphierfmt,
+  name={\csfmt{bib\-gls\-merged\-group\-hier\-fmt}},
+  user1={\margm{n}\margm{g$_1$}\marg{\meta{g$_2$}\ldots\marg{g$_{n-1}$}}\margm{g$_n$}},
+  description={used by \gls{bibglsmergedgrouptitlehier} to format the title},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssetmergedgrouptitlehier,
+  name={\csfmt{bib\-gls\-set\-merged\-group\-title\-hier}},
+  user1={\marg{\margm{id}\margm{type}\margm{n}\margm{g$_1$}\marg{\meta{g$_2$}\ldots\marg{g$_{n-1}$}}\margm{g$_n$}\margm{parent}\margm{level}}},
+  description={sets the merged  hierarchicalgroup title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsmergedgrouphier,
+  name={\csfmt{bib\-gls\-merged\-group\-hier}},
+  user1={\margm{id}\margm{type}\margm{n}\margm{g$_1$}\marg{\meta{g$_2$}\ldots\marg{g$_{n-1}$}}\margm{g$_n$}\margm{parent}\margm{level}},
+  description={expands to the merged hierarchical group label},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsmergedgrouptitlehier,
+  name={\csfmt{bib\-gls\-merged\-group\-title\-hier}},
+  user1={\margm{id}\margm{type}\margm{n}\margm{g$_1$}\marg{\meta{g$_2$}\ldots\marg{g$_{n-1}$}}\margm{g$_n$}\margm{parent}\margm{level}},
+  description={expands to the merged hierarchical group title},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssetdatetimegrouptitle,
+  name={\csfmt{bib\-gls\-set\-date\-time\-group\-title}},
+  user1={\marg{\margm{YYYY}\margm{MM}\margm{DD}\margm{hh}\margm{mm}\margm{ss}\margm{zone}\margm{title}\margm{group\dhyphen id}\margm{type}}},
+  description={sets the date-time group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsdatetimegroup,
+  name={\csfmt{bib\-gls\-date\-time\-group}},
+  user1={\margm{YYYY}\margm{MM}\margm{DD}\margm{hh}\margm{mm}\margm{ss}\margm{zone}\margm{title}\margm{group\dhyphen id}\margm{type}},
+  description={expands to the date-time group label},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsdatetimegrouptitle,
+  name={\csfmt{bib\-gls\-date\-time\-group\-title}},
+  user1={\margm{YYYY}\margm{MM}\margm{DD}\margm{hh}\margm{mm}\margm{ss}\margm{zone}\margm{title}\margm{group\dhyphen id}\margm{type}},
+  description={expands to the date-time group title},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssetdatetimegrouptitlehier,
+  name={\csfmt{bib\-gls\-set\-date\-time\-group\-title\-hier}},
+  user1={\marg{\margm{YYYY}\margm{MM}\margm{DD}\margm{hh}\margm{mm}\margm{ss}\margm{zone}\margm{title}\margm{group\dhyphen id}\margm{type}\margm{parent}\margm{level}}},
+  description={sets the hierarchical date-time group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsdatetimegrouphier,
+  name={\csfmt{bib\-gls\-date\-time\-group\-hier}},
+  user1={\margm{YYYY}\margm{MM}\margm{DD}\margm{hh}\margm{mm}\margm{ss}\margm{zone}\margm{title}\margm{group\dhyphen id}\margm{type}\margm{parent}\margm{level}},
+  description={expands to the hierarchical date-time group label},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsdatetimegrouptitlehier,
+  name={\csfmt{bib\-gls\-date\-time\-group\-title\-hier}},
+  user1={\margm{YYYY}\margm{MM}\margm{DD}\margm{hh}\margm{mm}\margm{ss}\margm{zone}\margm{title}\margm{group\dhyphen id}\margm{type}\margm{parent}\margm{level}},
+  description={expands to the hierarchical date-time group title},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsdatetimegrouphierfinalargs,
+  name={\csfmt{bib\-gls\-date\-time\-group\-hier\-final\-args}},
+  user1={\margm{type}\margm{parent}\margm{level}},
+  description={used as a supporting command for
+\gls{bibglsdatetimegrouphier} to pick up the final arguments},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsdatetimegrouptitlehierfinalargs,
+  name={\csfmt{bib\-gls\-date\-time\-group\-title\-hier\-final\-args}},
+  user1={\marg{date}\margm{type}\margm{parent}\margm{level}},
+  description={used as a supporting command for
+\gls{bibglsdatetimegrouptitlehier} to pick up the final arguments},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssetdategrouptitle,
+  name={\csfmt{bib\-gls\-set\-date\-group\-title}},
+  user1={\marg{\margm{YYYY}\margm{MM}\margm{DD}\margm{G}\margm{title}\margm{group\dhyphen id}\margm{type}}},
+  description={sets the date (no time) group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsdategroup,
+  name={\csfmt{bib\-gls\-date\-group}},
+  user1={\margm{YYYY}\margm{MM}\margm{DD}\margm{G}\margm{title}\margm{group\dhyphen id}\margm{type}},
+  description={expands to the date group label},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsdategrouptitle,
+  name={\csfmt{bib\-gls\-date\-group\-title}},
+  user1={\margm{YYYY}\margm{MM}\margm{DD}\margm{G}\margm{title}\margm{group\dhyphen id}\margm{type}},
+  description={expands to the date group title},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssetdategrouptitlehier,
+  name={\csfmt{bib\-gls\-set\-date\-group\-title\-hier}},
+  user1={\marg{\margm{YYYY}\margm{MM}\margm{DD}\margm{G}\margm{title}\margm{group\dhyphen id}\margm{type}\margm{parent}\margm{level}}},
+  description={sets the hierarchical date (no time) group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsdategrouphier,
+  name={\csfmt{bib\-gls\-date\-group\-hier}},
+  user1={\margm{YYYY}\margm{MM}\margm{DD}\margm{G}\margm{title}\margm{group\dhyphen id}\margm{type}\margm{parent}\margm{level}},
+  description={expands to the hierarchical date group label},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsdategrouptitlehier,
+  name={\csfmt{bib\-gls\-date\-group\-title\-hier}},
+  user1={\margm{YYYY}\margm{MM}\margm{DD}\margm{G}\margm{title}\margm{group\dhyphen id}\margm{type}\margm{parent}\margm{level}},
+  description={expands to the hierarchical date group title},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssettimegrouptitle,
+  name={\csfmt{bib\-gls\-set\-time\-group\-title}},
+  user1={\marg{\margm{hh}\margm{mm}\margm{ss}\margm{zone}\margm{title}\margm{group\dhyphen id}\margm{type}}},
+  description={sets the time (no date) group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglstimegroup,
+  name={\csfmt{bib\-gls\-time\-group}},
+  user1={\margm{hh}\margm{mm}\margm{ss}\margm{zone}\margm{title}\margm{group\dhyphen id}\margm{type}},
+  description={expands to the time group label},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglstimegrouptitle,
+  name={\csfmt{bib\-gls\-time\-group\-title}},
+  user1={\margm{hh}\margm{mm}\margm{ss}\margm{zone}\margm{title}\margm{group\dhyphen id}\margm{type}},
+  description={expands to the time group title},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssettimegrouptitlehier,
+  name={\csfmt{bib\-gls\-set\-time\-group\-title\-hier}},
+  user1={\marg{\margm{hh}\margm{mm}\margm{ss}\margm{zone}\margm{title}\margm{group\dhyphen id}\margm{type}\margm{parent}\margm{level}}},
+  description={sets the hierarchical time (no date) group title},
+  topics={glossarystylecommands,assigncommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglstimegrouphier,
+  name={\csfmt{bib\-gls\-time\-group\-hier}},
+  user1={\margm{hh}\margm{mm}\margm{ss}\margm{zone}\margm{title}\margm{group\dhyphen id}\margm{type}\margm{parent}\margm{level}},
+  description={expands to the hierarchical time group label},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglstimegrouptitlehier,
+  name={\csfmt{bib\-gls\-time\-group\-title\-hier}},
+  user1={\margm{hh}\margm{mm}\margm{ss}\margm{zone}\margm{title}\margm{group\dhyphen id}\margm{type}\margm{parent}\margm{level}},
+  description={expands to the hierarchical time group title},
+  topics={glossarystylecommands,groupcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglshypergroup,
+  name={\csfmt{bib\-gls\-hyper\-group}},
+  user1={\margm{type}\margm{group\dhyphen id}},
+  description={creates group navigation information},
+  topics={glossarystylecommands,groupcommands,linkcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsflattenedhomograph,
+  name={\csfmt{bib\-gls\-flattened\-homograph}},
+  user1={\margm{name}\margm{parent label}},
+  description={expands to the flattened entry's new name},
+  topics={glossarystylecommands,formattingcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsflattenedchildpresort,
+  name={\csfmt{bib\-gls\-flattened\-child\-pre\-sort}},
+  user1={\margm{child name}\margm{parent name}},
+  description={expands to the pre-sort flattened child entry's new name},
+  topics={glossarystylecommands,formattingcommands},
+  note={\bibgls\texparserdefnote},
+  category={command}
+}
+
+ at bibglscommand{bibglsflattenedchildpostsort,
+  name={\csfmt{bib\-gls\-flattened\-child\-post\-sort}},
+  user1={\margm{parent name}\margm{child name}},
+  description={expands to the post-sort flattened child entry's new
+name},
+  topics={glossarystylecommands,formattingcommands},
+  note={\bibgls\texparserdefnote},
+  category={command}
+}
+
+ at bibglscommand{bibglssetwidest,
+  name={\csfmt{bib\-gls\-set\-widest}},
+  user1={\margm{level}\margm{name}},
+  description={sets the widest name},
+  topics={glossarystylecommands,assigncommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssetwidestfortype,
+  name={\csfmt{bib\-gls\-set\-widest\-for\-type}},
+  user1={\margm{type}\margm{level}\margm{name}},
+  description={sets the widest name for the given glossary type},
+  topics={glossarystylecommands,assigncommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssetwidesttoplevelfallback,
+  name={\csfmt{bib\-gls\-set\-widest\-top\-level\-fallback}},
+  user1={\margm{glossary list}},
+  description={fallback used instead of \csref{bibglssetwidest}
+   in the event that \bibgls\ can't determine the widest name
+   where there are only top level entries,
+   where \meta{glossary list} is a comma-separated list
+   of glossary labels},
+  topics={glossarystylecommands,assigncommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssetwidestfallback,
+  name={\csfmt{bib\-gls\-set\-widest\-fallback}},
+  user1={\margm{glossary list}},
+  description={fallback used instead of \csref{bibglssetwidest}
+   in the event that \bibgls\ can't determine the widest name,
+   where \meta{glossary list} is a comma-separated list
+   of glossary labels},
+  topics={glossarystylecommands,assigncommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssetwidestfortypefallback,
+  name={\csfmt{bib\-gls\-set\-widest\-for\-type\-fallback}},
+  user1={\margm{type}},
+  description={fallback used instead of \csref{bibglssetwidestfortype}
+   in the event that \bibgls\ can't determine the widest name},
+  topics={glossarystylecommands,assigncommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglssetwidesttoplevelfortypefallback,
+  name={\csfmt{bib\-gls\-set\-widest\-top\-level\-for\-type\-fallback}},
+  user1={\margm{type}},
+  description={fallback used instead of \csref{bibglssetwidestfortype}
+   in the event that \bibgls\ can't determine the widest name
+   where there are only top-level entries},
+  topics={glossarystylecommands,assigncommands},
+  note={\bibgls},
+  category={command}
+}
+
+
+ at bibglscommand{bibglscontributorlist,
+  name={\csfmt{bib\-gls\-contributor\-list}},
+  user1={\margm{list}\margm{number}},
+  description={used to markup a list of names from a field 
+   that was converted from \BibTeX's contributor syntax},
+  topics={formattingcommands},
+  note={\bibgls\texparserdefnote},
+  category={command}
+}
+
+ at bibglscommand{bibglscontributor,
+  name={\csfmt{bib\-gls\-contributor}},
+  user1={\margm{forenames}\margm{von-part}\margm{surname}\margm{suffix}},
+  description={used to markup a contributor's name that was converted from
+   \BibTeX's contributor syntax},
+  topics={formattingcommands},
+  note={\bibgls\texparserdefnote},
+  category={command}
+}
+
+ at bibglscommand{bibglsdate,
+  name={\csfmt{bib\-gls\-date}},
+  user1={\margm{year}\margm{month}\margm{day-of-month}\margm{day-of-week}\margm{day-of-year}\margm{era}\margm{original}},
+  description={used to markup a date converted from a field value},
+  topics={formattingcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsdatetime,
+  name={\csfmt{bib\-gls\-date\-time}},
+  user1={\margm{year}\margm{month}\margm{day-of-month}\margm{day-of-week}\margm{day-of-year}\margm{era}\margm{hour}\margm{minute}\margm{second}\margm{millisec}\margm{dst}\margm{zone}\margm{original}},
+  description={used to markup a date-time instance converted from a field value},
+  topics={formattingcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsdatetimeremainder,
+  name={\csfmt{bib\-gls\-date\-time\-remainder}},
+  user1={\margm{millisec}\margm{dst}\margm{zone}\margm{original}},
+  description={used internally to pick up the final four arguments of
+   \csref{bibglsdatetime}},
+  topics={formattingcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglstime,
+  name={\csfmt{bib\-gls\-time}},
+  user1={\margm{hour}\margm{minute}\margm{second}\margm{millisec}\margm{dst}\margm{zone}\margm{original}},
+  description={used to markup a time converted from a field value},
+  topics={formattingcommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglshashchar,
+  name={\csfmt{bib\-gls\-hash\-char}},
+  user1={},
+  description={expands to a literal hash character \idx{hashchar}},
+  topics={charcommands},
+  note={\bibgls\texparserdefnote},
+  category={command}
+}
+
+ at bibglscommand{bibglsaposchar,
+  name={\csfmt{bib\-gls\-apos\-char}},
+  user1={},
+  description={expands to a single-quote (\idx{aposchar}) character},
+  topics={charcommands},
+  note={\bibgls\texparserdefnote},
+  category={command}
+}
+
+ at bibglscommand{bibglsdoublequotechar,
+  name={\csfmt{bib\-gls\-double\-quote\-char}},
+  user1={},
+  description={expands to a double-quote (\idx{doublequotechar}) character},
+  topics={charcommands},
+  note={\bibgls\texparserdefnote},
+  category={command}
+}
+
+ at bibglscommand{bibglsunderscorechar,
+  name={\csfmt{bib\-gls\-under\-score\-char}},
+  user1={},
+  description={expands to a literal underscore character},
+  topics={charcommands},
+  note={\bibgls\texparserdefnote},
+  category={command}
+}
+
+ at bibglscommand{bibglsdollarchar,
+  name={\csfmt{bib\-gls\-dollar\-char}},
+  user1={},
+  description={expands to a literal dollar character},
+  topics={charcommands},
+  note={\bibgls\texparserdefnote},
+  category={command}
+}
+
+ at bibglscommand{bibglsampersandchar,
+  name={\csfmt{bib\-gls\-amper\-sand\-char}},
+  user1={},
+  description={expands to a literal ampersand character},
+  topics={charcommands},
+  note={\bibgls\texparserdefnote},
+  category={command}
+}
+
+ at bibglscommand{bibglscircumchar,
+  name={\csfmt{bib\-gls\-circum\-char}},
+  user1={},
+  description={expands to a literal circumflex character},
+  topics={charcommands},
+  note={\bibgls\texparserdefnote},
+  category={command}
+}
+
+ at bibglscommand{bibglshrefchar,
+  name={\csfmt{bib\-gls\-href\-char}},
+  user1={\margm{hex}\margm{char}},
+  description={expands to a literal percent character followed by
+\meta{hex}},
+  topics={charcommands},
+  note={\bibgls\texparserdefnote},
+  category={command}
+}
+
+ at bibglscommand{bibglshrefunicode,
+  name={\csfmt{bib\-gls\-href\-unicode}},
+  user1={\margm{hex}\margm{char}},
+  description={expands to \meta{char} by default},
+  topics={charcommands},
+  note={\bibgls\texparserdefnote},
+  category={command}
+}
+
+ at bibglscommand{bibglshexunicodechar,
+  name={\csfmt{bib\-gls\-hex\-unicode\-char}},
+  user1={\margm{hex}},
+  description={produces the character with the given hexadecimal code},
+  topics={charcommands},
+  note={\bibgls\texparserdefnote},
+  category={command}
+}
+
+ at bibglscommand{bibglsprimaryprefixlabel,
+  name={\csfmt{bib\-gls\-primary\-prefix\-label}},
+  user1={\margm{prefix}},
+  description={hook provided to pick up the primary prefix, if
+   required},
+  topics={hooks},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsdualprefixlabel,
+  name={\csfmt{bib\-gls\-dual\-prefix\-label}},
+  user1={\margm{prefix}},
+  description={hook provided to pick up the dual prefix, if
+   required},
+  topics={hooks},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglstertiaryprefixlabel,
+  name={\csfmt{bib\-gls\-tertiary\-prefix\-label}},
+  user1={\margm{prefix}},
+  description={hook provided to pick up the tertiary prefix, if
+   required},
+  topics={hooks},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsexternalprefixlabel,
+  name={\csfmt{bib\-gls\-external\-prefix\-label}},
+  user1={\margm{n}\margm{prefix}},
+  description={hook provided to pick up the \meta{n}th external prefix, if
+   required},
+  topics={hooks},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{BibGlsNoCaseChange,
+  name={\csfmt{Bib\-Gls\-No\-Case\-Change}},
+  user1={\margm{text}},
+  description={behaves as \cs{NoCaseChange} within \bibgls, but
+  the definition provided in the \ext{glstex} file simply expands 
+  to \meta{text} in the document without adding the command to the 
+  case-changing exclusion list},
+  topics={formattingcommands,casecommands},
+  note={\bibgls\texparserdefnote},
+  category={command}
+}
+
+ at bibglscommand{bibglsuppercase,
+  name={\csfmt{bib\-gls\-upper\-case}},
+  user1={\margm{text}},
+  description={converts \meta{text} to \idx{uppercase}},
+  topics={formattingcommands,casecommands},
+  note={\bibgls\texparserdefnote},
+  category={command}
+}
+
+ at bibglscommand{bibglslowercase,
+  name={\csfmt{bib\-gls\-lower\-case}},
+  user1={\margm{text}},
+  description={converts \meta{text} to \idx{lowercase}},
+  topics={formattingcommands,casecommands},
+  note={\bibgls\texparserdefnote},
+  category={command}
+}
+
+ at bibglscommand{bibglstitlecase,
+  name={\csfmt{bib\-gls\-title\-case}},
+  user1={\margm{text}},
+  description={converts \meta{text} to \idx{titlecase}},
+  topics={formattingcommands,casecommands},
+  note={\bibgls\texparserdefnote},
+  category={command}
+}
+
+ at bibglscommand{bibglsfirstuc,
+  name={\csfmt{bib\-gls\-first\-uc}},
+  user1={\margm{text}},
+  description={converts the first letter of \meta{text} to \idx{uppercase}},
+  topics={formattingcommands,casecommands},
+  note={\bibgls},
+  category={command}
+}
+
+ at bibglscommand{bibglsdefinitionindex,
+  name={\csfmt{bib\-gls\-definition\-index}},
+  user1={\margm{label}},
+  description={expands to the definition index of the entry
+  identified \meta{label} if \csopt{save-definition-index} is set
+  otherwise expands to empty},
+  topics={fieldrefcommands},
+  note={\bibgls\texparserdefnote},
+  category={command}
+}
+
+ at bibglscommand{bibglsuseindex,
+  name={\csfmt{bib\-gls\-use\-index}},
+  user1={\margm{label}},
+  description={expands to the order of use index of the entry
+  identified \meta{label} if \csopt{save-use-index} is set and
+  the entry has records otherwise expands to empty},
+  topics={fieldrefcommands},
+  note={\bibgls\texparserdefnote},
+  category={command}
+}
+
+ at mainglscommand{glsexpandfields,
+  name={\csfmt{gls\-expand\-fields}},
+  user1={},
+  description={switches on field expansion},
+  topics={assigncommands,definingterms},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at mainglscommand{glsnoexpandfields,
+  name={\csfmt{gls\-no\-expand\-fields}},
+  user1={},
+  description={switches off field expansion},
+  topics={assigncommands,definingterms},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at mainglscommand{glssetexpandfield,
+  name={\csfmt{gls\-set\-expand\-field}},
+  user1={\margm{field}},
+  description={switches on field expansion for the given field,
+identified by its internal label},
+  topics={assigncommands,definingterms},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at mainglscommand{glssetnoexpandfield,
+  name={\csfmt{gls\-set\-no\-expand\-field}},
+  user1={\margm{field}},
+  description={switches off field expansion for the given field},
+  topics={assigncommands,definingterms},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at mainglscommand{newglossaryentry,
+  name={\csfmt{new\-glossary\-entry}},
+  user1={\margm{label}\margm{\keyvallist}},
+  description={defines a new glossary entry},
+  topics={definingterms},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at mainglscommand{longnewglossaryentry,
+  name={\csfmt{long\-new\-glossary\-entry}},
+  user1={\margm{label}\margm{\keyvallist}\margm{description}},
+  description={defines a new glossary entry and appends
+   \csfmt{leavemode}\csfmt{unskip}\cs{nopostdesc} at the end of
+\meta{description}},
+  topics={definingterms},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{longnewglossaryentry*,
+  name={\csfmt{long\-new\-glossary\-entry*}},
+  user1={\margm{label}\margm{\keyvallist}\margm{description}},
+  description={defines a new glossary entry without appending any
+extra code to the end of \meta{description}},
+  topics={definingterms},
+  note={\styfmt{glossaries-extra} v1.12+},
+  category={command}
+}
+
+ at mainglscommand{provideglossaryentry,
+  name={\csfmt{provide\-glossary\-entry}},
+  user1={\margm{label}\margm{\keyvallist}},
+  description={defines a new glossary entry if one doesn't
+    already exist with the given label},
+  topics={definingterms},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at mainglscommand{longprovideglossaryentry,
+  name={\csfmt{long\-provide\-glossary\-entry}},
+  user1={\margm{label}\margm{\keyvallist}\margm{description}},
+  description={defines a new glossary entry if one doesn't
+    already exist with the given label},
+  topics={definingterms},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at mainglscommand{newterm,
+  name={\csfmt{new\-term}},
+  user1={\oargm{\keyvallist}\margm{label}},
+  description={defines a new glossary entry where the
+   \field{description} field defaults to empty},
+  topics={definingterms},
+  note={\styfmt{glossaries}'s \styopt{index} package option},
+  category={command}
+}
+
+ at mainglscommand{newabbreviation,
+  name={\csfmt{new\-abbre\-vi\-a\-tion}},
+  user1={\oargm{\keyvallist}\margm{label}\margm{short}\margm{long}},
+  description={defines a new abbreviation},
+  topics={definingterms},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at mainglscommand{newacronym,
+  name={\csfmt{new\-acronym}},
+  user1={\oargm{\keyvallist}\margm{label}\margm{short}\margm{long}},
+  description={defines a new abbreviation. The
+    \styfmt{glossaries-extra} package redefines this to use
+    \csref{newabbreviation} with the \field{category} set to 
+    \code{acronym}},
+  topics={definingterms},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{oldacronym,
+  name={\csfmt{old\-acronym}},
+  user1={\oargm{label}\margm{short}\margm{long}\margm{options}},
+  description={Emulates the way the old \styfmt{glossary} package
+    defined acronyms},
+  topics={definingterms},
+  note={\styfmt{glossaries}},
+  seealso={newacronym},
+  category={command}
+}
+
+ at mainglscommand{glsxtrnewsymbol,
+  name={\csfmt{gls\-xtr\-new\-symbol}},
+  user1={\oargm{\keyvallist}\margm{label}\margm{symbol}},
+  description={defines a new symbol},
+  topics={definingterms},
+  note={\styfmt{glossaries-extra} \styopt{symbols}},
+  category={command}
+}
+
+ at mainglscommand{glsxtrnewnumber,
+  name={\csfmt{gls\-xtr\-new\-number}},
+  user1={\oargm{\keyvallist}\margm{label}},
+  description={defines a new number},
+  topics={definingterms},
+  note={\styfmt{glossaries-extra} \styopt{numbers}},
+  category={command}
+}
+
+ at mainglscommand{newdualentry,
+  name={\csfmt{new\-dual\-entry}},
+  user1={\oargm{\keyvallist}\margm{label}\margm{short}\margm{long}\margm{description}},
+  description={example given in \styfmt{glossaries} user manual},
+  topics={definingterms},
+  category={command}
+}
+
+ at mainglscommand{@gls at hypergroup,
+  name={\csfmt{@gls at hypergroup}},
+  user1={\margm{type}\margm{group id}},
+  description={command written to the \ext{aux} file that identifies that the given group was used in the
+   glossary on the previous run},
+  topics={groupcommands,internalcommands,auxcommands},
+  note={\styfmt{glossary-hypernav}},
+  category={command}
+}
+
+ at mainglscommand{glsxtr at resource,
+  name={\csfmt{glsxtr at resource}},
+  user1={\margm{options}\margm{filename}},
+  description={this internal command is written to the \ext{aux}
+file by \csref{glsxtrresourcefile}
+   to provide \bibgls\ with the resource information},
+  topics={internalcommands,auxcommands},
+  note={\styfmt{glossaries-extra} v1.08+},
+  category={command}
+}
+
+ at mainglscommand{glsxtr at wrglossarylocation,
+  name={\csfmt{gls\-xtr\- at wr\-glossary\-location}},
+  user1={\margm{n}\margm{page}},
+  description={This command simply expands to \meta{n}, the value of
+the \counter{wrglossary} counter for the given page},
+  topics={internalcommands,loclistcommands},
+  note={\styfmt{glossaries-extra-bib2gls} v1.29+},
+  category={command}
+}
+
+ at mainglscommand{GlsXtrIndexCounterLink,
+  name={\csfmt{Gls\-Xtr\-Index\-Counter\-Link}},
+  user1={\margm{text}\margm{label}},
+  description={Creates a hyperlink to the \counter{wrglossary}
+location obtained from the \field{indexcounter} field},
+  topics={linkcommands,loclistcommands},
+  note={\styfmt{glossaries-extra-bib2gls} v1.29+},
+  category={command}
+}
+
+ at mainglscommand{GlsXtrDualBackLink,
+  name={\csfmt{Gls\-Xtr\-Dual\-Back\-Link}},
+  user1={\margm{text}\margm{label}},
+  description={Creates a hyperlink to the dual entry whose label is
+   obtained from the field given by \csref{GlsXtrDualField}},
+  topics={linkcommands,fieldrefcommands},
+  note={\styfmt{glossaries-extra-bib2gls} v1.30+},
+  category={command}
+}
+
+ at mainglscommand{GlsXtrDualField,
+  name={\csfmt{Gls\-Xtr\-Dual\-Field}},
+  user1={},
+  description={The field used to store the dual label. This defaults 
+   to \field{dual} but will need to be redefined if a different
+   value is given by \csopt{dual-field}},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries-extra-bib2gls} v1.30+},
+  category={command}
+}
+
+ at mainglscommand{glsxtrfmt,
+  name={\csfmt{gls\-xtr\-fmt}},
+  user1={\oargm{options}\margm{label}\margm{text}},
+  description={formats the given text according to the formatting 
+   command identified by the value of the field obtained 
+   from \cs{GlsXtrFmtField}},
+  topics={fieldrefcommands,linkcommands,formattingcommands},
+  note={\styfmt{glossaries-extra} v1.12+},
+  seealso={glsxtrfmtdisplay},
+  category={command}
+}
+
+ at mainglscommand{glsxtrfmt*,
+  name={\csfmt{gls\-xtr\-fmt*}},
+  user1={\oargm{options}\margm{label}\margm{text}\oargm{insert}},
+  description={like \csref{glsxtrfmt} but inserts extra
+   material into the link text but outside of the formatting command},
+  topics={fieldrefcommands,linkcommands,formattingcommands},
+  seealso={glsxtrfmtdisplay},
+  note={\styfmt{glossaries-extra} v1.23+},
+  category={command}
+}
+
+ at mainglscommand{glsxtrentryfmt,
+  name={\csfmt{gls\-xtr\-entry\-fmt}},
+  user1={\margm{label}\margm{text}},
+  description={alternative to \csref{glsxtrfmt} for use in
+    section headings},
+  topics={fieldrefcommands,formattingcommands},
+  note={\styfmt{glossaries-extra} v1.12+},
+  category={command}
+}
+
+ at glscommand{glsxtrfmtdisplay,
+  name={\csfmt{gls\-xtr\-fmt\-display}},
+  user1={\margm{cs-name}\margm{text}\margm{insert}},
+  description={used by \csref{glsxtrfmt} to format the given
+\meta{text} where \meta{cs-name} is obtained from the field
+identified by \cs{GlsXtrFmtField} and \meta{insert} is empty for the
+unstarred \csref{glsxtrfmt} and the final optional argument of the
+starred version \csref{glsxtrfmt*}},
+  topics={formattingcommands},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at mainglscommand{BibGlsOptions,
+  name={\csfmt{Bib\-Gls\-Options}},
+  user1={\margm{options}},
+  description={simply writes global \bibgls\ \meta{options} to the
+\ext{aux} file},
+  topics={indexing},
+  note={\styfmt{glossaries-extra} v1.54+},
+  category={command}
+}
+
+ at mainglscommand{glsxtrresourcefile,
+  name={\csfmt{gls\-xtr\-resource\-file}},
+  user1={\oargm{options}\margm{filename}},
+  description={input the \ext{glstex} file created by \bibgls\ and
+   write resource instructions to the \ext{aux} file},
+  topics={indexing},
+  note={\styfmt{glossaries-extra} v1.08+},
+  seealso={resourceoptions,GlsXtrLoadResources},
+  category={command}
+}
+
+
+ at index{resourceoptions,
+  name={resource options},
+  text={resource option}
+}
+
+ at resourceoption{opt.charset,
+   name={\csoptfmt{charset}},
+   user1={\meta{encoding-name}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.interpret-preamble,
+   name={\csoptfmt{interpret\dhyphen preamble}},
+   user1={\meta{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.interpret-label-fields,
+   name={\csoptfmt{interpret\dhyphen label\dhyphen fields}},
+   user1={\meta{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.primary-dual-dependency,
+   name={\csoptfmt{primary\dhyphen dual\dhyphen dependency}},
+   user1={\meta{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.strip-missing-parents,
+   name={\csoptfmt{strip\dhyphen missing\dhyphen parents}},
+   user1={\meta{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.missing-parents,
+   name={\csoptfmt{missing\dhyphen parents}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.missing-parent-category,
+   name={\csoptfmt{missing\dhyphen parent\dhyphen category}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.copy-alias-to-see,
+   name={\csoptfmt{copy\dhyphen alias\dhyphen to\dhyphen see}},
+   user1={\meta{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.write-preamble,
+   name={\csoptfmt{write\dhyphen preamble}},
+   user1={\meta{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.set-widest,
+   name={\csoptfmt{set\dhyphen widest}},
+   user1={\meta{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.duplicate-label-suffix,
+   name={\csoptfmt{duplicate\dhyphen label\dhyphen suffix}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.entry-type-aliases,
+   name={\csoptfmt{entry\dhyphen type\dhyphen aliases}},
+   user1={\meta{\keyvallist}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.unknown-entry-alias,
+   name={\csoptfmt{unknown\dhyphen entry\dhyphen alias}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.field-aliases,
+   name={\csoptfmt{field\dhyphen aliases}},
+   user1={\meta{\keyvallist}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.replicate-fields,
+   name={\csoptfmt{replicate\dhyphen fields}},
+   user1={\meta{\keyvallist}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.replicate-override,
+   name={\csoptfmt{replicate\dhyphen override}},
+   user1={\margm{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.replicate-missing-field-action,
+   name={\csoptfmt{replicate\dhyphen missing\dhyphen field\dhyphen action}},
+   user1={\margm{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.locale,
+   name={\csoptfmt{locale}},
+   user1={\meta{lang tag}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.assign-fields,
+   name={\csoptfmt{assign\dhyphen fields}},
+   user1={\meta{\keyvallist}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.assign-override,
+   name={\csoptfmt{assign\dhyphen override}},
+   user1={\margm{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.assign-missing-field-action,
+   name={\csoptfmt{assign\dhyphen missing\dhyphen field\dhyphen action}},
+   user1={\margm{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.copy-to-glossary,
+   name={\csoptfmt{copy\dhyphen to\dhyphen glossary}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.copy-to-glossary-missing-field-action,
+   name={\csoptfmt{copy\dhyphen to\dhyphen glossary\dhyphen missing\dhyphen field\dhyphen action}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.compound-options-global,
+   name={\csoptfmt{compound\dhyphen options\dhyphen global}},
+   user1={\margm{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.compound-dependent,
+   name={\csoptfmt{compound\dhyphen dependent}},
+   user1={\margm{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.compound-add-hierarchy,
+   name={\csoptfmt{compound\dhyphen add\dhyphen hierarchy}},
+   user1={\margm{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.compound-has-records,
+   name={\csoptfmt{compound\dhyphen has\dhyphen records}},
+   user1={\margm{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.compound-adjust-name,
+   name={\csoptfmt{compound\dhyphen adjust\dhyphen name}},
+   user1={\margm{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.compound-write-def,
+   name={\csoptfmt{compound\dhyphen write\dhyphen def}},
+   user1={\margm{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.compound-main-type,
+   name={\csoptfmt{compound\dhyphen main\dhyphen type}},
+   user1={\margm{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.compound-other-type,
+   name={\csoptfmt{compound\dhyphen other\dhyphen type}},
+   user1={\margm{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.compound-type-override,
+   name={\csoptfmt{compound\dhyphen type\dhyphen override}},
+   user1={\margm{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.labelify,
+   name={\csoptfmt{labelify}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.labelify-list,
+   name={\csoptfmt{labelify\dhyphen list}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dependency-fields,
+   name={\csoptfmt{dependency\dhyphen fields}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.labelify-replace,
+   name={\csoptfmt{labelify\dhyphen replace}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.wordify-math-greek,
+   name={\csoptfmt{wordify\dhyphen math\dhyphen greek}},
+   user1={\meta{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.wordify-math-symbol,
+   name={\csoptfmt{wordify\dhyphen math\dhyphen symbol}},
+   user1={\meta{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.sort-replace,
+   name={\csoptfmt{sort\dhyphen replace}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-sort-replace,
+   name={\csoptfmt{dual\dhyphen sort\dhyphen replace}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-sort-replace,
+   name={\csoptfmt{secondary\dhyphen sort\dhyphen replace}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.action,
+   name={\csoptfmt{action}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.copy-action-group-field,
+   name={\csoptfmt{copy\dhyphen action\dhyphen group\dhyphen field}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.src,
+   name={\csoptfmt{src}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.selection,
+   name={\csoptfmt{selection}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.match,
+   name={\csoptfmt{match}},
+   user1={\meta{\keyvallist}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.match-op,
+   name={\csoptfmt{match\dhyphen op}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.match-action,
+   name={\csoptfmt{match\dhyphen action}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.not-match,
+   name={\csoptfmt{not\dhyphen match}},
+   user1={\meta{\keyvallist}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-match,
+   name={\csoptfmt{secondary\dhyphen match}},
+   user1={\meta{\keyvallist}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-match-op,
+   name={\csoptfmt{secondary\dhyphen match\dhyphen op}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-match-action,
+   name={\csoptfmt{secondary\dhyphen match\dhyphen action}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-not-match,
+   name={\csoptfmt{secondary\dhyphen not\dhyphen match}},
+   user1={\meta{\keyvallist}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.limit,
+   name={\csoptfmt{limit}},
+   user1={\meta{number}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.flatten,
+   name={\csoptfmt{flatten}},
+   user1={\meta{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.flatten-lonely,
+   name={\csoptfmt{flatten\dhyphen lonely}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.flatten-lonely-rule,
+   name={\csoptfmt{flatten\dhyphen lonely\dhyphen rule}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.flatten-lonely-condition,
+   name={\csoptfmt{flatten\dhyphen lonely\dhyphen condition}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.flatten-lonely-missing-field-action,
+   name={\csoptfmt{flatten\dhyphen lonely\dhyphen missing\dhyphen field\dhyphen action}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.master,
+   name={\csoptfmt{master}},
+   user1={\meta{name}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.master-resources,
+   name={\csoptfmt{master\dhyphen resources}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.ignore-fields,
+   name={\csoptfmt{ignore\dhyphen fields}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.omit-fields,
+   name={\csoptfmt{omit\dhyphen fields}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.omit-fields-missing-field-action,
+   name={\csoptfmt{omit\dhyphen fields\dhyphen missing\dhyphen field\dhyphen action}},
+   user1={\margm{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.gather-parsed-dependencies,
+   name={\csoptfmt{gather\dhyphen parsed\dhyphen dependencies}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.date-time-fields,
+   name={\csoptfmt{date\dhyphen time\dhyphen fields}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.date-fields,
+   name={\csoptfmt{date\dhyphen fields}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.time-fields,
+   name={\csoptfmt{time\dhyphen fields}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.date-time-field-format,
+   name={\csoptfmt{date\dhyphen time\dhyphen field\dhyphen format}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-date-time-field-format,
+   name={\csoptfmt{dual\dhyphen date\dhyphen time\dhyphen field\dhyphen format}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.date-field-format,
+   name={\csoptfmt{date\dhyphen field\dhyphen format}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-date-field-format,
+   name={\csoptfmt{dual\dhyphen date\dhyphen field\dhyphen format}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.time-field-format,
+   name={\csoptfmt{time\dhyphen field\dhyphen format}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-time-field-format,
+   name={\csoptfmt{dual\dhyphen time\dhyphen field\dhyphen format}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.date-time-field-locale,
+   name={\csoptfmt{date\dhyphen time\dhyphen field\dhyphen locale}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-date-time-field-locale,
+   name={\csoptfmt{dual\dhyphen date\dhyphen time\dhyphen
+field\dhyphen locale}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.date-field-locale,
+   name={\csoptfmt{date\dhyphen field\dhyphen locale}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-date-field-locale,
+   name={\csoptfmt{dual\dhyphen date\dhyphen field\dhyphen locale}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.time-field-locale,
+   name={\csoptfmt{time\dhyphen field\dhyphen locale}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-time-field-locale,
+   name={\csoptfmt{date\dhyphen time\dhyphen field\dhyphen locale}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.bibtex-contributor-fields,
+   name={\csoptfmt{bibtex\dhyphen contributor\dhyphen fields}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.contributor-order,
+   name={\csoptfmt{contributor\dhyphen order}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.category,
+   name={\csoptfmt{category}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.type,
+   name={\csoptfmt{type}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.counter,
+   name={\csoptfmt{counter}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.label-prefix,
+   name={\csoptfmt{label\dhyphen prefix}},
+   user1={\meta{tag}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.cs-label-prefix,
+   name={\csoptfmt{cs\dhyphen label\dhyphen prefix}},
+   user1={\meta{tag}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.record-label-prefix,
+   name={\csoptfmt{record\dhyphen label\dhyphen prefix}},
+   user1={\meta{tag}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.ext-prefixes,
+   name={\csoptfmt{ext\dhyphen prefixes}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.save-original-id,
+   name={\csoptfmt{save\dhyphen original\dhyphen id}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.save-original-id-action,
+   name={\csoptfmt{save\dhyphen original\dhyphen id\dhyphen action}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.save-definition-index,
+   name={\csoptfmt{save\dhyphen definition\dhyphen index}},
+   user1={\meta{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.save-use-index,
+   name={\csoptfmt{save\dhyphen use\dhyphen index}},
+   user1={\meta{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.format-integer-fields,
+   name={\csoptfmt{format\dhyphen integer\dhyphen fields}},
+   user1={\margm{\keyvallist}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.format-decimal-fields,
+   name={\csoptfmt{format\dhyphen decimal\dhyphen fields}},
+   user1={\margm{\keyvallist}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.short-case-change,
+   name={\csoptfmt{short\dhyphen case\dhyphen change}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.long-case-change,
+   name={\csoptfmt{long\dhyphen case\dhyphen change}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.name-case-change,
+   name={\csoptfmt{name\dhyphen case\dhyphen change}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.description-case-change,
+   name={\csoptfmt{description\dhyphen case\dhyphen change}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.field-case-change,
+   name={\csoptfmt{field\dhyphen case\dhyphen change}},
+   user1={\margm{\keyvallist}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.word-boundaries,
+   name={\csoptfmt{word\dhyphen boundaries}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.no-case-change-cs,
+   name={\csoptfmt{no\dhyphen case\dhyphen change\dhyphen cs}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.encapsulate-fields,
+   name={\csoptfmt{encapsulate\dhyphen fields}},
+   user1={\margm{\keyvallist}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.encapsulate-fields*,
+   name={\csoptfmt{encapsulate\dhyphen fields*}},
+   user1={\margm{\keyvallist}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.encapsulate-sort,
+   name={\csoptfmt{encapsulate\dhyphen sort}},
+   user1={\marg{csname}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.prefix-fields,
+   name={\csoptfmt{prefix\dhyphen fields}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.append-prefix-field,
+   name={\csoptfmt{append\dhyphen prefix\dhyphen field}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.append-prefix-field-cs,
+   name={\csoptfmt{append\dhyphen prefix\dhyphen field\dhyphen cs}},
+   user1={\meta{cs}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.append-prefix-field-exceptions,
+   name={\csoptfmt{append\dhyphen prefix\dhyphen field\dhyphen exceptions}},
+   user1={\meta{sequence}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.append-prefix-field-cs-exceptions,
+   name={\csoptfmt{append\dhyphen prefix\dhyphen field\dhyphen cs\dhyphen exceptions}},
+   user1={\meta{sequence}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.append-prefix-field-nbsp-match,
+   name={\csoptfmt{append\dhyphen prefix\dhyphen field\dhyphen nbsp\dhyphen match}},
+   user1={\meta{pattern}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.interpret-fields,
+   name={\csoptfmt{interpret\dhyphen fields}},
+   user1={\margm{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.interpret-fields-action,
+   name={\csoptfmt{interpret\dhyphen fields\dhyphen action}},
+   user1={\margm{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.hex-unicode-fields,
+   name={\csoptfmt{hex\dhyphen unicode\dhyphen fields}},
+   user1={\margm{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.post-description-dot,
+   name={\csoptfmt{post\dhyphen description\dhyphen dot}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.strip-trailing-nopost,
+   name={\csoptfmt{strip\dhyphen trailing\dhyphen nopost}},
+   user1={\meta{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.check-end-punctuation,
+   name={\csoptfmt{check\dhyphen end\dhyphen punctuation}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.sort-label-list,
+   name={\csoptfmt{sort\dhyphen label\dhyphen list}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.group,
+   name={\csoptfmt{group}},
+   user1={\meta{label}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.group-level,
+   name={\csoptfmt{group\dhyphen level}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.merge-small-groups,
+   name={\csoptfmt{merge\dhyphen small\dhyphen groups}},
+   user1={\meta{n}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+
+ at resourceoption{opt.group-formation,
+   name={\csoptfmt{group\dhyphen formation}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-group-formation,
+   name={\csoptfmt{secondary\dhyphen group\dhyphen formation}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-group-formation,
+   name={\csoptfmt{dual\dhyphen group\dhyphen formation}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.save-child-count,
+   name={\csoptfmt{save\dhyphen child\dhyphen count}},
+   user1={\meta{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.save-sibling-count,
+   name={\csoptfmt{save\dhyphen sibling\dhyphen count}},
+   user1={\meta{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.save-root-ancestor,
+   name={\csoptfmt{save\dhyphen root\dhyphen ancestor}},
+   user1={\meta{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.save-original-entrytype,
+   name={\csoptfmt{save\dhyphen original\dhyphen entrytype}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.save-original-entrytype-action,
+   name={\csoptfmt{save\dhyphen original\dhyphen entrytype\dhyphen action}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.short-plural-suffix,
+   name={\csoptfmt{short\dhyphen plural\dhyphen suffix}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-short-plural-suffix,
+   name={\csoptfmt{dual\dhyphen short\dhyphen plural\dhyphen suffix}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.save-locations,
+   name={\csoptfmt{save\dhyphen locations}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.save-loclist,
+   name={\csoptfmt{save\dhyphen loclist}},
+   user1={\meta{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.save-primary-locations,
+   name={\csoptfmt{save\dhyphen primary\dhyphen locations}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.save-principal-locations,
+   name={\csoptfmt{save\dhyphen principal\dhyphen locations}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.primary-location-formats,
+   name={\csoptfmt{primary\dhyphen location\dhyphen formats}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.principal-location-formats,
+   name={\csoptfmt{principal\dhyphen location\dhyphen formats}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.primary-loc-counters,
+   name={\csoptfmt{primary\dhyphen loc\dhyphen counters}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.principal-loc-counters,
+   name={\csoptfmt{principal\dhyphen loc\dhyphen counters}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.merge-ranges,
+   name={\csoptfmt{merge\dhyphen ranges}},
+   user1={\meta{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.min-loc-range,
+   name={\csoptfmt{min\dhyphen loc\dhyphen range}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.max-loc-diff,
+   name={\csoptfmt{max\dhyphen loc\dhyphen diff}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.suffixF,
+   name={\csoptfmt{suffixF}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.suffixFF,
+   name={\csoptfmt{suffixFF}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.compact-ranges,
+   name={\csoptfmt{compact-ranges}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.see,
+   name={\csoptfmt{see}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.seealso,
+   name={\csoptfmt{seealso}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.alias,
+   name={\csoptfmt{alias}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.prune-xr,
+   name={\csoptfmt{prune\dhyphen xr}},
+   user1={\meta{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.prune-see-op,
+   name={\csoptfmt{prune\dhyphen see\dhyphen op}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.prune-seealso-op,
+   name={\csoptfmt{prune\dhyphen seealso\dhyphen op}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.prune-see-match,
+   name={\csoptfmt{prune\dhyphen see\dhyphen match}},
+   user1={\meta{\keyvallist}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.prune-seealso-match,
+   name={\csoptfmt{prune\dhyphen seealso\dhyphen match}},
+   user1={\meta{\keyvallist}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.prune-iterations,
+   name={\csoptfmt{prune\dhyphen iterations}},
+   user1={\meta{number}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.alias-loc,
+   name={\csoptfmt{alias\dhyphen loc}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.loc-prefix,
+   name={\csoptfmt{loc\dhyphen prefix}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.loc-prefix-def,
+   name={\csoptfmt{loc\dhyphen prefix\dhyphen def}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.loc-suffix,
+   name={\csoptfmt{loc\dhyphen suffix}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.loc-suffix-def,
+   name={\csoptfmt{loc\dhyphen suffix\dhyphen def}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.loc-counters,
+   name={\csoptfmt{loc\dhyphen counters}},
+   user1={\meta{list}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.save-index-counter,
+   name={\csoptfmt{save\dhyphen index\dhyphen counter}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.save-from-alias,
+   name={\csoptfmt{save\dhyphen from\dhyphen alias}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.save-from-seealso,
+   name={\csoptfmt{save\dhyphen from\dhyphen seealso}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.save-from-see,
+   name={\csoptfmt{save\dhyphen from\dhyphen see}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.save-crossref-tail,
+   name={\csoptfmt{save\dhyphen crossref\dhyphen tail}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.supplemental-locations,
+   name={\csoptfmt{supplemental\dhyphen locations}},
+   user1={\meta{basename}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.supplemental-selection,
+   name={\csoptfmt{supplemental\dhyphen selection}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.supplemental-category,
+   name={\csoptfmt{supplemental\dhyphen category}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.sort,
+   name={\csoptfmt{sort}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.shuffle,
+   name={\csoptfmt{shuffle}},
+   user1={\meta{seed}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.sort-field,
+   name={\csoptfmt{sort\dhyphen field}},
+   user1={\meta{field}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.custom-sort-fallbacks,
+   name={\csoptfmt{custom\dhyphen sort\dhyphen fallbacks}},
+   user1={\margm{\keyvallist}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.entry-sort-fallback,
+   name={\csoptfmt{entry\dhyphen sort\dhyphen fallback}},
+   user1={\meta{field}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.symbol-sort-fallback,
+   name={\csoptfmt{symbol\dhyphen sort\dhyphen fallback}},
+   user1={\meta{field}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.abbreviation-sort-fallback,
+   name={\csoptfmt{abbreviation\dhyphen sort\dhyphen fallback}},
+   user1={\meta{field}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.abbreviation-name-fallback,
+   name={\csoptfmt{abbreviation\dhyphen name\dhyphen fallback}},
+   user1={\meta{field}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.abbreviation-text-fallback,
+   name={\csoptfmt{abbreviation\dhyphen text\dhyphen fallback}},
+   user1={\meta{field}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.bibtexentry-sort-fallback,
+   name={\csoptfmt{bibtexentry\dhyphen sort\dhyphen fallback}},
+   user1={\meta{field}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.field-concat-sep,
+   name={\csoptfmt{field\dhyphen concat\dhyphen sep}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.trim-sort,
+   name={\csoptfmt{trim\dhyphen sort}},
+   user1={\meta{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.missing-sort-fallback,
+   name={\csoptfmt{missing\dhyphen sort\dhyphen fallback}},
+   user1={\meta{field}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-missing-sort-fallback,
+   name={\csoptfmt{dual\dhyphen missing\dhyphen sort\dhyphen fallback}},
+   user1={\meta{field}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-missing-sort-fallback,
+   name={\csoptfmt{secondary\dhyphen missing\dhyphen sort\dhyphen fallback}},
+   user1={\meta{field}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.sort-rule,
+   name={\csoptfmt{sort\dhyphen rule}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.break-at,
+   name={\csoptfmt{break\dhyphen at}},
+   user1={\meta{option}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.break-marker,
+   name={\csoptfmt{break\dhyphen marker}},
+   user1={\meta{marker}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.break-at-match,
+   name={\csoptfmt{break\dhyphen at\dhyphen match}},
+   user1={\meta{\keyvallist}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.break-at-not-match,
+   name={\csoptfmt{break\dhyphen at\dhyphen not\dhyphen match}},
+   user1={\meta{\keyvallist}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.break-at-match-op,
+   name={\csoptfmt{break\dhyphen at\dhyphen match\dhyphen op}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-break-at-match,
+   name={\csoptfmt{dual\dhyphen break\dhyphen at\dhyphen match}},
+   user1={\meta{\keyvallist}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-break-at-not-match,
+   name={\csoptfmt{dual\dhyphen break\dhyphen at\dhyphen not\dhyphen match}},
+   user1={\meta{\keyvallist}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-break-at-match-op,
+   name={\csoptfmt{dual\dhyphen break\dhyphen at\dhyphen match\dhyphen op}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-break-at-match,
+   name={\csoptfmt{secondary\dhyphen break\dhyphen at\dhyphen match}},
+   user1={\meta{\keyvallist}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-break-at-not-match,
+   name={\csoptfmt{secondary\dhyphen break\dhyphen at\dhyphen not\dhyphen match}},
+   user1={\meta{\keyvallist}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-break-at-match-op,
+   name={\csoptfmt{secondary\dhyphen break\dhyphen at\dhyphen match\dhyphen op}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.identical-sort-action,
+   name={\csoptfmt{identical\dhyphen sort\dhyphen action}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-identical-sort-action,
+   name={\csoptfmt{dual\dhyphen identical\dhyphen sort\dhyphen action}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-identical-sort-action,
+   name={\csoptfmt{secondary\dhyphen identical\dhyphen sort\dhyphen action}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.sort-suffix,
+   name={\csoptfmt{sort\dhyphen suffix}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.sort-suffix-marker,
+   name={\csoptfmt{sort\dhyphen suffix\dhyphen marker}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.strength,
+   name={\csoptfmt{strength}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.decomposition,
+   name={\csoptfmt{decomposition}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.letter-number-rule,
+   name={\csoptfmt{letter\dhyphen number\dhyphen rule}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.letter-number-punc-rule,
+   name={\csoptfmt{letter\dhyphen number\dhyphen punc\dhyphen rule}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.numeric-sort-pattern,
+   name={\csoptfmt{numeric\dhyphen sort\dhyphen pattern}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.numeric-locale,
+   name={\csoptfmt{numeric\dhyphen locale}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.date-sort-locale,
+   name={\csoptfmt{date\dhyphen sort\dhyphen locale}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.date-sort-format,
+   name={\csoptfmt{date\dhyphen sort\dhyphen format}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.trigger-type,
+   name={\csoptfmt{trigger\dhyphen type}},
+   user1={\meta{type}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.ignored-type,
+   name={\csoptfmt{ignored\dhyphen type}},
+   user1={\meta{type}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.progenitor-type,
+   name={\csoptfmt{progenitor\dhyphen type}},
+   user1={\meta{type}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.progeny-type,
+   name={\csoptfmt{progeny\dhyphen type}},
+   user1={\meta{type}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.adopted-parent-field,
+   name={\csoptfmt{adopted\dhyphen parent\dhyphen field}},
+   user1={\meta{type}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary,
+   name={\csoptfmt{secondary}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-trim-sort,
+   name={\csoptfmt{secondary\dhyphen trim\dhyphen sort}},
+   user1={\meta{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-sort-rule,
+   name={\csoptfmt{secondary\dhyphen sort\dhyphen rule}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-break-at,
+   name={\csoptfmt{secondary\dhyphen break\dhyphen at}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-break-marker,
+   name={\csoptfmt{secondary\dhyphen break\dhyphen marker}},
+   user1={\meta{marker}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-sort-suffix,
+   name={\csoptfmt{secondary\dhyphen sort\dhyphen suffix}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-sort-suffix-marker,
+   name={\csoptfmt{secondary\dhyphen sort\dhyphen suffix\dhyphen
+marker}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-strength,
+   name={\csoptfmt{secondary\dhyphen strength}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-decomposition,
+   name={\csoptfmt{secondary\dhyphen decomposition}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-letter-number-rule,
+   name={\csoptfmt{secondary\dhyphen letter\dhyphen number\dhyphen
+rule}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-letter-number-punc-rule,
+   name={\csoptfmt{secondary\dhyphen letter\dhyphen number\dhyphen
+punc\dhyphen rule}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-numeric-sort-pattern,
+   name={\csoptfmt{secondary\dhyphen numeric\dhyphen sort\dhyphen
+pattern}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-numeric-locale,
+   name={\csoptfmt{secondary\dhyphen numeric\dhyphen locale}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-date-sort-locale,
+   name={\csoptfmt{secondary\dhyphen date\dhyphen sort\dhyphen
+locale}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-date-sort-format,
+   name={\csoptfmt{secondary\dhyphen date\dhyphen sort\dhyphen
+format}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.prefix-only-existing,
+   name={\csoptfmt{prefix\dhyphen only\dhyphen existing}},
+   user1={\meta{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-prefix,
+   name={\csoptfmt{dual\dhyphen prefix}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.combine-dual-locations,
+   name={\csoptfmt{combine\dhyphen dual\dhyphen locations}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-type,
+   name={\csoptfmt{dual\dhyphen type}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-category,
+   name={\csoptfmt{dual\dhyphen category}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-counter,
+   name={\csoptfmt{dual\dhyphen counter}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-short-case-change,
+   name={\csoptfmt{dual\dhyphen short\dhyphen case\dhyphen change}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-long-case-change,
+   name={\csoptfmt{dual\dhyphen long\dhyphen case\dhyphen change}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-field,
+   name={\csoptfmt{dual\dhyphen field}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-sort,
+   name={\csoptfmt{dual\dhyphen sort}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-sort-field,
+   name={\csoptfmt{dual\dhyphen sort\dhyphen field}},
+   user1={\meta{field}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-trim-sort,
+   name={\csoptfmt{dual\dhyphen trim\dhyphen sort}},
+   user1={\meta{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-sort-rule,
+   name={\csoptfmt{dual\dhyphen sort\dhyphen rule}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-break-at,
+   name={\csoptfmt{dual\dhyphen break\dhyphen at}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-break-marker,
+   name={\csoptfmt{dual\dhyphen break\dhyphen marker}},
+   user1={\meta{marker}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-sort-suffix,
+   name={\csoptfmt{dual\dhyphen sort\dhyphen suffix}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-sort-suffix-marker,
+   name={\csoptfmt{dual\dhyphen sort\dhyphen suffix\dhyphen marker}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-strength,
+   name={\csoptfmt{dual\dhyphen strength}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-decomposition,
+   name={\csoptfmt{dual\dhyphen decomposition}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-letter-number-rule,
+   name={\csoptfmt{dual\dhyphen letter\dhyphen number\dhyphen rule}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-letter-number-punc-rule,
+   name={\csoptfmt{dual\dhyphen letter\dhyphen number\dhyphen punc\dhyphen rule}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-numeric-sort-pattern,
+   name={\csoptfmt{dual\dhyphen numeric\dhyphen sort\dhyphen
+pattern}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-numeric-locale,
+   name={\csoptfmt{dual\dhyphen numeric\dhyphen locale}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-date-sort-locale,
+   name={\csoptfmt{dual\dhyphen date\dhyphen sort\dhyphen locale}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-date-sort-format,
+   name={\csoptfmt{dual\dhyphen date\dhyphen sort\dhyphen format}},
+   user1={\meta{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-entry-map,
+   name={\csoptfmt{dual\dhyphen entry\dhyphen map}},
+   user1={\marg{\margm{list1},\margm{list2}}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-abbrv-map,
+   name={\csoptfmt{dual\dhyphen abbrv\dhyphen map}},
+   user1={\marg{\margm{list1},\margm{list2}}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-abbrventry-map,
+   name={\csoptfmt{dual\dhyphen abbrventry\dhyphen map}},
+   user1={\marg{\margm{list1},\margm{list2}}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-symbol-map,
+   name={\csoptfmt{dual\dhyphen symbol\dhyphen map}},
+   user1={\marg{\margm{list1},\margm{list2}}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-indexentry-map,
+   name={\csoptfmt{dual\dhyphen indexentry\dhyphen map}},
+   user1={\marg{\margm{list1},\margm{list2}}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-indexsymbol-map,
+   name={\csoptfmt{dual\dhyphen indexsymbol\dhyphen map}},
+   user1={\marg{\margm{list1},\margm{list2}}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-indexabbrv-map,
+   name={\csoptfmt{dual\dhyphen indexabbrv\dhyphen map}},
+   user1={\marg{\margm{list1},\margm{list2}}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-entry-backlink,
+   name={\csoptfmt{dual\dhyphen entry\dhyphen backlink}},
+   user1={\margm{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-abbrv-backlink,
+   name={\csoptfmt{dual\dhyphen abbrv\dhyphen backlink}},
+   user1={\margm{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-entryabbrv-backlink,
+   name={\csoptfmt{dual\dhyphen entryabbrv\dhyphen backlink}},
+   user1={\margm{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-abbrventry-backlink,
+   name={\csoptfmt{dual\dhyphen abbrventry\dhyphen backlink}},
+   user1={\margm{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-symbol-backlink,
+   name={\csoptfmt{dual\dhyphen symbol\dhyphen backlink}},
+   user1={\margm{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-indexentry-backlink,
+   name={\csoptfmt{dual\dhyphen indexentry\dhyphen backlink}},
+   user1={\margm{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-indexsymbol-backlink,
+   name={\csoptfmt{dual\dhyphen indexsymbol\dhyphen backlink}},
+   user1={\margm{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-indexabbrv-backlink,
+   name={\csoptfmt{dual\dhyphen indexabbrv\dhyphen backlink}},
+   user1={\margm{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-backlink,
+   name={\csoptfmt{dual\dhyphen backlink}},
+   user1={\margm{boolean}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.tertiary-prefix,
+   name={\csoptfmt{tertiary\dhyphen prefix}},
+   user1={\margm{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.tertiary-type,
+   name={\csoptfmt{tertiary\dhyphen type}},
+   user1={\margm{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.tertiary-category,
+   name={\csoptfmt{tertiary\dhyphen category}},
+   user1={\margm{value}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.sort-number-pad,
+   name={\csoptfmt{sort\dhyphen number\dhyphen pad}},
+   user1={\meta{number}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-sort-number-pad,
+   name={\csoptfmt{dual\dhyphen sort\dhyphen number\dhyphen pad}},
+   user1={\meta{number}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-sort-number-pad,
+   name={\csoptfmt{secondary\dhyphen sort\dhyphen number\dhyphen pad}},
+   user1={\meta{number}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.sort-pad-plus,
+   name={\csoptfmt{sort\dhyphen pad\dhyphen plus}},
+   user1={\meta{marker}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-sort-pad-plus,
+   name={\csoptfmt{dual\dhyphen sort\dhyphen pad\dhyphen plus}},
+   user1={\meta{marker}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-sort-pad-plus,
+   name={\csoptfmt{secondary\dhyphen sort\dhyphen pad\dhyphen plus}},
+   user1={\meta{marker}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.sort-pad-minus,
+   name={\csoptfmt{sort\dhyphen pad\dhyphen minus}},
+   user1={\meta{marker}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.dual-sort-pad-minus,
+   name={\csoptfmt{dual\dhyphen sort\dhyphen pad\dhyphen minus}},
+   user1={\meta{marker}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at resourceoption{opt.secondary-sort-pad-minus,
+   name={\csoptfmt{secondary\dhyphen sort\dhyphen pad\dhyphen minus}},
+   user1={\meta{marker}},
+   category={resourceoption},
+   parent={resourceoptions}
+}
+
+ at mainglscommand{GlsXtrLoadResources,
+  name={\csfmt{Gls\-Xtr\-Load\-Resources}},
+  user1={\oargm{options}},
+  description={a shortcut command that uses \csref{glsxtrresourcefile}},
+  topics={indexing,shortcutcommands},
+  note={\styfmt{glossaries-extra} v1.11+},
+  seealso={resourceoptions,glsxtrresourcefile},
+  category={command}
+}
+
+ at mainglscommand{glsxtrcopytoglossary,
+  name={\csfmt{gls\-xtr\-copy\-to\-glossary}},
+  user1={\margm{label}\margm{type}},
+  description={copies the entry given by \meta{label} to the
+glossary given by \meta{type}},
+  topics={assigncommands,definingterms},
+  note={\styfmt{glossaries-extra} v1.12+},
+  category={command}
+}
+
+ at mainglscommand{glsxtrnewglslike,
+  name={\csfmt{gls\-xtr\-new\-gls\-like}},
+  user1={\oargm{options}\margm{prefix}\margm{gls-like
+cs}\margm{glspl-like cs}\margm{Gls-like
+cs}\margm{Glspl-like cs}},
+  description={defines commands to behave like \ics{gls}, \ics{glspl},
+   \ics{Gls} and \ics{Glspl} with the given label prefix},
+  topics={entryrefcommands,providingcommands},
+  note={\styfmt{glossaries-extra} v1.21+},
+  seealso={glsxtrnewgls},
+  category={command}
+}
+
+ at mainglscommand{glsxtrnewgls,
+  name={\csfmt{gls\-xtr\-new\-gls}},
+  user1={\oargm{options}\margm{prefix}\margm{cs}},
+  description={defines the command \meta{cs} to behave like 
+  \ics{gls} with the given label prefix},
+  topics={entryrefcommands,providingcommands},
+  note={\styfmt{glossaries-extra} v1.21+},
+  seealso={gls},
+  category={command}
+}
+
+ at mainglscommand{glsnoidxdisplayloc,
+  name={\csfmt{gls\-no\-idx\-display\-loc}},
+  user1={\margm{prefix}\margm{counter}\margm{format}\margm{location}},
+  description={used to display a regular location in the
+  \field{location} field (with a hyperlink, if enabled)},
+  topics={loclistcommands,linkcommands},
+  note={\styfmt{glossaries} v4.04+},
+  category={command}
+}
+
+ at mainglscommand{glsxtrdisplaylocnameref,
+  name={\csfmt{gls\-xtr\-display\-loc\-name\-ref}},
+  user1={\margm{prefix}\margm{counter}\margm{format}\margm{location}\margm{title}\margm{href}\margm{hcounter}\margm{file}},
+  description={used to display a \code{nameref} location in the
+  \field{location} field (with a hyperlink, if enabled)},
+  topics={loclistcommands,linkcommands},
+  note={\styfmt{glossaries-extra-bib2gls} v1.37+},
+  category={command}
+}
+
+ at mainglscommand{glsxtrdisplaysupploc,
+  name={\csfmt{gls\-xtr\-display\-supp\-loc}},
+  user1={\margm{prefix}\margm{counter}\margm{format}\margm{src}\margm{location}},
+  description={used to display an external location in the
+   supplementary list (with a hyperlink, if enabled)},
+  topics={loclistcommands,linkcommands,supplementalrefs},
+  note={\styfmt{glossaries-extra-bib2gls} v1.36+},
+  category={command}
+}
+
+ at mainglscommand{glsxtrmultisupplocation,
+  name={\csfmt{gls\-xtr\-multi\-supp\-location}},
+  user1={\margm{location}\margm{src}\margm{format}},
+  description={used by \csref{glsxtrdisplaysupploc} to format the
+  external location (with a hyperlink, if enabled)},
+  topics={loclistcommands,linkcommands,formattingcommands,supplementalrefs},
+  note={\styfmt{glossaries-extra-bib2gls} v1.36+},
+  category={command}
+}
+
+ at glscommand{glsxtrsupplocationurl,
+  name={\csfmt{gls\-xtr\-supp\-loc\-a\-tion\-url}},
+  description={set by \cs{glsxtrsupphypernumber}
+  and \csref{glsxtrmultisupplocation} to the
+   URL of the supplemental document for use by
+    \cs{glshypernumber}},
+  topics={loclistcommands,supplementalrefs},
+  note={\styfmt{glossaries-extra} v1.14+},
+  seealso={glshypernumber,glsxtrsupphypernumber,glsxtrmultisupplocation,glsxtrlocationhyperlink},
+  category={command}
+}
+
+ at glscommand{glsxtrlocationhyperlink,
+  name={\csfmt{gls\-xtr\-loc\-a\-tion\-hyper\-link}},
+  user1={\margm{counter}\margm{prefix}\margm{location}},
+  description={used to create the location hyperlink,
+   this tests if an internal or external link is required
+   depending on the definition of \cs{glsxtrsupplocationurl}},
+  topics={loclistcommands,linkcommands,supplementalrefs},
+  note={\styfmt{glossaries-extra} v1.14+},
+  seealso={glsxtrsupphypernumber,glsxtrsupplocationurl},
+  category={command}
+}
+
+ at glscommand{glsxtrsupphypernumber,
+  name={\csfmt{gls\-xtr\-supp\-hyper\-num\-ber}},
+  user1={\margm{location}},
+  description={uses \cs{glshypernumber} to create a hyperlink
+   to the given location (if hyperlinks are supported) but
+   first checks the \catattr{externallocation} attribute to determine
+   if an external link is required},
+  topics={loclistcommands,linkcommands,supplementalrefs},
+  note={\styfmt{glossaries-extra} v1.14+},
+  seealso={glsxtrlocationhyperlink,glsxtrsupplocationurl},
+  category={command}
+}
+
+ at mainglscommand{glsxtr at record,
+  name={\csfmt{glsxtr at record}},
+  user1={\margm{label}\margm{prefix}\margm{counter}\margm{format}\margm{location}},
+  description={this command is written to the \ext{aux} file each
+   time an entry is indexed to provide \bibgls\ with the record information},
+  topics={internalcommands,auxcommands,indexing},
+  note={\styfmt{glossaries-extra} v1.08+},
+  category={command}
+}
+
+ at mainglscommand{glsxtr at record@nameref,
+  name={\csfmt{glsxtr at record@name\-ref}},
+  user1={\margm{label}\margm{prefix}\margm{counter}\margm{format}\margm{location}\margm{title}\margm{href}\margm{hcounter}},
+  description={used instead of \csref{glsxtr at record} when the
+   \styopt[nameref]{record} option is used},
+  topics={internalcommands,auxcommands,indexing},
+  note={\styfmt{glossaries-extra} v1.37+},
+  category={command}
+}
+
+ at mainglscommand{glsxtrfieldlistadd,
+  name={\csfmt{gls\-xtr\-field\-list\-add}},
+  user1={\margm{label}\margm{field}\margm{item}},
+  description={adds the given item to the given field that contains
+   an \styfmt{etoolbox} internal list},
+  topics={listcommands,assigncommands,fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.12+},
+  seealso={glsxtrfieldifinlist,glsxtrfieldforlistloop,glsxtrfielddolistloop},
+  category={command}
+}
+
+ at glscommand{glsxtrfieldifinlist,
+  name={\csfmt{gls\-xtr\-field\-if\-in\-list}},
+  user1={\margm{label}\margm{field}\margm{item}\margm{true}\margm{false}},
+  description={tests if the given item is in the given field that contains
+   an \styfmt{etoolbox} internal list},
+  topics={listcommands,conditional,fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.12+},
+  seealso={glsxtrfieldxifinlist,glsxtrfieldlistadd,glsxtrfieldforlistloop,glsxtrfielddolistloop},
+  category={command}
+}
+
+ at glscommand{glsxtrfieldxifinlist,
+  name={\csfmt{gls\-xtr\-field\-x\-if\-in\-list}},
+  user1={\margm{label}\margm{field}\margm{item}\margm{true}\margm{false}},
+  description={tests if the expansion of the given item is in the given field that contains
+   an \styfmt{etoolbox} internal list},
+  topics={listcommands,conditional,fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.12+},
+  seealso={glsxtrfieldifinlist},
+  category={command}
+}
+
+ at glscommand{glsxtrcontrolrules,
+  name={\csfmt{gls\-xtr\-control\-rules}},
+  user1={},
+  description={collation sub-rule for control characters usually
+placed at the start of a rule in the \qt{ignored characters} section
+(although there typically won't be any control codes in sort fields)},
+  topics={collationsubrules},
+  note={\styfmt{glossaries-extra-bib2gls} v1.27+},
+  category={command}
+}
+
+ at glscommand{glsxtrcontrolIrules,
+  name={\csfmt{gls\-xtr\-control\-I\-rules}},
+  user1={},
+  description={as \cs{glsxtrcontrolrules} but omits control codes
+   \hex{0}, \hex{1C}, \hex{1D}, \hex{1E}, \hex{1F} and \hex{7F}},
+  topics={collationsubrules},
+  note={\styfmt{glossaries-extra-bib2gls} v1.54+},
+  category={command}
+}
+
+ at glscommand{glsxtrcontrolIIrules,
+  name={\csfmt{gls\-xtr\-control\-II\-rules}},
+  user1={},
+  description={expands to the ordered set of \qt{information separator} control codes
+   \hex{1C}, \hex{1D}, \hex{1E}, and \hex{1F}},
+  topics={collationsubrules},
+  note={\styfmt{glossaries-extra-bib2gls} v1.54+},
+  category={command}
+}
+
+ at glscommand{glsxtrspacerules,
+  name={\csfmt{gls\-xtr\-space\-rules}},
+  user1={},
+  description={collation sub-rule for space characters},
+  topics={collationsubrules},
+  note={\styfmt{glossaries-extra-bib2gls} v1.27+},
+  category={command}
+}
+
+ at glscommand{glsxtrnonprintablerules,
+  name={\csfmt{gls\-xtr\-non\-printable\-rules}},
+  user1={},
+  description={collation sub-rule for non-printable characters},
+  topics={collationsubrules},
+  note={\styfmt{glossaries-extra-bib2gls} v1.27+},
+  category={command}
+}
+
+ at glscommand{glsxtrcombiningdiacriticrules,
+  name={\csfmt{gls\-xtr\-combining\-diacritic\-rules}},
+  user1={},
+  description={collation sub-rule for combining diacritic characters},
+  topics={collationsubrules},
+  note={\styfmt{glossaries-extra-bib2gls} v1.27+},
+  category={command}
+}
+
+ at glscommand{glsxtrhyphenrules,
+  name={\csfmt{gls\-xtr\-hyphen\-rules}},
+  user1={},
+  description={collation sub-rule for hyphen characters},
+  topics={collationsubrules},
+  note={\styfmt{glossaries-extra-bib2gls} v1.27+},
+  category={command}
+}
+
+ at glscommand{glsxtrgeneralpuncrules,
+  name={\csfmt{gls\-xtr\-general\-punc\-rules}},
+  user1={},
+  description={collation sub-rule for general punctuation characters},
+  topics={collationsubrules},
+  note={\styfmt{glossaries-extra-bib2gls} v1.27+},
+  category={command}
+}
+
+ at glscommand{glsxtrdigitrules,
+  name={\csfmt{gls\-xtr\-digit\-rules}},
+  user1={},
+  description={collation sub-rule for digits from the basic Latin
+set (0, \ldots, 9) as well as their subscript and superscript variants},
+  topics={collationsubrules},
+  note={\styfmt{glossaries-extra-bib2gls} v1.27+},
+  category={command}
+}
+
+ at glscommand{glsxtrfractionrules,
+  name={\csfmt{gls\-xtr\-fraction\-rules}},
+  user1={},
+  description={collation sub-rule for vulgar fraction characters},
+  topics={collationsubrules},
+  note={\styfmt{glossaries-extra-bib2gls} v1.27+},
+  category={command}
+}
+
+ at glscommand{glsxtrMathItalicGreekIrules,
+  name={\csfmt{gls\-xtr\-Math\-Italic\-Greek\-I\-rules}},
+  user1={},
+  description={collation sub-rule for math-Greek characters
+(includes upright digamma between epsilon and zeta)},
+  topics={collationsubrules},
+  note={\styfmt{glossaries-extra-bib2gls} v1.27+},
+  category={command}
+}
+
+ at glscommand{glsxtrGeneralLatinIrules,
+  name={\csfmt{gls\-xtr\-General\-Latin\-I\-rules}},
+  user1={},
+  description={collation sub-rule for Latin characters
+(basic Latin set plus subscript and superscript Latin
+characters)},
+  topics={collationsubrules},
+  note={\styfmt{glossaries-extra-bib2gls} v1.27+},
+  seealso={glsxtrGeneralLatinIIrules,glsxtrGeneralLatinIIIrules,glsxtrGeneralLatinIVrules,glsxtrGeneralLatinVrules,glsxtrGeneralLatinVIrules,glsxtrGeneralLatinVIIrules,glsxtrGeneralLatinVIIIrules},
+  category={command}
+}
+
+ at glscommand{glsxtrGeneralLatinIIrules,
+  name={\csfmt{gls\-xtr\-General\-Latin\-II\-rules}},
+  user1={},
+  description={collation sub-rule for Latin characters
+(as \cs{glsxtrGeneralLatinIrules} but includes \DH/\dh\ between D/d
+and E/e
+and \ss\ treated as \qt{ss})},
+  topics={collationsubrules},
+  note={\styfmt{glossaries-extra-bib2gls} v1.27+},
+  category={command}
+}
+
+ at glscommand{glsxtrGeneralLatinIIIrules,
+  name={\csfmt{gls\-xtr\-General\-Latin\-III\-rules}},
+  user1={},
+  description={collation sub-rule for Latin characters
+(as \cs{glsxtrGeneralLatinIrules} but includes \DH/\dh\ between D/d
+and E/e
+and \ss\ treated as \qt{sz})},
+  topics={collationsubrules},
+  note={\styfmt{glossaries-extra-bib2gls} v1.27+},
+  category={command}
+}
+
+ at glscommand{glsxtrGeneralLatinIVrules,
+  name={\csfmt{gls\-xtr\-General\-Latin\-IV\-rules}},
+  user1={},
+  description={collation sub-rule for Latin characters
+(as \cs{glsxtrGeneralLatinIrules} but includes \DH/\dh\ between D/d
+and E/e
+and \AE/\ae\ treated as AE/ae, \OE/\oe\ treated
+as OE/oe, \TH/\th\ treated as TH/th and \ss\ treated as \qt{ss})},
+  topics={collationsubrules},
+  note={\styfmt{glossaries-extra-bib2gls} v1.27+},
+  category={command}
+}
+
+ at glscommand{glsxtrGeneralLatinVrules,
+  name={\csfmt{gls\-xtr\-General\-Latin\-V\-rules}},
+  user1={},
+  description={collation sub-rule for Latin characters
+(as \cs{glsxtrGeneralLatinIrules} but includes \DH/\dh\ between D/d
+and E/e
+and \TH/\th\ treated as TH/th and \ss\ treated as \qt{ss})},
+  topics={collationsubrules},
+  note={\styfmt{glossaries-extra-bib2gls} v1.27+},
+  category={command}
+}
+
+ at glscommand{glsxtrGeneralLatinVIrules,
+  name={\csfmt{gls\-xtr\-General\-Latin\-VI\-rules}},
+  user1={},
+  description={collation sub-rule for Latin characters
+(as \cs{glsxtrGeneralLatinIrules} but includes \DH/\dh\ between D/d
+and E/e
+and \TH/\th\ treated as TH/th and \ss\ treated as \qt{sz})},
+  topics={collationsubrules},
+  note={\styfmt{glossaries-extra-bib2gls} v1.27+},
+  category={command}
+}
+
+ at glscommand{glsxtrGeneralLatinVIIrules,
+  name={\csfmt{gls\-xtr\-General\-Latin\-VII\-rules}},
+  user1={},
+  description={collation sub-rule for Latin characters:
+as \cs{glsxtrGeneralLatinIrules} but includes \AE/\ae\ between A/a
+and B/b,
+\DH/\dh\ between D/d and E/e, \insularG/\insularg\ (insular G) as
+G/g, \OE/\oe\
+between O/o and P/p, \longs\ (long S)
+equivalent to S/s, \TH/\th\ between T/t and U/u and \Wynn/\wynn\
+(wynn) as W/w},
+  topics={collationsubrules},
+  note={\styfmt{glossaries-extra-bib2gls} v1.27+},
+  category={command}
+}
+
+ at glscommand{glsxtrGeneralLatinVIIIrules,
+  name={\csfmt{gls\-xtr\-General\-Latin\-VIII\-rules}},
+  user1={},
+  description={collation sub-rule for Latin characters:
+as \cs{glsxtrGeneralLatinIrules} but includes \AE/\ae\ treated as
+A/a, \OE/\oe\ treated as OE/oe, \TH/\th\ treated as TH/th, \ss\
+treated as \qt{ss}, \DH/\dh\ treated as D/d, \O/\o\ treated as O/o
+and \L/\l\ treated as L/l},
+  topics={collationsubrules},
+  note={\styfmt{glossaries-extra-bib2gls} v1.27+},
+  category={command}
+}
+
+ at glscommand{glsxtrLatinAA,
+  name={\csfmt{gls\-xtr\-Latin\-AA}},
+  user1={},
+  description={collation sub-rule for \AA/\aa},
+  topics={collationsubrules},
+  note={\styfmt{glossaries-extra-bib2gls} v1.27+},
+  category={command}
+}
+
+ at glscommand{glsxtrLatinOslash,
+  name={\csfmt{gls\-xtr\-Latin\-O\-slash}},
+  user1={},
+  description={collation sub-rule for \O/\o},
+  topics={collationsubrules},
+  note={\styfmt{glossaries-extra-bib2gls} v1.27+},
+  category={command}
+}
+
+ at command{alpha,
+  name={\csfmt{alpha}},
+  user1={},
+  description={Greek letter alpha $\alpha$},
+  note={kernel command\texparserdefnote\ (maths mode)},
+  category={command}
+}
+
+ at command{pi,
+  name={\csfmt{pi}},
+  user1={},
+  description={Greek letter pi $\pi$},
+  note={kernel command\texparserdefnote\ (maths mode)},
+  category={command}
+}
+
+ at command{sigma,
+  name={\csfmt{sigma}},
+  user1={},
+  description={Greek letter sigma $\sigma$},
+  note={kernel command\texparserdefnote\ (maths mode)},
+  category={command}
+}
+
+ at glscommand{omicron,
+  name={\csfmt{omicron}},
+  user1={},
+  description={Greek letter omicron $\omicron$},
+  topics={charcommands},
+  note={\styfmt{glossaries-extra-bib2gls}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Alpha,
+  name={\csfmt{Alpha}},
+  user1={},
+  description={Greek letter alpha $\Alpha$},
+  topics={charcommands},
+  note={\styfmt{glossaries-extra-bib2gls}\texparserdefnote},
+  category={command}
+}
+
+ at command{approx,
+  name={\csfmt{approx}},
+  user1={},
+  description={approximate symbol $\approx$},
+  note={kernel command\texparserdefnote\ (maths mode)},
+  category={command}
+}
+
+ at command{surd,
+  name={\csfmt{surd}},
+  user1={},
+  description={surd symbol $\surd$},
+  note={kernel command\texparserdefnote\ (maths mode)},
+  category={command}
+}
+
+ at command{triangleright,
+  name={\csfmt{triangle\-right}},
+  user1={},
+  description={right-pointing triangle $\triangleright$},
+  note={kernel command\texparserdefnote\ (maths mode)},
+  category={command}
+}
+
+ at command{vert,
+  name={\csfmt{vert}},
+  user1={},
+  description={vertical bar delimiter $\vert$},
+  note={kernel command\texparserdefnote\ (maths mode)},
+  category={command}
+}
+
+ at command{Vert,
+  name={\csfmt{Vert}},
+  user1={},
+  description={double vertical bar delimiter $\Vert$},
+  note={kernel command\texparserdefnote\ (maths mode)},
+  category={command}
+}
+
+ at command{lvert,
+  name={\csfmt{lvert}},
+  user1={},
+  description={left vertical bar delimiter $\lvert$},
+  note={\styfmt{amsmath}\texparserdefnote\ (maths mode)},
+  category={command}
+}
+
+ at command{rvert,
+  name={\csfmt{rvert}},
+  user1={},
+  description={right vertical bar delimiter $\rvert$},
+  note={\styfmt{amsmath}\texparserdefnote\ (maths mode)},
+  category={command}
+}
+
+ at command{lVert,
+  name={\csfmt{lVert}},
+  user1={},
+  description={left double vertical bar delimiter $\lVert$},
+  note={\styfmt{amsmath}\texparserdefnote\ (maths mode)},
+  category={command}
+}
+
+ at command{rVert,
+  name={\csfmt{rVert}},
+  user1={},
+  description={right double vertical bar delimiter $\rVert$},
+  note={\styfmt{amsmath}\texparserdefnote\ (maths mode)},
+  category={command}
+}
+
+ at command{textstyle,
+  name={\csfmt{text\-style}},
+  user1={},
+  description={switch to in-line maths style (vertically compact)},
+  note={kernel command (maths mode)},
+  category={command}
+}
+
+ at command{displaystyle,
+  name={\csfmt{display\-style}},
+  user1={},
+  description={switch to display maths style},
+  note={kernel command (maths mode)},
+  category={command}
+}
+
+ at examplecommand{bigoperatornamefmt,
+  name={\csfmt{big\-operator\-name\-fmt}},
+  user1={\margm{text}},
+  description={example command},
+  category={command}
+}
+
+ at examplecommand{nary,
+  name={\csfmt{nary}},
+  user1={\margm{text}},
+  description={example command},
+  category={command}
+}
+
+ at examplecommand{strong,
+  name={\csfmt{strong}},
+  user1={\margm{text}},
+  description={example command},
+  category={command}
+}
+
+ at examplecommand{parenswap,
+  name={\csfmt{parenswap}},
+  user1={\margm{text1}\margm{text2}},
+  description={example command},
+  category={command}
+}
+
+ at examplecommand{sortop,
+  name={\csfmt{sortop}},
+  user1={\margm{text1}\margm{text2}},
+  description={example command},
+  category={command}
+}
+
+ at examplecommand{sortname,
+  name={\csfmt{sortname}},
+  user1={\margm{first name(s)}\margm{surname}},
+  description={example command},
+  category={command}
+}
+
+ at examplecommand{sortvonname,
+  name={\csfmt{sort\-von\-name}},
+  user1={\margm{first name(s)}\margm{von}\margm{surname}},
+  description={example command},
+  category={command}
+}
+
+ at examplecommand{sortart,
+  name={\csfmt{sortart}},
+  user1={\margm{article}\margm{text}},
+  description={example command},
+  category={command}
+}
+
+ at examplecommand{sortmediacreator,
+  name={\csfmt{sort\-media\-creator}},
+  user1={\margm{first name(s)}\margm{surname}},
+  description={example command},
+  category={command}
+}
+
+ at examplecommand{setfmt,
+  name={\csfmt{setfmt}},
+  user1={\margm{symbol}},
+  description={example command},
+  category={command}
+}
+
+ at examplecommand{setcontentsfmt,
+  name={\csfmt{setcontentsfmt}},
+  user1={\margm{contents}},
+  description={example command},
+  category={command}
+}
+
+ at examplecommand{setmembershipfmt,
+  name={\csfmt{setmembershipfmt}},
+  user1={\margm{variable(s)}\margm{condition}},
+  description={example command},
+  category={command}
+}
+
+ at examplecommand{setmembershiponeargfmt,
+  name={\csfmt{setmembershiponeargfmt}},
+  user1={\marg{\margm{variable(s)}\margm{condition}}},
+  description={example command},
+  category={command}
+}
+
+ at examplecommand{setcardfmt,
+  name={\csfmt{setcardfmt}},
+  user1={\margm{maths}},
+  description={example command},
+  category={command}
+}
+
+ at examplecommand{numspacefmt,
+  name={\csfmt{numspacefmt}},
+  user1={\margm{symbol}},
+  description={example command},
+  category={command}
+}
+
+ at examplecommand{transposefmt,
+  name={\csfmt{transposefmt}},
+  user1={\margm{maths}},
+  description={example command},
+  category={command}
+}
+
+ at examplecommand{invfmt,
+  name={\csfmt{invfmt}},
+  user1={\margm{maths}},
+  description={example command},
+  category={command}
+}
+
+ at examplecommand{vecfmt,
+  name={\csfmt{vecfmt}},
+  user1={\margm{symbol}},
+  description={example command},
+  category={command}
+}
+
+ at examplecommand{mtxfmt,
+  name={\csfmt{mtxfmt}},
+  user1={\margm{symbol}},
+  description={example command},
+  category={command}
+}
+
+ at index{fileformats,
+  name={file formats},
+  text={file format}
+}
+
+ at fileformat{ext.tex,
+  name={\extfmt{tex}},
+  category={fileformat},
+  parent={fileformats}
+}
+
+ at fileformat{ext.bib,
+  name={\extfmt{bib}},
+  category={fileformat},
+  parent={fileformats}
+}
+
+ at fileformat{ext.aux,
+  name={\extfmt{aux}},
+  category={fileformat},
+  parent={fileformats}
+}
+
+ at fileformat{ext.out,
+  name={\extfmt{out}},
+  category={fileformat},
+  parent={fileformats}
+}
+
+ at fileformat{ext.sh,
+  name={\extfmt{sh}},
+  category={fileformat},
+  parent={fileformats}
+}
+
+ at fileformat{ext.bat,
+  name={\extfmt{bat}},
+  category={fileformat},
+  parent={fileformats}
+}
+
+ at fileformat{ext.jar,
+  name={\extfmt{jar}},
+  category={fileformat},
+  parent={fileformats}
+}
+
+ at fileformat{ext.glg,
+  name={\extfmt{glg}},
+  category={fileformat},
+  parent={fileformats}
+}
+
+ at fileformat{ext.log,
+  name={\extfmt{log}},
+  category={fileformat},
+  parent={fileformats}
+}
+
+ at fileformat{ext.toc,
+  name={\extfmt{toc}},
+  category={fileformat},
+  parent={fileformats}
+}
+
+ at fileformat{ext.glstex,
+  name={\extfmt{glstex}},
+  category={fileformat},
+  parent={fileformats}
+}
+
+ at fileformat{ext.gls,
+  name={\extfmt{gls}},
+  category={fileformat},
+  parent={fileformats}
+}
+
+ at fileformat{ext.bbl,
+  name={\extfmt{bbl}},
+  category={fileformat},
+  parent={fileformats}
+}
+
+ at fileformat{ext.dbtex,
+  name={\extfmt{dbtex}},
+  category={fileformat},
+  parent={fileformats}
+}
+
+ at fileformat{ext.dtltex,
+  name={\extfmt{dtltex}},
+  category={fileformat},
+  parent={fileformats}
+}
+
+ at fileformat{ext.csv,
+  name={\extfmt{csv}},
+  category={fileformat},
+  parent={fileformats}
+}
+
+ at fileformat{ext.tsv,
+  name={\extfmt{tsv}},
+  category={fileformat},
+  parent={fileformats}
+}
+
+ at index{applications,
+  name={applications},
+  text={applications}
+}
+
+ at application{bibtex,
+  name={\appfmt{bibtex}},
+  category={application},
+  parent={applications}
+}
+
+ at application{biber,
+  name={\appfmt{biber}},
+  category={application},
+  parent={applications}
+}
+
+ at application{makeindex,
+  name={\appfmt{make\-index}},
+  category={application},
+  parent={applications}
+}
+
+ at application{xindy,
+  name={\appfmt{xindy}},
+  category={application},
+  parent={applications}
+}
+
+ at application{makeglossaries,
+  name={\appfmt{make\-glos\-saries}},
+  category={application},
+  parent={applications}
+}
+
+ at application{makeglossaries-lite,
+  name={\appfmt{make\-glos\-saries\dhyphen lite}},
+  category={application},
+  parent={applications}
+}
+
+ at application{kpsewhich,
+  name={\appfmt{kpsewhich}},
+  category={application},
+  parent={applications}
+}
+
+ at application{arara,
+  name={\appfmt{arara}},
+  category={application},
+  parent={applications}
+}
+
+ at application{convertgls2bib,
+  name={\appfmt{convert\-gls2bib}},
+  category={application},
+  parent={applications}
+}
+
+ at application{datatool2bib,
+  name={\appfmt{data\-tool2bib}},
+  category={application},
+  parent={applications}
+}
+
+ at index{packages,
+   name={packages},
+   text={package}
+}
+
+ at package{glossaries,
+  name={\styfmt{glossaries}},
+  category={package},
+  parent={packages}
+}
+
+ at package{glossaries-extra,
+  name={\styfmt{glossaries-extra}},
+  category={package},
+  parent={packages}
+}
+
+ at package{pifont,
+  name={\styfmt{pifont}},
+  category={package},
+  parent={packages}
+}
+
+ at package{upgreek,
+  name={\styfmt{upgreek}},
+  category={package},
+  parent={packages}
+}
+
+ at package{xspace,
+  name={\styfmt{xspace}},
+  category={package},
+  parent={packages}
+}
+
+ at package{fourier,
+  name={\styfmt{fourier}},
+  category={package},
+  parent={packages}
+}
+
+ at package{lipsum,
+  name={\styfmt{lipsum}},
+  category={package},
+  parent={packages}
+}
+
+ at package{natbib,
+  name={\styfmt{natbib}},
+  category={package},
+  parent={packages}
+}
+
+ at package{xkeyval,
+  name={\styfmt{xkeyval}},
+  category={package},
+  parent={packages}
+}
+
+ at package{textcomp,
+  name={\styfmt{textcomp}},
+  category={package},
+  parent={packages}
+}
+
+ at package{MnSymbol,
+  name={\styfmt{MnSymbol}},
+  category={package},
+  parent={packages}
+}
+
+ at package{wasysym,
+  name={\styfmt{wasysym}},
+  category={package},
+  parent={packages}
+}
+
+ at package{amssymb,
+  name={\styfmt{amssymb}},
+  category={package},
+  parent={packages}
+}
+
+ at package{stix,
+  name={\styfmt{stix}},
+  category={package},
+  parent={packages}
+}
+
+ at package{mhchem,
+  name={\styfmt{mhchem}},
+  category={package},
+  parent={packages}
+}
+
+ at package{bpchem,
+  name={\styfmt{bpchem}},
+  category={package},
+  parent={packages}
+}
+
+ at package{siunitx,
+  name={\styfmt{siunitx}},
+  category={package},
+  parent={packages}
+}
+
+ at package{tipa,
+  name={\styfmt{tipa}},
+  category={package},
+  parent={packages}
+}
+
+ at package{mfirstuc,
+  name={\styfmt{mfirstuc}},
+  category={package},
+  parent={packages}
+}
+
+ at package{mfirstuc-english,
+  name={\styfmt{mfirstuc-english}},
+  category={package},
+  parent={packages}
+}
+
+ at package{hyperref,
+  name={\styfmt{hyperref}},
+  category={package},
+  parent={packages}
+}
+
+ at package{glossary-hypernav,
+  name={\styfmt{glossary\dhyphen hypernav}},
+  category={package},
+  parent={packages}
+}
+
+ at package{glossaries-prefix,
+  name={\styfmt{glossaries\dhyphen prefix}},
+  category={package},
+  parent={packages}
+}
+
+ at package{glossaries-accsupp,
+  name={\styfmt{glossaries\dhyphen accsupp}},
+  category={package},
+  parent={packages}
+}
+
+ at package{glossaries-extra-stylemods,
+  name={\styfmt{glossaries\dhyphen extra\dhyphen stylemods}},
+  category={package},
+  parent={packages}
+}
+
+ at package{glossaries-extra-bib2gls,
+  name={\styfmt{glossaries\dhyphen extra\dhyphen bib2gls}},
+  category={package},
+  parent={packages}
+}
+
+ at package{glossary-list,
+  name={\styfmt{glossary\dhyphen list}},
+  category={package},
+  parent={packages}
+}
+
+ at package{glossary-tree,
+  name={\styfmt{glossary\dhyphen tree}},
+  category={package},
+  parent={packages}
+}
+
+ at package{glossary-topic,
+  name={\styfmt{glossary\dhyphen topic}},
+  category={package},
+  parent={packages}
+}
+
+ at package{glossary-mcols,
+  name={\styfmt{glossary\dhyphen mcols}},
+  category={package},
+  parent={packages}
+}
+
+ at package{glossary-long,
+  name={\styfmt{glossary\dhyphen long}},
+  category={package},
+  parent={packages}
+}
+
+ at package{glossary-super,
+  name={\styfmt{glossary\dhyphen super}},
+  category={package},
+  parent={packages}
+}
+
+ at package{glossary-longbooktabs,
+  name={\styfmt{glossary\dhyphen longbooktabs}},
+  category={package},
+  parent={packages}
+}
+
+ at package{glossary-bookindex,
+  name={\styfmt{glossary\dhyphen bookindex}},
+  category={package},
+  parent={packages}
+}
+
+ at package{glossary-longextra,
+  name={\styfmt{glossary\dhyphen longextra}},
+  category={package},
+  parent={packages}
+}
+
+ at package{booktabs,
+  name={\styfmt{booktabs}},
+  category={package},
+  parent={packages}
+}
+
+ at package{color,
+  name={\styfmt{color}},
+  category={package},
+  parent={packages}
+}
+
+ at package{graphics,
+  name={\styfmt{graphics}},
+  category={package},
+  parent={packages}
+}
+
+ at package{graphicx,
+  name={\styfmt{graphicx}},
+  category={package},
+  parent={packages}
+}
+
+ at package{ifthen,
+  name={\styfmt{ifthen}},
+  category={package},
+  parent={packages}
+}
+
+ at package{probsoln,
+  name={\styfmt{probsoln}},
+  category={package},
+  parent={packages}
+}
+
+ at package{shortvrb,
+  name={\styfmt{shortvrb}},
+  category={package},
+  parent={packages}
+}
+
+ at package{jmlrutils,
+  name={\styfmt{jmlrutils}},
+  category={package},
+  parent={packages}
+}
+
+ at package{inputenc,
+  name={\styfmt{inputenc}},
+  category={package},
+  parent={packages}
+}
+
+ at package{fontenc,
+  name={\styfmt{fontenc}},
+  category={package},
+  parent={packages}
+}
+
+ at package{slantsc,
+  name={\styfmt{slantsc}},
+  category={package},
+  parent={packages}
+}
+
+ at package{relsize,
+  name={\styfmt{relsize}},
+  category={package},
+  parent={packages}
+}
+
+ at package{babel,
+  name={\styfmt{babel}},
+  category={package},
+  parent={packages}
+}
+
+ at package{polyglossia,
+  name={\styfmt{poly\-glossia}},
+  category={package},
+  parent={packages}
+}
+
+ at package{fontspec,
+  name={\styfmt{font\-spec}},
+  category={package},
+  parent={packages}
+}
+
+ at package{amsmath,
+  name={\styfmt{amsmath}},
+  category={package},
+  parent={packages}
+}
+
+ at package{textcase,
+  name={\styfmt{text\-case}},
+  category={package},
+  parent={packages}
+}
+
+ at package{datetime2,
+  name={\styfmt{date\-time2}},
+  category={package},
+  parent={packages}
+}
+
+ at package{datatool-base,
+  name={\styfmt{data\-tool\dhyphen base}},
+  category={package},
+  parent={packages}
+}
+
+ at package{datatool,
+  name={\styfmt{data\-tool}},
+  category={package},
+  parent={packages}
+}
+
+ at package{datagidx,
+  name={\styfmt{data\-gidx}},
+  category={package},
+  parent={packages}
+}
+
+ at package{etoolbox,
+  name={\styfmt{etool\-box}},
+  category={package},
+  parent={packages}
+}
+
+ at package{soul,
+  name={\styfmt{soul}},
+  category={package},
+  parent={packages}
+}
+
+ at package{xcolor,
+  name={\styfmt{xcolor}},
+  category={package},
+  parent={packages}
+}
+
+ at package{tracklang,
+  name={\styfmt{track\-lang}},
+  category={package},
+  parent={packages}
+}
+
+ at package{accsupp,
+  name={\styfmt{acc\-supp}},
+  category={package},
+  parent={packages}
+}
+
+ at index{stringconcatenation,
+  name={string concatenation}
+}
+
+ at index{concatenation,
+ alias={stringconcatenation}
+}
+
+ at symbol{stringconcat,
+  name={\code{\#} (\extfmt{bib} string concatenation)},
+  text={\code{\#}}
+}
+
+ at symbol{atchar,
+  name={\code{@} (bib entry identifier)},
+  text={\code{@}}
+}
+
+ at specialchar{param,
+  name={\code{\#} (parameter)},
+  text={\code{\#}}
+}
+
+ at symbol{hashchar,
+  name={\code{\#} (literal)},
+  text={\code{\#}}
+}
+
+ at command{cs.hash,
+  name={\csfmt{\#}},
+  description={produces the hash symbol \#},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at specialchar{colsep,
+  name={\code{\&} (alignment)},
+  text={\code{\&}}
+}
+
+ at symbol{ampchar,
+  name={\code{\&} (literal)},
+  text={\code{\&}}
+}
+
+ at symbol{ampand,
+  name={\code{\&} (boolean AND)},
+  text={\code{\&}}
+}
+
+ at command{cs.amp,
+  name={\csfmt{\&}},
+  description={produces the ampersand symbol \&},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at specialchar{bgroupchar,
+  name={\code{\glsopenbrace} (begin group)},
+  text={\code{\glsopenbrace}}
+}
+
+ at symbol{openbracechar,
+  name={\code{\glsopenbrace} (literal)},
+  text={\code{\glsopenbrace}}
+}
+
+ at command{cs.openbrace,
+  name={\csfmt{\glsopenbrace}},
+  description={produces the open brace symbol \glsopenbrace},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at specialchar{egroupchar,
+  name={\code{\glsclosebrace} (end group)},
+  text={\code{\glsclosebrace}}
+}
+
+ at symbol{closebracechar,
+  name={\code{\glsclosebrace} (literal)},
+  text={\code{\glsclosebrace}}
+}
+
+ at command{cs.closebrace,
+  name={\csfmt{\glsclosebrace}},
+  description={produces the close brace symbol \glsclosebrace},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at specialchar{commentchar,
+  name={\code{\%} (comment)},
+  text={\code{\%}}
+}
+
+ at symbol{percentchar,
+  name={\code{\%} (literal)},
+  text={\code{\%}}
+}
+
+ at command{cs.percent,
+  name={\csfmt{\%}},
+  description={produces the percent symbol \%},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at specialchar{sbchar,
+  name={\code{\_} (subscript)},
+  text={\code{\_}}
+}
+
+ at symbol{underscorechar,
+  name={\code{\_} (literal)},
+  text={\code{\_}}
+}
+
+ at command{cs.underscore,
+  name={\csfmt{\_}},
+  description={produces the underscore symbol \_},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at specialchar{spchar,
+  name={\code{\char`\^} (superscript)},
+  text={\code{\char`\^}}
+}
+
+ at symbol{circumchar,
+  name={\code{\char`\^} (literal)},
+  text={\code{\char`\^}}
+}
+
+ at command{cs.circum,
+  name={\csfmt{\char`\^}},
+  user1={\margm{character}},
+  description={puts a circumflex accent over \meta{character}},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at symbol{regex.circum,
+  name={\code{\char`\^} (regular expression)},
+  text={\code{\char`\^}}
+}
+
+ at symbol{regex.dollar,
+  name={\code{\char`\$} (regular expression)},
+  text={\code{\char`\$}}
+}
+
+ at specialchar{mshiftchar,
+  name={\code{\$} (maths shift)},
+  text={\code{\$}}
+}
+
+ at symbol{dollarchar,
+  name={\code{\$} (literal)},
+  text={\code{\$}}
+}
+
+ at command{cs.dollar,
+  name={\csfmt{\$}},
+  description={produces the dollar symbol \$},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at specialchar{escchar,
+  name={\code{\glsbackslash} (escape)},
+  text={\code{\glsbackslash}}
+}
+
+ at symbol{backslashchar,
+  name={\code{\glsbackslash} (literal)},
+  text={\code{\glsbackslash}}
+}
+
+% See QUARKS for literal \\ in regular expression
+
+ at command{cs.backslash,
+  name={\csfmt{\glsbackslash}},
+  user1={\oargm{len}},
+  description={starts a new row in a tabular or array context
+with an extra vertical space of length \meta{len} above it
+(starred form prohibits a page break)},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{tabularnewline,
+  name={\csfmt{tabular\-new\-line}},
+  user1={\oargm{len}},
+  description={tabular version of \idx{cs.backslash} (avoids conflict
+with forced line breaks in paragraph column formats)},
+  note={kernel command},
+  category={command}
+}
+
+ at specialchar{nbspchar,
+  name={\code{\glstildechar} (non-breakable space)},
+  text={\code{\glstildechar}}
+}
+
+ at symbol{tildechar,
+  name={\code{\glstildechar} (literal)},
+  text={\code{\glstildechar}}
+}
+
+ at symbol{doublequotechardelim,
+  name = {\code{"} (delimiter)},
+  text = {\code{"}}
+}
+
+ at symbol{doublequotecharhex,
+  name = {\code{"} (hexadecimal identifier)},
+  text = {\code{"}}
+}
+
+ at specialchar{doublequoteactivechar,
+  name = {\code{"} (active)},
+  text = {\code{"}}
+}
+
+ at symbol{doublequotechar,
+  name = {\code{"} (literal)},
+  text = {\code{"}}
+}
+
+ at symbol{openrange,
+  name = {\code{\rangestartmark} (start range)},
+  text = {\code{\rangestartmark}}
+}
+
+ at symbol{regexp.startgroup,
+  name={\code{\rangestartmark} (regular expression, start group)},
+  text={\code{\rangestartmark}}
+}
+
+ at symbol{openparenchar,
+  name = {\code{\rangestartmark} (literal open parenthesis)},
+  text = {\code{\rangestartmark}}
+}
+
+ at symbol{closerange,
+  name = {\code{\rangeendmark} (end range)},
+  text = {\code{\rangeendmark}}
+}
+
+ at symbol{regexp.endgroup,
+  name={\code{\rangeendmark} (regular expression, end group)},
+  text={\code{\rangeendmark}}
+}
+
+ at symbol{closeparenchar,
+  name = {\code{\rangeendmark} (literal close parenthesis)},
+  text = {\code{\rangeendmark}}
+}
+
+ at symbol{regexp.startclass,
+  name={\code{[} (regular expression, start class)},
+  text={\code{[}}
+}
+
+ at symbol{regexp.endclass,
+  name={\code{]} (regular expression, end class)},
+  text={\code{]}}
+}
+
+ at symbol{opensqchar,
+  name = {\code{[} (literal open square bracket)},
+  text = {\code{[}}
+}
+
+ at symbol{closesqchar,
+  name = {\code{]} (literal close square bracket)},
+  text = {\code{]}}
+}
+
+ at symbol{startoptional,
+  name = {\code{[} (optional)},
+  text = {\code{[}}
+}
+
+ at symbol{endoptional,
+  name = {\code{]} (optional)},
+  text = {\code{]}}
+}
+
+ at command{cs.tilde,
+  name={\csfmt{\glstildechar}},
+  user1={\margm{character}},
+  description={puts tilde accent over \meta{character}},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at symbol{slashchar,
+  name={\code{/}}
+}
+
+ at symbol{equalschar,
+  name={\code{=} (literal)},
+  text={\code{=}}
+}
+
+ at symbol{equalsassign,
+  name={\code{=} (assignment)},
+  text={\code{=}}
+}
+
+ at symbol{equalscmp,
+  name={\code{=} (comparison)},
+  text={\code{=}}
+}
+
+ at symbol{notequalscmp,
+  name={\code{<>} (comparison)},
+  text={\code{<>}}
+}
+
+ at symbol{ltcmp,
+  name={\code{<} (comparison)},
+  text={\code{<}}
+}
+
+ at symbol{ltchar,
+  name={\code{<} (literal)},
+  text={\code{<}}
+}
+
+ at symbol{regex.lt,
+  name={\code{<} (regular expression)},
+  text={\code{<}}
+}
+
+ at symbol{lecmp,
+  name={\code{<=} (comparison)},
+  text={\code{<=}}
+}
+
+ at symbol{gtcmp,
+  name={\code{>} (comparison)},
+  text={\code{>}}
+}
+
+ at symbol{gtchar,
+  name={\code{>} (literal)},
+  text={\code{>}}
+}
+
+ at symbol{regex.gt,
+  name={\code{>} (regular expression)},
+  text={\code{>}}
+}
+
+ at symbol{gecmp,
+  name={\code{>=} (comparison)},
+  text={\code{>=}}
+}
+
+ at symbol{hyphenchar,
+  name={\code{-} (literal)},
+  text={\code{-}}
+}
+
+ at symbol{follow,
+  name={\code{->} (field ref)},
+  text={\code{->}}
+}
+
+ at command{comma,
+  name={\csfmt{,}},
+  description={thin space},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at symbol{commasep,
+  name={\code{,} (separator)},
+  text={\code{,}}
+}
+
+ at command{vec,
+  name={\csfmt{vec}},
+  user1={\margm{character}},
+  description={puts right arrow accent over \meta{character}},
+  note={kernel command\texparserdefnote\ (maths mode)},
+  category={command}
+}
+
+ at symbol{zeroormore,
+  name={\code{*} (regular expression, zero or more)},
+  text={\code{*}}
+}
+
+ at symbol{starchar,
+  name={\code{*} (literal)},
+  text={\code{*}}
+}
+
+ at symbol{oneormore,
+  name={\code{+} (regular expression, one or more)},
+  text={\code{+}}
+}
+
+ at symbol{pluschar,
+  name={\code{+} (literal)},
+  text={\code{+}}
+}
+
+ at symbol{concat-plus,
+  name={\code{+} (resource option concatenation)},
+  text={\code{+}}
+}
+
+ at symbol{regex.question,
+  name={\code{?} (regular expression, zero or one)},
+  text={\code{?}}
+}
+
+ at symbol{questionchar,
+  name={\code{?} (literal)},
+  text={\code{?}}
+}
+
+ at symbol{regexpor,
+  name={\code{|} (regular expression or)},
+  text={\code{|}}
+}
+
+ at symbol{pipechar,
+  name={\code{|}}
+}
+
+ at symbol{pipeor,
+  name={\code{|} (boolean OR)},
+  text={\code{|}}
+}
+
+ at symbol{colonchar,
+  name={\code{:} (literal)},
+  text={\code{:}}
+}
+
+ at symbol{exclamnot,
+  name={\code{!} (boolean NOT)},
+  text={\code{!}}
+}
+
+ at symbol{matchanydot,
+  name={\code{.}\ (regular expression, match any)},
+  text={\code{.}}
+}
+
+ at symbol{periodchar,
+  name={\code{.}\ (end of sentence)},
+  text={\code{.}},
+  alias={full-stop}
+}
+
+ at command{cs.period,
+  name={\csfmt{.}},
+  user1={\margm{character}},
+  description={puts a dot accent over \meta{character}},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{cs.space,
+  name={\csfmt{\textvisiblespace}},
+  description={produces an inter-word space},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{space,
+  name={\csfmt{space}},
+  description={produces a space},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{nobreakspace,
+  name={\csfmt{no\-break\-space}},
+  description={produces a non-breakable space},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at symbol{aposchar,
+  name={\code{'} (apostrophe)},
+  text={\code{'}},
+  alias={apostrophe}
+}
+
+ at command{def,
+  name={\csfmt{def}},
+  user1={\margm{cs}\meta{syntax}\margm{definition}},
+  description={defines the control sequence \meta{cs}, without checking if the command
+   already exists},
+  note={\TeX\ primitive\texparserdefnote},
+  category={command}
+}
+
+ at command{edef,
+  name={\csfmt{edef}},
+  user1={\margm{cs}\meta{syntax}\margm{definition}},
+  description={defines the control sequence \meta{cs} to the full
+expansion of \meta{definition}, without checking if the command
+   already exists},
+  note={\TeX\ primitive\texparserdefnote},
+  category={command}
+}
+
+ at command{ifstrempty,
+  name={\csfmt{if\-str\-empty}},
+  user1={\margm{string}\margm{true}\margm{false}},
+  description={tests if \meta{string} is empty},
+  note={\styfmt{etoolbox}},
+  category={command}
+}
+
+ at command{ifstrequal,
+  name={\csfmt{if\-str\-equal}},
+  user1={\margm{string1}\margm{string2}\margm{true}\margm{false}},
+  description={tests if \meta{string1} equals \meta{string2}},
+  note={\styfmt{etoolbox}},
+  category={command}
+}
+
+ at command{ifcsstring,
+  name={\csfmt{if\-cs\-string}},
+  user1={\margm{cs-name}\margm{string}\margm{true}\margm{false}},
+  description={tests if the replacement text of the command
+  given by the control sequence name \meta{cs-name} equals \meta{string}},
+  note={\styfmt{etoolbox}},
+  category={command}
+}
+
+ at command{ifdefstrequal,
+  name={\csfmt{if\-def\-str\-equal}},
+  user1={\margm{cs1}\margm{cs2}\margm{true}\margm{false}},
+  description={tests if the replacement text of the command
+  \meta{cs1} equals the replacement text of the command \meta{cs2}},
+  note={\styfmt{etoolbox}},
+  category={command}
+}
+
+ at command{ifcsstrequal,
+  name={\csfmt{if\-cs\-str\-equal}},
+  user1={\margm{cs-name1}\margm{cs-name2}\margm{true}\margm{false}},
+  description={tests if the replacement text of the command given by
+  the control sequence name \meta{cs-name1} equals the replacement text 
+  of the command given by the control sequence name \meta{cs-name2}},
+  note={\styfmt{etoolbox}},
+  category={command}
+}
+
+ at command{undef,
+  name={\csfmt{undef}},
+  user1={\meta{cs}},
+  description={undefines the control sequence \meta{cs}},
+  note={\styfmt{etoolbox}\texparserdefnote},
+  category={command}
+}
+
+ at command{csdef,
+  name={\csfmt{csdef}},
+  user1={\margm{cs-name}\meta{syntax}\margm{definition}},
+  description={defines the control sequence whose name
+   is given by \meta{cs-name}, without checking if the command
+   already exists},
+  note={\styfmt{etoolbox}\texparserdefnote},
+  category={command}
+}
+
+ at command{csuse,
+  name={\csfmt{csuse}},
+  user1={\margm{cs-name}},
+  description={uses the control sequence whose name
+   is given by \meta{cs-name} or does nothing if the command
+   isn't defined},
+  note={\styfmt{etoolbox}\texparserdefnote},
+  category={command}
+}
+
+ at command{newrobustcmd,
+  name={\csfmt{new\-robust\-cmd}},
+  user1={\margm{cs}\oargm{n}\oargm{def}\margm{code}},
+  description={behaves like \cs{newcommand} but the newly defined
+command will be robust},
+  note={\styfmt{etoolbox}},
+  category={command}
+}
+
+ at command{ifdefempty,
+  name={\csfmt{if\-def\-empty}},
+  user1={\margm{cs}\margm{true}\margm{false}},
+  description={tests if the control sequence \meta{cs} is empty},
+  note={\styfmt{etoolbox}\texparserdefnote},
+  category={command}
+}
+
+ at command{ifcsundef,
+  name={\csfmt{if\-cs\-un\-def}},
+  user1={\margm{cs-name}\margm{true}\margm{false}},
+  description={tests if the control sequence given by \meta{cs-name}
+is undefined},
+  note={\styfmt{etoolbox}},
+  category={command}
+}
+
+ at command{ifcsdef,
+  name={\csfmt{if\-cs\-def}},
+  user1={\margm{cs-name}\margm{true}\margm{false}},
+  description={tests if the control sequence given by \meta{cs-name}
+is defined},
+  note={\styfmt{etoolbox}},
+  category={command}
+}
+
+ at command{ifdef,
+  name={\csfmt{if\-def}},
+  user1={\margm{cs}\margm{true}\margm{false}},
+  description={tests if the control sequence \meta{cs} is defined},
+  note={\styfmt{etoolbox}\texparserdefnote},
+  category={command}
+}
+
+ at command{xifinlist,
+  name={\csfmt{xifinlist}},
+  user1={\margm{element}\margm{list cs}\margm{true}\margm{false}},
+  description={tests if the expansion of \meta{element} is in the list stored
+   in the control sequence \meta{list cs}},
+  note={\styfmt{etoolbox}},
+  category={command}
+}
+
+ at command{ifinlist,
+  name={\csfmt{ifinlist}},
+  user1={\margm{element}\margm{list cs}\margm{true}\margm{false}},
+  description={tests if \meta{element} is in the list stored
+   in the control sequence \meta{list cs}},
+  note={\styfmt{etoolbox}},
+  category={command}
+}
+
+ at command{listxadd,
+  name={\csfmt{listxadd}},
+  user1={\margm{list cs}\margm{element}},
+  description={globally adds (expanded) \meta{element} to the list stored
+   in the control sequence \meta{list cs}},
+  note={\styfmt{etoolbox}},
+  category={command}
+}
+
+ at command{listgadd,
+  name={\csfmt{listgadd}},
+  user1={\margm{list cs}\margm{element}},
+  description={globally adds \meta{element} to the list stored
+   in the control sequence \meta{list cs}},
+  note={\styfmt{etoolbox}},
+  category={command}
+}
+
+ at command{appto,
+  name={\csfmt{appto}},
+  user1={\margm{cs}\margm{code}},
+  description={appends \meta{code} to the definition of
+   the control sequence \meta{cs}},
+  note={\styfmt{etoolbox}\texparserdefnote},
+  category={command}
+}
+
+ at command{forlistloop,
+  name={\csfmt{for\-list\-loop}},
+  user1={\margm{handler cs}\margm{list cs}},
+  description={iterates over the internal list given by the command 
+   \meta{list cs} and performs \meta{handler cs}\margm{element} for
+   each element},
+  note={\styfmt{etoolbox}},
+  category={command}
+}
+
+ at command{foreignlanguage,
+  name={\csfmt{foreign\-language}},
+  user1={\margm{language name}\margm{text}},
+  description={typesets \meta{text} according to the rules of the
+given language},
+  note={\styfmt{babel}},
+  category={command}
+}
+
+ at command{selectlanguage,
+  name={\csfmt{select\-language}},
+  user1={\margm{language name}},
+  description={switch to the rules of the given language},
+  note={\styfmt{babel} and \styfmt{polyglossia}},
+  category={command}
+}
+
+ at command{setmainlanguage,
+  name={\csfmt{set\-main\-language}},
+  user1={\oargm{options}\margm{language name}},
+  description={load the main document language},
+  note={\styfmt{polyglossia}},
+  category={command}
+}
+
+ at command{setotherlanguage,
+  name={\csfmt{set\-other\-language}},
+  user1={\oargm{options}\margm{language name}},
+  description={load a secondary document language},
+  note={\styfmt{polyglossia}},
+  category={command}
+}
+
+ at command{textlanguage,
+  name={\csfmt{text\-\meta{language}}},
+  user1={\oargm{options}\margm{text}},
+  description={typeset \meta{text} according to \meta{language}},
+  note={\styfmt{polyglossia}},
+  category={command}
+}
+
+ at package{marvosym,
+  name={\styfmt{marvosym}},
+  category={package},
+  parent={packages}
+}
+
+ at package{ifsym,
+  name={\styfmt{ifsym}},
+  category={package},
+  parent={packages}
+}
+
+ at package{CJKutf8,
+  name={\styfmt{CJKutf8}},
+  category={package},
+  parent={packages}
+}
+
+ at environment{env.CJK,
+  name={\envfmt{CJK}},
+  user1={\oargm{font encoding}\margm{encoding}\margm{family}},
+  description={sets up support for \idx{CJK} content},
+  note={\styfmt{CJK}},
+  category={environment}
+}
+
+ at environment{env.document,
+  name={\envfmt{document}},
+  description={contains the entire document text},
+  note={kernel command\texparserdefnote},
+  category={environment}
+}
+
+ at environment{env.description,
+  name={\envfmt{description}},
+  description={list-like environment},
+  note={provided by most classes},
+  category={environment}
+}
+
+ at package{longtable,
+  name={\styfmt{longtable}},
+  category={package},
+  parent={packages}
+}
+
+ at environment{env.longtable,
+  name={\envfmt{longtable}},
+  user1={\oargm{halign}\margm{column specs}},
+  description={a tabular-like environment that can span multiple
+pages (not available in multi-column or certain other contexts)},
+  note={\styfmt{longtable}},
+  category={environment}
+}
+
+ at environment{env.tabular,
+  name={\envfmt{tabular}},
+  user1={\oargm{valign}\margm{column specs}},
+  description={aligns material in rows and columns with \idx{colsep}
+to separate columns and \cs{cs.backslash} to separate rows},
+  note={kernel environment},
+  category={environment}
+}
+
+ at package{tabularx,
+  name={\styfmt{tabularx}},
+  category={package},
+  parent={packages}
+}
+
+ at environment{env.tabularx,
+  name={\envfmt{tabularx}},
+  user1={\margm{width}\oargm{valign}\margm{column specs}},
+  description={a tabular-like environment that's designed to fit the
+   given \meta{width})},
+  note={\styfmt{tabularx}},
+  category={environment}
+}
+
+ at package{supertabular,
+  name={\styfmt{supertabular}},
+  category={package},
+  parent={packages}
+}
+
+ at index{env.supertabular,
+  name={\envfmt{supertabular}},
+  user1={\margm{column specs}},
+  description={a tabular-like environment that can span multiple
+pages (not available in multi-column or certain other contexts)},
+  note={\styfmt{supertabular}},
+  category={environment}
+}
+
+ at glsenvironment{env.theglossary,
+  name={\envfmt{theglossary}},
+  category={environment}
+}
+
+ at glsenvironment{env.printunsrtglossarywrap,
+  name={\envfmt{print\-unsrt\-glossary\-wrap}},
+  category={environment}
+}
+
+ at topic{abbreviationstyles,
+  name={abbreviation styles},
+  text={abbreviation style},
+  description={abbreviation styles are set using
+  \ics{newabbreviation} and govern the format of commands like \ics{gls}
+  (display style) and \ics{glsxtrfull} (inline style). The inline
+   style may or may not match the first use format of the display
+   style. To allow for greater flexibility in abbreviation styles,
+   \cs{gls} (and its variants) normally treat abbreviations
+   differently to other terms, but some abbreviation styles can work better 
+   if the abbreviation is treated as a general term so in those cases the 
+   style sets the \catattr{regular} attribute to \qt{true} for
+   the entry's category. The \styfmt{glossaries-extra} package comes with the file
+\href{http://mirrors.ctan.org/macros/latex/contrib/glossaries-extra/samples/sample-abbr-styles.pdf}{\filefmt{sample-abbr-styles.pdf}}
+  that demonstrates all predefined styles}
+}
+
+ at abbreviationstyle{abbrstyle.long-short,
+  name={\abbrstylefmt{long\dhyphen short}},
+  description={this abbreviation style displays the long form on
+  \idx{firstuse} of the \cs{gls}-like commands followed by the 
+  short form in parentheses (formatted with \cs{glsxtrparen}). 
+  Only the short form is shown on subsequent use. The
+  \field{description} field is set to the long form},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtrlongshortname,
+  name={\csfmt{gls\-xtr\-long\-short\-name}},
+  description={hook for the \abbrstyle{long-short} abbreviation
+  styles that expands to the value that the \field{name} field is
+  assigned to when the abbreviation is defined with
+  \cs{newabbreviation} (defaults to the short form)},
+  topics={abbrstyle.long-short,abbrstyle.long-short-sc,abbrstyle.long-short-sm,abbrstyle.long-short-em,abbrstyle.long-em-short-em,abbrstyle.long-short-user,abbrstyle.long-postshort-user,abbrstyle.long-hyphen-short-hyphen,abbrstyle.long-hyphen-postshort-hyphen},
+  note={\styfmt{glossaries-extra} v1.25+},
+  category={command}
+}
+
+ at abbrvstylecommand{glslongdefaultfont,
+  name={\csfmt{gls\-long\-default\-font}},
+  user1={\margm{text}},
+  description={used by the abbreviation styles that don't have a
+   specific font to format the long form. The default definition
+just does its argument without any formatting},
+  topics={abbrstyle.long-short,abbrstyle.short-long,abbrstyle.short-nolong,abbrstyle.nolong-short,abbrstyle.nolong-short-noreg,abbrstyle.short-nolong-desc,abbrstyle.long-noshort-desc,abbrstyle.long-noshort-desc-noreg,abbrstyle.long-short-sc,abbrstyle.long-short-sc-desc,abbrstyle.short-sc-long,abbrstyle.short-sc-long-desc,abbrstyle.short-sc-nolong,abbrstyle.short-sc-nolong-desc,abbrstyle.nolong-short-sc,abbrstyle.long-noshort-sc,abbrstyle.long-noshort-sc-desc,abbrstyle.long-short-sm,abbrstyle.long-short-sm-desc,abbrstyle.short-sm-long,abbrstyle.short-sm-long-desc,abbrstyle.short-sm-nolong,abbrstyle.short-sm-nolong-desc,abbrstyle.nolong-short-sm,abbrstyle.long-noshort-sm,abbrstyle.long-noshort-sm-desc,abbrstyle.long-short-em,abbrstyle.long-short-em-desc,abbrstyle.short-em-long,abbrstyle.short-em-long-desc,abbrstyle.short-em-nolong,abbrstyle.short-em-nolong-desc,abbrstyle.nolong-short-em,abbrstyle.long-noshort-em,abbrstyle.long-noshort-em-desc,abbrstyle.long-noshort,abbrstyle.long-noshort-noreg,abbrstyle.long-short-desc},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstlongdefaultfont,
+  name={\csfmt{gls\-first\-long\-default\-font}},
+  user1={\margm{text}},
+  description={used by the abbreviation styles that don't have a
+   specific font to format the long form on \idx{firstuse}. The
+   default definition uses \cs{glslongdefaultfont}},
+  topics={abbrstyle.long-short,abbrstyle.short-long,abbrstyle.short-nolong,abbrstyle.nolong-short,abbrstyle.nolong-short-noreg,abbrstyle.short-nolong-desc,abbrstyle.long-noshort-desc,abbrstyle.long-noshort-desc-noreg,abbrstyle.long-short-sc,abbrstyle.long-short-sc-desc,abbrstyle.short-sc-long,abbrstyle.short-sc-long-desc,abbrstyle.short-sc-nolong,abbrstyle.short-sc-nolong-desc,abbrstyle.nolong-short-sc,abbrstyle.long-noshort-sc,abbrstyle.long-noshort-sc-desc,abbrstyle.long-short-sm,abbrstyle.long-short-sm-desc,abbrstyle.short-sm-long,abbrstyle.short-sm-long-desc,abbrstyle.short-sm-nolong,abbrstyle.short-sm-nolong-desc,abbrstyle.nolong-short-sm,abbrstyle.long-noshort-sm,abbrstyle.long-noshort-sm-desc,abbrstyle.long-short-em,abbrstyle.long-short-em-desc,abbrstyle.short-em-long,abbrstyle.short-em-long-desc,abbrstyle.short-em-nolong,abbrstyle.short-em-nolong-desc,abbrstyle.nolong-short-em,abbrstyle.long-noshort-em,abbrstyle.long-noshort-em-desc,abbrstyle.long-noshort,abbrstyle.long-noshort-noreg,abbrstyle.long-short-desc},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at abbrvstylecommand{glsabbrvdefaultfont,
+  name={\csfmt{gls\-abbrv\-default\-font}},
+  user1={\margm{text}},
+  description={used by the abbreviation styles that don't have a
+   specific font to format the short form. The default definition
+just does its argument without any formatting},
+  topics={abbrstyle.long-short,abbrstyle.short-long,abbrstyle.short-footnote,abbrstyle.short-postfootnote,abbrstyle.short-nolong,abbrstyle.nolong-short,abbrstyle.nolong-short-noreg,abbrstyle.short-nolong-desc,abbrstyle.long-noshort-desc,abbrstyle.long-noshort-desc-noreg,abbrstyle.long-hyphen-noshort-desc-noreg,abbrstyle.long-hyphen-noshort-noreg,abbrstyle.long-noshort,abbrstyle.long-noshort-noreg,abbrstyle.long-short-desc},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstabbrvdefaultfont,
+  name={\csfmt{gls\-first\-abbrv\-default\-font}},
+  user1={\margm{text}},
+  description={used by the abbreviation styles that don't have a
+   specific font to format the short form on \idx{firstuse}. The
+   default definition uses \cs{glsabbrvdefaultfont}},
+  topics={abbrstyle.long-short,abbrstyle.short-long,abbrstyle.short-footnote,abbrstyle.short-postfootnote,abbrstyle.short-nolong,abbrstyle.nolong-short,abbrstyle.nolong-short-noreg,abbrstyle.short-nolong-desc,abbrstyle.long-noshort-desc,abbrstyle.long-noshort-desc-noreg,abbrstyle.long-hyphen-noshort-desc-noreg,abbrstyle.long-hyphen-noshort-noreg,abbrstyle.long-noshort,abbrstyle.long-noshort-noreg,abbrstyle.long-short-desc},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.long-short-desc,
+  name={\abbrstylefmt{long\dhyphen short\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-short} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtrlongshortdescname,
+  name={\csfmt{gls\-xtr\-long\-short\-desc\-name}},
+  description={hook for the \abbrstyle{long-short-desc} abbreviation
+  styles that expands to the value that the \field{name} field is
+  assigned to when the abbreviation is defined with
+  \cs{newabbreviation} (defaults to the long form followed by the
+  short form in parentheses)},
+  topics={abbrstyle.long-short-desc,abbrstyle.long-short-sc-desc,abbrstyle.long-short-sm-desc,abbrstyle.long-short-em-desc,abbrstyle.long-em-short-em-desc,abbrstyle.long-hyphen-short-hyphen-desc,abbrstyle.long-hyphen-postshort-hyphen-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.short-long,
+  name={\abbrstylefmt{short\dhyphen long}},
+  description={this abbreviation style displays the short form on
+  \idx{firstuse} of the \cs{gls}-like commands followed by the 
+  long form in parentheses (formatted with \cs{glsxtrparen}). 
+  Only the short form is shown on subsequent use. The
+  \field{description} field is set to the long form},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtrshortlongname,
+  name={\csfmt{gls\-xtr\-short\-long\-name}},
+  description={hook for the \abbrstyle{short-long} abbreviation styles
+  that expands to the value that the \field{name} field is assigned
+  to when the abbreviation is defined with \cs{newabbreviation} 
+  (defaults to the short form)},
+  topics={abbrstyle.short-long,abbrstyle.short-sc-long,abbrstyle.short-sm-long,abbrstyle.short-em-long,abbrstyle.short-em-long-em,abbrstyle.short-postlong-user,abbrstyle.short-long-user,abbrstyle.short-hyphen-long-hyphen,abbrstyle.short-hyphen-postlong-hyphen},
+  note={\styfmt{glossaries-extra} v1.25+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.short-long-desc,
+  name={\abbrstylefmt{short\dhyphen long\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-long} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtrshortlongdescname,
+  name={\csfmt{gls\-xtr\-short\-long\-desc\-name}},
+  description={hook for the \abbrstyle{short-long-desc} abbreviation
+  styles that expands to the value that the \field{name} field is
+  assigned to when the abbreviation is defined with
+  \cs{newabbreviation} (defaults to the long form followed by the
+  short form in parentheses)},
+  topics={abbrstyle.short-long-desc,abbrstyle.short-sc-long-desc,abbrstyle.short-sm-long-desc,abbrstyle.short-em-long-desc,abbrstyle.short-em-long-em-desc,abbrstyle.short-hyphen-long-hyphen-desc,abbrstyle.short-hyphen-postlong-hyphen-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.short-footnote,
+  name={\abbrstylefmt{short\dhyphen footnote}},
+  description={this abbreviation style displays the short form on
+  \idx{firstuse} of the \cs{gls}-like commands with the long form as
+  a footnote.  Only the short form is shown on subsequent use. The
+  \field{description} field is set to the long form. The inline full
+  form obtained with commands like \cs{glsxtrfull} uses a
+  parenthetical style. Since this can result in nested hyperlinks
+  (from the \idx{link-text} to the glossary and from the footnote
+  marker to the footnote) this style automatically sets the
+  \catattr{nohyperfirst} category attribute to \optfmt{true} for
+  the entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.footnote,
+  name={\abbrstylefmt{footnote}},
+  description={an alias for \abbrstyle{short-footnote}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glslongfootnotefont,
+  name={\csfmt{gls\-long\-foot\-note\-font}},
+  user1={\margm{text}},
+  description={used with the \qt{footnote} abbreviation styles to
+   format the long form},
+  topics={abbrstyle.short-footnote,abbrstyle.short-postfootnote,abbrstyle.short-sc-footnote,abbrstyle.short-sc-postfootnote,abbrstyle.short-sm-footnote,abbrstyle.short-sm-postfootnote,abbrstyle.short-em-footnote,abbrstyle.short-em-postfootnote},
+  note={\styfmt{glossaries-extra} v1.05+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstlongfootnotefont,
+  name={\csfmt{gls\-first\-long\-foot\-note\-font}},
+  user1={\margm{text}},
+  description={used with the \qt{footnote} abbreviation styles to
+   format the long form on first use},
+  topics={abbrstyle.short-footnote,abbrstyle.short-postfootnote,abbrstyle.short-sc-footnote,abbrstyle.short-sc-postfootnote,abbrstyle.short-sm-footnote,abbrstyle.short-sm-postfootnote,abbrstyle.short-em-footnote,abbrstyle.short-em-postfootnote},
+  note={\styfmt{glossaries-extra} v1.05+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtrabbrvfootnote,
+  name={\csfmt{gls\-xtr\-abbrv\-foot\-note}},
+  user1={\margm{label}\margm{long form}},
+  description={used with the \qt{footnote} abbreviation styles to
+   do the footnote. The \meta{label} is ignored by default. The
+   \meta{long form} includes the font changing command. This just
+   does \code{\cs{footnote}\margm{long form}}},
+  topics={abbrstyle.short-footnote,abbrstyle.short-postfootnote,abbrstyle.short-sc-footnote,abbrstyle.short-sc-postfootnote,abbrstyle.short-sm-footnote,abbrstyle.short-sm-postfootnote,abbrstyle.short-em-footnote,abbrstyle.short-em-postfootnote},
+  note={\styfmt{glossaries-extra} v1.07+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtrfootnotename,
+  name={\csfmt{gls\-xtr\-foot\-note\-name}},
+  description={hook for the \qt{footnote} abbreviation styles
+  that expands to the value that the \field{name} field is assigned
+  to when the abbreviation is defined with \cs{newabbreviation} 
+  (defaults to the short form)},
+  topics={abbrstyle.short-footnote,abbrstyle.short-postfootnote,abbrstyle.short-sc-footnote,abbrstyle.short-sc-postfootnote,abbrstyle.short-sm-footnote,abbrstyle.short-sm-postfootnote,abbrstyle.short-em-footnote,abbrstyle.short-em-postfootnote},
+  note={\styfmt{glossaries-extra} v1.25+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.short-postfootnote,
+  name={\abbrstylefmt{short\dhyphen postfootnote}},
+  description={this abbreviation style is like
+  \abbrstyle{short-footnote} but the footnote is moved to the
+  \idx{postlinkhook} (outside of the hyperlink, if enabled) to
+  prevent nested hyperlinks. This means that, unlike
+  \abbrstyle{short-footnote} the \catattr{nohyperfirst} attribute
+  isn't changed},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.postfootnote,
+  name={\abbrstylefmt{postfootnote}},
+  description={an alias for \abbrstyle{short-postfootnote}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-nolong,
+  name={\abbrstylefmt{short\dhyphen nolong}},
+  description={this abbreviation style only displays the \field{short} form 
+   with the \cs{gls}-like commands (regardless of the \idx{firstuseflag}). 
+   The \field{long} form can be accessed with \cs{glsxtrlong}. 
+   The \field{name} field is set to \cs{glsxtrshortnolongname} and the 
+   \field{description} field is set to the \field{long} form (unless 
+   overridden in the entry definition). The inline full form
+   displays the short form followed by the long form in parentheses. 
+   This style sets the \catattr{regular} attribute to \optfmt{true} 
+   for the entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short,
+  name={\abbrstylefmt{short}},
+  description={an alias for \abbrstyle{short-nolong}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-nolong-noreg,
+  name={\abbrstylefmt{short\dhyphen nolong\dhyphen noreg}},
+  description={this abbreviation style is like \abbrstyle{short-nolong} 
+   but doesn't set the \catattr{regular} attribute to \optfmt{true}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtrshortnolongname,
+  name={\csfmt{gls\-xtr\-short\-no\-long\-name}},
+  description={hook for the \abbrstyle{short-nolong} abbreviation styles
+  that expands to the value that the \field{name} field is assigned
+  to when the abbreviation is defined with \cs{newabbreviation} 
+  (defaults to the short form)},
+  topics={abbrstyle.short-nolong,abbrstyle.short-nolong-noreg,abbrstyle.short-sc-nolong,abbrstyle.short-sm-nolong,abbrstyle.short-em-nolong},
+  note={\styfmt{glossaries-extra} v1.25+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.short-nolong-desc,
+  name={\abbrstylefmt{short\dhyphen nolong\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-nolong} style but the \field{description}
+   field must be provided in the entry definition. This style sets
+  the \catattr{regular} attribute to \optfmt{true} for the entry's
+  category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-desc,
+  name={\abbrstylefmt{short-desc}},
+  description={an alias for \abbrstyle{short-nolong-desc}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-nolong-desc-noreg,
+  name={\abbrstylefmt{short\dhyphen nolong\dhyphen desc\dhyphen noreg}},
+  description={this abbreviation style is like \abbrstyle{short-nolong-desc} 
+   but doesn't set the \catattr{regular} attribute to \optfmt{true}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtrshortdescname,
+  name={\csfmt{gls\-xtr\-short\-desc\-name}},
+  description={hook for the \abbrstyle{short-nolong-desc} abbreviation styles
+  that expands to the value that the \field{name} field is assigned
+  to when the abbreviation is defined with \cs{newabbreviation} 
+  (defaults to the short form followed by long form in parentheses)},
+  topics={abbrstyle.short-nolong-desc,abbrstyle.short-nolong-desc-noreg,abbrstyle.short-sc-nolong-desc,abbrstyle.short-sm-nolong-desc,abbrstyle.short-em-nolong-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.nolong-short,
+  name={\abbrstylefmt{nolong\dhyphen short}},
+  description={this abbreviation style only displays the \field{short} form 
+   with the \cs{gls}-like commands (regardless of the \idx{firstuseflag}). 
+   The \field{long} form can be accessed with \cs{glsxtrlong}. 
+   The \field{name} field is set to \cs{glsxtrshortnolongname} and the 
+   \field{description} field is set to the \field{long} form (unless 
+   overridden in the entry definition). The inline full form
+   displays the long form followed by the short form in parentheses. 
+   This style sets the \catattr{regular} attribute to \optfmt{true}
+   for the entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.21+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.nolong-short-noreg,
+  name={\abbrstylefmt{nolong\dhyphen short\dhyphen noreg}},
+  description={this abbreviation style is like \abbrstyle{nolong-short} 
+   but doesn't set the \catattr{regular} attribute to \optfmt{true}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.21+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-noshort-desc,
+  name={\abbrstylefmt{long\dhyphen noshort\dhyphen desc}},
+  description={this abbreviation style only displays the \field{long} 
+   form with the \cs{gls}-like commands (regardless of the 
+   \idx{firstuseflag}). The \field{short}
+   form can be accessed with \cs{glsxtrshort}. The \field{name}
+   field is set to \cs{glsxtrlongnoshortdescname} and the \field{description}
+   field must be provided in the entry definition. The inline full
+   form displays the long form followed by the short form in
+   parentheses. This style sets the \catattr{regular} attribute to 
+   \optfmt{true} for the entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-desc,
+  name={\abbrstylefmt{long-desc}},
+  description={an alias for \abbrstyle{long-noshort-desc}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtrlongnoshortdescname,
+  name={\csfmt{gls\-xtr\-long\-no\-short\-desc\-name}},
+  description={hook for the \abbrstyle{long-noshort-desc} abbreviation styles
+  that expands to the value that the \field{name} field is assigned
+  to when the abbreviation is defined with \cs{newabbreviation} 
+  (defaults to the long form)},
+  topics={abbrstyle.long-noshort-desc,abbrstyle.long-noshort-desc-noreg,abbrstyle.long-em-noshort-em-desc,abbrstyle.long-hyphen-noshort-desc-noreg,abbrstyle.long-noshort-sc-desc,abbrstyle.long-noshort-sm-desc,abbrstyle.long-noshort-em-desc,abbrstyle.long-em-noshort-em-desc-noreg},
+  note={\styfmt{glossaries-extra} v1.25+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.long-noshort-desc-noreg,
+  name={\abbrstylefmt{long\dhyphen noshort\dhyphen desc\dhyphen noreg}},
+  description={this abbreviation style is like \abbrstyle{long-noshort-desc} 
+   but doesn't set the \catattr{regular} attribute to \optfmt{true}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-noshort,
+  name={\abbrstylefmt{long\dhyphen noshort}},
+  description={this abbreviation style only displays the \field{long} form 
+   with the \cs{gls}-like commands (regardless of the \idx{firstuseflag}). 
+   The \field{short} form can be accessed with \cs{glsxtrshort}. 
+   The \field{name} field is set to \cs{glsxtrlongnoshortname} and the 
+   \field{description} field is set to the \field{long} form (unless 
+   overridden in the entry definition). The inline full form
+   displays the long form followed by the short form in parentheses. 
+   This style sets the \catattr{regular} attribute to \optfmt{true} 
+   for the entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long,
+  name={\abbrstylefmt{long}},
+  description={an alias for \abbrstyle{long-noshort}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-noshort-noreg,
+  name={\abbrstylefmt{long\dhyphen noshort\dhyphen noreg}},
+  description={this abbreviation style is like \abbrstyle{long-noshort} 
+   but doesn't set the \catattr{regular} attribute to \optfmt{true}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtrlongnoshortname,
+  name={\csfmt{gls\-xtr\-long\-no\-short\-name}},
+  description={hook for the \abbrstyle{long-noshort} abbreviation styles
+  that expands to the value that the \field{name} field is assigned
+  to when the abbreviation is defined with \cs{newabbreviation} 
+  (defaults to the short form)},
+  topics={abbrstyle.long-noshort,abbrstyle.long-noshort-noreg,abbrstyle.long-noshort-sc,abbrstyle.long-noshort-sm,abbrstyle.long-noshort-em,abbrstyle.long-em-noshort-em,abbrstyle.long-em-noshort-em-noreg,abbrstyle.long-hyphen-noshort-noreg},
+  note={\styfmt{glossaries-extra} v1.25+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.long-short-sc,
+  name={\abbrstylefmt{long\dhyphen short\dhyphen sc}},
+  description={this abbreviation style is like \abbrstyle{long-short}
+  but the short form is displayed in small-caps (so it needs to be
+  in \idx{lowercase})},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtrscsuffix,
+  name={\csfmt{gls\-xtr\-sc\-suffix}},
+  user1={},
+  description={the suffix used to construct the plural for
+   the short form of abbreviations with the small-cap
+   \qt{sc} styles. This counteracts the effect of \cs{textsc}
+   using \ics{glstextup}},
+  topics={abbrstyle.long-short-sc,abbrstyle.long-short-sc-desc,abbrstyle.short-sc-long,abbrstyle.short-sc-long-desc,abbrstyle.short-sc-nolong,abbrstyle.short-sc-nolong-desc,abbrstyle.nolong-short-sc,abbrstyle.short-sc-footnote,abbrstyle.short-sc-postfootnote,abbrstyle.long-noshort-sc,abbrstyle.long-noshort-sc-desc},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at abbrvstylecommand{glsabbrvscfont,
+  name={\csfmt{gls\-abbrv\-sc\-font}},
+  user1={\margm{text}},
+  description={used with \qt{sc} abbreviation styles to format the
+short form using \cs{textsc}},
+  topics={abbrstyle.long-short-sc,abbrstyle.long-short-sc-desc,abbrstyle.short-sc-long,abbrstyle.short-sc-long-desc,abbrstyle.short-sc-nolong,abbrstyle.short-sc-nolong-desc,abbrstyle.nolong-short-sc,abbrstyle.short-sc-footnote,abbrstyle.short-sc-postfootnote,abbrstyle.long-noshort-sc,abbrstyle.long-noshort-sc-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstabbrvscfont,
+  name={\csfmt{gls\-first\-abbrv\-sc\-font}},
+  user1={\margm{text}},
+  description={used with \qt{sc} abbreviation styles to format the
+   short form on \idx{firstuse}. This defaults to \cs{glsabbrvscfont}},
+  topics={abbrstyle.long-short-sc,abbrstyle.long-short-sc-desc,abbrstyle.short-sc-long,abbrstyle.short-sc-long-desc,abbrstyle.short-sc-nolong,abbrstyle.short-sc-nolong-desc,abbrstyle.nolong-short-sc,abbrstyle.short-sc-footnote,abbrstyle.short-sc-postfootnote,abbrstyle.long-noshort-sc,abbrstyle.long-noshort-sc-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.long-short-sc-desc,
+  name={\abbrstylefmt{long\dhyphen short\dhyphen sc\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-short-sc} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sc-long,
+  name={\abbrstylefmt{short\dhyphen sc\dhyphen long}},
+  description={this abbreviation style is like \abbrstyle{short-long}
+  but the short form is displayed in small-caps (so it needs to be
+  in \idx{lowercase})},
+  category={abbreviationstyle},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sc-long-desc,
+  name={\abbrstylefmt{short\dhyphen sc\dhyphen long\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-sc-long} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sc-nolong,
+  name={\abbrstylefmt{short\dhyphen sc\dhyphen nolong}},
+  description={this abbreviation style is like \abbrstyle{short-nolong}
+  but the short form is displayed in small-caps (so it needs to be
+  in \idx{lowercase}). This style sets the \catattr{regular}
+  attribute to \optfmt{true} for the entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sc,
+  name={\abbrstylefmt{short\dhyphen sc}},
+  description={an alias for \abbrstyle{short-sc-nolong}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sc-nolong-desc,
+  name={\abbrstylefmt{short\dhyphen sc\dhyphen nolong\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-sc-nolong} style but the \field{description}
+   field must be provided in the entry definition. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sc-desc,
+  name={\abbrstylefmt{short\dhyphen sc\dhyphen desc}},
+  description={an alias for \abbrstyle{short-sc-nolong-desc}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.nolong-short-sc,
+  name={\abbrstylefmt{nolong\dhyphen short\dhyphen sc}},
+  description={this abbreviation style is like \abbrstyle{nolong-short}
+  but the short form is displayed in small-caps (so it needs to be
+  in \idx{lowercase}). This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.21+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-noshort-sc,
+  name={\abbrstylefmt{long\dhyphen noshort\dhyphen sc}},
+  description={this abbreviation style is like \abbrstyle{long-noshort}
+  but the short form is displayed in small-caps (so it needs to be
+  in \idx{lowercase}). This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-noshort-sc-desc,
+  name={\abbrstylefmt{long\dhyphen noshort\dhyphen sc\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-noshort-sc} style but the \field{description}
+   field must be provided in the entry definition. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sc-footnote,
+  name={\abbrstylefmt{short\dhyphen sc\dhyphen footnote}},
+  description={this abbreviation style is like \abbrstyle{short-footnote}
+  but the short form is displayed in small-caps (so it needs to be
+  in \idx{lowercase})},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sc-postfootnote,
+  name={\abbrstylefmt{short\dhyphen sc\dhyphen postfootnote}},
+  description={this abbreviation style is like \abbrstyle{short-postfootnote}
+  but the short form is displayed in small-caps (so it needs to be
+  in \idx{lowercase})},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-short-sm,
+  name={\abbrstylefmt{long\dhyphen short\dhyphen sm}},
+  description={this abbreviation style is like \abbrstyle{long-short}
+  but the short form is displayed using a smaller font. The
+  \sty{relsize} package is required with this style},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsabbrvsmfont,
+  name={\csfmt{gls\-abbrv\-sm\-font}},
+  user1={\margm{text}},
+  description={used with \qt{sm} abbreviation styles to format the
+short form using \ics{textsmaller}},
+  topics={abbrstyle.long-short-sm,abbrstyle.long-short-sm-desc,abbrstyle.short-sm-long,abbrstyle.short-sm-long-desc,abbrstyle.short-sm-nolong,abbrstyle.short-sm-nolong-desc,abbrstyle.nolong-short-sm,abbrstyle.short-sm-footnote,abbrstyle.short-sm-postfootnote,abbrstyle.long-noshort-sm,abbrstyle.long-noshort-sm-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstabbrvsmfont,
+  name={\csfmt{gls\-first\-abbrv\-sm\-font}},
+  user1={\margm{text}},
+  description={used with \qt{sm} abbreviation styles to format the
+   short form on \idx{firstuse}. This defaults to \cs{glsabbrvsmfont}},
+  topics={abbrstyle.long-short-sm,abbrstyle.long-short-sm-desc,abbrstyle.short-sm-long,abbrstyle.short-sm-long-desc,abbrstyle.short-sm-nolong,abbrstyle.short-sm-nolong-desc,abbrstyle.nolong-short-sm,abbrstyle.short-sm-footnote,abbrstyle.short-sm-postfootnote,abbrstyle.long-noshort-sm,abbrstyle.long-noshort-sm-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtrsmsuffix,
+  name={\csfmt{gls\-xtr\-sm\-suffix}},
+  user1={},
+  description={the suffix used to construct the plural for
+   the short form of abbreviations with the \qt{sm} styles. This
+   defaults to \cs{glsxtrabbrvpluralsuffix}},
+  topics={abbrstyle.long-short-sm,abbrstyle.long-short-sm-desc,abbrstyle.short-sm-long,abbrstyle.short-sm-long-desc,abbrstyle.short-sm-nolong,abbrstyle.short-sm-nolong-desc,abbrstyle.nolong-short-sm,abbrstyle.short-sm-footnote,abbrstyle.short-sm-postfootnote,abbrstyle.long-noshort-sm,abbrstyle.long-noshort-sm-desc},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.long-short-sm-desc,
+  name={\abbrstylefmt{long\dhyphen short\dhyphen sm\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-short-sm} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sm-long,
+  name={\abbrstylefmt{short\dhyphen sm\dhyphen long}},
+  description={this abbreviation style is like \abbrstyle{short-long}
+  but the short form is displayed using a smaller font},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sm-long-desc,
+  name={\abbrstylefmt{short\dhyphen sm\dhyphen long\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-short-sm} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sm-nolong,
+  name={\abbrstylefmt{short\dhyphen sm\dhyphen nolong}},
+  description={this abbreviation style is like \abbrstyle{short-nolong}
+  but the short form is displayed using a smaller font. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sm,
+  name={\abbrstylefmt{short\dhyphen sm}},
+  description={an alias for \abbrstyle{short-sm-nolong}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sm-nolong-desc,
+  name={\abbrstylefmt{short\dhyphen sm\dhyphen nolong\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-sm-nolong} style but the \field{description}
+   field must be provided in the entry definition. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sm-desc,
+  name={\abbrstylefmt{short\dhyphen sm\dhyphen desc}},
+  description={an alias for \abbrstyle{short-sm-nolong-desc}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.nolong-short-sm,
+  name={\abbrstylefmt{nolong\dhyphen short\dhyphen sm}},
+  description={this abbreviation style is like \abbrstyle{nolong-short}
+  but the short form is displayed using a smaller font. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.21+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-noshort-sm,
+  name={\abbrstylefmt{long\dhyphen noshort\dhyphen sm}},
+  description={this abbreviation style is like \abbrstyle{long-noshort}
+  but the short form is displayed using a smaller font. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-noshort-sm-desc,
+  name={\abbrstylefmt{long\dhyphen noshort\dhyphen sm\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-noshort-sm} style but the \field{description}
+   field must be provided in the entry definition. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sm-footnote,
+  name={\abbrstylefmt{short\dhyphen sm\dhyphen footnote}},
+  description={this abbreviation style is like \abbrstyle{short-footnote}
+  but the short form is displayed in a smaller font},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-sm-postfootnote,
+  name={\abbrstylefmt{short\dhyphen sm\dhyphen postfootnote}},
+  description={this abbreviation style is like \abbrstyle{short-postfootnote}
+  but the short form is displayed in a smaller font},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-short-em,
+  name={\abbrstylefmt{long\dhyphen short\dhyphen em}},
+  description={this abbreviation style is like \abbrstyle{long-short}
+  but the short form is displayed using an emphasized font},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsabbrvemfont,
+  name={\csfmt{gls\-abbrv\-em\-font}},
+  user1={\margm{text}},
+  description={used with \qt{em} abbreviation styles to format the
+short form using \ics{emph}},
+  topics={abbrstyle.long-em-short-em,abbrstyle.long-short-em,abbrstyle.long-short-em-desc,abbrstyle.short-em-long,abbrstyle.short-em-long-desc,abbrstyle.short-em-nolong,abbrstyle.short-em-nolong-desc,abbrstyle.nolong-short-em,abbrstyle.short-em-footnote,abbrstyle.short-em-postfootnote,abbrstyle.long-em-noshort-em,abbrstyle.long-em-noshort-em-desc,abbrstyle.long-em-noshort-em-desc-noreg,abbrstyle.long-em-noshort-em-noreg,abbrstyle.long-em-short-em-desc,abbrstyle.long-noshort-em,abbrstyle.long-noshort-em-desc},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstabbrvemfont,
+  name={\csfmt{gls\-first\-abbrv\-em\-font}},
+  user1={\margm{text}},
+  description={used with \qt{em} abbreviation styles to format the
+   short form on \idx{firstuse}. This defaults to \cs{glsabbrvemfont}},
+  topics={abbrstyle.long-em-short-em,abbrstyle.long-short-em,abbrstyle.long-short-em-desc,abbrstyle.short-em-long,abbrstyle.short-em-long-desc,abbrstyle.short-em-nolong,abbrstyle.short-em-nolong-desc,abbrstyle.nolong-short-em,abbrstyle.short-em-footnote,abbrstyle.short-em-postfootnote,abbrstyle.long-em-short-em-desc,abbrstyle.long-em-noshort-em,abbrstyle.long-em-noshort-em-desc,abbrstyle.long-em-noshort-em-desc-noreg,abbrstyle.long-em-noshort-em-noreg,abbrstyle.long-noshort-em,abbrstyle.long-noshort-em-desc},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtremsuffix,
+  name={\csfmt{gls\-xtr\-em\-suffix}},
+  description={the suffix used to construct the plural for
+   the short form of abbreviations with the \qt{em} styles. This
+   defaults to \cs{glsxtrabbrvpluralsuffix}},
+  topics={abbrstyle.long-em-short-em,abbrstyle.long-short-em,abbrstyle.long-short-em-desc,abbrstyle.short-em-long,abbrstyle.short-em-long-desc,abbrstyle.short-em-nolong,abbrstyle.short-em-nolong-desc,abbrstyle.nolong-short-em,abbrstyle.short-em-footnote,abbrstyle.short-em-postfootnote,abbrstyle.long-em-noshort-em,abbrstyle.long-em-noshort-em-desc,abbrstyle.long-em-noshort-em-desc-noreg,abbrstyle.long-em-noshort-em-noreg,abbrstyle.long-noshort-em,abbrstyle.long-noshort-em-desc},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at abbrvstylecommand{glslongemfont,
+  name={\csfmt{gls\-long\-em\-font}},
+  user1={\margm{text}},
+  description={used with \qt{long-em} abbreviation styles to format the
+long form using \ics{emph}},
+  topics={abbrstyle.long-em-short-em,abbrstyle.long-em-short-em-desc,abbrstyle.short-em-long-em,abbrstyle.short-em-long-em-desc,abbrstyle.long-em-noshort-em,abbrstyle.long-em-noshort-em-desc,abbrstyle.long-em-noshort-em-desc-noreg,abbrstyle.long-em-noshort-em-noreg},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstlongemfont,
+  name={\csfmt{gls\-first\-long\-em\-font}},
+  user1={\margm{text}},
+  description={used with \qt{long-em} abbreviation styles to format the
+   long form on \idx{firstuse}. This defaults to \cs{glslongemfont}},
+  topics={abbrstyle.long-em-short-em,abbrstyle.long-em-short-em-desc,abbrstyle.short-em-long-em,abbrstyle.short-em-long-em-desc,abbrstyle.long-em-noshort-em,abbrstyle.long-em-noshort-em-desc,abbrstyle.long-em-noshort-em-desc-noreg,abbrstyle.long-em-noshort-em-noreg},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.long-short-em-desc,
+  name={\abbrstylefmt{long\dhyphen short\dhyphen em\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-short-em} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-em-short-em,
+  name={\abbrstylefmt{long\dhyphen em\dhyphen short\dhyphen em}},
+  description={this abbreviation style is like \abbrstyle{long-short}
+  but the short and long forms are displayed using an emphasized font},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-em-short-em-desc,
+  name={\abbrstylefmt{long\dhyphen em\dhyphen short\dhyphen em\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-em-short-em} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-em-long,
+  name={\abbrstylefmt{short\dhyphen em\dhyphen long}},
+  description={this abbreviation style is like \abbrstyle{short-long}
+  but the short form is displayed using an emphasized font},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-em-long-desc,
+  name={\abbrstylefmt{short\dhyphen em\dhyphen long\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-em-long} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-em-long-em,
+  name={\abbrstylefmt{short\dhyphen em\dhyphen long\dhyphen em}},
+  description={this abbreviation style is like \abbrstyle{short-long}
+  but the short and long forms are displayed using an emphasized font},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-em-long-em-desc,
+  name={\abbrstylefmt{short\dhyphen em\dhyphen long\dhyphen em\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-em-long-em} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-em-nolong,
+  name={\abbrstylefmt{short\dhyphen em\dhyphen nolong}},
+  description={this abbreviation style is like \abbrstyle{short-nolong}
+  but the short form is displayed using an emphasized font. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-em,
+  name={\abbrstylefmt{short\dhyphen em}},
+  description={an alias for \abbrstyle{short-em-nolong}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-em-nolong-desc,
+  name={\abbrstylefmt{short\dhyphen em\dhyphen nolong\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-em-nolong} style but the \field{description}
+   field must be provided in the entry definition. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-em-desc,
+  name={\abbrstylefmt{short\dhyphen em\dhyphen desc}},
+  description={an alias for \abbrstyle{short-em-nolong-desc}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra}},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.nolong-short-em,
+  name={\abbrstylefmt{nolong\dhyphen short\dhyphen em}},
+  description={this abbreviation style is like \abbrstyle{nolong-short}
+  but the short form is displayed using an emphasized font. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.21+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-noshort-em,
+  name={\abbrstylefmt{long\dhyphen noshort\dhyphen em}},
+  description={this abbreviation style is like \abbrstyle{long-noshort}
+  but the short form is displayed using an emphasized font. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-em-noshort-em,
+  name={\abbrstylefmt{long\dhyphen em\dhyphen noshort\dhyphen em}},
+  description={this abbreviation style is like \abbrstyle{long-noshort}
+  but the long and short forms are displayed using an emphasized font.
+  This style sets the \catattr{regular} attribute to \optfmt{true} for the 
+  entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-em-noshort-em-noreg,
+  name={\abbrstylefmt{long\dhyphen em\dhyphen noshort\dhyphen em\dhyphen noreg}},
+  description={this abbreviation style is like \abbrstyle{long-noshort-noreg}
+  but the long and short forms are displayed using an emphasized font},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-noshort-em-desc,
+  name={\abbrstylefmt{long\dhyphen noshort\dhyphen em\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-noshort-em} style but the \field{description}
+   field must be provided in the entry definition. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-em-noshort-em-desc,
+  name={\abbrstylefmt{long\dhyphen em\dhyphen noshort\dhyphen em\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-em-noshort-em} style but the \field{description}
+   field must be provided in the entry definition. This style 
+   sets the \catattr{regular} attribute to \optfmt{true} for the 
+   entry's category},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-em-noshort-em-desc-noreg,
+  name={\abbrstylefmt{long\dhyphen em\dhyphen noshort\dhyphen em\dhyphen desc\dhyphen noreg}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-em-noshort-em-noreg} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-em-footnote,
+  name={\abbrstylefmt{short\dhyphen em\dhyphen footnote}},
+  description={this abbreviation style is like \abbrstyle{short-footnote}
+  but the short form is displayed in an emphasized font},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-em-postfootnote,
+  name={\abbrstylefmt{short\dhyphen em\dhyphen postfootnote}},
+  description={this abbreviation style is like \abbrstyle{short-postfootnote}
+  but the short form is displayed in an emphasized font},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-short-user,
+  name={\abbrstylefmt{long\dhyphen short\dhyphen user}},
+  description={this abbreviation style is like \abbrstyle{long-short}
+  but the parenthetical material is governed by \cs{glsxtruserparen}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtruserfield,
+  name={\csfmt{gls\-xtr\-user\-field}},
+  description={used by the parenthetical abbreviation styles, this
+   expands to the internal label of the field used to store the additional parenthetical
+   material. The default value is \field{useri}},
+  topics={abbrstyle.long-short-user,abbrstyle.short-long-user,abbrstyle.long-postshort-user,abbrstyle.long-postshort-user-desc,abbrstyle.short-postlong-user-desc,abbrstyle.long-short-user-desc,abbrstyle.short-long-user-desc},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtruserparen,
+  name={\csfmt{gls\-xtr\-user\-paren}},
+  user1={\margm{text}\margm{label}},
+  description={used by the \qt{user} abbreviation styles
+   to format the parenthetical material where \meta{text}
+   is the default parenthetical text and \meta{label}
+   is the entry's label. This checks the field given
+   by \cs{glsxtruserfield} and, if set, the \meta{text} is
+   followed by a comma and the user value},
+  topics={abbrstyle.long-short-user,abbrstyle.short-long-user,abbrstyle.long-postshort-user,abbrstyle.long-postshort-user-desc,abbrstyle.short-postlong-user-desc,abbrstyle.long-short-user-desc,abbrstyle.short-long-user-desc},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsabbrvuserfont,
+  name={\csfmt{gls\-abbrv\-user\-font}},
+  user1={\margm{text}},
+  description={used with \qt{user} abbreviation styles to
+   format the short form. The default definition just uses \cs{glsabbrvdefaultfont}},
+  topics={abbrstyle.long-short-user,abbrstyle.short-long-user,abbrstyle.long-postshort-user,abbrstyle.long-postshort-user-desc,abbrstyle.short-postlong-user-desc,abbrstyle.long-short-user-desc,abbrstyle.short-long-user-desc},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstabbrvuserfont,
+  name={\csfmt{gls\-first\-abbrv\-user\-font}},
+  user1={\margm{text}},
+  description={used with \qt{user} abbreviation styles to
+   format the short form on \idx{firstuse}. The default definition just uses
+\cs{glsabbrvuserfont}},
+  topics={abbrstyle.long-short-user,abbrstyle.short-long-user,abbrstyle.long-postshort-user,abbrstyle.long-postshort-user-desc,abbrstyle.short-postlong-user-desc,abbrstyle.long-short-user-desc,abbrstyle.short-long-user-desc},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at abbrvstylecommand{glslonguserfont,
+  name={\csfmt{gls\-long\-user\-font}},
+  user1={\margm{text}},
+  description={used with \qt{user} abbreviation styles to
+   format the long form. The default definition just uses \cs{glslongdefaultfont}},
+  topics={abbrstyle.long-short-user,abbrstyle.short-long-user,abbrstyle.long-postshort-user,abbrstyle.long-postshort-user-desc,abbrstyle.short-postlong-user-desc,abbrstyle.long-short-user-desc,abbrstyle.short-long-user-desc},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstlonguserfont,
+  name={\csfmt{gls\-first\-long\-user\-font}},
+  user1={\margm{text}},
+  description={used with \qt{user} abbreviation styles to
+   format the long form on first use. The default definition just uses
+\cs{glslonguserfont}},
+  topics={abbrstyle.long-short-user,abbrstyle.short-long-user,abbrstyle.long-postshort-user,abbrstyle.long-postshort-user-desc,abbrstyle.short-postlong-user-desc,abbrstyle.long-short-user-desc,abbrstyle.short-long-user-desc},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtrusersuffix,
+  name={\csfmt{gls\-xtr\-user\-suffix}},
+  description={the suffix used to construct the plural for
+   the short form of abbreviations with the \qt{user} styles.
+   The default definition just uses \cs{glsxtrabbrvpluralsuffix}},
+  topics={abbrstyle.long-short-user,abbrstyle.short-long-user,abbrstyle.long-postshort-user,abbrstyle.long-postshort-user-desc,abbrstyle.short-postlong-user-desc,abbrstyle.long-short-user-desc,abbrstyle.short-long-user-desc},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsuserdescription,
+  name={\csfmt{gls\-user\-description}},
+  user1={\margm{description}\margm{label}},
+  description={used with \qt{user} abbreviation styles to
+   encapsulate the description. Just does
+  \code{\cs{glslonguserfont}\margm{description}} by default},
+  topics={abbrstyle.long-short-user,abbrstyle.short-long-user,abbrstyle.long-postshort-user,abbrstyle.long-postshort-user-desc,abbrstyle.short-postlong-user-desc,abbrstyle.long-short-user-desc,abbrstyle.short-long-user-desc},
+  note={\styfmt{glossaries-extra} v1.30+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.long-postshort-user,
+  name={\abbrstylefmt{long\dhyphen postshort\dhyphen user}},
+  description={this abbreviation style is like \abbrstyle{long-short-user}
+  but the parenthetical material is moved to the \idx{postlinkhook}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.12+},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtrlongshortuserdescname,
+  name={\csfmt{gls\-xtr\-long\-short\-user\-desc\-name}},
+  description={hook for the \abbrstyle{long-short-user-desc} abbreviation
+  styles that expands to the value that the \field{name} field is
+  assigned to when the abbreviation is defined with
+  \cs{newabbreviation} (defaults to the long form followed by the
+  parenthetical material)},
+  topics={abbrstyle.long-postshort-user-desc,abbrstyle.long-short-user-desc},
+  note={\styfmt{glossaries-extra} v1.25+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.long-postshort-user-desc,
+  name={\abbrstylefmt{long\dhyphen postshort\dhyphen user\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-postshort-user} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.12+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-postlong-user,
+  name={\abbrstylefmt{short\dhyphen postlong\dhyphen user}},
+  description={this abbreviation style is like \abbrstyle{short-long-user}
+  but the parenthetical material is moved to the \idx{postlinkhook}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.12+},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtrshortlonguserdescname,
+  name={\csfmt{gls\-xtr\-short\-long\-user\-desc\-name}},
+  description={hook for the \abbrstyle{short-long-user-desc} abbreviation
+  styles that expands to the value that the \field{name} field is
+  assigned to when the abbreviation is defined with
+  \cs{newabbreviation} (defaults to the short form followed by the
+  parenthetical material)},
+  topics={abbrstyle.short-postlong-user-desc,abbrstyle.short-long-user-desc},
+  note={\styfmt{glossaries-extra} v1.25+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.short-postlong-user-desc,
+  name={\abbrstylefmt{short\dhyphen postlong\dhyphen user\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-postlong-user} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.12+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-short-user-desc,
+  name={\abbrstylefmt{long\dhyphen short\dhyphen user\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-short-user} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-long-user,
+  name={\abbrstylefmt{short\dhyphen long\dhyphen user}},
+  description={this abbreviation style is like \abbrstyle{short-long}
+  but the parenthetical material is governed by \cs{glsxtruserparen}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-long-user-desc,
+  name={\abbrstylefmt{short\dhyphen long\dhyphen user\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-long-user} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.04+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-hyphen-short-hyphen,
+  name={\abbrstylefmt{long\dhyphen hyphen\dhyphen short\dhyphen
+hyphen}},
+  description={this abbreviation style is like \abbrstyle{long-short}
+  but is designed to work with the \catattr{markwords} attribute. If
+  the attribute is set, the style will check if the inserted
+  material (provided by the final optional argument of commands like
+  \cs{gls}) starts with a hyphen. If it does, the insert is added to
+  the parenthetical material},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtrifhyphenstart,
+  name={\csfmt{gls\-xtr\-if\-hyphen\-start}},
+  user1={\margm{text}\margm{true}\margm{false}},
+  description={used by the \qt{hyphen} abbreviation styles, this
+   checks if \meta{text} starts with a hyphen},
+  topics={abbrstyle.long-hyphen-short-hyphen,abbrstyle.long-hyphen-short-hyphen-desc,abbrstyle.long-hyphen-noshort-desc-noreg,abbrstyle.long-hyphen-noshort-noreg,abbrstyle.long-hyphen-postshort-hyphen,abbrstyle.long-hyphen-postshort-hyphen-desc,abbrstyle.short-hyphen-long-hyphen,abbrstyle.short-hyphen-long-hyphen-desc,abbrstyle.short-hyphen-postlong-hyphen,abbrstyle.short-hyphen-postlong-hyphen-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtrlonghyphenshort,
+  name={\csfmt{gls\-xtr\-long\-hyphen\-short}},
+  user1={\margm{label}\margm{long}\margm{short}\margm{insert}},
+  description={used by the \qt{long\dhyphen hyphen\dhyphen
+  short\dhyphen hyphen} abbreviation styles to format the full form},
+  topics={abbrstyle.long-hyphen-short-hyphen,abbrstyle.long-hyphen-short-hyphen-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsabbrvhyphenfont,
+  name={\csfmt{gls\-abbrv\-hyphen\-font}},
+  user1={\margm{text}},
+  description={used by the \qt{hyphen} abbreviation styles to format
+   the short form},
+  topics={abbrstyle.long-hyphen-short-hyphen,abbrstyle.long-hyphen-short-hyphen-desc,abbrstyle.long-hyphen-postshort-hyphen,abbrstyle.long-hyphen-postshort-hyphen-desc,abbrstyle.short-hyphen-long-hyphen,abbrstyle.short-hyphen-long-hyphen-desc,abbrstyle.short-hyphen-postlong-hyphen,abbrstyle.short-hyphen-postlong-hyphen-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstabbrvhyphenfont,
+  name={\csfmt{gls\-first\-abbrv\-hyphen\-font}},
+  user1={\margm{text}},
+  description={used by the \qt{hyphen} abbreviation styles to format
+   the short form on \idx{firstuse}},
+  topics={abbrstyle.long-hyphen-short-hyphen,abbrstyle.long-hyphen-postshort-hyphen,abbrstyle.long-hyphen-postshort-hyphen-desc,abbrstyle.long-hyphen-short-hyphen-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glslonghyphenfont,
+  name={\csfmt{gls\-long\-hyphen\-font}},
+  user1={\margm{text}},
+  description={used by the \qt{hyphen} abbreviation styles to format
+   the long form},
+  topics={abbrstyle.long-hyphen-short-hyphen,abbrstyle.long-hyphen-noshort-desc-noreg,abbrstyle.long-hyphen-noshort-noreg,abbrstyle.long-hyphen-postshort-hyphen,abbrstyle.long-hyphen-postshort-hyphen-desc,abbrstyle.long-hyphen-short-hyphen-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstlonghyphenfont,
+  name={\csfmt{gls\-first\-long\-hyphen\-font}},
+  user1={\margm{text}},
+  description={used by the \qt{hyphen} abbreviation styles to format
+   the long form on \idx{firstuse}},
+  topics={abbrstyle.long-hyphen-short-hyphen,abbrstyle.long-hyphen-noshort-desc-noreg,abbrstyle.long-hyphen-noshort-noreg,abbrstyle.long-hyphen-postshort-hyphen,abbrstyle.long-hyphen-postshort-hyphen-desc,abbrstyle.long-hyphen-short-hyphen-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtrhyphensuffix,
+  name={\csfmt{gls\-xtr\-hyphen\-suffix}},
+  description={the suffix used to construct the plural for
+   the short form of abbreviations with the \qt{hyphen} styles},
+  topics={abbrstyle.long-hyphen-short-hyphen,abbrstyle.long-hyphen-postshort-hyphen,abbrstyle.long-hyphen-postshort-hyphen-desc,abbrstyle.long-hyphen-short-hyphen-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.long-hyphen-short-hyphen-desc,
+  name={\abbrstylefmt{long\dhyphen hyphen\dhyphen short\dhyphen
+hyphen\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-hyphen-short-hyphen} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtrlonghyphennoshort,
+  name={\csfmt{gls\-xtr\-long\-hyphen\-noshort}},
+  user1={\margm{label}\margm{long}\margm{insert}},
+  description={used by the \qt{long-hyphen-noshort} styles
+  to format the \idx{firstuse} form. This checks if the inserted
+  material starts with a hyphen and makes the appropriate
+  modifications},
+  topics={abbrstyle.long-hyphen-noshort-desc-noreg,abbrstyle.long-hyphen-noshort-noreg},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.long-hyphen-noshort-desc-noreg,
+  name={\abbrstylefmt{long\dhyphen hyphen\dhyphen noshort\dhyphen desc\dhyphen noreg}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-hyphen-noshort-noreg} style but the \field{description}
+   field must be provided in the entry definition. This
+  style won't work with the \catattr{regular} attribute set, as the
+  regular form isn't flexible enough},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-hyphen-noshort-noreg,
+  name={\abbrstylefmt{long\dhyphen hyphen\dhyphen noshort\dhyphen noreg}},
+  description={this abbreviation style is like \abbrstyle{long-noshort}
+  but is designed to work with the \catattr{markwords} attribute and 
+  the \catattr{regular} attribute isn't set to \optfmt{true}. This
+  style won't work with the \catattr{regular} attribute set, as the
+  regular form isn't flexible enough},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-hyphen-postshort-hyphen,
+  name={\abbrstylefmt{long\dhyphen hyphen\dhyphen postshort\dhyphen hyphen}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-hyphen-short-hyphen} style but the insert and
+   parenthetical material are moved into the \idx{postlinkhook}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtrlonghyphen,
+  name={\csfmt{gls\-xtr\-long\-hyphen}},
+  user1={\margm{long}\margm{label}\margm{insert}},
+  description={used by the \abbrstyle{long-hyphen-postshort-hyphen} abbreviation 
+  to format the long form and check if the \meta{insert} starts with
+  a hyphen},
+  topics={abbrstyle.long-hyphen-postshort-hyphen},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtrposthyphenshort,
+  name={\csfmt{gls\-xtr\-post\-hyphen\-short}},
+  user1={\margm{label}\margm{insert}},
+  description={used by the \abbrstyle{long-hyphen-postshort-hyphen}
+  style in the \idx{postlinkhook}},
+  topics={abbrstyle.long-hyphen-postshort-hyphen},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtrposthyphensubsequent,
+  name={\csfmt{gls\-xtr\-post\-hyphen\-sub\-sequent}},
+  user1={\margm{label}\margm{insert}},
+  description={used by the \abbrstyle{long-hyphen-postshort-hyphen} abbreviation 
+  in the \idx{postlinkhook} for subsequent use},
+  topics={abbrstyle.long-hyphen-postshort-hyphen},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.long-hyphen-postshort-hyphen-desc,
+  name={\abbrstylefmt{long\dhyphen hyphen\dhyphen postshort\dhyphen
+hyphen\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-hyphen-postshort-hyphen} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-hyphen-long-hyphen,
+  name={\abbrstylefmt{short\dhyphen hyphen\dhyphen long\dhyphen hyphen}},
+  description={this abbreviation style is like \abbrstyle{short-long}
+  but is designed to work with the \catattr{markwords} attribute. If
+  the attribute is set, the style will check if the inserted
+  material (provided by the final optional argument of commands like
+  \cs{gls}) starts with a hyphen. If it does, the insert is added to
+  the parenthetical material},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtrshorthyphenlong,
+  name={\csfmt{gls\-xtr\-short\-hyphen\-long}},
+  user1={\margm{label}\margm{short}\margm{long}\margm{insert}},
+  description={used by the \abbrstyle{short-hyphen-long-hyphen} style
+  to format the full form},
+  topics={abbrstyle.short-hyphen-long-hyphen,abbrstyle.short-hyphen-long-hyphen-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.short-hyphen-long-hyphen-desc,
+  name={\abbrstylefmt{short\dhyphen hyphen\dhyphen long\dhyphen
+hyphen\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-hyphen-long-hyphen} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.short-hyphen-postlong-hyphen,
+  name={\abbrstylefmt{short\dhyphen hyphen\dhyphen postlong\dhyphen hyphen}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-hyphen-long-hyphen} style but the insert and
+   parenthetical material are moved into the \idx{postlinkhook}},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsxtrshorthyphen,
+  name={\csfmt{gls\-xtr\-short\-hyphen}},
+  user1={\margm{short}\margm{label}\margm{insert}},
+  description={used by the \qt{postlong-hyphen} styles
+  to format the short form and check if \meta{insert} starts with a hyphen},
+  topics={abbrstyle.short-hyphen-postlong-hyphen},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtrposthyphenlong,
+  name={\csfmt{gls\-xtr\-post\-hyphen\-long}},
+  user1={\margm{label}\margm{insert}},
+  description={used by the \qt{postlong-hyphen}
+  styles in the \idx{postlinkhook}},
+  topics={abbrstyle.short-hyphen-postlong-hyphen},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.short-hyphen-postlong-hyphen-desc,
+  name={\abbrstylefmt{short\dhyphen hyphen\dhyphen postlong\dhyphen
+hyphen\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{short-hyphen-postlong-hyphen} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbreviationstyle{abbrstyle.long-only-short-only,
+  name={\abbrstylefmt{long\dhyphen only\dhyphen short\dhyphen only}},
+  description={this abbreviation style only displays the long form
+  on \idx{firstuse} and only the short form on subsequent use. The
+  inline full form shows the long form followed by the short form in
+  parentheses},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at abbrvstylecommand{glsabbrvonlyfont,
+  name={\csfmt{gls\-abbrv\-only\-font}},
+  user1={\margm{text}},
+  description={used with \qt{only} abbreviation styles to format the
+short form. The default definition just uses \cs{glsabbrvdefaultfont}},
+  topics={abbrstyle.long-only-short-only,abbrstyle.long-only-short-only-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstabbrvonlyfont,
+  name={\csfmt{gls\-first\-abbrv\-only\-font}},
+  user1={\margm{text}},
+  description={used with \qt{only} abbreviation styles to format the
+short form on \idx{firstuse}. The default definition just uses
+\cs{glsabbrvonlyfont}},
+  topics={abbrstyle.long-only-short-only,abbrstyle.long-only-short-only-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glslongonlyfont,
+  name={\csfmt{gls\-long\-only\-font}},
+  user1={\margm{text}},
+  description={used with \qt{only} abbreviation styles to format the
+long form. The default definition just uses \cs{glslongdefaultfont}},
+  topics={abbrstyle.long-only-short-only,abbrstyle.long-only-short-only-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsfirstlongonlyfont,
+  name={\csfmt{gls\-first\-long\-only\-font}},
+  user1={\margm{text}},
+  description={used with \qt{only} abbreviation styles to format the
+long form on \idx{firstuse}. The default definition just uses
+\cs{glslongonlyfont}},
+  topics={abbrstyle.long-only-short-only,abbrstyle.long-only-short-only-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtronlysuffix,
+  name={\csfmt{gls\-xtr\-only\-suffix}},
+  description={the suffix used to construct the plural for
+   the short form of abbreviations with the \qt{only} styles.
+   The default definition just uses \cs{glsxtrabbrvpluralsuffix}},
+  topics={abbrstyle.long-only-short-only},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtronlyname,
+  name={\csfmt{gls\-xtr\-only\-name}},
+  description={hook for the \abbrstyle{long-only-short-only} style
+  that expands to the value that the \field{name} field is assigned
+  to when the abbreviation is defined with \cs{newabbreviation} 
+  (defaults to the short form)},
+  topics={abbrstyle.long-only-short-only},
+  note={\styfmt{glossaries-extra} v1.25+},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtronlydescname,
+  name={\csfmt{gls\-xtr\-only\-desc\-name}},
+  description={hook for the \abbrstyle{long-only-short-only-desc} style
+  that expands to the value that the \field{name} field is assigned
+  to when the abbreviation is defined with \cs{newabbreviation} 
+  (defaults to the long form)},
+  topics={abbrstyle.long-only-short-only-desc},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at abbreviationstyle{abbrstyle.long-only-short-only-desc,
+  name={\abbrstylefmt{long\dhyphen only\dhyphen short\dhyphen only\dhyphen desc}},
+  description={this abbreviation style is like the
+   \abbrstyle{long-only-short-only} style but the \field{description}
+   field must be provided in the entry definition},
+  category={abbreviationstyle},
+  note={\styfmt{glossaries-extra} v1.17+},
+  parent={abbreviationstyles}
+}
+
+ at topic{glossarystyle,
+  name={glossary styles},
+  text={glossary style},
+  description={glossary styles are set using \ics{setglossarystyle} 
+  or with the \styopt{style} package option or the
+  \printglossopt{style} option in \cs{printunsrtglossary}. 
+  There are a number of styles provided in the supplementary packages. See the
+\href{https://www.dickimaw-books.com/gallery/glossaries-styles/}{\styfmt{glossaries}
+  gallery of predefined styles}~\cite{glossarystylesgallery} for
+  samples of each style}
+}
+
+ at glossarystyle{glostyle.inline,
+  name={\glostylefmt{inline}},
+  description={this style is designed for inline glossaries. The
+  \field{symbol}, \idx{locationlist} and child \field{name} are omitted 
+  by default, but associated style commands may be redefined to
+  change this},
+  category={glossarystyle},
+  note={\styfmt{glossary-inline} v3.03+},
+  parent={glossarystyle}
+}
+
+ at glostylecommand{glsinlinedopostchild,
+  name={\csfmt{gls\-in\-line\-do\-post\-child}},
+  description={group headings aren't supported by default, but if
+  they are required, this command should be added to start of the definition
+  of \cs{glsgroupheading} in case a heading follows a child entry},
+  category={command},
+  note={\styfmt{glossary-inline} v3.03+},
+  topics={glostyle.inline}
+}
+
+ at glostylecommand{glsinlineseparator,
+  name={\csfmt{gls\-in\-line\-separator}},
+  description={separator between entries},
+  category={command},
+  note={\styfmt{glossary-inline} v3.03+},
+  topics={glostyle.inline}
+}
+
+ at glostylecommand{glsinlinesubseparator,
+  name={\csfmt{gls\-in\-line\-sub\-separator}},
+  description={separator between sub-entries},
+  category={command},
+  note={\styfmt{glossary-inline} v3.03+},
+  topics={glostyle.inline}
+}
+
+ at glostylecommand{glsinlineparentchildseparator,
+  name={\csfmt{gls\-in\-line\-parent\-child\-separator}},
+  description={separator between parent and child entries},
+  category={command},
+  note={\styfmt{glossary-inline} v3.03+},
+  topics={glostyle.inline}
+}
+
+ at glostylecommand{glsinlinepostchild,
+  name={\csfmt{gls\-in\-line\-post\-child}},
+  description={hook between child and next entry},
+  category={command},
+  note={\styfmt{glossary-inline} v3.03+},
+  topics={glostyle.inline}
+}
+
+ at glostylecommand{glspostinline,
+  name={\csfmt{gls\-post-in\-line}},
+  description={glossary terminator},
+  category={command},
+  note={\styfmt{glossary-inline} v3.03+},
+  topics={glostyle.inline}
+}
+
+ at glostylecommand{glsinlinenameformat,
+  name={\csfmt{gls\-in\-line\-name\-format}},
+  user1={\margm{label}\margm{name}},
+  description={format's the entry's name including target, if
+  supported},
+  category={command},
+  note={\styfmt{glossary-inline} v3.03+},
+  topics={glostyle.inline}
+}
+
+ at glostylecommand{glsinlinedescformat,
+  name={\csfmt{gls\-in\-line\-desc\-format}},
+  user1={\margm{description}\margm{symbol}\margm{location list}},
+  description={format's the entry's description, symbol and location
+  list. This ignores the symbol and location by default},
+  category={command},
+  note={\styfmt{glossary-inline} v3.03+},
+  topics={glostyle.inline}
+}
+
+ at glossarystyle{glostyle.indexgroup,
+  name={\glostylefmt{indexgroup}},
+  description={},
+  category={glossarystyle},
+  note={\styfmt{glossary-tree}},
+  parent={glossarystyle}
+}
+
+ at glossarystyle{glostyle.mcolindexgroup,
+  name={\glostylefmt{mcolindexgroup}},
+  category={glossarystyle},
+  note={\styfmt{glossary-mcols}},
+  parent={glossarystyle}
+}
+
+ at glossarystyle{glostyle.indexhypergroup,
+  name={\glostylefmt{indexhypergroup}},
+  category={glossarystyle},
+  note={\styfmt{glossary-tree}},
+  parent={glossarystyle}
+}
+
+ at glossarystyle{glostyle.tree,
+  name={\glostylefmt{tree}},
+  category={glossarystyle},
+  note={\styfmt{glossary-tree}},
+  parent={glossarystyle}
+}
+
+ at glossarystyle{glostyle.treegroup,
+  name={\glostylefmt{treegroup}},
+  category={glossarystyle},
+  note={\styfmt{glossary-tree}},
+  parent={glossarystyle}
+}
+
+ at glossarystyle{glostyle.treenoname,
+  name={\glostylefmt{treenoname}},
+  category={glossarystyle},
+  note={\styfmt{glossary-tree}},
+  parent={glossarystyle}
+}
+
+ at glossarystyle{glostyle.treenonamegroup,
+  name={\glostylefmt{treenonamegroup}},
+  category={glossarystyle},
+  note={\styfmt{glossary-tree}},
+  parent={glossarystyle}
+}
+
+ at glossarystyle{glostyle.alttree,
+  name={\glostylefmt{alttree}},
+  category={glossarystyle},
+  note={\styfmt{glossary-tree}},
+  parent={glossarystyle}
+}
+
+ at glossarystyle{glostyle.alttreegroup,
+  name={\glostylefmt{alttreegroup}},
+  category={glossarystyle},
+  note={\styfmt{glossary-tree}},
+  parent={glossarystyle}
+}
+
+ at glossarystyle{glostyle.mcolalttree,
+  name={\glostylefmt{mcolalttree}},
+  category={glossarystyle},
+  note={\styfmt{glossary-mcols}},
+  parent={glossarystyle}
+}
+
+ at glossarystyle{glostyle.mcolalttreegroup,
+  name={\glostylefmt{mcolalttreegroup}},
+  category={glossarystyle},
+  note={\styfmt{glossary-mcols}},
+  parent={glossarystyle}
+}
+
+ at glossarystyle{glostyle.topic,
+  name={\glostylefmt{topic}},
+  category={glossarystyle},
+  note={\styfmt{glossary-topic} v1.40+},
+  parent={glossarystyle}
+}
+
+ at glossarystyle{glostyle.topicmcols,
+  name={\glostylefmt{topicmcols}},
+  category={glossarystyle},
+  note={\styfmt{glossary-topic} v1.40+},
+  parent={glossarystyle}
+}
+
+ at glossarystyle{glostyle.list,
+  name={\glostylefmt{list}},
+  category={glossarystyle},
+  note={\styfmt{glossary-list}},
+  parent={glossarystyle}
+}
+
+ at glossarystyle{glostyle.altlist,
+  name={\glostylefmt{altlist}},
+  category={glossarystyle},
+  note={\styfmt{glossary-list}},
+  parent={glossarystyle}
+}
+
+ at glossarystyle{glostyle.altlistgroup,
+  name={\glostylefmt{altlistgroup}},
+  category={glossarystyle},
+  note={\styfmt{glossary-list}},
+  parent={glossarystyle}
+}
+
+ at glossarystyle{glostyle.index,
+  name={\glostylefmt{index}},
+  category={glossarystyle},
+  note={\styfmt{glossary-tree}},
+  parent={glossarystyle}
+}
+
+ at glossarystyle{glostyle.bookindex,
+  name={\glostylefmt{bookindex}},
+  category={glossarystyle},
+  note={\styfmt{glossary-bookindex}},
+  parent={glossarystyle}
+}
+
+ at glossarystyle{glostyle.long,
+  name={\glostylefmt{long}},
+  category={glossarystyle},
+  note={\styfmt{glossary-long}},
+  parent={glossarystyle}
+}
+
+ at glossarystyle{glostyle.super,
+  name={\glostylefmt{super}},
+  category={glossarystyle},
+  note={\styfmt{glossary-long}},
+  parent={glossarystyle}
+}
+
+ at glossarystyle{glostyle.long3col,
+  name={\glostylefmt{long3col}},
+  category={glossarystyle},
+  note={\styfmt{glossary-long}},
+  parent={glossarystyle}
+}
+
+ at glossarystyle{glostyle.long3col-booktabs,
+  name={\glostylefmt{long3col\dhyphen booktabs}},
+  category={glossarystyle},
+  note={\styfmt{glossary-longbooktabs}},
+  parent={glossarystyle}
+}
+
+ at index{categoryattribute,
+  name={category attributes},
+  text={category attribute}
+}
+
+ at index{attribute,
+  name = {attributes},
+  text = {attribute},
+  alias = {categoryattribute}
+}
+
+ at categoryattribute{catattr.recordcount,
+  name={\catattrfmt{record\-count}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.glossname,
+  name={\catattrfmt{gloss\-name}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.glossnamefont,
+  name={\catattrfmt{gloss\-name\-font}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.glossdesc,
+  name={\catattrfmt{gloss\-desc}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.glossdescfont,
+  name={\catattrfmt{gloss\-desc\-font}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.glosssymbolfont,
+  name={\catattrfmt{gloss\-symbol\-font}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.textformat,
+  name={\catattrfmt{text\-format}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.headuc,
+  name={\catattrfmt{headuc}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.aposplural,
+  name={\catattrfmt{apos\-plural}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.accessaposplural,
+  name={\catattrfmt{access\-apos\-plural}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.noshortplural,
+  name={\catattrfmt{no\-short\-plural}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.accessnoshortplural,
+  name={\catattrfmt{access\-no\-short\-plural}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.nameshortaccess,
+  name={\catattrfmt{name\-short\-access}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.firstshortaccess,
+  name={\catattrfmt{first\-short\-access}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.textshortaccess,
+  name={\catattrfmt{text\-short\-access}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.markwords,
+  name={\catattrfmt{mark\-words}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.markshortwords,
+  name={\catattrfmt{mark\-short\-words}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.targeturl,
+  name={\catattrfmt{target\-url}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.targetname,
+  name={\catattrfmt{target\-name}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.externallocation,
+  name={\catattrfmt{external\-location}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.discardperiod,
+  name={\catattrfmt{discard\-period}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.pluraldiscardperiod,
+  name={\catattrfmt{plural\-discard\-period}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.retainfirstuseperiod,
+  name={\catattrfmt{retain\-first\-use\-period}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.insertdots,
+  name={\catattrfmt{insert\-dots}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.accessinsertdots,
+  name={\catattrfmt{access\-insert\-dots}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.tagging,
+  name={\catattrfmt{tagging}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.nohyperfirst,
+  name={\catattrfmt{no\-hyper\-first}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.nohyper,
+  name={\catattrfmt{no\-hyper}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.entrycount,
+  name={\catattrfmt{entry\-count}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.hyperoutside,
+  name={\catattrfmt{hyper\-outside}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.regular,
+  name={\catattrfmt{regular}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at categoryattribute{catattr.wrgloss,
+  name={\catattrfmt{wrgloss}},
+  category={categoryattribute},
+  parent={categoryattribute}
+}
+
+ at counter{ctr.equation,
+  name={\counterfmt{equation}},
+  category={counter}
+}
+
+ at counter{ctr.page,
+  name={\counterfmt{page}},
+  category={counter}
+}
+
+ at counter{ctr.section,
+  name={\counterfmt{section}},
+  category={counter}
+}
+
+ at counter{ctr.chapter,
+  name={\counterfmt{chapter}},
+  category={counter}
+}
+
+ at counter{ctr.wrglossary,
+  name={\counterfmt{wrglossary}},
+  category={counter}
+}
+
+ at counter{ctr.glossaryentry,
+  name={\counterfmt{glossaryentry}},
+  category={counter}
+}
+
+ at counter{ctr.glossarysubentry,
+  name={\counterfmt{glossarysubentry}},
+  category={counter}
+}
+
+ at index{labelprefixes,
+  name={label prefixes},
+  text={label prefix},
+  plural={label prefixes}
+}
+
+ at labelprefix{idprefix.dual,
+  name={\idprefixfmt{dual}},
+  category={idprefix},
+  parent={labelprefixes}
+}
+
+ at labelprefix{idprefix.tertiary,
+  name={\idprefixfmt{tertiary}},
+  category={idprefix},
+  parent={labelprefixes}
+}
+
+ at labelprefix{idprefix.extn,
+  name={\idprefixfmt{ext\meta{n}}},
+  category={idprefix},
+  parent={labelprefixes}
+}
+
+ at index{packageoptions,
+  name={package options},
+  text={package option}
+}
+
+ at packageoption{styopt.record,
+  name={\styoptfmt{record}},
+  user1={\meta{value}},
+  description={unless the value is \styoptfmt{off}, this option sets
+  up \styfmt{glossaries-extra} for use with \bibgls: \styoptfmt{only}
+  (assumed if no \meta{value} supplied) indexing is performed by
+  \bibgls; \styoptfmt{nameref} (\sty{glossaries-extra} v1.37+) 
+  like \styoptfmt{only} but includes extra information in the records; 
+  \styoptfmt{alsoindex} (hybrid method) \bibgls\ is used to provide
+  the entry definitions but \idx{makeindex} or \idx{xindy} is used
+  for the indexing},
+  package={glossaries-extra},
+  category={packageoption},
+  parent={packageoptions}
+}
+
+ at packageoption{styopt.accsupp,
+  name={\styoptfmt{accsupp}},
+  description={load the \sty{glossaries-accsupp} package to provide
+   accessibility support},
+  package={glossaries,glossaries-extra},
+  category={packageoption},
+  parent={packageoptions}
+}
+
+ at packageoption{styopt.abbreviations,
+  name={\styoptfmt{abbreviations}},
+  description={creates the \code{abbreviations} glossary},
+  package={glossaries-extra},
+  category={packageoption},
+  parent={packageoptions}
+}
+
+ at packageoption{styopt.symbols,
+  name={\styoptfmt{symbols}},
+  package={glossaries,glossaries-extra},
+  description={defines the \code{symbols} glossary; with 
+   \styfmt{glossaries-extra} additionally defines
+   \csref{glsxtrnewsymbol}},
+  category={packageoption},
+  parent={packageoptions}
+}
+
+ at packageoption{styopt.numbers,
+  name={\styoptfmt{numbers}},
+  package={glossaries,glossaries-extra},
+  description={defines the \code{numbers} glossary; with 
+   \styfmt{glossaries-extra} additionally defines
+   \csref{glsxtrnewnumber}},
+  category={packageoption},
+  parent={packageoptions}
+}
+
+ at packageoption{styopt.undefaction,
+  name={\styoptfmt{undefaction}},
+  user1={\meta{value}},
+  description={indicates what to do if an undefined entry is
+  referenced: \styoptfmt{warn} (generate a warning and show ?? in
+  the text, default with \styopt{record}), \styoptfmt{error}
+  (generate an error)},
+  package={glossaries-extra},
+  category={packageoption},
+  parent={packageoptions}
+}
+
+ at packageoption{styopt.indexcrossrefs,
+  name={\styoptfmt{indexcrossrefs}},
+  user1={\meta{boolean}},
+  package={glossaries-extra},
+  category={packageoption},
+  parent={packageoptions},
+  description={if true, at the end of
+  the document automatically index cross-referenced entries that 
+  haven't been marked as used},
+  note={not relevant with \bibgls}
+}
+
+ at packageoption{styopt.autoseeindex,
+  name={\styoptfmt{autoseeindex}},
+  user1={\meta{boolean}},
+  package={glossaries-extra},
+  category={packageoption},
+  parent={packageoptions},
+  note={not relevant with \bibgls},
+  description={if true, the \field{see} and \field{seealso} keys 
+   automatically indexes the cross-referenced term}
+}
+
+ at packageoption{styopt.nopostdot,
+  name={\styoptfmt{nopostdot}},
+  user1={\meta{boolean}},
+  package={glossaries,glossaries-extra},
+  description={if true, suppresses the automatic post-description 
+   punctuation. With \styfmt{glossaries-extra} you can also use
+   \styopt[none]{postpunc} instead of \styopt[true]{nopostdot} and
+   \styopt{postdot} or \styopt[dot]{postpunc} instead of 
+   \styopt[false]{nopostdot}},
+  category={packageoption},
+  parent={packageoptions}
+}
+
+ at packageoption{styopt.postdot,
+  name={\styoptfmt{postdot}},
+  package={glossaries-extra},
+  description={equivalent to \styopt[dot]{postpunc}},
+  category={packageoption},
+  parent={packageoptions}
+}
+
+ at packageoption{styopt.postpunc,
+  name={\styoptfmt{postpunc}},
+  user1={\meta{value}},
+  package={glossaries-extra},
+  category={packageoption},
+  parent={packageoptions},
+  description={controls the automatic post-description punctuation;
+  the value may be one of: \styoptfmt{none} (not required, 
+  the \field{description} or glossary style already supplies the 
+  terminating punctuation), \styoptfmt{comma} (use a comma),
+  \styoptfmt{dot} (use a \idx{full-stop} with the space factor
+   adjusted), \meta{punctuation} (use \meta{punctuation})}
+}
+
+ at packageoption{styopt.indexcounter,
+  name={\styoptfmt{index\-counter}},
+  description={creates the \counter{wrglossary} counter, which is
+  incremented every time an entry is indexed with that counter, and sets
+  that as the default location counter},
+  package={glossaries-extra},
+  category={packageoption},
+  parent={packageoptions}
+}
+
+ at packageoption{styopt.docdef,
+  name={\styoptfmt{docdef}},
+  user1={\meta{value}},
+  package={glossaries-extra},
+  category={packageoption},
+  parent={packageoptions},
+  note={not relevant with \bibgls},
+  description={determines whether
+  entries can be defined in the \envfmt{document} environment; the
+  \meta{value} may be one of: \styoptfmt{false} (entries must be 
+  defined in the preamble), \styoptfmt{true} (entries may be defined
+  in the \envfmt{document} environment), \styoptfmt{restricted}
+  (entries may only be defined in the \envfmt{document} environment
+  if the definition comes before all glossaries and before any
+  reference to the entry)}
+}
+
+ at packageoption{styopt.nomissingglstext,
+  name={\styoptfmt{nomissingglstext}},
+  user1={\meta{boolean}},
+  package={glossaries-extra},
+  category={packageoption},
+  parent={packageoptions},
+  note={not relevant with \bibgls},
+  description={if true, suppress the
+  warning text that appears in the document with \cs{printglossary}
+  if the associated external file doesn't exist}
+}
+
+ at packageoption{styopt.stylemods,
+  name={\styoptfmt{stylemods}},
+  user1={\meta{value}},
+  description={load the \sty{glossaries-extra-stylemods} package with the
+  supplied options (which should be a list of suffix parts
+  identifying glossary style packages \styfmt{glossary-}\meta{suffix}); 
+  there are two keyword values: \styoptfmt{default}
+  (equivalent to omitting \meta{value}) and \styoptfmt{all}, which
+  loads all predefined styles},
+  package={glossaries-extra},
+  category={packageoption},
+  parent={packageoptions}
+}
+
+ at packageoption{styopt.nowarn,
+  name={\styoptfmt{nowarn}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  description={suppresses all \styfmt{glossaries}-related warnings}
+}
+
+ at packageoption{styopt.nolangwarn,
+  name={\styoptfmt{nolangwarn}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  description={suppresses warnings generated by missing language modules}
+}
+
+ at packageoption{styopt.noredefwarn,
+  name={\styoptfmt{noredefwarn}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  description={suppresses warnings if overriding glossary commands
+   provided by another class or package}
+}
+
+ at packageoption{styopt.debug,
+  name={\styoptfmt{debug}},
+  user1={\meta{value}},
+  package={glossaries,glossaries-extra},
+  category={packageoption},
+  parent={packageoptions},
+  description={add debugging information; allowed values: 
+  \styoptfmt{false} (default), \styoptfmt{true} (info added to
+   transcript), \styoptfmt{showtargets} (info added to transcript
+   and show target name in the document for glossary-related 
+   hyperlinks), \styoptfmt{showwrgloss}\extstyopt\ show mark in
+   document where indexing occurs and \styoptfmt{all}\extstyopt\
+   (implement both \styoptfmt{showtargets} and
+   \styoptfmt{showwrgloss})}
+}
+
+ at packageoption{styopt.seenoindex,
+  name={\styoptfmt{seenoindex}},
+  user1={\meta{value}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  note={not relevant with \bibgls},
+  description={determines whether the 
+  \field{see} key automatically indexes the entry using \cs{glsadd}; 
+  allowed values: \styoptfmt{error} (attempts indexing but triggers
+  an error if used before \cs{cs.makeglossaries}); \styoptfmt{warn}
+  (attempts indexing but triggers a warning if used before
+  \cs{cs.makeglossaries}); \styoptfmt{ignore} (attempts indexing but
+  does nothing if used before \cs{cs.makeglossaries})}
+}
+
+ at packageoption{styopt.nomain,
+  name={\styoptfmt{nomain}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  description={suppresses the creation of the default \code{main}
+  glossary. If used an alternative glossary must be created}
+}
+
+ at packageoption{styopt.sanitizesort,
+  name={\styoptfmt{sanitizesort}},
+  user1={\meta{boolean}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  note={not relevant with \bibgls},
+  description={determines whether or not
+   to sanitize the \field{sort} key (not relevant with \bibgls)}
+}
+
+ at packageoption{styopt.savewrites,
+  name={\styoptfmt{savewrites}},
+  user1={\meta{boolean}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  note={not relevant with \bibgls},
+  description={if true, indexing
+  information is stored in token registers that are only written at
+  the end of the document to save creating a write register per
+  glossary indexing file}
+}
+
+ at packageoption{styopt.translate,
+  name={\styoptfmt{translate}},
+  user1={\meta{value}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  description={determines the multilingual support provided by
+   \styfmt{glossaries}; allowed values: \styoptfmt{true} (default
+   with just base \styfmt{glossaries}; if
+   \styfmt{babel} has been loaded and \styfmt{translator} is
+   installed, use \styfmt{translator} interface), \styoptfmt{false}
+   (don't provide translations), \styoptfmt{babel} (default with
+   \styfmt{glossaries-extra}; don't load the 
+   \styfmt{translator} package, just load \styfmt{glossaries-babel})}
+}
+
+ at packageoption{styopt.notranslate,
+  name={\styoptfmt{notranslate}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  description={equivalent to \styopt[false]{translate}}
+}
+
+ at packageoption{styopt.nohypertypes,
+  name={\styoptfmt{nohypertypes}},
+  user1={\meta{list}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  description={suppress hyperlinks for the listed glossary types}
+}
+
+ at packageoption{styopt.hyperfirst,
+  name={\styoptfmt{hyperfirst}},
+  user1={\meta{boolean}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  description={if false, terms on first use don't have hyperlinks
+  unless explicitly set (with \styfmt{glossaries-extra}, the 
+  \catattr{nohyperfirst} category attribute can selectively apply this)}
+}
+
+ at packageoption{styopt.indexonlyfirst,
+  name={\styoptfmt{indexonlyfirst}},
+  user1={\meta{boolean}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  description={if true, only performs indexing on first use}
+}
+
+ at packageoption{styopt.savenumberlist,
+  name={\styoptfmt{savenumberlist}},
+  user1={\meta{boolean}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  description={if true, stores the number list for each entry (with
+  \bibgls\ use the \csopt{save-locations} resource option instead)}
+}
+
+ at packageoption{styopt.toc,
+  name={\styoptfmt{toc}},
+  user1={\meta{boolean}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  description={if true (default for \styfmt{glossaries-extra}), 
+  automatically add each glossary to the \glsxtrlong{toc}}
+}
+
+ at packageoption{styopt.numberline,
+  name={\styoptfmt{numberline}},
+  user1={\meta{boolean}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  description={when used with \styopt[true]{toc}, this will add 
+  \code{\csfmt{numberline}\marg{}} to the start of the \idx{toc} entry}
+}
+
+ at packageoption{styopt.section,
+  name={\styoptfmt{section}},
+  user1={\meta{value}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  description={indicates the sectional unit to use for the glossary
+  heading (the value should be the name of the section command without
+  the leading backslash, for example \styopt[subsection]{section}).
+  If no value is supplied then \styopt[section]{section} is assumed.
+  If this option is omitted, then the default is either
+  \styopt[chapter]{section} or \styopt[section]{section}, depending
+  on whether or not \cs{chapter} has been defined. The starred or 
+  unstarred version is determined by \styopt{numberedsection}}
+}
+
+ at packageoption{styopt.ucmark,
+  name={\styoptfmt{ucmark}},
+  user1={\meta{boolean}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  description={if true, converts the glossary mark (used in page
+  headings) to \idx{uppercase} with \cs{MakeTextUppercase}}
+}
+
+ at packageoption{styopt.numberedsection,
+  name={\styoptfmt{numberedsection}},
+  user1={\meta{value}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  description={determines whether to use numbered or unnumbered 
+  section units, and whether or not to automatically add
+  \cs{label}; the value may be one of: \styoptfmt{false} (default, no
+  numbering and no label), \styoptfmt{nolabel} (numbered but no
+  label), \styoptfmt{autolabel} (numbered with automatic label), 
+  \styoptfmt{nameref} (unnumbered but labelled). If no value is
+  given \styoptfmt{nolabel} is assumed}
+}
+
+ at packageoption{styopt.entrycounter,
+  name={\styoptfmt{entrycounter}},
+  user1={\meta{boolean}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  description={if true, creates the \counter{glossaryentry} counter
+  and each main (level 0) glossary entry will be
+  numbered (which can be referenced with \cs{glsrefentry} or 
+  \cs{glsxtrpageref})}
+}
+
+ at packageoption{styopt.counterwithin,
+  name={\styoptfmt{counterwithin}},
+  user1={\meta{counter name}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  description={automatically sets the option \styopt[true]{entrycounter} 
+  and indicates the master counter for \counter{glossaryentry}}
+}
+
+ at packageoption{styopt.subentrycounter,
+  name={\styoptfmt{subentrycounter}},
+  user1={\meta{boolean}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  description={if true, creates the \counter{glossarysubentry} counter
+  and each level~1 glossary entry will be
+  numbered (which can be referenced with \cs{glsrefentry} or 
+  \cs{glsxtrpageref}); this option and associated counter are
+  independent of \styopt{entrycounter} and \counter{glossaryentry}}
+}
+
+ at packageoption{styopt.style,
+  name={\styoptfmt{style}},
+  user1={\meta{name}},
+  package={glossaries},
+  description={sets the default glossary style to \meta{name}},
+  category={packageoption},
+  parent={packageoptions}
+}
+
+ at packageoption{styopt.nolong,
+  name={\styoptfmt{nolong}},
+  package={glossaries},
+  description={prevents the \sty{glossary-long} package (which
+   provides the \glostyle{long} styles) from being
+   automatically loaded},
+  category={packageoption},
+  parent={packageoptions}
+}
+
+ at packageoption{styopt.nosuper,
+  name={\styoptfmt{nosuper}},
+  package={glossaries},
+  description={prevents the \isty{glossary-super} package (which
+   provides the \glostyle{super} styles) from being
+   automatically loaded},
+  category={packageoption},
+  parent={packageoptions}
+}
+
+ at packageoption{styopt.nolist,
+  name={\styoptfmt{nolist}},
+  package={glossaries},
+  description={prevents the \sty{glossary-list} package (which
+   provides the \glostyle{list} styles) from being
+   automatically loaded},
+  category={packageoption},
+  parent={packageoptions}
+}
+
+ at packageoption{styopt.notree,
+  name={\styoptfmt{notree}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  description={prevents the \sty{glossary-tree} package (which
+   provides the \glostyle{tree} styles) from being
+   automatically loaded}
+}
+
+ at packageoption{styopt.nostyles,
+  name={\styoptfmt{nostyles}},
+  package={glossaries},
+  description={prevents all the default styles from being loaded. If
+   this option is used a style must be defined in the document or a package
+   providing a style needs to be loaded (either 
+   through \styopt{stylemods} or with \ics{usepackage})},
+  category={packageoption},
+  parent={packageoptions}
+}
+
+ at packageoption{styopt.esclocations,
+  name={\styoptfmt{esclocations}},
+  user1={\meta{boolean}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  note={not relevant with \bibgls},
+  description={if true,
+  \styfmt{glossaries} tries to escape special characters from the
+  locations}
+}
+
+ at packageoption{styopt.nonumberlist,
+  name={\styoptfmt{nonumberlist}},
+  package={glossaries},
+  description={suppresses the location lists from being
+  displayed in the glossary lists (the package
+  option isn't boolean, but the option of the same name for
+  \cs{printglossary}, \cs{printunsrtglossary} and
+  \cs{printnoidxglossary} is boolean); with \bibgls\ you can use
+  \csopt[false]{save-locations} instead},
+  category={packageoption},
+  parent={packageoptions}
+}
+
+ at packageoption{styopt.seeautonumberlist,
+  name={\styoptfmt{seeautonumberlist}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  note={not relevant with \bibgls},
+  description={if \styopt{nonumberlist}
+  is used, this allows the \field{see} key to override the setting
+  for the associated entry}
+}
+
+ at packageoption{styopt.counter,
+  name={\styoptfmt{counter}},
+  user1={\meta{value}},
+  description={sets the default location counter to \meta{value}
+  (which must be the name of a counter). May be overridden on 
+  an individual basis using the
+   \glsopt{counter} option in commands like \cs{gls} and \cs{glsadd}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions}
+}
+
+ at packageoption{styopt.nogroupskip,
+  name={\styoptfmt{nogroupskip}},
+  user1={\meta{boolean}},
+  description={if true, suppresses the visual separation between
+  letter groups in glossary styles that support this option},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions}
+}
+
+ at packageoption{styopt.sort,
+  name={\styoptfmt{sort}},
+  user1={\meta{value}},
+  note={not relevant with \bibgls, use the \csopt{sort}
+   resource option instead},
+  description={indicates how to assign the \field{sort} key if not
+   explicitly set, the value may be one of: \styoptfmt{none} (don't
+   automatically assign the \field{sort} field), \styoptfmt{standard}
+   (obtain the \field{sort} value from the \field{name} field),
+   \styoptfmt{def} (assign the \field{sort} field to a numerical value 
+   that represents the order of definition), \styoptfmt{user}
+   (assign the \field{sort} field to a numerical value that
+   represents the order of first use)},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions}
+}
+
+ at packageoption{styopt.order,
+  name={\styoptfmt{order}},
+  user1={\meta{value}},
+  note={not relevant with \bibgls, use the \csopt{break-at}
+   resource option instead},
+  description={sets whether to use word or letter ordering},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions}
+}
+
+ at packageoption{styopt.makeindex,
+  name={\styoptfmt{makeindex}},
+  note={not relevant with \bibgls},
+  description={write the indexing
+   information using \idx{makeindex}'s format},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions}
+}
+
+ at packageoption{styopt.xindy,
+  name={\styoptfmt{xindy}},
+  user1={\meta{settings}},
+  note={not relevant with \bibgls},
+  description={write the indexing
+   information using \idx{xindy}'s format where the optional
+   \meta{settings} may supply the language and code page and whether
+   or not to define the default number group},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions}
+}
+
+ at packageoption{styopt.xindygloss,
+  name={\styoptfmt{xindygloss}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  note={not relevant with \bibgls},
+  description={equivalent to \styopt[\empty]{xindy}}
+}
+
+ at packageoption{styopt.xindynoglsnumbers,
+  name={\styoptfmt{xindynoglsnumbers}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  note={not relevant with \bibgls},
+  description={equivalent to \styopt[glsnumbers=false]{xindy}}
+}
+
+ at packageoption{styopt.automake,
+  name={\styoptfmt{automake}},
+  user1={\meta{boolean}},
+  description={if true, tries to use \TeX's shell escape to
+   automatically run the required indexing application (may not
+   be permitted by \TeX's security settings)},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions}
+}
+
+ at packageoption{styopt.acronym,
+  name={\styoptfmt{acronym}},
+  user1={\meta{boolean}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  description={if true, creates a new glossary with the label \code{acronym}}
+}
+
+ at packageoption{styopt.acronyms,
+  name={\styoptfmt{acronyms}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  description={equivalent to \styopt[true]{acronym}}
+}
+
+ at packageoption{styopt.acronymlists,
+  name={\styoptfmt{acronymlists}},
+  user1={\meta{list}},
+  package={glossaries},
+  category={packageoption},
+  parent={packageoptions},
+  description={identifies the glossaries that are lists of acronyms
+  (don't use with \sty{glossaries-extra})}
+}
+
+ at packageoption{styopt.shortcuts,
+  name={\styoptfmt{shortcuts}},
+  package={glossaries,glossaries-extra},
+  user1={\meta{value}},
+  description={sets up short cut commands; the value may be one of
+  \styoptfmt{false} (default), \styoptfmt{true} (assumed if no value
+   supplied, implements 
+   \styopt[ac]{shortcuts}, \styopt[abbreviations]{shortcuts} and
+   \styopt[other]{shortcuts}), \styoptfmt{acronyms}\extstyopt\ 
+   (equivalent to base \styopt[true]{shortcuts}, synonym
+   \styoptfmt{acro}), \styoptfmt{ac}\extstyopt\ (provides \cs{ac}
+   shortcuts that use \styfmt{glossaries-extra}'s new abbreviation
+   commands), \styoptfmt{abbreviations}\extstyopt\ (provides \cs{ab}
+   shortcuts), \styoptfmt{other}\extstyopt\ (provides other shortcut
+   commands), \styoptfmt{all}\extstyopt\ (synonym for
+   \styopt[true]{shortcuts}) and \styoptfmt{none}\extstyopt\ (synonym 
+   for \styopt[false]{shortcuts})},
+  category={packageoption},
+  parent={packageoptions}
+}
+
+ at packageoption{styopt.index,
+  name={\styoptfmt{index}},
+  package={glossaries},
+  description={defines the \code{index} glossary and \csref{newterm}},
+  category={packageoption},
+  parent={packageoptions}
+}
+
+ at index{fields,
+  name={fields},
+  text={field}
+}
+
+ at field{field.alias,
+  name={\fieldfmt{alias}},
+  description={The entry with this field set is a synonym of the 
+    entry whose label is given by this field.},
+  note={\styfmt{glossaries-extra}},
+  category={extrafield},
+  parent={fields}
+}
+
+ at field{field.category,
+  name={\fieldfmt{category}},
+  description={The entry's category label.},
+  note={\styfmt{glossaries-extra}},
+  category={extrafield},
+  parent={fields}
+}
+
+ at field{field.description,
+  name={\fieldfmt{description}},
+  description={The description displayed in the glossary.},
+  note={\styfmt{glossaries}},
+  category={basefield},
+  parent={fields}
+}
+
+ at field{field.descriptionplural,
+  name={\fieldfmt{descriptionplural}},
+  description={The plural form of the description.},
+  note={\styfmt{glossaries}},
+  category={basefield},
+  parent={fields}
+}
+
+ at field{field.first,
+  name={\fieldfmt{first}},
+  description={The text to display on first use with \cs{gls}\margm{label}.},
+  note={\styfmt{glossaries}},
+  category={basefield},
+  parent={fields}
+}
+
+ at field{field.firstplural,
+  name={\fieldfmt{firstplural}},
+  description={The text to display on first use with \cs{glspl}\margm{label}.},
+  note={\styfmt{glossaries}},
+  category={basefield},
+  parent={fields}
+}
+
+ at field{field.long,
+  name={\fieldfmt{long}},
+  description={The long form of an abbreviation. (Set internally
+  by commands like \csref{newabbreviation}.)},
+  note={\styfmt{glossaries}},
+  category={basefield},
+  parent={fields}
+}
+
+ at field{field.longplural,
+  name={\fieldfmt{longplural}},
+  description={The plural long form of an abbreviation.},
+  note={\styfmt{glossaries}},
+  category={basefield},
+  parent={fields}
+}
+
+ at field{field.name,
+  name={\fieldfmt{name}},
+  description={The name displayed in the glossary.},
+  note={\styfmt{glossaries}},
+  category={basefield},
+  parent={fields}
+}
+
+ at field{field.parent,
+  name={\fieldfmt{parent}},
+  description={The parent entry's label. See 
+   \sectionref{sec:logicaldivisions}.},
+  note={\styfmt{glossaries}},
+  category={basefield},
+  parent={fields}
+}
+
+ at field{field.plural,
+  name={\fieldfmt{plural}},
+  description={The text to display on subsequent use of
+    \cs{glspl}\margm{label}.},
+  note={\styfmt{glossaries}},
+  category={basefield},
+  parent={fields}
+}
+
+ at field{field.see,
+  name={\fieldfmt{see}},
+  description={General purpose cross-reference
+   (syntax: \code{see=\marg{\oargm{tag}\meta{xr-list}}}).},
+  note={\styfmt{glossaries}},
+  category={basefield},
+  parent={fields}
+}
+
+ at field{field.seealso,
+  name={\fieldfmt{seealso}},
+  description={Cross-reference related entries
+     (syntax: \code{seealso=\margm{xr-list}}).},
+  note={\styfmt{glossaries-extra}},
+  category={extrafield},
+  parent={fields}
+}
+
+ at field{field.short,
+  name={\fieldfmt{short}},
+  description={The short form of an abbreviation. (Set internally
+  by commands like \csref{newabbreviation}.)},
+  note={\styfmt{glossaries}},
+  category={basefield},
+  parent={fields}
+}
+
+ at field{field.shortplural,
+  name={\fieldfmt{shortplural}},
+  description={The plural short form of an abbreviation.},
+  note={\styfmt{glossaries}},
+  category={basefield},
+  parent={fields}
+}
+
+ at field{field.symbol,
+  name={\fieldfmt{symbol}},
+  description={The associated symbol.},
+  note={\styfmt{glossaries}},
+  category={basefield},
+  parent={fields}
+}
+
+ at field{field.symbolplural,
+  name={\fieldfmt{symbolplural}},
+  description={The plural form of the associated symbol.},
+  note={\styfmt{glossaries}},
+  category={basefield},
+  parent={fields}
+}
+
+ at field{field.text,
+  name={\fieldfmt{text}},
+  description={The text to display on subsequent use of 
+    \cs{gls}\margm{label}.},
+  note={\styfmt{glossaries}},
+  category={basefield},
+  parent={fields}
+}
+
+ at field{field.user1,
+  name={\fieldfmt{user1}},
+  description={A general purpose user field.},
+  note={\styfmt{glossaries}},
+  category={basefield},
+  parent={fields}
+}
+
+ at field{field.user2,
+  name={\fieldfmt{user2}},
+  description={A general purpose user field.},
+  note={\styfmt{glossaries}},
+  category={basefield},
+  parent={fields}
+}
+
+ at field{field.user3,
+  name={\fieldfmt{user3}},
+  description={A general purpose user field.},
+  note={\styfmt{glossaries}},
+  category={basefield},
+  parent={fields}
+}
+
+ at field{field.user4,
+  name={\fieldfmt{user4}},
+  description={A general purpose user field.},
+  note={\styfmt{glossaries}},
+  category={basefield},
+  parent={fields}
+}
+
+ at field{field.user5,
+  name={\fieldfmt{user5}},
+  description={A general purpose user field.},
+  note={\styfmt{glossaries}},
+  category={basefield},
+  parent={fields}
+}
+
+ at field{field.user6,
+  name={\fieldfmt{user6}},
+  description={A general purpose user field.},
+  note={\styfmt{glossaries}},
+  category={basefield},
+  parent={fields}
+}
+
+ at field{field.duallong,
+  name={\fieldfmt{duallong}},
+  description={The long form of a dual
+    abbreviation mapped by \atentry{dualabbreviation}.},
+  note={\appfmt{bib2gls}},
+  category={bib2glsfield},
+  parent={fields}
+}
+
+ at field{field.duallongplural,
+  name={\fieldfmt{dual\-long\-plural}},
+  description={The plural long form of a dual
+    abbreviation mapped by \atentry{dualabbreviation}.},
+  note={\appfmt{bib2gls}},
+  category={bib2glsfield},
+  parent={fields}
+}
+
+ at field{field.dualshort,
+  name={\fieldfmt{dualshort}},
+  description={The short form of a dual
+    abbreviation mapped by \atentry{dualabbreviation}.},
+  note={\appfmt{bib2gls}},
+  category={bib2glsfield},
+  parent={fields}
+}
+
+ at field{field.dualshortplural,
+  name={\fieldfmt{dual\-short\-plural}},
+  description={The plural short form of a dual abbreviation
+    mapped by \atentry{dualabbreviation}.},
+  note={\appfmt{bib2gls}},
+  category={bib2glsfield},
+  parent={fields}
+}
+
+ at field{field.adoptparents,
+  name={\fieldfmt{adopt\-parents}},
+  description={The list of adopted parents for entries spawned by
+    \atentry{progenitor}. (Field only available for use in 
+    \ext{bib} file within \atentry{progenitor}-like entries.)},
+  note={\appfmt{bib2gls}},
+  category={bib2glsfield},
+  parent={fields}
+}
+
+ at field{field.prefix,
+  name={\fieldfmt{prefix}},
+  description={The prefix associated with the \field{text}
+    field.},
+  note={\styfmt{glossaries-prefix}},
+  category={prefixfield},
+  parent={fields}
+}
+
+ at field{field.prefixfirst,
+  name={\fieldfmt{prefixfirst}},
+  description={The prefix associated with the \field{first}
+field.},
+  note={\styfmt{glossaries-prefix}},
+  category={prefixfield},
+  parent={fields}
+}
+
+ at field{field.prefixfirstplural,
+  name={\fieldfmt{prefixfirstplural}},
+  description={The prefix associated with the
+    \field{firstplural} field.},
+  note={\styfmt{glossaries-prefix}},
+  category={prefixfield},
+  parent={fields}
+}
+
+ at field{field.prefixplural,
+  name={\fieldfmt{prefixplural}},
+  description={The prefix associated with the
+    \field{plural} field.},
+  note={\styfmt{glossaries-prefix}},
+  category={prefixfield},
+  parent={fields}
+}
+
+ at field{field.dualprefix,
+  name={\fieldfmt{dual\-prefix}},
+  description={The dual of the \field{prefix} field. This field
+   isn't provided with a key or associated command, but can be
+   accessed as an internal field},
+  note={\appfmt{bib2gls}},
+  category={bib2glsfield},
+  parent={fields}
+}
+
+ at field{field.dualprefixplural,
+  name={\fieldfmt{dual\-prefix\-plural}},
+  description={The dual of the \field{prefixplural} field. This field
+   isn't provided with a key or associated command, but can be
+   accessed as an internal field},
+  note={\appfmt{bib2gls}},
+  category={bib2glsfield},
+  parent={fields}
+}
+
+ at field{field.dualprefixfirst,
+  name={\fieldfmt{dual\-prefix\-first}},
+  description={The dual of the \field{prefixfirst} field. This field
+   isn't provided with a key or associated command, but can be
+   accessed as an internal field},
+  note={\appfmt{bib2gls}},
+  category={bib2glsfield},
+  parent={fields}
+}
+
+ at field{field.dualprefixfirstplural,
+  name={\fieldfmt{dual\-prefix\-first\-plural}},
+  description={The dual of the \field{prefixfirstplural} field. This field
+   isn't provided with a key or associated command, but can be
+   accessed as an internal field},
+  note={\appfmt{bib2gls}},
+  category={bib2glsfield},
+  parent={fields}
+}
+
+ at field{field.dualdescription,
+  name={\fieldfmt{dual\-description}},
+  description={May be used to identify a dual description},
+  note={\appfmt{bib2gls}},
+  category={bib2glsfield},
+  parent={fields}
+}
+
+ at field{field.access,
+  name={\fieldfmt{access}},
+  description={The replacement text for the \field{name} field.},
+  note={\styfmt{glossaries-accsupp}},
+  category={accessfield},
+  parent={fields}
+}
+
+ at field{field.descriptionaccess,
+  name={\fieldfmt{descriptionaccess}},
+  description={The replacement text for the
+    \field{description} field.},
+  note={\styfmt{glossaries-accsupp}},
+  category={accessfield},
+  parent={fields}
+}
+
+ at field{field.descriptionpluralaccess,
+  name={\fieldfmt{descriptionpluralaccess}},
+  description={The replacement text for the
+    \field{descriptionplural} field.},
+  note={\styfmt{glossaries-accsupp}},
+  category={accessfield},
+  parent={fields}
+}
+
+ at field{field.firstaccess,
+  name={\fieldfmt{firstaccess}},
+  description={The replacement text for the \field{first} field.},
+  note={\styfmt{glossaries-accsupp}},
+  category={accessfield},
+  parent={fields}
+}
+
+ at field{field.firstpluralaccess,
+  name={\fieldfmt{firstpluralaccess}},
+  description={The replacement text for the
+   \field{firstplural} field.},
+  note={\styfmt{glossaries-accsupp}},
+  category={accessfield},
+  parent={fields}
+}
+
+ at field{field.longaccess,
+  name={\fieldfmt{longaccess}},
+  description={The replacement text for the \field{long} field.},
+  note={\styfmt{glossaries-accsupp}},
+  category={accessfield},
+  parent={fields}
+}
+
+ at field{field.longpluralaccess,
+  name={\fieldfmt{longpluralaccess}},
+  description={The replacement text for the
+    \field{longplural} field.},
+  note={\styfmt{glossaries-accsupp}},
+  category={accessfield},
+  parent={fields}
+}
+
+ at field{field.pluralaccess,
+  name={\fieldfmt{pluralaccess}},
+  description={The replacement text for the \field{plural} field.},
+  note={\styfmt{glossaries-accsupp}},
+  category={accessfield},
+  parent={fields}
+}
+
+ at field{field.shortaccess,
+  name={\fieldfmt{shortaccess}},
+  description={The replacement text for the \field{short} field.},
+  note={\styfmt{glossaries-accsupp}},
+  category={accessfield},
+  parent={fields}
+}
+
+ at field{field.shortpluralaccess,
+  name={\fieldfmt{shortpluralaccess}},
+  description={The replacement text for the
+   \field{shortplural} field.},
+  note={\styfmt{glossaries-accsupp}},
+  category={accessfield},
+  parent={fields}
+}
+
+ at field{field.symbolaccess,
+  name={\fieldfmt{symbolaccess}},
+  description={The replacement text for the \field{symbol} field.},
+  note={\styfmt{glossaries-accsupp}},
+  category={accessfield},
+  parent={fields}
+}
+
+ at field{field.symbolpluralaccess,
+  name={\fieldfmt{symbolpluralaccess}},
+  description={The replacement text for the
+    \field{symbolplural} field.},
+  note={\styfmt{glossaries-accsupp}},
+  category={accessfield},
+  parent={fields}
+}
+
+ at field{field.textaccess,
+  name={\fieldfmt{textaccess}},
+  description={The replacement text for the
+     \field{text} field.},
+  note={\styfmt{glossaries-accsupp}},
+  category={accessfield},
+  parent={fields}
+}
+
+ at index{internalfields,
+  name={fields, internal},
+  text={internal fields}
+}
+
+ at field{field.childcount,
+  name={\fieldfmt{childcount}},
+  description={Stores the number of children this entry has
+    had selected.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.childlist,
+  name={\fieldfmt{childlist}},
+  description={A list of labels (in \sty{etoolbox}'s internal list
+   format) of the children this entry has had selected.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.siblingcount,
+  name={\fieldfmt{siblingcount}},
+  description={Stores the number of siblings this entry has
+    had selected.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.siblinglist,
+  name={\fieldfmt{siblinglist}},
+  description={A list of labels (in \sty{etoolbox}'s internal list
+   format) of the siblings this entry has had selected.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.rootancestor,
+  name={\fieldfmt{rootancestor}},
+  description={Stores the label of this entry's root ancestor.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.definitionindex,
+  name={\fieldfmt{definitionindex}},
+  description={Stores the definition index.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.useindex,
+  name={\fieldfmt{useindex}},
+  description={Stores the order of use index.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.originalentrytype,
+  name={\fieldfmt{original\-entry\-type}},
+  description={The original entry type before any aliasing was
+  applied or the actual entry type if no aliasing.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.originalid,
+  name={\fieldfmt{original\-id}},
+  description={The original label as given in the \ext{bib} file.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.primarylocations,
+  name={\fieldfmt{primarylocations}},
+  description={Stores the locations that use one of the designated
+primary formats, if enabled.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.indexcounter,
+  name={\fieldfmt{index\-counter}},
+  description={Stores the location corresponding to the matching
+\counter{wrglossary} reference.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.counter,
+  name={\fieldfmt{counter}},
+  description={The default counter used for indexing (assigned by
+   the \csopt{counter} option).},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.group,
+  name={\fieldfmt{group}},
+  description={The letter group determined by the comparator
+   (or assigned by the \csopt{group} option). See 
+   \sectionref{sec:logicaldivisions}.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.location,
+  name={\fieldfmt{location}},
+  description={The typeset location list.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.loclist,
+  name={\fieldfmt{loclist}},
+  description={The internal list of locations.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.recordcount,
+  name={\fieldfmt{recordcount}},
+  description={Used with record counting to store the
+    total record count.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.recordcount.counter,
+  name={\fieldfmt{recordcount.\discretionary{}{}{}\meta{counter}}},
+  description={Used with record counting to store the
+   total number of records for a given counter.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.recordcount.counter.location,
+  name={\fieldfmt{recordcount.\discretionary{}{}{}\meta{counter}.\discretionary{}{}{}\meta{location}}},
+  description={Used with record counting to store the
+   total number of records for a given location.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.secondarygroup,
+  name={\fieldfmt{secondarygroup}},
+  description={The letter group determined by the
+    comparator used with the \csopt{secondary} sort.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.secondarysort,
+  name={\fieldfmt{secondarysort}},
+  description={The sort value determined by the
+   comparator used with the \csopt{secondary} sort.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.dual,
+  name={\fieldfmt{dual}},
+  description={Created by \csopt{dual-field} if set with no value,
+   this field is used to store the dual label.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.sort,
+  name={\fieldfmt{sort}},
+  description={The sort value obtained by the comparator.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.type,
+  name={\fieldfmt{type}},
+  description={The glossary this entry belongs to (assigned by
+   the \csopt{type} option). See 
+   \sectionref{sec:logicaldivisions}.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.fieldendpunc,
+  name={\meta{field}\fieldfmt{endpunc}},
+  description={Used with the \csopt{check-end-punctuation}
+  option.},
+  note={internal field set by \appfmt{bibgls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.bibtextype,
+  name={\fieldfmt{bib\-tex\-type}},
+  description={Used by \bibgls\ as a substitution for \BibTeX's
+   \fieldfmt{type} field when parsing \atentry{bibtexentry}. Needs
+   to be defined or aliased to make it available in the document.},
+  note={internal field set by \bibgls},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.bibtexcontributor,
+  name={\fieldfmt{bib\-tex\-con\-trib\-u\-tor}},
+  description={An internal list field provided when a
+  \atentry{contributor} entry is automatically
+  created by \atentry{bibtexentry}.},
+  note={internal field set by \bibgls},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.bibtexentry,
+  name={\fieldfmt{bib\-tex\-entry}},
+  description={An internal list field created by \atentry{bibtexentry}.},
+  note={internal field set by \bibgls},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.bibtexentry at entrytype,
+  name={\fieldfmt{bib\-tex\-entry\-@\meta{entry-type}}},
+  description={An internal list field created by \atentry{bibtexentry}.},
+  note={internal field set by \bibgls},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.progeny,
+  name={\fieldfmt{progeny}},
+  description={A comma-separated list of labels identifying
+   the entries spawned by \atentry{progenitor}.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.progenitor,
+  name={\fieldfmt{progenitor}},
+  description={The label identifying the \atentry{progenitor} 
+   that spawned this entry.},
+  note={internal field set by \appfmt{bib2gls}},
+  category={internalfield},
+  parent={internalfields}
+}
+
+ at field{field.currcount,
+  name={\fieldfmt{currcount}},
+  description={Used with entry counting to store the current total.},
+  note={internal field set by \styfmt{glossaries}},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.currcountunit,
+  name={\fieldfmt{currcount@}\meta{value}},
+  description={Used with unit entry counting (\styfmt{glossaries-extra}).},
+  note={internal field set by \styfmt{glossaries-extra}},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.indexed,
+  name={\fieldfmt{indexed}},
+  description={The value is incremented everytime the entry is indexed.},
+  note={internal field set by \styfmt{glossaries-extra} v1.49+},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.desc,
+  name={\fieldfmt{desc}},
+  description={Corresponds to \field{description} key.},
+  note={internal field set by \styfmt{glossaries}},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.descplural,
+  name={\fieldfmt{descplural}},
+  description={Corresponds to \field{descriptionplural} key.},
+  note={internal field set by \styfmt{glossaries}},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.firstpl,
+  name={\fieldfmt{firstpl}},
+  description={Corresponds to \field{firstplural} key.},
+  note={internal field set by \styfmt{glossaries}},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.flag,
+  name={\fieldfmt{flag}},
+  description={Boolean that determines if an entry has been used.},
+  note={internal field set by \styfmt{glossaries}},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.index,
+  name={\fieldfmt{index}},
+  description={The main part of the indexing code
+    (\appfmt{makeindex} or \appfmt{xindy}).},
+  note={internal field set by \styfmt{glossaries}},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.level,
+  name={\fieldfmt{level}},
+  description={Hierarchical level.},
+  note={internal field set by \styfmt{glossaries}},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.longpl,
+  name={\fieldfmt{longpl}},
+  description={Corresponds to \field{longplural} key.},
+  note={internal field set by \styfmt{glossaries}},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.nonumberlist,
+  name={\fieldfmt{nonumberlist}},
+  description={Used to suppress the location list for a specific entry.
+  Its value may only be \code{true} or \code{false}.
+  Technically this isn't actually a field as its value isn't saved
+  so it can't be referenced or modified after the entry has been
+  defined.},
+  note={\styfmt{glossaries}},
+  category={basefield},
+  parent={fields}
+}
+
+ at field{field.prenumberlist,
+  name={\fieldfmt{prenumberlist}},
+  description={set by the \field{nonumberlist} entry key with \cs{makenoidxglossaries}},
+  note={internal field set by \styfmt{glossaries}},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.prevcount,
+  name={\fieldfmt{prevcount}},
+  description={Used with entry counting to store the total 
+   from the previous run.},
+  note={internal field set by \styfmt{glossaries}},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.prevcountunit,
+  name={\fieldfmt{prevcount@}\meta{value}},
+  description={Used with unit entry counting
+    (\styfmt{glossaries-extra}).},
+  note={internal field set by \styfmt{glossaries-extra}},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.prevunitmax,
+  name={\fieldfmt{prevunitmax}},
+  description={Used with unit entry counting
+    (\styfmt{glossaries-extra}).},
+  note={internal field set by \styfmt{glossaries-extra}},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.prevunittotal,
+  name={\fieldfmt{prevunittotal}},
+  description={Used with unit entry counting
+   (\styfmt{glossaries-extra}).},
+  note={internal field set by \styfmt{glossaries-extra}},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.shortpl,
+  name={\fieldfmt{shortpl}},
+  description={Corresponds to \field{shortplural} key.},
+  note={internal field set by \styfmt{glossaries}},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.sortvalue,
+  name={\fieldfmt{sortvalue}},
+  description={Original \field{sort} value 
+   (before sanitizing and escaping special characters).},
+  note={internal field set by \styfmt{glossaries}},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.unitlist,
+  name={\fieldfmt{unitlist}},
+  description={Used with unit entry counting
+   (\styfmt{glossaries-extra}).},
+  note={internal field set by \styfmt{glossaries-extra}},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.useri,
+  name={\fieldfmt{useri}},
+  description={Corresponds to \field{user1} key.},
+  note={internal field set by \styfmt{glossaries}},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.userii,
+  name={\fieldfmt{userii}},
+  description={Corresponds to \field{user2} key.},
+  note={internal field set by \styfmt{glossaries}},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.useriii,
+  name={\fieldfmt{useriii}},
+  description={Corresponds to \field{user3} key.},
+  note={internal field set by \styfmt{glossaries}},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.useriv,
+  name={\fieldfmt{useriv}},
+  description={Corresponds to \field{user4} key.},
+  note={internal field set by \styfmt{glossaries}},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.userv,
+  name={\fieldfmt{userv}},
+  description={Corresponds to \field{user5} key.},
+  note={internal field set by \styfmt{glossaries}},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.uservi,
+  name={\fieldfmt{uservi}},
+  description={Corresponds to \field{user6} key.},
+  note={internal field set by \styfmt{glossaries}},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.bib2gls at sort,
+  name={\fieldfmt{bib2gls at sort}},
+  description={Used by \bibgls\ to store the actual sort value.},
+  note={internal field set by \bibgls},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.bib2gls at sortfallback,
+  name={\fieldfmt{bib2gls at sortfallback}},
+  description={Used by \bibgls\ to store the sort fallback value.},
+  note={internal field set by \bibgls},
+  category={baseinternalfield},
+  parent={internalfields}
+}
+
+ at field{field.elements,
+  name={\fieldfmt{elements}},
+  description={Only available for \atentry{compoundset} this
+   required field should contain a comma-separated list of labels.},
+  note={specific to \atentry{compoundset}},
+  category={compoundsetfield},
+  parent={fields}
+}
+
+ at field{field.main,
+  name={\fieldfmt{main}},
+  description={Only available for \atentry{compoundset} this
+   optional field should contain the \gls{ext1.compmainlabel}.
+   If omitted, the final element from the \field{elements} field is
+   assumed.},
+  note={specific to \atentry{compoundset}},
+  category={compoundsetfield},
+  parent={fields}
+}
+
+ at field{field.options,
+  name={\fieldfmt{option}},
+  description={Only available for \atentry{compoundset} this
+   optional field should contain the default options that govern the set
+   (which override conflicting options set with
+   \cs{multiglossaryentrysetup} and can be overridden by options to
+   commands like \cs{mgls}).},
+  note={specific to \atentry{compoundset}},
+  category={compoundsetfield},
+  parent={fields}
+}
+
+ at index{entrytypes,
+  name={entry types},
+  text={entry type}
+}
+
+ at entrytype{entry.string,
+  name={\atentryfmt{string}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.preamble,
+  name={\atentryfmt{preamble}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.comment,
+  name={\atentryfmt{comment}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.compoundset,
+  name={\atentryfmt{compoundset}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.entry,
+  name={\atentryfmt{entry}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.symbol,
+  name={\atentryfmt{symbol}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.number,
+  name={\atentryfmt{number}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.index,
+  name={\atentryfmt{index}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.indexplural,
+  name={\atentryfmt{indexplural}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.abbreviation,
+  name={\atentryfmt{abbreviation}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.acronym,
+  name={\atentryfmt{acronym}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.dualentry,
+  name={\atentryfmt{dual\-entry}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.dualindexentry,
+  name={\atentryfmt{dual\-index\-entry}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.dualindexabbreviation,
+  name={\atentryfmt{dual\-index\-abbre\-via\-tion}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.dualindexsymbol,
+  name={\atentryfmt{dual\-index\-symbol}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.dualindexnumber,
+  name={\atentryfmt{dual\-index\-number}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.dualabbreviationentry,
+  name={\atentryfmt{dual\-abbre\-via\-tion\-entry}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.dualentryabbreviation,
+  name={\atentryfmt{dual\-entry\-abbre\-via\-tion}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.dualsymbol,
+  name={\atentryfmt{dual\-symbol}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.dualnumber,
+  name={\atentryfmt{dual\-number}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.dualabbreviation,
+  name={\atentryfmt{dual\-abbre\-via\-tion}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.dualacronym,
+  name={\atentryfmt{dual\-acronym}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.tertiaryindexabbreviationentry,
+  name={\atentryfmt{tert\-iary\-index\-abbre\-via\-tion\-entry}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.bibtexentry,
+  name={\atentryfmt{bib\-tex\-entry}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.contributor,
+  name={\atentryfmt{contributor}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.progenitor,
+  name={\atentryfmt{progenitor}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.spawnindex,
+  name={\atentryfmt{spawn\-index}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.spawnindexplural,
+  name={\atentryfmt{spawn\-index\-plural}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.spawnentry,
+  name={\atentryfmt{spawn\-entry}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.spawnsymbol,
+  name={\atentryfmt{spawn\-symbol}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.spawnnumber,
+  name={\atentryfmt{spawn\-number}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.spawnabbreviation,
+  name={\atentryfmt{spawn\-abbreviation}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.spawnacronym,
+  name={\atentryfmt{spawn\-acronym}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at entrytype{entry.spawndualindexentry,
+  name={\atentryfmt{spawn\-dual\-index\-entry}},
+  category={entrytype},
+  parent={entrytypes}
+}
+
+ at index{switches,
+  name={switches},
+  text={switch},
+  plural={switches},
+  see={commandlineoptions,commandlineoptionsconverter,commandlineoptionsgls2bib,commandlineoptionsdatatool2bib}
+}
+
+ at index{--switch,
+  name={\longargfmt{\meta{switch}}},
+  see={commandlineoptions,commandlineoptionsconverter,commandlineoptionsgls2bib,commandlineoptionsdatatool2bib}
+}
+
+ at index{commandlineoptions,
+  name={command line options (\appfmt{bib2gls})},
+  text={command line option}
+}
+
+ at index{commandlineoptionscommon,
+  name={command line options (common)},
+  text={command line option}
+}
+
+ at index{commandlineoptionsconverter,
+  name={command line options (conversion tools)},
+  text={command line option}
+}
+
+ at index{commandlineoptionsgls2bib,
+  name={command line options (\appfmt{convertgls2bib})},
+  text={command line option}
+}
+
+ at index{commandlineoptionsdatatool2bib,
+  name={command line options (\appfmt{datatool2bib})},
+  text={command line option}
+}
+
+ at switch{switch.common.help,
+  name={\longargfmt{help}},
+  symbol={\shortargfmt{h}},
+  user1={},
+  category={switch},
+  parent={commandlineoptionscommon}
+}
+
+ at switch{switch.common.version,
+  name={\longargfmt{version}},
+  symbol={\shortargfmt{v}},
+  user1={},
+  category={switch},
+  parent={commandlineoptionscommon}
+}
+
+ at switch{switch.common.debug,
+  name={\longargfmt{debug}},
+  user1={\oargm{n}},
+  category={switch},
+  parent={commandlineoptionscommon}
+}
+
+ at switch{switch.common.debug-mode,
+  name={\longargfmt{debug\dhyphen mode}},
+  user1={\meta{setting}},
+  category={switch},
+  parent={commandlineoptionscommon}
+}
+
+ at switch{switch.common.no-debug,
+  name={\longargfmt{no\dhyphen debug}},
+  symbol={\longargfmt{nodebug}},
+  user1={},
+  category={switch},
+  parent={commandlineoptionscommon}
+}
+
+ at switch{switch.common.verbose,
+  name={\longargfmt{verbose}},
+  user1={},
+  category={switch},
+  parent={commandlineoptionscommon}
+}
+
+ at switch{switch.common.no-verbose,
+  name={\longargfmt{no\dhyphen verbose}},
+  symbol={\longargfmt{noverbose}},
+  user1={},
+  category={switch},
+  parent={commandlineoptionscommon}
+}
+
+ at switch{switch.common.silent,
+  name={\longargfmt{silent}},
+  user1={},
+  category={switch},
+  parent={commandlineoptionscommon}
+}
+
+ at switch{switch.common.quiet,
+  name={\longargfmt{quiet}},
+  symbol={\shortargfmt{q}},
+  user1={},
+  category={switch},
+  parent={commandlineoptionscommon}
+}
+
+ at switch{switch.common.locale,
+  name={\longargfmt{locale}},
+  symbol={\shortargfmt{l}},
+  user1={\meta{lang}},
+  category={switch},
+  parent={commandlineoptionscommon}
+}
+
+ at switch{switch.log-file,
+  name={\longargfmt{log\dhyphen file}},
+  symbol={\shortargfmt{t}},
+  user1={\meta{filename}},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.converter.log-file,
+  name={\longargfmt{log\dhyphen file}},
+  symbol={\shortargfmt{t}},
+  user1={\meta{filename}},
+  category={switch},
+  parent={commandlineoptionsconverter}
+}
+
+ at switch{switch.dir,
+  name={\longargfmt{dir}},
+  symbol={\shortargfmt{d}},
+  user1={\meta{dirname}},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.interpret,
+  name={\longargfmt{interpret}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.no-interpret,
+  name={\longargfmt{no\dhyphen interpret}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.warn-non-bib-fields,
+  name={\longargfmt{warn\dhyphen non\dhyphen bib\dhyphen fields}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.no-warn-non-bib-fields,
+  name={\longargfmt{no\dhyphen warn\dhyphen non\dhyphen bib\dhyphen fields}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.warn-unknown-entry-types,
+  name={\longargfmt{warn\dhyphen unknown\dhyphen entry\dhyphen types}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.no-warn-unknown-entry-types,
+  name={\longargfmt{no\dhyphen warn\dhyphen unknown\dhyphen entry\dhyphen types}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.break-space,
+  name={\longargfmt{break\dhyphen space}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.no-break-space,
+  name={\longargfmt{no\dhyphen break\dhyphen space}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.obey-aux-catcode,
+  name={\longargfmt{obey\dhyphen aux\dhyphen catcode}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.no-obey-aux-catcode,
+  name={\longargfmt{no\dhyphen obey\dhyphen aux\dhyphen catcode}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.cite-as-record,
+  name={\longargfmt{cite\dhyphen as\dhyphen record}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.no-cite-as-record,
+  name={\longargfmt{no\dhyphen cite\dhyphen as\dhyphen record}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.collapse-same-location-range,
+  name={\longargfmt{collapse\dhyphen same\dhyphen location\dhyphen range}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.no-collapse-same-location-range,
+  name={\longargfmt{no\dhyphen collapse\dhyphen same\dhyphen location\dhyphen range}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.merge-wrglossary-records,
+  name={\longargfmt{merge\dhyphen wrglossary\dhyphen records}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.no-merge-wrglossary-records,
+  name={\longargfmt{no\dhyphen merge\dhyphen wrglossary\dhyphen records}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.merge-nameref-on,
+  name={\longargfmt{merge\dhyphen nameref\dhyphen on}},
+  user1={\meta{rule}},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.datatool-sort-markers,
+  name={\longargfmt{datatool\dhyphen sort\dhyphen markers}},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.no-datatool-sort-markers,
+  name={\longargfmt{no\dhyphen datatool\dhyphen sort\dhyphen markers}},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.force-cross-resource-refs,
+  name={\longargfmt{force\dhyphen cross\dhyphen resource\dhyphen refs}},
+  symbol={\shortargfmt{x}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.no-force-cross-resource-refs,
+  name={\longargfmt{no\dhyphen force\dhyphen cross\dhyphen resource\dhyphen refs}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.support-unicode-script,
+  name={\longargfmt{support\dhyphen unicode\dhyphen script}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.no-support-unicode-script,
+  name={\longargfmt{no\dhyphen support\dhyphen unicode\dhyphen script}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.replace-quotes,
+  name={\longargfmt{replace\dhyphen quotes}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.no-replace-quotes,
+  name={\longargfmt{no\dhyphen replace\dhyphen quotes}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.packages,
+  name={\longargfmt{packages}},
+  symbol={\shortargfmt{p}},
+  user1={\meta{list}},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.ignore-packages,
+  name={\longargfmt{ignore-packages}},
+  symbol={\shortargfmt{k}},
+  user1={\meta{list}},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.custom-packages,
+  name={\longargfmt{custom\dhyphen packages}},
+  user1={\meta{list}},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.list-known-packages,
+  name={\longargfmt{list\dhyphen known\dhyphen packages}},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.mfirstuc-protection,
+  name={\longargfmt{mfirstuc\dhyphen protection}},
+  symbol={\shortargfmt{u}},
+  user1={\meta{list}\argor\code{all}},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.no-mfirstuc-protection,
+  name={\longargfmt{no\dhyphen mfirstuc\dhyphen protection}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.mfirstuc-math-protection,
+  name={\longargfmt{mfirstuc\dhyphen math\dhyphen protection}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.no-mfirstuc-math-protection,
+  name={\longargfmt{no\dhyphen mfirstuc\dhyphen math\dhyphen protection}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.nested-link-check,
+  name={\longargfmt{nested\dhyphen link\dhyphen check}},
+  user1={\meta{list}\argor\code{none}},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.no-nested-link-check,
+  name={\longargfmt{no\dhyphen nested\dhyphen link\dhyphen check}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.shortcuts,
+  name={\longargfmt{shortcuts}},
+  user1={\meta{value}},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.map-format,
+  name={\longargfmt{map\dhyphen format}},
+  symbol={\shortargfmt{m}},
+  user1={\meta{map:value list}},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.retain-formats,
+  name={\longargfmt{retain\dhyphen formats}},
+  user1={\meta{list}},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.no-retain-formats,
+  name={\longargfmt{no\dhyphen retain\dhyphen formats}},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.group,
+  name={\longargfmt{group}},
+  symbol={\shortargfmt{g}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.no-group,
+  name={\longargfmt{no\dhyphen group}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.tex-encoding,
+  name={\longargfmt{tex\dhyphen encoding}},
+  user1={\meta{name}},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.log-encoding,
+  name={\longargfmt{log\dhyphen encoding}},
+  user1={\meta{name}},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.default-encoding,
+  name={\longargfmt{default\dhyphen encoding}},
+  user1={\meta{name}},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.no-date-in-header,
+  name={\longargfmt{no\dhyphen date\dhyphen in\dhyphen header}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.date-in-header,
+  name={\longargfmt{date\dhyphen in\dhyphen header}},
+  symbol={\shortargfmt{D}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.no-expand-fields,
+  name={\longargfmt{no\dhyphen expand\dhyphen fields}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.expand-fields,
+  name={\longargfmt{expand\dhyphen fields}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.record-count-rule,
+  name={\longargfmt{record\dhyphen count\dhyphen rule}},
+  symbol={\shortargfmt{r}},
+  user1={\marg{rule}},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.record-count,
+  name={\longargfmt{record\dhyphen count}},
+  symbol={\shortargfmt{c}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.no-record-count,
+  name={\longargfmt{no\dhyphen record\dhyphen count}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.record-count-unit,
+  name={\longargfmt{record\dhyphen count\dhyphen unit}},
+  symbol={\shortargfmt{n}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.no-record-count-unit,
+  name={\longargfmt{no\dhyphen record\dhyphen count\dhyphen unit}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.trim-fields,
+  name={\longargfmt{trim\dhyphen fields}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.trim-only-fields,
+  name={\longargfmt{trim\dhyphen only\dhyphen fields}},
+  user1={\meta{list}},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.trim-except-fields,
+  name={\longargfmt{trim\dhyphen except\dhyphen fields}},
+  user1={\meta{list}},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.no-trim-fields,
+  name={\longargfmt{no\dhyphen trim\dhyphen fields}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.provide-glossaries,
+  name={\longargfmt{provide\dhyphen glossaries}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.no-provide-glossaries,
+  name={\longargfmt{no\dhyphen provide\dhyphen glossaries}},
+  user1={},
+  category={switch},
+  parent={commandlineoptions}
+}
+
+ at switch{switch.converter.texenc,
+  name={\longargfmt{texenc}},
+  user1={\meta{encoding}},
+  category={switch},
+  parent={commandlineoptionsconverter}
+}
+
+ at switch{switch.converter.bibenc,
+  name={\longargfmt{bibenc}},
+  user1={\meta{encoding}},
+  category={switch},
+  parent={commandlineoptionsconverter}
+}
+
+ at switch{switch.converter.overwrite,
+  name={\longargfmt{overwrite}},
+  user1={},
+  category={switch},
+  parent={commandlineoptionsconverter}
+}
+
+ at switch{switch.converter.no-overwrite,
+  name={\longargfmt{no\dhyphen overwrite}},
+  user1={},
+  category={switch},
+  parent={commandlineoptionsconverter}
+}
+
+ at switch{switch.converter.preamble-only,
+  name={\longargfmt{preamble\dhyphen only}},
+  symbol={\shortargfmt{p}},
+  user1={},
+  category={switch},
+  parent={commandlineoptionsconverter}
+}
+
+ at switch{switch.converter.no-preamble-only,
+  name={\longargfmt{no\dhyphen preamble\dhyphen only}},
+  user1={},
+  category={switch},
+  parent={commandlineoptionsconverter}
+}
+
+ at switch{switch.converter.space-sub,
+  name={\longargfmt{space\dhyphen sub}},
+  symbol={\shortargfmt{s}},
+  user1={\meta{replacement}},
+  category={switch},
+  parent={commandlineoptionsconverter}
+}
+
+ at switch{switch.gls2bib.ignore-sort,
+  name={\longargfmt{ignore\dhyphen sort}},
+  user1={},
+  category={switch},
+  parent={commandlineoptionsgls2bib}
+}
+
+ at switch{switch.gls2bib.no-ignore-sort,
+  name={\longargfmt{no\dhyphen ignore\dhyphen sort}},
+  user1={},
+  category={switch},
+  parent={commandlineoptionsgls2bib}
+}
+
+ at switch{switch.gls2bib.ignore-type,
+  name={\longargfmt{ignore\dhyphen type}},
+  user1={},
+  category={switch},
+  parent={commandlineoptionsgls2bib}
+}
+
+ at switch{switch.gls2bib.no-ignore-type,
+  name={\longargfmt{no\dhyphen ignore\dhyphen type}},
+  user1={},
+  category={switch},
+  parent={commandlineoptionsgls2bib}
+}
+
+ at switch{switch.gls2bib.split-on-type,
+  name={\longargfmt{split\dhyphen on\dhyphen type}},
+  symbol={\shortargfmt{t}},
+  user1={},
+  category={switch},
+  parent={commandlineoptionsgls2bib}
+}
+
+ at switch{switch.gls2bib.no-split-on-type,
+  name={\longargfmt{no\dhyphen split\dhyphen on\dhyphen type}},
+  user1={},
+  category={switch},
+  parent={commandlineoptionsgls2bib}
+}
+
+ at switch{switch.gls2bib.ignore-category,
+  name={\longargfmt{ignore\dhyphen category}},
+  user1={},
+  category={switch},
+  parent={commandlineoptionsgls2bib}
+}
+
+ at switch{switch.gls2bib.no-ignore-category,
+  name={\longargfmt{no\dhyphen ignore\dhyphen category}},
+  user1={},
+  category={switch},
+  parent={commandlineoptionsgls2bib}
+}
+
+ at switch{switch.converter.ignore-fields,
+  name={\longargfmt{ignore\dhyphen fields}},
+  symbol={\shortargfmt{f}},
+  user1={\meta{list}},
+  category={switch},
+  parent={commandlineoptionsconverter}
+}
+
+ at switch{switch.converter.no-ignore-fields,
+  name={\longargfmt{no\dhyphen ignore\dhyphen fields}},
+  category={switch},
+  parent={commandlineoptionsconverter}
+}
+
+ at switch{switch.converter.field-map,
+  name={\longargfmt{field\dhyphen map}},
+  symbol={\shortargfmt{m}},
+  user1={\meta{src=dest list}},
+  category={switch},
+  parent={commandlineoptionsconverter}
+}
+
+ at switch{switch.converter.no-field-map,
+  name={\longargfmt{no\dhyphen field\dhyphen map}},
+  category={switch},
+  parent={commandlineoptionsconverter}
+}
+
+ at switch{switch.converter.field-case,
+  name={\longargfmt{field\dhyphen case}},
+  user1={\meta{setting}},
+  category={switch},
+  parent={commandlineoptionsconverter}
+}
+
+ at switch{switch.gls2bib.internal-field-map,
+  name={\longargfmt{internal\dhyphen field\dhyphen map}},
+  user1={\meta{src=dest list}},
+  category={switch},
+  parent={commandlineoptionsgls2bib}
+}
+
+ at switch{switch.gls2bib.split-on-category,
+  name={\longargfmt{split\dhyphen on\dhyphen category}},
+  symbol={\shortargfmt{c}},
+  user1={},
+  category={switch},
+  parent={commandlineoptionsgls2bib}
+}
+
+ at switch{switch.gls2bib.no-split-on-category,
+  name={\longargfmt{no\dhyphen split\dhyphen on\dhyphen category}},
+  user1={},
+  category={switch},
+  parent={commandlineoptionsgls2bib}
+}
+
+ at switch{switch.converter.index-conversion,
+  name={\longargfmt{index\dhyphen conversion}},
+  symbol={\shortargfmt{i}},
+  category={switch},
+  user1={},
+  parent={commandlineoptionsconverter}
+}
+
+ at switch{switch.converter.no-index-conversion,
+  name={\longargfmt{no\dhyphen index\dhyphen conversion}},
+  category={switch},
+  user1={},
+  parent={commandlineoptionsconverter}
+}
+
+ at switch{switch.gls2bib.absorb-see,
+  name={\longargfmt{absorb\dhyphen see}},
+  category={switch},
+  user1={},
+  parent={commandlineoptionsgls2bib}
+}
+
+ at switch{switch.gls2bib.no-absorb-see,
+  name={\longargfmt{no\dhyphen absorb\dhyphen see}},
+  category={switch},
+  user1={},
+  parent={commandlineoptionsgls2bib}
+}
+
+ at switch{switch.datatool2bib.detect-symbols,
+  name={\longargfmt{detect\dhyphen symbols}},
+  category={switch},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.no-detect-symbols,
+  name={\longargfmt{no\dhyphen detect\dhyphen symbols}},
+  category={switch},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.numeric-locale,
+  name={\longargfmt{numeric\dhyphen locale}},
+  category={switch},
+  user1={\meta{lang-tag}},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.label,
+  name={\longargfmt{label}},
+  symbol={\shortargfmt{L}},
+  category={switch},
+  user1={\meta{column-key}},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.auto-label,
+  name={\longargfmt{auto\dhyphen label}},
+  symbol={\shortargfmt{a}},
+  category={switch},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.no-auto-label,
+  name={\longargfmt{no\dhyphen auto\dhyphen label}},
+  category={switch},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.auto-label-prefix,
+  name={\longargfmt{auto\dhyphen label\dhyphen prefix}},
+  category={switch},
+  user1={\meta{prefix}},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.read,
+  name={\longargfmt{read}},
+  symbol={\shortargfmt{r}},
+  category={switch},
+  user1={\meta{options}},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.no-read,
+  name={\longargfmt{no\dhyphen read}},
+  category={switch},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.setup,
+  name={\longargfmt{setup}},
+  category={switch},
+  user1={\meta{options}},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.save-datum,
+  name={\longargfmt{save\dhyphen datum}},
+  category={switch},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.no-save-datum,
+  name={\longargfmt{no\dhyphen save\dhyphen datum}},
+  category={switch},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.save-value,
+  name={\longargfmt{save\dhyphen value}},
+  category={switch},
+  user1={\meta{suffix}},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.no-save-value,
+  name={\longargfmt{no\dhyphen save\dhyphen value}},
+  category={switch},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.save-currency,
+  name={\longargfmt{save\dhyphen currency}},
+  category={switch},
+  user1={\meta{suffix}},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.no-save-currency,
+  name={\longargfmt{no\dhyphen save\dhyphen currency}},
+  category={switch},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.split,
+  name={\longargfmt{split}},
+  category={switch},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.no-split,
+  name={\longargfmt{no\dhyphen split}},
+  category={switch},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.adjust-gls,
+  name={\longargfmt{adjust\dhyphen gls}},
+  category={switch},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.no-adjust-gls,
+  name={\longargfmt{no\dhyphen adjust\dhyphen gls}},
+  category={switch},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.strip,
+  name={\longargfmt{strip}},
+  category={switch},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.no-strip,
+  name={\longargfmt{no\dhyphen strip}},
+  category={switch},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.dependency-field,
+  name={\longargfmt{dependency\dhyphen field}},
+  user1 = {\meta{field}},
+  category={switch},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.no-dependency-field,
+  name={\longargfmt{no\dhyphen dependency\dhyphen field}},
+  category={switch},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.strip-glsadd,
+  name={\longargfmt{strip\dhyphen glsadd}},
+  category={switch},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.no-strip-glsadd,
+  name={\longargfmt{no\dhyphen strip\dhyphen glsadd}},
+  category={switch},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.strip-acronym-font,
+  name={\longargfmt{strip\dhyphen acronym\dhyphen font}},
+  category={switch},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.no-strip-acronym-font,
+  name={\longargfmt{no\dhyphen strip\dhyphen acronym\dhyphen font}},
+  category={switch},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.strip-case-change,
+  name={\longargfmt{strip\dhyphen case\dhyphen change}},
+  category={switch},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at switch{switch.datatool2bib.no-strip-case-change,
+  name={\longargfmt{no\dhyphen strip\dhyphen case\dhyphen change}},
+  category={switch},
+  parent={commandlineoptionsdatatool2bib}
+}
+
+ at index{lettergroup,
+  name={letter group}
+}
+
+ at index{nonlettergroup,
+  name={non-letter group}
+}
+
+ at index{symbolgroup,
+  name={symbol group},
+  alias={nonlettergroup}
+}
+
+ at index{emptygroup,
+  name={empty group (unknown commands)},
+  text={empty group}
+}
+
+ at index{numbergroup,
+  name={number group}
+}
+
+ at index{datetimegroup,
+  name={date-time group}
+}
+
+ at index{dategroup,
+  name={date group}
+}
+
+ at index{timegroup,
+  name={time group}
+}
+
+ at index{customgroup,
+  name={custom group}
+}
+
+ at index{sub-group}
+ at index{hiergroup,
+ name={hierarchical group},
+ alias={sub-group}
+}
+ at index{smallgroup,
+ name={small group}
+}
+
+ at indexplural{group}
+ at index{groups.letter,
+ parent={group},
+ name={letter},
+ text={letter group},
+ alias={lettergroup}}
+ at index{groups.nonletter,
+ parent={group},
+ name={non-letter},
+ text={non-letter group},
+ alias={nonlettergroup}
+}
+ at index{groups.symbol,
+ parent={group},
+ name={symbol},
+ text={symbol group},
+ alias={symbolgroup}}
+ at index{groups.empty,
+ parent={group},
+ name={empty},
+ text={empty group},
+ alias={emptygroup}}
+ at index{groups.number,
+ parent={group},
+ name={number},
+ text={number group},
+ alias={numbergroup}}
+ at index{groups.datetime,
+ parent={group},
+ name={datetime},
+ text={datetime group},
+ alias={datetimegroup}}
+ at index{groups.date,
+ parent={group},
+ name={date},
+ text={date group},
+ alias={dategroup}}
+ at index{groups.time,
+ parent={group},
+ name={time},
+ text={time group},
+ alias={timegroup}}
+ at index{groups.custom,
+ parent={group},
+ name={custom},
+ text={custom group},
+ alias={customgroup}}
+ at index{groups.sub,
+ parent={group},
+ name={hierarchical},
+ text={hierarchical group},
+ alias={sub-group}}
+ at index{groups.small,
+ parent={group},
+ name={small},
+ text={small group},
+ alias={smallgroup}}
+
+ at index{localeprovider,
+  name={locale provider}
+}
+
+ at index{ignoredglossary,
+  name={ignored glossary},
+  plural={ignored glossaries}
+}
+
+ at index{ignoredrecord,
+  name={ignored record}
+}
+
+ at index{record,
+  seealso={ignoredrecord}
+}
+
+ at index{locationlist,
+  name = {location list}
+}
+
+ at index{range}
+ at index{explicit-range,
+ parent={range},
+ name={explicit},
+ text={explicit range}
+}
+ at index{implicit-range,
+ parent={range},
+ name={implicit},
+ text={implicit range}
+}
+ at index{interloper,parent={range}}
+ at index{locationrange,
+ parent={locationlist},
+ name={ranges},
+ alias={range}
+}
+
+ at index{postlinkhook,
+  name={post-link hook}
+}
+
+ at index{postnamehook,
+  name={post-name hook}
+}
+
+ at index{postdescriptionhook,
+  name={post-description hook}
+}
+
+ at index{languagexml,
+  name={language resource file (\extfmt{xml})}
+}
+
+ at xmltag{tag.page,
+  name={\xmltagfmt{tag.page}},
+  parent={languagexml}
+}
+
+ at xmltag{tag.pages,
+  name={\xmltagfmt{tag.pages}},
+  parent={languagexml}
+}
+
+ at xmltag{tag.passim,
+  name={\xmltagfmt{tag.passim}},
+  parent={languagexml}
+}
+
+ at xmltag{sentence.terminators,
+  name={\xmltagfmt{sentence.terminators}},
+  parent={languagexml}
+}
+
+ at xmltag{grouptitle.case.lc,
+  name={\xmltagfmt{grouptitle.case.}\meta{lc}},
+  parent={languagexml}
+}
+
+ at index{xmlsee,
+  name={XML resource file},
+  see={languagexml}
+}
+
+ at index{encoding}
+
+ at index{digraph}
+
+ at index{trigraph}
+
+ at index{primary}
+
+ at index{dual}
+
+ at index{secondary,
+ seealso={dual}}
+
+ at index{tertiary}
+
+ at index{non-ASCII}
+
+ at index{full-stop,
+  name={full stop (\code{.})},
+  text={full stop}
+}
+
+ at index{period,
+  alias={full-stop}
+}
+
+ at index{apostrophe,
+  name={apostrophe (\code{'})},
+  text={apostrophe}
+}
+
+ at index{resourceset,
+  name={resource set}
+}
+
+ at index{crossresourceref,
+  name={cross-resource reference}
+}
+
+ at index{locale}
+
+ at index{locale-resource,
+  parent={locale},
+  name={resource}
+}
+
+ at index{locale-doc,
+  parent={locale},
+  name={document}
+}
+
+ at index{locale-Java,
+  parent={locale},
+  name={Java}
+}
+
+ at index{firstuse,
+  name={first use}
+}
+
+ at index{subsequentuse,
+  name={subsequent use}
+}
+
+ at index{firstuseflag,
+  name={first use flag}
+}
+
+ at index{link-text,
+ name={link text}
+}
+
+ at index{parent-entry,
+  name={parent entry},
+  plural={parent entries}
+}
+
+ at index{child-entry,
+  name={child entry},
+  plural={child entries}
+}
+
+ at index{hierarchical-entry,
+  name={hierarchical entry},
+  plural={hierarchical entries}
+}
+
+ at index{robust}
+ at index{fragile}
+ at index{expandable}
+ at index{regular}
+ at index{non-regular}
+ at index{variant}
+ at index{homograph}
+ at index{progeny}
+ at index{progenitor}
+
+ at index{StackOverflowError,
+  name={\code{Stack\-Over\-flow\-Error}}
+}
+
+ at index{moving-argument,
+  name={moving argument}
+}
+
+ at index{uppercase,
+ name={upper case}
+}
+
+ at index{lowercase,
+ name={lower case}
+}
+
+ at index{titlecase,
+ name={title case}
+}
+
+ at index{sentencecase,
+ name={sentence case}
+}
+
+ at index{case-change,
+  name = {case-change},
+  seealso = {uppercase,lowercase,titlecase,sentencecase}
+}
+
+ at index{unicodecategories,
+  name={Unicode categories},
+  text={Unicode category},
+  plural={Unicode categories}
+}
+
+ at unicodecategory{numberdecimaldigit,
+  name={\unicodecategoryfmt{Number, Decimal Digit}},
+  parent={unicodecategories}
+}
+
+ at unicodecategory{separatorspace,
+  name={\unicodecategoryfmt{Separator, Space}},
+  parent={unicodecategories}
+}
+
+ at unicodecategory{letteruppercase,
+  name={\unicodecategoryfmt{Letter, Uppercase}},
+  parent={unicodecategories}
+}
+
+ at unicodecategory{letterlowercase,
+  name={\unicodecategoryfmt{Letter, Lowercase}},
+  parent={unicodecategories}
+}
+
+ at unicodecategory{lettertitlecase,
+  name={\unicodecategoryfmt{Letter, Titlecase}},
+  parent={unicodecategories}
+}
+
+ at unicodecategory{lettermodifier,
+  name={\unicodecategoryfmt{Letter, Modifier}},
+  parent={unicodecategories}
+}
+
+ at unicodecategory{letterother,
+  name={\unicodecategoryfmt{Letter, Other}},
+  parent={unicodecategories}
+}
+
+ at unicodecategory{punctuationclose,
+  name={\unicodecategoryfmt{Punctuation, Close}},
+  parent={unicodecategories}
+}
+
+ at unicodecategory{punctuationfinalquote,
+  name={\unicodecategoryfmt{Punctuation, Final quote}},
+  parent={unicodecategories}
+}
+
+ at unicodecategory{punctuationother,
+  name={\unicodecategoryfmt{Punctuation, Other}},
+  parent={unicodecategories}
+}
+
+ at unicodecategory{punctuationdash,
+  name={\unicodecategoryfmt{Punctuation, Dash}},
+  parent={unicodecategories}
+}
+
+ at texmfcnf{texmfcnf.openinany,
+  name={\texmfcnffmt{openin\_any}}
+}
+
+ at texmfcnf{texmfcnf.openoutany,
+  name={\texmfcnffmt{openout\_any}}
+}
+
+ at file{file.bib2gls-en.xml,
+  name={\filefmt{bib2gls-en.xml}}
+}
+
+ at file{file.bib2gls.sh,
+  name={\filefmt{bib2gls.sh}}
+}
+
+ at file{file.convertgls2bib.sh,
+  name={\filefmt{convert\-gls2bib.sh}}
+}
+
+ at file{file.datatool2bib.sh,
+  name={\filefmt{datatool2bib.sh}}
+}
+
+ at file{file.texparserlib.jar,
+  name={\filefmt{texparserlib.jar}}
+}
+
+ at file{file.bib2gls.jar,
+  name={\filefmt{bib2gls.jar}}
+}
+
+ at file{file.convertgls2bib.jar,
+  name={\filefmt{convert\-gls2bib.jar}}
+}
+
+ at file{file.datatool2bib.jar,
+  name={\filefmt{datatool2bib.jar}}
+}
+
+ at file{file.bib2gls.bat,
+  name={\filefmt{bib2gls.bat}}
+}
+
+ at file{file.xampl.bib,
+  name={\filefmt{xampl.bib}}
+}
+
+ at file{file.sample-dual.tex,
+  name={\filefmt{sample\dhyphen dual.tex}}
+}
+
+ at samplefile{file.no-interpret-preamble.bib,
+  name={\filefmt{no\dhyphen interpret\dhyphen preamble.bib}}
+}
+
+ at samplefile{file.interpret-preamble.bib,
+  name={\filefmt{interpret\dhyphen preamble.bib}}
+}
+
+ at samplefile{file.interpret-preamble2.bib,
+  name={\filefmt{interpret\dhyphen preamble2.bib}}
+}
+
+ at samplefile{file.people.bib,
+  name={\filefmt{people.bib}}
+}
+
+ at samplefile{file.sample-people.tex,
+  name={\filefmt{sample\dhyphen people.tex}}
+}
+
+ at samplefile{file.sample-authors.tex,
+  name={\filefmt{sample\dhyphen authors.tex}}
+}
+
+ at samplefile{file.sample-citations.tex,
+  name={\filefmt{sample\dhyphen citations.tex}}
+}
+
+ at samplefile{file.citations.bib,
+  name={\filefmt{citations.bib}}
+}
+
+ at samplefile{file.bacteria.bib,
+  name={\filefmt{bacteria.bib}}
+}
+
+ at samplefile{file.sample-bacteria.tex,
+  name={\filefmt{sample\dhyphen bacteria.tex}}
+}
+
+ at samplefile{file.chemicalformula.bib,
+  name={\filefmt{chemicalformula.bib}}
+}
+
+ at samplefile{file.sample-chemical.tex,
+  name={\filefmt{sample\dhyphen chemical.tex}}
+}
+
+ at samplefile{file.constants.bib,
+  name={\filefmt{constants.bib}}
+}
+
+ at samplefile{file.sample-hierarchical.tex,
+  name={\filefmt{sample\dhyphen hierarchical.tex}}
+}
+
+ at samplefile{file.sample-nested.tex,
+  name={\filefmt{sample\dhyphen nested.tex}}
+}
+
+ at samplefile{file.sample-constants.tex,
+  name={\filefmt{sample\dhyphen constants.tex}}
+}
+
+ at samplefile{file.baseunits.bib,
+  name={\filefmt{baseunits.bib}}
+}
+
+ at samplefile{file.derivedunits.bib,
+  name={\filefmt{derivedunits.bib}}
+}
+
+ at samplefile{file.sample-units1.tex,
+  name={\filefmt{sample-units1.tex}}
+}
+
+ at samplefile{file.sample-units2.tex,
+  name={\filefmt{sample-units2.tex}}
+}
+
+ at samplefile{file.sample-units3.tex,
+  name={\filefmt{sample-units3.tex}}
+}
+
+ at samplefile{file.books.bib,
+  name={\filefmt{books.bib}}
+}
+
+ at samplefile{file.films.bib,
+  name={\filefmt{films.bib}}
+}
+
+ at samplefile{file.sample-media.tex,
+  name={\filefmt{sample\dhyphen media.tex}}
+}
+
+ at samplefile{file.bigmathsymbols.bib,
+  name={\filefmt{bigmathsymbols.bib}}
+}
+
+ at samplefile{file.mathgreek.bib,
+  name={\filefmt{mathgreek.bib}}
+}
+
+ at samplefile{file.mathsrelations.bib,
+  name={\filefmt{mathsrelations.bib}}
+}
+
+ at samplefile{file.binaryoperators.bib,
+  name={\filefmt{binaryoperators.bib}}
+}
+
+ at samplefile{file.unaryoperators.bib,
+  name={\filefmt{unaryoperators.bib}}
+}
+
+ at samplefile{file.mathsobjects.bib,
+  name={\filefmt{mathsobjects.bib}}
+}
+
+ at samplefile{file.sample-msymbols.tex,
+  name={\filefmt{sample\dhyphen msymbols.tex}}
+}
+
+ at samplefile{file.sample-maths.tex,
+  name={\filefmt{sample\dhyphen maths.tex}}
+}
+
+ at samplefile{file.miscsymbols.bib,
+  name={\filefmt{miscsymbols.bib}}
+}
+
+ at samplefile{file.sample-textsymbols.tex,
+  name={\filefmt{sample\dhyphen textsymbols.tex}}
+}
+
+ at samplefile{file.sample-textsymbols2.tex,
+  name={\filefmt{sample\dhyphen textsymbols2.tex}}
+}
+
+ at samplefile{file.markuplanguages.bib,
+  name={\filefmt{markuplanguages.bib}}
+}
+
+ at samplefile{file.sample-markuplanguages.tex,
+  name={\filefmt{sample\dhyphen markuplanguages.tex}}
+}
+
+ at samplefile{file.usergroups.bib,
+  name={\filefmt{usergroups.bib}}
+}
+
+ at samplefile{file.sample-usergroups.tex,
+  name={\filefmt{sample\dhyphen usergroups.tex}}
+}
+
+ at samplefile{file.animals.bib,
+  name={\filefmt{animals.bib}}
+}
+
+ at samplefile{file.vegetables.bib,
+  name={\filefmt{vegetables.bib}}
+}
+
+ at samplefile{file.minerals.bib,
+  name={\filefmt{minerals.bib}}
+}
+
+ at samplefile{file.terms.bib,
+  name={\filefmt{terms.bib}}
+}
+
+ at samplefile{file.topics.bib,
+  name={\filefmt{topics.bib}}
+}
+
+ at samplefile{file.sample-multi1.tex,
+  name={\filefmt{sample\dhyphen multi1.tex}}
+}
+
+ at samplefile{file.sample-multi2.tex,
+  name={\filefmt{sample\dhyphen multi2.tex}}
+}
+
+ at glscommand{glshyperlink,
+  name={\csfmt{gls\-hyper\-link}},
+  user1={\oargm{link text}\margm{label}},
+  description={creates a hyperlink to the entry information in the
+   glossary},
+  topics={linkcommands,entryrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsxtrfielddolistloop,
+  name={\csfmt{gls\-xtr\-field\-do\-list\-loop}},
+  user1={\margm{label}\margm{field}},
+  description={iterates over the items the given field, which contains
+   an \styfmt{etoolbox} internal list},
+  topics={listcommands,loop,fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.12+},
+  seealso={glsxtrfieldforlistloop,glsxtrfieldifinlist,glsxtrfieldlistadd,listbreak},
+  category={command}
+}
+
+ at glscommand{glsxtrfieldforlistloop,
+  name={\csfmt{gls\-xtr\-field\-for\-list\-loop}},
+  user1={\margm{label}\margm{field}\margm{handler}},
+  description={iterates over the items the given field, which contains
+   an \styfmt{etoolbox} internal list, using the given handler},
+  topics={listcommands,loop,fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.29+},
+  seealso={glsxtrfielddolistloop,glsxtrfieldifinlist,glsxtrfieldlistadd,listbreak},
+  category={command}
+}
+
+ at glscommand{glsxtrfieldformatlist,
+  name={\csfmt{gls\-xtr\-field\-format\-list}},
+  user1={\margm{label}\margm{field}},
+  description={formats the items in the given field, which contains
+   an \styfmt{etoolbox} internal list, using the same handler as
+   \ics{DTLformatlist}},
+  topics={listcommands,loop,fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.42+},
+  seealso={glsxtrfieldforlistloop,glsxtrfielddolistloop,DTLformatlist,glsxtrfieldformatcsvlist},
+  category={command}
+}
+
+ at glscommand{glsxtrfieldformatcsvlist,
+  name={\csfmt{gls\-xtr\-field\-format\-csv\-list}},
+  user1={\margm{label}\margm{field}},
+  description={formats the items in the given field, which contains
+   a comma-separated list, using the same handler as
+   \ics{DTLformatlist}},
+  topics={listcommands,loop,fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.42+},
+  seealso={glsxtrfieldforlistloop,glsxtrfielddolistloop,DTLformatlist,glsxtrfieldformatlist},
+  category={command}
+}
+
+ at glscommand{glsfieldfetch,
+  name={\csfmt{gls\-field\-fetch}},
+  user1={\margm{label}\margm{field}\margm{cs}},
+  description={fetches the value of the given field for the given
+   label and stores it in the command \meta{cs}},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries} v4.16+},
+  category={command}
+}
+
+ at glscommand{glsxtrautoindexassignsort,
+  name={\csfmt{gls\-xtr\-auto\-index\-assign\-sort}},
+  user1={\margm{cs}\margm{label}},
+  description={assigns the sort value for \cs{index} when
+   using auto-indexing},
+  topics={hooks,indexing},
+  note={\styfmt{glossaries-extra} v1.16+},
+  category={command}
+}
+
+ at glscommand{glsxtrautoindexentry,
+  name={\csfmt{gls\-xtr\-auto\-index\-entry}},
+  user1={\margm{label}},
+  description={used for the actual value in \cs{index} when
+   using auto-indexing},
+  topics={hooks,indexing},
+  note={\styfmt{glossaries-extra} v1.16+},
+  category={command}
+}
+
+ at glscommand{glsseeformat,
+  name={\csfmt{gls\-see\-format}},
+  user1={\margm{tag}\margm{labels}\margm{location (ignored)}},
+  description={formats the entries identified in the comma separated
+   list of labels as a set of cross-references. This just does
+   the tag (emphasized) followed by \cs{glsseelist}\margm{labels}},
+  topics={formattingcommands,crossrefcommands,loclistcommands},
+  note={\styfmt{glossaries}},
+  seealso={glsseeitem,glsseeitemformat,glsseesep,glsseelastsep},
+  category={command}
+}
+
+ at glscommand{glsseeitem,
+  name={\csfmt{gls\-see\-item}},
+  user1={\margm{label}},
+  description={formats an element of the cross-reference list.
+   The default behaviour is to create a hyperlink (if enabled) to the 
+   referenced entry with the link text given by
+   \code{\cs{glsseeitemformat}\margm{label}}},
+  topics={formattingcommands,crossrefcommands,loclistcommands,linkcommands},
+  note={\styfmt{glossaries}},
+  seealso={glsseeformat,glsseeitemformat},
+  category={command}
+}
+
+ at glscommand{glsseefirstitem,
+  name={\csfmt{gls\-see\-first\-item}},
+  user1={\margm{label}},
+  description={as \cs{glsseeitem} but is used for the first label in 
+  the list. This just does \cs{glsseeitem} by default},
+  topics={formattingcommands,crossrefcommands,loclistcommands,linkcommands},
+  note={\styfmt{glossaries-extra} v1.47+},
+  seealso={glsseeformat,glsseeitemformat},
+  category={command}
+}
+
+ at glscommand{glsseeitemformat,
+  name={\csfmt{gls\-see\-item\-format}},
+  user1={\margm{label}},
+  description={formats an element of the cross-reference list.
+   With the base \styfmt{glossaries} package this just does
+   \code{\cs{glsentrytext}\margm{label}}. With
+   \styfmt{glossaries-extra} this uses either \cs{glsentryshort}
+   or \cs{glsentryname} depending on whether or not the
+   \field{short} field has been set},
+  topics={formattingcommands,crossrefcommands,loclistcommands},
+  note={\styfmt{glossaries} v3.0+},
+  seealso={glsseeformat,glsseeitem},
+  category={command}
+}
+
+ at glscommand{glsseesep,
+  name={\csfmt{gls\-see\-sep}},
+  description={the separator used between all but the last 
+  entries of a cross-reference list},
+  note={\styfmt{glossaries}},
+  topics={separatorcommands,crossrefcommands,loclistcommands},
+  seealso={glsseeformat,glsseelastsep},
+  category={command}
+}
+
+ at glscommand{glsseelastsep,
+  name={\csfmt{gls\-see\-last\-sep}},
+  description={the separator used between the penultimate and
+   ultimate entries of a cross-reference list},
+  topics={separatorcommands,crossrefcommands,loclistcommands},
+  note={\styfmt{glossaries}},
+  seealso={glsseeformat,glsseesep},
+  category={command}
+}
+
+ at glscommand{glsseelastoxfordsep,
+  name={\csfmt{gls\-see\-last\-oxford\-sep}},
+  description={used instead of \cs{glsseelastsep} if the list
+   contains three or more labels. This defaults to \cs{glsseelastsep}},
+  topics={separatorcommands,crossrefcommands,loclistcommands},
+  note={\styfmt{glossaries-extra} v1.47+},
+  seealso={glsseeformat,glsseesep},
+  category={command}
+}
+
+ at glscommand{glsxtruseseeformat,
+  name={\csfmt{gls\-xtr\-use\-see\-format}},
+  user1={\margm{tag}\margm{labels}},
+  description={formats the entries identified in the comma separated
+   list of labels as a set of cross-references},
+  topics={separatorcommands,crossrefcommands,loclistcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsxtrhiername,
+  name={\csfmt{gls\-xtr\-hier\-name}},
+  user1={\margm{label}},
+  description={Displays the hierarchical name for the entry
+   identified by \meta{label} with each level separated by
+   \cs{glsxtrhiernamesep}},
+  topics={formattingcommands,entryrefcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote\ v1.37+},
+  seealso={glsxtrhiernamesep},
+  category={command}
+}
+
+ at glscommand{glsxtrhiernamesep,
+  name={\csfmt{gls\-xtr\-hier\-name\-sep}},
+  description={Separator between hierarchical levels displayed with
+   \cs{glsxtrhiername} (and case-changing variants). This defaults
+   to \qt{\glsxtrhiernamesep} with the \styfmt{glossaries-extra}
+   package, but the \bibgls\ interpreter has a different definition
+   to assist sorting},
+  topics={separatorcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote\ v1.37+},
+  seealso={glsxtrhiername},
+  category={command}
+}
+
+ at glscommand{Glsxtrhiername,
+  name={\csfmt{Gls\-xtr\-hier\-name}},
+  user1={\margm{label}},
+  description={Displays the hierarchical name for the entry
+   identified by \meta{label} with each level separated by
+   \cs{glsxtrhiernamesep} where the top-most name has the
+   first letter converted to \idx{uppercase}},
+  topics={formattingcommands,entryrefcommands,casecommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote\ v1.37+},
+  seealso={glsxtrhiername,glsxtrhiernamesep},
+  category={command}
+}
+
+ at glscommand{GlsXtrhiername,
+  name={\csfmt{Gls\-Xtr\-hier\-name}},
+  user1={\margm{label}},
+  description={Displays the hierarchical name for the entry
+   identified by \meta{label} with each level separated by
+   \cs{glsxtrhiernamesep} where each name has the
+   first letter converted to \idx{uppercase}},
+  topics={formattingcommands,entryrefcommands,casecommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote\ v1.37+},
+  seealso={glsxtrhiername,glsxtrhiernamesep},
+  category={command}
+}
+
+ at glscommand{GLSxtrhiername,
+  name={\csfmt{GLS\-xtr\-hier\-name}},
+  user1={\margm{label}},
+  description={Displays the hierarchical name for the entry
+   identified by \meta{label} with each level separated by
+   \cs{glsxtrhiernamesep} where the top-most name is converted to \idx{uppercase}},
+  topics={formattingcommands,entryrefcommands,casecommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote\ v1.37+},
+  seealso={glsxtrhiername,glsxtrhiernamesep},
+  category={command}
+}
+
+ at glscommand{GLSXTRhiername,
+  name={\csfmt{GLS\-XTR\-hier\-name}},
+  user1={\margm{label}},
+  description={Displays the hierarchical name for the entry
+   identified by \meta{label} with each level separated by
+   \cs{glsxtrhiernamesep} where each name is converted 
+   to \idx{uppercase}},
+  topics={formattingcommands,entryrefcommands,casecommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote\ v1.37+},
+  seealso={glsxtrhiername,glsxtrhiernamesep},
+  category={command}
+}
+
+ at glscommand{glsextrapostnamehook,
+  name={\csfmt{gls\-extra\-post\-name\-hook}},
+  user1={\margm{label}},
+  description={additional category-independent code for the
+post-name hook},
+  topics={hooks},
+  note={\styfmt{glossaries-extra} v1.25+},
+  category={command}
+}
+
+ at glscommand{glsentrytext,
+  name={\csfmt{gls\-entry\-text}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{text} field},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsentrytext,
+  name={\csfmt{Gls\-entry\-text}},
+  user1={\margm{label}},
+  description={displays the value of the \field{text} field with 
+  the first letter converted to \idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsentryplural,
+  name={\csfmt{gls\-entry\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{plural} field},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsentryplural,
+  name={\csfmt{Gls\-entry\-plural}},
+  user1={\margm{label}},
+  description={displays the value of the
+    \field{plural} field with the first letter converted to
+\idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsentryfirst,
+  name={\csfmt{gls\-entry\-first}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{first} field},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsentryfirst,
+  name={\csfmt{Gls\-entry\-first}},
+  user1={\margm{label}},
+  description={displays the value of the
+    \field{first} field with the first letter converted to
+    \idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsentryfirstplural,
+  name={\csfmt{gls\-entry\-first\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{firstplural} field},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsentryfirstplural,
+  name={\csfmt{Gls\-entry\-first\-plural}},
+  user1={\margm{label}},
+  description={displays the value of the
+    \field{firstplural} field with the first letter converted to
+    \idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsentryname,
+  name={\csfmt{gls\-entry\-name}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{name} field},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsentryname,
+  name={\csfmt{Gls\-entry\-name}},
+  user1={\margm{label}},
+  description={displays the value of the
+    \field{name} field with the first character
+     converted to \idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsentrydesc,
+  name={\csfmt{gls\-entry\-desc}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{description} field},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsentrydescplural,
+  name={\csfmt{gls\-entry\-desc\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{descriptionplural} field},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsentrydesc,
+  name={\csfmt{Gls\-entry\-desc}},
+  user1={\margm{label}},
+  description={displays the value of the
+    \field{description} field with the first letter converted to
+    \idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsentrydescplural,
+  name={\csfmt{Gls\-entry\-desc\-plural}},
+  user1={\margm{label}},
+  description={displays the value of the
+    \field{descriptionplural} field with the first letter converted to
+    \idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsentrysymbol,
+  name={\csfmt{gls\-entry\-symbol}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{symbol} field},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsentrysymbol,
+  name={\csfmt{Gls\-entry\-symbol}},
+  user1={\margm{label}},
+  description={displays the value of the
+    \field{symbol} field with the first letter converted to
+\idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsentrysymbolplural,
+  name={\csfmt{gls\-entry\-symbol\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{symbolplural} field},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsentrysymbolplural,
+  name={\csfmt{Gls\-entry\-symbol\-plural}},
+  user1={\margm{label}},
+  description={displays the value of the
+    \field{symbolplural} field with the first letter converted to
+\idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsentrylong,
+  name={\csfmt{gls\-entry\-long}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{long} field 
+  without any formatting or indexing},
+  topics={fieldrefcommands,abbreviationcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsentrylongpl,
+  name={\csfmt{gls\-entry\-long\-pl}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{longplural} field 
+  without any formatting or indexing},
+  topics={fieldrefcommands,abbreviationcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsentrylong,
+  name={\csfmt{Gls\-entry\-long}},
+  user1={\margm{label}},
+  description={displays the value of the
+    \field{long} field without any formatting or indexing but 
+    with the first letter converted to \idx{uppercase}},
+  topics={fieldrefcommands,abbreviationcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsentrylongpl,
+  name={\csfmt{Gls\-entry\-long\-pl}},
+  user1={\margm{label}},
+  description={displays the value of the
+    \field{longplural} field without any formatting or indexing but 
+    with the first letter converted to \idx{uppercase}},
+  topics={fieldrefcommands,abbreviationcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsentryshort,
+  name={\csfmt{gls\-entry\-short}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{short} field without any formatting or indexing},
+  topics={fieldrefcommands,abbreviationcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsentryshortpl,
+  name={\csfmt{gls\-entry\-short\-pl}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{shortplural} field without any formatting or indexing},
+  topics={fieldrefcommands,abbreviationcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsentryshort,
+  name={\csfmt{Gls\-entry\-short}},
+  user1={\margm{label}},
+  description={displays the value of the
+    \field{short} field without any formatting or indexing but 
+    with the first letter converted to \idx{uppercase}},
+  topics={fieldrefcommands,abbreviationcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsentryshortpl,
+  name={\csfmt{Gls\-entry\-short\-pl}},
+  user1={\margm{label}},
+  description={displays the value of the
+    \field{shortplural} field without any formatting or indexing 
+    but with the first letter converted to \idx{uppercase}},
+  topics={fieldrefcommands,abbreviationcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsentryuseri,
+  name={\csfmt{gls\-entry\-useri}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{user1} field},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsentryuserii,
+  name={\csfmt{gls\-entry\-userii}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{user2} field},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsentryuseriii,
+  name={\csfmt{gls\-entry\-useriii}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{user3} field},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsentryuseriv,
+  name={\csfmt{gls\-entry\-useriv}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{user4} field},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsentryuserv,
+  name={\csfmt{gls\-entry\-userv}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{user5} field},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsentryuservi,
+  name={\csfmt{gls\-entry\-uservi}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{user6} field},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsentryuseri,
+  name={\csfmt{Gls\-entry\-useri}},
+  user1={\margm{label}},
+  description={displays the value of the
+    \field{user1} field with the first letter converted to
+\idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsentryuserii,
+  name={\csfmt{Gls\-entry\-userii}},
+  user1={\margm{label}},
+  description={displays the value of the
+    \field{user2} field with the first letter converted to
+\idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsentryuseriii,
+  name={\csfmt{Gls\-entry\-useriii}},
+  user1={\margm{label}},
+  description={displays the value of the
+    \field{user3} field with the first letter converted to
+\idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsentryuseriv,
+  name={\csfmt{Gls\-entry\-useriv}},
+  user1={\margm{label}},
+  description={displays the value of the
+    \field{user4} field with the first letter converted to
+\idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsentryuserv,
+  name={\csfmt{Gls\-entry\-userv}},
+  user1={\margm{label}},
+  description={displays the value of the
+    \field{user5} field with the first letter converted to
+\idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsentryuservi,
+  name={\csfmt{Gls\-entry\-uservi}},
+  user1={\margm{label}},
+  description={displays the value of the
+    \field{user6} field with the first letter converted to
+\idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsaccessname,
+  name={\csfmt{gls\-access\-name}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{name} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentryname})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccessname,
+  name={\csfmt{Gls\-access\-name}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{name} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentryname})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsaccesstext,
+  name={\csfmt{gls\-access\-text}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{text} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentrytext})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccesstext,
+  name={\csfmt{Gls\-access\-text}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{text} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentrytext})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsaccessplural,
+  name={\csfmt{gls\-access\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{plural} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentryplural})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccessplural,
+  name={\csfmt{Gls\-access\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{plural} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentryplural})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsaccessfirst,
+  name={\csfmt{gls\-access\-first}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{first} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentryfirst})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccessfirst,
+  name={\csfmt{Gls\-access\-first}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{first} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentryfirst})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsaccessfirstplural,
+  name={\csfmt{gls\-access\-first\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{firstplural} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentryfirstplural})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccessfirstplural,
+  name={\csfmt{Gls\-access\-first\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{firstplural} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentryfirstplural})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsaccesssymbol,
+  name={\csfmt{gls\-access\-symbol}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{symbol} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentrysymbol})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccesssymbol,
+  name={\csfmt{Gls\-access\-symbol}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{symbol} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentrysymbol})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsaccesssymbolplural,
+  name={\csfmt{gls\-access\-symbol\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{symbolplural} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentrysymbolplural})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccesssymbolplural,
+  name={\csfmt{Gls\-access\-symbol\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{symbolplural} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentrysymbolplural})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsaccessdesc,
+  name={\csfmt{gls\-access\-desc}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{description} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentrydesc})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccessdesc,
+  name={\csfmt{Gls\-access\-desc}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{description} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentrydesc})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsaccessdescplural,
+  name={\csfmt{gls\-access\-desc\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{descriptionplural} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentrydescplural})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccessdescplural,
+  name={\csfmt{Gls\-access\-desc\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{descriptionplural} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentrydescplural})},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsaccessshort,
+  name={\csfmt{gls\-access\-short}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{short} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentryshort})},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccessshort,
+  name={\csfmt{Gls\-access\-short}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{short} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentryshort})},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsaccessshortpl,
+  name={\csfmt{gls\-access\-shortpl}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{shortplural} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentryshortpl})},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccessshortpl,
+  name={\csfmt{Gls\-access\-shortpl}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{shortplural} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentryshortpl})},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsaccesslong,
+  name={\csfmt{gls\-access\-long}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{long} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentrylong})},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccesslong,
+  name={\csfmt{Gls\-access\-long}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{long} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentrylong})},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsaccesslongpl,
+  name={\csfmt{gls\-access\-longpl}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{longplural} field with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{glsentrylongpl})},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{Glsaccesslongpl,
+  name={\csfmt{Gls\-access\-longpl}},
+  user1={\margm{label}},
+  description={expands to the value of the
+    \field{longplural} field with the first letter converted to
+    \idx{uppercase} and with the accessibility support 
+    for that field, if provided (otherwise behaves the same as
+    \cs{Glsentrylongpl})},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsxtrentryparentname,
+  name={\csfmt{gls\-xtr\-entry\-parent\-name}},
+  user1={\margm{label}},
+  description={expands to the entry's parent's name},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote\ v1.39+},
+  category={command}
+}
+
+ at glscommand{glsentryprefix,
+  name={\csfmt{gls\-entry\-prefix}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{prefix} field},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{glsentryprefixplural,
+  name={\csfmt{gls\-entry\-prefix\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{prefixplural} field},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{glsentryprefixfirst,
+  name={\csfmt{gls\-entry\-prefix\-first}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{prefixfirst} field},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{glsentryprefixfirstplural,
+  name={\csfmt{gls\-entry\-prefix\-first\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{prefixfirstplural} field},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{Glsentryprefix,
+  name={\csfmt{Gls\-entry\-prefix}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{prefix} field
+  with the first letter converted to \idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{Glsentryprefixplural,
+  name={\csfmt{Gls\-entry\-prefix\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{prefixplural} field
+  with the first letter converted to \idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{Glsentryprefixfirst,
+  name={\csfmt{Gls\-entry\-prefix\-first}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{prefixfirst} field
+  with the first letter converted to \idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{Glsentryprefixfirstplural,
+  name={\csfmt{Gls\-entry\-prefix\-first\-plural}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{prefixfirstplural} field
+  with the first letter converted to \idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{glssetcategoryattribute,
+  name={\csfmt{gls\-set\-cat\-e\-gory\-at\-tribute}},
+  user1={\margm{category}\margm{attribute}\margm{value}},
+  description={sets the value of the attribute for the given
+category},
+  topics={assigncommands,catattrcommands},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{glsentryaccess,
+  name={\csfmt{gls\-entry\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{access} field},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsentrytextaccess,
+  name={\csfmt{gls\-entry\-text\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{textaccess} field},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsentryfirstaccess,
+  name={\csfmt{gls\-entry\-first\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{firstaccess} field},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsentrypluralaccess,
+  name={\csfmt{gls\-entry\-plural\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{pluralaccess} field},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsentryfirstpluralaccess,
+  name={\csfmt{gls\-entry\-first\-plural\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{firstpluralaccess} field},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsentrysymbolaccess,
+  name={\csfmt{gls\-entry\-symbol\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{symbolaccess} field},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsentrysymbolpluralaccess,
+  name={\csfmt{gls\-entry\-symbol\-plural\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{symbolpluralaccess} field},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsentrydescaccess,
+  name={\csfmt{gls\-entry\-desc\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{descriptionaccess} field},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsentrydescpluralaccess,
+  name={\csfmt{gls\-entry\-desc\-plural\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{descriptionpluralaccess} field},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsentryshortaccess,
+  name={\csfmt{gls\-entry\-short\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{shortaccess} field},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsentryshortpluralaccess,
+  name={\csfmt{gls\-entry\-short\-plural\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{shortpluralaccess} field},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsentrylongaccess,
+  name={\csfmt{gls\-entry\-long\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{longaccess} field},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsentrylongpluralaccess,
+  name={\csfmt{gls\-entry\-long\-plural\-access}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{longpluralaccess} field},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsnameaccessdisplay,
+  name={\csfmt{gls\-name\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentryaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glstextaccessdisplay,
+  name={\csfmt{gls\-text\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentrytextaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glspluralaccessdisplay,
+  name={\csfmt{gls\-plural\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentrypluralaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsfirstaccessdisplay,
+  name={\csfmt{gls\-first\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentryfirstaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsfirstpluralaccessdisplay,
+  name={\csfmt{gls\-first\-plural\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentryfirstpluralaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glssymbolaccessdisplay,
+  name={\csfmt{gls\-symbol\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentrysymbolaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glssymbolpluralaccessdisplay,
+  name={\csfmt{gls\-symbol\-plural\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentrysymbolpluralaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsdescriptionaccessdisplay,
+  name={\csfmt{gls\-descrip\-tion\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentrydescaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsdescriptionpluralaccessdisplay,
+  name={\csfmt{gls\-descrip\-tion\-plural\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentrydescpluralaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsshortaccessdisplay,
+  name={\csfmt{gls\-short\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentryshortaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsshortpluralaccessdisplay,
+  name={\csfmt{gls\-short\-plural\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentryshortpluralaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glslongaccessdisplay,
+  name={\csfmt{gls\-long\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentrylongaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glslongpluralaccessdisplay,
+  name={\csfmt{gls\-long\-plural\-access\-display}},
+  user1={\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\cs{glsentrylongpluralaccess}\margm{label}}},
+  topics={fieldrefcommands,access-support,abbreviationcommands},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsaccessdisplay,
+  name={\csfmt{gls\-access\-display}},
+  user1={\margm{field}\margm{text}\margm{label}},
+  description={displays \meta{text} with the accessibility support
+   provided by \code{\csfmt{glsentry\meta{field}access}\margm{label}}},
+  topics={fieldrefcommands,access-support},
+  note={\styfmt{glossaries-access}},
+  category={command}
+}
+
+ at glscommand{glsxtrpostlinkAddDescOnFirstUse,
+  name={\csfmt{gls\-xtr\-post\-link\-Add\-Desc\-On\-First\-Use}},
+  description={only for use in the post-link hooks,
+   this appends a space and the value of the 
+   \field{description} field in parentheses
+   if the entry that was just referenced was used for the
+   first time},
+  topics={hooks},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{glsxtrpostlinkAddSymbolOnFirstUse,
+  name={\csfmt{gls\-xtr\-post\-link\-Add\-Symbol\-On\-First\-Use}},
+  description={only for use in the post-link hooks,
+   this appends a space and the value of the 
+   \field{symbol} field in parentheses
+   if the entry that was just referenced was used for the
+   first time and has the \field{symbol} field set},
+  topics={hooks},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{glsxtrpostlinkAddSymbolDescOnFirstUse,
+  name={\csfmt{gls\-xtr\-post\-link\-Add\-Symbol\-Desc\-On\-First\-Use}},
+  description={only for use in the post-link hooks, if the 
+   entry that was just referenced was used for the first time,
+   this appends a space and, in parentheses, the value of the 
+   \field{symbol} field (if set)
+   followed by the value of the \field{description} field},
+  topics={hooks},
+  note={\styfmt{glossaries-extra} v1.31+},
+  category={command}
+}
+
+ at glscommand{glspluralsuffix,
+  name={\csfmt{gls\-plural\-suffix}},
+  user1={},
+  description={the suffix used to construct the default plural},
+  topics={fixedtextcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{acrpluralsuffix,
+  name={\csfmt{acr\-plural\-suffix}},
+  user1={},
+  description={the suffix used to construct the default plural for
+   the short form of acronyms using the base \sty{glossaries}
+   package's acronym mechanism (not used with the
+   \sty{glossaries-extra} enhanced abbreviation mechanism)},
+  topics={fixedtextcommands,abbreviationcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{abbrvpluralsuffix,
+  name={\csfmt{abbrv\-plural\-suffix}},
+  user1={},
+  description={the style sensitive suffix used to construct the 
+   default plural for the short form of abbreviations},
+  topics={fixedtextcommands,abbreviationcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  seealso={glsxtrabbrvpluralsuffix},
+  category={command}
+}
+
+ at abbrvstylecommand{glsxtrabbrvpluralsuffix,
+  name={\csfmt{gls\-xtr\-abbrv\-plural\-suffix}},
+  user1={},
+  description={the default suffix used to construct the plural for
+   the short form of abbreviations. This just uses
+   \cs{glspluralsuffix}. If you don't want a plural suffix, you can
+   use the \catattr{noshortplural} attribute},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  topics={abbrstyle.long-short,abbrstyle.short-long,abbrstyle.short-footnote,abbrstyle.short-postfootnote,abbrstyle.short-nolong,abbrstyle.nolong-short,abbrstyle.nolong-short-noreg,abbrstyle.short-nolong-desc,abbrstyle.long-noshort-desc,abbrstyle.long-noshort-desc-noreg,abbrstyle.long-hyphen-noshort-desc-noreg,abbrstyle.long-hyphen-noshort-noreg,abbrstyle.long-noshort,abbrstyle.long-noshort-noreg,abbrstyle.long-short-desc},
+  category={command}
+}
+
+ at glscommand{glsdefpostlink,
+  name={\csfmt{gls\-def\-post\-link}},
+  user1={\margm{category}\margm{definition}},
+  description={define the post-link hook 
+  \cs{glsxtrpostlinkcategory} for the given category},
+  topics={hooks,providingcommands},
+  note={\styfmt{glossaries-extra} v1.31+},
+  category={command}
+}
+
+ at glscommand{glsdefpostname,
+  name={\csfmt{gls\-def\-post\-name}},
+  user1={\margm{category}\margm{definition}},
+  description={define the post-name hook 
+  \cs{glsxtrpostnamecategory} for the given category},
+  topics={hooks,providingcommands},
+  note={\styfmt{glossaries-extra} v1.31+},
+  category={command}
+}
+
+ at glscommand{glsdefpostdesc,
+  name={\csfmt{gls\-def\-post\-desc}},
+  user1={\margm{category}\margm{definition}},
+  description={define the post-description hook
+  \csfmt{glsxtrpostdesc}\meta{category} for the given category},
+  topics={hooks,providingcommands},
+  note={\styfmt{glossaries-extra} v1.31+},
+  category={command}
+}
+
+ at glscommand{glsxtrifwasfirstuse,
+  name={\csfmt{glsxtr\-if\-was\-first\-use}},
+  user1={\margm{true}\margm{false}},
+  description={only for use in the post-link hooks this
+  tests if the entry just referenced was used for the first time},
+  topics={hooks,conditional},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{ifglsused,
+  name={\csfmt{if\-gls\-used}},
+  user1={\margm{label}\margm{true}\margm{false}},
+  description={does \meta{true} if the entry given by \meta{label} has been
+  used, \meta{false} if the entry hasn't been used and neither
+  if the entry doesn't exist (an error or warning message will
+  occur and ?? will appear in the document).
+  This command is not for use in the post-link hooks},
+  topics={conditional,entryrefcommands},
+  note={\styfmt{glossaries}},
+  seealso={GlsXtrIfUnusedOrUndefined,glsxtrifwasfirstuse},
+  category={command}
+}
+
+ at glscommand{GlsXtrIfUnusedOrUndefined,
+  name={\csfmt{Gls\-Xtr\-If\-Un\-used\-Or\-Un\-defined}},
+  user1={\margm{label}\margm{true}\margm{false}},
+  description={does \meta{true} if the entry given by \meta{label}
+hasn't been
+  used or is undefined, otherwise it does \meta{false}.
+  This command is not for use in the post-link hooks},
+  topics={conditional},
+  note={\styfmt{glossaries-extra} v1.34+},
+  seealso={ifglsused,glsxtrifwasfirstuse},
+  category={command}
+}
+
+ at glscommand{GlsXtrLocationField,
+  name={\csfmt{GlsXtrLocationField}},
+  user1={},
+  description={expands to the internal name of the field storing the
+location list, defaulting to \field{location}},
+  topics={fieldrefcommands,loclistcommands},
+  note={\styfmt{glossaries-extra} v1.37+},
+  category={command}
+}
+
+ at glscommand{glslabel,
+  name={\csfmt{glslabel}},
+  user1={},
+  description={only for use in the post-link hooks, this
+  expands to the label of the entry that was last referenced},
+  topics={hooks},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glscurrententrylabel,
+  name={\csfmt{gls\-current\-entry\-label}},
+  user1={},
+  description={only for use in the glossary, such as in the style or
+in the post-name or post-description hooks, this expands to the
+label of the current entry},
+  topics={hooks},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glscurrentfieldvalue,
+  name={\csfmt{gls\-current\-field\-value}},
+  user1={},
+  description={only for use in the \meta{true} part of
+\cs{ifglshasfield} or \cs{glsxtrifhasfield}, this expands to the
+field value},
+  topics={conditional},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsentrytitlecase,
+  name={\csfmt{gls\-entry\-title\-case}},
+  user1={\margm{entry label}\margm{field label}},
+  description={fetches the given field and applies
+  \ics{capitalisewords} to it},
+  topics={casecommands,fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote\ v4.22+},
+  category={command}
+}
+
+ at command{capitalisewords,
+  name={\csfmt{capitalise\-words}},
+  user1={\margm{text}},
+  description={converts the first letter of each word to
+  \idx{uppercase} using \ics{makefirstuc}},
+  note={\styfmt{mfirstuc}\texparserdefnote\ v1.06+},
+  category={command}
+}
+
+ at command{MFUnocap,
+  name={\csfmt{MFU\-no\-cap}},
+  user1={\margm{word}},
+  description={identifies \meta{word} as one that
+   should not have its case-changed by \ics{capitalisewords}
+   unless it occurs at the start},
+  note={\styfmt{mfirstuc}\texparserdefnote\ v1.09+},
+  category={command}
+}
+
+ at command{MFUwordbreak,
+  name={\csfmt{MFU\-word\-break}},
+  user1={\margm{punctuation}},
+  description={if \idx{capitalisewords} contains punctuation that
+   should be treated as a word break then \meta{punctuation} 
+   should be encapsulated with this command to apply the case-change
+   to the following character},
+  note={\styfmt{mfirstuc} v2.07+\texparserdefnote},
+  category={command}
+}
+
+ at command{MFUskippunc,
+  name={\csfmt{MFU\-skip\-punc}},
+  user1={\margm{punctuation}},
+  description={if \idx{makefirstuc} starts with a punctuation
+  character it should be encapsulated with this command to skip
+  \meta{punctuation} and apply the case-change to the following
+   character},
+  note={\styfmt{mfirstuc} v2.07+\texparserdefnote},
+  category={command}
+}
+
+ at command{MFUblocker,
+  name={\csfmt{MFU\-block\-er}},
+  user1={\margm{cs}},
+  description={identifies \meta{cs} as a command that, if it occurs
+   at the start of the argument of \idx{makefirstuc}, it should prevent
+   any case-change},
+  note={\styfmt{mfirstuc} v2.08+\texparserdefnote},
+  category={command}
+}
+
+ at command{MFUexcl,
+  name={\csfmt{MFU\-excl}},
+  user1={\margm{cs}},
+  description={identifies \meta{cs} as a command whose argument should
+   not have its case changed},
+  note={\styfmt{mfirstuc} v2.08+\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsxtrusefield,
+  name={\csfmt{gls\-xtr\-use\-field}},
+  user1={\margm{entry label}\margm{field label}},
+  description={expands to the value of the given field for the given
+   entry},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote\ v1.12+},
+  category={command}
+}
+
+ at glscommand{Glsxtrusefield,
+  name={\csfmt{Gls\-xtr\-use\-field}},
+  user1={\margm{entry label}\margm{field label}},
+  description={like \cs{glsxtrusefield} but converts the first
+   letter to \idx!{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote\ v1.12+},
+  category={command}
+}
+
+ at glscommand{GLSxtrusefield,
+  name={\csfmt{GLS\-xtr\-use\-field}},
+  user1={\margm{entry label}\margm{field label}},
+  description={as \cs{glsxtrusefield} but converts the value to
+  \idx{uppercase}},
+  topics={fieldrefcommands,casecommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote\ v1.37+},
+  category={command}
+}
+
+ at glscommand{GlsXtrSetField,
+  name={\csfmt{Gls\-Xtr\-Set\-Field}},
+  user1={\margm{entry label}\margm{field label}\margm{value}},
+  description={assigns the given \meta{value} to the field
+   identified by \meta{field label} for the
+   entry identified by \meta{entry label}},
+  topics={assigncommands},
+  note={\styfmt{glossaries-extra} v1.12+},
+  category={command}
+}
+
+ at glscommand{xGlsXtrSetField,
+  name={\csfmt{xGls\-Xtr\-Set\-Field}},
+  user1={\margm{entry label}\margm{field label}\margm{value}},
+  description={globally assigns the (protected) full expansion of the given \meta{value} to the field
+   identified by \meta{field label} for the
+   entry identified by \meta{entry label}},
+  topics={assigncommands},
+  note={\styfmt{glossaries-extra} v1.12+},
+  category={command}
+}
+
+ at glscommand{glsxtrapptocsvfield,
+  name={\csfmt{gls\-xtr\-app\-to\-csv\-field}},
+  user1={\margm{entry label}\margm{field label}\margm{value}},
+  description={appends a comma followed by \meta{value} to the given
+  field for the given entry, it that field has already been set,
+  otherwise it sets the field to just \meta{value} (there's no check
+  for the existence of either the entry or the field)},
+  topics={assigncommands},
+  note={\styfmt{glossaries-extra} v1.47+},
+  category={command}
+}
+
+ at glscommand{glsxtrifhasfield,
+  name={\csfmt{gls\-xtr\-if\-has\-field}},
+  user1={\margm{field label}\margm{entry label}\margm{true}\margm{false}},
+  description={tests if the given entry has the given \emph{internal} field set
+   (defined and not empty)
+   without testing if the entry exists and adds implicit scoping
+   to \meta{true} and \meta{false}},
+  topics={conditional,fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.19+\texparserdefnote},
+  seealso={GlsXtrIfFieldUndef},
+  category={command}
+}
+
+ at glscommand{glsxtrifhasfield*,
+  name={\csfmt{gls\-xtr\-if\-has\-field*}},
+  user1={\margm{field label}\margm{entry label}\margm{true}\margm{false}},
+  description={tests if the given entry has the given field set
+   (defined and not empty)
+   without testing if the entry exists and without introducing
+   an implicit scope},
+  topics={conditional,fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.19+\texparserdefnote},
+  seealso={GlsXtrIfFieldUndef},
+  category={command}
+}
+
+ at glscommand{ifglsfieldvoid,
+  name={\csfmt{if\-gls\-field\-void}},
+  user1={\margm{field label}\margm{entry label}\margm{true}\margm{false}},
+  description={expands to \meta{true} if the given entry doesn't
+exist, or exists but doesn't have the field (identified by its
+internal field label) defined or does have the field defined but the
+field is empty. Otherwise expands to \meta{false}. This is
+essentially like \gls{GlsXtrIfFieldUndef} but also
+tests for an empty value},
+  topics={conditional,fieldrefcommands},
+  note={\styfmt{glossaries} v4.50+\texparserdefnote},
+  seealso={GlsXtrIfFieldUndef},
+  category={command}
+}
+
+ at glscommand{GlsXtrIfFieldUndef,
+  name={\csfmt{Gls\-Xtr\-If\-Field\-Undef}},
+  user1={\margm{field label}\margm{entry label}\margm{true}\margm{false}},
+  description={tests if the given field (identified by its
+internal field label) isn't defined for the given
+   entry, which may also not exist},
+  topics={conditional,fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.23+},
+  category={command},
+  seealso={ifglsfieldvoid},
+}
+
+ at glscommand{GlsXtrIfFieldEqStr,
+  name={\csfmt{Gls\-Xtr\-If\-Field\-Eq\-Str}},
+  user1={\margm{field label}\margm{entry label}\margm{text}\margm{true}\margm{false}},
+  description={tests if the given field value is the same as
+   \meta{text} for the given entry, which may not exist. The unstarred
+form adds implicit grouping. The starred form (new to v1.39)
+doesn't},
+  topics={conditional,fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.21+\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{GlsXtrIfFieldEqXpStr,
+  name={\csfmt{Gls\-Xtr\-If\-Field\-Eq\-Xp\-Str}},
+  user1={\margm{field label}\margm{entry label}\margm{text}\margm{true}\margm{false}},
+  description={like \cs{GlsXtrIfFieldEqStr} but first (protected)
+fully expands \meta{text} (but not the field value). The unstarred
+form adds implicit grouping. The starred form (new to v1.39)
+doesn't},
+  topics={conditional,fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.31+\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{GlsXtrIfXpFieldEqXpStr,
+  name={\csfmt{Gls\-Xtr\-If\-Xp\-Field\-Eq\-Xp\-Str}},
+  user1={\margm{field label}\margm{entry label}\margm{text}\margm{true}\margm{false}},
+  description={like \cs{GlsXtrIfFieldEqStr} but first (protected)
+fully expands both the field value and \meta{text}. The unstarred
+form adds implicit grouping. The starred form (new to v1.39)
+doesn't},
+  topics={conditional,fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.31+\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{ifglshasfield,
+  name={\csfmt{if\-gls\-has\-field}},
+  user1={\margm{field label}\margm{entry label}\margm{true}\margm{false}},
+  description={tests if the given entry, which must be defined, has the 
+   given field set to a non-empty value. This is implemented in
+   \bibgls\ in the same way as \cs{glsxtrifhasfield*}},
+  note={\styfmt{glossaries}\texparserdefnote},
+  topics={conditional,fieldrefcommands},
+  seealso={glsxtrifhasfield,GlsXtrIfFieldUndef},
+  category={command}
+}
+
+ at glscommand{ifglshassymbol,
+  name={\csfmt{if\-gls\-has\-symbol}},
+  user1={\margm{entry label}\margm{true}\margm{false}},
+  description={tests if the given entry, which must be defined, has the 
+   \field{symbol} field set to value that's not empty and not
+     \csfmt{relax}},
+  topics={conditional,fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  seealso={ifglshasdesc,glsxtrifhasfield,GlsXtrIfFieldUndef},
+  category={command}
+}
+
+ at glscommand{ifglshasdesc,
+  name={\csfmt{if\-gls\-has\-desc}},
+  user1={\margm{entry label}\margm{true}\margm{false}},
+  description={tests if the given entry, which must be defined, has the 
+   \field{description} field set},
+  topics={conditional,fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  seealso={ifglshassymbol,ifglshasdescsuppressed},
+  category={command}
+}
+
+ at glscommand{ifglshasdescsuppressed,
+  name={\csfmt{if\-gls\-has\-suppressedesc}},
+  user1={\margm{entry label}\margm{true}\margm{false}},
+  description={tests if the given entry, which must be defined, has the 
+   \field{description} field set to \cs{nopostdesc}},
+  topics={conditional,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  seealso={ifglshasdesc},
+  category={command}
+}
+
+ at glscommand{ifglshasparent,
+  name={\csfmt{if\-gls\-has\-parent}},
+  user1={\margm{entry label}\margm{true}\margm{false}},
+  description={tests if the given entry, which must be defined, has the 
+   \field{parent} field set},
+  topics={conditional,fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{ifglshaschildren,
+  name={\csfmt{if\-gls\-has\-children}},
+  user1={\margm{entry label}\margm{true}\margm{false}},
+  description={tests if the given entry, which must be defined, has
+  child entries. This method is inefficient as it has to
+  iterate over all defined entries to determine which ones
+  have \meta{entry label} as the value of the \field{parent}
+  field. With \bibgls, a more efficient approach is to
+  use \csopt{save-child-count} and test the value of
+  the \field{childcount} field. The \TeX\ parser library recognises
+  this command and will simply use the child count (regardless of
+  whether or not the child count is saved)},
+  topics={conditional,fieldrefcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{ifglshasshort,
+  name={\csfmt{if\-gls\-has\-short}},
+  user1={\margm{entry label}\margm{true}\margm{false}},
+  description={tests if the given entry, which must be defined, has the 
+   \field{short} field set},
+  topics={conditional,fieldrefcommands,abbreviationcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{ifglshaslong,
+  name={\csfmt{if\-gls\-has\-long}},
+  user1={\margm{entry label}\margm{true}\margm{false}},
+  description={tests if the given entry, which must be defined, has the 
+   \field{long} field set},
+  topics={conditional,fieldrefcommands,abbreviationcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{ifglshasprefix,
+  name={\csfmt{if\-gls\-has\-prefix}},
+  user1={\margm{entry label}\margm{true}\margm{false}},
+  description={tests if the given entry, which must be defined, has the 
+   \field{prefix} field set to value that's not empty},
+  topics={conditional,fieldrefcommands},
+  note={\styfmt{glossaries-prefix}},
+  seealso={ifglshasdesc,glsxtrifhasfield,GlsXtrIfFieldUndef},
+  category={command}
+}
+
+ at glscommand{ifglshasprefixplural,
+  name={\csfmt{if\-gls\-has\-prefix\-plural}},
+  user1={\margm{entry label}\margm{true}\margm{false}},
+  description={tests if the given entry, which must be defined, has the 
+   \field{prefixplural} field set to value that's not empty},
+  topics={conditional,fieldrefcommands},
+  note={\styfmt{glossaries-prefix}},
+  seealso={ifglshasdesc,glsxtrifhasfield,GlsXtrIfFieldUndef},
+  category={command}
+}
+
+ at glscommand{ifglshasprefixfirst,
+  name={\csfmt{if\-gls\-has\-prefix\-first}},
+  user1={\margm{entry label}\margm{true}\margm{false}},
+  description={tests if the given entry, which must be defined, has the 
+   \field{prefixfirst} field set to value that's not empty},
+  topics={conditional,fieldrefcommands},
+  note={\styfmt{glossaries-prefix}},
+  seealso={ifglshasdesc,glsxtrifhasfield,GlsXtrIfFieldUndef},
+  category={command}
+}
+
+ at glscommand{ifglshasprefixfirstplural,
+  name={\csfmt{if\-gls\-has\-prefix\-first\-plural}},
+  user1={\margm{entry label}\margm{true}\margm{false}},
+  description={tests if the given entry, which must be defined, has the 
+   \field{prefixfirstplural} field set to value that's not empty},
+  topics={conditional,fieldrefcommands},
+  note={\styfmt{glossaries-prefix}},
+  seealso={ifglshasdesc,glsxtrifhasfield,GlsXtrIfFieldUndef},
+  category={command}
+}
+
+ at glscommand{ifglsfieldeq,
+  name={\csfmt{if\-gls\-field\-eq}},
+  user1={\margm{entry label}\margm{field label}\margm{string}\margm{true}\margm{false}},
+  description={tests if the given entry has the 
+   given field value equal to \meta{string}, where \meta{field label}
+   is the internal field label (not the key name). No expansion is
+   performed in the test (which just uses \cs{ifcsstring})},
+  topics={conditional,fieldrefcommands},
+  note={\styfmt{glossaries} v4.16+\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{ifglsfielddefeq,
+  name={\csfmt{if\-gls\-field\-def\-eq}},
+  user1={\margm{entry label}\margm{field label}\margm{cs}\margm{true}\margm{false}},
+  description={tests if the given entry has the 
+   given field value equal to the replacement text of the command
+   given by \meta{cs}, where \meta{field label}
+   is the internal field label (not the key name). The test 
+   uses \cs{ifdefstrequal}},
+  topics={conditional,fieldrefcommands},
+  note={\styfmt{glossaries} v4.16+},
+  category={command}
+}
+
+ at glscommand{ifglsfieldcseq,
+  name={\csfmt{if\-gls\-field\-cs\-eq}},
+  user1={\margm{entry label}\margm{field label}\margm{cs-name}\margm{true}\margm{false}},
+  description={tests if the given entry has the 
+   given field value equal to the replacement text of the command
+   given by the control sequence name \meta{cs-name}, where \meta{field label}
+   is the internal field label (not the key name). The test 
+   uses \cs{ifcsstrequal}},
+  topics={conditional,fieldrefcommands},
+  note={\styfmt{glossaries} v4.16+},
+  category={command}
+}
+
+ at glscommand{glsfielddef,
+  name={\csfmt{gls\-field\-def}},
+  user1={\margm{entry label}\margm{field label}\margm{definition}},
+  description={changes the value of the given
+  entry's field to \meta{definition} (localised by any scope)},
+  topics={fieldrefcommands,assigncommands},
+  note={\styfmt{glossaries} v4.16+},
+  category={command}
+}
+
+ at glscommand{glsfieldgdef,
+  name={\csfmt{gls\-field\-gdef}},
+  user1={\margm{entry label}\margm{field label}\margm{definition}},
+  description={globally changes the value of the given
+  entry's field to \meta{definition}},
+  topics={fieldrefcommands,assigncommands},
+  note={\styfmt{glossaries} v4.16+},
+  category={command}
+}
+
+ at glscommand{glsfieldedef,
+  name={\csfmt{gls\-field\-edef}},
+  user1={\margm{entry label}\margm{field label}\margm{definition}},
+  description={changes the value of the given entry's field to the 
+  full expansion of \meta{definition} (localised by any scope)},
+  topics={fieldrefcommands,assigncommands},
+  note={\styfmt{glossaries} v4.16+},
+  category={command}
+}
+
+ at glscommand{glsfieldxdef,
+  name={\csfmt{gls\-field\-xdef}},
+  user1={\margm{entry label}\margm{field label}\margm{definition}},
+  description={globally changes the value of the given entry's field to the 
+  full expansion of \meta{definition}},
+  topics={fieldrefcommands,assigncommands},
+  note={\styfmt{glossaries} v4.16+},
+  category={command}
+}
+
+ at glscommand{GlsXtrIfFieldNonZero,
+  name={\csfmt{Gls\-Xtr\-If\-Field\-Non\-Zero}},
+  user1={\margm{field}\margm{entry label}\margm{true}\margm{false}},
+  description={tests if the given field value expands to a non-zero
+integer. If the field is undefined or empty, the value is assumed to
+be 0. If the field is set, it must expand to an integer value.
+The value can be referenced in \meta{true} or \meta{false}
+with \cs{glscurrentfieldvalue}. The unstarred
+form adds implicit grouping. The starred form (new to v1.39)
+doesn't},
+  topics={conditional,fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.31+},
+  seealso={GlsXtrIfFieldEqNum},
+  category={command}
+}
+
+ at glscommand{GlsXtrIfFieldEqNum,
+  name={\csfmt{Gls\-Xtr\-If\-Field\-Eq\-Num}},
+  user1={\margm{field}\margm{entry label}\margm{number}\margm{true}\margm{false}},
+  description={tests if the given field value expands to the given
+integer \meta{number}. If the field is undefined or empty, the value is assumed to
+be 0. If the field is set, it must expand to an integer value.
+The value can be referenced in \meta{true} or \meta{false}
+with \cs{glscurrentfieldvalue}. The unstarred
+form adds implicit grouping. The starred form (new to v1.39)
+doesn't},
+  topics={conditional,fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.31+},
+  seealso={GlsXtrIfFieldNonZero,GlsXtrIfFieldCmpNum},
+  category={command}
+}
+
+ at glscommand{GlsXtrIfFieldCmpNum,
+  name={\csfmt{Gls\-Xtr\-If\-Field\-Cmp\-Num}},
+  user1={\margm{field}\margm{entry label}\margm{comparison}\margm{number}\margm{true}\margm{false}},
+  description={compares the given (numerical) field value to the given
+integer \meta{number}. The \meta{comparison} may be one of:
+\code{=}, \code{<} or \code{>}. If the field is undefined or empty, the value is assumed to
+be 0. If the field is set, it must expand to an integer value.
+The value can be referenced in \meta{true} or \meta{false}
+with \cs{glscurrentfieldvalue}. The unstarred
+form adds implicit grouping. The starred form (new to v1.39)
+doesn't},
+  topics={conditional,fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.31+},
+  seealso={GlsXtrIfFieldNonZero},
+  category={command}
+}
+
+ at mainglscommand{GlsXtrIfHasNonZeroChildCount,
+  name={\csfmt{Gls\-Xtr\-If\-Has\-Non\-Zero\-Child\-Count}},
+  user1={\margm{entry label}\margm{true}\margm{false}},
+  description={for use with the \csopt{save-child-count} resource
+option, this uses \cs{GlsXtrIfFieldNonZero} to test if the
+\field{childcount} field has a non-zero value. The value
+can be referenced in \meta{true} or \meta{false} with
+\cs{glscurrentfieldvalue}. The \TeX\ parser library recognises
+  this command regardless of whether or not the child count is saved},
+  topics={conditional,fieldrefcommands},
+  note={\styfmt{glossaries-extra-bib2gls} v1.31+\texparserdefnote},
+  seealso={GlsXtrIfFieldNonZero},
+  category={command}
+}
+
+ at mainglscommand{glsxtrifcustomdiscardperiod,
+  name={\csfmt{gls\-xtr\-if\-custom\-discard\-period}},
+  user1={\margm{true}\margm{false}},
+  description={should expand to \meta{true} if the post-link hook
+   should check for a following full stop (in addition to attribute
+   checks) otherwise should expand to \meta{false}},
+  topics={conditional,hooks},
+  note={\styfmt{glossaries-extra} v1.23+},
+  category={command}
+}
+
+ at glscommand{glsaddkey,
+  name={\csfmt{gls\-add\-key}},
+  user1={\margm{key}\margm{default value}\margm{no link cs}\margm{no link ucfirst cs}\margm{link cs}\margm{link ucfirst cs}\margm{link allcaps cs}},
+  description={adds a new key for use in \csref{newglossaryentry}
+   and associated commands to access it},
+  topics={definingterms,providingcommands,linkcommands,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsxtrprovidestoragekey,
+  name={\csfmt{gls\-xtr\-provide\-storage\-key}},
+  user1={\margm{key}\margm{default value}\margm{no link cs}},
+  description={adds a new key, if not already defined, for use in
+\csref{newglossaryentry}
+   and an associated command
+   to access it where (unlike \cs{glsaddstoragekey})
+   the \meta{no link cs} part may be empty if unrequired},
+  topics={definingterms,providingcommands,fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.12+},
+  category={command}
+}
+
+ at glscommand{glsaddstoragekey,
+  name={\csfmt{gls\-add\-storage\-key}},
+  user1={\margm{key}\margm{default value}\margm{no link cs}},
+  description={adds a new key for internal use that can be set in 
+    \csref{newglossaryentry}},
+  topics={definingterms,providingcommands,fieldrefcommands},
+  seealso={glsxtrprovidestoragekey},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsautoprefix,
+  name={\csfmt{gls\-auto\-prefix}},
+  description={prefix used for the automatically labelling triggered
+  by the \styopt[autolabel]{numberedsection} option},
+  topics={hooks,crossrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsenablehyper,
+  name={\csfmt{gls\-enable\-hyper}},
+  description={enables the creation of hyperlinks and targets for
+  the glossary commands that support them (automatically implemented
+  if \sty{hyperref} is loaded before \sty{glossaries})},
+  topics={linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsdisablehyper,
+  name={\csfmt{gls\-disable\-hyper}},
+  description={disables the creation of hyperlinks and targets for
+  the glossary commands that support them (automatically implemented
+  if \sty{hyperref} isn't loaded before \sty{glossaries})},
+  topics={linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{GlsXtrEnableInitialTagging,
+  name={\csfmt{Gls\-Xtr\-Enable\-Initial\-Tagging}},
+  user1={\margm{category list}\margm{cs}},
+  description={defines the control sequence \meta{cs}
+   to be used with abbreviation tagging
+   with the given categories},
+  topics={abbreviationcommands,formattingcommands},
+  note={\styfmt{glossaries-extra}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsxtrtagfont,
+  name={\csfmt{gls\-xtr\-tag\-font}},
+  user1={\margm{text}},
+  description={font used by tagging command defined by
+   \cs{GlsXtrEnableInitialTagging}},
+  note={\styfmt{glossaries-extra}},
+  topics={abbreviationcommands,formattingcommands},
+  category={command},
+  seealso={GlsXtrEnableInitialTagging}
+}
+
+ at glscommand{glsnavhypertarget,
+  name={\csfmt{gls\-nav\-hyper\-target}},
+  user1={\oargm{type}\margm{label}\margm{text}},
+  description={creates a hyper target for the group given by
+    \meta{label} for the given glossary type and uses \meta{text}
+    for the hyperlink text},
+  topics={linkcommands,entryrefcommands},
+  note={\styfmt{glossary-hypernav}},
+  category={command}
+}
+
+ at glscommand{newentry,
+  name={\csfmt{newentry}},
+  user1={\margm{label}\margm{\keyvallist}},
+  description={equivalent to \csref{newglossaryentry}},
+  topics={definingterms,shortcutcommands},
+  note={\styfmt{glossaries-extra} \styopt{shortcuts}},
+  category={command}
+}
+
+ at glscommand{newsym,
+  name={\csfmt{newsym}},
+  user1={\margm{label}\margm{\keyvallist}\margm{symbol}},
+  description={equivalent to \csref{glsxtrnewsymbol}},
+  note={\styfmt{glossaries-extra} \styopt{shortcuts}},
+  topics={definingterms,shortcutcommands},
+  category={command}
+}
+
+ at glscommand{newnum,
+  name={\csfmt{newnum}},
+  user1={\margm{label}\margm{\keyvallist}},
+  description={equivalent to \csref{glsxtrnewnumber}},
+  topics={definingterms,shortcutcommands},
+  note={\styfmt{glossaries-extra} \styopt{shortcuts}},
+  category={command}
+}
+
+ at glscommand{acronymtype,
+  name={\csfmt{acronym\-type}},
+  user1={},
+  description={expands to the default acronym glossary type when using
+   \csref{newacronym}},
+  topics={glossrefs},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsxtrabbrvtype,
+  name={\csfmt{gls\-xtr\-abbrv\-type}},
+  user1={},
+  description={expands to the default glossary type when using
+   \csref{newabbreviation}},
+  topics={glossrefs},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{nopostdesc,
+  name={\csfmt{no\-post\-desc}},
+  user1={},
+  description={suppresses the post-description hook},
+  topics={hooks},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsxtrnopostpunc,
+  name={\csfmt{gls\-xtr\-no\-post\-punc}},
+  user1={},
+  description={suppresses the post-description punctuation
+   without suppressing the post-description hook},
+  topics={hooks},
+  note={\styfmt{glossaries-extra} v1.22+},
+  category={command}
+}
+
+ at glscommand{glsxtrrestorepostpunc,
+  name={\csfmt{gls\-xtr\-restore\-post\-punc}},
+  user1={},
+  description={used within post-description category hooks, 
+   this restores the post-description punctuation
+   if it's been suppressed with \cs{glsxtrnopostpunc}},
+  topics={hooks},
+  note={\styfmt{glossaries-extra} v1.23+},
+  category={command}
+}
+
+ at mainglscommand{loadglsentries,
+  name={\csfmt{load\-gls\-entries}},
+  user1={\oargm{type}\margm{file}},
+  description={locally redefines \cs{glsdefaulttype}
+    to \meta{type} and inputs \meta{file}},
+  topics={definingterms},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{newglossary,
+  name={\csfmt{newglossary}},
+  user1={\oargm{log}\margm{type}\margm{gls}\margm{glo}\margm{title}},
+  description={defines a new glossary identified by \meta{type}
+   with the given title and associated file extensions used by
+   \appfmt{makeindex} or \appfmt{xindy}},
+  topics={glossrefs},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{newglossary*,
+  name={\csfmt{newglossary*}},
+  user1={\margm{type}\margm{title}},
+  description={defines a new glossary identified by \meta{type}
+   with the given title},
+  topics={glossrefs},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{newignoredglossary,
+  name={\csfmt{new\-ignored\-glossary}},
+  user1={\margm{type}},
+  description={defines a new ignored glossary (with hyperlinks
+   suppressed) identified by \meta{type}
+   that's not included in the list used by commands, such
+   as \cs{printunsrtglossaries}, that iterate over defined glossaries},
+  topics={glossrefs},
+  note={\styfmt{glossaries} v4.08+},
+  category={command}
+}
+
+ at glscommand{newignoredglossary*,
+  name={\csfmt{new\-ignored\-glossary*}},
+  user1={\margm{type}},
+  description={defines a new ignored glossary (without 
+   suppressing hyperlinks) identified by \meta{type}
+   that's not included in the list used by commands, such
+   as \cs{printunsrtglossaries}, that iterate over defined glossaries},
+  topics={glossrefs},
+  note={\styfmt{glossaries-extra} v1.11+},
+  category={command}
+}
+
+ at glscommand{provideignoredglossary,
+  name={\csfmt{provide\-ignored\-glossary}},
+  user1={\margm{type}},
+  description={as \cs{newignoredglossary} but does nothing
+    if a glossary identified by \meta{type} already exists},
+  topics={glossrefs},
+  note={\styfmt{glossaries-extra} v1.12+},
+  category={command}
+}
+
+ at glscommand{provideignoredglossary*,
+  name={\csfmt{provide\-ignored\-glossary*}},
+  user1={\margm{type}},
+  description={as \ics{provideignoredglossary} but doesn't
+    suppress hyperlinks},
+  topics={glossrefs},
+  note={\styfmt{glossaries-extra} v1.12+},
+  category={command}
+}
+
+ at glscommand{delimN,
+  name={\csfmt{delimN}},
+  user1={},
+  description={used to delimited individual locations},
+  topics={glossarystylecommands,separatorcommands,loclistcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{delimR,
+  name={\csfmt{delimR}},
+  user1={},
+  description={used as a separator between the start and end locations
+   of a range},
+  topics={glossarystylecommands,separatorcommands,loclistcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsnoidxloclist,
+  name={\csfmt{gls\-noidx\-loc\-list}},
+  user1={\margm{location list cs}},
+  description={iterates over the given internal location list using
+   the \cs{glsnoidxloclisthandler} handler},
+  topics={glossarystylecommands,loop,loclistcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsnoidxloclisthandler,
+  name={\csfmt{gls\-noidx\-loc\-list\-handler}},
+  description={the handler used by the internal list loop function used
+    in \cs{glsnoidxloclist}},
+  topics={glossarystylecommands,loop,loclistcommands},
+  user1={\margm{location}},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glossentry,
+  name={\csfmt{glossentry}},
+  user1={\margm{label}\margm{location list}},
+  description={used in the glossary to display a top-level entry},
+  topics={glossarystylecommands},
+  note={\styfmt{glossaries} v3.08a+},
+  category={command}
+}
+
+ at glscommand{subglossentry,
+  name={\csfmt{subglossentry}},
+  user1={\margm{level}\margm{label}\margm{location list}},
+  description={used in the glossary to display a sub-entry},
+  topics={glossarystylecommands},
+  note={\styfmt{glossaries} v3.08a+},
+  category={command}
+}
+
+ at glscommand{newglossarystyle,
+  name={\csfmt{new\-glossary\-style}},
+  user1={\margm{name}\margm{definition}},
+  description={defines a new glossary style called \meta{name}},
+  topics={glossarystylecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{setglossarystyle,
+  name={\csfmt{set\-glossary\-style}},
+  user1={\margm{name}},
+  description={sets the glossary style identified by \meta{name}},
+  topics={glossarystylecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glossaryheader,
+  name={\csfmt{glossary\-header}},
+  description={implemented at the start of a glossary (modified by
+glossary styles)},
+  topics={glossarystylecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsgroupskip,
+  name={\csfmt{gls\-group\-skip}},
+  description={inserted between groups to create some vertical
+  spacing (this command is modified by
+  glossary styles, and may be switched off with the  
+  \styopt{nogroupskip} option)},
+  topics={glossarystylecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsentryitem,
+  name={\csfmt{gls\-entry\-item}},
+  user1={\margm{label}},
+  description={increments and displays the \counter{glossaryentry}
+counter, if appropriate},
+  topics={glossarystylecommands},
+  note={\styfmt{glossaries} v3.0+},
+  category={command}
+}
+
+ at glscommand{glsentrycounterlabel,
+  name={\csfmt{gls\-entry\-counter\-label}},
+  description={governs the way the \counter{glossaryentry}
+  counter is displayed by \cs{glsentryitem}},
+  topics={glossarystylecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glssubentryitem,
+  name={\csfmt{gls\-sub\-entry\-item}},
+  user1={\margm{label}},
+  description={increments and displays the \counter{glossarysubentry}
+counter, if appropriate},
+  topics={glossarystylecommands},
+  note={\styfmt{glossaries} v3.0+},
+  category={command}
+}
+
+ at glscommand{glssubentrycounterlabel,
+  name={\csfmt{gls\-sub\-entry\-counter\-label}},
+  description={governs the way the \counter{glossarysubentry}
+  counter is displayed by \cs{glssubentryitem}},
+  topics={glossarystylecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glstarget,
+  name={\csfmt{gls\-target}},
+  user1={\margm{label}\margm{text}},
+  description={creates a hypertarget for the entry given by
+\meta{label} (the target for commands like \cs{gls}) and displays \meta{text}},
+  topics={glossarystylecommands,linkcommands},
+  note={\styfmt{glossaries} v1.18+},
+  category={command}
+}
+
+ at glscommand{glsnamefont,
+  name={\csfmt{gls\-name\-font}},
+  user1={\margm{text}},
+  description={used by \cs{glossentryname} to format the name},
+  topics={glossarystylecommands,formattingcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glossentryname,
+  name={\csfmt{gloss\-entry\-name}},
+  user1={\margm{label}},
+  description={used by glossary styles to display the name},
+  topics={glossarystylecommands,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glossentrysymbol,
+  name={\csfmt{gloss\-entry\-symbol}},
+  user1={\margm{label}},
+  description={used by glossary styles to display the symbol},
+  topics={glossarystylecommands,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glspostdescription,
+  name={\csfmt{glspostdescription}},
+  description={a hook added after the description in some glossary
+styles (all if the \sty{glossaries-extra-stylemods} package is
+loaded to patch them). This hook is used to reflect the
+\styopt{nopostdot} package option for \sty{glossaries}
+and the \styopt{postpunc} option for \sty{glossaries-extra}},
+  topics={glossarystylecommands,hooks},
+  note={\styfmt{glossaries} and modified by
+\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{glossentrynameother,
+  name={\csfmt{gloss\-entry\-name\-other}},
+  user1={\margm{label}\margm{field}},
+  description={acts like \ics{glossentryname} (obeys 
+   \catattr{glossname} and \catattr{glossnamefont}
+   or \cs{glsnamefont} and the post-name hook) but uses
+   the given \meta{field} instead of the \field{name} field},
+  topics={glossarystylecommands,fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.22+},
+  category={command}
+}
+
+ at glscommand{glossentrydesc,
+  name={\csfmt{gloss\-entry\-desc}},
+  user1={\margm{label}},
+  description={used by glossary styles to display the description},
+  topics={glossarystylecommands,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{Glossentrydesc,
+  name={\csfmt{Gloss\-entry\-desc}},
+  user1={\margm{label}},
+  description={like \cs{glossentrydesc} but converts the first
+letter to \idx{uppercase}},
+  topics={glossarystylecommands,fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{Glossentryname,
+  name={\csfmt{Gloss\-entry\-name}},
+  user1={\margm{label}},
+  description={like \cs{glossentryname} but converts the first
+letter to \idx{uppercase}},
+  topics={glossarystylecommands,fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{Glossentrysymbol,
+  name={\csfmt{Gloss\-entry\-symbol}},
+  user1={\margm{label}},
+  description={like \cs{glossentrysymbol} but converts the first
+letter to \idx{uppercase}},
+  topics={glossarystylecommands,fieldrefcommands,casecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsaddall,
+  name={\csfmt{glsaddall}},
+  user1={\oargm{options}},
+  description={iterates over all entries defined for all glossaries
+   (or for the sub-list provided by \optfmt{types=\margm{list}} in the options) 
+   and performs \code{\cs{glsadd}\oargm{options}} for each entry.
+   This command isn't suitable for use with \bibgls. Use the
+   \csopt{selection} option instead},
+  topics={loop,indexing},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsaddallunused,
+  name={\csfmt{gls\-add\-all\-unused}},
+  user1={\oargm{list}},
+  description={iterates over all entries defined for all glossaries
+   (or for the sub-list provided in the options) and performs
+   \cs{glsadd} for each entry that hasn't been used with
+   the \glsaddopt{format} set to \code{glsignore}.
+   This command isn't suitable for use with \bibgls. Use the
+   \csopt{selection} option instead},
+  topics={loop,indexing},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsadd,
+  name={\csfmt{glsadd}},
+  user1={\oargm{options}\margm{label}},
+  description={indexes the entry without displaying any text},
+  topics={indexing},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsaddeach,
+  name={\csfmt{gls\-add\-each}},
+  user1={\oargm{options}\margm{label list}},
+  description={indexes each entry identified in the comma-separated
+  list of labels without displaying any text},
+  topics={indexing},
+  note={\styfmt{glossaries-extra} v1.31+},
+  category={command}
+}
+
+ at glscommand{glsstartrange,
+  name={\csfmt{gls\-start\-range}},
+  user1={\oargm{options}\margm{label list}},
+  description={essentially like 
+  \code{\cs{glsaddeach}\oarg{\glsopt[\idx{openrange}]{format},\meta{options}}\margm{label-list}}.
+   If \glsopt{format} is used in \meta{options}, the open marker
+   \idx{openrange} will be inserted in front of the value},
+  topics={indexing},
+  note={\styfmt{glossaries-extra} v1.50+},
+  category={command}
+}
+
+ at glscommand{glsendrange,
+  name={\csfmt{gls\-end\-range}},
+  user1={\oargm{options}\margm{label list}},
+  description={essentially like 
+  \code{\cs{glsaddeach}\oarg{\glsopt[\idx{closerange}]{format},\meta{options}}\margm{label-list}}.
+   If \glsopt{format} is used in \meta{options}, the close marker
+   \idx{closerange} will be inserted in front of the value},
+  topics={indexing},
+  note={\styfmt{glossaries-extra} v1.50+},
+  category={command}
+}
+
+ at glsaddoption{glsadd.thevalue,
+  name={\csoptfmt{thevalue}},
+  user1={\margm{value}},
+  description={overrides the record value so that it's the
+  given \meta{value} not obtained from the associated counter},
+  category={commandoption},
+  note={\styfmt{glossaries-extra} v1.14+},
+  parent={glsadd}
+}
+
+ at glsaddoption{glsadd.theHvalue,
+  name={\csoptfmt{theHvalue}},
+  user1={\margm{value}},
+  description={the hyperlink target corresponding to the value
+  of \glsopt{thevalue}, if appropriate},
+  category={commandoption},
+  note={\styfmt{glossaries-extra} v1.14+},
+  parent={glsadd}
+}
+
+ at glsaddoption{glsadd.format,
+  name={\csoptfmt{format}},
+  user1={\margm{encap}},
+  description={sets the \idx{encap} for the record to 
+  \meta{encap}, optionally with the start or end range markers},
+  category={commandoption},
+  note={\styfmt{glossaries}},
+  parent={glsadd}
+}
+
+ at glsaddoption{glsadd.counter,
+  name={\csoptfmt{counter}},
+  user1={\margm{counter-name}},
+  description={sets the counter to use for the record},
+  category={commandoption},
+  note={\styfmt{glossaries}},
+  parent={glsadd}
+}
+
+ at glscommand{theglossaryentry,
+  name={\csfmt{theglossaryentry}},
+  description={textual representation of the \counter{glossaryentry}
+counter, which is defined with the \styopt{entrycounter} option},
+  topics={glossarystylecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{theHglossaryentry,
+  name={\csfmt{theHglossaryentry}},
+  description={hypertarget associated with the \counter{glossaryentry}
+counter, which is defined with the \styopt{entrycounter} option},
+  topics={glossarystylecommands,linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsstepentry,
+  name={\csfmt{gls\-step\-entry}},
+  user1 = {\margm{label}},
+  description={increments the \counter{glossaryentry} counter, which
+is defined with the \styopt{entrycounter} option, and automatically
+labels it with \cs{label}},
+  topics={glossarystylecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{currentglossary,
+  name={\csfmt{currentglossary}},
+  description={defined within the glossary to the current glossary
+type, this has no meaning outside of the glossary list},
+  topics={glossarystylecommands,glossrefs},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at command{frontmatter,
+  name={\csfmt{front\-matter}},
+  user1={},
+  description={switches to front matter},
+  note={book-like classes},
+  category={command}
+}
+
+ at command{mainmatter,
+  name={\csfmt{main\-matter}},
+  user1={},
+  description={switches to main matter},
+  note={book-like classes},
+  category={command}
+}
+
+ at command{backmatter,
+  name={\csfmt{back\-matter}},
+  user1={},
+  description={switches to back matter},
+  note={book-like classes},
+  category={command}
+}
+
+ at glscommand{GlsXtrSetDefaultNumberFormat,
+  name={\csfmt{Gls\-Xtr\-Set\-Default\-Number\-Format}},
+  user1={\margm{format}},
+  description={set the default format to use if the
+   \glsaddopt{format} key isn't set},
+  topics={formattingcommands,indexing},
+  note={\styfmt{glossaries-extra} v1.19+},
+  category={command}
+}
+
+ at glscommand{GlsXtrSetDefaultGlsOpts,
+  name={\csfmt{Gls\-Xtr\-Set\-Default\-Gls\-Opts}},
+  user1={\margm{options}},
+  description={set the default options for commands like \cs{gls}},
+  topics={formattingcommands,indexing},
+  seealso={GlsXtrSetDefaultNumberFormat},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{glsnumberformat,
+  name={\csfmt{gls\-number\-format}},
+  user1={\margm{text}},
+  description={default location format, uses \cs{glshypernumber} if
+hyperlinks enabled otherwise just does \meta{text}},
+  topics={formattingcommands,indexing,loclistcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glshypernumber,
+  name={\csfmt{gls\-hyper\-number}},
+  user1={\margm{text}},
+  description={a location format that has a hyperlink (if enabled)},
+  topics={formattingcommands,indexing,loclistcommands,linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{hypersf,
+  name={\csfmt{hypersf}},
+  user1={\margm{text}},
+  description={a location format that uses the sans-serif 
+   font that also has a hyperlink (if enabled)},
+  topics={formattingcommands,indexing,loclistcommands,linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{hyperit,
+  name={\csfmt{hyperit}},
+  user1={\margm{text}},
+  description={a location format that uses the italic 
+   font that also has a hyperlink (if enabled)},
+  topics={formattingcommands,indexing,loclistcommands,linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{hyperbf,
+  name={\csfmt{hyperbf}},
+  user1={\margm{text}},
+  description={a location format that uses the bold 
+   font that also has a hyperlink (if enabled)},
+  topics={formattingcommands,indexing,loclistcommands,linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{hyperemph,
+  name={\csfmt{hyperemph}},
+  user1={\margm{text}},
+  description={a location format that uses \ics{emph} to set the
+  font and also has a hyperlink (if enabled)},
+  topics={formattingcommands,indexing,loclistcommands,linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{hyperrm,
+  name={\csfmt{hyperrm}},
+  user1={\margm{text}},
+  description={a location format that uses the serif (Roman) 
+   font that also has a hyperlink (if enabled)},
+  topics={formattingcommands,indexing,loclistcommands,linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at command{emph,
+  name={\csfmt{emph}},
+  user1={\margm{text}},
+  description={emphasizes the given text (italic or slanted
+   if the surrounding font is upright, otherwise upright font is 
+   used)},
+  note={kernel command},
+  category={command}
+}
+
+ at command{em,
+  name={\csfmt{em}},
+  description={switch to emphasized font (until end of current scope)},
+  note={kernel command},
+  category={command}
+}
+
+ at command{textsf,
+  name={\csfmt{textsf}},
+  user1={\margm{text}},
+  description={displays the given text in sans-serif},
+  note={kernel command},
+  category={command}
+}
+
+ at command{textbf,
+  name={\csfmt{textbf}},
+  user1={\margm{text}},
+  description={displays the given text in bold},
+  note={kernel command},
+  category={command}
+}
+
+ at command{bfseries,
+  name={\csfmt{bfseries}},
+  description={switch to bold (until end of current scope)},
+  note={kernel command},
+  category={command}
+}
+
+ at command{textit,
+  name={\csfmt{textit}},
+  user1={\margm{text}},
+  description={displays the given text in italic},
+  note={kernel command},
+  seealso={emph},
+  category={command}
+}
+
+ at command{texttt,
+  name={\csfmt{texttt}},
+  user1={\margm{text}},
+  description={displays the given text in monospaced font},
+  note={kernel command},
+  category={command}
+}
+
+ at command{@firstofone,
+  name={\csfmt{@first\-of\-one}},
+  user1={\margm{code}},
+  description={does \meta{code}},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{@gobble,
+  name={\csfmt{@gobble}},
+  user1={\margm{code}},
+  description={does nothing (the argument is discarded)},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{@for,
+  name={\csfmt{@for}},
+  user1={\meta{cs}:=\meta{list}\csfmt{do}\margm{code}},
+  description={iterates over each item in the comma-separated
+\meta{list}, and on each iteration sets \meta{cs} to the current
+element and performs \meta{code}},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{alph,
+  name={\csfmt{alph}},
+  user1={\margm{counter}},
+  description={displays the given counter as an alphabetic character
+from \qt{a} to \qt{z}},
+  note={kernel command},
+  category={command}
+}
+
+ at command{footnote,
+  name={\csfmt{footnote}},
+  user1={\oargm{number}\margm{text}},
+  description={displays the given text as a footnote},
+  note={kernel command},
+  category={command}
+}
+
+ at command{index,
+  name={\csfmt{index}},
+  user1={\margm{text}},
+  description={indexes the given term by writing the relevant
+information to an associated file that can then be processed
+by \idx{makeindex} or \idx{xindy}},
+  note={kernel command},
+  category={command}
+}
+
+ at glscommand{glsignore,
+  name={\csfmt{gls\-ignore}},
+  user1={\margm{text}},
+  description={does nothing but when used as a location format
+   \bibgls\ recognises it as an \idx{ignoredrecord}},
+  topics={formattingcommands,indexing,loclistcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{@istfilename,
+  name={\csfmt{@istfilename}},
+  user1={\margm{filename}},
+  description={identifies the style file in the \ext{aux}
+   file for the benefit of external tools like 
+    \idx{makeglossaries} and \idx{makeglossaries-lite}},
+  topics={internalcommands,auxcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glstriggerrecordformat,
+  name={\csfmt{gls\-trigger\-record\-format}},
+  user1={\margm{text}},
+  description={does nothing but when used as a location format
+   \bibgls\ recognises it as an \idx{ignoredrecord} indexed by
+   commands like \csref{rgls}},
+  topics={formattingcommands,indexing,loclistcommands},
+  note={\styfmt{glossaries-extra} v1.21+},
+  category={command}
+}
+
+ at command{at,
+  name={\csfmt{@}},
+  user1={},
+  description={adjusts the space factor to indicate the following
+   punctuation character marks the end of the sentence},
+  note={kernel command},
+  category={command}
+}
+
+ at command{forall,
+  name={\csfmt{forall}},
+  user1={},
+  description={for all symbol ($\forall$)},
+  note={kernel command\texparserdefnote\ (maths mode)},
+  category={command}
+}
+
+ at command{heartsuit,
+  name={\csfmt{heartsuit}},
+  user1={},
+  description={heart symbol ($\heartsuit$)},
+  note={kernel command\texparserdefnote\ (maths mode)},
+  category={command}
+}
+
+ at command{diamondsuit,
+  name={\csfmt{diamondsuit}},
+  user1={},
+  description={diamond symbol ($\diamondsuit$)},
+  note={kernel command\texparserdefnote\ (maths mode)},
+  category={command}
+}
+
+ at command{ensuremath,
+  name={\csfmt{ensuremath}},
+  user1={\margm{maths}},
+  description={ensures the argument is in math mode. As a general
+rule this should only be used if you know for certain that
+the argument just contains mathematical markup and doesn't cause a
+change in mode},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{mathord,
+  name={\csfmt{mathord}},
+  user1={\margm{maths}},
+  description={assigns the character or sub-formula in the 
+   argument to class 0, ordinary},
+  note={\TeX\ primitive},
+  category={command}
+}
+
+ at command{mathop,
+  name={\csfmt{mathop}},
+  user1={\margm{maths}},
+  description={assigns the character or sub-formula in the 
+   argument to class 1, large operator},
+  note={\TeX\ primitive},
+  category={command}
+}
+
+ at command{mathpunct,
+  name={\csfmt{mathpunct}},
+  user1={\margm{maths}},
+  description={assigns the character or sub-formula in the 
+   argument to class 6, punctuation},
+  note={\TeX\ primitive},
+  category={command}
+}
+
+ at command{mathrel,
+  name={\csfmt{mathrel}},
+  user1={\margm{maths}},
+  description={assigns the character or sub-formula in the 
+   argument to class 3, relation},
+  note={\TeX\ primitive},
+  category={command}
+}
+
+ at command{write18,
+  name={\csfmt{write18}},
+  user1={\margm{system call}},
+  description={perform shell escape if permitted},
+  note={kernel command},
+  category={command}
+}
+
+ at command{immediate,
+  name={\csfmt{immediate}},
+  user1={\meta{file operation}},
+  description={perform the file operation immediately instead of the
+usual delay},
+  note={{}\TeX\ primitive},
+  category={command}
+}
+
+ at command{AtEndDocument,
+  name={\csfmt{AtEndDocument}},
+  user1={\margm{code}},
+  description={perform \meta{code} at the end of the document},
+  note={kernel command},
+  category={command}
+}
+
+ at command{unexpanded,
+  name={\csfmt{unexpanded}},
+  user1={\margm{general text}},
+  description={expands to the argument},
+  note={{}\eTeX\ primitive\texparserdefnote},
+  category={command}
+}
+
+ at command{detokenize,
+  name={\csfmt{detokenize}},
+  user1={\margm{general text}},
+  description={expands the argument to a list of character tokens},
+  note={{}\eTeX\ primitive\texparserdefnote},
+  category={command}
+}
+
+ at command{input,
+  name={\csfmt{input}},
+  user1={\margm{file}},
+  description={input the given file},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{include,
+  name={\csfmt{include}},
+  user1={\margm{file}},
+  description={clears the page, creates a supplementary \ext{aux}
+  file, and selectively inputs the given file},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{IfFileExists,
+  name={\csfmt{IfFileExists}},
+  user1={\margm{file}\margm{true}\margm{false}},
+  description={if the given \meta{file} exists does \meta{true}
+   otherwise does \meta{false}},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{jobname,
+  name={\csfmt{jobname}},
+  user1={},
+  description={the current job name, which is usually the name of
+   the main \ext{tex} file without the extension},
+  note={primitive},
+  category={command}
+}
+
+ at command{protect,
+  name={\csfmt{protect}},
+  user1={\meta{token}},
+  description={protects \meta{token} from expansion},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{ifcase,
+  name={\csfmt{ifcase}},
+  user1={\meta{number}},
+  description={case conditional},
+  note={\TeX\ primitive\texparserdefnote},
+  category={command}
+}
+
+ at command{ifnum,
+  name={\csfmt{ifnum}},
+  user1={\meta{number1}\meta{comparison}\meta{number2}},
+  description={integer conditional},
+  note={\TeX\ primitive\texparserdefnote},
+  category={command}
+}
+
+ at command{renewcommand,
+  name={\csfmt{re\-new\-com\-mand}},
+  user1={\margm{cs}\oargm{n}\oargm{def}\margm{code}},
+  description={redefines an existing command},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{newcommand,
+  name={\csfmt{new\-com\-mand}},
+  user1={\margm{cs}\oargm{n}\oargm{def}\margm{code}},
+  description={defines a new command},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{providecommand,
+  name={\csfmt{pro\-vide\-com\-mand}},
+  user1={\margm{cs}\oargm{n}\oargm{def}\margm{code}},
+  description={defines a command if it's not already defined},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{NewDocumentCommand,
+  name={\csfmt{New\-Document\-Com\-mand}},
+  user1={\margm{cs}\margm{arg specs}\margm{code}},
+  description={defines a new robust command (only partially
+implemented by \TeX\ Parser Library)},
+  note={\LaTeX3 command\texparserdefnote},
+  category={command}
+}
+
+ at command{RenewDocumentCommand,
+  name={\csfmt{Renew\-Document\-Com\-mand}},
+  user1={\margm{cs}\margm{arg specs}\margm{code}},
+  description={redefines a new robust command (only partially
+implemented by \TeX\ Parser Library)},
+  note={\LaTeX3 command\texparserdefnote},
+  category={command}
+}
+
+ at command{ProvideDocumentCommand,
+  name={\csfmt{Provide\-Document\-Com\-mand}},
+  user1={\margm{cs}\margm{arg specs}\margm{code}},
+  description={provides a robust command, if not already defined (only partially
+implemented by \TeX\ Parser Library)},
+  note={\LaTeX3 command\texparserdefnote},
+  category={command}
+}
+
+ at command{DeclareDocumentCommand,
+  name={\csfmt{Declare\-Document\-Com\-mand}},
+  user1={\margm{cs}\margm{arg specs}\margm{code}},
+  description={defines a robust command, regardless of whether or not 
+   it has already been defined (only partially
+implemented by \TeX\ Parser Library)},
+  note={\LaTeX3 command\texparserdefnote},
+  category={command}
+}
+
+ at command{section,
+  name={\csfmt{section}},
+  user1={\oargm{\idx{toc} title}\margm{title}},
+  description={section heading},
+  note={most classes that have a concept of document sections},
+  category={command}
+}
+
+ at command{section*,
+  name={\csfmt{section*}},
+  user1={\margm{title}},
+  description={unnumbered section heading},
+  note={most classes that have a concept of document sections},
+  category={command}
+}
+
+ at command{chapter,
+  name={\csfmt{chapter}},
+  user1={\oargm{\idx{toc} title}\margm{title}},
+  description={chapter heading},
+  note={book or report classes},
+  category={command}
+}
+
+ at command{chapter*,
+  name={\csfmt{chapter*}},
+  user1={\margm{title}},
+  description={unnumbered chapter heading},
+  note={book or report classes},
+  category={command}
+}
+
+ at command{caption,
+  name={\csfmt{caption}},
+  user1={\oargm{list title}\margm{title}},
+  description={caption title},
+  note={kernel command},
+  category={command}
+}
+
+ at command{boldsymbol,
+  name={\csfmt{boldsymbol}},
+  user1={\margm{symbol}},
+  description={renders given maths symbol in bold if supported by
+    the current font},
+  note={\styfmt{amsmath}},
+  category={command}
+}
+
+ at command{mathcal,
+  name={\csfmt{mathcal}},
+  user1={\margm{character}},
+  description={renders the given (\idx!{uppercase}) maths character in a calligraphic font},
+  note={kernel command (maths mode)},
+  category={command}
+}
+
+ at glscommand{ifglsentryexists,
+  name={\csfmt{ifglsentryexists}},
+  user1={\margm{label}\margm{true}\margm{false}},
+  description={tests if the entry given by \meta{label} exists},
+  topics={conditional,entryrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsdefaulttype,
+  name={\csfmt{gls\-default\-type}},
+  user1={},
+  description={the default glossary type},
+  topics={glossrefs},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glssymbolsgroupname,
+  name={\csfmt{gls\-symbols\-group\-name}},
+  user1={},
+  description={language-sensitive name used for the symbols group and 
+   also used for the title of the glossary created with the \styopt{symbols} 
+   package option},
+  topics={fixedtextcommands,glossarystylecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsnumbersgroupname,
+  name={\csfmt{gls\-numbers\-group\-name}},
+  user1={},
+  description={language-sensitive name used for the numbers group 
+   and also used for the title of the glossary created with the 
+   \styopt{numbers} package option},
+  topics={fixedtextcommands,glossarystylecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{printunsrtglossary,
+  name={\csfmt{print\-unsrt\-glos\-sary}},
+  user1={\oargm{options}},
+  description={display a glossary by iterating over all entries 
+   associated with that glossary in the order in which they were
+   defined (which, with \bibgls, should correspond to the
+   order obtained from the sort settings given in the
+   \idx{resourceset} options)},
+  topics={glossrefs,loop},
+  note={\styfmt{glossaries-extra} v1.08+},
+  category={command}
+}
+
+ at glscommand{printunsrtinnerglossary,
+  name={\csfmt{print\-unsrt\-inner\-glos\-sary}},
+  user1={\oargm{options}\margm{pre code}\margm{post code}},
+  description={similar to \cs{printunsrtglossary} but only contains
+  the code that would typically be placed inside the \env{theglossary}
+  environment. This command should either be placed inside the
+  \env{printunsrtglossarywrap} environment or inside the handler macro
+  used by \cs{printunsrtglossary}. This command is unsuitable for
+  certain glossary styles, particularly tabular-like styles},
+  topics={glossrefs,loop},
+  note={\styfmt{glossaries-extra} v1.44+},
+  category={command}
+}
+
+ at glscommand{printunsrtglossary*,
+  name={\csfmt{print\-unsrt\-glos\-sary*}},
+  user1={\oargm{options}\margm{code}},
+  description={as \cs{printunsrtglossary} but performs
+  \meta{code} first (scoped to localise any assignments within
+  \meta{code})},
+  topics={glossrefs,loop},
+  note={\styfmt{glossaries-extra} v1.12+},
+  category={command}
+}
+
+ at glscommand{printunsrtglossaryhandler,
+  name={\csfmt{print\-unsrt\-glos\-sary\-handler}},
+  user1={\margm{label}},
+  description={used by \cs{printunsrtglossary} and
+   \cs{printunsrtinnerglossary} to handler each entry within the
+  loop. By default this simply does \cs{glsxtrunsrtdo}},
+  topics={glossrefs,loop},
+  note={\styfmt{glossaries-extra} v1.12+},
+  category={command}
+}
+
+ at glscommand{glsxtrunsrtdo,
+  name={\csfmt{gls\-xtr\-unsrt\-do}},
+  user1={\margm{label}},
+  description={displays the entry given by \meta{label} using
+   \cs{glossentry} or \cs{subglossentry} depending on the entry's 
+   hierarchical level (taking \printglossopt{leveloffset} into
+   account)},
+  topics={glossrefs,loop},
+  note={\styfmt{glossaries-extra} v1.12+},
+  category={command}
+}
+
+ at glscommand{printunsrtglossaries,
+  name={\csfmt{print\-unsrt\-glos\-saries}},
+  user1={},
+  description={iterates over all non-ignored defined glossaries
+   and performs \cs{printunsrtglossary} for each one},
+  topics={glossrefs,loop},
+  note={\styfmt{glossaries-extra} v1.08+},
+  category={command}
+}
+
+ at glscommand{printunsrtglossaryentryprocesshook,
+  name={\csfmt{print\-unsrt\-glos\-sary\-entry\-process\-hook}},
+  user1={\margm{label}},
+  description={performed at each iteration of the internal loop used
+by \cs{printunsrtglossary}},
+  topics={glossrefs,loop,hooks},
+  note={\styfmt{glossaries-extra} v1.21+},
+  category={command}
+}
+
+ at glscommand{printunsrtglossaryskipentry,
+  name={\csfmt{print\-unsrt\-glos\-sary\-skip\-entry}},
+  description={only allowed within
+   \cs{printunsrtglossaryentryprocesshook} this command 
+   indicates that the current entry should be skipped},
+  topics={glossrefs,loop,hooks},
+  note={\styfmt{glossaries-extra} v1.21+},
+  category={command}
+}
+
+ at glscommand{printunsrtglossarypredoglossary,
+  name={\csfmt{print\-unsrt\-glos\-sary\-pre\-do\-glos\-sary}},
+  description={hook performed by \cs{printunsrtglossary}},
+  topics={glossrefs,hooks},
+  note={\styfmt{glossaries-extra} v1.21+},
+  category={command}
+}
+
+ at glscommand{glscategory,
+  name={\csfmt{gls\-cat\-e\-gory}},
+  user1={\margm{label}},
+  description={expands to the value of the \field{category} field
+for the entry identified by \meta{label} or nothing if the entry
+hasn't been defined},
+  topics={fieldrefcommands,catattrcommands},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{glsifcategory,
+  name={\csfmt{gls\-if\-cat\-e\-gory}},
+  user1={\margm{label}\margm{category}\margm{true}\margm{false}},
+  description={does \meta{true} if the \field{category} field for
+   the entry given by \meta{label} is \meta{category}},
+  topics={conditional,fieldrefcommands,catattrcommands},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{glsxtriflabelinlist,
+  name={\csfmt{gls\-xtr\-if\-label\-in\-list}},
+  user1={\margm{label}\margm{list}\margm{true}\margm{false}},
+  description={tests if the \meta{label} is contained
+   in the comma-separated \meta{list}, where both \meta{label}
+   and \meta{list} are fully expanded before testing. This test
+   is designed for \emph{labels} that are fully expandable},
+  topics={conditional,listcommands},
+  note={\styfmt{glossaries-extra} v1.21+},
+  category={command}
+}
+
+ at printglossoption{printgloss.type,
+  parent = {printunsrtglossary},
+  name = {\csoptfmt{type}},
+  user1 = {\margm{glossary-label}},
+  description={identifies the glossary list (\cs{glsdefaulttype}, if
+   omitted)},
+  category={commandoption},
+}
+
+ at printglossoption{printgloss.style,
+  parent = {printunsrtglossary},
+  name = {\csoptfmt{style}},
+  user1 = {\margm{style-name}},
+  description={use the glossary style identified by \meta{style-name} 
+   (overrides current style setting)},
+  category={commandoption},
+}
+
+ at printglossoption{printgloss.entrycounter,
+  parent = {printunsrtglossary},
+  name = {\csoptfmt{entrycounter}},
+  user1 = {\margm{boolean}},
+  description = {locally enable or disable top-level enumeration 
+   (overrides \styopt{entrycounter} package option)},
+  category={commandoption},
+}
+
+ at printglossoption{printgloss.subentrycounter,
+  parent = {printunsrtglossary},
+  name = {\csoptfmt{subentrycounter}},
+  user1 = {\margm{boolean}},
+  description = {locally enable or disable level~1 enumeration 
+   (overrides \styopt{subentrycounter} package option)},
+  category={commandoption},
+}
+
+ at printglossoption{printgloss.nopostdot,
+  parent = {printunsrtglossary},
+  name = {\csoptfmt{nopostdot}},
+  user1 = {\margm{boolean}},
+  description = {locally omit the post-description punctuation (overrides
+   \styopt{nopostdot} and related package options)},
+  category={commandoption},
+}
+
+ at printglossoption{printgloss.numberedsection,
+  parent = {printunsrtglossary},
+  name = {\csoptfmt{numbered\-section}},
+  user1={\margm{value}},
+  description={locally change whether or not to use a numbered
+   sectioning command (overrides \styopt{numberedsection} package
+   option)},
+  category={commandoption},
+}
+
+ at printglossoption{printgloss.title,
+  parent = {printunsrtglossary},
+  name = {\csoptfmt{title}},
+  user1={\margm{text}},
+  description = {locally sets the title for this glossary},
+  category={commandoption},
+}
+
+ at printglossoption{printgloss.toctitle,
+  parent = {printunsrtglossary},
+  name = {\csoptfmt{toctitle}},
+  description = {locally sets the \idx{toc} title for this glossary},
+  user1={\margm{text}},
+  category={commandoption},
+}
+
+ at printglossoption{printgloss.target,
+  parent = {printunsrtglossary},
+  name = {\csoptfmt{target}},
+  user1={\margm{boolean}},
+  description = {locally enables or disables the hypertargets for
+   each item},
+  category={commandoption},
+}
+
+ at printglossoption{printgloss.targetnameprefix,
+  parent = {printunsrtglossary},
+  name = {\csoptfmt{target\-name\-prefix}},
+  user1={\margm{label}},
+  description = {locally assign a prefix for the hypertargets
+   assigned to each item (if \printglossopt[true]{target})
+   to avoid duplicate target names},
+  category={commandoption},
+}
+
+ at printglossoption{printgloss.prefix,
+  parent = {printunsrtglossary},
+  name = {\csoptfmt{prefix}},
+  user1 = {\margm{label}},
+  description = {locally redefine \cs{glolinkprefix} for the item
+  hypertargets and for any entry reference or cross-reference hyperlinks},
+  category={commandoption},
+}
+
+ at printglossoption{printgloss.nonumberlist,
+  parent = {printunsrtglossary},
+  name = {\csoptfmt{no\-number\-list}},
+  user1 = {\margm{boolean}},
+  description={locally change whether or not to display the
+   \idxpl{locationlist} (overrides \styopt{nonumberlist} package
+   option)},
+  category={commandoption},
+}
+
+ at printglossoption{printgloss.nogroupskip,
+  parent = {printunsrtglossary},
+  name = {\csoptfmt{no\-group\-skip}},
+  user1 = {\margm{boolean}},
+  description={locally change whether or not to separate groups
+  with a vertical space if the glossary style that support this option 
+   (overrides \styopt{nogroupskip} package option)},
+  category={commandoption},
+}
+
+ at printglossoption{printgloss.label,
+  parent = {printunsrtglossary},
+  name = {\csoptfmt{label}},
+  user1 = {\margm{label}},
+  description = {creates a label for this glossary by locally
+   using \code{\ics{glsxtrsetglossarylabel}\margm{label}}},
+  category={commandoption},
+}
+
+ at printglossoption{printgloss.groups,
+  parent = {printunsrtglossary},
+  name = {\csoptfmt{groups}},
+  user1 = {\margm{boolean}},
+  description = {controls whether or not \cs{printunsrtglossary}
+   (or \cs{printunsrtinnerglossary})
+   should insert letter group markup. There's no visible difference
+   for glossary styles that don't support letter groups (and
+   \styopt{nogroupskip} is in effect) or if there's no group
+   information (for example, \longarg{no-group} has been used)},
+  category={commandoption},
+}
+
+ at printglossoption{printgloss.leveloffset,
+  parent = {printunsrtglossary},
+  name = {\csoptfmt{level\-offset}},
+  user1 = {\margm{n}},
+  description = {makes the glossary style act as though each entry's
+   hierarchical level is \meta{offset} more than it actually is
+   where \meta{offset} is either \meta{n} or is locally incremented
+   by \meta{n} if \meta{n} starts with \code{++}},
+  category={commandoption},
+}
+
+ at glscommand{glsxtrsetglossarylabel,
+  name={\csfmt{gls\-xtr\-set\-glos\-sary\-label}},
+  user1={\margm{label}},
+  description={sets the label for subsequent glossaries
+   (should be scoped or updated per glossary to prevent
+   duplicate labels) and defines \ics{@currentlabelname} to the
+   glossary's \idx{toc} title. This is an alternative to the
+   \styopt[nameref]{numberedsection} package option or
+   \printglossopt{label} \ics{printunsrtglossary} option},
+  topics={crossrefcommands},
+  note={\styfmt{glossaries-extra} v1.39+},
+  category={command}
+}
+
+ at glscommand{cs.makeglossaries,
+  name={\csfmt{make\-glos\-saries}},
+  user1={},
+  description={opens associated glossary files to be processed
+   by \idx{makeindex} or \idx{xindy}},
+  topics={indexing},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{makenoidxglossaries,
+  name={\csfmt{make\-noidx\-glos\-saries}},
+  user1={},
+  description={indicates that \TeX\ should be used to sort and
+   collate the glossary information instead of using an
+   external application; this command should not be used
+   with \bibgls},
+  topics={indexing},
+  note={\styfmt{glossaries} v4.04+},
+  category={command}
+}
+
+ at glscommand{printglossary,
+  name={\csfmt{print\-glos\-sary}},
+  user1={\oargm{options}},
+  description={inputs file created by \idx{makeindex} or \idx{xindy}},
+  topics={glossrefs},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{printglossaries,
+  name={\csfmt{print\-glos\-saries}},
+  user1={},
+  description={iterates over all non-ignored defined glossaries
+   and performs \cs{printglossary} for each one},
+  topics={glossrefs,loop},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{printnoidxglossary,
+  name={\csfmt{print\-noidx\-glos\-sary}},
+  user1={\oargm{options}},
+  description={uses \TeX\ to sort, collate and list the glossary},
+  topics={glossrefs},
+  note={\styfmt{glossaries} v4.04+},
+  category={command}
+}
+
+ at glscommand{printnoidxglossaries,
+  name={\csfmt{print\-noidx\-glos\-saries}},
+  user1={},
+  description={iterates over all non-ignored defined glossaries
+   and performs \cs{printnoidxglossary} for each one},
+  topics={glossrefs,loop},
+  note={\styfmt{glossaries} v4.04+},
+  category={command}
+}
+
+ at command{makefirstuc,
+  name={\csfmt{make\-first\-uc}},
+  user1={\margm{text}},
+  description={converts the first letter of \meta{text} to \idx{uppercase}},
+  note={\styfmt{mfirstuc}\texparserdefnote},
+  category={command}
+}
+
+ at command{xmakefirstuc,
+  name={\csfmt{xmake\-first\-uc}},
+  user1={\margm{text}},
+  description={applies \cs{makefirstuc} with one level expansion
+   of the first token of \meta{text}},
+  note={\styfmt{mfirstuc}\texparserdefnote\ v1.01+},
+  category={command}
+}
+
+ at glscommand{ac,
+  name={\csfmt{ac}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={equivalent to \cs{gls}},
+  topics={entryrefcommands,linkcommands,indexing,abbreviationcommands,shortcutcommands},
+  note={\styfmt{glossaries-extra} \styopt{shortcuts}},
+  category={command}
+}
+
+ at glscommand{ab,
+  name={\csfmt{ab}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={equivalent to \cs{gls}},
+  topics={entryrefcommands,linkcommands,indexing,abbreviationcommands,shortcutcommands},
+  note={\styfmt{glossaries-extra} 
+  \styopt[abbreviations]{shortcuts}},
+  category={command}
+}
+
+ at glscommand{glsxtrp,
+  name={\csfmt{glsxtrp}},
+  user1={\margm{field}\margm{label}},
+  description={displays the given \meta{field} value for the entry given by 
+  \meta{label} (no hyperlinks, except in the glossary, and no indexing 
+  by default, but includes formatting, if appropriate)},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.07+},
+  category={command}
+}
+
+ at glscommand{glsps,
+  name={\csfmt{glsps}},
+  user1={\margm{label}},
+  description={shortcut for \code{\cs{glsxtrp}\marg{short}\margm{label}}},
+  topics={fieldrefcommands,shortcutcommands},
+  note={\styfmt{glossaries-extra} v1.07+},
+  category={command}
+}
+
+ at glscommand{glspt,
+  name={\csfmt{glspt}},
+  user1={\margm{label}},
+  description={shortcut for \code{\cs{glsxtrp}\marg{text}\margm{label}}},
+  topics={fieldrefcommands,shortcutcommands},
+  note={\styfmt{glossaries-extra} v1.07+},
+  category={command}
+}
+
+ at glscommand{glsxtrsetpopts,
+  name={\csfmt{glsxtrsetpopts}},
+  user1={\margm{options}},
+  description={sets the default options for \cs{glsxtrp}},
+  topics={assigncommands},
+  note={\styfmt{glossaries-extra} v1.07+},
+  category={command}
+}
+
+ at glscommand{glossxtrsetpopts,
+  name={\csfmt{glossxtrsetpopts}},
+  description={glossary hook that uses \cs{glsxtrsetpopts} 
+   to enable hyperlinks by default for \cs{glsxtrp}},
+  topics={assigncommands,hooks},
+  note={\styfmt{glossaries-extra} v1.07+},
+  category={command}
+}
+
+ at glscommand{GlsXtrFmtField,
+  name={\csfmt{Gls\-Xtr\-Fmt\-Field}},
+  user1={},
+  description={expands to the internal label of the field used
+   to store the control sequence name for use with \csref{glsxtrfmt}},
+  topics={fieldrefcommands,formattingcommands},
+  note={\styfmt{glossaries-extra} v1.12+},
+  category={command}
+}
+
+ at glscommand{glsxtrusesee,
+  name={\csfmt{gls\-xtr\-use\-see}},
+  user1={\margm{label}},
+  description={applies \cs{glsseeformat} to the entry's
+   \field{see} field if not empty},
+  topics={glossarystylecommands,crossrefcommands,loclistcommands,fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.06+},
+  category={command}
+}
+
+ at glscommand{glsxtruseseealso,
+  name={\csfmt{gls\-xtr\-use\-seealso}},
+  user1={\margm{label}},
+  description={applies \cs{glsseeformat} to the entry's
+   \field{seealso} field if not empty},
+  topics={glossarystylecommands,crossrefcommands,loclistcommands,fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.16+},
+  category={command}
+}
+
+ at glscommand{glsseelist,
+  name={\csfmt{gls\-see\-list}},
+  user1={\margm{label list}},
+  description={iterates through the comma-separated list of entry
+   labels to produce a formatted list, where each
+   item in the list is encapsulated with \cs{glsseeitem} and
+   each element is separated with \cs{glsseesep} or
+   \cs{glsseelastsep}. This command was provided for
+   the use of \cs{glsseeformat} to format cross-reference lists 
+   but may be used for any list of entry labels. This command is
+   redefined by \styfmt{glossaries-extra} (v1.47+) to additionally
+   use \cs{glsseefirstitem} and \cs{glsseelastoxfordsep}},
+  topics={formattingcommands,crossrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsxtrsetaliasnoindex,
+  name={\csfmt{gls\-xtr\-set\-alias\-noindex}},
+  user1={},
+  description={hooks into the alias \glsopt{noindex} setting},
+  topics={hooks,crossrefcommands},
+  note={\styfmt{glossaries-extra} v1.12+},
+  category={command}
+}
+
+ at glscommand{glsxtruseseealsoformat,
+  name={\csfmt{gls\-xtr\-use\-seealso\-format}},
+  user1={\margm{xr list}},
+  description={used to format the entries whose labels are 
+   given in \meta{xr list} as a list of \qt{see also}
+cross-references},
+  topics={glossarystylecommands,crossrefcommands,loclistcommands,formattingcommands},
+  note={\styfmt{glossaries-extra} v1.16+},
+  category={command}
+}
+
+ at glscommand{glsxtrindexseealso,
+  name={\csfmt{gls\-xtr\-index\-seealso}},
+  user1={\margm{label}\margm{xr list}},
+  description={indexes a \qt{see also} cross-reference},
+  topics={indexing,crossrefcommands},
+  note={\styfmt{glossaries-extra} v1.16+},
+  category={command}
+}
+
+ at glscommand{glssee,
+  name={\csfmt{glssee}},
+  user1={\oargm{tag}\margm{label}\margm{xr label list}},
+  description={indexes a \qt{see} cross-reference},
+  topics={indexing,crossrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsxtrseelist,
+  name={\csfmt{gls\-xtr\-see\-list}},
+  user1={\margm{xr label list}},
+  description={formats the list of cross-reference labels, without
+the initial \qt{see} tag},
+  topics={glossarystylecommands,crossrefcommands,loclistcommands,formattingcommands},
+  note={\styfmt{glossaries-extra} v1.16+},
+  category={command}
+}
+
+ at glscommand{setabbreviationstyle,
+  name={\csfmt{setabbreviationstyle}},
+  user1={\oargm{category}\margm{style-name}},
+  description={sets the abbreviation style to \meta{style-name} for the
+given \meta{category}, must be used before the abbreviation is
+defined},
+  topics={abbreviationcommands,assigncommands},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{glshex,
+  name={\csfmt{glshex}},
+  user1={},
+  description={expands to \cs{cs.string}\cs{uhex}},
+  topics={charcommands,collationsubrules},
+  note={\styfmt{glossaries-extra} v1.21+ (moved to
+\styfmt{glossaries-extra-bib2gls} in v1.27)},
+  category={command},
+  seealso={GlsXtrResourceInitEscSequences}
+}
+
+ at glscommand{glscapturedgroup,
+  name={\csfmt{glscapturedgroup}},
+  description={expands to \cs{cs.string}\idx{dollarchar}},
+  topics={charcommands},
+  note={\styfmt{glossaries-extra-bib2gls} v1.31+},
+  category={command}
+}
+
+ at glscommand{glshashchar,
+  name={\csfmt{glshashchar}},
+  description={expands to a literal hash character \idx{hashchar}},
+  topics={charcommands},
+  note={\styfmt{glossaries-extra-bib2gls}\texparserdefnote\ v1.49+},
+  category={command}
+}
+
+ at glscommand{GlsXtrBibTeXEntryAliases,
+  name={\csfmt{Gls\-Xtr\-Bib\-TeX\-Entry\-Aliases}},
+  user1={},
+  description={expands to the set of common entry aliases for
+\atentry{bibtexentry}},
+  topics={definingterms},
+  note={\styfmt{glossaries-extra-bib2gls} v1.29+},
+  category={command}
+}
+
+ at glscommand{GlsXtrProvideBibTeXFields,
+  name={\csfmt{Gls\-Xtr\-Provide\-Bib\-TeX\-Fields}},
+  user1={},
+  description={defines the standard \BibTeX\ fields using
+   \cs{glsaddstoragekey}},
+  topics={definingterms,fieldrefcommands},
+  note={\styfmt{glossaries-extra-bib2gls} v1.29+},
+  category={command}
+}
+
+ at glscommand{glsxtrprovidecommand,
+  name={\csfmt{gls\-xtr\-provide\-command}},
+  user1={\margm{cs}\oargm{n}\oargm{def}\margm{code}},
+  description={behaves like \cs{providecommand} in the document but
+   like \cs{renewcommand} in \bibgls},
+  topics={providingcommands},
+  note={\styfmt{glossaries-extra-bib2gls}\texparserdefnote\ v1.27+},
+  category={command}
+}
+
+ at glscommand{glsrenewcommand,
+  name={\csfmt{gls\-re\-new\-command}},
+  user1={\margm{cs}\oargm{n}\oargm{def}\margm{code}},
+  description={behaves like \cs{renewcommand} but only generates a
+warning rather than an error if the command isn't already defined},
+  topics={providingcommands},
+  note={\styfmt{glossaries-extra-bib2gls}\texparserdefnote\ v1.37+},
+  category={command}
+}
+
+ at glscommand{glsxtrresourceinit,
+  name={\csfmt{gls\-xtr\-resource\-init}},
+  user1={},
+  description={provides code that locally redefines commands 
+   during the protected write operation performed by 
+   \csref{glsxtrresourcefile}},
+  topics={hooks},
+  note={\styfmt{glossaries-extra} v1.21+},
+  category={command},
+  seealso={GlsXtrResourceInitEscSequences}
+}
+
+% QUARKS
+
+ at glscommand{GlsXtrResourceInitEscSequences,
+  name={\csfmt{Gls\-Xtr\-Resource\-Init\-Esc\-Sequences}},
+  user1={},
+  description={locally redefines \idx{quark} commands, such as \cs{uhex} and
+  \gls{NULL}, that shouldn't expand in
+  resource options as they have special meanings for some options.
+  May be added to the definition of \gls{glsxtrresourceinit} if
+  required},
+  topics={assigncommands},
+  note={\styfmt{glossaries-extra-bib2gls} v1.51+},
+  category={command}
+}
+
+ at mainglscommand{cs,
+  name={\csfmt{cs}},
+  user1={\margm{csname}},
+  description={locally defined by \gls{GlsXtrResourceInitEscSequences} to
+   expand to the literal string \csfmt{csname} when the resource
+   options are written to the \ext{aux} file. This technically isn't
+   a \bibgls\ \idx{quark}, although it's included in that category, 
+   as it's not looked for by \bibgls},
+  topics={quark},
+  category={command}
+}
+
+ at mainglscommand{NULL,
+  name={\csfmt{NULL}},
+  user1={},
+  description={a \idx{quark} to denote a
+  null value in \csopt{assign-fields} conditionals. This token needs
+  to be protected from expansion in the argument of
+  \gls{GlsXtrLoadResources}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={quark}
+}
+
+ at mainglscommand{IN,
+  name={\csfmt{IN}},
+  user1={},
+  description={a \idx{quark} to denote \qt{is a substring} conditional 
+  in \csopt{assign-fields} conditionals. This token needs
+  to be protected from expansion in the argument of
+  \gls{GlsXtrLoadResources}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={quark}
+}
+
+ at mainglscommand{NIN,
+  name={\csfmt{NIN}},
+  user1={},
+  description={a \idx{quark} to denote \qt{is not a substring}
+conditional in \csopt{assign-fields} conditionals. This token needs
+  to be protected from expansion in the argument of
+  \gls{GlsXtrLoadResources}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={quark}
+}
+
+ at mainglscommand{PREFIXOF,
+  name={\csfmt{PREFIX\-OF}},
+  user1={},
+  description={a \idx{quark} to denote \qt{is a prefix of} conditional 
+  in \csopt{assign-fields} conditionals. This token needs
+  to be protected from expansion in the argument of
+  \gls{GlsXtrLoadResources}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={quark}
+}
+
+ at mainglscommand{NOTPREFIXOF,
+  name={\csfmt{NOT\-PREFIX\-OF}},
+  user1={},
+  description={a \idx{quark} to denote \qt{is not a prefix of} conditional 
+  in \csopt{assign-fields} conditionals. This token needs
+  to be protected from expansion in the argument of
+  \gls{GlsXtrLoadResources}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={quark}
+}
+
+ at mainglscommand{SUFFIXOF,
+  name={\csfmt{SUFFIX\-OF}},
+  user1={},
+  description={a \idx{quark} to denote \qt{is a suffix of} conditional 
+  in \csopt{assign-fields} conditionals. This token needs
+  to be protected from expansion in the argument of
+  \gls{GlsXtrLoadResources}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={quark}
+}
+
+ at mainglscommand{NOTSUFFIXOF,
+  name={\csfmt{NOT\-SUFFIX\-OF}},
+  user1={},
+  description={a \idx{quark} to denote \qt{is not a suffix of} conditional 
+  in \csopt{assign-fields} conditionals. This token needs
+  to be protected from expansion in the argument of
+  \gls{GlsXtrLoadResources}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={quark}
+}
+
+ at mainglscommand{LEN,
+  name={\csfmt{LEN}},
+  user1={\margm{element-list}},
+  description={a \idx{quark} to denote the number of (detokenized) characters in
+  a value in \csopt{assign-fields}. This token needs
+  to be protected from expansion in the argument of
+  \gls{GlsXtrLoadResources}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={quark}
+}
+
+ at mainglscommand{CAT,
+  name={\csfmt{CAT}},
+  user1={\margm{element-list}},
+  description={a \idx{quark} to denote a string concatenation 
+  (see \sectionref{sec:optstringconcat})
+  in the conditional parts of \csopt{assign-fields}. This token needs
+  to be protected from expansion in the argument of
+  \gls{GlsXtrLoadResources}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={quark}
+}
+
+ at mainglscommand{MGP,
+  name={\csfmt{MGP}},
+  user1={\margm{group-ref}},
+  description={a \idx{quark} to denote a reference to a group
+   from a \gls{ext1.regular-expression} match. This token needs
+  to be protected from expansion in the argument of
+  \gls{GlsXtrLoadResources}. The \meta{group-ref} may be either an
+  integer index or a textual name},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={quark}
+}
+
+ at mainglscommand{CS,
+  name={\csfmt{CS}},
+  user1={\margm{element-list}},
+  description={a \idx{quark} to denote a control sequence element in 
+  \csopt{assign-fields}. This token needs
+  to be protected from expansion in the argument of
+  \gls{GlsXtrLoadResources}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={quark}
+}
+
+ at mainglscommand{TRIM,
+  name={\csfmt{TRIM}},
+  user1={\margm{element-list}},
+  description={a \idx{quark} to denote a trimmed element in 
+  \csopt{assign-fields}. This token needs
+  to be protected from expansion in the argument of
+  \gls{GlsXtrLoadResources}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={quark}
+}
+
+ at mainglscommand{INTERPRET,
+  name={\csfmt{INTER\-PRET}},
+  user1={\margm{element-list}},
+  description={a \idx{quark} to denote an interpreted element in 
+  \csopt{assign-fields}. This token needs
+  to be protected from expansion in the argument of
+  \gls{GlsXtrLoadResources}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={quark}
+}
+
+ at mainglscommand{INTERPRETNOREPL,
+  name={\csfmt{INTER\-PRET\-NO\-REPL}},
+  user1={\margm{element-list}},
+  description={as \gls{INTERPRET} but doesn't replace \TeX\ special characters},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={quark}
+}
+
+ at mainglscommand{REPLACESPCHARS,
+  name={\csfmt{RE\-PLACE\-SP\-CHARS}},
+  user1={\margm{element-list}},
+  description={a \idx{quark} that replaces \TeX\ special characters with commands like
+  \gls{glsbackslash} which expand to the literal character},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={quark}
+}
+
+ at mainglscommand{LABELIFY,
+  name={\csfmt{LABEL\-IFY}},
+  user1={\margm{element-list}},
+  description={a \idx{quark} to denote a label element in 
+  \csopt{assign-fields}. This token needs
+  to be protected from expansion in the argument of
+  \gls{GlsXtrLoadResources}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={quark}
+}
+
+ at mainglscommand{LABELIFYLIST,
+  name={\csfmt{LABEL\-IFY\-LIST}},
+  user1={\margm{element-list}},
+  description={a \idx{quark} to denote a label-list element in 
+  \csopt{assign-fields}. This token needs
+  to be protected from expansion in the argument of
+  \gls{GlsXtrLoadResources}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={quark}
+}
+
+ at mainglscommand{LC,
+  name={\csfmt{LC}},
+  user1={\margm{element-list}},
+  description={a \idx{quark} to denote a \idx{lowercase} change in 
+  \csopt{assign-fields} syntax. This token needs
+  to be protected from expansion in the argument of
+  \gls{GlsXtrLoadResources}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={quark}
+}
+
+ at mainglscommand{UC,
+  name={\csfmt{UC}},
+  user1={\margm{element-list}},
+  description={a \idx{quark} to denote an \idx{uppercase} change in 
+  \csopt{assign-fields} syntax. This token needs
+  to be protected from expansion in the argument of
+  \gls{GlsXtrLoadResources}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={quark}
+}
+
+ at mainglscommand{FIRSTLC,
+  name={\csfmt{FIRST\-LC}},
+  user1={\margm{element-list}},
+  description={a \idx{quark} to denote a first-letter \idx{lowercase}
+   change in \csopt{assign-fields} syntax. This token needs
+  to be protected from expansion in the argument of
+  \gls{GlsXtrLoadResources}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={quark}
+}
+
+ at mainglscommand{FIRSTUC,
+  name={\csfmt{FIRST\-UC}},
+  user1={\margm{element-list}},
+  description={a \idx{quark} to denote a first-letter \idx{uppercase} 
+  change in \csopt{assign-fields} syntax. This token needs
+  to be protected from expansion in the argument of
+  \gls{GlsXtrLoadResources}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={quark}
+}
+
+ at mainglscommand{TITLE,
+  name={\csfmt{TITLE}},
+  user1={\margm{element-list}},
+  description={a \idx{quark} to denote a \idx{titlecase} change in 
+  \csopt{assign-fields} syntax. This token needs
+  to be protected from expansion in the argument of
+  \gls{GlsXtrLoadResources}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={quark}
+}
+
+ at mainglscommand{NOCHANGE,
+  name={\csfmt{NO\-CHANGE}},
+  user1={\margm{element-list}},
+  description={a \idx{quark} to denote no \idx{case-change} in 
+  \csopt{assign-fields} syntax. This token needs
+  to be protected from expansion in the argument of
+  \gls{GlsXtrLoadResources}. It's not defined by
+  \gls{GlsXtrResourceInitEscSequences}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={quark}
+}
+
+ at mainglscommand{uhex,
+  name={\csfmt{u}},
+  user1={\meta{hex}},
+  description={a \idx{quark} that identifies a character by its hexadecimal code in the
+    values of some (but not all) resource options},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={hex code quark}
+}
+
+ at command{n,
+  name={\csfmt{n}},
+  user1={},
+  description={indicates a newline character in \idxpl{regex}},
+  category={command},
+  annote={newline}
+}
+
+ at mainglscommand{quark.dot,
+  name={\csfmt{.}},
+  user1={},
+  description={a \idx{quark} that identifies a literal dot (\idx{periodchar}) in a \gls{ext1.regular-expression}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={\idx{regexp} quark}
+}
+
+ at mainglscommand{quark.backslash,
+  name={\csfmt{\glsbackslash}},
+  user1={},
+  description={a \idx{quark} that identifies a literal backslash \idx{backslashchar} in a \gls{ext1.regular-expression}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={\idx{regexp} quark}
+}
+
+ at mainglscommand{quark.slash,
+  name={\csfmt{/}},
+  user1={},
+  description={a \idx{quark} that identifies a literal slash \idx{slashchar} in a \gls{ext1.regular-expression}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={\idx{regexp} quark}
+}
+
+ at mainglscommand{quark.pipe,
+  name={\csfmt{|}},
+  user1={},
+  description={a \idx{quark} that identifies a literal pipe character \idx{pipechar} in a \gls{ext1.regular-expression}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={\idx{regexp} quark}
+}
+
+ at mainglscommand{quark.amp,
+  name={\csfmt{\&}},
+  user1={},
+  description={a \idx{quark} that identifies a literal ampersand \idx{ampchar} in a \gls{ext1.regular-expression}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={\idx{regexp} quark}
+}
+
+ at mainglscommand{quark.plus,
+  name={\csfmt{+}},
+  user1={},
+  description={a \idx{quark} that identifies a literal plus \idx{pluschar} in a \gls{ext1.regular-expression}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={\idx{regexp} quark}
+}
+
+ at mainglscommand{quark.lt,
+  name={\csfmt{<}},
+  user1={},
+  description={a \idx{quark} that identifies a literal less than \idx{ltchar} in a \gls{ext1.regular-expression}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={\idx{regexp} quark}
+}
+
+ at mainglscommand{quark.gt,
+  name={\csfmt{>}},
+  user1={},
+  description={a \idx{quark} that identifies a literal greater than \idx{gtchar} in a \gls{ext1.regular-expression}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={\idx{regexp} quark}
+}
+
+ at mainglscommand{quark.star,
+  name={\csfmt{*}},
+  user1={},
+  description={a \idx{quark} that identifies a literal star \idx{starchar} in a \gls{ext1.regular-expression}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={\idx{regexp} quark}
+}
+
+ at mainglscommand{quark.dollar,
+  name={\csfmt{\$}},
+  user1={},
+  description={a \idx{quark} that identifies a literal dollar \idx{dollarchar} in a \gls{ext1.regular-expression}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={\idx{regexp} quark}
+}
+
+ at mainglscommand{quark.circum,
+  name={\csfmt{\char`\^}},
+  user1={},
+  description={a \idx{quark} that identifies a literal circumflex \idx{circumchar} in a \gls{ext1.regular-expression}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={\idx{regexp} quark}
+}
+
+ at mainglscommand{quark.tilde,
+  name={\csfmt{\char`\~}},
+  user1={},
+  description={a \idx{quark} that identifies a literal tilde \idx{tildechar} in a \gls{ext1.regular-expression}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={\idx{regexp} quark}
+}
+
+ at mainglscommand{quark.openparen,
+  name={\csfmt{\rangestartmark}},
+  user1={},
+  description={a \idx{quark} that identifies a literal open parenthesis \idx{openparenchar} in a \gls{ext1.regular-expression}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={\idx{regexp} quark}
+}
+
+ at mainglscommand{quark.closeparen,
+  name={\csfmt{\rangeendmark}},
+  user1={},
+  description={a \idx{quark} that identifies a literal close parenthesis \idx{closeparenchar} in a \gls{ext1.regular-expression}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={\idx{regexp} quark}
+}
+
+ at mainglscommand{quark.opensq,
+  name={\csfmt{[}},
+  user1={},
+  description={a \idx{quark} that identifies a literal open square bracket \idx{opensqchar} in a \gls{ext1.regular-expression}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={\idx{regexp} quark}
+}
+
+ at mainglscommand{quark.closesq,
+  name={\csfmt{]}},
+  user1={},
+  description={a \idx{quark} that identifies a literal close square bracket \idx{closesqchar} in a \gls{ext1.regular-expression}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={\idx{regexp} quark}
+}
+
+ at mainglscommand{quark.doublequote,
+  name={\csfmt{"}},
+  user1={},
+  description={a \idx{quark} that identifies a literal double-quote \idx{doublequotechar}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={quark}
+}
+
+ at mainglscommand{quark.hyphen,
+  name={\csfmt{-}},
+  user1={},
+  description={a \idx{quark} that identifies a literal hyphen \idx{hyphenchar} in a \gls{ext1.regular-expression}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={\idx{regexp} quark}
+}
+
+ at mainglscommand{quark.question,
+  name={\csfmt{?}},
+  user1={},
+  description={a \idx{quark} that identifies a literal question mark \idx{questionchar} in a \gls{ext1.regular-expression}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={\idx{regexp} quark}
+}
+
+ at mainglscommand{quark.hash,
+  name={\csfmt{\#}},
+  user1={},
+  description={a \idx{quark} that identifies a literal hash \idx{hashchar} in a \gls{ext1.regular-expression}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={\idx{regexp} quark}
+}
+
+ at mainglscommand{quark.colon,
+  name={\csfmt{:}},
+  user1={},
+  description={a \idx{quark} that identifies a literal colon
+  \idx{colonchar} in a \gls{ext1.regular-expression}},
+  note={\bibgls\ \idx{quark}},
+  topics={quark},
+  category={command},
+  annote={\idx{regexp} quark}
+}
+
+ at mainglscommand{GlsXtrDefaultResourceOptions,
+  name={\csfmt{Gls\-Xtr\-Default\-Resource\-Options}},
+  user1={},
+  description={provides default options for 
+   \csref{glsxtrresourcefile}},
+  topics={hooks},
+  note={\styfmt{glossaries-extra} v1.40+},
+  category={command}
+}
+
+ at glscommand{glsxtrgroupfield,
+  name={\csfmt{gls\-xtr\-group\-field}},
+  user1={},
+  description={expands to the field label used to store the
+   entry group labels},
+  topics={fieldrefcommands,groupcommands},
+  note={\styfmt{glossaries-extra} v1.21+},
+  category={command}
+}
+
+ at glscommand{glolinkprefix,
+  name={\csfmt{glo\-link\-prefix}},
+  user1={},
+  description={target name prefix used in entry hyperlinks},
+  topics={linkcommands,hooks},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{setglossarypreamble,
+  name={\csfmt{set\-glossary\-preamble}},
+  user1={\oargm{type}\margm{code}},
+  description={sets \meta{code} as the preamble for the given
+glossary (or the default of \meta{type} is omitted)},
+  topics={glossrefs,hooks,glossarystylecommands},
+  note={\styfmt{glossaries}},
+  seealso={glossarypreamble},
+  category={command}
+}
+
+ at glscommand{apptoglossarypreamble,
+  name={\csfmt{app\-to\-glossary\-preamble}},
+  user1={\oargm{type}\margm{code}},
+  description={appends \meta{code} to the preamble for the given
+glossary (or the default of \meta{type} is omitted)},
+  topics={glossrefs,hooks,glossarystylecommands},
+  note={\styfmt{glossaries-extra}},
+  seealso={glossarypreamble},
+  category={command}
+}
+
+ at glscommand{glossarypreamble,
+  name={\csfmt{glossary\-preamble}},
+  description={the preamble for all glossaries except 
+  those that have the preamble explicitly set with
+  \cs{apptoglossarypreamble}},
+  topics={glossrefs,hooks,glossarystylecommands},
+  note={\styfmt{glossaries}},
+  seealso={apptoglossarypreamble},
+  category={command}
+}
+
+ at glscommand{glossarypostamble,
+  name={\csfmt{glossary\-post\-amble}},
+  description={the postamble that's placed after each glossary},
+  topics={glossrefs,hooks,glossarystylecommands},
+  note={\styfmt{glossaries}},
+  seealso={apptoglossarypreamble},
+  category={command}
+}
+
+ at glscommand{glsbackslash,
+  name={\csfmt{glsbackslash}},
+  user1={},
+  description={expands to a literal backslash \idx{backslashchar} 
+   character},
+  topics={charcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsopenbrace,
+  name={\csfmt{glsopenbrace}},
+  user1={},
+  description={expands to a literal open brace \idx{openbracechar} 
+   character},
+  topics={charcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsclosebrace,
+  name={\csfmt{glsclosebrace}},
+  user1={},
+  description={expands to a literal close brace \idx{closebracechar} 
+   character},
+  topics={charcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glspercentchar,
+  name={\csfmt{glspercentchar}},
+  user1={},
+  description={expands to a literal percent character \idx{percentchar} 
+   character},
+  topics={charcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{glsquote,
+  name={\csfmt{glsquote}},
+  user1={\margm{text}},
+  description={encapsulates \meta{text} with literal straight
+   double-quotes \texttt{\glsquote{\meta{text}}}},
+  topics={charcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glstildechar,
+  name={\csfmt{glstildechar}},
+  user1={},
+  description={expands to a literal tilde \texttt{\glstildechar} character},
+  topics={charcommands},
+  note={\styfmt{glossaries}\texparserdefnote},
+  category={command}
+}
+
+ at glscommand{descriptionname,
+  name={\csfmt{description\-name}},
+  user1={},
+  description={language-sensitive name used for the description 
+   header for some glossary styles},
+  topics={fixedtextcommands,glossarystylecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{pagelistname,
+  name={\csfmt{page\-list\-name}},
+  user1={},
+  description={language-sensitive name used for the location list 
+   header for some glossary styles},
+  topics={fixedtextcommands,glossarystylecommands,loclistcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at command{seealsoname,
+  name={\csfmt{see\-also\-name}},
+  user1={},
+  description={language sensitive \qt{see also} text (as from v1.42
+   this will be defined to \cs{alsoname} if that command exists)},
+  topics={fixedtextcommands,glossarystylecommands,loclistcommands},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at command{alsoname,
+  name={\csfmt{also\-name}},
+  user1={},
+  description={language sensitive \qt{see also} text},
+  topics={fixedtextcommands},
+  note={language packages},
+  category={command}
+}
+
+ at glscommand{glossaryname,
+  name={\csfmt{glossary\-name}},
+  user1={},
+  description={language-sensitive name used for the title of the default
+   \code{main} glossary},
+  topics={fixedtextcommands,glossarystylecommands},
+  note={\styfmt{glossaries} or language packages},
+  category={command}
+}
+
+ at glscommand{indexname,
+  name={\csfmt{index\-name}},
+  user1={},
+  description={language-sensitive name used for the title of the 
+  glossary created with the \styopt{index} package option},
+  topics={fixedtextcommands,glossarystylecommands},
+  note={\styfmt{glossaries} or language packages},
+  category={command}
+}
+
+ at glscommand{acronymname,
+  name={\csfmt{acronym\-name}},
+  user1={},
+  description={language-sensitive name used for the title of the
+   glossary created with the \styopt{acronym} or \styopt{acronyms} 
+   package option},
+  topics={fixedtextcommands,glossarystylecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{abbreviationname,
+  name={\csfmt{ab\-bre\-vi\-a\-tion\-name}},
+  user1={},
+  description={language-sensitive name used for the title of the
+   glossary created with the \styopt{abbreviations} package option},
+  topics={fixedtextcommands,glossarystylecommands},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{GlsXtrForeignText,
+  name={\csfmt{Gls\-Xtr\-Foreign\-Text}},
+  user1={\margm{label}\margm{text}},
+  description={encapsulates \meta{text} in \csfmt{foreignlanguage}
+  where the language label is obtained from the locale tag
+  given in the field identified by \cs{GlsXtrForeignTextField}},
+  topics={formattingcommands,fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.32+},
+  category={command}
+}
+
+ at glscommand{GlsXtrForeignTextField,
+  name={\csfmt{Gls\-Xtr\-Foreign\-Text\-Field}},
+  description={used by \cs{GlsXtrForeignText} to identify
+   the field containing the locale tag},
+  topics={fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.32+},
+  category={command}
+}
+
+ at glscommand{glsxtrparen,
+  name={\csfmt{gls\-xtr\-paren}},
+  user1={\margm{text}},
+  description={used to markup parenthetical material, such as
+   in \cs{glsxtrpostlinkAddDescOnFirstUse} or in the
+  \abbrstyle{long-short} and \abbrstyle{short-long} abbreviation
+  styles},
+  topics={formattingcommands},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at glscommand{glsxtrpostdescabbreviation,
+  name={\csfmt{gls\-xtr\-post\-desc\-abbreviation}},
+  user1={},
+  description={hook used after the description is displayed in the
+   glossary for entries that have the
+   \field{category} set to \code{abbreviation}},
+  topics={hooks,abbreviationcommands},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{glsxtrpostdescsymbol,
+  name={\csfmt{gls\-xtr\-post\-desc\-symbol}},
+  user1={},
+  description={hook used after the description is displayed in the
+   glossary for entries that have the
+   \field{category} set to \code{symbol}},
+  topics={hooks},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{glsxtrpostdescgeneral,
+  name={\csfmt{gls\-xtr\-post\-desc\-general}},
+  user1={},
+  description={hook used after the description is displayed in the
+   glossary for entries that have the
+   \field{category} set to \code{general}},
+  topics={hooks},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{glsxtrpostdesccategory,
+  name={\csfmt{gls\-xtr\-post\-desc\-\meta{category}}},
+  user1={},
+  description={hook used after the description is displayed in the
+   glossary for entries that have the
+   \field{category} set to \meta{category}. Common category hooks 
+   such as \cs{glsxtrpostdescgeneral} are provided by
+   \styfmt{glossaries-extra}.  If required,
+   this hook can be defined with \cs{glsdefpostdesc}},
+  topics={hooks,glossarystylecommands},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{glsxtrpostnamecategory,
+  name={\csfmt{gls\-xtr\-post\-name\-\meta{category}}},
+  user1={},
+  description={hook used by \cs{glossentryname} for entries 
+   that have the \field{category} set to \meta{category}. 
+   If required, this hook can be defined with \cs{glsdefpostname}},
+  topics={hooks,glossarystylecommands},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{glsxtrpostlinkcategory,
+  name={\csfmt{gls\-xtr\-post\-link\-\meta{category}}},
+  user1={},
+  description={hook used after commands like \cs{gls} 
+   for entries that have the
+   \field{category} set to \meta{category}. If required,
+   this hook can be defined with \cs{glsdefpostlink}},
+  topics={hooks},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{GlsXtrFmtDefaultOptions,
+  name={\csfmt{Gls\-Xtr\-Fmt\-Default\-Options}},
+  user1={},
+  description={the default options used by \csref{glsxtrfmt}},
+  topics={formattingcommands,indexing},
+  note={\styfmt{glossaries-extra} v1.12+},
+  category={command}
+}
+
+ at glscommand{glslink,
+  name={\csfmt{glslink}},
+  user1={\oargm{options}\margm{label}\margm{text}},
+  description={links to the entry's definition in the glossary with
+   the given link text without altering the first use flag},
+  topics={entryrefcommands,linkcommands},
+  note={\styfmt{glossaries}},
+  seealso={glsdisp},
+  category={command}
+}
+
+ at glscommand{glsdisp,
+  name={\csfmt{glsdisp}},
+  user1={\oargm{options}\margm{label}\margm{text}},
+  description={links to the entry's definition in the glossary with
+   the given link text and marks the entry as having been used.
+   The options are the same as for \cs{glslink}},
+  topics={entryrefcommands,linkcommands},
+  note={\styfmt{glossaries}},
+  seealso={glslink},
+  category={command}
+}
+
+ at glscommand{dglslink,
+  name={\csfmt{dgls\-link}},
+  user1={\oargm{options}\margm{label}\margm{text}},
+  description={like \cs{glslink} but tries the prefixes
+  identified with commands like \cs{glsxtraddlabelprefix}},
+  topics={entryrefcommands,linkcommands},
+  note={\styfmt{glossaries-extra-bib2gls} v1.37+},
+  seealso={dglsdisp},
+  category={command}
+}
+
+ at glscommand{dglsdisp,
+  name={\csfmt{dgls\-disp}},
+  user1={\oargm{options}\margm{label}\margm{text}},
+  description={like \cs{glsdisp} but tries the prefixes
+  identified with commands like \cs{glsxtraddlabelprefix}},
+  topics={entryrefcommands,linkcommands},
+  note={\styfmt{glossaries-extra-bib2gls} v1.37+},
+  seealso={dglsdisp},
+  category={command}
+}
+
+ at glscommand{glsxtrshort,
+  name={\csfmt{glsxtrshort}},
+  user1={\oargm{options}\margm{label}},
+  description={links to the entry's definition in the glossary with
+   the link text obtained from the \field{short} field (using the
+   appropriate abbreviation style) without altering the first use flag},
+  topics={entryrefcommands,linkcommands,abbreviationcommands,fieldrefcommands},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{glsxtrlong,
+  name={\csfmt{glsxtrlong}},
+  user1={\oargm{options}\margm{label}},
+  description={links to the entry's definition in the glossary with
+   the link text obtained from the \field{long} field (using the
+   appropriate abbreviation style) 
+   without altering the first use flag},
+  topics={entryrefcommands,linkcommands,abbreviationcommands,fieldrefcommands},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{glsxtrfull,
+  name={\csfmt{glsxtrfull}},
+  user1={\oargm{options}\margm{label}},
+  description={links to the entry's definition in the glossary with
+   the link text obtained from the \field{long} and \field{short}
+   fields (using the appropriate abbreviation style) 
+   without altering the first use flag},
+  topics={entryrefcommands,linkcommands,abbreviationcommands},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{glsxtrword,
+  name={\csfmt{glsxtrword}},
+  user1={\margm{text}},
+  description={used to encapsulate each word in the long form of an
+abbreviation by the \catattr{markwords} attribute},
+  topics={formattingcommands,abbreviationcommands},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at glscommand{glsxtrwordsep,
+  name={\csfmt{glsxtrwordsep}},
+  description={used to mark spaces between each word in the long form of an
+  abbreviation by the \catattr{markwords} attribute},
+  topics={separatorcommands,abbreviationcommands},
+  note={\styfmt{glossaries-extra} v1.17+},
+  category={command}
+}
+
+ at glscommand{glstext,
+  name={\csfmt{glstext}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={links to the entry's definition in the glossary with
+   the link text obtained from the \field{text} field  
+   without altering the first use flag},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{Glstext,
+  name={\csfmt{Glstext}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={as \cs{glstext} but converts the first letter to
+   \idx{uppercase}},
+  topics={entryrefcommands,fieldrefcommands,linkcommands,casecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsname,
+  name={\csfmt{glsname}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={links to the entry's definition in the glossary with
+   the link text obtained from the \field{name} field  
+   without altering the first use flag},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsfirst,
+  name={\csfmt{glsfirst}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={links to the entry's definition in the glossary with
+   the link text obtained from the \field{first} field  
+   without altering the first use flag},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{Glsfirst,
+  name={\csfmt{Glsfirst}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={as \cs{glsfirst} but converts the first letter to
+  \idx{uppercase}},
+  topics={entryrefcommands,fieldrefcommands,linkcommands,casecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsplural,
+  name={\csfmt{glsplural}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={links to the entry's definition in the glossary with
+   the link text obtained from the \field{plural} field  
+   without altering the first use flag},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glssymbol,
+  name={\csfmt{glssymbol}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={links to the entry's definition in the glossary with
+   the link text obtained from the \field{symbol} field  
+   without altering the first use flag},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsdesc,
+  name={\csfmt{glsdesc}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={links to the entry's definition in the glossary with
+   the link text obtained from the \field{description} field  
+   without altering the first use flag},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsuseri,
+  name={\csfmt{glsuseri}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={links to the entry's definition in the glossary with
+   the link text obtained from the \field{user1} field  
+   without altering the first use flag},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsuserii,
+  name={\csfmt{glsuserii}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={links to the entry's definition in the glossary with
+   the link text obtained from the \field{user2} field  
+   without altering the first use flag},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsuseriii,
+  name={\csfmt{glsuseriii}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={links to the entry's definition in the glossary with
+   the link text obtained from the \field{user3} field  
+   without altering the first use flag},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsuseriv,
+  name={\csfmt{glsuseriv}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={links to the entry's definition in the glossary with
+   the link text obtained from the \field{user4} field  
+   without altering the first use flag},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsuserv,
+  name={\csfmt{glsuserv}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={links to the entry's definition in the glossary with
+   the link text obtained from the \field{user5} field  
+   without altering the first use flag},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsuservi,
+  name={\csfmt{glsuservi}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={links to the entry's definition in the glossary with
+   the link text obtained from the \field{user6} field  
+   without altering the first use flag},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at mainglscommand{rgls,
+  name={\csfmt{rgls}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={like \cs{gls} but checks for the record
+   count trigger setting (the formatting is governed by \cs{rglsformat})},
+  topics={entryrefcommands,linkcommands},
+  note={\styfmt{glossaries-extra} v1.21+},
+  category={command}
+}
+
+ at mainglscommand{rglsformat,
+  name={\csfmt{rglsformat}},
+  user1={\margm{label}\oargm{insert}},
+  description={used by \csref{rgls} if the record count
+   switch is triggered},
+  topics={formattingcommands},
+  note={\styfmt{glossaries-extra} v1.21+},
+  category={command}
+}
+
+ at glscommand{glsxtrenablerecordcount,
+  name={\csfmt{glsxtr\-enable\-record\-count}},
+  user1={},
+  description={redefines \cs{gls} etc to their \csref{rgls} counterpart},
+  topics={providingcommands},
+  note={\styfmt{glossaries-extra} v1.21+},
+  category={command}
+}
+
+ at mainglscommand{GlsXtrSetRecordCountAttribute,
+  name={\csfmt{Gls\-Xtr\-Set\-Record\-Count\-Attribute}},
+  user1={\margm{category list}\margm{value}},
+  description={sets the \catattr{recordcount} attribute to
+    \meta{value} for the given categories},
+  topics={assigncommands},
+  note={\styfmt{glossaries-extra} v1.21+},
+  category={command}
+}
+
+ at glscommand{gls,
+  name={\csfmt{gls}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={on first use displays the first use text
+   (the value of the \field{first} field
+    for general entries) and on subsequent use displays
+    the subsequent use text (the value of the \field{text} field
+    for general entries) where the text is optionally hyperlinked
+    to the relevant place in the glossary. The options are
+    the same as for \cs{glslink}},
+  topics={entryrefcommands,linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glslinkoption{gls.format,
+  name={\csoptfmt{format}},
+  user1={\margm{encap}},
+  category={commandoption},
+  description={sets the \idx{encap} for the record to 
+  \meta{encap}, optionally with the start or end range markers},
+  note={\styfmt{glossaries}},
+  parent={glslink}
+}
+
+ at glslinkoption{gls.counter,
+  name={\csoptfmt{counter}},
+  user1={\margm{counter-name}},
+  description={sets the counter to use for the record},
+  category={commandoption},
+  note={\styfmt{glossaries}},
+  parent={glslink}
+}
+
+ at glslinkoption{gls.noindex,
+  name={\csoptfmt{noindex}},
+  user1={\margm{boolean}},
+  description={indicates whether or not to suppress indexing},
+  category={commandoption},
+  note={\styfmt{glossaries-extra}},
+  parent={glslink}
+}
+
+ at glslinkoption{gls.wrgloss,
+  name={\csoptfmt{wrgloss}},
+  user1={\margm{value}},
+  description={indicates whether to write the glossary information
+  before (\csoptfmt{wrgloss\dequals before}) or after
+  (\csoptfmt{wrgloss\dequals after}) the link text (default:
+   \csoptfmt{before})},
+  category={commandoption},
+  note={\styfmt{glossaries-extra} v1.14+},
+  parent={glslink}
+}
+
+ at glslinkoption{gls.thevalue,
+  name={\csoptfmt{thevalue}},
+  user1={\margm{value}},
+  description={overrides the record value so that it's the
+  given \meta{value} not obtained from the associated counter},
+  category={commandoption},
+  note={\styfmt{glossaries-extra} v1.19+},
+  parent={glslink}
+}
+
+ at glslinkoption{gls.theHvalue,
+  name={\csoptfmt{theHvalue}},
+  user1={\margm{value}},
+  description={the hyperlink target corresponding to the value
+  of \glsopt{thevalue}, if appropriate},
+  category={commandoption},
+  note={\styfmt{glossaries-extra} v1.19+},
+  parent={glslink}
+}
+
+ at glslinkoption{gls.hyper,
+  name={\csoptfmt{hyper}},
+  user1={\margm{boolean}},
+  description={indicates whether or not to make a hyperlink to the
+  relevant glossary entry},
+  category={commandoption},
+  note={\styfmt{glossaries}},
+  parent={glslink}
+}
+
+ at glslinkoption{gls.local,
+  name={\csoptfmt{local}},
+  user1={\margm{boolean}},
+  description={if \csoptfmt{true} indicates to use \ics{glslocalunset}
+   instead of the default global \cs{glsunset} to unset the
+   \idx{firstuseflag}},
+  category={commandoption},
+  note={\styfmt{glossaries}},
+  parent={glslink}
+}
+
+ at glslinkoption{gls.textformat,
+  name={\csoptfmt{text\-format}},
+  user1={\margm{cs-name}},
+  description={if set, replaces \cs{glstextformat} with
+  the command given by the control sequence name
+  \meta{cs-name} to format the \idx{link-text}},
+  category={commandoption},
+  note={\styfmt{glossaries-extra} v1.30+},
+  parent={glslink}
+}
+
+ at glslinkoption{gls.prefix,
+  name={\csoptfmt{prefix}},
+  user1={\margm{label}},
+  description={locally changes \ics{glolinkprefix} to the
+  given \meta{label}},
+  category={commandoption},
+  note={\styfmt{glossaries-extra} v1.31+},
+  parent={glslink}
+}
+
+ at glslinkoption{gls.hyperoutside,
+  name={\csoptfmt{hyper\-out\-side}},
+  user1={\margm{boolean}},
+  description={determines whether \cs{hyperlink} should
+   be outside of \cs{glstextformat} (default
+  \csoptfmt{hyperoutside\dequals true}) or inside
+  (\csoptfmt{hyperoutside\dequals false})},
+  category={commandoption},
+  note={\styfmt{glossaries-extra} v1.21+},
+  parent={glslink}
+}
+
+ at glscommand{glspl,
+  name={\csfmt{glspl}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={as \cs{gls} but shows the plural form},
+  topics={entryrefcommands,linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{Gls,
+  name={\csfmt{Gls}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={as \cs{gls} but converts the first letter
+    of the link text to \idx{uppercase}},
+  topics={entryrefcommands,linkcommands,casecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{Glspl,
+  name={\csfmt{Glspl}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={as \cs{Gls} but shows the plural form},
+  topics={entryrefcommands,linkcommands,casecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{GLS,
+  name={\csfmt{GLS}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={as \cs{gls} but converts the link text to \idx{uppercase}},
+  topics={entryrefcommands,linkcommands,casecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{GLSpl,
+  name={\csfmt{GLSpl}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={as \cs{GLS} but shows the plural form},
+  topics={entryrefcommands,linkcommands,casecommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{pgls,
+  name={\csfmt{pgls}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={does \meta{prefix}\cs{gls}\oargm{options}\margm{label}\oargm{insert},
+  where the \meta{prefix} is obtained from the appropriate prefix
+  field},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{Pgls,
+  name={\csfmt{Pgls}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={does \meta{prefix}\cs{gls}\oargm{options}\margm{label}\oargm{insert},
+  where the \meta{prefix} is obtained from the appropriate prefix
+  field with the first letter converted to \idx{uppercase}},
+  topics={entryrefcommands,fieldrefcommands,linkcommands,casecommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{PGLS,
+  name={\csfmt{PGLS}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={does \meta{prefix}\cs{GLS}\oargm{options}\margm{label}\oargm{insert},
+  where the \meta{prefix} is obtained from the appropriate prefix
+  field with the text converted to \idx{uppercase}},
+  topics={entryrefcommands,fieldrefcommands,linkcommands,casecommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{pglspl,
+  name={\csfmt{pglspl}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={does \meta{prefix}\cs{glspl}\oargm{options}\margm{label}\oargm{insert},
+  where the \meta{prefix} is obtained from the appropriate prefix
+  field},
+  topics={entryrefcommands,fieldrefcommands,linkcommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{Pglspl,
+  name={\csfmt{Pglspl}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={does \meta{prefix}\cs{glspl}\oargm{options}\margm{label}\oargm{insert},
+  where the \meta{prefix} is obtained from the appropriate prefix
+  field with the first letter converted to \idx{uppercase}},
+  topics={entryrefcommands,fieldrefcommands,linkcommands,casecommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{PGLSpl,
+  name={\csfmt{PGLSpl}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={does \meta{prefix}\cs{GLSpl}\oargm{options}\margm{label}\oargm{insert},
+  where the \meta{prefix} is obtained from the appropriate prefix
+  field with the text converted to \idx{uppercase}},
+  topics={entryrefcommands,fieldrefcommands,linkcommands,casecommands},
+  note={\styfmt{glossaries-prefix}},
+  category={command}
+}
+
+ at glscommand{dgls,
+  name={\csfmt{dgls}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={intended for documents with a mixture of 
+   single and dual entries, this is like \cs{gls} but tries to 
+   determine the label prefix from the label prefix list},
+  topics={entryrefcommands,linkcommands},
+  note={\styfmt{glossaries-extra-bib2gls} v1.37+},
+  seealso={glsxtraddlabelprefix,glsxtrprependlabelprefix},
+  category={command}
+}
+
+ at glscommand{dglspl,
+  name={\csfmt{dglspl}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={intended for documents with a mixture of 
+   single and dual entries, this is like \cs{glspl} but tries to 
+   determine the label prefix from the label prefix list},
+  topics={entryrefcommands,linkcommands},
+  note={\styfmt{glossaries-extra-bib2gls} v1.37+},
+  seealso={glsxtraddlabelprefix,glsxtrprependlabelprefix},
+  category={command}
+}
+
+ at glscommand{dGls,
+  name={\csfmt{dGls}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={intended for documents with a mixture of 
+   single and dual entries, this is like \cs{Gls} but tries to 
+   determine the label prefix from the label prefix list},
+  topics={entryrefcommands,linkcommands,casecommands},
+  note={\styfmt{glossaries-extra-bib2gls} v1.37+},
+  seealso={glsxtraddlabelprefix,glsxtrprependlabelprefix},
+  category={command}
+}
+
+ at glscommand{dGlspl,
+  name={\csfmt{dGlspl}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={intended for documents with a mixture of 
+   single and dual entries, this is like \cs{Glspl} but tries to 
+   determine the label prefix from the label prefix list},
+  topics={entryrefcommands,linkcommands,casecommands},
+  note={\styfmt{glossaries-extra-bib2gls} v1.37+},
+  seealso={glsxtraddlabelprefix,glsxtrprependlabelprefix},
+  category={command}
+}
+
+ at glscommand{mgls,
+  name={\csfmt{mgls}},
+  user1={\oargm{options}\margm{label}\oargm{insert}},
+  description={applies \cs{gls} to each element in the set defined
+by \cs{multiglossaryentry}},
+  topics={entryrefcommands,linkcommands},
+  note={\styfmt{glossaries-extra} v1.48+},
+  category={command}
+}
+
+ at glscommand{multiglossaryentry,
+  name={\csfmt{multi\-glossary\-entry}},
+  user1={\oargm{options}\margm{multilabel}\oargm{main label}\margm{list}},
+  description={defines a set of labels (which must correspond to
+   entries that have already been defined) that can be collectively
+   referred to by commands like \cs{mgls}. The \meta{main label}
+   must be included in the comma-separated \meta{list} and indicates
+   which element is considered the main entry in the set. If
+   omitted, the last element in \meta{list} is assumed to be the
+   main element},
+  topics={definingterms},
+  note={\styfmt{glossaries-extra} v1.48+},
+  category={command}
+}
+
+ at glscommand{providemultiglossaryentry,
+  name={\csfmt{provide\-multi\-glossary\-entry}},
+  user1={\oargm{options}\margm{multilabel}\oargm{main label}\margm{list}},
+  description={as \cs{multiglossaryentry} but does nothing if the
+   label has already been defined as a \gls{ext1.compoundentry}},
+  topics={definingterms},
+  note={\styfmt{glossaries-extra} v1.48+},
+  category={command}
+}
+
+ at glscommand{multiglossaryentrysetup,
+  name={\csfmt{multi\-glossary\-entry\-set\-up}},
+  user1={\margm{options}},
+  description={setup the general options for \glspl{ext1.compoundentry}},
+  topics={assigncommands},
+  note={\styfmt{glossaries-extra} v1.48+},
+  category={command}
+}
+
+ at glscommand{glsxtrmultientryadjustedname,
+  name={\csfmt{gls\-xtr\-multi\-entry\-adjust\-ed\-name}},
+  user1={\margm{sublist1}\margm{name}\margm{sublist2}\margm{label}},
+  description={used by \csopt{compound-adjust-name} to format the
+   name using all the elements of the \gls{ext1.compoundentry} set, where
+   \meta{sublist1} is the list of \glspl{ext1.compotherlabel} before the
+   \gls{ext1.compmainlabel}, \meta{sublist2} is the list of
+   \glspl{ext1.compotherlabel} that follow the \gls{ext1.compmainlabel},
+   \meta{name} is the pre-adjustment name, and \meta{label} identifies 
+   the \gls{ext1.compoundentry}},
+  topics={formattingcommands},
+  note={\styfmt{glossaries-extra-bib2gls} v1.48+},
+  category={command}
+}
+
+ at glscommand{Glsxtrmultientryadjustedname,
+  name={\csfmt{Gls\-xtr\-multi\-entry\-adjust\-ed\-name}},
+  user1={\margm{sublist1}\margm{name}\margm{sublist2}\margm{label}},
+  description={first letter uppercase version of \cs{glsxtrmultientryadjustedname}},
+  topics={formattingcommands,casecommands},
+  note={\styfmt{glossaries-extra-bib2gls} v1.48+},
+  category={command}
+}
+
+ at glscommand{GlsXtrmultientryadjustedname,
+  name={\csfmt{Gls\-Xtr\-multi\-entry\-adjust\-ed\-name}},
+  user1={\margm{sublist1}\margm{name}\margm{sublist2}\margm{label}},
+  description={title case version of \cs{glsxtrmultientryadjustedname}},
+  topics={formattingcommands,casecommands},
+  note={\styfmt{glossaries-extra-bib2gls} v1.48+},
+  category={command}
+}
+
+ at glscommand{GLSxtrmultientryadjustedname,
+  name={\csfmt{GLS\-xtr\-multi\-entry\-adjust\-ed\-name}},
+  user1={\margm{sublist1}\margm{name}\margm{sublist2}\margm{label}},
+  description={upper case version of \cs{glsxtrmultientryadjustedname}},
+  topics={formattingcommands,casecommands},
+  note={\styfmt{glossaries-extra-bib2gls} v1.48+},
+  category={command}
+}
+
+ at glscommand{glsxtraddlabelprefix,
+  name={\csfmt{gls\-xtr\-add\-label\-prefix}},
+  user1={\margm{prefix}},
+  description={appends \meta{prefix} to the prefix label list},
+  topics={listcommands},
+  note={\styfmt{glossaries-extra-bib2gls} v1.37+},
+  seealso={dgls,glsxtrprependlabelprefix,glsxtrclearlabelprefixes},
+  category={command}
+}
+
+ at glscommand{glsxtrprependlabelprefix,
+  name={\csfmt{gls\-xtr\-prepend\-label\-prefix}},
+  user1={\margm{prefix}},
+  description={prepends \meta{prefix} to the prefix label list},
+  topics={listcommands},
+  note={\styfmt{glossaries-extra-bib2gls} v1.37+},
+  seealso={dgls,glsxtraddlabelprefix,glsxtrclearlabelprefixes},
+  category={command}
+}
+
+ at glscommand{glsxtrclearlabelprefixes,
+  name={\csfmt{gls\-xtr\-clear\-label\-prefixes}},
+  user1={\margm{prefix}},
+  description={clears the prefix label list},
+  topics={listcommands},
+  note={\styfmt{glossaries-extra-bib2gls} v1.37+},
+  seealso={glsxtraddlabelprefix,glsxtrprependlabelprefix},
+  category={command}
+}
+
+ at glscommand{glssetwidest,
+  name={\csfmt{gls\-set\-widest}},
+  user1={\oargm{level}\margm{text}},
+  description={used with the \glostyle{alttree} style to set the
+   widest entry name for the given level},
+  topics={assigncommands,glossarystylecommands},
+  note={\styfmt{glossary-tree}},
+  category={command}
+}
+
+ at glscommand{glsxtrSetWidest,
+  name={\csfmt{gls\-xtr\-Set\-Widest}},
+  user1={\margm{type}\margm{level}\margm{text}},
+  description={used by \csref{bibglssetwidest} to set the
+   widest entry name for the given level for the \glostyle{alttree}
+   style and the styles provided by \sty{glossary-longextra}},
+  topics={assigncommands,glossarystylecommands},
+  note={\styfmt{glossaries-extra-bib2gls} v1.37+},
+  seealso={glssetwidest,glslongextraSetWidest},
+  category={command}
+}
+
+ at glscommand{glsxtrSetWidestFallback,
+  name={\csfmt{gls\-xtr\-Set\-Widest\-Fallback}},
+  user1={\margm{max depth}\margm{list}},
+  description={used by \csref{bibglssetwidesttoplevelfallback} and
+   \csref{bibglssetwidestfallback} to set the
+   widest entry name for the \glostyle{alttree}
+   style and the styles provided by \sty{glossary-longextra}
+   using the commands provided by \sty{glossaries-extra-stylemods}},
+  topics={assigncommands,glossarystylecommands},
+  note={\styfmt{glossaries-extra-bib2gls} v1.37+},
+  seealso={glsFindWidestTopLevelName,glsFindWidestLevelTwo},
+  category={command}
+}
+
+ at glscommand{glslongextraSetWidest,
+  name={\csfmt{gls\-long\-extra\-Set\-Widest}},
+  user1={\margm{text}},
+  description={used with the styles provided by the
+  \sty{glossary-longextra} package to set the
+   widest entry name},
+  topics={assigncommands,glossarystylecommands},
+  note={\styfmt{glossary-longextra} v1.37+},
+  seealso={glslongextraUpdateWidest},
+  category={command}
+}
+
+ at glscommand{glslongextraUpdateWidest,
+  name={\csfmt{gls\-long\-extra\-Update\-Widest}},
+  user1={\margm{text}},
+  description={as \cs{glslongextraSetWidest} but only sets if \meta{text} is
+  wider than the current value},
+  topics={assigncommands,glossarystylecommands},
+  note={\styfmt{glossary-longextra} v1.37+},
+  category={command}
+}
+
+ at glscommand{glsupdatewidest,
+  name={\csfmt{gls\-update\-widest}},
+  user1={\oargm{level}\margm{text}},
+  description={as \cs{glssetwidest} but only sets if \meta{text} is
+wider than the current value},
+  topics={assigncommands,glossarystylecommands},
+  note={\styfmt{glossaries-extra-stylemods} v1.23+},
+  seealso={glssetwidest,eglsupdatewidest},
+  category={command}
+}
+
+ at glscommand{eglsupdatewidest,
+  name={\csfmt{egls\-update\-widest}},
+  user1={\oargm{level}\margm{text}},
+  description={as \cs{glsupdatewidest} but expands \meta{text}},
+  topics={assigncommands,glossarystylecommands},
+  note={\styfmt{glossaries-extra-stylemods} v1.23+},
+  seealso={glssetwidest,glsupdatewidest},
+  category={command}
+}
+
+ at glscommand{glsFindWidestTopLevelName,
+  name={\csfmt{gls\-Find\-Widest\-Top\-Level\-Name}},
+  user1={\oargm{glossary list}},
+  description={CamelCase synonym for \cs{glsfindwidesttoplevelname}},
+  topics={assigncommands,glossarystylecommands},
+  note={\styfmt{glossaries-extra-stylemods}},
+  seealso={glsfindwidesttoplevelname},
+  category={command}
+}
+
+ at glscommand{glsfindwidesttoplevelname,
+  name={\csfmt{gls\-find\-widest\-top\-level\-name}},
+  user1={\oargm{glossary list}},
+  description={finds the widest top-level name in the given
+glossaries},
+  topics={assigncommands,glossarystylecommands},
+  note={\styfmt{glossary-tree}},
+  category={command}
+}
+
+ at glscommand{glsFindWidestLevelTwo,
+  name={\csfmt{gls\-Find\-Widest\-Level\-Two}},
+  user1={\oargm{glossary list}},
+  description={finds the widest name in the given glossaries
+   for the top level and first two sub-levels},
+  topics={assigncommands,glossarystylecommands},
+  note={\styfmt{glossaries-extra-stylemods}},
+  seealso={glsfindwidesttoplevelname},
+  category={command}
+}
+
+ at glscommand{glsxtrbookindexname,
+  name={\csfmt{glsxtr\-book\-index\-name}},
+  user1={\margm{label}},
+  description={used with the \glostyle{bookindex} style to
+   format the entry's name},
+  topics={formattingcommands,glossarystylecommands},
+  note={\styfmt{glossary-bookindex}},
+  category={command}
+}
+
+ at glscommand{glsxtrbookindexprelocation,
+  name={\csfmt{glsxtr\-book\-index\-pre\-location}},
+  user1={\margm{label}},
+  description={used with the \glostyle{bookindex} style before the
+location list},
+  topics={formattingcommands,separatorcommands,glossarystylecommands},
+  note={\styfmt{glossary-bookindex}},
+  category={command}
+}
+
+ at glscommand{glsxtrprelocation,
+  name={\csfmt{glsxtr\-pre\-location}},
+  user1={},
+  description={used before the location list in the
+   \glostyle{bookindex} style and the styles patched by 
+   \styfmt{glossaries-extra-stylemods}},
+  topics={formattingcommands,separatorcommands,glossarystylecommands},
+  note={\styfmt{glossary-bookindex} v1.21+ and
+   \styfmt{glossaries-extra-stylemods} v1.21+},
+  category={command}
+}
+
+ at glscommand{glsabbrvfont,
+  name={\csfmt{gls\-abbrv\-font}},
+  user1={\margm{text}},
+  description={generic abbreviation font command for the short form},
+  topics={formattingcommands,abbreviationcommands},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{glslongfont,
+  name={\csfmt{gls\-long\-font}},
+  user1={\margm{text}},
+  description={generic abbreviation font command for the long form},
+  topics={formattingcommands,abbreviationcommands},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at glscommand{glsshorttok,
+  name={\csfmt{gls\-short\-tok}},
+  description={token register used in the construction of
+   acronyms or abbreviations to allow the style hooks to access the short form},
+  topics={hooks,abbreviationcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glslongtok,
+  name={\csfmt{gls\-long\-tok}},
+  description={token register used in the construction of
+   acronyms or abbreviations to allow the style hooks to access the long form},
+  topics={hooks,abbreviationcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsxtrifinmark,
+  name={\csfmt{gls\-xtr\-if\-in\-mark}},
+  user1={\margm{true}\margm{true}},
+  description={used by commands like \cs{glsfmtshort}, this expands
+  to \meta{true} in page headings and the table of contents, 
+  otherwise it expands to \meta{false}},
+  topics={conditional},
+  note={\styfmt{glossaries-extra} v1.07+},
+  category={command}
+}
+
+ at glscommand{glsxtrRevertTocMarks,
+  name={\csfmt{gls\-xtr\-Revert\-Toc\-Marks}},
+  description={restores original behaviour of \cs{tableofcontents}
+  so that \cs{glsxtrifinmark} expands to \meta{false} in the table
+  of contents},
+  topics={providingcommands},
+  note={\styfmt{glossaries-extra} v1.07+},
+  category={command}
+}
+
+ at glscommand{glstreenamefmt,
+  name={\csfmt{gls\-tree\-name\-fmt}},
+  user1={\margm{text}},
+  description={used with the tree styles to format the entry's name},
+  topics={formattingcommands,glossarystylecommands},
+  note={\styfmt{glossary-tree} v4.08+ and 
+\styfmt{glossaries-extra-stylemods} v1.31+},
+  seealso={glstreegroupheaderfmt,glstreenavigationfmt,glstreedefaultnamefmt},
+  category={command}
+}
+
+ at glscommand{glstreegroupheaderfmt,
+  name={\csfmt{gls\-tree\-group\-header\-fmt}},
+  user1={\margm{text}},
+  description={used with the tree styles to format the group headings},
+  topics={formattingcommands,glossarystylecommands},
+  note={\styfmt{glossary-tree} v4.22+ and 
+  \styfmt{glossaries-extra-stylemods} v1.31+},
+  category={command}
+}
+
+ at glscommand{glstreenavigationfmt,
+  name={\csfmt{gls\-tree\-navigation\-fmt}},
+  user1={\margm{text}},
+  description={used with the tree styles to format the navigation elements},
+  topics={formattingcommands,glossarystylecommands},
+  note={\styfmt{glossary-tree} v4.22+ and 
+  \styfmt{glossaries-extra-stylemods} v1.31+},
+  category={command}
+}
+
+ at glscommand{glstreedefaultnamefmt,
+  name={\csfmt{gls\-tree\-default\-name\-fmt}},
+  user1={\margm{text}},
+  description={used as the default format for \cs{glstreenamefmt},
+   \cs{glstreegroupheaderfmt} and \cs{glstreenavigationfmt}},
+  topics={formattingcommands,glossarystylecommands},
+  note={\styfmt{glossaries-extra-stylemods} v1.31+},
+  category={command}
+}
+
+ at glscommand{glstreeprelocation,
+  name={\csfmt{gls\-tree\-pre\-location}},
+  description={inserted before the location list for top-level
+entries in the \glostyle{tree}-like styles},
+  topics={formattingcommands,separatorcommands,glossarystylecommands},
+  note={\styfmt{glossaries-extra-stylemods} v1.21+},
+  category={command}
+}
+
+ at glscommand{glsdescwidth,
+  name={\csfmt{gls\-desc\-width}},
+  user1={},
+  description={length register used by the tabular styles to specify
+the width of the description column},
+  topics={glossarystylecommands},
+  note={\isty{glossary-long} and \isty{glossary-super}},
+  category={command}
+}
+
+ at glscommand{glsxtralttreeSymbolDescLocation,
+  name={\csfmt{gls\-xtr\-alt\-tree\-Symbol\-Desc\-Location}},
+  user1={\margm{label}\margm{location list}},
+  description={used by the \glostyle{alttree} styles to format the
+symbol, description and location},
+  topics={formattingcommands,glossarystylecommands},
+  note={\styfmt{glossaries-extra-stylemods} v1.05+},
+  category={command}
+}
+
+ at glscommand{glsxtrAltTreePar,
+  name={\csfmt{gls\-xtr\-Alt\-Tree\-Par}},
+  description={used by the \glostyle{alttree} styles to indicate a
+paragraph break that retains the hanging indent},
+  topics={formattingcommands,glossarystylecommands},
+  note={\styfmt{glossaries-extra-stylemods} v1.05+},
+  category={command}
+}
+
+ at glscommand{glsaccsupp,
+  name={\csfmt{gls\-acc\-supp}},
+  user1={\margm{accessible text}\margm{text}},
+  description={used by the accessibility support to interface with
+  the \sty{accsupp} package (use \cs{xglsaccsupp} if \meta{text}
+  needs to be fully expanded first)},
+  topics={access-support},
+  note={\styfmt{glossaries-accsupp}},
+  seealso={xglsaccsupp},
+  category={command}
+}
+
+ at glscommand{xglsaccsupp,
+  name={\csfmt{xgls\-acc\-supp}},
+  user1={\margm{accessible text}\margm{text}},
+  description={used by the accessibility support to interface with
+  the \sty{accsupp} package, where \meta{text} is fully expanded},
+  topics={access-support},
+  note={\styfmt{glossaries-accsupp}},
+  seealso={glsaccsupp},
+  category={command}
+}
+
+ at glscommand{forglsentries,
+  name={\csfmt{for\-gls\-entries}},
+  user1={\oargm{type}\margm{cs}\margm{body}},
+  description={iterates over all entries defined in the glossary
+   identified by \meta{type} (or the default, if \meta{type}
+   is omitted) and perform \meta{body} where you can use the
+   control sequence \meta{cs} to reference the current entry label},
+  topics={loop,entryrefcommands},
+  note={\styfmt{glossaries}},
+  seealso={forallglsentries},
+  category={command}
+}
+
+ at glscommand{forallglsentries,
+  name={\csfmt{for\-all\-gls\-entries}},
+  user1={\oargm{glossary-list}\margm{cs}\margm{body}},
+  description={iterates over all entries defined in the
+  comma-separated \meta{glossary-list} (or all defined non-ignored
+   glossaries if the optional argument is omitted) and perform 
+   \meta{body} where you can use the control sequence \meta{cs} to 
+   reference the current entry label},
+  topics={loop,glossrefs,entryrefcommands},
+  note={\styfmt{glossaries}},
+  seealso={forglsentries,forallglossaries},
+  category={command}
+}
+
+ at glscommand{forallglossaries,
+  name={\csfmt{for\-all\-glos\-saries}},
+  user1={\oargm{glossary-list}\margm{cs}\margm{body}},
+  description={iterates over all glossaries identified in the 
+   comma-separated \meta{glossary-list} (or all defined non-ignored
+   glossaries if the optional argument is omitted) and performs \meta{body} 
+   where you can use the control sequence \meta{cs} to reference 
+   the current glossary label},
+  topics={loop,glossrefs},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsxtrforcsvfield,
+  name={\csfmt{gls\-xtr\-for\-csv\-field}},
+  user1={\margm{label}\margm{field}\margm{handler}},
+  description={iterates over the comma-separated list
+   in the given \meta{field} for the entry identified
+   by \meta{label} and performs \meta{handler}\margm{element}
+   on each element of the list, where \meta{handler} is
+   a control sequence which takes a single argument},
+  topics={loop,fieldrefcommands,listcommands},
+  note={\styfmt{glossaries}},
+  note={\styfmt{glossaries-extra} v1.24+},
+  seealso={glsxtrendfor},
+  category={command}
+}
+
+ at glscommand{glsxtrendfor,
+  name={\csfmt{gls\-xtr\-end\-for}},
+  user1={},
+  description={may be used within the handler macro
+   of \cs{glsxtrforcsvfield} to prematurely break the loop},
+  topics={loop,listcommands},
+  note={\styfmt{glossaries-extra} v1.24+},
+  seealso={glsxtrforcsvfield,listbreak},
+  category={command}
+}
+
+ at glscommand{listbreak,
+  name={\csfmt{list\-break}},
+  user1={},
+  description={may be used within the handler macro
+   of \sty{etoolbox}'s internal list loop commands to prematurely break the loop},
+  topics={loop,listcommands},
+  note={\styfmt{etoolbox}},
+  seealso={forlistloop,glsxtrfieldforlistloop,glsxtrfielddolistloop,glsxtrendfor},
+  category={command}
+}
+
+ at glscommand{ifglossaryexists,
+  name={\csfmt{if\-glossary\-exists}},
+  user1={\margm{type}\margm{true}\margm{false}},
+  description={tests if the glossary identified by \meta{type} exists
+  and does \meta{true} if it does exists, otherwise does
+  \meta{false}. The unstarred form treats ignored glossaries as
+  non-existent},
+  topics={conditional,glossrefs},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{ifglossaryexists*,
+  name={\csfmt{if\-glossary\-exists*}},
+  user1={\margm{type}\margm{true}\margm{false}},
+  description={the starred form of \cs{ifglossaryexists} treats ignored glossaries as existing},
+  topics={conditional,glossrefs},
+  note={\styfmt{glossaries} v4.46+ (or \styfmt{glossaries-extra} v1.44+)},
+  category={command}
+}
+
+ at glscommand{ifignoredglossary,
+  name={\csfmt{if\-ignored\-glossary}},
+  user1={\margm{type}\margm{true}\margm{false}},
+  description={tests if the glossary given by \meta{type} was
+  defined as an ignored glossary},
+  topics={conditional,glossrefs},
+  note={\styfmt{glossaries} v4.08+},
+  category={command}
+}
+
+ at glscommand{GlsXtrIfInGlossary,
+  name={\csfmt{Gls\-Xtr\-If\-In\-Glossary}},
+  user1={\margm{entry-label}\margm{type}\margm{true}\margm{false}},
+  description={tests if the entry given \meta{entry-label} is in
+   the glossary identified by \meta{type}},
+  topics={conditional,glossrefs},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{glsdoifexists,
+  name={\csfmt{gls\-do\-if\-exists}},
+  user1={\margm{label}\margm{code}},
+  description={if the entry given by \meta{label} exists, \meta{code}
+  is done, otherwise an error (or warning with
+  \sty{glossaries-extra}'s \styopt[warn]{undefaction} option) is
+  triggered},
+  topics={conditional,entryrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsdoifnoexists,
+  name={\csfmt{gls\-do\-if\-no\-exists}},
+  user1={\margm{label}\margm{code}},
+  description={if the entry given by \meta{label} doesn't exist, \meta{code}
+  is done, otherwise an error (or warning with
+  \sty{glossaries-extra}'s \styopt[warn]{undefaction} option) is
+  triggered},
+  topics={conditional,entryrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsdoifexistsordo,
+  name={\csfmt{gls\-do\-if\-exists\-or\-do}},
+  user1={\margm{label}\margm{code}\margm{else code}},
+  description={if the entry given by \meta{label} exists, \meta{code}
+  is done, otherwise an error (or warning with
+  \sty{glossaries-extra}'s \styopt[warn]{undefaction} option) is
+  triggered and \meta{else code} is done},
+  topics={conditional,entryrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsdoifnoexistsordo,
+  name={\csfmt{gls\-do\-if\-no\-exists\-or\-do}},
+  user1={\margm{label}\margm{code}\margm{else code}},
+  description={if the entry given by \meta{label} doesn't exist, \meta{code}
+  is done, otherwise an error (or warning with
+  \sty{glossaries-extra}'s \styopt[warn]{undefaction} option) is
+  triggered and \meta{else code} is done},
+  topics={conditional,entryrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at command{TrackLocale,
+  name={\csfmt{Track\-Locale}},
+  user1={\margm{language tag}},
+  description={tracks the given language tag},
+  note={\styfmt{tracklang} v1.3+},
+  category={command}
+}
+
+ at command{GetTrackedDialectFromLanguageTag,
+  name={\csfmt{Get\-Tracked\-Dialect\-From\-Language\-Tag}},
+  user1={\margm{language tag}\margm{cs}},
+  description={gets the \styfmt{tracklang} dialect label from the
+given language tag and stores it in the command \meta{cs}. The
+result will be empty if there's no tracked dialect associated with
+the given language tag},
+  note={\styfmt{tracklang} v1.3+},
+  category={command}
+}
+
+ at command{TrackedDialectClosestSubMatch,
+  name={\csfmt{Tracked\-Dialect\-Closest\-Sub\-Match}},
+  description={set by \cs{GetTrackedDialectFromLanguageTag}
+  if an exact match isn't found but a partial match on the
+  root language is found},
+  note={\styfmt{tracklang} v1.3.6+},
+  category={command}
+}
+
+ at command{IfTrackedDialectHasMapping,
+  name={\csfmt{If\-Tracked\-Dialect\-Has\-Mapping}},
+  user1={\margm{tracklang label}\margm{true}\margm{false}},
+  description={tests if the \styfmt{tracklang} dialect label has
+been assigned a mapping to a language hook label},
+  note={\styfmt{tracklang} v1.3+},
+  category={command}
+}
+
+ at command{GetTrackedDialectToMapping,
+  name={\csfmt{Get\-Tracked\-Dialect\-To\-Mapping}},
+  user1={\margm{tracklang label}},
+  description={the language hook label corresponding to the given
+\sty{tracklang} label},
+  note={\styfmt{tracklang} v1.3+},
+  category={command}
+}
+
+ at glscommand{glstextformat,
+  name={\csfmt{glstextformat}},
+  user1={\margm{text}},
+  description={used by commands like \cs{gls} to format the 
+  \idx{link-text}},
+  topics={formattingcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsxtrregularfont,
+  name={\csfmt{gls\-xtr\-reg\-u\-lar\-font}},
+  user1={\margm{text}},
+  description={used by commands like \cs{gls} to format the 
+  \idx{link-text} for regular terms},
+  topics={formattingcommands},
+  note={\styfmt{glossaries-extra} v1.04+},
+  category={command}
+}
+
+ at glscommand{glsxtrabbreviationfont,
+  name={\csfmt{gls\-xtr\-abbre\-vi\-a\-tion\-font}},
+  user1={\margm{text}},
+  description={used by commands like \cs{gls} to format the 
+  \idx{link-text} for (non-regular) abbreviations},
+  topics={formattingcommands,abbreviationcommands},
+  note={\styfmt{glossaries-extra} v1.30+},
+  category={command}
+}
+
+ at glscommand{GlsXtrExpandedFmt,
+  name={\csfmt{Gls\-Xtr\-Expanded\-Fmt}},
+  user1={\margm{cs}\margm{text}},
+  description={fully expands \meta{text} and then does
+   \meta{cs}\margm{expanded text}},
+  topics={formattingcommands},
+  note={\styfmt{glossaries-extra} v1.30+},
+  category={command}
+}
+
+ at glscommand{GlsXtrStartUnsetBuffering,
+  name={\csfmt{Gls\-Xtr\-Start\-Unset\-Buffer\-ing}},
+  description={starts buffering calls to \cs{glsunset}
+   (which is internally used by commands like \cs{gls})
+   for use in code where the boolean switch causes a problem.
+   The buffer can later be processed and cleared with
+   \cs{GlsXtrStopUnsetBuffering}. The starred form
+   (added to v1.31) avoids duplicate labels in the buffer's 
+   internal list},
+  topics={entryrefcommands,conditional},
+  note={\styfmt{glossaries-extra} v1.30+},
+  seealso={GlsXtrForUnsetBufferedList},
+  category={command}
+}
+
+ at glscommand{GlsXtrStopUnsetBuffering,
+  name={\csfmt{Gls\-Xtr\-Stop\-Unset\-Buffer\-ing}},
+  description={unsets (locally with the starred form) the 
+    \idx{firstuseflag} of all the entry whose labels are stored in the
+    buffer that was started with
+   \cs{GlsXtrStartUnsetBuffering} and then clears the buffer},
+  topics={entryrefcommands,conditional},
+  note={\styfmt{glossaries-extra} v1.30+},
+  seealso={GlsXtrForUnsetBufferedList},
+  category={command}
+}
+
+ at glscommand{GlsXtrForUnsetBufferedList,
+  name={\csfmt{Gls\-Xtr\-For\-Unset\-Buffered\-List}},
+  user1 = {\margm{cs}},
+  description={iterates over 
+    all the entry whose labels are stored in the
+    buffer that was started with
+   \cs{GlsXtrStartUnsetBuffering} and implements
+   \meta{cs}\margm{label} at each iteration},
+  topics={entryrefcommands,listcommands},
+  note={\styfmt{glossaries-extra} v1.31+},
+  category={command}
+}
+
+ at glscommand{glsunset,
+  name={\csfmt{gls\-unset}},
+  user1 = {\margm{label}},
+  description={unsets the \idx{firstuseflag} so that the entry is
+marked as having been used},
+  topics={conditional},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glslocalunset,
+  name={\csfmt{gls\-local\-unset}},
+  user1 = {\margm{label}},
+  description={locally unsets the \idx{firstuseflag} so that the entry is
+marked as having been used},
+  topics={conditional},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glsreset,
+  name={\csfmt{gls\-reset}},
+  user1 = {\margm{label}},
+  description={resets the \idx{firstuseflag} so that the entry is
+marked as not used},
+  topics={conditional},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glslocalreset,
+  name={\csfmt{gls\-local\-reset}},
+  user1 = {\margm{label}},
+  description={locally resets the \idx{firstuseflag} so that the entry is
+marked as not used},
+  topics={conditional},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glspatchtabularx,
+  name={\csfmt{gls\-patch\-tab\-ularx}},
+  description={preamble command that will patch the \env{tabularx}
+   environment to deal with the problem of unsetting the
+  \idx{firstuseflag} either explicitly with \cs{glsunset} or
+  implicitly through commands like \cs{gls} (does nothing if
+  \isty{tabularx} hasn't been loaded)},
+  topics={hooks,entryrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at command{TrackLangLastTrackedDialect,
+  name={\csfmt{Track\-Lang\-Last\-Tracked\-Dialect}},
+  user1={},
+  description={set by commands like \cs{TrackLocale}},
+  note={\styfmt{tracklang}},
+  category={command}
+}
+
+ at command{TrackedLanguageFromDialect,
+  name={\csfmt{Tracked\-Language\-From\-Dialect}},
+  user1={\margm{dialect}},
+  description={expands to the root language associated with the
+given (\styfmt{tracklang}) dialect label},
+  note={\styfmt{tracklang}},
+  category={command}
+}
+
+ at command{DTMdisplaydate,
+  name={\csfmt{DTM\-display\-date}},
+  user1={\margm{year}\margm{month}\margm{day}\margm{dow}},
+  description={formats the given date where all arguments are
+    numeric},
+  note={\styfmt{datetime2}},
+  category={command}
+}
+
+ at command{DTLformatlist,
+  name={\csfmt{DTL\-format\-list}},
+  user1={\margm{list}},
+  description={formats a comma-separated list},
+  note={\styfmt{datatool-base}\texparserdefnote\ v2.28+},
+  seealso={ifDTLlistskipempty},
+  category={command}
+}
+
+ at command{DTLlistformatitem,
+  name={\csfmt{DTL\-list\-format\-item}},
+  user1={\margm{element}},
+  description={used by \ics{DTLformatlist} to format each
+   element in the list},
+  note={\styfmt{datatool-base}\texparserdefnote\ v2.28+},
+  seealso={DTLformatlist},
+  category={command}
+}
+
+ at command{DTLlistformatsep,
+  name={\csfmt{DTL\-list\-format\-sep}},
+  user1={},
+  description={used by \ics{DTLformatlist} to separate items in the
+list, except for the last pair},
+  note={\styfmt{datatool-base}\texparserdefnote\ v2.28+},
+  seealso={DTLformatlist},
+  category={command}
+}
+
+ at command{DTLlistformatlastsep,
+  name={\csfmt{DTL\-list\-format\-last\-sep}},
+  user1={},
+  description={used by \ics{DTLformatlist} to separate the last two items in the
+list},
+  note={\styfmt{datatool-base}\texparserdefnote\ v2.28+},
+  seealso={DTLformatlist},
+  category={command}
+}
+
+ at command{DTLlistformatoxford,
+  name={\csfmt{DTL\-list\-format\-oxford}},
+  user1={},
+  description={insert before \ics{DTLlistformatlastsep} if the list
+has three or more items},
+  note={\styfmt{datatool-base}\texparserdefnote\ v2.28+},
+  seealso={DTLformatlist},
+  category={command}
+}
+
+ at command{DTLandname,
+  name={\csfmt{DTL\-and\-name}},
+  user1={},
+  description={used in the definition of \ics{DTLlistformatlastsep}},
+  note={\styfmt{datatool-base}\texparserdefnote\ v2.28+},
+  seealso={DTLformatlist},
+  category={command}
+}
+
+ at command{DTLlistelement,
+  name={\csfmt{DTL\-list\-element}},
+  user1={\margm{list}\margm{index}},
+  description={does the \meta{index}th element (starting from 1 for
+   the first element) in the comma-separated \meta{list}},
+  note={\styfmt{datatool-base}\texparserdefnote\ v2.31+},
+  seealso={DTLfetchlistelement,ifDTLlistskipempty},
+  category={command}
+}
+
+ at command{DTLfetchlistelement,
+  name={\csfmt{DTL\-fetch\-list\-element}},
+  user1={\margm{list}\margm{index}\margm{cs}},
+  description={fetches the \meta{index}th element (starting from 1 for
+   the first element) in the comma-separated \meta{list} and stores
+   it in the command given by \meta{cs}},
+  note={\styfmt{datatool-base}\texparserdefnote\ v2.31+},
+  seealso={DTLlistelement,ifDTLlistskipempty},
+  category={command}
+}
+
+ at command{ifDTLlistskipempty,
+  name={\csfmt{if\-DTL\-list\-skip\-empty}},
+  description={conditional that determines whether or not commands
+    like \cs{DTLformatlist} should skip empty elements},
+  note={\styfmt{datatool-base}\texparserdefnote\ v2.31+},
+  category={command}
+}
+
+ at command{DTLnumitemsinlist,
+  name={\csfmt{DTL\-num\-items\-in\-list}},
+  user1={\margm{list}\margm{cs}},
+  description={counts the number of elements in the comma-separated 
+   \meta{list} and stores the value in the command given by \meta{cs}},
+  note={\styfmt{datatool-base}\texparserdefnote\ v2.31+},
+  seealso={DTLformatlist,DTLlistelement,ifDTLlistskipempty},
+  category={command}
+}
+
+ at command{DTLifinlist,
+  name={\csfmt{DTL\-if\-in\-list}},
+  user1={\margm{element}\margm{list}\margm{true}\margm{false}},
+  description={tests if \meta{element} is in the comma-separated \meta{list}},
+  note={\styfmt{datatool-base}\texparserdefnote},
+  category={command}
+}
+
+ at command{DTLgidxParen,
+  name={\csfmt{DTL\-gidx\-Paren}},
+  user1={\margm{text}},
+  description={normally expands to \code{ (\meta{text})} but is
+locally redefined under certain situations.
+Note that \idx{datatool2bib} discards the argument for sorting,
+which is different to the behaviour with \sty{datagidx} when
+constructing the sort value},
+  note={\styfmt{datagidx}},
+  category={command}
+}
+
+ at command{DTLgidxIgnore,
+  name={\csfmt{DTL\-gidx\-Ignore}},
+  user1={\margm{text}},
+  description={normally expands to its argument but is
+locally redefined to ignore its argument under certain situations},
+  note={\styfmt{datagidx}},
+  category={command}
+}
+
+ at command{si,
+  name={\csfmt{si}},
+  user1={\margm{unit}},
+  description={displays the unit with intelligent formatting},
+  note={\styfmt{siunitx}\texparserdefnote},
+  category={command}
+}
+
+ at command{unit,
+  name={\csfmt{unit}},
+  user1={\oargm{options}\margm{unit}},
+  description={displays the unit with intelligent formatting},
+  note={\styfmt{siunitx}\texparserdefnote},
+  category={command}
+}
+
+ at command{ce,
+  name={\csfmt{ce}},
+  user1={\margm{formula}},
+  description={displays the chemical formula},
+  note={\styfmt{mhchem}\texparserdefnote},
+  category={command}
+}
+
+ at command{textweathersymbol,
+  name={\csfmt{text\-weather\-symbol}},
+  user1={\margm{number}},
+  description={displays weather symbol identified by \meta{number}},
+  note={\styfmt{ifsym}},
+  category={command}
+}
+
+ at command{toprule,
+  name={\csfmt{top\-rule}},
+  description={horizontal rule for the top of a \envfmt{tabular}-like environment},
+  note={\styfmt{booktabs}},
+  category={command}
+}
+
+ at command{midrule,
+  name={\csfmt{mid\-rule}},
+  description={horizontal rule for divider between header and main
+   content of a \envfmt{tabular}-like environment},
+  note={\styfmt{booktabs}},
+  category={command}
+}
+
+ at command{bottomrule,
+  name={\csfmt{bottom\-rule}},
+  description={horizontal rule for the bottom of a 
+  \envfmt{tabular}-like environment},
+  note={\styfmt{booktabs}},
+  category={command}
+}
+
+ at command{endhead,
+  name={\csfmt{end\-head}},
+  description={ends the header section},
+  note={\styfmt{longtable}},
+  category={command}
+}
+
+ at command{endfoot,
+  name={\csfmt{end\-foot}},
+  description={ends the footer section},
+  note={\styfmt{longtable}},
+  category={command}
+}
+
+ at command{glslowercase,
+  name={\csfmt{gls\-lower\-case}},
+  user1={\margm{text}},
+  description={converts \meta{text} to lower case},
+  note={\styfmt{glossaries} v4.50+\texparserdefnote},
+  category={command}
+}
+
+ at command{glsuppercase,
+  name={\csfmt{gls\-upper\-case}},
+  user1={\margm{text}},
+  description={converts \meta{text} to \idx{uppercase}},
+  note={\styfmt{glossaries} v4.50+\texparserdefnote},
+  category={command}
+}
+
+ at command{MakeTextLowercase,
+  name={\csfmt{Make\-Text\-Lower\-case}},
+  user1={\margm{text}},
+  description={converts \meta{text} to lower case},
+  note={\styfmt{textcase}\texparserdefnote},
+  category={command}
+}
+
+ at command{MakeTextUppercase,
+  name={\csfmt{Make\-Text\-Upper\-case}},
+  user1={\margm{text}},
+  description={converts \meta{text} to \idx{uppercase}},
+  note={\styfmt{textcase}\texparserdefnote},
+  category={command}
+}
+
+ at command{NoCaseChange,
+  name={\csfmt{No\-Case\-Change}},
+  user1={\margm{text}},
+  description={prevents \cs{MakeTextUppercase} and
+   \cs{MakeTextLowercase} from converting \meta{text}},
+  note={\styfmt{textcase}\texparserdefnote},
+  category={command}
+}
+
+ at command{MakeUppercase,
+  name={\csfmt{Make\-Upper\-case}},
+  user1={\margm{text}},
+  description={converts \meta{text} to \idx{uppercase}},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{char,
+  name={\csfmt{char}},
+  user1={\meta{number}},
+  description={accesses the character identified by \meta{number}
+(use \code{\csfmt{char}\idx{doublequotecharhex}\meta{hex}} if the
+number is hexadecimal)},
+  note={{}\TeX\ primitive\texparserdefnote},
+  category={command}
+}
+
+ at command{cs.symbol,
+  name={\csfmt{symbol}},
+  user1={\margm{number}},
+  description={accesses the character identified by \meta{number}
+(use \code{\csfmt{symbol}\marg{\idx{doublequotecharhex}\meta{hex}}} if the
+number is hexadecimal)},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{number,
+  name={\csfmt{number}},
+  user1={\meta{value}},
+  description={expands the given numerical \meta{value} to 
+  a base~10 integer number stripping any leading
+  zeros (use \code{\csfmt{char}\idx{doublequotecharhex}\meta{hex}} 
+  if the value is hexadecimal)},
+  note={{}\TeX\ primitive\texparserdefnote},
+  category={command}
+}
+
+ at command{the,
+  name={\csfmt{the}},
+  user1={\meta{register}},
+  description={expands \meta{register} to the current value of the
+   register},
+  note={{}\TeX\ primitive\texparserdefnote},
+  category={command}
+}
+
+ at command{cs.string,
+  name={\csfmt{string}},
+  user1={\meta{token}},
+  description={if \meta{token} is a control sequence it expands
+   to the escape character followed by the control sequence name},
+  note={{}\TeX\ primitive\texparserdefnote},
+  category={command}
+}
+
+ at command{let,
+  name={\csfmt{let}},
+  user1={\meta{token1}\meta{token2}},
+  description={assigns \meta{token1} to \meta{token2}},
+  note={{}\TeX\ primitive\texparserdefnote},
+  category={command}
+}
+
+% See QUARKS for resource option markup
+
+ at command{u,
+  name={\csfmt{u}},
+  user1={\margm{character}},
+  description={puts a breve accent over \meta{character}},
+  note={kernel command\texparserdefnote},
+  category={command},
+  annote={accent}
+}
+
+ at command{acute,
+  name={\csfmt{'}},
+  user1={\margm{character}},
+  description={puts an acute accent over \meta{character}},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{umlaut,
+  name={\csfmt{"}},
+  user1={\margm{character}},
+  description={puts an umlaut accent over \meta{character}},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{c,
+  name={\csfmt{c}},
+  user1={\margm{character}},
+  description={puts a cedilla accent over \meta{character}},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{AA,
+  name={\csfmt{AA}},
+  description={produces the \idx!{uppercase} A-ring character \AA},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{aa,
+  name={\csfmt{aa}},
+  description={produces the \idx!{lowercase} a-ring character \aa},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{O,
+  name={\csfmt{O}},
+  description={produces the \idx!{uppercase} O-slash character \O},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{o,
+  name={\csfmt{o}},
+  description={produces the \idx!{lowercase} o-slash character \o},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{L,
+  name={\csfmt{L}},
+  description={produces the \idx!{uppercase} L-slash character \L},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{l,
+  name={\csfmt{l}},
+  description={produces the \idx!{lowercase} l-slash character \l},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{ae,
+  name={\csfmt{ae}},
+  description={produces the \idx!{lowercase} \ae-ligature},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{AE,
+  name={\csfmt{AE}},
+  description={produces the \idx!{uppercase} \AE-ligature},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{oe,
+  name={\csfmt{oe}},
+  description={produces the \idx!{lowercase} \oe-ligature},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{OE,
+  name={\csfmt{OE}},
+  description={produces the \idx!{uppercase} \OE-ligature},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{th,
+  name={\csfmt{th}},
+  description={produces the \idx!{lowercase} thorn \th},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{TH,
+  name={\csfmt{TH}},
+  description={produces the \idx!{uppercase} thorn \TH},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{ss,
+  name={\csfmt{ss}},
+  description={produces the \idx!{lowercase} eszett \ss},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{SS,
+  name={\csfmt{SS}},
+  description={produces the \idx!{uppercase} eszett \SS},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{ng,
+  name={\csfmt{ng}},
+  description={produces the \idx!{lowercase} eng \ng},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{NG,
+  name={\csfmt{NG}},
+  description={produces the \idx!{uppercase} eng \NG},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{dh,
+  name={\csfmt{dh}},
+  description={produces the \idx!{lowercase} eth \dh},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{DH,
+  name={\csfmt{DH}},
+  description={produces the \idx!{uppercase} eth \DH},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{dj,
+  name={\csfmt{dj}},
+  description={produces the \idx!{lowercase} d-stroke \dj},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{DJ,
+  name={\csfmt{DJ}},
+  description={produces the \idx!{uppercase} d-stroke \DJ},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{textsuperscript,
+  name={\csfmt{textsuperscript}},
+  user1={\margm{text}},
+  description={displays \meta{text} as a superscript},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{textsubscript,
+  name={\csfmt{textsubscript}},
+  user1={\margm{text}},
+  description={displays \meta{text} as a subscript},
+  note={kernel command\texparserdefnote\ as from 2015/01/01},
+  category={command}
+}
+
+ at command{MakeLowercase,
+  name={\csfmt{MakeLowercase}},
+  user1={\margm{text}},
+  description={converts \meta{text} to lower case},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{textsc,
+  name={\csfmt{textsc}},
+  user1={\margm{text}},
+  description={applies small-caps font to \meta{text}},
+  note={kernel command},
+  category={command}
+}
+
+ at command{textsmaller,
+  name={\csfmt{text\-smaller}},
+  user1={\margm{text}},
+  description={typesets \meta{text} in a font size that's smaller
+  than the surrounding text},
+  note={\styfmt{relsize}},
+  category={command}
+}
+
+ at glscommand{glstextup,
+  name={\csfmt{gls\-text\-up}},
+  user1={\margm{text}},
+  description={typesets \meta{text} in an upright font (used to
+cancel the effect of \cs{textsc} in abbreviation styles that use
+\ics{glsabbrvscfont})},
+  note={\styfmt{glossaries} v3.09a+},
+  topics={abbreviationcommands,formattingcommands},
+  category={command}
+}
+
+ at command{usepackage,
+  name={\csfmt{use\-pack\-age}},
+  user1={\oargm{options}\margm{name}\oargm{min version}},
+  description={loads the package identified by \meta{name}},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{RequirePackage,
+  name={\csfmt{Require\-Pack\-age}},
+  user1={\oargm{options}\margm{name}\oargm{min version}},
+  description={loads the package identified by \meta{name} from
+    within another package},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{ProvidesPackage,
+  name={\csfmt{Provides\-Pack\-age}},
+  user1={\margm{name}\oargm{version}},
+  description={identifies a package},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{DeclareOption,
+  name={\csfmt{Declare\-Opt\-ions}},
+  user1={\margm{name}\margm{code}},
+  description={declares an option with the given \meta{name}},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{DeclareOption*,
+  name={\csfmt{Declare\-Opt\-ions*}},
+  user1={\margm{code}},
+  description={indicates what to do with unknown options},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{ProcessOptions,
+  name={\csfmt{Process\-Opt\-ions}},
+  description={processes supplied options},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{PackageError,
+  name={\csfmt{Pack\-age\-Err\-or}},
+  user1={\margm{name}\margm{code}\margm{help}},
+  description={generates an error message for the package identified
+by \meta{name}},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{cs.color,
+  name={\csfmt{color}},
+  user1={\oargm{model}\margm{spec}},
+  description={switches the current font colour},
+  note={\styfmt{color}},
+  category={command}
+}
+
+ at command{textcolor,
+  name={\csfmt{textcolor}},
+  user1={\oargm{model}\margm{spec}\margm{text}},
+  description={typesets \meta{text} in the given colour},
+  note={\styfmt{color}},
+  category={command}
+}
+
+ at examplecommand{cjkname,
+  name={\csfmt{cjkname}},
+  user1={\margm{CJK characters}},
+  description={example command},
+  category={command}
+}
+
+ at command{citation,
+  name={\csfmt{citation}},
+  user1={\margm{label}},
+  description={written to the \ext{aux} file on each occurrence of
+   \cs{cite}},
+  note={kernel command},
+  category={command}
+}
+
+ at command{cite,
+  name={\csfmt{cite}},
+  user1={\margm{label}},
+  description={cross-reference a bibliographic citation},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{bibliography,
+  name={\csfmt{bibliography}},
+  user1={\margm{file list}},
+  description={display bibliography created by \BibTeX},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{refstepcounter,
+  name={\csfmt{refstepcounter}},
+  user1={\margm{counter name}},
+  description={increments the given counter in a manner compatible
+   with the \cs{label} cross-referencing mechanism},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{label,
+  name={\csfmt{label}},
+  user1={\margm{id}},
+  description={creates a label that can be referenced with \ics{ref}
+or \ics{pageref}},
+  seealso={ref,pageref},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{pageref,
+  name={\csfmt{pageref}},
+  user1={\margm{id}},
+  description={cross-reference the page where \cs{label}\margm{id}
+occurred},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{ref,
+  name={\csfmt{ref}},
+  user1={\margm{id}},
+  description={cross-reference the location where \cs{label}\margm{id}
+occurred},
+  seealso={label},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{autoref,
+  name={\csfmt{autoref}},
+  user1={\margm{id}},
+  description={cross-reference with textual tag inferred from the
+associated counter},
+  seealso={label},
+  note={\styfmt{hyperref}},
+  category={command}
+}
+
+ at command{par,
+  name={\csfmt{par}},
+  description={paragraph break},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{hyperlink,
+  name={\csfmt{hyperlink}},
+  user1={\margm{target name}\margm{text}},
+  description={create a hyperlink to \meta{target name} with the given
+\meta{text}},
+  note={\styfmt{hyperref}\texparserdefnote},
+  category={command}
+}
+
+ at command{hypertarget,
+  name={\csfmt{hypertarget}},
+  user1={\margm{target name}\margm{text}},
+  description={create a hypertarget with the given \meta{target
+name} and the displayed \meta{text}},
+  note={\styfmt{hyperref}\texparserdefnote},
+  category={command}
+}
+
+ at command{texorpdfstring,
+  name={\csfmt{texorpdfstring}},
+  user1={\margm{\TeX\ code}\margm{PDF text}},
+  description={does \meta{PDF text} if used in a PDF bookmark,
+   otherwise does \meta{\TeX\ code}},
+  note={\styfmt{hyperref}},
+  category={command}
+}
+
+ at command{cs.hyperref,
+  name={\csfmt{hyperref}},
+  note={\styfmt{hyperref}},
+  category={command}
+}
+
+ at command{cs.hyperref.ext,
+  parent={cs.hyperref},
+  name={\csfmt{hyperref}},
+  user1={\margm{URL}\margm{category}\margm{name}\margm{text}},
+  description={create a hyperlink to an external location with
+  the anchor formed from \code{\meta{category}.\meta{name}} 
+  and the displayed \meta{text}},
+  category={command}
+}
+
+ at command{cs.hyperref.int,
+  parent={cs.hyperref},
+  name={\csfmt{hyperref}},
+  user1={\oargm{label}\margm{text}},
+  description={create an internal hyperlink with 
+  the displayed \meta{text} to the same place
+  that \code{\cs{ref}\margm{label}} would be linked.
+  Note that the \meta{label} argument isn't optional. The
+  square bracket notation disambiguates from the
+  syntax for the external form of \cs{cs.hyperref.ext}},
+  category={command}
+}
+
+ at command{@currentlabelname,
+  name={\csfmt{@current\-label\-name}},
+  user1={},
+  description={used to store the current title information for the next instance
+   of \cs{label}},
+  note={\styfmt{hyperref}},
+  category={command}
+}
+
+ at command{@currentHref,
+  name={\csfmt{@current\-H\-ref}},
+  user1={},
+  description={used to store the current anchor for the next instance
+   of \cs{label}},
+  note={\styfmt{hyperref}},
+  category={command}
+}
+
+
+ at glscommand{glsrefentry,
+  name={\csfmt{gls\-ref\-entry}},
+  user1={\margm{label}},
+  description={when used with \styopt{entrycounter} or
+   \styopt{subentrycounter} may be used to cross-reference the
+  entry's number in the glossary list with \cs{ref}},
+  topics={crossrefcommands},
+  seealso={ref},
+  note={\styfmt{glossaries} v3.0+},
+  category={command}
+}
+
+ at glscommand{glsxtrpageref,
+  name={\csfmt{gls\-xtr\-page\-ref}},
+  user1={\margm{label}},
+  description={when used with \styopt{entrycounter} or
+   \styopt{subentrycounter} may be used to cross-reference the
+  entry's number in the glossary list with \cs{pageref}},
+  seealso={pageref},
+  topics={crossrefcommands},
+  note={\styfmt{glossaries-extra} v1.11},
+  category={command}
+}
+
+ at glscommand{glsxtrglossentry,
+  name={\csfmt{gls\-xtr\-gloss\-entry}},
+  user1={\margm{label}},
+  description={displays the given entry \field{name} including a hypertarget (if
+\sty{hyperref} has been loaded) as the destination for commands like
+\cs{gls}},
+  topics={linkcommands,fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.21},
+  category={command}
+}
+
+ at glscommand{glsxtrglossentryother,
+  name={\csfmt{gls\-xtr\-gloss\-entry\-other}},
+  user1={\margm{header}\margm{label}\margm{field}},
+  description={like \cs{glsxtrglossentry} but uses the value given
+in the supplied internal \meta{field} where \meta{header} is the
+code
+to use in the header (leave empty for default)},
+  topics={linkcommands,fieldrefcommands},
+  note={\styfmt{glossaries-extra} v1.22+},
+  category={command}
+}
+
+ at glscommand{glsshowtarget,
+  name={\csfmt{gls\-show\-target}},
+  user1={\margm{label}},
+  description={used to show the target name when the
+   \styopt[showtargets]{debug} option is on},
+  topics={debugging,linkcommands},
+  note={\styfmt{glossaries} v4.32+},
+  category={command}
+}
+
+ at glscommand{showgloparent,
+  name={\csfmt{show\-glo\-parent}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{parent} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglolevel,
+  name={\csfmt{show\-glo\-level}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the entry's
+   hierarchical level in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showgloname,
+  name={\csfmt{show\-glo\-name}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{name} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglosort,
+  name={\csfmt{show\-glo\-sort}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{sort} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglosymbol,
+  name={\csfmt{show\-glo\-symbol}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{symbol} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglosymbolplural,
+  name={\csfmt{show\-glo\-symbol\-plural}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{symbolplural} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showgloshort,
+  name={\csfmt{show\-glo\-short}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{short} field in the transcript},
+  topics={debugging,fieldrefcommands,abbreviationcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglolong,
+  name={\csfmt{show\-glo\-long}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{long} field in the transcript},
+  topics={debugging,fieldrefcommands,abbreviationcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showgloloclist,
+  name={\csfmt{show\-glo\-loc\-list}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{loclist} field in the transcript},
+  topics={debugging,fieldrefcommands,loclistcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showgloflag,
+  name={\csfmt{show\-glo\-flag}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \idx{firstuseflag} in the transcript},
+  topics={debugging,fieldrefcommands,conditional},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglodesc,
+  name={\csfmt{show\-glo\-desc}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{description} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglodescplural,
+  name={\csfmt{show\-glo\-desc\-plural}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{descriptionplural} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglotext,
+  name={\csfmt{show\-glo\-text}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{text} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showgloplural,
+  name={\csfmt{show\-glo\-plural}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{plural} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglofirst,
+  name={\csfmt{show\-glo\-first}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{first} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglofirstpl,
+  name={\csfmt{show\-glo\-firstpl}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{firstplural} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglotype,
+  name={\csfmt{show\-glo\-type}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{type} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglocounter,
+  name={\csfmt{show\-glo\-counter}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{counter} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglouseri,
+  name={\csfmt{show\-glo\-useri}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{user1} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglouserii,
+  name={\csfmt{show\-glo\-userii}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{user2} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglouseriii,
+  name={\csfmt{show\-glo\-useriii}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{user3} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglouseriv,
+  name={\csfmt{show\-glo\-useriv}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{user4} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglouserv,
+  name={\csfmt{show\-glo\-userv}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{user5} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglouservi,
+  name={\csfmt{show\-glo\-uservi}},
+  user1={\margm{label}},
+  description={interrupts the document build and shows the value of
+   the \field{user6} field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglofield,
+  name={\csfmt{show\-glo\-field}},
+  user1={\margm{entry label}\margm{internal field}},
+  description={interrupts the document build and shows the value of
+   the given field in the transcript},
+  topics={debugging,fieldrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showgloglossaries,
+  name={\csfmt{show\-glo\-glossaries}},
+  description={interrupts the document build and shows the list
+  of all non-ignored glossary types in the transcript},
+  topics={debugging,glossrefs},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglossarytitle,
+  name={\csfmt{show\-glos\-sary\-title}},
+  user1={\margm{type}},
+  description={interrupts the document build and shows the title
+   of the given glossary in the transcript},
+  topics={debugging,glossrefs},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglossarycounter,
+  name={\csfmt{show\-glos\-sary\-counter}},
+  user1={\margm{type}},
+  description={interrupts the document build and shows the default
+   counter for the given glossary in the transcript},
+  topics={debugging,glossrefs},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{showglossaryentries,
+  name={\csfmt{show\-glos\-sary\-entries}},
+  user1={\margm{type}},
+  description={interrupts the document build and shows the list of
+   entry labels for the given glossary in the transcript},
+  topics={debugging,glossrefs},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{GlsEntryCounterLabelPrefix,
+  name={\csfmt{Gls\-Entry\-Counter\-Label\-Prefix}},
+  description={used as a prefix in the \cs{label} command
+   automatically implemented by the \styopt{entrycounter}
+    and \styopt{subentrycounter} options},
+  topics={hooks,crossrefcommands},
+  note={\styfmt{glossaries} v4.38+},
+  category={command}
+}
+
+ at glscommand{GlsXtrStandaloneGlossaryType,
+  name={\csfmt{Gls\-Xtr\-Stand\-alone\-Glossary\-Type}},
+  description={expands to the label for \ics{currentglossary}
+   within \ics{glsxtrglossentry} and \ics{glsxtrglossentryother}},
+  topics={hooks,glossrefs,standalonestyles},
+  note={\styfmt{glossaries-extra} v1.31+},
+  category={command}
+}
+
+ at glscommand{GlsXtrStandaloneSubEntryItem,
+  name={\csfmt{Gls\-Xtr\-Stand\-alone\-Sub\-Entry\-Item}},
+  user1 = {\margm{label}},
+  description={used within \ics{glsxtrglossentry} and
+\ics{glsxtrglossentryother} to display sub-item labels},
+  topics={hooks,glossarystylecommands},
+  note={\styfmt{glossaries-extra} v1.31+},
+  category={command}
+}
+
+ at glscommand{GlsXtrStandaloneEntryName,
+  name={\csfmt{Gls\-Xtr\-Stand\-alone\-Entry\-Name}},
+  user1 = {\margm{label}},
+  description={used within \ics{glsxtrglossentry} to
+   display the name (with a hypertarget, if supported)},
+  topics={hooks,glossarystylecommands,fieldrefcommands,linkcommands},
+  note={\styfmt{glossaries-extra} v1.37+},
+  category={command}
+}
+
+ at glscommand{GlsXtrStandaloneEntryOther,
+  name={\csfmt{Gls\-Xtr\-Stand\-alone\-Entry\-Other}},
+  user1 = {\margm{label}\margm{field}},
+  description={used within \ics{glsxtrglossentryother} to
+   display the given field value (with a hypertarget, if supported)},
+  topics={hooks,glossarystylecommands,fieldrefcommands,linkcommands},
+  note={\styfmt{glossaries-extra} v1.37+},
+  category={command}
+}
+
+ at glscommand{glsresetentrycounter,
+  name={\csfmt{gls\-reset\-entry\-counter}},
+  description={resets the \counter{glossaryentry} counter if the
+\styopt{entrycounter} setting is on},
+  topics={hooks,glossarystylecommands,assigncommands,crossrefcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{setentrycounter,
+  name={\csfmt{set\-entry\-counter}},
+  user1={\oargm{prefix}\margm{counter}},
+  description={sets up the entry's associated counter and prefix
+   required by \cs{glshypernumber}},
+  topics={glossarystylecommands,assigncommands,loclistcommands,linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{setupglossaries,
+  name={\csfmt{set\-up\-glossaries}},
+  user1 = {\margm{\keyvallist}},
+  description={applies the base \styfmt{glossaries} options
+  that are allowed to be changed after the package has loaded},
+  topics={assigncommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{glossariesextrasetup,
+  name={\csfmt{glossaries\-extra\-setup}},
+  user1 = {\margm{\keyvallist}},
+  description={applies the extension \styfmt{glossaries-extra} options
+  that are allowed to be changed after the package has loaded},
+  topics={assigncommands},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{glstreepredesc,
+  name={\csfmt{gls\-tree\-pre\-desc}},
+  user1={\margm{label}},
+  description={separator used before the description for the
+   \glostyle{tree} styles},
+  topics={glossarystylecommands,separatorcommands,formattingcommands},
+  note={\styfmt{glossary-tree} v4.26+},
+  category={command}
+}
+
+ at glscommand{glstreenonamedesc,
+  name={\csfmt{gls\-tree\-no\-name\-desc}},
+  user1={\margm{label}},
+  description={displays the pre-description separator, the
+   description and the post-description hook for the
+   \glostyle{treenoname} styles},
+  topics={glossarystylecommands,separatorcommands,formattingcommands},
+  note={\styfmt{glossaries-extra-stylemods} v1.31+},
+  category={command}
+}
+
+ at glscommand{glsfmtshort,
+  name={\csfmt{gls\-fmt\-short}},
+  user1={\margm{label}},
+  description={provided for use in section or caption titles, this
+displays the short form of the given abbreviation},
+  topics={formattingcommands,entryrefcommands,fieldrefcommands,abbreviationcommands,capheadcommands},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{glsfmtlong,
+  name={\csfmt{gls\-fmt\-long}},
+  user1={\margm{label}},
+  description={provided for use in section or caption titles, this
+displays the long form of the given abbreviation},
+  topics={formattingcommands,entryrefcommands,fieldrefcommands,abbreviationcommands,capheadcommands},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{glsfmtfull,
+  name={\csfmt{gls\-fmt\-full}},
+  user1={\margm{label}},
+  description={provided for use in section or caption titles, this
+  displays the full form of the given abbreviation (using the inline
+  style that matches \cs{glsxtrfull})},
+  topics={formattingcommands,entryrefcommands,abbreviationcommands,capheadcommands},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{glsfmtname,
+  name={\csfmt{gls\-fmt\-name}},
+  user1={\margm{label}},
+  description={provided for use in section or caption titles, this
+displays the given entry's name},
+  topics={formattingcommands,entryrefcommands,fieldrefcommands,capheadcommands},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{glsfmtfirst,
+  name={\csfmt{gls\-fmt\-first}},
+  user1={\margm{label}},
+  description={provided for use in section or caption titles, this
+displays the given entry's \field{first} field},
+  topics={formattingcommands,entryrefcommands,fieldrefcommands,capheadcommands},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{glsfmttext,
+  name={\csfmt{gls\-fmt\-text}},
+  user1={\margm{label}},
+  description={provided for use in section or caption titles, this
+displays the given entry's \field{text} field},
+  topics={formattingcommands,entryrefcommands,fieldrefcommands,capheadcommands},
+  note={\styfmt{glossaries-extra}},
+  category={command}
+}
+
+ at glscommand{theHentrycounter,
+  name={\csfmt{the\-H\-entry\-counter}},
+  user1={},
+  description={when indexing, this is set to the
+   \csfmt{theH}\meta{counter} command corresponding to the 
+   current indexing counter (or, if undefined, 
+   \csfmt{the}\meta{counter})},
+  topics={glossarystylecommands,linkcommands},
+  note={\styfmt{glossaries}},
+  category={command}
+}
+
+ at glscommand{acronymfont,
+  name={\csfmt{acronym\-font}},
+  user1={\margm{text}},
+  description={used by the base \sty{glossaries} package's acronyms to
+  encapsulate the short form. This command should not be used with
+  \sty{glossaries-extra}},
+  topics={formattingcommands},
+  note={\styfmt{glossaries} \& \styfmt{datagidx}},
+  category={command}
+}
+
+ at mainglscommand{datagidx.newterm,
+  name={\csfmt{new\-term}\nameparen{\styfmt{datagidx}}},
+  text={\csfmt{new\-term}},
+  user1={\oargm{\keyvallist}\margm{name}},
+  description={defines a new term},
+  topics={convertercommands},
+  note={\styfmt{datagidx}},
+  category={command}
+}
+
+ at mainglscommand{datagidx.newacro,
+  name={\csfmt{new\-acro}\nameparen{\styfmt{datagidx}}},
+  text={\csfmt{new\-acro}},
+  user1={\oargm{\keyvallist}\margm{short}\margm{long}},
+  description={defines a new abbreviation},
+  topics={convertercommands},
+  note={\styfmt{datagidx}},
+  category={command}
+}
+
+ at mainglscommand{datagidx.newgidx,
+  name={\csfmt{new\-gidx}\nameparen{\styfmt{datagidx}}},
+  text={\csfmt{new\-gidx}},
+  user1={\oargm{\keyvallist}\margm{db-name}\margm{title}},
+  description={defines a new database customised for \sty{datagidx}},
+  topics={convertercommands},
+  note={\styfmt{datagidx}},
+  category={command}
+}
+
+ at glscommand{datagidx.glsadd,
+  name={\csfmt{gls\-add}\nameparen{\styfmt{datagidx}}},
+  text={\csfmt{gls\-add}},
+  user1={\marg{\oargm{format}\meta{label}}},
+  description={indexes the term identified by the given label},
+  topics={convertercommands},
+  note={\styfmt{datagidx}},
+  category={command}
+}
+
+ at glscommand{datagidx.gls,
+  name={\csfmt{gls}\nameparen{\styfmt{datagidx}}},
+  text={\csfmt{gls}},
+  user1={\marg{\oargm{format}\meta{label}}},
+  description={indexes and displays the term identified by the given
+label with a hyperlink, if supported},
+  topics={convertercommands},
+  note={\styfmt{datagidx}},
+  category={command}
+}
+
+ at glscommand{datagidx.glsnl,
+  name={\csfmt{glsnl}\nameparen{\styfmt{datagidx}}},
+  text={\csfmt{glsnl}},
+  user1={\marg{\oargm{format}\meta{label}}},
+  description={indexes and displays the term identified by the given label
+without a hyperlink},
+  topics={convertercommands},
+  note={\styfmt{datagidx}},
+  category={command}
+}
+
+ at mainglscommand{DTLsetup,
+  name={\csfmt{DTLsetup}},
+  user1={\margm{options}},
+  description={sets default \sty{datatool} options},
+  note={\styfmt{datatool-base}\texparserdefnote},
+  topics={convertercommands},
+  category={command}
+}
+
+ at mainglscommand{DTLread,
+  name={\csfmt{DTLread}},
+  user1={\oargm{options}\margm{filename}},
+  description={loads a database from the given file, where the
+format should be identified in \meta{options}},
+  note={\styfmt{datatool}\texparserdefnote\ v3.0+},
+  topics={convertercommands},
+  category={command}
+}
+
+ at glscommand{DTLloaddb,
+  name={\csfmt{DTLloaddb}},
+  user1={\oargm{options}\margm{db-name}\margm{filename}},
+  description={loads CSV data from the given file},
+  note={\styfmt{datatool}\texparserdefnote},
+  topics={convertercommands},
+  category={command}
+}
+
+ at glscommand{DTLloaddbtex,
+  name={\csfmt{DTLloaddbtex}},
+  user1={\margm{cs}\margm{filename}},
+  description={loads \ext{dbtex} data from the given file},
+  note={\styfmt{datatool}\texparserdefnote\ v2.20+},
+  topics={convertercommands},
+  category={command}
+}
+
+ at command{DTLwrite,
+  name={\csfmt{DTLwrite}},
+  note={\styfmt{datatool}\texparserdefnote\ v3.0+},
+  category={command}
+}
+
+ at glscommand{DTLnewcurrencysymbol,
+  name={\csfmt{DTL\-new\-currency\-symbol}},
+  user1={\margm{symbol}},
+  description={identifies \meta{symbol} as a currency symbol},
+  note={\styfmt{datatool}\texparserdefnote},
+  topics={convertercommands},
+  category={command}
+}
+
+ at glscommand{DTLsetnumberchars,
+  name={\csfmt{DTLsetnumberchars}},
+  user1={\margm{number group char}\margm{decimal char}},
+  description={sets the number group and decimal characters},
+  note={\styfmt{datatool}\texparserdefnote},
+  topics={convertercommands},
+  category={command}
+}
+
+ at mainglscommand{DTLnewdb,
+  name={\csfmt{DTLnewdb}},
+  user1={\margm{db-name}},
+  description={defines a new database},
+  note={\styfmt{datatool}\texparserdefnote},
+  topics={convertercommands},
+  category={command}
+}
+
+ at mainglscommand{DTLnewrow,
+  name={\csfmt{DTL\-new\-row}},
+  user1={\margm{db-name}},
+  description={creates a new row in the given database},
+  note={\styfmt{datatool}\texparserdefnote},
+  topics={convertercommands},
+  category={command}
+}
+
+ at mainglscommand{DTLnewdbentry,
+  name={\csfmt{DTL\-new\-db\-entry}},
+  user1={\margm{db-name}\margm{col-key}\margm{value}},
+  description={adds a new entry to the final row of the given database},
+  note={\styfmt{datatool}\texparserdefnote},
+  topics={convertercommands},
+  category={command}
+}
+
+ at mainglscommand{DTLaction,
+  name={\csfmt{DTL\-action}},
+  user1={\oargm{options}\margm{action}},
+  description={general purpose action command},
+  note={\styfmt{datatool}\texparserdefnote\ v3.0+},
+  topics={convertercommands},
+  category={command}
+}
+
+ at mainglscommand{dtlexpandnewvalue,
+  name={\csfmt{dtl\-expand\-new\-value}},
+  description={new values will be expanded before being added to the database},
+  note={\styfmt{datatool}\texparserdefnote},
+  topics={convertercommands},
+  category={command}
+}
+
+ at mainglscommand{dtlnoexpandnewvalue,
+  name={\csfmt{dtl\-no\-expand\-new\-value}},
+  description={new values will not be expanded before being added to the database},
+  note={\styfmt{datatool}\texparserdefnote},
+  topics={convertercommands},
+  category={command}
+}
+
+ at command{tableofcontents,
+  name={\csfmt{table\-of\-contents}},
+  description={displays the \glsxtrlong{toc} (by reading in the
+\ext{toc} file) and then opens \ext{toc} file to allow the
+sectioning commands to write to it},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{two at digits,
+  name={\csfmt{two\-@\-digits}},
+  user1={\margm{number}},
+  description={expands to \meta{number} zero-padded to ensure at
+  least two digits},
+  seealso={dtlpadleadingzeros,bibglspaddigits},
+  note={kernel command\texparserdefnote},
+  category={command}
+}
+
+ at command{IfTeXParserLib,
+  name={\csfmt{If\-TeX\-Parser\-Lib}},
+  user1={\margm{parser code}\margm{\TeX\ code}},
+  description={defined by the \TeX\ parser library to expand to
+  \meta{parser code} and by \sty{glossaries-extra-bib2gls} to expand
+  to \meta{\TeX\ code}},
+  note={\styfmt{glossaries-extra-bib2gls}\texparserdefnote},
+  seealso={IfNotBibGls},
+  category={command}
+}
+
+ at command{IfNotBibGls,
+  name={\csfmt{If\-Not\-Bib\-Gls}},
+  user1={\margm{not bib2gls}\margm{bib2gls}},
+  description={defined by the \bibgls\ interpreter to expand to
+  \meta{bib2gls} and by \sty{glossaries-extra-bib2gls} to expand
+  to \meta{not bib2gls}. The command either won't be recognised by other
+applications that use the \texparserlib\ or it will expand to its
+first argument},
+  note={\styfmt{glossaries-extra-bib2gls}\texparserdefnote},
+  seealso={IfTeXParserLib},
+  category={command}
+}
+
+ at command{dtlpadleadingzeros,
+  name={\csfmt{dtl\-pad\-lead\-ing\-zeros}},
+  user1={\margm{num digits}\margm{number}},
+  description={expands to \meta{number} zero-padded to ensure at
+   least \meta{num digits} digits},
+  note={\styfmt{datatool-base}\texparserdefnote\ v3.0+},
+  category={command}
+}
+
+ at command{DTLsortwordlist,
+  name={\csfmt{DTL\-sort\-word\-list}},
+  user1={\margm{clist-var}\margm{handler-cs}},
+  description={sorts the given comma-separated list variable, where the values
+     are preprocessed by the given sort handler function},
+  note={\styfmt{datatool-base} v3.0+},
+  category={command}
+}
+
+ at command{datatoolasciistart,
+  name={\csfmt{data\-tool\-ascii\-start}},
+  description={marker used with \cs{DTLsortwordlist}},
+  note={\styfmt{datatool-base}\texparserdefnote\ v3.0+},
+  category={command}
+}
+
+ at command{datatoolpersoncomma,
+  name={\csfmt{data\-tool\-person\-comma}},
+  description={marker used with \cs{DTLsortwordlist}},
+  note={\styfmt{datatool-base}\texparserdefnote},
+  category={command}
+}
+
+ at command{datatoolplacecomma,
+  name={\csfmt{data\-tool\-place\-comma}},
+  description={marker used with \cs{DTLsortwordlist}},
+  note={\styfmt{datatool-base}\texparserdefnote},
+  category={command}
+}
+
+ at command{datatoolsubjectcomma,
+  name={\csfmt{data\-tool\-subject\-comma}},
+  description={marker used with \cs{DTLsortwordlist}},
+  note={\styfmt{datatool-base}\texparserdefnote},
+  category={command}
+}
+
+ at command{datatoolparenstart,
+  name={\csfmt{data\-tool\-paren\-start}},
+  description={marker used with \cs{DTLsortwordlist}},
+  note={\styfmt{datatool-base}\texparserdefnote\ v3.0+},
+  category={command}
+}
+
+ at command{datatoolctrlboundary,
+  name={\csfmt{data\-tool\-ctrl\-bound\-ary}},
+  description={marker used with \cs{DTLsortwordlist}},
+  note={\styfmt{datatool-base}\texparserdefnote\ v3.0+},
+  category={command}
+}
+
+ at command{datatoolasciiend,
+  name={\csfmt{data\-tool\-ascii\-end}},
+  description={marker used with \cs{DTLsortwordlist}},
+  note={\styfmt{datatool-base}\texparserdefnote\ v3.0+},
+  category={command}
+}
+
+ at command{datatoolparen,
+  name={\csfmt{data\-tool\-paren}},
+  user1={\margm{text}},
+  description={marker used with \cs{DTLsortwordlist} for parenthetical
+content},
+  note={\styfmt{datatool-base}\texparserdefnote\ v3.0+},
+  category={command}
+}
+
+ at command{dtltexorsort,
+  name={\csfmt{dtl\-tex\-or\-sort}},
+  user1={\margm{normal}\margm{sorting}},
+  description={provided for use with \cs{DTLsortwordlist}, this
+normally expands to its first argument. Within \cs{DTLsortwordlist}
+or when used by the interpreter with \longswitch{datatool-sort-markers}
+this command will expand to its second argument instead},
+  note={\styfmt{datatool-base}\texparserdefnote\ v3.0+},
+  category={command}
+}
+
+ at command{bibglspaddigits,
+  name={\csfmt{bib\-gls\-pad\-digits}},
+  user1={\margm{num digits}\margm{number}},
+  description={expands to \meta{number} zero-padded to ensure at
+   least \meta{num digits} digits},
+  seealso={dtlpadleadingzeros},
+  note={\bibgls\ interpreter only},
+  category={command}
+}
+
+ at command{underline,
+  name={\csfmt{under\-line}},
+  user1={\margm{text}},
+  description={underlines the given text},
+  note={kernel command},
+  category={command}
+}
+
+ at command{ul,
+  name={\csfmt{ul}},
+  user1={\margm{text}},
+  description={underlines the given text},
+  note={\styfmt{soul}},
+  category={command}
+}
+
+ at command{ding,
+  name={\csfmt{ding}},
+  user1={\margm{number}},
+  description={displays the symbol associated with the given number},
+  note={\styfmt{pifont}\texparserdefnote},
+  category={command}
+}
+
+ at index{exampleterms,
+  name = {example terms}
+}
+
+ at exampleentry{ex1.duck,
+  parent={exampleterms},
+  name={duck},
+  description={a waterbird with webbed feet},
+  identifier={animal}
+}
+
+ at exampleentry{ex1.goose,
+  parent={exampleterms},
+  name={goose},
+  plural={geese},
+  description={a large waterbird with a long neck, short legs,
+   webbed feet and a short broad bill},
+  identifier={animal}
+}
+
+ at exampleentry{ex2.duck,
+  parent={exampleterms},
+  name={Duck (noun)},
+  first={duck (quack, quack)},
+  firstplural={ducks (quack, quack)},
+  text={duck},
+  description={a waterbird with webbed feet},
+  identifier={animal}
+}
+
+ at exampleentry{ex2.goose,
+  parent={exampleterms},
+  name={Goose (noun, pl.\ geese)},
+  first={goose (honk, honk)},
+  firstplural={geese (honk, honk)},
+  text={goose},
+  plural={geese},
+  description={a large waterbird with a long neck, short legs,
+   webbed feet and a short broad bill},
+  identifier={animal}
+}
+
+ at exampleentry{ex.fleuron,
+  parent={exampleterms},
+  name = {fleuron},
+  symbol = {\ding{167}},
+  category = {ornament},
+  description = {typographic ornament}
+}
+
+ at exampleentry{ex.pi,
+  parent={exampleterms},
+  name = {Archimedes' constant},
+  symbol = {\ensuremath{\pi}},
+  category = {constant},
+  description = {ratio of a circle's circumference to its diameter}
+}
+
+ at exampleentry{ex.thetai,
+  parent = {exampleterms},
+  name = {theta parameter},
+  symbol = {\ensuremath{\theta_i}},
+  description = {one of the model parameters}
+}
+
+ at exampleabbreviation{ex.tug,
+  parent={exampleterms},
+  category = {longshortem},
+  short = {TUG},
+  long = {\TeX\ Users Group}
+}
+
+ at exampleabbreviation{ex.ascii,
+  short = {ascii},
+  long = {American Standard Code for Information Interchange},
+  category={shortsc}
+}
+
+ at exampleabbreviation{ex.svm,
+  parent={exampleterms},
+  short = {SVM},
+  long = {support vector machine}
+}
+
+ at exampleabbreviation{ex.ssl,
+  parent={exampleterms},
+  category = {markwordsexample},
+  short = {SSL},
+  long = {Secure Sockets Layer}
+}
+
+ at exampleabbreviation{ex.xml,
+  parent={exampleterms},
+  category = {taggingexample},
+  short = {XML},
+  long = {e\itag{x}tensible \itag{m}arkup \itag{l}anguage}
+}
+
+ at exampleabbreviation{ex.dante,
+  parent={exampleterms},
+  category = {discardperiodexample},
+  short = {DANTE e.V.},
+  long = {Deutschsprachige Anwendervereinigung \TeX\ e.V.}
+}
+
+ at exampleabbreviation{ex.gp,
+  parent={exampleterms},
+  category = {discardperiodexample},
+  short = {G.P.},
+  long = {General Practitioner}
+}
+
+ at exampleabbreviation{ex2.gp,
+  parent={exampleterms},
+  category = {initialism},
+  short = {GP},
+  long = {General Practitioner}
+}
+
+ at exampleabbreviation{ex.rna,
+  parent={exampleterms},
+  short = {RNA},
+  long = {ribonukleins\"aure},
+  user1 = {ribonucleic acid},
+  category = {abbrvtrans}
+}
+
+ at exampleentry{ex.length,
+  parent={exampleterms},
+  name = {length},
+  symbol = {\si{\metre}},
+  description = {measurement between two points}
+}
+
+ at exampleentry{ex.area,
+  parent={exampleterms},
+  name = {area},
+  symbol = {\si{\metre\squared}},
+  description = {measurement of a surface}
+}
+
+ at examplesymbol{ex2.length,
+  parent={exampleterms},
+  description = {length},
+  name = {\si{\metre}}
+}
+
+ at examplesymbol{ex2.area,
+  parent={exampleterms},
+  description = {area},
+  name = {\si{\metre\squared}}
+}
+
+ at examplesymbol{ex.deriv,
+  parent={exampleterms},
+  description = {derivative},
+  name = {\ensuremath{\derivfn{x}}},
+  user1 = {derivfn}
+}
+
+ at exampleindex{hom.bow1,
+  name={bow},
+  description={(rhymes with toe)},
+  category = {homograph}
+}
+
+ at exampleentry{hom.bowknot,
+  parent={hom.bow1},
+  description = {a knot tied with two loops and loose ends},
+  category = {homograph}
+}
+
+ at exampleentry{hom.bowweapon,
+  parent={hom.bow1},
+  description = {a weapon for shooting arrows, made of curved wood
+  joined at both ends with taut string},
+  category = {homograph}
+}
+
+ at exampleindex{hom.bow2,
+  name={bow},
+  description={(rhymes with cow)},
+  category = {homograph}
+}
+
+ at exampleindex{hom.bowbend,
+  parent={hom.bow2},
+  description={bend head or upper body},
+  category = {homograph}
+}
+
+ at exampleindex{hom.bowpressure,
+  parent={hom.bow2},
+  description={give in to pressure},
+  category = {homograph}
+}
+
+ at exampleindex{hom.bow3,
+  name={bow},
+  description={(also bows) the front end of a ship},
+  category = {homograph}
+}
+
+ at exampleindex{hom.glossary,
+  name={glossary},
+  category = {homograph}
+}
+
+ at exampleentry{hom.glossarycol,
+  parent = {hom.glossary},
+  description = {collection of glosses},
+  category = {homograph}
+}
+
+ at exampleentry{hom.glossarylist,
+  parent = {hom.glossary},
+  description = {list of technical words},
+  category = {homograph}
+}
+
+ at exampleentry{hier.animal,
+ name = {animal},
+ description = {living organism with a nervous system and sense organs
+    that can move independently},
+ category = {hierarchical}
+}
+
+ at exampleentry{hier.bird,
+ parent = {hier.animal},
+ name = {bird},
+ description = {warm-blooded egg-laying animal with feathers, wings 
+   and a beak},
+ category = {hierarchical}
+}
+
+ at exampleentry{hier.duck,
+ parent = {hier.bird},
+ name = {duck},
+ description={a waterbird with webbed feet},
+ category = {hierarchical}
+}
+
+ at exampleentry{hier.goose,
+ parent = {hier.bird},
+ name = {goose},
+ description = {a large waterbird with a long neck, short legs,
+   webbed feet and a short broad bill},
+ category = {hierarchical}
+}
+
+ at exampleentry{hier.mineral,
+ name = {mineral},
+ description = {natural inorganic substance},
+ category = {hierarchical}
+}
+
+ at exampleentry{hier.calcite,
+ parent = {hier.mineral},
+ name = {calcite},
+ description = {a carbonate mineral},
+ category = {hierarchical}
+}
+
+ at exampleentry{hier.quartz,
+ parent = {hier.mineral},
+ name = {quartz},
+ description = {hard mineral consisting of silica},
+ category = {hierarchical}
+}
+
+ at exampleentry{hier.amethyst,
+ parent = {hier.quartz},
+ name = {amethyst},
+ description = {a purple type of quartz},
+ category = {hierarchical}
+}
+
+ at exampleentry{hier.citrine,
+ parent = {hier.quartz},
+ name = {citrine},
+ description = {a form of quartz with a colour ranging
+from pale yellow to brown due to ferric impurities},
+ category = {hierarchical}
+}
+
+ at exampleentry{ex2.amethyst,
+ name = {amethyst},
+ description = {a purple type of quartz},
+ symbol = {\ce{SiO2}},
+ user3={A},
+ user4={A},
+ category = {standalone}
+}
+
+ at exampleentry{ex3.goose,
+  name={goose},
+  user3={G},
+  user4={G},
+  plural={geese},
+  description={a large waterbird with a long neck, short legs,
+   webbed feet and a short broad bill},
+  category={standalone}
+}
+
+ at exampleentry{ex3.duck,
+  name={duck},
+  user3={D},
+  user4={D},
+  description={a waterbird with webbed feet},
+  category={standalone}
+}
+
+ at exampleentry{standalone.pi,
+  name = {\ensuremath{\pi}},
+  description = {Archimedes' constant},
+  user3={glssymbols},
+  user4={greek},
+  category = {standalone}
+}
+
+ at exampleentry{standalone.area,
+  name = {\ensuremath{A}},
+  description = {area},
+  user3={glssymbols},
+  user4={A},
+  category = {standalone}
+}
+
+ at exampleentry{standalone.radius,
+  name = {\ensuremath{r}},
+  description = {radius},
+  user3={glssymbols},
+  user4={R},
+  category = {standalone}
+}
+
+ at exampleentry{standalone.circumference,
+  name = {\ensuremath{C}},
+  user3={glssymbols},
+  user4={C},
+  description = {circumference},
+  category = {standalone}
+}
+


Property changes on: trunk/Master/texmf-dist/source/support/bib2gls/bib2gls.bib
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/support/bib2gls/bib2gls.pod
===================================================================
--- trunk/Master/texmf-dist/source/support/bib2gls/bib2gls.pod	                        (rev 0)
+++ trunk/Master/texmf-dist/source/support/bib2gls/bib2gls.pod	2025-01-04 20:45:53 UTC (rev 73299)
@@ -0,0 +1,509 @@
+=head1 SYNOPSIS
+
+B<bib2gls> [I<option>]+ I<auxfile>
+
+=head1 DESCRIPTION
+
+B<bib2gls> is designed to work with the B<glossaries-extra> LaTeX
+package. (The B<record> package option is required.) The application
+performs two functions in one: (1) selects entries from .bib files
+according to information found in the I<auxfile> (similar to
+B<bibtex>); (2) hierarchically sorts entries and collates location
+lists (similar to B<makeindex> and B<xindy>). The .aux extension may
+be omitted from I<auxfile>.
+
+The I<auxfile> (and corresponding .log file) should either be in the 
+current directory or in the directory specified by B<--dir>. Bib files can 
+either be relative to the directory the I<auxfile> is in
+or in a location that can be found by kpsewhich.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<--break-space>
+
+Interpret C<~> (tilde) character and C<\nobreakspace> as a normal space.
+
+=item B<--cite-as-record>
+
+Treat C<\citation> as an ignored record.
+
+=item B<--collapse-same-location-range>
+
+Collapse an explicit range that has a duplicate start and end
+location into a normal record (default).
+
+=item B<--custom-packages> I<list>
+
+Instruct the TeX parser library to attempt to parse the 
+packages listed in I<list>. This is intended for simple custom
+packages that don't contain complex code.
+
+=item B<--date-in-header> (or B<-D>)
+
+The header comment at the start of the F<.glstex> file will include
+the file modification date.
+
+=item B<--debug> [I<n>]
+
+Switch on the debug mode at the given setting I<n>, which
+should be a non-negative integer. If I<n> is B<0> then the
+debug mode is switched off. If omitted, I<n> is set to 1, which
+corresponds to B<--debug-mode> B<io>. Any positive number will
+enable all of B<bib2gls>'s debugging messages. The amount of
+TeX Parser Library debugging messages depends on bitwise operation of I<n>.
+
+=item B<--debug-mode> I<setting>
+
+May be used instead of B<--debug> where the level number is
+difficult to remember. The I<setting> may be a comma-separated list
+of any of the keywords:
+
+=over 4
+
+=item B<all>
+
+Highest level (likely to result in a large transcript file). Equivalent to
+switching on all settings.
+
+=item B<catcode>
+
+TeX Parser category code changes.
+
+=item B<cs>
+
+TeX Parser command definitions.
+
+=item B<decl>
+
+TeX Parser declarations.
+
+=item B<expansion>
+
+TeX Parser expansions (may result in a large transcript file).
+
+=item B<expansion-list>
+
+TeX Parser stack expansions (may result in a large transcript file).
+
+=item B<expansion-once>
+
+TeX Parser one-level expansions.
+
+=item B<expansion-once-list>
+
+TeX Parser one-level list expansions.
+
+=item B<io>
+
+TeX Parser I/O operations (open, close and fetch token).
+
+=item B<popped>
+
+TeX Parser stack popping.
+
+=item B<process>
+
+TeX Parser macro process (may result in a large transcript file).
+
+=item B<process-generic-cs>
+
+TeX Parser generic command process.
+
+=item B<process-stack>
+
+TeX Parser stack process (may result in a large transcript file).
+
+=item B<process-stack-list>
+
+TeX Parser detailed stack process (may result in a large transcript file).
+
+=item B<read>
+
+TeX Parser codepoint read from file (likely to result in a large
+transcript file).
+
+=item B<sty-data>
+
+TeX Parser data (typically relates to internal objects that don't
+have an analogous TeX macro). This includes data gathered from the
+aux file.
+
+=back
+
+For example: C<bib2gls --debug-mode io,catcode,sty-data mydoc>
+
+=item B<--default-encoding> I<name>
+
+Set the default character encoding for input and output files.
+If omitted, the JVM default encoding is assumed.
+
+=item B<--dir> I<directory> (or B<-d> <directory>)
+
+Files are relative to I<directory>. (This doesn't change the current
+working directory.)
+
+=item B<--expand-fields>
+
+Don't write C<\glsnoexpandfields> to the F<.glstex> file.
+
+=item B<--force-cross-resource-refs> or B<-x>
+
+Force cross-resource referencing mode on.
+
+=item B<--group> or B<-g>
+
+Add B<group> field to entries.
+
+=item B<--help> or B<-h>
+
+Display help message and exit.
+
+=item B<--ignore-packages> I<list> (or B<-k> I<list>)
+
+Don't parse the log file for the packages listed in I<list>. Note
+that B<--packages> overrides this option, so if the same package is
+listed in both B<--ignore-packages> and B<--packages> then the
+interpreter will check if it's supported. This option has a
+cumulative action. Only known packages may be included in
+I<list>.
+
+=item B<--interpret>
+
+Use the TeX Parser Library to interpret known (La)TeX commands
+(default).
+
+=item B<--list-known-packages>
+
+Lists all the packages that have are known to the TeX parser
+library and then exits (with exit code 0). Any of the listed
+packages may be used in B<--packages> or B<--ignore-packages>.
+
+=item B<--locale> I<lang> (or B<-l> I<lang>)
+
+Use language resource file for I<lang> (which should be an IETF
+locale tag). 
+
+=item B<--log-encoding> I<name>
+
+Set the character encoding for the F<log> files (which may not be
+the same as the encoding for the document LaTeX files). 
+
+=item B<--log-file> I<file> (or B<-t> <file>)
+
+Set the transcript file.
+
+=item B<--merge-nameref-on> I<rule>
+
+Rule for merging locations created with the B<record=nameref> package option
+(requires F<glossaries-extra.sty> version 1.37+). The I<rule> may be
+one of: B<hcounter>, B<href>, B<title> or B<location>.
+
+=item B<--merge-wrglossary-records>
+
+Merge an entry's B<wrglossary> records for the same page locations.
+(For use with the B<indexcounter> package option.)
+
+=item B<--mfirstuc-math-protection>
+
+Switch on the auto-insertion of an empty group for math-shift (C<$>).
+
+If F<mfirstuc> v2.08+, F<glossaries> v4.50+ and F<glossaries-extra> v1.49+ 
+are detected, the default will be B<--no-mfirstuc-math-protection>
+as there should no longer be any need for this protection.
+
+=item B<--mfirstuc-protection> I<fields>|B<all> (or B<-u> I<fields>|B<all>)
+
+Insert an empty group if fields start with certain problematic
+commands to protect against case-changing commands like C<\Gls>.
+
+The default is to do this for all fields.  To do this for only a
+subset of fields, set I<fields> to a comma-separated list of fields
+(e.g. B<name,short,long>).  The keyword B<all> indicates all fields.
+
+If F<mfirstuc> v2.08+, F<glossaries> v4.50+ and F<glossaries-extra> v1.49+ 
+are detected, the default will be B<--no-mfirstuc-protection>
+as there should no longer be any need for this protection.
+
+=item B<--nested-link-check> I<list>|B<none>
+
+Check each field listed in I<list> for potentially problematic
+nested link text. (Default list: name, text, plural, first,
+firstplural, short, shortplural, long, longplural, symbol).
+
+If B<none>, disable check.
+
+=item B<--no-break-space>
+
+Interpret C<~> (tilde) and C<\nobreakspace> as a non-breaking space (default).
+
+=item B<--no-cite-as-record>
+
+Don't check for instances of C<\citation> in the F<.aux> file (default).
+
+=item B<--no-collapse-same-location-range>
+
+Don't collapse an explicit range that has a duplicate start and end
+location into a normal record.
+
+=item B<--no-date-in-header>
+
+The header comment at the start of the F<.glstex> file will not include
+the file modification date (default).
+
+=item B<--no-debug> (or B<--nodebug>)
+
+Switch off debug mode. (Equivalent to B<--debug> B<0>)
+
+=item B<--no-expand-fields>
+
+Write C<\glsnoexpandfields> to the F<.glstex> file (default).
+
+=item B<--no-force-cross-resource-refs>
+
+Don't force cross-resource referencing mode on (default).
+
+=item B<--no-group>
+
+Don't add B<group> field to entries (default).
+
+=item B<--no-interpret>
+
+Don't try interpreting (La)TeX commands. The TeX Parser Library will
+still be used to parse the F<aux> and F<bib> files.
+
+=item B<--no-merge-wrglossary-records>
+
+Don't merge an entry's B<wrglossary> records.
+
+=item B<--no-mfirstuc-math-protection>
+
+Switch off the auto-insertion of an empty group for math-shift (C<$>).
+
+=item B<--no-mfirstuc-protection>
+
+Switch off the auto-insertion of an empty group for all fields.
+
+=item B<--no-nested-link-check>
+
+Don't check for potentially problematic nested link text.
+(Equivalent to B<--nested-link-check> B<none>)
+
+=item B<--no-obey-aux-catcode>
+
+Ignore category code changing commands encountered in the aux file.
+
+=item B<--no-provide-glossaries>
+
+Don't write C<\provideignoredglossary*> to the F<.glstex> file to
+provide unknown glossaries except in documented situations
+(B<master>, B<secondary> and B<trigger-type> resource options).
+This setting is the default.
+
+=item B<--no-record-count>
+
+Don't add record count field to entries (default).
+This option automatically implements B<--no-record-count-unit>.
+
+=item B<--no-record-count-unit>
+
+Don't add unit record count field to entries (default).
+
+=item B<--no-replace-quotes>
+
+Don't replace quote characters (default).
+
+=item B<--no-retain-formats>
+
+Normal location merging rules apply (default).
+
+=item B<--no-support-unicode-script>
+
+Text superscript (C<\textsuperscript>) or subscripts (C<\textsubscript>)
+won't be converted to Unicode superscript/subscript characters.
+For example, C<\textsuperscript{2}> will be converted to C<E<lt>supE<gt>2E<lt>/supE<gt>>
+and the markup will be stripped leaving just the character 2.
+
+=item B<--no-trim-fields>
+
+Don't trim leading and trailing spaces from fields (default).
+This option cancels B<--trim-only-fields> and B<--trim-fields>.
+
+=item B<--no-verbose> (or B<--noverbose>)
+
+Switch off verbose mode. (Some messages will still be written to
+STDOUT.)
+
+=item B<--no-warn-non-bib-fields>
+
+Don't warn if internal non-bib fields are found in the F<.bib> file.
+The use of these internal fields can cause unexpected results, so
+only use this option if you have taken appropriate precautions.
+
+=item B<--no-warn-unknown-entry-types>
+
+Don't warn if any unknown entry types are found in the F<.bib> file.
+
+=item B<--obey-aux-catcode>
+
+Obey known category code changing commands encountered in the aux
+file.
+
+=item B<--packages> I<list> (or B<-p> I<list>)
+
+Instruct the TeX parser library to pretend the packages listed 
+in I<list> have been used by the document. Note that there's only a
+limited number of packages supported by the TeX parser library.
+This option has a cumulative action so B<--packages wasysym,pifont>
+is the same as B<--packages wasysym --packages pifont>.
+
+You can find out the list of supported packages with
+B<--list-known-packages>.
+
+=item B<--provide-glossaries>
+
+Write C<\provideignoredglossary*> to the F<.glstex> file to provide
+unknown glossaries.
+
+=item B<--quiet> (or B<-q>)
+
+Only display error messages. All other messages are just written to
+the transcript file.
+
+=item B<--record-count> or B<-c>
+
+Add record count fields to entries.
+
+=item B<--record-count-rule> I<rule> or B<-r> I<rule>
+
+Sets the rule used by B<--record-count> and B<--record-count-unit>.
+This option automatically implements B<--record-count>.
+
+The I<rule> may be: C<all> or C<a> (count all records), 
+C<non-ignored> or C<n> (count all non-ignored records), 
+C<f/>I<regex>C</> (only count records where the format 
+matches the regular expression I<regex>),
+C<c/>I<regex>C</> (only count records where the counter name 
+matches the regular expression I<regex>),
+or C<f/>I<regex1>C</c/>I<regex2>C</>I<op> (only count records where the format 
+matches the regular expression I<regex1> and/or the counter name 
+matches the regular expression I<regex2>). The I<op> part is
+optional. If present it may be one of: C<and> (format AND counter
+must match), C<or> (format OR counter must match). If I<op> is
+omitted, AND is assumed.
+
+=item B<--record-count-unit> or B<-n>
+
+Add unit record count fields to entries.
+This option automatically implements B<--record-count>.
+
+=item B<--replace-quotes>
+
+Replace single and double quote characters (C<'> and C<">) with 
+C<\bibglsaposchar> and C<\bibglsdoublequotechar> in field values
+and group information written to the F<.glstex> file.
+
+=item B<--retain-formats> I<list>
+
+Indicates which location formats should always be retained even if
+it causes a partial duplicate. Only exact duplicates will be merged.
+
+=item B<--shortcuts> I<option>
+
+Check for the shortcut commands when searching for dependencies.
+Permitted values of I<option>: B<acronyms> (or B<acro>), B<ac>,
+B<abbreviations> (or B<abbr>), B<all> (or B<true>), B<none> (or
+B<false>). This overrides the setting given in I<auxfile>.
+
+=item B<--map-format> I<key>B<:>I<value>[B<,>I<key>B<:>I<value>]* (or 
+B<-m> I<key>B<:>I<value>[B<,>I<key>B<:>I<value>]*)
+
+Set location format mappings.
+
+=item B<--silent>
+
+Only display error messages. All other messages are just written to
+the transcript file. (Synonym of B<--quiet>.)
+
+=item B<--support-unicode-script>
+
+Text superscript (C<\textsuperscript>) or subscripts (C<\textsubscript>)
+will use Unicode superscript/subscript characters if available.
+For example, C<\textsuperscript{2}> will be converted to U+00B2
+(superscript two).
+
+=item B<--tex-encoding> I<name>
+
+Set the character encoding for the F<glstex> files. This overrides the
+setting given in I<auxfile>.
+
+=item B<--trim-except-fields> I<list>
+
+Trim leading and trailing spaces from all fields except those listed.
+This option is cumulative but is cancelled by B<--trim-fields>
+and B<--no-trim-fields>. This option may not be used with
+B<--trim-only-fields>.
+
+=item B<--trim-fields>
+
+Trim leading and trailing spaces from all fields.
+This option cancels B<--trim-only-fields> and B<--no-trim-fields>.
+
+=item B<--trim-only-fields> I<list>
+
+Trim leading and trailing spaces from only the listed fields.
+This option is cumulative but is cancelled by B<--trim-fields>
+and B<--no-trim-fields>. This option may not be used with
+B<--trim-except-fields>.
+
+=item B<--verbose>
+
+Switch on verbose mode.
+
+=item B<--version> or B<-v>
+
+Display version information and exit.
+
+=item B<--warn-non-bib-fields>
+
+Warn if internal non-bib fields are found in the F<.bib> file.
+
+=item B<--warn-unknown-entry-types>
+
+Warn if any unknown entry types are found in the F<.bib> file.
+
+=back
+
+=head1 REQUIRES
+
+Java 8 or later and a TeX distribution.
+
+=head1 LICENSE
+
+License GPLv3+: GNU GPL version 3 or later
+L<http://gnu.org/licenses/gpl.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+=head1 RECOMMENDED READING
+
+The bib2gls manual:
+
+        texdoc bib2gls
+
+The glossaries-extra manual:
+
+        texdoc glossaries-extra
+
+The glossaries manual:
+
+        texdoc glossaries
+
+=head1 AUTHOR
+
+Nicola L. C. Talbot,
+L<https://www.dickimaw-books.com/>
+
+=cut
+


Property changes on: trunk/Master/texmf-dist/source/support/bib2gls/bib2gls.pod
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/support/bib2gls/bib2gls.tex
===================================================================
--- trunk/Master/texmf-dist/source/support/bib2gls/bib2gls.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/source/support/bib2gls/bib2gls.tex	2025-01-04 20:45:53 UTC (rev 73299)
@@ -0,0 +1,29541 @@
+% arara: lualatex
+% arara: bib2gls: {group: on} if missing("glstex") || changed("bib") || found("log", "Warning: Glossary entry")
+% arara: bibtex
+% arara: lualatex if changed("glstex") || missing("toc")
+% arara: bib2gls: {group: on, packages: [mfirstuc-english]}
+% arara: lualatex
+% arara: lualatex
+\documentclass[titlepage=false,index=totoc,bibliography=totoc,
+ fontsize=12pt,captions=tableheading]{scrreprt}
+
+\usepackage[autooneside=false]{scrlayer-scrpage}
+\usepackage{pifont}
+
+% Need support for less common extended characters
+% and need a mono font that supports hyphenation
+\usepackage[no-math]{fontspec}
+\setmainfont{Linux Libertine O}
+
+\newfontface\cyrillicmono{FreeMono}[Scale=MatchLowercase]
+\newcommand{\textcyrillicmono}[1]{{\cyrillicmono #1}}
+
+\newfontface\greekmono{FreeMono}[Scale=MatchLowercase]
+\newfontface\freeserif{FreeSerif}
+\newcommand{\devone}{{\freeserif\char"0967}}
+\newcommand{\devtwo}{{\freeserif\char"0968}}
+\newcommand{\devsix}{{\freeserif\char"096C}}
+\newcommand{\insularG}{{\freeserif\char"A77D}}
+\newcommand{\insularg}{{\freeserif\char"1D79}}
+\newcommand{\longs}{\char"017F}
+\newcommand{\Wynn}{\char"01F7}
+\newcommand{\wynn}{\char"01BF}
+
+\usepackage[x11names]{xcolor}
+\usepackage{alltt}
+\usepackage{array}
+\usepackage{upquote}
+\usepackage{etoolbox}
+
+\usepackage{hologo}
+\usepackage{amsmath}
+\usepackage{accents}
+\usepackage{tikz}
+\usepackage{tcolorbox}
+\usepackage{datetime2}
+\usepackage{mfirstuc-english}
+\usepackage{listings}
+\usepackage{scrhack}
+\usepackage[hidelinks]{hyperref}
+\usepackage{cleveref}
+\usepackage[% v1.47+
+   record,% use bib2gls
+   index,% create index glossary
+   entrycounter,% enable entry counting
+   subentrycounter,% enable entry counting
+   %debug=showtargets,% debugging information
+   %debug=showwrgloss,% debugging information
+   stylemods={mcols,bookindex},% adjust predefined styles and load glossary-mcols.sty and glossary-bookindex.sty
+   style=bookindex
+ ]
+ {glossaries-extra}
+
+\lstset{language={[LaTeX]TeX},upquote,basicstyle={\ttfamily\small},
+ commentstyle={\color{gray}}}
+
+\renewcommand*{\glsshowtarget}[1]{\texttt{\small [#1]}}
+
+\glsxtrprovidestoragekey{note}{}{}
+\glsxtrprovidestoragekey{package}{}{}
+\glsxtrprovidestoragekey{nametitle}{}{}
+
+\providecommand{\omicron}{o}
+
+% put break before dash to avoid confusion with a hyphen
+\newcommand{\dhyphen}{%
+ \texorpdfstring
+ {\discretionary{}{}{}\texttt{-}}%
+ {-}%
+}
+
+% Redefine \- (used in entry names) so that hyphenation in command names, 
+% switches options etc uses a serif hyphen to reduce confusion with an 
+% actual hyphen in the code.
+\renewrobustcmd{\-}{%
+ \discretionary
+ {{\rmfamily\char\ifnum\hyphenchar\font<0
+  \defaulthyphenchar\else\hyphenchar\font\fi
+ }}%
+ {}{}%
+}
+
+\renewcommand{\glsentrycounterlabel}{}
+\renewcommand{\glssubentrycounterlabel}{}
+\renewcommand\glstreeitem{\par\hangindent10pt}
+\renewcommand\glstreesubitem{\par\hangindent30pt\hspace*{15pt}}
+
+\newcommand{\bibglsseealsosep}{\glstreesubitem}
+
+\renewcommand*{\glsseesep}{, \glstreesubitem\quad}
+\renewcommand*{\glsseelastsep}{\glstreesubitem\quad\strut\llap{\andname\space}}
+
+\newcommand{\glsxtrpostnameabbreviation}{%
+ \space(\glsentrylong{\glscurrententrylabel})%
+}
+
+\newcommand{\glsxtrpostnameenvironment}{\space environment}
+\newcommand{\glsxtrpostnamecounter}{\space counter}
+
+\newcommand*{\csfmtfont}[1]{\texttt{#1}}
+\newcommand*{\csfmtcolourfont}[1]{\texttt{\textcolor{cs}{#1}}}
+
+\newcommand*{\csfmt}[1]{%
+ \texorpdfstring
+ {\csfmtfont{\char`\\ #1}}%
+ {\string\\#1}%
+}
+
+\newcommand{\texparserdefprefix}{}
+\newcommand{\texparserdefnotetarget}{%
+  \raisebox{2ex}{\hypertarget{\texparserdefprefix texparserdef}{}}%
+  \textsuperscript{*}Indicates command is
+  recognised by \bibgls's interpreter although it may have
+  a slightly different implementation.
+}
+\newcommand{\texparserdefnote}{\hyperlink{\texparserdefprefix texparserdef}{*}}
+
+\setabbreviationstyle{long-short-sc}
+\setabbreviationstyle[common]{short-sc-nolong}
+
+\glsxtrprovidestoragekey{unsortedprogeny}{}{}
+
+\newcommand*{\longargfmt}[1]{%
+ \texorpdfstring{\texttt{\longswitch #1}}%
+ {\string-\string-#1}%
+}
+
+\GlsXtrLoadResources[
+  entry-type-aliases={
+   bibglscommand=dualindexentry,
+   mainglscommand=spawndualindexentry,
+   glscommand=spawnentry,
+   abbrvstylecommand=spawnentry,
+   glostylecommand=spawnentry,
+   resourceoption=dualindexentry,
+   packageoption=dualindexentry,
+   field=dualindexentry,
+   entrytype=dualindexentry,
+   switch=dualindexentry,
+   samplefile=dualindexentry,
+   examplecommand=dualindexentry,
+   examplesymbol=symbol,
+   exampleabbreviation=abbreviation,
+   exampleentry=entry
+  },
+  max-loc-diff={2},
+  see=omit,seealso=omit,alias=omit,
+  field-aliases={topics=adoptparents,annote=user2},
+  replicate-fields={name=nametitle,progeny=unsortedprogeny},
+  word-boundaries={white space,cs space,dash},
+  field-case-change={nametitle=title},
+  interpret-fields={nametitle},
+  no-case-change-cs={fieldfmt,abbrstylefmt,glostylefmt},
+  short-case-change={lc},
+  dual-short-case-change={lc},
+  unknown-entry-alias={index},
+  save-original-entrytype,
+  label-prefix={idx.},
+  save-loclist=false,
+  sort={letternumber-nocase},
+  sort-replace={{\glshex2423}{ },{\string\\([a-zA-Z])}{\glscapturedgroup1}},
+  type={index},
+  dual-field={dualid},
+  match-action={add},
+  match-op={or},
+  match={
+   {category}={.*field},
+   {original entrytype}={.*(gls|style)command},
+   {original entrytype}={.*option},
+   {original entrytype}={abbreviationstyle},
+   {original entrytype}={glossarystyle},
+  },
+  dual-prefix={},
+  dual-type={main},
+  ext-prefixes={},
+  combine-dual-locations={primary},
+  selection={recorded and deps and see not also},
+  symbol-sort-fallback={name},
+  sort-label-list={progeny:letter-nocase:glsxtrentryparentname},
+  strip-missing-parents,
+  save-child-count
+]
+
+\newglossary*{terms}{Glossary}
+\GlsXtrLoadResources[src=bib2gls-terms,
+ name-case-change=title,replicate-fields={name=text},
+ type=terms,save-locations=false,category=term]
+
+\newcommand{\igls}[2][]{%
+ \glsxtrifhasfield{useri}{#2}{\glsadd{\glscurrentfieldvalue}}{}%
+ \gls[#1]{#2}%
+}
+\newcommand{\iglspl}[2][]{%
+ \glsxtrifhasfield{useri}{#2}{\glsadd{\glscurrentfieldvalue}}{}%
+ \glspl[#1]{#2}%
+}
+\newcommand{\primary}{\glsdisp{primaryentry}{primary}}
+\newcommand{\dual}{\glsdisp{dualentry}{dual}}
+\newcommand{\parent}{\glsdisp{parententry}{parent}}
+\newcommand{\child}{\glsdisp{childentry}{child}}
+\newcommand{\children}{\glsdisp{childentry}{children}}
+\newcommand{\hierarchicallevel}{\glsdisp{hierarchicalglossary}{hierarchical level}}
+\newcommand{\hierarchical}{\glsdisp{hierarchicalglossary}{hierarchical}}
+\newcommand{\hierarchically}{\glsdisp{hierarchicalglossary}{hierarchically}}
+\newcommand{\hierarchy}{\glsdisp{hierarchicalglossary}{hierarchy}}
+\newcommand{\mainglossary}{\glsdisp{mainglossary}{\code{main} glossary}}
+\newcommand{\supplementallocation}{\glsdisp{supplementalrecord}{supplemental
+location}}
+\newcommand{\supplementallocations}{\glsdisp{supplementalrecord}{supplemental
+locations}}
+\newcommand{\supplementarylocation}{\glsdisp{supplementalrecord}{supplementary
+location}}
+\newcommand{\supplementarylocations}{\glsdisp{supplementalrecord}{supplementary
+locations}}
+\newcommand{\supplementarydocument}{\glsdisp{supplementaldocument}{supplementary
+document}}
+\newcommand{\supplementarydocuments}{\glsdisp{supplementaldocument}{supplementary
+documents}}
+\newcommand{\supplemental}{\glsdisp{supplementaldocument}{supplemental}}
+\newcommand{\supplementary}{\glsdisp{supplementaldocument}{supplementary}}
+
+\glsxtraddlabelprefix{}
+\glsxtraddlabelprefix{idx.}
+
+\DTMsavetimestamp{creation}{2017-01-20T15:39:00Z}
+
+\IfFileExists{../java/common/BibGlsTeXApp}
+{
+  \DTMsavefilemoddate{moddate}{../java/common/BibGlsTeXApp.java}
+}
+{
+  \DTMsavenow{moddate}
+}
+
+\newif\ifmainmatter
+
+% ignore locations outside of main matter
+\GlsXtrSetDefaultNumberFormat{glsignore}
+
+\GlsXtrSetPlusModifier{format=glsnumberformat}
+\GlsXtrSetAltModifier{!}{format=glsignore}
+
+\newcommand{\frontmatter}{%
+ \clearpage\pagenumbering{roman}%
+ \pagestyle{scrheadings}%
+ \automark[section]{chapter}%
+ \mainmatterfalse
+}
+\newcommand{\mainmatter}{%
+ \clearpage\pagenumbering{arabic}%
+ \GlsXtrSetDefaultNumberFormat{glsnumberformat}%
+ \mainmattertrue
+}
+
+\newcommand{\rightleftmark}[2]{\ifstrequal{#1}{#2}{#1}{#1: #2}}
+\makeatletter
+\newcommand{\setsecdepth}{\@ifstar\s at setsecdepth\@setsecdepth}
+\newcommand{\s at setsecdepth}[1]{%
+ \setcounter{secnumdepth}{#1}%
+ \automark[section]{chapter}%
+ \let\@rightmark\rightleftmark
+}
+\newcommand{\@setsecdepth}[1]{%
+ \setcounter{secnumdepth}{#1}%
+ \ifnum#1 > 0
+  \automark[section]{chapter}%
+ \else
+  \automark{chapter}%
+ \fi
+ \let\@rightmark\@secondoftwo
+}
+\makeatother
+
+\newtcolorbox{important}{colback=red!5!white,colframe=red}
+
+\newcommand{\bibgls}{\appfmt{bib2gls}}
+
+\newcommand*{\BibTeX}{\hologo{BibTeX}}
+\newcommand*{\eTeX}{\hologo{eTeX}}
+\newcommand*{\XeLaTeX}{\hologo{XeLaTeX}}
+\newcommand*{\LuaLaTeX}{\hologo{LuaLaTeX}}
+\newcommand*{\pdfLaTeX}{\hologo{pdfLaTeX}}
+
+\newcommand{\langxml}{\hyperref[sec:lang.xml]{language resource file}}
+\newcommand{\texparserlib}{\hyperref[sec:texparserlib]{\TeX\ Parser
+Library}}
+
+\newcommand{\hex}[1]{0x#1}
+\newcommand{\hexsb}[1]{\textsubscript{\scriptsize\rmfamily#1}}
+\newcommand{\subfigfmt}[1]{(\emph{#1})}
+
+\newcommand{\qt}[1]{``#1''}
+
+\newcommand{\qtt}[1]{\qt{\,\texttt{#1}\,}}
+
+\newcommand{\qtdelim}[1]{\idx{doublequotechardelim}#1\idx{doublequotechardelim}}
+
+\newcommand{\ifnumhex}[1]{\cs{ifnum}\idx{doublequotecharhex}#1}
+
+\newcommand{\charhex}[1]{\cs{char}\idx{doublequotecharhex}#1}
+\newcommand{\icharhex}[1]{\ics{char}\idx[format=glsnumberformat,noindex=false]{doublequotecharhex}#1}
+
+\newcommand{\era}[1]{\texorpdfstring{\textsc{\MakeLowercase{#1}}}{#1}}
+
+\newcommand{\dequals}{%
+ \texorpdfstring
+ {\discretionary{}{}{}\texttt{=}\discretionary{}{}{}}%
+ {=}%
+}
+
+\newcommand{\dcomma}{%
+ \texorpdfstring
+ {\texttt{,}\discretionary{}{}{}}%
+ {,}%
+}
+
+\newcommand{\dcolon}{%
+ \texorpdfstring
+ {\texttt{:}\discretionary{}{}{}}%
+ {:}%
+}
+
+\pdfstringdefDisableCommands{%
+  \def\dhyphen{-}%
+  \def\dcolon{:}%
+  \def\dcomma{,}%
+  \def\dequals{,}%
+  \let\-\empty
+}
+
+% Provide commands that work like \gls[#1]{idx.#2}[#3]
+
+\glsxtrnewglslike{idx.}{\idx}{\idxpl}{\Idx}{\Idxpl}
+\newcommand{\idxlink}[3][]{\glslink[#1]{idx.#2}{#3}}
+
+\newcommand{\stringu}{\idx{cs.string}\gls{uhex}}
+
+\newcommand*{\filefmt}[1]{\texorpdfstring{\texttt{#1}}{#1}}
+\newcommand*{\metafilefmt}[3]{%
+  \filefmt{#1}\discretionary{}{}{}\meta{#2}\discretionary{}{}{}\filefmt{#3}%
+}
+\newcommand*{\metametafilefmt}[5]{%
+  \filefmt{#1}\discretionary{}{}{}\meta{#2}\discretionary{}{}{}\filefmt{#3}%
+  \discretionary{}{}{}\meta{#4}\discretionary{}{}{}\filefmt{#5}%
+}
+
+\newcommand*{\primaryresourcefmt}{%
+ \texorpdfstring
+  {\texttt{\char`\\ jobname.glstex}}%
+  {\string\\jobname.glstex}%
+}
+
+\newcommand*{\suppresourcefmt}[1]{%
+ \texorpdfstring
+  {\texttt{\char`\\ jobname-#1.glstex}}%
+  {\string\\jobname-#1.glstex}%
+}
+
+\definecolor{field}{named}{DarkSlateGray4}
+\definecolor{cs}{named}{DarkSeaGreen4}
+\definecolor{styopt}{named}{DarkOrchid4}
+\definecolor{entry}{named}{SteelBlue4}
+\definecolor{comment}{named}{gray}
+\definecolor{attribute}{named}{Purple4}
+\definecolor{style}{named}{Blue4}
+
+\newcommand{\extstyopt}{\textsuperscript{\textdagger}}
+
+\newcommand*{\appfmt}[1]{\texorpdfstring{\texttt{#1}}{#1}}
+\newcommand*{\styfmt}[1]{\texorpdfstring{\textsf{#1}}{#1}}
+\newcommand*{\envfmt}[1]{\texorpdfstring{\textsf{#1}}{#1}}
+\newcommand*{\optfmt}[1]{\texorpdfstring{\texttt{#1}}{#1}}
+\newcommand*{\csoptfmt}[1]{\texorpdfstring{\textcolor{cs}{\optfmt{#1}}}{#1}}
+\newcommand*{\styoptfmt}[1]{\texorpdfstring{\textcolor{styopt}{\optfmt{#1}}}{#1}}
+\newcommand*{\fieldfmt}[1]{\texorpdfstring{\texttt{\color{field}#1}}{#1}}
+\newcommand*{\entryfmt}[1]{\texorpdfstring{\texttt{\color{entry}#1}}{#1}}
+\newcommand*{\atentryfmt}[1]{\entryfmt{@#1}}
+\newcommand*{\abbrstylefmt}[1]{\texorpdfstring{\textsf{#1}}{#1}}
+\newcommand*{\glostylefmt}[1]{\texorpdfstring{\textsf{#1}}{#1}}
+\newcommand*{\catattrfmt}[1]{\texorpdfstring{\textsf{#1}}{#1}}
+\newcommand*{\counterfmt}[1]{\texorpdfstring{\textsf{#1}}{#1}}
+\newcommand*{\idprefixfmt}[1]{%
+ \texorpdfstring{\texttt{#1\spacefactor999 .}}{#1.}}
+\newcommand*{\xmltagfmt}[1]{\texorpdfstring{\texttt{#1}}{#1}}
+
+\newcommand*{\argor}{\texorpdfstring{\protect\textbar}{|}}
+
+\newrobustcmd*{\texmeta}[1]{{\normalfont\normalcolor$\langle$\emph{#1}$\rangle$}}
+
+\newcommand*{\meta}[1]{%
+ \texorpdfstring{\ifmmode\text{\texmeta{#1}}\else\texmeta{#1}\fi}{#1}%
+}
+
+\newcommand*{\oarg}[1]{\discretionary{}{}{}[#1]}
+\newcommand*{\oargm}[1]{\oarg{\meta{#1}}}
+
+\newcommand*{\marg}[1]{\texorpdfstring
+ {\discretionary{}{}{}\char`\{#1\char`\} }%
+ {\{#1\}}%
+}
+
+\newcommand*{\margm}[1]{\marg{\meta{#1}}}
+
+\newcommand*{\file}[1]{%
+ \texorpdfstring
+ {\idx{file.#1}}%
+ {#1}%
+}
+
+\newcommand{\texmfcnffmt}[1]{\texttt{#1}}
+
+\glsxtrnewgls{idx.texmfcnf.}{\texmfcnf}
+
+\newcommand*{\extfmt}[1]{\filefmt{.#1}}%
+
+\glsxtrnewgls[format=glsignore]{idx.ext.}{\ext}
+
+\newcommand*{\iext}[1]{%
+ \glsxtrtitleorpdforheading{\idx{ext.#1}}{.#1}{\extfmt{#1}}%
+}
+
+\glsxtrnewgls[format=glsignore]{idx.}{\sty}
+
+\newcommand*{\isty}[1]{%
+  \texorpdfstring{\idx[noindex=false]{#1}}{#1}%
+}
+
+\newcommand*{\env}[1]{%
+  \texorpdfstring{\idx{env.#1}}{#1}%
+}
+
+\newcommand{\glsxtrpostdescenvironment}{environment}
+
+\newcommand*{\abbrstyle}[1]{%
+  \texorpdfstring{\idx{abbrstyle.#1}}{#1}%
+}
+
+\newcommand*{\topicabbrstyle}[1]{%
+  %\texorpdfstring{\idx[prefix=topic.]{abbrstyle.#1}}{#1}%
+  \texorpdfstring{\idx{abbrstyle.#1}}{#1}%
+}
+
+\newcommand*{\glostyle}[1]{%
+  \texorpdfstring{\idx{glostyle.#1}}{#1}%
+}
+
+\newcommand*{\topicglostyle}[1]{%
+ %\texorpdfstring{\idx[prefix=topic.]{glostyle.#1}}{#1}%
+ \texorpdfstring{\idx{glostyle.#1}}{#1}%
+}
+
+\newcommand*{\iglostyle}[1]{%
+  \texorpdfstring{\idx[noindex=false]{glostyle.#1}}{#1}%
+}
+
+\newcommand*{\catattr}[1]{%
+  \texorpdfstring{\idx{catattr.#1}}{#1}%
+}
+
+\newcommand*{\counter}[1]{%
+  \texorpdfstring{\idx{ctr.#1}}{#1}%
+}
+
+\newcommand{\glsxtrpostdesccounter}{counter}
+
+\newcommand*{\idprefix}[1]{%
+ \texorpdfstring{\idx{idprefix.#1}}{#1}%
+}
+
+
+\newcommand*{\styopt}[2][]{%
+  \texorpdfstring%
+  {%
+    \gls{styopt.#2}\styoptfmt{\ifblank{#1}{}{\dequals\marg{#1}}}%
+  }%
+  {#2\ifblank{#1}{}{=#1}}%
+}
+
+\newcommand*{\istyopt}[2][]{%
+  \texorpdfstring%
+  {%
+    \gls[noindex=false]{styopt.#2}\styoptfmt{\ifblank{#1}{}{\dequals\marg{#1}}}%
+  }%
+  {#2\ifblank{#1}{}{=#1}}%
+}
+
+\newcommand*{\styoptref}[1]{\gls[format=glsignore]{styopt.#1}}
+
+\newcommand*{\keyval}{%
+ \texorpdfstring
+ {\meta{key}\dequals \meta{value}}%
+ {key=value}%
+}
+
+\newcommand*{\keyvallist}{%
+ \texorpdfstring
+ {key\dequals value list}%
+ {key=value list}%
+}
+
+\newcommand{\cssectioncmd}{\subsection}
+
+\newcommand{\cssection}[2][\cssectioncmd]{%
+ #1{\texorpdfstring{\glsxtrglossentry{#2}}{\string\\#2}}%
+}
+
+\newcommand{\nameparen}[1]{ (#1)}
+\newcommand{\prefixedcssection}[3][\cssectioncmd]{%
+ {%
+   \renewcommand{\nameparen}[1]{}%
+   #1{\texorpdfstring{\glsxtrglossentry{#2.#3}}{\string\\#3}}%
+ }%
+}
+
+\newcommand{\format}[1]{%
+  \gls{#1}\glsentryuseri{#1}%
+}
+
+\newcommand{\formatdef}[1]{%
+  \begin{definition}%
+  \gls[hyper=false]{#1}\glsentryuseri{#1}%
+  \end{definition}\ignorespaces
+}
+
+\newcommand{\nosecformatdef}[1]{%
+  \begin{definition}
+   \renewcommand{\GlsXtrStandaloneEntryName}[1]{\glstarget{##1}{\strut}\cs{##1}}%
+   \glsadd{#1}\glsxtrglossentry{#1}%
+   \glsentryuseri{#1}%
+  \end{definition}\ignorespaces
+}
+
+\newcommand{\nosecdef}[1]{%
+  \begin{flushleft}\ttfamily
+   \renewcommand{\GlsXtrStandaloneEntryName}[1]{\glstarget{##1}{\strut}\cs{##1}}%
+   \glsadd{#1}\glsxtrglossentry{#1}%
+   \glsentryuseri{#1}%
+  \end{flushleft}\ignorespaces
+}
+
+\newcommand{\inlinedef}[1]{%
+  \code
+  {%
+   \glsadd{#1}\glsxtrglossentry{#1}%
+   \glsentryuseri{#1}%
+  }%
+}
+
+\newcommand*{\csref}{\gls}
+
+\newcommand*{\cs}[1]{%
+  \glsdoifexists{idx.#1}%
+  {\glsdohyperlink{\glolinkprefix cs.idx.#1}{\glsentryname{idx.#1}}}%
+}
+
+\glsxtridentifyglslike{idx.}{\cs}
+
+\newcommand*{\ics}[2][]{\glsadd[#1]{idx.#2}\cs{#2}}
+
+\newcommand*{\csdisp}[2]{%
+ \texorpdfstring
+ {\glsdohyperlink{\glolinkprefix cs.idx.#1}{\csfmt{#2}}}%
+ {\string\\#2}%
+}
+
+\newcommand*{\icsdisp}[3][]{%
+ \glsadd[#1]{idx.#2}\glsdohyperlink{\glolinkprefix cs.idx.#2}{\csfmt{#3}}%
+}
+
+\newcommand*{\encapdisp}[2]{%
+ \texorpdfstring
+ {\glsdohyperlink{\glolinkprefix cs.idx.#1}{\code{#2}}}%
+ {#2}%
+}
+
+\glsxtridentifyglslike{idx.}{\ics}
+
+\newcommand*{\icswithargs}[2][]{\glsadd[#1]{idx.#2}\cs{#2}\glsentryuseri{#2}}
+
+\newcommand*{\postdeschook}[1]{%
+ \glsdohyperlink{\glolinkprefix cs.idx.glsxtrpostdesccategory}{\csfmt{glsxtrpostdesc#1}}}
+\newcommand*{\postnamehook}[1]{%
+ \glsdohyperlink{\glolinkprefix cs.idx.glsxtrpostnamecategory}{\csfmt{glsxtrpostname#1}}}
+\newcommand*{\postlinkhook}[1]{%
+ \glsdohyperlink{\glolinkprefix cs.idx.glsxtrpostlinkcategory}{\csfmt{glsxtrpostlink#1}}}
+
+\newcommand*{\encap}[2][]{\glsadd[#1]{idx.#2}%
+ {%
+   \let\csfmt\code
+   \glsdohyperlink{\glolinkprefix cs.idx.#2}{\glsentryname{idx.#2}}%
+ }%
+}
+
+\newcommand{\optsection}[2][\subsection]{%
+ \glsxtrifhasfield*{useri}{opt.#2}%
+ {%
+   #1[\texorpdfstring
+       {\glsxtrheadname{opt.#2}\csoptfmt{=\glscurrentfieldvalue}}%
+       {\glsentryname{opt.#2}=\glscurrentfieldvalue}]
+     {\glsadd{opt.#2}\glsxtrglossentry{opt.#2}%
+       \csoptfmt{=\glscurrentfieldvalue}% 
+     }%
+ }%
+ {%
+   #1[\texorpdfstring{\glsxtrheadname{opt.#2}}{\glsentryname{opt.#2}}]
+     {\glsadd{opt.#2}\glsxtrglossentry{opt.#2}}%
+ }%
+}
+
+\glsxtrnewgls{file.}{\exfile}
+
+\newcommand{\filesection}[2][\section]{%
+ #1[\texorpdfstring{\glsxtrheadname{file.#2}}{\glsentryname{file.#2}}]
+   {\glsadd{file.#2}\glsxtrglossentry{file.#2}}%
+}
+
+\newcommand*{\csopt}[2][]{\gencsopt{#1}{opt}{#2}}%
+\newcommand*{\glsopt}[2][]{\gencsopt{#1}{idx.gls}{#2}}%
+\newcommand*{\glsaddopt}[2][]{\gencsopt{#1}{idx.glsadd}{#2}}%
+\newcommand*{\printglossopt}[2][]{\gencsopt{#1}{idx.printgloss}{#2}}%
+\newcommand*{\iprintglossopt}[2][]{\glsadd{idx.printgloss.#2}\gencsopt{#1}{idx.printgloss}{#2}}%
+
+\newcommand*{\gencsopt}[3]{%
+  \texorpdfstring%
+  {%
+    \gls{#2.#3}%
+    \csoptfmt{\ifblank{#1}{}{\dequals\marg{#1}}}%
+  }%
+  {#3\ifblank{#1}{}{=#1}}%
+}
+
+\newcommand*{\field}[1]{%
+ \texorpdfstring
+ {\gls{field.#1}}%
+ {#1}%
+}
+
+\newcommand*{\fielddisp}[2]{%
+ \texorpdfstring
+ {\glsdisp{field.#1}{\fieldfmt{#2}}}%
+ {#2}%
+}
+
+\newcommand*{\fielddef}[1]{%
+ \glsadd{field.#1}%
+ \glsxtrglossentry{field.#1}{}%
+}
+
+\newcommand*{\fieldref}[1]{\gls[format=glsignore]{field.#1}}
+
+\newglossarystyle{fieldstyle}{%
+  \renewenvironment{theglossary}%
+   {%
+     \setlength{\glsdescwidth}{\dimexpr\linewidth-\maxnamewidth-4\tabcolsep}%
+     \begin{longtable}{l>{\raggedright}p{\glsdescwidth}}%
+   }%
+   {\end{longtable}}%
+  \renewcommand*{\glossaryheader}{%
+    \noalign{\xdef\dofieldtabcaption{%
+      \noexpand\caption\expandonce\fieldtablelotcaption
+        {\expandonce\fieldtablecaption}}}%
+    \dofieldtabcaption
+    \fieldtablecaptionlabel
+    \fieldtablepostcaption\tabularnewline
+    \bfseries Field & \bfseries Description\tabularnewline
+    \endfirsthead
+    \caption*{\fieldtablecaption\ (Continued)}\tabularnewline
+    \bfseries Field & \bfseries Description\tabularnewline
+    \endhead
+  }%
+  \renewcommand*{\glsgroupheading}[1]{}%
+  \renewcommand{\glossentry}[2]{%
+    \glsadd{##1}%
+    \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} &
+    \glossentrydesc{##1}\tabularnewline
+  }%
+  \renewcommand{\subglossentry}[3]{\glossentry{##2}{##3}}%
+  \renewcommand*{\glsgroupskip}{}%
+}
+
+\newcommand*{\fieldhook}[1]{%
+  \edef\currentcategory{\glscategory{#1}}%
+  \glsxtriflabelinlist{\currentcategory}{\fieldcategories}%
+  {%
+     \settowidth{\dimen0}{\glsentryname{#1}}%
+     \ifdim\dimen0>\maxnamewidth \setlength{\maxnamewidth}{\dimen0}\fi
+  }%
+  {\printunsrtglossaryskipentry}%
+}
+
+\newlength\maxnamewidth
+
+%\printfields[postcaption]{category list}[lot caption]{caption}{label}
+\newcommand*{\printfields}[2][]{%
+  \ifstrempty{#1}%
+  {%
+    \def\fieldtablepostcaption{}%
+  }%
+  {%
+    \def\fieldtablepostcaption{%
+      \tabularnewline
+      \multicolumn{2}{p{\linewidth}}{#1}%
+      \tabularnewline
+    }%
+  }%
+  \def\fieldcategories{#2}%
+  \innerprintfields
+}
+
+\newcommand*{\innerprintfields}[3][]{%
+ \printunsrtglossary*[style=fieldstyle]{%
+   \renewcommand*\glossarysection[2][]{}%
+   \ifstrempty{#1}%
+   {%
+     \def\fieldtablelotcaption{}%
+   }%
+   {%
+     \def\fieldtablelotcaption{[#1]}%
+   }%
+   \def\fieldtablecaption{#2}%
+   \def\fieldtablecaptionlabel{\label{#3}}%
+   \setlength{\maxnamewidth}{0pt}%
+   \let\printunsrtglossaryentryprocesshook\fieldhook
+ }%
+}
+
+\renewcommand*{\glsxtrbookindexname}[1]{% 
+ \glsxtrifhasfield{dualid}{#1}%
+ {%
+   \glshyperlink[\glossentryname{#1}]{\glscurrentfieldvalue}%
+ }
+ {%
+   \GlsXtrIfFieldEqStr{category}{#1}{command}%
+   {\glsdohyperlink{\glolinkprefix cs.#1}{\glossentryname{#1}}}%
+   {\glossentryname{#1}}%
+ }%
+}
+
+\newcommand{\summarysubheaderfont}[1]{\textbf{\sffamily #1}}
+
+\newcommand{\summaryoptionhandler}[1]{%
+ \par\smallskip\nopagebreak
+ \par\noindent\hspace{1em}%
+ \code{\gls{#1}\glsxtrifhasfield{useri}{#1}{=\glscurrentfieldvalue}{}}%
+ \glsxtrifhasfield{note}{#1}%
+ {\nolinebreak\hfill\mbox{\footnotesize\glscurrentfieldvalue}}%
+ {}%
+ \nopagebreak\par\hangindent2em\noindent\hspace{2em}\Glossentrydesc{#1}%
+}
+
+\newrobustcmd{\donote}[1]{%
+ \glsxtrifhasfield{note}{#1}%
+ {\nolinebreak\hfill\mbox{\normalfont\footnotesize\glscurrentfieldvalue}}%
+ {}%
+}
+
+\newglossarystyle{commandsummary}%
+{%
+  \setglossarystyle{index}%
+  \renewcommand*{\glossaryheader}{\raggedright}%
+  \renewcommand*{\glsgroupheading}[1]{%
+    \glsxtrgetgrouptitle{##1}{\thisgrptitle}%
+    \glsxtrbookindexbookmark{\thisgrptitle}{summary.##1}%
+    \glsxtrbookindexformatheader{\thisgrptitle}%
+    \nopagebreak\indexspace\nopagebreak\csuse{@afterheading}%
+  }%
+  \renewcommand*{\glossentry}[2]{%
+   \glstreeitem \glstarget{cs.##1}{\strut}%
+   \glsxtrifhasfield{dualid}{##1}%
+   {%
+     {%
+       \let\csfmtfont\csfmtcolourfont
+       \glshyperlink{\glscurrentfieldvalue}%
+     }%
+     \glsxtrifhasfield{useri}{##1}{\glscurrentfieldvalue}{}%
+     \donote{##1}%
+     \nopagebreak\par\hspace{10pt}%
+     \Glossentrydesc{\glscurrentfieldvalue}%
+     \ifglshasdesc{\glscurrentfieldvalue}{\@. }{}%
+   }%
+   {%
+     {\let\csfmtfont\csfmtcolourfont\gls[hyper=false]{##1}}%
+     \glsxtrifhasfield{useri}{##1}{\glscurrentfieldvalue}{}%
+     \donote{##1}%
+     \nopagebreak\par\hspace{10pt}%
+     \Glossentrydesc{##1}%
+     \ifglshasdesc{##1}{\@. }{}%
+   }%
+   \GlsXtrIfFieldEqStr{originalentrytype}{##1}{glscommand}%
+   {%
+     % Does this entry have options?
+     \GlsXtrIfHasNonZeroChildCount{##1}%
+     {%
+       \glspar\medskip\glspar 
+       \summarysubheaderfont{Options:} 
+       \glsxtrfieldforlistloop{##1}{childlist}{\summaryoptionhandler}%
+     }%
+     {}%
+   }%
+   {%
+     \GlsXtrIfHasNonZeroChildCount{##1}%
+     {This command has \glscurrentfieldvalue\ forms:}{}%
+   }%
+   %\listtopics{##1}%
+   \par\medskip
+  }%
+  \renewcommand*{\subglossentry}[3]{%
+   \glstreesubitem \glstarget{cs.##2}{\strut}%
+   \glsxtrifhasfield{dualid}{##2}%
+   {%
+     {%
+       \let\csfmtfont\csfmtcolourfont
+       \glshyperlink{\glscurrentfieldvalue}%
+     }%
+     \glsxtrifhasfield{useri}{##2}{\glscurrentfieldvalue}{}%
+     \donote{##2}%
+     \nopagebreak\par\hspace{20pt}%
+     \ifglshasdesc{\glscurrentfieldvalue}%
+     {\Glossentrydesc{\glscurrentfieldvalue}.}{}%
+   }%
+   {%
+     {\let\csfmtfont\csfmtcolourfont\gls[hyper=false]{##2}}%
+     \glsxtrifhasfield{useri}{##2}{\glscurrentfieldvalue}{}%
+     \donote{##2}%
+     \nopagebreak\par\hspace{20pt}%
+     \ifglshasdesc{##2}{\Glossentrydesc{##2}.}{}%
+   }%
+   \par\medskip
+  }%
+}
+
+\newcommand*{\commandsummaryhook}[1]{%
+  \edef\currentcategory{\glscategory{#1}}%
+  \ifdefstring{\currentcategory}{command}%
+  {%
+    \glsxtrifhasfield*{progenitor}{#1}%
+    {\printunsrtglossaryskipentry}{}%
+  }%
+  {\printunsrtglossaryskipentry}%
+}
+
+\newcommand*{\printcommandsummary}{%
+  \printunsrtglossary*[type=index,
+    style=commandsummary,
+    title={General Command Summary},
+  ]%
+  {%
+   \def\glossarypreamble{This is an alphabetical summary of 
+    commands referenced in this document. See the
+    relevent user guides for further details.\endgraf\medskip
+    \texparserdefnotetarget}%
+   \let\printunsrtglossaryentryprocesshook\commandsummaryhook
+   \let\csref\cs
+   \glsxtrlocalsetgrouptitle{glssymbols}{}%
+  }%
+}
+
+\newcommand{\topicxrhandler}[1]{%
+ \glsxtrifhasfield{parent}{#1}%
+ {%
+   \let\field\fieldfmt
+   \hyperlink
+   {topic.\glscurrentfieldvalue}%
+   {\glsentryname{\glscurrentfieldvalue}}%
+ }%
+ {%
+   \hyperlink{topic.#1}{\glsentryname{#1}}%
+ }% 
+}
+
+% \iffirstprogeny{entry label}{topic label}{true}{false}
+\makeatletter
+\newcommand{\iffirstprogeny}[2]{%
+  \let\doiffirstprogeny\@secondoftwo
+  \def\firstprogeny{}%
+  \glsxtrifhasfield*{unsortedprogeny}{#1}%
+  {%
+    \edef\suppliedprogeny{#2}%
+    \@for\thisprogeny:=\glscurrentfieldvalue\do{%
+      \let\firstprogeny\thisprogeny
+      \ifdefequal{\thisprogeny}{\suppliedprogeny}%
+      {\let\doiffirstprogeny\@firstoftwo}%
+      {\let\doiffirstprogeny\@secondoftwo}%
+      \@endfortrue
+    }%
+  }%
+  {}%
+  \doiffirstprogeny
+}
+\makeatother
+
+\newcommand{\ifstylecommand}[1]{%
+  \letcs\doifstylecommand{@firstoftwo}%
+  \GlsXtrIfFieldEqStr{originalentrytype}{#1}{abbrvstylecommand}%
+  {}%
+  {%
+    \GlsXtrIfFieldEqStr{originalentrytype}{#1}{glostylecommand}%
+    {}%
+    {\global\letcs\doifstylecommand{@secondoftwo}}%
+  }%
+  \doifstylecommand
+}
+
+\newcommand{\listtopics}[1]{%
+ \glsxtrifhasfield{progeny}{#1}% 
+ {%
+   \ifdefequal\glscurrentfieldvalue\glscurrententrylabel
+   {}%
+   {%
+     \par\nopagebreak\medskip\par\footnotesize
+     \sloppy
+     \ifstylecommand{#1}%
+     {\summarysubheaderfont{Styles:}}%
+     {\summarysubheaderfont{Topics:}}%
+     \space
+     \let\DTLlistformatitem\topicxrhandler
+     \DTLformatlist{\glscurrentfieldvalue}.\par
+   }%
+ }%
+ {}%
+}
+
+\newglossarystyle{commandtopic}%
+{%
+  \setglossarystyle{index}%
+  %\renewcommand*{\glossaryheader}{\raggedright}%
+  \renewcommand*{\glsgroupheading}[1]{}%
+  \renewcommand*{\glossentry}[2]{%
+   \glsfieldfetch{##1}{nametitle}{\thisvalue}%
+   \section*{%
+     \raisebox{2ex}%
+     {\pdfbookmark[1]{\thisvalue}{topic.##1}\hypertarget{topic.##1}{}}%
+     \glsdisp{##1}{\thisvalue}\donote{##1}%
+   }%
+   \expandafter\sectionmark\expandafter{\thisvalue}%
+   \ifglshasdesc{##1}{\Glossentrydesc{##1}.}{}%
+   \glsxtrifhasfield{seealso}{##1}%
+   {%
+    \par\smallskip
+     \emph{See also:} 
+     \let\DTLlistformatitem\topicxrhandler
+     \DTLformatlist{\glscurrentfieldvalue}.%
+     \par\medskip\par
+   }%
+   {}%
+  }%
+  \renewcommand*{\subglossentry}[3]{%
+   \glsifcategory{##2}{command}%
+   {%
+     \glsdohypertarget{topic.##2}{\strut}%
+     \glsxtrifhasfield*{progenitor}{##2}%
+     {\let\originallabel\glscurrentfieldvalue}%
+     {\def\originallabel{##2}}%
+%
+     \ifstylecommand{##2}%
+     {%
+        \iffirstprogeny{\originallabel}{##2}%
+        {\letcs\dothisentry{@firstofone}}%
+        {%
+          \glspar
+          \ifdefempty\firstprogeny
+          {%
+            {\let\csfmtfont\csfmtcolourfont\gls[noindex]{\originallabel}}%
+            \glsxtrifhasfield{useri}{##2}{\glscurrentfieldvalue}{}%
+          }%
+          {%
+            {\let\csfmtfont\csfmtcolourfont
+              \hyperlink{topic.\firstprogeny}{\glsentryname{\firstprogeny}}}%
+            \glsxtrifhasfield{useri}{##2}{\glscurrentfieldvalue}{}%
+            \glsxtrifhasfield{parent}{\firstprogeny}%
+            {\hfill
+             {\footnotesize\emph{see} \hyperlink{topic.\glscurrentfieldvalue}%
+             {\glsentryname{\glscurrentfieldvalue}}.}}
+            {}%
+          }%
+          \letcs\dothisentry{@gobble}%
+        }%
+     }%
+     {\letcs\dothisentry{@firstofone}}%
+     \dothisentry
+     {%
+       \par\smallskip\par 
+       % hyperlink to index:
+       {\let\csfmtfont\csfmtcolourfont\gls[format=glsignore]{\originallabel}}%
+       \glsxtrifhasfield{useri}{##2}{\glscurrentfieldvalue}{}%
+       \glsxtrifhasfield{note}{##2}%
+       {\nolinebreak\hfill\mbox{\footnotesize\glscurrentfieldvalue}}%
+       {}%
+       \nopagebreak\par\smallskip\par\nopagebreak
+       \ifglshasdesc{##2}{\Glossentrydesc{##2}.}{}%
+       % Topics
+       \listtopics\originallabel
+       \par\smallskip
+     }%
+   }%
+   {%
+     \glsfieldfetch{##2}{nametitle}{\thisvalue}%
+     \subsection*{%
+       \raisebox{2ex}%
+       {\hypertarget{topic.##2}{}\pdfbookmark[2]{\thisvalue}{topic.##2}}%
+       \glsdisp{##2}{\thisvalue}\donote{##2}%
+     }%
+     \expandafter\subsectionmark\expandafter{\thisvalue}%
+     \ifglshasdesc{##2}{\Glossentrydesc{##2}.\glspar\nopagebreak\smallskip}{}%
+   }%
+  }%
+}
+
+\newcommand*{\commandtopichook}[1]{%
+  \glsxtrifhasfield*{progenitor}{#1}%
+  {}%
+  {%
+    \GlsXtrIfFieldEqStr*{originalentrytype}{#1}{topic}%
+    {}%
+    {%
+      \glsxtrifhasfield*{parent}{#1}%
+      {%
+        \GlsXtrIfFieldEqStr*{originalentrytype}{\glscurrentfieldvalue}{topic}%
+        {}%
+        {\printunsrtglossaryskipentry}%
+      }%
+      {\printunsrtglossaryskipentry}%
+    }%
+  }%
+}
+
+\newcommand*{\printcommandtopic}{%
+  \setsecdepth*{0}%
+  \automark[subsection]{section}%
+  \printunsrtglossary*[type=index,
+    style=commandtopic,
+    title={Summary by Topic of Glossary Commands},
+    label={sec:topics},
+    nogroupskip,
+    nonumberlist
+  ]%
+  {%
+   \def\texparserdefprefix{topic.}%
+   \def\glossarypreamble{This is a summary of commands provided
+    by \styfmt{glossaries}, \styfmt{glossaries-extra} and
+    their supplementary packages that may be useful to 
+    \bibgls\ users. Commands specific to other indexing methods
+    aren't listed unless they've been referenced in this manual.
+    See the appropriate user guides for further details.
+    \endgraf\medskip
+    \texparserdefnotetarget}%
+   \let\abbrstyle\topicabbrstyle
+   \let\glostyle\topicglostyle
+   \let\printunsrtglossaryentryprocesshook\commandtopichook
+   \let\csref\cs
+  }%
+  \setsecdepth{0}%
+}
+
+\newglossarystyle{styoptsummary}%
+{%
+  \setglossarystyle{mcolindex}%
+  \renewcommand{\glossarypreamble}{%
+    Most options are in the form \meta{option}=\meta{value} and
+    may have a default if \meta{value} is omitted, 
+    but some options don't have values and should not have
+    one assigned.  For boolean options, 
+    if the value is omitted \styoptfmt{true} is assumed. 
+    \extstyopt Indicates a value that's only provided by
+    \styfmt{glossaries-extra} and not by the base
+    \styfmt{glossaries} package. \par
+  }%
+  \renewcommand*{\glossaryheader}{}%
+  \renewcommand*{\glsgroupheading}[1]{%
+    \glsxtrgetgrouptitle{##1}{\thisgrptitle}%
+    \glsxtrbookindexbookmark{\thisgrptitle}{styopt.##1}%
+    \glsxtrbookindexformatheader{\thisgrptitle}%
+    \nopagebreak\indexspace\nopagebreak\csuse{@afterheading}%
+  }%
+  \renewcommand*{\glossentry}[2]{%
+   \item \glstarget{##1}{\strut}%
+   \glsxtrifhasfield{dualid}{##1}%
+   {%
+     \gls{\glscurrentfieldvalue}%
+   }%
+   {%
+     \gls[hyper=false]{##1}%
+   }%
+   \glsxtrifhasfield{useri}{##1}{=\glscurrentfieldvalue}{}%
+   \nopagebreak\par\hspace{10pt}%
+   \Glossentrydesc{##1}.%
+   \glsxtrifhasfield{package}{##1}%
+   {\nopagebreak\par \ding{43}Provided by 
+     \ifdefstring{\glscurrentfieldvalue}{glossaries,glossaries-extra}
+     {\styfmt{glossaries} and modified by \styfmt{glossaries-extra}}%
+     {\styfmt{\glscurrentfieldvalue}}.}%
+   {}%
+   \glsxtrifhasfield{note}{##1}%
+   {\space \xmakefirstuc{\glscurrentfieldvalue}.}%
+   {}%
+   \par\medskip
+  }%
+}
+
+\newcommand*{\styoptsummaryhook}[1]{%
+  \edef\currentcategory{\glscategory{#1}}%
+  \ifdefstring{\currentcategory}{packageoption}%
+  {}%
+  {\printunsrtglossaryskipentry}%
+}
+
+\newcommand*{\printstyoptsummary}{%
+  \printunsrtglossary*[type=main,
+    style=styoptsummary,
+    title={Package Option Summary}
+  ]%
+  {%
+   \let\printunsrtglossaryentryprocesshook\styoptsummaryhook
+   \glsxtrlocalsetgrouptitle{glssymbols}{@}%
+  }%
+}
+
+\newcommand{\entrysection}[2][\subsection]{%
+ #1[\texorpdfstring{\glsxtrheadname{entry.#2}}{\glsentryname{entry.#2}}]
+   {\glsadd{entry.#2}\glsxtrglossentry{entry.#2}}%
+}
+
+\newcommand{\entrydef}[1]{\glsadd{entry.#1}\glsxtrglossentry{entry.#1}}
+
+\newcommand*{\atentry}[2][]{%
+ \texorpdfstring
+ {\gls[#1]{entry.#2}}%
+ {#2}%
+}
+
+\newcommand*{\atentrypageref}[1]{%
+ \atentry{#1} (page~\glsxtrpageref{entry.#1})}%
+
+\newcommand*{\atentryref}[1]{\gls[format=glsignore]{entry.#1}}
+
+\newcommand*{\entryref}[1]{\glslink[format=glsignore]{entry.#1}{\entryfmt{#1}}}
+
+\newcommand{\commonarg}[2][\subsection]{\argsection[#1]{common.#2}}
+
+\newcommand{\converterarg}[2][\subsection]{\argsection[#1]{converter.#2}}
+
+\newcommand{\convertglsbibarg}[2][\subsubsection]{\argsection[#1]{gls2bib.#2}}
+
+\newcommand{\datatoolbibarg}[2][\subsubsection]{\argsection[#1]{datatool2bib.#2}}
+
+\newcommand{\argsection}[2][\subsection]{%
+ \def\switcharg{}%
+ \def\switchalt{}%
+ \def\switchaltpdf{}%
+ \glsxtrifhasfield*{useri}{switch.#2}%
+ {%
+   \edef\switcharg{ \expandonce\glscurrentfieldvalue}%
+ }%
+ {}%
+ \ifglshassymbol{switch.#2}%
+ {%
+   \def\switchalt{ (or \protect\glsentrysymbol{switch.#2}\switcharg)}%
+ }%
+ {}%
+ #1[\texorpdfstring
+     {\glsxtrheadname{switch.#2}}%
+     {\glsentryname{switch.#2}}%
+     \switcharg\switchalt
+   ]
+   {\glsadd{switch.#2}%
+    \glsxtrglossentry{switch.#2}\switcharg\switchalt}%
+}
+
+\newrobustcmd{\longswitch}{\string-{}\string-}
+
+\newcommand*{\shortargfmt}[1]{%
+ \texorpdfstring{\texttt{\string-#1}}%
+ {\string-#1}%
+}
+
+\newcommand*{\longarg}[1]{%
+  \texorpdfstring
+  {\gls{switch.#1}}%
+  {\string-\string-#1}%
+}
+
+\newcommand*{\commonlongarg}[1]{%
+  \texorpdfstring
+  {\gls{switch.common.#1}}%
+  {\string-\string-#1}%
+}
+
+\newcommand*{\converterlongarg}[1]{%
+  \texorpdfstring
+  {\gls{switch.converter.#1}}%
+  {\string-\string-#1}%
+}
+
+\newcommand*{\convertglsbiblongarg}[1]{%
+  \texorpdfstring
+  {\gls{switch.gls2bib.#1}}%
+  {\string-\string-#1}%
+}
+
+\newcommand*{\datatoolbiblongarg}[1]{%
+  \texorpdfstring
+  {\gls{switch.datatool2bib.#1}}%
+  {\string-\string-#1}%
+}
+
+\newcommand*{\longargpageref}[1]{%
+ \longarg{#1} (page~\glsxtrpageref{switch.#1})}%
+
+\newcommand*{\longargorshort}[1]{%
+  \texorpdfstring
+  {\gls{switch.#1}\ifglshassymbol{switch.#1}{ or \glssymbol{switch.#1}}{}}%
+  {\string-\string-#1}%
+}
+
+\newcommand*{\unicodecategoryfmt}[1]{\qt{\textsf{#1}}}
+
+\definecolor{defbackground}{rgb}{1,1,0.75}
+\newsavebox\defsbox
+\newlength\defwidth
+
+\newenvironment{definition}%
+{%
+  \setlength{\fboxsep}{4pt}\setlength{\fboxrule}{1.25pt}%
+  \begin{lrbox}{\defsbox}%
+   \setlength\defwidth\linewidth
+   \addtolength\defwidth{-2\fboxrule}%
+   \addtolength\defwidth{-2\fboxsep}%
+   \begin{minipage}{\defwidth}
+   \flushleft\ttfamily\ignorespaces
+}%
+{%
+   \end{minipage}%
+  \end{lrbox}\par\medskip\noindent
+  \fcolorbox{black}{defbackground}{\usebox\defsbox}%
+  \medskip\par\noindent
+  \ignorespacesafterend
+}
+
+\newcommand{\introguide}{\href{bib2gls-begin.pdf}{\qt{\styfmt{glossaries-extra}
+and \bibgls: An Introductory Guide} (\filefmt{bib2gls-begin.pdf})}}
+
+\setcounter{tocdepth}{4}
+
+\newcommand*{\sectionref}[1]{\cref{#1}}
+\newcommand*{\Sectionref}[1]{\Cref{#1}}
+\newcommand*{\figureref}[1]{\hyperlink{#1-top}{figure~\ref*{#1}}}
+\newcommand*{\Figureref}[1]{\hyperlink{#1-top}{Figure~\ref*{#1}}}
+\newcommand*{\tableref}[1]{\cref{#1}}
+\newcommand*{\Tableref}[1]{\Cref{#1}}
+
+\newcommand{\figcontents}[3]{%
+  \hypertarget{#3-top}{}%
+  \centering
+  #1\par
+  #2\label{#3}%
+}
+
+\newlength\imagewidth
+\newcount\tmpctr
+
+\newcommand*{\pdftwocol}[3][1]{%
+  \renewcommand{\tabcolsep}{2pt}%
+  \setlength{\imagewidth}{\dimexpr.5\linewidth-2\tabcolsep}%
+  \def\tabcontents{\begin{tabular}{@{}cc@{}}}%
+  \tmpctr\numexpr#1-1\relax
+  \loop
+  \advance\tmpctr by 1\relax
+  \eappto\tabcontents{\noexpand\frame{%
+   \noexpand\includegraphics[page=\the\tmpctr,width=\noexpand\imagewidth]{#2}}}%
+  \ifodd\tmpctr
+    \appto\tabcontents{&}%
+  \else
+    \appto\tabcontents{\\}%
+  \fi
+  \ifnum\tmpctr<#3
+  \repeat
+  \appto\tabcontents{\end{tabular}}%
+  \tabcontents
+}
+
+\makeatletter
+\newcommand*{\tablelistcs}[2]{%
+ \tmpctr=0\relax
+ \def\tabcontents{}%
+ \loop
+   \advance\tmpctr by 1\relax
+   \appto\tabcontents{l}%
+ \ifnum\tmpctr<#1
+ \repeat
+%
+ \edef\tabcontents{\noexpand\begin{tabular}{@{}\tabcontents @{}}}%
+ \def\thislist{#2}%
+ \dtlsortlist{\thislist}{\dtlicompare}%
+ \tmpctr=1\relax
+ \@for\thislabel:=\thislist\do{%
+  \eappto\tabcontents{\noexpand\ics{\thislabel}}%
+  \ifnum\tmpctr<#1\relax
+   \appto\tabcontents{&}%
+   \advance\tmpctr by 1\relax
+  \else
+   \appto\tabcontents{\\}%
+   \tmpctr=1\relax
+  \fi
+ }%
+ \appto\tabcontents{\end{tabular}}%
+ \tabcontents
+}
+\makeatother
+
+% This is a bit fiddly. Need to represent \vec{v} in typewriter
+% font for the interpreter examples. ($\mathtt{\vec{v}}$ doesn't
+% work)
+\newsavebox\varrow
+\sbox\varrow{$\mathtt{\accentset{\to}{v}}$}
+
+\newcommand*{\mtx}[1]{\boldsymbol{#1}}
+\newcommand*{\set}[1]{\mathcal{#1}}
+\newcommand*{\card}[1]{|\set{#1}|}
+\newcommand*{\imaginary}{i}
+
+\newcommand{\addr}[1]{\\\href{https://www.#1/}{\nolinkurl{#1}}}
+\title{\bibgls: a command line Java application to convert
+\filefmt{.bib} files to \filefmt{glossaries-extra.sty} resource
+files}
+\author{Nicola Talbot\addr{dickimaw-books.com}}
+\input{version}
+
+\makeatletter
+\renewcommand{\fps at figure}{htbp}
+
+\newcommand{\code}[1]{\texorpdfstring{{\ttfamily\obeyspaces #1}}{#1}}
+
+\newcommand{\setupcodeenvfmts}{%
+   \def\cmd{\char`\\}%
+   \def\comment##1{\mbox{\textcolor{comment}{\idx{commentchar}\ ##1}}}%
+   \renewcommand*{\styfmt}[1]{##1}%
+   \renewcommand*{\counterfmt}[1]{##1}%
+   \renewcommand*{\catattrfmt}[1]{\textcolor{attribute}{##1}}%
+   \renewcommand*{\abbrstylefmt}[1]{\textcolor{style}{##1}}%
+   \renewcommand*{\csfmtfont}[1]{\textcolor{cs}{##1}}%
+}
+
+\newenvironment{codeenv}
+ {%
+   \GlsXtrStartUnsetBuffering
+   \renewcommand{\glslinkpresetkeys}{\setkeys{glslink}{noindex}}%
+   \setupcodeenvfmts
+   \begin{flushleft}\ttfamily\obeylines\frenchspacing\@vobeyspaces
+   \parindent\z@\parfillskip\@flushglue\parskip\z at skip
+ }
+ {\end{flushleft}\GlsXtrDiscardUnsetBuffering\ignorespacesafterend}
+
+\newenvironment{codeenv*}
+ {%
+   \GlsXtrStartUnsetBuffering
+   \setupcodeenvfmts
+   \begin{flushleft}\ttfamily\obeylines\frenchspacing\@vobeyspaces
+   \parindent\z@\parfillskip\@flushglue\parskip\z at skip
+ }
+ {\end{flushleft}\GlsXtrDiscardUnsetBuffering\ignorespacesafterend}
+
+\begingroup
+ \renewcommand{\addr}[1]{}
+ \let\texorpdfstring\@secondoftwo
+ \DTMsetstyle{pdf}
+ \protected at edef\x{\endgroup
+   \noexpand\hypersetup{%
+     pdfinfo={
+       Title={\@title},
+       Author={\@author},
+       CreationDate={\DTMuse{creation}},
+       ModDate={\DTMuse{moddate}},
+     }%
+   }%
+ }\x
+
+\makeatother
+
+\renewcommand{\titlepagestyle}{empty}
+
+\begin{document}
+\maketitle
+\pagenumbering{alph}
+\pagestyle{empty}
+
+\begin{abstract}
+The \bibgls\ command line application can be used to extract
+glossary information stored in a \ext{bib} file and convert it
+into glossary entry definitions that can be read using
+\styfmt{glossaries-extra}'s \gls{GlsXtrLoadResources} command. When used
+in combination with the \styoptfmt{record} package option, \bibgls\
+can select only those entries that have been used in the document,
+as well as any dependent entries, which reduces the \TeX\ resources
+required by not defining unnecessary commands.
+
+Since \bibgls\ can also sort and collate the recorded \glspl{location}
+present in the \ext{aux} file, it can simultaneously by-pass the
+need to use \idx!{makeindex} or \idx!{xindy}, although \bibgls\ 
+can be used together with an external indexing application if required. (For
+example, if a custom \idx{xindy} rule is needed.)
+
+An additional build may be required to ensure the \glspl{location} are
+up-to-date as the page-breaking may be slightly different on the
+first \LaTeX\ run due to the unknown references being replaced with
+?? which can be significantly shorter than the actual text produced
+when the reference is known. 
+
+Note that \bibgls\ is a Java application, and requires at least
+Java~8. Additionally, \sty{glossaries-extra} must be at least
+version 1.12.  These are minimum requirements, but the latest
+versions are recommended. This
+application was developed in response to the question
+\qt{\href{http://tex.stackexchange.com/q/342544}{Is there a program
+for managing glossary tags?}} on \TeX\ on
+StackExchange~\cite{tex.sx.2016}. The \ext{bib} file can be managed in an
+application such as JabRef.
+
+If you already have a \ext{tex} file containing 
+entry definitions using commands like \gls{newglossaryentry}
+then you can use the supplementary tool \idx{convertgls2bib}
+to convert the entries to the \ext{bib} format required by
+\bibgls. See \sectionref{sec:gls2bib} for further details.
+
+The supplementary file \introguide\ is an
+introductory guide to the \isty{glossaries-extra} package, which you
+may prefer to start with if you are unfamiliar with the
+\sty{glossaries} and \sty{glossaries-extra} packages.
+\end{abstract}
+
+Additional resources:
+\begin{itemize}
+\item 
+\href{https://www.dickimaw-books.com/gallery/#bib2gls}{\bibgls\ gallery}.
+\item
+\href{https://www.dickimaw-books.com/faq.php?category=bib2gls}{\bibgls\ FAQ}
+\end{itemize}
+TUGboat articles:
+\begin{itemize}
+\item
+\href{http://tug.org/TUGboat/tb40-1/tb124talbot-bib2gls.pdf}{Glossaries
+with \bibgls}, issue 40:1, 2019.
+\item
+\href{http://tug.org/TUGboat/tb41-3/tb129talbot-bib2gls-more.pdf}{\bibgls:
+selection, cross-references and locations}, issue 41:3, 2020.
+\item \bibgls: sorting, issue \href{http://tug.org/TUGboat/Contents/contents42-2.html}{42:2, 2021}.
+\end{itemize}
+
+\frontmatter
+
+\tableofcontents
+\listoftables
+\listoffigures
+\printunsrtglossary*[type=terms,style=altlist,groups=false]
+{%
+  \renewcommand{\glslistitem}[1]{%
+    \item[\glsentryitem{#1}%
+          \glstarget{#1}{\glossentryname{#1}}]%
+    \glsxtrifhasfield{useri}{#1}%
+     {\glsadd[format=glsnumberformat]{\glscurrentfieldvalue}}{}%
+  }
+}
+
+\mainmatter
+\chapter{Introduction}
+
+If you have extensively used the \styfmt{glossaries}~\cite{glossaries} or
+\styfmt{glossaries-extra}~\cite{glossaries-extra} package, 
+you may have found yourself creating a large \iext{tex} file
+containing many definitions that you frequently use in documents.
+This file can then simply be loaded using \ics{input} or
+\gls{loadglsentries}, but a large file like this can be difficult to
+maintain and if the document only actually uses a small proportion
+of those entries, the document build is unnecessarily slow due to
+the time and resources taken on defining the unwanted entries.
+
+The aim of \bibgls\ is to allow the entries to be stored in a
+\iext{bib} file, which can be maintained using a reference system
+such as JabRef. The document build process
+can now be analogous to that used with \idx{bibtex} (or
+\appfmt{biber}), where only those entries that have been recorded in the
+document (and possibly their dependent entries) will be extracted
+from the \ext{bib} file. Since \bibgls\ can also perform
+\hierarchical\ sorting and can collate \glspl{locationlist}, it doubles as
+an indexing application, which means that the \idx{makeglossaries}
+step can be skipped.
+Note that \bibgls\ doesn't warn you if an entry that's referenced
+in the document doesn't exist in any of the supplied \ext{bib}
+files, but instead relies on the \styfmt{glossaries-extra} package
+to generate the warning. So at the end of the document build check
+the \ext{log} file for warnings.
+
+You can't use \ics{glsaddall} with \bibgls\ as that command works
+by iterating over all defined entries and calling
+\code{\ics{glsadd}\margm{label}}. On the first \LaTeX\ run there are no
+entries defined, so \ics{glsaddall} does nothing. If you want to
+select all entries, just use \csopt[all]{selection} instead (which
+has the advantage over \ics{glsaddall} in that it doesn't create a
+redundant \gls{location} for each entry).
+
+Note that \bibgls\ requires the extension package
+\isty{glossaries-extra} and can't be used with just the base
+\isty{glossaries} package, since it requires some of the extension
+commands. See the \styfmt{glossaries-extra} user
+manual~\cite{glossaries-extra} for information
+on the differences between the basic package and the extended
+package, as some of the default settings are different.
+
+Since information required by \bibgls\ is
+written to the \iext{aux} file, it's not possible to run \bibgls\
+through \TeX's shell escape while the \ext{aux} file is open for
+write access. (The \ext{aux} file is closed \emph{after} the end
+document hook, so it can't be deferred with \ics{AtEndDocument}.) 
+This means that if you really want to run \bibgls\
+through \ics{write18} it must be done in the preamble with
+\ics{immediate}. For example:
+\begin{verbatim}
+\immediate\write18{bib2gls \jobname}
+\end{verbatim}
+As from version 1.14 of \styfmt{glossaries-extra}, this can be done
+automatically with the \styopt{automake} option if the \ext{aux}
+file exists. (Remember that this will require the shell escape to be
+enabled.)
+
+\section{Default Encoding}
+\label{sec:defencoding}
+
+Both \XeLaTeX\ and \LuaLaTeX\ default to UTF-8 \igls{encoding}. With modern \TeX\
+distributions, \pdfLaTeX\ also defaults to UTF-8 but may be changed
+with the \sty{inputenc} package.
+ 
+The default encoding for Java applications, such as \bibgls, is the
+default encoding of the \idx{JVM}. This typically matches the
+operating system's default, but can be changed (see below).  If you don't want
+to alter the \idx{JVM}['s] default, you can set the \bibgls\ default
+with \longarg{default-encoding}.
+
+In general, UTF-8 works best with \bibgls, but you need to be careful if your
+\idx{JVM} isn't set up to use UTF-8 by default as you can end
+up with encoding mismatches. This can happen with some versions of
+Windows, so it's a good idea to double-check the \bibgls\ transcript
+file to make sure all the encoding information is correct.
+
+The default encoding is written at the start of the \ext{glg} file.
+For example:
+\begin{verbatim}
+Default encoding: UTF-8
+\end{verbatim}
+When a file is opened, the associated encoding is written to the \ext{glg}
+file. For example, when the \ext{aux} file is opened:
+\begin{verbatim}
+Reading myDoc.aux
+Encoding: UTF-8
+\end{verbatim}
+If the document encoding is detected in the \ext{aux} file, it will
+be written to the transcript. For example:
+\begin{verbatim}
+TeX character encoding: UTF-8
+\end{verbatim}
+When a \ext{bib} file is read, the \csopt{charset} setting, 
+the detected encoding (from the encoding comment line,
+see \sectionref{sec:bibencoding}), if found, and the encoding
+actually used are written. For example, where \csopt{charset} hasn't
+been set but an encoding comment line has been found:
+\begin{verbatim}
+Parsing bib files for resource myDoc.glstex.
+Default encoding: not set
+Detected encoding: UTF-8
+Reading symbols.bib
+Encoding: UTF-8
+\end{verbatim}
+
+The file encodings used by \bibgls\ are as follows:
+\begin{itemize}
+\item Writing the \iext{glg} transcript file: default encoding.
+
+\item Reading the document \iext{log} file: \longarg{log-encoding}
+setting, if supplied, otherwise the default encoding. 
+
+Note that the \ext{log} file may not have the same encoding as the
+\ext{tex} file~\cite{tex.sx.2013}.  In the case of the T1 font
+encoding, the encoding will be close enough to ISO-8859-1 for that
+to be used with \bibgls.  Any problematic character will trigger a
+warning and \bibgls\ will quit reading the file. This will most
+likely be in an overfull warning, by which point \bibgls\ should
+have gathered all the information it requires.
+
+\item Reading the \iext{aux} file: the \longarg{tex-encoding}
+setting, if supplied, or UTF-8 if \sty{fontspec} is detected in the
+\ext{log} file, otherwise the default encoding.
+
+\item Reading the \iext{bib} files: the \csopt{charset} resource
+option, if supplied, or the encoding specified by the encoding
+comment line in the \ext{bib} file (see
+\sectionref{sec:bibencoding}), otherwise the default encoding.
+
+\item Writing the \iext{glstex} files: the \longarg{tex-encoding}
+setting, if supplied, or UTF-8 if \sty{fontspec} detected in the
+\ext{log} file, or the document encoding picked up from the
+\ext{aux} file, otherwise the default encoding.
+\end{itemize}
+For example:
+\begin{verbatim}
+bib2gls --log-encoding ISO-8859-1 --default-encoding UTF-8 myDoc
+\end{verbatim}
+
+To change the default \igls{encoding} for the \idx{JVM} set the 
+\code{JAVA\_TOOL\_OPTIONS} environment variable to include
+\code{-Dfile.encoding=\meta{encoding}} where \meta{encoding} is the
+desired default encoding (such as UTF-8). Note that this will
+affect all your installed Java applications, not just \bibgls, (for
+example, JabRef).
+
+If you have a problem with non-ASCII characters not displaying
+correctly in your document:
+\begin{itemize}
+\item Check that the file \gls{encoding} of your document \ext{tex}
+and \ext{bib} files have been correctly set by your text editor.
+\item Check that your document supports that \gls{encoding} (for example,
+through the \isty{inputenc} package).
+\item Check \bibgls's transcript file for the encoding information
+to ensure that the settings are correct.
+\end{itemize}
+
+\section{Example Use}
+The glossary entries are stored in a \ext{bib} file. For
+example, the file \filefmt{entries.bib} might contain:
+\begin{codeenv}
+\atentry{entry}\marg{bird,
+  \field{name}=\marg{bird},
+  \field{description} = \marg{feathered animal}
+}
+\strut
+\atentry{abbreviation}\marg{html,
+  \field{short}=\qtdelim{html},
+  \field{long}=\marg{hypertext markup language}
+}
+\strut
+\atentry{symbol}\marg{v,
+  \field{name}=\marg{\idx!{mshiftchar}\cs{vec}\marg{v}\idx!{mshiftchar}},
+  \field{text}=\marg{\cs{vec}\marg{v}},
+  \field{description}=\marg{a vector}
+}
+\strut
+\atentry{index}\marg{goose,\field{plural}=\qtdelim{geese}}
+\end{codeenv}
+Here's an example document that uses this data:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cs{usepackage}\oarg{\styoptref{record}}\marg{glossaries-extra}
+\strut
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[entries]{src},\comment{data in entries.bib}
+  \csopt[en-GB]{sort}\comment{sort according to 'en-GB' locale}
+}
+\strut
+\cmd{begin}\marg{document}
+\cs{Gls}\marg{bird} and \cs{gls}\marg{goose}.
+Symbol: \idx{mshiftchar}\cs{gls}\marg{v}\idx{mshiftchar}.
+Abbreviation: \cs{gls}\marg{html}.
+\strut
+\cs{printunsrtglossaries}
+\cmd{end}\marg{document}
+\end{codeenv}
+If this document is called \filefmt{myDoc.tex}, the build 
+process is:
+\begin{verbatim}
+pdflatex myDoc
+bib2gls myDoc
+pdflatex myDoc
+\end{verbatim}
+(This manual assumes \appfmt{pdflatex} for simplicity. Replace
+with \appfmt{latex}, \appfmt{xelatex} or \appfmt{lualatex} as
+appropriate.) If you want \idxpl{lettergroup} (either headed, with
+styles like \glostyle{indexgroup}, or just a blank line separator
+with \styopt[false]{nogroupskip}) then you need to use the
+\longarg{group} switch:
+\begin{verbatim}
+pdflatex myDoc
+bib2gls --group myDoc
+pdflatex myDoc
+\end{verbatim}
+
+You can have multiple instances of \gls{GlsXtrLoadResources}. For
+example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\oarg{\styopt{record},\styopt{index},\styopt{abbreviations},\styopt{symbols}}\marg{glossaries-extra}
+\strut
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[entries]{src},\comment{data in entries.bib}
+  \csopt[en-GB]{sort},\comment{sort according to 'en-GB' locale}
+  \csopt[entrytype=\marg{entry}]{match},\comment{only select \atentry{entry}}
+  \csopt[main]{type}\comment{put these entries in the 'main' glossary}
+}
+\strut
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[entries]{src},\comment{data in entries.bib}
+  \csopt[en-GB]{sort},\comment{sort according to 'en-GB' locale}
+  \csopt[entrytype=\marg{abbreviation}]{match},\comment{only select \atentry{abbreviation}}
+  \csopt[abbreviations]{type}\comment{put these in the 'abbreviations' glossary}
+}
+\strut
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[entries]{src},\comment{data in entries.bib}
+  \csopt[letter-case]{sort},\comment{case-sensitive letter sort}
+  \csopt[entrytype=\marg{symbol}]{match},\comment{only select \atentry{symbol}}
+  \csopt[symbols]{type}\comment{put these entries in the 'symbols' glossary}
+}
+\strut
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[entries]{src},\comment{data in entries.bib}
+  \csopt[en-GB]{sort},\comment{sort according to 'en-GB' locale}
+  \csopt[entrytype=\marg{index}]{match},\comment{only select \atentry{index}}
+  \csopt[index]{type}\comment{put these entries in the 'index' glossary}
+}
+\strut
+\cmd{begin}\marg{document}
+\cs{Gls}\marg{bird} and \cs{gls}\marg{goose}.
+Symbol: \idx!{mshiftchar}\cs{gls}\marg{v}\idx!{mshiftchar}. Abbreviation: \cs{gls}\marg{html}.
+\cs{printunsrtglossaries}
+\cmd{end}\marg{document}
+\end{codeenv}
+There are more examples provided in \sectionref{sec:examples} and
+also in the \href{https://www.dickimaw-books.com/gallery/#bib2gls}{\bibgls\ gallery}.
+
+Note that there's no need to called \idx!{xindy} or \idx!{makeindex}
+since \bibgls\ automatically sorts the entries and collates the \glspl{location}
+after selecting the required entries from the \ext{bib} file and
+before writing the temporary file that's input with \gls{glsxtrresourcefile}
+(or the more convenient shortcut
+\gls{GlsXtrLoadResources}).\footnote{This document will mostly use
+the more convenient \gls{GlsXtrLoadResources}.}  This
+means the entries are already defined in the correct order, and only
+those entries that are required in the document are defined, so
+\ics{printunsrtglossary} (or \ics{printunsrtglossaries}) may be used.
+(The \qtt{unsrt} part of the command name indicates that all
+defined entries should be listed in the order of definition from
+\styfmt{glossaries-extra}'s point of view, see the supplementary
+document \introguide\ for further details.)
+
+If you don't provide a value with the \styopt{record} option, then
+\styopt[only]{record} is assumed. This saves the same indexing
+information that's used with the \ics{cs.makeglossaries} and
+\ics{makenoidxglossaries} methods (described in the main
+\styfmt{glossaries} user manual~\cite{glossaries}). As from
+\styfmt{glossaries-extra} version 1.37, you can instead use
+\styopt[nameref]{record}, which saves some extra information for
+each \gls{location} that's not available for the other indexing methods. 
+See \longarg{merge-nameref-on} for further details.
+
+If you additionally want to use an indexing application, such
+as \idx{xindy}, you need the package option
+\styopt[alsoindex]{record} and use \ics{cs.makeglossaries}
+and \ics{printglossary} (or the iterative \ics{printglossaries}) as usual.
+This requires a more complicated build process:
+\begin{verbatim}
+pdflatex myDoc
+bib2gls myDoc
+pdflatex myDoc
+makeglossaries myDoc
+pdflatex myDoc
+\end{verbatim}
+(The entries aren't defined until the second \LaTeX\ run, so the
+indexing files required by \idx!{xindy} or \idx!{makeindex} can't be
+created until then.) In this case, \bibgls\ is simply being used to
+fetch the entry definitions from one or more \ext{bib} files, with
+the sorting and collating performed by the other indexing
+application (so the resource option list would need
+\csopt[none]{sort} and \csopt[false]{save-locations}).  In general, 
+it's best to avoid this hybrid method unless you have a particular
+set of \idx{xindy} rules that can't be replicated with \bibgls.
+
+\section{Logical Divisions: \field{type} vs \field{group} vs \field{parent}}
+\label{sec:logicaldivisions}
+
+If you have a document with many terms that need listing, it's
+likely that you may want to divide the terms into separate blocks or
+units for easier reading. There are three fields that are used
+for this.
+\begin{description}
+\item[\field{type}] The highest division is the glossary to which
+the entry belongs. The glossary must first be defined (see
+\sectionref{sec:newglossary}) with an associated label used to
+identify it. The title is assigned to the glossary when it is
+defined or it can be overridden with the \printglossopt{title} key.
+The glossary is displayed using \cs{printunsrtglossary} and the
+title is placed in a sectioning command by default.
+
+\begin{important}
+\bibgls\ does not provide any means of sorting glossary types. If
+you use \ics{printunsrtglossaries} the order will be according to
+the order in which the glossaries were defined. You may use
+\cs{printunsrtglossary} to list individual glossaries in your own
+preferred order.
+\end{important}
+
+\item[\field{group}] The entries within a glossary can form \idxpl{group}
+as a by-product of the sorting method. This must be enabled with the
+\longarg{group} switch and isn't available for the sort methods
+listed in \tableref{tab:sortoptionsnosort}. The group label is
+stored in the \field{group} field. This is an internal field that
+typically shouldn't be set in the \ext{bib} file.
+
+You can specify your own \idxpl{customgroup} but if you do so you must
+ensure that the terms are ordered in such a way that they are
+gathered according to group. This is typically done by splitting the
+glossary into blocks using a separate \gls{GlsXtrLoadResources} with
+the \csopt{group} option set. You control the order of the groups by
+your ordering of \gls{GlsXtrLoadResources}. The group title can be
+assigned using \gls{glsxtrsetgrouptitle} within the document.
+
+\begin{important}
+\bibgls\ does not sort by group title. At most it can sort by the
+group label (by changing the \csopt{sort-field}) but this is usually
+an indication that you actually have a \gls{hierarchicalglossary} and you
+ought to be using the \field{parent} field instead. (Compare
+\exfile{sample-textsymbols.tex} and
+\exfile{sample-textsymbols2.tex}.)
+\end{important}
+
+\item[\field{parent}] An entry may have one or more \glspl{sub-entry}.
+Most of the sort methods will produce a \hierarchical\ ordering that
+ensures that the \glspl{sub-entry} are listed immediately after their
+\gls{parententry}. The \gls{parententry} is identified by the \field{parent}
+field which should contain the \glsdisp{parententry}{parent's} label.
+
+\begin{important}
+\bibgls\ sorts the \parent\ and \child\ entries using the same
+comparator. The sort methods listed in
+\tableref{tab:sortoptionsnosort} disregard the \hierarchicallevel,
+which can result in \glspl{childentry} becoming detached from their
+\gls{parententry}. The other methods sort \hierarchically\ using the
+same comparator but take the \hierarchicallevel\ into account.
+\end{important}
+
+\end{description}
+
+Suppose you have a mixture of terms, abbreviations and symbols, then
+you might want to have three glossaries that are listed in the table
+of contents. In this case, you use the \field{type} field or the
+\field{type} resource option. The ordering of the glossaries is
+determined by the ordering of the \cs{printunsrtglossary}
+commands within the document. For example:
+\begin{codeenv}
+\cs{printunsrtglossary}
+\cs{printunsrtglossary}\oarg{\printglossopt[abbreviations]{type}}
+\cs{printunsrtglossary}\oarg{\printglossopt[symbols]{type}}
+\end{codeenv}
+
+Suppose that your list of terms spans many pages and you feel it
+would be helpful to the reader to split it up into letter groups
+then you would need to run \bibgls\ with the \longarg{group} switch
+and use a glossary style that supports \idxpl{lettergroup} for that
+glossary. For example:
+\begin{codeenv}
+\cs{printunsrtglossary}\oarg{\printglossopt[indexgroup]{style}}
+\end{codeenv}
+
+Suppose that your list of symbols consists of pictographs, Latin characters
+and Greek characters and you want them grouped together
+in that order. Then you would use a separate
+\gls{GlsXtrLoadResources} for each block and assign your own custom 
+group. This means ensuring that each \igls{resourceset} only selects
+the terms for that group. The simplest way of doing this is to
+have a separate \ext{bib} file for each set. For example:
+\begin{codeenv}
+\gls{glsxtrsetgrouptitle}\marg{pictographs}\marg{Pictographs}
+\gls{glsxtrsetgrouptitle}\marg{latinsymbols}\marg{Latin Characters}
+\gls{glsxtrsetgrouptitle}\marg{greeksymbols}\marg{Greek Characters}
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[generalsymbols]{src},\comment{data in generalsymbols.bib}
+  \csopt[pictographs]{group},
+  \csopt[symbols]{type}
+}
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[latinsymbols]{src},\comment{data in latinsymbols.bib}
+  \csopt[latin]{group},
+  \csopt[symbols]{type}
+}
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[greeksymbols]{src},\comment{data in greeksymbols.bib}
+  \csopt[greek]{group},
+  \csopt[symbols]{type}
+}
+\end{codeenv}
+
+Suppose instead that you have many of these logical blocks and you
+want them ordered according to the block title. In this case you
+have a \gls{hierarchicalglossary} and you need to use the \field{parent}
+field. You then need to select an appropriate \idx{glossarystyle}.
+
+If you only want to have a single \ext{bib} file that contains all
+your entries and you want to share it across multiple documents then
+the most flexible approach is to use custom fields and \glspl{entrytype}
+that can be aliased according to the needs of the \glspl{resourceset}.
+
+For example, the file \filefmt{entries.bib}:
+\begin{codeenv}
+\comment{Encoding: UTF-8}
+\strut
+\atentryfmt{indexplural}\marg{latin,\field{text}=\marg{Latin character}}
+\atentryfmt{indexplural}\marg{greek,\field{text}=\marg{Greek character}}
+\atentryfmt{indexplural}\marg{pictograph}
+\strut
+\atentry{symbol}\marg{fx,
+  \field{name}=\marg{\cs{ensuremath}\marg{f(x)}},
+  \field{description}=\marg{function of \idx{mshiftchar}x\idx{mshiftchar}},
+  \fieldfmt{identifier}=\marg{latin}
+}
+\strut
+\atentry{symbol}\marg{f\idx{aposchar}x,
+  \field{name}={\cs{ensuremath}\marg{f\idx{aposchar}(x)}},
+  \field{description}=\marg{derivative of \cs{gls}\marg{fx}},
+  \fieldfmt{identifier}=\marg{latin}
+}
+\strut
+\atentry{symbol}\marg{pi,
+  \field{name}=\marg{\cs{ensuremath}\marg{\cs{pi}}},
+  \field{description}=\marg{ratio of circumference to diameter},
+  \fieldfmt{identifier}=\marg{greek}
+}
+\strut
+\atentry{symbol}\marg{heart,
+  \field{name}=\marg{\cs{ensuremath}\marg{\ics{heartsuit}}},
+  \field{description}=\marg{heart},
+  \fieldfmt{identifier}=\marg{pictograph}
+}
+\strut
+\atentry{symbol}\marg{diamond,
+  \field{name}=\marg{\cs{ensuremath}\marg{\ics{diamondsuit}}},
+  \field{description}=\marg{diamond},
+  \fieldfmt{identifier}=\marg{pictograph}
+}
+\strut
+\atentry{abbreviation}\marg{html,
+  \field{short}=\marg{html},
+  \field{long}=\marg{hypertext markup language},
+  \fieldfmt{identifier}=\marg{markuplanguage}
+}
+\strut
+\atentry{abbreviation}\marg{xml,
+  \field{short}=\marg{xml},
+  \field{long}=\marg{extensible markup language},
+  \fieldfmt{identifier}=\marg{markuplanguage}
+}
+\strut
+\atentry{entry}\marg{duck,
+  \field{name}=\marg{duck},
+  \field{description}=\marg{a waterbird with webbed feet},
+  \fieldfmt{identifier}=\marg{animal}
+}
+\strut
+\atentry{entry}\marg{parrot,
+  \field{name}=\marg{parrot},
+  \field{description}=\marg{mainly tropical bird with bright plumage},
+  \fieldfmt{identifier}=\marg{animal}
+}
+\end{codeenv}
+This has a custom field \fieldfmt{identifier}. This will be ignored
+by \bibgls\ unless defined or aliased in the document.
+
+Here's an example document that creates three glossary types (the
+default \mainglossary\ and the glossaries created with the
+\styopt{abbreviations} and \styopt{symbols} options). They are
+listed in the order of \cs{printunsrtglossary} and their titles are
+added to the table of contents.
+
+The custom \fieldfmt{identifier} fields are ignored for the
+\glsdisp{mainglossary}{main} and abbreviation glossaries, but they are aliased for the
+symbols to the \field{group} field. Since I've split the symbols
+glossary into blocks with each block only containing entries that
+have the same \field{group} value, this isn't a problem. It also
+won't trigger a warning with \longarg{warn-non-bib-fields} as it's
+being aliased rather than set in the \ext{bib} file. The blocks
+appear in the same order as the corresponding \gls{GlsXtrLoadResources} 
+commands. The title for each block is provided in the document 
+using \gls{glsxtrsetgrouptitle}.
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\oarg{\styopt{record},\styopt{abbreviations},\styopt{symbols}}\marg{glossaries-extra}
+\strut
+\cs{renewcommand}\marg{\gls{GlsXtrDefaultResourceOptions}}\marg{
+ \csopt[all]{selection},\csopt[entries]{src},\csopt[false]{save-locations}}
+\strut
+\gls{GlsXtrLoadResources}\oarg{\csopt[main]{type},\csopt[entrytype=entry]{match}}
+\gls{GlsXtrLoadResources}\oarg{\csopt[abbreviations]{type},
+ \csopt[entrytype=abbreviation]{match}}
+\strut
+\gls{glsxtrsetgrouptitle}\marg{pictograph}\marg{Pictographs}
+\gls{GlsXtrLoadResources}\oarg{\csopt[symbols]{type},
+ \csopt[identifier=\field{group}]{field-aliases},
+ \csopt[\field{group}=pictograph]{match}}
+\strut
+\gls{glsxtrsetgrouptitle}\marg{latin}\marg{Latin Characters}
+\gls{GlsXtrLoadResources}\oarg{\csopt[symbols]{type},
+ \csopt[identifier=\field{group}]{field-aliases},
+ \csopt[\field{group}=latin]{match}}
+\strut
+\gls{glsxtrsetgrouptitle}\marg{greek}\marg{Greek Characters}
+\gls{GlsXtrLoadResources}\oarg{\csopt[symbols]{type},
+ \csopt[identifier=\field{group}]{field-aliases},
+ \csopt[\field{group}=greek]{match}}
+\strut
+\cmd{begin}\marg{document}
+\cs{tableofcontents}
+\cs{printunsrtglossary}\oarg{\printglossopt[abbreviations]{type}}
+\cs{printunsrtglossary}
+\cs{printunsrtglossary}\oarg{\printglossopt[symbols]{type},\printglossopt[\glostyle{treegroup}]{style}}
+\cmd{end}\marg{document}
+\end{codeenv}
+
+In the above example document, the symbols list is divided into
+three groups, listed in the order: Pictographs, Latin characters and
+Greek characters. If you want these titles ordered alphabetically
+then you need a \hierarchical\ structure instead. This can be obtained
+by aliasing the custom \fieldfmt{identifier} field to
+\field{parent}:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\oarg{\styopt{record},\styopt[topic]{stylemods},\styopt{abbreviations},\styopt{symbols}}\marg{glossaries-extra}
+\strut
+\cs{renewcommand}\marg{\gls{GlsXtrDefaultResourceOptions}}\marg{\comment{}
+ \csopt[all]{selection},\csopt[entries]{src},\csopt[false]{save-locations}}
+\strut
+\gls{GlsXtrLoadResources}\oarg{\csopt[main]{type},\csopt[entrytype=entry]{match}}
+\gls{GlsXtrLoadResources}\oarg{\csopt[abbreviations]{type},
+ \csopt[entrytype=abbreviation]{match}}
+\strut
+\gls{GlsXtrLoadResources}\oarg{\csopt[symbols]{type},
+ \csopt[identifier=\field{parent}]{field-aliases},
+ \csopt[entrytype=symbol,entrytype=indexplural]{match}}
+\strut
+\cmd{begin}\marg{document}
+\cs{tableofcontents}
+\cs{printunsrtglossary}\oarg{\printglossopt[abbreviations]{type}}
+\cs{printunsrtglossary}
+\cs{printunsrtglossary}\oarg{\printglossopt[symbols]{type},\printglossopt[\glostyle{topic}]{style}}
+\cmd{end}\marg{document}
+\end{codeenv}
+The style used for the symbols list is now \glostyle{topic} rather
+than \glostyle{treegroup}. This results in a slightly different
+appearance. You can select the most appropriate style according to
+your needs (see the gallery of predefined
+styles~\cite{glossarystylesgallery}). The topic ordering is now:
+Greek characters, Latin characters and Pictographs.
+
+\section{Defining a New Glossary}
+\label{sec:newglossary}
+
+Some of the examples in this manual use \ics{newglossary*} to define
+a new glossary type and some use \ics{newignoredglossary} or
+\ics{newignoredglossary*}. You may be wondering why the starred
+forms and why define an \igls{ignoredglossary}?
+
+The base \styfmt{glossaries} package was originally designed to work
+with \idx!{makeindex}. Support for \idx!{xindy} was later added, but
+both require three files per glossary type: the transcript file
+(created by the indexing application), the file written by \LaTeX\
+(and input by the indexing application) and the file input by
+\LaTeX\ (and written by the indexing application). So when a new glossary
+is defined with \ics{newglossary}, this not only defines internal
+control sequences that store the list of entry labels associated
+with that glossary, the title and the entry format but also has to
+define internal control sequences that store the three file
+extensions. The starred form \cs{newglossary*} is just a shortcut
+that forms the extensions from the glossary label. For the purposes
+of \bibgls, this is simpler than the unstarred version since the
+extensions are now irrelevant as they are only applicable to
+\idx!{makeindex} and \idx!{xindy}. (Unless, of course, you are using
+a hybrid method with \styopt[alsoindex]{record}.)
+
+Since some users wanted the ability to define entries that were
+common enough to not be worth including in any glossary lists, the
+concept of an \igls{ignoredglossary} was introduced, defined with
+\cs{newignoredglossary}. This only requires an internal control
+sequence to store the list of entry labels associated with that
+glossary\footnote{All entries must be assigned to a glossary. If you
+don't use the \field{type} field the default is used.}\ and the
+associated internal command that governs the way that
+commands like \cs{gls} are displayed for that glossary type. 
+Since this type of glossary has no associated files, it can't be
+used with \cs{printglossary} and therefore isn't included in the
+list of glossary labels that's iterated over by commands like
+\cs{printglossaries}. Since there's no glossary list (and therefore
+no targets), \cs{newignoredglossary} additionally disables hyperlinks for that
+glossary type, but it doesn't disable indexing.  The indexing macro
+is still called, but because there's no associated file to write to,
+it has no effect. With \bibgls, the indexing is written to the
+\ext{aux} file and so does have an effect.
+
+Although \iglspl{ignoredglossary} can't be used with
+\cs{printglossary}, they can be used with \cs{printunsrtglossary},
+which is designed to work without any indexing, but you need to
+explicitly set the title in the optional argument to override the
+default. \Idxpl{ignoredglossary} still can't be used in
+\cs{printunsrtglossaries}, since they're not included in the list
+that this command iterates over.
+
+So \cs{newignoredglossary} (or \cs{provideignoredglossary}) is
+useful with \bibgls\ if you're happy to use \cs{printunsrtglossary}
+with the \printglossopt{type} and \printglossopt{title} options as it reduces the overall
+number of internal control sequences.  \Idxpl{ignoredglossary} are
+also useful for stand-alone definitions (\ics{glsxtrglossentry}) or
+with \ics{printunsrtinnerglossary} as no title is required in those
+cases (see \exfile{sample-nested.tex} for an example). 
+
+Since there is now the possibility of targets (created within \cs{printunsrtglossary} or
+\cs{printunsrtinnerglossary} or \cs{glsxtrglossentry}), it's convenient to
+have an \igls{ignoredglossary} that doesn't suppress the hyperlinks,
+which can be obtained with the starred form \ics{newignoredglossary*}
+provided by \styfmt{glossaries-extra} (or \cs{provideignoredglossary*}).
+
+Some resource options, such as \csopt{master}, \csopt{secondary},
+and \csopt{trigger-type}, need to ensure that a
+required glossary is defined. In this case, \bibgls\ uses
+\ics{provideignoredglossary*} in the \iext{glstex} file 
+even if \longarg{no-provide-glossaries} is set.
+Note that only \csopt{ignored-type} uses the unstarred
+\ics{provideignoredglossary}.
+
+If you haven't already defined that glossary in the document with \cs{newglossary*},
+you'll need to set the title in the optional argument of
+\cs{printunsrtglossary} if you don't want the default. The glossary
+won't be defined on the first run (if the definition is only
+provided in the \ext{glstex} file) but \cs{printunsrtglossary} will
+just give a warning if the type is undefined so it won't interrupt
+the document build.
+
+If you want \bibgls\ to automatically provide unknown glossaries for
+all entries that have the \field{type} field set (unrelated to the
+\csopt{master}, \csopt{secondary}, \csopt{trigger-type}
+and \csopt{ignored-type} options)
+then use the \longarg{provide-glossaries} switch.
+
+The base \sty{glossaries} package provides a command that can be
+used to test the existence of a glossary:
+\begin{codeenv}
+\ics{ifglossaryexists}\margm{label}\margm{true}\margm{false}
+\end{codeenv}
+The unstarred version considers \glspl{ignoredglossary} as non-existent
+(and so will do \meta{false} for an \gls{ignoredglossary}). As from
+v4.46, this command now has a starred version
+\ics{ifglossaryexists*} that considers \glspl{ignoredglossary} as
+existing (and so will do \meta{true} for an \gls{ignoredglossary}). In
+the event that you have an older version of \sty{glossaries}, the
+\sty{glossaries-extra} package (v1.44+) will provide the starred
+form if it hasn't been defined. (In general, it's best to have
+up-to-date versions of both \sty{glossaries} and
+\sty{glossaries-extra}.)
+
+\section{Resource Sets}
+\label{sec:resourcesets}
+
+Each instance of \gls{glsxtrresourcefile} or
+\gls{GlsXtrLoadResources} in the document represents a \igls{resourceset}. Each
+\igls{resourceset} has one or more associated \iext{bib} files
+that provides the data for that set. Command line switches
+(\sectionref{sec:switches}) are applied to all \iglspl{resourceset}.
+Resource options (\sectionref{sec:resourceopts}) are only applied to
+that specific \igls{resourceset}. Each \igls{resourceset} is processed
+in stages:
+\begin{description}
+
+\item[Stage 1 (Initialisation)] Occurs after the \ext{aux} file has
+been read, this stage parses the resource option list and ensures
+options are valid and don't cause a conflict. The transcript will
+show the message
+\begin{alltt}
+Initialising resource \meta{resource-name}
+\end{alltt}
+at this point.
+
+\item[Stage 2 (Parsing)] All the \iext{bib} files associated with
+the \igls{resourceset} are parsed. Entry aliases (identified by
+\csopt{entry-type-aliases}) are performed. The
+\hyperref[sec:multientry]{multi-entry types}, such as
+\atentry{bibtexentry} and \atentry{progenitor}, spawn their
+associated \glspl{primaryentry}. Preamble information (provided by
+\atentry{preamble}) is saved but is not interpreted at this stage.
+The transcript will show the message
+\begin{alltt}
+Parsing bib files for resource \meta{resource-name}
+\end{alltt}
+at this point.
+
+\item[Stage 3 (Processing Entries)] 
+The transcript will show the message
+\begin{alltt}
+Processing resource \meta{resource-name}
+\end{alltt}
+at this point.
+For each entry that was found in
+the corresponding set of \ext{bib} files: 
+\begin{itemize}
+\item Records are transferred to aliases if required (\csopt{alias-loc}).
+\item Field checks and modifications are performed:
+  \begin{itemize}
+  \item field aliases are performed (\csopt{field-aliases}); 
+
+  \item known fields identified with \csopt{save-original-id} and
+  \csopt{save-original-entrytype} are set (internal fields that
+  don't have a corresponding key for use with \gls!{newglossaryentry} aren't 
+  set until the \ext{glstex} file is written);
+
+  \item ignored fields (identified by \csopt{ignore-fields}, not by \csopt{omit-fields}) are
+  removed;
+
+  \item case-changes (for example, \csopt{short-case-change}) are
+  performed, except for the \field{name} field and fields identified
+  with \csopt{field-case-change};
+
+  \item suffixes are appended if required (for example, with
+  \csopt{short-plural-suffix});
+
+  \item field replications are made (\csopt{replicate-fields}),
+    and any of the above case-change or suffixes required
+    on the replicated fields are performed;
+
+  \item the \field{group} field is assigned if \csopt[\meta{label}]{group} 
+    is set;
+
+  \item any variables (identified by \atentry{string}) are expanded
+  (if not already done in any of the previous steps);
+
+  \item any fields that have been identified by
+  \csopt{bibtex-contributor-fields} are converted;
+
+  \item any fields that have been identified with
+  \csopt{encapsulate-fields} are converted;
+
+  \item any fields that have been identified with
+  \csopt{encapsulate-fields*} are converted;
+
+  \item any fields that must be converted into a label form
+  (\csopt{labelify} or \csopt{labelify-list}) are processed;
+
+  \item any fields identified by \csopt{dependency-fields} are parsed for
+  dependent entries;
+
+  \item any fields whose value must be a label are interpreted
+  if \csopt{interpret-label-fields} is set;
+
+  \item the \field{parent} field is adjusted according to the label prefix 
+  settings (\csopt{label-prefix} etc);
+
+  \item \ics{makefirstuc} protection is applied according to 
+  \longarg{mfirstuc-protection} and \longarg{mfirstuc-math-protection};
+
+  \item fields are parsed for commands like \cs{gls} or
+  \cs{glshyperlink} and also checked for nested links if
+  \longarg{nested-link-check} is set;
+
+  \item the \field{description} field is adjusted according to
+  \csopt{strip-trailing-nopost};
+
+  \item end punctuation is checked according to
+  \csopt{check-end-punctuation};
+
+  \item field assignments are made (\csopt{assign-fields}),
+    and any of the above case-change or suffixes required
+    by the destination fields are performed;
+
+  \item \field{name} adjustment is performed if
+   \csopt{compound-adjust-name} is set (and the criteria is met);
+
+  \item \field{name} case-change is performed if
+  \csopt{name-case-change} is set;
+
+  \item if \csopt[true]{copy-alias-to-see} the \field{alias} is copied 
+  to the \field{see} field;
+
+  \item general field case changes identified by
+  \csopt{field-case-change} are performed;
+
+  \item any fields that have been identified with
+  \csopt{interpret-fields} are replaced with their interpreted
+  values;
+
+  \item any fields that have been identified with
+  \csopt{hex-unicode-fields} will have Unicode characters replaced;
+
+  \item check for \field{nonumberlist}.
+  \end{itemize}
+\item The dual version (if appropriate) is created.
+\item \Glspl{record} are added to the entry's \igls{locationlist} (or transferred
+to the \dual\slash\primary\ according to \csopt{combine-dual-locations}).
+\item The \field{type}, \field{category} and \field{counter} fields
+are set according to \csopt{type}, \csopt{dual-type},
+\csopt{category}, \csopt{dual-category}, \csopt{counter} and
+\csopt{dual-counter}.
+\item Filtering is applied (according to options like \csopt{match}
+but not \csopt{selection} or \csopt{limit}).
+\item Required fields are checked for existence.
+\item Dependencies are registered (if
+\csopt[recorded and deps]{selection} or \csopt[recorded and deps and
+see]{selection}). 
+\item Any fields that have been identified by
+\csopt{date-time-fields}, \csopt{date-fields} or \csopt{time-fields}
+are converted.
+\end{itemize}
+If \csopt[recorded and deps and see]{selection} then any
+\glspl{recordedentry} that have been cross-referenced by an
+\gls{unrecordedentry}, will register a dependency with the
+\gls{unrecordedentry}.
+
+The \gls{compoundentry} options \csopt{compound-dependent} and
+\csopt{compound-add-hierarchy} are implemented, if enabled.
+
+Finally, \glspl{supplementalrecord} are added to entries.
+
+\item[Stage 4 (Selection, Sorting, Writing)] Entries are selected
+from the list according to the \csopt{selection} setting, sorting is
+performed (if required), truncation is applied (if \csopt{limit} is
+set) and the \iext{glstex} file is written.
+The transcript will show the message
+\begin{alltt}
+Selecting entries for resource \meta{resource-name}
+\end{alltt}
+or (if \csopt{master})
+\begin{alltt}
+Processing master \meta{resource-name}
+\end{alltt}
+at this point.
+
+Options such as \csopt{copy-to-glossary} and \csopt{omit-fields} are
+implemented when each entry has its definition written to the \ext{glstex}
+file.  This means that the omitted fields will still be available for actions
+such as sorting, establishing dependencies, or field assignments.
+
+\end{description}
+
+Parent entries must always be in the same \igls{resourceset} as their
+\glspl{childentry}. (They may be defined in different \ext{bib} files as
+long as all those \ext{bib} files are listed in the same \csopt{src}.) 
+Other forms of dependencies may be in a
+different \igls{resourceset} under certain circumstances. These types
+of dependencies are instances of commands such as \cs{gls} being
+found (for example, in the \field{description} field), or the
+\glspl{cross-referencefield} (\field{see}, \field{seealso} or
+\field{alias} or fields identified with \csopt{dependency-fields}) 
+in \glspl{recordedentry} that reference \glspl{unrecordedentry}.
+
+The \qt{cross-referenced by} dependencies enabled with
+\csopt[recorded and deps and see]{selection} (where an
+\gls{unrecordedentry} references a \gls{recordedentry} through the
+\glspl{cross-referencefield}) \emph{aren't supported} across
+\iglspl{resourceset} (even with \longarg{force-cross-resource-refs}).
+
+A \igls{crossresourceref} is a reference from a \gls{recordedentry}
+provided in one \igls{resourceset} to an \gls{unrecordedentry} in
+another \igls{resourceset}.  Since the contents of each
+\igls{resourceset}['s] preamble must be processed before fields can
+be interpreted and one \igls{resourceset}['s] preamble may contain
+definitions that override another, \iglspl{crossresourceref} can't
+be supported if fields containing cross-referencing information need
+to be interpreted.
+
+The \igls{crossresourceref} mode determines whether or not \bibgls\
+can support \iglspl{crossresourceref}. If enabled, the message
+\begin{verbatim}
+Cross-resource references allowed.
+\end{verbatim}
+will be written to the transcript otherwise the message is
+\begin{verbatim}
+Cross-resource references disabled.
+\end{verbatim}
+The mode can only be enabled if the following condition is satisfied:
+\begin{itemize}
+\item the interpreter is off (\longarg{no-interpret}), or
+\item every \igls{resourceset} either doesn't have a preamble
+(\atentry{preamble}) or has \csopt[false]{interpret-preamble} set.
+\end{itemize}
+If you know the preamble contents won't cause a problem, you
+can force the \iglspl{crossresourceref} mode on with 
+\longarg{force-cross-resource-refs}.
+
+If you don't use either \csopt[recorded and
+deps]{selection} or \csopt[recorded and deps and see]{selection}
+then the dependencies aren't picked up for that \igls{resourceset}
+(and so can't be cross-referenced from another \igls{resourceset}).
+
+Trails don't work with \iglspl{crossresourceref}. For example, if
+entry $A$ has been recorded and depends on entry $B$ that hasn't been
+recorded, then $B$ can be picked up from a different
+\igls{resourceset}, but if $A$ and $B$ are in the same
+\igls{resourceset} and $B$ is dependent on $C$ which is in a
+different \igls{resourceset} then $C$ won't be picked up if it hasn't
+been recorded because $B$ hasn't been recorded and is in a different
+\igls{resourceset}.
+
+If the \igls{crossresourceref} mode is enabled then stage~3 and
+stage~4 are processed in separate \idxpl{loop}, otherwise they are
+processed in the same \idx{loop}.
+
+\section{\bibgls\ Quarks}
+\label{sec:quarks}
+
+A \bibgls\ \idx{quark} is similar in principle to a \LaTeX3 quark,
+in that it is a token that looks like a control sequence but isn't
+intended to be interpreted as a \LaTeX\ command. Unlike \LaTeX3
+quarks, their name isn't prefixed with \csfmt{q\_} and can
+coincidentally look the same as a \LaTeX\ command. This is
+particularly the case with regular expressions that have escaped
+characters to indicate a literal character. For example, in a
+regular expression a pipe or vertical bar character \idx{regexpor}
+indicates \qt{or}. If you want to match a literal pipe, you need to
+identify this with \cs{quark.pipe}. This is distinct from, but
+visually identical to, the \LaTeX\ command used to create a double
+vertical bar in maths mode.
+
+The resource options provided in \gls{GlsXtrLoadResources} expand as
+they are written to the \ext{aux} file. This allows commands to be
+used within the resource options that expand to a complex option
+that may be required multiple times. For example,
+\ics{GlsXtrBibTeXEntryAliases} or \ics{glsxtrhyphenrules}.
+Unfortunately, this means that quarks must be prevented from
+expansion as they form part of the option syntax and are not
+intended for use in the document.
+
+This means that, unless they happen to coincidentally be robust
+commands, they must be preceded by either \ics{protect} or
+\idx{cs.string}.  Since \cs{protect} adds a space afterwards,
+\idx{cs.string} is usually better if the syntax requires that spaces
+after quarks are significant.
+
+This can lead to cumbersome expressions, but it's possible to
+redefine \ics{glsxtrresourceinit} to locally redefine these quarks
+to expand to detokenized forms of themselves. For example:
+\begin{codeenv}
+\cs{renewcommand}*\marg{\cs{glsxtrresourceinit}}\marg{\cmd{let}\cmd{u}\cs{glshex}}
+\end{codeenv}
+Since there are a number of these quarks, as from v1.51,
+\sty{glossaries-extra-bib2gls} (which is automatically loaded with
+\styopt{record}) provides \ics{GlsXtrResourceInitEscSequences},
+so you can change the above to the following:
+\begin{codeenv}
+\cs{renewcommand}*\marg{\cs{glsxtrresourceinit}}\marg{\comment{}
+  \cs{GlsXtrResourceInitEscSequences}
+}
+\end{codeenv}
+Note that if new quarks, such as \gls{INTERPRETNOREPL} and \gls{REPLACESPCHARS},
+are added to \bibgls, they may not be included in \cs{GlsXtrResourceInitEscSequences} if they
+were introduced to \bibgls\ after the version date of the \sty{glossaries-extra}
+package installed on your system. In this case, you will need to add them. For example:
+\begin{codeenv}
+\cs{renewcommand}*\marg{\cs{glsxtrresourceinit}}\marg{\comment{}
+  \cs{GlsXtrResourceInitEscSequences}
+  \cmd{def}\gls{INTERPRETNOREPL}\marg{\idx{cs.string}\gls{INTERPRETNOREPL}}\comment{}
+  \cmd{def}\gls{REPLACESPCHARS}\marg{\idx{cs.string}\gls{REPLACESPCHARS}}\comment{}
+}
+\end{codeenv}
+
+
+This will locally define the quarks listed below. Since
+\cs{glsxtrresourceinit} is used in a scoped context, the
+definitions only have an effect within the protected write, and so this
+shouldn't interfere with the corresponding commands that are
+required in the document. Note that these quarks should only be used
+in their designated contexts.
+
+\begin{description}
+
+\item[General] \inlinedef{uhex} is recognised in certain resource options
+(such as \csopt{field-concat-sep}) as indicating the Unicode
+character with the given hexadecimal code.
+
+\item[Regular expressions] The following indicate a literal
+character: 
+\glsadd{idx.periodchar}\inlinedef{quark.dot} 
+\glsadd{idx.backslashchar}\inlinedef{quark.backslash}
+\glsadd{idx.slashchar}\inlinedef{quark.slash} 
+\glsadd{idx.pipechar}\inlinedef{quark.pipe} 
+\glsadd{idx.ampchar}\inlinedef{quark.amp}
+\glsadd{idx.pluschar}\inlinedef{quark.plus} 
+\glsadd{idx.ltchar}\inlinedef{quark.lt} 
+\glsadd{idx.gtchar}\inlinedef{quark.gt} 
+\glsadd{idx.starchar}\inlinedef{quark.star}
+\glsadd{idx.dollarchar}\inlinedef{quark.dollar} 
+\glsadd{idx.circumchar}\inlinedef{quark.circum} 
+\glsadd{idx.tildechar}\inlinedef{quark.tilde}
+\glsadd{idx.openparenchar}\inlinedef{quark.openparen} 
+\glsadd{idx.closeparenchar}\inlinedef{quark.closeparen}
+\glsadd{idx.opensqchar}\inlinedef{quark.opensq} 
+\glsadd{idx.closesqchar}\inlinedef{quark.closesq}
+\glsadd{idx.doublequotechar}\inlinedef{quark.doublequote} 
+\glsadd{idx.hyphenchar}\inlinedef{quark.hyphen}
+\glsadd{idx.questionchar}\inlinedef{quark.question} 
+\glsadd{idx.colonchar}\inlinedef{quark.colon} 
+\glsadd{idx.hashchar}\inlinedef{quark.hash}.
+Note that \idxpl{regex} in resource options are typically
+\gls{anchored}, so there shouldn't be any need to use \idx{regex.circum}
+or \idx{regex.dollar} to denote the start and end.
+
+\item[Field assignments] The following commands may be used in the
+\meta{element-list} syntax of \csopt{assign-fields}:
+\gls{CS}, \gls{MGP}, \gls{LEN}, \gls{TRIM}, \gls{INTERPRET},
+\gls{INTERPRETNOREPL}, \gls{REPLACESPCHARS},
+\gls{LC}, \gls{UC}, \gls{FIRSTLC}, \gls{FIRSTUC}, and \gls{TITLE}.
+
+\item[Conditionals] The \meta{condition} part of the \csopt{assign-fields}
+syntax recognises \gls{LEN}, \gls{CAT}, \gls{IN}, \gls{NIN}, \gls{PREFIXOF},
+\gls{NOTPREFIXOF}, \gls{SUFFIXOF}, \gls{NOTSUFFIXOF} and \gls{NULL}.
+\end{description}
+
+Finally, this isn't actually a quark, but \inlinedef{cs} is defined
+to expand to the literal string \csfmt{\meta{csname}} so you can use it for any
+other escape sequences that aren't covered above. For example, 
+\code{\gls{cs}\marg{n}} for a newline \ics{n}.
+
+\section{Indexing}
+
+The dual index entries such as \atentry{dualindexentry} (described in
+\sectionref{sec:dualentry}) are designed to provide a way of
+including an entry in a glossary (with a description) and also
+include the term (without the description) in an index.  Additional
+terms that should only appear in the index can be defined with
+\atentry{index}.  (See, for example, the \exfile{sample-multi1.tex}
+and \exfile{sample-multi2.tex} sample files.)
+
+Although \bibgls\ is designed to create indexes as well as glossary
+lists using the same interface (\cs{gls} etc), it is
+possible to have a mixture of \bibgls\ and \ics{index}. For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{report}
+\strut
+\cmd{usepackage}\marg{makeidx}
+\cmd{usepackage}\oarg{\styopt{record}}\marg{glossaries-extra}
+\strut
+\cmd{makeindex}
+\gls{GlsXtrLoadResources}\oarg{\csopt[entries]{src}}
+\strut
+\ics{glssetcategoryattribute}\marg{general}\marg{dualindex}\marg{true}
+\cs{glssetcategoryattribute}\marg{symbol}\marg{dualindex}\marg{true}
+\cs{glssetcategoryattribute}\marg{abbreviation}\marg{dualindex}\marg{true}
+\strut
+\cs{glssetcategoryattribute}\marg{general}\marg{indexname}\marg{hyperbf}
+\cs{glssetcategoryattribute}\marg{symbol}\marg{indexname}\marg{hyperbf}
+\cs{glssetcategoryattribute}\marg{abbreviation}\marg{indexname}\marg{hyperbf}
+\strut
+\cmd{begin}\marg{document}
+\cmd{chapter}\marg{Example}
+\cs{gls}\marg{bird}, \cs{gls}\marg{html}, \idx{mshiftchar}\cs{gls}\marg{v}\idx{mshiftchar} and \cs{glspl}\marg{goose}.
+\strut
+\cs{printunsrtglossaries}
+\cmd{printindex}
+\cmd{end}\marg{document}
+\end{codeenv}
+If the document is called \filefmt{myDoc.tex} then the document
+build is:
+\begin{verbatim}
+pdflatex myDoc
+bib2gls myDoc
+pdflatex myDoc
+makeindex myDoc.idx
+pdflatex myDoc
+\end{verbatim}
+This requires an additional \LaTeX\ call between \bibgls\ and
+\idx{makeindex} since the entries must be defined before they can be
+indexed (and they can't be defined until \bibgls\ creates the
+associated \ext{glstex} files).
+
+Note that this method will use the \field{sort} value obtained by \bibgls\
+as the \meta{sort} part within
+\code{\cs{index}\marg{\meta{sort}@\meta{actual}}}.
+Be careful if you use \idx{makeindex} as this can result in Unicode
+characters appearing in the sort value, which \idx{makeindex}
+doesn't support.
+The \meta{actual} part is given by
+\code{\ics{glsentryname}\margm{label}}.
+(You can change the \meta{sort} and \meta{actual} parts by
+redefining \ics{glsxtrautoindexassignsort} and
+\ics{glsxtrautoindexentry}. See the \sty{glossaries-extra} manual
+for further details.)
+
+\section{Security}
+
+\TeX\ Live come with security settings
+\texmfcnf{openinany} and \texmfcnf{openoutany} that, respectively,
+govern read and write file access (in addition to the operating
+system's file permissions). \bibgls\ uses \idx{kpsewhich} to
+determine these values and honours them. MikTeX doesn't use these
+settings, so if these values are unset, \bibgls\ will default to
+\code{a} (any) for \texmfcnf{openinany} and \code{p} (paranoid) for
+\texmfcnf{openoutany}.
+
+The only external processes that are run by \bibgls\ are calls to
+\idx{kpsewhich} to check the security settings and locate files on
+\TeX's path. These are started with Java's \code{ProcessBuilder}
+class so there should be no issues with spaces or shell special characters
+in the argument.  The \commonlongarg{debug} switch will write the process
+call in the transcript file and will delimit the argument in the log
+with single quote characters for convenience, but the process isn't
+actually called in that way.
+
+\bibgls\ creates files with the extension \ext{glstex}, which are
+input by \gls{glsxtrresourcefile} (and therefore by the shortcut
+\gls{GlsXtrLoadResources}). This extension is fixed and is imposed
+by both \bibgls\ and \gls{glsxtrresourcefile}. \bibgls\ also creates
+a transcript file with the default extension \ext{glg}. This may be
+overridden by the \longarg{log-file} switch, but \bibgls\ always
+forbids write access to any file with the following extensions:
+\extfmt{tex}, \extfmt{ltx}, \extfmt{sty}, \extfmt{cls},
+\extfmt{bib}, \extfmt{dtx}, \extfmt{ins}, \extfmt{def} and
+\extfmt{ldf}.
+
+\section{Localisation}
+\label{sec:lang.xml}
+
+The messages produced by \bibgls\ are fetched from a resource file
+called \metafilefmt{bib2gls-}{lang}{.xml}, where \meta{lang} is a
+valid \idx{IETF} language tag.
+
+The appropriate file is searched for in the following order, where
+\meta{locale} is the \gls{Java-locale} or the value supplied
+by the \commonlongarg{locale} switch:
+\begin{enumerate}
+\item \meta{lang} exactly matches \meta{locale}.
+For example, my locale is \code{en-GB}, so \bibgls\ will first search
+for \filefmt{bib2gls-en-GB.xml}. This file doesn't exist, so it will
+try again.
+
+\item If \meta{locale} has an associated script, the
+next try is with \meta{lang} set to \meta{lang
+code}\code{-}\meta{script} where \meta{lang code} is the two
+letter ISO language code and \meta{script} is the script code.
+For example, if \meta{locale} is \code{sr-RS-Latn}
+then \bibgls\ will search for \filefmt{bib2gls-sr-Latn.xml} if
+\filefmt{bib2gls-sr-RS-Latn.xml} doesn't exist.
+
+\item The final attempt is with \meta{lang} set to just the two
+letter ISO language code. For example, \filefmt{bib2gls-sr.xml}.
+\end{enumerate}
+
+If there is no match, \bibgls\ will fallback on the English resource file
+\file{bib2gls-en.xml}.
+(Currently only \file{bib2gls-en.xml} exists as my language skills aren't up
+to translating it. Any volunteers who want to provide other language
+resource files would be much appreciated.)
+
+In addition to the main language file, it's possible to have
+supplementary files that provide text that matches the
+\gls{resource-locale}. These are in files called
+\metafilefmt{bib2gls-extra-}{lang}{.xml}, which has the same format
+as \metafilefmt{bib2gls-}{lang}{.xml}. These supplementary files
+will be loaded automatically if they exist and if you have
+\styfmt{glossaries-extra} v1.51+ (which will save a list of all
+tracked languages for the document).
+
+Note that if you use the \csopt[true]{loc-prefix} option, the
+textual labels (\qt{Page} and \qt{Pages} in English) will be 
+first be attempted from the supplementary file with the tags
+\code{tag.\meta{lang}.page} and \code{tag.\meta{lang}.pages}
+(where \meta{lang} is the language code) and then, if not
+found, from the main resource file using the tags \code{tag.page}
+and \code{tag.pages}. In the event that the loaded resource file
+doesn't match the document language and there's no supplementary
+file, you will have to manually set
+the correct translation (in English, this would be
+\csopt[Page\dcomma Pages]{loc-prefix}). The default definition of
+\gls!{bibglspassim} is also obtained from the resource file in a
+similar manner.
+
+There are also keys in the resource file to assist case-conversion.
+Currently, there's only support for the Dutch \qt{IJ} case.
+
+\section{Conditional Document Build}
+
+If you are using a document build method that tries to determine
+whether or not \bibgls\ should be run, you can find the information
+by searching the \iext{aux} file for instances of
+\nosecdef{glsxtr at resource}
+Each instance corresponds to an instance of \gls{glsxtrresourcefile}
+where \meta{filename} is the base name of the \iext{glstex} file
+that \bibgls\ needs to create for this resource set. If the
+\meta{options} part is missing the \csopt{src} option, then
+\meta{filename} also indicates the base name for the \iext{bib} file.
+
+So the simplest check to determine if \bibgls\ needs to be run is to test
+if the \iext{aux} file contains \gls{glsxtr at resource}. For
+example, with \idx{arara} version 4.0:
+\begin{codeenv}
+\% arara: bib2gls if found("aux", "glsxtr at resource")
+\end{codeenv}
+A sophisticated method could check if
+\meta{filename}\ext{glstex} is missing or is older than the document
+\ext{tex} file for each instance of \gls{glsxtr at resource} found in
+the \ext{aux} file.
+
+It might also be possible, although far more complex, to
+parse the \meta{options} part in each instance of \gls{glsxtr at resource}
+for \csopt{src} and determine if the corresponding \ext{bib} file or
+files are newer than the \ext{tex} file.
+
+It's not possible to determine if the \glspl{locationlist} require
+updating, just as it's not possible to do this for the
+\idx{toc}, list of figures, list of tables etc. (Or, if it could
+be implemented, the required code would make the document build far
+more complicated.)
+
+In general, the basic algorithm is:
+\begin{enumerate}
+\item Run \LaTeX\ (or PDF\LaTeX\ etc).
+
+\item If \gls{glsxtr at resource} is found in the \ext{aux} file then:
+
+   \begin{enumerate}
+   \item run \bibgls;
+   \item run \LaTeX\ (or PDF\LaTeX\ etc).
+   \end{enumerate}
+
+\item If \ics{@istfilename} is found in the \ext{aux} file then:
+
+   \begin{enumerate}
+   \item run \idx{makeglossaries} (or \idx{makeglossaries-lite});
+   \item run \LaTeX\ (or PDF\LaTeX\ etc).
+   \end{enumerate}
+
+\end{enumerate}
+This allows for the \styopt[alsoindex]{record} package option.  See
+also
+\href{https://www.dickimaw-books.com/latex/buildglossaries}{\qt{Incorporating
+\idx[hyper=false,noindex]{makeglossaries} or
+\idx[hyper=false,noindex]{makeglossaries-lite} or \bibgls\ into
+the document build}}~\cite{buildglossaries}.
+
+\section{Manual Installation}
+
+In general it's best to install \bibgls\ via your \TeX\ package manager.
+However, if you are unable to do this or if you are testing a development version,
+you can install manually using the instructions below.
+Replace \meta{TEXMF} with the path to your local or home TEXMF tree 
+(for example, \filefmt{\glstildechar/texmf}).
+
+Copy the files provided to the following locations:
+\begin{itemize}
+\item \meta{TEXMF}\filefmt{/scripts/bib2gls/bib2gls.jar}
+(Java application.)
+\item \meta{TEXMF}\filefmt{/scripts/bib2gls/convertgls2bib.jar}
+(Java application.)
+\item \meta{TEXMF}\filefmt{/scripts/bib2gls/datatool2bib.jar}
+(Java application.)
+\item \meta{TEXMF}\filefmt{/scripts/bib2gls/bibglscommon.jar}
+(Java library.)
+\item \meta{TEXMF}\filefmt{/scripts/bib2gls/texparserlib.jar}
+(Java library.)
+\item \meta{TEXMF}\filefmt{/scripts/bib2gls/resources/bib2gls-en.xml}
+(English resource file.)
+\item \meta{TEXMF}\filefmt{/scripts/bib2gls/resources/bib2gls-extra-en.xml}
+(Extra English resource file.)
+\item \meta{TEXMF}\filefmt{/scripts/bib2gls/resources/bib2gls-extra-nl.xml}
+(Extra Dutch resource file.)
+\item \meta{TEXMF}\filefmt{/doc/support/bib2gls/bib2gls.pdf}
+(This document.)
+\item \meta{TEXMF}\filefmt{/doc/support/bib2gls/bib2gls-begin.pdf}
+(Introductory guide.)
+\end{itemize}
+If you use the Unix \appfmt{man} command, copy the
+\filefmt{bib2gls.1} and \filefmt{convertgls2bib.1} files to the
+appropriate location.
+
+If you are using a Unix-like system, there are also bash scripts
+provided called \file{bib2gls.sh}, \file{convertgls2bib.sh} and \file{datatool2bib.sh}. 
+Either copy them directly to somewhere on your path without the \iext{sh} 
+extension, for example:
+\begin{verbatim}
+cp bib2gls.sh ~/bin/bib2gls
+cp convertgls2bib.sh ~/bin/convertgls2bib
+cp datatool2bib.sh ~/bin/datatool2bib
+\end{verbatim}
+or copy the files to
+\meta{TEXMF}\filefmt{/scripts/bib2gls/} and create a
+symbolic link to them called just \filefmt{bib2gls},
+\filefmt{convertgls2bib} and \filefmt{datatool2bib} from somewhere on
+your path, for example:
+\begin{verbatim}
+cp bib2gls.sh ~/texmf/scripts/bib2gls/
+cp convertgls2bib.sh ~/texmf/scripts/bib2gls/
+cp datatool2bib.sh ~/texmf/scripts/bib2gls/
+cd ~/bin
+ln -s ~/texmf/scripts/bib2gls/bib2gls.sh bib2gls
+ln -s ~/texmf/scripts/bib2gls/convertgls2bib.sh convertgls2bib
+ln -s ~/texmf/scripts/bib2gls/datatool2bib.sh datatool2bib
+\end{verbatim}
+The \file{texparserlib.jar} file isn't an application but is a
+library used by both \file{bib2gls.jar} and
+\file{convertgls2bib.jar}, and so needs to be in the same class path. 
+(The library is in a separate
+\href{https://github.com/nlct/texparser}{GitHub
+repository}~\cite{texparser} as it's
+also used by some of my other applications.)
+
+Windows users can create a \iext{bat} file that works in a
+similar way to the bash scripts. To do this, create a file called
+\file{bib2gls.bat} that contains the following:
+\begin{verbatim}
+ at ECHO OFF
+FOR /F "tokens=*" %%I IN ('kpsewhich --progname=bib2gls --format=texmfscripts
+bib2gls.jar') DO SET JARPATH=%%I
+java -jar "%JARPATH%" %*
+\end{verbatim}
+Save this file to somewhere on your system's path.
+(Similarly for \filefmt{convertgls2bib} and \filefmt{datatool2bib}.) Note that \TeX\
+distributions for Windows usually convert \iext{jar} files to
+executables.
+
+You may need to refresh \TeX's database to ensure that
+\idx{kpsewhich} can find the \iext{jar} files.
+To test that the application has been successfully installed, open a
+command prompt or terminal and run the following command:
+\begin{verbatim}
+bib2gls --version
+convertgls2bib --version
+datatool2bib --version
+\end{verbatim}
+This should display the version information for both applications.
+
+\chapter{\texorpdfstring{\TeX}{TeX}\ Parser Library}
+\label{sec:texparserlib}
+
+The \bibgls\ application requires the \TeX\ Parser Library
+\file{texparserlib.jar}\footnote{\url{https://github.com/nlct/texparser}}
+which is used to parse the \iext{aux} and \iext{bib} files.
+
+With the \longarg{interpret} switch on (default), this library is
+also used to interpret the sort value when it contains a backslash
+\idx{escchar} or a tilde \idx{nbspchar} or a dollar symbol 
+\idx{mshiftchar} or braces \idx{bgroupchar} \idx{egroupchar}
+(and when the \csopt{sort} option is not
+\optfmt{unsrt} or \optfmt{none} or \optfmt{use}).\footnote{The other
+special characters are omitted from the check: the comment symbol
+\idx{commentchar} is best avoided in field values, the subscript and
+superscript characters \idx{sbchar} and \idx{spchar} should
+either be encapsulated by \idx{mshiftchar} or by \cs{ensuremath}, which
+will be picked up by the check for \idx{mshiftchar} or
+\idx{escchar}, and the other special characters would
+indicate something too complex for the interpreter to handle.}
+
+The other cases that the interpreter is used for are:
+\begin{itemize}
+\item when \csopt{set-widest} is used to determine the width of
+the \field{name} field;
+\item if \csopt{labelify} or \csopt{labelify-list} are set the
+identified field values are first interpreted (if they contain
+\idx{escchar} \idx{bgroupchar} \idx{egroupchar} 
+\idx{nbspchar} or \idx{mshiftchar}) before being converted to labels;
+\item if \csopt[true]{interpret-label-fields} is set and the
+\field{parent}, \field{category}, \field{type}, \field{group},
+\field{seealso} or \field{alias} fields contain \idx{escchar}
+or \idx{bgroupchar} or \idx{egroupchar} the interpreter is used 
+since these fields must be just a label
+(other special characters aren't checked as they won't expand to
+characters allowed in a label).
+\end{itemize}
+
+Information in the \ext{aux} file is parsed for specific commands
+but the arguments of those commands are not interpreted so, for
+example, UTF-8 characters that occur in any resource options will
+need to be detokenized when using \sty{inputenc} to prevent
+expansion when they are written to the \ext{aux} file. (In some
+options, such as \csopt{sort-rule}, you can use \cs{glshex}\meta{hex}
+syntax to specify a UTF-8 character.) Note that newer \LaTeX\
+kernels have better support for UTF-8 and this issue is less likely
+to occur.
+
+The \longarg{no-interpret} switch will turn off the interpreter, but
+the library will still be used to parse the \ext{aux} and \ext{bib}
+files. Note that the \field{see} field doesn't use the interpreter
+with \csopt[true]{interpret-label-fields} as
+it may legitimately contain \LaTeX\ code in the optional tag part
+(such as \cs{seealsoname} or \cs{alsoname}).
+
+The parser has a different concept of expansion to \TeX\
+and will expand some things that aren't expanded by \LaTeX\
+(such as \ics{MakeUppercase} and \ics{char}) and won't expand other commands
+that would be expanded by \LaTeX\ (such as commands defined
+in terms of complicated internals).
+
+If you get a \idx{StackOverflowError} while a field is being
+interpreted (with a long stack trace that contains repeated file names and
+line numbers) then it's likely you have an infinite \idx{loop}. For
+example, this can be triggered if a field contains \csfmt{foo} that
+has been defined as:
+\begin{codeenv}
+\cs{def}\cmd{foo}\marg{\cmd{foo}}
+\end{codeenv}
+This will obviously also cause an error in the \LaTeX\ document as
+well (unless the document has a different definition that doesn't
+have this unbounded recursion).
+
+The \file{texparserlib.jar} library is not a \TeX\ engine and there
+are plenty of situations where it doesn't work. In particular, with
+\bibgls, it's being used in a fragmented context without knowing
+most of the packages used by the document or any custom commands or
+environments provided within the document.
+
+\bibgls\ can detect from the log file a small
+number of packages that the parser recognises. Note that in
+some cases there's only very limited support. For example, 
+\isty{siunitx}'s \ics{si} and \ics{unit} commands are recognised but other
+commands from that package aren't. See
+\longargpageref{list-known-packages} for further details.
+
+Since the parser doesn't have a full set of commands available
+within the \LaTeX\ document, when it encounters \ics{renewcommand} it
+won't check if the command is undefined. If the command isn't
+defined, it will simply behave like \cs{newcommand}. Whereas
+with \ics{providecommand} the parser will only define the command
+if it's unrecognised.
+
+The interpreter has its own internal implementation of the
+glossary-related commands listed in \tableref{tab:bibglsdefs}. These
+may be overridden by custom packages provided with the
+\longarg{custom-packages} switch. Note that commands that reference
+an entry, such as \cs{glsentryname}, aren't guaranteed to work
+across \iglspl{resourceset} and will only be able to look up field
+values that are known to \bibgls. (For example, the \field{name}
+field for abbreviations is typically set by the associated
+abbreviation style, which isn't available to \bibgls.)
+
+\begin{table}[htbp]
+\caption{Glossary-Related Commands Implemented by the \bibgls\ Interpreter}
+\label{tab:bibglsdefs}
+\setlength{\tabcolsep}{4pt}%
+\centering
+\tablelistcs{3}{glsxtrprovidecommand,bibglsuppercase,bibglslowercase,bibglsfirstuc,%
+bibglstitlecase,GlsXtrEnableInitialTagging,bibglscontributorlist,%
+bibglshyperlink,glshyperlink,bibglscontributor,bibglsdatetime,%
+bibglsdate,bibglstime,glsentryname,glsentrytext,glsentryshort,%
+glsentrylong,glsentryfirst,glsentrysymbol,glsentryuseri,%
+glsentryuserii,glsentryuseriii,glsentryuseriv,glsentryuserv,%
+glsentryuservi,glsentryplural,glsentryfirstplural,glsentryshortpl,%
+glsentrylongpl,glsentrysymbolplural,Glsentryname,Glsentrytext,%
+Glsentryshort,Glsentrylong,Glsentryfirst,Glsentrysymbol,%
+Glsentryuseri,Glsentryuserii,Glsentryuseriii,Glsentryuseriv,%
+Glsentryuserv,Glsentryuservi,Glsentryplural,Glsentryfirstplural,Glsentryshortpl,%
+Glsentrylongpl,Glsentrysymbolplural,bibglshashchar,bibglsunderscorechar,%
+bibglsdollarchar,bibglsampersandchar,bibglscircumchar,glsbackslash,glstildechar,glsopenbrace,glsclosebrace,glspercentchar,%
+glsxtrusefield,Glsxtrusefield,GLSxtrusefield,glsentrytitlecase,%
+glsxtrhiernamesep,glsxtrhiername,Glsxtrhiername,GlsXtrhiername,%
+GLSxtrhiername,GLSXTRhiername}
+\end{table}
+
+If a command isn't recognised, you can provide it in the
+\atentry{preamble} and use \ics{char} to map a symbol to the most
+appropriate Unicode character. For example, suppose your document
+loads a package that provides symbols for use on maps, such as
+\csfmt{Harbour}, \csfmt{Battlefield} and \csfmt{Stadium}, then you
+can provide versions of these commands just for \bibgls's
+use:\footnote{These commands won't work with PDF\LaTeX, as the
+\cs{char} values are too large, but they're fine for \bibgls.}
+\begin{codeenv}
+\atentry{preamble}\marg{\qtdelim{\cs{providecommand}\marg{\cmd{Harbour}}\marg{\charhex{2693}}
+\cs{providecommand}\marg{\cmd{Battlefield}}\marg{\charhex{2694}}
+\cs{providecommand}\marg{\cmd{Stadium}}\marg{\charhex{26BD}}}}
+\end{codeenv}
+Since these use \cs{providecommand}, they won't overwrite the
+document's version (provided these commands have been defined before
+\gls!{GlsXtrLoadResources}). Alternatively, you can instruct \bibgls\
+to not write the \atentry{preamble} contents to the resource file
+using \csopt[false]{write-preamble}. Now you can either sort these
+symbols by
+their Unicode values (\csopt[letter-case]{sort}) or provide a custom
+rule that recognises these Unicode characters (for example,
+\csopt[custom]{sort},
+\csopt[\cs{glshex}2694 \string< \cs{glshex}2693 \string< \cs{glshex}26BD]{sort-rule}).
+
+Another approach is to use \ics{IfTeXParserLib}, which is defined by
+the \texparserlib\ to expand to its first argument. The
+\sty{glossaries-extra-bib2gls} package provides a definition that
+expands to its second argument, so that command may be used to
+provide alternative code. For example:
+\begin{codeenv}
+\atentry{preamble}\marg{\qtdelim{\cs{providecommand}\marg{\cmd{Ord}}[1]\marg{\comment{}
+ \cs{IfTeXParserLib}
+  \marg{\ics{bibglspaddigits}\marg{2}\marg{\idx{param}1}}\comment{interpreter}
+  \marg{\cs{MakeUppercase}\marg{\cmd{romannumeral} \idx{param}1}}\comment{document}
+}}}
+\atentry{index}\marg{John-IV,
+ \field{name}=\marg{John\idx{nbspchar}\cmd{Ord}\marg{4}}
+}
+\atentry{index}\marg{John-VI,
+ \field{name}=\marg{John\idx{nbspchar}\cmd{Ord}\marg{6}}
+}
+\atentry{index}\marg{John-IX,
+ \field{name}=\marg{John\idx{nbspchar}\cmd{Ord}\marg{9}}
+}
+\atentry{index}\marg{John-XII,
+ \field{name}=\marg{John\idx{nbspchar}\cmd{Ord}\marg{12}}
+}
+\end{codeenv}
+The sort values for these entries will be: \qt{John 04}, \qt{John
+06}, \qt{John 09} and \qt{John 12}, but in the document text they
+will be typeset as \qt{John~IV}, \qt{John~VI}, \qt{John~IX} and
+\qt{John~XII}. Note that \ics{bibglspaddigits} is only recognised by
+the \bibgls\ interpreter. Alternatively, you can use the
+\csopt{sort-number-pad} option to pad the numbers (or use 
+\ics{dtlpadleadingzeros} which is also recognised by the
+\texparserlib\ and \sty{datatool-base} v3.0+).
+
+There is a similar command with reversed syntax \ics{IfNotBibGls},
+which is defined by \sty{glossaries-extra-bib2gls} to expand to its
+first argument. The \bibgls\ interpreter defines this command to
+expand to its second argument.
+
+\TeX\ syntax can be quite complicated and, in some cases, far too
+complicated for simple \idxpl!{regex}. The \texparserlib\ performs
+better than a simple pattern match, and that's the purpose of
+\file{texparserlib.jar} and why it's used by \bibgls\ (and by
+\idx!{convertgls2bib}). When the \commonlongarg{debug} mode is on, any
+warnings or errors triggered by the interpreter will be written to
+the transcript prefixed with \code{texparserlib:} (the results of
+the conversions will be included in the transcript as informational
+messages prefixed with \code{texparserlib:} even with
+\commonlongarg{no-debug}).
+
+For example, suppose the \ext{bib} file includes:
+\begin{codeenv}
+\atentry{preamble}\marg{
+\qtdelim{\cs{providecommand}\marg{\cmd{mtx}}[1]\marg{\cs{boldsymbol}\marg{\idx{param}1}}
+\cs{providecommand}\marg{\cmd{set}}[1]\marg{\ics{mathcal}\marg{\idx{param}1}}
+\cs{providecommand}\marg{\cmd{card}}[1]\marg{|\cmd{set}\marg{\idx{param}1}|}
+\cs{providecommand}\marg{\cmd{imaginary}}\marg{i}}}
+\strut
+\atentry{entry}\marg{M,
+  \field{name}=\marg{\marg{}\idx{mshiftchar}\cmd{mtx}\marg{M}\idx{mshiftchar}},
+  \field{text}=\marg{\cmd{mtx}\marg{M}},
+  \field{description}=\marg{a matrix}
+}
+\strut
+\atentry{entry}\marg{v,
+  \field{name}=\marg{\marg{}\idx{mshiftchar}\cs{vec}\marg{v}\idx{mshiftchar}},
+  \field{text}=\marg{\cs{vec}\marg{v}},
+  \field{description}=\marg{a vector}
+}
+\strut
+\atentry{entry}\marg{S,
+  \field{name}=\marg{\marg{}\idx{mshiftchar}\cmd{set}\marg{S}\idx{mshiftchar}},
+  \field{text}=\marg{\cmd{set}\marg{S}},
+  \field{description}=\marg{a set}
+}
+\strut
+\atentry{entry}\marg{card,
+  \field{name}=\marg{\marg{}\idx{mshiftchar}\cmd{card}\marg{S}\idx{mshiftchar}},
+  \field{text}=\marg{\cmd{card}\marg{S}},
+  \field{description}=\marg{the cardinality of the set \idx{mshiftchar}\cmd{set}\marg{S}\idx{mshiftchar}}
+}
+\strut
+\atentry{entry}\marg{i,
+  \field{name}=\marg{\marg{}\idx{mshiftchar}\cmd{imaginary}\idx{mshiftchar}},
+  \field{text}=\marg{\cmd{imaginary}},
+  \field{description}=\marg{square root of minus one (\idx{mshiftchar}\cmd{sqrt}\marg{-1}\idx{mshiftchar})}
+}
+\end{codeenv}
+(The empty group at the start of the \field{name} fields
+protects against the possibility that the \catattr{glossname}
+category attribute might be set to \optfmt{firstuc}, which
+automatically converts the first letter of the name to 
+\idx{uppercase} when displaying the glossary. See also
+\longarg{mfirstuc-protection} and
+\longarg{mfirstuc-math-protection}.)
+
+None of these entries have a \field{sort} field so the \field{name}
+is used (see \sectionref{sec:fallbacks}). If the \gls{entrytype} had
+been \atentry{symbol} instead, the fallback would be the entry's
+label.  This means that with \atentry{symbol} instead of
+\atentry{entry}, and the default \csopt[sort]{sort-field}, and with
+\csopt[letter-case]{sort}, these entries will be defined in the
+order: \code{M}, \code{S}, \code{card}, \code{i}, \code{v} (since
+this is the case-sensitive letter order of the labels) whereas with
+\csopt[letter-nocase]{sort-field}, the order will be: \code{card},
+\code{i}, \code{M}, \code{S}, \code{v} (since this is the
+case-insensitive letter order of the labels).
+
+However, with \atentry{entry}, the fallback field will be taken from
+the \field{name} which in the above example contains \TeX\ code, so
+\bibgls\ will use \file{texparserlib.jar} to interpret this code.
+The library has several different ways of writing the processed
+code. For simplicity, \bibgls\ uses the library's HTML output and
+then strips the HTML markup and trims any leading or trailing
+spaces. The library method that writes \idx{non-ASCII} characters
+using \qtt{\&x\meta{hex};} markup is overridden by \bibgls\ to just
+write the actual Unicode character, which means that the letter-based
+sorting options will sort according to the integer value \meta{hex}
+rather than the string \qtt{\&x\meta{hex};}.
+
+The interpreter is first passed the code provided with
+\atentry{preamble}:
+\begin{codeenv}
+\cs{providecommand}\marg{\cmd{mtx}}[1]\marg{\cs{boldsymbol}\marg{\idx{param}1}}
+\cs{providecommand}\marg{\cmd{set}}[1]\marg{\cs{mathcal}\marg{\idx{param}1}}
+\cs{providecommand}\marg{\cmd{card}}[1]\marg{|\cmd{set}\marg{\idx{param}1}|}
+\cs{providecommand}\marg{\cmd{imaginary}}\marg{i}
+\end{codeenv}
+(unless \csopt[false]{interpret-preamble}).
+This means that the provided commands are now recognised by the
+interpreter when it has to parse the fields later.
+
+In the case of the \code{M} entry in the example above, the 
+code that's passed to the interpreter is:
+\begin{verbatim}
+{}$\mtx{M}$
+\end{verbatim}
+The transcript (\iext{glg}) file will show the results of the
+conversion:
+\begin{verbatim}
+texparserlib: {}$\mtx{M}$ -> M
+\end{verbatim}
+So the \field{sort} value for this entry is set to \qtt{M}. The font
+change (caused by math-mode and \ics{boldsymbol}) has been 
+ignored. The sort value therefore consists of a single Unicode
+character \hex{4D} (Latin \idx!{uppercase} letter \qtt{M}, decimal value 77).
+
+For the \code{v} entry, the code is:
+\begin{verbatim}
+{}$\vec{v}$
+\end{verbatim}
+The transcript shows:
+\begin{alltt}
+texparserlib: \marg{}\$\ics{vec}\marg{v}\$ -> \usebox\varrow
+\end{alltt}
+So the \field{sort} value for this entry is set to \qtt{\usebox\varrow},
+which consists of two Unicode characters \hex{76}
+(Latin \idx!{lowercase} letter \qtt{v}, decimal value 118) and 
+\hex{20D7} (combining right arrow above, decimal value 8407).
+
+For the \code{set} entry, the code is:
+\begin{verbatim}
+{}$\set{S}$
+\end{verbatim}
+The transcript shows:
+\begin{verbatim}
+texparserlib: {}$\set{S}$ -> S
+\end{verbatim}
+So the \field{sort} value for this entry is set to \qtt{S} (again
+ignoring the font change). This consists of a single Unicode
+character \hex{53} (Latin \idx!{uppercase} letter \qtt{S}, decimal value~83).
+
+For the \code{card} entry, the code is:
+\begin{verbatim}
+{}$\card{S}$
+\end{verbatim}
+The transcript shows:
+\begin{verbatim}
+texparserlib: {}$\card{S}$ -> |S|
+\end{verbatim}
+So the \field{sort} value for this entry is set to \qtt{|S|}
+(the \textbar\ characters from the definition of \csfmt{card} provided
+in \atentry{preamble} have been included, but the
+font change has been discarded). In this case the sort value
+consists of three Unicode characters \hex{7C} (vertical line, decimal
+value 124),
+\hex{53} (Latin \idx!{uppercase} letter \qtt{S}, decimal value 83) and
+\hex{7C} again.
+If \csopt[false]{interpret-preamble} had been used, \csfmt{card}
+wouldn't be recognised and would be discarded leaving just \qtt{S}
+as the sort value.
+
+(Note that if \ics{vert} is used instead of \textbar\ then it would
+be converted into the mathematical operator \hex{2223} and result in
+a different order.)
+
+For the \code{i} entry, the code is:
+\begin{verbatim}
+{}$\imaginary$
+\end{verbatim}
+The transcript shows:
+\begin{verbatim}
+texparserlib: {}$\imaginary$ -> i
+\end{verbatim}
+So the \field{sort} value for this entry is set to \qtt{i}.
+If \csopt[false]{interpret-preamble} had been used, \csfmt{imaginary}
+wouldn't be recognised and would be discarded, leaving an empty sort
+value.
+
+This means that in the case of the default \csopt[sort]{sort-field} with
+\csopt[letter-case]{sort}, these entries will be defined in
+the order: \code{M} ($\mtx{M}$), \code{S} ($\set{S}$),
+\code{i} ($\imaginary$), \code{v} ($\vec{v}$) and
+\code{card} ($\card{S}$).
+In this case, the entries have been sorted according to
+the character codes. If you run \bibgls\ with \commonlongarg{verbose}
+the decimal character codes will be included in the transcript.
+For this example:
+\begin{alltt}
+i -> 'i' [105]
+card -> '|S|' [124 83 124]
+M -> 'M' [77]
+S -> 'S' [83]
+v -> '\usebox\varrow' [118 8407]
+\end{alltt}
+
+The \longarg{group} option (in addition to \commonlongarg{verbose}) 
+will place the letter group in 
+parentheses before the character code list:
+\begin{alltt}
+i -> 'i' (i) [105]
+card -> '|S|' [124 83 124]
+M -> 'M' (M) [77]
+S -> 'S' (S) [83]
+v -> '\usebox\varrow' (v) [118 8407]
+\end{alltt}
+(Note that the \code{card} entry doesn't have a letter
+group since the vertical bar character isn't considered a 
+letter.)
+
+If \csopt[letter-nocase]{sort} is used instead then, after conversion
+by the interpreter, the sort values will all be changed to
+\idx{lowercase}. The order is now: \code{i} ($\imaginary$), 
+\code{M} ($\mtx{M}$), \code{S} ($\set{S}$),
+\code{v} ($\vec{v}$) and \code{card} ($\card{S}$).
+The transcript (with \commonlongarg{verbose}) now shows
+\begin{alltt}
+i -> 'i' [105]
+card -> '|s|' [124 115 124]
+M -> 'm' [109]
+S -> 's' [115]
+v -> '\usebox\varrow' [118 8407]
+\end{alltt}
+With \longarg{group} (in addition to \commonlongarg{verbose}) 
+the letter groups are again included:
+\begin{alltt}
+i -> 'i' (I) [105]
+card -> '|s|' [124 115 124]
+M -> 'm' (M) [109]
+S -> 's' (S) [115]
+v -> '\usebox\varrow' (V) [118 8407]
+\end{alltt}
+Note that the letter groups are \idx{uppercase} not \idx{lowercase}.
+Again the \code{card} entry doesn't have an associated
+letter group.
+
+If a locale-based sort is used, the ordering will follow the
+locale's alphabet rules. For example, with \csopt[en]{sort}
+(English, no region or variant), the order becomes:
+\code{card} ($\card{S}$), \code{i} ($\imaginary$), 
+\code{M} ($\mtx{M}$), \code{S} ($\set{S}$) and
+\code{v} ($\vec{v}$). The transcript (with \commonlongarg{verbose}) 
+shows the collation keys instead:
+\begin{alltt}
+i -> 'i' [0 92 0 0 0 0]
+card -> '|S|' [0 66 0 102 0 66 0 0 0 0]
+M -> 'M' [0 96 0 0 0 0]
+S -> 'S' [0 102 0 0 0 0]
+v -> '\usebox\varrow' [0 105 0 0 0 0]
+\end{alltt}
+Again the addition of the \longarg{group} switch will show
+the letter groups.\footnote{For more information on collation keys see the
+\href{http://docs.oracle.com/javase/8/docs/api/java/text/CollationKey.html}{CollationKey}
+class in Java's API~\cite{collationkey}.}
+
+Suppose I add a new symbol to my \ext{bib} file:
+\begin{codeenv}
+\atentry{symbol}\marg{angstrom,
+  \field{name}=\marg{\ics{AA}},
+  \field{description}=\marg{\cs{AA} ngstr\ics{umlaut}om}
+}
+\end{codeenv}
+and I also use this entry in the document.\footnote{A better method
+is to use \sty{siunitx} instead.} Then with
+\csopt[en]{sort}, the order is: \code{card} ($\card{S}$),
+\code{angstrom} (\AA), \code{i} ($\imaginary$), \code{M}
+($\mtx{M}$), \code{S} ($\set{S}$), and \code{v} ($\vec{v}$).
+The \longarg{group} switch shows that the \code{angstrom} entry
+(\AA) has been placed in the \qt{A} letter group.
+
+However, if I change the locale to \csopt[sv]{sort}, the
+\code{angstrom} entry is moved to the end of the list and the
+\longarg{group} switch shows that it's been placed in the \qt{\AA}
+letter group.
+
+\label{locale.provider}If you are using Java~8, you can set the
+\code{java.locale.providers} property~\cite{javacldr} to use
+the \idx{CLDR} \idx{localeprovider}, which has more extensive
+support for locales than the native \idx{JRE}. For example:
+\begin{verbatim}
+java.locale.providers=CLDR,JRE
+\end{verbatim}
+This should be enabled by default for Java~9. The property
+can either be set in a script that runs \bibgls, for example,
+\begin{verbatim}
+java -Djava.locale.providers=CLDR,JRE,SPI -jar "$jarpath" "$@"
+\end{verbatim}
+(where \verb|$jarpath| is the path to the \file{bib2gls.jar}
+file and \verb|"$@"| is the argument list) or you can set the
+property as the default for all Java applications by adding
+the definition to the \code{JAVA\_TOOL\_OPTIONS} environment
+variable~\cite{javaoptions}.
+For example, in a bash shell:
+\begin{verbatim}
+export JAVA_TOOL_OPTIONS='-Djava.locale.providers=CLDR,JRE,SPI'
+\end{verbatim}
+or in Windows:
+\begin{verbatim}
+set JAVA_TOOL_OPTIONS=-Djava.locale.providers=CLDR,JRE,SPI
+\end{verbatim}
+Note that newer versions of Java support \idx{CLDR} by 
+default, and the \idx{JRE} synonym for the \code{COMPAT} provider is now 
+deprecated.\footnote{https://www.oracle.com/java/technologies/javase/jdk21-suported-locales.html}
+
+\chapter{Command Line Options}
+\label{sec:switches}
+\setsecdepth{1}
+
+The syntax of \bibgls\ is:
+\begin{alltt}
+bib2gls \oargm{options} \meta{filename}
+\end{alltt}
+where \meta{filename} is the name of the \ext{aux} file. (The
+extension may be omitted.) Only one \meta{filename} is permitted.
+Available options are listed below.
+
+If you are using an automated build system that makes it difficult
+to change the command line options and you have at least version
+1.54 of \sty{glossaries-extra} and at least version 4.0 of \bibgls,
+then most (but not all) switches can be specified within the
+argument of 
+\nosecformatdef{BibGlsOptions}
+This command may be placed anywhere within the preamble, but the
+options will always be processed before the resource commands. This
+command may be used multiple times.
+Unlike the resource options, which are local to the resource set, the options 
+described here are global and are applied to all resource sets,
+where applicable.
+For example:
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{replace-quotes=true}
+\gls{GlsXtrLoadResources}
+\gls{BibGlsOptions}\marg{collapse-same-location-range=true}
+\end{codeenv}
+This is equivalent to:
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{replace-quotes=true,collapse-same-location-range=true}
+\gls{GlsXtrLoadResources}
+\end{codeenv}
+The \meta{options} list should be a \keyvallist\ where the \meta{key}
+is the same as the long switch without the preceding
+\code{\longswitch} and any \code{\longswitch no-\meta{option}} should 
+be specified as \code{\meta{option}=false} within
+\gls{BibGlsOptions}.
+For example, to set global options via the command line:
+\begin{verbatim}
+bib2gls --group --no-replace-quotes myDoc
+\end{verbatim}
+Alternatively, the document may contain:
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{group=true,replace-quotes=false}
+\end{codeenv}
+You can omit the value if it is \code{true}, so the above can also
+be written:
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{group,replace-quotes=false}
+\end{codeenv}
+ 
+\begin{important}
+Options that must be set before the \ext{log} and \ext{aux} file are read can
+only be set via the command line switch.
+\end{important}
+
+\section{Common Options}
+\label{sec:commonswitches}
+
+These command line switches are common to \bibgls\ and the
+supplementary command line conversion tools
+
+\commonarg{help}
+
+Display the help message and quit.
+This option cannot be set in \gls{BibGlsOptions}.
+
+\commonarg{version}
+
+Display the version information and quit. As from v2.5, this now
+includes the version number of the \file{texparserlib.jar} library.
+This option cannot be set in \gls{BibGlsOptions}.
+
+\commonarg{verbose}
+
+Switches on the verbose mode. This writes extra information to the
+terminal and transcript file.
+This option cannot be set in \gls{BibGlsOptions}.
+
+\commonarg{no-verbose}
+
+Switches off the verbose mode. This is the default behaviour.
+Some messages are written to the terminal. To completely suppress
+all messages (except errors), switch on the silent mode.
+For additional information messages, switch on the verbose mode.
+This option cannot be set in \gls{BibGlsOptions}.
+
+\commonarg{quiet}
+
+Suppresses all messages except for errors that would normally be
+written to the terminal. Warnings and informational messages are
+written to the transcript file, which can be inspected afterwards.
+This option cannot be set in \gls{BibGlsOptions}.
+
+\commonarg{silent}
+
+Synonym of \commonlongarg{quiet}.
+This option cannot be set in \gls{BibGlsOptions}.
+
+\commonarg{locale}
+
+Specify the preferred \langxml, where \meta{lang} is a valid \idx{IETF} language tag.
+This option requires an appropriate \metafilefmt{bib2gls-}{lang}{.xml}
+resource file otherwise \bibgls\ will fallback on English.
+This also sets the default \gls{document-locale} when the \optfmt{doc}
+keyword (in options such as \csopt[doc]{sort}) is
+used and the document doesn't have any language support.
+Note that the \optfmt{locale} keyword (in options such as \csopt[locale]{sort})
+uses the \gls{Java-locale} and is not governed by this switch.
+This option cannot be set in \gls{BibGlsOptions}.
+
+If a document doesn't have any locale support or has support
+for more than one language then it's best to explicitly set
+the required locale in the appropriate \idx{resourceset} using
+the \csopt{locale} resource option, to specify the default
+\gls{resource-locale}, or set the locale for individual options,
+such as \csopt{sort}.
+
+\commonarg{debug}
+
+Sometimes when things go wrong it can be hard to diagnose the problem
+from the normal messages. If you report an issue, you may be asked
+to switch on debugging mode to help identify a non-reproducible
+error and provide the transcript file.
+
+The \commonlongarg{debug} optional value can be used to adjust the level of
+debugging information.  If \meta{n} is present, it must be a non-negative
+integer indicating the debugging mode. If omitted, 1 is assumed. This option
+also switches on the verbose mode. A value of 0 is equivalent to
+\commonlongarg{no-debug}.  This option cannot be set in \gls{BibGlsOptions}.
+
+The value of \meta{n} determines how much extra information is
+provided. If \meta{n} is greater than 0 then all \bibgls\ debugging
+information is written. The amount of debugging information provided
+by the \texparserlib\ is determined by a bitwise operation on
+\meta{n}. For example, if \meta{n} is 1 then I/O information is
+included. If \meta{n} is 2 then information is included when an
+object is popped off a stack. If \meta{n} is 3 then both I/O and
+popped information is provided.
+
+Note that messages such as \qt{Can't find language resource} or
+about a failed \idx{kpsewhich} call are informational and don't
+necessarily mean an error has occurred. Error messages will always
+be written to the transcript regardless of the debug or verbose
+setting. An error message will start with \qt{Error:~} and a warning
+message will start with \qt{Warning:~}. Unknown commands will throw
+an exception with a stack trace in debug mode.
+
+\commonarg{debug-mode}
+
+This option is an alternative to \commonlongarg{debug} where the value
+of \meta{n} needs to be calculated. 
+This option cannot be set in \gls{BibGlsOptions}.
+Debugging mode requires a
+transcript file, which is automatically created with \bibgls, but is
+optional for the converter tools (see \sectionref{sec:tex2bib}). The
+\meta{setting} is required and should be a comma-separated list of
+any of the following keywords.
+
+\begin{itemize}
+\item\optfmt{all}: enable all debugging information
+(likely to result in a very large transcript file).
+
+\item\optfmt{catcode}: \texparserlib\ category code changes.
+
+\item\optfmt{cs}: \texparserlib\ command definitions.
+
+\item\optfmt{decl}: information about declarations.
+
+\item\optfmt{expansion}: \texparserlib\ expansions 
+(may result in a large transcript file).
+
+\item\optfmt{expansion-list}: \texparserlib\ stack expansions 
+(may result in a large transcript file).
+
+\item\optfmt{expansion-once}: \texparserlib\ one-level expansions 
+(may result in a large transcript file).
+
+\item\optfmt{expansion-once-list}: \texparserlib\ one-level list expansions 
+(may result in a large transcript file).
+
+\item\optfmt{io}: I/O information, such as opening or closing files
+and fetching tokens.
+
+\item\optfmt{popped}: information about objects popped from stacks.
+
+\item\optfmt{process}: \texparserlib\ macro process 
+(may result in a large transcript file).
+
+\item\optfmt{process-generic-cs}: \texparserlib\ generic command process.
+
+\item\optfmt{process-stack}: \texparserlib\ stack process 
+(may result in a large transcript file).
+
+\item\optfmt{process-stack-list}: \texparserlib\ stack process with
+list detail (may result in a large transcript file).
+
+\item\optfmt{read}: \texparserlib\ file codepoint read
+(likely to result in a very large transcript file).
+
+\item\optfmt{settings}: \texparserlib\ settings information.
+
+\item\optfmt{sty-data}: data associated with packages used to store
+information that may not exactly correspond to the way the
+information is stored in \LaTeX. In the case of \bibgls, this will
+typically just be data read from recognised \iext{aux} commands.
+
+\end{itemize}
+
+For example:
+\begin{codeenv}
+bib2gls \commonlongarg{debug-mode} catcode,sty-data \meta{filename}
+\end{codeenv}
+
+\commonarg{no-debug}
+
+Switches off the debugging mode.
+This option cannot be set in \gls{BibGlsOptions}.
+
+\section{File Options}
+
+\argsection{dir}
+
+This option cannot be set in \gls{BibGlsOptions}.
+
+By default \bibgls\ assumes that the output files should be written
+in the current working directory. The input \iext{bib} files are assumed to be
+either in the current working directory or on \TeX's path (in which
+case \idx{kpsewhich} will be used to find them).
+
+If your \iext{aux} file isn't in the current working directory (for
+example, you have run \TeX\ with \shortargfmt{output-directory})
+then you need to take care how you invoke \bibgls.
+
+Suppose I have a file called \filefmt{test-entries.bib} that
+contains my entry definitions and a document called
+\filefmt{mydoc.tex} that selects the \ext{bib} file using:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{\csopt[test-entries]{src}}
+\end{codeenv}
+(\filefmt{test-entries.bib} is in the same directory as
+\filefmt{mydoc.tex}).
+If I compile this document using
+\begin{verbatim}
+pdflatex -output-directory tmp mydoc
+\end{verbatim}
+then the auxiliary file \filefmt{mydoc.aux} will be written to the
+\filefmt{tmp} sub-directory. The resource information is listed in
+the \ext{aux} file as
+\begin{codeenv}
+\gls{glsxtr at resource}\marg{\csopt[test-entries]{src}}\marg{mydoc}
+\end{codeenv}
+If I run \bibgls\ from the \filefmt{tmp} directory, then it won't
+be able to find the \filefmt{test-entries.bib} file (since it's in
+the parent directory).
+
+If I run \bibgls\ from the same directory as \filefmt{mydoc.tex}
+using
+\begin{verbatim}
+bib2gls tmp/mydoc
+\end{verbatim}
+then the \ext{aux} file is found and the transcript file is
+\filefmt{tmp/mydoc.glg} (since the default path name is the same as the
+\ext{aux} file but with the extension changed to \iext{glg}) but the
+output file \filefmt{mydoc.glstex} will be written to the current
+directory.
+
+This works fine from \TeX's point of view as it can find the
+\iext{glstex} file, but it may be that you'd rather the \ext{glstex}
+file was tidied away into the \filefmt{tmp} directory along with all
+the other files.  In this case you need to invoke \bibgls\ with the
+\longargorshort{dir} option:
+\begin{verbatim}
+bib2gls -d tmp mydoc
+\end{verbatim}
+
+\argsection{log-file}
+
+Sets the name of the \bibgls\ transcript file. By default, the name is the
+same as the \iext{aux} file but with a \iext{glg} extension. Note that
+if you use \bibgls\ in combination with \idx{xindy} or
+\idx{makeindex}, you will need to change the transcript file name to
+prevent conflict.
+This option cannot be set in \gls{BibGlsOptions}.
+
+The transcript file encoding is governed by
+\longarg{log-encoding}.
+
+\argsection{tex-encoding}
+
+This option cannot be set in \gls{BibGlsOptions}.
+
+In general, it's best to have all your files (\ext{aux}, \ext{bib}
+and \iext{glstex}) in the same \igls{encoding} that matches your
+default encoding (see \sectionref{sec:defencoding}). However, if
+your \iext{aux} and \iext{glstex} files have a different encoding to
+your default, you can use \longarg{tex-encoding} to specify the
+\TeX\ encoding. If omitted the default encoding is used. See
+\sectionref{sec:defencoding}.
+
+Note that \bibgls\ will try to detect the document encoding from the
+\ext{aux} file  to ensure that the \iext{glstex} files match it.
+However, at that point, it's too late to establish the encoding of
+the \ext{aux} file, which has already been opened. So if the
+\ext{aux} file encoding doesn't match the default encoding, you can
+specify the correct encoding to use with \longarg{tex-encoding}.
+
+If you are using \sty{fontspec}, \bibgls\ can detect this
+from the \ext{log} file instead and will assume UTF-8.
+
+\argsection{log-encoding}
+
+The \igls{encoding} of the \iext{log} file. If omitted, the default
+encoding will be used.  See \sectionref{sec:defencoding}.  (Note
+that the \ext{log} file may not have the same encoding as the
+\ext{tex} file~\cite{tex.sx.2013}.)
+This option cannot be set in \gls{BibGlsOptions}.
+
+\argsection{default-encoding}
+
+The default \igls{encoding} used by \bibgls\ to read and write files is
+governed by the \idx{JVM}. This typically matches your operating
+system's default encoding. If this is incorrect, you can either
+globally change the encoding for the \idx{JVM}, which will affect
+all Java applications installed on your device, or you can use 
+\longarg{default-encoding} just to set the default for \bibgls.
+See \sectionref{sec:defencoding}.
+This option cannot be set in \gls{BibGlsOptions}.
+
+\argsection{date-in-header}
+
+The comment header block at the start of the \iext{glstex} files
+will include the file modification date in the first line (after the
+version information). This setting can interfere with
+the document build process or version control if you are testing for
+file differences rather than file modification dates when only the
+timestamp changes.
+
+\argsection{no-date-in-header}
+
+The comment header block at the start of the \iext{glstex} files
+won't include the file modification date (default).
+If used in \gls{BibGlsOptions}, this option should be specified as
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{date-in-header=false}
+\end{codeenv}
+
+\section{Interpreter Options}
+
+\argsection{break-space}
+
+The interpreter treats a tilde character \idx{nbspchar} as a normal
+space. Similarly \ics{nobreakspace} just produces a space.
+
+\argsection{no-break-space}
+
+The interpreter treats a tilde character \idx{nbspchar} as a non-breakable
+space (default). Similarly the interpreter will define
+\ics{nobreakspace} to produce a non-breakable space character (\hex{00A0}).
+If used in \gls{BibGlsOptions}, this option should be specified as
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{break-space=false}
+\end{codeenv}
+
+\argsection{custom-packages}
+
+Instruct the interpreter to parse the package files identified in
+\meta{list}. The package files need to be quite simple. When this
+switch is used, the interpreter can recognise \ics{ProvidesPackage},
+\ics{DeclareOption} (and \ics{DeclareOption*}),
+\ics{ProcessOptions}, \ics{PackageError} and \ics{RequirePackage},
+but it can't deal with complicated code.  In the case of
+\ics{RequirePackage}, support will also be governed by
+\longarg{custom-packages}.  This option has a cumulative action.
+
+Multiple instances of this switch can occur on the command line.
+If used in \gls{BibGlsOptions}, the nature of the \keyvallist\
+parser means that multiple instances within the same option list
+will override each other. Instead, you will need a comma-separated
+list as the argument.
+For example, from the command line:
+\begin{verbatim}
+bib2gls --custom-packages 'pkg1,pkg2,pkg3' myDoc
+\end{verbatim}
+This is equivalent to:
+\begin{verbatim}
+bib2gls --custom-packages pkg1 --custom-packages pkg2 --custom-packages pkg3 myDoc
+\end{verbatim}
+Alternatively, within the document:
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{custom-packages=\marg{pkg1,pkg2,pkg3}}
+\end{codeenv}
+
+\argsection{datatool-sort-markers}
+
+The \sty{datatool-base} package provides some marker commands
+designed for use with \ics{DTLsortwordlist}: \ics{datatoolasciistart},
+\ics{datatoolpersoncomma}, \ics{datatoolplacecomma},
+\ics{datatoolsubjectcomma}, \ics{datatoolparenstart},
+\ics{datatoolctrlboundary}, \ics{datatoolasciiend}, and
+\ics{datatoolparen}. These commands by default will be defined by the
+interpreter to match their normal \sty{datatool-base} behaviour  (see the
+\sty{datatool} documentation for further details). Additionally,
+\ics{dtltexorsort} will be redefined to expand to its \emph{first} argument.
+
+Note that you don't need to request the \sty{datatool-base} package,
+unless you require support for other commands provided by that
+package.
+
+The \longarg{datatool-sort-markers} switch will instead define these
+commands to match their localised definitions within
+\cs{DTLsortwordlist}. This means that \ics{dtltexorsort} will be
+defined to expand to its \emph{second} argument and the marker
+commands will expand to content that includes special control codes.
+Note that language-sensitive sort methods typically ignore control
+codes, so these would either need to be used with a character-code
+comparator or a custom sort method would need to be used.
+For example:
+\begin{codeenv}
+\csopt[\ics{glsxtrcontrolIrules}
+ ;\cs{glshex} 0
+ ;\cs{glsxtrspacerules}
+ ;\cs{glsxtrnonprintablerules}
+ ;\cs{glsxtrcombiningdiacriticrules}
+ ,\cs{glsxtrhyphenrules}
+ <\ics{glsxtrcontrolIIrules}
+ <\cs{glsxtrgeneralpuncrules}
+ <\cs{glsxtrdigitrules}
+ <\cs{glsxtrfractionrules}
+ <\ics{glsxtrGeneralLatinIrules}
+ <\cs{glshex} 7F
+]{sort-rule}
+\end{codeenv}
+
+Instead of \ics{dtltexorsort} (which varies according to this setting), you may
+prefer to use \ics{IfTeXParserLib} or \ics{IfNotBibGls}.
+
+\argsection{no-datatool-sort-markers}
+
+Define the \sty{datatool-base} marker commands 
+(including \cs{dtltexorsort}) to match their normal definition.
+
+\argsection{ignore-packages}
+
+This option is cumulative. When the document \iext{log} file is
+parsed for known packages, \bibgls\ will skip the check for any
+listed in \meta{list}. Note that this option simply instructs
+\bibgls\ to ignore the package information in the log file. Any packages
+that are identified with \longarg{packages} will be passed to the
+interpreter if support is available, even if the package is also
+listed in \longarg{ignore-packages}.  Note that
+unknown packages can't be included in the ignored \meta{list}.
+This option cannot be set in \gls{BibGlsOptions}.
+
+\argsection{interpret}
+
+Switch on the interpreter mode (default). See \sectionref{sec:texparserlib}
+for more details.
+
+\argsection{no-interpret}
+
+Switch off the interpreter mode. See \sectionref{sec:texparserlib}
+for more details about the interpreter. 
+If used in \gls{BibGlsOptions}, this option should be specified as
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{interpret=false}
+\end{codeenv}
+
+\argsection{list-known-packages}
+
+This option will list all the packages supported by the \texparserlib\
+and will then exit \bibgls. 
+This option cannot be set in \gls{BibGlsOptions}.
+
+The results are divided into two
+sections: those packages that are searched for in the \iext{log}
+file and those packages that aren't searched for in the \iext{log}
+file but have some support available. Some of the support is very
+limited. Package options aren't detected.
+The transcript file is always searched for \isty{glossaries-extra}
+to ensure that the version is new enough to support \bibgls. 
+
+Packages that fall into the first category are:
+\isty{amsmath}, \isty{amssymb}, \isty{bpchem}, \isty{fontenc},
+\isty{fontspec}, \isty{fourier}, 
+\isty{hyperref}, \isty{lipsum}, \isty{MnSymbol}, \isty{mhchem}, \isty{natbib},
+\isty{pifont}, \isty{siunitx} (limited), \isty{stix},
+\isty{textcase}, \isty{textcomp}, \isty{tipa}, \isty{upgreek} and
+\isty{wasysym}.  (You can omit checking for specific packages with
+\longarg{ignore-packages}.) These are packages that provide commands
+that might be needed within entry fields. The check for
+\isty{fontspec} is to simply determine whether or not UTF-8
+characters are allowed in labels (for \csopt{labelify} and 
+\csopt{labelify-list}). (Now that there is better support for UTF-8
+with \pdfLaTeX, UTF-8 characters will be allowed in labels if the
+detected versions of \isty{glossaries} and \isty{glossaries-extra}
+are new enough, but note that you will also need a relatively new
+\LaTeX\ kernel as well.)
+
+Packages that fall into the second category are:
+\isty{booktabs}, \isty{color}, \isty{datatool-base} (very limited),
+\isty{datatool} (very limited), \isty{etoolbox} (very limited), \isty{graphics},
+\isty{graphicx}, \isty{ifthen}, \isty{jmlrutils},
+\isty{mfirstuc-english}, \isty{probsoln}, \isty{shortvrb},
+and \isty{xspace}. These are less likely to be needed within fields
+and so aren't checked for by default. If they are needed then you
+can instruct \bibgls\ to support them with \longarg{packages}.
+
+Note that \sty{mfirstuc} is always automatically loaded, but
+\sty{mfirstuc-english} is not implemented unless explicitly
+requested with \code{\longarg{packages} mfirstuc-english}.
+
+If you're wondering about the selection, the \file{texparserlib.jar}
+library was originally written for another application that required
+support for some of them.
+
+\argsection{packages}
+
+Instruct the interpreter to assume the packages listed 
+in \meta{list} have been used by the document.
+This option has a cumulative action so \code{\longarg{packages}
+"wasysym,pifont"} is the same as \code{\longarg{packages} wasysym 
+\longarg{packages} pifont}.  
+
+This option may also be used in \gls{BibGlsOptions} but, as with 
+\longarg{custom-packages}, multiple instances of the \code{packages}
+key in the same option list will override each other.
+
+Note that there's only a limited number of packages supported by the
+\texparserlib. This option is provided for cases where you're
+using a command from a package that the interpreter doesn't support
+but it happens to have the same name and meaning as a command from
+a package that the interpreter does support. You can also use it to
+provide support for known packages that aren't checked for when the
+\ext{log} file is parsed. If you want \bibgls\ to parse an
+unsupported package use \longarg{custom-packages}.
+
+\argsection{support-unicode-script}
+
+Text superscript (\ics{textsuperscript}) and subscript
+(\ics{textsubscript}) will use Unicode super/subscript characters
+if available (default). For example,
+\begin{codeenv}
+\cs{textsuperscript}\marg{(2)}
+\end{codeenv}
+will be converted to \code{\textsuperscript{(2)}}, which consists
+of: \hex{207D} (superscript left parenthesis)
+\hex{00B2} (superscript two) \hex{207E} (superscript right
+parenthesis). If the entire contents of the argument can't be
+represented by Unicode characters, the interpreter uses \verb|<sup>|
+and \verb|<sub>| markup, which is then stripped by \bibgls. For
+example,
+\begin{codeenv}
+\cs{textsuperscript}\marg{(2,3)}
+\end{codeenv}
+will be converted to
+\begin{verbatim}
+<sup>(2,3)</sup>
+\end{verbatim}
+(since there's no superscript comma). The markup is stripped leaving
+just \code{(2,3)}.
+
+Superscripts and subscripts in maths mode always use markup
+regardless of this setting. Some supported packages that use
+\idx{spchar} or \idx{sbchar} as shortcuts within an encapsulating
+command may internally use the same code as \cs{textsuperscript} and
+\cs{textsubscript}, in which case they will be sensitive to this
+setting.
+
+\argsection{no-support-unicode-script}
+
+Text superscript (\cs{textsuperscript}) and subscript
+(\cs{textsubscript}) won't use Unicode super/subscript characters.
+Note that if other commands are provided that expand to Unicode
+superscript or subscript characters, then they won't be affected by
+this setting. For example, if \csfmt{superiortwo} is defined as
+\begin{codeenv}
+\cs{providecommand}\marg{\cmd{superiortwo}}\marg{\charhex{B2}}
+\end{codeenv}
+then it will be interpreted as \hex{00B2} (superscript two) even if
+this setting is on.
+
+If used in \gls{BibGlsOptions}, this option should be specified as
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{support-unicode-script=false}
+\end{codeenv}
+
+\argsection{obey-aux-catcode}
+
+By default, the \ext{aux} parser ignores category code changing
+commands. This option will instruct the parser to implement the
+category code, but note that it can only do this for known commands
+that the parser is able to implement.
+This option cannot be set in \gls{BibGlsOptions}.
+
+\argsection{no-obey-aux-catcode}
+
+Instructs the \ext{aux} parser to ignore category code changing
+commands. (Default.)
+This option cannot be set in \gls{BibGlsOptions}.
+
+\section{Record Options}
+
+\argsection{cite-as-record}
+
+Treat instances of \code{\ics{citation}\margm{label}} found in the 
+\ext{aux} file as though it was actually an \idx{ignoredrecord}:
+\begin{codeenv}
+\gls{glsxtr at record}\margm{label}\marg{}\marg{\counter{page}}\marg{\encap{glsignore}}\marg{}
+\end{codeenv}
+Note that \code{\cs{citation}\marg{*}} will always be skipped. Use
+\csopt[all]{selection} to select all entries.
+This switch is most useful in conjunction with
+\atentrypageref{bibtexentry}.
+
+\argsection{no-cite-as-record}
+
+Don't check for instances of \ics{citation} in the \ext{aux} file
+(default).
+If used in \gls{BibGlsOptions}, this option should be specified as
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{cite-as-record=false}
+\end{codeenv}
+
+\argsection{collapse-same-location-range}
+
+Collapse any \idx{explicit-range} into a normal \gls{record} if
+the start and end \glspl{location} are the same (default).
+This record will be treated as a normal \gls{location} that can be
+merged with neighbouring \glspl{location}, regardless of
+\csopt{merge-ranges}.
+
+\argsection{no-collapse-same-location-range}
+
+Don't collapse any \idx{explicit-range} into a normal
+\gls{record} if the start and end \glspl{location} are the same.
+The \idx{explicit-range} will only be able to merge with
+neighbouring \glspl{location} if \csopt[true]{merge-ranges}.
+If used in \gls{BibGlsOptions}, this option should be specified as
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{collapse-same-location-range=false}
+\end{codeenv}
+
+\argsection{map-format}
+
+This sets up the rule of precedence for partial \gls{location}
+matches (see \sectionref{sec:locationopts}). The argument may be
+a comma-separated list of \meta{map}\code{:}\meta{value} pairs.
+Alternatively, you can have multiple instances of 
+\longarg{map-format} \meta{map}\dcolon\meta{value} which have a
+cumulative effect on the command line. You can also use
+\code{map-format} as an option within \gls{BibGlsOptions}, but
+multiple instances of this key in the same option list will override
+each other.
+
+For example, 
+\begin{verbatim}
+bib2gls --map-format "emph:hyperbf" mydoc
+\end{verbatim}
+This essentially means that if there's a \gls{record} conflict
+involving \encap{emph}, try replacing \encap{emph} with
+\encap{hyperbf} and see if that resolves the conflict.
+
+Note that if the conflict includes a \idx{range} formation, the
+\idx{range} takes precedence.
+The mapping tests are applied as the records are
+read. For example, suppose the records are listed in the \ext{aux}
+file as:
+\begin{codeenv}
+\gls{glsxtr at record}\marg{gls.sample}\marg{}\marg{\counter{page}}\marg{\encap{emph}}\marg{3}
+\gls{glsxtr at record}\marg{gls.sample}\marg{}\marg{\counter{page}}\marg{\encap{hypersf}}\marg{3}
+\gls{glsxtr at record}\marg{gls.sample}\marg{}\marg{\counter{page}}\marg{\encap{hyperbf}}\marg{3}
+\end{codeenv}
+and \bibgls\ is invoked with
+\begin{verbatim}
+bib2gls --map-format "emph:hyperbf,hypersf:hyperit" mydoc
+\end{verbatim}
+or
+\begin{verbatim}
+bib2gls --map-format emph:hyperbf --map-format hypersf:hyperit mydoc
+\end{verbatim}
+then \bibgls\ will process these \glspl{record} as follows:
+\begin{enumerate}
+\item Accept the first \gls{record} (\encap{emph}) since there's
+currently no conflict. (This is the first \gls{record} for page~3 for the
+entry given by \code{gls.sample}.)
+\item The second \gls{record} (\encap{hypersf}) conflicts 
+with the existing \gls{record} (\encap{emph}). Neither has
+the format \encap{glsnumberformat} or \encap{glsignore} so \bibgls\ consults
+the mappings provided by \longarg{map-format}.
+\begin{itemize}
+\item The \encap{hypersf} format (from the new record) is mapped to
+\encap{hyperit},
+so \bibgls\ checks if the existing \gls{record}
+has this format. In this case it doesn't (the format is
+\code{emph}). So \bibgls\ moves on to the next test:
+
+\item The \encap{emph} format (from the existing record) is mapped
+to \encap{hyperbf},
+so \bibgls\ checks if the new record has this format.
+In this case it doesn't (the format is \encap{hypersf}).
+
+Since the provided mappings haven't resolved this conflict,
+the new record is discarded with a warning. Note that there's 
+no look ahead to the next record. (There may be other 
+records for other entries also used on page~3 interspersed between these records.)
+\end{itemize}
+\item The third \gls{record} (\encap{hyperbf}) conflicts 
+with the existing \gls{record} (\encap{emph}). Neither has
+the format \encap{glsnumberformat} or \encap{glsignore} so \bibgls\ again consults
+the mappings provided by \longarg{map-format}.
+\begin{itemize}
+\item  The new \gls{record}['s] \encap{hyperbf} format has no mapping provided,
+so \bibgls\ moves on to the next test:
+
+\item The existing \gls{record}['s] \encap{emph} format has a mapping
+provided (\encap{hyperbf}). This matches the new \gls{record}['s] format,
+so the new \gls{record} takes precedence.
+
+This means that the \gls{locationlist} ends up with the \encap{hyperbf}
+location for page~3.
+\end{itemize}
+\end{enumerate}
+
+If, on the other hand, the mappings are given as
+\begin{verbatim}
+--map-format "emph:hyperit,hypersf:hyperit,hyperbf:hyperit"
+\end{verbatim}
+then all the three conflicting \glspl{record} (\encap{emph},
+\encap{hypersf} and \encap{hyperbf}) will end up being replaced
+by a single \gls{record} with \encap{hyperit} as the format.
+
+Multiple conflicts will typically be rare as there's usually little
+reason for more than two or three different \gls{location} formats within
+the same list. (For example, \encap{glsnumberformat} as the default
+and \encap{hyperbf} or \encap{hyperit} for a
+\gls{principallocation}.)
+
+\argsection{merge-nameref-on}
+
+The \styopt[nameref]{record} package option (introduced to 
+\sty{glossaries-extra} version 1.37) provides extra information
+in the record when indexing, obtained from \ics{@currentlabelname},
+\ics{@currentHref} and \ics{theHentrycounter}. Instead of writing the record as:
+\begin{codeenv}
+\format{glsxtr at record}
+\end{codeenv}
+the record is written as:
+\nosecdef{glsxtr at record@nameref}
+If \isty{hyperref} hasn't been loaded \meta{title} and \meta{href}
+will always be empty. The most reliable target is given by
+\code{\meta{counter}.\meta{hcounter}}, where \meta{counter} is the
+associated counter name and \meta{hcounter} is
+obtained from \cs{theHentrycounter}, which is set to the hyper
+target command \csfmt{theH}\meta{counter} during indexing. Since
+this information can't be included in the \gls{location} when indexing
+with \idx!{makeindex} or \idx!{xindy}, the base \sty{glossaries}
+package tries to obtain a prefix from which the target name can be
+formed. This doesn't work if \csfmt{theH}\meta{counter} can't be
+formed from \meta{prefix}\csfmt{the}\meta{counter}, which results in
+broken links. Since \bibgls\ doesn't have the same restrictions, the
+actual target can be included in the record. You can then customize
+the document to choose whether to use \meta{href} (to link to the
+nearest anchor) or \meta{hcounter} to link to the place where the
+indexing counter was incremented.
+
+The \code{nameref} record will be written to the \igls{locationlist} using:
+\nosecdef{glsxtrdisplaylocnameref}
+The \meta{file} part will be empty for normal internal \glspl{location},
+and will be set to the corresponding file name for 
+\glsdisp{supplementalrecord}{supplemental locations}.
+
+With \sty{hyperref}, \meta{title} is initially empty. The \meta{href} will be
+\code{Doc-Start} at the start of the document and is updated
+globally on every instance of \ics{refstepcounter}. The 
+\meta{title} is updated locally by certain commands, such as 
+\ics{section} or \ics{caption}. This means that the \meta{href}
+may not always correspond to the \meta{title}, so using
+the \styopt[nameref]{record} package option can have unpredictable
+results if the \meta{title} is used as link text with \meta{href} as
+the target. 
+
+For compactness, \bibgls\ tries to merge duplicate or near
+duplicate records. There are four possible rules that it will
+use for \code{nameref} records, identified by \meta{rule} in the
+\longarg{merge-nameref-on} switch:
+\begin{itemize}
+\item \optfmt{location}: merge records that match on the
+\meta{prefix}, \meta{counter} and \meta{location} parts (as regular
+records);
+\item \optfmt{title}: merge records that match on the \meta{counter}
+and \meta{title} parts;
+\item \optfmt{href}: merge records that match on the \meta{counter}
+and \meta{href} parts;
+\item \optfmt{hcounter}: merge records that match on the \meta{counter}
+and \meta{hcounter} parts.
+\end{itemize}
+The default \meta{rule} is \optfmt{hcounter}. Note that for all
+rules the \meta{counter} must match. See the \qt{Nameref Record}
+section of the \sty{glossaries-extra} user manual for further
+details.
+
+\argsection{merge-wrglossary-records}
+
+For use with the \styopt{indexcounter} package option
+(\styfmt{glossaries-extra} v1.29+), this switch merges an entry's
+\counter{wrglossary} records for the same page \gls{location}. This is the
+default setting. (See also \csopt{save-index-counter}.)
+
+\argsection{no-merge-wrglossary-records}
+
+Don't merge an entry's \counter{wrglossary} records. This means that you
+may end up with duplicate page numbers in the entry's \gls{locationlist},
+but they will link to different parts of the page.
+If used in \gls{BibGlsOptions}, this option should be specified as
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{merge-wrglossary-records=false}
+\end{codeenv}
+
+\argsection{record-count}
+
+Switch on record counting. This will ensure that when each entry
+is written to the \iext{glstex} file, \bibgls\ will additionally
+set the following fields
+\begin{itemize}
+\item \field{recordcount}: set to the total
+number of records found for the entry;
+\item \field{recordcount.counter}: set to the total
+number of records found for the entry for the given counter.
+\end{itemize}
+These fields can then be used with the \gls{rgls}-like commands.
+
+This option is governed by the \longarg{record-count-rule}, which
+can be used to exclude certain types of records from the count. The
+default rule is \optfmt{all}, which includes all
+\idxpl{ignoredrecord}.
+
+The default behaviour of
+\nosecdef{rgls}
+is to check the \field{recordcount} field against the \catattr{recordcount}
+attribute value. This attribute can be set with
+\nosecdef{GlsXtrSetRecordCountAttribute}
+where \meta{category list} is a comma-separated list
+of category labels and \meta{value} is a positive integer.
+If the value of the \field{recordcount} field is greater than
+\meta{value} then \gls{rgls} behaves like \ics{gls}, otherwise
+it does
+\nosecdef{rglsformat}
+instead.
+If the use of \gls{rglsformat} is triggered in this way,
+then \gls{rgls} writes a \gls{record} to the \iext{aux} file
+with the \glsopt{format} set to \encap{glstriggerrecordformat}.
+This ensures that the \gls{recordcount} is correct on the next run,
+but the \gls{record} isn't added to the \gls{locationlist} as
+\bibgls\ recognises it as a special \igls{ignoredrecord}.
+Note that the entry will still appear in the usual glossary unless
+you assign it to a different one with \csopt{trigger-type}.
+
+If the \catattr{recordcount} attribute hasn't been set
+\gls{rgls} behaves like \ics{gls}. (That is, \gls{rgls}
+uses the same internal command used by \ics{gls}.) You can use
+\ics{glsxtrenablerecordcount} to redefine \ics{gls}
+to \gls{rgls}, so that you can continue to use \ics{gls}
+without having to switch command name.
+
+For example:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{
+ \csopt[abbrevs]{src},\comment{entries defined in abbrevs.bib}
+ \csopt[ignored]{trigger-type},
+ \csopt[abbreviation]{category}
+}
+\cs{glsxtrenablerecordcount}
+\gls{GlsXtrSetRecordCountAttribute}\marg{abbreviation}\marg{1}
+\end{codeenv}
+See the \sty{glossaries-extra} user manual~\cite{glossaries-extra} 
+for further details.
+
+\begin{important}
+Take care not to confuse the \field{recordcount} field with the \field{indexed}
+field. The \field{indexed} field keeps a running total of the number of times an
+entry has been recorded \emph{so far}, and is updated every time the entry is
+indexed during the current \LaTeX\ run. The \field{recordcount} field stores the total number of records
+obtained by \bibgls\ from the \ext{aux} file.
+\end{important}
+
+\argsection{no-record-count}
+
+Switch off record counting. (Default.)
+If used in \gls{BibGlsOptions}, this option should be specified as
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{record-count=false}
+\end{codeenv}
+
+\argsection{record-count-unit}
+
+Automatically implements \longarg{record-count} and additionally
+sets the \field{recordcount.counter.location} fields.
+These fields can then be used with the \gls{rgls}-like
+commands. This option is governed by \longarg{record-count-rule},
+to determine which records should be counted.
+
+\argsection{no-record-count-unit}
+
+Switches off unit record counting. (Default.)
+Note that you need \longarg{no-record-count} to completely
+switch off record counting.
+If used in \gls{BibGlsOptions}, this option should be specified as
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{record-count-unit=false}
+\end{codeenv}
+
+\argsection{record-count-rule}
+
+Automatically implements \longarg{record-count} and sets the rule
+that determines which records should contribute to the count.
+The \meta{rule} may be one of:
+\begin{itemize}
+\item \code{all} or \code{a}: these keywords indicate that all
+records should be included in the count (default).
+\item \code{non-ignored} or \code{n}: these keywords indicate that 
+\idxpl{ignoredrecord} should be excluded in the count.
+\item \code{c/\meta{regex}/}: only records where the associated
+counter name matches the regular expression \meta{regex} should be
+included in the count.
+\item \code{f/\meta{regex}/}: only records where the associated
+format matches the regular expression \meta{regex} should be
+included in the count.
+\item \code{f/\meta{format-regex}/c/\meta{counter-regex}/\meta{op}}: 
+this combines the format and counter name match. The trailing
+\meta{op} is optional. If present, it should be one of the keywords: 
+\code{and} (boolean AND) or \code{or} (boolean OR). If omitted, 
+\code{and} is assumed.
+\end{itemize}
+
+For example:
+\begin{verbatim}
+bib2gls --record-count-rule 'f/.*(bf|it)/c/(sub)?section/or' myDoc
+\end{verbatim}
+This will only count records where the format matches the regular
+expression \code{.*(bf|it)} (for example, \code{hyperbf} or
+\code{hyperit}) or the counter name matches \code{section} or
+\code{subsection} (but not \code{subsubsection}, since the
+expressions are \gls{anchored}).
+
+This syntax doesn't permit the use of the sequence \code{/c/}
+appearing in the regular expressions, but both the format and
+counter name are either control sequence names or are a substring of
+a control sequence name, so they should typically just be
+alphabetical strings.
+\argsection{retain-formats}
+
+It's possible that you may not want to lose certain \gls{location}
+formats, even if it means having duplicate \glspl{location}. For example,
+if you want to move a \gls{principallocation} using
+\csopt[remove]{save-principal-locations}. In which case, use this
+switch with a comma-separated list of formats that should be
+retained. Note that exact duplicates will still be merged.
+This switch has a cumulative effect.
+
+Take care if you use this switch and you have an \idx{explicit-range} with
+coincident start and end locations. If the
+\glsdisp{principallocation}{principal record} is between
+the start and end format markers then the \idx{range} can't collapse
+to an ordinary \gls{record}. (You may need to use
+\csopt[true]{merge-ranges}.)
+
+\argsection{no-retain-formats}
+
+Normal \gls{location} merging rules apply (default).
+If used in \gls{BibGlsOptions}, this option should be specified as
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{retain-formats=false}
+\end{codeenv}
+
+\section{Bib File Options}
+
+\argsection{warn-non-bib-fields}
+
+If any internal fields are found in the \ext{bib} file, this setting
+will issue a warning as their use can cause unexpected results.
+The fields checked for are those listed in Tables~\ref{tab:internalfields}
+and \ref{tab:baseinternalfields} with a few exceptions, notably
+\field{type} and \field{sort}. Ideally you shouldn't need to use
+\field{sort} as there should be an appropriate fallback set up to
+use if \field{sort} isn't set, such as the label for symbols or the
+name for terms or the short form for abbreviations (see \sectionref{sec:fallbacks}).
+
+This is the default setting and was added as some users were
+confused over which fields could be used in the \ext{bib} file.
+The use of these fields can break \bibgls's normal behaviour and
+cause unexpected results.
+
+The check is performed before field aliasing, so it's possible to
+alias a field to an internal field, such as \field{group}, without
+triggering this warning. If you do this you need to make sure you
+have taken appropriate precautions to avoid unexpected results.
+
+\argsection{no-warn-non-bib-fields}
+
+Switches off the check for non-bib fields. If you use this option
+you need to make sure you have taken appropriate precautions to
+avoid unexpected results.
+If used in \gls{BibGlsOptions}, this option should be specified as
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{warn-non-bib-fields=false}
+\end{codeenv}
+
+\argsection{warn-unknown-entry-types}
+
+If any unknown \glspl{entrytype} are found in the \ext{bib} file, \bibgls\
+will issue a warning with this option set (default).
+
+\argsection{no-warn-unknown-entry-types}
+
+This option will suppress the warning if an unknown \glspl{entrytype} are
+found in the \ext{bib} file.
+If used in \gls{BibGlsOptions}, this option should be specified as
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{warn-unknown-entry-types=false}
+\end{codeenv}
+
+\section{Field Options}
+
+\argsection{group}
+
+The \styfmt{glossaries-extra} \styopt{record} package option
+automatically creates a new internal field called \field{group}. If the
+\longarg{group} switch is used with the default \csopt[auto]{group}
+option then, when sorting, \bibgls\ will try
+to determine the \idx{group} for each entry and assign it to the
+\field{group} field.  (Some \csopt{sort} options ignore this
+setting.) This value will be picked up by \ics{printunsrtglossary}
+if group headings are required (for example with the
+\glostyle{indexgroup} style) or if group separators are required
+(for example, the \glostyle{index} style with the default 
+\styopt[false]{nogroupskip}). If you don't require grouping within
+the glossary, there's no need to use this switch. Note that this
+switch doesn't automatically select an appropriate glossary style.
+
+If you want \idxpl{sub-group}, you will need to use the \csopt{group-level}
+resource option and ensure you have \sty{glossaries-extra} v1.49+.
+\Idxpl{smallgroup} can be merged with the \csopt{merge-small-groups}
+resource option.
+
+\begin{important}
+The \field{group} field should typically not be set in the \ext{bib}
+file and will trigger a warning if found. The explicit use of the
+\field{group} key will override \bibgls's normal group formation
+behaviour, which can cause unexpected results. The custom use of the
+\field{group} field requires some care. As a general rule, if you
+find yourself wanting to use the \field{group} field in the
+\ext{bib} file, then the chances are that what you actually have is
+a \gls{hierarchicalglossary} (list of topics) and what you really
+need is the \field{parent} field.  Compare the example files
+\exfile{sample-textsymbols.tex} and
+\exfile{sample-textsymbols2.tex}. See also
+\sectionref{sec:logicaldivisions}.
+\end{important}
+There are eight types of groups:
+\begin{description}
+\item[\idx{lettergroup}] The first non-ignored character of the
+sort value is alphabetic. This type of group occurs when using the
+alphabetic sort methods listed in \tableref{tab:sortoptionsrule} or
+with the letter sort methods listed in
+\tableref{tab:sortoptionsletter} or with the letter-number sort
+methods listed in \tableref{tab:sortoptionsletternumber}. The group
+label is obtained from \gls!{bibglslettergroup}.
+
+\item[\idx{nonlettergroup} (or \idx{symbolgroup})]
+The first non-ignored character of all the sort values within this group
+are non-alphabetical. This type of group occurs when using the
+alphabetic sort methods listed in \tableref{tab:sortoptionsrule} or
+with the letter sort methods listed in
+\tableref{tab:sortoptionsletter} or with the letter-number sort
+methods listed in \tableref{tab:sortoptionsletternumber}.
+The alphabetic sort methods ignore many punctuation
+characters, so an entry that has a non-alphabetic initial
+character in the sort value may actually be placed in a
+\idx{lettergroup}.
+The group label is obtained from \gls!{bibglsothergroup}.
+
+\item[\idx{emptygroup}] The sort value is empty when sorting with an
+alphabetical, letter or letter-number method, typically a
+result of the original value consisting solely of commands that \bibgls\
+can't interpret. The group label is obtained from \gls!{bibglsemptygroup}.
+
+\item[\idx{numbergroup}] The entries were sorted by one of the
+numeric comparisons listed in \tableref{tab:sortoptionsnumerical}.
+The group label is obtained from \gls!{bibglsnumbergroup}.
+
+\item[\idx{datetimegroup}] The entries were sorted by one of the date-time
+comparisons listed in \tableref{tab:sortoptionsdatetime} (where both
+date and time are present). 
+The group label is obtained from \gls!{bibglsdatetimegroup}.
+
+\item[\idx{dategroup}] The entries were sorted by one of the date
+comparisons (where the time is omitted). 
+The group label is obtained from \gls!{bibglsdategroup}.
+
+\item[\idx{timegroup}] The entries were sorted by one of the time
+comparisons (where the date is omitted). 
+The group label is obtained from \gls!{bibglstimegroup}.
+
+\item[\idx{customgroup}] The group label is explicitly set either by
+aliasing a field (with \csopt{field-aliases}) or by using the
+\csopt[\meta{label}]{group} resource option. You will need to use
+\gls{glsxtrsetgrouptitle} in the document to provide an associated title if the
+\meta{label} isn't the same as the title.  Remember that with older
+\LaTeX\ kernels, the label can't contain any active characters, so
+you can't use non-ASCII characters in \meta{label} with
+\sty{inputenc} (but you can use non-ASCII alphanumerics with
+\sty{fontspec}). To ensure better support for UTF-8 with \pdfLaTeX, make sure you
+have a recent \TeX\ distribution and up-to-date versions of
+\sty{glossaries} and \sty{glossaries-extra}.
+
+\end{description}
+
+The \idx{lettergroup} titles will typically have the first character
+converted to \idx{uppercase} for the alphabet sort methods
+(\tableref{tab:sortoptionsrule}). A \qt{letter} may not necessarily
+be a single character (depending on the sort rule), but may be
+composed of multiple characters, such as a \idx{digraph} (two
+characters) or \idx{trigraph} (three characters).
+
+For example, if the sort rule recognises the digraph \qt{dz} as a
+letter, then it will be converted to \qt{Dz} for the group title. 
+There are some exceptions to this. For example, the Dutch digraph 
+\qt{ij} should be \qt{IJ} rather than \qt{Ij}. This is indicated 
+by the following line in the \langxml:
+\begin{verbatim}
+<entry key="grouptitle.case.ij">IJ</entry>
+\end{verbatim}
+If there isn't a \idx{grouptitle.case.lc} key (where 
+\meta{lc} is the \idx!{lowercase} version), then only the first character
+will be converted to \idx{uppercase} otherwise the value supplied by the
+resource file is used. This resource key is only checked for
+the alphabetical comparisons listed in
+\tableref{tab:sortoptionsrule}. If the initial part of the sort
+value isn't recognised as a letter according to the sort rule, then
+the entry will be in a \idx{nonlettergroup} (even if the character is
+alphabetical).
+
+The letter (\tableref{tab:sortoptionsletter}) and letter-number
+(\tableref{tab:sortoptionsletternumber}) methods only select the
+first character of the sort value for the group. If the character is
+alphabetical\footnote{according to Java's
+\code{Character.isAlphabetic(int)} method} then it will be a 
+\idx{lettergroup} otherwise it's a \idx{nonlettergroup}.  The case-insensitive
+ordering (such as \csopt[letter-nocase]{sort}) will convert the
+letter group character to \idx{uppercase}. The case-sensitive ordering
+(such as \csopt[letter-case]{sort}) won't change the case.
+
+Glossary styles with navigational links to groups (such as
+\glostyle{indexhypergroup}) require an extra run for the ordinary
+\cs{cs.makeglossaries} and \cs{makenoidxglossaries} methods. For
+example, for the document \filefmt{myDoc.tex}:
+\begin{verbatim}
+pdflatex myDoc
+makeglossaries myDoc
+pdflatex myDoc
+pdflatex myDoc
+\end{verbatim}
+On the first \appfmt{pdflatex} call, there's no glossary. On the second
+\appfmt{pdflatex}, there's a glossary but the glossary must be
+processed to find the group information, which is written to the
+\iext{aux} file as
+\nosecdef{@gls at hypergroup}
+The third \appfmt{pdflatex} reads this information and is then able
+to create the navigation links.
+
+With \bibgls, if the \optfmt{type} is provided (through the
+\field{type} field or via options such as \csopt{type} and
+\csopt{dual-type}) then this information can be determined when
+\bibgls\ is ready to write the \iext{glstex} file, which means that
+the extra \LaTeX\ run isn't necessary. If \bibgls\ doesn't know
+the glossary type then it will fallback on the original method
+which requires an extra \LaTeX\ run.
+
+For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\cmd{usepackage}\oarg{colorlinks}\marg{hyperref}
+\cmd{usepackage}\oarg{\styopt{record},\styopt{abbreviations},\styopt[indexhypergroup]{style}}\marg{glossaries-extra}
+\strut
+\gls{GlsXtrLoadResources}\oarg{\csopt[entries]{src},\comment{data in entries.bib}
+  \csopt[main]{type}\comment{put these entries in the 'main' glossary}
+}
+\strut
+\gls{GlsXtrLoadResources}\oarg{\csopt[abbrvs]{src},\comment{data in abbrvs.bib}
+  \csopt[abbreviations]{type}\comment{put entries in the 'abbreviations' glossary}
+}
+\end{codeenv}
+Here the \csopt{type} is set and \bibgls\ can detect that
+\isty{hyperref} has been loaded, so if the \longarg{group} switch
+is used, then the group hyperlinks can be set (using
+\gls!{bibglshypergroup}). This means that the build process is
+just:
+\begin{verbatim}
+pdflatex myDoc
+bibtex --group myDoc
+pdflatex myDoc
+\end{verbatim}
+Note that this requires \isty{glossaries} v4.53+ and
+\isty{glossaries-extra} v1.53. If your version of \sty{glossaries}
+or \sty{glossaries-extra} is too old, an extra \LaTeX\ run is
+required.
+
+If \isty{hyperref} isn't loaded or the \longarg{group} switch
+isn't used or the \field{type} isn't set or your version of
+\sty{glossaries} is too old, then the information can't be saved in
+the \ext{glstex} file.
+
+For example:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\cmd{usepackage}\oarg{colorlinks}\marg{hyperref}
+\cmd{usepackage}\oarg{\styopt{record},\styopt{abbreviations},\styopt[indexhypergroup]{style}}\marg{glossaries-extra}
+\strut
+\gls{GlsXtrLoadResources}\oarg{\csopt[entries]{src}}\comment{data in entries.bib}
+\gls{GlsXtrLoadResources}\oarg{\csopt[abbrvs]{src}}\comment{data in abbrvs.bib}
+\end{codeenv}
+This requires the build process:
+\begin{verbatim}
+pdflatex myDoc
+bibtex --group myDoc
+pdflatex myDoc
+pdflatex myDoc
+\end{verbatim}
+because the group hyperlink information can't be determined by
+\bibgls, so it's best to always set the \optfmt{type} if you want
+hyper-group styles, and make sure you have an up-to-date version of 
+\styfmt{glossaries} (and \styfmt{glossaries-extra}).
+
+\argsection{no-group}
+
+Don't automatically set the \field{group} field with
+\csopt[auto]{group} (default). The glossary won't have groups even if a
+group style, such as \glostyle{indexgroup}, is used (unless the
+\field{group} field is set to a custom value).
+If used in \gls{BibGlsOptions}, this option should be specified as
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{group=false}
+\end{codeenv}
+
+\argsection{no-expand-fields}
+
+By default, \gls{newglossaryentry} and similar commands expand field values
+(except for \field{name}, \field{symbol} and \field{description}).
+This is useful if constructing field values programmatically
+(for example in a \idx!{loop}) but can cause a problem if certain fragile
+commands are included in the field. 
+
+The switch \longarg{no-expand-fields} makes \bibgls\ write
+\gls{glsnoexpandfields} to the \iext{glstex} file, which
+switches off the expansion.  Since \bibgls\ is simply
+fetching the data from \iext{bib} files, it's unlikely 
+that this automatic expansion is required and since it can
+also be problematic this option is on by default. You can
+switch it off with \longarg{expand-fields}.
+
+If used in \gls{BibGlsOptions}, this option should be specified as
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{expand-fields=false}
+\end{codeenv}
+
+\argsection{expand-fields}
+
+Don't write \gls{glsnoexpandfields} to the \iext{glstex} file,
+allowing fields to expand when the entries are defined.
+Remember that this doesn't include the \field{name}, \field{symbol}
+or \field{description} fields, which need to have their
+expansion switched on with \gls{glssetexpandfield}
+before the entries are defined (that is, before using
+\gls!{GlsXtrLoadResources}).
+
+\argsection{mfirstuc-protection}
+
+If you have \isty{mfirstuc} v2.08+, \isty{glossaries} v4.50+
+and \isty{glossaries-extra} v1.49+ then this setting shouldn't be
+required any more as there's now better \idx{sentencecase} handling.
+If these versions are detected in the \ext{log} file then the
+default will switch to \longarg{no-mfirstuc-protection}
+otherwise the default is \longarg{mfirstuc-protection}. If this causes any
+problems, use \longarg{mfirstuc-protection} to re-enable this
+setting. The information below relates to older versions.
+
+Commands like \ics{Gls} use \ics{makefirstuc} provided by the
+\isty{mfirstuc} package. This command has limitations and one of the
+things that can break it is the use of a referencing command 
+at the start of its argument. The \sty{glossaries-extra} package has
+more detail about the problem in the \qt{Nested Links} section of
+the user manual~\cite{glossaries-extra}. If a glossary field starts
+with one of these problematic commands, the recommended method (if
+the command can't be replaced) is to insert an empty group in front
+of it.
+
+For example, the following definition
+\begin{codeenv}
+\gls{newabbreviation}\marg{shtml}\marg{shtml}\marg{\ics{glsps}\marg{ssi} enabled \cs{glsps}\marg{short}\marg{html}}
+\end{codeenv}
+will cause a problem for \code{\cs{Gls}\marg{shtml}} on first use.
+The above example would be written in a \ext{bib} file as:
+\begin{codeenv}
+\atentry{abbreviation}\marg{shtml,
+  \field{short}=\marg{shtml},
+  \field{long}=\marg{\cs{glsps}\marg{ssi} enabled \cs{glsps}\marg{html}}
+}
+\end{codeenv}
+The default \sty{mfirstuc} protection will automatically insert an empty
+group before \code{\cs{glsps}\marg{ssi}} when writing the definition
+in the \ext{glstex} file.
+
+The argument for this switch should either be a comma-separated list
+of fields or the keyword \code{all} (which indicates all fields).
+\bibgls\ will automatically insert an empty group at the start of
+the listed fields that start with a problematic command, and a
+warning will be written to the transcript. Unknown fields are
+skipped even if they're included in the list. An empty argument is
+equivalent to \longarg{no-mfirstuc-protection}. The default value is
+\code{all}.
+
+\argsection{no-mfirstuc-protection}
+
+Switches off the \isty{mfirstuc} protection mechanism described
+above.
+If used in \gls{BibGlsOptions}, this option should be specified as
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{mfirstuc-protection=false}
+\end{codeenv}
+
+\argsection{mfirstuc-math-protection}
+
+If you have \isty{mfirstuc} v2.08+, \isty{glossaries} v4.50+ and
+\isty{glossaries-extra} v1.49+ then this setting shouldn't be
+required any more as there's now better \idx{sentencecase} handling.  If
+these versions are detected in the \ext{log} file then the default
+will switch to \longarg{no-mfirstuc-math-protection}. If this causes
+any problems, use \longarg{mfirstuc-math-protection} to re-enable
+this setting. The information below relates to older versions.
+
+This setting works in the same way as \longarg{mfirstuc-protection} but
+guards against fields starting with inline maths
+(\idx{mshiftchar}\ldots\idx{mshiftchar}). For example, if the
+\field{name} field starts with
+\code{\idx{mshiftchar}x\idx{mshiftchar}} and the glossary style
+automatically tries to convert the first letter of the name to
+\idx{uppercase}, then this will cause a problem.
+
+With \longarg{mfirstuc-math-protection} set, \bibgls\ will
+automatically insert an empty group at the start of the field and
+write a warning in the transcript. This setting is on by default.
+
+\argsection{no-mfirstuc-math-protection}
+
+Switches off the above.
+If used in \gls{BibGlsOptions}, this option should be specified as
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{mfirstuc-math-protection=false}
+\end{codeenv}
+
+\argsection{nested-link-check}
+
+By default, \bibgls\ will parse certain fields for potential nested links.
+(See the section \qt{Nested Links} in the \sty{glossaries-extra}
+user manual~\cite{glossaries-extra}.)
+
+The default set of fields to check are: \field{name}, \field{text},
+\field{plural}, \field{first}, \field{firstplural}, \field{long},
+\field{longplural}, \field{short}, \field{shortplural} and
+\field{symbol}.
+
+You can change this set of fields using
+\longarg{nested-link-check} \meta{value} where \meta{value} may be
+\optfmt{none} (don't parse any of the fields) or a comma-separated
+list of fields to be checked.
+
+\argsection{no-nested-link-check}
+
+Equivalent to \longarg{nested-link-check} \optfmt{none}.
+If used in \gls{BibGlsOptions}, this option should be specified as
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{nested-link-check=none}
+\end{codeenv}
+or
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{nested-link-check=false}
+\end{codeenv}
+
+\argsection{shortcuts}
+
+Some entries may reference another entry within a field, using
+commands like \ics{gls}, so \bibgls\ parses the fields for these
+commands to determine dependent entries to allow them to be selected
+even if they haven't been used within the document.
+The \styopt{shortcuts} package option provided by
+\styfmt{glossaries-extra} defines various synonyms, such as \ics{ac}
+which is equivalent to \ics{gls}. By default the value of the
+\styopt{shortcuts} option will be picked up by \bibgls\ when parsing the
+\iext{aux} file. This then allows \bibgls\ to additionally search for
+those shortcut commands while parsing the fields.
+
+You can override the \styopt{shortcuts} setting using
+\longarg{shortcuts} \meta{value} (where \meta{value} may take
+any of the allowed values for the \styopt{shortcuts} package option), 
+but in general there is little need to use this switch.
+
+\argsection{trim-fields}
+
+Trim leading and trailing spaces from all field values. For example,
+if the \ext{bib} file contains:
+\begin{codeenv}
+\atentry{entry}\marg{sample,
+  \field{name} = \marg{sample},
+  \field{description} = \marg{
+    an example
+  }
+}
+\end{codeenv}
+This will cause spurious spaces in the \field{description} field. 
+Using \longarg{trim-fields} will automatically trim the values
+before writing the \iext{glstex} file.
+
+Note that even without this trimming option on, fields that are
+set as keys within \cs{longnewglossaryentry} or the optional
+argument of \cs{newabbreviation} will automatically have the leading and
+trailing spaces internally trimmed by the \isty{xkeyval} package, so
+this trimming action only affects fields that aren't set in this
+way, such as the \field{description}, \field{long} and \field{short}
+fields. If you specifically require a space at the start or end of a
+field then use a spacing command, such as \cs{cs.space} or \cs{space} 
+or \idx{nbspchar}.
+
+\argsection{trim-only-fields}
+
+Only trim leading and trailing spaces from the fields identified in
+the comma-separated \meta{list}. This option has a cumulative effect
+but is cancelled by \longarg{no-trim-fields} (which switches off all
+trimming) and by \longarg{trim-fields} (which switches on trimming
+for all fields). This option may not be used with
+\longarg{trim-except-fields}.
+
+For example, to only trim the \field{description} field:
+\begin{verbatim}
+bib2gls --trim-only-fields description myDoc
+\end{verbatim}
+
+\argsection{trim-except-fields}
+
+Trim all leading and trailing spaces from fields except those identified in
+the comma-separated \meta{list}. This option has a cumulative effect
+but is cancelled by \longarg{no-trim-fields} (which switches off all
+trimming) and by \longarg{trim-fields} (which switches on trimming
+for all fields). This option may not be used with
+\longarg{trim-only-fields}. See the above note about \sty{xkeyval}.
+
+For example, to trim all fields except \field{short} and
+\field{long}:
+\begin{verbatim}
+bib2gls --trim-except-fields short,long myDoc
+\end{verbatim}
+Or
+\begin{verbatim}
+bib2gls --trim-except-fields short --trim-except-fields long myDoc
+\end{verbatim}
+
+\argsection{no-trim-fields}
+
+Don't trim any leading or trailing spaces from field values (but see
+the above note about \sty{xkeyval}). This is the default setting.
+If used in \gls{BibGlsOptions}, this option should be specified as
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{trim-fields=false}
+\end{codeenv}
+
+\section{Other Options}
+
+\argsection{force-cross-resource-refs}
+
+Force \igls{crossresourceref} mode on (see
+\sectionref{sec:resourcesets}).
+
+\argsection{no-force-cross-resource-refs}
+
+Don't force \igls{crossresourceref} mode on (default). 
+The mode will be enabled if applicable (see
+\sectionref{sec:resourcesets}).
+If used in \gls{BibGlsOptions}, this option should be specified as
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{force-cross-resource-refs=false}
+\end{codeenv}
+
+\argsection{provide-glossaries}
+
+This setting will make \bibgls\ add the line
+\begin{codeenv}
+\ics{provideignoredglossary*}\margm{type}
+\end{codeenv}
+to the \ext{glstex} file before an entry is defined where that entry
+has the \field{type} field set to an unknown glossary type (\bibgls\
+can detect from the \ext{aux} file all glossaries that have been
+defined with \cs{newglossary} but not those defined with \cs{newignoredglossary}).
+
+This ensures that the glossary exists, but the use of
+\ics{provideignoredglossary} (rather than \cs{newignoredglossary})
+will prevent an error if the glossary has already been defined.
+
+\argsection{no-provide-glossaries}
+
+This setting prevents \bibgls\ from providing unknown glossaries,
+except in a few documented situations (the \csopt{master},
+\csopt{trigger-type}, \csopt{ignored-type} and \csopt{secondary} options). This is the
+default since it's a useful way of detecting misspelt glossary
+labels. It's harder to detect the problem if a misspelt label has
+caused an entry to be added to a hidden glossary.
+If used in \gls{BibGlsOptions}, this option should be specified as
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{provide-glossaries=false}
+\end{codeenv}
+
+\argsection{replace-quotes}
+
+Single and double-quote characters (\idx{aposchar} and
+\idx{doublequotechar}) will be written as \cs{bibglsaposchar} and
+\cs{bibglsdoublequotechar} in field values and group information 
+written to the \ext{glstex} file.
+
+\argsection{no-replace-quotes}
+
+Single and double-quote characters (\idx{aposchar} and
+\idx{doublequotechar}) will be written as those actual characters
+(default).
+If used in \gls{BibGlsOptions}, this option should be specified as
+\begin{codeenv}
+\gls{BibGlsOptions}\marg{replace-quotes=false}
+\end{codeenv}
+
+\chapter{\iext{bib} Format}
+\label{sec:bib}
+\setsecdepth{1}
+
+\bibgls\ recognises certain \glspl{entrytype}. Any unrecognised types will
+be ignored and a warning will be written to the transcript file.
+Entries are defined in the usual \ext{bib} format:
+\begin{codeenv*}
+\idx{atchar}\meta{entry-type}\marg{\meta{id},
+  \meta{field-name-1} = \margm{text},
+  \ldots
+  \meta{field-name-n} = \margm{text}
+}
+\end{codeenv*}
+where \meta{entry-type} is the \gls{entrytype} (listed below),
+\meta{field-name-1}, \ldots, \meta{field-name-n} are the field names and
+\meta{id} is a unique label. The label can't contain any spaces or
+commas, and most special characters are forbidden. The hyphen character and
+some other punctuation characters are allowed by \bibgls, but you need to make 
+sure that your document hasn't made them active. In general it's best to
+stick with alpha-numeric labels.  The field values may be delimited by braces
+\margm{text} or double-quotes \code{\qtdelim{\meta{text}}}.
+
+The \csopt{label-prefix} option can be used to instruct \bibgls\ to
+insert prefixes to the labels (\meta{id}) when the data is read.
+Remember to use these prefixes when you reference the entries in the
+document, but don't include them when you reference them in the
+\ext{bib} file.  There are some special prefixes that have a
+particular meaning to \bibgls: \qt{\idprefix{dual}} and
+\qt{\idprefix{extn}} where \meta{n} is a positive integer.
+In the first case, \idprefix{dual} references the dual element of a
+dual entry (see \atentry{dualentry}). This prefix will be
+replaced by the value of the \csopt{dual-prefix} option. The
+\idprefix{extn} prefix is used to reference an entry from a
+different set of resources (loaded by another
+\gls{GlsXtrLoadResources} command). This prefix is replaced by the
+corresponding element of the list supplied by \csopt{ext-prefixes},
+but this is only supported if the \igls{crossresourceref} mode is enabled
+(see \sectionref{sec:resourcesets}).
+
+In the event that the \field{sort} value falls back on the label,
+the original label supplied in the \ext{bib} file is used, not the
+prefixed label.
+
+\section{Encoding}
+\label{sec:bibencoding}
+
+If you are using \XeLaTeX\ or \LuaLaTeX\ (which are natively UTF-8)
+or if you are using a modern \TeX\ distribution \pdfLaTeX\ with
+UTF-8 support, then you can have UTF-8 characters in the \meta{id}
+of your entries. (Avoid \TeX\ special characters, active characters
+or characters that are part of the \ext{bib} syntax.)
+
+You can set the character \igls{encoding} in the \ext{bib} file using:
+\begin{codeenv}
+\idx{commentchar} Encoding: \meta{encoding-name}
+\end{codeenv}
+where \meta{encoding-name} is the name of the character \gls{encoding}.
+For example:
+\begin{verbatim}
+% Encoding: UTF-8
+\end{verbatim}
+You can also set the \gls{encoding} using the \csopt{charset} option,
+but it's simpler to include the above comment on the first line of
+the \ext{bib} file. (This comment is also searched for by JabRef
+to determine the \gls{encoding}, so it works for both applications.) 
+If you don't use either method \bibgls\ will
+have to search the entire \ext{bib} file, which is inefficient and
+you may end up with a mismatched \gls{encoding}.
+
+\begin{important}
+The encoding comment line must come before any non-ASCII content
+otherwise a malformed input error may occur while parsing the file
+for the comment line.
+\end{important}
+
+If there is no encoding line in the \ext{bib} file and the
+\csopt{charset} option hasn't been used, then the default encoding
+will be assumed (see \sectionref{sec:defencoding}).
+
+\section{Comments}
+\label{sec:bibcomments}
+
+The original \ext{bib} file format as defined by \BibTeX\ doesn't
+have a designated comment character, but instead treats anything
+outside of \code{@\meta{entry}\margm{data}} as unwanted material
+that's ignored. This can catch out users who try to do something
+like:
+\begin{verbatim}
+%@misc{sample, title={Sample} }
+\end{verbatim}
+In this case, the percent character is simply discarded and the
+line is treated as:
+\begin{verbatim}
+ at misc{sample, title={Sample} }
+\end{verbatim}
+Some applications that parse \ext{bib} files are less tolerant of
+unwanted material. In the case of \bibgls, the percent character is
+treated as a comment character and other unwanted material
+should be omitted.  Avoid using comments within field values.
+Comments are best placed outside of entry definitions.
+
+The most common type of comment is the \gls{encoding} comment, described
+above.  \BibTeX's \entrydef{comment} is also supported by \bibgls\
+for general comments, but not for the \gls{encoding}.
+
+\section{Fields}
+\label{sec:fields}
+
+Each \gls{entrytype} may have required fields, optional fields and
+ignored fields. These are set using a \keyvallist\ within
+\code{@\meta{entry-type}\marg{\meta{id},\meta{fields}}} in the
+\ext{bib} file. Most keys recognised by
+\gls{newglossaryentry} may be used as a field unless \bibgls\
+considers them an internal field (see below). In general, you
+shouldn't need to use the \field{sort} field.
+
+If an optional field is missing and \bibgls\ needs to access it for
+some reason, \bibgls\ will try to fallback on another value. The
+actual fallback value depends on the \gls{entrytype}. The most common
+fallback is that used if the \field{sort} field is missing, which is
+typically the case. This approach allows different \glspl{entrytype} to
+have different fields used for sorting (see \sectionref{sec:fallbacks}).
+
+Predefined fields for use in \ext{bib} files are listed in
+Tables~\ref{tab:fields}, \ref{tab:bib2glsfields},
+\ref{tab:prefixfields} and~\ref{tab:accsuppfields}.  If you add any
+custom keys in your document using \ics{glsaddkey} or
+\ics{glsaddstoragekey}, those commands must be placed before the
+first use of \gls{GlsXtrLoadResources} to ensure that \bibgls\
+recognises them as a valid field name. 
+
+\begin{important}
+If you define your own custom keys, ensure that they don't contain
+spaces, commas (\idx{commasep}), equal signs (\idx{equalsassign}) or 
+any other character that isn't supported by the \ext{bib} format.
+Additionally, if you want to use \csopt{assign-fields}, ensure
+that you don't use any of the assignment special characters, such as
+plus (\idx{concat-plus}), within any
+field names.
+\end{important}
+
+Internal fields that may be assigned within the document (the
+\LaTeX\ assignment code having been written by \bibgls\ in the
+\iext{glstex} file) are listed in Table~\ref{tab:internalfields}.
+These typically shouldn't be used in the \ext{bib} file. Some of
+these fields can be set for a particular document using a resource
+option, such as \csopt{type} or \csopt{group}. With
+\longarg{warn-non-bib-fields} set, \bibgls\ will check for internal
+fields that can cause interference with its normal operations and
+will warn if any are found in the \ext{bib} file.
+
+There are also some fields that are set and used by 
+\styfmt{glossaries} or \styfmt{glossaries-extra} listed in
+Table~\ref{tab:baseinternalfields} that aren't recognised by \bibgls.
+In most cases these fields don't have a designated key and are only
+intended for internal use by \bibgls\ or by the \styfmt{glossaries} or
+\styfmt{glossaries-extra} package. Note that the value of the \field{sort} field
+written to the \ext{bib} file doesn't always exactly match the sort
+value used by \bibgls\ (which is stored in \field{bib2gls at sort}).
+Any special characters found in the sort value are always substituted
+before writing the \ext{bib} file to avoid syntax errors.
+
+Any unrecognised fields will be ignored by \bibgls. This is more
+convenient than using \ics{input} or \gls{loadglsentries}, which
+requires all the keys used in the file to be defined, regardless of
+whether or not you actually need them in the document.
+
+Other entries can be cross-referenced using the \field{see},
+\field{seealso} or \field{alias} fields or
+by using commands like \ics{gls} or \ics{glsxtrp} in any of the
+recognised fields. These will automatically be selected if the
+\csopt{selection} setting includes dependencies, but you may need to
+rebuild the document to ensure the \glspl{locationlist} are correct.  Use
+of the \ics{glssee} command will create an \igls{ignoredrecord} and the
+\field{see} field will be set to the relevant information.  If an
+entry has the \field{see} field already set, any instance of
+\ics{glssee} in the document for that entry will be appended to the
+\field{see} field (provided you have at least v1.14 of
+\sty{glossaries-extra}). In general, it's best just to use the
+\field{see} field and not use \ics{glssee}.
+
+The \field{seealso} key was only added to \sty{glossaries-extra}
+v1.16, but this field may be used with \bibgls\ even if you only
+have version 1.14 or 1.15. If the key isn't available,
+\code{\field{seealso}=\margm{xr-list}} will be treated as
+\code{\field{see}=\marg{[\ics{seealsoname}]\meta{xr-list}}} (the resource
+option \csopt{seealso} won't have an effect).  You can't use both
+\field{see} and \field{seealso} for the same entry with \bibgls.
+Note that the \field{seealso} field doesn't allow for the optional
+\oargm{tag} part. If you need a different tag, either use \field{see}
+or change the definition of \ics{seealsoname} or
+\ics{glsxtruseseealsoformat}.  Note that, unless you are using
+\idx!{xindy}, \ics{glsxtrindexseealso} just does
+\ics{glssee}\oarg{\ics{seealsoname}}, and so will be treated as \field{see}
+rather than \field{seealso} by \bibgls. Again, it's better to just
+use the \field{seealso} field directly.
+
+You can identify an arbitrary field as containing a list of dependent entry 
+labels with \csopt{dependency-fields}. This instructs \bibgls\ to parse the 
+listed fields for dependencies in a similar manner to the \field{see} field, 
+but it doesn't add any information to the cross-referencing part of the 
+\gls{locationlist}. The option may be used in combination with the \field{see} or
+\field{seealso} fields.
+
+\clearpage
+
+\printfields
+ {basefield,extrafield}
+ {Fields Provided by \styfmt{glossaries-extra}}
+ {tab:fields}
+
+\clearpage
+
+\printfields
+ {bib2glsfield}
+ {Fields Provided by \bibgls}
+ {tab:bib2glsfields}
+
+\printfields
+ {prefixfield}%
+ [Fields Provided by \styfmt{glossaries-prefix}]%
+ {Fields Provided by \isty{glossaries-prefix}}
+ {tab:prefixfields}
+
+\printfields
+ [%
+   Don't load \isty{glossaries-accsupp} directly (with \ics{usepackage}) 
+   when using \styfmt{glossaries-extra}. Load using the 
+   \glsadd{idx.accsupp}\styopt{accsupp} 
+   package option instead.
+%\begin{codeenv}
+%\cs{usepackage}\oarg{\styopt{record},\styopt{accsupp}}\marg{glossaries-extra}
+%\end{codeenv}
+ ]%
+ {accessfield}%
+ [Fields Provided by \styfmt{glossaries-accsupp}]%
+ {Fields Provided by \isty{glossaries-accsupp}}
+ {tab:accsuppfields}
+
+\printfields
+ [%
+  You may define and assign \field{bibtextype} as a key (although it's more
+  likely to be aliased). Don't define any of the others listed in this
+  table, and don't use any of them in the \ext{bib} file. A possible
+  exception is the \field{type} field, but it's more flexible to set
+  that through a resource option. The explicit use of \field{group} 
+  within a \ext{bib} file can cause unpredictable
+  results and is best set through a resource option or by \bibgls.
+  In general, you shouldn't need to set the \field{sort} field as
+  appropriate fallbacks should produce useful sort values
+  (see \sectionref{sec:fallbacks}).%
+ ]%
+ {internalfield}%
+ [Fields Set by \bibgls]%
+ {Fields Sometimes Set by \bibgls\ in the \iext{glstex} File}%
+ {tab:internalfields}
+
+\printfields
+ [%
+   Don't define any of these as keys and don't use any of them in the \ext{bib}
+   file.%
+ ]%
+ {baseinternalfield}%
+ [Internal Fields Set by \styfmt{glossaries} or \styfmt{glossaries-extra} 
+  or \bibgls]%
+ {Internal Fields Set by \isty{glossaries} or \isty{glossaries-extra} 
+  or \bibgls}%
+ {tab:baseinternalfields}
+
+\printfields
+ [%
+   Only available for \atentry{compoundset}. These correspond to the
+   arguments of \ics{multiglossaryentry}.%
+ ]%
+ {compoundsetfield}%
+ {Compound Set Fields}%
+ {tab:compoundsetfields}
+
+\clearpage
+
+\section{String Concatenation}
+\label{sec:bibstringconcat}
+
+The \ext{bib} format allows you to perform string \gls{concatenation}.
+That is, join fragments together to form a single value.
+The \gls{concatenation} operator in \ext{bib} files is
+\idx{stringconcat}.
+For example, if the following string is defined:
+\begin{codeenv}
+\atentry{string}\marg{markuplang=\marg{markup language}}
+\end{codeenv}
+Then values can be obtained by concatenating this string with other
+strings. For example:
+\begin{codeenv}
+\atentry{abbreviation}\marg{xml,
+  \field{short}=\marg{XML},
+  \field{long}=\marg{extensible } \idx{stringconcat} markuplang
+}
+\atentry{abbreviation}\marg{html,
+  \field{short}=\marg{HTML},
+  \field{long}=\marg{hypertext } \idx{stringconcat} markuplang
+}
+\end{codeenv}
+This is equivalent to:
+\begin{codeenv}
+\atentry{abbreviation}\marg{xml,
+  \field{short}=\marg{XML},
+  \field{long}=\marg{extensible markup language}
+}
+\atentry{abbreviation}\marg{html,
+  \field{short}=\marg{HTML},
+  \field{long}=\marg{hypertext markup language}
+}
+\end{codeenv}
+
+Note that some resource options allow string \gls{concatenation} in
+their syntax. That uses a different operator. See
+\sectionref{sec:optstringconcat} for further details.
+
+\section{Standard Entry Types}
+\label{sec:standardentry}
+
+\entrysection{string}
+
+The standard \atentry{string} is available and can be used to define
+variables that may be used in field values. Don't include braces or
+double-quote delimiters when referencing a variable. You can use
+\idx{stringconcat} to concatenate strings.
+For example:
+\begin{codeenv}
+\atentry{string}\marg{ssi=\marg{server-side includes}}
+\atentry{string}\marg{html=\marg{hypertext markup language}}
+\strut
+\atentry{abbreviation}\marg{shtml,
+  \field{short}=\qtdelim{shtml},
+  \field{long}=ssi \idx{stringconcat} \qtdelim{ enabled } \idx{stringconcat} html,
+  \field{see}=\marg{ssi,html}
+}
+\strut
+\atentry{abbreviation}\marg{html,
+  \field{short}=\qtdelim{html},
+  \field{long}=html
+}
+\strut
+\atentry{abbreviation}\marg{ssi,
+  \field{short}=\qtdelim{ssi},
+  \field{long}=ssi
+}
+\end{codeenv}
+Note the difference between \code{=\qtdelim{ssi}} (a field value delimited by
+double-quotes), the undelimited \code{=ssi} (a reference to the
+variable), the grouped \code{=\marg{ssi,html}} (a field value
+delimited by braces) and \code{ssi} the entry label.
+
+\entrysection{preamble}
+
+The standard \atentry{preamble} is available and can be used to
+provide command definitions used within field values.
+For example:
+\begin{codeenv}
+\atentry{preamble}\marg{\qtdelim{\cs{providecommand}\marg{\cmd{mtx}}[1]\marg{\cs{boldsymbol}\marg{\idx{param}1}}}}
+\strut
+\atentry{entry}\marg{matrix,
+  \field{name}=\marg{matrix},
+  \field{plural}=\marg{matrices},
+  \field{description}=\marg{rectangular array of values, denoted \idx{mshiftchar}\cmd{mtx}\marg{M}\idx{mshiftchar}}
+}
+\end{codeenv}
+Alternatively you can use \ics{glsxtrprovidecommand} which behaves
+the same as \ics{providecommand} within the document but behaves
+like \ics{renewcommand} within \bibgls, which allows you to change
+\bibgls's internal definition of a command without affecting the
+definition within the document (if it's already been defined before
+the resource file is input). In general, it's best to just use
+\cs{providecommand}.
+
+The \texparserlib\ used by \bibgls\ will parse the contents of
+\atentry{preamble} before trying to interpret the field value used
+as a \hyperref[sec:fallbacks]{fallback} when \field{sort} is omitted (unless
+\csopt[false]{interpret-preamble} is set in the resource options).
+For example:
+\begin{codeenv}
+\atentry{preamble}\marg{\qtdelim{\cs{providecommand}\marg{\cmd{set}}[1]\marg{\cs{mathcal}\marg{\idx{param}1}}
+\cs{providecommand}\marg{\cmd{card}}[1]\marg{|\cmd{set}\marg{\idx{param}1}|}}}
+\strut
+\atentry{entry}\marg{S,
+  \field{name}=\marg{\marg{}\idx{mshiftchar}\cmd{set}\marg{S}\idx{mshiftchar}},
+  \field{text}=\marg{\cmd{set}\marg{S}},
+  \field{description}=\marg{a set}
+}
+\atentry{entry}\marg{card,
+  \field{name}=\marg{\marg{}\idx{mshiftchar}\cmd{card}\marg{S}\idx{mshiftchar}},
+  \field{text}=\marg{\cmd{card}\marg{S}},
+  \field{description}=\marg{the cardinality of \cs{gls}\marg{S}}
+}
+\end{codeenv}
+Neither entry has the \field{sort} field, so \bibgls\ has to fall
+back on the \field{name} field and, since this contains the special
+characters \idx{escchar} (backslash), \idx{mshiftchar} (maths
+shift), \idx{bgroupchar} (begin group) and
+\idx{egroupchar} (end group), the \texparserlib\ is used to interpret it.
+The definitions provided by \atentry{preamble} allow \bibgls\ to
+deduce that the \field{sort} value of the \code{S} entry is just
+\code{S} and the \field{sort} value of the \code{card} entry is
+\verb"|S|" (see \sectionref{sec:texparserlib}).
+
+What happens if you also need to use these commands in the document?
+The definitions provided in \atentry{preamble} won't be available
+until the \iext{glstex} file has been created, which means the
+commands won't be defined on the first \LaTeX\ run.
+
+There are several approaches:
+\begin{enumerate}
+\item Just define the commands in the document. This means the
+commands are available, but \bibgls\ won't be able to correctly
+interpret the \field{name} fields.
+
+\item Define the commands in both the document and in
+\atentry{preamble}. For example:
+\begin{codeenv}
+\cs{newcommand}\marg{\cmd{set}}[1]\marg{\cs{mathcal}\marg{\idx{param}1}}
+\cs{newcommand}\marg{\cmd{card}}[1]\marg{|\cmd{set}\marg{\idx{param}1}|}
+\gls{GlsXtrLoadResources}\oarg{\csopt[my-data]{src}}
+\end{codeenv}
+Alternatively:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{\csopt[my-data]{src}}
+\cs{providecommand}\marg{\cmd{set}}[1]\marg{\cs{mathcal}\marg{\idx{param}1}}
+\cs{providecommand}\marg{\cmd{card}}[1]\marg{|\cmd{set}\marg{\idx{param}1}|}
+\end{codeenv}
+If the provided definitions match those given in the \ext{bib} file,
+there's no difference. If they don't match then in the first example 
+the document definitions will take precedence (but the interpreter
+will use the \atentry{preamble} definitions) and in the second
+example the \atentry{preamble} definitions will take precedence.
+For example, the document may define \csfmt{card} as:
+\begin{codeenv}
+\cs{newcommand}\marg{\cmd{card}}[1]\marg{\ics{vert}\cmd{set}\marg{\idx{param}1}\cs{vert}}
+\end{codeenv}
+
+\item Make use of \gls{glsxtrfmt} provided by \styfmt{glossaries-extra} which
+allows you to store the name of the formatting command in a field.
+The default is the \field{user1} field, but this can be changed to 
+another field by redefining \ics{GlsXtrFmtField}.
+
+The \ext{bib} file can now look like this:
+\begin{codeenv}
+\atentry{preamble}\marg{\qtdelim{\cs{providecommand}\marg{\cmd{set}}[1]\marg{\cs{mathcal}\marg{\idx{param}1}}
+\cs{providecommand}\marg{\cmd{card}}[1]\marg{|\cmd{set}\marg{\idx{param}1}|}}}
+\strut
+\atentry{symbol}\marg{S,
+  \field{name}=\marg{\marg{}\idx{mshiftchar}\cmd{set}\marg{S}\idx{mshiftchar}},
+  \field{text}=\marg{\cmd{set}\marg{S}},
+  \field{user1}=\marg{set},
+  \field{description}=\marg{a set}
+}
+\atentry{symbol}\marg{cardS,
+  \field{name}=\marg{\marg{}\idx{mshiftchar}\cmd{card}\marg{S}\idx{mshiftchar}},
+  \field{text}=\marg{\cmd{card}\marg{S}},
+  \field{user1}=\marg{card},
+  \field{description}=\marg{the cardinality of \cs{gls}\marg{S}}
+}
+\end{codeenv}
+Within the document, you can format \meta{text} using the formatting
+command provided in the \field{user1} field with:
+\nosecformatdef{glsxtrfmt}
+(which internally uses \ics{glslink}) or
+\nosecformatdef{glsxtrentryfmt}
+which just applies the appropriate formatting command to
+\meta{text}. Version 1.23+ of \sty{glossaries-extra} also provides a
+starred form of the linking command:
+\nosecformatdef{glsxtrfmt*}
+which inserts additional material inside the link text but outside
+the formatting command.
+
+If the entry given by \meta{label} hasn't been defined,
+then \gls!{glsxtrfmt} just does \meta{text} (followed by \meta{insert} for
+the starred version) and a warning is issued. (There's no warning 
+if the entry is defined but the field hasn't been set.)
+The \meta{options} are as for \ics{glslink} but \ics{glslink} will
+actually be using:
+\begin{codeenv}
+\ics{glslink}\oarg{\meta{def-options},\meta{options}}\margm{label}\marg{\cmd{}\meta{csname}\margm{text}\meta{insert}}
+\end{codeenv}
+where the default options \meta{def-options} are given by
+\ics{GlsXtrFmtDefaultOptions}. The default definition of this is
+just \code{noindex} which suppresses the automatic indexing or
+recording action. (See the \sty{glossaries-extra}
+manual~\cite{glossaries-extra} for further details.) The
+\meta{insert} part is omitted for the unstarred form.
+
+This means that the document doesn't need to actually provide
+\verb|\set| or \verb|\card| but can instead use, for example,
+\begin{codeenv}
+\gls{glsxtrfmt}\marg{S}\marg{A}
+\gls{glsxtrentryfmt}\marg{cardS}\marg{B}
+\end{codeenv}
+instead of:
+\begin{verbatim}
+\set{A}
+\card{B}
+\end{verbatim}
+The first \LaTeX\ run will simply ignore the formatting and produce
+a warning.
+
+Since this is a bit cumbersome to write, you can provide shortcut
+commands. For example:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{\csopt[my-data]{src}}
+\cs{newcommand}\marg{\cmd{gset}}[2][]\marg{\gls{glsxtrfmt}\oarg{\idx{param}1}\marg{S}\marg{\idx{param}2}}
+\cs{newcommand}\marg{\cmd{gcard}}[2][]\marg{\gls{glsxtrfmt}\oarg{\idx{param}1}\marg{cardS}\marg{\idx{param}2}}
+\end{codeenv}
+Whilst this doesn't seem a great deal different from simply
+providing the definitions of \csfmt{set} and \csfmt{card} in the
+document, this means you don't have to worry about remembering 
+the names of the actual commands provided in the \ext{bib} file
+(just the entry labels) and the use of \gls{glsxtrfmt} will
+automatically produce a hyperlink to the glossary entry if the
+\isty{hyperref} package has been loaded.
+\end{enumerate}
+
+Here's an alternative \ext{bib} that defines entries with a term, a
+description and a symbol:
+\begin{codeenv}
+\atentry{preamble}\marg{\qtdelim{\cs{providecommand}\marg{\cmd{setfmt}}[1]\marg{\cs{mathcal}\marg{\idx{param}1}}
+\cs{providecommand}\marg{\cmd{cardfmt}}[1]\marg{|\cmd{setfmt}\marg{\idx{param}1}|}}}
+\strut
+\atentry{entry}\marg{set,
+  \field{name}=\marg{set},
+  \field{symbol}=\marg{\cmd{setfmt}\marg{S}},
+  \field{user1}=\marg{setfmt},
+  \field{description}=\marg{collection of values}
+}
+\atentry{entry}\marg{cardinality,
+  \field{name}=\marg{cardinality},
+  \field{symbol}=\marg{\cmd{cardfmt}\marg{S}},
+  \field{user1}=\marg{cardfmt},
+  \field{description}=\marg{the number of elements in the \cs{gls}\marg{set} \idx{mshiftchar}\cs{glssymbol}\marg{set}\idx{mshiftchar}}
+}
+\end{codeenv}
+I've changed the entry labels and the names of the formatting commands.
+The definitions in the document need to reflect the change in label
+but not the change in the formatting commands:
+\begin{codeenv}
+\cs{newcommand}\marg{\cmd{gset}}[2][]\marg{\gls{glsxtrfmt}\oarg{\idx{param}1}\marg{set}\marg{\idx{param}2}}
+\cs{newcommand}\marg{\cmd{gcard}}[2][]\marg{\gls{glsxtrfmt}\oarg{\idx{param}1}\marg{cardinality}\marg{\idx{param}2}}
+\end{codeenv}
+
+Here's another approach that allows for a more complicated argument
+for the cardinality. (For example, if the argument is an expression
+involving set unions or intersections.)
+The \ext{bib} file is now:
+\begin{codeenv}
+\atentry{preamble}\marg{\qtdelim{\cs{providecommand}\marg{\cmd{setfmt}}[1]\marg{\cs{mathcal}\marg{\idx{param}1}}
+\cs{providecommand}\marg{\cmd{cardfmt}}[1]\marg{|\idx{param}1|}}}
+\strut
+\atentry{entry}\marg{set,
+  \field{name}=\marg{set},
+  \field{symbol}=\marg{\cmd{setfmt}\marg{S}},
+  \field{user1}=\marg{setfmt},
+  \field{description}=\marg{collection of values}
+}
+\atentry{entry}\marg{cardinality,
+  \field{name}=\marg{cardinality},
+  \field{symbol}=\marg{\cmd{cardfmt}\marg{\cmd{setfmt}\marg{S}}},
+  \field{user1}=\marg{cardfmt},
+  \field{description}=\marg{the number of elements in the \cs{gls}\marg{set} \idx{mshiftchar}\cs{glssymbol}\marg{set}\idx{mshiftchar}}
+}
+\end{codeenv}
+This has removed the \csfmt{setfmt} command from the definition of
+\csfmt{cardfmt}. Now the definitions in the document are:
+\begin{codeenv}
+\cs{newcommand}\marg{\cmd{gset}}[1]\marg{\gls{glsxtrentryfmt}\marg{set}\marg{\idx{param}1}}
+\cs{newcommand}\marg{\cmd{gcard}}[2][]\marg{\gls{glsxtrfmt}\oarg{\idx{param}1}\marg{cardinality}\marg{\idx{param}2}}
+\end{codeenv}
+This allows for code such as:
+\begin{verbatim}
+\[ \gcard{\gset{A} \cap \gset{B}} \]
+\end{verbatim}
+which will link back to the \code{cardinality} entry in the
+glossary and avoids any hyperlinking with \csfmt{gset}.
+Alternatively to avoid links with \csfmt{gcard} as well:
+\begin{codeenv}
+\cs{newcommand}\marg{\cmd{gset}}[1]\marg{\gls{glsxtrentryfmt}\marg{set}\marg{\idx{param}1}}
+\cs{newcommand}\marg{\cmd{gcard}}[1]\marg{\gls{glsxtrentryfmt}\marg{cardinality}\marg{\idx{param}1}}
+\end{codeenv}
+Now \csfmt{gset} and \csfmt{gcard} are simply formatting commands,
+but their actual definitions are determined in the \ext{bib} file.
+
+\section{Single Entry Types}
+\label{sec:singleentry}
+
+The \glspl{entrytype} described in this section create a single glossary
+definition per entry (from \styfmt{glossaries-extra}'s point of view). 
+For example:
+\begin{codeenv}
+\atentry{entry}\marg{matrix,
+  \field{name}=\marg{matrix},
+  \field{plural}=\marg{matrices},
+  \field{description}=\marg{rectangular array of values}
+}
+\end{codeenv}
+is analogous to:
+\begin{codeenv}
+\gls{newglossaryentry}\marg{matrix}\comment{label}
+\marg{\comment{fields}
+  \field{name}=\marg{matrix},
+  \field{plural}=\marg{matrices},
+  \field{description}=\marg{rectangular array of values}
+}
+\end{codeenv}
+The \csopt{secondary} option allows the creation of a fake glossary
+with the entry labels in its internal list in a different order.
+This means that the same data can be displayed in two separate lists
+without duplicating the resources required by each glossary entry.
+
+\Sectionref{sec:dualentry} describes \bibgls\ \glspl{entrytype}
+that create two separate (but related) \styfmt{glossaries-extra}
+definitions per \ext{bib} entry.
+
+\entrysection{entry}
+
+Regular terms are defined by the \atentry{entry} field. This requires the
+\field{description} field and either \field{name} or \field{parent}.
+For example:
+\begin{codeenv}
+\atentry{preamble}\marg{\qtdelim{\cs{providecommand}\marg{\cmd{mtx}}[1]\marg{\cs{boldsymbol}\marg{\idx{param}1}}}}
+\strut
+\atentry{entry}\marg{matrix,
+  \field{name}=\marg{matrix},
+  \field{plural}=\marg{matrices},
+  \field{description}=\marg{rectangular array of values, denoted \cs{gls}\marg{M}},
+  \field{seealso}=\marg{vector}
+}
+\strut
+\atentry{entry}\marg{M,
+  \field{name}=\marg{\cs{ensuremath}\marg{M}},
+  \field{description}=\marg{a \cs{gls}\marg{matrix}}
+}
+\strut
+\atentry{entry}\marg{vector,
+  \field{name} = \qtdelim{vector},
+  \field{description} = \marg{column or row of values, denoted \cs{gls}\marg{v}},
+  \field{seealso}=\marg{matrix}
+}
+\strut
+\atentry{entry}\marg{v,
+  \field{name}=\marg{\cs{ensuremath}\marg{\cs{vec}\marg{v}}},
+  \field{description}=\marg{a \cs{gls}\marg{vector}}
+}
+\end{codeenv}
+
+If the \field{sort} field is missing the default is obtained from
+the \field{name} field (unless overridden by options like
+\csopt{entry-sort-fallback}). For \hierarchical\ entries, if the
+\field{name} field is omitted it will be obtained from the 
+\glsdisp{parententry}{parent's} \field{name}.
+See \sectionref{sec:fallbacks}.
+
+Terms defined using \atentry{entry} will be written to the output
+(\ext{glstex}) file using the command \gls!{bibglsnewentry}.
+
+\entrysection{symbol}
+
+The \atentry{symbol} \gls{entrytype} is much like \atentry{entry}, but it's
+designed specifically for symbols, so in the previous example, the
+\code{M} and \code{v} terms would be better defined using the
+\atentry{symbol} \gls{entrytype} instead. For example:
+\begin{codeenv}
+\atentry{symbol}\marg{M,
+  \field{name}=\marg{\cs{ensuremath}\marg{M}},
+  \field{description}=\marg{a \cs{gls}\marg{matrix}}
+}
+\end{codeenv}
+
+The required fields are \field{name} or \field{parent}. The
+\field{description} field is required if the \field{name} field is
+missing. If the \field{sort} field is omitted, the default fallback is
+given by the entry label (unless overridden by options like
+\csopt{symbol-sort-fallback}). Note that this is different from
+\atentry{entry} where the sort defaults to \field{name} if omitted.
+See \sectionref{sec:fallbacks}.
+
+Terms that are defined using \atentry{symbol} will be written to
+the output file using the command \gls!{bibglsnewsymbol}.
+
+\entrysection{number}
+
+The \atentry{number} \gls{entrytype} is like \atentry{symbol}, but it's for
+numbers. The numbers don't have to be explicit digits and may have a
+symbolic representation. There's no real difference between the
+behaviour of \atentry{number} and \atentry{symbol} except that terms
+defined using \atentry{number} will be written to the output file
+using the command \gls!{bibglsnewnumber}.
+
+For example, the file \filefmt{constants.bib} might define
+mathematical constants like this:
+\begin{codeenv}
+\atentry{number}\marg{pi,
+   \field{name}=\marg{\cs{ensuremath}\marg{\ics{pi}}},
+   \field{description}=\marg{the ratio of the length of the circumference
+    of a circle to its diameter},
+   \field{user1}=\marg{3.14159}
+}
+\strut
+\atentry{number}\marg{e,
+  \field{name}=\marg{\cs{ensuremath}\marg{e}},
+  \field{description}=\marg{base of natural logarithms},
+  \field{user1}=\marg{2.71828}
+}
+\end{codeenv}
+This stores the approximate value in the \field{user1} field. This
+can be used to sort the entries in numerical order according to the
+values rather than the symbols:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[constants]{src},\comment{constants.bib}
+  \csopt[number]{category},\comment{set the category for all selected entries}
+  \csopt[double]{sort},\comment{numerical double-precision sort}
+  \csopt[user1]{sort-field}\comment{sort according to 'user1' field}
+}
+\end{codeenv}
+The \csopt[number]{category} option makes it easy to adjust the
+glossary format to include the \field{user1} field:
+\begin{codeenv}
+\ics{glsdefpostdesc}\marg{number}\marg{\comment{}
+  \cs{ifglshasfield}\marg{useri}\marg{\cs{glscurrententrylabel}}\comment{}
+  \marg{ (approximate value: \cs{glscurrentfieldvalue})}\comment{}
+  \marg{}\comment{}
+}
+\end{codeenv}
+
+\entrysection{index}
+
+The \atentry{index} \gls{entrytype} is designed for entries that don't
+have a description. Only the label is required. If \field{name} is
+omitted, it's assumed to be the same as the label, even if
+\field{parent} is present. (Note this is different to the fallback
+behaviour of \atentry{entry}, which fetches the name from the 
+\gls{parententry}.) If the name contains any characters that can't be used in
+the label, you must use the \field{name} field. If the \field{sort}
+field is missing the default fallback is obtained from the \field{name}.
+Note that the \atentry{index} \gls{entrytype} is \emph{not} governed by
+\csopt{entry-sort-fallback} (but it is governed by
+\csopt{custom-sort-fallbacks}). This allows \atentry{index} and
+\atentry{entry} to have different fallbacks if the \field{sort}
+field is missing.
+See \sectionref{sec:fallbacks}.
+
+Example:
+\begin{codeenv}
+\atentry{index}\marg{duck}
+\atentry{index}\marg{goose,\field{plural}=\marg{geese}}
+\atentry{index}\marg{sealion,\field{name}=\marg{sea lion}}
+\atentry{index}\marg{facade,\field{name}=\marg{fa\ics{c}\marg{c}ade}}
+\end{codeenv}
+
+Terms that are defined using \atentry{index} will be written to the output
+file using the command \gls!{bibglsnewindex}.
+
+\entrysection{indexplural}
+
+The \atentry{indexplural} \gls{entrytype} is similar to the
+\atentry{index} \gls{entrytype} except that the \field{name} field, if
+missing, is obtained from the \field{plural} field. If the
+\field{plural} field is missing it's obtained from the \field{text}
+field with the plural suffix appended. If the \field{text} field is
+missing, it's obtained from the original entry label. If the
+\field{sort} field is missing the default is obtained from the
+\field{name} field. (As with \atentry{index}, \atentry{indexplural}
+is \emph{not} governed by \csopt{entry-sort-fallback}, but it is
+governed by \csopt{custom-sort-fallbacks}.) 
+See \sectionref{sec:fallbacks}.
+All fields are optional. For example:
+\begin{codeenv}
+\atentry{indexplural}\marg{goose,
+  \field{plural} = \marg{geese}
+}
+\strut
+\atentry{indexplural}\marg{duck}
+\strut
+\atentry{indexplural}\marg{chateau,
+  \field{text} = \marg{ch\ics{cs.circum}ateau},
+  \field{plural} = \marg{ch\cs{cs.circum}ateaux}
+}
+\end{codeenv}
+This is equivalent to:
+\begin{codeenv}
+\atentry{indexplural}\marg{goose,
+  \field{name} = \marg{geese},
+  \field{text} = \marg{goose},
+  \field{plural} = \marg{geese}
+}
+\strut
+\atentry{indexplural}\marg{duck,
+  \field{name} = \marg{ducks},
+  \field{text} = \marg{duck},
+  \field{plural} = \marg{ducks}
+}
+\strut
+\atentry{indexplural}\marg{chateau,
+  \field{name} = \marg{ch\cs{cs.circum}ateaux},
+  \field{text} = {ch\cs{cs.circum}ateau},
+  \field{plural} = {ch\cs{cs.circum}ateaux}
+}
+\end{codeenv}
+
+Terms that are defined using \atentry{indexplural} will be written to the output
+file using the command \gls!{bibglsnewindexplural}.
+
+\entrysection{abbreviation}
+
+The \atentry{abbreviation} \gls{entrytype} is designed for abbreviations.
+The required fields are \field{short} and \field{long}. If the
+\field{sort} key is missing, \bibgls\ will use the field given by
+\csopt{abbreviation-sort-fallback}, which defaults to the \field{short} field.
+(If you want an equivalent of \gls!{newdualentry}, use
+\atentry{dualabbreviationentry} instead.)
+
+If you use \csopt[name]{sort-field} (rather than the default
+\csopt[sort]{sort-field}), then the fallback for the
+\field{name} field is always the \field{short} field, regardless of
+the \csopt{abbreviation-sort-fallback} setting, unless you use
+\csopt{abbreviation-name-fallback} to change the fallback for the
+\field{name} field.
+See \sectionref{sec:fallbacks}.
+
+Note that you must set the abbreviation style before loading the
+resource file to ensure that the abbreviations are defined
+correctly, however \bibgls\ has no knowledge of the abbreviation
+style so it doesn't know if the \field{description} field must be
+included or if the default \field{sort} value isn't simply the value
+of the \field{short} field.
+
+You can instruct \bibgls\ to sort by the \field{long} field instead
+using \csopt[long]{abbreviation-sort-fallback}. You can also tell \bibgls\ to
+ignore certain fields using \csopt{ignore-fields}, so you can
+include a \field{description} field in the \ext{bib} file if
+you sometimes need it, and then instruct \bibgls\ to ignore it when
+you don't want it.
+
+For example:
+\begin{codeenv}
+\atentry{abbreviation}\marg{html,
+  \field{short} = \marg{html},
+  \field{long}  = \marg{hypertext markup language},
+  \field{description} = \marg{a markup language for creating web pages}
+}
+\end{codeenv}
+If you want the \abbrstyle{long-noshort-desc} style, then you can put
+the following in your document (where the \ext{bib} file is called
+\filefmt{entries-abbrv.bib}):
+\begin{codeenv}
+\ics{setabbreviationstyle}\marg{long-noshort-desc}
+\gls{GlsXtrLoadResources}\oarg{\csopt[entries-abbrv]{src},
+ \csopt[long]{abbreviation-sort-fallback}}
+\end{codeenv}
+Whereas, if you want the \abbrstyle{long-short-sc} style, then you can
+instead do:
+\begin{codeenv}
+\cs{setabbreviationstyle}\marg{long-short-sc}
+\gls{GlsXtrLoadResources}\oarg{\csopt[entries-abbrv]{src},\csopt[description]{ignore-fields}}
+\end{codeenv}
+or to convert the short value to \idx{uppercase} and use the
+\abbrstyle{long-short-sm} style instead:
+\begin{codeenv}
+\cs{setabbreviationstyle}\marg{long-short-sm}
+\gls{GlsXtrLoadResources}\oarg{\csopt[entries-abbrv]{src},
+ \csopt[uc]{short-case-change},\comment{convert short value to upper case}
+ \csopt[description]{ignore-fields}}
+\end{codeenv}
+
+Case-changing can be applied with \csopt{short-case-change} to
+convert the case of the \field{short} field, as illustrated above. 
+If you use a style that obtains the \field{description} from the
+\field{long} form, but you want to apply a case-change to the
+\field{description} field with \csopt{description-case-change}, then
+you can copy the \field{long} field to the \field{description} with
+\csopt[\field{long}=\field{description}]{replicate-fields}.
+
+For example, if \filefmt{entries-abbrv.bib} contains:
+\begin{codeenv}
+\atentry{abbreviation}\marg{html,
+  \field{short} = \marg{html},
+  \field{long}  = \marg{hypertext markup language}
+}
+\end{codeenv}
+then the document may include:
+\begin{codeenv}
+\cs{setabbreviationstyle}\marg{long-short-sc}
+\gls{GlsXtrLoadResources}\oarg{\csopt[entries-abbrv]{src},
+ \csopt[firstuc]{description-case-change},
+ \csopt[\field{long}=\field{description}]{replicate-fields}}
+\end{codeenv}
+Note that this can cause a problem for styles that set the
+\field{description} field to the \field{long} form encapsulated by a
+style command (such as with the \abbrstyle{long-em-short-em} style)
+as this will override the style setting.
+
+Similarly, if you want to change the case of the \field{name} field:
+\begin{codeenv}
+\cs{setabbreviationstyle}\marg{long-short-sc}
+\gls{GlsXtrLoadResources}\oarg{\csopt[entries-abbrv]{src},
+ \csopt[firstuc]{description-case-change},
+ \csopt[uc]{name-case-change},
+ \csopt[\field{long}=\field{description},\field{short}=\field{name}]{replicate-fields}}
+\end{codeenv}
+Again, this will lose any custom formatting command that would
+usually be applied by the abbreviation style to the \field{name}
+field (and \field{description}, if applicable).
+
+Terms defined using \atentry{abbreviation} will be written to the output
+file using the command \gls!{bibglsnewabbreviation}.
+
+\entrysection{acronym}
+
+The \atentry{acronym} \gls{entrytype} is like \atentry{abbreviation} except that
+the term is written to the output file using the command
+\gls!{bibglsnewacronym}.
+
+\entrysection{contributor}
+
+The \atentry{contributor} \gls{entrytype} is primarily provided for
+use by the \atentry{bibtexentry} type. You may use it explicitly if
+you want, but you need to take care that it doesn't clash with
+\atentry{bibtexentry}. It behaves much like \atentry{index} except
+that the term is written to the \ext{glstex} file using the command
+\gls!{bibglsnewcontributor}. There are no required fields. As with
+\atentry{index}, if the \field{name} field is missing, the fallback
+value is the entry's label (see \sectionref{sec:fallbacks}). When
+this \gls{entrytype} is automatically created by
+\atentry{bibtexentry}, the \field{name} is set to 
+\begin{codeenv}
+\gls{bibglscontributor}\margm{forenames}\margm{von}\margm{surname}\margm{suffix}
+\end{codeenv}
+
+If you do explicitly use \atentry{contributor} you need to make sure it's
+defined \emph{before} the first instance of \atentry{bibtexentry} that
+tries to access it, but within the same resource set. If you ensure that 
+the label of \atentry{contributor} matches the contributor label generated by
+\atentry{bibtexentry} then they can have their dependency lists
+updated, and
+the \field{bibtexentry} and \field{bibtexentry at entrytype} internal
+fields can be set for the
+\atentry{contributor} entry.  For example:
+\begin{codeenv}
+\atentry{contributor}\marg{KnuthDonaldE,
+  \field{name}=\marg{\gls{bibglscontributor}\marg{Donald E.}\marg{}\marg{Knuth}\marg{}},
+  \field{description}=\marg{Famous mathematician and computer scientist who
+   created \cmd{TeX}}
+}
+\strut
+ at book\marg{texbook,
+  title = \marg{The {\cmd{TeX} book}},
+  author = \marg{Donald E. Knuth},
+  publisher = \marg{Addison-Wesley},
+  year = 1986
+}
+\end{codeenv}
+The resource options then need to include:
+\begin{codeenv}
+ \csopt[\ics{GlsXtrBibTeXEntryAliases}]{entry-type-aliases},
+ \csopt[
+  \marg{[ \cs{cs.string}\csfmt{-}\cs{cs.string}\csfmt{.}]}\marg{}
+ ]{labelify-replace}
+\end{codeenv}
+
+If the \atentry{contributor} entry is deferred until after the
+corresponding \atentry{bibtexentry} then you will end up with a label clash.
+
+\section{Dual Entry Types}
+\label{sec:dualentry}
+
+The \glspl{entrytype} described in this section create two separate (but
+related) \styfmt{glossaries-extra} entry definitions per \ext{bib}
+entry. The first of these entries is considered the
+\igls{primaryentry}, and the second is the \igls{dualentry}.
+The naming scheme is \code{@dual}\meta{entry-type} where both the
+\primary\ and \dual\ are considered to have the same type of entry
+(such as \atentry{dualsymbol} where both the \primary\ and \dual\
+are functionally like \atentry{symbol}) or
+\code{@dual}\meta{primary}\meta{dual} where the \primary\ is
+functionally like \code{@}\meta{primary} and the \dual\ is
+functionally like \code{@}\meta{dual}.
+
+If you need a field to store the \glsdisp{dualentry}{dual}
+description in (and you're not simply swapping known fields around),
+then you can use the special \field{dualdescription} field and add
+it to your map.
+
+If the fields provided by the \isty{glossaries-prefix} are defined,
+there will be additional mappings for the special internal fields
+\field{dualprefix}, \field{dualprefixfirst},
+\field{dualprefixplural}, and \field{dualprefixfirstplural}.
+
+For example:
+\begin{codeenv}
+\atentry{dualabbreviationentry}\marg{svm,
+  \field{short} = \marg{SVM},
+  \field{long} = \marg{support vector machine},
+  \field{description} = \marg{statistical pattern recognition technique}
+}
+\end{codeenv}
+is like:
+\begin{codeenv}
+\atentry{abbreviation}\marg{svm,
+  \field{short} = \marg{SVM},
+  \field{long} = \marg{support vector machine},
+}
+\atentry{entry}\marg{dual.svm,
+  \field{text} = \marg{SVM},
+  \field{name} = \marg{support vector machine},
+  \field{description} = \marg{statistical pattern recognition technique}
+}
+\end{codeenv}
+and is analogous to:
+\begin{codeenv}
+\gls{newabbreviation}\marg{svm}\marg{SVM}\marg{support vector machine}
+\gls{newglossaryentry}\marg{dual.svm}\marg{\field{name}=\marg{support vector machine},\field{text}=\marg{SVM},
+ \field{description}=\marg{statistical pattern recognition technique}}
+\end{codeenv}
+but both entries are considered dependent on each other. This means
+that if you only reference the \gls{primaryentry} (using \ics{gls} etc)
+then the \gls{dualentry} will still be selected if the \csopt{selection}
+setting includes dependencies.
+
+The creation of the \gls{dualentry} involves mapping or copying
+fields from the \gls{primaryentry}. Each \gls{dualentry} type has a
+set of mappings.  If a field in the set of mappings is missing, its
+fallback value is used (see \sectionref{sec:fallbacks}).  Any fields
+that aren't listed in the mappings are simply copied, except for the
+\field{alias} field, which will never be copied to the
+\gls{dualentry}, nor can it be mapped. The alias will only apply to
+the \gls{primaryentry}.  The \gls{dualentry} is given the label
+\meta{prefix}\meta{id} where \meta{prefix} is set by the
+\csopt{dual-prefix} option and \meta{id} is the label supplied in
+the \ext{bib} file.
+
+If \csopt[combine]{dual-sort} then the \glspl{dualentry} will be sorted
+along with the \glspl{primaryentry}, otherwise the \csopt{dual-sort}
+indicates how to sort the dual entries and the dual entries will be
+appended to the end of the \ext{glstex} file. The
+\csopt{dual-sort-field} determines what field to use for the sort
+value if the dual entries should be sorted separately.
+
+Take care if you have a mixture of \glspl{entrytype} (such as 
+\atentry{dualindexentry}, \atentry{dualindexsymbol} 
+and \atentry{index}) and you're not
+using the default \csopt[combine]{dual-sort}. Remember that the
+\glspl{primaryentry} are all sorted together along with the single
+entries types described in \sectionref{sec:dualentry} (but they may
+be assigned to different glossary types), and then the dual entries
+are sorted together (but may be assigned to different glossary
+types). This may result in an odd ordering if some of the primaries
+and some of the duals are assigned to the same glossary. For
+example, don't mix \atentry{dualindexabbreviation} (duals are
+abbreviations) with \atentry{dualabbreviationentry} (primaries
+are abbreviations) when you aren't using \csopt[combine]{dual-sort}
+(unless you have two different glossaries for the \primary\ vs
+\dual\ abbreviations).
+
+Remember that \bibgls\ is designed to take advantage of
+\ics{printunsrtglossary}, which simply iterates over all defined
+entries in the order in which they were defined (or, more precisely,
+the order of the internal list of entry labels associated with that
+glossary). The aim of \bibgls\ is to write the entry definitions to
+the \ext{glstex} file so that the internal list of labels is in the
+appropriate order.
+
+For example, suppose the file \filefmt{entries.bib} contains:
+\begin{codeenv}
+\atentry{index}\marg{aardvark}
+\atentry{index}\marg{mouse}
+\atentry{index}\marg{zebra}
+\atentry{dualindexabbreviation}\marg{xml,
+ \field{short}=\marg{XML},
+ \field{long}=\marg{extensible markup language}
+}
+\atentry{dualabbreviationentry}\marg{ssi,
+  \field{short}=\marg{SSI},
+  \field{long}=\marg{server-side includes},
+  \field{description}=\marg{directives placed in \cs{gls}\marg{html} pages
+   evaluated by the server}
+}
+\atentry{dualindexabbreviation}\marg{html,
+ \field{short}=\marg{HTML},
+ \field{long}=\marg{hypertext markup language}
+}
+\atentry{dualabbreviationentry}\marg{css,
+ \field{short}=\marg{CSS},
+ \field{long}=\marg{cascading stylesheets},
+ \field{description}=\marg{a language that describes the style of an
+  \cs{gls}\marg{html} document}
+}
+\end{codeenv}
+This contains a mixture of \glspl{entrytype}, including
+\atentry{dualindexabbreviation} (where the \dual\ is the
+abbreviation) and \atentry{dualabbreviationentry} (where the
+\primary\ is the abbreviation).
+
+Now consider the following document:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}[\styopt{record},\styopt{abbreviations}]\marg{glossaries-extra}
+\strut
+\gls{GlsXtrLoadResources}\oarg{\csopt[all]{selection},\csopt[entries]{src}}
+\strut
+\cmd{begin}\marg{document}
+\cs{printunsrtglossaries}
+\cmd{end}\marg{document}
+\end{codeenv}
+This uses the default \csopt[combine]{sort}, so all the entries are
+sorted together, resulting in the order: 
+\code{aardvark},
+\code{dual.css},
+\code{css},
+\code{html},
+\code{dual.html},
+\code{mouse},
+\code{dual.ssi},
+\code{ssi},
+\code{xml},
+\code{dual.xml},
+\code{zebra}.
+
+The \LaTeX\ code written to the \iext{glstex} file is essentially
+(but not exactly):
+\begin{codeenv}
+\comment{from \atentry{index}\marg{aardvark}:}
+\gls{newglossaryentry}\marg{aardvark}\marg{\field{name}=\marg{aardvark},\field{description}=\marg{}}
+\strut
+\comment{\dual\ of \atentry{dualabbreviationentry}\marg{css,\ldots}:}
+\gls{newglossaryentry}\marg{dual.css}\marg{\field{name}=\marg{cascading stylesheets},\marg{text}=\marg{CSS},
+ \field{description}=\marg{a language that describes the style of an
+  \cs{glsxtrshort}\marg{html} document}}
+\strut
+\comment{\primary\ of \atentry{dualabbreviationentry}\marg{css,\ldots}:}
+\gls{newabbreviation}\marg{css}\marg{CSS}\marg{cascading stylesheets}
+\strut
+\comment{\primary\ of \atentry{dualindexabbreviation}\marg{html,\ldots}:}
+\gls{newglossaryentry}\marg{html}\marg{\field{name}=\marg{HTML},\field{description}=\marg{}}
+\strut
+\comment{\dual\ of \atentry{dualindexabbreviation}\marg{html,\ldots}:}
+\gls{newabbreviation}\marg{dual.html}\marg{HTML}\marg{hypertext markup language}
+\strut
+\comment{from \atentry{index}\marg{mouse}:}
+\gls{newglossaryentry}\marg{mouse}\marg{\marg{name}=\marg{mouse},\field{description}=\marg{}}
+\strut
+\comment{\dual\ of \atentry{dualabbreviationentry}\marg{ssi,\ldots}:}
+\gls{newglossaryentry}\marg{dual.ssi}\marg{\field{name}=\marg{server-side includes},\field{text}=\marg{SSI},
+ \field{description}=\marg{directives placed in \cs{glsxtrshort}\marg{html} pages
+ evaluated by the server}}
+\strut
+\comment{\primary\ of \atentry{dualabbreviationentry}\marg{ssi,\ldots}:}
+\gls{newabbreviation}\marg{ssi}\marg{SSI}\marg{server-side includes}
+\strut
+\comment{\primary\ of \atentry{dualindexabbreviation}\marg{xml,\ldots}:}
+\gls{newglossaryentry}\marg{xml}\marg{\field{name}=\marg{XML},\field{description}=\marg{}}
+\strut
+\comment{\dual\ of \atentry{dualindexabbreviation}\marg{xml,\ldots}:}
+\gls{newabbreviation}\marg{dual.xml}\marg{XML}\marg{extensible markup language}
+\strut
+\comment{from \atentry{index}\marg{zebra}:}
+\gls{newglossaryentry}\marg{zebra}\marg{\field{name}=\marg{zebra},\field{description}=\marg{}}
+\end{codeenv}
+Since the document uses the \styopt{abbreviations} package option,
+\gls{newabbreviation} automatically assigns the abbreviation 
+to the \code{abbreviations} glossary (created through that package
+option). This means that the \glsdisp{mainglossary}{\code{main} (default) glossary}
+contains the entries (in order): 
+\begin{itemize}
+\item \code{aardvark} (name: aardvark),
+\item \code{dual.css} (name: cascading stylesheets), 
+\item \code{html} (name: HTML),
+\item \code{mouse} (name: mouse), 
+\item \code{dual.ssi} (name: server-side includes), 
+\item \code{xml} (name: XML),
+\item \code{zebra} (name: zebra).
+\end{itemize}
+The \code{abbreviations} glossary contains:
+\begin{itemize}
+\item \code{css} (short: CSS), 
+\item \code{dual.html} (short: HTML),
+\item \code{ssi} (short: SSI), 
+\item \code{dual.xml} (short: XML).
+\end{itemize}
+
+Since all the entries were combined and sorted together, the
+resulting glossaries are both ordered alphabetically (using
+\field{short} for the abbreviations and \field{name} for the rest),
+but note that you need to take care when referencing the
+abbreviations if you want to make use of the abbreviation style. You
+need \verb|\gls{css}| and \verb|\gls{ssi}| for the \primary\ 
+abbreviations created with \atentry{dualabbreviationentry} and
+\verb|\gls{dual.html}| and \verb|\gls{dual.xml}| for the \dual\ 
+abbreviations created with \atentry{dualindexabbreviation}. Also
+the \field{name} of the \primary\slash \dual\ alternative of the
+abbreviations is also inconsistent (short form for \code{html} and
+\code{xml} and long form for \code{dual.css} and \code{dual.ssi}), 
+as different field mappings are used.
+
+If the document is changed so that the \glspl{dualentry} are now
+sorted and written after all the \glspl{primaryentry} have been dealt
+with:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{
+ \csopt[entries]{src},
+ \csopt[letter-nocase]{dual-sort},
+ \csopt[all]{selection}
+}
+\end{codeenv}
+then \bibgls\ first orders the \glsdisp{primaryentry}{primaries}:
+\begin{itemize}
+\item \code{aardvark} (name: aardvark),
+\item \code{css} (short: CSS),
+\item \code{html} (name: HTML),
+\item \code{mouse} (name: mouse),
+\item \code{ssi} (short: SSI),
+\item \code{xml} (name: XML),
+\item \code{zebra} (name: zebra)
+\end{itemize}
+and writes them to the \ext{glstex} file
+(functionally like):
+\begin{codeenv}
+\comment{from \atentry{index}\marg{aardvark}:}
+\gls{newglossaryentry}\marg{aardvark}\marg{\field{name}=\marg{aardvark},\field{description}=\marg{}}
+\strut
+\comment{\primary\ of \atentry{dualabbreviationentry}\marg{css,\ldots}:}
+\gls{newabbreviation}\marg{css}\marg{CSS}\marg{cascading stylesheets}
+\strut
+\comment{\primary\ of \atentry{dualindexabbreviation}\marg{html,\ldots}:}
+\gls{newglossaryentry}\marg{html}\marg{\field{name}=\marg{HTML},\field{description}=\marg{}}
+\strut
+\comment{from \atentry{index}\marg{mouse}:}
+\gls{newglossaryentry}\marg{mouse}\marg{\field{name}=\marg{mouse},\field{description}=\marg{}}
+\strut
+\comment{\primary\ of \atentry{dualabbreviationentry}\marg{ssi,\ldots}:}
+\gls{newabbreviation}\marg{ssi}\marg{SSI}\marg{server-side includes}
+\strut
+\comment{\primary\ of \atentry{dualindexabbreviation}\marg{xml,\ldots}:}
+\gls{newglossaryentry}\marg{xml}\marg{\field{name}=\marg{XML},\field{description}=\marg{}}
+\strut
+\comment{from \atentry{index}\marg{zebra}:}
+\gls{newglossaryentry}\marg{zebra}\marg{\field{name}=\marg{zebra},\field{description}=\marg{}}
+\end{codeenv}
+Then \bibgls\ orders the \glsdisp{dualentry}{duals}:
+\begin{itemize}
+\item \code{dual.css} (name: cascading stylesheets),
+\item \code{dual.html} (short: HTML),
+\item \code{dual.ssi} (name: server-side includes),
+\item \code{dual.xml} (short: XML)
+\end{itemize}
+and writes them to the \ext{glstex} file
+(functionally like):
+\begin{codeenv}
+\comment{\dual\ of \atentry{dualabbreviationentry}\marg{css,\ldots}:}
+\gls{newglossaryentry}\marg{dual.css}\marg{\field{name}=\marg{cascading stylesheets},\field{text}=\marg{CSS},
+ \field{description}=\marg{a language that describes the style of an
+  \cs{glsxtrshort}\marg{html} document}}
+\strut
+\comment{\dual\ of \atentry{dualindexabbreviation}\marg{html,\ldots}:}
+\gls{newabbreviation}\marg{dual.html}\marg{HTML}\marg{hypertext markup language}
+\strut
+\comment{\dual\ of \atentry{dualabbreviationentry}\marg{ssi,\ldots}:}
+\gls{newglossaryentry}\marg{dual.ssi}\marg{\field{name}=\marg{server-side includes},\field{text}=\marg{SSI},
+ \field{description}=\marg{directives placed in \cs{glsxtrshort}\marg{html} pages
+ evaluated by the server}}
+\strut
+\comment{\dual\ of \atentry{dualindexabbreviation}\marg{xml,\ldots}:}
+\gls{newabbreviation}\marg{dual.xml}\marg{XML}\marg{extensible markup language}
+\end{codeenv}
+When the \ext{glstex} file is input (during the next \LaTeX\ run) 
+the entries are defined in the order:
+\begin{enumerate}
+\item \code{aardvark} (type: \code{main}),
+\item \code{css} (type: \code{abbreviations}),
+\item \code{html} (type: \code{main}),
+\item \code{mouse} (type: \code{main}),
+\item \code{ssi} (type: \code{abbreviations}),
+\item \code{xml} (type: \code{main}),
+\item \code{zebra} (type: \code{main}),
+\item \code{dual.css} (type: \code{main}),
+\item \code{dual.html} (type: \code{abbreviations}),
+\item \code{dual.ssi} (type: \code{main}),
+\item \code{dual.xml} (type: \code{abbreviations}).
+\end{enumerate}
+This means that the \glsdisp{mainglossary}{\code{main} glossary's} internal list is in the
+order:
+\begin{itemize}
+\item \code{aardvark} (aardvark),
+\item \code{html} (HTML),
+\item \code{mouse} (mouse),
+\item \code{xml} (XML),
+\item \code{zebra} (zebra), 
+\item \code{dual.css} (cascading stylesheets), 
+\item \code{dual.ssi} (server-side includes)
+\end{itemize}
+and the \code{abbreviations} glossary's internal list is in the order:
+\begin{itemize}
+\item \code{css} (CSS),
+\item \code{ssi} (SSI),
+\item \code{dual.html} (HTML), 
+\item \code{dual.xml} (XML).
+\end{itemize}
+The lists are no longer in alphabetical order as they have a mixture
+of \primary\ and \dual\ entries that were separated before sorting.
+
+The above is a fairly contrived example as it wouldn't make sense
+in a real document to have glossary terms (that include a
+description) mixed with index terms (that don't include a
+description). 
+A better solution would be to use 
+\atentry{tertiaryindexabbreviationentry} instead of
+\atentry{dualabbreviationentry}.
+
+\entrysection{dualentry}
+
+The \atentry{dualentry} \gls{entrytype} is similar to \atentry{entry} but
+actually defines two entries.
+The \gls{dualentry} contains the same information as the \gls{primaryentry}
+but some of the fields are swapped around.
+The default mappings are:
+\begin{itemize}
+\item \field{name} $\mapsto$ \field{description}
+\item \field{plural} $\mapsto$ \field{descriptionplural}
+\item \field{description} $\mapsto$ \field{name}
+\item \field{descriptionplural} $\mapsto$ \field{plural}
+\end{itemize}
+If the prefix fields are defined, then the default mappings
+additionally include:
+\begin{itemize}
+\item \field{prefix} $\mapsto$ \field{dualprefix}
+\item \field{prefixplural} $\mapsto$ \field{dualprefixplural}
+\item \field{prefixfirst} $\mapsto$ \field{dualprefixfirst}
+\item \field{prefixfirstplural} $\mapsto$ \field{dualprefixfirstplural}
+\item \field{dualprefix} $\mapsto$ \field{prefix}
+\item \field{dualprefixplural} $\mapsto$ \field{prefixplural}
+\item \field{dualprefixfirst} $\mapsto$ \field{prefixfirst}
+\item \field{dualprefixfirstplural} $\mapsto$ \field{prefixfirstplural}
+\end{itemize}
+The required fields are as for \atentry{entry}.
+
+For example:
+\begin{codeenv}
+\atentry{dualentry}\marg{child,
+  \field{name}=\marg{child},
+  \field{plural}=\marg{children},
+  \field{description}=\marg{enfant}
+}
+\end{codeenv}
+is like:
+\begin{codeenv}
+\atentry{entry}\marg{child,
+  \field{name}=\marg{child},
+  \field{plural}=\marg{children},
+  \field{description}=\marg{enfant}
+  \field{descriptionplural}=\marg{enfants}
+}
+\strut
+\atentry{entry}\marg{dual.child,
+  \field{description}=\marg{child},
+  \field{descriptionplural}=\marg{children},
+  \field{name}=\marg{enfant}
+  \field{plural}=\marg{enfants}
+}
+\end{codeenv}
+where \idprefix{dual} is replaced by the value of the
+\csopt{dual-prefix} option. However, instead of defining the entries
+with \csfmt{bibglsnewentry} both the \primary\ and \dual\ entries are
+defined using \gls!{bibglsnewdualentry}. The \field{category} 
+and \field{type} fields can be set for the \gls{dualentry} using the
+\csopt{dual-category} and \csopt{dual-type} options.
+
+For example:
+\begin{codeenv}
+\cs{newglossary*}\marg{english}\marg{English}
+\cs{newglossary*}\marg{french}\marg{French}
+\strut
+\gls{GlsXtrLoadResources}\oarg{
+ \csopt[entries-dual]{src},\comment{data in entries-dual.bib}
+ \csopt[english]{type},\comment{put \glspl{primaryentry} in glossary 'english'}
+ \csopt[french]{dual-type},\comment{put \glspl{dualentry} in glossary 'french'}
+ \csopt[dictionary]{category},\comment{set the \primary\ category to 'dictionary'}
+ \csopt[dictionary]{dual-category},\comment{set the \dual\ category to 'dictionary'}
+ \csopt[en]{sort},\comment{sort \glspl{primaryentry} according to language 'en'}
+ \csopt[fr]{dual-sort}\comment{sort \glspl{dualentry} according to language 'fr'}
+}
+\end{codeenv}
+
+If you need to keep the same name but have different descriptions
+then you can use \field{dualdescription} and set up a mapping to use
+it. For example:
+\begin{codeenv}
+\atentry{dualentry}\marg{sample,
+  \field{name}=\marg{sample},
+  \field{description}=\marg{\primary\ sample description},
+  \field{dualdescription}=\marg{\dual\ sample description}
+}
+\end{codeenv}
+The mapping can then be:
+\begin{codeenv}
+\csopt[\marg{\field{description}},
+  \marg{\field{dualdescription}}]{dual-entry-map}
+\end{codeenv}
+
+\entrysection{dualindexentry}
+
+There are no required fields.  The \gls{primaryentry} behaves like
+\atentry{index} and the \gls{dualentry} behaves
+like \atentry{entry}.  The default field mapping is:
+\begin{itemize}
+\item \field{name} $\mapsto$ \field{name}
+\end{itemize}
+If the prefix fields are defined, then the default mappings
+additionally include:
+\begin{itemize}
+\item \field{prefix} $\mapsto$ \field{dualprefix}
+\item \field{prefixplural} $\mapsto$ \field{dualprefixplural}
+\item \field{prefixfirst} $\mapsto$ \field{dualprefixfirst}
+\item \field{prefixfirstplural} $\mapsto$ \field{dualprefixfirstplural}
+\item \field{dualprefix} $\mapsto$ \field{prefix}
+\item \field{dualprefixplural} $\mapsto$ \field{prefixplural}
+\item \field{dualprefixfirst} $\mapsto$ \field{prefixfirst}
+\item \field{dualprefixfirstplural} $\mapsto$ \field{prefixfirstplural}
+\end{itemize}
+This doesn't actually perform any swapping of fields, but it
+provides the field used for backlinks (if
+\csopt{dual-indexentry-backlink} is set). The reason that the
+\primary\ (rather than the \dual) is like \atentry{index} is to allow the
+primaries to merge with any \atentry{index} entries found in the
+resource set, since glossary entries with descriptions are likely to 
+be a subset of all indexed entries.
+
+If no \field{name} is given, the \gls{dualentry} is assigned the
+(unprefixed) entry label. For example:
+\begin{codeenv}
+\atentry{dualindexentry}\marg{array,
+  \field{description}=\marg{ordered list of values}
+}
+\end{codeenv}
+This is effectively like:
+\begin{codeenv}
+\atentry{index}\marg{array}
+\strut
+\atentry{entry}\marg{dual.array,
+  \field{name}=\marg{array},
+  \field{description}=\marg{ordered list of values}
+}
+\end{codeenv}
+The \glspl{primaryentry} are defined using
+\gls!{bibglsnewdualindexentry},
+which by default sets the \field{category} to \optfmt{index}
+(although this may be overridden, for example, by the \csopt{category} option).
+The \glspl{dualentry} are defined with
+\gls!{bibglsnewdualindexentrysecondary}.
+
+This is the most convenient way of having an entry that's also
+automatically indexed. For example, suppose the file
+\filefmt{terms.bib} contains:
+\begin{codeenv}
+\atentry{index}\marg{duck}
+\atentry{index}\marg{zebra}
+\atentry{index}\marg{aardvark}
+\end{codeenv}
+and suppose the file \filefmt{entries.bib} contains:
+\begin{codeenv}
+\atentry{dualindexentry}\marg{array,
+  \field{description}=\marg{ordered list of values}
+}
+\strut
+\atentry{dualindexentry}\marg{vector,
+  \field{name}=\marg{vector},
+  \field{description}=\marg{column or row of values}
+}
+\strut
+\atentry{dualindexentry}\marg{set,
+  \field{description}=\marg{collection of values}
+}
+\strut
+\atentry{dualindexentry}\marg{matrix,
+  \field{plural}=\marg{matrices},
+  \field{description}=\marg{rectangular array of values}
+}
+\end{codeenv}
+These entries can be used in an example document that has an 
+index and a glossary:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}[colorlinks]\marg{hyperref}
+\cmd{usepackage}[\styopt{record},\styopt{index},\styopt[mcols]{stylemods}]\marg{glossaries-extra}
+\strut
+\gls{GlsXtrLoadResources}\oarg{
+ \csopt[terms,entries]{src},
+ \csopt[index]{type},
+ \csopt[idx.]{label-prefix},
+ \csopt[gls.]{dual-prefix},
+ \csopt[primary]{combine-dual-locations},
+ \csopt[main]{dual-type}
+}
+\strut
+\cmd{begin}\marg{document}
+\cs{gls}\marg{gls.array}, \cs{gls}\marg{gls.vector}, \cs{gls}\marg{gls.set}, \cs{gls}\marg{gls.matrix}.
+\strut
+\cs{gls}\marg{idx.duck}, \cs{gls}\marg{idx.aardvark}, \cs{gls}\marg{idx.zebra}.
+\strut
+\cs{renewcommand}\marg{\cs{glstreenamefmt}}[1]\marg{\ics{textsc}\marg{\idx{param}1}}
+\cs{printunsrtglossary}\oarg{\printglossopt[main]{type},\printglossopt[index]{style},\iprintglossopt{nogroupskip}}
+\strut
+\cs{renewcommand}\marg{\cs{glstreenamefmt}}[1]\marg{\idx{param}1}
+\cs{renewcommand}\marg{\cs{glstreegroupheaderfmt}}[1]\marg{\cs{textbf}\marg{\idx{param}1}}
+\cs{printunsrtglossary}\oarg{\printglossopt[index]{type},\printglossopt[mcolindexgroup]{style}}
+\cmd{end}\marg{document}
+\end{codeenv}
+This uses \csopt{combine-dual-locations} to combine the \glspl{location}
+for the \primary\ and \dual\ entries so that they only appear in the
+index.
+
+To avoid the inconvenience of remembering which prefix to use, you can
+set up the prefixes with \ics{glsxtraddlabelprefix} and reference entries
+with \ics{dgls}, \ics{dGls} etc instead of \cs{gls}, \cs{Gls} etc.
+
+\entrysection{dualindexabbreviation}
+
+The \atentry{dualindexabbreviation} \gls{entrytype} is similar to 
+\atentry{dualindexentry} and again, by default, the
+field mapping is:
+\begin{itemize}
+\item \field{name} $\mapsto$ \field{name}
+\end{itemize}
+If the prefix fields are defined, then the default mappings
+additionally include:
+\begin{itemize}
+\item \field{prefix} $\mapsto$ \field{dualprefix}
+\item \field{prefixplural} $\mapsto$ \field{dualprefixplural}
+\item \field{prefixfirst} $\mapsto$ \field{dualprefixfirst}
+\item \field{prefixfirstplural} $\mapsto$ \field{dualprefixfirstplural}
+\item \field{dualprefix} $\mapsto$ \field{prefix}
+\item \field{dualprefixplural} $\mapsto$ \field{prefixplural}
+\item \field{dualprefixfirst} $\mapsto$ \field{prefixfirst}
+\item \field{dualprefixfirstplural} $\mapsto$ \field{prefixfirstplural}
+\end{itemize}
+However in this case the required fields are \field{short} and
+\field{long}. The \field{name} for the \gls{primaryentry} defaults to
+\field{short} if omitted. (This may be changed with the
+\csopt{abbreviation-name-fallback} option.) The fallback for the
+\field{sort} field is given by \csopt{abbreviation-sort-fallback},
+which defaults to the \field{short} field (see \sectionref{sec:fallbacks}).
+
+For example:
+\begin{codeenv}
+\atentry{dualindexabbreviation}\marg{html,
+  \field{short} = \marg{HTML},
+  \field{long}  = \marg{hypertext markup language}
+}
+\end{codeenv}
+is like:
+\begin{codeenv}
+\atentry{index}\marg{html,\field{name}=\marg{HTML}}
+\strut
+\atentry{abbreviation}\marg{dual.html,
+  \field{short} = \marg{HTML},
+  \field{long}  = \marg{hypertext markup language}
+}
+\end{codeenv}
+The \primary\ term is defined using
+\gls!{bibglsnewdualindexabbreviation}, which encapsulates the
+\field{name} to match the font used by
+the \dual\ abbreviation. The encapsulation command depends
+on the \csopt{abbreviation-name-fallback} value. If it's
+the \field{short} field then \gls{bibglsuseabbrvfont} is
+used, otherwise \gls{bibglsuselongfont} is used.
+
+The \primary\ definition also
+by default sets the \field{category} to \optfmt{index} (although
+this again may be overridden).
+The \dual\ term is defined using
+\gls!{bibglsnewdualindexabbreviationsecondary}.
+
+\entrysection{dualindexsymbol}
+
+The \atentry{dualindexsymbol} \gls{entrytype} is similar to 
+\atentry{dualindexentry}, but by default the
+field mappings are:
+\begin{itemize}
+\item \field{symbol} $\mapsto$ \field{name}
+\item \field{name} $\mapsto$ \field{symbol}
+\item \field{symbolplural} $\mapsto$ \field{plural}
+\item \field{plural} $\mapsto$ \field{symbolplural}
+\end{itemize}
+If the prefix fields are defined, then the default mappings
+additionally include:
+\begin{itemize}
+\item \field{prefix} $\mapsto$ \field{dualprefix}
+\item \field{prefixplural} $\mapsto$ \field{dualprefixplural}
+\item \field{prefixfirst} $\mapsto$ \field{dualprefixfirst}
+\item \field{prefixfirstplural} $\mapsto$ \field{dualprefixfirstplural}
+\item \field{dualprefix} $\mapsto$ \field{prefix}
+\item \field{dualprefixplural} $\mapsto$ \field{prefixplural}
+\item \field{dualprefixfirst} $\mapsto$ \field{prefixfirst}
+\item \field{dualprefixfirstplural} $\mapsto$ \field{prefixfirstplural}
+\end{itemize}
+The required field is: \field{symbol}.
+If the \field{name} field is omitted, the \dual\ entry is assigned a
+symbol from the original (unprefixed) label.
+The \glspl{primaryentry} are defined using
+\gls!{bibglsnewdualindexsymbol},
+which by default sets the \field{category} to \optfmt{index},
+and the \glspl{dualentry} are defined using
+\gls!{bibglsnewdualindexsymbolsecondary},
+which by default sets the \field{category} to \optfmt{symbol}.
+For example:
+\begin{codeenv}
+\atentry{dualindexsymbol}\marg{pi,
+  \field{symbol}=\marg{\cs{ensuremath}\marg{\ics{pi}}},
+  \field{description}=\marg{ratio of a circle's circumference to its diameter}
+}
+\end{codeenv}
+is like:
+\begin{codeenv}
+\atentry{index}\marg{pi,\field{symbol}=\marg{\cs{ensuremath}\marg{\cs{pi}}}}
+\strut
+\atentry{symbol}\marg{dual.pi,
+  \field{name}=\marg{\cs{ensuremath}\marg{\cs{pi}}},
+  \field{symbol}=\marg{pi},
+  \field{description}=\marg{ratio of a circle's circumference to its diameter}
+}
+\end{codeenv}
+
+For example, suppose I have a file called \filefmt{symbols.bib} that
+contains:
+\begin{codeenv}
+\atentry{dualindexsymbol}\marg{pi,
+  \field{symbol}=\marg{\cs{ensuremath}\marg{\cs{pi}}},
+  \field{description}=\marg{ratio of a circle's circumference to its diameter}
+}
+\strut
+\atentry{dualindexsymbol}\marg{e,
+  \field{name}=\marg{Euler's number},
+  \field{symbol}=\marg{\cs{ensuremath}\marg{e}},
+  \field{description}=\marg{base of the natural logarithm}
+}
+\end{codeenv}
+Then the previous example document can be modified to have an index,
+a glossary and a list of symbols:
+\begin{codeenv}
+\cmd{documentclass}\marg{report}
+\strut
+\cmd{usepackage}[colorlinks]\marg{hyperref}
+\cmd{usepackage}[\styopt{record},\styopt{symbols},\styopt{index},\styopt[mcols]{stylemods}]\marg{glossaries-extra}
+\strut
+\cs{newcommand}\marg{\gls{bibglsnewdualindexsymbolsecondary}}[5]\marg{\comment{}
+  \cs{longnewglossaryentry*}\marg{\idx{param}1}\marg{\field{name}=\marg{\idx{param}3},\field{category}=symbol,\comment{}
+    \field{symbol}=\marg{\idx{param}4},\idx{param}2,\field{type}=\marg{symbols}}\marg{\idx{param}5}\comment{}
+}
+\strut
+\cs{newcommand}\marg{\cmd{indexprimary}}[1]\marg{\ics{glsadd}\oarg{\glsaddopt[\encap{hyperbf}]{format}}\marg{idx.\idx{param}1}}
+\strut
+\cs{glsdefpostdesc}\marg{symbol}\marg{\cmd{indexprimary}\marg{\cs{glscurrententrylabel}}}
+\cs{glsdefpostdesc}\marg{general}\marg{\cmd{indexprimary}\marg{\cs{glscurrententrylabel}}}
+\strut
+\gls{GlsXtrLoadResources}\oarg{
+ \csopt[entries,terms,symbols]{src},
+ \csopt[index]{type},
+ \csopt{set-widest},
+ \csopt[idx.]{label-prefix},
+ \csopt[\empty]{dual-prefix},
+ \csopt[primary]{combine-dual-locations},
+ \csopt[letter-case]{dual-sort},
+ \csopt[main]{dual-type}
+}
+\strut
+\gls{glsxtrnewglslike}\oarg{\glsopt[false]{hyper}}\marg{idx.}\marg{\cmd{idx}}\marg{\cmd{idxpl}}\marg{\cmd{Idx}}\marg{\cmd{Idxpl}}
+\strut
+\cmd{begin}\marg{document}
+\cs{gls}\marg{array}, \cs{gls}\marg{vector}, \cs{gls}\marg{set}, \cs{glspl}\marg{matrix}.
+\cmd{idx}\marg{duck}, \cmd{idx}\marg{aardvark}, \cmd{idx}\marg{zebra}.
+\cs{gls}\marg{e} and \cs{gls}\marg{pi}.
+\strut
+\cmd{newpage}
+\cs{gls}\marg{array}, \cmd{idx}\marg{vector}, \cmd{idx}\marg{set}, \cs{gls}\marg{matrix}.
+\strut
+\cmd{newpage}
+\cs{gls}\marg{array}, \cs{gls}\marg{vector}, \cs{gls}\marg{set}, \cs{gls}\marg{matrix}.
+\strut
+\cs{renewcommand}\marg{\cs{glstreenamefmt}}[1]\marg{\cs{textsc}\marg{\idx{param}1}}
+\cs{printunsrtglossary}\oarg{\printglossopt[main]{type},\printglossopt{nogroupskip},\printglossopt[\glostyle{alttree}]{style}}
+\strut
+\cs{renewcommand}\marg{\cs{glstreenamefmt}}[1]\marg{\idx{param}1}
+\cs{printunsrtglossary}\oarg{\printglossopt[symbols]{type},\printglossopt{nogroupskip},\printglossopt[index]{style}}
+\strut
+\cs{renewcommand}\marg{\cs{glstreenamefmt}}[1]\marg{\idx{param}1}
+\cs{renewcommand}\marg{\cs{glstreegroupheaderfmt}}[1]\marg{\cs{textbf}\marg{\idx{param}1}}
+\cs{printunsrtglossary}\oarg{\printglossopt[index]{type},\printglossopt[\glostyle{mcolindexgroup}]{style}}
+\strut
+\cmd{end}\marg{document}
+\end{codeenv}
+Here I've provided some convenient commands for referencing the
+\primary\ (index) terms (\csfmt{idx}, \csfmt{idxpl}, \csfmt{Idx}
+and \csfmt{Idxpl}). This means I don't need to worry about the
+label prefix and it also switches off the hyperlinks (with 
+\code{\glsopt[false]{hyper}}). These custom
+commands are defined using:
+\nosecformatdef{glsxtrnewglslike}
+which, in this case, essentially does:
+\begin{codeenv}
+\cs{newcommand}\marg{\cmd{idx}}[2][]\marg{\cs{gls}\oarg{\glsopt[false]{hyper},\idx{param}1}\marg{idx.\idx{param}2}}
+\cs{newcommand}\marg{\cmd{Idx}}[2][]\marg{\cs{Gls}\oarg{\glsopt[false]{hyper},\idx{param}1}\marg{idx.\idx{param}2}}
+\cs{newcommand}\marg{\cmd{idxpl}}[2][]\marg{\cs{glspl}\oarg{\glsopt[false]{hyper},\idx{param}1}\marg{idx.\idx{param}2}}
+\cs{newcommand}\marg{\cmd{Idxpl}}[2][]\marg{\cs{Glspl}\oarg{\glsopt[false]{hyper},\idx{param}1}\marg{idx.\idx{param}2}}
+\end{codeenv}
+but the new commands will also recognise the \ics{gls} modifiers, so
+\verb|\idx+| will behave like \verb|\gls+| which wouldn't be
+possible if \csfmt{idx} was defined using \ics{newcommand} in the
+above manner. There's a similar command:
+\nosecformatdef{glsxtrnewgls}
+if no case-changing versions are required.
+
+I've also redefined \gls!{bibglsnewdualindexsymbolsecondary} to put
+the dual entries created with \atentry{dualindexsymbol} into
+the \code{symbols} glossary (which is created with the
+\styopt{symbols} package option), so it overrides the
+\csopt[main]{dual-type} setting.
+
+This command also sets the \field{category}
+to \code{symbol}, so I can redefine the post-description hook
+for symbols (\ics{glsxtrpostdescsymbol}) to automatically index 
+the symbol definition. Similarly for the \code{general}
+post-description hook \ics{glsxtrpostdescgeneral}. 
+
+Since the post-description hook isn't done until the glossary has
+been created, this requires a slightly longer build process. If the
+document file is called \filefmt{myDoc.tex}, then the complete
+document build is:
+\begin{verbatim}
+pdflatex myDoc
+bib2gls -g myDoc
+pdflatex myDoc
+bib2gls -g myDoc
+pdflatex myDoc
+\end{verbatim}
+
+As from \sty{glossaries-extra-bib2gls} version 1.37, an alternative
+method is to identify possible label prefixes with
+\ics{glsxtraddlabelprefix} or \ics{glsxtrprependlabelprefix} and use
+\ics{dgls}, \ics{dglspl}, \ics{dGls} or \ics{dGlspl}. See the
+\styfmt{glossaries-extra} user manual~\cite{glossaries-extra} for
+further details.
+
+\entrysection{dualindexnumber}
+
+The \atentry{dualindexnumber} \gls{entrytype} is almost identical to
+\atentry{dualindexsymbol}, but the \glspl{primaryentry} are defined using
+\gls!{bibglsnewdualindexnumber},
+which by default sets the \field{category} to \optfmt{index},
+and the \glspl{dualentry} are defined using
+\gls!{bibglsnewdualindexnumbersecondary},
+which by default sets the \field{category} to \optfmt{number}.
+
+\entrysection{dualabbreviationentry}
+
+The \atentry{dualabbreviationentry} \gls{entrytype} is similar to 
+\atentry{dualentry}, but by default the
+field mappings are:
+\begin{itemize}
+\item \field{long} $\mapsto$ \field{name}
+\item \field{longplural} $\mapsto$ \field{plural}
+\item \field{short} $\mapsto$ \field{text}
+\end{itemize}
+If the prefix fields are defined, then the default mappings
+additionally include:
+\begin{itemize}
+\item \field{prefix} $\mapsto$ \field{dualprefix}
+\item \field{prefixplural} $\mapsto$ \field{dualprefixplural}
+\item \field{prefixfirst} $\mapsto$ \field{dualprefixfirst}
+\item \field{prefixfirstplural} $\mapsto$ \field{dualprefixfirstplural}
+\item \field{dualprefix} $\mapsto$ \field{prefix}
+\item \field{dualprefixplural} $\mapsto$ \field{prefixplural}
+\item \field{dualprefixfirst} $\mapsto$ \field{prefixfirst}
+\item \field{dualprefixfirstplural} $\mapsto$ \field{prefixfirstplural}
+\end{itemize}
+You may need to add a mapping from \field{shortplural} to
+\field{plural} if the default is inappropriate.
+(In \bibgls\ version 1.0 this \gls{entrytype} was originally called
+\atentry{dualentryabbreviation}. In version 1.1, it was renamed
+\atentry{dualabbreviationentry} which makes for a more consistent naming scheme
+\code{@dual}\meta{primary}\meta{dual}.)
+
+The required fields are: \field{short}, \field{long} and
+\field{description}. This \gls{entrytype} is designed to emulate the
+example \gls{newdualentry} command given in the \sty{glossaries}
+user manual~\cite{glossaries}. The \gls{primaryentry} is an abbreviation with the given
+\field{short} and \field{long} fields (but not the 
+\field{description}) and the secondary entry is a regular entry with
+the \field{name} copied from the \field{long} field.
+The fallback for the \field{sort} is given by
+\csopt{abbreviation-sort-fallback}, which defaults to the
+\field{short} field (see \sectionref{sec:fallbacks}).
+
+For example:
+\begin{codeenv}
+\atentry{dualabbreviationentry}\marg{svm,
+   \field{long} = \marg{support vector machine},
+   \field{short} = \marg{SVM},
+   \field{description} = \marg{statistical pattern recognition technique}
+}
+\end{codeenv}
+is rather like doing:
+\begin{codeenv}
+\atentry{abbreviation}\marg{svm,
+   \field{long} = \marg{support vector machine},
+   \field{short} = \marg{SVM}
+}
+\strut
+\atentry{entry}\marg{dual.svm,
+   \field{name} = \marg{support vector machine},
+   \field{description} = \marg{statistical pattern recognition technique}
+}
+\end{codeenv}
+but \code{dual.svm} will automatically be selected if \code{svm}
+is indexed in the document. If \code{dual.svm} isn't explicitly
+indexed, it won't have a \gls{locationlist}.
+
+If the \field{sort} field is missing \bibgls\ by default falls back
+on the \field{name} field. If this is missing, this sort value will
+fallback on the \field{short} field. This means that if \field{name}
+isn't explicitly given in \atentry{dualabbreviationentry}, then the 
+\gls{primaryentry} will be sorted according to \field{short} but the
+\dual\ will be sorted according its \field{name} (which has been copied
+from the \primary\ \field{long}).
+
+Entries provided using \atentry{dualabbreviationentry} will be defined
+with:
+\begin{codeenv}
+\gls{bibglsnewdualabbreviationentry}
+\end{codeenv}
+(which uses \gls{newabbreviation}) for the \glspl{primaryentry} and with :
+\begin{codeenv}
+\gls{bibglsnewdualabbreviationentrysecondary}
+\end{codeenv}
+(which uses \gls{longnewglossaryentry}) for the secondary entries.
+This means that if the \styopt{abbreviations} package option is
+used, the \gls{primaryentry} will be put in the
+\optfmt{abbreviations} glossary and the secondary entry in the
+\mainglossary\.  Use the \csopt{type} and \csopt{dual-type} options
+to override this.
+
+\entrysection{dualentryabbreviation}
+
+This \gls{entrytype} is deprecated as from \bibgls\ version 1.1. It's functionally
+equivalent to \atentry{dualabbreviationentry} but its name
+doesn't fit the general dual entry naming scheme.
+
+\entrysection{dualsymbol}
+
+This is like \atentry{dualentry} but the default mappings are:
+\begin{itemize}
+\item \field{name} $\mapsto$ \field{symbol}
+\item \field{plural} $\mapsto$ \field{symbolplural}
+\item \field{symbol} $\mapsto$ \field{name}
+\item \field{symbolplural} $\mapsto$ \field{plural}
+\end{itemize}
+If the prefix fields are defined, then the default mappings
+additionally include:
+\begin{itemize}
+\item \field{prefix} $\mapsto$ \field{dualprefix}
+\item \field{prefixplural} $\mapsto$ \field{dualprefixplural}
+\item \field{prefixfirst} $\mapsto$ \field{dualprefixfirst}
+\item \field{prefixfirstplural} $\mapsto$ \field{dualprefixfirstplural}
+\item \field{dualprefix} $\mapsto$ \field{prefix}
+\item \field{dualprefixplural} $\mapsto$ \field{prefixplural}
+\item \field{dualprefixfirst} $\mapsto$ \field{prefixfirst}
+\item \field{dualprefixfirstplural} $\mapsto$ \field{prefixfirstplural}
+\end{itemize}
+The \field{name} and \field{symbol} fields are required.
+For example:
+\begin{codeenv}
+\atentry{dualsymbol}\marg{pi,
+   \field{name}=\marg{pi},
+   \field{symbol}=\marg{\cs{ensuremath}\marg{\cs{pi}}},
+   \field{description}=\marg{the ratio of the length of the circumference
+    of a circle to its diameter}
+}
+\end{codeenv}
+
+Entries are defined using \gls!{bibglsnewdualsymbol}, which by 
+default sets the \field{category} to \optfmt{symbol}.
+
+\entrysection{dualnumber}
+
+This is almost identical to \atentry{dualsymbol} but entries are
+defined using \gls!{bibglsnewdualnumber}, which by default sets
+the \field{category} to \optfmt{number}.
+
+The above example could be defined as a number since $\pi$ is a
+constant:
+\begin{codeenv}
+\atentry{dualnumber}\marg{pi,
+   \field{name}=\marg{pi},
+   \field{symbol}=\marg{\cs{ensuremath}\marg{\cs{pi}}},
+   \field{description}=\marg{the ratio of the length of the circumference
+    of a circle to its diameter},
+   \field{user1}=\marg{3.14159}
+}
+\end{codeenv}
+
+This has stored the approximate value in the \field{user1} field.
+The post-description hook could then be adapted to show this.
+\begin{codeenv}
+\cs{glsdefpostdesc}\marg{number}\marg{\comment{}
+  \cs{ifglshasfield}\marg{useri}\marg{\cs{glscurrententrylabel}}
+  \marg{ (approximate value: \cs{glscurrentfieldvalue})}\comment{}
+  \marg{}\comment{}
+}
+\end{codeenv}
+
+This use of the \field{user1} field means that the dual entries
+could be sorted numerically according to the approximate value:
+\begin{codeenv}
+\cmd{usepackage}[\styopt{record},\styopt{postdot},\styopt{numbers},\styopt[index]{style}]\marg{glossaries-extra}
+\strut
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[entries]{src},\comment{entries.bib}
+  \csopt[numbers]{dual-type},
+  \csopt[double]{dual-sort},\comment{decimal sort}
+  \csopt[user1]{dual-sort-field}
+}
+\end{codeenv}
+
+\entrysection{dualabbreviation}
+
+The \atentry{dualabbreviation} \gls{entrytype} is similar to 
+\atentry{dualentry}, but by default the
+field mappings are:
+\begin{itemize}
+\item \field{short} $\mapsto$ \field{dualshort}
+\item \field{shortplural} $\mapsto$ \field{dualshortplural}
+\item \field{long} $\mapsto$ \field{duallong}
+\item \field{longplural} $\mapsto$ \field{duallongplural}
+\item \field{dualshort} $\mapsto$ \field{short}
+\item \field{dualshortplural} $\mapsto$ \field{shortplural}
+\item \field{duallong} $\mapsto$ \field{long}
+\item \field{duallongplural} $\mapsto$ \field{longplural}
+\end{itemize}
+If the prefix fields are defined, then the default mappings
+additionally include:
+\begin{itemize}
+\item \field{prefix} $\mapsto$ \field{dualprefix}
+\item \field{prefixplural} $\mapsto$ \field{dualprefixplural}
+\item \field{prefixfirst} $\mapsto$ \field{dualprefixfirst}
+\item \field{prefixfirstplural} $\mapsto$ \field{dualprefixfirstplural}
+\item \field{dualprefix} $\mapsto$ \field{prefix}
+\item \field{dualprefixplural} $\mapsto$ \field{prefixplural}
+\item \field{dualprefixfirst} $\mapsto$ \field{prefixfirst}
+\item \field{dualprefixfirstplural} $\mapsto$ \field{prefixfirstplural}
+\end{itemize}
+The required fields are: \field{short}, \field{long}, 
+\field{dualshort} and \field{duallong}.
+This includes some new fields: \field{dualshort},
+\field{dualshortplural}, \field{duallong} and
+\field{duallongplural}. If these aren't already defined, they
+will be provided in the \iext{glstex} file with
+\begin{codeenv}
+\ics{glsxtrprovidestoragekey}\margm{key}\marg{}\marg{}
+\end{codeenv}
+Note that this use with an empty third argument prevents
+the creation of a field access command (analogous to
+\ics{glsentrytext}). The value can be accessed with
+\ics{glsxtrusefield} instead. Remember that the field won't be
+available until the \ext{glstex} file has been created.
+
+Note that \bibgls\ doesn't know what abbreviation styles
+are in used, so if the \field{sort} field is missing
+it will fallback on the \field{short} field. If the abbreviations
+need to be sorted according to the \field{long} field instead,
+use \csopt[long]{abbreviation-sort-fallback} (see \sectionref{sec:fallbacks}).
+
+Terms that are defined using \atentry{dualabbreviation} will be
+written to the output file using \gls!{bibglsnewdualabbreviation}.
+
+If the \csopt{dual-abbrv-backlink} option is on, the default field
+used for the backlinks is the \field{dualshort} field, so you'll need
+to make sure you adapt the glossary style to show that field. The
+simplest way to do this is through the category \idx{postdescriptionhook}.
+
+For example, if the entries all have the \field{category} set
+to \optfmt{abbreviation}, then this requires redefining
+\ics{glsxtrpostdescabbreviation} (either with \cs{renewcommand}
+or via \cs{glsdefpostdesc}).
+
+Here's an example dual abbreviation for a document where English is
+the primary language and German is the secondary language:
+\begin{codeenv}
+\atentry{dualabbreviation}\marg{rna,
+  \field{short}=\marg{RNA},
+  \field{dualshort}=\marg{RNS},
+  \field{long}=\marg{ribonucleic acid},
+  \field{duallong}=\marg{Ribonukleins\"aure}
+}
+\end{codeenv}
+If the abbreviation is in the file called
+\filefmt{entries-dual-abbrv.bib}, then here's an example document:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}[T1]\marg{fontenc}
+\cmd{usepackage}[utf8]\marg{inputenc}
+\strut
+\cmd{usepackage}[ngerman,main=english]\marg{babel}
+\cmd{usepackage}[colorlinks]\marg{hyperref}
+\cmd{usepackage}[\styopt{record},\styopt{nomain}]\marg{glossaries-extra}
+\strut
+\cs{newglossary*}\marg{english}\marg{English}
+\cs{newglossary*}\marg{german}\marg{German}
+\strut
+\cs{setabbreviationstyle}\marg{long-short}
+\strut
+\cs{glsdefpostdesc}\marg{abbreviation}\marg{\comment{}
+  \cs{ifglshasfield}\marg{dualshort}\marg{\cs{glscurrententrylabel}}
+  \marg{\comment{}
+    \cmd{space}(\cs{glscurrentfieldvalue})\comment{}
+  }\comment{}
+  \marg{}\comment{}
+}
+\strut
+\gls{GlsXtrLoadResources}\oarg{
+ \csopt[entries-dual-abbrv]{src},\comment{entries-dual-abbrv.bib}
+ \csopt[english]{type},\comment{put \primary\ entries in glossary 'english'}
+ \csopt[german]{dual-type},\comment{put \dual\ entries in glossary 'german'}
+ \csopt[en.]{label-prefix},\comment{\primary\ label prefix}
+ \csopt[de.]{dual-prefix},\comment{\dual\ label prefix}
+ \csopt[en]{sort},\comment{sort \glspl{primaryentry} according to language 'en'}
+ \csopt[de-1996]{dual-sort},\comment{sort \glspl{dualentry} according to 'de-1996'}
+                     \comment{(German new orthography)}
+ \csopt{dual-abbrv-backlink}\comment{add links in the glossary to the opposite entry}
+}
+\strut
+\cmd{begin}\marg{document}
+\strut
+English: \cs{gls}\marg{en.rna}; \cs{gls}\marg{en.rna}.
+\strut
+German: \cs{gls}\marg{de.rna}; \cs{gls}\marg{de.rna}.
+\strut
+\cs{printunsrtglossaries}
+\cmd{end}\marg{document}
+\end{codeenv}
+If the \csopt{label-prefix} is omitted, then only the dual entries
+will have a prefix:
+\begin{codeenv}
+English: \cs{gls}\marg{rna}; \cs{gls}\marg{rna}.
+\strut
+German: \cs{gls}\marg{de.rna}; \cs{gls}\marg{de.rna}.
+\end{codeenv}
+Another variation is to use the \abbrstyle{long-short-user}
+abbreviation style and modify the associated \ics{glsxtruserfield} so that
+the \field{duallong} field is selected for the parenthetical
+material:
+\begin{codeenv}
+\cs{renewcommand}*\marg{\cs{glsxtruserfield}}\marg{duallong}
+\end{codeenv}
+This means that the first use of the \gls{primaryentry} is displayed as
+\begin{quote}
+ribonucleic acid (RNA, Ribonukleins\"aure)
+\end{quote}
+and the first use of the dual entry is displayed as:
+\begin{quote}
+Ribonukleins\"aure (RNS, ribonucleic acid)
+\end{quote}
+
+Here's an example to be used with the \abbrstyle{long-short-desc}
+style:
+\begin{codeenv}
+\atentry{dualabbreviation}\marg{rna,
+  \field{short}=\marg{RNA},
+  \field{dualshort}=\marg{RNS},
+  \field{long}=\marg{ribonucleic acid},
+  \field{duallong}=\marg{Ribonukleins\"aure}
+  \field{description}=\marg{a polymeric molecule},
+  \field{user1}=\marg{Ein polymeres Molek\"ul}
+}
+\end{codeenv}
+This stores the dual description in the \field{user1} field,
+so this needs a mapping.
+The new example document is much the same as the previous one, except
+that the \csopt{dual-abbrv-map} option is needed to include the 
+mapping between the \field{description} and \field{user1} fields:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}[T1]\marg{fontenc}
+\cmd{usepackage}[utf8]\marg{inputenc}
+\strut
+\cmd{usepackage}[ngerman,main=english]\marg{babel}
+\cmd{usepackage}[colorlinks]\marg{hyperref}
+\cmd{usepackage}[\styopt{record},\styopt{nomain}]\marg{glossaries-extra}
+\strut
+\cs{newglossary*}\marg{english}\marg{English}
+\cs{newglossary*}\marg{german}\marg{German}
+\strut
+\cs{setabbreviationstyle}\marg{long-short-desc}
+\strut
+\cs{glsdefpostdesc}\marg{abbreviation}\marg{\comment{}
+  \cs{ifglshasfield}\marg{dualshort}\marg{\cs{glscurrententrylabel}}
+  \marg{\comment{}
+    \cmd{space}(\cs{glscurrentfieldvalue})\comment{}
+  }\comment{}
+  \marg{}\comment{}
+}
+\strut
+\gls{GlsXtrLoadResources}\oarg{
+ \csopt[entries-dual-abbrv-desc]{src},\comment{entries-dual-abbrv-desc.bib}
+ \csopt[english]{type},\comment{put \glspl{primaryentry} in glossary 'english'}
+ \csopt[german]{dual-type},\comment{put \glspl{dualentry} in glossary 'german'}
+ \csopt[en.]{label-prefix},\comment{\primary\ label prefix}
+ \csopt[de.]{dual-prefix},\comment{\dual\ label prefix}
+ \csopt[en]{sort},\comment{sort \glspl{primaryentry} according to language 'en'}
+ \csopt[long]{abbreviation-sort-fallback},\comment{fallback on 'long' field}
+ \csopt[de-1996]{dual-sort},\comment{sort \glspl{dualentry} according to 'de-1996'}
+                   \comment{(German new orthography)}
+ \csopt{dual-abbrv-backlink},\comment{add links in the glossary to the opposite entry}
+\comment{ dual key mappings:}
+ \csopt[\comment{}
+   \marg{short,shortplural,long,longplural,dualshort,dualshortplural,
+     duallong,duallongplural,description,user1},
+   \marg{dualshort,dualshortplural,duallong,duallongplural,short,shortplural,
+     long,longplural,user1,description}
+ ]{dual-abbrv-map}
+}
+\strut
+\cmd{begin}\marg{document}
+\strut
+English: \cs{gls}\marg{en.rna}; \cs{gls}\marg{en.rna}.
+\strut
+German: \cs{gls}\marg{de.rna}; \cs{gls}\marg{de.rna}.
+\strut
+\cs{printunsrtglossaries}
+\cmd{end}\marg{document}
+\end{codeenv}
+Note that since this document uses the \abbrstyle{long-short-desc}
+abbreviation style, the \csopt{abbreviation-sort-fallback} needs to be changed
+to \optfmt{long}.
+
+If I change the order of the mapping to:
+\begin{codeenv}
+ \csopt[\comment{}
+   \marg{long,longplural,short,shortplural,dualshort,dualshortplural,
+     duallong,duallongplural,description,user1},
+   \marg{duallong,duallongplural,dualshort,dualshortplural,short,shortplural,
+     long,longplural,user1,description}
+ ]{dual-abbrv-map}
+\end{codeenv}
+Then the back-link field will switch to \field{duallong}. The
+\idx{postdescriptionhook} can be modified to allow for this:
+\begin{codeenv}
+\cs{glsdefpostdesc}\marg{abbreviation}\marg{\comment{}
+  \cs{ifglshasfield}\marg{duallong}\marg{\cs{glscurrententrylabel}}
+  \marg{\comment{}
+    \cmd{space}(\cs{glscurrentfieldvalue})\comment{}
+  }\comment{}
+  \marg{}\comment{}
+}
+\end{codeenv}
+
+An alternative is to use the \abbrstyle{long-short-user-desc} style
+without the \idx!{postdescriptionhook}:
+\begin{codeenv}
+\cs{setabbreviationstyle}\marg{long-short-user-desc}
+\cs{renewcommand}*\marg{\cs{glsxtruserfield}}\marg{duallong}
+\end{codeenv}
+However be careful with this approach as it can cause nested
+hyperlinks. In this case it's better to use the
+\abbrstyle{long-postshort-user-desc} style which defers the
+parenthetical material until after the link-text:
+\begin{codeenv}
+\cs{setabbreviationstyle}\marg{long-postshort-user-desc}
+\cs{renewcommand}*\marg{\cs{glsxtruserfield}}\marg{duallong}
+\end{codeenv}
+If the back-link field has been switched to \field{duallong} then
+the \idx!{postdescriptionhook} is no longer required.
+
+\entrysection{dualacronym}
+
+As \atentry{dualabbreviation} but defines the entries with
+\gls!{bibglsnewdualacronym}.
+
+\section{Tertiary Entry Types}
+\label{sec:tertiaryentry}
+
+A \igls{tertiaryentry} type is essentially a \gls{dualentry} that creates three
+separate (but related) \styfmt{glossaries-extra} entry definitions per 
+\ext{bib} entry. As with \glspl{dualentry}, the first of these
+is the \gls{primaryentry}. The second and third are referred to as the
+\igls{secondaryentry} and \igls{tertiaryentry}.
+
+The \gls{tertiaryentry} is effectively an appendage of the
+\gls{secondaryentry}{secondary}, and is defined by the same associated
+\csfmt{bibglsnew\ldots secondary} command that defines the 
+\gls{secondaryentry}. Therefore the \glsdisp{secondaryentry}{secondary} 
+and \glsdisp{tertiaryentry}{tertiary} are both considered the
+\dual\ and are treated as a single entry for the purposes of sorting
+and collating.
+
+The \gls{tertiaryentry} will never have any \glspl{location}. Any \glspl{record}
+found will be assigned to the \glsdisp{secondaryentry}{secondary}
+(and may then be moved to the \primary\ with
+\csopt[primary]{combine-dual-locations}). The
+\glsdisp{tertiaryentry}{tertiary} will always have the same order as
+the \glsdisp{secondaryentry}{secondary} and will have the same
+\field{group} value. You can set the \field{type} for the
+\glsdisp{tertiaryentry}{tertiary} with \csopt{tertiary-type} and the
+\field{category} with \csopt{tertiary-category}. The label prefix
+defaults to \idprefix{tertiary} and can be changed with
+\csopt{tertiary-prefix}.
+
+\entrysection{tertiaryindexabbreviationentry}
+
+This \gls{entrytype} is very similar to
+\atentry{dualindexabbreviation} but creates a \gls{tertiaryentry} as
+well.  The required fields are: \field{short} and \field{long} (as for
+\atentry{dualindexabbreviation}) and also \field{description}.  The
+mappings are shared by both \glspl{entrytype}.  For example:
+\begin{codeenv}
+\atentry{tertiaryindexabbreviationentry}\marg{html,
+  \field{short} = \marg{HTML},
+  \field{long} = \marg{hypertext markup language},
+  \field{description} = \marg{a markup language for creating web pages}
+}
+\end{codeenv}
+is analogous to:
+\begin{codeenv}
+\gls{newglossaryentry}\marg{html,\field{name}=\marg{HTML},\field{description}=\marg{}}
+\strut
+\gls{newabbreviation}\marg{dual.html}\marg{HTML}\marg{hypertext markup language}
+\strut
+\gls{newglossaryentry}\marg{tertiary.html, 
+  \field{name}=\marg{hypertext markup language},
+  \field{description}=\marg{a markup language for creating web pages}
+}
+\end{codeenv}
+The last two are actually defined using one command:
+\begin{codeenv}
+\gls{bibglsnewtertiaryindexabbreviationentrysecondary}
+  \marg{dual.html}\comment{\glsdisp{secondaryentry}{secondary} label}
+  \marg{tertiary.html}\comment{\glsdisp{tertiaryentry}{tertiary} label}
+  \marg{\ldots}\comment{\glsdisp{secondaryentry}{secondary} fields}
+  \marg{\ldots}\comment{\glsdisp{tertiaryentry}{tertiary} fields}
+  \marg{HTML}\comment{\primary\ name}
+  \marg{HTML}\comment{short}
+  \marg{hypertext markup language}\comment{long}
+  \marg{a markup language for creating web pages}\comment{description}
+\end{codeenv}
+The \gls!{bibglsnewtertiaryindexabbreviationentrysecondary}
+command is provided in the \iext{glstex} file as:
+\begin{codeenv}
+\cs{providecommand}\marg{\gls{bibglsnewtertiaryindexabbreviationentrysecondary}}[8]\marg{\comment{}
+  \gls{newabbreviation}\oarg{\idx{param}3}\marg{\idx{param}1}\marg{\idx{param}6}\marg{\idx{param}7}\comment{}
+  \cs{longnewglossaryentry*}\marg{\idx{param}2}\comment{}
+  \marg{\field{name}=\marg{\cmd{protect}\gls{bibglsuselongfont}\marg{\idx{param}7}\marg{\ics{glscategory}\marg{\idx{param}1}}},\idx{param}4}\comment{}
+  \marg{\idx{param}8}\comment{}
+}
+\end{codeenv}
+which defines the \glsdisp{secondaryentry}{secondary} as an
+abbreviation using \csfmt{newabbreviation} and the
+\glsdisp{tertiaryentry}{tertiary} as a regular entry using
+\csfmt{longnewglossaryentry}. This means that the
+\gls{tertiaryentry} is always defined immediately after the
+corresponding \gls{secondaryentry}.  The \primary\ may be defined
+earlier or later in the file depending on the way the entries are
+sorted and on the \csopt{dual-sort} setting.
+
+\section{Multi-Entry Types}
+\label{sec:multientry}
+
+A \gls{multientrytype} is an entry that may spawn multiple 
+\glspl{primaryentry}. This means that both the \gls{mainentry} and the
+\glspl{spawnedentry} are sorted together along with all the other 
+\glspl{primaryentry}. In the case of \atentry{spawndualindexentry}, 
+the \glsdisp{mainentry}{main} and \glspl{spawnedentry} are \primary. 
+The \gls{mainentry}['s] \dual\ is created as per \atentry{dualindexentry}.
+
+\entrysection{bibtexentry}
+
+The \atentry{bibtexentry} type will typically need to be aliased
+as it's designed for converting \BibTeX\ entries into \bibgls\
+entries. For example, to make \bibgls\ treat \atentryfmt{article}
+and \atentryfmt{book} as though they were both
+\atentry{bibtexentry}:
+\begin{codeenv}
+\csopt[
+  article=bibtexentry,
+  book=bibtexentry
+]{entry-type-aliases}
+\end{codeenv}
+For convenience, \isty{glossaries-extra-bib2gls} v1.29+
+provides \ics{GlsXtrBibTeXEntryAliases} which covers all the
+standard \BibTeX\ \glspl{entrytype}. Alternatively, you can use
+\csopt[bibtexentry]{unknown-entry-alias} to alias all entries
+that aren't recognised by \bibgls. If you use 
+\csopt[same as original entry]{category}, the \field{category}
+field will be set to the original \gls{entrytype} (for example,
+\code{article} or \code{book}). Similarly you can use
+\csopt[same as original entry]{type} to set the \field{type}
+field (but remember that the glossary types will need to be defined
+in the document).
+
+There are no required fields. The fallback for the \field{sort}
+field is given by \csopt{bibtexentry-sort-fallback} (see
+\sectionref{sec:fallbacks}). If you want to access any of the
+\BibTeX\ fields, you will need to alias or define them.  For
+example:
+\begin{codeenv}
+\csopt[
+  \fieldfmt{title}=\field{name}
+]{field-aliases}
+\end{codeenv}
+Since \BibTeX's \fieldfmt{type} field conflicts with \bibgls's
+\field{type} field, when \bibgls\ parses \atentry{bibtexentry}
+if will convert \fieldfmt{type} to \field{bibtextype}, so you
+must use \field{bibtextype} as the identifier when aliasing.
+
+Alternatively, you can use \ics{GlsXtrProvideBibTeXFields} which
+uses \ics{glsaddstoragekey} to provide all the standard \BibTeX\
+fields. (Remember that new fields must be defined before the first 
+\igls{resourceset}.)
+
+The \atentry{bibtexentry} essentially creates an \atentry{index}
+form of entry, but it additionally defines a \atentry{contributor}
+entry for each listed author or editor
+and updates the dependency lists: each \atentry{contributor} is
+added to the \glsdisp{mainentry}{main}
+\atentry{bibtexentry}'s list of dependencies (so if the
+\atentry{bibtexentry} has a \gls{record} then all its satellite
+\atentry{contributor}s are selected with the default
+\csopt[recorded and deps]{selection}), and 
+each \atentry{contributor} is treated as having a cross-reference to
+the \glsdisp{mainentry}{main} \atentry{bibtexentry} (so if a \atentry{contributor}
+has a \gls{record} then all the linked \atentry{bibtexentry} terms will
+be selected if \csopt[recorded and deps and see]{selection}).
+You can instruct \bibgls\ to treat \ics{citation} as an 
+\igls{ignoredrecord} using \longarg{cite-as-record}.
+
+Each contributor is effectively defined as:
+\begin{codeenv}
+\atentry{contributor}\marg{\meta{label},
+  \field{name}=\marg{\gls{bibglscontributor}\margm{forenames}\margm{von}\margm{surname}\margm{suffix}}
+}
+\end{codeenv}
+The label is obtained by converting the \field{name}
+to a label, using the same function as \csopt{labelify} (which
+means it's governed by \csopt{labelify-replace}).
+
+The \fieldfmt{author} and \fieldfmt{editor} fields are always
+checked, even if those fields aren't recognised by \bibgls, (which
+they aren't by default). These checks are performed before field
+aliases are applied. If neither field is present, no additional
+entries are spawned. If the dependent \atentry{contributor} entry 
+has already been defined, it won't be redefined, but will have the
+new \atentry{bibtexentry} added to its internal \field{bibtexentry}
+field.
+
+The \glsdisp{mainentry}{main} \atentry{bibtexentry} is defined using
+\gls{bibglsnewbibtexentry} and is followed by:
+\begin{codeenv}
+\gls{glsxtrfieldlistadd}\margm{id}\marg{bibtexcontributor}\margm{contributor-id}
+\end{codeenv}
+where \meta{id} is the label identifying the \glsdisp{mainentry}{main}
+\atentry{bibtexentry} and \meta{contributor-id} is the
+label identifying the contributor, for each contributor that has
+been selected.
+
+Each contributor is defined using \gls{bibglsnewcontributor}. The definition 
+is followed by:
+\begin{codeenv}
+\gls{glsxtrfieldlistadd}\margm{contributor-id}\marg{bibtexentry}\margm{id}
+\gls{glsxtrfieldlistadd}\margm{contributor-id}\marg{bibtexentry@\meta{entry-type}}\margm{id}
+\end{codeenv}
+for each selected \atentry{bibtexentry} associated with that contributor. The
+second line provides the internal list field
+\field{bibtexentry at entrytype}, where \meta{entry-type} is the
+original \gls{entrytype} (before it was aliased to
+\atentry{bibtexentry} and converted to \idx!{lowercase}).
+For example \code{article} or \code{book}.
+
+You can iterate over these internal list fields using
+\glsadd{idx.loop}\ics{glsxtrfielddolistloop} or \ics{glsxtrfieldforlistloop}.
+For example:
+\begin{codeenv}
+\cs{newcommand}\marg{\csfmt{contributorhandler}}[1]\marg{\csfmt{par}\cs{glsentryname}\marg{\#1}}
+
+\cs{newcommand}\marg{\postdeschook{contributor}}\marg{\comment{}
+  \cs{glsxtrifhasfield}\marg{bibtexentry}\marg{\cs{glscurrententrylabel}}\comment{}
+  \marg{\comment{}
+    \cs{glsxtrfieldforlistloop}
+    \marg{\cs{glscurrententrylabel}}\marg{bibtexentry}\comment{}
+    \marg{\csfmt{contributorhandler}}\comment{}
+  }\comment{}
+  \marg{\csfmt{par} No titles.}\comment{}
+}
+\end{codeenv}
+(where the resource option \csopt[\fieldfmt{title}=\field{name}]{field-aliases}
+has been used).
+
+Here's an example that uses the test \file{xampl.bib} file that's
+provided with \TeX\ distributions:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}[\styopt{record},\styopt{nomain}]\marg{glossaries-extra}
+\strut
+\cs{newglossary*}\marg{contributors}\marg{Authors/Editors}
+\cs{newglossary*}\marg{titles}\marg{Titles}
+\strut
+\cs{newcommand}\marg{\gls{bibglsnewbibtexentry}}[4]\marg{\comment{}
+ \cs{longnewglossaryentry*}\marg{\idx{param}1}\marg{\field{name}={\idx{param}3},\idx{param}2,\field{type}=\marg{titles}}\marg{\idx{param}4}\comment{}
+}
+\strut
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[xampl]{src},
+  \csopt[false]{write-preamble},
+  \csopt[
+   \ics{GlsXtrBibTeXEntryAliases}
+  ]{entry-type-aliases},
+  \csopt[
+    \fieldfmt{title}=\field{name}
+  ]{field-aliases},
+  \csopt[
+    \fieldfmt{note}=\field{name}
+  ]{replicate-fields},
+  \csopt[
+    \marg{[ \cs{cs.string}\csfmt{-}\cs{cs.string}\csfmt{.}]}\marg{}
+  ]{labelify-replace},
+  \csopt[contributors]{type},
+  \csopt[same as original entry]{category},
+  \csopt[\field{category}]{sort-field},
+  \csopt[\field{name}]{sort-suffix}
+}
+\strut
+\gls{glsxtrsetgrouptitle}\marg{article}\marg{Articles}
+\gls{glsxtrsetgrouptitle}\marg{booklet}\marg{Booklets}
+\gls{glsxtrsetgrouptitle}\marg{book}\marg{Books}
+\gls{glsxtrsetgrouptitle}\marg{inbook}\marg{Book Chapters}
+\gls{glsxtrsetgrouptitle}\marg{misc}\marg{Miscellaneous}
+\strut
+\cs{newcommand}\marg{\csfmt{contributorhandler}}[1]\marg{\csfmt{par}\ics{glsentryname}\marg{\idx{param}1} (\idx{param}1)}
+\strut
+\cs{newcommand}\marg{\postdeschook{contributor}}{\comment{}
+  \cs{glsxtrifhasfield}\marg{bibtexentry}\marg{\cs{glscurrententrylabel}}\comment{}
+  \marg{\comment{}
+    \ics{glsxtrfieldforlistloop}
+    \marg{\cs{glscurrententrylabel}}\marg{bibtexentry}\comment{}
+    \marg{\csfmt{contributorhandler}}\comment{}
+  }\comment{}
+  \marg{\csfmt{par} No titles.}\comment{}
+}
+\strut
+\csfmt{begin}\marg{document}
+Sample\idx{nbspchar}\ics{cite}\marg{book-minimal,article-full,inbook-full,misc-minimal}.
+Another sample\idx{nbspchar}\cs{cite}\marg{booklet-minimal,misc-full,article-minimal}.
+\strut
+\csfmt{bibliographystyle}\marg{plain}
+\ics{bibliography}\marg{xampl}
+\strut
+\cs{printunsrtglossary}[\printglossopt[contributors]{type},\printglossopt[altlist]{style}]
+\cs{printunsrtglossary*}[\printglossopt[titles]{type},\printglossopt[indexgroup]{style}]
+\marg{\comment{}
+ \cs{renewcommand}\marg{\ics{glsxtrgroupfield}}\marg{category}\comment{}
+ \cs{renewcommand}\marg{\cs{glstreenamefmt}}[1]\marg{\cs{emph}\marg{\idx{param}1}}\comment{}
+ \cs{renewcommand}\marg{\cs{glstreegroupheaderfmt}}[1]\marg{\cs{textbf}\marg{\idx{param}1}}\comment{}
+}
+\strut
+\csfmt{end}\marg{document}
+\end{codeenv}
+If the file is called \filefmt{myDoc.tex} then the document build
+is:
+\begin{codeenv}
+pdflatex myDoc
+bib2gls \longarg{cite-as-record} myDoc
+bibtex myDoc
+pdflatex myDoc
+pdflatex myDoc
+\end{codeenv}
+
+\entrysection{progenitor}
+
+The \atentryfmt{progenitor} type of entries are the only place where
+the \field{adoptparents} field is permitted. The value should be a
+comma-separated list of labels. The \field{adoptparents} field
+must be set and must contain a least one label. If the value
+contains any of the characters \idx{backslashchar} (backslash), 
+\idx{bgroupchar} (open brace) or \idx{egroupchar} (close brace) then
+the field will be interpreted (if the default \longarg{interpret} settings 
+is on).
+
+Since entries are spawned before fields are processed, the
+\field{adoptparents} field is parsed before any field aliases
+(\csopt{field-aliases}) or replication (\csopt{replicate-fields})
+takes place. However, if the \field{adoptparents} field isn't found,
+\bibgls\ will check for a simple mapping in both the
+\csopt{field-aliases} and \csopt{replicate-fields} settings.
+
+This \gls{entrytype} creates a \glsdisp{mainentry}{main} \igls[textformat=emph]{progenitor}
+term (with all the given fields except \field{adoptparents})
+and $n$ spawned \igls[textformat=emph]{progeny} terms, where
+$n$ is the number of elements in the \field{adoptparents} field,
+that are dependent on the \glsdisp{mainentry}{main term}.
+
+Each of the spawned \gls{progeny} entries have the field identified by
+\csopt{adopted-parent-field} (\field{parent} by default) set to the
+corresponding element in the \field{adoptparents} field.
+
+All fields from the original definition are copied except for the
+\field{adoptparents}, \field{alias} and \field{parent} fields. The
+\field{parent} field is never copied, regardless of the value of
+\csopt{adopted-parent-field}.  If the adopted parent field is
+changed to one that's contained in the original entry, it's value
+will be from \field{adoptparents} not the value from the original
+entry.
+
+The copied fields follow the same conditions as normal
+entries. (For example, unknown fields are ignored, case-changes are
+applied, if appropriate, and the \field{type} field must reference a
+valid glossary, if set.) If \csopt{progenitor-type} is set, then
+this assignment is made after the \igls{progeny} are created
+and only applies to the \glsdisp{mainentry}{main} \igls{progenitor} entry. The
+type for the \gls{progeny} can be set with \csopt{progeny-type}.
+For example, \csopt[same as parent]{progeny-type} will ensure
+that the \igls{progeny} are in the same glossary type as
+their \gls{parententry}.
+
+For example, an entry defined as:
+\begin{codeenv}
+\atentry{progenitor}\marg{\meta{id},
+  \field{adoptparents} = \marg{\meta{parent-1 id},\ldots,\meta{parent-N id}},
+  \meta{field-name-1} = \margm{text},
+  \ldots
+  \meta{field-name-n} = \margm{text}
+}
+\end{codeenv}
+is essentially like:
+\begin{codeenv}
+\atentry{index}\marg{\meta{id},
+  \field{progeny} = \marg{\meta{parent-1 id}.\meta{id},\ldots,\meta{parent-N id}.\meta{id}},
+  \meta{field-name-1} = \margm{text},
+  \ldots
+  \meta{field-name-n} = \margm{text}
+}
+\strut
+\atentry{index}\marg{\meta{parent-1 id}.\meta{id},
+  \field{progenitor} = \margm{id},
+  \field{parent} = \margm{parent-1 id},
+  \meta{field-name-1} = \margm{text},
+  \ldots
+  \meta{field-name-n} = \margm{text}
+}
+\strut
+\ldots
+\strut
+\atentry{index}\marg{\meta{parent-N id}.\meta{id},
+  \field{progenitor} = \margm{id},
+  \field{parent} = \margm{parent-N id},
+  \meta{field-name-1} = \margm{text},
+  \ldots
+  \meta{field-name-n} = \margm{text}
+}
+\end{codeenv}
+This creates the \glsdisp{mainentry}{main} (\gls{progenitor}) \meta{id} entry, which
+contains all the fields (except for \field{adoptparents}) that were
+in the original \atentry{progenitor} definition and has the new
+field \field{progeny} set to the comma-separated list of 
+\gls{spawnedentry} labels. The \glspl{mainentry} are defined in the \ext{glstex} file
+with \gls{bibglsnewprogenitor}.
+
+In addition to the \glsdisp{mainentry}{main} \meta{id} entry, the
+above also creates the spawned \gls{progeny} entries
+\code{\meta{parent-1 id}.\meta{id}}, \ldots, \code{\meta{parent-N
+id}.\meta{id}} that are dependent on the \glsdisp{mainentry}{main} \meta{id} entry.
+
+The \glspl{spawnedentry} have the \field{parent} field set to the
+corresponding label obtained from the \field{adoptparents} list.
+This \gls{parententry} must also be defined, as usual for the
+\field{parent} field.  (This restriction obviously doesn't apply if
+\csopt{adopted-parent-field} is changed from the default
+\field{parent}.) The spawned entries are defined in the \ext{glstex}
+file with \gls{bibglsnewspawnedindex}
+
+If the \glsdisp{mainentry}{main} \gls{progenitor} entry is referenced in the document
+then (assuming the default selection criteria) the
+\glspl{spawnedentry} will also be automatically selected. You can
+check for the existence of the \field{progenitor} field using
+\cs{glsxtrifhasfield} and fetch the \field{location} field from the
+\gls{mainentry}, if required.
+
+Although the \glspl{spawnedentry} are considered dependents of the 
+\gls{mainentry}, the reverse doesn't apply. If a \gls{spawnedentry} is referenced
+in the document (with \code{\meta{parent-id}.\meta{id}}) then the
+\gls{mainentry} and its other spawned entries aren't automatically
+selected.
+
+For example, suppose the file \filefmt{entries.bib} contains:
+\begin{codeenv}
+\atentry{indexplural}\marg{stylesheet, \field{text}=\marg{stylesheet language}}
+\strut
+\atentry{index}\marg{webdesign, \field{name}=\marg{web design}}
+\strut
+\atentry{indexplural}\marg{markup, \field{text}=\marg{markup language}}
+\strut
+\atentry{progenitor}\marg{xml,
+  \field{name}=\marg{XML},
+  \field{adoptparents}=\marg{markup}
+}
+\strut
+\atentry{progenitor}\marg{css,
+  \field{name}=\marg{CSS},
+  \field{adoptparents}=\marg{stylesheet,webdesign}
+}
+\strut
+\atentry{progenitor}\marg{html,
+  \field{name}=\marg{HTML},
+  \field{adoptparents}=\marg{markup,webdesign}
+}
+\strut
+\atentry{progenitor}\marg{xsl,
+  \field{name}=\marg{XSL},
+  \field{adoptparents}=\marg{stylesheet}
+}
+\end{codeenv}
+and if the document contains:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\strut
+\cmd{usepackage}\oarg{\styopt{record},\styopt[tree]{stylemods},\styopt[index]{style}}\marg{glossaries-extra}
+\strut
+\gls{GlsXtrLoadResources}\oarg{\csopt[entries]{src},\csopt[all]{selection}}
+\strut
+\cs{newcommand}*\marg{\cs{glstreenamefmt}}[1]\marg{\idx{param}1}
+\cmd{begin}\marg{document}
+\cs{printunsrtglossaries}
+\cmd{end}\marg{document}
+\end{codeenv}
+Then the resulting list will be:
+\begin{quote}
+\setlength{\parindent}{0pt}%
+\setlength{\parskip}{0pt plus 0.3pt}%
+\glstreeitem CSS\par
+\glstreeitem HTML\par
+\glstreeitem markup language\par
+\glstreesubitem HTML\par
+\glstreesubitem XML\par
+\glstreeitem stylesheet language\par
+\glstreesubitem CSS\par
+\glstreesubitem XSL\par
+\glstreeitem web design\par
+\glstreesubitem CSS\par
+\glstreesubitem HTML\par
+\glstreeitem XML\par
+\glstreeitem XSL\par
+\end{quote}
+This allows the HTML and CSS entries to be listed under multiple
+parents.
+
+The following \atentryfmt{spawn\meta{single-type}} commands are all forms
+of \atentry{progenitor} that create the given
+\atentryfmt{\meta{single-type}} of entry. The \glspl{spawnedentry} are actually
+created with the private \gls{entrytype} \atentryfmt{spawned\meta{type}}. In the
+case of \atentry{progenitor}, the \glspl{spawnedentry} are defined as 
+a \atentryfmt{spawnedindex} entry. These special
+\atentryfmt{spawned\meta{type}} \glspl{entrytype} aren't intended for use
+in the \ext{bib} file, but if you reference the \gls{entrytype} (for
+example, with \csopt[same as entry]{category}) you will get 
+\atentryfmt{spawned\meta{type}} as the \gls{entrytype}. The
+original \gls{entrytype} for the \glspl{spawnedentry} is the same as
+the original entry for the \glsdisp{mainentry}{main} \atentry{progenitor} entry.
+
+There is currently only one form of \dual\ \atentry{progenitor} entry and that's
+\atentry{spawndualindexentry}. Only the \glsdisp{mainentry}{main} \gls{progenitor} entry
+is a \gls{dualentry}. The spawned \gls{progeny} are all \atentry{index} 
+\glspl{primaryentry}.
+
+\entrysection{spawnindex}
+
+As \atentry{progenitor}, but the \glspl{mainentry} are defined in the
+\ext{glstex} file with \gls{bibglsnewspawnindex} and the
+spawned entries are defined with \gls{bibglsnewspawnedindex}.
+
+\entrysection{spawnindexplural}
+
+As \atentry{progenitor}, except that it creates
+\atentry{indexplural} terms instead of \atentry{index}.
+As with \atentry{indexplural}, if the \field{name} field isn't set,
+it's assigned to the same value as the \field{plural} field (or the
+\hyperref[sec:fallbacks]{fallback} for the \field{plural}, if not defined).
+
+The \glspl{mainentry} are defined in the
+\ext{glstex} file with \gls{bibglsnewspawnindexplural} and the
+\glspl{spawnedentry} are defined with \gls{bibglsnewspawnedindexplural}.
+
+\entrysection{spawnentry}
+
+As \atentry{progenitor}, except that it creates
+\atentry{entry} terms instead of \atentry{index}.
+As with \atentry{entry}, the \field{description} field is required
+and either \field{name} or \field{parent}.
+
+The \glspl{mainentry} are defined in the
+\ext{glstex} file with \gls{bibglsnewspawnentry} and the
+\glspl{spawnedentry} are defined with \gls{bibglsnewspawnedentry}.
+
+\entrysection{spawnabbreviation}
+
+As \atentry{progenitor}, except that it creates
+\atentry{abbreviation} terms instead of \atentry{index}.
+As with \atentry{abbreviation}, the \field{short} and \field{long} 
+fields are required.
+
+The \glspl{mainentry} are defined in the
+\ext{glstex} file with \gls{bibglsnewspawnabbreviation} and the
+\glspl{spawnedentry} are defined with \gls{bibglsnewspawnedabbreviation}.
+
+\entrysection{spawnacronym}
+
+As \atentry{progenitor}, except that it creates
+\atentry{acronym} terms instead of \atentry{index}.
+As with \atentry{acronym}, the \field{short} and \field{long} 
+fields are required.
+
+The \glspl{mainentry} are defined in the
+\ext{glstex} file with \gls{bibglsnewspawnacronym} and the
+\glspl{spawnedentry} are defined with \gls{bibglsnewspawnedacronym}.
+
+\entrysection{spawnsymbol}
+
+As \atentry{progenitor}, except that it creates
+\atentry{symbol} terms instead of \atentry{index}.
+As with \atentry{symbol}, the required fields are \field{name} or
+\field{parent}, and the \field{description} field is required if the
+\field{name} field is missing.
+
+The \glspl{mainentry} are defined in the
+\ext{glstex} file with \gls{bibglsnewspawnsymbol} and the
+\glspl{spawnedentry} are defined with \gls{bibglsnewspawnedsymbol}.
+
+\entrysection{spawnnumber}
+
+As \atentry{progenitor}, except that it creates
+\atentry{number} terms instead of \atentry{index}.
+As with \atentry{number}, the required fields are \field{name} or
+\field{parent}, and the \field{description} field is required if the
+\field{name} field is missing.
+
+The \glspl{mainentry} are defined in the
+\ext{glstex} file with \gls{bibglsnewspawnnumber} and the
+\glspl{spawnedentry} are defined with \gls{bibglsnewspawnednumber}.
+
+\entrysection{spawndualindexentry}
+
+As \atentry{progenitor}, except that the \glsdisp{mainentry}{main} (\gls{progenitor})
+entry behaves like \atentry{dualindexentry}. The spawned
+\gls{progeny} behave like \atentry{index} are so are all considered 
+\glspl{primaryentry}. The \field{adoptparents} field should therefore reference
+\glspl{primaryentry} with the default \csopt[parent]{adopted-parent-field}.
+
+The \glsdisp{mainentry}{main} \primary\ and
+\glsdisp{secondaryentry}{secondary} (\dual) entries are defined in
+the \ext{glstex} file with \gls{bibglsnewspawndualindexentry} and
+\gls{bibglsnewspawndualindexentrysecondary}. The spawned
+\gls{progeny} are defined with \gls{bibglsnewspawnedindex}.
+
+\section{Compound Entry Sets}
+\label{sec:compoundsetentry}
+
+A \gls{compoundentry} isn't an entry in the same sense as the above
+but corresponds to a multi-entry (compound or combined) set provided
+by \sty{glossaries-extra} v1.48+, which is defined by the command
+\ics{multiglossaryentry} (or \ics{providemultiglossaryentry}).
+These are referred to as multi-entries in \sty{glossaries-extra} but
+are referred to as \glspl{compoundentry} here to avoid confusion
+with the \glspl{multientrytype}.
+
+Essentially, a label is defined that refers to a set of labels
+corresponding to entries that \emph{have already been defined}. One
+element in the set is considered the \gls{compmainlabel}. Entry
+labels may appear in multiple sets.
+
+A \gls{compoundentry} provides a convenient way to apply commands
+like \ics{gls} to multiple entries in one command (such as \ics{mgls}).
+\Gls{compoundentry} labels may only be used in the \cs{mgls}-like
+commands or in a \gls{cross-referencefield}.
+
+For example, consider the following document:
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\cmd{usepackage}\marg{hyperref}
+\cmd{usepackage}[\styopt{record},\styopt[tree]{style}]\marg{glossaries-extra}
+\cs{setabbreviationstyle}\marg{long-only-short-only}
+\cs{renewcommand}*\marg{\cs{glsxtronlyname}}\marg{\comment{}
+  \cs{protect}\cs{glslongonlyfont}\marg{\cs{the}\cs{glslongtok}}\comment{}
+}
+\cs{newabbreviation}\marg{clostridium}\marg{C.}\marg{Clostridium}
+\gls{newglossaryentry}\marg{botulinum}\marg{name=botulinum,
+  description=\marg{},parent=clostridium}
+\gls{newglossaryentry}\marg{perfringens}\marg{name=perfringens,
+  description=\marg{},parent=clostridium}
+\cmd{begin}\marg{document}
+\cs{gls}\marg{clostridum} \cs{gls}\marg{botulinum},
+\cs{gls}\marg{clostridum} \cs{gls}\marg{perfringens},
+\cs{gls}\marg{clostridum} \cs{gls}\marg{botulinum}.
+\cs{printunsrtglossary}
+\cmd{end}\marg{document}
+\end{codeenv}
+This produces:
+\begin{quote}
+Clostridium botulinum,
+C. perfringens,
+C. botulinum.
+\end{quote}
+followed by the glossary. This is very cumbersome. Defining a
+\gls{compoundentry} label simply provides a shortcut:
+\begin{codeenv*}
+\ics{multiglossaryentry}\marg{cbot}\marg{clostridium,botulinum}
+\ics{multiglossaryentry}\marg{cperf}\marg{clostridium,perfringens}
+\end{codeenv*}
+(This has to be done after the entries have been defined.) Now the
+entries can be more compactly referenced:
+\begin{codeenv*}
+\ics{mgls}\marg{cbot},
+\ics{mgls}\marg{cperf},
+\ics{mgls}\marg{cbot}.
+\end{codeenv*}
+Each \gls{compoundentry} set must contain at least two elements. The
+\gls{compmainlabel} is the label of the element that is considered
+the main entry of the set. If the \gls{compmainlabel} isn't
+identified in \cs{multiglossaryentry} then it's assumed to be the
+last element in the set.
+
+In the above example, \code{botulinum} is the \gls{compmainlabel} of
+the \code{cbot} set, and \code{perfringens} is the
+\gls{compmainlabel} of the \code{cperf} set.  In both sets,
+\code{clostridium} is the \qt{\gls{compotherlabel}}. If there are
+more than two elements in the set then \qt{others} refers to all the
+elements except for the \gls{compmainlabel}. An entry can be a
+\gls{compmainlabel} of one set and an \gls{compotherlabel} of
+another set.
+
+The options, which can be applied to all sets with
+\ics{multiglossaryentrysetup} or to a specific set using the
+first optional argument of \ics{multiglossaryentry}, determine
+if each element of the list has a separate hyperlink to their
+own target, or if only the main element should have a hyperlink, or 
+if the entire content of \ics{mgls} should be a single hyperlink to
+the main entry's target.
+
+With \bibgls, the entries that form the set should be in \ext{bib} files as usual. 
+The \gls{compoundentry} set may either be defined in the document \ext{tex}
+file using \ics{multiglossaryentry} (or \ics{providemultiglossaryentry})
+or they can be defined in the \ext{bib} file using
+\atentry{compoundset}. Remember that the set can only be defined
+after the entries that make up the elements of the set have been
+defined. If any \ext{bib} files in a \gls{resourceset} contain
+\atentry{compoundset}, the definitions will be added at the end of
+the \ext{glstex} file (using \gls{bibglsdefcompoundset}).
+
+If you have multiple \glspl{resourceset} that reuse the same
+\ext{bib} file containing \atentry{compoundset} then either redefine
+\gls{bibglsdefcompoundset} to use \ics{providemultiglossaryentry} or
+prevent duplicate definitions with \csopt[false]{compound-write-def}.
+
+The elements of the set will still need to be indexed as usual to
+ensure that they have \glspl{record} to enable selection.
+
+The above example can be converted to \bibgls\ as follows
+(\glspl{compoundentry} defined in the document \ext{tex} file):
+\begin{codeenv}
+\cmd{documentclass}\marg{article}
+\cmd{usepackage}\marg{hyperref}
+\cmd{usepackage}[\styopt{record},\styopt[tree]{style}]\marg{glossaries-extra}
+\cs{setabbreviationstyle}\marg{long-only-short-only}
+\cs{renewcommand}*\marg{\cs{glsxtronlyname}}\marg{\comment{}
+  \cs{protect}\cs{glslongonlyfont}\marg{\cs{the}\cs{glslongtok}}\comment{}
+}
+\gls{GlsXtrLoadResources}\oarg{\csopt[bacteria]{src}}
+\cs{multiglossaryentry}\marg{cbot}\marg{clostridium,botulinum}
+\cs{multiglossaryentry}\marg{cperf}\marg{clostridium,perfringens}
+\cmd{begin}\marg{document}
+\cs{mgls}\marg{cbot}, \cs{mgls}\marg{cperf}, \cs{mgls}\marg{cbot}.
+\cs{printunsrtglossary}
+\cmd{end}\marg{document}
+\end{codeenv}
+Note that \cs{multiglossaryentry} must come after \gls{GlsXtrLoadResources}.
+
+The \file{bacteria.bib} contains the definitions in the usual way:
+\begin{codeenv}
+\atentry{abbreviation}\marg{clostridium,
+ \field{short}=\marg{C.},
+ \field{long}=\marg{Clostridium}
+}
+\atentry{index}\marg{botulinum,
+ \field{parent}=\marg{clostridium}
+}
+\atentry{index}\marg{perfringens,
+ \field{parent}=\marg{clostridium}
+}
+\end{codeenv}
+
+Alternatively, the \glspl{compoundentry} can be defined in the
+\ext{bib} file instead:
+\begin{codeenv}
+\atentry{compoundset}\marg{cbot,
+  \field{elements}=\marg{clostridium,botulinum}
+}
+\atentry{compoundset}\marg{cperf,
+  \field{elements}=\marg{clostridium,perfringens}
+}
+\end{codeenv}
+The \cs{multiglossaryentry} commands should now be removed from the
+\ext{tex} file.
+
+There's a difference between these two methods on the first \LaTeX\
+build. In the first example, \code{cbot} is known, so
+\code{\cs{mgls}\marg{cbot}} can perform
+\code{\cs{gls}\marg{clostridum} \cs{gls}\marg{botulinum}}. These
+commands aren't yet defined so they are both replaced by \qt{??}
+(resulting in \qt{?? ??}). As usual, the \gls{locationlist} is
+unreliable until entries are defined and the unknown markers \qt{??}
+can be replaced with the correct content. If the document is in a
+file called \filefmt{myDoc.tex} then the document build:
+\begin{codeenv}
+pdflatex myDoc
+bib2gls myDoc
+pdflatex myDoc
+\end{codeenv}
+will have \glspl{location} in the resulting PDF file, but they may
+be incorrect if the associated temporary files were initially
+missing.
+
+In the second example, \code{cbot} is unknown, so
+\code{\cs{mgls}\marg{cbot}} is simply displayed as \qt{??}.
+In this case, the \ext{aux} file contains information that
+\code{cbot} has been referenced, but there are no associated
+\glspl{record}. The entries that belong to the \code{cbot} set will
+be selected as they are considered dependent on the
+\gls{compoundentry}. In this case, if you are starting from scratch
+(no associated temporary files), you will need:
+\begin{codeenv}
+pdflatex myDoc
+bib2gls myDoc
+pdflatex myDoc
+bib2gls myDoc
+pdflatex myDoc
+\end{codeenv}
+At this point, the \glspl{locationlist} will appear.
+After that, you can reduce the document build to:
+\begin{codeenv}
+pdflatex myDoc
+bib2gls myDoc
+pdflatex myDoc
+\end{codeenv}
+(Until you later add new entries.)
+
+If you don't want \glspl{location} for the 
+\glslink{compotherlabel}{other elements} then set the 
+\idx{encap} to \encap{glsignore}:
+\begin{codeenv*}
+\ics{multiglossaryentrysetup}\marg{encapothers=\encap{glsignore}}
+\end{codeenv*} 
+
+\entrysection{compoundset}
+The following fields are available:
+\begin{definition}
+\item[\field{elements}] The comma-separated list of element labels.
+This corresponds to the final argument of \cs{multiglossaryentry}.
+(Required.)
+\item[\field{main}] The \gls{compmainlabel}. This field is optional.
+If omitted, the main label is assumed to be the last element.
+\item[\field{options}] A comma-separated list of options. This
+corresponds to the first optional argument of
+\cs{multiglossaryentry}. This field may be omitted.
+\end{definition}
+These fields can only be used in this \gls{entrytype}.
+
+Most resource options don't apply to this \gls{entrytype}. Options
+specific to \glspl{compoundentry} are listed in
+\sectionref{sec:compoundentries}.
+
+\chapter{Resource File Options}
+\label{sec:resourceopts}
+
+Make sure that you use \isty{glossaries-extra} with the
+\styopt{record} package option. This ensures that \bibgls\ can pick
+up the required information from the \iext{aux} file, and both 
+\styopt[only]{record} and \styopt[nameref]{record} additionally
+load the supplementary \isty{glossaries-extra-bib2gls} package. 
+These two \styopt{record} option values also
+switch on the \styopt[none]{sort} package option (if you have a new
+enough version of the base \isty{glossaries} package), which means
+that there's no attempt to assign or process the \field{sort} key if
+it's omitted from \gls{newglossaryentry} (or similar commands). The
+\field{sort} key will be provided by \bibgls\ for informational
+purposes, but there's no need for \LaTeX\ to write it to any
+external files (unless you use \styopt[hybrid]{record}, 
+in which case you need to prevent \bibgls\ from sorting using the
+\csopt[none]{sort} resource option).
+
+The \iext{glstex} resource files created by \bibgls\ are loaded in
+the document using
+\nosecformatdef{glsxtrresourcefile}
+where \meta{filename} is the name of the resource file without the
+\ext{glstex} extension.
+You can have multiple \gls{glsxtrresourcefile} commands within your
+document, but each \meta{filename} must be unique, otherwise \LaTeX\
+would attempt to input the same \ext{glstex} file multiple times
+(\bibgls\ checks for non-unique file names). The associated data for each
+resource file is called the \igls{resourceset} (see
+\sectionref{sec:resourcesets}).
+
+There's a shortcut command that uses
+\ics{jobname} in the \meta{filename}:
+\nosecformatdef{GlsXtrLoadResources}
+The first instance of this command is equivalent to:
+\begin{codeenv}
+\gls{glsxtrresourcefile}\oargm{options}\marg{\ics{jobname}}
+\end{codeenv}
+Any additional use of \gls{GlsXtrLoadResources} is equivalent to:
+\begin{codeenv}
+\gls{glsxtrresourcefile}\oargm{options}\marg{\ics{jobname}-\meta{n}}
+\end{codeenv}
+where \meta{n} is number. For example:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{\csopt[entries-en]{src},\csopt[en]{sort}}
+\gls{GlsXtrLoadResources}\oarg{\csopt[entries-fr]{src},\csopt[fr]{sort}}
+\gls{GlsXtrLoadResources}\oarg{\csopt[entries-de]{src},\csopt[de-1996]{sort}}
+\end{codeenv}
+This is equivalent to:
+\begin{codeenv}
+\gls{glsxtrresourcefile}\oarg{\csopt[entries-en]{src},\csopt[en]{sort}}\marg{\cs{jobname}}
+\gls{glsxtrresourcefile}\oarg{\csopt[entries-fr]{src},\csopt[fr]{sort}}\marg{\cs{jobname}-1}
+\gls{glsxtrresourcefile}\oarg{\csopt[entries-de]{src},\csopt[de-1996]{sort}}\marg{\cs{jobname}-2}
+\end{codeenv}
+In general, it's simplest just to use \gls{GlsXtrLoadResources}.
+
+The optional argument \meta{options} is a comma-separated
+\keyvallist.  Allowed options are listed below.  The option list
+applies only to that specific \meta{filename}\ext{glstex} and are
+not carried over to the next instance of \gls{glsxtrresourcefile}.
+Only the definitions provided in \atentry{preamble} (if the
+interpreter is on and \csopt[true]{interpret-preamble}) are carried
+over to the next resource set and, possibly,
+\iglspl{crossresourceref} if permitted (see
+\sectionref{sec:resourcesets}).  The \sty{glossaries-extra} package
+doesn't parse the options, but just writes the information to the
+\ext{aux} file. This means that any invalid options will be reported
+by \bibgls\ not by \sty{glossaries-extra}.
+
+As from \sty{glossaries-extra} v1.40 you can provide a default set
+of options by redefining:
+\nosecdef{GlsXtrDefaultResourceOptions}
+This command will be inserted at the start of the options list for
+all resource commands (and will expand as it's written to
+the \ext{aux} file).  For example:
+\begin{codeenv}
+\cs{renewcommand}\marg{\gls{GlsXtrDefaultResourceOptions}}\marg{\comment{}
+  \csopt[all]{selection},\csopt[entries]{src}}
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[symbols]{type},
+  \csopt[entrytype=symbol]{match}}
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[abbreviations]{type},
+  \csopt[entrytype=abbreviation]{match}}
+\end{codeenv}
+This acts like:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[all]{selection},\csopt[entries]{src},
+  \csopt[symbols]{type},
+  \csopt[entrytype=symbol]{match}}
+\gls{GlsXtrLoadResources}\oarg{
+  \csopt[all]{selection},\csopt[entries]{src},
+  \csopt[abbreviations]{type},
+  \csopt[entrytype=abbreviation]{match}}
+\end{codeenv}
+
+If you have multiple \ext{bib} files you can either select them all
+using \csopt[\meta{bib list}]{src} in a single
+\gls{glsxtrresourcefile} call, if they all require the same settings,
+or you can load them separately with different settings applied.
+
+For example, if the files \filefmt{entries-terms.bib} and
+\filefmt{entries-symbols.bib} have the same settings:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{\csopt[entries-terms,entries-symbols]{src}}
+\end{codeenv}
+Alternatively, if they have different settings:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{\csopt[entries-terms]{src},\csopt[main]{type}}
+\gls{GlsXtrLoadResources}\oarg{\csopt[entries-symbols]{src},\csopt[use]{sort},\csopt[symbols]{type}}
+\end{codeenv}
+
+Note that the sorting is applied to each \igls{resourceset} independently
+of other \iglspl{resourceset}. This means that if you have multiple instances
+of \gls{glsxtrresourcefile} but only one glossary type, the glossary
+will effectively contain blocks of sorted entries. For example, if
+\filefmt{file1.bib} contains:
+\begin{codeenv}
+\atentry{index}\marg{duck}
+\atentry{index}\marg{zebra}
+\atentry{index}\marg{aardvark}
+\end{codeenv}
+and \filefmt{file2.bib} contains:
+\begin{codeenv}
+\atentry{index}\marg{caterpillar}
+\atentry{index}\marg{bee}
+\atentry{index}\marg{wombat}
+\end{codeenv}
+then
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{\csopt[file1,file2]{src}}
+\end{codeenv}
+will result in the list: aardvark, bee, caterpillar, duck, wombat,
+zebra. These six entries are all defined when
+\csfmt{jobname}\filefmt{.glstex} is read.
+Whereas
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{\csopt[file1]{src}}
+\gls{GlsXtrLoadResources}\oarg{\csopt[file2]{src}}
+\end{codeenv}
+will result in the list: aardvark, duck, zebra, bee, caterpillar,
+wombat. The first three (aardvark, duck, zebra) are defined when 
+\csfmt{jobname}\filefmt{.glstex} is read. The second three (bee,
+caterpillar, wombat) are defined when \csfmt{jobname}\filefmt{-1.glstex}
+is read. Since \ics{printunsrtglossary} simply iterates over all
+defined entries, this is the ordering used.
+
+Abbreviation styles must be set (using \ics{setabbreviationstyle})
+before the resource command that selects the abbreviations from the
+appropriate \ext{bib} file, since the entries are defined (through
+\gls{newabbreviation} or \gls{newacronym}) when
+\gls{glsxtrresourcefile} inputs the \ext{glstex} file. (Similarly for any
+associated abbreviation style commands that must be set before
+abbreviations are defined, such as \cs{glsxtrlongshortdescname}.)
+
+Note \bibgls\ allows \iext{bib} files that don't provide any entries.
+This can be used to provide commands in \atentry{preamble}.
+For example, suppose I have \filefmt{defs.bib} that just contains:
+\begin{codeenv}
+\atentry{preamble}\marg{\qtdelim{\cs{providecommand}\marg{\cmd{strong}}[1]\marg{\cs{textbf}\marg{\ics{cs.color}\marg{red}\idx{param}1}}
+\cs{providecommand}\marg{\cmd{parenswap}}[2]\marg{\idx{param}2 (\idx{param}1)}}}
+\end{codeenv}
+This provides two commands:
+\nosecdef{strong}
+(which sets the font weight and colour) and 
+\nosecdef{parenswap}
+(which just displays its second argument followed by the first in parentheses).
+
+Suppose I also have \filefmt{entries.bib} that contains:
+\begin{codeenv}
+\atentry{index}\marg{example,
+  \field{name}=\marg{\gls{strong}\marg{\gls{parenswap}\marg{stuff}\marg{example}}}
+}
+\atentry{index}\marg{sample}
+\atentry{index}\marg{test}
+\atentry{index}\marg{foo}
+\atentry{index}\marg{bar}
+\end{codeenv}
+This contains an entry that requires the commands provided in
+\filefmt{defs.bib}, so to ensure those commands are defined, I can
+do:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{\csopt[defs,entries]{src}}
+\end{codeenv}
+Unfortunately this results in the sort value for \code{example} being
+set to \code{redexample (stuff)} because the interpreter has
+detected the provided commands and expanded:
+\begin{codeenv}
+\gls{strong}\marg{\gls{parenswap}\marg{stuff}\marg{example}}
+\end{codeenv}
+to:
+\begin{codeenv}
+\cs{textbf}\marg{\cs{cs.color}\marg{red}example (stuff)}
+\end{codeenv}
+It discards font changes, so \cs{textbf} is ignored, but it doesn't 
+recognise \cs{cs.color} and so doesn't know that the first argument is
+just the colour specifier and therefore doesn't discard it.
+This means that \qt{\textbf{\color{red}example (stuff)}} is placed
+between \qt{foo} and \qt{sample} instead of between \qt{bar} and
+\qt{foo}.
+
+I can prevent the interpreter from parsing \atentry{preamble}:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{\csopt[defs,entries]{src},\csopt[false]{interpret-preamble}}
+\end{codeenv}
+Now when the sort value for \code{example} is obtained from:
+\begin{codeenv}
+\gls{strong}\marg{\gls{parenswap}\marg{stuff}\marg{example}}
+\end{codeenv}
+no expansion occurs (since \gls{strong} and \gls{parenswap} are now
+unrecognised) so the sort value ends up as:
+\code{stuffexample}
+which places \qt{\textbf{\color{red}example (stuff)}} between 
+\qt{sample} and \qt{test}, which is again incorrect.
+
+The best thing to do in this situation is to split the provided
+commands into two \iext{bib} files: one that shouldn't be interpreted
+and one that should.
+
+For example, \filefmt{defs-nointerpret.bib}:
+\begin{codeenv}
+\atentry{preamble}\marg{\qtdelim{\cs{providecommand}\marg{\gls{strong}}[1]\marg{\cs{textbf}\marg{\cs{cs.color}\marg{red}\idx{param}1}}}}
+\end{codeenv}
+and \filefmt{defs-interpret.bib}:
+\begin{codeenv}
+\atentry{preamble}\marg{\qtdelim{\cs{providecommand}\marg{\gls{parenswap}}[2]\marg{\idx{param}2 (\idx{param}1)}}}
+\end{codeenv}
+Now the first one can be loaded with \csopt[false]{interpret-preamble}:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{\csopt[defs-nointerpret]{src},\csopt[false]{interpret-preamble}}
+\end{codeenv}
+This creates a \iext{glstex} file that provides \gls{strong} but
+doesn't define any entries. The other file \filefmt{defs-interpret.bib} can
+then be loaded with the default \csopt[true]{interpret-preamble}:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{\csopt[defs-interpret,entries]{src}}
+\end{codeenv}
+The provided commands are remembered by the interpreter, so you can
+also do:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{\csopt[defs-interpret]{src}}
+\gls{GlsXtrLoadResources}\oarg{\csopt[entries]{src}}
+\end{codeenv}
+The \emph{contents} of \atentry{preamble} are only written to the
+associated \iext{glstex} file, but the definitions contained within
+the \atentry{preamble} are retained by the interpreter for subsequent
+\iglspl{resourceset}.
+
+\section{String Concatenation}
+\label{sec:optstringconcat}
+
+Some resource options allow string \gls{concatenation} in their
+syntax. This is where fragments or substrings can be joined together
+to form a value. This is similar to the way \gls{concatenation}
+occurs in \ext{bib} files, but a different operator is used. In
+\ext{bib} files, the concatenation operator is \idx{stringconcat} (hash)
+but, since this is a problematic character to use in the optional
+argument of \gls{GlsXtrLoadResources}, the operator for string
+\gls{concatenation} in resource options is \idx{concat-plus} (plus).
+
+A string \gls{concatenation} \meta{element-list} in a resource option
+has the following syntax:
+\begin{codeenv}
+\meta{element-list} ::= \meta{element-value} | \meta{element-value} \idx{concat-plus} \meta{element-list}
+\meta{element-value} ::= \meta{string} | \meta{field-ref} | \meta{element-quark}\margm{element-list} | \meta{match-ref}
+\meta{match-ref} ::= \gls{MGP}\margm{group-ref}
+\meta{group-ref} ::= \meta{index} | \meta{name}
+\meta{string} ::= \qtdelim{\meta{tokens}} | \margm{tokens}
+\end{codeenv}
+The \meta{field-ref} syntax is described below, and is used to
+reference a field value.
+The element quarks (\meta{element-quark}, described below) take an
+\meta{element-list} argument. If the \meta{element-list} argument evaluates
+to null, they will return null.
+
+\begin{important}
+Remember that the argument of \gls{GlsXtrLoadResources} is expanded
+as it's written to the \ext{aux} file. This means that care must be
+taken to prevent premature expansion of \idxpl{quark} or any
+commands that need to be present in a string.
+\end{important}
+
+As from \styfmt{glossaries-extra} v1.51, the
+\sty{glossaries-extra-bib2gls} package (which is automatically
+loaded with the \styopt{record} option) provides the command
+\ics{GlsXtrResourceInitEscSequences} which will locally redefine
+these \idx{quark} commands to expand to their detokenized form.
+So you can do:
+\begin{codeenv}
+\cs{renewcommand}*\marg{\cs{glsxtrresourceinit}}\marg{\comment{}
+  \ics{GlsXtrResourceInitEscSequences}
+}
+\end{codeenv}
+This means that you can simply write the \idx{quark} in the resource
+option without needing to use \ics{protect} or \idx{cs.string}.
+The remainder of this section assumes that \ics{glsxtrresourceinit}
+has been redefined to use \ics{GlsXtrResourceInitEscSequences}, as
+in the above example.
+
+As with the \ext{bib} format, strings (\meta{string}) can be delimited by braces
+\code{\margm{text}} or double-quotes \code{\qtdelim{\meta{text}}}. If you
+need a literal double-quote (\idx{doublequotechar}) then either use
+brace delimiters or use \gls{quark.doublequote}. If you need the
+actual \LaTeX\ accent command \ics{umlaut} then use brace
+delimiters. If you need braces that start and end in different
+strings then use double-quote delimiters. For example:
+\begin{codeenv}
+\csopt[
+ \field{first} = "\gls{cs}\marg{emph}\idx{bgroupchar}" \idx{concat-plus} \field{name} \idx{concat-plus} "\idx{egroupchar}"
+]{assign-fields}
+\end{codeenv}
+
+The \meta{element-list} may just contain a single element, such as a
+field reference or a constant string, but it must still conform to
+the element syntax. For example, if you want to use
+\csopt{copy-to-glossary} to copy all entries to a specific glossary,
+such as \code{index}, then you will need to markup \code{index} as a
+string. For example:
+\begin{codeenv}
+\csopt[\qtdelim{index}]{copy-to-glossary}
+\end{codeenv}
+or
+\begin{codeenv}
+\csopt[\marg{index}]{copy-to-glossary}
+\end{codeenv}
+Note that the outer braces are stripped by the resource option
+parser before the content is parsed as an \meta{element-list}.
+If only a single set of braces was used, those braces would be
+stripped leaving a bare \code{index}, which would be parsed as a
+field reference.
+
+The element \idxpl{quark} are uppercase tokens that start with a leading
+backslash. They have no meaning to \bibgls's interpreter nor are
+they defined in the \LaTeX\ document outside of the scope of 
+the resource command (unless they happen to coincidentally be
+defined by another package or are a custom command). \Idxpl{quark}
+occur outside of strings. Any escape sequences occurring within a
+string are considered to be \LaTeX\ commands.
+
+\nosecdef{CS}
+Returns a control sequence with the control sequence
+name obtained from concatenating \meta{element-list}. 
+Note that this is different from
+\gls{cs} which expands to the detokenized control sequence name as
+the resource options are written to the \ext{aux} file.
+
+For example, if the \LaTeX\ file has:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{
+ \csopt[
+   \field{name} = "\gls{cs}\marg{foo}\marg{" \idx{concat-plus} \field{user1} \idx{concat-plus} "}"
+ ]{assign-fields}
+}
+\end{codeenv}
+then this will expand the options to the \ext{aux} file as
+\begin{codeenv}
+\csopt[
+\field{name} = "\csfmt{foo}\marg{" \idx{concat-plus} \field{user1} \idx{concat-plus} "}"
+]{assign-fields}
+\end{codeenv}
+Compare this with:
+\begin{codeenv}
+\gls{GlsXtrLoadResources}\oarg{
+ \csopt[
+   \field{name} = \gls{CS} \marg{ \field{user1} }
+ ]{assign-fields}
+}
+\end{codeenv}
+which will set the \field{name} value to \csfmt{\meta{csname}} (no
+arguments) where \meta{csname} is the value obtained from the
+\field{user1} field for that entry. Note that \csfmt{\meta{csname}}
+will need to be defined in the document to ensure that the document
+compiles without error but will also need to be recognised by
+\bibgls\ if the field value needs to be interpreted (such as when
+obtaining the \field{sort} value).
+
+\nosecdef{MGP}
+The \meta{match-ref} element should only be used with a
+\gls{regular-expression} from an associated conditional (see
+\sectionref{sec:conditionals}).
+For example, the \meta{condition} part of an assignment rule in
+\csopt{assign-fields}.
+
+If a match was found, \gls{MGP} can be used to reference a group within the match. 
+The \meta{group-ref} argument may be either an integer (the group
+index) or the group name. For example, suppose a custom field called
+\fieldfmt{ordinal} may contain content such as \code{1st} or
+\code{10th} and I want to encapsulate the suffix part without
+altering the \ext{bib} file. This can be done as follows:
+\begin{codeenv}
+\csopt[
+ \fieldfmt{ordinal} =\oarg{o} \gls{MGP}\marg{1} + " \gls{cs}\marg{ord}\marg{" + \gls{MGP}\marg{2} + "}"
+   \oarg{ ordinal=/(\gls{cs}\marg{d}+)(st|nd|rd|th)/ }
+]{assign-fields}
+\end{codeenv}
+Alternatively, using named groups:
+\begin{codeenv*}
+\csopt[
+ ordinal =\oarg{o} \gls{MGP}\marg{num} + " \gls{cs}\marg{ord}\marg{" + \gls{MGP}\marg{suffix} + "}"
+   \oarg{ ordinal=/(\idx{regex.question}\idx{regex.lt}num\idx{regex.gt}\gls{cs}\marg{d}+)(\idx{regex.question}\idx{regex.lt}suffix\idx{regex.gt}st|nd|rd|th)/ }
+]{assign-fields}
+\end{codeenv*}
+Note that the group name shouldn't be delimited with double-quotes.
+
+\begin{important}
+The \gls{MGP} quark (which expands to the \gls{MGP} identifier for
+\csopt{assign-fields}) isn't the same as \ics{glscapturedgroup}
+(which expands to \cs{cs.string}\idx{dollarchar}, allowing a dollar
+character to be written to the \ext{aux} file within
+the replacement part of \csopt{labelify-replace}).
+\end{important}
+
+\nosecdef{TRIM}
+Returns its argument with any leading and trailing spaces removed.
+
+\nosecdef{INTERPRET}
+Interprets the contents of \meta{element-list} using \bibgls's
+interpreter and returns the result, which may be an empty string if
+the content only contains unknown commands. Note that the result is 
+a string with any special characters replaced by detokenized commands, such as
+\ics{glsbackslash}. This ensures that the value is suitable to be written
+in the entry definition in the \ext{glstex} file.
+
+It's important to remember that the result of \gls{INTERPRET} is a detokenized string.
+In general, it's therefore best to have \gls{INTERPRET} as the outermost quark.
+
+Suppose I have a \ext{bib} file that contains:
+\begin{codeenv}
+\atentry{preamble}\marg{\qtdelim{\cs{providecommand}\marg{\cmd{csfmt}}[1]\marg{\cs{glsbackslash} \idx{param}1}}}
+\atentry{index}\marg{relax,\field{name}=\marg{\cmd{csfmt}\marg{relax}}}
+\atentry{index}\marg{comment,\field{name}=\marg{\cs{cs.percent} comment}}
+\end{codeenv}
+If the resource options include:
+\begin{codeenv}
+\csopt[
+ \field{user1} = \gls{INTERPRET} \marg{ \field{name} } ,
+]{assign-fields}
+\end{codeenv}
+Then the definitions in the \ext{glstex} file will be:
+\begin{codeenv}
+\gls{bibglsnewindex}\marg{comment}\comment{}
+\marg{\field{user1}=\marg{\cs{glspercentchar} \cs{space} comment},
+\field{name}=\marg{\cs{cs.percent} comment},
+\field{sort}=\marg{comment|}}
+\strut
+\gls{bibglsnewindex}\marg{relax}\comment{}
+\marg{\field{user1}=\marg{\cs{glsbackslash} relax},
+\field{name}=\marg{\cmd{csfmt}\marg{relax}},
+\field{sort}=\marg{relax|}}
+\end{codeenv}
+This ensures that the \LaTeX\ syntax in the \ext{glstex} definitions is valid and 
+the \field{user1} field can expand to a literal string. (Remember that the document
+definition of the custom \csfmt{csfmt} command may be different from the one provided
+in the \atentry{preamble} content.)
+
+The \gls{INTERPRET} quark converts \code{\cs{cs.percent} comment} to 
+\qtt{\% comment} since the interpreter recognises \ics{cs.percent}. However, 
+if this value is written to the \ext{glstex} file:
+\begin{codeenv}
+\field{user1}=\marg{\% comment},
+\end{codeenv}
+then this is invalid. When the \ext{glstex} file is input by \gls{GlsXtrLoadResources},
+\LaTeX\ will interpret the percent symbol \code{\%} as a comment and the rest of the
+line, including the closing brace, will be ignored. This leads to a missing closing brace error.
+
+In the case of the \qt{relax} entry, since a definition of the custom \csfmt{csfmt}
+is provided in \atentry{preamble}, the interpreter will convert \code{\csfmt{csfmt}\marg{relax}}
+to the string \qtt{\csfmt{relax}}. If this value is written to the \ext{glstex} file:
+\begin{codeenv}
+\field{user1}=\marg{\csfmt{relax}},
+\end{codeenv}
+then this would be parsed as the command \csfmt{relax} when the file is input
+by \gls{GlsXtrLoadResources}.
+
+Therefore, \gls{INTERPRET} automatically replaces all the \TeX\ special characters
+in the resulting string to ensure that they expand to their literal meanings 
+in the \LaTeX\ document.
+
+Now suppose instead that the resource options include:
+\begin{codeenv}
+\csopt[
+ \field{user1} = \gls{FIRSTUC} \marg{ \gls{INTERPRET} \marg{ \field{name} } },
+]{assign-fields}
+\end{codeenv}
+This first interprets the value of the \field{name} field and substitutes the special
+characters (so \code{\csfmt{relax}} becomes the string \qtt{\csfmt{glsbackslash} relax}). 
+The resulting string is then converted to \idx{sentencecase}, which results in
+\qtt{\csfmt{Glsbackslash} relax} because the initial backslash is now a literal character,
+and since it's a non-letter character it's skipped by the case-conversion.
+So now the code written to the \ext{glstex} file is:
+\begin{codeenv}
+\gls{bibglsnewindex}\marg{comment}\comment{}
+\marg{\field{user1}=\marg{\csfmt{Glspercentchar} \cs{space} comment},
+\field{name}=\marg{\cs{cs.percent} comment},
+\field{sort}=\marg{comment|}}
+\strut
+\gls{bibglsnewindex}\marg{relax}\comment{}
+\marg{\field{user1}=\marg{\csfmt{Glsbackslash} relax},
+\field{name}=\marg{\cmd{csfmt}\marg{relax}},
+\field{sort}=\marg{relax|}}
+\end{codeenv}
+This is invalid because \csfmt{Glspercentchar} and \csfmt{Glsbackslash} are not defined.
+
+Suppose the order of the quarks is swapped:
+\begin{codeenv}
+\csopt[
+ \field{user1} = \gls{INTERPRET} \marg{ \gls{FIRSTUC} \marg{ \field{name} } },
+]{assign-fields}
+\end{codeenv}
+This results in valid \LaTeX\ code:
+\begin{codeenv}
+\gls{bibglsnewindex}\marg{comment}\comment{}
+\marg{\field{user1}=\marg{\cs{glspercentchar} \cs{space} comment},
+\field{name}=\marg{\cs{cs.percent} comment},
+\field{sort}=\marg{comment|}}
+\strut
+\gls{bibglsnewindex}\marg{relax}\comment{}
+\marg{\field{user1}=\marg{\cs{glsbackslash} Relax},
+\field{name}=\marg{\cmd{csfmt}\marg{relax}},
+\field{sort}=\marg{relax|}}
+\end{codeenv}
+If you don't want the argument of a command to be affected by case-changing
+commands, you can use \ics{MFUblocker} or \ics{MFUexcl}. The 
+\sty{glossaries-extra} package writes this information in the \ext{aux}
+file for the benefit of \bibgls. See the \sty{mfirstuc}
+manual for further details of those commands.
+
+\nosecdef{INTERPRETNOREPL}
+As \gls{INTERPRET} but doesn't replace special characters.
+Consider an adjustment to the previous example:
+\begin{codeenv}
+\csopt[
+ \field{user1} = \gls{FIRSTUC} \marg{ \gls{INTERPRETNOREPL} \marg{ \field{name} } },
+]{assign-fields}
+\end{codeenv}
+Now \code{\csfmt{csfmt}\marg{relax}} is converted into the literal string
+\qtt{\csfmt{relax}} and then the case-conversion is performed,
+which results in the literal string \qtt{\csfmt{Relax}} but this will become
+an undefined command in the \ext{glstex} file:
+\begin{codeenv}
+\field{user1}=\marg{\csfmt{Relax}},
+\end{codeenv}
+In the case of the \qt{comment} entry, \code{\cs{cs.percent} comment} will 

@@ Diff output truncated at 1234567 characters. @@


More information about the tex-live-commits mailing list.