% arara: pdflatex % arara: makeglossaries % arara: pdflatex % arara: pdflatex \documentclass[fontsize=10pt,open=any]{scrbook} \usepackage[T1]{fontenc} \usepackage{tgtermes} \usepackage{xcolor} \usepackage{siunitx} \usepackage[hidelinks]{hyperref} \usepackage[nopostdot=false,% don't suppress the post-description dot stylemods=longragged,% load glossary-longragged.sty and glossaries-extra-stylemods.sty style=longragged3col,% set the glossary style nogroupskip% don't have a gap between groups ]{glossaries-extra} % KOMA class alterations (the default sans-serif clashes % with the smallcaps font in the headings examples) \setkomafont{disposition}{\normalcolor\bfseries} \pagestyle{headings} % Need a wider column for the location list: \setlength{\glspagelistwidth}{0.12\textwidth} % Adjust the description column width if necessary: %\setlength{\glsdescwidth}{0.5\textwidth} % Default font for name field in the glossary. This may be % overridden by the category attributes: \renewcommand*{\glsnamefont}[1]{\textbf{#1}} \makeglossaries % Define some semantic commands: \newcommand*{\animalfont}[1]{\textcolor{brown}{#1}} \newcommand*{\vegetablefont}[1]{\textcolor{teal}{#1}} \newcommand*{\mineralfont}[1]{\textcolor{violet}{#1}} \newcommand*{\myacronymfont}[1]{\textcolor{orange}{#1}} \newcommand*{\bacteriafont}[1]{\textcolor{green}{#1}} \newcommand*{\unitfont}[1]{\textcolor{blue}{#1}} \newcommand*{\constantfont}[1]{\textcolor{magenta}{#1}} % Make the first letter of the name field uppercase in the glossary % for the given categories: \glssetcategoryattribute{animal}{glossname}{firstuc} \glssetcategoryattribute{mineral}{glossname}{firstuc} \glssetcategoryattribute{vegetable}{glossname}{firstuc} % Make the name field in the glossary use a font changing command % (overrides \glsnamefont). In this example, I'm using the semantic % commands I defined above. The backslash is omitted. \glssetcategoryattribute{animal}{glossnamefont}{animalfont} \glssetcategoryattribute{mineral}{glossnamefont}{mineralfont} \glssetcategoryattribute{vegetable}{glossnamefont}{vegetablefont} \glssetcategoryattribute{acronym}{glossnamefont}{myacronymfont} \glssetcategoryattribute{bacteria}{glossnamefont}{bacteriafont} \glssetcategoryattribute{unit}{glossnamefont}{unitfont} \glssetcategoryattribute{constant}{glossnamefont}{constantfont} % Modify the font used for the description in the glossary: %\glssetcategoryattribute{bacteria}{glossdescfont}{textsf} % Modify the way commands like \gls display regular terms according % to attribute. \glssetcategoryattribute{general}{font}{textsf} \glssetcategoryattribute{mineral}{font}{mineralfont} \glssetcategoryattribute{animal}{font}{animalfont} \glssetcategoryattribute{vegetable}{font}{vegetablefont} \glssetcategoryattribute{acronym}{font}{myacronymfont} \glssetcategoryattribute{unit}{font}{unitfont} \glssetcategoryattribute{constant}{font}{constantfont} % I can't add one of the above for the "abbreviation" or "bacteria" % category as they aren't considered regular entries. (They use % one of the abbreviation styles that sets the "regular" attribute % to "false".) \glssetcategoryattribute{bacteria}{font}{bacteriafont}% ignored! % If the abbreviation style for "bacteria" is changed to, say, % "short-em", the attribute won't be ignored. % Adjust \glsxtrregularfont so that it picks up the appropriate % command from the "font" attribute (set above). \renewcommand*{\glsxtrregularfont}[1]{% \glshasattribute{\glslabel}{font}% {\csuse{\glsgetattribute{\glslabel}{font}}{#1}}% {#1}% } \newglossaryentry{duck}{name=duck, category={animal}, description={a waterbird with webbed feet}} \newglossaryentry{parrot}{name=parrot, category={animal}, description={mainly tropical bird with bright plumage}} \newglossaryentry{cabbage}{name=cabbage, category={vegetable}, description={vegetable with thick green or purple leaves}} \newglossaryentry{brocolli}{name=brocolli, category={vegetable}, description={vegetable with heads of small green or purple flower buds}} \newglossaryentry{quartz}{name=quartz, category=mineral, description={hard mineral consisting of silica}} \newglossaryentry{corundum}{name=corundum, category=mineral, description={crystalline form of aluminium oxide}} % The following doesn't have the category explicitly set, so it % defaults to "general": \newglossaryentry{loremipsum}{name={lorem ipsum}, description={dummy text}} % The following set the category to "unit": \newglossaryentry{ohm}{name=ohm,symbol={\si{\ohm}}, category=unit, description=unit of electrical resistance} \newglossaryentry{angstrom}{name={\aa}ngstr\"om, category=unit, symbol={\si{\angstrom}},sort=angstrom, description={non-SI unit of length}} % The selected style doesn't display the symbol % so add it to the post-name hook: \newcommand*{\glsxtrpostnameunit}{ (\glsentrysymbol{\glscurrententrylabel})} % Insert the symbol after commands like \gls but only on first use % (and only for the "unit" category): \newcommand*{\glsxtrpostlinkunit}{% \ifdefempty\glscustomtext{\glsxtrpostlinkAddSymbolOnFirstUse}{}} % The above "post-link" hook occurs after the link-text produced by % \gls so it's place outside the \unitfont argument. % Mathematic constants need the "sort" key set because the "name" % field contains commands: \newglossaryentry{pi}{name={\ensuremath{\pi}}, sort=pi, category=constant, user1=pi, description={ratio of a circle's circumference to its diameter}} % Insert the description and "user1" text after commands like \gls but only on first use % (and only for the "constant" category): \newcommand*{\glsxtrpostlinkconstant}{% \ifdefempty\glscustomtext {\glsxtrifwasfirstuse{ (\glsentryuseri{\glslabel}, \glsentrydesc{\glslabel})}{}}% {}} % Insert the "user1" text after the description in the glossary % but only for the "constant" category: \newcommand*{\glsxtrpostdescconstant}{\space (\glsentryuseri{\glscurrententrylabel})} % \newacronym sets the category to "acronym" by default. The % "short-em" style makes it a regular entry. \setabbreviationstyle[acronym]{short-em} \newacronym{laser}{laser}{light amplification by stimulated emission of radiation} \newacronym{scuba}{scuba}{self-contained underwater breathing apparatus} % \newabbreviation sets the category to "abbreviation" by default. % The "long-short-sc" style sets the regular attribute to false. \setabbreviationstyle{long-short-sc} \newabbreviation{html}{html}{hypertext markup language} \newabbreviation{svg}{svg}{scalable vector graphics} % The optional argument can be used to set a different category: \setabbreviationstyle[bacteria]{long-em-short-em} %\setabbreviationstyle[bacteria]{short-em} % An alternative approach that uses \bacteriafont in the document % and in the glossary is to provide a custom style: %\newabbreviationstyle{bacteria}% %{% % \GlsXtrUseAbbrStyleSetup{long-short}% %}% %{% % \GlsXtrUseAbbrStyleFmts{long-short}% % \renewcommand*{\glsabbrvfont}[1]{\bacteriafont{##1}}% % \renewcommand*{\glsfirstlongfont}[1]{\bacteriafont{##1}}% % \renewcommand*{\glslongfont}[1]{\bacteriafont{##1}}% %} % (the definition of \bacteriafont would need to be adjusted to % include \emph) %\setabbreviationstyle[bacteria]{bacteria} \newabbreviation[category=bacteria]% {cbot}% label {C.~botulinum}% short {Clostridium botulinum}% long \newabbreviation[category=bacteria]% {putida}% label {P.~putida}% short {Pseudomonas putida}% long % Abbreviations that have translations. These put the translated % text in the "user1" field. The "-user" abbreviation styles % insert this field (if present) into the parenthetical material % when used with \gls. \setabbreviationstyle[foreign]{short-long-user} % The fonts used by this style can be adjusted: \renewcommand*{\glsabbrvuserfont}[1]{\textsf{\color{red}#1}}% short-form font \renewcommand*{\glslonguserfont}[1]{\textsf{#1}}% long-form font \newabbreviation[category=foreign,user1={French \TeX\ user group}] {gutenberg}{GUTenburg}{Groupe francophone des utilisateurs de \TeX} % Insert the translation (user1) text after the description % in the glossary but only for the "foreign" category: \newcommand*{\glsxtrpostdescforeign}{\space (Translation: \glsentryuseri{\glscurrententrylabel})} % Now we have an awkward one that ends with a period: \setabbreviationstyle[foreignenddot]{short-long-user} % Need to discard the end of sentence period for the % entries in this category. \glssetcategoryattribute{foreignenddot}{discardperiod}{true} % But not on first use (the user1 text doesn't end with a % period): \glssetcategoryattribute{foreignenddot}{retainfirstuseperiod}{true} \newabbreviation [user1={German Speaking \TeX\ User Group},category=foreignenddot] {dante}{DANTE e.V.}{Deutschsprachige Anwendervereinigung \TeX\ e.V.} % Insert the translation (user1) text after the description % in the glossary but only for the "foreignenddot" category: \newcommand*{\glsxtrpostdescforeignenddot}{\space (Translation: \glsentryuseri{\glscurrententrylabel})} % Insert page/pages tag before location list: \GlsXtrEnablePreLocationTag{Page: }{Pages: } \begin{document} \tableofcontents \chapter{Samples in the Main Document Text} \section{All Entries} First use (\verb|\gls|): \forglsentries{\thislabel}{\gls{\thislabel}. } Next use (\verb|\gls|): \forglsentries{\thislabel}{\gls{\thislabel}. } Using \verb|\glsfirst|: \forglsentries{\thislabel}{\glsfirst{\thislabel}. } Using \verb|\glstext|: \forglsentries{\thislabel}{\glstext{\thislabel}. } \section{Abbreviations only} Abbreviations that have the \verb|regular| attribute set are hybrids and can have odd results. In this example, the hybrid entries are: \forglsentries{\thislabel}{% \ifglshasshort{\thislabel}% {% is an abbreviation \glsifregular{\thislabel}% {% is regular \texttt{\thislabel}. }% {}% } {}% } Using \verb|\glsxtrfull|: \forglsentries{\thislabel}{% \ifglshasshort{\thislabel}{\glsxtrfull{\thislabel}. }{}} Using \verb|\glsxtrshort|: \forglsentries{\thislabel}{% \ifglshasshort{\thislabel}{\glsxtrshort{\thislabel}. }{}} Using \verb|\glsxtrlong|: \forglsentries{\thislabel}{% \ifglshaslong{\thislabel}{\glsxtrlong{\thislabel}. }{}} \section{Symbols} Using \verb|\glssymbol|: \forglsentries{\thislabel}{% \ifglshassymbol{\thislabel}{\glssymbol{\thislabel}. }{}} \section{User Field} Using \verb|\glsuseri|: \forglsentries{\thislabel}{% \ifglshasfield{useri}{\thislabel}{\glsuseri{\thislabel}[.] }{}} (The full stop in the above is placed inside square brackets to prevent the \verb|discardperiod| attribute from discarding it since the \verb|useri| field doesn't end with a dot.) \chapter{Math Mode} Inline: $\gls{pi} = \frac{C}{d}$, display: \[ \gls{pi} = \frac{C}{d} \] \chapter{Samples in Headings} Don't use commands like \verb|\gls| in section headings, but you can use commands like \verb|\glsfmttext| or \verb|\glsfmtshort|. \forglsentries{\thislabel}{% \ifglshasshort{\thislabel}% {\section{\glsfmtshort{\thislabel}}}% {% % the constant entry "pi" can't be used in the PDF bookmarks, % so use the user1 text for the bookmark \glsifcategory{\thislabel}{constant} {% \section{\texorpdfstring{\glsfmttext{\thislabel}}{\glsentryuseri{\thislabel}}}% }% {% \section{\glsfmttext{\thislabel}}% }% }% \Glsdesc[noindex]{\thislabel}. } \renewcommand{\glossarypreamble}{\emph{This glossary uses the style `\csuse{@glossary@default@style}' with modifications made through categories and their attributes.}\par\medskip} \printglossaries \end{document}