多线方程内的复杂对齐

多线方程内的复杂对齐

我在排版的一组“集合”中无法获得所需的对齐行为。我有一堆集合定义,形式如下

$$U = \{\text{$x$ $|$ $x$ satisfies some condition}\}$$

当然,我希望等号对齐,这在环境中很容易做到align*

问题是,对于某些集合,“某些条件”需要几行来陈述。我希望这些行在符号后对齐|。当然,如果我只需要定义一个集合,那么我可以用环境做之前的事情align*

但是,我想在同一组方程中实现上述两种行为。我该怎么做呢?

编辑:看到下面 frabjous 的回答后,我意识到我没有强调(甚至没有提到)一个关键困难。我的集合定义中的Ux实际上是具有不同长度的表达式,因此每个集合定义中的第二个对齐点都不同。这使我无法使用数组环境。例如,我可以有类似以下内容:


X = {(p,q) | p=q+7 以及其他一行无法容纳的长内容}

Y(1) = {x | x 为素数}

Z' = {(a,b,c) | 变量 a、b 和 c 满足一个条件,该条件
太长,一行写不完}。

抱歉,上面没有使用 tex,但我认为它清楚地表明了正在发生的事情。

谢谢你的帮助。

编辑 2:感谢 Antal SZ 的精彩回答,我能够创建一个完全符合我要求的宏。如果有人想要同样的行为,这里就是。

\newcommand\Set[3]{\ensuremath{\{\text{#1 $|$ \parbox[t]{\widthof{#3}}{#2\}}}}}

你可以用 3 个参数来调用它。要获得一个集合 {x|P},第一个参数应该是 x,第二个参数是 P(其中包含换行符),第三个参数是条件 P 中最长的行。这与 兼容align*,因此你可以执行以下操作

\begin{align*}
A &= \Set{x}{P}{Q}\\
B &= \Set{y}{R}{S}
\end{align*}

并且可以正确排版。

答案1

我会在alignat*环境中执行此操作,但只需将文本放在 parbox 中即可。这样,您只需对齐每个等号和竖线即可;换行符将在任何情况下将文本留在竖线后面。这可行,但不幸的是有点复杂。排版集合理解(使用 etex)的最佳方法是使用\left\{ x \;\middle|\; \phi \right\}1,2之类的东西,但显然您不能将 an 放在&a\left和 a之间\right。不过,手动缩放是可行的,它给出了以下解决方案:

\newcommand{\pctext}[2]{\text{\parbox{#1}{\centering #2}}}
\begin{alignat*}{2}
  X    &= \biggl\{(p,q)   &&\;\bigg|\; \pctext{1.5in}{$p=q+7$ and something else
                                                      very long}\biggr\} \\
  Y(1) &= \{x             &&\;|\;      \pctext{1.5in}{$x$ is prime}\} \\
  Z'   &= \Biggl\{(a,b,c) &&\;\Bigg|\; \pctext{1.5in}{the variables $a$, $b$,
                                                      and $c$ satisfy a
                                                      condition that is too long
                                                      for one line}\Biggr\} \\
\end{alignat*}

输出结果如下:

乘以对齐集合理解。

如您所见,这确实有效,尽管我认为这并不理想。由于括号大小不同,存在一些间距问题(我不确定如何修复,甚至不知道最好的解决方法)。而且代码有点混乱;人们可能可以编写一个宏来抽象一些样板,但&用和朋友括在宏中align往往会有问题。


1:实际上,我通常使用支架包来写\Set{x | \phi},但它在底层使用\left\right(如果可以的话)。\middle

2:由于这里假设是|分隔符,因此它没有间隔开,因此我们使用\;s 来获得正确的间距。如果我们使用诸如 之类的关系\mid,我们会得到相同的(我认为)间距,但我们不能得到\middle它。

答案2

您可以使用数组环境(或者可能是 alignat)。例如:

 \documentclass{article}
 \usepackage{amsmath}
 \begin{document}
 \[
 \begin{array}{r@{\,}l@{\,}l}
 U &= x \mid &x \text{ satisfies some condition that}\\ 
   &         &\text{takes a long long time to state}\\
 V &= y \mid &y \text{ satisfies something else}
 \end{array}
 \]
 \end{document}

您也有可能确实应该使用案例环境来进行条件定义。

注意:您不应将其用于$$ ... $$显示数学。它已过时。有关进一步说明,请参阅禁忌

相关内容