Ladot 1.1
---------

2005-12-03
Brighten Godfrey
godfreyb@bigw.org


License
-------

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

Description
-----------

For a general description of Ladot, please see

    http://brighten.bigw.org/projects/ladot/

One-time setup
--------------

Install psfrag, dot (graphviz), and latex.  If you are using this
program, you probably already have dot and latex.  psfrag is available
here:

    http://www.ctan.org/tex-archive/help/Catalogue/entries/psfrag.html?action=/tex-archive/macros/latex/contrib/supported/psfrag/


Usage
-----

1.  Specify your graph in a file ending in `.ladot'.  The format is dot's,
    except that you may replace text with LaTeX math expressions, thusly:

        digraph mygraph {
            $v_1$(2) $v_2$
            $v_1$ -> $v_2$
            }

    You may optionally append a size hint in parenthesis as shown above.
    This tells Ladot rougly how many characters wide your rendered LaTeX
    will be (not an exact science).  If you leave out the size hint, as
    in node $v_2$ in the above example, Ladot will take a guess.  You only
    have to use the size hint once for each unique LaTeX snippet.

2.  Run ladot on the file:

        ladot mygraph.ladot

    This creates `mygraph.ps' (the raw PostScript output of dot) and
    `mygraph.tex' (a snippet of LaTeX code which tells psfrag to
    substitute tags in the PostScript for the LaTeX figures).

3.  In the preamble of your LaTeX file, put

        \usepackage{psfrag}

    LyX users: Set your preamble in Layout -> Document -> Preamble.

4.  Where you would like to include the graph, write
    
        \input{mydot.tex}
        \includegraphics{mydot.ps}

    LyX users: use Insert -> Include File and Insert -> Graphics.

5.  Process your LaTeX file with `latex' as normal.  Note that psfrag
    is sadly not compatible with pdflatex.

An example of all this is in the `example' directory.  Just type `make'
to produce the final output, `test.ps'.

Limitations/Bugs/To Do
----------------------

    * Is limited by psfrag: doesn't work with pdflatex.
    * Cannot exploit full power of psfrag, especially regarding alignment
      in formatting.  Ladot centers everything.  Should add option for this.
    * Quoting is nonexistent.  Don't try to put a dollar sign in any of your
      TeX or Dot! :-)  Several problems would be fixed if we used a real dot
      parser instead of just some perl hack, but I haven't gotten around to
      doing this.
    * Each LaTeX snippet must appear on a single line in your Ladot file.
      That is, you cannot have something like
      
          $foo
             bar$
    
    * Since I only ever need to use LaTeX in Dot for math, Ladot only handles
      math expressions.  This is a needless limitation, but it makes the
      format more convenient.  You can still use normal text, however, by
      turning on the appropriate font within the equation.
    * It can't take input on stdin.
    * Your files must have the suffix ".ladot".
    * Ladot picks short random strings for the stubs inserted into the
      PostScript (which you can see in the mydot.ps output, but which are
      replaced with LaTeX in the output of your LaTeX file).  There is a
      chance these could conflict with each other or with other labels in the
      Dot file, causing incorrect, confusing, and frustrating results.
      (Note that we could remember which stubs we picked and pick new ones, but
      still there might be conflicts with other text if stubs are short.)
      The best solution would be to make the stubs much longer, thus
      making the probability of any conflict negligible.  However, currently
      we sometimes need to pick short stubs since the stub length tells Dot
      how much space to leave for the label.  This would be fixed by fixing
      the next limitation...
    * Should have better control on how much space is left for rendered LaTeX
      (e.g., inches/pixels/mm instead of fuzzy "number of characters" measure).

Change Log
----------

Version 1.1 (2005-12-03)

    * Workaround for compatibility with Graphviz 2.2 and higher.  Those versions
      of Graphviz output postscript which confuses psfrag, so we have to do
      a little postprocessing of Graphviz's postscript.  The fix is courtesy of
      Riccardo de Maria and Kjell Magne Fauske.
    * You may now include $math$ at any point within a label, rather than being
      forced to make the entire label one math expression.  For example:
      
          mynode [label = "$math on line one$(10)\n$...and line two$(7)"]
          
      Thanks to Alet Roux for suggesting this.

Version 1.0 (2003-03-31)

    * Initial release.
