†逆襲のOS/2†

日本語pLaTeXのスタイル設定

作成開始日 2013.04.24
最終更新日 2015.12.19

以下では、OS/2版の日本語pLaTeXを使って、書籍の組版をする手順を説明する。ただし、正式な版下を作成するのではなく、原稿の分量とレイアウトの具合を確認するための、ゲラに近い感覚のものとする。紙面のイメージとページ数がほぼ正確に把握できさえすればよく、細かなツメは不要。デザイン的にも凝る必要はない。なお、LaTeXは原則的に環境非依存なので、OS/2固有の話ではない。

【注意】LaTeX2eの文書は\documentclassから始まる。\documentstyleから始めると、旧バージョン(2.09)互換モードで動作するが、2.09モードでは使用できない機能も多いので 注意。

基本レイアウト

判型はB5判の大型本で、基本は二段組み。ただし、見出しは一段。文字の大きさと行間はpLaTeXの標準的な値を使用する(恐らく、文字サイズ10ポイント・行間2/3行程度)。レイアウト上の特徴は3点;

 @段落頭での文字下げはせず、段落間に1行分のスペースを空ける(欧州スタイル?)。
 A写真を使った手順説明が大量にある(ページの左半分に写真、右半分に説明文)。
 B罫線囲みのコラムが大量にある。

具体的には、次のようなイメージの紙面を想定している。

判型 B5判(182mm×257mm)
版面 152mm×217mm
マージン左右15mm、天地20mm
段組 2段
段落間 1行
頭落し なし

用紙サイズ・マージン・版面

最初に、用紙サイズとマージンおよび版面を指定する。しかし、ここでいきなり難問にぶつかる。ここではB5判を使用しているが、実は《JIS規格のB5判》と《ISO規格のB5判》は、大きさがかなり異なるのだ。JIS規格の方が天地左右とも数ミリずつ大きい。ところが、TeXにしろGSViewにしろ、基本的にはISO規格のB5判にしか対応していない。対応策はいろいろあるのだが、正確な版下を作成するときには、かなり厄介な問題になると思う。pLaTeXを使えば、JIS B5判のDVIファイルを作ることは難しくないが、プレビューやプリントアウトで正確なサイズや位置を確認するのが非常に面倒になる。しかし、冒頭に述べたとおり、ここではゲラレベルの出力で良いので、あまり気にしないことにする。サイズの違いはマージンサイズにしわ寄せが行くことになるが、それで良しとする。

まず、マージンは天地各20mm、左右各15mmとする。すると、用紙サイズとマージンから、版面が必然的に決まる。天地は257mm−20mm×2=217mm、左右は182mm−15mm×2=152mmとなる。しかし、LaTeXではこのように用紙サイズとマージンから版面を決めるのではない。明示的に指定するのは、用紙サイズ、片方のマージン(天とノド)、版面サイズで、 これらの値から残りのマージン(地と小口)が自動的に決まる。以上を踏まえて、プリアンブル部でサイズ指定をすると、

\documentclass[10pt,b5paper]{jbook}	%JIS B5判の書籍スタイル
\setlength{\oddsidemargin}{15mm}	%奇数ページのノド
\setlength{\evensidemargin}{15mm}	%偶数ページのノド
\setlength{\topmargin}{20mm}		%天
\setlength{\textwidth}{152mm}		%版面(左右)
\setlength{\textheight}{217mm}		%版面(天地)
で良さそうなものだが、実はこれでは全然ダメ。まず、何と言っても

マージンには1インチのオフセットが設定されている

つまり、上記の設定では、ノドは15mmではなく40.4mmになってしまうわけだ。15mmにしたければ、15−25.4=-9.6mmを設定しなくてはならない。が、それも判りにくいので、15mmに設定したあと\addtolength命令で1インチ引くことにする。

また、天(\topmargin)は版面までの長さではなく、ヘッダまでの長さである。したがって、ヘッダ領域の長さ(このスタイルでは11mm)を差し引く必要がある。もちろん、天にも1インチのオフセットが設定されているので、1インチと11mm引かなくてはならない。

さらに、版面の天地は、所定の長さよりも1mm程度長くしておくことを推奨する。基本的にTeXは垂直サイズがわずかでもオーバーすると改ページをしてしまうため。その場合、最下行が丸々1行抜けたように見えてしまう。もちろん、1mm伸ばしても本質的な解決になるわけではないが、それなりに効果は実感できる。

以上をまとめると:

\documentclass[10pt,b5paper]{jbook}	%JIS B5判の書籍スタイル
\setlength{\oddsidemargin}{15mm}	%奇数ページのノド
\addtolength{\oddsidemargin}{-1in}	%オフセット分引く
\setlength{\evensidemargin}{15mm}	%偶数ページのノド
\addtolength{\evensidemargin}{-1in}	%オフセット分引く
\setlength{\topmargin}{20mm}		%天
\addtolength{\topmargin}{-1in}		%オフセット分引く
\addtolength{\topmargin}{-11mm}		%ハシラスペース分引く
\setlength{\textwidth}{152mm}		%版面(左右)
\setlength{\textheight}{218mm}		%版面(天地)+1mm
用紙とマージンの設定にこれだけ掛かる。

なお、dvipsでdviファイルをPSファイルに変換するときにも、-tオプションでB5判指定が必要。たとえば、testというdviファイルをPSに変換する場合は、以下のようにする。無指定だとA4判になる。

	dvips -t b5 test.dvi
ちなみに、このB5判はISO規格のため、地と小口のマージンにサイズのしわ寄せが来る。JISのB5判にしたければ、/texmf/dvips/config/config.psの中でサイズ指定を変更すればよい。
@ b5 182mm 257mm	*176mm 250mmをJIS B5に変更
ただし、結局私はこの変更をしないことにした。GSViewのB5もISO B5であるため、いじらない方がサイズや位置の確認の際に便利だった。無論、GSViewのB5もJIS B5に書き換えてしまえば良いのだろうが、変更方法が今一つ判らなかった(printer.iniをいじれば良さそうなのだが)。

ヘッダ・フッタ

LaTeXの標準的なヘッダ・フッタの書式は日本の一般的な書籍には適さない。また、オプションが貧弱で自由度も低い。しかし、fancyhdr.sty(Piet van Oostrum氏作)というスタイル・ファイルを使えば、かなり自由に設定できる。fancyhdr.styをネットからダウンロードして、/usr/share/texmf/ptex/platex/baseに放りこむと良い。

たとえば、ヘッダは左ページが章タイトル、右ページが節タイトルとし、フッタ部にラインを引いてその下にノンブルを出力する場合には;

\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyfoot{}
\fancyhead[LE]{第1章 レンズマウントの基礎知識}
\fancyhead[RO]{1-1 レンズマウントと絞り制御の変遷}
\fancyfoot[LE]{\thepage}
\fancyfoot[RO]{\thepage}
\renewcommand{\footrulewidth}{0.4pt}
\renewcommand{\headrulewidth}{0.0pt}

二段組み設定

この本では、本文は二段組みが基本になる。LaTeXで二段組みを実現するには、二種類の方法がある。一つは、documentclassにtwocolmunを指定して、基本スタイル自体を二段組みにしてしまう方法。もう一つは、基本スタイルは一段組みのままにして、部分的にmulticols指定をする方法。この本では、章や節の見出し部分は一段組みになるし、図表等の変則的な要素も入るため、後者の方が適している。

基本構文は簡単。\begin{multicols}{2}と\end{multicols}で挟めばよい。

\begin{multicols}{2}
なんたらかんたら…
\end{multicols}
ただし、この命令はデフォルトでは使えない。先頭の\documentclass行のすぐ下あたりに、
\usepackage{multicol}
として、multicolパッケージを読み込んでおく必要がある。また、右段と左段のスペースや、中心線の設定はプリアンブル部で次のようにする(左右の段間7mm、罫線0.2mm)。
\setlength{\columnsep}{7mm}
\setlength{\columnseprule}{0.2mm}
ただし、今回は中心線は入れないことにしたので、columnsepruleの設定行は先頭に%を付けてコメントアウトしておいた。

【参考】見出しに段組み横断で水平線を付けるときは\hruleを使う。太さ(高さ)は \hrule height 0.5mmのように指定する。

段落の頭下げと段落間スペース

通常、日本語の文章では段落の頭を一字下げる。そのため、pLaTeXでも自動的に一字下げるようになっているのだが、これがレイアウトの大きな足枷になる。特に、次で説明するよう図表のスペース確保の際など、かなり困ったことになる。もちろん、\noindentを指定すれば、頭下げを部分的に抑制できるが、そもそもあっていはいけない機能である。本来、一字下げはテキストの段階で全角スペースを入れるがのがスジで、勝手に下げるようなものではない。ましてや、今回は頭下げをなしにして、段落間スペースを入れるというスタイルにするので(つまり、このHTML文書と同じ形式)、なおさら無効化しなくてはならない。
\setlength{\parindent}{0mm}		%頭下げなし
\setlength{\parskip}{\baselineskip}	%段落間1行
なお、\baselineskipは本文の1行分の高さ(行間スペースを含む)を意味する。この指定の仕方ならば、左段と右段の行が不揃いになるのを防ぐことができる(もちろん、途中に図表等の要素が挟まれば別だが)。

また、段落間にはある程度の幅を持たせることができる。たとえば、

\setlength{\parskip}{5.2mm plus 2mm minus 2mm}
とすると、他の要素との兼合いを勘案しながら、段落間を5.2mm±2mmの幅で自動的に加減する。ただ、これもゲラ段階では不要な機能だろう。また、\baselineskipで指定する場合は、このplus/minus表記は使えないようだ。

図スペースの確保

基本的にfigure環境は使わない。figureは二段組みでは非常に使いにくいし(と言うよりmulticols環境内では使えない)、フロートさせたときの厄介さは身に染みて判っているから。そこで、vboxとhboxを組み合わせてスペースを確保し、fboxで囲んで罫線を付ける。また、キャプションが泣き別れにならないように全体をvboxの中にいれる。さらに、勝手に頭下げをされて位置がずれると困るので、noindentを入れておく。たとえば、72mm×50mmの図表スペースを確保するには、以下のようにする(実際のサイズは指定サイズよりも一回り大きくなる)。
\vspace{5mm}
\vbox{
\noindent
\fbox{\vbox to 50mm{\vfill
\hbox to 72mm{\hfill 《図表入る》 \hfill}
\vfill}}
■図1 キャプション
}
【参考】vbox/hboxのサイズ指定は \vbox to XXmm / \hbox to XXmm。また、\vbox{\hsize=XXmm…という指定の仕方もある。

あるいは、frameboxを使えばずっとすっきり書けるが、本来この使い方はpicture環境用。そのためか、プリアンブル部で単位指定をしておく必要がある。逆に、frameboxのサイズ指定に単位を書いてはいけない。ちょっと異和感のある使用方法だ。

\setlength{\unitlength}{1mm}

\begin{document}
…………
\vspace{5mm}
\vbox{\noindent\framebox(72,50){《図表入る》}	%mmを指定してはいけない
■図1 キャプション}

EPS画像の挿入

TeXの文書にはEPS形式の画像を挿入できる。JPG画像の読み込みも可能だが、プレビューア(GSView)とのからみなどで、多少問題がありそうなので、ここでは標準形式とも言えるEPS画像を扱うことにする。

まず、貼り込むEPS画像を用意する。私が使用する標準的な画像はXGAサイズ(1024×768)のJpeg形式だが、これを適当な画像ツール(たとえばPMView)を使って、320×240程度に縮小したEPS画像に変換する。ゲラ出しにフルサイズの画像を挿入するのは無駄だし、JPGをEPSに変換するとサイズが10倍くらいになるので、ディスクスペースの圧迫や動作の鈍重化が問題になる。現実的には縮小は必須と言ってもよいだろう。変換したEPS画像は適当なディレクトリにまとめて置いておくとよい。

【参考】EPSのファイルサイズは、1024×768で約4MB、320×240で400KB台。

EPS画像の読み込みにはgraphicxパッケージを使用する。また、画像の読み込みコマンドは\includegraphicsである。たとえば、カレントディレクトリ直下のphotoディレクトリに入っている001.epsという画像を貼り込むには;

\documentclass{jbook}
\usepackage{graphicx}

\begin{document}
………
\includegraphics[width=72mm]{photo/001.eps}
………
\end{document}
のようにする。これで、001.epsが横72mmのサイズで貼り込まれる。縦サイズはアスペクト比に応じて自動的に決まる(heightオプションで指定することもできる)。

Jpeg画像の挿入

Jpeg画像もほぼ同様な手順で張り込むことができる。ただし、いくつか留意すべき点がある。一つは、graphicxパッケージを読み込む際に[dvipdfm]オプションを付けること。また、作成されたdviファイルはdvipdfmxでPDFファイルに変換すること。dvipsでPSに変換すると、GSViewで表示する際にエラーが発生する。

さらに、\includegraphicsで読み込む際に、bb=というオプションを付けて、画像のサイズを指定すること。どうやら、graphicxパッケージはJpegの画像サイズを自動判別できないらしい。そこで、bbオプションで画像サイズを指定するのだが、下記のようにソースに埋め込むのではなく、外部ファイルで指定することもできる。その場合、ebbというツールを使うと便利。たとえば、

	ebb mypic.jpg
とすると、mypic.bbというファイルが作成され、その中にサイズ情報が書き込まれる。ワイルドカードも使える。このbbファイルが画像と同じディレクトリにあれば、サイズは自動的に参照される。どちらの方法を使ってもよい。

ただし、少し疑問なのは、画像サイズの単位。単純なピクセル単位だと思っていたのだが、bbファイルの中を見ると、どうもそうではないらしい。試してみた限りでは、実際のサイズではなくアスペクト比が合っていれば問題ないようだ。下記の例でも、「bb=0 0 4 3」として試してみたが、結果は同じだった。

\documentclass{jbook}
\usepackage[dvipdfm]{graphicx}

\begin{document}
………
\includegraphics[width=72mm, bb=0 0 1024 768]{001.jpg}
………
\end{document}
なお、前述のようにJpeg→EPS変換を行うとファイルサイズが極端に肥大化するが、このようにJpegをそのまま読み込む方法ならば肥大化現象は起こらない。最終的にはPS/EPSよりも、PDF/JPGに統一する方が良いかも知れない。

囲みコラム

囲みコラムは、要するに罫線で囲みさえすれば良いのだから、たとえば、
\framebox{\vbox{【参考】なんたらかんたら……}}
でもよい。この場合、\vboxは必須。直接frameboxの中に長い文章を入れると、改行されずに長〜い罫線囲みになってしまう。ただし、vboxとframeboxの間には若干のスペースがあるため、vboxの横幅は少し小さめ(-5mm程度)に指定する必要がある。さらに、コラムの中は文字サイズを1段下げてsmallとし、行間をデフォルトのsmallよりも広めに設定し、ついでに先頭の「【」が見栄え良く収まるようにparindentを調整すると…
\framebox{
\vbox{\hsize=67mm \small \baselineskip=4.5mm \parindent=-1.5mm
【参考】なんちゃらかんちゃら……
}
}
と言った感じになる。

しかし、最終的には単なる罫線囲みだけではなく、多少デザイン的にも凝る可能性が高い。その場合、必要なスペースはこうした単純な罫線囲みよりも、かなり大きくなる。また、LaTeXには各種の囲み機能が用意されているので、これを使う方が賢明かも知れない。たとえば、見出し付きで角丸の罫線囲み(itembox)は、次のようになる。

\usepackage{ascmac}

\begin{document}
………
\begin{itembox}[l]{【参考】}
\small \baselineskip=4.5mm
なんちゃらかんちゃら……
\end{itembox}

手順説明

手順説明もこの本のレイアウト上の大きな特徴。ページの左半分に写真を並べ、右半分に各写真の説明を入れる。この場合、写真一枚ごとにmulticols環境を使う。基本は次のような感じになる。
\begin{multicols}{2}
\includegraphics[width=72mm]{photo/001.eps}
@なんたらかんたら…\\
Aなんたらかんたら…\\
Bほんならどうたら…
\end{multicols}
ただし、この方法には問題が二つある。一つは、機種依存の丸囲み数字(@AB…)で、これが直接扱えないのはTeXの大きな問題点。もちろん、方法はある。○と数字を重ね打ちするマクロなどが用意されているのでそれを使えばよい。一番単純なのは、
\textcircled{3}ほんならどうたら…
ただし、テキストの表記自体にTeXのマクロを使うのはかなり抵抗がある。あくまでも、このTeX組みはゲラ出しレベルで、最終的にはプレーンテキストが必要になる(MacのDTPソフトに流し込むことになるはず)。したがって、レイアウト要素にTeXのタグを使うのは何の問題もないが、文字レベルでTeXのタグが出てくるのは相当に困るのだ。仕方がないので、当面、(1)(2)(3)…で代用することにする。

  以前、某出版社からもらったスタイルファイルで、機種依存の丸囲み数字がそのままま通るものがあったような気がするが、今となってはひっぱり出すのも一苦労。そもそも機種依存性が高いので、プレビューアが対応できるかどうかもわからない。そのときは確か、丸囲み数字のグリフを自作(と言うか、DOS/V Super Driversのフォントの移植)した覚えがある。

もう一つの問題点は、この方法だとOverfull \vboxのワーニングが大量に発生すること。実害はないようだが、非常に気持ちが悪い。これは要するに、左段の写真と右段の説明の分量がうまく釣り合っていないときに発生する。そして、たいていは釣り合わないから実質的には常時発生する。そこで、説明文を写真と同じ高さのvboxの中に入れてしまえばよい。写真が72mm×54mmならば、

\begin{multicols}{2}
\includegraphics[width=72mm]{photo/001.eps}
\vbox to 54mm{
(1)うんちゃらかんちゃら\\
(2)なんたらかんたら\\
(3)それそれふにゃふにゃ
}
\end{multicols}
といった具合になる。これでワーニングは激減した。

【参考】強制改行は「\\」または「\newline」

マクロ化とスタイルファイル化

以上を踏まえて、とりあえず次のような独自のスタイルファイル(mybook.sty)を作ってみた。これを\usepackeage{mybook.sty}で読み込んで使えばよい。
%%% パッケージの読み込み %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\usepackage{multicol}
\usepackage{graphicx}
\usepackage{ascmac}

%%% 版面設定 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\setlength{\oddsidemargin}{15mm}
\addtolength{\oddsidemargin}{-1in}
\setlength{\evensidemargin}{15mm}
\addtolength{\evensidemargin}{-1in}
\setlength{\topmargin}{20mm}
\addtolength{\topmargin}{-1in}
\addtolength{\topmargin}{-11mm}	%ハシラのスペース
\setlength{\textwidth}{152mm}
\setlength{\textheight}{218mm}	%本来は217mm、1mmはギリギリの場合のアソビ

\setlength{\columnsep}{7mm}
%\setlength{\columnseprule}{0.2mm}

\setlength{\parindent}{0mm}

\setlength{\parskip}{\baselineskip}
%\setlength{\parskip}{5.2mm plus 2mm minus 2mm}

\setlength{\unitlength}{1mm}

%%% マクロ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\def\コラム#1#2{
\begin{itembox}[l]{#1}\small \baselineskip=4.5mm
#2
\end{itembox}
}

\def\手順#1#2{
\begin{multicols}{2}
\includegraphics[width=72mm]{#1}
\vbox to 54mm{#2}
\end{multicols}
}

\def\図#1#2#3{
\vspace{\baselineskip}
\vbox{
\noindent
\framebox(#2,#3){《図表入る》}
#1}
}

【逆襲のOS/2目次】 【ホーム】