Font style commands

Roman, bold, italic — the commands that switch fonts in LaTeX look like a grab-bag at first, but they actually sit neatly on three independent axes. Once the model clicks, combinations like “bold sans-serif” and switching a whole paragraph at once become obvious rather than fiddly. This page covers that model, and the choice between the command form \textbf{...} and the declaration form {\bfseries ...}.

A font is three independent axes

In LaTeX2e’s NFSS (New Font Selection Scheme), the current text font is the combination of three independent attributes. Family is the underlying letterform, series is the weight, and shape is the slant or form of the letters. The key point is that each can be switched on its own, and they compose: set the family to sans-serif and the series to bold, and you get bold sans-serif.

  • Family — roman (serif) \textrm / \rmfamily, sans-serif \textsf / \sffamily, typewriter (monospaced) \texttt / \ttfamily.
  • Series — medium (the default weight) \textmd / \mdseries, bold \textbf / \bfseries.
  • Shape — upright (the default) \textup / \upshape, italic \textit / \itshape, slanted \textsl / \slshape, small caps \textsc / \scshape.

Switching one axis leaves the other two untouched — this is the orthogonality at the heart of NFSS. So if you turn on sans-serif with \textsf and then use \textbf inside it, you get bold *and still sans-serif*. Note that series really combines “weight” and “width” into one axis, so it also covers condensed and extended faces. Since 2020, LaTeX2e merges the current and requested series intelligently: if the font is currently condensed (c) and you ask for bold (b), it will try bold-condensed (bc) when that face exists.

Command form vs declaration form

Each switch comes in two forms. The command form, beginning with \text…, takes an argument and affects only what is inside its braces. The declaration form, ending in …family / …series / …shape, takes no argument and stays in effect **from that point until the end of the enclosing group ({ }) or environment**.

latex
% 命令形:短い範囲に / 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}

A good rule of thumb: for a short span of up to a few words, use the command form \textbf{...}; for a whole paragraph or environment, use the declaration form \bfseries. When you want a declaration to apply only locally, remember to wrap it in a group{\bfseries ...} — otherwise it keeps going for the rest of the document.

The command form also has a quiet but real advantage: it inserts italic correction for you (see the next section). The declaration form, by adding nothing, keeps nesting and bulk application predictable, which is why it is preferred inside class and package code.

KeyAxis / effectCommand form (short span)Declaration form (scope via group)
romanFamily: roman (serif)\textrm{...}{\rmfamily ...}
sansFamily: sans-serif\textsf{...}{\sffamily ...}
ttFamily: typewriter (monospaced)\texttt{...}{\ttfamily ...}
boldSeries: bold\textbf{...}{\bfseries ...}
mediumSeries: medium (default)\textmd{...}{\mdseries ...}
italicShape: italic\textit{...}{\itshape ...}
slantedShape: slanted\textsl{...}{\slshape ...}
smallcapsShape: small caps\textsc{...}{\scshape ...}
resetReset all axes to the default\textnormal{...}{\normalfont ...}

Resetting, and italic correction

To reset all three axes to the document default at once, use \textnormal{...} (command form) or \normalfont (declaration form) — handy when you want a single word in the default font inside a sans-serif heading, say. To reset just one axis, use that axis’s default command: \mdseries (back to medium weight), \upshape (back to upright), or \rmfamily (back to roman).

**Italic correction \/ adds a sliver of space to make up for the overhang of a sloped letter, so the last italic character does not crash into the upright text that follows. This is where the two forms diverge. The command forms such as \textit{...} insert the correction automatically when needed** (they skip it if the next character is in \nocorrlist — by default a period or comma). **The declaration form \itshape does nothing**, so you must add \/ yourself at the end of the sloped span.

latex
% 命令形:補正は自動 / 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}

For emphasis, use \emph (not \textit)

When your intent is “emphasize this,” the idiom is not the appearance-fixing \textit but the **meaning-carrying \emph{...}**. The trick is that \emph is context-aware: in upright body text it italicizes, but used inside already-italic text it switches *back to upright* to stand out. Nested, it alternates — \emph{start \emph{middle} end} gives italic, then upright, then italic.

This embodies LaTeX’s separation of structure from appearance: write only the *meaning* “emphasis” in the body, and if you later want emphasis rendered as bold or in color, you change the definition of \emph in one place (e.g. via \DeclareTextFontCommand) and it propagates everywhere. The dedicated page covers emphasis in more depth.

The old commands to avoid

You may see the two-letter commands \bf, \it, \rm, \sf, \tt, \sc, \sl in old web posts, but these are relics of LaTeX 2.09 (pre-1994). They still work, but do not use them. The reason is that they are not orthogonal: each one discards *every* current font attribute except the size and overrides it.

So they refuse to combine. {\bf\it text} ignores \bf and comes out italic only; {\it\bf text} ignores \it and comes out upright bold; and mixing old with new, \textbf{\tt text} silently drops the \textbf. LaTeX2e replaced them in 1994 with the per-axis, composable commands — \bfseries, \itshape, \rmfamily, and their \textbf{...}-style partners. Always use the modern commands in new code.

Combining the axes: a worked example

Because the three axes are independent, you can stack them freely. The example below applies sans-serif, bold, and italic all at once — nest the command forms, or simply list the declarations in the same group.

document.tex
\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}

Japanese (和文) text works a little differently. Its family axis has **two members — mincho \textmc / \mcfamily and gothic \textgt / \gtfamily** — a separate system from the Western roman/sans-serif. Because the default Japanese font has no independent bold series, applying \textbf to Japanese text makes the Western letters bold but renders the Japanese in gothic as a stand-in (the default behavior). Emphasizing Japanese by switching family (mincho ↔ gothic) is the traditional approach, conceptually different from the Western idea of weight and slant.

A closing note: high-level commands like \textbf expand internally into NFSS low-level commands\fontfamily{...}, \fontseries{...}, \fontshape{...} set the attributes and \selectfont commits them. The shape attribute values are n (upright), it (italic), sl (slanted), and sc (small caps). You rarely touch this layer directly, but it is how you summon a specific named font.