pgf-pie 和 \newcommand 使用问题

pgf-pie 和 \newcommand 使用问题

我目前正在使用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}

在此处输入图片描述

相关内容