Я набираю текст с разным отступом слева (некоторые разделы текста имеют отступ справа).
По какой-то причине listings не учитывает leftskip по умолчанию. Однако у него есть интересное свойство xleftmargin. Оно работает адекватно, если задано явное значение, например, 2 см.
Однако, я не могу сделать его равным \leftskip. Я пробовал разные варианты, включая
\documentclass{article}
\usepackage{listings}
\setlength{\leftskip}{5cm}
\begin{document}
totototo
\begin{lstlisting}[xleftmargin={\the\leftskip}]
def example_function():
print("Hello, world!")
\end{lstlisting}
\end{document}
Но безрезультатно. Что я должен сказать? В MWE я мог бы просто использовать 5cm
, но в реальности \leftskip не всегда будет одинаковым.
решение1
Выделяем новую длину, которая установлена \leftskip
до того, как lstlisting
начнет работать; затем мы можем использовать ее в качестве значения для xleftmargin
.
\documentclass{article}
\usepackage{listings}
\newlength{\keepleftskip}
\AtBeginEnvironment{lstlisting}{\setlength{\keepleftskip}{\leftskip}}
\lstset{xleftmargin=\keepleftskip}
\begin{document}
\noindent
totototo
\begin{lstlisting}
def example_function():
print("Hello, world!")
\end{lstlisting}
\setlength{\leftskip}{5cm}
\noindent
totototo
\begin{lstlisting}
def example_function():
print("Hello, world!")
\end{lstlisting}
\setlength{\leftskip}{1cm}
\noindent
totototo
\begin{lstlisting}
def example_function():
print("Hello, world!")
\end{lstlisting}
\end{document}
решение2
Как отметила Ульрике Фишер в своем комментарии, \leftskip
сбрасывается \begin{lstlisting}
.
Ближайшее, что я смог сделать, это создать второй регистр длины с тем же значением и использовать его. Это означало бы, что вам придется обновлять этот регистр каждый раз, когда вы меняете \leftskip
:
\documentclass{article}
\usepackage{listings}
\newlength{\leftskiphack}
\begin{document}
\setlength{\leftskip}{5cm}
\setlength{\leftskiphack}{\leftskip}
totototo
\begin{lstlisting}[xleftmargin=\the\leftskiphack]
def example_function():
print("Hello, world!")
\end{lstlisting}
\setlength{\leftskip}{8cm}
\setlength{\leftskiphack}{\leftskip}
totototo
\begin{lstlisting}[xleftmargin=\the\leftskiphack]
def example_function():
print("Hello, world!")
\end{lstlisting}
\end{document}