Uma macro definida funciona com \draw mas não com \fill

Uma macro definida funciona com \draw mas não com \fill

Eu usei o \centerarccomando fornecido emesseresposta para preencher uma região delimitada por arcos. Fiz uma pequena modificação. Eu removi o \drawinterior da definição e o primeiro 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}

O comando \centerarcfunciona perfeitamente quando eu uso o \draw. Mas quando tento usar \fill, ele apenas imprime o comando como texto.

Por que isso está acontecendo e há uma solução alternativa?

Responder1

Os \drawcomandos funcionam porque isto:

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

se expande para isso:

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

(com uma duplicata ;no final, o que não prejudica).

Mas isto (substituindo apenas o primeiro 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);

torna-se (quebra de linha adicionada para maior clareza):

\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 termina a \fillinstrução no ;.

O restante -- \centerarc\ETC.não deve causar nenhum problema (exceto não funcionar como seria de esperar), exceto que TikZ ignora perdidotextoem um tikzpictureambiente, mas não matemática. Então, tudo entre $... $na definição de \centerarcé gravado no PDF.

Solução: remova o ;na definição :)

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

informação relacionada