初版 2001.12.21
最終改訂 2013.12.19
Latex 2e を使って教科書を作成する ノウハウを説明します。 このページは latex 2.09 の時代に作成したものを 一部書き換えたものなので、latex 2.09 に関する 記述が含まれている可能性があります。
図を取り込みたい場合は、pdf あるいは eps 形式で 図を作成し、その図を取り込みます。私は eps 形式で作っています。 eps 形式の図の作成は「グラフは独自ソフト」 「回路図などは Illustrator」を使います。
eps の図を取り込むには、\begin{document} の手前で
\usepackage{graphicx}と宣言し、図を取り込む場所で
\includegraphics[scale=0.6]{op-amp.eps}
のようにファイル名と縮尺を指定します。図のサイズを 指定する方法として、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] にすると、「図だけのページ」 を作らざるをえなくなった場合、これ以降の全ての図が章末に 集まってしまいます。その場に図を置きたい場合は [htbp] とします。
図を配置する場合、次のように書きます。
\begin{figure}[tbp] \begin{center} \includegraphics[scale=0.6]{a.eps} \end{center} \vskip -\lastskip \vskip -3pt \caption{図の説明} \label{fig:label-1} \end{figure}
センタリングのため、図とキャプションの間に縦の空白が入って しまうので、それを \vskip -\lastskip で打ち消します。 それでも図とキャプションの間が広すぎるように 思うので、上の例ではさらに 3pt 負の値の \vspace を 挿入して間隔を調整しています。
\def\figcaptionmodify{\vskip -\lastskip \vskip -3pt}
のように、この部分を \figcaptionmodify という命令で 定義すれば、1 命令で済みます。
2 つの図を左右に並べる場合は、次のように ミニページを二つ横に並べ、それぞれの ミニページにおいてセンタリングします。
\begin{figure}[tbp] \begin{minipage}[b]{0.49\textwidth} \begin{center} \includegraphics[scale=0.6]{a.eps}\\ (a) 左側の図の説明 \end{center} \end{minipage} \hfill \begin{minipage}[b]{0.49\textwidth} \begin{center} \includegraphics[scale=0.6]{b.eps}\\ (b) 右側の図の説明 \end{center} \end{minipage} \vskip -\lastskip \vskip -3pt \caption{図の全体説明} \label{fig:label-2} \end{figure}
ミニページを並べる場合、上記のように \hfill を 使う方法と、
\begin{center} \begin{minipage}[b]{0.4\textwidth} \end{minipage} \hspace{2zw} \begin{minipage}[b]{0.4\textwidth} \end{minipage} \end{center}
のように図の間隔を指定した幅にして、センタリングする する方法の2つがあります。
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 では \documentclass[11pt]{jarticle} です。 11 pt のときだけ、 和文フォントと英文フォントの大きさの比率が 異なっていることに注意してください。
ベースラインスキップのデフォルト値はかなり狭いめになっています。 私は、日本語を読みやすく表示するには、 ベースラインスキップは和文フォントの 1.6 〜 2 倍くらいが良いと思います。 一段組みのときは 1.7 以上は欲しいです。 ベースラインスキップは
\baselineskip 1.9zw
のように再設定する必要があります。 日本語のフォントは正方形なので 1zw と 1zh は等しいはずですが、 10pt のとき 1zw = 9.62216pt, 1zh = 9.16443 pt と異なって います。従って、zh という単位は使わない方が良いでしょう。 なお、デフォルトの フォントサイズなどの値は、文書中に 以下のように書くと表示することが出来ます。
\noindent 1zw = \settowidth{\dimen0}{\kern1zw}\the\dimen0 \\ 1zh = \settowidth{\dimen0}{\kern1zh}\the\dimen0 \\ headsep = \the\headsep \\ baselineskip = \the\baselineskip \\ textwidth = \the\textwidth \\ textheight = \the\textheight \\ headsep = \the\headsep \\このことは、「Latex 2ε 階梯 第2版」の p.210 に 書かれています。
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 行目のベースラインまでの距離
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}% }
\eqnarray 環境は使いにくいので、 私は Roland Winkler 氏が作成された eqnarray.sty (equationarray という命令が 使えるようになる) を使って います。 ここ にあります。zip ファイルをダウンロードして
% platex eqnarray.ins
で eqnarray.sty が生成されます。 使用例を以下に示します。
\begin{equationarray}{cclc} a & b & c & d \\ e & f & g & h \\* i & j & k & l \\* [3em] m & n & o & p \end{equationarray}
このように、縦の列が 3 列以外の場合にも使えます。 \\* は改ページを抑止します。
\\ [3em] のように記述すると、 特定の行だけ行間を指定できます。 全ての行について指定するには
\def\arraystretch{1.9}のようにします。\arraystretch のデフォルト値は 1 です。
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 \includegraphics[scale=\myscale]{a.eps}引数を取る場合は #1 #2 ... で表します。例を示します。
\def\mycommand#1{-- #1 --}% マクロの定義 \mycommand{あ}% 使用例実用的な例としてページ番号の形式を -1- のようにするときは、 以下のように記述します。
\renewcommand{\thepage}{-- \arabic{page} --}
Latex で使われる主要なカウンタ変数を以下に示します。
変数名 | 意味 |
---|---|
page | ページ番号 |
figure | 図番号 |
table | 表番号 |
以下のような状況を考えます。
-------------------------------------------------------- 1. 見出し これは、手動で作った箇条書きです。見出しの番号なども 自分でつけています。 --------------------------------------------------------
このような場合、見出しの行と 内容の行の間に改ページが入ると困ります。 改ページを抑止するには次のような順序で \nopagebreak 命令を 入れます。この例では \vspace や \hspace を入れる場合の 位置も併せて示しています。
-------------------------------------------------------- \noindent 1. 見出し \nopagebreak \vspace{1zw} \noindent \hspace{2zw}これは手動で作った箇条書きです。・・・・ --------------------------------------------------------
\documentclass{jbook} のとき jbook.cls という クラスファイルが使われます。 クラスファイルの中に \chapter などの コマンドの定義が \newcommand 命令を使って書かれています。 FreeBSD の場合 jbook.cls は /usr/local/share/texmf/ptex/platex/base 以下に あります。
\chapter などのコマンドをカスタマイズするには、 jbook.cls の内容を上書きする必要があります。
例えば、図のキャプションの付き方が デフォルトでは「図1: キャプション」と なるのを「図1 キャプション」にするには、 jbook.cls の中の \long\def\@makecaption#1#2{% 以下の 部分を上書きする必要があります。
そのためには、\begin{document} の手前に 再定義した命令を書きます。 私はカスタマイズした設定を customize.sty という ファイルに書き、
\usepackage{customize}
として取り込みます。 customize.sty では @ を含む命令をカスタマイズします。 通常の tex ファイルでは @ は無視されるので、 上記の \usepackage を \input で書く場合、
\makeatletter \input{customize.sty} \makeatother
と書きます。
私が教科書を書く場合、レイアウトは 以下のように設定します。
項目 | 設定値 |
---|---|
用紙サイズ | A4 |
文字サイズ | 11 pt |
マージン | 上下左右に約 3cm |
ベースラインスキップ | 1.9 zw |
以下のようにカスタマイズします。
スケルトンファイル
skeleton.tex からインクルードされる(jbook.cls を
上書き)
skeleton.tex からインクルードされる(自分独自のコマンド)
索引を作るコマンドは \printindex ですが、 これをカスタマイズするには FreeBSD の場合、 /usr/local/share/texmf/tex/latex/base 以下の makeidx.sty をカスタマイズすればよいと 思われます。