首页 > 解决方案 > 为什么我无法打印 R Markdown 文档中的代码颜色?

问题描述

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

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

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

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

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


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

.hljs-link我根据在https://highlightjs.readthedocs.io/en/latest/css-classes-reference.html找到的内容进行了尝试,但似乎没有任何效果。

标签: htmlcolorsrstudior-markdown

解决方案


这很难解决。

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

您可以创建一个覆盖这些选择的 CSS 文件,或者您可以编辑bootstrapCSS 文件的源代码,使其不这样做。两者都很难。

创建自己的 CSS 文件的问题在于,您需要为每种不同类型的文本重新指定颜色,将所有选项标记为!important. rmarkdown有几种不同的颜色方案用于突出显示代码。编辑后的默认值如下所示:

.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 标头中:

output: 
  html_document:
    css: style.css

对此的替代方法是编辑bootstrap源,使其不再强制颜色为黑色。查找这些@media print部分,然后编辑它们。要编辑的文件是

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

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

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

编辑添加:

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

a {
  color: #23527c!important;  
}

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

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

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

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

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


推荐阅读