我在使用时遇到了一些fontspec
不太明白的事情。使用\addfontfeatures
命令添加的字体功能的范围是什么?例如,考虑下面的使用示例lualatex
:
\documentclass{article}
\usepackage{fontspec,lipsum}
\setmainfont{TeX Gyre Termes}
\begin{document}
1234567890
{%
\addfontfeatures{Numbers=OldStyle}%
1234567890%
}
1234567890
Here is some text that is long enough so that it will involve a single proper hyphenation at the end of the first line.
{%
\addfontfeatures{HyphenChar=None}%
Here is some text that is long enough so that it will involve a single proper hyphenation at the end of the first line.%
}
Here is some text that is long enough so that it will involve a single proper hyphenation at the end of the first line.
\end{document}
选项Numbers=OldStyle
只是在局部应用,不会退出括号,但是选项HyphenChar=None
在括号结束后继续。有没有办法限制上面HyphenChar
as Numbers
is limited 的作用域?
答案1
好问题!
TeX(以及 XeTeX)执行的一些任务是始终全球化。您可以在 TeXbook 第 277 页或 TeX by Topic 的第 10.2 节中找到列表。其中包括设置\hyphenchar
字体的,这是由
HyphenChar=None
选项,或者同一键的任何其他设置。
所以,没有办法限制该声明的范围。简单地使用相同的字体声明一个新的字体系列但更改连字符是行不通的,因为该值与相对于字体的内存位置相关联,并且加载相同 TFM 文件(标准 TeX)或相同 OTF 文件(XeTeX)的字体将共享连字符。
一种可能的解决方法是定义一个稍微缩放字体的新字体系列:
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Junicode}
\newfontfamily{\mainno}[HyphenChar=None,Scale=.999]{Junicode}
\usepackage{polyglossia}
\setmainlanguage{latin}
\usepackage{lipsum}
\textwidth=5cm
\begin{document}
\hyphenpenalty=-3000
{\mainno\the\hyphenchar\font\lipsum*[2]} \the\hyphenchar\font \lipsum[3]
\end{document}
这些设置只是为了鼓励使用连字符。段落的第一部分将没有连字符并以 开头-1
,而第二部分将使用连字符并以 开头45
。当然,第一部分会有很多多余的行。这是一张图片(第二部分被截断):
也可以说
{\addfontfeatures{Scale=.999,HyphenChar=None}\the\hyphenchar\font\lipsum*[2]}
\the\hyphenchar\font \lipsum[3]
答案2
我刚刚遇到了一个类似的问题,我无法限制 的范围\addfontfeature{WordSpace=0.8}
,我觉得这很奇怪,因为在其他地方我已经让它工作了,被一对括号限制。不过在那个地方,我也调整了字母空间,所以我想出了在LetterSpace=0
中添加 a 的解决方案\addfontfeature
,这对字母空间没有任何影响,但有助于保持单词空间设置本地化。同样适用于 OP 的示例:
\documentclass{article}
\usepackage{fontspec,lipsum}
\setmainfont{TeX Gyre Termes}
\begin{document}
1234567890
{%
\addfontfeatures{Numbers=OldStyle}%
1234567890%
}
1234567890
Here is some text that is long enough so that it will involve a single proper hyphenation at the end of the first line.
{%
\addfontfeatures{HyphenChar=None,LetterSpace=0}%
%\addfontfeatures{HyphenChar=None}%
Here is some text that is long enough so that it will involve a single proper hyphenation at the end of the first line.%
}
Here is some text that is long enough so that it will involve a single proper hyphenation at the end of the first line.
\end{document}