![程序包 PGF 数学错误:抱歉,浮点单元的内部例程](https://linux22.com/image/273265/%E7%A8%8B%E5%BA%8F%E5%8C%85%20PGF%20%E6%95%B0%E5%AD%A6%E9%94%99%E8%AF%AF%EF%BC%9A%E6%8A%B1%E6%AD%89%EF%BC%8C%E6%B5%AE%E7%82%B9%E5%8D%95%E5%85%83%E7%9A%84%E5%86%85%E9%83%A8%E4%BE%8B%E7%A8%8B.png)
这种类型的错误(!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}