我目前正在使用pgf-派包,当我使用指令写入 pgf-pie 内容时,我遇到了一个问题\newcommand
。以下 MWE
\documentclass{standalone}
\usepackage{pgf-pie}
\usetikzlibrary{shadows}
\begin{document}
\newcommand{\testpie}{10/ A , 20/ B , 30/ C , 40/ D}
\begin{tikzpicture}
\begin{pie}[
text = inside,
scale font,
style = drop shadow
]
{
\testpie
}
\end{pie}
\end{tikzpicture}
\end{document}
产生以下错误
! Package PGF Math Error: Unknown function `A' (in '10/ A , 20/ B , 30/ C , 40/D').
最终目标是通过读取 pgfplotstable 自动生成“分数”序列。
编辑:
回到最初的代码我有类似的东西
\documentclass{standalone}
\usepackage{pgfplotstable}
\usepackage{pgf-pie}
\usepackage{xstring}
\pgfplotstableread[col sep=comma]{
Year,TB,B,AB,P,NA
2008/2009,15,38,15,0,31
2009/2010,13,25,38,0,25
2010/2011,17,50,8,17,8
}{\mention}
%% Feel free to improve the next lines
\newcommand{\pieplot}[1]{%
\pgfplotstableforeachcolumnelement{Year}\of{#1}\as\cell{%
\IfStrEq{\cell}{2008/2009}{%
\pgfplotsforeachungrouped \x in {TB,B,AB,P,NA}{%
\pgfplotstablegetelem{\pgfplotstablerow}{\x}\of{#1}
\pgfmathtruncatemacro\val{\pgfplotsretval}
\ifnum\val=0
\else
\val / \x
\IfStrEq{\x}{NA}{}{,}
\fi
}
}
}
}
\begin{document}
\pieplot{\mention}
\end{document}
它会生成正确的“分数”序列,但是当我使用\pie
命令时甚至使用命令也会失败\mypie
。
答案1
根据基本文档和与pgf-pie
强制参数的代码相关的内容,将直接传递给构造foreach
。因此,您必须先完全扩展该参数。这里有一个建议,通过提供一个新命令\mypie
:
\newcommand\mypie[2][]{%
\begingroup
\edef\x{\endgroup\noexpand\pie[#1]{#2}}
\x}
完整代码如下:
\documentclass{standalone}
\usepackage{pgf-pie}
\begin{document}
\newcommand{\testpie}{10/ A , 20/ B , 30/ C , 40/ D}
\newcommand\mypie[2][]{%
\begingroup
\edef\x{\endgroup\noexpand\pie[#1]{#2}}
\x}
\begin{tikzpicture}
\mypie{\testpie}
\end{tikzpicture}
\end{document}