使用特殊字体的小型大写字母撇号高度

使用特殊字体的小型大写字母撇号高度

使用 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}

在此处输入图片描述

相关内容