为什么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
,但是,通常不鼓励这样做,特别是对于比例变化,因为它也会影响笔画、字体等的大小和方面。
那么,除了轮班之外,我们还有哪些其他选择呢?
- 用于
calc
手动向每个坐标添加一些数量,例如:($(Q)+(0.5, 0)$)
- 使用
++
语法设置新的“原点”,并+
使用语法指定相对于该原点的坐标。
对于这种特殊情况,使用第二种方法:
\draw (Q) ++(0.5, 0) -- +(0,3);
意思是:
- 前往坐标
(Q)
- 从该坐标移动
(0.5,0)
并将该新点设置为相对坐标的原点 - 从最后一个点到该点的最后一个点画一条线
(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}