Gallery: Aliases
This example uses thealias key provided by
glossaries-extra (new to version 1.12). This works much
like the see key, but automatically switches on
noindex for terms with the alias field set so the
aliased references don’t have locations (just the cross-reference).
When used with hyperref this also modifies the target used
when referencing the aliased terms with \gls.
(If the see hyperlinks in the glossary are
misdirected, then this is due to a known bug in
\glshyperlink which was fixed in version 1.14.)
The bib2gls application (which can be used instead of makeindex/xindy) allows finer control of the aliased entry location lists. (See also Complex Field Assignments.)
There are two categories used in this example:
personfor a real person with a birth date (stored in theuser1field) and optional death date (stored in theuser2field);mythicalfor a mythical character.
For example:
\newglossaryentry{wellesley}{%
category={person},
name={Arthur Wellesley, 1st Duke of Wellington},
sort={Wellesley, Arthur},
first={Arthur Wellesley, 1st Duke of Wellington},
text={Wellesley},
description={Anglo-Irish soldier and statesman},
user1={1769-05-01},% born
user2={1852-09-14}% died
}
\newglossaryentry{heracles}{%
category={mythical},%
name={Heracles},
description={divine hero in Greek mythology}
}
The person category has a post-description hook
\glsxtrpostdescperson that checks the user1 and user2 fields.
The datetime2
package allows for a convenient way of formatting the date.
The en-GB date/time locale is used, which means the
datetime2-english
module is required.
\newcommand*{\glsxtrpostdescperson}{%
\ifglshasfield{user1}{\glscurrententrylabel}
{% born
\space(\expandafter\DTMdate\expandafter{\glscurrentfieldvalue}\,--\,%
\ifglshasfield{user2}{\glscurrententrylabel}
{% died
\expandafter\DTMdate\expandafter{\glscurrentfieldvalue}%
}%
{}%
)%
}%
{}%
}
The person entries with the alias key have the
description field simply set to \nopostdesc
which suppresses the post-description hook. This not only
suppresses the use of \glsxtrpostdescperson but also
suppresses the automatic sentence terminator that’s triggered by the
postdot package option.
The hercules aliased entry has a description. In
this case the automatic sentence terminator is undesirable, so it’s
been suppressed with \nopostdesc.
\newglossaryentry{hercules}{%
category={mythical},%
name={Hercules},
description={Roman adaptation of Greek hero, \nopostdesc},
alias={heracles}
}
In this case, it’s
a one-off, but if this should happen for all the entries in the mythical
category, it would be better to remove the postdot
option and transfer the sentence terminator to the post-description
hook. This is illustrated in the second example below.
The initial comment lines below are arara directives. You can remove them if you don’t use arara.
% arara: pdflatex
% arara: makeglossaries
% arara: pdflatex
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[en-GB]{datetime2}
\usepackage[colorlinks]{hyperref}
\usepackage[style=indexgroup,postdot]{glossaries-extra}
\makeglossaries
\newcommand*{\glsxtrpostdescperson}{%
\ifglshasfield{user1}{\glscurrententrylabel}
{% born
\space(\expandafter\DTMdate\expandafter{\glscurrentfieldvalue}\,--\,%
\ifglshasfield{user2}{\glscurrententrylabel}
{% died
\expandafter\DTMdate\expandafter{\glscurrentfieldvalue}%
}%
{}%
)%
}%
{}%
}
\newglossaryentry{wellesley}{%
category={person},
name={Arthur Wellesley, 1st Duke of Wellington},
sort={Wellesley, Arthur},
first={Arthur Wellesley, 1st Duke of Wellington},
text={Wellesley},
description={Anglo-Irish soldier and statesman},
user1={1769-05-01},% born
user2={1852-09-14}% died
}
\newglossaryentry{wellington}{%
category={person},
name={Duke of Wellington},
text={Wellington},
description={\nopostdesc},
alias={wellesley}
}
\newglossaryentry{heracles}{%
category={mythical},%
name={Heracles},
description={divine hero in Greek mythology}
}
\newglossaryentry{hercules}{%
category={mythical},%
name={Hercules},
description={Roman adaptation of Greek hero, \nopostdesc},
alias={heracles}
}
\newglossaryentry{bonaparte}{%
category={person},
name={Napoleon Bonaparte},
sort={Bonaparte, Napoleon},
description={French military and political leader},
first={Napoleon Bonaparte},
text={Bonaparte},
user1={1769-07-15},% born
user2={1821-05-05}% died
}
\newglossaryentry{diBuonaparte}{%
category={person},
name={Napoleone di Buonaparte},
description={\nopostdesc},
alias={bonaparte}
}
\renewcommand*{\glsseeitemformat}[1]{\glsentryname{#1}}
\begin{document}
\gls{wellesley}.
\gls{heracles}.
\gls{bonaparte}.
\newpage
\gls{wellesley}.
\gls{hercules}.
\gls{diBuonaparte}.
\newpage
\gls{wellington}.
\newpage
\printglossaries
\end{document}
If you don’t use arara, you need to run the following commands:
pdflatex aliases makeglossaries aliases pdflatex aliases
(See Incorporating makeglossaries or makeglossaries-lite or bib2gls into the document build.)
Download: PDF (61.30K), source code (1.95K).
The example below is a minor variation. The post-description hook for the person category inserts the full stop (period) and adjusts the space factor.
\newcommand*{\glsxtrpostdescperson}{%
\ifglshasdesc{\glscurrententrylabel}%
{%
\ifglshasfield{user1}{\glscurrententrylabel}
{% born
\space(\expandafter\DTMdate\expandafter{\glscurrentfieldvalue}\,--\,%
\ifglshasfield{user2}{\glscurrententrylabel}
{% died
\expandafter\DTMdate\expandafter{\glscurrentfieldvalue}%
}%
{}%
)%
}%
{}%
.\spacefactor\sfcode`\.
}%
{}%
}
A post-description hook for the mythical category is also provided that checks if the alias field has been set. If it has, then a comma is added otherwise a full stop followed by a space factor adjustment is inserted.
\newcommand*{\glsxtrpostdescmythical}{%
\ifglshasdesc{\glscurrententrylabel}%
{%
\ifglshasfield{alias}{\glscurrententrylabel}%
{, }%
{.\spacefactor\sfcode`\. }%
}%
{%
}%
}
This means that the comma and \nopostdesc can be removed from the hercules definition, which makes it much neater. The complete code for this variation is as follows:
% arara: pdflatex
% arara: makeglossaries
% arara: pdflatex
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[en-GB]{datetime2}
\usepackage[colorlinks]{hyperref}
\usepackage[style=indexgroup]{glossaries-extra}
\makeglossaries
\newcommand*{\glsxtrpostdescperson}{%
\ifglshasdesc{\glscurrententrylabel}%
{%
\ifglshasfield{user1}{\glscurrententrylabel}
{% born
\space(\expandafter\DTMdate\expandafter{\glscurrentfieldvalue}\,--\,%
\ifglshasfield{user2}{\glscurrententrylabel}
{% died
\expandafter\DTMdate\expandafter{\glscurrentfieldvalue}%
}%
{}%
)%
}%
{}%
.\spacefactor\sfcode`\.
}%
{}%
}
\newcommand*{\glsxtrpostdescmythical}{%
\ifglshasdesc{\glscurrententrylabel}%
{%
\ifglshasfield{alias}{\glscurrententrylabel}%
{, }%
{.\spacefactor\sfcode`\. }%
}%
{%
}%
}
\newglossaryentry{wellesley}{%
category={person},
name={Arthur Wellesley, 1st Duke of Wellington},
sort={Wellesley, Arthur},
first={Arthur Wellesley, 1st Duke of Wellington},
text={Wellesley},
description={Anglo-Irish soldier and statesman},
user1={1769-05-01},% born
user2={1852-09-14}% died
}
\newglossaryentry{wellington}{%
category={person},
name={Duke of Wellington},
text={Wellington},
description={},
alias={wellesley}
}
\newglossaryentry{heracles}{%
category={mythical},%
name={Heracles},
description={divine hero in Greek mythology}
}
\newglossaryentry{hercules}{%
category={mythical},%
name={Hercules},
description={Roman adaptation of Greek hero},
alias={heracles}
}
\newglossaryentry{bonaparte}{%
category={person},
name={Napoleon Bonaparte},
sort={Bonaparte, Napoleon},
description={French military and political leader},
first={Napoleon Bonaparte},
text={Bonaparte},
user1={1769-07-15},% born
user2={1821-05-05}% died
}
\newglossaryentry{diBuonaparte}{%
category={person},
name={Napoleone di Buonaparte},
description={},
alias={bonaparte}
}
\renewcommand*{\glsseeitemformat}[1]{\glsentryname{#1}}
\begin{document}
\gls{wellesley}.
\gls{heracles}.
\gls{bonaparte}.
\newpage
\gls{wellesley}.
\gls{hercules}.
\gls{diBuonaparte}.
\newpage
\gls{wellington}.
\newpage
\printglossaries
\end{document}
Download: PDF (61.29K), source code (2.19K).
