如何将复杂的对齐拆分为多个列?

如何将复杂的对齐拆分为多个列?

我的文档包含多个递归定义。为了提高可读性,我将这些定义拆分为多个(通常是两个)列。为了获得更准确的对齐,我使用数组。因此,多列不起作用。我目前的解决方法如下:

\documentclass{article}

\usepackage{amsmath}

\newcommand{\restrict}[1]{_{\geq #1}}

\begin{document}
  ...

  \noindent
  \begin{minipage}[t]{.35 \textwidth}\vspace{0pt}%
    $\begin{array}{r@{}c@{}l@{\;}c@{\;}l}%
      (& y \in Y&)\restrict{x} & = & y \in Y \\%
      (& y \leq z &)\restrict{x} & = & y \leq z \\%
      (& a(y) &)\restrict{x} & = & a(y) \\%
      (&\neg \mu &)\restrict{x} & = & \neg \mu \restrict{x}%
    \end{array}$
    \vspace{0pt}
  \end{minipage}%
  \begin{minipage}[t]{.65 \textwidth}\vspace{0pt}
    $\begin{array}{r@{}c@{}l@{\;}c@{\;}l}
      (&\mu \lor \nu &)\restrict{x} & = & \mu\restrict{x} \lor \nu\restrict{x}\\
      (&\exists y. \mu &)\restrict{x} & = & \exists y.( x \leq y \land \mu\restrict{x})\\
      (&\exists Y.\mu &)\restrict{x} & = & \exists Y.(\forall y. (y \in Y \rightarrow x \leq y) \land \mu\restrict{x})\\
    \end{array}$
  \end{minipage}\vspace{\baselineskip}

...
\end{document}

在此处输入图片描述

有没有像 multicols 这样的自动化方法可以做到这一点?如果没有,那么该如何编写一个呢?特别是,在生成文本主体之前,如何评估文本主体的高度。在此基础上,如何评估文本主体的相应宽度,以计算列的相对宽度。从哪里开始呢?

编辑:我想要:

  1. 我的输出中的方程列
  2. 控制我的对齐中的间距和对齐
  3. 线性代码(即相应的下一个方程在下一行代码中)

答案1

像这样的对齐列是 的主要用例align。注意与 不同arrayalign它使用显示数学,并且需要更简单的标记,= 周围和列之间的空格是自动的。

在此处输入图片描述

\documentclass{article}

\usepackage{amsmath}

\newcommand{\restrict}[1]{_{\geq #1}}

\begin{document}
  ...

  \begin{align}
      ( y \in Y)\restrict{x} & =  y \in Y &
             (\mu \lor \nu )\restrict{x} & =  \mu\restrict{x} \lor \nu\restrict{x}\\
      ( y \leq z )\restrict{x} & =  y \leq z &
            (\exists y. \mu )\restrict{x} & =  \exists y.( x \leq y \land \mu\restrict{x})\\
      ( a(y) )\restrict{x} & =  a(y) &
             (\exists Y.\mu )\restrict{x} & =  \exists Y.(\forall y. (y \in Y \rightarrow x \leq y) \land \mu\restrict{x})\\
      (\neg \mu )\restrict{x} & =  \neg \mu \restrict{x}%
  \end{align}

...
\end{document}

如果您确实想要对齐(..)如此过度间隔较小的术语,则可以使用alignat*而不是align*,但我不会。

答案2

我的问题的部分解决方案是以下方法:

\documentclass{article}

\usepackage{amsmath}
\usepackage{multicol}

\newcommand{\restrict}[1]{_{\geq #1}}

\begin{document}
\begin{multicols}{2}
  \begingroup
  \allowdisplaybreaks
    \noindent
    \begin{align*}
          ( y \in Y)\restrict{x} & =  y \in Y \\%
          ( y \leq z )\restrict{x} & =  y \leq z \\%
          ( a(y) )\restrict{x} & =  a(y) \\%
          (\neg \mu )\restrict{x} & =  \neg \mu \restrict{x}\\
          (\mu \lor \nu )\restrict{x} & =  \mu\restrict{x} \lor \nu\restrict{x}\\
          (\exists y. \mu )\restrict{x} & =  \exists y.( x \leq y \land \mu\restrict{x})\\
          (\exists Y.\mu )\restrict{x} & =  \exists Y.(\forall y. (y \in Y \rightarrow x \leq y) \land \mu\restrict{x})\\
    \end{align*}

  \endgroup
  
\end{multicols}
  
\end{document}

它仍然缺乏数组的功能,但您可以将比对拆分为多个列。然后,稍后添加一行,使用更多(或更少)列,或更改顺序,而无需更改比对中的每一行。

相关内容