PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SAS-Code in LaTeX darstellen



Myri
09-10-2010, 23:03
Hallo,

ich muss einige Seiten SAS-Code in LaTeX darstellen und würde gerne wissen, ob jemand Erfahrung damit hat und mir sagen kann, ob ich auf dem richtigen Weg bin.

Bisher nutze ich nur das listings-Paket. Dabei treten allerdings einige Probleme auf.

1. Beispielsweise werden lange Programmzeilen nicht umgebrochen und gehen über den Seitenrand hinaus.

2. Auch die Farbdarstellung von SAS, die den Code wesentlich übersichtlicher macht, wird nicht automatisch angewendet. Wie die entsprechenden Wörter farbig dargestellt werden sollen, muss manuell eingegeben werden (wie unten für DATA, INPUT usw. geschehen). Hierfür muss es doch eine Lösung geben, wenn sogar in Foren eingegebener SAS-Code http://redscope.org/node/1344 (wie hier) farbig richtig dargestellt wird?

3. Ich habe es auf meinem Arbeits-Rechner noch nie geschafft, ein LaTeX-Paket so zu installieren, dass es gefunden wird... Darum vorab die Frage: Hat ZUFÄLLIG jemand Erfahrung mit dem Paket SASdisplay und wäre diese Lösung meiner bisherigen vorzuziehen?

Vielen Dank im Voraus,
Myri


\documentclass[oneside,parskip=full-]{scrbook}

\usepackage[T1]{fontenc}

\usepackage[ngerman]{babel}

\usepackage{listings,color,xcolor}


\colorlet{SAS_darkblue}{blue!80!black}
\colorlet{SAS_blue}{blue}

\begin{document}

\lstset{language=S,
emph={DATA}, emphstyle=\color{SAS_darkblue},
emph={[2]INPUT,DATALINES,{CREATE TABLE}}, emphstyle={[2]\color{SAS_blue}}
}

\begin{lstlisting}
DATA Quell;
INPUT Menge Preis;
DATALINES;
10 4.99
12 4.99
;

PROC SQL;
CREATE TABLE
Quell2
AS SELECT Menge2, Preis2
FROM Quell (RENAME=Menge=Menge2 RENAME=Preis=Preis2);
QUIT;
\end{lstlisting}


\end{document}

mechanicus
09-10-2010, 23:19
1. Beispielsweise werden lange Programmzeilen nicht umgebrochen und gehen über den Seitenrand hinaus.

Dafür gibt es die Option breaklines



2. Auch die Farbdarstellung von SAS, die den Code wesentlich übersichtlicher macht, wird nicht automatisch angewendet.

Dafür musst du wirklich einige Wörter entsprechend angeben.
Einige funktionieren aber schon mit:

\lstset{language=SAS,
keywordstyle=\color{green},
}




\documentclass[oneside,parskip=full-]{scrbook}

\usepackage[T1]{fontenc}

\usepackage[ngerman]{babel}

\usepackage{listings,xcolor}


\colorlet{SAS_darkblue}{blue!80!black}
\colorlet{SAS_blue}{blue}

\begin{document}

\lstset{language=SAS,
keywordstyle=\color{green},
}

\begin{lstlisting}
DATA Quell;
INPUT Menge Preis;
DATALINES;
10 4.99
12 4.99
;

PROC SQL;
CREATE TABLE
Quell2
AS SELECT Menge2, Preis2
FROM Quell (RENAME=Menge=Menge2 RENAME=Preis=Preis2);
QUIT;
\end{lstlisting}


\end{document}

Gruß
Marco

Myri
10-10-2010, 16:04
Danke für die Antwort und den Hinweis mit breaklines!

Dann werd ich mich jetzt mal intensiver mit listings beschäftigen...


P.S.: keywordstyle ordnet leider Wörtern die gleiche Farbe zu, die in SAS in unterschiedlichen Farben angezeigt werden.

Myri
13-10-2010, 02:54
Hmmm... leider verstehe ich trotz intensiver Beschäftigung mit dem Paket listings nicht, welchen Mehrwert es zur Darstellung von Programm-Code liefern soll...

Oder vielleicht wollte man es so breit aufstellen (alle möglichen Sprachen), dass es für vereinzelte Sprachen (wie eben SAS) unbrauchbar ist.

Hat jemand positive Erfahrungen gemacht oder eine andere Empfehlung?

Sonst werde ich wohl langsam anfangen müssen, alles per Hand in LaTeX einzugeben. Dann lassen sich wenigstens die farblichen Hervorhebungen korrekt setzen (insbesondere bei im Programm-Code enthaltenen Kommentaren zur Abgrenzung sehr wichtig) und das Ganze in einen Node von tikz gepackt sieht sauberer aus als der unkonsistente Hintergrund, den listings zeichnet.

edico
13-10-2010, 15:14
Schau mal hier: http://data.imf.au.dk/system/latex/lokalepakker/SASdisplay.pdf

Vielleicht hilft's so:



\documentclass{article}

\usepackage[utf8x]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[scaled=.8]{beramono}

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


\begin{document}

\section*{Listing -- SAS code}
\lstset{%
language = SAS,%
basicstyle=\ttfamily\small,%
keywordstyle= \color{DarkGreen},%
%
morekeywords={SASAUTOS,LABEL},
morekeywords={PROC,INSIGHT,SCATTER,QUIT,FORMAT,VAL UE},
morekeywords={DISCRIM,WCOV,WSSCP,METHOD,POOL},
morekeywords={DATALINES,WITH,OPTIONS,GPLOT,LS,PS},
morekeywords={SYSLIN,INSTRUMENTS,ENDOGENOUS,EXOGEN OUS,IDENTITY,%
WEIGHT,OLS,2SLS,LIML,SUR,ITSUR,3SLS,IT3SLS,FIML,ME LO},
morekeywords={MODEL,OUT,STDR,STDP,H,R,STUDENT,RSTU DENT,PRESS,%
UCL,LCL,UCLM,LCLM,CL},
morekeywords={FREQ,TABLES},
morekeywords={GLM,CLASS,LSMEANS,MANOVA,MTEST,REG,P RINTE,%
FILENAME,GOPTIONS,DEV,CTEXT,GACCESS,NOPRINT,CONTRA ST,ESTIMATE,RANDOM},
morekeywords={SS1,SS2,SS3,SSD,SS4,CLI,CLM,CLPARM},
morekeywords={NOUNI,OUTPUT},
morekeywords={E,E1,E2,E3,SOLUTION,TEST},%
morekeywords={IML,USE,READ,ALL,INTO,PRINT,COLNAME, ROWNAME,CREATE,%
FROM,APPEND},
morekeywords={MIXED,DDFM,REPEATED,PARMS,PRIOR,ALPH A,TYPE},
morekeywords={GREPLAY,NOFS,NOBYLINE,IGOUT,TC,TEMPL ATE,TREPLAY,GOUT},
morekeywords={GSFMODE,TARGETDEVICE,ROTATE,CBACK,GU NIT,HTITLE,HTEXT,%
FTEXT,CSYMBOL,ANNOTATE},
morekeywords={SYMBOL,SYMBOL1,SYMBOL2,SYMBOL3,SYMBO L4,SYMBOL5,SYMBOL6,%
SYMBOL7,SYMBOL8},
morekeywords={LEGEND1,LEGEND2,LEGEND3,ANGLE},
morekeywords={INTERPOL,I},
morekeywords={AXIS,AXIS1,AXIS2,AXIS3,AXIS4,AXIS5,A XIS6,AXIS7,AXIS8,%
HAXIS,VAXIS,ORDER},
morekeywords={MINOR,WIDTH,COLOR,GPLOT,PLOT,OVERLAY },
morekeywords={I,V,L,H,C,ANGLE,NOLEGEND,USS,OF},
morekeywords={TITLE,TITLE1,TITLE2,TITLE3,TITLE4,TI TLE5,TITLE6},
morekeywords={PRINCOMP,COV},
morekeywords={GSFNAME,GSASFILE,INCLUDE},
morekeywords={GENMOD,LINK,FWDLINK,INVLINK,ASSESS,A SSESSMENT,OBSTATS,%
SCALE,DSCALE,PSCALE},
morekeywords={TYPE1,TYPE3,WALD,WALDCI,XVARS},
morekeywords={DIST,TOTAL,NOINT,OFFSET},
morekeywords={ODS,LISTING,ParameterEstimates,RESDE V,STDRESDEV,%
PREDICTED,RESCHI,RESLIK,STDRESCHI},
morekeywords={XBETA,STDXBETA,LOWER,UPPER,HESSWGT},
morekeywords={FWDLINK,INVLINK,VARIANCE,DEVIANCE},
%
commentstyle= \color{gray}\slshape,
morecomment = [s]{[]},% Kommentare in eckigen Klammern
stringstyle = \color{gray}\slshape,
morestring = [b]",% Zitate in " "
breaklines = true,%
frame=single,% rahmen eine linie
framesep=3pt,% abstand rahmen-inhalt
xleftmargin=0em,%
xrightmargin=5pt,% rand rechts
belowcaptionskip=7pt,%
aboveskip=10pt plus 3pt minus 5pt,%
belowskip=10pt plus 3pt minus 5pt,%
}

\begin{lstlisting}[caption={Beispiel SAS Code}]
DATA Quell;
INPUT Menge Preis;
DATALINES;
10 4.99
12 4.99
;
[Alle Kommentare in eckigen Klammern]
"Alle Zitate in Anfuehrungsstrichen"
PROC SQL;
CREATE TABLE
Quell2
AS SELECT Menge2, Preis2
FROM Quell (RENAME=Menge=Menge2 RENAME=Preis=Preis2);
QUIT;
\end{lstlisting}

\end{document}


edico

Myri
13-10-2010, 23:37
Hallo und danke für die Antwort!

Ich denke auch, dass man mit SASDisplay vielleicht mehr reißen kann (ist ja offenbar für SAS ausgelegt).

Sobald ich Zeit habe und rausfinde, wie man auf meinem Arbeitsrechner (MacOS) die Pakete so installiert, dass LaTeX sie auch erkennt, melde ich mich noch mal in diesem Thread.

Momentan sieht der von Hand eingegebene Code einfach besser und übersichtlicher aus als meine bisherigen listings-Versuche.