为什么我无法打印 R Markdown 文档中的代码颜色?

Why can't I get colors of code in an R Markdown document to print?

当我在 RStudio 中创建 R Markdown 笔记本时,代码块执行 RStudio 的所有常用文本着色——例如,绿色的注释行和文本常量,蓝色的数字常量等。所有着色仍然当我打开 RStudio 的 HTML 预览 window 时显示得很好,当我在浏览器中查看 HTML 文档时显示得同样好。

到目前为止,同一文档中 ggplot2 图形对象中嵌入的颜色同样成功显示(HTML 的屏幕查看)。

但是,当我从 Mac 的浏览器将 HTML 文档发送到打印机时,或者当我使用“打印”对话框将 HTML 文档导出为 PDF 时,所有文本着色都消失了,所有内容都以黑色文本呈现,即使 ggplot2 图形颜色在打印输出中仍然完全成功。

如何恢复打印输出中的文本着色?谢谢

(这发生在 Mac 笔记本电脑上,在 Firefox 和 Safari 中也是如此。)


1 天后编辑添加:
在应用@user2554330 的初始解决方案之前,我没有注意到一个症状。降价文本(即外部代码块)中的 Hyperlinks 也被转换为黑色文本,并且 link 文本和底层 URL 都被打印出来,这与 HTML 彩色输出,仅显示 link.

的文本

我根据 https://highlightjs.readthedocs.io/en/latest/css-classes-reference.html 上的发现尝试了 .hljs-link,但似乎没有任何效果。

这很难修复。

问题是 rmarkdown 使用 bootstrap 框架来设置样式。该框架试图标准化不同浏览器上的显示;由于浏览器在处理打印的方式上确实存在差异,因此它选择了一种非常简单的白底黑字样式来打印文本。

您可以创建一个 CSS 文件来覆盖这些选择,或者您可以将源代码编辑到 bootstrap CSS 文件,这样它就不会这样做。都很难。

创建您自己的 CSS 文件的问题是您需要 re-specify 每种不同类型文本的颜色,将所有选项标记为 !importantrmarkdown 有几种不同的颜色方案来突出显示代码。编辑后默认的是这样的:

.hljs-literal {
  color: #990073!important;
}

.hljs-number {
  color: #099!important;
}

.hljs-comment {
  color: #998!important;
  font-style: italic;
}

.hljs-keyword {
  color: #900!important;
  font-weight: bold;
}

.hljs-string {
  color: #d14!important;
}

如果您使用的是其他突出显示样式,则需要改为编辑该样式。

将其保存在文件中,例如style.css,然后将其放入您的 YAML header:

output: 
  html_document:
    css: style.css

替代方法是编辑 bootstrap 源,这样它就不再强制颜色为黑色。查找 @media print 部分,然后进行编辑。要编辑的文件是

<rmarkdown dir>/rmd/h/bootstrap/css/bootstrap.min.css

(这是bootstrap.css的最小化版本,所以很难编辑)。

如果您真的知道自己在做什么,可以使用不同的选项重新编译文件;我没试过。

编辑添加:

如果您还希望 URLs 以彩色显示,则需要对它们执行类似的操作:覆盖覆盖。一个简单的版本是

a {
  color: #23527c!important;  
}

这会强制所有链接都呈蓝色。这并不理想;它不会让链接在被选中时改变颜色,因此文档的原始 on-screen 版本将被更改,而不仅仅是打印版本。我现在懒得弄清楚如何处理颜色变化。

要停止附加 URL,您需要此文本:

a[href]::after {
  content: "";
}

这是说带有 HREF 元素的锚点应该附加一个空字符串。标准 bootstrap 规范附加了您看到的额外文本。这似乎不需要 !important,因为标准的没有使用它。

将这两个条目放入您的 style.css 文件中,您应该在打印时获得彩色链接,而无需附加 URL.

我刚刚偶然发现了这个问题,同时也查看了其他相关答案,所以我认为 解决了您的超链接问题。 TLDR:将 urlcolor: blue 和可能的 linkcolor:red 添加到顶部的文档 yaml 部分 :)