Получите Emacs, чтобы игнорировать содержимое команды \Sexpr {} в документе Sweave, чтобы предотвратить неправильное выделение синтаксиса $-based
При редактировании Sweave-документа в LaTeX (с использованием режима Noweb) Emacs знает "игнорировать" код, который находится в < < → = block. Однако для межстраничных блоков \Sexpr {} это не так. Учитывая, что R ссылается на столбцы через '$', а LaTeX использует $для уравнивающих уравнений, эти блоки \Sexpr {} часто нарушают подсветку синтаксиса, например:
![Emacs highlighting issue when using Sweave]()
У меня очень рудиментарное понимание подсветки синтаксиса elisp и Emacs, но я надеюсь, что возможно добавить что-то в .emacs, который отключит любое разбор/обнаружение $в\Sexpr {}.
Ответы
Ответ 1
Я думал, что emacs с ESS имеет правильную подсветку синтаксиса для Sweave?
Во всяком случае, самым простым "исправлением" является просто не использовать оператор $
, а [[
. Например:
foo$p.value
foo[['p.value']]
Должен дать тот же результат. Я думаю, что foo$p.value
просто сокращен для foo[["p.value",exact=FALSE]]
Ответ 2
У меня также нет исправления, но я пройду по обходному пути, который никогда не (ну, реже) не обрабатывает в \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).
Ответ 3
У меня нет хорошего ответа для вас, поскольку я не хакер Emacs, поэтому я обычно делаю одно из двух:
-
Либо добавьте простой комментарий % $
в строке, чтобы "закрыть" математическое выражение от $
до $
,
-
Или перепишите выражение, чтобы не использовать подмножество $
:
round(as.numeric(chisq.test(someVar)["p.value"]), 2)
.