带有元素的绘图集

带有元素的绘图集

我使用以下 tex 通过相对定位来绘制集合中的某些元素:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\usetikzlibrary{positioning}
\usetikzlibrary{shapes}
\usetikzlibrary{backgrounds}

\def\leftset{(0,0) circle(2cm)}
\def\rightset{(0:2.5cm) circle(2cm)}

\begin{document}

\begin{tikzpicture}[
    ce/.style={draw,circle,fill,red, minimum size=0.1cm},
    se/.style={draw,star,star points=5,star point ratio=0.5,fill=green, minimum size=0.1cm}
    ]

    \begin{scope}
        \draw \leftset node[below] [label=below: {$A$}] {};
        \node[ce] at (-.2, -1)  (a1) [label=right: {$a_1$}] {};
        \node[ce] at (-.2, 0)   (a2) [label=right: {$a_2$}] {};
        \node[ce] at (-.2, 1)   (a3) [label=right: {$a_3$}] {};
    \end{scope}

    \begin{scope}[shift={(4.2cm,0cm)}]
        \draw \leftset node[below] [label=below: {$B$}] {};
        \node[se] at (-.2, -1)  (b1) [label=right: {$b_1$}] {};
        \node[se] at (-.2, 0)   (b2) [label=right: {$b_2$}] {}; 
        \node[se] at (-.2, 1)   (b3) [label=right: {$b_3$}] {};
    \end{scope}

\end{tikzpicture}

\end{document}

我的问题是:

  1. 为什么集合名称 $A$、$B$ 不在集合图下方?

  2. 有没有更简单的方法来定义集合及其元素,例如:\drawset at (x,y) elements[circle] {$a_1$, $a_2$, $a_3$}

当然,任何改进也都是受欢迎的。

答案1

  1. 为什么集合名称 $A$、$B$ 不在集合图下方?

您使用的结构\draw (0,0) circle(2cm) node[below] [label=below: {$A$}] {};意味着将笔放在原点(0,0)并绘制一个圆圈。此指令不会移动笔,因此,node[below]也是用笔在 处绘制的(0,0)。如果您用 绘制一个圆形节点,而不是圆形label=below:...,则此标签将位于圆圈下方。

  1. 有没有更简单的方法来定义集合及其元素,例如

以下代码可能是一个解决方案,您可以在所需的位置绘制集合元素,并在集合周围绘制一个fit节点。顺便说一句,我已将标签放置在元素上,而labels不是独立节点。

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\usetikzlibrary{positioning}
\usetikzlibrary{shapes}
\usetikzlibrary{backgrounds, fit}

\def\leftset{(0,0) circle(2cm)}
\def\rightset{(0:2.5cm) circle(2cm)}

\begin{document}

\begin{tikzpicture}[
    ce/.style={draw,circle,fill,red, minimum size=0.1cm},
    se/.style={draw,star,star points=5,star point ratio=0.5,fill=green, minimum size=0.1cm}
    ]

    \begin{scope}
        \node[ce, label=right:$a_1$] at (-.2, -1) (a1) {};
        \node[ce, label=right:$a_1$] at (-.2, 0) (a2) {};
        \node[ce, label=right:$a_1$] at (-.2, 1) (a3) {};
        \node[draw, circle, fit=(a1) (a2) (a3), label=below:{$A$}] {};
    \end{scope}

    \begin{scope}[shift={(4.2cm,0cm)}]
        \node[se, label=right: {$b_1$}] at (-.2, -1)  (b1) {};
        \node[se, label=right: {$b_2$}] at (-.2, 0)   (b2) {}; 
        \node[se, label=right: {$b_3$}] at (-.2, 1)   (b3) {};
        \node[draw, circle, fit=(b1) (b2) (b3), label=below:{$B$}] {};
    \end{scope}

\end{tikzpicture}

\end{document}

在此处输入图片描述

答案2

  1. Abad 的节点坐标为B(0,0)因此,这些节点坐标低于a2b2。使用positioning库,可以将其设置为“低于 a1”。

  2. 我不知道\drawset命令。我更喜欢使用\foreach

代码:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\usetikzlibrary{positioning}
\usetikzlibrary{shapes}
\usetikzlibrary{backgrounds}

\def\leftset{(0,0) circle(2cm)}
\def\rightset{(0:2.5cm) circle(2cm)}

\begin{document}

\begin{tikzpicture}[
    ce/.style={draw,circle,fill,red, minimum size=0.1cm},
    se/.style={draw,star,star points=5,star point ratio=0.5,fill=green, minimum size=0.1cm}
    ]

    \begin{scope}
    \foreach \y [count=\x] in {-1,0,1}{
    \node [ce] at (-.2,\y) (a\x) [label=right: {$a_{\x}$}] {};
    };
    \draw \leftset node[below of=a1,yshift=3mm] {$A$};
   \end{scope}

    \begin{scope}[shift={(4.2cm,0cm)}]
    \foreach \y [count=\x] in {-1,0,1}{
    \node [se] at (-.2,\y) (b\x) [label=right: {$b_{\x}$}] {};
    };
    \draw \leftset node[below of=b1,yshift=3mm] {$B$};
    \end{scope}

\end{tikzpicture}
\end{document}

输出: 在此处输入图片描述

相关内容