从对勾周围的圆圈到数字 1 的箭头从圆圈内开始,而不是从圆圈的边界开始,并且箭头的头部穿过目标圆圈的边界。相反,我希望箭头从一个圆圈延伸到另一个圆圈。
我怀疑问题是因为箭头的起点和终点位于底层文本对象的边界,而不是我围绕它们绘制的圆圈。
\documentclass[tikz,border=2mm]{standalone}
\usepackage{amsmath,amssymb}
\usetikzlibrary{arrows,matrix,quotes}
\begin{document}
\begin{tikzpicture}
\tikzset{%
square matrix/.style={
matrix of nodes,
column sep=-\pgflinewidth,
row sep=-\pgflinewidth,
nodes in empty cells,
nodes={draw,
minimum size=#1,
anchor=center,
align=center,
inner sep=0pt
},
},
square matrix/.default=1.2cm,
arc/.style={->,> = latex'}
}
\matrix[square matrix] (A)
{
& $h_0$ & $h_1$ & $h_2$ \\
$t_0$ & & & \\
};
\node[circle] at (A-2-2) (a) {$\checkmark$};
\node[circle,fill=white] at ([xshift=0.3cm]A-2-3) (b) {$1$};
\draw[color=orange] (a) circle(0.4);
\draw[color=orange] (b) circle(0.4);
\draw[arc,color=orange,dashed] (a) to["{\textbf{\scriptsize WP1}}"] (b);
\end{tikzpicture}
\end{document}
答案1
像这样?
我只是稍微简化了你的代码 - 只使用一个节点作为复选标记和圆圈中的数字 1:
\documentclass[tikz,border=2mm]{standalone}
\usepackage{amsmath,amssymb}
\usetikzlibrary{arrows,matrix,quotes}
\begin{document}
\begin{tikzpicture}
\tikzset{%
square matrix/.style={matrix of nodes,
column sep=-\pgflinewidth,
row sep=-\pgflinewidth,
nodes in empty cells,
nodes = {draw, minimum size=#1, inner sep=0pt,
anchor=center,
align=center},
},
square matrix/.default=1.2cm,
arc/.style={-latex'}, % <---
C/.style = {circle, draw=orange, text=black,
minimum size=1.5em, inner sep=0pt}, % <---
}
\matrix[square matrix] (A)
{
& $h_0$ & $h_1$ & $h_2$ \\
$t_0$ & & & \\
};
\node (a) [C] at (A-2-2.center) {$\checkmark$}; % <---
\node (b) [C] at (A-2-3.center) {$1$};
\path[arc,draw=orange,densely dashed] (a) to["\scriptsize {\textbf{WP1}}"] (b); % <---
\end{tikzpicture}
\end{document}
或者你可能寻找以下结果:
为此,您只需移动圆圈位置的坐标即可。例如:
\node (a) [C] at ([xshift=-3pt] A-2-2.center) {$\checkmark$};
\node (b) [C] at ([xshift= 3pt] A-2-3.center) {$1$};
其余代码与之前相同。
答案2
我不知道我是否正确理解了这个问题,但如果我理解了,你想同步圆的大小而不猜测硬编码的半径。这可以用 来完成eqparbox
,也可以将其设为样式,equal size
。因此,如果您想要两个大小相同的节点,只需添加到节点选项中。如果您想要拥有大小相同的节点组,例如,对第一组equal size
使用,对下一组使用 ,依此类推。equal size=A
equal size=B
\documentclass[tikz,border=2mm]{standalone}
\usepackage{amsmath,amssymb}
\usepackage{eqparbox}
\newbox\eqnodebox
\usetikzlibrary{arrows,matrix,quotes}
\begin{document}
\begin{tikzpicture}
\tikzset{%
square matrix/.style={
matrix of nodes,
column sep=-\pgflinewidth,
row sep=-\pgflinewidth,
nodes in empty cells,
nodes={draw,
minimum size=#1,
anchor=center,
align=center,
inner sep=0pt
},
},
square matrix/.default=1.2cm,
arc/.style={->,> = latex'},
equal size/.style={execute at begin
node={\setbox\eqnodebox=\hbox\bgroup},
execute at end
node={\egroup\eqmakebox[#1][c]{\copy\eqnodebox}}},equal size/.default=A
}
\matrix[square matrix] (A)
{
& $h_0$ & $h_1$ & $h_2$ \\
$t_0$ & & & \\
};
\node[circle,draw=orange,equal size,inner sep=1pt] at (A-2-2) (a) {$\checkmark$};
\node[circle,draw=orange,equal size,inner sep=1pt] at ([xshift=0.3cm]A-2-3) (b) {$1$};
\draw[arc,color=orange,dashed] (a) to["WP1" font=\bfseries\scriptsize] (b);
\end{tikzpicture}
\end{document}