使用 autoref 引用带有自定义标题的列表

使用 autoref 引用带有自定义标题的列表

我正在尝试使用该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}

相关内容