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

Joh*_*ton 13 emacs elisp r sweave

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

Emacs在使用Sweave时突出显示问题

我对elisp和Emacs语法突出显示有一个非常基本的理解,但我希望有可能在.emacs中添加一些东西来禁用\ Sexpr {}中的任何解析/ $检测.

Sac*_*amp 8

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

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

foo$p.value
foo[['p.value']]
Run Code Online (Sandbox Code Playgroud)

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


Aar*_*ica 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}.
Run Code Online (Sandbox Code Playgroud)

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

另外,考虑使用formatC而不是round因为它可以保持显着的零(即0.10而不是0.1).


Dir*_*tel 5

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

  • 无论是添加一个简单 % $ 的行注释来自于"关闭"的数学表达式$$,

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