在 *TeX 中使用 Graphviz

在 *TeX 中使用 Graphviz

我正在尝试使用 dot/graphviz 生成一个图形。是否可以将其包含在 *TeX 中并在 *TeX 编译时进行编译?

我读过有关 TikZ 的文章,但是语法不一样,可以将点文件转换为 tikz 吗?

答案1

您可以使用dot2tex,可从 CTAN 获得。

答案2

您可以使用graphviz 包

\documentclass{standalone}
\usepackage[pdf]{graphviz}

\begin{document}
   \digraph{abc}{
      rankdir=LR;
      a -> b -> c;
   }
\end{document}

在此处输入图片描述

更多示例这里

答案3

使用以下方法即可dot2tex包裹:

\documentclass{minimal}
\usepackage[autosize]{dot2texi}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows}

\begin{document}
\begin{dot2tex}[neato,mathmode]
digraph G {
node [shape="circle"];
a_1 -> a_2 -> a_3 -> a_4 -> a_1;
}
\end{dot2tex}
\end{document}

但是,这是一个旧包,可能有其他更好的选择(例如@user1491229 的建议包裹graphviz)。

答案4

dot2tex 软件包现在似乎已经过时了。我无法让它(它们?)在我的 Linux/TexLive 或 Windows/MikTeX 构建系统上运行,所以我推出了自己的自制“gvdot”环境,它相当简单,可以在这两种系统上运行。我想。

\RequirePackage{expl3}
\RequirePackage{moreverb}

% get title from tex filename
\typeout{Job name: \jobname}
\ExplSyntaxOn
\tl_set:NV \xjb \c_sys_jobname_str
\regex_replace_all:nnN{ ["] } { } \xjb
\regex_replace_all:nnN{ [\w\s]+- } { } \xjb
\ExplSyntaxOff
\typeout{Title: \xjb}

% strip spaces from title
\ExplSyntaxOn
\tl_set:NV \nsxjb \xjb
\tl_replace_all:Nnn \nsxjb { ~ } {  }
\ExplSyntaxOff
\typeout{Image Prefix: \nsxjb}

\NewDocumentEnvironment{gvdot}{ m m }{
    \noindent\ignorespaces{}
    % 1. write content to file
    \typeout{Writing file \nsxjb-#1.dot}
    % tab bug fixed with ``-8bit'' argument to xe
    % https://tex.stackexchange.com/questions/264461/xelatex-minted-code-block-represents-tabs-as-i?noredirect=1
    \immediate\verbatimwrite{\nsxjb-#1.dot}
}{
    \par\noindent\ignorespacesafterend{}
    \endverbatimwrite{}
    % 2. compile file with dot
    \typeout{This requires the --shell-escape option.}
    \immediate\write18{dot -Gdpi=288 -Tpng \nsxjb-#1.dot >\nsxjb-#1.png}
    % 288 is 72*4, 300 is not
    % 3. include compiled file here
    \typeout{Including generated image.}
    \includegraphics[scale=0.25,#2]{\nsxjb-#1}
}

请注意有两个参数。#1 是图形的唯一名称。#2 是您想要指定以包含图形的任何其他参数。

我使用 RequirePackage 而不是 usepackage 因为它在一个类文件中,我只是将它直接复制出来,并包含所有必需的位(希望如此)。

moreverb 包适用于 NewDocumentEnvironment。我需要它来执行它的功能。

如果您认为作业名称太复杂,可以将其删除。我出于某些原因将其放在那里,但您可以直接使用参数 #1。

您必须为 xelatex 指定“-8bit”标志,因为如果不指定,它会在保存的点文件中放入奇怪的“^I”字符,这会导致点程序出现奇怪的错误。好吧,要么这样做,要么不使用制表符,我想那也行得通。另一个标志是“--shell-escape”,用于启用执行点。如果您使用的是 lualatex 或 pdflatex,则必须查找正确的标志。

当然,您不必使用点,指定 neato 或 circo 或任何 GraphViz 程序相当简单。

我这样使用它:

\begin{gvdot}{opinion}{width=100pt}
digraph {
    graphviz->is->cool->sorta;
}
\end{gvdot}

我想这就是全部了。

相关内容