宏接受参数而不将其括在括号中?

宏接受参数而不将其括在括号中?

我想制作一个不需要花括号来接受参数的宏。让我们举一个例子。假设我想要一个接受可选参数f和一个参数的宏x

\dd[f]{x}

这相当于写:

\frac{\mathrm{d} f }{\mathrm{d} x }

问题是,是否可以制作一个宏,这样我就不必写括号,但它仍然会接受参数?

如果可以不用括号的话会非常方便。像这样就很好了:

\dd f,x

有没有什么办法可以避免写括号?

答案1

这种宏是纯 tex 构造,称为“分隔宏”。在 latex 中不鼓励使用它,至少部分原因是它很容易出错。

这是一个按照你要求做的例子:

\documentclass{article}
\def\dd #1,#2 {\frac{\mathrm{d} #1 }{\mathrm{d} #2 }}
\begin{document}
\thispagestyle{empty}
$\dd f,x $
\end{document}

示例代码的输出

观察一下,如果你省略输入中第二个参数后的空格

$\dd f,x$

你会得到一个错误:

! Missing } inserted.
<inserted text> 
                }
l.5 $\dd f,x$

然而,没有明确的“更接近”会将参数的识别限制为单个输入标记,这可能会非常有限,尽管对于这个例子来说并非如此。

编辑: 为了响应对类似分隔宏(其中参数可以是可选的)的请求,这里是相同的,为此目的进行了修改。在这种特殊情况下,所要求的只是每个参数都必须明确分隔。

\documentclass{article}
\def\dd #1,#2;{\frac{\mathrm{d} #1 }{\mathrm{d} #2 }}
\begin{document}
\[\dd f,x; \quad \dd ,x; \quad \dd ,; \]
\end{document}

示例代码的输出

在这种情况下,每个参数可能只有一个字母或控制序列(例如\phi),省略一个参数只是将其从输出中省略。(只是不要像我在设置示例时那样输入句号而不是逗号。)

在更复杂的情况下,多字符串将成为参数,参数中可能存在的标点符号意味着必须更加小心地选择分隔符;在这种情况下,还可以将受影响的参数括在括号中,使它们显示为单个 tokan 到 (la)tex,正如@SeanAllred 在评论中所建议的那样。

并且,如果要在文本而不是数学中使用这个宏,则非常注意扩展中的空格。

相关内容