标题说明了一切...我想将这两个内容合并到一个列表下,标题为“算法和程序代码”。从样式上讲,该页面应与其他列表(、、...等)的常规样式相匹配\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)是。
修改必须分几个步骤进行:
更改列表的名称。具体操作如下:
\renewcommand\lstlistlistingname{Algorithms and program code}
说
algorithm2e
使用计数器listings
这是通过以下方式完成的:\let\c@algocf\c@lstlisting
说
algorithm2e
将材料写入列表文件lol
:\renewcommand{\algocf@list}{lol}%
使算法和列表的条目缩进相等:
\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}