我正在尝试排版 Mayer-Vietoris 序列(简洁 - 不包含箭头上方的地图名称)。目前,我只是使用 AMS 对齐环境和一堆\rightarrow
和\cdots
来\hphantom
水平对齐最后一行:
\begin{align*}
\cdots & \rightarrow H_{n}\left(A\cap B\right)\rightarrow H_{n}\left(A\right)\oplus H_{n}\left(B\right)\rightarrow H_{n}\left(X\right)\rightarrow \\
& \rightarrow H_{n-1}\left(A\cap B\right)\rightarrow\cdots \\
& \hphantom{\rightarrow H_{n}\left(A\cap B\right)\rightarrow H_{n}\left(A\right)\oplus H_{n}\left(B\right)}\cdots\rightarrow H_{0}\left(X\right)\rightarrow 0
\end{align*}
结果如下:
我想将最后一行的第一个箭头正确地对齐到第一行的倒数第二个箭头下方,并将最后一行与第二行合并,使其看起来像这样(使用图像编辑器制作的图像):
我该怎么做?
答案1
mathtools
以下是使用该包(它是的后继者)的可能解决方案amsmath
:
% arara: pdflatex
\documentclass{article}
\usepackage{mathtools}
\begin{document}
\begin{alignat*}{2}
\cdots &\rightarrow H_{n}(A\cap B)\rightarrow H_{n}(A)\oplus H_{n}(B) &&\rightarrow H_{n}(X)\rightarrow \\
&\rightarrow H_{n-1}(A\cap B)\rightarrow\cdots &&\mathllap{\cdots}\rightarrow H_{0}(X)\rightarrow 0
\end{alignat*}
\end{document}
简短解释一下:
我使用了alignat
带有两个对齐点的(按照您的要求)。首先,我尝试将推到\cdots
右侧,\hfill
但这在这里不起作用。您一定可以array
用这个技巧找到一些解决方案。
因此,我不得不在第二个对齐标记的右侧添加点,并将其宽度更改为零。该命令\mathllap
由提供mathtools
,并打破了框宽度,将其内容设置在左侧。
答案2
这是使用 的另一种解决方案tikz-cd
,我个人大多数时候都使用它来绘制此类图表:
\documentclass{article}
\usepackage{mathtools}
\usepackage{tikz-cd}
\begin{document}
\[
\begin{tikzcd}[arrows=to]
\cdots \rar & H_n(A \cap B) \rar & H_n(A) \oplus H_n(B) \rar & H_n(X) \rar & \hphantom{0}\\
\hphantom{\cdots} \rar
& H_{n-1}(A \cap B) \rar
& \makebox[\widthof{$H_n(A) \oplus H_n(B)$}][c]{$\cdots\hfill \cdots$} \rar
& H_0(X) \rar & 0
\end{tikzcd}
\]
\end{document}
输出:
此解决方案的优势在于 提供的可定制性tikz
。例如,您可以轻松
- 使用键
row sep
和column sep
- 添加颜色
- 为箭头添加标签并根据位置和方向自定义它们
答案3
您可以利用直接和符号并避免任何计算:
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{alignat*}{2}
\cdots & \to H_{n}(A\cap B)\to H_{n}(A) & {}\oplus H_{n}(B) & \to H_{n}(X)\to \\
& \to H_{n-1}(A\cap B)\to\cdots & \cdots & \to H_{0}(X)\to 0
\end{alignat*}
\end{document}
请注意,我删除了\left
和\right
,因为在这种情况下它们毫无意义。使用\to
代替\rightarrow
只是个人喜好(这样输入肯定更快)。
替代解决方案,如果没有合适的假对齐点,可以使用以下想法https://tex.stackexchange.com/a/209732/4427
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\newcommand{\Spread}[2]{%
\ifmeasuring@
#2%
\else
\makebox[\ifcase\expandafter #1\maxcolumn@widths\fi]{$\displaystyle#2$}%
\fi
}
\makeatother
\begin{document}
\begin{alignat*}{2}
\cdots \to {} & H_{n}(A\cap B)\to H_{n}(A) \oplus H_{n}(B) && \to H_{n}(X)\to \\
\to {} & \Spread{2}{H_{n-1}(A\cap B)\to\cdots\hfill\cdots} && \to H_{0}(X)\to 0
\end{alignat*}
\end{document}
第一个参数\Spread
是列号。