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