节点名称的范围

节点名称的范围

从 TikZ 和 PGF 手册的“矩阵库”第 57.1 节中提供的第一个矩阵示例开始,我预计以下内容将导致图片中出现一个将“签名”单元格连接到“过渡”单元格的箭头。

    \documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix,fit,positioning,arrows}
\begin{document}
\begin{tikzpicture}[every node/.style={draw, anchor=west}] % added anchor=west
\matrix [matrix of nodes,draw=red,column sep=1cm,name=m]
  {
   \node [xshift=1mm] {\textbf {Transition Record}};\\ % added xshift=1mm
   \node [align=left]
      {\textbf{Signatures} \\
       signed by Ted};\\
   \node [align=left] {\textbf{Transition} \\ \(\tau\)};\\
   \node [align=left]
      {\textbf{End State} \\
       \(\mathtt{Alice2}\mid\mathtt{Carol2}\mid\mathtt{Ted}\)};\\
};
\draw[-latex,bend right] (m-2-1.north west) to (m-4-1.south west);
\end{tikzpicture}
\end{document}

这会导致错误:

  • 包 pgf 错误:没有已知的名为 m-4-1 的形状。...](m-2-1.西北)到(m-4-1.西南)
  • 包 pgf 错误:没有已知的名为 m-2-1 的形状。...draw[-latex,bend right] (m-2-1.north west)

另一方面,如果我将 \draw 命令替换为

\draw[-latex,bend right] (m.north west) to (m.south west);

我得到了我所期望的箭头。

鉴于名称“m”是已知的,我不清楚为什么派生名称“m-1-1”、“m-2-1”等不会是已知的。鉴于手册中上述示例,情况尤其如此。除了了解为什么我无法引用“未知”形状名称之外,我还想了解有关名称引入的规则以及它们可供引用的范围。

先感谢您。

答案1

Ti 中有两种类型的矩阵Z:matrix of nodesmatrix。你把它们混在一起了。如果你使用matrix of nodes,你不必输入命令\node,节点会自动标记。如果你使用普通的matrix,你可以保留你的节点命令,但你需要自己命名节点。我在以下代码中使用了这两种类型的矩阵。

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix,fit,positioning,arrows}
\begin{document}
\begin{tikzpicture}[every node/.style={draw, anchor=west}] % added anchor=west
\matrix [matrix,draw=red,column sep=1cm,name=m]
  {
   \node [xshift=1mm] {\textbf {Transition Record}};\\ % added xshift=1mm
   \node [align=left] (m-2-1)
      {\textbf{Signatures} \\
       signed by Ted};\\
   \node [align=left] {\textbf{Transition} \\ \(\tau\)};\\
   \node [align=left] (m-4-1)
      {\textbf{End State} \\
       \(\mathtt{Alice2}\mid\mathtt{Carol2}\mid\mathtt{Ted}\)};\\
};
\draw[-latex,bend right] (m-2-1.north west) to (m-4-1.south west);
\end{tikzpicture}

\begin{tikzpicture}[every node/.style={draw, anchor=west}] % added anchor=west
\matrix [matrix of nodes,draw=red,column sep=1cm,name=m,nodes={align=left,text
width=4cm}]
  {
   |[xshift=1mm]| \textbf {Transition Record}\\ % added 
   {\textbf{Signatures} \\
       signed by Ted}\\
   {\textbf{Transition} \\ \(\tau\)}\\
   {\textbf{End State} \\
       \(\mathtt{Alice2}\mid\mathtt{Carol2}\mid\mathtt{Ted}\)}\\
};
\draw[-latex,bend right] (m-2-1.north west) to (m-4-1.south west);
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

编辑:抱歉,我在上传正确版本的代码时遇到了一些问题......现在应该没问题了

稍作修改的第二个例子土拨鼠答案。通过使用该 stackengine包,它给出与他的第一个例子类似的结果:

\documentclass[tikz, margin=3mm]{standalone}
\usetikzlibrary{arrows, matrix}
\usepackage{stackengine}

\begin{document}
    \begin{tikzpicture}                         % <---
\matrix (m) [matrix of nodes, draw=red,
         nodes={draw, anchor=west},             % <---
         row sep=-\pgflinewidth]                % <---
  {
   |[xshift=1mm]| \textbf {Transition Record}\\ 
   \shortstack[l]{\textbf{Signatures} \\          % <---
       signed by Ted}\\
   \shortstack[l]{\textbf{Transition} \\          % <---
       \(\tau\)}\\
   \shortstack[l]{\textbf{End State} \\           % <---
       \(\mathtt{Alice2}\mid\mathtt{Carol2}\mid\mathtt{Ted}\)}\\
};
\draw[-latex] (m-2-1.north west) to [bend right] (m-4-1.south west);
    \end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容