`pgfmath` 和 `pgfplots` 发生冲突

`pgfmath` 和 `pgfplots` 发生冲突

myRandomInteger在包下工作正常pgfmath。如果包pgfplots也加载,!Package PGF Math Error: Sorry, the operation 'random' has not yet been implemented in the floating point unit (in 'random(1,10000)'). ...则会出现编译错误。我想使用可用random的功能。有运气吗?pgfmathpgfplots

\documentclass{article}
%  RN. 23 November 2016
%  DESCRIPTION: clash of pgfmath and pgfplots packages.
\usepackage{xparse} 
\usepackage{pgfmath}
%\usepackage{pgfplots} 
%\pgfplotsset{compat=1.13} 
\ExplSyntaxOn
\cs_new:Npn \rn_RandomInteger:nn #1#2
  {
    \pgfmathparse{random(#1,#2)}
  }
\NewDocumentCommand\myRandomInteger{O{1}O{100}}
  {
    \rn_RandomInteger:nn {#1}{#2}
    \pgfmathresult
  }
\ExplSyntaxOff
\begin{document}
    \myRandomInteger,
    \myRandomInteger, 
    \myRandomInteger

    \myRandomInteger[1][10000],
    \myRandomInteger[1][10000],
    \myRandomInteger[1][10000]

    \myRandomInteger[1][5],
    \myRandomInteger[1][5],
    \myRandomInteger[1][5]
\end{document}

答案1

这是由于fpu库中的一个错误造成的,具体解释如下Christian Feuersänger 的回答。修改那里提供的解决方法以满足您的需要,我们可以编写以下内容以使事情正常运转。

\documentclass{article}
\usepackage{xparse}
\usepackage{pgfmath}
% adapted from ateb Christian Feuersänger: https://tex.stackexchange.com/a/330076/
\makeatletter
\let\pgfmathrandomX=\pgfmathrandom@
\usepackage{pgfplots}
\let\pgfmathrandom@=\pgfmathrandomX
\makeatother
\ExplSyntaxOn
\cs_new:Npn \rn_RandomInteger:nn #1#2
  {
    \pgfmathparse{random(#1,#2)}
  }
\NewDocumentCommand\myRandomInteger{O{1}O{100}}
  {
    \rn_RandomInteger:nn {#1}{#2}
    \pgfmathresult
  }
\ExplSyntaxOff
\begin{document}
    \myRandomInteger,
    \myRandomInteger,
    \myRandomInteger

    \myRandomInteger[1][10000],
    \myRandomInteger[1][10000],
    \myRandomInteger[1][10000]

    \myRandomInteger[1][5],
    \myRandomInteger[1][5],
    \myRandomInteger[1][5]
\end{document}

相关内容