rmarkdown
を使用して、同じドキュメント内で縦向きと横向きの両方のレイアウトを持つPDFを生成する方法を疑問に思います。ラテックスを使用するよりも優れている純粋なrmarkdown
オプションがある場合。
次に、小さくて再現可能な例を示します。最初に、この.Rmd
をRStudioでレンダリングする(Knit PDFボタンを押す)と、すべてのページが横長レイアウトのPDFになります。
---
title: "All pages landscape"
output: pdf_document
classoption: landscape
---
```{r}
summary(cars)
```
\newpage
```{r}
summary(cars)
```
次に、ポートレートとランドスケープのレイアウトを組み合わせたドキュメントを作成しようとします。 YAML
の基本的なセットアップは、 'Includes'セクション here に従って行われます。 in_header
ファイル「header.tex」には、knitr
ランドスケープレイアウトに推奨されるパッケージである\usepackage{lscape}
のみが含まれています here 。 .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
どんな助けも大歓迎です。
したがって、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)
```
以前のソリューションに基づいて、次のソリューションは補助header.tex
ファイルを必要としません。すべての内容は.Rmd
ファイルに含まれています。代わりに、LaTeXコマンドはYAMLヘッダーのheader-includes
ブロックで定義されます。詳細は こちら をご覧ください。
また、lscape
LaTeXパッケージを使用すると、ページのコンテンツが回転しますが、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)
```
最も一般的なケース。
3つの条件があります。
各条件に絞り込みましょう。
1つ目は、次のコードで始まるマークダウンドキュメントがあるとします。これは、rmdファイルを作成するときのRstudioのデフォルト設定です。編むとき。間違いなくポートレートモードであると自動的に想定されます。
title: "Landscape and Portrait"
author: "Jung-Han Wang"
date: "Thursday, March 19, 2015"
output: pdf_document
PDFファイルを横長モードに編む場合、追加する必要があるのはclassoption:landscapeだけです
title: "Landscape and Portrait"
author: "Jung-Han Wang"
date: "Thursday, March 19, 2015"
output: pdf_document
classoption: landscape
両方を混在させる場合は、YAMLに.texファイルを追加する必要があります。上記のリンクを参照することにより。こちらから.texコードをダウンロードできます。 http://goo.gl/cptOqg または、単にコードをコピーしてheader.texとして保存するだけです。その後、作業を楽にするために、この.texファイルをrmdファイルと一緒に編みます。次の2つのことを確認してください。texファイルをコピーし、rmdファイルと一緒に移動します。 rmdの先頭を次のように変更します。
title: "Landscape and Portrait"
author: "Jung-Han Wang"
date: "Thursday, March 19, 2015"
output:
pdf_document:
includes:
in_header: header.tex
これは、私がこの問題で遊んだ後の要約であり、主にバプテストの答えから恩恵を受けました。
ブロガーにスナップショットとサンプルをいくつか含めました my blogger 。
お役に立てれば。幸運を。
Baptisteが述べたように、RコマンドをLaTeX環境内で囲むと、pandocはそれらを解析せず、生成されたLaTeXにそのまま配置します。これがエラーの原因です。 baptisteのナイスでシンプルな修正に加えて、xtable
Rパッケージを使用できます。これにより、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)
```
2番目のテーブルは、通常の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(...
部分で生成するだけで、出力をキャプチャし、table
で「手動で」囲む必要があります。 rotatebox
コマンド。pandocがそれらをLaTeX環境として認識しないように、すべてを文字列R出力に変換します。純粋なrmarkdownソリューションの場合...幸運を!