TeX 搜索为我找到的其他问题部分回答了这个问题,但并不全面。
我是一名作家,不是数学家或学者。我写小说。因此,我的需求只是 TeX 所能提供的一部分。我已经掌握了 pdfLaTeX 和 microtype 所需的知识。我可以创建和编辑字体,获得了多种商业字体(如 Adobe Garamond Pro)的许可,并使用 Acrobat Pro 对生成的 PDF 进行后期处理。
到目前为止,我将 OpenType 字体分解为使用 LY1 编码的 Type 1,以便 pdfLaTeX 能够理解它们。不同的 OpenType 样式集被分解为不同的字体,每次我需要特定样式集时,我都会单独调用这些字体。到目前为止一切顺利。请理解,我不会使用任何格式的任何 TeX 字体。
现在我尝试使用 LuaLaTeX 直接读取 OpenType 字体。microtype 的无效功能不会成为问题,因为 LuaLaTeX 中的有效功能足以满足我的需求。我已经让 LuaLaTeX 处理一个简单的示例文档,该文档使用 OpenType 字体但没有任何 OpenType 功能。
如果我能弄清楚如何选择 OpenType 功能,那真是太糟糕了。我查看了可用的文档和这里的在线示例。我看到的是一些代码示例,它们通过通用名称而不是通过 4 个字符的样式集指定来选择功能。示例:
Numbers={OldStyle,Proportional},
但大多数样式集没有通用名称。那么我该怎么办呢?
我正在寻找类似的东西(伪代码):
在序言中:
\newcommand\useThisStyleSet[3]{opentype font name}{4-character style code}{string to be styled}
\newcommand\myStyle[1]{\useThisStyleSet{Adobe Garamond Pro}{c2sc}{$1}}
\newcommand\myOtherStyle[1]{\useThisStyleSet{Adobe Caslon Pro}{ss03}{$1}}
\newcommand\myNextStyle[1]{\useThisStyleSet{Source Sans Pro}{loca}{$1}}
在文档正文中:
\myStyle{The quality} of mercy \myOtherStyle{is not} \myNextStyle{strained.}
答案1
以下是我开始使用时为自己做的总结的更新版本fontspec
。
| tag | fontspec option | comments |
|------+--------------------------------------+-----------------------------------------------------|
| abvm | Diacritics=[No]AboveBase | default |
| afrc | Fractions=Alternate | |
| anum | Numbers=Arabic | luatex only: see manual §10.3 |
| blvm | Diacritics=[No]BelowBase | default |
| c2pc | Letters=UppercasePetiteCaps | |
| c2sc | Letters=UppercaseSmallCaps | |
| calt | Contextuals=[No]Alternate | default in xetex, not in luatex |
| case | Letters=Uppercase | |
| clig | Ligatures=[No]Contextual | default |
| cpsp | Kerning=Uppercase | |
| cswh | Contextuals=[No]Swash | |
| cv01 | CharacterVariant=1 | see manual §10.8 |
| dlig | Ligatures=Rare/Discretionary | |
| dnom | VerticalPosition=Denominator | |
| expt | CJKShape=Expert | |
| falt | Contextuals=[No]LineFinal | |
| fina | Contextuals=[No]WordFinal | has sometimes worked in xetex |
| frac | Fractions=On[/Off] | |
| fwid | CharacterWidth=Full | for Asian fonts |
| halt | CharacterWidth=AlternateHalf | |
| hist | Style=Historic | |
| hkna | Style=HorizontalKana | |
| hlig | Ligatures=Historic | |
| hwid | CharacterWidth=Half | |
| init | Contextuals=[No]WordInitial | has sometimes worked in xetex |
| ital | Style=Italic | |
| jp78 | CJKShape=JIS1978 | |
| jp83 | CJKShape=JIS1983 | |
| jp90 | CJKShape=JIS1990 | |
| kern | Kerning=On[/Off] | default |
| liga | Ligatures=[No]Common | default |
| lnum | Numbers=Uppercase/Lining | |
| mark | Diacritics=[No]MarkToBase | default |
| medi | Contextuals=[No]Inner | has sometimes worked in xetex |
| mkmk | Diacritics=[No]MarkToMark | default |
| nalt | Annotation=#… | see manual §10.14 |
| nlck | CJKShape=NLC | |
| numr | VerticalPosition=Numerator | |
| onum | Numbers=Lowercase/OldStyle | |
| ordn | VerticalPosition=Ordinal | |
| palt | CharacterWidth=AlternateProportional | |
| pcap | Letters=PetiteCaps | |
| pnum | Numbers=Proportional | |
| pwid | CharacterWidth=Proportional | |
| qwid | CharacterWidth=Quarter | |
| rand | Letters=Random | |
| rlig | Ligatures=[No]Required | default |
| ruby | Style=Ruby | |
| salt | Style=Alternate or Alternate=… | see manual §10.9 |
| sinf | VerticalPosition=ScientificInferior | |
| size | SizeFeatures={…} and OpticalSize=… | default for some fonts; see manual §§7.6, 8.6, 12.4 |
| smcp | Letters=SmallCaps | |
| smpl | CJKShape=Simplified | |
| ss01 | StylisticSet=1 | |
| subs | VerticalPosition=Inferior | |
| sups | VerticalPosition=Superior | see also realscripts package |
| swsh | Style=Swash | |
| titl | Style=TitlingCaps | |
| tnum | Numbers=Monospaced | |
| trad | CJKShape=Traditional | |
| twid | CharacterWidth=Third | |
| unic | Letters=Unicase | |
| vkna | Style=VerticalKana | |
| zero | Numbers=[No]SlashedZero | |
(忽略颜色,这是该网站以我的 ASCII 表为.tex
来源。)
请注意,默认值可能因脚本而异;请参阅 Khaled Hosny 的评论article.gmane.org/gmane.comp.tex.xetex/15187。
根据手册§28.0.12 来判断,还有垂直字距调整选项,大概会在§10.17 中解释。
更新
自 2.5c 版(2017/01/20)起,该fontspec
手册还包含一个表格;在 2.6g 版(2017/11/09)中,它是表 2,第 35 页。
答案2
编辑:根据上面接受的答案、以下答案和评论,我已经能够详细解决我的问题。谢谢大家!这是一个 MWE,展示了它的工作原理。
% !TeX program = LuaLaTeX
% !TEX encoding = UTF-8
\documentclass{article}
\usepackage{fontspec} % required with LuaLaTeX
\setmainfont[
Ligatures=TeX,
Numbers=Proportional, % but cannot use Monospaced as below
]{Adobe Garamond Pro}
\newfontfamily{\myCustom}[
Ligatures=TeX,
]{RAcustom} % my own created opentype font
\newcommand\myFraktur{\addfontfeature{StylisticSet=1}} % only for \myCustom
\newcommand\myUncial{\addfontfeature{StylisticSet=2}} % only for \myCustom
\newcommand\myEmoticons{\addfontfeature{StylisticSet=3}} % only for \myCustom
\begin{document}
Hello {\myCustom world.} Here: {\myCustom\myEmoticons ^^^^46c7}
\end{document}
以上代码给出了预期的输出:AGaramondPro 中的“Hello”,RAcustom 中的“world.”,AGaramondPro 中的“Here:”,RAcustom opentype feature ss03 中的 Unicode 46c7(通常是亚洲汉字),这是一个笑脸表情符号。事实:汉字的意思是“笑脸”。我不想使用 BMP 以外的全部 Unicode 范围。
谢谢你,谢谢你,谢谢你!
答案3
该fontspec
软件包可轻松满足您的大部分需求。\addfontfeatures
很少需要使用。
拉丁现代罗马字体确实不支持该+scmp
功能,但您可以轻松定义小写字体。不要使用LM Roman 12
,而是使用通用的家族名称。
\documentclass{article}
\usepackage{fontspec} % required with LuaLaTeX
\setmainfont[
Numbers={Lining,Proportional},
SmallCapsFont=Latin Modern Roman Caps,
]{Latin Modern Roman}
\newfontfamily{\oldstyle}[
Numbers={OldStyle,Monospaced},
SmallCapsFont=Latin Modern Roman Caps,
]{Latin Modern Roman}
\newfontfamily{\test}[
Numbers={OldStyle,Proportional},
SmallCapsFont=Latin Modern Roman Caps,
]{Latin Modern Roman}
\begin{document}
0123456789 {\oldstyle 0123456789} 0123456789
0123456789 Latin Modern Roman \emph{does} have small caps, so
\textsc{This Text shows them}
{\oldstyle 0123456789 Latin Modern Roman \emph{does} have small caps, so
\textsc{This Text shows them}}
{\test 0123456789 Latin Modern Roman \emph{does} have small caps, so
\textsc{This Text shows them}}
\end{document}