2012-03-26 14 views
13

Beim Bearbeiten eines Sweave-Dokuments in LaTeX (im Noweb-Modus) weiß Emacs, Code in < zu "ignorieren" < >> = Blöcke. Bei interstitiellen \ Sexpr {} - Blöcken ist dies jedoch nicht der Fall. Da R Referenzen von Spalten über ‚$‘ und LaTeX verwendet Gleichungen $ zur Aufrechnung, diese \ Sexpr {} Blöcke brechen oft die Syntax-Hervorhebung, wie so:

Emacs highlighting issue when using Sweave

Ich habe ein sehr rudimentäres Verständnis die elisp & Emacs Syntaxhervorhebung, aber meine Hoffnung ist, dass es möglich sein könnte, etwas zu .emacs hinzufügen, die jede Analyse/$ Erkennung innerhalb \ Sexpr {} 's deaktivieren wird.

+0

Ich nehme an, Sie verwenden AUCTeX. Im Standard-LaTeX-Modus, der im Lieferumfang von Emacs enthalten ist, ist dieses Problem weniger gravierend, da die Hervorhebung von $ ... $ nur für kurze (einzeilige) mathematische Ausdrücke angewendet wird, so dass sie niemals "blutet" wie in Ihrem Snapshot. IOW ist ein Fehlerbericht an die AUCTeX-Autoren angebracht. – Stefan

Antwort

8

Ich dachte, Emacs mit ESS hat korrekte Syntaxhervorhebung für Sweave?

Wie auch immer, die einfachste "Lösung" ist, den $ Operator nicht zu verwenden, sondern stattdessen [[. Zum Beispiel:

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

Sollte das gleiche Ergebnis geben. Ich denke, foo$p.value für nur kurz ist foo[["p.value",exact=FALSE]]

5

Ich habe keine gute Antwort für Sie, da ich nicht ein Emacs Hacker bin, so dass ich in der Regel eines von zwei Dingen:

  • Entweder einen einfachen % $ Kommentar an der der Zeile in „close“ der mathematische Ausdruck von $ zu $,

  • Oder umschreiben des Ausdruck nicht $ -basierte subsetting zu verwenden:
    round(as.numeric(chisq.test(someVar)["p.value"]), 2).

7

Ich habe nicht ein Update entweder, aber ich werde auf meiner Abhilfe passieren, die nie zu (gut, selten) tun, um jede Verarbeitung in \Sexpr Brocken, sondern Dinge zu speichern ich mag \Sexpr in Variablen verwenden, und so in den gleichen Brocken zu tun ich in den wichtigsten Berechnungen.

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

Zwar gibt es einige Nachteile davon sind, finde ich es mir hilft, besser zu verfolgen, was Ich möchte präsentieren und wie ich es präsentieren möchte.

Verwenden Sie als Alternative formatC anstelle von round, da es signifikante Nullen (dh 0,10 statt 0,1) behalten kann.

+1

Gut beiseite! Ich wusste nichts über das FormatC-Ding. Es hat mich immer verrückt gemacht, wie R signifikante Nullen fallen lässt. –

+1

Dieser Ansatz hilft auch bei etwas wie '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 'Dabei wird dann alles nach dem Prozentzeichen als Kommentar behandelt, was dann die Klammeranpassung mit allen Arten unterbricht der damit verbundenen Hässlichkeit. – mac