我想在我的文档中使用饼图并尝试了以下代码示例:http://www.texample.net/tikz/examples/pie-chart/
现在这似乎可以完美地处理整数值,但对于浮点数我会出现错误。
使用此代码
\begin{tikzpicture}[scale=3]
\newcounter{a}
\newcounter{b}
\foreach \p/\t in {1.5/type Windows, 10/type Linux}
{
\setcounter{a}{\value{b}}
\addtocounter{b}{\p}
\slice{\thea/100*360}
{\theb/100*360}
{\p\%}{\t}
}
\end{tikzpicture}
我收到此错误:
软件包 calc 错误:`.' 此时无效。请参阅 calc 软件包文档以了解解释。键入 H 可立即获得帮助。... l.17 }
所以我查看了文档,但没有找到任何关于此内容的信息。我还发现这个问题但使用\real{1.5}
和也{1.5}
无济于事。
答案1
计数器只接受整数值。
您可以使用 PGF 工具或expl3
:
\documentclass{article}
\usepackage{tikz}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\declarefpvar}{m}
{
\fp_new:c { g_pie_#1_fp }
}
\NewDocumentCommand{\setfpvar}{mm}
{
\fp_gset:cn { g_pie_#1_fp } { #2 }
}
\DeclareExpandableDocumentCommand{\usefpvar}{m}
{
\fp_use:c { g_pie_#1_fp }
}
\ExplSyntaxOff
\newcommand{\slice}[4]{%
\pgfmathsetmacro\midangle{0.5*#1+0.5*#2}
% slice
\draw[thick,fill=black!10] (0,0) -- (#1:1) arc (#1:#2:1) -- cycle;
% outer label
\node[label=\midangle:#4] at (\midangle:1) {};
% inner label
\pgfmathsetmacro\temp{min((#2-#1-10)/110*(-0.3),0)}
\pgfmathsetmacro\innerpos{max(\temp,-0.5) + 0.8}
\node at (\midangle:\innerpos) {#3};
}
\declarefpvar{a}
\declarefpvar{b}
\begin{document}
\begin{tikzpicture}[scale=3]
\foreach \p/\t in {1.5/type Windows, 10/type Linux}
{
\setfpvar{a}{\usefpvar{b}}
\setfpvar{b}{\p+\usefpvar{b}}
\slice{\usefpvar{a}/100*360}
{\usefpvar{b}/100*360}
{\tiny\p\%}{\t}
}
\end{tikzpicture}
\end{document}