2012-03-26 10 views
13

Al editar un documento Sweave en LaTeX (usando el modo Noweb), Emacs sabe "ignorar" el código que está en < < >> = bloques. Sin embargo, para los bloques intersticiales \ Sexpr {}, este no es el caso. Teniendo en cuenta que R referencias de columnas a través de '$' y LaTeX usa $ a compensar ecuaciones, estas \ Sexpr {} bloques menudo romper el resaltado de sintaxis, así:

Emacs highlighting issue when using Sweave

tengo un conocimiento muy rudimentario elisp & resaltado de sintaxis de Emacs, pero espero que sea posible agregar algo a .emacs que deshabilite cualquier análisis sintáctico/$ detection dentro de \ Sexpr {}.

+0

Supongo que está utilizando AUCTeX. En el modo LaTeX predeterminado que viene incluido con Emacs, este problema es menos severo porque el resaltado $ ... $ solo se aplica para expresiones matemáticas cortas (de una sola línea), por lo que nunca "sangra" como en la instantánea. IOW un informe de error a los autores de AUCTeX está en orden. – Stefan

Respuesta

8

pensé emacs con ESS ha sintaxis correcta para resaltar Sweave?

De todos modos, la "solución" más fácil es simplemente no usar el operador $ sino [[. Por ejemplo:

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

Debería dar el mismo resultado. Creo que es sólo foo$p.value corto para foo[["p.value",exact=FALSE]]

5

que no tienen una buena respuesta para usted ya que no soy un hacker Emacs, por lo que suelen hacer una de dos cosas:

  • O añadir un comentario simple % $ en el de la línea de "cerrar" la expresión matemática de $ a $,

  • O reescribir la expresión que no utiliza $ de subconjuntos basada en:
    round(as.numeric(chisq.test(someVar)["p.value"]), 2).

7

no tengo una solución o bien, pero voy a pasar a lo largo de mi solución, que es nunca (bueno, casi nunca) haga ningún tipo de procesamiento en trozos \Sexpr pero en lugar de almacenar cosas Quiero usar en \Sexpr en las variables, y para hacerlo en el mismo fragmento que hago los cálculos principales en.

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

Si bien hay algunas desventajas a esto, me parece que me ayuda a hacer un mejor seguimiento de lo Quiero presentar y cómo quiero presentarlo.

Como un lado, considere usar formatC en lugar de round, ya que puede mantener ceros significativos (es decir, 0,10 en lugar de 0,1).

+1

¡Buen lado! No sabía sobre el tema del formato. Siempre me ha vuelto loco cómo R cae ceros significativos. –

+1

Este enfoque también ayuda en caso de algo como '\ Sexpr {sprintf"% .2f ", my.float)}' donde emacs luego trata todo después del símbolo de porcentaje como un comentario, que luego rompe la coincidencia de paréntesis, con todo tipo de la fealdad asociada. – mac

Cuestiones relacionadas