15 出力形式による表現の限界

15.1 HTMLとPDFで処理を場合分けする

出力方法で言えば, HTML と PDF に大別できる. Rmdは HTMLタグも LaTeX コマンドも受け付けるが, それぞれ HTML と PDF に変換する際にしか反映できない. よって, 例えば複雑な図表を LaTeX コマンドでじかに Rmd ファイルに書いてしまった場合, HTML では表示されない.

紙媒体と電子媒体では表現できることに差がある. 例えば紙はあらゆる環境で同じような見た目になるが, ハイパーリンクは付けられないし, 一度出版してしまうと修正は容易ではない. PDF の見た目も読者の環境に依存しにくいが, やはり更新が容易ではない.

bookdown には既に印刷された本の中身を書き換えるする機能はないが, 出力ごとに内容を変えることで, PDF にのみ更新履歴を表示することはできる.

knitr::is_latex_output(), knitr::is_html_output() などは, knit 時にどの媒体への変換処理なのかを判定するのに使える. rmdja::ruby() もこの機能を利用しているし, 本文中の LaTeX のロゴも HTML と PDF で使い分けている.

また, _bookdown.yml の設定, rmd_files は, 媒体別に設定することができる.

rmd_files:
  html:
    - index.Rmd
    - html-only.Rmd
  latex:
    - index.Rmd
    - latex-only.Rmd

15.2 絵文字の出力

絵文字をHTMLでもPDFでも出力したい場合, \coloremoji{⛄} のように絵文字を囲む. ただし, RStudio のエディタは一部のマルチバイト文字の表示に対応していないので予期せぬ不具合に注意する.

現在の主要Webブラウザでは, 特に設定せずとも Unicode 絵文字をカラー画像に置き換えて表示できるものが多い. しかし PDF 生成時には明示的にフォントを指定するか, 画像に置き換える記述が必要である. その実現のため bxcoloremoji という LaTeX パッケージ30を利用する. このパッケージは CTAN に登録されていないため, 別途インストールする必要がある.

15.3 画像の保存形式

技術文書での画像の多くはプロットなど単純な図形なので, 写真などを掲載するのでない限り, PDF で出力する場合はプロット画像も PDF にするのが望ましい. JPG や PNG などのラスタ画像では拡大すると粗くなるが, PDF などのベクタ画像ならば拡大しても粗くならず, かつ単純な図形ならばはファイルサイズも小さく済むことが多い. 一方で HTML は通常 Webブラウザで閲覧するため, PDF に対応していないことが多い. HTML でベクタ画像を掲載したい場合は SVG 形式 で出力する.

R による SVG への出力は, 従来組み込みの SVG() で行うことが多かったが, 近年は新たなパッケージが出ている. 有力なのは svglitersvg である.

https://oku.edu.mie-u.ac.jp/~okumura/stat/svg.html

rsvg のほうが高性能だが, knitr で対応しているのは svglite なので簡単に使いたいならこちらを推奨する.

15.4 デフォルトの保存形式

デフォルトでは, PDF は cairo_pdf, HTML では解像度を高めに設定した PNG を使用している. これは, 件数の多い散布図など, ベクタ形式ではファイルサイズが大きくなりすぎる場合もありうるための判断である.

画像形式を変更したい場合は, チャンクオプションの dev で, オプションは dev.args=list(...) で変更できる.

https://bookdown.org/yihui/rmarkdown-cookbook/graphical-device.html