
Я использовал\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.
не должно вызвать никаких проблем (кроме того, что не будет работать так, как можно было бы ожидать), за исключением того, что TiкZ игнорирует бродячихтекств tikzpicture
среде, но не математике. Так что все между $
... $
в определении \centerarc
записывается в PDF.
Решение: убрать ;
в определении :)
\def\centerarc(#1)(#2:#3:#4){ ($(#1)+({#4*cos(#2)},{#4*sin(#2)})$) arc (#2:#3:#4) }