glossaries-extra.sty v1.10: an extension to the glossaries package

Nicola L.C. Talbot
Dickimaw Books
http://www.dickimaw-books.com/

2016-12-17

Abstract

The glossaries-extra package is an extension to the glossaries package, providing additional features. Some of the features provided by this package are only available with glossaries version 4.19 (or above). This document assumes familiarity with the glossaries package.

Since glossaries-extra internally loads the glossaries package, you also need to have glossaries installed and all the packages that glossaries depends on (including, but not limited to, tracklang, mfirstuc, etoolbox, xkeyval (at least version dated 2006/11/18), textcase, xfor, datatool-base and amsgen. These packages are all available in the current TEX Live and MikTEX distributions. If any of them are missing, please update your TEX distribution using your update manager. (For help on this see, for example, How do I update my TEX distribution? or Updating TEX on Linux.)

Additional resources:

- The glossaries-extra documented code glossaries-extra-code.pdf.
- The glossaries-extra gallery.
- Glossaries, Nomenclature, Lists of Symbols and Acronyms.

## Contents

1 Introduction
1.1 Package Defaults
1.2 New or Modified Package Options
2 Modifications to Existing Commands and Styles
2.1 Entry Indexing
2.2 Entry Display Style Modifications
2.3 Entry Counting Modifications
2.4 Nested Links
2.5 Acronym Style Modifications
2.6 Glossary Style Modifications
2.6.1 Style Hooks
2.6.2 Number List
2.6.3 The glossaries-extra-stylemods Package
3 Abbreviations
3.1 Tagging Initials
3.2 Abbreviation Styles
3.3 Shortcut Commands
3.4 Predefined Abbreviation Styles
3.4.1 Predefined Abbreviation Styles that Set the Regular Attribute
3.4.2 Predefined Abbreviation Styles that Don’t Set the Regular Attribute
3.5 Defining New Abbreviation Styles
4 Entries in Sectioning Titles, Headers, Captions and Contents
5 Categories
6 Entry Counting
7 Auto-Indexing
8 On-the-Fly Document Definitions
9 Supplemental Packages
9.1 Prefixes or Determiners
9.2 Accessibility Support
10 Sample Files
11 Multi-Lingual Support
Glossary

## 1. Introduction

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

The glossaries-extra package is an attempt to provide a compromise for this conflict. Version 4.22 of the glossaries package is the last version to incorporate new features.1.1 Future versions of glossaries will just be bug fixes. New features will instead be added to glossaries-extra. This means that the base glossaries package won’t increase in terms of package loading time and allocation of resources, but those users who do want extra features available will have more of a chance of getting their feature requests accepted.

Top

###

### 1.1 Package Defaults

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

The new defaults are:

- toc=true (add the glossaries to the table of contents). Use toc=false to switch this back off.
- nopostdot=true (suppress the terminating full stop after the description in the glossary). Use nopostdot=false to restore the terminating full stop (period).
- noredefwarn=true (suppress the warnings that occur when the theglossary environment and \printglossary are redefined while glossaries is loading). To restore the warnings, use noredefwarn=false. Note that this won’t have any effect if the glossaries package has already been loaded before you use the glossaries-extra package.
- If babel has been loaded, the translate=babel option is switched on. To revert to using the translator interface, use translate=true. There is no change to the default if babel hasn’t been loaded.

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

1. \documentclass{article}
   \usepackage{glossaries-extra}

   This is like:

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

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

   This is like:

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

3. \documentclass{memoir}
   \usepackage{glossaries-extra}

   This is like:

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

   However

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

   This is like:

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

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

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

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

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

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

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

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

(where the original file is called test.tex) but if you simply call makeindex directly to generate the .acr file (without attempting to create the .gls file) then the transcript file will always contain the message:

No file test.gls.

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

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

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

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

Top

###

### 1.2 New or Modified Package Options

If you haven’t already loaded glossaries, you can use any of the package options provided by glossaries when you load glossaries-extra and they will automatically be passed to glossaries (which glossaries-extra will load). If glossaries has already been loaded, then those options will be passed to \setupglossaries, but remember that not all of the glossaries package options may be used in that command.

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

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

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

  If you want to define styles that can interface with the accessibility support provided by glossaries-accsupp use the \glsaccess⟨xxx⟩ type of commands instead of \glsentry⟨xxx⟩ (for example, \glsaccesstext instead of \glsentrytext). If glossaries-accsupp hasn’t been loaded those commands are equivalent (for example, \glsaccesstext just does \glsentrytext) but if it has been loaded, then the \glsaccess⟨xxx⟩ commands will add the accessibility information. (See §9.2 Accessibility Support for further details.)

  Note that the accsupp option can only be used as a package option (not through \glossariesextrasetup) since the glossaries-accsupp package must be loaded before glossaries-extra if it’s required.

stylemods
  This is a ⟨key⟩=⟨value⟩ option used to load the glossaries-extra-stylemods package. The value may be a comma-separated list of options to pass to that package. (Remember to group ⟨value⟩ if it contains any commas.) The value may be omitted if no options need to be passed. See §2.6 Glossary Style Modifications for further details.
undefaction
  This is a ⟨key⟩=⟨value⟩ option, which has two allowed values: warn and error. This indicates what to do if an undefined glossary entry is referenced. The default behaviour is undefaction=error, which produces an error message (the default for glossaries). You can switch this to a warning message (and ?? appearing in the text) with undefaction=warn.
record
  (New to v1.08.) This is a ⟨key⟩=⟨value⟩ option, which has three allowed values: off (default), only and alsoindex. If the value is omitted only is assumed. The option is provided for the benefit of any post-processing applications that need to know information about the entries used in the document. The option may only be set in the preamble.

  The record=off option switches off the recording, as per the default behaviour. It implements undefaction=error

  The other values switch on the recording and also undefaction=warn, but record=only will also switch off the indexing mechanism (even if \makeglossaries or \makenoidxglossaries has been used) whereas record=alsoindex will both record and index.

  With the recording on, any of the commands that would typically index the entry (such as \gls, \glstext or \glsadd) will add a \glsxtr@record entry to the .aux file. The post-processing application can then read these lines to find out which entries have been used. (Remember that commands like \glsentryname don’t index, so any use of these commands won’t add a corresponding \glsxtr@record entry to the .aux file.)

  There are two new commands that are intended for use with the recording function:

  \glsxtrresourcefile \glsxtrresourcefile[⟨options⟩]{⟨filename⟩}

  This writes the line

  \glsxtr@resource{⟨options⟩}{⟨filename⟩}
  to the .aux file and, if ⟨filename⟩ exists, will then input ⟨filename⟩. The post-processor may use this information to create the required file. The options aren’t processed by glossaries-extra (other than simply writing ⟨options⟩ to the .aux file). The post-processor determines the allowed options.

  \printunsrtglossary \printunsrtglossary[⟨options⟩]

  This behaves like \printnoidxglossary but never sorts the entries and always lists all the defined entries for the given glossary (and doesn’t require \makenoidxglossaries). The optional argument is as for \printnoidxglossary. The number list will need setting by the post-processor by adding the loclist field to the entry definitions, otherwise the number list will be empty. The loclist field should be a comma-separated list where each location in the list is in the format

  \glsnoidxdisplayloc{⟨prefix⟩}{⟨counter⟩}{⟨format⟩}{⟨location⟩}

  (see the glossaries manual for information about that command).

  All glossaries may be displayed in the order of their definition using:

  \printunsrtglossaries \printunsrtglossaries

  which is analogous to \printnoidxglossaries.

docdef
  This option governs the use of \newglossaryentry. It was originally a boolean option, but as from version 1.06, it can now take one of three values (if the value is omitted, true is assumed):
  - \newglossaryentry is not permitted in the document environment (default).
  - \newglossaryentry behaves as it does in the base glossaries package. That is, where its use is permitted in the document environment, it uses the .glsdefs temporary file to store the entry definitions so that on the next LA TEX run the entries are defined at the beginning of the document environment. This allows the entry information to be referenced in the glossary, even if the glossary occurs before \newglossaryentry. (For example, when the glossary is displayed in the front matter.) This method of saving the definitions for the next LA TEX run has drawbacks that are detailed in the glossaries user manual.
  - (new to version 1.06) \newglossaryentry is permitted in the document environment without using the .glsdefs file. This means that all entries must be defined before the glossary is displayed, but it avoids the complications associated with saving the entry details in a temporary file. You will still need to take care about any changes made to characters that are required by the ⟨key⟩=⟨value⟩ mechanism (that is, the comma and equal sign) and any makeindex or xindy character that occurs in the sort key or label. If any of those characters are made active in the document, then it can cause problems with the entry definition. This option will allow \newglossaryentry to be used in the document with \makenoidxglossaries, but note that \longnewglossaryentry remains a preamble-only command.

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

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

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

nomissingglstext
  This is a boolean option. If true, this will suppress the warning text that will appear in the document if the external glossary files haven’t been generated due to an incomplete document build. However, it’s probably simpler just to fix whatever has caused the failure to build the external file or files.
indexcrossrefs
  This is a boolean option. If true, this will automatically index any cross-referenced entries that haven’t been marked as used at the end of the document. Note that this necessarily adds to the overall document build time, especially if you have defined a large number of entries, so this defaults to false, but it will be automatically switched on if you use the see key in any entries. To force it off, even if you use the see, you need to explicitly set indexcrossrefs to false.
abbreviations
  This option has no value and can’t be cancelled. If used, it will automatically create a new glossary with the label abbreviations and redefines \glsxtrabbrvtype to this label. In addition, it defines a shortcut command

  \printabbreviations \printabbreviations[⟨options⟩]

  which is equivalent to

  \printglossary[type=\glsxtrabbrvtype,⟨options⟩]
  The title of the new glossary is given by

  \abbreviationsname \abbreviationsname

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

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

  If the abbreviations option is used and the acronym option provided by the glossaries package hasn’t been used, then \acronymtype will be set to \glsxtrabbrvtype so that acronyms defined with \newacronym can be added to the list of abbreviations. If you want acronyms in the main glossary and other abbreviations in the abbreviations glossary then you will need to redefine \acronymtype to main:

  \renewcommand*{\acronymtype}{main}

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

symbols
  This is passed to glossaries but will additionally define

  \glsxtrnewsymbol \glsxtrnewsymbol[⟨options⟩]{⟨label⟩}{⟨symbol⟩}

  which is equivalent to

  \newglossaryentry{⟨label⟩}{name={⟨symbol⟩},
  sort={⟨label⟩},type=symbols,category=symbol,⟨options⟩}
  Note that the sort key is set to the ⟨label⟩ not the ⟨symbol⟩ as the symbol will likely contain commands.
numbers
  This is passed to glossaries but will additionally define

  \glsxtrnewnumber \glsxtrnewnumber[⟨options⟩]{⟨number⟩}

  which is equivalent to

  \newglossaryentry{⟨label⟩}{name={⟨number⟩},
  sort={⟨label⟩},type=numbers,category=number,⟨options⟩}
shortcuts
  Unlike the glossaries package option of the same name, this option isn’t boolean but has multiple values:
  - shortcuts=acronyms (or shortcuts=acro): set the shortcuts provided by the glossaries package for acronyms (such as \ac).
  - shortcuts=abbreviations (or shortcuts=abbr): set the abbreviation shortcuts provided by glossaries-extra. (See §3.3 Shortcut Commands.) These settings don’t switch on the acronym shortcuts provided by the glossaries package.
  - shortcuts=other: set the “other” shortcut commands, but not the shortcut commands for abbreviations or the acronym shortcuts provided by glossaries. The “other” shortcuts are:
    - \newentry equivalent to \newglossaryentry
    - \newsym equivalent to \glsxtrnewsymbol (see the symbols option).
    - \newnum equivalent to \glsxtrnewnumber (see the numbers option).
  - shortcuts=all (or shortcuts=true): define all the shortcut commands.
  - shortcuts=none (or shortcuts=false): don’t define any of the shortcut commands (default).

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

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

\glossariesextrasetup \glossariesextrasetup{⟨options⟩}

The abbreviations and docdef options may only be used in the preamble. Additionally, docdef can’t be used after \makenoidxglossaries.

Top

## 2. Modifications to Existing Commands and Styles

The commands used by glossaries to automatically produce an error if an entry is undefined (such as \glsdoifexists) are changed to take the undefaction option into account.

The \newglossaryentry command has a new key called category, which sets the category label for the given entry. By default this is general. See §5 Categories for further information about categories.

The \newterm command (defined through the index package option) is modified so that the category defaults to index. The \newacronym command is modified to use the new abbreviation interface provided by glossaries-extra. (See §3 Abbreviations.)

The \makeglossaries command now has an optional argument.

\makeglossaries \makeglossaries[⟨list⟩]

If ⟨list⟩ is empty, \makeglossaries behaves as per its original definition in the glossaries package, otherwise ⟨list⟩ can be a comma-separated list of glossaries that need processing with an external indexing application.

It should then be possible to use \printglossary for those glossaries listed in ⟨list⟩ and \printnoidxglossary for the other glossaries.

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

You will need at least version 2.20 of makeglossaries or at least version 1.3 of makeglossaries-lite.lua (both distributed with glossaries v4.27) to allow for this use of \makeglossaries[⟨list⟩]. Alternatively, use the automake option.

Top

###

### 2.1 Entry Indexing

The glossaries-extra package provides an extra key for commands like \gls and \glstext called noindex. This is a boolean key. If true, this suppresses the indexing. (That is, it prevents \gls or whatever from adding a line to the external glossary file.) This is more useful than the indexonlyfirst package option provided by glossaries, as the first use might not be the most pertinent use. (If you want to apply indexonlyfirst to selected entries, rather than all of them, you can use the indexonlyfirst attribute, see §5 Categories for further details.) Note that the noindex key isn’t available for \glsadd (and \glsaddall) since the whole purpose of that command is to index an entry.

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

\glsxtrdowrglossaryhook \glsxtrdowrglossaryhook{⟨label⟩}

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

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

This modification allows glossaries-extra to provide

\glsxtraddallcrossrefs \glsxtraddallcrossrefs

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

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

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

\glsxtrusesee \glsxtrusesee{⟨label⟩}

This internally uses

\glsxtruseseeformat \glsxtruseseeformat{⟨tag⟩}{⟨xr list⟩}

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

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

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

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

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

Top

###

### 2.2 Entry Display Style Modifications

Recall from the glossaries package that commands such as \gls display text at that point in the document (optionally with a hyperlink to the relevant line in the glossary). This text is referred to as the “link-text” regardless of whether or not it actually has a hyperlink. The actual text and the way it’s displayed depends on the command used (such as \gls) and the entry format.

The default entry format (\glsentryfmt) used in the link-text by commands like \gls, \glsxtrfull, \glsxtrshort and \glsxtrlong (but not commands like \glslink, \glsfirst and \glstext) is changed by glossaries-extra to test for regular entries, which are determined as follows:

- If an entry is assigned to a category that has the regular attribute set (see §5 Categories), the entry is considered a regular entry, even if it has a value for the short key. In this case \glsentryfmt uses \glsgenentryfmt (provided by glossaries), which uses the first (or firstplural) value on first use and the text (or plural) value on subsequent use.
- An entry that doesn’t have a value for the short key is assumed to be a regular entry, even if the regular attribute isn’t set to “true” (since it can’t be an abbreviation without the short form). In this case \glsentryfmt uses \glsgenentryfmt.
- If an entry does has a value for the short key and hasn’t been marked as a regular entry through the regular attribute, it’s not considered a regular entry. In this case \glsentryfmt uses \glsxtrgenabbrvfmt (defined by glossaries-extra) which is governed by the abbreviation style (see §3.2 Abbreviation Styles).

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

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

\glsxtrregularfont \glsxtrregularfont{⟨text⟩}

This just does its argument ⟨text⟩ by default. This means that if you want regular entries in a different font but don’t want that font to apply to abbreviations, then you can redefine \glsxtrregularfont. This is more precise than changing \glstextformat which will be applied to all linking commands for all entries.

For example:

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

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

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

or query the category attribute:

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

or use the attribute to store the control sequence name:

\glssetcategoryattribute{general}{font}{textsf}
\glssetcategoryattribute{acronym}{font}{emph}
\renewcommand*{\glsxtrregularfont}[1]{%
\glshasattribute{\glslabel}{font}%
{\csuse{\glsgetattribute{\glslabel}{font}}{#1}}%
{#1}%
}

(Remember the category and attribute settings will only queried here for regular entries, so if the abbreviation style for the acronym category in the above example changes the regular attribute to “false”, \glsxtrregularfont will no longer apply.)

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

\glsxtrpostlinkhook \glsxtrpostlinkhook

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

\glsxtrpostlink \glsxtrpostlink

if a full stop hasn’t be discarded and

\glsxtrpostlinkendsentence \glsxtrpostlinkendsentence

if a full stop has been discarded.

Avoid the use of \gls-like and \glstext-like commands within the post-link hook as they will cause interference. Consider using commands like \glsentrytext, \glsaccesstext or \glsxtrp (§2.4 Nested Links) instead.

By default \glsxtrpostlink just does \glsxtrpostlink⟨category⟩ if it exists, where ⟨category⟩ is the category label for the current entry. (For example, for the general category, \glsxtrpostlinkgeneral if it has been defined.)

The sentence-ending hook is slightly more complicated. If the command \glsxtrpostlink⟨category⟩ is defined the hook will do that and then insert a full stop with the space factor adjusted to match the end of sentence. If \glsxtrpostlink⟨category⟩ hasn’t been defined, the space factor is adjusted to match the end of sentence. This means that if you have, for example, an entry that ends with a full stop, a redundant following full stop will be discarded and the space factor adjusted (in case the entry is in uppercase) unless the entry is followed by additional material, in which case the following full stop is no longer redundant and needs to be reinserted.

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

\glsxtrpostlinkAddDescOnFirstUse \glsxtrpostlinkAddDescOnFirstUse

This will add the description in parentheses on first use.

For example, suppose you want to append the description in parentheses on first use for entries in the symbol category:

\newcommand*{\glsxtrpostlinksymbol}{%
\glsxtrpostlinkAddDescOnFirstUse
}

\glsxtrpostlinkAddSymbolOnFirstUse \glsxtrpostlinkAddSymbolOnFirstUse

This will append the symbol (if defined) in parentheses on first use.

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

\glsxtrifwasfirstuse \glsxtrifwasfirstuse{⟨true⟩}{⟨false⟩}

This will do ⟨true⟩ if the last used entry was the first use for that entry, otherwise it will do ⟨false⟩. (Requires at least glossaries v4.19 to work properly.) This command is locally set by commands like \gls, so don’t rely on it outside of the post-link-text hook.

Note that commands like \glsfirst and \glsxtrfull fake first use for the benefit of the post-link-text hooks by setting \glsxtrifwasfirstuse to \@firstoftwo. (Although, depending on the styles in use, they may not exactly match the text produced by \gls-like commands on first use.) However, the short-postfootnote style alters \glsxtrfull so that it fakes non-first use otherwise the inline full format would include the footnote, which is inappropriate.

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

\newcommand*{\glsxtrpostlinkgeneral}{%
\glsxtrifwasfirstuse{\footnote{\glsentrydesc{\glslabel}}}{}%
}

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

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

\GlsXtrSetDefaultGlsOpts \GlsXtrSetDefaultGlsOpts{⟨options⟩}

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

\GlsXtrSetDefaultGlsOpts{noindex}

and then use, for example, \gls[noindex=false]{sample} when you actually want the location added to the number list. These defaults may be overridden by other settings (such as category attributes) in addition to any settings passed in the option argument of commands like \glslink and \gls.

Note that if you don’t want any indexing, just omit \makeglossaries and \printglossaries (or analogous commands).

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

\GlsXtrSetAltModifier \GlsXtrSetAltModifier{⟨char⟩}{⟨options⟩}

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

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

Example:

\GlsXtrSetAltModifier{!}{noindex}

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

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

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

Top

###

### 2.3 Entry Counting Modifications

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

For example, instead of just doing:

\glsenableentrycount

you now need to do:

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

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

Further information about entry counting, including the new per-unit feature, is described in §6 Entry Counting.

Top

###

### 2.4 Nested Links

Complications arise when you use \gls in the value of the name field (or text or first fields, if set). This tends to occur with abbreviations that extend other abbreviations. For example, SHTML is an abbreviation for SSI enabled HTML, where SSI is an abbreviation for Server Side Includes and HTML is an abbreviation for Hypertext Markup Language.

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

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

The main problems are:

1. The first letter upper casing commands, such as \Gls, won’t work for the shtml entry on first use if the long form is displayed before the short form (which is the default abbreviation style). This will attempt to do
   \gls{\uppercase ssi} enabled \gls{html}

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

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

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

2. The long and abbreviated forms accessed through \glsentrylong and \glsentryshort are no longer expandable and so can’t be used be used in contexts that require this, such as PDF bookmarks.
3. The nested commands may end up in the sort key, which will confuse the indexing.
4. The shtml entry produces inconsistent results depending on whether the ssi or html entries have been used. Suppose both ssi and html are used before shtml. For example:
   This section discusses \gls{ssi}, \gls{html} and \gls{shtml}.

   This produces:

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

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

   Now let’s suppose the html entry is used before the shtml but the ssi entry is used after the shtml entry, for example:

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

   This produces:

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

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

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

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

   This produces:

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

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

   This is all aggravated by setting the style using the glossaries package’s \setacronymstyle. For example:

   \setacronymstyle{long-short}

   as this references the label through the use of \glslabel when displaying the long and short forms, but this value changes with each use of \gls, so instead of displaying “(SHTML)” at the end of the first use, it now displays “(HTML)”, since \glslabel has been changed to html by \gls{html}.

   Another oddity occurs if you reset the html entry between uses of the shtml entry. For example:

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

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

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

5. Each time the shtml entry is used, the html entry will also be indexed and marked as used, and on first use this will happen to both the ssi and html entries. This kind of duplication in the location list isn’t usually particularly helpful to the reader.
6. If hyperref is in use, you’ll get nested hyperlinks and there’s no consistent way of dealing with this across the available PDF viewers. If on the first use case, the user clicks on the “HTML” part of the “SSI enabled HTML (SHTML)” link, they may be directed to the HTML entry in the glossary or they may be directed to the SHTML entry in the glossary.

For these reasons it’s better to use the simple expandable commands like \glsentrytext or \glsentryshort in the definition of other entries (although that doesn’t fix the first problem). Alternatively use something like:

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

with glossaries or:

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

with glossaries-extra. This fixes all the above listed problems (as long as you don’t use \glsdesc). Note that replacing \gls with \acrshort in the original example may fix the first use issue, but it doesn’t fix any of the other problems listed above.

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

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

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

However if you’re really determined to use \gls in a field that may be included within some link-text, glossaries-extra patches internals used by the linking commands so that if \gls (or plural or case changing variants) occurs in the link-text it will behave as though you used \glstext[hyper=false,noindex] instead. Grouping is also added so that, for example, when \gls{shtml} is used for the first time the long form

\gls{ssi} enabled \gls{html}

is treated as

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

This overcomes problems 4, 5 and 6 listed above, but still doesn’t fix problems 1 and 2. Problem 3 usually won’t be an issue as most abbreviation styles set the sort key to the short form, so using these commands in the long form but not the short form will only affect entries with a style that sorts according to the long form (such as long-noshort-desc).

Additionally, any instance of the long form commands, such as \glsxtrlong or \acrlong will be temporarily redefined to just use

{\glsentrylong{⟨label⟩}⟨insert⟩}
(or case-changing versions). Similarly the short form commands, such as \glsxtrshort or \acrshort will use \glsentryshort in the argument of either \glsabbrvfont (for \glsxtrshort) or \acronymfont (for \acrshort). So if the shtml entry had instead been defined as:
\newacronym{shtml}{SHTML}{\acrshort{ssi} enabled \acrshort{html}}

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

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

whereas if the entry is defined as:

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

then the first use will be like:

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

Note that the first optional argument of \acrshort or \glsxtrshort is ignored in this context. (The final optional argument will be inserted, if present.) The abbreviation style that governs \glsabbrvfont will be set for \glsxtrshort. Note that \acrshort doesn’t set the abbreviation style.

Alternatively you can use:

\glsxtrp \glsxtrp{⟨field⟩}{⟨label⟩}

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

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

\glsps \glsps{⟨label⟩}

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

\glspt \glspt{⟨label⟩}

which is equivalent to \glsxtrp{text}{⟨label⟩}.

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

\glsxtrsetpopts \glsxtrsetpopts{⟨options⟩}

For example:

\glsxtrsetpopts{hyper=false}

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

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

\glossxtrsetpopts \glossxtrsetpopts

which by default just does

\glsxtrsetpopts{noindex}

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

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

For example,

\glsxtrp{short}{ssi}

is equivalent to

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

in the main body of the document or

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

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

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

{\glsxtrheadshort{ssi}}

(which recognises the headuc attribute.)

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

There are similar commands

\Glsxtrp \Glsxtrp{⟨field⟩}{⟨label⟩}

for first letter upper case and

\Glsxtrp \GLSxtrp{⟨field⟩}{⟨label⟩}

for all upper case.

If you use any of the case-changing commands, such as \Gls or \Glstext, (either all caps or first letter upper casing) don’t use any of the linking commands, such as \gls or \glstext, in the definition of entries for any of the fields that may be used by those case-changing commands.

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

If you really need nested commands, the safest method is

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

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

Example document:

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

Top

###

### 2.5 Acronym Style Modifications

The glossaries-extra package provides a new way of dealing with abbreviations and redefines \newacronym to use \newabbreviation (see §3 Abbreviations). The simplest way to update a document that uses \newacronym from glossaries to glossaries-extra is do just add

\setabbreviationstyle[acronym]{long-short}

before you define any entries. For example, the following document using just glossaries

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

can be easily adapted to use glossaries-extra:

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

Table 2.1 lists the nearest equivalent glossaries-extra abbreviation styles for the predefined acronym styles provided by glossaries, but note that the new styles use different formatting commands. See §3.4 Predefined Abbreviation Styles for further details.

Table 2.1: Old Acronym Styles \setacronymstyle{⟨old-style-name⟩} Verses New Abbreviation Styles \setabbreviationstyle[⟨category⟩]{⟨new-style-name⟩}

Old Style Name | New Style Name
long-sc-short | long-short-sc
long-sm-short | long-short-sm
long-sp-short | long-short with \renewcommand{\glsxtrfullsep}[1]{\glsacspace{#1}}
short-long | short-long
sc-short-long | short-sc-long
sm-short-long | short-sm-long
long-short-desc | long-short-desc
long-sc-short-desc | long-short-sc-desc
long-sm-short-desc | long-short-sm-desc
long-sp-short-desc | long-short-desc with \renewcommand{\glsxtrfullsep}[1]{\glsacspace{#1}}
short-long-desc | short-long-desc
sc-short-long-desc | short-sc-long-desc
sm-short-long-desc | short-sm-long-desc
dua | long-noshort
dua-desc | long-noshort-desc
footnote | short-footnote
footnote-sc | short-sc-footnote
footnote-sm | short-sm-footnote
footnote-desc | short-footnote-desc
footnote-sc-desc | short-sc-footnote-desc
footnote-sm-desc | short-sm-footnote-desc

The reason for introducing the new style of abbreviation commands provided by glossaries-extra is because the original acronym commands provided by glossaries are too restrictive to work with the internal modifications made by glossaries-extra. However, if you really want to restore the generic acronym function provided by glossaries you can use

\RestoreAcronyms \RestoreAcronyms

(before any use of \newacronym).

\RestoreAcronyms should not be used in combination with the newer glossaries-extra abbreviations. Don’t combine old and new style entries with the same type. The original glossaries acronym mechanism doesn’t work well with the newer glossaries-extra commands.

If you use \RestoreAcronyms, don’t use any of the commands provided by glossaries-extra intended for abbreviations (such as \glsxtrshort or \glsfmtshort) with entries defined via \newacronym as it will cause unexpected results.

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

\glsacspace \glsacspace{⟨label⟩}

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

\glsacspacemax \glsacspacemax

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

Any of the new abbreviation styles that use \glsxtrfullsep (such as long-short) can easily be changed to use \glsacspace with

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

The first use acronym font command

\firstacronymfont{⟨text⟩}

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

The subsequent use acronym font command

\acronymfont{⟨text⟩}

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

Top

###

### 2.6 Glossary Style Modifications

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

Top

####

#### 2.6.1 Style Hooks

The commands \glossentryname and \glossentrydesc are modified to take into account the glossname, glossdesc and glossdescfont attributes (see §5 Categories). This means you can make simple case-changing modifications to the name and description without defining a new glossary style.

There is a hook after \glossentryname and \Glossentryname:

\glsxtrpostnamehook \glsxtrpostnamehook{⟨label⟩}

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

\glsxtrdoautoindexname{⟨label⟩}{indexname}

See §7 Auto-Indexing for further details.

As from version 1.04, the post-name hook \glsxtrpostnamehook will also use \glsxtrpostname⟨category⟩ if it exists. You can use \glscurrententrylabel to obtain the entry label with the definition of this command. For example, suppose you are using a glossary style the doesn’t display the symbol, you can insert the symbol after the name for a particular category, say, the “symbol” category:

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

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

\glsxtrpostdescription \glsxtrpostdescription

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

This new command will do \glsxtrpostdesc⟨category⟩ if it exists, where ⟨category⟩ is the category label associated with the current entry. For example \glsxtrpostdescgeneral for entries with the category set to general or \glsxtrpostdescacronym for entries with the category set to acronym.

Since both \glossentry and \subglossentry set

\glscurrententrylabel \glscurrententrylabel

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

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

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

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

This feature can’t be used for glossary styles that ignore \glspostdescription or if you redefine \glspostdescription without including \glsxtrpostdescription. (For example, if you redefine \glspostdescription to do nothing instead of using the nopostdot option to suppress the terminating full stop.) See §2.6.3 The glossaries-extra-stylemods Package to patch the predefined styles provided by glossaries that are missing \glspostdescription.

Top

####

#### 2.6.2 Number List

The number list is now placed inside the argument of

\GlsXtrFormatLocationList \GlsXtrFormatLocationList{⟨number list⟩}

This is internally used by \glossaryentrynumbers. The nonumberlist option redefines \glossaryentrynumbers so that it doesn’t display the number list, but it still saves the number list in case it’s required.

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

If you want to, for example, change the font for the entire number list then redefine \GlsXtrFormatLocationList as appropriate. Don’t modify \glossaryentrynumbers.

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

\GlsXtrEnablePreLocationTag \GlsXtrEnablePreLocationTag{⟨page⟩}{⟨pages⟩}

where ⟨page⟩ is the text to display if the number list only contains a single location and ⟨pages⟩ is the text to display otherwise. For example:

\GlsXtrEnablePreLocationTag{Page: }{Pages: }

An extra run is required when using this command.

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

See the accompanying sample file sample-pages.tex.

Top

####

#### 2.6.3 The glossaries-extra-stylemods Package

As from v1.02, glossaries-extra now includes the package glossaries-extra-stylemods that will redefine the predefined styles to include the post-description hook (for those that are missing it). You will need to make sure the styles have already been defined before loading glossaries-extra. For example:

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

Alternatively you can load glossary-⟨name⟩.sty at the same time by passing ⟨name⟩ as a package option to glossaries-extra-stylemods. For example:

\usepackage{glossaries-extra}
\usepackage[longragged]{glossaries-extra-stylemods}

Another option is to use the stylemods key when you load glossaries-extra. You can omit a value if you only want to use the predefined styles that are automatically loaded by glossaries (for example, the long3col style):

\usepackage[style=long3col,stylemods]{glossaries-extra}

Or the value of stylemods may be a comma-separated list of the style package identifiers. For example:

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

Remember to group the value if it contains any commas:

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

Note that the inline style is dealt with slightly differently. The original definition provided by the glossary-inline package uses \glspostdescription at the end of the glossary (not after each entry description) within the definition of \glspostinline. The style modification changes this so that \glspostinline just does a full stop followed by space factor adjustment, and the description \glsinlinedescformat and sub-entry description formats \glsinlinesubdescformat are redefined to include \glsxtrpostdescription (not \glspostdescription). This means that the modified inline style isn’t affected by the nopostdot option, but the post-description category hook can still be used.

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

\eglssetwidest \eglssetwidest[⟨level⟩]{⟨name⟩}

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

\xglssetwidest \xglssetwidest[⟨level⟩]{⟨name⟩}

The widest entry value can later be retrieved using

\glsgetwidestname \glsgetwidestname

for the top-level entries and

\glsgetwidestsubname \glsgetwidestsubname{⟨level⟩}

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

The command \glsfindwidesttoplevelname provided by glossary-tree has a CamelCase synonym:

\glsFindWidestTopLevelName \glsFindWidestTopLevelName[⟨glossary list⟩]

Similar commands are also provided:

\glsFindWidestUsedTopLevelName \glsFindWidestUsedTopLevelName[⟨glossary list⟩]

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

\glsFindWidestUsedAnyName \glsFindWidestUsedAnyName[⟨glossary list⟩]

This is like the previous command but if doesn’t check the parent key. This is useful if all levels should have the same width for the name.

\glsFindWidestAnyName \glsFindWidestAnyName[⟨glossary list⟩]

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

\glsFindWidestUsedLevelTwo \glsFindWidestUsedLevelTwo[⟨glossary list⟩]

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

\glsFindWidestLevelTwo \glsFindWidestLevelTwo[⟨glossary list⟩]

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

\glsFindWidestUsedAnyNameSymbol \glsFindWidestUsedAnyNameSymbol [⟨glossary list⟩]{⟨register⟩}

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

\glsFindWidestAnyNameSymbol \glsFindWidestAnyNameSymbol[⟨glossary list⟩]{⟨register⟩}

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

\glsFindWidestUsedAnyNameSymbolLocation \glsFindWidestUsedAnyNameSymbolLocation [⟨glossary list⟩]{⟨symbol register⟩}{⟨location register⟩}

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

\glsFindWidestAnyNameSymbolLocation \glsFindWidestAnyNameSymbolLocation [⟨glossary list⟩]{⟨symbol register⟩}{⟨location register⟩}

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

\glsFindWidestUsedAnyNameLocation \glsFindWidestUsedAnyNameLocation [⟨glossary list⟩]{⟨register⟩}

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

\glsFindWidestAnyNameLocation \glsFindWidestAnyNameLocation[⟨glossary list⟩]{⟨register⟩}

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

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

\glsxtralttreeSymbolDescLocation \glsxtralttreeSymbolDescLocation {⟨label⟩}{⟨number list⟩}

for top-level entries and

\glsxtralttreeSubSymbolDescLocation \glsxtralttreeSubSymbolDescLocation {⟨label⟩}{⟨number list⟩}

for sub-entries.

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

\glsxtralttreeInit \glsxtralttreeInit

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

\glsxtrAltTreeIndent \glsxtrAltTreeIndent

For additional commands that are available with the alttree style, see the documented code (glossaries-extra-code.pdf). For examples, see the accompanying sample files sample-alttree.tex, sample-alttree-sym.tex and sample-alttree-marginpar.tex.

Top

## 3. Abbreviations

Abbreviations include acronyms (words formed from initial letters, such as “laser”), initialisms (initial letters of a phrase, such as “html”, that aren’t pronounced as words) and contractions (where parts of words are omitted, often replaced by an apostrophe, such as “don’t”). The “acronym” code provided by the glossaries package is misnamed as it’s more often than not used for initialisms instead. Acronyms tend not to be expanded on first use (although they may need to be described for readers unfamiliar with the term). They are therefore more like a regular term, which may or may not require a description in the glossary.

The glossaries-extra package corrects this misnomer, and provides better abbreviation handling, with

\newabbreviation \newabbreviation[⟨options⟩]{⟨label⟩}{⟨short⟩}{⟨long⟩}

This sets the category key to abbreviation by default, but that value may be overridden in ⟨options⟩. The category may have attributes that modify the way abbreviations are defined. For example, the insertdots attribute will automatically insert full stops (periods) into ⟨short⟩ or the noshortplural attribute will set the default value of the shortplural key to just ⟨short⟩ (without appending the plural suffix). See §5 Categories for further details.

See §2.4 Nested Links regarding the pitfalls of using commands like \gls or \glsxtrshort within ⟨short⟩ or ⟨long⟩.

Make sure that you set the category attributes before defining new abbreviations or they may not be correctly applied.

The \newacronym command provided by the glossaries package is redefined by glossaries-extra to use \newabbreviation with the category set to acronym (see also §2.5 Acronym Style Modifications) so

\newacronym \newacronym[⟨options⟩]{⟨label⟩}{⟨short⟩}{⟨long⟩}

is now equivalent to
\newabbreviation[type=\acronymtype,category=acronym,⟨options⟩] {⟨label⟩} {⟨short⟩} {⟨long⟩}

The \newabbreviation command is superficially similar to the glossaries package’s \newacronym but you can apply different styles to different categories. The default style is short-nolong for entries in the acronym category and short-long for entries in the abbreviation category. (These aren’t the same as the acronym styles provided by the glossaries package, although they may produce similar results.)

The short form is displayed within commands like \gls using

\glsfirstabbrvfont \glsfirstabbrvfont{⟨short-form⟩}

on first use and

\glsabbrvfont \glsabbrvfont{⟨short-form⟩}

for subsequent use.

These commands (\glsfirstabbrvfont and \glsabbrvfont) are reset by the abbreviation styles and whenever an abbreviation is used by commands like \gls (but not by commands like \glsentryshort) so don’t try redefining them outside of an abbreviation style.

If you use the long-short style, \glsabbrvfont is redefine to use

\glsabbrvdefaultfont \glsabbrvdefaultfont{⟨text⟩}

whereas the long-short-sc style redefines \glsabbrvfont to use \glsxtrscfont. If you want to use a different font-changing command you can either redefine \glsabbrvdefaultfont and use one of the base styles, such as long-short, or define a new style in a similar manner to the “sc”, “sm” or “em” styles.

Similarly the basic styles redefine \glsfirstabbrvfont to use

\glsfirstabbrvdefaultfont \glsfirstabbrvdefaultfont{⟨short-form⟩}

whereas the font modifier styles, such as long-short-sc, use their own custom command, such as \glsfirstscfont.

The commands that display the full form for abbreviations use \glsfirstabbrvfont to display the short form and

\glsfirstlongfont \glsfirstlongfont{⟨long-form⟩}

to display the long form on first use or for the inline full format. Commands like \glsxtrlong use

\glslongfont \glslongfont{⟨long-form⟩}

instead.

As with \glsabbrvfont, this command is changed by all styles. Currently all predefined abbreviation styles, except the “long-em” (emphasize long form) versions, provided by glossaries-extra redefine \glsfirstlongfont to use

\glsfirstlongdefaultfont \glsfirstlongdefaultfont{⟨long-form⟩}

and \glslongfont to use

\glslongdefaultfont \glslongdefaultfont{⟨long-form⟩}

You can redefine these command if you want to change the font used by the long form for all your abbreviations (except for the emphasize-long styles), or you can define your own abbreviation style that provides a different format for only those abbreviations defined with that style.

The “long-em” (emphasize long) styles use

\glsfirstlongemfont \glsfirstlongemfont{⟨long-form⟩}

instead of \glsfirstlongdefaultfont{⟨long-form⟩} and

\glslongemfont \glslongemfont{⟨long-form⟩}

instead of \glslongdefaultfont{⟨long-form⟩}. The first form \glsfirstlongemfont is initialised to use \glslongemfont.

Note that by default inserted material (provided in the final optional argument of commands like \gls), is placed outside the font command in the predefined styles. To move it inside, use:

\glsxtrinsertinsidetrue \glsxtrinsertinsidetrue

This applies to all the predefined styles. For example:

\setabbreviationstyle{long-short}
\renewcommand*{\glsfirstlongdefaultfont}[1]{\emph{#1}}
\glsxtrinsertinsidetrue

This will make the long form and the inserted text emphasized, whereas the default (without \glsxtrinsertinsidetrue) would place the inserted text outside of the emphasized font.

Note that for some styles, such as the short-long, the inserted text would be placed inside the font command for the short form (rather than the long form in the above example).

There are two types of full forms. The display full form, which is used on first use by commands like \gls and the inline full form, which is used by commands like \glsxtrfull. For some of the abbreviation styles, such as long-short, the display and inline forms are the same. In the case of styles such as short-nolong or short-footnote, the display and inline full forms are different.

These formatting commands aren’t stored in the short, shortplural, long or longplural fields, which means they won’t be used within commands like \glsentryshort (but they are used within commands like \glsxtrshort and \glsfmtshort). Note that \glsxtrlong and the case-changing variants don’t use \glsfirstlongfont.

Top

###

### 3.1 Tagging Initials

If you would like to tag the initial letters in the long form such that those letters are underlined in the glossary but not in the main part of the document, you can use

\GlsXtrEnableInitialTagging \GlsXtrEnableInitialTagging{⟨categories⟩} {⟨cs⟩}

before you define your abbreviations.

This command (robustly) defines ⟨cs⟩ (a control sequence) to accept a single argument, which is the letter (or letters) that needs to be tagged. The normal behaviour of this command within the document is to simply do its argument, but in the glossary it’s activated for those categories that have the tagging attribute set to “true”. For those cases it will use

\glsxtrtagfont \glsxtrtagfont{⟨text⟩}

This command defaults to \underline{⟨text⟩} but may be redefined as required.

The control sequence ⟨cs⟩ can’t already be defined when used with the unstarred version of \GlsXtrEnableInitialTagging for safety reasons. The starred version will overwrite any previous definition of ⟨cs⟩. As with redefining any commands, ensure that you don’t redefine something important. In fact, just forget the existence of the starred version and let’s pretend I didn’t mention it.

The first argument of \GlsXtrEnableInitialTagging is a comma-separated list of category names. The tagging attribute will automatically be set for those categories. You can later set this attribute for other categories (see §5 Categories) but this must be done before the glossary is displayed.

The accompanying sample file sample-mixtures.tex uses initial tagging for both the acronym and abbreviation categories:

\GlsXtrEnableInitialTagging{acronym,abbreviation}{\itag}

This defines the command \itag which can be used in the definitions. For example:

\newacronym
[description={a system for detecting the location and
speed of ships, aircraft, etc, through the use of radio
waves}% description of this term
]
{radar}% identifying label
{radar}% short form (i.e. the word)
{\itag{ra}dio \itag{d}etection \itag{a}nd \itag{r}anging}
\newabbreviation{xml}{XML}
{e\itag{x}tensible \itag{m}arkup \itag{l}anguage}

The underlining of the tagged letters only occurs in the glossary and then only for entries with the tagging attribute set.

Top

###

### 3.2 Abbreviation Styles

The abbreviation style must be set before abbreviations are defined using:

\setabbreviationstyle \setabbreviationstyle[⟨category⟩]{⟨style-name⟩}

where ⟨style-name⟩ is the name of the style and ⟨category⟩ is the category label (abbreviation by default). New abbreviations will pick up the current style according to their given category. If there is no style set for the category, the fallback is the style for the abbreviation category. Some styles may automatically modify one or more of the attributes associated with the given category. For example, the long-noshort and short-nolong styles set the regular attribute to true.

If you want to apply different styles to groups of abbreviations, assign a different category to each group and set the style for the given category.

Note that \setacronymstyle is disabled by glossaries-extra. Use

\setabbreviationstyle[acronym]{⟨style-name⟩}
instead. The original acronym interface can be restored with \RestoreAcronyms (see §2.5 Acronym Style Modifications). However the original acronym interface is incompatible with all the commands described here.

Abbreviations can be used with the standard glossaries commands, such as \gls, but don’t use the acronym commands like \acrshort (which use \acronymfont). The short form can be produced with:

\glsxtrshort \glsxtrshort[⟨options⟩]{⟨label⟩}[⟨insert⟩]

(Use this instead of \acrshort.)

The long form can be produced with

\glsxtrlong \glsxtrlong[⟨options⟩]{⟨label⟩}[⟨insert⟩]

(Use this instead of \acrlong.)

The inline full form can be produced with

\glsxtrfull \glsxtrfull[⟨options⟩]{⟨label⟩}[⟨insert⟩]

(This this instead of \acrfull.)

As mentioned earlier, the inline full form may not necessarily match the format used on first use with \gls. For example, the short-nolong style only displays the short form on first use, but the full form will display the long form followed by the short form in parentheses.

If you want to use an abbreviation in a chapter or section title, use the commands described in §4 Entries in Sectioning Titles, Headers, Captions and Contents instead.

The arguments ⟨options⟩, ⟨label⟩ and ⟨insert⟩ are the same as for commands such as \glstext. There are also analogous case-changing commands:

First letter upper case short form:

\Glsxtrshort \Glsxtrshort[⟨options⟩]{⟨label⟩}[⟨insert⟩]

First letter upper case long form:

\Glsxtrlong \Glsxtrlong[⟨options⟩]{⟨label⟩}[⟨insert⟩]

First letter upper case inline full form:

\Glsxtrfull \Glsxtrfull[⟨options⟩]{⟨label⟩}[⟨insert⟩]

All upper case short form:

\Glsxtrshort \GLSxtrshort[⟨options⟩]{⟨label⟩}[⟨insert⟩]

All upper case long form:

\Glsxtrlong \GLSxtrlong[⟨options⟩]{⟨label⟩}[⟨insert⟩]

All upper case inline full form:

\GLSxtrfull \GLSxtrfull[⟨options⟩]{⟨label⟩}[⟨insert⟩]

Plural forms are also available.

Short form plurals:

\glsxtrshortpl \glsxtrshortpl[⟨options⟩]{⟨label⟩}[⟨insert⟩]

\Glsxtrshortpl \Glsxtrshortpl[⟨options⟩]{⟨label⟩}[⟨insert⟩]

\GLSxtrshortpl \GLSxtrshortpl[⟨options⟩]{⟨label⟩}[⟨insert⟩]

Long form plurals:

\glsxtrlongpl \glsxtrlongpl[⟨options⟩]{⟨label⟩}[⟨insert⟩]

\Glsxtrlongpl \Glsxtrlongpl[⟨options⟩]{⟨label⟩}[⟨insert⟩]

\GLSxtrlongpl \GLSxtrlongpl[⟨options⟩]{⟨label⟩}[⟨insert⟩]

Full form plurals:

\glsxtrfullpl \glsxtrfullpl[⟨options⟩]{⟨label⟩}[⟨insert⟩]

\Glsxtrfullpl \Glsxtrfullpl[⟨options⟩]{⟨label⟩}[⟨insert⟩]

\GLSxtrfullpl \GLSxtrfullpl[⟨options⟩]{⟨label⟩}[⟨insert⟩]

Be careful about using \glsentryfull, \Glsentryfull, \glsentryfullpl and \Glsentryfullpl. These commands will use the currently applied style rather than the style in use when the entry was defined. If you have mixed styles, you’ll need to use \glsxtrfull instead. Similarly for \glsentryshort etc.

Top

###

### 3.3 Shortcut Commands

The abbreviation shortcut commands can be enabled using the package option shortcuts=abbreviation (or shortcuts=abbr). This defines the commands listed in table 3.1.

Table 3.1: Abbreviation Shortcut Commands

Shortcut | Equivalent Command
\ab | \cgls
\abp | \cglspl
\as | \glsxtrshort
\asp | \glsxtrshortpl
\al | \glsxtrlong
\alp | \glsxtrlongpl
\af | \glsxtrfull
\afp | \glsxtrfullpl
\As | \Glsxtrshort
\Asp | \Glsxtrshortpl
\Al | \Glsxtrlong
\Alp | \Glsxtrlongpl
\Af | \Glsxtrfull
\Afp | \Glsxtrfullpl
\AS | \GLSxtrshort
\ASP | \GLSxtrshortpl
\AL | \GLSxtrlong
\ALP | \GLSxtrlongpl
\AF | \GLSxtrfull
\AFP | \GLSxtrfullpl
\newabbr | \newabbreviation

Top

###

### 3.4 Predefined Abbreviation Styles

There are two types of abbreviation styles: those that treat the abbreviation as a regular entry (so that \gls uses \glsgenentryfmt) and those that don’t treat the abbreviation as a regular entry (so that \gls uses \glsxtrgenabbrvfmt).

The regular entry abbreviation styles set the regular attribute to “true” for the category assigned to each abbreviation with that style. This means that on first use, \gls uses the value of the first field and on subsequent use \gls uses the value of the text field (and analogously for the plural and case-changing versions). The short and long fields are set as appropriate and may be accessed through commands like \glsxtrshort.

The other abbreviation styles don’t modify the regular attribute. The first and text fields (and their plural forms) are set and can be accessed through commands like \glsfirst, but they aren’t used by commands like \gls, which instead use the short form (stored in the short key) and the display full format (through commands like \glsxtrfullformat that are defined by the style).

In both cases, the first use of \gls may not match the text produced by \glsfirst (and likewise for the plural and case-changing versions).

For the “sc” styles that use \textsc, be careful about your choice of fonts as some only have limited support. For example, you may not be able to combine bold and small-caps. I recommend that you at least use the fontenc package with the T1 option or something similar.

The “sc” styles all use

\glsxtrscfont \glsxtrscfont{⟨text⟩}

which is defined as

\newcommand*{\glsxtrscfont}[1]{\textsc{#1}}

and

\glsxtrfirstscfont \glsxtrfirstscfont{⟨text⟩}

which is defined as

\newcommand*{\glsxtrfirstscfont}[1]{\glsxtrscfont{#1}}

The default plural suffix for the short form is set to

\glsxtrscsuffix \glsxtrscsuffix

This just defined as

\newcommand*{\glsxtrscsuffix}{\glstextup{\glspluralsuffix}}

The \glstextup command is provided by glossaries and is used to switch off the small caps font for the suffix. If you override the default short plural using the shortplural key when you define the abbreviation you will need to make the appropriate adjustment if necessary. (Remember that the default plural suffix behaviour can be modified through the use of the aposplural and noshortplural attributes. See §5 Categories for further details.)

Remember that \textsc renders lowercase letters as small capitals. Uppercase letters are rendered as normal uppercase letters, so if you specify the short form in uppercase, you won’t get small capitals unless you redefine \glsxtrscfont to convert its argument to lowercase. For example:

\renewcommand*{\glsxtrscfont}[1]{\textsc{\MakeLowercase{#1}}}

The “sm” styles all use

\glsxtrsmfont \glsxtrsmfont{⟨text⟩}

This is defined as:

\newcommand*{\glsxtrsmfont}[1]{\textsmaller{#1}}

and

\glsxtrfirstsmfont \glsxtrfirstsmfont{⟨text⟩}

which is defined as

\newcommand*{\glsxtrfirstsmfont}[1]{\glsxtrsmfont{#1}}

If you want to use this style, you must explicitly load the relsize package which defines the \textsmaller command. If you want to easily switch between the “sc” and “sm” styles, you may find it easier to redefine this command to convert to upper case:

\renewcommand*{\glsxtrsmfont}[1]{\textsmaller{\MakeTextUppercase{#1}}}

The default plural suffix for the short form is set to

\glsxtrsmsuffix \glsxtrsmsuffix

This just does \glspluralsuffix.

The “em” styles all use

\glsabbrvemfont \glsabbrvemfont{⟨text⟩}

which is defined as:

\newcommand*{\glsabbrvemfont}[1]{\emph{#1}}

and

\glsfirstabbrvemfont \glsfirstabbrvemfont{⟨text⟩}

which is defined as:

\newcommand*{\glsfirstabbrvemfont}[1]{\glsabbrvemfont{#1}}

Some of the styles use

\glsxtrfullsep \glsxtrfullsep{⟨label⟩}

as a separator between the long and short forms. This is defined as a space by default, but may be changed as required. For example:

\renewcommand*{\glsxtrfullsep}[1]{~}

or

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

The new naming scheme for abbreviation styles is as follows:

- ⟨field1⟩[-⟨modifier1⟩]-⟨field2⟩[-⟨modifier2⟩][-user]

  This is for the parenthetical styles. The -⟨modifier⟩ parts may be omitted. These styles display ⟨field1⟩ followed by ⟨field2⟩ in parentheses. If ⟨field2⟩ starts with “no” then the parenthetical element is omitted from the display style but is included in the inline style.

  If the -⟨modifier⟩ part is present, then the field has a font changing command applied to it.

  If the -user part is present, then the user1 value, if provided, is inserted into the parenthetical material . (The field used for the inserted material may be changed.)

  Examples:

  - long-noshort-sc: ⟨field1⟩ is the long form, the short form is set in smallcaps but omitted in the display style.
  - long-em-short-em: both the long form and the short form are emphasized. The short form is in parentheses.
  - long-short-em: the short form is emphasized but not the long form. The short form is in parentheses.
  - long-short-user: if the user1 key has been set, this produces the style ⟨long⟩ (⟨short⟩, ⟨user1⟩) otherwise it just produces ⟨long⟩ (⟨short⟩).
- ⟨field1⟩[-⟨modifier1⟩]-[post]footnote

  The display style uses ⟨field1⟩ followed by a footnote with the other field in it. If post is present then the footnote is placed after the link-text using the post-link hook. The inline style does ⟨field1⟩ followed by the other field in parentheses.

  If -⟨modifier1⟩ is present, ⟨field1⟩ has a font-changing command applied to it.

  Examples:

  - short-footnote: short form in the text with the long form in the footnote.
  - short-sc-postfootnote: short form in smallcaps with the long form in the footnote outside of the link-text.

  Take care with the footnote styles. Remember that there are some situations where \footnote doesn’t work.

- ⟨style⟩-desc

  Like ⟨style⟩ but the description key must be provided when defining abbreviations with this style.

  Examples:

  - short-long-desc: like short-long but requires a description.
  - short-em-footnote-desc: like short-em-footnote but requires a description.

Not all combinations that fit the above syntax are provided. Pre-version 1.04 styles that didn’t fit this naming scheme are either provided with a synonym (where the former name wasn’t ambiguous) or provided with a deprecated synonym (where the former name was confusing). The deprecated style names generate a warning using:

\GlsXtrWarnDeprecatedAbbrStyle \GlsXtrWarnDeprecatedAbbrStyle {⟨old-name⟩}{⟨new-name⟩}

where ⟨old-name⟩ is the deprecated name and ⟨new-name⟩ is the preferred name. You can suppress these warnings by redefining this command to do nothing.

Top

####

#### 3.4.1 Predefined Abbreviation Styles that Set the Regular Attribute

The following abbreviation styles set the regular attribute to “true” for all categories that have abbreviations defined with any of these styles.

short-nolong
  This only displays the short form on first use. The name is set to the short form. The description is set to the long form. The inline full form displays ⟨short⟩ (⟨long⟩). The long form on its own can be displayed through commands like \glsxtrlong.
short
  A synonym for short-nolong.
short-sc-nolong
  Like short-nolong but redefines \glsabbrvfont to use \glsxtrscfont.
short-sc
  A synonym for short-sc-nolong
short-sm-nolong
  Like short-nolong but redefines \glsabbrvfont to use \glsxtrsmfont.
short-sm
  A synonym for short-sm-nolong.
short-em-nolong
  Like short-nolong but redefines \glsabbrvfont to use \glsxtremfont.
short-em
  A synonym for short-em-nolong
short-nolong-desc
  Like the short-nolong style, but the name is set to the full form and the description must be supplied by the user. You may prefer to use the short-nolong style with the post-description hook set to display the long form and override the description key. (See the sample file sample-acronym-desc.tex.)
short-desc
  A synonym for short-nolong-desc.
short-sc-nolong-desc
  Like short-nolong but redefines \glsabbrvfont to use \glsxtrscfont.
short-sc-desc
  A synonym for short-sc-nolong-desc.
short-sm-nolong-desc
  Like short-nolong-desc but redefines \glsabbrvfont to use \glsxtrsmfont.
short-sm-desc
  A synonym for short-sm-nolong-desc.
short-em-nolong-desc
  Like short-nolong-desc but redefines \glsabbrvfont to use \glsxtremfont.
short-em-desc
  A synonym for short-em-nolong-desc.
long-noshort-desc
  This style only displays the long form, regardless of first or subsequent use of commands \gls. The short form may be accessed through commands like \glsxtrshort. The inline full form displays ⟨long⟩ (⟨short⟩).

  The name and sort keys are set to the long form and the description must be provided by the user. The predefined glossary styles won’t display the short form. You can use the post-description hook to automatically append the short form to the description. The inline full form will display ⟨long⟩ (⟨short⟩).

long-desc
  A synonym for long-noshort-desc.
long-noshort-sc-desc
  Like the long-noshort-desc style but the short form (accessed through commands like \glsxtrshort) use \glsxtrscfont. (This style was originally called long-desc-sc. Renamed in version 1.04, but original name retained as a deprecated synonym for backward-compatibility.)
long-noshort-sm-desc
  Like long-noshort-desc but redefines \glsabbrvfont to use \glsxtrsmfont. (This style was originally called long-desc-sm. Renamed in version 1.04, but original name retained as a deprecated synonym for backward-compatibility.)
long-noshort-em-desc
  Like long-noshort-desc but redefines \glsabbrvfont to use \glsxtremfont. The long form isn’t emphasized. (This style was originally called long-desc-em. Renamed in version 1.04, but original name retained as a deprecated synonym for backward-compatibility.)
long-em-noshort-em-desc
  New to version 1.04, like long-noshort-desc but redefines \glsabbrvfont to use \glsxtremfont. The long form uses \glsfirstlongemfont and \glslongemfont.
long-noshort
  This style doesn’t really make sense if you don’t use the short form anywhere in the document, but is provided for completeness. This is like the long-noshort-desc style, but the name and sort keys are set to the short form and the description is set to the long form.
long
  A synonym for long-noshort
long-noshort-sc
  Like the long-noshort style but the short form (accessed through commands like \glsxtrshort) use \glsxtrscfont. (This style was originally called long-sc. Renamed in version 1.04, but original name retained as a deprecated synonym for backward-compatibility.)
long-noshort-sm
  Like long-noshort but redefines \glsabbrvfont to use \glsxtrsmfont. (This style was originally called long-sm. Renamed in version 1.04, but original name retained as a deprecated synonym for backward-compatibility.)
long-noshort-em
  This style is like long-noshort but redefines \glsabbrvfont to use \glsxtremfont. The long form isn’t emphasized. (This style was originally called long-em. Renamed in version 1.04, but original name retained as a deprecated synonym for backward-compatibility.)
long-em-noshort-em
  New to version 1.04, this style is like long-noshort but redefines \glsabbrvfont to use \glsxtremfont, \glsfirstlongfont to use \glsfirstlongemfont and \glslongfont to use \glslongemfont. The short form isn’t used by commands like \gls, but can be obtained using \glsxtrshort.

Top

####

#### 3.4.2 Predefined Abbreviation Styles that Don’t Set the Regular Attribute

The following abbreviation styles will set the regular attribute to “false” if it has previously been set. If it hasn’t already been set, it’s left unset. Other attributes may also be set, depending on the style.

long-short
  On first use, this style uses the format ⟨long⟩ (⟨short⟩). The inline and display full forms are the same. The name and sort keys are set to the short form. (The name key additionally includes the font command \glsabbrvfont.) The description is set to the long form. The long and short forms are separated by \glsxtrfullsep. If you want to insert material within the parentheses (such as a translation), try the long-short-user style.
long-short-sc
  Like long-short but redefines \glsabbrvfont to use \glsxtrscfont.
long-short-sm
  Like long-short but redefines \glsabbrvfont to use \glsxtrsmfont.
long-short-em
  Like long-short but redefines \glsabbrvfont to use \glsxtremfont.
long-em-short-em
  New to version 1.04, this style is like long-short-em but redefines \glsfirstlongfont to use \glsfirstlongemfont.
long-short-user
  This style was introduced in version 1.04. It’s like the long-short style but additional information can be inserted into the parenthetical material. This checks the value of the field given by

  \glsxtruserfield \glsxtruserfield

  (which defaults to useri) using \ifglshasfield (provided by glossaries). If the field hasn’t been set, the style behaves like the long-short style and produces ⟨long⟩ (⟨short⟩) but if the field has been set, the contents of that field are inserted within the parentheses in the form ⟨long⟩ (⟨short⟩, ⟨field-value⟩). The format is governed by

  \glsxtruserparen \glsxtruserparen{⟨text⟩}{⟨label⟩}

  where ⟨text⟩ is the short form (for the long-short-user style) or the long form (for the short-long-user style). This command first inserts a space using \glsxtrfullsep and then the parenthetical content. The ⟨text⟩ argument includes the font formatting command, \glsfirstabbrvfont{⟨short⟩} in the case of the long-short-user style and \glsfirstlongfont{⟨long⟩} in the case of the short-long-user style.

  For example:

  \setabbreviationstyle[acronym]{long-short-user}
  \newacronym{tug}{TUG}{\TeX\ User Group}
  \newacronym
  [user1={German Speaking \TeX\ User Group}]
  {dante}{DANTE}{Deutschsprachige Anwendervereinigung \TeX\ e.V}

  On first use, \gls{tug} will appear as:

  TEX User Group (TUG)

  whereas \gls{dante} will appear as:

  Deutschsprachige Anwendervereinigung TEX e.V (DANTE, German Speaking TEX User Group)

  The short form is formatted according to

  \glsabbrvuserfont \glsabbrvuserfont{⟨text⟩}

  and the plural suffix is given by

  \glsxtrusersuffix \glsxtrusersuffix

  These may be redefined as appropriate. For example, if you want a smallcaps style, you can just set these commands to those used by the long-short-sc style:

  \renewcommand{\glsabbruserfont}[1]{\glsxtrscfont{#1}}
  \renewcommand{\glsxtrusersuffix}{\glsxtrscsuffix}

long-short-desc
  On first use, this style uses the format ⟨long⟩ (⟨short⟩). The inline and display full forms are the same. The name is set to the full form. The sort key is set to ⟨long⟩ (⟨short⟩). Before version 1.04, this was incorrectly set to the short form. If you want to revert back to this you can redefine

  \glsxtrlongshortdescsort \glsxtrlongshortdescsort

  For example:

  \renewcommand*{\glsxtrlongshortdescsort}{\the\glsshorttok}

  The description must be supplied by the user. The long and short forms are separated by \glsxtrfullsep.

long-short-sc-desc
  Like long-short-desc but redefines \glsabbrvfont to use \glsxtrscfont.
long-short-sm-desc
  Like long-short-desc but redefines \glsabbrvfont to use \glsxtrsmfont.
long-short-em-desc
  Like long-short-desc but redefines \glsabbrvfont to use \glsxtremfont.
long-em-short-em-desc
  New to version 1.04, this style is like long-short-em-desc but redefines \glsfirstlongfont to use \glsfirstlongemfont.
long-short-user-desc
  New to version 1.04, this style is like a cross between the long-short-desc style and the long-short-user style. The display and inline forms are as for long-short-user and the name key is as long-short-desc. The description key must be supplied in the optional argument of \newabbreviation (or \newacronym). The sort key is set to ⟨long⟩ (⟨short⟩) as per the long-short-desc style.
short-long
  On first use, this style uses the format ⟨short⟩ (⟨long⟩). The inline and display full forms are the same. The name and sort keys are set to the short form. The description is set to the long form. The short and long forms are separated by \glsxtrfullsep. If you want to insert material within the parentheses (such as a translation), try the short-long-user style.
short-sc-long
  Like short-long but redefines \glsabbrvfont to use \glsxtrscfont.
short-sm-long
  Like short-long but redefines \glsabbrvfont to use \glsxtrsmfont.
short-em-long
  Like short-long but redefines \glsabbrvfont to use \glsxtremfont.
short-em-long-em
  New to version 1.04, this style is like short-em-long but redefines \glsfirstlongfont to use \glsfirstlongemfont.
short-long-user
  New to version 1.04. This style is like the long-short-user style but with the long and short forms switched. The parenthetical material is governed by the same command \glsxtruserparen, but the first argument supplied to it is the long form instead of the short form.
short-long-desc
  On first use, this style uses the format ⟨short⟩ (⟨long⟩). The inline and display full forms are the same. The name is set to the full form. The description must be supplied by the user. The short and long forms are separated by \glsxtrfullsep.
short-sc-long-desc
  Like short-long-desc but redefines \glsabbrvfont to use \glsxtrscfont.
short-sm-long-desc
  Like short-long-desc but redefines \glsabbrvfont to use \glsxtrsmfont.
short-em-long-desc
  Like short-long-desc but redefines \glsabbrvfont to use \glsxtremfont.
short-em-long-em-desc
  New to version 1.04, this style is like short-em-long-desc but redefines \glsfirstlongfont to use \glsfirstlongemfont.
short-long-user-desc
  New to version 1.04, this style is like a cross between the short-long-desc style and the short-long-user style. The display and inline forms are as for short-long-user and the name key is as short-long-desc. The description key must be supplied in the optional argument of \newabbreviation (or \newacronym).
short-footnote
  On first use, this style displays the short form with the long form as a footnote. This style automatically sets the nohyperfirst attribute to “true” for the supplied category, so the first use won’t be hyperlinked (but the footnote marker may be, if the hyperref package is used).

  The inline full form uses the ⟨short⟩ (⟨long⟩) style. The name is set to the short form. The description is set to the long form.

  As from version 1.05, all the footnote styles use:

  \glsfirstlongfootnotefont \glsfirstlongfootnotefont{⟨text⟩}

  to format the long form on first use or for the full form and

  \glslongfootnotefont \glslongfootnotefont{⟨text⟩}

  to format the long form elsewhere (for example, when used with \glsxtrlong).

  As from version 1.07, all the footnote styles use:

  \glsxtrabbrvfootnote \glsxtrabbrvfootnote{⟨label⟩}{⟨long⟩}

  By default, this just does \footnote{⟨long⟩} (the first argument is ignored). For example, to make the footnote text link to the relevant place in the glossary:

  \renewcommand{\glsxtrabbrvfootnote}[2]{%
  \footnote{\glshyperlink[#2]{#1}}%
  }

  or to include the short form with a hyperlink:

  \renewcommand{\glsxtrabbrvfootnote}[2]{%
  \footnote{\glshyperlink[\glsfmtshort{#1}]{#1}: #2}%
  }

  Note that I haven’t used commands like \glsxtrshort to avoid interference (see §2.2 Entry Display Style Modifications and §2.4 Nested Links).

footnote
  A synonym for short-footnote.
short-sc-footnote
  Like short-footnote but redefines \glsabbrvfont to use \glsxtrscfont. (This style was originally called footnote-sc. Renamed in version 1.04, but original name retained as a deprecated synonym for backward-compatibility.)
short-sc-footnote
  Like short-footnote but redefines \glsabbrvfont to use \glsxtrsmfont. (This style was originally called footnote-sm. Renamed in version 1.04, but original name retained as a deprecated synonym for backward-compatibility.)
short-em-footnote
  Like short-footnote but redefines \glsabbrvfont to use \glsxtremfont. (This style was originally called footnote-em. Renamed in version 1.04, but original name retained as a deprecated synonym for backward-compatibility.)
short-postfootnote
  This is similar to the short-footnote style but doesn’t modify the category attribute. Instead it changes \glsxtrpostlink⟨category⟩ to insert the footnote after the link-text on first use. This will also defer the footnote until after any following punctuation character that’s recognised by \glsxtrifnextpunc.

  The inline full form uses the ⟨short⟩ (⟨long⟩) style. The name is set to the short form. The description is set to the long form. Note that this style will change \glsxtrfull (and it’s variants) so that it fakes non-first use. (Otherwise the footnote would appear after the inline form.)

postfootnote
  A synonym for short-postfootnote.
short-sc-postfootnote
  Like short-postfootnote but redefines \glsabbrvfont to use \glsxtrscfont. (This style was originally called postfootnote-sc. Renamed in version 1.04, but original name retained as a deprecated synonym for backward-compatibility.)
short-sm-postfootnote
  Like short-postfootnote but redefines \glsabbrvfont to use \glsxtrsmfont. (This style was originally called postfootnote-sm. Renamed in version 1.04, but original name retained as a deprecated synonym for backward-compatibility.)
short-em-postfootnote
  Like short-postfootnote but redefines \glsabbrvfont to use \glsxtremfont. (This style was originally called postfootnote-em. Renamed in version 1.04, but original name retained as a deprecated synonym for backward-compatibility.)

Top

###

### 3.5 Defining New Abbreviation Styles

New abbreviation styles may be defined using:

\newabbreviationstyle \newabbreviationstyle{⟨name⟩}{⟨setup⟩}{⟨fmts⟩}

where ⟨name⟩ is the name of the new style (as used in the mandatory argument of \setabbreviationstyle). This is similar but not identical to the glossaries package’s \newacronymstyle command.

You can’t use styles defined by \newacronymstyle with glossaries-extra unless you have reverted \newacronym back to its generic definition from glossaries (using \RestoreAcronyms). The acronym styles from the glossaries package can’t be used with abbreviations defined with \newabbreviation.

The ⟨setup⟩ argument deals with the way the entry is defined and may set attributes for the given abbreviation category. This argument should redefine

\CustomAbbreviationFields \CustomAbbreviationFields

to set the entry fields including the name (defaults to the short form if omitted), sort, first, firstplural. Other fields may also be set, such as text, plural and description.

\CustomAbbreviationFields is expanded by \newabbreviation so take care to protect commands that shouldn’t be expanded.

For example, the long-short style has the following in ⟨setup⟩:

\renewcommand*{\CustomAbbreviationFields}{%
name={\protect\glsabbrvfont{\the\glsshorttok}},
sort={\the\glsshorttok},
first={\protect\glsfirstlongfont{\the\glslongtok}%
\protect\glsxtrfullsep{\the\glslabeltok}%
(\protect\glsfirstabbrvfont{\the\glsshorttok})},%
firstplural={\protect\glsfirstlongfont{\the\glslongpltok}%
\protect\glsxtrfullsep{\the\glslabeltok}%
(\protect\glsfirstabbrvfont{\the\glsshortpltok})},%
plural={\protect\glsabbvfont{\the\glsshortpltok}},%
description={\the\glslongtok}}%

Note that the first and firstplural are set even though they’re not used by \gls.

The ⟨setup⟩ argument may also redefine

\GlsXtrPostNewAbbreviation \GlsXtrPostNewAbbreviation

which can be used to assign attributes. (This will automatically be initialised to do nothing.)

For example, the short-footnote includes the following in ⟨setup⟩:

\renewcommand*{\GlsXtrPostNewAbbreviation}{%
\glssetattribute{\the\glslabeltok}{nohyperfirst}{true}%
\glshasattribute{\the\glslabeltok}{regular}%
{%
\glssetattribute{\the\glslabeltok}{regular}{false}%
}%
{}%
}%

This sets the nohyperfirst attribute to “true”. It also unsets the regular attribute if it has previously been set. Note that the nohyperfirst attribute doesn’t get unset by other styles, so take care not to switch styles for the same category.

You can access the short, long, short plural and long plural values through the following token registers.

Short value (defined by glossaries):

\glsshorttok \glsshorttok

Short plural value (defined by glossaries-extra):

\glsshortpltok \glsshortpltok

(This may be the default value or, if provided, the value provided by the user through the shortplural key in the optional argument of \newabbreviation.)

Long value (defined by glossaries):

\glslongtok \glslongtok

Long plural value (defined by glossaries-extra):

\glslongpltok \glslongpltok

(This may be the default value or, if provided, the value provided by the user through the longplural key in the optional argument of \newabbreviation.)

There are two other registers available that are defined by glossaries:

\glslabeltok \glslabeltok

which contains the entry’s label and

\glskeylisttok \glskeylisttok

which contains the values provided in the optional argument of \newabbreviation.

Remember put \the in front of the register command as in the examples above. The category label can be access through the command (not a register):

\glscategorylabel \glscategorylabel

This may be used inside the definition of \GlsXtrPostNewAbbreviation.

If you want to base a style on an existing style, you can use

\GlsXtrUseAbbrStyleSetup \GlsXtrUseAbbrStyleSetup{⟨name⟩}

where ⟨name⟩ is the name of the existing style. For example, the short-sc-footnote and short-sm-footnote styles both simply use

\GlsXtrUseAbbrStyleSetup{short-footnote}

within ⟨setup⟩.

The ⟨fmts⟩ argument deals with the way the entry is displayed in the document. This argument should redefine the following commands:

The default suffix for the plural short form (if not overridden by the shortplural key):

\abbrvpluralsuffix \abbrvpluralsuffix

(Note that this isn’t used for the plural long form, which just uses the regular \glspluralsuffix.)

The font used for the short form on first use or in the full forms:

\glsfirstabbrvfont \glsfirstabbrvfont{⟨text⟩}

The font used for the short form on subsequent use or through commands like \glsxtrshort:

\glsabbrvfont \glsabbrvfont{⟨text⟩}

The font used for the long form on first use or in the full forms:

\glsfirstlongfont \glsfirstlongfont{⟨text⟩}

The font used for the long form in commands like \glsxtrlong use:

\glslongfont \glslongfont{⟨text⟩}

Display full form singular no case-change (used by \gls on first use for abbreviations without the regular attribute set):

\glsxtrfullformat \glsxtrfullformat{⟨label⟩}{⟨insert⟩}

Display full form singular first letter converted to upper case (used by \Gls on first use for abbreviations without the regular attribute set):

\Glsxtrfullformat \Glsxtrfullformat{⟨label⟩}{⟨insert⟩}

Display full form plural no case-change (used by \glspl on first use for abbreviations without the regular attribute set):

\glsxtrfullplformat \glsxtrfullplformat{⟨label⟩}{⟨insert⟩}

Display full form plural first letter converted to upper case (used by \Glspl on first use for abbreviations without the regular attribute set):

\Glsxtrfullplformat \Glsxtrfullplformat{⟨label⟩}{⟨insert⟩}

In addition ⟨fmts⟩ may also redefine the following commands that govern the inline full formats. If the style doesn’t redefine them, they will default to the same as the display full forms.

Inline singular no case-change (used by \glsentryfull, \glsxtrfull and \GLSxtrfull):

\glsxtrinlinefullformat \glsxtrinlinefullformat{⟨label⟩}{⟨insert⟩}

Inline singular first letter converted to upper case (used by \Glsentryfull and \Glsxtrfull):

\Glsxtrinlinefullformat \Glsxtrinlinefullformat{⟨label⟩}{⟨insert⟩}

Inline plural no case-change (used by \glsentryfullpl, \glsxtrfullpl and \GLSxtrfullpl):

\glsxtrinlinefullplformat \glsxtrinlinefullplformat{⟨label⟩}{⟨insert⟩}

Inline plural first letter converted to upper case (used by \Glsentryfullpl and \Glsxtrfullpl):

\Glsxtrinlinefullplformat \Glsxtrinlinefullplformat{⟨label⟩}{⟨insert⟩}

If you want to provide support for glossaries-accsupp use the following \glsaccess⟨xxx⟩ commands (§9.2 Accessibility Support) within the definitions of \glsxtrfullformat etc instead of the analogous \glsentry⟨xxx⟩ commands. (If you don’t use glossaries-accsupp, they will just do the corresponding \glsentry⟨xxx⟩ command.)

For example, the short-long style has the following in ⟨fmts⟩:

\renewcommand*{\abbrvpluralsuffix}{\glspluralsuffix}%
\renewcommand*{\glsabbrvfont}[1]{\glsabbrvdefaultfont{##1}}%
\renewcommand*{\glsfirstabbrvfont}[1]{\glsfirstabbrvdefaultfont{##1}}%
\renewcommand*{\glsfirstlongfont}[1]{\glsfirstlongdefaultfont{##1}}%
\renewcommand*{\glslongfont}[1]{\glslongdefaultfont{##1}}%
\renewcommand*{\glsxtrfullformat}[2]{%
\glsfirstabbrvfont{\glsaccessshort{##1}}##2\glsxtrfullsep{##1}%
(\glsfirstlongfont{\glsaccesslong{##1}})%
}%
\renewcommand*{\glsxtrfullplformat}[2]{%
\glsfirstabbrvfont{\glsaccessshortpl{##1}}##2\glsxtrfullsep{##1}%
(\glsfirstlongfont{\glsaccesslongpl{##1}})%
}%
\renewcommand*{\Glsxtrfullformat}[2]{%
\glsfirstabbrvfont{\Glsaccessshort{##1}}##2\glsxtrfullsep{##1}%
(\glsfirstlongfont{\glsaccesslong{##1}})%
}%
\renewcommand*{\Glsxtrfullplformat}[2]{%
\glsfirstabbrvfont{\Glsaccessshortpl{##1}}##2\glsxtrfullsep{##1}%
(\glsfirstlongfont{\glsaccesslongpl{##1}})%
}%

Since the inline full commands aren’t redefined, they default to the same as the display versions.

If you want to base a style on an existing style, you can use

\GlsXtrUseAbbrStyleFmts \GlsXtrUseAbbrStyleFmts{⟨name⟩}

within ⟨fmts⟩, where ⟨name⟩ is the name of the existing style. For example, the short-sc-long style has the following in ⟨fmts⟩:

\GlsXtrUseAbbrStyleFmts{short-long}%
\renewcommand*{\abbrvpluralsuffix}{\protect\glsxtrscsuffix}%
\renewcommand*{\glsabbrvfont}[1]{\glsxtrscfont{##1}}%

and the short-sm-long style has:

\GlsXtrUseAbbrStyleFmts{short-long-desc}%
\renewcommand*{\glsabbrvfont}[1]{\glsxtrsmfont{##1}}%
\renewcommand*{\abbrvpluralsuffix}{\protect\glsxtrsmsuffix}%

The simplest examples of creating a new style based on an existing style are the “em” styles, such as the short-em-long style, which is defined as:

\newabbreviationstyle
{short-em-long}% label
{% setup
\GlsXtrUseAbbrStyleSetup{short-long}%
}%
{% fmts
\GlsXtrUseAbbrStyleFmts{short-long}%
\renewcommand*{\glsabbrvfont}[1]{\glsxtremfont{##1}}%
}

Top

## 4. Entries in Sectioning Titles, Headers, Captions and Contents

The glossaries user manual cautions against using commands like \gls in chapter or section titles. The principle problems are:

- if you have a table of contents, the first use flag will be unset in the contents rather than later in the document;
- if you have the location lists displayed in the glossary, unwanted locations will be added to it corresponding to the table of contents (if present) and every page that contains the entry in the page header (if the page style in use adds the chapter or section title to the header);
- if the page style in use adds the chapter or section title to the header and attempts to convert it to upper case, the entry label (in the argument of \gls etc) will be converted to upper case and the entry won’t be recognised;
- if you use hyperref, commands like \gls can’t be expanded to a simple string and only the label will appear in the PDF bookmark (with a warning from hyperref);
- if you use hyperref, you will end up with nested hyperlinks in the table of contents.

Similar problems can also occur with captions (except for the page header and bookmark issues).

To get around all these problems, the glossaries user manual recommends using the expandable non-hyperlink commands, such as \glsentrytext (for regular entries) or \glsentryshort (for abbreviations). This is the simplest solution, but doesn’t allow for special formatting that’s applied to the entry through commands like \glstext or \glsxtrshort. This means that if, for example, you are using one of the abbreviation styles that uses \textsc then the short form displayed with \glsentryshort won’t use small caps. If you only have one abbreviation style in use, you can explicitly enclose \glsentryshort{⟨label⟩} in the argument of \glsabbrvfont, like this:

\chapter{A Chapter about \glsabbrvfont{\glsentryshort{html}}}

Or, if you are using hyperref:

\chapter{A Chapter about
\texorpdfstring{\glsabbrvfont{\glsentryshort{html}}}{\glsentryshort{html}}}

Since this is a bit cumbersome, you might want to define a new command to do this for you. However, if you have mixed styles this won’t work as commands like \gls and \glsxtrshort redefine \glsabbrvfont to match the entry’s style before displaying it. In this case, the above example doesn’t take into account the shifting definitions of \glsabbrvfont and will use whatever happens to be the last abbreviation style in use. More complicated solutions interfere with the upper casing used by the standard page styles that display the chapter or section title in the page header using \MakeUppercase.

The glossaries-extra package tries to resolve this by modifying \markright and \markboth. If you don’t like this change, you can restore their former definitions using

\glsxtrRevertMarks \glsxtrRevertMarks

In this case, you’ll have to use the glossaries manual’s recommendations of either simply using \glsentryshort (as above) or use the sectioning command’s option argument to provide an alternative for the table of contents and page header. For example:

\chapter[A Chapter about \glsentryshort{html}]{A Chapter about \gls{html}}

If you don’t revert the mark commands back with \glsxtrRevertMarks, you can use the commands described below in the argument of sectioning commands. You can still use them even if the mark commands have been reverted, but only where they don’t conflict with the page style.

The commands listed below all use \texorpdfstring if hyperref has been loaded so that the expandable non-formatted version is added to the PDF bookmarks. Note that since the commands that convert the first letter to upper case aren’t expandable, the non-case-changing version is used for the bookmarks.

These commands essentially behave as though you have used \glsxtrshort (or equivalent) with the options noindex and hyper=false. The text produced won’t be converted to upper case in the page headings by default. If you want the text converted to upper case you need to set the headuc attribute to “true” for the appropriate category.

If you use one of the \textsc styles, be aware that the default fonts don’t provide bold small-caps or italic small-caps. This means that if the chapter or section title style uses bold, this may override the small-caps setting, in which case the abbreviation will just appear as lower case bold. If the heading style uses italic, the abbreviation may appear in upright small-caps, even if you have set the headuc attribute since the all-capitals form still uses \glsabbrvfont. You may want to consider using the slantsc package in this case.

Display the short form:

\glsfmtshort \glsfmtshort{⟨label⟩}

Display the plural short form:

\glsfmtshortpl \glsfmtshortpl{⟨label⟩}

First letter upper case singular short form:

\Glsfmtshort \Glsfmtshort{⟨label⟩}

(No case-change applied to PDF bookmarks.)

First letter upper case plural short form:

\Glsfmtshortpl \Glsfmtshortpl{⟨label⟩}

(No case-change applied to PDF bookmarks.)

Display the long form:

\glsfmtlong \glsfmtlong{⟨label⟩}

Display the plural long form:

\glsfmtlongpl \glsfmtlongpl{⟨label⟩}

First letter upper case singular long form:

\Glsfmtlong \Glsfmtlong{⟨label⟩}

(No case-change applied to PDF bookmarks.)

First letter upper case plural long form:

\Glsfmtlongpl \Glsfmtlongpl{⟨label⟩}

(No case-change applied to PDF bookmarks.)

There are similar commands for the full form, but note that these use the inline full form, which may be different from the full form used by \gls.

Display the full form:

\glsfmtfull \glsfmtfull{⟨label⟩}

Display the plural full form:

\glsfmtfullpl \glsfmtfullpl{⟨label⟩}

First letter upper case singular full form:

\Glsfmtfull \Glsfmtfull{⟨label⟩}

(No case-change applied to PDF bookmarks.)

First letter upper case plural full form:

\Glsfmtfullpl \Glsfmtfullpl{⟨label⟩}

(No case-change applied to PDF bookmarks.)

There are also equivalent commands for the value of the text field:

\glsfmttext \glsfmttext{⟨label⟩}

First letter converted to upper case:

\Glsfmttext \Glsfmttext{⟨label⟩}

(No case-change applied to PDF bookmarks.)

The plural equivalents:

\glsfmtplural \glsfmtplural{⟨label⟩}

and

\Glsfmtplural \Glsfmtplural{⟨label⟩}

Similarly for the value of the first field:

\glsfmtfirst \glsfmtfirst{⟨label⟩}

First letter converted to upper case:

\Glsfmtfirst \Glsfmtfirst{⟨label⟩}

(No case-change applied to PDF bookmarks.)

The plural equivalents:

\glsfmtfirstpl \glsfmtfirstpl{⟨label⟩}

and

\Glsfmtfirstpl \Glsfmtfirstpl{⟨label⟩}

Top

## 5. Categories

Each entry defined by \newglossaryentry (or commands that internally use it such as \newabbreviation) is assigned a category through the category key. You may add any category that you like, but since the category is a label used in the creation of some control sequences, avoid problematic characters within the category label. (So take care if you have babel shorthands on that make some characters active.)

The use of categories can give you more control over the way entries are displayed in the text or glossary. Note that an entry’s category is independent of the glossary type. Be careful not to confuse category with type.

The default category assumed by \newglossaryentry is labelled general. Abbreviations defined with \newabbreviation have the category set to abbreviation by default. Abbreviations defined with \newacronym have the category set to acronym by default.

Additionally, if you have enabled \newterm with the index package option that command will set the category to index by default. If you have enabled \glsxtrnewsymbol with the symbols package option, that command will set the category to symbol. If you have enabled \glsxtrnewnumber with the numbers package option, that command will set the category to number.

You can obtain the category label for a given entry using

\glscategory \glscategory{⟨label⟩}

This is equivalent to commands like \glsentryname and so may be used in an expandable context. No error is generated if the entry doesn’t exist.

You can test the category for a given entry using

\glsifcategory \glsifcategory{⟨entry-label⟩}{⟨category-label⟩}{⟨true part⟩}{⟨false part⟩}

This is equivalent to

\ifglsfieldeq{⟨entry-label⟩}{category}{⟨category-label⟩}{⟨true
part⟩}{⟨false part⟩}
so any restrictions that apply to \ifglsfieldeq also apply to \glsifcategory.

Each category may have a set of attributes. For example, the general and acronym categories have the attribute regular set to “true” to indicate that all entries with either of those categories are regular entries (as opposed to abbreviations). This attribute is accessed by \glsentryfmt to determine whether to use \glsgenentryfmt or \glsxtrgenabbrvfmt.

Other attributes recognised by glossaries-extra are:

nohyperfirst
  When using commands like \gls this will automatically suppress the hyperlink on first use for entries with a category that has this attribute set to “true”. (This settings can be overridden by explicitly setting the hyper key on or off in the optional argument of commands like \gls.) As from version 1.07, \glsfirst, \Glsfirst, \GLSfirst and their plural versions (which should ideally behave in a similar way to the first use of \gls or \glspl) now honour this attribute (but not the package-wide hyperfirst=false option, which matches the behaviour of glossaries). If you want commands these \glsfirst etc commands to ignore the nohyperfirst attribute then just redefine

  \glsxtrchecknohyperfirst \glsxtrchecknohyperfirst{⟨label⟩}

  to do nothing.

nohyper
  When using commands like \gls this will automatically suppress the hyperlink for entries with a category that has this attribute set to “true”. (This settings can be overridden by explicitly setting the hyper key on or off in the optional argument of commands like \gls.)
indexonlyfirst
  This is similar to the indexonlyfirst package option but only for entries that have a category with this attribute set to “true”.
discardperiod
  If set to “true”, the post-link-text hook will discard a full stop (period) that follows non-plural commands like \gls or \glstext. (Provided for entries such as abbreviations that end with a full stop.)

  Note that this can cause a problem if you access a field that doesn’t end with a full stop. For example:

  \newabbreviation
  [user1={German Speaking \TeX\ User Group}]
  {dante}{DANTE e.V.}{Deutschsprachige Anwendervereinigung \TeX\
  e.V.}

  Here the short and long fields end with a full stop, but the user1 field doesn’t. The simplest solution in this situation is to put the sentence terminator in the final optional argument. For example:

  \glsuseri{dante}[.]

  This will bring the punctuation character inside the link-text and it won’t be discarded.

pluraldiscardperiod
  If this attribute is set to “true” and the discardperiod attribute is set to “true”, this will behave as above for the plural commands like \glspl or \glsplural.
retainfirstuseperiod
  If this attribute is set to “true” then the full stop won’t be discarded for first use instances, even if discardperiod or pluraldiscardperiod are set. This is useful for ⟨short⟩ (⟨long⟩) abbreviation styles where only the short form has a trailing full stop..
insertdots
  If this attribute is set to “true” any entry defined using \newabbreviation will automatically have full stops (periods) inserted after each letter. The entry will be defined with those dots present as though they had been present in the ⟨short⟩ argument of \newabbreviation (rather than inserting them every time the entry is used). The short plural form defaults to the new dotted version of the original ⟨short⟩ form with the plural suffix appended.

  If you explicitly override the short plural using the shortplural key, you must explicitly insert the dots yourself (since there’s no way for the code to determine if the plural has a suffix that shouldn’t be followed by a dot).

  This attribute is best used with the discardperiod attribute set to “true”.

aposplural
  If this attribute is set to “true”, \newabbreviation will insert an apostrophe (’) before the plural suffix for the short plural form (unless explicitly overridden with the shortplural key). The long plural form is unaffected by this setting.
noshortplural
  If this attribute is set to “true”, \newabbreviation won’t append the plural suffix for the short plural form. This means the short and shortplural values will be the same unless explicitly overridden. The aposplural attribute trumps the noshortplural attribute.
headuc
  If this attribute is set to “true”, commands like \glsfmtshort will use the upper case version in the page headers.
tagging
  If this attribute is set to “true”, the tagging command defined by \GlsXtrEnableInitialTagging will be activated to use \glsxtrtagfont in the glossary (see §3.1 Tagging Initials).
entrycount
  Unlike the above attributes, this attribute isn’t boolean but instead must be an integer value and is used in combination with \glsenableentrycount (see §2.3 Entry Counting Modifications). Leave blank or undefined for categories that shouldn’t have this facility enabled. The value of this attribute is used by \glsxtrifcounttrigger to determine how commands such as \cgls should behave.

  With glossaries, commands like \cgls use \cglsformat only if the previous usage count for that entry was equal to 1. With glossaries-extra the test is now for entries that have the entrycount attribute set and where the previous usage count for that entry is less than or equal to the value of that attribute.

glossdesc
  The \glossentrydesc command (used in the predefined glossary styles) is modified by glossaries-extra to check for this attribute. The attribute may have one of the following values:
  - firstuc: the first letter of the description will be converted to upper case (using \Glsentrydesc).
  - title: the description will be used in the argument of the title casing command \capitalisewords (provided by mfirstuc). If you want to use a different command you can redefine:

    \glsxtrfieldtitlecasecs \glsxtrfieldtitlecasecs{⟨phrase cs⟩}

    For example:

    \newcommand*{\glsxtrfieldtitlecasecs}[1]{\xcapitalisefmtwords*{#1}}

    (Note that the argument to \glsxtrfieldtitlecasecs will be a control sequence whose replacement text is the entry’s description, which is why \xcapitalisefmtwords is needed instead of \capitalisefmtwords.)

  Any other values of this attribute are ignored. Remember that there are design limitations for both the first letter uppercasing and the title casing commands. See the mfirstuc user manual for further details.

glossdescfont
  (New to version 1.04) In addition to the above, the modified \glossentrydesc command also checks this attribute. If set, it should be the name of a control sequence (without the leading backslash) that takes one argument. This control sequence will be applied to the description text. For example:
  \glssetcategoryattribute{general}{glossdescfont}{emph}

glossname
  As glossdesc but applies to \glossentryname. Additionally, if this attribute is set to “uc” the name is converted to all capitals.
indexname
  If set, the \glsxtrpostnamehook hook used at the end of \glossentyname will index the entry using \index. See §7 Auto-Indexing for further details.
glossnamefont
  (New to version 1.04) In addition to the above, the modified \glossentryname command also checks this attribute. If set, it should be the name of a control sequence (without the leading backslash) that takes one argument. This control sequence will be applied to the name text. For example:
  \glssetcategoryattribute{general}{glossnamefont}{emph}

  Note that this overrides \glsnamefont which will only be used if this attribute hasn’t been set.

  Remember that glossary styles may additionally apply a font change, such as the list styles which put the name in the optional argument of \item.

dualindex
  If set, whenever a glossary entry has information written to the external glossary file through commands like \gls and \glsadd, a corresponding line will be written to the indexing file using \index. See §7 Auto-Indexing for further details.

An attribute can be set using:

\glssetcategoryattribute \glssetcategoryattribute{⟨category-label⟩} {⟨attribute-label⟩}{⟨value⟩}

where ⟨category-label⟩ is the category label, ⟨attribute-label⟩ is the attribute label and ⟨value⟩ is the new value for the attribute.

There is a shortcut version to set the regular attribute to “true”:

\glssetregularcategory \glssetregularcategory{⟨category-label⟩}

If you need to lookup the category label for a particular entry, you can use the shortcut command:

\glssetattribute \glssetattribute{⟨entry-label⟩}{⟨attribute-label⟩} {⟨value⟩}

This uses \glssetcategoryattribute with \glscategory to set the attribute. Note that this will affect all other entries that share this entry’s category.

You can fetch the value of an attribute for a particular category using:

\glsgetcategoryattribute \glsgetcategoryattribute{⟨category-label⟩} {⟨attribute-label⟩}

Again there is a shortcut if you need to lookup the category label for a given entry:

\glsgetattribute \glsgetattribute{⟨entry-label⟩}{⟨attribute-label⟩}

You can test if an attribute has been assigned to a given category using:

\glshascategoryattribute \glshascategoryattribute{⟨category-label⟩} {⟨attribute-label⟩}{⟨true code⟩}{⟨false code⟩}

This uses etoolbox’s \ifcsvoid and does ⟨true code⟩ if the attribute has been set and isn’t blank and isn’t \relax. The shortcut if you need to lookup the category label from an entry is:

\glshasattribute \glshasattribute{⟨entry-label⟩}{⟨attribute-label⟩}{⟨true code⟩}{⟨false code⟩}

You can test the value of an attribute for a particular category using:

\glsifcategoryattribute \glsifcategoryattribute{⟨category-label⟩} {⟨attribute-label⟩}{⟨value⟩} {⟨true-part⟩}{⟨false-part⟩}

This tests if the attribute (given by ⟨attribute-label⟩) for the category (given by ⟨category-label⟩) is set and equal to ⟨value⟩. If true, ⟨true-part⟩ is done. If the attribute isn’t set or is set but isn’t equal to ⟨value⟩, ⟨false part⟩ is done.

For example:

\glsifcategoryattribute{general}{nohyper}{true}{NO HYPER}{HYPER}

This does “NO HYPER” if the general category has the nohyper attribute set to true otherwise if does “HYPER”.

With boolean-style attributes like nohyper, make sure you always test for true not false in case the attribute hasn’t been set.

Again there’s a shortcut if you need to lookup the category label from a particular entry:

\glsifattribute \glsifattribute{⟨entry-label⟩}{⟨attribute-label⟩}{⟨value⟩} {⟨true-part⟩} {⟨false-part⟩}

There’s also a shortcut to determine if a particular category has the regular attribute set to “true”:

\glsifregularcategory \glsifregularcategory{⟨category-label⟩} {⟨true-part⟩}{⟨false-part⟩}

Alternatively, if you need to lookup the category for a particular entry:

\glsifregular \glsifregular{⟨entry-label⟩}{⟨true-part⟩}{⟨false-part⟩}

Note that if the regular attribute hasn’t be set, the above do ⟨false-part⟩. There are also reverse commands that test if the regular attribute has been set to “false”:

\glsifnotregularcategory \glsifnotregularcategory{⟨category-label⟩} {⟨true-part⟩}{⟨false-part⟩}

or for a particular entry:

\glsifnotregular \glsifnotregular{⟨entry-label⟩}{⟨true-part⟩}{⟨false-part⟩}

Again, if the regular attribute hasn’t been set, the above do ⟨false-part⟩, so these reverse commands aren’t logically opposite in the strict sense.

You can iterate through all entries with a given category using:

\glsforeachincategory[⟨glossary-labels⟩]{⟨category-label⟩} {⟨glossary-cs⟩} {⟨label-cs⟩}{⟨body⟩}

This iterates through all entries in the glossaries identified by the comma-separated list ⟨glossary-labels⟩ that have the category given by ⟨category-label⟩ and performs ⟨body⟩ for each match. Within ⟨body⟩, you can use ⟨glossary-cs⟩ and ⟨label-cs⟩ (which much be control sequences) to access the current glossary and entry label. If ⟨glossary-labels⟩ is omitted, all glossaries are assumed.

Similarly, you can iterate through all entries that have a category with a given attribute using:

\glsforeachwithattribute \glsforeachwithattribute[⟨glossary-labels⟩] {⟨attribute-label⟩} {⟨attribute-value⟩}{⟨glossary-cs⟩}{⟨label-cs⟩}{⟨body⟩}

This will do ⟨body⟩ for each entry that has a category with the attribute ⟨attribute-label⟩ set to ⟨attribute-value⟩. The remaining arguments are as the previous command.

You can change the category for a particular entry using the standard glossary field changing commands, such as \glsfielddef. Alternatively, you can use

\glsxtrsetcategory \glsxtrsetcategory{⟨entry-labels⟩}{⟨category-label⟩}

This will change the category to ⟨category-label⟩ for each entry listed in the comma-separated list ⟨entry-labels⟩. This command uses \glsfieldxdef so it will expand ⟨category-label⟩ and make the change global.

You can also change the category for all entries with a glossary or glossaries using:

\glsxtrsetcategoryforall \glsxtrsetcategoryforall{⟨glossary-labels⟩} {⟨category-label⟩}

where ⟨glossary-labels⟩ is a comma-separated list of glossary labels.

Top

## 6. Entry Counting

As mentioned in §2.3 Entry Counting Modifications, glossaries-extra modifies the \glsenableentrycount command to allow for the entrycount attribute. This means that you not only need to enable entry counting with \glsenableentrycount, but you also need to set the appropriate attribute (see §5 Categories).

Remember that entry counting only counts the number of times an entry is used by commands that change the first use flag. (That is, all those commands that mark the entry as having been used.) There are many commands that don’t modify this flag and they won’t contribute to the entry use count.

With glossaries-extra, you may use \cgls instead of \gls even if you haven’t enabled entry counting. You will only get a warning if you use \glsenableentrycount without setting the entrycount attribute. (With glossaries, commands like \cgls will generate a warning if \glsenableentrycount hasn’t been used.) The abbreviation shortcut \ab uses \cgls (see §3.3 Shortcut Commands) unlike the acronym shortcut \ac which uses \gls.

All upper case versions (not provided by glossaries) are also available:

\cGLS \cGLS[⟨options⟩]{⟨label⟩}[⟨insert⟩]

and

\cGLSpl \cGLSpl[⟨options⟩]{⟨label⟩}[⟨insert⟩]

These are analogous to \cgls and \cglspl but they use

\cGLSformat \cGLSformat{⟨label⟩}{⟨insert⟩}

and

\cGLSplformat \cGLSplformat{⟨label⟩}{⟨insert⟩}

which convert the analogous \cglsformat and \cglsplformat to upper case.

Just using glossaries:

\documentclass{article}
\usepackage{glossaries}
\makeglossaries
\glsenableentrycount
\newacronym{html}{HTML}{hypertext markup language}
\newacronym{xml}{XML}{extensible markup language}
\begin{document}
Used once: \cgls{html}.
Used twice: \cgls{xml} and \cgls{xml}.
\printglossaries
\end{document}

If you switch to glossaries-extra you must set the entrycount attribute:

\documentclass{article}
\usepackage{glossaries-extra}
\makeglossaries
\glsenableentrycount
\glssetcategoryattribute{abbreviation}{entrycount}{1}
\newabbreviation{html}{HTML}{hypertext markup language}
\newabbreviation{xml}{XML}{extensible markup language}
\begin{document}
Used once: \cgls{html}.
Used twice: \cgls{xml} and \cgls{xml}.
\printglossaries
\end{document}

When activated with \glsenableentrycount, commands such as \cgls now use

\glsxtrifcounttrigger \glsxtrifcounttrigger{⟨label⟩}{⟨trigger code⟩} {⟨normal code⟩}

to determine if the entry trips the entry count trigger. The ⟨trigger code⟩ uses commands like \cglsformat and unsets the first use flag. The ⟨normal code⟩ is the code that would ordinarily be performed by whatever the equivalent command is (for example, \cgls will use \cglsformat in ⟨trigger code⟩ but the usual \gls behaviour in ⟨normal code⟩).

The default definition is:

\newcommand*{\glsxtrifcounttrigger}[3]{%
\glshasattribute{#1}{entrycount}%
{%
\ifnum\glsentryprevcount{#1}>\glsgetattribute{#1}{entrycount}\relax
#3%
\else
#2%
\fi
}%
{#3}%
}

This means that if an entry is assigned to a category that has the entrycount attribute then the ⟨trigger code⟩ will be used if the previous count value (the number of times the entry was used on the last run) is greater than the value of the attribute.

For example, to trigger normal use if the previous count value is greater than four:

\glssetcategoryattribute{abbreviation}{entrycount}{4}

There is a convenient command provided to enable entry counting, set the entrycount attribute and redefine \gls, etc to use \cgls etc:

\GlsXtrEnableEntryCounting \GlsXtrEnableEntryCounting{⟨categories⟩} {⟨value⟩}

The first argument ⟨categories⟩ is a comma-separated list of categories. For each category, the entrycount attribute is set to ⟨value⟩. In addition, this does:

\renewcommand*{\gls}{\cgls}%
\renewcommand*{\Gls}{\cGls}%
\renewcommand*{\glspl}{\cglspl}%
\renewcommand*{\Glspl}{\cGlspl}%
\renewcommand*{\GLS}{\cGLS}%
\renewcommand*{\GLSpl}{\cGLSpl}%

This makes it easier to enable entry-counting on existing documents.

If you use \GlsXtrEnableEntryCounting more than once, subsequent uses will just set the entrycount attribute for each listed category.

The above example document can then become:

\documentclass{article}
\usepackage{glossaries-extra}
\makeglossaries
\GlsXtrEnableEntryCounting{abbreviation}{1}
\newabbreviation{html}{HTML}{hypertext markup language}
\newabbreviation{xml}{XML}{extensible markup language}
\begin{document}
Used once: \gls{html}.
Used twice: \gls{xml} and \gls{xml}.
\printglossaries
\end{document}

The standard entry-counting function describe above counts the number of times an entry has been marked as used throughout the document. (The reset commands will reset the total back to zero.) If you prefer to count per sectional-unit, you can use

\GlsXtrEnableEntryUnitCounting \GlsXtrEnableEntryUnitCounting {⟨categories⟩}{⟨value⟩}{⟨counter-name⟩}

where ⟨categories⟩ is a comma-separated list of categories to which this feature should be applied, ⟨value⟩ is the trigger value and ⟨counter-name⟩ is the name of the counter used by the sectional unit.

Due to the asynchronous nature of TEX’s output routine, discrepancies will occur in page spanning paragraphs if you use the page counter.

Note that you can’t use both the document-wide counting and the per-unit counting in the same document.

The counter value is used as part of a label, which means that \the⟨counter-name⟩ needs to be expandable. Since hyperref also has a similar requirement and provides \theH⟨counter-name⟩ as an expandable alternative, glossaries-extra will use \theH⟨counter-name⟩ if it exists otherwise it will use \the⟨counter-name⟩.

The per-unit counting function uses two attributes: entrycount (as before) and unitcount (the name of the counter).

Both the original document-wide counting mechanism and the per-unit counting mechanism provide a command that can be used to access the current count value for this run:

\glsentrycurrcount \glsentrycurrcount{⟨label⟩}

and the final value from the previous run:

\glsentryprevcount \glsentryprevcount{⟨label⟩}

In the case of the per-unit counting, this is the final value for the current unit. In both commands ⟨label⟩ is the entry’s label.

The per-unit counting mechanism additionally provides:

\glsentryprevtotalcount \glsentryprevtotalcount{⟨label⟩}

which gives the sum of all the per-unit totals from the previous run for the entry given by ⟨label⟩, and

\glsentryprevmaxcount \glsentryprevmaxcount{⟨label⟩}

which gives the maximum per-unit total from the previous run.

The above two commands are unavailable for the document-wide counting.

Example of per-unit counting, where the unit is the chapter:

\documentclass{report}
\usepackage{glossaries-extra}
\GlsXtrEnableEntryUnitCounting{abbreviation}{2}{chapter}
\makeglossaries
\newabbreviation{html}{HTML}{hypertext markup language}
\newabbreviation{css}{CSS}{cascading style sheet}
\newglossaryentry{sample}{name={sample},description={sample}}
\begin{document}
\chapter{Sample}
Used once: \gls{html}.
Used three times: \gls{css} and \gls{css} and \gls{css}.
Used once: \gls{sample}.
\chapter{Another Sample}
Used once: \gls{css}.
Used twice: \gls{html} and \gls{html}.
\printglossaries
\end{document}

In this document, the css entry is used three times in the first chapter. This is more than the trigger value of 2, so \gls{css} is expanded on first use with the short form used on subsequent use, and the css entries in that chapter are added to the glossary. In the second chapter, the css entry is only used once, which trips the suppression trigger, so in that chapter, the long form is used and \gls{css} doesn’t get a line added to the glossary file.

The html is used a total of three times, but the expansion and indexing suppression trigger is tripped in both chapters because the per-unit total (1 for the first chapter and 2 for the second chapter) is less than or equal to the trigger value.

The sample entry has only been used once, but it doesn’t trip the indexing suppression because it’s in the general category, which hasn’t been listed in \GlsXtrEnableEntryUnitCounting.

The per-unit entry counting can be used for other purposes. In the following example document the trigger value is set to zero, which means the index suppression won’t be triggered, but the unit entry count is used to automatically suppress the hyperlink for commands like \gls by modifying the hook

\glslinkcheckfirsthyperhook \glslinkcheckfirsthyperhook

which is used at the end of the macro the determines whether or not to suppress the hyperlink.

\documentclass{article}
\usepackage[colorlinks]{hyperref}
\usepackage{glossaries-extra}
\makeglossaries
\GlsXtrEnableEntryUnitCounting{general}{0}{page}
\newglossaryentry{sample}{name={sample},description={an example}}
\renewcommand*{\glslinkcheckfirsthyperhook}{%
\ifnum\glsentrycurrcount\glslabel>0
\setkeys{glslink}{hyper=false}%
\fi
}
\begin{document}
A \gls{sample} entry.
Next use: \gls{sample}.
\newpage
Next page: \gls{sample}.
Again: \gls{sample}.
\printglossaries
\end{document}

This only produces a hyperlink for the first instance of \gls{sample} on each page.

The earlier warning about using the page counter still applies. If the first instance of \gls occurs at the top of the page within a paragraph that started on the previous page, then the count will continue from the previous page.

Top

## 7. Auto-Indexing

It’s possible that you may also want a normal index as well as the glossary, and you may want entries to automatically be added to the index (as in this document). There are two attributes that govern this: indexname and dualindex.

The \glsxtrpostnamehook macro, used at the end of \glossentryname and \Glossentryname, checks the indexname attribute for the category associated with that entry. Since \glossentryname is used in the default glossary styles, this makes a convenient way of automatically indexing each entry name at its location in the glossary without fiddling around with the value of the name key.

The internal macro used by the glossaries package to write the information to the external glossary file is modified to check for the dualindex attribute.

In both cases, the indexing is done through

\glsxtrdoautoindexname \glsxtrdoautoindexname{⟨label⟩}{⟨attribute-label⟩}

This uses the standard \index command with the sort value taken from the entry’s sort key and the actual value set to \glsentryname{⟨label⟩}. If the value of the attribute given by ⟨attribute-label⟩ is “true”, no encap will be added, otherwise the encap will be the attribute value. For example:

\glssetcategoryattribute{general}{indexname}{textbf}

will set the encap to textbf which will display the relevant page number in bold whereas

\glssetcategoryattribute{general}{dualindex}{true}

won’t apply any formatting to the page number in the index.

The location used in the index will always be the page number not the counter used in the glossary. (Unless some other loaded package has modified the definition of \index to use some thing else.)

By default the format key won’t be used with the dualindex attribute. You can allow the format key to override the attribute value by using the preamble-only command:

\GlsXtrEnableIndexFormatOverride \GlsXtrEnableIndexFormatOverride

If you use this command and hyperref has been loaded, then the theindex environment will be modified to redefine \glshypernumber to allow formats that use that command.

The dualindex attribute will still be used on subsequent use even if the indexonlyfirst attribute (or indexonlyfirst package option) is set. However, the dualindex attribute will honour the noindex key.

The \glsxtrdoautoindexname command will attempt to escape any of \makeindex’s special characters, but there may be special cases where it fails, so take care. This assumes the default makeindex actual, level, quote and encap values (unless any of the commands \actualchar, \levelchar, \quotechar or \encapchar have been defined before glossaries-extra is loaded).

If this isn’t the case, you can use the following preamble-only commands to set the correct characters.

Be very careful of possible shifting category codes!

\GlsXtrSetActualChar \GlsXtrSetActualChar{⟨char⟩}

Set the actual character to ⟨char⟩.

\GlsXtrSetLevelChar \GlsXtrSetLevelChar{⟨char⟩}

Set the level character to ⟨char⟩.

\GlsXtrSetEscChar \GlsXtrSetEscChar{⟨char⟩}

Set the escape (quote) character to ⟨char⟩.

\GlsXtrSetEncapChar \GlsXtrSetEncapChar{⟨char⟩}

Set the encap character to ⟨char⟩.

Top

## 8. On-the-Fly Document Definitions

The commands described here may superficially look like ⟨word⟩\index{⟨word⟩}, but they behave rather differently. If you want to use \index then just use \index.

The glossaries package advises against defining entries in the document environment. As mentioned in §1.2 New or Modified Package Options above, this ability is disabled by default with glossaries-extra but can be enabled using the docdefs package options.

Although this can be problematic, the glossaries-extra package provides a way of defining and using entries within the document environment without the tricks used with the docdefs option. There are limitations with this approach, so take care with it. This function is disabled by default, but can be enabled using the preamble-only command:

\GlsXtrEnableOnTheFly \GlsXtrEnableOnTheFly

When used, this defines the commands described below.

The commands \glsxtr, \glsxtrpl, \Glsxtr and \Glsxtrpl can’t be used after the glossaries have been displayed (through \printglossary etc). It’s best not to mix these commands with the standard glossary commands, such as \gls or there may be unexpected results.

\glsxtr \glsxtr[⟨gls-options⟩][⟨dfn-options⟩]{⟨label⟩}

If an entry with the label ⟨label⟩ has already been defined, this just does \gls [⟨gls-options⟩]{⟨label⟩}. If ⟨label⟩ hasn’t been defined, this will define the entry using:

\newglossaryentry{⟨label⟩}{name={⟨label⟩},
category=\glsxtrcat,
description={\nopostdesc},
⟨dfn-options⟩}

The ⟨label⟩ must contain any non-expandable commands, such as formatting commands or problematic characters. If the term requires any of these, they must be omitted from the ⟨label⟩ and placed in the name key must be provided in the optional argument ⟨dfn-options⟩.

The second optional argument ⟨dfn-options⟩ should be empty if the entry has already been defined, since it’s too late for them. If it’s not empty, a warning will be generated with

\GlsXtrWarning \GlsXtrWarning{⟨dfn-options⟩}{⟨label⟩}

For example, this warning will be generated on the second instance of \glsxtr below:

\glsxtr[][plural=geese]{goose}
... later
\glsxtr[][plural=geese]{goose}

If you are considering doing something like:

\newcommand*{\goose}{\glsxtr[][plural=geese]{goose}}
\renewcommand*{\GlsXtrWarning}[2]{}
... later
\goose\ some more text here

then don’t bother. It’s simpler and less problematic to just define the entries in the preamble with \newglossaryentry and then use \gls in the document.

There are plural and case-changing alternatives to \glsxtr:

\glsxtrpl \glsxtrpl[⟨gls-options⟩][⟨dfn-options⟩]{⟨label⟩}

This is like \glsxtr but uses \glspl instead of \gls.

\Glsxtr \Glsxtr[⟨gls-options⟩][⟨dfn-options⟩]{⟨label⟩}

This is like \glsxtr but uses \Gls instead of \gls.

\Glsxtrpl \Glsxtrpl[⟨gls-options⟩][⟨dfn-options⟩]{⟨label⟩}

This is like \glsxtr but uses \Glspl instead of \gls.

If you use UTF-8 and don’t want the inconvenient of needing to use an ASCII-only label, then it’s better to use XƎ LA TEX or LuaLA TEX instead of LA TEX (or pdfLA TEX). If you really desperately want to use UTF-8 entry labels without switching to XƎ LA TEX or LuaLA TEX then there is a starred version of \GlsXtrEnableOnTheFly that allows you to use UTF-8 characters in ⟨label⟩, but it’s experimental and may not work in some cases.

If you use the starred version of \GlsXtrEnableOnTheFly don’t use any commands in the ⟨label⟩, even if they expand to just text.

Top

## 9. Supplemental Packages

The glossaries bundle provides additional support packages glossaries-prefix (for prefixing) and glossaries-accsupp (for accessibility support). These packages aren’t automatically loaded.

Top

###

### 9.1 Prefixes or Determiners

If prefixing is required, you can simply load glossaries-prefix after glossaries-extra. For example:

\documentclass{article}
\usepackage{glossaries-extra}
\usepackage{glossaries-prefix}
\makeglossaries
\newabbreviation
[prefix={an\space},
prefixfirst={a~}]
{svm}{SVM}{support vector machine}
\begin{document}
First use: \pgls{svm}.
Next use: \pgls{svm}.
\printglossaries
\end{document}

Top

###

### 9.2 Accessibility Support

The glossaries-accsupp needs to be loaded before glossaries-extra or through the accsupp package option:

\usepackage[accsupp]{glossaries-extra}

If you don’t load glossaries-accsupp or you load glossaries-accsupp after glossaries-extra the new \glsaccess⟨xxx⟩ commands described below will simply be equivalent to the corresponding \glsentry⟨xxx⟩ commands.

The following \glsaccess⟨xxx⟩ commands add accessibility information wrapped around the corresponding \glsentry⟨xxx⟩ commands. There is no check for existence of the entry nor do any of these commands add formatting, hyperlinks or indexing information.

\glsaccessname \glsaccessname{⟨label⟩}

This displays the value of the name field for the entry identified by ⟨label⟩.

If the glossaries-accsupp package isn’t loaded, this is simply defined as:

\newcommand*{\glsaccessname}[1]{\glsentryname{#1}}

otherwise it’s defined as:

\newcommand*{\glsaccessname}[1]{%
\glsnameaccessdisplay
{%
\glsentryname{#1}%
}%
{#1}%
}

(\glsnameaccessdisplay is defined by the glossaries-accsupp package.) The first letter upper case version is:

\Glsaccessname \Glsaccessname{⟨label⟩}

Without the glossaries-accsupp package this is just defined as:

\newcommand*{\Glsaccessname}[1]{\Glsentryname{#1}}

With the glossaries-accsupp package this is defined as:

\newcommand*{\Glsaccessname}[1]{%
\glsnameaccessdisplay
{%
\Glsentryname{#1}%
}%
{#1}%
}

The following commands are all defined in an analogous manner.

\glsaccesstext \glsaccesstext{⟨label⟩}

This displays the value of the text field.

\Glsaccesstext \Glsaccesstext{⟨label⟩}

This displays the value of the text field with the first letter converted to upper case.

\glsaccessplural \glsaccessplural{⟨label⟩}

This displays the value of the plural field.

\Glsaccessplural \Glsaccessplural{⟨label⟩}

This displays the value of the plural field with the first letter converted to upper case.

\glsaccessfirst \glsaccessfirst{⟨label⟩}

This displays the value of the first field.

\Glsaccessfirst \Glsaccessfirst{⟨label⟩}

This displays the value of the first field with the first letter converted to upper case.

\glsaccessfirstplural \glsaccessfirstplural{⟨label⟩}

This displays the value of the firstplural field.

\Glsaccessfirstplural \Glsaccessfirstplural{⟨label⟩}

This displays the value of the firstplural field with the first letter converted to upper case.

\glsaccesssymbol \glsaccesssymbol{⟨label⟩}

This displays the value of the symbol field.

\Glsaccesssymbol \Glsaccesssymbol{⟨label⟩}

This displays the value of the symbol field with the first letter converted to upper case.

\glsaccesssymbolplural \glsaccesssymbolplural{⟨label⟩}

This displays the value of the symbolplural field.

\Glsaccesssymbolplural \Glsaccesssymbolplural{⟨label⟩}

This displays the value of the symbolplural field with the first letter converted to upper case.

\glsaccessdesc \glsaccessdesc{⟨label⟩}

This displays the value of the desc field.

\Glsaccessdesc \Glsaccessdesc{⟨label⟩}

This displays the value of the desc field with the first letter converted to upper case.

\glsaccessdescplural \glsaccessdescplural{⟨label⟩}

This displays the value of the descplural field.

\Glsaccessdescplural \Glsaccessdescplural{⟨label⟩}

This displays the value of the descplural field with the first letter converted to upper case.

\glsaccessshort \glsaccessshort{⟨label⟩}

This displays the value of the short field.

\Glsaccessshort \Glsaccessshort{⟨label⟩}

This displays the value of the short field with the first letter converted to upper case.

\glsaccessshortpl \glsaccessshortpl{⟨label⟩}

This displays the value of the shortplural field.

\Glsaccessshortpl \Glsaccessshortpl{⟨label⟩}

This displays the value of the shortplural field with the first letter converted to upper case.

\glsaccesslong \glsaccesslong{⟨label⟩}

This displays the value of the long field.

\Glsaccesslong \Glsaccesslong{⟨label⟩}

This displays the value of the long field with the first letter converted to upper case.

\glsaccesslongpl \glsaccesslongpl{⟨label⟩}

This displays the value of the longplural field.

\Glsaccesslongpl \Glsaccesslongpl{⟨label⟩}

This displays the value of the longplural field with the first letter converted to upper case.

Top

## 10. Sample Files

The following sample files are provided with this package:

sample.tex
  Simple sample file that uses one of the dummy files provided by the glossaries package for testing.
sample-mixture.tex
  General entries, acronyms and initialisms all treated differently.
sample-name-font
  Categories and attributes are used to customize the way different entries appear.
sample-abbrv.tex
  General abbreviations.
sample-acronym.tex
  Acronyms aren’t initialisms and don’t expand on first use.
sample-acronym-desc.tex
  Acronyms that have a separate long form and description.
sample-crossref.tex
  Unused entries that have been cross-referenced automatically are added at the end of the document.
sample-indexhook.tex
  Use the index hook to track which entries have been indexed (and therefore find out which ones haven’t been indexed).
sample-footnote.tex
  Footnote abbreviation style that moves the footnote marker outside of the hyperlink generated by \gls and moves it after certain punctuation characters for neatness.
sample-undef.tex
  Warn on undefined entries instead of generating an error.
sample-mixed-abbrv-styles.tex
  Different abbreviation styles for different entries.
sample-initialisms.tex
  Automatically insert dots into initialisms.
sample-postdot.tex
  Another initialisms example.
sample-postlink.tex
  Automatically inserting text after the link-text produced by commands like \gls (outside of hyperlink, if present).
sample-header.tex
  Using entries in section/chapter headings.
sample-autoindex.tex
  Using the dualindex and indexname attributes to automatically add glossary entries to the index (in addition to the glossary location list).
sample-autoindex-hyp.tex
  As previous but uses hyperref.
sample-nested.tex
  Using \gls within the value of the name key.
sample-entrycount.tex
  Enable entry-use counting (only index if used more than n times).
sample-unitentrycount.tex
  Enable use of per-unit entry-use counting.
sample-pages.tex
  Insert “page” or “pages” before the location list.
sample-onelink.tex
  Using the per-unit entry counting to only have one hyperlink per entry per page.
sample-altmodifier.tex
  Set the default options for commands like \gls and add an alternative modifier.
sample-alttree.tex
  Uses the glossaries-extra-stylemods package with the alttree style (see §2.6.3 The glossaries-extra-stylemods Package).
sample-alttree-sym.tex
  Another alttree example that measures the symbol widths.
sample-alttree-marginpar.tex
  Another alttree example that puts the number list in the margin.
sample-onthefly.tex
  Using on-the-fly commands. Terms with accents must have the name key explicitly set.
sample-onthefly-xetex.tex
  Using on-the-fly commands with XƎ LA TEX. Terms with UTF-8 characters don’t need to have the name key explicitly set. Terms that contain commands must have the name key explicitly set with the commands removed from the label.
sample-onthefly-utf8.tex
  Tries to emulate the previous sample file for use with LA TEX through the starred version of \GlsXtrEnableOnTheFly. This is a bit iffy and may not always work. Terms that contain commands must have the name key explicitly set with the commands removed from the label.
sample-accsupp.tex
  Integrate glossaries-accsupp.
sample-prefix.tex
  Integrate glossaries-prefix.

Top

## 11. Multi-Lingual Support

There’s only one command provided by glossaries-extra that you’re likely to want to change in your document and that’s \abbreviationsname (§1.2 New or Modified Package Options) if you use the abbreviations package option to automatically create the glossary labelled abbreviations. If this command doesn’t already exist, it will be defined to “Abbreviations” if babel hasn’t been loaded, otherwise it will be defined as \acronymname (provided by glossaries).

You can redefine it in the usual way. For example:

\renewcommand*{\abbreviationsname}{List of Abbreviations}

Or using babel or polyglossia captions hook:

\appto\captionsenglish{%
\renewcommand*{\abbreviationsname}{List of Abbreviations}%
}

Alternatively you can use the title key when you print the list of abbreviations. For example:

\printabbreviations[title={List of Abbreviations}]

or

\printglossary[type=abbreviations,title={List of Abbreviations}]

The other fixed text commands are the diagnostic messages, which shouldn’t appear in the final draft of your document.

The glossaries-extra package has the facility to load language modules if they exist, but won’t warn if they don’t.

If you want to write your own language module, you just need to create a file called glossariesxtr-⟨lang⟩.ldf, where ⟨lang⟩ is the language name (see the tracklang package). For example, glossariesxtr-french.ldf.

The simplest code for this file is:

\ProvidesGlossariesExtraLang{french}[2015/12/09 v1.0]
\newcommand*{\glossariesxtrcaptionsfrench}{%
\def\abbreviationsname{Abr\'eviations}%
}
\glossariesxtrcaptionsfrench
\ifcsdef{captions\CurrentTrackedDialect}
{%
\csappto{captions\CurrentTrackedDialect}%
{%
\glossariesxtrcaptionsfrench
}%
}%
{%
\ifcsdef{captions\CurrentTrackedLanguage}
{%
\csappto{captions\CurrentTrackedLanguage}%
{%
\glossariesxtrcaptionsfrench
}%
}%
{%
}%
\glossariesxtrcaptionsfrench
}

You can adapt this for other languages by replacing all instances of the language identifier french and the translated text Abr\’eviations as appropriate. This .ldf file then needs to be put somewhere on TEX’s path so that it can be found by glossaries-extra. You might also want to consider uploading it to CTAN so that it can be useful to others. (Please don’t send it to me. I already have more packages than I am able to maintain.)

If you additionally want to provide translations for the diagnostic messages used when a glossary is missing, you need to redefine the following commands:

\GlsXtrNoGlsWarningHead \GlsXtrNoGlsWarningHead{⟨label⟩}{⟨file⟩}

This produces the following text in English:

This document is incomplete. The external file associated with the glossary ‘⟨label⟩’ (which should be called ⟨file⟩) hasn’t been created.

\GlsXtrNoGlsWarningEmptyStart \GlsXtrNoGlsWarningEmptyStart

This produces the following text in English:

This has probably happened because there are no entries defined in this glossary.

\GlsXtrNoGlsWarningEmptyMain \GlsXtrNoGlsWarningEmptyMain

This produces the following text in English:

If you don’t want this glossary, add nomain to your package option list when you load glossaries-extra.sty. For example:

\GlsXtrNoGlsWarningEmptyNotMain \GlsXtrNoGlsWarningEmptyNotMain{⟨label⟩}

This produces the following text in English:

Did you forget to use type=⟨label⟩ when you defined your entries? If you tried to load entries into this glossary with \loadglsentries did you remember to use [⟨label⟩] as the optional argument? If you did, check that the definitions in the file you loaded all had the type set to \glsdefaulttype.

\GlsXtrNoGlsWarningCheckFile \GlsXtrNoGlsWarningCheckFile{⟨file⟩}

This produces the following text in English:

Check the contents of the file ⟨file⟩. If it’s empty, that means you haven’t indexed any of your entries in this glossary (using commands like \gls or \glsadd) so this list can’t be generated. If the file isn’t empty, the document build process hasn’t been completed.

\GlsXtrNoGlsWarningMisMatch \GlsXtrNoGlsWarningMisMatch

This produces the following text in English:

You need to either replace \makenoidxglossaries with \makeglossaries or replace \printglossary (or \printglossaries) with \printnoidxglossary (or \printnoidxglossaries) and then rebuild this document.

\GlsXtrNoGlsWarningNoOut \GlsXtrNoGlsWarningNoOut{⟨file⟩}

This produces the following text in English:

The file ⟨file⟩ doesn’t exist. This most likely means you haven’t used \makeglossaries or you have used \nofiles. If this is just a draft version of the document, you can suppress this message using the nomissingglstext package option.

\GlsXtrNoGlsWarningTail \GlsXtrNoGlsWarningTail

This produces the following text in English:

This message will be removed once the problem has been fixed.

\GlsXtrNoGlsWarningBuildInfo \GlsXtrNoGlsWarningBuildInfo

This is advice on how to generate the glossary files. See the documented code (glossaries-extra-code.pdf) for further details.

\GlsXtrNoGlsWarningAutoMake \GlsXtrNoGlsWarningAutoMake{⟨label⟩}

This is the message produced when the automake option is used, but the document needs a rerun or the shell escape setting doesn’t permit the execution of the external application. This command also generates a warning in the transcript file. See the documented code for further details.

Top

## Glossary

entry location
  The location of the entry in the document. This defaults to the page number on which the entry appears. An entry may have multiple locations.
first use
  The first time a glossary entry is used (from the start of the document or after a reset) with one of the following commands: \gls, \Gls, \GLS, \glspl, \Glspl, \GLSpl or \glsdisp.
first use flag
  A conditional that determines whether or not the entry has been used according to the rules of first use.
first use text
  The text that is displayed on first use, which is governed by the first and firstplural keys of \newglossaryentry. (May be overridden by \glsdisp.)
link-text
  The text produced by commands such as \gls. It may or may not have a hyperlink to the glossary.
location list
  A list of entry locations. See number list.
makeglossaries
  A custom designed Perl script interface provided with the glossaries package to run xindy or makeindex according to the document settings.
makeglossaries-lite.lua
  A custom designed Lua script interface to xindy and makeindex provided with the glossaries package. This is a cut-down alternative to the Perl makeglossaries script. If you have Perl installed, use the Perl script instead. Note that TeX Live creates a symbolic link called makeglossaries-lite (without the .lua extension) to the actual makeglossaries-lite.lua script.
makeindex
  An indexing application.
number list
  A list of entry locations (also called a location list). The number list can be suppressed using the nonumberlist package option.
xindy
  An flexible indexing application with multilingual support written in Perl.

## Index

A

abbreviation styles (deprecated):
footnote-em 1
footnote-sc 2
footnote-sm 3
long-desc-em 4
long-desc-sc 5
long-desc-sm 6
long-em 7
long-sc 8
long-sm 9
postfootnote-em 10
postfootnote-sc 11
postfootnote-sm 12
abbreviation styles:
footnote 13
long 14
long-desc 15
long-em-noshort-em 16
long-em-noshort-em-desc 17
long-em-short-em 18, 19
long-em-short-em-desc 20
long-noshort 21, 22, 23, 24, 25, 26, 27, 28
long-noshort-desc 29, 30, 31, 32, 33, 34, 35, 36, 37
long-noshort-em 38
long-noshort-em-desc 39
long-noshort-sc 40, 41
long-noshort-sc-desc 42
long-noshort-sm 43
long-noshort-sm-desc 44
long-short 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57
long-short-desc 58, 59, 60, 61, 62, 63, 64, 65, 66
long-short-em 67, 68, 69
long-short-em-desc 70, 71
long-short-sc 72, 73, 74, 75, 76
long-short-sc-desc 77, 78
long-short-sm 79, 80
long-short-sm-desc 81, 82
long-short-user 83, 84, 85, 86, 87, 88, 89, 90
long-short-user-desc 91
postfootnote 92
short 93
short-desc 94
short-em 95
short-em-desc 96
short-em-footnote 97, 98
short-em-footnote-desc 99
short-em-long 100, 101, 102
short-em-long-desc 103, 104
short-em-long-em 105
short-em-long-em-desc 106
short-em-nolong 107, 108
short-em-nolong-desc 109, 110
short-em-postfootnote 111
short-footnote 112, 113, 114, 115, 116, 117, 118, 119, 120, 121
short-footnote-desc 122
short-long 123, 124, 125, 126, 127, 128, 129, 130, 131
short-long-desc 132, 133, 134, 135, 136, 137, 138, 139
short-long-user 140, 141, 142, 143, 144, 145
short-long-user-desc 146
short-nolong 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158
short-nolong-desc 159, 160, 161, 162
short-postfootnote 163, 164, 165, 166, 167, 168, 169
short-sc 170
short-sc-desc 171
short-sc-footnote 172, 173, 174, 175
short-sc-footnote-desc 176
short-sc-long 177, 178, 179
short-sc-long-desc 180, 181
short-sc-nolong 182, 183
short-sc-nolong-desc 184, 185
short-sc-postfootnote 186, 187
short-sm 188
short-sm-desc 189
short-sm-footnote 190, 191
short-sm-footnote-desc 192
short-sm-long 193, 194, 195
short-sm-long-desc 196, 197
short-sm-nolong 198, 199
short-sm-nolong-desc 200, 201
short-sm-postfootnote 202
\abbreviationsname 203
\abbrvpluralsuffix 204
acronym styles (glossaries):
dua 205
dua-desc 206
footnote 207
footnote-desc 208
footnote-sc 209
footnote-sc-desc 210
footnote-sm 211
footnote-sm-desc 212
long-sc-short 213
long-sc-short-desc 214
long-short-desc 215
long-sm-short 216
long-sm-short-desc 217
long-sp-short 218, 219
long-sp-short-desc 220
sc-short-long 221
sc-short-long-desc 222
short-long 223
short-long-desc 224
sm-short-long 225
sm-short-long-desc 226
amsgen package 227

B babel package 228, 229, 230, 231, 232, 233, 234, 235

C categories:
abbreviation 236, 237, 238, 239
acronym 240, 241, 242, 243, 244, 245
general 246, 247, 248, 249, 250, 251, 252, 253
index 254, 255
number 256
symbol 257, 258
category attributes:
aposplural 259, 260, 261
discardperiod 262, 263, 264, 265, 266
dualindex 267, 268, 269, 270, 271, 272, 273
entrycount 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284
glossdesc 285, 286, 287
glossdescfont 288, 289
glossname 290, 291
glossnamefont 292
headuc 293, 294, 295, 296
indexname 297, 298, 299, 300, 301
indexonlyfirst 302, 303, 304
insertdots 305, 306
nohyper 307, 308, 309
nohyperfirst 310, 311, 312, 313, 314
noshortplural 315, 316, 317, 318
pluraldiscardperiod 319, 320
regular 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340
retainfirstuseperiod 341
tagging 342, 343, 344, 345
unitcount 346
\cGLS 347
\cGLSformat 348
\cGLSpl 349
\cGLSplformat 350
\CustomAbbreviationFields 351

D datatool-base package 352

E \eglssetwidest 353
entry location 354, 355, 356
etoolbox package 357, 358

F first use 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412
first use flag 413, 414, 415, 416, 417
first use text 418, 419
fontenc package 420

G glossaries package 421
glossaries-accsupp package 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436
glossaries-extra-stylemods package 437, 438, 439, 440
glossaries-prefix package 441, 442, 443
\glossariesextrasetup 444
glossary styles:
alttree 445, 446, 447, 448, 449, 450, 451
inline 452, 453
long3col 454
glossary-inline package 455
glossary-tree package 456, 457, 458
\glossxtrsetpopts 459
\glsabbrvdefaultfont 460
\glsabbrvemfont 461
\glsabbrvfont 462, 463
\glsabbrvuserfont 464
\Glsaccessdesc 465
\glsaccessdesc 466
\Glsaccessdescplural 467
\glsaccessdescplural 468
\Glsaccessfirst 469
\glsaccessfirst 470
\Glsaccessfirstplural 471
\glsaccessfirstplural 472
\Glsaccesslong 473
\glsaccesslong 474
\Glsaccesslongpl 475
\glsaccesslongpl 476
\Glsaccessname 477
\glsaccessname 478
\Glsaccessplural 479
\glsaccessplural 480
\Glsaccessshort 481
\glsaccessshort 482
\Glsaccessshortpl 483
\glsaccessshortpl 484
\Glsaccesssymbol 485
\glsaccesssymbol 486
\Glsaccesssymbolplural 487
\glsaccesssymbolplural 488
\Glsaccesstext 489
\glsaccesstext 490
\glsacspace 491
\glsacspacemax 492
\glscategory 493
\glscategorylabel 494
\glscurrententrylabel 495
\glsentrycurrcount 496
\glsentryprevcount 497
\glsentryprevmaxcount 498
\glsentryprevtotalcount 499
\glsFindWidestAnyName 500
\glsFindWidestAnyNameLocation 501
\glsFindWidestAnyNameSymbol 502
\glsFindWidestAnyNameSymbolLocation 503
\glsFindWidestLevelTwo 504
\glsFindWidestTopLevelName 505
\glsFindWidestUsedAnyName 506
\glsFindWidestUsedAnyNameLocation 507
\glsFindWidestUsedAnyNameSymbol 508
\glsFindWidestUsedAnyNameSymbolLocation 509
\glsFindWidestUsedLevelTwo 510
\glsFindWidestUsedTopLevelName 511
\glsfirstabbrvdefaultfont 512
\glsfirstabbrvemfont 513
\glsfirstabbrvfont 514, 515
\glsfirstlongdefaultfont 516
\glsfirstlongemfont 517
\glsfirstlongfont 518, 519
\glsfirstlongfootnotefont 520
\Glsfmtfirst 521
\glsfmtfirst 522
\Glsfmtfirstpl 523
\glsfmtfirstpl 524
\Glsfmtfull 525
\glsfmtfull 526
\Glsfmtfullpl 527
\glsfmtfullpl 528
\Glsfmtlong 529
\glsfmtlong 530
\Glsfmtlongpl 531
\glsfmtlongpl 532
\Glsfmtplural 533
\glsfmtplural 534
\Glsfmtshort 535
\glsfmtshort 536
\Glsfmtshortpl 537
\glsfmtshortpl 538
\Glsfmttext 539
\glsfmttext 540
\glsforeachwithattribute 541
\glsgetattribute 542
\glsgetcategoryattribute 543
\glsgetwidestname 544
\glsgetwidestsubname 545
\glshasattribute 546
\glshascategoryattribute 547
\glsifattribute 548
\glsifcategory 549
\glsifcategoryattribute 550
\glsifnotregular 551
\glsifnotregularcategory 552
\glsifregular 553
\glsifregularcategory 554
\glskeylisttok 555
\glslabeltok 556
\glslink options
format 557, 558
hyper 559, 560, 561
hyper=false 562
noindex 563, 564, 565, 566, 567
\glslinkcheckfirsthyperhook 568
\glslongdefaultfont 569
\glslongemfont 570
\glslongfont 571, 572
\glslongfootnotefont 573
\glslongpltok 574
\glslongtok 575
\glsps 576
\glspt 577
\glssetattribute 578
\glssetcategoryattribute 579
\glssetregularcategory 580
\glsshortpltok 581
\glsshorttok 582
\Glsxtr 583
\glsxtr 584
\glsxtrabbrvfootnote 585
\glsxtraddallcrossrefs 586
\glsxtrAltTreeIndent 587
\glsxtralttreeInit 588
\glsxtralttreeSubSymbolDescLocation 589
\glsxtralttreeSymbolDescLocation 590
\glsxtrchecknohyperfirst 591
\glsxtrdoautoindexname 592
\glsxtrdowrglossaryhook 593
\GlsXtrEnableEntryCounting 594
\GlsXtrEnableEntryUnitCounting 595
\GlsXtrEnableIndexFormatOverride 596
\GlsXtrEnableInitialTagging 597
\GlsXtrEnableOnTheFly 598
\GlsXtrEnablePreLocationTag 599
\glsxtrfieldtitlecasecs 600
\glsxtrfirstscfont 601
\glsxtrfirstsmfont 602
\GlsXtrFormatLocationList 603
\GLSxtrfull 604
\Glsxtrfull 605
\glsxtrfull 606
\Glsxtrfullformat 607
\glsxtrfullformat 608
\GLSxtrfullpl 609
\Glsxtrfullpl 610
\glsxtrfullpl 611
\Glsxtrfullplformat 612
\glsxtrfullplformat 613
\glsxtrfullsep 614
\glsxtrifcounttrigger 615
\glsxtrifwasfirstuse 616
\Glsxtrinlinefullformat 617
\glsxtrinlinefullformat 618
\Glsxtrinlinefullplformat 619
\glsxtrinlinefullplformat 620
\glsxtrinsertinsidetrue 621
\Glsxtrlong 622, 623
\glsxtrlong 624
\GLSxtrlongpl 625
\Glsxtrlongpl 626
\glsxtrlongpl 627
\glsxtrlongshortdescsort 628
\glsxtrnewnumber 629
\glsxtrnewsymbol 630
\GlsXtrNoGlsWarningAutoMake 631
\GlsXtrNoGlsWarningBuildInfo 632
\GlsXtrNoGlsWarningCheckFile 633
\GlsXtrNoGlsWarningEmptyMain 634
\GlsXtrNoGlsWarningEmptyNotMain 635
\GlsXtrNoGlsWarningEmptyStart 636
\GlsXtrNoGlsWarningHead 637
\GlsXtrNoGlsWarningMisMatch 638
\GlsXtrNoGlsWarningNoOut 639
\GlsXtrNoGlsWarningTail 640
\Glsxtrp 641, 642
\glsxtrp 643
\Glsxtrpl 644
\glsxtrpl 645
\glsxtrpostdescription 646
\glsxtrpostlink 647
\glsxtrpostlinkAddDescOnFirstUse 648
\glsxtrpostlinkAddSymbolOnFirstUse 649
\glsxtrpostlinkendsentence 650
\glsxtrpostlinkhook 651
\glsxtrpostnamehook 652
\GlsXtrPostNewAbbreviation 653
\glsxtrregularfont 654
\glsxtrresourcefile 655
\glsxtrRevertMarks 656
\glsxtrscfont 657
\glsxtrscsuffix 658
\GlsXtrSetActualChar 659
\GlsXtrSetAltModifier 660
\glsxtrsetcategory 661
\glsxtrsetcategoryforall 662
\GlsXtrSetDefaultGlsOpts 663
\GlsXtrSetEncapChar 664
\GlsXtrSetEscChar 665
\GlsXtrSetLevelChar 666
\glsxtrsetpopts 667
\Glsxtrshort 668, 669
\glsxtrshort 670
\GLSxtrshortpl 671
\Glsxtrshortpl 672
\glsxtrshortpl 673
\glsxtrsmfont 674
\glsxtrsmsuffix 675
\glsxtrtagfont 676
\GlsXtrUseAbbrStyleFmts 677
\GlsXtrUseAbbrStyleSetup 678
\glsxtruserfield 679
\glsxtruserparen 680
\glsxtrusersuffix 681
\glsxtrusesee 682
\glsxtruseseeformat 683
\GlsXtrWarnDeprecatedAbbrStyle 684
\GlsXtrWarning 685

H hyperref package 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696

L link-text 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714
location list 715, 716

M makeglossaries 717, 718, 719, 720, 721
\makeglossaries 722
makeglossaries-lite.lua 723, 724
makeglossaries-lite.lua 725, 726
makeindex 727, 728, 729, 730, 731, 732, 733, 734, 735
memoir class 736
mfirstuc package 737, 738, 739

N \newabbreviation 740
\newabbreviationstyle 741
\newacronym 742
\newglossaryentry options
category 743, 744, 745, 746, 747
desc 748, 749
descplural 750, 751
description 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766
first 767, 768, 769, 770, 771, 772, 773, 774, 775, 776
firstplural 777, 778, 779, 780, 781, 782
loclist 783, 784
long 785, 786, 787, 788, 789
longplural 790, 791, 792, 793
name 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816
parent 817
plural 818, 819, 820, 821
see 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834
short 835, 836, 837, 838, 839, 840, 841, 842, 843, 844
shortplural 845, 846, 847, 848, 849, 850, 851, 852, 853, 854
sort 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866
symbol 867, 868
symbolplural 869, 870
text 871, 872, 873, 874, 875, 876, 877, 878
type 879, 880
user1 881, 882, 883
number list 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905

P package options:
abbreviations 906, 907, 908, 909, 910
accsupp 911, 912, 913
acronym 914
acronymlists 915
automake 916, 917
docdef 918, 919, 920, 921
restricted 922
true 923, 924
docdefs 925, 926
hyperfirst
false 927
index 928, 929
indexcrossrefs 930, 931, 932
indexonlyfirst 933, 934, 935, 936
nomain 937
nomissingglstext 938
nonumberlist 939, 940, 941, 942
nopostdot 943, 944
false 945, 946
true 947
noredefwarn
false 948
true 949
notree 950
numbers 951, 952, 953
record 954
alsoindex 955
off 956
only 957
seeautonumberlist 958
seenoindex 959
ignore 960
shortcuts 961, 962
abbr 963, 964
abbreviation 965
abbreviations 966
acro 967
acronyms 968
all 969
false 970
none 971
other 972
true 973
stylemods 974, 975, 976
symbols 977, 978, 979
toc
false 980
true 981
translate
babel 982
true 983
undefaction 984, 985
error 986, 987
warn 988, 989, 990
page (counter) 991, 992
polyglossia package 993
\printabbreviations 994
\printglossary options
title 995
\printunsrtglossaries 996
\printunsrtglossary 997

R relsize package 998
\RestoreAcronyms 999

S \setabbreviationstyle 1000
slantsc package 1001

T textcase package 1002
tracklang package 1003, 1004
translator package 1005

X xfor package 1006
\xglssetwidest 1007
xindy 1008, 1009, 1010, 1011, 1012, 1013
xkeyval package 1014

1.1 4.21 was originally intended as the last release of glossaries to incorporate new features, but a few new minor features slipped in with some bug fixes in v4.21.