plot(cars)

fixes パッケージがCRANに公開されました!
レポートでR Markdown、使ってますか?
2024年3月29日
2024年11月12日
こんにちは。
大学生、大学院生の方で、R を使う授業のレポートを作ったりする方は R Markdown 使うことが多いかもしれません。
しかし、私の周りでは PDF 出力で結構困っている人がいたのでここでまとめます。
環境構築、\(\LaTeX\) については詳しく書かないので、そこは他のサイトなどを参照してください。
目標はとりあえず PDF で出力することです。
ターゲット
Rの経験が浅く R Markdown や Quarto に馴染みがない方
R Markdown を使っているが、PDF 出力の仕方に困っている方
以下を R のコンソールで実行してください。
ヘッダの部分を以下のように変更してください。
---
title: "タイトル"
author: "筆者"
date: 2024-12-24
output:
bookdown::pdf_document2:
latex_engine: xelatex
toc: false
number_section: true
keep_tex: true
header-includes:
- \usepackage{bookmark}
- \usepackage{xltxtra}
- \usepackage{zxjatype}
- \usepackage[ipaex]{zxjafont}
---
bookdown::pdf_document2
の部分は pdf_document
でもいけます(後述)。 以上を設定出来たら、knit してください。 無事 PDF ファイルが出力されるはずです!
R Markdown と同じです。
---
title: "タイトル"
author: "著者"
date: 2024-07-08
date-format: "YYYY年M月D日"
format:
pdf:
documentclass: article
number-sections: true
include-in-header:
- text: |
\usepackage{zxjatype}
\usepackage[ipaex]{zxjafont}
execute:
echo: false
warning: false
language:
crossref-fig-title: "図"
crossref-tbl-title: "表"
crossref-eq-prefix: "式"
---
やっていることはほとんど R Markdown の場合と同じですが、書き方は異なります。
後々困らないよう設定を行います。
上部にある Tools
から Global Options...
→ Sweave
と進む
Typeset LaTeX into PDF using
を XeLaTeX
に変更
Use tinytex when compiling .tex files
にチェック
これで前述の設定と整合的になります。また、プロジェクトオプションの方も変更を求められるかもしれません。それにも従って、ここでの設定と整合的になるよう変更してください。
R Markdown のヘッダにおいて、pdf_document
ではなく bookdown::pdf_document2
を使用するのには理由があります。
それは相互参照を使うためです。
例えば、
このプロットを、文中で引用したいとします。
「図1:データのプロット」などと書き、「図1から~」と引用していたとすると、その前に別の図を入れる必要が出てきた場合に、全て1つずつ変更していくのは手間がかかります。
そこで相互参照を用いれば、自動で番号を振って、自由に引用できるようになるわけです。
以下はR Markdown クックブックから引用したサンプルコードです。
図 \@ref(fig:cars-plot) を見よ.
```{r cars-plot, fig.cap="自動車のデータ", echo=FALSE}
par(mar = c(4, 4, .2, .1))
plot(cars) # a scatterplot
```
次に数式\@ref(eq:mean) を見よ.
\begin{equation}
\bar{X} = \frac{\sum_{i=1}^n X_i}{n} (\#eq:mean)
\end{equation}
さらに表 \@ref(tab:mtcars) を見よ.
```{r mtcars, echo=FALSE}
knitr::kable(mtcars[1:5, 1:5], caption = "mtcars データ")
```
{r cars-plot, fig.cap="自動車のデータ", echo=FALSE}
の cars-plot
の部分がチャンク名です1。 同様に mtcars
もチャンク名なわけですが、\@ref()
を用いれば該当する図や表、数式を引用できます。
先ほどのプロットを \@ref()
を使って引用してみると、図 1 となるわけです2。
注意点は、\@ref()
の中で図ならfig:
、表ならtab:
、数式ならeq:
と始めないと引用できない点です。
TinyTeX はコンパイルに必要なパッケージを自動でインストールしてくれるのが魅力ですが、よくエラーに直面します。
ここではよくあるエラーとして、「パッケージ見つからないエラー」を取り上げます。
多分これがエラーの中で一番多いと思います。私自身も何回も遭遇しました。
例えば以下のようなエラーです。
finding package for bookmark.sty
ERROR:
compilation failed- no matching packages
LaTeX Error: File `bookmark.sty' not found.
not found です。あるはずなんですけどね…。
<対処法>
tinytex::tlmgr_install("パッケージ名")
で見つからないパッケージのみ別でインストール
上の例で言えば、bookmark.sty
のみをインストールするということです。
この際注意点として、.sty
は抜いてください。tinytex::tlmgr_install("bookmark")
とする、ということです。
tinytex::tlmgr_update()
を実行
TinyTeX の再インストール
現状最有力の方法です。
tinytex::tlmgr_update()
を実行した際、コンソールに tinytex::reinstall_tinytex(repository="illinois")
3 を試してみろと出る場合があります。これに従って、TinyTeX を再インストールしてください。
時間は少しかかりますが、最新のバージョンにアップデート可能です。
TinyTeX を初インストールした直後でも効果があった例があるので、1と2でできなかった場合はぜひ再インストールしてみてください。
レポートでしたら相互参照はそこまで使用頻度が高くないかもしれませんが、卒論や修論では役に立つと思います。
とりあえずPDF出力したい方、ご参考まで!
間違いや新たなエラー等ありましたら、コメントもよろしくお願いいたします。
2024/5/6:「よくあるエラーについて」を追加
2024/7/8:Quarto における YAML ヘッダを更新
---
title: "Quarto & R MarkdownでPDF出力【LaTeX】"
description: |
レポートでR Markdown、使ってますか?
date: 2024-03-29
date-modified: last-modified
categories:
- R
- R Markdown
- Quarto
- LaTeX
---
## はじめに
こんにちは。
大学生、大学院生の方で、R を使う授業のレポートを作ったりする方は R Markdown 使うことが多いかもしれません。
しかし、私の周りでは PDF 出力で結構困っている人がいたのでここでまとめます。
環境構築、$\LaTeX$ については詳しく書かないので、そこは他のサイトなどを参照してください。
目標は**とりあえず PDF で出力すること**です。
<br>
**ターゲット**
- Rの経験が浅く R Markdown や Quarto に馴染みがない方
- R Markdown を使っているが、PDF 出力の仕方に困っている方
<br>
## 結論(R Markdown)
### 事前準備
以下を R のコンソールで実行してください。
```{.r filename="TinyTeXパッケージをインストール"}
# インストール済みの方は省略
install.packages("tinytex")
```
```{.r filename="TinyTeXのインストール"}
tinytex::install_tinytex()
```
```{.r filename="bookdownパッケージのインストール"}
# インストール済みの方は省略
install.packages("bookdown")
```
### YAMLヘッダの設定
ヘッダの部分を以下のように変更してください。
```{.yaml}
---
title: "タイトル"
author: "筆者"
date: `r Sys.Date()`
output:
bookdown::pdf_document2:
latex_engine: xelatex
toc: false
number_section: true
keep_tex: true
header-includes:
- \usepackage{bookmark}
- \usepackage{xltxtra}
- \usepackage{zxjatype}
- \usepackage[ipaex]{zxjafont}
---
```
`bookdown::pdf_document2` の部分は `pdf_document` でもいけます([後述](#sec-bookdown))。
以上を設定出来たら、knit してください。
無事 PDF ファイルが出力されるはずです!
## 結論(Quarto)
### 事前準備
[R Markdown](#事前準備) と同じです。
### YAML ヘッダ
```{.yaml}
---
title: "タイトル"
author: "著者"
date: 2024-07-08
date-format: "YYYY年M月D日"
format:
pdf:
documentclass: article
number-sections: true
include-in-header:
- text: |
\usepackage{zxjatype}
\usepackage[ipaex]{zxjafont}
execute:
echo: false
warning: false
language:
crossref-fig-title: "図"
crossref-tbl-title: "表"
crossref-eq-prefix: "式"
---
```
やっていることはほとんど R Markdown の場合と同じですが、書き方は異なります。
## 詳細
### Global Options
後々困らないよう設定を行います。
1. 上部にある `Tools` から `Global Options...` → `Sweave` と進む
2. `Typeset LaTeX into PDF using` を `XeLaTeX` に変更
3. `Use tinytex when compiling .tex files` にチェック
これで前述の設定と整合的になります。また、プロジェクトオプションの方も変更を求められるかもしれません。それにも従って、ここでの設定と整合的になるよう変更してください。
### bookdown::pdf_document2 {#sec-bookdown}
R Markdown のヘッダにおいて、`pdf_document` ではなく `bookdown::pdf_document2` を使用するのには理由があります。
それは**相互参照を使うため**です。
例えば、
```{r}
#| label: fig-plot-cars
#| fig-cap: "データのプロット"
plot(cars)
```
このプロットを、文中で引用したいとします。
「図1:データのプロット」などと書き、「図1から~」と引用していたとすると、その前に別の図を入れる必要が出てきた場合に、全て1つずつ変更していくのは手間がかかります。
そこで相互参照を用いれば、自動で番号を振って、自由に引用できるようになるわけです。
以下は[R Markdown クックブック](https://gedevan-aleksizde.github.io/rmarkdown-cookbook/cross-ref.html)から引用したサンプルコードです。
````{.markdown}
図 \@ref(fig:cars-plot) を見よ.
```{r cars-plot, fig.cap="自動車のデータ", echo=FALSE}
par(mar = c(4, 4, .2, .1))
plot(cars) # a scatterplot
```
次に数式\@ref(eq:mean) を見よ.
\begin{equation}
\bar{X} = \frac{\sum_{i=1}^n X_i}{n} (\#eq:mean)
\end{equation}
さらに表 \@ref(tab:mtcars) を見よ.
```{r mtcars, echo=FALSE}
knitr::kable(mtcars[1:5, 1:5], caption = "mtcars データ")
```
````
`{r cars-plot, fig.cap="自動車のデータ", echo=FALSE}` の `cars-plot` の部分がチャンク名です^[他の部分はチャンクオプションと呼ばれるものですが、今回は触れません。チャンクオプションについては[こちら](../240509_chunk_option/index.html)をご覧ください。]。
同様に `mtcars` もチャンク名なわけですが、`\@ref()` を用いれば該当する図や表、数式を引用できます。
先ほどのプロットを `\@ref()` を使って引用してみると、@fig-plot-cars となるわけです^[ちなみに Quarto では、チャンク名を `fig-hogehoge` や `tbl-hogehoge` などにすれば、`@fig-hogehoge` や `@tbl-hogehoge` だけで簡単に引用できます。Quarto での相互参照については[こちら](../240509_cross_reference/index.html)をご覧ください。]。
注意点は、`\@ref()`の中で図なら`fig:`、表なら`tab:`、数式なら`eq:`と始めないと引用できない点です。
## よくあるエラーについて
TinyTeX はコンパイルに必要なパッケージを自動でインストールしてくれるのが魅力ですが、よくエラーに直面します。
ここではよくあるエラーとして、「パッケージ見つからないエラー」を取り上げます。
### パッケージが見つからないエラー
多分これがエラーの中で一番多いと思います。私自身も何回も遭遇しました。
例えば以下のようなエラーです。
````{.markdown}
finding package for bookmark.sty
ERROR:
compilation failed- no matching packages
LaTeX Error: File `bookmark.sty' not found.
````
not found です。あるはずなんですけどね…。
<対処法>
1. `tinytex::tlmgr_install("パッケージ名")` で見つからないパッケージのみ別でインストール
- 上の例で言えば、`bookmark.sty` のみをインストールするということです。
- この際注意点として、`.sty` は抜いてください。`tinytex::tlmgr_install("bookmark")` とする、ということです。
2. `tinytex::tlmgr_update()` を実行
- 既存のパッケージをアップデートする方法です。
3. TinyTeX の再インストール
- 現状最有力の方法です。
- `tinytex::tlmgr_update()` を実行した際、コンソールに `tinytex::reinstall_tinytex(repository="illinois")`^[`illinois` の部分は異なるかもしれません。] を試してみろと出る場合があります。これに従って、TinyTeX を再インストールしてください。
- 時間は少しかかりますが、最新のバージョンにアップデート可能です。
- TinyTeX を初インストールした直後でも効果があった例があるので、1と2でできなかった場合はぜひ再インストールしてみてください。
## おわりに
レポートでしたら相互参照はそこまで使用頻度が高くないかもしれませんが、卒論や修論では役に立つと思います。
とりあえずPDF出力したい方、ご参考まで!
間違いや新たなエラー等ありましたら、コメントもよろしくお願いいたします。
## 参考
:::{.callout-tip appearance="minimal"}
[R Markdown クックブック](https://gedevan-aleksizde.github.io/rmarkdown-cookbook/)
:::
:::{.callout-tip appearance="minimal"}
[Quarto 公式ガイド](https://quarto.org/docs/guide/)
:::
:::{.callout-tip appearance="minimal"}
[私たちのR](https://www.jaysong.net/RBook/)
:::
## 追記
2024/5/6:「よくあるエラーについて」を追加
2024/7/8:Quarto における YAML ヘッダを更新