因为我想在我的文档中分离列表,所以我决定创建两个单独的列表:一个用于算法,一个用于来源。
此外,必须从外部文件加载源。
因此,通过在序言中插入以下代码并插入\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
分配给宏的空间\numberline
从2.3em
增加到5.2em
(第三个参数)。如果您希望它类似于包含您的算法,您可能需要对此进行实验(我没有 MWE 复制这种情况,所以我只是猜测5.2em
)。更新为根据需要在数字前\numberline
插入。Sorgente
之所以进行这种“干预”,是因为列表的设置和列表目录是完全分开的。像tocloft
减轻这种人工干预。