![通过 FontForge 创建字体包以使用自定义矢量符号](https://linux22.com/image/438466/%E9%80%9A%E8%BF%87%20FontForge%20%E5%88%9B%E5%BB%BA%E5%AD%97%E4%BD%93%E5%8C%85%E4%BB%A5%E4%BD%BF%E7%94%A8%E8%87%AA%E5%AE%9A%E4%B9%89%E7%9F%A2%E9%87%8F%E7%AC%A6%E5%8F%B7.png)
这个问题建立在我尝试通过以下方式在 Python 图中包含自定义、矢量、LaTeX 符号tikz
,到目前为止由于无法(我无法?)附加正确的字体度量元素而失败到符号。
因此,我现在尝试使用 FontForge 为我的自定义符号创建一个实际的字体,然后我希望/需要正确地打包它,以期通过 CTAN 方便地安装它们。
但我似乎无法正确地将 FontForge 产品“捆绑”到 LaTeX 包中。我尝试按照FontForge 文档, 也这些逐步解释。还有很多其他与 FontForge-LateX 相关的帖子和问题,但我找不到任何一个能够阐明从字体创建到成熟的软件包组装的完整(且干净)的过程。
我目前所做的:
从 FontForge创建
.pfb
、.asm
、.otf
、.enc
和.tfm
文件,将编码设置为 TeX,并使用一个测试符号(一个简单的圆圈)作为0
字形。编译以下测试文档,其中做很好地显示我的符号:
\documentclass{article} \pdfmapline{=mysymb mysymb <mysymb.pfb} \begin{document} \font\test=mysymb \test 0 \end{document}
创建
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
创建
mysymb.sty
以下内容:\newcommand{\mysymbol}{{\usefont{U}{mysymb}{m}{n} 0}}
创建
mysymb.map
以下内容:mysymb mysymb <mysymb.pfb
更新系统地图信息通过命令:
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.
此时,以下测试文档编译无问题,并且做显示我的符号:
\documentclass{article} \usepackage{mysymb} \begin{document} Hello World. Here's a new symbol: \mysymbol \end{document}
将以下文件与我的 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/
此时,我的 Python 脚本可以看到该包和相关的测试符号。
开放式问题: 那么,如何正确打包所有这些文件以实现稳定的 CTAN 安装?
截至 2021 年 8 月 24 日,我已经创建了必要的.ins
,并且可以从中.dtx
成功生成文件。.sty
剩下的最后一步是确定是否可以将所有内容按原样放置在 CTAN 上,以便由包管理器自动处理。
答案1
该包最近已上传至加拿大运输安全局从其Github 存储库,其中专门的Github 动作在发布新版本时自动创建与 CTAN 兼容的 ZIP 文件。