LaTeX Font Size: Commands, Document Options and \fontsize

LaTeX controls font size at two levels. The document class option (10pt, 11pt, 12pt) sets the base size for the whole document, and ten relative commands from \tiny to \Huge scale individual passages up or down from that base. When neither is enough, \fontsize sets an exact point size. This guide covers all three, the actual point values behind each command, how to size captions, footnotes, headers and section titles, font size in math mode and in Beamer, and the errors that come up when a size is not available.

The Ten Font Size Commands

Every standard class defines the same ten size commands. They are declarations: each one switches the size for everything that follows until the end of the current group or environment. The usual way to apply one is inside braces:

\documentclass{article}
\begin{document}

{\tiny tiny} {\scriptsize scriptsize} {\footnotesize footnotesize}
{\small small} {\normalsize normalsize} {\large large}
{\Large Large} {\LARGE LARGE} {\huge huge} {\Huge Huge}

\end{document}

The commands are relative, not absolute. \large means “one step above the body size”, so the point size it produces depends on the class option. The table below gives the exact values for the standard classes (article, report, book); the second number in each cell is the baseline skip, the distance between lines.

Command10pt (default)11pt12pt
\tiny5 / 66 / 76 / 7
\scriptsize7 / 88 / 9.58 / 9.5
\footnotesize8 / 9.59 / 1110 / 12
\small9 / 1110 / 1210.95 / 13.6
\normalsize10 / 1210.95 / 13.612 / 14.5
\large12 / 1412 / 1414.4 / 18
\Large14.4 / 1814.4 / 1817.28 / 22
\LARGE17.28 / 2217.28 / 2220.74 / 25
\huge20.74 / 2520.74 / 2524.88 / 30
\Huge24.88 / 3024.88 / 3024.88 / 30

The odd-looking numbers (10.95, 14.4, 17.28, 20.74, 24.88) are powers of 1.2 times 10pt. They are the sizes Donald Knuth prepared for Computer Modern, and the standard classes stick to them so that every size has a real font behind it. Note that at 12pt, \huge and \Huge are the same size: the scale tops out at 24.88pt.

Setting the Base Size: Document Class Options

The body text size is a class option. The standard classes accept 10pt (the default), 11pt and 12pt:

\documentclass[12pt]{article}
\documentclass[11pt, a4paper]{report}
\documentclass[10pt, twocolumn]{book}

Changing this one option rescales everything at once: body text, headings, footnotes, captions and the relative size commands. For most documents this is the only font-size setting that needs to change. Anything other than those three values is silently ignored by the standard classes, which is the source of many “why is my 14pt option not working” questions.

Sizes from 8pt to 20pt with extsizes

For a base size outside 10–12pt, the extsizes bundle provides drop-in replacements for the standard classes: extarticle, extreport, extbook and extletter. They accept 8pt, 9pt, 10pt, 11pt, 12pt, 14pt, 17pt and 20pt:

\documentclass[14pt]{extarticle}
\begin{document}
Body text is now 14pt, and \large, \Large and friends scale with it.
\end{document}

The KOMA-Script classes (scrartcl, scrreprt, scrbook) go further and accept any size, e.g. \documentclass[fontsize=13pt]{scrartcl}. The memoir class accepts 9pt to 60pt through its own options. If you are already using one of these classes, prefer its option over extsizes.

Scoping a Size Change: Braces vs. Environments

Because the size commands are declarations, how far they reach depends on where you put them. There are three patterns:

% 1. Braces: the change ends at the closing brace
This is normal, {\large this is large}, and this is normal again.

% 2. Environment form: the same, but clearer for multi-paragraph blocks
\begin{small}
A long quotation or note set in small type. Several paragraphs
can go here.
\end{small}

% 3. Bare declaration: lasts until the end of the enclosing group,
%    e.g. the rest of a table cell, a footnote, or the whole document
\small
Everything from here on is small...
\normalsize
...until it is explicitly reset.

A very common mistake is to write \large{text} as if \large took an argument. It compiles, but the braces only group the word text; the \large itself was issued outside them and stays active for the rest of the paragraph or group. Always put the command inside the braces: {\large text}.

One more subtlety: line spacing is decided when a paragraph ends. If you enlarge only part of a paragraph, the lines keep the normal baseline skip and the large text may collide with the line above. For a whole paragraph in a different size, end the paragraph inside the group with \par or a blank line. The environment form does not do this for you either, so leave a blank line before \end:

{\Large A heading-like paragraph in Large type.\par}

\begin{Large}
The environment form needs the blank line too.

\end{Large}

Exact Sizes with \fontsize and \selectfont

When you need a size that is not on the ten-step scale, use \fontsize{size}{baselineskip}\selectfont. The first argument is the font size, the second the distance between baselines; a baseline skip of about 1.2× the size matches LaTeX's own defaults. Nothing happens until \selectfont is called:

\documentclass{article}
\usepackage{lmodern}   % scalable fonts: any size works
\begin{document}

{\fontsize{14}{17}\selectfont This is exactly 14pt text on a 17pt
baseline, and it wraps correctly across lines.\par}

{\fontsize{40}{48}\selectfont Poster}

\end{document}

Units are optional and default to points; \fontsize{14pt}{17pt} is the same as \fontsize{14}{17}. The lmodern line matters: the default Computer Modern fonts exist only at fixed sizes, so a request for 15pt gets substituted with 14.4pt and a warning (see Common Errors below; 14pt is close enough to 14.4pt that LaTeX substitutes it silently). Latin Modern is the same design in a scalable format.

How \linespread fits in

\fontsize sets the baseline skip directly, while \linespread{factor} multiplies whatever baseline skip the current size defines. \linespread{1.5} in the preamble gives roughly one-and-a-half spacing throughout, without touching the font size. Like \fontsize, it only takes effect at the next \selectfont or size command, which is why in the body you write \linespread{1.5}\selectfont. For the usual double-spacing requirement, the setspace package is more precise: \onehalfspacing, \doublespacing and the spacing environment handle footnotes and floats correctly, which a bare \linespread does not.

Font Size for Specific Elements

Most parts of a document have a size baked into the class. Each one has a clean way to override it.

Captions

Load the caption package and pass the size as an option. Separate settings exist for the label (“Figure 1:”) and the text:

\usepackage[font=small, labelfont=bf]{caption}

% Different sizes for the label and the text
\usepackage[font=footnotesize, labelfont={bf,small}]{caption}

% Or change it later with \captionsetup
\captionsetup{font=scriptsize}

Footnotes

Footnotes are set in \footnotesize. To make every footnote larger or smaller, redefine that command once in the preamble:

\renewcommand{\footnotesize}{\small}   % larger footnotes
\renewcommand{\footnotesize}{\scriptsize}  % smaller footnotes

Be aware that \footnotesize is also the default size for captions in some classes and for \tablenotes, so this change may reach further than the footnotes. See LaTeX Footnotes for the other footnote settings.

Headers and footers

With fancyhdr, the header and footer fields are ordinary text, so a size declaration at the start of each field is all it takes:

\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[L]{\small\itshape Font Sizes in LaTeX}
\fancyhead[R]{\small\thepage}
\fancyfoot[C]{\footnotesize Draft -- do not distribute}

Section titles

The titlesec package changes heading formats. Its starred form keeps the standard layout and only swaps the font:

\usepackage{titlesec}
\titleformat*{\section}{\large\bfseries}
\titleformat*{\subsection}{\normalsize\bfseries}
\titleformat*{\subsubsection}{\normalsize\itshape}

% Full control, including an exact size via \fontsize:
\titleformat{\section}
  {\fontsize{16}{19}\selectfont\bfseries}{\thesection}{1em}{}

The sectsty package does the same job with \sectionfont{\large}, and KOMA-Script classes have \setkomafont{section}{\large\bfseries} built in. Do not load titlesec with KOMA or memoir; use their own mechanisms.

Title, author and date

The arguments of \title and \author accept size commands directly: \title{\Huge A Big Title} or \author{\large Ada Lovelace}. The titling package offers a tidier hook, \pretitle{\begin{center}\LARGE}.

Font Size in Math Mode

Math has its own size system. Every math expression is set in one of four styles: \displaystyle (displayed equations), \textstyle (inline math), \scriptstyle (first-level subscripts and superscripts) and \scriptscriptstyle (nested scripts). You can force any of them:

$\displaystyle \sum_{i=1}^{n} x_i$   % inline math with display-size limits
$\textstyle \frac{a}{b}$            % a small fraction in a display
$\scriptstyle x + y$                % script-size math

The text size commands do not work inside math mode: $\small x$ produces the warning Command \small invalid in math mode and changes nothing. Apply the size command around the math instead; the math fonts follow the surrounding text size:

{\small $E = mc^2$}            % small math, inline
{\footnotesize \[ E = mc^2 \]}  % small displayed equation

To change the script sizes globally, use \DeclareMathSizes in the preamble. It takes the text size it applies to, then the sizes for text, script and scriptscript style. The defaults for a 10pt document are 10/10/7/5:

% For 10pt body text, use 7.5pt scripts and 6pt nested scripts
\DeclareMathSizes{10}{10}{7.5}{6}

% Must be declared for each body size you use, e.g. in a 12pt document:
\DeclareMathSizes{12}{12}{8}{6}

Font Size in Beamer

Beamer frames are 128×96 mm, so the point sizes are small on paper but large on screen. The class accepts 8pt, 9pt, 10pt, 11pt (the default), 12pt, 14pt, 17pt and 20pt, with the same relative commands inside frames:

\documentclass[14pt]{beamer}
\begin{document}
\begin{frame}{Font sizes}
  Normal 14pt text.

  {\small A smaller remark.}

  {\tiny Source: fine print that nobody reads.}
\end{frame}
\end{document}

Beamer also sizes its own elements through fonts you can set in the preamble: \setbeamerfont{frametitle}{size=\Large}, \setbeamerfont{footnote}{size=\tiny} and so on. For a one-off slide with a lot of text, \begin{frame}[shrink=10] scales the content down by 10 percent.

Relative Changes with relsize

The relsize package changes size relative to the current size instead of relative to the body size. \relsize{n} moves n steps up or down the ten-step scale; \smaller and \larger are one step each. This is what you want inside macros that may be called at any size:

\usepackage{relsize}

\newcommand{\unitlabel}[1]{{\smaller #1}}   % one step smaller than its number
10\,\unitlabel{kg} and {\Large 10\,\unitlabel{kg}}

{\relsize{2} two steps larger} {\relsize{-1} one step smaller}
\textlarger{inline form} and \textsmaller{its opposite}

For a scale factor rather than steps, \relscale{1.25} from the same package multiplies the current size by 1.25, and the small scalefnt package does the same with \scalefont{1.25}.

Scaling the Whole Document

From largest effect to smallest, these are the ways to make an entire document bigger or smaller:

  1. Change the class option: \documentclass[12pt]{article}, or switch to extarticle for 8–20pt. This keeps every element in proportion and is the right answer 90% of the time.
  2. With a KOMA-Script class, or the scrextend package in a standard class, \changefontsizes{13pt} sets an arbitrary body size and recomputes the relative commands.
  3. Issue \fontsize{13}{16}\selectfont right after \begin{document}. Body text changes, but headings, footnotes and captions keep their own sizes, so they may look out of proportion.
  4. Leave the font alone and scale the page: a 12pt document printed on a smaller paper size, or the geometry package with narrower margins, changes how big the text looks without changing the font.

Common Errors and Warnings

Message or symptomCauseFix
Font shape `OT1/cmr/m/n' in size <15> not available, size <14.4> substitutedComputer Modern is only available at fixed sizes; \fontsize asked for one in betweenLoad \usepackage{lmodern}, or put \RequirePackage{fix-cm} before \documentclass, or use anyfontsize
Command \small invalid in math modeA text size command inside $...$ or a displayMove it outside: {\small $x$}, or use \scriptstyle for the math itself
14pt class option has no effectThe standard classes only know 10pt, 11pt and 12ptUse extarticle, a KOMA class with fontsize=14pt, or memoir
Text stays large after \large{word}The command is outside the braces, so it applies to the rest of the groupWrite {\large word}
\fontsize changes nothingMissing \selectfont\fontsize{14}{17}\selectfont
Enlarged words overlap the line aboveBaseline skip is fixed per paragraph, and the paragraph ended outside the groupPut \par or a blank line inside the group (also in the environment form)
\huge and \Huge look the sameAt 12pt both map to 24.88pt, the top of the scaleUse \fontsize with lmodern for anything larger

Complete Example

\documentclass[12pt]{article}
\usepackage{lmodern}
\usepackage[font=small, labelfont=bf]{caption}
\usepackage{fancyhdr}
\setlength{\headheight}{14pt}
\usepackage{titlesec}
\usepackage{relsize}

% Headings one step larger than the body, in bold
\titleformat*{\section}{\Large\bfseries}
\titleformat*{\subsection}{\large\bfseries}

% Small running header, footnote-size page number
\pagestyle{fancy}
\fancyhf{}
\fancyhead[L]{\small\itshape Font sizes in LaTeX}
\fancyfoot[C]{\footnotesize\thepage}

% Slightly larger math scripts for a 12pt body
\DeclareMathSizes{12}{12}{9}{7}

\title{\Huge Font Sizes}
\author{\large Ada Lovelace}
\date{\normalsize \today}

\begin{document}
\maketitle

\section{Relative sizes}
The body is 12pt. {\small This sentence is small,} {\large this one is
large,} and this one is back to normal. A footnote keeps its own
size.\footnote{Set in \texttt{\textbackslash footnotesize}, 10pt here.}

\begin{footnotesize}
A whole paragraph in footnote size, with the matching line spacing,
because the blank line ends the paragraph inside the group.

\end{footnotesize}

\section{Exact sizes}
{\fontsize{15}{18}\selectfont This paragraph is exactly 15pt on an
18pt baseline, which is not one of the ten standard steps.\par}

\subsection{Relative to the current size}
Prices: 10\,{\smaller EUR} and {\Large 10\,{\smaller EUR}} scale together.

\subsection{Math}
Inline $E = mc^2$, then {\small $E = mc^2$} in small, and
$\displaystyle \sum_{k=1}^{n} k = \frac{n(n+1)}{2}$ with display-size limits.

\begin{table}[htbp]
  \centering
  \caption{The caption is small and its label bold, via the caption package.}
  \begin{tabular}{lr}
    Size & Points \\
    \hline
    \verb|\small| & 10.95 \\
    \verb|\large| & 14.4 \\
  \end{tabular}
\end{table}

\end{document}

Quick Reference

TaskCommand
Body size for the whole document\documentclass[12pt]{article}
Body size 8–20pt\documentclass[14pt]{extarticle}
Smaller text{\small ...}, {\footnotesize ...}, {\scriptsize ...}, {\tiny ...}
Larger text{\large ...}, {\Large ...}, {\LARGE ...}, {\huge ...}, {\Huge ...}
Back to the body size\normalsize
Multi-paragraph block\begin{small} ... \end{small}
Exact size\fontsize{14}{17}\selectfont (with lmodern)
Line spacing\linespread{1.5} or setspace
Caption size\usepackage[font=small]{caption}
Footnote size\renewcommand{\footnotesize}{\small}
Section title size\titleformat*{\section}{\large\bfseries} (titlesec)
Header size\fancyhead[L]{\small ...} (fancyhdr)
Math style\displaystyle, \textstyle, \scriptstyle, \scriptscriptstyle
Script sizes in math\DeclareMathSizes{10}{10}{7}{5}
One step smaller/larger than current\smaller, \larger, \relsize{n} (relsize)
Beamer base size\documentclass[14pt]{beamer}

Next Steps

Sizes sorted? The rest of the typography is next:

Free LaTeX Tools

Fix font size problems faster with AI

Octree's AI editor explains font substitution warnings, suggests the right package for the size you want, and compiles your document in seconds.

Try Octree Free →