In This Vignette

What is Latex?

Latex is used to write documents. Latex documents are written in plain-text that contains tags for defining the structure and formatting of the document, i.e. a different approach compared to typical WYSIWYG document editors like Microsoft Word. Latex is widely used in academia for the publishing of scientific papers.

A trivial example of a Latex document is:

s <- "\\documentclass{article}\n\\begin{document}\nHello World!\n\\end{document}"
cat(s)

For more information see Wikipedia or Latex-Tutorial.com.

A helpful reference for understanding the structure of Latex pivot tables can be found on wikibooks.

Example Pivot Table

The following pivot table is used as the basis of the examples in the rest of this vignette:

library(pivottabler)
pt <- PivotTable$new()
pt$addData(bhmtrains)
pt$addColumnDataGroups("TrainCategory")
pt$addRowDataGroups("TOC")
pt$defineCalculation(calculationName="TotalTrains", summariseExpression="n()")
pt$renderPivot()

Rendering a Pivot Table in Latex

A pivottabler pivot table can be output in Latex using the pt$getLatex() function. The Latex for the example pivot table above is:

library(pivottabler)
pt <- PivotTable$new()
pt$addData(bhmtrains)
pt$addColumnDataGroups("TrainCategory")
pt$addRowDataGroups("TOC")
pt$defineCalculation(calculationName="TotalTrains", summariseExpression="n()")
cat(pt$getLatex())

The caption for the table can be specified using the caption argument when calling the pt$getLatex() function. The table label, used to cross-reference the table in other parts of the document, can be specified using the label argument. Both of these arguments are illustrated in the examples later in this vignette.

The equivalent quick-pivot command for the example pivot table shown above is:

library(pivottabler)
cat(qlpvt(bhmtrains, "TOC", "TrainCategory", c("TotalTrains"="n()")))

More information on the quick-pivot functions can be found in the Introduction vignette.

Rendering a Pivot Table to PDF via R Markdown

R Markdown can be used to create PDF documents. R Markdown is compiled to a PDF document using the knitr package and pandoc, via Latex. This allows the pt$getLatex() function to be used with R Markdown to generate tables in PDF documents.

The multirow latex package is used to allow table cells to span multiple rows. Note the header-include in the R Markdown example below.

A minimal example using an R Markdown file:

Minimal R Markdown Example


When the PDF is generated, the resulting table appears as:

Resulting Output


When multiple row/column groups are present, additional lines are drawn within the table:

Larger Output

Styling a Pivot Table in Latex

Styling Latex has a great many differences compared to styling HTML. Therefore the HTML-based approaches to styling a pivottabler pivot table, as described in the Styling vignette, do not apply to tables generated in Latex.

A couple of basic options for styling the pivot table headers are offered, controlled by setting either/both of the boldHeadings and/or italicHeadings arguments to TRUE when calling pt$getLatex(). For example, specifying italicHeadings=TRUE:

Italic Headings

Rendering part of a Pivot Table

Pivot tables can easily grow to be larger than the height/width of a single A4 page. To split a pivot table across multiple pages, the following arguments can be specified when calling pt$getLatex():

Integer numbers should be specified for these arguments. The numbers are 1-based and specify the cells in the body of the pivot table only, i.e. they do not include either the row/column headings. In the example pivot table above:

Further Reading

The full set of vignettes is:

  1. Introduction
  2. Data Groups
  3. Calculations
  4. Regular Layout
  5. Outputs
  6. Latex Output
  7. Styling
  8. Finding and Formatting
  9. Cell Context
  10. Navigating a Pivot Table
  11. Irregular Layout
  12. Performance
  13. Excel Export
  14. Shiny
  15. Appendix: Details
  16. Appendix: Calculations
  17. Appendix: Class Overview


cbailiss/pivottabler documentation built on Oct. 14, 2023, 9:38 a.m.