我们可以从字体文件中提取构成字符的点吗?

我们可以从字体文件中提取构成字符的点吗?

与其追踪放大字符的边界来找到一些关键点,不如如下方式制作字符,

在此处输入图片描述

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-text,pst-eucl}

\DeclareFixedFont{\ps}{U}{psy}{m}{n}{12cm}% the symbol font
\DeclareFixedFont{\PS}{T1}{ptm}{m}{n}{11cm}% the times font

\def\x{4}

\psset
{
    showpoints=true,
    linecolor=red,
    PointName=none,
    dotscale=0.5,
}

\newpsstyle{gridstyle}
{
    subgriddiv=10,
    subgridcolor=lightgray,
    subgridwidth=0.05pt,
    subgriddots=0,
    gridcolor=black,
    gridwidth=0.1pt,
    griddots=0,
    gridlabels=5pt,
    gridlabelcolor=red,
}
\begin{document}

\begin{pspicture}[showgrid](-\x,\x)(\x,-\x)
    \rput(0,0){\pscharpath[linecolor=blue,linewidth=0.1pt]{\PS R}}
    \pstGeonode
    (-3.483, 3.700){n1}
    (-0.800, 3.700){n2}
    ( 1.260, 3.700){c1}
    ( 2.340, 3.200){c2}
    ( 2.340, 1.700){n3}

    \psline(n1)(n2)
    \psbezier(n2)(c1)(c2)(n3)
\end{pspicture}

\end{document}

我想直接从字体文件中提取这样的点。

可以这样做吗?

目的是重新创建一个用于剪辑的角色,我之前在问题中讨论过如何用颜色填充由字符和图形对象界定的区域?

答案1

以下是将字体字符转换为 PGF 路径所需的步骤。它适用于基于 Unix 的系统(在 Linux 和 MacOSX 上测试过)。我不知道其他系统上是否有所需的程序。依赖项是 FontForge 和 Perl。前者相当重要,后者只是我最了解的非 TeX 语言。

  1. 使用 FontForge 将字体转换为 SVG 路径。您可以在 FontForge 中执行此操作,或者只需在字体文件上运行以下脚本:(x2svg.pe /path/to/font/font.ttf例如ttf,FontForge 读取一切,将脚本另存为x2svg.pe或者适当更改调用命令)。

    #! /usr/bin/env fontforge
    
    Open($1)
    Generate($1:t:r + ".svg")
    
  2. 运行 perl 脚本svgtopgf.pl在结果文件上。语法是svgtopgf.pl font.svg prefixwhereprefix是使结果内容唯一。这将创建一个文件,该文件定义一组路径,每个字形一个,还包含它们的边界框信息。路径和边界框根据十进制 Unicode 数字进行标记。路径命令是 PGF 基本层命令。

然后使用这些宏定义相关路径和其余的 TikZ/PGF 代码来根据需要操作它们。在TeX-SX 启动板有一个 PGF 库可以将这些字母变成节点形状。

答案2

不,不做大量工作是不行的。

在 PostScript 级别,您可以将字母转换为路径并填充或裁剪它,而不是描边(绘制)。例如,您可以这样做:

在此处输入图片描述

来自这个后记(您可以轻松地将其转换为 pstricks 调用)

  gsave                                      % Save old clip path
    /Times-Roman findfont 350 scalefont setfont
    200 200 moveto (R) true charpath    % Set up the text's path
  gsave 0.8 1.8 scale 350 180 100 0 360 arc  eofill grestore

    grestore
  showpage

但是,您想进一步找到从中提取的路径与椭圆路径之间的交点R,并找出这些点中的哪些与哪个区域相交。这很难;需要解一些方程。可能更多的是 metapost 而不是 postscript 或 tex,但我已经很久没有看过它了。

相关内容