当前位置: 首页 > 工具软件 > knitr > 使用案例 >

out对象打印到页面不是html,r - 在rmarkdown和knitr中打印自定义对象(PDF和HTML) - 堆栈内存溢出...

段干麒
2023-12-01

假设我有一个带有返回S3对象的函数的包:

new_myclass

return(structure(list(a=1, b=2), class = "myclass"))

}

我也有两个函数,它们带有一个myclass对象,并分别返回该对象的HTML表示形式和LaTeX表示形式。

myclass2html MyClass object

")}

myclass2latex

我应该定义哪些函数/方法来提供一致和透明的knitr和rmarkdown支持? 我想同时支持.Rmd文件和.R文件,其标题如下:

#'---

#' title: My document

#' output: pdf_output

#'---

到目前为止,我的方法是通过knit_print方法进行的:

knit_print.myclass

rmarkdown_fmt

knitr_fmt

# 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!")

}

}

我的主要问题是可能存在或可能rmarkdown::metadata$output两个变量rmarkdown::metadata$output和knitr::opts_knit$get("out.format") (取决于是否使用rmarkdown )。 我觉得这很混乱。

knit_print是否是为此目的定制的正确方法?

什么是知道输出格式的正确方法? 是否有一个get_output_format函数可以告诉我输出格式?

为了解决这个问题,我正在研究condformat包,该包允许使用条件格式设置规则可视化DataFrame。

编辑:到目前为止,我一直在做我自己的伏都教以检测输出格式:

#' @importFrom rmarkdown metadata

#' @importFrom knitr opts_knit

guess_output_format

rmd_output

error = function(e) {NULL})

if (is.null(rmd_output)) {

rmd_output = ""

}

if (is.list(rmd_output)) {

rmd_output

}

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

if (format %in% c("html", "markdown")) {

return("html")

} else if (format %in% c("latex")) {

return("latex")

} else {

stop("Format not supported!")

}

}

 类似资料: