.RStudio tutorial) Generate an example report as an HTML, Word or $LaTeX$ (Latex) document Generate a sample publication Prepare a publication for use. These functions provide common LaTeX dependencies (e.g. Tikz)for R Markdown formats that use LaTeX.
I often need to write short reports which are not full blown manuscripts, e.g. annual grant progress reports. Though such documents don’t need to adhere to a strict template, I still want them to look nice. I’ve accomplished this for years by writing directly in LaTeX, but I want to align my process with my recent transition to composing most docs in RStudio/Rmd. Ultimately though, I don’t want to abandon the LaTeX look in the compiled document. Thankfully, RStudio will render a LaTeX pdf, but formatting beyond the defaults (which are still nice!) can be a bit mysterious. This repository holds my working template for such purposes.
Here’s a minimal example of what the defaults within a
.Rmd
will give you:Now, two specific things I’d like to change are:
- Left-justify the title/author/date section
- Modify the font specs used in section titles
A solution to these two problems easily generalizes to the broader question of “How do I format the title and H1-H6 specs in the context of LaTeX rendering from
.Rmd
files?”To start, we will borrow the LaTeX template R Markdown is currently using (h/t SO). The relevant remote repo is here, and you can copy the local version you’re using into your working directory with this line:
If you look past the pandoc nastiness in this template file (I at least find it nasty, being that I was mostly unfamiliar with pandoc scripting!), you’ll see familiar LaTeX commands that are often surrounded by
$if(X)$
statements that are triggered if X
appears in your .Rmd
YAML. Here’s a straightforward example where, if you have title:
in your .Rmd
YAML header, the maketitle
command will be executed in your LaTeX render:Now the problem feels more tractable: all we have to do is modify the
maketitle
defaults in the usual LaTeX manner within the template.tex
document. Let’s start with the following:And don’t forget to include
template.tex
in your .Rmd
YAML header like so:Rendering gives the below, nice!
Next, we clearly need to fix the fact that section titles are now larger than the document title! Let’s do this with the LaTeX
sectsty
package – you can basically stuff this code anywhere in the preamble, like so:Let’s also reduce the overall margins a touch via the
geometry
argument in the YAML while we’re at it. Here’s the full .Rmd
:Mission accomplished!
Here’s a bonus I learned along the way. You can send custom arguments to your
.tex
doc by simply defining new variables in the YAML header (relevant info in the pandoc docs here). Suppose I want an optional subtitle parameter. This is accomplished like so:With this trick, you can start to do even fancier things (literally), such as include
fancyhdr
options. This option is ultimately included in the template.tex
provided in the repository, and here’s the relevant YAML and output:Happy R Markdowning!
Knitr is a tool that allows us to interweave natural language (in the form of LaTeX) and source code (in the form of R). In general, the concept of interspersing natural language and source code is called literate programming. Since knitr files contain a mixture of LaTeX (traditionally housed in .tex files) and R (traditionally housed in .R files) a new file extension called R noweb (.Rnw) is required. .Rnw files contain a mixture of LaTeX and R code.
Knitr allows for the generation of statistical reports in PDF format and is a key tool for achieving reproducable research.
Compiling .Rnw files to a PDF is a two step process. First, we need to know how to execute the R code and capture the output in a format that a LaTeX compiler can understand (a process called 'kniting'). We do this using the knitr package. The command for this is shown below, assuming you have installed the knitr package:
Rstudio Latex Full
This will generate a normal .tex file (called r-noweb.tex in this example) which can then be turned into a PDF file using: