处理 ams 对齐数学环境的主体(添加对齐字符)

处理 ams 对齐数学环境的主体(添加对齐字符)

我想定义一个align*环境变体,将每列在左侧对齐,并且在列之间的间距中不包含任何额外的内容。

考虑以下 MWE

\documentclass{amsart}
\begin{document}
Current output with given input:
\begin{align*}
a1&a2&a3=b3=c3&a4\\
b1&b2=a2&b3=c3&b4\\
c1&c2=b2=a2&c3&c4
\end{align*}
Desired output:
\begin{align*}
&a1&&a2&&a3=b3=c3&&a4\\
&b1&&b2=a2&&b3=c3&&b4\\
&c1&&c2=b2=a2&&c3&&c4
\end{align*}
\end{document}

我希望得到下面的结果和上面的标记。可以看出,我们需要做的就是

  • 处理每一行
  • 在每行开头添加一个“&”字符
  • 根据&字符将每一行拆分为单元格
  • 在每个单元格末尾添加一个“&&”字符串。

xparse \SplitList这是我使用和进行的尝试\ProcessList。请参阅下面的评论

\documentclass{amsart}
\usepackage{xparse}

\NewDocumentCommand { \myalrow } { >{\SplitList{,}} m}
{
  & \ProcessList{#1}{\myalcell} \\
}

\NewDocumentCommand { \myalcell } {m}
{ #1 &&  }

\NewDocumentEnvironment { myale } { >{\SplitList{\\}} b }
{
  \myenv{align*}{\ProcessList{#1}{\myalrow}}
    
}{}

\NewDocumentCommand { \myenv } { mm }
{
  \begin{#1}
  #2
  \end{#1}
}{}


\NewDocumentCommand { \myalc } { >{\SplitList{\\}} m }
{
  \myenv{align*}{\ProcessList{#1}{\myalrow}}
}{}




\begin{document}

\myalc{a1,a2,a3=b3=c3,a4\\
b1,b2=a2,b3=c3,b4\\
c1,c2=b2=a2,c3,c4}

\begin{myale}
a1,a2,a3=b3=c3,a4\\
b1,b2=a2,b3=c3,b4\\
c1,c2=b2=a2,c3,c4
\end{myale}


如果我将块定义为环境和命令,它都可以工作。此外,根据 AMS 技术说明https://texdoc.org/serve/technote/0我必须定义一个辅助命令\myenv,用环境包围输出。如果\myenv我不应用,而是用

\begin{align*}
...
\end{align*}

什么都不起作用!大量错误!!!

此解决方案的唯一缺点是我必须在 上分离,。我想在 上拆分&。但是这会出现错误:

\documentclass{amsart}
\usepackage{xparse}

\NewDocumentCommand { \myalrow } { >{\SplitList{&}} m}
{
  & \ProcessList{#1}{\myalcell} \\
}

\NewDocumentCommand { \myalcell } {m}
{ #1 &&  }

\NewDocumentEnvironment { myale } { >{\SplitList{\\}} b }
{
  \myenv{align*}{\ProcessList{#1}{\myalrow}}
    
}{}

\NewDocumentCommand { \myenv } { mm }
{
  \begin{#1}
  #2
  \end{#1}
}{}


\begin{document}
\begin{myale}
1+1=2\\
2+2=4
\end{myale}
\end{document}

错误如下:

./aligned-compat2.tex:30: Argument of \token_if_cs:NTF has an extra }.
<inserted text> 
                \par 
l.30 \end
         {myale}
Runaway argument?
./aligned-compat2.tex:30: Paragraph ended before \token_if_cs:NTF was complete.
<to be read again> 
                   \par 
l.30 \end
         {myale}
./aligned-compat2.tex:30: Missing $ inserted.
<inserted text> 
                $
l.30 \end
         {myale}
./aligned-compat2.tex:30: Missing } inserted.
<inserted text> 
                }
l.30 \end
         {myale}
./aligned-compat2.tex:30: Extra }, or forgotten $.
<recently read> }
                 
l.30 \end
         {myale}
./aligned-compat2.tex:30: Missing $ inserted.
<inserted text> 
                $
l.30 \end
         {myale}

./aligned-compat2.tex:30: Package amsmath Error: Erroneous nesting of equation structures;
(amsmath)                trying to recover with `aligned'.

并且错误仍以类似的精神继续存在。

&请注意,即使输入中没有符号,也会出现错误。

此外,我尝试过并且\SplitList通常允许在上进行拆分&

缺少的部分是什么?

相关内容