避免 tikz 中的“尺寸过大”和“浮点格式错误”错误

避免 tikz 中的“尺寸过大”和“浮点格式错误”错误

我正在尝试使用 tikz 和装饰库绘制一些图片,但遇到了“尺寸太大”错误。我已阅读了有关此错误的 20 多个其他问题/答案,但未发现它们包含适用于我的情况的解决方案。(如果我遗漏了什么,请见谅。)具体来说,大多数这些问题似乎与使用 pgf 进行计算有关,而我只是用它来绘图,错误出现在 tikz 内部计算其线条路径的某个过程中。

直奔主题,下面是 MWE:

\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}
%\usetikzlibrary{fpu}
%\pgfkeys{/pgf/fpu=true, /pgf/fpu/output format=fixed}

\tikzset{
    fuzzleft/.style={
    preaction={draw,line width=2.5pt,black!25,decorate,decoration={curveto,raise=1.25pt}}}
}

\begin{document}
\begin{tikzpicture}
    \draw[fuzzleft] (0,.5) arc (0:180:.2);
\end{tikzpicture}
\begin{tikzpicture}
    \draw[fuzzleft] (0,.5) arc (0:180:.17);
\end{tikzpicture}
\end{document}

第一个 tikzpicture 编译成功,第二个则不行。当我按照各种答案的建议,输入 fpu 和 \pgfkeys 行(上面已注释掉)时,我得到了“格式错误的浮点”错误。

(涉及修改图片代码本身的解决方案(例如缩放和更改数字以获得相同的图像,更改特定的绘图命令或方法等)对我没有帮助---我在每张图片上都想出了这样的黑客攻击,但最终这些黑客攻击本身在我实际的更复杂的图片上变得不可行。)

答案1

您能做的不多。问题出在 TeX 上,打开 fpu 库对您没有帮助。这样看,TikZ 依赖 TeX 长度寄存器和其他与 TeX 相关的机制来计算路径。然后将其作为路径发送给驱动程序。

现在,驱动程序非常擅长缩小对象。但您的对象描述永远不会到达驱动程序。因为 TeX 无法处理您向其提出的计算。因为非常古老但仍然闪亮的齿轮无法处理任何如此精确的东西。通过我的意思是,由于您指定的线宽,弧长非常小(对于这样的弧来说,它太粗了)。所以它仍然是同一件事。就像其他答案一样,您也受到了 PGF 计算的影响。

打开fpu库并不能立即解决问题,因为大多数内部 PGF 命令无法与它很好地通信,正如您在打开它时注意到的那样。我会考虑重新绘制更好、更大的图像,然后缩小它。我不知道你为什么需要这么小的对象,但如果你想创建符号等,可能还有其他方法。

作为概念证明,请考虑这一点(在 AcroRead 中放大 6400%)

\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}
\tikzset{
    fuzzleft/.style={
    preaction={draw,line width=20pt,black!25,decorate,decoration={curveto,raise=1.25pt}}
    }
}
\begin{document}
\scalebox{0.05}{%
\begin{tikzpicture}[scale=5]
    \draw[fuzzleft,line width=2pt] (0,.5) arc (0:180:.17);
\end{tikzpicture}%
}
\end{document}

在此处输入图片描述

一旦你能画出来,你就可以将其放大。但在你的例子中,你无法画出来。

相关内容