Diferencia entre un espacio y un símbolo “ wave ” (tilde / “ ~ ”)?

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

  • Verá la diferencia al final de la línea. ~ es un espacio irrompible donde el espacio no es ' t irrompible.
  • " Soy genial " … Esa ' es una declaración bastante atrevida :p
  • También controla el espacio, ' se usa con mucha frecuencia después de un \the.... comando de salida del contador.
  • En modo texto ~ = \nobreakspace
  • @yo ' ¿Debería eliminar estas preguntas, entonces?

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} 

ingrese la descripción de la imagen aquí

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 de no ~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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *