文字沿正多边形边倾斜

文字沿正多边形边倾斜

我想让文本沿着regular polygon三角形的边倾斜,但sloped做不到。我猜是因为节点位于一个点上,而不是路径上。我怎样才能让文本side 1倾斜?

梅威瑟:

\documentclass[margin=5mm]{standalone}
\usepackage{pgf,tikz}
\usetikzlibrary{shapes.geometric}
\tikzset{
    buffer/.style={
        draw,regular polygon,
        regular polygon sides=3,
        minimum height=4em
    }
}
\begin{document}
\begin{tikzpicture}
    \node[buffer] (triangle) {} ;
    \node[sloped,font=\footnotesize] at (triangle.side 1) {Side 1}; 
\end{tikzpicture}
\end{document}

制作

在此处输入图片描述

答案1

[sloped]选项使节点文本相对于路径倾斜。但第二个\node命令中没有路径。

解决此问题的方法是添加一条沿一侧绘制不可见线的路径,并旋转节点以使其具有与该线相同的斜率。以下宏可以解决问题:

\newcommand\mytext[3][above]{\path(s.corner #2)--(s.side #2) node[sloped,at end,#1]{#3};}

它需要 3 个参数:

  1. 第一个参数是可选的,有一个默认值[above],将文本放在所选侧的上方

  2. 第二个参数指定要将文本放在哪一侧

  3. 第三个参数允许输入内容。

三角形示例

\documentclass[margin=5mm]{standalone}
\usepackage{pgf,tikz}
\usetikzlibrary{shapes.geometric}
\tikzset{
    buffer/.style={
        draw,regular polygon,
        regular polygon sides=3,
        minimum height=4em
    }
}

\newcommand\mytext[3][above]{\path(s.corner #2)--(s.side #2) node[sloped,at end,#1]{#3};}

\begin{document}
\begin{tikzpicture}
    \node[buffer] (s) {} ;
    % \node[sloped,font=\footnotesize] at (triangle.side 1) {Side 1}; 
    \mytext{1}{side 1}
    \mytext[below,green]{2}{side 2}
    \mytext[above,red]{3}{side 3}
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

六边形示例

\mytext{1}{\footnotesize side 1}
\mytext[below,green]{5}{\footnotesize side 5}
\mytext[below,red]{3}{\footnotesize side 3}

在此处输入图片描述

答案2

使用 PSTricks。

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-node,pst-plot}
\def\N{10}
\def\Offset{ 45 }
\psset{nrot=:D}
\begin{document}
\begin{pspicture}(-4,-4)(4,4)
\curvepnodes[plotpoints=\numexpr\N+1]{0}{360}{3.7 t \Offset add PtoC}{X}
\multido{\ia=0+1,\ib=1+1}{\N}{\ncline{X\ia}{X\ib}\nbput{$(\ia,\ib)$}}
\end{pspicture}
\end{document}

在此处输入图片描述

各种各样的

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-node,pst-plot}

\def\Offset{ 45 }
\psset{nrot=:D}

\begin{document}
\multido{\i=3+1}{10}{%
\def\N{\i}
\begin{pspicture}(-4,-4)(4,4)
\curvepnodes[plotpoints=\numexpr\N+1]{0}{360}{3.7 t \Offset add PtoC}{X}
\multido{\ia=0+1,\ib=1+1}{\N}{\ncline{X\ia}{X\ib}\nbput{$(\ia,\ib)$}}
\end{pspicture}}
\end{document}

在此处输入图片描述

答案3

也许其他人知道如何使其regular polygon按预期运行,但如果不知道,您只需使用一些普通的 TikZ,然后手动放置标签。:-)

以下是实现此目的的一种方法,使用一些scope's 和一个\foreach循环:

\documentclass{article}

\usepackage{pgf,tikz}
\usetikzlibrary{shapes}

\tikzset{
    buffer/.style={
        draw, regular polygon,
        regular polygon sides=3,
        minimum height=4em
    }
}

\begin{document}

\begin{tikzpicture}

    \node [buffer] (triangle) {} ;
    
    \newcommand*{\rot}[1]{#1 * 120 - 60} % note 1
    
    \foreach \s/\label in {1/tea, 2/coffee, 3/juice} { % note 2
        \begin{scope}[rotate=\rot{\s}, yshift=1.7em]   % note 3
            \node [rotate=\rot{\s}] {\label};
        \end{scope}
    }
    
\end{tikzpicture}

\end{document}

看起来像

在此处输入图片描述

笔记:

  1. 这是一个函数,它可以确定您将第 1 面的标签旋转多少度才能与第 1 面、第 2 面等相匹配。

    我假装能够记住 TikZ 如何计算角度,但这主要只是通过反复试验得出的结论。不过它相当简单,因此可以轻松扩展到更大的多边形。

  2. 交换此列表中的项目以重新标记边。如果您不想要边 n 上的任何东西,则忽略该对n/$something。同样,如果您愿意,可以将其扩展到更大的多边形。

  3. 设置yshift标签与多边形之间的距离。我通过反复试验并选择了我认为“好看”的标签,从而获得了这个结果。

相关内容