PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Seitenumbruch in Algorithmic?



TeXBjoern
30-06-2009, 17:02
Hallo liebe Wissende,

ich benutze das Algorithmic Paket um meinen Pseudocode darzustellen. Das klappt auch alles ganz gut. Jedoch ist in einer Methode der Pseudocode leider mehr als eine Seite lang und die Floatumgebung bricht natürlich nicht. Kann man irgendwie etwas manipulieren oder anders versuchen, um die sonst recht nützliche algorithm Umgebung weiter zu verwenden?
Ich weiß, dass eine Methode, die im Pseudocode schon eine Seite sprengt eher umzuschreiben wäre, aber das geht aus gewissen Gründen nicht.

Lieben Gruß,
Bjoern

TeXBjoern
30-06-2009, 18:04
Ich hab mir selbst eine Lösung zusammengebastelt, indem ich einfach anstatt

\begin{algorithm}
\caption{my algorithm}
\label{alg:myAlg}
\begin{algorithmic}[1]
\STATE my veeeeery long code here
\end{algorithmic}
\end{algorithm}

einfach


\hrule
\textbf{Algorithm} my algorithm
\label{alg:myAlg}
\hrule
\begin{algorithmic}[1]
\STATE my veeeeery long code here
\end{algorithmic}
\hrule

verwendet habe. Es sieht zwar nicht so schön aus, da
a) der Abstand die Schrift in "\textbf{Algorithm} my algorithm" nicht mittig zwischen den 2 hrule platziert ist
b) der Zähler für die Algorithms nicht beachtet wird
Aber immerhin etwas.

Falls jemand für die letzten 2 Problemchen vielleicht eine schmucke Lösung weiß, bitte gerne schreiben.

LG,
Bjoern

sommerfee
30-06-2009, 21:17
\textbf{Algorithm} my algorithm

Stattdessen könnte man auch \captionof{algorithm}{my algorithm} schreiben, wenn man das caption-Paket geladen hat. Dann stimmt auch die Nummerierung und die Referenzen darauf, d.h. Problem b) wäre damit gelöst.


a) der Abstand die Schrift in "\textbf{Algorithm} my algorithm" nicht mittig zwischen den 2 hrule platziert ist

Ich hatte mal eine Lösung gebastelt, die die Originaldefinitionen zum Zeichnen der Linien wiederverwendet, so daß das Ergebnis identisch aussieht. Nur leider finde ich es auf die Schnelle nicht mehr wieder, ich weiß auch gar nicht, ob das hier im Forum war (ich meine aber schon) oder woanders... Ich werde morgen abend nochmal ausführlicher danach suchen.

Liebe Grüße,
Axel

sommerfee
30-06-2009, 21:30
Die passenden Beiträge im Forum habe ich zwar nicht gefunden, dafür aber folgende TeX-Datei auf meinem Rechner:


\documentclass{article}
\usepackage{algorithm,algorithmic}
\usepackage{caption}[2007/09/01] % needs 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}

% self-build
\begin{center}
\captionsetup{style=ruled,type=algorithm,skip=0pt}
\makeatletter
\fst@algorithm\@fs@pre
\makeatother
\caption{Calculate $y = x^n$}%
\makeatletter
\@fs@mid\vspace{2pt}
\makeatother
\label{alg2}
\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
\vspace{2pt}\@fs@post
\makeatother
\end{center}

\end{document}


HTH,
Axel

TeXBjoern
01-07-2009, 10:16
Vielen herzlichen Dank, Sommerfee! So eine tolle funktionierende Lösung sollte man im Zusammenhang mit dem Algorithm(ic) Package sowie Deinem(?) Fix mal irgendwo anpinnen oder festhalten. Toll!

Mat
25-11-2009, 18:42
Würde das auch mit Zeilnennummern gehen? @sommerfee ??

sommerfee
25-11-2009, 19:59
Sollte gehen. Es wird ja nach wie vor die algorithmic-Umgebung verwendet, lediglich algorithm (also die Gleitumgebung drumherum) wird ersetzt.