使用 TikZ 绘制连续箭头

使用 TikZ 绘制连续箭头

这个问题OP 需要用一行代码绘制一系列箭头和标记节点。

让我们假设必须绘制一条从(0,0)到 的均匀线;虚线箭头必须放置在 位置,另一种箭头位于线的右端。这是为了实现带有垂直虚线的坐标轴(10,0)-|(2,0)(7,0)->x仅在指定的横坐标点。

\documentclass[tikz,border=5pt]{standalone}

\usepackage{tikz}
\usetikzlibrary{positioning}

\begin{document}

\begin{tikzpicture}

\node (a) at (0,0) {};
\node (b) at (2,0) {};
\node (c) at (7,0) {};
\node (d) at (10,0) {};

\draw [-|] (a) edge (b) (b) edge (c) (c) edge (d);

\end{tikzpicture}
\end{document}

这是链接问题提供的解决方案:线路在每个节点处停止,并留有空格。

甚至在考虑结束箭头之前,->如果我尝试

\draw [-|] (0,0) edge (2,0) edge (7,0) edge (10,0);

在线的开头之前出现了一个破折号(放大才能看到),这是不受欢迎的。

如何实现-|在指定位置绘制一条连续的线,以 结尾->,并可能以 结尾代码行?(如果即使没有定义节点也有解决方案,那么就可以:这里并不严格需要它们)。

答案1

如果你使用\coordinate而不是\node,你将不会得到间隙。你可以为不同的edges 设置不同的箭头提示,因此请尝试

\draw (a) edge[-|] (b)  edge[-|] (c)  edge[->] (d);

markings也添加了一个版本,以供参考。

代码输出

\documentclass[tikz,border=5pt]{standalone}    
\usepackage{tikz}
\usetikzlibrary{decorations.markings}

\begin{document}

\begin{tikzpicture}

\coordinate (a) at (0,0);
\coordinate (b) at (2,0);
\coordinate (c) at (7,0);
\coordinate (d) at (10,0);

\draw (a) edge[-|] (b)  edge[-|] (c)  edge[->] (d);

\end{tikzpicture}

\begin{tikzpicture}[
 decoration={markings,
             mark=at position 0.2 with \arrow{|},
             mark=at position 0.7 with \arrow{|}}
]
\coordinate (a) at (0,0);
\coordinate (d) at (10,0);

\draw [->,postaction={decorate}] (0,0) -- (10,0);

\end{tikzpicture}
\end{document}

答案2

有一个特点元帖子可以让你做到这一点,但(据我所知)TikZ 中没有这样的东西。构造subpath (a,b) of p为你提供了一条从a路径上的“时间”到路径上的p时间的路径。时间(或多或少)等于沿路径的距离,就用于定义它的点数而言。因此,单个路径段的一端有点 0,另一端有点 1。你可以像这样使用它:bp

\RequirePackage{luatex85}
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
beginfig(1);
    path a;
    a = origin -- (10cm, 0);
    draw a withcolor 3/4 white;
    drawarrow subpath (.15, .25) of a; 
    drawarrow subpath (.65, .75) of a;
    drawarrow subpath (.9, 1) of a;
endfig;
\end{mplibcode}
\end{document}

lualatex使用普通 MP 进行编译或调整)。这将产生:

在此处输入图片描述

(我只画了灰线来给你指示路径……)

这样做的好处是它可以适用于任意路径。因此,如果您想要一条有点波浪形的路径,您可以像这样重新定义路径:

a = origin {dir 15} .. {dir 15} (10cm, 0);

然后你会得到相同的箭头,但现在沿着弯曲的路径:

在此处输入图片描述

你可以根据需要把箭头设置得尽可能长,甚至可以设置成连续的:

\RequirePackage{luatex85}
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
beginfig(1);
    path a;
    a = origin {dir 15} .. {dir 15} (10cm, 0);
    drawarrow subpath (0, .2) of a; 
    drawarrow subpath (.2, .7) of a;
    drawarrow subpath (.7, 1) of a;
endfig;
\end{mplibcode}
\end{document}

在此处输入图片描述

答案3

在此处输入图片描述

\documentclass[border=6pt]{standalone}
\usepackage{pgf,tikz}
\usetikzlibrary{arrows}
\begin{document}
\begin{tikzpicture}[line cap=round,line join=round,>=triangle 45,x=1cm,y=1cm]\
clip(-3,-10) rectangle (12,12);
\draw [->,line width=2pt] (0,0) -- (2,0);\draw [->,line width=2pt] (2,0) -- (4,0);
\draw [->,line width=2pt] (4,0) -- (6,0);
\end{tikzpicture}
\end{document}

相关内容