在markdown使用自定义html,在rmarkdown和knitr中打印自定义对象(PDF和HTML)

假设我有一个包含返回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和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!")

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值