当我取出图片的一部分tikz
并将其放入宏中时,代码停止工作。那么,为什么下面的代码不起作用?
\documentclass{article}
\usepackage{tikz}\usetikzlibrary{matrix}
\begin{document}
\newcommand{\emptymatrix}{%
\matrix[matrix of nodes,
inner sep=0pt,
left delimiter={[},
right delimiter={]},
nodes={circle,inner sep=0pt}] (A) {%
\strut & \strut & \strut & \strut \\
\strut & \strut & \strut & \strut \\
\strut & \strut & \strut & \strut \\
\strut & \strut & \strut & \strut \\
};
}
\begin{tikzpicture}
\emptymatrix
\draw (A-1-1.center) -- (A-4-4.center);
\end{tikzpicture}
\end{document}
预期结果:
相反,会出现未定义的控制序列错误。
ERROR: Undefined control sequence.
--- TeX said ---
<argument> \pgf@matrix@last@nextcell@options
l.22 \emptymatrix
答案1
&
不建议在宏中使用“&”符号,因为它会结束一个组。下面是一种解决方法,用控制序列替换“&”符号,然后\&
追溯计算“&”符号。然后 LaTeX 已经评估了矩阵的结构,以评估组的结束位置然后。这样,您的宏定义的结构就不会在流程的早期就被破坏。
输出显示以下内容(我希望这是您想要的):
代码:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\newcommand{\emptymatrix}{%
\matrix (A) [ampersand replacement=\&,
matrix of nodes,
inner sep=0pt,
left delimiter={[},
right delimiter={]},
nodes={circle,inner sep=0pt}] {%
\strut \& \strut \& \strut \& \strut \\
\strut \& \strut \& \strut \& \strut \\
\strut \& \strut \& \strut \& \strut \\
\strut \& \strut \& \strut \& \strut \\
};
}
\begin{tikzpicture}
\emptymatrix
\draw (A-1-1.center) -- (A-4-4.center);
\end{tikzpicture}
\end{document}