tikz矩阵未定义控制序列

tikz矩阵未定义控制序列

我想使用 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

以下是两种避免主动角色出现问题的方法:

  1. [fragile]选项添加到你的框架环境(参见 beamer 用户指南第 126 页“12.9 逐字文本和易碎文本”部分),

  2. 将选项添加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}

相关内容