【发布时间】:2017-10-11 16:52:21
【问题描述】:
我有一个 doc.Rnw 应该产生一些俄罗斯 UTF-8 字符串:
\documentclass{article}
\usepackage{inputenc}
\inputencoding{utf8}
\usepackage[main=english,russian]{babel}
\begin{document}
\selectlanguage {russian}
<<test, results='asis', echo=FALSE>>=
print(readLines('string.rus', encoding="UTF-8"))
print("Здравствуйте")
@
Здравствуйте
\selectlanguage {english}
\end{document}
string.rus 有一个 UTF-8 字符串,它在 R 控制台中正确显示:
print(readLines('string.rus', encoding="UTF-8"))
# [1] "Здравствуйте"
doc.Rnw 直接显示在 Windows 记事本中,而两者:
file.show("doc.Rnw")
file.show("doc.Rnw", encoding="UTF-8")
无法正确显示 UTF-8 字符串。
使用:
knit("doc.Rnw")
输出doc.tex的文档部分显示:
\begin{document}
\selectlanguage {russian}
[1] "<U+0417><U+0434><U+0440><U+0430><U+0432><U+0441><U+0442><U+0432><U+0443><U+0439><U+0442><U+0435>"
[1] " <U+0097>д <U+0080>авс <U+0082>в <U+0083>й <U+0082>е"
Здравствуйте
\selectlanguage {english}
\end{document}
这当然不能在 PDFLaTeX 中编译。使用:
knit("doc.Rnw", encoding="UTF-8")
会产生更糟糕的结果。
注释应该生成 UTF-8 字符串的块:
print(readLines('string.rus', encoding="UTF-8"))
print("Здравствуйте")
给出一个有效的doc.tex,它在 MikTeX 中编译并正确显示剩余的 UTF-8 字符串。
即使我评论第一个 print... 并只留下第二个。我无法编译。这似乎证明doc.Rnw的原始编码是正确的。
我尝试将两个print 命令替换为:
a="Здравствуйте"
Encoding(a)="UTF-8"
print(a)
在这种情况下我可以编译,但 PDF 输出是(第一个字符串从边距中剪掉):
[1] «U+0417><U+0434><U+0440><U+0430><U+0432><U+0441><U+0442><U+0432><U+0443>
Здравствуйте
所以块输出仍然是错误的。
如何从块中正确打印 UTF-8 字符串?
R 版本是 Windows 的 3.3.3 (2017-03-06),knitr 是 1.15.1 (2016-11-22)。
【问题讨论】: