Verwenden von \leftskip als xleftmargin

Verwenden von \leftskip als xleftmargin

Ich setze Text mit variierendem Linkssprung (einige Abschnitte des Textes sind nach rechts eingerückt).

Aus irgendeinem Grund wird „leftskip“ in Listings standardmäßig nicht berücksichtigt. Es gibt jedoch eine interessante Eigenschaft „xleftmargin“. Sie funktioniert einwandfrei, wenn ein expliziter Wert angegeben wird, z. B. 2 cm.

Ich kann es jedoch nicht auf \leftskip setzen. Ich habe verschiedene Varianten ausprobiert, darunter

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

Aber ohne Erfolg. Was soll ich sagen? Im MWE könnte ich einfach verwenden 5cm, aber in Wirklichkeit wird \leftskip nicht immer dasselbe sein.

Antwort1

Weisen Sie eine neue Länge zu, die auf eingestellt ist, \leftskipbevor lstlistingihre Arbeit beginnt; dann können wir sie als Wert für verwenden 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}

Bildbeschreibung hier eingeben

Antwort2

Wie Ulrike Fischer in ihrem Kommentar hervorhob, \leftskipwird durch zurückgesetzt \begin{lstlisting}.

Das Beste, was ich erreichen könnte, ist, ein zweites Längenregister mit demselben Wert zu erstellen und dieses zu verwenden. Das würde bedeuten, dass Sie dieses Register bei jeder Änderung aktualisieren müssen \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}

verwandte Informationen