禁止在破折号(短破折号和长破折号)前换行

禁止在破折号(短破折号和长破折号)前换行

在波兰语字体中,dash(pol.米希利尼克) 不应放在换行符之后。下面您可以找到使用 en dash (pol.波保扎) 和 em 破折号 (pol.保扎)。

\documentclass[12pt]{article}
\usepackage[paperwidth=95mm,paperheight=55mm,margin=5mm,right=24mm,marginparsep=5mm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{microtype}
\usepackage{xcolor}
\pagestyle{empty}
\begin{document}
% line break before a dash is a sin according to Polish typography rules
\leavevmode\marginpar{\textsc{\color{purple}źle\\(bad)}}%
To jest maciupeńki test półpauzy -- na Zachodzie nazywanej \emph{en dash}.  {\color{orange}\hfill~--}
\par \emph{Em dash} za to nazywamy pauzą --- obecnie dość rzadko spotykana. {\color{orange}\hfill~---}
\vfill
% line break after a dash -- this is the way it should be done
\leavevmode\marginpar{\textsc{\color{teal}dobrze\\(good)}}%
To jest maciupeńki test półpauzy~-- na Zachodzie nazywanej \emph{en dash}.  {\color{orange}\hfill~--}
\par \emph{Em dash} za to nazywamy pauzą~--- obecnie dość rzadko spotykana. {\color{orange}\hfill~---}
\end{document}

在此处输入图片描述

为了获得正确的结果,我必须在每个破折号前使用不间断空格(领带)。

是否可以修复 LaTeX 文档中所有 en/em 破折号被普通空格包围的行为?

边注:我并不是在问需要预处理的解决方法,例如s/ -- /~-- /在 Vim/sed/perl/etc 中使用。

答案1

完成该任务的唯一方法是创建-一个活动字符并以某种方式定义它,使得它在数学模式下扩展为减号,而在文本模式下,它会期待看到后面跟着一个还是两个连字符并采取相应的行动。

使用主动连字符的可能实现如下

\makeatletter
\def\ah@hyphen{-}
\def\ah@endash{--}
\def\ah@emdash{---}
\catcode`\-=\active
\protected\def-{\ifmmode\ah@hyphen\else\expandafter\ah@check\fi}
\def\ah@check{\@ifnextchar-{\ah@checki}{\ah@hyphen}}
\def\ah@checki#1{\@ifnextchar-{\ah@three}{\ah@two}}

\def\ah@two{\unskip~\ah@endash\space\ignorespaces}
\def\ah@three#1{\unskip~\ah@emdash\space\ignorespaces}
\makeatother

不过,使用 Unicode 字符也有解决方法。如果你的文档是用 UTF-8 编写的,你可以这样写

\usepackage{newunicodechar}
\newunicodechar{–}{\unskip~--\space\ignorespaces}
\newunicodechar{—}{\unskip~---\space\ignorespaces}

其中第 2 行是 U+2013 EN DASH,第 3 行是 U+2014 EM DASH;在源代码中使用这些字符即可实现您的目的。这里的主要问题是,它们在等宽字体中几乎无法区分。为了展示它们,我将它们放在代码框中:

– U+2013 EN DASH  
— U+2014 EM DASH

它们在引用框中的显示方式如下:

– U+2013 英文破折号
— U+2014 英文破折号

当然,屏幕上的渲染取决于字体。

答案2

手动插入联系仍然是一个不错的选择:它没有副作用,易于阅读,并且很容易训练自己始终输入~---

这就是说,extdash包提供了带不间断空格的破折号命令。通过该[shortcuts]选项\---,命令可用,并代表带不间断空格的长破折号。破折号周围的空间也会减少,以获得更好的外观。

相关内容