我想在我的图表中的三对节点周围绘制一个椭圆:(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
省略号看起来更好。