我已将汽车品牌的 svg 图标转换为自定义字体,因为 pstricks 宏只能在文本参数中接受字母数字字符,而不能接受图像(我有 svg、eps 和 png 格式的图标)。
如何在必须使用 pdftex(在我的情况下是 LaTeX)的 pstricks 环境中使用这种自定义字体?
是否可以?
当字体安装在我的本地计算机上并且我必须使用 LuaLaTeX(而不是 pdftex)进行编译时,我的字体是这样的:
\documentclass[]{article}
\usepackage{lmodern}
\usepackage{fontspec} % requires XeLaTex or LuaLaTeX
\newfontfamily\customfont[]{untitled-font-1}
\begin{document}
{\huge \customfont a} {\huge \customfont b} {\huge \customfont c} {\huge \customfont d}
{\huge \customfont e} {\huge \customfont f} {\huge \customfont g} {\huge \customfont h}
{\huge \customfont i} {\huge \customfont \%} {\huge \customfont !}
\end{document}
我想在 pstricks 环境中使用这种汽车品牌字体 - 但我必须使用普通 LaTeX(pdftex)进行编译,但是以下代码将不起作用,因为字体需要 LuaLaTeX:
% added this packages to preamble
\usepackage{lmodern}
\usepackage{multido}
\usepackage{pst-plot,pst-text}
% body
\DeclareFixedFont{\SF}{T1}{phv}{b}{n}{2.45cm}
\pstextpath(0,-0.3ex){\pscharpath*[linestyle=none]{\SF Cars}}{\tiny \multido{}{202}{%
{\huge \customfont a} {\huge \customfont b} {\huge \customfont c} {\huge \customfont d}
{\huge \customfont e} {\huge \customfont f} {\huge \customfont g} {\huge \customfont h}
{\huge \customfont i} {\huge \customfont \%} {\huge \customfont !} }}
使用 fontawesome 图标的结果如下所示(但我想使用汽车品牌图标 :(...):
问题总结:自定义字体需要 LuaLatex,而 pstricks 需要 LaTeX。我该如何解决这个问题?
编辑:当我使用 XeLaTex 引擎时: 这是我在 overleaf.com 上使用 XeLaTeX 引擎时收到的错误消息:
即 XeLaTex 不喜欢 pstextpath 和 pscharpath 宏。希望这能有所帮助。如果有人想看看,我还可以提供不同类型的日志文件。
答案1
Puuh——不容易,但非常好:
我使用在 OS X 机器上运行的 TeX Live、TexMaker 和 FontForge。
所以我做了以下事情:
我将 .svg 文件转换为 postscript 字体(换句话说,是 .pfb 和 .afm 文件):
- 使用 FontForge 导入 svg 图像并生成字体(PS Type 1 二进制 - 具有文件扩展名
.pfb
)。汽车图标映射到 0-9A-Za-e。
获取 LaTeX 以在本地使用 car-font:
创建了一个目录 - 我将
testfont
和文件放入cars___.afm
其中cars___.pfb
。运行 commandoline 工具并将工作目录设置为 testfont:
cd testfont
。使用 TEX 实用程序生成
.map
文件和.pl
文件(人类可读):afm2pl -p texnansi cars___.afm cars8y.pl
然后我使用该
.pl
文件来获取.tfm
文件(紧凑的二进制文件):pltotf cars8y
制作了
.fd
我调用的文件ly1mycarfontfam.fd
,并将其保存到 testfont 文件夹中,内容如下:\ProvidesFile{ly1mycarfontfam.fd} \DeclareFontFamily{LY1}{mycarfontfam}{} \DeclareFontShape{LY1}{mycarfontfam}{m}{n}{<-> cars8y }{}
testfont.tex
文件中的内容如下:\documentclass{article} \pagestyle{empty} % Car font \usepackage{texnansi} % I cannot use the \pdfmacro when I use LaTeX -> dvips -> ps2pdf %\pdfmapfile{=cars8y.map} \newcommand{\fancyfont}% {\fontfamily{mycarfontfam}\selectfont} % Pstricks \usepackage{pst-plot} \usepackage{pst-text} \begin{document} \DeclareFixedFont{\SF}{T1}{phv}{b}{n}{3.5cm} \hspace*{-1.5cm}\pstextpath(0,-0.5ex){\pscharpath*[linestyle=none]{\SF Cars}}{ \scriptsize \multido{}{120}{\fancyfont 345678HIJLMNRSXYZ} } \end{document}
结果:
不好。这是因为我无法在 dvips 模式下使用 \pdfmapfile 宏。因此,当您编译完 tex 代码后,您还会
testfont.dvi
在目录中获得一个文件,并且每次提供 map 和 dvi 文件的名称时,您都必须使用以下命令行(这将更新文件testfont.ps
):dvips -u +cars8y.map testfont.dvi
双击testfont.ps
文件夹中的文件,将生成一份格式与上述结果相同的副本,或者使用以下命令从更新的文件中.pdf
更新该文件:.pdf
.ps
ps2pdfwr testfont.ps testfont.pdf
带有一些虚拟文本,是不是很好?