"---
В файле есть команда (кириллица длинное тире).вавилонpackage (для русского языка). Он короче обычного английского тире ---
и имеет более короткие пробелы вокруг себя (они также неразрывные, как я вижу). Какова ширина таких пробелов? Равна ли она ширине пробела \,
?
решение1
Команда \cyrdash
отвечает за печать тире; если текущий язык — русский, она печатает символ 22 (тот же слот, что и длинное тире, но в шрифтах с кодировкой T2A оно короче) или делает это
\hbox to 0.8em{--\hss--}
когда текущая кодировка не T2A, что означает, что она накладывает два коротких тире так, что общая ширина составляет 0,8em (и меняется вместе со шрифтом). Определение "-
немного сложное:
\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}%
По сути это означает, что "-
производит \russian@sh@hyphen
, тогда как "--
делает \russian@sh@emdash
.
В первом \nobreak
случае предыдущая часть слова может быть разделена дефисом; затем вставляется дискреционный дефис, позволяющий разделить следующую часть слова.
Последний смотрит на следующие два токена (первый по-прежнему -
); существует четыре случая в соответствии с третьим символом
"---
проблемы\@Acdash
;"--~
проблемы\@Bcdash
;"--*
проблемы\@Cdash
;- Ничего из вышеперечисленного, поэтому
"--
за ним следуют (игнорируемые) пробелы и другой токен, отличный от-
,~
или~
.
Wrong usage of cdash
В четвертом случае возникает ошибка .
В этом случае
"---
удаляется предшествующий пробел, если он есть, и в этом случае вставляется неразрывный пробел шириной 0,2em, за которым следует\cyrdash
еще один неразрывный пробел шириной 0,2em.В этом случае
"--~
удаляется предшествующий пробел, если он есть, вставляется\cyrdash
и затем применяется штраф, как при явном дефисе, при этом последующие пробелы игнорируются.Это касается
"--*
«диалогов»: без пробела перед и\cyrdash
с пробелом в 0,35 em после, игнорируя последующие пробелы.
В определениях есть ошибка: "---
в начале абзаца может привести к неожиданным результатам. Должно быть \leavevmode
в начале, как и для двух других макросов.
\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}