Запись в глоссарии с дополнительным параметром

Запись в глоссарии с дополнительным параметром

Я хочу создать список символов для своей работы, где символы часто снабжены индексом. Теперь я не хочу создавать новую запись для каждого символа и индекса. Возможно ли с другим параметром в вызове \ gls {\label, {#1}} индекс (#1) поместить в нужное место. Если я выразился слишком загадочно, может помочь минимальный пример:

\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} 

Спасибо за все советы, и я надеюсь, что решение найдется.

решение1

Вот одно из возможных решений, использующее последний необязательный аргумент команд типа \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} 

Это производит:

Изображение результата

Однако вы не сможете использовать этот необязательный аргумент для других записей глоссария.

Редактировать:

Извините, я забыл, что вам также нужно запретить расширение ключа first. Вот обновленная версия, где я отключил расширение с помощью \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} 

Изображение документа

Связанный контент