Ошибка при использовании пакета minted для записи фрагмента кода LaTeX в документ

Ошибка при использовании пакета minted для записи фрагмента кода LaTeX в документ

Я хочу написать фрагмент кода LaTeX в документе, поэтому я загрузил пакет minted. Но при компиляции выскочила следующая ошибка:

! Пакет minted Ошибка: необходимо вызвать LaTeX с флагом -shell-escape. См. документацию пакета minted для объяснений.

Пожалуйста, помогите мне с этой проблемой!

Заранее спасибо!

решение1

Поскольку пакет minted требует доступа к оболочке, это должно быть разрешено в вашем редакторе. Для этого вам нужно добавить -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

TeXworks с включенными pdflatex и shellescape

введите описание изображения здесь

Консоль отобразится \write18 enabledпосле запуска вышеуказанного файла

ИЛИ

Вы также можете сохранить код в tex-файле (допустим, вы назвали его testMinted.tex) и скомпилировать его из командной строки, перейдя в папку, где находится файл (допустим, C:\Users\uqapourm\Desktop\testMinted), и запустив pdflatex.exe -shell-escape -synctex=1 -interaction=nonstopmode testMinted.texв командной строке.

БЕЗОПАСНОСТЬ

Иногда полезно иметь возможность запускать внешние команды из файла tex: это позволяет, например, вынести некоторые наборы текста за пределы файла или использовать внешние инструменты, такие как bibtex. Это доступно через \write18примитив tex.

The problem is that it allows for almost everything.

Файл tex должен быть переносимым, и не стоит опасаться проблем с безопасностью при компиляции стороннего файла. Поэтому по умолчанию этот примитив отключен.

Если пользователю необходимо его использовать, ему необходимо явно сообщить компилятору, что он доверяет автору файла взаимодействие с оболочкой, и именно в этом смысл необязательного --shell-escapeаргумента.

Годами \write18использовался как бэкдор в операционную систему. Синтаксически TeX рассматривает его как запись в файл, но register 18рассматривается как предварительно открытый файл, который на самом деле выполняет команды.

«неограниченный» write18означает, что вы можете выполнить любую команду, поэтому, если вы разрешите это и запустите файл TeX, который вам кто-то прислал, он может выполнить произвольный код, отправить ваш файл паролей спам-боту или что-то еще.

Это, очевидно, представляет угрозу безопасности, но есть некоторые команды, которые являются естественной частью дистрибутива Tex, и вы, возможно, захотите всегда разрешать их выполнение (например, преобразование изображений и шрифтов), поэтому web2c позволяет вам (или разработчикам texlive по умолчанию) настроить набор «разрешенных, безопасных» команд, и их можно запускать в ограниченном режиме.

Третий вариант — вообще никогда не выполнять команды из \write18.

Что означает «ограниченный \write18 включен» и почему TexLive продолжает сообщать об этом?

Как включить shell-escape в TeXworks?

ПС

Иногда, чтобы пакет заработал, нужно очистить кэш. Это замедлит работу, но позволит избежать ошибок. Для этого добавьте опцию в \usepackage[cache=false]{minted}.

Связанный контент