如何在带有 bash 词法分析器的 minted 环境中使用 escapeinside?

如何在带有 bash 词法分析器的 minted 环境中使用 escapeinside?

escapeinside 功能无法与 bash 词法分析器正常配合使用。有什么方法可以修复此问题吗?

梅威瑟:

\documentclass{article}
\usepackage{minted}

\begin{document}

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

\end{document}

示例图像的输出

答案1

发生这种情况的原因是 Bash 词法分析器重新定义了反斜杠的 catcode\以处理 shell 转义序列。这意味着它不能在 escapeinside 序列中用于启动命令。

幸运的是,可以通过以下方法解决:其他字符处于活动状态并使用 csname 定义它以激活其参数。至关重要的是,所选字符不会出现在您的 minted 代码中的其他任何地方。对于此示例,我使用问号?。当调用命令时,例如\textrm{arg},您将改为调用?{textrm}{arg},将问号替换为您选择的字符。

\begingroup用/将整个内容括起来很重要,\endgroup以确保 catcode 重新定义不会影响文档的其余部分。

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

修复后结果

相关内容