![Usando \leftskip como xleftmargin](https://rvso.com/image/472690/Usando%20%5Cleftskip%20como%20xleftmargin.png)
Estoy escribiendo texto con saltos hacia la izquierda variables (algunas secciones del texto tienen sangría hacia la derecha).
Por alguna razón, los listados no tienen en cuenta el salto hacia la izquierda de forma predeterminada. Sin embargo, tiene una propiedad xleftmargin que es interesante. Funciona adecuadamente cuando se le da un valor explícito, por ejemplo. 2 cm.
Sin embargo, parece que no puedo configurarlo para que sea igual a \leftskip. Probé diferentes variaciones, incluyendo
\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}
Pero fue en vano. Qué debería decir ? En MWE podría simplemente usar 5cm
, pero en realidad, \leftskip no siempre será el mismo.
Respuesta1
Asigne una nueva longitud que se establezca \leftskip
antes de lstlisting
que funcione; entonces podemos usarlo como valor para 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}
Respuesta2
Como señaló Ulrike Fischer en su comentario, \leftskip
se restablece mediante \begin{lstlisting}
.
Lo más cerca que puedo estar es crear un segundo registro de longitud con el mismo valor y usarlo. Esto significaría que debe actualizar ese registro cada vez que cambie \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}