使用列表的源代码生成非常大的 PDF

使用列表的源代码生成非常大的 PDF

将 2284 行源文件(语言=C)嵌入到 LaTeX 文档中,使用 \usepackage{listings} 生成大约 150KB 的 PDF。原始源文件为 78KB。

就其本身而言,这是可以接受的,但我正在构建一个包含数百个源文件的完整项目文档。我的最终文档现在有大约 22MB 的源列表!

以前我用过GNU 脚本从源文件生成 postscript 输出。使用与上述相同的源文件,Enscript 生成了一个 211KB 的 postscript 文件,然后 ps2pdf 生成了一个 50KB 的 PDF 文件;大约是“listings”包大小的三分之一。

以下是我的“列表”设置。我使用的是 pdflatex 和 MiKTeX 2.9。我可以更改哪些内容来帮助减小文件大小?为什么 Enscript 和“列表”之间存在差异?

\documentclass{article}

\usepackage{listings}
\usepackage{color}

\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}

\lstset{
    language=C,
    basicstyle=\footnotesize\ttfamily,
    keywordstyle=\color{blue},
    commentstyle=\color{dkgreen},
    stringstyle=\color{mauve},
    numbers=left
}


\begin{document}
\lstinputlisting{my_main.c}
\end{document}

谢谢,克里斯

====

编辑:添加 postscript 输出之间的差异。

请参阅下面的 postscript 输出。我创建了一个简短的“hello world”C 文件,并通过 Enscript 和 LaTeX(通过列表)运行它,以生成一些 postscript 输出以供比较。

Enscript 输出看起来更简洁,而 LaTeX(列表)则比较零散,我只能得出这样的结论:这大大增加了我最终的 PDF 大小。“列表”的这个 Postscript 输出看起来正确吗?

C 代码:

#include <stdio.h>

int main(int)
{
   /* This is a comment, can you see me in LaTeX? */
   printf("Hello World!\n");
   return 1;
}

Enscript 后记输出:

<snip>
/Courier-Oblique 8 8 SUF
0.133333 0.545098 0.133333 setrgbcolor
19.4 732 M
(/* This is a comment, can you see me in LaTeX? */) s
/F-gs-font 8 8 SF
0 setgray
5 723 M
(   printf\() s
/Courier-Bold 8 8 SUF
0 setgray
53 723 M
("Hello World!\\n") s
/F-gs-font 8 8 SF
0 setgray
129.8 723 M
(\);) s
5 714 M
(   ) s

LaTeX 列表后记输出:

TeXcolorrgb Black 0 0.6 0 TeXcolorrgb 216 w Fb(/)5
b(*)p Black 0 0.6 0 TeXcolorrgb Black 0 0.6 0 TeXcolorrgb
53 w(T)h(h)g(i)g(s)p Black 0 0.6 0 TeXcolorrgb Black
0 0.6 0 TeXcolorrgb 53 w(i)f(s)p Black 0 0.6 0 TeXcolorrgb
Black 0 0.6 0 TeXcolorrgb 51 w(a)p Black 0 0.6 0 TeXcolorrgb
Black 0 0.6 0 TeXcolorrgb 50 w(c)g(o)g(m)g(m)g(e)g(n)g(t)p
Black 0 0.6 0 TeXcolorrgb 21 w(,)p Black 0 0.6 0 TeXcolorrgb
Black 0 0.6 0 TeXcolorrgb 50 w(c)g(a)g(n)p Black 0 0.6 0
TeXcolorrgb Black 0 0.6 0 TeXcolorrgb 55 w(y)g(o)g(u)p
Black 0 0.6 0 TeXcolorrgb Black 0 0.6 0 TeXcolorrgb 54
w(s)g(e)g(e)p Black 0 0.6 0 TeXcolorrgb Black 0 0.6 0
TeXcolorrgb 54 w(m)g(e)p Black 0 0.6 0 TeXcolorrgb Black
0 0.6 0 TeXcolorrgb 52 w(i)g(n)p Black 0 0.6 0 TeXcolorrgb
Black 0 0.6 0 TeXcolorrgb 53 w(L)h(a)g(T)g(e)g(X)p Black
0 0.6 0 TeXcolorrgb 11 w(?)p Black 0 0.6 0 TeXcolorrgb
Black 0 0.6 0 TeXcolorrgb 51 w(*)f(/)p Black 396 917
a Fc(6)217 b Fb(p)6 b(r)g(i)g(n)g(t)g(f)11 b(\()p 0.58 0 0.82
TeXcolorrgb 8 w(")p Black 0.58 0 0.82 TeXcolorrgb 10
w(H)6 b(e)g(l)g(l)g(o)p Black 0.58 0 0.82 TeXcolorrgb
10 w( )p Black 0.58 0 0.82 TeXcolorrgb 10 w(W)g(o)g(r)g(l)g(d)p
Black 0.58 0 0.82 TeXcolorrgb 11 w(!)f(\\)p Black 0.58 0 0.82
TeXcolorrgb 9 w(n)p Black 0.58 0 0.82 TeXcolorrgb 7 w(")p
Black 9 w(\))g(;)

答案1

今天早上我偶然发现了这个帖子: 如何创建适合互联网的小型 PDF 文件

使用以下设置几乎使我的最终 PDF 大小减半:

\pdfminorversion=5
\pdfobjcompresslevel=3 
\pdfcompresslevel=9

这不是我最初想要的答案,但对我有用。

相关内容