Como título, qual é a diferença entre e
~
?
Não vejo diferenças após a compilação.
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}
Comentários
Resposta
A diferença pode ser vista no final da linha. Um espaço é quebrável e um ~
é um espaço inquebrável.
\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}
As três palavras I
am
e cool
são colados na segunda linha.
Resposta
O ~
é um caractere ativo , o que significa que “é o mesmo que uma macro como \mbox
e assim por diante. Sua função é descrita por seu definição, que é
\nobreakspace{}
portanto, digitar ~
é equivalente a digitar \nobreakspace{}
.
O que \nobreakspace
faz? Aqui está:
\leavevmode\nobreak\
(um espaço após a última barra invertida). Portanto, um parágrafo é iniciado ou nada é feito se já estivermos em um parágrafo (\leavevmode
); então \nobreak
é emitido, o que não permite qualquer quebra de linha no ponto (\nobreak
) e então um espaço normal entre palavras é inserido.
Assim, ao digitar
no~break
haverá um espaço entre as duas palavras, mas a linha não será quebrada após no
.
Por que {}
depois de \nobreakspace
? Se você tiver no~break
em uma legenda, no arquivo .aux
a versão expandida aparecerá
no\nobreakspace {}break
As chaves foram introduzidas para lidar com o raro caso em que um espaço após ~
é necessário; sem eles, no~ break
escreveria
no\nobreakspace break
e, ao ler o .aux
arquivo, o espaço será ignorado. Com as chaves
no\nobreakspace {} break
será escrito e o espaço adicional não será ignorado.
O que acontece se alguém digitar no~ break
na saída? Dois espaços são adicionados, mas nenhuma quebra de linha é possível, porque um espaço é um ponto de quebra de linha viável apenas se não for precedido por um item descartável; uma vez que \nobreakspace
se torna
\leavevmode\penalty 10000 \
e as penalidades são descartáveis como espaços, nem \
nem o espaço a seguir podem ser usados para uma quebra de linha.
No caso reverso no ~break
dois espaços são produzidos, mas agora um ponto de quebra é possível no primeiro espaço (e ambos desaparecerão junto com a penalidade caso seja preenchida).
Comentários
- Bela explicação. Posso dizer +1?
- Você fala sobre
no~ break
, mas não sobreno ~break
. Particuler, este caso pode aparecer ao usar uma limitação de caracteres por linha com um retorno de linha no lugar do espaço. O que acontece neste caso? - @RomainPicot Quase o mesmo, você obtém dois espaços se nenhuma interrupção acontecer, mas uma interrupção é possível (o que não é com
no~ break)
- @egreg, obrigado pela precisão
;-)
- @RomainPicot Eu adicionei uma nota final, obrigado pelo prompt.
Resposta
Esta é a definição de ~
em latex.ltx
\catcode `\~=13 \def~{\nobreakspace{}}
enquanto \nobreakspace
é definido como
\DeclareRobustCommand{\nobreakspace}{% \leavevmode\nobreak\ }
Portanto, o caractere ativo ~
é equivalente a um espaço que não pode ser dividido em linhas.
~
é um espaço inquebrável, enquanto o espaço não é ' t inquebrável.:p
\the....
comando de saída do contador.~
=\nobreakspace