兴趣曲线标注尺寸过大错误

兴趣曲线标注尺寸过大错误

我在玩 Hobby 曲线和标记时遇到了一个奇怪的错误。请考虑以下代码

\documentclass[tikz]{standalone}

\usetikzlibrary{decorations,decorations.markings,hobby}

\begin{document}
\begin{tikzpicture}
\draw[use Hobby shortcut,decorate,decoration={markings, 
mark=between positions 0 and 1 step 0.3pt with }] (1,0.00001)..(1.2685,0.00001);
\end{tikzpicture}
\end{document}

它会抛出Dimension too large错误。但是,将 1.2685 的值稍微增加一点(增加到 1.269 或更高)会使错误消失,但用 1.26855 替换它会使相同的错误再次出现。更有趣的是,使用 代替(2,0.00001)..(2.2685,0.00001)(1,0.00001)..(1.2685,0.00001)可以的,但(2,0.00001)..(2.2,0.00001)会再次抛出错误。

将 0.00001 改为 0 后,错误又消失了。0.3pt 值的变化似乎不会影响错误的发生。

这是怎么回事?阈值 1.2685 的由来是什么?当我们将所有内容移动 (0,1) 时,为什么这个阈值会发生变化?而且,最重要的是,这个错误实际上会导致生成的 PDF 出现错误吗?在我更复杂的有此类问题的文档中,我从未注意到此Dimension too large错误对 PDF 有任何影响,这让我更加困惑。如果这很重要,我会使用 Overleaf。

答案1

对于 tkz-euclide,此错误是由于使用的veclen值太小而导致的。在我的例子中,错误来自decoration。我不知道这是否veclen是唯一产生此错误的函数。

为了解决这个问题,我使用了一个选项(薛定谔的猫想法),我将其与一个范围一起使用以限制其作用(浪费时间)。这个想法是暂时通过 执行 的计算veclenxfp我们lua也可以使用。

唯一的问题是我从未使用过,hobby所以我不知道,如果没有更多错误,我就不会得到结果。

\documentclass[tikz]{standalone}
\usepackage{xfp}
\usetikzlibrary{decorations,decorations.markings,hobby}
\makeatletter
% Schrodinger's cat idea 03/01/20
\tikzset{xfp/.code={%
\pgfmathdeclarefunction*{veclen}{2}{%
\begingroup%
    \pgfmath@x##1pt\relax%
    \pgfmath@y##2pt\relax%
    \edef\tkz@xfpMathLen{\fpeval{sqrt((\pgf@x)^2+(\pgf@y)^2)}}
    \pgfmath@returnone\tkz@xfpMathLen pt%
\endgroup%
}}}
\makeatother 

\begin{document}
\begin{tikzpicture}
\begin{scope}[xfp]
  \draw[use Hobby shortcut,decorate,decoration={markings, 
  mark=between positions 0 and 1 step 0.3pt with {.} }] (1,0.00001)..(1.2685,0.00001);
\end{scope}

\end{tikzpicture}
\end{document}

相关内容