使用 minted 套件在文件中編寫 LaTeX 程式碼片段時發生錯誤

使用 minted 套件在文件中編寫 LaTeX 程式碼片段時發生錯誤

我希望在文檔中編寫 LaTeX 程式碼片段,因此我載入了 minted 套件。但編譯時,出現以下錯誤:

!包鑄造錯誤:您必須使用 -shell-escape 標誌呼叫 LaTeX。請參閱 minted 包文件以取得解釋。

請幫我解決這個問題!

先致謝!

答案1

由於 minted 套件需要存取 shell,因此您的編輯器應該允許這樣做。為此,您必須-shell-escape在編輯器中新增 LaTex、PdfLaTex、XeLaTex 和 LuaLaTex 的命令清單。在「TexWorks」中,透過進入「選項>設定TexWorks>指令」來修改這些指令,透過新增下列指令來變更-shell-escape

latex.exe -shell-escape -src -interaction=nonstopmode %.tex
pdflatex.exe -shell-escape -synctex=1 -interaction=nonstopmode %.tex
xelatex.exe -shell-escape -synctex=1 -interaction=nonstopmode %.tex
lualatex.exe -shell-escape -synctex=1 -interaction=nonstopmode %.tex

啟用 pdflatex 和 shellescape 的 TeXworks

在此輸入影像描述

\write18 enabled在文件上運行上述命令後,控制台將顯示

或者

您也可以將程式碼保存在 tex 檔案中(假設您將其命名為testMinted.tex),然後透過進入檔案所在的資料夾(假設它位於C:\Users\uqapourm\Desktop\testMinted)並pdflatex.exe -shell-escape -synctex=1 -interaction=nonstopmode testMinted.tex在命令列中運行來從命令列編譯它。

安全

有時,能夠從 tex 檔案內部執行外部命令很有用:例如,它允許外部化某些排版,或使用 bibtex 等外部工具。這可以透過\write18tex 原語獲得。

The problem is that it allows for almost everything.

tex 檔案應該是可移植的,在編譯第三方檔案時不必擔心任何安全性問題。因此預設情況下,該原語是禁用的。

如果使用者需要使用它,他需要明確地告訴編譯器他透過 shell 互動信任檔案的作者,而這正是可選參數的要點--shell-escape

多年來\write18一直被用作操作系統的後門。從語法上來說,TeX 將其視為寫入文件,但register 18實際上將其視為執行命令的預先開啟文件。

「無限制」write18意味著您可以執行任何命令,因此如果您允許此操作並運行某人發送給您的TeX 文件,它可能會執行任意程式碼,將您的密碼文件透過電子郵件發送給垃圾郵件機器人或其他任何東西。

這顯然是一個安全風險,但是有一些命令自然是 Tex 發行版的一部分,您可能希望始終允許它們(例如圖像和字體轉換),因此 web2c 允許您(或預設的 texlive 維護者)設定一組「允許的、安全的」命令,並且允許這些命令在受限模式下運行。

第三種選擇是根本不從 執行指令\write18

「restricted \write18enabled」是什麼意思以及為什麼 TexLive 不斷報告它?

如何在 TeXworks 中啟用 shell 轉義?

聚苯乙烯

有時,您需要清除快取才能使套件正常運作。這會減慢操作速度,但可以避免錯誤。為此,請將選項新增至\usepackage[cache=false]{minted}.

相關內容