我正在尝试使用 TikZ 绘制三个不同的坐标系。我已经成功完成了。但是,为了让我的代码更具可读性,我尝试将其分解为更分散和更连续的方式。第二种实现(如下所示)产生的结果与第一种完全不同。下面是两个代码块,第一个有效,第二个无效。我的问题是为什么这些非常相似的实现会产生不同的结果?
首次实施
\documentclass[10pt, fleqn]{article}
\usepackage{tikz}
\usetikzlibrary{automata, arrows, positioning, fit, petri}
\begin{document}
\begin{tikzpicture}[ultra thick, scale = 2]
\foreach \tilt / \ylength / \xlength / \ylabel / \xlabel in { 0/3/4/{y}/{x}, -45/4/1.5/{q'}/{d'}, -60/4/1.5/{q}/{d} }
\draw [<->, rotate=\tilt] (0, \ylength) node (yaxis) [above] {\ylabel} |- (\xlength, 0) node (xaxis) [right] {\xlabel};
\end{tikzpicture}
\end{document}
第二次实施
\documentclass[10pt, fleqn]{article}
\usepackage{tikz}
\usetikzlibrary{automata, arrows, positioning, fit, petri}
\begin{document}
\begin{tikzpicture}[ultra thick, scale = 2]
%% Define y-axis nodes for rotational reference frames
\foreach \nodename / \axislength / \axislabel in { {yaxis}/3/{y}, {yaxis}/4/{q}, {yaxis}/4/{q'} }
\node (\nodename) at (0, \axislength) [above] {\axislabel};
%% Define x-axis nodes for rotational reference frames
\foreach \nodename / \axislength / \axislabel in { {xaxis}/4/{x}, {xaxis}/1.5/{d}, {xaxis}/1.5/{d'} }
\node (\nodename) at (\axislength, 0) [right] {\axislabel};
%% Connect nodes to form rotational reference frames
\foreach \tilt / \nodenamey / \nodenamex in { 0/{yaxis}/{xaxis}, -45/{yaxis}/{xaxis}, -60/{yaxis}/{xaxis} }
\draw [<->, rotate=\tilt] (\nodenamey) |- (\nodenamex);
\end{tikzpicture}
\end{document}
提前感谢所有帮助!
答案1
删除最后一个 后的空格{xaxis}
。
该空间被占用,\foreach
以便 PGF 尝试查找名为{xaxis}␣
(不存在) 的节点:
! Package pgf Error: No shape named {xaxis} is known.
同样的情况也会发生在分别\axislabels
为{q'}␣
和的情况下{d'}␣
,但由于这些是排版的(和\unskip
ped),因此不会造成问题。
您需要让最后一个元素前面没有空格,例如
…, -60/yaxis/{xaxis}}
或者同样
…, -60/yaxis/xaxis}
如果你把每个元素放在自己的行上,就像
\foreach \a/\b/\c in {
a/b/c,
d/e/f,
g/h/i
}
您还会在最后一个\c
定义中看到一个虚假的空格:i␣
。
这需要阅读
\foreach \a/\b/\c in {
a/b/c,
d/e/f,
g/h/i}
或者
\foreach \a/\b/\c in {
a/b/c,
d/e/f,
g/h/i%
}