Différence entre un espace et un symbole “ wave ” (tilde / “ ~ ”)?

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

  • Vous verrez la différence en fin de ligne. ~ est un espace incassable où lespace nest ' t incassable.
  • " Je suis cool " … Cest ' une déclaration plutôt audacieuse :p
  • Il contrôle également lespace, il ' est très souvent utilisé après une commande de sortie de compteur \the.....
  • En mode texte ~ = \nobreakspace
  • @yo ' Dois-je alors supprimer cette question?

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} 

entrez la description de limage ici

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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *