Quarto & R MarkdownでPDF出力【LaTeX】

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

R
R Markdown
Quarto
LaTeX
公開

2024年3月29日

最終更新

2024年11月12日

はじめに

こんにちは。

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

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

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

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


ターゲット

  • Rの経験が浅く R Markdown や Quarto に馴染みがない方

  • R Markdown を使っているが、PDF 出力の仕方に困っている方


結論(R Markdown)

事前準備

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

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

YAMLヘッダの設定

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

---
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 ファイルが出力されるはずです!

結論(Quarto)

事前準備

R Markdown と同じです。

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 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:「よくあるエラーについて」を追加

2024/7/8:Quarto における YAML ヘッダを更新

  1. 他の部分はチャンクオプションと呼ばれるものですが、今回は触れません。チャンクオプションについてはこちらをご覧ください。↩︎

  2. ちなみに Quarto では、チャンク名を fig-hogehogetbl-hogehoge などにすれば、@fig-hogehoge@tbl-hogehoge だけで簡単に引用できます。Quarto での相互参照についてはこちらをご覧ください。↩︎

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