
La funcionalidad escapeinside no funciona correctamente con bash lexer. ¿Hay alguna forma de arreglar esto?
MWE:
\documentclass{article}
\usepackage{minted}
\begin{document}
\begin{minted}[escapeinside=||]{bash}
#!/bin/bash
echo "Hello world!"
|\textrm{Some commentary here}|
\end{minted}
\end{document}
Respuesta1
Esto sucede porque Bash lexer redefine el código cat para la barra invertida \
para poder manejar las secuencias de escape del shell. Esto significa que no se puede utilizar en una secuencia de escape interior para iniciar un comando.
Afortunadamente, es posible encontrar una solución haciendootrocarácter activo y definiéndolo usando csname para activar su argumento. Es fundamental que el carácter seleccionado no aparezca en ningún otro lugar de su código acuñado. Para este ejemplo, utilizo el signo de interrogación ?
. Al invocar un comando, por ejemplo \textrm{arg}
, en su lugar invocarás ?{textrm}{arg}
, reemplazando el signo de interrogación con el carácter que hayas elegido.
Es importante incluir todo con \begingroup
/ \endgroup
para garantizar que la redefinición del código cat no afecte al resto de su documento.
\documentclass{article}
\usepackage{minted}
\begin{document}
\begingroup
% REPLACE THE ? WITH YOUR CHOSEN CHARACTER ON BOTH OF THE FOLLOWING LINES
\catcode`\?=\active
\def?#1{\csname #1\endcsname}
\begin{minted}[escapeinside=||]{bash}
#!/bin/bash
echo "Hello world!"
|?{textrm}{Some commentary here}|
\end{minted}
\endgroup
\end{document}