Una macro definida funciona con \draw pero no con \fill

Una macro definida funciona con \draw pero no con \fill

Utilicé el \centerarccomando proporcionado enesterespuesta para llenar una región encerrada por arcos. He hecho una ligera modificación. He eliminado el \drawinterior de la definición y el primer parámetro.

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}

El comando \centerarcfunciona perfectamente cuando uso \draw. Pero cuando intento usarlo \fill, simplemente imprime el comando como texto.

¿Por qué sucede esto? ¿Existe alguna solución?

Respuesta1

Los \drawcomandos funcionan porque esto:

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

se expande a esto:

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

(con un duplicado ;al final, que no hará daño).

Pero esto (reemplazando solo el primer comando):

\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);

se convierte (salto de línea agregado para mayor claridad):

\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);

que finaliza la \fillinstrucción en el ;.

El resto -- \centerarc\ETC.no debería causar ningún problema (excepto que no funciona como cabría esperar), excepto que TikZ ignora a los extraviadostextoen un tikzpictureentorno, pero no en matemáticas. Entonces, todo lo que está entre $... $en la definición de \centerarcestá escrito en el PDF.

Solución: elimine el ;en la definición :)

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

información relacionada