
Die Escapeinside-Funktionalität funktioniert mit dem Bash-Lexer nicht richtig. Gibt es eine Möglichkeit, das zu beheben?
MWE:
\documentclass{article}
\usepackage{minted}
\begin{document}
\begin{minted}[escapeinside=||]{bash}
#!/bin/bash
echo "Hello world!"
|\textrm{Some commentary here}|
\end{minted}
\end{document}
Antwort1
Dies liegt daran, dass der Bash-Lexer den Catcode für den Backslash neu definiert \
, um Shell-Escape-Sequenzen verarbeiten zu können. Dies bedeutet, dass er nicht in einer Escapeinside-Sequenz verwendet werden kann, um einen Befehl zu starten.
Glücklicherweise ist eine Problemumgehung möglich, indem manein andererZeichen aktiv und definieren Sie es mit csname, um sein Argument zu aktivieren. Es ist wichtig, dass das ausgewählte Zeichen nirgendwo sonst in Ihrem geprägten Code erscheint. Für dieses Beispiel verwende ich das Fragezeichen ?
. Wenn Sie beispielsweise einen Befehl aufrufen \textrm{arg}
, rufen Sie stattdessen auf ?{textrm}{arg}
und ersetzen das Fragezeichen durch das von Ihnen gewählte Zeichen.
Es ist wichtig, das Ganze mit \begingroup
/ einzuschließen \endgroup
, um sicherzustellen, dass die Catcode-Neudefinition keine Auswirkungen auf den Rest Ihres Dokuments hat.
\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}