Unterschied zwischen einem Leerzeichen und einem “ Wave ” -Symbol (Tilde / “ ~ ”)?

Was ist als Titel der Unterschied zwischen einem und ~?

Ich sehe nach der Kompilierung keine Unterschiede.

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} 

Kommentare

  • Sie sehen den Unterschied am Zeilenende. ~ ist ein unzerbrechlicher Raum, wobei der Raum nicht ' nicht unzerbrechlich ist.
  • " Ich bin cool " … Das ' ist eine ziemlich kühne Aussage :p
  • Es steuert auch den Speicherplatz. ' wird sehr häufig nach einem \the.... Zählerausgabebefehl verwendet.
  • Im Textmodus ~ = \nobreakspace
  • @yo ' Soll ich diese Fragen dann löschen?

Antwort

Der Unterschied ist am Ende zu sehen der Linie. Ein Leerzeichen ist zerbrechlich und ein ~ ist ein nicht zerbrechliches Leerzeichen.

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

hier Bildbeschreibung eingeben

Die drei Wörter I am und cool werden in der zweiten Zeile zusammengeklebt.

Antwort

Die ~ ist ein aktives Zeichen , was bedeutet, dass es mit einem Makro wie \mbox usw. identisch ist. Seine Funktion wird durch sein beschrieben Definition:

\nobreakspace{} 

Die Eingabe von ~ entspricht der Eingabe von \nobreakspace{}.

Was macht \nobreakspace? Hier ist es:

\leavevmode\nobreak\ 

(Nach dem letzten Backslash folgt ein Leerzeichen.) Ein Absatz wird gestartet oder es wird nichts unternommen, wenn wir uns bereits in einem Absatz befinden (\leavevmode). dann wird \nobreak ausgegeben, wodurch ein Zeilenumbruch an der Stelle (\nobreak) nicht zugelassen wird, und dann wird ein normaler Zwischenwortraum eingefügt.

Wenn Sie also

no~break 

eingeben, wird zwischen den beiden Wörtern ein Leerzeichen stehen, aber die Zeile wird nach .


Warum die {} nach \nobreakspace? Wenn Sie no~break in einer Beschriftung haben, wird in der Datei .aux die erweiterte Version

Die geschweiften Klammern wurden eingeführt, um den seltenen Fall zu bewältigen, dass ein Leerzeichen nach ~ gewünscht wird. ohne sie würde no~ break

no\nobreakspace break 

schreiben und beim Lesen der .aux Datei, der Leerzeichen würde ignoriert. Mit den geschweiften Klammern wird

no\nobreakspace {} break 

geschrieben und der zusätzliche Platz wird nicht ignoriert.


Was passiert, wenn man no~ break in der Ausgabe? Es werden zwei Leerzeichen hinzugefügt, aber es ist kein Zeilenumbruch möglich, da ein Leerzeichen nur dann ein praktikabler Zeilenumbruchpunkt ist, wenn ihm kein wegwerfbares Element vorangestellt ist. Da \nobreakspace zu

\leavevmode\penalty 10000 \ 

wird und Strafen wie Leerzeichen verworfen werden können, ist weder \ noch das folgende Leerzeichen kann für einen Zeilenumbruch verwendet werden.

Im umgekehrten Fall no ~break werden zwei Leerzeichen ausgegeben, aber jetzt ist ein Unterbrechungspunkt möglich im ersten Feld (und beide verschwinden zusammen mit der Strafe, falls sie genommen wird).

Kommentare

  • Schöne Erklärung. Kann ich +1 sagen?
  • Sie sprechen von no~ break, aber nicht von no ~break. Insbesondere kann dieser Fall auftreten, wenn eine Zeichenbegrenzung pro Zeile mit einer Zeilenrückgabe anstelle des Leerzeichens verwendet wird. Was passiert in diesem Fall?
  • @RomainPicot Fast gleich, Sie erhalten zwei Leerzeichen, wenn keine Unterbrechung auftritt, aber eine Unterbrechung möglich ist (was nicht mit no~ break) möglich ist
  • @egreg danke für die Genauigkeit ;-)
  • @RomainPicot Ich habe eine letzte Anmerkung hinzugefügt, danke für die Eingabeaufforderung.

Antwort

Dies ist die Definition von ~ in latex.ltx

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

, während \nobreakspace als

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

Das aktive Zeichen ~ entspricht also einem Leerzeichen, das nicht in Zeilen unterteilt werden kann.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.