ppp allows you to use pandoc in new ways by rendering ASCII-markup to beautiful pictures right from within pandoc's verbatim environments.
See below for illustrative examples and detailed usage instructions.
Bonus on top: Leaving out ppp form the typesetting pipeline will still render your document and the verbatims with the ASCII-markup will still stay readable!
In each case, you will use pandoc's verbatim environment, set the rendering engine and additional options:
~~~~~ {.renderer .option1 .option2=value2}
--- RENDERER-SPECIFIC MARKUP GOES HERE ---
~~~~~
The renderers available to ppp are:
This is a list of the general options, compatible with any type of renderer:
.scale=90%.label=fig:my-figure.title="Some label for the figure"In order to generate ditaa-diagrams, ditaa needs to be installed.
For an exhaustive list of options and possibilities, please check the ditaa homepage.
Apart from the General Options, the possible options specific to ditaa are:
.rounded-corners.no-shadows.no-antialias.no-separationUsing ditaa, the following markup will produce Figure .
~~~~~ {.ditaa .rounded-corners .no-shadows
.scale=90% .title="The ppp and pandoc pipeline"
.label=fig:pipeline-overview .no-antialias .no-separation
} # Caution! These lines actually would have to be on *one* line only!
+-----------------+ +--------+ +--------------------+
| markdown source |------>| ppp |------*--->| pröcessed markdown |
+-----------------+ +--------+ | +--------------------+
| \--->| image files |
+------------------+ +--------------------+
| diagram creation |
+------------------+
| ditaa/dot/rdfdot |
+------------------+
~~~~~

"The ppp and pandoc pipeline"
As a contrast, turning off several options, ditaa will produce an output as in Figure :
~~~~~ {.ditaa .scale=90% .title="The ppp and pandoc pipeline #2" .label=fig:pipeline-overview-2}
+-----------------+ +--------+ +--------------------+
| markdown source |------>| ppp |------*--->| pröcessed markdown |
+-----------------+ +--------+ | +--------------------+
| \--->| image files |
+------------------+ +--------------------+
| diagram creation |
+------------------+
| ditaa/dot/rdfdot |
+------------------+
~~~~~

"The ppp and pandoc pipeline #2"
dot rendering is done through GraphViz's engine. Please cf. Graphviz's Documentation for exact usage specifics on the usage of dot.
With dot as the renderer, the following markup produces the figure as seen in Figure .
~~~~~ {.dot .scale=50% .title=dot Finite State Automaton .label=fig:dot-fsa}
digraph finite_state_machine {
rankdir=LR;
size="8,5"
node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
node [shape = circle];
LR_0 -> LR_2 [ label = "SS(B)" ];
LR_0 -> LR_1 [ label = "SS(S)" ];
LR_1 -> LR_3 [ label = "S($end)" ];
LR_2 -> LR_6 [ label = "SS(b)" ];
LR_2 -> LR_5 [ label = "SS(a)" ];
LR_2 -> LR_4 [ label = "S(A)" ];
LR_5 -> LR_7 [ label = "S(b)" ];
LR_5 -> LR_5 [ label = "S(a)" ];
LR_6 -> LR_6 [ label = "S(b)" ];
LR_6 -> LR_5 [ label = "S(a)" ];
LR_7 -> LR_8 [ label = "S(b)" ];
LR_7 -> LR_5 [ label = "S(a)" ];
LR_8 -> LR_6 [ label = "S(b)" ];
LR_8 -> LR_5 [ label = "S(a)" ];
}
~~~~~

dot Finite State Automaton
neato diagrams behave very similarly to dot Diagrams. Please cf dot Diagrams for more information
The following example produces Figure .
~~~~~ {.neato .scale=50% .title=neato diagram .label=fig:neato-diagram}
graph G {
n0 -- n1 -- n2 -- n3 -- n0;
}
~~~~~

neato diagram
yUML needs a network connection and uses http://yuml.me as the rendering service.
Options specific to yUML can be:
.type=: any of [ class, activity, usecase ].style=: any of [ scruffy, boring, plain ].direction=: any of [ LR, RL, TD, ]With yUML as the renderer, setting .type=class and using the style .style=boring, the following markup produces Figure .
~~~~ {.yuml .style=boring .type=class .direction=TD .title=yUML class diagram .label=fig:yuml-class-diagram}
[Customer] +1 -> *[Order]
[Order] ++1 -items> *[LineItem]
[Order] -0..1> [PaymentMethod]
~~~~

yUML class diagram
With scruffy style and .type=usecase, the following example produces Figure .
~~~~ {.yuml .style=scruffy .type=usecase .title=yUML usecase diagram .label=fig:yuml-usecase-diagram}
// Cool Use Case Diagram
[Customer]-(Make Cup of Tea)
(Make Cup of Tea)<(Add Milk)
(Make Cup of Tea)>(Add Tea Bag)
~~~~

yUML usecase diagram
Lastly, using .type=activity and .style=plain the following example produces Figure .
~~~~ {.yuml .style=plain .type=activity .title=yUML activity Diagram .label=fig:yuml-activity-diagram}
(start)->|a|,|a|->(Make Coffee)->|b|,|a|->(Make Breakfast)->|b|,|b|-><c>[want more coffee]->(Make Coffee),<c>[satisfied]->(end)
~~~~

yUML activity Diagram
plantuml -- based on graphviz --, has an extensive feature set
With plantuml as the renderer, the following markup produces Figure .
~~~~ {.plantuml}
@startuml
scale 350 width
[*] --> NotShooting
state NotShooting {
[*] --> Idle
Idle --> Configuring : EvConfig
Configuring --> Idle : EvConfig
}
state Configuring {
[*] --> NewValueSelection
NewValueSelection --> NewValuePreview : EvNewValue
NewValuePreview --> NewValueSelection : EvNewValueRejected
NewValuePreview --> NewValueSelection : EvNewValueSaved
state NewValuePreview {
State1 -> State2
}
}
@enduml
~~~~

PlantUML Example 1
If the colors don't match your taste exactly, add skinparam monochrome true to retrieve Figure .
~~~~ {.plantuml}
@startuml
skinparam monochrome true
actor User
participant "First Class" as A
participant "Second Class" as B
participant "Last Class" as C
User -> A: DoWork
activate A
A -> B: Create Request
activate B
B -> C: DoWork
activate C
C --> B: WorkDone
destroy C
B --> A: Request Created
deactivate B
A --> User: Done
deactivate A
@enduml
~~~~

PlantUML Example 2
The following example produces Figure on page .
~~~~~ {.rdfdot .scale=65% .title=rdfdot Diagram .label="fig:rdfdot-diagram"}
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@base <http://example.com/> .
<alice> foaf:name "Alice" ;
foaf:knows [ foaf:name "Bob" ] .
~~~~~

rdfdot Diagram
| Renderer | Option | possible values |
|---|---|---|
| General | .scale |
1%--99% |
.label |
fig:my-figure |
|
.title |
"Some label for the figure" |
|
| ditaa | .rounded-corners |
|
.no-shadows |
||
.no-antialias |
||
.no-separation |
||
| dot | N/A | |
| neato | N/A | |
| yUML | .type= |
any of [ class, activity, usecase ] |
.style= |
any of [ scruffy, boring, plain ] |
|
.direction= |
any of [ LR, RL, TD, ] |
|
| rdfdot | N/A |
| Renderer | Links |
|---|---|
| ppp | (this document) |
| https://metacpan.org/release/App-pandoc-preprocess | |
| https://github.com/xdbr/p5-App-pandoc-preprocess | |
| ditaa | http://ditaa.sourceforge.net/ |
| dot | http://www.graphviz.org/ |
| neato | http://www.graphviz.org/ |
| yUML | http://yuml.me/ |
| https://github.com/wandernauta/yuml | |
| rdfdot | https://metacpan.org/pod/RDF::Trine::Exporter::GraphViz |
| plantuml | http://plantuml.sourceforge.net/ |
gpp