我在 tikz 中有一个自动机,想在合适大小的三角形内放置一些文本。我该如何高效地做到这一点?
我尝试过使用正多边形,但无法将其缩小到正确大小:minimum height
并且minimum size
没有效果。那么是否有任何参数可以控制大小?
\begin{tikzpicture}[auto,>=latex]
\node[state,inner sep=0pt,minimum size=.3cm] at (0,0) (init) {};
\node[state,inner sep=0pt,minimum size=.3cm] at (-5,-1.3) (idelta)
{};
\node[draw,minimum height=.5cm,regular
polygon,regular polygon sides=3] at (-5,-1.3) {foo};
\path[->]
(init)+(0,.5cm) edge (init)
(init) edge node[] {bar} (idelta);
\end{tikzpicture}
答案1
我认为通过字距调整这个已经足够小了(这使得盒子在水平方向上相当小):-)
\documentclass[tikz]{standalone}
\usetikzlibrary{shapes.geometric,automata}
\begin{document}
\begin{tikzpicture}[auto,>=latex]
\node[draw,minimum size=0cm,inner sep=0,regular polygon,regular polygon sides=3] at (-5,-1.3) {\kern-0.15emfoo\kern-0.15em};
\node[draw,minimum size=0cm,inner sep=0,regular polygon,regular polygon sides=3] at (-5,-1.3) {\kern-0.5emfoo\kern-0.5em};
\end{tikzpicture}
\end{document}
答案2
我不懂 tikz,但我确信这些公式之一可以粘贴到 tikz 图片中。
\documentclass{article}
\usepackage{stackengine}
\usepackage{scalerel}
\newlength\triwidth
\newcommand\tridelt[1]{%
\setlength\triwidth{\widthof{#1\ }}%
\stackengine{-.4\triwidth}{#1\ }%
{\scaleto{\Delta}{1.73\triwidth}}{O}{c}{F}{F}{L}%
}
\newcommand\trinorm[1]{%
\setlength\triwidth{\widthof{\ #1\ }}%
\stackengine{-.2\triwidth}{\ #1\ }
{\scaleto{\triangle}{1.73\triwidth}}{O}{c}{F}{F}{L}%
}
\parskip 1ex
\begin{document}
\tridelt{x}
\tridelt{xyz}
\tridelt{xyzpdq}
\trinorm{x}
\trinorm{xyz}
\trinorm{xyzpdq}
\end{document}
答案3
使用 Qrrbrbirlbel 评论和回答如何明确设置 TikZ 标签锚点?,我得到了以下解决方案:
\newcommand{\triangleText}[4]{%x,y,height,text
\node[inner sep=0,draw,minimum height=#3,regular
polygon,regular polygon
sides=3,label={[anchor=south,inner ysep=.03em]below:\footnotesize #4},anchor=north]
at (#1,#2) {};
}
和
\makeatletter
\tikzset{anchor/.append code=\let\tikz@auto@anchor\relax}
\makeatother
在序言中。