在gnuplot中使用自定义Unicode字体的斜体和粗体拉丁字母和希腊字母,产生(e)ps或pdf

时间:2019-05-19 01:44:39

标签: utf-8 fonts gnuplot postscript

我想创建带有增强符号,斜体或粗体拉丁字符,有时(常规)希腊字符的附言或pdf图形。一般如何做?

比方说我downloaded CMU Sans Serif,这是一种字体,其中包含我要使用的所有奇特字符的字形。我用online tool将它们转换为pfa,然后将文件复制到工作目录的路径。

期望

假设我想在某处产生以下符号。 The notations using a text editor renders properly


我尝试过的事情:原创

我创建一个使用utf-8文件(无BOM)编码的gnuplot脚本,其中包含内容

set term postscript eps enhanced "CMUSansSerif" 15 fontfile add 'CMUSansSerif.pfa' fontfile add 'CMUSansSerif-Oblique.pfa' fontfile add 'CMUSansSerif-Bold.pfa'
set encoding utf8
set o "print.eps"

p x t "Label: {/CMUSansSerif-Bold important }{/CMUSansSerif-Oblique note}: ∫⟨α₂ + β²⟩ = äßű"
set o

,并使用最新的gnuplot(版本5.2.6)执行。

我得到了什么

我使用矢量图形编辑器打开eps文件,相关部分如下所示:

the legend of the function does not contain the Greek letters


我也尝试过的

根据Ethan's answer,我在术语选项中添加了adobeglyphnames。它至少使字母可用,但其他Unicode符号仍然不可用。结果是: Result with adobeglyphnames


问题

出了什么问题?我该如何产生所需的输出?

如此之多,可能会出错:字体不适合此任务吗?我下载了错误的版本吗? pfa转换器做得不好吗?我是否错误地包含了字体文件? set encoding出问题了吗?我是否使用错误的矢量图形编辑器?我安装了错误的字体并且矢量图形编辑器尝试使用它们吗?

2 个答案:

答案 0 :(得分:2)

恐怕答案是,一般而言,PostScript是错误的工具。如果您完全有可能使用PDF输出,则建议您这样做。甚至有可能通过标准工具(例如pdf2ps)将生成的PDF文件转换为PostScript文件。如果非ascii字符仅限于希腊语和其他相对常见的符号,那么这可能会起作用,但是我不知道这些标准工具涵盖了多少完整的unicode表。

如果您真的需要直接从gnuplot生成带有其他Unicode字符的PostScript,则可以在gnuplot分发文件中找到完整的说明和示例字符编码表:

.../term/PostScript/unicode_maps.README
.../term/PostScript/unicode_big.map
.../term/PostScript/unicode_small.map

我不熟悉您使用的在线工具字体转换,但是很可能失败了,因为它没有或至少没有使用合适的字符编码表来进行所需的转换。

===

另一个想法。 * .pfa字体可以通过两种方式对Unicode字符进行编码,这些字符足够通用以具有Adobe分配的名称以用于PostScript。 (1)对于Unicode代码点,它可以使用诸如uni0439之类的通用名称。 (2)它可以使用以下列表中的Adobe特定名称: agl-aglfn glyph list

从gnuplot中选择PostScript输出时,您可以告诉它所提供的字体使用了这两种约定中的哪一种。默认值为“ noadobeglyphnames”。

set term postscript {no}adobeglyphnames

==

(使用“设置术语pdfcairo”的方法)

不幸的是,字体处理是特定于系统的,因此我无法告诉您如何在所有目标计算机上安装或配置字体。我将向您展示一个在Linux桌面上工作的过程,该桌面使用fontconfig实用程序进行系统字体处理。

  1. 创建目录 / home / share / fonts / CMUSans
  2. 将此目录添加到文件 /etc/fonts/local.conf
  3. 中的搜索列表中
  4. 将* .ttf文件从您在原始查询中链接的CMU Sans Serif zip存档复制到此目录中。系统fontconfig系统工具现在应该能够找到这些字体。通过检查,他们自我报告为“ CMU Sans Serif”
  5. gnuplot中的
  6. (已通过5.2.6版测试)
    set term pdfcairo font "CMU Sans Serif,15" set output 'enhanced_utf8.pdf' load 'enhanced_utf8.dem'

  7. 使用以下命令将输出pdf文件转换为PostScript

    pdf2ps enhanced_utf8.pdf enhanced_utf8.ps

结果的屏幕截图如下所示 enter image description here

答案 1 :(得分:1)

CMU Sans Serif似乎不包含您要的UTF-8字符。使用诸如Birdfont之类的字体编辑器检查字体。尽管网页上显示了您要使用的符号,但字体本身不包含这些符号。但是,您的浏览器可能会显示符号,但它们只是其他字体的后备表示形式。