Cambiar la profundidad de sangría al usar espacios en lstlisting

Cambiar la profundidad de sangría al usar espacios en lstlisting

Tengo uno lstlistingque representa algunas líneas de código. El código tiene una sangría de cuatro espacios por sangría. ¿Existe alguna configuración para cambiar la sangría a solo dos espacios? Sé que lo hay, tabsizepero obviamente es para pestañas y me gustaría evitar cambiar el código en sí.

¿Alguna sugerencia?

Respuesta1

Un posible enfoque es utilizar la literateclave para reemplazar cada aparición de dos espacios consecutivos por un espacio.

Advertencias: este enfoque

  • realice dichos reemplazos "dentro" de líneas de código también (aunque no en cadenas literales),
  • interferir con la autogobbleopción (ofrecida por el lstautogobblepaquete), que se utiliza para eliminar espacios iniciales en un listado.

ingrese la descripción de la imagen aquí

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

información relacionada