我想定义一个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
通常允许在上进行拆分&
。
缺少的部分是什么?