R MarkdownでPDF出力【LaTeX】

R
R Markdown
Quarto

レポートでR Markdown、使ってますか?

公開

2024年3月29日

最終更新

2024年6月23日

こんにちは。

大学生、大学院生の方で、Rを使う授業のレポートを作ったりする方はR Markdown使うことが多いかもしれません。

しかし、私の周りではPDF出力で結構困っている人がいたのでここでまとめます。

環境構築、\(\LaTeX\) については詳しく書かないので、そこは他のサイトなどを参照してください。

目標はとりあえずPDFで出力することです。


ターゲット


結論(R Markdown)

事前準備

以下をRのコンソールで実行してください。

R
# TinyTeXパッケージをインストール
# インストール済みの方は省略
install.packages('tinytex')
R
# TinyTeXのインストール
tinytex::install_tinytex()
tinytex::tlmgr_install('ipaex')

フォントであるipaexの部分はharanoajiなど他の選択肢もあります。

R
# bookdownパッケージのインストール(任意)
# インストール済みの方は省略。
install.packages('bookdown')

YAMLヘッダの設定

ヘッダの部分を以下のように変更してください。

---
title: "タイトル"
author: "筆者"
date: 2024-06-23
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ファイルが出力されるはずです!

結論(Quarto)

事前準備

R Markdownと同じです。

YAMLヘッダ

---
title: "タイトル"
author: "筆者"
date: 2024-06-23
format: 
  pdf: 
    documentclass: article
    keep-tex: true
    include-in-header: 
      - text: | 
          \usepackage{bookmark} 
          \usepackage{xltxtra} 
          \usepackage{zxjatype} 
          \usepackage[ipaex]{zxjafont} 
number-sections: true
---

やっていることはほとんどR Markdownの場合と同じですが、書き方は異なります。

詳細

Global Options

後々困らないよう設定を行います。

  1. 上部にあるToolsからGlobal Options...Sweaveと進む

  2. Typeset LaTeX into PDF usingXeLaTeXに変更

  3. Use tinytex when compiling .tex filesにチェック

これで前述の設定と整合的になります。また、プロジェクトオプションの方も変更を求められるかもしれません。それにも従って、ここでの設定と整合的になるよう変更してください。

bookdown::pdf_document2

R Markdownのヘッダにおいて、pdf_documentではなくbookdown::pdf_document2を使用するのには理由があります。

それは相互参照を使うためです。

例えば、

plot(cars)
図 1: データのプロット

このプロットを、文中で引用したいとします。

「図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 です。あるはずなんですけどね…。

<対処法>

  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")3 を試してみろと出る場合があります。これに従って、TinyTeX を再インストールしてください。

    • 時間は少しかかりますが、最新のバージョンにアップデート可能です。

    • TinyTeX を初インストールした直後でも効果があった例があるので、1と2でできなかった場合はぜひ再インストールしてみてください。

おわりに

レポートでしたら相互参照はそこまで使用頻度が高くないかもしれませんが、卒論や修論では役に立つと思います。

とりあえずPDF出力したい方、ご参考まで!

間違いや新たなエラー等ありましたら、コメントもよろしくお願いいたします。

参考

追記

2024/5/6:「よくあるエラーについて」を追加

  1. 他の部分はチャンクオプションと呼ばれるものですが、今回は触れません。↩︎

  2. ちなみにQuartoでは、チャンク名をfig-hogehogetbl-hogehogeなどにすれば、@fig-hogehoge@tbl-hogehogeだけで簡単に引用できます↩︎

  3. illinois の部分は異なるかもしれません。↩︎