带有 knitr 和 Rmarkdown 的 Unicode

Posted

技术标签:

【中文标题】带有 knitr 和 Rmarkdown 的 Unicode【英文标题】:Unicode with knitr and Rmarkdown 【发布时间】:2021-12-13 18:37:10 【问题描述】:

是否有一套在 knitr 和 Rmarkdown 中使用 Unicode 的最佳实践或文档?编织文档时,我似乎无法正确显示任何字形。

例如,这适用于控制台(在 Rstudio 中):

> cat("\U2660   \U2665  \U2666  \U2663")
♠   ♥   ♦   ♣

但是在编织时我得到了这个:

html

【问题讨论】:

sessionInfo() 请。 【参考方案1】:

这看起来像是一个特定于 Windows 的编码问题,并且可能与此问题有关:https://github.com/hadley/evaluate/issues/59 不幸的是,我们必须等待基础 R 中的修复,但如果您不必使用 cat(),并且此表达式是代码块中的 *** 表达式(例如,不在 for 循环或 if 语句内),我想这可能有效:

knitr::asis_output("\U2660   \U2665  \U2666  \U2663")

它将字符串直接传递给 knitr 并绕过 cat(),因为 knitr 在 Windows 上无法可靠地捕获 cat() 写出的多字节字符——这取决于关于字符是否可以用系统的本机编码表示。

【讨论】:

【参考方案2】:

对于尝试在 Rstudio/Rmarkdown 文档中获得表情符号支持后遇到此问题的其他人,另一个可能的问题是,如果文件编码未设置为 UTF-8,则生成的编译文档也不支持表情符号.

为了让表情符号在 Rmarkdown 中工作,您必须 change the file encoding of the Rmd document。转到文件 -> 使用编码重新打开,然后选择 UTF-8。

确保文件以 UTF-8 编码打开后,您应该能够使用表情符号支持进行编译。

您甚至应该能够将浏览器中的表情符号直接粘贴到文档中。 ?

将所有文件的默认编码更改为 UTF-8 可能是个好主意,这样您就不必再处理这个问题了。

【讨论】:

【参考方案3】:

Unicode:内联

Phew, that was close `r knitr::asis_output("\U1F605  \U2660   \U2665  \U2666  \U2663")` 

Unicode:块

```r, echo=FALSE 
knitr::asis_output("Phew, that was close \U1F605  \U2660   \U2665  \U2666  \U2663")
```

emo 包

很遗憾,这个包还没有在 CRAN 上,但是可以用 devtools::install_github("hadley/emo") 安装

emo::ji("face")

还有一些例子here

【讨论】:

以上是关于带有 knitr 和 Rmarkdown 的 Unicode的主要内容,如果未能解决你的问题,请参考以下文章

可以在交互式 rmarkdown 文档中使用 knitr 缓存块吗?

如何在带有`knitr::kable`的表格*上方添加标题?

R Markdown、Knitr、Pandoc和Bookdown之间的关系

使用 knitr、Rmarkdown 和 pandoc 创建 HTML 幻灯片

在knitr / rmarkdown中作为png plotly

Rmarkdown(knitr chunk)文档中生成的多个(R)绘图图形