在 pstricks 环境中使用自定义字体

在 pstricks 环境中使用自定义字体

我已将汽车品牌的 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 文件):

  1. 使用 FontForge 导入 svg 图像并生成字体(PS Type 1 二进制 - 具有文件扩展名.pfb)。汽车图标映射到 0-9A-Za-e。

FontForge

获取 LaTeX 以在本地使用 car-font:

  1. 创建了一个目录 - 我将testfont和文件放入cars___.afm其中cars___.pfb

  2. 运行 commandoline 工具并将工作目录设置为 testfont: cd testfont

  3. 使用 TEX 实用程序生成.map文件和.pl文件(人类可读):

    afm2pl -p texnansi cars___.afm cars8y.pl
    
  4. 然后我使用该.pl文件来获取.tfm文件(紧凑的二进制文件):

    pltotf cars8y
    
  5. 制作了.fd我调用的文件ly1mycarfontfam.fd,并将其保存到 testfont 文件夹中,内容如下:

    \ProvidesFile{ly1mycarfontfam.fd}
    \DeclareFontFamily{LY1}{mycarfontfam}{} 
    \DeclareFontShape{LY1}{mycarfontfam}{m}{n}{<-> cars8y }{}
    
  6. 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}
    
  7. 结果:

dvips 之前的结果

  1. 不好。这是因为我无法在 dvips 模式下使用 \pdfmapfile 宏。因此,当您编译完 tex 代码后,您还会testfont.dvi在目录中获得一个文件,并且每次提供 map 和 dvi 文件的名称时,您都必须使用以下命令行(这将更新文件testfont.ps):

    dvips -u +cars8y.map testfont.dvi  
    

双击testfont.ps文件夹中的文件,将生成一份格式与上述结果相同的副本,或者使用以下命令从更新的文件中.pdf更新该文件:.pdf.psps2pdfwr testfont.ps testfont.pdf

带有一些虚拟文本,是不是很好?

甜心汽车

相关内容