这种类型的错误(!PGF 软件包数学错误:抱歉,浮点单元的内部例程得到了一个格式错误的浮点数...)在尝试使用预定义列表时出现\pgfplotsforeachungrouped
。此问题与参数研究有关,其中所有重要参数都放入列表中,例如创建曲线族表。
以下 MWE 显示编译错误:
\documentclass[border=1mm]{standalone}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.8}
\pgfplotstableread{
1
2
3
4
5
}\dataQuad
\newcommand{\param}{2,3,4,5}
\pgfplotsforeachungrouped \y in \param {%
\pgfplotstablecreatecol[
create col/expr={\thisrow{0}^\y}
]{\y}\dataQuad
}
\begin{document}
\begin{minipage}[c]{0.75\textwidth}
\begin{tikzpicture}
\begin{axis}[%
legend pos=north west,
domain=0:5,
cycle list={green, red, black, purple, orange},
xlabel=${x}$,
ylabel=${y}$]
\pgfplotsinvokeforeach{2,...,5}{
\addplot +[smooth] table [x index=0, y=#1] \dataQuad;
}
\end{axis}
\end{tikzpicture}
\end{minipage}
\begin{minipage}[c]{0.75\textwidth}
\pgfplotstabletypeset\dataQuad
\end{minipage}
\end{document}
这里讨论了类似的问题在 TikZ/PGFplots 中使用宏定义列表,但并没有针对这个特定问题带来任何解决方案。
到目前为止,我使用\newcommand{\paramA}{2}
、\newcommand{\paramB}{3}
等并通过循环\pgfplotsforeachungrouped \y in {\paramA,...,\paramE} {%
。这样做的主要缺点是当我需要更改参数数量时。
有人能有更优雅的方式来使用预定义参数列表,该列表可用于每种循环类型,如\foreach
、\pgfplotsforeachungrouped
和\pgfplotsinvokeforeach
。任何提示都非常感谢!
答案1
您可以使用\pgfplotsinvokeforeach
一些\expandafter
技巧:
\documentclass[border=1mm]{standalone}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.8}
\pgfplotstableread{
1
2
3
4
5
}\dataQuad
\newcommand{\param}{2,3,4,5}
\expandafter\pgfplotsinvokeforeach\expandafter{\param}{%
\pgfplotstablecreatecol[
create col/expr={\thisrow{0}^#1}
]{#1}\dataQuad
}
\begin{document}
\begin{minipage}[c]{0.75\textwidth}
\begin{tikzpicture}
\begin{axis}[%
legend pos=north west,
domain=0:5,
cycle list={green, red, black, purple, orange},
xlabel=${x}$,
ylabel=${y}$]
\pgfplotsinvokeforeach{2,...,5}{
\addplot +[smooth] table [x index=0, y=#1] \dataQuad;
}
\end{axis}
\end{tikzpicture}
\end{minipage}
\begin{minipage}[c]{0.75\textwidth}
\pgfplotstabletypeset\dataQuad
\end{minipage}
\end{document}