我为特定词汇表执行的命令存在问题:
\newcommand{\term}[4]{\glslink{term:#1}{#2}}
\makeatletter
\def\term#1{\def\tempa{#1}\futurelet\next\term@i}% Save first argument
\def\term@i{\ifx\next\bgroup\expandafter\term@ii\else\expandafter\term@end\fi}%Check brace
\def\term@ii#1{\glslink{term:\tempa}{#1}}%Two args
\def\term@end{\glslink{term:\tempa}{\tempa}}%Single args
\makeatother
它应该像这样工作:
'\term{BAR}' -> '\glslink{term:BAR}{BAR}'
'\term{BAR}{FOO}' -> '\glslink{term:BAR}{FOO}'
除了在结果前输入的空格外,其他一切都运行良好。
看起来是这样的
'\term{BAR}' -> '\xspace\glslink{term:BAR}{BAR}'
'\term{BAR}{FOO}' -> '\xspace\glslink{term:BAR}{FOO}'
答案1
您的示例在我的 TeXLive 安装上运行良好。请发布一个完整的可编译示例,以便我们仔细查看。无论如何,空格似乎不是来自您的代码。此外,您的第一行似乎与示例无关,应该删除。
您可以使用以下方法实现相同目的:
\makeatletter
\newcommand*{\term}[2][\@tempa]{%
\begingroup
\def\@tempa{#2}%
\glslink{term:#2}{#1}%
\endgroup
}
\makeatother
用法:
'\term{BAR}' -> '\glslink{term:BAR}{BAR}'
'\term[FOO]{BAR}' -> '\glslink{term:BAR}{FOO}'
我在这里假设\glslink
在组内是快乐的。否则代码会稍微复杂一些。