我想使用 tkiz 矩阵,但 tikz 图片中的任何编译都会以错误结束:
! Undefined control sequence.
<argument> \pgf@matrix@last@nextcell@options
我想知道是否没有错误,因为即使这个包含从 pgf doc 中获取的代码的测试文件也没有使用 lualatex 和 xelatex 引擎进行编译:
\documentclass[11pt]{beamer}
\usepackage{polyglossia}
\usepackage{tikz}
\usetikzlibrary{matrix}
\setdefaultlanguage{english}
\title{}
\author{}
\date{}
\begin{document}
\maketitle
\begin{frame}
\frametitle{test}
\begin{tikzpicture}
\draw[help lines] (0,0) grid (4,2);
\node [matrix,fill=red!20,draw=blue,very thick] (my matrix) at (2,1)
{
\draw (0,0) circle (4mm); & \node[rotate=10] {Hello};\\
\draw (0.2,0) circle (2mm); & \fill[red](0,0) circle (3mm); \\
};
\draw [very thick,->] (0,0) |- (my matrix.west);
\end{tikzpicture}
\end{frame}
\end{document}
我正在使用 texlive 2014,今天在 Arch Linux 下更新了它(但在更新之前存在编译错误)。有人可以检查这个问题是否可以在 texlive 2014 上重现,或者告诉我如果不是错误,那是什么问题?
转义“&”符号并没有真正的帮助,每个节点都写在同一个位置
非常感谢
编辑:问题与有关beamer
。如果我将 documentclass 更改为(当然切换 frame 和 frametitle),此文档编译没有问题article
。这个问题可能来自哪里?
答案1
当matrix
在环境中使用时frame
,您需要ampersand replacement
像矩阵在命令的参数中一样:
\documentclass[11pt]{beamer}
\usepackage{fontspec}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{frame}
\frametitle{test}
\begin{tikzpicture}[ampersand replacement=\&]
\draw[help lines] (0,0) grid (4,2);
\node [matrix,fill=red!20,draw=blue,very thick] (my matrix) at (2,1)
{
\draw (0,0) circle (4mm); \& \node[rotate=10] {Hello};\\
\draw (0.2,0) circle (2mm); \& \fill[red](0,0) circle (3mm); \\
};
\draw [very thick,->] (0,0) |- (my matrix.west);
\end{tikzpicture}
\end{frame}
\end{document}
或者,使用该fragile
选项(速度较慢,因为它将框架代码写入文件中并输入):
\documentclass[11pt]{beamer}
\usepackage{fontspec}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{frame}[fragile]
\frametitle{test}
\begin{tikzpicture}
\draw[help lines] (0,0) grid (4,2);
\node [matrix,fill=red!20,draw=blue,very thick] (my matrix) at (2,1)
{
\draw (0,0) circle (4mm); & \node[rotate=10] {Hello};\\
\draw (0.2,0) circle (2mm); & \fill[red](0,0) circle (3mm); \\
};
\draw [very thick,->] (0,0) |- (my matrix.west);
\end{tikzpicture}
\end{frame}
\end{document}
答案2
以下是两种避免主动角色出现问题的方法:
将
[fragile]
选项添加到你的框架环境(参见 beamer 用户指南第 126 页“12.9 逐字文本和易碎文本”部分),将选项添加
ampersand replacement=\&
到矩阵节点并使用\&
分隔符(参见 pgfmanual 第 313 页“20.5 关于活动字符的注意事项”部分)。
代码:
\documentclass[11pt]{beamer}
\usepackage{polyglossia}
\usepackage{tikz}
\usetikzlibrary{matrix}
\setdefaultlanguage{english}
\title{}
\author{}
\date{}
\begin{document}
\maketitle
\begin{frame}[fragile]
\frametitle{test}
\begin{tikzpicture}
\draw[help lines] (0,0) grid (4,2);
\node [matrix,fill=red!20,draw=blue,very thick] (my matrix) at (2,1)
{
\draw (0,0) circle (4mm); & \node[rotate=10] {Hello};\\
\draw (0.2,0) circle (2mm); & \fill[red](0,0) circle (3mm); \\
};
\draw [very thick,->] (0,0) |- (my matrix.west);
\end{tikzpicture}
\end{frame}
\begin{frame}
\frametitle{test}
\begin{tikzpicture}
\draw[help lines] (0,0) grid (4,2);
\node [matrix,fill=red!20,draw=blue,very thick,ampersand replacement=\&] (my matrix) at (2,1)
{
\draw (0,0) circle (4mm); \& \node[rotate=10] {Hello};\\
\draw (0.2,0) circle (2mm); \& \fill[red](0,0) circle (3mm); \\
};
\draw [very thick,->] (0,0) |- (my matrix.west);
\end{tikzpicture}
\end{frame}
\end{document}