Wie markiere ich einen Quellcodeblock in LaTeX?

Wie markiere ich einen Quellcodeblock in LaTeX?

Ich habe in meinem Dokument viele Quellcodeblöcke (jeder davon mindestens 40 Zeilen lang). Teile dieser Codeblöcke möchte ich formatieren, am besten mit einigen Anmerkungen auf der rechten Seite. Ich dachte daran, einfach einige Zeilen farbig einzurahmen.

Gibt es eine kanonische Möglichkeit, dies zu tun? Gibt es Pakete, die ich verwenden könnte?

Im Moment verwende ich listingsdas Paket und der Quellcode in meinem Dokument wird folgendermaßen eingefügt:

\begin{lstlisting}
#include <stdio.h>
#define N 10
/* Block
 * comment */

int main()
{
    int i;

    // Line comment.
    puts("Hello world!");

    for (i = 0; i < N; i++)
    {
        puts("LaTeX is also great for programmers!");
    }

    return 0;
}
\end{lstlisting}

\lstinputlisting[caption=Scheduler, style=customc]{hello.c}

Antwort1

Mit dem verbatimboxPaket können optionale Argumente (in Form von Makros) an die Verbatim-Umgebungen des Pakets übergeben werden. Dies ermöglicht alle Arten der Anpassung. In meinem MWE unten teste ich die Codezeilennummer. Wenn sie im Bereich 8-18 liegt, wird \colorfieldder Auflistung ein Hintergrund zugewiesen. Außerdem wende ich rote Zeilennummern an, wenn die Codezeilennummer in diesem Bereich liegt, oder schwarze Nummern, wenn sie außerhalb davon liegt (die Standardeinstellung ist keine Zeilennummerierung).

Darüber hinaus überprüfe ich, ob ich in Codezeile 11 mit einem eingerahmten Kommentar auf diese Zeile aufmerksam mache.

Sie können die Methode mit der Hintergrundfarbe, die Methode mit farbigen Zeilennummern, die Methode mit hervorgehobenen Kästchen, alle drei, eine Kombination davon oder etwas völlig anderes wählen, die alle durch Ihre Makrodefinitionen angepasst werden. Das Paket verfolgt die Zeilennummern durch den Zähler VerbboxLineNo, der in Ihren Makros verwendet werden kann.

\documentclass{article}
\usepackage{verbatimbox,xcolor,lipsum}
% VERBATIMBOX PREP
\usepackage{verbatimbox}
\def\codesize{\footnotesize}
\newsavebox\thecolorfield
\newcommand\setcolorfield[1][blue!19!gray!18]{%
  \savebox{\thecolorfield}{\codesize%
    \makebox[0pt][l]{\textcolor{#1}{%
    \rule[-\dp\strutbox]{\textwidth}{\dimexpr\ht\strutbox+\dp\strutbox}}}}%
}

\def\colorfield{\usebox{\thecolorfield}}

\setcolorfield

\newcommand*\ifline[4]{%
  \ifnum\value{VerbboxLineNo}<#1#4\else
    \ifnum\value{VerbboxLineNo}>#2#4\else#3\fi
  \fi
}

\newcommand\rednum{\makebox[0ex][r]{\color{red}\arabic{VerbboxLineNo}:}\hspace{1ex}}

\newcommand\blacknum{\makebox[0ex][r]{\arabic{VerbboxLineNo}:}\hspace{1ex}}

\newcommand\boxcomment[1]{\fboxsep=1pt\smash{\rlap{%
    \textcolor{red!30}{\rule[-1pt]{.75\textwidth}{1pt}}%
    \colorbox{red!30}{\fbox{\parbox[b]{.2\textwidth}{\rmfamily #1}}%
  }}}%
}
\newcommand\commentA{\boxcomment{I am drawing attention to ``Hello World''}}
\begin{document}
\lipsum[3]
\begin{verbnobox%
  }[\codesize\ifline{8}{18}{\colorfield\rednum}{\blacknum}\ttfamily\ifline{11}{11}{\commentA}{}]
#include <stdio.h>
#define N 10
/* Block
 * comment */

int main()
{
    int i;

    // Line comment.
    puts("Hello world!");

    for (i = 0; i < N; i++)
    {
        puts("LaTeX is also great for programmers!");
    }

    return 0;
}
\end{verbnobox}
\lipsum[4]
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen