matrix
是否可以沿着使用 TikZ chain
?
以下代码尝试创建一个由 a node
、 amatrix
和 another组成的链node
。
\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{positioning,chains}
\begin{document}
\begin{tikzpicture}[start chain]
\node [on chain] {XYZ};
\matrix [on chain]
{
\node {A}; \\
\node {B}; \\
\node {C}; \\
};
\node [on chain] {123};
\end{tikzpicture}
\end{document}
但是,如果我尝试编译,我会收到错误“Package pgf 错误:没有已知名为 chain-2 的形状。”(有趣的是,如果我删除最后一个节点,使得矩阵后面没有任何内容,那么编译时就不会出现错误。)为什么会出现此错误?
当然,直接使用positioning
库就足够简单了。所以,我对这个问题的兴趣主要在于其本身;我并没有想到矩阵链在什么重要、具体的用途上会至关重要。
答案1
链上的节点被命名为,(chainname-#)
但矩阵没有提供此命名方案(似乎是一个错误)。因此,最安全的方法是明确命名链上的矩阵节点。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning,chains,matrix}
\begin{document}
\begin{tikzpicture}[start chain]
\node [on chain] {XYZ};
\node [on chain] {123};
\node [on chain,matrix of nodes] (chain-3) { A \\ B \\ C \\ };
\node [on chain] {$\alpha\beta\gamma$};
\end{tikzpicture}
\end{document}
答案2
我遇到了同样的问题,我通过将矩阵放在嵌套的tikzpicture
ie中来解决这个问题
\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{positioning,chains}
\begin{document}
\begin{tikzpicture}[start chain]
\node [on chain] {XYZ};
\node [on chain] {
\begin{tikzpicture}
\matrix
{
\node {A}; \\
\node {B}; \\
\node {C}; \\
};
\end{tikzpicture}
};
\node [on chain] {123};
\end{tikzpicture}
\end{document}
答案3
现在我自己也曾多次遇到过这个问题,所以我进行了调查。
是的,alias
它不适用于矩阵,因为它们根本不会出现别名。
密钥以以下形式alias = <alias>
累积别名\tikz@alias
\pgfnodealias{<alias>}{<name>}
当节点最终构建完成并且<name>
(即节点/矩阵/坐标的“真实”名称)最终确定时\tikz@alias
,将执行此操作。
它只是矩阵代码中缺失了。在这个小例子中,我没有注意到任何不良影响。
代码
\documentclass[tikz]{standalone}
\usetikzlibrary{chains}
\ExplSyntaxOn \makeatletter
\tl_replace_once:Nnn
\tikz@do@matrix@cont
{ \tikz@node@finish }
{ \tikz@alias \tikz@node@finish }
\makeatother \ExplSyntaxOff
\begin{document}
\begin{tikzpicture}[start chain]
\node [on chain] {XYZ};
\matrix [on chain] {
\node {A}; \\
\node {B}; \\
\node {C}; \\};
\node [on chain] {123};
\end{tikzpicture}
\end{document}