我在将书稿从 LaTeX 转换为 XeLaTeX 时遇到了问题。问题是我的图像大小和位置在转换过程中没有保留下来。
本书包含许多图片,其来源是文件.png
。虽然.png
它本身有很多值得推荐的地方,但它并没有在文件本身中包含边界框信息。因此,我使用脚本将边界框信息缓存在单独的文件中,然后使用它来设置图像的边界框。在我的文档中,我准备了以下方法:
\DeclareGraphicsExtensions{.png,.bb}
\DeclareGraphicsRule{.png}{eps}{.bb}{}
\graphicspath{{./images/}}
我.bb
使用 Q&D(Quick and Dirty)perl 脚本创建了这些文件。
有了 LaTeX,一切都好了。图像大小正确,并正确放置在每一页上。然后我切换到 XeLaTeX,结果我精心制作的方案却加入了 aft gang aglay 人群!
出了什么问题?边界框相同,但图像在文档中的位置却不正确?
答案1
当我切换到 XeLaTeX 时,我发现图像大小不合适的问题解决了,因为我发现了 dpi 之间的差异。这个脚本的原始版本不允许 72 和 96——现在允许了,我把它提供给其他人,希望它能有用。这是一种谢谢你!向社区开放。请使用并享受!对于那些担心 IP 和权限的人来说,这是无限制或无保证地发布的——就像免费啤酒一样免费。
#!/usr/bin/perl
# box2bb.pl -- create image.type.bb files for LaTeX
# if xelatex is first option on command line, changes to 72dpi from 96dpi
#
use strict;
use warnings;
use diagnostics;
use Image::Magick;
use POSIX qw(ceil);
our $VERSION = '0.03';
my $option = shift @ARGV;
if ($option ne 'xelatex') {
push(@ARGV,$option);
}
for (map { glob } @ARGV) {
my $h;
my $w;
my $p = new Image::Magick;
my $fh;
$p->Read($_);
($w,$h) = $p->Get('width','height');
s/\.\w+\Z/.bb/;
open($fh,'>',"$_");
$w = convertPX2PT($w);
$h = convertPX2PT($h);
print $fh "\%\%BoundingBox: 0 0 $w $h\n";
}
sub convertPX2PT {
if ($option eq 'xelatex') {
return ceil(((shift) / 72.0) * 72.27);
}
else {
return ceil(((shift) / 96.0) * 72.27);
}
}