“circle through” 的参数有什么作用?

“circle through” 的参数有什么作用?

tikz 库through可用于从中心坐标 A 到另一个坐标 B 绘制一个圆圈,如下所示:

\node [draw] at (A) [circle through=(B)] {};

当尝试直接指定要经过的坐标时,即没有命名的经过坐标

\node [draw] at (A) [circle through=(2,2)] {};

并且使用 pdflatex 编译我的文档不仅不起作用而且也没有返回任何错误消息。

它的参数有什么circle through作用?有没有办法在不重写 tikz 库的情况下防止无休止的编译并出现一些错误消息?

工作方式是在花括号中指定坐标

\node [draw] at (A) [circle through={(2,2)}] {};

我猜想through无法通过其他方式正确检索其参数。

请注意pgfmanual 2.10 没有提到这个问题。该调用被描述为/tikz/circle through=<coordinate>(p. 474),并且每当在示例中使用它时,都会使用命名节点。

我正在使用 TeXstudio 2.3,它运行

pdflatex -synctex=1 -interaction=nonstopmode "test-tikzcirclethrough".tex

以下是一个测试文档:

\documentclass[10pt,a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{through}
\begin{document}
\begin{tikzpicture}
\coordinate (A) at (1,2);
\coordinate (B) at (2,2);
% Works
\node [draw] at (A) [circle through={(B)}] {};
\node [draw] at (A) [circle through=(B)] {};
\node [draw] at (A) [circle through={(2,2)}] {};
% Doesn't work
\node [draw] at (A) [circle through=(2,2)] {};
\end{tikzpicture}
\end{document}

答案1

(总结评论)

这里的问题是字符串circle through=(2,2)是通过pgfkeys机制处理的。它使用逗号来分隔项目,并且在处理单个键之前首先进行拆分。(在这方面,它与可能被视为通常的 TeX 行为略有不同,TeX 行为是“贪婪的”,并且会从左侧开始处理,只有在处理完当前键后才会拆分下一个键。)

因此circle through=(2,2)被拆分为circle through=(22),两者都不起作用。第一个是有效密钥,但其参数与预期不匹配,第二个甚至不是有效密钥。

为了解决这个问题,我们需要保护逗号,(2,2)以免它被误认为是分隔符。这样做的方法pgfkeys是确保它位于 TeX 组内。也就是说,它在括号中。这circle through={(2,2)}是正确的做法。

(顺便说一句,这是任何具有特殊字符的系统都会遇到的问题。当想要使用文字字符时,必须确保它不会被解释为特殊字符。我们在 TeX 中看到了这一点,只需在此站点上搜索即可,但其他编程语言中的转义字符也是如此 - 与这种情况相关的 - 在 CSV 电子表格格式中。)

相关内容