Keywords in einem C-Code-Listing einfärben

Fragen und Probleme, die nicht den obigen Kategorien zugeordnet werden können


xachse
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: So 17. Sep 2017, 20:19

Keywords in einem C-Code-Listing einfärben

Beitrag von xachse »

Hallo Ihr Leute,

hätte da mal eine Frage zu Listings; speziel zu Listings mit Quellcode der Sprache C. Ich wollte mich farblich an den Editor "Kate" halten, weil ich den gewöhnt bin. Wie kann ich im folgenden Beispiel "return" schwarz und fett darstellen lassen? Außerdem sollten "\n" und "size_t" blau (bzw. cblau) sein. Hab schon mit google und der Forensuche gesucht, aber nur Lösungen mit dem "morekeywords"-Befehl gefunden. Wenn ich diese Keywords mit "morekeywords" einfärbe, dann färbt er automatisch alle anderen Keywords so ein. Das mit den ßß...ßß, ||...|| und @@...@@ zum einfärben der #include-Befehle und der h-Dateinamen ist nur eine Notlösung, geht es besser?

Hier ist mein Minimalbeispiel:
\documentclass{article}

\usepackage{xcolor}
\usepackage{inconsolata}
\usepackage{listings}

\definecolor{cblau}		{RGB}{  0, 87,174}
\definecolor{cgelb}		{RGB}{176,128,  0}
\definecolor{crot}		{RGB}{191,  3,  3}
\definecolor{cgruen}	{RGB}{  0,110, 40}
\definecolor{corange}	{RGB}{255, 85,  0}

\lstdefinestyle{ccode}{
	belowcaptionskip	=1\baselineskip,
	breaklines			=true,
	xleftmargin			=\parindent,
	language			=C,
	showstringspaces	=false,
	basicstyle			=\ttfamily,
	keywordstyle		=\color{cblau},
  	commentstyle		=\color{gray},
	identifierstyle		=\color{black},
	stringstyle			=\color{crot},
	moredelim			=[is][\color{cgelb}]{ßß}{ßß},
	moredelim			=[is][\color{corange}]{||}{||},
	moredelim			=[is][\color{cgruen}]{@@}{@@},
}

\lstset{
	numbers				=left,
	columns				=fullflexible,
	float,
	numberstyle			=\color{gray},
} 

\begin{document}

\begin{lstlisting}[language=C, style=ccode, caption={C-Code}]
@@#include@@||<stdio.h>||
@@#include@@||<stdlib.h>||
@@#include@@||<string.h>||

int main(){
    char wochentag[]="Freitag";

    int tag=ßß13ßß;
    char monat[]="Mai";
    int jahr=ßß1927ßß;
    char *string;
    const size_t kapazitaet=ßß100ßß;

    string=malloc(kapazitaet);

    snprintf(string, kapazitaet, "%s, der %d. %s %d\n", wochentag, tag, monat, jahr);
    printf("%s", string);

    free(string);

    return ßß0ßß;
}
\end{lstlisting}

\end{document}
Vielen Dank
xachse