我想将我编写的讲座书的所有代码片段以有序树结构导出为<chapter>/<section>/<some name or number>.<ext>
。代码采用各种语言(python、java、js、C 等),并在使用 创建的环境中使用 minted 格式化\newminted
。有没有办法在 LaTeX 中做到这一点?谢谢
(更新)添加代码示例:
\documentclass{article}
\usepackage{needspace}
\setlength{\parindent}{0pt}
\usepackage{minted}
\newcommand{\lang}[1]{%
\medskip%
\Needspace{2\baselineskip}%
\smash{\parbox{\linewidth}{\color{gray}\scriptsize%
\rule[2pt]{\linewidth}{0.4pt}\\%
\makebox[\linewidth]{\hfill\textsf{#1}}%
}}%
\vspace{-\partopsep}%
\vspace{-\baselineskip}%
}
\newenvironment{code}[3]{\VerbatimEnvironment
\lang{#2}%
\begin{minted}[#3]{#1}%
}{%
\end{minted}%
}
\begin{document}
Some text before the script.
\begin{code}{lisp}{$\lambda$ Lisp}{}
(if nil
(list 1 2 "foo")
(list 3 4 "bar"))
\end{code}
And a comment after it.
\end{document}
答案1
文件
\documentclass{article}
\usepackage{minted}
\makeatletter
\renewcommand{\minted@FVE@VerbatimOut}{%
\immediate\closeout\FV@OutFile\endgroup\@esphack
% copy not cp if using windows
\ShellEscape{cp \minted@jobname .pyg minted-\thesection.x}%
\setcounter{FancyVerbLine}{\value{minted@FancyVerbLineTemp}}}%
\begin{document}
\section{aaa}
\begin{minted}{python}
a=b
a=2
\end{minted}
\section{bbb}
\begin{minted}{python}
x=y
x=3
\end{minted}
\end{document}
将在当前目录中留下两个文件minted-1.x
和minted-2.x
,后面的部分-
是文件写入时的节号。(没有进行检查,因此如果某个节有两个铸造的块,则较早的块将被覆盖)
代码仅添加了一行来复制临时生成的文件,然后将其传递给 pygmentize 并删除。