有没有办法将箭头放在线的末尾而不必绘制它们?

有没有办法将箭头放在线的末尾而不必绘制它们?

我需要使用 Tikz 包制作一些以半圆末端的箭头结尾的线条,为此我目前正在使用这个看起来很恶心的代码

\begin{tikzpicture}
\draw[black, thick](-2,0)arc(180:360:2);
\foreach \lab[count=\n,evaluate=\n as \angle using ((\n+1)*-22.5)+45] 
    in {+4,+3,+2,+1,0,-1,-2,-3,-4}
        {\draw[black, thick](\angle:2cm)--(\angle:2.3cm)node [anchor=\angle-180]{$\lab$};}
\draw[black, thick](2,0)--(2,0.5);
\draw[black, thick](2,0.5)--(1.7,0.2);
\draw[black, thick](2,0.5)--(2.3,0.2);
\draw[black, thick](-2,0)--(-2,0.5);
\draw[black, thick](-2,0.5)--(-1.7,0.2);
\draw[black, thick](-2,0.5)--(-2.3,0.2);
\end{tikzpicture}

这将创建下图:

在此处输入图片描述

我需要经常做这些,而且这段代码不仅有时写起来很糟糕,而且图形看起来也不好看,还有其他方法可以重写吗?提前谢谢

答案1

我猜大多数 TikZ 教程都会告诉你,你可以使用添加到路径<->选项将箭头尖添加到路径的末端,例如\draw [<->] (0,0) -- (1,1);。默认箭头尖有点小,但使用arrows.meta库中的箭头尖,你可以自定义尖头的大小。该库记录在当前 TikZ 手册的第 16.5 节中。

因此,您可以按照下面的代码进行操作。在这里,我定义了一个名为 的新箭头bigT,并bigT-bigT在路径选项中使用。还请注意,我用直线延伸了圆弧。

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}[
  bigT/.tip={Stealth[width=4mm,length=4mm]}
]
\draw[black, thick, bigT-bigT]  (-2,0.5) -- (-2,0) arc[start angle=180,end angle=360,radius=2] -- +(0,0.5);
\foreach \lab[count=\n,evaluate=\n as \angle using ((\n+1)*-22.5)+45] 
    in {+4,+3,+2,+1,0,-1,-2,-3,-4}
        {\draw[black, thick](\angle:2cm)--(\angle:2.3cm)node [anchor=\angle-180]{$\lab$};}
\end{tikzpicture}
\end{document}

附录:

如果您要制作许多这样的图表,将箭头尖端的定义放在序言中会更有意义。您还可style以为“轴”线制作一个。

下面我还定义了一个半径函数,用于参数化绘图,并展示了一种略有不同的循环方法。并不是说这比你的更好,而是将其视为灵感。

哦,Straight Barb箭头尖端与原来的类似,但请参阅文档以获取可用尖端的完整列表。

在此处输入图片描述

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\tikzset{
  % define a new arrow tip style
  bigT/.tip={Straight Barb[width=4mm,length=3mm]},
  % make a style for the "axis"
  curveaxis/.style={thick, bigT-bigT},
  % a new function for the radius
  declare function={R=2;}
}
\begin{document}
\begin{tikzpicture}
% use the style defined above and the radius function
\draw[curveaxis]  (-R,R/4) -- (-R,0)
                                arc[start angle=180,end angle=360,radius=R] -- 
                                +(0,R/4);

\foreach \lab [evaluate={\angle={180+(\lab+4)*22.5}}]
    in {-4,...,4}
        {\draw[thick] (\angle:R)-- ++(\angle:R/10) node[anchor=\angle-180]{\ifnum\lab=0$0$\else\pgfmathprintnumber[showpos]{\lab}\fi};}
\end{tikzpicture}
\end{document}

相关内容