tikz-cd 图中箭头长度

tikz-cd 图中箭头长度

有没有一种简单的方法可以修改 tikz-cd 图中两个节点之间的箭头的长度(同时保持节点之间的距离固定)?

例如,图中的对角箭头

\begin{tikzcd}[column sep = large, row sep = large]
    * \dar \rar &* \dar \dlar[Rightarrow]{}    \\ 
    * \rar &*
\end{tikzcd}

如果长度减半,看起来会更符合我的需要(它是图中两条路径之间的箭头,而不是节点之间的箭头)。这可以通过更改起始和终止锚点坐标来实现,但如果您需要在不同形状的图表中重复执行此操作,那么这种方法就很笨重,而且扩展性也很糟糕。

答案1

改良版

在这个改进的版本中,你可以对箭头应用缩放因子:

\documentclass{article}
\usepackage{tikz-cd}
\usetikzlibrary{decorations.markings,intersections}

\tikzset{%
scalearrow/.style n args={3}{
  decoration={
    markings,
    mark=at position (1-#1)/2*\pgfdecoratedpathlength
      with {\coordinate (#2);},
    mark=at position (1+#1)/2*\pgfdecoratedpathlength
      with {\coordinate (#3);},
    },
  postaction=decorate,
  }
}

\begin{document}

\noindent
Scaling factor=1 (no scaling):\par
\begin{tikzcd}[row sep=huge,column sep=huge]
A \dar\rar & B\dar\dlar[phantom,scalearrow={1}{start}{end}]\arrow[dr,Rightarrow,to path= (start) -- (end)]  \\ 
C \rar & D    
\end{tikzcd}
\par\medskip

\noindent
Scaling factor=0.5:\par
\begin{tikzcd}[row sep=huge,column sep=huge]
A \dar\rar & B\dar\dlar[phantom,scalearrow={0.5}{start}{end}]\arrow[dr,Rightarrow,to path= (start) -- (end)]  \\ 
C \rar & D    
\end{tikzcd}

\par\medskip

\noindent
Two arrows, each with scaling factor=0.3333:\par
\begin{tikzcd}[row sep=huge,column sep=huge]
A 
  \dar\rar 
& 
B
  \dar
  \dlar[phantom,scalearrow={0.3333}{starta}{enda}]
  \arrow[dr,Rightarrow,to path= (starta) -- (enda)] & 
C 
  \dar\lar 
\\ 
D \rar 
& 
E
& 
F
  \lar
  \ular[phantom,scalearrow={0.3333}{startb}{endb}]
  \arrow[ul,Rightarrow,to path= (startb) -- (endb)] 
\end{tikzcd}

\end{document}

在此处输入图片描述

这个想法是使用装饰来测量路径长度,\pgfdecoratedpathlength并沿着路径放置两个标记,使得这些标记之间的距离就是按所需因子缩放的路径长度。

这是通过使用带有样式的“幻影”箭头来实现的scalearrow;在此样式中,您可以设置缩放因子(样式的第一个参数)和内部用于缩放路径的起点和终点的两个名称,例如,

\dar[phantom,scalearrow={0.3333}{name1}{name2

从当前节点(我们将其称为X)向其下方的节点(我们将其称为)放置一个向下的箭头,并在从到 的路径上的精确位置Y设置两个称为name1和的内部坐标,这样现在您可以使用这些名称来绘制缩放箭头(使用 的因子进行缩放),例如name2XY0.3333

\arrow[d,Rightarrow,to path= (name1) -- (name2)]

第一个版本

一个选项是使用shorten

\documentclass{article}
\usepackage{tikz-cd}

\begin{document}

\begin{tikzcd}[column sep = large, row sep = large]
    * \dar \rar &* \dar \dlar[Rightarrow,shorten >= 10pt,shorten <= 10pt]{}    \\ 
    * \rar &*
\end{tikzcd}

\end{document}

在此处输入图片描述

相关内容