在R markdown中将代码背景颜色设置为PDF

8
当使用RStudio和knitr将Rnw文件转换为PDF时,代码块具有令人愉悦的灰色背景颜色(就像在SO这里一样)。但是,当我将md文件转换为PDF时,背景颜色是白色的,似乎无法更改。 knitr的代码修饰选项 background仅用于LaTeX,在md中无效。
如何为从md文件获取的PDF中的代码块设置背景颜色?我在一些相关问题中看到编辑markdown.css文件可能与此相关,但我不确定是否适用于这里,因为在md和PDF文件之间没有html文件。
这种效果可以使用knitr示例进行复制:Rnw源代码:knitr-minimal.Rnwmarkdown源代码:001-minimal.Rmd
将转换为,我只需在RStudio中单击“编译PDF”按钮。以下是我将转换为的步骤:
# Load packages
require(knitr)
require(markdown)

setwd("C:/Users/.../Desktop/")

# Process .md and .pdf files
filen <- "myfile"
knit(paste0(filen,".md"))
system(paste0("pandoc -s ", paste0(filen,"-out.md"), " -t latex -o ", paste0(filen,".pdf")))

有没有其他方法可以将md转换为PDF,以便我可以获得彩色代码背景?


1
对于system()命令,可以使用pandoc()函数:http://yihui.name/knitr/demo/pandoc/ - Yihui Xie
感谢您的关注!我们能否提供一个选项来向您的pandoc函数提供panodoc参数?而不是使用配置文件或将配置嵌入md文件中(或者这是否违背了您的函数的目的...) - Ben
听起来是个好主意。我可能需要考虑一下。在这种情况下,我猜system()pandoc()需要大致相同的打字工作量,所以随意选择system() :) - Yihui Xie
这只是个小细节,并且完全没有减损你的 knitr 包所具有的优秀特性。对于我(和我相信很多其他人来说),正是像 knitrggplot2plyrdata.table 这些包极大地提高了 R 语言的多样性、可访问性和吸引力。 - Ben
2个回答

6

既然您已经使用Pandoc进行了设置,您应该能够使用Pandoc的--highlight-style参数来实现此操作。根据文档

--highlight-style=STYLE 指定在突出显示源代码时要使用的着色样式。选项包括pygments(默认值),kate,monochrome,espresso,zenburn,haddock和tango。

如果您没有在markdown文件中指定每个代码块包含的语言,则还必须设置--indented-code-classes参数:

--indented-code-classes=CLASSES 指定要用于缩进代码块的类 - 例如,perl,numberLines或haskell。多个类可以用空格或逗号分隔。

从记忆中来看,我认为这可能需要像fancyvrb这样的latex包,因此在它起作用之前,您可能需要安装它。


好的,工作完成了,谢谢。我发现 --indented-code-classes 不是必需的,也不需要 fancyvrb(除非我之前安装过并忘记了)。 - Ben

6

Marius的回答正是我所需要的。由于注释无法插入图片,这里贴上一些截屏以供其他人参考。

为了让从md生成的PDF中的代码拥有背景色,我将我的代码进行了如下调整:

# Load packages
require(knitr)
require(markdown)

setwd("C:/Users/.../Desktop/")

# Create .md and .pdf files
filen <- "test"
knit(paste0(filen,".md"))
system(paste0("pandoc -s ", paste0(filen,"-out.md"), " -t latex -o ", paste0(filen,".pdf"), " --highlight-style=tango -S"))

在测试七种 pandoc 高亮选项时,我发现只有三个会给代码添加背景色。以下是使用这三个选项生成的 PDF 的截图,以供日后参考。
这是 tango,它最符合我的要求,具有浅灰色的背景: enter image description here 这是 zenburn: enter image description here 这是 espresso: enter image description here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接