久々に jbook で TeX 書く機会を得ました. おかげで本ページのメンテナンスがおろそかになっていました. 執筆作業を通じ, いろいろ調べたり, 開発した知見を書いておきます.
本題に入る前に留意事項を以下に書いておきます.
提出先によって片面印刷か両面印刷かが変わります. 片面両面によって, ページ番号その他を割り振る位置が変わります. その時の変更をスムーズにするため, 最初に以下のような呪文を書いておきます.
\newif\ifBOTHSIDEPRINT \BOTHSIDEPRINTtrue %\BOTHSIDEPRINTfalse |
上記は両面印刷モードです. 片面印刷モードに変える時はコメントの位置を変えます. また, このままでは何も変わりません. 活用は以下に続きます.
ページの上と下 (ヘッダとフッタ) に線が引かれていると, なんだかかっこいい気がします. そこで, はじめ線を引こうと 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} |
上記のままだと, 章が始まるページはヘッダ・フッダがつきません. ヘッダはともかくフッダは無いと統一性に欠ける気がします. ので, 以下のような感じのフレーズを書き加えます.
\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{} } |
経験上, 推敲は印刷して赤ペンを入れるのが効率的ですが, 調子に乗ると「あ〜やっぱり前の方が良かったな」と思う時があります. その時, 以前赤ペンを入れた紙と今の版を見比べるのですが, 段々とどれが新しくでどれが古いか分からなくなります. この場合, 各ページにコンパイルした日付を入れておくと便利です. というわけで適当な所に
\newcommand{\ver}{\today 版} \西暦 |
\hfwidth{\ver \hfil \thepage}}$ |
\hfwidth{\thepage \hfil \ver}}$ |
なお, 最終印刷では上記 \ver の定義を以下のように空にすれば, 表示されなくなります.
\newcommand{\ver}{} \西暦 |
普通だと, 章は必ず奇数ページから始まりますが, 片面印刷だと意味がありませんし, 両面印刷でも第 1 章や付録以外では 必然性を感じません. これは上記の \makeatletter〜other の間に以下のフレーズを追加することで解消されます.
\@openrightfalse |
普通は「表紙」「目次」「第一章」と並べます. 両面印刷では, 表紙の裏面は白紙にして, 目次を奇数ページからはじめ, かつ目次が奇数ページで終われば, 一枚白紙を入れて 第一章も奇数ページからはじめたいと思います.
方法ですが, 表紙裏の白紙は 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{章名} |
と書くといいです.
上記, \tableofcontents の前に
\pagenumbering{roman} |
\pagenumbering{arabic} |
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{02chap/}{chap.tex} |
\Psbox{hoge.eps} |
付録は章のように書きたいけど, 第 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 |
式図表以外の物があった場合は同様に書けばなんとかなるでしょう.
以上のことをまとめた簡単なサンプルを ここに置いておきます. はじめに書いたように platex コマンドでコンパイルします.