![如何用其他方式贴标签?](https://linux22.com/image/465734/%E5%A6%82%E4%BD%95%E7%94%A8%E5%85%B6%E4%BB%96%E6%96%B9%E5%BC%8F%E8%B4%B4%E6%A0%87%E7%AD%BE%EF%BC%9F.png)
我正在尝试绘制这个图形
我试过
\documentclass[12pt,a4paper]{standalone}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}[line cap=round,line join=round,c/.style={circle,fill,inner sep=1pt}]
\path
(0,1) coordinate (a)
(6,1) coordinate (A)
(0,3) coordinate (b)
(5,4) coordinate (B)
($(A)!0.5!(a)$) coordinate (M)
($(b)!0.5!(B)$) coordinate (N)
($(M)!0.5!(N)$) coordinate (c)
;
\tkzDrawLine(a,A)
\tkzDrawLine(b,B)
\tkzDrawLine(M,N)
\foreach \p/\g in {a/-90,b/-90,c/0}{\path (\p)+(\g:3mm) node{$\p$};}
\tkzLabelAngle[pos=.5](B,N,M){$1$}
\tkzLabelAngle[pos=.5](M,N,B){$3$}
\tkzLabelAngle[pos=.5](b,N,M){$2$}
\tkzLabelAngle[pos=.5](M,N,b){$4$}
\tkzLabelAngle[pos=1](b,N,M){$N$}
\tkzLabelAngle[pos=1](N,M,A){$M$}
\tkzLabelAngle[pos=.5](A,M,M){$4$}
\tkzLabelAngle[pos=.5](N,M,A){$2$}
\tkzLabelAngle[pos=.5](a,M,N){$3$}
\tkzLabelAngle[pos=.5](N,M,a){$1$}
\end{tikzpicture}
\end{document}
如何1, 2, 3, 4, M, N
用其他方式贴标签?
答案1
纯 TikZ,主要是angles
提供angle
我与 pic 一起使用的 pic 的库label angle
。使用时,它会将参数转发给angle
pic,但会禁用任何角度的绘制,并且仅将文本放置在角度弧的中间,设置angle eccentricity
为1
使节点完全angle radius
远离角落。
但在使用它之前,我们需要三个点来定义角。由于您“超出”了您的线条,我将定义一个overshoot line
oic,它绘制一条延伸到其第三个参数(之后)两端的线,:
该参数可以是比率(例如0.1
)或距离,例如5mm
,比率使用两端之间的长度来计算超出的长度,而距离则按字面意思理解。
使用相同的图片,我还用后缀定义了这条线的新端点,'
创建了坐标a'
, A'
, b
, b'
(我们不使用),但也是M'
角度N'
标签所需的和。
因为我不喜欢线上的一些随机字母,所以我使用dot
第二张非常相似的图片中的样式和大头针在坐标位置放置一个点。
代码
\documentclass[tikz]{standalone}
\usetikzlibrary{arrows.meta, angles, calc, quotes}
\tikzset{
math mode/.style={execute at begin node=$, execute at end node=$},
math labels/.style={every label/.append style=math mode},
pics/label angle/.style={
/tikz/path only, /tikz/angle eccentricity=1, angle/.expanded={#1}},
pics/overshoot line/.style args={#1--#2:#3}{
code=\path[pic actions]($(#1)!-(#3)!(#2)$) coordinate[name prefix ..] (#1')
to[line to] ($(#2)!-(#3)!(#1)$) coordinate[name prefix ..] (#2');},
pic nodes/.style ={every to/.append style={edge node={#1}}},
pic nodes'/.style={every to/.append style={#1}},
}
\begin{document}
\begin{tikzpicture}[math labels, angle radius=3.5mm]
\coordinate["a" below] (a) at (0,1) coordinate["A" below] (A) at (6,1)
coordinate["b" above] (b) at (0,3) coordinate["B" above] (B) at (5,4);
\foreach \connA/\connB/\coord/\dist in {a/A/{"M" below, name=M}/5mm,
b/B/{"N" above, name=N}/5mm,
M/N/{"c" right, name=c}/0mm}
\pic[draw, midway, label distance=\dist,
pic nodes/.expanded={coordinate[\coord]}]
{overshoot line = \connA--\connB:5mm};
\foreach[count=\i] \ang in {N'--N--b, b--N--M, M--N--B, B--N--N'}
\pic[pic text=\i] {label angle=\ang};
\foreach[count=\i] \ang in {N--M--a, a--M--M', M'--M--A, A--M--N}
\pic[pic text=\i] {label angle=\ang};
\end{tikzpicture}
\begin{tikzpicture}[
dot/.style={shape=circle, fill, outer sep=+0pt, inner sep=+1pt},
math labels, angle radius=3.5mm, pin distance=5mm,
every pin edge/.append style={bend right=10, {Latex[round, scale=.75, sep]}-}]
\coordinate[dot, "a" below] (a) at (0,1) coordinate[dot, "A" below] (A) at (6,1)
coordinate[dot, "b" above] (b) at (0,3) coordinate[dot, "B" above] (B) at (5,4);
\foreach \connA/\connB/\coord/\sett in {
a/A/{dot, "M" below, name=M}/quotes mean pin,
b/B/{dot, "N" above, name=N}/quotes mean pin,
M/N/{dot, "c" right, name=c}/}
\pic[draw, midway, style/.expand once=\sett,
pic nodes/.expanded={coordinate[\coord]}]
{overshoot line = \connA--\connB:5mm};
\foreach[count=\i] \ang in {N'--N--b, b--N--M, M--N--B, B--N--N'}
\pic[pic text=\i] {label angle=\ang};
\foreach[count=\i] \ang in {N--M--a, a--M--M', M'--M--A, A--M--N}
\pic[pic text=\i] {label angle=\ang};
\end{tikzpicture}
\end{document}