如何在枚举环境中强制对齐“案例”括号?

如何在枚举环境中强制对齐“案例”括号?

我正在使用enumitemamsmath包来给出经典一阶逻辑的估值函数 $\nu$ 的递归定义。我设置的方式是,案例的括号没有对齐(由于案例括号前面的表达式长度不同)。

以下是 MWE:

\documentclass[12pt]{scrartcl}
\usepackage{enumitem}
\usepackage{amsmath,amssymb}

\begin{document}

\begin{enumerate}[noitemsep,label=\alph*)]

\item $\nu(A 
\wedge B) = \begin{cases}
1,&\text{if $\nu(A) = \nu(B) = 1$};\\
0,&\text{otherwise.}\end{cases}$
\item $\nu(A \vee B) = \begin{cases}
1,&\text{if $\nu(A) = 1$ or $\nu(B) = 1$};\\
0,&\text{otherwise.}\end{cases}$
\item $\nu(A \rightarrow B) = \begin{cases}
1,&\text{if $\nu(A) = 0$ or $\nu(B) = 1$};\\
0,&\text{otherwise.}\end{cases}$
\item $\nu(A \leftrightarrow B) = \begin{cases}
1,&\text{if $\nu(A) = \nu(B)$};\\
0,&\text{otherwise.}\end{cases}$
\item $\nu(\forall xA) = \begin{cases}
1,&\text{if for all $d \in D, \nu(A_x(c_d)) =1$;}\\
0,&\text{otherwise.}
\end{cases}$    
\item $\nu(\exists xA) = \begin{cases}
1,&\text{if for some $d \in D, \nu(A_x(c_d)) =1$;}\\
0,&\text{otherwise.}
\end{cases}$    
\end{enumerate}

\end{document}

我希望括号能够在页面上向下对齐,理想情况下不会在其他地方留下太多难看的间距。

答案1

来自的一个技巧mathmode(在我的版本(2.47)中,它位于第 113 页的第 65.1 节中):将最长的左侧保存在一个盒子中,然后将左侧输出到该长度的盒子中:

\documentclass[12pt]{scrartcl}
\usepackage{enumitem}
\usepackage{amsmath,amssymb}

\begin{document}
\newsavebox\lW
\sbox\lW{$\nu(A \leftrightarrow B)$}

\begin{enumerate}[noitemsep,label=\alph*)]

\item $\displaystyle\makebox[\wd\lW][r]{$\nu(A\wedge B)$} = \begin{cases}
1,&\text{if $\nu(A) = \nu(B) = 1$};\\
0,&\text{otherwise.}\end{cases}$
\item $\displaystyle\makebox[\wd\lW][r]{$\nu(A \vee B)$} = \begin{cases}
1,&\text{if $\nu(A) = 1$ or $\nu(B) = 1$};\\
0,&\text{otherwise.}\end{cases}$
\item $\displaystyle\makebox[\wd\lW][r]{$\nu(A \rightarrow B)$} = \begin{cases}
1,&\text{if $\nu(A) = 0$ or $\nu(B) = 1$};\\
0,&\text{otherwise.}\end{cases}$
\item $\displaystyle\makebox[\wd\lW][r]{$\nu(A \leftrightarrow B)$} = \begin{cases}
1,&\text{if $\nu(A) = \nu(B)$};\\
0,&\text{otherwise.}\end{cases}$
\item $\displaystyle\makebox[\wd\lW][r]{$\nu(\forall xA)$} = \begin{cases}
1,&\text{if for all $d \in D, \nu(A_x(c_d)) =1$;}\\
0,&\text{otherwise.}
\end{cases}$
\item $\displaystyle\makebox[\wd\lW][r]{$\nu(\exists xA)$} = \begin{cases}
1,&\text{if for some $d \in D, \nu(A_x(c_d)) =1$;}\\
0,&\text{otherwise.}
\end{cases}$
\end{enumerate}

\end{document}

输出

输出图像

答案2

我会使用 AMS 对齐而不是枚举列表。

在此处输入图片描述

\documentclass[12pt]{scrartcl}
\usepackage{enumitem}
\usepackage{amsmath,amssymb}

\begin{document}


\begin{tagsleft@true}
\renewcommand\theequation{\alph{equation}}
\begin{flalign}
\nu(A 
\wedge B) &= \begin{cases}
1,&\text{if $\nu(A) = \nu(B) = 1$};\\
0,&\text{otherwise.}\end{cases}\\
\nu(A \vee B) &= \begin{cases}
1,&\text{if $\nu(A) = 1$ or $\nu(B) = 1$};\\
0,&\text{otherwise.}\end{cases}\\
\nu(A \rightarrow B) &= \begin{cases}
1,&\text{if $\nu(A) = 0$ or $\nu(B) = 1$};\\
0,&\text{otherwise.}\end{cases}\\
\nu(A \leftrightarrow B) &= \begin{cases}
1,&\text{if $\nu(A) = \nu(B)$};\\
0,&\text{otherwise.}\end{cases}\\
\nu(\forall xA) &= \begin{cases}
1,&\text{if for all $d \in D, \nu(A_x(c_d)) =1$;}\\
0,&\text{otherwise.}
\end{cases}\\
\nu(\exists xA) &= \begin{cases}
1,&\text{if for some $d \in D, \nu(A_x(c_d)) =1$;}\\
0,&\text{otherwise.}
\end{cases}
\end{flalign}
\end{tagsleft@true}

\end{document}

答案3

另一种方法,其工作方式类似于amsmathalign环境,只是使用了\item

套餐

  • listliketab
  • mathtools对于cases*环境(不需要\text

  • \storestyleofextra[<options>]{<environ>}就像只是给环境\storestyleof一个可选参数一样。<options><environ>
  • \nextnum/重新定义\item产生枚举

环境

  • alignerate模拟左对齐align环境,带有\item

坏处

遗憾的是,\storestyleof/\storystyleofextra\storeliststyle{}不会保存枚举样式。尽管\alph*)可以很容易地模仿,如在\nextnum宏中看到的那样。

实现一个可选参数可能也很容易,alignerate就像这样label=\alph*),这个xstring包确实浮现在脑海中……

代码

\documentclass[12pt]{scrartcl}
\usepackage{enumitem}
\usepackage{mathtools,amssymb}
\usepackage{listliketab}
\newcounter{listliketablabel}
\newcommand*{\nextnum}{\addtocounter{listliketablabel}{1}\thelistliketablabel)}
\makeatletter
\newcommand*{\storestyleofextra}[2][]{%
    \begin{lrbox}{\llt@list@box}
        \noindent
        \begin{minipage}{\linewidth}
            \begin{#2}[#1]
            \item[] \storeliststyle{}
            \end{#2}
        \end{minipage}
    \end{lrbox}\ignorespacesafterend
}
\makeatother
\storestyleofextra[noitemsep,label=\alph*)]{enumerate}
\newenvironment{alignerate}{%
    \begin{listliketab}
        \setcounter{listliketablabel}{0}\renewcommand*{\thelistliketablabel}{\alph{listliketablabel}}
        \renewcommand*{\item}{\nextnum &}
    \begin{tabular}{L>{\(}r<{\)}@{}>{\({}}l<{\)}R}
}{
    \end{tabular}
    \end{listliketab}
}
\begin{document}
\begin{alignerate}
    \item \nu(A \wedge B) & = \begin{cases*} 1, & if $\nu(A) = \nu(B) = 1$; \\
                                             0, & otherwise.                \end{cases*}               \\
    \item \nu(A \vee B)   & = \begin{cases*} 1, & if $\nu(A) = 1$ or $\nu(B) = 1$; \\
                                             0, & otherwise.                       \end{cases*}        \\
    \item \nu(A \rightarrow B) & = \begin{cases*} 1, & if $\nu(A) = 0$ or $\nu(B) = 1$; \\
                                                  0, & otherwise.                       \end{cases*}   \\
    \item \nu(A \leftrightarrow B) & = \begin{cases*} 1, & if $\nu(A) = \nu(B)$; \\
                                                    0, & otherwise.            \end{cases*}          \\
    \item \nu(\forall xA) & = \begin{cases*} 1, & if for all $d \in D, \nu(A_x(c_d)) =1$; \\
                                             0, & otherwise.                              \end{cases*} \\
    \item \nu(\exists xA) & = \begin{cases*} 1, & if for some $d \in D, \nu(A_x(c_d)) =1$; \\
                                             0, & otherwise.                               \end{cases*} 
\end{alignerate}
\end{document}

输出

在此处输入图片描述

相关内容