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}
18
  • 1
    You probably just need \newcommand{\AND}{\textbf{and}} \newcommand{\OR}{\textbf{or}} \newcommand{\TO}{\textbf{to}} added to your preamble.
    – Werner
    Commented Oct 25, 2023 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 tex.stackexchange.com/questions/204703/… Commented Oct 26, 2023 at 0:17
  • Your code does not compile. Provide a working MWE. Commented Oct 26, 2023 at 4:13
  • @RounakNiloy Sorry, I have modified it, so it compiles now
    – mali1234
    Commented Oct 26, 2023 at 6:45
  • 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
    Commented Oct 31, 2023 at 3:11

2 Answers 2

1
+50

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}
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}<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
        \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}
3
  • Thanks for your time. I have gotten an error which says: "Unknown option algcompatible' for package algorithmicx'. \usepackage".
    – mali1234
    Commented Oct 30, 2023 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
    Commented Nov 1, 2023 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
    Commented Nov 12, 2023 at 11:22

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .