当坐标为负数时,定位会出现问题\subnode
。如果注释掉第三个子节点,下面的示例代码就可以正常工作。否则,所有位置都会被破坏。我该如何防止这种情况发生?
\documentclass[tikz,margin=2pt]{standalone}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{positioning, tikzmark}
\begin{document}
\begin{tikzpicture}
% Draw grid
\def\nlines{5}
\foreach \x in {0,...,\nlines} \draw[thick](\x, 0) -- (\x, \nlines);
\foreach \y in {0,...,\nlines} \draw[thick](0, \y) -- (\nlines, \y);
\node at(2.5, 0.5) {\subnode{a0}{} A};
\node at (a0.base) {A0};
\node at(2.5, 1.5) {\subnode{b0}{} B};
\node at (b0.base) {B0};
\node at(2.5, -0.5) {\subnode{c0}{} C};%comment this line
\node at (c0.base) {C0};% comment this line
\end{tikzpicture}
\end{document}
答案1
这不是标记节点的方法。你应该贴上类似这样的标签
\node (a0) at(2.5, 0.5) {A}; %% (a0) is the label
进而
\node at (a0.base) {A0};
作品。
\documentclass[tikz,margin=2pt]{standalone}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{positioning, tikzmark}
\begin{document}
\begin{tikzpicture}
% Draw grid
\def\nlines{5}
\foreach \x in {0,...,\nlines} \draw[thick](\x, 0) -- (\x, \nlines);
\foreach \y in {0,...,\nlines} \draw[thick](0, \y) -- (\nlines, \y);
\node (a0) at(2.5, 0.5) {A};
\node at (a0.base) {A0};
\node (b0) at(2.5, 1.5) {B};
\node at (b0.base) {B0};
\node (c0) at(2.5, -0.5) {C};%comment this line
\node at (c0.base) {C0};% comment this line
\end{tikzpicture}
\end{document}
答案2
使用的时候\subnode
,需要remember picture
对周围的图片进行设置。
A\subnode
实际上是一张新图片,TikZ 通过比较其在页面上的绝对位置来确定它的位置。为了使其正常工作,TikZ 还需要知道外部图片的位置,否则它无法确定相对位置。它会返回一些默认值,在这种情况下,这意味着相对位置会随着每次编译而不断增长。
另外,修复此问题时,您需要删除文件aux
以删除旧的错误位置。
(文档目前没有说明这一点 - 我将在下一个版本中修复它。)