[Tex/LaTex] Make symbol index with description

indexing

I'm starting to make a symbol and subject index with the package multind. In the symbol index, I would like to group the symbols by thematics, e.g., write set theory notation and have all the symbols below the description, after write operators and have all the notation for the operators, etc.

Does anyone knows how to do this?

I would like to obtain something like the following

Can anyone help me with a minimal working example? Preferably changing the section with page number.

Best Answer

You can use glossaries to do this. I assume you either want to sort your symbols according to definition or to usage since symbols are difficult to sort alphabetically (and your sample isn't alphabetically sorted). With glossaries you can use the package option sort=def to sort in order of definition or sort=use to sort according to usage. In the example below, I've used sort=def (change \setglossarystyle to \glossarystyle if you are using a version of glossaries prior to version 4.0):

\documentclass{report}

\usepackage{amsfonts}
\usepackage[nomain,section,sort=def]{glossaries}
\usepackage{glossary-mcols}

% (Pre glossaries v4.0 requires \glossarystyle rather than
% \setglossarystyle)
\setglossarystyle{mcolindex}
\renewcommand{\glspostdescription}{\dotfill}

\newglossary[op-glg]{operators}{op-gls}{op-glo}{Operators}
\newglossary[cn-glg]{constants}{cn-gls}{cn-glo}{Constants}

\makeglossaries

% Define a command to define operators
% Syntax: \newoperator[options]{label}{operator symbol}

\newcommand*{\newoperator}[3][]{%
  \newglossaryentry{#2}{type=operators,%
    name={$#3$},text={#3},description={},#1}%
}

% Similarly for constants

\newcommand*{\newconstant}[3][]{%
  \newglossaryentry{#2}{type=constants,%
    name={$#3$},text={#3},description={},#1}%
}

% Define operators

\newoperator{Mop}{\mathcal{M}}
\newoperator{Aalpha}{A_\alpha}
\newoperator{nablaOmega}{\nabla_\Omega}
\newoperator{T}{T}
\newoperator{I2}{I_2}
\newoperator{Jz}{J_z}
\newoperator{Gz}{G_z}

% Define constants

\newconstant{pdash}{p'}
\newconstant{jnu}{j_\nu}
\newconstant{Mcn}{\mathfrak{M}}
\newconstant{Dpq}{D_{p,q}}

\begin{document}
\chapter{Sample Chapter}

Some sample usage of constants:
\[
 \gls{pdash}, \gls{Mcn}, \gls{jnu}
\]

Some sample usage of operators:
\[
  \gls{Mop}, \gls{Aalpha}, \gls{nablaOmega}
\]

\newpage

More sample usage:
\[
\gls{T}, \gls{I2}, \gls{Jz}, \gls{Gz},
\gls{Mcn}, \gls{Dpq}, \gls{jnu}
\]

\chapter*{Index}

\printglossaries
\end{document}

In order to build the PDF you need to do:

  1. Run pdflatex
  2. Run makeglossaries
  3. Run pdflatex

The above example produces:

Page 1:

Image of page 1

Page 2:

Image of page 2

Page 3:

Image of page 3

In your example image, you have some lines with multiple entries (for example, c, c_1, c_2, \ldots, v_n). There are various ways to deal with these. You could designate the first in the list (e.g, c) as the main parent entry, and the remainder as sub-entries, and then define a glossary style that puts the sub-entry names after the parent entry name, but this will complicate the location list. However, I think the easiest solution is probably to define an entry with the specified list and then use \glsdisp or \glslink whenever you use it.

For example:

\newconstant{c}{c, c_1, c_2, \ldots, v_n}

Then in the document:

In-line: $\glslink{c}{c}$ or $\glslink{c}{c_1}$ or $\glslink{c}{c_2}$ etc.