Re: Richiesta relativa a \lstlistoflistings

#68685
Up
0
Down
::


Se tu aggiungessi qualche informazione in più, sarebbe meglio. 🙂

Do per scontato che non usi ClassicThesis e derivati. Una possibile soluzione è questa:

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

\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}}
% Se è stato caricato tocloft possiamo usare il comando che offre…
\@ifpackageloaded{tocloft}{
\newlistof{algorithms}{loa}{\lstlistalgorithmname}
}{
% …altrimenti facciamo a mano.
\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
\lstset{#1}
}{}

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

\begin{document}
\begingroup
\let\clearpage\relax
\listoflistings
\bigskip
\listofalgorithms
\endgroup

\vfill

\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}`

Potrebbero esser fatte piccole variazioni sapendo se carichi tocloft o no (cioè se devi caricare titletoc). Andrebbero fatti cambiamenti ben più sostanziosi se invece usi ClassicThesis o simili…

Ciao,
Antonio

Go to top