2

我想写一份包含 R 代码和 perl 的报告,所以为了测试一下,我在文件002- minimal.Rnw 的末尾添加了以下代码片段(借用自028-engine-perl.Rmd ) (我将生成的文件称为 Minimal.Rnw):

<<CheckPerl>>=
Sys.which('perl')
@

<<TestPerl, engine='perl'>>=
$test = "jello world";
$test =~ s/j/h/;
print $test
@

当我 knit() 文件(在 emacs 中,使用 Mn s)时,生成 Minimal.tex,并且替换的结果是正确的,例如,

...
\begin{verbatim}
## hello world
\end{verbatim}
...

但是,当我尝试生成 .pdf 文件时,我收到以下错误消息:

...
./Minimal.tex:108: Missing $ inserted.
<inserted text> 
                $
l.108 ...\hlkwb{\$test\ }\hlstd{}\hlopt{=$\sim$\ }
                                                  \hlstd{}\hlkwc{s/j/h/}\hls...

? 
./Minimal.tex:108: Emergency stop.
...

l.108(和其他)中的语句在alltt环境中,但根据文档alltt,该$符号仅产生一个美元符号,而不用于表示数学模式。因此,如果我手动替换$\sim$\(\sim\),我会得到一个正确编译的 .tex 文件并给我预期的结果。

所以,毕竟,我的问题是:我怎样才能让 knitr 使用\(...\)而不是$...$alltt环境中使用?

(R-3.0.1、emacs 23.3.1、ess 13.05、Ubuntu 12.04)

4

1 回答 1

2

此问题已在knitr 开发版( >= v1.4.8) 中修复。Andre Simon 的 Highlight 没有假设alltt环境,所以knitr不应该把高亮代码放在alltt环境中。

于 2013-09-11T21:50:06.707 回答