在 \pgfplotsset 中调用 PGF/FPU

在 \pgfplotsset 中调用 PGF/FPU

当我尝试获取包含大量数字的表的最大值时,我遇到了一个问题。以下是两个小的 MWE:

通过这个简单的比较,我得到了两个数字中较大的一个:

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat = newest}

\begin{document}

\pgfkeys{/pgf/fpu=true,/pgf/fpu/output format=fixed}
\pgfmathsetmacro\a{100000}
\pgfmathsetmacro\b{200000}
\pgfmathparse{\a > \b ? \a: \b}
\edef\c{\pgfmathresult}
Larger number: \c
\pgfkeys{/pgf/fpu=false}

\end{document}

但是,如果我将该比较放入.code处理程序中\pgfplotsset,则会收到“尺寸太大”错误。

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{compat = newest}
\usepgfplotslibrary{groupplots,dateplot}
\begin{document}
\begin{tikzpicture}

\pgfplotsset{%
    test/.code={%
        \pgfkeys{/pgf/fpu=true,/pgf/fpu/output format=fixed}
        \pgfmathsetmacro\a{100000}
        \pgfmathsetmacro\b{200000}
        \pgfmathparse{\a > \b ? \a: \b}
        \edef\c{\pgfmathresult}
        Larger number: \c
        \pgfkeys{/pgf/fpu=false}
    }
}

\begin{axis}[test]

\end{axis}
\end{tikzpicture}
\end{document}

似乎 fpu 库的调用在这里不起作用。你能帮我解决这个问题吗?

答案1

一个直接的解决方法是在axiz环境之前进行计算,可能在外部tikzpicture环境内部进行计算。

\documentclass[tikz, margin=5pt]{standalone}
% \usetikzlibrary{calc}
\usepackage{pgfplots}
% \usepackage{pgfplotstable}
\pgfplotsset{compat = 1.18}
% \usepgfplotslibrary{groupplots,dateplot}

\usepackage{etoolbox}

\begin{document}
\begin{tikzpicture}
  \pgfkeys{/pgf/fpu=true,/pgf/fpu/output format=fixed}
  \pgfmathsetmacro\c{max(100000,200000)}
  \pgfkeys{/pgf/fpu=false}
  
  \begin{axis}[ymax=\c/10000] % ymax is set to 20 successfully
    \addplot coordinates {(1,1) (2,2)};
  \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

更新

如果计算结果(\c如上例所示)仅使用一次,则只需使用

\begin{axis}[ymax={max(100000,200000)/10000}]

相关内容