如何移动(或变换)由命名坐标定义的 TikZ 路径?

如何移动(或变换)由命名坐标定义的 TikZ 路径?

我想知道是否可以移动(或应用任何其他变换)由命名坐标定义的路径。

这是一个简单的例子:

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

在此处输入图片描述

相关内容