Re:VIEW 覚え書き


（追記 2019-03-12：この記事の内容は、すべて [Re:VIEW Starter](https://kauplan.org/reviewstarter/) に反映しています。Re:VIEWやLaTeXに苦しんでいる人は、まず [Re:VIEW Starter](https://kauplan.org/reviewstarter/) を試してください。）

---

自分用のメモ。


## セットアップ

### Re:VIEWをインストール

```console
$ mkdir $HOME/rubygems
$ export GEM_HOME=$HOME/rubygems
$ export PATH=$GEM_HOME/bin:$PATH
$ gem install review
$ which review
/Users/yourname/rubygems/gems/bin/review
$ review
usage: review <command> [<args>]

ReVIEW commands are:
  init
  preproc
  compile
  epubmaker
  pdfmaker
  vol
  check
  index
  validate
```

なお`review`コマンドでは、`-h`や`--help`や`--version`が使えない模様。

Re:VIEWのバージョンを更新する場合は「`gem update review`」を実行する。

```console
$ gem update review
Updating installed gems
Nothing to update
```


### LaTeXをインストール

以下を参考にして、LaTeXをインストールする。

* [El Capitan / SierraでTeX環境をゼロから構築する方法](https://qiita.com/hideaki_polisci/items/3afd204449c6cdd995c9)
* [パッケージ管理システムによる TeX Live (MacTeX, BasicTeX) のインストール](https://texwiki.texjp.org/?TeX%20Live%2FMac#e3decd1a)

LaTeX関連コマンドがインストールされていることを確認する。

```console
$ uplatex --version
e-upTeX 3.14159265-p3.7.1-u1.22-161114-2.6 (utf8.uptex) (TeX Live 2017)
kpathsea version 6.2.3
ptexenc version 1.3.5
Copyright 2017 D.E. Knuth.
...(省略)...

$ dvipdfmx --version
This is dvipdfmx Version 20170318 by the DVIPDFMx project team,
modified for TeX Live,
an extended version of dvipdfm-0.13.2c developed by Mark A. Wicks.
...(省略)...
```


### プロジェクトを作成

```console
$ review init mybook1
$ cd mybook1
$ ls -F
Gemfile		catalog.yml	images/		mybook1.re	style.css
Rakefile	config.yml	layouts/	sty/
```

この時点でGitリポジトリに登録するとよい。

```console
$ git init
$ git add *
$ git commit -m "register files"
```

PDFを作成してみる。

```console
$ rake pdf
review-pdfmaker config.yml
compiling mybook1.tex
...(省略)...

$ ls book.pdf
book.pdf
$ open book.pdf   # openはファイルを開いてくれるコマンド（macOS用）
```


### スタイルファイルをバックアップ

このあと「sty/reviewmacro.sty」にいろいろ追加するので、バックアップをとっておく。

```console
$ ls sty
jumoline.sty		reviewmacro.sty
$ cp sty/reviewmacro.sty{,.org}
$ ls sty
jumoline.sty		reviewmacro.sty		reviewmacro.sty.org
```


### LaTeX用レイアウトテンプレートをコピー

このあといろいろカスタマイズするので、LaTeX用のレイアウトテンプレートをコピーしておくとよい。

```console
$ ls -F $GEM_HOME/gems/
bundler-1.16.0/		review-peg-0.2.2/	rubyzip-1.2.1/
image_size-1.5.0/	rouge-2.2.1/
review-2.4.0/		rouge-3.0.0/
$ cp $GEM_HOME/gems/review-2.4.0/templates/latex/layout.tex.erb layouts
$ ls layouts
layout.tex.erb
$ cp layouts/layout.tex.erb{,.org}
$ ls layouts
layout.tex.erb		layout.tex.erb.org
```


## 表紙、大扉

### タイトルを変更する

config.ymlで以下を変更。

```text:config.yml
## before
booktitle: Re:VIEWサンプル書籍

## after
booktitle: Rubyプログラミング練習帳
```


### 著者名を変更する

config.ymlで以下を変更。

```text:config.yml
## before
aut: ["青木峰郎", "武藤健志", "高橋征義", "角征典"]

## after
aut: ["カウプラン機関極東支部"]
```


### 表紙画像をつけないよう変更する

config.ymlで以下を変更。

```text:config.yml
## before
coverimage: cover.jpg

## after
coverimage:
```

印刷所にPDF入稿する場合、表紙は別ファイルにするのが基本であり、本文と同じファイルにはしない。そのため、印刷所にPDF入稿する場合は表紙画像をつけないよう変更する。


### 刊行日を変更する

刊行日は、大扉ページのいちばん下に「2017-12-31 版 発行」のように表示される。

config.ymlで以下を変更。

```text:config.yml
## before
date: 2017-12-31

## after
date: 2018-04-01
```


### 大扉を表示しない

config.ymlで以下を変更。

```text:config.yml
## before
# titlepage: true

## after
titlepage: false
```

Re:VIEWが作成する大扉はデザインがよくないので、KeynoteやPagesを使って大扉のページを自分でデザインするのも大いにあり。その場合は、上のように大扉を表示しない設定にしてPDFを生成してから、自分でデザインした大扉を追加するとよい。



## 本文

### 章を追加する

たとえば、次のようなファイルを作成する（ファイル名は変えてよい）。文字コードはUTF-8にすること。

chapter-aaa.re:

```text:chapter-aaa.re
= サンプル1

== サンプル1-1

本文1
```

chapter-bbb.re:

```text:chapter-bbb.re
= サンプル2

== サンプル2-1

本文2
```

そして、catalog.ymlにそれらのファイル名を指定する。

```text:catalog.yml
## before
CHAPS:
  - mybook1.re

## after
CHAPS:
  - chapter-aaa.re
  - chapter-bbb.re
```


### まえがきを追加する

まえがきのファイルを作成する（ファイル名は変えてよい）。文字コードはUTF-8にすること。

chapter-preface.re:

```text:chapter-preface.re
= はじめに

本書を手に取ってくださり、ありがとうございます。
```

そして、catalog.ymlにそのファイル名を指定する。

```text:catalog.yml
## before
PREDEF:

## after
PREDEF:
  - chapter-preface.re
```


### 埋め込みコードのスペースを変更する (LaTeX)

config.ymlで「`debug: true`」を設定してから`rake pdf`を実行すると、`book-pdf/book.tex`という一時ファイルができる。この中に、以下のようなLaTeXマクロが定義されている。

```latex:book-pdf/book.tex
\newenvironment{reviewemlist}{%
  \medskip\small\begin{shaded}\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
  \end{alltt}\end{shaded}}

\newenvironment{reviewlist}{%
  \begin{shaded}\small\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
  \end{alltt}\end{shaded}\par\vspace*{0.5zw}}

\newenvironment{reviewsource}{%
  \begin{shaded}\small\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
  \end{alltt}\end{shaded}\par\vspace*{0.5zw}}

\newenvironment{reviewcmd}{%
  \color{white}\medskip\small\begin{shadedb}\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
  \end{alltt}\end{shadedb}}
```

これらはそれぞれRe:VIEWの「`//emlist[][]{ ... //}`」と「`//list[][]{ ... //}`」と「`//source[]{ ... //}`」と「`//cmd[]{ ... //}`」に対応しているので、sty/reviewmacro.styでこれらを上書きすればよい。

よって、sty/reviewmacro.styの最後に以下を追加する。ここで「`\newenvironment`」ではなく「`\renewenvironment`」であることに注意（`\new...`ではなく`\renew...`になっている）。

```latex:sty/reviewmacro.sty
\renewenvironment{reviewemlist}{%
  \medskip%
  \begin{shaded}%
    \vspace*{-1.0zw}
    \small%
    \setlength{\baselineskip}{1.3zw}%
    \begin{alltt}%
      }{%
    \end{alltt}%
    \vspace*{-1.0zw}%
  \end{shaded}%
}

\renewenvironment{reviewlist}{%
  \begin{shaded}%
    \vspace*{-1.0zw}%
    \small%
    \setlength{\baselineskip}{1.3zw}%
    \begin{alltt}%
      }{%
    \end{alltt}%
    \vspace*{-1.0zw}%
  \end{shaded}%
  \par\vspace*{0.5zw}%
}

\renewenvironment{reviewsource}{%
  \begin{shaded}%
    \vspace*{-1.0zw}%
    \small%
    \setlength{\baselineskip}{1.3zw}%
    \begin{alltt}%
      }{%
    \end{alltt}%
    \vspace*{-1.0zw}%
  \end{shaded}%
  \par\vspace*{0.5zw}%
}

\renewenvironment{reviewcmd}{%
  \color{white}%
  %\medskip%
  \small%
  \begin{shadedb}%
    \vspace*{-1.0zw}%
    \setlength{\baselineskip}{1.3zw}%
    \begin{alltt}%
      }{%
    \end{alltt}%
    \vspace*{-1.0zw}%
  \end{shadedb}%
}
```

なお行末に「`%`」がついているのは、改行文字がマクロに入らないようにするため（LaTeXでは「`%`」が行コメントの記号であり、Rubyの「`#`」やJavaScriptの「`//`」に相当する）。


### 埋め込みコードのフォントサイズを通常と同じにする (LaTeX)

Re:VIEWのデフォルトでは、埋め込みコードのフォントサイズは通常の本文と比べて少し小さい。

これを止めるには、前のセクションで「`\small%`」と書かれてあった行を「`%`」でコメントアウトすればよい。

またキャプションのフォントも少し小さいサイズになっているので、これも本文と同じ大きさにするには、次のマクロをsty/reviewmacro.styの最後に追加する。

```latex:sty/reviewmacro.sty
\renewcommand{\reviewlistcaption}[1]{%
  \medskip{\noindent #1}\vspace*{-1.3zw}}

\renewcommand{\reviewemlistcaption}[1]{%
  \medskip{\noindent #1}\vspace*{-1.3zw}}

\renewcommand{\reviewsourcecaption}[1]{%
  \medskip{\noindent #1}\vspace*{-1.3zw}}

\renewcommand{\reviewcmdcaption}[1]{%
  \medskip{\noindent #1}\vspace*{-1.3zw}}

\renewcommand{\reviewboxcaption}[1]{%
  \medskip{\noindent #1}\vspace*{-1.3zw}}
```


### //emlist でキャプションがない場合のスペースを詰める（LaTeX）

「`//emlist[]{ ... }`」のように、連番なしのリストにおいてキャプションもつけなかった場合、本文とリストとの間のスペースが空きすぎる。これは`//emlist`がキャプションがつくことを前提にしているため。

これを解決するには、キャプションがある場合とない場合でスペースの高さを変える必要がある。sty/reviewmacro.styの最後にに次のマクロを追加する。

```latex:sty/reviewmacro.sty
\def \ifempty#1{\def\temp{#1} \ifx\temp\empty }

\renewcommand{\reviewemlistcaption}[1]{%
  %\medskip{\small\noindent #1}\vspace*{-1.3zw} % original
  \ifempty{#1}
    \vspace*{-1.0zw}
  \else
    \medskip{\small\noindent #1}\vspace*{-1.3zw}
  \fi
}
```

なおキャプションのフォントを本文と同じ大きさにするには、上のマクロから「`\small`」を取り除く。

（参考：[How to test if a string is empty - Tex - Latex StackExchange](https://tex.stackexchange.com/questions/179964/how-to-test-if-a-string-is-empty)）


### 埋め込みコード内で太字を使う (LaTeX)

デフォルトでは、たとえば「`//list[][]{ ... }//}`」の中で「`@<b>{ ... }`」を使っても、太字にならない。これを解消するには、sty/reviewmacro.styの最後に以下を追加する。

```latex:sty/reviewmacro.sty
%% enable @<b>{ ... } in code list
\renewcommand{\ttdefault}{txtt}
```

これがデフォルトで有効になってない理由は不明。


### 埋め込みコード内で取り消し線を使う (LaTeX)

デフォルトでは、たとえば「`//list[][]{ ... }//}`」の中で「`@<del>{ ... }`」を使っても、取り消し線がつかない。これを解消するには、sty/reviewmacro.styの最後に以下を追加する。

```latex:sty/reviewmacro.sty
%% enable @<del>{ ... } in code list
\usepackage{ulem}
\renewcommand{\reviewstrike}[1]{\sout{#1}}
```

これがデフォルトで有効になってない理由は不明。


### 右寄せ、左寄せ、中央揃え (LaTeX、HTML)

そんな機能はないので、LaTeXやHTMLの機能を使う。

LaTeX：

```
//embed[latex]{
\begin{flushright}
右寄せ
\end{flushright}
//}

//embed[latex]{
\begin{flushleft}
左寄せ
\end{flushleft}
//}

//embed[latex]{
\begin{center}
中央揃え
\end{center}
//}
```

HTML：

```
//embed[html]{
<div style="textalign:right">
右寄せ
</div>
//}

//embed[html]{
<div style="textalign:right">
左寄せ
</div>
//}

//embed[html]{
<div style="textalign:center">
中央揃え
</div>
//}
```


### 改ページする（LaTeX）

そんな機能はRe:VIEWにはないので、LaTeXの`\clearpage`を使う。

LaTeX:

```text
//embed[latex]{
\clearpage
//}
```



## 目次

### 目次をつける

config.ymlで以下を変更。

```text:config.yml
## before
# toc: true

## after
toc: true
```


### 目次に載せる章レベルを指定する

目次には、デフォルトでは「第1.2.3章」までが載る。これをたとえば「第1.2章」までを載せて、「第1.2.3章」は載らないようにするには、config.ymlで以下を変更する。

```text:config.yml
## before
toclevel: 3

## after
toclevel: 2
```


### 目次を赤字から黒字にする (LaTeX)

デフォルトでは、生成されたPDFは目次が赤字になっている。これは印刷所に入稿するときには都合が悪いので、黒字に戻す必要がある。

そのためには、sty/reviewmacro.styの最後に以下を追加。

```latex:sty/reviewmacro.sty
%% make TOC non-red color
\hypersetup{colorlinks=false}
```


### 目次が偶数ページから始まるのを許す（LaTeX）

奇数ぺージ始まりにした場合（つまりconfig.ymlの`texdocumentclass`に`twoside`を含めた場合）、目次も奇数ページ始まりになる。この場合、まえがきや目次が1ページしかないと、「まえがき→空白ページ→目次→空白ページ」のようになり、無駄な空白ページが2ページ挟まってしまう。

これを取り除いて「まえがき→目次」のようにするには、目次が偶数ページから始まるのを許す必要があり、そのためには目次を生成する`\tableofcontents`マクロを修正する必要がある。

この`\tableofcontents`マクロは、jsbook.clsで次のように定義されている。

```latex
\newcommand{\tableofcontents}{%
  \settowidth\jsc@tocl@width{\headfont\prechaptername\postchaptername}%
  \settowidth\@tempdima{\headfont\appendixname}%
  \ifdim\jsc@tocl@width<\@tempdima \setlength\jsc@tocl@width{\@tempdima}\fi
  \ifdim\jsc@tocl@width<2zw \divide\jsc@tocl@width by 2 \advance\jsc@tocl@width 1zw\fi
  \if@twocolumn
    \@restonecoltrue\onecolumn
  \else
    \@restonecolfalse
  \fi
  \chapter*{\contentsname}%
  \@mkboth{\contentsname}{}%
  \@starttoc{toc}%
  \if@restonecol\twocolumn\fi
}
```

これをsty/reviewmacro.styの最後にコピーしてから、「`\chapter*{\contentsname}%`」の部分を次のように書き換える。

```latex
## before
  \chapter*{\contentsname}%

## after
  \clearpage
  \plainifnotempty
  \@makechapterhead{\contentsname}
```


## 奥付

### 奥付の日付を変更する

config.ymlで以下を変更。

```text:config.yml
## before
history: [["2017-12-31"]]

## after
history: [["2018-04-01 Ver 1.0.0"]]
```


### 奥付に著作権を表示する

config.ymlで以下を変更

```text:config.yml
## before
# rights: (C) 2016 Re:VIEW Developers

## after
rights: (C) 2018 カウプラン機関極東支部
```


### 奥付をつけない

config.ymlで以下を変更。

```text:config.yml
## before
  colophon: true

## after
  colophon: false
```

ただし「colophone」が設定されている箇所は2箇所あるので注意。LaTeXを使う場合は、config.ymlの最後のほうにある「colophone: true」を変更すること。


### 奥付の線の長さを変更する

たとえば用紙サイズをA5にすると、奥付の線が長すぎて右端いっぱいにまで伸びてしまう。
これは、奥付の線の長さが14cmに固定されていることが原因。

修正するには、$GEM_HOME/gems/review-2.4.0/templates/latex/layout.tex.erbをlayoutsフォルダにコピーし、363行目と372行目で指定されている「`14cm`」を「`\textwidth`」に変更する。

```text:layouts/layout.tex.erb
## before
363: \rule[8pt]{14cm}{1pt} \\
 :
372: \rule[0pt]{14cm}{1pt} \\

## after
363: \rule[8pt]{\textwidth}{1pt} \\
 :
372: \rule[0pt]{\textwidth}{1pt} \\
```


## 用紙サイズ、フォント、余白

### 用紙サイズをB5やA5にする (LaTeX)

作成されるPDFのデフォルトはA4サイズ（実際には21.01cm×29.71cm）。
これをB5サイズにするには、config.ymlで以下を変更（B5なら`b5j`、A5なら`a5j`を指定する）。

```text:config.yml
## before
# texdocumentclass: ["jsbook", "uplatex,oneside"]

## after
texdocumentclass: ["jsbook", "uplatex,oneside,b5j"]
```

このあとPDFを生成し、それがB5やA5サイズになっているかを確認するとよい。

（macOSでの確認方法）
PDFをPreview.appで開いたあと、メニューから「ツール」→「インスペクタを表示」を選ぶと、ダイアログに「ページサイズ: 18.21 × 25.7 cm」[^b5size]と表示される。これがB5サイズの大きさ。
[^b5size]: B5サイズの規格は18.2cm×25.7cmなので、生成されたPDFはわずかにずれがあるが、通常は気にしなくてよい。


### 章や目次を奇数ページ始まりにする (LaTeX)

config.ymlで以下を変更。

```text:config.yml
## before
# texdocumentclass: ["jsbook", "uplatex,oneside"]

## after
texdocumentclass: ["jsbook", "uplatex,twoside"]
```

なおB5サイズなら「`texdocumentclass: ["jsbook", "uplatex,twoside,b5j"]`」と指定すること。A5なら「`b5j`」のかわりに「`a4j`」を指定すること。


### 本文の横幅と高さを広げる (LaTeX)

方法は2つある。

* 方法1：geometryマクロを使って余白幅を狭める
* 方法2：geometry.styを読み込まないようテンプレートを修正

フォントサイズを変更しない場合は方法1が簡単でよい。フォントサイズを変更する場合は方法2を使うこと。


【方法1：geometryマクロを使って余白幅を狭める】

sty/reviewmacro.styの最後に以下を追加。

```latex:sty/reviewmacro.sty
\geometry{left=25mm,right=25mm,top=30mm,bottom=35mm}
```

これにより、B5サイズの場合、横幅は1行が36文字だったのが40文字に広がり、高さは1ぺージ33行だったのが34行に広がる。

ただしこの方法は、フォントサイズを変更したい場合には使えないので注意すること。


【方法2：geometry.styを読み込まないようテンプレートを修正】

`$GEM_HOME/gems/review-2.4.0/templates/latex/layout.tex.erb`をlayoutsフォルダにコピーし、42行目の以下の行を探し、コメントアウトする（先頭に「`%`」をつける）。

```text:layouts/layout.tex.erb
## before
\usepackage[top=10zw,bottom=12zw,left=10zw,right=10zw]{geometry}

## after
%\usepackage[top=10zw,bottom=12zw,left=10zw,right=10zw]{geometry}
```

そして5行目に以下を追加する。

```text:layouts/layout.tex.erb
\setlength{\textwidth}{\fullwidth}
\setlength{\evensidemargin}{\oddsidemargin}
```

これにより、geometry.styが読み込まれなくなり、jsbook.clsで指定された横幅と高さが使われるようになる。たとえばB5サイズの場合、横幅は1行が36文字だったのが44文字に広がり、高さは1ぺージ33行だったのが36行に広がる。

以下のように横幅を細かく調整することも可能[^sidemargin]（用紙サイズをB5やA5にする方法は2つ前のセクションを、またフォントサイズを9ptや8ptにする方法は次のセクションを参照すること）。

```text:layouts/layout.tex.erb
%% B5 10pt： 全角42文字（左右余白約22mm）
\setlength{\textwidth}     {42zw}
\setlength{\oddsidemargin} {-3truemm}
\setlength{\evensidemargin}{\oddsidemargin}

%% B5 9pt： 全角42文字（左右余白約28mm）
\setlength{\textwidth}     {42zw}
\setlength{\oddsidemargin} {3truemm}
\setlength{\evensidemargin}{\oddsidemargin}

%% B5 9pt： 全角44文字（左右余白約25mm）
\setlength{\textwidth}     {44zw}
\setlength{\oddsidemargin} {0truemm}
\setlength{\evensidemargin}{\oddsidemargin}

%% B5 9pt： 全角45文字（左右余白約24mm）
\setlength{\textwidth}{45zw}
\setlength{\oddsidemargin}{-1.5truemm}
\setlength{\evensidemargin}{\oddsidemargin}

%% A5 9pt： 全角39文字（左右余白約16mm）
\setlength{\textwidth}     {39zw}
\setlength{\oddsidemargin} {-9truemm}
\setlength{\evensidemargin}{\oddsidemargin}

%% A5 8pt： 全角40文字（左右余白約20mm）
\setlength{\textwidth}     {40zw}
\setlength{\oddsidemargin} {-5.5truemm}
\setlength{\evensidemargin}{\oddsidemargin}

%% A5 8pt： 全角42文字（左右余白約17mm）
\setlength{\textwidth}     {42zw}
\setlength{\oddsidemargin} {-8truemm}
\setlength{\evensidemargin}{\oddsidemargin}
```

[^sidemargin]: jsbook.clsを参考にして左右のマージンを自動計算しようとしたが、「`\addtolength{\oddsidemargin}{-\inv@mag in}`」がエラーになったため断念。


### フォントサイズを小さくする (LaTeX)

フォントサイズは、B5なら10pt、A4なら9ptがお勧め。ページ数を減らして印刷代を少しでも抑えたい場合は、B5なら9pt、A4なら8ptにする[^reducepage]。
[^reducepage]: ただしフォントサイズを小さくしても、ページ数は期待したほどには減らないことが多いので、お勧めはしない。

デフォルトのフォントサイズは10ptなので、9ptや8ptに変更するにはconfig.ymlで以下を設定。

```text:config.yml
## before
# texdocumentclass: ["jsbook", "uplatex,oneside"]

## after
texdocumentclass: ["jsbook", "uplatex,oneside,9pt"]
```

ただしこの指定は、用紙サイズのオプション（`b5j`や`a5j`）を指定していると、効いてくれない。

* `b5j`を指定すると`9pt`が効かない
* `b5j`を外すと`9pt`が効く

この原因は、geometry.styというLaTeX用スタイルファイルの1054行目の、以下の行が原因らしい。

```latex
    \AtBeginDvi{\special{papersize=\the\paperwidth,\the\paperheight}}%
```

そこで、geometry.styを読み込まないようにテンプレートを変更する。具体的な方法は、前のセクションの【方法2：geometry.styを読み込まないようテンプレートを修正】を参照のこと。

これにより、フォントサイズ（9ptなど）を指定すれば反映されるようになる。ただし本文の幅と高さが変わるので注意。幅を変える方法は前のセクションの最後で説明している。


### 本文のフォントをゴシック体にする（LaTeX）

調査中。


### 太字にした文字をゴシック体にする（LaTeX）

調査中。


### 奇数ページと偶数ページで左右の余白幅を変える (LaTeX)

印刷した本のページ数が多い場合は、綴じしろ側の余白（見開き時の、左ページの右余白と右ページの左余白）を広くとったほうが、読みやすい。そうするには、奇数ページと偶数ページで余白を変える必要がある。

そのためには、まずconfig.ymlのtexdocumentclassで`twoside`が指定されていることを確認する。たとえば：

```text:config.yml
texdocumentclass: ["jsbook", "uplatex,twoside,b5j,9pt"]
```

次に、`$GEM_HOME/gems/review-2.4.0/templates/latex/layout.tex.erb`をlayoutsフォルダにコピーし、42行目の以下の行を探し、コメントアウトする（先頭に「`%`」をつける）。

```text:layouts/layout.tex.erb
## before
\usepackage[top=10zw,bottom=12zw,left=10zw,right=10zw]{geometry}

## after
%\usepackage[top=10zw,bottom=12zw,left=10zw,right=10zw]{geometry}
```

また5行目の空行に以下を追加する（用紙サイズとフォントサイズに合わせたものを追加すること）。

```text:layouts/layout.tex.erb
## B5 10ptの場合（全角44文字/行）
\setlength{\textwidth}{44zw}
\setlength{\oddsidemargin}{-3 truemm}
\setlength{\evensidemargin}{-9 truemm}

## B5 9ptの場合（全角47文字/行）
\setlength{\textwidth}{47zw}
\setlength{\oddsidemargin}{0 truemm}
\setlength{\evensidemargin}{-9 truemm}

## A5 9ptの場合（全角39文字/行）
\setlength{\textwidth}{39zw}
\setlength{\oddsidemargin}{-6 truemm}
\setlength{\evensidemargin}{-12 truemm}

## A5 8ptの場合（全角42文字/行）
\setlength{\textwidth}{42zw}
\setlength{\oddsidemargin}{-5 truemm}
\setlength{\evensidemargin}{-12 truemm}
```

これでコンパイルし、奇数ページと偶数ページで余白が異なることを確認する。

なお奇数ページと偶数ページで余白を変えたほうがよいのは、あくまでページ数が多い本を印刷する場合のことであり、電子書籍の場合やページ数が少ない場合はこのようなことはしなくてよい。


### 章タイトルの上余白をなくす (LaTeX)

LaTeXのデザインでは、章タイトルの上の余白が広すぎる。
これを狭くするには、jsbook.clsで定義されている「`\@makechapterhead`」マクロを上書きする。

もとの定義は次の通り。

```latex
\def\@makechapterhead#1{%
  \vspace*{2\Cvs}% 欧文は50pt
  {\parindent \z@ \raggedright \normalfont
    \ifnum \c@secnumdepth >\m@ne
      \if@mainmatter
        \huge\headfont \@chapapp\thechapter\@chappos
        \par\nobreak
        \vskip \Cvs % 欧文は20pt
      \fi
    \fi
    \interlinepenalty\@M
    \Huge \headfont #1\par\nobreak
    \vskip 3\Cvs}} % 欧文は40pt
```

これを見ると分かるように、「`\vspace`」と「`\vskip`」が使われているので、その箇所を変更すればよい。

具体的には、上の定義を「sty/reviewmacro.sty」の最後にコピーして、2行目の「`\vspace*{2\Cvs}`」の先頭に「`%`」をつけてコメントアウトする。これで章タイトルの上の余白が狭くなる。あとは好みに応じて「`\vskip`」の箇所を調整する。

ただし、これは目次のページには影響しない。そのため、目次のページは上部の余白が狭くならない。

目次を生成する`\tableofcontents`マクロは、jsbook.clsでは次のように定義されている。

```latex
\newcommand{\tableofcontents}{%
  \settowidth\jsc@tocl@width{\headfont\prechaptername\postchaptername}%
  \settowidth\@tempdima{\headfont\appendixname}%
  \ifdim\jsc@tocl@width<\@tempdima \setlength\jsc@tocl@width{\@tempdima}\fi
  \ifdim\jsc@tocl@width<2zw \divide\jsc@tocl@width by 2 \advance\jsc@tocl@width 1zw\fi
  \if@twocolumn
    \@restonecoltrue\onecolumn
  \else
    \@restonecolfalse
  \fi
  \chapter*{\contentsname}%
  \@mkboth{\contentsname}{}%
  \@starttoc{toc}%
  \if@restonecol\twocolumn\fi
}
```

これをsty/reviewmacro.styの最後にコピーし、「`\chapter*{\contentsname}%`」を以下のように変更する。これで目次ページでの上部の余白が狭くなる。
（もっとよい方法あれば教えてください。）

```latex:sty/reviewmacro.sty
## before
  \chapter*{\contentsname}%

## after
  \if@openleft\cleardoublepage\else
  \if@openright\cleardoublepage\else\clearpage\fi\fi
  \plainifnotempty
  \@makechapterhead{\contentsname}
```


## その他

### PDFファイル名を変更する (LaTeX)

config.ymlで以下を変更。

```text:config.yml
## before
bookname: book

## after
bookname: mybook1
```

これで、book.pdfのかわりにmybook1.pdfが生成される。

### LaTeXファイルを削除しない (LaTeX)

config.ymlで以下を変更。

```text:config.yml
## before
debug: null

## after
debug: true
```

これにより、`*-pdf/book.tex` という一時ファイルが削除されずに残るようになる。これはLaTeXファイルをデバッグするときに必要。


### 独自のマクロファイルを追加 (LaTeX)

Re:VIEWでは、デフォルトのスタイルファイルとして「sty/reviewmacro.sty」が用意されている。必要があればここにLaTeXマクロを追加する。

しかしこの方法だと、Re:VIEWをバージョンアップしたときに「sty/reviewmacro.sty」を最新の更新に追従するのが難しい。

そこで、LaTeXマクロを追加するための新しいマクロファイルを用意することで、「sty/reviewmacro.sty」を変更しなくて済むようにする。これにより、「sty/reviewmacro.sty」を最新の更新に追従しやすくなる。

具体的な方法は、まず$GEM_HOME/gems/review-2.4.0/templates/latex/layout.tex.erbをlayoutsフォルダにコピーし、252〜254行目を次のように変更する。

```text:layouts/layout.tex.erb
## before
<%- if @config["usepackage"] -%>
<%= @config["usepackage"] %>
<%- end -%>

## after
<%- if @config["texstyle"] -%>
<%-   [@config["texstyle"]].flatten.each do |x| -%>
\usepackage{<%= x %>}
<%-   end -%>
<%- end -%>
```

そして新しいファイル「sty/mystyle.sty」を作成する。最初は空でよい。

そのあと、config.ymlを次のように変更する。

```text:config.yml
## before
texstyle: reviewmacro

## after
texstyle: [reviewmacro, mystyle]
```

これで、LaTeXマクロが必要になったら「sty/mystyle.sty」に追加すればよく、「sty/reviewmacro.sty」は変更しなくて済む。


## 困ったときは

「ワンストップ！ 技術同人誌を書こう」を読もう（知らない人はぐぐること）。