我一直在考虑从 切换到Xy-pic
来TikZ
满足我所有的图表绘制需求,但对我来说非常重要的一个功能是能够创建 2 分类粘贴图表(就像 Wikipedia 上关于2-类别),就像我可以使用 的Xy-pic
“twocell”命令一样(顺便说一句,我发现处理起来非常麻烦)。我如何在 中执行这些操作TikZ
?只要有相关命令的参考或arXiv
有很好示例的论文,我就很高兴了。
答案1
正如之前所说,在 TikZ 中制作粘贴图表非常简单;我认为对于复杂的图表来说,这比在 xypic 中更容易,因为可以轻松地将 2 单元格箭头准确地放置在您想要的位置和正确的方向上。放置它们的一个有用技巧是重心坐标;然后,一旦您在 2 单元格箭头的中心获得了一个节点/坐标,您就可以使用调整来+(0,0.2)
到达起点和终点。
然而,一个重大问题是,据我所知,在当前 CVS 版本之前的 TikZ 版本中,没有很好的方法来绘制双轴箭头,就像粘贴图表中用于 2 单元格的箭头一样。在 CVS 版本的 TikZ 中,您可以说\draw[double,-implies]
,但这不会为拥有较旧的“已发布”版本的 TikZ 的任何人(例如 arXiv 或期刊编辑)编译。出于这个原因,我个人不会从 xypic 切换到 TikZ 来粘贴图表,直到下一个版本的 TikZ 发布并且至少变得更加广泛可用。
答案2
对于这样的粘贴图2-类别,您可以使用弯曲箭头和中间坐标进行定位。我建议
- 为尽可能多的元素定义样式,以便于使用
- 为重复使用的操作定义宏
下面是我这样做的一个例子。在这里,它最终变得非常简单\connect{node1}{node2}
:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows}
\newcommand{\connect}[2]{%
\draw[-angle 60] (#1) to [above] coordinate[midway] (#1#2+) (#2) ;
\draw[-angle 60] (#1) to [below] coordinate[midway] (#1#2-) (#2);
\draw (#1) to coordinate[midway] (#1#2=) (#2);
\draw[double shafted] (#1#2+) -- (#1#2=);
\draw[double shafted] (#1#2-) -- (#1#2=);
}
\begin{document}
\begin{tikzpicture}[%
every node/.style={circle,inner sep=2pt,fill},
node distance=5em,
above/.style={bend left=70,looseness=2},
below/.style={bend right=70,looseness=2},
double shafted/.style={-implies,double,double equal sign distance,
shorten >=2pt, shorten <=3pt}]
\node (a) {};
\node[right of = a] (b) {};
\node[right of = b] (c) {};
\connect{a}{b}
\connect{b}{c}
\end{tikzpicture}
\end{document}