使用 Tikz Latex 修复维恩图中的字体问题

使用 Tikz Latex 修复维恩图中的字体问题

我是 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}

在此处输入图片描述

但在我看来,这仍然存在问题,因为左下角标有“经济层”的圆圈略有重叠。要手动修复此问题,您可以使用每个节点的xshiftyshift选项来微调定位。

答案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}

在此处输入图片描述

相关内容