我想让文本沿着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 个参数:
第一个参数是可选的,有一个默认值
[above]
,将文本放在所选侧的上方第二个参数指定要将文本放在哪一侧
第三个参数允许输入内容。
三角形示例
\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 面、第 2 面等相匹配。
我假装能够记住 TikZ 如何计算角度,但这主要只是通过反复试验得出的结论。不过它相当简单,因此可以轻松扩展到更大的多边形。
交换此列表中的项目以重新标记边。如果您不想要边 n 上的任何东西,则忽略该对
n/$something
。同样,如果您愿意,可以将其扩展到更大的多边形。设置
yshift
标签与多边形之间的距离。我通过反复试验并选择了我认为“好看”的标签,从而获得了这个结果。