让Emacs忽略Sweave文档中\ Sexpr {}命令的内容,以防止基于$的语法突出显示不正确

时间:2012-03-26 17:30:48

标签: r emacs elisp sweave

在LaTeX中编辑Sweave文档时(使用Noweb模式),Emacs知道“忽略”<>> =块中的代码。但是,对于interstitial \ Sexpr {}块,情况并非如此。鉴于R'通过'$'和LaTeX使用$来引用方程式,这些\ Sexpr {}块通常会破坏语法高亮,如下所示:

Emacs highlighting issue when using Sweave

我对elisp& amp; Emacs语法高亮,但我希望有可能在.emacs中添加一些东西来禁用\ Sexpr {}中的任何解析/ $检测。

3 个答案:

答案 0 :(得分:8)

我认为使用ESS的emacs对Sweave有正确的语法高亮显示?

无论如何,最简单的“修复”就是不使用$运算符而是使用[[。例如:

foo$p.value
foo[['p.value']]

应该给出相同的结果。我认为foo$p.value只是foo[["p.value",exact=FALSE]]

的缩写

答案 1 :(得分:7)

我也没有解决方法,但我会传递我的解决方法,这是永远(很少,很少)在\Sexpr块中进行任何处理,而是存储我想要使用的内容\Sexpr在变量中,并且在同一块中进行主要计算。

<<echo=FALSE, results=hide>>=
t1 <- chisq.test(someVar)
p1 <- formatC(t1$p.value, format="%f", digits=2)
@

\dots with a $p$-value of \Sexpr{p1}.

虽然这有一些缺点,但我发现它可以帮助我更好地跟踪我想要呈现的内容,以及我想如何呈现它。

另外,请考虑使用formatC代替round,因为它可以保留重要的零(即0.10而不是0.1)。

答案 2 :(得分:5)

我没有给你很好的答案,因为我不是Emacs黑客,所以我通常做两件事之一:

  • 在该行的位置添加简单的% $评论,以便将数学表达式“关闭”从$$

  • 或者重写表达式以不使用基于$的子集:
    round(as.numeric(chisq.test(someVar)["p.value"]), 2)