格式代碼/偽代碼

格式代碼/偽代碼

在包含許多其他內容的文件中,我有以下程式碼,我逐字保留了這些程式碼(由於缺乏其他想法)。正如您所看到的,對齊看起來不太好。影像
我如何使它更美觀,以便它變得更具可讀性,也許帶有縮排(逐字記錄似乎不處理空格和製表符)?

\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

逐字

與您在問題中聲稱的相反,逐字支持空格和縮進,那麼為什麼不使用它呢?

逐字

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

清單

你當然可以將它與 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 個(或任何數量的)空格替換製表符(但只是在選擇範圍內)。

相關內容