Tengo uno lstlisting
que 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, tabsize
pero 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 literate
clave 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
autogobble
opción (ofrecida por ellstautogobble
paquete), que se utiliza para eliminar espacios iniciales en un listado.
\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}