我在用 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*
,只是之前的空间需要进行一些调整。\rvdots
的egreg 的回答(参见 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
可提供合适的填充:
您可以在以下位置找到更多信息表格中的列和行填充。