在rmarkdown和knitr中打印自定义对象(PDF和HTML)
假设我有一个包,其中包含一个返回S3对象的函数:在rmarkdown和knitr中打印自定义对象(PDF和HTML),r,knitr,r-markdown,R,Knitr,R Markdown,假设我有一个包,其中包含一个返回S3对象的函数: 使用knitr 1.18的new_myclass更简单: guess_output_format <- function() { if (knitr::is_html_output()) { return("html") } else if (knitr::is_latex_output()) { return("latex") } else { return("unsupported") } } g
使用knitr 1.18的new_myclass更简单:
guess_output_format <- function() {
if (knitr::is_html_output()) {
return("html")
} else if (knitr::is_latex_output()) {
return("latex")
} else {
return("unsupported")
}
}
guess\u输出\u格式
#'---
#' title: My document
#' output: pdf_output
#'---
knit_print.myclass <- function(x, ...) {
rmarkdown_fmt <- rmarkdown::metadata$output
knitr_fmt <- knitr::opts_knit$get("out.format")
# should I use these heuristics with both variables?
if (rmarkdownfmt == "pdf_document") {
return(knitr::asis_output(myclass2latex(x)))
}
if (knitr_fmt %in% c("html", "markdown")) {
return(knitr::asis_output(myclass2html(x)))
} else {
stop("Format not supported!")
}
}
#' @importFrom rmarkdown metadata
#' @importFrom knitr opts_knit
guess_output_format <- function() {
rmd_output <- tryCatch({rmarkdown::metadata$output},
error = function(e) {NULL})
if (is.null(rmd_output)) {
rmd_output = ""
}
if (is.list(rmd_output)) {
rmd_output <- names(rmd_output)[1]
}
if (rmd_output == "pdf_document") {
return("latex")
} else if (rmd_output %in% c("html_document", "html_vignette")) {
return("html")
} else if (rmd_output != "") {
stop("Unsupported rmarkdown output format:", rmd_output)
}
# No rmarkdown, let's try with knitr:
format <- knitr::opts_knit$get("out.format")
if (format %in% c("html", "markdown")) {
return("html")
} else if (format %in% c("latex")) {
return("latex")
} else {
stop("Format not supported!")
}
}
guess_output_format <- function() {
if (knitr::is_html_output()) {
return("html")
} else if (knitr::is_latex_output()) {
return("latex")
} else {
return("unsupported")
}
}