TikZ:xshift 没有移位

TikZ:xshift 没有移位

为什么xshift在这里不起作用?

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
  \coordinate (Q) at (2.1cm, -1cm);

  \draw[xshift = 0.5cm] (Q) -- +(0, 3cm); % no shift

  \begin{scope}[xshift = 0.5cm]
    \draw (Q) -- +(0, 3cm); % no shift
  \end{scope}
\end{tikzpicture}
\end{document} 

范围版本和非范围版本都会产生相同的图像:

在此处输入图片描述

我们可以看到,这条线是从那里画出来的Q,并没有移动。

答案1

正如另一个答案所解释的那样,命名节点在某种程度上是“绝对”坐标,它们不受标准变换(移位、旋转、缩放等)的影响。它们可以通过 进行变换transform canvas,但是,通常不鼓励这样做,特别是对于比例变化,因为它也会影响笔画、字体等的大小和方面。

那么,除了轮班之外,我们还有哪些其他选择呢?

  1. 用于calc手动向每个坐标添加一些数量,例如:($(Q)+(0.5, 0)$)
  2. 使用++语法设置新的“原点”,并+使用语法指定相对于该原点的坐标。

对于这种特殊情况,使用第二种方法:

\draw (Q) ++(0.5, 0) -- +(0,3);

意思是:

  1. 前往坐标(Q)
  2. 从该坐标移动(0.5,0)并将该新点设置为相对坐标的原点
  3. 从最后一个点到该点的最后一个点画一条线(0,3)

答案2

据我所知,命名坐标在变换后保持不变,除非画布被变换:

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
  \coordinate (Q) at (2.1cm, -1cm);
  \draw (Q) -- +(0, 3cm);

  \draw[transform canvas={xshift = 0.5cm}] (Q) -- +(0, 3cm);

  \begin{scope}[transform canvas={xshift = 1cm}]
    \draw (Q) -- +(0, 3cm);
  \end{scope}
\end{tikzpicture}
\end{document}

结果

答案3

shift如果应用于shift每个坐标而不是整个范围,则可以命名坐标:

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
  \coordinate (Q) at (2.1cm, -1cm);

  \draw[xshift = 0.5cm] (Q) -- +(0, 3cm) node[midway, above,sloped] {no shift};

  \draw[red] ([xshift = 0.5cm]Q) -- +(0, 3cm) node[midway, above,sloped] {shifted}; 

\end{tikzpicture}
\end{document} 

在此处输入图片描述

相关内容