У меня есть , lstlisting
который отображает несколько строк кода. Код имеет отступ в четыре пробела на отступ. Есть ли какая-либо настройка, чтобы изменить отступ только на два пробела? Я знаю, что есть, tabsize
но это, очевидно, для табуляции, и я хотел бы избежать изменения самого кода.
Какие-либо предложения?
решение1
Один из возможных подходов — использовать literate
ключ для замены каждого вхождения двух последовательных пробелов одним пробелом.
Предостережения: этот подход будет
- выполнять такие замены также «внутри» строк кода (хотя и не в строковых литералах),
- вмешиваться в
autogobble
опцию (предлагаемую пакетомlstautogobble
), которая используется для удаления начальных пробелов в листинге.
\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}