我是 Tikz 的新手。我有三个维恩图。出于某种原因,维恩图中的文本从节点的下半部分开始。有没有办法自动将其对齐/调整到形状的大小?
\def\firstcircle{(0,0) circle (2.1cm)}
\def\secondcircle{(55:3.5cm) circle (2.1cm)}
\def\thirdcircle{(0:3.5cm) circle (2.1cm)}
\centering
\begin{tikzpicture}[>=stealth,on grid,auto]
\begin{scope}[shift={(4cm,-15cm)}, fill opacity=0.5]
\fill[gray!30!white] \firstcircle;
\fill[blue!30!white] \secondcircle;
\fill[cyan!60!white] \thirdcircle;
\draw \firstcircle node[below] {
\begin{tabular}{c}
\textbf{Economic Layer}: \\
A\\
B\\
C\\
D
\end{tabular}
};
\draw \secondcircle node [above,text width=2cm,align=center] {
\begin{tabular}{c}
\textbf{Technology Layer}\\
A \& B\\
C \& D
\end{tabular}
};
\draw \thirdcircle node [below,text width=2cm,align=center] {
\begin{tabular}{c}
\textbf{Social Layer}\\
A\\
B\\
C
\end{tabular}
};
\end{scope}
\end{tikzpicture}
答案1
如果您希望文本位于中心,那么您可以将text centered
选项添加到 tikz 图片。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes, positioning}
\begin{document}
\def\firstcircle{(0,0) circle (2.1cm)}
\def\secondcircle{(55:3.5cm) circle (2.1cm)}
\def\thirdcircle{(0:3.5cm) circle (2.1cm)}
\centering
\begin{tikzpicture}[>=stealth,on grid,auto, text centered]
\begin{scope}[shift={(4cm,-15cm)}, fill opacity=0.5]
\fill[gray!30!white] \firstcircle;
\fill[blue!30!white] \secondcircle;
\fill[cyan!60!white] \thirdcircle;
\draw \firstcircle node[] {
\begin{tabular}{c}
\textbf{Economic Layer}: \\
A\\
B\\
C\\
D
\end{tabular}
};
\draw \secondcircle node [] {
\begin{tabular}{c}
\textbf{Technology Layer}\\
A \& B\\
C \& D
\end{tabular}
};
\draw \thirdcircle node [] {
\begin{tabular}{c}
\textbf{Social Layer}\\
A\\
B\\
C
\end{tabular}
};
\end{scope}
\end{tikzpicture}
\end{document}
但在我看来,这仍然存在问题,因为左下角标有“经济层”的圆圈略有重叠。要手动修复此问题,您可以使用每个节点的xshift
和yshift
选项来微调定位。
答案2
您可能还不知道,但可以有不同的形状。基本形状是矩形和圆形,但您可以在tikzlibrarynodes
中找到更多。shapes
在您的代码中,圆圈和文本是不同的实体,您必须调整它们。另一种解决方案可能是使用圆形节点:
\node[draw, circle, minimum size=4.2cm, fill=gray!30, align=center, opacity=0.5, text opacity=1]
{\\
\textbf{Economic Layer}: \\
A\\
B\\
C\\
D
};
此命令绘制一个最小半径为 2.1 厘米的圆(如果内部文本需要更多空间,节点将增大),文本与中心对齐。通过声明align
选项,无需包含tabulars
在节点内,但\\
仍可用作换行命令。
您不必在每个节点上重复所有这些选项,而是可以声明.style
:
mycircle/.style={draw, circle, minimum size=4.2cm, align=center,
fill=#1, opacity=0.5, text opacity=1}
此样式有一个参数(#1
),对应填充颜色。
你的代码可以这样写:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[mycircle/.style={draw, circle, minimum size=4.2cm, align=center,
fill=#1, opacity=0.5, text opacity=1}]
\node[mycircle=gray!30] {\\
\textbf{Economic Layer}: \\
A\\
B\\
C\\
D
};
\node[mycircle=blue!30] at (60:3.5cm) {
\textbf{Technology Layer}\\
A \& B\\
C \& D
};
\node[mycircle=cyan!60] at (0:3.5cm) {
\textbf{Social Layer}\\
A\\
B\\
C
};
\end{tikzpicture}
\end{document}