如何让 LaTeX 和 XeLaTeX 以相同的方式放置我的图像?

如何让 LaTeX 和 XeLaTeX 以相同的方式放置我的图像?

我在将书稿从 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);
    }
}

相关内容