使用 xymatrix 绘制图形。还有其他方法吗?

使用 xymatrix 绘制图形。还有其他方法吗?

我正在使用该包xy绘制简单的图形或网络。它允许有向和无向边,甚至允许边上的权重,但代码非常复杂,很难构建比下面显示的更大的示例。

有人知道另一种方法来做到这一点(一种简单的方法)吗?

我当前使用的代码示例:

\begin{figure}
 \centering
  \begin{minipage}{0.4\textwidth}
    \centering
    \[
    \xymatrix{ 
        \xy*{1}*\cir<6pt>{}\endxy\ar@{->}[r]                            & \xy*{2}*\cir<6pt>{}\endxy\ar@{->}[d]                 \\
        \xy*{4}*\cir<6pt>{}\endxy\ar@{->}[ur]\ar@{->}@/_/[r]\ar@{->}[u] & \xy*{3}*\cir<6pt>{}\endxy\ar@{->}[lu]\ar@{->}@/_/[l]
    }
    \]
  \end{minipage}
  %\hfill
  \begin{minipage}{0.4\textwidth}
    \centering
    \[
    \xymatrix{ 
      \xy*{1}*\cir<6pt>{}\endxy\ar@{-}[r]                      & \xy*{2}*\cir<6pt>{}\endxy\ar@{-}[d]  \\
      \xy*{4}*\cir<6pt>{}\endxy\ar@{-}[ur]\ar@{-}[r]\ar@{-}[u] & \xy*{3}*\cir<6pt>{}\endxy\ar@{-}[lu]
    }
    \]
  \end{minipage}

    \label{fig:graphExample}
\end{figure}

结果是:

https://i.stack.imgur.com/hWeaI.png

答案1

类似这样通过tikz。首先为所有节点定义一个样式文件,并使用和m分配节点 1 的位置,其余节点可以使用选项中的相对位置命令分配。之后使用(internal){external label}right/left/above/below = xx cm of <node 1>

\draw[m,->] (< 节点 1 >) -- (< 节点 2 >);

对于曲线使用(a) to [bend right/left, out=<ang1>, in=<ang2>] (b)

在此处输入图片描述

代码

\documentclass[varwidth]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning,arrows}
\tikzset{
m/.style={circle,draw,fill=gray!40,minimum size=20},outer sep=5pt}
\begin{document}
\begin{tikzpicture}
\node[m] at (0,0)(1){1};
\node[m, right=1cm of 1](2){2};
\node[m, below=1cm of 2](3){3};
\node[m, below=1cm of 1](4){4};
\draw[-] (1)--(2) (2)--(3) (3)--(4) (4)--(1);
\draw[-] (4) -- (2);
\draw[-] (3) -- (1);
\end{tikzpicture}
\par

\begin{tikzpicture}
\node[m] at (0,0)(1){1};
\node[m, right=1cm of 1](2){2};
\node[m, below=1cm of 2](3){3};
\node[m, below=1cm of 1](4){4};
\draw[->] (1) -- (2);
\draw[->] (2) -- (3); 
\draw[->] (4) -- (1);
\draw[->] (3) to[bend right] (4);
\draw[->] (4) to[bend right] (3);
\draw[->] (4) -- (2);
\draw[->] (3) -- (1);
\end{tikzpicture}
\end{document}

答案2

你可以这样做。您可以在 usepackage pst-node 上找到文档,并在TUG:ps矩阵

这是您的图片的代码(使用 latex->dvips>pstopdf 进行编译)

\documentclass{article}

\usepackage{pst-all}

\begin{document}
\psset{nodesep=3pt}
\begin{psmatrix}[mnode=circle,rowsep=3cm,colsep=3cm]
[name=A] 1 & [name=B] 2\\
[name=C]4 & [name=D]3

\ncline{->}{A}{B}
\ncline{->}{B}{D}
\ncline{->}{C}{A}
\ncline{->}{C}{B}
\ncline{->}{D}{A}
\ncarc[arcangle=20]{->}{C}{D}
\ncarc[arcangle=20]{->}{D}{C}
\end{psmatrix}
\hspace{1cm}
\begin{psmatrix}[mnode=circle,rowsep=3cm,colsep=3cm]
[name=A] 1 & [name=B] 2\\
[name=C]4 & [name=D]3

\ncline{A}{B}
\ncline{B}{D}
\ncline{C}{A}
\ncline{C}{B}
\ncline{D}{A}
\ncline{C}{D}
\end{psmatrix}

\end{document}

答案3

为了完整起见,这里是使用

% arara: pdflatex

\documentclass{article}
\usepackage{tikz-cd}

\begin{document}
\[
\begin{tikzcd}
\tikz{\node[draw,circle]{1}} \ar{r} & \tikz{\node[draw,circle]{2}} \ar{d}\\
\tikz{\node[draw,circle]{4}} \ar{u} \ar{ur} \ar[bend right=15]{r} & \tikz{\node[draw,circle]{3}} \ar[crossing over]{ul} \ar[bend right=15]{l}
\end{tikzcd}
\]
\[
\begin{tikzcd}[every arrow/.append style=dash]
\tikz{\node[draw,circle]{1}} \ar{r} & \tikz{\node[draw,circle]{2}} \ar{d}\\
\tikz{\node[draw,circle]{4}} \ar{u} \ar{r} \ar{ur} & \tikz{\node[draw,circle]{3}} \ar[crossing over]{ul}
\end{tikzcd}
\]
\end{document}

在此处输入图片描述

相关内容