listing e spaziatura nell’elenco dei codici

  • Creatore
    Topic
  • #34261
    Up
    0
    Down
    ::


    Salve,

    sto scrivendo la tesi in Latex e ho scelto di produrre un elenco dei codici utilizzati mediante il package listings. Scrivendo alcuni codici ho notato che nella list of listings, quando la numerazione raggiunge il 10, si ha una sovrapposizione del carattere di numerazione con il primo carattere del titolo del codice.

    Ad esempio se ho il decimo (undicesimo, dodicesimo, ecc) codice definito come

    `
    \begin{lstlisting}[frame=lines, caption={Apertura file},captionpos=b]
    fdata = fopen ( data_string , 'wt');
    \end{lstlisting}
    `

    quando stampo l’elenco dei codici, lo “zero” di A.10 (ad esempio per i codici in appendice) è sovrapposto alla “A” di “Apertura file”. Avrei pseudo-risolto introducendo uno \hspace nella capition all’inizio, però volevo sapere se esisteva una soluzione meno smanettona e piu’ fine (nonché efficiente, visto che dovrei inserire lo spazio ad ogni codice).

    Grazie per l’attenzione

    Cloud

Visualizzazione 3 filoni di risposte
  • Autore
    Risposte
    • #34262
      Up
      0
      Down
      ::

      Salve,

      sto scrivendo la tesi in Latex e ho scelto di produrre un elenco dei codici utilizzati mediante il package listings. Scrivendo alcuni codici ho notato che nella list of listings, quando la numerazione raggiunge il 10, si ha una sovrapposizione del carattere di numerazione con il primo carattere del titolo del codice.

      Ad esempio se ho il decimo (undicesimo, dodicesimo, ecc) codice definito come

      `
      \begin{lstlisting}[frame=lines, caption={Apertura file},captionpos=b]
      fdata = fopen ( data_string , 'wt');
      \end{lstlisting}
      `

      quando stampo l’elenco dei codici, lo “zero” di A.10 (ad esempio per i codici in appendice) è sovrapposto alla “A” di “Apertura file”. Avrei pseudo-risolto introducendo uno \hspace nella capition all’inizio, però volevo sapere se esisteva una soluzione meno smanettona e piu’ fine (nonché efficiente, visto che dovrei inserire lo spazio ad ogni codice).

      Devi aumentare lo spazio riservato al numero; la definizione usuale è
      `\def\l@lstlisting#1#2{\@dottedtocline{1}{1.5em}{2.3em}{#1}{#2}}`
      Quindi penso che dovrebbe bastare scrivere nel preambolo, dopo aver caricato listings
      `\makeatletter
      \def\l@lstlisting#1#2{\@dottedtocline{1}{1.5em}{2.8em}{#1}{#2}}
      \makeatother`
      Il terzo argomento è quello che dà lo spazio riservato al numero; lo aumento di mezzo em che è la larghezza delle cifre.

      Ciao
      Enrico

    • #34263
      Up
      0
      Down
      ::


      Aiuto sono comparsi i puntini…
      Mea culpa, ho dimenticato di dirvi che uso lo stile ClassicThesis. Quel comando mi fa comparire i puntini che nelle altre sezioni non ci sono. Nel preambolo ho una sezione dedicata alla lista dei codici che presi in un altro post. La scrivo, che potrebbe essere utile:

      `%per l'elenco dei codici
      \lstset{language=Matlab}
      \addto\captionsitalian{%
      \renewcommand{\lstlistingname}{Codice}}
      \addto\captionsitalian{%
      \renewcommand{\lstlistlistingname}{Elenco dei codici}}

      \makeatletter
      \begingroup
      \let\newcounter\@gobble\let\setcounter\@gobbletwo
      \globaldefs=\@ne \let\c@loldepth\@ne
      \newlistof{listings}{lol}{\lstlistlistingname}
      \endgroup
      \makeatother
      \renewcommand{\cftlistingspresnum}{\scshape\MakeTextLowercase}%
      \renewcommand{\cftlistingsfont}{\normalfont}%
      \renewcommand{\cftlistingspagefont}{\normalfont}%
      \renewcommand{\cftlistingsleader}{\hspace{1.5em}}%
      \renewcommand{\cftlistingsafterpnum}{\cftparfillskip}%
      \makeatletter
      \let\l@lstlisting\l@listings
      \let\lstlistoflistings\listoflistings
      \makeatother`

      Alla quale se aggiugo quelle righe che mi hai detto, compaiono i puntini nella lista dei codici tra la fine della didascalia e l’inizio della pagina.

      Grazie in anticipo

      Cloud

    • #34264
      Up
      0
      Down
      ::

      Aiuto sono comparsi i puntini…
      Mea culpa, ho dimenticato di dirvi che uso lo stile ClassicThesis. Quel comando mi fa comparire i puntini che nelle altre sezioni non ci sono. Nel preambolo ho una sezione dedicata alla lista dei codici che presi in un altro post. La scrivo, che potrebbe essere utile:

      `%per l'elenco dei codici
      \lstset{language=Matlab}
      \addto\captionsitalian{%
      \renewcommand{\lstlistingname}{Codice}}
      \addto\captionsitalian{%
      \renewcommand{\lstlistlistingname}{Elenco dei codici}}

      \makeatletter
      \begingroup
      \let\newcounter\@gobble\let\setcounter\@gobbletwo
      \globaldefs=\@ne \let\c@loldepth\@ne
      \newlistof{listings}{lol}{\lstlistlistingname}
      \endgroup
      \makeatother
      \renewcommand{\cftlistingspresnum}{\scshape\MakeTextLowercase}%
      \renewcommand{\cftlistingsfont}{\normalfont}%
      \renewcommand{\cftlistingspagefont}{\normalfont}%
      \renewcommand{\cftlistingsleader}{\hspace{1.5em}}%
      \renewcommand{\cftlistingsafterpnum}{\cftparfillskip}%
      \makeatletter
      \let\l@lstlisting\l@listings
      \let\lstlistoflistings\listoflistings
      \makeatother`

      Alla quale se aggiugo quelle righe che mi hai detto, compaiono i puntini nella lista dei codici tra la fine della didascalia e l’inizio della pagina.

      E certo! Se non dici che cosa usi, non c’è altro che assumere una classe standard. Aggiungi
      `\addtolength{\cftlistingsnumwidth}{.5em}`
      Può essere necessario provare qualche altro valore.

      Ciao
      Enrico

    • #34265
      Up
      0
      Down
      ::


      Per qualche motivo non andava…forse si doveva prima definire una nuova lunghezza con \newlength

      Comunque grazie per il prezioso suggerimento perché mi hai fatto venire in mente di andare a scopiazzare da ClassicThesis. Cosi ho visto come eliminava i puntini. Ho anche aggiunto la parola “Listato” che mancava…così è più uniforme con gli altri elenchi che iniziano con “Tabella” e “Figura”.

      riporto per completezza il codice che ora ho ottenuto:
      `
      %inizio: per l'elenco dei codici
      \lstset{language=Matlab}
      \addto\captionsitalian{%
      \renewcommand{\lstlistingname}{Codice}}
      \addto\captionsitalian{%
      \renewcommand{\lstlistlistingname}{Elenco dei codici}}

      \makeatletter
      \begingroup
      \let\newcounter\@gobble\let\setcounter\@gobbletwo
      \globaldefs=\@ne \let\c@loldepth\@ne
      \newlistof{listings}{lol}{\lstlistlistingname}
      \endgroup
      \let\l@lstlisting\l@listings
      \let\lstlistoflistings\listoflistings
      \makeatother

      \renewcommand{\cftlistingspresnum}{\scshape\MakeTextLowercase}%
      \renewcommand{\cftlistingsfont}{\normalfont}%
      \renewcommand{\cftlistingsleader}{\hspace{1.5em}}
      \renewcommand{\cftlistingspresnum}{Listato~}%Tab.~}
      \renewcommand{\cftlistingsafterpnum}{\cftparfillskip}
      \newlength{\listingslabelwidth}
      \settowidth{\listingslabelwidth}{\cftlistingspresnum~99}
      \addtolength{\listingslabelwidth}{2.5em}
      \cftsetindents{listings}{0em}{\listingslabelwidth}
      %fine: per l'elenco dei codici
      `

      Grazie ancora per i preziosissimi suggerimenti e gli aiuti che mi avete dato

      Cloud

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

Go to top