Como título, ¿cuál es la diferencia entre y
~
?
No veo diferencias después de la compilación.
MWE:
\documentclass[a4paper]{article} \usepackage[english]{babel} \usepackage[utf8]{inputenc} \usepackage{amsmath} \usepackage{graphicx} \usepackage[colorinlistoftodos]{todonotes} \title{Your Paper} \author{You} \date{\today} \begin{document} \maketitle I am cool. I~am~cool. \end{document}
Comentarios
Responder
La diferencia se puede ver al final desconectado. Un espacio es rompible y un ~
es un espacio irrompible.
\documentclass[a4paper]{article} \usepackage[english]{babel} \usepackage[utf8]{inputenc} \usepackage{amsmath} \usepackage{graphicx} \usepackage[colorinlistoftodos]{todonotes} \title{Your Paper} \author{You} \date{\today} \begin{document} \maketitle \hspace*{0.9\textwidth}I am cool. \hspace*{0.9\textwidth}I~am~cool. \end{document}
Las tres palabras I
am
y cool
están pegados en la segunda línea.
Respuesta
El ~
es un carácter activo , lo que significa que «es lo mismo que una macro como \mbox
y así sucesivamente. Su función se describe mediante su definición, que es
\nobreakspace{}
por lo que escribir ~
es equivalente a escribir \nobreakspace{}
.
¿Qué hace \nobreakspace
? Aquí está:
\leavevmode\nobreak\
(un espacio sigue a la última barra invertida). Entonces, se inicia un párrafo o no se hace nada si ya estamos en un párrafo (\leavevmode
); luego se emite \nobreak
, que no permite ningún salto de línea en el punto (\nobreak
) y luego se inserta un espacio entre palabras normal.
Por lo tanto, al escribir
no~break
habrá un espacio entre las dos palabras, pero la línea no se romperá después de no
.
¿Por qué {}
después de \nobreakspace
? Si tiene no~break
en un título, en el archivo .aux
aparecerá la versión expandida
no\nobreakspace {}break
Las llaves se han introducido para hacer frente al raro caso en el que se desea un espacio después de ~
; sin ellos no~ break
escribiría
no\nobreakspace break
y, al leer el .aux
file, el espacio se ignoraría. Con las llaves
no\nobreakspace {} break
se escribirá y el espacio adicional no será ignorado.
Qué pasa si se escribe no~ break
en la salida? Se agregan dos espacios, pero no es posible ningún salto de línea en ellos, porque un espacio es un punto de salto de línea factible solo si no está precedido por un elemento descartable; dado que \nobreakspace
se convierte en
\leavevmode\penalty 10000 \
y las penalizaciones son descartables como espacios, tampoco \
ni el siguiente espacio se puede utilizar para un salto de línea.
En el caso inverso no ~break
se generan dos espacios, pero ahora es posible un punto de interrupción en el primer espacio (y ambos desaparecerán junto con la penalización en caso de que se tome).
Comentarios
- Bonita explicación. ¿Puedo decir +1?
- Hablas de
no~ break
pero no deno ~break
. En particular, este caso puede aparecer cuando se usa una limitación de caracteres por línea con un retorno de línea entre el espacio. ¿Qué sucede en este caso? - @RomainPicot Casi lo mismo, obtienes dos espacios si no ocurre ninguna ruptura, pero una ruptura es posible (que no es con
no~ break)
- @egreg gracias por la precisión
;-)
- @RomainPicot Agregué una nota final, gracias por el mensaje.
Respuesta
Esta es la definición de ~
en latex.ltx
\catcode `\~=13 \def~{\nobreakspace{}}
mientras que \nobreakspace
se define como
\DeclareRobustCommand{\nobreakspace}{% \leavevmode\nobreak\ }
Entonces, el carácter activo ~
es equivalente a un espacio que no se puede dividir en líneas.
~
es un espacio irrompible donde el espacio no es ' t irrompible.:p
\the....
comando de salida del contador.~
=\nobreakspace