Es gibt den Befehl "---
(kyrillischer Gedankenstrich) definiert in derbabelPaket (für die russische Sprache). Es ist kürzer als der übliche englische Bindestrich ---
und hat kürzere Leerzeichen darum herum (außerdem sind sie, soweit ich sehe, nicht umbrechend). Wie breit sind solche Leerzeichen? Ist sie gleich der Breite des Leerzeichens \,
?
Antwort1
Der Befehl \cyrdash
ist für das Drucken des Gedankenstrichs verantwortlich. Wenn die aktuelle Sprache Russisch ist, druckt er das Zeichen 22 (derselbe Platz wie der Geviertstrich, aber in T2A-codierten Schriftarten ist er kürzer) oder
\hbox to 0.8em{--\hss--}
wenn die aktuelle Kodierung nicht T2A ist, was bedeutet, dass zwei Halbgeviertstriche übereinander gelegt werden, sodass die Gesamtbreite 0,8em beträgt (und sich daher mit der Schriftart ändert). Die Definition von "-
ist etwas kompliziert:
\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}%
Im Grunde bedeutet es, dass "-
produziert \russian@sh@hyphen
, während "--
tut \russian@sh@emdash
.
Ersteres gibt aus \nobreak
, damit der vorhergehende Wortteil getrennt werden kann; dann fügt es einen beliebigen Trennstrich ein, sodass der folgende Wortteil getrennt werden kann.
Letzterer betrachtet die nächsten beiden Token (das erste ist noch -
); es gibt vier Fälle nach dem dritten Zeichen
"---
Probleme\@Acdash
;"--~
Probleme\@Bcdash
;"--*
Probleme\@Cdash
;- Keines der oben genannten, daher
"--
folgen (ignorierte) Leerzeichen und ein anderes Token als-
,~
oder~
.
Im vierten Fall Wrong usage of cdash
wird der Fehler ausgelöst.
Dabei
"---
wird ein vorangehendes Leerzeichen (sofern vorhanden) entfernt und in diesem Fall ein geschütztes Leerzeichen mit einer Breite von 0,2em eingefügt, gefolgt von\cyrdash
einem weiteren geschützten Leerzeichen mit einer Breite von 0,2em.Der Fall
"--~
entfernt ein vorangehendes Leerzeichen, falls vorhanden,\cyrdash
und fügt dann eine Strafe wie bei einem expliziten Bindestrich ein, wobei nachfolgende Leerzeichen ignoriert werden.Der Fall
"--*
gilt für „Dialogene“: kein Leerzeichen davor und\cyrdash
danach ein Leerzeichen von 0,35em, nachfolgende Leerzeichen werden ignoriert.
Es liegt ein Fehler in den Definitionen vor: "---
am Anfang eines Absatzes kann zu unerwarteten Ergebnissen führen. \leavevmode
Wie bei den anderen beiden Makros sollte am Anfang stehen.
\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}