我正在尝试使用 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}
我想这就是全部了。