Existe o comando "---
(emdash cirílico) definido nobabelpacote (para o idioma russo). É mais curto do que o travessão inglês normal ---
e tem espaços mais curtos ao seu redor (também são inquebráveis, como posso ver). Qual é a largura desses espaços? É igual à largura do \,
espaço?
Responder1
O comando \cyrdash
é responsável por imprimir o travessão; quando o idioma atual é russo, ele imprime o caractere 22 (o mesmo slot do travessão, mas em fontes codificadas T2A é mais curto) ou não
\hbox to 0.8em{--\hss--}
quando a codificação atual não é T2A, o que significa que ela sobrepõe dois travessões para que a largura total seja 0,8em (mudando assim com a fonte). A definição de "-
é um pouco complicada:
\declare@shorthand{russian}{"-}{%
\def\russian@sh@tmp{%
\if\russian@sh@next-\expandafter\russian@sh@emdash
\else\expandafter\russian@sh@hyphen\fi}%
\futurelet\russian@sh@next\russian@sh@tmp}
\def\russian@sh@hyphen{\nobreak\-\bbl@allowhyphens}
\def\russian@sh@emdash#1#2{\cdash-#1#2}
\def\cdash#1#2#3{\def\tempx@{#3}%
\def\tempa@{-}\def\tempb@{~}\def\tempc@{*}%
\ifx\tempx@\tempa@\@Acdash\else
\ifx\tempx@\tempb@\@Bcdash\else
\ifx\tempx@\tempc@\@Ccdash\else
\errmessage{Wrong usage of cdash}\fi\fi\fi}
\def\@Acdash{\ifdim\lastskip>\z@\unskip\nobreak\hskip.2em\fi
\cyrdash\hskip.2em\ignorespaces}%
\def\@Bcdash{\leavevmode\ifdim\lastskip>\z@\unskip\fi
\nobreak\cyrdash\penalty\exhyphenpenalty\hskip\z@skip\ignorespaces}%
\def\@Ccdash{\leavevmode
\nobreak\cyrdash\nobreak\hskip.35em\ignorespaces}%
Basicamente significa que "-
produz \russian@sh@hyphen
, enquanto "--
faz \russian@sh@emdash
.
O primeiro resulta \nobreak
para que a parte da palavra anterior possa ser hifenizada; em seguida, insere um hífen discricionário, permitindo que a parte da palavra seguinte seja hifenizada.
Este último analisa os próximos dois tokens (o primeiro ainda é -
); existem quatro casos de acordo com o terceiro personagem
"---
problemas\@Acdash
;"--~
problemas\@Bcdash
;"--*
problemas\@Cdash
;- Nenhuma das opções acima
"--
é seguida por espaços (ignorados) e outro token além de-
,~
ou~
.
No quarto caso o erro Wrong usage of cdash
é gerado.
O caso
"---
remove um espaço anterior, se presente, e, neste caso, insere um espaço inseparável de largura 0,2em, seguido por\cyrdash
um espaço inseparável adicional de largura 0,2em.O caso
"--~
remove um espaço anterior, se presente, insere\cyrdash
e, em seguida, uma penalidade como para um hífen explícito, ignorando os espaços seguintes.O caso
"--*
é para “diálogos”: não há espaço antes e\cyrdash
é seguido por um espaço de 0,35em, ignorando os espaços seguintes.
Há um erro nas definições: "---
no início de um parágrafo pode produzir resultados inesperados. Deve haver \leavevmode
no início como nas outras duas macros.
\documentclass{article}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}
%% fix the error
\makeatletter
\def\@Acdash{\leavevmode\ifdim\lastskip>\z@\unskip\nobreak\hskip.2em\fi
\cyrdash\hskip.2em\ignorespaces}%
\makeatother
\begin{document}
\verb|"-|: a"-b
\verb|"---|: a"---b a "--- b
\verb|"--~|: a"--~b a "--~ b
\verb|"--*|: "--*a "--* a
\end{document}