Como posso usar o escapeinside em um ambiente cunhado com o bash lexer?

Como posso usar o escapeinside em um ambiente cunhado com o bash lexer?

A funcionalidade escapeinside não funciona corretamente com o bash lexer. Existe alguma maneira de corrigir isso?

MWE:

\documentclass{article}
\usepackage{minted}

\begin{document}

\begin{minted}[escapeinside=||]{bash}
#!/bin/bash
echo "Hello world!"
|\textrm{Some commentary here}|
\end{minted}

\end{document}

Saída da imagem de exemplo

Responder1

Isso acontece porque o lexer Bash redefine o código de gato da barra invertida \para lidar com sequências de escape do shell. Isso significa que ele não pode ser usado em uma sequência escapeinside para iniciar um comando.

Felizmente, uma solução alternativa é possível fazendooutrocaractere ativo e definindo-o usando csname para ativar seu argumento. É fundamental que o caractere selecionado não apareça em nenhum outro lugar do seu código criado. Para este exemplo, uso o ponto de interrogação ?. Ao invocar um comando, por exemplo \textrm{arg}, você irá invocar ?{textrm}{arg}, substituindo o ponto de interrogação pelo caractere que você escolheu.

É importante incluir tudo em \begingroup/ \endgrouppara garantir que a redefinição do catcode não afete o restante do seu 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 após fixação

informação relacionada