PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Code darstellen mit listings



letscho84
06-11-2011, 07:01
Guten morgen zusammen,

ich will unter Latex einen C++ ähnlichen Code darstellen. Dazu habe ich folgendes Bsp:




\documentclass[a4paper, 11pt, oneside]{scrbook}
\usepackage[latin1]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}

\usepackage{listings}
\usepackage{xcolor}

\begin{document}

\lstset{language=C++}
\begin{lstlisting}
COMPONENT SCA
PORTS "beschreibt Eingänge"
DATA
REAL A "Querschnitt"
-- REAL B "Breite"
\end{lstlisting}
\end{document}


Nun möchte ich etwas Übersicht in die Sache rein bringen. Dazu sollen alle Wörter, die komplett groß geschrieben sind blau dargestellt werden - da sie Befehle sind. Alle Einträge die zwischen "" stehen sollen grün dargestellt werden - Kommentare / Beschreibungen und alle Eintrage nach zwei -- sollen grau dargestellt werden.
Das die Befehle blau dargestellt werden, habe ich schon über

emph={DATA, REAL, COMPONENT SCA}, emphstyle=\color{blue}
hinbekommen. Jedoch ist meine Frage hier, kann ich das auch anders definieren?!

Wie kann ich das am Besten umsetzen?
Danke für eure Hilfe!
Grüße, Letscho

tral
06-11-2011, 08:20
Hallo,

das steht doch in der Dokumentation zu listings (z.B. unter 1.3):



\lstset{%
keywordstyle=\color{blue},
stringstyle=\color{green}
}


Christian.

letscho84
06-11-2011, 13:54
...das steht doch in der Dokumentation zu listings (z.B. unter 1.3)

Hallo Christian,

danke für den Tipp, aber das habe ich schon selbst ausprobiert. Wenn ich das auf mein oben genanntes Bsp. anwende, werden nur die Sachen zwischen Anführungszeichen stehen grün dargstellt. Ansonsten ändert sich nichts.

Grüße, Letscho

tral
06-11-2011, 16:53
Das liegt wahrscheinlich daran, dass deine Schlüsselwörter (DATA, REAL, ...) keine Schlüsselwörter in C++ sind. Das kannst du über:



\lstset{
morekeywords={DATA, REAL, COMPONENT SCA}
}


ändern.

Christian.

letscho84
06-11-2011, 18:17
Danke Christian,

für den Tipp! Ja, der Programmiersprache liegt C++ zugrunde, aber sie hat ihre eigenen Befehle.

Jedoch habe ich dann immernoch das Problem mit den Doppelstrichen! Soll heißen, alles was in einer Zeile hinter -- steht soll mit einer Textfarbe (z.B. Grau) geschrieben werden. Wie ist das möglich?

Grüße, Letscho

letscho84
07-11-2011, 14:35
Hallo zusammen,

ich habe nun noch ein weiteres Problem. Wenn ich den Code umfassender gestallte werde Bereiche als stringstyle definiert, die eigentlich die normale Textfarbe haben sollen. Wie kann ich das ausstellen?

Hier ein Bsp:



\documentclass[a4paper, 11pt, oneside]{scrbook}
\usepackage[latin1]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}

\usepackage{listings}
\usepackage[dvipsnames]{xcolor}

\begin{document}

\lstset{language=C++,
basicstyle=\ttfamily\small,
morekeywords={PORTS, IN, OUT, DATA, REAL, DECLS, ENUM, EXPL, DISCR, INIT, DISCRETE,
END, WHEN, CONTINUOUS, ZONE, OTHERS, IMPL, COMPONENT},
showstringspaces=false,
keywordstyle=\color{Blue}\bfseries\ttfamily,
stringstyle=\color{ForestGreen}\ttfamily,
commentstyle=\color{gray}\ttfamily,
numbers=left, numberstyle=\tiny, stepnumber=5,
breaklines=true,
tabsize=2,
linewidth=\textwidth}

\begin{lstlisting}
CONTINUOUS
-- actual ratio of valve flow passage
x' = (xo * s_position.signal - x) / tau

-- max. chamber temperature
Tc_max = g[1] * p**g[2] - T_cel
\end{lstlisting}
\end{document}



Ich glaube das liegt daran, dass laut C++ Sprache alles zwischen zwei ' ' als stringstyle definiert wird. Ich möchte aber, dass nur das was zwischen " " steht als solches definiert ist UND dann auch alles was hinter -- in einer Zeile steht als Kommentar deklariert wird.

Ich hoffe ihr könnt mir helfen.

Grüße, letscho

Schweinebacke
07-11-2011, 14:50
Wenn Deine Sprache nicht C++ ist, dann wäre es vielleicht eine bessere Idee, eine eigene Sprache (oder zumindest einen eigenen Dialekt) zu definieren. Siehe dazu Abschnitt 3.2 in der Anleitung zu listings.

Es gibt übrigens auch noch eine ganze Reihe von Alternativen zu listings (http://www.ctan.org/keyword/computer_code).

letscho84
07-11-2011, 16:19
Wenn Deine Sprache nicht C++ ist, dann wäre es vielleicht eine bessere Idee, eine eigene Sprache (oder zumindest einen eigenen Dialekt) zu definieren. Siehe dazu Abschnitt 3.2 in der Anleitung zu listings.

Es gibt übrigens auch noch eine ganze Reihe von Alternativen zu listings (http://www.ctan.org/keyword/computer_code).

Hallo Schweinebacke,

vielen Dank für den Hinweis! Jetzt klappt es super mit der selbst definierten Sprache. Danke nochmals für die Tipps.

Grüße, Letscho