如何在gnuplot中的eps和pdf终端中实现输出的一致性?

时间:2012-05-23 21:40:13

标签: gnuplot

我试图在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中发生了什么。)

2 个答案:

答案 0 :(得分:3)

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

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

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

至于将单位切换到厘米 - 我没有启用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库正在采取一些自由并嵌入你没有要求的(类似)字体。

正在运行pdffonts myfile.pdf - 请注意,您只需strings myfile.pdf | grep FontName获取字体名称:

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

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

答案 1 :(得分:0)

与Ghostscript达成100%的一致性

我使用Ghostscriptgs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=output.pdf input.eps 创建的Encapsulated PostScript(EPS)图转换为PDF。效果很棒!

Array