排版长正合序列

排版长正合序列

我正在尝试排版 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*}

结果如下:

mv1

我想将最后一行的第一个箭头正确地对齐到第一行的倒数第二个箭头下方,并将最后一行与第二行合并,使其看起来像这样(使用图像编辑器制作的图像):

mv2

我该怎么做?

答案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 sepcolumn 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是列号。

相关内容