![TikZ 中 filldraw 的相对定位](https://linux22.com/image/444891/TikZ%20%E4%B8%AD%20filldraw%20%E7%9A%84%E7%9B%B8%E5%AF%B9%E5%AE%9A%E4%BD%8D.png)
我正在尝试水平对齐三个带标签的圆圈。使用绝对位置是可行的,尽管我希望圆圈和其标签之间有一个边距。但是我认为能够将它们相对于彼此定位会更好,因为标签长度是可变的。
我目前正在使用 tikz 的定位库,但显然它无法根据命令进行定位filldraw
,或者我只是使用不正确。它只是将圆圈放在彼此的顶部。我真的没有太多使用 tikz 的经验,所以任何帮助都非常感谢!
梅威瑟:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
% absolute
\begin{tikzpicture}[scale=0.50]
\filldraw[fill=white!40!red,thin] (0,0) circle (12pt)
node[anchor=west] {= executing};
\filldraw[fill=white!40!yellow,thin] (8,0) circle (12pt)
node [anchor=west]{=ready};
\filldraw[fill=white!40!green,thin] (14,0) circle (12pt)
node[anchor=west]{=stalling};
\end{tikzpicture}
% relative
\begin{tikzpicture}[scale=0.50]
\filldraw[fill=white!40!red,thin] (0,0) circle (12pt);
\node[right = 6pt] {= executing};
\filldraw[fill=white!40!yellow,thin, right = 24pt] circle (12pt);
\node [right = 6pt]{=ready};
\filldraw[fill=white!40!green,thin, right = 24pt] circle (12pt);
\node[right = 6pt]{=stalling};
\end{tikzpicture}
\end{document}
答案1
您走在正确的道路上 (+1)!我建议您对解决方案进行以下更改:
- 为所有圆圈定义通用样式,并提供填充颜色选项
- 为圆圈写文字(解释)作为标签
- 给标签命名
- 根据标签定位节点
\documentclass[border=3.141592mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[
node distance = 1em,
dot/.style args = {#1/#2}{circle, fill=#1!70, minimum size=12pt,
label={[name=@dot]right:{= #2}}, node contents={}}
]
\node [dot=red/executing];
\node [dot=yellow/ready, right=of @dot];
\node [dot=green/stalling, right=of @dot];
\end{tikzpicture}
\end{document}
或者图片样式略有变化:
\begin{tikzpicture}[
node distance = 1em,
dot/.style args = {#1/#2}{circle, fill=#1!70, minimum size=12pt,
label={[name=@dot]right:{: #2}}, node contents={}},
every label/.append style = {inner xsep=1pt}
]
答案2
好的,所以我发现也可以使用\node
命令并提供circle
参数来绘制圆圈。这样做可以达到预期的效果。如果有更好或更简洁的解决方案,请告诉我。
\begin{tikzpicture}
\node[circle,fill=white!40!red,thin,minimum size=12pt] (circ1) (0,0) {};
\node[right = 4pt] (txt1) {= executing};
\node[circle,fill=white!40!yellow,thin,minimum size=12pt,right = 4pt of txt1] (circ2) {};
\node[right = 4pt of circ2] (txt2) {= ready};
\node[circle,fill=white!40!green,thin,minimum size=12pt,right = 4pt of txt2] (circ3) {};
\node[right = 4pt of circ3] {= stalling};
\end{tikzpicture}