Listings e indice listati

  • Creatore
    Topic
  • #72503
    Up
    0
    Down
    ::


    Salve a tutti,

    Vi chiedo una cosa un po’ particolare. Nella mia tesi devo inserire parti di codice in due linguaggi diversi (C e Fortran). C’è un modo per ottenere un indice dei listati che divida i codici in C da quelli in Fortran? Non so se tipograficamente parlando può essere una buona idea, ma mi piaceva fare così. Piuttosto che dover inserire nel caption del codice di quale linguaggio si tratta, mi faceva comodo avere due indici separati. Sennò mi ingegno in modo diverso.

Visualizzazione 13 filoni di risposte
  • Autore
    Risposte
    • #72504
      Up
      0
      Down
      ::

      canemacchina” post=71739Salve a tutti,

      Vi chiedo una cosa un po’ particolare. Nella mia tesi devo inserire parti di codice in due linguaggi diversi (C e Fortran). C’è un modo per ottenere un indice dei listati che divida i codici in C da quelli in Fortran? Non so se tipograficamente parlando può essere una buona idea, ma mi piaceva fare così. Piuttosto che dover inserire nel caption del codice di quale linguaggio si tratta, mi faceva comodo avere due indici separati. Sennò mi ingegno in modo diverso.

      `\documentclass[a4paper]{report}
      \usepackage{listings,etoolbox}
      \makeatletter
      \patchcmd{\lst@MakeCaption}{{lol}{lstlisting}}{{lol}{\lstlistingtype}}{}{}
      \patchcmd{\lst@MakeCaption}{{lol}{lstlisting}}{{lol}{\lstlistingtype}}{}{}

      \newcommand\lstlistofClistings{%
      \begingroup
      \let\l@Flstlisting\@gobbletwo
      \let\l@Clstlisting\l@lstlisting
      \def\lstlistlistingname{Listati C}
      \@ifundefined{@donefirst}{\@fileswfalse\global\let\@donefirst\@empty}{}
      \lstlistoflistings
      \endgroup
      }
      \newcommand\lstlistofFlistings{%
      \begingroup
      \let\l@Clstlisting\@gobbletwo
      \let\l@Flstlisting\l@lstlisting
      \def\lstlistlistingname{Listati Fortran}
      \@ifundefined{@donefirst}{\@fileswfalse\global\let\@donefirst\@empty}{}
      \lstlistoflistings
      \endgroup
      }

      \makeatother

      \def\lstlistingtype{lstlisting}
      \lstnewenvironment{Flstlisting}[1][]
      {\def\lstlistingtype{Flstlisting}\lstset{#1}}
      {}
      \lstnewenvironment{Clstlisting}[1][]
      {\def\lstlistingtype{Clstlisting}\lstset{#1}}
      {}

      \begin{document}

      \lstlistofFlistings
      \lstlistofClistings

      \chapter{A}

      \begin{Flstlisting}
      abc
      \end{Flstlisting}

      \begin{Clstlisting}
      def
      \end{Clstlisting}

      \end{document}`

      Questo nell’ipotesi che tu non abbia altri “elenchi di listati”.

      Ciao
      Enrico

    • #72505
      Up
      0
      Down
      ::


      Si fa presto, tolgo il mio e provo questo! Grazie!

    • #72506
      Up
      0
      Down
      ::


      C’è qualcosa che non mi funziona. Le pagine per i listati separati le crea, ma poi non inserisce l’elenco… O meglio, lo fa solo se inserisco dopo i due

      \lstlistofFlistings
      \lstlistofClistings

      un

      \lstlistoflistings

      ma così ho l’ovvio inconveniente di avere un terzo indice globale.
      Grazie ancora!

    • #72507
      Up
      0
      Down
      ::


      C’era un errorino che ho corretto. Adesso va.

      Ciao
      Enrico

    • #72508
      Up
      0
      Down
      ::


      Niente, funziona ma quando lo metto nella tesi (che è fatta con classicthesis e arsclassica) non va. Ma per forza il file degli indici di listings deve essere unico? non posso definire in qualche modo un file .lolc per i codici in C e un file lolf per i codici in fortran? così poi potrei fare

      \phantomsection
      \pdfbookmark{\lstlistlistingname}{lolc}
      \lstlistoflistings

      \phantomsection
      \pdfbookmark{\lstlistlistingname}{lolf}
      \lstlistoflistings

      immagino… no?

    • #72509
      Up
      0
      Down
      ::

      canemacchina” post=71752Niente, funziona ma quando lo metto nella tesi (che è fatta con classicthesis e arsclassica) non va. Ma per forza il file degli indici di listings deve essere unico? non posso definire in qualche modo un file .lolc per i codici in C e un file lolf per i codici in fortran? così poi potrei fare

      \phantomsection
      \pdfbookmark{\lstlistlistingname}{lolc}
      \lstlistoflistings

      \phantomsection
      \pdfbookmark{\lstlistlistingname}{lolf}
      \lstlistoflistings

      immagino… no?

      Senza un esempio minimo di codice è impossibile aiutarti.

      Ciao
      Enrico

    • #72510
      Up
      0
      Down
      ::


      `\newcommand\lstlistofClistings{%
      \cleardoublepage\phantomsection
      \pdfbookmark{Listati C}{C}
      \begingroup
      \let\l@Flstlisting\@gobbletwo
      \let\l@Clstlisting\l@lstlisting
      \def\lstlistlistingname{Listati C}
      \@ifundefined{@donefirst}{\@fileswfalse\global\let\@donefirst\@empty}{}
      \lstlistoflistings
      \endgroup
      }
      \newcommand\lstlistofFlistings{%
      \cleardoublepage\phantomsection
      \pdfbookmark{Listati Fortran}{F}
      \begingroup
      \let\l@Clstlisting\@gobbletwo
      \let\l@Flstlisting\l@lstlisting
      \def\lstlistlistingname{Listati Fortran}
      \@ifundefined{@donefirst}{\@fileswfalse\global\let\@donefirst\@empty}{}
      \lstlistoflistings
      \endgroup
      }`
      Ciao
      Enrico

    • #72511
      Up
      0
      Down
      ::


      Scusa se scasso, ma io queste cose in latex ancora non le so fare. Dovrei prendere il primo codice che mi hai postato e sostituire i due \newcommand con questi? L’ho fatto, ma nell’indice vedo i due “listati C” e “Listati Fortran”, ma entrambi riportano tutti i codici.

      Per l’esempio minimo, io uso classicthesis con arsclassica preso dal sito di panatieri, senza aver modificato nulla!

    • #72512
      Up
      0
      Down
      ::

      canemacchina” post=71765Scusa se scasso, ma io queste cose in latex ancora non le so fare. Dovrei prendere il primo codice che mi hai postato e sostituire i due \newcommand con questi? L’ho fatto, ma nell’indice vedo i due “listati C” e “Listati Fortran”, ma entrambi riportano tutti i codici.

      Per l’esempio minimo, io uso classicthesis con arsclassica preso dal sito di panatieri, senza aver modificato nulla!

      `\documentclass[10pt,% % corpo del font principale
      a4paper,twoside,openright,% % carta A4, fronte-retro
      titlepage,% % frontespzio
      fleqn,% % equazioni allineate a sinistra
      headinclude,,footinclude,% % testatina e piË di pagina
      BCOR5mm,% % rilegatura di 5 mm
      numbers=noenddot,% % niente punto dopo il numero delle sezioni
      cleardoublepage=empty,% % pagine vuote senza testatina e piË di pagina
      tablecaptionabove,% % didascalie in cima alle tabelle
      abstracton%
      ]{scrreprt} % classe report di KOMA-Script;
      % durante la stesura della tesi, cambiare “twoside,openright”
      % in “oneside,openany” per risparmiare carta

      \usepackage[T1]{fontenc} % la codifica dei font
      \usepackage[latin1]{inputenc} % imposta la codifica di input;
      \usepackage[english,italian]{babel} % per scrivere in italiano e in inglese;

      \usepackage[eulerchapternumbers,% % numeri dei capitoli in Euler
      beramono,% % Bera Mono come font a spaziatura fissa
      eulermath,% % AMS Euler come font per la matematica
      pdfspacing% % migliora il riempimento di riga con PDFLaTeX
      ]{classicthesis} % lo stile ClassicThesis

      \usepackage{arsclassica} % modifica alcuni aspetti di ClassicThesis

      \usepackage{etoolbox,listings}
      \makeatletter
      \patchcmd{\lst@MakeCaption}{{lol}{lstlisting}}{{lol}{\lstlistingtype}}{}{}
      \patchcmd{\lst@MakeCaption}{{lol}{lstlisting}}{{lol}{\lstlistingtype}}{}{}

      \newcommand\lstlistofClistings{%
      \cleardoublepage\phantomsection
      \pdfbookmark{Listati C}{C}
      \begingroup
      \let\l@Flstlisting\@gobbletwo
      \let\l@Clstlisting\l@lstlisting
      \def\lstlistlistingname{Listati C}
      \@ifundefined{@donefirst}{\@fileswfalse\global\let\@donefirst\@empty}{}
      \lstlistoflistings
      \endgroup
      }
      \newcommand\lstlistofFlistings{%
      \cleardoublepage\phantomsection
      \pdfbookmark{Listati Fortran}{F}
      \begingroup
      \let\l@Clstlisting\@gobbletwo
      \let\l@Flstlisting\l@lstlisting
      \def\lstlistlistingname{Listati Fortran}
      \@ifundefined{@donefirst}{\@fileswfalse\global\let\@donefirst\@empty}{}
      \lstlistoflistings
      \endgroup
      }
      \makeatother
      \def\lstlistingtype{lstlisting}
      \lstnewenvironment{Flstlisting}[1][]
      {\def\lstlistingtype{Flstlisting}\lstset{#1}}
      {}
      \lstnewenvironment{Clstlisting}[1][]
      {\def\lstlistingtype{Clstlisting}\lstset{#1}}
      {}

      \begin{document}

      \lstlistofFlistings
      \lstlistofClistings

      \chapter{A}

      \begin{Flstlisting}
      abc
      \end{Flstlisting}

      \begin{Clstlisting}
      def
      \end{Clstlisting}

      \end{document}`
      Non intendo andare in cerca chissà dove di preamboli. Ho preso uno che avevo e l’ho ridotto a un minimo accettabile. Se poi è diverso dal tuo non so che farci: sei tu quell che deve esporre il problema, non noi a dover cercare a tentoni.

      Ciao
      Enrico

    • #72513
      Up
      0
      Down
      ::


      Ti ringrazio, e scusami.
      Il fatto è che di queste cose non so ancora fare nulla. Mi metterò ad imparare, ma devo trovare un po’ di tempo.

      E comunque con il discorso “Per l’esempio minimo, io uso classicthesis con arsclassica preso dal sito di panatieri, senza aver modificato nulla!” non intendevo dire che dovevi cercare tu, ma semplicemente che evitavo di postare tutto il codice dato che basta scaricare quello per avere il mio esempio.

    • #72514
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        IO ho copiato il tuo esempio, l’ho compilato ed è venuto esattamente come lo chiedi tu. Due indici di codici distinti ognuno con i suoi codici, quelli C nell’elenco C e quelli fortran nell’elenco F.

        Che cosa c’è che non va da te?

        Per essere precisi io uso TeX Live 2011 aggiornato questa mattina, su macchina Mac con sistema operativo Lion (10.7).

      • #72515
        Up
        0
        Down
        ::


        Semplice stupidaggine. Non avevo fatto caso alla differenza tra importare i pacchetti listings e etoolbox in modo separato piuttosto che con
        \usepackage{listings, etoolbox}.

        Semplicemente con quella modifica tutto funziona

      • #72516
        Up
        0
        Down
        ::

        canemacchina” post=71785Semplice stupidaggine. Non avevo fatto caso alla differenza tra importare i pacchetti listings e etoolbox in modo separato piuttosto che con
        \usepackage{listings, etoolbox}.

        Semplicemente con quella modifica tutto funziona

        Quello è irrilevante. Forse avevi messo il codice in un posto sbagliato.

        Ciao
        Enrico

      • #72517
        Up
        0
        Down
        ::


        Boh, è quello che pensavo anche io. Ma appena ho cambiato quello, ha funzionato tutto. Indagherò.

    Visualizzazione 13 filoni di risposte
    • Devi essere connesso per rispondere a questo topic.

    Go to top