html - 为什么我无法打印 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找到的内容进行了尝试,但似乎没有任何效果。
解决方案
这很难解决。
问题是rmarkdown
使用bootstrap
框架来设置样式。该框架试图标准化不同浏览器上的显示;由于浏览器在处理打印的方式上确实存在差异,因此它选择了一种非常简单的黑白样式来打印文本。
您可以创建一个覆盖这些选择的 CSS 文件,或者您可以编辑bootstrap
CSS 文件的源代码,使其不这样做。两者都很难。
创建自己的 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。
推荐阅读
- testing - VUE CLI 3 - 使用 Mocha + webpack 测试单文件组件
- amazon-cloudformation - 无法访问无服务器 yml 中的跨堆栈引用的 restApiId 和 restApiRootResourceId
- python - google-calendar-api 的 service.events().list 的最早数据是哪个日期?
- c# - 在实体模型中使用 XMl 数据类型执行存储过程
- python - python解释器(由conda)在创建虚拟环境的pycharm项目中的含义是什么
- ios - 我们如何使用 AVSampleBufferDisplayLayer 来渲染 CMSampleBufferRef?
- gcc - 宏 SINIX 代表什么?
- configuration - 用于生产的 Farelogix 跟踪工具配置
- php - 使用 PHP 导出 Weasyprint
- java - error: no suitable method found for showInputDialog(
,String,int, ,String[],String)