TeX に関する Tips II

[戻る]

1. はじめに

久々に jbook で TeX 書く機会を得ました. おかげで本ページのメンテナンスがおろそかになっていました. 執筆作業を通じ, いろいろ調べたり, 開発した知見を書いておきます.

本題に入る前に留意事項を以下に書いておきます.

2. 両面と片面印刷モード

提出先によって片面印刷か両面印刷かが変わります. 片面両面によって, ページ番号その他を割り振る位置が変わります. その時の変更をスムーズにするため, 最初に以下のような呪文を書いておきます.

\newif\ifBOTHSIDEPRINT

\BOTHSIDEPRINTtrue
%\BOTHSIDEPRINTfalse

上記は両面印刷モードです. 片面印刷モードに変える時はコメントの位置を変えます. また, このままでは何も変わりません. 活用は以下に続きます.

3. ページ上端下端に線を入れる

ページの上と下 (ヘッダとフッタ) に線が引かれていると, なんだかかっこいい気がします. そこで, はじめ線を引こうと fancyhdr.styを使ってみたのですが, 理由は忘れましたが何かがうまくいかず, あきらめ以下のようなものを作りました.

\newlength{\hfwidth}
\setlength{\hfwidth}{\textwidth}
\addtolength{hfwidth}{-1mm}

\newcommand{\rmark}{\rightmark}

\makeatletter
\def\ps@mainheadings{
\ifBOTHSIDEPRINT
\def\@evenhead{
\underline{\hb@xt@ \hfwidth{\rmark \hfil}}}
\def\@oddhead{
\underline{\hb@xt@ \hfwidth{\hfil \rmark}}}
\def\@oddfoot{
$\overline{\hb@xt@ \hfwidth{\hfil \thepage}}$}
\def\@evenfoot{
$\overline{\hb@xt@ \hfwidth{\thepage \hfil}}$}
\else
\def\@evenhead{
\underline{\hb@xt@ \hfwidth{\hfil \rmark}}}
\def\@oddhead{
\underline{\hb@xt@ \hfwidth{\hfil \rmark}}}
\def\@oddfoot{
$\overline{\hb@xt@ \hfwidth{\hfil \thepage}}$}
\def\@evenfoot{
$\overline{\hb@xt@ \hfwidth{\hfil \thepage}}$}

\fi

\let\@mkboth\markboth%%% (5)
\def\chaptermark##1{\markboth{%
\ifnum \c@secnumdepth >\m@ne
\if@mainmatter
\@chapapp\thechapter\@chappos\hskip1zw
\fi
\fi
##1}{}}%
\def\sectionmark##1{\markright{%
\ifnum \c@secnumdepth >\z@ \thesection.\hskip1zw\fi
##1}}}
\makeatother

本当はテキスト幅より 1mm 短い hfwidth じゃなくて textwidth を使いたいのですが, overfull が山のように出るのであきらめてこのようにしています. 最終の最後は addtolength 行をコメントアウトしてコンパイル, 印刷するといいかも しれません.

なお, 線の上や線の下に書く内容は, 片面, 両面印刷両方に対応するため偶数, 奇数ページ共に subsection に記した名前とページ番号をページ端にしています. 気に入らない場合は適当に書き換えてください.

また, 目次や付録など subsection が無い部分では, 表示が変になることがあります. その場合は該当部分の頭に

\renewcommand{\rmark}{ 表示内容}
といったフレーズを追加し, 終わった後に
\renewcommand{\rmark}{\rightmark}
と元に戻してごまかします.

4. chapter が始まるページも下線を入れる

上記のままだと, 章が始まるページはヘッダ・フッダがつきません. ヘッダはともかくフッダは無いと統一性に欠ける気がします. ので, 以下のような感じのフレーズを書き加えます.

\def\ps@mainheadnombre{%
\ifBOTHSIDEPRINT
\def\@oddfoot{
$\overline{\hb@xt@ \hfwidth{\hfil \thepage}}$}
\def\@evenfoot{
$\overline{\hb@xt@ \hfwidth{\thepage \hfil}}$}
\else

\fi
\def\@evenhead{}
\def\@oddhead{}
}

5. バージョン管理

経験上, 推敲は印刷して赤ペンを入れるのが効率的ですが, 調子に乗ると「あ〜やっぱり前の方が良かったな」と思う時があります. その時, 以前赤ペンを入れた紙と今の版を見比べるのですが, 段々とどれが新しくでどれが古いか分からなくなります. この場合, 各ページにコンパイルした日付を入れておくと便利です. というわけで適当な所に

\newcommand{\ver}{\today 版} \西暦
と書いておき, 上記フッダの部分を以下のどちらかにしています.
\hfwidth{\ver \hfil \thepage}}$
\hfwidth{\thepage \hfil \ver}}$

なお, 最終印刷では上記 \ver の定義を以下のように空にすれば, 表示されなくなります.

\newcommand{\ver}{} \西暦

6. chapter を偶数ページからもはじめる

普通だと, 章は必ず奇数ページから始まりますが, 片面印刷だと意味がありませんし, 両面印刷でも第 1 章や付録以外では 必然性を感じません. これは上記の \makeatletter〜other の間に以下のフレーズを追加することで解消されます.

\@openrightfalse

7. 目次を奇数ページで始めて偶数ページで終わらせる

普通は「表紙」「目次」「第一章」と並べます. 両面印刷では, 表紙の裏面は白紙にして, 目次を奇数ページからはじめ, かつ目次が奇数ページで終われば, 一枚白紙を入れて 第一章も奇数ページからはじめたいと思います.

方法ですが, 表紙裏の白紙は titlepage で表紙を記述した後で 赤字のように一枚ダミーを入れておきます.

\begin{titlepage}
\begin{center}
表紙
\end{center}
\end{titlepage}

\ifBOTHSIDEPRINT
\begin{titlepage}
~~
\end{titlepage}
\fi

\tableofcontents

一方, 第一章を奇数ページからはじめる方法は chapter で本文を記述する前 (目次の後) に


\ifBOTHSIDEPRINT
\makeatletter
\ifodd\c@page
\cleardoublepage
\fi
\makeatother
\fi
\chapter{章名}

と書くといいです.

8. 目次部分だけローマ数字でページ番号を振る

上記, \tableofcontents の前に

\pagenumbering{roman}
\ifodd\c@page フレーズの直後に
\pagenumbering{arabic}
と書きます.

9. eps ファイルを章毎のディレクトリに格納

jbook になると扱うファイルが膨大になるため, メインを

\documentstyle[hogehoge]{jbook}

\begin{document}
\input{01chap/chap.tex}
\input{02chap/chap.tex}
\input{03chap/chap.tex}
:
\end{document}
と簡潔に書き, 図表を含むファイルは各ディレクトリの中に放りたくなります.

しかし, カレントディレクトリが移動しないため, 愛用の epsbox.sty では

\psbox{02chap/hoge.eps}
などと書かないといけません. このため, 例えば記述の一部を別の章に移動させたり, 章自体の順番を変える時面倒なことになります.

まぁ, ディレクトリ名を章番号でなく, 章の内容を表す文字列にしておくという 手もありますが, 普段の作業効率が下がるんですよ.

カレントディレクトリを変える方法とかいろいろ探してみたのですが見つからず, 結局 psbox だけ動けばいいやと以下のようにしました.

\newcommand{\CURDIR}{./}

\def\Input#1#2{ %
\renewcommand{\CURDIR}{#1}%
\input{\CURDIR#2} %
} %

\def\Psbox[#1]#2{\epsfile{file=\CURDIR#2,#1}}
使い方はメインで input の代わりに
\Input{02chap/}{chap.tex}
と入力し, その中で
\Psbox{hoge.eps}
とします.

10. 付録の扱い

付録は章のように書きたいけど, 第 n 章と書かれると嫌です. 以降 chapter と書いても第 n 章と出ないためには 以下のようなフレーズを加えます.

\backmatter

ただし, このままだと図や表, 式に見えない章番号が わいてきます. これは以下のように書いてごまかします. 美しくないんですが, 数が少ないんでほっといています.

\chapter{付録 B: ほげほげ}

\makeatletter
\renewcommand{\theequation}{% 式
B.\arabic{equation}}
\renewcommand{\thefigure}{% 図
B.\arabic{figure}}
\renewcommand{\thetable}{% 表
B.\arabic{table}}
\setcounter{figure}{0}
\setcounter{table}{0}
\setcounter{equation}{0}
\makeatother

式図表以外の物があった場合は同様に書けばなんとかなるでしょう.

11. 簡単なサンプル

以上のことをまとめた簡単なサンプルを ここに置いておきます. はじめに書いたように platex コマンドでコンパイルします.


2009.3