检测宏参数中的标记

检测宏参数中的标记

我想找到一种方法来定义一个像这样工作的命令

\mycommand{This +is+ a +simple example+.}

并给予

A简单示例

即查找由特定符号包围的单词的命令(这里是+)包围的单词并更改格式(此处为大胆的)这些词。

另外,有没有关于 TeX 中“高级”宏的参考资料?

答案1

这很容易:

\def\mycommand{\begingroup\setupplus\mycommandaux}
\def\setupplus{%
  \catcode`+=\active
  \begingroup\lccode`~=`+\lowercase{\endgroup\def~##1~}{\textbf{##1}}%
}
\newcommand\mycommandaux[1]{#1\endgroup}

你打开一个组,并在这个组中将其设置+为活动状态;其操作是收集下一个组之前的所有内容+,并将其以粗体显示。重要的是在执行设置后收集参数。因此,操作分为两个,\mycommandaux收集参数,以便 TeX 可以处理它,并关闭由 启动的组\mycommand

不要使用这样的捷径;迟早它们会给你带来麻烦。

注意:这\mycommand不能在另一个命令的参数中使用。如果你需要它,那么需要一个稍微复杂一点的策略:

\protected\def\mycommand{\begingroup\setupplus\mycommandaux}
\def\setupplus{%
  \catcode`+=\active
  \begingroup\lccode`~=`+\lowercase{\endgroup\def~##1~}{\textbf{##1}}%
}
\newcommand\mycommandaux[1]{\scantokens{#1\noexpand}\endgroup}

相关内容