定义的宏适用于 \draw,但不适用于 \fill

定义的宏适用于 \draw,但不适用于 \fill

我使用了\centerarc提供的命令答案是填充由圆弧包围的区域。我做了一点修改。我删除了\draw定义里面的和第一个参数。

梅威瑟:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}

    \centering
    \begin{tikzpicture}
    \def\centerarc(#1)(#2:#3:#4){ ($(#1)+({#4*cos(#2)},{#4*sin(#2)})$) arc (#2:#3:#4); }
    \coordinate (A) at (0,0);
    \coordinate (B) at (1.6,0);
    \coordinate (C) at (4,-2.5);

    \draw \centerarc(0,0)(48.23:60:1.6);
    \draw \centerarc(1.6,0)(120:180:1.6);   
    \draw \centerarc(4,-2.5)(128.47:147.99:4.72);
    \fill[red]\centerarc(0,0)(48.23:60:1.6) -- \centerarc(1.6,0)(120:180:1.6) -- \centerarc(4,-2.5)(128.47:147.99:4.72);


    \end{tikzpicture}

\end{document}

当我使用 时,该命令\centerarc运行正常\draw。但是当我尝试使用 时\fill,它只是将命令打印为文本。

为什么会发生这种情况?有解决方法吗?

答案1

\draw命令之所以有效,是因为:

\draw \centerarc(0,0)(48.23:60:1.6);

扩展为:

\draw ($(0,0)+({1.6*cos(48.23)},{1.6*sin(48.23)})$) arc (48.23:60:1.6);;

;(末尾有重复,但不会造成损害)。

但是这个(仅替换第一个命令):

\fill[red] \centerarc(0,0)(48.23:60:1.6) -- \centerarc(1.6,0)(120:180:1.6) -- \centerarc(4,-2.5)(128.47:147.99:4.72);

变成(为清晰起见添加了换行符):

\fill[red] ($(#1)+({#4*cos(#2)},{#4*sin(#2)})$) arc (#2:#3:#4);
  -- \centerarc(1.6,0)(120:180:1.6) -- \centerarc(4,-2.5)(128.47:147.99:4.72);

\fill它在 处结束指令;

剩下的-- \centerarc\ETC.应该不会造成任何麻烦(除了不能像预期的那样工作),除了 TiZ 忽略了流浪文本tikzpicture环境中,但不是数学。因此,定义中的$...之间的所有内容都会写入 PDF。$\centerarc

解决方案:删除;定义中的:)

\def\centerarc(#1)(#2:#3:#4){ ($(#1)+({#4*cos(#2)},{#4*sin(#2)})$) arc (#2:#3:#4) }

相关内容