我應該如何發現 LuaTeX 刪除了 \write18 ?

我應該如何發現 LuaTeX 刪除了 \write18 ?

我很努力不讓這聽起來像咆哮,但我現在很生氣。

我試圖使用 TikZ 外部化為我的論文創建散點圖。 TeX 記憶體的資料點太多,所以我切換到 LuaTeX。外部化不起作用。

(MWE 喜歡:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize
\begin{document}
\tikz\node{Hello};
\end{document}

我過去使用 MiKTeX 的經驗表明,更改-shell-escape-enable-write18可以產生影響,就像-enable-write18vs一樣--enable-write18。我花了半天的時間(記住,LuaTeX 編譯時間在 MiKTeX 上仍然慢了幾個數量級)試圖讓它工作並找出它不起作用的原因,改變了命令行以及tikz/external/shell escape.什麼都沒起作用。

今天我用谷歌搜索,找到了答案https://github.com/gpoore/minted/issues/112\write18: LuaTeX 裡就沒有了。你必須\usepackage{shellesc}再次將其添加回來。

我的問題是,我正在努力成為這裡的優秀用戶,並且始終使用 RTFM。我應該閱讀 TFM 的位置,以了解該功能已被刪除以及如何將其添加回來?為了避免花半天思考我做錯了什麼?這肯定不是一個完全不相關的包的 Github 問題嗎?

答案1

有點不幸的是,Christian Schenk 在新版本的二進位檔案(luatex在本例中)可用後立即在 MiKTeX 中進行了部署。

TeX Live 僅在每年的版本中更改(核心)二進位文件,並且在一年中不會修改它們(非常嚴重的錯誤除外,但這些錯誤通常在預測試階段發現)。

當 LuaTeX 0.87 發佈時,進行了許多更改,特別是關於\write18.如果你看乳膠新聞 24,2016 年 2 月發布,你會看到

在此輸入影像描述

並且

在此輸入影像描述

答案2

luatex的手冊提到了這個變化:

另外,我們不再支援 write18,因為 os.execute 也可以做同樣的事情。

但我非常懷疑,即使您讀過本文,您是否也能理解其中的含義,並且它可能會影響 tikzexternalize。

去年發生了變化,如果你搜尋這個網站,shellesc你會發現很多問題(也涉及 texlive,這不是 miktex 特定的問題,無法使用 lualatex 運行 tikz externalize,但它曾經可以工作)。但再說一次:即使你在這一年中看到了其中一個問題,我也不指望你能記住它們並意識到它們適用於你當前的問題。

那麼你能做什麼呢?一些提示:

  • 變化正在發生,尤其是像 luatex 這樣的新軟體。接受這一點。
  • 並不是每一個變化都是顯而易見的,可以透過閱讀手冊來了解。
  • 不要試圖獨自花上幾個小時來解決你的問題。搜尋一下,如果您感覺沒有任何進展,那麼最好花時間製作一個合理的最小範例,然後

答案3

如果使用軟體的測試版,最好遵循其開發管道,因為測試版中預計會發生重大變化。在進行更改之前,這已在 luatex 清單中進行了討論。 (luatex 中的所有重大變更並非如此:-)。例如 2015 年 11 月的這個帖子http://tug.org/pipermail/luatex/2015-November/005499.html

由於沒有關注郵件列表,這項變更在 ltnews 和 luatex 手冊中被標記。

也就是說,在理想的情況下,最終用戶根本不需要知道這一點,我們確實搜尋了 ctan 以\write18查找我們可以找到的所有用途,並嘗試聯繫軟體包開發人員來更新軟體包更改後的 luatex 分佈在主要發行版中。您提到的 minted github 問題就是其中一個例子。

仍然有一些套件需要最終用戶使用shellesc(或luatex85) 套件,這有點不幸,但這可能是 LaTeX 套件開發的分散特性不可避免的結果。當開發人員有時間或願意發布更新時,就會更新軟體包。

相關內容