Listings: inclusione di intervalli di codice

  • Creatore
    Topic
  • #27697
    Up
    0
    Down
    ::


    Uso listings per includere del codice nel mio documento.
    Per concentrare l’attenzione del lettore solo sulle parti interessanti del codice uso l’opzione linerange del comando \lstinputlisting.
    In questo modo però sono costretto ad includere i numeri di riga perché non è previsto un modo per far capire al lettore che i blocchi di codice appartengono a punti diversi del file.
    Il risultato, per esempio, è più o meno il seguente:
    `
    1 codice
    2 codice
    3 codice
    34 codice
    35 codice
    36 codice
    37 codice
    128 codice
    129 codice
    130 codice
    131 codice
    `
    Vorrei ottenere qualcosa del tipo:
    `
    1 codice
    2 codice
    3 codice

    34 codice
    35 codice
    36 codice
    37 codice

    128 codice
    129 codice
    130 codice
    131 codice
    `

    È possibile?

    Grazie
    LuCa

Visualizzazione 7 filoni di risposte
  • Autore
    Risposte
    • #27698
      DMW
        Up
        0
        Down
        ::


        Pagina quattro della documentazione di listings: firstline=x e lastline=y
        `\lstinputlisting[…firstline=10,lastline=20]{…}`

        Ciao

        Andrea

      • #27699
        Up
        0
        Down
        ::


        Non ho capito.
        Quelllo che mi suggerisci lo so già fare, c’è scritto nella documentazione! 😉
        …e non è quello che cerco… 🙄

        LuCa

      • #27700
        Up
        0
        Down
        ::


        In breve voglio avere un solo blocco listings, con piu’ blocchi di codice, come permesso dall’opzione linerange.
        Questa non è altro che un’implementazione multipla di firstline e lastline
        Ma vorrei riuscire a segnalare al lettore che i blocchi di codice mostrati non sono adiacenti nel sorgente, aggiungendo dei puntini di sospensione tra di essi.

        LuCa

      • #27701
        Up
        0
        Down
        ::


        Ho risolto, un po’ alla buona ma ho risolto…
        Sono stato fortunato, basta incollare quanto segue nel preambolo…
        `\makeatletter
        \def\lst@myspace{\\ \dots\phantom{X}\par}
        \def\lst@MProcessListing{%
        \lst@XPrintToken \lst@EOLUpdate \lsthk@InitVarsBOL
        \global\advance\lst@lineno\@ne
        \ifnum \lst@lineno>\lst@lastline
        \lst@ifdropinput \lst@LeaveMode \fi
        \ifx\lst@linerange\@empty
        \expandafter\expandafter\expandafter\lst@EndProcessListing
        \else
        \lst@interrange
        \lst@GetLineInterval
        \expandafter\expandafter\expandafter\lst@SkipToFirst
        \lst@myspace
        \fi
        \else
        \expandafter\lst@BOLGobble
        \fi}
        \makeatother
        `
        Incredibilmente posso dire che la modifica (in rosso) al codice originale di listings è farina del mio sacco… 😉

        LuCa

      • #27702
        Up
        0
        Down
        ::

        Ho risolto, un po’ alla buona ma ho risolto…
        Sono stato fortunato, basta incollare quanto segue nel preambolo…
        `\makeatletter
        \def\lst@myspace{\\ \dots\phantom{X}\par}
        \def\lst@MProcessListing{%
        \lst@XPrintToken \lst@EOLUpdate \lsthk@InitVarsBOL
        \global\advance\lst@lineno\@ne
        \ifnum \lst@lineno>\lst@lastline
        \lst@ifdropinput \lst@LeaveMode \fi
        \ifx\lst@linerange\@empty
        \expandafter\expandafter\expandafter\lst@EndProcessListing
        \else
        \lst@interrange
        \lst@GetLineInterval
        \expandafter\expandafter\expandafter\lst@SkipToFirst
        \lst@myspace
        \fi
        \else
        \expandafter\lst@BOLGobble
        \fi}
        \makeatother
        `
        Incredibilmente posso dire che la modifica (in rosso) al codice originale di listings è farina del mio sacco… 😉

        Credo che sarebbe meglio mettere la riga che hai aggiunto sopra la precedente, quella con i tre \expandafter. Servono infatti per espandere \else, mentre così provochi l’espansione di \lst@myspace, che non è ciò che desideri. Può anche darsi che funzioni così, ma non è garantito.

        Ciao
        Enrico

      • #27703
        Up
        0
        Down
        ::


        Grazie, non l’avrei mai notato, quelli sono particolari troppo minuti per le mie grosse dita…
        😉

        LuCa

      • #27704
        DMW
          Up
          0
          Down
          ::


          Scusa non avevo capito. La tua soluzione funziona perfettamente, però trovo quel \phantom{X} del tutto inutile.

          Ciao

          Andrea

        • #27705
          Up
          0
          Down
          ::


          Alla fine ho optato per la seguente definizione:
          `\def\lst@myspace{\\ \protect[ \dots\,\protect]\par}`
          mi sembra piu’ elegante.

          Scusa non avevo capito. La tua soluzione funziona perfettamente, però trovo quel \phantom{X} del tutto inutile.

          Purtroppo la soluzione non funziona perfettamente (non che me l’aspettassi).
          Crea problemi sicuramente nel caso si voglia impostare uno sfondo colorato al blocco di codice (la linea contenente la sospensione non è colorata) oppure si intenda inserire una cornice attorno allo stesso.

          Ho scritto al mantenitore del pacchetto suggerendo il problema, vi terrò aggiornati.

          LuCa

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

      Go to top