更新 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
具有边界字符集,但没有直立字体那样的连字符。一个错误。