自定义列表名称,在“列表”中

自定义列表名称,在“列表”中

因为我想在我的文档中分离列表,所以我决定创建两个单独的列表:一个用于算法,一个用于来源。

此外,必须从外部文件加载源。

因此,通过在序言中插入以下代码并插入\lstlistofsourcecode正确的位置,我可以实现两个独立的列表。

\makeatletter
\let\oldaddcontentsline\addcontentsline
\newcommand{\lstlistsourcecodename}{Elenco dei codici}%
\lst@UserCommand\lstlistofsourcecode{\bgroup
    \let\contentsname\lstlistsourcecodename
    \let\lst@temp\@starttoc \def\@starttoc##1{\lst@temp{los}}
    \tableofcontents \egroup}%
\newcommand{\lstinputsourcecode}[2][]{{%
  \renewcommand{\lstlistingname}{Sorgente}
  \renewcommand{\addcontentsline}[3]{\oldaddcontentsline{los}{##2}{##3}}%
  \lstinputlisting[#1]{#2}%
}}
\makeatother

图像显示结果:

在此处输入图片描述

我想要实现的目标是更改名称\lstinputsourcecode列表到他们的los(即列表...):来自“算法 B.1”“索尔金特 B.1”

奇怪的行为是该\lstlistingname命令对字幕起作用。

例如,如果我这样做:

\lstinputsourcecode[language=cpp, caption=Esempio di funzione \acs{RTE} esportata, label=lst:callpoint-impl]{codes/callpointimpl.cpp}

然后我得到了正确的标题(即,“索尔金特:……”如图所示):

在此处输入图片描述

我怎样才能告诉\lstlistofsourcecode使用“索尔金特”并不是“算法”


笔记:我正在使用classicthesis模板。


提前致谢。

解决方案

最终采用的解决方案(感谢@Werner)是:

\makeatletter
\newcommand{\sourcecodename}{Sorgente}
\let\oldaddcontentsline\addcontentsline
\newcommand{\listofsourcecodename}{Elenco dei sorgenti}%
\lst@UserCommand\listofsourcecode{\bgroup
  \let\contentsname\listofsourcecodename
  \let\lst@temp\@starttoc \def\@starttoc##1{\lst@temp{los}}
  \newlength{\sourcecodelabelwidth}
  \settowidth{\sourcecodelabelwidth}{\sourcecodename~999}
  \addtolength{\sourcecodelabelwidth}{1.8em}
  \def\l@lstlisting##1##2{\@dottedtocline{1}{0em}{\sourcecodelabelwidth}{##1}{##2}}
  \def\numberline##1{\hb@xt@\@tempdima{\sourcecodename{} ##1\hfil}}
  \tableofcontents \egroup}%
\newcommand{\inputsourcecode}[2][]{{%
  \renewcommand{\lstlistingname}{\sourcecodename}%
  \renewcommand{\addcontentsline}[3]{\oldaddcontentsline{los}{##2}{##3}}%
  \lstinputlisting[#1]{#2}%
}}
\makeatother 

答案1

您可以在重新定义中包括以下可能的元素\lstlistofsourcecode

\lst@UserCommand\lstlistofsourcecode{\bgroup
    \let\contentsname\lstlistsourcecodename
    \let\lst@temp\@starttoc \def\@starttoc##1{\lst@temp{los}}
    \def\l@lstlisting##1##2{\@dottedtocline{1}{1.5em}{5.2em}{##1}{##2}}% Added
    \def\numberline##1{\hb@xt@\@tempdima{Sorgente ##1\hfil}}% Added
    \tableofcontents \egroup}%

更新为将\l@lstlisting分配给宏的空间\numberline2.3em增加到5.2em(第三个参数)。如果您希望它类似于包含您的算法,您可能需要对此进行实验(我没有 MWE 复制这种情况,所以我只是猜测5.2em)。更新为根据需要在数字前\numberline插入。Sorgente

之所以进行这种“干预”,是因为列表的设置和列表目录是完全分开的。像tocloft减轻这种人工干预。

相关内容