自定义命令帮助:不应插入空格

自定义命令帮助:不应插入空格

我为特定词汇表执行的命令存在问题:

\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在组内是快乐的。否则代码会稍微复杂一些。

相关内容