锚定箭头

锚定箭头

从对勾周围的圆圈到数字 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=Aequal 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}

在此处输入图片描述

相关内容