Formatos de encabezados (titlesec)

La tipografía, numeración y espacio alrededor de \section o \chapter los decide normalmente la clase del documento. El paquete titlesec (de Javier Bezos) permite rediseñar todo eso desde tu preámbulo. Sus dos pilares son \titleformat, que define el aspecto de un título, y \titlespacing, que define el espacio a su alrededor. La estructura del documento se trata en “Estructura, títulos e índice”; aquí nos centramos solo en cómo *se ven* los títulos.

Primero la configuración rápida

Antes de las definiciones detalladas, titlesec ofrece una configuración sencilla que cambia el aspecto solo con opciones del paquete. Cargarlo como \usepackage[sf,bf]{titlesec}, por ejemplo, hace que todos los títulos sean sans serif y en negrita. Las opciones vienen en tres grupos, cada uno con un valor predeterminado, así que solo especificas lo que quieres cambiar.

GrupoValores disponiblesPredeterminado
font / shaperm sf tt md bf up it sl sc (familia / serie / forma)bf
sizebig medium small tiny (tamaño de los títulos)big (como en las clases estándar)
alignraggedleft center raggedright (alineación)(valor de la clase)

Independientemente de esas opciones, compact reduce el espacio antes y después de los títulos. Para cambiar cómo se imprime el *número*, usa \titlelabel: \thetitle representa el número del título, y el valor estándar de las clases es \titlelabel{\thetitle\quad}. Si solo quieres añadir un punto después del número, escribe esto.

latex
\usepackage[sf,bf]{titlesec}     % 見出しをサンセリフ+ボールドに
\titlelabel{\thetitle.\quad}     % 「1.」のように番号のあとにピリオド

Y si quieres cambiar solo la fuente, dejando número y espaciado intactos, la forma con estrella \titleformat* es la vía más corta. Pasa el comando de sección y la fuente deseada; la *shape* del título queda como la define la clase, y solo cambia su apariencia.

latex
\titleformat*{\section}{\large\bfseries\sffamily}     % \section の書体だけ差し替え

Definir el aspecto con \titleformat

El rediseño completo se hace con \titleformat sin estrella. Tiene muchos argumentos y puede impresionar, pero cada uno es sencillo si se mira por separado. La forma general es esta.

latex
\titleformat{⟨command⟩}[⟨shape⟩]{⟨format⟩}{⟨label⟩}{⟨sep⟩}{⟨before-code⟩}[⟨after-code⟩]
  • ⟨command⟩ — el comando de sección que vas a rediseñar: \part, \chapter, \section, \subsection, \subsubsection, \paragraph o \subparagraph.
  • [⟨shape⟩] (opcional) — la “forma” del título: hang, block, display, runin, leftmargin, frame y otras. Por defecto es hang.
  • {⟨format⟩} — formato aplicado tanto a la etiqueta como al cuerpo. Aquí se fijan fuente, tamaño y alineación, por ejemplo \normalfont\Large\bfseries.
  • {⟨label⟩} — cómo se imprime el número; coloca \thesection u otros similares. Puede quedar vacío para un nivel sin número, pero entonces el número tampoco aparece en el índice.
  • {⟨sep⟩} — separación entre etiqueta y texto. Debe ser una longitud y no puede quedar vacía (horizontal en hang/block, vertical en display, distancia texto-marco en frame).
  • {⟨before-code⟩} — código ejecutado justo antes del texto del título. Su último comando puede tomar un argumento, que se convierte en el texto del título.
  • [⟨after-code⟩] (opcional) — código ejecutado justo después del texto del título (modo vertical en hang/block/display, modo horizontal en runin/leftmargin).

⟨shape⟩ fija la disposición básica del título. Estas son las más usadas.

shapeEfecto
hangPredeterminado: etiqueta colgante con el texto alineado a su lado (como un \section estándar)
blockCompone todo el título como un bloque (párrafo); útil para títulos centrados y formatos especiales como picture
displayPone la etiqueta en su propia línea (párrafo) sobre el texto (como un \chapter estándar)
runinTítulo run-in: el cuerpo continúa en la misma línea, sin salto (como un \paragraph estándar)
leftmarginColoca el título en el margen izquierdo (rightmargin es la versión para el margen derecho)
frameComo display, pero el título queda enmarcado

Definir el espaciado con \titlespacing

El complemento del aspecto es \titlespacing, que fija el espacio alrededor de un título. Normalmente se usa la forma con estrella \titlespacing*.

latex
\titlespacing*{⟨command⟩}{⟨left⟩}{⟨before-sep⟩}{⟨after-sep⟩}[⟨right⟩]
  • ⟨left⟩ — cuánto aumentar el margen izquierdo (en formas leftmargin fija el ancho del título; en runin, la sangría justo antes del título).
  • ⟨before-sep⟩ — espacio vertical encima del título.
  • ⟨after-sep⟩ — separación entre título y cuerpo (vertical en hang/block/display, horizontal en runin/leftmargin).
  • [⟨right⟩] (opcional) — aumenta el margen derecho en hang/block/display.

Aquí el significado de la estrella es clave: \titlespacing* suprime la sangría del párrafo que sigue al título. LaTeX tiene la convención de no sangrar el párrafo justo después de un título, y la estrella selecciona ese comportamiento (en las formas drop, wrap y runin no tiene sentido, así que la estrella no afecta). Todos los argumentos deben ser longitudes (dimensiones); un valor que contenga un comando como \stretch produce error. Si escribir valores completos de skip resulta pesado, puedes abreviar con * y un número, como *4, usando \beforetitleunit y \aftertitleunit como unidades.

Un ejemplo completo

\titleformat y \titlespacing suelen escribirse juntos. El preámbulo siguiente rediseña \section para que haya una regla fina a la izquierda y, a su derecha, el número y el título en sans serif negrita de mayor tamaño.

document.tex
\documentclass{article}
\usepackage{titlesec}

\titleformat{\section}            % 対象は \section
  [hang]                          % 形:番号をぶら下げる
  {\sffamily\Large\bfseries}      % 番号・本文に効く書式
  {\thesection}                   % ラベル(番号)
  {1em}                           % ラベルと本文の間隔
  {}                              % 本文直前のコード(ここでは無し)

\titlespacing*{\section}
  {0pt}                           % 左余白の追加なし
  {3.5ex plus 1ex minus .2ex}     % 見出しの上の空き
  {2.3ex plus .2ex}               % 見出しと本文の間の空き

\begin{document}
\section{はじめに}
本文がここから続きます。
\end{document}

En este \titleformat, [hang] selecciona la forma de etiqueta colgante, y {\sffamily\Large\bfseries} se aplica tanto al número como al título. {\thesection} imprime el número (“1”, “2”, …), y {1em} es la separación entre ese número y el título. El último {} es el código antes del cuerpo del título; aquí no hace nada. El \titlespacing* siguiente no añade margen izquierdo (0pt), pone unos 3.5ex encima del título y unos 2.3ex entre título y cuerpo. Las partes plus/minus son el estiramiento y encogimiento permitidos para que LaTeX equilibre la página. Al tener estrella, el párrafo justo después de \section no se sangra. Para añadir la regla, lo habitual es poner \titlerule de titlesec en {⟨before-code⟩} y cambiar a la forma [display].

Por defecto, el texto del título sigue implícitamente a {⟨before-code⟩}; la opción explicit cambia esto: debes colocar el texto explícitamente con #1 (por ejemplo \titleformat{\section}{..}{\thesection}{..}{#1.}). Es útil cuando quieres decorar ambos lados del título.

Ajustar el índice con titletoc y advertencias

Una vez que has cambiado los títulos, normalmente querrás que el índice coincida. Para eso titlesec incluye el paquete compañero titletoc (que también puede usarse solo). Sus comandos centrales son \titlecontents, que define por completo una entrada del índice, y \dottedcontents, un ajuste con líderes punteados. Ten en cuenta que el argumento inicial ⟨section⟩ es el nombre sin barra invertida (section, chapter, figure, …).

latex
\usepackage{titletoc}
% 節の目次項目:点線リーダー付き(左寄せ 1.5em、ラベル幅 2.3em、リーダー幅 1pc)
\dottedcontents{section}[1.5em]{}{2.3em}{1pc}

Por último, dos trampas comunes. Primero, \titlespacing no funciona con \chapter ni \part a menos que también cambies su formato mediante \titleformat (o la configuración sencilla). \part tiene una implementación no estándar, así que los ajustes simples no lo tocan; cámbialo con \titleformat. Segundo, titlesec no se lleva bien con las clases KOMA-Script (scrartcl y similares). KOMA-Script advierte que no se recomienda combinarlos, y se rompen varias funciones, como la opción headings y el argumento opcional extendido de los comandos de sección. Si usas KOMA-Script, cambia los títulos con los mecanismos propios de KOMA (\setkomafont, \RedeclareSectionCommand) en vez de titlesec.