• 【实用技巧】Latex写算法伪代码(格式篇)


    本文主要介绍个人在编写Latex算法伪代码时所遇到的格式问题。

    包冲突

    \usepackage{algorithm}  
    \usepackage{algorithmic}  
    \usepackage{algorithmicx}
    \usepackage{algpseudocode}  
    
    • 1
    • 2
    • 3
    • 4

    网上查找算法伪代码第三方包,主要会跳出来这四个库。但事实上这些包之间存在一些命名上的冲突,\usepackage{algorithmic}\usepackage{algorithmicx} 在方法上会有大小写的要求差异,如果调用了\usepackage{algorithmic},那么你的方法需要全部用大写字母表示,例如

    \STATE
    
    \FOR{...}
    \ENDFOR
    
    • 1
    • 2
    • 3
    • 4

    如果同时调用这些包,则会在编译的时候出现报错:

    在这里插入图片描述
    这时候最简单的方式就是,注释掉冲突包:

    \usepackage{algorithm}  
    \usepackage{algorithmic}  
    %\usepackage{algorithmicx}
    %\usepackage{algpseudocode}  
    
    • 1
    • 2
    • 3
    • 4

    换行与缩进

    • 换行使用\STATE单起一行即可
    • 缩进可以使用\qquad

    例子

    \begin{breakablealgorithm}
    	\caption{YOLOv8 model}
    	\begin{algorithmic}[6]
    		
    		\STATE Initialize YOLOv8 Network (Darknet or other backbone)
    		\STATE \qquad Initialize SE, CBAM, SOCA attention modules
    		\STATE
    		\FOR{epoch in 1...N}
    		\FOR{batch in DataLoader}
    		\STATE images, ground\_truths = batch
    		\ENDFOR
    		\ENDFOR
    		\STATE
    	\end{algorithmic}
    \end{breakablealgorithm}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    编译结果:

    在这里插入图片描述


    算法换页

    有些时候,LaTeX中的算法伪代码很长需要跨页展示,如下如图所示:

    在这里插入图片描述
    我们只需要在\begin{document}之前定义breakablealgorithm环境,代码如下

    \makeatletter
    \newenvironment{breakablealgorithm}
      {% \begin{breakablealgorithm}
       \begin{center}
         \refstepcounter{algorithm}% New algorithm
         \hrule height.8pt depth0pt \kern2pt% \@fs@pre for \@fs@ruled
         \renewcommand{\caption}[2][\relax]{% Make a new \caption
           {\raggedright\textbf{\ALG@name~\thealgorithm} ##2\par}%
           \ifx\relax##1\relax % #1 is \relax
             \addcontentsline{loa}{algorithm}{\protect\numberline{\thealgorithm}##2}%
           \else % #1 is not \relax
             \addcontentsline{loa}{algorithm}{\protect\numberline{\thealgorithm}##1}%
           \fi
           \kern2pt\hrule\kern2pt
         }
      }{% \end{breakablealgorithm}
         \kern2pt\hrule\relax% \@fs@post for \@fs@ruled
       \end{center}
      }
    \makeatother
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在此之后,将\begin{algorithm}\end{algorithm}替换成
    \begin{breakablealgorithm}\end{breakablealgorithm}, 例如

    \begin{breakablealgorithm}
    	\caption{YOLOv8 model}
    	\begin{algorithmic}[5]
    		
    		\STATE Initialize YOLOv8 Network (Darknet or other backbone)
    		\STATE Initialize SE, CBAM, ECA, CA, and SOCA attention modules
    		\STATE
    		\FOR{epoch in 1...N}
    		\FOR{batch in DataLoader}
    		\STATE images, ground\_truths = batch
    		
    		\ENDFOR
    		\ENDFOR
    		\STATE
    		\STATE // End of one epoch
    		\STATE Validate\_on\_ValidationSet()
    	\end{algorithmic}
    \end{breakablealgorithm}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
  • 相关阅读:
    开源软件的利弊
    uniapp基础篇 - - 网络请求封装
    mybatis缓存-二级缓存
    HttpServlet学习中的常见问题(个人珍藏笔记)
    【XML文件数据预处理】获取xml文件中所有标签名称及数量||提取某个特定标签的数量||生成包含某个标签的图片索引txt并复制图片到指定文件夹
    麦芽糖-聚乙二醇-阿霉素maltose-Doxorubicin
    Maven系列第3篇:详解maven解决依赖问题
    ESP32网络开发实例-Web服务器以仪表形式显示传感器计数
    场馆如何进行智能改造?
    由于 Python 环境不一致导致的No module named ‘selenium‘
  • 原文地址:https://blog.csdn.net/cold_code486/article/details/133954542