我想制作一个快捷宏,在公式中为函数名称添加前缀,以便根据函数类型以某种方式修饰它们。使用“普通”宏会导致括号过多,我正在寻找更简洁的宏。
我试图定义一个宏,它将截断所有内容直到下一个空格(或者,如果可能的话,直到下一个非字母标记),并将其视为参数。这可能吗?
示例(不要关注宏观主体):
\def\f <what goes here?> {\mathop{\mathrm{#1}}}
\def\kw <what goes here?> {\mathop{\color{red} #1}}
...
Consider the following:
\[
\kw return \f isBool x \kw or \f isString x
\]
相当于:
Consider the following:
\[
\mathop{\color{red} return}
\mathop{\mathrm{isBool}} x
\mathop{\color{red} or}
\mathop{\mathrm{isString}} x
\]
并且,如果可能的话,这样的宏应该能够理解它是否接收带括号的参数,因此无论是否有空格都\kw{return}
可以将return
其作为参数,以便对于那些不知道其特殊行为的人来说它可以像普通宏一样使用。
欢迎任何 TeX/LaTeX 解决方案......
答案1
是的: 。请注意和\def\mymacro#1 {your definition}
之间的空格。#1
{
答案2
你可以使用如下方法抓取到下一个字母之前的所有内容
\long\def\use#1{#1}
\def\grab{\futurelet\nexttoken\grabauxI}
\def\grabauxI{%
\ifx\nexttoken\sptoken
\expandafter\grabspace
\else
\ifx\nexttoken\bgroup
\expandafter\expandafter\expandafter\grabgroup
\else
\expandafter\expandafter\expandafter\grabstd
\fi
\fi
}
\use{\let\sptoken= } %
\expandafter\def\expandafter\grabspace\space{%
\expandafter\expandafter\expandafter\def
\expandafter\expandafter\expandafter\grabbed
\expandafter\expandafter\expandafter{\expandafter\grabbed\space}%
\grab
}
\long\def\grabgroup#1{%
\expandafter\def\expandafter\grabbed\expandafter{\grabbed{#1}}%
\grab
}
\long\def\grabstd#1{%
\ifcat\noexpand#1a%
\expandafter\grabend\expandafter#1%
\else
\expandafter\def\expandafter\grabbed\expandafter{\grabbed#1}%
\expandafter\grab
\fi
}
\long\def\grabend#1{%
\expandafter\kwaux\expandafter{\grabbed}%
#1%
}
\def\kw{%
\def\grabbed{}%
\grab
}
\long\def\kwaux#1{\showtokens{#1}}
(我在这里只是使用了\showtokens
“有效载荷”作为演示)。我不太确定这是否是你想要的,因为这样\kw return
什么也抓不住!其他答案已经处理了如何抓取空间。
请注意,上述内容可以概括为,抓取器部分不需要“内置”有效载荷(分离出\kw
抓取器),因此它可以应用于几个不同的接口命令。