12pt の文書では、LaTeX の \Huge と \huge は 同じ命令 です。似た大きさなのではなく、size12.clo の 86 行目に \let\Huge=\huge と書いてあって、文字どおり同一物になっています。文字サイズを変える 10 個の命令 \tiny から \Huge までが「絶対の大きさ」ではなく「本文に対する相対的な段」を表しているために起きることで、同じ \large でも 10pt の文書なら 12pt、12pt の文書なら 14.4pt になります。しかもこの段の刻みは LaTeX の発明ではなく、Knuth が plain TeX に書いた \magstep の値そのままです。このページでは 10 個の命令が 10pt / 11pt / 12pt でそれぞれ何ポイントになるかを実測した表と、{\Large ...} と書いたのに行間だけ変わらない有名な落とし穴、そして \fontsize が黙って何もしないときに何が起きているかを扱います。
\tiny から \Huge まで — 10 個の宣言
サイズ命令は引数を取りません。\textbf{...} のような命令ではなく、書いた地点から先を切り替える宣言なので、効く範囲は自分でグループや環境を使って区切ります。 小さいものから順に \tiny、\scriptsize、\footnotesize、\small、\normalsize、\large、\Large、\LARGE、\huge、\Huge の 10 個。段階を分けているのは頭文字の大小と LARGE の全部大文字だけなので、見た目ではなく綴りに注意してください。\Large{テキスト} と書いても引数として扱われることはなく、単に \Large が宣言されたあとに {テキスト} というグループが置かれるだけで、そのグループを抜けても大きさは戻りません。範囲を限りたいなら {\Large テキスト} と、宣言のほうを波括弧の内側に入れます。\normalsize が本文の標準サイズで、\documentclass のサイズオプション(既定は 10pt)と一致します。
% right: the declaration is inside the braces
Ordinary text. {\Large only this part is large.} Ordinary again.
% wrong: nothing is passed as an argument, and the size never comes back
Ordinary text. \Large{this is large} and so is everything after it.実際の級数は基準サイズで変わる(10pt / 11pt / 12pt)
同じ命令でも、\documentclass に 10pt・11pt・12pt のどれを渡したかで結果のポイント数が変わります。 \large は 10pt クラスと 11pt クラスではどちらも 12pt ですが、12pt クラスでは 14.4pt になります。次の表は標準クラス(article / report / book)で 10 個すべてを実際に組み、\f@size と \baselineskip を書き出した値です。各セルは 文字サイズ / 行送り(行の基準線どうしの間隔)の順に並べてあります。行送りまで載せたのは、サイズ命令が文字だけでなく行間も一緒に動かしていることが、この表を見ると一目で分かるからです。
| 命令 | 10pt クラス | 11pt クラス | 12pt クラス |
|---|---|---|---|
\tiny | 5pt / 6pt | 6pt / 7pt | 6pt / 7pt |
\scriptsize | 7pt / 8pt | 8pt / 9.5pt | 8pt / 9.5pt |
\footnotesize | 8pt / 9.5pt | 9pt / 11pt | 10pt / 12pt |
\small | 9pt / 11pt | 10pt / 12pt | 10.95pt / 13.6pt |
\normalsize | 10pt / 12pt | 10.95pt / 13.6pt | 12pt / 14.5pt |
\large | 12pt / 14pt | 12pt / 14pt | 14.4pt / 18pt |
\Large | 14.4pt / 18pt | 14.4pt / 18pt | 17.28pt / 22pt |
\LARGE | 17.28pt / 22pt | 17.28pt / 22pt | 20.74pt / 25pt |
\huge | 20.74pt / 25pt | 20.74pt / 25pt | 24.88pt / 30pt |
\Huge | 24.88pt / 30pt | 24.88pt / 30pt | 24.88pt / 30pt(\huge と同一) |
刻みを眺めると、12 → 14.4 → 17.28 → 20.74 → 24.88 と、ほぼ 1.2 倍ずつ増えているのが見えます。これは偶然ではありません。plain TeX の 391 行目には \def\magstep#1{\ifcase#1 \@m\or 1200\or 1440\or 1728\or 2074\or 2488\fi\relax} とあり、Knuth が定めた拡大率が 1200・1440・1728・2074・2488——つまり千分率で表した 1.2 の 1 乗から 5 乗です。LaTeX の大きいほうの 5 段はこの \magstep をそのまま採用しています。10.95pt という半端な値も同様で、その 1 行上の \def\magstephalf{1095 } に由来します(1.2 の平方根、約 1.0954 の丸め)。さらに latex.ltx の 8915 行目からのマクロ名を見ると、\@xivpt は「14 ポイント」という名前なのに中身は 14.4、\@xxvpt は「25 ポイント」という名前なのに中身は 24.88 です。名前は人間向けの通称で、値は拡大率の階段なのです。
階段が 24.88pt で止まるのは、そこが Computer Modern の最大デザインサイズだからです。 フォント定義ファイル ot1cmr.fd に並ぶサイズは <5><6><7><8><9><10><10.95><12><14.4><17.28><20.74><24.88> の 12 段——サイズ命令が刻む段とぴったり同じ並びです。だから 12pt クラスでは \huge が既に天井の 24.88pt に達してしまい、size12.clo の 86 行目は素直に \let\Huge=\huge と書いて 2 つを同一の命令にしています。11pt クラスでは両者は別物で、\huge が 20.74pt、\Huge が 24.88pt です。「\Huge にしても大きくならない」という症状に出会ったら、まずクラスオプションが 12pt になっていないかを確認してください。なお、以上はすべて標準クラスの値です。jsarticle などの和文クラス、extsizes、KOMA-Script は独自の刻みと天井を持つので、この表をそのまま当てはめないでください。
{\Large ...} で字は大きくなったのに行間が変わらない
段落の区切り(空行または \par)が閉じ波括弧の外にあるからです。グループの内側へ移してください。 TeX が行送りを確定するのは、文字を組む瞬間ではなく 段落を行に割りつける瞬間 です。段落の終わりがグループの外にあると、その瞬間には \baselineskip がすでに本文の値に戻っているので、大きな文字が本文の行間で組まれることになります。10pt クラスで \Large(14.4pt)の 2 行段落を実測すると、\par をグループの外に置いた場合の行送りは 12pt、内側に置いた場合は 18pt でした。差は 1 行あたり 6pt です。
% right -- \par is inside the group, so the leading is 18pt
{\Large
A long paragraph that will wrap onto a second line and keep its leading.
\par}
% wrong -- the paragraph ends after the group, so the leading falls back to 12pt
{\Large A long paragraph that will wrap onto a second line and lose its leading.}
The next paragraph.この 6pt は、見た目のうえでは行の衝突として現れます。\Large の文字は、ベースラインから上へ 9.99998pt、下へ 2.79999pt 伸びます(\sbox で測った値です)。上下を足すと 12.79997pt になり、誤った 12pt の行送りを 0.8pt 上回ります。つまり、ある行に下へ伸びる文字(g、y、p など)があり、次の行に上へ伸びる文字(h、k、l など)があると、その 2 つは紙の上で必ず重なります。行数が少ないと気づきにくく、投稿用 PDF を印刷して初めて分かる、という形で表面化しがちです。
二点補足します。ひとつは \selectfont を足しても直らない こと。{\Large\selectfont ...} を試しても実測値は 12pt のままでした。問題は書体の選択ではなく、段落を組み終える時点の \baselineskip の値なので、\par の位置を直す以外に解決策はありません。もうひとつは、この症状が \centering では起き、center 環境では起きない ことです。{\centering \Large ... } と書いて空行を外に出すと 12pt になりますが、\begin{center} \Large ... \end{center} は 18pt のまま正しく組まれました。\end{center} がグループを閉じる前に段落を終わらせてくれるからです。センタリングした大きな見出しで行間がおかしいときは、\centering を裸のグループで使っていないかを疑ってください。
任意のサイズ — \fontsize と \selectfont
10 段階に欲しい大きさがなければ \fontsize{サイズ}{行送り}\selectfont でポイント数を直接指定できます。第 1 引数が文字サイズ、第 2 引数が行送りです。 ポスターの表題や、表の中で一段だけ詰めたいときなど、段階の外へ出たい場面はあります。ここで大切なのは、\fontsize は値を書き込むだけで何も選ばないということです。実測すると、\fontsize{20}{24}x と書いた x の幅は 5.2778pt で、\normalsize の x とまったく同じでした。\selectfont を続けて書くと 10.05351pt になり、はじめて 20pt の字が出ます。しかも \selectfont を忘れてもエラーも警告も出ません。 「サイズを指定したのに変わらない」という報告の多くはこれです。
% \fontsize alone changes nothing and says nothing
{\fontsize{20}{24}Still 10pt.}
% \selectfont is what commits the change
{\fontsize{20}{24}\selectfont 20pt type on 24pt leading.}第 2 引数の行送りは省略できないので、慣習に従って文字サイズの約 1.2 倍を目安に決めます(20pt なら 24pt 前後)。前の表を見ると標準クラスの比率も概ねこの範囲で、たとえば 10pt / 12pt、14.4pt / 18pt です。\tiny などの宣言型命令が行送りを自動で調整してくれるのに対し、\fontsize では 自分で決めなければならない のが実務上いちばんの違いです。ここを小さくしすぎると、前節と同じ理屈で行が重なります。文書全体の行間を広げたい(1.5 行送りにしたい、など)場合はサイズ命令の仕事ではないので、行送りを扱うページを参照してください。
数式の中でサイズ命令が効かない
数式モードの中でサイズ命令を書くと、LaTeX はそれを無視してログに一行残します。 $ \large x $ を組むと LaTeX Font Warning: Command \large invalid in math mode on input line 9. と出ます。エラーではないので組版は続き、x は普通の大きさのまま出てきます。数式内の大きさは、外側の文字サイズと数式スタイル(\displaystyle / \textstyle / \scriptstyle / \scriptscriptstyle)の組み合わせで決まる別の体系なので、本文用のサイズ命令とは混ぜられません。分数や総和記号を大きく出したいだけなら \displaystyle を使います。数式全体を大きくしたいときは、数式の 外側 でサイズを宣言してください——{\Large $ ... $} なら効きます。
LaTeX Font Warning: Command \large invalid in math mode on input line 9.サイズを決める順序
文字サイズは、本文を書きながら局所的に直すのではなく、上から順に決めると破綻しません。 まず \documentclass[11pt]{...} のように文書全体の基準サイズを決めます。次に、見出し・キャプション・脚注・表注のように 繰り返し現れる ものは、本文中で毎回サイズを指定するのではなく、クラスやパッケージの設定で決めます。最後に残った「一回きり」のもの——ポスターの表題、表の中の補足——だけを {\small ...} のように局所的に指定します。この順序が守られていれば、あとから基準サイズを 11pt から 12pt へ変えても、全体が比率を保ったまま追随します。逆に本文へ局所指定を撒いてしまうと、基準サイズを変えた瞬間にそこだけ取り残されます。本文級数そのものが違うポスターやスライドでは、局所命令で押し切らず、最初からその用途のクラスを選んでください。
- 基準サイズはクラスオプションで決める。 本文全体を
{\small ...}で包む方法は、脚注・見出し・行送りとの整合を壊しやすく、投稿規定に「本文 11pt」とある場合の証明にもなりません。 - 章見出しを本文で大きくしない。
\sectionの見た目はクラス設定かtitlesecなどのパッケージで変えます。本文に\Largeを書いて見出しを作ると、目次にも参照にも載りません。 - 繰り返す要素は定義側で変える。 すべての表注を小さくしたいなら、表注用のマクロや環境を作り、本文中の手作業をなくします。
- 局所指定は段落単位で閉じる。 長い段落を小さくするなら
\parをグループの内側に置き、行送りまで同じサイズで確定させます。 - 表を縮める前に構造を疑う。 表全体を
\scriptsizeにして押し込む前に、列を減らす、横向きにする、2 つの表に分ける、という選択肢を先に検討します。 - 最終ページサイズの PDF で確認する。 画面で読めても、A4 に印刷した査読用 PDF では小さすぎることがあります。拡大表示ではなく実寸で見ます。