Alterar a profundidade do recuo ao usar espaços no lstlisting

Alterar a profundidade do recuo ao usar espaços no lstlisting

Eu tenho um lstlistingque renderiza algumas linhas de código. O código é recuado por quatro espaços por recuo. Existe alguma configuração para alterar o recuo para apenas dois espaços? Eu sei que existe, tabsizemas obviamente é para guias e gostaria de evitar alterar o código em si.

Alguma sugestão?

Responder1

Uma abordagem possível é usar a literatechave para substituir cada ocorrência de dois espaços consecutivos por um espaço.

Ressalvas: esta abordagem irá

  • execute essas substituições "dentro" de linhas de código também (embora não em literais de string),
  • interfere na autogobbleopção (oferecida pelo lstautogobblepacote), que é usada para remover espaços iniciais em uma listagem.

insira a descrição da imagem aqui

\documentclass{article}

\setlength\parindent{0pt}

\usepackage{listings}
\usepackage{filecontents}

% code available at http://docs.python.org/2/tutorial/classes.html
\begin{filecontents*}{samplecode.py} 
class MyClass:
    """A simple example     class"""
    i = 12345
    def f(self):
        return 'hello world'
\end{filecontents*}

\lstdefinestyle{Python2}
{
    language=Python,
    literate = *{\ \ }{\ }1, %replaces each occurence of two consecutive spaces by one
}

\begin{document}
Indent = 4 spaces (as in the original listing)
\lstinputlisting[language=Python,frame=single]{samplecode.py}
Indent = 2 spaces
\lstinputlisting[style=Python2,frame=single]{samplecode.py}
\end{document}

informação relacionada