Entwickler-Ecke

Off Topic - [LaTeX] Darstellung von Quellcode ("Delphi-Tags" usw.)


Jakob Schöttl - So 13.04.08 12:13
Titel: [LaTeX] Darstellung von Quellcode ("Delphi-Tags" usw.)
Hallo

Ich hab mir jetzt die Latex-Distribution MiKTeX heruntergeladen.

Gibt es da wirklich keinen Befehl ( \delphi{code} oder so ähnlich), mit dem man Programmiersprachen (wie delphi, c++, ...) mit Syntaxhervorhebung darstellen kann?


Christian S. - So 13.04.08 12:17

Hallo!

Irgendwo im Forum (DF oder DP) wurde mal folgendes gepostet, ich habe die Quelle leider nicht mehr:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
\documentclass[11pt,a4paper,dvips,oneside]{book}
\usepackage{geometry}
\usepackage{color}
\usepackage{alltt}
\usepackage{courier}
\usepackage{graphicx}
\usepackage[ansinew,latin1]{inputenc}
\usepackage{german}
\usepackage{framed}
\usepackage{amsmath,amssymb,amstext}
\usepackage[hang,scriptsize,bf]{caption}
\usepackage{subfigure}
\usepackage{pifont}


\usepackage{listings}
\lstset{   language=Delphi,
           numbers=left,
           numberstyle=\tiny,
           stepnumber=1,
           numbersep=9pt,
           % backgroundcolor=\color{listingbackground},
           basicstyle=\scriptsize,
           captionpos=b,
           breaklines=true,
           breakindent=20pt,
           texcl=true,
           % mathescape=true,
           escapechar=•,   % ASCI Char #263 (als ALT+263 auf dem Numpad eingeben)
           xleftmargin=0pt,
           % escapebegin=$,
           % escapeend=$,
           extendedchars=true,
           float=false,
           frame=none,
           rulesepcolor=\color{black},
           rulesep=2pt,
           framesep=3pt,
           framexleftmargin=3pt,
           framexrightmargin=3pt,
           columns=[c]fixed,
           basewidth={0.6em,0.45em},
           fontadjust=false
        }

\begin{document}
\begin{lstlisting}[language=Delphi,caption={[Main]Main},label={qc_main}]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    txtb: TEdit;
    Label2: TLabel;
    txtc: TEdit;
    Button1: TButton;
    lbla: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
uses math ;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
a, b, c : double ;
begin
     b := StrToFloat(txtb.text) ;
     c := StrToFloat(txtc.text) ;

     { •$a=\sqrt{b^2+c^2}$• }
     a := sqrt(Power(b,2)+Power(c,2)) ;
     lbla.caption := Format ('a= %.2f',[a]) ;
end;

end.

\end{lstlisting}


foo \ref{qc_main} foo
\end{document}


Grüße
Christian


Jakob Schöttl - So 13.04.08 12:34

Danke Christian! Könnte zwar schöner sein, die Syntaxhervorhebung (auch mit Farben)...
aber ist auf jeden Fall eine Hilfe.

Ich bin noch Anfänger in Latex, aber wenn ich mich einarbeite versteh ich den code vllt sogar ;)


Delete - So 13.04.08 13:01

Ghet alles:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
% Quellcode
\usepackage{courier}
\usepackage{listings}
% Listings formatieren
\definecolor{codegray}{gray}{.95}
\definecolor{darkblue}{rgb}{0,0,.6}
\definecolor{darkred}{rgb}{.6,0,0}
\definecolor{darkgreen}{rgb}{0,.6,0}
\definecolor{red}{rgb}{.98,0,0}
\lstset{basicstyle=\small\ttfamily, frame=single, backgroundcolor=\color{codegray}, breaklines, showstringspaces=false, commentstyle=\itshape\color{darkgreen}, keywordstyle=\bfseries\color{darkblue}, stringstyle=\color{darkred}, xleftmargin=0.5cm}


Anwenden:
[code]
\lstset{languag=DElphi}
\begin{lstlisting}

\end{lstlisting}


Jakob Schöttl - So 13.04.08 13:43


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
\documentclass{report}
        
% Quellcode
\usepackage{courier}
\usepackage{listings}
% Listings formatieren
\definecolor{codegray}{gray}{.95}
\definecolor{darkblue}{rgb}{0,0,.6}
\definecolor{darkred}{rgb}{.6,0,0}
\definecolor{darkgreen}{rgb}{0,.6,0}
\definecolor{red}{rgb}{.98,0,0}
\lstset{basicstyle=\small\ttfamily, frame=single, backgroundcolor=\color{codegray}, breaklines, showstringspaces=false, commentstyle=\itshape\color{darkgreen}, keywordstyle=\bfseries\color{darkblue}, stringstyle=\color{darkred}, xleftmargin=0.5cm}
        
\begin{document}
\lstset{language=delphi}
\begin{lstlisting}


//quellcode
{kommentar}
{$I+}
begin
end;
class

\end{lstlisting}
\end{document}


Da gibts bei mir leider 77 fehler :?:


Delete - So 13.04.08 15:26

user profile iconJakob Schöttl hat folgendes geschrieben:
Da gibts bei mir leider 77 fehler :?:

Schön für dich. Und was, denkst du, sollen wir jetzt machen? Alle 77 Fehler erraten?


Jakob Schöttl - So 13.04.08 19:28

user profile iconLuckie hat folgendes geschrieben:
user profile iconJakob Schöttl hat folgendes geschrieben:
Da gibts bei mir leider 77 fehler :?:

Schön für dich. Und was, denkst du, sollen wir jetzt machen? Alle 77 Fehler erraten?


war doch nicht bös gemeint. und immerhin hab ich den quelltext angehängt, könnt ja sein, dass da ein offensichtlicher fehler ist...


BenBE - So 13.04.08 20:51

Für ein TuDorial, an dem ich grad schreib, hab ich mir die Language-Definition für das Listings-Package etwas angepasst.


Header für LaTeX-Dokument mit erweiterter Farbgebung:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
\documentclass[titlepage,a4paper,12pt]{scrartcl}
\usepackage[latin1]{inputenc}
\usepackage{ngerman}
\usepackage{graphicx}
\usepackage{tabularx}
\usepackage[T1]{fontenc}
\usepackage[scaled=0.9]{luximono}

\usepackage{listings}

\lstdefinelanguage[BenBE]{Delphi}%
  {
otherkeywords={:,=,:=,+,-,*,\(,\),[,],.,\,,;},
morekeywords=[1]{},%
morekeywords=[2]{and,as,asm,array,begin,case,class,const,constructor,%
      destructor,div,do,downto,else,end,except,exports,file,finally,%
      for,function,goto,if,implementation,in,inherited,inline,%
      initialization,interface,is,label,library,mod,nil,not,object,of,%
      or,packed,procedure,program,property,raise,record,repeat,set,%
      shl,shr,string,then,to,try,type,unit,until,uses,var,while,with,%
      xor,%
      absolute,abstract,assembler,at,cdecl,default,dynamic,export,%
      external,far,forward,index,name,near,nodefault,on,override,%
      private,protected,public,published,read,resident,storedDir,%
      virtual,write},%
morekeywords=[3]{Abs,AddExitProc,Addr,AllocMem,AnsiCompareStr,%
      AnsiCompareText,AnsiLowerCase,AnsiUpperCase,Append,AppendStr,%
      ArcTan,AssignCrt,Assigned,AssignFile,BlockRead,BlockWrite,Break,%
      ChangeFileExt,ChDir,Chr,CloseFile,ClrEol,ClrScr,Concat,Continue,%
      Copy,Cos,CSeg,CursorTo,Date,DateTimeToFileDate,DateTimeToStr,%
      DateTimeToString,DateToStr,DayOfWeek,Dec,DecodeDate,DecodeTime,%
      Delete,DeleteFile,DiskFree,DiskSize,Dispose,DisposeStr,%
      DoneWinCrt,DSeg,EncodeDate,EncodeTime,Eof,Eoln,Erase,Exclude,%
      Exit,Exp,ExpandFileName,ExtractFileExt,ExtractFileName,%
      ExtractFilePath,FileAge,FileClose,FileDateToDateTime,FileExists,%
      FileGetAttr,FileGetDate,FileOpen,FilePos,FileRead,FileSearch,%
      FileSeek,FileSetAttr,FileSetDate,FileSize,FillChar,FindClose,%
      FindFirst,FindNext,FloatToDecimal,FloatToStrF,FloatToStr,%
      FloatToText,FloatToTextFmt,Flush,FmtLoadStr,FmtStr,Format,%
      FormatBuf,FormatDateTime,FormatFloat,Frac,Free,FreeMem,GetDir,%
      GetMem,GotoXY,Halt,Hi,High,Inc,Include,InitWinCrt,Insert,Int,%
      IntToHex,IntToStr,IOResult,IsValidIdent,KeyPressed,Length,Ln,Lo,%
      LoadStr,Low,LowerCase,MaxAvail,MemAvail,MkDir,Move,New,NewStr,%
      Now,Odd,Ofs,Ord,ParamCount,ParamStr,Pi,Pos,Pred,Ptr,Random,%
      Randomize,Read,ReadBuf,ReadKey,Readln,ReAllocMem,Rename,%
      RenameFile,Reset,Rewrite,RmDir,Round,RunError,ScrollTo,Seek,%
      SeekEof,SeekEoln,Seg,SetTextBuf,Sin,SizeOf,SPtr,Sqr,Sqrt,SSeg,%
      Str,StrCat,StrComp,StrCopy,StrDispose,StrECopy,StrEnd,StrFmt,%
      StrLCat,StrIComp,StrLComp,StrLCopy,StrLen,StrLFmt,StrLIComp,%
      StrLower,StrMove,StrNew,StrPas,StrPCopy,StrPos,StrScan,StrRScan,%
      StrToDate,StrToDateTime,StrToFloat,StrToInt,StrToIntDef,%
      StrToTime,StrUpper,Succ,Swap,TextToFloat,Time,TimeToStr,%
      TrackCursor,Trunc,Truncate,TypeInfo,TypeOf,UpCase,UpperCase,Val,WhereX,%
      WhereY,Write,WriteBuf,WriteChar,Writeln},%
morekeywords=[4]{Byte,Word,LongWord,DWORD,smallInt,ShortInt,Integer,LongInt,%
    TDate,TDateTime,TTime,Textfile,ShortString,AnsiString,WideString,Pointer,%
    TObject,TClass,TTypeInfo},%
   sensitive=false,%
   alsoletter={+,-,*,/,.,:,=,<,>}, %,(,),[,],.,\,,:,;,^,@
   morecomment=[s]{(*}{*)},%
   morecomment=[s]{\{}{\}},%
   morecomment=[l]{//},% 2001 Christian Gudrian
   morestring=[d]'%
  }[keywords,comments,strings]%


\lstloadlanguages{[BenBE]Delphi}
\lstset{%
  tabsize=4,
  language=[BenBE]Delphi,
  defaultdialect=[BenBE]Delphi,
  basicstyle=\ttfamily,
  keywordstyle=[1]{\color{blue}},
  keywordstyle=[2]{\color{red}\bfseries},
  keywordstyle=[3]{\color[rgb]{0.1,0.1,0.1}},
  keywordstyle=[4]{\color[rgb]{0.2,0.2,0.2}},
  stringstyle=\color{magenta},
  commentstyle=\color[rgb]{0.0,0.0,0.25}\textit
}

%Verlinkung im PDF
\usepackage{color,hyperref}
\hypersetup{%
  colorlinks=true,
  linkcolor=black,
  anchorcolor=black,
  citecolor=black,
  filecolor=black,
  menucolor=black,
  urlcolor=blue,
  linktocpage=true,
  pdfpagemode=UseThumbs,
  bookmarksopen=true,
  bookmarksnumbered=true,
  pdfstartpage={1},
  pdfkeywords={},
  pdfcreator={Benny Baumann},
  pdfproducer={Benny Baumann}
}


Das Wichtigste sollte drin sein; ansonsten fragen ... BTW: Ich leiste keinen Support bzgl. der Vorlage; allein Anfragen zwecks Fehlern in der Vorlage selbst.

MfG,
BenBE.


Delete - So 13.04.08 20:54

user profile iconJakob Schöttl hat folgendes geschrieben:
war doch nicht bös gemeint. und immerhin hab ich den quelltext angehängt, könnt ja sein, dass da ein offensichtlicher fehler ist...

Ja, willst du uns die Fehler nicht endlich al verraten? Oder wartest du so lange bis jemand hier bei dir funktionierenden Code postet? Wenn zweiteres, sag bitte Bescheid, denn dann brauche ich mich hier nicht weiter bemühen.


Christian S. - So 13.04.08 21:05

user profile iconLuckie hat folgendes geschrieben:
user profile iconJakob Schöttl hat folgendes geschrieben:
war doch nicht bös gemeint. und immerhin hab ich den quelltext angehängt, könnt ja sein, dass da ein offensichtlicher fehler ist...

Ja, willst du uns die Fehler nicht endlich al verraten? Oder wartest du so lange bis jemand hier bei dir funktionierenden Code postet? Wenn zweiteres, sag bitte Bescheid, denn dann brauche ich mich hier nicht weiter bemühen.
Herrje, muss dieser ruppige Ton denn sein?


Delete - So 13.04.08 21:26

Sorry für den etwas harten Ton. Aber ich habe ziemlich Probleme damit, wenn jemand hHilfe erwartet aber selbst nicht breit ist, irgendetwas dafür zu tun und anscheinend einfach nur wartet, bis man die Lösung auf dem Silbertablett serviert.


Jakob Schöttl - Mo 14.04.08 17:35

Also Danke user profile iconBenBE (code funktioniert) und user profile iconLuckie; Ich muss mich mal einarbeiten, dann kann ich ja auch selber noch was anpassen.