# Glossary entry with extra parameter

I want to create a list of symbols for my work, where the symbols are often provided with an index. Now I do not want to create a new entry for each symbol and index. Is it possible with another parameter in the call \ gls {\label, {#1}} the index (#1) put to the desired location. If I have expressed myself too cryptic, may help the minimal example:

\documentclass{scrreprt}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[ansinew]{inputenc}
\usepackage{glossaries}
\makeglossaries

\newglossaryentry{BetragVektor1}{name=\ensuremath{|\overline{u_1}|},description={Länge des Vektors}}
\newglossaryentry{BetragVektor2}{name=\ensuremath{|\overline{u_2}|},description={Länge des Vektors}}
\newglossaryentry{BetragVektor}{name=\ensuremath{|\overline{u_2}|},description={Länge des Vektors}}

\begin{document}

target:\\
The vector $|\overline{u_1}|$ is longer than the vector $|\overline{u_2}|$.

option1:\\
The vector \gls{BetragVektor1} is longer than the vector \gls{BetragVektor2}.

option2(gloosarie-documentation) :\\
\gls{BetragVektor}{1}
This option writes the 1 at the end - not behind u.

\end{document}


Thanks for all the advice and I hope, there is a solution.

• I don't understand what you mean by "writes the 1 at the end". The end of what? (The document?) What does the 1 represent? Do you mean that you want a command that automatically does both \gls{BetragVektor} and \index{$|\overline{u_2}|$}? – Nicola Talbot Feb 24 '15 at 11:36
• No - sorry for the cryptic text. I want to define one variable like \newglossaryentry{c} {name=\ensuremath{\vec{c}},description={speed}} However I have \gls{c} three times with the indizes 1...3 in my document. The command \gls{c}{_1} writes the _1 at the end of c - but not under the arrow. The same problem is with: \newglossaryentry{cc} {name=\ensuremath{|c|},description={magnitude of c}} The command \gls{cc}{_1} writes the 1 at the end (|c|1) and not |c_1|. Do you know what I mean? – Franz2304 Feb 24 '15 at 11:59
• Okay, I understand what you mean now. – Nicola Talbot Feb 24 '15 at 12:05
• Thank you for your help. At the moment I have defined c and write everytime $\vec{\gls{c}_1}$. That's ok but not nice and it is not really more simple. Thank you for your trouble. – Franz2304 Feb 24 '15 at 12:22

Here's one possible solution that uses the final optional argument of commands like \gls:

\documentclass{scrreprt}
\usepackage{glossaries}
\makeglossaries

\glssetnoexpandfield{text}% don't expand text field when defining an entry

\newcommand{\symbolidx}{i}% default index

\newglossaryentry{BetragVektor}{
name=\ensuremath{|\overline{u_\symbolidx}|},
text=|\overline{u_\symbolidx}|,
description={}}

% modify the entry's format

\defglsentryfmt{%
\let\symbolidx\glsinsert
\def\glsinsert{}%
\glsgenentryfmt
}

\begin{document}

$\gls{BetragVektor}$

$\gls{BetragVektor}[1]$

$\gls{BetragVektor}[2]$

\printglossaries
\end{document}


This produces:

However, you won't be able to use this optional argument for any of your other glossary entries.

Edit:

Sorry, I forget that you also need to prevent the expansion of the first key. Here's an updated version where I've switched off expansion using \glsnoexpandfields:

\documentclass{scrreprt}
\usepackage{glossaries}
\makeglossaries

\glsnoexpandfields

\newcommand*{\glsarg}{i}

\newglossaryentry{BetragVektor}{
name=\ensuremath{|\overline{u_i}|},
text=|\overline{u_\glsarg}|,
description={}}

% modify the entry's format

\defglsentryfmt{%
\let\orgglsarg\glsarg
\ifdefempty\glsinsert
{}%
{%
\let\glsarg\glsinsert
\let\glsinsert\relax
}%
\glsgenentryfmt
\let\glsarg\orgglsarg
}

\begin{document}

$\gls{BetragVektor}[1]$

$\gls{BetragVektor}$

$\gls{BetragVektor}[1]$

$\gls{BetragVektor}[2]$

$\gls{BetragVektor}[]$

\printglossaries
\end{document}


• All isn't perfect :-) If you call \gls{label} a second time without an optional argument, you don't get the default index. Another mistake is, if the first call is with an argument latex writes the default index. $\gls{BetragVektor}$ $\gls{BetragVektor}$ or $\gls{BetragVektor}[1]$ $\gls{BetragVektor}$ – Franz2304 Feb 24 '15 at 16:12
• @Franz2304 I've updated my answer. – Nicola Talbot Feb 24 '15 at 18:06
• I have no clue how it works - but it works fine. Thank you very much. – Franz2304 Feb 26 '15 at 7:50