我对编号和引用算法有困难。
我想要按章节标记参考文献,然后在章节内标记,例如:
第一章中的第一个算法-算法 1.1
第一章中的第二个算法-算法 1.2
以下是我正在做的事情的 MWE
\documentclass[11pt, letterpaper]{thesis}
\renewcommand{\thechapter}{\Roman{chapter}}
\renewcommand{\thesection}{\arabic{section}}
\usepackage[chapter]{algorithm}
\usepackage{algorithmicx}
\usepackage{algpseudocode}
\renewcommand{\thealgorithm}{\arabic{chapter}.\arabic{algorithm}}
\begin{document}
\chapter{First Chapter}
\begin{algorithm}
\begin{algorithmic}[1]
\State Some code here
\end{algorithmic}
\label{alg:algorithm1}
\end{algorithm}
Algorithm \ref{alg:algorithm1} states blah blah blah.
\end{document}
当我引用算法1时,我得到算法一(其中 I 是罗马数字 1)而不是算法 1.1。
答案1
你需要使用\caption
前 \label
;否则,为引用挑选的字符串将是最后一个设置锚点的字符串(通常是分段单元的锚点),在本例中是来自的字符串\chapter
。以下是代码的修改版本,显示了所需的结果:
\documentclass[11pt, letterpaper]{book}
\renewcommand{\thechapter}{\Roman{chapter}}
\renewcommand{\thesection}{\arabic{section}}
\usepackage[chapter]{algorithm}
\usepackage{algorithmicx}
\usepackage{algpseudocode}
\renewcommand{\thealgorithm}{\arabic{chapter}.\arabic{algorithm}}
\begin{document}
\chapter{First Chapter}
\begin{algorithm}
\begin{algorithmic}[1]
\State Some code here
\end{algorithmic}
\caption{A test algorithm}
\label{alg:algorithm1}
\end{algorithm}
Algorithm~\ref{alg:algorithm1} states blah blah blah and algorithm~\ref{alg:algorithm2} states blah blah blah.
\begin{algorithm}
\begin{algorithmic}[1]
\State Some code here
\end{algorithmic}
\caption{Another test algorithm}
\label{alg:algorithm2}
\end{algorithm}
\end{document}
如果您不想为算法提供明确的标题,则可以使用包\phantomcaption
中的命令caption
(但这可能会造成混淆,因为您通过数字引用一些实际上没有编号的对象):
\documentclass[11pt, letterpaper]{book}
\usepackage{caption}
\renewcommand{\thechapter}{\Roman{chapter}}
\renewcommand{\thesection}{\arabic{section}}
\usepackage[chapter]{algorithm}
\usepackage{algorithmicx}
\usepackage{algpseudocode}
\renewcommand{\thealgorithm}{\arabic{chapter}.\arabic{algorithm}}
\begin{document}
\chapter{First Chapter}
\begin{algorithm}
\begin{algorithmic}[1]
\State Some code here
\end{algorithmic}
\phantomcaption
\label{alg:algorithm1}
\end{algorithm}
Algorithm~\ref{alg:algorithm1} states blah blah blah and algorithm~\ref{alg:algorithm2} states blah blah blah.
\begin{algorithm}
\begin{algorithmic}[1]
\State Some code here
\end{algorithmic}
\phantomcaption
\label{alg:algorithm2}
\end{algorithm}
\end{document}