pgfplots 似乎破坏了 tikz:“操作‘div’尚未实施”

pgfplots 似乎破坏了 tikz:“操作‘div’尚未实施”

我遇到了一个问题,pgfplots似乎无法使用tikz。 下面是一个 MWE。 我收到错误消息,表示div尚未实现,这当然不是真的。 如果我注释掉我标记的行,一切都会好起来。

这是 MiKTeX 2.9,所有软件包均已更新。

我发现这篇旧文章这个这两个似乎都处理相同的问题,但我不知道如何将那里显示的解决方案应用于我的问题。我没有(至少没有明确地)在任何地方使用 FPU 库,是吗?

\documentclass{article}

\usepackage{tikz}
\usepackage{pgfplots}  % <- here's the culprit

\begin{document}
\begin{tikzpicture}[xscale=.8, yscale=-0.8]
  \foreach \n in {2, ..., 118} {
    \pgfmathsetmacro{\x}{mod(int(\n - 2),13)}
    \pgfmathsetmacro{\y}{div(int(\n - 2),13)}
    \pgfmathsetmacro{\c}{ifthenelse(isprime(\n),10,0)}
    \fill[black!\c!white] (\x,\y) rectangle +(.85cm,.6cm);
  }
\end{tikzpicture}
\end{document}

答案1

根据此问答:'pgfplots' 包的存在会破坏启用了 'folder' 选项的 'forest' 环境(由于 FPU)我得到以下解决方案:

代替

\usepackage{pgfplots}

\makeatletter
\let\pgfmathdivX=\pgfmathdiv@
\let\pgfmathisprimeX=\pgfmathisprime@
\usepackage{pgfplots}
\let\pgfmathdiv@=\pgfmathdivX 
\let\pgfmathisprime@=\pgfmathisprimeX 
\makeatother

实际上,div如果表达式写为int(\n - 2)/13而不是,则可以省略 部分div(int(\n - 2),13)

梅威瑟:

\documentclass{article}

\usepackage{tikz}

\makeatletter
\let\pgfmathisprimeX=\pgfmathisprime@
\usepackage{pgfplots}
\let\pgfmathisprime@=\pgfmathisprimeX 
\makeatother

\begin{document}
\begin{tikzpicture}[xscale=.8, yscale=-0.8]
  \foreach \n in {2, ..., 118} {
    \pgfmathsetmacro{\x}{mod(int(\n - 2),13)}
    \pgfmathsetmacro{\y}{int(\n - 2)/13}
    \pgfmathsetmacro{\c}{ifthenelse(isprime(\n),10,0)}
    \fill[black!\c!white] (\x,\y) rectangle +(.85cm,.6cm);
  }
\end{tikzpicture}
\end{document}

相关内容