选项1

选项1

我的词汇表里全是数学和技术,有参数、指标等。一个类似的案例在1

然而,由于我的索引的数量和类型因术语而异,我希望有多个参数\glsargA,,\glsargB..可以从中获取\glsinsert并为每个条目专门定义默认值gls

我尝试合并来自2,但由于我不了解 TeX 的机制,所以我没有运气。

非工作示例:

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

\newglossaryentry{Upara}{
 name=\ensuremath{u_{\glsargA}^{\glsargB}},
 defaultargA=one,
 defaultargB=two,
 description={u}
 }
\newglossaryentry{Xpara}{
 name=\ensuremath{x_{\glsargB}^{\glsargA}},
 defaultargA=I,
 defaultargB=II,
 description={x}
 }

% magic might go here...

\defglsentryfmt{%
...
}

\begin{document}

$\gls{Upara}$

$\gls{Xpara}$

$\gls{Upara}[{aha}{b}]$

$\gls{Xpara}[{aha}{b}]$

$\gls{Upara}$

$\gls{Xpara}$


\printglossaries
\end{document} 

答案1

这是尼古拉·塔尔博特的代码

选项1

这使用了更接近所要求的语法,但不能满足您的所有要求。但是,它确实可以满足您的部分要求。它允许您分别为一位和两位条目设置“填充”占位符。虽然我为一位使用了 ,i为两位使用了 ,i但如果您愿意,也可以为前者使用 ,为后者使用 。但是,您不能针对每个条目指定这些。iiikangarooselephants

所需的语法是\gls{<entry>}[<single argument>]\gls{<entry>}[<first argument>,<second argument>]

\documentclass{scrreprt}
\usepackage{glossaries}
\makeglossaries
\glsnoexpandfields
\newcommand*{\glsarg}{i}
\newcommand*\glsargA{i}
\newcommand*\glsargB{ii}

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

\newglossaryentry{Upara}{
 name=\ensuremath{u_{i}^{ii}},
 text=\ensuremath{u_{\glsargA}^{\glsargB}},
 description={u}
 }
\newglossaryentry{Xpara}{
 name=\ensuremath{x_{ii}^{i}},
 text=\ensuremath{x_{\glsargB}^{\glsargA}},
 description={x}
 }

% modify the entry's format
\makeatletter
\def\before@comma#1,#2\@nil{#1}
\def\after@comma#1,#2\@nil{#2}
\defglsentryfmt{% based on Nicola Talbot's code at https://tex.stackexchange.com/a/229879/
  \let\orgglsargA\glsargA
  \let\orgglsargB\glsargB
  \let\orgglsarg\glsarg
  \ifdefempty\glsinsert
  {}%
  {%
    \edef\tempa{\expandafter\before@comma\glsinsert,\@nil}%
    \edef\tempb{\glsinsert}%
    \ifx\tempa\tempb
      \let\glsarg\glsinsert
    \else
      \def\glsargA{\expandafter\before@comma\tempb\@nil}%
      \def\glsargB{\expandafter\after@comma\tempb\@nil}%
    \fi
    \let\glsinsert\relax
  }%
  \glsgenentryfmt
  \let\glsargA\orgglsargA
  \let\glsargB\orgglsargB
  \let\glsarg\orgglsarg
}
\makeatother

\begin{document}

$\gls{BetragVektor}[1]$

$\gls{BetragVektor}$

$\gls{BetragVektor}[1]$

$\gls{BetragVektor}[2]$

$\gls{BetragVektor}[]$

$\gls{Upara}$

$\gls{Xpara}$

$\gls{Upara}[aha,b]$

$\gls{Xpara}[aha,b]$

$\gls{Upara}$

\printglossaries
\end{document}

一位和两位词汇表条目

选项 2

通过定义新命令,这与请求的语法相差甚远\mygls{}[]。语法与上面的解决方案相同,但新命令的优点是,您可以为不同的两位或不同的一位条目获取不同的默认值。

该解决方案使用包xparse来更流畅地处理可选参数。

\documentclass{scrreprt}
\usepackage{glossaries,xparse}
\makeglossaries
\glsnoexpandfields
\newcommand*{\glsarg}{i}
\newcommand*\glsargA{i}
\newcommand*\glsargB{ii}

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

\newglossaryentry{Upara}{
 name=\ensuremath{u_{one}^{two}},
 text=\ensuremath{u_{\glsargA}^{\glsargB}},
 description={u}
 }
\newglossaryentry{Xpara}{
 name=\ensuremath{x_{II}^{I}},
 text=\ensuremath{x_{\glsargB}^{\glsargA}},
 description={x}
 }

% modify the entry's format
\makeatletter
\def\before@comma#1,#2\@nil{#1}
\def\after@comma#1,#2\@nil{#2}
\defglsentryfmt{% based on Nicola Talbot's code at https://tex.stackexchange.com/a/229879/
  \let\orgglsargA\glsargA
  \let\orgglsargB\glsargB
  \let\orgglsarg\glsarg
  \ifdefempty\glsinsert
  {}%
  {%
    \edef\tempa{\expandafter\before@comma\glsinsert,\@nil}%
    \edef\tempb{\glsinsert}%
    \ifx\tempa\tempb
      \let\glsarg\glsinsert
    \else
      \def\glsargA{\expandafter\before@comma\tempb\@nil}%
      \def\glsargB{\expandafter\after@comma\tempb\@nil}%
    \fi
    \let\glsinsert\relax
  }%
  \glsgenentryfmt
  \let\glsargA\orgglsargA
  \let\glsargB\orgglsargB
  \let\glsarg\orgglsarg
}
\NewDocumentCommand\mygls { m o }{%
  \IfNoValueTF {#2}{%
    \glossentryname{#1}%
  }{%
    \gls{#1}[#2]%
  }%
}
\makeatother

\begin{document}

$\mygls{BetragVektor}[1]$

$\mygls{BetragVektor}$

$\mygls{BetragVektor}[1]$

$\mygls{BetragVektor}[2]$

$\mygls{BetragVektor}[]$

$\mygls{Upara}$

$\mygls{Xpara}$

$\mygls{Upara}[aha,b]$

$\mygls{Xpara}[aha,b]$

$\mygls{Upara}$

\printglossaries
\end{document}

新的命令带来更大的灵活性

相关内容