5 相互参照と引用
5.1 相互参照
5.1.1 図表や式へのアンカーリンク
図, 表, 式などに番号を自動で割り当て, さらにハイパーリンクを付加できる. \@ref(ID)
を使う. 現状では refstyle
や prettyref
のように接頭語を自動で付けてくれないが, そのうちなんとかなるかもしれない.
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
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行空けて宣言する必要がある.
この参照は一度しか使えない.
PDF での表示では, 図 5.1 のキャプションの外側が文字化けしていることだろう. これは絵文字出力に関する問題で, 別のセクションで解説する.
これはかなり強力で,
- 定義される前の行にも適用される
- チャンクオプションだけでなく出力結果にも適用される
という仕様である.
TODO: 自己言及的な文章は書かないならこれくらいの認識でいいだろうが, より正確な話はどうするか
5.2 文献引用
YAMLフロントマターの biblography:
に文献管理ファイル (.bib
, .json
等) を指定することで, ファイルに含まれる文献への参照が可能になる. @引用ID
で本文に引用を与えられ, 文書に引用した文献の一覧が自動で生成される. また, citr
パッケージにより, RStudio Addins に文献に対応する引用IDを取り出して挿入する機能が追加される.
一方で, この記述が文書においてどのようなスタイルで出力されるかは文献引用を処理するプログラムによって変化する. そのプログラムには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
ならば biblatexoptions
が natbiboptions
に置き換わる.
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
をデフォルトとし, 日本語表示に最低限のスタイルだけを用意している.
item | HTML | 日本語 | 指定名 | 文献ファイル | 文献スタイル | |
---|---|---|---|---|---|---|
pandoc-citeproc
|
TRUE | TRUE | TRUE |
default
|
.json | .csl |
biblatex
|
FALSE | TRUE | TRUE |
biblatex
|
.bib | .bbx/.cbx |
bibtex
|
FALSE | TRUE | FALSE |
natbib
|
.bib/.bibtex | .bst |
簡単なカスタマイズなら CSL editor というWebサービスでできる. しかしあくまでXMLなので, あまり複雑な処理はできないことに注意する.↩︎