如何根据当前语言自动调整破折号的长度?

如何根据当前语言自动调整破折号的长度?

在俄语排版中,在 LaTeX 中输入为连字符的破折号---比标准破折号短 20%。该babel软件包考虑到了这一差异,因此如果是当前语言,---则会打印较短的破折号。但是,这种切换机制仅适用于引擎,而无论如何都会输入长破折号。russianlatex.exelualatex.exexelatex.exe

这是因为在 LaTeX 下,\selectlanguage{russian}当前编码从OT1T1切换到T2A。因此,拉丁文 emdash 来自cmr字体系列,而俄文 emdash 来自 LH 字体(通常)。在 LuaTeX 或 XeLaTeX 下\selectlanguage不会切换当前编码(对于 LuaTeX 它保持为 EU2,对于 XeTeX 它保持为 EU1),因此---始终来自相同的字体。

但请注意,大多数字体包含不同长度的破折号,因此(原则上)可以---根据当前脚本映射到不同的代码点。

我的问题是:如何使用fontspec包提供的工具来做到这一点?

请注意,babel提供了一种简写"---(如果russian指定了选项),它总是会输入比划线短 20% 的破折号,但它也会减少破折号周围的空格并防止其后出现换行。

更新: 我意识到现代 Open Type 字体中没有代码点(与用于排版西里尔文本的旧 LaTeX 中使用的 metafont LH 字体不同)。polyglossiababel都带有russian选项,由两个 endash 组成一个较短的 emdash,它们定义\cyrdash如下宏

\def\cyrdash{\hbox to.8em{--\hss--}}

并将其映射到简写形式"---。所以我的问题的最终形式是

如何将连字映射---\cyrdash除了使破折号变为-活动字符之外,还有其他解决方案吗?

答案1

作为恩普拉蒂斯指出,这实际上是 的责任polyglossia,它对我来说有效,但或多或​​少依赖于字体,因为polyglossia只使用两个“-”U+002D HYPHEN-MINUS并将它们重叠,可以从PT Sans示例中推断出,它不起作用:

俄语破折号示例 (XeLaTeX)

使其工作的关键是添加到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 中获得更短的破折号,只是间距更窄:

俄语破折号示例 (LaTeX)

代码:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}

\begin{document}
\selectlanguage{russian}
\noindent
Слово "--- слово.\\
Слово --- слово.\\
Слово — слово.\par% U+2014 EM DASH
\end{document}

相关内容