用什么方法才能画出漂亮的波浪箭头呢?
到目前为止,我尝试了以下内容。我使用xy-pic
包,在那里我使用@{~>}
箭头的定义。
我编写的代码如下:
\begin{figure}
\centering
\mbox{
\xygraph{
!{<0cm,0cm>;<1cm,0cm>:<0cm,1cm>::}
!{(0,0) }*+{\bullet_{x}}="x"
!{(2,0) }*+{\bullet_{v''}}="v"
!{(4,0) }*+{\bullet_{y}}="y"
!{(2,1) }*+{\bullet_{u}}="u"
!{(2,-2) }*+{\bullet_{z}}="z"
"x":@{~>}"v"
"v":@{~>}"y"
"y":@/_/@{~>}"u"
"u":"v"
"v":@{~>}"z"
}}
\end{figure}
结果如下:
我发现该图中存在以下问题:
- 在从 x 到 v'' 和从 v'' 到 y 的箭头中,最后一个“~”和结尾的“>”的组合并不好。
- 每次“~”后,从 v'' 到 z 的箭头都会被切断
- 从 y 到 u 的箭头看起来很糟糕。
我正在寻找如何提高图形质量的技巧。谢谢。
答案1
默认箭头样式xypic
相当糟糕,箭头/提示样式可以通过字体系列和大小进行更改,如参考手册:第 10 节更多提示扩展:第 27 页和
\SelectTips{<family>}{<size>}
那些断掉的箭头和劣质的排版质量可以通过加载来改善
繁體PDFpdf
像这样的选项 包\usepackage[pdf]{xypic}
tikz-cd
最后,尽管您可能会考虑这项工作,但经过上述调整和输出的 MWE 改进版本如下。
\documentclass{article}
\usepackage[all,pdf]{xy}
\begin{document}
\SelectTips{cm}{11}
\begin{figure}
\centering
\mbox{
\xygraph{
!{<0cm,0cm>;<1cm,0cm>:<0cm,1cm>::}
!{(0,0) }*+{\bullet_{x}}="x"
!{(2,0) }*+{\bullet_{v''}}="v"
!{(4,0) }*+{\bullet_{y}}="y"
!{(2,1) }*+{\bullet_{u}}="u"
!{(2,-2) }*+{\bullet_{z}}="z"
"x":@{~>}"v"
"v":@{~>}"y"
"y":@/_/@{~>}"u"
"u":"v"
"v":@{~>}"z"
}}
\end{figure}
\end{document}
答案2
我知道 OP 想要一个解决方案xy-pic
,但由于活动很少并且其他人可能会发现它们很有用,因此这里有一些使用tikz-cd
和普通的可能解决方案tikz
:
选项1:tikz-cd
\documentclass{standalone}
\usepackage{tikz-cd}
\usetikzlibrary{decorations.pathmorphing}
\begin{document}
\begin{tikzcd}[%
arrows={decorate, decoration={snake,segment length=1.64mm,amplitude=0.2mm}}
]
~ & & u \arrow[decorate=false]{d} & & \\
x \arrow{rr} & & v'' \arrow{rr} \arrow{dd} & & y \arrow[bend right]{llu} \\
& & & & \\
& & z & &
\end{tikzcd}
\end{document}
选项 2:tikz
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.pathmorphing}
\begin{document}
\begin{tikzpicture}[%
foo/.style={%
->,
shorten >=4pt,
shorten <=4pt,
decorate,
decoration={%
snake,
segment length=1.64mm,
amplitude=0.2mm,
pre length=4pt,
post length=4pt,
}
}
]
\coordinate (v'') at ( 0, 0);
\coordinate (u) at ( 0, 1);
\coordinate (x) at (-2, 0);
\coordinate (y) at ( 2, 0);
\coordinate (z) at ( 0,-2);
\foreach \pt in {u,v'',x,y,z} {
\fill (\pt) circle (2pt) node[below right] {$\pt$};
}
\draw[foo] (x) -- (v'');
\draw[foo] (v'') -- (y);
\draw[foo] (v'') -- (z);
\draw[foo] (y) to[in=-5,out=120] (u);
\draw[foo,decorate=false] (u) -- (v'');
\end{tikzpicture}
\end{document}