2013-02-15 11 views
8

Pracuję ostatnio z knitr i podczas gdy większość aspektów tego poszła całkiem gładko, jest jeden problem z formatowaniem z włączeniem kodu R do gotowego dokumentu, którego nie wymyśliłem na zewnątrz. Często potrzebuję tworzyć relatywnie długie ciągi tekstowe w moich fragmentach R, np. podpisy dla funkcji xtable(). Podczas gdy porządek ogólnie świetnie radzi sobie z pakowaniem kodu R i przechowywaniem go w zacienionych skrzynkach w LaTeX, nie wie, co zrobić z użądleniami tekstowymi, więc nie zawija ich, a przepływają one z prawej strony strona.Jak zawijać tekst w źródle R z porządkiem i dzianiną

Byłbym najbardziej zadowolony z rozwiązania, które ma porządek wykonując całą pracę. Byłbym jednak zadowolony z rozwiązania, które można zastosować ręcznie do długich ciągów w R fragmentach w moim źródle Rnw. Po prostu nie chcę edytować pliku tex utworzonego przez KnitR.

Poniżej znajduje się minimalny przykład roboczy.

\documentclass[12pt, english, oneside]{amsart} 

\begin{document} 

<<setup, include=FALSE, cache=FALSE, tidy=TRUE>>= 
options(tidy=TRUE, width=50) 
@ 

<<>>= 
x <- c("This","will","wrap","nicely","because","tidy","knows","how","to","deal","with","it.","So","nice","how","it","stays","in","the","box.") 
longstr <- "This string will flow off the right side of the page, because tidy doesn't know how to wrap it." 
@ 

\end{document} 

Odpowiedz

3

To jest wyjątkowo ręczne rozwiązanie, ale takie, z którego korzystałem.

Budujesz łańcuch, używając paste0, który daje porządną szansę na podzielenie go.

longstr <- paste0("This string will flow off the right side"," of the page, because tidy doesn't know how to wrap it.") 
+1

jest to prawdopodobnie najlepsze rozwiązanie po stronie R; wydaje się to łatwym problemem, ale w rzeczywistości jest naprawdę trudne; innym rozwiązaniem jest użycie wykazów pakietów LaTeX, np. https://github.com/yihui/knitr-examples/blob/master/066-listings-breaklines.Rnw –

+0

Myślę, że będę próbować aukcji, gdy mam czas, i za pomocą Hack paste0() w międzyczasie. Dzięki, Brian i Yihui. – Gregory

+1

Uaktualnienie rozwiązania: Zacząłem od zwykłego sprzątania w porcjach, w których wiem, że będą mieć problemy i sformatować je ręcznie. To naprawdę działa całkiem dobrze. – Gregory

2

Drugim rozwiązaniem jest użycie strwrap.

> longstr <- "This string will flow off the right side of the page, because tidy doesn't know how to wrap it." 
> strwrap(longstr, 70) 
[1] "This string will flow off the right side of the page, because tidy" "doesn't know how to wrap it."          
> str(strwrap(longstr, 70)) 
chr [1:2] "This string will flow off the right side of the page, because tidy" "doesn't know how to wrap it." 

Niestety, nie wiem, czy to będzie działać z porządkiem, ale działa bardzo dobrze z wyjściem HTML knitr.

1

Ta odpowiedź jest nieco spóźniona na imprezę, ale odkryłem, że nawet gdy używam tidy.opts = list(width.cutoff = 60) we wczesnej części (przy użyciu RStudio i skryptu .Rnw), a następnie na każdej liście opcji obejmują tidy = TRUE, przepełnienie linii nadal się dzieje. Moje linie przepełnienia są w sekcjach kodu, które tworzą wykresy ggplot2. Próba i błąd wykryły, że jeśli dodaję powrót karetki po znaku + na końcu wiersza, nie mam problemów z przepełnieniem. Dodatkowa linia nie pojawia się w pliku PDF tworzonym przez LaTeX.

Powiązane problemy