TeXLive2016 中的 pgf isprime() 损坏

TeXLive2016 中的 pgf isprime() 损坏

看来isprime()TeXLive 2016(带有最新软件包)中存在问题。

下面的 MWE 来自给定一个素数列表,如何绘制 π(x)?使用 TeXLIve2015 可以正常工作,但使用 TeXLive2016 时会失败:

包 PGF 数学错误:抱歉,运算“isprime”尚未在浮点单元中实现(在“isprime(0.0e0)”中)。

但是,一个更简单的测试用例(参见下面的 MWE 2)有效吗?

相关问题:

问题:

  • 是不是我的某个软件包不是最新的?
  • 有补丁吗?这在 TeXLive2017 测试版中是否仍然存在问题?

文件列表

 article.cls    2014/09/29 v1.4h Standard LaTeX document class
  size10.clo    2014/09/29 v1.4h Standard LaTeX file (size option)
pgfplots.sty    2016/08/10 v1.14 Data Visualization (1.14)
graphicx.sty    2014/10/28 v1.0g Enhanced LaTeX Graphics (DPC,SPQR)
  keyval.sty    2014/10/28 v1.15 key=value parser (DPC)
graphics.sty    2016/10/09 v1.0u Standard LaTeX Graphics (DPC,SPQR)
    trig.sty    2016/01/03 v1.10 sin cos tan (DPC)
graphics.cfg    2016/06/04 v1.11 sample graphics configuration
  pdftex.def    2017/01/12 v0.06k Graphics/color for pdfTeX
infwarerr.sty   2016/05/16 v1.4 Providing info/warning/error messages (HO)
 ltxcmds.sty    2016/05/16 v1.23 LaTeX kernel commands for general use (HO)
    tikz.sty    2015/08/07 v3.0.1a (rcs-revision 1.151)
     pgf.sty    2015/08/07 v3.0.1a (rcs-revision 1.15)
  pgfrcs.sty    2015/08/07 v3.0.1a (rcs-revision 1.31)
everyshi.sty    2001/05/15 v3.00 EveryShipout Package (MS)
  pgfrcs.code.tex
 pgfcore.sty    2010/04/11 v3.0.1a (rcs-revision 1.7)
  pgfsys.sty    2014/07/09 v3.0.1a (rcs-revision 1.48)
  pgfsys.code.tex
pgfsyssoftpath.code.tex    2013/09/09  (rcs-revision 1.9)
pgfsysprotocol.code.tex    2006/10/16  (rcs-revision 1.4)
  xcolor.sty    2016/05/11 v2.12 LaTeX color extensions (UK)
   color.cfg    2016/01/02 v1.6 sample color configuration
 pgfcore.code.tex
pgfcomp-version-0-65.sty    2007/07/03 v3.0.1a (rcs-revision 1.7)
pgfcomp-version-1-18.sty    2007/07/23 v3.0.1a (rcs-revision 1.1)
  pgffor.sty        2013/12/13 v3.0.1a (rcs-revision 1.25)
 pgfkeys.sty    
 pgfkeys.code.tex
 pgfmath.sty    
 pgfmath.code.tex
  pgffor.code.tex
    tikz.code.tex
pgfplotstable.sty   2016/08/10 v1.14 Table typesetting and Pretty-printing (1.14)
   array.sty        2016/10/06 v2.4d Tabular extension package (FMi)
supp-pdf.mkii
pdftexcmds.sty      2017/03/19 v0.25 Utility functions of pdfTeX for LuaTeX (HO)
ifluatex.sty        2016/05/16 v1.4 Provides the ifluatex switch (HO)
   ifpdf.sty        2017/03/15 v3.2 Provides the ifpdf switch
epstopdf-base.sty   2016/05/15 v2.6 Base part for package epstopdf
  grfext.sty        2016/05/16 v1.2 Manage graphics extensions (HO)
kvdefinekeys.sty    2016/05/16 v1.4 Define keys (HO)
kvoptions.sty       2016/05/16 v3.12 Key value format for package options (HO)
kvsetkeys.sty       2016/05/16 v1.17 Key value parser (HO)
etexcmds.sty        2016/05/16 v1.6 Avoid name clashes with e-TeX commands (HO)
epstopdf-sys.cfg    2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Live                                         

代码:失败

\documentclass{article}
\usepackage{pgfplots, pgfplotstable}
\pgfplotsset{compat=newest}

\begin{document}%% https://tex.stackexchange.com/a/286911/4301
\pgfplotstablenew[
    create on use/x/.style={
        create col/expr={
            \pgfplotstablerow
        }
    },
    create on use/isprime/.style={
        create col/assign/.code={% Can't use "expr" here because "isint" doesn't work reliably with the FPU engine at the moment
            \pgfmathparse{isprime(\thisrow{x})}%
            \pgfkeyslet{/pgfplots/table/create col/next content}\pgfmathresult%
        }
    },
    create on use/primecount/.style={
        create col/expr={
            \pgfmathaccuma + \thisrow{isprime}
        }
    },
    columns={x, isprime, primecount}
]{25}\loadedtable

\begin{tikzpicture}
\begin{axis}[
  title={The prime counting function: $\pi(x)$},
  xlabel=$x$,
  ylabel=$\pi(x)$,
  ]
\addplot[only marks] table [x=x, y=primecount] {\loadedtable};
\end{axis}
\end{tikzpicture}
\end{document}

代码:作品

\documentclass{article}
\usepackage{tikz}

\newcommand{\IsThisPrime}[1]{%
    \par#1: \pgfmathparse{isprime(#1)}
    \ifnum\pgfmathresult=0
        is not prime.
    \else
        is prime.
    \fi
}%

\begin{document}
\foreach \i in {1, ..., 10} {%
    \IsThisPrime{\i}
}%
\end{document}

答案1

在此处输入图片描述

显然错误信息是正确的并且它没有定义。

你可以定义它(有比这更有效的素数测试)

\documentclass{article}
\usepackage{pgfplots, pgfplotstable}
\pgfplotsset{compat=newest}

\makeatletter
\pgfmathdeclarefunction*{isprime}{1}{%
\dimen@#1\p@
\edef\pgfmathresult{%
\ifdim\dimen@=2pt 1\else
\ifdim\dimen@=3pt 1\else
\ifdim\dimen@=5pt 1\else
\ifdim\dimen@=7pt 1\else
\ifdim\dimen@=11pt 1\else
\ifdim\dimen@=13pt 1\else
\ifdim\dimen@=17pt 1\else
\ifdim\dimen@=19pt 1\else
\ifdim\dimen@=23pt 1\else
0%
\fi\fi\fi\fi\fi\fi\fi\fi\fi
}
}
\makeatother

\begin{document}%% https://tex.stackexchange.com/a/286911/4301
\pgfplotstablenew[
    create on use/x/.style={
        create col/expr={
            \pgfplotstablerow
        }
    },
    create on use/isprime/.style={
        create col/assign/.code={% Can't use "expr" here because "isint" doesn't work reliably with the FPU engine at the moment
            \pgfmathparse{isprime(round(\thisrow{x}))}%
            \pgfkeyslet{/pgfplots/table/create col/next content}\pgfmathresult%
        }
    },
    create on use/primecount/.style={
        create col/expr={
            \pgfmathaccuma + \thisrow{isprime}
        }
    },
    columns={x, isprime, primecount}
]{25}\loadedtable

\begin{tikzpicture}
\begin{axis}[
  title={The prime counting function: $\pi(x)$},
  xlabel=$x$,
  ylabel=$\pi(x)$,
  ]
\addplot[only marks] table [x=x, y=primecount] {\loadedtable};
\end{axis}
\end{tikzpicture}
\end{document}

相关内容