2017-11-03 5 views
0

Ich verwende gerne \Sexpr{''} für Inline-R-Code einschließlich Hervorhebung. Dies scheint jedoch für Formeln nicht zu funktionieren. Es scheint, als wäre die Tilde ein Problem. Es zeigt nur nicht in der PDF.Unevaluierter Inline-Code mit Formel mit Sexpr {} in Knitr

ist hier ein minimales Beispiel:

\documentclass{article} 
\begin{document} 

<<setup, echo=FALSE>>= 
library("knitr") 

knit_hooks$set(inline = function(x) { 
    if (is.numeric(x)) return(knitr:::format_sci(x, 'latex')) 
    highr:::hi_latex(x) 
}) 
@ 

\Sexpr{'plot(x, y)'} works. 

\Sexpr{'lm(response ~ treatment, data)'} does not show the tilde. 

\end{document} 

Was ich erhalte, ist die folgende:

enter image description here

Jede Hilfe sehr geschätzt wird.

Antwort

2

Schauen Sie näher an den Ergebnissen der Inline-Funktion definieren Sie im Setup:

inline('lm(response ~ treatment, data)') 

"[1] \\hlkwd{lm}\\hlstd{(response} \\hlopt{~} \\hlstd{treatment, data)}" 

Es gibt zwei Probleme hier: die Tilde mit \ hlopt gekennzeichnet ist {} statt \ hlstd {}, und es ist nicht richtig als Symbol für LaTeX markiert. Um dies zu tun, müssen Sie es als \textasciitilde einfügen.

Ich weiß nicht, ob es eine Möglichkeit gibt, highr::hi_latex zu modifizieren, um alle mathematischen Symbole wie die Tilde richtig zu interpretieren. Kurz von dem, können Sie die LaTeX-Ausgabe post facto wie folgt ändern:

<<setup, echo=FALSE, message=FALSE>>= 
library(knitr) 
library(dplyr) 
library(stringr) 

knit_hooks$set(inline = function(x) { 
    if (is.numeric(x)) return(knitr:::format_sci(x, 'latex')) 
    highr:::hi_latex(x) %>% 
    str_replace("~", "\\\\textasciitilde") %>% 
    str_replace("hlopt", "hlstd") 
    }) 
@ 
+0

Was ich tun ist am Ende zu verwenden 'highr ::: hi_latex (x)%>% str_replace ("hlopt"," textalltt ")' mit der textalltt Definition von [hier] (https://tex.stackexchange.com/questions/70652/alltt-packages-alltt-makes-a-newline). Das bringt genau das, was ich mir erhofft habe. Deine Hilfe hat mich definitiv dorthin gebracht. Vielen Dank! – Heidi

+0

Das funktioniert noch besser, danke für das Update! –