Hao Zhu | cc21dc7 | 2017-05-20 01:15:25 -0400 | [diff] [blame] | 1 | #' Print the table on an isolated landscape page in PDF |
| 2 | #' |
Hao Zhu | 8f41720 | 2017-05-20 16:37:14 -0400 | [diff] [blame] | 3 | #' @description This function will put the table on an single landscape page. |
| 4 | #' It's useful for wide tables that cann't be printed on a portrait page. |
Hao Zhu | cc21dc7 | 2017-05-20 01:15:25 -0400 | [diff] [blame] | 5 | #' |
| 6 | #' @param kable_input Output of `knitr::kable()` with `format` specified |
| 7 | #' @param margin Customizable page margin for special needs. Values can be |
| 8 | #' "1cm", "1in" or similar. |
| 9 | #' |
Hao Zhu | 78e6122 | 2017-05-24 20:53:35 -0400 | [diff] [blame] | 10 | #' @examples landscape(knitr::kable(head(mtcars), "latex")) |
| 11 | #' |
Hao Zhu | cc21dc7 | 2017-05-20 01:15:25 -0400 | [diff] [blame] | 12 | #' @export |
| 13 | landscape <- function(kable_input, margin = NULL) { |
| 14 | kable_format <- attr(kable_input, "format") |
| 15 | if (!kable_format %in% c("html", "latex")) { |
| 16 | message("Currently generic markdown table using pandoc is not supported.") |
| 17 | return(kable_input) |
| 18 | } |
| 19 | if (kable_format == "html") { |
| 20 | return(kable_input) |
| 21 | } |
| 22 | if (kable_format == "latex") { |
| 23 | return(landscape_latex(kable_input, margin)) |
| 24 | } |
| 25 | } |
| 26 | |
| 27 | landscape_latex <- function(kable_input, margin) { |
| 28 | kable_attrs <- attributes(kable_input) |
| 29 | usepackage_latex("pdflscape") |
| 30 | out <- paste0( |
| 31 | "\n\\begin{landscape}", kable_input, "\n\\end{landscape}" |
| 32 | ) |
| 33 | |
| 34 | if (!is.null(margin)) { |
| 35 | out <- paste0( |
| 36 | "\n\\newgeometry{margin=", margin, "}", out, "\n\\restoregeometry" |
| 37 | ) |
| 38 | } |
| 39 | out <- structure(out, format = "latex", class = "knitr_kable") |
| 40 | attributes(out) <- kable_attrs |
| 41 | attr(out, "landscape") <- TRUE |
| 42 | return(out) |
| 43 | } |