13 PDF の文書クラス

HTMLは利用者側が見え方をある程度カスタマイズできる. かつて存在した Evernote Clearly やカスタム CSS を使って. そのぶんPDFは作成者側がよりレイアウトに注意を払うことになるだろう. 本稿では文章の区切りを章立てにしている. しかし PDF 数十ページしかない文書を大きな文字サイズの見出しで区切るのは少しものものしい感じがする. YAML フロントマターを変更すれば, トップレベルの見出しを変更できる.

pdf book in Japanese は “book” ということで書籍の組版をデフォルト設定にしている. もう少し小規模な文書ならば, レポート論文記事形式のほうが良いかもしれない. 例えば, 以下のように指定する.

documentclass: bxjsreport

documentclass には LaTeX の文書クラスファイル (.cls) ならなんでも与えることができるが, または で日本語文書を作成することを想定しているため, 以下2種類の BXjscls の文書クラス25の中から選ぶとよい. デフォルトは bxjsbook なので, これは明示的に指定する必要はない.

  • bxjsbook
  • bxjsreport

このうち, bxjsbookpdf book in Japanese のデフォルト設定となっている. rmdja::texlogo("LaTeX") の文書クラスは, 行間や見出しのレイアウトなどを日本語文書に準じたものにするが, それ以外の細かい調整は _output.yml_bookdown.yml の設定を書き換えて調整する. それでも不十分な場合は, .tex ファイルやpandocテンプレートを直接編集したり, 追加のスタイルファイルを読み込んだりするしかない.

しかし, おそらくはこういった細かい調整が必要になることはすくないだろう. 以降では, rmdja が用意しているプレゼンテーションや論文形式のテンプレートを紹介する.

13.1 プレゼンテーション資料の作成

beamer_presentation_jarmdja の最初期からあったフォーマットで, そもそも当初はこれを作るのが目的だった. このフォーマットは Beamer を使用してプレゼンテーション用スライドをPDFファイルで作成する. Beamer は rmdja::texlogo("LaTeX") の文書クラスの1つで, rmarkdown::beamer_presentation はこれを利用しているが, 例によって日本語表示は想定されていないため, そのためのもろもろの調整込みのラッパーフォーマットである. ただしスライド資料なので組版の禁則処理のような細かい調整は用意していない. rmdjaではスライドはPDF以外の出力は不可能である26.

通常の文書と違い, デザインを決めるのは主に theme である. デフォルトでは metropolis27 である. 日本語表示のために調整してあるものの, 日本語表示と直接関係ない部分はカスタマイズの余地としていじっていないが, テンプレートには私の好みが反映された調整 (プログレスバーの位置調整) がYAMLフロントマターに直接書き込まれている.

また, 日本語表示と直接関係ないアレンジとして,デフォルトの 文献引用のスタイルが変更される.

  1. 本文での引用スタイルは番号形式 (biblatex の場合は citestyle=numeric, natbib の場合は numeric オプション).
  2. 「参考文献」というセクションタイトルのみのスライドが冒頭に自動で挿入される
  3. 引用された文献の数に応じてフレームが自動分割される
  4. これらの参考文献フレームでは上部のタイトルが表示されない
  5. 文字サイズが脚注サイズに縮小

という設定になっている. 通常のプレゼンテーションでは大量の参考文献を読み上げることは少ないという想定で, 紙面の限られたスライドに参考文献のみ羅列したスライドでページ数が増えないように考慮したためこうした. これは既に作成した my_latex_templates のテンプレートとほぼ同じである.

さらに, Beamer テンプレート特有の設定をいくつか紹介する.

  • プログラムはデフォルトで非表示 (echo=F)
  • 出力する画像の大きさ fig_width, fig_height は beamer のデフォルトの大きさに連動している. そして out_width, out_height はいずれも "100%" にしているため, 概ね beamer の画面と同じ大きさになる.
  • プログラムに行番号を表示する code_rownumberFALSE にしている
  • テーマは metropolis を使っているが, 昔ながらのテーマも可能である. 昔からあるテーマの比較には Beamer Theme Matrix というページが便利である. 他にも近年登場したテーマがいくつか存在するが, 日本語をうまく表示できなかったり rmdja::texlogo("XeLaTeX")/rmdja::texlogo("LuaLaTeX")に対応していなかったりするものも多い. 他に日本語に対応したテーマとして, sakuratheme が存在する.
  • beamer のアスペクト比はデフォルトで 4:3 であり, YAML フロントマターで指定できる. 例えば 16:9 に変更したい場合
classoption:
  - aspectratio=169

となる. 指定可能なのは 3:2, 4:3, 5:4, 14:1 ,14:9, 16:9, 16:10 で, 上記のようにコロンを抜いて数字のみで指定する. この classoption は LaTeX の文書スタイルに対するオプション全般を与えるためにあるため, (beamer スタイル以外にも) 他にもいろいろ存在する.

詳細はbeamer の公式ドキュメントを参考に.

rmdja の Beamer 用テンプレートの実際の表示例は examples にある.

13.2 (WIP) 卒業論文の作成

卒業論文…というか学術論文での体裁でPDFファイルを作成することも可能である. pdf article in Japanese という名前のテンプレートで論文形式のPDFファイルを用意している — HTML 形式で論文提出を要求するという話は聞いたことがないのでPDFのみ対応している.

書籍形式との違いは,

  • 文書の見出しが 「X章」ではなく「1. YYYY」のようになる (したがって, Rmd ファイルで # で記述した見出しは, PDFではセクションタイトルとなる)
  • 余白のとり方が書籍のように見開きを想定したものでなくなる

など些細である. 実際のところ, 文書テンプレートの設定を少しいじっている程度のことしかしていない. テンプレートを開いて確認すればわかるように,

output:
  rmdja::pdf_book_ja:
    toc: false
    pandoc_args:
      - '--top-level-division=section'
documentclass: bxjsarticle

という設定を追加しているだけである28.

大学によっては論文の体裁が細かく指定されている場合もあるかもしれない. 例えば1ページあたりの行数や, 1行あたりの文字数とか. 例えば1ページあたり50行, 1行あたり40字とする場合, 以下のような設定を追加する. ただし, 行数は図表の挿入などで変動するし, プロポーショナルフォントや字幅の異なる欧文を多用すれば1行あたりの文字数は多くなりうる.

classoptions:
  - 'number-of-lines=50'
  - 'textwidth=40zw'

さらに, カラー印刷が許容されない場合もある. ggplot2scale_*_grey() などでカラーパレットを簡単に変更できる (図 13.1).

ggplot(mutate(mtcars, cyl = factor(cyl)), aes(x = mpg, y = wt,
  color = cyl)) + geom_point() + labs(x = "マイル毎米ガロン",
  y = "重量 (1000ポンド)") + theme_bw() + scale_color_grey() +
  scale_fill_grey()
グレースケールでのプロット

図 13.1: グレースケールでのプロット

13.3 (WIP) 小説の執筆

作家の京極夏彦氏は自分の作品を1ページごとに切り取っても作品として成立するようなレイアウトにこだわっているらしいが, すでに説明したように技術文書や学術論文では図表の配置や改行などにこだわることがあまりない. しかし, 不可能ではない. HTML では難しいが (不可能ではないがHTMLでやるメリットが感じられないので対応する気がない), PDF ではある程度のレイアウトの制御が可能である. ただし, 本当に厳格なJIS準拠の組版にこだわるなら, おそらく tex ソースを直接編集しなければならない.

rmdja で用意されている縦書き文書テンプレート pdf vertical writing in Japanese は, jlreq を利用して29縦書き文書のPDFを作成する(図: 13.2). HTML には未対応である.

縦書き文書の出力例

図 13.2: 縦書き文書の出力例


  1. 詳細はここにあるドキュメント参照: https://www.ctan.org/pkg/bxjscls 但し, スライド用クラスである bxjsslide の使用は想定していない. また, bxjsarticle を使う場合は後述の pdf article in Japanese テンプレートから作成したほうがよい. さらに LuaLaTeX を使用するならば luatex-ja で提供される日本語文書クラスも指定することができるが, あまりつかったことがないためレイアウトに不備があるかもしれない. 以降はPDFファイルで出力できる各形式についてこまかく解説する.↩︎

  2. HTML形式のスライドはサポート対象外である. 日本語文書特有の処理はあまりないということ, 普段と違う環境で表示することの多いであろうスライド資料はなるべく環境に依存しない方法で表示すべきと考えているのが理由である. HTMLでスライドを作成したい場合, 次のページが参考になる: https://kazutan.github.io/SappoRoR6/rmd_slide.html#/↩︎

  3. なお metropolis テーマ開発者は Fira Sans フォントの使用を想定しており, ビルド時にフォントがないという警告が出ることがあるが無視して良い. (参考: https://github.com/matze/mtheme/issues/280)↩︎

  4. このテンプレートでは論文形式のフォーマットとして bxjsarticle を使用している. LuaLaTeX を使用するならば代わりに ltjsarticle クラスも使用可能なはずだが, 私は使ったことがないので説明を省く.↩︎

  5. luatex-ja にも縦書き文書クラス ltjt シリーズが存在するが, 公式ドキュメントにすら詳しい解説がなかったため採用しなかった.↩︎