使用 minted 格式化从文件中提取的代码片段

使用 minted 格式化从文件中提取的代码片段

我想使用catchfilebetweentags包从源文件中获取代码片段并使用minted来突出显示它们。

想象一下,我有以下内容program.scala

//<a
def someFunctionA = {
  // some code
}
//a>

def aFunctionIDontCareAbout = {
  // irrelevant stuff
}

//<b
def someFunctionB = {
  // important code!
}
//b>

以及以下 LaTeX 文档:

\documentclass{article}
\usepackage{minted}
\usepackage{catchfilebetweentags}

\begin{document}

% Nicely formatted snippet:
\begin{minted}{scala}
  def someNicelyHighlightedFunction = {
    // not from the file
  }
\end{minted}

% Expanding, but unformatted snippet:
\CatchFileBetweenDelims{\a}{program.scala}{<a}{//a>}
\a

% Non-expanding snippet inside minted environment:
\CatchFileBetweenDelims{\b}{program.scala}{<b}{//b>}
\begin{minted}{scala}
  \b
\end{minted}

\end{document}

有什么方法可以让我\b扩展verbatim所使用的环境内部minted

(我没有承诺catchfilebetweentagsminted特别承诺,但我确实需要皮格门特斯突出显示提取的代码片段。

答案1

catchfilebetweentags使用 catcode 会变得很棘手。由于您已经fancyvrb加载、启用\write18(shell 转义)并且拥有 Python(使用 Pygments),我建议使用纯 Python 解决方案。这是为不需要通过 LaTeX 或 Python 转义的标签设计的,尽管它可以进行调整。

基本思路是使用fancyvrb创建VerbatimOut一个 Python 脚本,该脚本将读取您的代码并将相关部分保存在临时文件中。此脚本通过 自动执行\write18。然后通过 读取临时minted文件\inputminted

在此处输入图片描述

\documentclass{article}
\usepackage{minted}

\begin{VerbatimOut}{minted_delim.py}
import sys
codefile = sys.argv[1]
delim1 = sys.argv[2]
delim2 = sys.argv[3]
f = open(codefile)
code = f.read()
f.close()
f = open(codefile + '.snippet', 'w')
try:
    f.write(code.split(delim1, 1)[1].split(delim2, 1)[0])
except:
    f.write('MINTED DELIM ERROR')
f.close()
\end{VerbatimOut}

\newcommand{\inputmintedbetweendelims}[5][]{%
  \immediate\write18{python minted_delim.py "#3" "#4" "#5"}%
  \inputminted[#1]{#2}{#3.snippet}%
}

\begin{document}

\begin{minted}{scala}
  def someNicelyHighlightedFunction = {
    // not from the file
  }
\end{minted}

\inputmintedbetweendelims{scala}{program.scala}{<b}{//b>}


\end{document}

相关内容