调试 TikZ/PGF 代码有哪些技巧和窍门?

调试 TikZ/PGF 代码有哪些技巧和窍门?

在回答这里的问题以及绘制我自己的复杂 TikZ/PGF 绘图时,我已经开发出大量用于调试代码的“技巧和窍门”。我相信其他人也有。我认为积累一份这样的清单会很有用,因此这个问题:

您调试 TikZ/PGF 代码的技巧和窍门是什么?


笔记:从某种意义上说,这似乎是制作社区 Wiki 的明显候选者,因为没有单一的答案。但是,我认为这些技巧需要一些独创性,因此值得为作者赢得一点声誉,因此我不愿意将其作为 CW 问题(当然,我会将我从这个问题中获得的所有声誉捐赠给有价值的事业)。一旦有相当多的答案,我就会发现将它们组织成一个 CW 答案是一件好事,但这并不意味着问题应该是 CW。另一方面,虽然赞成它不是 CW,但如果感觉它应该是 CW,我无论如何也不会感到不安。

答案1

我先从show node name关键点开始。这在尝试找出复杂节点名称无法正常工作的原因时非常有用(通常是因为句号不请自来)。

代码如下:

\makeatletter
\tikzset{%
  show node name/.code={%
    \expandafter\def\expandafter\tikz@mode\expandafter{\tikz@mode\show\tikz@fig@name}%
    }
}
\makeatother

我们将\show代码添加到宏中\tikz@mode,以确保在调用时设置节点名称。否则\node[show node name] (hello) {};将不起作用。

答案2

标签坐标:

我把这个作为答案的一部分发布在如何用 TikZ 绘制一个所有面都有不同颜色的立方体?,虽然它很明显,而且我仍然在使用它,但我觉得它可能会帮助新用户。

在图片的末尾我添加了一个\foreach循环来标记所有重要的节点,以便我可以看到它们的位置:

%% Following is for debugging purposes so you can see where the points are
%% These are last so that they show up on top
\foreach \xy in {O, A, B, C, D, E, F, G}{
    \node at (\xy) {\xy};
}

这确实需要一定的纪律,不要使用没有标记的坐标。我从来没有删除过这段代码,只是把它注释掉,因为你永远不知道什么时候需要回来做调整。

答案3

有时,人们会收到一条没有上下文的错误信息(例如“无法读取这个号码”)——人们会想知道为什么会这样,以及在哪里。

在这种情况下,我要做的是添加

\tracingmacros=2 \tracingcommands=2

在有问题的位置之前的某个地方。这很容易产生数百兆字节的 .log 文件 - 但它肯定会识别出该位置,因为它是一种 TeX 的“反汇编”。

和任何其他类型的反汇编一样,它很难阅读。但是,如果latex在第一次出错时中止,则可以滚动浏览巨大的日志文件,直到找到看起来熟悉的关键字(如果数字错误,可以找到数字解析例程及其参数)。

答案4

使用不同的颜色来画线

如果我从本网站的示例中复制了代码,或者在坐标不易标记的情况下,我会更改线条颜色,以便于查看代码的哪一部分产生了图表的哪一部分。

以下是最近在这里发帖我试图理解的是:

\begin{tikzpicture}[scale=5,line width=2mm]
\draw [green](0,0,0) -- (1,0,0) -- (1,1,0) -- (0,1,0) -- cycle;
\draw [blue](1,0,0) -- (1,0,-1) -- (1,1,-1) -- (1,1,0) -- cycle;
\draw [red](0,1,0) -- (0,1,-1) -- (1,1,-1) -- (1,1,0) -- cycle;
\end{tikzpicture}

在这种特定情况下,跟踪坐标来查看哪条线是哪条线并不太难,但我发现这在更复杂的情况下非常有用。

相关内容