如何解决错误“尺寸太大”。\pgfmath@x' 在表格中进行计算时

如何解决错误“尺寸太大”。\pgfmath@x' 在表格中进行计算时

需要结合两个三个值进行表格中的计算,我已给出代码

\documentclass[11pt,a4paper]{article}
\usepackage{array}
\newcolumntype{L}{>{\centering\arraybackslash}m{3cm}}
\usepackage{amsmath}
\usepackage{graphicx,float}
\usepackage{xcolor}
\usepackage{pgfmath}
\usepackage{calculator}
\usepackage{calculus}
\begin{document}
\flushleft
{\color{blue}
\LARGE{Powerloss Table}
}
\begin{table}[!hbt]
\begin{tabular}{|l|l|l|}\hline
 \pgfmathsetmacro{\tmp}{16383}
            % \pgfmathsetmacro{\tmp}{16384} % Error
Fault type & No of Modules Affected & Approx.power loss(W) \\\hline
    Table & 50 &\pgfmathparse{int(round(50*250))}\pgfmathresult \\\hline
Module & 20 &\pgfmathparse{int(round(20*250))}\pgfmathresult \\\hline
String & 57&\pgfmathparse{int(round(57*84))}\pgfmathresult \\\hline
Total approx. power loss (W) &\pgfmathparse{int(round(50*250)+(20*250)+(57*84))}\pgfmathresult \\\hline
Total approx. power loss (KW) &\pgfmathparse{int(round((50*250)+(20*250)+(57*84)/1000))}\pgfmathresult \\\hline
Total approx. power loss (MW) &\pgfmathparse{int(round((50*250)+(20*250)+(57*84)/1000000))}\pgfmathresult \\\hline
\end{tabular}
\end{table}
\end{document}

....

获取错误为

尺寸太大。\pgfmath@x

l.23 ...解析{int(round(50*250)+(20*250)+(57*84))} \pgfmathresult \\hline ? ....

答案1

解决方案可以在回答薛定谔的猫。我的回答提供了一些关于为什么会出现错误的解释Dimension too large

  • TeX 没有内置浮点数表示,所有维度都内部存储在一个相当小的单位 中sp,其中1pt = 65536sp。除了pgffpuxfp包之外,LaTeX3 内核还附带一个l3fp模块。(自 LaTeX2e 2020-02-02 起,LaTeX3 内核已打包为 LaTeX2e 格式。)
  • TeX 格式(如 plainTeX 和 LaTeX2e)提供了一个维度\maxdimen,初始化为16383.99999pt,用于存储最大合法维度。因此 TeX 中的合法维度范围是[-\maxdimen, \maxdimen]。(请注意,当您使用\the\maxdimen输出值时,可能会16383.99998pt因四舍五入而得到 。)
  • \pgfmathparse用作pt默认单位。因此\pgfmathparse{1}\pgfmathparse{1pt}相同。这解释了为什么\pgfmathsetmacro{\tmp}{16384}\pgfmathparseFPU{int(round(50*250)+(20*250)+(57*84))}(50 * 250 * 2 = 25,000 > 16,384)都会引起错误。

答案2

TeX 有一个最大维度,这是一个众所周知的问题。有多种方法可以解决这个问题。在这里,我加载库fpu并在本地打开它。有多种替代方案,当然包括 nicexfp包。

\documentclass[11pt,a4paper]{article}
\usepackage{geometry}
\usepackage{array}
\newcolumntype{L}{>{\centering\arraybackslash}m{3cm}}
\usepackage{amsmath}
\usepackage{pgf,pgfmath}
\usepgflibrary{fpu}
\newcommand\pgfmathparseFPU[1]{\begingroup%
\pgfkeys{/pgf/fpu,/pgf/fpu/output format=fixed}%
\pgfmathparse{#1}%
\pgfmathsmuggle\pgfmathresult\endgroup}%
\begin{document}
\flushleft
{\color{blue}
\LARGE{Powerloss Table}
}
\begin{table}[!hbt]
\begin{tabular}{|l|l|l|}\hline
 \pgfmathsetmacro{\tmp}{16383}
            % \pgfmathsetmacro{\tmp}{16384} % Error
Fault type & No of Modules Affected & Approx.power loss(W) \\\hline
    Table & 50 &\pgfmathparseFPU{int(round(50*250))}\pgfmathprintnumber\pgfmathresult \\\hline
Module & 20 &\pgfmathparseFPU{int(round(20*250))}\pgfmathprintnumber\pgfmathresult \\\hline
String & 57&\pgfmathparseFPU{int(round(57*84))}\pgfmathprintnumber\pgfmathresult \\\hline
Total approx. power loss (W) & & \pgfmathparseFPU{int(round(50*250)+(20*250)+(57*84))}\pgfmathprintnumber\pgfmathresult \\\hline
Total approx. power loss (KW) && \pgfmathparseFPU{int(round((50*250)+(20*250)+(57*84)/1000))}\pgfmathprintnumber\pgfmathresult \\\hline
Total approx. power loss (MW) &&\pgfmathparseFPU{int(round((50*250)+(20*250)+(57*84)/1000000))}\pgfmathprintnumber\pgfmathresult \\\hline
\end{tabular}
\end{table}
\end{document}

在此处输入图片描述

请注意,我添加了空列和geometry包,因为表格有点太宽了。不过,这都是题外话。

附录:这是具有不同包围的版本,我从您的评论中获得了数字。

\documentclass[11pt,a4paper]{article}
\usepackage{geometry}
\usepackage{array}
\newcolumntype{L}{>{\centering\arraybackslash}m{3cm}}
\usepackage{amsmath}
\usepackage{pgf,pgfmath}
\usepgflibrary{fpu}
\newcommand\pgfmathparseFPU[1]{\begingroup%
\pgfkeys{/pgf/fpu,/pgf/fpu/output format=fixed}%
\pgfmathparse{#1}%
\pgfmathsmuggle\pgfmathresult\endgroup}%
\begin{document}
\flushleft
{\color{blue}
\LARGE{Powerloss Table}
}
\begin{table}[!hbt]
\begin{tabular}{|l|l|l|}\hline
 \pgfmathsetmacro{\tmp}{16383}
            % \pgfmathsetmacro{\tmp}{16384} % Error
Fault type & No of Modules Affected & Approx.power loss(W) \\\hline
    Table & 50 &\pgfmathparseFPU{int(round(50*250))}\pgfmathprintnumber\pgfmathresult \\\hline
Module & 20 &\pgfmathparseFPU{int(round(20*250))}\pgfmathprintnumber\pgfmathresult \\\hline
String & 57&\pgfmathparseFPU{int(round(57*84))}\pgfmathprintnumber\pgfmathresult \\\hline
Total approx. power loss (W) & & \pgfmathparseFPU{int(round(50*250)+(20*250)+(57*84))}\pgfmathprintnumber\pgfmathresult \\\hline
Total approx. power loss (KW) && \pgfmathparseFPU{((50*250)+(20*250)+(57*84))/1000}\pgfmathprintnumber\pgfmathresult \\\hline
Total approx. power loss (MW) &&\pgfmathparseFPU{(50*250)+(20*250)+(57*84))/1000000}\pgfmathresult \\\hline
\end{tabular}
\end{table}
\end{document}

在此处输入图片描述

请注意

\pgfmathparseFPU{(50*250)+(20*250)+(57*84))/1000000}

除以整数和

\pgfmathparseFPU{int(round((50*250)+(20*250)+(57*84)/1000000))}

仅除最后一项(并截断结果)。

相关内容