Rstudio rmarkdown : 하나의 PDF에서 세로 및 가로 레이아웃 모두


84

rmarkdown동일한 문서에서 세로 및 가로 레이아웃이 모두있는 pdf를 생성 하는 데 사용하는 방법이 궁금합니다 . rmarkdown라텍스를 사용하는 것보다 더 나은 순수한 옵션 이 있다면 .

다음은 재현 가능한 작은 예입니다. 먼저 .RmdRStudio에서 렌더링 ( PDF Knit 버튼 누르기)하면 모든 페이지가 가로 레이아웃으로 된 pdf가 생성됩니다.

---
title: "All pages landscape"
output: pdf_document
classoption: landscape
---

```{r}
summary(cars)
```

\newpage
```{r}
summary(cars)
```

그런 다음 세로 및 가로 레이아웃이 혼합 된 문서를 만들려고합니다. 의 기본 설정은 여기YAML 의 '포함'섹션에 따라 수행 됩니다 . in_header파일 'header.tex'는 포함 \usepackage{lscape}, 권장 패키지 knitr가로 레이아웃 여기를 . .tex파일과 같은 디렉토리에 .Rmd파일.

---
title: "Mixing portrait and landscape"
output:
    pdf_document:
        includes:
            in_header: header.tex
---

Portrait:
```{r}
summary(cars)
```

\newpage
\begin{landscape}
Landscape:
```{r}
summary(cars)
```
\end{landscape}

\newpage
More portrait:
```{r}
summary(cars)
```

그러나이 코드는 오류를 발생시킵니다.

# ! You can't use `macro parameter character #' in horizontal mode.
# l.116 #

# pandoc.exe: Error producing PDF from TeX source
# Error: pandoc document conversion failed with error 43

어떤 도움이라도 대단히 감사합니다.

답변:


78

따라서 라텍스 환경의 내용을 구문 분석 pandoc 하지 않지만 파일 의 명령재정 의하여 속일 수 header.tex있습니다.

\usepackage{lscape}
\newcommand{\blandscape}{\begin{landscape}}
\newcommand{\elandscape}{\end{landscape}}

따라서 여기 \begin{landscape}에서 \blandscape, 및 \end{landscape}로 재정의 됩니다 \elandscape. .Rmd파일 에서 새로 정의 된 명령을 사용하면 작동하는 것 같습니다.

---
title: "Mixing portrait and landscape"
output:
    pdf_document:
        includes:
            in_header: header.tex 
---

Portrait
```{r}
summary(cars)
```

\newpage
\blandscape
Landscape
```{r}
summary(cars)
```
\elandscape

\newpage
More portrait
```{r}
summary(cars)
```

조사 해주셔서 감사합니다 (+1). '라텍스 환경의 내용을 구문 분석하지 않음'은 포함 섹션 에서 완전히 명확하지 않습니다 . 그러나 나는 내 latex무지도 책임이 있다고 생각 합니다.
Henrik

4
3/4 개의 다른 플레이어 (knitr-rmarkdown / pandoc-latex)가있는 복잡한 도구 모음이며 문서화 된 내용을 벗어나는 부분이 어디에서 깨 졌는지 파악하기가 매우 어렵습니다. 가장 좋은 방법은 그것들을 독립적으로 실행하는 것 같습니다. 먼저 .md뜨고, 결과를보고 (여기에서 괜찮아요), 그런 다음 md-> tex 변환 (그게 잘못된 곳입니다). 오류 메시지는 이미 다음 단계 (라텍스)이므로 도움이되지 않았습니다.
baptiste dec.

대신 "#Introduction"에 의해 생성 된 헤더의 구성 PDF의 용액,에 의해, # 기호로 표시
JMarcelino

3
멍청한 라텍스 질문 인 것 같아요 : header.tex 파일이 어디에 있는지 (또는 그래야만하는지) 읽어야합니까? 저는 RMarkdown을 많이 사용하지만 비교적 새롭고 모든 연동 패키지와 이들이 어떻게 함께 작동하는지 아직 이해하지 못했습니다.
Mike Williamson

header.tex 파일은 같은 디렉토리에 있어야합니다
baptiste

50

이전 솔루션을 기반으로하는 다음 솔루션에는 보조 header.tex파일이 필요하지 않습니다 . 모든 내용이 .Rmd파일에 포함되어 있습니다. LaTeX 명령은 대신 header-includesYAML 헤더 의 블록에 정의됩니다 . 자세한 정보는 여기 에서 찾을 수 있습니다 .

또한 lscapeLaTeX 패키지 를 사용하면 페이지 내용이 회전하지만 PDF 페이지 자체는 회전하지 않습니다. 이것은 pdflscape패키지를 사용하여 해결 됩니다.

---
title: "Mixing portrait and landscape WITHOUT a header.tex file"
header-includes:
- \usepackage{pdflscape}
- \newcommand{\blandscape}{\begin{landscape}}
- \newcommand{\elandscape}{\end{landscape}}
output: pdf_document
---

Portrait
```{r}
summary(cars)
```

\newpage
\blandscape
Landscape
```{r}
summary(cars)
```
\elandscape

\newpage
More portrait
```{r}
summary(cars)
```

1
내 시스템에서이 솔루션이 작동하지 않습니다. Mac OS_10.13.4에서 R-3.4.4, rmarkdown_1.9, knitr_1.20을 실행하고 있습니다. 문제가 무엇인지 궁금하십니까?
Geochem B

@GeochemB 필수 LaTeX 패키지가 올바르게 설치 되었습니까? 나는 최근에 TinyTeX로 성공을 거두었고 그것을 추천합니다.
Megatron

설치할 때 오류가 발생하지 않았지만 다시 확인하고보고하겠습니다. 주의 해 주셔서 감사합니다. 저는 그것에 대해 생각하지 않았고 PDF / Latex로 출력하는 것이 처음입니다.
Geochem B

@Megatron Tex Live 유틸리티를 살펴보고 Oberdiek 패키지를 설치하고 업데이트했습니다. 따라서 요구 사항은 있지만 여전히 주사위는 없습니다. 위의 코드를 복사 / 붙여 넣기해도 방향은 변경되지 않습니다.
Geochem B

1
@GeochemB이 코드를 사용하여 동일한 문제가 발생했습니다. SumatraPDF v3.1.1과 Adobe Acrobat DC 및 Pro에서 문서를 보았습니다. 문서에서 Oberdeik은 MikTex에 포함되어 있습니다. 내 이해에 따라 MikTex가 설치되어 있으면 pdflscape가 좋습니다. 누군가가 해결책을 얻었는지 궁금합니다.
Patrick

22

가장 일반적인 경우.

3 가지 조건이 있습니다.

  1. 모든 것이 세로 모드입니다.
  2. 모든 것이 가로 모드입니다.
  3. 세로 및 가로 모드의 혼합.

각 조건으로 좁혀 보겠습니다.

  1. 첫 번째는 아래 코드로 시작하는 마크 다운 문서가 있다고 가정합니다. 그리고 이것은 rmd 파일을 만들 때 Rstudio의 기본 설정입니다. 뜨다 할 때. 의심의 여지없이 세로 모드라고 자동으로 가정합니다.

    title: "Landscape and Portrait"
        author: "Jung-Han Wang"
        date: "Thursday, March 19, 2015"
        output: pdf_document
    
  2. PDF 파일을 가로 모드로 짜고 싶을 때 추가해야하는 유일한 것은 classoption : landscape

        title: "Landscape and Portrait"
        author: "Jung-Han Wang"
        date: "Thursday, March 19, 2015"
        output: pdf_document
        classoption: landscape
    
  3. 두 가지를 혼합하려면 YAML에 .tex 파일을 추가해야합니다. 위에서 언급 한 링크를 참조하여. 여기에서 .tex 코드를 다운로드 할 수 있습니다. http://goo.gl/cptOqg 또는 단순히 코드를 복사하여 header.tex로 저장합니다. 그런 다음 편하게 사용할 수 있도록이 .tex 파일을 편성 할 rmd 파일과 함께 넣습니다. 다음 두 가지 작업을 수행했는지 확인하십시오. tex 파일을 복사하고 rmd 파일과 함께 이동하십시오. rmd의 시작을 다음과 같이 변경하십시오.

     title: "Landscape and Portrait"
        author: "Jung-Han Wang"
        date: "Thursday, March 19, 2015"
        output:
          pdf_document:
            includes:
              in_header: header.tex
    

이것은 내가이 문제를 가지고 놀았고 대부분 침례교의 대답으로부터 혜택을받은 후의 요약입니다.

내 블로거 내 블로거 에 몇 가지 스냅 샷과 예제를 포함했습니다 .

도움이 되었기를 바랍니다. 행운을 빕니다.


2
귀하의 접근 방식이 작동합니다. 이해하기 쉽도록 pandoc의 문제점은 매크로 대신 환경을 사용할 때 이상하다는 것입니다. 이것이 제가 제안한대로 헤더 (pdflandscape 패키지)에 \ newcommand {\ blandscape} {\ begin {landscape}} 및 \ newcommand {\ elandscape} {\ end {landscape}}를 포함시킨 이유이며 완벽하게 작동했습니다. 감사!
gvegayon 17:29에

1
위의 단계를 따랐는데 (블로그에서 도움이 되었음) 잘 작동했습니다. 감사!
Scott Worland 2015

4

Baptiste가 언급했듯이 LaTeX 환경 내에 R 명령을 포함하면 pandoc은 명령을 구문 분석하지 않고 생성 된 LaTeX에있는 그대로 배치합니다. 이것이 오류의 원인입니다. Baptiste의 멋지고 간단한 수정 외에도 xtableR 패키지를 사용하여 R 출력에서 ​​더 섹시한 LaTeX 테이블을 생성 할 수 있습니다 . 다음 예제가 작동 \usepackage{rotating}하려면 header.tex파일 에 추가해야 합니다.

---
title: "Mixing portrait and landscape"
output:
    pdf_document:
        keep_tex: true
        includes:
            in_header: header.tex
---
```{r, echo=FALSE}
library(xtable)
```

Portrait
```{r, results='asis', echo=FALSE}
print(xtable(summary(cars), caption="Landscape table"), comment=FALSE)
```

Landscape:
```{r, results='asis', echo=FALSE}
print(xtable(summary(cars), caption="Landscape table"),
      floating.environment="sidewaystable", comment=FALSE)
```

두 번째 표는 sidewaystable평소가 아닌 환경 내에서 인쇄 table되므로 별도의 페이지에 가로 모드로 인쇄됩니다. lscape패키지 또는 sideways환경 에 의해 가로 모드로 배치되는 표와 그림 은 항상 별도의 페이지에 배치됩니다.이 매우 중요한 문서의 91 페이지를 참조하십시오.

http://www.tex.ac.uk/tex-archive/info/epslatex/english/epslatex.pdf

이 작업이 약간 짜증나 기 때문에 동일한 페이지에 세로 및 가로 테이블을 모두 보관할 수있는 방법을 찾았습니다 (프로세스에서 오후 전체를 낭비 함).

---
title: "Mixing portrait and landscape"
output:
    pdf_document:
        keep_tex: true
        includes:
            in_header: header.tex
---
```{r, echo=FALSE}
library(xtable)
```

Portrait:
```{r, results='asis', echo=FALSE}
print(xtable(summary(cars), caption="Portrait table."), comment=FALSE)
```

Landscape:
```{r, results='asis', echo=FALSE}
cat(paste0(
    "\\begin{table}[ht]\\centering\\rotatebox{90}{",
    paste0(capture.output(
      print(xtable(summary(cars)), floating=FALSE, comment=FALSE)),
      collapse="\n"),
    "}\\caption{Landscape table.}\\end{table}"))
```

가로 테이블의 \rotatebox경우 여기에 제공된 제안을 사용했습니다 .

http://en.wikibooks.org/wiki/LaTeX/Rotations

이 작업을 수행하려면 tabular부품이있는 테이블 의 일부만 생성 print(xtable(...한 다음 출력을 캡처하고 tablerotatebox명령 으로 "수동으로"둘러싸고 모든 것을 문자열 R 출력으로 변환하여 pandoc가 보지 않도록해야합니다. LaTeX 환경으로. 순수한 rmarkdown 솔루션을 위해 ... 행운을 빕니다!


이것은이 페이지에서 나를 위해 일한 유일한 것입니다. 감사합니다, Renato!
Stuart
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.