Xelatex 的小写问题

Xelatex 的小写问题

问题

我刚刚购买了 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

相关内容