
Я хочу написать фрагмент кода 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}
.