重新定义换行符(双反斜杠)以适应对齐环境

重新定义换行符(双反斜杠)以适应对齐环境

我正在尝试弄清楚是否有可能在 amsmath 的 align 环境中(本地)重新定义 \\(双反斜杠)。一方面,我希望能够动态插入额外的列,另一方面,我希望操纵间距。这是一个不起作用的示例:

\documentclass{article}
\usepackage{amsmath}

\begin{document}

\begin{align*}
\renewcommand{\\}{& x \\[1cm]}%
1  \\
2  \\
3
\end{align*}

\end{document}

调整后的 \\ 在第一行处于活动状态,但之后似乎被重置,因此输出为

1x


2
3

在第一行之后再次重新定义该命令会使其在第二行之后生效,但在第二行之后再次停止工作。

\documentclass{article}

\usepackage{amsmath}

\begin{document}

\begin{align*}
\renewcommand{\\}{& x \\[1cm]}%
1  \\ \renewcommand{\\}{& x \\[1cm]}%
2  \\
3  \\
4
\end{align*}

\end{document}

类似地,如果我首先存储原始的 \\ 并在重新定义中使用它

\documentclass{article}

\usepackage{amsmath}

\begin{document}

\let\mylb\\
\begin{align*}
\renewcommand{\\}{& x \mylb[1cm]}%
1  \\ 
2  \\
3  \\
4
\end{align*}

\end{document}

结果并不像我所希望的那样,因为这似乎只是吞噬了换行符:

1x2 
3
4

有什么办法可以实现我在这里尝试的目标吗?

答案1

环境align(带或不带星号)通过表(TeX 基元)内部实现\halign。每个单元格位于一个组内。因此单元格之后的局部定义会丢失。

此外,我也不想\\通过全局定义来搞乱。方程式也可能出现在其他环境(centerflushleft、...)中,这些环境也会\\进行局部重新定义。全局重新定义会破坏此类环境之后重新建立的先前含义。

以下示例通过使用不同的命令名称解决了该问题。全局重新定义在新行开始之前\NL完成。\noalign

\documentclass{article}
\usepackage{amsmath}

\begin{document}

\gdef\NL{\\}
\begin{align*}
  a\NL
  b\NL
  \noalign{\gdef\NL{& x \\[1cm]}}%
  1 \NL
  2 \NL
  3 \NL
  \noalign{\gdef\NL{\\}}%
  c \NL
  d
\end{align*}

\end{document}

结果

答案2

只是为了完整性。Heiko 指向 halign 的指针可以实现我想要的效果。以下是简短的代码片段。

\documentclass{article}

\usepackage{amsmath}

\begin{document}

\begingroup
\let\myhalign\halign
\def\halign{%
\let\mylb\\
\renewcommand{\\}{& x \mylb[1cm]}
\myhalign
}
\begin{align*}
1  \\ 
2  \\
3
\end{align*}
\endgroup

\begin{align*}
1  \\ 
2  \\
3
\end{align*}

\end{document}

在这里,我可以重新定义第一个对齐的 \\,而无需更改其他对齐。上面的输出是:

1x


2x


3



1
2
3

相关内容