Sie sind hier

Quelltext in LaTeX

In LaTeX gibt es eine Vielzahl an Paketen die mit Quelltext umgehen können. Neben der Verbatim-Umgebung ist vor allem das Listings-Packet weit verbreitet. Das Listings-Packet liefert die nötigen Erweiterungen um Quelltexte effizient und in ansprechender Form in LaTeX einzubinden.

Folgende Pakete sind für das Listings-Paket in der Präambel einzubinden:

%%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Quellcode~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%%
\usepackage{color}    % Farben
\usepackage{courier}  % Schrift
\usepackage{listings} % Listings-Paket
Die Darstellung des Quelltextes kann vielfälltig beeinflusst werden, folgendes Listing zeigt die wichtigsten Einstellungen die in der Präambel vorgenommen werden können.
\lstset{%
  basicstyle=\fontfamily{pcr}\fontseries{m}\fontshape{n}\footnotesize,
  keywordstyle=\fontfamily{pcr}\fontseries{b}\fontshape{n}\footnotesize,
  identifierstyle=\fontfamily{pcr}\fontseries{m}\fontshape{n}\footnotesize,
  commentstyle=\fontfamily{pcr}\fontseries{m}\fontshape{n}\footnotesize,
  stringstyle=\fontfamily{pcr}\fontseries{m}\fontshape{n
}\footnotesize,
  %
  showstringspaces=false,
  showspaces=false,
  showtabs=false,
  tab=rightarrowfill,
  tabsize=4,
  extendedchars=true,
  aboveskip=5mm,          % Abstand über Listing
  belowskip=5mm,          % Abstand unter Listing
  keepspaces=true,
  numbers=left,
  numberstyle=\tiny,
  stepnumber=1,
  numbersep=5pt,
  numberblanklines=true,
  extendedchars=true,
  breaklines=true,        % Zeilen umbrechen wenn notwendig
  breakautoindent=true,   % Nach dem Zeilenumbruch Zeile einrücken
  postbreak=\space,       % Bei Leerzeichen umbrechen
  language=DWJAVA,        % Standardsprache
}
Die Option language definiert die zu verwendende Programmiersprache. Wird diese Option nicht gesetzt, so wird die in der Präambel eingestellte Programmiersprache verwendet. Beim Einfügen kann entweder eine der vielen in Listings vordefinierten Programmiersprachen ausgewählt werden, flexibler ist jedoch, sich eigene Sprachen zu definieren. Folgendes Listing zeigt einige ausgewählte selbstdefinierte Sprachen:
% Farbe fuer graue Kommentare
\definecolor{commentcolor}{gray}{0.50}

\lstdefinelanguage{DWPAS}{
  keywords={AND, ARRAY, ASM, BEGIN, CASE, CDECL, CLASS, CONST, CONSTRUCTOR,
    DEFAULT, DESTRUCTOR, DIV, DO, DOWNTO, ELSE, END, END., EXCEPT, EXIT,
    EXPORTS, EXTERNAL, FAR, FILE, FINALIZATION, FINALLY, FOR, FUNCTION, GOTO,
    IF, IMPLEMENTATION, IN, INDEX, INHERITED, INITIALIZATION, INLINE,
    INTERFACE, LABEL, LIBRARY, MESSAGE, MOD, NEAR, NIL, NOT, OBJECT, OF, ON,
    OR, OUT, OVERLOAD, OVERRIDE, PACKED, PASCAL, PRIVATE, PROCEDURE, PROGRAM,
    PROPERTY, PROTECTED, PUBLIC, PUBLISHED, RAISE, READ, RECORD, REGISTER,
    REPEAT, RESOURCESTRING, SAFECALL, SET, SHL, SHR, STDCALL, STORED, THEN,
    THREADVAR, TO, TRY, TYPE, UNIT, UNTIL, USES, VAR, VIRTUAL, WHILE, WITH,
    XOR,
  },
  sensitive=false,
  comment=[s][\color{commentcolor}]{(*}{*)
},
  %alsoletter={\#},
  %alsodigit={.},
  string=[d]',
}

\lstdefinelanguage{DWC}{
  keywords={auto, double, int, struct, break, else, long, switch, case, enum,
    register, typedef, char, extern, return, union, const, float, short,
    unsigned, continue, for, signed, void, default, goto, sizeof, volatile,
    do, if, static, while,
  },
  sensitive=false,
  comment=[s][\color{commentcolor}]{/*}{*/
},
  %alsoletter={\#},
  %alsodigit={.},
  string=[d]',
  morestring=[b]",
}

\lstdefinelanguage{DWCPP}{
  keywords={auto, const, double, float, int, short, struct, unsigned, break,
    continue, else, for, long, signed, switch, void, case, default, enum,
    goto, register, sizeof, typedef, volatile, char, do, extern, if, return,
    static, union, while, asm, dynamic_cast, namespace, reinterpret_cast,
    try, bool, explicit, new, static_cast, typeid, catch, false, operator,
    template, typename, class, friend, private, this, using, const_cast,
    inline, public, throw, virtual, delete, mutable, protected, true,
    wchar_t, cin, endl, INT_MIN, iomanip, main, npos, std, cout, include,
    INT_MAX, iostream, MAX_RAND, NULL, string,
  },
  sensitive=false,
  comment=[s][\color{commentcolor}]{/*}{*/},
  morecomment=[l][\color{commentcolor}]{//
},
  %string=[d]',
  %morestring=[b]"',
}

\lstdefinelanguage{DWCSHARP}{
  keywords={abstract, event, new, struct, as, explicit, null, switch, base,
    extern, object, this, bool, false, operator, throw, break, finally, out,
    true, byte, fixed, override, try, case, float, params, typeof, catch,
    for, private, uint, char, foreach, protected, ulong, checked, goto,
    public, unchecked, class, if, readonly, unsafe, const, implicit, ref,
    ushort, continue, in, return, using, decimal, int, sbyte, virtual,
    default, interface, sealed, volatile, delegate, internal, short, void,
    do, is, sizeof, while, double, lock, stackalloc, else, long, static,
    enum, namespace, string, get, partial, set, yield,
  },
  sensitive=false,
  comment=[s][\color{commentcolor}]{/*}{*/},
  morecomment=[l][\color{commentcolor}]{//},
  string=[d]',
  morestring=[b]"',
}

\lstdefinelanguage{DWJAVA}{
  keywords={abstract, continue, for, new, switch, assert, default, goto,
    package, synchronized, boolean, do, if, private, this, break, double,
    implements, protected, throw, byte, else, import, public, throws, case,
    enum, instanceof, return, transient, catch, extends, int, short, try,
    char, final, interface, static, void, class, finally, long, strictfp,
    volatile, const, float, native, super, while, null, true, false
  },
  sensitive=false,
  comment=[s][\color{commentcolor}]{/*}{*/},
  morecomment=[l][\color{commentcolor}]{//},
  string=[d]',
  morestring=[b]"',
}

\lstdefinelanguage{DWCMD}{
  keywords={rem, set, if, else, exist, errorlevel, for, in, do, break, call,
    copy, chcp, cd, chdir, choice, cls, country, ctty, date, del, erase, dir,
    echo, exit, goto, loadfix, @echo, pause
  },
  sensitive=false,
  comment=[l][\color{commentcolor}]{rem},
  string=[b]"',
}

\lstdefinelanguage{DWORACLE}{
  keywords={ABORT, ACCEPT, ACCESS, ADD, ADMIN, AFTER, ALL, ALLOCATE, ALTER,
    ANALYZE, AND, ANY, ARCHIVE, ARCHIVELOG, ARRAY, ARRAYLEN, AS, ASC, ASSERT,
    ASSIGN, AT, AUDIT, AUTHORIZATION, AVG, BACKUP, BASE_TABLE, BECOME,
    BEFORE, BEGIN, BETWEEN, BINARY_INTEGER, BLOCK, BODY, BOOLEAN, BY, CACHE,
    CANCEL, CASCADE, CASE, CHANGE, CHAR, CHAR_BASE, CHARACTER, CHECK,
    CHECKPOINT, CLOSE, CLUSTER, CLUSTERS, COBOL, COLAUTH, COLUMN, COLUMNS,
    COMMENT, COMMIT, COMPILE, COMPRESS, CONNECT, CONSTANT, CONSTRAINT,
    CONSTRAINTS, CONTENTS, CONTINUE, CONTROLFILE, COUNT, CRASH, CREATE,
    CURRENT, CURRVAL, CURSOR, CYCLE, DATA_BASE, DATABASE, DATAFILE, DATE,
    DBA, DEBUGOFF, DEBUGON, DEC, DECIMAL, DECLARE, DEFAULT, DEFINITION,
    DELAY, DELETE, DELTA, DESC, DIGITS, DISABLE, DISMOUNT, DISPOSE, DISTINCT,
    DISTINCT, DO, DOUBLE, DROP, DROP, DUMP, EACH, ELSE, ELSE, ELSIF, ENABLE,
    END, END, ENTRY, ESCAPE, EVENTS, EXCEPT, EXCEPTION, EXCEPTION_INIT,
    EXCEPTIONS, EXCLUSIVE, EXEC, EXECUTE, EXISTS, EXISTS, EXIT, EXPLAIN,
    EXTENT, EXTERNALLY, FALSE, FETCH, FETCH, FILE, FLOAT, FLOAT, FLUSH, FOR,
    FOR, FORCE, FOREIGN, FORM, FORTRAN, FOUND, FOUND, FREELIST, FREELISTS,
    FROM, FROM, FUNCTION, GENERIC, GO, GOTO, GRANT, GROUP, GROUPS, HAVING,
    IDENTIFIED, IF, IMMEDIATE, IN, INCLUDING, INCREMENT, INDEX, INDEXES,
    INDICATOR, INITIAL, INITRANS, INSERT, INSTANCE, INT, INTEGER, INTERSECT,
    INTO, IS, ISOPEN, KEY, LANGUAGE, LAYER, LEVEL, LIKE, LIMITED, LINK,
    LISTS, LOCK, LOGFILE, LONG, LOOP, MANAGE, MANUAL, MAX, MAXDATAFILES,
    MAXEXTENTS, MAXINSTANCES, MAXLOGFILES, MAXLOGHISTORY, MAXLOGMEMBERS,
    MAXTRANS, MAXVALUE, MIN, MINEXTENTS, MINUS, MINVALUE, MLSLABEL, MOD,
    MODE, MODIFY, MODULE, MOUNT, NATURAL, NEW, NEW, NEXT, NEXTVAL,
    NOARCHIVELOG, NOAUDIT, NOCACHE, NOCOMPRESS, NOCYCLE, NOMAXVALUE,
    NOMINVALUE, NONE, NOORDER, NORESETLOGS, NORMAL, NOSORT, NOT, NOTFOUND,
    NOWAIT, NULL, NUMBER, NUMBER_BASE, NUMERIC, OF, OFF, OFFLINE, OLD, ON,
    ONLINE, ONLY, OPEN, OPEN, OPTIMAL, OPTION, OR, ORDER, OTHERS, OUT, OWN,
    PACKAGE, PACKAGE, PARALLEL, PARTITION, PCTFREE, PCTINCREASE, PCTUSED,
    PLAN, PLI, POSITIVE, PRAGMA, PRECISION, PRIMARY, PRIOR, PRIVATE, PRIVATE,
    PRIVILEGES, PROCEDURE, PROCEDURE, PROFILE, PUBLIC, QUOTA, RAISE, RANGE,
    RAW, READ, REAL, RECORD, RECOVER, REFERENCES, REFERENCING, RELEASE, REMR,
    RENAME, RESETLOGS, RESOURCE, RESTRICTED, RETURN, REUSE, REVERSE, REVOKE,
    ROLE, ROLES, ROLLBACK, ROW, ROWCOUNT, ROWID, ROWLABEL, ROWNUM, ROWS,
    ROWTYPE, RUN, SAVEPOINT, SCHEMA, SCN, SECTION, SEGMENT, SELECT, SELECT,
    SEPARATE, SEQUENCE, SESSION, SET, SET, SHARE, SHARED, SIZE, SIZE,
    SMALLINT, SMALLINT, SNAPSHOT, SOME, SORT, SPACE, SQL, SQLBUF, SQLCODE,
    SQLERRM, SQLERROR, SQLSTATE, START, START, STATEMENT, STATEMENT_ID,
    STATISTICS, STDDEV, STOP, STORAGE, SUBTYPE, SUCCESSFUL, SUM, SUM, SWITCH,
    SYNONYM, SYSDATE, SYSTEM, TABAUTH, TABLE, TABLES, TABLES, TABLESPACE,
    TASK, TEMPORARY, TERMINATE, THEN, THREAD, TIME, TO, TRACING, TRANSACTION,
    TRIGGER, TRIGGERS, TRUE, TRUNCATE, TYPE, UID, UNDER, UNION, UNIQUE,
    UNLIMITED, UNTIL, UPDATE, USE, USER, USING, VALIDATE, VALUES, VARCHAR,
    VARCHAR2, VARIANCE, VIEW, VIEWS, WHEN, WHENEVER, WHERE, WHILE, WITH,
    WORK, WRITE, XOR,
  },
  sensitive=false,
  comment=[l][\color{commentcolor}]{--},
  string=[d]',
  morestring=[b]"',
}

\lstdefinelanguage{DWHTML5}{
  keywords={a, abbr, address, area, article, aside, audio, b, base, bb, bdo,
    blockquote, body, br, button, canvas, caption, cite, code, col, colgroup,
    command, datagrid, datalist, dd, del, details, dialog, dfn, div, dl, dt,
    em, embed, eventsource, fieldset, figure, footer, form, h1, h2,  h3,
    h4, h5, h6, head, header, hr, html, i, iframe, img, input, ins, kbd,
    label, legend, li, link, mark, map, menu, meta, meter, nav, noscript,
    object, ol, optgroup, option, output, p, param, pre, progress, q, ruby,
    rp, rt, samp, script, section, select, small, source, span, strong,
    style, sub, sup, table, tbody, td, textarea, tfoot, th, thead, time,
    title, tr, ul, var, video,
  },
  sensitive=false,
  morecomment=[s]{<!--}{-->},
  morestring=[b]",
  morestring=[d]',
}

\lstdefinelanguage{DWPHP}{
  keywords={a, abbr, address, area, article, aside, audio, b, base, bb, bdo,
    blockquote,  body, br, button, canvas, caption, cite, code, col,
    colgroup, command, datagrid, datalist, dd, del, details, dialog, dfn,  
    div, dl, dt, em, embed, eventsource, fieldset, figure, footer, form,  
    h1, h2, h3,  h4, h5,  h6, head, header, hr, html, i, iframe, img, input,
    ins, kbd, label, legend, li, link, mark, map, menu, meta, meter, nav,
    noscript, object, ol, optgroup, option, output, p, param, pre, progress,
    q, ruby, rp, rt, samp, script, section, select, small, source, span,
    strong, style, sub, sup, table, tbody, td, textarea, tfoot, th, thead,
    time, title, tr, ul, var, video, add, add_root, addaction, addcolor,
    addentry, addfill, addshape, addstring, addstring, align, attributes,
    children, chop, close, com_get, com_propset, com_set, die, dir,
    diskfreespace, domxml_getattr, domxml_setattr, doubleval, drawarc,
    drawcircle, drawcubic, drawcubicto, drawcurve, drawcurveto, drawglyph,
    drawline, drawlineto, dtd, dumpmem, fbsql, fputs, get_attribute,
    getascent, getascent, getattr, getdescent, getdescent, getheight,
    getleading, getleading, getshape1, getshape2, getwidth, getwidth,
    getwidth, gzputs, i18n_convert, i18n_discover_encoding, i18n_http_input,
    i18n_http_output, i18n_internal_encoding, i18n_ja_jp_hantozen,
    i18n_mime_header_decode, i18n_mime_header_encode, imap_create,
    imap_fetchtext, imap_getmailboxes, imap_getsubscribed, imap_header,
    imap_listmailbox, imap_listsubscribed, imap_rename, imap_scan,
    imap_scanmailbox, ini_alter, is_double, is_integer, is_long, is_real,
    is_writeable, join, labelframe, labelframe, last_child, lastchild,
    ldap_close, magic_quotes_runtime, mbstrcut, mbstrlen, mbstrpos,
    mbstrrpos, mbsubstr, ming_setcubicthreshold, ming_setscale, move,
    movepen, movepento, moveto, moveto, moveto, msql, msql_createdb,
    msql_dbname, msql_dropdb, msql_fieldflags, msql_fieldlen, msql_fieldname,
    msql_fieldtable, msql_fieldtype, msql_freeresult, msql_listdbs,
    msql_listfields, msql_listtables, msql_numfields, msql_numrows,
    msql_regcase, msql_selectdb, msql_tablename, mssql_affected_rows,
    mssql_affected_rows, mssql_close, mssql_close, mssql_connect,
    mssql_connect, mssql_data_seek, mssql_data_seek, mssql_fetch_array,
    mssql_fetch_array, mssql_fetch_field, mssql_fetch_field,
    mssql_fetch_object, mssql_fetch_object, mssql_fetch_row, mssql_fetch_row,
    mssql_field_seek, mssql_field_seek, mssql_free_result, mssql_free_result,
    mssql_get_last_message, mssql_get_last_message,
    mssql_min_client_severity, mssql_min_error_severity,
    mssql_min_message_severity, mssql_min_server_severity, mssql_num_fields,
    mssql_num_fields, mssql_num_rows, mssql_num_rows, mssql_pconnect,
    mssql_pconnect, mssql_query, mssql_query, mssql_result, mssql_result,
    mssql_select_db, mssql_select_db, multcolor, mysql, mysql_createdb,
    mysql_db_name, mysql_dbname, mysql_dropdb, mysql_fieldflags,
    mysql_fieldlen, mysql_fieldname, mysql_fieldtable, mysql_fieldtype,
    mysql_freeresult, mysql_listdbs, mysql_listfields, mysql_listtables,  
    mysql_numfields, mysql_numrows, mysql_selectdb, mysql_tablename, name,
    new_child, new_xmldoc, nextframe, nextframe, node, oci8append,
    oci8assign, oci8assignelem, oci8close, oci8free, oci8free, oci8getelem,  
    oci8load, oci8max, oci8ocifreecursor, oci8save, oci8savefile, oci8size,
    oci8trim, oci8writetemporary, oci8writetofile, odbc_do,
    odbc_field_precision, output, parent, pdf_add_outline, pg_clientencoding,
    pg_setclientencoding, pos, recode, remove, remove, rewind, root, rotate,
    rotateto, rotateto, save, savetofile, scale, scaleto, scaleto,
    set_attribute, set_content, setaction, setattr, setbackground, setbounds,
    setcolor, setcolor, setdepth, setdimension, setdown, setfont, setfont,
    setframes, setframes, setheight, setheight, sethit, setindentation,
    setleftfill, setleftmargin, setline, setlinespacing, setmargins,
    setmatrix, setname, setname, setover, setrate, setratio, setrightfill,
    setrightmargin, setspacing, setup, show_source, sizeof, skewx, skewxto,
    skewxto, skewy, skewyto, skewyto, snmpwalkoid, strchr, streammp3,
    swfaction, swfbitmap, swfbutton, swffill, swffont, swfgradient, swfmorph,
    swfmovie, swfshape, swfsprite, swftext, swftextfield, unlink,
    xptr_new_context, abstract, case, const, else, endif, for, if, namespace,
    protected, try, __CLASS__, __NAMESPACE__, die, include, require_once,  
    and, catch, continue, elseif, endswitch, foreach, implements, new,
    public, use, __DIR__, echo, include_once, return,  array, cfunction,
    declare, enddeclare, endwhile, function, interface, old_function, static,
    var, __FILE__, empty, isset, print, print_r, print_a,  as, class,
    default, endfor, extends, global, instanceof, or, switch, while,
    __FUNCTION__, exit, list, unset,  break, clone, do, endforeach, final,
    goto, private, throw, xor, __METHOD__, eval, require
  },
  sensitive=false,
  morecomment=[l]{//},
  morecomment=[s]{<!--}{-->},
  morestring=[b]",
  morestring=[d]',
}

\lstdefinelanguage{DWCSS}{
  keywords={
    azimuth, background-attachment, background-color, background-image,
    background-position, background-repeat, background, border-collapse,
    border-color, border-spacing, border-style, border-top, border-right,
    border-bottom, border-left, border-top-color, border-right-color,
    border-bottom-color, border-left-color, border-top-style,
    border-right-style, border-bottom-style, border-left-style,
    border-top-width, border-right-width, border-bottom-width,
    border-left-width, border-width, border, bottom, caption-side,
    clear, clip, color, content, counter-increment, counter-reset,
    cue-after, cue-before, cue, cursor, direction, display, elevation,
    empty-cells, float, font-family, font-size, font-style, font-variant,
    font-weight, font, height, left, letter-spacing, line-height,
    list-style-image, list-style-position, list-style-type, list-style,
    margin-right, margin-left, margin-top, margin-bottom, margin,
    max-height, max-width, min-height, min-width, orphans, outline-color,
    outline-style, outline-width, outline, overflow, padding-top,
    padding-right, padding-bottom, padding-left, padding, page-break-after,
    page-break-before, page-break-inside, pause-after, pause-before, pause,
    pitch-range, pitch, play-during, position, quotes, richness, right,
    speak-header, speak-numeral, speak-punctuation, speak, speech-rate,
    stress, table-layout, text-align, text-decoration, text-indent,
    text-transform, top, unicode-bidi, vertical-align, visibility,
    voice-family, volume, white-space, widows, width, word-spacing, z-index
  },
  sensitive=false,
  morecomment=[s]{/*}{*/},
  morestring=[b]",
  morestring=[d]'
}

\lstdefinelanguage{DWJAVASCRIPT}{
  keywords={break, const, continue, delete, do, while, export, for, in,
    function, if, else, import, in, instanceOf, label, let, new, return,
    switch, this, throw, try, catch, typeof, var, void, with, yield,
  },
  sensitive=false,
  morecomment=[l]{//},
  morecomment=[s]{/*}{*/},
  morestring=[b]",
  morestring=[d]',
}

\lstdefinelanguage{DWFlashAS}{
  keywords={
    as, break, case, catch, class, const, continue, default, delete,
    do, else, extends, false, finally, for, function, if, implements,
    import, in, instanceof, interface, internal, is, native, new, null,
    package, private, protected, public, return, super, switch, this,
    throw, to, true, try, typeof, use, var, void, while, with, each,
    get, set, namespace, include, dynamic, final, native, override, static,
  },
  sensitive=true,
  comment=[s][\color{commentcolor}]{/*}{*/},
  morecomment=[l][\color{commentcolor}]{//},
  string=[d]',
  morestring=[b]"',
}

\lstdefinelanguage{DWNONE}{
  keywords={},
  sensitive=false,
}

Der Quelltext kann anschließend im Dokument inline oder mithilfe einer externen Datein eingebunden werden. Die Inline-Methode bietet sich nur für sehr kurze Passagen an. Durch das externe Einbinden hat man den Vorteil, dass sich Änderungen am Quelltext automatisch auf das Ausgabe-Dokument auswirken.

%% intern
\begin{lstlisting}
  [language=DWNONE,
   firstline=54,
   captionpos=t,
   caption={Beschreibung}\label{lst:Label
},
 
]
  int i;
  for(i = 0; i < 10; i++) {
    printf("Das ist ein Test %d", i);
  }
\end{lstlisting}
 
%% extern
\lstinputlisting
  [language=DWC,  
   firstline=54,
   lastline=112,
   firstnumber=last,
   captionpos=t,
   caption={Beschreibung}\label{lst:Label},
 
]{Relativer/Pfad/zum/Quelltext.c
}