我正在做分步教程,需要在添加新路径时重复基本 tikz 图片。我试图避免复制/粘贴。我四处查看,尝试使用宏、保存框和 tikz pic 命令,但我无法让它工作(甚至无法编译)。
我在原文中使用了子字幕,但在这里被删除了,因为我认为它不相关。
(编辑:也许像在投影机中使用的东西会很理想?)
使用保存箱:
\documentclass[10pt,a4paper,twoside]{report}
%---------------------------------- tikz ---------------------------------------
\usepackage{tikz}
\usetikzlibrary{positioning,chains,fit,shapes,calc,arrows,patterns,external,shapes.callouts,graphs,decorations.pathreplacing}
\usepackage{fixltx2e}
\newsavebox{\myborder}
\savebox{\myborder}{%
\begin{tikzpicture}
\matrix[row sep=10mm,column sep=10mm] {
% First row:
\node (a) {a}; & \node (e) {e}\\
% Second row:
\node (b) {b}; & \node (d) {d} \\
% Third row:
\node (c) {c}; & \node (z) {z} \\
};
\end{tikzpicture}}
\begin{document}
% align edges
\begin{tikzpicture}
{\usebox{\myborder}}
\path
(1) edge (b);
\end{tikzpicture}
\begin{tikzpicture}
{\usebox{\myborder}}
\path
(a) edge (b)
(a) edge (c);
\end{tikzpicture}
\end{document}
附有 tikz 图片
\documentclass[10pt,a4paper,twoside]{report}
%---------------------------------- tikz ---------------------------------------
\usepackage{tikz}
\usetikzlibrary{positioning,chains,fit,shapes,calc,arrows,patterns,external,shapes.callouts,graphs,decorations.pathreplacing}
\usepackage{fixltx2e}
\tikzset{radiation/.style={{decorate,decoration={expanding waves,angle=90,segment length=4pt}}},
antenna/.pic={
code={\tikzset{scale=5/10}
\matrix[row sep=10mm,column sep=10mm] {
% First row:
\node (a) {a}; & \node (e) {e}\\
% Second row:
\node (b) {b}; & \node (d) {d} \\
% Third row:
\node (c) {c}; & \node (z) {z} \\
};
}}
}
\begin{document}
\begin{tikzpicture}
\path (0,0) pic[scale=0.5,] {antenna};
\path
(1) edge (b);
\path (4,0) pic[scale=0.5,rotate=45] {antenna};
\path
(a) edge (b)
(a) edge (c);
\path (8,0) pic[scale=0.5,rotate=90] {antenna};
\end{tikzpicture}
\end{document}
答案1
您缺少一些分号,我将未定义替换(1)
为(d)
。LaTeX 有问题,&
所以我使用了与号替换。
您可以将宏放在 内部tikzpicture
,但不能放在path
或内部matrix
,至少在不使用 的情况下不能这样做\pgfextra{}
。Tikz 使用自己的解析器,其行为与 LaTeX 解析不同。
\documentclass[10pt,a4paper,twoside]{report}
%---------------------------------- tikz ---------------------------------------
\usepackage{tikz}
%\usetikzlibrary{positioning,chains,fit,shapes,calc,arrows,patterns,external,shapes.callouts,graphs,decorations.pathreplacing}
\newcommand{\stepa}{%
\matrix[row sep=10mm,column sep=10mm,ampersand replacement=\&] {
% First row:
\node (a) {a}; \& \node (e) {e}; \\
% Second row:
\node (b) {b}; \& \node (d) {d}; \\
% Third row:
\node (c) {c}; \& \node (z) {z}; \\
};}
\newcommand{\stepb}{\path (d) edge (b);}
\newcommand{\stepc}{\path (a) edge (c);}
\begin{document}
\begin{tikzpicture}
\stepa
\end{tikzpicture}
\hfill
\begin{tikzpicture}
\stepa
\stepb
\end{tikzpicture}
\hfill
\begin{tikzpicture}
\stepa
\stepb
\stepc
\end{tikzpicture}
\end{document}