ローマン体・ボールド体・イタリック体——LaTeX で書体を切り替える命令は、一見ばらばらに見えて、実は 3 つの独立した軸 の上に整然と並んでいます。仕組みを一度つかめば、「太字のサンセリフ体」のような組み合わせも、長い段落の一括切り替えも、迷わず書けるようになります。このページでは、その軸の考え方と、\textbf{...} のような命令形・{\bfseries ...} のような宣言形の使い分けを見ていきます。
書体は 3 つの軸で決まる
LaTeX2e の NFSS(New Font Selection Scheme、新フォント選択方式) では、本文の書体が 互いに独立した 3 つの属性 の組み合わせで決まります。ファミリ(family) は字の骨格、シリーズ(series) は太さ、シェイプ(shape) は字の傾きや形です。それぞれを別々に切り替えられ、しかも 組み合わせられる のが要点です。たとえばファミリをサンセリフに、シリーズをボールドにすれば「太字のサンセリフ体」になります。
- ファミリ(family) — ローマン体(セリフあり)
\textrm/\rmfamily、サンセリフ体\textsf/\sffamily、タイプライター体(等幅)\texttt/\ttfamily。 - シリーズ(series) — ミディアム(標準の太さ)
\textmd/\mdseries、ボールド\textbf/\bfseries。 - シェイプ(shape) — アップライト(直立・標準)
\textup/\upshape、イタリック\textit/\itshape、スラント(斜体)\textsl/\slshape、スモールキャップス\textsc/\scshape。
ある軸を切り替えても、ほかの 2 つの軸はそのまま保たれます。これが NFSS の「直交性」です。だから \textsf でサンセリフにした文章の中で \textbf を使えば、サンセリフのまま太字になります。なお シリーズは本来「太さ(weight)」と「幅(width)」を併せた軸 で、コンデンス体(細幅)や拡張体(広幅)も含みます。LaTeX2e は 2020 年以降、現在の指定と新しい指定を賢く合成するようになり、たとえば細幅 c の状態でボールド b を要求すると、可能なら「細幅ボールド bc」を選ぶようになりました。
命令形と宣言形
同じ書体切り替えに 2 つの書き方 があります。\text… で始まる 命令形 は引数を取り、その {...} の中だけに効きます。…family / …series / …shape で終わる 宣言形 は引数を取らず、**そこから先、グループ({ })や環境の終わりまで** 効き続けます。
% 命令形:短い範囲に / Command form: for short spans
ここは \textbf{太字} で、ここは \textit{イタリック} です。
% 宣言形:グループで範囲を区切る / Declaration form: a group limits the scope
ここは普通。{\bfseries ここから先はずっと太字。} ここで元に戻る。
% 環境全体に効かせる / Apply to a whole environment
\begin{quote}
\itshape この引用は段落全体がイタリックになります。
\end{quote}使い分けの目安はこうです。数語までの短い範囲なら命令形 \textbf{...}。段落まるごとや環境全体など長い範囲なら宣言形 \bfseries。宣言形を範囲限定で使うときは、{\bfseries ...} のように グループで囲む のを忘れないでください。囲まないと、その先すべてに効き続けてしまいます。
もう一つ、命令形には地味だが重要な利点があります。イタリック補正を自動で入れてくれる ことです(次節)。逆に宣言形は何も足さないぶん、ネストや一括適用の挙動が読みやすく、クラス・パッケージの内部実装でも好まれます。
| キー | 軸 / 効果 | 命令形(短い範囲) | 宣言形(範囲をグループで区切る) |
|---|---|---|---|
roman | ファミリ:ローマン体(セリフ) | \textrm{...} | {\rmfamily ...} |
sans | ファミリ:サンセリフ体 | \textsf{...} | {\sffamily ...} |
tt | ファミリ:タイプライター体(等幅) | \texttt{...} | {\ttfamily ...} |
bold | シリーズ:ボールド(太字) | \textbf{...} | {\bfseries ...} |
medium | シリーズ:ミディアム(標準) | \textmd{...} | {\mdseries ...} |
italic | シェイプ:イタリック | \textit{...} | {\itshape ...} |
slanted | シェイプ:スラント(斜体) | \textsl{...} | {\slshape ...} |
smallcaps | シェイプ:スモールキャップス | \textsc{...} | {\scshape ...} |
reset | 全軸を文書既定に戻す | \textnormal{...} | {\normalfont ...} |
既定へ戻す・イタリック補正
3 軸すべてを 文書の標準設定に一度で戻す のが \textnormal{...}(命令形)と \normalfont(宣言形)です。たとえばサンセリフの見出しの中に標準書体の一語だけ差し込みたいときに使います。1 つの軸だけ戻したいなら、その軸の既定値の命令——\mdseries(太さを標準へ)、\upshape(直立へ)、\rmfamily(ローマンへ)——を使います。
**イタリック補正 \/ は、傾いた文字の右上のはみ出し分だけ、わずかに後ろへ空きを足す微調整です。イタリック体の最後の文字が次の直立文字に食い込むのを防ぎます。ここで命令形と宣言形の差が出ます。\textit{...} など命令形は、必要なときに補正を自動で挿入** します(直後の文字が \nocorrlist——既定ではピリオドとコンマ——のときは入れません)。一方 **宣言形 \itshape は何もしてくれない** ので、傾いた範囲の末尾に自分で \/ を置く必要があります。
% 命令形:補正は自動 / Command form: correction is automatic
He was \textit{very} clever.
% 宣言形:末尾に \/ を手で入れる / Declaration form: add \/ by hand
He was {\itshape very\/} clever.
% 自動挿入を止めたいとき / To suppress the automatic correction
\textit{\nocorr text}強調は \emph で(\textit ではなく)
「ここを強調したい」ときは、見た目を直接指定する \textit ではなく、**意味を表す \emph{...}** を使うのが定石です。\emph は 文脈に応じて切り替わる のがミソで、直立した本文の中ではイタリックになり、すでにイタリックの文中で使うと 直立に戻して 際立たせます。入れ子にしても \emph{始め \emph{中} 終わり} のように交互に反転します。
これは「構造と見た目を分ける」という LaTeX の思想そのものです。本文には「強調」という意味だけを書いておけば、強調を太字にしたい・色を付けたいといった見た目の変更は、\DeclareTextFontCommand などで \emph の定義を一箇所いじるだけで全体に反映できます。強調の詳細は専用ページに譲ります。
使ってはいけない古い命令
\bf・\it・\rm・\sf・\tt・\sc・\sl という 2 文字の古い命令 をネットの古い記事で見かけることがありますが、これらは LaTeX 2.09(1994 年以前)の遺物 です。今も動きはしますが、使ってはいけません。理由は 直交しない(orthogonal でない) こと——各命令はサイズ以外の現在の書体設定を すべて捨てて 上書きしてしまいます。
だから組み合わせが効きません。{\bf\it テキスト} は \bf が無視されてイタリックだけに、{\it\bf テキスト} は \it が無視されて直立の太字になります。新旧を混ぜた \textbf{\tt テキスト} も \textbf が無効になります。1994 年の LaTeX2e がこれらを、軸ごとに分かれて積み重ねられる現在の命令——\bfseries・\itshape・\rmfamily と、対応する \textbf{...} など——に置き換えました。今から書くコードでは必ず新しい命令を使ってください。
軸を組み合わせる例
3 軸が独立しているからこそ、自由に積み重ねられます。次の例は、サンセリフ・太字・イタリックを同時に効かせています。命令形なら入れ子に、宣言形なら同じグループ内に並べるだけです。
\documentclass{article}
\begin{document}
% 命令形を入れ子に / Nest the command forms
\textsf{\textbf{\textit{Bold sans-serif italic}}}
% 宣言形を同じグループに並べる(等価)/ Declarations in one group (equivalent)
{\sffamily\bfseries\itshape Bold sans-serif italic\/}
% 一語だけ標準書体へ戻す / Reset one word to the default font
{\sffamily 見出し調のテキストの中の \textnormal{標準} という語}
\end{document}日本語(和文)では事情が少し違います。和文フォントの軸は **ファミリが明朝体 \textmc / \mcfamily とゴシック体 \textgt / \gtfamily の 2 つ** で、欧文のローマン/サンセリフとは別系統です。標準の和文フォントには独立した太字シリーズがないため、\textbf を和文にかけると——欧文が太字になる一方で——和文は ゴシック体 で代用されるのが既定の挙動です。和文の強調はこのように「書体(明朝↔ゴシック)の切り替え」で行うのが伝統で、欧文の「太さ・傾き」とは考え方が異なります。
最後に補足です。\textbf などの高水準命令は、内部では NFSS の 低水準命令——\fontfamily{...}・\fontseries{...}・\fontshape{...} で属性を指定し \selectfont で確定する——に展開されます。シェイプの属性値は直立 n、イタリック it、スラント sl、スモールキャップス sc。ふだんはこの低水準を直接触る必要はありませんが、特定のフォントを名指しで呼ぶときに使います。