我有一个由自动生物信息学流程生成的 tex 文件作为报告。通常,它大约有 50-150 页,但这是基于 1-3 个样本的。它包含许多质量控制图。我现在运行了 60 个样本,大小激增到 4026 页。问题是,pdflatex
当我包含图片时,它总是失败。文件中有 8843 张图片,分为 4874 个figure
块,它们都在minipage
and中调用subfloat
,例如:
\begin{figure}[h!]
\centering
\begin{minipage}[b]{0.48\textwidth}
\centering
\subfloat[Raw read 1]{
\includegraphics[width=\textwidth]{/data/DIV4/ihb-diabetes/projects/slik-tcell/analysis/01_gentrap_new/sample_H7-59-17-AN/lib_S61-L003/flexiprep/H7-59-17-AN_S61_L003_R1_001.fastqc/H7-59-17-AN_S61_L003_R1_001_fastqc/Images/sequence_length_distribution.png}
}
\end{minipage}
\begin{minipage}[b]{0.48\textwidth}
\centering
\subfloat[Preprocessed read 1]{
\includegraphics[width=\textwidth]{/data/DIV4/ihb-diabetes/projects/slik-tcell/analysis/01_gentrap_new/sample_H7-59-17-AN/lib_S61-L003/flexiprep/H7-59-17-AN_S61_L003_R1_001.qc.fastqc/H7-59-17-AN_S61_L003_R1_001.qc_fastqc/Images/sequence_length_distribution.png}
}
\end{minipage}
\caption{Read length distribution for read 1.}
%\label{fig:length_dist_before_and_after_1}
\end{figure}
我不断收到这两个错误:
!pdfTeX error: /usr/bin/pdflatex (file /data/DIV4/ihb-diabetes/projects/slik-tc
ell/analysis/01_gentrap_new/sample_B7-59-0-AM/lib_S46-L002/flexiprep/B7-59-0-AM
_S46_L002_R2_001.fastqc/B7-59-0-AM_S46_L002_R2_001_fastqc/Images/per_sequence_q
uality.png): buffer overflow at file ../../../texk/web2c/pdftexdir/utils.c, lin
e 183
==> Fatal error occurred, no output PDF file produced!
和:
</data/DIV4/ihb-diabetes/projects/slik-tcell/analysis/01_gentrap_new/sample_B7-
59-0-AM/lib_S46-L002/flexiprep/B7-59-0-AM_S46_L002_R2_001.qc.fastqc/B7-59-0-AM_
S46_L002_R2_001.qc_fastqc/Images/per_sequence_gc_content.png, id=55775, 803.0pt
x 602.25pt>
! TeX capacity exceeded, sorry [pool size=6181497].
\Ginclude@png ...pty \else , page \GPT@page \fi >}
\GPT@info {#1\ifx \GPT@pag...
l.144122 }
! ==> Fatal error occurred, no output PDF file produced!
即使我尝试增加pool_size
和,也会发生这种情况extra_mem_bot
。我的最终pdflatex
决定是:
'/usr/bin/pdflatex' -8bit --extra-mem-bot=11150000000 --pool-size=196181497 '-output-directory' '/data/DIV4/ihb-diabetes/projects/slik-tcell/analysis/01_gentrap_new/report' '-jobname' 'gentrap_report' '/data/DIV4/ihb-diabetes/projects/slik-tcell/analysis/01_gentrap_new/gentrap_report.tex'
我设法获取 PDF 文件的唯一方法是使用另一个没有权限读取图片所在文件夹的用户运行 pdflatex。当然,这会导致一大堆错误permission denied
,但它给了我一些帮助。这让我相信错误与图形有关。有没有办法减少我的图形的内存负载?(一份包含近 9000 个图形的 4026 页报告是否是可读文档则完全是另一个问题)。
答案1
它是您正在使用的路径的长度。
\documentclass{article}
\batchmode
\usepackage{graphicx}
\newcount\zz
\begin{document}
\def\z{}
\loop
\edef\z{\z/}
\includegraphics{/c/tmp/../tmp/../tmp/../tmp/../tmp/../tmp/../tmp/../tmp/../tmp/../tmp/..%
/tmp/../tmp/../tmp/../tmp/../tmp/../tmp/../tmp/../tmp/\z house.png}\par
%\includegraphics{/c/tmp/\z house.png}\par
\advance\zz1
\ifnum\zz<1500
\repeat
\end{document}
在我的例子中,产生了你所显示的错误
! TeX capacity exceeded, sorry [pool size=6135010].
该../tmp/......
构造仅访问文件/c/tmp/house.png
,但具有适当长的路径,并且\z
重新定义确保每次都使用不同的路径。
每条不同的路径都会用尽字符串池。
如果您注释掉\includegraphics
长路径,而使用路径较短的路径,则文档将成功,池使用情况显示为
5790653 string characters out of 6135010
在你的情况下你可以使用
\includegraphics{sequence_length_distribution.png}
这将大大减少字符串池的使用,您只需要确保包含图像的目录位于 TEXINPUT 路径中。
例如,如果它们在当前目录中,或者只是设置
TEXINPUTS=/data/DIV4/ihb-diabetes/projects/slik-tcell/analysis/01_gentrap_new/sample_B7-59-0-AM/lib_S46-L002/flexiprep/B7-59-0-AM_S46_L002_R2_001.fastqc/B7-59-0-AM_S46_L002_R2_001_fastqc/Images/:
在运行乳胶之前。