假设我想画一个流程图,即节点通过箭头连接,有时会合并。这将是一个典型的模式:
我使用以下代码来创建这个小示例:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning,calc,arrows.meta}
\begin{document}
\begin{tikzpicture}
\node[draw] (a) {A};
\node[draw,right=of a] (b) {B};
\node[draw,below=5mm of b] (c) {C};
\path[-{LaTeX[]}] (b) edge (c);
\draw (a) |- ($(b)!0.5!(c)$);
\end{tikzpicture}
\end{document}
现在,从 A 开始的线恰好在中点处与 B 和 C 之间的线相交。然而,考虑到箭头的尖端,这不是视觉上最令人愉悦的位置。我们希望它能与 B 和 C 之间的中点相交。箭头末端和 B.
除了修改魔法常量之外,我们如何使用 TikZ 来做到这一点?
答案1
这是第一遍,它会自动调整当前线宽,但不调整箭头类型。例如,如果路径的方向/角度不同,或者箭头指向相反方向,它还需要修改。
\documentclass[tikz,border=10pt,multi]{standalone}
\usetikzlibrary{positioning,calc,arrows.meta}
\begin{document}
\begin{tikzpicture}
[
every node/.append style={draw},
my adjustment/.store in=\arrowadjust,
% by default, for this type of arrow tip, length=3pt 4.5 0.8 [ref. p. 185]
arrow line/.style={%
draw,
-{LaTeX[]},
my adjustment={.5*(3pt + 4.5*\pgflinewidth)}
},
]
\node (a) {A};
\node [right=of a] (b) {B};
\node [below=5mm of b] (c) {C};
\path [arrow line] (a) |- ([yshift=\arrowadjust]$(b)!0.5!(c)$) (b) -- (c);
\end{tikzpicture}
\end{document}
您可以在文件中找到您感兴趣的箭头的值texmf-dist/tex/generic/pgf/libraries/pgflibraryarrows.meta.code.tex
:
\pgfdeclarearrow{
name = Latex,
defaults = {
length = +3pt 4.5 .8,% +2.8pt 3 0.8,
width' = +0pt .75,
line width = +0pt 1 1,
},
(LaTeX
是 的别名Latex
)。