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=(2
和2)
,两者都不起作用。第一个是有效密钥,但其参数与预期不匹配,第二个甚至不是有效密钥。
为了解决这个问题,我们需要保护逗号,(2,2)
以免它被误认为是分隔符。这样做的方法pgfkeys
是确保它位于 TeX 组内。也就是说,它在括号中。这circle through={(2,2)}
是正确的做法。
(顺便说一句,这是任何具有特殊字符的系统都会遇到的问题。当想要使用文字字符时,必须确保它不会被解释为特殊字符。我们在 TeX 中看到了这一点,只需在此站点上搜索即可,但其他编程语言中的转义字符也是如此 - 与这种情况相关的 - 在 CSV 电子表格格式中。)