Estou compondo texto com vários saltos para a esquerda (algumas seções do texto são recuadas para a direita).
Por alguma razão, as listagens não levam em conta o leftskip por padrão. No entanto, possui uma propriedade xleftmargin que é interessante. Funciona adequadamente quando recebe um valor explícito, por exemplo. 2cm.
No entanto, não consigo defini-lo como igual a \leftskip. Eu tentei diferentes variações, incluindo
\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}
Mas sem sucesso. O que deveria dizer ? No MWE eu poderia usar apenas 5cm
, mas na realidade \leftskip nem sempre será o mesmo.
Responder1
Aloque um novo comprimento que é definido \leftskip
antes lstlisting
de funcionar; então podemos usá-lo 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}
Responder2
Como Ulrike Fischer apontou em seu comentário, \leftskip
é redefinido por \begin{lstlisting}
.
O mais próximo que consegui foi criar um segundo registro de comprimento com o mesmo valor e usá-lo. Isso significaria que você teria que atualizar esse registro cada vez que mudar \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}