A Pandoc filter to express diagrams inline using the Haskell EDSL _Diagrams_

Latest on Hackage:0.3

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow stackage.org to host generated Haddocks.

BSD3 licensed by Daniel Bergey

Build Status

A pandoc filter to express diagrams inline using the haskell EDSL diagrams.


Create an input file called demo.md with the following text:

    This is how to draw a circle:
    ~~~ diagram
    example = circle 1

Install diagrams-pandoc, then run pandoc as follows:

    pandoc -t html demo.md --filter diagrams-pandoc -o demo.html -s

The file demo.html should now have an img tag pointing at a PNG of a circle.


You can specify attributes to control how the diagram is generated. The following, for example,

    ~~~ {.diagram width=800 height=400}
    example = circle 1

will override the default width and height of the generated diagram. The following attributes are supported:

  • width: The width of the generated diagram, in pixels. The default is 500.
  • height: The height of the generated diagram, in pixels. The default is 200.


diagrams-pandoc compiles code blocks containing diagrams expressions and includes the resulting images in the pandoc markup. It is meant to be run as a pandoc filter as shown above.

diagrams-pandoc evaluates the diagrams expression example by default. This can be modified by passing a command line argument.

diagrams-pandoc is aware of two code block classes. A block with the diagram class will be replaced by the resulting image—the code will not appear in the output. A block with the diagram-haskell class will produce both an image and a (syntax highlighted) code block. The input block is replaced by image appears before the code block, and the diagram-haskell class is replaced by the haskell class, so that pandoc can perform syntax highlighting as usual.

diagrams-pandoc produces images in the pdf format when used with the latex and beamer writers of pandoc and produced png output otherwise.

I have only tested with pandoc’s markdown reader. In particular, the rst reader does not attach classes to code blocks, only to Div elements.


diagrams-pandoc is on Hackage. To install, run cabal install diagrams-pandoc


  • use pandoc output type to pick an image file format
  • for formats which are more human-readable (eg, markdown, rst), leave code block alone?
  • provide command-line flags to override default behavior
  • add Backends besides Cairo
  • Support RST by handling Div class=diagram [CodeBlock foo bar] the same as CodeBlock class=diagram bar
  • Alternate install directions using stack


v0.3 (2016-02-23)

  • Choose output type based on Pandoc output format
  • Set diagram size from Attributes in Pandoc IR / markdown
  • Support latest pandoc-types
comments powered byDisqus