通过 FontForge 创建字体包以使用自定义矢量符号

通过 FontForge 创建字体包以使用自定义矢量符号

这个问题建立在我尝试通过以下方式在 Python 图中包含自定义、矢量、LaTeX 符号tikz,到目前为止由于无法(我无法?)附加正确的字体度量元素而失败到符号。

因此,我现在尝试使用 FontForge 为我的自定义符号创建一个实际的字体,然后我希望/需要正确地打包它,以期通过 CTAN 方便地安装它们。

但我似乎无法正确地将 FontForge 产品“捆绑”到 LaTeX 包中。我尝试按照FontForge 文档, 也这些逐步解释。还有很多其他与 FontForge-LateX 相关的帖子和​​问题,但我找不到任何一个能够阐明从字体创建到成熟的软件包组装的完整(且干净)的过程。

我目前所做的:

  1. 从 FontForge创建.pfb.asm.otf.enc.tfm文件,将编码设置为 TeX,并使用一个测试符号(一个简单的圆圈)作为0字形。

  2. 编译以下测试文档,其中很好地显示我的符号:

    \documentclass{article}
    
    \pdfmapline{=mysymb mysymb <mysymb.pfb}
    
    \begin{document}
    \font\test=mysymb \test 0
    \end{document}
    
  3. 创建umysymb.fd以下内容:

    \ProvidesFile{umysymb.fd}
    \DeclareFontFamily{U}{mysymb}{}
    \DeclareFontShape{U}{mysymb}{m}{n}{<-> mysymb}{}
    

    编辑于2021.08.24:注意文件名u开头的.fd!请参阅@Marcel Krüger 的评论。这解决了以下错误消息(否则在编译下面的测试文档时会发出):

    LaTeX Font Warning: Font shape `U/mysymb/m/n' undefined
    
  4. 创建mysymb.sty以下内容:

    \newcommand{\mysymbol}{{\usefont{U}{mysymb}{m}{n} 0}}
    
  5. 创建mysymb.map以下内容:

    mysymb mysymb <mysymb.pfb
    
  6. 更新系统地图信息通过命令:

    sudo updmap-sys --enable Map=mysymb.map
    

    这解决了以下错误消息(否则在尝试编译下一点显示的测试文档时会发出此消息):

    kpathsea: Running mktexpk --mfmode / --bdpi 600 --mag 1+0/600 --dpi 600 mysymb
    mktexpk: don't know how to create bitmap font for mysymb.
    mktexpk: perhaps mysymb is missing from the map file.
    
  7. 此时,以下测试文档编译无问题,并且显示我的符号:

    \documentclass{article}
    \usepackage{mysymb}
    
    \begin{document}
    Hello World. Here's a new symbol: \mysymbol
    \end{document}
    
  8. 将以下文件与我的 TeX 树放在适当的位置。在我的例子中,我的tex_loc/usr/local/texlive/2020/texmf-dist/,但这显然取决于用户/操作系统:

    cp metsymb.tfm tex_loc/fonts/tfm/public/metsymb/
    cp metsymb.afm tex_loc/fonts/afm/public/metsymb/
    cp metsymb.pfb tex_loc/fonts/type1/public/metsymb/
    cp metsymb.otf tex_loc/fonts/opentype/public/metsymb/
    cp umetsymb.fd tex_loc/tex/latex/metsymb/
    cp metsymb.sty tex_loc/tex/latex/metsymb/
    cp metsymb.map tex_loc/fonts/map/dvips/metsymb/
    cp metsymb.enc tex_loc/fonts/enc/dvips/metsymb/
    
  9. 此时,我的 Python 脚本可以看到该包和相关的测试符号。

开放式问题: 那么,如何正确打包所有这些文件以实现稳定的 CTAN 安装?

截至 2021 年 8 月 24 日,我已经创建了必要的.ins,并且可以从中.dtx成功生成文件。.sty

剩下的最后一步是确定是否可以将所有内容按原样放置在 CTAN 上,以便由包管理器自动处理。

答案1

该包最近已上传至加拿大运输安全局从其Github 存储库,其中专门的Github 动作在发布新版本时自动创建与 CTAN 兼容的 ZIP 文件。

相关内容