[Letters=Uppercase]
通过使用 fontspec 的 setmainfont 启用 OpenType 功能(例如区分大小写的形式( )、垂直提升的括号、连字符或圆括号),我失去了由 microtype 完成的单词断开连字符字形的突出部分:
\setmainfont[Letters=Uppercase,StylisticSet={02,04}]{ESAllianz}
\microtypesetup{activate={true,nocompatibility},final,babel=true,factor=1000,stretch=20,shrink=20}
因为我使用 LuaLaTex,我发现microtype 的文档第 19 页上的以下内容:
然而,LuaTeX 和 XeTeX 的情况有所不同:默认继承设置仅包含可以安全假设存在于任何字体中的字形;但由于 OpenType 字体可能包含更多不同脚本(语言)的字形,因此很可能需要特定于字体的设置,这些设置应在字体的配置文件中指定(参见下一部分)。
实际上,标准连字符已被区分大小写的连字符所取代(但在 Unicode 中仍然是相同的字符U+002D
:)。
我尝试使用LaTeX 命令在\DeclareCharacterInheritance{family={ES Allianz}}{\symbol{"002D}=-}
哪里\symbol{"002D}
打印连字符来继承非大写连字符的突起设置-
。
期望结果:我的文本中区分大小写的形式,并且仍然正确地突出用于单词断开的连字符。
我也尝试过\SetProtrusion{{\symbol{"002D} ={500,500}}}
,但是没有用。
看图片来了解区别:
↑ 不区分大小写,但连字符正确突出
↑ 区分大小写,但没有连字符的突出部分
我需要做什么?我对 microtype 的配置文件(在 macOS、MacTeX 2023 上)没有经验。提前谢谢!
进步
我找到了正确的字形标识符,使用生成给定字体的所有可能字形的表格:
\documentclass[landscape]{article}
\usepackage{geometry}
\usepackage{fontspec}
\setmainfont{ES Allianz}
\usepackage{multicol}
\setlength{\columnseprule}{0.4pt}
\usepackage{multido}
\setlength{\parindent}{0pt}
\begin{document}
\begin{multicols}{10}
\multido{\i=0+1}{"100000}{
\iffontchar\font\i
\makebox[3em][l]{\i}%
\symbol{\i}\endgraf
\fi
}
\end{multicols}
\end{document}
(增加十六进制数以扩大字形数量)
并且我可以使用\symbol{983167}
(983167
打印字形表中的标识符)打印正确的区分大小写的连字符。
现在我尝试使用\DeclareCharacterInheritance
以下内容,其中标识符45
是常规连字符:
\DeclareCharacterInheritance{encoding={OT1,T1,TS1},family={*}}{\symbol{45} = \symbol{983167}}
不幸的是,这不起作用,我不知道为什么。我尝试将其放在序言中的不同位置,但不起作用。
我也尝试过:
# - \SetProtrusion{encoding={OT1,T1,TS1},family={*},series={*},size={*}}{\symbol{983167} ={1000,1000},} %over-exaggerated to make sure it is visible
也不起作用。它确实适用于常规字形,以其真实的 Unicode Char 值给出,例如文字e
。