为什么我无法打印 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 每种不同类型文本的颜色,将所有选项标记为 !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 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 部分 :)
当我在 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 每种不同类型文本的颜色,将所有选项标记为 !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 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.
我刚刚偶然发现了这个问题,同时也查看了其他相关答案,所以我认为 urlcolor: blue
和可能的 linkcolor:red
添加到顶部的文档 yaml 部分 :)