
Desejo escrever um trecho de código LaTeX em um documento e, portanto, carreguei o pacote criado. Mas ao compilar apareceu o seguinte erro:
! Erro criado pelo pacote: você deve invocar o LaTeX com o sinalizador -shell-escape. Consulte a documentação do pacote cunhado para obter explicação.
Por favor, me ajude com esse problema!
Desde já, obrigado!
Responder1
Como o pacote cunhado requer acesso ao shell, isso deve ser permitido em seu editor. Para fazer isso, você deve adicionar -shell-escape
à sua lista de comandos LaTex, PdfLaTex, XeLaTex e LuaLaTex em seu editor. Em “TexWorks” modifique esses comandos indo em “Opções > Configurar TexWorks > Comandos” altere os seguintes comandos adicionando -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 com pdflatex e shellescape habilitados
O console será exibido \write18 enabled
assim que o procedimento acima for executado em um arquivo
OU
Você também pode salvar o código em um arquivo tex (digamos que você o nomeou testMinted.tex
) e compilá-lo a partir da linha de comando, indo para a pasta onde o arquivo reside (digamos que esteja em C:\Users\uqapourm\Desktop\testMinted
) e executando pdflatex.exe -shell-escape -synctex=1 -interaction=nonstopmode testMinted.tex
na linha de comando.
SEGURANÇA
Às vezes, é útil poder executar comandos externos de dentro do arquivo tex: permite, por exemplo, externalizar alguma composição tipográfica ou usar ferramentas externas como o bibtex. Isto está disponível através da \write18
primitiva tex.
The problem is that it allows for almost everything.
Um arquivo tex deve ser portátil e não se deve temer nenhum problema de segurança ao compilar um arquivo de terceiros. Portanto, por padrão, esta primitiva está desabilitada.
Se um usuário precisar usá-lo, ele precisará informar explicitamente ao compilador que confia no autor do arquivo com a interação do shell, e esse é exatamente o objetivo do --shell-escape
argumento opcional.
Durante anos \write18
tem sido usado como uma porta dos fundos para o sistema operacional. Sintaticamente, o TeX o trata como uma gravação em um arquivo, mas register 18
é tratado como um arquivo pré-aberto que na verdade executa comandos.
"irrestrito" write18
significa que você pode executar qualquer comando, portanto, se você permitir isso e executar um arquivo TeX que alguém lhe enviou, ele poderá executar código arbitrário, enviar seu arquivo de senha por e-mail para um bot de spam ou qualquer outra coisa.
Isso é obviamente um risco de segurança, mas existem alguns comandos que fazem naturalmente parte da distribuição Tex que você pode querer sempre permitir (como conversão de imagem e fonte), então o web2c permite que você (ou os mantenedores do texlive por padrão) configure um conjunto de comandos "permitidos e seguros" e estes podem ser executados em modo restrito.
A terceira alternativa é nunca executar comandos do \write18
.
O que significa "\write18 restrito habilitado" e por que o TexLive continua reportando isso?
Como habilitar o shell-escape no TeXworks?
PS
Às vezes, você precisa limpar o cache para que o pacote funcione. Isso tornará a operação mais lenta, mas evitará erros. Para fazer isso, adicione a opção a \usepackage[cache=false]{minted}
.