我有两台CentOS 7.4.1708机器,运行gnuplot 4.6 patchlevel 2, 目前表现不同,我无法解决原因。
安装字体:
sudo yum install dejavu-sans-mono-fonts
然后创建以下GNUplot脚本:
cat << EOF > test.gnuplot
set terminal pngcairo enhanced font "DejaVuSansMono,10"
set encoding utf8
set title "同"
plot sin(x)
EOF
最后,将其输入应用程序:
cat test.gnuplot | gnuplot > test.png
在一台机器上我得到了这个:
但另一方面,我得到了这个:
我无法解决这种差异的原因。所需的字符是 U + 540C,所以它不像第二台机器以任何不同的方式解释输入字节;它只是不渲染字形。
我应该寻找系统配置的哪些差异?
更广泛地说,我怎样才能修复&#34;第二种情况下的输出?如果某些角色最终被这样的占位符替换,我甚至不在乎(毕竟,我必须认识到并非所有字体都实现所有字形),但那些以超大尺寸渲染的占位符是< / em>一个问题。
答案 0 :(得分:3)
这篇文章是一个观察集合,而不是一个完整的答案,但也许它也可能有用(我在几乎全新安装的CentOS上尝试了你的例子,它确实重现了你帖子中的第二个情节):
从命令
打印的charset
表判断
fc-match -v DejaVuSansMono
似乎确实不支持540C
。也许第一台机器安装了一些额外的字体,用作这个特定字形的后备? fc-list
的输出有何不同?
很难说它是否完整,但支持此字形的list字体似乎相当有限。尽管如此,例如Google Droid可以通过yum
获得,所以如果我这样做
sudo yum install google-droid-sans-fonts google-droid-sans-mono-fonts
并重新运行Gnuplot脚本,剧情以可接受的方式呈现。
对于“后备”框的大小,我首先注意到它的大小与指定的字体大小成正比,即如果将字体大小加倍,它也会加倍。从src/wxterminal/gp_cairo.c
开始,Gnuplot默认使用“过采样”策略来渲染文本,即它以plot->oversampling_scale
倍的分辨率呈现所有内容,然后将其缩放(通过在中定义的变换矩阵) void gp_cairo_initialize_context(plot_struct*)
)。
例如,在渲染文本时,它会调用
pango_font_description_set_size(desc, \
(int) (plot->fontsize*PANGO_SCALE*plot->oversampling_scale));
但是,出于某种原因,“后备”框不会缩减,因此比指定的字体大小大plot->oversampling_scale
倍。默认值plot->oversampling_scale
设置为GP_CAIRO_SCALE
,20
中定义为src/wxterminal/gp_cairo.h
。
我下载了Gnuplot 4.6.2的来源,并将plot->oversampling = TRUE;
替换为plot->oversampling = FALSE;
void gp_cairo_initialize_plot(plot_struct*)
中的src/wxterminal/gp_cairo.c
。重新编译后,“后备”框的渲染大小与文本的其余部分相同。不幸的是,我还没有找到如何直接从Gnuplot改变这种行为的方法。