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}
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 vonno ~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.