如何在水平对齐的数学环境中添加部分水平线

如何在水平对齐的数学环境中添加部分水平线

我在用 LaTeX 编写定理的证明时遇到了困难,我需要对一组不等式求和,然后用这个和继续证明。

我遇到的问题是我想像下图一样以视觉方式介绍这一步:

期望的最终输出

但我无法得到那条水平线。在这张图片中,我通过使用图像编辑器编辑 LaTeX 输出来添加它。

我正在使用align*提供的环境amsmath

有没有什么办法可以使用水平对齐的数学环境(如)来做我想做的事情align*

答案1

答案\tleq有一个小缺点,即必须手动找到的值。这个答案填补了这个空白。

软件包amsmath处理其方程两次。在第一次运行中,测量宽度。\ifmeasure@在此测量阶段,开关为真。在第二次运行中,方程实际上是排版的。例如,现在可以根据第一次运行测量的宽度amsmath在必要时移动方程编号。

环境还alignat*存储单元格的宽度并计算列的最大宽度。

测量阶段结束后,列的宽度可在宏 中使用\maxcolumn@width。这些值以 为前缀\or,以方便使用\ifcase,例如:

\or 23.1945pt \or 25.221pt \or 10.00002pt \or 12.77773pt \or 54.77959pt \or 62.81717pt \or 74.90263pt \or 0.0pt \or 0.0pt

计数寄存器\column@保存当前的列号。

以下示例定义了\tline使用这些数据绘制一条与当前列宽度相同的线的宏。在右对齐的列中,它位于单元格内容之后,在左对齐的列中,它\tline应位于单元格的开始处。

\documentclass{article}
\usepackage{amsmath}

\makeatletter
\newcommand*{\tline}{%
  \ifmeasuring@
    % first measuring run
  \else
    % second run
    % \typeout{\meaning\maxcolumn@widths}% debug info
    \ifodd\column@
      \expandafter\rlap
    \else
      \expandafter\llap
    \fi
    {% 
      \vrule height-1ex depth \dimexpr1ex+.4pt\relax width
      \ifcase\numexpr\column@+1\expandafter\relax
      \maxcolumn@widths
      \fi
    }%
  \fi
}
\makeatother

\begin{document}

\begin{alignat*}{4}
a^1 x^\star &\leq b_1 &\quad& \Rightarrow & \delta_1 a^1 x^\star &\leq
\delta_1 b_1 \\
a^2 x^\star &\leq b_2 &&      \Rightarrow & \delta_2 a^2 x^\star &\leq
\delta_2 b_2 \\[-4.5pt]
        &\;\;\vdots   &&  \;\;\vdots      &                  &\;\;\vdots \\
a^m x^\star &\leq b_m &&      \Rightarrow & \delta_m a^m x^\star
\tline&\tline \leq\delta_m b_m \quad (+) \\
&&&& \sum_{1 \leq i \leq m} \delta_i a^i x^\star &\leq \delta_i b_i &
\quad\Rightarrow \delta^t A x^\star \leq \delta^t b
\end{alignat*}

\end{document}

结果

评论:

  • 上面的空间\vdots对我来说有点大,宏\vdots已经6pt在点的顶部添加了。因此我将其缩小了一点。

\cline以及alignat*更好的垂直居中点

  • 一个更简单的解决方案是\cline,它也可以在环境中工作alignat*,只是之前的空间需要进行一些调整。

  • \rvdotsegreg 的回答(参见 Qrrbrbirlbel 的评论)有点作弊,它将高度减少了1pt。下面的示例定义了\mvdots使用\vcenter而不是\vbox通过参与下降部来减少不对称性。

示例文件:

\documentclass{article}
\usepackage{amsmath}

\makeatletter
\DeclareRobustCommand{\mvdots}{%
  \vcenter{%
    \baselineskip4\p@\lineskiplimit\z@
    \hbox{.}\hbox{.}\hbox{.}%
  }%
}
\makeatother

\begin{document}

\begin{alignat*}{4}
a^1 x^\star &\leq b_1 &\quad& \Rightarrow & \delta_1 a^1 x^\star &\leq
\delta_1 b_1 \\
a^2 x^\star &\leq b_2 &&      \Rightarrow & \delta_2 a^2 x^\star &\leq
\delta_2 b_2 \\
        &\;\;\mvdots   &&  \;\;\mvdots      &                  &\;\;\mvdots \\
a^m x^\star &\leq b_m &&      \Rightarrow & \delta_m a^m x^\star
& \leq\delta_m b_m \quad (+) \\[-2ex]
\cline{5-6}
&&&&\sum_{1 \leq i \leq m} \delta_i a^i x^\star &\leq \delta_i b_i &
\quad\Rightarrow \delta^t A x^\star \leq \delta^t b
\end{alignat*}

\end{document}

结果

答案2

如果您不介意做一些眼部测量,这里有一个alignat基于的解决方案:

\documentclass{article}
\usepackage{amsmath}

\newcommand{\tleq}[2]{\mathrel{
  \llap{\vrule height-1ex depth \dimexpr1ex+0.4pt\relax width #1}
  \rlap{\vrule height-1ex depth \dimexpr1ex+0.4pt\relax width #2}
  {\leq}}
}


\begin{document}

\begin{alignat*}{4}
a^1 x^\star &\leq b_1 &\quad& \Rightarrow & \delta_1 a^1 x^\star &\leq \delta_1 b_1 \\
a^2 x^\star &\leq b_2 &&      \Rightarrow & \delta_2 a^2 x^\star &\leq \delta_2 b_2 \\
        &\;\;\vdots   &&  \;\;\vdots      &                  &\;\;\vdots \\
a^m x^\star &\leq b_m &&      \Rightarrow & \delta_m a^m x^\star
&\tleq{5.7em}{6.2em} \delta_m b_m \quad (+) \\
&&&& \sum_{1 \leq i \leq m} \delta_i a^i x^\star &\leq \delta_i b_i &
\quad\Rightarrow \delta^t A x^\star \leq \delta^t b
\end{alignat*}

\end{document}

我将关系符号(左边缘)作为绘制规则的起点。这被称为\tleq绘制规则的左长度和右长度,并将这些参数作为参数。

在此处输入图片描述

答案3

环境amsmath等都align建立在 TeX 的原始基础之上\halign\halign您可以通过 span 命令跨越多列\multispan,例如\multispan5对于5列:

示例输出

\documentclass{article}

\usepackage{mathtools,amssymb}

\begin{document}

\begin{alignat*}{4}
  a^1 x^\star &\leqslant b_1 &\quad
    & \implies & \delta_1 a^1 x^\star &\leqslant \delta_1 b_1 \\
  a^2 x^\star &\leqslant b_2 &
    & \implies & \delta_2 a^2 x^\star &\leqslant \delta_2 b_2 \\
  &\vdotswithin{\leqslant}   &
    &\vdotswithin{\implies} & &\vdotswithin{\leqslant} \\
  a^m x^\star &\leqslant b_m &
    & \implies & \delta_m a^m x^\star & \leqslant\delta_m b_m
    \quad (+) \\[-1ex]
  &&
    && \multispan2{\hrulefill} &  \\[-1ex]
  &&
    && \sum_{1 \leqslant i \leqslant m} \delta_i a^i x^\star &\leqslant \delta_i b_i
  & \quad\implies\quad& \delta^t A x^\star \leqslant \delta^t b
\end{alignat*}

\end{document}

因此,该规则是由 产生的,\multispan2{\hrulefill}其周围的垂直间距通过调整而减少\\[...]

上述代码中还需要注意的其他事项

  • mathtools\vdotswithin用于将垂直点放置在关系下的命令
  • \implies对于蕴涵符号
  • \leqslant而不是\leq为了更好的不平等。

答案4

下面使用普通方法array来获得所需的输出:

在此处输入图片描述

\documentclass{article}
\usepackage{array}% http://ctan.org/pkg/array
\begin{document}

\[
  \renewcommand{\arraystretch}{1.2}
  \begin{array}{r@{}>{{}}l@{}>{\quad}c<{\quad}@{}r@{}>{{}}l@{}>{\quad}c<{\quad}@{}l}
    a^1 x^\star &\leq b_1 & \Rightarrow & \delta_1 a^1 x^\star &\leq \delta_1 b_1 \\
    a^2 x^\star &\leq b_2 & \Rightarrow & \delta_2 a^2 x^\star &\leq \delta_2 b_2 \\
    \vdots & & & \vdots \\
    a^m x^\star &\leq b_m & \Rightarrow & \delta_m a^m x^\star &\leq \delta_m b_m \quad (+) \\
    \cline{4-5}
    &&& \displaystyle \sum_{1 \leq i \leq m} \delta_i a^i x^\star &\leq \delta_i b_i & 
      \Rightarrow & \delta^t A x^\star \leq \delta^t b
  \end{array}
\]

\end{document}

上面提供的界面与amsmath正在align使用<LHS> &<rel> <RHS>界面。

如果要进行更多垂直调整,我建议使用 struts\rule{0pt}{<height>}并尝试不同的值<height>。例如,在 -line\rule{0pt}{1.2\normalbaselineskip}内插入\sum可提供合适的填充:

在此处输入图片描述

您可以在以下位置找到更多信息表格中的列和行填充

相关内容