程序包 PGF 数学错误:抱歉,浮点单元的内部例程

程序包 PGF 数学错误:抱歉,浮点单元的内部例程

这种类型的错误(!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}

相关内容