更改特定字体的逗号外观

更改特定字体的逗号外观

我正在使用这个kerkis字体,我非常喜欢它除了表示逗号。(逗号的卷边非常小,如果不仔细观察,它们看起来就像句号。)

有没有办法改变此字体中逗号的外观?

逗号

\documentclass[11pt]{article}
\usepackage{kmath, kerkis}
\begin{document}
It's hard to tell apart commas, and periods.
\end{document}

答案1

除了在宏级别更改逗号(可能带来危险结果)外,您还可以使用虚拟字体。虽然这对 TeX 来说是透明的,因此非常可靠,但不幸的是它也复杂得多。步骤如下:

  1. 查看字体定义文件ot1mak.fd(其位置记录在log文件中),看看我们实际上想要修改哪种字体。在那里,我们发现了以下行:

    \DeclareFontShape{OT1}{mak}{m}{n}{<-> s * [0.90] k8a}{}
    

    [从现在开始,我假设您位于 TeX 文件的当前目录中。]

  2. 将(已存在的)虚拟字体(位于 中<TEXMF>/fonts/vf/public/kerkis/)转换为人类可读的形式。(实际上,您甚至不需要知道文件在哪里vf,因为vftovp应该能够自行找到它。)

    vftovp k8a > k8a.vpl
    
  3. 我们打开这个新文件k8a.vpl并搜索逗号的定义,找到了以下几行:

    (CHARACTER O 54
       (CHARWD R 0.32)
       (CHARHT R 0.114)
       (CHARDP R 0.111)
       (MAP
          (SETCHAR O 54)
          )
       )
    

    O表示数字是八进制。)

  4. 与其使用不同字体的逗号,不如从相同字体中取出撇号,向下移动,这样外观才能匹配。撇号位于插槽中O 47,因此我们将上面的行替换(SETCHAR O 54)为:(MOVEDOWN R .6) (SETCHAR O 47)。(R代表“实数”,因此字形将向下移动 0.6 个设计单位,这似乎大致正确。)

  5. 由于分号的下半部分与逗号形状相同,因此它不再与下移的撇号匹配。因此,我们可以用撇号(向下移动)和句号(向上移动)额外构造分号:

    (CHARACTER O 73
       (CHARWD R 0.32)
       (CHARHT R 0.4865)
       (CHARDP R 0.111)
       (MAP
          (PUSH) (MOVEUP R .37) (SETCHAR O 56) (POP)
          (MOVEDOWN R .6) (SETCHAR O 47)
          )
       )
    
  6. 将文件翻译vplvf并附带tfm文件:

    vptovf k8a
    

对于其他字体形状,您可以相应地进行操作,例如斜体形状(ki8a):

vftovp ki8a > ki8a.vpl

编辑逗号和分号,例如:

(CHARACTER O 54
   (CHARWD R 0.3)
   (CHARHT R 0.116)
   (CHARDP R 0.1125)
   (MAP
      (MOVELEFT R .12) (MOVEDOWN R .6) (SETCHAR O 47)
      )
   )

 ....

(CHARACTER O 73
   (CHARWD R 0.3)
   (CHARHT R 0.4925)
   (CHARDP R 0.1125)
   (MAP
      (PUSH) (MOVERIGHT R .06) (MOVEUP R .37) (SETCHAR O 56) (POP)
      (MOVELEFT R .12) (MOVEDOWN R .6) (SETCHAR O 47)
      )
   )

最后:

vptovf ki8a

如果新创建的tfmvf文件位于工作目录中,它们将在分发的文件之前被拾取kerkis。瞧,撇号逗号和分号:

逗号+分号

不幸的是,您必须对所有编码中使用的每种字体(斜体、小型大写字母等)重复此过程。

答案2

这只是一个草案:

\documentclass[11pt]{article}
\usepackage{kmath, kerkis}

\font\commaf=cmr11
\begin{document}
It's hard to tell apart commas, and periods.

It's hard to tell apart commas{\commaf,} and periods.

If there will be no math:

\def\cmcomma{{\commaf,}}
\let\commasign\cmcomma
\catcode`\,=13
%\def,{\commasign}
\def,{\cmcomma}


It's hard to tell apart commas, and periods.

But beware: $(a,b)$
\end{document}

在此处输入图片描述

答案3

这是另一个解决方案,它需要 luatex,使用 OpenType 字体功能文件,令人惊讶的是,它也适用于 Type1 字体。将以下内容保存为kerkis.fea

languagesystem DFLT dflt;
languagesystem latn dflt;

lookup SHIFT_N { # shift the apostrophe down and add some space on the right
  pos quoteright <0 -600 60 0> ;
} SHIFT_N ;

lookup SHIFT_I { # additionally shift a bit to the left
  pos quoteright <-120 -600 -60 0> ;
} SHIFT_I ;

lookup REPLACE {
  sub comma by quoteright ;
} REPLACE ;

feature comn {
  lookup REPLACE ;
  lookup SHIFT_N ;
} comn ;

feature comi {
  lookup REPLACE ;
  lookup SHIFT_I ;
} comi ;

您的文档(要用 进行编译lualatex)可能如下所示:

\documentclass[11pt]{article}
\usepackage{kmath}
\usepackage[no-math]{fontspec}
\setmainfont[
        Ligatures=TeX,
        FeatureFile=kerkis.fea,
        % with Type1 fonts, fontspec doesn't seem to be able to 
        % automatically detect the other shapes, so we specify them:
        ItalicFont=Kerkis-Italic.pfb,
        SmallCapsFont=Kerkis-SmallCaps.pfb,
        BoldFont=Kerkis-Bold.pfb,
        BoldItalicFont=Kerkis-BoldItalic.pfb,
        % add the comma replacement feature 
        UprightFeatures={RawFeature=+comn},
        ItalicFeatures={RawFeature=+comi}]
        {Kerkis.pfb}
\begin{document}
It's hard to tell apart commas, and; periods.

\textit{It's hard to tell apart commas, and; periods.}
\end{document}

逗号与 luatex

请注意,您不能在文档中使用 quoteright 字符 ( ),因为它也会向下移动,但幸运的是,Ligatures=TeX您可以简单地用书写'来代替。

与使用虚拟字体的解决方案相比,似乎没有办法改变分号。

还有另外一个警告:由于 luatex 并不是 pdftex 最初宣布的完全替代品,因此您的文档中的其他一些内容可能会出现问题。

相关内容