3

I have this algorithm, which as you can see is too long to fit into one a4 paper. I have used the solution in here, but there was an error telling me that \AND, \OR, and \TO are undefined. I would really appreciate it if you could guide me on how I should split this in two pages with one title and label. Is there a way that while keeping this structure, the Farsi text be right-aligned?

\documentclass[a4paper,11pt]{book}
\usepackage{amsthm,amssymb}
\usepackage{unicode-math}
\usepackage[pagebackref=false,colorlinks,linkcolor=red,citecolor=red]{hyperref}
\usepackage{graphicx}
\graphicspath{{./images/}}
\usepackage{fancyhdr}
\usepackage{tikz}
\newcommand*\circled[1]{\tikz[baseline=(char.base)]{
        \node[shape=circle,draw,inner sep=2pt] (char) {#1};}}
\usepackage{csquotes}
\usepackage{setspace}
\usepackage{algorithm}
\makeatletter 
\renewcommand\thealgorithm{\thechapter.\arabic{algorithm}} 
\@addtoreset{algorithm}{chapter} 
\makeatother

\usepackage{algorithmic} \usepackage{optidef} \usepackage{enumitem} \usepackage[square,comma,sort&compress,numbers]{natbib} \usepackage{multirow} \usepackage{array} \usepackage{tabularray} \usepackage[perpagefootnote=on]{bidi} \usepackage{xepersian} \settextfont[Scale=1]{XB Zar} \setlatintextfont[Scale=1]{Times New Roman} \setdigitfont[Scale=1]{XM Yekan}\begin{document}\begin{algorithm}[h] \caption{\textbf{استخراج یک شبکهٔ لایه‌ای}} \label{alg:3-6-e} \begin{algorithmic} \begin{LTR} \STATE \textbf{procedure }LAYER$(G_{L},l,\text{stpath});$ \STATE \rl{ $\rbrace$فرایند، شبکهٔ لایه‌ای $G_{L}=\left(V_{L},E_{L}\right)$ با $l$ لایه را از شبکهٔ $G$ با طرح جریان $F$ استخراج می‌کند. اگر هیچ مسیر $s-t$ ای وجود نداشته باشد، \lr{stpath} مقدار \lr{false} می‌گیرد.$\lbrace$} \STATE INITIALIZATION: \STATE $\text{stpath}\leftarrow\text{true};$ \FORALL{$v\in V$} \STATE\textbf{begin} \STATE $\text{label}(v)\leftarrow-1;$ \STATE $\text{succ}(v)\leftarrow\varnothing;$\hspace{5mm}$\lbrace$\rl{جانشینان و سلف‌های گره‌ها در شبکهٔ لایه‌ای}$\rbrace$ \STATE $\text{pred}(v)\leftarrow\varnothing$ \ENDFOR \STATE $V_{1}\leftarrow\lbrace s\rbrace;$ \STATE $\text{label}(s)\leftarrow1;$ \STATE $E_{L}\leftarrow\varnothing;$\hspace{5mm}$\lbrace$\rl{$E_{L}$ مجموعهٔ یال‌های شبکهٔ لایه‌ای}$\rbrace$ \STATE $i\leftarrow1;$\hspace{5mm}$\lbrace$\rl{عدد لایهٔ کنونی $i$ است}$\rbrace$ \STATE ITERATION: \hspace{10mm}$\lbrace$\rl{پیمایش پیشرو و برچسب‌زنی}$\rbrace$ \WHILE{$(V_{i}\neq\varnothing),,$\AND$,,(\text{label}(t)=-1)$} \STATE\textbf{begin} \STATE $V_{i+1}\leftarrow\varnothing;$ \FORALL{$x\in V_{i}$} \STATE\textbf{begin} \FOR{\rl{هر یال خروجی $(x,y)$ از $x$، اگر $f_{x y}<c_{x y}$ و برای هر یال ورودی $(y,x)$ به $x$ اگر $f_{y x}>0,,$}\AND $,,(\text{label}(y)=-1,,$\OR$,,\text{label}(y)=i+1)$} \STATE\textbf{begin} \STATE $V_{i+1}\leftarrow V_{i+1}\cup\lbrace y\rbrace;$ \STATE $\text{label}(y)\leftarrow i+1;$ \STATE $\text{succ}(x)\leftarrow\text{succ}(x)\cup\lbrace y\rbrace;$ \STATE $\text{pred}(y)\leftarrow\text{pred}(y)\cup\lbrace x\rbrace;$ \STATE $E_{L}\leftarrow E_{L}\cup\lbrace\left(x,y\right)\rbrace$ \ENDFOR \ENDFOR \STATE $i\leftarrow i+1$ \ENDWHILE \STATE $l\leftarrow i;$ \STATE ITERATION$:$\hspace{10mm}$\lbrace$\rl{پیمایش پسرو و هرس‌کردن} \IF{$\text{label}(t)=-1$} \STATE $\text{stpath}\leftarrow\text{false}$\hspace{5mm}\rl{خروج} \STATE \rl{چون مسیر مفیدی از $s$ به $t$ وجود ندارد، برچسب‌زنی ممکن نیست} \STATE\textbf{else} \STATE\rl{یال‌ها و گره‌های پراکنده \lr{stray} را حذف کن} \STATE\textbf{begin} \STATE $j\leftarrow i;$ \WHILE{$j\neq1$} \STATE\textbf{begin} \FORALL{$w\in V_{j}$} \IF{$\left(\text{succ}(u)=\varnothing\right),,$\AND$,,\left(w\neq t\right)$} \STATE \textbf{begin} \FORALL{$x\in\text{pred}(w)$} \STATE \textbf{begin} \STATE $E_{L}\leftarrow E_{L}-\left{\left(x,w\right)\right};$ \STATE $\text{succ}(x)\leftarrow\text{succ}(x)-\left{w\right}$ \ENDFOR \STATE $V_{j}\leftarrow V_{j}-\left{w\right};$ \STATE $\text{pred}(w)\leftarrow\varnothing$ \ENDIF \STATE $j\leftarrow j-1$ \ENDFOR \ENDWHILE \ENDIF \end{LTR} \end{algorithmic} \end{algorithm} \end{document}

mali1234
  • 135
  • 1
    You probably just need \newcommand{\AND}{\textbf{and}} \newcommand{\OR}{\textbf{or}} \newcommand{\TO}{\textbf{to}} added to your preamble. – Werner Oct 25 '23 at 22:40
  • Not to mention a \begin{document} and \end{document} Algorithm is a float, and you can't have a two page float. If algorithmic were breakable, you could manually break it into two floats. But since it isn't breakable, see https://tex.stackexchange.com/questions/204703/multicols-not-breaking-procedures-in-algorithm2e – John Kormylo Oct 26 '23 at 00:17
  • Your code does not compile. Provide a working MWE. – Rounak Niloy Oct 26 '23 at 04:13
  • @RounakNiloy Sorry, I have modified it, so it compiles now – mali1234 Oct 26 '23 at 06:45
  • @mali1234 It still does not compile. – Rounak Niloy Oct 26 '23 at 08:33
  • @RounakNiloy I presume you used an online editor. I just compiled it in TeXstudio, and it worked fine, save the part of not fitting in the page of course. – mali1234 Oct 27 '23 at 10:25
  • @cfr I am not lying. I did copy and paste the code above, and there were some warnings, but no errors. After your comment, I did the same again ,and the message I got is: Process started: xelatex.exe -synctex=1 -interaction=nonstopmode "ffff".tex, Process exited normally – mali1234 Oct 28 '23 at 05:57
  • @mali1234 If the algorithm exceeds one page then it is hard to read anyway. Restructure it: Use functions to break the algorithm into digestible units. Then the top algorithm contains the main loop at best, and otherwise calls functions. I would make a suggestion if I could read Farsi: restructuring does not mean to break the algorithm into arbitrary parts but into logical units, which need an understanding of the algorithm. Wishing for a breakable algorithm environment rather means the former: splitting the algorithm arbitrarily in two and requiring the reader to go back and forth – gernot Oct 28 '23 at 11:35
  • Just for the record: The code in its current form compiles (after installing the fonts). – gernot Oct 28 '23 at 11:37
  • @gernot Thanks for the advice. I have suggested the same to my client, but he insists that this being a translation must keep the format of the original text. – mali1234 Oct 28 '23 at 17:07
  • @mali1234 Sorry for lecturing you. For a translation, it makes perfect sense to stick to the original and to avoid any creativity. – gernot Oct 28 '23 at 17:55
  • @mali1234 What's wrong with the solution that you mention in your post, and Werner's suggestion to add the missing command definitions to the preamble? This compiles and results in two floats. Maybe you have to tweak it a bit in the end to make the floats appear on successive pages, but this seems to be manageable. – gernot Oct 28 '23 at 18:09
  • @gernot No need to apologize. The problem arises when I use algorithmic environment without it being encompassed in algorithm environment. At the end of each of these occasions, a sign of "=0" appears with the errors: "Missing = inserted for \ifnum. \end{algorithmic}" and "Missing number, treated as zero. \end{algorithmic}". – mali1234 Oct 29 '23 at 07:36
  • @mali1234 I just tried without the algorithm environment, there was no problem. So I guess the error you see originates from somewhere else. You can download the two versions (with and without algorithm) from here. It will expire in 6 days. – gernot Oct 29 '23 at 15:40
  • @gernot The curious thing is when I compile your modified code in the file "with_algorithm.tex", it works beautifully, but when I paste it in my code which I have already altered according to the solution presented in the post, and adding the commands Werner kindly proposed, I get all sorts of errors. However, as soon as I comment out the newcommand and algcompatible and use algorithmic, all is fine. – mali1234 Oct 30 '23 at 11:18
  • Errors like: "Missing number, treated as zero. ^^I\end{algorithmic}", "Missing \endcsname inserted. ^^I^^I^^I\STATE", "Missing = inserted for \ifnum". (Fine without \algref command of course). – mali1234 Oct 30 '23 at 11:20
  • @mali1234 There may be an invisible character in the lines you commented out. You could try to retype the lines, or view the file with an editor that shows also non-printable characters. – gernot Oct 30 '23 at 12:52
  • 2
    Apologies. I did not realise \begin{document} was buried midline. (And I couldn't compile the code to check because I certainly do get errors as those are not standard fonts.) [For the record, I wasn't suggesting you were lying, in any case. It's much more common for people to simply be mistaken.] – cfr Oct 31 '23 at 03:11

2 Answers2

1

Identify a Split Point: Find a natural break point in your algorithm where you can split it into two parts. This could be after a major step or a set of related operations.

Use \ContinuedFloat: LaTeX provides the \ContinuedFloat command in the caption package to continue floats (like figures and algorithms) across multiple pages. This command helps in maintaining the same figure or algorithm number across pages.

Modify Your LaTeX Code:

First Part (Page 1): Begin your algorithm as usual with \begin{algorithm} and end it at your chosen split point with \end{algorithm}.

Second Part (Page 2): Start the second part of the algorithm on the next page with \begin{algorithm} again, but this time add \ContinuedFloat right after \begin{algorithm}. Continue the algorithm from where you left off and end it with \end{algorithm}.

Ensure Consistent Labeling and Captioning: The \ContinuedFloat command ensures that the algorithm number and label remain consistent across pages. You can use the same caption for both parts or modify it slightly (e.g., "Algorithm 1: My Algorithm (cont.)") to indicate the continuation.

Optional: Page Break: If you need to manually insert a page break between the two parts of the algorithm, use the \clearpage command. This ensures that the first part ends on one page and the second part starts at the top of the next page. for typesetting the sample code, especially due to the inclusion of additional fonts, it's necessary to utilize XeLaTeX.


\documentclass[a4paper,11pt]{book}
\usepackage{amsthm,amssymb}
\usepackage{unicode-math}
\usepackage[pagebackref=false,colorlinks,linkcolor=red,citecolor=red]{hyperref}
\usepackage{graphicx}
\graphicspath{{./images/}}
\usepackage{fancyhdr}
\usepackage{tikz}
\newcommand*\circled[1]{\tikz[baseline=(char.base)] {
    \node[shape=circle,draw,inner sep=2pt] (char) {#1};}}

\usepackage{csquotes} \usepackage{setspace} \usepackage{algorithm} \makeatletter \renewcommand\thealgorithm{\thechapter.\arabic{algorithm}} @addtoreset{algorithm}{chapter} \makeatother

\usepackage{algorithmic} \usepackage{optidef} \usepackage{enumitem} \usepackage[square,comma,sort&compress,numbers]{natbib} \usepackage{multirow} \usepackage{array} \usepackage{tabularray} \usepackage{caption} %use it before bidi \usepackage[perpagefootnote=on]{bidi} \usepackage{xepersian}

\settextfont[Scale=1]{XB Zar} \setlatintextfont[Scale=1]{Times New Roman} \setdigitfont[Scale=1]{XM Yekan}\begin{document}\begin{algorithm}[h] \caption{\textbf{استخراج یک شبکهٔ لایه‌ای}} \label{alg:3-6-e}

\begin{algorithmic}
    \begin{LTR}
        \STATE \textbf{procedure }LAYER$(G_{L},l,\text{stpath});$
        \STATE \rl{
            $\rbrace$فرایند، شبکهٔ لایه‌ای $G_{L}=\left(V_{L},E_{L}\right)$ با $l$ لایه را از شبکهٔ $G$ با طرح جریان $F$ استخراج می‌کند. اگر هیچ مسیر $s-t$ ای وجود نداشته باشد، \lr{stpath} مقدار \lr{false} می‌گیرد.$\lbrace$}
        \STATE INITIALIZATION:
        \STATE $\text{stpath}\leftarrow\text{true};$
        \FORALL{$v\in V$}
        \STATE\textbf{begin}
        \STATE $\text{label}(v)\leftarrow-1;$
        \STATE $\text{succ}(v)\leftarrow\varnothing;$\hspace{5mm}$\lbrace$\rl{جانشینان و سلف‌های گره‌ها در شبکهٔ لایه‌ای}$\rbrace$
        \STATE $\text{pred}(v)\leftarrow\varnothing$
        \ENDFOR
        \STATE $V_{1}\leftarrow\lbrace s\rbrace;$
        \STATE $\text{label}(s)\leftarrow1;$
        \STATE $E_{L}\leftarrow\varnothing;$\hspace{5mm}$\lbrace$\rl{$E_{L}$ مجموعهٔ یال‌های شبکهٔ لایه‌ای}$\rbrace$
        \STATE $i\leftarrow1;$\hspace{5mm}$\lbrace$\rl{عدد لایهٔ کنونی $i$ است}$\rbrace$
        \STATE ITERATION: \hspace{10mm}$\lbrace$\rl{پیمایش پیشرو و برچسب‌زنی}$\rbrace$
        \WHILE{$(V_{i}\neq\varnothing)\,\,$\AND$\,\,(\text{label}(t)=-1)$}
        \STATE\textbf{begin}
        \STATE $V_{i+1}\leftarrow\varnothing;$
        \FORALL{$x\in V_{i}$}
        \STATE\textbf{begin}
        \FOR{\rl{هر یال خروجی $(x,y)$ از $x$، اگر $f_{x y}&lt;c_{x y}$ و برای هر یال ورودی $(y,x)$ به $x$ اگر $f_{y x}&gt;0\,\,$}\AND $\,\,(\text{label}(y)=-1\,\,$\OR$\,\,\text{label}(y)=i+1)$}
        \STATE\textbf{begin}
        \STATE $V_{i+1}\leftarrow V_{i+1}\cup\lbrace y\rbrace;$
        \STATE $\text{label}(y)\leftarrow i+1;$
        \STATE $\text{succ}(x)\leftarrow\text{succ}(x)\cup\lbrace y\rbrace;$
        \STATE $\text{pred}(y)\leftarrow\text{pred}(y)\cup\lbrace x\rbrace;$
        \STATE $E_{L}\leftarrow E_{L}\cup\lbrace\left(x,y\right)\rbrace$
        \ENDFOR
        \ENDFOR
        \STATE $i\leftarrow i+1$
        \ENDWHILE
    \end{LTR}
\end{algorithmic}
\end{algorithm}     
\begin{algorithm}
    \ContinuedFloat % To continue the same algorithm numbering
    \caption{Your Algorithm Title (cont.)} % Optional: Modify caption if needed
    \begin{algorithmic}
    \begin{LTR}
        \STATE $l\leftarrow i;$
        \STATE ITERATION$:$\hspace{10mm}$\lbrace$\rl{پیمایش پسرو و هرس‌کردن}
        \IF{$\text{label}(t)=-1$}
        \STATE $\text{stpath}\leftarrow\text{false}$\hspace{5mm}\rl{خروج}
        \STATE \rl{چون مسیر مفیدی از $s$ به $t$ وجود ندارد، برچسب‌زنی ممکن نیست}
        \STATE\textbf{else}
        \STATE\rl{یال‌ها و گره‌های پراکنده \lr{stray} را حذف کن}
        \STATE\textbf{begin}
        \STATE $j\leftarrow i;$
        \WHILE{$j\neq1$}
        \STATE\textbf{begin}
        \FORALL{$w\in V_{j}$}
        \IF{$\left(\text{succ}(u)=\varnothing\right)\,\,$\AND$\,\,\left(w\neq t\right)$}
        \STATE \textbf{begin}
        \FORALL{$x\in\text{pred}(w)$}
        \STATE \textbf{begin}
        \STATE $E_{L}\leftarrow E_{L}-\left\{\left(x,w\right)\right\};$
        \STATE $\text{succ}(x)\leftarrow\text{succ}(x)-\left\{w\right\}$
        \ENDFOR
        \STATE $V_{j}\leftarrow V_{j}-\left\{w\right\};$
        \STATE $\text{pred}(w)\leftarrow\varnothing$
        \ENDIF
        \STATE $j\leftarrow j-1$%
        \ENDFOR
        \ENDWHILE
        \ENDIF
    \end{LTR}
\end{algorithmic}

\end{algorithm} \end{document}

Nod Ulus
  • 11
  • 3
  • Thanks for your time. I have gotten an error which says: "Unknown option algcompatible' for packagealgorithmicx'. \usepackage". – mali1234 Oct 30 '23 at 21:55
  • Have you actually tried the proposed solution? algcompatible is not a package option, but a package. How can your code possibly work? – gernot Nov 01 '23 at 10:53
  • Gernot has the right. Sorry for this. But this corrected code works for me like a charm. And for typesetting the sample code, especially due to the inclusion of additional fonts, it's necessary to utilize XeLaTeX. – Nod Ulus Nov 12 '23 at 11:22
1

I offer three solutions:

  1. algorithm split into two floats
  2. non-floating algorithm with an automatic page break
  3. non-floating algorithm with a manual page break

Algorithm split into two floats

The structure is as follows. See below for a complete document.

\usepackage{algcompatible}
\newcommand{\AND}{\textbf{and}}
\newcommand{\OR}{\textbf{or}}
\newcommand{\TO}{\textbf{to}}
\usepackage{algorithm}% for the float 'algorithm'
\begin{document}
\begin{algorithm}
    \caption{...}\label{...}
    \begin{algorithmic}
        ...
        \algstore{myalg}
    \end{algorithmic}
\end{algorithm}
\begin{algorithm}
    \caption{...}\label{...}
    \begin{algorithmic}
        \algrestore{myalg}
        ...
    \end{algorithmic}
\end{algorithm}

Non-floating algorithm with an automatic page break

The structure is as follows. See below for a complete document.

\usepackage{algcompatible}
\newcommand{\AND}{\textbf{and}}
\newcommand{\OR}{\textbf{or}}
\newcommand{\TO}{\textbf{to}}
\begin{document}
\begin{algorithmic}
    ...
\end{algorithmic}

Non-floating algorithm with a manual page break

The structure is as follows. See below for a complete document.

\usepackage{algcompatible}
\newcommand{\AND}{\textbf{and}}
\newcommand{\OR}{\textbf{or}}
\newcommand{\TO}{\textbf{to}}
\begin{document}
\begin{algorithmic}
    ...
    \algstore{myalg}
\end{algorithmic}
\newpage
\begin{algorithmic}
    \algrestore{myalg}
    ...
\end{algorithmic}

Example: Algorithm split into two floats

enter image description here Because of the extra fonts, use xelatex to typeset the sample code.

\documentclass[a4paper,11pt]{book}
\usepackage{amsthm,amssymb}
\usepackage{unicode-math}
\usepackage{algcompatible}
\usepackage{algorithm}
\makeatletter 
\renewcommand\thealgorithm{\thechapter.\arabic{algorithm}} 
\@addtoreset{algorithm}{chapter} 
\makeatother
\newcommand{\AND}{\textbf{and}}
\newcommand{\OR}{\textbf{or}}
\newcommand{\TO}{\textbf{to}}

\usepackage{xepersian} \settextfont[Scale=1]{XB Zar} \setlatintextfont[Scale=1]{Times New Roman} \setdigitfont[Scale=1]{XM Yekan}

\begin{document} \begin{algorithm} \caption{\textbf{استخراج یک شبکهٔ لایه‌ای}} \label{alg:3-6-e-1} \begin{algorithmic} \begin{LTR} \STATE \textbf{procedure }LAYER$(G_{L},l,\text{stpath});$ \STATE \rl{ $\rbrace$فرایند، شبکهٔ لایه‌ای $G_{L}=\left(V_{L},E_{L}\right)$ با $l$ لایه را از شبکهٔ $G$ با طرح جریان $F$ استخراج می‌کند. اگر هیچ مسیر $s-t$ ای وجود نداشته باشد، \lr{stpath} مقدار \lr{false} می‌گیرد.$\lbrace$} \STATE INITIALIZATION: \STATE $\text{stpath}\leftarrow\text{true};$ \FORALL{$v\in V$} \STATE\textbf{begin} \STATE $\text{label}(v)\leftarrow-1;$ \STATE $\text{succ}(v)\leftarrow\varnothing;$\hspace{5mm}$\lbrace$\rl{جانشینان و سلف‌های گره‌ها در شبکهٔ لایه‌ای}$\rbrace$ \STATE $\text{pred}(v)\leftarrow\varnothing$ \ENDFOR \STATE $V_{1}\leftarrow\lbrace s\rbrace;$ \STATE $\text{label}(s)\leftarrow1;$ \STATE $E_{L}\leftarrow\varnothing;$\hspace{5mm}$\lbrace$\rl{$E_{L}$ مجموعهٔ یال‌های شبکهٔ لایه‌ای}$\rbrace$ \STATE $i\leftarrow1;$\hspace{5mm}$\lbrace$\rl{عدد لایهٔ کنونی $i$ است}$\rbrace$ \STATE ITERATION: \hspace{10mm}$\lbrace$\rl{پیمایش پیشرو و برچسب‌زنی}$\rbrace$ \WHILE{$(V_{i}\neq\varnothing),,$\AND$,,(\text{label}(t)=-1)$} \STATE\textbf{begin} \STATE $V_{i+1}\leftarrow\varnothing;$ \FORALL{$x\in V_{i}$} \STATE\textbf{begin} \FOR{\rl{هر یال خروجی $(x,y)$ از $x$، اگر $f_{x y}<c_{x y}$ و برای هر یال ورودی $(y,x)$ به $x$ اگر $f_{y x}>0,,$}\AND $,,(\text{label}(y)=-1,,$\OR$,,\text{label}(y)=i+1)$} \STATE\textbf{begin} \STATE $V_{i+1}\leftarrow V_{i+1}\cup\lbrace y\rbrace;$ \STATE $\text{label}(y)\leftarrow i+1;$ \STATE $\text{succ}(x)\leftarrow\text{succ}(x)\cup\lbrace y\rbrace;$ \STATE $\text{pred}(y)\leftarrow\text{pred}(y)\cup\lbrace x\rbrace;$ \STATE $E_{L}\leftarrow E_{L}\cup\lbrace\left(x,y\right)\rbrace$ \ENDFOR \ENDFOR \STATE $i\leftarrow i+1$ \ENDWHILE \algstore{myalg} \end{LTR} \end{algorithmic} \end{algorithm} \begin{algorithm} \caption{\textbf{استخراج یک شبکهٔ لایه‌ای}} \label{alg:3-6-e-2} \begin{algorithmic} \begin{LTR} \algrestore{myalg} \STATE $l\leftarrow i;$ \STATE ITERATION$:$\hspace{10mm}$\lbrace$\rl{پیمایش پسرو و هرس‌کردن} \IF{$\text{label}(t)=-1$} \STATE $\text{stpath}\leftarrow\text{false}$\hspace{5mm}\rl{خروج} \STATE \rl{چون مسیر مفیدی از $s$ به $t$ وجود ندارد، برچسب‌زنی ممکن نیست} \STATE\textbf{else} \STATE\rl{یال‌ها و گره‌های پراکنده \lr{stray} را حذف کن} \STATE\textbf{begin} \STATE $j\leftarrow i;$ \WHILE{$j\neq1$} \STATE\textbf{begin} \FORALL{$w\in V_{j}$} \IF{$\left(\text{succ}(u)=\varnothing\right),,$\AND$,,\left(w\neq t\right)$} \STATE \textbf{begin} \FORALL{$x\in\text{pred}(w)$} \STATE \textbf{begin} \STATE $E_{L}\leftarrow E_{L}-\left{\left(x,w\right)\right};$ \STATE $\text{succ}(x)\leftarrow\text{succ}(x)-\left{w\right}$ \ENDFOR \STATE $V_{j}\leftarrow V_{j}-\left{w\right};$ \STATE $\text{pred}(w)\leftarrow\varnothing$ \ENDIF \STATE $j\leftarrow j-1$ \ENDFOR \ENDWHILE \ENDIF \end{LTR} \end{algorithmic} \end{algorithm} \end{document}


Example: Non-floating algorithm with an automatic page break

enter image description here

Because of the extra fonts, use xelatex to typeset the sample code.

\documentclass[a4paper,11pt]{book}
\usepackage{amsthm,amssymb}
\usepackage{unicode-math}
\usepackage{algcompatible}
\newcommand{\AND}{\textbf{and}}
\newcommand{\OR}{\textbf{or}}
\newcommand{\TO}{\textbf{to}}
\usepackage{xepersian}
\settextfont[Scale=1]{XB Zar}
\setlatintextfont[Scale=1]{Times New Roman}
\setdigitfont[Scale=1]{XM Yekan}
\begin{document}
    \begin{algorithmic}
        \begin{LTR}
            \STATE \textbf{procedure }LAYER$(G_{L},l,\text{stpath});$
            \STATE \rl{
                $\rbrace$فرایند، شبکهٔ لایه‌ای $G_{L}=\left(V_{L},E_{L}\right)$ با $l$ لایه را از شبکهٔ $G$ با طرح جریان $F$ استخراج می‌کند. اگر هیچ مسیر $s-t$ ای وجود نداشته باشد، \lr{stpath} مقدار \lr{false} می‌گیرد.$\lbrace$}
            \STATE INITIALIZATION:
            \STATE $\text{stpath}\leftarrow\text{true};$
            \FORALL{$v\in V$}
            \STATE\textbf{begin}
            \STATE $\text{label}(v)\leftarrow-1;$
            \STATE $\text{succ}(v)\leftarrow\varnothing;$\hspace{5mm}$\lbrace$\rl{جانشینان و سلف‌های گره‌ها در شبکهٔ لایه‌ای}$\rbrace$
            \STATE $\text{pred}(v)\leftarrow\varnothing$
            \ENDFOR
            \STATE $V_{1}\leftarrow\lbrace s\rbrace;$
            \STATE $\text{label}(s)\leftarrow1;$
            \STATE $E_{L}\leftarrow\varnothing;$\hspace{5mm}$\lbrace$\rl{$E_{L}$ مجموعهٔ یال‌های شبکهٔ لایه‌ای}$\rbrace$
            \STATE $i\leftarrow1;$\hspace{5mm}$\lbrace$\rl{عدد لایهٔ کنونی $i$ است}$\rbrace$
            \STATE ITERATION: \hspace{10mm}$\lbrace$\rl{پیمایش پیشرو و برچسب‌زنی}$\rbrace$
            \WHILE{$(V_{i}\neq\varnothing)\,\,$\AND$\,\,(\text{label}(t)=-1)$}
            \STATE\textbf{begin}
            \STATE $V_{i+1}\leftarrow\varnothing;$
            \FORALL{$x\in V_{i}$}
            \STATE\textbf{begin}
            \FOR{\rl{هر یال خروجی $(x,y)$ از $x$، اگر $f_{x y}<c_{x y}$ و برای هر یال ورودی $(y,x)$ به $x$ اگر $f_{y x}>0\,\,$}\AND $\,\,(\text{label}(y)=-1\,\,$\OR$\,\,\text{label}(y)=i+1)$}
            \STATE\textbf{begin}
            \STATE $V_{i+1}\leftarrow V_{i+1}\cup\lbrace y\rbrace;$
            \STATE $\text{label}(y)\leftarrow i+1;$
            \STATE $\text{succ}(x)\leftarrow\text{succ}(x)\cup\lbrace y\rbrace;$
            \STATE $\text{pred}(y)\leftarrow\text{pred}(y)\cup\lbrace x\rbrace;$
            \STATE $E_{L}\leftarrow E_{L}\cup\lbrace\left(x,y\right)\rbrace$
            \ENDFOR
            \ENDFOR
            \STATE $i\leftarrow i+1$
            \ENDWHILE
            \STATE $l\leftarrow i;$
            \STATE ITERATION$:$\hspace{10mm}$\lbrace$\rl{پیمایش پسرو و هرس‌کردن}
            \IF{$\text{label}(t)=-1$}
            \STATE $\text{stpath}\leftarrow\text{false}$\hspace{5mm}\rl{خروج}
            \STATE \rl{چون مسیر مفیدی از $s$ به $t$ وجود ندارد، برچسب‌زنی ممکن نیست}
            \STATE\textbf{else}
            \STATE\rl{یال‌ها و گره‌های پراکنده \lr{stray} را حذف کن}
            \STATE\textbf{begin}
            \STATE $j\leftarrow i;$
            \WHILE{$j\neq1$}
            \STATE\textbf{begin}
            \FORALL{$w\in V_{j}$}
            \IF{$\left(\text{succ}(u)=\varnothing\right)\,\,$\AND$\,\,\left(w\neq t\right)$}
            \STATE \textbf{begin}
            \FORALL{$x\in\text{pred}(w)$}
            \STATE \textbf{begin}
            \STATE $E_{L}\leftarrow E_{L}-\left\{\left(x,w\right)\right\};$
            \STATE $\text{succ}(x)\leftarrow\text{succ}(x)-\left\{w\right\}$
            \ENDFOR
            \STATE $V_{j}\leftarrow V_{j}-\left\{w\right\};$
            \STATE $\text{pred}(w)\leftarrow\varnothing$
            \ENDIF
            \STATE $j\leftarrow j-1$
            \ENDFOR
            \ENDWHILE
            \ENDIF
        \end{LTR}
    \end{algorithmic}
\end{document}

Example: Non-floating algorithm with a manual page break

enter image description here

Because of the extra fonts, use xelatex to typeset the sample code.

\documentclass[a4paper,11pt]{book}
\usepackage{amsthm,amssymb}
\usepackage{unicode-math}
\usepackage{algcompatible}
\newcommand{\AND}{\textbf{and}}
\newcommand{\OR}{\textbf{or}}
\newcommand{\TO}{\textbf{to}}
\usepackage{xepersian}
\settextfont[Scale=1]{XB Zar}
\setlatintextfont[Scale=1]{Times New Roman}
\setdigitfont[Scale=1]{XM Yekan}
\begin{document}
    \begin{algorithmic}
        \begin{LTR}
            \STATE \textbf{procedure }LAYER$(G_{L},l,\text{stpath});$
            \STATE \rl{
                $\rbrace$فرایند، شبکهٔ لایه‌ای $G_{L}=\left(V_{L},E_{L}\right)$ با $l$ لایه را از شبکهٔ $G$ با طرح جریان $F$ استخراج می‌کند. اگر هیچ مسیر $s-t$ ای وجود نداشته باشد، \lr{stpath} مقدار \lr{false} می‌گیرد.$\lbrace$}
            \STATE INITIALIZATION:
            \STATE $\text{stpath}\leftarrow\text{true};$
            \FORALL{$v\in V$}
            \STATE\textbf{begin}
            \STATE $\text{label}(v)\leftarrow-1;$
            \STATE $\text{succ}(v)\leftarrow\varnothing;$\hspace{5mm}$\lbrace$\rl{جانشینان و سلف‌های گره‌ها در شبکهٔ لایه‌ای}$\rbrace$
            \STATE $\text{pred}(v)\leftarrow\varnothing$
            \ENDFOR
            \STATE $V_{1}\leftarrow\lbrace s\rbrace;$
            \STATE $\text{label}(s)\leftarrow1;$
            \STATE $E_{L}\leftarrow\varnothing;$\hspace{5mm}$\lbrace$\rl{$E_{L}$ مجموعهٔ یال‌های شبکهٔ لایه‌ای}$\rbrace$
            \STATE $i\leftarrow1;$\hspace{5mm}$\lbrace$\rl{عدد لایهٔ کنونی $i$ است}$\rbrace$
            \STATE ITERATION: \hspace{10mm}$\lbrace$\rl{پیمایش پیشرو و برچسب‌زنی}$\rbrace$
            \WHILE{$(V_{i}\neq\varnothing)\,\,$\AND$\,\,(\text{label}(t)=-1)$}
            \STATE\textbf{begin}
            \STATE $V_{i+1}\leftarrow\varnothing;$
            \FORALL{$x\in V_{i}$}
            \STATE\textbf{begin}
            \FOR{\rl{هر یال خروجی $(x,y)$ از $x$، اگر $f_{x y}<c_{x y}$ و برای هر یال ورودی $(y,x)$ به $x$ اگر $f_{y x}>0\,\,$}\AND $\,\,(\text{label}(y)=-1\,\,$\OR$\,\,\text{label}(y)=i+1)$}
            \STATE\textbf{begin}
            \STATE $V_{i+1}\leftarrow V_{i+1}\cup\lbrace y\rbrace;$
            \STATE $\text{label}(y)\leftarrow i+1;$
            \STATE $\text{succ}(x)\leftarrow\text{succ}(x)\cup\lbrace y\rbrace;$
            \STATE $\text{pred}(y)\leftarrow\text{pred}(y)\cup\lbrace x\rbrace;$
            \STATE $E_{L}\leftarrow E_{L}\cup\lbrace\left(x,y\right)\rbrace$
            \ENDFOR
            \ENDFOR
            \STATE $i\leftarrow i+1$
            \ENDWHILE
            \algstore{myalg}
        \end{LTR}
      \end{algorithmic}
\newpage
\begin{algorithmic}
    \begin{LTR}
  \algrestore{myalg}
        \STATE $l\leftarrow i;$
        \STATE ITERATION$:$\hspace{10mm}$\lbrace$\rl{پیمایش پسرو و هرس‌کردن}
        \IF{$\text{label}(t)=-1$}
        \STATE $\text{stpath}\leftarrow\text{false}$\hspace{5mm}\rl{خروج}
        \STATE \rl{چون مسیر مفیدی از $s$ به $t$ وجود ندارد، برچسب‌زنی ممکن نیست}
        \STATE\textbf{else}
        \STATE\rl{یال‌ها و گره‌های پراکنده \lr{stray} را حذف کن}
        \STATE\textbf{begin}
        \STATE $j\leftarrow i;$
        \WHILE{$j\neq1$}
        \STATE\textbf{begin}
        \FORALL{$w\in V_{j}$}
        \IF{$\left(\text{succ}(u)=\varnothing\right)\,\,$\AND$\,\,\left(w\neq t\right)$}
        \STATE \textbf{begin}
        \FORALL{$x\in\text{pred}(w)$}
        \STATE \textbf{begin}
        \STATE $E_{L}\leftarrow E_{L}-\left\{\left(x,w\right)\right\};$
        \STATE $\text{succ}(x)\leftarrow\text{succ}(x)-\left\{w\right\}$
        \ENDFOR
        \STATE $V_{j}\leftarrow V_{j}-\left\{w\right\};$
        \STATE $\text{pred}(w)\leftarrow\varnothing$
        \ENDIF
        \STATE $j\leftarrow j-1$
        \ENDFOR
        \ENDWHILE
        \ENDIF
    \end{LTR}
\end{algorithmic}

\end{document}

gernot
  • 49,614