ifetex 始終為真

ifetex 始終為真

pdlatex我正在編寫一個文檔序言,它允許我使用和 來編譯文檔xelatex。我發現\ifetex檢查文件是否通過 e-tex 的條件始終為 true,與我使用的引擎無關。

下面是一個最小的例子。該eTeX used ...部分位於與我使用的引擎無關的所有結果文件中:pdflatex、 xelatexlatex. 「使用的 PDF...」部分僅存在於已執行的文件中pdflatex

有任何想法嗎?我的想法是否有普遍錯誤?

的文檔\ifetex說它只是測試\eTeXversion.這個是誰規定的?

我正在安裝 Fedora 19,並且還在完全沒有安裝 etex 的 Fedora 20 上進行了嘗試——同樣的行為。有人可以在不同的安裝中測試這個,即行為是否相同?

如果我希望(需要)能夠透過任何主要引擎運行文檔,是否有在文檔序言中進行引擎選擇的「最佳實踐」?所以我的意思是建立一個 if(pdf)-elsif(etex)-elsif(latex)-fi 鏈。

\documentclass{article}

\usepackage{ifpdf}
\usepackage{ifetex}

\begin{document}

Hello World

\ifpdf
    PDF used
\fi

\ifetex
    eTeX used; version is \the\eTeXversion \the\eTeXversion
\fi

\end{document}

答案1

e-TeX 擴展於 1999 年最終確定,可在通用引擎中使用:pdfTeX、LuaTeX 和 XeTeX。對於最近的 TeX 系統(例如過去 5-8 年發布的任何東西),擴充功能在 LaTeX 格式檔案中作為標準啟用。未啟用擴充功能的唯一「常見」情況是使用「經典」TeX 時:

tex <filename>

因為它們不是 Knuth 原始設計的一部分,並且tex總是引用它。

很有可能建立一種沒有擴展名的格式,或者在舊的 TeX 系統上運行,這要么需要明確地要求它們(elatex,ETC。)或根本沒有(例如某些專有系統)。

擴展本身仍然作為針對 Knuth's TeX 的補丁進行維護,因此它們具有獨立於引擎的版本(pdfTeX,ETC。) 正在使用。所有啟用 e-TeX 原語的系統都包含 e-TeX 擴充的版本字串。因此,這個原語是對可用擴展的良好測試。 (注意:使用 LuaTeX 可以在沒有 的情況下啟用擴展\eTeXversion,但在實踐中極不可能,而且並不值得擔心。)

答案2

好吧,解決方法很簡單。

\usepackage{ifetex} -> \usepackage{if**x**etex}

\ifetex -> \ifxetex

對困惑感到抱歉 :-)

相關內容