问题
我刚刚购买了 Baskerville Classico 字体并尝试使用 Xelatex 加载它,但小写字母不起作用。我终于找到了这篇文章:[https://tex.stackexchange.com/questions/165998/small-caps-in-fontspec-on-xelatex]... 添加了这段代码并使用 LuaLaTex 加载它,它就可以正常工作了:
\setmainfont[
SmallCapsFont={TeX Gyre Termes},
SmallCapsFeatures={Letters=SmallCaps},
]{Baskerville Classico}
我的序言正确吗?
这是一个 MWE:
\documentclass[hidelinks,12pt,twoside,openright,a4paper]{book}
\usepackage[french]{babel}
\usepackage{fontspec}
\setmainfont[
SmallCapsFont={TeX Gyre Termes},
SmallCapsFeatures={Letters=SmallCaps},
]{Baskerville Classico}
\usepackage{lipsum}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
\renewcommand{\headrulewidth}{0pt}
\fancyhf{} % sets both header and footer to nothing
\fancyfoot{}
\fancyhead[LE,RO]{\thepage}
\fancyhead[CE]{\textsc{A title}} % even pages: chapter title
\fancyhead[CO]{\textsc\leftmark} % odd pages: book title
\begin{document}
\chapter{A title}
\lipsum
\end{document}
解决方案
最后,我找到了解决方案。这是要添加而不是 Tex Gyre Termes 的代码片段:
\setmainfont[
SmallCapsFont={BaskervilleClassicoSC},
SmallCapsFeatures={Letters=SmallCaps},
]{Baskerville Classico}
答案1
我会将我的建议(原帖作者确认该建议很有帮助)转化为答案而不是评论。
默认情况下,fontspec
尝试激活它调用的功能Letters=SmallCaps
,OpenType 调用smcp
。您可以使用命令检查给定字体是否具有此功能otfinfo -f
,后跟绝对文件名及其路径。您可以使用从字体的显示名称中获取文件名luaotfload-tool --find
。您通常希望在命令行中将包含空格的名称放在双引号中。
在这种情况下,您告诉我文件名是/Library/Fonts/Linotype - Baskerville Classico.otf
,并且它没有此功能。但是,同一目录中有另一种字体确实具有小写字母,Linotype - Baskerville Classico SC.otf
。
通常,你可以像这样加载单独的小型大写字母字体,方法是添加以下选项:
\defaultfontfeatures[BaskervilleClassico]{
% Set Ligatures, Numbers, etc.
SmallCapsFont={* SC},
SmallCapsFeatures={} }
\setmainfont{BaskervilleClassico}
如果还有粗体或斜体小写字体,你可以加载如下选项,假设
ItalicFeatures = { SmallCapsFont = {*-SC-Italic},
SmallCapsFeatures = {} },
XeTeX 和 LuaTeX 在不同的操作系统上加载文件的方法有所不同,但Extension=
通常建议使用精确的文件名。
在这里,似乎有效的是家族名称和样式。您可以获取可能fontspec
理解的家族和样式名称列表otfinfo -i
,并测试 LuaTeX 是否可以使用 查找名称luaotfload-tool --find
,或者 XeTeX 是否可以使用 查找名称fc-match
。