在俄语排版中,在 LaTeX 中输入为连字符的破折号---
比标准破折号短 20%。该babel
软件包考虑到了这一差异,因此如果是当前语言,---
则会打印较短的破折号。但是,这种切换机制仅适用于引擎,而无论如何都会输入长破折号。russian
latex.exe
lualatex.exe
xelatex.exe
这是因为在 LaTeX 下,\selectlanguage{russian}
当前编码从OT1
或T1
切换到T2A
。因此,拉丁文 emdash 来自cmr
字体系列,而俄文 emdash 来自 LH 字体(通常)。在 LuaTeX 或 XeLaTeX 下\selectlanguage
不会切换当前编码(对于 LuaTeX 它保持为 EU2,对于 XeTeX 它保持为 EU1),因此---
始终来自相同的字体。
但请注意,大多数字体包含不同长度的破折号,因此(原则上)可以---
根据当前脚本映射到不同的代码点。
我的问题是:如何使用fontspec
包提供的工具来做到这一点?
请注意,babel
提供了一种简写"---
(如果russian
指定了选项),它总是会输入比划线短 20% 的破折号,但它也会减少破折号周围的空格并防止其后出现换行。
更新:
我意识到现代 Open Type 字体中没有代码点(与用于排版西里尔文本的旧 LaTeX 中使用的 metafont LH 字体不同)。polyglossia
和babel
都带有russian
选项,由两个 endash 组成一个较短的 emdash,它们定义\cyrdash
如下宏
\def\cyrdash{\hbox to.8em{--\hss--}}
并将其映射到简写形式"---
。所以我的问题的最终形式是
如何将连字映射---
到\cyrdash
?除了使破折号变为-
活动字符之外,还有其他解决方案吗?
答案1
作为恩普拉蒂斯指出,这实际上是 的责任polyglossia
,它对我来说有效,但或多或少依赖于字体,因为polyglossia
只使用两个“-”U+002D HYPHEN-MINUS
并将它们重叠,可以从PT Sans
示例中推断出,它不起作用:
使其工作的关键是添加到
babelshorthands=true
语言选择中,因此创建上图的代码如下:
%!TEX TS-program = xelatex
%!TEX encoding = UTF-8 Unicode
\documentclass{article}
\usepackage{polyglossia}
\setmainfont{PT Sans}
\setsansfont{PT Sans Caption}
\defaultfontfeatures{Scale=MatchLowercase, Mapping=tex-text}
\setdefaultlanguage[spelling=modern,babelshorthands=true]{russian}
\setotherlanguage{english}
\newfontfamily{\HT}[Scale=MatchLowercase]{Hoefler Text}
\newfontfamily{\GPP}{Garamond Premier Pro}
\newfontfamily{\BV}{Baskerville}
\newfontfamily{\CCY}{Charcoal CY}
\newcommand{\text}{Слово "--- слово.\\Слово — слово.\par}
%1. babelshorthand/2. U+2014 EM DASH
\begin{document}
PT Sans\\
\text
{\HT Hoefler Text\\
\text}
{\GPP Garamond Premier Pro\\
\text}
{\BV Baskerville\\
\text}
{\CCY Charcoal CY\\
\text}
\end{document}
如需了解更多信息,另请参阅此主题在 XeTeX 邮件列表中。此外,babel
显然区分了俄语的几个破折号:
"---
纯文本中的西里尔破折号。
"--~
复合名称(姓氏)中的西里尔破折号。
"--*
表示直接引语的西里尔破折号。
参见这里了解更多信息。
附注:奇怪的是,我没能在常规 LaTeX 中获得更短的破折号,只是间距更窄:
代码:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}
\begin{document}
\selectlanguage{russian}
\noindent
Слово "--- слово.\\
Слово --- слово.\\
Слово — слово.\par% U+2014 EM DASH
\end{document}