18.2 Fully custom formats
Another lower-level approach is to define a format directly by explicitly specifying knitr options and Pandoc command-line arguments. At its core, an R Markdown format consists of:
A set of knitr options that govern how Rmd is converted to Markdown.
A set of Pandoc options that govern how Markdown is converted to the final output format (e.g., HTML).
Some optional flags and filters (typically used to control handling of supporting files).
You can create a new format using the output_format()
function in rmarkdown. Here is an example of a simple format definition:
#' @importFrom rmarkdown output_format knitr_options pandoc_options
= function() {
simple_html_format # if you don't use roxygen2 (see above), you need to either
# library(rmarkdown) or use rmarkdown::
output_format(
knitr = knitr_options(opts_chunk = list(dev = 'png')),
pandoc = pandoc_options(to = "html"),
clean_supporting = FALSE
) }
The knitr and Pandoc options can get considerably complicated (see help pages ?rmarkdown::knitr_options
and ?rmarkdown::pandoc_options
for details). The clean_supporting
option indicates that you are not creating self-contained output (like a PDF or HTML document with base64 encoded resources), and therefore want to preserve supporting files like R plots generated during knitting.
You can also pass a base_format
to the output_format()
function if you want to inherit all of the behavior of an existing format but tweak a subset of its options.
If there are supporting files required for your format that cannot be easily handled by the includes
option (see Section 3.1.10.2), you will also need to use the other arguments to output_format
to ensure they are handled correctly (e.g., use the intermediates_generator
to copy them into the place alongside the generated document).
The best way to learn more about creating fully custom formats is to study the source code of the existing built-in formats (e.g., html_document
and pdf_document
): https://github.com/rstudio/rmarkdown/tree/master/R. In some cases, a custom format will define its own Pandoc template, which was discussed in Section 17.3.