我定义了以下 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}
使用此命令,我可以创建由具有任意数量参数的宏生成名称的条目。
请注意,这个解决方案并没有回答为什么我原来的方法会引发错误的问题。