在 Tikz-cd 中围绕图表绘制一个椭圆

在 Tikz-cd 中围绕图表绘制一个椭圆

我想在我的图表中的三对节点周围绘制一个椭圆:(32)、(78)和(56)。

\begin{tikzcd}
1\arrow[bend right]{r} \arrow{d} 
&3 \arrow[bend right]{l} \arrow[bend left]{r} 
&2 \arrow[bend left]{l} \arrow[bend right]{r}  \arrow{d} 
&4   \arrow[bend right]{l} \\
7\arrow[bend right]{r}
&8 \arrow[bend right]{l} \arrow[bend left]{r}  \arrow{u}
&5 \arrow[bend left]{l} \arrow[bend right]{r} 
&6  \arrow[bend right]{l} \arrow{u} 
\end{tikzcd}

下面是上面代码输出的图表的图片,其中有我想要叠加在顶部的虚线椭圆:

梦想,围绕某些数字的椭圆

这是我迄今为止使用其他地方的答案所能做的最好的事情:

\[\begin{tikzcd}[execute at end picture={\node[ellipse,draw,blue,fit={(tikz@f@1-3-1) (tikz@f@1-3-2)}]{};}]
1\arrow[bend right]{r} \arrow{d} 
&3 \arrow[bend right]{l} \arrow[bend left]{r} 
&2 \arrow[bend left]{l} \arrow[bend right]{r}  \arrow{d} 
&4   \arrow[bend right]{l} \\
7\arrow[bend right]{r}
&8 \arrow[bend right]{l} \arrow[bend left]{r}  \arrow{u}
&5 \arrow[bend left]{l} \arrow[bend right]{r} 
&6  \arrow[bend right]{l} \arrow{u} 
\end{tikzcd}\]

输出为:

椭圆定位不理想

我不知道如何让椭圆紧密地围绕在对周围。

似乎也许不同的 tikz 会更好地工作,比如 tikz 图片,但我的论文中的所有图表都是以相同的方式编写的,所以我不想重写它只是为了在节点周围得到省略号,因为那样它可能会不匹配。

谢谢你!

答案1

不要忽略错误消息。你的代码会抛出错误

! Package pgf Error: No shape named tikz@f@1-3-1 is known.

因为第二个数字是行号,第三个数字是列号。您只有两行。

代码输出

\documentclass[border=5mm]{standalone}
\usepackage{tikz-cd}
\usetikzlibrary{shapes.geometric,fit}
\tikzset{
   dashellipse/.style={ellipse,draw,dashed,inner sep=0pt,blue,fit={#1}}
}
\begin{document}
\begin{tikzcd}[
   execute at end picture={
     \node[dashellipse=(tikz@f@1-1-2)(tikz@f@1-1-3)]{};
     \node[dashellipse=(tikz@f@1-2-1)(tikz@f@1-2-2)]{};
     \node[dashellipse=(tikz@f@1-2-3)(tikz@f@1-2-4)]{};
}]
1 \arrow[bend right]{r} \arrow{d} 
 & 3 \arrow[bend right]{l} \arrow[bend left]{r} 
 & 2 \arrow[bend left]{l} \arrow[bend right]{r}  \arrow{d} 
 & 4 \arrow[bend right]{l} \\
7 \arrow[bend right]{r}
 & 8 \arrow[bend right]{l} \arrow[bend left]{r}  \arrow{u}
 & 5 \arrow[bend left]{l} \arrow[bend right]{r} 
 & 6 \arrow[bend right]{l} \arrow{u} 
\end{tikzcd}
\end{document}

答案2

你快到了:

\documentclass{article}
\usepackage{tikz-cd}
\usetikzlibrary{fit,shapes.geometric}
\tikzset{mynode/.style={
    ellipse,draw,dashed,
    inner xsep=-1pt, blue,
    }}
\begin{document}
\[
\begin{tikzcd}[execute at end picture={
    \node[mynode, fit={(\tikzcdmatrixname-1-2) (\tikzcdmatrixname-1-3)}]{};
    \node[mynode, fit={(\tikzcdmatrixname-2-1) (\tikzcdmatrixname-2-2)}]{};
    \node[mynode, fit={(\tikzcdmatrixname-2-3) (\tikzcdmatrixname-2-4)}]{};
    }]
1\ar[bend right]{r} \ar{d} 
&3 \ar[bend right]{l} \ar[bend left]{r} 
&2 \ar[bend left]{l} \ar[bend right]{r} \ar{d} 
&4 \ar[bend right]{l} \\
7\ar[bend right]{r}
&8 \ar[bend right]{l} \ar[bend left]{r} \ar{u}
&5 \ar[bend left]{l} \ar[bend right]{r} 
&6 \ar[bend right]{l} \ar{u}  
\end{tikzcd}
\]
\end{document}

在此处输入图片描述

PS = Torbjørn T. 和我同时回答了...他解释了错误,但我保留了我的答案,因为inner xsep=-1pt省略号看起来更好。

相关内容