代替クラス(KOMA-Script / memoir)

article を選ぶと LaTeX は US レター判の紙を差し出し、scrartcl を選ぶと A4 が出てきます。この既定値の食い違いが、代替クラス——標準クラスが窮屈になったときに乗り換える先である KOMA-Scriptmemoir——が存在する理由の、目に見える先端です。KOMA-Script の出発点は 1990 年代初頭、Frank Neukam が Jan Tschichold の書物設計論を読み、標準のドキュメントスタイルでは足りないと考えて、ヨーロッパ・ドイツの組版に合わせたスタイル群を書き始めたことでした。それを LaTeX2ε 用に作り直したものが、1994 年 7 月 7 日に Markus Kohm が公開した KOMA-Script です。memoir はまったく別の発想から生まれました——設計まわりのパッケージを丸ごとクラスの中に取り込んでしまう。このページでは、それぞれが何のためのもので、どのつまみが実際に効き、いつ乗り換える価値があるのかを見ていきます。

なぜ article・report・book を置き換えるのか

理由は一つ、標準クラスには設計を変えるための公式な入口がほとんど無いからです。article / report / book は枯れていて確実ですが、既定の余白や見出し、ヘッダ・フッタを変えようとすると、\makeatletter で内部命令に手を入れるか、geometryfancyhdrtitlesectocloft を何枚も重ねることになります。用紙もその一例で、KOMA-Script のマニュアルは「KOMA-Script の既定は A4 の縦位置であり、これはアメリカのレター判を既定とする標準クラスとは対照的だ」とわざわざ書いています。標準クラスの詳細は /learn/document-classes/standard-classes に譲ります。

KOMA-Script と memoir はその不満に正面から答えますが、答え方が違います。KOMA-Script は 標準クラスの置換クラス群+設定の仕組み——本文の書き方はそのままに、オプションと専用命令で設計をいじれるようにする。memoir は 一枚岩の書籍クラス——ページレイアウト・ヘッダ・章見出し・目次を、外部パッケージに頼らずクラスの中で完結させる。この違いは、あとで見る「補助パッケージとの相性」にそのまま表れます。

KOMA-Script の置換クラス — scrartcl / scrreprt / scrbook

KOMA-Script は Markus Kohm が保守する LaTeX2ε のクラス・パッケージ群で(TeX Live 2024 同梱版は 3.41、2023-07-07)、標準クラスのドロップイン置換を中心に構成されます。scrartclarticlescrreprtreportscrbookbook に対応し、手紙には専用の scrlttr2 があります。本文の書き方(\section\chapter)は標準クラスとほぼ同じまま、既定のタイポグラフィが整い、設定の窓口が大きく開いているのが持ち味です。だから移行の第一歩は、\documentclass{article}\documentclass{scrartcl} に書き換えて、まず何も変えずに通ることを確かめることになります。

KOMA クラス置き換える標準クラス用途
scrartclarticle論文・汎用の短中文書
scrreprtreport章を持つ報告書・学位論文
scrbookbook両面印刷を前提とした書籍
scrlttr2letter手紙(便箋とレイアウトを複数定義できる)

設定の渡し方は二通りあります。クラスオプションとして \documentclass[...]{scrartcl} に書くか、読み込み後に \KOMAoptions{...} で変えるか。KOMA-Script はほとんどのオプションを読み込み後でも変更できるように作られており、\KOMAoptions には option=value をカンマ区切りで並べて一度に複数渡せます。一つのオプションに複数の値を同時に与えたいときだけ \KOMAoption{option}{val1,val2}(単数形)を使います。この「後からでも変えられる」性質が、次に見る版面の再計算で効いてきます。

版面を計算する — DIV と BCOR

KOMA-Script では余白を mm で直接は指定しません。ページ設計の核心にある typearea パッケージが、ページを縦横それぞれ何本かの帯(strip)に分割し、その比率から本文ブロックと余白を導きます。これは Jan Tschichold が広めた古典的な版面構成——余白の比率が紙の比率と響き合う——を機械化したもので、「余白を何 mm にするか」ではなく「紙をどう割るか」を決める発想です。KOMA クラスを使うと typearea は自動で読み込まれるので、\usepackage{typearea} を自分で書いてはいけません。

分割数を決めるのが DIV= です。マニュアルの説明どおり、DIV=factor は版面を構成するときにページを縦横へ分割する帯の本数を指定します。肝心なのは factor が大きいほど本文ブロックは大きく、余白は小さくなる(=1 ページに入る文字が増える)こと。factor には 4 より大きい整数を与えます。A4 での既定値は本文サイズに連動し、10pt なら 8、11pt なら 10、12pt なら 12 です。フォントに合わせて自動算出させたいときは DIV=calc、Tschichold らが論じた中世写本の版面構成に近づけたいときは DIV=classic を使います。

もう一つのつまみが BCOR=(binding correction=綴じ代)です。製本でノド側に巻き込まれて見えなくなる幅をここに与えると、その分がいったん版面計算から差し引かれ、出力時に内側(左)余白へ加え戻されます。値には TeX が理解する任意の単位を使えます(BCOR=10mm など)。この二つは独立ではなく、\KOMAoptionsDIVBCOR を変えると版面と余白がまとめて再計算されます——geometry で数値を上書きするのとは、そこが決定的に違います。

latex
\documentclass[DIV=12,BCOR=10mm]{scrartcl}
% DIV=12    wider text block (same divisor as the A4/12pt default)
% BCOR=10mm reserve 10mm of gutter for the binding
\usepackage[T1]{fontenc}
\usepackage{microtype}

\title{A Short Report}
\author{Ada Lovelace}

\begin{document}
\maketitle
\section{Introduction}
KOMA-Script keeps the body markup of article
while giving you DIV and BCOR for the page layout.
\end{document}

フォントパッケージを後から読み込む場合は一つ落とし穴があります。DIV=calc をクラスオプションに書くと、版面は フォント読み込み前の標準フォント で決まってしまいます。KOMA クラスは typearea を自分で読み込むので、\usepackage{...} でフォントを変えるころには計算が済んでいるからです。フォントを差し替えたあとにプリアンブルで \KOMAoptions{DIV=last}(または DIV=current)を呼べば、新しいフォントに合わせて再計算されます。

要素フォントと見出しを組み替える

KOMA-Script では、見出しやキャプションといった文書の各「要素(element)」ごとに書体をまとめて設定できます。\setkomafont{element}{commands} はその要素の書体定義を丸ごと置き換え、\addtokomafont{element}{commands} は既存の定義に追加します(\usekomafont{element} は現在の書体をその要素のものに切り替えます)。渡す commands\sffamily\bfseries\Large のような 書体属性を変えるものだけ にとどめ、いずれもプリアンブルで宣言してください。ここに \centering のような組版命令を混ぜると、要素が使われるたびに予期しない場所で発動します。

見出し命令そのものの体裁——前後の空き、書体、番号の出し方——を組み替えたいときは \RedeclareSectionCommand[attributes]{name} を使います。既存の \section\chapter の属性を、カンマ区切りの key=value で再定義する公式の入口です。ヘッダ・フッタは KOMA クラスと組み合わせる scrlayer-scrpage が推奨で、\lehead\cohead\rohead のように「左/中央/右」×「偶数/奇数ページ」の各位置を個別に指定できます。柱そのものの考え方は /learn/page-layout/head-foot にあります。

KOMA が fancyhdr に警告し、geometry には黙る理由

標準クラス向けの補助パッケージをそのまま重ねると、KOMA-Script の公式な設定口と衝突します。fancyhdr については、クラスがログにはっきり書いてきます——Class scrartcl Warning: Usage of package 'fancyhdr' together with a KOMA-Script class is not recommended.。続けて scrlayerscrlayer-scrpage を勧め、fancyhdr を使うと headseplinefootsepline といったオプション、\setkomafont\addtokomafont によるページスタイル要素の指定が効かなくなる、と理由まで並べます。

ところが geometry を足しても、KOMA-Script は何も言いません。\documentclass{scrartcl} のあとに \usepackage[margin=2cm]{geometry} と書くとコンパイルは通り、typearea が計算した版面は静かに上書きされます。警告が出ないほうが危ないわけです。KOMA クラスで余白を変えたくなったら、まず DIVBCOR で解けないかを試してください。それでも足りないときだけ geometry を使い、typearea の計算をあきらめたことを自覚しておくこと。同じ理屈で titlesec\RedeclareSectionCommand と、tocloft は KOMA の目次オプションと役割が重なります。

memoir — パッケージを丸ごと呑み込んだ書籍クラス

memoir は Peter Wilson が 2001 年に発表し、2013 年以降は Lars Madsen が保守しているクラスです(TeX Live 2024 同梱版は v3.8.2、2024-01-26。自らを「設定可能な book / report / article クラス」と名乗ります)。標準の book を読み込んで拡張するのではなく——memoir.cls\LoadClass は一つも現れません——bookreport置き換える独立したクラス として書かれています。特徴は取り込みの多さで、マニュアルによれば cropfancyhdrgeometrysidecapsubfiguretitlesec と似た機能をクラス自身が提供し、setspace に相当する行送り制御も内蔵しています(命令名は別物です)。さらに arraydcolumndelarraytabularxbooktabsnamerefshortvrb などは自動的に読み込まれます。

なぜそんな作りになったのか。保守を引き継いだ Lars Madsen が、マニュアルの序で自ら説明しています——2001 年当時は、年に一度の配布の外でパッケージを更新するのは手作業で、CTAN でもマニュアルの添付が必須ではなかった。だから複数パッケージの機能をクラスに埋め込み、その使い方をこの一冊にまとめるのが理にかなっていた、と。事情が変わった現在、彼はその埋め込みを逆向きに解いています。実際、2023 年の夏には booktabs を「埋め込み」から「読み込み」へ移しました。memoir 3.8 以降は 2021/06/01 以降の LaTeX カーネルを要求し、古すぎる場合はコンパイルを止めて利用者に気づかせます。

ページレイアウトは専用命令で組み立てます。\setlrmarginsandblock{spine}{edge}{ratio} が左右(ノド側 spine と小口側 edge)の余白を、\setulmarginsandblock{upper}{lower}{ratio} が上下の余白を決め、ページ幅は固定のまま本文ブロックがそこから導かれます。第 3 引数は比率で、計算に任せたい値には * を置けます。ここが memoir 最大の落とし穴なのですが、これらは宣言しただけでは何も起きません。 指定を並べたあとに \checkandfixthelayout を呼んで、初めてレイアウトが確定します(この命令は内部で \checkthelayout で検査し、\fixthelayout で反映します)。「値を書いたのに版面が変わらない」という相談は、たいていこの一行の欠落です。

章見出しの体裁は \chapterstyle{style} で切り替えます。\pagestyle と同じ感覚で、以降の章見出しのスタイルを設定するもので、TeX Live 2024 同梱の memoir.cls には \makechapterstyle で定義済みのスタイルが約 30 種入っています。default(標準の book 風)、section(番号と表題を 1 行に)、hangnum(章番号を余白へ吊る)、companionThe LaTeX Companion 風)、bringhurstmadsenkomalike など、名前を見るだけで由来が分かるものも多い。自分で作りたいときは \makechapterstyle{名前}{定義} で追加できます。書籍デザインで memoir が好まれる理由の大半は、この「まず既製の 30 種から選べる」ところにあります。

latex
\documentclass[11pt,a4paper,twoside]{memoir}

% page layout -- nothing takes effect until \checkandfixthelayout
\setlrmarginsandblock{30mm}{25mm}{*}  % spine, fore-edge
\setulmarginsandblock{30mm}{35mm}{*}  % upper, lower
\checkandfixthelayout

\chapterstyle{hangnum}

\begin{document}
\chapter{Beginnings}
memoir bundles page layout, headers and chapter styles
into one configurable book class.
\end{document}

KOMA-Script と memoir、どちらを選ぶか

判断の軸は「文書が一つの完結した設計を必要とするか」です。論文・報告書のように 標準クラスからの自然な一段 で、整った既定タイポグラフィと DIVBCOR の明快な版面制御がほしいなら KOMA-Script。一冊の書籍を細部までデザインするなら、レイアウト・柱・章スタイル・目次をクラス内で完結できる memoir が向きます。両者は設計思想が正面から違うので混ぜず、文書ごとにどちらかを選んでください。そして乗り換えの価値があるのは、設計の変更が一度きりでなく続くときです。余白を一度 1cm 詰めたいだけなら、標準クラスに geometry を足すほうが早く終わります。なお、作りたいものがスライドなら話は別で、そこは別系統の beamer クラスの担当です。

日本語の文書ではどうするか

和文が主体の文書では、KOMA-Script でも memoir でもなく、日本語組版に特化したクラスを使ってください。行送り・禁則処理・和欧文間のアキは専用クラスの守備範囲で、KOMA-Script や memoir の設計思想はそこまで面倒を見ません。選択肢は二系統です。jsarticle / jsbook(jsclasses)は \NeedsTeXFormat{pLaTeX2e} と宣言されているとおり pLaTeX 系のフォーマットを前提とし、LuaLaTeX 版が ltjsarticle / ltjsbook。もう一つの jlreq は W3C の「日本語組版処理の要件(JLReq)」を実装したクラスで、標準の LaTeX2ε 上で動きます。それぞれの詳細は専用ページがあるので、そちらへどうぞ。

標準クラスから移行する手順

既存の原稿を移すときは、一度に全部を飾り直さないのが唯一のコツです。まずクラス名だけを article から scrartclbook から memoir に変えて、本文がそのまま通ることを確認します。ここで落ちるなら、原因は設計ではなく残っている補助パッケージです。通ったら、余白 → 柱 → 見出し → 目次の順に一つずつ設定し、各段階で PDF を見比べる。次の四点だけ守れば、移行はたいてい静かに終わります。

  • KOMA-Scriptgeometry に手を伸ばす前に、DIVBCOR で解けないか試す。柱は fancyhdr ではなく scrlayer-scrpage を使う。
  • memoir — レイアウト指定の最後に \checkandfixthelayout を必ず置く。これが無いと指定は無視されます。
  • 共通titlesecfancyhdrtocloft など標準クラス向けの補助パッケージを、そのまま重ねない。クラス側に同じ役割の入口があります。
  • 日本語原稿 — 欧文向けの設計思想を和文本文へ当てはめず、jsclasses か jlreq を先に検討する。
latex
% Keep every design knob in one place, with a reason next to it
\KOMAoptions{DIV=12,BCOR=8mm}   % 12pt-like text block, 8mm gutter
% \RedeclareSectionCommand[beforeskip=-2ex]{section}

% For memoir, set every layout knob BEFORE the check
% \setlrmarginsandblock{30mm}{25mm}{*}
% \setulmarginsandblock{30mm}{35mm}{*}
% \checkandfixthelayout

最後に一つ、地味ですが効く習慣を。KOMA-Script や memoir を使う原稿では、余白や見出しを本文を書きながら何度も試すことになります。その調整を本文の近くに散らさず、プリアンブルの「ページ設計」「見出し」「柱」といった小さな区画にまとめ、なぜその値なのかを一行コメントで残してください。出版社や学会の指定寸法へ戻すとき、どの一行が効いているかを探す時間がまるごと消えます。