关于 pgfmath 的问题

关于 pgfmath 的问题
\pgfkeys{/pgf/fpu} 

\pgfmathsetlengthmacro\x{5^2}
\show\x -> 25.0pt % OK, thanks.

\pgfmathparse{5cm^2}
  1. ]以下中的意思是什么?

    \show\pgfmathresult % ->1Y2.0238983e4].
    
    \pgfkeys{/pgf/fpu/output format=sci}
    

    给出了预期的格式,但是神秘的是什么]

  2. 为什么会失败?单位不允许吗{<expr>}?手册上说\pgfmathsetlengthmacro“定义<macro>为以点为单位的值<expression>。”

    \pgfmathsetlengthmacro\y{5cm^2} % ! Illegal unit.
    \pgfmathsetlengthmacro\y{5^2cm} % ! Illegal unit.
    \show\y
    

编辑

这是一个简单的例子:

\documentclass{article}
\usepackage{pgfplots}

\begin{document}
\pgfkeys{/pgf/fpu}
\pgfkeys{/pgf/fpu/output format=sci}
\pgfmathparse{5cm^2}
%\show\pgfmathresult % -> 2.0238983e4.

% Both of these give error:
\pgfmathsetlengthmacro\x{5mm^2}
\pgfmathsetlengthmacro\x{5^2}

\pgfkeys{/pgf/fpu=false}

\end{document}

Error msg:

! Illegal unit of measure (pt inserted).
<to be read again>
                   e
l.10 \pgfmathsetlengthmacro\x{5mm^2}

答案1

1Y2.0238983e4]数字的内部表示。使用 时,fpu您必须明确指定输出格式或使用\pgfmathfloattofixed。默认格式为float(使用Y]),\pgfmathsetlengthmacro不会被fpu库更改,因此长度不是具有 格式的有效 TeX 长度float。示例:

\documentclass{article}
\usepackage{pgf}
\usepgflibrary{fpu}

\begingroup
  \pgfkeys{/pgf/fpu,/pgf/fpu/output format=fixed}
  \pgfmathsetlengthmacro\x{5^2}
  \typeout{\x}
\endgroup

\begingroup
  \pgfkeys{/pgf/fpu}
  \pgfmathparse{5^2}
  \pgfmathfloattofixed{\pgfmathresult}
  \edef\x{\pgfmathresult pt}
  \typeout{\x}
\endgroup

\begingroup
  \pgfkeys{/pgf/fpu,/pgf/fpu/output format=fixed}
  \pgfmathparse{5cm^2}
  \typeout{\pgfmathresult}
\endgroup

\begin{document}
\end{document}

结果:

25.0pt
25.000000000pt
20238.983000000000

更多详情36 浮点单元库

相关内容