Come titolo, qual è la differenza tra un e
~
?
Non vedo differenze dopo la compilazione.
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}
Commenti
Risposta
La differenza può essere vista alla fine di linea. Uno spazio è divisibile e un ~
è uno spazio non divisibile.
\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}
Le tre parole I
am
e cool
sono incollati insieme nella seconda riga.
Risposta
Il ~
è un carattere attivo , il che significa che “è uguale a una macro come \mbox
e così via. La sua funzione è descritta dal suo definizione, che è
\nobreakspace{}
quindi digitare ~
equivale a digitare \nobreakspace{}
.
Che cosa fa \nobreakspace
? Eccolo:
\leavevmode\nobreak\
(uno spazio segue lultima barra rovesciata) Quindi un paragrafo viene avviato o non viene fatto nulla se “siamo già in un paragrafo (\leavevmode
); quindi viene emesso \nobreak
, che non consente alcuna interruzione di riga nel punto (\nobreak
) e quindi viene inserito uno spazio interword normale.
Pertanto, durante la digitazione
no~break
ci sarà uno spazio tra le due parole, ma la riga non verrà interrotta dopo no
.
Perché {}
dopo \nobreakspace
? Se hai no~break
in una didascalia, nel file .aux
verrà visualizzata la versione espansa
no\nobreakspace {}break
Le parentesi graffe sono state introdotte per far fronte al raro caso in cui si desidera uno spazio dopo ~
; senza di essi no~ break
scriverebbe
no\nobreakspace break
e, dopo aver letto il .aux
file, lo spazio verrebbe ignorato. Con le parentesi graffe
no\nobreakspace {} break
verrà scritto e lo spazio aggiuntivo non verrà ignorato.
Cosa succede se si digita no~ break
nelloutput? Vengono aggiunti due spazi ma non è possibile alcuna interruzione di riga, perché uno spazio è un punto di interruzione di riga ammissibile solo se non è preceduto da un elemento scartabile; poiché \nobreakspace
diventa
\leavevmode\penalty 10000 \
e le penalità possono essere eliminate come gli spazi, né \
né il seguente spazio può essere utilizzato per uninterruzione di riga.
Nel caso inverso no ~break
vengono emessi due spazi, ma ora è possibile un punto di interruzione al primo spazio (ed entrambi scompariranno insieme alla penalità nel caso in cui venga eseguita).
Commenti
- Bella spiegazione. Posso dire +1?
- Parli di
no~ break
ma non dino ~break
. In particolare, questo caso può apparire quando si utilizza un limite di caratteri per riga con un ritorno di riga intead dello spazio. Cosa succede in questo caso? - @RomainPicot Quasi uguale, ottieni due spazi se non si verifica alcuna interruzione, ma è possibile uninterruzione (che non è con
no~ break)
- @egreg grazie per la precisione
;-)
- @RomainPicot Ho aggiunto una nota finale, grazie per il prompt.
Risposta
Questa è la definizione di ~
in latex.ltx
\catcode `\~=13 \def~{\nobreakspace{}}
mentre \nobreakspace
è definito come
\DeclareRobustCommand{\nobreakspace}{% \leavevmode\nobreak\ }
Quindi, il carattere attivo ~
è equivalente a uno spazio che non può essere suddiviso in righe.
~
è uno spazio indistruttibile dove lo spazio non è ' t infrangibile.:p
\the....
.~
=\nobreakspace