Al escribir \LaTeX is great lo que sale es «LaTeXis great». Ha desaparecido un espacio y no se ha emitido ni una línea de error. No es un fallo: TeX descartó ese espacio a propósito. Todas las reglas de sintaxis de LaTeX —dónde termina el nombre de un comando, cómo se pliegan los espacios y los saltos de línea, qué borra realmente un comentario %— se derivan de una sola cosa: la manera en que TeX lee el archivo fuente, línea a línea. Esta página recorre ese proceso de lectura y desactiva las tres minas que todo principiante pisa —el espacio que desaparece, el espacio que aparece y el cambio de fuente que no se detiene— desde el mecanismo y no desde el síntoma.
Dónde termina un comando: palabras de control y símbolos de control
El nombre de un comando termina en el primer carácter que no es una letra. La mayor parte de un archivo fuente es texto corriente que se compone tal cual, pero en cuanto aparece una barra invertida \ (que en algunas configuraciones japonesas puede verse como el signo yen ¥), TeX cambia de modo de lectura y empieza a leer un nombre. Ese nombre solo puede formarse de dos maneras. Una palabra de control es \ seguida solo de letras (A–Z, a–z); un símbolo de control es \ seguido de un único carácter que no es letra. \section, \LaTeX y \newpage pertenecen al primer caso; \$, \%, \& y \ (barra invertida-espacio) al segundo.
La distinción no es un juego de palabras: cambia el síntoma cuando algo sale mal. El nombre de una palabra de control sigue creciendo mientras sigan apareciendo letras, de modo que \LaTeXlogo no se lee como \LaTeX más logo, sino como un solo nombre, \LaTeXlogo, que no existe, y la compilación se detiene con ! Undefined control sequence. Para que al logotipo le sigan letras hay que cortar el nombre con algo que no sea una letra: un espacio, un símbolo o {}. Un símbolo de control, en cambio, queda fijado tras un carácter y no puede crecer, así que \$5 se lee sin más como un signo dólar seguido de 5. Esa naturaleza de un único carácter es justamente lo que mantiene seguros a \$ y \% cuando les sigue de inmediato un dígito o un símbolo.
% A control word is letters only; its name stops at the first non-letter.
\LaTeX % the logo
\LaTeXlogo % ! Undefined control sequence. -- read as ONE name
% A control symbol is exactly one non-letter after the backslash.
\$ \% \& \_ % the literal characters $ % & _
\, % a thin spacePor qué \LaTeX is imprime «LaTeXis»
Todo blanco situado inmediatamente después de una palabra de control se salta, por muchos que haya. Ese espacio se consume como señal de que el nombre ha terminado y no queda ni un resto en la salida. Por eso \LaTeX is great sale como «LaTeXis great». Lo que suele pasarse por alto es que los espacios no son las únicas víctimas: las tabulaciones corren la misma suerte, y el salto de línea también. Plegar la fuente tras \LaTeX y escribir is great en la línea siguiente no cambia nada. El lugar donde «pero si escribí un espacio» cuenta menos es justo detrás de un comando.
Hay tres arreglos estándar y los tres dan el mismo «LaTeX is great». (1) Llaves vacías, \LaTeX{} is: {} no es una letra, así que el nombre termina ahí y el espacio siguiente sobrevive como espacio ordinario entre palabras. (2) El espacio de control, \LaTeX\ is: \ (barra invertida más espacio) es el comando que significa «pon aquí un espacio entre palabras». (3) Encerrar el comando entre llaves, {\LaTeX} is. En la práctica, (1) es la opción segura: se comporta igual tanto si sigue un espacio como un símbolo, y no se rompe al editar la frase más adelante. Como este espacio evaporado golpea sobre todo en los comandos propios, el conjunto tools incluye el paquete xspace (de David Carlisle y otros). Colocado al final de una definición, \xspace añade el espacio solo cuando el carácter siguiente no es un signo de puntuación.
\LaTeX is great % -> LaTeXis great (the space is eaten)
\LaTeX{} is great % -> LaTeX is great
\LaTeX\ is great % -> LaTeX is great
{\LaTeX} is great % -> LaTeX is great
% In your own macros, let xspace decide:
\usepackage{xspace}
\newcommand{\myTeX}{\LaTeX\xspace}
\myTeX is great, and \myTeX, and \myTeX. % space added, then not, then notEn cambio, un símbolo de control no se come el espacio que le sigue: al escribir \$ 5 queda un espacio entre el signo dólar y el 5. Eso apunta a la otra función de \ . LaTeX añade por defecto algo más de espacio tras un punto final de oración, de modo que un punto que solo marca una abreviatura —Prof. Smith, et al. (1993)— se estira igualmente. Escribir Prof.\ Smith y et al.\ (1993) le dice a LaTeX «esto no es un final de oración» y mantiene uniforme el espacio entre palabras. Para la necesidad contraria —«no partas la línea aquí»— se usa el lazo ~. El ~ de Fig.~1, Chapter~12 o Donald~E. Knuth tiene el ancho de un espacio normal entre palabras, pero ahí nunca puede romperse la línea. Para el ajuste fino está \, (espacio fino): \thinmuskip, es decir 3 mu o un sexto de cuadratín, en modo matemático, y 0,16667 em en el texto: el mismo ancho en ambos casos.
Los dos trabajos de las llaves: pasar argumentos y acotar el alcance
Las llaves { } encierran un argumento obligatorio; los corchetes [ ], uno opcional. El orden suele ser \command[options]{required}: en \section{Introduction}, {Introduction} es el texto obligatorio del encabezado; en \documentclass[12pt]{article}, [12pt] es opcional y {article} es el nombre obligatorio de la clase. Hay lugares donde un argumento de un solo carácter puede prescindir de llaves, pero conservarlas es más seguro. En cuanto se añade una palabra más adelante, un argumento sin llaves se rompe de una de dos formas: se traga el carácter vecino o es tragado por él.
Y las llaves tienen un segundo trabajo: abren un grupo. Los comandos declarativos que cambian la fuente o el tamaño —\bfseries (negrita), \itshape (cursiva), \large (más grande)— no toman argumento alguno y simplemente cambian «todo desde aquí». Por eso, si se deja sin control, uno de ellos deja en negrita el resto del documento. Encerrado entre llaves, el efecto queda acotado solo a ese grupo; en cuanto se pasa la } de cierre, vuelve el ajuste anterior. {\bfseries bold here} back to normal y la forma con argumento \textbf{bold here} back to normal dan el mismo resultado, pero la primera acota una región, que es justo lo que hace falta cuando varias declaraciones deben actuar juntas.
\section{Introduction} % {...} = mandatory argument
\documentclass[12pt]{article} % [...] = optional, {...} = mandatory
{\bfseries bold here} back to normal % braces fence the declaration in
\textbf{bold here} back to normal % the argument form does the same
{\large\bfseries several at once} back to normalEsta idea de acotar es exactamente aquello sobre lo que se construye un entorno \begin{...} … \end{...}. Un entorno abre un grupo al empezar y lo cierra al terminar, de modo que un cambio de fuente hecho dentro nunca se escapa. Llaves y entornos son la misma herramienta a distinta escala; la página de entornos toma el relevo.
Cómo se pliegan espacios, saltos de línea y líneas en blanco
Cualquier serie de blancos consecutivos se colapsa en un solo espacio entre palabras, y un único salto de línea en la fuente se convierte también en un espacio entre palabras. Un espacio entre palabras o diez, o un pliegue a la línea siguiente: la salida es idéntica. Lejos de ser un inconveniente, este es el eje del diseño: solo porque LaTeX decide en solitario dónde cortar las líneas pueden funcionar la justificación y la partición de palabras. Para la fuente eso significa que puede plegarse al ancho que se prefiera y que las diferencias de control de versiones pueden mantenerse en líneas legibles, de una frase cada una.
¿Cómo se cambia entonces de párrafo? Con una línea en blanco. Deje una línea vacía y ahí está el salto de párrafo; dos o más seguidas siguen contando como uno solo. Aquí hay una sutileza fácil de pasar por alto: una línea que solo contiene espacios también cuenta como línea en blanco. TeX descarta el blanco final de cada línea de entrada antes de leerla, de modo que una línea con solo espacios se convierte en una línea sin nada. Cuando un párrafo se corta donde no debería, o se niega a cortarse donde debería, sospeche justamente de esa línea, que el editor muestra igual que una vacía. El tratamiento del párrafo propiamente dicho (\par, \parindent) corresponde a la página de saltos de línea y párrafo.
These extra spaces collapse into one,
and this newline becomes a single space too.
A blank line -- and only a blank line -- starts a new paragraph.
Two blank lines do exactly what one does.% elimina el resto de la línea — y el salto de línea con ella
Desde % hasta el final de esa línea todo es comentario y se ignora por completo al componer, y lo que desaparece no es solo el resto de la línea sino el propio salto de línea. Dejar notas y desactivar temporalmente un comando son los usos evidentes, pero es ese salto engullido lo que dio lugar al otro gran empleo de %. Como mostró la sección anterior, un salto de línea en la fuente se convierte en un espacio. Así que cuando lo único que se quiere es plegar una palabra larga o un comando largo en varias líneas de fuente, el pliegue inyecta un espacio no pedido. Termine la línea con % y ese espacio no aparece: la línea siguiente se une al ras. Mejor aún, la línea que empieza tras un % también salta sus blancos iniciales, de modo que la línea de continuación puede sangrarse tanto como se quiera. La fuente queda legible y la salida sigue siendo una sola palabra.
Visible text % from here to the end of the line is dropped, newline included
Anti%
disestablishmentarianism % -> one word: the indent is dropped too
\newcommand{\courseTitle}{%
Advanced Topics in \LaTeX%
} % no stray space at either seam
The rate was 100\% last year. % a literal percent sign is \%Una advertencia: % es en sí un carácter especial, así que para imprimir un signo de porcentaje literal se escribe \%. Si se olvida, todo el resto de esa línea desaparece: sin error ni advertencia, media frase falta sin más en el PDF, lo que lo convierte en uno de los síntomas más traicioneros. Al ser un símbolo de control, \% no se come el espacio que le sigue. Cómo escapar los demás caracteres especiales (#, $, &, _, {, }, ~, ^, \) está reunido en la página de caracteres especiales.
Para desactivar varias líneas de una vez hay dos alternativas a anteponer % a cada una. Se encierra el bloque en el entorno comment que proporciona el paquete verbatim (o el paquete comment), \begin{comment} … \end{comment}, o bien en \iffalse … \fi, que emplea un condicional de TeX. Esto último no necesita paquete y es rápido, pero TeX sigue leyendo el contenido, así que un \if sin pareja en el texto aparcado romperá ahí. Para archivar un borrador entero, el entorno comment es la opción más predecible.
\usepackage{verbatim} % in the preamble
\begin{comment}
This whole block is ignored.
\end{comment}
\iffalse
Draft text, parked with no package needed.
\fiQué revisar cuando un espacio desaparece o aparece
Divida primero el problema preguntando si el síntoma vino con un error. Una compilación que se detiene con algo como ! Undefined control sequence. señala dónde terminó un nombre de comando; una salida simplemente incorrecta, sin error ni advertencia, señala espacios y comentarios. Ese es el orden. El segundo tipo no da un número de línea útil, así que la única vía es acotar por categoría. Empezando un poco antes de la línea indicada, compruebe si un nombre de comando se tragó las letras siguientes y si {...} y [...] están equilibrados; después, si un % de fin de línea eliminó un espacio necesario o si un porcentaje literal se escribió sin su \%.
| Lo escrito | Síntoma | Arreglo |
|---|---|---|
\LaTeXlogo | se detiene con ! Undefined control sequence. | Terminar el nombre con algo que no sea letra, como \LaTeX{}logo |
\LaTeX is | las palabras se pegan como «LaTeXis» | \LaTeX{} is o \LaTeX\ is; en macros propias, \xspace |
\bfseries | todo lo que sigue queda en negrita | Acotarlo como {\bfseries ...} o usar \textbf{...} |
100% | el resto de esa línea desaparece en silencio | Un porcentaje literal debe escribirse 100\% |
(a line of spaces) | un párrafo se corta donde no se pretendía | Una línea de solo espacios es una línea en blanco; muestre los invisibles en el editor |
Por último, fijar hábitos que no se rompen vale más que memorizar las reglas. Cortar el nombre de un comando con {} cuando le siguen letras. Acotar las unidades de sentido en {...}. Plegar las definiciones largas con un % al final de línea en lugar de apretarlas en una sola. Y no dejar que se acumulen en el .tex viejos borradores comentados: confíe las versiones que quiera comparar a una herramienta de historial como Git y conserve solo lo que va a componer, para que los números de línea de los errores coincidan con el manuscrito real y la depuración sea más rápida. Esos cuatro hábitos evitan la mayoría de los tropiezos iniciales.