He estado buscando durante los últimos 2 días, y aunque he encontrado preguntas similares sobre Stack Overflow y otras discusiones en Google, no he encontrado nada que coincida con mi solicitud.R, Sweave, LaTeX: variables de escape para imprimir en LaTeX?
Tengo una aplicación preexistente que estoy respaldando, que se basa en R. Sweave Rnw Los archivos de plantilla se usan para generar archivos .tex, que se usan para generar archivos .pdf.
Dentro del Rnw, el código no está vigente como este:
\begin{tabular}{lll}
& {\bf \textcolor{TitlesColor}{Report name:}} & \Sexpr{print(myReport$report_name)}\\
& {\bf \textcolor{TitlesColor}{Report date:}} & \today \\
& {\bf \textcolor{TitlesColor}{Course name:}} & \Sexpr{print(myReport$courseInfo$shortname)}\\
& {\bf \textcolor{TitlesColor}{Start date:}} & \Sexpr{print(myReport$courseInfo$startdate_readable)}\\
& {\bf \textcolor{TitlesColor}{Instructor:}} & \Sexpr{print(paste(myReport$instructor$lastname, collapse="| "))}\\
\end{tabular}
La cuestión es, MyReport $ CourseInfo $ nombre corto tiene valores que necesitan ser escapado de látex, ya que incluye personajes como & (lo que obliga a LaTeX a arrojar un error sobre las columnas de la tabla). He intentado incluir la biblioteca seqinr y el uso de stresc en todo el objeto de datos, pero el archivo .tex generado muestra un & sin nombre desde shortname.
Aún no estoy totalmente familiarizado con R, pero al jugar con la plantilla, he encontrado que las llamadas a "print()" anteriores ni siquiera son necesarias, como solo especificar las variables directamente dentro de \ Sexpr da como resultado valores impresos, pero aún así mis valores escapados no se guardan cuando se registran en .tex.
También he intentado colocar el stresc directamente dentro de \ Sexpr (en lugar de imprimir), sin ninguna diferencia.
Parece que el propio proceso de R/Sweave está eliminando las barras diagonales, lo que significa que probablemente necesite duplicar los valores, pero no estoy lo suficientemente familiarizado con R para saber cómo hacerlo.
¿Cuál es la forma correcta de imprimir datos dinámicos en un archivo .tex?
ACTUALIZACIÓN: Sobre la base de @ respuesta de Aaron, aquí es la función que creé:
# Sanitizes variables for displaying within LaTeX via Sexpr
# Adds slashes to LaTeX special characters, which results in single-slash in tex output
sanitizeLatexS <- function(str) {
gsub('([#$%&~_\\^\\\\{}])', '\\\\\\\\\\1', str, perl = TRUE);
}
Mi plantilla actualizada (como se hace referencia en mi post original arriba) ahora se ve así:
\begin{tabular}{lll}
& {\bf \textcolor{TitlesColor}{Report name:}} & \Sexpr{sanitizeLatexS(myReport$report_name)}\\
& {\bf \textcolor{TitlesColor}{Report date:}} & \today \\
& {\bf \textcolor{TitlesColor}{Course name:}} & \Sexpr{sanitizeLatexS(myReport$courseInfo$shortname)}\\
& {\bf \textcolor{TitlesColor}{Start date:}} & \Sexpr{sanitizeLatexS(myReport$courseInfo$startdate_readable)}\\
& {\bf \textcolor{TitlesColor}{Instructor(s):}} & \Sexpr{sanitizeLatexS(paste(myReport$instructorList$lastname, collapse="| "))}\\
\end{tabular}
Así que una cadena con & ahora aparece correctamente en el archivo LaTeX generado como:
Algunos cadena \ & alguna otra cadena
Solución similar en la lista de correo de R-help: http://stat.ethz.ch/pipermail/r-help/2010-November/260082.html – Aaron
lista de correo url da a 404 –
Para aclarar tu comentario sobre \ verb (tu comentario en la respuesta de Andrea), para obtener "Some text with & included" impreso en tex como "Some text with \ & included", haría esto? '\ verb + \ Sexpr {myReport $ courseInfo $ shortname} + ' –