Latest news 2020-07-03: SmashWords sale (ends 31st July 2020): 50% off crime/SF novel The Private Enemy and 100% off (free!) I’ve Heard the Mermaid Sing.

# Gallery: Constants

If you have a small screen, you may prefer to switch on the small image setting.

This example is taken from the “Examples” chapter of bib2gls’s user manual.

The entries are defined in a .bib file, constants.bib. Instead of using the standard entry types (such as @entry) and field names (such as name) recognised by bib2gls, these entries are all defined using a custom field @constant and custom field names (constantname, constantsymbol, definition, alternative, identifier and value). These can be aliased on a per-document basis to allow for greater flexibility. For example, one document might alias the unknown constantname field to the known name field, but another document might alias the unknown constantsymbol to the name field instead.

Some semantic commands are provided in the @preamble:

@preamble{"\providecommand{\constanti}{\mathrm{i}}
\providecommand{\constantj}{\mathrm{j}}
\providecommand{\constante}{\mathrm{e}}
\providecommand{\constantpi}{\uppi}
\providecommand{\constantgamma}{\upgamma}
\providecommand{\constantphi}{\upphi}
\providecommand{\constantlambda}{\uplambda}"}

By placing them within the @preamble of the .bib file, the definitions can be accessed by bib2gls if it needs to interpret them.

The actual entry definitions look like:

@constant{pi,
constantname={pi},
constantsymbol={\ensuremath{\constantpi}},
definition={the ratio of the length of the circumference
of a circle to its diameter},
value={3.14159},
identifier={constant}
}

Some of the entries don’t have the value field set. For example:

@constant{one,
constantname={one},
constantsymbol={\ensuremath{1}},
definition={single entity, unity},
identifier={constant}
}

@constant{imaginary,
constantname={imaginary unit},
constantsymbol={\ensuremath{\constanti}},
definition={defined as $\constanti^2 = -1$},
identifier={constant},
alternative={\ensuremath{\constantj}}
}

Some of these entries use commands from the upgreek package, so a document that uses this .bib file must load that package to ensure they are defined.

This example document aliases @constant to @number with entry-type-aliases={constant=entry} and aliases the unknown fields with field-aliases. The numeric value is aliased to the user1 field, so it’s possible to sort the entries numerically by selecting that field as the sort value.

src={constants},% data in constants.bib
% make @constant behave like @number:
entry-type-aliases={constant=number},
field-aliases={
identifier=category,
constantsymbol=name,
constantname=description,
value=user1,
definition=user2,
alternative=user3
},
type=main,
set-widest,
sort-field=user1,
missing-sort-fallback=name,
sort=double,
selection=all
]

(The numeric comparator will treat an empty value as 0).

The post-description category hook, provided by the glossaries-extra package, is used to append an alternative symbol and the approximate value after the description:

\newcommand{\glsxtrpostdescconstant}{%
\glsxtrifhasfield{useriii}{\glscurrententrylabel}%
{ (also denoted \glscurrentfieldvalue
\glsxtrifhasfield{useri}{\glscurrententrylabel}%
{, approximately \glscurrentfieldvalue}%
{}%
)%
}%
{%
\glsxtrifhasfield{useri}{\glscurrententrylabel}%
{ (approximately \glscurrentfieldvalue)}%
{}%
}%
\glsxtrifhasfield{userii}{\glscurrententrylabel}%
{: \glscurrentfieldvalue}%
{}%
}

The complete document code follows:

\documentclass[12pt,a4paper]{article}

\usepackage[T1]{fontenc}
\usepackage{upgreek}

\usepackage[record,% use bib2gls
nostyles,% don't load default styles
postdot,% add dot after descriptions
% load glossary-tree.sty and patch styles:
stylemods={tree},
style=alttree]{glossaries-extra}

src={constants},% data in constants.bib
% make @constant behave like @number
entry-type-aliases={constant=number},
field-aliases={
identifier=category,
constantsymbol=name,
constantname=description,
value=user1,
definition=user2,
alternative=user3
},
type=main,
set-widest,
sort-field=user1,
missing-sort-fallback=name,
sort=double,
selection=all
]

\newcommand{\glsxtrpostdescconstant}{%
\glsxtrifhasfield{useriii}{\glscurrententrylabel}%
{ (also denoted \glscurrentfieldvalue
\glsxtrifhasfield{useri}{\glscurrententrylabel}%
{, approximately \glscurrentfieldvalue}%
{}%
)%
}%
{%
\glsxtrifhasfield{useri}{\glscurrententrylabel}%
{ (approximately \glscurrentfieldvalue)}%
{}%
}%
\glsxtrifhasfield{userii}{\glscurrententrylabel}%
{: \glscurrentfieldvalue}%
{}%
}

\begin{document}
\printunsrtglossary[title={Constants}]
\end{document}
To build the document, you need to run the following commands:
pdflatex bib2gls-constants
bib2gls bib2gls-constants
pdflatex bib2gls-constants

(See Incorporating makeglossaries or makeglossaries-lite or bib2gls into the document build.) Note that bib2gls is not invoked with the --group switch.

Download: PDF (87.31K), source code (1.21K), constants.bib (2.34K).