使用 lualatex 和 fontspec 与特殊的 Garamond 字体。
我使用的字体有两个版本的撇号:一个是普通高号撇号,另一个是低号小号撇号。
使用小型大写字母功能时会出现问题,因为默认情况下,它会用小型大写字母加载低撇号,而这在某些情况下是不正确的。当它跟在姓名的大写字母后面时,例如在许多意大利姓氏中,就会产生一些问题。
这里有一张图,左边是使用小型大写字母加载的低撇号(1、3):1 是错误的结果,但 3 是正确的。2 是正确的,4 是错误的。当小型大写字母是自动加载时,问题会更加严重(例如在以下软件包中)Biblatex 哲学-详细, 这是我真正的问题)也可以使用解决方案D'O\textsc{nofrio}- 当有可能时 - 这并不好,因为 latex 丢失了哦和\textsc{n}。
有没有办法根据前一个字母改变撇号的类型?或者还有其他方法可以解决这个问题?
先感谢您
答案1
我没有字体来实际检查这种方法,因此我作为替代所做的是用粗体红色打印应输出为的撇号\textup{'}
,用黑色打印的撇号将输出为\scshape'
。
我使用listofitems
来重新定义\textsc
。在这里我搜索所有大写字母后跟撇号的组合。虽然参数的其余部分都输出在 中\scshape
,包括跟在小写字母后面的撇号,但我在这里将跟在大写字母后面的撇号输出为\textcolor{red}{\bfseries'}
。此行应仅替换为\textup{'}
以实现 OP 所寻求的期望行为。
\documentclass{article}
\usepackage{listofitems,xcolor}
\let\svtextsc\textsc
\renewcommand\textsc[1]{%
\setsepchar{A'||B'||C'||D'||E'||F'||G'||H'||I'||J'||K'||L'||M'||%
N'||O'||P'||Q'||R'||S'||T'||U'||V'||W'||X'||Y'||Z'}%
\greadlist\scarg{#1}%
\bgroup%
\scshape%
\foreachitem\z\in\scarg[]{%
\z%
\ifnum\zcnt<\listlen\scarg[]\relax
\expandafter\expandafter\expandafter%
\processapostrophe\scargsep[\zcnt]%
\fi%
}%
\egroup%
}
\def\processapostrophe#1#2{#1%
\textcolor{red}{\bfseries'}% replace this line with \textup{'}
}
\begin{document}
\textsc{D'Onofrio Dell'Omo}
\end{document}
答案2
您可以有条件地替换字形。主要问题是找出正确的名称。在 EBGaramond 中,我发现了一个名为 sinf 的变体:
\documentclass[12pt]{article}
\usepackage{fontspec}
\directlua{
fonts.handlers.otf.addfeature{
name = "apo-sc",
type = "chainsubstitution",
lookups = {
{
type = "substitution",
data = {
["’"] = "quotesingle.sinf",
},
},
},
data = {
rules = {
{
before = { { "A", "B", "C", "D"} },
current = { { "’" } },
lookups = { 1 },
},
},
},
}
}
\setmainfont{EBGaramond}[SmallCapsFeatures={RawFeature=+apo-sc}]
\begin{document}
D'ono'frio A' B' C'
\textsc{D'ono'frio A' B' C' E'}
\end{document}