AMS 对齐中的不完整 \iffalse 错误

AMS 对齐中的不完整 \iffalse 错误

梅威瑟:

\documentclass[a4paper]{report}
\usepackage{amsmath,xparse}
\makeatletter
\newif\ifinvd@lims\invd@limsfalse
\newif\iflr\lrfalse
\ExplSyntaxOn
\newcommand{\delim}[3][lr]{
\begingroup
\str_case:nnF { #1 }
    {
    { lr }{\def\lsize{\left}\def\rsize{\right}    \lrtrue}
}
{\typeout{#1}
}
\str_case:nnF { #2 }
    {
    { v }{\def\ldel{|}\def\rdel{|}}
}
{\typeout{#2}
}
    \ifinvd@lims
        \ldel #3 \rdel
    \else
        \lsize\ldel #3 \rsize\rdel
    \fi
\endgroup
}
%\ExplSyntaxOff
\newcommand{\abs}[1][lr]{\delim[#1]{v}}

\begin{document}
\[\abs{Jh(x,y,z)}=\begingroup
\str_case:nnF {lr}
    {
    { lr }{\def\lsize{\left}\def\rsize{\right}    \lrtrue}
}
{\typeout{}
}
\str_case:nnF {v}
    {
    { v }{\def\ldel{|}\def\rdel{|}}
}
{\typeout{}
}
    \ifinvd@lims
%        \ldel #3 \rdel
    \else
        \lsize\ldel \begin{matrix}
y-z & x & -x \\
0 & 2(y+z) & 2(y+z) \\
2z & 4y & 4z
\end{matrix} \rsize\rdel
    \fi
\endgroup

\]
\begin{align*}
\abs{Jh(x,y,z)}=&\abs{\begin{matrix}
y-z & x & -x \\
0 & 2(y+z) & 2(y+z) \\
2z & 4y & 4z
\end{matrix}}=(y-z)\abs{\begin{matrix} 2(y+z) & 2(y+z) \\ 4y & 4z \end{matrix}}+{} \\
{}+&2x\abs{\begin{matrix} x & -x \\ 2(y+z) & 2(y+z) \end{matrix}}=4(y-z)(y+z)\abs{\begin{matrix} 1 & 1 \\ y & z \end{matrix}}+4x^2(y-z)\abs{\begin{matrix} 1 & -1 \\ 1 & 1 \end{matrix}}=-8(y-z)^2(y+z)+8x^2(y+z)=8(y+z)(x^2-(y-z)^2\!).
\end{align*}
\end{document}

这会产生错误Incomplete \iffalse: all text was ignored after line 64,第 64 行是第二个\end{align*}。如果我align*第一次也使用(即上面\[…\]代码中 ),错误会转移到第 53 行(\end{matrix} \rsize\rdel),不完整的 if 是 和\ifx。如果我\[…\]第二次也使用,一切都会编译,我得到: 在此处输入图片描述 这正是我想要的,除了超满的 \hbox,这也是我想要 的原因align*。那么这里发生了什么?一切似乎都是align*的错,尽管 也gather*给出了问题。删除星星也不起作用。我如何让它编译?

答案1

您没有给出任何关于此代码的用途的迹象,它是 latex3、latex2e 和 tex 原语的非常奇怪的混合,所以我没有试图猜测它在做什么,但这个版本运行时没有错误。

\documentclass[a4paper]{report}
\usepackage{amsmath,xparse}
\makeatletter
\newif\ifinvd@lims\invd@limsfalse
\newif\iflr\lrfalse
\ExplSyntaxOn
\newcommand{\delim}[3][lr]{
\begingroup
\str_case:nnF { #1 }
    {
    { lr }{\def\lsize{\left}\def\rsize{\right}    \lrtrue}
}
{\typeout{#1}
}
\str_case:nnF { #2 }
    {
    { v }{\def\ldel{|}\def\rdel{|}}
}
{\typeout{#2}
}
    \ifinvd@lims
        \ldel #3 \rdel
    \else
        \lsize\ldel #3 \rsize\rdel
    \fi
\endgroup
}
%\ExplSyntaxOff
\newcommand{\abs}[1][lr]{\delim[#1]{v}}

\begin{document}
\[\abs{Jh(x,y,z)}=\begingroup
\str_case:nnF {lr}
    {
    { lr }{\def\lsize{\left}\def\rsize{\right}    \lrtrue}
}
{\typeout{}
}
\str_case:nnF {v}
    {
    { v }{\def\ldel{|}\def\rdel{|}}
}
{\typeout{}
}
    \ifinvd@lims
%        \ldel #3 \rdel
    \else
        \lsize\ldel \begin{matrix}
y-z & x & -x \\
0 & 2(y+z) & 2(y+z) \\
2z & 4y & 4z
\end{matrix} \rsize\rdel
    \fi
\endgroup

\]
\begin{align*}
{\abs{Jh(x,y,z)}}=&
{\abs{\begin{matrix}
y-z & x & -x \\
0 & 2(y+z) & 2(y+z) \\
2z & 4y & 4z
\end{matrix}}}=(y-z){\abs{\begin{matrix} 2(y+z) & 2(y+z) \\ 4y & 4z \end{matrix}}}+{} \\
{}+&2x
{\abs{\begin{matrix} x & -x \\ 2(y+z) & 2(y+z) \end{matrix}}}
=4(y-z)(y+z)
{\abs{\begin{matrix} 1 & 1 \\ y & z \end{matrix}}}
+4x^2(y-z)
{\abs{\begin{matrix} 1 & -1 \\ 1 & 1 \end{matrix}}}
=-8(y-z)^2(y+z)+8x^2(y+z)=8(y+z)(x^2-(y-z)^2\!).
\end{align*}
\end{document}

相关内容