将 \listoflistings 和 \listofalgorithms 合并为一个列表

将 \listoflistings 和 \listofalgorithms 合并为一个列表

标题说明了一切...我想将这两个内容合并到一个列表下,标题为“算法和程序代码”。从样式上讲,该页面应与其他列表(、、...等)的常规样式相匹配\listoffigures\listoftables有办法吗?

答案1

内容行和环境计数器通过 进行添加/递增\caption。因此,要更改环境出现的列表,caption可以修改/扩展该命令。要使两个环境保持数字顺序(即,好像它们是同一个环境),当一个环境被“d”时,另一个环境可以递增caption

\documentclass{report}

\usepackage{listings}
\usepackage{algorithm}
\usepackage{etoolbox} % provides AtBeginEnvironment

% make a new caption command for algorithms
\newcommand{\algCaption}[1]{
    \caption{#1}
    \addcontentsline{lol}{lstlisting}{\protect\numberline{\thealgorithm}#1}
    \addtocounter{lstlisting}{1}}
\AtBeginEnvironment{lstlisting}{\addtocounter{algorithm}{1}}

\begin{document}
    \begin{algorithm}
        This is an algorithm
        \algCaption{An algorithm}
    \end{algorithm}
    \begin{lstlisting}[caption=A listing]
        This is a listing
    \end{lstlisting}
    \clearpage%
    \begin{algorithm}
        This is another algorithm
        \algCaption{Another algorithm}
    \end{algorithm}
    \lstlistoflistings%
    \listofalgorithms%
\end{document}

MWE 定义了algCaption将其参数添加到,lstlisting然后增加lstlisting计数器。每当lstlisting使用环境时,algorithm计数器都会增加AtBeginEnvironment。我发现此解决方案的一个问题是,仍然会listofalgorithms由产生caption

答案2

总体思路应该是这样的:您重新定义环境“字幕制作”参数的属性,algorithm以便它使用与相同的属性lstlisting;所需要的是\ext@algorithm包含应写入字幕的辅助文件的文件扩展名。

\documentclass{report}

\usepackage{listings}
\usepackage{algorithm}
\makeatletter
\def\ext@algorithm{lol}% algorithm captions will be written to the .lol file
% share the list making commands and redefine the heading
\AtBeginDocument{%
  \let\l@algorithm\l@lstlisting
  \let\c@algorithm\c@lstlisting
  \let\thealgorithm\thelstlisting
  \renewcommand{\lstlistlistingname}{Algorithms and program code}%
}
\makeatother


\begin{document}

\lstlistoflistings

\clearpage

\begin{algorithm}
This is an algorithm
\caption{An algorithm}
\end{algorithm}

\begin{lstlisting}[caption=A listing]
This is a listing
\end{lstlisting}

\clearpage

\begin{algorithm}
This is another algorithm
\caption{Another algorithm}
\end{algorithm}

\end{document}

答案3

让我试着给出答案。下面的示例使用了algorithm2e。当然,与您的包相关的示例必须进行修改。

这通常表明最小工作示例(MWE)是。


修改必须分几个步骤进行:

  1. 更改列表的名称。具体操作如下:

    \renewcommand\lstlistlistingname{Algorithms and program code}
    
  2. algorithm2e使用计数器listings这是通过以下方式完成的:

    \let\c@algocf\c@lstlisting
    
  3. algorithm2e将材料写入列表文件lol

    \renewcommand{\algocf@list}{lol}%
    
  4. 使算法和列表的条目缩进相等:

    \renewcommand*\l@algocf{\@dottedtocline{1}{1.5em}{2.3em}}
    

第 1 点和第 2 点必须在以下之后完成\begin{document}

\documentclass{article}

\usepackage{listings}
\usepackage{algorithm2e}

\makeatletter
\AtBeginDocument{%
\renewcommand\lstlistlistingname{Algorithms and program code}
 \let\c@algocf\c@lstlisting
}
\renewcommand{\algocf@list}{lol}%
\renewcommand*\l@algocf{\@dottedtocline{1}{1.5em}{2.3em}}
\makeatother
\begin{document}
    \lstlistoflistings%
    \begin{algorithm}
        This is an algorithm
        \caption{An algorithm}
    \end{algorithm}
    \begin{lstlisting}[caption=A listing]
        This is a listing
    \end{lstlisting}



    \begin{algorithm}
        This is another algorithm
        \caption{Another algorithm}
    \end{algorithm}
\end{document}

在此处输入图片描述

相关内容