Jaký je název, jaký je rozdíl mezi a
~
?
Po kompilaci nevidím žádné rozdíly.
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}
Komentáře
Odpovědět
Rozdíl je vidět na konci řádku. Prostor je rozbitný a ~
je nerozbitný prostor.
\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}
Tři slova I
am
a cool
jsou ve druhém řádku slepeny dohromady.
Odpověď
~
je aktivní znak , což znamená, že je to stejné jako makro jako \mbox
atd. Jeho funkce je popsána jeho definice, která je
\nobreakspace{}
, takže psaní ~
je ekvivalentní psaní \nobreakspace{}
.
Co \nobreakspace
dělá? Tady je:
\leavevmode\nobreak\
(za posledním zpětným lomítkem následuje mezera). Odstavec je tedy spuštěn nebo se nic neudělá, pokud již jsme v odstavci (\leavevmode
); poté se vydá \nobreak
, který zakáže jakékoli zalomení řádku v bodě (\nobreak
) a poté se vloží normální mezerový prostor.
Tudíž při psaní
no~break
bude mezi dvěma slovy mezera, ale po .
Proč {}
po \nobreakspace
? Pokud máte no~break
v titulku, v souboru .aux
se zobrazí rozšířená verze
no\nobreakspace {}break
Závorky byly zavedeny pro zvládnutí ojedinělého případu, kdy je požadována mezera za ~
; bez nich by no~ break
psal
no\nobreakspace break
a po přečtení .aux
soubor, prostor bude ignorován. S složenými závorkami
no\nobreakspace {} break
bude zapsán a další prostor nebude ignorován.
Co se stane, když jeden zadá no~ break
ve výstupu? Přidají se dvě mezery, ale není u nich možné zalomení řádku, protože mezera je proveditelným bodem zalomení čáry, pouze pokud jí nepředchází vyřazitelná položka; protože \nobreakspace
se stává
\leavevmode\penalty 10000 \
a pokuty jsou vyřazitelné jako mezery, ani \
ani následující mezeru nelze použít pro zalomení řádku.
V opačném případě no ~break
jsou vydány dva mezery, ale nyní je možný bod zlomu na prvním místě (a oba zmizí spolu s pokutou v případě, že bude uplatněna).
Komentáře
- Pěkné vysvětlení. Mohu říci +1?
- Mluvíte o
no~ break
, ale ne ono ~break
. V konkrétním případě se tento případ může objevit, když použijete omezení znaků na řádek s návratem řádku v prostoru. Co se stane v tomto případě? - @RomainPicot Téměř totéž, dostanete dvě mezery, pokud nedojde k žádné přestávce, ale přestávka je možná (což není u
no~ break)
- @egreg děkuji za přesnost
;-)
- @RomainPicot jsem přidal závěrečnou poznámku, děkuji za výzvu.
Odpověď
Toto je definice ~
v latex.ltx
\catcode `\~=13 \def~{\nobreakspace{}}
zatímco \nobreakspace
je definován jako
\DeclareRobustCommand{\nobreakspace}{% \leavevmode\nobreak\ }
Takže aktivní znak ~
odpovídá prostoru, který nelze rozdělit na řádky.
~
je nerozbitný prostor, kde jako prostor není ' t nerozbitný.:p
\the....
příkazu výstupu čítače.~
=\nobreakspace