Comme titre, quelle est la différence entre et
~
?
Je ne vois aucune différence après la compilation.
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}
Commentaires
Réponse
La différence est visible à la fin de ligne. Un espace est cassable et un ~
est un espace incassable.
\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}
Les trois mots I
am
et cool
sont collés ensemble dans la deuxième ligne.
Réponse
Les ~
est un caractère actif , ce qui signifie quil « est identique à une macro comme \mbox
et ainsi de suite. Sa fonction est décrite par son définition, qui est
\nobreakspace{}
donc taper ~
équivaut à taper \nobreakspace{}
.
Que fait \nobreakspace
? La voici:
\leavevmode\nobreak\
(un espace suit la dernière barre oblique inverse). Ainsi, un paragraphe est commencé ou rien nest fait si nous « sommes déjà dans un paragraphe (\leavevmode
); puis \nobreak
est émis, ce qui interdit tout saut de ligne au point (\nobreak
), puis un espace entre les mots normal est inséré.
Ainsi lors de la saisie
no~break
il y aura un espace entre les deux mots, mais la ligne ne sera pas interrompue après no
.
Pourquoi {}
après \nobreakspace
? Si vous avez no~break
dans une légende, dans le fichier .aux
la version étendue apparaîtra
no\nobreakspace {}break
Les accolades ont été introduites pour faire face au cas rare où un espace après ~
est souhaité; sans eux no~ break
écrirait
no\nobreakspace break
et, en lisant le .aux
, lespace serait ignoré. Avec les accolades
no\nobreakspace {} break
sera écrit et lespace supplémentaire ne sera pas ignoré.
Que se passe-t-il si lon tape no~ break
dans la sortie? Deux espaces sont ajoutés, mais aucun saut de ligne nest possible, car un espace est un point de saut de ligne possible uniquement sil nest pas précédé dun élément jetable; puisque \nobreakspace
devient
\leavevmode\penalty 10000 \
et les pénalités sont éliminables comme des espaces, ni \
ni lespace suivant ne peuvent être utilisés pour un saut de ligne.
Dans le cas inverse no ~break
deux espaces sont affichés, mais maintenant un point de rupture est possible au premier espace (et les deux disparaîtront avec la pénalité si elle est prise).
Commentaires
- Belle explication. Puis-je dire +1?
- Vous parlez de
no~ break
mais pas deno ~break
. En particulier, ce cas peut apparaître lors de lutilisation dune limitation de caractères par ligne avec un retour de ligne en tête de lespace. Que se passe-t-il dans ce cas? - @RomainPicot Presque pareil, vous obtenez deux espaces si aucune rupture ne se produit, mais une rupture est possible (ce qui nest pas avec
no~ break)
- @egreg merci pour la précision
;-)
- @RomainPicot Jai ajouté une note finale, merci pour linvite.
Réponse
Voici la définition de ~
dans latex.ltx
\catcode `\~=13 \def~{\nobreakspace{}}
tandis que \nobreakspace
est défini comme
\DeclareRobustCommand{\nobreakspace}{% \leavevmode\nobreak\ }
Ainsi, le caractère actif ~
équivaut à un espace qui ne peut pas être divisé en lignes.
~
est un espace incassable où lespace nest ' t incassable.:p
\the....
.~
=\nobreakspace