我编写了一个命令来帮助我轻松绘制圆圈:
\def\Tdot@i{circle (1mm)}
\def\Tdot@ii[#1]{circle (#1)}
\def\Tdot{%
\@ifnextchar[%
{\Tdot@ii}%
{\Tdot@i}%
}
当我尝试时,它效果很好:
\documentclass{minimal}
\makeatletter
\def\Tdot@i{circle (1mm)}
\def\Tdot@ii[#1]{circle (#1)}
\def\Tdot{%
\@ifnextchar[%
{\Tdot@ii}%
{\Tdot@i}%
}
\makeatother
\begin{document}
\Tdot is circle (1mm),
\Tdot[5mm] is circle (5mm).
\end{document}
所以我尝试将它带到 tikz,它引发了一些错误:
% ...
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (0, 0) circle (1mm); % goodA
% Package tikz Error: Giving up on this path. Did you forget a semicolon?
% \draw (0, 0) \Tdot;
% Package tikz Error: Giving up on this path. Did you forget a semicolon?
% \draw (0, 0) \Tdot[5mm];
\end{tikzpicture}
\end{document}
if-else 对 TikZ 有害吗?
答案1
TikZ 使用自己的解析器。您无法轻松修改其行为。TikZ 解析器在坐标位置接受外部命令,但不接受坐标之间的外部命令(不是作为路径运算符)。
作为一种解决方法,您可以使用一种to path
样式......
\documentclass[tikz]{standalone}
\tikzset{
Tdot/.style={to path={circle[radius=#1]}},
Tdot/.default=1mm,
}
\begin{document}
\begin{tikzpicture}
\draw (0,0) to[Tdot] cycle to[Tdot=3mm] cycle;
\draw[red] (1,0) to[Tdot=2mm] cycle ;
\end{tikzpicture}
\end{document}