GFS Didot 的 Type1 斜体词首 theta (θ→ϑ) 缺失

GFS Didot 的 Type1 斜体词首 theta (θ→ϑ) 缺失

更新 2

我联系了维护人员,询问这个问题,他们很快就修复了。应该很快就会在 CTAN 中出现。

原问题 0

GFS Didot 的 Type1 版本具有一项功能,可以西塔当 (θ) 出现在单词开头时,会将其转换为脚本变体 (ϑ)。这不适用于正常粗细斜体。默认情况下,udidot使用另一种字体 GFS Olga 来表示正常斜体,该字体总是使用看起来完全不同的脚本变体。

A类似问题使用一种对所有其他风格都很有效的解决方法,但却m/it什么都没有出现,这是非常可疑的。

来自同一包的 OpenType 版本可以显示所有粗细和形状的两个版本,因此问题是:

  • 为什么 OpenType 版本不能自动执行此操作?(在 MWE 脚本中版本是硬编码的)

  • 为什么 Type1 版本用于确定词首形式的机制(似乎是硬编码到字体本身中)不适用于m/it?字体本身是否格式错误?(是否可以合理修复?)


LuaLaTeX / OpenType:

\documentclass{article}
\usepackage{fontspec}
\setmainfont    [ItalicFont={GFS Didot Italic},
                BoldFont={GFS Didot Bold},
                BoldItalicFont={GFS Didot BoldItalic},
                ]{GFS Didot}
\usepackage{polyglossia}
\setmainlanguage{greek}

\begin{document}

{ϑθ} \textit{ϑθ} \textbf{ϑθ} \textbf{\textit{ϑθ}}

\end{document}

pdfLaTeX / 类型1:

\documentclass{article}

\usepackage[T1,LGR]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[greek]{babel}

\usepackage{microtype}
\DisableLigatures{}

\DeclareFontFamily{LGR}{udidot-no-olga}{}
\DeclareFontShape{LGR}{udidot-no-olga}{m}{n}  {<-> gdidotrg6a}{}
\DeclareFontShape{LGR}{udidot-no-olga}{m}{it} {<-> gdidoti6a}{}
\DeclareFontShape{LGR}{udidot-no-olga}{bx}{n} {<-> gdidotb6a}{}
\DeclareFontShape{LGR}{udidot-no-olga}{bx}{it}{<-> gdidotbi6a}{}

\catcode`\^^L=11

\renewcommand*{\rmdefault}{udidot-no-olga}

\begin{document}

               {\texttheta\texttheta}
        \textit{\texttheta\texttheta}
        \textbf{\texttheta\texttheta}
\textit{\textbf{\texttheta\texttheta}}

{θθ} \textit{θθ} \textbf{θθ} \textit{\textbf{θθ}}

{^^L^^L} \textit{^^L^^L} \textbf{^^L^^L} \textit{\textbf{^^L^^L}}

{\fontencoding{T1}\selectfont fi ffi fl ffl}

\end{document}

关于数学字体的更新 1

为了避免连字问题导致出现错误或无符号,我使用了数学字体中的原始字形数字,但这些数字均未显示脚本的 theta m/it。这是否意味着字体中缺少该字形?

\documentclass{article}
\usepackage[LGR]{fontenc}

\DeclareFontFamily{LGR}{udidot-no-olga}{}
\DeclareFontShape {LGR}{udidot-no-olga}{m}{n}  {<-> gdidotrg6a}{}
\DeclareFontShape {LGR}{udidot-no-olga}{m}{it} {<-> gdidoti6a}{}
\DeclareFontShape {LGR}{udidot-no-olga}{b}{n}  {<-> gdidotb6a}{}
\DeclareFontShape {LGR}{udidot-no-olga}{b}{it} {<-> gdidotbi6a}{}

\DeclareMathVersion{upright}
\DeclareMathVersion{boldupright}

\DeclareSymbolFont{greekmath}             {LGR}{udidot-no-olga}{m}{it}
\SetSymbolFont    {greekmath}{bold}       {LGR}{udidot-no-olga}{b}{it}
\SetSymbolFont    {greekmath}{upright}    {LGR}{udidot-no-olga}{m}{n}
\SetSymbolFont    {greekmath}{boldupright}{LGR}{udidot-no-olga}{b}{n}

\DeclareMathSymbol{\theta}{\mathord}{greekmath}{"6A}
\DeclareMathSymbol{\vartheta}{\mathord}{greekmath}{"0C}

\begin{document}
    \mathversion{upright}$$ \theta - \vartheta $$
     \mathversion{normal}$$ \theta - \vartheta $$
\mathversion{boldupright}$$ \theta - \vartheta $$
       \mathversion{bold}$$ \theta - \vartheta $$
\end{document}

答案1

首先,GFS Didot 的 OpenType 版本没有init(词首上下文)功能,因此不支持获取单词开头的变体 theta。

对于 Type 1 字体来说,关键在于 TFM 文件。

tftopl gdidotrg6a.tfm

我们得到

(BOUNDARYCHAR O 1)
(LIGTABLE
   (LABEL BOUNDARYCHAR)
   (LIG C j O 14)
   (STOP)
   (LABEL O 0)
   (/LIG C j O 14)
   (LIG O 55 O 177)
   (STOP)

这意味着字体具有边界字符集和边界字符和j(即标准 theta)之间的连字,该连字用八进制 14 处的变体 theta 替换它。此外,emdash(在插槽 0 处)与标准 theta 具有连字,它会打印 emdash,然后打印变体 theta。

斜体字体文件gdidoti6a.tfm具有边界字符集,但没有直立字体那样的连字符。一个错误。

相关内容