Пробелы вокруг кириллического тире (babel)

Пробелы вокруг кириллического тире (babel)

"---В файле есть команда (кириллица длинное тире).вавилон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случае предыдущая часть слова может быть разделена дефисом; затем вставляется дискреционный дефис, позволяющий разделить следующую часть слова.

Последний смотрит на следующие два токена (первый по-прежнему -); существует четыре случая в соответствии с третьим символом

  1. "---проблемы \@Acdash;
  2. "--~проблемы \@Bcdash;
  3. "--*проблемы \@Cdash;
  4. Ничего из вышеперечисленного, поэтому "--за ним следуют (игнорируемые) пробелы и другой токен, отличный от -, ~или ~.

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}

введите описание изображения здесь

Связанный контент