標準クラス

LaTeX の標準クラス——articlereportbookletter、それに古い slides——のうち、最初の三つは別々に書かれたものではありません。classes.dtx という一つのソースから、オプションを変えて生成された三つの出力です。TeX Live 2024 同梱の report.clsbook.cls はどちらも 750 行弱ありますが、diff に現れる行はわずか 67 行。つまり「報告書」と「書籍」を隔てているのは、その 67 行だけです。このページはその 67 行が何を言っているのかを読み解きます。章を持つか、片面か両面か、\frontmatter は何を切り替えるか、既定オプションはどこで食い違うか——すべて実際の出力で確かめながら進めます。

article・report・book は同じソースから生まれた

三つのクラスは同じ一枚の設計図から刷られています。article.cls を開くと冒頭に「classes.dtx (with options: article)」とあり、report.clsbook.cls にも同じ行が別のオプション名で並びます。だから違いを知りたければ、解説書を読むより diff を取るほうが速い。article.clsreport.cls の差分は 232 行、report.clsbook.cls の差分は 67 行です。数字の大小がそのまま三者の距離を表しています——article から report への飛躍(章という階層がまるごと増える)に比べれば、report から book への変化はずっと小さい。以下の節は、その差分に実際に載っている項目だけを順に扱います。

shell
# the header that gives the game away, and the two distances
head -8 "$(kpsewhich book.cls)" | grep classes.dtx
#   %% classes.dtx  (with options: `book')

diff "$(kpsewhich article.cls)" "$(kpsewhich report.cls)" | grep -c '^[<>]'   # 232
diff "$(kpsewhich report.cls)"  "$(kpsewhich book.cls)"   | grep -c '^[<>]'   # 67

\chapter があるかないか——そして番号が何個ずれるか

\chapter を持つのは reportbook の二つだけで、article にはありません。article\chapter{...} と書くとエラーは「そんなクラスにはない」とは言わず、! Undefined control sequence. とだけ出ます——LaTeX にとって、存在しないコマンドと打ち間違えたコマンドは同じものだからです。しかし本当に注意すべきなのは、この一つの違いが番号の付きかたを 四か所 変えてしまうことです。report.clsbook.cls では \newcounter{section}[chapter] と宣言されており、節番号は章ごとにリセットされて 2.1 の形になります。図・表・数式・脚注の番号も同様に章ごとにリセットされます(\@addtoreset{equation}{chapter} など)。そして secnumdepth の既定値が article では 3、reportbook では 2 です。

この secnumdepth の差は、実際に組んでみるとすぐ目に見えます。同じ本文——\section\subsection\subsubsection を一つずつ——を二つのクラスで組むと、article は「1 / 1.1 / 1.1.1」と三段すべてに番号が付き、report は「0.1 / 0.1.1 / (番号なし)」になります。reportbook では \subsubsection に既定で番号が付かない——「小々節の番号が出ない」という症状の原因はほぼこれで、\setcounter{secnumdepth}{3} をプリアンブルに書けば直ります。もう一つの「0.1」も見逃せません。reportbook\chapter を置かずに \section から書き始めると、章カウンタが 0 のまま 0.10.2 と番号が振られます。章のない文書を書いているなら、それは article を選ぶべきだったという合図です。

latex
% same body, two classes: article numbers three levels, report only two
\documentclass{article}   % -> 1 Sec / 1.1 Sub / 1.1.1 Subsub
%\documentclass{report}   % -> 0.1 Sec / 0.1.1 Sub / Subsub (unnumbered)
\begin{document}
\section{Sec}\subsection{Sub}\subsubsection{Subsub}
\end{document}

% in report/book, restore the third level with:
%   \setcounter{secnumdepth}{3}

ついでに、よく信じられている誤解を一つ潰しておきます。\part は章番号をリセットしません。 report.cls にも book.cls にも \newcounter{chapter} としか書かれておらず、part に紐づけるオプション引数がありません。実際、第 I 部に 2 章を置いてから第 II 部を始めると、次の章は第 1 章ではなく 第 3 章 になります(両クラスとも同じ)。部ごとに番号を振り直したければ、プリアンブルで \counterwithin{chapter}{part} などを自分で宣言する必要があります。なお \part の見た目はクラスによって違い、article では本文の流れの中に置かれる見出しですが、reportbook では改ページして中央に大きく組まれた独立ページになります。

report と book の違い——同じ原稿が 5 ページと 9 ページになる

二つのクラスの分かれ目は、たった一行の既定オプションです。report.cls\ExecuteOptions{letterpaper,10pt,oneside,onecolumn,final,openany}book.cls...,twoside,onecolumn,final,openright}。ここから先はすべて結果です。openright は章を右ページ(奇数ページ)から始めるので、必要に応じて左ページに白紙が挿入されます。実際に、2 部・3 章だけの同じ原稿を組むと report は 5 ページ、book は 9 ページになりました。増えた 4 ページのうちいくつかは、内容がまったく無い白紙です。紙に刷って綴じるなら正しい振る舞いですが、PDF を画面で読ませるだけなら白紙は邪魔でしかありません。book を選んだうえで oneside を明示する、という組み合わせが実務でよく使われるのはこのためです。

差分には、もっと意外な項目も含まれています。book には abstract 環境がありません。 articlereport は概要を組む環境を定義していますが、book.cls はそのブロックを丸ごと持たず、\abstractname も定義しません。report で通っていた原稿を book に切り替えると ! LaTeX Error: Environment abstract undefined. で止まります——書籍に要旨は付けない、という編集上の判断がクラスの中に固定されているわけです。既定のページスタイルも違い、reportplain(下中央にページ番号だけ)、bookheadings(章・節名の柱が入る)。さらに book は自前の版面設定ファイル bk10.clo を読み込みます。articlereport が使う size10.clo と比べると、版面幅は 345pt から 4.5in(約 325pt)へ狭まり、行数は 43 行から 41 行へ減り、ノド側 0.5in /小口側 1.5in という非対称な余白になります。report から book へ移すと、面付けだけでなく 文字の入る箱そのもの が変わります。

クラス\chapter既定オプション既定のページスタイル版面ファイル
articleなし。最上位は \sectiononeside, notitlepage, secnumdepth=3plainsize10.clo
reportありoneside, openany, titlepage, secnumdepth=2plainsize10.clo
bookあり。\frontmatter 中は無番号twoside, openright, titlepage, secnumdepth=2headingsbk10.clo(版面が別)
letterなし。letter 環境が単位oneside, letterpaper, 10ptfirstpage / plainsize10.clo
slidesなし。slide 環境が単位letterpaper, final専用sfonts.def / slides.def

\frontmatter / \mainmatter / \backmatter は何を切り替えるか

この三つは book 専用で、それぞれが 二つのことを同時に 行います。\frontmatter はページ番号をローマ数字(i, ii, …)に切り替え、同時に \if@mainmatter を偽にして 章に番号を振るのをやめます\mainmatter はページ番号をアラビア数字に戻して 1 から数え直し、章番号を復活させます。\backmatter はページ番号はそのまま、章番号だけをまた止めます。ここで効いてくるのが二つ目の作用です。前付の章は番号こそ付きませんが、目次には載ります——\chapter* を使って \addcontentsline を手で足す、というよくある回避策は book では要りません。実際に組んでみると、目次ファイルには \contentsline {chapter}{Preface}{i} のように番号なしの行が、本文の章には \numberline {1} 付きの行が並びます。

latex
\documentclass[11pt,a4paper]{book}
\begin{document}
\frontmatter                 % roman page numbers, chapters unnumbered
\chapter{Preface}            % -> toc: \contentsline {chapter}{Preface}{i}
\tableofcontents

\mainmatter                  % arabic, restarts at 1, chapters numbered again
\chapter{Beginning}          % -> toc: ... {\numberline {1}Beginning}{1}
\section{Apparatus}          % numbered 1.1

\backmatter                  % page numbers continue, chapters unnumbered
\chapter{Index}
\end{document}

\documentclass のオプション一覧と、クラスごとに違う既定値

slides を除く標準クラスは、\documentclass[...]{...} の角括弧で共通のオプション群を受け取ります。ほとんどは文書全体に効くスイッチですが、重要なのは 同じオプション名でも既定値がクラスごとに違う ことです。表の「既定オプション」列がそれで、\ExecuteOptions{...} の行にそのまま書かれています。

  • 10pt / 11pt / 12pt — 本文の基準文字サイズ。三クラスとも既定は 10pt
  • 用紙サイズletterpaper(既定)・a4papera5paperb5paperlegalpaperexecutivepaper。既定が米国レターなので、A4 圏では毎回 a4paper を書きます。
  • twoside / oneside — 両面/片面レイアウト。book だけ twoside が既定。
  • openright / openany — 章を右ページから始めるか任意のページからか。bookopenrightreportopenanyarticle はこの二つを宣言していません——書いてもエラーにはならず、LaTeX Warning: Unused global option(s): としてログに沈むだけです(この非対称の理由は「クラスの作成」で扱っています)。
  • titlepage / notitlepage — タイトルを独立ページにするか。reportbooktitlepagearticlenotitlepage
  • twocolumn / onecolumn — 本文を 2 段組にするか。既定はすべて onecolumn
  • fleqn — 別行立て数式を左寄せに(既定は中央)。leqno — 式番号を左側に(既定は右)。どちらも .clo ファイルを読み込む実装です。
  • landscape — 用紙を横向きに。draft — あふれた行(overfull box)に黒い罫を出す(既定は final)。openbib — 参考文献を「オープン」形式で組む。

letter クラス——命令体系がまるごと違う

letter は他の三つと血縁がありません。classes.dtx ではなく独自のソースから生まれ、\section\maketitle もタイトルページも持たない代わりに、手紙のための語彙を持っています。差出人の情報——\address{...}(自分の住所)、\signature{...}(署名)、\name{...}\location{...}\telephone{...}——は プリアンブルに 置き、すべての手紙で共有します。手紙一通は letter 環境で、その 引数が宛先の住所 です。本文は \opening{...} で始め \closing{...} で締め、必要なら \cc{...}(写しの宛先)、\encl{...}(同封物)、\ps(追伸)を続けます。住所内の改行は \\ です。

latex
\documentclass{letter}
\address{1 Computing Way \\ London}   % sender, shared by every letter
\signature{Ada Lovelace}
\makelabels                          % appends a sheet of mailing labels

\begin{document}
\begin{letter}{Charles Babbage \\ 2 Engine Road}  % recipient = argument
\opening{Dear Mr.\ Babbage,}
Thank you for the notes on the Analytical Engine.
\closing{Yours sincerely,}
\cc{The Royal Society}
\encl{Two diagrams}
\end{letter}

\begin{letter}{Mary Somerville \\ 3 Science Lane}
\opening{Dear Mrs.\ Somerville,}
A second letter, same sender, same file.
\closing{Yours sincerely,}
\end{letter}
\end{document}

このクラスがどの時代のために設計されたかを、一行が雄弁に語ります。プリアンブルに \makelabels と書くと、PDF の最後に 宛名ラベルのシートが 1 ページ足されます。上の例をそのまま組むと、手紙 2 通で 2 ページ、そのあとに宛先二件を並べたラベル面が付いて計 3 ページになります。ラベル用紙に印刷して封筒に貼る——そういう作業がまだ日常だった頃の道具です。逆にいえば、複数の宛先へ同じ差出人から出す一括送付が letter の得意分野で、宛先の数だけ letter 環境を並べれば済みます。ドイツ語圏の DIN 5008 に沿った書式が要るなら KOMA-Script の scrlttr2、日本語の縦書き封書なら別のクラスというように、体裁の要件が具体的な場合は専用クラスへ移ってください。

slides クラスは何だったのか——beamer 以前のスライド

五つ目の標準クラス slides は、いまも TeX Live に入っています(2024 年版で v2.4b、2022 年更新)。ただしこれは「古い beamer」ではありません。LaTeX 自身の同梱文書 manifest.txtslides.dtx を「Slides class, etc based on SLiTeX」と説明しており、その名のとおり SLiTeX——TeX で OHP 用透明シートを作るための、かつて独立していたプログラム——の後裔です。だから語彙が違います。slide 環境が 1 枚、note 環境が話者用のメモ、そして overlay 環境は文字どおり 上に重ねるもう 1 枚の透明シートでした。組んでみると番号がそれを物語ります——スライドは「1」、その上に重ねる overlay は「1-a」、対応するノートは「1-1」。\onlyslides{...}\onlynotes{...} を使えば、同じ原稿からスライドだけ・ノートだけを刷り分けられます。

実務上の判断は単純です。新しくスライドを作るなら slides ではなく beamer を使ってください。slides はテーマも段階表示(オーバーレイ)も PDF ナビゲーションも持たず、そもそも投影機ではなく印刷を出口として設計されています。slides を読む価値があるのは、古い原稿を引き継いだときと、beamer が frame を「論理的な 1 画面」として扱う設計の由来を知りたいときだけです。

どのクラスを選ぶか——提出条件から逆算する

クラス選びは好みではなく、提出先の条件から逆算します。章が要らなければ article、章立ての技術報告なら report、製本して見開きを意識する原稿なら book、通信文なら letter。指定テンプレートが配られている場合は、そのテンプレートのクラスが本文構造・余白・タイトルの扱いをすでに決めているので、標準クラスへ戻してはいけません。

  • PDF を画面で読ませるだけoneside を明示する。book を選んだ場合でも \documentclass[oneside]{book} にすると白紙ページが消えます。
  • 紙に刷って綴じるtwosideopenright を意図して選び、ノド側の余白(綴じ代)を確認する。
  • 版面を細かく作り込みたい — 標準クラスは調整の手掛かりが少ないので、KOMA-Script(scrartcl / scrreprt / scrbook)や memoir へ移る。
  • 日本語本文が主体 — 標準クラスは和文組版を想定していません。pLaTeX / upLaTeX なら jsclasses(jsarticle / jsbook)、LuaLaTeX なら ltjsclasses、新しめの選択肢として jlreq から始めます。
  • スライドslides ではなく beamer。

途中でクラスを変えたら何を確認するか

\documentclass の一語を書き換えるのは、見た目を少し変える作業ではなく 文書構造を変える作業 です。ここまでに見たとおり、章の有無、番号の深さ、abstract の有無、版面の寸法、白紙ページの挿入がまとめて動きます。切り替えたら、コンパイルが通ったことで安心せず、次の五点を目で確かめてください。

確認箇所何が起きるか直しかた
\chapterarticle へ移すと ! Undefined control sequence. で停止章を \section に降格するか、report / book のままにする
abstractbook へ移すと ! LaTeX Error: Environment abstract undefined.要旨を落とすか、\chapter*{Abstract} などに置き換える
secnumdeptharticle から移ると \subsubsection の番号が消える\setcounter{secnumdepth}{3} を書き足す
openrightbook にすると章の手前に白紙が挿入され、総ページ数が増える画面用なら oneside、製本用ならそのまま
titlepage\maketitle が独立ページになったり本文と同居したりするtitlepage / notitlepage を明示する