2012-03-26 10 views
13

Quando si modifica un documento Sweave in LaTeX (utilizzando la modalità Noweb), Emacs sa di "ignorare" il codice che si trova in < < >> = blocchi. Tuttavia, per i blocchi interstitial \ Sexpr {}, questo non è il caso. Dato che R riferimenti di colonne tramite '$' e LaTeX utilizza $ a compensazione equazioni, questi \ sEspr {} blocchi spesso rompere l'evidenziazione della sintassi, in questo modo:

Emacs highlighting issue when using Sweave

ho una comprensione molto rudimentale l'elisp & Evidenziazione della sintassi di Emacs, ma la mia speranza è che sia possibile aggiungere qualcosa a .emacs che disabiliti qualsiasi rilevamento/$ di rilevamento all'interno di \ Sexpr {}.

+0

Presumo che tu stia utilizzando AUCTeX. Nella modalità LaTeX predefinita fornita in bundle con Emacs, questo problema è meno grave in quanto l'evidenziazione $ ... $ viene applicata solo per espressioni matematiche corte (linea singola), quindi non "sanguina" mai come nell'istantanea. IOW un bug report agli autori di AUCTeX è in ordine. – Stefan

risposta

8

Ho pensato che emacs con ESS ha l'evidenziazione della sintassi corretta per Sweave?

In ogni caso, la "correzione" più semplice è semplicemente non utilizzare l'operatore $ ma [[. Ad esempio:

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

Dovrebbe dare lo stesso risultato. Credo foo$p.value è solo l'abbreviazione di foo[["p.value",exact=FALSE]]

5

devo nessuna buona risposta per voi come io non sono un hacker Emacs, quindi faccio di solito una delle due cose:

  • O aggiungere un semplice % $ commento alla della linea di "chiudere" l'espressione matematica da $ a $,

  • o riscrivere l'espressione di non utilizzare $ basata su sottoinsiemi:
    round(as.numeric(chisq.test(someVar)["p.value"]), 2).

7

Non ho una correzione sia, ma io passo lungo la mia soluzione, che è quello di non (beh, raramente) fare qualsiasi elaborazione in \Sexpr pezzi, ma invece di memorizzare le cose voglio usare in \Sexpr nelle variabili, e di farlo nello stesso pezzo che faccio le principali calcoli.

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

Mentre ci sono alcuni aspetti negativi di questo, trovo mi aiuta a mantenere traccia di ciò che Voglio presentare e come voglio presentarlo.

Come parte, considerare l'utilizzo di formatC anziché round in quanto può mantenere zeri significativi (ad esempio 0,10 anziché 0,1).

+1

Buono a parte! Non sapevo della cosa formatC. Mi fa sempre impazzire il modo in cui R cala zeri significativi. –

+1

Questo approccio aiuta anche in caso di qualcosa come '\ Sexpr {sprintf"%. 2f ", my.float)}' dove emacs tratta tutto dopo il simbolo di percentuale come un commento, che quindi rompe le parentesi corrispondenti, con tutti i tipi della bruttezza associata. – mac

Problemi correlati