\documentclass[tikz,border=5pt]{standalone}
\usepackage{tkz-euclide}
\ExplSyntaxOn\makeatletter
\pgfmathdeclarefunction{pointveclen}{3}{
\begingroup
\tikz@scan@one@point\pgfutil@firstofone(#1)\relax
\pgf@xx\pgf@x \pgf@xy\pgf@y
\tikz@scan@one@point\pgfutil@firstofone(#2)\relax
\pgf@yx\pgf@x \pgf@yy\pgf@y
\pgfmathparse{veclen(\the\pgf@xx+#3\the\pgf@yx,\the\pgf@xy+#3\the\pgf@yy)}
\pgfmath@smuggleone\pgfmathresult
\endgroup
}
\NewDocumentCommand\tkzAutoLabelPolygons{O{} r()} {
\group_begin:
\seq_gclear:N \g_tmpa_seq
\foreach \x in {#2} { \seq_gput_right:Ne \g_tmpa_seq { \x } }
\seq_get_left:NN \g_tmpa_seq \l_tmpa_tl
\seq_get_right:NN \g_tmpa_seq \l_tmpb_tl
\seq_gput_left:NV \g_tmpa_seq \l_tmpb_tl
\seq_gput_right:NV \g_tmpa_seq \l_tmpa_tl
\int_step_inline:nnn { 2 } { \seq_count:N \g_tmpa_seq - 1 }
{
\seq_gpop_left:NN \g_tmpa_seq \l_tmpa_tl
\tl_set:Ne \l_tmpb_tl { \seq_item:Nn \g_tmpa_seq { 1 } }
\tl_set:Ne \l_tmpc_tl { \seq_item:Nn \g_tmpa_seq { 2 } }
\pgfinterruptboundingbox
\coordinate (tempa) at ($1cm/pointveclen("\l_tmpa_tl","\l_tmpb_tl","-")
*($(\l_tmpa_tl)-(\l_tmpb_tl)$)$);
\coordinate (tempb) at ($1cm/pointveclen("\l_tmpc_tl","\l_tmpb_tl","-")
*($(\l_tmpc_tl)-(\l_tmpb_tl)$)$);
\coordinate (tempc) at ($0.3*1cm/pointveclen("tempa","tempb","+")
*($(tempa)+(tempb)$)$);
\endpgfinterruptboundingbox
\path (\l_tmpb_tl) -- ($(\l_tmpb_tl)-(tempc)$)
node[label~style,anchor=center,#1] {$\l_tmpb_tl$};
}
\group_end:
}
\ExplSyntaxOff\makeatother
\begin{document}
\begin{tikzpicture}
\tkzDefPoints{-1/-1/A, 1/-2/B, 3/0/C, 2/4/D, 0/5/E,-3/2/F}
\tkzDrawPolygons[thick](A,...,F)
\tkzAutoLabelPolygons(A,...,F)
\end{tikzpicture}
\begin{tikzpicture}
\tkzDefPoints{-1/-1/A, 1/-2/B, 0.5/0/C, 2/4/D, 0/5/E,-3/2/F}
\tkzDrawPolygons[thick](A,...,F)
\tkzAutoLabelPolygons(A,...,F)
\end{tikzpicture}
\end{document}
问 是否可以实现对一些可构成(凸)多边形的点实现自动智能在其外侧添加标签?