tikzpicture 环境中的宏

tikzpicture 环境中的宏

当我取出图片的一部分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 已经评估了矩阵的结构,以评估组的结束位置然后。这样,您的宏定义的结构就不会在流程的早期就被破坏。

输出显示以下内容(我希望这是您想要的):

http://i.imgur.com/k4bbhcL.png?1

代码:

\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}

相关内容