如何跨越多个对齐列?

如何跨越多个对齐列?

我想指定两个非常相似的方程式,并使用环境将它们对齐到某些点alignat。到目前为止,我的代码如下:

\begin{alignat}{3} 
D_s &= \{ (s_1, s_2)\quad & \forall\ &s_1, s_2\neq s_1 \quad && 
\begin{array}{|l}
 G_{s_1} \cap G_{s_2} \neq \{\} \\
 s_1 \notin \mathbb{D}(s_2) \wedge s_2 \notin \mathbb{D}(s_1)
 \end{array} \}\\
D_p &= \{ (p_1, p_2) & \forall\ &p_1, p_2\neq p_1 && 
\begin{array}{|l}
 G_{p_1} \cap G_{p_2} \neq \{\} \\
 p_1 \notin \mathbb{D}(p_2) \wedge p_2 \notin \mathbb{D}(p_1)
 \end{array}\}
\end{alignat}

给出了以下方程式:

在此处输入图片描述

对齐效果很好。我只想增加外括号的大小,使其看起来更像这样:

在此处输入图片描述

\left\{但是,和似乎\right\}不能跨越多alignat列。如何更改上述代码,以使第一张图片与第二张图片中的大括号对齐?

答案1

\DeclarePairedDelimiter使用来自的命令mathtools和包的解决方案 eqparbox

\documentclass{article}
\usepackage{mathtools,amssymb}
\usepackage{eqparbox} 
\newcommand{\eqmathbox}[2][M]{\eqmakebox[#1]{$\displaystyle#2$}}

\DeclarePairedDelimiterX{\set}[1]\{\}{\setargs{#1}}
\NewDocumentCommand{\setargs}{>{\SplitArgument{1}{;}}m}
{\setargsaux#1}
\NewDocumentCommand{\setargsaux}{mm}
{\IfNoValueTF{#2}{#1}{\nonscript\,#1\nonscript\;\delimsize\vert\nonscript\:\allowbreak #2\nonscript\,}}

\begin{document}

\begin{align}
  D_s &= \set[\bigg]{\eqmathbox{(s_1, s_2)\quad \forall s_1, s_2\neq s_1};
\begin{aligned}
  &G_{s_1} \cap G_{s_2} \neq \{\} \\
  &s_1 \notin \mathbb{D}(s_2) \wedge s_2 \notin \mathbb{D}(s_1)
\end{aligned}}
\\[1.5ex]
D_p &= \set*{\eqmathbox{(p_1, p_2) \forall p_1, p_2\neq p_1} ;
    \begin{aligned}
      & G_{p_1} \cap G_{p_2} \neq \{\} \\
      & p_1 \notin \mathbb{D}(p_2) \wedge p_2 \notin \mathbb{D}(p_1)
    \end{aligned}}
\end{align}

\end{document} 

在此处输入图片描述

答案2

我将使用一个简单的align环境并使用\biggl\lbrace\biggm\vert\biggr\rbrace来创建“栅栏”符号。请注意,\biggm\vert在竖线的两边会自动插入一些空格(适合关系运算符)。

如果您希望内容以数学形式排版,则可以将array环境替换为环境。不过,对于当前的情况,这不会有什么区别。aligned\displaystyle\textstyle

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath,amssymb}
\begin{document}
\begin{align}
D_s &= \biggl\lbrace 
       (s_1, s_2)\quad \forall\ s_1, s_2\neq s_1 \,
       \biggm\vert
       \begin{array}{@{}l@{}}
          G_{s_1} \cap G_{s_2} \neq \emptyset \\
          s_1 \notin \mathbb{D}(s_2) \wedge s_2 \notin \mathbb{D}(s_1)
       \end{array} 
       \biggr\rbrace \\[1ex]
D_p &= \biggl\lbrace 
       (p_1, p_2) \quad\forall\ p_1, p_2\neq p_1 
       \biggm\vert
       \begin{array}{@{}l@{}}
          G_{p_1} \cap G_{p_2} \neq \emptyset \\
          p_1 \notin \mathbb{D}(p_2) \wedge p_2 \notin \mathbb{D}(p_1)
       \end{array}
       \biggr\rbrace
\end{align}
\end{document} 

附录回应 OP 的后续评论:由于建议的解决方案使用\biggl\biggm\biggr而不是\left\middle\right来调整栅栏符号的大小,因此确实可以将该方法与环境结合起来alignat,如下所示(没有发布屏幕截图,因为结果看起来与上面的非常相似):

\documentclass{article}
\usepackage{amsmath,amssymb}
\begin{document}
\begin{alignat}{4}
D_s &= \biggl\lbrace (s_1, s_2)\quad 
    &&\forall\ s_1, s_2\neq s_1 
    &&\biggm\vert
      \begin{array}{@{}l@{}}
          G_{s_1} \cap G_{s_2} \neq \emptyset \\
          s_1 \notin \mathbb{D}(s_2) \wedge s_2 \notin \mathbb{D}(s_1)
      \end{array} 
    &&\biggr\rbrace \\[1ex]
D_p &= \biggl\lbrace (p_1, p_2)  
    &&\forall\ p_1, p_2\neq p_1 
    &&\biggm\vert
      \begin{array}{@{}l@{}}
          G_{p_1} \cap G_{p_2} \neq \emptyset \\
          p_1 \notin \mathbb{D}(p_2) \wedge p_2 \notin \mathbb{D}(p_1)
      \end{array}
    &&\biggr\rbrace
\end{alignat}
\end{document}

相关内容