PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem bei mehrseitigen Algorithmen



bucada
26-06-2006, 17:18
Hi !!!

Ich muss in meinem Dokument ein Algorithmus reinschreiben, der über zwei Seiten geht.
Doch nachdem ich dies getan habe, so wird die Seite bis zum Ende angezeigt und der Rest des Algorithmus wird einfach abgeschnitten, als wenn da nichts stünde :(



\begin{algorithm}
\caption{\label{was auch immer} Algo Name}
\begin{algorithmic}
\REQUIRE{Eingabe}
\ENSURE{Ausgabe}
\STATE{\hrulefill}
\end{algorithmic}
\begin{algorithmic}
\STATE{\hspace{0cm}
\begin{center}
\begin{flushleft}
.... Hier der Algo........
.....etwas lang........
\end{flushleft}
\end{center}}
\STATE{\hspace{0cm}}
\end{algorithmic}
\label{was auch immer}
\end{algorithm}


Weiss jemand, wie ich einen Algorithmus auf zwei Seiten schreiben kann?

bischi
26-06-2006, 18:43
Ich weiss zwar nicht genau, was deinen Anforderungen sind, könnte mir jedoch vorstellen, dass das Paket listings auch funktionieren könnte. Ansonsten halt den Algorithmus auf zwei Umgebungen aufteilen...

MfG Bischi

RedCloud
27-06-2006, 08:01
Hi !!!

Ich muss in meinem Dokument ein Algorithmus reinschreiben, der über zwei Seiten geht.
Doch nachdem ich dies getan habe, so wird die Seite bis zum Ende angezeigt und der Rest des Algorithmus wird einfach abgeschnitten, als wenn da nichts stünde :(


\begin{algorithm}
\caption{\label{was auch immer} Algo Name}



-- nimm keine Fließumgebung (algorithm), die kann nur auf einer Seite erscheinen.
-- Schreibe die caption selbst (Paket caption) \captionof{algorithm}{AlgoName}\label{foo}
-- Weiter normal mit \begin{algorithmic}


rc

bucada
27-06-2006, 12:33
Wunderbar. Vielen Dank für Eure Hilfe. :)

luzi78
18-07-2007, 15:13
Hi!

Ich hab das jetzt auch so gemacht wie vorgeschlagen und das haut auch super hin, hab aber jetzt ein Folgeproblem. Nach der Verwendung von sizeof{algorithm} sind die Beschriftungen aller Bilder nicht mehr zentriert sonder links und 'Figure' ist fett geschrieben. Wie kann ich das wieder in die Mitte bringen?

Danke
Luzi

sommerfee
18-07-2007, 17:30
Ich hab das jetzt auch so gemacht wie vorgeschlagen und das haut auch super hin, hab aber jetzt ein Folgeproblem. Nach der Verwendung von sizeof{algorithm} sind die Beschriftungen aller Bilder nicht mehr zentriert sonder links und 'Figure' ist fett geschrieben. Wie kann ich das wieder in die Mitte bringen?

Ein Minimalbeispiel wäre hilfreich.

Ansonsten hat mein Blick in meine Kristallkugel ergeben: Du verwendest vermutlich \captionof nicht immerhalb einer Umgebung; \captionof muß immer in eine minipage, parbox oder was-auch-immer gesteckt werden, zur Not reicht auch ein \begingroup ... \endgroup (bzw. einfache geschweifte Klammern). Ansonsten kann es zu den merkwürdigsten Nebenwirkungen kommen.

(Die nächste Version vom caption-Paket wird deswegen auch in diesem Fall eine Fehlermeldung ausgeben, zumindest wenn e-TeX als TeX verwendet wird.)

Liebe Grüße,
Axel

bsamuel
15-01-2008, 02:24
Hatte genau dasselbe Problem (mehrseitigen Code) und war froh, hier eine Antwort zu finden.

Klappt auch gut und der vollständige Code wird nun richtig dargestellt. Die Caption jedoch hat nun einen anderen Stil. Wie kriege ich die wieder so hin, wie es das algorithm-Package standardmässig macht (mit zwei horizontalen Linien um die Caption am Anfang und einer am Schluss, ruled-style)?

Herzlichen Dank für die Hilfe

sommerfee
15-01-2008, 09:41
Die Caption jedoch hat nun einen anderen Stil. Wie kriege ich die wieder so hin, wie es das algorithm-Package standardmässig macht (mit zwei horizontalen Linien um die Caption am Anfang und einer am Schluss, ruled-style)?

Die Linien mußt du in diesem Falle wohl mit \hrule bzw. \rule selber zeichnen. Den Stil der Beschriftung kannst du mit \captionsetup{style=ruled,type=algorithm,skip=0pt} umschalten, wenn du das caption-Paket lädst.

Andere Idee: Auf die internen Makros des float-Paketes zurückgreifen, z.B.:



\documentclass{article}
\usepackage{algorithm,algorithmic}
\usepackage{caption}[2007/09/01] % v3.1

\begin{document}

% normal
\begin{algorithm}[H]
\caption{Calculate $y = x^n$}
\label{alg1}
\begin{algorithmic}
\REQUIRE $n \geq 0 \vee x \neq 0$
\ENSURE $y = x^n$

\STATE $y \Leftarrow 1$
\IF{$n < 0$}
\STATE $X \Leftarrow 1 / x$
\STATE $N \Leftarrow -n$
\ELSE
\STATE $X \Leftarrow x$
\STATE $N \Leftarrow n$
\ENDIF

\WHILE{$N \neq 0$}
\IF{$N$ is even}
\STATE $X \Leftarrow X \times X$
\STATE $N \Leftarrow N / 2$
\ELSE[$N$ is odd]
\STATE $y \Leftarrow y \times X$
\STATE $N \Leftarrow N - 1$
\ENDIF
\ENDWHILE
\end{algorithmic}
\end{algorithm}

% selbstgebaut
\begin{center}
\captionsetup{style=ruled,type=algorithm,skip=0pt}
\makeatletter
\fst@algorithm\@fs@pre
\makeatother
\caption{Calculate $y = x^n$}%
\label{alg2}
\makeatletter
\@fs@mid
\makeatother
\begin{algorithmic}
\REQUIRE $n \geq 0 \vee x \neq 0$
\ENSURE $y = x^n$

\STATE $y \Leftarrow 1$
\IF{$n < 0$}
\STATE $X \Leftarrow 1 / x$
\STATE $N \Leftarrow -n$
\ELSE
\STATE $X \Leftarrow x$
\STATE $N \Leftarrow n$
\ENDIF

\WHILE{$N \neq 0$}
\IF{$N$ is even}
\STATE $X \Leftarrow X \times X$
\STATE $N \Leftarrow N / 2$
\ELSE[$N$ is odd]
\STATE $y \Leftarrow y \times X$
\STATE $N \Leftarrow N - 1$
\ENDIF
\ENDWHILE
\end{algorithmic}
\makeatletter
\@fs@post
\makeatother
\end{center}

\end{document}


Wie man sieht stimmen die Abstände unter/über den Linien nicht perfekt, hier müsste man noch Finetuning betreiben.

Gruß,
Axel

bsamuel
15-01-2008, 12:41
Wow, super, herzlichen Dank für die blitzschnelle Antwort, Axel!

Die selbstgebastelte Version sieht auf den ersten Blick genau so aus, wie ich es gerne hätte. Werde schauen, ob Finetuning noch nötig ist, bin damit schon mal sehr zufrieden. Danke!