Ich möchte Source Code mit dem Paket Listing (lstlisting) setzen. Ich verwende Annotationen mit Schlüsselworten in Source Code Kommentaren. Die Annotationssprache ist dem Paket bekannt (ACSL). Leider werden diese Schlüsselworte im Kommentar nicht erkannt und nicht entsprechend gesetzt. Ich habe es auch schon mit der Option "alsolanguage" versucht, ohne Erfolg.

Wie kann ich Listing dazu bringen, auch die Annotationen korrekt umzusetzen?

Unten ein Beispiel. Die Schlüsselworte sind "behavior", "assumes", etc.

Vielen Dank im Voraus

Open in writeLaTeX
//@ ghost unsigned int no_btn_press = 0;

/*@
  @  behavior FewPresses:
  @    assumes no_btn_press < 2;
  @    ensures no_btn_press == \old(no_btn_press) + 1;
  @    ensures \result == 0;
  @  behavior EnoughPresses:
  @    assumes no_btn_press >= 2;
  @    ensures no_btn_press == 0;
  @    ensures \result != 0;
  @  complete behaviors FewPresses,EnoughPresses;
  @  disjoint behaviors FewPresses,EnoughPresses;
  @*/
char btnpress(void);

gefragt 18 Mai '14, 15:48

dordow's gravatar image

dordow
103610
Akzeptiert-Rate: 0%

bearbeitet 18 Mai '14, 20:35

cgnieder's gravatar image

cgnieder
22.1k253463

Ist es nicht normal, dass Schlüsselwörter in Kommentaren nicht formatiert werden? Oder verstehe ich die Frage falsch?

(18 Mai '14, 20:40) cgnieder

Mein Bauchgefühl sagt auch, Kommentare sollten in ihrer Gestaltung zurücktreten (hellgrau z.B.), damit die wichtige Syntax-Hervorhebung des echten Codes noch besser erkennbar ist. Formatierung von Schlüsselwörtern in Kommentaren lassen sie "aktiv" aussehen, doch sie sind ja wirkungslos, fände ich irritierend.

(18 Mai '14, 20:57) stefan ♦♦

Du kannst Dir den Stil auch komplett selbst definieren. Hier einmal mit dem Stil von openETCS, was Du Dir ja modifizieren kannst:

Open in writeLaTeX
\documentclass[preview,border=5]{standalone}
\usepackage{listings}
\usepackage{xcolor}

%\definecolor{darkred} {rgb}{0.60,0.00,0.00}
\definecolor{coACSLBehavior}    {rgb}{0.30,0.00,0.00}
\definecolor{coASCL}    {rgb}{0.00,0.10,0.00}
\definecolor{coASCLKeyword} {rgb}{0.00,0.10,0.10}
\definecolor{darkgreen} {rgb}{0.00,0.40,0.00}
%\definecolor{red} {rgb}{0.98,0.00,0.00}
\definecolor{darkblue}  {rgb}{0.00,0.00,0.60}
%\definecolor{lightblue} {rgb}{0.60,0.80,1.00}
%\definecolor{lightred} {rgb}{1.00,0.60,0.60}
\definecolor{coCKeyword}    {rgb}{0.00,0.00,0.60}

\lstdefinestyle{acsl-block}{
  emph=[1]{assert, assumes, assigns, axiom, axiomatic, decreases, ensures,
           ghost, invariant, lemma, logic, loop, predicate,
           reads, requires, variant},
  emphstyle=[1]{\bfseries\color{coASCLKeyword}},
  emph=[2]{behavior, behaviors, complete, disjoint, for:},
  emphstyle=[2]{\bfseries\color{coACSLBehavior}},
  emph=[3]{typedef, int, char, integer, real, bool, size_type, value_type,
           uint8_t, uint64_t},
  emphstyle=[3]{\bfseries\color{coCKeyword}},
  escapeinside={//`}{`//},
  morecomment=*[l][\color{coASCL}]{//@},
  morecomment=*[s][\color{coASCL}]{/*@}{*/},
  moredelim=*[is][\bfseries]{|*}{*|},
  %emphstyle=[3]{\ttfamily}
}
\begin{document}
\begin{lstlisting}[style=acsl-block]
//@ ghost unsigned int no_btn_press = 0;

/*@
  @  behavior FewPresses:
  @    assumes no_btn_press < 2;
  @    ensures no_btn_press == \old(no_btn_press) + 1;
  @    ensures \result == 0;
  @  behavior EnoughPresses:
  @    assumes no_btn_press >= 2;
  @    ensures no_btn_press == 0;
  @    ensures \result != 0;
  @  complete behaviors FewPresses,EnoughPresses;
  @  disjoint behaviors FewPresses,EnoughPresses;
  @*/
char btnpress(void);
\end{lstlisting}
\end{document}

Listing

Permanenter link

beantwortet 18 Mai '14, 19:14

stefan's gravatar image

stefan ♦♦
18.3k163148
Akzeptiert-Rate: 50%

Das ist genau was ich brauchte, vielen Dank.

(18 Mai '14, 21:52) dordow
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×23

gestellte Frage: 18 Mai '14, 15:48

Frage wurde gesehen: 8,384 Mal

zuletzt geändert: 18 Mai '14, 21:52