我需要使用 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}