【问题标题】:UTF-8 characters in pandoc template variables using knitr使用 knitr 的 pandoc 模板变量中的 UTF-8 字符
【发布时间】:2014-04-07 13:47:31
【问题描述】:

考虑下面的简单 RMarkdown 文件。我用 UTF-8 编码将它保存为test.md。请注意,我在文件中嵌入了一个自定义 pandoc 变量“test”。此变量包含一个 UTF-8 字符 ©。

%My title
%The authorslist

<!--pandoc
format: latex
V: test:"Copyright notice. © copyright holder"
-->

# First section

fgsdfg jsdksdfgsdfg

现在我尝试使用 knitr 从 R 中编译它。

library(knitr)
pandoc("test.md", format = "latex")

knitr 在 pandoc 的系统命令中插入一个额外的字符。我认为它与编码有关。有关如何解决此问题的任何建议?

executing pandoc -V test:"Copyright notice. © copyright holder"  -f markdown -t latex -o test.pdf "test.md"

我系统上 sessionInfo() 的结果

R version 3.0.2 (2013-09-25)
Platform: i386-w64-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=Dutch_Belgium.1252  LC_CTYPE=Dutch_Belgium.1252    LC_MONETARY=Dutch_Belgium.1252
[4] LC_NUMERIC=C                   LC_TIME=Dutch_Belgium.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] knitr_1.5

loaded via a namespace (and not attached):
[1] evaluate_0.5.1 formatR_0.10   fortunes_1.5-2 stringr_0.6.2  tools_3.0.2 

【问题讨论】:

  • 你的 sessionInfo() 是什么?我猜你的默认语言环境不是 UTF-8?在这种情况下,我将不得不修补 pandoc() 函数。
  • 我已将信息添加到我的问题中。

标签: r utf-8 markdown knitr pandoc


【解决方案1】:

正如我所猜测的,您的默认语言环境不是 UTF-8,在这种情况下,R 无法读取 UTF8 编码的文件,除非您明确指定编码。我在pandoc() 函数中有added 编码支持,所以现在您可以使用pandoc("test.md", format = "latex", encoding = "UTF-8") 处理您的文件。目前,您可以安装development version,未来将在 CRAN 上成为 knitr v1.6。

【讨论】:

  • 我已经用devtools::install_github("yihui/knitr")安装了开发版。它工作完美。非常感谢。
  • @Thierry 很高兴知道这一点。感谢您的测试。
  • 我想我遇到了另一个错误: knit("test.Rmd") 在设置 options(encoding = "UTF-8") 后给出了类似的问题。我将上面的示例(test.md)重命名为 test.Rmd 并将其保存为 UTF-8(在 RStudio 中设置为默认编码)。 knit("test.Rmd") with options(encoding = "native.enc") 工作正常。
  • 我不推荐在原生不支持 UTF-8 的操作系统下使用options(encoding = 'UTF-8')。你很容易陷入困境。
猜你喜欢
  • 2014-04-06
  • 2014-02-26
  • 2020-03-07
  • 1970-01-01
  • 2016-10-25
  • 1970-01-01
  • 2017-01-13
  • 1970-01-01
  • 2012-05-02
相关资源
最近更新 更多