如何使用可选参数在 TikZ 中定义新命令?

如何使用可选参数在 TikZ 中定义新命令?

我编写了一个命令来帮助我轻松绘制圆圈:

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

在此处输入图片描述

相关内容