无法在 LuaLaTeX 中加载包含 includegraphics 的 pdf

无法在 LuaLaTeX 中加载包含 includegraphics 的 pdf

我有这个代码:

% !TeX encoding = UTF-8
\documentclass[12pt,letterpaper,oneside]{book} 
\usepackage{graphicx}
\begin{document}
\includegraphics{imagenes/contacto.pdf}
\end{document}

但我收到下一个错误:

!LuaTeX 错误(文件 imagenes/contacto.pdf):PDF 包含:无法 stat() 文件“E:/Work/imagenes/contacto.pdf”==> 发生致命错误,未生成输出 PDF 文件!

这种情况只发生在 pdf 和 LuaLaTeX 中,pdfLaTex 可以很好地编译它,并且在 LuaTeX 中用 jpg 图像替换也可以正常工作。我该怎么做才能让它在 LuaLaTeX 中工作?

答案1

该错误信息是由(从 LuaTeX 0.95 开始)get_file_checksum中的函数引起的:texk/web2c/luatexdir/image/pdftoepdf.w

static char *get_file_checksum(const char *a, file_error_mode fe)
{
    struct stat finfo;
    char *ck = NULL;
    if (stat(a, &finfo) == 0) {
        off_t size = finfo.st_size;
        time_t mtime = finfo.st_mtime;
        ck = (char *) malloc(PDF_CHECKSUM_SIZE);
        if (ck == NULL)
            formatted_error("pdf inclusion","out of memory while processing '%s'", a);
        snprintf(ck, PDF_CHECKSUM_SIZE, "%" PRIu64 "_%" PRIu64, (uint64_t) size, (uint64_t) mtime);
   } else {
        switch (fe) {
            case FE_FAIL:
                formatted_error("pdf inclusion","could not stat() file '%s'", a);
                break;
            case FE_RETURN_NULL:
                if (ck != NULL)
                    free(ck);
                ck = NULL;
                break;
            default:
                assert(0);
        }
    }
    return ck;
}

函数的确切返回值stat会告诉调用失败的原因,请参阅手册页stat。不幸的是,确切的值没有被评估并添加到错误消息中。

很奇怪,stat这里失败了。查看引用的手册页中的错误案例列表。以下测试应该会成功。打开命令窗口(cmd.exe):

dir E:\Work\imagenes\contacto.pdf

您应该会看到文件日期和文件大小。此测试应该可以排除大多数错误原因(路径组件不是目录、目录访问问题、路径/组件名称太长,...)。

猜测一下。也许有一些与反病毒程序的交互,这些程序会挂接到系统调用中以完成其工作,但如果这种“挂接”在 LuaTeX 二进制文件中没有以透明的方式完美完成,就会造成麻烦。这可能会导致

答案2

我不会取消选中@HeikoOberdiek 的答案,因为我的解决方案只是尝试和错误解决方案,而他的解决方案对问题有真正的见解。但我认为如果不注意特殊字符(á,é,í,ó,ú)在路径中也使统计()失败。

我的解决方案:更改所有包含这些字符的文件夹名称。

有趣的事实:人物ñ没有同样的问题,我不知道原因。

相关内容