tikz 坐标在“路径”内的移位不起作用

tikz 坐标在“路径”内的移位不起作用

我希望用锯齿线连接 2 个点,偏移量由 xshift 定义,如下所示:

\documentclass[12pt]{article}

\usepackage{tikz}
\usetikzlibrary{calc} 
\tikzset{
    ann/.style = {/utils/exec=\tikzset{ann/.cd,#1},
        to path = {
            (\tikztostart)
             -- ([xshift=\pgfkeysvalueof{/tikz/ann/x}] \tikztostart)
             |- (\tikztotarget)
        }
    },ann/.cd,x/.initial=1}
\begin{document}

\begin{tikzpicture}
  \draw (0,0) grid (5,5);
  \node  (A) {A};
  \node at (5,5)  (B) {B};
  \draw[line width=5pt] (A) to[ann={x=2}] (B);
\end{tikzpicture}

\end{document}

但听起来 xshift 命令什么也没做! 在此处输入图片描述

答案1

有两个问题。首先,你忘记了单位,所以2被解释为2pt。其次,起始节点是一个节点,即一个扩展对象,但路径实际上从边界开始。为了有更精细的控制,你可以引入一个辅助坐标。然后你得到

\documentclass[12pt]{article}

\usepackage{tikz}
\usetikzlibrary{calc} 
\tikzset{
    ann/.style = {/utils/exec=\tikzset{ann/.cd,#1},
        to path = {
            (\tikztostart) coordinate(aux)
             -- ([xshift=\pgfkeysvalueof{/tikz/ann/x}]aux)
             |- (\tikztotarget)
        }
    },ann/.cd,x/.initial=1mm}
\begin{document}

\begin{tikzpicture}
  \draw (0,0) grid (5,5);
  \node  (A) {A};
  \node at (5,5)  (B) {B};
  \draw[line width=5pt] (A) to[ann={x=5mm}] (B);
\end{tikzpicture}

\end{document}

在此处输入图片描述

可以清楚的看到,粗线不是从A节点的中心开始,而是从边界开始。这就是为什么最好引入辅助坐标的原因。

您可以使用 获得无需辅助坐标的相同结果++

\documentclass[12pt]{article}

\usepackage{tikz}
\usetikzlibrary{calc} 
\tikzset{
    ann/.style = {/utils/exec=\tikzset{ann/.cd,#1},
        to path = {
            (\tikztostart) 
             -- ++ (\pgfkeysvalueof{/tikz/ann/x},0)
             |- (\tikztotarget)
        }
    },ann/.cd,x/.initial=1mm}
\begin{document}

\begin{tikzpicture}
  \draw (0,0) grid (5,5);
  \node  (A) {A};
  \node at (5,5)  (B) {B};
  \draw[line width=5pt] (A) to[ann={x=5mm}] (B);
\end{tikzpicture}

\end{document}

相关内容