定義されたマクロは\drawでは機能しますが、\fillでは機能しません

定義されたマクロは\drawでは機能しますが、\fillでは機能しません

私は\centerarcこれ円弧で囲まれた領域を塗りつぶすための回答。少し変更を加えました。\draw定義の内部と最初のパラメータを削除しました。

MWE:

\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.Tiを除いて、問題を引き起こすことはないはずです(期待通りに動作しない場合を除きます)。Zは迷子を無視する文章環境ではtikzpicture、数学ではそうではありません。したがって、の定義内の$...の間のすべてがPDF に書き込まれます。$\centerarc

解決策:;定義内の を削除します :)

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

関連情報