見出し画像

TikZでベン図を描く方法

TikZでベン図を描く方法を書く.

  • 2回タイプセットすること.

  • save path, use path, insert pathが便利.

  • nodeの外枠をpathとして取得できることがわかった.

\documentclass[border=20pt]{jlreq}
\usepackage{tikz}
\usetikzlibrary{backgrounds,fit}
\begin{document}
\begin{figure}
    \centering
    \begin{tikzpicture}[
            remember picture,
            overlay,
            filler/.style={
                insert path={(current page.north east) rectangle (current page.south west)}
                },
            element/.style={
                inner sep=1pt,fill=white,circle
                },
            set/.style={
                fill=white,draw=black
            }
        ]
        \node at (0,0) (a) {};
        \node at (-2,0) (b) {};
        \node at (2,0) (c) {};
        %
        % (a) (b) (c) にfitするnodeを作る.
        % nodeのオプションにsave pathを渡してnodeの外枠をpathとして取得する.
        %
        \begin{scope}[on background layer]
            \node[save path=\pa,circle,draw,fit=(a) (b),inner sep=25pt] (A) {};
            \node[save path=\pb,circle,draw,fit=(a) (c),inner sep=25pt] (B) {};
        \end{scope}
        %
        % 左を塗る.
        %
        \begin{scope}
            \path[clip][use path=\pa];
            \fill[magenta!30] [filler] ;
        \end{scope}
        %
        % 右を塗る.
        %
        \begin{scope}
            \path[clip][use path=\pb];
            \fill[cyan!30] [filler];
        \end{scope}
        %
        % 真ん中を塗る.
        %
        \begin{scope}
            \path[clip][use path=\pb];
            \path[clip][use path=\pa];
            \fill[yellow!30] [filler];
        \end{scope}
        %
        % ラベルと枠線を描画
        %
        \node[element] at  (a) {$a$};
        \node[element] at  (b) {$b$};
        \node[element] at  (c) {$c$};
        \draw[draw =black,use path=\pa \pb] ;
        \node[set] at (A.north) {$A$};
        \node[set] at (B.north) {$B$};
    \end{tikzpicture}
\end{figure}
\end{document}

お役に立ったらスキしてください. サポートは投稿を続けるモチベーションになります. ありがとうございます.