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.
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}
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?
\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 listings
pacote pode adicionar cores.
\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 minted
pacote é ainda mais poderoso…
% 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…
% 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, verbatim
funciona para código (eu uso para esse fim). O problema que você vê é que você normalmente formata seu código com guias que verbatim
são ignoradas por algum motivo. Então, o que eu faço é colocar meu código em verbatim
selecioná-lo e substituir as guias por, digamos, 4 (ou qualquer número) de espaços (mas apenas dentro da seleção).