避免使用带有可选参数作为下标的命令的括号

避免使用带有可选参数作为下标的命令的括号

我有以下代码:

\documentclass{article}
\newcommand{\quot}[3][c]{\frac{#2}{#3#1}}
\begin{document}
\LARGE
$A_\frac{a}{bc}$
$A_{\quot{a}{b}}$
$A_{\quot[d]{a}{b}}$
\end{document}

在此处输入图片描述

如果我写的$A_\quot{a}{b}$不是$A_{\quot{a}{b}}$

或者我$A_\quot[d]{a}{b}$收到$A_{\quot[d]{a}{b}}$一个错误。

! Missing { inserted.

是否可以修改我的\quot命令以消除多余的括号?

答案1

$A_\frac{a}{bc}$有效,因为_进行扩展以找到左括号,这也可能是隐式的。因此,\frac一直进行扩展,因为通常的定义是

% latex.ltx, line 4260:
\def\frac#1#2{{\begingroup#1\endgroup\over#2}}

因此,当参数已经被吸收时,就会扫描{之前的内容。\begingroup

这种情况不会发生\quot,因为它有一个可选参数,所以扩展以 结束,\kernel@ifnextchar因为这个宏以 开头\let

在定义中添加一对括号,例如

\newcommand{\quot}[3][c]{{\frac{#2}{#3#1}}}

不会解决问题。你可以用间接的方式做到这一点:

\newcommand{\quot}{\bgroup\innerquot}
\newcommand{\innerquot}[3][c]{\frac{#2}{#3#1}\egroup}

但我建议养成使用括号括住下标的习惯。如果你尝试

$A_\notin$

您可能已经明白为什么了。不,没有办法在\notin不使用括号的情况下使下标起作用,也就是说,需要输入$A_{\notin}$。上面的技巧之所以有效,是因为\quot会生成一个普通符号,而括号在文本样式中使用时不会造成任何损害。

相关内容