6 (WIP) 簡単なレイアウト・スタイル変更
前章では文書の内容に関する構文を紹介した. ここでは, 文書全体のデザインやスタイルの設定方法のうち, rmdja
が用意している簡単なものを紹介する.
6.1 フォント変更
フォント変更の方法は HTML と PDF で大きく違う. まずは HTMLについて. _output.yml
にはデフォルトのフォントを設定できるが, 選択肢は sans
と serif
しかない.
output: rmdja::gitbook_ja:
config:
fontsettings:
family: serif
しかし HTML は文字通りHTMLで出力しているため, CSS の使い方次第でいくらでもデザインを変えることができる. 例えば自作した CSS ファイルを以下のように指定できる.
output:
output: rmdja::gitbook_ja:
css: ABC.css
PDF を生成する場合, ver 0.3 以降ではデフォルトのフォントファミリを OS に応じて変えている. もし変更したい場合はYAMLフロントマターの以下の項目を変更する
mainfont
: 欧文セリフフォントファミリsansfont
: 欧文サンセリフフォントファミリmonofont
: 等幅フォントファミリ (コードの表示などに使用)jfontpreset
: 和文フォントファミリのプリセットjmainfont
: 和文メインフォントファミリ (一般に明朝体を指定)jsansfont
: 和文セリフフォントファミリ (一般にゴシック体を指定)jmonofont
: 和文等幅フォントファミリ (コードの表示などに使用)
jfontpreset
は zxjafont
または luatex-ja
によるプリセットで, 3種類の和文フォントを一括指定できる. 個別指定したフォントはこれを上書きする. 特にこだわりがないなら一括指定で良いが, ソースコードを多く掲載する場合は M+
や Ricty
などのフォントを用意すると良いだろう. rmdja
ではデフォルトで3種類の和文フォントファミリに対して, OSごとの標準日本語フォントが選択される (図 6.1). いずれも各OSで標準でインストールされているはずであるが, 現時点ではフォントが実際にインストールされているか確認する機能はない.
Mac | Linux | Windows (8以降) | Windows (それ以前) | |
---|---|---|---|---|
XeLaTeX | 游書体 | Noto | 游書体 | MSフォント |
LuaLaTeX | ヒラギノ ProN | Noto | 游書体 | MSフォント |
それ以外で使用可能な主なプリセット名は表 6.2 の通り. これらは XeLaTeX, LuaLaTeX でそれぞれ zxjafont.sty
, luatex-ja.sty
を利用してフォントが埋め込まれる. 両者の多くではプリセット名が共通しているが, 一部例外もあることに注意 (特に XeLaTeX は luatex-ja との互換性を考慮してエイリアスをいくつも用意している). また, より詳細な一覧やオプションの全貌については, ⼋登崇之氏の『PXchfon パッケージ』および zxjafont のマニュアル と, 『luatex-ja の使い方』を確認してほしい.
フォント | XeLaTeX | LuaLaTeX | 備考 |
---|---|---|---|
MS ゴシック/明朝 |
ms
|
ms
|
XeLaTeX のみ HGフォントと併用する ms-hg などのバリエーションあり
|
游書体 |
yu-win10
|
yu-win10
|
Windows 8 以前は yu-win , Mac では yu-osx
|
ヒラギノ系 |
hiragino-pro
|
hiragino-pro
|
hiragino-pron で ProN/StdN版を指定
|
Noto フォント |
noto /noto-jp
|
noto-otf /noto-otc
|
|
源ノ角ゴ/明朝 |
sourcechan-jp
|
sourcehan-jp
|
|
原ノ味フォント |
haranoaji
|
haranoaji
|
|
梅フォント |
ume
|
ume
|
|
小塚フォント |
kozuka-pro
|
kozuka-pro
|
-pr6 で ProVI版, -pr6n で Pro6N版を指定なども指定可能
|
IPA (Ex) フォント |
ipa /ipaex
|
ipa /ipaex
|
XeLaTeX のみ ipa-hg などのバリエーションあり
|
さらに, それぞれの項目に対してオプションを設定する場合, options
と接尾辞のついた項目が用意されている. 欧文と和文フォントで全く異なるタイプのフォントを使ったために相対的なサイズが合わず不格好な場合は
mainfont: Palatinno
mainfontoptions:
- Scale=0.9
などと書いて調整できる.
6.1.1 どのフォントを使用すべきか
既に書いたように rmdja では, Windows なら游書体シリーズやBIZ UDフォントシリーズ, Macならヒラギノや游書体といったようにOS標準のフォントが自動で選択される. よく, LaTeXやグラフで日本語が表示できないときは「IPAフォント」をダウンロードして使え, という記述がネット上に出回っているが, これは正確ではないとわかる.
文字化けは多くの場合, 文字コードの指定ミスか日本語のグリフ (文字) が存在しない欧文フォントを使用しているのが原因であり, このようにしかるべき方法でフォントを指定すれば使い慣れたOS標準のフォントが使用でき, BIZ UDフォントのような可読性に優れたフォントも使用可能である.
また, 無料公開されているフォントとしては, Noto フォントや原ノ味が存在する. 特に後者は見た目こそ既存の有名フォント(原ノ角やNoto)と大差ないが, CIDを持っており組版の点で効率的であり, Tex Live にも同梱されるようになった.
一方で, IPAフォントシリーズのうち, 「IPAmj明朝」フォントは行政の戸籍管理システム用途で開発されたため14 約6万字の漢字を収録するなど他の無料公開フォントと比べ格段に収録グリフ数が多いという特徴がある. さらに, CJK統合漢字のフルサポートをしているフォントとして, 9万字近い漢字を収録した花園明朝シリーズがある.
言うまでもなくこれらは明朝体のみであるため単体では整った日本語文書に使用することが難しいが, 異字体や稀にしか使われない(あるいは日本語では通常使われない)漢字の表記にこだわりたい場合は必要になるだろう15.
6.2 YAML フロントマターの設定によるスタイル変更
RMD ファイルの冒頭に書かれているYAMLフロントマターは様々なことが設定できる. これらのオプションは Pandoc のものに対応している. HTML はスタイルのほとんどが 規格化された CSS で操作できるため, 主に PDF に関するものである. また, 本章はあくまで簡易的な機能解説であるため, より詳細な解説は後の章で再度取り上げる.
6.2.1 ハイパーリンクの配色変更
たとえば PDF では, 以下のようにしてハイパーリンクの色を変更できる.
link-citations: true
linkcolor: blue
citecolor: blue
urlcolor: magenta
まず, ハイパーリンクを有効にする, link-citations:true
が必要である. 次に, リンクの種類ごとに色を指定できる. linkcolor
は文書内のハイパーリンクの色, citecolor
は巻末の参考文献リストへのリンクの色, そして urlcolor
は文書外の URL へのリンクの色である.
また, ページのヘッダ・フッタは pagestyle
で指定できる.
pagestyle: headings
文書クラスによっても多少変わるが, プリセットが4種類用意されている.
empty
: 何も表示しないplain
: ページ数のみ表示headings
: ヘッダに罫線を引き, ページ数だけでなく章のタイトルも表示するfancy
: ユーザによるカスタマイズ (WIP)
- が一般的な書籍のものに近いスタイルである. (1-3) は, タイトルページや調整のための白紙ページなどはかならずしも変更されない. そういった根本的な変更がしたい場合のため, (4) が用意されている. しかし, 現時点では
fancyhdr.sty
の使い方を知る必要がある.
6.2.2 LaTeX エンジンの変更
PDF の出力は r
rmdja::texlogo(“LaTeX”)を使用する. その処理プログラムにはいくつかバリエーションがあり,
rmdjaでは XeLaTeX と
rmdja::texlogo(“LuaLaTeX”)の使用を想定している (R Markdown では pdfLaTeX もサポートしているが, これは日本語表示が難しいため
rmdja` では採用していない).
両者は多少の違いがある (正確には, 両者それぞれに対応した和文組版パッケージの違いにも由来する).
- 組版の違い. XeLaTeX で和文組版を制御する
zxjatype.sty
にはいくつか改善の余地が残っている. - 速度の違い. 年々改善されているようだが, それでも LuaLaTeX は処理の遅さが目立つ16.
- フォントレンダの違い. 一概に言うのは難しいが, デフォルト設定では文字のウェイトや和文・欧文の相対的なバランスが微妙に異なる.
- 和文・欧文を同時に扱う際の挙動の違い. LuaLaTeX は和文と欧文の処理ルールが競合する時, 和文の処理を優先する傾向がある. 一方で
r
rmdja::texlogo(“XeLaTeX”)(および
zxjatype.sty`) はなるべく両者を共存できるように作られている.
もし和文組版の厳格さを優先したいのなら r
rmdja::texlogo(“LuaLaTeX”)を使うべきである. しかし処理速度があまりに遅いとか, 欧文の扱いが気に入らないとかの場合は
r rmdja::texlogo("XeLaTeX")
を使うと良い. 特に書籍形式でなくプレゼンテーション資料であれば, 組版ルールの厳格さはあまり気にならないことだろう.
6.2.3 文書クラスのカスタマイズ
デフォルトでは bxjsbook
という文書クラスを使用している. この他 rmdja
では bxjsreport
, ltjsbook
, ltjsreport
, ljreq
という文書クラスに対応している. ただし ljreq
は LuaLaTeX でのみ動作する.
6.2.4 LaTeX のカスタマイズ
PDF のデザインを微調整したい場合, 自分で LaTeX のソースに変更を加える必要がある. よってこの機能は LaTeX の使用に慣れたユーザのみが使用してほしい.
LaTeX のソースに変更を加える方法は2つ. 1つは header-includes
を使うことである.
header-includes:
- ...
- ...
これでリスト風にプリアンブルを書くことができる. ただし, %
を使った改行エスケープは使用できない. もう1つは, 出力フォーマットの includes
に設定する方法で, 以下のように命令文ではなく TEX ファイルを指定する.
output: rmdja::pdf_book_ja:
includes:
in_header: i.tex
before_body: b.tex
after_body: a.tex
それぞれ, プリアンブル, 本文冒頭 (document
環境, 表紙や目次等の直後), 本文後に挿入される. しかし, TEX ファイルの大枠は Pandoc のテンプレートファイルで決まっているため競合することもある. よってテンプレートを確認しながら作る必要がある. テンプレートファイルは Pandoc 独自の簡易なマクロが挿入されている以外は通常の LaTeX ソースと同じである17.
テンプレートファイルは R で以下を実行して得られるディレクトリにある. beamer-ja.tex.template
は beamer 用, document-ja.tex.template
はそれ以外の文書用である.
テンプレートを修正しなければ意図した変更ができない場合, 以下のようにして別のテンプレートファイルを指定できる.
output: rmdja::pdf_book_ja:
template: new-file
6.3 チャンク/コードおよび出力ブロックのスタイルの一括変更
すでに書いたように, コードブロックのシンタックスハイライトはいくつかのプリセットを適用できる. また, チャンクオプションにはいろいろなものがあり, それらは全て, knitr::opts_chunk::set()
で以降のチャンクに対して一括して適用できる. 詳細は https://yihui.org/knitr/options/#code-decoration などを見てもらうとして, いくつかを抜粋する. YAMLフォーマットと違い, チャンクオプションは全て R のコードとして評価されるため, 論理値は TRUE
/FALSE
または T
/F
と表記すること.
highlight
: シンタックスハイライトを適用するかどうか.background
: コードブロックの背景色. デフォルトは#F7F7F7
つまり灰色である.tidy
,tidy.opts
: コードの自動整形を適用するかどうかと, そのオプション.rmdja
のデフォルト設定ではstyler
パッケージを使用している. 詳しくは付録 (autoformatter) を参照.prompt
: コードブロックにプロンプト記号>
を表示するかどうかcomment
: 出力ブロックの行頭に表示する記号. デフォルトは##
size
: 出力ブロックのフォントサイズindent
: 出力ブロックのインデント
6.3.1 行番号の表示
行番号の表示は attr.source = c(".numberLines", .lineAnchors")
を指定する.
rmdja
で提供するフォーマットでは, `YAML フロントマターで一括して行番号を表示することを指定できる.
output: rmdja::pdf_document_ja:
add_rownumber: true
このオプションは上記のチャンクオプションのデフォルト値を変更するものである. よって, これを設定した状態で任意のコードブロックの行番号を非表示としたい場合は逆にチャンクオプション attr.source = NULL
を指定する.
6.3.2 コードブロックのページまたぎ禁止
長いソースコードを掲載するとページまたぎが発生する. 現時点では, rmdja
の機能としてコードブロックに個別にページまたぎを許可・禁止を指定する機能はない (Pandoc の基本機能の範囲でサポートされていないため) が, 一括で指定することはできる. 例えば
header-includes:
- \@ifpackageloaded{fvextra}{}{\usepackage{fvextra}}
- \DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\},breaklines,breakanywhere,samepage=true}
と書く. ただし直接関係あるのは samepage=true
だけである. これはテンプレートの記述を上書きするという乱暴な方法なので, 他のデフォルトオプションも混在している. commandchars=\\\{\}
はシンタックスハイライトに関する設定で, 基本的に消すべきでない. breaklines
は行途中の折り返しを許可するもの, breakanywhere
はどこでも行の折り返しを許可するというもので, いずれもデフォルトのコード自動整形と関係がある. ちなみに TEX ファイルを開いて highliting
環境に個別に samepage=true
オプションを指定すれば個別に折り返しを禁止できる.
LaTeX での使い方は https://texwiki.texjp.org/?TeX%E3%81%A8%E5%A4%96%E5%AD%97 などを参照↩︎
ただし R Markdown に限って言えば R コードの処理時間のほうが問題となることもある. また, XeLaTeX であっても文献処理や索引処理など関連プログラムを多く使用すればそれなりに遅くなる.↩︎
現時点では日本語版ユーザーガイドでも未翻訳のパート. しかし if, for 文など簡単な制御構文しかないため, 結局 LaTeX のマクロを使うことが多いだろう. https://pandoc-doc-ja.readthedocs.io/ja/latest/users-guide.html#templates, https://pandoc.org/MANUAL.html#templates↩︎