XY-pic:如何获得长度不同的对称弯曲箭头?

XY-pic:如何获得长度不同的对称弯曲箭头?

我正在使用 XY-pic 绘制一个带有双曲线箭头的简单图形(xyguide 中练习 5 的简单版本)。看来,当条目的长度不同时,曲线箭头会变得不对称。以下示例显示了这个问题:在第一行中,曲线箭头是对称的(因为条目的长度相同);在第二行中,曲线箭头是不对称的。

\documentclass{article}
\usepackage[all]{xy}
\begin{document}
\xymatrix{%
X\ar@/^/@{->}[rr]&&X\ar@/^/@{->}[ll]\\
XXXXX\ar@/^/@{->}[rr]&&X\ar@/^/@{->}[ll]
}
\end{document}

有没有办法使弯曲的箭头对称?

答案1

\phantom 可能是一个快速修复:

\documentclass{article}
\usepackage[all]{xy}
\begin{document}
\xymatrix{%
{X}\ar@/^/@{->}[rr]&&{X}\ar@/^/@{->}[ll]\\
{XXXXX}\ar@/^/@{->}[rr]&&{X\phantom{XXXX}}\ar@/^/@{->}[ll]
}
\end{document}

输出:

在此处输入图片描述

正如您所见,它没有居中。

答案2

这不是一个 Xy-pic 答案,而是一个tikz-cd表明解决这个问题相当容易的答案。

\documentclass{article}
\usepackage{tikz-cd}

\begin{document}

\begin{tikzcd}[column sep=huge]
  X \arrow[r,bend left=12] & X \arrow[l,bend left=12]
  \\
  XXXXX
  \arrow[
    r,
    bend left=12,
    start anchor={[yshift=.5ex]east},
    end anchor={[yshift=.5ex]west},
  ]
  &
  X
  \arrow[
    l,
    bend left=12,
    start anchor={[yshift=-.5ex]west},
    end anchor={[yshift=-.5ex]east},
  ]
\end{tikzcd}

\end{document}

在此处输入图片描述

答案3

以下是我的想法:

\xymatrix{%
X\ar@/^/@{->}@<.5ex>[]+R;[rr]+L&&X\ar@/^/@{->}@<.5ex>[]+L;[ll]+R \\
XXXXX\ar@/^/@{->}@<.5ex>[]+R;[rr]+L&&X\ar@/^/@{->}@<.5ex>[]+L;[ll]+R
}

关键是将每个锚点锚定在源节点和目标节点(或)的右侧( []+R;)或左侧( ) 。然后,为了防止两个箭头击中完全相同的点,将它们稍微偏移一点()。[]+L;[rr]+L[ll]+R@<.5ex>

相关内容