使用 mathgifg.sty 无法显示字母组合“fi”

使用 mathgifg.sty 无法显示字母组合“fi”

标题说明了一切。我正在使用 erdc 包,第一个挑战是正确安装所有字体。解决了这个问题并可以获得 pdf 输出,但任何包含“fi”组合的单词在“fi”应该出现的位置都有一个空心方块。

我认为罪魁祸首是在 erdc 包使用的 mathgifg.sty 文件中:

%mathgifg.sty
\NeedsTeXFormat{LaTeX2e}
    \ProvidesClass{mathgifg}
    [2009/07/08 v0.4 Using Georgia and Franklin Gothic in LaTeX]
    \RequirePackage[T1]{fontenc}
    \RequirePackage{textcomp}
    \RequirePackage{keyval}
    \renewcommand{\sfdefault}{xifg}
    \renewcommand{\rmdefault}{xjgi}
    \DeclareSymbolFont{operators}{OT1}{zjgi}{m}{n}
    \DeclareSymbolFont{letters}{OML}{zjgi}{m}{it}
    \DeclareSymbolFont{symbols}{OMS}{zjgi}{m}{n}
    \DeclareSymbolFont{largesymbols}{OMX}{zjgi}{m}{n}
    \DeclareSymbolFont{sfletters}{OML}{zifg}{k}{n}
    \DeclareSymbolFont{bfletters}{OML}{zifg}{d}{n}
    \SetSymbolFont{letters}{bold}{OML}{zifg}{d}{n}
    \DeclareSymbolFontAlphabet{\mathsf}{sfletters}
    \DeclareSymbolFontAlphabet{\mathbf}{bfletters}
    \DeclareRobustCommand\hbar{{%
     \[email protected]%
     \[email protected]%
     \def\@tempa##1##2{{%
       \lower##1\dimen@\rlap{\kern##1\dimen@ii\the##2 0\char22}}}%
     \mathchoice\@tempa\@ne\textfont
                \@tempa\@ne\textfont
                \@tempa\defaultscriptratio\scriptfont
                \@tempa\defaultscriptscriptratio\scriptscriptfont
      h}}
    \let\s@vedhbar\hbar
    \AtBeginDocument{%
      \@ifpackageloaded{amsfonts}{\let\hbar\s@vedhbar}{}}
    \endinput

以及一个最小的代码示例:

\documentclass{erdc}

\begin{document}
find official
\end{document}

有人能建议我该怎么做才能解决这个问题吗?

更新:解决此问题的一种方法是将“i”括在括号中,以便以下最小示例产生正确的输出:

\documentclass{erdc}

\begin{document}
f{i}nd off{i}cial
\end{document}

这是一个不太理想的解决方案,因为我不希望每次文档中出现“fi”时都要进行编辑。所以我仍然对替代方案感兴趣。

答案1

我从 CTAN 下载了该包并查看了文件t1xjgi.fd,其中包含

\DeclareFontShape{T1}{xjgi}{m}{n}{
   <-> xjgim8t
}{}

好的,让我们用 查看xjgim8t.vf所需字体对应的虚拟字体vftovp。经过一长串警告(不太重要)后,我们找到了连字符表

(LIGTABLE
   (LABEL O 25)
   (LIG O 55 O 26)
   (STOP)
   (LABEL O 33)
   (LIG C i O 36)
   (LIG C l O 37)
   (STOP)
   (LABEL O 41)
   (LIG O 140 O 275)
   (STOP)
   (LABEL O 47)
   (LIG O 47 O 21)
   (STOP)
   (LABEL O 54)
   (LIG O 54 O 22)
   (STOP)
   (LABEL O 55)
   (LIG O 55 O 25)
   (LIG O 177 O 177)
   (STOP)
   (LABEL O 74)
   (LIG O 74 O 23)
   (STOP)
   (LABEL O 76)
   (LIG O 76 O 24)
   (STOP)
   (LABEL O 77)
   (LIG O 140 O 276)
   (STOP)
   (LABEL O 140)
   (LIG O 140 O 20)
   (STOP)
   (LABEL C f)
   (LIG C i O 34)
   (LIG C f O 33)
   (LIG C l O 35)
   (STOP)
   )

嗯,这表示当 TeX 发现一个f后跟另一个 时f,应使用八进制槽 33 中的字符;这在连字符表中也有条目:如果它后跟i,则应使用八进制槽 36 中的字符代替组合ffi。现在看看我们找到的字符描述:

(CHARACTER O 36
   (CHARWD R 0.908)
   (CHARHT R 0.7515)
   (MAP
      )
   )

这意味着除了空白之外什么都不会被打印。

就是这样:字体规格和映射写得很糟糕。除非您自己重新制作映射,否则您就倒霉了。

相关内容