当不使用括号调用宏时,整个单词作为宏参数

当不使用括号调用宏时,整个单词作为宏参数

我有一个宏:

\newcommand{\sEmph}[1]{\textbf{\textcolor{NavyBlue}{#1}}}

然后我可以这样做:

Some text is in \sEmph{blue}, and some in black.

结果如下:

在此处输入图片描述

但如果我省略括号,则只有字母 b 是蓝色,如下所示:

Some text is in \sEmph blue, and some in black.

在此处输入图片描述

问:有没有办法让我的宏对文字起作用无需使用牙套?

答案1

你可以走了

\def\zz#1 {\textcolor{blue}{#1} }

然后\zz它的参数由空格分隔

\zz word like this

会使其word变为蓝色,但必须由明确的空格来分隔。

 \zz word\ like this

会使word\ like蓝色和

... \zz word}..

将会产生错误。

{}LaTeX 的一个主要设计目标是为所有命令、可选参数中的强制参数等提供一致的语法[],因此 LaTeX 并不真正支持这些分隔参数,并且在文档的顶层使用它们通常是一个坏主意。

答案2

一个简单的解决方案如下: \def\sEmph#1+{\textbf{\textcolor{NavyBlue}{#1}}},但您必须使用 + 字符来终止单词。如果您需要 (La)TeX 将单词识别为以任何非字母结尾的字母字符串,则要复杂得多。

相关内容