我有以下代码:
\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
会生成一个普通符号,而括号在文本样式中使用时不会造成任何损害。