在 gnuplot 中使用自定义 unicode 字体生成 (e)ps 或 pdf 的斜体和粗体拉丁文和希腊字母
Italic and bold Latin, and Greek letters using custom unicode font in gnuplot to produce (e)ps or pdf
我想创建一个带有增强符号、斜体或粗体拉丁字符以及有时(常规)希腊字符的后记或 pdf 图。一般怎么做?
假设我downloaded CMU Sans Serif, a font that has glyphs for all the strange characters I ever want to use. I converted them to pfa with an online tool并将文件复制到工作目录的路径。
预期
假设我想在某处生成以下符号。
我试过的:原创
我创建了一个编码为 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 文件,相关部分如下所示:
我也试过了
根据 ,我在术语选项中添加了 adobeglyphnames
。它至少使字母可用,但其他 Unicode 符号仍然不可用。结果是:
问题
出了什么问题?我怎样才能产生所需的输出?
这么多的可能性,哪里会出错:字体不适合这个任务吗?我是不是下载错版本了? pfa转换器做的不好吗?我是否错误地包含了字体文件? set encoding
有什么问题吗?我是否使用了糟糕的矢量图形编辑器?我是否安装了错误的字体并且矢量图形编辑器尝试使用它们?
恐怕答案是一般来说 PostScript 是错误的工具。如果您完全有可能改用 PDF 输出,我建议您这样做。生成的 PDF 文件甚至可以通过标准工具(例如 pdf2ps)转换为 PostScript 文件。如果 non-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-specific 个名称:
agl-aglfn glyph list
从 gnuplot 选择 PostScript 输出时,您可以告诉它您提供的字体使用了这两种约定中的哪一种。默认值为 "noadobeglyphnames".
set term postscript {no}adobeglyphnames
==
(使用"set term pdfcairo"的配方)
不幸的是,字体处理是 system-specific,所以我无法告诉您如何在所有目标机器上安装或配置字体。我将向您展示一个在 linux 桌面上运行的过程,该桌面使用 fontconfig 实用程序进行系统字体处理。
- 创建目录/home/share/fonts/CMUSans
- 将此目录添加到文件 /etc/fonts/local.conf
中的搜索列表
- 将您 link 在原始查询中使用的 CMU Sans Serif zip 存档中的 *.ttf 文件复制到此目录中。系统 fontconfig 系统工具现在应该能够找到这些字体。通过检查,他们 self-report 为 "CMU Sans Serif"
在 gnuplot 中(使用版本 5.2.6 测试)
set term pdfcairo font "CMU Sans Serif,15"
set output 'enhanced_utf8.pdf'
load 'enhanced_utf8.dem'
使用以下命令将输出 pdf 文件转换为 PostScript
pdf2ps enhanced_utf8.pdf enhanced_utf8.ps
结果截图如下
CMU Sans Serif 似乎不包含您要求的 UTF-8 字符。使用 Birdfont 等字体编辑器检查字体。尽管网页显示了您要使用的符号,但字体本身并不包含它们。但是,您的浏览器可能会显示符号,但它们只是其他字体的后备表示。
我想创建一个带有增强符号、斜体或粗体拉丁字符以及有时(常规)希腊字符的后记或 pdf 图。一般怎么做?
假设我downloaded CMU Sans Serif, a font that has glyphs for all the strange characters I ever want to use. I converted them to pfa with an online tool并将文件复制到工作目录的路径。
预期
假设我想在某处生成以下符号。
我试过的:原创
我创建了一个编码为 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 文件,相关部分如下所示:
我也试过了
根据 adobeglyphnames
。它至少使字母可用,但其他 Unicode 符号仍然不可用。结果是:
问题
出了什么问题?我怎样才能产生所需的输出?
这么多的可能性,哪里会出错:字体不适合这个任务吗?我是不是下载错版本了? pfa转换器做的不好吗?我是否错误地包含了字体文件? set encoding
有什么问题吗?我是否使用了糟糕的矢量图形编辑器?我是否安装了错误的字体并且矢量图形编辑器尝试使用它们?
恐怕答案是一般来说 PostScript 是错误的工具。如果您完全有可能改用 PDF 输出,我建议您这样做。生成的 PDF 文件甚至可以通过标准工具(例如 pdf2ps)转换为 PostScript 文件。如果 non-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-specific 个名称: agl-aglfn glyph list
从 gnuplot 选择 PostScript 输出时,您可以告诉它您提供的字体使用了这两种约定中的哪一种。默认值为 "noadobeglyphnames".
set term postscript {no}adobeglyphnames
==
(使用"set term pdfcairo"的配方)
不幸的是,字体处理是 system-specific,所以我无法告诉您如何在所有目标机器上安装或配置字体。我将向您展示一个在 linux 桌面上运行的过程,该桌面使用 fontconfig 实用程序进行系统字体处理。
- 创建目录/home/share/fonts/CMUSans
- 将此目录添加到文件 /etc/fonts/local.conf 中的搜索列表
- 将您 link 在原始查询中使用的 CMU Sans Serif zip 存档中的 *.ttf 文件复制到此目录中。系统 fontconfig 系统工具现在应该能够找到这些字体。通过检查,他们 self-report 为 "CMU Sans Serif"
在 gnuplot 中(使用版本 5.2.6 测试)
set term pdfcairo font "CMU Sans Serif,15" set output 'enhanced_utf8.pdf' load 'enhanced_utf8.dem'
使用以下命令将输出 pdf 文件转换为 PostScript
pdf2ps enhanced_utf8.pdf enhanced_utf8.ps
结果截图如下
CMU Sans Serif 似乎不包含您要求的 UTF-8 字符。使用 Birdfont 等字体编辑器检查字体。尽管网页显示了您要使用的符号,但字体本身并不包含它们。但是,您的浏览器可能会显示符号,但它们只是其他字体的后备表示。