在"---
巴别塔包(用于俄语)。它比通常的英文破折号短---
,并且周围的空格也更短(而且据我所知,它们是不间断的)。这些空格的宽度是多少?它等于空格的宽度吗\,
?
答案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.35em 的空格,忽略后面的空格。
定义中存在错误:"---
在段落开头可能会产生意外结果。应该\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}