Algorithmus über 2 Seiten mit vertikalen Orientierungslinien

Fragen und Probleme, die nicht den obigen Kategorien zugeordnet werden können


swizz-john
Forum-Anfänger
Forum-Anfänger
Beiträge: 19
Registriert: Di 4. Jun 2013, 17:20

Algorithmus über 2 Seiten mit vertikalen Orientierungslinien

Beitrag von swizz-john »

Hi Leute,

gibt es die Möglichkeit folgendes Beispiel so anzupassen, dass der Algorithmus über 2 Seiten gebrochen werden kann und dennoch die Struktur der vertikalen Linien (also die Orientierung für Schleifen und Verzweigungen am linken Rand, wie im Beispiel zu sehen) erhalten bleiben?

Ein Umbruch ohne diese Orientierungslinien würde es schwer machen bei vielen Verzweigungen, nur anhand der Einrückung des Codes, überhaupt nachzuvollziehen in welcher Verzweigung man sich grad befindet.

Es wäre super, wenn einer eine Idee hätte;)

Hier mein Beispiel:
\documentclass{article}
\usepackage[ansinew]{inputenc}             
\usepackage[TS1,T1]{fontenc}
\usepackage{lmodern,textcomp}
\usepackage[english,ngerman]{babel}
\usepackage[linesnumbered,ruled,vlined]{algorithm2e}

\begin{document}


\begin{algorithm}
\DontPrintSemicolon % Some LaTeX compilers: \dontprintsemicolon 
      \KwIn{A finite set $A=\{a_1, a_2, \ldots, a_n\}$ of integers}
      \KwOut{The largest element in the set}
      $max \gets a_1$\;
      \For{$i \gets 2$ \textbf{to} $n$} {
      \If{$a_i > max$} {
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
       $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
       $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      $max \gets a_i$\;
      }
      }
      \Return{$max$}\;
      \caption{{\sc Max} finds the maximum number}
     \label{algo:max}
     \end{algorithm}
     \end{document}

Besserwisser

Beitrag von Besserwisser »

Die algorithm-Umgebung von algorithm2e ist eine Gleitumgebung. Gleitumgebungen können nie über mehrere Seiten umbrochen werden.

swizz-john
Forum-Anfänger
Forum-Anfänger
Beiträge: 19
Registriert: Di 4. Jun 2013, 17:20

Beitrag von swizz-john »

Hi, danke für die Info...

ich habe mittlerweile improvisiert indem ich diese end_if etc alle weglasse...so passt mein Algorithmus nun auf eine Seite;)

Eine Frage bleibt allerdings noch offen. Wie kann ich im algorithm2e - Paket das obige label "Data" und "Result" in von mir gewünschte Namen ändern?

ich hätte da statt "Data" gerne "Funktionsaufruf" und statt "Result" gerne "Resultat".

Mein jetziger Code lautet:
\documentclass[paper=a4,toc=bibliography,nonchapterprefix,parskip=true]{scrreprt}
\usepackage{caption}[2007/09/01] % needs v3.1
\usepackage[ruled,vlined]{algorithm2e}
\usepackage{float}

\begin{document}

\renewcommand{\baselinestretch}{1.3}
\begin{algorithm}
\SetAlgorithmName{Algorithmus}{}
\DontPrintSemicolon
\KwData{IPDP($no_{iter},~no_{path}~,\alpha,~ \beta,~ \rho,~\xi,~ q_0,~ no_{stag},~ flag_{ils},~ no_{ils},~ no_{ni},~ flag_{mff},\newline~\phantom{laaaaaaaaaaaaaa} veh_{data}, no_{veh}, no_{m})$}
\KwResult{Lösung zum IPDP}
$----------\texttt{Initialisierung und Preprocessing}-------------$\;
Lade Datensatz $\rightarrow~set$\;
Berechne Distanz: $\rightarrow~dist$\;
Initialisiere r-Werte: $\rightarrow~r$\;
$----------\texttt{Generiere Startlösung}-------------$\;
\For{$i=1:n_{path}$}{
$sol\_data_{k} \leftarrow new\_path (dist, set, veh_{data}, no_{m}, no_{kunden},\beta , \eta,r, q_0, flag_{mff})$\;
\If{$sol\_data_{k}.cost< sol\_data.cost$}{$sol\_data = sol\_data_{k}$\;}
}
\caption{IPDP Teil I/II\label{IPDP}}
\end{algorithm}
\end{document}

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2466
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Beitrag von Bartman »

Sieh Dir den Abschnitt 10.8 der Paketdokumentation an.

Defining a new keyword in algorithm2e

swizz-john
Forum-Anfänger
Forum-Anfänger
Beiträge: 19
Registriert: Di 4. Jun 2013, 17:20

Label anpassen Result, Data wie gewünscht ändern

Beitrag von swizz-john »

Hmm ich habe mir das Paket mal angeschaut und durchgelesen....

ich verstehe leider eine Sache immer noch nicht...Ersteres Beispiel funktioniert tadellos...zweites ist meiner Meingung nach analog, funktioniert aber nicht!
\documentclass[paper=a4,toc=bibliography,nonchapterprefix,parskip=true]{scrreprt}

\usepackage[utf8]{inputenc}
\usepackage[ruled,vlined,linesnumbered]{algorithm2e}
\let\oldnl\nl% Store \nl in \oldnl
\newcommand{\nonl}{\renewcommand{\nl}{\let\nl\oldnl}}% Remove line number for one line
\SetKwInOut{Funktion}{Funktionsaufruf}

\begin{document}

\renewcommand{\baselinestretch}{1.3}
\DontPrintSemicolon
\begin{algorithm}
\SetAlgorithmName{Algorithmus}{}
\Funktion{IPDP($no_{iter},~no_{path}~,\alpha,~\beta,~\rho,~\xi,~q_0,~no_{stag},~flag_{ils},~no_{ils},~no_{ni},~flag_{mff},\newline\phantom{laaaii}~veh_{data},~no_{veh},~no_{m})$}
\KwResult{Lösung zum IPDP}\vspace{1mm}
\nonl$----------\texttt{Initialisierung und Preprocessing}---------------$\;\vspace{1mm}
 Lade Datensatz $\rightarrow~set$\;
 Berechne Distanz: $\rightarrow~dist$\;
 Initialisiere r-Werte: $\rightarrow~r$\;\vspace{1mm}
\nonl$----------\texttt{Generiere Startlösung}----------------------$\;\vspace{1mm}
\For{$i=1:n_{path}$\vspace{1mm}}{
$sol\_data_{k}~\leftarrow~new\_path (dist,~set,~veh_{data},~no_{m},~no_{kunden},~\beta ,~\eta,~r,~q_0,~flag_{mff})$\;\vspace{1mm}
\If{$sol\_data_{k}.cost~<~sol\_data.cost$\vspace{1mm}}
{$sol\_data~\leftarrow~sol\_data_{k}$\;}
}
\caption{IPDP Teil I/II\label{IPDP}}
\end{algorithm}

%Jetzt beginnt der zweite Algorithmus, wobei obiges hier nicht funktioniert.

\renewcommand{\baselinestretch}{1.3}
\begin{algorithm}
\SetAlgorithmName{Algorithmus}{}
\DontPrintSemicolon
\Funktion{IPDP($no_{iter}$)}
\KwResult{Lösung zum IPDP}\vspace{1mm}
\For{$i=1:n_{path}$}{
$sol\_data_{k} \leftarrow new\_path (dist, set)$\;
\eIf{$sol\_data_{k}.cost< sol\_data.cost$}{$sol\_data = sol\_data_{k}$\;}{blablba}}
\caption{IPDP Teil I/II\label{IPDP}}
\end{algorithm}


\end{document}

Hat einer ne Idee was der Unterschied ist, warum das obige funktioniert und ich dort "Funktionsaufruf" stehen habe! aber dies unten nicht funktioniert?

Schöne Grüße

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2466
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Beitrag von Bartman »

\DontPrintSemicolon steht oben außerhalb der algorithm-Umgebung und unten innerhalb.
\documentclass{scrreprt}

\usepackage[utf8]{inputenc}
\usepackage[ruled,vlined,linesnumbered]{algorithm2e}
\let\oldnl\nl% Store \nl in \oldnl
\newcommand{\nonl}{\renewcommand{\nl}{\let\nl\oldnl}}% Remove line number for one line
\SetKwInOut{Funktion}{Funktionsaufruf}
\SetKwInput{KwResult}{Resultat}

\begin{document}

\renewcommand{\baselinestretch}{1.3}
\begin{algorithm}
\SetAlgorithmName{Algorithmus}{}
\DontPrintSemicolon
\Funktion{IPDP($no_{iter},~no_{path}~,\alpha,~\beta,~\rho,~\xi,~q_0,~no_{stag},~flag_{ils},~no_{ils},~no_{ni},\newline\phantom{laaaii}~flag_{mff},~veh_{data},~no_{veh},~no_{m})$}
\KwResult{Lösung zum IPDP}\vspace{1mm}
\tcp{----------Initialisierung und Preprocessing-------------}
 Lade Datensatz $\rightarrow~set$\;
 Berechne Distanz: $\rightarrow~dist$\;
 Initialisiere r-Werte: $\rightarrow~r$\;\vspace{1mm}
 \tcp{----------Generiere Startlösung-------------------------}
\For{$i=1:n_{path}$\vspace{1mm}}{
$sol\_data_{k}~\leftarrow~new\_path (dist,~set,~veh_{data},~no_{m},~no_{kunden},~\beta ,~\eta,~r,~q_0,~flag_{mff})$\;\vspace{1mm}
\If{$sol\_data_{k}.cost~<~sol\_data.cost$\vspace{1mm}}
{$sol\_data~\leftarrow~sol\_data_{k}$\;}
}
\caption{IPDP Teil I/II\label{IPDP}}
\end{algorithm}

\begin{algorithm}
\SetAlgorithmName{Algorithmus}{}
\DontPrintSemicolon
\Funktion{IPDP($no_{iter}$)}
\KwResult{Lösung zum IPDP}\vspace{1mm}
\For{$i=1:n_{path}$}{
$sol\_data_{k} \leftarrow new\_path (dist, set)$\;
\eIf{$sol\_data_{k}.cost< sol\_data.cost$}{$sol\_data = sol\_data_{k}$\;}{blablba}}
\caption{IPDP Teil I/II\label{IPDP}}
\end{algorithm}

\end{document}
Außerdem habe ich Deine beiden Bemerkungen im oberen Algorithmus in Kommentare verwandelt, weil ich den Eindruck habe, es sollen welche sein.

Die Änderung von \baselinestretch findet beim ersten Mal außerhalb der algorithm-Umgebung statt, d. h. die Folgen gelten auch für alle weiteren Umgebungen. Der zweite Aufruf von \renewcommand darf entfallen.

Was beabsichtigst Du mit Deinen \vspace{1mm}-Aufrufen innerhalb der algorithm-Umgebungen?
Zuletzt geändert von Bartman am Mo 18. Jan 2016, 23:19, insgesamt 1-mal geändert.

swizz-john
Forum-Anfänger
Forum-Anfänger
Beiträge: 19
Registriert: Di 4. Jun 2013, 17:20

Beitrag von swizz-john »

Super! Vielen Dank Bartman!;)

Ich nutze \vspace nur für optische Zwecke...mir scheint es an ein zwei Stellen in der Algorithmusumgebung manchmal so eng zu sein...vor allem mit den Subindizes...daher baue ich das einfach ein! finde ich halt schöner so!^^

Besten Dank nochmal!!

:!:

Antworten