| Copyright | (c) Laurent P René de Cotret 2020 |
|---|---|
| License | GNU GPL, version 2 or above |
| Maintainer | laurent.decotret@outlook.com |
| Stability | unstable |
| Portability | portable |
| Safe Haskell | None |
| Language | Haskell2010 |
Text.Pandoc.Filter.Plot
Contents
Description
This module defines a Pandoc filter plotTransform and related functions
that can be used to walk over a Pandoc document and generate figures from
code blocks, using a multitude of plotting toolkits.
The syntax for code blocks is simple. Code blocks with the appropriate class attribute will trigger the filter:
matplotlibfor matplotlib-based Python plots;plotly_pythonfor Plotly-based Python plots;matlabplotfor MATLAB plots;mathplotfor Mathematica plots;octaveplotfor GNU Octave plots;ggplot2for ggplot2-based R plots;gnuplotfor gnuplot plots;
For example, in Markdown:
This is a paragraph.
```{.matlabplot}
figure()
plot([1,2,3,4,5], [1,2,3,4,5], '-k)
```
The code block will be reworked into a script and the output figure will be captured. Optionally, the source code used to generate the figure will be linked in the caption.
Here are the possible attributes what pandoc-plot understands for ALL toolkits:
directory=...: Directory where to save the figure.source=true|false: Whether or not to link the source code of this figure in the caption. Ideal for web pages, for example. Default is false.format=...: Format of the generated figure. This can be an extension or an acronym, e.g.format=PNG.caption="...": Specify a plot caption (or alternate text). Format for captions is specified in the documentation for theConfigurationtype.dpi=...: Specify a value for figure resolution, or dots-per-inch. Certain toolkits ignore this.preamble=...: Path to a file to include before the code block. Ideal to avoid repetition over many figures.
Default values for the above attributes are stored in the Configuration datatype. These can be specified in a
YAML file.
Here is an example code block which will render a figure using gnuplot, in Markdown:
```{.gnuplot format=png caption="Sinusoidal function" source=true}
sin(x)
set xlabel "x"
set ylabel "y"
```
Synopsis
- makePlot :: Walkable Block a => Configuration -> a -> IO a
- plotTransform :: Configuration -> Pandoc -> IO Pandoc
- cleanOutputDirs :: Walkable Block b => Configuration -> b -> IO [FilePath]
- configuration :: FilePath -> IO Configuration
- defaultConfiguration :: Configuration
- data Configuration = Configuration {
- defaultDirectory :: !FilePath
- defaultWithSource :: !Bool
- defaultDPI :: !Int
- defaultSaveFormat :: !SaveFormat
- captionFormat :: !Format
- matplotlibPreamble :: !Script
- plotlyPythonPreamble :: !Script
- plotlyRPreamble :: !Script
- matlabPreamble :: !Script
- mathematicaPreamble :: !Script
- octavePreamble :: !Script
- ggplot2Preamble :: !Script
- gnuplotPreamble :: !Script
- graphvizPreamble :: !Script
- matplotlibExe :: !FilePath
- matlabExe :: !FilePath
- plotlyPythonExe :: !FilePath
- plotlyRExe :: !FilePath
- mathematicaExe :: !FilePath
- octaveExe :: !FilePath
- ggplot2Exe :: !FilePath
- gnuplotExe :: !FilePath
- graphvizExe :: !FilePath
- matplotlibTightBBox :: !Bool
- matplotlibTransparent :: !Bool
- data SaveFormat
- type Script = Text
- make :: Toolkit -> Configuration -> Block -> IO Block
- make' :: Toolkit -> Configuration -> Block -> IO (Either PandocPlotError Block)
- data PandocPlotError
- readDoc :: FilePath -> IO Pandoc
- availableToolkits :: Configuration -> IO [Toolkit]
- unavailableToolkits :: Configuration -> IO [Toolkit]
Operating on single Pandoc blocks
Arguments
| :: Walkable Block a | |
| => Configuration | Configuration for default values |
| -> a | Input block or document |
| -> IO a |
Highest-level function that can be walked over a Pandoc tree.
All code blocks that have the appropriate class names will be considered
figures, e.g. .matplotlib.
This function can be made to operation on whole Pandoc documents. However,
you should prefer the plotTransform function for whole documents, as it
is optimized for parallel operations.
Failing to render a figure does not stop the filter, so that you may run the filter on documents without having all necessary toolkits installed. In this case, error messages are printed to stderr, and blocks are left unchanged.
Operating on whole Pandoc documents
Arguments
| :: Configuration | Configuration for default values |
| -> Pandoc | Input document |
| -> IO Pandoc |
Walk over an entire Pandoc document, transforming appropriate code blocks into figures. This function will operate on blocks in parallel if possible.
Failing to render a figure does not stop the filter, so that you may run the filter on documents without having all necessary toolkits installed. In this case, error messages are printed to stderr, and blocks are left unchanged.
Cleaning output directories
cleanOutputDirs :: Walkable Block b => Configuration -> b -> IO [FilePath] Source #
Clean all output related to pandoc-plot. This includes output directories specified in the configuration and in the document/block. Note that *all* files in pandoc-plot output directories will be removed.
The cleaned directories are returned.
Runtime configuration
configuration :: FilePath -> IO Configuration Source #
Read configuration from a YAML file. The keys are exactly the same as for code blocks.
If a key is not present, its value will be set to the default value. Parsing errors result in thrown exceptions.
defaultConfiguration :: Configuration Source #
Default configuration values.
Since: 0.5.0.0
data Configuration Source #
The Configuration type holds the default values to use
when running pandoc-plot. These values can be overridden in code blocks.
You can create an instance of the Configuration type from file using the configuration function.
You can store the path to a configuration file in metadata under the key plot-configuration. For example, in Markdown:
---
title: My document
author: John Doe
plot-configuration: pathto/file.yml
---
The same can be specified via the command line using Pandoc's -M flag:
pandoc --filter pandoc-plot -M plot-configuration="path/to/file.yml" ...
In this case, use configurationPathMeta to extact the path from Pandoc documents.
Constructors
| Configuration | |
Fields
| |
Instances
| Eq Configuration Source # | |
Defined in Text.Pandoc.Filter.Plot.Types Methods (==) :: Configuration -> Configuration -> Bool # (/=) :: Configuration -> Configuration -> Bool # | |
| Show Configuration Source # | |
Defined in Text.Pandoc.Filter.Plot.Types Methods showsPrec :: Int -> Configuration -> ShowS # show :: Configuration -> String # showList :: [Configuration] -> ShowS # | |
| Default Configuration Source # | |
Defined in Text.Pandoc.Filter.Plot.Types Methods def :: Configuration # | |
data SaveFormat Source #
Generated figure file format supported by pandoc-plot. Note that not all formats are supported by all toolkits.
Instances
For testing and internal purposes ONLY
Arguments
| :: Toolkit | Plotting toolkit. |
| -> Configuration | Configuration for default values. |
| -> Block | |
| -> IO Block |
Force to use a particular toolkit to render appropriate code blocks.
Failing to render a figure does not stop the filter, so that you may run the filter on documents without having all necessary toolkits installed. In this case, error messages are printed to stderr, and blocks are left unchanged.
make' :: Toolkit -> Configuration -> Block -> IO (Either PandocPlotError Block) Source #
data PandocPlotError Source #
Constructors
| ScriptRuntimeError String Int | |
| ScriptChecksFailedError String | |
| ToolkitNotInstalledError Toolkit |
Instances
| Show PandocPlotError Source # | |
Defined in Text.Pandoc.Filter.Plot Methods showsPrec :: Int -> PandocPlotError -> ShowS # show :: PandocPlotError -> String # showList :: [PandocPlotError] -> ShowS # | |
readDoc :: FilePath -> IO Pandoc Source #
Read document, guessing what extensions and reader options are appropriate. If the file cannot be read for any reason, an error is thrown.
availableToolkits :: Configuration -> IO [Toolkit] Source #
List of toolkits available on this machine. The executables to look for are taken from the configuration.
unavailableToolkits :: Configuration -> IO [Toolkit] Source #
List of toolkits not available on this machine. The executables to look for are taken from the configuration.