
Я использую cls на основе memoir
и пакета listings
. Мне нужна глава-приложение со всеми списками (список таблиц, список рисунков, список листингов). Стиль заголовка этих списков должен быть как заголовок section
.
Я могу сделать это для таблиц и рисунков следующим образом:
\makeatletter
\renewcommand\@lofmaketitle{%
\section*{\listfigurename}%
\tocmark%
\@afterheading}
\makeatother
\makeatletter
\renewcommand\@lotmaketitle{%
\section*{\listtablename}%
\tocmark%
\@afterheading}
\makeatother
Поэтому я подумал, что это должно сработать и для листингов, но следующее не имеет никакого эффекта:
\makeatletter
\renewcommand\@lolmaketitle{%
\section*{\lstlistlistingname}%
\tocmark%
\@afterheading}
\makeatother
Я использую его \lstlistoflistings*
, поэтому не хочу, чтобы он отображался в оглавлении.
Как я могу это сделать?
решение1
Это должно сделать это
\documentclass[a4paper]{memoir}
\usepackage{listings}
\begin{document}
\begin{lstlisting}[caption=Hest]
a
\end{lstlisting}
\begingroup
\makeatletter
\renewcommand\@tocmaketitle{%
\section*{\contentsname}%
\markboth{\contentsname}{\contentsname}
\@afterheading}
\makeatother
% adding a star to \lstlistoflistings does not work, the inner
% \tableofcontents never sees it. Locally use \KeepFromToc
% to emulate the *
\KeepFromToc
\lstlistoflistings
\endgroup
\end{document}
Обратите внимание, что изменение на самом деле не может быть внесено в преамбулу, поскольку оно также влияет на \tableofcontents
.
Соответствующий код listings
из
\lst@UserCommand\lstlistoflistings{\bgroup
\let\contentsname\lstlistlistingname
\let\lst@temp\@starttoc \def\@starttoc##1{\lst@temp{lol}}%
\tableofcontents \egroup}
здесь мы можем видеть, что он сбрасывает \contentsname
, и какой файл \@starttoc
следует использовать. \tableofcontents
обычно выполняется \@starttoc
, поэтому они просто выполняются \tableofcontents
.