将物体放置在节点和箭头之间的中间

将物体放置在节点和箭头之间的中间

假设我想画一个流程图,即节点通过箭头连接,有时会合并。这将是一个典型的模式:

在此处输入图片描述

我使用以下代码来创建这个小示例:

\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)。

相关内容