Pdflatex 生成的文件大小太大

Pdflatex 生成的文件大小太大

我的导师要求提交的作业的最大大小为 50kb(PDF 格式)。每当我尝试从 PDFLatex 构建时,文件都会超出此限制。

我以为问题与字体的位图编码有关,并尝试更新我的cm-super软件包,但这没有奏效。然后我使用和交叉检查了不同的字体编码\usepackage[T1]{fontenc}\usepackage[OT1]{fontenc}但似乎没有什么能让 PDF 变小。

我的最小工作示例是

\documentclass[10pt,a4paper,oneside]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{lipsum}

\title{Test}
\author{John doe}
\begin{document}

\maketitle

\section{This is a test}

\lipsum

\end{document}

这将生成一个 48.5 kB 的 PDF,如果我提交的作业这么小的话,这个大小还可以。我预计生成的 PDF 会小很多,因为文件.tex只有 295b。我在 Ubuntu 14.04 上使用 Tex Live 2013,软件包cm-super是最新版本。请帮助我。

答案1

不确定作业是否会更长:大部分大小来自 pdf 中的字体嵌入,这实际上并不取决于您在文件中放入的内容。

也就是说,我用你的 MWE 做了一个小测试,改变了编译器或字体编码:使用 OT1 编码:

  • latex+dvips+ps2pdf:22 KB
  • latex+dvipdfmx:13.34 KB
  • pdflatex:49.84 KB
  • lualatex:49.37 KB
  • xelatex:13.2 KB

使用 T1 编码并加载拉丁现代字体

  • latex+dvips+ps2pdf:22.57 KB
  • latex+dvipdfmx:13.66 KB
  • pdflatex:99.95 KB
  • lualatex:49.37 KB
  • xelatex:13.65 KB

我无法解释直接转为 .pdf 的方式(pdflatex、lualatex)和通过 dvi 或 xdvi 的方式之间的这些差异。也许在一种情况下嵌入了所有字形,而在另一种情况下,只嵌入了必要的字形?这可以解释 T1 和 OT1 字体编码之间 pdflatex 方式的大小差异很大:拉丁现代字体比计算机现代字体的字形多得多。

答案2

使用 ghostscript 压缩您的 PDF。

gswin64c -dCompatibilityLevel=1.5 -dAutoRotatePages=/None -dQUIET -sDEVICE=pdfwrite -o "out.pdf" "in.pdf"

我得到了 19.38KB。

答案3

您可以通过尽可能避免包含字体来限制大小,并依靠 PDF 查看器提供字体,尽管如今即使对于“标准 35”Adobe 字体也不鼓励这种做法。

nodownload.map在主文档旁边写入文件

phvb8r Helvetica-Bold 0 "TeXBase1Encoding ReEncodeFont" <8r.enc
phvb8y Helvetica-Bold 0 "TeXnANSIEncoding ReEncodeFont" <texnansi.enc
phvbo8r Helvetica-BoldOblique 64 "TeXBase1Encoding ReEncodeFont" <8r.enc
phvbo8y Helvetica-BoldOblique 64 "TeXnANSIEncoding ReEncodeFont" <texnansi.enc
phvr8r Helvetica 0 "TeXBase1Encoding ReEncodeFont" <8r.enc
phvr8y Helvetica 0 "TeXnANSIEncoding ReEncodeFont" <texnansi.enc
phvro8r Helvetica-Oblique 64 "TeXBase1Encoding ReEncodeFont" <8r.enc
phvro8y Helvetica-Oblique 64 "TeXnANSIEncoding ReEncodeFont" <texnansi.enc
psyr Symbol 3
ptmb8r Times-Bold 2 "TeXBase1Encoding ReEncodeFont" <8r.enc
ptmb8y Times-Bold 2 "TeXnANSIEncoding ReEncodeFont" <texnansi.enc
ptmbi8r Times-BoldItalic 66 "TeXBase1Encoding ReEncodeFont" <8r.enc
ptmbi8y Times-BoldItalic 66 "TeXnANSIEncoding ReEncodeFont" <texnansi.enc
ptmr8r Times-Roman 2 "TeXBase1Encoding ReEncodeFont" <8r.enc
ptmr8y Times-Roman 2 "TeXnANSIEncoding ReEncodeFont" <texnansi.enc
ptmri8r Times-Italic 66 "TeXBase1Encoding ReEncodeFont" <8r.enc
ptmri8y Times-Italic 66 "TeXnANSIEncoding ReEncodeFont" <texnansi.enc

现在编译以下示例

\pdfmapfile{=nodownload.map}
\documentclass[10pt,a4paper,oneside]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{mathptmx}
\usepackage[scaled]{helvet}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{lipsum}

\title{Test}
\author{John doe}
\begin{document}

\maketitle

\section{This is a test}

\textsf{Abc\itshape def} and an integral
\[
\int_{-\infty}^{\infty}e^{-x^{2}}\,dx=\sqrt{\pi}
\]
\lipsum

\end{document}

对我来说,生成一个 29 KiB 的 PDF 文件。为了确保压缩率尽可能高,请添加以下行

\pdfcompresslevel=9

一开始,尽管这并不是必要的。

但无论如何,对于 PDF 文件来说,50 KiB 的要求都太严格了。我尝试将“lipsum”文本粘贴到我碰巧拥有的文字处理器中(不是一)并将其打印为 PDF 文件。即使使用 Times,字体也包含在内。

相关内容