从 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 nodes
和matrix
。你把它们混在一起了。如果你使用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}