我的文档包含多个递归定义。为了提高可读性,我将这些定义拆分为多个(通常是两个)列。为了获得更准确的对齐,我使用数组。因此,多列不起作用。我目前的解决方法如下:
\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
像这样的对齐列是 的主要用例align
。注意与 不同array
,align
它使用显示数学,并且需要更简单的标记,= 周围和列之间的空格是自动的。
\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}
它仍然缺乏数组的功能,但您可以将比对拆分为多个列。然后,稍后添加一行,使用更多(或更少)列,或更改顺序,而无需更改比对中的每一行。