如何仅绘制从一个节点到另一个节点的箭头的起点和终点?

如何仅绘制从一个节点到另一个节点的箭头的起点和终点?

我正在尝试使用 pdflatex 创建一个节点网络,并且有一些非常具体的想法。下面,您可以找到我当前的最小示例,即我遇到问题的 tex 文件(可使用 pdflatex 编译):

\documentclass[tikz, 11pt,landscape]{article}
\usepackage[default,osfigures,scale=0.95]{opensans}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{tgbonum, tikz}
\usetikzlibrary{shapes, calc, arrows.meta, fadings, decorations.pathmorphing, math}
\usepackage[a3paper]{geometry}

\begin{document}
\thispagestyle{empty}

\tikzset{normal/.style = {rectangle split, rectangle split horizontal, rectangle split parts=3, very thick, draw=black, inner sep=0cm, minimum height=0.6cm, text height=1.5ex, text depth=0.25ex}}

\begin{tikzpicture}[remember picture, overlay]
    \path[draw, color=gray, thick] ($(current page.center) + (-10,  0)$) -- ($(current page.center) + (10, 0)$);
    \path[draw, color=gray, thick] ($(current page.center) + (  0,-10)$) -- ($(current page.center) + ( 0,10)$);

    \node[normal] (66) at ($(current page.center) + ( 4.0, 2.0)$) {\nodepart[text width=6mm]{one} \nodepart{two}\rule[-0.25ex]{0pt}{1.75ex}\phantom{j}Node1\phantom{j}\nodepart[text width=6mm]{three}};
    \node[normal] (75) at ($(current page.center) + (-4.0,-0.5)$) {\nodepart[text width=6mm]{one} \nodepart{two}\rule[-0.25ex]{0pt}{1.75ex}\phantom{j}Node2\phantom{j}\nodepart[text width=6mm]{three}};

    %PROBLEM
    \draw[-{Latex[length=3mm]}, very thick] (66.west)--(75.east) node[midway,circle,inner sep=0.5mm,fill=white]{5};
\end{tikzpicture}

\end{document}

这将创建一个包含以下内容的 DIN A3 pdf(放大以显示相关部分):

最小示例

tex 文件中唯一让我头疼的部分是“%PROBLEM”注释后面的行。它绘制了两个节点之间的连接,中间有一个值。我希望能够用一个基本上被切成两半的箭头替换这个箭头,两个部分之间有一个间隙,如下图所示(我在这里向你展示我最好的绘画技巧):

在此处输入图片描述

中间部分应该是透明的(不是白色的,因为白色可能会覆盖其他东西),之前箭头中间的数字应该位于末端部分的中间。此外,箭头应该是可着色的(我想我可以自己想办法,但这不是我现在的重点),我希望能够控制边缘部分的长度作为原始距离的一小部分。因此对于以下情况:

在此处输入图片描述

我希望能够通过仅更改两个数字而不是进行大量计算来将零件的长度从 0.3 和 0.2 更改为 0.4 和 0.5。这很重要,因为这个 tex 文件将以编程方式生成并且包含许多节点,所以我不能有太多特殊情况。我想我可以通过绘制两个箭头而不是一个箭头并计算相关点来解决这个问题。首先,我计算终点 (a) 和起点 (b) 并绘制连接:

\def \a{($(75.east) - (current page.center) + (14.1, -10.9)$)};
\def \b{($(66.west) - (current page.center) + (14.1, -10.9)$)};
\draw[very thick] \b--\a;

由于某种我不知道的原因,这些坐标系似乎有偏移。通过反复试验,我发现我可以通过减去 (当前页面中心) - (14.1, -10,9) 来消除此偏移。这会产生:

在此处输入图片描述

所以:成功了。然后我计算中间点 (c) 和 (d),并尝试建立两个联系:

\def \a{($(75.east) - (current page.center) + (14.1, -10.9)$)};
\def \b{($(66.west) - (current page.center) + (14.1, -10.9)$)};
\def \c{($\a + (0.3 * (\a - \b))$)};
\def \d{($\b - (0.2 * (\a - \b))$)};

\draw[very thick] \c--\a;
\draw[very thick] \b--\d;

编译时出现错误:

Runaway argument?
\a + (0.3 * (\a - \b ))$)--\a ; \draw [very thick] \b --\d ; \end {ti\ETC.
! Paragraph ended before \tikz@cc@parse@factor was complete.

我完全不知道该怎么做。我试了很多次,但都没有成功:重新排列公式,尝试不同的绘制命令,有无空格、括号、圆括号等等。我还尝试使用淡入淡出来解决这个问题,比如并使颜色透明,但这似乎过于复杂,也没有成功。我猜我的计算错了?但我只是一个 tex 菜鸟,无法理解为什么会失败。如果你们能帮忙,我会很高兴!

答案1

\documentclass[]{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
  \node at (0,0) (start) {text A};

  \node at (2,4) (stop) {text B};

  \draw[red,<-] (start) -- ($(start)!0.3!(stop)$);

  \draw[green,->] (stop) -- ($(stop)!0.2!(start)$);
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案2

您可以测量路径长度,然后使用 来dash pattern生成间隙。此方法的优点是它也适用于弯曲路径,如红色箭头所示。

\documentclass[tikz, 11pt,landscape]{article}
\usepackage[default,osfigures,scale=0.95]{opensans}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{tgbonum, tikz}
\usetikzlibrary{shapes.multipart,calc,arrows.meta,decorations.markings}
\usepackage[a3paper]{geometry}
\newlength{\dividePL}
\begin{document}
\thispagestyle{empty}

\tikzset{normal/.style = {rectangle split, rectangle split horizontal, rectangle split parts=3, very thick, draw=black, inner sep=0cm, minimum height=0.6cm, text height=1.5ex, text depth=0.25ex}}

\begin{tikzpicture}[remember picture, overlay,%
divide/.style={preaction={decorate,decoration={markings,mark=at position 0 with {\global\dividePL=\pgfdecoratedpathlength}}},
dash pattern=on \pgfkeysvalueof{/tikz/divider/on}\dividePL off \pgfkeysvalueof{/tikz/divider/off}\dividePL on \dividePL},
divider/.cd,on/.initial=0.2,off/.initial=0.5]
    \path[draw, color=gray, thick] ($(current page.center) + (-10,  0)$) -- ($(current page.center) + (10, 0)$);
    \path[draw, color=gray, thick] ($(current page.center) + (  0,-10)$) -- ($(current page.center) + ( 0,10)$);

    \node[normal] (66) at ($(current page.center) + ( 4.0, 2.0)$) {\nodepart[text width=6mm]{one} \nodepart{two}\rule[-0.25ex]{0pt}{1.75ex}\phantom{j}Node1\phantom{j}\nodepart[text width=6mm]{three}};
    \node[normal] (75) at ($(current page.center) + (-4.0,-0.5)$) {\nodepart[text width=6mm]{one} \nodepart{two}\rule[-0.25ex]{0pt}{1.75ex}\phantom{j}Node2\phantom{j}\nodepart[text width=6mm]{three}};

    %PROBLEM
    \draw[-{Latex[length=3mm]}, very thick,divide] (66.west)--(75.east) node[pos=0.85,circle,inner sep=0.5mm,fill=white]{5};
    \draw[-{Latex[length=3mm]}, very thick,red,divide] (66.west)to[out=180,in=0] node[pos=0.85,circle,inner sep=0.5mm,fill=white]{5} (75.east);
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容