pandoc-purl is Pandoc filter for literate programming and dynamic document generation in Python. It is similar in spirit to Knitr or Pweave.
pandoc-purl can be installed through pip
(e.g. python3 -m pip install pandoc-purl
), and used like other Pandoc
filters, e.g. pandoc --filter pandoc-purl document.md -o document.tex
.
pandoc-purl will process code blocks tagged with the python
class or
inline code tagged with the p
or python
classes.
Note This README.md file has been generated from the README.in.md using pandoc-purl.
Code blocks marked with the python
class will behave as if executed in
an interactive Python shell: they execute their content, display the
content and, in a following paragraph, display any printed value as well
as the value of the last expression (see below for options controlling
this behavior).
Input | Rendered |
---|---|
|
|
If the last statement is not an expression, the code is still executed and displayed, but no result is printed
Input | Rendered |
---|---|
|
Inline code marked with the p
or python
classes should contain only
a single expression, and will display the value of that expression in
the text.
Input | Rendered |
---|---|
|
The answer is 42 |
Options can be passed to code chunks using the key=value
syntax. The
following options are available:
-
eval
: whether to run the code chunk (true
orfalse
, defaults totrue
)Input Rendered The answer is `6*7`{.p}
The answer is 42 The answer is `6*7`{.p eval=false}
The answer is 6*7
-
echo
: whether to show the code (code blocks only,true
orfalse
, defaults totrue
)Input Rendered ```python print("Hello pandoc-purl") ```
Hello pandoc-purl
```{.python echo=false} print("Hello pandoc-purl") ```
Hello pandoc-purl
-
results
: how to show the result of the last expressionasis
: show the result as a pre-formatted code block or inline (default)markup
: process the result through Pandoc before showing ithide
: hide the result
Input Rendered I'm `"**bold**"`{.p}
I’m **bold** I'm `"**bold**"`{.p results=markup}
I’m bold
The default chunk options can also be changed globally by modifying
chunk_defaults
in the pandoc_purl
module:
```{.python echo=false}
import pandoc_purl
pandoc_purl.chunk_defaults["echo"] = False
```