
Привет, я пытаюсь нарисовать длинную точную последовательность и, что важно, с терминами, появляющимися по три. К сожалению, то, что получается, выглядит ужасно, есть ли у кого-нибудь идеи, как сделать это лучше? В частности, диагональные стрелки выглядят отвратительно, есть ли способы, возможно, согнуть их или сделать их более красивыми? Также в третьем ряду я ставил '...', чтобы закрыть термины между ними, но это выглядит плохо, и диагональные стрелки тогда не располагаются равномерно. Любые предложения были бы очень признательны :)
Я использую xy pic, вот мой код:
Наша относительно длинная точная последовательность задается формулой
\[
\xymatrix{
0 \ar[rr] && H^0(M, \Dd M) \ar[rr] && H^0(M) \ar[rr] && H^0(\Dd M) \ar[dllll] \\
&& H^1(M, \Dd M) \ar[rr] && H^1(M) \ar[rr] && H^1(\Dd M) \ar[dllll] \\
&& \cdots \ar[rr] && \cdots \ar[rr] && \cdots \ar[dllll] & \\
&& H^n(M, \Dd M) \ar[rr] && H^n(M) \ar[rr] && 0} \]
И вот как это выглядит
(Я использовал двойной интервал между столбцами, чтобы заполнить пространство страницы)
решение1
Вот вариант с использованием более современного и универсальногоtikz-cd
, на всякий случай, если вы захотите переключиться:
\documentclass{article}
\usepackage{tikz-cd}
\usepackage{calc}
\newcommand\Dd{\partial}
\tikzset{
Curved/.style={
rounded corners,to path={ -- ([xshift=2ex]\tikztostart.east)
|- (#1) [near end]\tikztonodes
-| ([xshift=-2ex]\tikztotarget.west)
-- (\tikztotarget)
}
}
}
\newcommand{\plhold}[1]{%
\makebox[\widthof{$#1$}]{$\vphantom{#1}{\cdots}$}%
}
\begin{document}
\begin{tikzcd}%[column sep=2cm]
0 \ar[r]
& H^0(M, \Dd M) \ar[r]
& H^0(M) \ar[r]\arrow[d, phantom, ""{coordinate, name=A}]
& H^0(\Dd M) \arrow[dll,Curved=A]
\\
& H^1(M, \Dd M) \ar[r]
& H^1(M) \ar[r] \arrow[d, phantom, ""{coordinate, name=B}]
& H^1(\Dd M) \arrow[dll,Curved=B]
\\
& \plhold{H^n(M, \Dd M)} \ar[r]
& \plhold{H^n(M)} \ar[r]\arrow[d, phantom, ""{coordinate, name=C}]
& \plhold{H^1(\Dd M)} \arrow[dll,Curved=C] &
\\
& H^n(M, \Dd M) \ar[r]
& H^n(M) \ar[r]
& 0
\end{tikzcd}
\end{document}
Обратите внимание, что использование column sep=<length>
you может иметь лучший контроль над разделением столбцов. Я оставил это закомментированным в моем примере кода, чтобы показать вам, как изменить это по своему вкусу.
Я бесстыдно позаимствовал \plhold
макрос изegreg's answer
.
решение2
Вы можете улучшить его, сделав так, чтобы точки занимали столько же горизонтального и вертикального пространства, сколько и заменяемые ими объекты; изгибание стрелок меня не привлекает.
\documentclass{article}
\usepackage{calc}
\usepackage[all,cmtip]{xy}
\newcommand{\Dd}{\partial}
\newcommand{\plhold}[1]{%
\makebox[\widthof{$#1$}]{$\vphantom{#1}{\cdots}$}%
}
\begin{document}
\[
\xymatrix@C+3em{
0 \ar[r]
& H^0(M, \Dd M) \ar[r] & H^0(M) \ar[r] & H^0(\Dd M) \ar[dll] \\
& H^1(M, \Dd M) \ar[r] & H^1(M) \ar[r] & H^1(\Dd M) \ar[dll] \\
& \plhold{H^1(M, \Dd M)} \ar[r] & \plhold{H^1(M)} \ar[r] & \plhold{H^1(\Dd M)} \ar[dll] \\
& H^n(M, \Dd M) \ar[r] & H^n(M) \ar[r] & 0
}
\]
\end{document}
Обратите внимание, что вы получаете лучший контроль над шириной, изменяя расстояние между столбцами, а не перепрыгивая через пустые столбцы.