示例文本tufte
(由 ConTeXt 提供)包含一个||
通常会变成 emdash 的序列。出于某种原因,fontspec
包含 会禁用此功能。我尝试使用 的各种选项,但 \defaultfontfeatures{Ligatures=...}
均无效。发生了什么?(我使用的是 Tex-live 2015)。
\documentclass[12pt]{article}
\usepackage[paperwidth=6in,paperheight=6in,textwidth=4in]{geometry}
\usepackage{fontspec} % commenting this causes || to be interpreted as an emdash
\baselineskip=12pt
\begin{document}
{
\input tufte
}
\end{document}
编辑:
事实证明,ConTeXt 的呈现方式||
完全不同,因此原始问题实际上表达的是误解。fontspec
并且编码不是问题。
答案1
使用||
它来生成双破折号是滥用系统。|
当输出字体编码为 OT1 时,生成破折号纯属偶然,切勿依赖。
在 TeX/LaTeX 中获取破折号的“正确”方法是通过键入---
,这也适用于fontspec
,前提是Ligatures=TeX
默认激活的选项尚未针对特定字体禁用。
如果文本使用了|
破折号,则该文本是错误的,应该修复。
\documentclass[12pt]{article}
\usepackage[paperwidth=6in,paperheight=6in,textwidth=4in]{geometry}
\usepackage{fontspec}
\usepackage{catchfile,etoolbox}
\begin{document}
% emulate editing the faulty file
\CatchFileDef\tufte{tufte}{}
\patchcmd{\tufte}{||}{------}{}{}
\tufte
\end{document}
无论如何,我不会使用双破折号。
答案2
经过几次失败的尝试之后,显然这||
是 ConTeXt 惯例的结果,而且原因比单纯的任性更有趣。
来自 ConTeXt 的lang-mis.mkiv
文件:
TEX 在段落构建方面的强项之一是处理连字符的方式。尽管要真正有效地对非英语语言进行连字符处理,需要对程序进行一些扩展,但使用标准机制和附加宏可以达到相当好的效果,至少在荷兰语中是如此。
CONTEXT 的初衷是为了排版教育材料,尤其是在技术环境中。在面向生产的环境中,会使用很多复合词。由于荷兰语对单词的组合没有限制,我们通常倾向于在这些单词之间添加破折号,因为这样可以方便阅读,至少对那些不太习惯的人来说是这样。
在 TEX 中,用连字符分隔的复合词根本不使用连字符。
啊哈!没错。
尽管经过了多遍段落排版,但这仍会导致部分单词卡在页边空白处。[...] 该序列
||
只是导致两个单词通过连字符连接。因为我们想将这种连字符与 TeX 连字符时插入的连字符区分开来,所以我们使用了稍长的连字符。
因为 ConTeXt 深深植根于荷兰语,而荷兰语通常包含许多复合词,因此 TeX 的连字符处理得并不好。据我所知,解决方案是将连字符替换为视觉上类似的字符,而不会触发 TeX 的无连字符复合词策略。因此,在 ConTeX 中,所有复合词都由||
而不是连字符连接。
定义||
这样做也发生在lang-mis.mkiv
,并使用|
(单个)作为活动字符(正如@egreg 指出的那样)。
\def\compoundhyphen {\hbox{-\kern-.25ex-}}
\def\defaultdiscretionaryhyphen{\compoundhyphen}
\installdiscretionary | \defaultdiscretionaryhyphen
当然,在一个不太长的复合词的英语文本样本中使用它是一种奇怪的选择,但这可能是由于习惯的力量和荷兰人的原因。