5. Using dot2tex as a module

It is possible to load dot2tex as a module for use in other Python programs. Here is a basic example:

import dot2tex
testgraph = """
digraph G {
    a -> b -> c -> a;
}
"""
texcode = dot2tex.dot2tex(testgraph, format='tikz', crop=True)

The dot2tex function is the main interface:

dot2tex(dotsource,**kwargs)

It takes the following input arguments:

Argument Description
dotsource A string containing a DOT or XDOT graph.
**kwargs An arbitrary number of conversion options passed as keyword arguments

The function returns the resulting LaTeX code as a string.

The supported options are the same as the command line options (long version). Here are a few examples:

import dot2tex as d2t
texcode = d2t.dot2tex(testgraph, format='tikz', crop=True)
texcode = d2t.dot2tex(testgraph, preproc=True,figonly=True)
texcode = d2t.dot2tex(testgraph, debug=True)

Option values are either strings or booleans. Note that some of the command line options are not relevant when using dot2tex as a module.

To specify a template you can use the template option like this:

import dot2tex
mytemplate = "<<drawcommands>>"
texcode = dot2tex.dot2tex(graph, template = mytemplate)

5.1. Debugging

You can set debug=True to create a detailed log useful for debugging. To retrieve the content of the log you can use the get_logstream function. It will return a StringIO instance. You can then use the getvalue() class method to get the actual text. Example:

import dot2tex
texcode = dot2tex.dot2tex(testgraph, debug=True)
logstream = dot2tex.get_logstream()
print logstream.getvalue()

5.2. The positions output format

When you use dot2tex as a module you have access to the special positions output format if you use format=positions. The dot2tex function will then return dictionary with node name as key and a (x, y) tuple with the center position of the node as value:

>>> import dot2tex
>>> testgraph = """
... digraph G {
...    a -> b -> c -> a;
... }
"""
>>> dot2tex.dot2tex(testgraph, format='positions')
{'a': [54, 162], 'b': [27, 90], 'c': [54, 18]}