Formatcode/Pseudocode

Formatcode/Pseudocode

In einem Dokument, das eine Menge anderer Sachen enthält, habe ich den folgenden Code, den ich wörtlich beibehalten habe (mangels anderer Ideen). Wie Sie sehen, sieht die Ausrichtung nicht so gut aus.Bild
Wie kann ich es ansprechender gestalten, sodass es besser lesbar ist, vielleicht durch Einrückungen (Verbatim scheint mit Leerzeichen und Tabulatoren nicht klarzukommen)?

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

Antwort1

Etwas wie das?

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

Bildbeschreibung hier eingeben

SehenSetzen Sie einen grauen Hintergrund hinter Codeauszüge in einem Latex-Dokument (wie es diese Site tut)zum Beispiel zum Hinzufügen einer Hintergrundfarbe. Es ist auch möglich, den Code aus einer externen Datei zu laden – sehen Sie sich einfach die verwandten Fragen an.

Antwort2

Wörtlich

Im Gegensatz zu Ihrer Behauptung in der Frage unterstützt Verbatim Leerzeichen und Einrückungen. Warum also nicht nutzen?

wörtlich

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

Notierung

Dem listingsPaket können Farben hinzugefügt werden.

Inserate

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

Geprägt

Das mintedPaket ist noch leistungsfähiger …

geprägt

% 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

Sie können es natürlich mit tcolorbox oder etwas anderem kombinieren …

Abonnieren

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

Antwort3

Wie bereits von anderen erwähnt, verbatimfunktioniert es für Code (ich verwende es für diesen Zweck). Das Problem, das Sie sehen, ist, dass Sie Ihren Code normalerweise mit Tabulatoren formatieren, die verbatimaus irgendeinem Grund ignoriert werden. Ich füge meinen Code also in verbatim„select it“ ein und ersetze die Tabulatoren durch beispielsweise 4 (oder eine beliebige Anzahl) Leerzeichen (aber nur innerhalb der Auswahl).

verwandte Informationen