2.1 Estructura general de un archivo fuente

Puedes utilizar \(\LaTeX\) para varios propósitos, como escribir un artículo o un libro o producir presentaciones. Claramente, documentos para diferentes propósitos pueden necesitar diferentes estructuras lógicas, es decir, diferentes comandos y entornos. Decimos que un documento pertenece a una clase de documentos que tienen la misma estructura general (pero no necesariamente la misma apariencia tipográfica). Usted especifica la clase a la que pertenece su documento iniciando su archivo \(\LaTeX\) con un comando \documentclass, donde el parámetro obligatorio especifica el nombre de la clase de documento. La clase de documento define los entornos y comandos lógicos disponibles (por ejemplo, \chapter en la clase report), así como un formato predeterminado para esos elementos. Un argumento opcional le permite modificar el formato de esos elementos proporcionando una lista de opciones de clase. Por ejemplo, 11pt es una opción reconocida por la mayoría de las clases de documentos que indica a \(\LaTeX\) que elija once puntos como tamaño de tipo de documento básico.

Muchos comandos de \(\LaTeX\) descritos en este libro no son específicos de una sola clase, pero se pueden usar con varias clases. Una colección de tales comandos se llama paquete, y usted informa a \(\LaTeX\) sobre su uso de ciertos paquetes en el documento colocando uno o más comandos \usepackage después de \documentclass.

Al igual que la declaración \documentclass, \usepackage tiene un argumento obligatorio que consiste en el nombre del paquete y un argumento opcional que puede contener una lista de opciones del paquete que modifican el comportamiento del paquete.

Las clases de documentos y los paquetes residen en archivos externos con las extensiones .cls y .sty, respectivamente. El código de las opciones a veces se almacena en archivos externos (en el caso de archivos de clase con la extensión .clo), pero normalmente se especifica directamente en el archivo de clase o paquete (consulte el Apéndice A para obtener información sobre cómo declarar opciones en clases y paquetes). Sin embargo, en el caso de las opciones, el nombre del archivo puede diferir del nombre de la opción. Por ejemplo, la opción 11pt está relacionada con size11.clo cuando se usa en la clase de artículo y con bk11.clo dentro de la clase de libro.

Los comandos colocados entre \documentclass y \begin{document} están en el llamado preámbulo del documento. Todos los parámetros de estilo deben definirse en este preámbulo, ya sea en archivos de paquete o clase o directamente en el documento antes del comando \begin{document}, que establece los valores para algunos de los parámetros globales. El preámbulo de un documento típico podría ser similar al siguiente:

\documentclass[twocolumn,a4paper]{article} \usepackage{multicol} \usepackage[ngerman,french]{babel} \addtolength\textheight{3\baselineskip} \begin{document}

El preámbulo de este documento define que la clase del documento es “artículo” y que el diseño está influenciado por la solicitud de formato “dos columnas” (compuesta en dos columnas) y la opción “a4paper” (imprimir en papel A4). La primera declaración \usepackage informa a \(\LaTeX\) que este documento contiene comandos y estructuras proporcionadas por el paquete multicol. Además, se carga el paquete babel con las opciones ngerman (soporte para el idioma alemán) y french (soporte para el idioma francés). Finalmente, la altura predeterminada del cuerpo del texto se amplió en tres líneas para este documento.

Generalmente, los archivos de paquetes \(\LaTeX\) no estándar contienen modificaciones, extensiones o mejoras con respecto al \(\LaTeX\) estándar, mientras que los comandos en el preámbulo definen cambios para el documento actual. Así, para modificar la disposición de un documento, tienes varias posibilidades:

  • Cambiar la configuración estándar de los parámetros en un archivo de clase con opciones definidas para esa clase.
  • Agregue uno o más paquetes a su documento y utilícelos.
  • Cambiar la configuración estándar de los parámetros en un archivo de paquete con opciones definidas para ese paquete.
  • Escriba sus propios paquetes locales que contengan configuraciones de parámetros especiales y cárguelos con \usepackage después del paquete o clase que se supone que deben modificar (como se explica en la siguiente sección).
  • Realizar ajustes finales dentro del preámbulo.

Si desea profundizar en los aspectos internos de \(\LaTeX\), puede, por supuesto, definir sus propios paquetes de propósito general que puedan manipularse con opciones. Encontrará información adicional sobre este tema en el Apéndice A.

2.1.1 Alerta de spoiler - el comando DocumentMetadata

Cuando \(\LaTeX\) cambió de \(\LaTeX\) 2.09 a \(LaTEX 2ε\) alrededor de 1994, la estructura general del documento se cambió ligeramente para distinguir automáticamente los documentos antiguos de los nuevos (para cambiar al modo de compatibilidad, si es necesario). Los documentos de \(LaTEX 2ε\) comienzan con \documentclass como se describe arriba, mientras que los documentos de \(\LaTeX\) 2.09 comienzan con el comando \documentstyle y \usepackage no estaba disponible.

Ahora, aproximadamente un cuarto de siglo después, se está produciendo otro cambio importante durante el cual \(\LaTeX\) se está modernizando para admitir PDF/UA (formato de documento portátil/accesibilidad universal) accesible y otras funciones que son importantes para que siga siendo útil; consulte la discusión en la Sección 1.1 en la página 7. Esta vez, el cambio de funcionalidad es esencialmente compatible con versiones anteriores y los documentos antiguos se pueden reprocesar fácilmente utilizando las nuevas funciones. Por lo tanto, en lugar de dividir los documentos en dos clases (antiguas y nuevas) cambiando el primer comando, ahora puede indicar que desea utilizar la nueva funcionalidad agregando una declaración \DocumentMetadata delante de \documentclass mientras deja el resto del documento sin cambios.

\DocumentMetadata{key/value list}

Esta declaración debe ser el primer comando de un documento; es decir, si está presente, debería aparecer antes de \documentclass. Espera una lista clave/valor como argumento en el que usted especifica “metadatos” sobre el documento que guía la producción del resultado final, por ejemplo, si cumple con un determinado estándar, si es un PDF etiquetado, qué es su autor, título y palabras clave que se muestran en los metadatos del PDF resultante, etc. Todos estos “metadatos” se almacenan para que los paquetes y los usuarios puedan acceder a los datos de forma coherente.

Por ejemplo, la clave pdfversion le permite configurar la versión PDF. Con la clave pdfstandard es posible requerir un estándar como A-2b. Si se especifica eso, indica a \(\LaTeX\) que incruste un perfil de color apropiado y configure pruebas de verificación que paquetes como hyperref pueden usar para suprimir acciones no permitidas en este estándar. Otro ejemplo es la clave backend que le permite especificar un backend, por ejemplo, dvipdfmx o dvisvg, que es útil en casos en los que el backend correcto no se puede detectar automáticamente.

Al momento de escribir este libro, los detalles sobre qué otras claves serán compatibles todavía están abiertos (después de todo, todo el ejercicio es un proyecto de varios años [150]), pero lo que podemos decir es que ya puedes usar esta futura interfaz para habilitar algunas funciones nuevas. Por ejemplo, simplemente agregando

\DocumentMetadata{} \documentclass{article}    % (or any other class) ...    % with preamble as previously \begin{document}

es suficiente cargar el nuevo código de soporte para administrar la salida de PDF, y esto permite que paquetes, como hyperref, proporcionen funciones que de otro modo no estarían disponibles; consulte la Sección 2.4.6 en la página 96 para obtener más detalles.

2.1.2 Procesamiento de opciones de la clase de documento y paquetes

Puede pensar en las opciones para la clase de documento o para los paquetes como una forma sencilla de ajustar algunas de las propiedades de todo el documento (cuando se usa en \documentclass) o de las propiedades de paquetes individuales (si se especifican en \usepackage). Por lo general, también es posible un control más detallado a través de declaraciones y comandos de configuración que están definidos por un archivo de clase o paquete y que están disponibles para su uso una vez que se carga ese archivo.

Puede especificar opciones en un comando \usepackage solo si estas opciones están declaradas explícitamente por el paquete. De lo contrario, recibirá un mensaje de error que le informará que el paquete en cuestión desconoce la opción especificada. Las opciones de \documentclass se manejan de forma ligeramente diferente. Si la clase no declara una opción específica, se supone que es una “opción global”.

Todas las opciones dadas a \documentclass (ya sea declaradas o globales) se pasan automáticamente como opciones de clase a todas las declaraciones \usepackage. Por lo tanto, si un archivo de paquete cargado con una declaración \usepackage reconoce (es decir, declara) algunas de las opciones de clase, puede tomar las acciones apropiadas. De lo contrario, las opciones de clase se ignoran mientras se procesa ese paquete. Debido a que todas las opciones deben definirse dentro del archivo de clase o paquete, sus acciones están bajo el control de la clase o paquete (una acción puede ser cualquier cosa, desde configurar interruptores internos hasta leer un archivo externo). Por esta razón, su orden en el argumento opcional de \documentclass o \usepackage es (normalmente) irrelevante.

Si desea utilizar varios paquetes, todos con el mismo conjunto de opciones (por ejemplo, ninguno), es posible cargarlos todos con un solo comando \usepackage especificando los nombres de los paquetes como una lista separada por comas en el argumento obligatorio. Por ejemplo,

\usepackage[ngerman]{babel}    \usepackage[ngerman]{varioref} \usepackage{array}    \usepackage{multicol}

es equivalente a

\usepackage[ngerman]{babel,varioref}    \usepackage{array,multicol}

Al especificar ngerman como una opción global para la clase, podemos acortar aún más la declaración \usepackage ya que ngerman se pasa a todos los paquetes cargados y, por lo tanto, será procesado por aquellos paquetes que lo declaren.

\documentclass[ngerman]{book} \usepackage{babel,varioref,array,multicol}

Por supuesto, esto supone que ni array ni multicol cambian su comportamiento cuando se pasa ngerman como una opción de clase.

Finalmente, cuando se llega a \begin{document}, se verifican todas las opciones globales para ver si cada una ha sido utilizada por al menos un paquete; de lo contrario, se muestra un mensaje de advertencia. Suele ser un error ortográfico si el nombre de su opción nunca se utiliza; otra posibilidad es eliminar un comando \usepackage que carga un paquete que usó esta opción anteriormente.

Cuando se desarrolló originalmente el concepto de opción, se basó en la idea de que las opciones son cadenas simples separadas por comas sin estructura adicional. Los espacios en esa lista de opciones se ignoran explícitamente, porque la gente a menudo divide dichas listas de opciones en varias líneas e inadvertidamente introduce espacios antes o después de las comas. Después de un tiempo, algunos desarrolladores de paquetes comenzaron a utilizar un concepto clave/valor para opciones o comandos de configuración; por ejemplo, “geometría” le permite escribir “papel = a4”, “margen = 1 pulgada” con el significado de que la opción “papel” obtiene el valor “a4” y “margen” se establece en una pulgada. Eso funciona si ni el nombre de la opción ni el valor deseado requieren espacios porque se eliminan si se usan en una lista de opciones de clase o paquete.

Esta limitación no es fácil de superar para implementaciones existentes sin grandes problemas de compatibilidad con versiones anteriores, lo que significa que generalmente es mejor usar un comando de configuración (si lo proporciona un paquete) en lugar de la lista de opciones con dichos paquetes, porque en un comando de configuración hay espacios. se respetan excepto los que están junto a comas y signos iguales. Con los nuevos métodos clave/valor directamente soportados por el formato \(\LaTeX\), los espacios se recortan sólo en cada extremo (donde uno esperaría). Por lo tanto, para paquetes nuevos o reimplementaciones de paquetes, recomendamos utilizar el mecanismo de \(\LaTeX\), que se describe en el Apéndice A.6.6 en la página →II 700.

Si desea realizar algunas modificaciones a una clase de documento o un paquete (por ejemplo, cambiar los valores de los parámetros o redefinir algunos comandos), puede colocar el código relevante en un archivo separado con la extensión .sty. Luego cargue este archivo con un comando \usepackage después del paquete cuyo comportamiento desea modificar (o la clase de documento, si sus modificaciones se refieren a cuestiones de clase).

Alternativamente, puede insertar las modificaciones directamente en el preámbulo de su documento. En ese caso, es posible que tengas que ponerlos entre corchetes con \makeatletter y \makeatother si contienen comandos internos de \(LaTeX 2ε\) (es decir, aquellos con un signo @ en sus nombres) o usar \ExplSyntaxOn y \ExplSyntaxOff si son comandos \(LaTeX3\) (es decir, con _ y : en sus nombres). Para obtener más detalles, consulte la discusión en la página →II 623 sobre los comandos internos en el preámbulo.

2.1.3 Materia frontal, principal y posterior

En un documento más extenso, como un libro o un artículo más extenso, normalmente podemos identificar tres áreas distintas: el texto inicial, el tema principal (o cuerpo) y el texto final.

Como su nombre indica, el tema principal contiene el texto principal, mientras que las otras dos partes proporcionan información complementaria antes y después. El tema principal generalmente consta de la página o páginas del título, el índice y listas similares, un resumen y un prólogo o prefacio (aunque se puede pensar que este último ya pertenece al tema principal). Al final normalmente se cuentan los apéndices, bibliografía, índice, epílogo, colofón, etc.

Tipográficamente, estas tres regiones a menudo se manejan de diferentes maneras para hacerlas fácilmente identificables, por ejemplo, usando diferentes sistemas de numeración de páginas para el frente y el frente, sin numerar los encabezados en el frente y, a menudo, usando diferentes estilos de números de encabezado en el frente y en el reverso. asunto.

En obras más breves, esta distinción se vuelve algo borrosa: la portada puede consistir simplemente en el título (y ni siquiera en una página propia), en cuyo caso tiene más sentido pensar que pertenece al tema principal. Del mismo modo, incluso en obras más largas puede que no haya material posterior.

En la clase de libro de \(\LaTeX\), estas tres regiones se pueden marcar explícitamente usando los comandos \frontmatter, \mainmatter y \backmatter. En otras clases a menudo se encuentra sólo el comando \appendix, que se utiliza para separar el cuerpo del material posterior; se supone que en artículos y documentos similares el material frontal, debido a su extensión, no requiere un tratamiento tipográfico especial.

Elementos preliminares

Las clases estándar \(\LaTeX\) proporcionan \title, \author (con \and y \thanks) y \date para configurar la información del título y \maketitle para producir el documento real. título. Para páginas de título más elaboradas, ofrecen el entorno titlepage, que básicamente te proporciona una página vacía en la que tienes que dibujar y colocar tu título tú mismo.

Si diseña su propia página de título, puede que valga la pena echarle un vistazo a la colección de ejemplos de páginas de título de Peter Wilson [199], que contiene cuarenta ejemplos junto con el código (a veces de bajo nivel) para producirlos. Otro recurso posiblemente útil es el paquete titling del mismo autor, que proporciona métodos para rediseñar el material producido por \title, \author, \thanks, \date y \maketitle.

El soporte ofrecido por las clases estándar (“artículo”, “informe” o “libro”) no es realmente suficiente para nada más que preimpresiones, razón por la cual las clases para revistas específicas o clases dirigidas a la producción de libros a menudo ofrecen comandos adicionales para especificar datos. relevante para el título o incluso proporcionar algunos comandos totalmente diferentes. Esta es un área donde, debido a la falta de soporte decente en las clases estándar, la sintaxis del documento desafortunadamente varía de una clase a otra, por lo que hay que consultar la documentación adecuada para ver qué es necesario para una clase en particular.

Una posible alternativa es el pequeño paquete authblk de Patrick Daly que proporciona una sintaxis extendida para el comando \author y puede escribir información de afiliación en bloques (debajo de cada grupo de autores) o como notas a pie de página, como se muestra en el siguiente ejemplo. Al utilizar un argumento opcional para \author y/o \affil, es incluso posible ordenar el autor y las afiliaciones de diferentes maneras. El paquete ofrece varias posibilidades de personalización, dos de las cuales se muestran en el ejemplo; consulte la documentación para más detalles. Debería funcionar con la mayoría de las clases de documentos incluso si proporcionan su propia gestión de autores.

\usepackage[auth-sc,affil-it] {authblk} \usepackage{kantlipsum}  \title{Author Management} \author{Immanuel Kant} \affil{Königsberg} \author{Moses Mendelssohn} \affil{Berlin} \author{Friedrich Schiller} \affil{Jena} \author{Leonhard Euler} \affil{St.\ Petersburg} \author[2]{Friedrich der Große\thanks{Sponsor}}  \date{June, 1770}  \maketitle \kant[1] % only partly shown

Para las listas típicas que se encuentran en la portada, como la tabla de contenido, las clases estándar admiten los comandos \tableofcontents, \listoftables y \listoffigures. Se pueden definir listas adicionales como se explica en la Sección 2.3.4 en la página 74. Normalmente, dichas listas producen encabezados sin numerar. Si su portada requiere más unidades seccionales, como un prólogo o un prefacio, escríbalas con la forma de estrella de un comando de título adecuado, por ejemplo, \chapter* o \section*.

Otro elemento importante, en particular para los artículos, es el entorno “abstracto”. Tenga en cuenta que, lamentablemente, la ubicación correcta de este entorno puede depender de la clase de documento elegida. En las clases estándar y muchas otras, se compone donde se especifica en la fuente, pero hay clases en las que se formatea y se coloca mediante el comando \maketitle y, por lo tanto, tiene que aparecer antes. Su formato predeterminado suele ser adecuado y, si está escribiendo un artículo para una revista en particular, probablemente no debería modificarlo. Sin embargo, si no le gusta el resultado y es libre de hacer cambios, eche un vistazo al paquete “abstracto” de Peter Wilson que ofrece un gran arsenal de detalles para ajustar la mayoría de los aspectos del diseño abstracto.

Hay otros elementos importantes, como una lista de palabras clave en artículos de revistas o información bibliográfica y de derechos de autor en libros, pero ninguno de ellos está previsto en las clases estándar. Sin embargo, en las clases de documentos para revistas específicas o series de libros de editoriales, normalmente encontrará comandos y entornos adicionales que se adaptan a estos elementos. Por lo general, difieren de una clase a otra, por lo que hay que rehacer esta parte del texto frontal si se cambia la clase del documento.

Elementos principales de la materia

Los elementos estructurales de nivel superior del cuerpo del texto son varios niveles de comandos de encabezado que se analizan en detalle en la Sección 2.2 en la página 32 y, por supuesto, listas y otros elementos que se analizan en el Capítulo 4.

Elementos de la materia anterior

Probablemente los elementos de fondo más utilizados son una bibliografía y un índice, que están respaldados por los entornos “theindex” y “thebibliography”, que se analizan con más detalle en los Capítulos 14 y 15.

Si tiene varios otros apéndices, utilice comandos de encabezado del nivel apropiado para presentarlos. El esquema de numeración de dichos títulos se ajusta automáticamente mediante la declaración \appendix o \backmatter que separa el material posterior del texto principal. Sin embargo, si solo hay un apéndice, puede parecer extraño si se numera. Por lo tanto, en ese caso, es posible que desee utilizar explícitamente la forma de estrella del comando de encabezado.

2.1.4 Dividir el documento fuente en varios archivos

Los documentos fuente de \(\LaTeX\) se pueden dividir convenientemente en varios archivos usando los comandos \input o \include. El comando \input incluye incondicionalmente el archivo especificado como argumento en el punto actual. Esto es útil si desea dividir su documento en partes de tamaño razonable o si desea reutilizar algunas partes por una razón u otra y, por lo tanto, desea mantenerlas en archivos separados.

El comando \include, sin embargo, es diferente porque automáticamente inicia una nueva página antes y después del archivo incluido. Para cada archivo \include se genera un archivo .aux separado, por lo que a diferencia de \input, dichos archivos deben especificarse sin extensión y en el nivel del sistema operativo siempre deben tener la extensión .tex.

La razón para \include es que los documentos se pueden reformatear por partes especificando como argumentos de una declaración \includeonly solo aquellos archivos \include que \(\LaTeX\) tiene que reprocesar. Para los otros archivos que se cargan con comandos \include, la información del contador (página, capítulo, tabla, figura, ecuación,…) se lee de los archivos .aux correspondientes generados durante una ejecución anterior. En el siguiente ejemplo, el usuario desea reprocesar solo los archivos chap1.tex y appen1.tex:

\documentclass{book}    % the document class ‘‘book’’ \includeonly{chap1,appen1}    % only include chap1 and appen1 \begin{document} \include{chap1}    % input chap1.tex \include{chap2}    % input chap2.tex ...    % ... further chapters \include{appen1}    % input appen1.tex \include{appen2}    % input appen2.tex \end{document}

Tenga en cuenta que \(\LaTeX\) solo emite un mensaje de advertencia como “No hay archivo xxx.tex” y no un mensaje de error cuando no puede encontrar un archivo especificado en una declaración \include y luego continúa procesando.

Si la información en los archivos .aux está actualizada, es posible procesar solo una parte de un documento y hacer que todos los contadores, referencias cruzadas y páginas sean correctos en la parte reformateada. Sin embargo, si uno de los contadores (incluido el número de página para las referencias cruzadas) cambia en la parte reprocesada, es posible que sea necesario volver a ejecutar el documento completo para obtener el índice, el índice y las referencias bibliográficas consistentemente correctos.

Tenga en cuenta que cada parte del documento cargada mediante \include comienza en una nueva página y finaliza llamando a \clearpage; por tanto, los flotadores contenidos en él no se mueven fuera de las páginas producidas por esta pieza. Los candidatos naturales para \include son, por tanto, capítulos completos de un libro, pero no necesariamente pequeñas fracciones de texto.

Si bien es ciertamente una ventaja dividir un documento más grande en partes más pequeñas y trabajar en archivos más manejables con un editor de texto, el reformateo parcial sólo debe usarse con mucho cuidado y cuando aún se está en la etapa de desarrollo de uno o más capítulos. Cuando se necesita una copia final y completamente correcta, el único procedimiento realmente seguro es reprocesar el documento completo. Sin embargo, si el documento es demasiado grande para procesarlo en una sola ejecución, asegúrese de que para la versión final las piezas se procesen en la secuencia correcta (si es necesario varias veces) para garantizar que las referencias cruzadas y los números de página sean correctos.

Es muy importante tener en cuenta que algunos paquetes no se pueden utilizar de manera confiable con el mecanismo \include. Los candidatos probables son aquellos que escriben sus propios archivos de soporte para almacenar datos entre ejecuciones, ya que a menudo no se dan cuenta de que partes del documento no se procesan. Un ejemplo destacado de este libro es el paquete “acro”. Siempre considera que el primer acrónimo que ve es el que muestra la forma completa; por lo tanto, si aplica \includeonly, es posible que vea diferentes instancias como las primeras, alterando así el salto de línea y la paginación en comparación con procesar siempre el documento completo.

2.1.5 askinclude - Administrar tus inclusiones

Si tiene la intención de trabajar con comandos \include, considere usar el pequeño paquete askinclude creado por Pablo Straub y Heiko Oberdiek. Le pregunta interactivamente qué archivos incluir. Luego puede especificar los archivos como una lista separada por comas (es decir, lo que pondría en el argumento \includeonly) o usar * para indicar todos los archivos, - para no incluir ningún archivo o ? en cuyo caso le solicitará cada archivo de inclusión por separado. Alternativamente, si se presiona el botón Enter en respuesta, entonces se usará nuevamente la respuesta de la ejecución anterior. De esta manera, no tendrá que modificar su fuente maestra para procesar diferentes partes de su documento (una característica muy útil durante la producción de este libro). Todo esto funciona almacenando la respuesta dada en el archivo .aux para que esté disponible nuevamente en la próxima ejecución. Por lo tanto, si ese archivo se elimina por algún motivo, deberá realizar su selección nuevamente y no podrá simplemente presionar Enter.

El paquete también ofrece algunas funciones de coincidencia de patrones si se habilita con la opción “makematch”. En este caso * coincide con cero o más caracteres arbitrarios y ! al comienzo de un patrón niega su efecto (es decir, excluye los nombres coincidentes). Por ejemplo, chap*,!chap1 incluiría todos los archivos que comiencen con chap excepto chap1.

2.1.6 tagging - Proporcionar variantes en el origen del documento

A veces resulta útil mantener juntas varias versiones de un documento en una única fuente, especialmente si la mayor parte del texto se comparte entre versiones. Esta funcionalidad la proporciona el paquete “etiquetado” creado por Brent Longborough (1944-2021).

\tagged{label-list}{text}    \usetag{label-list}    \droptag{label-list}

Las partes de texto variantes se marcan especialmente en la fuente usando el comando \tagged, y durante el formateo algunas de ellas se seleccionan. El comando toma dos argumentos: una etiqueta (o una lista de etiquetas separadas por comas) que describe a qué variante pertenece el texto opcional y el texto que se imprimirá condicionalmente.

Con el comando \usetag en el preámbulo del documento puede seleccionar qué etiqueta (o etiquetas) está activa al principio del documento. Alternativamente, puede especificar las etiquetas como opciones de paquete para activarlas. Dentro del cuerpo del documento puedes usar más comandos \usetag para activar etiquetas adicionales, y puedes usar \droptag para desactivar algunas de ellas.

\untagged{label-list}{text}    \iftagged{label-list}{yes-test}{no-text}

Para mayor comodidad, también existe \untagged, que escribe su segundo argumento si ninguna de sus etiquetas está activa actualmente. Finalmente, está \iftagged con tres argumentos que imprime el segundo o tercer argumento dependiendo de las etiquetas dadas en el primero.

Los cinco comandos se muestran en el siguiente ejemplo:

\usepackage[doc]{tagging} \tagged{doc} {Typeset this if tag doc is used.} \untagged{code}{Typeset this if tag code is not used.} \iftagged{be} {To be or}{Not to be!} Which is it?    \par \tagged{doc,code}{Typeset this for either doc or code.} Typeset this \untagged{}{always}\tagged{}{never}!    \par \usetag{code} \droptag{doc} Now neither of the variants are typeset! \tagged{doc} {Typeset this if tag doc is used.} \untagged{code}{Typeset this if tag code is not used.}

Este enfoque funciona bastante bien para textos más cortos, pero tiene la limitación de que no puede contener comandos \verb y debe tener llaves equilibradas porque el texto se proporciona como argumento. Sin embargo, si se desean imprimir partes más largas, generalmente es mejor almacenarlas en un archivo externo y cargar este archivo de manera condicional en un comando \tagged o usar los entornos que se muestran en el siguiente ejemplo.

\usepackage[doc]{tagging} Environments can contain verbatim material \begin{taggedblock}{doc} e.g., \verb=#&=\end{taggedblock} . \par Note the placement of the period and the spacing! Careful: \begin{untaggedblock}{doc} Not \end{untaggedblock} shown!

Tenga en cuenta la sorprendente ubicación del período. Nunca debes colocar nada después de \end{taggedblock} o \end{untaggedblock}, porque se descarta si el cuerpo del entorno no está tipografiado. Esto se puede ver por la palabra que falta “¡mostrado!” en el resultado. Puede que esto no sea evidente de inmediato, porque mientras el material opcional esté tipográfico, todo parece estar bien, pero en el momento en que se ignora el material, el resto de la última línea también desaparece. Por lo tanto, la mejor práctica es colocar los comandos \begin y \end en líneas separadas.

El manejo del espacio también es un poco peculiar: dentro del entorno, los espacios del cuerpo se respetan, excepto los espacios que siguen inmediatamente al comando \begin. Es por eso que no vemos dos espacios en la salida sino solo uno, aunque hay un espacio antes y después de \begin. Si hubiéramos agregado un espacio antes del comando \end, habría resultado en “# .” en la salida.

El paquete tagging selecciona las variantes a procesar durante el formateo de \(\LaTeX\). Dependiendo de la aplicación, podría ser mejor utilizar un enfoque diferente que implique un preprocesador que extraiga variantes individuales de la fuente maestra. Por ejemplo, el programa docstrip se puede utilizar con éxito para este propósito; a diferencia de otros preprocesadores, tiene la ventaja de que se puede utilizar en todos los sitios que tengan un sistema \(\LaTeX\) instalado (consulte la Sección 17.2 para obtener más detalles).