2013-02-15 2 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 측에서 가장 좋은 해결책 일 수 있습니다. 그것은 쉬운 문제인 것처럼 보이지만 실제로는 정말로 어렵습니다. 또 다른 해결책은 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

이 답변은 당사자에게 조금 늦었지만 초기 청크 (RStudio 및 .Rnw 스크립트 사용)에서 tidy.opts = list(width.cutoff = 60)을 사용한 다음 각 청크 옵션 목록에 tidy = TRUE을 포함하는 경우에도 오버플로 라인의 여전히 발생합니다. 오버플로 선은 ggplot2 플롯을 만드는 코드 섹션에 있습니다. 시험판과 오류는 행 끝에 + 문자 다음에 캐리지 리턴을 추가하면 오버플로 문제가 없음을 발견했습니다. LaTeX가 생성하는 PDF에는 추가 행이 표시되지 않습니다.

관련 문제