即将发布的 R(版本 4.2.0)包含对 HTML 帮助系统的大量增强功能。
最引人注目的功能是帮助页面中的 LaTeX 类数学方程式现在使用 KaTeX 或 MathJax 排版,并且使用 Prism 突出显示用法和示例代码。此外,如果安装了 knitr 包,现在可以在浏览器中显示示例和演示的输出。如果示例生成图形输出,这将特别有用。除此之外,还进行了一些不太显眼的更改以提高可用性。
这篇文章的目的是介绍这些增强功能,并要求在 R 4.2.0 发布之前对这些功能进行测试,以便在发布之前尽可能多地解决错误。
数学渲染
R 文档格式通过 \eqn{}
和 \deqn{}
命令支持 LaTeX 类的数学。从历史上看,在转换为 PDF(通过 LaTeX)时,这些命令已得到正确渲染,但在转换为其他格式时却没有。但是,随着时间的推移,在 HTML 中渲染数学的支持已经成熟,特别是 MathJax 和 KaTeX Javascript 库是稳定且流行的解决方案。事实上,几个 R 包为 R 文档中的数学提供间接支持,特别是 mathjaxr 和 katex。当然,这两个都需要特殊的标记。
从 R 4.2.0 开始,可以使用 KaTeX 或 MathJax 将 \eqn{}
和 \deqn{}
命令渲染为 HTML 输出中的数学。可以使用 help.htmlmath
选项控制详细信息。对于动态帮助,默认值等效于设置
options(help.htmlmath = "katex")
它使用 R 附带的 KaTeX 本地副本。help.htmlmath
选项也可以设置为 "mathjax"
;在这种情况下,如果安装了 mathjaxr 包,则使用其 MathJax 本地副本,否则使用在线 CDN。如果选项设置为任何其他非 NULL 值,则显示的页面将回退到以前使用的基本替换。
如果启用,静态 HTML 输出将始终通过 CDN 使用 KaTeX(因为无法可靠地计算本地副本的相对路径)。
代码高亮
R 现在随附从 https://prism.npmjs.net.cn/ 下载的 Javascript 和 CSS 文件,以便在 R 帮助页面的用法和示例部分中提供 R 代码的语法高亮。此类代码现在用 <code class='language-R'>
标记标记,该标记使用 Prism Javascript 和 CSS 进行处理和渲染。
由于难以计算相对路径以及缺乏 CDN,因此目前为静态 HTML 输出禁用了语法高亮。
示例和演示
R 提供了特定功能来分别通过 example()
和 demo()
函数运行包含在包文档中的两种类型的示例代码,即示例和演示。示例代码显示为相应帮助页面的部分,并且可以通过包的索引页面通过动态帮助访问演示。4.2.0 之前的 R 版本不提供通过动态帮助系统运行示例的选项。可以通过单击链接来运行演示,但结果是在控制台中运行演示。
在帮助系统中显示运行示例或演示的结果具有一定的明显好处,尤其是在输出包含图形时。虽然这是一个相当重要的任务,但功能强大的 knitr 包使之变得非常简单。
如果安装了 knitr 包,R 4.2.0 将在帮助页面中包含允许运行其示例的链接,单击该链接时将以 .Rhtml
文档的形式运行示例并将输出显示为 HTML 页面。还可以通过访问以下形式的链接直接创建此类页面
http://127.0.0.1:<PORT>/library/<PKG>/Example/<TOPIC>
以前可用的以下形式的演示链接
http://127.0.0.1:<PORT>/library/<PKG>/Demo/<TOPIC>
同样会在浏览器中显示输出,而不是在控制台中运行演示。
example()
和 demo()
函数都有一个新的 type
参数,可以将其设置为 "html"
以使用此类链接在浏览器中显示输出,而不是在控制台中显示输出。
根据您的观点,一个警告可以被认为是一个特性或一个错误:使用 knitr 创建 HTML 输出的代码设置了一些但不是全部的 knitr 选项。这意味着输出可能会受到用户先前修改的设置的影响。例如,如果设置
knitr::opts_chunk$set(dev = "svg")
或
library(svglite)
knitr::opts_chunk$set(dev = "svglite")
那么嵌入式图像将是 SVG 而不是 PNG(在大多数情况下会得到改善)。类似地,加载定义 knit_print()
的其他方法 的包可能会更改输出,使其与在控制台中显示的方式不同。
HTML5
帮助页面现在是 HTML5,即当前的 HTML 标准,它尤其有助于促进前面描述的一些增强功能(并且将来可能用于其他增强功能)。
投入了大量精力来确保创建有效的 HTML5。旧的验证工具链无法处理 HTML5,因此基于 HTML Tidy 创建了一个新的工具链并将其集成到工具包中。
验证不仅识别了 R 中的 HTML 生成问题,还识别了附加包中的 Rd 标记问题,通常是由于输出原始 HTML。因此,添加了一个新的程序来检查包 HTML 帮助页面的有效性,该程序已针对 CRAN 提交检查打开,并且通常可以通过将环境变量 _R_CHECK_RD_VALIDATE_RD2HTML_
设置为 true 来激活。(这需要系统路径中可用的 HTML tidy 来执行。目前未对 roxygen2 生成的 Rd 页面执行检查,该页面仍需要针对 HTML 更改进行更新。)
这些检查会报告生成的 HTML 的验证问题,并且将这些问题与 Rd 源相关联并不总是直接的。在这种情况下,似乎最有效的方法是从有问题的 Rd 文件中的 TOPIC 调用 help(<TOPIC>, help_type = "html")
,然后使用浏览器查看 HTML 源。这允许识别上下文,事实上,通常已经突出显示了无效的内容。
R 帮助页面现在还在 <head>
内添加视口元标记,这改进了移动设备上的渲染和缩放。
样式表
用于设置 R 帮助页面样式的 R.css
样式表具有一些简单的改进。更有用的是,动态帮助现在提供位于 $R_HOME/doc/html/R.css
中的 R.css
副本,而不是在安装期间为每个包创建的副本(后者对于静态 HTML 仍然是必需的)。这意味着在安装 R 之后对 $R_HOME/doc/html/R.css
所做的任何本地更改都将影响随后通过动态帮助系统显示的所有帮助页面。例如,可以在
@import url("https://cdn.jsdelivr.net.cn/npm/[email protected]/dist/css/bootstrap.min.css");
R.css
顶部包含 Bootstrap 4 CSS。请注意,这不会影响 RStudio 的内置浏览器,该浏览器使用自己的样式。
禁用
可以通过将环境变量 _R_HELP_ENABLE_ENHANCED_HTML_
设置为 false 值来禁用其中许多增强功能。