`\\` 在 tabstackengine 和 environ 中不会生成换行符

`\\` 在 tabstackengine 和 environ 中不会生成换行符

请考虑以下示例:

\documentclass{article}
\usepackage{amsmath}

\usepackage{tabstackengine}


\stackMath
\setstacktabbedgap{0.5em}
\setstackTAB{ }

\makeatletter
\robustify{\@normalcr} %globally robust
%avoids error but wrong output:
%\def\@parboxrestore{\@arrayparboxrestore\def\\{\protect\@normalcr}}
\makeatother
\usepackage{environ}

\begin{document}

\NewEnviron{LGS}{
  \begin{equation*}
    \tabbedCenterstack[r]{
      \BODY
    }
  \end{equation*}
}


\begin{LGS}
  -2x +  y + 3z = 10 + x \\
  x +  y +  z =  6 + 2z\\
  3 + 3y + 2z = y - 3z
\end{LGS}

\end{document}

它的输出是一行,即\\符号被忽略:

在此处输入图片描述

我怎样才能让它工作?

答案1

第一个问题:\tabstackengine必须在其参数中看到\\,因此必须\BODY在将其传递给宏之前进行扩展。

第二个问题:\tabstackengine知道\\在吸收其参数时忽略后面的空格,但是一旦它被 -based 吸收environLGS就无法删除它们,因此您会得到一个虚假的对齐点。

\documentclass{article}
\usepackage{amsmath}
\usepackage{tabstackengine}
\usepackage{environ}

\stackMath
\setstacktabbedgap{0.5em}
\setstackTAB{ }
\makeatletter
\robustify{\@normalcr} %globally robust
\makeatother
\NewEnviron{LGSo}{%
  \begin{equation*}
  \def\temp{\tabbedCenterstack[r]}
  \expandafter\temp\expandafter{\BODY}
  \end{equation*}
}
\newenvironment{LGS}{\endlinechar=-1 \LGSo}{\endLGSo}

\begin{document}

\begin{LGS}
-2x +  y + 3z = 10 + x \\
x +  y +  z =  6 + 2z\\
3 + 3y + 2z = y - 3z
\end{LGS}

\end{document}

在此处输入图片描述

相关内容