将很长的算法拆分成两页

将很长的算法拆分成两页

我有这个算法,正如你所见,它太长了,无法放在一张 A4 纸上。我曾在这里,但出现错误,提示我 \AND、\OR 和 \TO 未定义。如果您能指导我如何将其拆分为两个页面,并设置一个标题和标签,我将不胜感激。有没有办法在保持这种结构的同时,让波斯语文本右对齐?

\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}

答案1

我提供三种解决方案:

  1. 算法分成两个浮点数
  2. 具有自动分页的非浮动算法
  3. 带有手动分页符的非浮动算法

算法分为两个浮点数

结构如下。完整文档请参见下文。

\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}

具有自动分页符的非浮动算法

结构如下。完整文档请参见下文。

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

带有手动分页符的非浮动算法

结构如下。完整文档请参见下文。

\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}

示例:算法拆分成两个浮点数

在此处输入图片描述 由于有多余的字体,因此用来xelatex排版示例代码。

\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}

示例:具有自动分页符的非浮动算法

在此处输入图片描述

由于有多余的字体,因此用来xelatex排版示例代码。

\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}

示例:带有手动分页符的非浮动算法

在此处输入图片描述

由于有多余的字体,因此用来xelatex排版示例代码。

\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}

答案2

确定分割点:在算法中找到一个自然的断点,以便将其分成两部分。这可能是一个主要步骤或一组相关操作之后。

使用 \ContinuedFloat:LaTeX 在 caption 包中提供了 \ContinuedFloat 命令,用于跨多页继续浮动(如图形和算法)。此命令有助于跨页面保持相同的图形或算法编号。

修改您的 LaTeX 代码:

第一部分(第 1 页):像往常一样使用 \begin{algorithm} 开始您的算法,并使用 \end{algorithm} 在您选择的分割点结束它。

第二部分(第 2 页):在下一页再次使用 \begin{algorithm} 开始算法的第二部分,但这次在 \begin{algorithm} 之后添加 \ContinuedFloat。从上次中断的地方继续算法,并以 \end{algorithm} 结束。

确保标签和标题一致:\ContinuedFloat 命令可确保算法编号和标签在各个页面上保持一致。您可以对两个部分使用相同的标题,也可以对其进行轻微修改(例如,“算法 1:我的算法(续)”)以表示连续性。

可选:分页符:如果您需要在算法的两个部分之间手动插入分页符,请使用 \clearpage 命令。这可确保第一部分在一页上结束,第二部分从下一页的顶部开始。为了排版示例代码,特别是由于包含其他字体,必须使用 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}

相关内容