3 静的なコンテンツの作成

まずは, 単なるマークアップ, つまりプログラミングの複雑な処理を考えなくても良いタイプの, 簡単な構文を紹介する. それらの多くは一般的な Markdown のものと同じである.

日本語で書かれた資料でごく基本的なことについて, 『R Markdown入門』で一通り紹介されている. やや応用的なことも 『R Markdown ユーザーののための Pandoc’s Markdown』に書かれている.

3.1 Markdown の基本構文

一応基本の Markdown の構文も挙げておく. 詳細は(ref:BKDB)“Ch. 2.2 Markdown Syntax” を参照.

3.1.1 インラインでの書式変更

テキストの一部のみ書式を変える

アンダースコアで強調 (イタリック)

_underscore_

underscore

** 2つで太字強調

**太字強調**

太字強調

等幅フォント

`bookdown``rmdja`

bookdownrmdja

本文中に入力した URL は自動判別され, ハイパーリンクが付けられる. また, [テキスト](URL) という書式で, テキストに対してハイパーリンクを付けることができる.


URL は自動判別される: https://github.com/Gedevan-Aleksizde/my_latex_templates/tree/master/rmdja

[`rmdja` の github リポジトリ](https://github.com/Gedevan-Aleksizde/my_latex_templates/tree/master/rmdja)

URL は自動判別される: https://github.com/Gedevan-Aleksizde/my_latex_templates/tree/master/rmdja

rmdja の github リポジトリ

3.1.2 ブロック要素

以降は行内では使えず, 適切に表示するには前後に改行を挟む必要のあるタイプの構文である.

まず, 引用ブロックを使えばかっこいいエピグラフを書き放題である.

> Нужны новые формы. Новые формы нужны, а если их нет, то лучше ничего не нужно.
>
> 新しいフォーマットが必要なんですよ. 新しいフォーマットが. それがないというなら, いっそ何もないほうがいい. 
>
> `\r tufte::quote_footer('--- A. チェーホフ『かもめ』')`

Нужны новые формы. Новые формы нужны, а если их нет, то лучше ничего не нужно.

新しいフォーマットが必要なんですよ. 新しいフォーマットが. それがないというなら, いっそ何もないほうがいい.

— A. チェーホフ『かもめ』

rmdja では, HTML と PDF 両方で同様のデザインの枠で表示するようにしている.

Markdown では # は見出しを意味するが, bookdown にはさらにオプションが用意されている.

# 見出し名 {-} で, セクション番号のつかない見出しを用意できる. 序文, 章末の参考文献, 付録のセクションに使えるだろう. さらに, bookdown では # (PART) 見出し名 で「部」の見出しを作ることができる. この見出しは セクションの合間に挟まるが, 選択することはできない. 文書が長くなったときに, より大きな区切りを付けるのに役に立つだろう. さらに, # (APPENDIX) 見出し名 {-} で, 以降の見出しの頭に 「補遺 A, B, C, …」と付番できる.

箇条書きは以下のように書ける.

* iris setosa
* iris versicolor
* iris virginica
  • iris setosa
  • iris versicolor
  • iris virginica
1. iris setosa
2. iris versicolor
3. iris virginica
  1. iris setosa
  2. iris versicolor
  3. iris virginica

インデントを使えばネストできる.

  • 課長
    • 課長補佐
      • 課長補佐代理
        • 課長補佐代理心得

3.2 Markdown を使った図表の挿入

markdown は表を記入することもできる.

Table: 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
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

画像ファイルも貼り付けられる.

Johannes Gutenberg

しかし, キャプションを付けたり, 表示位置やサイズを細かく調整したり, 注釈を付けたりするためには, 後述するようにRプログラムを経由して出力したほうが良い.

TODO: md 記法で画像貼り付けたときのサイズ統一

3.2.1 コメントアウト

HTML 式の <!-- --> でコメントアウトできる. コメントアウトされた箇所は生成ファイルでもコメントアウトされるのではなく, そもそも出力されなくなる.

3.3 数式

LaTeX 記法で数式を記述できる. HTML ならば Mathjax によってレンダリングされる. 数式の記述ルールは少々ややこしい. これは現在の pandoc の仕様で HTML および LaTeX の規格で矛盾なく出力するためやむをえない措置である.

  1. 改行をしない行内数式$ で囲む, または \(, \) で囲む.
  2. 改行を伴う数式ブロック$$ で囲む, または \[, \] で囲む.
  3. align, equation 環境等を使う場合は, 上記の記号を使わず, 直接 LaTeX コマンド \begin{align}... を打ち込む.
\@ref(eq:binom) は二項分布の確率関数である
\begin{align}
f(k) &= {n \choose k} p^{k} (1-p)^{n-k} (\#eq:binom)
\end{align}

その出力は, 以下のようになる.

(3.1) は二項分布の確率関数である

\[\begin{align} f(k) &= {n \choose k} p^{k} (1-p)^{n-k} \tag{3.1} \end{align}\]

Bookdown では従来の R Markdown でできなかった数式への付番と, 本文中での参照アンカーリンクの自動作成が可能となっている (詳細は 5.1 章で). LaTeX にすでに慣れている読者に注意が必要だが, Bookdown 特有の制約として, 付番したい場合は \label{ID} ではなく (\#eq:ID) を使う. また, PDF (LaTeX) と HTML (Mathjax) の仕様には

  1. PDF では align は常に数式が付番され, align* 等はどうやっても付番されない
  2. HTML では align でも align* であってもラベルを書かなければ付番されず, 書けば付番される.

という違いがある. 両者で同じ表示にこだわるのなら, 付番を取り消す \notag を多用することになるだろう.

さらに, bookdown の機能として, LaTeX の「定理」「定義」「証明」などの環境に対応するものが提供されている (参考: BKD Ch. 2.2 Markdown extensions by bookdown). これらの相互参照も可能である.

例: 以下に補題 3.1, 定理 3.1 を示す.

補題 3.1 (ボレル-カンテリの補題) \({E_1,E_2,\cdots}\)をある確率空間の事象とする. これらの事象の確率の和が有限であるなら, それらが無限に多く起こる確率はゼロである. つまり,

\[\begin{align*} & \sum_{n=1}^\infty \mathrm{P}(X_n) <\infty \Rightarrow \mathrm{P}\left(\lim_{n\to\infty}\sup X_n\right) = 0,\\ & \lim_{n\to\infty}\sup X_n = \bigcap_{n=1}^\infty\bigcup_{k\leq n}^\infty E_k \end{align*}\]

である.
証明. 証明は読者の課題とする.
定理 3.1 (無限の猿定理) 猿がほとんど確実にタイプライタの全てのキーを無限回叩くならば, ほとんど確実にテキストには任意の作品が含まれる.
証明. 補題 3.1 より自明.

3.4 カスタムブロック

数式のセクションの定理ブロックの応用で, 独自のブロックセクションを定義することができる. rmdja では BKD Ch. 2.7 Custom blocks で紹介されている例を予め使えるようにしている. それらは type="..." で指定できて, 以下の5種類がある.

  • caution
  • important
  • memo
  • tip
  • warning

である.

このブロック内では Markdown の基本構文しか使えず, 引用や相互参照などは使えない. これらをブロック内で使いたい場合は block の代わりに block2 と書く. ただしこちらは pandoc の機能のハックであるため, 将来使えなくなる可能性もある.

やや煩雑になるが, Pandoc の fenced Div を利用した書き方は, より安全である.

:::{.infobox .important data-latex="{warning}"}
fenced Div によるブロック
:::

fenced Div によるブロック

この構文の意味の解説は『R Markdown クックブック』などを参考に.

3.5 脚注

脚注はインラインと, 巻末に書く2通りがある.

ここにインラインで脚注^[脚注の本文]

ここにインラインで脚注7

本文は巻末に書く[^example-1][^example-2].

[^example-1]: 脚注の本文その2
[^example-2]: 脚注の本文その2

本文は巻末に書く89.

ここにインラインで脚注[^脚注の本文]

インラインで書くほうがシンプルに見えるが, この記法では間を空けずに連続して脚注を書くことができない.

このように書くと^[脚注その1]^[脚注その2]上付きとして認識される

3.6 改行・改頁 (改ページ)・改丁

HTMLやTexをそのまま書く場合と違い, Markdown での改行はそのまま反映されるため, 通常は <br>\\ などを書く必要はない. HTML の場合, 紙への印刷を想定しないため任意のタイミングで改ページするという考え方はない. Webページの分割は章やセクション単位でなされる. PDF の場合は \newpage, \clearpage, \cleardoublepage という3種類の命令文が用意されている.

  1. \newpage はページを改めるが, 段組の場合は次のページではなく次の段に飛ぶ.
  2. \clearpage は段組みでもページを改める. またそれ以前に配置した図表のフロートの配置を確定させる. つまり図表をフロートにしても \clearpage をまたいで位置が変わることはない.
  3. \cleardoublepage は次の奇数ページまで飛ぶ (いわゆる改丁). 書籍では通例, 章の始めなどを奇数ページに揃える. なお # で章見出しを書いた場合は自動でこの命令文が適用されるため手作業でこの命令文を書く必要はない.

  1. 脚注の本文↩︎

  2. 脚注の本文その2↩︎

  3. 脚注の本文その2↩︎