2013-02-15 3 views
8

最近、knitrで作業していますが、そのほとんどは非常にスムーズに進行していますが、完成したドキュメントにRコードを含めて書いていない問題がありますでる。私はしばしば、比較的長いテキスト文字列をRチャンクに作成する必要があります。 xtable()のキャプション一般的には、Rコードをラップし、LaTeXの陰影のついたボックスに入れておくのが大変ですが、テキストのスティッとすることを知らないので、ラップしません。ページ。TidyとknitrでRソースのテキストをラップする方法

私はすべての作業を整然とした解決策に大いに満足しています。しかし、RnwソースのR塊の長い文字列に手動で適用できる解決策にも満足しています。私はちょうどKnitRによって作成されたtexファイルを編集する必要はありません。

以下は最小の使用例です。

\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} 

答えて

3

これは非常に手作業の解決策ですが、私が使用したものです。

paste0を使用して文字列を作成し、分割するチャンスを与えます。

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

これはおそらくR側の最良の解決策です。それは簡単な問題だと思われますが、実際は本当に難しいです。もう1つの解決策はLaTeXパッケージの一覧を使用することです。 https://github.com/yihui/knitr-examples/blob/master/066-listings-breaklines.Rnw –

+0

私は時間があり、その間にpaste0()ハックを使用していると、リストを試していると思います。 BrianとYihuiに感謝します。 – Gregory

+1

ソリューションの更新:私はちょうど問題があり、それらを手動でフォーマットすることがわかっている塊で整頓しています。それは本当にうまくいく。 – Gregory

2

他の解決策は、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." 

残念ながら、私は、これはきちんとして動作するかどうかわかりませんが、それはknitrのHTML出力に非常に適しています。

1

この回答は当事者には少し遅れていますが、私はtidy.opts = list(width.cutoff = 60)を初期のチャンク(RStudioと.Rnwスクリプトを使用)で使用し、さらに各チャンクオプションリストにtidy = TRUEを含めると、オーバーフローまだ行が発生しています。私のオーバーフローラインは、ggplot2プロットを作成するコードのセクションにあります。試行錯誤の結果、行の最後に+の後に改行を追加すると、オーバーフローの問題は発生しないことが判明しました。 LaTeXが作成するPDFに余分な行は表示されません。

関連する問題