![宏接受参数而不将其括在括号中?](https://linux22.com/image/476754/%E5%AE%8F%E6%8E%A5%E5%8F%97%E5%8F%82%E6%95%B0%E8%80%8C%E4%B8%8D%E5%B0%86%E5%85%B6%E6%8B%AC%E5%9C%A8%E6%8B%AC%E5%8F%B7%E4%B8%AD%EF%BC%9F.png)
我想制作一个不需要花括号来接受参数的宏。让我们举一个例子。假设我想要一个接受可选参数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 在评论中所建议的那样。
并且,如果要在文本而不是数学中使用这个宏,则非常注意扩展中的空格。