我发现shift 和 xshift 有不同的默认维度。
考虑以下 mwe
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node (a) at (0,3) {a};
\node (b) at (0,2) {b};
\node (c) at (0,1) {c};
\node (d) at (0,0) {d};
\node[xshift=5cm] at (a) {aa};
\node[shift={(5cm,0)}] at (b) {bb};
\node[xshift=5] at (c) {cc};
\node[shift={(5,0)}] at (d) {dd};
\draw[help lines] (0,0) grid (5,3) ;
\end{tikzpicture}
\end{document}
对于用“cm”给出的前两行(a 和 b),shift 和 xshift 的行为是相同的。
但是如果没有尺寸(c 和 d),shift 似乎使用默认的 tikz 尺寸,而 xshift 似乎使用点?
我注意到在手册中 xshift 总是以 cm 给出,但是这种行为并未得到解释。
我做错了什么吗?这是错误还是功能?
答案1
在 TikZ 中,长度值的默认单位始终是pt
。我们有
/tikz/xshift=<dimension>
所以的默认单位xshift
是pt
。
(1,0)
您可以将 视为cm
默认单位,但没有默认单位。 简单(1,0)
来说,1.x+0.y
它取决于向量的值x
,该值最初设置为(1cm,0)
。
答案2
一些想法:
- 你没有做任何错事。
- 这是 bug 吗?如果程序崩溃或结果与手册中预期的不一致,那么它就不算是 bug。所以我认为它不是 bug。
- 坐标的默认单位是
cm
,因此at (1,0)
和at (1cm,0)
是等价的。这就是为什么 shift={(5,0)} 和 shift={(5cm,0)} 可以互换使用。 - 这难道不是单位为 的唯一情况吗
cm
?另一种默认单位为厘米的情况是圆,因此\draw (0,0) circle(1);
会给出半径为 的圆1cm
,圆弧也是如此。 - 但对于“大多数”其他情况,默认单位是
pt
。
答案3
举例说明@Kpym 的精彩回答。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[help lines] (0,0) grid (5,3) ;
\node (a) at (0,3) {a};
\node (b) at (0,2) {b};
\node (c) at (0,1) {c};
\node (d) at (0,0) {d};
\begin{scope}[x={(2,1)}] % change the vector x
\node[xshift=2cm] at (a) {aa}; % 2cm to the right
\node[shift={(2cm,0)}] at (b) {bb}; % 2cm to the right and 0pt to the top
\node[xshift=2] at (c) {cc}; % 2pt to the right
\node[shift={(2,0)}] at (d) {dd}; % 2x+0y
\draw[blue] circle[radius=0.5]; % 0.5 is interpreted as xradius =0.5x and yradius =0.5 y
\draw[red] circle[radius=0.5cm]; % .0.5cm is interpreted as xradius=yradius=0.5cm
\end{scope}
\end{tikzpicture}
\end{document}