使用 fontspec 定义新字体系列

使用 fontspec 定义新字体系列

我正在尝试重现历史上的排版示例,但有些东西我不知道如何获得:诗歌以斜体形式打印,但每节诗句的首字母大写字母是向上的,并且诗句第一个单词的首字母和下一个字母之间有一些斜体校正。此外,诗句中的所有大写字母也都是向上的。

我觉得我应该定义一个新的字体系列,但尝试改编此网站上的一些代码会导致错误 ( !Extra \endgroup)。如果有人能解释如何做到这一点,我将不胜感激。

答案1

根据你的需求和改变的字符类别数量调整 Andrey Vihrov 的代码,我可以提供

\documentclass{article}

\usepackage{fontspec}

\XeTeXinterchartokenstate=1
\newXeTeXintercharclass \uppercaseclass

\makeatletter
% Assign the new class to all Latin capital letters
\@tempcnta=`\A
\loop\unless\ifnum\@tempcnta>`\Z
  \XeTeXcharclass \@tempcnta \uppercaseclass
  \advance \@tempcnta by 1
\repeat
\makeatother

% Setup font change
\XeTeXinterchartoks 0 \uppercaseclass    = {\begingroup\upshape}
\XeTeXinterchartoks \uppercaseclass 0    = {\endgroup}
\XeTeXinterchartoks 4095 \uppercaseclass = {\begingroup\upshape}
\XeTeXinterchartoks \uppercaseclass 4095 = {\endgroup}

\begin{document}

\itshape
Once Upon a Time, there was a Beautiful Princess\ldots

\end{document}

在此处输入图片描述

答案2

使用 luatex/luaotfload,您可以(在 texlive 2016 和最新的 miktex 中)构建组合字体。恕我直言,目前还没有高级接口,但除此之外,它还可以工作:

\documentclass[]{article}
\usepackage{fontspec}

\font \one = file:EBGaramond12-Italic.otf
\font \two = file:EBGaramond12-Regular.otf

\font \onetwo = "combo: 1 -> \fontid \one ;
                        2 -> \fontid \two , 0x41-0x5A;"


\begin{document}
\onetwo Some Text with Capital XYabcXY

\end{document}

在此处输入图片描述

答案3

另一种选择是更改 .otf 或 .ttf 文件,然后合并字体系列,如下所示:

\newfontfamily\myFont{my-awesome-font}[
Path            =   ./Fonts/awesome-font/,
Extension       =   .ttf,
UprightFont     =   *-Regular,
BoldFont        =   *-Bold,
ItalicFont      =   *-Italic,
BoldItalicFont  =   *-BoldItalic
]  

相关内容