% Generated by roxygen2 (4.0.2): do not edit by hand
\name{revealjs_presentation}
\alias{revealjs_presentation}
\title{Convert to a reveal.js presentation}
\usage{
revealjs_presentation(incremental = FALSE, center = FALSE, fig_width = 8,
  fig_height = 6, fig_retina = if (!fig_caption) 2, fig_caption = FALSE,
  smart = TRUE, self_contained = TRUE, theme = "default",
  transition = "default", highlight = "default", mathjax = "default",
  template = "default", includes = NULL, keep_md = FALSE,
  lib_dir = NULL, pandoc_args = NULL, ...)
}
\arguments{
\item{incremental}{\code{TRUE} to render slide bullets incrementally. Note
that if you want to reverse the default incremental behavior for an
individual bullet you can preceded it with \code{>}. For example:
\emph{\code{> - Bullet Text}}}

\item{center}{\code{TRUE} to vertically center content on slides}

\item{fig_width}{Default width (in inches) for figures}

\item{fig_height}{Default width (in inches) for figures}

\item{fig_retina}{Scaling to perform for retina displays (defaults to 2 when
\code{fig_caption} is \code{FALSE}, which currently works for all widely
used retina displays). Set to \code{NULL} to prevent retina scaling. Note
that this will always be \code{NULL} when \code{keep_md} is specified (this
is because \code{fig_retina} relies on outputting HTML directly into the
markdown document).}

\item{fig_caption}{\code{TRUE} to render figures with captions}

\item{smart}{Produce typographically correct output, converting straight
quotes to curly quotes, --- to em-dashes, -- to en-dashes, and ... to
ellipses.}

\item{self_contained}{Produce a standalone HTML file with no external
dependencies, using data: URIs to incorporate the contents of linked
scripts, stylesheets, images, and videos. Note that even for self
contained documents MathJax is still loaded externally (this is
necessary because of it's size).}

\item{theme}{Visual theme ("default", "simple", sky", "beige", "serif", or
"solarized").}

\item{transition}{Slide transition ("default", "cube", "page", "concave",
"zoom", "linear", "fade", or "none")}

\item{highlight}{Syntax highlighting style. Supported styles include
"default", "tango", "pygments", "kate", "monochrome", "espresso",
"zenburn", and "haddock". Pass \code{NULL} to prevent syntax highlighting.}

\item{mathjax}{Include mathjax. The "default" option uses an https URL from
the official MathJax CDN. The "local" option uses a local version of
MathJax (which is copied into the output directory). You can pass an
alternate URL or pass \code{NULL} to exclude MathJax entirely.}

\item{template}{Pandoc template to use for rendering. Pass "default"
  to use the rmarkdown package default template; pass \code{NULL}
  to use pandoc's built-in template; pass a path to use a custom template
  that you've created. Note that if you don't use the "default" template
  then some features of \code{revealjs_presentation} won't be available
  (see the Templates section below for more details).}

\item{includes}{Named list of additional content to include within the
document (typically created using the \code{\link{includes}} function).}

\item{keep_md}{Keep the markdown file generated by knitting.}

\item{lib_dir}{Directory to copy dependent HTML libraries (e.g. jquery,
bootstrap, etc.) into. By default this will be the name of the document
with \code{_files} appended to it.}

\item{pandoc_args}{Additional command line options to pass to pandoc}

\item{...}{Additional function arguments to pass to the base R Markdown HTML
  output formatter}
}
\value{
R Markdown output format to pass to \code{\link{render}}
}
\description{
Format for converting from R Markdown to a reveal.js presentation.
}
\details{
In reveal.js presentations you can use level 1 or level 2 headers for
slides. If you use a mix of level 1 and level 2 headers then a
two-dimensional layout will be produced, with level 1 headers building
horizontally and level 2 headers building vertically.

For more information on markdown syntax for presentations see
\href{http://johnmacfarlane.net/pandoc/demo/example9/producing-slide-shows-with-pandoc.html}{producing
slide shows with pandoc}.
}
\section{Templates}{


You can provide a custom HTML template to be used for rendering. The syntax
for templates is described in the documentation on
\href{http://johnmacfarlane.net/pandoc/demo/example9/templates.html}{pandoc
templates}. You can also use the basic pandoc template by passing
\code{template = NULL}.

Note however that if you choose not to use the "default" reveal.js template
then several aspects of reveal.js presentation rendering will behave
differently:

\itemize{
  \item{The \code{center} parameter does not work (you'd need to
     set this directly in the template).
  }
  \item{The built-in template includes some additional tweaks to styles
     to optimize for output from R, these won't be present.
  }
  \item{MathJax will not work if \code{self_contained} is \code{TRUE}
     (these two options can't be used together in normal pandoc templates).
  }
}
}
\examples{
\dontrun{

library(rmarkdown)
library(revealjs)

# simple invocation
render("pres.Rmd", revealjs_presentation())

# specify an option for incremental rendering
render("pres.Rmd", revealjs_presentation(incremental = TRUE))
}
}

