
Deseo escribir un fragmento de código LaTeX en un documento y, por lo tanto, cargué el paquete acuñado. Pero al compilar, apareció el siguiente error:
! Error de paquete acuñado: debe invocar LaTeX con el indicador -shell-escape. Consulte la documentación del paquete acuñado para obtener una explicación.
¡Por favor ayúdenme con este problema!
¡Gracias de antemano!
Respuesta1
Dado que el paquete acuñado requiere acceso al shell, esto debería estar permitido en su editor. Para hacerlo, debe agregar -shell-escape
a su lista de comandos para LaTex, PdfLaTex, XeLaTex y LuaLaTex en su editor. En "TexWorks", modifique esos comandos yendo a "Opciones > Configurar TexWorks > Comandos", cambie los siguientes comandos agregando -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 con pdflatex y shellescape habilitados
La consola se mostrará \write18 enabled
una vez que se ejecute lo anterior en un archivo.
O
También puede guardar el código en un archivo tex (digamos que lo nombró testMinted.tex
) y compilarlo desde la línea de comando ingresando a la carpeta donde reside el archivo (digamos que está en C:\Users\uqapourm\Desktop\testMinted
) y ejecutándolo pdflatex.exe -shell-escape -synctex=1 -interaction=nonstopmode testMinted.tex
en la línea de comando.
SEGURIDAD
A veces, es útil poder ejecutar comandos externos desde el interior del archivo tex: permite, por ejemplo, externalizar algunas composiciones tipográficas o utilizar herramientas externas como bibtex. Esto está disponible a través de la \write18
primitiva tex.
The problem is that it allows for almost everything.
Un archivo tex está destinado a ser portátil y no hay que temer ningún problema de seguridad al compilar un archivo de terceros. Por defecto, esta primitiva está deshabilitada.
Si un usuario necesita usarlo, debe decirle explícitamente al compilador que confía en el autor del archivo con la interacción del shell, y ese es exactamente el objetivo del --shell-escape
argumento opcional.
Durante años \write18
se ha utilizado como puerta trasera del sistema operativo. Sintácticamente, TeX lo trata como si se escribiera en un archivo, pero register 18
se lo trata como un archivo preabierto que de hecho ejecuta comandos.
"sin restricciones" write18
significa que puede ejecutar cualquier comando, por lo que si lo permite y ejecuta un archivo TeX que alguien le envió, puede ejecutar código arbitrario, enviar su archivo de contraseña por correo electrónico a un robot de spam o lo que sea.
Obviamente, esto es un riesgo de seguridad, pero hay algunos comandos que son naturalmente parte de la distribución de Tex y que es posible que desee permitir siempre (como la conversión de imágenes y fuentes), por lo que web2c le permite a usted (o a los mantenedores de texlive de forma predeterminada) configurar un conjunto de comandos "permitidos y seguros" y estos pueden ejecutarse en modo restringido.
La tercera alternativa es no ejecutar nunca ningún comando desde \write18
.
¿Qué significa "restringido \write18 habilitado" y por qué TexLive sigue informándolo?
¿Cómo habilitar Shell-escape en TeXworks?
PD
A veces, es necesario borrar el caché para que el paquete funcione. Esto ralentizará la operación, pero evitará errores. Para hacerlo, agregue la opción a \usepackage[cache=false]{minted}
.