Re: Richiesta relativa a \lstlistoflistings

#68688
Up
0
Down
::


Vero, mancava una cosa nel mio codice!

`\documentclass[10pt,a4paper]{book}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[italian]{babel}

\usepackage{listings,hyperref}
\usepackage{etoolbox} % ci serve per \patchcmd, vedi sotto

\lstset{basicstyle=\small\ttfamily,columns=fullflexible}

\renewcommand*{\lstlistingname}{Listato}
\renewcommand*{\lstlistlistingname}{Elenco dei listati}
\newcommand*{\lstalgorithmname}{Algoritmo}
\newcommand*{\lstlistalgorithmname}{Elenco degli algoritmi}

\makeatletter
% Definiamo il contatore da usare per gli algoritmi, in maniera
% equivalente a quello che fa listings.
% Quello predefinito di listings (cioè lstlisting) viene lasciato per
% i listati.
\AtBeginDocument{
\lst@ifnumberbychapter
\newcounter{lstalgorithm}[chapter]
\gdef\thelstalgorithm
{\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@lstalgorithm}
\else
\newcounter{lstalgorithm}
\gdef\thelstalgorithm{\@arabic\c@lstalgorithm}
\fi}

% Quando viene scritto un algoritmo, specifichiamo di salvarlo nel
% file loa (anziché lol, dove lasciamo i listati) e di usare il
% contatore lstalgorithm (invece di lstlisting).
\let\lst@MakeCaptionForAlg\lst@MakeCaption
\patchcmd\lst@MakeCaptionForAlg
{\addcontentsline{lol}{lstlisting}}
{\addcontentsline{loa}{lstalgorithm}}
{}{\errmessage{patch failed}}
% Il blocco che segue è duplicato di quello precedente: è giusto così! 🙂
\patchcmd\lst@MakeCaptionForAlg
{\addcontentsline{lol}{lstlisting}}
{\addcontentsline{loa}{lstalgorithm}}
{}{\errmessage{patch failed}}
\patchcmd\lst@MakeCaptionForAlg
{lstlisting}
{lstalgorithm}
{}{\errmessage{patch failed}}

% Creiamo il comando per stampare l'elenco degli algoritmi:
\newcommand*\listofalgorithms{\bgroup
\let\contentsname\lstlistalgorithmname
\let\lst@temp\@starttoc \def\@starttoc##1{\lst@temp{loa}}%
\tableofcontents \egroup}

% Per comodità (e analogia con figure e tabelle) chiamiamo i comandi
% \listoflistings e \listofalgorithms.
\let\listoflistings\lstlistoflistings

% Impostiamo per li algoritmi la stessa formattazione dei listati:
\let\l@lstalgorithm\l@lstlisting

\lstnewenvironment{algoritmo}[1][]{
\let\lst@MakeCaption\lst@MakeCaptionForAlg
% Giusto per evitare l'avviso sulle etichette duplicate:
\renewcommand*\thelstnumber{a\@arabic\c@lstnumber}%
\let\lstlistingname\lstalgorithmname
\let\c@lstlisting\c@lstalgorithm
\lstset{#1}%
}{}

\lstnewenvironment{listato}[1][]{\lstset{#1}}{}
\makeatother

% Correzione per fare in modo che nella lista dei listati, i listati di capitoli
% diversi vengano separati da uno spazio supplementare
\makeatletter
\let\my@chapter\@chapter
\renewcommand*{\@chapter}{%
\addtocontents{lol}{\protect\addvspace{10pt}}%
\addtocontents{loa}{\protect\addvspace{10pt}}%
\my@chapter}
\makeatother

\begin{document}

\begingroup
\let\clearpage\relax
\listoflistings
\bigskip
\listofalgorithms
\endgroup

\vfill

\chapter{UN0}

\begin{listato}
\renewcommand*{\lstlistingname}{Listato}
\end{listato}

\begin{listato}
\renewcommand*{\lstlistingname}{Listato}
\end{listato}

\begin{algoritmo}
\newcommand*{\lstalgorithmname}{Algoritmo}
\end{algoritmo}

\begin{listato}
\renewcommand*{\lstlistlistingname}{Elenco dei listati}
\end{listato}

\begin{algoritmo}
\newcommand*{\lstlistalgorithmname}{Elenco degli algoritmi}
\end{algoritmo}

\chapter{DUE}

\begin{listato}
\renewcommand*{\lstlistingname}{Listato}
\end{listato}

\begin{algoritmo}
\newcommand*{\lstalgorithmname}{Algoritmo}
\end{algoritmo}

\begin{listato}
\renewcommand*{\lstlistlistingname}{Elenco dei listati}
\end{listato}

\begin{algoritmo}
\newcommand*{\lstlistalgorithmname}{Elenco degli algoritmi}
\end{algoritmo}

\end{document}`

Sostanzialmente ho aggiunto
`\let\c@lstlisting\c@lstalgorithm`
dentro \lstnewenvironment{algoritmo} e ho risolto subito il test \@ifpackageloaded{tocloft}, sapendo che usi titletoc.

Ciao,
Antonio

Go to top