tikz-cd 中的 2 个单元格

tikz-cd 中的 2 个单元格

在大多数情况下,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

这能满足你对简洁性的期望吗?

\documentclass[border=2mm]{standalone}
\usepackage{tikz-cd}
\tikzset{shorten <>/.style={shorten >=#1,shorten <=#1}}
\begin{document}
\begin{tikzcd}
   A \ar[r] \ar[d] & B \ar[d]\ar[ld,shorten <>=10pt,Rightarrow]
\\ C \ar[r]        & D
\end{tikzcd}
\end{document}

在此处输入图片描述

答案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}

在此处输入图片描述

这对应于\omitxymatrix\twocell命令的版本,我使用该命令的次数比非版本多得多\omit。如果您也想要弯曲的箭头,当然可以将它们放入其中\ar[#1,bend left] \ar[#1,bend right]

相关内容