我正在尝试使用该listings
包来显示一些伪代码。为此,我想添加一些关键字和一个用于所有伪代码列表的特殊环境。此外,引用标签应标明“算法 XY”而不是“列表 XY”。虽然标题本身是正确的,但使用的引用\autoref{...}
仍然显示“列表 XY”。
以下是该问题的小例子:
\documentclass[10pt,a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage{hyperref}
\usepackage{listings}
\usepackage{caption}
\DeclareCaptionLabelFormat{algocaption}{Algorithm \thenalg}
\newcounter{nalg}[chapter]
\renewcommand{\thenalg}{\thechapter .\arabic{nalg}}
\lstnewenvironment{algorithm}[1][]
{
\refstepcounter{nalg}
\captionsetup{labelformat=algocaption,labelsep=colon}
\lstset{
frame=tblr,
numbers=left,
keywords={
,input
,output
,if
,else
,for
,foreach
,while
,end
},
numbers=left,
xleftmargin=.04\textwidth,
#1
}
}
{}
\begin{document}
\chapter{test}
\begin{algorithm}[caption={Integer division.}, label={alg:test}]
input: test
\end{algorithm}
\autoref{alg:test}
\end{document}
答案1
该\autoref
命令尝试检测引用的底层计数器,lstlisting
在本例中为,并查找相应的\lstlistingautorefname
,但目前尚未定义。然后必须提供。
遗憾的是,每个lstlisting
环境仍然具有相同的计数器。而其他non-algorithm
环境listings
现在将提供错误的autoref
- 名称。
\documentclass[10pt,a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage{listings}
\usepackage{caption}
\DeclareCaptionLabelFormat{algocaption}{Algorithm \thenalg}
\newcounter{nalg}[chapter]
\renewcommand{\thenalg}{\thechapter.\arabic{nalg}}
\lstnewenvironment{algorithm}[1][]
{
\refstepcounter{nalg}%
\captionsetup{labelformat=algocaption,labelsep=colon}
\lstset{
frame=tblr,
numbers=left,
keywords={
,input
,output
,if
,else
,for
,foreach
,while
,end
},
numbers=left,
xleftmargin=.04\textwidth,
#1
}
}
{}
\usepackage{hyperref}
\AtBeginDocument{%
\providecommand*{\lstlistingautorefname}{Algorithm}
}
\begin{document}
\chapter{test}
\begin{algorithm}[caption={Integer division.}, label={alg:test}]
input: test
\end{algorithm}
\autoref{alg:test}
\end{document}