latex中的algorithmic如何改变编号
बनाया गया: 5 मार्च 2025
बनाया गया: 5 मार्च 2025
latex中的algorithmic如何改变编号
在使用 LaTeX 的 algorithm+algorithmic(或基于它的 algpseudocode、algorithmicx 等)环境时,常见的“编号”需求主要有两类:
Algorithm 1、Algorithm 2 等这种浮动体的编号格式。下面分别介绍常见的修改方法。
当我们使用
latex\usepackage{algorithm} \usepackage{algorithmic}
或者
latex\usepackage{algorithm} \usepackage{algpseudocode}
后,会得到类似下面的默认效果:
\arabic{algorithm}(即 1、2、3、……)如果希望将算法的编号与章节或小节挂钩,比如想让算法显示为 Algorithm 1.1、Algorithm 1.2 等,可以用下面的重定义方式:
latex\documentclass{article} \usepackage{algorithm} \usepackage{algorithmic} % 让算法编号与 section 绑定:变成 “Algorithm x.y” \renewcommand{\thealgorithm}{\thesection.\arabic{algorithm}} \begin{document} \section{First Section} \begin{algorithm} \caption{My Algorithm} \begin{algorithmic} \STATE do something \STATE do something else \end{algorithmic} \end{algorithm} \end{document}
\floatname{algorithm}{XXX} 可以改动 “Algorithm” 这个显示标题,比如改成 “Procedure” 或者用中文 “算法”等。\renewcommand{\thealgorithm}{...} 则可以改变编号形式,例如:
\arabic{algorithm} → 1, 2, 3, …\thechapter.\arabic{algorithm} → 按章节编号(如果有 chapter)\thesection.\arabic{algorithm} → 按小节编号algorithmic 环境中显示行号algorithmic 环境默认是没有行号的,可以在 \begin{algorithmic} 处加方括号参数来开启或控制行号,最常见的就是 [1]:
latex\begin{algorithm} \caption{Algorithm with line numbers} \begin{algorithmic}[1] \STATE do something \STATE do something else \FOR{$i = 1$ to $n$} \STATE ... \ENDFOR \end{algorithmic} \end{algorithm}
这样就会在每一行前面显示一个行号,从 1 开始依次递增。
[0] 或干脆不加数字: \begin{algorithmic};algorithmicx + algpseudocode 时,提供了一些可定制接口,但要注意是否和具体宏包/版本对应。一个简单示例,利用 algorithmic 包自身的低级命令来自定义行号格式(更为常见的是 algpseudocode 的 \alglinenumber 命令)。这里仅展示思路,实际需要根据你所用的宏包版本来调整细节:
latex\makeatletter % 重定义行号为字母序(例如 a, b, c, ...) \renewcommand{\alglinenumber}[1]{\alph{ALG@line}} \makeatother \begin{algorithmic}[1] ... \end{algorithmic}
类似地,也可以用 \roman{...}、\fnsymbol{...}、在前面加上“Line”字样等等。
修改算法标题编号:
\renewcommand{\thealgorithm}{...} 来控制整体浮动体的编号格式。\floatname{algorithm}{...} 来替换 “Algorithm”的文字。行号显示及其格式:
\begin{algorithmic}[1] 打开行号,从 1 开始。\begin{algorithmic}[0] 或省略数字,关闭行号。algorithmic、algorithmicx、algpseudocode 等)文档中查找“自定义行号”或“重定义命令”的说明,通过 \renewcommand{\alglinenumber}{...} 等命令灵活修改。以上就是在 LaTeX 中使用 algorithmic 改变算法编号(包括算法环境整体编号与行号编号)最常见的做法。根据自身排版需求组合即可。
标题没有上下居中怎么办
在使用 algorithm 浮动环境配合 algorithmic(或 algpseudocode、algorithmicx 等)时,算法标题(caption)默认是由 LaTeX 的浮动体机制来排版的。如果你发现「标题没有上下居中」或「标题没有在环境中居中」,通常指的是以下两种情况:
下面给出常用的处理办法。
LaTeX 默认对浮动图、表或算法等的标题通常是 两端对齐(justified),如果算法标题只有一行文字,可能看起来并不是完全居中。可使用 caption 宏包来修改标题的对齐方式,例如:
latex\usepackage{caption} % 对所有浮动体(包括 figure、table、algorithm 等)统一居中 \captionsetup{ justification=centering, % 水平居中 singlelinecheck=off % 即使只有一行,也强制居中 } % 如果只想对 algorithm 单独生效: %\captionsetup[algorithm]{ % justification=centering, % singlelinecheck=off %}
这样标题就会在水平方向强制居中显示。如果只想给 algorithm 用,记得加上 [algorithm] 的可选参数。
默认情况下,algorithm 环境的标题会出现在上方。如果你想让标题在“算法内容的上下范围”中间位置,往往需要做以下两件事:
algorithm2e 的一些自定义样式)。如果你不希望它作为浮动环境放在页面顶部或底部,而是和正文中其他内容一样出现,可不用 \begin{algorithm}...\end{algorithm},而是改用普通的 带框 或 带标题 的方案,比如:
\fbox{\parbox{...}{...}} 或 mdframed 宏包来包住算法内容,然后在中间写一个“标题”。algorithm2e 宏包里的非浮动版本: \begin{algorithm}[H] 并配合去掉上下分割线的样式等(需要查看 algorithm2e 文档具体配置)。如果一定要用 algorithm 浮动体,但想把标题放在算法正文的“中央”位置,则需要自行定义一些命令,比如:
latex\begin{algorithm} % 手动在这里插入一个垂直空白,使得标题往下走 \vspace{适当值} \begin{center} \textbf{Algorithm 1: My Title} \end{center} \vspace{适当值} \begin{algorithmic}[1] ... \end{algorithmic} \vspace{适当值} % 如果还想在最底部放一些其他内容,可再来一行 \end{algorithm}
然后通过调节 \vspace{...} 使得视觉上“居中”——本质是手动微调。
但这种做法往往不再使用 LaTeX 提供的 “caption” 机制了,因为你自己写了一个“假标题”在算法环境里面;也会影响论文/文档的自动生成目录或算法列表功能,需要进一步做标签或引用时要注意。
最简单的就是用 caption 宏包的设置:
latex\usepackage{algorithm} \usepackage{algorithmic} \usepackage{caption} \captionsetup[algorithm]{ % 只对 algorithm 环境生效 justification=centering, singlelinecheck=off % 强制一行也居中 } \begin{document} \begin{algorithm} \caption{这是我的算法标题} % 标题会在水平居中 \begin{algorithmic}[1] ... \end{algorithmic} \end{algorithm} \end{document}
这样就能看到标准的“Algorithm 1. 这是我的算法标题”被居中对齐。
caption 宏包并设置 justification=centering 和 singlelinecheck=off。algorithm 内部加 \vspace 并自己写标题),或者干脆使用非浮动方式来排版这个“算法框”,再把标题居中放置。根据实际排版需求(是否要自动编号、是否需要在目录中列出算法等),灵活选择合适的方式即可。