我使用以下 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}
我的问题是:
为什么集合名称 $A$、$B$ 不在集合图下方?
有没有更简单的方法来定义集合及其元素,例如:
\drawset at (x,y) elements[circle] {$a_1$, $a_2$, $a_3$}
?
当然,任何改进也都是受欢迎的。
答案1
- 为什么集合名称 $A$、$B$ 不在集合图下方?
您使用的结构\draw (0,0) circle(2cm) node[below] [label=below: {$A$}] {};
意味着将笔放在原点(0,0)
并绘制一个圆圈。此指令不会移动笔,因此,node[below]
也是用笔在 处绘制的(0,0)
。如果您用 绘制一个圆形节点,而不是圆形label=below:...
,则此标签将位于圆圈下方。
- 有没有更简单的方法来定义集合及其元素,例如
以下代码可能是一个解决方案,您可以在所需的位置绘制集合元素,并在集合周围绘制一个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
A
bad 的节点坐标为B
。(0,0)
因此,这些节点坐标低于a2
或b2
。使用positioning
库,可以将其设置为“低于 a1”。我不知道
\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}