El subrayado es la única forma de resaltar que quien sabe de composición tipográfica le recomendará abandonar, y no por esnobismo. Las máquinas de escribir no tenían cursiva: para destacar una palabra había que retroceder el carro y golpear guiones bajos debajo de las letras. En un original entregado a la imprenta, una raya bajo una palabra era una instrucción para el cajista: componer esto en cursiva. El subrayado nunca fue un estilo; era la notación de uno. LaTeX hereda esa historia por partida doble: \underline es en el fondo un comando matemático y empuja una frase larga hacia el margen derecho en lugar de partirla, y ulem, el paquete que todo el mundo carga para remediarlo, declara su propio objetivo en CTAN como lograr que la salida «parezca salida de una máquina de escribir». Esta página explica cómo subrayar en LaTeX con \underline, \uline y \ul, en qué se diferencian ulem y soul, y cuándo lo que hacía falta era \emph.
Por qué \underline se sale al margen en lugar de partirse
Porque \underline es un comando matemático y compone su argumento dentro de una única caja indivisible. No necesita ningún paquete y funciona igual en texto que en fórmulas, pero su casa es el modo matemático: es el filete que se traza bajo una variable en $\underline{x}$. Usado en una frase, LaTeX abre en silencio el modo matemático alrededor del argumento, compone todo como una sola caja horizontal y traza una línea debajo. Dentro de una caja no hay puntos de corte, así que cuando la expresión es más ancha que la medida, TeX no tiene dónde partirla y la deja salirse por el margen derecho.
% fine for a single short word
This word is \underline{underlined} in running text.
% the box has no break points, so TeX pushes it into the margin
\underline{a phrase far too long to fit on one line of this measure}Conviene reconocer el síntoma en el registro, porque no es un error sino un aviso: Overfull \hbox (…pt too wide) in paragraph at lines …, junto a un fragmento que se imprime así: []$[]$. Esos dos signos de dólar son la confesión: LaTeX está mostrando que envolvió la frase en modo matemático para poder subrayarla. El segundo defecto, más discreto, es dónde queda el filete. \underline lo coloca a una profundidad fija sin mirar las letras de encima, de modo que con descendentes como g o p la línea parece cortar los caracteres.
El reparto honesto es este: \underline para las matemáticas, donde el argumento es un símbolo y vive dentro de una fórmula, y un paquete en cuanto el filete tenga que ir dentro de una frase. De ese trabajo se ocupan dos paquetes, y no son intercambiables. ulem da subrayados y tachados que parten de línea; soul da un rotulador fluorescente y espaciado de letras. Antes de cargar cualquiera de los dos, sin embargo, conviene saber qué significaba originalmente un subrayado, porque eso suele zanjar si de verdad hace falta.
Por qué los tipógrafos desaconsejan subrayar
Porque un subrayado es un sustituto, y aquello a lo que sustituye está ahora en el teclado. Las máquinas de escribir no tenían negrita ni cursiva; la única manera de marcar una palabra era retroceder el carro y golpear guiones bajos debajo de las letras ya escritas. En la imprenta ese mismo trazo hacía un segundo trabajo: en un original mecanografiado y marcado, el subrayado era una instrucción para el cajista. Una raya recta bajo la palabra significaba cursiva; una raya ondulada, negrita; dos rayas, versalitas; tres, versales. El autor subrayaba porque no podía componer cursivas. El cajista, que sí podía, leía la raya y la tiraba.
Por eso el subrayado sobrevive en el software y desaparece de los manuales de composición: los procesadores de texto heredaron las teclas de la máquina de escribir, mientras que el plomo nunca tuvo un subrayado que ofrecer. Las herramientas de LaTeX no ocultan esa ascendencia. El ulem de Donald Arseneau, cuyo aviso de copyright arranca en 1989, se describe en CTAN como el paquete que sustituye \em y \emph por subrayado «para que la salida parezca salida de una máquina de escribir», y su manual lo dice apto para texto «que quizá deba ir subrayado en un original entregado para publicación». ulem no se escribió para adornar un PDF terminado, sino para producir un mecanoscrito.
De ahí sale la regla práctica. Si solo quiere que el lector se apoye en una palabra, escriba \emph{...} y deje que la clase de documento decida cómo se ve el énfasis: cursiva en la mayoría de las clases, y vuelta correcta a la redonda cuando un énfasis se anida en otro. Reserve los subrayados de verdad para los casos en que la línea aporta información y no tono: una supresión en un borrador corregido, una línea de firma, un hueco por rellenar, un enlace. Todo lo que sigue da por supuesta una razón de ese tipo.
ulem: subrayados y tachados que sí parten de línea
Cargue \usepackage[normalem]{ulem} y escriba \uline{...} donde antes ponía \underline{...}: el filete ya parte al final de línea, recorre los espacios entre palabras y admite división silábica dentro. El paquete trae el vocabulario completo de los signos de corrección —doble filete, filete ondulado, línea a través de la palabra, rayado diagonal, trazos y puntos— porque ese es justo el vocabulario que necesita un original marcado. Dentro del modo matemático, \uline devuelve el trabajo a \underline sin decir nada, así que puede usarse en cualquier sitio.
| Comando | Qué traza |
|---|---|
\uline | Subrayado; se parte al final de línea |
\uuline | Doble subrayado; en corrección, la marca de versalitas |
\uwave | Subrayado ondulado; en corrección, la marca de negrita |
\sout | Tachado: una línea por el centro de la palabra |
\xout | Rayado: el texto sobreimpreso con / repetidos |
\dashuline | Subrayado de trazos |
\dotuline | Subrayado punteado |
Dos parámetros gobiernan el filete, y se fijan de manera distinta, cosa que pilla a mucha gente. \ULthickness es el grosor y vale .4pt por defecto, pero es una macro y no una longitud, así que se cambia con \renewcommand{\ULthickness}{0.8pt} y \setlength no le hace nada. \ULdepth es la caída desde la línea base hasta el filete y sí es una longitud, que se fija con \setlength; su valor por defecto es la marca \maxdimen, que le dice a ulem que deduzca la profundidad de la fuente actual. Esos dos mandos explican más del paquete de lo que parece: \sout no está definido más que como un subrayado con \ULdepth puesto a -.55ex. Una profundidad negativa levanta el filete por encima de la línea base y lo lleva por el centro de la palabra: en ulem, un tachado es un subrayado trazado a propósito en el sitio equivocado. \xout es aún más rudo: sobreimprime el texto con / repetidos.
\usepackage[normalem]{ulem}
\renewcommand{\ULthickness}{0.8pt} % a macro, so \renewcommand
\setlength{\ULdepth}{1.8pt} % a length, so \setlength
\uline{important} \uuline{urgent} \uwave{boat}
\sout{wrong} \xout{removed}
\dashuline{dashing} \dotuline{dotty}Por qué \emph empieza a subrayar: la opción normalem
Porque un \usepackage{ulem} a secas redefine el énfasis, y el manual lo dice sin rodeos: «In LaTeX ulem replaces italics with underlining in text emphasized by \em or \emph». No es un fallo, sino el propósito original del paquete; recuerde para qué se escribió. El efecto, en cambio, es que un documento que ha usado \emph con toda tranquilidad durante doscientas páginas se llena de filetes bajo cada pasaje enfatizado en cuanto se carga el paquete para subrayar una sola palabra. Anidar lo empeora: el \emph normal alterna cursiva y redonda cuando los énfasis se encajan, mientras que la versión de ulem, en palabras del manual, «generates multiple underlining; it does not alternate on and off»: los filetes se acumulan.
El remedio cabe en una palabra de las opciones: \usepackage[normalem]{ulem}. El énfasis vuelve entonces a comportarse con normalidad y los filetes aparecen solo donde escribe \uline y sus hermanos. El mismo interruptor existe como declaración —\normalem apaga la sustitución y \ULforem la vuelve a encender—, de modo que puede cambiarse a mitad del documento si de verdad está preparando un mecanoscrito. En la práctica: cargue ulem con [normalem] siempre, salvo que pueda decir en voz alta por qué no.
\usepackage[normalem]{ulem}
% \emph keeps its italics; a rule appears only where you ask for one
This is \emph{emphasis}, and this is \uline{underlined}.
% \ULforem brings the substitution back, \normalem switches it off againsoul: resaltar con \hl y espaciar con \so
Si lo que quiere es un trazo de rotulador amarillo, o letras separadas para destacar, el paquete es soul, y llega ahí por un camino completamente distinto. Entrega el texto a la maquinaria de división silábica de TeX, recupera sílabas y caracteres, y actúa en los huecos que quedan entre ellos. Por eso puede espaciar una palabra y aun así dejar que la línea se parta dentro de ella. Melchior Franz, su autor, corta de raíz en el manual la suposición evidente sobre el nombre: «the package name soul is only a combination of the two macro names \so (space out) and \ul (underline)—nothing poetic at all». Hoy lo mantiene el Oberdiek Package Support Group; desde la versión 3 ha absorbido el viejo soulutf8, de modo que la entrada UTF-8 funciona sin cargar nada más.
| Comando | Efecto |
|---|---|
\so | Espaciado: separa las letras |
\caps | Espaciado ajustado para versales y versalitas |
\ul | Subrayado, con partición de línea |
\st | Tachado (sobreimpresión) |
\hl | Resaltado; amarillo por defecto, requiere color o xcolor |
El color se fija efecto por efecto: \setulcolor para el subrayado, \setstcolor para el tachado, \sethlcolor para el resaltado, y un argumento vacío vuelve a desactivar el coloreado. Por defecto el resaltado es amarillo y los dos filetes son negros. Una trampa merece decirse con claridad: \hl solo resalta si se ha cargado color o xcolor. Sin él, el comando se repliega al subrayado sin protestar, lo que en pantalla se ve igual que un resaltado que no aparece. Defina su propio tono con \definecolor y páselo a \sethlcolor.
\usepackage{color,soul}
\definecolor{lightblue}{rgb}{.90,.95,1}
\sethlcolor{lightblue}
\so{letterspacing} \ul{underlining} \st{overstriking}
\hl{this is highlighted in light blue}
\ul{Auf{}lage} % {} keeps the fl ligature from forming
\so{foo \mbox{little} bar} % \mbox, not bare braces, around hyphenable textEl precio de ese motor carácter a carácter es que el argumento ya no es LaTeX corriente. soul tiene que leer cada token antes de que lo vea el constructor de párrafos de TeX, así que unas cuantas construcciones están prohibidas, y el fallo es ruidoso: Package soul error: Reconstruction failed, con un cuadro negro dejado en la salida en el punto conflictivo para que pueda localizarlo en la página. Las reglas que conviene memorizar:
- Las fórmulas piden
$...$. Entre dólares funcionan; la forma LaTeX\(...\)no. - Las llaves agrupan, pero no deben esconder un punto de corte.
\so{foo {little} bar}provocaReconstruction failed, porque el grupo contiene un punto de división, y un espacio cuenta como tal. Escriba\so{foo \mbox{little} bar}. - Nada de anidar.
\ul{foo \so{bar} baz}no está permitido. Si de verdad hace falta, meta antes el material interior en una caja y asuma que esa caja no se partirá. - Las ligaduras se rompen a mano. Dentro de
\ul,\sty\hl, inserte{}o\nulldonde la ligadura no deba formarse (\ul{Auf{}lage}). \verb, los entornos y las definiciones de comandos quedan fuera. Para lo que deba pasar intacto,\soulomit{...}es la salida de emergencia.
ulem o soul: cuál cargar
Para signos de corrección, ulem; para resaltado, soul; y si hacen falta los dos, cargue los dos: los nombres no chocan, porque ulem aporta \uline y soul aporta \ul. ulem es el más indulgente de ambos: en el argumento cabe casi cualquier cosa y, aunque la partición quede fea, al menos parte. soul ajusta su filete a las letras con más cuidado y trae \hl y \so en la misma carga, pero su argumento es, como muestra la lista anterior, un lenguaje restringido. Un borrador que pide «tacha esto, subraya el reemplazo» llega antes con ulem y [normalem]; un borrador que necesita un rotulador amarillo para el revisor solo tiene un candidato, porque ulem no tiene resaltado alguno.
Marcar supresiones y añadidos en un borrador
El uso más defendible de \sout y \uline es un borrador que debe mostrar qué cambió. Pero no escriba los comandos de filete dentro de la prosa. Escriba lo que quiere decir y deje que una macro decida cómo se imprime: \deleted{...} y \added{...} detrás de un interruptor cuestan tres líneas de preámbulo y ahorran una ronda entera de búsqueda y eliminación antes de entregar. Además dejan legible el original, porque \deleted{la estimación antigua} dice algo que \sout{la estimación antigua} no dice.
\usepackage[normalem]{ulem}
\newif\ifrevisions
\revisionstrue % final version: \revisionsfalse
\newcommand{\deleted}[1]{\ifrevisions\sout{#1}\fi}
\newcommand{\added}[1]{\ifrevisions\uline{#1}\else #1\fi}
% The estimate was \deleted{0.42} \added{0.51}.Dos hábitos evitan el accidente. Mantenga las marcas de revisión y el énfasis en vocabularios separados —\emph para el tono, \deleted y \added para el historial— de modo que bajar el interruptor nunca toque el significado del texto. Y añada «compilar una vez con el interruptor apagado y mirar el PDF» a la lista de comprobación previa al envío: un tachado olvidado en un archivo listo para imprenta es justo la clase de cosa que nadie ve hasta que está impresa.
Subrayar texto CJK y el problema del PDF etiquetado
Dos límites conviene conocerlos antes de decidirse. Primero, ambos paquetes se escribieron para el alfabeto latino. ulem y soul razonan con palabras, puntos de división y espacio entre palabras, y una sucesión de caracteres japoneses, chinos o coreanos no proporciona ninguno de los tres; por eso un pasaje CJK largo y subrayado tiende a partirse donde no debe, o a no partirse. La comunidad TeX japonesa responde con paquetes propios, y el que suele recomendarse es jumoline, con sus comandos \Underline, \Midline y \Overline, distribuido fuera de CTAN y ausente de una TeX Live estándar. Segundo, CTAN clasifica tanto ulem como soul bajo el tema «tagged PDF incompatible», algo que pesa cada vez más según LaTeX avanza hacia una salida accesible; y un \hl amarillo que se lee de maravilla en pantalla se convierte en un borrón gris en impresión monocroma. Compruebe ambas cosas antes de la fecha de entrega, no después.