MWE gesucht: Modernes Stichwortverzeichnis und Symbolverzeichnis in Büchern
In deutschen Büchern produzierte ich das Stichwortverzeichnis (mit Unterbegriffen und Seitenzahlen) bisher mit `\index`+Makeindex und das Symbolverzeichnis (mit Erklärungen und Seitenzahlen) mit `\gls`+`\newglossaryentry`+(weitere `glossaries`-relevante Befehle)+Makeindex. Ein Stichwortverzeichnis-Beispiel findet man [hier](https://i.stack.imgur.com/bQnvw.png). Soviel ich verstehe gilt die Makeindex-Art als veraltet, da die korrekte Handhabung der Umlaute und Eszett erschwert ist und deutlich mehr Arbeit verlangt. Ich suche nach **Beispielen**, wie die beiden Verzeichnisse auf eine neuere Art (z.B. mit glossaries und xindy oder bib2gls) zu erstellen sind. Eine deutschsprachige Version der Seiten 10–12 des https://mirror.reismil.ch/CTAN/support/bib2gls/examples/sample-multi2.pdf (Danke an Ulrike Firscher), die auf den Hauptttext verweist, würde dem Gesuchten nahe kommen, bis auf die Tatsache, dass bei mir die Erklärungen der Symbole auf S. 10 meistens mehrzeilig und ohne Klammern sein sollten, und dass das Stichwortverzeichnis (einstufige) Untereinträge haben würde. (Alleine mit `glossaries`-Doku schaffte ich die Umstellung nicht; dort wird auf allerlei `sample-….tex` verwiesen, und unter diesen `sample-….tex` fand ich nichts passendes.) Als Compiler nutze ich inzwischen xelatex.
Schlaue Leute hören bitte hier auf zu lesen. Der begriffsstutzige Rest (vor allem die, die nach MWE fragten), lesen bitte weiter: weiter unten wie die obige Datei erzeugt wurde:
% This file is public domain. See the "Examples" chapter
% in the bib2gls user manual for a more detailed description
% of this file.
\documentclass{scrreprt}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[version=4]{mhchem}
\usepackage{siunitx}
\usepackage{etoolbox}
\usepackage{marvosym}
% package conflict, need to undefine conflicting commands
\undef\Sun
\undef\Lightning
\usepackage[weather]{ifsym}
\usepackage[en-GB]{datetime2}
\usepackage[colorlinks]{hyperref}
\usepackage[record,% use bib2gls
section,% use \section* for glossary headings
postdot,% insert dot after descriptions in glossaries
nomain,% don't create 'main' glossary
index,% create 'index' glossary
nostyles,% don't load default styles
% load and patch required style packages:
stylemods={list,mcols,tree,bookindex}
]{glossaries-extra}
\newglossary*{bacteria}{Bacteria}
\newglossary*{markuplanguage}{Markup Languages}
\newglossary*{vegetable}{Vegetables}
\newglossary*{mineral}{Minerals}
\newglossary*{animal}{Animals}
\newglossary*{chemical}{Chemical Formula}
\newglossary*{baseunit}{SI Units}
\newglossary*{measurement}{Measurements}
\newglossary*{film}{Films}
\newglossary*{book}{Books}
\newglossary*{person}{People}
\newglossary*{mediacontrol}{Media Control Symbols}
\newglossary*{information}{Information Symbols}
\newglossary*{weather}{Weather Symbols}
\newcommand*{\bibglsdate}[7]{\DTMdisplaydate{#1}{#2}{#3}{#4}}
\GlsXtrLoadResources[
src={no-interpret-preamble},
interpret-preamble=false
]
\GlsXtrLoadResources[
src={interpret-preamble,people},
field-aliases={
identifier=category,
born=user1,
died=user2,
othername=user3
},
replicate-fields={name={first}},
type=person,
save-locations=false,
date-fields={user1,user2},
date-field-format={d MMM y G}
]
% Abbreviation styles must be set before the resource set
% that defines the abbreviations:
\setabbreviationstyle[bacteria]{long-only-short-only}
\setabbreviationstyle[markuplanguage]{long-short-desc}
% And also the style-dependent name format:
\renewcommand*{\glsxtrlongshortdescname}{%
\protect\glsabbrvfont{\the\glsshorttok}\space
\glsxtrparen{\glslongfont{\the\glslongtok}}%
}
\GlsXtrLoadResources[
src={bacteria,markuplanguages,vegetables,
minerals,animals,books,films},
field-aliases={
identifier=category,
year=user1,
cast=user2
},
type={same as category},
bibtex-contributor-fields={user2},
contributor-order={forenames},
save-locations=false
]
\GlsXtrLoadResources[
src={chemicalformula},
entry-type-aliases={chemical=symbol},
field-aliases={
identifier=category,
formula=name,
chemicalname=description,
},
type={chemical},
set-widest,
sort={letternumber-case},
symbol-sort-fallback={name},
save-locations=false
]
\GlsXtrLoadResources[
src={baseunits,derivedunits},
entry-type-aliases={measurement=symbol,unit=symbol},
field-aliases={
unitname=description,
unitsymbol=symbol,
measurement=name
},
category={measurement},
type={measurement},
set-widest,
symbol-sort-fallback={name},
save-locations=false
]
\GlsXtrLoadResources[
src={baseunits},
entry-type-aliases={unit=symbol},
field-aliases={
unitname=description,
unitsymbol=name
},
category={measurement},
type={baseunit},
duplicate-label-suffix={.copy},
symbol-sort-fallback={name},
save-locations=false
]
\GlsXtrLoadResources[
src={miscsymbols},
field-aliases={
identifier=category,
icon=name,
icondescription=description
},
entry-type-aliases={icon=symbol},
type={same as category},
sort-field={description},
save-locations=false,
set-widest
]
\renewcommand*{\glsxtrlongshortdescname}{%
\protect\protect\glslongfont{\the\glslongtok}\space
\glsxtrparen{\glsabbrvfont{\the\glsshorttok}}%
}
% requires glossaries-extra v1.25:
\renewcommand*{\glsxtronlyname}{%
\protect\glsabbrvonlyfont{\the\glslongtok}%
}
\GlsXtrLoadResources[
src={miscsymbols},
selection={recorded no deps},
duplicate-label-suffix={.copy},
entry-type-aliases={icon=index},
field-aliases={
identifier=category,
icondescription=symbol,
icon=name
},
type=index,
sort-field={symbol},
group={glssymbols}
]
\GlsXtrLoadResources[
src={terms,bacteria,markuplanguages,vegetables,minerals,
animals,chemicalformula,baseunits,derivedunits,people,
films,books,miscsymbols},
selection={recorded and deps and see},
field-aliases={
identifier=category,
formula=symbol,
chemicalname=name,
unitname=description,
unitsymbol=symbol,
measurement=name,
icon=symbol,
icondescription=name
},
entry-type-aliases={
chemical=index,
measurement=entry,
unit=dualentry,
icon=index
},
label-prefix={idx.},
record-label-prefix={idx.},
type=index,
dual-type=index,
combine-dual-locations=both,
abbreviation-sort-fallback={long},
replicate-override,
replicate-fields={first=name},
identical-sort-action={category}
]
\newcommand*{\swaptwo}[2]{#2, #1}
\newcommand*{\swapthree}[3]{#2 #3, #1}
\newcommand{\bacteriafont}[1]{\emph{#1}}
\glssetcategoryattribute{bacteria}{textformat}{bacteriafont}
\glssetcategoryattribute{bacteria}{glossnamefont}{bacteriafont}
\glssetcategoryattribute{bacteria}{glossdescfont}{bacteriafont}
\newcommand{\bookfont}[1]{\emph{#1}}
\glssetcategoryattribute{book}{textformat}{bookfont}
\glssetcategoryattribute{book}{glossnamefont}{bookfont}
\newcommand{\filmfont}[1]{\emph{#1}}
\glssetcategoryattribute{film}{textformat}{filmfont}
\glssetcategoryattribute{film}{glossnamefont}{filmfont}
\glssetcategoryattribute{film}{glossdesc}{firstuc}
\glssetcategoryattribute{markuplanguage}{glossdesc}{firstuc}
\newcommand*{\glsxtrpostlinkmediacontrol}{%
\glsxtrpostlinkAddDescOnFirstUse
}
\newcommand*{\glsxtrpostlinkinformation}{%
\glsxtrpostlinkAddDescOnFirstUse
}
\newcommand*{\glsxtrpostlinkweather}{%
\glsxtrpostlinkAddDescOnFirstUse
}
\newcommand*{\glsxtrpostlinkperson}{%
\glsxtrifwasfirstuse
{%
\ifglshasfield{user3}{\glslabel}%
{\space(\glscurrentfieldvalue)}%
{}%
}%
{}%
}
\newcommand*{\glsxtrpostnameperson}{%
\ifglshasfield{user3}{\glscurrententrylabel}%
{\space(\glscurrentfieldvalue)}%
{}%
}
\newcommand*{\glsxtrpostdescperson}{%
\ifglshasfield{user1}{\glscurrententrylabel}
{% born
\space(\glscurrentfieldvalue\,--\,%
\ifglshasfield{user2}{\glscurrententrylabel}
{% died
\glscurrentfieldvalue
}%
{}%
)%
}%
{}%
}
\newcommand*{\glsxtrpostdescfilm}{%
\ifglshasfield{user1}{\glscurrententrylabel}%
{%
\glsxtrrestorepostpunc % requires glossaries-extra v1.23+
\ (released \glscurrentfieldvalue)}%
{}%
\ifglshasfield{user2}{\glscurrententrylabel}%
{%
\glsxtrrestorepostpunc
\ featuring \glscurrentfieldvalue
}%
{}%
}
\renewcommand*{\glsxtrbookindexname}[1]{%
\glossentryname{#1}%
\ifglshassymbol{#1}%
{%
\glsifcategory{#1}{chemical}%
{, \glossentrysymbol{#1}}%
{\space(\glossentrynameother{#1}{symbol})}%
}%
{%
\glsifcategory{#1}{film}%
{\ (film)}%
{}%
}%
}
% requires glossaries-extra v1.25+:
\renewcommand*{\glsextrapostnamehook}[1]{%
\glsadd[format=hyperbf]{#1}%
}
\newcommand{\unit}{\glssymbol}
\newcommand{\measurement}{\gls}
\glsxtrnewgls{film.}{\film}
\glsxtrnewglslike{idx.}{\idx}{\idxpl}{\Idx}{\Idxpl}
\begin{document}
\chapter{Sample}
\section{Bacteria}
This section is about \idxpl{bacteria}.
\subsection{First Use}
\gls{cbotulinum}, \gls{pputida}, \gls{cperfringens},
\gls{bsubtilis}, \gls{ctetani}, \gls{pcomposti},
\gls{pfimeticola}, \gls{cburnetii}, \gls{raustralis},
\gls{rrickettsii}.
\subsection{Next Use}
\gls{cbotulinum}, \gls{pputida}, \gls{cperfringens},
\gls{bsubtilis}, \gls{ctetani}, \gls{pcomposti},
\gls{pfimeticola}, \gls{cburnetii}, \gls{raustralis},
\gls{rrickettsii}.
\section{Markup Languages}
This section is about \idxpl{markuplanguage}.
\subsection{First Use}
\gls{LaTeX}, \gls{markdown}, \gls{xhtml}, \gls{mathml}, \gls{svg}.
\subsection{Next Use}
\gls{LaTeX}, \gls{markdown}, \gls{xhtml}, \gls{mathml}, \gls{svg}.
\section{Vegetables}
This section is about \idxpl{vegetable}.
\Gls{cabbage}, \gls{brussels-sprout}, \gls{artichoke},
\gls{cauliflower}, \gls{courgette}, \gls{spinach}.
\section{Minerals}
This section is about \idxpl{mineral}.
\Gls{beryl}, \gls{amethyst}, \gls{chalcedony}, \gls{aquamarine},
\gls{aragonite}, \gls{calcite}, \gls{bilinite},
\gls{cyanotrichite}, \gls{biotite}, \gls{dolomite},
\gls{quetzalcoatlite}, \gls{vulcanite}.
\section{Animals}
This section is about \idxpl{animal}.
\Gls{duck}, \gls{parrot}, \gls{hedgehog}, \gls{sealion},
\gls{zander}, \gls{aardvark}, \gls{zebra}, \gls{swan},
\gls{armadillo}.
\section{Chemicals}
This section is about \idxpl{chemical}.
\gls{Al2SO43} (\glsdesc{Al2SO43}), \gls{H2O} (\glsdesc{H2O}),
\gls{C6H12O6} (\glsdesc{C6H12O6}), \gls{CH3CH2OH}
(\glsdesc{CH3CH2OH}), \gls{CH2O} (\glsdesc{CH2O}), \gls{OF2}
(\glsdesc{OF2}), \gls{O2F2} (\glsdesc{O2F2}), \gls{SO42-}
(\glsdesc{SO42-}), \gls{H3O+} (\glsdesc{H3O+}), \gls{OH-}
(\glsdesc{OH-}), \gls{O2} (\glsdesc{O2}), \gls{AlF3}
(\glsdesc{AlF3}), \gls{O} (\glsdesc{O}), \gls{Al2CoO4}
(\glsdesc{Al2CoO4}), \gls{As4S4} (\glsdesc{As4S4}),
\gls{C10H10O4} (\glsdesc{C10H10O4}), \gls{C5H4NCOOH}
(\glsdesc{C5H4NCOOH}), \gls{C8H10N4O2} (\gls{C8H10N4O2}),
\gls{SO2} (\glsdesc{SO2}), \gls{S2O72-} (\gls{S2O72-}),
\gls{SbBr3} (\glsdesc{SbBr3}), \gls{Sc2O3} (\glsdesc{Sc2O3}),
\gls{Zr3PO44} (\glsdesc{Zr3PO44}), \gls{ZnF2} (\glsdesc{ZnF2}).
\section{SI Units}
\Idxpl{baseunit}: \unit{ampere} (measures \measurement{ampere}),
\unit{kilogram} (measures \measurement{kilogram}), \unit{metre},
\unit{second}, \unit{kelvin}, \unit{mole}, \unit{candela}.
\Idxpl{derivedunit}: \unit{area}, \unit{volume},
\unit{velocity},
\unit{acceleration}, \unit{density}, \unit{luminance},
\unit{specificvolume}, \unit{concentration}, \unit{wavenumber}.
\section{Books and Films}
\Idxpl{book}: \gls{ataleoftwocities} (by \gls{dickens}),
\gls{thebigsleep} (by \gls{chandler}, \idx{film} adaptation:
\film{thebigsleep}), \gls{icecoldinalex} (by
\gls{landon}, \idx{film} adaptation: \film{icecoldinalex}),
\gls{whydidnttheyaskevans} (by \gls{christie},
\idx{film} adaptation: \film{whydidnttheyaskevans}),
\gls{doandroidsdreamofelectricsheep} (by \gls{dick},
inspired the \idx{film} \film{bladerunner}).
\Idxpl{film}: \film{anunexpectedjourney}, \film{desolationofsmaug}
and \film{thebattleoffivearmies} (adapted from the
\idx{book} \gls{thehobbit} by \gls{tolkien}),
\film{thefellowshipofthering}, \film{thetwotowers}
and \film{thereturnoftheking} (adapted from the
\idx{book} \gls{thelordoftherings} also by \gls{tolkien}).
\section{Miscellaneous Symbols}
\subsection{First Use}
\Idxpl{mediacontrol}: \gls{forward}, \gls{forwardtoindex},
\gls{rewindtoindex}, \gls{rewind}.
\Idx{information}: \gls{bicycle}, \gls{coffeecup}, \gls{info},
\gls{gentsroom}, \gls{ladiesroom}, \gls{wheelchair}, \gls{football},
\gls{recycling}.
\Idx{weather}: \gls{cloud}, \gls{fog}, \gls{hail}, \gls{sun},
\gls{lightning}.
\subsection{Next Use}
\Idxpl{mediacontrol}: \gls{forward}, \gls{forwardtoindex},
\gls{rewindtoindex}, \gls{rewind}.
\Idx{information}: \gls{bicycle}, \gls{coffeecup}, \gls{info},
\gls{gentsroom}, \gls{ladiesroom}, \gls{wheelchair}, \gls{football}.
\Idx{weather}: \gls{cloud}, \gls{fog}, \gls{hail}, \gls{sun},
\gls{lightning}.
\section{Measurements}
\Idxpl{measurement}:
\measurement{ampere}, \measurement{area}, \measurement{metre}.
\chapter{Glossaries}
\printunsrtglossary[type=bacteria,style=mcoltree]
\printunsrtglossary[type=markuplanguage,style=altlist]
\printunsrtglossary[type=vegetable,style=tree,nogroupskip]
\printunsrtglossary[type=mineral,style=treegroup]
\printunsrtglossary[type=animal,style=tree]
\printunsrtglossary[type=person,style=tree,nogroupskip]
\printunsrtglossary[type=book,style=tree,nogroupskip]
\printunsrtglossary[type=film,style=tree,nogroupskip]
\printunsrtglossary*[type=chemical,style=mcolalttreegroup]
{%
\renewcommand*{\glstreenamefmt}[1]{#1}%
\renewcommand*{\glstreegroupheaderfmt}[1]{\textbf{#1}}%
}
\printunsrtglossary*[type=measurement,style=alttree,nogroupskip]
{%
\renewcommand{\glsxtralttreeSymbolDescLocation}[2]{%
\glossentrydesc{#1}%
\ifglshassymbol{#1}{\space(\glossentrysymbol{#1})}{}%
\glspostdescription
\glsxtrAltTreePar
}%
}
\printunsrtglossary*[type=baseunit,style=alttree,nogroupskip]
{%
\glsFindWidestTopLevelName[baseunit]%
}
\printunsrtglossary[type=information,style=alttree,nogroupskip]
\printunsrtglossary[type=mediacontrol,style=alttree,nogroupskip]
\printunsrtglossary[type=weather,style=alttree,nogroupskip]
\printunsrtglossary*[type=index,style=bookindex]
{%
\setupglossaries{section=chapter}%
\let\sortname\swaptwo
\let\sortvonname\swapthree
\renewcommand*{\glsextrapostnamehook}[1]{}%
}
\end{document}}
Die restlichen Quellcodes sind (angeblich) unter https://mirror.reismil.ch/CTAN/support/bib2gls/examples/ zu finden. Im Übrigen denke ich nicht, dass jemand mit einem gesunden Menschenverstand so etwas im Echtfall schreiben sollte. Ein Autor soll sich schließlich auf den Inhalt (und nicht die tausenden Formatierungsbefehle) konzentrieren.