TeX を使った論文作成のノウハウ

初版 2001.12.21
最終改訂 2002.8.6

ここでは、Latex 2.09 を使って論文作成をする場合の ノウハウを説明します。Latex 2ε でもほとんど そのまま応用できるでしょう。

1. 役に立つ参考図書

以下の 5 冊は是非とも揃えておきたい本です。
「Latex 美文書作成入門」  奥村晴彦
日本における TeX の第一人者であると思われる 奥村先生が書かれた本です。この本の 13 章の「スタイルファイルの 修正法」の部分は大変有益です。残念ながらこの本は絶版だと思われます。 後継本として「Latex 入門 ─美文書作成のポイント─」が出版され、 さらに、「Latex 2ε 美文書作成入門」が出版されています。 しかし、残念ながら Latex2e の本からはスタイルファイルの 修正法の部分が消えてしまいました。
「LaTeX 2ε 階梯 第2版」  藤田眞作
奥村先生と双璧をなすと思われる藤田先生が書かれた本です。 さまざまな実用的なテクニックが満載されています。
「LaTeX 2ε 文典」  生田誠三
様々なコマンドを辞書的に説明した本です。非常に細かいテクニックが 載っていることと、目次や索引が非常に工夫されていることが特徴です。 使い慣れると手放せない一冊です。
「明快 TeX −すぐに使える全機能解説−」  渡辺了介 訳
Latex のスタイルファイルをいじるには、結局 TeX の知識が 必要になります。この本は TeX の全機能を懇切丁寧に解説しており、 索引も充実しています。
「Latex スタイル・マクロ ポケットリファレンス」  奥村晴彦 他
(1.1a) のような式番号を付ける方法、図表を その場に出力する方法など 100 を超える 役に立つスタイルファイルが収録されています。 残念ながら、この本は絶版のようです。

2. 役に立つ Web サイト

特にこのサイト は必須です。

3. 基礎的な事項

Latex を使うにあたって、知っておくべき知識を箇条書きにします。

4. 図の配置

図を取り込みたい場合は、ポストスクリプト ( PostScript : PS と 略されることが多い ) 形式で図を作成し、その図を取り込みます。 PS の図を取り込むにはそのためのスタイルファイルを読み込む必要が あります。スタイルファイルには何種類かありますが、 私は NTT の風間一洋さんが作られた epsf.sty を 使っています。epsf.sty を使用する場合、

\documentstyle[epsf]{jarticle}
として、epsf.sty を使用することを指示し、図を取り込む場所で
\epsfile{file=abc.eps,scale=0.6}

のようにファイル名と縮尺を指定します。図のサイズを 指定する方法として、width=6cm のように定義する方法も ありますが、これはお薦めしません。図ごとに縮小率が 異なってしまいます。scale=0.6 のように指定する方が 統一がとれた感じになります。

LaTeX のデフォルトでは 1 ページに納められる図の上限数が 小さすぎます。理系の論文では、図がどんどん後ろのページへ ずれていくことが多くなります。これを防止するために、 以下のように宣言します。

\setcounter{topnumber}{5}%    ページ上部の図表は 5 個まで
\def\topfraction{1.00}%       ページの上 1.00 まで図表で占めて可
\setcounter{bottomnumber}{5}% ページ下部の図表は 5 個まで
\def\bottomfraction{1.00}%    ページの下 1.00 まで図表で占めて可
\setcounter{totalnumber}{10}% ページあたりの図表は 10 個まで
\def\textfraction{0.04}%      ページうち本文が占める割合の下限
%        これを 0 にすると本文が 1 行だけのページが出来る
%        0.04 くらいにすると 1 行だけのページは防げる
%        0.1 くらいが良いかも知れない
\def\floatpagefraction{0.7}%  図表だけのページは少なくとも
                           %  これだけを図表が占める

そして、\begin{figure} や \begin{table} などのフローティング の配置は [tbp] を指定します。[tb] にすると、「図だけのページ」 を作らざるをえなくなった場合、これ以降の全ての図が章末に 集まってしまいます。

図を配置する場合、次のように書きます。

\begin{figure}[tbp]
\begin{center}
\epsfile{file=abc.ps,scale=0.7}
\end{center}
\vskip -\lastskip \vskip -3pt
\caption{図の説明}
\label{fig:label-1}
\end{figure}

センタリングのため、図とキャプションの間に縦の空白が入って しまうので、それを \vskip -\lastskip で打ち消します。 それでも図とキャプションの間が広すぎるように 思うので、上の例ではさらに 3pt 負の値の \vspace を 挿入して間隔を調整しています。

2 つの図を左右に並べる場合は、次のように textwidth の 0.49 倍の幅を持つミニページを二つ横に並べ、それぞれの ミニページにおいてセンタリングします。

\begin{figure}[tbp]
\begin{center}
\begin{minipage}[b]{0.49\textwidth}
   \begin{center}
   \epsfile{file=a.eps,scale=0.6}\\
   (a) 左側の図の説明
   \end{center}
\end{minipage}   
\begin{minipage}[b]{0.49\textwidth}
   \begin{center}
   \epsfile{file=b.eps,scale=0.6}\\
   (b) 右側の図の説明
   \end{center}
\end{minipage}   
\end{center}
\vskip-\lastskip
\caption{図の全体説明}
\label{fig:label-2}
\end{figure}

figure 環境はフローティングといい、図が挿入される場所を TeX が 決定します。図や表を指定した位置に入れたい場合は here.sty を 使い、

\begin{figure}[H]

と指定すると、思い通りの位置に入れることが出来ます。 何らかの理由で、figure 環境を使いたくない場合は、 次のようにすれば、手動で図番号を設定することが出来ます。

yfigcaption という命令を作ります。

\def\yfigcaption#1{
\addtocounter{figure}{1}                             % 図のカウンタを一つ進める
\def\@currentlabel{\arabic{chapter}.\arabic{figure}} % 図番号の設定
図\@currentlabel #1                                 % キャプションを書く
\addcontentsline{lof}{figure}{\protect\numberline {\@currentlabel}{\ignorespaces #1}}%
                                              % \listoffigures で図目次を作るときに備える
}

本文中で次のように使います。

\begin{center}
\epsfile{file=fname,scale=0.5}\\
\yfigcaption{キャプション}
\label{ラベル名}
\end{center}

\label 命令は内部で \@currentlabel を使います。そこで、 \yfigcaption の中で \@currentlabel を定義しておかなくてはなりません。 ここでは \@currentlabel という @ を含む命令を定義しています。 @ を含む命令の定義は .sty ファイルの中で書かないと 有効にならず、.tex ファイルの中で書いても無視されます。 .tex ファイルの中で @ を含む命令を定義する場合は、

\makeatletter
@ を含む命令の定義
\makeatother

のように \makeatletter と \makeatother で囲んで下さい。

5. 文字の大きさと baselineskip に関する知識

TeX では、和文フォント(全角文字)の大きさは欧文フォント(半角文字) よりも若干小さめに設定されます。指定した文字サイズ(欧文フォントのサイズ)に 対する和文フォントのサイズ、ベースラインスキップは 以下のようになります。単位はポイントです。 TeX の場合、「1 inch = 2.54 cm = 72.27 point」であり、 通常の「1 inch = 72 point」とは異なりますので注意が必要です。

指定した文字サイズ(=英文フォントサイズ)和文フォントサイズ和文÷英文ベースラインスキップベースラインスキップ÷和文フォントサイズ
10 9.62216 0.962216 15 1.56
11 10.53625 0.95784 15.5 1.47
12 11.54659 0.962216 16.5 1.43

例えば、MS-Word ではデフォルトの和文文字サイズは 10.5 pt です。 これに対応するのは TeX では \documentstyle[11pt]{jarticle} です。 11 pt のときだけ、 和文フォントと英文フォントの大きさの比率が 異なっていることに注意してください。

ベースラインスキップのデフォルト値はかなり狭いめになっています。 私は、日本語を読みやすく表示するには、 ベースラインスキップは和文フォントの 1.6 〜 2 倍くらいが良いと思います。ゆえに、 ベースラインスキップは

\baselineskip  1.9zw

のように指定するのが良いと思います。 日本語のフォントは正方形なので 1zw と 1zh は等しいはずですが、 10pt のとき 1zw = 9.62216pt, 1zh = 9.16443 pt と異なって います。従って、zh という単位は使わない方が良いでしょう。 なお、デフォルトの フォントサイズなどの値は、文書中に 以下のように書くと表示することが出来ます。

\noindent
1zw          = \settowidth{\dimen0}{\kern1zw}\the\dimen0 \\
headsep      = \the\headsep \\
baselineskip = \the\baselineskip \\
textwidth    = \the\textwidth \\
textheight   = \the\textheight \\
headsep      = \the\headsep \\
このことは、「Latex 2ε 階梯 第2版」の p.210 に 書かれています。

6. textwidth, textheight の設定

TeX は左端と右端を揃えようとするので、textwidth の 指定方法として、

\textwidth = 15cm

のような指定方法はいけません。こうすると、

□ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □
□□□□□□。

のような体裁になってしまいます。TeX はデフォルトでは ベタ組(文字と文字の間の間隔は 0 pt)です。ですから、 最終行はベタ組になっています。しかし、その他の行は textwidth の幅の左端と右端を合わせるために、文字と 文字の間にすき間を作ります(あるいは詰めます)。 これでは、美しくありません。 textwidth は必ず

\textwidth = 40zw    %  全角文字 40 字分

のように全角文字の文字幅の整数倍になるように 設定してください。

textheight に関しては、

\textheight 20cm

のように指定しても大丈夫です。行間は baselineskip で 設定された値になります。しかし、章の見出しや図を含むページ だけが他のページよりも縦に長くなります。それは、美しくない ので、例えば、行数を 34 行に設定するとき 以下のように記述します。

\setlength{\textheight}{33\baselineskip}
\addtolength{\textheight}{\topskip}
% topskip は文字領域の上端から 1 行目のベースラインまでの距離

7. 箇条書きのカスタマイズ

Latex のデフォルトの中で箇条書きには不満点があります。 箇条書きの前後に大きな行間が空き、箇条書きの文章の行間も 普通の文書より広い目になります。これは、美しくありません。 そこで、私は箇条書きの環境として itemize2 , enumerate2 という 環境を自作して使っています。以下に示します。

%------------------ 箇条書き --------------------

\newenvironment{itemize2}%  
{%
   \begin{list}{$\bullet$\ \ }% 見出し記号/直後の空白を調節
   {%
      \setlength{\itemindent}{0pt}
      \setlength{\leftmargin}{3zw}%  左のインデント
      \setlength{\rightmargin}{0zw}% 右のインデント
      \setlength{\labelsep}{0zw}%    黒丸と説明文の間
      \setlength{\labelwidth}{3zw}%  ラベルの幅
      \setlength{\itemsep}{0em}%     項目ごとの改行幅
      \setlength{\parsep}{0em}%      段落での改行幅
      \setlength{\listparindent}{0zw}% 段落での一字下り
   }
}{%
   \end{list}%
}

%---------- 番号つき箇条書き -----------

\newcounter{enum2}
\newenvironment{enumerate2}{%
   \begin{list}%
   {%
      \arabic{enum2}.\ \,%  見出し記号/直後の空白を調節
   }%
   {%
      \usecounter{enum2}
      \setlength{\itemindent}{0zw}%  ここは 0 に固定
      \setlength{\leftmargin}{3zw}%  左のインデント
      \setlength{\rightmargin}{0zw}% 右のインデント
      \setlength{\labelsep}{0zw}%    黒丸と説明文の間
      \setlength{\labelwidth}{3zw}%  ラベルの幅
      \setlength{\itemsep}{0em}%     項目ごとの改行幅
      \setlength{\parsep}{0em}%      段落での改行幅
      \setlength{\listparindent}{0zw}% 段落での一字下り
   }
}{%
   \end{list}%
}

8. 変数やマクロの使い方

Latex で整数型変数を使う場合は次のようにします。

\newcounter{count}%        変数の宣言
\setcounter{count}{6}%     値の代入
\addtocounter{count}{3}%   足し算
\addtocounter{count}{-2}%  引き算
\thecount%                 値を表示 ( TeX の命令 )
\arabic{count}%            値を表示 ( Latex の命令 )

長さを表す変数を使う場合は次のようにします。

\newlength{\len}%            変数の宣言
\setlength{\len}{10cm}%      値の代入
\addtolength{\len}{-5cm}%    引き算
\setlength{\len}{0.5\len}%   かけ算
\the\len%                    値の表示
\vspace{\len}%               使い方の例

マクロを定義する場合は \def コマンドを使います。 引数を取らないマクロの例を示します。

\def\myscale{0.6}%           マクロの定義  \myscale = 0.6
\epsfile{file=abc.ps,scale=\myscale}
引数を取る場合は #1 #2 ... で表します。例を示します。
\def\mycommand#1{-- #1 --}%   マクロの定義
\mycommand{あ}%               使用例
実用的な例としてページ番号の形式を -1- のようにするときは、 以下のように記述します。
\renewcommand{\thepage}{-- \arabic{page} --}

Latex で使われる主要なカウンタ変数を以下に示します。
変数名意味
pageページ番号
figure図番号
table表番号

9. 改ページの抑止

以下のような状況を考えます。

--------------------------------------------------------
1. 見出し

  これは、手動で作った箇条書きです。見出しの番号なども
自分でつけています。
--------------------------------------------------------

このような場合、見出しの行と 内容の行の間に改ページが入ると困ります。 改ページを抑止するには次のような順序で \nobreak 命令を 入れます。この例では \vspace や \hspace を入れる場合の 位置も併せて示しています。

--------------------------------------------------------
\noindent 1. 見出し

\nobreak
\vspace{1zw}
\noindent
\hspace{2zw}これは手動で作った箇条書きです。・・・・
--------------------------------------------------------

10. カスタマイズ

LaTex のデフォルトの設定をカスタマイズするには、 スタイルファイルを修正する必要があります。 スタイルファイル中で \def された ものを .tex ファイル中で再定義するときは、 .tex の中では @ を含む命令は無効なので、 \makeatletter を使って @ を含む命令を 有効にして下さい。

スタイルファイルを修正する場合、デフォルトのスタイルファイルを .tex ファイルがあるディレクトリにコピーしてきて、名前を変える のが分かりやすい方法だと思います。

たとえば、documentstyle が jarticle で、11pt の場合、 次の二つのスタイルファイルが使われます。

/usr/local/share/tex/ainputs/jarticle.sty
/usr/local/share/tex/ainputs/jart11.sty

jarticle.sty の 9 行目の

\input jart1\@ptsize.sty\relax

によって、jart11.sty が読み込まれます。 例えば、図のキャプションの付き方が デフォルトでは「図1: キャプション」と なるのを「図1 キャプション」にするには、 jarticle.sty の中の

long\def\@makecaption#1#2{
 \vskip 10pt
 \setbox\@tempboxa\hbox{#1: #2}
 \ifdim \wd\@tempboxa >\hsize \unhbox\@tempboxa\par \else \hbox
to\hsize{\hfil\box\@tempboxa\hfil}
 \fi}

の部分の 3 行目を以下のように変更すればよろしい。

 \setbox\@tempboxa\hbox{#1\ \ \ #2}

11. 究極のカスタマイズ

スタイルファイルの中で定義されていない命令が多数あります。 例えば、jbook スタイルファイルでは \chapter{ } 命令の 中で \cleardoublepage という 命令が呼ばれています(現在のページが偶数なら改ページを 1 回 実行し、奇数なら改ページを 2 回実行する。その結果、章の始めは 奇数ページから始まる)。しかし、この命令はスタイルファイルの 中には書かれていません。

その他にもスタイルファイルには書かれていない LaTeX の命令が 多数あります。このような命令をカスタマイズするにはどうすれば よいのか? これらの LaTeX の内部命令は

/usr/local/share/tex/inputs/latex.tex

に書かれています。latex.tex の中のカスタマイズしたい場所 を、自分のスタイルファイルの中にコピーして、変更すると その変更が反映されます。 私が博士論文を書いたときは、latex.tex での 定義をカスタマイズする必要がありました。


私が博士論文を書いた場合のカスタマイズ

私が博士論文を書いたときのカスタマイズを解説し、 その時に使ったスタイルファイルと論文のスケルトン を公開します。卒論、修論、D論を書く人は参考に して下さい。

私はD論を以下のスタイルで作成しました。
項目設定値
用紙サイズA4
文字サイズ11 pt
マージン上下左右に約 3cm
ベースラインスキップ1.8 zw

以下の点をカスタマイズしました。

博士論文のスケルトンファイル
上のファイルからインクルード される(箇条書きの定義)
jbook.sty をカスタマイズしたもの
jbk11.sty をカスタマイズしたもの
電子情報通信学会のスタイルファイル のうち、参考文献の部分のみを抜粋
epsf.sty ( そのまま )