我可以将可变宽度字体转换为固定宽度字体吗?

我可以将可变宽度字体转换为固定宽度字体吗?

我找到了一款免费的古代打字机字体,我想在项目中使用它,但制作它的人似乎描摹了一些扫描的轮廓并将它们倒入可变宽度的 TrueType 字体中。这不太符合打字风格,我宁愿修复它。我可以从 XeLaTeX/fontspec/microtype 内部做到这一点吗?还是我必须学习如何使用像 fontforge 这样的功能齐全的字体编辑器?

这个项目是一本书,其中各个章节有不同的“情绪”和叙事视角,我试图在所用的字体中反映它们。老式打字机字体是 20 世纪 50 年代两个机构之间信件往来的字体。所以,我想我需要连字符。

答案1

使用 LuaTeX 时可以使用luaotfload.patch_font回调。在这里,我只是遍历整个字体以找到最宽的字形(可能是 emdash 左右),然后再遍历字体并将每个字符的宽度设置为最大值。

在寻找最大值时,可能最好只遍历字母范围而不是整个字体,但是我没有你的字体并且我不知道你的意图。

\documentclass{article}
\usepackage{fontspec}
\directlua{
local function monospace(tfmdata)
    local max = 0
    for _,char in pairs(tfmdata.characters) do
        max = max < char.width and char.width or max
    end
    print(max)
    for _,char in pairs(tfmdata.characters) do
        char.width = max
    end
end

luatexbase.add_to_callback("luaotfload.patch_font", monospace, "monospace")
}
\setmainfont{lmroman10-regular.otf}
\begin{document}
Hello
\end{document}

在此处输入图片描述

相关内容