Подтвердить что ты не робот

Получите Emacs, чтобы игнорировать содержимое команды \Sexpr {} в документе Sweave, чтобы предотвратить неправильное выделение синтаксиса $-based

При редактировании Sweave-документа в LaTeX (с использованием режима Noweb) Emacs знает "игнорировать" код, который находится в < < → = block. Однако для межстраничных блоков \Sexpr {} это не так. Учитывая, что R ссылается на столбцы через '$', а LaTeX использует $для уравнивающих уравнений, эти блоки \Sexpr {} часто нарушают подсветку синтаксиса, например:

Emacs highlighting issue when using Sweave

У меня очень рудиментарное понимание подсветки синтаксиса elisp и Emacs, но я надеюсь, что возможно добавить что-то в .emacs, который отключит любое разбор/обнаружение $в\Sexpr {}.

4b9b3361

Ответ 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).