使用 \draw 命令中的“向左弯曲”会导致“尺寸太大”错误

使用 \draw 命令中的“向左弯曲”会导致“尺寸太大”错误

这是我的 MWE:

\documentclass{standalone}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}

\pgfmathsetmacro{\cell}{256}

\draw [help lines] (0,0) grid (\cell,\cell);
\foreach \i in {0,8,...,\cell} {
\draw[thick,blue!50] (0,\i) -- (\cell,\i);
\draw[thick,blue!50] (\i,0) -- (\i,\cell);
}

\draw[line width=20pt] (10,10) to (246,10) to (246,246) to[bend left] (10,246) -- cycle;

\end{tikzpicture}
\end{document}

当我尝试编译此代码时,出现以下错误:

<recently read> \pgf@xa

l.25 ...46,10) to (246,246) to[bend left] (10,246)
                                               -- cycle;
?

当我删除时,[bend left]错误消失了。奇怪的是,如果我enter在遇到错误时按下,代码就会正确编译。但是,我不知道问题是什么。

答案1

您的问题中缺少错误消息本身,但它基本上是不言自明的:您要求 TeX 处理超过其可以处理的最大值的尺寸 - 大约 19'。

令人困惑的是,虽然你的图表很大(超过 2.5 米 x 2.5 米),但它似乎并不大的。

问题是,为了绘制曲线,TeX 必须进行一些计算。这些计算涉及超出最大值的尺寸,即使最终图像的尺寸没有超出最大值。

当您忽略错误时,代码可以编译但不正确。要正确编译,如果 TeX 没有最大尺寸,并且其最大尺寸超过了执行计算所需的最大尺寸,则需要生成您期望的输出。这是不可能的,因此它会尝试尽可能接近。结果是一条曲线,但不完全是所要求的曲线。

这是一个经过修改的示例,其尺寸更加合理:

\documentclass[tikz,border=10pt]{standalone}

\begin{document}
\begin{tikzpicture}

\pgfmathsetmacro{\cell}{10}

\draw [help lines] (0,0) grid (\cell,\cell);
\foreach \i in {0,8,...,\cell} {
\draw[thick,blue!50] (0,\i) -- (\cell,\i);
\draw[thick,blue!50] (\i,0) -- (\i,\cell);
}

\draw[line width=2pt] (.1,.1) to (9.9,.1) to (9.9,9.9) to[bend left] (.1,9.9) -- cycle;

\end{tikzpicture}
\end{document}

编译无误,产生以下内容。

工作示例

为了发现代码的结果并不正确,我们可以扩展示例来展示曲线随着维度的增加如何变化。

尺寸增大时的曲线变化

\documentclass[tikz,border=10pt]{standalone}

\begin{document}
\begin{tikzpicture}

\pgfmathsetmacro{\cell}{20}

\draw [help lines] (0,0) grid (\cell,\cell);
\foreach \i in {0,8,...,\cell} {
  \draw[thick,blue!50] (0,\i) -- (\cell,\i);
  \draw[thick,blue!50] (\i,0) -- (\i,\cell);
}

\foreach \i [evaluate=\i as \j using int(19-\i)] in {0,...,9}
  \draw[line width=2pt] (\i.1,\i.1) to (\j.9,\i.1) to (\j.9,\j.9) to[bend left] (\i.1,\j.9) -- cycle;

\end{tikzpicture}
\end{document}

现在想想如果图像宽度超过 2.5 米,曲线会是什么样子......

相关内容