\inputminted: partes distintas do arquivo em uma listagem (equivalente ao intervalo de linhas nas listagens)

\inputminted: partes distintas do arquivo em uma listagem (equivalente ao intervalo de linhas nas listagens)

Quero incluir o código de um arquivo em meu documento. No entanto, vários intervalos de linhas distintos devem aparecer na mesma listagem. Além disso, quero usar devoração e seria bom incluir algumas linhas em branco.

Se eu usar o listingspacote, posso usar a opção linerangede incluir vários intervalos de linhas do mesmo arquivo. No entanto, devorar não é suportado para entradas de arquivo e parece que linhas vazias únicas são ignoradas de alguma forma na saída (linha 5 nos exemplos abaixo).

Se eu usar minted, posso devorar e incluir linhas vazias. No entanto, só posso usar um intervalo de linhas por \inputmintedcomando. Isso seria bom (porque eu uso diferentes distâncias de devoração para diferentes intervalos de linha), mas há uma lacuna desagradável entre os diferentes intervalos. Posso usar vspacepara fazê-lo desaparecer, mas nem sempre funciona (por exemplo, se a página for esticada por algum motivo). Seria bom ter algo assim, que reconhecesse que essas partes do arquivo deveriam ser mostradas como contínuas:

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

Aqui está meu exemplo mínimo de trabalho:

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

insira a descrição da imagem aqui

informação relacionada