我知道还有其他在 LaTeX 中创建图表的解决方案,尤其是在 Ti钾Z,但我遇到了以下问题。考虑这个 MWE 及其输出:
\documentclass[border=5pt,tikz]{standalone}
\newcommand{\dia}[2]{
\pgfmathsetmacro{\a}{(#1/100)*360}
\pgfmathsetmacro{\b}{(#2/100)*360}
\pgfmathsetmacro{\cc}{100-(#1+#2)}
\pgfmathsetmacro{\c}{(\cc/100)*360}
\fill[blue] (1,0) arc(0:\a+\a:1) -- (0,0) -- cycle;
\fill[green] (1,0) arc(0:\b+\c:1) -- (0,0) -- cycle;
\fill[red] (1,0) arc(0:\c:1) -- (0,0) -- cycle;
\draw[gray,ultra thick] (0,0) -- (\a+\a:1.01);
\draw[gray,ultra thick] (0,0) -- (\b+\c:1.01);
\draw[gray,ultra thick] (0,0) -- (\c:1.01);
\fill[gray] (0,0) circle(.95);
}
\pagecolor{gray}
\begin{document}
\foreach \n in {0,5,...,45,40,35,...,0}
{
\begin{tikzpicture}
\useasboundingbox (-1,-1) rectangle (1,1);
%% \fill[blue] (1,0) arc(0:120:1) --+ (0,-{sin(120)}) -- cycle;
% \fill[blue] (1,0) arc(0:120:1) -- (0,0) -- cycle;
%% \fill[green] (1,0) arc(0:75:1) --+ (0,-{sin(75)}) -- cycle;
% \fill[green] (1,0) arc(0:75:1) -- (0,0) -- cycle;
\dia{50}{\n}
\end{tikzpicture}
}
\end{document}
我的问题是:
我如何创建一个命令,这样我只需要输入\dia{4}{20}{10}{50}
,就可以让 Ti钾Z 知道,有四个数字需要处理;第一个数字代表 20%,第二个数字代表 10%,依此类推,最后一个数字是 100 - [所有前面的数字的总和]%?
答案1
在这里,我重写了您的宏,使其变成采用任意数量的百分比(以逗号分隔)和颜色的东西。最后一个百分比并不重要,因为最后一个条目定义了完成圆所需的最后一段的颜色。
\documentclass[border=5pt,tikz]{standalone}
\newcommand{\dia}[2][]{
\foreach [count=\Z] \X/\Y in {#2}
{\xdef\NumArcs{\Z}}
\xdef\LastX{0}
\foreach [count=\Z] \X/\Y in {#2}
{
\pgfmathsetmacro{\a}{(\LastX/100)*360}
\ifnum\Z=\NumArcs
\pgfmathsetmacro{\b}{360}
\else
\pgfmathsetmacro{\b}{((\LastX+\X)/100)*360}
\fi
\draw[\Y,line width=1mm] (180-\a:1) arc(180-\a:180-\b:1);
\draw[gray,ultra thick] (0,0) -- (180-\a:1.05);
\draw[gray,ultra thick] (0,0) -- (180-\b:1.05);
\pgfmathsetmacro{\LastX}{\LastX+\X}
\xdef\LastX{\LastX}
}
\fill[gray] (0,0) circle(.95);
}
\pagecolor{gray}
\begin{document}
\foreach \n in {0,5,...,45,40,35,...,0}
{
\begin{tikzpicture}
\useasboundingbox (-1,-1) rectangle (1,1);
\dia{10/red,\n/green,45/blue,0/purple}
\end{tikzpicture}
}
\end{document}