让Emacs忽略swave文档中\Sexpr{}命令的内容,以防止不正确的基于$的语法突出显示
在LaTeX中编辑Swave文档时(使用Noweb模式),Emacs知道“忽略”位于=块中的代码。但是,对于填隙\Sexpr{}块,情况并非如此。考虑到通过“$”和LaTeX的列的R引用使用$来抵消等式,这些\Sexpr{}块通常会破坏语法高亮显示,如下所示:让Emacs忽略swave文档中\Sexpr{}命令的内容,以防止不正确的基于$的语法突出显示,r,emacs,elisp,sweave,R,Emacs,Elisp,Sweave,在LaTeX中编辑Swave文档时(使用Noweb模式),Emacs知道“忽略”位于=块中的代码。但是,对于填隙\Sexpr{}块,情况并非如此。考虑到通过“$”和LaTeX的列的R引用使用$来抵消等式,这些\Sexpr{}块通常会破坏语法高亮显示,如下所示: 我对elisp&Emacs语法突出显示有一个非常初步的了解,但我希望可以向.Emacs添加一些东西,以禁用\Sexpr{}中的任何解析/$detection 我没有好的答案,因为我不是Emacs黑客,所以我通常会做以下两件事之一: 在
我对elisp&Emacs语法突出显示有一个非常初步的了解,但我希望可以向.Emacs添加一些东西,以禁用\Sexpr{}中的任何解析/$detection 我没有好的答案,因为我不是Emacs黑客,所以我通常会做以下两件事之一:
- 在行的末尾添加一个简单的
注释,以“关闭”从%$
到$
的数学表达式$
- 或者重写表达式以不使用基于
的子集:$
round(如.numeric(chisq.test(someVar)[“p.value]”),2)
$
运算符,而是使用[
运算符。例如:
foo$p.value
foo[['p.value']]
我认为
foo$p.value
只是foo[[“p.value”,exact=FALSE]]
我也没有解决办法,但我会继续我的解决办法,那就是永远不要(好吧,很少)在\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}.
=
t1很好!我不知道formatC的事情。R如何删除有效的零总是让我抓狂。这种方法在类似\Sexpr{sprintf“%.2f”,my.float)的事件中也有帮助
其中,emacs然后将百分比符号后的所有内容作为注释处理,然后将括号中的内容与各种相关的丑陋内容断开。我假设您使用的是AUCTeX。在emacs附带的默认LaTeX模式中,此问题不太严重,因为$…$高亮显示仅应用于较短的(单行)数学表达式,所以它永远不会像你的快照中那样“流血”。请看一份提交给AUCTeX作者的错误报告。