我在排版的一组“集合”中无法获得所需的对齐行为。我有一堆集合定义,形式如下
$$U = \{\text{$x$ $|$ $x$ satisfies some condition}\}$$
当然,我希望等号对齐,这在环境中很容易做到align*
。
问题是,对于某些集合,“某些条件”需要几行来陈述。我希望这些行在符号后对齐|
。当然,如果我只需要定义一个集合,那么我可以用环境做之前的事情align*
。
但是,我想在同一组方程中实现上述两种行为。我该怎么做呢?
编辑:看到下面 frabjous 的回答后,我意识到我没有强调(甚至没有提到)一个关键困难。我的集合定义中的U
和x
实际上是具有不同长度的表达式,因此每个集合定义中的第二个对齐点都不同。这使我无法使用数组环境。例如,我可以有类似以下内容:
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}
您也有可能确实应该使用案例环境来进行条件定义。
注意:您不应将其用于$$ ... $$
显示数学。它已过时。有关进一步说明,请参阅禁忌。