Formatar código/pseudocódigo

Formatar código/pseudocódigo

Em um documento que contém muitas outras coisas, tenho o seguinte código que guardei literalmente (por falta de outras ideias). Como você pode ver, o alinhamento não parece tão bom.Imagem
Como posso torná-lo mais apresentável, para que fique mais legível, talvez com recuo (literalmente não parece lidar com espaços e tabulações)?

\documentclass[]{article}    
\begin{document}    
\begin{verbatim}    

    if (n == 0 || n == 1){    
    return n;        
    }        
    j = 0;    
    for (i = 0; i < n-1; i++){      
    if (arr[i] != arr[i+1]){        
    arr[j] = arr[i];       
    j++;      
    }       
    }      
    arr[j++] = arr[n-1];      


\end{verbatim}    
\end{document}    

Responder1

Algo assim?

\documentclass{book}
\usepackage{listings}

\lstdefinestyle{myListingStyle} 
    {
        basicstyle = \small\ttfamily,
        breaklines = true,
    }

\begin{document}

\begin{lstlisting}[
    style = myListingStyle,
    caption = {Nice listing.}
    ]
    if (n == 0 || n == 1){    
        return n;        
    }        
    j = 0;    
    for (i = 0; i < n-1; i++){      
        if (arr[i] != arr[i+1]){        
            arr[j] = arr[i];       
            j++;      
        }       
    }      
    arr[j++] = arr[n-1]; 
\end{lstlisting}

\end{document}

insira a descrição da imagem aqui

VerColoque um fundo cinza atrás das extrações de código em um documento Latex (como este site faz)por exemplo, para adicionar uma cor de fundo. Também é possível carregar o código de um arquivo externo – basta dar uma olhada nas questões relacionadas.

Responder2

Literalmente

Ao contrário do que você afirma em sua pergunta, literalmente suporta espaços e recuo, então por que não usá-lo?

literalmente

\documentclass[]{article}    
\begin{document}    
\begin{verbatim}
    if (n == 0 || n == 1){    
      return n;        
    }        
    j = 0;    
    for (i = 0; i < n-1; i++){      
      if (arr[i] != arr[i+1]){        
        arr[j] = arr[i];       
        j++;      
      }       
    }      
    arr[j++] = arr[n-1];
\end{verbatim}    
\end{document}    

Listagens

O listingspacote pode adicionar cores.

listagens

\documentclass[]{article}
\usepackage{listings}
\usepackage{xcolor}
\lstset{basicstyle=\ttfamily,language=c,keywordstyle=\color{blue}}
\begin{document}    
\begin{lstlisting}
    if (n == 0 || n == 1){    
      return n;        
    }        
    j = 0;    
    for (i = 0; i < n-1; i++){      
      if (arr[i] != arr[i+1]){        
        arr[j] = arr[i];       
        j++;      
      }       
    }      
    arr[j++] = arr[n-1];
\end{lstlisting}    
\end{document}    

Cunhado

O mintedpacote é ainda mais poderoso…

cunhado

% arara: pdflatex: {shell: yes}
\documentclass[]{article}
\usepackage{minted}
\begin{document}    
\begin{minted}{c}
    if (n == 0 || n == 1){    
      return n;        
    }        
    j = 0;    
    for (i = 0; i < n-1; i++){      
      if (arr[i] != arr[i+1]){        
        arr[j] = arr[i];       
        j++;      
      }       
    }      
    arr[j++] = arr[n-1];
\end{minted}    
\end{document}    

Listagem

É claro que você pode combiná-lo com tcolorbox ou qualquer outra coisa…

tcblisting

% arara: pdflatex: {shell: yes}
\documentclass[]{article}
\usepackage{minted}
\usepackage[minted]{tcolorbox}
\newtcblisting{mylisting}{listing only,listing engine=minted, minted language=c,colback=gray!20}
\begin{document}    
\begin{mylisting}
if (n == 0 || n == 1){    
  return n;        
}        
j = 0;    
for (i = 0; i < n-1; i++){      
  if (arr[i] != arr[i+1]){        
    arr[j] = arr[i];       
    j++;      
  }       
}      
arr[j++] = arr[n-1];
\end{mylisting}    
\end{document}    

Responder3

Como já foi dito por outros, verbatimfunciona para código (eu uso para esse fim). O problema que você vê é que você normalmente formata seu código com guias que verbatimsão ignoradas por algum motivo. Então, o que eu faço é colocar meu código em verbatimselecioná-lo e substituir as guias por, digamos, 4 (ou qualquer número) de espaços (mas apenas dentro da seleção).

informação relacionada