我有以下两段代码。第一段可以编译;第二段不能。我不明白为什么第二段会失败。有人能解释一下吗?
示例 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 文章。