フォーマットコード/疑似コード

フォーマットコード/疑似コード

他にもたくさんの内容を含むドキュメントの中に、次のコードをそのまま残しています (他にアイデアがないため)。ご覧のとおり、配置はあまり良くありません。画像
インデントなどを使って、より見やすく、読みやすくするにはどうすればよいでしょうか (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何らかの理由で無視されることです。 そのため、私はコードをverbatim選択してタブを 4 個 (または任意の数) のスペース (ただし、選択範囲内のみ) に置き換えます。

関連情報