¿Cómo puedo usar escapeinside dentro de un entorno acuñado con bash lexer?

¿Cómo puedo usar escapeinside dentro de un entorno acuñado con bash lexer?

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}

Salida de imagen de ejemplo

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/ \endgrouppara 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}

Resultado después de arreglar

información relacionada