我rmarkdown
用来生成HTML报告.我在限制机器上,无法安装tex.所以,我试图生成一个HTML文档,然后将其转换/打印为pdf.示例降价文档是:
--- title: "trials" author: "Foo Bar" date: "15 December 2016" output: html_document --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) ``` ```{r cars, echo=FALSE, cache=FALSE, message=FALSE} library(dplyr, quietly = TRUE) library(abind, quietly = TRUE) virginica <- iris %>% filter(Species == "virginica") %>% head() %>% select(-Species) setosa <- iris %>% filter(Species == "setosa") %>% head() %>% select(-Species) diff_mat <- virginica - setosa diff_mat[diff_mat<0] <- '⇓ ' diff_mat[diff_mat>0] <- '⇑ ' diff_mat[diff_mat == 0] <- '⇔ ' datArray <- abind::abind(virginica, diff_mat, along=3) fin_dat <- apply(datArray,1:2, function(x)paste(x[1],x[2], sep = " ")) knitr::kable(fin_dat, format = "html", escape = FALSE, table.attr = "border=1", caption = "Changes across species") ```
我不能编织字,因为格式丢失,如在rmarkdown word文档中的HTML格式表中所讨论的.生成的HTML正是我想要的.使用另存为单词的HTML可以很好地解决一些问题,我可以打印pdf,但它不如直接从pdf打印好.
当我尝试将其保存为chrome中的pdf时,颜色会丢失.
打印选项没有问题
其他页面,例如我们心爱的网站中的这个问题,使用来自多列的数据替换NA的打印很好
你有什么指示我错过了一个观点或问题所在.
在YAML标题后添加此权限:
问题是RStudio的默认R降价模板使用Bootstrap,它们的版本bootstrap.min.css
有:
@media print { *, *:before, *:after { color: #000 !important; text-shadow: none !important; background: transparent !important; -webkit-box-shadow: none !important; box-shadow: none !important; }
在里面.这是一个非常"破坏性"的媒体查询,*
因为这些设置应用于所有标签,color: #000 !important;
意味着"没有你的颜色!" 当您打印文档时.我嘲笑背后的情绪(拯救地球+碳粉/墨水成本),但如果你打印到PDF,它没有任何意义.
遗憾的是,没有用于打印到PDF的超目标媒体查询,因此当您将网页打印为PDF并且这些无意识的,全方位的媒体查询接管时,通用的"打印"应用程序将被应用.
您遇到的问题是,您需要非常具体地定位任何其他标记以覆盖这些设置.这意味着将自己的CSS类添加到您在Rmds中生成的任何内容中,或者使用"Inspect Element"进行调整,直到您全部捕获.
但是,如果您有冒险精神,可以将YAML标题修改为:
output: html_document: self_contained: false
渲染到HTML时,它将创建一个目录,其中包含各种组件的子目录,而base64将它们编码为一个大文档.
我命名了我的文档forso.Rmd
,这意味着它创建了一个目录forso_files
,并将子目录放在其下.
打开主HTML文件并向下滚动,直到看到如下内容:
改变这个:
至:
编辑bootstrap.css
,删除该color: #000 !important;
行并添加该-webkit-print-color-adjust:exact;
行.保存其他人的bootstrap.css
副本,因为它会在未来的渲染中被压扁(即你需要在每次渲染时将其复制回来).
你不能只是链接到一个单独的CSS文件与较少的脑死印刷媒体查询,因为color: #000 !important;
所有标签的影响归功于*
目标,你不能只是将其重置为initial
或继承`,因为这只会将它们变成黑色.
您的最终(也可能是最佳)选项是制作您自己的R Markdown模板(有关详细信息,请参阅https://github.com/hrbrmstr/markdowntemplates),并避免在其中放置过多的打印媒体查询.