Есть ли у кого-нибудь идеи, как сделать эту коммутативную диаграмму более красивой?

Есть ли у кого-нибудь идеи, как сделать эту коммутативную диаграмму более красивой?

Привет, я пытаюсь нарисовать длинную точную последовательность и, что важно, с терминами, появляющимися по три. К сожалению, то, что получается, выглядит ужасно, есть ли у кого-нибудь идеи, как сделать это лучше? В частности, диагональные стрелки выглядят отвратительно, есть ли способы, возможно, согнуть их или сделать их более красивыми? Также в третьем ряду я ставил '...', чтобы закрыть термины между ними, но это выглядит плохо, и диагональные стрелки тогда не располагаются равномерно. Любые предложения были бы очень признательны :)

Я использую 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}

Обратите внимание, что вы получаете лучший контроль над шириной, изменяя расстояние между столбцами, а не перепрыгивая через пустые столбцы.

введите описание изображения здесь

Связанный контент