為什麼 lualatex 給出錯誤“打開文件太多”,但 pdflatex 不在同一個乳膠文件上?

為什麼 lualatex 給出錯誤“打開文件太多”,但 pdflatex 不在同一個乳膠文件上?

在 Linux 上使用 TL 2015。

我有一個包含圖形的乳膠文件,全部為 pdf 格式。所有圖像均透過呼叫包含在內

\includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{rules/file_name}

此類影像共有 1860 張,全部為 pdf 格式。

當我使用 lualatex 編譯此文件時,在某個階段,當它到達圖像編號 1016 時,它會失敗並出現錯誤Too many open files。使用 pdflatex 編譯相同的檔案不會發生錯誤!

使用 lualatex 時,影像包含在乳膠檔案中的方式是否有限制,或者這是一個錯誤?看起來 lualatex includegraphics 版本在載入圖片和檔案句柄用完時沒有關閉檔案句柄。這是在 Linux mint 7.2 上。

由於文件很大。我已將檔案及其載入的圖片放入\includegraphics一個 zip 檔案 (80 MB) 中。連結位於這篇文章的底部。

要重現,請下載 zip 文件,使用命令解壓縮它unzip file.zip,它將創建一個名為 的新資料夾lualatex_error/,該資料夾內有一個文件report.tex和包含所有圖像的資料夾。然後輸入

lualatex report.tex

會給出錯誤

 lualatex: ./rules/1016.pdf: Too many open files

來自report.log

This is LuaTeX, Version beta-0.80.0 (TeX Live 2015) (rev 5238) 
    (format=lualatex 2015.7.9)  31 JUL 2015 12:28
 restricted \write18 enabled.

lualatex_error>which lualatex
/usr/local/texlive/2015/bin/x86_64-linux/lualatex

zip 檔案位於這個資料夾(這是 zip 檔案所在資料夾的連結。不是 zip 檔案的直接連結)。 80 MB 大小。

我可以提供的任何其他資訊請告訴我。

答案1

我可以確認這種行為。去測試:

建立 1860 個名為, ,...,的副本example-image-1x1.pdf(或您選擇的其他影像)。如果您使用並在標準位置安裝了 TeX Live 2015,則可以使用下列命令:1.pdf2.pdf1860.pdfbash

i=0; while [ $i -le 1860 ] ; do ((i++)); cp /usr/local/texlive/current/texmf-dist/tex/latex/mwe/example-image-1x1.pdf ./$i.pdf; done

然後建立以下文檔:

\documentclass{article}
\usepackage{graphicx}
\usepackage{expl3,xparse}
\ExplSyntaxOn
\int_new:N \l_nasser_loop_int
\tl_new:N \l_nasser_file_tl
\NewDocumentCommand \icing { }
{
  \int_set:Nn \l_nasser_loop_int { 0 }
  \int_do_while:nNnn { \l_nasser_loop_int } < { 1860 }
  {
    \int_incr:N \l_nasser_loop_int
    \tl_set:Nn \l_nasser_file_tl { \int_use:N \l_nasser_loop_int }
    \includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{\l_nasser_file_tl}\par
  }
}
\ExplSyntaxOff
\begin{document}
\icing
\end{document}

這可以很好地編譯pdflatex。使用 時lualatex,它會失敗並出現以下錯誤:

lualatex: ./1024.pdf: Too many open files

我將避免發布輸出結果pdflatex:您要么必須相信我的話,要么遵循上面的過程。

相關內容