LaTeX 技巧 958:給過大的 arXiv 投稿文件“瘦身”

本文介紹,向 arXiv 提交文章,因為文件過大被卡住時的辦法。第一種辦法:優化“照相”性 EPS 文件的結構,并以 Level 2 EPS 保存。第二種辦法:使用 PDFLaTeX, 直接插入 JPEG 等格式點陣圖。最后介紹矢量圖和點陣圖的一些背景。用到的軟件包: Ghostscript, ImageMagick, LaTeX 和 PDFLaTeX.

過大的稿件

我們向 arXiv 提交論文預印本時,有時候在上傳了所有文件后會出現一行提示:您的一個文件或多個文件大小的總和過大。這時,雖然可以繼續正常地提交并預覽生成的 PDF 文件,但提交完成后的稿件會被掛起,直到修正了文件過大問題,或者與管理員聯系申請手工處理后,才能見諸網站的每日更新。遇到這種問題,合適的處理辦法是自己動手,縮減文件占據的空間。

正如 arXiv 相關幫助文件 所說,絕大多數文件過大的問題,往往是少數巨大的圖形文件導致。這可以理解成“二八定律”的一種體現:在超大的投稿文件包中,約 20% 的圖形占去了近 80% 的空間。這意味著我們往往只需要找出這些超大圖形,并想辦法縮小它們即可。arXiv 自身的說明文檔提供了一些參考,這里則是講講我們自己的經驗。

我們最需要注意的一個問題就是:某些“照相”而非矢量性質的圖片,以過高的分辨率,甚至是原始分辨率,保存成了 EPS矢量格式,特別是 Level 1 EPS. 過大文件十有八九是這類情況。以下我們介紹兩種方法,分別是壓縮 EPS 文件內嵌的巨型點陣圖后以 Level 2 EPS 重新封裝,還有直接在 LaTeX 文檔中插入 JPEG 和 PNG 格式點陣圖。

方法一:優化巨大的 EPS 文件

壓縮未經優化的 EPS 文件內嵌圖像

一旦發現了原始文件中有巨大的點陣圖,特別是存為巨大、未經優化的 Level 1 EPS 文件者,首先我們要做的就是提取出這幅圖像,將它用 JPEG 等有損格式壓縮。這里,我們提供一個用“瑞士軍刀” ghostscript 這一工具來實現的方法:

gs -dBATCH -dNOPAUSE -q           \ # 減少 gs 信息輸出
   -sOutputFile=output.jpg         \ # 導出文件的路徑
   -sDEVICE=jpeg -dJPEGQ=95 -r120x120    \ # JPEG 配置選項
   -dEPSCrop                \ # 用 EPS BoundingBox 截幅
   input.eps                   # 輸入文件名

重要的部分是 -sDEVICE=jpeg -dJPEGQ=95 -r120x120 這一行,我們解釋一下:

  • -sDEVICE=jpeg: 告訴 Ghostscript 選中 JPEG 導出功能。

  • -dJPEGQ=95: 選擇 JPEG Quality (畫質)參數,在 0 到 100 之間(以 95 為例)。畫質越高,壓縮程度越小,損失越小,但文件越大。選擇過小將嚴重損害圖像的質量。

  • -r120x120: 選擇將矢量圖點陣化時的分辨率為 120 DPI. 分辨率越高,相應的文件也越大。分辨率以適應屏幕顯示和普通打印機簡易打印為好,一般不需要超過 300, 經驗表明 100 左右夠用。縱橫方向上 DPI 最好一樣,否則圖像會變形。

請注意不要漏掉了 -dEPSCrop 選項,這樣輸出的結果才能根據 EPS 文件頭里的 BoundingBox 元數據確定畫幅。否則,輸出的圖像畫幅將正比于默認的紙張大小(通常是 A4 或 Letter),在頁面四周留下無用的白邊。

導出后,可以查看一下生成的圖像畫幅、文件大小、畫質是否滿意,否則可以微調上述幾個參數。如果圖像有白邊,說明輸入圖像可能有 bug. 最常見的 bug 是某些程序生成 EPS 時沒有正確地聲明文件類型。這是,請用文本編輯器打開這個文件,看看文件頭幾行是否有類似

%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 42 170 467 510
%%LanguageLevel: 1

的部分(具體位置可以有些差別)。如果定義文件類型的第一行 shebang line 缺少 EPSF-x.y 的結尾(具體版本號 x.y 可能各異),Ghostscript 將不能認為這是 EPS 文件,從而忽略 BoundingBox. 這時候可以在文本編輯器里參考前面的 PS 版本號將其補全,再重新操作。

在 LaTeX 下使用壓縮后的圖像

現在我們有了壓縮后的圖像在手,如何使用呢?如果你之前使用的圖形文件都是 EPS 格式,并且不想做什么改動了,一個自然的想法是將這幅有損壓縮過的圖像封裝在一個新的 EPS 文件里。

做這件事的時候要注意,此時如果封裝的目標文件是 Level 1 EPS, 那么幾乎可以肯定起不到任何壓縮大小的作用!我們必須將這張 JPEG 圖像輸入到支持壓縮格式點陣圖的 Level 2/3 EPS 文件中。這一步可以借助另一把瑞士軍刀 ImageMagick 完成。

例如,下面的命令可以將 JPEG 文件輸出為 Level 2 EPS: (注意:新版本命令改為了:magick )

convert input.jpg eps2:output.eps

注意到,我們指定輸出文件名時,在前面加上了指定的文件格式 eps2, 和文件名用一個冒號 (:) 隔開。如果不指明 EPS 版本等級是 eps2(即 Level 2 EPS),默認輸出的是我們不想要的 Level 1 版本。

當然,我們也可以生成 Level 3 EPS 文件,只需要把格式從 eps2 換成 eps3 即可。如果擔心兼容性,Level 2 是更好的選擇。

方法二:使用 PDFLaTeX 直接插入 JPEG 圖片

另一種辦法是直接在投稿文件的 LaTeX 源碼中使用剛才生成的 JPEG 圖像。為了做到這一點,需要告訴 arXiv 后臺的服務器開啟 PDFLaTeX 支持。PDFLaTeX 支持的圖像類型包括 JPEG, PNG 和 PDF. 為此,我們需要檢查一下,文章中用到的所有圖像是否都已經是這三種格式之一。既然我們已經將點陣圖轉化成了 JPEG 格式,剩下的就是考慮矢量圖了。而矢量圖更適合保存為 PDF 這樣的矢量格式。對于 EPS 格式的矢量圖,我們還可以用 Ghostscript 附帶的 ps2pdf 工具轉換一下:

ps2pdf -dEPSCrop input.eps output.pdf

進行這一步時仍然要注意查看所生成的 PDF 文件紙張大小是否遵從 EPS BoundingBox, 頁面四周是否出現過多白邊。如果有,則需要像之前所說那樣,改動輸入的 “EPS” 文件。

ps2pdf 可以接受 Ghostscript 的各種選項,因此如果有需要的話可以通過這些選項進行字體嵌入、RGB 到 CMYK 顏色空間轉換等高級操作,這里就不一一介紹了。

另外值得說明的是,PNG 格式對某些類型的圖形可能更適合。PNG 本身是一種點陣格式,但其算法適合保存以明銳邊沿、幾何形狀為主的圖像。例如,用灰度不同的格子方陣展示某個相關矩陣的構型,可以考慮 PNG 點陣圖。

準備好了 PDFLaTeX 用的圖像文件,就可以在正文中插入了。這只需要和往常一樣,使用 LaTeX graphicx 包的 \includegraphics 宏指令即可:

\begin{figure}
    \caption{...}
    \label{...}
    \includegraphics[...]{filename.jpg/png/pdf}
\end{figure}

最后,為了讓 arXiv 后臺的 LaTeX 處理程序默認調用 PDFLaTeX, 需要在主文件的前 5 行內加上一句指令:

\pdfoutput=1

矢量圖和點陣圖:背景介紹

論文中出現的圖形,大致可以分為兩種用途:一種是“可視化” (visualization), 用于將抽象的數據和理論測算、預言等,用幾何的散點、線條、區塊和文字注記等“要素” (elements) 加以呈現,以解釋某個觀點;另一種是“照相” (photograph), 用于寫實地反映某些對象(如天體)以供讀者觀察,獲取直觀印象。兩者用途不同決定了特點不同:前者適合描述為留白的背景之上放置的各類“要素”——每個要素不再可分割,而非排列成 M × N 格點陣的一組像素 (pixels); 后者則適合描述為像素的集合,像素之間除了“相鄰”不再有別的邏輯關系。換句話說,前者適合保存為矢量圖 (vector graphics), 后者適合保存為點陣圖 (raster graphics).

這幅可視化圖形是若干幾何要素(線條、區塊和文字等)的組合,它適合用矢量格式保存,如 EPS, PDF 或者 SVG.

這張 M31 星系的照片是像素組成的陣列。保存這類圖像最好使用點陣格式文件,如 JPEG. (原圖作者 Adam Evans, 有所裁切、旋轉)

明白了這個,也就明白了為什么我們通常用 EPS 或 PDF 這樣的矢量格式文件保存可視化圖表。我們的圖表本身“分辨率”是無限的,它們是純幾何形狀。保存它的文件應該包含的是構造這些形狀的指令(因此文件本身往往不大),而閱讀器、打印機之類,做的事情就是按照這些指令盡量無損地在屏幕或者紙張上“渲染” (render) 出可供我們目視的點陣圖。通常情況下,論文中這類圖形居多,所以 EPS 等格式在科研一族中如此流行。

這種流行的一個副產物是,我們偶爾需要插入點陣圖,比如某個天體的照相時,也會出于慣性保存為 EPS 等格式。這種慣性甚至都不來自我們自身——標準的 latex 程序很難接受其他格式的文件。問題在于,用矢量格式文件保存點陣圖是極端低效的。此種低效的一個來源在于,點陣圖中往往天然存在較高的冗余度 (redundancy). 當我們把“原始”的點陣圖直接輸出成 EPS(特別是 Level 1 EPS)等矢量格式的文件時,我們實際上是在保存一組“無比復雜”、幾乎逐點進行的圖形構造指令。這種指令本身不能提高圖形固有的信息量,其復雜性對我們大腦閱讀圖像也毫無用處,徒增存儲空間。

特別是,我們的正式投稿文件可能還多多少少需要接近“原始”的點陣圖,以便出版過程中各項處理的使用。而投到 arXiv 上的預印本如果只是供讀者較方便地“看看”,那么未壓縮的原始無損點陣圖就沒什么存在的意義了,這時將其有損壓縮很是劃得來。

最后,如果你的文件過大的原因不是這里講的這些,而是是因為用點陣格式保存了本應該用矢量格式保存的圖表,那么請為它們立刻重新創制矢量圖,而不是微調已有的點陣圖。這里說的點陣圖調整,僅限于圖像是“照相”類的情況。

選自:https://cma.lamost.org/2014/downsizing-oversized-arxiv-submissions 

分享到:
未經允許不得轉載:LaTeX 技巧 958:給過大的 arXiv 投稿文件“瘦身”
已有 條意見

    最新文章

    加載中...
      本站提供專業LaTeX排版、咨詢、定制服務,請點擊下圖咨詢詳情


      全國首個精品的LaTeX視頻教程,大牛帶著你入門,讓LaTeX學習不再糾結,請點擊下圖咨詢詳情

      熱門評論

        聯系我們

        交流QQ群:91940767
        本站QQ號:343083553
        郵箱聯系[email protected]
        淘寶店鋪https://shop240512713.taobao.com/ 提供排版,模板定制,培訓,圖片處理,視頻教程等LaTeX服務。

        關注我們微信公眾號

        如果您投稿或者希望加入我們團隊,請發送您的簡歷到[email protected]

        科技藝術的完美融合,專業精致的排版體驗

        聯系我們聯系我們
        飞艇人工免费计划下载