TikZ 矩阵在 makebox 或 framebox 内失败

TikZ 矩阵在 makebox 或 framebox 内失败

我想framebox在 TikZ 图片周围绘制一个。但是无法编译。我尝试使用makebox而不是framebox,但问题仍然存在。

这是一个 MWE。pdflatex将会提高Undefined control sequence \pgf@matrix@last@nextcell@options

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}

\makebox{%
  \begin{tikzpicture}
    \matrix (m) [matrix of nodes] { 
      text & text \\
    };
  \end{tikzpicture}%
}

\end{document}

谢谢大家的回答。这些答案看起来都不错,但我只能接受一个答案。

类似性质的问题可以在这里找到

后者解释了为什么&会出现这样的问题。

答案1

这里有三种不同的解决方案。

第一个使用background库来绘制background rectangle与任意相关的tikzpicture

第二个绘制matrix节点而不绘制内部矩阵节点。可以使用此解决方案,因为您绘制了matrix。对于任何其他图形,您都应该使用以前的解决方案。

第三个使用tcbox(来自tcolorbox)。它类似于,fbox但具有更多配置选项。在这种情况下,您必须使用ampersand replacement选项进入矩阵文本。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix, backgrounds}
\usepackage{tcolorbox}
\begin{document}

  \begin{tikzpicture}[show background rectangle]
    \matrix (m) [matrix of nodes] { 
      text & text \\
    };
  \end{tikzpicture}%

  \begin{tikzpicture}%[show background rectangle]
    \matrix (m) [draw, matrix of nodes] { 
      text & text \\
    };
  \end{tikzpicture}%

    \tcbox[sharp corners, colback=white, size=fbox]{\begin{tikzpicture}
    \matrix (m) [matrix of nodes, ampersand replacement=\&] { 
      text \& text \\
    };
  \end{tikzpicture}}

\end{document}

在此处输入图片描述

答案2

我发现选项ampersand replacement=\&(如下所示)可以解决问题。

\matrix (m) [matrix of nodes,ampersand replacement=\&] { 
  text \& text \\
};

但如果有人能解释为什么&会导致内部问题\makebox,我仍然会很感激。

答案3

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix,positioning,fit}

\begin{document}
%   \makebox{%
        \begin{tikzpicture}
            \matrix (m) [matrix of nodes] { 
                text & text \\
            };
        \node[draw,fit=(m-1-1) (m-1-2),inner sep=0pt]{};
        \end{tikzpicture}%
%   }
\end{document}

答案4

从 TikZ 和 PGF 手册(v 3.1.8b,第 321 页)可知:

  1. 如果您将矩阵放在路径上,矩阵内容将被收集到宏中,宏会对其进行标记。这意味着 & 将失去其作为对齐字符的含义,从而导致错误。如果您需要将矩阵放在路径上,请使用 & 符号替换来解决该问题。

因此,插入tikzpicture框架就是这种情况。

目前还不清楚,你设计框架的目的是什么tikzpicture。如果你只喜欢在矩阵周围有框架,那么你可以简单地这样写:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}
    \begin{tikzpicture}
\matrix (m) [matrix of nodes,
             draw] % <---
{
text & text \\
};
  \end{tikzpicture}%
\end{document}

在此处输入图片描述

在这种情况下,该框架围绕更复杂的图像内容,您可以使用fit库并通过以下方式解决问题:

\documentclass[border=3.141592mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{fit,
                matrix,
                positioning}

\begin{document}
    \begin{tikzpicture}
\matrix (m1) [matrix of nodes,
              draw]
{
first & matrix \\
};
\matrix (m2) [matrix of nodes,
              draw,
              right=of m1]
{
second      & matrix \\
left cell   & right cell \\
};
\draw[->]   (m1) -- (m2);
\node[draw=red, fit=(current bounding box)]{}; % <---
  \end{tikzpicture}%
\end{document}

在此处输入图片描述

相关内容