在 TikZ 中绘制没有尾巴的箭头?

在 TikZ 中绘制没有尾巴的箭头?

我在 TikZ 图中有一个椭圆,我想用箭头指示方向,但不想画出通向箭头的路径。

我目前有

\draw[->] (0,2) arc (90:45:1 and 2);
\draw (0,0) ellipse (1 and 2);

但我希望通向箭头的弧线是不可见的(因此它不会在椭圆上重新绘制),这样就只显示头部。

实现这一目标的最佳方法是什么?

答案1

您可以使用路径装饰:

\documentclass{article}
\usepackage{tikz}

\usetikzlibrary{decorations.markings}

\begin{document}

\begin{tikzpicture}[decoration={
  markings,
  mark=at position 0.2 with {\arrow{<}}}
]
  \draw[postaction={decorate}] (0,0) ellipse (1 and 2);
\end{tikzpicture}

\end{document}

答案2

(使用 TikZ 3.0.1a 测试)

您可以使用tips键来配置箭头的绘制。tips键的初始值为on draw,因此最初,只有在绘制路径本身时才会绘制箭头。但您可以将键设置tips为,true以便即使对于未绘制的路径也绘制箭头。

\path[tips, ->] (0,2) arc (90:45:1 and 2);
\draw (0,0) ellipse (1 and 2);

请参阅第 16.2 章(箭头放置的位置和时间)。TikZ 和 PGF 手册

答案3

使用 TikZ 3.0 测试:

  • 加载arrows.meta库而不是arrows
  • draw opacity=0作为选项添加到\draw,但不添加到箭头,例如>={LaTeX[]}

尾部将完全不透明,即不会显示,只有头部可见。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}
  \draw[->,>={LaTeX[]},draw opacity=0] (0,2) arc (90:45:1 and 2);
  %\draw (0,0) ellipse (1 and 2);% commented out to see only the tip
\end{tikzpicture}
\end{document}

箭尖无尾

答案4

你可以用很简单的方法来做元帖子。该arrowhead宏以任意路径作为参数,并返回给定路径末尾箭头的路径。

使用适当的subpath命令,您可以将箭头放置在路径上的任意位置。标准arrowhead箭头看起来相当坚固,因此您可能更喜欢下面包含的开放或弯曲版本。

带箭头的椭圆

prologues := 3;
outputtemplate := "%j%c.eps";

vardef open_arrowhead expr p =
  save q,e; path q; pair e;
  e = point length p of p;
  q = gobble(p shifted -e cutafter makepath(pencircle scaled 2ahlength))
    cuttings;
  (q rotated .5ahangle & reverse q rotated -.5ahangle)  shifted e
enddef;

vardef curly_arrowhead expr p =
  save q,e; path q, q'; pair e;
  e = point length p of p;
  q = gobble(p shifted -e cutafter makepath(pencircle scaled 2ahlength))
    cuttings;
  q' = q rotatedabout(point 1/2 of q,90);
  (point 0 of q' { direction 0 of q' } 
  .. 
  { direction infinity of q  } point infinity of q { - direction infinity of q } 
  .. 
  { direction infinity of q' } point infinity of q'
  ) shifted e
enddef;

beginfig(1);
path ellipse; 
ellipse = fullcircle xscaled 2cm yscaled 4cm;
draw ellipse withcolor .63 red;
ahlength := 3;
filldraw arrowhead subpath (2,3) of ellipse;
draw open_arrowhead subpath (2,1) of ellipse;
draw curly_arrowhead subpath (1,2) of ellipse;
endfig;
end.

请注意,您需要draw我的开放式箭头,而标准箭头则需要filldraw。还请注意如何使用整齐地获取反向路径subpath

相关内容