我使用下面的方法在 tikz-cd 中绘制了一个图表
\begin{tikzcd}
& A \arrow[r] & B\arrow[loop above] & C\arrow[l]\\
D\arrow[r] & E\arrow[loop above] & & F\arrow[ul]\\
& G\arrow[u] & H\arrow[ul] & \\
& J\arrow[u] & & \\
\end{tikzcd}
但是我想绘制一条曲线来分隔两个不相连的图。为此,我想使用 tikz-picture 的选项,例如在 tikz-cd 绘制的同一张图片中声明坐标和绘制曲线。这可能吗?我尝试将 tikz-cd 嵌入 tikz-picture 中
\begin{tikzpicture}
\begin{tikzcd}
& A \arrow[r] & B\arrow[loop above] & C\arrow[l]\\
D\arrow[r] & E\arrow[loop above] & & F\arrow[ul]\\
& G\arrow[u] & H\arrow[ul] & \\
& J\arrow[u] & & \\
\end{tikzcd}
\end{tikzpicture}
但那没有用。
答案1
至于您建议将tikzcd
环境包装在 中tikzpicture
。请不要这样做!这相当于嵌套tikzpicture
,这不受支持并且会导致各种并发症。
我会假设你不是寻找类似手册第 13 页顶部的示例tikz-cd
。这允许您在中嵌入矩阵,tikzpicture
但它不支持该\arrow
命令(无需进一步说明)。为此,以下内容假定您确实想使用该命令\arrow
。然后至少有两种方法可以添加纯 Ti钾Z 代码:
execute at end picture
, 看这里查看有关此内容的原始帖子。remember picture
。
两者都允许您绘制内容,并访问图表中的节点。您可以使用 或alias
,\tikzcdmatrixname-<row>-<column>
这是预定义的节点名称。
\documentclass{article}
\usepackage{tikz-cd}
\begin{document}
\subsection*{Method 1: \texttt{execute at end picture}}
\begin{tikzcd}[execute at end picture={
\draw[-latex,red] ([yshift=1cm]A) to[out=45,in=170] ([yshift=1cm]C)
to[out=-10,in=45] (F);
\draw[blue] ([yshift=0.5em]D.north west) to[out=20,in=180]
([yshift=1.5em]E.north) to[out=0,in=160] ([yshift=-0.5em]F.south east);}]
& |[alias=A]|A \arrow[r] & B\arrow[loop above] & |[alias=C]| C\arrow[l]\\
|[alias=D]|D\arrow[r] & |[alias=E]| E\arrow[loop above] & & |[alias=F]| F\arrow[ul]\\
& G\arrow[u] & H\arrow[ul] & \\
& J\arrow[u] & & \\
\end{tikzcd}
\subsection*{Method 2: \texttt{remember picture}}
\begin{tikzcd}[remember picture]
& |[alias=A]|A \arrow[r] & B\arrow[loop above] & |[alias=C]| C\arrow[l]\\
|[alias=D]| D\arrow[r] & |[alias=E]| E\arrow[loop above] & & |[alias=F]| F\arrow[ul]\\
& G\arrow[u] & H\arrow[ul] & \\
& J\arrow[u] & & \\
\end{tikzcd}
\begin{tikzpicture}[overlay,remember picture]
\draw[-latex,red] ([yshift=1cm]A) to[out=45,in=170] ([yshift=1cm]C)
to[out=-10,in=45] (F);
\draw[blue] ([yshift=0.5em]D.north west) to[out=20,in=180]
([yshift=1.5em]E.north) to[out=0,in=160] ([yshift=-0.5em]F.south east);
\end{tikzpicture}
\end{document}
如果您更熟悉calc
(而不是 s yshift
),只要您加载库,此方法也会有效。如您所见,它overlay
有一个轻微的缺点,即边界框不会调整,但可以说它不那么“黑客化”。