我有这个代码:
% !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 的答案,因为我的解决方案只是尝试和错误解决方案,而他的解决方案对问题有真正的见解。但我认为如果不注意特殊字符(á,é,í,ó,ú)在路径中也使统计()失败。
我的解决方案:更改所有包含这些字符的文件夹名称。
有趣的事实:人物ñ没有同样的问题,我不知道原因。