非交叉分区或链接模式

非交叉分区或链接模式

想知道通常使用什么包来绘制非交叉分区作为线或n-gon。我没有找到 ctan 上的任何特定包或任何pgf/tikz示例,但我猜每个人都只是使用tikz

所需输出的示例: 线上 6 个点的无交叉匹配

最小工作示例:

\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}

在此处输入图片描述

相关内容