5 相互参照と引用

5.1 相互参照

5.1.1 図表や式へのアンカーリンク

図, 表, 式などに番号を自動で割り当て, さらにハイパーリンクを付加できる. \@ref(ID) を使う. 現状では refstyleprettyref のように接頭語を自動で付けてくれないが, そのうちなんとかなるかもしれない.

bookdown の相互参照は, LaTeX の prettyref.sty のように, 接頭語:参照ID という記法になる. 参照IDは通常, チャンクIDと同じである. 既に紹介したように, 数式参照の接頭語は eq で, 定理は thm である. 図表は fig, tab. その他の接頭語は BKD Ch. 2.2 Markdown extensions by bookdown を参考に.

5.1.2 表への相互参照

Markdown 記法で表を書く場合, 以下のように Table: の直後にラベルを記入する (表 5.1).

Table: (\#tab:tab-md) Markdown 記法の表

 Sepal.Length   Sepal.Width   Petal.Length   Petal.Width
-------------  ------------  -------------  ------------
          5.1           3.5            1.4           0.2
          4.9           3.0            1.4           0.2
          4.7           3.2            1.3           0.2
          4.6           3.1            1.5           0.2
          5.0           3.6            1.4           0.2
          5.4           3.9            1.7           0.4
表 5.1: Markdown 記法の表
Sepal.Length Sepal.Width Petal.Length Petal.Width
5.1 3.5 1.4 0.2
4.9 3.0 1.4 0.2
4.7 3.2 1.3 0.2
4.6 3.1 1.5 0.2
5.0 3.6 1.4 0.2
5.4 3.9 1.7 0.4

5.1.3 章への相互参照

章見出しへの相互参照も可能である. これはPandocの機能を利用しているため, 接頭辞は不要である. Pandocの仕様により欧文であればタイトルがそのまま参照IDとなるが, 非欧文の文字に対して適用されないため, 基本的に日本語文書の場合は参照したい章の見出しの後にスペースを入れて {#参照ID} と書く必要がある. そして本文中で参照する場合 \@ref(参照ID) と表記する.

5.1.4 特殊な相互参照

チャンクオプションの fig.cap などに TeX 数式を書いても正しく表示できない. そのような場合は ref 参照を使う. (ref:figcap1) \coloremoji{🌸} $\sum \oint \mathfrak{A} \mathscr{B} \mathbb{C}$ \coloremoji{🌸} と書くと, 図 5.1 のキャプションにも特殊な記号が使える.

なお, 複数指定する場合は連続させず, 改行で1行空けて宣言する必要がある.

🌸 \(\sum \oint \mathfrak{A} \mathscr{B} \mathbb{C}\) 🌸

図 5.1: 🌸 \(\sum \oint \mathfrak{A} \mathscr{B} \mathbb{C}\) 🌸

この参照は一度しか使えない.

PDF での表示では, 図 5.1 のキャプションの外側が文字化けしていることだろう. これは絵文字出力に関する問題で, 別のセクションで解説する.

これはかなり強力で,

  1. 定義される前の行にも適用される
  2. チャンクオプションだけでなく出力結果にも適用される

という仕様である.

TODO: 自己言及的な文章は書かないならこれくらいの認識でいいだろうが, より正確な話はどうするか

5.2 文献引用

YAMLフロントマターの biblography: に文献管理ファイル (.bib, .json 等) を指定することで, ファイルに含まれる文献への参照が可能になる. @引用ID で本文に引用を与えられ, 文書に引用した文献の一覧が自動で生成される. また, citr パッケージにより, RStudio Addins に文献に対応する引用IDを取り出して挿入する機能が追加される.

knitr::include_graphics(file.path(img_dir, "citr.png"))
citr パッケージの例

図 5.2: citr パッケージの例

一方で, この記述が文書においてどのようなスタイルで出力されるかは文献引用を処理するプログラムによって変化する. そのプログラムには3つの候補がある. R Markdown の文献引用は pandoc を経由して処理され, 現時点では pandoc-citeproc (default), BibTeX (natbib), BibLaTeX (biblatex) の選択をサポートしている. pandoc-citeproc 以外はもともと LaTeX 用に作られたため, HTML では常に pandoc-citeproc で処理される. PDF ではそれに加えて bibtex, biblatex を指定することもできる. (default とは別なのでややこしいが) rmdja はデフォルトでは PDF 出力時に biblatex を使用する. これはフォーマット引数の citation_package で変更できる. 正確には以下の3つの値のどれかを指定する.

  • default: pandoc-citeproc を使用する.
  • biblatex: BibLaTeX を使用する. デフォルト. スタイルのデフォルトはこちらが用意した jauthoryear というもの.
  • natbib: BibTeX を使用し, 本文中の参照には natbib.sty が使われる[^natbib-contraint]. ただし, 日本語 (マルチバイト文字) の含まれる文献情報を出力する場合は特殊な設定をしないと製本処理がハングアップする (後述).

5.2.1 文献引用スタイルのカスタマイズ

rmdja では, 本文中の引用トークンのデフォルト設定を, 文書タイプでは「著者-年」形式に, スライドでは番号形式にしている. このカスタマイズについて簡単な解説をする. 従来の R Markdown ではカスタマイズに以下のようなYAMLフロントマター項目を使っていた.

  • biblio-style: PDF用スタイルファイル
  • natbiboptions/biblatexoptions: それぞれ natbib または biblatex を使う場合のスタイルに関するオプション
  • csl: CSL用スタイルファイル , biblio-title: 「参考文献」タイトルの文字列

このうち biblio-style, natbiboptions, biblatexoptions はフォーマット関数で指定する. 例えば以下のように.

output:
  rmdja::pdf_book_ja:
    citation_package: biblatex
    citation_options:
      - style=jauthoryear
      - natbib=true

これは pandoc の記法を利用した従来のR Markdown で以下のように書いているのと同様であり, citation_package: natbib ならば biblatexoptionsnatbiboptions に置き換わる.

output:
  ....:
    citation_package: natbib
biblio-style: jauthoryear
biblatexoptions:
  - natbib=true

2通りの記法が存在するのはやや混乱するかもしれないが, 後方互換性を考慮し rmdja ではこれらの2通りの記法どちらでも受け付けるようにしている.

biblatex 以外のエンジンで出力したい, 例えば指定された .bst のスタイルで文献一覧を出力したい場合は, (u)pBibTeX が必要になる. その操作の詳細は 10 章を参照.

5.2.2 文献リスト生成エンジンの違いについて

pandoc-citeproc, bibtex, biblatex はそれぞれ引用文献リストのスタイルを記述するファイルがあり, それぞれ拡張子は .csl, .bst, .bbx/.cbx, である. .csl は MS Word のスタイルと同じもので, XMLで記述されている13. .bst は BibTeX 用のフォーマットで, 自分で改造するには逆ポーランド記法の構文に慣れねばならない. そして BibLaTeX はスタイルを LaTeX のマクロで記述でき, さらにそういった細かい記述のスタイルファイルを用意しなくとも指定できるオプションがいくつか存在する(ここまで, 表 5.2).

現バージョンでは biblatex がデフォルトである. 現在の日本語圏の LaTeX 使用者にとっては .bst ファイルの種類が充実しているため natbib を使いたいところだが, R Markdown の場合エンジンが BibTeX であるため日本語が使えない. (u)pBibTeX を使うにはやや複雑な手順が必要である. よって, デフォルトでそのような下準備をさせるべきでないと考えたので rmdja では biblatex をデフォルトとし, 日本語表示に最低限のスタイルだけを用意している.

表 5.2: 引用プログラムごとの違い
item HTML PDF 日本語 指定名 文献ファイル 文献スタイル
pandoc-citeproc TRUE TRUE TRUE default .json .csl
biblatex FALSE TRUE TRUE biblatex .bib .bbx/.cbx
bibtex FALSE TRUE FALSE natbib .bib/.bibtex .bst

  1. 簡単なカスタマイズなら CSL editor というWebサービスでできる. しかしあくまでXMLなので, あまり複雑な処理はできないことに注意する.↩︎