当我尝试获取包含大量数字的表的最大值时,我遇到了一个问题。以下是两个小的 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}]