我创建了一个函数来处理函数后面的上标。我通过使用 来实现这一点\@ifnextchar^
。除了在任何环境下,一切都运行良好pmatrix
。为什么?
作为一个快速而粗糙的示例,我创建了(无用的)函数\fv
来稍微调试一下:
\documentclass{report}
\usepackage{amsmath}
\makeatletter
\newcommand{\fv}[1]{
\@ifnextchar^{A}{B}
}
\makeatother
\begin{document}
\begin{align*}
\begin{pmatrix}
\fv{x}, \fv{x}^y
\end{pmatrix} = \fv{x} = \fv{x}^y
\end{align*}
\end{document}
我原本期望结果的形式为 (B,A y )=B=A y。但我得到的是 (B,B y )=B=A y。
有没有办法检测pmatrix
环境中的上标?
答案1
问题出在您的宏中:\@ifnextchar
正在拾取空格字符。
尝试
\newcommand{\fv}[1]{%
\@ifnextchar^{A}{B}%
}
插入的I%
掩盖了空格,因此\@ifnextchar
有机会“看到”下一个字符。
(Heiko Oberdiek 解释:)LaTeX 的原始版本\@ifnextchar
会吞噬空格,因此额外的空格不会造成影响。但在矩阵环境内amsmath
重新定义\@ifnextchar
。重新定义的版本(\new@ifnextchar
,在 中定义amsgen.sty
)不会忽略空格。
因此,您的第二个示例使用原始的\@ifnextchar
,甚至可以与空间一起使用。