Формат Кода/Псевдокода

Формат Кода/Псевдокода

В документе, содержащем много других вещей, у меня есть следующий код, который я сохранил дословно (за неимением других идей). Как вы можете видеть, выравнивание выглядит не очень хорошо.Изображение
Как сделать его более презентабельным, чтобы он стал более читабельным, возможно, с отступами (похоже, verbatim не обрабатывает пробелы и табуляции)?

\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}    

решение1

Что-то вроде этого?

\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}

введите описание изображения здесь

ВидетьДобавьте серый фон для фрагментов кода в документе Latex (как это делает этот сайт)например, для добавления цвета фона. Также можно загрузить код из внешнего файла — просто посмотрите связанные вопросы.

решение2

Дословно

Вопреки тому, что вы утверждаете в своем вопросе, verbatim поддерживает пробелы и отступы, так почему бы не использовать его?

дословно

\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}    

Листинги

В listingsкомплект можно добавлять цвета.

списки

\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}    

Отчеканено

Пакет mintedеще более мощный…

отчеканенный

% 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}    

Tcblisting

Конечно, вы можете объединить его с tcolorbox или чем-то еще…

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}    

решение3

Как уже было сказано другими, verbatimработает для кода (я использую его для этой цели). Проблема, которую вы видите, заключается в том, что вы обычно форматируете свой код с помощью табуляции, которая verbatimпо какой-то причине игнорируется. Поэтому я помещаю свой код в verbatimselect и заменяю табуляции, скажем, на 4 (или любое количество, если на то пошло) пробелов (но только внутри выделения).

Связанный контент