为什么我的 \matrix 路径放入另一个宏时会失败?

为什么我的 \matrix 路径放入另一个宏时会失败?

我有以下两段代码。第一段可以编译;第二段不能。我不明白为什么第二段会失败。有人能解释一下吗?

示例 1:

\documentclass{article}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}

   \matrix [column sep=0pt,every node/.style={draw,minimum size=2em}]
   {
     \node(m0) {a}; & \node(m1) {b}; & \node(m2) {c}; \\
   };

\end{tikzpicture}

\end{document}

示例 2:

\documentclass{article}
\usepackage{tikz}

\begin{document}

\def\usemygrid{%%
   \matrix [column sep=0pt,every node/.style={draw,minimum size=2em}]
   {
     \node(m0) {a}; & \node(m1) {b}; & \node(m2) {c}; \\
   };
}

\begin{tikzpicture}

  \usemygrid 

\end{tikzpicture}

\end{document}

第二个示例导致以下错误:

! Undefined control sequence.
<argument> \pgf@matrix@last@nextcell@options 

l.15       \usemygrid

答案1

TikZ 制作&一个活动字符,以便它可以根据需要重新定义它,例如在 中tikzmatrix,它是 的快捷方式\pgfmatrixnextcell

在 TikZ 环境之外,&不是一个活动字符,因此您的宏不会&像在文档中那样扩展。

要解决此问题,请提供替代方案并在宏中\&使用它。&

\def\usemygrid{%%
   \matrix [column sep=0pt,every node/.style={draw,minimum size=2em},
            ampersand replacement=\&] % <-- here
   {
     \node(m0) {a}; \& \node(m1) {b}; \& \node(m2) {c}; \\
   };
}

也可以看看这篇 TeX.SX 文章

相关内容