使用 shift 和 xshift 的不同维度

使用 shift 和 xshift 的不同维度

我发现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>

所以的默认单位xshiftpt

(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}

在此处输入图片描述

相关内容