我在R 3.3.1和RStudio中使用knitr 1.13,并且在knitr识别波斯语字符时遇到问题。我保存在test.Rnw
文件中的代码下方,然后运行knit("test.Rnw")
,但输出中的波斯语字符更改为?????
。
\documentclass{article}
\usepackage{xepersian}%package for type Farsi in LaTex
\begin{document}
این یک متن آزمایشی است
<<model>>=
fit <- lm(dist ~ speed, data = cars)
@
برای آزمایش داریم:
\Sexpr{coef(fit)[2]}
\end{document}
答案 0 :(得分:1)
在大多数操作系统上,这已经足够了,因为UTF-8无论如何都是系统的默认编码。特别是在Windows上,您还需要在编织时指定编码,例如:
knit('filename.rnw', encoding = 'UTF-8')
此外,您需要明确处理文本的阅读方向:波斯语是从右到左,但(西方)源代码需要从左到右的文本方向。这需要使用例如代码在代码中明确设置。 \(un)setLTR
:
\documentclass{article}
\usepackage{xepersian}
% Set a font for the text
\settextfont{XB Niloofar}
\begin{document}
این یک متن آزمایشی است
\setLTR
<<model>>=
fit <- lm(dist ~ speed, data = cars)
@
\unsetLTR
برای آزمایش داریم:
\Sexpr{coef(fit)[2]}
\end{document}
你也可以使用Knitr钩子为每个代码块自动设置它。您可能会为此example 74调整:
<<setup, include=FALSE>>=
library(knitr)
knit_hooks$set(ltr = function(before, options, envir) {
if (before) '\\setLTR' else '\\unsetLTR'
})
@
现在您可以按如下方式编写代码块:
<<model, ltr=TRUE>>
fit <- lm(dist ~ speed, data = cars)
@
不再需要手动\setLTR
... \unsetLTR
。