12
votes

R, Sweed, latex - Échapper des variables à imprimer en latex?

Je cherche des 2 derniers jours et, même si j'ai trouvé des questions similaires sur le débordement de la pile et d'autres discussions sur Google, je n'ai rien trouvé correspondant à ma demande.

J'ai une application préexistante que je soutiens, qui est construit autour des fichiers de modèle R. Sweave RNW servent à générer des fichiers .tex, utilisés pour générer des fichiers .pdf.

dans le RNW, il y a du code existant tel que ceci: xxx

Le problème est, myReport $ Coursinfo shortname a des valeurs qui doivent être échappées pour le latex, car elles comprennent des caractères tels que & (qui force le latex à lancer un erreur sur les colonnes de table). J'ai tenté d'inclure la bibliothèque SEQINR et de l'utiliser STROSC sur l'ensemble de l'objet de données, mais le fichier .TEX généré indique-t-il un nom indifféral et un nom shortName.

Je ne suis pas entièrement familier avec R pourfois, mais En jouant avec le modèle, j'ai constaté que les appels vers "Imprimer ()" ci-dessus ne sont même pas nécessaires, comme il suffit de spécifier les variables directement dans \ Sexpr résultats dans les valeurs imprimées, mais mes valeurs échappées ne sont pas évaluées lorsqu'elles sont enregistrées dans le .tex.

J'ai également tenté de placer des STROSC directement au sein de \ Sexpr (au lieu d'imprimer), sans différence.

Donc, il semble donc que le processus de R / Sweave Stripping the Slashes, ce qui signifie que je devrais probablement doubler des valeurs, mais je ne suis pas assez familier avec R pour savoir comment faire cela.

Quel est le moyen approprié d'imprimer des données dynamiques dans un .tex fichier?


Mise à jour : Basé sur la réponse de @ Aaron, voici la fonction que j'ai créée: xxx

mon modèle mis à jour (comme référencé dans mon message original ci-dessus) ressemble maintenant à ceci: < PRE> XXX

Donc, une chaîne avec un et désormais correctement dans le fichier de latex généré comme suit:

Certaines chaînes \ & une autre chaîne


0 commentaires

4 Réponses :



8
votes

Vous pouvez soit utiliser \ verbe code> ou vous pouvez insérer une barre oblique inverse quadrupple, nécessaire pour en obtenir un dans le fichier Tex final, car il passe à deux opérations d'impression qui convertissent une double "\" à un seul "\".

\documentclass{article}
\begin{document}
<<echo=FALSE, results=hide>>=
sanitize <- function(str) {
  result <- str
  result <- gsub("&", "\\\\&", result, fixed = TRUE)
  result <- gsub("_", "\\\\_", result, fixed = TRUE)
  result
}
@ 

<<>>=
(foo <- "test & _")
sanitize(foo)
@ 

My string is ``\verb+\Sexpr{foo}+''.  When sanitized, it's ``\Sexpr{sanitize(foo)}''.

\end{document}


5 commentaires

Solution similaire sur la liste de diffusion R-Help: Stat.Ethz. CH / PipeMermail / R-Aide / 2010-Novembre / 260082.html


Pour clarifier sur votre commentaire concernant \ Verb (votre commentaire dans la réponse de Andrea), obtenir "Quelques texte avec et inclus" imprimé dans TeX comme "Quelque texte avec \ & inclus", je ferais cela? \ Verb + \ Sexpr {myReport $ CoursInfo $ shortName} +


Oui et non. Votre commande est correcte, mais ce n'est pas la sortie que vous obtiendriez. La commande verbe dans le latex signifie Verbatim et imprimera des objets comme & et _ sans la nécessité des gastrissements au dos. Cependant, il l'imprimera dans une police monospace, au moins par défaut.


Le lien fonctionne mais a besoin de HTTPS; essayez celui-ci: stat.thz.ch/pipetermail/r- Aide / 2010 à novembre / 260082.html


Selon XKCD , il s'agit du "Backslash actuel, de réel cette fois" et d'ajouter plus pourrait entraîner Le «barre oblique inverse» il transcende le temps et l'espace »ou d'autres résultats plus inquiétants. :)



0
votes

ou vous pouvez également utiliser Sweave pour faire la table; Lorsque vous utilisez tex de sortie au lieu de Sexpr Seule une double barre oblique inverse est nécessaire, comme mon sanitize1 est ici ou Stresc fait plus complètement.

vous rempliriez d avec vos valeurs ( myReport $ rapport_name au lieu de "my_repor_name" , par exemple) au lieu de ceux que j'ai composés. xxx


0 commentaires

7
votes

Le package hmisc a une fonction latextranslate conçu pour préparer des chaînes pour le latex. De son aideFILE:

La latextranslate se traduit particulièrement Articles dans les chaînes de caractères au latex format, par exemple, fait un ^ 2 = A \ $ ^ 2 \ $ pour Superscript dans des étiquettes variables. Noms de latex des lettres grecques (par exemple, "alpha") aura des backslashes ajoutés Si grec == vrai. Le mode mathématique est inséré comme requis. Latextranslate suppose que Le texte d'entrée a toujours des correspondances, par ex. [) [] (] (), et cela entourant \ $ \ $ est ok.


1 commentaires

Merci, je ne savais pas à ce sujet! Cependant, il semble que ajouter seulement deux backslashes, donc fonctionnerait dans tex sortie mais pas Sexpr 's.