我想将文件中的代码包含到我的文档中。但是,几个不同的行范围应该出现在同一个列表中。另外,我想使用 gobbling,最好包含一些空行。
如果我使用该listings
包,我可以使用选项linerange
来包含来自同一文件的多个行范围。但是,文件输入不支持吞噬,并且似乎输出中会以某种方式跳过单个空行(下面示例中的第 5 行)。
如果我使用minted
,我可以吞噬并包含空行。但是,每个命令我只能使用一个行范围\inputminted
。这样就没问题了(因为我对不同的行范围使用不同的吞噬距离),但是不同范围之间存在令人讨厌的间隙。我可以使用vspace
使其消失,但这并不总是有效(例如,如果页面由于某种原因被拉伸)。如果有这样的东西就好了,它可以识别出这些文件部分应该显示为连续的:
\begin{minted}
\pythonfile[firstline=5,lastline=7]{mymodule.py}
\pythonfile[firstline=16,lastline=17,firstnumber=last]{mymodule.py}
\pythonfile[gobble=4,firstline=22,lastline=23,firstnumber=last]{mymodule.py}
\end{minted}
这是我的最小工作示例:
\documentclass{article}
\usepackage{filecontents}
\usepackage{listings}
\usepackage{minted}
\begin{filecontents}{mymodule.py}
import numpy as np
def mymean(x, axis=0) :
''' Here I explain why I need my own mean function.
Suppose for instance that I want to use axis=0 as a default.
Keyword arguments:
axis -- the axis over which to compute the mean.
Return:
The mean.
'''
return np.mean(x, axis=axis)
def mystd(x) :
return np.std(x)
if __name__ == '__main__' :
x = np.random.randint(0,100,150)
print mymean(x)
print mystd(x)
\end{filecontents}
\newmintedfile{python}{frame=leftline,linenos}
\begin{document}
\section{Listings}
\lstinputlisting[frame=left,numbers=left,language=Python,linerange={5- 7,16-17,22-23}]{mymodule.py}
\section{Minted}
\pythonfile[firstline=5,lastline=7]{mymodule.py}
\pythonfile[firstline=16,lastline=17,firstnumber=last]{mymodule.py}
\pythonfile[gobble=4,firstline=22,lastline=23,firstnumber=last]{mymodule.py}
\end{document}