2.2 Comandos de sección
En la sección anterior analizamos la división de nivel superior en materia frontal, principal y posterior. Dentro de estas regiones, una mayor división se realiza a través de unidades seccionales que normalmente están subestructuradas. Estos los analizamos en esta sección.
Las clases de documentos estándar \(\LaTeX\) (es decir, artículo
, informe
y libro
) contienen comandos para definir las diferentes unidades estructurales jerárquicas de un documento (por ejemplo, capítulos, secciones, subsecciones, etc.). Cada uno de estos comandos define un nivel de anidamiento dentro de una jerarquía, y cada unidad estructural pertenece a algún nivel. Los comandos deben estar anidados correctamente. Por ejemplo, un comando \subsection
debe emitirse solo después de un \section
anterior.
El estándar \(\LaTeX\) proporciona el conjunto de comandos de sección que se muestran en la Tabla 2.1. El comando \chapter
define el nivel cero de la estructura jerárquica de un documento, \section
define el nivel uno, y así sucesivamente, mientras que el comando opcional \part
define el nivel menos uno (o cero en clases que no definir \capítulo
). No todos estos comandos están definidos en todas las clases de documentos. La clase de artículo no tiene \capítulo
y la clase carta
no admite ningún comando de sección. También es posible que un paquete defina otros comandos de sección, permitiendo niveles adicionales o variantes para niveles ya admitidos.
Es cierto que los nombres estándar son algo extraños; por ejemplo, \paragraph
no significa, como cabría esperar, “comenzar un nuevo párrafo de texto”, sino “aquí está el título de la siguiente subsubsección”. Entonces, si prefiere un nombre diferente para dichas unidades en sus documentos, una definición como
\newcommand\subsubsubsection{\paragraph}
solucionaría eso fácilmente (aunque ¿ese nombre es realmente mejor?). Tenga en cuenta que esto solo significa que su documento usa un comando diferente: el trabajo real aún lo realiza \paragraph
, y el contador asociado con la unidad todavía se llama \paragraph
y se imprime con \theparagraph
y así sucesivamente.
\section[toc-entry]{title} \section*{title}
Todos los comandos de sección estándar, es decir, \part
, \chapter
(solo en las clases book
e report
), \section
, \subsection
, \subsubsection
, \paragraph
, y \subparagraph
: tienen una sintaxis común, como se ejemplifica aquí con el comando \section
. Generalmente, los comandos de seccionamiento realizan automáticamente una o más de las siguientes acciones de composición:
- producir el número de título que refleje el nivel jerárquico;
- almacenar el encabezado como una entrada para una tabla de contenido (en el archivo
.toc
); - guardar el contenido del encabezado para usarlo (quizás) en un encabezado/pie de página en ejecución;
- formatear el encabezado.
El primer formulario realiza todas las acciones anteriores. Si el argumento opcional toc-entry está presente, se utiliza como cadena de texto para la tabla de contenido y el encabezado y/o pie de página; de lo contrario, el título también se utiliza para esos lugares. En particular, esto significa que no puede especificar textos diferentes para la tabla de contenido y para el encabezado en ejecución a través de esta interfaz. La numeración depende del valor actual del contador “secnum Depth” (que se analiza en la siguiente sección).
Si intenta aconsejar a \(\TeX\) sobre cómo dividir el encabezado en unas pocas líneas usando el símbolo “~” o el comando \\
, entonces pueden producirse efectos secundarios al formatear la tabla de contenido o generar el encabezado en ejecución. En este caso, la solución más sencilla es repetir el texto del encabezado sin el marcado específico en el parámetro opcional del comando de sección.
La forma destacada (por ejemplo, \section*{...}
) suprime la numeración de un título y no produce una entrada en la tabla de contenido ni en el encabezado. Esto generalmente se usa dentro del material inicial y, a veces, en el material posterior, pero, por supuesto, se puede usar en cualquier parte del documento. En las clases estándar, los comandos \tableofcontents
, \listoftables
y \listoffigures
, y los entornos \theindex
y thebibliography
invocan internamente el comando (\section
o \chapter
) usando sus forma estrellada.
El resto de esta sección analiza cómo se puede ajustar la apariencia de los títulos a sus necesidades. Primero explicamos cómo funcionan los números de encabezado y cómo se pueden manipular. Luego echamos un vistazo rápido a los diversos textos fijos producidos por algunos títulos y cómo se pueden modificar. En las Secciones 2.2.3 a 2.2.7 describimos varios paquetes para el diseño de encabezados, centrándonos principalmente en el paquete titlesec
, ya que es una buena caja de herramientas para la mayoría de los requisitos de diseño de encabezados. Finalmente, concluimos con una discusión de las interfaces de bajo nivel de \(\LaTeX\) para esta área, una sección en gran medida destinada únicamente a referencia (razón por la cual está configurada en una fuente más pequeña para ahorrar espacio).
2.2.1 Encabezados de numeración
Para admitir la numeración, \(\LaTeX\) utiliza un contador para cada unidad seccional y compone el número de encabezado a partir de estos contadores.
Quizás el cambio más deseado en relación con la numeración de títulos sea alterar el nivel de anidamiento hasta el cual se debe producir un número. Esto está controlado por un contador llamado “secnum Depth”, que mantiene el nivel más alto con encabezados numerados. Por ejemplo, algunos documentos no tienen ninguno de sus títulos numerados. En lugar de utilizar siempre la forma con asterisco de los comandos de sección, es más conveniente establecer el contador secnum Depth
en -2
en el preámbulo del documento. Las ventajas de este método son que aún se puede producir una entrada en la tabla de contenido y que los argumentos de los comandos de sección pueden producir información en encabezados corrientes. Como se mencionó, estas características se suprimen en forma de estrella.
Para numerar todos los encabezados hasta \subparagraph
o como se llame el nivel de sección más profundo para la clase dada, establecer el contador en un valor suficientemente alto (por ejemplo, una declaración como \setcounter{secnum Depth}{5}
sería suficiente para las clases estándar).
Finalmente, el comando \addtocounter
proporciona una manera fácil de numerar más o menos niveles de encabezado sin preocuparse por los números de nivel de los comandos de sección correspondientes. Por ejemplo, si necesita un nivel más con números, puede colocar \addtocounter{secnum Depth}{1}
en el preámbulo de su documento sin tener que buscar el valor correcto. En algunos casos, esto podría incluso resultar útil dentro del documento; consulte también el paquete tocvsec2
de Peter Wilson que proporciona soporte adicional para tales ocasiones.
Cada comando de sección tiene un contador asociado, que por convención tiene el mismo nombre que el comando de sección (por ejemplo, el comando \subsection
tiene un contador correspondiente subsection
). Este contador almacena el número actual de unidades seccionales del nivel, pero su representación impresa (que se obtiene con \the
contador) contiene el número completo formateado para el comando de sección dado. Por lo tanto, en la clase “informe”, los comandos “\chapter”, “\section”, “\subsection”, etc., representan la estructura jerárquica del documento, y un contador como “subsection” realiza un seguimiento del número. de \subsections
usado dentro de la \section
actual, por ejemplo, mantiene el valor 1 en este punto del libro, mientras que \thesubsection
generaría 2.2.1.
Normalmente, cuando se incrementa un contador en un nivel jerárquico determinado, se reinicia el siguiente contador de nivel inferior (es decir, el que tiene el siguiente número de nivel superior). Por ejemplo, el archivo de clase report
contiene las siguientes declaraciones:
\newcounter{part} % (-1) parts \newcounter{chapter} % (0) chapters \newcounter{section}[chapter] % (1) sections \newcounter{subsection}[section] % (2) subsections \newcounter{subsubsection}[subsection] % (3) subsubsections \newcounter{paragraph}[subsubsection] % (4) paragraphs \newcounter{subparagraph}[paragraph] % (5) subparagraphs
Estos comandos declaran los distintos contadores. El contador de nivel uno (sección
) se reinicia cuando se pasa el contador de nivel cero (capítulo
). De manera similar, el contador de nivel dos (subsección
) se reinicia cada vez que se avanza el contador de nivel uno (sección
). El mismo mecanismo se utiliza hasta el comando \subparagraph
. Tenga en cuenta que en las clases estándar el contador “parte” está desacoplado de los otros contadores y no tiene influencia en los comandos de sección de nivel inferior. Como consecuencia, los \capítulos
en la clase libro
o informe
o las \secciones
en artículo
se numeran consecutivamente incluso si interviene un comando \part
. Cambiar esto dentro de una clase es simple: simplemente reemplaza la declaración correspondiente del contador de capítulos con:
\newcounter{chapter}[part]
El comportamiento de un contador ya existente se puede cambiar con los comandos \counterwithin
o \counter without
(ver Apéndice A.2.1); por ejemplo, para alterar el comportamiento de un solo documento, puede utilizar
\counterwithin{chapter}{part}
Cada contador en \(\LaTeX\), incluidos los contadores de sección, tiene un comando asociado construido anteponiendo al nombre del contador el prefijo \the
, que genera una representación tipográfica del contador en cuestión. En el caso de los comandos de sección, esta forma de representación se utiliza para producir el número completo asociado con los comandos, como en las siguientes definiciones:
\renewcommand\thechapter{\arabic{chapter}} \renewcommand\thesection{\thechapter.\arabic{section}} \renewcommand\thesubsection{\thesection.\arabic{subsection}}
En este ejemplo, \thesubsection
produce una representación numérica arábiga del contador de \thesubsection
precedido por el comando \thesection
y un punto. Este tipo de definición recursiva facilita las modificaciones de las contrarepresentaciones porque no es necesario realizar cambios en más de un lugar. Si, por ejemplo, desea numerar secciones usando letras mayúsculas, puede redefinir el comando \thesection
:
\renewcommand\thesection{\Alph{section}} \section{Different-looking section} \subsection{Different-looking subsection}
Por lo tanto, al cambiar los comandos de representación de contador, es posible cambiar el número mostrado por un comando de seccionamiento. Sin embargo, la representación del número no se puede cambiar arbitrariamente con este método. Suponga que desea generar un encabezado de subsección con el número rodeado por un cuadro. Dados los ejemplos anteriores, un enfoque sencillo sería redefinir \thesubsection
; p.ej.,
\renewcommand\thesubsection{\fbox{\thesection.\arabic{subsection}}}
Pero éste no es un buen enfoque, como se ve cuando se intenta hacer referencia a una sección de este tipo.
\renewcommand\thesubsection {\fbox{\thesection.\arabic{subsection}}} \setcounter{section}{3} \subsection{A mistake}\label{wrong} Referencing a subsection in this format produces a funny result as we can see looking at subsection~\ref{wrong}. We get a boxed reference.
En otras palabras, los comandos de contrarrepresentación también son utilizados por el mecanismo de referencia cruzada de \(\LaTeX\) (los comandos \label
y \ref
; consulte la Sección 2.4). Por lo tanto, sólo podemos hacer pequeños cambios en los comandos de representación de contadores para que su uso en el comando \ref
siga teniendo sentido. Para producir el cuadro alrededor del número del encabezado sin estropear la salida de \ref
, tendríamos que redefinir el comando interno de \(\LaTeX\) \@seccntformat
, que es responsable de componer la contraparte del título de una sección. . Como esto es bastante complicado, es mejor usar la interfaz proporcionada por el paquete titlesec
para esto, que es lo que hacemos en el siguiente ejemplo.
\usepackage{titlesec} \titlelabel{\fbox{\thetitle}\hspace{0.5em}} \section{This is correct}\label{sec:OK} Referencing a section using this definition generates the correct result for the section reference~\ref{sec:OK}.
El cuadro enmarcado alrededor del número en el encabezado de la sección ahora se compone solo como parte del encabezado y, por lo tanto, las etiquetas de referencia aparecen correctamente. Dentro de \titlelabel
el comando \thetitle
se refiere a la representación del contador de sección; por ejemplo, se evalúa como \thesection
en este caso. También tenga en cuenta que reducimos el espacio entre el cuadro y el texto a 0,5 em (en lugar del 1 em predeterminado). Otro caso de uso frecuente para \titlelabel
es agregar un punto después del número del encabezado (pero no cuando se hace referencia a él). Esto se muestra en el Ejemplo 2-2-8 en la página 41.
Una declaración hecha con \titlelabel
se aplica a todos los encabezados. Por lo tanto, si desea utilizar diferentes definiciones para diferentes encabezados, debe colocar el código apropiado en cada definición de encabezado (lo que requiere la interfaz extendida de titlesec
; consulte la página 42).
2.2.2 Cambiar textos de encabezado fijo
Algunos de los comandos de encabezado estándar producen textos predefinidos. Por ejemplo, \chapter
produce la cadena “Chapter” delante del texto proporcionado por el usuario. De manera similar, algunos entornos generan encabezados con textos predefinidos. Por ejemplo, de forma predeterminada, el entorno “abstracto” muestra la palabra “Resumen” encima del texto del resumen proporcionado por el usuario. \(\LaTeX\) define estas cadenas como secuencias de comandos (consulte la Tabla 2.2) para que pueda personalizarlas fácilmente para obtener sus nombres favoritos. Esto se muestra en el siguiente ejemplo, donde el nombre predeterminado “Resumen”, tal como se define en la clase “artículo”, se reemplaza por la palabra “Resumen”.
\renewcommand\abstractname{Summary} \begin{abstract} This book describes how to modify the appearance of \LaTeX{} documents. \end{abstract}
Los archivos de clase estándar \(\LaTeX\) definen algunas cadenas más. Consulte la Sección 13.1.3, y especialmente la Tabla 13.2 en la página →II 305, para obtener una lista completa y una discusión del sistema babel
, que proporciona traducciones de estas cadenas en más de sesenta idiomas.
2.2.3 Introducción al diseño de encabezados
Los títulos se pueden subdividir en dos grupos principales: títulos de visualización y de introducción. Un título de visualización está separado por un espacio vertical del texto anterior y siguiente; la mayoría de los títulos de este libro son de este tipo.
Un título preliminar se caracteriza por una separación vertical del texto anterior, pero el texto que sigue al título continúa en la misma línea que el título mismo, sólo separado de este último por un espacio horizontal. En muchas clases, los encabezados de nivel inferior, como \paragraph
, tienen el formato de encabezados preliminares. Tenga en cuenta que se ignora una línea vacía después del comando de encabezado.
\paragraph{Run-in headings.} This example shows how a run-in heading looks like. Paragraph text following the heading continues on the same line as the heading.
En el resto de esta sección veremos cómo se pueden diseñar los encabezados de visualización y de introducción y cómo se puede ajustar un diseño determinado. Comenzamos analizando dos paquetes que ofrecen una característica algo especial: agregan citas para mostrar los títulos.
Luego analizamos todos los demás aspectos de diseño que son compatibles con las interfaces de alto nivel del paquete titlesec
. Al final, también analizamos brevemente el soporte de bajo nivel que ofrece \(\LaTeX\) porque es útil para comprender el código que se encuentra en archivos de clases de documentos más antiguos.
2.2.4 quotchap, epigraph - Lemas en capítulos y secciones
Una forma interesante de mejorar los encabezados \chapter
la proporciona el paquete quotchap
creado por Karsten Tinnefeld con actualizaciones posteriores de Jan Klever. Permite al usuario especificar citas que aparecerán en la parte superior izquierda del área del título del capítulo.
Las citas para el siguiente capítulo se especifican en un entorno savequote
; el ancho del área de cotización se puede proporcionar como argumento opcional, por defecto “10 cm”. Cada cita debe terminar con un comando \qauthor
para indicar su fuente, aunque sería posible proporcionar su propio formato manualmente.
El diseño predeterminado producido por el paquete se puede describir de la siguiente manera: las citas se escriben en \slshape
, se colocan al ras a la izquierda, seguidas del material vertical almacenado en el comando \chapterheadstartvskip
. Le sigue un número de capítulo muy grande, escrito a la derecha en un 60% de gris, seguido del texto del título del capítulo, también escrito a la derecha. Después de una separación vertical adicional, tomada del comando \chapterheadendvskip
, el primer párrafo del capítulo comienza sin sangría.
El número se puede imprimir en negro especificando la opción “nogrey” en el paquete. Para imprimir el número del capítulo en una de las muchas fuentes disponibles gratuitamente, puede elegir entre una docena de opciones, como “charter” para Charter BT de Bitstream o “times” para Times de Adobe. De forma predeterminada, se elige Bookman de Adobe. Alternativamente, puede especificar explícitamente una familia de fuentes (básicamente cualquiera de las enumeradas en las tablas del Capítulo 10) como argumento para \qsetcnfont
. O puede redefinir el comando \chapnumfont
, que en última instancia es responsable de seleccionar la fuente y el tamaño de fuente para el número de capítulo.
El comando \quotefont
define la fuente utilizada para la cita, y con la ayuda de \qauthorfont
puedes modificar la fuente para el nombre del autor (razón por la cual todavía obtenemos una fuente sans serif en el ejemplo aunque solo \quotefont
Esto, junto con las posibilidades que ofrece la redefinición de los comandos \chapterheadstartvskip
y \chapterheadendvskip
, le permite producir una serie de diseños interesantes aunque muchos permanecen cableados. El siguiente ejemplo utiliza un salto vertical negativo para mover la cita al mismo nivel que el número (en Avantgarde) y establecer el título y la cita en Helvetica (o más exactamente en \(\TeX\) Gyre Heros).
\usepackage[avantgarde]{quotchap} \renewcommand\chapterheadstartvskip {\vspace*{-5\baselineskip}} % select TeX Gyre Heros for title and quote: \usepackage{tgheros} \renewcommand\sectfont{\sffamily\bfseries} \renewcommand\quotefont{\sffamily\slshape} \renewcommand\qauthorfont{\scshape} \begin{savequote}[10pc] Cookies! Give me some cookies! \qauthor{Cookie Monster} \end{savequote} \chapter{A Package Test} Adding this package changes the chapter heading dramatically.
Con el paquete quotchap
la cita se integra directamente en el diseño del título del capítulo. El paquete “epígrafe” de Peter Wilson tiene un enfoque diferente; aquí la cita se escribe después del encabezado (usando el comando \epigraph
o el entorno epigraphs
), y el comando del encabezado en sí no tiene conocimiento de ello. Por un lado esto es más versátil; por otro lado, significa claramente que no son posibles diseños que interactúen adecuadamente con el texto del título.
El paquete ofrece muchas posibilidades de configuración, generalmente redefiniendo algún comando o estableciendo una dimensión. Algunos de ellos se muestran en el siguiente ejemplo (pero en realidad utilizan los valores predeterminados, por lo que ninguna de las redefiniciones tiene ningún efecto). Para otros hay que consultar la documentación del paquete.
\usepackage{epigraph} \setlength\epigraphwidth{.4\\textwidth} \renewcommand\epigraphsize {\\small} \renewcommand\epigraphflush{flushright} \renewcommand\sourceflush {flushright} \section{A Package Test} \epigraph{Cookies! Give me some cookies!} {Cookie Monster} When adding a quote, the paragraph following it comes out indented. If you do not like this, you have to use \verb=\noindent= at the beginning of this paragraph.
También existen mecanismos para colocar un epígrafe en un título de capítulo o parte usando el comando \epigraphhead
; consulte la documentación del paquete para obtener más detalles.
2.2.5 indentfirst - Sangrar el primer párrafo después de un título
Las clases de documentos estándar \(\LaTeX\) y muchas otras, siguiendo la tradición tipográfica inglesa (americana), suprimen la sangría del primer párrafo después de un título de visualización. Si bien esto se puede cambiar con una opción a titlesec
(ver más abajo), también se puede hacer a través del pequeño paquete indentfirst
de David Carlisle, independientemente de si el paquete titlesec
está cargado o no.
2.2.6 nonumonpart - Sin números de página en las partes
Otro ajuste que se solicita con frecuencia es eliminar los números de página en los títulos de las partes. En los títulos de los capítulos, esto se puede lograr fácilmente manualmente usando \thispagestyle{empty}
, pero debido a que \parts
en muchas clases ocupa una página completa, no hay posibilidad de colocar dicha declaración. Para resolver esto sin ningún trabajo manual, alguien sugirió algunas líneas de código e Yvon Henel se esforzó en ponerlas en el pequeño paquete “nonumonpart”. Funciona para las clases estándar “informe” y “libro” y cualquier otra clase que se derive de ellas. Todo lo que tienes que hacer es cargar el paquete; no hay opciones ni otras posibilidades de personalización.
2.2.7 titlesec - Enfoque de paquete para el diseño de encabezados
El paquete titlesec
creado por Javier Bezos proporciona una reimplementación flexible y bastante completa de las herramientas de encabezado básicas que ofrece Standard \(\LaTeX\) y, por lo tanto, es una buena opción si se desean realizar ajustes o diseñar nuevas clases de documentos. Funciona junto con la mayoría de las clases de documentos existentes; excepciones notables son las clases memoir
y KOMA-Script
, las cuales tienen sus propias herramientas para configurar las estructuras de encabezados que deben usarse.
El enfoque de Javier supera algunas de las limitaciones inherentes a las herramientas originales de \(\LaTeX\) y proporciona una interfaz más limpia y genérica. El paquete admite dos interfaces: una simple para ajustes más pequeños, que se realiza principalmente mediante opciones del paquete, y una interfaz extendida para realizar modificaciones más elaboradas.
Interfaz básica
La interfaz básica le permite modificar las características de fuente de todos los títulos especificando una o más opciones para establecer una familia de fuentes (rm
, sf
, tt
), una serie de fuentes (md
, bf
), o una forma de fuente (up
, it
, sl
, sc
). Se puede influir en el tamaño del título seleccionando una de las siguientes opciones: big
(los mismos tamaños que para las clases estándar de \(\LaTeX\)), tiny
(todos los títulos excepto los capítulos en tamaño de texto), medio
o pequeño
, que son diseños entre los dos extremos. La alineación se controla mediante raggedleft
, center
o raggedright
, mientras que el espaciado vertical se puede reducir especificando la opción compact
como se muestra más adelante.
Para modificar el formato del número que acompaña a un encabezado, está disponible el comando \titlelabel
. Dentro de él, \thetitle
se refiere al número de sección actual, como \thesection
o \thesubsection
. La declaración se aplica a todos los rubros, como se puede ver en el siguiente ejemplo:
\usepackage[sf,bf,tiny,center]{titlesec} \titlelabel{\thetitle.\enspace} \section{A section} \subsection{A subsection} \subsubsection{A subsubsection} Three headings following each other, a situation you will not see very often \ldots
\titleformat*{cmd}{format}
La interfaz básica ofrece un comando más, \titleformat*
, que requiere dos argumentos. El primer argumento (cmd) es un comando de sección que pretendemos modificar. El segundo argumento (formato) contiene la instrucción de formato que debe aplicarse a este encabezado en particular. Esta declaración funciona en comandos de sección individuales y su uso sobrescribe todas las especificaciones de fuente o alineación proporcionadas como opciones del paquete (es decir, las opciones rm
, it
y raggedleft
en el siguiente ejemplo). El último comando utilizado en el segundo argumento puede ser un comando con un argumento: recibe el texto del título, si está presente. En el siguiente ejemplo usamos esta característica para establecer el título \subsubsection
en minúsculas (aunque esto se ve bastante feo con números de tamaño completo).
\usepackage[rm,it,raggedleft,tiny,compact]{titlesec} \titleformat*{\subsubsection}{\scshape\MakeLowercase} \section{A section} \subsection{A subsection} \subsubsection{A subsubsection} Three headings following each other, a situation you will not see very often \ldots
En muchas clases de documentos \(\LaTeX\) (con o sin cargar titlesec
), las palabras en títulos largos están justificadas y, si es necesario, divididas con guiones, como se puede ver en el siguiente ejemplo. Si no se desea esto, los saltos de línea se pueden ajustar manualmente usando \\
, pero luego hay que repetir el título del encabezado, sin la instrucción de formato adicional, en el argumento opcional. De lo contrario, los saltos de línea también aparecen en la tabla de contenido.
\usepackage[raggedright]{titlesec} \usepackage{lipsum} \section{A very long heading that shows the default behavior of \LaTeX’s sectioning commands} \lipsum[3][1-3] 2-2-11
Alternativamente, se puede usar la opción “raggedright” de la interfaz simple, que luego se aplica a todos los encabezados, o usar la interfaz extendida para tomar una decisión dedicada para cada nivel de encabezado por separado.
Otras dos opciones pueden ofrecer ayuda adicional para tales casos: si especifica nueva línea a espacio
, entonces cualquier \\
o \\*
en el texto del encabezado se reemplaza por un espacio antes de que el texto pase a la tabla de contenidos o en el encabezado en ejecución para que no sea necesario usar el argumento opcional para el comando de encabezado, solo porque el texto tiene saltos de línea explícitos. La opción toctitles
cambia el uso del argumento opcional para que solo especifique el texto para el encabezado en ejecución mientras que el TOC siempre recibe el texto completo.
La sangría del primer párrafo que sigue a los títulos se puede especificar globalmente utilizando las opciones del paquete “indentafter” o “noindentafter”. Con la interfaz extendida esto se puede hacer para niveles de encabezado individuales.
Si los encabezados de los capítulos siempre aparecen en las páginas del anverso (emitiendo internamente un comando \cleardoublepage
), esto a menudo genera una página del reverso vacía, excepto que esta página aún puede contener un número de página o un encabezado continuo. Para forzar que dichas páginas estén totalmente vacías, puede especificar la opción “limpiar”. Consulte también el paquete nextpage
analizado en la Sección 5.6.4 en la página 418 para conocer enfoques alternativos.
Por alguna razón, el valor predeterminado para \part*
utilizado por titlesec
es que estos encabezados aparecen en la tabla de contenido. Si no lo desea, utilice la opción notocpart*
. De lo contrario, el encabezado \part
no se ve influenciado por la configuración de la interfaz básica. Si desea modificarlo, debe utilizar la interfaz extendida que se describe a continuación.
Otra opción específica de los comandos \part
es newparttoc
. Esto cambia las entradas generadas en el TOC para que puedan ser manipuladas por el paquete titletoc
, lo que normalmente no es el caso ya que tienen una definición no estándar en la mayoría de las clases de \(\LaTeX\). Consulte la discusión en la página 72 para obtener más detalles.
Interfaz extendida
La interfaz extendida consta de dos comandos principales, \titleformat
y \titlespacing
. Le permiten declarar el formato “interno” (es decir, fuentes, etiqueta, alineación,…) y el formato “externo” (es decir, espaciado, sangría, etc.), respectivamente. Se adoptó este esquema porque la gente a menudo desea modificar sólo uno u otro aspecto del diseño.
\titleformat{cmd}[shape]{format}{label}{sep}{before-code}[after-code]
El primer argumento (cmd) es el nombre del comando del encabezado (por ejemplo, \section
) cuyo formato se va a modificar. A diferencia de \@startsection
de \(\LaTeX\) (consulte la Sección 2.2.8 en la página 51), este argumento requiere el nombre del comando, es decir, con la barra invertida al frente. Los argumentos restantes tienen el siguiente significado:
forma La forma básica del título. Hay disponibles varias formas predefinidas: hang
, la opción predeterminada, produce una etiqueta colgante (como \section
en las clases estándar); display
coloca la etiqueta y el texto del encabezado en líneas separadas (como el estándar \chapter
); mientras que runin
produce un título de ejecución (como el \paragraph
estándar).
Además, se proporcionan las siguientes formas, que no tienen equivalentes en \(\LaTeX\) estándar: frame es similar a display
pero enmarca el título; leftmargin coloca el título en el leftmargin
, mientras que rightmargin lo coloca en el rightmargin
. Las dos últimas formas pueden entrar en conflicto con los comandos \marginpar
; es decir, pueden superponerse.
Una forma de uso general es “bloque”, que compone el título como un solo bloque. Se debería preferir “colgar” para diseños centrados.
Tanto drop
como wrap
envuelven el primer párrafo alrededor del título, drop
usa un ancho fijo para el título y wrap
usa el ancho de la línea de título más ancha (rompiendo automáticamente el título dentro del límite forzado por el argumento left-sep
de \titlespace
).
formato Las declaraciones que se aplican a todo el título: etiqueta y texto. Pueden incluir únicamente material vertical, que se escribe siguiendo el espacio encima del título. Si necesita material horizontal, debe ingresarlo en la etiqueta o en el argumento antes del código.
etiqueta El formato de la etiqueta, es decir, el número de encabezado. Para referirse al número en sí, use \thesection
o lo que sea apropiado. Para definir encabezados \chapter
, el paquete ofrece \chaptertitlename
, que produce \chaptername
o \appendixname
, dependiendo de la posición del encabezado en el documento.
sep Longitud cuyo valor determina la distancia entre la etiqueta y el texto del título. Dependiendo del argumento forma, podría ser una separación vertical u horizontal. Por ejemplo, con la forma de “marco”, especifica la distancia entre el marco y el texto del encabezado.
before-code Código ejecutado inmediatamente antes del texto del encabezado. Su último comando puede tomar un argumento, que recogerá el texto del encabezado y así permitirá manipulaciones más complicadas (ver Ejemplo 2-2-15).
Desde la versión 2.7, es posible cargar el paquete con la opción explícito
, en cuyo caso el texto del encabezado debe indicarse explícitamente como #1
dentro del antes del código. Esto hace que la declaración sea algo más clara y puede realizar cualquier manipulación directamente en lugar de definir un comando con un argumento para hacer el trabajo.
after-code Código opcional que se ejecutará después de formatear el texto del encabezado (aún dentro del alcance de las declaraciones dadas en formato). Para “colgar”, “bloquear” y “mostrar”, se ejecuta en modo vertical; con runin
, se ejecuta en modo horizontal. Para otras formas, no tiene ningún efecto.
Si se utiliza la forma con asterisco de un encabezado, los argumentos label y sep se ignoran porque no se genera ningún número.
El siguiente ejemplo muestra un encabezado preliminar más antiguo, para el cual definimos solo el formato, no el espacio alrededor del encabezado. Este último se manipula con el comando \titlespace
.
\usepackage{titlesec} \titleformat{\section}[runin]{\normalfont\scshape} {\S\,\oldstylenums{\thesection}.}{.5em}{}[.] \section{The Title} The heading is separated from the section text by a dot and a space of one quad. 2-2-12
De forma predeterminada, los encabezados \section
de \(\LaTeX\) no tienen sangría (generalmente tienen forma colgada
). Si prefiere una sangría de párrafo normal con dicho encabezado, puede agregar \indent
antes del signo \S
o especificar la sangría con la declaración \titlespacing
, que se describe a continuación.
\titlespacing*{cmd}{left-sep}{before-sep}{after-sep}[right-sep]
La forma con asterisco del comando suprime la sangría del párrafo que sigue al título, excepto con formas en las que el encabezado y el párrafo se combinan, como “runin” y “drop”. El argumento cmd contiene el nombre del comando de encabezado que se va a manipular. Los argumentos restantes son los siguientes:
left-sep Longitud que especifica el aumento del margen izquierdo para encabezados con forma de “bloque”, “display”, “colgado” o “marco”. Con las formas …margin
o drop
especifica el ancho del título del encabezado, con wrap
especifica el ancho máximo para el título y con runin
especifica la sangría antes del título (los valores negativos hacer que el título cuelgue en el margen izquierdo).
antes de septiembre Longitud que especifica el espacio vertical añadido encima del título.
después de septiembre Longitud que especifica la separación entre el título y el párrafo siguiente. Puede ser un espacio vertical u horizontal según la forma desplegada.
right-sep Longitud opcional que especifica un aumento del margen derecho, que se admite para las formas bloque
, display
, hang
y frame
.
En el caso de un encabezado preliminar, after-sep es el espacio horizontal después del encabezado que, de forma predeterminada, suele ser notablemente más ancho que un espacio de palabras normal. Esto es razonable para encabezados como el del ejemplo 2-2-12, pero no si el encabezado y el texto siguiente forman una oración, en cuyo caso queremos un espacio de palabras normal. Para esto, puede usar \wordsep
en después de septiembre, que se refiere al espacio entre palabras (incluido ampliar y reducir) de la fuente actual.
\usepackage{titlesec} \titleformat {\paragraph}[runin]{\normalfont\scshape}{}{0pt}{} \titlespacing{\paragraph}{\parindent}{\medskipamount}{\wordsep} \noindent \ldots\ some text above. \paragraph{The man} started to run away from the truck. He saw that he was followed by the \ldots
Los argumentos antes de septiembre y después de septiembre generalmente reciben valores de longitud de caucho para permitir cierta flexibilidad en el diseño. Para simplificar la declaración, también puede especificar \(*f\) (donde \(f\) es un factor decimal). Esto es equivalente a \(f ex\) con cierta capacidad de estiramiento, así como una pequeña capacidad de contracción dentro de antes de septiembre, y una capacidad de estiramiento aún menor y ninguna contracción dentro de después de septiembre.
\usepackage{titlesec} \titleformat{\section}[frame]{\normalfont} {\footnotesize \enspace SECTION \thesection \enspace}{6pt}{\large\bfseries\filcenter} \titlespacing*{\section}{1pc}{*4}{*2.3}[1pc] \noindent \ldots some text before \ldots \section{A Title Test} Some text to prove that this paragraph is not indented and that the title has a margin of 1pc on either side.
El ejemplo anterior introdujo \filcenter
, pero también hay \filleft
, \filright
y \fillast
; este último produce un párrafo ajustado pero centra la última línea. Se deben preferir estos comandos a \raggedleft
o \raggedright
dentro de \titleformat
, ya que estos últimos cancelarían left-sep o right-sep configurados por el comando \titlespacing
. Alternativamente, puede usar \filinner
o \filouter
, que se resuelven en \filleft
o \filright
, dependiendo de la página actual. Sin embargo, debido al algoritmo de creación de páginas asíncrono de \(\TeX\), solo se admiten para encabezados que comienzan una nueva página, por ejemplo, \chapter
en la mayoría de los diseños. Consulte el Ejemplo 2-2-17 en la página 49 para obtener una solución a este problema para otros títulos. Otro comando de espaciado útil que ya usamos en el Ejemplo 2-2-13 es \wordsep
, que se refiere al espacio entre palabras actual.
De forma predeterminada, el espacio entre dos encabezados consecutivos se define como el después del septiembre del primero. Si no desea este resultado, puede cambiarlo especificando la opción largestsep
, que pone el espaciado al máximo de después de septiembre del primer encabezado y antes de septiembre del segundo.
Normalmente, el espacio vertical ocupado por un encabezado de visualización es la suma de antes de septiembre, el tamaño del texto del encabezado real y después de septiembre; es decir, varía dependiendo del número de líneas del título. Sin embargo, en algunos diseños, el texto que sigue al título del capítulo siempre debe comenzar en el mismo punto. Esto se puede lograr especificando la opción “capítulos rígidos”. Si se usa, después de septiembre ya no especifica el espacio debajo del título, sino que siempre se mide desde la parte superior del texto del título; es decir, la suma de antes de septiembre y después de septiembre define el espacio reservado para el encabezado. A pesar de su nombre, la opción se aplica a cualquier título de la clase “top”; ver página 50.
Después de un encabezado, \(\LaTeX\) intenta asegurarse de que al menos dos líneas del siguiente párrafo aparezcan en la misma página que el título del encabezado. Si esto resulta imposible, el título se mueve a la página siguiente. Si cree que dos líneas no son suficientes, pruebe la opción nobottomtitles
o nobottomtitles*
, que mueven los encabezados a una nueva página siempre que el espacio restante en la página sea menor que el valor actual de \bottomtitlespace
. (Su valor predeterminado es .2\textheight
; para cambiar su valor, use \renewcommand
en lugar de \setlength
). Se prefiere la versión destacada, ya que calcula el espacio restante con mayor precisión, a menos que use encabezados con Formas de “soltar”, “margen” o “envolver”, que pueden quedar mal ubicadas al implementar la opción destacada.
En la mayoría de los diseños de títulos, el número aparece en la parte superior o a la izquierda del texto del título. Si esta ubicación no es apropiada, no se puede utilizar el argumento label de \titleformat
. En cambio, uno tiene que explotar el hecho de que el código anterior puede recoger el texto del encabezado. En el siguiente ejemplo, el comando \secformat
tiene un argumento que define el formato para el texto y el número del encabezado; luego llamamos a este comando en el argumento before-code de \titleformat
. Tenga en cuenta que el cambio de fuente para el número se mantiene local rodeándolo entre llaves. Sin ellos, el tamaño de fuente modificado podría influir en el espaciado del título en algunas circunstancias.
\usepackage{titlesec} \newcommand\secformat[1]{% \parbox[b]{.5\textwidth}{\filleft\bfseries #1}% \quad\rule[-12pt]{2pt}{70pt}\quad {\fontsize{60}{60}\selectfont\thesection}} \titleformat{\section}[block] {\filleft\normalfont\sffamily}{}{0pt}{\secformat} \titlespacing*{\section}{0pt}{*3}{*2}[1pc] \section{A Title\\ on Two Lines} In this example the heading number appears to the right of the heading text.
Se puede aplicar la misma técnica para cambiar el texto del título de otras formas. Por ejemplo, si queremos un punto después del texto del encabezado, podríamos definir
\newcommand\secformat[1]{#1.}
y luego llame a \secformat
en el último argumento obligatorio de la declaración \titleformat
como se muestra en el ejemplo anterior. Alternativamente, podríamos haber usado la opción “explícita”, en cuyo caso dichas manipulaciones podrían haberse realizado en línea con “#1” haciendo referencia al texto del encabezado dentro de ese argumento.
La forma “wrap” tiene la capacidad de medir las líneas en el texto del título y devolver el ancho de la línea más ancha en “”. Esta capacidad se puede extender a otras tres formas (“bloque”, “mostrar” y “colgar”) cargando el paquete con la opción “calcwidth” y luego usando “” dentro de los argumentos de “\titleformat”, como necesario.
Medir el título significa componerlo de prueba y, por lo tanto, se compone dos veces. En algunos casos esto puede tener efectos secundarios indeseables. Por lo tanto, para requisitos especiales, el paquete ofrece el comando \iftitlemeasuring
. Se necesitan dos argumentos: el primero se ejecuta durante el juicio y el segundo cuando finalmente se compone el encabezado.
Para reglas y líderes, el paquete ofrece el comando \titlerule
. Usado sin ningún argumento, produce una regla de altura .4pt que abarca todo el ancho de la columna (pero teniendo en cuenta los cambios en los márgenes como se especifica con la declaración \titlespacing
). Un argumento opcional le permite especificar una altura para la regla producida. La forma con asterisco de \titlerule
se utiliza para producir líderes (es decir, objetos repetidos) en lugar de reglas. Se necesita un argumento opcional de ancho y un argumento obligatorio de texto. El texto se escribe repetidamente en cuadros con su ancho natural, a menos que se especifique un ancho diferente en el argumento opcional. En ese caso, sólo la primera y la última casilla conservan sus anchos naturales para permitir una alineación adecuada en ambos lados.
El comando \titleline
le permite agregar material horizontal a los argumentos de \titleformat
que esperan material vertical. Se necesita un argumento opcional que especifique la alineación y un argumento obligatorio que contenga el material a componer. Produce un cuadro de ancho fijo teniendo en cuenta los cambios marginales debidos a la declaración \titlespacing
. Por lo tanto, el material debe contener algo de espacio de goma o debe especificar una alineación mediante el argumento opcional (los valores permitidos son l
, r
y c
).
La variante \titleline*
primero escribe el material de su argumento obligatorio en un cuadro de ancho \titlewidth
(por lo que es posible que tengas que agregar un espacio elástico a este argumento) y luego usa este cuadro como entrada para \titleline
( es decir, lo alinea según el argumento opcional). Recuerde que es posible que deba usar la opción calcwidth
para asegurarse de que \titlewidth
contenga un valor razonable.
En el siguiente ejemplo algo artificial, que vale la pena estudiar aunque es mejor no utilizarlo en la vida real, se aplican todas estas herramientas juntas:
\usepackage[noindentafter,calcwidth]{titlesec} \titleformat{\section}[display] {\filright\normalfont\bfseries\sffamily} {\titleline[r]{Section \Huge\thesection}}{1ex} {\titleline*[l]{\titlerule[1pt]}\vspace{1pt}% \titleline*[l]{\titlerule[2pt]}\vspace{2pt}} [{\titleline*[l]{\titlerule*{\tiny\LaTeX}}}] \titlespacing{\section}{1pc}{*3}{*2} \section{Rules and Leaders} Note that the last \verb=\titleline*= is surrounded by braces. Without them its optional argument would prematurely end the outer optional argument of \verb=\titleformat=.
El estándar \(\LaTeX\) considera que el espacio antes de un encabezado es un buen lugar para dividir la página a menos que el encabezado siga inmediatamente a otro encabezado. La penalización por romper en este punto se almacena en el contador interno \@secpenalty
, y en muchas clases tiene el valor -300
(los valores negativos son lugares de bonificación por romper). Debido a que sólo hay un valor de penalización disponible para todos los niveles de encabezado, rara vez tiene sentido modificar su configuración. Con titlesec
, sin embargo, puedes ejercer un control más preciso: cada vez que se define un comando \namebreak
(donde \name
es el nombre de un comando de sección, como \sectionbreak
), se usará este último en su lugar. de añadir la pena por defecto. Por ejemplo,
\newcommand\sectionbreak{\clearpage}
daría como resultado que las secciones siempre aparezcan en la parte superior de una página y todos los flotantes pendientes se escriban primero. Esta interfaz también existe para los encabezados de la clase “top”. Por ejemplo, puede forzar que las partes comiencen siempre en una página anverso, mientras que los capítulos se pueden configurar para que simplemente comiencen en una página nueva usando \cleardoublepage
y \clearpage
, respectivamente. Sin embargo, primero debes cambiar su clase a “página” o “arriba”, porque esto no se hace automáticamente. Las clases de encabezado se explican en la página 50.
En algunos diseños, se debe conservar el espacio encima de un encabezado, incluso si el encabezado aparece en la parte superior de una página (de forma predeterminada, dichos espacios desaparecen en los saltos de página). Esto se puede lograr usando una definición como la siguiente:
\newcommand\sectionbreak{\addpenalty{-300}\vspace*{0pt}}
El comando \addpenalty
indica un (bueno) punto de interrupción, seguido de un espacio cero que no puede desaparecer. Por lo tanto, el espacio “antes” del título también aparecerá en la parte superior de la página si se hace una pausa en la penalización.
Los títulos que inician una nueva página a menudo requieren un estilo de página especial; por ejemplo, los comandos \chapter
en los estilos estándar generalmente usan plain
incluso si para otras páginas se ha configurado un estilo diferente. Para adaptarse a los ajustes, titlesec ofrece el comando \assignpagestyle
. Por ejemplo,
\assignpagestyle{\chapter}{empty}
da como resultado que las páginas que comienzan un nuevo capítulo no tengan ni un número de página ni un encabezado continuo. Este comando funciona con cualquier encabezado de clase top
o page
; consulte la página 50. Sin embargo, existen restricciones cuando el comando de sección no se definió con titlesec
; por ejemplo, cuando se utilizan las clases de documentos estándar, funciona para \chapter
pero no para \part
. Para esto último, primero debe volver a declarar un formato con \titleformat
.
Diseños de encabezado condicionales
Hasta ahora hemos visto cómo definir diseños fijos para un comando de encabezado usando \titleformat
y \titlespacing
. El paquete titlesec
también le permite cambiar condicionalmente el diseño en páginas de reverso y anverso y usar diseños especiales para innumerables encabezados (es decir, aquellos producidos por la forma con asterisco del comando de encabezado).
Esto se implementa mediante una sintaxis de palabra clave/valor en el primer argumento de \titleformat
y \titlespacing
. Las claves disponibles son nombre
, página
(valores impar
o par
) y sin número
(valores verdadero
o falso
). De hecho, la sintaxis que hemos visto hasta ahora, \titleformat{\section}{...}....
, es simplemente una abreviatura de la forma general \titleformat{name=\section}{...}. .
.
A diferencia de los comandos de espaciado \filinner
y \filouter
, que sólo se pueden usar con encabezados que inician una nueva página, la palabra clave page
le permite definir diseños que dependen de la página actual sin ninguna restricción. Para especificar el diseño de una página en reverso (izquierda), utilice el valor “par”; para una página anverso (derecha), utilice el valor “impar”. Estas configuraciones sólo afectan a un documento escrito en modo “dos caras”. De lo contrario, todas las páginas se consideran anverso en \(\LaTeX\). En el siguiente ejemplo usamos una forma de “bloque” y desplazamos el encabezado hacia un lado, dependiendo de la página actual. De manera similar, podrías implementar encabezados que se coloquen en el margen usando las formas “margen izquierdo” y “margen derecho”.
El ejemplo también muestra que colocar declaraciones en el argumento formato afecta tanto al número como al título, mientras que colocarlas en antes del código afecta solo al título: ambos están en negrita, pero solo el texto está en negrita y cursiva.
\usepackage{lipsum,titlesec} \titleformat{name=\section,page=odd}[block] {\normalfont\bfseries}{\thesection.}{6pt} {\itshape\filleft} \titleformat{name=\section,page=even}[block] {\normalfont\bfseries}{\thesection.}{6pt} {\itshape\filright} \section{A Head}|\lipsum[1][1-4] \section{Another}|\lipsum[1][1-4]
De manera similar, la clave “sin números” se usa para especificar que una determinada declaración “\titleformat” o “” debe aplicarse solo a encabezados sin números (valor “verdadero”) o a aquellos con números (valor “falso”). De forma predeterminada, una declaración de encabezado se aplica a ambos casos, por lo que en el ejemplo la segunda declaración en realidad sobrescribe parte de la primera declaración. Para ilustrar lo que es posible, el ejemplo utiliza diseños bastante diferentes para los dos casos; no confunda esto con un intento de mostrar buen gusto. Es importante darse cuenta de que ni el argumento label ni el sep se ignoran cuando numberless
se establece en true
como se ve en el ejemplo; en circunstancias normales, probablemente usarías {}{0pt}
como valores.
\usepackage{titlesec} \titleformat{name=\section}[block] {\normalfont\bfseries}{\thesection.}{6pt}{\filright} \titleformat{name=\section,numberless=true}[block] {\normalfont}{---}{12pt}{\itshape\filcenter} \section{A Head} Some text to fill the page. Some text to fill the page. \section*{Another} Some text to fill this line.
Cambiar la jerarquía de encabezados
Los comandos descritos hasta ahora tienen como objetivo ajustar el formato y el espaciado de los comandos de encabezado existentes. Con la declaración \titleclass
es posible definir nuevos encabezados.
\titleclass{cmd}{class} \titleclass{cmd}{class}[parent-level-cmd] \titleclass{cmd}[start-level]{class} (with loadonly option)
Hay tres clases de encabezados: la clase página
contiene encabezados que ocupan una página completa (como \part
en las clases de documentos informe
y libro
de \(\LaTeX\)); la clase top
contiene encabezados que inician una nueva página y, por lo tanto, aparecen en la parte superior de una página; y todas las demás partidas se consideran parte de la clase “normal”.
Usada sin ningún argumento opcional, la declaración \titleclass
simplemente cambia la clase de encabezado de un encabezado cmd existente. Por ejemplo,
\titleclass\section{top}
daría como resultado que las secciones siempre comiencen una nueva página. Tenga en cuenta, sin embargo, que el cmd existente debería haberse definido usando titlesec
o al menos debería haber recibido un formato con \titleformat
para poder funcionar. De lo contrario, recibirá un mensaje de error.
Si esta declaración se utiliza con el argumento opcional parent-level-cmd, introduce un nuevo nivel de encabezado debajo de parent-level-cmd. Cualquier comando de encabezado existente en este nivel se mueve un nivel hacia abajo en la jerarquía. Por ejemplo,
\titleclass\subchapter{straight}[\chapter]
introduce el encabezado \subchapter
entre \chapter
y \section
. La declaración no define ningún diseño para este encabezado (que debe definirse mediante un comando adicional \titleformat
y \titlespace
), ni inicializa el contador necesario. Lo más probable es que también quieras actualizar la representación del contador para \sección
:
\titleformat{\subchapter}{..}... \titlespacing{\subchapter}{..}... \newcounter{subchapter} \renewcommand\thesubchapter{\thechapter.\arabic{subchapter}} \renewcommand\thesection{\thesubchapter.\arabic{section}}
La tercera variante de \titleclass
sólo es necesaria cuando desea crear una estructura de encabezado desde cero; por ejemplo, cuando está diseñando una clase de documento completamente nueva que no se basa en una de las clases estándar. En ese caso, cargue el paquete con la opción loadonly
para que el paquete no intente interpretar los comandos de encabezado existentes para extraer su diseño actual. Luego puede comenzar a crear comandos de encabezado, como en el siguiente ejemplo:
\titleclass\Ahead[0]{top} \titleclass\Bhead{straight}[\Ahead] \titleclass\Chead{straight}[\Bhead] \newcounter{Ahead} \newcounter{Bhead} \newcounter{Chead} \renewcommand\theBhead{\theAhead-\arabic{Bhead}} \renewcommand\theChead{\theBhead-\arabic{Chead}} \titleformat{name=\Ahead}{..}... \titlespacing{name=\Ahead}{..}... \titleformat{name=\Bhead}{..}... ...
El nivel inicial suele ser 0
o -1
; consulte la introducción en la Sección 2.2 para conocer su significado. Debería haber precisamente una declaración \titleclass
que utilice este argumento opcional en particular.
Si tiene la intención de crear sus propias clases de documentos de esta manera, consulte la documentación que acompaña al paquete titlesec
. Contiene ejemplos adicionales y ofrece más consejos y trucos.
2.2.8 Formateo de encabezados - métodos internos de bajo nivel de LaTeX
Si bien se recomienda utilizar las interfaces de nivel superior proporcionadas por titlesec
o las definidas por KOMA-Script
o la clase memoir
, es útil tener una comprensión básica de las interfaces definidas en \(\LaTeX\). kernel, dado que estas interfaces todavía están en uso en muchas clases de documentos.
\(\LaTeX\) proporciona un comando genérico llamado \@startsection
que se puede utilizar para definir una amplia variedad de diseños de encabezados. Si el diseño deseado no se puede lograr de esa manera, entonces se puede usar \secdef
para producir formatos de sección con un diseño arbitrario. Es utilizado por las clases estándar para definir los encabezados \chapter
y \part
.
El comando genérico \@startsection
permite definir ambos tipos de encabezados. Su sintaxis y descripción de argumentos son los siguientes:
\@startsection{name}{level}{indent}{beforeskip}{afterskip}{style}
nombre El nombre utilizado para hacer referencia al contador de encabezados para encabezados numerados y para definir el comando que genera un encabezado o pie de página (consulte la página 390). Por ejemplo, nombre sería el nombre del contador, \the
name sería el comando para mostrar el número de encabezado actual y *mark
sería el comando para ejecutar encabezados. En la mayoría de las circunstancias, el nombre* será idéntico al nombre del comando de sección que se define, sin la barra invertida anterior, pero esto no es un requisito.
nivel Un número que indica el nivel de profundidad del comando de seccionamiento. Este nivel se utiliza para decidir si el comando de sección obtiene un número (si el nivel es menor o igual a secnum Depth
; consulte la Sección 2.2.1 en la página 34) o aparece en la tabla de contenido (si el valor es menor o igual a toc Depth
; consulte la Sección 2.3.4 en la página 71). Por lo tanto, debería reflejar la posición en la jerarquía de mando de los comandos de seccionamiento, donde el comando de seccionamiento más externo tiene nivel cero.
sangría La sangría del título con respecto al margen izquierdo. Al hacer que el valor sea negativo, el título comienza en el margen exterior. Al hacerlo positivo, se sangra todas las líneas del título en esta cantidad.
beforeskip El valor absoluto de este parámetro define el espacio que se dejará delante del encabezado. Si el parámetro es negativo, se suprime la sangría del párrafo que sigue al título. Esta dimensión es una longitud de goma; es decir, puede llevar un componente de estiramiento y contracción. Tenga en cuenta que \(\LaTeX\) comienza un nuevo párrafo antes del encabezado, de modo que además el valor de \parskip
se agrega al espacio al frente.
afterskip El espacio que se dejará después de un encabezado. Es el espacio vertical después de un encabezado de visualización o el espacio horizontal después de un encabezado preliminar. El signo de afterskip controla si se produce un encabezado de visualización (afterskip > 0
) o un encabezado inicial (afterskip ≤ 0
). En el primer caso, se comienza un nuevo párrafo de modo que el valor de \parskip
se agrega al espacio después del encabezado. Un efecto secundario desagradable de este acoplamiento de parámetros es que es imposible definir un encabezado de visualización con un “espacio posterior” efectivo menor que \parskip
usando el comando \@startsection
. Cuando intenta compensar un valor \parskip
positivo utilizando un afterskip
negativo, cambia el encabezado de visualización a un encabezado inicial.
estilo El estilo del texto del encabezado. Este argumento puede tomar cualquier instrucción que influya en la composición tipográfica del texto, como \raggedright
, \Large
o \bfseries
(consulte los ejemplos a continuación).
La Figura 2.1 muestra gráficamente estos parámetros para el caso de encabezados de visualización y rodaje, respectivamente. Como ejemplo, redefinimos \subsection
para que se establezca en cursiva de tamaño normal y la separación del texto anterior sea exactamente una línea de base. La separación del texto siguiente es la mitad de la línea de base y este texto no tiene sangría.
\makeatletter \renewcommand\subsection{\@startsection {subsection}{2}{0mm}% % name, level, indent {-\baselineskip}{0.5\baselineskip}% % beforeskip, afterskip {\normalfont\normalsize\itshape}}% % style \makeatother \ldots\ some text above. \subsection{Subsection Heading} The first paragraph following the redefined subsection heading \ldots \par And a second one (indented). 2-2-21
El primer argumento de \@startsection
es la cadena subsection
para indicar que usamos el contador correspondiente para los números de encabezado. En la jerarquía seccional estamos en el nivel dos. El tercer argumento es “0 mm” porque el título debe comenzar en el margen izquierdo.
The absolute value of the fourth argument (beforeskip) specifies that a distance equal to one baseline must be left in front of the heading and, because the parameter is negative, that the indentation of the paragraph following the heading should be suppressed.
El valor absoluto del quinto parámetro (afterskip) especifica que se debe dejar una distancia igual a la mitad de la línea de base después del rumbo y, debido a que el parámetro es positivo, se debe generar un rumbo de visualización. Finalmente, de acuerdo con el sexto parámetro, el encabezado debe escribirse en cursiva usando un tamaño igual al tamaño normal del tipo de documento.
De hecho, la redefinición es demasiado simplista porque, como se mencionó anteriormente, además del valor absoluto de beforeskip y afterskip, \(\LaTeX\) siempre agrega el valor actual de \parskip
. Por lo tanto, en diseños donde este parámetro es distinto de cero, debemos restarlo para lograr la separación deseada.
¿Qué comandos se pueden usar para configurar los estilos de los textos de encabezado en el argumento estilo del comando \@startsection
? Aparte de las directivas de cambio de fuente (consulte el Capítulo 9), aquí se pueden utilizar algunas instrucciones. Un comando \centering
produce un encabezado de visualización centrado, y una declaración \raggedright
hace que el texto esté justificado a la izquierda. El uso de \raggedleft
es posible, pero puede dar resultados algo extraños. También puede utilizar \hrule
, \medskip
, \newpage
o comandos similares que introducen cambios locales.
En las clases estándar \(\LaTeX\), los comandos de sección de nivel más alto \part
y \chapter
producen sus títulos sin usar \@startsection
porque su diseño no se puede producir con ese comando. De manera similar, es posible que también desee crear comandos de sección sin limitaciones. En este caso, debes seguir algunas convenciones para permitir que \(\LaTeX\) realice todas las acciones de composición necesarias al ejecutarlas.
El comando \secdef
puede ayudarle a definir dichos comandos al proporcionar una interfaz sencilla para las tres formas posibles de encabezados de sección. con la definicion
\newcommand\myhead{\secdef\myheadA\myheadB}
se llevan a cabo las siguientes acciones:
\myhead{title} invokes \myheadA[title]{title} \myhead[toc-entry]{title} invokes \myheadA[toc-entry]{title} \myhead*{title} invokes \myheadB{title}
Los comandos que debe proporcionar son una (re)definición de \myhead
y una definición de los comandos denominados \myheadA
o \myheadB
, respectivamente. Tenga en cuenta que \myheadA
tiene un argumento opcional que contiene el texto que se ingresará en el archivo de tabla de contenido .toc
, mientras que el segundo argumento (obligatorio), así como el argumento único de \myheadB
, especifica el encabezado texto a componer. Así, las definiciones deben tener la siguiente estructura:
\newcommand\myhead{ ... \secdef \myheadA \myheadB } \newcommand\myheadA[2][default]{ ... } \newcommand\myheadB[1]{ ... }
Un ejemplo explícito es una variante simplificada de \appendix
. Redefine el comando \sección
para producir encabezados para apéndices (invocando el comando \Appendix
o \sAppendix
), cambiando la presentación del contador de sección
y restableciéndolo a cero. El comando \section
modificado también inicia una nueva página (con todos los flotantes diferidos colocados), que está compuesta con un estilo de página especial (consulte el Capítulo 5) y con los flotantes superiores suprimidos. La sangría del primer párrafo de una sección también se suprime utilizando el comando del kernel de bajo nivel \@afterheading
y configurando el parámetro booleano @afterindent
en false
. Para obtener detalles sobre el uso de estos comandos, consulte la implementación \chapter
en las clases estándar (archivo classes.dtx
).
\makeatletter \renewcommand\appendix{% \renewcommand\section{% % Redefinition of \section... \clearpage\thispagestyle{plain}% % new page, folio bottom \suppressfloats[t]\@afterindentfalse % no top floats, no indent \secdef\Appendix\sAppendix}% % call \Appendix or \sAppendix \setcounter{section}{0}\renewcommand\thesection{\Alph{section}}}
En la definición siguiente puede ver cómo \Appendix
avanza el contador de sección
usando el comando \refstepcounter
(este último también restablece todos los contadores subsidiarios y define la “cadena de referencia actual”; consulte la Sección 2.4). Escribe una línea en el archivo .toc
con el comando \addcontentsline
, formatea el título del encabezado y guarda el título para los encabezados y/o pies ejecutables llamando a \sectionmark
. El comando \@afterheading
en la última parte de la definición maneja la sangría del párrafo que sigue al encabezado.
\newcommand\Appendix[2][?]{% % Complex form: \refstepcounter{section}% % step counter/ set label \addcontentsline{toc}{appendix}% % generate toc entry {\protect\numberline{\appendixname~\thesection}#1}% {\raggedleft\large\bfseries \appendixname\ % typeset the title \thesection\par \centering#2\par}% % and number \sectionmark{#1}% % add to running header \@afterheading % prepare indentation handling \addvspace{\baselineskip}} % space after heading
El comando \sAppendix
(formato con estrella) realiza solo el formateo.
\newcommand\sAppendix[1]{% % Simplified (starred) form {\raggedleft\large\bfseries\appendixname\par \centering#1\par}% \@afterheading\addvspace{\baselineskip}} \makeatother
La aplicación de estas definiciones produce el siguiente resultado:
% Example needs commands introduced above! \appendix \section{The list of all commands} Then follows the text of the first section in the appendix. Some more text in the appendix.
No olvide que el ejemplo que se muestra arriba representa solo una versión simplificada de un comando \section
redefinido. Entre otras cosas, no tuvimos en cuenta el contador “secnum Depth”, que contiene el umbral de numeración. Es posible que también deba prever código que se ocupe de varios tipos de formatos de documentos, como salida de una y dos columnas o impresión de una y dos caras. También falta una definición apropiada para \l@appendix
, que se llama en la tabla de contenido debido a \addcontentsline
. Esto se analiza al comienzo de la Sección 2.3.4 en la página 70.