\inputminted: отдельные части файла в одном листинге (эквивалентно linerange в листингах)

\inputminted: отдельные части файла в одном листинге (эквивалентно linerange в листингах)

Я хочу включить код из файла в свой документ. Однако в одном и том же листинге должны появиться несколько отдельных диапазонов строк. Кроме того, я хочу использовать поглощение, и было бы неплохо включить несколько пустых строк.

Если я использую 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}

введите описание изображения здесь

Связанный контент