xy 中的箭头问题

xy 中的箭头问题

我有一些带有 xy 的代码

\xymatrix@C=1pc@R=2.5pc{
  *+[F-]{a}
  \ar@(ul,ur)[]
  \ar@<-1.5ex>@{<-}[d]
  \ar@<1.5ex>@{<.}[d]
  \save+<0pc,1.1pc>*{\txt{$s$}} \restore
  \\
  *+[F-]{b}
  \ar@<0.2ex>@{<--}'[u] +D * {\bullet} []
            \save+<1.2pc,1.1pc>*{\txt{$t$}} \restore
}

得到如下图像: 在此处输入图片描述

但是,两个虚线箭头靠得太近,难以辨认。我不知道该如何解决这个问题。我尝试添加@<0.2ex>以移动其中一个虚线箭头。但是这并不能解决问题,如果我增加该值,箭头就会断开。

我想要的是一支从 b 开始,向上移动到子弹上的 a 点,然后返回到 b 点的箭头。这可能吗?

答案1

您可以使用两个单箭头来代替弯曲,第一个没有箭头尖(“向上”部分),第二个有箭头尖。然后您可以单独定位它们,例如每个距离为 0.3。

梅威瑟:

\documentclass{article}
\usepackage[all]{xy}
\begin{document}
\xymatrix@C=1pc@R=2.5pc{
  *+[F-]{a}
  \ar@(ul,ur)[]
  \ar@<-1.5ex>@{<-}[d]
  \ar@<1.5ex>@{<.}[d]
  \ar@<0.3ex>@{--}[d]
  \save+<0pc,1.1pc>*{\txt{$s$}} \restore
  \\
  *+[F-]{b}
  \ar@<0.3ex>@{<--}[u] +D * {\bullet} []
            \save+<1.2pc,1.1pc>*{\txt{$t$}} \restore
}
\end{document}

结果:

在此处输入图片描述

答案2

这是同一张图,但tikzcd包/库

shift leftshift right可用于将箭头移到与它们的方向正交的位置。我将介绍键shl和,shr它们充当这些的分解版本。

TikZ 键/tikz/dot将实心圆放置在单元格底部。TikZ-CD 键/tikz/commutative diagrams/dot仅设置起始箭头尖端(此处为直径为的圆,直径为2pt,因此sep-1pt它不只是触及起点)。

我将 TikZ-CD 的默认箭头尖设置为更细更长的版本,因为原始的 Computer Modern 箭头尖相当宽,这要归功于库,bending它也可以bend用于路径。

第一个例子使用来自 TikZ 的原件loop above,默认情况下将标签放在线上方。

第二个示例使用la哎呀A上图显示了如何绘制一个更宽的环路,但将标签放在了里面。

代码

\documentclass[tikz]{standalone}
\usetikzlibrary{
  cd,     % https://ctan.org/pkg/tikz-cd
  bending % for bended arrow tips
}
\tikzset{
  la/.style={swap,out=125,in=55,loop,looseness=5},
  dot/.style={append after command={
    node[circle,fill,inner sep=+0pt,minimum size=+1.5pt,name=\tikzlastnode-dot]
      at(\tikzlastnode.south){}}}}
\tikzcdset{
  shl/.style={shift left={(#1)*.56ex}}, shl/.default=1,
  shr/.style={shift right={(#1)*.56ex}}, shr/.default=1,
  dot/.code=\pgfsetarrowsstart{Circle[sep=-1pt,length=2pt]},
  tikzcd to/.tip={cm to[width=3pt, length=4pt, bend]},
  vh/.style={to path={|-(\tikztotarget)\tikztonodes}},
  hv/.style={to path={-|(\tikztotarget)\tikztonodes}},
  from dot leftdown/.style={from dot, start anchor=south west,
    end anchor={[xshift=-.5ex]}, yslant=1, hv},
  from dot rightdown/.style={from dot, start anchor=south east,
    end anchor={[xshift=.5ex]}, yslant=-1, hv},
}
\makeatletter
\tikzcdset{
  from dot/.style={from/.expanded=\tikzcd@ar@start-dot},
  to dot/.style={to/.expanded=\tikzcd@ar@target-dot}}
\makeatother
\begin{document}
\begin{tikzcd}[cells={nodes=draw}]
a \ar[loop above, "s"]
 \dar[dash, dashed, shl]
 \dar[dot,  dashed, shr] \\
b \uar[shl=2]
  \uar[shr=2, densely dotted, swap, "t" near start]
\end{tikzcd}

\begin{tikzcd}[cells={nodes=draw}]
|[dot]| a \ar[la, "s"]
         \dar[dashrightarrow, from dot leftdown]
         \dar[dash, dashed, from dot rightdown]
         \\
b \uar[shl=2]
  \uar[shr=2, densely dotted, swap, "t" near start]
\end{tikzcd}
\end{document}

输出

在此处输入图片描述 在此处输入图片描述

相关内容