PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit algpseudocode und Zeilennummerierung von algorithmic



secret3des
11-03-2008, 14:25
Hi!

Ich habe Probleme mit der Zeilennummerierung, wenn ich \usepackage{algpseudocode} verwende, um \Function (und Co) zu ermöglichen.

Kann mir jemand sagen wie ich die Fehler beheben kann?

(siehe auch: http://www.mrunix.de/forums/showthread.php?t=56962 )

Anbei ein "Minimal"beispiel und das Paket (TexnicCenter Projekt) inkl. Log-Datei und PDF:
http://home.arcor.de/3des/alg_test.zip

Viele Grüße,
Tom



\documentclass[titlepage, 12pt, final,oneside]{scrbook}
\KOMAoptions{paper=a4}

\usepackage[automark,headsepline]{scrpage2} % für die Formatierung (der Fuß- und Kopfzeile)
\usepackage[latin1]{inputenc} % für die Unterstützung von Umlauten
\usepackage[ngerman]{babel} % deutsche Silbentrennung

\usepackage{float}

\usepackage{caption}
\usepackage{algorithmic}
\usepackage{algorithm}
\usepackage{algpseudocode}

\makeatletter
\newcounter{algorithmic}
\let\ORIG@algorithmic\algorithmic
\def\algorithmic{\stepcounter{algorithmic}\ORIG@al gorithmic}
\def\theHALC@line{\thealgorithmic-\theALC@line}
\def\theHALC@rem{\thealgorithmic-\theALC@rem}
\makeatother

\usepackage[pdftex,
colorlinks=true, linkcolor=blue, urlcolor=blue, citecolor=blue,
raiselinks=true,
bookmarks=false,
bookmarksopenlevel=1,
bookmarksopen=true,
bookmarksnumbered=true,
hyperindex=true,
plainpages=false,% correct hyperlinks
pdfpagelabels=true%,% view TeX pagenumber in PDF reader
%pdfborder={0 0 0.5}
]{hyperref} % erzeuge Hyperlinks z.B. für pdflatex

\begin{document}

\begin{flushleft}
\captionsetup{style=ruled,type=algorithm,skip=0pt}
\makeatletter
\fst@algorithm\@fs@pre
\makeatother
\caption{blub}
\label{alg:blub}
\makeatletter
\@fs@mid
\makeatother
\algsetup{indent=1em}
\algsetup{linenodelimiter=.}
\renewcommand{\algorithmiccomment}[1]{// #1 }
\textbf{Eingaben:~} Relation $R$, Zwei dimensionale Pareto-Präferenz $P:=P_1\:\otimes P_2$\\
\textbf{Ausgabe:~} BMO set
\begin{algorithmic}[1]
\Function{void TestFunc}{Typ param1, Typ2 param2}
\State Ergebnis $\leftarrow \emptyset$\\
\Comment{Die Level-Werte des letzten Tupels im BMO-Set speichern}
\State int bla1 = MAX\_INTEGER, bla2 = MAX\_INTEGER;
~\\
\Comment{Sortieren nach blub}
~\\
\State SORT(blub);
\ForAll{$t \in R$}
\If{xy $\leq$ bla1} \label{alg:blub:vgl1a}
\State
\Comment{$t$ zu Ergebnis hinzufügen}
\State Ergebnis = Ergebnis $\cup t$ \label{alg:blub:bmo1}
\State bla1 = xy;
\EndIf
\EndFor
\EndFunction
\end{algorithmic}
\makeatletter
\@fs@post
\makeatother
\end{flushleft}

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum.


Referenz auf Zeile \ref{alg:blub:vgl1a} und noch eine Referenz auf Zeile \ref{alg:blub:bmo1}.

\end{document}

sommerfee
11-03-2008, 15:06
\usepackage{algorithmic}
\usepackage{algorithm}
\usepackage{algpseudocode}

Das Paket algpseudocode lädt automatisch das algorithmicx-Paket, welches aber inkompatibel zum algorithmic-Paket ist.



\makeatletter
\newcounter{algorithmic}
\let\ORIG@algorithmic\algorithmic
\def\algorithmic{\stepcounter{algorithmic}\ORIG@al gorithmic}
\def\theHALC@line{\thealgorithmic-\theALC@line}
\def\theHALC@rem{\thealgorithmic-\theALC@rem}
\makeatother


Dieser Patch war auf das algorithmic-Paket ausgelegt und dürfte daher mit algorithmicx so nicht funktionieren.

Mein Versuch:


\documentclass[titlepage, 12pt, final,oneside]{scrbook}
\KOMAoptions{paper=a4}

\usepackage[automark,headsepline]{scrpage2} % für die Formatierung (der Fuß- und Kopfzeile)
\usepackage[latin1]{inputenc} % für die Unterstützung von Umlauten
\usepackage[ngerman]{babel} % deutsche Silbentrennung

\usepackage{float}
\usepackage{caption}
\usepackage{algpseudocode}

\usepackage[pdftex,
colorlinks=true, linkcolor=blue, urlcolor=blue, citecolor=blue,
raiselinks=true,
bookmarks=false,
bookmarksopenlevel=1,
bookmarksopen=true,
bookmarksnumbered=true,
hyperindex=true,
plainpages=false,% correct hyperlinks
pdfpagelabels=true%,% view TeX pagenumber in PDF reader
%pdfborder={0 0 0.5}
]{hyperref} % erzeuge Hyperlinks z.B. für pdflatex

\usepackage{algorithm} % nach hyperref laden, siehe hyperref-readme

\begin{document}

\begin{flushleft}
\captionsetup{style=ruled,type=algorithm,skip=0pt}
\makeatletter
\fst@algorithm\@fs@pre
\makeatother
\caption{blub}
\label{alg:blub}
\makeatletter
\@fs@mid
\makeatother
\algsetup{indent=1em}
\algsetup{linenodelimiter=.}
\renewcommand{\algorithmiccomment}[1]{// #1 }
\textbf{Eingaben:~} Relation $R$, Zwei dimensionale Pareto-Präferenz $P:=P_1\:\otimes P_2$\\
\textbf{Ausgabe:~} BMO set
\begin{algorithmic}[1]
\Function{void TestFunc}{Typ param1, Typ2 param2}
\State Ergebnis $\leftarrow \emptyset$\\
\Comment{Die Level-Werte des letzten Tupels im BMO-Set speichern}
\State int bla1 = MAX\_INTEGER, bla2 = MAX\_INTEGER;
~\\
\Comment{Sortieren nach blub}
~\\
\State SORT(blub);
\ForAll{$t \in R$}
\If{xy $\leq$ bla1} \label{alg:blub:vgl1a}
\State
\Comment{$t$ zu Ergebnis hinzufügen}
\State Ergebnis = Ergebnis $\cup t$ \label{alg:blub:bmo1}
\State bla1 = xy;
\EndIf
\EndFor
\EndFunction
\end{algorithmic}
\makeatletter
\@fs@post
\makeatother
\end{flushleft}

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum.


Referenz auf Zeile \ref{alg:blub:vgl1a} und noch eine Referenz auf Zeile \ref{alg:blub:bmo1}.

\end{document}


Dies gibt jetzt "nur" noch 2 Fehlermeldungen statt 6, weil er \algsetup nicht kennt. Dafür müsste man sich in der algorithmicx-Dokumentation was passendes raussuchen und stattdessen nehmen.

Gruß,
Axel

secret3des
11-03-2008, 17:38
Hi!

Danke für die schnelle Antwort und deinen Vorschlag. Kannst du mir bitte noch einen Tipp geben wie man das mit dem indent lösen könnte? Ich hab da bis jetzt keine Lösung gefunden.

Gäbe es eine (einfache) Möglichkeit das "function" (bzw. procedure) in algorithmc zu integrieren?

Viele Grüße,
Tom

secret3des
12-03-2008, 14:38
Nuja.. ich hab es jetzt erstmal "quick & dirty" gemacht mit:

\renewcommand\algorithmicwhile{\textbf{function}}
\renewcommand\algorithmicendwhile{\textbf{end function}}

Das "do" nach der function ist zwar nicht ganz schön, aber es erfüllt den Zweck und sieht auch ordentlich aus. Und Fehler gibt es auch keine.

Viele Grüße,
Tom