我有一些带有 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 left
和shift 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}