想知道通常使用什么包来绘制非交叉分区作为线或n-gon。我没有找到 ctan 上的任何特定包或任何pgf/tikz
示例,但我猜每个人都只是使用tikz
。
最小工作示例:
\begin{tikzpicture}
\filldraw
(0,0) circle (2pt)-- (1,0) circle (2pt) -- (2,0) circle (2pt) -- (3,0)
circle (2pt) -- (4,0) circle (2pt) -- (5,0) circle (2pt);
\draw[-] (0,0) to[out=90,in=180] (1.5, 2) to [out=0, in=90] (3,0);
\draw[-] (1,0) to[out=90,in=180] (1.5,1) to [out=0,in=90] (2,0);
\draw[-] (4,0) to[out=90,in=180] (4.5,1) to [out=0,in=90] (5,0);
\end{tikzpicture}
答案1
下面的代码定义了一个\Matching
接受两个参数的宏:
#1
是点的数量(实际上少了一个,因为编号从 0 开始)#2
是要匹配的逗号分隔的对列表
例如,\Matching{6}{0/3, 1/2, 4/5}
生成如下图所示:
完整代码如下:
\documentclass{article}
\usepackage{tikz}
\newcommand\Matching[2]{%
\begin{tikzpicture}
\draw(-0.5,0) -- ++ (#1+1,0);
\foreach \x in {0,...,#1}{
\draw[circle,fill] (\x,0)circle[radius=1mm]node[below]{$\x$};
}
\foreach \x/\y in {#2} {
\draw(\x,0) to[bend left=45] (\y,0);
}
\end{tikzpicture}%
}
\begin{document}
\Matching{6}{0/3, 1/2, 4/5}
\end{document}
在 OP 中,点可能位于半整数位置。如果这是想要的,则很容易调整宏的定义。
答案2
根本不需要使用包
\documentclass{article}
\begin{document}
\setlength\unitlength{2mm}
\newcounter{zz}
\begin{picture}(30,20)
\put(0,2){\line(1,0){60}}
\multiput(0,2)(10,0){7}{\circle*{1}}
\multiput(0,0)(10,0){7}{\makebox(0,0){\thezz\stepcounter{zz}}}
\put(20,2){\oval(20,5)[t]}
\put(20,2){\oval(30,7)[t]}
\put(50,2){\oval(10,5)[t]}
\end{picture}
\end{document}
答案3
如果你真的想要半圆,你可能需要修改@Andrew 的精彩答案
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\newcommand\Matching[2]{%
\begin{tikzpicture}
\draw(-0.5,0) -- ++ (#1+1,0);
\foreach \x in {0,...,#1}{
\draw[circle,fill] (\x,0)circle[radius=1mm]node[below]{$\x$};
}
\foreach \x/\y in {#2} {
\pgfmathsetmacro{\Radius}{\y/2-\x/2}
\draw(\x,0) arc[radius=\Radius, start angle=180, end angle=0];
}
\end{tikzpicture}%
}
\begin{document}