我想将一条线向某个方向移动一定量。这里方向是固定的,与线正交。一个困难是,线应该像在原点位置一样绘制。我的解决方案几乎满足了我的要求,只是移动后的线更长,因为它不受节点的限制。
我发现的例子例如在 TikZ 中移动连接节点的线影响线条的绘制方式。
类似的东西(A) edge[shift left=2cm] (B);
就很好了。
\documentclass[tikz, border=2mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning,calc}
\begin{document}
\begin{tikzpicture}
\node (A) at (3,0) {$A$};
\node (B) at (5,1) {$B$};
\path[-]
(A) edge (B)
($(A)!5mm!90:(B)$) edge node{shifted} ($(B)!5mm!-90:(A)$);
\end{tikzpicture}
\end{document}
答案1
(注意:移位的线不关心节点的边界。)
\documentclass[tikz]{standalone}
\usetikzlibrary{decorations}
\pgfdeclaredecoration{simple line}{initial}{
\state{initial}[width=\pgfdecoratedpathlength-1sp]{\pgfmoveto{\pgfpointorigin}}
\state{final}{\pgflineto{\pgfpointorigin}}
}
\tikzset{
shift left/.style={decorate,decoration={simple line,raise=#1}},
shift right/.style={decorate,decoration={simple line,raise=-1*#1}},
}
\begin{document}
\begin{tikzpicture}
\node (A) at (0,0) {A};
\node (B) at (2,1) {B};
\path[->,red] (A) edge (B);
\path[->,blue] (A) edge[shift left=2mm] (B);
\path[->,orange] (A) edge[shift right=2mm] (B);
\end{tikzpicture}
\end{document}
答案2
另一个解决方案是使用transform canvas
,例如:
\documentclass[tikz, border=2mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning,calc}
\begin{document}
\begin{tikzpicture}
\node (A) at (3,0) {$A$};
\node (B) at (5,1) {$B$};
\path[-]
(A) edge (B)
\path[-,transform canvas={yshift=5mm,xshift=-2.5mm}]
(A) edge (B);
\end{tikzpicture}
\end{document}
当然,xshift 和 yshift 取决于您想要实现的与原始线的线条角度和距离。