So formatieren Sie einen Algorithmus mit lstlisting

So formatieren Sie einen Algorithmus mit lstlisting

Ich schreibe einen Algorithmus mit lstlisting:

 \lstset{language=C++} 
    \begin{lstlisting}[frame=single,caption=Algorithme de la méthode "HOG+SVM"]
    HOGDescriptor hog;\\
    hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());\\
    while(1)
    {
        Mat image=imread("image.jpg");
        vecor<Rect> detected_persons;
        hog.detectMultiScale(image,detected_persons, 0, Size(8,8), Size(32,32), 1.05, 2);
        for(int i=0;i<detected_persons.size();i++)
            {
                rectangle(image, detected_persons[i], cv::Scalar(0,255,0),1,8,0);
            }
        imshow("image",image);
    }
    \end{lstlisting}

Aber mit diesem Algorithmus habe ich folgende Ausgabe erhalten: AnzeigeWie kann man das beheben?

Antwort1

Wie Sie bemerkt haben, sieht die lstlistingUmgebung bei langen Zeilen nicht immer gut aus. Es gibt Alternativen (z. B. minted), aber Sie können die lstlistingAusgabe anpassen, damit sie besser aussieht.

So kann man beispielsweise die Grundgröße auf klein setzen, Zeilen umbrechen (und als solches kennzeichnen), Einrückungen verkleinern. Das folgende MWE wurde zusammengeflickt ausListings: Tabulatorgröße festlegen und gleichzeitig Leerzeichen für Einrückungen in der geladenen Datei verwenden funktioniert nichtUnd lstlisting Zeilenumbruchund manuelles Entfernen der Einrückung der obersten Ebene.

\documentclass{article}
\usepackage{amsmath}
\usepackage{xcolor}
\usepackage{listings}
\lstset{
    language=C++,
    basicstyle=\small,       % font size
    breaklines=true,         % line wrap
    postbreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\color{red}\hookrightarrow\space}},        % arrow on wrapped lines
    literate={\ \ }{{\ }}1   % adjust tab size
}
\begin{document} 
    \begin{lstlisting}[frame=single,caption=Algorithme de la m\'{e}thode "HOG+SVM"]
HOGDescriptor hog;
hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());
while(1)
{
    Mat image=imread("image.jpg");
    vecor<Rect> detected_persons;
    hog.detectMultiScale(image,detected_persons, 0, Size(8,8), Size(32,32), 1.05, 2);
    for(int i=0;i<detected_persons.size();i++)
        {
            rectangle(image, detected_persons[i], cv::Scalar(0,255,0),1,8,0);
        }
    imshow("image",image);
}
\end{lstlisting}
\end{document}

Ergebnis: Bildbeschreibung hier eingeben

verwandte Informationen