请考虑以下示例:
\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 吸收environ
,LGS
就无法删除它们,因此您会得到一个虚假的对齐点。
\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}