Re:VIEW Starter
ユーザーズガイド— インストールからカスタマイズまで —［著］カウプラン機関極東⽀部

2021 年 7 ⽉ 15 ⽇

ver 1.0

■免責
本書は情報の提供のみを⽬的としています。
本書の内容を実⾏・適⽤・運⽤したことで何が起きようとも、それは実⾏・適⽤・運⽤した⼈
⾃⾝の責任であり、著者や関係者はいかなる責任も負いません。
■商標
本書に登場するシステム名や製品名は、関係各社の商標または登録商標です。
また本書では、™、®、© などのマークは省略しています。

はじめに
Re:VIEW Starter に興味を持っていただき、ありがとうございます。本書は、Re:VIEW Starter のマニュアルです。
Re:VIEW Starter とは
Re:VIEW Starter は、PDF や ePub のドキュメントを⽣成するツールです。
• Re:VIEW Starter
https://kauplan.org/reviewstarter/

もともと「Re:VIEW*1 」というツールがあり、それを⼤きく改良したのが Re:VIEW

Starter です。Re:VIEW Staret は、Re:VIEW と⽐べて次のような特徴があります。
かんたん：

初期設定が GUI でできるので、かんたんに始められます。

きれい：

⾒た⽬を重視した、きれいなデザインの PDF が⽣成できます。

使いやすい：

初⼼者のためのいろんな配慮が⾏き届いています。

詳しくはこちらの記事を参照してください。

•『技術系同⼈誌を書く⼈の味⽅「Re:VIEW Starter」の紹介』
https://qiita.com/kauplan/items/d01e6e39a05be0b908a1

Re:VIEW Starter は Re:VIEW からフォークしており、開発は別々に⾏われています。Re:VIEW Starter に関する質問や問い合せを、Re:VIEW 開発
チームにしないようお願いします。
なお Re:VIEW Starter がフォークした経緯は、付録 C をご覧ください。

本書の内容
本書は、Re:VIEW Starter の使い⽅を説明するマニュアルです。また、よりよい
ドキュメントを書くときの注意点も説明しています。

• 第 1 章「インストール」では、インストール⽅法を説明しています。ここでつまづく⼈が多いので、わからなければ遠慮なく Twitter で相談してください。
• 第 2 章「チュートリアル」では、主な使い⽅を説明しています。初めての⼈は少なくともここまでを読んでください。

*1 https://reviewml.org

–i–

はじめに

• 第 3 章「記法」では、詳細な使い⽅を説明します。
• 第 4 章「カスタマイズ」では、いろんなカスタマイズ⽅法を説明します。
• 第 5 章「FAQ」では、よくある質問を紹介しています。
• 第 6 章「よりよい本づくり」では、よりよいドキュメントを書くためのポイン
トを説明しています。初めて技術同⼈誌を書く⼈は、この章も読んでみてください。
本書の対象読者
本書の対象読者は、技術系同⼈誌を作ってみたい⼈、Re:VIEW Starter を使ってみたい⼈です。また、よりよいドキュメントを書くヒントが欲しい⼈も対象になり
ます。
質問や相談

Re:VIEW Starter について質問や相談があれば、Twitter で「#reviewstarter」
タグをつけてツイートしてください（あて先はなくて構いません）。必ず解決するとは保証できませんが、できる範囲で対応します。

– ii –

凡例
本書では、プログラムコードを次のように表⽰します。太字は強調を表します。
←太字は強調print("Hello, world!\n");プログラムコードの差分を表⽰する場合は、追加されたコードを太字で、削除されたコードを取り消し線で表します。
←取り消し線は削除したコード←太字は追加したコード

print("Hello, world!\n");print("Hello, "+name+"!\n");⻑い⾏が右端で折り返されると、折り返されたことを表す⼩さな記号がつきます。
123456789_123456789_123456789_123456789_123456789_123456789_123››456789_123456789_123456789_

ターミナル画⾯は、次のように表⽰します。⾏頭の「$ 」はプロンプトを表し、ユーザが⼊⼒するコマンドには薄い下線を引いています。

$ echo Hello←⾏頭の「 $ 」はプロンプト 、それ以降がユーザ⼊⼒

本⽂に対する補⾜情報や注意・警告は、次のようなノートや囲み枠で表⽰します。

..................................................
ノートタイトル
ノートは本⽂に対する補⾜情報です。

..................................................

タイトル
本⽂に対する補⾜情報です。

タイトル
本⽂に対する注意・警告です。

– iii –

⽬次
はじめに
第1章

1.1

1.2
1.3

1.4
第2章

2.1
2.2
2.3

2.4

i
インストール

Ruby と TeXLive のインストール . . . . . . . . . . . . . . . . . . .
♣ Docker の使い⽅を知っている場合 . . . . . . . . . . . . . . . .
♣ macOS を使っている場合 . . . . . . . . . . . . . . . . . . . . .
♣ Windows を使っている場合 . . . . . . . . . . . . . . . . . . . .
プロジェクトを作成 . . . . . . . . . . . . . . . . . . . . . . . . . .
サンプルの PDF ファイルを⽣成 . . . . . . . . . . . . . . . . . . .
♣ Docker の場合 . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ macOS の場合 . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ Windows の場合 . . . . . . . . . . . . . . . . . . . . . . . . .
注意点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
チュートリアル

1
2
2
2
5

6
6
6
7
8

9

11
⽤語の説明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
フォルダとファイルの説明 . . . . . . . . . . . . . . . . . . . . . . . 13
原稿の追加と変更 . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
♣ 既存の原稿ファイルを変更する . . . . . . . . . . . . . . . . . . 15
♣ 新しい原稿ファイルを追加する . . . . . . . . . . . . . . . . . . 16
♣ 「catalog.yml」の説明 . . . . . . . . . . . . . . . . . . . . . . 18
♣ コンパイルエラーになったら . . . . . . . . . . . . . . . . . . . 19
♣ ⽂章をチェックする . . . . . . . . . . . . . . . . . . . . . . . . 20
基本的な記法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
♣ コメント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
♣ 段落と改⾏ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
♣ ⾒出し . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
♣ 箇条書き . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
♣ ⽤語リスト . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
♣ 太字と強調 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
♣ 等幅フォント . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
♣ プログラムリスト . . . . . . . . . . . . . . . . . . . . . . . . . 25
♣ ターミナル画⾯ . . . . . . . . . . . . . . . . . . . . . . . . . . 27
♣ 脚注 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
–v–

⽬次

2.5

2.6

第3章

3.1

3.2

3.3

3.4

♣図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ ノート . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 数式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 会話形式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ ⽤語、索引 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 単語展開 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

28
28
30
31
31
33
34

印刷⽤ PDF と電⼦⽤ PDF . . . . . . . . . . . . . . . . . . . . . . .
♣ 印刷⽤と電⼦⽤を切り替えて PDF を⽣成する . . . . . . . . . . .
♣ 印刷⽤ PDF と電⼦⽤ PDF の違い . . . . . . . . . . . . . . . .

34

⾼速プレビュー . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 指定した章だけをコンパイルする . . . . . . . . . . . . . . . . .
♣ コンパイル回数を 1 回だけに制限する . . . . . . . . . . . . . . .
♣ 画像読み込みを省略するドラフトモード . . . . . . . . . . . . . .
♣ ⾃動リロードつき HTML プレビュー . . . . . . . . . . . . . . .

36

記法

41
42

コメント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ ⾏コメント . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 範囲コメント . . . . . . . . . . . . . . . . . . . . . . . . . . .

34
35
36
37
37
38

42
42

段落と改⾏と空⾏ . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 段落 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 改⾏ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 強制改⾏ . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 強制空⾏ . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 改段落 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 改ページ . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

43

⾒出し . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ ⾒出しレベル . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ ⾒出し⽤オプション . . . . . . . . . . . . . . . . . . . . . . . .
♣ 章の概要と著者名 . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 章 ID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 章を参照する . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 節や項を参照する . . . . . . . . . . . . . . . . . . . . . . . . .
♣ まえがき、あとがき、付録 . . . . . . . . . . . . . . . . . . . .
♣部 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 段⾒出しと⼩段⾒出し . . . . . . . . . . . . . . . . . . . . . . .

47

箇条書きと定義リスト . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 番号なし箇条書き . . . . . . . . . . . . . . . . . . . . . . . . .

56– vi –

43
44
45
46
46
47
47
48
49
50
50
51
52
53
54
56

3.5

3.6

3.7

3.8

3.9

3.10

3.11

♣ 番号つき箇条書き . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 定義リスト . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 説明リスト . . . . . . . . . . . . . . . . . . . . . . . . . . . .

57
58
60

インライン命令とブロック命令 . . . . . . . . . . . . . . . . . . . .
♣ インライン命令 . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ ブロック命令 . . . . . . . . . . . . . . . . . . . . . . . . . . .

63

強調と装飾 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 強調 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 太字 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 装飾 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ ⽂字サイズ . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ マーキング⽤ . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ その他のインライン命令 . . . . . . . . . . . . . . . . . . . . .

65

プログラムリスト . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 基本的な書き⽅ . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ リスト番号 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ ラベルの⾃動指定 . . . . . . . . . . . . . . . . . . . . . . . . .
♣ ⻑い⾏の折り返し . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 改⾏⽂字を表⽰ . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ インデント . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 外部ファイルの読み込み . . . . . . . . . . . . . . . . . . . . .
♣ タブ⽂字 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 全⾓⽂字の幅を半⾓ 2 ⽂字分にする . . . . . . . . . . . . . . . .
♣ 出⼒結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ その他のオプション . . . . . . . . . . . . . . . . . . . . . . . .

68

⾏番号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ プログラムリストに⾏番号をつける . . . . . . . . . . . . . . . .
♣ ⾏番号の幅を指定する . . . . . . . . . . . . . . . . . . . . . . .
♣ 複雑な⾏番号指定 . . . . . . . . . . . . . . . . . . . . . . . . .

78

ターミナル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 基本的な書き⽅ . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ ユーザ⼊⼒ . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ ターミナルのカーソル . . . . . . . . . . . . . . . . . . . . . . .

81

脚注 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 脚注の書き⽅ . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ 脚注の注意点 . . . . . . . . . . . . . . . . . . . . . . . . . . .

84

ノート . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ ノートの書き⽅ . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ ラベルをつけて参照する . . . . . . . . . . . . . . . . . . . . .

85– vii –

63
64
65
65
66
66
67
68
68
69
69
70
72
72
74
74
74
76
77
78
79
80
81
82
83
84
84
85
86

⽬次

♣ ノート以外のミニブロック

3.12. . . . . . . . . . . . . . . . . . . .

87

コラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ コラムとは . . . . . . . . . . . . . . . . . . . . . . . . . . . .
♣ コラムの書き⽅ . . . . . . . . . . . . . . . . . . . . . . . . . .
[コラム] サンプルコラム 1 . . . . . . . . . . . . . . . . . . . . . .
♣ コラム内の脚注 . . . . . . . . . . . . . . . . . . . . . . . . . .
[コラム] サンプルコラム 2 . . . . . . . . . . . . . . . . . . . . . .
♣ コラムを参照 . . . . . . . . . . . . . . . . . . . . . . . . . . .
[コラム] サンプルコラム 3 . . . . . . . . . . . . . . . . . . . . . .
♣ コラムの制限 . . . . . . . . . . . . . . . . . . . . . . . . . . .

90
90
91
91
92
92
92
93
93

3.13

画像 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
♣ 画像ファイルの読み込み⽅ . . . . . . . . . . . . . . . . . . . . 94
♣ 画像の表⽰幅を指定する . . . . . . . . . . . . . . . . . . . . . 95
♣ 章ごとの画像フォルダ . . . . . . . . . . . . . . . . . . . . . . . 96
♣ 画像のまわりに線をつける . . . . . . . . . . . . . . . . . . . . 97
♣ 画像の配置位置を指定する . . . . . . . . . . . . . . . . . . . . 97
♣ 画像に番号も説明もつけない . . . . . . . . . . . . . . . . . . . 99
♣ ⽂章の途中に画像を読み込む . . . . . . . . . . . . . . . . . . . 99
♣ 画像とテキストを並べて表⽰する . . . . . . . . . . . . . . . . . 100

3.14

表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101♣ 表の書き⽅ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101♣ ラベルの⾃動採番 . . . . . . . . . . . . . . . . . . . . . . . . . 101♣ 右寄せ、左寄せ、中央揃え . . . . . . . . . . . . . . . . . . . . 102♣ 縦の罫線 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104♣ 横の罫線 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104♣ セル幅 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106♣ 空欄 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107♣ 表⽰位置の指定 . . . . . . . . . . . . . . . . . . . . . . . . . . 108♣ 表のフォントサイズ . . . . . . . . . . . . . . . . . . . . . . . . 109♣ CSV 形式の表 . . . . . . . . . . . . . . . . . . . . . . . . . . 110♣ 外部ファイルを読み込む . . . . . . . . . . . . . . . . . . . . . 112♣ ヘッダの⾏数を指定する . . . . . . . . . . . . . . . . . . . . . 113♣ ヘッダのカラム数を指定する . . . . . . . . . . . . . . . . . . . 114♣ 表を画像で⽤意する . . . . . . . . . . . . . . . . . . . . . . . . 115

3.15

数式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116♣ 数式の書き⽅ . . . . . . . . . . . . . . . . . . . . . . . . . . . 116♣ 数式を⽂中に埋め込む . . . . . . . . . . . . . . . . . . . . . . . 117♣ 数式のフォント . . . . . . . . . . . . . . . . . . . . . . . . . . 117

3.16

会話形式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117– viii –♣ アイコン画像を使う場合 . . . . . . . . . . . . . . . . . . . . . 118♣ アイコン画像を使わない場合 . . . . . . . . . . . . . . . . . . . 119♣ コンパクトな書き⽅ . . . . . . . . . . . . . . . . . . . . . . . . 120♣ 短縮名 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121♣ カスタマイズ . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

3.17

⽤語、索引 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125♣ 索引機能をオンにする . . . . . . . . . . . . . . . . . . . . . . . 125♣ ⽤語の書き⽅ . . . . . . . . . . . . . . . . . . . . . . . . . . . 126♣ 親⼦関係にある⽤語 . . . . . . . . . . . . . . . . . . . . . . . . 128♣ 親⼦関係の順番を⼊れ替える . . . . . . . . . . . . . . . . . . . 128♣ 転送先の⽤語を指定する . . . . . . . . . . . . . . . . . . . . . 129♣ よみがなの再利⽤ . . . . . . . . . . . . . . . . . . . . . . . . . 130♣ よみがな辞書を使う . . . . . . . . . . . . . . . . . . . . . . . . 130♣ ⽤語と索引の補⾜事項 . . . . . . . . . . . . . . . . . . . . . . . 131♣ Re:VIEW との違い . . . . . . . . . . . . . . . . . . . . . . . . 132

3.18

単語展開 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133♣ 単語展開⽤のインライン命令 . . . . . . . . . . . . . . . . . . . 133♣ 単語展開⽤の辞書ファイル . . . . . . . . . . . . . . . . . . . . 133♣ Re:VIEW との違い . . . . . . . . . . . . . . . . . . . . . . . . 134

3.19

その他 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134♣ URL、リンク . . . . . . . . . . . . . . . . . . . . . . . . . . 134♣ 引⽤ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135♣ 傍点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136♣ ルビ、読みがな . . . . . . . . . . . . . . . . . . . . . . . . . . 136♣ 何もしないコマンド . . . . . . . . . . . . . . . . . . . . . . . . 136♣ コード中コメント . . . . . . . . . . . . . . . . . . . . . . . . . 137♣ 特殊⽂字 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138♣ 右寄せ、センタリング . . . . . . . . . . . . . . . . . . . . . . . 138♣ 縦⽅向の空き（実験的機能） . . . . . . . . . . . . . . . . . . . 139♣ ⽣データ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139♣ 参考⽂献 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

第4章

カスタマイズ

141

4.1

命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142♣ 新しいインライン命令を追加する . . . . . . . . . . . . . . . . . 142♣ 新しいブロック命令を追加する . . . . . . . . . . . . . . . . . . 142

4.2

ページと本⽂ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145♣ [PDF] ページサイズを B5 や A5 に変更する . . . . . . . . . . . . 145♣ [PDF] 本⽂の幅を指定する . . . . . . . . . . . . . . . . . . . . 145– ix –

⽬次♣ [PDF] 本⽂の⾼さを指定する . . . . . . . . . . . . . . . . . . . 146♣ [PDF] 塗り⾜しをつける . . . . . . . . . . . . . . . . . . . . . 146♣ [PDF] 塗り⾜しを可視化する . . . . . . . . . . . . . . . . . . . 147♣ [PDF] 章の右ページ始まりをやめる . . . . . . . . . . . . . . . . 148♣ [PDF] 「//info」や「//warning」のデザインを変更する . . . . . 148

4.3

フォント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150♣ [PDF] フォントサイズを変更する . . . . . . . . . . . . . . . . . 150♣ [PDF] フォントの種類を変更する . . . . . . . . . . . . . . . . . 150

4.4

プログラムコード . . . . . . . . . . . . . . . . . . . . . . . . . . . 151♣ [PDF] 説明⽂直後での改ページを防ぐ . . . . . . . . . . . . . . . 151♣ [PDF] プログラムコードのフォントを変更する . . . . . . . . . . 152♣ プログラムコードの枠線 . . . . . . . . . . . . . . . . . . . . . 153♣ オプションのデフォルト値 . . . . . . . . . . . . . . . . . . . . 153♣ [PDF] 折り返し記号や⾏番号をマウス選択の対象から外す . . . . . 154

4.5

⾒出し . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155♣ 章のタイトルデザインを変更する . . . . . . . . . . . . . . . . . 155♣ 節のタイトルデザインを変更する . . . . . . . . . . . . . . . . . 155♣ 段⾒出しのデザインを変更する . . . . . . . . . . . . . . . . . . 156♣ [PDF] 章や節のタイトルを独⾃にデザインする . . . . . . . . . . 156♣ [PDF] 章扉をつける . . . . . . . . . . . . . . . . . . . . . . . 156♣ [PDF] 章扉に背景⾊をつける . . . . . . . . . . . . . . . . . . . 158♣ [PDF] 節ごとに改ページする . . . . . . . . . . . . . . . . . . . 159♣ 項に番号をつける . . . . . . . . . . . . . . . . . . . . . . . . . 159♣ 項を⽬次に含める . . . . . . . . . . . . . . . . . . . . . . . . . 159♣ [PDF] 項への参照に節タイトルを含める . . . . . . . . . . . . . . 160♣ 項タイトルの記号を外す . . . . . . . . . . . . . . . . . . . . . 160♣ [PDF] 項タイトルの記号をクローバーから変更する . . . . . . . . 161

4.6

本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161♣ 本のタイトルや著者名を変更する . . . . . . . . . . . . . . . . . 161♣ [PDF] 表紙や⼤扉や奥付となる PDF ファイルを指定する . . . . . 162♣ [PDF] 表紙の PDF から塗り⾜しを除いて取り込む . . . . . . . . 163♣ [PDF] ⼤扉のデザインを変更する . . . . . . . . . . . . . . . . . 164♣ [PDF] 奥付のデザインを変更する . . . . . . . . . . . . . . . . . 164♣ [PDF] 奥付を改ページしない . . . . . . . . . . . . . . . . . . . 164♣ [PDF] 奥付に発⾏者と連絡先を記載する . . . . . . . . . . . . . . 165♣ [PDF] 注意事項の⽂章を変更する . . . . . . . . . . . . . . . . . 166♣ [PDF] 注意事項の⽂章を出さない . . . . . . . . . . . . . . . . . 166

4.7

索引 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166♣ [PDF] ⽤語のグループ化を⽂字単位にする . . . . . . . . . . . . . 166–x–♣ [PDF] 連続したピリオドのかわりに空⽩を使う . . . . . . . . . . 167♣ [PDF] ⽤語⾒出しのデザインを変更する . . . . . . . . . . . . . . 167♣ [PDF] その他 . . . . . . . . . . . . . . . . . . . . . . . . . . 168

4.8

第5章

Rake タスク . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168♣ デフォルトタスクを設定する . . . . . . . . . . . . . . . . . . . 168♣ 独⾃のタスクを追加する . . . . . . . . . . . . . . . . . . . . . 168♣ コンパイルの前処理を追加する . . . . . . . . . . . . . . . . . . 169
FAQ

171

5.1

コンパイルエラー . . . . . . . . . . . . . . . . . . . . . . . . . . . 172♣ コンパイルエラーが出たとき . . . . . . . . . . . . . . . . . . . 172♣ 「review-pdfmaker」で PDF が⽣成できない . . . . . . . . . . 173

5.2

本⽂ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173♣ 左右の余⽩が違う . . . . . . . . . . . . . . . . . . . . . . . . . 173♣ ⽂章中のプログラムコードに背景⾊をつけたい . . . . . . . . . . . 173♣ 索引をつけたい . . . . . . . . . . . . . . . . . . . . . . . . . . 174

5.3

プログラムコードとターミナル . . . . . . . . . . . . . . . . . . . . 174♣ プログラムコードの⾒た⽬が崩れる . . . . . . . . . . . . . . . . 174♣ 右端に到達してないのに折り返しされる . . . . . . . . . . . . . . 174♣ 全⾓⽂字の幅を半⾓⽂字 2 個分にしたい . . . . . . . . . . . . . . 175♣ ターミナルの出⼒を折り返しせずに表⽰したい . . . . . . . . . . . 176♣ コードハイライトしたい . . . . . . . . . . . . . . . . . . . . . 177

5.4

画像 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177♣ PDF と HTML とで画像の表⽰サイズを変えたい . . . . . . . . . 177♣ 印刷⽤ PDF と電⼦⽤ PDF とで異なる解像度の画像を使いたい . . 178♣ 画像の解像度はどのくらいにすればいいか . . . . . . . . . . . . . 179♣ ⽩黒印刷⽤の PDF にカラー画像を使っても⼤丈夫か . . . . . . . . 179

5.5

ノンブル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180♣ ノンブルとは . . . . . . . . . . . . . . . . . . . . . . . . . . . 180♣ ノンブルを必要とする印刷所 . . . . . . . . . . . . . . . . . . . 180♣ ノンブルのつけ⽅ . . . . . . . . . . . . . . . . . . . . . . . . . 181♣ ノンブルの調整 . . . . . . . . . . . . . . . . . . . . . . . . . . 183♣ ノンブルの注意点 . . . . . . . . . . . . . . . . . . . . . . . . . 183

5.6

LATEX 関連 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184♣ LuaLaTeX と jlreq を使いたい . . . . . . . . . . . . . . . . . . 184♣ LATEX のスタイルファイルから環境変数を参照する . . . . . . . . 184
その他 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185♣ ⾼度なカスタマイズ . . . . . . . . . . . . . . . . . . . . . . . . 185

5.7– xi –

⽬次

第6章

よりよい本づくり

189

6.1

まえがき . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190♣ まえがきには章番号をつけない . . . . . . . . . . . . . . . . . . 190♣ まえがきに「本書の⽬的」を⼊れる . . . . . . . . . . . . . . . . 190♣ まえがきに「対象読者」を⼊れる . . . . . . . . . . . . . . . . . 190♣ まえがきに「前提知識」を⼊れる . . . . . . . . . . . . . . . . . 191♣ まえがきにサポートサイトの URL を載せる . . . . . . . . . . . . 192♣ まえがきに謝辞を載せる . . . . . . . . . . . . . . . . . . . . . 192♣ まえがきにソフトウェアのバージョンを載せる . . . . . . . . . . . 192♣ まえがきの章タイトル以外は⽬次に載せない . . . . . . . . . . . . 192

6.2

初⼼者向け⼊⾨書 . . . . . . . . . . . . . . . . . . . . . . . . . . . 193♣ 初⼼者向け⼊⾨書ではフォントを⼤きめにする . . . . . . . . . . . 193♣ 初⼼者向け⼊⾨書では節と項の⾒分けをつきやすくする . . . . . . 194♣ 初⼼者向け⼊⾨書では節ごとに改ページする . . . . . . . . . . . . 195

6.3

箇条書き . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195♣ 箇条書きを正しく使い分ける . . . . . . . . . . . . . . . . . . . 195♣ 箇条書き直後に継続する段落は字下げしない . . . . . . . . . . . . 197

6.4

本⽂ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198♣ 強調箇所は太字のゴシック体にする . . . . . . . . . . . . . . . . 198♣ 強調と傍点を使い分ける . . . . . . . . . . . . . . . . . . . . . 198♣ [PDF] 記号と⽇本語はくっつくことに注意する . . . . . . . . . . 199♣ [PDF] 等幅フォントで余計な空⽩が⼊るのを防ぐ . . . . . . . . . 200♣ ⽂章中のコードは折り返しする . . . . . . . . . . . . . . . . . . 201♣ ノートとコラムを使い分ける . . . . . . . . . . . . . . . . . . . 201

6.5

⾒出し . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201♣ 節タイトルが複数⾏になるなら下線や背景⾊を使わない . . . . . . 201♣ 項を参照するなら項番号をつける . . . . . . . . . . . . . . . . . 202

6.6

プログラムコード . . . . . . . . . . . . . . . . . . . . . . . . . . . 202♣ 0 と O や 1 と l が⾒分けやすいフォントを使う . . . . . . . . . . 202♣ フォントを⼩さくしすぎない . . . . . . . . . . . . . . . . . . . 202♣ 重要箇所を⽬⽴たせる . . . . . . . . . . . . . . . . . . . . . . . 205♣ 重要でない箇所を⽬⽴たせない . . . . . . . . . . . . . . . . . . 205♣ 差分（追加と削除）の箇所を明⽰する . . . . . . . . . . . . . . . 206♣ ⻑い⾏の折り返し箇所を明⽰する . . . . . . . . . . . . . . . . . 207♣ ⾏番号を控えめに表⽰する . . . . . . . . . . . . . . . . . . . . 208♣ ⾏番号を考慮して⻑い⾏を折り返す . . . . . . . . . . . . . . . . 208♣ ページまたぎしていることを可視化する . . . . . . . . . . . . . . 209♣ インデントを可視化する . . . . . . . . . . . . . . . . . . . . . 210– xii –

6.7

図表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210♣ 図表が次のページに送られてもスペースを空けない . . . . . . . . . 210♣ ⼤きい図表は独⽴したページに表⽰する . . . . . . . . . . . . . . 211♣ 図表は番号で参照する . . . . . . . . . . . . . . . . . . . . . . . 211♣ ⽩黒印刷でも問題ないか確認する . . . . . . . . . . . . . . . . . 212♣ 表のカラム幅を指定する . . . . . . . . . . . . . . . . . . . . . 212♣ 表のカラムが数値なら右寄せにする . . . . . . . . . . . . . . . . 213

6.8

ページデザイン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213♣ [PDF] 印刷⽤では左右の余⽩幅を充分にとる . . . . . . . . . . . 213♣ [PDF] タブレット向けでは余⽩を切り詰める . . . . . . . . . . . 214♣ [PDF] 電⼦⽤ PDF ではページ番号の位置を揃える . . . . . . . . 215♣ ⾮ Retina 向けには本⽂をゴシック体にする . . . . . . . . . . . . 215

6.9

⼤扉 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216♣ ⻑いタイトルでは改⾏箇所を明⽰する . . . . . . . . . . . . . . . 216♣ ⼤扉を別のソフトで作成する . . . . . . . . . . . . . . . . . . . 216

6.10

奥付 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218♣ 奥付は最後のページに置く . . . . . . . . . . . . . . . . . . . . 218♣ 奥付に更新履歴とイベント名を記載する . . . . . . . . . . . . . . 218♣ 利⽤した素材の作者と URL を奥付に記載する . . . . . . . . . . . 218♣ 利⽤したソフトウェアを奥付に記載する . . . . . . . . . . . . . . 218

6.11

textlint による⽂章チェック . . . . . . . . . . . . . . . . . . . . . . 219♣ textlint とは . . . . . . . . . . . . . . . . . . . . . . . . . . . 219♣ textlint の注意点 . . . . . . . . . . . . . . . . . . . . . . . . . 220♣ Starter のプロジェクトで textlint を使う . . . . . . . . . . . . . 222♣ Starter における textlint 実⾏の仕組み . . . . . . . . . . . . . . 223

付録 A

Re:VIEW との差分
225
まとめ記事 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
プロジェクト作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
コメント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
箇条書き . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
定義リスト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
⾒出し（章、節、項、⽬） . . . . . . . . . . . . . . . . . . . . . . . 227
インライン命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
ブロック命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
プログラムコード . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
ターミナル画⾯ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
ノート、ミニブロック . . . . . . . . . . . . . . . . . . . . . . . . . 231

A.1
A.2
A.3
A.4
A.5
A.6
A.7
A.8
A.9
A.10
A.11

– xiii –

⽬次

A.12
A.13
A.14
A.15
A.16
A.17
A.18
A.19
A.20

図 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
会話形式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
⽤語、索引 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
表紙、⼤扉、奥付 . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
PDF ファイル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
LATEX 関連 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
エラメッセージ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
その他 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237

付録 B

ファイルとフォルダ

239

付録 C

開発の背景

243

おわりに

253

索引

254

– xiv –

第1章

インストール

Re:VIEW Starter を使っていただき、ありがとうございます。
この章では、Re:VIEW Starter を使うために必要となる「Ruby」と「TeXLive」のインストール⽅法を説明します。

【この章の内容】

1.1
1.2
1.3
1.4

Ruby と TeXLive のインストール . . . . . . . . . . . . . . . .
プロジェクトを作成 . . . . . . . . . . . . . . . . . . . . . . .
サンプルの PDF ファイルを⽣成 . . . . . . . . . . . . . . . . .
注意点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

–1–

2
6
6
9

第 1 章 インストール

1.1

Ruby と TeXLive のインストール

Re:VIEW Starter で PDF を⽣成するには、Ruby と TeXLive のインストールが必要です。

• Ruby とは世界中で⼈気のあるプログラミング⾔語のことです。原稿ファイル（「*.re」ファイル）を読み込むのに必要です。
• TeXLive とは有名な組版ソフトのひとつです。PDF ファイルを⽣成するのに必要です。
これらのインストール⼿順を説明します。

♣ Docker の使い⽅を知っている場合
Docker とは、簡単に⾔えば「Windows や Mac で Linux コマンドを実⾏するためのソフトウェア」です*1 。

Docker の使い⽅が分かる⼈は、kauplan/review2.5*2 の Docker イメージを使ってください。これで Ruby と TeXLive の両⽅が使えるようになります。
▼ Docker イメージのダウンロードと動作確認$ docker pull kauplan/review2.5 ← 3GB 以上ダウンロードするので注意$ docker run --rm kauplan/review2.5 ruby --version
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu]$ docker run --rm kauplan/review2.5 uplatex --version
e-upTeX 3.14159265-p3.7.1-u1.22-161114-2.6 (utf8.uptex) (TeX Live 2017/Debi››an)...(省略)...
なお macOS のように Ruby が使える環境なら、「rake setup:dockerimage」を実⾏すると⾃動的に「docker pull kauplan/review2.5」が実⾏されます。

♣ macOS を使っている場合
macOS において、Ruby と TeXLive をインストールする⽅法を説明します。
Ruby のインストール
macOS には最初から Ruby がインストールされているため、Ruby を別途インス*1 Docker についてのこの説明は、技術的にはちっとも正確ではありません。しかし IT エンジニア以外に説明するには、このような説明で充分です。
*2 https://hub.docker.com/r/kauplan/review2.5/–2–

1.1 Ruby と TeXLive のインストール

トールする必要はありません。

Ruby がインストールされていることを確認するために、Terminal.app*3 を起動して以下のコマンドを⼊⼒してみましょう。なお各⾏の先頭にある「$ 」は⼊⼒せず、下線がついている部分のコマンドを⼊⼒してください。
▼ Ruby がインストールされていることを確認$ which ruby←下線が引かれたコマンドだけを⼊⼒すること/usr/bin/ruby←このような表⽰になるはず$ ruby --version ←下線が引かれたコマンドだけを⼊⼒することruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]
実際の出⼒結果は上と少し違うはずですが、だいたい合っていれば OK です。
また必要なライブラリをインストールするために、以下のコマンドも実⾏してください（各⾏の先頭にある「$ 」は⼊⼒せず、それ以降のコマンドを⼊⼒してくだ
さい）。
▼ 必要なライブラリをインストール### Rubyに詳しくない初⼼者向け$ rake setup:rubygems### Rubyに詳しい⼈向け$ gem install review --version=2.5$ review version
2.5.0 ←必ず「 2.5.0 」であること（ より新しいバージョンは未サポート ）..................................................
macOS 標準の Ruby では「gem install」がエラーになるmacOS には標準で Ruby がインストールされていますが、それを使って「gem install」を実⾏するとエラーになります。
▼ macOS 標準の Ruby では gem がインストールできない$ gem install review --version=2.5
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.3.0›› directory.
このエラーを回避するには、次のような⽅法があります。

(a) Homebrew などを使って別の Ruby をインストールする。
*3 Terminal.app は、ファインダで「アプリケーション」フォルダ > 「ユーティリティ」フォルダ >「ターミナル」をダブルクリックすると起動できます。

–3–

第 1 章 インストール(b) ~/.gemrc に「install: --user-install」という⾏を追加する。
(c) 「rubygems/」のようなフォルダを作り、そのパスを環境変数$GEM_HOMEに設定する。
しかし Ruby やコマンドラインに慣れていない初⼼者にとっては、どの⽅法も難しいでしょう。
そこで、(c) に相当する作業を⾃動的に⾏えるようにしました。それが、Rubyに詳しくない初⼼者向けのコマンド「rake setup:rubygems」です。詳しいことは lib/tasks/starter.rake の中の「task :rubygems」の定義を⾒てください。
また環境変数$GEM_HOME を設定するかわりに、Rakefile の冒頭で Gem.path を設定しています。

..................................................
MacTeX のインストール
次に、MacTeX をダウンロードします。MacTeX とは、macOS ⽤の TeXLive です。MacTeX はサイズが⼤きい（約 4GB）ので、本家ではなく以下のミラーサイトのどれかを使ってください。

• http://ftp.jaist.ac.jp/pub/CTAN/systems/mac/mactex/> mactex-20200407.pkg• http://ftp.kddilabs.jp/pub/ctan/systems/mac/mactex/> mactex-20200407.pkg• http://ftp.riken.go.jp/pub/CTAN/systems/mac/mactex/> mactex-20200407.pkg
ダウンロードができたら、ダブルクリックしてインストールしてください。
インストールしたら Terminal.app で次のコマンドを⼊⼒し、動作を確認してください（各⾏の先頭にある「$ 」は⼊⼒せず、それ以降のコマンドを⼊⼒してくだ
さい）。
▼ MacTeX のインストールができたことを確認$ which uplatex←下線が引かれたコマンドだけを⼊⼒すること/Library/TeX/texbin/uplatex$ uplatex --version ←下線が引かれたコマンドだけを⼊⼒すること
e-upTeX 3.14159265-p3.8.1-u1.23-180226-2.6 (utf8.uptex) (TeX Live 2020)...（ 省略 ）...
実際の出⼒結果は上と少し違うはずですが、だいたい合っていれば OK です。
最後に、MacTeX でヒラギノフォントを使うための準備が必要です（これをしな
いと、PDF ファイルの⽇本語フォントが⾒るに耐えません）。そのためには、以下の–4–

1.1 Ruby と TeXLive のインストール*4 をダウンロードしてください。
ページから「Bibunsho7-patch-1.5-20200511.dmg」• https://github.com/munepi/bibunsho7-patch/releases
ダウンロードしたらダブルクリックして解凍し、「Patch.app」をダブルクリックしてください。

♣ Windows を使っている場合
Windows において、Ruby と TeXLive をインストールする⽅法を説明します。
Ruby のインストール
以下のページにアクセスし、「Ruby+Devkit 2.7.3-1」をダウンロードしてインストールしてください。x64 版と x86 版の 2 つがあるので、お使いの Windows が 64bit
版なら x64 版を、32bit 版または不明なら x86 版をダウンロードしてください。

• https://rubyinstaller.org/downloads/
インストールしたら、コマンドプロンプトで以下のコマンドを⼊⼒し、Ruby が実⾏できることを確かめてください。
▼ Ruby が実⾏できることを確認

C:\Users\yourname> ruby --version ←「 ruby --version 」だけを⼊⼒
ruby 2.7.3-1 [x64-mingw32]
実際の出⼒結果は上と少し違うでしょうが、だいたい合っていれば OK です。
また以下のコマンドを実⾏し、必要なライブラリをインストールします。
▼ 必要なライブラリをインストール

C:\Users\yourname> gem install review --version=2.5
C:\Users\yourname> review version
2.5.0 ←必ず「 2.5.0 」であること（ より新しいバージョンは未サポート ）TeXLive のインストール
次に、Windows ⽤の TeXLive をインストールします。詳しくはこちらのページを参照してください。このうち、⼿順 (16) において右上の「すべて」ボタンを押してください（つまりすべてのパッケージを選ぶ）。

•「TeXLive2020 をインストールして LaTeX を始める」
https://tm23forest.com/contents/texlive2020-install-latex-b
egin*4 ⽇付が最新のものを選んでください。2020 年 6 ⽉時点では「20200511」が最新です。

–5–

第 1 章 インストール

インストールできたら、コマンドプロンプトで以下のコマンドを実⾏してみてください。
▼ コマンドが実⾏できることを確認

C:\Users\yourname> uplatex --version ←「 uplatex --version 」だけを⼊⼒
e-upTeX 3.14159265-p3.7.1-u1.22-161114-2.6 (utf8.uptex) (TeX Live 2020/W32T››eX)...（ 以下省略 ）...
実際の出⼒結果は上と少し違うでしょうが、だいたい合っていれば OK です。

1.2

プロジェクトを作成

Ruby と TeXLive をインストールしたら、次に本を作るための「プロジェクト」を作成しましょう。
以下の Web サイトにアクセスしてください。

• https://kauplan.org/reviewstarter/
アクセスしたら、画⾯の指⽰に従って操作をしてください（詳細は省略します）。
するとプロジェクトが作成されて、zip ファイルがダウンロードできます。
以降では、プロジェクトの zip ファイル名が「mybook.zip」だったとして説明し
ます。

1.3

サンプルの PDF ファイルを⽣成

プロジェクトの zip ファイルをダウンロードしたら、解凍してサンプルの PDF
ファイルを⽣成してみましょう。

♣ Docker の場合
Docker を使う場合は、次のような⼿順でサンプルの PDF ファイルを⽣成してみましょう。
▼ Docker を使って PDF ファイルを⽣成する$ unzip mybook.zip← zipファイルを解凍$ cd mybook/←ディレクトリを移動$ docker run --rm -v $PWD:/work -w /work kauplan/review2.5 rake pdf–6–

1.3 サンプルの PDF ファイルを⽣成$ ls *.pdf
mybook.pdf← PDFファイルが⽣成できたことを確認

これで PDF ファイルが⽣成されるはずです。⽣成できなかった場合は、Twitterで「#reviewstarter」タグをつけて質問してください（相⼿先不要）。

Docker を使って PDF ファイルが作成できることを確認したら、このあとは docker
コマンドを使わずとも「rake docker:pdf」だけで PDF ファイルが⽣成できます。
▼ より簡単に PDF ファイルを⽣成する$ docker run --rm -v $PWD:/work -w /work kauplan/review2.5 rake pdf$ rake docker:pdf←これだけでPDFファイルが⽣成される..................................................
もっと簡単に PDF ファイルを⽣成するための Tips
環境変数「$RAKE_DEFAULT」を設定すると、引数なしの「rake」コマンドだ
けで PDF ファイルが⽣成できます。
▼ 環境変数「$RAKE_DEFAULT」を設定する$ export RAKE_DEFAULT="docker:pdf" ←環境変数を設定$ rake docker:pdf$ rake←「 rake docker:pdf 」が実⾏される
またシェルのエイリアス機能を使うと、コマンドを短縮名で呼び出せます。
▼ シェルのエイリアス機能を使う$ alias pdf="rake docker:pdf" ←エイリアスを設定$ pdf←「 rake docker:pdf 」が実⾏される..................................................
♣ macOS の場合
macOS を使っている場合は、Terminal.app*5 を開いて以下のコマンドを実⾏してください。ここで、各⾏の先頭にある「$ 」は⼊⼒せず、それ以降のコマンドを⼊⼒
してください。
▼ PDF ファイルを⽣成する*5 繰り返しになりますが、Terminal.app はファインダで「アプリケーション」フォルダ > 「ユーティリティ」フォルダ > 「ターミナル」をダブルクリックすると起動できます。

–7–

第 1 章 インストール$ unzip mybook.zip$ cd mybook/$ rake pdf$ ls *.pdf
mybook.pdf$ open mybook.pdf← zipファイルを解凍し 、←ディレクトリを移動← PDFファイルを⽣成← PDFファイルが⽣成されたことを確認← PDFファイルを開く

これで PDF ファイルが⽣成されるはずです。⽣成できなかった場合は、Twitterで「#reviewstarter」タグをつけて質問してください（相⼿先不要）。

..................................................
もっと簡単に PDF ファイルを⽣成するための Tips
環境変数「$RAKE_DEFAULT」を設定すると、引数なしの「rake」コマンドだ
けで PDF ファイルが⽣成できます。
▼ 環境変数「$RAKE_DEFAULT」を設定する$ export RAKE_DEFAULT="pdf" ←環境変数を設定$ rake pdf$ rake←「 rake pdf 」が実⾏される
またシェルのエイリアス機能を使うと、コマンドを短縮名で呼び出せます。
▼ シェルのエイリアス機能を使う$ alias pdf="rake pdf"
$ pdf

←エイリアスを設定←「 rake pdf 」が実⾏される..................................................
♣ Windows の場合
Windows を使っている場合は、まずプロジェクトの zip ファイル（mybook.zip）
をダブルクリックして解凍してください。
そしてコマンドプロンプトで以下のコマンドを実⾏してください。
▼ PDF ファイルを⽣成する

C:\Users\yourname> cd mybook←解凍してできたフォルダに移動
C:\Users\yourname\mybook> rake pdf ← PDFファイルを⽣成
C:\Users\yourname\mybook> dir *.pdf ← PDFファイルが⽣成されたことを確認
これで PDF ファイルが⽣成されるはずです。⽣成できなかった場合は、Twitterで「#reviewstarter」タグをつけて質問してください（相⼿先不要）。

–8–

1.4 注意点

1.4

注意点

エラーが発⽣したときは、「♣ コンパイルエラーになったら」(p.19) の説明を参考にしてください。
そのほか、次の点に注意してください。

• HTML ファイルを⽣成するときは「rake web」
（または「rake docker:web」）
を実⾏してください。

• ePub フ ァ イ ル を ⽣ 成 す る と き は「rake epub」（ ま た は「rakedocker:epub」）を実⾏してください。

• Markdown ファイルを⽣成するときは「rake markdown」（または「rakedocker:markdown」）を実⾏してください。

• Starter では「review-pdfmaker」コマンドや「review-epubmaker」コマ
ンドが使えません（実⾏はできますが望ましい結果にはなりません）。必ず「rake pdf」や「rake epub」を使ってください。
繰り返しになりますが、エラーが発⽣したときは「♣ コンパイルエラーになったら」(p.19) の説明を読んでみてください。

–9–

第

2章

チュートリアル

前の章では、Ruby と TeXLive のインストールを説明し、サンプル PDF ファイ
ルを⽣成しました。
この章では、⾃分で書いた原稿ファイルから PDF ファイルを⽣成する⽅法を説明します。
なおこの章は、Ruby と TeXLive のインストールが済んでいること、またサン
プルの PDF ファイルが⽣成できたことを前提にしています。まだの⼈は前の章を⾒てください。

【この章の内容】

2.1
2.2
2.3
2.4
2.5
2.6

⽤語の説明 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
フォルダとファイルの説明 . . . . . . . . . . . . . . . . . . . .
原稿の追加と変更 . . . . . . . . . . . . . . . . . . . . . . . . .
基本的な記法 . . . . . . . . . . . . . . . . . . . . . . . . . . .
印刷⽤ PDF と電⼦⽤ PDF . . . . . . . . . . . . . . . . . . . .
⾼速プレビュー . . . . . . . . . . . . . . . . . . . . . . . . . .

– 11 –

12
13
15
20
34
36

第 2 章 チュートリアル

2.1

⽤語の説明

このあとの説明で使⽤する⽤語を紹介します。

Starter
Re:VIEW Starter のことです。「Re:VIEW Starter」はちょっと⻑いので、この⽂章では省略して「Starter」と呼んでいます。
プロジェクトの zip ファイル
Re:VIEW Starter の Web サイトでプロジェクトを作ったときに、最後にダウンロードされる zip ファイルのことです。単に「zip ファイル」と呼ぶこともあります。

mybook.zip
説明で使⽤するプロジェクトの zip ファイル名です。これはサンプルであり、実際にはたとえば「samplebook.zip」だったり「brabra-book.zip」だったりします。
プロジェクトのフォルダ

zip ファイルを解凍したときにできるフォルダです。たとえば zip ファイル名
が「mybook.zip」なら、解凍してできるフォルダは「mybook/」なので、これがプロジェクトのフォルダになります。
「mybook/」フォルダ
プロジェクトのフォルダのことです。フォルダ名はあくまでサンプルであり、プロジェクトごとに異なることに注意してください。
原稿ファイル原稿となるテキストファイルです。これをもとに PDF ファイルが⽣成されます。原稿ファイルは拡張⼦が「.re」なので、「*.re ファイル」と呼ぶこともあります。なお⽂字コードは必ず UTF-8 にしてください。

*.re ファイル
原稿ファイルのことです。拡張⼦が「.re」なので、こう呼ばれることがあります。
「contents/」フォルダ
原稿ファイルが置かれているフォルダです。最近の Re:VIEW Starter では、
デフォルトで原稿ファイルを「contents/」フォルダに置くことになっています（以前はプロジェクトのフォルダ直下に置かれていました）。
テキストエディタ
テキストファイルを作成したり変更するためのアプリケーションのことで– 12 –

2.2 フォルダとファイルの説明す。単に「エディタ」と呼ぶこともあります。有名なものだと「Visual Studio

Code」「Atom」「Emacs」「Vim」「サクラエディタ」「秀丸」「メモ帳」などが
あります。
エディタ
テキストエディタのことです。
コンパイル
原稿ファイルから PDF ファイルを⽣成することです。Re:VIEW Starter では PDF だけでなく HTML や ePub のファイルも⽣成できるので、どの形式を⽣成するかを明⽰するなら「PDF へコンパイルする」「ePub へコンパイルする」などと⾔います。

2.2

フォルダとファイルの説明

プロジェクトの「mybook.zip」を解凍すると、数多くのファイルが作られます。それらのうち、重要なものを選んで解説します。すべてのファイルについての解説は付
録 B「ファイルとフォルダ」を参照してください。

catalog.yml
原稿ファイルが順番に並べられたファイルです。原稿ファイルを追加した・削除した場合は、このファイルも編集します。

config-starter.yml
Starter 独 ⾃ の 設 定 フ ァ イ ル で す 。Starter で は「cofnig.yml」と「cofnigstarter.yml」の両⽅を使います。
config.yml
Re:VIEW の設定ファイルです。Starter によりいくつか変更と拡張がされています。

contents/
原稿ファイルを置くフォルダです*1 。

contents/*.re
原稿ファイルです。章 (Chapter) ごとにファイルが分かれます。

images/
画像ファイルを置くフォルダです。この下に章 (Chapter) ごとのサブフォル
ダを作ることもできます。
*1 原稿ファイルを置くフォルダ名は「config.yml」の「contentdir: contents」で変更できます。

– 13 –

第 2 章 チュートリアル

mybook-pdf/
PDF ファイルを⽣成するときの中間⽣成ファイルが置かれるフォルダです。
LATEX ファイルをデバッグするときに必要となりますが、通常は気にする必要はありません。

mybook.pdf
⽣成された PDF ファイルです。ファイル名はプロジェクトによって異なります。

review-ext.rb
Re:VIEW を拡張するためのファイルです。このファイルから「lib/ruby/*.rb」
が読み込まれています。

sty/
LATEX で使うスタイルファイルが置かれるフォルダです。
sty/mycolophon.sty
奥付*2 の内容が書かれたスタイルファイルです。奥付を変更したい場合はこのファイルを編集します。

sty/mystyle.sty
ユーザが独⾃に LATEX マクロを定義・上書きするためのファイルです。中⾝は空であり、ユーザが⾃由に追加して構いません。

sty/mytextsize.sty
PDF における本⽂の⾼さと幅を定義したファイルです。LATEX では最初に本⽂の⾼さと幅を決める必要があるので、他のスタイルファイルから分離されてコンパイルの最初に読み込めるようになっています。

sty/mytitlepage.sty
⼤扉*3 の内容が書かれたスタイルファイルです。⼤扉のデザインを変更したい場合はこのファイルを編集します。

sty/starter*.sty
Starter 独⾃のスタイルファイルです。ここに書かれた LATEX マクロを変更したい場合は、このファイルを変更するよりも「sty/mystyle.sty」に書いたほうがバージョンアップがしやすくなります。

*2 奥付とは、本のタイトルや著者や出版社や版や刷などの情報が書かれたページのことです。通常は本のいちばん最後のページに置かれます。
*3 ⼤扉とは、タイトルページのことです。表紙のことではありません。

– 14 –

2.3 原稿の追加と変更

原稿の追加と変更

2.3

原稿の追加と変更の⽅法を説明します。
原稿の追加より変更のほうが簡単なので、変更する⽅法を先に説明します。

♣ 既存の原稿ファイルを変更する
プロジェクトのフォルダには、サンプルとなる原稿ファイルが存在します。まずは
これを変更してみましょう。

(1) まず、お好みのテキストエディタを使って「mybook/contents/00-preface.re」
を開いてください。

(2) 次に、先頭の「= はじめに」の下に何か適当なテキストを追加して（例：リスト 2.1）、原稿ファイルを保存してください。
(3) 原稿ファイルを保存したら、コンパイル*4 しましょう。Mac なら Terminal.app*5 、Windows ならコマンドプロンプトを開き、「rake pdf」（またはDocker を使っているなら「rake docker:pdf」）を実⾏してください。
▼ リスト 2.1: 原稿ファイルの内容= はじめに⾒ろ 、⼈がゴミのようだ！

←追加...（ 以下省略 ）...

これで新しい PDF ファイルが⽣成されるはずです。⽣成された新しい PDF ファ
イルを開き、さきほど追加した⾏が「はじめに」の章に表⽰されていることを確認してください。

..................................................
プロジェクトのフォルダに原稿ファイルがあるとコンパイルエラー
Starter のデフォルトでは、原稿ファイル (*.re) を「contents/」フォルダに置くよう設定されています。この場合、もし原稿ファイルがプロジェクトのフォ*4 「コンパイル」とは、ここでは原稿ファイルから PDF ファイル（または HTML や ePub）を⽣成することです。このあとも使う⽤語なので覚えてください。また⽤語については「2.1 ⽤語の説明」(p.12) も参照してください。
*5 Terminal.app は、ファインダで「アプリケーション」フォルダ > 「ユーティリティ」フォルダ >「ターミナル」をダブルクリックすると起動できます。

– 15 –

第 2 章 チュートリアル

ルダ（たとえば「mybook/」の直下）にあると、コンパイル*6 できずエラーになります。
エラーになるのは、Starter の仕組みに起因します。Starter ではコンパイル時に、「contents/」に置かれた原稿ファイル（*.re）をプロジェクトフォルダの直下にコピーしてからコンパイルします）*7 。そのため、プロジェクトフォルダ
直下に別の原稿ファイルがあるとコンパイル時に上書きしてしまう可能性があるため、あえてエラーにしているのです。

..................................................
ここまでが、既存の原稿ファイルを変更する⽅法でした。次に、新しい原稿ファイルを追加する⽅法を説明します。

♣ 新しい原稿ファイルを追加する
新しい原稿ファイルを追加するには、次のようにします。

(1) 新しい原稿ファイルを作成する。
(2) 作成した原稿ファイルをプロジェクトに登録する。
(3) PDF ファイルを⽣成し、原稿の内容が反映されることを確認する。
順番に説明しましょう。

(1) 新しい原稿ファイルを作成する
お好みのテキストエディタを使って、新しい原稿ファイル「01-test.re」を作成します。
このとき、次の点に注意してください。

• 原稿ファイルの拡張⼦は「.re」にします。
• 原稿ファイルの置き場所は「contents/」フォルダにします。つまりファイル
パスは「mybook/contents/01-test.re」になります。
• 原稿ファイルの⽂字コードは「UTF-8」にします。
新しい原稿ファイル「contents/01-test.re」の中⾝は、たとえばリスト 2.2 のようにしてください。
▼ リスト 2.2: 原稿ファイル「contents/01-test.re」= サンプル章タイトル*6 コンパイルとは、ここでは原稿ファイルから PDF ファイルを⽣成することを指します。
*7 Re:VIEW 2.5 の仕様上、コンパイル時に原稿ファイルがプロジェクトフォルダの直下にないといけないため。

– 16 –

2.3 原稿の追加と変更//abstract{
概要概要概要//}== サンプル節タイトル
本⽂本⽂本⽂..................................................
原稿ファイルに番号をつけるべきか
この例では原稿ファイル名を「01-test.re」にしました。しかしファイル名に「01-」のような番号は、必ずしもつける必要はありません（つけてもいいし、つけなくてもいい）。
ファイル名に番号をつけるのは、利点と⽋点があります。

• 利点は、Mac のファインダや Windows のエクスプローラで表⽰したときに、ファイルが章の順番に並ぶことです。

• ⽋点は、章の順番を⼊れ替えるときにファイル名の変更が必要なこと、またそれにより章 ID*8 が変わるのでその章や節を参照している箇所もすべて変更になることです。番号をつけていない場合は、「catalog.yml」での順番を⼊れ替えるだけで済み、参照箇所も修正する必要はありません。
⾃分の好きなほうを選んでください。

..................................................
(2) 原稿ファイルをプロジェクトに登録する
次に、作成した原稿ファイルをプロジェクトに登録しましょう。プロジェクトのフォルダにある「catalog.yml」をテキストエディタで開き、リスト 2.3 のように変更
してください。なお、このファイルでは「#」以降は⾏コメントであり読み⾶ばされます。
▼ リスト 2.3: ファイル「catalog.yml」
PREDEF:- 00-preface.re
CHAPS:- 01-install.re- 01-test.re- 02-tutorial.re←この⾏を削除←この⾏を追加*8 章 ID については「♣ 章 ID」(p.50) で説明します。

– 17 –

第 2 章 チュートリアル

APPENDIX:POSTDEF:- 99-postface.re#### ■Tips## ...（ 以下省略 ）...

ファイルを変更したら、忘れずに保存してください。
これで、新しい原稿ファイルがプロジェクトに登録できました。

(3) PDF ファイルを⽣成し、原稿の内容が反映されたか確認する
試しに PDF ファイルを⽣成してみましょう。Mac なら Terminal.app、Windows
ならコマンドプロンプトを開き、次のコマンドを実⾏してください。
▼ PDF ファイルを⽣成する$ rake pdf$ rake docker:pdf← Dockerを使っていない場合← Dockerを使っている場合

新しい PDF ファイルが⽣成されるので、表⽰してみてください。新しい原稿ファ
イルの章が追加されていれば成功です。

♣ 「catalog.yml」の説明「catalog.yml」の内容は次のような構造になっています。

•「PREDEF:」は「まえがき」を表します。
•「CHAPS:」は本⽂を表します。
•「APPENDIX:」は付録を表します。
•「POSTDEF:」は「あとがき」を表します。
▼ ファイル「catalog.yml」
PREDEF:- 00-preface.re←まえがきの章

CHAPS:- 01-install.re- 02-tutorial.re- 03-syntax.re

←本⽂の章
←本⽂の章
←本⽂の章

– 18 –

2.3 原稿の追加と変更

APPENDIX:- 92-filelist.re←付録の章

POSTDEF:- 99-postfix.re←あとがきの章

また次のような点に注意してください。

• まえがきや付録やあとがきは、なければ省略できます。
• まえがきとあとがきには、章番号や節番号がつきません。
• ⽬次はまえがきのあとに⾃動的につけられます*9 。
• ⼤扉（タイトルページ）や奥付も⾃動的につけられます*10 。

..................................................
YAML 形式「catalog.yml」の内容は、「YAML」という形式で書かれています。YAML については Google 検索で調べてください。ここでは 3 点だけ注意点を紹介します。

• タブ⽂字を使わないこと。
• 「-」のあとに半⾓空⽩をつけること。
• 「#」以降は⾏コメントとして読み⾶ばされる。

..................................................
♣ コンパイルエラーになったら
PDF ファイルの⽣成がエラーになったら、以下の点を確認してください。
• インライン命令がきちんと閉じているか• ブロック命令の引数が⾜りているか、多すぎないか•「//}」が⾜りてないか、または多すぎないか•「@<fn>{}」や「@<img>{}」や「@<table>{}」のラベルが合っているか•「@<chapref>{}」で指定した章 ID が合っているか•「@<secref>{}」で指定した節や項が存在するか• 脚注の中で「]」を「\]」とエスケープしているか•「//image」で指定した画像ファイルが存在するか• 原稿ファイル名を間違っていないか*9 ⽬次をつけたくない場合は、「config.yml」に「toc: false」を設定してください。
*10 ⼤扉をつけたくない場合は、「config.yml」に「titlepage: false」を設定してください。また奥付をつけたくない場合は「colophon: false」を設定してください。

– 19 –

第 2 章 チュートリアル• 原稿ファイルの⽂字コードが UTF-8 になっているか• 索引に何も登録してないのに索引機能をオンにしていないか（詳細は「3.17 ⽤
語、索引」(p.125) を参照）
詳しくは「5.1 コンパイルエラー」(p.172) を⾒てください。
それでもエラーになる場合は、中間ファイルを削除してみましょう。たとえばプロ
ジェクト名が「mybook」だったら、「mybook-pdf」というフォルダが作られているはずです。これを削除してから、コンパイルし直してみてください。
▼ 中間ファイルを削除してコンパイルし直す$ rm -rf mybook-pdf$ rake pdf←中間ファイルを削除して 、←コンパイルし直す

それでもダメなら、「#reviewstarter」というタグでツイートしていただければ、相談に乗ります。

♣ ⽂章をチェックする
Starter では、「textlint」というツールを使って原稿の⽂章をチェックできます。
・

・

・

・

・

たとえば「Starter を使うときれいな PDF を作成することができます」という⽂
・

・

・

・

章は、「Starter を使うときれいな PDF を作成できます」のように簡潔にできます。
このような指摘を⾏ってくれるのが textlint です。

textlint を Starter のプロジェクトで使う⽅法は、「6.11 textlint による⽂章チェック」(p.219) で解説しています。今はまだ textlint を使う必要はありませんが、Starterに慣れてきたら使ってみてください。

2.4

基本的な記法

原稿ファイルは、ある決まった書き⽅（記法）に従って記述します。たとえば、次のような記法があります。

• 章 (Chapter) は「= 」で始め、節 (Section) は「== 」で始める。
• 箇条書きは「 * 」で始める。
• プログラムコードは「//list{...//}」で囲う。
• 強調は「@<strong>{...}」または「@<B>{...}」で囲う。
ここでは記法のうち基本的なものを説明します。詳しいことは第 3 章「記法」で説明します。

– 20 –

2.4 基本的な記法♣ コメント
⾏コメントは「#@#」で、また範囲コメントは「#@+++」と「#@---」で表します。
どちらも⾏の先頭から始まってないと、コメントとして認識されません。
▼ サンプル
本⽂1 。
#@#本⽂2 。
本⽂3 。
#@+++
本⽂4 。
#@--本⽂5 。

▼ 表⽰結果本⽂ 1。本⽂ 3。
本⽂ 5。
詳しくは「3.1 コメント」(p.42) を参照してください。

♣ 段落と改⾏
空⾏があると、新しい段落になります。改⾏は無視されるか、または半⾓空⽩扱いになります。通常は 1 ⽂ごとに改⾏して書きます。
▼ サンプル
⾔葉を慎みたまえ 。君はラピュタ王の前にいるのだ 。
これから王国の復活を祝って 、諸君にラピュタの⼒を⾒せてやろうと思ってね 。
⾒せてあげよう 、ラピュタの雷を！
旧約聖書にあるソドムとゴモラを滅ぼした天の⽕だよ 。
ラーマヤーナではインドラの⽮とも伝えているがね 。
▼ 表⽰結果
⾔葉を慎みたまえ。君はラピュタ王の前にいるのだ。
これから王国の復活を祝って、諸君にラピュタの⼒を⾒せてやろうと思ってね。⾒せてあげよう、ラピュタの雷を！

– 21 –

第 2 章 チュートリアル

旧約聖書にあるソドムとゴモラを滅ぼした天の⽕だよ。ラーマヤーナではインドラの⽮とも伝えているがね。
詳しくは「3.2 段落と改⾏と空⾏」(p.43) を参照してください。

♣ ⾒出し
章 (Chapter) や節 (Section) といった⾒出しは、「= 」や「== 」で始めます。また
章には概要を書くといいでしょう。
▼ サンプル= 章(Chapter)⾒出し//abstract{
章の概要 。
//}== 節(Section)⾒出し=== 項(Subsection)⾒出し==== ⽬(Subsubsection)⾒出し===== 段(Paragraph)⾒出し====== ⼩段(Subparagraph)⾒出しStarter では、章 (Chapter) は 1 ファイルにつき 1 つだけにしてください。1 つのファイルに複数の章 (Chapter) を⼊れないでください。
⾒出しについての詳細は「3.3 ⾒出し」(p.47) を参照してください。

♣ 箇条書き
番号なし箇条書きは「 * 」で始めます（先頭に半⾓空⽩が必要）。
▼ サンプル* 箇条書き1* 箇条書き2** ⼊れ⼦の箇条書き*** ⼊れ⼦の⼊れ⼦– 22 –

2.4 基本的な記法▼ 表⽰結果• 箇条書き 1• 箇条書き 2◦ ⼊れ⼦の箇条書き∗ ⼊れ⼦の⼊れ⼦
番号つき箇条書きは「 1. 」のように始める⽅法と、「 - A. 」のように始める⽅法があります（どちらも先頭に半⾓空⽩が必要）。後者では番号の⾃動採番はされず、指定された⽂字列がそのまま出⼒されます。
▼ サンプル
1. この記法では数字しか指定できず 、
2. また⼊れ⼦にもできない 。
- (A) この記法だと 、英数字だけでなく- (B) 任意の⽂字列が使える-- (B-1) ⼊れ⼦もできるし 、*** 番号なし箇条書きも含められる▼ 表⽰結果1. この記法では数字しか指定できず、
2. また⼊れ⼦にもできない。
(A) この記法だと、英数字だけでなく(B) 任意の⽂字列が使える(B-1) ⼊れ⼦もできるし、• 番号なし箇条書きも含められる
箇条書きの詳細は「3.4 箇条書きと定義リスト」(p.56) を参照してください。

♣ ⽤語リスト
⽤語リスト（HTML でいうところの「<dl><dt><dd>」）は、「 : 」で始めて*11 、次の⾏からインデントします*12 。
*11 先頭の半⾓空⽩は⼊れるようにしましょう。過去との互換性のため、先頭の半⾓空⽩がなくても動作しますが、箇条書きとの整合性のために半⾓空⽩を⼊れることを勧めます。
*12 説明⽂のインデントは、半⾓空⽩でもタブ⽂字でもいいです。

– 23 –

第 2 章 チュートリアル▼ サンプル
: ⽤語1
説明⽂ 。
説明⽂ 。
: ⽤語2
説明⽂ 。
説明⽂ 。

▼ 表⽰結果⽤語 1
説明⽂。説明⽂。
⽤語 2
説明⽂。説明⽂。

詳しくは「♣ 定義リスト」(p.58) を参照してください。

♣ 太字と強調
太字は「@<b>{...}」で囲み、強調は「@<B>{...}」または「@<strong>{...}」
で囲みます。強調は、太字になるだけでなくフォントがゴシック体になります。
▼ サンプル
テキスト@<b>{テキスト}テキスト 。
テキスト@<B>{テキスト}テキスト 。
▼ 表⽰結果
テキストテキストテキスト。
テキストテキストテキスト。
⽇本語の⽂章では、強調するときは太字のゴシック体にするのがよいとされています。なので強調には「@<B>{...}」または「@<strong>{...}」を使い、「@<b>{...}」
は使わないでください。
強調や太字などテキストの装飾についての詳細は「3.6 強調と装飾」(p.65) を参照
してください。

– 24 –

2.4 基本的な記法..................................................
インライン命令「@<B>{...}」のような記法はインライン命令と呼ばれます。インライン命令
は⼊れ⼦にできますが（Starter による拡張）、複数⾏を含めることはできません。詳細は「♣ インライン命令」(p.63) を⾒てください。

..................................................

♣ 等幅フォント
⽂字列を等幅フォントで表⽰するには、「@<tt>{...}」を使います。ただしこれを使うことはお勧めしません。それよりも、それぞれの⽤途に合ったインライン命令を使いましょう。

• プログラムコードやコマンド⽂字列を表すには「@<code>{...}」を使ってください。違いの分かりやすい例でいうと、たとえば「@<tt>{'`}」は「’‘」と表⽰され、「@<code>{'`}」は「'`」と表⽰されます*13 。

• ファイル名を表すには「@<file>{...}」を使ってください。等幅フォントではなくゴシック体で表⽰されます。

♣ プログラムリスト
プログラムリストは「//list[ラベル][説明⽂]{ ... //}」で囲みます。

• ラベルは、他と重複しない⽂字列にします。
•「@<list>{ラベル名}」のようにプログラムリストを参照できます。
• 説明⽂に「]」を含める場合は、「\]」のようにエスケープします。
▼ サンプル
サンプルコードを@<list>{fib1}に⽰します 。
//list[fib1][フィボナッチ数列]{
def fib(n):return n if n <= 1 else fib(n-1) + fib(n-2)//}▼ 表⽰結果サンプルコードをリスト 2.4 に⽰します。

*13 使⽤する等幅フォントによっては同じように表⽰されます。

– 25 –

第 2 章 チュートリアル▼ リスト 2.4: フィボナッチ数列
def fib(n):return n if n <= 1 else fib(n-1) + fib(n-2)

第 1 引数と第 2 引数のどちらも、省略できます。たとえば第 1 引数だけを省略するには「//list[][説明]{」のようにします。両⽅とも省略するには「//list[][]{」
または「//list{」のようにします。
またプログラムリストの中で、インライン命令が使えます*14 。たとえば次の例では、追加した箇所を「@<ins>{...}」で、削除した箇所を「@<del>{...}」で表しています。
▼ サンプル//list{function fib(n) {@<del>|if (n <= 1) { return n; }|@<del>|else{ return fib(n-1) + fib(n-2); }|@<ins>|return n <= 1 ? n : fib(n-1) + fib(n-2);|}//}▼ 表⽰結果function fib(n) {if (n <= 1) { return n; }else
{ return fib(n-1) + fib(n-2); }return n <= 1 ? n : fib(n-1) + fib(n-2);}

その他、⾏番号をつけたり外部ファイルを読み込んだりできます。プログラムコー
ドについての詳細は「3.7 プログラムリスト」(p.68) を参照してください。
また出⼒結果を表す「//output」という命令もあります。詳細は「♣ 出⼒結果」(p.76) を参照してください。

*14 プログラムリストの中では、「@<B>{}」（強調）ではなく「@<b>{}」（太字）を使ってください。な

ぜなら、「@<B>{}」を使うとフォントが等幅フォントからゴシック体に変更されてしまい、表⽰がずれてしまうからです。

– 26 –

2.4 基本的な記法..................................................
ブロック命令「//list{ ... //}」のような形式の命令を、ブロック命令といいます。ブロック命令は⼊れ⼦にできますが（Starter による拡張）、できないものもあります。詳細は「♣ ブロック命令」(p.64) を⾒てください。

..................................................

♣ ターミナル画⾯
ターミナル（端末）の画⾯は、「//terminal{ ... //}」を使います。次の例では、引数にラベル名と説明⽂字列を指定します。また「@<userinput>{...}」はユーザ⼊⼒を表します。
▼ サンプル//terminal[term-1][PDFを⽣成]{$ @<userinput>{rake pdf}›}
$ @<userinput>{rake docker:pdf}//}@<balloon>{Dockerを使わない場合›@<balloon>{Dockerを使う場合}▼ 表⽰結果▼ リスト 2.5: PDF を⽣成$ rake pdf$ rake docker:pdf← Dockerを使わない場合← Dockerを使う場合

ラベル名を指定していれば、プログラムリストと同じように「@<list>{ラベル名}」で参照できます。またラベル名と説明⽂字列はどちらも省略可能です。どちらも省略すると「//terminal{ ... //}」のように書けます。
詳しくは「3.9 ターミナル」(p.81) を参照してください。

♣ 脚注
脚 注 は 、脚 注 を つ け た い 箇 所 に「@<fn>{ラ ベ ル}」を つ け 、段 落 の 終 わ り に「//footnote[ラベル][脚注⽂]」を書きます。脚注⽂の中では「]」を「\]」と書いてください。

– 27 –

第 2 章 チュートリアル▼ サンプル
本⽂テキスト@<fn>{fn-12} 。
//footnote[fn-12][このように脚注⽂を書きます 。]▼ 表⽰結果本⽂テキスト*15 。

♣図
図を⼊れるには、「//image[画像ファイル名][説明⽂][オプション]」を使います。

• 画像ファイルは「images/」フォルダに置きます。
• 画像ファイルの拡張⼦は指定しません。
• ラベルを使って「@<img>{ラベル}」のように参照できます。
▼ サンプル//image[tw-icon][サンプル画像][scale=0.3]▼ 表⽰結果▲ 図 2.1: サンプル画像

Starter では、画像を⼊れる位置を指定したり、画像の周りに枠線をつけたりできます。詳しくは「3.13 画像」(p.94) を参照してください。

♣ ノート
Starter では、本⽂を補⾜する⽂章を「ノート」という囲み枠で表します。
*15 このように脚注⽂を書きます。

– 28 –

2.4 基本的な記法▼ サンプル//note[ムスカの苦⼿なもの]{
実は 、ムスカには「 ⾍が苦⼿ 」という公式な設定があります 。
有名な『 読める 、読めるぞ！ 』のシーンでムスカが顔の周りに群がるハエを追い››払うのは 、邪魔だったからだけでなく 、⾍が苦⼿だったからです 。
//}▼ 表⽰結果..................................................
ムスカの苦⼿なもの
実は、ムスカには「⾍が苦⼿」という公式な設定があります。有名な『読める、読めるぞ！』のシーンでムスカが顔の周りに群がるハエを追い払うのは、邪魔だったからだけでなく、⾍が苦⼿だったからです。

..................................................

ノート本⽂には箇条書きやプログラムコードを埋め込めます。詳しくは「3.11 ノート」(p.85) を参照してください。
また、補⾜情報や注意喚起や警告を表す囲み枠もあります。詳しくは「♣ ノート以
外のミニブロック」(p.87) を参照してください。
▼ サンプル//info[解決のヒント]{
本製品を⼿に取り 、古くから伝わるおまじないを唱えてみましょう 。
すると天空の城への⾨が開きます 。
//}//caution[使⽤上の注意]{
本製品を⽯版にかざすと 、天空の城から雷が発射されます 。
周りに⼈がいないことを確かめてから使⽤してください 。
//}//warning[重⼤な警告]{
本製品を持ったまま滅びの呪⽂を唱えると 、天空の城は⾃動的に崩壊します 。
⼤変危険ですので 、決して唱えないでください 。
//}– 29 –

第 2 章 チュートリアル▼ 表⽰結果解決のヒント
本製品を⼿に取り、古くから伝わるおまじないを唱えてみましょう。すると
天空の城への⾨が開きます。

使⽤上の注意本製品を⽯版にかざすと、天空の城から雷が発射されます。周りに⼈がいないことを確かめてから使⽤してください。

重⼤な警告
本製品を持ったまま滅びの呪⽂を唱えると、天空の城は⾃動的に崩壊します。
⼤変危険ですので、決して唱えないでください。

♣表
表は、次のように書きます。

•「//table[ラベル][説明⽂]{ ... //}」で囲みます。
• セルは 1 つ以上のタブで区切ります。
• ヘッダの区切りは「-」または「=」を 12 個以上並べます。
• ラベルを使って「@<table>{ラベル}」のように参照できます。
▼ サンプル//table[tbl-31][サンプル表]{
Name
Val1
Val2
-------------------AA
12
34
BB
56
78
//}

– 30 –

2.4 基本的な記法▼ 表⽰結果▼ 表 2.1: サンプル表
Name
AA
BB

Val1
12
56

Val2
34
78

PDF ではセルの右寄せ・左寄せ・中央揃えができます。また CSV ファイルからデータを読み込めます。詳しくは「3.14 表」(p.101) を参照してください。

♣ 数式
LATEX の書き⽅を使って数式を記述できます。
▼ サンプル//texequation[euler][オイラーの公式]{
e^{i\theta} = \sin{\theta} + i\cos{\theta}//}@<m>$\theta = \pi$のときは@<m>$e^{i\pi} = -1$となり 、これはオイラー››の等式と呼ばれます 。
▼ 表⽰結果式 2.1: オイラーの公式

eiθ = sin θ + i cos θθ = π のときは eiπ = −1 となり、これはオイラーの等式と呼ばれます。
詳しくは「3.15 数式」(p.116) を参照してください。

♣ 会話形式
Starter では、会話形式も書けます。会話形式は、アイコン画像を使う⽅法と使わない⽅法があります。
▼ サンプル– 31 –

第 2 章 チュートリアル//talklist{//talk[avatar-b]{
あの⽅は何も盗らなかったわ 。私のために闘ってくださったんです 。
//}//talk[avatar-g]{
いや 、ヤツはとんでもないものを盗んでいきました……
あなたの⼼です 。
//}//}▼ 表⽰結果
「あの⽅は何も盗らなかったわ。私のために闘ってくださったんです。」「いや、ヤツはとんでもないものを盗んでいきました……あなたの⼼です。」▼ サンプル//talklist{//talk[][クラリス]{
あの⽅は何も盗らなかったわ 。私のために闘ってくださったんです 。
//}//talk[][銭形警部]{
いや 、ヤツはとんでもないものを盗んでいきました……
あなたの⼼です 。
//}//}▼ 表⽰結果クラリス：「あの⽅は何も盗らなかったわ。私のために闘ってくださったんです。」
銭形警部：「いや、ヤツはとんでもないものを盗んでいきました……あなたの⼼です。」

詳しくは「3.16 会話形式」(p.117) を参照してください。

– 32 –

2.4 基本的な記法..................................................
⽩黒印刷でも判別できる画像を使う
このサンプルでは、⾊が違うだけのアイコン画像を使っています。そのせいで、⽩黒印刷すると誰が誰だか判別できなくなります。もし⽩黒印刷するなら、⾊に頼らず判別できるようなアイコン画像を使いましょう。

..................................................

..................................................
会話形式にしても分かりやすくはならない
会話形式を採⽤しても、説明が分かりやすくなるとは限りません。会話形式にすると楽しさや親しみやすさを向上できますが、それは説明の分かりやすさとは違います。
会話形式だけど説明がよく分からない本はたくさんあります。先⽣役や先輩役のキャラクターが何かの説明をして、それが読者には伝わっていないのに、⽣徒役や後輩役のキャラクターが「なるほど！」とか「そういうことか！」と⾔っているような本、⾒たことありませんか？ 先⽣や先輩の説明を苦もなく理解できるほどの優秀な⽣徒や後輩は、本の中にしかいません。
同様のことはマンガ形式にもいえます。分かりやすく説明したいなら分かりやすく説明する技術を学ぶべきであり、マンガにしたり会話形式にすることではありません。
たとえば、『わかばちゃんと学ぶ

Git 使い⽅⼊⾨*16 』が分かりやすいのはマンガだからではなく、分かりやすく説明する技術を作者の湊川先⽣が⾝につけているからです*17 。分かりやすく説明できる⼈がたまたまマンガで説明しているから分かりやすいのであって、マンガや会話形式にすれば何でも分かりやす
くなるわけではありません。ここを履き違えないようにしましょう。

..................................................
♣ ⽤語、索引
⽤語は「@<term>{⽤語名 ((よみかた))}」のように書くとゴシック体で表⽰され、かつ本の巻末の索引に載ります。ゴシック体にするけど索引に載せないなら「@<termnoidx>{⽤語名}」、ゴシック体にせず索引に載せるなら「@<idx>{⽤語名((よみかた))}」、索引に載せるけど表⽰はしないなら「@<hidx>{⽤語名 ((よみかた))}」とします。

*16 https://www.c-r.com/book/detail/1108*17 湊川先⽣による⽂章改善の発表動画 (https://www.youtube.com/watch?v=t2eiA2ylNW0) を⾒ると、分かりやすく説明する技術を先⽣⾃⾝が持っていることがよく分かります。

– 33 –

第 2 章 チュートリアル

索引は、デフォルトではオフになっています。索引を使うには、config.yml で「makeindex: true」を設定してください（370 ⾏⽬ぐらいにあります）。索引は

LATEX の機能を使うので、今のところ PDF でしかサポートされません。また索引機
能をオンにすると LATEX のコンパイル回数が増えるので、コンパイル時間が延びます。原稿執筆中はオフにし、完成間近になったらオンにするといいでしょう。
なお索引に登録する⽤語が何もない場合は、索引を使おうとするとコンパイルエ
ラーになります。本⽂に 1 つでも「@<term>{}」や「@<idx>{}」を⼊れてから索引機能を有効化してください。

Starter では索引語の親⼦関係を指定したり、ページ番号のかわりに「〜を⾒よ」と指定できます。詳しくは「3.17 ⽤語、索引」(p.125) を参照してください。

♣ 単語展開キーを単語に展開できます。たとえば辞書ファイル「data/words.txt」の中に、キー「apple」に対応した単語「アップル」が登録されているとします。すると、本⽂に「@<w>{apple}」と書くと「アップル」に展開されます。
「@<wb>{apple}」なら展開
して太字になります。また「@<W>{apple}」なら展開して強調表⽰します。
この機能は、表記が定まっていない単語に使うと便利です。たとえば「Apple」と「アップル」のどちらの表記にするか悩んでるなら、本⽂には ‘アップル ‘ と書いておけば、あとから辞書の中⾝を変えるだけでどちらの表記にも対応できます。
詳しくは「3.18 単語展開」(p.133) を参照してください。

2.5

印刷⽤ PDF と電⼦⽤ PDF

Starter では、印刷⽤と電⼦⽤とを切り替えて PDF ファイルを⽣成できます。両者の違いはあとで説明するとして、まず印刷⽤と電⼦⽤の PDF ファイルを⽣成する⽅法を説明します。

♣ 印刷⽤と電⼦⽤を切り替えて PDF を⽣成する
Starter では、印刷⽤と電⼦⽤とを切り替えて PDF を⽣成できます（デフォルト
は印刷⽤）。具体的には次のどれかを⾏います*18 。

•「rake pdf t=pbook」を実⾏すると印刷⽤ PDF が⽣成され、「rake pdf*18 強制⼒はこの順序であり、設定ファイルより環境変数のほうが、また環境変数より ‘rake‘コマンドのオプションのほうが優先されます。

– 34 –

2.5 印刷⽤ PDF と電⼦⽤ PDF*19 を実⾏すると電⼦⽤ PDF が⽣成される。
t=ebook」• 環境変数「$STARTER_TARGET」を「pbook」に設定してから「‘rake pdf‘」を実⾏すると印刷⽤ PDF が⽣成され、「ebook」に設定してから実⾏すると電⼦
⽤ PDF が⽣成される。

•「config-starter.yml」に設定項⽬「target:」があるので、これを「pbook」（印
刷⽤）または「ebook」（電⼦⽤）に設定する。
▼ macOS や Linux の場合*20$ rake pdf t=pbook←印刷⽤PDFを⽣成$ rake pdf t=ebook←電⼦⽤PDFを⽣成## または$ export STARTER_TARGET=pbook ←印刷⽤に設定$ rake pdf←またはDockerを使うなら rake docker:pdf$ export STARTER_TARGET=ebook ←電⼦⽤に設定$ rake pdf←またはDockerを使うなら rake docker:pdf
Windows

の

場

合

は

、「set STARTER_TARGET=pbook」や「setSTARTER_TARGET=ebook」を使って環境変数を設定してください。

環境変数を未設定に戻すには、次のようにします。
▼ macOS や Linux の場合$ unset STARTER_TARGET←環境変数を未設定に戻す♣ 印刷⽤ PDF と電⼦⽤ PDF の違い
印刷⽤ PDF と電⼦⽤ PDF には、次のような違いがあります。
カラー
印刷⽤では、カラーは使われず⽩黒になります（画像は除く）。
電⼦⽤では、カラーが使われます*21 。
左右の余⽩幅
印刷⽤では、左右の余⽩幅が異なります。具体的には、⾒開きにおいて内側の余⽩を約 2cm、外側の余⽩を約 1.5cm にしています*22 。これは⾒開きでの読みやすさを確保したうえで本⽂幅をできるだけ広げるための⼯夫です。
*19 「pbook」は「printing book」、「ebook」は「electronic book」を表します。
*21 カラーの設定は「sty/starter-color.sty」を⾒てください。変更する場合はこのファイルではなく「sty/mystyle.sty」に書くといいでしょう。
*22 余⽩幅は初期設定によって多少の違いがあります。設定の詳細は「sty/mytextsize.sty」を⾒てください。

– 35 –

第 2 章 チュートリアル

電⼦⽤では⾒開きを考慮する必要がないので、左右の余⽩幅は同じに設定されます。
ノンブル
印刷⽤には⾃動的にノンブルがつき、電⼦⽤にはつきません。
「ノンブル」とはすべてのページにつけられる通し番号であり、印刷所に⼊稿するときに必要です。ノンブルについての詳細は「5.5 ノンブル」(p.180) を参照してください。
表紙
印刷⽤では、表紙がつきません。なぜなら、表紙の PDF ファイルは本⽂とは別にして印刷所に⼊稿するからです。
電⼦⽤では、（設定されていれば）表紙がつきます*23 。

2.6

⾼速プレビュー

ページ数が多くなると、PDF ファイルへのコンパイルに時間がかかるようになり、執筆に⽀障が出ます。
ここでは⾼速にプレビューするための機能を紹介します。

♣ 指定した章だけをコンパイルする
Starter では、指定した章 (Chapter) だけを LATEX でコンパイルできます。これは章の数が多い場合や、著者が多数いる合同誌の場合にはとても効果的です。具体的には次のようにします。

•「rake pdf c=03-syntax」のようにすると、「03-syntax.re」だけをコンパイルします。

• または環境変数「$STARTER_CHAPTER」を設定する⽅法でも、章を指定できます。
▼ 例：03-syntax-faq.re だけをコンパイルする$ rake pdf c=03-syntax ←「 .re 」はつけない### または$ export STARTER_CHAPTER=03-syntax ←「 .re 」はつけない$ rake pdf ← Dockerを使っているなら rake docker:pdf*23 表紙のつけ⽅は「♣ [PDF] 表紙や⼤扉や奥付となる PDF ファイルを指定する」(p.162) を⾒てください。

– 36 –

2.6 ⾼速プレビュー

コンパイルする章を指定したとき、Starter は次のような動作になります。

• 他の章は無視されます。
• 表紙や、⽬次や、⼤扉や、奥付も無視されます。
• LATEX のコンパイル回数が 1 回だけになります（コンパイル時間を短縮する
ため）。
なお「$STARTER_CHAPTER」を設定した場合、全体をコンパイルするときにはリセットしてください。
▼ 全体をコンパイルする$ unset STARTER_CHAPTER←「 $ 」はつけないことに注意♣ コンパイル回数を 1 回だけに制限する
Re:VIEW および Starter では、LATEX のコンパイルが最⼤で 3 回⾏われます*24 。
• 1 回⽬のコンパイルで章や節のページ番号が分かる。
• 2 回⽬のコンパイルで⽬次が作成される。
• もし 2 回⽬のコンパイルでページ番号が変わると、3 回⽬のコンパイルが⾏われる。
しかし、ページ番号が合ってなくてもいいからとにかく仕上がりを確認したい場⾯はよくあり、そんなときは 3 回もコンパイルされるのは時間の無駄です。
そこで Starter では、LATEX のコンパイル回数を制限する機能を⽤意しました。

•「rake pdf n=1」のようにすると、LATEX のコンパイルが 1 回しか⾏われません。

• または環境変数「$STARTER_COMPILETIMES」を「1」に設定する⽅法でも、同じように制限できます。
▼ LATEX のコンパイル回数を 1 回に制限してコンパイル$ rake pdf n=1### または$ STARTER_COMPILETIMES=1 rake pdf♣ 画像読み込みを省略するドラフトモード
Starter では、画像の読み込みを省略する「ドラフトモード」を⽤意しました。ドラフトモードにすると、画像のかわりに枠線が表⽰されます。こうすると、（LATEX*24 索引があると、コンパイル回数がもう 1 回増えます。

– 37 –

第 2 章 チュートリアルのコンパイル時間は変わりませんが）DVI ファイルから PDF を⽣成する時間が短縮されます。
図やスクリーンショットが多い場合や、印刷⽤に⾼解像度の画像を使っている場合
は、この機能は特に効果が⾼いです。
ドラフトモードにするには、次のどれを実⾏します*25 。

•「rake pdf d=on」でコンパイルする。
• 環境変数「$STARTER_DRAFT」の値を「on」に設定してからコンパイルする。
• config-starter.yml で「draft: true」を設定してからコンパイルする。
▼ 画像読み込みを省略するドラフトモードで PDF を⽣成する$ rake pdf d=on
←ドラフトモードをonにする### または$ export STARTER_DRAFT=on ←ドラフトモードをonにする$ rake pdf←またはDocker環境なら rake docker:pdf
環境変数の設定をクリアするには、「unset STARTER_DRAFT」を実⾏してくだ
さい。
ま た「 ド ラ フ ト モ ー ド に し て PDF ⽣ 成 時 間 を 短 縮 し た い 、で も こ の画 像 は 表 ⽰ し て 確 認 し た い 」と い う と き も あ る で し ょ う 。そ ん な と き は「//image[...][...][draft=off]」のように指定すると、その画像はドラフト
モードが解除されて PDF に表⽰されます。

♣ ⾃動リロードつき HTML プレビュー
Starter では、HTML でプレビューするための機能を⽤意しました。便利なことに、原稿を変更すると⾃動的にリロードされます。PDF と⽐べて HTML の⽣成はずっと⾼速なので、原稿執筆中に⼊⼒間違いを⾒つけるには HTML のほうが向いています。
使い⽅は、まず Web サーバを起動します。
▼ Web サーバを起動する$ rake web:server$ rake docker:web:server← Dockerを使っていない場合← Dockerを使っている場合

起動したらブラウザで http://localhost:9000/ にアクセスし、適当な章を開いてください。そして開いた章の原稿ファイル（*.re）を変更すると、ブラウザの画⾯が⾃*25 強制⼒はこの順序であり、設定ファイルより環境変数のほうが、また環境変数より ‘rake‘コマンドのオプションのほうが優先されます。

– 38 –

2.6 ⾼速プレビュー

動的にリロードされ、変更が反映されます。
原稿執筆中は、エディタのウィンドウの後ろにプレビュー画⾯が少し⾒えるようにするといいでしょう。
いくつか注意点があります。

• 表⽰は HTML で⾏っているため、PDF での表⽰とは差異があります。執筆
中は HTML でプレビューし、区切りのいいところで PDF による表⽰を確認するといいでしょう。

• 今のところ数式はプレビューできません。
• 変更が反映されるのは、開いているページと対応した原稿ファイルが変更された場合だけです。たとえば「foo.html」を開いているときに「foo.re」を変更
するとプレビューに反映されますが、別の「bar.re」を変更しても反映されません。

• 画⾯右上の「Rebuild and Reload」リンクをクリックすると、原稿ファイルが変更されていなくても強制的にコンパイルとリロードがされます。

• 原稿ファイルに⼊⼒間違いがあった場合は、画⾯にエラーが表⽰されます。エラー表⽰はあまり分かりやすくないので、今後改善される予定です。

• Web サーバを終了するには、Control キーを押しながら「c」を押してください。

– 39 –

第

3章

記法

この章では、原稿ファイルの記法について詳しく説明します。初めての⼈は、先に「2.4 基本的な記法」(p.20) を⾒たほうがいいでしょう。

【この章の内容】

3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
3.10
3.11
3.12
3.13
3.14
3.15
3.16
3.17
3.18
3.19

コメント . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4243
⾒出し . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
箇条書きと定義リスト . . . . . . . . . . . . . . . . . . . . . . 56
インライン命令とブロック命令 . . . . . . . . . . . . . . . . . . 63
強調と装飾 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
プログラムリスト . . . . . . . . . . . . . . . . . . . . . . . . . 68
⾏番号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
ターミナル . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
脚注 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
ノート . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
コラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
画像 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
数式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
会話形式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
⽤語、索引 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
単語展開 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
その他 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
段落と改⾏と空⾏ . . . . . . . . . . . . . . . . . . . . . . . . .

– 41 –

第 3 章 記法

コメント

3.1

♣ ⾏コメント「#@#」で始まる⾏は⾏コメントであり、コンパイル時に読み⾶ばされます。⼀般的
な⾏コメントとは違って、⾏の先頭から始まる必要があるので注意してください。
▼ サンプル
本⽂1 。
#@#本⽂2 。
本⽂3 。
▼ 表⽰結果本⽂ 1。本⽂ 3。

..................................................
⾏コメントを空⾏扱いにしない
Re:VIEW では⾏コメントを空⾏として扱います。たとえば上の例の場合、「本⽂ 1」と「本⽂ 3」が別の段落になってしまいます。ひどい仕様ですね。こんな仕様だと、段落の途中をコメントアウトするときにとても不便です。

Starter では「本⽂ 1」と「本⽂ 3」が別の段落にならないよう仕様を変更しています。

..................................................
♣ 範囲コメント「#@+++」から「#@---」までの⾏は範囲コメントであり、コンパイル時に読み⾶ばされます。
▼ サンプル
本⽂1 。
#@+++
本⽂2 。

本⽂3 。
#@--本⽂4 。

– 42 –

3.2 段落と改⾏と空⾏▼ 表⽰結果
本⽂ 1。
本⽂ 4。
範囲コメントは⼊れ⼦にできません。また「+」「-」の数は 3 つと決め打ちされてます。
なお範囲コメントは Starter による拡張機能です。

3.2

段落と改⾏と空⾏♣ 段落
空⾏を⼊れると、段落の区切りになります。空⾏は何⾏⼊れても、1 ⾏の空⾏と同じ扱いになります。
▼ サンプル
⾔葉を慎みたまえ 。君はラピュタ王の前にいるのだ 。
これから王国の復活を祝って 、諸君にラピュタの⼒を⾒せてやろうと思ってね 。››⾒せてあげよう 、ラピュタの雷を！
旧約聖書にあるソドムとゴモラを滅ぼした天の⽕だよ 。ラーマヤーナではインド››ラの⽮とも伝えているがね 。
▼ 表⽰結果
⾔葉を慎みたまえ。君はラピュタ王の前にいるのだ。
これから王国の復活を祝って、諸君にラピュタの⼒を⾒せてやろうと思ってね。⾒せてあげよう、ラピュタの雷を！
旧約聖書にあるソドムとゴモラを滅ぼした天の⽕だよ。ラーマヤーナではインドラの⽮とも伝えているがね。
段落は、PDF なら先頭の⾏を字下げ（インデント）し、ePub なら 1 ⾏空けて表⽰されます。また段落の前に「//noindent」をつけると、段落の先頭の字下げ（インデント）をしなくなります。

– 43 –

第 3 章 記法▼ サンプル//noindent
⾔葉を慎みたまえ！君はラピュタ王の前にいるのだ！
//noindent
これから王国の復活を祝って 、諸君にラピュタの⼒を⾒せてやろうと思ってね 。››⾒せてあげよう 、ラピュタの雷を！
//noindent
旧約聖書にあるソドムとゴモラを滅ぼした天の⽕だよ 。ラーマヤーナではインド››ラの⽮とも伝えているがね 。

▼ 表⽰結果
⾔葉を慎みたまえ！ 君はラピュタ王の前にいるのだ！
これから王国の復活を祝って、諸君にラピュタの⼒を⾒せてやろうと思ってね。⾒せてあげよう、ラピュタの雷を！
旧約聖書にあるソドムとゴモラを滅ぼした天の⽕だよ。ラーマヤーナではインドラの⽮とも伝えているがね。

♣ 改⾏
改⾏は、無視されるか、半⾓空⽩と同じ扱いになります。正確には、次のような仕様です*1 。

• 改⾏直前の⽂字と直後の⽂字のどちらかが⽇本語なら、改⾏は無視される。
• どちらも⽇本語でないなら、半⾓空⽩と同じ扱いになる。
次の例を⾒てください。

• 最初の段落では改⾏の前後（つまり⾏の終わりと⾏の始まり）がどちらも⽇本語なので、改⾏は無視されます。

• 2 番⽬の段落では改⾏の前後が⽇本語またはアルファベットなので、やはり改⾏は無視されます。

• 3 番⽬の段落では改⾏の前後がどちらもアルファベットなので、改⾏は半⾓空
⽩扱いになります。

*1 なおこれは⽇本語 L
AT X の仕様です。

E– 44 –

3.2 段落と改⾏と空⾏▼ サンプル
あいうえお
かきくけこ
さしすせそ 。
たちつてとABC
なにぬねの
DEFはひふへほ 。
まみむめもGHIJKLらりるれろMNO
PQRやゆよ 。
▼ 表⽰結果あいうえおかきくけこさしすせそ。
たちつてと ABC なにぬねの DEF はひふへほ。
まみむめも GHI JKL らりるれろ MNO PQR やゆよ。

♣ 強制改⾏
強制的に改⾏したい場合は、「@<br>{}」を使います。
▼ サンプル
⼟に根をおろし 、⾵と共に⽣きよう 。@<br>{}
種と共に冬を越え 、⿃と共に春をうたおう 。
▼ 表⽰結果⼟に根をおろし、⾵と共に⽣きよう。
種と共に冬を越え、⿃と共に春をうたおう。
なおこの例だと、「//noindent」をつけて段落の字下げをしないほうがいいでしょう。
▼ サンプル//noindent
⼟に根をおろし 、⾵と共に⽣きよう 。@<br>{}
種と共に冬を越え 、⿃と共に春をうたおう 。

– 45 –

第 3 章 記法▼ 表⽰結果⼟に根をおろし、⾵と共に⽣きよう。
種と共に冬を越え、⿃と共に春をうたおう。

♣ 強制空⾏
強制的に空⾏を⼊れるには、「@<br>{}」を連続してもいいですが、専⽤の命令「//blankline」を使うほうがいいでしょう。
▼ サンプル//noindent
⼟に根をおろし 、⾵と共に⽣きよう 。
//blankline//noindent
種と共に冬を越え 、⿃と共に春をうたおう 。

▼ 表⽰結果⼟に根をおろし、⾵と共に⽣きよう。
種と共に冬を越え、⿃と共に春をうたおう。

♣ 改段落
インライン命令「@<par>{}」を使うと、好きな箇所で改段落できます。
改段落は、通常は空⾏で⾏います。しかしたとえば箇条書きの中で改段落したい場
合、安易に空⾏を⼊れるとそこで箇条書きが終了してしまいます。つまり「空⾏なら改段落する」という仕様は、箇条書きの⽂法とは相性が悪いのです。
このような場合は、「@<par>{}」を使えば箇条書きの中でも改段落できます。
▼ サンプル* 『 貴官は⾃⼰の才能を⽰すのに 、弁⾆ではなく実績をもってすべきだろう 。
他⼈に命令するようなことが⾃分にもできるかどうか 、やってみたらどうだ 。››』@<par>{}
富⽥耕⽣さん 、今までありがとうございました 。

– 46 –

3.3 ⾒出し▼ 表⽰結果•『貴官は⾃⼰の才能を⽰すのに、弁⾆ではなく実績をもってすべきだろう。他⼈に命令するようなことが⾃分にもできるかどうか、やってみたらどうだ。』
富⽥耕⽣さん、今までありがとうございました。

なお箇条書きの中で改段落しても、インデントはされません*2 。インデントしたい場合は、「@<par>{i}」としてください。
▼ サンプル* 『 貴官は⾃⼰の才能を⽰すのに 、弁⾆ではなく実績をもってすべきだろう 。
他⼈に命令するようなことが⾃分にもできるかどうか 、やってみたらどうだ 。››』@<par>{i}
富⽥耕⽣さん 、今までありがとうございました 。

▼ 表⽰結果•『貴官は⾃⼰の才能を⽰すのに、弁⾆ではなく実績をもってすべきだろう。他⼈に命令するようなことが⾃分にもできるかどうか、やってみたらどうだ。』
富⽥耕⽣さん、今までありがとうございました。

♣ 改ページ「//clearpage」で強制的に改ページできます。
なお Re:VIEW では「//pagebreak」で強制的に改ページできますが、これはLATEX の「\pagebreak」命令を使うため、図や表のことが考慮されません。Starterでは「//clearpage」を使ってください。

3.3

⾒出し

♣ ⾒出しレベル章 (Chapter) や節 (Section) といった⾒出しは、「= 」や「== 」で始めます。

*2 これは L
AT X の仕様です。

E– 47 –

第 3 章 記法▼ サンプル= 章(Chapter)⾒出し== 節(Section)⾒出し=== 項(Subsection)⾒出し==== ⽬(Subsubsection)⾒出し===== 段(Paragraph)⾒出し====== ⼩段(Subparagraph)⾒出し

このうち、章・節・項・⽬はこの順番で（⼊れ⼦にして）使うことが想定されています。たとえば、章 (Chapter) の次に節ではなく項 (Subsection) が登場するのはよくありません。
ただし段と⼩段にはこのような制約はなく、たとえば⽬ (Subsubsection) を⾶ばして節や項の中で使って構いません。
▼ サンプル= 章(Chapter)== 節(Section)===== 段(Paragraph)←節の中に段が登場しても構わない

Starter では、章は 1 ファイルにつき 1 つだけにしてください。1 つのファイルに複数の章を⼊れないでください。
▼ サンプル
= 章1
== 節
= 章2

←（ エラーにならないけど ）これはダメ♣ ⾒出し⽤オプション
⾒出しには次のようなオプションが指定できます。

– 48 –

3.3 ⾒出し▼ サンプル==[nonum] 章番号や節番号をつけない（ ⽬次には表⽰する ）==[nodisp] ⾒出しを表⽰しない（ ⽬次には表⽰する ）==[notoc] 章番号や節番号をつけず 、⽬次にも表⽰しない

⼀般的には、「まえがき」や「あとがき」には章番号をつけません。そのため、これらのオプションは「まえがき」や「あとがき」で使うとよさそうに⾒えます。
しかしこのようなオプションをつけなくても、「まえがき」や「あとがき」の章や節には番号がつきません。そのため、これらのオプションを使う機会は、実はほとん
どありません。

♣ 章の概要と著者名
章タイトルの直後に、章の概要を書くことをお勧めします。
▼ サンプル= チュートリアル//abstract{
この章では 、インストールから簡単な使い⽅までを説明します 。
詳しい機能の説明は次の章で⾏います 。
//}

章の概要は、たとえば次のように表⽰されます。本⽂と⽐べて⼩さめのゴシック体
で、左右に余⽩が追加され、下に 2 ⾏分空きます。
▼ 表⽰結果
この章では、インストールから簡単な使い⽅までを説明します。詳しい機能の説明は次の章で⾏います。

また、章の著者名を表記できます。複数の著者が集まって合同誌を書く場合に使うといいでしょう。著者名は章タイトルの直後、章の概要より前に書いてください。
▼ サンプル//chapterauthor[ムスカ⼤佐]– 49 –

第 3 章 記法▼ 表⽰結果［著］ムスカ⼤佐♣ 章 ID
章 (Chapter) のファイル名から拡張⼦の「.re」を取り除いた⽂字列を、「章 ID」と呼んでいます。たとえば、ファイル名が「02-tutorial.re」なら章 ID は「02-tutorial」、
ファイル名が「preface.re」なら章 ID は「preface」です。
章 ID は、章そのものを参照する場合だけでなく、ある章から別の章の節 (Section)
や図やテーブルを参照するときに使います。詳しくは後述します。

..................................................
章にラベルはつけられない
このあとで説明しますが、たとえば「=={ラベル タイトル}」のように書くと
節 (Section) や項 (Subsection) にラベルがつけられます。
しかし「={ラベル タイトル}」のように書いても章にはラベルがつけられません。かわりに章 ID を使ってください。

..................................................
♣ 章を参照する章 (Chapter) を参照するには、3 つの⽅法があります。

•「@<chapref>{章 ID}」で章番号と章タイトルを参照できます（例：「第 2 章
チュートリアル」）。

•「@<chap>{章 ID}」で章番号を参照できます（例：「第 2 章」）。
•「@<title>{章 ID}」で章タイトルを参照できます（例：「チュートリアル」）。
▼ サンプル@<chapref>{02-tutorial}← 章番号と章タイトル@<chap>{02-tutorial}← 章番号だけ@<title>{02-tutorial}← 章タイトルだけ– 50 –

3.3 ⾒出し▼ 表⽰結果
第 2 章「チュートリアル」 ← 章番号と章タイトル
第 2 章 ← 章番号だけ
チュートリアル ← 章タイトルだけ♣ 節や項を参照する
節 (Section) や項 (Subsection) を参照するには、まず節や項にラベルをつけます。
▼ サンプル=={sec-heading} ⾒出し==={subsec-headingref} 節や項を参照する

そして「@<hd>{ラベル}」を使ってそれらを参照します。
▼ サンプル@<hd>{sec-heading}@<hd>{subsec-headingref}▼ 表⽰結果「3.3 ⾒出し」「節や項を参照する」
また Starter 拡張である「@<secref>{ラベル}」を使うと、ページ番号も表⽰されます。コマンド名は「@<secref>」ですが、節 (Section) だけでなく項 (Subsection)
や⽬ (Subsubsection) にも使えます。
▼ サンプル@<secref>{sec-heading}@<secref>{subsec-headingref}▼ 表⽰結果「3.3 ⾒出し」(p.47)「♣ 節や項を参照する」(p.51)– 51 –

第 3 章 記法

他の章の節や項（つまり他の原稿ファイルの節や項）を参照するには、ラベルの前に章 ID をつけます。
▼ サンプル@<secref>{03-syntax|sec-heading}@<secref>{03-syntax|subsec-headingref}▼ 表⽰結果「3.3 ⾒出し」(p.47)「♣ 節や項を参照する」(p.51)
なおラベルのかわりに節タイトルや項タイトルが使えますが、タイトルを変更した
ときにそれらを参照している箇所も書き換えなければならなくなるので、お勧めしま
せん。⼀⾒⾯倒でも、参照先の節や項にラベルをつけることを強くお勧めします。

..................................................
項を参照するなら項番号をつけよう
デフォルトでは、章 (Chapter) と節 (Section) には番号がつきますが、項(Subsection) には番号がつきません。そのため、「@<hd>{}」で項を参照するとたとえば『「⾒出し⽤オプション」』となってしまい、項番号がないのでとても探しにくくなります。
「@<secref>{}」を使うと『3.1「⾒出し」の「⾒出し⽤オ
プション」』となるので多少ましですが、探しやすいとは⾔えません。
そのため、項 (Subsection) を参照したいなら項にも番号をつけましょう。
config.yml の設定項⽬「secnolevel:」を「3」にすると、項にも番号がつくよ
うになります。

..................................................
♣ まえがき、あとがき、付録「まえがき」や「あとがき」や「付録」の章は、catalog.yml で指定します*3 。
▼ catalog.yml
PREDEF:- 00-preface.re←まえがき*3「catalog.yml」の中⾝は「YAML」という形式で書かれています。
「YAML」を知らない⼈は Google

検索して調べてみてください。

– 52 –

3.3 ⾒出し

CHAPS:- 01-install.re- 02-tutorial.re- 03-syntax.re
APPENDIX:- 92-filelist.re←付録

POSTDEF:- 99-postface.re←あとがき「-」のあとに半⾓空⽩が必要なことに注意してください。またインデントにタブ⽂
字は使わないでください。

♣部「第 I 部」「第 II 部」のような部 (Part) を指定するには、catalog.yml で次のように指定します。
▼ catalog.yml
PREDEF:CHAPS:- 初級編:- chap1.re- chap2.re- 中級編:- chap3.re- chap4.re- 上級編:- chap5.re- chap6.re
APPENDIX:POSTDEF:

この例では「第 I 部 初級編」
「第 II 部 中級編」
「第 III 部 上級編」の 3 つに分かれています。
部タイトルのあとには「:」をつけて「初級編:」のようにしてください。これを忘れると意味不明なエラーが出ます。

– 53 –

第 3 章 記法♣ 段⾒出しと⼩段⾒出し
Starter では、段 (Paragraph) ⾒出しは次のように表⽰されます。
▼ サンプル
テキストテキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキストテキスト 。
===== 段⾒出し1
テキストテキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキストテキスト 。

テキストテキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキストテキスト 。
===== 段⾒出し2
テキストテキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキストテキスト 。

テキストテキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキストテキスト 。
▼ 表⽰結果
テキストテキストテキストテキストテキストテキストテキストテキストテキストテ
キストテキストテキストテキストテキストテキストテキスト。
段⾒出し 1
テキストテキストテキストテキストテキストテキストテキストテキストテキストテ
キストテキストテキストテキストテキストテキストテキスト。
テキストテキストテキストテキストテキストテキストテキストテキストテキストテ
キストテキストテキストテキストテキストテキストテキスト。
段⾒出し 2
テキストテキストテキストテキストテキストテキストテキストテキストテキストテ
キストテキストテキストテキストテキストテキストテキスト。
テキストテキストテキストテキストテキストテキストテキストテキストテキストテ
キストテキストテキストテキストテキストテキストテキスト。
これを⾒ると分かるように、段⾒出しの前に少しスペースが⼊ります。しかし終わりにはそのようなスペースが⼊りません。終わりにもスペースを⼊れるには、次のよ– 54 –

3.3 ⾒出しうに「//paragraphend」を使ってください。
▼ サンプル
テキストテキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキストテキスト 。
===== 段⾒出し
テキストテキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキストテキスト 。
//paragraphend

テキストテキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキストテキスト 。
▼ 表⽰結果
テキストテキストテキストテキストテキストテキストテキストテキストテキストテ
キストテキストテキストテキストテキストテキストテキスト。
段⾒出し
テキストテキストテキストテキストテキストテキストテキストテキストテキストテ
キストテキストテキストテキストテキストテキストテキスト。
テキストテキストテキストテキストテキストテキストテキストテキストテキストテ
キストテキストテキストテキストテキストテキストテキスト。
また、⼩段 (Subparagraph) ⾒出しは次のように表⽰されます。
▼ サンプル
テキストテキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキストテキスト 。
====== ⼩段⾒出し1
テキストテキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキストテキスト 。

テキストテキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキストテキスト 。
====== ⼩段⾒出し2
テキストテキストテキストテキストテキストテキストテキストテキスト– 55 –

第 3 章 記法

テキストテキストテキストテキストテキストテキストテキストテキスト 。
テキストテキストテキストテキストテキストテキストテキストテキスト
テキストテキストテキストテキストテキストテキストテキストテキスト 。
▼ 表⽰結果
テキストテキストテキストテキストテキストテキストテキストテキストテキストテ
キストテキストテキストテキストテキストテキストテキスト。
⼩段⾒出し 1

テキストテキストテキストテキストテキストテキストテキストテキ

ストテキストテキストテキストテキストテキストテキストテキストテキスト。
テキストテキストテキストテキストテキストテキストテキストテキストテキストテ
キストテキストテキストテキストテキストテキストテキスト。
⼩段⾒出し 2

テキストテキストテキストテキストテキストテキストテキストテキ

ストテキストテキストテキストテキストテキストテキストテキストテキスト。
テキストテキストテキストテキストテキストテキストテキストテキストテキストテ
キストテキストテキストテキストテキストテキストテキスト。
こ れ を ⾒ る と 分 か る よ う に 、⼩ 段 ⾒ 出 し で は ス ペ ー ス は ⼊ り ま せ ん 。
「//subparagraph」は⽤意されていますが、スペースは⼊りません。

3.4

箇条書きと定義リスト♣ 番号なし箇条書き
番号なし箇条書きは「 * 」で始めます。先頭に半⾓空⽩が⼊っていることに注意
してください。
▼ サンプル* 箇条書き1* 箇条書き2* 箇条書き3▼ 表⽰結果• 箇条書き 1• 箇条書き 2– 56 –

3.4 箇条書きと定義リスト• 箇条書き 3「*」を連続させると、箇条書きを⼊れ⼦にできます。
▼ サンプル* 箇条書き** ⼊れ⼦の箇条書き*** ⼊れ⼦の⼊れ⼦▼ 表⽰結果• 箇条書き◦ ⼊れ⼦の箇条書き∗ ⼊れ⼦の⼊れ⼦♣ 番号つき箇条書き
番号つき箇条書きは 2 つの書き⽅があります。

1 つ⽬は「 1. 」のように始める書き⽅です。この⽅法は数字しか指定できず、また⼊れ⼦にできません。
▼ サンプル1. 番号つき箇条書き（ 数字しか指定できない ）2. 番号つき箇条書き（ ⼊れ⼦にできない ）▼ 表⽰結果1. 番号つき箇条書き（数字しか指定できない）
2. 番号つき箇条書き（⼊れ⼦にできない）
2 つ⽬は Starter による拡張で、「 - 1. 」のように始める書き⽅です。この書き⽅は「 - A. 」や「 - (1) 」など任意の⽂字列が使え、また「-」を連続することで⼊れ⼦にもできます。
▼ サンプル- (A) 番号つき箇条書き（ 英数字が使える ）- (B) 番号つき箇条書き（ 任意の⽂字列が使える ）-- (B-1) 番号つき箇条書き（ ⼊れ⼦にできる ）– 57 –

第 3 章 記法*** 番号なし箇条書きを含めることもできる▼ 表⽰結果(A) 番号つき箇条書き（英数字が使える）(B) 番号つき箇条書き（任意の⽂字列が使える）(B-1) 番号つき箇条書き（⼊れ⼦にできる）• 番号なし箇条書きを含めることもできる

どちらの記法も、先頭に半⾓空⽩が必要なことに注意してください。

..................................................
数字を使うべきか、⽂字を使うべきか
番号つき箇条書きでは、順番に強い意味がある場合は「1.」のように数字を使い、順番にさほど意味はなく単にラベルとして使いたい場合は「A.」のように⽂字を使います。詳しくは「♣ 箇条書きを正しく使い分ける」(p.195) を参照してください。

..................................................
♣ 定義リストHTML でいうところの「<dl><dt><dd>」は、「定義リスト」と「説明リスト」の2 つがあります。前者は Re:VIEW でも使え、後者は Starter による拡張です。この節では前者の「定義リスト」を説明し、次の節で後者の「説明リスト」を説明します。
なお会話形式の⽂章を作成するには、この節ではなく「3.16 会話形式」(p.117) を参照してください。
定義リストは、「 : 」で始めて、次の⾏からインデントします。

• 説明⽂のインデントは、半⾓空⽩でもタブ⽂字でもいいです。しかし混在させるとトラブルの元なので、どちらかに統⼀しましょう。

• 先頭の半⾓空⽩は⼊れるようにしましょう。過去との互換性のため、先頭の半⾓空⽩がなくても動作しますが、箇条書きとの整合性のために半⾓空⽩を⼊れましょう。
▼ サンプル
: ⽤語1
説明⽂ 。
説明⽂ 。

– 58 –

3.4 箇条書きと定義リスト

: ⽤語2
説明⽂ 。
説明⽂ 。

▼ 表⽰結果⽤語 1
説明⽂。説明⽂。
⽤語 2
説明⽂。説明⽂。

説明⽂の中には、箇条書きが⼊れられます（Starter 拡張）。ただし、注意点が 2 つあります。

• 説明⽂の 1 ⾏⽬を箇条書きで始めることはできません*4 。1 ⾏⽬は必ず通常の⽂章にしてください。

• 箇条書きを使うときは、インデントにはタブ⽂字を使わず半⾓空⽩を使ってください。半⾓空⽩ 4 ⽂字でインデントするといいでしょう。
▼ サンプル
: ⽤語
説明⽂ 。
* 項⽬1
* 項⽬1

▼ 表⽰結果
⽤語説明⽂。

• 項⽬ 1• 項⽬ 1

説明⽂には、プログラムコードなどは⼊れられません。⼊れたい場合は、次で紹介する「説明リスト」を使います。

*4 この制約は、Re:VIEW の⽂法に起因します。

– 59 –

第 3 章 記法♣ 説明リスト「説明リスト」(Description List) とは、先ほど説明した「定義リスト」(Definition

List) の機能を拡張したものです。定義リストと⽐べて、説明リストには次のような特徴があります。

• キーや⽤語を太字にする/しないが選べる。
• キーや⽤語の直後で改⾏する/しないが選べる。
• 説明⽂の中に、箇条書きだけでなくプログラムコードなどを⼊れられる。
• 説明⽂の 1 ⾏⽬から箇条書きを書ける。
• 専⽤の構⽂を使わないので、「 : 」だけで書ける定義リストと⽐べて記述が煩雑。

• ⽂章における役割は定義リストと同じ。
説明リストは次のように書きます。途中にある「@<br>{}」は改⾏を表します。
▼ サンプル//desclist{//desc[開催⽇時]{
20XX年XX⽉XX⽇ 10:00〜12:00//}//desc[開催場所]{
XXXXXXXXビルXXXXXXXX会議室@<br>{}（ XXXXXX市XXXXXX町XX-XX-XX ）//}//}▼ 表⽰結果
開催⽇時

20XX 年 XX ⽉ XX ⽇ 10:00〜12:00
開催場所

XXXXXXXX ビル XXXXXXXX 会議室（XXXXXX 市 XXXXXX 町 XX-XX-XX）「 : 」だけで済む定義リストと⽐べて説明リストの書き⽅は煩雑ですが、表 3.1 のようなオプションを指定できるという利点があります。これらのオプションのデフォ
ルト値は、「config-starter.yml」で設定されています。
オプションは、「//desclist」の第 1 引数に指定します。先ほどの例をオプションつきで表⽰してみましょう。ここで「7zw」は全⾓ 7 ⽂字分という意味です。

– 60 –

3.4 箇条書きと定義リスト▼ 表 3.1: 「//desclist」のオプション
オプション

説明

デフォルト値

bold=on

キーや⽤語を太字にする

offcompact=on

キーや⽤語の直後で改⾏しない

offindent=幅

説明⽂のインデント幅

3zw

listmargin=⾼さ

説明リスト上下の空きの⾼さ

0.5zw

itemmargin=⾼さ

説明項⽬間の空きの⾼さ0mmclassname=名前

HTML タグに追加するクラス名▼ サンプル//desclist[bold=on,compact=on,indent=7zw]{//desc[開催⽇時]{
20XX年XX⽉XX⽇ 10:00〜12:00//}//desc[開催場所]{
XXXXXXXXビルXXXXXXXX会議室@<br>{}（ XXXXXX市XXXXXX町XX-XX-XX ）//}//}▼ 表⽰結果
開催⽇時
開催場所

20XX 年 XX ⽉ XX ⽇ 10:00〜12:00
XXXXXXXX ビル XXXXXXXX 会議室（XXXXXX 市 XXXXXX 町 XX-XX-XX）

説明リストでは、説明⽂の 1 ⾏⽬から箇条書きが書けます。ただし次のサンプルを⾒れば分かるように、1 ⾏⽬が箇条書きだとスペースが空きすぎます。
▼ サンプル//desclist{//desc[参加申込者]{
* アリス
* ボブ
* チャーリー//}//}– 61 –

第 3 章 記法▼ 表⽰結果
参加申込者

• アリス
• ボブ
• チャーリー

この問題については将来対応する予定です。当⾯は、「//vspace」を使ってスペー
スを削除してください。
▼ サンプル//desclist{//desc[参加申込者]{//vspace[latex][-5mm]
* アリス
* ボブ
* チャーリー//}//}▼ 表⽰結果
参加申込者

• アリス
• ボブ
• チャーリー

また説明⽂の中に、プログラムコードなども⼊れられます。
▼ サンプル//desclist{//desc[print⽂]{「 @<code>|print()| 」を使うと 、⽂字列を表⽰できます 。
//list{def hello(name):print(f"Hello, {name}!")//}//}– 62 –

3.5 インライン命令とブロック命令//}▼ 表⽰結果print ⽂「print()」を使うと、⽂字列を表⽰できます。
def hello(name):print(f"Hello, {name}!")3.5

インライン命令とブロック命令

ここで少し話を変えて、命令の形式について説明します。

Re:VIEW および Starter でのコマンドは、⼤きく 3 つの形式に分けられます。
• インライン命令（例：「@<B>{...}」）• ブロック命令（例：「//list{...//}」）• 特殊な形式の命令（例：箇条書きの「*」や⾒出しの「=」など）
ここではインライン命令とブロック命令について、それぞれ説明します。

♣ インライン命令「インライン命令」とは、「@<B>{...}」のような形式の命令のことです。主に、⽂の途中に埋め込んで使います。

Re:VIEW のインライン命令は⼊れ⼦にできませんが、Starter では⼊れ⼦にできるよう拡張しています。
▼ サンプル@<code>{func(@<b>{@<i>{arg}})}▼ 表⽰結果func(arg)

インライン命令は、複数⾏を対象にできません。たとえば次のような書き⽅はできません。

– 63 –

第 3 章 記法▼ サンプル@<B>{テキスト
テキスト} 。

インライン命令の中に「}」を書きたい場合は、次のうちどちらかを使います。

•「@<B>{var x = {a: 1\};}」のように「\}」とエスケープする。
•「@<B>{...}」のかわりに「@<B>|...|」または「@<B>$...$」を使う。
2 番⽬の書き⽅は、Re:VIEW では「フェンス記法」と呼ばれています。この記法
では、バックスラッシュによるエスケープができないので注意してください。たとえば「@<B>|\||」や「@<B>$\$$」のようなエスケープをしても効果はありません。

..................................................
インライン命令の⼊れ⼦対応と複数の引数
インライン命令には、「@<href>{url, text}」や「@<yomi>{text, yomi}」のように複数の引数を受け取るものがあります。
し か し こ の 書 き ⽅ は 、実 は ⼊ れ ⼦ の イ ン ラ イ ン 命 令 と 相 性 が よ く
あ り ま せ ん 。望 ま し い の は「@<href url="url">{text}」や「@<rubyyomi="yomi">{text}」のような形式であり、採⽤を現在検討中です。

..................................................
♣ ブロック命令「ブロック命令」とは、「//list{...//}」のような形式の命令のことです。
ブロック命令は、必ず⾏の先頭から始まる必要があります。たとえば「//list{」や「//}」の前に空⽩があると、ブロック命令として認識されません。
ブロック命令は⼊れ⼦にできます（Starter による拡張）。たとえば次の例では、「//note{...//}」の中に「//list{...//}」が⼊っています。
▼ サンプル//note[ノートサンプル]{//list[][フィボナッチ]{
def fib(n):return n if n <= 1 else fib(n-1)+fib(n-2)//}//}

ただし次のブロック命令はその性質上、中に他のブロック命令を⼊れられません（インライン命令は⼊れられます）。

– 64 –

3.6 強調と装飾• プログラムコードを表す「//list」• ターミナルを表す「//terminal」と「//cmd」• LATEX や HTML の⽣テキストを埋め込む「//embed」
ブロック命令の引数は、たとえば「//list[ラベル][説明⽂]{...//}」のように書きます。この場合だと、第 1 引数が「ラベル」で第 2 引数が「説明⽂」です。引数の中に「]」を⼊れたい場合は、「\]」のようにエスケープしてください。

3.6

強調と装飾

♣ 強調
⽂章の⼀部を強調するには「@<B>{...}」または「@<strong>{...}」で囲みます。囲んだ部分は太字のゴシック体になります。
▼ サンプル
テキスト@<B>{テキスト}テキスト 。
▼ 表⽰結果
テキストテキストテキスト。
⽇本語の⽂章では、強調箇所は太字にするだけでなくゴシック体にするのが⼀般的です。そのため、強調したい場合は「@<B>{...}」または「@<strong>{...}」を使ってください。

..................................................
インライン命令「@<B>{...}」のような記法はインライン命令と呼ばれています。インライン
命令は必ず 1 ⾏に記述します。複数⾏を含めることはできません。
▼ このような書き⽅はできない@<B>{テキスト
テキスト
テキスト 。}..................................................
♣ 太字
太字にするだけなら「@<b>{...}」で囲みます。強調と違い、ゴシック体になりま– 65 –

第 3 章 記法

せん。
▼ サンプル
テキスト@<b>{テキスト}テキスト 。
▼ 表⽰結果
テキストテキストテキスト。
前述したように、⽇本語の⽂章では強調するときは太字のゴシック体にするのが⼀般的です。そのため強調したいときは、ゴシック体にならない「@<b>{...}」は使わないほうがいいでしょう。
ただし、プログラムコードの中では「@<B>{...}」ではなく「@<b>{...}」を使ってください。理由は、プログラムコードは等幅フォントで表⽰しているのに、「@<B>{...}」だとゴシック体のフォントに変更してしまうからです。
「@<b>{...}」
はフォントを変更しないので、等幅フォントのままで太字になります。

♣ 装飾
テキストを装飾するには、表 3.2 のようなインライン命令を使います。
▼ 表 3.2: 装飾⽤のインライン命令
意味

⼊⼒

出⼒

太字

@<b>{テキスト}

テキスト

強調

@<strong>{テキスト}

テキスト

強調

@<B>{テキスト}

テキスト

傍点

@<bou>{テキスト}

テキスト

網掛け

@<ami>{テキスト}

下線@<u>{テキスト}

A
AAAA
テキスト
A
AAAA

取り消し線

@<del>{テキスト}

テキスト

⽬⽴たせない@<weak>{テキスト}

テキスト

ゴシック体

@<em>{テキスト}

テキスト

イタリック体@<i>{Text}

Text

等幅

@<tt>{Text}

Text

コード

@<code>{Text}

Text

・ ・ ・ ・

テキスト

♣ ⽂字サイズ⽂字の⼤きさを変更するインライン命令もあります（表 3.3）。

– 66 –

3.6 強調と装飾▼ 表 3.3: ⽂字の⼤きさを変更するインライン命令
意味

⼊⼒

出⼒

⼩さく

@<small>{テキスト}

テキスト

もっと⼩さく@<xsmall>{テキスト}

テキスト

もっともっと⼩さく@<xxsmall>{テキスト}

テキスト

⼤きく

@<large>{テキスト}

テキスト

もっと⼤きく@<xlarge>{テキスト}

テキスト

もっともっと⼤きく@<xxlarge>{テキスト}

テキスト♣ マーキング⽤
装飾ではなく、論理的な意味を与えるマーキング⽤のインライン命令もあります（表 3.4）。
▼ 表 3.4: マーキング⽤のインライン命令
意味

⼊⼒

出⼒

追加されたテキスト@<ins>{xxx}xxx

プログラムコード@<code>{xxx}

xxx

ファイル名

@<file>{xxx}

ユーザ⼊⼒⽂字列@<userinput>{xxx}

xxx
xxx

追加されたテキストを表す「@<ins>{}」は、通常の本⽂では下線になりますが、プ
ログラムコード（//list{ ... //}）やターミナル（//terminal{ ... //}）の中では太字になります。

..................................................
「@<tt>{}」ではなく「@<code>{}」や「@<file>{}」を使う
プロブラムコードやコマンド⽂字列を等幅フォントで表すには、「@<tt>{}」ではなく「@<code>{}」を使ってください。理由は、プログラムコードであることを表すにはフォントを変更するコマンドではなく、「プログラムコードである」ことを表すコマンドを使うべきだからです。加えて両者ではシングルクォー
トとバッククォートの表⽰が異なり、たとえば「@<tt>{'`}」は「’‘」と表⽰*5 。
され、「@<code>{'`}」は「'`」と表⽰されます（Starter 拡張）

同じような理由で、ファイル名を表すには「@<file>{}」を使ってください。
「@<tt>{}」や「@<code>{}」を使うべきではありません。

*5 使⽤する等幅フォントによっては同じように表⽰されます。

– 67 –

第 3 章 記法..................................................
♣ その他のインライン命令
ダブルクォーテーション「@<qq>{...}」を使うと、引数の⽂字列を適切なダブルクォーテーションで囲みます。

• PDF では「``...''」のように囲みます。これは LATEX での標準的な⽅法であり、表⽰がきれいです。

• HTML では「 ... 」のように全⾓記号で囲みます。
表⽰を⽐べてみましょう。

•「@<qq>{Apple}」は、「“Apple”」と表⽰されます。
•「"Apple"」（半⾓記号）は、「"Apple"」と表⽰されます。
•「 Apple 」（全⾓記号）は、「 Apple 」と表⽰されます。

3.7

プログラムリスト♣ 基本的な書き⽅
プログラムリストは「//list{ ... //}」で囲み、第 2 引数に説明書きを指定します。
▼ サンプル//list[][フィボナッチ数列]{
def fib(n):return n if n <= 1 else fib(n-1) + fib(n-2)//}▼ 表⽰結果▼ フィボナッチ数列
def fib(n):return n if n <= 1 else fib(n-1) + fib(n-2)

もし説明⽂字列の中に「]」を含める場合は、「\]」のようにエスケープしてくださ– 68 –

3.7 プログラムリスト

い。また説明書きをつけない場合は、引数を省略して「//list{ ... //}」のように書けます。

♣ リスト番号
第 1 引数にラベル名を指定すると、リスト番号がつきます。また「@<list>{ラベル名}」とすると、ラベル名を使ってプログラムリストを参照できます。そのため、ラベル名は他と重複しない⽂字列にしてください。
▼ サンプル
サンプルコードはこちら（ @<list>{fib2} ）。
//list[fib2][フィボナッチ数列]{
def fib(n):return n if n <= 1 else fib(n-1) + fib(n-2)//}▼ 表⽰結果サンプルコードはこちら（リスト 3.1）。
▼ リスト 3.1: フィボナッチ数列
def fib(n):return n if n <= 1 else fib(n-1) + fib(n-2)

第 1 引数だけ指定して「//list[ラベル名]{ ... //}」のようにすると、リスト
番号はつくけど説明はつきません。

♣ ラベルの⾃動指定
リスト番号はつけたいけど、重複しないラベル名をいちいちつけるのが⾯倒なら、ラベル名のかわりに「?」を指定します。ただし「@<list>{ラベル名}」での参照はできなくなります。
▼ サンプル//list[?]{def fib(n):return n if n <= 1 else fib(n-1) + fib(n-2)//}– 69 –

第 3 章 記法▼ 表⽰結果▼ リスト 3.2:
def fib(n):return n if n <= 1 else fib(n-1) + fib(n-2)

この機能は、すべてのプログラムリストに⼿っ取り早くリスト番号をつけたいときに便利です。

♣ ⻑い⾏の折り返し
Starter では、プログラムコードの⻑い⾏は⾃動的に折り返されます。⾏が折り返されると⾏末と次の⾏の先頭に折り返し記号がつくので、どの⾏が折り返されか簡単に⾒分けがつきます。
▼ サンプル//list{sys.stderr.write("Something error raised. Please contact to sys›
›tem administrator.")//}▼ 表⽰結果sys.stderr.write("Something error raised. Please contact to sys›

›tem administrator.")「@<b>{}」で太字にしたり、「@<del>{}」で取り消し線を引いても、きちんと折り返しされます。
▼ サンプル//list{@<b>{sys.stderr.write("Something error raised. Please contact t››o system administrator.")}@<del>{sys.stderr.write("Something error raised. Please contact›› to system administrator.")}//}– 70 –

3.7 プログラムリスト▼ 表⽰結果sys.stderr.write("Something error raised. Please contact to sys›

›tem administrator.")sys.stderr.write("Something error raised. Please contact tosystem administrator.")

ただし折り返し箇所が⽇本語だと、折り返しされても折り返し記号がつきません。
折り返し箇所が⽇本語でも、折り返し記号がつくようになりました。以前のバージョンを使っている場合は Starter のプロジェクトを作り直してみてください。
折り返しをしたくないときは、「//list[][][fold=off]」と指定します。
▼ サンプル//list[][][fold=off]{sys.stderr.write("Something error raised. Please contact to sys›
›tem administrator.")//}▼ 表⽰結果sys.stderr.write("Something error raised. Please contact to sys›

›tem administrator.")

折 り 返 し は す る け ど 折 り 返 し 記 号 を つ け た く な い 場 合 は 、「//list[][][foldmark=off]」と指定します。
▼ サンプル//list[][][foldmark=off]{sys.stderr.write("Something error raised. Please contact to sys›
›tem administrator.")//}▼ 表⽰結果sys.stderr.write("Something error raised. Please contact to sys
tem administrator.")– 71 –

第 3 章 記法♣ 改⾏⽂字を表⽰
第 3 引数に「[eolmark=on]」と指定をすると、改⾏⽂字がうっすらと表⽰されます。この機能は折り返し記号をオフにしてから使うといいでしょう。
▼ サンプル//list[][][eolmark=on,foldmark=off]{
function fib(n) {if (n <= 1) { return n; }return fib(n-1) + fib(n-2);}//}▼ 表⽰結果function fib(n) {ø
if (n <= 1) { return n; }ø
return fib(n-1) + fib(n-2);ø
}ø..................................................
折り返し記号や改⾏⽂字をマウス選択の対象外にする
PDF 中のプログラムコードをマウスでコピーしたとき、折り返し記号や改⾏⽂字がコピーした⽂字列に含まれると、それらをいちいち除去しないといけな
いので不便です。

Starter では、これらの記号をマウス選択の対象から外すことができます。詳しくは「♣ [PDF] 折り返し記号や⾏番号をマウス選択の対象から外す」(p.154)
を参照してください。

..................................................
♣ インデント
第 3 引数にたとえば「[indent=4]」*6 のような指定をすると、4 ⽂字幅でのインデントを表す縦線がうっすらとつきます。

*6 後⽅互換性のために、「[indentwidth=4]」という名前でも指定できます。

– 72 –

3.7 プログラムリスト▼ サンプル//list[][][indent=4]{
class Fib:
def __call__(n):if n <= 1:
return n
else:
return fib(n-1) + fib(n-2)//}▼ 表⽰結果class Fib:
def __call__(n):if n <= 1:
return n
else:
return fib(n-1) + fib(n-2)

Python のようにインデントの深さでブロックを表すプログラミング⾔語では、ブロックの終わりが明⽰されません。そのためプログラムの途中で改ページされると、その前後のブロックの関係が読者には分からなくなります。
そのような場合は、この機能を使ってインデントを表⽰してあげるとよいでしょう。

..................................................
インデント記号をコピペ対象にしない
以前の Starter では、インデントを表す記号としてパイプ記号「|」を使っていました。そのせいで、プログラムコードをマウスでコピペするとパイプ記号も⼀緒にコピペされてしまっていました。これは読者にとってうれしくない仕様です。
現在の Starter では、インデントを表す記号のかわりに図形として縦線を引いています。そのおかげで、コピペしてもパイプ記号が⼊りません*7 。Starter
による気配りの⼀例です。
*7 ただし、Starter のデフォルトでは折り返し記号や⾏番号がコピペ対象に含まれてしまいます。これについては「♣ [PDF] 折り返し記号や⾏番号をマウス選択の対象から外す」(p.154) を参照してください。

– 73 –

第 3 章 記法..................................................
♣ 外部ファイルの読み込みプログラムコードを外部ファイルから読み込むには、2 つ⽅法があります。
ひとつは、「//list[][][file=...]」のように「//list」の第 3 引数にファイル名を指定することです。この場合、ブロックの中⾝は無視されます（ブロックそのものは省略できません）。
▼ サンプル//list[][][file=source/fib3.rb]{//}

もうひとつは、「@<include>{}」というインライン命令を使うことです*8 。
▼ サンプル//list[fib3][フィボナッチ数列]{@<include>{source/fib3.rb}//}

脚注のリンク先にあるように、この⽅法は Re:VIEW では undocumented です。
Starter では正式な機能としてサポートします。

♣ タブ⽂字プログラムコードの中にタブ⽂字があると、8 ⽂字幅のカラムに合うよう⾃動的に
半⾓空⽩に展開されます。
しかし「@<b>{...}」のようなインライン命令があると、カラム幅の計算が狂うた
め、意図したようには表⽰されないことがあります。
そのため、プログラムコードにはなるべくタブ⽂字を含めないほうがいいでしょう。

♣ 全⾓⽂字の幅を半⾓ 2 ⽂字分にするプログラムコードのデフォルトでは、全⾓⽂字の幅は半⾓⽂字 2 ⽂字分より少し狭くなっています。「//list」の第 3 引数に「widecharfit=on」というオプションを指定すると、全⾓⽂字の幅が半⾓⽂字 2 ⽂字分に揃います。

*8 参考：https://github.com/kmuto/review/issues/887– 74 –

3.7 プログラムリスト▼ サンプル//list[][][widecharfit=on]{123456789_123456789_123456789_123456789_123456789_
あいうえおかきくけこさしすせそたちつてとなにぬねの//}▼ 表⽰結果123456789_123456789_123456789_123456789_123456789_
あいうえおかきくけこさしすせそたちつてとなにぬねのプログラムやターミナル画⾯において、全⾓と半⾓が混在しているせいで表⽰が崩れる場合は、このオプションを指定すると表⽰が崩れなくなります。
▼ 「widecharfit=on」がない場合：表⽰が崩れる
testdb1=> select * from members order by id;
id |
name
| height | gender-----+----------+--------+-------101 | エレン|
170 | M
102 | ミカサ|
170 | F103 | アルミン |163 | M
104 | ジャン|
175 | M
105 | サシャ|
168 | F106 | コニー|
158 | M
(6 rows)▼ 「widecharfit=on」がある場合：表⽰が崩れない
testdb1=> select * from members order by id;
id |
name
| height | gender-----+----------+--------+-------101 | エ レ ン|
170 | M
102 | ミ カ サ|
170 | F103 | ア ル ミ ン |163 | M
104 | ジ ャ ン|
175 | M
105 | サ シ ャ|
168 | F106 | コ ニ ー|
158 | M
(6 rows)

このオプションをデフォルトで有効にしたい場合は、「♣ オプションのデフォルト– 75 –

第 3 章 記法値」(p.153) を参考にしてください。

..................................................
全⾓⽂字の判定
全⾓⽂字の判定は、現在は次のようなコードで⾏っており、かなりいい加減です。改善については相談してください。
▼ 全⾓⽂字の判定⽅法 (Ruby)
string.each_char do |char|
if char =~ /[\000-\177]/# 半⾓⽂字else# 全⾓⽂字end
end# charは⻑さ1の⽂字列..................................................
♣ 出⼒結果
出⼒結果や変換結果を表すための「//output」というブロック命令も⽤意されています。使い⽅は「//list」と同じで、⾒た⽬が少し違うだけです。たとえば⾃動⽣成された HTML や CSS を表⽰したり、SQL とその実⾏結果を分けて表⽰したい
ときに使うといいでしょう。
▼ サンプル//list[][⼀覧を取得するSQL]{
select gender, count(*)
from members
group by gender
order by gender;//}//output[][実⾏結果]{
gender | count--------+------F
|
2
M
|
4
(2 rows)//}– 76 –

3.7 プログラムリスト▼ 表⽰結果▼ ⼀覧を取得する SQL
select gender, count(*)
from members
group by gender
order by gender;▼ 実⾏結果gender | count--------+------F
|
2
M
|
4
(2 rows)「//output」では全⾓⽂字の幅が半⾓⽂字のちょうど 2 個分になるよう設定されているので、半⾓と全⾓が混在していても表⽰が崩れません*9 。
▼ 「//list」での表⽰結果（少し崩れる）
id |
name
| height | gender-----+----------+--------+-------101 | エレン|
170 | M
102 | ミカサ|
170 | F103 | アルミン |163 | M
(3 rows)▼ 「//output」での表⽰結果（崩れない）
id |
name
| height | gender-----+----------+--------+-------101 | エ レ ン|
170 | M
102 | ミ カ サ|
170 | F103 | ア ル ミ ン |163 | M
(3 rows)♣ その他のオプション「//list」の第 3 引数には、次のようなオプションも指定できます。
*9 ただし、「//output」で使われる等幅フォントによっては表⽰が崩れることがあります。その場合は config-starter.yml で「output_ttfont: beramono」を指定してみてください。

– 77 –

第 3 章 記法

fontsize={small|x-small|xx-small|large|x-large|xx-large}

⽂字の⼤きさを⼩さく（または⼤きく）します。どうしてもプログラムコードを折返ししたくないときに使うといいでしょう。
lineno={on|off|integer}

⾏番号をつけます。詳細は次の節で説明します。
linenowidth={0|integer}

⾏番号の幅を指定します。詳細は次の節で説明します。
classname=classname

HTML タグのクラス名を指定します。HTML または ePub のときだけ機能します。
lang=langname

プログラム⾔語の名前を指定します。コードハイライトのために使いますが、Starter ではまだ対応していません。
なおオプションのデフォルト値は、「congif-starter.yml」で設定できます。詳しくは「♣ オプションのデフォルト値」(p.153) を参照してください。

3.8

⾏番号

♣ プログラムリストに⾏番号をつける
プログラムリストに⾏番号をつけるには、「//list」ブロック命令の第 3 引数を次のように指定します。
▼ サンプル//list[][][lineno=on]{function fib(n) {return n <= 1 ? n : fib(n-1) + fib(n-2);}//}▼ 表⽰結果

1 function fib(n) {2return n <= 1 ? n : fib(n-1) + fib(n-2);
3 }– 78 –

3.8 ⾏番号「on」のかわりに開始⾏番号を指定できます。
▼ サンプル//list[][][lineno=99]{
function fib(n) {return n <= 1 ? n : fib(n-1) + fib(n-2);}//}▼ 表⽰結果
99 function fib(n) {100
return n <= 1 ? n : fib(n-1) + fib(n-2);
101 }「lineno=1」のかわりに「1」とだけ書いても、⾏番号がつきます。⾏番号をつける⽅法としてはいちばん短い書き⽅です。
▼ サンプル//list[][][1]{function fib(n) {return n <= 1 ? n : fib(n-1) + fib(n-2);}//}▼ 表⽰結果
1 function fib(n) {2return n <= 1 ? n : fib(n-1) + fib(n-2);
3 }♣ ⾏番号の幅を指定する
前の例では⾏番号が外側に表⽰されました。⾏番号の幅を指定すると、⾏番号が内側に表⽰されます。

– 79 –

第 3 章 記法▼ サンプル//list[][][lineno=on,linenowidth=3]{function fib(n) {return n <= 1 ? n : fib(n-1) + fib(n-2);}//}▼ 表⽰結果
1: function fib(n) {2:return n <= 1 ? n : fib(n-1) + fib(n-2);
3: }また幅を「0」に指定すると、⾏番号の幅を⾃動的に計算します。
▼ サンプル//list[][][lineno=99,linenowidth=0]{function fib(n) {return n <= 1 ? n : fib(n-1) + fib(n-2);}//}▼ 表⽰結果
99: function fib(n) {100:
return n <= 1 ? n : fib(n-1) + fib(n-2);
101: }♣ 複雑な⾏番号指定
⾏番号は「lineno=80-83&97-100&105-」のような複雑な指定もできます。

•「80-83」は 80 ⾏⽬から 83 ⾏⽬を表します。
•「105-」は 105 ⾏⽬以降を表します。
•「&」は⾏番号をつけないことを表します。

– 80 –

3.9 ターミナル▼ サンプル//list[][][lineno=80-83&97-100&105-,linenowidth=0]{// JavaScript
function fib(n) {return n <= 1 ? n : fib(n-1) + fib(n-2);}...（ 省略 ）...
## Rubydef fib(n)n <= 1 ? n : fib(n-1) + fib(n-2);
end...（ 省略 ）...
## Pythondef fib(n):return n if n <=1 else fib(n-1) + fib(n-2)//}▼ 表⽰結果80: // JavaScript
81: function fib(n) {82:
return n <= 1 ? n : fib(n-1) + fib(n-2);
83: }: ...（ 省略 ）...
97: ## Ruby
98: def fib(n)99:n <= 1 ? n : fib(n-1) + fib(n-2);
100: end: ...（ 省略 ）...
105: ## Python
106: def fib(n):107:return n if n <=1 else fib(n-1) + fib(n-2)

3.9

ターミナル

♣ 基本的な書き⽅
ターミナル（端末）の画⾯を表すには、「//terminal{ ... //}」というブロッ– 81 –

第 3 章 記法

ク命令を使います。
▼ サンプル//terminal[?][PDFを⽣成]{$ rake pdf@<balloon>{Dockerを使わない場合}$ rake docker:pdf@<balloon>{Dockerを使っている場合}//}▼ 表⽰結果▼ リスト 3.3: PDF を⽣成$ rake pdf$ rake docker:pdf← Dockerを使わない場合← Dockerを使っている場合

引数はプログラムリスト「//list{ ... //}」と同じなので、引数の説明は省略します。
過去との互換性のために、「//cmd{ ... //}」というブロック命令もあります。
しかしこの命令はリスト番号や⾏番号がつけられないし、「//list」命令と使い⽅が違うので、もはや使う必要はありません。
▼ サンプル//cmd[PDFを⽣成]{$ rake pdf$ rake docker:pdf//}@<balloon>{Dockerを使わない場合}@<balloon>{Dockerを使っている場合}▼ 表⽰結果▼ PDF を⽣成

$ rake pdf$ rake docker:pdf← Dockerを使わない場合← Dockerを使っている場合♣ ユーザ⼊⼒「@<userinput>{}」を使うと、ユーザによる⼊⼒箇所を⽰せます*10 。
*10 ただし、「@<userinput>{}」では⻑い⾏を⾃動的に折り返せません。これは今後の課題です。

– 82 –

3.9 ターミナル▼ サンプル//terminal[?][PDFを⽣成]{$ @<userinput>{rake pdf}›}
$ @<userinput>{rake docker:pdf}
› 合}
//}

@<balloon>{Dockerを使わない場合›@<balloon>{Dockerを使っている場›▼ 表⽰結果▼ リスト 3.4: PDF を⽣成$ rake pdf$ rake docker:pdf← Dockerを使わない場合← Dockerを使っている場合♣ ターミナルのカーソル「@<cursor>{...}」を使うと、ターミナルでのカーソルを表せます。
次の例では、2 ⾏⽬の真ん中の「f」にカーソルがあることを表しています。
▼ サンプル//terminal{
function fib(n) {return n <= 1 ? n : @<cursor>{f}ib(n-1) : fib(n-2);}~~"fib.js" 3L, 74C written//}▼ 表⽰結果function fib(n) {return n <= 1 ? n : fib(n-1) : fib(n-2);}~~"fib.js" 3L, 74C written– 83 –

第 3 章 記法

3.10

脚注

♣ 脚注の書き⽅
脚 注 は 、脚 注 を つ け た い 箇 所 に「@<fn>{ラ ベ ル}」を 埋 め 込 み 、脚 注 の ⽂ は「//footnote[ラベル][脚注⽂]」のように書きます。
▼ サンプル
本⽂ 。本⽂@<fn>{fn-101} 。本⽂ 。
//footnote[fn-101][脚注⽂ 。脚注⽂ 。]▼ 表⽰結果本⽂。本⽂*11 。本⽂。
このページの最下部に脚注が表⽰されていることを確認してください。
また脚注⽂に「]」を埋め込む場合は、「\]」のようにエスケープしてください。
▼ サンプル
本⽂@<fn>{fn-102} 。
//footnote[fn-102][脚注に「 \] 」を⼊れる 。]▼ 表⽰結果本⽂*12 。

♣ 脚注の注意点
LATEX の制限により、脚注が表⽰されなかったりエラーになることがあります。
• コラムの中で脚注を使うと、脚注が表⽰されないことがあります。この場合、コラムを明⽰的に閉じてください。詳しくは「♣ コラム内の脚注」(p.92) を参照してください。

• ミニブロックの中で脚注を使うと、脚注が表⽰されないことがあります。ミニ
ブロックについての詳細は「♣ ノート以外のミニブロック」(p.87) を参照してください。
*11 脚注⽂。脚注⽂。
*12 脚注に「]」を⼊れる。

– 84 –

3.11 ノート..................................................
脚注がうまく表⽰されない理由
コラムやミニブロックでは、囲み枠が使われています。LATEX で囲み枠を実現するには、「minipage 環境」という機能を使うのが⼀般的です。LATEX の

minipage 環境はページ内で別のページを実現する機能であり、HTML でいう
なら iframe のようなものです。
そして minipage 環境はそれ⾃体が独⽴したページなので、minipage 環境内
で脚注を使うとそれが外側のページにうまく伝わりません。これがコラムやミニブロックで脚注がうまく使えない理由です。
対策としては、コラムやミニブロックのデザイを枠線を使わないように変更することです。または、コラムやミニブロックでは脚注を使わないように⽂章を⼯夫することです。
なお Starter では、ミニブロックのうちノート（//note）に関しては minipage
環境を使わないデザインにしています。ノートについては次の節で紹介します。

..................................................

3.11

ノート

補⾜情報や注意事項などを表⽰する枠を、Starter では「ノート」と呼びます。

♣ ノートの書き⽅
ノートは、「//note{ ... //}」というブロック命令で表します。
▼ サンプル//note[締め切りを守るたったひとつの冴えたやり⽅]{
原稿の締め切りを守るための 、素晴らしい⽅法を教えましょう 。
それは 、早い時期に執筆を開始することです 。
//}▼ 表⽰結果..................................................
締め切りを守るたったひとつの冴えたやり⽅
原稿の締め切りを守るための、素晴らしい⽅法を教えましょう。それは、早い時期に執筆を開始することです。

..................................................
– 85 –

第 3 章 記法

ノートには、箇条書きやプログラムコードを⼊れられます（Starter 独⾃拡張）。
▼ サンプル//note[ノートタイトル]{* 箇条書き* 箇条書き//list[][プログラムコード]{
def fib(n):return n if n <= 1 else fib(n-1) + fib(n-2)//}//}▼ 表⽰結果..................................................
ノートタイトル• 箇条書き• 箇条書き▼ プログラムコード
def fib(n):return n if n <= 1 else fib(n-1) + fib(n-2)..................................................

なお現在、ノートのタイトルに「@<code>{...}」を⼊れると「TeX capacity
exceeded, sorry [input stack size=5000].」という LATEX のエラーが発⽣します。原因は不明なので、もしこのようなエラーが発⽣したらノートのタイトルから「@<code>{...}」を外してみてください。

♣ ラベルをつけて参照する
ノートにラベルをつけて、「@<noteref>{ラベル名}」で参照できます（Starter 独
⾃拡張）。
▼ サンプル– 86 –

3.11 ノート//note[note-123][詳細情報]{
詳細な説明は次のようになります 。……
//}

詳しくは@<noteref>{note-123}を参照してください 。
▼ 表⽰結果..................................................
詳細情報
詳細な説明は次のようになります。……

..................................................
詳しくはノート「詳細情報」(p.87) を参照してください。
上の例で、第 1 引数がノートタイトルではなくラベル名になっていることに注意してください。通常は次のどちらかを使うといいでしょう。

• タイトルだけを指定するなら「//note[タイトル]{...//}」• ラベルとタイトルを指定するなら「//note[ラベル][タイトル]{...//}」..................................................
ノートブロック命令における引数の詳しい仕様「//note」ブロック命令は、過去との互換性を保ったままラベル機能を導⼊したので、引数の仕様が少し複雑になっています。
引数の詳しい仕様を表 3.5 にまとめました。これを⾒ると分かるように、第1 引数だけを指定した場合はラベルではなくタイトルとみなされます。注意してください。

..................................................
♣ ノート以外のミニブロック
ノート以外にも、Re:VIEW では次のようなブロックが⽤意されています。

•「//memo」（メモ）•「//tip」（Tips）•「//info」（情報）•「//warning」（警告）•「//important」（重要事項）– 87 –

第 3 章 記法▼ 表 3.5: 「//note」の引数の仕様
記述

ラベル

タイトル

//note[ラベル][タイトル]ありあり//note[][タイトル]なしあり//note[ラベル][]ありなし//note[タイトル]なしあり//note[][]なし

なし//note[]なし

なし//noteなし

なし•「//caution」（注意喚起）•「//notice」（お知らせ）
これらを Re:VIEW で使うとひどいデザインで表⽰されますが、Starter では簡素なデザインで表⽰するよう修正しています。
▼ サンプル//notice[ご来場のみなさまへ]{
本建物の内部には 、王族しか⼊ることができません 。
それ以外の⽅は⼊れないので 、あらかじめご了承ください 。
//}▼ 表⽰結果

ご来場のみなさまへ
本建物の内部には、王族しか⼊ることができません。それ以外の⽅は⼊れないので、あらかじめご了承ください。

第 1 引数のタイトルは省略できます。
また Starter では、「//info」と「//caution」と「//warning」に専⽤のアイコン画像*13 を⽤意しています。

*13 これらのアイコン画像はパブリックドメインにするので、商⽤・⾮商⽤を問わず⾃由にお使いくだ

さい。再配布も⾃由に⾏って構いません。

– 88 –

3.11 ノート

▼ サンプル//info[解決のヒント]{
本製品を⼿に取り 、古くから伝わるおまじないを唱えてみましょう 。
すると天空の城への⾨が開きます 。
//}//caution[使⽤上の注意]{
本製品を⽯版にかざすと 、天空の城から雷が発射されます 。
周りに⼈がいないことを確かめてから使⽤してください 。
//}//warning[重⼤な警告]{
本製品を持ったまま滅びの呪⽂を唱えると 、天空の城は⾃動的に崩壊します 。
⼤変危険ですので 、決して唱えないでください 。
//}▼ 表⽰結果解決のヒント
本製品を⼿に取り、古くから伝わるおまじないを唱えてみましょう。すると
天空の城への⾨が開きます。

使⽤上の注意本製品を⽯版にかざすと、天空の城から雷が発射されます。周りに⼈がいないことを確かめてから使⽤してください。

重⼤な警告
本製品を持ったまま滅びの呪⽂を唱えると、天空の城は⾃動的に崩壊します。
⼤変危険ですので、決して唱えないでください。

これらのアイコン画像は Keynote でささっと作ったものなので、もっといいデザ
インのアイコン画像に変更するといいでしょう。デザインの変更⽅法は「♣ [PDF]– 89 –

第 3 章 記法「//info」や「//warning」のデザインを変更する」(p.148) を参照してください。
なお「//note」と違い、いくつか制限事項があります。

• 参照⽤のラベルはつけられません。
• LATEX の制限により、脚注がうまく表⽰されません。
• LATEX の制限により、プログラムリストやターミナル画⾯がページをまたげません。

• LATEX の制限により、画像と表の位置指定（「[pos=h]」のような指定）ができません。また強制的に「pos=H」が指定されたものとして扱われます。

..................................................
「warning」と「caution」の違い「warning」と「caution」は、どちらも警告や注意を表す⾔葉ですが、次のような違いがあるそうです*14 。

• 「warning」は致命的な結果になる可能性がある場合に使う。
• 「caution」は望ましくない結果になる可能性がある場合に使う。
つまり「warning」は強い警告、「caution」は弱い警告だと思えばいいでしょう。

..................................................

3.12

コラム

♣ コラムとは
コラムは、補⾜情報や関連情報を記述する囲みです。ノートとよく似ていますが、次のような違いがあります。

• ノートは主に数⾏〜⼗数⾏程度の内容です。コラムはもっと⻑い内容に使うことが多いです。

• ノートは⽬次に出ません。コラムは⽬次に出ます*15 。
• ノートは⽂章のどこに書いても構いません。コラムは主に章 (Chapter) の最後に書くことが多いです。

*14 参考：『Technical Writing: The Diﬀerence Between Warnings and Cautions』(http://www.stevensstrategic.com/technical-writing-the-difference-between-warnings-and-cautions/)*15 ただし「[notoc]」オプションをつけた場合を除く。

– 90 –

3.12 コラム

ときどき、ノートで書くべき内容をすべてコラムとして書いている同⼈誌を⾒かけます。間違いだとは⾔い切れないのですが、できれば両者の使い分けを意識しましょう。

♣ コラムの書き⽅
コ ラ ム は「==[column]」と「==[/column]」か 、ま た は「===[column]」と「===[/column]」で囲みます（イコール記号の数が違うことに注意）。また実装上の都合により、コラムを閉じる直前に空⾏を⼊れてください。
▼ サンプル===[column] サンプルコラム1
コラム本⽂ 。
- a. 箇条書き- b. 箇条書き//list[][プログラムリスト]{
def fib(n):return n if n <= 1 else fib(n-1) + fib(n-2)//}←空⾏を⼊れてから 、===[/column]←コラムを閉じる▼ 表⽰結果【コラム】サンプルコラム 1
コラム本⽂。

a. 箇条書きb. 箇条書き▼ プログラムリスト
def fib(n):return n if n <= 1 else fib(n-1) + fib(n-2)– 91 –

第 3 章 記法♣ コラム内の脚注
前の例を⾒れば分かるように、コラムの中には箇条書きやプログラムリストなどを含めることができます。ただし、脚注だけはコラムを閉じたあとに書く必要があります。
▼ サンプル===[column] サンプルコラム2
コラム本⽂@<fn>{fn-222} 。

←コラムを閉じて 、===[/column]//footnote[fn-222][脚注の⽂章 。]←そのあとに書くこと！

▼ 表⽰結果【コラム】サンプルコラム 2
コラム本⽂*16 。

♣ コラムを参照
コラムを参照するには、コラムにラベルをつけて、それを「@<column>{ラベル}」で参照します。
▼ サンプル===[column]{column3} サンプルコラム3
サンプルコラム本⽂ 。

←コラムを閉じて 、===[/column]@<column>{column3}を参照 。

▼ 表⽰結果*16 脚注の⽂章。

– 92 –

3.12 コラム

【コラム】サンプルコラム 3
サンプルコラム本⽂。

コラム 「サンプルコラム 3」を参照。

♣ コラムの制限
現在、コラムには次のような制限があります。

• コラム内で「//list」や「//terminal」を使うと、それらはページをまたいでくれません*17 。

• 画 像 と 表 の 位 置 指 定 が で き ま せ ん 。「//image[][][pos=h]」や「//table[][][pos=h]」を指定するとエラーになるので*18 、指定しないでください。
これらの制限は仕様です。あきらめてください。

..................................................
コラムは⾒出しの⼀種
Re:VIEW および Starter では、コラムは節 (Section) や項 (Subsection) といった⾒出しの⼀種として実装されています。そのため、「==[column]」なら
節 (Section) と同じような扱いになり、「===[column]」なら項 (Subsection)と同じような扱いになります（⽬次レベルを⾒るとよく分かります）。
また節や項は閉じる必要がない（勝⼿に閉じてくれる）のと同じように、コラ
ムも「===[/column]」がなければ勝⼿に閉じてくれます。しかし明⽰的に閉じないと脚注が出⼒されないことがあるので、横着をせずに明⽰的にコラムを閉じましょう。

..................................................

*17 これは L
AT X の framed 環境による制限です。解決するには framed 環境を使わないよう変更すEる必要があります。
*18 oframe 環境の中では table 環境や figure 環境のようなフローティング要素が使えないという
LATEX の制約が原因です。

– 93 –

第 3 章 記法

3.13

画像

♣ 画像ファイルの読み込み⽅
画像を読み込むには、「//image[画像ファイル名][説明⽂字列][オプション]」を使います。

• 画像ファイルは「images/」フォルダに置きます*19 。
• 画像ファイル名には拡張⼦を指定しません（⾃動的に検出されます）。
• 画像ファイル名がラベルを兼ねており、「@<img>{画像ファイル名}」で参照できます。

• 画像の表⽰幅は第 3 引数のオプションとして指定します。詳しくは後述します。

• 第 3 引数のオプションは省略できます。どんなオプションが指定できるかは後述します。
次の例では、画像ファイル「images/tw-icon1.jpg」を読み込んでいます。
▼ サンプル//image[tw-icon1][Twitterアイコン][width=30mm]

表⽰例は図 3.1 を⾒てください。

▲ 図 3.1: Twitter アイコン

*19 画像ファイルを置くフォルダは、設定ファイル「config.yml」の設定項⽬「imagedir」で変更できますが、通常は変更する必要はないでしょう。

– 94 –

3.13 画像..................................................
1 つの画像ファイルを複数の箇所から読み込まない「//image」コマンドでは、画像ファイル名がラベルを兼ねます。そのせい
で、1 つの画像ファイルを複数の箇所で読み込むとラベルが重複してしまい、コンパイル時に警告が出ます。また「@<img>{}」で参照しても、画像番号がずれてしまい正しく参照できません。

Re:VIEW および Starter では 1 つの画像ファイルを複数の箇所から読み込むのは⽌めておきましょう。かわりにファイルをコピーしてファイル名を変えましょう*20 。

..................................................
♣ 画像の表⽰幅を指定する「//image」の第 3 引数に、画像を表⽰する幅を指定できます。指定⽅法は 2 つあります。
//image[][][scale=0.5]

画像の幅が本⽂幅より⼤きいか⼩さいかで挙動が変わります。

• 画像の幅が本⽂幅より⼤きい場合は、本⽂幅を基準とします。この例なら、本⽂幅の半分の幅で表⽰されます。

• 画像の幅が本⽂幅より⼩さい場合は、画像の幅を基準とします。この例
なら、画像幅の半分の幅で表⽰されます。
//image[][][width=50%]

常に本⽂幅の半分の幅で画像を表⽰します。また「50%」のような⽐率だけでなく、「150px」や「50mm」のように本⽂幅と関係ない⻑さの指定ができます。
値には必ず単位が必要であり、「width=0.5」のような指定はできません。
「scale」も「width」も指定しなかった場合は、次のように表⽰されます。

• 画像の幅が本⽂幅より⼤きい場合は、本⽂幅に縮⼩されて表⽰されます。
• 画像の幅が本⽂幅より⼩さい場合は、画像幅のままで表⽰されます*21 。
な お「scale=0.5」は Re:VIEW で も Starter で も 使 え る オ プ シ ョ ン で す が 、「width=50%」は Starter でのみ使えるオプションです。
「width=50%」は Re:VIEW
では使えないので注意してください。

PDF と HTML の 場 合 で 表 ⽰ 幅 を 変 え る よ う な 指 定 も で き ま す 。

*20 （分かる⼈向け）もちろんシンボリックリンクやハードリンクでもいいです。
*21 Re:VIEW で HTML を⽣成すると、画像の幅が本⽂幅より⼩さい場合、本⽂幅いっぱいで表⽰されてしまいます。この挙動は困るので、Starter では画像幅のままで表⽰するよう修正しています。

– 95 –

第 3 章 記法*22 のように指定すると、PDF のとき「latex::width=100%, html::width=50%」は本⽂幅いっぱいに画像を表⽰し、HTML のときは本⽂幅の半分の幅で画像を表⽰します。

..................................................
「scale=0.5」の挙動について
Re:VIEW のドキュメント*23 には、「scale=0.5」について次のように説明されています。

3 番⽬の引数として、画像の倍率‧⼤きさを指定できます。今のところ「scale=X」で倍率（X 倍）を指定でき、HTML、TeX ともに紙⾯（画⾯）幅に対しての倍率となります（0.5 なら半分の幅になります）。
しかし、これは画像の幅が本⽂幅より⼤きい場合の説明です。画像の幅が本⽂より⼩さい場合は、「scale=0.5」は本⽂幅の半分ではなく画像幅の半分になります。つまり、こういうことです：
‧ ‧ ‧

‧ ‧ ‧

• 画像の幅が本⽂幅より⼤きい場合は、本⽂幅を基準とする。
‧ ‧ ‧
‧ ‧ ‧
• 画像の幅が本⽂幅より⼩さい場合は、画像幅を基準とする。
ややこしいことに、Re:VIEW が HTML を⽣成するときは必ず本⽂幅を基準としてしまいます。なぜなら、Re:VIEW では画像の表⽰幅を指定するのに「width:50%」のような CSS を使うためです。
こ れ は PDF の と き と 挙 動 が ⼤ き く 違 う の で 、Starter で は か わ り に「max-width:50%」のような CSS を使い、PDF の挙動に似せています。ただし完全に同じ動作にはならないので、どうしても Re:VIEW と互換性を持たせる必要がある場合を除き、「scale=0.5」ではなく「width=50%」を使うことを勧めます。

..................................................
♣ 章ごとの画像フォルダ
画像ファイルは、章 (Chapter) ごとのフォルダに置けます。たとえば原稿ファイ
ル名が「02-tutorial.re」であれば、章 ID は「02-tutorial」なので、画像ファイルを「images/02-tutorial/」に置けます*24（特別な設定は不要です）。これは複数の著者で⼀冊の本を執筆するときに便利です。
詳しくは Re:VIEW のマニュアル*25 を参照してください。
*22 この指定⽅法は、他のオプションや他のブロックコマンドでも使⽤できます。
*23 https://github.com/kmuto/review/blob/master/doc/format.ja.md#図*24 もちろん「images/」にも置けます。
*25 https://github.com/kmuto/review/blob/master/doc/format.ja.md#%E7%94%BB%E5%8

3%8F%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%8E%A2%E7%B4%A2– 96 –

3.13 画像♣ 画像のまわりに線をつける
第 3 引数に「[border=on]」をつけると、画像のまわりに灰⾊の線がつきます（Starter 拡張）。
▼ サンプル//image[tw-icon2][Twitterアイコン][scale=0.3,border=on]

表⽰結果は図 3.2 を⾒てください。

▲ 図 3.2: Twitter アイコン

♣ 画像の配置位置を指定する
第 3 引数に「[pos=...]」をつけると、読み込んだ画像をページのどこに配置する
か、指定できます（Starter 拡張）。
pos=H

なるべく現在位置に配置します。現在位置に読み込めるスペースがなければ次のページの先頭に配置し、現在位置にはスペースが空いたままになります。

Re:VIEW のデフォルトですが、ページ数が無駄に増えるのでお勧めしません。
pos=h

上と似ていますが、画像が次のページの先頭に配置されたときは、現在位置に後続の⽂章が⼊るため、スペースが空きません。Starter のデフォルトです*26 。
pos=t

ページ先頭に配置します。
pos=b

ページ最下部に配置します。
pos=p

独⽴したページに画像だけを配置します（後続の⽂章が⼊りません）。⼤きな*26 設定ファイル「config-starter.yml」の設定項⽬「image_position:」でデフォルト値を変更できます。

– 97 –

第 3 章 記法

画像はこれで表⽰するといいでしょう。
▼ サンプル
現在位置に配置//image[tw-icon][Twitterアイコン][scale=0.3,pos=h]
ページ先頭に配置//image[tw-icon][Twitterアイコン][scale=0.3,pos=t]
ページ最下部に配置//image[tw-icon][Twitterアイコン][scale=0.3,pos=b]「pos=H」と「pos=h」の違いは、図 3.3 を⾒ればよく分かるでしょう。

▲ 図 3.3: 「pos=H」（上）と「pos=h」（下）の違いただし位置指定は、コラムの中では使えず、ノート以外のミニブロック（「//info」
や「//warning」など）の中でも使えません。どちらの場合も、位置指定は強制的に– 98 –

3.13 画像

「pos=H」と同じ動作になります。これは LATEX の制約からくる仕様です。

♣ 画像に番号も説明もつけない
今まで説明したやり⽅では、画像に番号と説明⽂字列がつきました。これらをつけず、単に画像ファイルを読み込みたいだけの場合は、「//indepimage[ファイル名][][scale=1.0]」を使ってください。第 2 引数に説明⽂字列を指定できますが、通常は不要でしょう。
▼ サンプル//indepimage[tw-icon3][][scale=0.3]▼ 表⽰結果第 2 引数に説明⽂字列を指定した場合、Re:VIEW では「図：」という接頭辞がつきます。しかし//indepimage の⽤途を考えると、この接頭辞は邪魔でしょう。そこで Starter では、このような接頭辞をつけないようにしました。もし「図：」が必要なら⾃分で説明⽂字列につけてください。

♣ ⽂章の途中に画像を読み込む
⽂章の途中に画像を読み込むには、「@<icon>{画像ファイル名}」を使います。画
像の表⽰幅は指定できないようです。
▼ サンプル
⽂章の途中でファビコン画像「 @<icon>{favicon-16x16} 」を読み込む 。
▼ 表⽰結果⽂章の途中でファビコン画像「」を読み込む。

– 99 –

第 3 章 記法♣ 画像とテキストを並べて表⽰する
Starter では、画像とテキストを並べて表⽰するためのコマンド「//sideimage」
を⽤意しました。著者紹介において Twitter アイコンとともに使うといいでしょう。
▼ サンプル//sideimage[tw-icon4][20mm][side=L,sep=7mm,border=on]{//noindent@<B>{カウプラン機関極東⽀部}* @_kauplan (@<href>{https://twitter.com/_kauplan/})* @<href>{https://kauplan.org/}* 技術書典8新刊「 Pythonの黒魔術 」出ました 。
//}▼ 表⽰結果カウプラン機関極東⽀部• @_kauplan (https://twitter.com/_kauplan/)• https://kauplan.org/• 技術書典 8 新刊「Python の黒魔術」出ました。
使い⽅は「//sideimage[画像ファイル][画像表⽰幅][オプション]{ ... //}」です。

• 画像ファイルは「//image」と同じように指定します。
• 画像表⽰幅は「30mm」「3.0cm」「1zw」「10%」などのように指定します。使⽤
できる単位はこの 4 つであり、「1zw」は全⾓⽂字 1 ⽂字分の幅、「10%」は本
⽂幅の 10% になります。なお「//image」と違い、単位がない「0.1」が 10%を表すという仕様ではなく、エラーになります。

• オプションはたとえば「side=L,sep=7mm,boxwidth=40mm,border=on」のように指定します。

◦「side=L」で画像が左側、「side=R」で画像が右側にきます。デフォルトは「side=L」。

◦「sep=7mm」は、画像と本⽂の間のセパレータとなる余⽩幅です。デフォ
ルトはなし。

◦「boxwidth=40mm」は、画像を表⽰する領域の幅です。画像表⽰幅より広い⻑さを指定してください。デフォルトは画像表⽰幅と同じです。

– 100 –

3.14 表◦「border=on」は、画像を灰⾊の線で囲みます。デフォルトは oﬀ。
なお「//sideimage」は内部で LATEX の minipage 環境を使っているため、次のような制限があります。

• 途中で改ページされません。
• 画像下へのテキストの回り込みはできません。
• 脚注が使えません。
こういった制限があることを分かったうえで使ってください。

3.14

表

♣ 表の書き⽅表（テーブル）は「//table[ラベル][説明⽂字列]{ ... //}」のように書きます。

• ラベルを使って「@table{ラベル}」のように参照できます。
• セルは 1 ⽂字以上のタブ⽂字で区切ります。
• ヘッダは 12 ⽂字以上の「-」か「=」で区切ります。
▼ サンプル@<table>{tbl-sample1}を参照 。
//table[tbl-sample1][テーブルサンプル]{
Name
Val
Val
Val
-------------------------------AAA
10
10
10
BBB
100
100
100
CCC
1000
1000
1000
//}

▼ 表⽰結果表 3.6 を参照。

♣ ラベルの⾃動採番「//table[][]」の第 1 引数はラベルです。これがないと、「表 1.1」のような表⽰がされません。しかし、重複しない⽂字列を⽤意して第 1 引数に設定するのは、結構
⾯倒くさいです。

– 101 –

第 3 章 記法▼ 表 3.6: テーブルサンプル
Name
AAA
BBB
CCC

Val
10
100
1000

Val
10
100
1000

Val
10
100
1000

そこで Starter では、ラベルのかわりに「?」を指定する機能を⽤意しました。これを使うと、ランダム⽂字列が⾃動的に割り当てられるため、いつも「表 1.1」のような表⽰がされます（これは「//list[?]」と同じ機能です）。
次の例では、「//table」の第 1 引数がラベルではなく「?」になっています。これで重複しないランダム⽂字列が⾃動的に割り当てられるので、この表は番号つきで表⽰されます。
▼ サンプル//table[?][キャプション]{
Name
Val
Val
Val
-------------------------------AAA
10
10
10
BBB
100
100
100
CCC
1000
1000
1000
//}

▼ 表⽰結果▼ 表 3.7: キャプション
Name
AAA
BBB
CCC

Val
10
100
1000

Val
10
100
1000

Val
10
100
1000

♣ 右寄せ、左寄せ、中央揃え
セ ル の 右 寄 せ (r)・左 寄 せ (l)・中 央 揃 え (c) を 指 定 す る に は 、*27 を使います。ただし現在のところ、この機能は PDF ⽤「//tsize[latex][...]」*27 「//tsize[pdf][...]」ではなく「//tsize[latex][...]」なのは、内部で L
AT X という組版E– 102 –

3.14 表であり ePub では使えません。
▼ サンプル//tsize[latex][|l|r|l|c|]//table[tbl-sample2][右寄せ(r) 、左寄せ(l) 、中央揃え(c)]{
Name
Val
Val
Val
-------------------------------AAA
10
10
10
BBB
100
100
100
CCC
1000
1000
1000
//}

▼ 表⽰結果▼ 表 3.8: 右寄せ (r)、左寄せ (l)、中央揃え (c)
Name
AAA
BBB
CCC

Val
10
100
1000

Val
10
100
1000

Val
10
100
1000

「//tsize」の使い⽅は 2 種類あります。

(A)「//tsize[|latex||r|l|c|]」 … Re:VIEW での書き⽅（Starter でも使える）(B)「//tsize[latex][|r|l|c|]」 … Starter で追加した書き⽅（Re:VIEW では使えない）(A) の書き⽅では、「latex」や「html」を表す縦線と、罫線を指定する縦線とが混在しており、とても分かりにくいです。これに対し、Starter で追加された (B) の書き⽅であれば、ずっと⾒やすく書けます。どうしても Re:VIEW との互換性が必要な場合を除き、(B) の書き⽅をお勧めします。
なお「latex」を指定しない場合は次のように書きます。

•「//tsize[|||r|l|c|]」 … Re:VIEW での書き⽅•「//tsize[][|r|l|c|]」 … Starter で追加した書き⽅•「//tsize[*][|r|l|c|]」 … これでもよい

⽤ソフトウェアを使っているからです。

– 103 –

第 3 章 記法

ま た「//tsize[html,epub][...]」の よ う な 指 定 も で き ま す 。将 来 的 に「//tsize」が HTML や ePub をサポートすれば、このような指定が役に⽴つでしょう。

♣ 縦の罫線「//tsize[][|l|r|l|c|]」の指定において、「|」は縦⽅向の罫線を表します。これをなくすと罫線がつきません。また「||」のように⼆重にすると、罫線も⼆重になります。
▼ サンプル//tsize[][l||rlc]//table[tbl-sample3][罫線をなくしたり 、⼆重にしてみたり]{
Name
Val
Val
Val
-------------------------------AAA
10
10
10
BBB
100
100
100
CCC
1000
1000
1000
//}

▼ 表⽰結果▼ 表 3.9: 罫線をなくしたり、⼆重にしてみたり
Name
AAA
BBB
CCC

Val
10
100
1000

Val
10
100
1000

Val
10
100
1000

♣ 横の罫線
Re:VIEW では、表のどの⾏にも横の罫線が引かれます。Starter では、横の罫線を引かないように指定できます。そのためには、第 3 引数に「hline=off」を指定します。
▼ サンプル//tsize[][lrlc]//table[tbl-sample4][横の罫線を引かない][hline=off]{
Name
Val
Val
Val

– 104 –

3.14 表================================
AAA
10
10
10
BBB
100
100
100
CCC
1000
1000
1000
//}

▼ 表⽰結果▼ 表 3.10: 横の罫線を引かない
Name
AAA
BBB
CCC

Val
10
100
1000

Val
10
100
1000

Val
10
100
1000

「hline=off」を指定したとき、空⾏があるとそこに罫線が引かれます。
▼ サンプル//tsize[][lrlc]//table[tbl-sample5][空⾏が横の罫線になる][hline=off]{
Name
Val
Val
Val
================================
AAA
10
10
10
BBB
100
100
100
CCC
DDD

1000
1000

1000
1000

1000
1000

EEE
FFF
//}

1000
1000

1000
1000

1000
1000

▼ 表⽰結果

必要な箇所だけに罫線を引くと、表が⾒やすくなります。次の例を参考にしてください。

– 105 –

第 3 章 記法▼ 表 3.11: 空⾏が横の罫線になる
Name
AAA
BBB
CCC
DDD
EEE
FFF

Val
10
100
1000
1000
1000
1000

Val
10
100
1000
1000
1000
1000

Val
10
100
1000
1000
1000
1000

▼ サンプル//tsize[][llr]//table[tbl-sample6][ 出 版 社 別 コ ミ ッ ク ス 発 ⾏ 部 数 ][hline=off]{
出版社 タイトル
発⾏部数====================
集英社 ⿁滅の刃
XXXX 万 部.
ワンピース
XXX 万 部.
ハ イ キ ュ ー !!
XXX 万 部.
呪術廻戦
XXX 万 部

講談社
.

進撃の巨⼈
FAIRY TAIL

XXX 万 部XXX 万 部

⼩学館.
//}

名探偵コナン
銀の匙

XXX 万 部XXX 万 部

表⽰結果は表 3.12 を⾒てください。

♣ セル幅
セルの幅を指定するには、「//tsize[][...]」の中でたとえば「p{20mm}」のように指定します。

• この場合、⾃動的に左寄せになります。右寄せや中央揃えにはできません。
• セル内の⻑いテキストは⾃動的に折り返されます。表が横にはみ出てしまう場
合はセル幅を指定するといいでしょう。

– 106 –

3.14 表▼ 表 3.12: 出版社別コミックス発⾏部数
出版社

タイトル

発⾏部数

集英社

⿁滅の刃

XXXX 万部
XXX 万部XXX 万部XXX 万部XXX 万部XXX 万部XXX 万部XXX 万部ワンピース
ハイキュー!!
呪術廻戦
講談社

進撃の巨⼈

⼩学館

名探偵コナンFAIRY TAIL
銀の匙▼ サンプル//tsize[latex][|l|p{70mm}|]//table[tbl-sample7][セルの幅を指定すると 、⻑いテキストが折り返される]››{
Name
Description-------------------------------AAA
text text text text text text text text text text text ››text text text text
BBB
text text text text text text text text text text text ››text text text text//}

▼ 表⽰結果▼ 表 3.13: セルの幅を指定すると、⻑いテキストが折り返される
Name
AAA
BBB

Description
text text text text text text text text text text
text text text text text
text text text text text text text text text text
text text text text text

♣ 空欄
セルを空欄にするには、セルに「.」だけを書いてください。

– 107 –

第 3 章 記法▼ サンプル//tsize[latex][|l|ccc|]//table[tbl-sample8][ セ ル を 空 欄 に す る サ ン プ ル ]{
評価項⽬
製 品A
製 品B
製 品C
---------------------------------------機能が充分か✓✓.
価格が適切か.
.
✓
サポートがあるか✓.
✓//}

表⽰結果は表 3.14 を⾒てください。
▼ 表 3.14: セルを空欄にするサンプル
評価項⽬
機能が充分か

製品 A

製品 B

✓

✓

価格が適切か製品 C✓

サポートがあるか✓✓

またセルの先頭が「.」で始まる場合は、「..」のように 2 つ書いてください。そう
しないと先頭の「.」が消えてしまいます。
▼ サンプル//table[tbl-sample9][ セ ル の 先 頭 が「 @<code>{.} 」で 始 ま る 場 合 ][he››aderrows=0]{
先 頭 に「 . 」が 1 つ だ け の 場 合
先 頭 に「 . 」が 2 つ あ る 場 合//}.bashrc..bashrc

表⽰結果は表 3.15 を⾒てください。
▼ 表 3.15: セルの先頭が「.」で始まる場合
先頭に「.」が 1 つだけの場合先頭に「.」が 2 つある場合

bashrc.bashrc♣ 表⽰位置の指定表を表⽰する位置を、「//table」の第 3 引数で指定できます。

– 108 –

3.14 表▼ サンプル//table[tbl-sample10][表⽰位置を指定][pos=ht]{
....
//}

指定できる⽂字は次の通りです。また複数の⽂字を指定できます。

pos=h
pos=H
pos=t
pos=b
pos=p

here（現在の場所）
here forcedly（現在の場所に強制）
top （ページ上部）
bottom （ページ下部）
page （その表だけのページ）

ただし位置指定は、コラムの中では使えず、ノート以外のミニブロック（「//info」
や「//warning」など）の中でも使えません。どちらの場合も、強制的に「pos=H」と同じ動作になります。これは LATEX の制約からくる仕様です。

♣ 表のフォントサイズ
表のフォントサイズを、「//table」の第 3 引数で指定できます。表が⼤きくて 1
ページに収まらないとき使うといいでしょう*28 。
▼ サンプル//table[tbl-sample11][フォントを⼩さく][fontsize=small]{
Name
Val
Val
Val
================================
AAA
10
10
10
BBB
100
100
100
//}
//table[tbl-sample12][フォントをもっと⼩さく][fontsize=x-small]{
Name
Val
Val
Val
================================
AAA
10
10
10
BBB
100
100
100
//}

*28 PDFで は 表 の フ ォ ン ト サ イ ズ が デ フ ォ ル ト で small に な っ て い ま す 。そ の た め 、「//table[][][fontsize=small]」を指定しても⼩さくなりません。かわりに「x-small」を指定してください。

– 109 –

第 3 章 記法//table[tbl-sample13][フォントをもーっと⼩さく][fontsize=xx-small]›

›{
Name
Val
Val
Val
================================
AAA
10
10
10
BBB
100
100
100
//}

▼ 表⽰結果▼ 表 3.16: フォントを⼩さく
Name
AAA
BBB

Val
10
100

Val
10
100

Val
10
100

▼ 表 3.17: フォントをもっと⼩さく
Name
AAA
BBB

Val
10
100

Val
10
100

Val
10
100

▼ 表 3.18: フォントをもーっと⼩さく
Name
AAA
BBB

Val
10
100

Val
10
100

Val
10
100

指定できるフォントサイズは次の通りです。

♣ CSV 形式の表「//table」の第 3 引数に「csv=on」を指定すると、表を CSV 形式で書けます（Starter 拡張）。
▼ サンプル//table[tbl-csv1][CSVテーブル][csv=on]{
Name,Val,Val,Val================– 110 –

3.14 表▼ 表 3.19: 表のフォントサイズ
フォントサイズ説明

mediumsmall
x-smallxx-smalllarge
x-largexx-large

本⽂と同じサイズ
少し⼩さく
⼩さく
かなり⼩さく
少し⼤きく
⼤きく
かなり⼤きくAAA,10,10,10
BBB,100,100,100
CCC,1000,1000,1000//}▼ 表⽰結果▼ 表 3.20: CSV テーブル
Name
AAA
BBB
CCC

Val
10
100
1000

Val
10
100
1000

Val
10
100
1000

タブ区切りのときと同じように、12 個以上の「=」でヘッダを区切ります。

CSV 形式では、空欄はそのまま空欄として表⽰されます。「.」を⼊⼒する必要はありません。また「"..."」のようにすると、1 つのセルに複数⾏の⽂字列を書けます。ただし複数⾏で書いても表⽰は 1 ⾏になります。
▼ サンプル//table[tbl-csv2][CSVテーブル][csv=on]{
ぼくはか,"ぼくのとなりに
暗黒破壊神がいます"
はめふら,"⼄⼥ゲームの破滅フラグしかない
悪役令嬢に転⽣してしまった…"//}– 111 –

第 3 章 記法▼ 表⽰結果▼ 表 3.21: CSV テーブル
ぼくはか

ぼくのとなりに暗黒破壊神がいます

はめふら

⼄⼥ゲームの破滅フラグしかない悪役令嬢に転⽣してしまった…

表⽰も複数⾏にしたい場合は、明⽰的に改⾏します。
▼ サンプル//table[tbl-csv3][CSVテーブル][csv=on]{
ぼくはか,"ぼくのとなりに@<br>{}
暗黒破壊神がいます"
はめふら,"⼄⼥ゲームの破滅フラグしかない@<br>{}悪役令嬢に転⽣してしまった…"//}▼ 表⽰結果▼ 表 3.22: CSV テーブル
ぼくはか
はめふら

ぼくのとなりに
暗黒破壊神がいます
⼄⼥ゲームの破滅フラグしかない
悪役令嬢に転⽣してしまった…

♣ 外部ファイルを読み込む「//table」の第 3 引数に「file=filename」を指定すると、外部ファイルを読み込んでそれを表（テーブル）にできます（Starter 拡張）。

• ファイル名の拡張⼦が「.csv」なら、CSV 形式で読み込まれます。
• 第 3 引数に「csv=on」が指定された場合も、CSV 形式で読み込まれます。
• それ以外の場合は、タブ区切り形式で読み込まれます。
次の例では、「data/data1.csv」というファイルを読み込んで表にしています。
ブロック（「{」から「//}」まで）は省略できないので注意してください。

– 112 –

3.14 表▼ サンプル//table[tbl-csv4][サンプルデータ][file=data/data1.csv]{//}

⽂字コードを指定して読み込むこともできます。指定できる⽂字コードは、「utf-8」「sjs」「shift_jis」「cp932」などです。デフォルトは UTF-8 です。
▼ サンプル//table[tbl-csv5][サンプルデータ][file=data/data1.csv, encoding=s››jis]{//}♣ ヘッダの⾏数を指定する
今までは、ヘッダを指定するには 12 個以上の「=」や「-」からなる区切り⾏を挿⼊する必要がありました。しかし⼀般的な CSV ファイルでは、このような区切り⾏は⼊れず、かわりに最初の⾏をヘッダ⾏と⾒なすことがほとんとではないでしょうか。
「//table」では第 3 引数に「headerrows=1」を指定すると、区切り⾏がなくても最初の⾏をヘッダとして扱ってくれます。
▼ サンプル//table[tbl-csv6][先頭⾏をヘッダとみなす][csv=on,headerrows=1]{
Name,Val,Val,Val
AAA,10,10,10
BBB,100,100,100
CCC,1000,1000,1000//}▼ 表⽰結果▼ 表 3.23: 先頭⾏をヘッダとみなす
Name
AAA
BBB
CCC

Val
10
100
1000

Val
10
100
1000

Val
10
100
1000

また「headerrows=0」を指定すると、ヘッダ⾏のない表として表⽰されます。

– 113 –

第 3 章 記法▼ サンプル//table[tbl-csv7][3×3の魔⽅陣][csv=on,headerrows=0]{
6,1,8
7,5,3
2,9,4
//}

▼ 表⽰結果▼ 表 3.24: 3 × 3 の魔⽅陣
6
7
2

1
5
9

8
3
4

♣ ヘッダのカラム数を指定する「//table[][][headercols=2]」とすると、左から 2 つのカラムをヘッダとして表⽰します。
▼ サンプル//table[tbl-csv8][左2つのカラムをヘッダとみなす][csv=on,headercols=››2]{Name,Val,Val,Val
AAA,10,10,10
BBB,100,100,100
CCC,1000,1000,1000//}▼ 表⽰結果▼ 表 3.25: 左 2 つのカラムをヘッダとみなす
Name
AAA
BBB
CCC

Val
10
100
1000

Val
10
100
1000

– 114 –

Val
10
100
1000

3.14 表このオプションは、ヘッダの⾏数を指定する「headercols=1」と共存できます。
▼ サンプル//table[tbl-csv9][上と左をヘッダにする][csv=on,headerrows=1,heade››rcols=1]{
Name,Val,Val,Val
AAA,10,10,10
BBB,100,100,100
CCC,1000,1000,1000//}▼ 表⽰結果▼ 表 3.26: 上と左をヘッダにする
Name
AAA
BBB
CCC

Val
10
100
1000

Val
10
100
1000

Val
10
100
1000

♣ 表を画像で⽤意する
Re:VIEW や Starter では、あまり複雑な表は作成できません。複雑な表は画像として⽤意し、それを読み込むのがいいでしょう。
「//imgtable」コ マ ン ド を 使 う と 、画 像 を 表 と し て 読 み 込 み ま す 。使 い ⽅ は「//image」と同じです。
▼ サンプル//imgtable[order-detail][複雑な表の例 ：注⽂詳細][scale=0.5]{//}▼ 表⽰結果– 115 –

第 3 章 記法▼ 表 3.27: 複雑な表の例：注⽂詳細

3.15

数式

♣ 数式の書き⽅
数式は「//texequation[ラベル][説明⽂]{ ... //}」のように書きます。
▼ サンプル//texequation[euler1][オイラーの公式]{
e^{i\theta} = \sin{\theta} + i\cos{\theta}//}▼ 表⽰結果式 3.1: オイラーの公式

eiθ = sin θ + i cos θ

数式の書き⽅が独特に⾒えますが、これは LATEX での書き⽅です。LATEX における数式の書き⽅は、Wikibooks*29 など他の資料をあたってください。
数式は、ラベルを使って「@<eq>{ラベル}」のように参照できます。たとえば「@<eq>{euler1}」とすると「式 3.1」となります。
ラベルや説明⽂がいらなければ、「//texequation{ ... //}」のように省略できます。

*29 https://en.wikibooks.org/wiki/LaTeX/Mathematics– 116 –

3.16 会話形式

♣ 数式を⽂中に埋め込む
数式を⽂中に埋め込むには「@<m>$...$」を使います。
▼ サンプルオイラーの公式は@<m>$e^{i\theta} = \sin{\theta} + i\cos{\theta}$››です 。
特に 、@<m>$\theta = \pi$のときは@<m>$e^{i\pi} = -1$となり 、これはオ››イラーの等式と呼ばれます 。
▼ 表⽰結果オイラーの公式は eiθ = sin θ + i cos θ です。特に、θ = π のときは eiπ = −1 となり、これはオイラーの等式と呼ばれます。

♣ 数式のフォント
数式中では、アルファベットはイタリック体になります。これは数式の伝統です。
次の例で、「@<m>$...$」を使った場合と使わない場合を⽐べてください。
▼ サンプル* @<m>$y = f(x) + k$
* y = f(x) + k← 使った場合← 使わなかった場合▼ 表⽰結果• y = f (x) + k ← 使った場合• y = f(x) + k ← 使わなかった場合
その他、Re:VIEW における数式の詳細は、Re:VIEW の Wiki*30 を参照してくだ
さい。

3.16

会話形式

Starter では、会話形式の⽂章を書けます*31 （Starter 拡張）。

*30 https://github.com/kmuto/review/blob/master/doc/format.ja.md#tex-%E5%BC%8F*31 LINE のようなチャット形式はサポートしていません。

– 117 –

第 3 章 記法♣ アイコン画像を使う場合
会話形式は次のようにして書きます。

• 全体を「//talklist{ ... //}」で囲う。
• 発⾔を「//talk[]{ ... //}」で囲う。
•「//talk」の第 1 引数にアイコン画像ファイルを指定する（「//image」の第1 引数と同じ）。
▼ サンプル//talklist{//talk[avatar-b]{
できもしないことをおっしゃらないでください 。
//}//talk[avatar-g]{
不可能なことを⾔い⽴てるのは貴官の⽅だ 。
それも安全な場所から動かずにな 。
//}//talk[avatar-b]{……⼩官を侮辱なさるのですか 。
//}//talk[avatar-g]{
貴官は⾃⼰の才能を⽰すのに 、弁⾆ではなく実績をもってすべきだろう 。
他⼈に命令するようなことが⾃分にもできるかどうか 、やってみたらどうだ 。
//}//}▼ 表⽰結果「できもしないことをおっしゃらないでください。」「不可能なことを⾔い⽴てるのは貴官の⽅だ。それも安全な場所から動かずにな。」「……⼩官を侮辱なさるのですか。」– 118 –

3.16 会話形式

「貴官は⾃⼰の才能を⽰すのに、弁⾆ではなく実績をもってすべきだろう。他⼈に命令するようなことが⾃分にもできるかどうか、やってみたらどうだ。」

発⾔部分は⾃動的にカギ括弧でくくられます。これを⽌めるには、設定ファイル「config-starter.yml」を変更します。またアイコン画像の⼤きさも変更できます。詳しくは後述します。

..................................................
⽩黒印刷でも判別できる画像を使う
このサンプルでは、⾊が違うだけのアイコン画像を使っています。そのせいで、⽩黒印刷すると誰が誰だか判別できなくなります。もし⽩黒印刷するなら、⾊に頼らず判別できるようなアイコン画像を使いましょう。

..................................................
♣ アイコン画像を使わない場合「//talk」の第 1 引数にアイコン画像を指定しない場合は、第 2 引数に名前を指定します。
▼ サンプル//talklist{//talk[][A准将]{
できもしないことをおっしゃらないでください 。
//}//talk[][B提督]{
不可能なことを⾔い⽴てるのは貴官の⽅だ 。
それも安全な場所から動かずにな 。
//}//talk[][A准将]{……⼩官を侮辱なさるのですか 。
//}//talk[][B提督]{
貴官は⾃⼰の才能を⽰すのに 、弁⾆ではなく実績をもってすべきだろう 。
他⼈に命令するようなことが⾃分にもできるかどうか 、やってみたらどうだ 。
//}//}– 119 –

第 3 章 記法▼ 表⽰結果A 准将： 「できもしないことをおっしゃらないでください。」
B 提督： 「不可能なことを⾔い⽴てるのは貴官の⽅だ。それも安全な場所から動かずにな。」

A 准将： 「……⼩官を侮辱なさるのですか。」
B 提督： 「貴官は⾃⼰の才能を⽰すのに、弁⾆ではなく実績をもってすべきだろう。他⼈に命令するようなことが⾃分にもできるかどうか、やってみたらどうだ。」

名前が⻑い場合は、会話の 1 ⾏⽬だけ⾃動的に開始位置がずれます。
▼ サンプル//talklist{//talk[][ビュコック提督]{
貴官は⾃⼰の才能を⽰すのに 、弁⾆ではなく実績をもってすべきだろう 。
他⼈に命令するようなことが⾃分にもできるかどうか 、やってみたらどうだ 。
//}//}▼ 表⽰結果ビュコック提督：「貴官は⾃⼰の才能を⽰すのに、弁⾆ではなく実績をもってすべきだろう。他⼈に命令するようなことが⾃分にもできるかどうか、やってみたらどうだ。」

アイコン画像と名前の両⽅を指定することは、現在はできません。できるようにして欲しい⼈は、相談してください。

♣ コンパクトな書き⽅
ブロック本体のかわりに、「//talk」の第 3 引数に会話⽂を書けます。こうするとブロック本体を省略できるので、コンパクトな書き⽅になります。
また第 3 引数を使わない書き⽅と混在できます。⽂章が短い場合だけ第 3 引数を使い、ある程度の⻑さがある場合はブロック本体に書くのがいいでしょう。

– 120 –

3.16 会話形式

▼ サンプル//talklist{//talk[avatar-b][][できもしないことをおっしゃらないでください 。]//talk[avatar-g][][不可能なことを⾔い⽴てるのは貴官の⽅だ 。それも安全››な場所から動かずにな 。]//talk[avatar-b][][……⼩官を侮辱なさるのですか 。]//talk[avatar-g]{
貴官は⾃⼰の才能を⽰すのに 、弁⾆ではなく実績をもってすべきだろう 。
他⼈に命令するようなことが⾃分にもできるかどうか 、やってみたらどうだ 。
//}//}▼ 表⽰結果「できもしないことをおっしゃらないでください。」「不可能なことを⾔い⽴てるのは貴官の⽅だ。それも安全な場所から動かずにな。」「……⼩官を侮辱なさるのですか。」「貴官は⾃⼰の才能を⽰すのに、弁⾆ではなく実績をもってすべきだろう。他⼈に命令するようなことが⾃分にもできるかどうか、やってみたらどうだ。」

会話⽂を第 3 引数に書く場合は、「]」を「\]」のように書いてください*32 。そうしないとコンパイルエラーになるでしょう。

♣ 短縮名
⼤量の会話を⼊⼒する場合、いちいちアイコン画像や名前を⼊⼒するのは⾯倒です。そこで Starter では、会話に使うアイコン画像や名前を短縮名で登録できる機能を⽤意しました。

*32 これは脚注を書くときと同じ制約です。

– 121 –

第 3 章 記法

まず、「config-starter.yml」に短縮名を登録します。すでに以下のような設定がされているので、それを上書きするといいでしょう。
▼ 「config-starter.yml」に短縮名を登録
talk_shortcuts:
"b1":
"g1":
#"b1":#"g1":{image: "avatar-b"} # アイコン画像を使う場合{image: "avatar-g"} # アイコン画像を使う場合{name: "アリス"}# アイコン画像を使わない場合{name: "ボブ"}# アイコン画像を使わない場合

そして、原稿では「//t[短縮名]」のように書きます。たとえば「//t[b1]」は「//talk[avatar-b]」の短縮形となります。
前の項のサンプルを、短縮名を使って書いてみましょう。
▼ サンプル//talklist{//t[b1][できもしないことをおっしゃらないでください 。]//t[g1][不可能なことを⾔い⽴てるのは貴官の⽅だ 。それも安全な場所から動か››ずにな 。]//t[b1][……⼩官を侮辱なさるのですか 。]//t[g1]{
貴官は⾃⼰の才能を⽰すのに 、弁⾆ではなく実績をもってすべきだろう 。
他⼈に命令するようなことが⾃分にもできるかどうか 、やってみたらどうだ 。
//}//}▼ 表⽰結果「できもしないことをおっしゃらないでください。」「不可能なことを⾔い⽴てるのは貴官の⽅だ。それも安全な場所から動かずにな。」「……⼩官を侮辱なさるのですか。」– 122 –

3.16 会話形式

「貴官は⾃⼰の才能を⽰すのに、弁⾆ではなく実績をもってすべきだろう。他⼈に命令するようなことが⾃分にもできるかどうか、やってみたらどうだ。」

短縮名を使うと、アイコン画像や登場⼈物名を変更するのも簡単になります。変更の発⽣が予想される場合も、短縮機能を使うといいでしょう。

♣ カスタマイズ「//talklist」の第 1 引数にオプションを指定すると、会話形式の表⽰をカスタ
マイズできます。たとえば次の例では、アイコン画像の幅を全⾓ 2 ⽂字分にし、会話⽂のインデント幅を全⾓ 4 ⽂字分にしています。
▼ サンプル//talklist[imagewidth=2zw,indent=4zw]{//talk[avatar-g]{
貴官は⾃⼰の才能を⽰すのに 、弁⾆ではなく実績をもってすべきだろう 。
他⼈に命令するようなことが⾃分にもできるかどうか 、やってみたらどうだ 。
//}//}▼ 表⽰結果「貴官は⾃⼰の才能を⽰すのに、弁⾆ではなく実績をもってすべきだろう。他⼈に命令するようなことが⾃分にもできるかどうか、やってみたらどうだ。」

指定できるオプションは表 3.28 の通りです。これらは「classname」を除いて
LATEX ⽤であり、HTML には「classname」しか適⽤されません。またオプションを指定できるのは「//talklist」だけであり、「//talk」には指定できません。
表 3.28 のデフォルト値は、設定ファイル「config-starter.yml」で設定されています。必要に応じて変更してください。
▼ config-starter.yml## 会話形式（ `//talklist` ）のデフォルトオプション## （ 注 ：YAMLでは on は true と同じ 、off は false と同じ ）talklist_default_options:
indent:6zw# 本⽂左端から会話部分までの幅
separator:" ："# 名前と会話⽂との区切り⽂字列– 123 –

第 3 章 記法▼ 表 3.28: 「//talklist」のオプション
オプション名

デフォルト値説明

indent6zw

本⽂左端から会話部分までの幅

separator：

名前と会話⽂との区切り⽂字列

imagewidth

4zw

アイコン画像の幅

imageborder

off「on」なら画像に枠線をつける

needvspace

4zw

必要な空きがなければ改ページ

itemmargin

1mm

会話項⽬間の空き

listmargin

4mm

会話リストの最初と最後の空き

itemstart「

会話⽂の先頭につける⽂字列

itemend」

会話⽂の最後につける⽂字列

画像⾼さ（通常は無指定でよい）

imageheightHTML タグに含めるクラス名

classnameimagewidth: 4zw
imageheight:
imageborder: off
needvspace: 4zw
itemmargin: 1mm
listmargin: 0.5zw
itemstart:"「 "itemend:" 」"
classname:# アイコン画像の幅# 画像⾼さ（ 通常はnullでよい ）# on なら画像に枠線をつける# 必要な空きがなければ改ページ# 会話項⽬間の空き# 会話リストの最初と最後の空き# 会話⽂の先頭につける⽂字列# 会話⽂の最後につける⽂字列# HTMLタグに含めるクラス名

たとえばアイコン画像の幅を全⾓ 3 ⽂字分にするには、次のように変更します。
▼ config-starter.yml
talklist_default_options:#...(省略)...
imagewidth: 3zw#...(省略)...

# アイコン画像の幅

また会話⽂にカギ括弧をつけないようにするには、次のように変更します。
▼ config-starter.yml
talklist_default_options:#...(省略)...
itemstart:""
itemend:""# 会話⽂の先頭につける⽂字列# 会話⽂の最後につける⽂字列– 124 –

3.17 ⽤語、索引#...(省略)...

なお会話形式に関する LATEX マクロは「sty/starter-talk.sty」に定義されています。
必要であれば、マクロを「sty/mystyle.sty」にコピーしてから変更してください。

HTML の場合は、「css/webstyle.css」をカスタマイズしてください。クラス名が「.talk-xxx」のエントリが会話形式に関するルールです。
▼ css/webstyle.css.talk-image {width: 60px;/* アイコン画像の表⽰幅 */}.talk-name {font-family: sans-serif; /* 名前のフォント */font-weight: normal;}.talk-text {display: block;
margin-left: 100px;/* 会話⽂のインデント幅 */padding-top: 5px;}....（ 省略 ）....

3.17

⽤語、索引

たいていの本では、巻末に索引が⽤意されています（図 3.4）。Starter では、指定した⽤語を索引に登録できます。また⽤語に親⼦関係を持たせたり、転送先の⽤語を指定できます。

♣ 索引機能をオンにする
索引を作る機能は、デフォルトではオフになっています。オンにするには、config.yml の 370 ⾏⽬ぐらいにある「makeindex: true」を設定してください。
なお索引に⽤語が何も登録されていない場合、索引機能をオンにすると PDF のコ
ンパイルがエラーになります。1 つでもいいから本⽂に⽤語を指定してから、索引機
能をオンにしてください。
ややこしいのですが、索引機能がオフでも⽤語を索引に登録できます。つまり、こういうことです：– 125 –

第 3 章 記法▲ 図 3.4: 索引ページ• 索引機能がオンのとき、索引に⽤語が何も登録されていないとエラー。
• 索引機能がオフのとき、索引に⽤語を登録してもエラーにならない。
索引は LATEX の機能を使って⽣成しているので、索引機能は今のところ PDF でのみサポートしています。また索引機能をオンにすると、LATEX のコンパイル回数が増
えてコンパイルに時間がかかるようになります。執筆中は索引機能をオフにし、完成間近になったらオンにするといいでしょう。

♣ ⽤語の書き⽅
⽤語の書き⽅は次の通りです。

• 初めて登場した⽤語は「@<term>{⽤語名 ((よみかた))}」のように書きます。
すると⽤語名がゴシック体で表⽰され、かつ巻末の索引に載ります。

• 再登場した⽤語は「@<idx>{⽤語名 ((よみかた))}」のように書きます。する
と索引には載るけど、ゴシック体にはなりません。

•「@<hidx>{⽤語名 ((よみかた))}」(hidden index) とすると、索引に載るけ
ど本⽂には何も表⽰されません。

• ⽤語名が漢字を含まない場合（つまりひらがなやカタカナや英数字だけの場
合）は、読み⽅を省略して「@<term>{⽤語名}」のように書けます。

– 126 –

3.17 ⽤語、索引• 索引に登録せずゴシック体で表⽰したいだけのときは、「@<termnoidx>{⽤語名}」と書きます。「@<hidx>{}」と組み合わせて使うことを想定しています。
索引に登録しないので、よみがなは含めないでください。
▼ サンプル@<term>{アンジェ((あんじぇ))} 。
@<idx>{侍従⻑((じじゅうちょう))} 。
@<term>{Cボール} 。

▼ 表⽰結果アンジェ。侍従⻑。C ボール。
この例だと、「アンジェ」と「C ボール」は@<term>{}を使っているのでゴシック体、「内務卿」は@<idx>{}を使っているので本⽂と同じ明朝体のままです。
⽤語には他のインライン命令を含められます。その場合、必ずフェンス記法*33 を使って「@<term>|@<xxx>{...}|」のように書いてください（これは実装上の都合です）。
「@<term>{@<xxx>{...}}」だとエラーになります。
▼ サンプル@<term>|@<ruby>{⿅威, ししおど}し((ししおどし))| 。
@<term>|@<ruby>{黒星, くろぼし}@<ruby>{紅⽩, こうはく}((くろぼしこう››はく))| 。

▼ 表⽰結果ししおど

くろぼしこうはく

⿅威し。黒星紅⽩。
本⽂では⽤語にルビをつけたいけど索引ではつけたくないなら、「@<hidx>{}」を使うといいでしょう。
▼ サンプル@<termnoidx>|@<ruby>{⿅威, ししおど}し|@<hidx>{⿅威し((ししおどし))››} 。
@<ruby>{黒星, くろぼし}@<ruby>{紅⽩, こうはく}@<hidx>{黒星紅⽩((くろ››ぼしこうはく))} 。

*33 Re:VIEW では「@<foo>|...|」や「@<foo>$...$」のような書き⽅を「フェンス記法」と呼んでいます。

– 127 –

第 3 章 記法♣ 親⼦関係にある⽤語
⽤語に親⼦関係がある場合、索引でそのように表⽰できます。そのためには⽤語を「<<>>」で区切ります。
たとえば 2 つの⽤語「ケイバーライト」と「ケイバーライト症候群」がある場合は、前者を親項⽬、後者を⼦項⽬にして索引に登録できます。また「アルビオン王国」「ア
ルビオン共和国」「アルビオン王⽴航空軍」という 3 つの⽤語では、共通する「アルビオン」をあたかも存在する⽤語かのように⾒⽴てて索引に登録できます。
▼ サンプル@<term>{ケイバーライト((けいばーらいと))} 。
@<term>{ケイバーライト((けいばーらいと))<<>>症候群((しょうこうぐん))}››。
@<term>{アルビオン((あるびおん))<<>>王国((おうこく))} 。
@<term>{アルビオン((あるびおん))<<>>共和国((きょうわこく))} 。
@<term>{アルビオン((あるびおん))<<>>王⽴航空軍((おうりつこうくうぐん))››} 。

▼ 表⽰結果ケイバーライト。ケイバーライト症候群。
アルビオン王国。アルビオン共和国。アルビオン王⽴航空軍。
索引ページの表⽰結果は図 3.4 を⾒てください。これを⾒ると、「アルビオン」という⽤語は本⽂には登場していないので、索引の項⽬にページ番号がありません。これに対し、同じ親項⽬でも「ケイバーライト」は本⽂に登場したので、ページ番号がついています。
なお、「@<idx>{アルビオン<<>>王国}」と「@<idx>{アルビオン王国}」は別々の⽤語として扱われるので、索引にも別々に載ります。どちからに統⼀しましょう。
また⽤語に「<<>>」を 2 つ埋め込むと、親・⼦・孫の関係を表せます（が推奨しま
せん）。それ以上の深い関係は未対応です。

♣ 親⼦関係の順番を⼊れ替える
今までのサンプルでは、親項⽬が前にきて⼦項⽬がその後ろについていました（例：「アルビオン」＋「王国」）。そうではなく、親項⽬のほうが後ろ、⼦項⽬のほうが前にくる⽤語もあります。たとえば「⼆重スパイ」という⽤語では、後ろにある「スパイ」が親項⽬、前にある「⼆重」が⼦項⽬です。

– 128 –

3.17 ⽤語、索引•「@<term>{⼆重 ((にじゅう))<<>>スパイ ((すぱい))}」だと、「⼆重」が親で「スパイ」が「⼦」になってしまいます。

•「@<term>{スパイ ((すぱい))<<>>⼆重 ((にじゅう))}」だと、親⼦関係は正しいものの、本⽂には「スパイ⼆重」と表⽰されてしまいます。
つまり、どちらの書き⽅も正しくありません。
このような場合、⼦要素の⽤語名に「---」を含めると、そこに親要素が⼊るものとして扱います。たとえば「@<term>{スパイ ((すぱい))<<>>⼆重---((にじゅう))}」と書くと、「スパイ」が親で「⼆重」が⼦になる構造を指定しつつ、本⽂には「⼆重スパイ」と表⽰されます。
▼ サンプル@<term>{スパイ((すぱい))} 。
@<term>{スパイ((すぱい))<<>>⼆重---((にじゅう))} 。

▼ 表⽰結果スパイ。⼆重スパイ。
索引ページの表⽰結果は図 3.4 を⾒てください。
念のために注意しますが、「---」を含めるのは⼦要素の⽤語名です。よみがなの中に⼊れてはいけません。また親要素に⼊れた場合は何の効果もなくそのまま表⽰されます。

♣ 転送先の⽤語を指定する
索引では、⽤語ごとにページ番号がつきます。ただし、ページ番号ではなく「〜を⾒よ」のように転送先の⽤語を指定することがあります。このような場合は、「@<term>{⽤語 ((よみがな))==>>転送先}」のように書きます。たとえば「空中艦隊」が「アルビオン王⽴航空軍」の別名なら、次のようにして前者から後者へ転送するといいでしょう。
▼ サンプル@<term>{アルビオン((あるびおん))<<>>王⽴航空軍((おうりつこうくうぐん))››} 。
@<term>{空中艦隊((くうちゅうかんたい))==>>アルビオン王⽴航空軍} 。

– 129 –

第 3 章 記法▼ 表⽰結果アルビオン王⽴航空軍。空中艦隊。
実際に試すと、転送先を表すのに「→」が使われます。また表⽰結果（図 3.4）を⾒ると「→」に下線が引かれていますが、これは意図したものではありません。原因は調査中です。
なお、転送先の⽤語が索引に登録されているかどうかのチェックは⾏っていません。この場合だと、もし転送先の「アルビオン王⽴航空軍」が索引に登録されていな
くてもエラーになりません。これは仕様です*34 。

♣ よみがなの再利⽤
⼀度指定したよみがなは、その⽤語が再び登場したときに再利⽤されます。
たとえば、⽤語が初めて登場したときに「@<term>{侍従⻑ ((じじゅうちょう))}」のようによみがなを指定してます。そして⽤語が再び登場したときに「@<idx>{侍従⻑}」のようによみがなを省略すると、さきほどのよみがなが再利⽤されます。
親⼦関係にある⽤語でも、よみがなは再利⽤されます。たとえば「@@<nop><term>{
アルビオン ((あるびおん))<<>>王国 ((おうこく))}」と⼀度書いておけば、その後は「@@<nop><idx>{アルビオン<<>>王国}」のようによみがなを省略できます。
再登場した⽤語のよみがなは、省略してもいいししなくてもいいです。省略すれば前のよみがなが再利⽤され、省略しなければ再利⽤されないだけです。

♣ よみがな辞書を使う
⽤語のよみがなは、辞書となるファイルに登録しておくこともできます。そうしておけば、⽤語のよみがなを省略できます。また複数⼈で執筆しているときに、索引に載せる⽤語と載せない⽤語を統⼀するのにも辞書ファイルが役⽴ちます。
よみがなの辞書ファイルはタブ区切りのテキストファイルであり、config.yml の「makeindex_dic: yomigana.txt」（370 ⾏⽬付近）でファイル名を指定します。
デフォルトでは yomigana.txt というファイルが指定されており、その中⾝は⽤語とよみがなのリストです*35 。⽤語とよみがなは 1 つ以上のタブ⽂字で区切ってください。

*34 索引の機能を L
AT X に任せているため、⽤語のチェックが難しいのです。

E*35 このファイルは L
AT X において索引を⽣成する「mendex」というコマンドで読み込まれます。

E

mendex コマンドで読み取れるのが、タブ区切りのテキストファイルなのです。CSV 形式は使えません。

– 130 –

3.17 ⽤語、索引▼ よみがな辞書ファイルの中⾝
侍従⻑
内務卿
ハイランダー連隊

じじゅうちょう
ないむきょうはいらんだーれんたい

こ う し て お け ば 、「@<term>{侍 従 ⻑ ((じ じ ゅ う ち ょ う))}」と 書 く か わ り に「@<term>{じじゅうちょう}」のように読みを省略して書けます。
このほか、形態素解析エンジン「MeCab」を使うことでよみがなを⽤語から⾃動的に取得する機能がありますが、Starter では推奨していません。説明は省略するので、知りたい⼈は Re:VIEW のドキュメント*36 を読んでください。

♣ ⽤語と索引の補⾜事項
1 つの⽤語に複数の読み⽅がある場合
たとえば「⼀也」という⽤語の読み⽅が「かずや」と「いちや」の 2 つある場合は、⾯倒でも「@<idx>{⼀也 ((かずや))}」と「@<idx>{⼀也 ((いちや))}」を使い分けてください。
またこのようなケースがあるため、同じ⽤語に対して違うよみがなが指定されてもエラーにはなりません。
⽤語のよみがなが⾒つからなかった場合
よみがなが指定されず、よみがなの辞書ファイルにも登録されておらず、かつ漢字を含んだ⽤語（ひらがな・カタカナ・英数字以外の⽂字を含む⽤語）は、索引の最後に「■漢字」というグループがつくられ、そこに載ります。本に索引をつけた場合は、索引の最後に「■漢字」がないかチェックしましょう。もしあれば、よみがなを指定
し忘れています*37 。
索引の表⽰をカスタマイズする
索引の表⽰は、次のようなカスタマイズができます。

• ⽤語とページ番号の間を、連続したピリオドではなく空⽩にする。
• ⽤語のグループ化を⾏単位ではなく⽂字単位で⾏う。
• ⽤語⾒出しを「■あ」のようなデザインから変更する。
• ⼦要素の⽤語で使う「――」を別の⽂字列に変更する。
•「@<term>{}」の表⽰をゴシック体から別の書体に変更する。
詳しくは「4.7 索引」(p.166) を参照してください。なお索引のカスタマイズには、*36 https://github.com/kmuto/review/blob/master/doc/makeindex.ja.md*37 よみがなの指定し忘れを警告にする機能は検討中です。

– 131 –

第 3 章 記法

LATEX の知識が必要です。

♣ Re:VIEW との違い
Starter の索引機能は、Re:VIEW のそれを拡張しています。違いは次の通りです。
•「@<idx>{}」と「@<hidx>{}」は、Re:VIEW にある機能です。Starter では
それを引き継いでいます。

•「@<term>{}」は Starter による拡張であり、Re:VIEW にはありません。
•「@<idx>{⽤語 ((よみがな))}」のようによみがなを埋め込む機能は、Starterによる独⾃拡張です。

•「@<idx>{親⽤語<<>>⼦⽤語}」のような親⼦関係の指定は、Re:VIEW にある機能です。Starter でも使えます。
•「@<idx>{親<<>>⼦---}」のような親の位置を⼦で指定する機能は、Starterによる独⾃拡張です。

•「@<idx>{⽤語==>>転送先}」のような親⼦関係の指定は、Starter による独⾃拡張です。

• よみがな辞書ファイルの機能は、Re:VIEW にある機能です。
• 形態素解析エンジン「MeCab」を使ったよみがな⾃動取得機能は、Re:VIEWにある機能です。Starter でも設定すれば使えますが、トラブルが多いので推奨していません。

Re:VIEW の索引機能については、Re:VIEW のドキュメント*38 を参照してください。

..................................................
これを読んでる Re:VIEW 関係者の⽅へ
これを読んでる Re:VIEW 関係者の⽅へお願いがあります。Starter の機能を真似していただくのは構わないです（それどころか歓迎します）。しかし、特に理由がないのにわざと違う仕様にするのはユーザに不利益を与えるだけなので、⽌めていただくようお願いします。

Starter による拡張機能に問題があるから仕様を変えて導⼊した、というなら道理はあるでしょう。しかし Starter を新機能の参考にしておきながら、わざ
わざ違う仕様にして導⼊するのは、ユーザの利益になりません。
競うなら公平‧公正に。ユーザの利益を犠牲にする必要はありません。

..................................................

*38 https://github.com/kmuto/review/blob/master/doc/makeindex.ja.md– 132 –

3.18 単語展開

3.18

単語展開

キーと単語の組を単語辞書ファイルに登録しておけば、キーを単語に展開できます。たとえば、辞書ファイル「data/words.txt」の中にキー「apple」と単語「アップル」を登録しておけば、「@<w>{apple}」が「アップル」に展開されます。
この機能を使うと、表記が定まっていない単語の表記をあとから簡単に変更できます。たとえば「Apple」と「アップル」のどちらの表記にするかまだ決まってなくても、本⽂に「@<w>{apple}」と書いておけば、あとから辞書の中⾝を変えるだけでどちらの表記にも対応できます。
なお単語にはインライン命令を含められません。

♣ 単語展開⽤のインライン命令
単語展開のためのインライン命令は 3 つあります。

•「@<w>{}」は、キーに対応した単語へと展開するだけです。
•「@<wb>{}」は、展開してから太字にします。実質的に「@<b>{@<w>{}}」と同じです。

•「@<W>{}」は、展開してから強調表⽰します。実質的に「@<B>{@<w>{}}」と同じです。
▼ サンプル* @<w>{apple} …… 展開するだけ* @<wb>{apple} …… 展開して太字に* @<W>{apple} …… 展開して強調表⽰▼ 表⽰結果• アップル …… 展開するだけ• アップル …… 展開して太字に• アップル …… 展開して強調表⽰♣ 単語展開⽤の辞書ファイル
単語展開⽤の辞書ファイルは、config.yml の「words_file」で指定します。デ
フォルトでは「data/words.txt」が指定されています。
辞書ファイルは、CSV ファイル（*.csv）か、タブ⽂字区切りのファイル（*.txt または*.tsv）を指定します。どちらの形式かはファイル名の拡張⼦で判断します。

– 133 –

第 3 章 記法

辞書ファイルは複数指定できます。たとえば「words_file: [data/f1.txt,
data/f2.txt]」とすれば、data/f1.txt と data/f2.txt を読み込みます。キーが重複していてもエラーにはならず、あとから読み込まれたほうが使われます。
辞書ファイルの⽂字コードは UTF-8 しか使えません。

♣ Re:VIEW との違い
• Re:VIEW では、辞書ファイルとして CSV ファイルしか指定できません。
Starter だと、タブ⽂字区切りのテキストファイルも指定できます。テキスト
エディタで編集しやすいのは、CSV ファイルよりもタブ⽂字区切りのテキス
トファイルのほうです。

• Re:VIEW には「@<W>」がありません。
• Starter ではデフォルトで辞書ファイル「data/words.txt」が提供済みです。設定ファイルを編集しなくても最初から@<w>{}が利⽤可能です。

3.19

その他

♣ URL、リンク
URL は「@<href>{URL}」と書きます。
▼ サンプル
Re:VIEW Starter ：@<href>{https://kauplan.org/reviewstarter/}▼ 表⽰結果

Re:VIEW Starter：https://kauplan.org/reviewstarter/
リンクは「@<href>{URL, テキスト}」と書きます。
▼ サンプル@<href>{https://kauplan.org/reviewstarter/, Re:VIEW Starter}▼ 表⽰結果

Re:VIEW Starter*39*39 https://kauplan.org/reviewstarter/– 134 –

3.19 その他

PDF の場合、リンクの URL は⾃動的に脚注に書かれます（Starter 拡張）。これは印刷時でも URL が読めるようにするためです。この拡張機能をオフにするには、
starter-config.yml で設定項⽬「linkurl_footnote:」を「false」または「off」にします。
もし「linkurl_footnote:」の設定に関係なく、必ずリンクを使いたい（URL
を 脚 注 に 書 か な い ）場 合 は 、「@<hlink>{...}」を 使 っ て く だ さ い 。使 い ⽅ は「@<href>{...}」と同じです。
「@<href>{}」と「@<hlink>{}」の違いを⽐べて⾒ましょう。
▼ サンプル* @<href>{https://twitter.com/_kauplan/, @_kauplan}* @<hlink>{https://twitter.com/_kauplan/, @_kauplan}▼ 表⽰結果• @_kauplan*40• @_kauplan♣ 引⽤
引⽤は「//quote{ ... //}」で表します。
▼ サンプル//quote{//noindent
その者 、蒼き⾐を纏いて⾦⾊の野に降り⽴つべし 。@<br>{}
失われし⼤地との絆を結び 、ついに⼈々を⻘き清浄の地に導かん 。
//}▼ 表⽰結果その者、蒼き⾐を纏いて⾦⾊の野に降り⽴つべし。
失われし⼤地との絆を結び、ついに⼈々を⻘き清浄の地に導かん。

*40 https://twitter.com/_kauplan/– 135 –

第 3 章 記法♣ 傍点
傍点は「@<bou>{...}」でつけられます。
▼ サンプル@<bou>{三分間} 、待ってやる 。

▼ 表⽰結果・・・

三分間、待ってやる。
傍点は、太字で強調するほどではないけど読者の注意を向けたいときに使います。
ただしアルファベットや記号ではあまりよいデザインにはなりません。

♣ ルビ、読みがな
ルビ（あるいは読みがな）は「@<ruby>{テキスト, ルビ}」のように書きます。
▼ サンプル@<ruby>{約束された勝利の剣, エクスカリバー}▼ 表⽰結果
エ

ク

ス

カ

リ

バ

ー

約束された勝利の剣
途中の「, 」は必ず半⾓⽂字を使い、全⾓⽂字は使わないでください。

♣ 何もしないコマンド「@<nop>{}」*41 は、何もしないコマンドです。これは、たとえばインライン命令の「@」と「<」の間に⼊れることで、インライン命令として解釈されないようごまかすために使います。
▼ サンプル
強調される ： @<B>{テキスト} 。
強調されない ： @@<nop>{}<B>{テキスト} 。
▼ 表⽰結果*41 「nop」は「No Operation」の略です。

– 136 –

3.19 その他

強調される： テキスト。
強調されない： @<B>{テキスト}。
またブロック命令の⾏頭に「@<nop>{}」を⼊れると、ブロック命令として解釈されなくなります。

♣ コード中コメント
プ ロ グ ラ ム コ ー ド や タ ー ミ ナ ル に お い て 、コ メ ン ト を 記 述 す る た め の「@<balloon>{...}」というコマンドが⽤意されています。
▼ サンプル//terminal{$ @<userinput>{unzip mybook.zip}›解凍}$ @<userinput>{cd mybook/}›移動}$ @<userinput>{rake pdf}
›⽣成}
//}

@<balloon>{zipファイルを›@<balloon>{ディレクトリを›@<balloon>{PDFファイルを›▼ 表⽰結果$ unzip mybook.zip$ cd mybook/$ rake pdf← zipファイルを解凍←ディレクトリを移動← PDFファイルを⽣成

Re:VIEW のドキュメントを読むと、本来は吹き出し（バルーン）形式で表⽰することを意図していたようです。Starter では、「←」つきのグレーで表⽰しています。
なおプログラムコードにおいて改⾏記号を表⽰している場合、「@<balloon>{}」があるとそれより後に改⾏⽂字が表⽰されてしまいます。たとえば次の例だと、改⾏
記号は「←再帰呼び出し」の前につくべきですが、実際には後についています。これは期待される挙動ではないでしょう。
▼ サンプル//program[][改⾏記号と「 @@<nop>{}<balloon>{} 」は相性が悪い][eolmar››k=on]{
function fib(n) {– 137 –

第 3 章 記法

if (n <= 1) { return n };return fib(n-1) + fib(n-2);@<balloon>{再帰呼び出し}}//}▼ 表⽰結果▼ 改⾏記号と「@<balloon>{}」は相性が悪い
function fib(n) {ø
if (n <= 1) { return n };ø
return fib(n-1) + fib(n-2);}ø←再帰呼び出し ø

この問題については将来的に対応予定ですが、現在はまだ対応できていません。

♣ 特殊⽂字•「@<hearts>{}」で「♡」が表⽰できます。
•「@<TeX>{}」で「TEX」が表⽰できます。
•「@<LaTeX>{}」で「LATEX」が表⽰できます。

♣ 右寄せ、センタリング
右寄せとセンタリングのブロック命令があります。
▼ サンプル//flushright{
右寄せのサンプル//}//centering{
センタリングのサンプル//}▼ 表⽰結果右寄せのサンプル
センタリングのサンプル– 138 –

3.19 その他

♣ 縦⽅向の空き（実験的機能）「//vspace」を使って、縦⽅向の空きを⼊れられます。マイナスの値を指定すると、空きを削除できます。
▼ サンプルAAAAABBBBB//vspace[latex][-4mm]
CCCCC▼ 表⽰結果

AAAAA
BBBBB
CCCCC

♣ ⽣データLATEX のコード（PDF のとき）や HTML のコード（ePub のとき）を埋め込む機能があります。たとえば次の例では、PDF のときは「//embed[latex]{...//}」のコードが使われ、HTML と ePub のときだけ「//embed[html,epub]{...//}」のコードが使われます。
▼ サンプル//embed[latex]{\textcolor{red}{Red}\textcolor{green}{Green}\textcolor{blue}{Blue}\par//}//embed[html,epub]{<div><span style="color:red">Red</span><span style="color:green">Green</span><span style="color:blue">Blue</span></div>//}– 139 –

第 3 章 記法▼ 表⽰結果Red Green Blueまたインライン命令の「@<embed>{...}」もあります。

•「@<embed>{|latex|...}」なら LATEX のときだけ中⾝が出⼒されます。
•「@<embed>{|htlm,epub|...}」なら HTML と ePub のときだけ中⾝が出⼒されます。

♣ 参考⽂献（未執筆。Re:VIEW の Wiki*42 を参照してください。
）*42 https://github.com/kmuto/review/blob/master/doc/format.ja.md#%E5%8F%82%E8%8

0%83%E6%96%87%E7%8C%AE%E3%81%AE%E5%AE%9A%E7%BE%A9– 140 –

第4章

カスタマイズStarter をカスタマイズする⽅法を紹介します。

【この章の内容】

4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8

命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
ページと本⽂ . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
フォント . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
プログラムコード . . . . . . . . . . . . . . . . . . . . . . . . . 151
⾒出し. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
索引 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Rake タスク . . . . . . . . . . . . . . . . . . . . . . . . . . . 168– 141 –

第 4 章 カスタマイズ

4.1

命令

新しい命令を追加するには、ファイル「review-ext.rb」を編集します。

♣ 新しいインライン命令を追加する
たとえば次の例では、新しいインライン命令「@<bold>{...}」を追加しています。
▼ ファイル「review-ext.rb」
module ReVIEW## インライン命令「 @<bold>{} 」を宣⾔
Compiler.definline :bold## LaTeX⽤の定義
class LATEXBuilder
def on_inline_bold(&b) # ⼊れ⼦を許す場合
return "\\textbf{#{yield}}"
end#def inline_bold(str)# ⼊れ⼦をさせない場合# return "\\textbf{#{escape(str)}}"#end
end## HTML（ ePub ）⽤の定義
class HTMLBuilder
def on_inline_bold(&b) # ⼊れ⼦を許す場合
return "<b>#{yield}</b>"end#def inline_bold(str)# ⼊れ⼦をさせない場合# return "<b>#{escape(str)}</b>"
#end
end
end

なお既存のインライン命令を変更するのも、これと同じ⽅法で⾏えます。

♣ 新しいブロック命令を追加する
たとえば次の例では、新しいブロック命令「//blockquote{ ... //}」を追加し– 142 –

4.1 命令ています*1 。
▼ ファイル「review-ext.rb」
module ReVIEW## ブロック命令「 //blockquote 」を宣⾔（ 引数は0〜1個 ）Compiler.defblock :blockquote, 0..1## LaTeX⽤の定義
class LATEXBuilder## ⼊れ⼦を許す場合
def on_blockquote_block(arg=nil)
if arg.present?
puts "\\noindent"
puts escape(arg)endputs "\\begin{quotation}"yieldputs "\\end{quotation}"end## ⼊れ⼦を許さない場合#def blockquote(lines, arg=nil)# if arg.present?
#
puts "\\noindent"#
puts escape(arg)# end# puts "\\begin{quotation}"# puts lines# puts "\\end{quotation}"#end
end## HTML（ ePub ）⽤の定義
class HTMLBuilder## ⼊れ⼦を許す場合
def on_blockquote_block(arg=nil)
if arg.present?
puts "<p><span>#{escape(arg)}</span></p>"end*1 インライン命令のときは「on_inline_xxx()」なのにブロック命令では「on_xxx_block()」なのは、歴史的な事情です。⾮対称で格好悪いですが、ご了承ください。

– 143 –

第 4 章 カスタマイズ

puts "<blockquote>"yieldputs "</blockquote>"end## ⼊れ⼦を許さない場合#def blockquote(lines, arg=nil)# if arg.present?
#
puts "<p><span>#{escape(arg)}</span></p>"# end# puts "<blockquote>"# puts lines# puts "</blockquote>"
#end
end
end

ブロック命令には「{ ... //}」を使わないタイプのものもあります。その場合は「Compiler.defsingle」を使います。
たとえば縦⽅向にスペースを空ける「//verticalspace[タイプ][⾼さ]」というブロック命令を追加するとしましょう。使い⽅は次の通りとします。
//verticalspace[latex][5mm]//verticalspace[epub][10mm]//verticalspace[*][15mm]← PDFのときは5mm空ける← ePubのときは10mm空ける← PDFでもePubでも15mm空ける

このようなブロック命令は、次のように定義します。「Compiler.defblock」ではなく「Compiler.defsingle」を使っている点に注意してください。
▼ ファイル「review-ext.rb」
module ReVIEW## ブロック命令「 //verticalspace 」を宣⾔（ 引数は2個 ）Compiler.defsingle :verticalspace, 2## LaTeX⽤の定義
class LATEXBuilder## '{ ... //}' を使わないので⼊れ⼦対応にはしない
def verticalspace(type, length)
if type == 'latex' || type == '*'– 144 –

4.2 ページと本⽂

puts "\\vspace{#{length}}"
end
end
end
## HTML（ ePub ）⽤の定義
class HTMLBuilder## '{ ... //}' を使わないので⼊れ⼦対応にはしない
def veritcalspace(type, length)
if type == 'html' || type == 'epub' || type == '*'puts "<div style=\"height: #{length}\"></div>"
end
end
end
end

なお既存のブロック命令を変更するのも、これらと同じ⽅法で⾏えます。

4.2

ページと本⽂♣ [PDF] ページサイズを B5 や A5 に変更する
ペ ー ジ サ イ ズ を B5 や A5 に 変 更 す る に は 、「config-starter.yml」の 設 定 項 ⽬「pagesize:」を変更します*2 。
▼ ファイル「config-starter.yml」
pagesize: A5# A5 or B5♣ [PDF] 本⽂の幅を指定する
本⽂の幅を指定するには、「config-starter.yml」の設定項⽬「textwidth:」を変更します*3 。

*2 以前は「config.yml」の中の「texdocumentclass:」を変更していましたが、その必要はなくなりました。
*3 以前は「sty/mytextsize.sty」を編集していましたが、本⽂幅を変更するだけならその必要はなくなりました。

– 145 –

第 4 章 カスタマイズ▼ ファイル「config-starter.yml」
textwidth: 39zw

# 全⾓⽂字数で指定

ここで、「zw」は全⾓ 1 ⽂字分の幅を表す単位です。
「39zw」なら全⾓ 39 ⽂字分の幅（⻑さ）を表します。

Starter では表 4.1 のような本⽂幅を推奨しています。
▼ 表 4.1: 本⽂幅の推奨値（タブレット向けを除く）
ベージサイズ

フォントサイズ

A5
A5
B5
B5

9pt
10pt
10pt
11pt

本⽂幅
全⾓ 38 ⽂字か 39 ⽂字
全⾓ 35 ⽂字全⾓ 44 ⽂字か 45 ⽂字
全⾓ 41 ⽂字Starter では、印刷⽤ PDF ではページ左右の余⽩幅を変えています。これは印刷時の読みやすさを確保したまま、本⽂の幅を最⼤限に広げているからです。詳しくは「♣ [PDF] 印刷⽤では左右の余⽩幅を充分にとる」(p.213) を⾒てください。

♣ [PDF] 本⽂の⾼さを指定する
本⽂の⾼さを調整するには、「sty/mytextsize.sty」を編集します。
▼ ファイル「sty/mytextsize.sty」%% 天（ ページ上部 ）の余⽩を狭め 、その分を本⽂の⾼さに加える\addtolength{\topmargin}{-2\Cvs} % 上部の余⽩を2⾏分減らす\addtolength{\textheight}{2\Cvs} % 本⽂の⾼さを2⾏分増やす

通常は、このような変更は必要ないはずです。

♣ [PDF] 塗り⾜しをつける
印刷所に⼊稿するとき、本⽂の全ページに上下左右 3mm の「塗り⾜し」が必要になることがあります。塗り⾜しについては次のページなどを参考にしてください。

• 原稿作成の基礎知識：塗り⾜し（同⼈誌印刷栄光）
https://www.eikou.com/making/basis#nuritashi• 原稿作成マニュアル：印刷範囲と塗り⾜し（同⼈誌印刷の緑陽社）
https://www.ryokuyou.co.jp/doujin/manual/basic.html#nuritashi– 146 –

4.2 ページと本⽂

塗り⾜しは、技術系同⼈誌の本⽂ではたいていの場合必要ありませんが、次のような場合は必要です。

• ページ端まで絵や線が描かれている場合• 背景⾊をつけたページがある場合（⼤扉や章扉など）..................................................
技術系同⼈誌でも表紙と裏表紙には塗り⾜しが必要
同⼈誌作成の経験がない⽅のために補⾜説明をします。

• 印刷所に⼊稿するとき、表紙や裏表紙と、本⽂とは別の PDF ファイルにします。前者はカラー印刷、後者は⽩黒印刷です。

• 表紙や裏表紙では背景⾊をつけることがほとんどなので、塗り⾜しが必要です。

• マンガ系の同⼈誌では背景⾊があったりページ端まで絵を描くことがあるので、塗り⾜しが必要です。同⼈誌印刷所のサイトで「塗り⾜しは必須です」と説明されているのは、マンガ同⼈誌を前提としているからです。

• 技術系同⼈誌の本⽂では背景⾊をつけないしページ端まで何かを描くこともないので、塗り⾜しは必要ありません。ただしこれは印刷所によって違う可能性があるので、詳しくは⼊稿先の印刷所に聞いてみてください。

• 塗り⾜しが必要ないのに塗り⾜しをつけてしまっても、問題ありません。
• 塗り⾜しは印刷するときにのみ必要であり、印刷しないなら必要ありません。

..................................................
Starter では、塗り⾜しをつける設定が⽤意されています。
▼ configi-starter.yml：塗り⾜しをつける## 上下左右の塗り⾜し幅（ 印刷⽤PDFのみ ）bleedsize: 3mm# 上下左右に3mmの塗り⾜しをつける

塗り⾜しがつくのは印刷⽤ PDF のみであり、電⼦⽤にはつきません*4 。また塗り
⾜しは上下左右につくので、塗り⾜し幅が 3mm だとページサイズの縦と横は 6mmずつ増えます。

♣ [PDF] 塗り⾜しを可視化する
塗り⾜しがどのくらいの幅を取るのか、⾒た⽬で確認したい⼈もいるでしょう。そのような場合は、config-starter.yml で「bleedcolor: blue」のように指定してく*4 印刷⽤ PDF と電⼦⽤ PDF の違いについては、「2.5 印刷⽤ PDF と電⼦⽤ PDF」(p.34) を参照

してください。

– 147 –

第 4 章 カスタマイズ

ださい。すると塗り⾜しが可視化されます。⾊は red/green/blue/yello/gray などが使えます。
この機能は、あくまで確認⽤のみで使ってください。⼊稿するときは必ず設定を外してください。

♣ [PDF] 章の右ページ始まりをやめる
横書きの本では、章 (Chapter) を⾒開きの右ページから始めるのが⼀般的です。そのため、その前のページが空ページになることがよくあります。この空ページを⼊れたくないなら、章の右ページ始まりを⽌めて左右どちらのページからも始めるようにします。
右ページ始まりをやめるには、「config.yml」の設定項⽬「texdocumentclass:」を変更します。
▼ ファイル「config.yml」
texdocumentclass: ["jsbook","dvipdfmx,uplatex,papersize,twoside,openright" ←右ページはじ››まり"dvipdfmx,uplatex,papersize,twoside,openany"←両ページはじ››まり]♣ [PDF] 「//info」や「//warning」のデザインを変更する
Re:VIEW や Starter では、「//note」以外にも「//info」や「//warning」が使えます（詳しくは「♣ ノート以外のミニブロック」(p.87) を⾒てください）。
「//info」や「//warning」で 使 わ れ て い る ア イ コ ン 画 像 を 変 更 す る に は 、「sty/mystyle.sty」にたとえば次のように書いてください。
▼ ファイル「sty/mystyle.sty」\def\starter@miniblock@info@imagefile{./images/info-icon.png}\def\starter@miniblock@warning@imagefile{./images/warning-icon.››png}

アイコン画像の表⽰サイズや本⽂のフォントを変更するには、次のように書いてください。
▼ ファイル「sty/mystyle.sty」– 148 –

4.2 ページと本⽂\def\starter@miniblock@imagewidth{3zw} % アイコン画像の表⽰幅\def\starter@miniblock@indent{4zw}% 本⽂のインデント幅\def\starter@miniblock@font{\small}% 本⽂のフォント「//memo」や「//tips」や「//important」などには、デフォルトではアイコン
画像はつきません。これらにもアイコン画像をつけるには、たとえば次のように書いてください。
▼ ファイル「sty/mystyle.sty」%% 「 //important 」にアイコン画像をつける\newenvironment{starterimportant}[1]{%\begin{starter@miniblock}[\starter@miniblock@important@imagef››ile]{#1}%}{%\end{starter@miniblock}%}\def\starter@miniblock@important@imagefile{./images/info-icon.p››ng}

デザインそのものを変更するには、たとえば次のようにしてください（どんな表⽰になるかは⾃分で確かめてください）。
▼ ファイル「sty/mystyle.sty」%% 「 //memo 」のデザインを変更する\usepackage{ascmac}\renewenvironment{startermemo}[1]{%\addvspace{1.5\baselineskip}% 1.5⾏分空ける\begin{boxnote}%% 飾り枠で囲む\ifempty{#1}\else%% 引数（ タイトル ）があれば{\centering%% センタリングして\headfont\Large#1\par}% 太字のゴシック体で⼤きく表⽰\bigskip%% 縦⽅向にスペースを空ける\fi%\setlength{\parindent}{1zw}% 段落の先頭を字下げする}{%\end{boxnote}%% 飾り枠の終わり\addvspace{1.5\baselineskip}% 1.5⾏分空ける}– 149 –

第 4 章 カスタマイズ

4.3

フォント

♣ [PDF] フォントサイズを変更する
本 ⽂ の フ ォ ン ト の サ イ ズ を 変 更 す る に は 、「config-starter.yml」の 設 定 項 ⽬「fontsize:」を変更します*5 。
▼ ファイル「config-starter.yml」
fontsize:9pt# 9pt or 10pt

フォントサイズは、A5 サイズなら 9pt、B5 サイズなら 10pt にするのが⼀般的です。ただし初⼼者向けの⼊⾨書では少し⼤きくして、A5 サイズなら 10pt、B5 サイ
ズなら 11pt にするのがいいでしょう。

..................................................
商業誌のフォントサイズと本⽂幅
A5 サイズの商業誌で使われているフォントサイズと本⽂幅を調べました (表4.2)。参考にしてください。

▼ 表 4.2: 商業誌のフォントサイズと本⽂幅
出版社

書籍名

各種サイズ

オライリー・ジャパン『リーダブルコード』『ゼロから作る Deep Learning』

翔泳社『達⼈に学ぶ SQL 徹底指南書 第 2 版』

オーム社

『アジャイル・サムライ』

技術評論社『オブジェクト指向 UI デザイン』『現場で役⽴つシステム設計の原則』

⽇経 BP 社

『独習プログラマー』

A5、9pt、38 ⽂字
A5、9pt、38 ⽂字
A5、9pt、38 ⽂字
A5、10pt、36 ⽂字
A5、9pt、35 ⽂字
A5、10pt、33 ⽂字
A5、10pt、34 ⽂字..................................................
♣ [PDF] フォントの種類を変更する
本 ⽂ の フ ォ ン ト を 変 更 す る に は 、「config-starter.yml」の 設 定 項 ⽬「fontfamily_ja:」と「fontfamily_en:」を変更します。
▼ ファイル「config-starter.yml」*5 以前は「config.yml」の設定項⽬「texdocumentclass:」を変更していましたが、その必要はなくなりました。

– 150 –

4.4 プログラムコード## 本⽂のフォント（ 注 ：実験的 ）## （ Notoフォントが前提なので 、Docker環境が必要 。MacTeXでは使わない››こと ）fontfamily_ja: mincho← mincho: 明朝体, gothic: ゴシック体
fontfamily_en: roman← roman: ローマン体, sansserif: サンセ›
›リフ体
fontweight_ja: normal← normal: 通常, light: 細字
fontweight_en: normal← normal: 通常, light: 細字

または、「sty/mystyle.sty」に以下を追加します。
▼ ファイル「sty/mystyle.sty」%% 英数字のフォントをサンセリフ体に変更\renewcommand\familydefault{\sfdefault}%% ⽇本語フォントをゴシック体に変更\renewcommand\kanjifamilydefault{\gtdefault}%% （ macOSのみ ）⽇本語フォントを丸ゴシックに変更%\renewcommand\kanjifamilydefault{\mgdefault}

4.4

プログラムコード♣ [PDF] 説明⽂直後での改ページを防ぐプログラムコードの説明⽂の直後で改ページされてしまうことがあります。すると
説明⽂とプログラムコードが別ページに離れてしまうため、読みにくくなります（図4.1）。
Starter ではこれを防ぐための⼯夫をしていますが、それでも発⽣してしまうことがあります。もし発⽣したときは、次の対策のうちどちらを⾏ってください。
個別対策：「//needvspace[]」を使う
たとえば「//needvspace[latex][6zw]」とすると、現在位置に全⾓ 6 ⽂字分の⾼さのスペースがあるかを調べ、なければ改ページします。
▼ 全⾓ 6 ⽂字分の⾼さのスペースがなければ改⾏//needvspace[latex][6zw]//list[][フィボナッチ数列]{
def fib(n)n <= 1 ? n : fib(n-1) + fib(n-2)– 151 –

第 4 章 カスタマイズ▲ 図 4.1: 説明⽂の直後で改ページされることがある

end
//}

全体対策：
「caption_needspace:」の値を増やす
config-starter.yml の「caption_needspace:」がたとえば「4.0zh」であれば、プ
ログラムリストの説明⽂を表⽰する前に全⾓ 4 ⽂字分の⾼さのスペースがあるかを調べ、なければ改ページします。よってこの設定値を増やせば、説明⽂だけが別ページになるのを防げます。
ただしこの設定値は、説明⽂を持つすべてのプログラムリストに影響します。設定
値を変える場合は注意してください。

♣ [PDF] プログラムコードのフォントを変更するプログラムコードやターミナルのフォントを変更するには、「config-starter.yml」の設定項⽬「program_ttfont:」と「terminal_ttfont:」を変更します。
▼ ファイル「config-starter.yml」## プログラム⽤（ //list ）の等幅フォント
program_ttfont: beramono## ターミナル⽤（ //terminal 、//cmd ）の等幅フォント
terminal_ttfont: inconsolata-narrow

どんなフォントが使えるかは、「config-starter.yml」の中に書いてあります。

– 152 –

4.4 プログラムコード♣ プログラムコードの枠線
プログラムコードに枠線をつける・つけないを変更するには、次の設定を変更してください。
▼ ファイル「config-starter.yml」## プログラム（ //list ）を枠で囲むならtrue 、囲まないならfalse
program_border: true

プログラムコードがページをまたぐときは、枠線つきのほうが分かりやすいです。
詳しくは「♣ ページまたぎしていることを可視化する」(p.209) を⾒てください。

♣ オプションのデフォルト値「//list」の第 3 引数には、さまざまなオプションが指定できます。これらのオプ
ションは、デフォルト値が「config-starter.yml」で次のように設定されています。ここで、YAML*6 では「on, off, ~」がそれぞれ「true, false, null」と同じ意
味になります。
▼ config-starter.yml## プログラム（ //list ）のデフォルトオプション## （ 注 ：YAMLでは `on, off, ~` は `true, false, null` と同じ ）program_default_options:fold:on# on なら⻑い⾏を右端で折り返す
foldmark:on# on なら折り返し記号をつける
eolmark:off# on なら⾏末に改⾏記号をつける
lineno:~# 1 なら⾏番号をつける
linenowidth: ~# ⾏番号の幅を半⾓⽂字数で指定する
indent:~# インデント幅
fontsize:~# small/x-small/xx-smallang:~# デフォルトのプログラミング⾔語名#file:~# （ 使⽤しない ）encoding:
utf-8# ファイルの⽂字コード

たとえば「//list」にデフォルトで⾏番号とインデント記号をつけるには、設定を次のように変更します。

*6 「YAML」とはデータを構造化して記述する書き⽅のひとつであり、JSON の親戚みたいなものです。config-starter.yml は YAML で書かれています。

– 153 –

第 4 章 カスタマイズ▼ 「//list」にデフォルトで⾏番号とインデント記号をつける
program_default_options:#...省略...
lineno:1linenowidth: 2
indent:4#...省略...

# 1 から始まる⾏番号をつける# ⾏番号を2桁で（ 0なら⾃動計算 ）# インデント幅を半⾓空⽩4⽂字に

このようにデフォルト値を変更すれば、「//list」にオプションを何も指定しなくても、⾏番号とインデント記号がつくようになります。
なおこのように設定をしたうえで、特定のプログラムコードでだけ⾏番号やインデント記号をつけたくない場合は、「//list[][][lineno=off,indent=off]」のよ
うに個別の指定をしてください。
またターミナル画⾯を表す「//terminal」のオプションも、デフォルト値が configstarter.yml で設定されています。項⽬名が「terminal_default_options:」であること以外はプログラムコードの場合と同じです。

♣ [PDF] 折り返し記号や⾏番号をマウス選択の対象から外す
PDF 中のプログラムコードをマウスで選択してコピーすると、折り返し記号や⾏
番号や改⾏記号もコピーされてしまいます。これはプログラムコードをコピペするときに不便です。

Starter では、これらの記号をマウスの選択対象から外すことができます。そのためには、次のどちらかを設定してください。

• config-starter.yml の「exclude_mouseelect:」を true にする。
• 環境変数「$STARTER_EXCLUDE_MOUSESELECT」を「on」に設定する（「true」
ではダメ）。
この設定をしてから PDF を⽣成すると、以下のものがマウスの選択対象にならなくなります*7 。

• 折り返し記号• ⾏番号• 改⾏記号
なおインデントを表す記号は、⽂字ではなく図形として縦線を描写しているため、マウスでの選択対象にはなりません。
・

・

・

・

・

・

・

*7 「@<balloon>{}」で埋め込んだコメント⽂字列は、マウスコピーの対象外ではありません。これは意図した仕様です。もしこれも対象外にしたい場合は、相談してください。

– 154 –

4.5 ⾒出し

ただし、この機能が有効なのは Acrobat Reader のみです。macOS の Preview.app
では効かないので注意してください。
ま た こ の 設 定 を オ ン に す る と 、LATEX の コ ン パ イ ル 時 間 が ⼤ 幅 に 増 え ま す 。
そ の た め 、デ フ ォ ル ト で は オ フ に な っ て い ま す 。リ リ ー ス 時 に だ け 環 境 変 数「$STARTER_EXCLUDE_MOUSESELECT」を on にするといいでしょう。
▼ リスト 4.1: 「$STARTER_EXCLUDE_MOUSESELECT」を on にして PDF を⽣成$ STARTER_EXCLUDE_MOUSESELECT=on rake pdf

4.5

⾒出し

♣ 章のタイトルデザインを変更する
章 (Chapter) のタイトルデザインを変更するには、「config-starter.yml」の設定項
⽬「capter_decoration:」を変更します。
▼ ファイル「config-starter.yml」## 章 (Chapter) タイトルの装飾## （ none: なし 、underline: 下線 、boldlines: 上下に太線 ）chapter_decoration: boldlines## 章 (Chapter) タイトルの左寄せ/右寄せ/中央揃え## （ left: 左寄せ 、right: 右寄せ 、center: 中央揃え ）chapter_align: center## 章 (Chapter) タイトルを1⾏にする（ 章番号とタイトルとの間で改⾏し››ない ）chapter_oneline: false♣ 節のタイトルデザインを変更する
節 (Section) のタイトルデザインを変更するには、「config-starter.yml」の設定項
⽬「section_decoration:」を変更します。
▼ ファイル「config-starter.yml」## 節 (Section) タイトルの装飾
section_decoration: grayback– 155 –

第 4 章 カスタマイズ

どんなデザインが指定できるかは、図 4.2 を参照してください。

..................................................
節タイトルが⻑くて 2 ⾏になる場合
もし節タイトルが⻑くて 2 ⾏になることがある場合は、「circle」「leftline」「numbox」のどれかを指定するといいでしょう。それ以外だと、デザインが破綻してしまいます。

..................................................
♣ 段⾒出しのデザインを変更する
段 (Paragraph) ⾒出しや⼩段 (Paragraph) ⾒出しのデザインを変更するには、「sty/starter-heading.sty」から「\Paragraph@title」や「\Subparagraph@title」の定義を取り出し、「sty/mystyle.sty」にコピーしたうえで変更してください。

♣ [PDF] 章や節のタイトルを独⾃にデザインする
章 (Chapter) や節 (Section) のタイトルのデザインは、「sty/starter-heading.sty」
で定義されています。これらを変更したい場合は、必要な箇所を「sty/mystyle.sty」にコピーしてから変更してください。
またマクロを上書きする場合は、「\newcommand」ではなく「\renewcommand」を使うことに注意してください。

♣ [PDF] 章扉をつける
Starter では、章 (Chapter) ごとにタイトルページをつけられます（図 4.3）。これを「章扉」といい、商業誌ではとてもよく⾒かけます。
章扉をつけるには、次のようにします。

• 章タイトル直後に「//abstract{ ... //}」で概要を書く（必須）。
• そのあとに「//makechaptitlepage[toc=on]」を書く。
• これをすべての章に対して⾏う（まえがきやあとがきは除く）。
▼ 章扉をつける= 章タイトル//abstract{...章の概要...
//}– 156 –

4.5 ⾒出し▲ 図 4.2: 節タイトルのデザイン– 157 –

第 4 章 カスタマイズ▲ 図 4.3: 章扉（章の概要と⽬次つき）//makechaptitlepage[toc=on]== 節タイトル

章扉では、その章に含まれる節 (Section) の⽬次が⾃動的につきます。これは読者にとって便利なので、特にページ数の多い本では章ごとのタイトルページをつけることをお勧めします。

♣ [PDF] 章扉に背景⾊をつける
章扉には、デフォルトでは背景⾊がついていませんが、背景⾊をつけると⾒栄えがかなりよくなります。
背景⾊は sty/config-color.sty において「starter@chaptitlepagecolor」という名前で定義されているので、これを上書き設定すれば変更できます。設定はsty/mystyle.sty で⾏うといいでしょう。

– 158 –

4.5 ⾒出し▼ sty/mystyle.sty：章扉の背景⾊を設定する\definecolor{starter@chaptitlepagecolor}{gray}{0.9}% 明るいグレ››ー
また章扉に背景⾊を設定した場合は、印刷⽤ PDF の上下左右に 3mm ずつの「塗り⾜し」をつけるのが望ましいです。そのためには、config-starter.sty で「bleedsize:
3mm」を設定してください。この設定は印刷⽤ PDF でのみ機能し、電⼦⽤ PDF では無視されます。詳しくは「♣ [PDF] 塗り⾜しをつける」(p.146) を参照してくだ
さい。

♣ [PDF] 節ごとに改ページする
初⼼者向けの⼊⾨書では、節 (Chapter) ごとに改ページするデザインが好まれます。
Starter でこれを⾏うには、「config-starter.yml」で設定項⽬「section_newpage:」を「true」に設定します。
▼ ファイル「config-starter.yml」## 節 (Section) ごとに改ページするか## （ ただし各章の最初の節は改ページしない ）section_newpage: true

♣ 項に番号をつける
Re:VIEW や Starter では、デフォルトでは項 (Subsection) に番号がつきません。
項にも番号をつけるには、「config.yml」の設定項⽬「secnolevel:」を「3」に変更します。
▼ ファイル「config.yml」# 本⽂でセクション番号を表⽰する⾒出しレベル←章 (Chapter) と節 (Section) にだけ番号をつける#secnolevel: 2
secnolevel: 3←項 (Subsection) にも番号をつける♣ 項を⽬次に含める
項 (Subsection) を⽬次に出すには、「config.yml」の設定項⽬「toclevel:」を「3」に変更します。

– 159 –

第 4 章 カスタマイズ▼ ファイル「config.yml」# ⽬次として抽出する⾒出しレベル#toclevel: 2←（ 部と ）章と節までを⽬次に載せる
toclevel: 3←（ 部と ）章と節と項を⽬次に載せる♣ [PDF] 項への参照に節タイトルを含める
項 (Subsection) に番号がついていない場合、「@<secref>{...}」で項を参照すると表⽰が番号なしの項タイトルだけになるので、ユーザはその項を探せません。
たとえば前の項のタイトルは「項を⽬次に含める」です。もし
詳しくは「4.5.7 項を⽬次に含める」を参照してください。
と書かれてあれば、項番号を⼿がかりにして読者はその項を簡単に探せるでしょう。しかし、もし項番号がなくて詳しくは「項を⽬次に含める」を参照してください。
と書かれてると、⼿がかりがないので読者はその項を探すのに苦労するでしょう。
このように、本⽂の中で項を参照しているなら項に番号をつけたほうがいいです。

Starter では別の解決策として、「@<secref>{...}」で項 (Subsection) を参照したときに親となる節 (Section) のタイトルもあわせて表⽰する機能を⽤意しています。たとえばこのように：
詳しくは「4.5 ⾒出し」の中の「項を⽬次に含める」を参照してください。
こ の よ う な 表 ⽰ に す る に は 、「config-starter.yml」の 設 定 項 ⽬「secref_parenttitle:」を「true」に設定してください。
## @<secref>{}において 、親の節のタイトルを含めるか？
secref_parenttitle: true # trueなら親の節のタイトルを含めるな お 以 前 は 、こ の 値 は デ フ ォ ル ト で「true」に な っ て い ま し た 。し か し「@<secref>{}」での参照にページ番号がつくこと、また項タイトルにクローバーをつければ項であることがすぐ分かることから、現在ではデフォルトで「false」になっています。

♣ 項タイトルの記号を外す
項 (Subsection) の タ イ ト ル 先 頭 に つ く 記 号（ ク ロ ー バ ー 、ク ラ ブ ）は 、

– 160 –

4.6 本「config-starter.yml」でオン・オフできます。
▼ ファイル「config-starter.yml」## 項 (Subsection) タイトルの装飾## （ none: なし 、symbol: 先頭にクローバー ）subsection_decoration: symbol♣ [PDF] 項タイトルの記号をクローバーから変更する
項 (Subsection) のタイトル先頭につく記号は、「sty/starter-heading.sty」で次のように定義されています。
▼ ファイル「sty/starter-heading.sty」\newcommand{\starter@subsection@symbol}{$\clubsuit$}% クローバー

これを変更するには、「sty/mystyle.sty」で上書きしましょう。
▼ ファイル「sty/mystyle.sty」%% 「 \newcommand 」ではなく「 \renewcommand 」を使うことに注意\renewcommand{\starter@subsection@symbol}{$\heartsuit$}% ハート

4.6

本♣ 本のタイトルや著者名を変更する
本のタイトルや著者名は、「config.yml」で設定できます。
▼ ファイル「config.yml」# 書名
booktitle: |Re:VIEW Starter
ユーザーズガイド
subtitle: |便利な機能を⼀挙解説！
# 著者名 。
「 , 」で区切って複数指定できる
aut:- name:カウプラン機関極東⽀部– 161 –

第 4 章 カスタマイズ

file-as: カウプランキカンキョクトウシブ

Starter では、本のタイトルやサブタイトルを複数⾏で設定できます。こうすると、
⼤扉（タイトルページ）でも複数⾏で表⽰されます。

♣ [PDF] 表紙や⼤扉や奥付となる PDF ファイルを指定する
Starter では、本の表紙や⼤扉（タイトルページ）や奥付となる PDF ファイルを指定できます。config-starter.yml で以下の項⽬を変更してください*8 。
▼ ファイル「config-starter.yml」
frontcover_pdffile: cover_a5.pdf←表紙
backcover_pdffile: null
←裏表紙
titlepage_pdffile: null
←⼤扉
colophon_pdffile:null←奥付#includepdf_option: "offset=-2.3mm 2.3mm" ←位置を微調整する場合
includepdf_option: null
←通常は無指定でよい

いくつか注意点があります。

• PDF ファイルは、「images/」フォルダ直下に置いてください。
• 画像ファイルは使⽤できません。必ず PDF ファイルを使ってください。
• 1 つの PDF ファイルにつき 1 ページだけにしてください。もし PDF ファイ
ルが複数ページを持つ場合は、「cover.pdf<2>」のように取り込むページ番号を指定してください（実験的機能）。

• 複数の PDF ファイルを指定するには、YAML の配列を使って「[file1.pdf,
file2.pdf]」のように指定します。
「,」のあとには必ず半⾓空⽩を⼊れてください。

• もし位置がずれる場合は、「coverpdf_option:」の値を調整してください（以前は微調整が必要でしたが、現在は必要ないはずです）。
なお表紙と裏表紙がつくのは電⼦⽤ PDF ファイルの場合のみであり、印刷⽤ PDF
ファイルにはつかない（し、つけてはいけない）ので注意してください。詳しくは「2.5 印刷⽤ PDF と電⼦⽤ PDF」(p.34) を参照してください。これに対して⼤扉と奥付は、指定されれば印刷⽤ PDF でも電⼦⽤ PDF でもつきます。

*8 これらの設定は、以前は config.yml で⾏っていましたが、現在は config-starter.yml で⾏うように変更されました。また config.yml に古い設定が残っているとコンパイルエラーになり、「古い設定が残っているので移⾏するように」というエラーメッセージが出ます。

– 162 –

4.6 本..................................................
PNG や JPG の画像を PDF に変換する
macOS にて PNG や JPG を PDF にするには、画像をプレビュー.app で開き、メニューから「ファイル > 書き出す... > フォーマット:PDF」を選んでくだ
さい。

macOS 以外の場合は、「画像を PDF に変換」などで Google 検索すると変換サービスが⾒つかります。

..................................................
♣ [PDF] 表紙の PDF から塗り⾜しを除いて取り込む
表紙や裏表紙の PDF ファイルを印刷所に⼊稿するには、通常の A5 や B5 に上下
左右 3mm ずつを加えたサイズの PDF ファイルを使います。この上下左右 3mm の部分を「塗り⾜し」といいます*9 。
つまり印刷⽤の表紙や裏表紙は、塗り⾜しの分だけ縦横サイズが少し⼤きいのです。そのため印刷⽤の表紙や裏表紙を電⼦⽤ PDF に取り込むには、塗り⾜し部分を除いたうえで取り込む必要があります。

Starter では PDF ファイル名の後ろに「*」をつけると、塗り⾜し部分を除いて取り込んでくれます。PDF のページ番号も⼀緒に指定する場合は「cover.pdf<2>*」のように指定してください。
▼ ファイル「config-starter.yml」
frontcover_pdffile: frontcover_a5.pdf*
backcover_pdffile: backcover_a5.pdf*
titlepage_pdffile: titlepage_a5.pdf
colophon_pdffile:
colophon_a5.pdf←塗り⾜し部分を取り除く←塗り⾜し部分を取り除く←⼤扉は塗り⾜しなし←奥付は塗り⾜しなし

より正確には次のような動作をします。

• PDF ファイル名の最後に「*」がついてなければ、⽤紙サイズに合わせて PDFを拡⼤・縮⼩して、中央に配置します。
・ ・ ・ ・

• PDF ファイル名の最後に「*」がついていると、拡⼤・縮⼩はせずにそのまま
・

・

・

・

・

・

・ ・

・

・

の⼤きさで中央に配置します。その結果、塗り⾜し部分だけが⽤紙からはみ出
るので、あたかも塗り⾜し部分が取り除かれたように⾒えます。

..................................................
塗り⾜しつきで表紙を取り込むと上下に空きが⼊る理由*9 塗り⾜しについては「♣ [PDF] 塗り⾜しをつける」(p.146) も参照してください。

– 163 –

第 4 章 カスタマイズ

ファイル名の最後に「*」をつけない場合、⽤紙サイズに合わせて PDF を拡⼤または縮⼩しますが、縦横の⽐率は変えません。そのため、PDF が⽤紙より縦⻑だと上下を揃えようとして左右に空きが⼊り、PDF が⽤紙より横⻑だと左右を揃えようとして上下に空きが⼊ります。
塗り⾜しのついた PDF ファイルをそのまま取り込むと上下が少し空くのは、PDF の縦横サイズが塗り⾜しの分だけ⽤紙より横⻑になるからです。

..................................................
♣ [PDF] ⼤扉のデザインを変更する
⼤扉（タイトルページ）の PDF ファイルを指定しなかった場合は、デフォルトデ
ザインの⼤扉がつきます。このデザインは「sty/mytitlepage.sty」で定義されているので、デザインを変更したい場合はこのファイルを編集してください。編集する前にバックアップを取っておくといいでしょう*10 。

$ cp sty/mytitlepage.sty sty/mytitlepage.sty.original$ vi sty/mytitlepage.sty♣ [PDF] 奥付のデザインを変更する
奥付の PDF ファイルを指定しなかった場合は、デフォルトデザインの奥付がつきます。このデザインは「sty/mycolophon.sty」で定義されているので、デザインを変更したい場合はこのファイルを編集してください。編集する前にバックアップを取っておくといいでしょう*11 。

$ cp sty/mycolophon.sty sty/mycolophon.sty.original$ vi sty/mycolophon.sty♣ [PDF] 奥付を改ページしない
Starter では、奥付は⾃動的に最終ページに配置されます（詳しくは「♣ 奥付は最
。この⾃動での配置を⽌めて⼿動で後のページに置く」(p.218) を参照してください）
コントロールしたい場合は、次のどちらかを⾏ってください。

•「sty/mycolopho.sty」において、7 ⾏⽬付近にある「\reviewcolophon」の先頭に「%」をつけて「%\reviewcolophon」とする。

•「sty/mystyle.sty」に、「\def\reviewcolophon{}」という記述を追加する。
*10 Git などでバージョン管理している場合は、バックアップする必要はありません。
*11 Git などでバージョン管理している場合は、バックアップする必要はありません。

– 164 –

4.6 本

たとえば、最終ページの上半分に著者紹介と過去の著作⼀覧を表⽰し、下半分に奥付を表⽰したいとします。その場合は奥付が⾃動的に改ページされないよう変更してから、あとがきを次のようにするといいでしょう。
▼ ファイル「contents/99-postface.re」：あとがき= あとがき....⽂章....
//clearpage== 著者紹介....紹介⽂....

←改ページ* 『 著作1 』* 『 著作2 』♣ [PDF] 奥付に発⾏者と連絡先を記載する「技書博*12 」という技術系同⼈誌イベントでは、奥付に「発⾏者」と「連絡先」の記載が必要となりました*13 。Starter では、奥付に発⾏者と連絡先を載せる設定を⽤意しています。
▼ ファイル「config.yml」
additional:- key:
発⾏者
value:
xxxxx←サークル名ではなく個⼈名（ ペンネーム可 ）- key:
連絡先
value:←メールアドレス（ 推奨 ）- xxxxx@example.com- https://www.example.com/← WebサイトURL- "@xxxxx"← Twitterアカウント（ 頭に '@' が必要 ）連絡先にはいくつか補⾜事項があります。

• 連絡先には複数の値が指定できます。技書博によればメールアドレスがお勧めだそうです。

• 連絡先に URL が指定されると、⾃動的にリンクになります。
• 連絡先に Twitter アカウントを指定するには、先頭に「@」をつけてください。
*12 https://gishohaku.dev*13 https://esa-pages.io/p/sharing/13039/posts/115/7fbe936149a836eac678.html#%E

5%A5%A5%E4%BB%98%E3%81%AE%E8%A8%98%E8%BC%89– 165 –

第 4 章 カスタマイズ

また Twitter アカウントも⾃動的にリンクになります。
• 発⾏者や連絡先は、奥付の中では印刷所名の直前に置かれます。
• PDF の奥付にのみ表⽰されます。HTML や ePub へは未対応です。
なおこの設定には、発⾏者や連絡先以外の項⽬も追加できます。もし奥付に表⽰したい項⽬があれば、ここに追加してください。

♣ [PDF] 注意事項の⽂章を変更する
⼤扉（タイトルページ）の直後のページには、免責や商標に関する以下のような注意事項が書かれています。
■免責
本書は情報の提供のみを⽬的としています。
本書の内容を実⾏・適⽤・運⽤したことで何が起きようとも、それは実⾏・適⽤・運⽤した⼈⾃⾝の責任であり、著者や関係者はいかなる責任も負いません。
■商標
本書に登場するシステム名や製品名は、関係各社の商標または登録商標です。
また本書では、TM、®、© などのマークは省略しています。
この⽂⾔を変更したい場合は、「sty/mytitlepage.sty」を編集してください。

♣ [PDF] 注意事項の⽂章を出さない
⼤扉（タイトルページ）の裏ページにある注意事項の⽂章を出さないようにするには、次のどちらかを⾏ってください。

•「sty/mytitlepage.sty」において、「\newcommand{\mytitlenextpage}」を「\newcommand{\@mytitlenextpage}」に変更する。

•「sty/mystyle.sty」において、「\let\mytitlenextpage=\undefined}」という記述を追加する。

4.7

索引♣ [PDF] ⽤語のグループ化を⽂字単位にする
索引ページでは、⽤語が「あ か さ た な は ……」のように⾏単位でグループ化されます。これを「あ い う え お か き ……」のように⽂字単位でグループ化するに– 166 –

4.7 索引

は、config.yml の「makeindex_options: "-q -g"」から「-g」を取り除いてください。

♣ [PDF] 連続したピリオドのかわりに空⽩を使う
索引ページにて⽤語とページ番号との間は、デフォルトでは連続したピリオドで埋めています。これを空⽩で埋めるよう変更するには、sty/indexsty.ist を編集してください。
▼ sty/indexsty.ist## ⽤語とページ番号との間をピリオドで埋める#delim_0 "\\quad\\dotfill ~"#delim_1 "\\quad\\dotfill ~"#delim_2 "\\quad\\dotfill ~"## ⽤語とページ番号との間を空⽩で埋める
delim_0 "\\quad\\hfill"delim_1 "\\quad\\hfill"delim_2 "\\quad\\hfill"

なお sty/indexsty.ist の中の設定項⽬については、mendex コマンドのマニュア
ル*14 を参照してください。mendex コマンド（または upmendex コマンド）のオプ
ションについても記載されています。

♣ [PDF] ⽤語⾒出しのデザインを変更する
索引ページの⽤語⾒出しは「■あ」「■か」のようになっています。このデザインは

sty/starter-misc.sty の「\starterindexgroup」で設定されています。変更するに
は「\starterindexgroup」の定義を sty/starter-misc.sty から sty/mystyle.sty にコピーして、「\newcommand」を「\renewcommand」に変更して中⾝をカスタマイズ
してください。
▼ sty/mystyle.sty\renewcommand{\starterindexgroup}[1]{% % 索引グループ{%\bfseries%% 太字\gtfamily\sffamily%% ゴシック体■#1%% 例 ：`■あ`*14 http://tug.ctan.org/info/mendex-doc/mendex.pdf– 167 –

第 4 章 カスタマイズ}%}

また sty/indexsty.ist を編集すると、別の LATEX マクロ名を指定できます。

♣ [PDF] その他• 索引ページにおいて⼦要素の⽤語で使う「――」は、sty/starter-misc.sty の「\starterindexplaceholder」で定義されています。

•「@<term>{}」で表⽰するフォントは、sty/starter-misc.sty の「\starterterm」
で定義されています。デフォルトではゴシック体にで表⽰するように定義されています。

• ⽤語の転送先を表す「→」を別の記号や⽂字列に変更するには、sty/mystyle.styにたとえば「\renewcommand{\seename}{\textit{see: }}」のように書
きます。

4.8

Rake タスク♣ デフォルトタスクを設定する
Starter では、rake コマンドのデフォルトタスクを環境変数「$RAKE_DEFAULT」
で指定できます。
▼ rake のデフォルトタスクを設定する$ rake←デフォルトではタスク⼀覧が表⽰される$ export RAKE_DEFAULT=pdf ←環境変数を設定$ rake←「 rake pdf 」が実⾏される♣ 独⾃のタスクを追加する
Starter で は 、ユ ー ザ 独 ⾃ の Rake タ ス ク を 追 加 す る た め の フ ァ イ ル「lib/tasks/mytasks.rake」を⽤意しています。
▼ ファイル「lib/tasks/mytasks.rake」## 独⾃のタスクを追加する
desc "ZIPファイルを⽣成する"
task :zip do
rm_rf "mybook"– 168 –

4.8 Rake タスク

mkdir "mybook"
cp_r ["README.md", "mybook.pdf"], "mybook"sh "zip -r9 mybook.zip mybook"end♣ コンパイルの前処理を追加する
Starter では、任意の処理をコンパイルの前に実⾏できます。
▼ ファイル「lib/tasks/mytasks.rake」
def my_preparation(config)
print "...前処理を実⾏...\n"end# 新しい前処理⽤関数

PREPARES.unshift :my_preparation# 前処理の先頭に追加

これを使うと、たとえば以下のようなことができます。

• 原稿ファイルをコピーし書き換える。
• 複数の原稿ファイルを結合して 1 つにする。
• 1 つの原稿ファイルを複数に分割する。

– 169 –

第

5章

FAQ

よくある質問とその回答 (Frequentry Asked Question, FAQ) を紹介します。

【この章の内容】

5.1
5.2
5.3
5.4
5.5
5.6
5.7

コンパイルエラー . . . . . . . . . . . . . . . . . . . . . . . . . 172
本⽂ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
プログラムコードとターミナル . . . . . . . . . . . . . . . . . . 174
画像 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
ノンブル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
LATEX 関連 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
その他 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185– 171 –

第 5 章 FAQ

5.1

コンパイルエラー♣ コンパイルエラーが出たとき
PDF ファイル⽣成時のコンパイルエラーについて、対処⽅法を説明します。
PDF へのコンパイルは、内部では⼤きく 3 つのステージに分かれます。
(1) 設定ファイルを読み込む（config.yml、config-starter.yml、catalog.yml）(2) 原稿ファイル (*.re) を LATEX ファイルへ変換する(3) LATEX ファイルから PDF ファイルを⽣成する(1) のステージでは、設定ファイルの書き⽅に間違いがあるとエラーが発⽣します。
たとえば次のような点に注意してください。

• タブ⽂字を使ってないか（使っているとエラー）• インデントが揃っているか（揃ってないとエラー）• 必要な空⽩が抜けてないか（「-」や「:」の直後）(2) のステージでは、インライン命令やブロック命令の書き⽅に間違いがあるとエラーが発⽣します。たとえば次のような点に注意してください。

• インライン命令がきちんと閉じているか• ブロック命令の引数が⾜りているか、多すぎないか•「//}」が⾜りてないか、または多すぎないか•「@<fn>{}」や「@<img>{}」や「@<table>{}」のラベルが合っているか•「@<chapref>{}」で指定した章 ID が合っているか•「@<secref>{}」で指定した節や項が存在するか• 脚注の中で「]」を「\]」とエスケープしているか•「//image」で指定した画像ファイルが存在するか• 原稿ファイル名を間違っていないか• 原稿ファイルの⽂字コードが UTF-8 になっているか
・

・

・ ・ ・

・ ・

このエラーの場合はエラーメッセージが出るので、それを注意深く読めば解決の⽷
⼝が掴めます。

(3) のステージでのエラーはあまり発⽣しないものの、原因がとても分かりにく
く、LATEX に慣れている⼈でないと解決は難しいです。ときどきキャッシュファイル
(*-pdf/) のせいでおかしくなることがあるので、困ったらキャッシュファイルを消して再コンパイルしてみましょう。

– 172 –

5.2 本⽂▼ 困ったらキャッシュファイルを消して再コンパイル$ rm -rf mybook-pdf ←キャッシュファイルを消す$ rake pdf←または rake docker:pdf
それでもエラーが解決できない場合は、ハッシュタグ「#reviewstarter」をつけてTwitter で聞いてみてください（宛先はなくて構いません）。

♣ 「review-pdfmaker」で PDF が⽣成できない
Starter では、「review-pdfmaker」や「review-epubmaker」は使えません。かわりに「rake pdf」や「rake epub」を使ってください。

5.2

本⽂

♣ 左右の余⽩が違う
印刷⽤ PDF ファイルでは、左右の余⽩幅を意図的に変えています。これは印刷時の読みやすさを確保したまま、本⽂の幅を最⼤限に広げているからです。詳しくは「♣ [PDF] 印刷⽤では左右の余⽩幅を充分にとる」(p.213) を⾒てください。

♣ ⽂章中のプログラムコードに背景⾊をつけたい「@<code>{...}」による⽂章中のプログラムコードに、背景⾊をつけられます。
そのためには、「config-starter.yml」で「inlinecode_gray: true」を設定してください。
▼ ファイル「config-starter.yml」
inlinecode_gray: true
こうすると、sty/starter.sty において次のような LATEX マクロが有効になります。
背景⾊を変えたい場合はこのマクロを変更してください。
▼ ファイル「sty/starter.sty」\renewcommand{\reviewcode}[1]{%\,%% ほんの少しスペースを⼊れる\colorbox{shadecolor}{%% 背景⾊を薄いグレーに変更\texttt{#1}%% ⽂字種を等幅フォントに変更}%\,%% ほんの少しスペースを⼊れる– 173 –

第 5 章 FAQ}♣ 索引をつけたい
Re:VIEW の Wiki ページを参照してください。
• https://github.com/kmuto/review/blob/master/doc/makeindex.j
a.md

5.3

プログラムコードとターミナル♣ プログラムコードの⾒た⽬が崩れる
おそらく、プログラムコードの中でタブ⽂字が使われています。タブ⽂字を半⾓空⽩に置き換えてみてください。

Starter では、プログラム中のタブ⽂字は⾃動的に半⾓空⽩に置き換わります。しかしインライン命令があるとどうしてもカラム幅を正しく計算できないので、意図したようには半⾓空⽩に置き換わらず、プログラムの⾒た⽬が崩れます。

♣ 右端に到達してないのに折り返しされる
Starter ではプログラム中の⻑い⾏が⾃動的に右端で折り返されます。このとき、右端にはまだ⽂字が⼊るだけのスペースがありそうなのに折り返しされることがあります（図 5.1）。

▲ 図 5.1: 右端にはまだ⽂字が⼊るだけのスペースがありそうだが…
このような場合、プログラムやターミナルの表⽰幅をほんの少し広げるだけで、右端まで⽂字が埋まるようになります。
具体的には、ファイル「config-starter.yml」の中の「program_widen: 0.0mm」や「terminal_widen: 0.0mm」を、たとえば「0.3mm」に設定してください（値は各– 174 –

5.3 プログラムコードとターミナル

⾃で調整してください）。
▼ ファイル「config-starter.yml」## プログラム（ //list ）の表⽰幅をほんの少しだけ広げる 。
program_widen:
0.0mm
program_widen:
0.3mm## ターミナル（ //terminal, //cmd ）の表⽰幅をほんの少しだけ広げる 。
terminal_widen: 0.0mm
terminal_widen: 0.3mm

こうすると、プログラムやターミナルの表⽰幅が少しだけ広がり、⽂字が右端まで埋まるようになります（図 5.2）。

▲ 図 5.2: 表⽰幅をほんの少し広げると、右端まで埋まるようになった♣ 全⾓⽂字の幅を半⾓⽂字 2 個分にしたい「//list」や「//terminal」の 第 3 引 数 に「widecharfit=on」を 指 定 す ると 、全 ⾓ ⽂ 字 の 幅 が 半 ⾓ ⽂ 字 2 ⽂ 字 分 に な り ま す 。す べ て の「//list」
や「//terminal」で こ の オ プ シ ョ ン を 有 効 化 し た い 場 合 は 、configstarter.yml の「program_default_options:」や「terminal_default_options:」に、「widecharfit: on」を指定してください。
または英数字の幅が狭いフォントを使うと、半⾓⽂字の幅が全⾓⽂字の約半分になります（ぴったりにはなりません）。config-starter.yml で、次のうち必要なほうを設定してください。
## //list⽤
program_ttfont: inconsolata-narrow## //terminal⽤
terminal_ttfont: inconsolata-narrow– 175 –

第 5 章 FAQ♣ ターミナルの出⼒を折り返しせずに表⽰したい
ターミナルの出⼒結果を折り返しせずに表⽰するには、いくつか⽅法があります。
⼩さいフォントで表⽰する「//terminal」や「//list」では、⼩さいフォントで表⽰するオプションがあります。フォントサイズは「small」「x-small」「xx-small」の 3 つが選べます。
▼ サンプル//terminal[][⼩さいフォントで表⽰する][fontsize=x-small]{Table "public.customers"
Column| Type| Nullable |Default------------+---------+----------+-----------------------------››---------id| integer | not null | nextval('customers_id_seq'::››regclass)name| text| not null |created_on | date
| not null | CURRENT_DATE
Indexes:"customers_pkey" PRIMARY KEY, btree (id)"customers_name_key" UNIQUE CONSTRAINT, btree (name)//}▼ 表⽰結果▼ ⼩さいフォントで表⽰する

Table "public.customers"
Column | Type| Nullable |Default------------+---------+----------+--------------------------------------id| integer | not null | nextval('customers_id_seq'::regclass)name| text| not null |created_on | date
| not null | CURRENT_DATE
Indexes:"customers_pkey" PRIMARY KEY, btree (id)"customers_name_key" UNIQUE CONSTRAINT, btree (name)

幅の狭い等幅フォントを使う

Starter で は 等 幅 フ ォ ン ト を 複 数 の 中 か ら 選 べ ま す 。こ の う ち「inconsolatanarrow」は⽂字の表⽰幅が狭いので、できるだけ折り返しをさせたくない場合に有効です。

– 176 –

5.4 画像「config-starter.yml」で「terminal_ttfont:」を「inconsolata-narrow」に設定してください。

♣ コードハイライトしたい
コードハイライトは、Starter では未サポートです*1 。将来的にはサポートする予定ですが、時期は未定です。

5.4

画像

♣ PDF と HTML とで画像の表⽰サイズを変えたい
Re:VIEW や Starter では、PDF と HTML とで画像の表⽰サイズを別々に指定できます。たとえば次のサンプルでは、PDF (LATEX) では本⽂幅いっぱい、HTML では本⽂幅の半分の⼤きさで画像を表⽰します。
▼ サンプル//image[dummy-image][表⽰幅を変える][latex::scale=1.0,html::scale››=0.5]▼ 表⽰結果▲ 図 5.3: 表⽰幅を変える

なお「latex::xxx」や「html::xxx」のような指定⽅法は、他のオプションやコマンドでも使えます。

*1 Re:VIEW ではコードハイライトができるそうです。

– 177 –

第 5 章 FAQ♣ 印刷⽤ PDF と電⼦⽤ PDF とで異なる解像度の画像を使いたい
印刷⽤ PDF では解像度の⾼い画像を使いたい、けど電⼦⽤ PDF では画像の解像度を低くしてデータサイズを⼩さくしたい、という場合は、「images/」フォルダごと切り替えるのがいいでしょう。具体的には次のようにします。
▼ ⾼解像度と低解像度の画像を切り替える（macOS または Linux の場合）### 事前準備$ mkdir images_highres ←解像度の⾼い画像⽤のフォルダを作る(印刷⽤)$ mkdir images_lowhres ←解像度の低い画像⽤のフォルダを作る(電⼦⽤)$ mv images images.bkup ←既存のimagesフォルダを削除するか別名にする### 解像度の⾼い画像に切り替えて印刷⽤PDFを⽣成$ rm -f images←シンボリックリンクを消す$ ln -s images_highres images←シンボリックリンクを作る$ rake pdf t=pbook←印刷⽤PDFを⽣成する### 解像度の低い画像に切り替えて電⼦⽤PDFを作成←シンボリックリンクを消す$ rm -f images$ ln -s images_lowres images←シンボリックリンクを作る$ rake pdf t=ebook←電⼦⽤PDFを⽣成する
切 り 替 え 作 業 が ⾯ 倒 な ら 、独 ⾃ の Rake タ ス ク を 作 成 す る と い い で し ょ う 。
「lib/tasks/mytasks.rake」に次のようなタスクを追加してください。
▼ lib/tasks/mytasks.rake
desc "印刷⽤PDFを⽣成"
task :pbook do
rm_f 'images'
ln_s 'images_highres', 'images'
sh "rake pdf t=pbook"#sh "rake docker:pdf t=pbook"enddesc "電⼦⽤PDFを⽣成"
task :ebook do
rm_f 'images'
ln_s 'images_rowres', 'images'
sh "rake pdf t=ebook"#sh "rake docker:pdf t=ebook"end– 178 –

5.4 画像

これにより、「rake pbook」で⾼解像度の画像を使って印刷⽤ PDF が⽣成され、また「rake ebook」で低解像度の画像を使って電⼦⽤ PDF が⽣成されます。

♣ 画像の解像度はどのくらいにすればいいか
画像の「解像度」(Resolution) とは、簡単にいえば画像の「きめ細かさ」です。解
像度が⾼い（＝きめ細かい）ほど画像のドットやギザギザがなくなり、解像度が低い
ほど画像のドットやギザギザが⽬⽴ちます。
解像度は「dpi」(dot per inch) という単位で表します。この値が⼤きいほどきめ細かく、低いほど粗くなります。望ましい解像度は⽤途によって異なります。⼤雑把には次のように覚えておくといいでしょう。

• 安い Windows ノート PC で表⽰するなら、72dpi で⼗分• Macbook の Retina ディスプレイできれいに表⽰するなら、144dpi が必要• ⾼級スマートフォンできれいに表⽰するなら、216dpi 必要• 商業印刷で使うなら、カラー画像で 350dpi、モノクロ画像で 600dpi 必要
たとえば安い Windows ノート PC でスクリーンショットを撮ると、画像の解像度
が 72dpi になります。これを Macbook やスマートフォンで等倍表⽰すると、必要な解像度に⾜りないせいで画像のドットが⽬⽴ちます*2 。印刷すれば粗さがもっと⽬⽴
ちます。
では、技術同⼈誌では画像の解像度をどのくらいにすればいいでしょうか。すでに説明したように、商業印刷に使う画像は 350dpi 以上の解像度が必要だとよく⾔われます。しかし（マンガやイラストの同⼈誌ではなく）技術系同⼈誌であれば、そこまで⾼解像度の画像を⽤意しなくても⼤丈夫です。
実際には、Retina ディスプレイや最近のスマートフォンで画像を等倍表⽰して気にならない解像度であれば、印刷してもあまり気になりません。つまり画像の解像度
が 144dpi であれば、印刷しても問題は少ないし、電⼦⽤ PDF で使っても 350dpi と⽐べてデータサイズをかなり⼩さくできます。
印刷⽤と電⼦⽤とで解像度の違う画像を⽤意するのは⾯倒なので、画像の解像度を

144dpi にして印刷⽤と電⼦⽤とで同じ画像を使うのが簡単かつ妥当な⽅法でしょう。

♣ ⽩黒印刷⽤の PDF にカラー画像を使っても⼤丈夫か
⽩黒印刷⽤の PDF にカラー画像を使っても、たいていは⼤丈夫です。たとえばカラーのスクリーンショット画像を、わざわざモノクロ画像に変換する必要はありま*2 等倍で表⽰すると荒い画像でも、⼤きい画像を縮⼩して表⽰すれば粗さは⽬⽴たなくなります。解

像度の⾼い画像を⽤意できない場合は、かわりに⼤きい画像を⽤意して印刷時に縮⼩するといいでしょう。

– 179 –

第 5 章 FAQ

せん。
ただし、⽩黒印刷すれば当然ですがカラーではなくなるので、⾊の違いだけで⾒分けをつけていたものは⽩黒印刷すると⾒分けがつかなくなります。形を変えたり線の種類を変えるなどして、⽩黒になっても⾒分けがつくような⼯夫をしましょう。
また図の⼀部を⾚い丸や四⾓で囲んでいる場合、⽩黒印刷すると⾚ではなくなるので、たとえば「⾚い丸で囲った部分に注⽬してください」という⽂章が読者に通じなくなります。これもよくある失敗なので気をつけましょう。

5.5

ノンブル

♣ ノンブルとは「ノンブル」とは、すべてのページにつけられた通し番号のことです。ページ番号と似ていますが、次のような違いがあります。
通し番号• ページ番号は、まえがきや⽬次では「i, ii, iii, ...」で、本⽂が始まると「1, 2,
3, ...」とまる。つまり通し番号になっていない。
• ノンブルは、まえがきや⽬次や本⽂に関係なく「1, 2, 3, ...」と続く通し番号になっている。
⽤途• ページ番号は、読者が⽬的のページへ素早くアクセスするために必要。
• ノンブルは、印刷所がページの印刷順序を間違わないために必要。
表⽰位置• ページ番号は読者のために存在するので、読者からよく⾒える位置に置く。
• ノンブルは印刷所の⼈だけが⾒られればよく、読者からは⾒えないほうがよい。
ノンブルは、印刷所へ⼊稿するときに必要です。印刷しないならノンブルは不要であり、電⼦⽤ PDF にはノンブルはつけません。
ノンブルについてもっと知りたい場合は「ノンブル 同⼈誌」で Google 検索すると詳しい情報が⾒つかります。

♣ ノンブルを必要とする印刷所
たいていの印刷所では⼊稿する PDF にノンブルが必要ですが、必要としない印刷所もあります。たとえば技術書典でよく利⽤される印刷所のうち、「⽇光企画」では– 180 –

5.5 ノンブル

ノンブルが必須で、「ねこのしっぽ」では不要（だけどあると望ましい）です。主な同⼈誌向け印刷所の情報を表 5.1 にまとめたので参考にしてください。
▼ 表 5.1: 同⼈誌向け印刷所ごとのノンブル必要‧不要情報
印刷所

ノンブル

⽇光企画

必要

参考 URL

ねこのしっぽ不要

http://www.nikko-pc.com/qa/yokuaru-shitsumon.html#3-1
https://www.shippo.co.jp/neko/faq_3.shtml#faq_039

しまや出版

必要

https://www.shimaya.net/howto/data-genkou.html#no

栄光

必要

サンライズ

必要

https://www.eikou.com/qa/answer/66
https://www.sunrisep.co.jp/09_genkou/002genko_kiso.ht

オレンジ⼯房

必要

太陽出版

必要

ポプルス

不要

丸正インキ

必要

https://www.marusho-ink.co.jp/howto/nombre.html

トム出版

必要

https://www.tomshuppan.co.jp/manual/data.html

⾦沢印刷

必要

http://www.kanazawa-p.co.jp/howtodata/howtodata_kihon

ケーナイン

必要

https://www.k-k9.jp/data/nomble/

booknext

必要

https://booknext.ink/guide/making/ml#title-6
https://www.orangekoubou.com/order/question.php#artic
le05
https://www.taiyoushuppan.co.jp/doujin/howto/nombre.p
hp
https://www2.popls.co.jp/pop/genkou/q_and_a.html#nomb
re-rule.html

このように印刷所によって違いますが、ノンブル不要の印刷所であってもノンブルをつけるほうが望ましいです。強い理由がないなら、印刷⽤ PDF にはノンブルをつけましょう。

♣ ノンブルのつけ⽅
Re:VIEW と Starter のどちらも、印刷⽤ PDF にはノンブルが⾃動的につきます（電⼦⽤にはつきません）。Starter では、印刷⽤ PDF ならページの右下隅または左下隅に、グレーの通し番号がついているはずです。これがノンブルです。
ノンブルは印刷所の⼈だけが⾒られればいいので、読者からは⾒えにくい位置（⾒開きの内側）に置かれます。このように読者から⾒えにくい位置に置かれたノンブル
を、特に「隠しノンブル」といいます。
また Starter では、すでに⽣成済みの PDF に対してあとからノンブルを追加できます。たとえば⼤扉（タイトルページ）や奥付を Illustrator や Keynote で作成し*3 、*3 ⼤扉（タイトルページ）を別のソフトで作成した例が「♣ ⼤扉を別のソフトで作成する」(p.216)にあります。

– 181 –

第 5 章 FAQ

それを使って印刷⽤ PDF の⼤扉や奥付のページを⼿動で⼊れ替えるような場合は*4 、⼊れ替えたページにノンブルがつきません。このような場合は、次のような作業⼿順になります。

(1) 印刷⽤ PDF をノンブルなしで⽣成する。
(2) ⼿動で⼤扉や奥付のページを⼊れ替える。
(3) ⽣成済みの印刷⽤ PDF にノンブルをつける。
ここで (1) 印刷⽤ PDF をノンブルなしで⽣成するには、config-starter.yml で「nombre: off」を設定します。また (3) ⽣成済みの印刷⽤ PDF にノンブルをつけるには、ターミナル画⾯で「rake pdf:nombre」を実⾏してください。
▼ ⽣成済みの印刷⽤ PDF にノンブルをつける$ rake pdf:nombre$ rake docker:pdf:nombre← PDFの全ページにノンブルをつける← Dockerを使っている場合はこちら

この Rake タスクでは、ノンブルをつけたい PDF ファイル名と出⼒先の PDF
ファイル名を指定できます。たとえば mybook.pdf にノンブルをつけたものを

mybook_nombre.pdf として出⼒するには、次のようにします。
▼ ⽣成済みの印刷⽤ PDF にノンブルをつける$ rake pdf:nombre file=mybook.pdf out=mybook_nombre.pdf「out=...」が指定されなければ、「file=...」と同じファイル名が使われます。
また「file=...」が指定されなければ、「rake pdf」で⽣成される PDF ファイルの名前が使われます。
なお「rake pdf:nombre」はノンブルをつけるだけであり、再コンパイルはしないので注意してください。また「PDFOperation*5 」を使っても、PDF ファイルにノンブルが簡単につけられます。

..................................................
ノンブル⽤フォントの埋め込み
残念ながら、「rake pdf:nombre」でノンブルをつけるとそのフォントがPDF ファイルに埋め込まれません（これは PDF ファイルを操作しているライ*4 昔はこうする必要がありましたが、現在の Starter は⼤扉と奥付を PDF ファイルで⽤意すればそれを読み込めるので、⼿動で⼊れ替える必要はなくなりました。詳しくは「♣ [PDF] 表紙や⼤扉や奥付となる PDF ファイルを指定する」(p.162) を参照してください。
*5 https://kauplan.org/pdfoperation/– 182 –

5.5 ノンブル

ブラリの限界によるものです）。そのため、印刷所へ⼊稿するまえにフォントを埋め込む必要があります。
対策⽅法は https://kauplan.org/pdfoperation/を⾒てください。また
印刷⽤ PDF にデフォルトでつくノンブルならこのような問題はありません。

..................................................
♣ ノンブルの調整
印刷所によっては、ノンブルの位置や⼤きさを指定される場合があります。その場
合は config-starter.yml の中の、ノンブルに関する設定項⽬を調整してください。な
おこの設定は、「rake pdf:nombre」タスクでも使われます。
▼ config-starter.yml：ノンブルに関する設定項⽬## ノンブル（ 1枚⽬からの通し番号 ）の設定
← on ならノンブルをつける
nombre:onnombre_sidemargin:
0.5mm←ページ左右からのマージン幅
nombre_bottommargin: 2.0mm←ページ下からのマージン⾼nombre_fontcolor:gray←'gray' or 'black'nombre_fontsize:
6pt←フォントサイズ（ 6〜8pt ）nombre_startnumber:
1←ノンブルの開始番号（ 3から始める流››儀もある ）

♣ ノンブルの注意点
印刷所への⼊稿に慣れていないと、ノンブルに関するトラブルを起こしがちです。
初⼼者の⼈は次のような点に注意してください。

• すでに説明したように、ノンブルは印刷するときに必要であり、印刷しなければ不要です。Starter では印刷⽤ PDF にのみ⾃動でノンブルがつきますが、電⼦⽤ PDF にはつきません。
• ノンブルは、表紙と裏表紙には必要ありません。印刷所へ⼊稿するとき、表紙と裏表紙の⼊稿は本⽂とは別に⾏います。そのため、表紙と裏表紙にはノンブ
ルをつける必要はありませんし、つけてはいけません。

• ノンブルは、表紙と裏表紙を除いたすべてのページに必要です。たとえ空⽩
ページであってもノンブルを省略してはいけません。

• 別のソフトで作った⼤扉（タイトルページ）や奥付を PDF に⼊れた場合は、それらのページにもノンブルをつけることを忘れないでください。

• 印刷所からノンブルの位置や⼤きさの指定がある場合は、それに従ってください。ノンブルの調整⽅法は config-starter.yml で⾏えます。

– 183 –

第 5 章 FAQ• ノンブルは「1」から始めることがほとんどですが、印刷所によっては「3」から始めるよう指⽰されることがあります。その場合は config-starter.yml に「nombre_startnumber: 3」を設定してください。

• ノンブルのフォントが PDF に埋め込まれていることを確認してください。
ただし本⽂のフォントほど重要ではないので、もしノンブルのフォントがう
まく埋め込めない場合は、そのままで⼊稿できないか印刷所に相談してみま
しょう。

5.6

LATEX 関連♣ LuaLaTeX と jlreq を使いたい
Starter では、LuaLaTeX と jlreq.cls にはまだ対応していません。どうしてもこれらが使いたい場合は、Re:VIEW が対応しているのでそちらを使うといいでしょう。

LuaLaTeX は好きなフォントが簡単に使えるという⼤きな利点がありますが、コンパイルが遅くなるという⽋点があります。また jlreq.cls はカスタマイズ⽅法がよく分かっていないので、採⽤ができません。
これらの採⽤は今後の課題です。

♣ LATEX のスタイルファイルから環境変数を参照する
Starter では、名前が「STARTER_」で始まる環境変数を LATEX のスタイルファイ
ルから参照できます。
たとえば「STARTER_FOO_BAR」という環境変数を設定すると、sty/mystyle.sty
や sty/starter.sty では「\STARTER@FOO@BAR」という名前で参照できます。この例で分かるように、環境変数名の「_」は「@」に変換されます。
▼ 環境変数を設定する例 (macOS, UNIX)$ export STARTER_FOO_BAR="foobar"▼ 環境変数を参照する例%% ファイル ：sty/mystyle.sty\newcommand\foobar[0]{%\@ifundefined{STARTER@FOO@BAR}{%foobar%}{%\STARTER@FOO@BAR%– 184 –

% 引数なしコマンドを定義% 未定義なら% デフォルト値を使う% 定義済みなら% その値を使う

5.7 その他}%}

この機能を使うと、出⼒や挙動を少し変更したい場合に環境変数でコントロールできます。また値の中に「$」や「\」が⼊っていてもエスケープはしないので注意して
ください。

5.7

その他

♣ ⾼度なカスタマイズ
設定ファイルや LATEX スタイルファイルでは対応できないようなカスタマイズが必要になることがあります。たとえば次のような場合です。

• 印刷⽤とタブレット⽤で PDF ファイルの仕様を⼤きく変えたい。
• B5 サイズと A5 サイズの両⽅の PDF ファイルを⽣成したい。
• β版と本番⽤とで設定を切り替えたい。
• コンパイルするたびに、あるプログラムの実⾏結果を原稿ファイルに埋め込みたい。
このような要件を、Re:VIEW や Starter の機能を使い倒して実現してもいいですが、それよりも汎⽤的なやり⽅で実現しましょう。⽅針としては、設定ファイルや原稿ファイルを⽤途に応じて⽣成するのがいいでしょう。
ここでは例として「印刷⽤とタブレット⽤で config-starter.yml の内容を変える」
ことを考えてみます。

(1) 「config-starter.yml」に拡張⼦「.eruby」をつけます。
$ mv config-starter.yml config-starter.yml.eruby## またはこうでもよい$ mv config-starter.yml{,.eruby}(2) 次に、そのファイルに次のような条件分岐を埋め込みます。
▼ ファイル「config-starter.yml.eruby」....(省略)....
<% if buildmode == 'printing'target:pbook# 印刷向け %>– 185 –

第 5 章 FAQ

pagesize: B5
fontsize: 10pt
textwidth: 44zw<% elsif buildmode == 'tablet' # タブレット向け %>target:tabletpagesize: A5
fontsize: 10pt
textwidth: 42zw<% else abort "error: buildmode=#{buildmode.inspect}" %><% end %>(3) 「config-starter.yml」を⽣成する Rake タスクを定義します。ここまでが準備です。
▼ lib/tasks/mytasks.rake
def render_eruby_files(param)# 要 Ruby >= 2.2
Dir.glob('**/*.eruby').each do |erubyfile|
origfile = erubyfile.sub(/\.eruby$/, '')sh "erb -T 2 -P '#{param}' #{erubyfile} > #{origfile}"
end
end
namespace :setup do
desc "*印刷⽤に設定 (B5, 10pt, mono)"task :printing do
render_eruby_files('buildmode=printing')
end
desc "*タブレット⽤に設定 (A5, 10pt, color)"task :tablet dorender_eruby_files('buildmode=tablet')end
end(4)「rake setup:printing」または「rake setup:tablet」を実⾏すると、configstarter.yml が⽣成されます。そのあとで「rake pdf」を実⾏すれば、⽤途に応じた
PDF が⽣成されます。

– 186 –

5.7 その他$ rake setup:printing # 印刷⽤$ rake pdf$ mv mybook.pdf mybook_printing.pdf$ rake setup:tablet# タブレット⽤$ rake pdf$ mv mybook.pdf mybook_tablet.pdf– 187 –

第6章

よりよい本づくり

せっかく本を作るなら、よりよい本づくりを⽬指しましょう。
この章では、よりよい本にするためのポイントを紹介します。

【この章の内容】

6.1
6.2
6.3
6.4
6.5
6.6
6.7
6.8
6.9
6.10
6.11

まえがき . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
初⼼者向け⼊⾨書 . . . . . . . . . . . . . . . . . . . . . . . . . 193
箇条書き . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
本⽂ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
⾒出し. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

プログラムコード . . . . . . . . . . . . . . . . . . . . . . . . . 202
図表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
ページデザイン . . . . . . . . . . . . . . . . . . . . . . . . . . 213
⼤扉 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
奥付 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
textlint による⽂章チェック . . . . . . . . . . . . . . . . . . . . 219– 189 –

第 6 章 よりよい本づくり

6.1

まえがき

♣ まえがきには章番号をつけない
ときどき、「まえがき」に章番号がついている技術系同⼈誌を⾒かけます（図 6.1）。
しかし⼀般的には、「まえがき」や「あとがき」には章番号はつけません。

▲ 図 6.1: 間違って章番号がついた「まえがき」

Re:VIEW および Starter では、「catalog.yml」の「PREDEF:」や「POSTDEF:」に指定した原稿ファイルには、章番号がつきません。これを間違えて「CHAPS:」に含めてしまうと、「まえがき」や「あとがき」に章番号がついてしまうので気をつけてください。

♣ まえがきに「本書の⽬的」を⼊れる「まえがき」に本の概要や⽬的があると、本を⼿にとった⼈がその本を買うかどうかを判断できます。
次のは「本書の⽬的」のサンプルです。
▼ サンプル
本書の⽬的
本書の⽬的は、SQL を初めてさわる初⼼者が、簡単な検索と集計を SQL でできるようになることです。マーケティング部に配属された新卒 1 年⽬の⼈が、SQL で簡単なデータ分析をできるようになりたいなら、この本はぴったりです。

SQL のチューニングや、データベース設計といった内容は、本書の範囲ではありません。

♣ まえがきに「対象読者」を⼊れる先ほどの話と似ていますが、まえがきに「本の対象読者」を書きましょう。本を⼿– 190 –

6.1 まえがきにとった⼈が、⾃分がその本の対象読者かどうか判断できます。
このとき、「初⼼者」と「初級者」をちゃんと区別するといいでしょう。

•「初⼼者」は⼊⾨書をまだ読んでいない⼈や読んでる途中の⼈•「初級者」は⼊⾨書を読み終えた⼈、実務での経験が浅い⼈
次のは「対象読者」のサンプルです。
▼ サンプル
本書の対象読者
本書は、何らかのオブジェクト指向⾔語の⼊⾨書を読み終えた初級者を対象としています。そのため、「オブジェクト」「クラス」「メソッド」などの⽤語は説明なしに使⽤します。まったくの初⼼者は本書の対象ではないので注意してください。

♣ まえがきに「前提知識」を⼊れる
これまでの話と似ていますが、その本を読むのにどんな前提知識がどのくらいのレベルで必要かを「まえがき」に書いておくと、本を⼿にとった⼈は買うかどうかの判断がしやすいです。
このとき、具体例を添えておくといいでしょう。たとえば「Linux の基礎知識を前提とします」だけでは、どんな基礎知識がどのレベルで必要なのか、よくわかりません。もしこれが「ln -s でシンボリックリンクが作れること」「ps -ef|grep gzip
が何をしているのか分かること」「パイプとリダイレクトの違いが説明できること」
だと、必要な前提知識のレベルがよく分かります。
次のは「前提知識」のサンプルです。
▼ サンプル
本書の前提知識
本書は、Python をある程度使いこなしている中級者以上を対象にしています。そのため、Python の基礎知識を持っていることを前提とします。
具体的には、次のことがすべて分かることが前提となります。

•「[x for x in range(1, 11) if x % 2]」の意味が分かる•「(lambda x, y: x + y)(3, 4)」の結果が予想できる•「x=1」と「fn(x=1)」の違いが分かる•「return」と「yield」の違いが説明できる•「@property」が何か分かる– 191 –

第 6 章 よりよい本づくり♣ まえがきにサポートサイトの URL を載せる
本の正誤表が載っていたり、サンプルコードがダウンロードできるサイトのことを
ここでは「サポートサイト」と呼ぶことにします。
本や同⼈誌を書いたら、ぜひサポートサイトを⽤意しましょう。そして正誤表とサンプルコード、できれば質問ができる連絡先を⽤意しましょう。
そしてその URL をまえがき（と奥付）に載せましょう。
次のはサポートサイト紹介⽂のサンプルです。
▼ サンプル
サポートサイト
本書の正誤表は次のサイトに載っています。サンプルコードもここからダウンロー
ドできます。

• https://www.example.com/mygreatbook/♣ まえがきに謝辞を載せる
レビューしてくれた⼈や編集者がいたら、まえがきに謝辞を書きましょう。家族への謝辞を⼊れるのもよくあります。
謝辞を忘れるのはかなり失礼な⾏為に当たります。また名前を間違ったり、名前が抜けるのも⼤変失礼です。締切間際に謝辞を書くと間違える可能性が⾼いので、執筆期間の早いうちに謝辞を書いておきましょう。

♣ まえがきにソフトウェアのバージョンを載せる
まえがきに、使⽤した（または動作検証した）ソフトウェアのバージョンを載せるといいでしょう。
たとえば Python の 2.7 なのか 3.X なのかは⼤きな問題です。また Linux だとCentOS なのか Ubuntu なのか、Ubuntu なら 18.04 なのか 20.04 なのか、といった情報をまえがきに書いておきましょう。

♣ まえがきの章タイトル以外は⽬次に載せない
⽬次には「まえがき」だけが載っていればよく、「本書の⽬的」や「対象読者」や「謝辞」などは⽬次に載せる必要はありません。
これらを⽬次に載せないための⽅法は 2 つあります。

– 192 –

6.2 初⼼者向け⼊⾨書

ひとつは、節 (Section) や項 (Subsection) のタイトルに「[notoc]」オプションをつけることです。これをつけると、その節や項は⽬次に載りません。
= はじめに==[notoc] 本書の⽬的==[notoc] 対象読者==[notoc] 謝辞

もうひとつは、節 (Section) や項 (Subsection) を⾶ばして⽬ (Subsubsection) を使うことです。通常、⽬次に乗るのは項までで⽬は載りません。そこで、次のような⾒出しにすれば「本書の⽬的」や「対象読者」や「謝辞」は⽬次に載りません。
= はじめに==== 本書の⽬的==== 対象読者==== 謝辞

この⽅法は⾒出しのレベルを⾶ばしているので、本⽂で使うのはよくありません。
しかし⽬次に載らないところで使うなら、あまり気にしなくてもいいでしょう。

6.2

初⼼者向け⼊⾨書♣ 初⼼者向け⼊⾨書ではフォントを⼤きめにする
Starter では、デフォルトでは次のようなフォントサイズにしています。
• ページが B5 サイズなら、フォントは 10pt
• ページが A5 サイズなら、フォントは 9pt
しかし初⼼者向けの⼊⾨書では、次のように少し⼤きめのフォントを使ったほう– 193 –

第 6 章 よりよい本づくり

が、紙⾯から受ける圧迫感が減ります*1 。

• ページが B5 サイズなら、フォントは 11pt
• ページが A5 サイズなら、フォントは 10ptとはいえフォントを⼤きくしていない⼊⾨書もよく⾒かけます。フォントを⼤きくするとページ数が増えてその分印刷代が⾼くなるので、どうするかはよく考えてください。

Starter で本⽂のフォントサイズを変える⽅法は、「♣ [PDF] フォントサイズを変更する」(p.150) を参照してください。またそれに合わせて本⽂の幅も変更する必要があるので、「♣ [PDF] 本⽂の幅を指定する」(p.145) を参照してください。

♣ 初⼼者向け⼊⾨書では節と項の⾒分けをつきやすくする
Re:VIEW では LATEX のデザインをそのまま使っているので、節 (Section) と項(Subsection) のデザインがよく似ており、⾒分けにくいです（図 6.2）。初⼼者は本を読み慣れていないので、このデザインでは節と項の違いが分からず、結果として⽂書構造を理解しないまま読み進めてしまいます。

▲ 図 6.2: Re:VIEW では節 (Section) と項 (Subsection) が⾒分けにくい

Starter では、節と項のデザインを⼤きく変えており、⾒分けやすくなっています（図 6.3）。これは、初⼼者でも節と項の違いがすぐに分かり、⽂書構造を把握できるようにするための配慮です。

▲ 図 6.3: Starter では節 (Section) と項 (Subsection) が⾒分けやすい*1 興味のある⼈は本屋に⾏って、⼊⾨書とオライリー本の本⽂を⽐べてみるといいでしょう。

– 194 –

6.3 箇条書き♣ 初⼼者向け⼊⾨書では節ごとに改ページする
初⼼者向けの⼊⾨書では、節 (Section) ごとに改ページしていることが多いです。
そもそも初⼼者は本⾃体を読み慣れていないことが多いので、節ごとに改ページしてあげることで、⽂章の構造を分かりやすく⽰せます。

Starter では節ごとに改ページする設定が⽤意されています。詳しくは「♣ [PDF]
節ごとに改ページする」(p.159) を参照してください。
ただし節ごとに改ページすると、当然ですが全体のページ数は増え、それを調整するために本⽂をあれこれ変更する必要があります。実践するのは時間とお⾦（印刷代）に余裕がある場合だけにしましょう*2 。

6.3

箇条書き

♣ 箇条書きを正しく使い分ける
箇条書きには「番号なし」「番号つき」「ラベルつき」の 3 つがあります。
番号なしの箇条書きは、項⽬に順序がないか、あっても重要ではない場合に使います。たとえば次の例では、公開された順に項⽬が並んでいるもののそこはあまり重要ではなく、項⽬の順番を⼊れ替えても⽂章の意味が成り⽴つので、番号なしの箇条書
きを使います。
▼ サンプル
スタジオジブリ初期の代表作は次の通りです 。
* ⾵の⾕のナウシカ* 天空の城ラピュタ* となりのトトロ▼ 表⽰結果スタジオジブリ初期の代表作は次の通りです。

• ⾵の⾕のナウシカ• 天空の城ラピュタ• となりのトトロ
番号つきの箇条書きは、⼿順や順位など、項⽬の順序が重要な場合に使います。た*2 逆にいうと、商業の⼊⾨書はそれだけのコストを掛けて制作されているということです。

– 195 –

第 6 章 よりよい本づくり

とえば次の例では項⽬の順序が重要なので、番号つきの箇条書きを使います。
▼ サンプル
スタジオジブリ初期の代表作を 、好きな順に並べました 。
1. ⾵の⾕のナウシカ
2. 天空の城ラピュタ
3. となりのトトロ▼ 表⽰結果スタジオジブリ初期の代表作を、好きな順に並べました。

1. ⾵の⾕のナウシカ
2. 天空の城ラピュタ
3. となりのトトロ

ラベルつきの箇条書きは、⼀⾒すると番号つき箇条書きに似ていますが、数字ではなくアルファベットや⽂字を使う点が違います。またラベルはあとから参照しやすくするために使い、順番を表すためには使いません。そのため、ラベルつきの箇条書き
は「番号なし箇条書きにラベルをつけたもの」として使います。
たとえば次の例では、項⽬の順序はさほど重要でないので番号なし箇条書きでもいいのですが、あとから項⽬を参照するのでラベルつき箇条書きにしています。
▼ サンプル
スタジオジブリ初期の代表作は次の通りです 。
- (A) ⾵の⾕のナウシカ- (B) 天空の城ラピュタ- (C) となりのトトロ

興⾏収⼊を調べると 、(A)が14.8億円 、(B)が11.6億円 、(C)が11.7億円でした››。
▼ 表⽰結果スタジオジブリ初期の代表作は次の通りです。

(A) ⾵の⾕のナウシカ(B) 天空の城ラピュタ(C) となりのトトロ– 196 –

6.3 箇条書き

興⾏収⼊を調べると、(A) が 14.8 億円、(B) が 11.6 億円、(C) が 11.7 億円でした。
番号つき箇条書きとラベルつき箇条書きは、きちんと使い分けましょう。前者は順序に強い意味がある場合、後者は順序に意味がないまたは弱い場合に使います。

♣ 箇条書き直後に継続する段落は字下げしない
段落の途中に箇条書きを⼊れる場合、箇条書きの直後は字下げ（インデント）をしないようにしましょう。
次の例を⾒てください。箇条書きの直後に「//noindent」を⼊れることで、字下げしないようにしています。
▼ サンプル
スタジオジブリ初期の代表作には 、* ⾵の⾕のナウシカ* 天空の城ラピュタ* となりのトトロ//noindentが挙げられます 。

しかしスタジオジブリが発⾜したのは実はラピュタからであり 、ナウシカは厳密››にはスタジオジブリの制作ではないのです 。
▼ 表⽰結果スタジオジブリ初期の代表作には、• ⾵の⾕のナウシカ• 天空の城ラピュタ• となりのトトロが挙げられます。
しかしスタジオジブリが発⾜したのは実はラピュタからであり、ナウシカは厳密にはスタジオジブリの制作ではないのです。
字下げは段落の始まりを表すために使います。しかし上の例の「が挙げられます。」
は段落の始まりではなく途中だと考えられるため、字下げは⾏いません。
もっとも、段落の途中に箇条書きを⼊れること⾃体がよくありません。この例なら、次のように書き換えるといいでしょう。

– 197 –

第 6 章 よりよい本づくり▼ サンプル
スタジオジブリ初期の代表作には 、次の3つが挙げられます 。
* ⾵の⾕のナウシカ* 天空の城ラピュタ* となりのトトロ

しかしスタジオジブリが発⾜したのは実はラピュタからであり 、ナウシカは厳密››にはスタジオジブリの制作ではないのです 。

6.4

本⽂

♣ 強調箇所は太字のゴシック体にする
⽇本語の⽂章では本⽂が明朝体の場合、強調箇所は太字にするだけでなく、ゴシッ
ク体にするのがよいとされています。そのため、強調には「@<b>{...}」ではなく「@<B>{...}」または「@<strong>{...}」を使ってください。
▼ サンプル
本⽂本⽂@<B>{強調}本⽂本⽂ 。@<balloon>{ゴシック体なので望ましい}
本⽂本⽂@<b>{太字}本⽂本⽂ 。@<balloon>{明朝体のままなので望ましくない}▼ 表⽰結果本⽂本⽂強調本⽂本⽂。←ゴシック体なので望ましい
本⽂本⽂太字本⽂本⽂。←明朝体のままなので望ましくない♣ 強調と傍点を使い分ける・ ・ ・ ・ ・

傍点とはこのように⽂章の上についた⼩さな点のことであり、Re:VIEW や Starterなら「@<bou>{...}」でつけられます。
傍点は強調とよく似ていますが、強調は「重要な箇所」を表すのに対し、傍点は「重要ではないけど他と区別したい・注意を向けたい」という⽤途で使います。
たとえば次の例では、否定⽂であることが⾒落とされないよう、傍点を使っています。ここは重要箇所ではないので、強調は使わないほうがいいでしょう。

– 198 –

6.4 本⽂・・ ・ ・

Re:VIEW Starter ではアップグレード⽤スクリプトを⽤意していません。
また技術系の⽂書ではほとんど⾒かけませんが、⼩説や漫画では「何か含みを持たせた表現」や「のちの伏線になる箇所」に傍点を使います。参考までに、『ワールドトリガー』22 巻*3 から傍点を使った例を（ネタバレは避けつつ）引⽤します。
ハ ウ ン ド

・

・ ・

・

・ ・ ・

・

ハ ウ ン ドその追尾弾は相⼿を動かすための追尾弾なのよ (p.132)
あまとり・ ・ ・ ・ ・・ ・だとすると、⾬取ちゃんは⼈を狙って撃てないのか？ (p.133)
ちか・ ・ ・ ・

今の千佳は間違いなくちゃんと戦う意志を持ってますよ (p.134)
たま

・

・ ・

・

・ ・ ・

・

さっきの弾は■■■■を■った■■■か……!? (p.174)♣ [PDF] 記号と⽇本語はくっつくことに注意する
PDF では、読みやすさのために⽇本語と英数字の間に少しアキ（隙間）が⼊ります。これは内部で使っている組版⽤ソフト「LATEX」の仕様です。
▼ サンプル
あいうえおABC DEFかきくけこ123 。
▼ 表⽰結果あいうえお ABC DEF かきくけこ 123。
しかし記号の場合はアキが⼊りません。たとえば次の例では、「ン」と「-」の間にはアキが⼊っていません。
▼ サンプル
オプション-pを使う 。
▼ 表⽰結果オプション-p を使う。
このような場合は、半⾓空⽩を⼊れるか、またはカッコでくくるといいでしょう。
*3 『ワールドトリガー』22 巻（葦原⼤介、集英社、2020 年）– 199 –

第 6 章 よりよい本づくり▼ サンプル
オプション -p を使う 。
オプション「 -p 」を使う 。
▼ 表⽰結果オプション -p を使う。
オプション「-p」を使う。

♣ [PDF] 等幅フォントで余計な空⽩が⼊るのを防ぐ
Re:VIEW や Starter では、PDF を作成するために「LATEX」という組版ソフトを使っています。この LATEX では、半⾓空⽩は次のように扱われます。
• ⽂章中の半⾓空⽩は、何個連続していても 1 個分の空⽩しか出⼒されない。
• ただし「.」と「:」と「!」と「?」の直後の半⾓空⽩は、1 個しかなくても 2 個分の空⽩が出⼒される。
このルールは、英語の⽂章を書くうえでは妥当な仕様です。そしてこのルールは、フォントに依らず適⽤されます。そのため等幅フォントを使っているときでも、「.」と「:」と「!」と「?」の直後に半⾓空⽩があると 2 個分の空⽩が出⼒されます。
しかし、等幅フォントを使うのはたいていプログラムコードやコマンドを表す場合
なので、半⾓空⽩が勝⼿に 2 個出⼒されてしまうのは困りものです。たとえば、「{a: 1}」と書いたつもりが、「{a:1}」と表⽰されるのは、意図したことではないでしょう。

そこで Starter では、等幅フォントの場合はこのルールを適⽤しないようにしています。そのための「\frenchspacing」*4 というマクロが LATEX にはあるので、これを使います。具体的には、LATEX マクロを次のように上書きしています。
%% 「 」を上書き\renewcommand{\reviewtt}[1]{{%\frenchspacing%% 「 ! ? : . 」の直後の空⽩が2⽂字分になるのを防ぐ\texttt{#1}%% 等幅フォントで表⽰}}「@<code>{}」が呼び出す「\reviewcode」マクロにも同じ変更をしています。こ*4 「\frenchspacing」というのは、「フランス流の空⽩の⼊れ⽅」という意味です。フランス語では「. : ! ?」の直後でも空⽩は 1 個なようです。

– 200 –

6.5 ⾒出しのおかげで、Starter では「@<tt>{}」や「@<code>{}」を使ったときに空⽩が 2 個出⼒されるのを防いでいます。
ただし、本来このようなルール変更は「@<code>{}」にだけ⾏うべきであり、「@<tt>{}」では変更すべきではありません。現実には「@<tt>{}」がプログラムコー
ドを表すのに広く使われていることを鑑みて、Starter では「@<tt>{}」でもルール変更をしています。しかし本来はすべきでないと知っておいてください。
なお「@<tt>{}」を本来の動作に戻すには、sty/mystyle.sty に次のマクロ定義を追加してください。
▼ sty/mystyle.sty%% @<tt>{} を本来の動作に戻す\renewcommand{\reviewtt}[1]{%\texttt{#1}%% 等幅フォントで表⽰}♣ ⽂章中のコードは折り返しする(TODO)♣ ノートとコラムを使い分ける
ノートとコラムはよく似ています。次のように使い分けるといいでしょう。

• 本⽂に対する補⾜情報は、ノートを使う。あくまで補⾜情報なので、⽂章が⻑
くなりすぎないよう注意する。

• 章 (Chapter) の終わりに、⻑めの関連情報やエッセーを書く場合はコラムを使う。これは節 (Section) と同じ扱いにするので、「==[column]」を使う。
ときどき、ノートで書くべきことをすべてコラムで書いている同⼈誌を⾒かけます。あまりよいことではないので、ノートとコラムの使い分けを検討してみてください。また使い分けがよく分からないと思ったら、商業の技術書籍をいくつか参考にしてみてください。

6.5

⾒出し♣ 節タイトルが複数⾏になるなら下線や背景⾊を使わない
Starter では節 (Section) のタイトルに下線や背景⾊をつけられます。しかしそれらは節タイトルが 1 ⾏に収まる場合だけを想定しており、複数⾏の場合は考慮されて– 201 –

第 6 章 よりよい本づくり

いません（図 6.4）。
複数⾏になるぐらいの⻑い節タイトルがある場合は、下線も背景⾊も使わないデザ
インを選びましょう。Starter であれば、次のどれかを選ぶといいでしょう。

•「numbox」… 節番号を⽩ヌキ⽂字（図 6.4 上から 2 番⽬）•「leftline」… 節タイトル左に縦線（図 6.4 上から 4 番⽬）•「circle」… ⼤きい円に⽩ヌキ⽂字（図 6.4 上から 5 番⽬）
このうち「circle」は、節タイトルが 1 ⾏の場合でも 2 ⾏分の⾼さを必要とする
ので、他のデザインと⽐べてページ数が若⼲増えることに注意してください。
なお Starter における節タイトルのデザインを変更する⽅法は、「♣ 節のタイトルデザインを変更する」(p.155) を参照してください。

♣ 項を参照するなら項番号をつける「@<secref>{}」や「@<hd>{}」で項 (Subsection) を参照するなら、項にも番号をつけましょう。番号のついていない⾒出しを参照するのは⽌めておいたほうがいいでしょう。
項に番号をつける⽅法は、「♣ 項に番号をつける」(p.159) を参照してください。

6.6

プログラムコード♣ 0 と O や 1 と l が⾒分けやすいフォントを使うプログラムコードやターミナルでは、0 と O や、1 と l が⾒分けやすい等幅フォン
トを使ってください（図 6.5）。具体的には「beramono」フォントか「inconsolata」
フォントを使うといいでしょう。

Starter では、プログラムコードやターミナルの等幅フォントを選べる設定を⽤意しています。詳しくは「♣ [PDF] プログラムコードのフォントを変更する」(p.152)
を参照してください。

♣ フォントを⼩さくしすぎない
プログラムコードやターミナルのフォントサイズが⼩さすぎると、とても読みづらくなります。具体的には、8pt 以下*5 にするのはやめましょう。
昔は⻑い⾏をページ内に収める必要があったため、プログラムコードのフォントサ
イズを⼩さくする必要がありました。しかし今は⻑い⾏を⾃動的に折り返す機能があ*5 念のために説明すると、「8pt 以下」には 8pt も含まれます。

– 202 –

6.6 プログラムコード▲ 図 6.4: 節タイトルが⻑くて複数⾏になった場合– 203 –

第 6 章 よりよい本づくり▲ 図 6.5: 0 と O や、1 と l が⾒分けやすい等幅フォントを使う

るので、⼩さいフォントを使う必要性は薄れています。また、たとえば「inconsolata」
フォントは LATEX のデフォルトフォントと⽐べて⼩さめに表⽰されるため、このフォントを選ぶと必要以上に⼩さく⾒えます。

Starter のデフォルトでは、本⽂のフォントサイズに関わらず、A5 サイズなら 9pt、B5 サイズなら 10pt のフォントサイズが使われます。
• A5 サイズなら、本⽂が 9pt と 10pt のどちらであっても、プログラムコードはデフォルトで 9pt• B5 サイズなら、本⽂が 10pt と 11pt のどちらであっても、プログラムコード
はデフォルトで 10pt
この調整は、「config-starter.yml」の設定項⽬「program_default_options:」と_「terminal default_options:」の中の、「fontsize:」で⾏われています*6 。これらの値は、本⽂が A5 サイズ 10pt または B5 サイズ 11pt なら「small」に設定され、A5 サイズ 9pt または B5 サイズ 10pt なら「null」に設定されます。

*6 以前は「progoram_fontsize:」と「terminal_fontsize:」という設定項⽬がありましたが、廃⽌されました。

– 204 –

6.6 プログラムコード♣ 重要箇所を⽬⽴たせるプログラムコードが 5 ⾏以上あると、読者はコードのどこに注⽬すればいいか、分からなくなります。もし注⽬してほしい箇所が強調されていれば、読者にとってとても理解しやすくなります。
プログラムコードの中で注⽬してほしい箇所は、ぜひ太字にして⽬⽴たせましょう。たとえば次の例は再帰プログラムの説明なので、再帰している箇所を太字にして⽬⽴たせています。
▼ 再帰プログラムの例
function fib(n) {if (n <= 1) {return n;} else {return fib(n-1) + fib(n-2);}}

なおプログラムコードを太字にするときは、「@<B>{}」ではなく「@<b>{}」を使ってください。「@<B>{}」だと等幅フォントのはずがゴシック体に変わってしまいます。
「@<b>{}」だと太字にするだけなので等幅フォントのままで変わりません。

..................................................
太字では⽬⽴たないことがある
太字にしても⽬⽴たない⽂字や記号があるので注意してください*7 。
たとえば空⽩やタブ⽂字は、⽬に⾒えないので太字にしても⾒えません。またピリオド「.」やカンマ「,」やハイフン「-」やクオート「'"`」などは、太字にしても⽬⽴たず、読者には気づいてもらえない可能性が⾼いです。
解決策としては、⽂字の⾊を変えるか、背景⾊を変えることです。Starter ではどのような⽅法にするかを検討中です。

..................................................
♣ 重要でない箇所を⽬⽴たせない
Java の「public static void main(String[] args)」や、PHP の「<?php?>」は、プログラムコードの説明において重要ではないので、⽬⽴たせないようにするといいでしょう。
*7 重要でない箇所を薄く表⽰したり、削除したコードに取り消し線をつける場合でも、同様の問題が起こります。

– 205 –

第 6 章 よりよい本づくり

Starter では「@<weak>{...}」を使うと、プログラムコードの⼀部を⽬⽴たせないようにできます。
▼ 重要でない箇所を⽬⽴たせなくした例
public class Example {public static void main(String[] args) {System.out.println("Hello, world!");}}♣ 差分（追加と削除）の箇所を明⽰する
サンプルコードを徐々に改善するような内容の場合は、次のようにすると差分が分かりやすくなります。

• 削除した⾏に「@<del>{}」で取り消し線を引く。
• 追加した⾏を「@<ins>{}」で太字にする。
たとえば次のようなサンプルコードがあるとします。
▼ 最初のサンプルコード/// ボタンを押すたびにラベルを⼊れ替える$('#button').on('click', function(ev) {let $this = $(this);
let prev = $this.text();
let next = $this.data('label');$this.text(next).data('label', prev);});

これを改善して、次のようなコードにしました。しかしこれだと、どこを変更した
かを読者が探さないといけません。
▼ 改善したサンプルコード/// ボタンを押すたびにラベルを⼊れ替える
function toggleLabel(ev) {let $this = $(this);
let prev = $this.text();
let next = $this.data('label');$this.text(next).data('label', prev);}$('#button').on('click', toggleLabel);– 206 –

6.6 プログラムコード

もし次のように差分を分かりやすく表⽰すれば、読者は変更点をすぐに理解できるでしょう。
/// ボタンを押すたびにラベルを⼊れ替える$('#button').on('click', function(ev) {function toggleLabel(ev) {let $this = $(this);
let prev = $this.text();
let next = $this.data('label');$this.text(next).data('label', prev);});}$('#button').on('click', toggleLabel);

この作業はとても⾯倒です。それでもこの⾯倒を乗り切った本だけが、初⼼者にとって分かりやすい本になるのです。
このほか、Git での差分のような表⽰⽅法も考えられます。各⾃で⼯夫してみてください。

♣ ⻑い⾏の折り返し箇所を明⽰する
⻑い⾏が右端で折り返されるとき、折り返された箇所が分かるような表⽰にするといいでしょう。そのための⽅法は 3 つあります。

• 折り返し箇所に何らかの⽬印をつける• ⾏番号をつける• ⾏末を表す記号をつける
たとえば次の例では、あたかも複数⾏あるかのように⾒えます。
*********************************************************************************************************************************************************************************************

しかし折り返した箇所に折り返し記号をつけてみると、実は 1 ⾏であることが分かります。
***************************************************************››***************************************************************››***************************************************************

また⾏番号をつけても、1 ⾏であることが分かります。

– 207 –

第 6 章 よりよい本づくり

1: *********************************************************************************************************************************************************************************************

あるいは⾏末を表す記号をつける⽅法でも、折り返した⾏にはその記号がつかないので、1 ⾏であることが分かります。
*********************************************************************************************************************************************************************************************ø

このように、⽅法は何でもいいので折り返し箇所が分かるような仕組みを使いましょう。

Starter では、デフォルトで折り返し箇所に折り返し記号がつくようになってます。
また折り返し記号がプログラムコードの⼀部だと間違って認識されないよう、次のよ
うな⼯夫をしています。

• フォントの⾊をグレーにして薄く表⽰する。
• フォントの種類を等幅でなくローマン体にする。

♣ ⾏番号を控えめに表⽰する
⾏番号は、プログラムコードと同じフォント・同じ⾊で表⽰すべきではありません。⾏番号はあくまで脇役なので、主役であるプログラムコードよりも⽬⽴たないよ
うにすべきです。

Starter では、⾏番号をグレー表⽰しているので、⾏番号がプログラムコードよりも⽬⽴たちません。
1: function fib(n) {2:
if (n <= 1) {3:
return n;
4:} else {5:
return fib(n-1) + fib(n-2);
6:
}
7: }

♣ ⾏番号を考慮して⻑い⾏を折り返す
⻑い⾏を⾃動的に折り返すとき、もし⾏番号があればそれを考慮した表⽰にすべき– 208 –

6.6 プログラムコードです。

Starter ではそのような表⽰になっています。
1: if error:
2:
sys.err.write("Something error raised. Please contact to›› system administrator.\n")

この例を⾒ると、折り返した⾏が左端には⾏かず、⾏番号の表⽰スペースを避けて折り返されています。これが、⾏番号つき折り返しの望ましい姿です。
これに対し、Re:VIEW では折り返した⾏が左端に到達してしまい、⾏番号の表⽰
スペースを侵⾷します。これは⾏番号つき折り返しの望ましくない姿です。

♣ ページまたぎしていることを可視化するプログラムコードがページまたぎしていることが分かるようにしましょう。

• プログラムコードに枠線がないと、ページまたぎしたときに次のページに続いているかどうか、次のページを⾒ないと分かりません（図 6.6 左）。
• プログラムコードに枠線があれば、ページまたぎしても次のページに続いているかどうかが、次のページを⾒なくても分かります（図 6.6 右）。

▲ 図 6.6: プログラムコードに枠線がない場合とある場合の違い

Starter ではデフォルトでプログラムコードに枠線がつきます。枠線をつけたくない場合は「config-starter.yml」の設定項⽬「program_border:」を「false」に設定します。
なお、プログラムコードの背景枠の四隅を⾓丸にすることでも、ページまたぎして– 209 –

第 6 章 よりよい本づくり

いることを可視化できます。

♣ インデントを可視化する
Python や YAML ではインデントでブロック構造を表すので、ブロックの終わりを表すキーワードや記号がありません。そのため、プログラムコードがページをまたぐとインデントが分からなくなる（つまりブロックの構造が分からなくなる）ことがあります。
これを防ぐには、何らかの⽅法でインデントを可視化します。そうすると、プログ
ラムコードがページをまたいでもインデントが分からなくなることはありません。

Starter では「//list[][][indent=4]{ ... //}」*8 のようにすることで、インデントごとに薄い縦線をつけられます。
▼ 薄い縦線をつけてインデントを可視化する
class Fib:
def __call__(n):if n <= 1:
return n
else:
return fib(n-1) + fib(n-2)

6.7

図表

♣ 図表が次のページに送られてもスペースを空けない
Re:VIEW ではデフォルトで、図は現在位置に置かれるよう強制されます。もし現在位置に図を⼊れるスペースがない場合は、図は次のページに表⽰され、そのあとに本⽂が続きます。この仕様のせいで、たくさんのスペースが空いて本⽂がスカスカになってしまうことがあります（図 6.7 上）。
これはよくないので、Starter では図が次のページに送られた場合、後続の本⽂を現在位置に流し込みます。図が現在位置に⼊らないからといって、スペースを空けたままにする必要はありません（図 6.7 下）。

*8 後⽅互換性のために、「indentwidth=4」という名前でも指定できます。

– 210 –

6.7 図表▲ 図 6.7: 後続の本⽂を現在位置に流し込むかどうか♣ ⼤きい図表は独⽴したページに表⽰する
たとえば図がページの 3/4 を占めるようなら、そのページには後続のテキストを流しこまず、その図だけのページにしましょう。

Starter だと「//image[ファイル名][説明⽂][scale=1.0,pos=p]」とすると、その図だけの独⽴したページに表⽰されます。

♣ 図表は番号で参照する
図や表は、現在位置に⼊り切らないとき、⾃動的に次のページに送られます。その場合、たとえば「次の図を⾒てください」と書いてあると「次の図」がなくて読者が– 211 –

第 6 章 よりよい本づくり

混乱します。
そのため、図や表は必ず番号で参照してください。図なら「@<img>{ファイル名}」、表なら「@<table>{ラベル}」で参照します。

♣ ⽩黒印刷でも問題ないか確認する
形は同じで⾊だけが違う図形を使うと、⽩黒印刷したときに判別がつかなくなります。
⽩黒印刷するなら、形を変えたり線の種類を変えたりするなどして、⽩黒印刷しても判別できるような図にしましょう。

♣ 表のカラム幅を指定する
表に⻑い⽂章を⼊れると、ページ横にはみ出してしまいます。
このような場合は、「//tsize[latex][p{70mm}]」のようにカラムの幅を指定しましょう。
▼ サンプル//tsize[latex][|l|p{70mm}|]//table[tbl-jqqu9][⻑いテキストを使ったサンプル]{
伝承地
伝承内容------------------------------------------⾵の⾕
その者 、蒼き⾐を纏て⾦⾊の野に降り⽴つべし 。失われし››⼤地との絆を結び 、ついに⼈々を⻘き清浄の地に導かん 。
ゴンドアの⾕ リーテ ‧ラトバリタ ‧ウルス ‧アリアロス ‧バル ‧ネトリール//}▼ 表⽰結果▼ 表 6.1: ⻑いテキストを使ったサンプル
伝承地

伝承内容

⾵の⾕

その者、蒼き⾐を纏て⾦⾊の野に降り⽴つべし。失われし⼤地との絆を結び、ついに⼈々を⻘き清浄の地に導かん。

ゴンドアの⾕

リーテ・ラトバリタ・ウルス・アリアロス・バル・ネ
トリール– 212 –

6.8 ページデザイン♣ 表のカラムが数値なら右寄せにする
表のカラムはデフォルトで左寄せ (l) ですが、右寄せ (r) や中央揃え (c) を指定できます。特にカラムが数値なら、右寄せにするのがいいでしょう。
▼ サンプル//tsize[latex][|l|c|r|]//table[tbl-o599k][左寄せ ‧中央揃え ‧右寄せのサンプル]{
左寄せ
中央揃え
右寄せ
------------------------------------------1
1
1
10
10
10
100
100
100
1000
1000
1000
//}

▼ 表⽰結果▼ 表 6.2: 左寄せ‧中央揃え‧右寄せのサンプル

6.8

左寄せ

中央揃え

右寄せ

1
10
100
1000

1
10
100
1000

1
10
100
1000

ページデザイン♣ [PDF] 印刷⽤では左右の余⽩幅を充分にとる
紙の書籍では、左右いっぱいに本⽂を印刷してはいけません。必ずページ左右の余
⽩を充分に確保してください（図 6.8）。

• ⾒開きにおいて内側の余⽩（つまり左ページの右余⽩と、右ページの左余⽩）
は、最低 20mm 必要です。それ以上切り詰めると、本を開いたときに内側の本⽂がとても読みにくくなります。

• ⾒開きにおいて外側の余⽩（つまり左ページの左余⽩と、右ページの右余⽩）
は、10〜15mm くらい必要です。それ以上切り詰めると、指が本⽂にかかって– 213 –

第 6 章 よりよい本づくりしまうので読みにくくなります。

▲ 図 6.8: 紙の書籍ではページ左右の余⽩幅が必要

Starter ではこのような制限を考慮しつつ、本⽂幅が最⼤になるよう設定しています。そのため、印刷⽤ PDF ファイルでは奇数ページと偶数ページで左右の余⽩幅が違います。これは意図した仕様でありバグではありません。
電⼦⽤ PDF ファイルではこのようなことを考慮する必要はありません。そのため、電⼦⽤ PDF では左右の余⽩幅は同じです。

♣ [PDF] タブレット向けでは余⽩を切り詰める
Starter では、印刷⽤ PDF と電⼦⽤ PDF を切り替えて⽣成できます。このとき、電⼦⽤ PDF のレイアウトは印刷⽤ PDF をほぼ忠実に再現しています。つまり電⼦⽤ PDF のレイアウトは電⼦⽤として最適化されているわけではなく、あくまで印刷⽤のレイアウトを流⽤しているだけです。
もし印刷⽤ PDF を必要とせず、電⼦⽤ PDF だけを必要とするなら、レイアウト
をタブレット向けに最適化するといいでしょう。タブレット向けの PDF では、本⽂– 214 –

6.8 ページデザイン

周辺の余⽩を切り詰めると、7 インチや 8 インチのタブレットでの読みやすさが向上します。余⽩がまったくないのもどうかと思いますが、全⾓ 1 ⽂字分ぐらいの余⽩があればタブレットの画⾯では⼗分です。

Starter では、プロジェクト作成時にタブレット向けのレイアウトを選択できます。そうすると、タブレット向けに余⽩を切り詰めたレイアウトになります。印刷⽤

PDF を必要としない⼈は試してみてください。
なおタブレット向けに余⽩を切り詰めた A5 サイズの本⽂幅は、切り詰めていない
通常の B5 サイズの本⽂幅とほぼ同じになります。つまり B5 サイズで余⽩を切り詰めると本⽂幅が⻑くなりすぎるので、Starter ではタブレット向けとしては A5 サイ
ズのみを⽤意しています。

♣ [PDF] 電⼦⽤ PDF ではページ番号の位置を揃える
紙の書籍においてページ番号は、⾒開きで左右の上隅または下隅に置かれることが多いです。紙の書籍は⾒開きで読めるので、ページ番号がこのような位置でも問題ありません。
しかしこれと同じことを電⼦⽤ PDF で⾏うと、ページ番号の位置が右上だったり左上だったり（あるいは右下だったり左下だったり）⼀定しないので、読みづらいです。なぜなら、電⼦⽤ PDF をタブレットで⾒るときは⾒開きではなく 1 ページずつ読まれるからです。
つまり紙の書籍におけるページ番号は⾒開きであることを前提にしており、それと同じ前提を電⼦⽤ PDF にしてはいけません。
電⼦⽤ PDF では、ページ番号の位置は⼀定であることが望ましいです。そのため、Starter ではページ番号をページ下の真ん中に置いています。またこの位置は紙の書籍でも通⽤するので、印刷⽤ PDF と電⼦⽤ PDF とで同じページレイアウトにできます。

♣ ⾮ Retina 向けには本⽂をゴシック体にする
Re:VIEW や Starter では、本⽂のフォントを明朝体にしています。明朝体は、印刷物や Retina ディスプレイのように解像度が⾼いと読みやすいですが、Retina でな
い（つまり⾼解像度でない）ディスプレイだと読みづらいです。
スマートフォンやノートパソコンでは Retina ディスプレイが普及しましたが、外部ディスプレイでは⾼解像度ではないものがまだ⼀般的です。
もし⾼解像度でないディスプレイでも読みやすくしたいなら、本⽂をゴシック体にすることを検討しましょう。Starter では「config-starter.yml」の設定を変えるだけで変更できます。詳しくは「♣ [PDF] フォントの種類を変更する」(p.150) を参照し

– 215 –

第 6 章 よりよい本づくりてください。

6.9

⼤扉♣ ⻑いタイトルでは改⾏箇所を明⽰する本や同⼈誌のタイトルが⻑いと、⼤扉（タイトルページ）において不⾃然な箇所で改⾏されてしまいます（図 6.9 上）。
これを防ぐために、Starter ではタイトルを複数⾏で指定できるようになっています。この場合、⼤扉（タイトルページ）ではタイトルが 1 ⾏ずつ表⽰されるので、⾃然な位置を指定して改⾏できます（図 6.9 下）。

▲ 図 6.9: タイトルの改⾏位置を指定しなかった場合（上）とした場合（下）♣ ⼤扉を別のソフトで作成する
Re:VIEW や Starter が⽣成する⼤扉（タイトルページ）は、デザインがよくありません。Photoshop や Illustrator や Keynote で作成したほうが、⾒栄えのいいデザインになります（図 6.10）。
Starter では、別のソフトで作成した⼤扉や奥付の PDF ファイルを読み込めます。
やり⽅は「♣ [PDF] 表紙や⼤扉や奥付となる PDF ファイルを指定する」(p.162) を参照してください。
またこうして読み込んだ PDF ファイルにも、ノンブルがつきます。以前は⼤扉や奥付の PDF ファイルを読み込む機能がなかったため、最初にノンブルなしの印刷⽤– 216 –

6.9 ⼤扉▲ 図 6.10: Keynote で作成した⼤扉の例

PDF を⽣成し、⼤扉や奥付を差し替えてから、最後にノンブルをつける必要がありました。今は印刷⽤ PDF ⽣成時に⼤扉や奥付の PDF ファイルを読み込めるので、最初からノンブルつきで印刷⽤ PDF が⽣成できます。
このように、別ソフトで作成さた⼤扉を取り込む機能が Starter では整っています。積極的に別ソフトで作っていきましょう。なお印刷所へ⼊稿するなら、⼤扉に背景⾊をつける場合は塗り⾜し*9 もつけましょう。「塗り⾜し」が分からなければ、⼤扉の背景⾊を⽩にしておくと⼊稿時のトラブルが少なくなります。

..................................................
⼤扉を Keynote や Pages で作成する
Keynote.app で⼤扉を作成しようとすると、困ったことに Keynote.app にはスライドのサイズを A5 や B5 にする機能がありません。かわりにスライドを
次のようなカスタムサイズにすると、ちょうど A5 や B5 のサイズになります。

• A5 の場合：419pt x 595pt• B5 の場合：516pt x 728pt
また Pages.app なら簡単に A5 や B5 にできます。B5 にしたい場合は「JISB5」を選んでください。
*9 塗り⾜しについては「♣ [PDF] 塗り⾜しをつける」(p.146) を参照してください。

– 217 –

第 6 章 よりよい本づくり..................................................

6.10

奥付

♣ 奥付は最後のページに置く
紙の本は必ず偶数ページになります。たとえば、ページ数が 100 ページの本はあっても 101 ページの本はありません。そのため、本の最終ページも偶数ページになります。
そして奥付は、本の最後のページに置きます。⾔い換えると、奥付は本の最後の偶数ページに置かれるはずです。しかし、このことが考慮されていない同⼈誌がたまにあります。
実は素の Re:VIEW ではこれが考慮されておらず、奥付が奇数ページに置かれることがあります*10 。Starter ではこのようなことはありません。奥付は必ず最後の偶数
ページに置かれます。気が利いてますね。

♣ 奥付に更新履歴とイベント名を記載する
⼀般的に、奥付には本の更新履歴が記載されます。
同⼈誌ならそれに加えて、初出のイベント名も記載するといいでしょう。そうすると、どのイベントで⼿に⼊れたかが分かりやすくなります*11 。

♣ 利⽤した素材の作者と URL を奥付に記載する本の作成に使⽤した素材があれば、作者名と URL を奥付に記載するといいでしょう。
たとえば表紙に写真やイラストを使ったのであれば、その作者と素材への URL を奥付に記載しましょう。

♣ 利⽤したソフトウェアを奥付に記載する本や同⼈誌をどんなソフトウェアで作ったかを奥付に記載すると、他の⼈の参考になります。

*10 TechBooster のテンプレートでは偶数ページに置かれるように修正されています。
*11 少なくとも新刊はこれが当てはまります。既刊だと当てはまりませんが、初出のイベント名が分かるだけでも読者の助けになります。

– 218 –

6.11 textlint による⽂章チェック

たとえば「InDesign で作った」「MS Word 2016 で作った」「Pages 10.0 で作った」「Vivliostyle で作った」という情報があると、これから本や同⼈誌を作ろうとする⼈にとって⼤きな⼿がかりとなります。
またエディタに強いこだわりがある⼈なら「VS Code で執筆した」「Vim で執筆した」のようにアピールするのもいいでしょう。

6.11

textlint による⽂章チェック

この章では、「textlint」というツールを使って⽂章をチェックする⽅法を紹介します。

♣ textlint とは「textlint*12 」とは、⽇本語の⽂章をチェックして改善点を指摘してくれるツールです。
たとえば、次のような内容のファイルがあるとします。ファイル名の拡張⼦は「.rd」
ではなく「.md」であることに注意してください。
▼ sample1.md：改善前
Re:VIEW Starterを使うと 、きれいなPDFファイルを作成することができます 。

これを textlint でチェックすると、「もっと簡潔に書けるよ」と指摘してくれます（textlint のインストールについてはあとで説明します）。

$ textlint sample1.md/Users/yourname/sample1.md
1:35 ✓ error 【 dict2 】 "することができます"は冗⻑な表現です 。"するこ››とが"を省き簡潔な表現にすると⽂章が明瞭になります 。
解説: https://github.com/textlint-ja/textlint-rule-ja-no-redundant-expressi››on#dict2 ja-technical-writing/ja-no-redundant-expression
1 problem (1 error, 0 warnings)✓ 1 fixable problem.

Try to run: $ textlint --fix [file]*12 https://github.com/textlint/textlint– 219 –

第 6 章 よりよい本づくり指摘された通りに改善してみましょう。
▼ sample1.md：改善後
Re:VIEW Starterを使うと 、きれいなPDFファイルを作成することができます 。

これを textlint でチェックすると、指摘されなくなりました。

$ textlint sample1.md←何もエラーが出ない

もう 1 つ、別の例を⾒てみましょう。たとえば次のような⽂章があるとします。
▼ sample2.md：改善前
ノンブルは 、印刷所に⼊稿するときに必要です 。
⼀⾒すると問題がない⽂章ですが、textlint でチェックすると「1 つの⽂に複数個の『に』があるよ」と指摘してくれます。

$ textlint sample2.md/Users/yourname/sample1.md
1:17 error ⼀⽂に⼆回以上利⽤されている助詞 "に" がみつかりました 。 ››japanese/no-doubled-joshi
1 problem (1 error, 0 warnings)

指摘されたことを改善してみましょう。
▼ sample2.md：改善後
ノンブルは 、印刷所にへ⼊稿するときに必要です 。
改善後は、指摘されなくなりました。

$ textlint sample2.md←何もエラーが出ない

このように、textlint を使うと⽇本語⽂章の改善できそうな点が分かります。とはいえ、textlint も万能ではありません。次の項で注意点を説明します。

♣ textlint の注意点
textlint は似たような⽂章であっても、改善点を指摘してくれないことがあります。
・ ・ ・ ・

たとえば先ほどの 1 番⽬の例である「作成することができます」だと改善点を指摘し– 220 –

6.11 textlint による⽂章チェック・・てくれますが、「作ることができます」だと指摘してくれません。前者が「作成できます」に改善できたように、後者も「作れます」に改善できます。
また textlint は「どこが改善できるか」を教えてくれますが、「どう改善できるか」は必ずしも教えてくれません。先ほどの 2 番⽬の例がまさにそれで、『に』が複数あることは教えてくれますが、どう直せばいいかは⾃分で考える必要があります。
さらに textlint の指摘がいつも正しいわけではありません。たとえば「⾎も涙もない。」という⽂章を textlint でチェックすると、「1 つの⽂章に複数個の『も』があるよ」と指摘されます。しかしこの指摘がおかしいことは、明らかでしょう。
▼ sample3.md：修正前
⾎も涙もない 。

$ textlint sample3.md/Users/yourname/sample3.md
1:4 error ⼀⽂に⼆回以上利⽤されている助詞 "も" がみつかりました 。 j››apanese/no-doubled-joshi
1 problem (1 error, 0 warnings)『も』が複数個現れないように修正できますが、これはさすがにやりすぎです。しないほうがいいでしょう。
▼ sample3.md：修正後
⾎も涙もない 。
⾎と涙のどちらも⽋いている 。

$ textlint sample3.md←何もエラーが出ない

このような過剰な指摘が起きたのは、Starter がデフォルトで⽤意した textlint ⽤の設定が、技術⽂章向けだからです。textlint は、事前に設定されたルールに従って⽂章をチェックするツールです。設定されたルールが⼩説向けであれば⼩説向けのチェックをし、技術⽂章向けであれば技術⽂章向けのチェックをします。

textlint の設定は、プロジェクトフォルダの直下にある「.textlintrc」というファイルで変更できます。たとえば次のように変更すると、複数の『も』が登場してもエラーにならなくなります。

– 221 –

第 6 章 よりよい本づくり▼ .textlintrc{"filters": {}, "rules": {"preset-japanese": false, "preset-ja-technical-writing": true, "preset-ja-technical-writing": {"no-doubled-joshi": {"allow": ["も"]}}, "preset-jtf-style": false, "preset-ja-spacing": false, "preset-ja-engineering-paper": false}「.textlintrc」についてこれ以上の解説はしません。詳しく知りたい⼈は「textlint
使い⽅」で Google 検索してください。
ここまでが、textlint についての⼀般的な説明でした。次の項から、Starter で
textlint を使う⽅法を説明します。

♣ Starter のプロジェクトで textlint を使う
Starter のプロジェクトで textlint を使うには、次のようにします。
(1) Node.js と npm コマンドをインストールする。
(2) textlint をインストールする。
(3) textlint で原稿をチェックする。
(1) と (2) は準備なので、プロジェクトごとに⼀度だけ⾏います。
それぞれ順番に説明します。

(1) Node.js と npm コマンドをインストール
textlint を実⾏するには、Node.js*13 と npm コマンドをインストールする必要があります。

• Docker を使っている場合は、Docker イメージの中に Node.js と npm コマン
ドがインストール済みなので、何もする必要がありません。

• Docker を 使 っ て い な い 場 合 は 、https://nodejs.org/に ア ク セ ス し て*13 https://nodejs.org/– 222 –

6.11 textlint による⽂章チェック

Node.js をインストールしてください。npm コマンドも⾃動的にインストー
ルされます。

..................................................
Node.js のバージョンについて
インストールする Node.js のバージョンは、「LTS」と書かれたほうを選ぶといいでしょう。Current」と書かれたほうのバージョンでも動作しますが、こちらは上級者向けです。

..................................................
(2) textlint をインストール
次に、textlint とその関連ライブラリをインストールします。Starter ではそのための Rake タスクが⽤意されているので、次のコマンドを実⾏してください。
▼ textlint と関連ライブラリをインストール$ rake textlint:setup← Dockerを使わない場合$ rake docker:textlint:setup ← Dockerを使う場合
これで textlint のインストールは完了しました。

(3) textlint で原稿をチェック
textlint を使って原稿の⽂章をチェックするには、「rake textlint」（または「rake docker:textlint」）を実⾏してください。
▼ textlint で原稿の⽂章をチェックする（結果は省略）$ rake textlint← Dockerを使わない場合$ rake docker:textlint ← Dockerを使う場合
たくさんのエラーが出るので驚くでしょう。指摘された点のすべてを修正する必要はありません。⾃分で納得できたことだけを修正すればいいです。
ただし出⼒結果を⾒ると、ファイル名と⾏番号が原稿とは違うことに気づくはずです。この理由を次の項で説明します。

♣ Starter における textlint 実⾏の仕組み
textlint は、Starter の原稿ファイル (*.re) には対応していません。そこで Starter
では、次のような仕組みで textlint を実⾏します。

(1) 原稿ファイル (*.re) を Markdown 形式のファイル (*.md) に変換する。
(2) Markdown 形式のファイルを textlint でチェックする。
– 223 –

第 6 章 よりよい本づくり

このような仕組みのため、textlint が報告するのは Markdown 形式のファイルにおける⾏番号であり、原稿ファイルの⾏番号ではありません。よって textlint の指摘事項を反映するには、出⼒された⾏番号をもとに Markdown ファイルを⾒て指摘内容を確認し、原稿ファイルに戻って修正するという⼿順になります。
これは理想的とは⾔い難いです。解決⽅法は 3 つ考えられます。

(A) textlint を改造して、Starter の原稿ファイルを直接読んで解釈できるようにする。

(B) 原稿ファイルと Markdown ファイルの⾏番号が⼀致するように変換する。
(C) 原稿ファイルと Markdown ファイルとの⾏番号のマッピングデータを⽣成し、それを利⽤して textlint の出⼒結果に含まれる⾏番号を Markdown ファイルの⾏番号から原稿ファイルの⾏番号に書き換える。
どれも⼿間のかかる作業になるので、将来も含めて対応はあまり期待しないでください。
もしもっといい⽅法を思いついた⼈がいたら、ぜひ教えてくださるようお願いします。

..................................................
Markdown への変換は精度がよくない
Starter における Markdown 形式への変換機能は textlint で使うために実装したので、「textlint で使えればそれでいい」という割り切りをしています。そのため、Markdown 形式への変換は精度があまりよくありません。
「こう改善してほしい」と具体的に提案していただければ対応しますが、そも
そもあまり⼒を⼊れた機能ではないことをご了承ください。

..................................................

– 224 –

付録

A

Re:VIEW との差分

Starter における機能追加や修正の⼀覧です。

まとめ記事

A.1

こちらの記事も参照してください。

•『技術系同⼈誌を書く⼈の味⽅「Re:VIEW Starter」の紹介』(Qitta)
https://qiita.com/kauplan/items/d01e6e39a05be0b908a1•『Re:VIEW Starter の新機能（2019 年夏）』(Qiita)
https://qiita.com/kauplan/items/dd8dd0f4a6e0eb539a98•『Re:VIEW Starter の新機能（2019 年冬）』(Qitta)
https://qiita.com/kauplan/items/e36edd7900498e231aaf

プロジェクト作成

A.2• Starter では、Web サイトにおいて GUI でプロジェクトの作成と初期設定ができます。このおかげで、初⼼者でもつまづかずにプロジェクトを始められます。

Re:VIEW ではプロジェクトの作成はコマンドラインでしか⾏えず、また初期設定を⾃分で⾏う必要があるので、初⼼者にはかなりハードルが⾼いです。

• Starter では、ダウンロードしたプロジェクトに⽂章のサンプルが含まれてい– 225 –

付録 A Re:VIEW との差分ます。そのおかげで、どのように原稿を書けばいいのかが分かります。

Re:VIEW では、作成したプロジェクトの中⾝はほとんど空であり、サンプルとしては役に⽴ちません。

A.3

コメント

• Starter では、範囲コメントが使えます。
Re:VIEW では、⾏コメントしか使えません。
• Starter では、⾏コメントは単に読み⾶ばされます。
Re:VIEW では、⾏コメントが空⾏扱いになるため、⾏コメントを使うと意図せず段落が区切られます。これは明らかに Re:VIEW の仕様バグですが、
Re:VIEW 開発チームはこのバグを認めていません。

A.4

箇条書き

• Starter では、順序つきリスト（HTML でいうところの「<ol>」）の項⽬に、「1.」や「(a)」や「(A-1)」など任意の⽂字列が使えます。
Re:VIEW では「1.」しか使えません。
• Starter では、順序つきリストを⼊れ⼦にできます。
Re:VIEW ではできません。
• Starter では、順序つきリストと順序なしリストを相互に⼊れ⼦にできます。
Re:VIEW ではできません。
• Re:VIEW では、箇条書きの項⽬が複数⾏のテキストだと、⾃動的に 1 ⾏に連結されます。そのせいで、本来なら「aaa」と「bbb」と「ccc」の 3 ⾏に分かれていた単語が、「aaabbbccc」のように勝⼿に連結されてしまいます。

Starter ではこのようなおかしなバグは起こりません。

A.5

定義リスト

• Re:VIEW では、定義リストの説明⽂が複数⾏だと、⾃動的に 1 ⾏に連結されます。そのせいで、本来なら「aaa」と「bbb」と「ccc」の 3 ⾏に分かれていた単語が、「aaabbbccc」のように勝⼿に連結されてしまいます。

– 226 –

A.6 ⾒出し（章、節、項、⽬）Starter ではこのようなおかしなバグは起こりません。
• Starter では、定義リストの説明⽂に箇条書きが書けます。
Re:VIEW では書けません。
• Starter では、定義リストとよく似た「説明リスト」が⽤意されています。説
明リストは⼊れ⼦のブロック命令で書くので、説明⽂の中にたとえばプログラ
ムコードを⼊れられます。またブロック命令にオプション引数を指定すると、太字にする・しないや、コンパクトモードにする・しないが選べます。

A.6

⾒出し（章、節、項、⽬）• Starter では、章や節のタイトルを⾒栄えのいいデザインにしています。また
設定ファイルを変更することで、デザインを選択できます。

Re:VIEW では LATEX のデフォルトのデザインを使っているだけです。
• Starter では、章 (Chapter) ごとにタイトルページを作成できます。これは商業誌では⼀般的なスタイルです。

• Starter では、節 (Section) ごとに改ページできます。これは初⼼者向け⼊⾨書ではよく⾒かけるレイアウトです。

• Starter では、章や節を参照するとページ番号もつきます。これは特に、項(Subsection) に番号をつけない設定において、項を参照するときに有⽤です。

A.7

インライン命令• Starter では、たとえば「@<code>{foo@<b>{bar}}」のようにインライン命
令を⼊れ⼦にできます。

Re:VIEW ではできません。
• Starter では、「@<strong>{}」が太字かつゴシック体になります。なぜなら⽇本語の⽂章では、強調は太字にするだけでなくゴシック体にすることが望ましいからです。

Re:VIEW では、「@<strong>{}」は太字になるだけです。
• Starter では、「@<strong>{}」の省略形として「@<B>{}」を⽤意しています。
これにより、⽂章の強調が簡単にできます。

Re:VIEW には、「@<B>{}」はありません。
• Starter では、何もしない命令「@<nop>{}」があります。これを使うと、たとえ– 227 –

付録 A Re:VIEW との差分ば「@@<nop>{}<B>{}」とすれば「@<B>{}」と表⽰されます。これは Re:VIEWを使って Re:VIEW のマニュアルを作るときに重宝します。

Re:VIEW にはこのようなコマンドはありません。
• Re:VIEW では、たとえば「@<code>{a: b? c! d. e}」と⼊⼒すると、「{a:b? c! d. e}」のように半⾓空⽩が 2 つ分出⼒されます。このような意図しない出⼒になるのは、LATEX におけるスペーシングの仕様をそのまま引き継いでいるからです。

Starter ではこの現象を回避しており、等幅フォントでも半⾓空⽩が 2 つ分出
⼒されないように修正しています。

• Starter では、ファイル名を表すインライン命令「@<file>{}」が⽤意されています。

• Starter で は 、⽂ 字 サ イ ズ を 変 更 す る イ ン ラ イ ン 命 令「@<small>{}」「@<xsmall>{}」「@<xxsmall>{}」「@<large>{}」「@<xlargel>{}」「@<xxlarge>{}」が⽤意されています。

• Starter で は 、「LATEX」を 表 ⽰ す る「@<LaTeX>{}」、「TEX」を 表 ⽰ す る「@<TeX>{}」、「♡」を表⽰する「@<hearts>{}」が⽤意されています。
• Starter では、リンクの URL を⾃動的に脚注に表⽰する機能があります。これは、紙の本ではリンクの URL が表⽰されない問題に対する解決策です。

ブロック命令A.8• Starter では、ブロック命令を⼊れ⼦にできます。たとえば「//note{ ...
//}」の中に「//list{ .. //}」や「//quote{ ... //}」を⼊れられます。

• Starter では、章の概要を表す「//abstract」が⽤意されています。
Re:VIEW にはありませんが、かわりにリード⽂を表す「//lead」が使えます。

• Starter では、縦⽅向の空きを⼊れる「//vspace」が⽤意されています。マイナスの値を指定すれば、余分な空きを削除できます。

• Starter では、縦⽅向のスペースを確保する「//needvspace」が⽤意されています。
たとえばプログラムのキャプションだけが現在のページ、プログラムコー
ドは次のページに表⽰されてしまったとします。このとき「//list」の前に「//needvspace[6zw]」と書くと、全⾓ 6 ⽂字分の⾼さのスペースがなけれ・ば⾃動的に改ページされます（つまりプログラムのキャプションの前で改ペー– 228 –

A.9 プログラムコードジされる）。結果として、プログラムのキャプションとコードが同じページに表⽰されます。

A.9

プログラムコード• Starter では、「1」と「l」、「0」と「O」の⾒分けがつきやすいフォントを選んでいます。

Re:VIEW では LATEX のデフォルトを使っているので、これらの⾒分けがつきにくいです。

• プログラムコードを表⽰するとき、Starter では 1 つのブロック命令「//list」
だけで済みます。

Re:VIEW では「//list」「//emlist」「//listnum」「//emlistnum」の4 つを使い分ける必要があります。
• Starter では、⻑すぎる⾏を⾃動的に右端で折り返します。また折り返したことが分かるような記号をつけてくれます。

Re:VIEW にはこのような気の利いた機能がありません。
• Starter では、「@<del>{}」で取り消し線を引いた⾏でも右端で折り返しされます。Starter ではこのような細かいところに配慮が⾏き届いています。
• Starter では、⾏番号は⽬⽴たないようにグレーで表⽰します。
Re:VIEW にはこのような気の利いた機能がありません。
• Starter では、⾏番号を欄外に表⽰できます。これにより、⾏番号の分だけコードの表⽰範囲が狭まってしまうのを防げます。

• Starter では、⾶び⾶びの⾏番号を指定できます。
Re:VIEW では連続した⾏番号しか表⽰できません。
• Starter では、インデントを可視化できます。この機能は、Python のようなインデントで⼊れ⼦を表現するプログラミング⾔語では重要です。

• Starter では、ラベルさえ指定されていればキャプションがなくても番号つきで表⽰されます。

Re:VIEW では、「//list[fib1]」のようにラベルを指定していても、キャプションがなければ番号がつきません。ラベルの⽬的を考えれば、これはRe:VIEW の仕様バグです。
• Starter では、「//list[?]」のようにすると簡単に番号付きで表⽰されます。
Re:VIEW にはこの機能がないので、番号つきで表⽰するには重複しないラベルを指定する必要があり、数が多いとかなり⾯倒です。

– 229 –

付録 A Re:VIEW との差分

• Starter では、プログラムコードのフォントサイズを変更できます。「あるプログラムコードだけフォントサイズを⼩さくする」といったことが簡単にできます。

• Starter では、コード中の注釈を表す「@<balloon>{}」がグレー表⽰されます。これは注釈がコードより⽬⽴たないようにという配慮です。

Re:VIEW にはこのような配慮はありません。
• プログラム中にタブ⽂字がある場合、Re:VIEW では空⽩⽂字に展開されます。しかしこれが「LATEX コードに変換してからタブ⽂字を展開する」という仕様のため、表⽰が崩れます。

Starter ではタブ⽂字を展開してから LATEX コードに変換する」ため、表⽰が崩れません（ただし限界はあります）。

• Starter では、全⾓⽂字の幅を半⾓⽂字 2 つ分に揃えて表⽰する機能があります。全⾓と半⾓が混在しているせいで表⽰が揃わない（崩れてしまう）場合に使うと⼤変便利です。

• Starter で は 、プ ロ グ ラ ム コ ー ド と は 別 に 出 ⼒ 結 果 を 表 ⽰ す る た め の「//output」があります。プログラムコードと出⼒結果では⾒た⽬を変えて表⽰したい場合に便利です。

• Re:VIEW では、プログラムコードをハイライト表⽰する機能があります。
Starter ではまだ未サポートです。

A.10

ターミナル画⾯• Starter では、ターミナル画⾯を表すコマンド命令「//terminal」を⽤意しています。これは使い⽅が「//list」と同じなので、覚えやすいです。

Re:VIEW で⽤意しているブロック命令「//cmd」は、「//list」と使い⽅が違っているので覚えにくいです。

• Starter の「//terminal」はほぼ「//list」と同じなので、折返しや⾏番号など「//list」と同じ機能が「//terminal」でも使えます。

Re:VIEW の「//cmd」はそうではないので、機能が貧弱です。
• Starter では、ユーザ⼊⼒を表すインライン命令「@<userinput>{}」があります。これを使うと、ユーザ⼊⼒部分に薄い下線が引かれます。ただし LATEXの制限により、⻑い⾏が右端で折り返しされません。

• Starter では、カーソルを表すインライン命令「@<cursor>{}」が⽤意されています。Vim の操作画⾯を説明するときに便利です。

– 230 –

A.11 ノート、ミニブロック

A.11

ノート、ミニブロック• Starter では、ノートを表すブロック命令「//note」を上書きし、⾒栄えのいい表⽰にしています。

Re:VIEW ではノートの⾒栄えは気にされていません。
• Starter では、ノートの中に箇条書きや他のブロック命令を⼊れられます。
• Starter では、ノートの中で脚注が使えます。
• Starter では、ノートの中に書いたプログラムコードやターミナル画⾯が、ページまたぎできます。

• Starter では、ノートにラベルをつけてあとから参照できます。これはちょう
ど、図や表を参照するのと同じような機能です。

• Starter では、補⾜情報を表す「//info」と注意喚起を表す「//caution」と警告を表す「//warning」にアイコンがつきます。

A.12

図

• Re:VIEW では、たとえば「//image[][][scale=0.5]」のようなオプションを指定すると、画像が本⽂幅の半分の⼤きさで表⽰されます。しかしこれは画像の幅が本⽂幅より⼤きい場合だけであり、画像の幅が本⽂幅より⼩さい場
合は画像幅の半分の⼤きさで表⽰されます。そのため、画像の幅が本⽂幅より⼤きいかどうかを気にする必要があり、⾯倒です。

Starter では「//image[][][width=50%]」のように指定すると、画像の幅が本⽂幅より⼤きいかどうかに関係なく、常に本⽂幅の半分の⼤きさで画像が表⽰されます。

• Starter では「//image[][][width=40mm]」のように、画像の表⽰幅を絶対値で指定できます。つまり画像の表⽰幅を本⽂の幅とは関係なく指定できます。

• 画像の幅が本⽂幅より⼩さい場合、表⽰幅を指定せずに画像を表⽰すると、
Re:VIEW では PDF ならそのままの⼤きさで表⽰されるのに、HTML では本
⽂幅いっぱいの⼤きさで表⽰されてしまいます。

Starter では、PDF と HTML のどちらでもそのままの⼤きさで画像が表⽰されます。

• Starter では、画像の挿⼊位置を指定できます（現在位置、ページ上部、ページ下部、別ページ）。

• Starter では、図のまわりをグレーの線で囲む機能があります。画像のふちが– 231 –

付録 A Re:VIEW との差分

⽩い場合はこの機能を使うと、画像の境界を明⽰できます。

• 画像が次のページに送られたとき、Starter では後続のテキストを現在位置に流し込まれます。

Re:VIEW では後続のテキストが現在位置に流し込まれないので、現在位置に⼤きなスペースが空きます。

•「//indepimage」の第 2 引数に説明⽂字列を指定した場合、Re:VIEW では「図：」という接頭辞がつきます。しかし「//indepimage」の使⽤⽤途を考えたとき、この接頭辞は邪魔なので、Starter ではつけません。もし必要なら⾃⼒で「図：」を⼊れてください。

• Starter では、「//sideimage」を使うと画像の横にテキストを表⽰できます。

A.13

表

• Starter では、表の挿⼊位置を指定できます（現在位置、ページ上部、ページ
下部、別ページ）。

• Starter では、表のデータを CSV 形式で指定できます。
• Starter では、表のデータを外部ファイルから読み込めます。
• Starter では、⾏ごとの罫線をオン・オフできます。また⾏ごとの罫線をオフにしたうえで、指定箇所だけ罫線を引くよう指定できます。

• Starter では、「//table[label][]」のようにラベルだけ指定してキャプショ
ンがない場合でも、「表 1.1」のような番号がつきます。
Re:VIEW では、ラベルが指定されてあってもキャプションがなければ番号が表⽰されません。

• Starter では、「//table[?][]」のように指定すると内部でラベルを⾃動的に割り当ててくれます。そのおかげで、表を番号つきで表⽰するのが簡単です。

Re:VIEW ではこのような機能がないので、番号つきで表⽰するには重複しないラベルを必ず指定する必要があり、⾯倒です。

• 表 の カ ラ ム の 右 寄 せ や 左 寄 せ を 指 定 す る「//tsize」を 、Starter で は「//tsize[latex][|lcr|]」のように指定できます。

Re:VIEW では「//tsize[|latex||lcr|]」のように指定するため、読みづらいし分かりにくいです。

• Re:VIEW には、項⽬の区切り⽂字を変更できる機能があります。
Starter では未サポートです。

– 232 –

A.14 会話形式

A.14

会話形式

• Starter では、アイコン画像つきの会話形式を⽤意しています。
• Starter では、アイコン画像なしの会話形式も⽤意しています。
• Starter では、⼤量の会話形式を⼊⼒するときに便利なように、短縮名を登録して短く書ける機能を⽤意しています。

A.15

⽤語、索引

• Starter には、⽤語を表す「@<term>{}」インライン命令があります。これは「@<idx>{}」と似ていますが、⽤語をゴシック体で表⽰する点が違います。⽤語が初めて登場したときは「@<term>{}」、再登場した場合は「@<idx>{}」を使うことを想定しています。

• Starter では、「@<idx>{}」や「@<term>{}」の中によみがなを指定できます。
• Starter では、親⼦関係と表⽰順序が逆転している場合にも「~~~」を使えば対応できます。

• Starter では、索引ページにおいて⽤語の転送先となる別の⽤語を指定できます。

• Re:VIEW の索引ページは、LATEX のデフォルトデザインのままです。Starter
では、⽤語とページ番号の間を連続したドットで埋めたり、⽤語のグループ化
を⽂字単位から⾏単位に変更しています。

A.16

表紙、⼤扉、奥付• Starter では、表紙と裏表紙は PDF ファイルで指定します。
Re:VIEW では、表紙は画像ファイル（PNG や JPG）で指定します。
• 本のタイトルが⻑い場合、Starter ではタイトルを複数⾏で指定すれば、改⾏位置を指定できます。このおかげで、⼤扉では⻑いタイトルがきれいに改⾏されて表⽰されます。

Re:VIEW ではこのような機能はありません。
• Starter では、⼤扉の裏に免責事項などが書かれています。これは商業誌では⼀般的ですが、同⼈誌では⼊れ忘れることがほとんどなので、あらかじめ– 233 –

付録 A Re:VIEW との差分

Starter が⽤意しています。
• Starter では、奥付が必ず偶数ページ（⾒開きで左側のページ）になるよう調整します。

Re:VIEW ではこのような機能はありません*1 。

PDF ファイル

A.17• Starter では、印刷⽤ PDF では⽩黒に、電⼦⽤ PDF ではカラーにしてくれます。

Re:VIEW ではこのような機能はありません。
• Starter では、印刷⽤ PDF では左右の余⽩幅を切り替えています。これは本⽂幅を広げるための⼯夫であり、商業誌でも⼀般的です。

Re:VIEW ではこのような⼯夫はされていません。
• Re:VIEW では、印刷⽤ PDF にはハイパーリンクがつかないようになっています。これは⼊稿時のトラブルをできるだけ減らすための仕様です。
しかし LATEX ではハイパーリンクのある・なしで組版結果が変わることがあります（hyperref.sty の仕様）。また最近の印刷所では、ハイパーリンクがついた PDF でも⼊稿でトラブルになることはなさそうです。そこで Starter
では、印刷⽤ PDF でもハイパーリンクを残したままにしています。
• Re:VIEW では、デフォルトで PDF にトンボがつきます。しかしこれは⼊稿に慣れてないとトラブルのもとです。⼊稿先が同⼈誌向けの印刷会社なら、トンボなしのほうが⼊稿トラブルは少ないです。
そのため、Starter ではトンボはつけません。

• Re:VIEW と Starter のどちらとも、印刷⽤ PDF には隠しノンブル（通し番号）がつきます。ただし実装⽅法は Re:VIEW と Starter とで全く別です。また Starter では、ノンブルの位置や⼤きさや⾊や開始番号を設定ファイルで変更できます。

• 印刷⽤ PDF に⾃動でノンブルがつくのは、PDF の作成が Re:VIEW だけで完結している場合は便利ですが、たとえば⼤扉を別ソフトで作るような場合は逆に不便です。
そこで Starter では、PDF を⽣成したあとに隠しノンブルをつける Rake
タスク「rake pdf:nombre」も⽤意しています。これだと、⼤扉だけを別ソフトで作るような場合にも対応できます。
*1 TechBooster のテンプレートでは、Starter と同じように奥付が偶数ページになります。

– 234 –

A.18 LATEX 関連• Starter では、PDF ファイルにノンブルをつける別のサービス*2 も⽤意しています。

• Starter では、PDF のテキストをマウスで選択したときに、⾏番号や折り返し
記号やインデント記号を選択対象にしない機能が⽤意されています。ただしこの機能はコンパイル時間を⼤きく増やしてしまうので、デフォルトではオフ
です。

A.18

LATEX 関連

• Re:VIEW では、LuaLaTeX と jlreq.cls を積極的に利⽤しており、採⽤実績も多いです。

Starter では、今のところ LuaLaTeX と jlreq には対応していません。今後の課題です。

• Re:VIEW そのものではありませんが、Techbooster の Re:VIEW テンプレー
トでは tcolorbox を全⾯的に採⽤しており、そのおかげでたとえば⾓丸のブロックを実現できています。
ただし tcolorbox を使うとコンパイル時間がかかるようになるので、Starter
では使わないようにしています。tcolorbox を使うと⾒栄えのいいデザインができることは確かなので、今後どうするかは検討中です。

• Starter では、環境変数「$STARTER_CHAPTER」を設定することで、特定の章だけをコンパイルできます。こうすると全部の章をコンパイルするよりずっと短い時間でコンパイルできるので、表⽰の確認が迅速にできます。

Re:VIEW にはこのような機能はありません。
• Starter では、LATEX のコンパイル回数を減らす⼯夫をしています。⽂章を少しだけ変更して再度コンパイルすると、Starter ではコンパイル回数がたいて
い 1 回だけで済みます。
Re:VIEW ではいつも 3 回コンパイルされるので、PDF ⽣成に時間がかかります。

• Re:VIEW では、PDF ファイルを⽣成する「review-pdfmaker」コマンド
や、ePub ファイルを⽣成する「review-epubmaker」コマンドが⽤意されています。

Re:VIEW ではこれらは使えません。必ず「rake pdf」や「rake epub」
を使ってください。
*2 https://kauplan.org/pdfoperation/– 235 –

付録 A Re:VIEW との差分•「rake pdf」や「rake web」を実⾏すると、Starter ではコンパイルが必ず実⾏されます。

Re:VIEW ではファイルが更新されていなければコンパイルされません。これは⼀⾒便利そうですが、LATEX のスタイルファイルを変更しただけではコンパイルされないため、トラブルのもとになります。

• Starter では、設定ファイル「config-starter.yml」の内容を LATEX のスタイル
ファイルから参照できます。設定によって挙動を変えたい場合に便利です。
• Starter では、名前が「STARTER_」で始まる環境変数の値を LATEX のスタイ
ルファイルから参照できます。環境変数によって挙動を変えたい場合に便利です。

• Starter では表⽰を簡潔にするため、LATEX コンパイル時の出⼒を捨てています。コンパイルエラーがあった場合は、出⼒を捨てないようにコマンドオプ
ションを変更してからもう⼀度コンパイルすることで、エラーメッセージを表⽰しています。

Re:VIEW でも出⼒は捨てていますが、コンパイルエラーがあった場合はコンパイル時のログファイルを表⽰しています。しかしこの⽅法だとエラメッ
セージが少し上のほうに流れてしまうので、LATEX に慣れていない⼈だとエラーメッセージを⾒逃してしまいます。

• PDF ファイルを⽣成するとき、Starter ではもとの PDF ファイルを削除せずに上書きする（つまり inode が変わらない）ようにしています。このおかげ
で、macOS の open コマンドで PDF ファイルを開くと、同じウィンドウのまま表⽰されます。
これに対し、Re:VIEW ではもとの PDF ファイルを消してから新しいファイルを作成します（つまり inode が変わる）。そのせいで、macOS の open コ
マンドで PDF ファイルを開くと毎回新しいウィンドウで表⽰されてしまい、
いちいち前のウィンドウを閉じる必要があるので⾯倒です。

• Starter では、LATEX のコンパイル時間を表⽰します。以前は「/usr/bin/time」
コマンドが必要でしたが、現在は必要としません。

A.19

エラメッセージ• Starter では、原稿ファイル（*.re）コンパイル時のエラーメッセージを⾚い字で表⽰します。初⼼者はエラーメッセージが出ても気づかないことが多いので、⾚く表⽰することで気づきやすいようにしました。

– 236 –

A.20 その他

• Starter では、原稿ファイル（*.re）のコンパイル時にエラーがあると、すぐにコンパイルをすぐに終了するようにしました。初⼼者にとっては、このほうがエラーに気づきやすいはずです。

Re:VIEW ではコンパイルエラーがあっても残りのコンパイルを続けるので、
エラーメッセージが流れてしまい、初⼼者はエラーに気づかない可能性が⾼い
です。

A.20

その他

• Re:VIEW では、プロジェクトが使っている Re:VIEW のバージョンをアッ
プデートする機能が⽤意されています。たとえば Re:VIEW 4 を使っているプロジェクトを Re:VIEW 5 へアップデートしたいときは、ターミナルで「review-update」コマンドを実⾏します。

Starter にはプロジェクトをアップデートする機能はありません。
• Starter では関連プロジェクトとして、PDF に隠しノンブルをつけるサービス「PDF Operation*3 」を提供しています。

*3 https://kauplan.org/pdfoperation/– 237 –

付録

B

ファイルとフォルダ

プロジェクトの zip ファイル（例：mybook.zip）を解凍してできるファイルとフォルダの解説です。

README.md
プロジェクトの説明が書かれたファイルです。ユーザが好きなように上書きすることを想定しています。

Rakefilerake コマンドが使⽤します。コマンドを追加する場合は、このファイルは変更せず、かわりに「lib/tasks/*.rake」を変更してください。

catalog.yml
原稿ファイルが順番に並べられたファイルです。原稿ファイルを追加した・削除した場合は、このファイルも編集します。

config-starter.yml
Starter 独 ⾃ の 設 定 フ ァ イ ル で す 。Starter で は 設 定 フ ァ イ ル と し て「cofnig.yml」と「cofnig-starter.yml」の両⽅を使います。
config.yml
Re:VIEW の設定ファイルです。Starter によりいくつか変更と拡張がされています。

contents/
原稿ファイルを置くフォルダです*1 。

contents/*.re
原稿ファイルです。章 (Chapter) ごとにファイルが分かれます。

*1 原稿ファイルを置くフォルダ名は「config.yml」の「contentdir: contents」で変更できます。

– 239 –

付録 B ファイルとフォルダ

css/HTML ファイルで使う CSS ファイルを置くフォルダです。ePub で使うのはこれではなくて style.css なので注意してください。
images/
画像ファイルを置くフォルダです。この下に章 (Chapter) ごとのサブフォル
ダを作ることもできます。

layouts/layout.epub.erb
原稿ファイルから ePub ファイルを⽣成するためのテンプレートです。
layouts/layout.html5.erb
原稿ファイルから HTML ファイルを⽣成するためのテンプレートです。
layouts/layout.tex.erb
原稿ファイルから LaTeX ファイルを⽣成するためのテンプレートです。
lib/hooks/beforetexcompile.rb
LaTeX ファイルをコンパイルする前に編集するスクリプトです。
lib/ruby/*.rb
Starter による Re:VIEW の拡張を⾏う Ruby スクリプトです。
lib/ruby/mytasks.rake
ユーザ独⾃の Rake コマンドを追加するためのファイルです。
lib/ruby/review.rake
Re:VIEW で⽤意されている Rake タスクのファイルです。Starter によって変更や拡張がされています。

lib/ruby/review.rake.orig
Starter によって変更や拡張がされる前の、オリジナルのタスクファイルです。
lib/ruby/starter.rake
Starter が追加した Rake タスクが定義されたファイルです。
locale.yml
国際化⽤のファイルです。たとえば「リスト 1.1」を「プログラム 1.1」に変更
したい場合は、このファイルを変更します。

mybook-epub/
ePub ファイルを⽣成するときの中間⽣成ファイルが置かれるフォルダです。
通常は気にする必要はありません。

mybook-pdf/
PDF ファイルを⽣成するときの中間⽣成ファイルが置かれるフォルダです。
LATEX ファイルをデバッグするときに必要となりますが、通常は気にする必要はありません。

– 240 –

mybook.epub
⽣成された ePub ファイルです。ファイル名はプロジェクトによって異なります。

mybook.pdf
⽣成された PDF ファイルです。ファイル名はプロジェクトによって異なります。

review-ext.rb
Re:VIEW を拡張するためのファイルです。このファイルから「lib/ruby/*.rb」
が読み込まれています。

sty/
LATEX で使うスタイルファイルが置かれるフォルダです。
sty/jumoline.sty
LATEX で使うスタイルファイルのひとつです。
sty/mycolophon.sty
奥付*2 の内容が書かれたスタイルファイルです。奥付を変更したい場合はこのファイルを編集します。

sty/mystyle.sty
ユーザが独⾃に LATEX マクロを定義・上書きするためのファイルです。中⾝は空であり、ユーザが⾃由に追加して構いません。

sty/mytextsize.sty
PDF における本⽂の⾼さと幅を定義したファイルです。LATEX では最初に本⽂の⾼さと幅を決める必要があるので、他のスタイルファイルから分離されてコンパイルの最初に読み込めるようになっています。

sty/mytitlepage.sty
⼤扉*3 の内容が書かれたスタイルファイルです。⼤扉のデザインを変更したい場合はこのファイルを編集します。

sty/starter.sty
Starter 独⾃のスタイルファイルです。ここに書かれた LATEX マクロを変更したい場合は、このファイルを変更するよりも「sty/mystyle.sty」に書いたほうがバージョンアップがしやすくなります。

sty/starter-codeblock.sty
プログラムコードやターミナルの LATEX マクロが定義されています。

*2 奥付とは、本のタイトルや著者や出版社や版や刷などの情報が書かれたページのことです。通常は本のいちばん最後のページに置かれます。
*3 ⼤扉とは、タイトルページのことです。表紙のことではありません。

– 241 –

付録 B ファイルとフォルダ

sty/starter-color.sty
⾊のカスタマイズ⽤です。

sty/starter-font.sty
フォントのカスタマイズ⽤です。

sty/starter-headline.sty
章 (Chapter) や節 (Section) や項 (Subsection) の LATEX マクロが定義されたファイルです。

sty/starter-note.sty
ノートブロックの LATEX マクロが定義されています。

sty/starter-section.sty
以前の、章や節の LATEX マクロ定義です。もはや使ってませんが、starter.sty
を書き換えれば使えます。

sty/starter-talklist.sty
会話形式の LATEX マクロが定義されています。
sty/starter-toc.sty
⽬次のカスタマイズ⽤です。

sty/starter-misc.sty
その他、各種のマクロ定義です。

sty/starter-util.sty
Starter のスタイルファイルで使われるマクロが定義されています。
style.css
ePub で使われる CSS スタイルファイルです。

– 242 –

付録

C

開発の背景

ここでは歴史の記録として、Re:VIEW Starter が開発された背景などを記しておきます。個⼈的な忘備録として残すものであり、読まなくても本や同⼈誌の制作にはまったく⽀障はありません。

開発の経緯
Re:VIEW は ver 2.4 の頃、「A5 サイズの PDF ファイルが⽣成できない」「フォントサイズも 10pt から変更できない」という致命的な問題を抱えていました。つまり
B5 サイズでフォントが 10pt の本しか作れなかったのです。
この頃はまだ、技術同⼈誌は B5 サイズ 10pt で作るのが主流だったので、Re:VIEWのこの制限はあまり問題にはなりませんでした。しかし同⼈誌印刷では B5 サイズより A5 サイズのほうが割安なので、⼀部の⼈が A5 サイズやより⼩さいフォントサイ
ズでの PDF ⽣成を模索し、そして Re:VIEW の制限に苦しみました。
たとえば、フォントサイズを⼩さくしようとして格闘し、結果としてあきらめた⼈の証⾔を⾒てみましょう*1 （図 C.1）。
この問題は、「geometry.sty」というスタイルファイルをオプションなしで読み込
んでいることが原因です*2 。具体的な修正⽅法は Qiita の記事*3 に書いています。読*1 https://www.slideshare.net/KazutoshiKashimoto/nagoya0927-releaseの p.21 とp.22。
*2 簡単に書いてますけど、原因が geometry.sty であることを突き⽌めるのには多くの時間がかかり、正⽉休みが潰れました。今でも恨んでます。この苦労を知らずに「Re:VIEW では昔から A5 のPDF が簡単に⽣成できた」と⾔い張る歴史修正者にはケツバットの刑を与えてやりたいくらいです。
*3 https://qiita.com/kauplan/items/01dee0249802711d30a6– 243 –

付録 C 開発の背景▲ 図 C.1: フォントやページサイズを変更できなかった⼈の証⾔

めば分かりますが、かなり⾯倒です。
この不具合はバグ報告したものの、開発陣の反応は芳しくなく、すぐには修正されなさそうでした*4 。当時は「技術書典」という同⼈イベントの開催が迫っていたので、これは困りました。仕⽅ないので Re:VIEW 側での修正に期待せず、誰でも簡単に A5 サイズの同⼈誌が作れるための別の⽅法を考えることにしました。
そうした経緯で誕⽣したのが、Re:VIEW Starter です。Starter では初期設定がGUI でできる簡単さが売りのひとつですが、もともとは A5 サイズ 9pt の同⼈誌を簡単に作れることが開発動機だったのです。

開発の転機
Starter は、当初は Re:VIEW との違いが⼤きくならないよう、GUI で設定した状態のプロジェクトをダウンロードできるだけに留めていました。つまりユーザが⼿作業で設定するのを、GUI で簡単に設定できるようにしただけでした。
しかし Re:VIEW は、ドキュメント作成ツールとしての基本機能が⾜りておらず、そのうえ開発速度が遅くて技術書典といったイベントには新機能追加が間に合いません。またバグ報告をしても「仕様だ」と回答されたり、互換性を理由に却下されたり（けど他の⼈が報告すると取り⼊れられたり）といったことが積み重なって、ある⽇を境に Starter で独⾃の機能を追加することを決⼼しました。

*4 実際、Re:VIEW Ver 2 の間は修正されず、修正されたのは Ver 3 になってからでした。当然、技術書典には間に合いませんでした。

– 244 –

そこからは少しずつ Re:VIEW の機能を上書きし、⾜りない機能を追加していきま
した。
現在の Starter では、Re:VIEW のソースコードを広範囲に上書きしています*5 。
特にパーサの⼤部分は Starter 側で上書きしています。このおかげで、インライン命令やブロック命令を⼊れ⼦対応にしたり、箇条書きの機能を⼤きく拡張したりできています。

Re:VIEW とのかい離はずいぶんと⼤きくなりました。

開発の障害
Starter を開発するうえで⼤きな障害になったのが、LATEX と、Re:VIEW のコー
ド品質です。
「LATEX」はフリーの組版ソフトウェアであり、Re:VIEW や Starter が PDF ファ
イルを⽣成するときに内部で使っています。LATEX は出⼒結果がとてもきれいです
が、使いこなすには相当な知識が必要です。
特に LATEX のデバッグは困難を極めます。エラーメッセージがろくに役⽴たない
せいでエラーを⾒ても原因が分からない、どう修正すればいいかも分からない、直ったとしてもなぜ直ったのか分からない、分からないことだらけです。この⽂章を読んでいる⼈にアドバイスできることがあるとすれば、「LATEX には関わるな！」です。
また Re:VIEW のコード品質の悪さも、⼤きな障害となりました。ソースコードを読んでも何を意図しているのか理解しづらい、コードの重複があちこちにある、パーサで⾏うべきことを Builder クラスで⾏っている、…など、基礎レベルでのリファク
タリングがされていません。信じたくはないでしょうが、同じような感想を持った⼈が他にもいたので紹介します。
https://np-complete.gitbook.io/c86-kancolle-api/atogaki:

っと上の⽂章を書いてから 2 時間ほど Re:VIEW のコードと格闘していたんですが、なんですかこのクソコードは・・・これはマジでちょっとビビるレベルのクソコードですよ。夏コミが無事に終わったら冬に向けて Re:VIEW にプルリク送りまくるしかないと思いました。
「クソコード」は⾔い過ぎですが、そう⾔いたくなる気持ちはとてもよく分かります。

*5 実は Re:VIEW のソースコードを広範囲に上書きしているせいで、ベースとなる Re:VIEW のバー

ジョンを 2.5 から上げられていません。しかし Re:VIEW の開発速度が遅く⽬ぼしい新機能は追加されてないので、デメリットはありません。

– 245 –

付録 C 開発の背景

また、パースしたあとに構⽂⽊を作っていないのは、Re:VIEW の重⼤な設計ミスといえるでしょう。Re:VIEW や Markdown のようなドキュメント作成ツールでは、
⼀般的に次のような設計にします。

1. パーサが⼊⼒テキストを解析して、構⽂⽊を作る。
2. 構⽂⽊をたどって必要な改変をする。
3. Visitor パターンを使って、構⽂⽊を HTML や LATEX のコードに変換する。
このような設計であれば、機能追加は容易です。特に HTML や LATEX のコードを・⽣成するより前にすべての⼊⼒テキストがパース済みなので、たとえ⼊⼒テキストの
・ ・

・

・

最後に書かれたコマンドであろうと、それを認識して先頭のコードを柔軟に変更できます。
しかし Re:VIEW は構⽂⽊を作らず、パースしながら HTML や LATEX のコードに変換するため、しなくてもいいはずのハックが必要となることがあります。

Starter は将来的に Re:VIEW のパーサをすべて上書きして、構⽂⽊を⽣成するタ
イプのパーサへ置き換えることになるでしょう。

開発⽅針の違い
Re:VIEW と Starter では、開発⽅針に⼤きな違いがあります。

♣ 開発速度Re:VIEW では、リリースが年 3 回と決まっています。またリリース時期も（過去を⾒る限り）2 ⽉末、6 ⽉末、10 ⽉末に固定されています。そのため「次の技術書典までにこの新機能が必要だ」と思っても、固定されたリリース時期にならないと新機
能はリリースされません。⾔い⽅を変えると、ユーザが必要とする開発速度について
これていません。

Starter は主に、技術書典をはじめとした同⼈イベントに合わせて新機能が開発されます。また 2〜3 週間ごとにリリースされるので、新機能の追加とバグ修正が急ピッチで進みます。つまり、ユーザが必要とする速度で開発されています。

♣ 機能選定Re:VIEW は商業誌での利⽤実績が多いこともあって、「⽇本語組版処理の要件*6 」への対応が重視されます。そのため jlreq クラスファイル*7 が標準でサポートされて*6 https://www.w3.org/TR/jlreq/ja/*7 https://github.com/abenori/jlreq– 246 –

おり、少なくない開発リソースがその対応に割かれています。そのせいか、「範囲コ
メントを実装する」「インライン命令やブロック命令を⼊れ⼦に対応させる」「順序つ
き箇条書きで数字以外を使えるようにする」などの基本機能が、未だに実装されていません。
しかし「⽇本語組版処理の要件」は、読んでみると分かりますが、重箱の隅をつつくような内容がほとんどです。プロユースでは必要なのかもしれませんが、同⼈誌では「禁則処理がきちんとできていれば充分」というユーザがほとんどでしょう。開発
リソースをそんな細かいところに割くよりも、もっとユーザが必要とする機能の開発に割くべきです。

Starter では⽇本語組版の細かい要件は気にせず、ユーザが必要とする機能を重点的に開発しています。たとえば、範囲コメントを実装したり、インライン命令やブロック命令を⼊れ⼦に対応させたり、順序つき箇条書きでアルファベットも使えるよ
うにしたり、章や節のタイトルを⾒栄えのいいデザインにしたりといった、ユーザにとって必要な機能を優先して開発しています*8 。

♣ バグ対応今まで、Re:VIEW には約 20 個ほどのバグ報告や Pull Request を出しました。取り⼊れられたものも多いですが、理不尽な理由で拒絶されたものも多いです。
明らかなバグを仕様だと⾔い張る
たとえば、Re:VIEW では箇条書きの項⽬が複数⾏だと勝⼿に結合されるというバグがあります。
▼ サンプル* AA AA
BB BB
CC CC

▼ 表⽰結果• AA AABB BBCC CC「AABB」や「BBCC」のように英単語が結合されていますよね？ どう⾒てもRe:VIEW のバグなのですが、報告しても「これは仕様だ」と⾔い張るんです。しか*8 ここに挙げた機能のうち、⾒た⽬のデザインを変更するのは（LAT X の知識さえあれば）ユーザでEも変更できますし、実際に Techbooster テンプレートでは⾒た⽬のデザインを変更しています。しかしそれ以外の機能は Re:VIEW のソースコードを変更しなければ実現できず、ユーザが簡単に⾏えることではありません。

– 247 –

付録 C 開発の背景

も「なぜそのような書き⽅をするんだ？ ⼀⾏に書けばいいではないか」と⾔われる始末。かなり意味不明な対応をされました。

Starter ではこのバグは修正しています（当然です）。
提案を却下しておきながら次のバージョンで釈明なく取り⼊れる

Re:VIEW 2.x では、LATEX スタイルファイルが「sty/reviewmacro.sty」しかなく、カスタマイズするにはこのファイルを編集するのが⼀般的でした。しかしこの⽅法には問題があります。

•「sty/reviewmacro.sty」を直接編集すると、Re:VIEW のバージョンアップをするときに困る。

• ⾃分でスタイルファイルを追加できるが、そのためには設定ファイルの項⽬を変更する必要があり、初⼼者には敷居が⾼い（どの項⽬をどう変更すればいいか知らないため）。
そこで、あらかじめ空のスタイルファイルを⽤意し、ユーザのカスタマイズはそのファイルの中で⾏うことを提案しました。Starter でいうと「sty/mystyle.sty」のことですね。実装は簡単だし、問題の解決策としてとても妥当な⽅法です。
しかしこの提案は、あーだこーだと理由をつけられて却下されました（これに限らず、初⼼者への敷居を下げるための提案は却下されることが多い印象です）。仕⽅な
いので、Starter では初期の頃から独⾃に空のスタイルファイルを提供していました。
ところが、なんと Re:VIEW 3.0 でこの機能が取り込まれていたのです！「提案が通ったならそれでいいじゃないか」と⼼ないことを⾔う⼈もいるでしょうけど、いろ
いろ理由をつけて提案を却下しておきながら、何の釈明もなくしれーっと取り込むのは、却下されたほうとしてはたまったものではありません。不満が残るのは当たり前です。
仲のいい⼈とそうでない⼈とで露⾻に態度を変える
昔の Re:VIEW では、「//list」においてキャプション（説明⽂）を指定しなくても⾔語指定をすると、本⽂とプログラムリストの間が⼤きく空いてしまうというバグがありました。たとえばこのように書くと：▼ サンプル//list[][][ruby]{def fib(n)return n <= 1 ? n : fib(n-1) : fib(n-2)
end//}

図 C.2 の下のように表⽰されていました。

– 248 –

▲ 図 C.2: 本⽂とプログラムリストの間が⼤きく空いてしまう（下）この現象は、空⽂字列がキャプションとして使われるため、その分の空⾏が空いてしまうことが原因です。そこで、キャプションが空⽂字列のときは表⽰しないようにする修正を報告しました。
しかしこのバグ報告も、後⽅互換性のために却下されました。「出⼒結果が変わってしまうような変更は、たとえバグ修正だとしても、メジャーバージョンアップ以外
では受けつけられない」というのが理由でした。こんな明⽩なバグの互換性なんかいらないはずだと思ったので、粘って交渉したのですが、互換性を理由に頑なに拒まれました。
ところが、開発者と仲のいい別の⼈が「やはりバグではないか？」とコメントした
途端、メジャーバージョンアップでもないのに修正されました。⾒事な⼿のひら返しです。
「出⼒結果が変わってしまう変更は、たとえバグ修正でも（メジャーバージョンアップ以外では）受けつけられない。それが組版ソフトだ」という理由でさんざん拒絶しておいて、いざ別の⼈が⾔及するとすぐに修正する。出⼒結果が変わってしまう修正だというのに！
⼤事な点なので強調しますが、出⼒結果が変わる変更はダメと⾔って拒絶しておきながら、別の⼈が「やはりバグでは？」と⾔うと出⼒結果が変わる変更でもあっさ
り⾏うという、露⾻な態度の違い。よく平気でこんなことできるなと逆に感⼼しま– 249 –

付録 C 開発の背景した。
こんなことが積み重なったので、もうバグ報告も機能提案もしないことにしました。Re:VIEW のコードは品質が良くないので、ソースコードを読んでいると細かいバグがちょこちょこ⾒つかりますが、もうシラネ。
また Re:VIEW のリリースノートを⾒ると、Starter の機能が Re:VIEW の新機能として取り込まれているのを⾒かけます。つまり、Re:VIEW に新機能提案しても通らないけど、Starter に機能を実装すると Re:VIEW に取り込まれる可能性が⾼いということです。こちらはバグ報告や提案が変な理由で却下されてストレスが溜まることから解放されるし、Re:VIEW 側は Starter が先⾏実装した機能を選んで取り込めばいいし、Win-Win で、これでいいのだ。

今後の開発• Starter は、将来的に Re:VIEW のソースコードをすべて上書きするでしょう。
⼤事なのはユーザが書いた原稿であって、Re:VIEW でも Starter でもありません。たとえ Re:VIEW のソースコードをすべて捨てたとしても、ユーザの原稿は使えるようになるはずです。

• 設定は、今は設定ファイルを⼿作業で変更していますが、これは GUI による設定に置き換わるでしょう。そのため設定ファイルの互換性はなくなる可能性が⾼いです。

• PDF ⽣成のための組版ツールとして、LATEX 以外に Vivliostyle をサポートしたいと考えています。ただし Vivliostyle プロジェクトが独⾃のドキュメント
作成ツールを開発中なので、Vivliostyle を必要とする⼈はそちらを使うだろうから、Starter での優先順位は⾼くなくてもいいかなと思っています。
• 同⼈イベントがオンラインに移⾏することから、PDF より ePub の需要が⾼くなるでしょう。今の Starter は ePub 対応が弱いので、強化する必要があります。

• 印刷物での配布が減るので、カラー化がいっそう進むでしょう。Starter は
コードハイライトができないので、対応を急ぐ必要があります。

• Visual Studio Code での執筆を⽀援するプラグインが必要とされるでしょう。
そのための本を買ったけど、積ん読のままです。

• Markdown ファイルの対応は、パーサを書き換えたあとで検討します。
• 諸般の事情により Git リポジトリを公開していないので、公開できるよう準備– 250 –

を進めます。

– 251 –

おわりにいかがだったでしょうか。感想や質問は随時受けつけています。

♣ 著者紹介カウプラン機関極東⽀部 (@_kauplan)
賞味期限が 1 年にも満たないようなツールやフレームワークに振り回されるのを許しておけるほど、我々の⼈⽣は⻑くはない。

• https://kauplan.org/•『パンプキン・シザーズ』推し•『ワールド・トリガー』推し•『プリンセス・プリンシパル』推し♣ 既刊⼀覧•『SQL ⾼速化 in PostgreSQL』（技術書典 2）•『オブジェクト指向⾔語解体新書』（技術書典 3）•『jQuery だって複雑なアプリ作れるもん！ 』（技術書典 4）•『Shell スクリプトでサーバ設定を⾃動化する本』（技術書典 5）•『Ruby のエラーメッセージが読み解けるようになる本』（技術書典 6）•『わかりみ SQL』（技術書典 7）•『Python の黒魔術』（技術書典 8）•『カウプランレポート vol.01』（技術書典 10）– 253 –

索引
■C
C ボール

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

■あ
アルビオン
王国 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
王⽴航空軍 . . . . . . . . . . . . . . . . . . . 128, 130
共和国 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
アンジェ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127■か空中艦隊.........

→ アルビオン王⽴航空軍

くろぼしこうはく黒星紅⽩ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
ケイバーライト . . . . . . . . . . . . . . . . . . . . . . . . 128症候群 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128■さししおど

⿅威し . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
侍従⻑ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
スパイ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
⼆重――― . . . . . . . . . . . . . . . . . . . . . . . . . 129– 254 –

Re:VIEW Starter ユーザーズガイド
インストールからカスタマイズまで

2021 年 7 ⽉ 15 ⽇
著

者

印刷所

ver 1.0

カウプラン機関極東⽀部○○印刷所© 2021 カウプラン機関極東⽀部(powered by Re:VIEW Starter)