6

我试图在 gnuplot 中的 eps 和 pdf 终端之间获得一些一致的输出。问题是他们似乎对尺寸单位的理解不同。以英寸为单位的相同指定大小将导致 pdf 输出的字体大小更大:

set terminal postscript eps enhanced colour size 10in,8in font 'Arial-Bold,14'
set output 'my_eps.eps'
set title 'My plot'
plot sin(x) notitle

set terminal pdfcairo size 10in,8in font 'Arial-Bold,14'
set output 'my_pdf.pdf'
replot

.pdf 中的文本要大得多,而且图形很狭窄。但是,如果我将 eps 的大小单位更改为 cm:

set terminal postscript eps enhanced colour size 10cm,8cm font 'Arial-Bold,14'
                                                 ########
set output 'my_eps.eps'
set title 'My plot'
plot sin(x) notitle

set terminal pdfcairo size 10in,8in font 'Arial-Bold,14'
set output 'my_pdf.pdf'
replot

使用错误的单位,输出看起来相同(在一些边距误差范围内)。这是巧合吗?这里发生了什么?

这是针对 Gnuplot 4.4(补丁级别 3)Ubuntu 11.10 测试的。

(我知道我可以使用一些实用程序在 eps 和 pdf 之间进行转换,因此它们是相同的,但我想了解 gnuplot 中发生了什么。)

4

2 回答 2

3

使用同一单位系统中的两个图,这种行为是可以预期的——尽管可能没有很好/准确地记录。(来自help post

In `eps` mode the whole plot, including the fonts, is reduced to half of 
the default size.

由于您明确指定了大小,因此该部分会保持不变,但即使您明确指定字体,字体的大小仍会在绘图上缩小 2 倍eps(我不知道为什么会这样,但一直都是这样- 我一直认为它至少是文档中的一个错误......)。

至于将单位切换为厘米 - 我不在cairo启用终端的计算机旁,所以我现在无法检查......但这似乎很奇怪(对我来说)。是不是因为从英寸到厘米的转换大约是 2 倍,这使得它们看起来如此相似?(例如,您的字体是大小的一半,而您的情节是大小的 1/2.54)

为了实现终端独立性,我想你可以把它写在一个函数中(当前未测试):

fontsize(x)=((GPVAL_TERM eq 'postscript') && \
             (strstrt(GPVAL_TERMOPTIONS,"eps")!=0)) ? x*2 : x
set term post eps enh size 10in,8in
set termoption font "Arial,".fontsize(7)
set output "Hello.eps"
plot sin(x)

set term pdfcairo enh size 10in,8in
set termoption font "Arial,".fontsize(7)
set output "Hello.pdf"
plot sin(x)

确保只将整数传递给 fontsize——在进行字符串连接时,整数会被提升为字符串。

编辑

在进一步挖掘之后,cairo 库似乎采取了一些自由并嵌入了您没有要求的(类似)字体。

running pdffonts myfile.pdf- 请注意,您只需通过以下方式获取字体strings myfile.pdf | grep FontName名称:

name                 type         emb sub uni object ID
-------------------- ------------ --- --- --- ------ --
LiberationSansBold   CID TrueType yes no  yes      5 0

而后记只包含字体名称(未嵌入),它被 ps 查看器翻译为它可以找到的最接近请求字体的东西(它 [可能] 替换了您也没有要求的字体)。因此,要实现真正的终端独立性(在这两个终端之间),您需要找到嵌入在 pdf 中的字体文件,然后set postscript eps enh color fontfile add "<fontfile>"在 pdf 和 postscript 中嵌入相同的字体文件。

于 2012-05-23T23:27:02.837 回答
0

使用 Ghostscript 实现 100% 的一致性

我使用Ghostscript将创建的 Encapsulated PostScript (EPS) 图转换gnuplot为 PDF。效果很好!

gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=output.pdf input.eps
于 2016-01-20T13:06:45.210 回答