如何用其他方式贴标签?

如何用其他方式贴标签?

我正在尝试绘制这个图形

在此处输入图片描述

我试过

\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。使用时,它会将参数转发给anglepic,但会禁用任何角度的绘制,并且仅将文本放置在角度弧的中间,设置angle eccentricity1使节点完全angle radius远离角落。

但在使用它之前,我们需要三个点来定义角。由于您“超出”了您的线条,我将定义一个overshoot lineoic,它绘制一条延伸到其第三个参数(之后)两端的线,:该参数可以是比率(例如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}

输出

在此处输入图片描述 在此处输入图片描述

相关内容