将变换应用于每个 TikZ 路径坐标(甚至从节点开始),而无需变换画布

将变换应用于每个 TikZ 路径坐标(甚至从节点开始),而无需变换画布

xshift=1mmTikZ 中是否有办法向路径的每个坐标添加变换?

以下方法不起作用,因为它们的作用要么多于要么少于“路径的每个坐标”:

  • \path [xshift=1mm] ...不适用于用节点定义的坐标,例如,\draw [xshift=1mm] (A) -- (B);不会移动任何东西。
  • transform canvas={xshift=1mm}转换所有内容(不仅仅是路径坐标),并导致边界框和新坐标的定义出现问题。
  • 装饰不会改变底层路径(我认为?)因此\draw [fancy decoration] (A) -- (B) node [below] {text};节点会处于“错误”的位置(对应于未移位的路径)。

有效的方法是手动向每个坐标添加选项,例如,即使对于节点,这也有效:\draw ([opts]0,0) -- ([opts]A);。至少如果A通过定义,它是有效的coordinate,而对于其他节点,当指定锚点时,它是有效的,如A.center

有没有类似的东西every coordinate/.style={opts}可以做同样的事情而不需要opts为每个坐标编写?

为了激励大家,这里有一个有帮助的例子,尽管我认为上述三种选择都不起作用:

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
    \coordinate (A) at (1,0);
    \coordinate (B) at (3,1);
    \draw [very thick,->] (A) -- (B) node [above left] {$\vec v$};
    %
    % Define style for shifting by 1cm perpendicular to A-B
    \tikzset{perpshift/.style={shift={($(A)!1cm!270:(B)-(A)$)}}}
    %
    \draw [very thick,->] ([perpshift]A) coordinate (A2) --
                          ([perpshift]$(A)!0.5!(B)$) coordinate (B2)
                          node (N) [below right] {$\vec w$};
    \draw [dashed] (A) -- (A2)
                   ($(A)!(B2)!(B)$) -- (B2);
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容