假设我在序言中定义了一个宏\arr
,用于tikzpicture
。最佳做法是:
排除从定义中删除分号并将其包含在tikzpicture
,
\documentclass{article}
\usepackage{tikz}
\newcommand*{\arr}[2]{\draw[-latex] (0,0) -- ({#1},{#2}) }
% no semicolon here ^
\begin{document}
\begin{tikzpicture}
\arr{2}{1}; % semicolon here
\arr{4}{-3}; % semicolon here
\end{tikzpicture}
\end{document}
或者
包括定义中的分号并将其从tikzpicture
,中排除
\documentclass{article}
\usepackage{tikz}
\newcommand*{\arr}[2]{\draw[-latex] (0,0) -- ({#1},{#2});}
% semicolon here ^
\begin{document}
\begin{tikzpicture}
\arr{2}{1} % no semicolon here
\arr{4}{-3} % no semicolon here
\end{tikzpicture}
\end{document}
?
我倾向于在定义中包含分号,因为它适用于包含多个绘图命令的宏。然而,当宏在循环中使用时\foreach
,调用时仍需添加分号,这看似多余,但是为了避免错误,这是必要的。
答案1
我认为这里没有真正的最佳实践,让我们看看两种可能性:如果你不在的定义中使用分号\arr
并且如果你忘记了,tikzpicture
你就会得到一个错误:
\newcommand*{\arr}{\draw (0,0) -- (1,1)}% No semicolon in definition
\begin{tikzpicture} \arr \end{tikzpicture}% Forgoten semicolon → "Giving up on this path..."
\begin{tikzpicture} \arr; \end{tikzpicture}% With semiconlon → Ok
如果你做无论你是否在命令后面放置分号,代码都会编译。如果有多余的分号,你会在日志文件中收到“缺少字符”消息。
\newcommand*{\arr}{\draw (0,0) -- (1,1);}% Semicolon in definition
\begin{tikzpicture} \arr \end{tikzpicture}% Forgoten semicolon → Ok
\begin{tikzpicture} \arr; \end{tikzpicture}% With semiconlon → "Missing character"
因此,最糟糕的情况是出现常见的“ Giving up on this path
”错误。我个人认为,我不会在定义中放置分号,因为我习惯于将它们放在行末,并且我希望代码保持一致。
就像密钥一样insert path
,它会在调用密钥的任何地方插入指定的路径。因此,无论你在其中输入什么路径,都会在调用密钥时调用。例如,你可以这样说:
\tikzset{
arr/.style args={circle at #1 to arrow at #2}{
->,
insert path={#1 circle[radius=2mm] -- #2}
}
}
\tikz \draw[arr={circle at (0,0) arrow at (1,1)];
定义样式的其他方法,如/.style n args={<n>}{style}
也可以使用,并且在 Ti 中有广泛的记录钾Z 手册。