Como alterar rapidamente o espaçamento do lstlisting para usar dois espaços em vez de quatro?

Como alterar rapidamente o espaçamento do lstlisting para usar dois espaços em vez de quatro?

Estou trabalhando em algumas listagens de código LaTeX e decidi alterar meu espaçamento de quatro para dois. O problema é que há uma tonelada de listagens no meu documento (que tem aproximadamente 500 páginas)... existe alguma maneira de reformatar rapidamente todas as listagens para usar dois espaços em vez de quatro/oito/doze/... ?

Responder1

Você pode usar a literatetecla para transformar quatro espaços consecutivos em dois espaços de saída:

\documentclass{article}

\usepackage{listings}
\lstset{literate={\ \ \ \ }{\space\space}{2}}

\begin{document}
\begin{lstlisting}[language=python]
if x is None:
    print('yes')
   # just a quick test that 3 spaces aren't touched
     # just a quick test that 5 spaces are touched
\end{lstlisting}
\end{document}

insira a descrição da imagem aqui

Blocos de oito espaços são iguais a dois blocos de quatro espaços, a substituição acima por meio da literatechave funcionará. Se precisar de mais substituições, você pode simplesmente adicioná-las, a literatechave aceita muitas regras de substituição arbitrárias como blocos de três argumentos (o que substituir, a substituição, o número de colunas virtuais que a substituição ocupará).

\documentclass{article}

\usepackage{listings}
\lstset
  {
    literate=
      {\ \ \ \ }{\space\space}{2}
      {yes}{no}{2}
  }

\begin{document}
\begin{lstlisting}[language=python]
if x is None:
    print('yes')
    if y is None:
        print('yes again')
   # just a quick test that 3 spaces aren't touched
     # just a quick test that 5 spaces are touched
\end{lstlisting}
\end{document}

insira a descrição da imagem aqui

informação relacionada