我想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 页)可知:
- 如果您将矩阵放在路径上,矩阵内容将被收集到宏中,宏会对其进行标记。这意味着 & 将失去其作为对齐字符的含义,从而导致错误。如果您需要将矩阵放在路径上,请使用 & 符号替换来解决该问题。
因此,插入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}