编码:knitr和子文件

时间:2013-03-12 03:46:15

标签: r utf-8 knitr pandoc

我正在使用Windows 7,R2.15.3和带有knitr 1.1的RStudio 0.97.320。不确定我的pandoc版本是什么,但我几天前下载了它。

  

sessionInfo()
      R版本2.15.3(2013-03-01)       平台:x86_64-w64-mingw32 / x64(64位)

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

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

loaded via a namespace (and not attached):
[1] tools_2.15.3  

我想在html和Word中获取报告,因此我使用了markdown和pandoc。 我在西班牙语中用n:á-úñ上的元音和波浪号重音。

我阅读了很多帖子,我发现问题类似于我使用knitr新版本解决的问题。但有一个问题我没有找到解决方案。

当我开始时,我使用'system default'对话框中显示的RStudio编码,即ISO 8859-1RStudio预览效果很好。然而,当我试图获取Word文档时,pandoc在强调的元音上窒息。我发现了一篇帖子,展示了如何使用iconv解决此问题:

  

iconv -t utf-8“myfile.md”| pandoc -o“myfile.docx”| iconv -f utf-8

虽然这确实解决了pandoc's无法识别的utf-8个字符投诉,但出于某些原因pandoc停止查找我的情节,并出现如下错误:

  

pandoc:找不到图像`figure / Parent.png',跳过...

如果我只使用非重音字符,pandoc会查找没有问题的图像。我用.md编辑器查看了两个hex文件,当我比较处理数字的部分时,我看不出有任何区别:
![plot of chunk Parent](figure/Parent.png)
虽然显然强调的字符完全不同...我已经验证图像文件确实存在于图文件夹

无论如何,在阅读了很多帖子之后,我决定将RStudio设置为使用UTF-8编码。只有一个级别的文件,事情很有效。例如,我可以 - 独立编织,然后将以下2个Rmd文件pandoc到Word中:

Parent   -   SAVED WITH utf-8 encoding in RStudio
========================================================

u with an accent: "ú"  SAVED WITH utf-8 encoding in RStudio

```{r fig.width=7, fig.height=6}
plot(cars, main='Parent ú')
```

并单独:

Child   -   SAVED WITH utf-8 encoding in RStudio
========================================================

u with an accent: "ú"  Child file

```{r fig.width=7, fig.height=6}
plot(cars, main='One File Child ú')
```

我在RStudio中获得了2个完美的优势,从pandoc获得了2个完美的Word文档。

当我尝试从父部分调用子部分时出现问题。换句话说,如果我在第一个文件中添加以下行:

```{r CallChild, child='TestUTFChild.Rmd'}

```  

然后子文件中的所有重音都变得混乱,好像UTF-8被解释为ISO 8859-1Pandoc也停止阅读该文件,抱怨它不是utf-8

如果有人能指出我正确的方向:

1。 pandoc如果我留在ISO 8859-1,则找不到情节。我也试过Windows-1252,因为这是我在sessionInfo中看到的,但结果是一样的。

2。通过调用子文件,如果UTF-8是可行的方法。我已经找到了一种设置一些选项来强制子调用中的编码的方法,但我还没有找到它。

非常感谢!

1 个答案:

答案 0 :(得分:3)

我认为这个问题应该在最新的开发版本中修复。请参阅the development repository中有关如何安装devel版本的说明。然后你应该能够在RStudio中选择UTF-8,并获得一个UTF-8编码的输出文件。

以防任何人对血腥细节感兴趣:之前失败的原因是我使用您提供的编码编写了子输出,但没有使用相同的编码读取它。现在我只是避免为child documents编写输出文件。