在大多数情况下,tikz-cd
似乎是 的不错替代品xymatrix
。但是,我错过了这个2cell
选项。是否有标准替代品,还是我必须自己动手?
例如,下面是我经常使用xy
包编写的内容:
\usepackage[all,2cell]{xy}
\UseAllTwocells
$\xymatrix{
A \ar[r] \ar[d]
\drtwocell\omit
& B \ar[d] \\ C \ar[r] & D
}$
到目前为止我能想到的最好的替代方案tikz-cd
是更加冗长的方案:
\usepackage{tikz-cd}
\begin{tikzcd}
A \ar[r] \ar[d]
\ar[from=r,to=d,phantom,""{name=1,near start},""{name=2,near end}]
\ar[Rightarrow,from=1,to=2]
& B \ar[d] \\ C \ar[r] & D
\end{tikzcd}
当然我可以定义自己的宏来执行此操作;我并不是在寻找本质上可以做到这一点的答案。我只是惊讶于tikz-cd
默认情况下没有这样的功能;有没有标准的方法来做到这一点?
答案1
答案2
您还可以使用以下方法轻松获得该图表pstricks
:
\documentclass[a4paper, 12pt]{article}
\usepackage{pst-node, auto-pst-pdf}
\begin{document}
$ \begin{psmatrix} [rowsep=0.9cm, colsep=1.2cm]
A & B\\
C & D%
\ncline[linestyle=none]{2,1}{1,2}\ncput*[nrot=:U]{\Longleftarrow}
\psset{arrows=->, arrowinset=0.15, nodesepA=4pt, nodesepB=2pt}
\ncline{1,1}{1,2}\ncline{1,1}{2,1}
\ncline{1,2}{2,2}\ncline{2,1}{2,2}
\end{psmatrix} $%
\end{document}
答案3
这实际上不是对所述问题的回答,因为它不是标准的。但是,由于 gernot 的回答提到了在 tikz-cd 中制作 2 单元格的另一种特殊方法,并且我在该答案的评论中提到,它与我在问题中的建议一样,存在使箭头拉伸过多的问题,我认为为了其他读者的利益,我会发布另一种制作不会拉伸的 2 单元格的方法,而且它的优点是可以放置在图中与 xymatrixtwocell
命令相同的位置。
\documentclass[border=2mm]{standalone}
\usepackage{tikz-cd}
\newcounter{nodemaker}
\setcounter{nodemaker}{0}
\def\twocell#1{%
\global\edef\mynodeone{twocell\arabic{nodemaker}}%
\stepcounter{nodemaker}%
\global\edef\mynodetwo{twocell\arabic{nodemaker}}%
\stepcounter{nodemaker}%
\ar[#1,phantom,shift left=3,""{name=\mynodeone}]%
\ar[#1,phantom,shift right=3,""'{name=\mynodetwo}]%
\ar[Rightarrow,from=\mynodeone,to=\mynodetwo]%
}
\begin{document}
\begin{tikzcd}
A \ar[r] \ar[d] \twocell{dr} & B \ar[d] \\
C \ar[r] & D
\end{tikzcd}
\end{document}
这对应于\omit
xymatrix\twocell
命令的版本,我使用该命令的次数比非版本多得多\omit
。如果您也想要弯曲的箭头,当然可以将它们放入其中\ar[#1,bend left] \ar[#1,bend right]
。