2013-02-05 19 views
6

Ich habe ein lineares Modell in einem Code-Chunk, das ich schön in LaTeX anzeigen möchte. Der Modellaufruf übernimmt die Standardform mit einer Tilde ~, die in LaTeX furchtbar gesetzt wird.Hübsche Tilde ~ aus R Chunk mit Knitr?

\documentclass{article} 
\begin{document} 
<<>>= 
lm(Sepal.Width ~ Sepal.Length, data = iris) 
@ 
\end{document} 

Der Code wird knitr::knit(mwe.Rnw) gestrickt und dann durch PDFLaTeX laufen.

Das Erstellen schöner Tilden ist in LaTeX sehr ärgerlich und es ist nicht einfach, sie einfacher zu machen. Eine Überprüfung der .tex-Datei, die von knit erzeugt wird, zeigt, dass der Code in drei Umgebungen abgelegt wird, von denen \begin{alltt} ... \end{alltt} die interessante ist. Aber das Paket alltt bietet keine schnellen Fixes für den speziellen Satz von Sonderzeichen.

Antwort

7

Diese Lösung ist inspiriert von yihui's example on hooks, this post und meinem Kumpel RJ.

\documentclass{article} 
\usepackage{xspace} 
\newcommand{\mytilde}{\lower.80ex\hbox{\char`\~}\xspace} 
\begin{document} 
<<setup, include=FALSE>>= 
library(knitr) 
hook_source = knit_hooks$get('source') 
knit_hooks$set(source = function(x, options) { 
    txt = hook_source(x, options) 
    # extend the default source hook 
    gsub('~', '\\\\mytilde', txt) 
}) 
@ 
<<results = "hide">>= 
lm(Sepal.Width ~ Sepal.Length, data = iris) 
@ 
\end{document} 

Es definiert auch den \mytilde Befehl für den allgemeinen Gebrauch. Zum Beispiel In-Line-Beispiele von R-Code: "in the form \texttt{response~\mytilde~predictors} ...".

Das Paket xspace ist nicht unbedingt erforderlich (solange Sie die xspace im neuen Befehl entfernen), aber macht den Befehl nicer zu verwenden.

+0

Das funktioniert gut für den Echo-Code, aber die Tilde ist immer noch "hässlich" in den Ergebnissen. –

Verwandte Themen