Get Emacs to ignore contents of \Sexpr{} command in Sweave document to prevent incorrect $-based syntax highlighting

萝らか妹 提交于 2019-11-29 17:29:55

问题


When editing an Sweave document in LaTeX (using the Noweb mode), Emacs knows to "ignore" code that is in <<>>= blocks. However, for interstitial \Sexpr{} blocks, this isn't the case. Given that R references by columns via '$' and LaTeX uses $ to set-off equations, these \Sexpr{} blocks often break the syntax highlighting, like so:

I have a very rudimentary understanding the elisp & Emacs syntax highlighting, but my hope is that it might be possible to add something to .emacs that will disable any parsing/$ detection within \Sexpr{}'s.


回答1:


I thought emacs with ESS has correct syntax highlighting for Sweave?

Anyway, the easiest "fix" is to just not use the $ operator but [[ instead. For example:

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

Should give the same result. I think foo$p.value is just short for foo[["p.value",exact=FALSE]]




回答2:


I don't have a fix either, but I'll pass along my workaround, which is to never (well, rarely) do any processing in \Sexpr chunks but instead to store things I want to use in \Sexpr in variables, and to do so in the same chunk I do the main calculations in.

<<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}.

While there are some downsides to this, I find it helps me to better keep track of what I want to present, and how I want to present it.

As an aside, consider using formatC instead of round as it can keep significant zeros (ie, 0.10 instead of 0.1).




回答3:


I have no good answer for you as I am not an Emacs hacker, so I usually do one of two things:

  • Either add a simple % $ comment at the of the line to "close" the math expression from $ to $,

  • Or rewrite the expression to not use $-based subsetting:
    round(as.numeric(chisq.test(someVar)["p.value"]), 2).



来源:https://stackoverflow.com/questions/9876835/get-emacs-to-ignore-contents-of-sexpr-command-in-sweave-document-to-prevent-i

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!