
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}
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
/ \endgroup
para 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}