Verschil tussen een spatie en een “ golf ” -symbool (tilde / “ ~ ”)?

Als titel, wat is het verschil tussen een en ~?

Ik zie geen verschillen na de compilatie.

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} 

Reacties

  • U ziet het verschil aan het einde van de regel. ~ is een onbreekbare ruimte, waar als spatie n ' t onbreekbaar is.
  • " Ik ben cool " … Dat ' een nogal gewaagde uitspraak is :p
  • Het controleert ook de ruimte, het ' wordt heel vaak gebruikt na een \the.... telleruitvoercommando.
  • In tekstmodus ~ = \nobreakspace
  • @yo ' Moet ik deze vraag dan verwijderen?

Antwoord

Het verschil is te zien aan het einde van de lijn. Een spatie is breekbaar en een ~ is een niet-breekbare spatie.

\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} 

voer hier een beschrijving van de afbeelding in

De drie woorden I am en cool zijn aan elkaar gelijmd in de tweede regel.

Antwoord

De ~ is een actief teken , wat betekent dat het “hetzelfde is als een macro zoals \mbox enzovoort. Zijn functie wordt beschreven door zijn definitie, die is

\nobreakspace{} 

dus het typen van ~ is gelijk aan het typen van \nobreakspace{}.

Wat doet \nobreakspace? Hier is het:

\leavevmode\nobreak\ 

(er volgt een spatie na de laatste backslash.) Dus een alinea wordt gestart of er wordt niets gedaan als we “al in een alinea zijn (\leavevmode); dan wordt \nobreak uitgegeven, wat elke regeleinde op het punt (\nobreak) niet toestaat, en dan wordt een normale interwoordspatie ingevoegd.

Bij het typen

no~break 

zal er dus een spatie staan tussen de twee woorden, maar de regel wordt niet onderbroken na no.


Waarom de {} na \nobreakspace? Als u no~break in een bijschrift heeft, zal in het .aux bestand de uitgebreide versie verschijnen

no\nobreakspace {}break 

De accolades zijn geïntroduceerd om om te gaan met het zeldzame geval dat een spatie na ~ gewenst is; zonder hen zou no~ break schrijven

no\nobreakspace break 

en, bij het lezen van de .aux bestand, wordt de spatie genegeerd. Met de accolades

no\nobreakspace {} break 

wordt geschreven en de extra spatie wordt niet genegeerd.


Wat gebeurt er als men no~ break in de uitvoer? Er worden twee spaties toegevoegd, maar er is geen regeleinde bij mogelijk, omdat een spatie alleen een haalbaar regeleindepunt is als deze niet wordt voorafgegaan door een weggegooid item; aangezien \nobreakspace wordt

\leavevmode\penalty 10000 \ 

en sancties kunnen worden weggegooid als spaties, noch \ noch de volgende spatie kan worden gebruikt voor een regeleinde.

In het omgekeerde geval no ~break worden twee spaties uitgevoerd, maar nu is een breekpunt mogelijk op de eerste spatie (en beide zullen verdwijnen samen met de straf voor het geval deze wordt ingenomen).

Opmerkingen

  • Leuke uitleg. Mag ik +1 zeggen?
  • U spreekt over de no~ break maar niet over no ~break. In het bijzonder kan dit geval optreden bij het gebruik van een tekenbeperking per regel met een regelterugloop in de spatie. Wat gebeurt er in dit geval?
  • @RomainPicot Bijna hetzelfde, je krijgt twee spaties als er geen pauze is, maar een pauze is mogelijk (wat niet is met no~ break)
  • @egreg bedankt voor de precisie ;-)
  • @RomainPicot Ik heb een laatste opmerking toegevoegd, bedankt voor de prompt.

Antwoord

Dit is de definitie van ~ in latex.ltx

\catcode `\~=13 \def~{\nobreakspace{}} 

terwijl \nobreakspace is gedefinieerd als

\DeclareRobustCommand{\nobreakspace}{% \leavevmode\nobreak\ } 

Dus het actieve teken ~ is equivalent aan een spatie die niet in regels kan worden opgedeeld.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *