\@ifnextchar 在 pmatrix 里面吗?

\@ifnextchar 在 pmatrix 里面吗?

我创建了一个函数来处理函数后面的上标。我通过使用 来实现这一点\@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,甚至可以与空间一起使用。

输出

相关内容