当对应用某些坐标变换时,该\pgfgetlastxy
语法似乎没有产生正确的结果。coordinates
tikzpicture
然而对于 s 来说一切都是正确的node
,或者当我们draw
时coordinate
。
这是否与在 TikZ 中变换定义的坐标?
平均能量损失
\documentclass[tikz, border=20pt]{standalone}
\begin{document}
\begin{tikzpicture}
[
scale=.5,
%cm={.5,0,0,.5,(0,0)}, %also changes the measurement
%xslant=2,
%transform canvas= %fixes the measurement discrepancy
%{
% scale=.5,
%},
]
\coordinate
[
label=a,
%circle, draw, %fixes the measurement discrepancy
]
(a) at (1,1);
\path (a);
\pgfgetlastxy{\lastX}{\lastY}
\node [anchor=north]at (0,0) {\verb|\lastX| for the coordinate : \lastX};
\node
[
label=b,
inner sep=0pt,
outer sep=0pt,
minimum height=0pt,
] (b) at (1,1){};
\path (b);
\pgfgetlastxy{\lastX}{\lastY}
\node [anchor=south]at (0,0) {\verb|\lastX| for the node : \lastX};
\end{tikzpicture}
\end{document}
输出
答案1
\pgf@x
这样的PGF命令只是内部维度寄存器的捷径\pgf@y
。定义比你想象的要简单
\def\pgfgetlastxy#1#2{% \edef#1{\the\pgf@x}% \edef#2{\the\pgf@y}% }%
也就是说,由于所有高级计算都是由\pgf@x
/ \pgf@y
/ \pgf@xa
/etc 完成的,因此不能保证这\pgf@x
确实是你想要的,特别是在 Ti钾Z. 对于 Ti钾Z,有\tikz@lastx
和\tikz@lastxsaved
。
顺便说一句,正如@Salim Bou 提到的,(b.center)
是一个坐标,但(b)
不是。
当你写的时候\path(b)circle(0);
,Ti钾Z 会认真对待该节点,因为它想知道在哪里画圆。在本例中,结果是14...pt
(0.5cm)。在本例中,实际发生的情况类似于\path(b.center)circle(0);
。但是当你只写 时\path(b);
,Ti钾Z 根本就无事可做,\pgf@x
可以做任何事情。
(当你写\path(5,5)--(b);
,Ti钾Z 将在 (c) 的边界上找到一个点(b)
,并在 (c) 的边界上找到一个点。我预计结果是边界上点的 x 坐标。但是,此计算可能是在组中完成的,因此您看不到\pgf@x
变化。)