包含使用 \NewDocumentCommand 定义的命令的词汇表条目的名称

包含使用 \NewDocumentCommand 定义的命令的词汇表条目的名称

我定义了以下 Latex 命令:

\NewDocumentCommand{\invokeWithCSV}{m>{\SplitList{,}}m}{#1#2}

它以命令名称和逗号分隔的参数列表作为输入,并使用这些参数调用命令。然后我创建命令:

\newcommand{\sample}[3]{sample text}

现在,如果我尝试使用以下任一方式创建词汇表条目

\newglossaryentry{entry}{
      name=\sample{1}{2}{3},
      description={desc}}

或者

\newglossaryentry{entry}{
      name=\invokeWithCSV{\sample}{1,2,3},
      description={desc}}

那么第二个选项就失败了。你能解释一下这个问题并提供解决方案吗?要调用的确切命令及其参数数量事先是未知的。

使用第一个选项的最小工作示例:

\documentclass{article}
\usepackage{xparse,pgffor}
\usepackage{glossaries}
\makeglossaries

\begin{document}
% \NewDocumentCommand{\invokeWithCSV}{m>{\SplitList{,}}m}{#1#2}
\newcommand{\sample}[3]{sample text}

\newglossaryentry{entry}{
    name=\sample{1}{2}{3},
    description={desc}}

\gls{entry}    
\printglossaries
\end{document}

一个最小的非工作示例,只需更改字段name

\documentclass{article}
\usepackage{xparse,pgffor}
\usepackage{glossaries}
\makeglossaries

\begin{document}
\NewDocumentCommand{\invokeWithCSV}{m>{\SplitList{,}}m}{#1#2}
\newcommand{\sample}[3]{sample text}

\newglossaryentry{entry}{
    name=\invokeWithCSV{\sample}{1,2,3},
    description={desc}}

\gls{entry}    
\printglossaries
\end{document}

答案1

我找到了一种解决上述问题的方法:

\NewDocumentCommand{\newentrywithargs}{m >{\SplitList{,}}m}{
    \newglossaryentry{entry}{
        name={#1#2},
        description={desc}
    }
}

\newentrywithargs{\sample}{1,2,3}
\gls{entry}

使用此命令,我可以创建由具有任意数量参数的宏生成名称的条目。

请注意,这个解决方案并没有回答为什么我原来的方法会引发错误的问题。

相关内容