標籤:

LaTeX -> dvips -> ps2pdf 編譯不成功是為什麼?

用的是 MiKTeX 2.9 + WinEdt 7.0,直接 LaTeX -&> DVIPDFMx 可以編譯,生成的清晰可見,但是用 LaTeX -&> dvips -&> ps2pdf 編譯時出現如下錯誤

ps2pdf returned Exit Code(255) indicating that some problems might have occured during the compilation

如何解決這個問題?


0

首先,這問題和 WinEdt 沒什麼關係。

其次,沒給代碼,所以也不好說一定是什麼問題。所以只能大概說一下。

1

這種問題常見於「插圖」,一些宏包(比如 hyperref 和 geometry)也有影響。不同的生成 PDF 文件的路徑,會用到不同的工具(我們稱之為「驅動」)。這裡給一個簡單的列表:

  • DVI - PS - PDF:LaTeX -&> dvips -&> ps2pdf,要用到 dvips 這個驅動
  • DVI - PDF: LaTeX -&> DVIPDFMx,要用到 DVIPDFMx 這個驅動
  • PDF (Directly): pdfLaTeX,驅動就是它自己(pdfTeX)
  • xDV - PDF: XeLaTeX -&> xDVIPDFMx,驅動是 xDVIPDFMx(默認自動調用)

常見的編譯方式,至少涉及到 dvips、DVIPDFMx、pdfTeX、xDVIPDFMx 四種驅動。這四種驅動對插圖、PDF 書籤、頁面紙張大小等內容進行處理的時候,語法有細微的差別。為了讓驅動正常工作,在 (pdf/Xe)LaTeX 編譯的時候,就必須讓相應的宏包按照驅動的要求工作。

2

現在的問題是,宏包怎麼知道應當怎麼工作?

如果你有注意到,就會發現,對於 pdfLaTeX 和 XeLaTeX 來說,能使用的驅動就只有一種情況;但是對於 LaTeX 來說,可以選擇 dvips 和 DVIPDFMx 兩種驅動。因此,如果用戶選擇 pdfLaTeX 或者 XeLaTeX 編譯,那麼宏包是可以自己檢測到的,此時不需要進行特別的設置。但是,如果用戶選擇 LaTeX 編譯,那麼宏包就不知道應該怎麼工作了。為了簡化代碼(也由於歷史原因),這些宏包在用戶使用 LaTeX 編譯的時候,「默認使用」dvips 這個驅動;而如果希望使用 DVIPDFMx 的話,就需要在載入宏包的時候以宏包選項的方式給出說明。

3

總結一下:

  • LaTeX - dvips:默認情況,可以不給驅動選項,也可以給驅動選項 dvips
  • LaTeX - DVIPDFMx:無法自動檢測,必須手工給出驅動選項 dvipdfm 或者 dvipdfmx (詳情查閱相應宏包文檔)
  • pdfLaTeX:可以自動檢測,因此可以不給驅動選項,也可以給驅動選項 pdftex
  • XeLaTeX:可以自動檢測,因此可以不給驅動選項,也可以給驅動選項 xetex

4

那麼什麼時候會出錯呢?

其實很簡單:當實際使用的驅動和宏包的工作模式(取決於驅動選項)不一致的時候,就會出錯。

比如,如果使用 usepackage[pdftex]{graphicx} 載入 graphicx 宏包,那麼就只能使用 pdfLaTeX 編譯。此時使用 LaTeX 或者 XeLaTeX 都會報錯。

又比如,如果使用 usepackage[dvipdfmx]{hyperref} 載入 hyperref 宏包,那麼就只能使用 LaTeX - DVIPDFMx 的方式編譯。此時使用 pdfLaTeX、XeLaTeX 或者 LaTeX - dvips 的話就會報錯。

更有甚者,如果是這樣子:

usepackage[pdftex]{graphicx}
usepackage[dvipdfmx]{hyperref}

兩個宏包使用的驅動選項不一致,那麼不管怎麼編譯,都會報錯。

喜歡「抄代碼」的新手,經常遇到這樣的問題:東抄抄西抄抄,結果兩個作者沒商量好,寫出來的代碼一個需要 pdfLaTeX 編譯,另一個需要 LaTeX - DVIPDFMx 編譯,於是就坑死了新手。

所以:代碼自己寫,不要抄代碼。

5

那麼題主遇到了什麼問題呢?

注意到,題主說 LaTeX - DVIPDFMx 方式可以正確編譯。這也就是說,啟用了宏包選項 dvipdfmx。這時候題主嘗試用 LaTeX - dvips - ps2pdf 的方式編譯,自然就會報錯了。

以上。

已存檔至:

驅動選項錯誤導致「returned exit code (1)」的錯誤


推薦閱讀:

你在 TeX Stack Exchange 看到過哪些令人驚嘆的回答?
在為知筆記本(wiz)里用 Latex 打黎曼曲率張量的那個R右下腳為什麼是扭曲的呢?
有沒有辦法在onenote (Mac)中使用latex命令輸入公式?
latex class與宏包的關係?

TAG:LaTeX |