我想知道是否可以移动(或应用任何其他变换)由命名坐标定义的路径。
这是一个简单的例子:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\coordinate (A) at (0,0);
\coordinate (B) at (2,0);
\draw[blue,thick] (A) -- (B);
\draw[red, dashed, yshift=1cm] (A) -- (B); % shift not working
\draw[green!50!black, dashed, yshift=1cm] (0,0) -- (2,0); % shift working
\end{tikzpicture}
\end{document}
编辑:这是另一个包括缩放的示例:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\coordinate (A) at (0,0);
\coordinate (B) at (2,0);
\draw[blue,thick] (A) -- (B);
\draw[red, dashed, yshift=1cm, scale=2] (A) -- (B); % transformations not working
\draw[green!50!black, dashed, yshift=1cm, scale=2] (0,0) -- (2,0); % transformation working
\end{tikzpicture}
\end{document}
为什么使用显式坐标的行为与使用命名坐标的行为不同?名称不就是别名吗?
答案1
TikZ 已经支持坐标变换。请参阅手册第 25.3 节。不过,有一个棘手的范围问题,我会引导您解决。
当你使用时,\coordinate (A) at (0,0);
你将关联坐标(0,0)
在当前坐标系中到名称(A)
。如果您尝试使用命名坐标对路径应用局部变换,TikZ 会故意在其绑定的坐标系中查找坐标。事实上,这个确切的问题被标记为故意“无法修复”在错误跟踪器上,因为这是预期的行为。
但是,您可以将坐标分配包装到转换的范围中,并且命名的坐标将按您的预期进行调整。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\begin{scope}[yshift=1cm, scale=2]
\coordinate (A) at (0,0);
\coordinate (B) at (2,0);
\draw[blue,thick] (A) -- (B);
\draw[red, dashed] (A) -- (B); % transformations NOW working
\draw[green!50!black, dashed] (0,0) -- (2,0); % transformation working
\end{scope}
\end{tikzpicture}
\end{document}
如果您希望将其应用于整个图片,您可以将其移至其tikzpicture
本身的选项中,即\begin{tikzpicture}[scale=2]
(yshift
整个图片不会产生可见效果。)
答案2
您可以移动单个坐标:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\coordinate (A) at (0,0);
\coordinate (B) at (2,0);
\draw[blue,thick] (A) -- (B);
\draw[red, dashed] ([yshift=.5cm]A) -- ([yshift=.5cm]B);
\draw[green!50!black, dashed, yshift=1cm] (0,0) -- (2,0); % shift working
\end{tikzpicture}
\end{document}
答案3
你可以改变画布:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\coordinate (A) at (0,0);
\coordinate (B) at (2,0);
\draw[blue] (A) -- (B);
\begin{scope}[transform canvas={yshift=1cm,scale=4}]
\draw[red, dashed,line width=\pgflinewidth/4] (A) -- (B);
\end{scope}
\end{tikzpicture}
\end{document}