Numerazione codici con listings

  • Creatore
    Topic
  • #36916
    Up
    0
    Down
    ::


    Buongiorno
    Sto usando il pacchetto listings e vorrei inserire nel mio documento due diversi tipi di codice.
    Il primo è stato definito così
    `\lstnewenvironment{editor}{\lstset{language=Matlab,numberstyle=\tiny}{}`
    mentre il secondo
    `\lstnewenvironment{console}{\lstset{numberstyle=\tiny}}{}`

    Ovviamente, li uso così
    `\begin{editor}
    codice
    \end{editor}`
    e
    `\begin{console}
    codice
    \end{console}`

    Il mio problema giunge con la numerazione dei codici stessi.
    Io vorrei che entrambi i codici mantenessero una numerazione consecutiva a sé stante,
    ovvero che se il primo codice “editor” termina con la linea 20, il primo (successivo) codice “console” inizi con la linea 1 e termini (per esempio) con la linea 10; a quel punto, il secondo codice editor deve riprendere con la linea 21, mentre il secondo codice console deve riprendere con la linea 11.

    Sulla guida “L ’ ARTE DI SCRIVERE CODICI CON LATEX” ho letto che le opzioni da usare sono
    `\lstset{firstnumber=last}`
    ma, pur avendo provato di verse combinazioni (ho messo questo codice solo nella dichiarazione di editor o solo nella dichiarazione di console o in entrambe), non riesco nel mio intento.
    Ho anche provato dare come opzione un nome al codice – come, penso, si farebbe per usare l’ambiente lstlisting senza crearne uno ad hoc – ma anche così non sono riucito.

    Spero di essere stato chiaro e ringrazio per le eventuali risposte.
    A presto
    GG

Visualizzazione 2 filoni di risposte
  • Autore
    Risposte
    • #36917
      Up
      0
      Down
      ::


      Buongiorno.
      Proprio non capisco.
      Il codice che segue funziona e fa esattamente ciò che vorrei:
      `
      \documentclass[]{article}

      \usepackage{listings}

      \lstset{firstnumber=auto,numbers=left}

      \begin{document}
      Lettere in minuscolo:
      \begin{lstlisting}[name=min]
      a
      b
      c
      d
      \end{lstlisting}

      Ora in maiuscolo
      \begin{lstlisting}[name=mai]
      A
      B
      \end{lstlisting}

      Poi ancora in minuscolo
      \begin{lstlisting}[name=min]
      e
      f
      g
      h
      \end{lstlisting}

      E di nuovo in maiuscolo
      \begin{lstlisting}[name=mai]
      C
      D
      E
      \end{lstlisting}
      \end{document}
      `

      Per non ripetere continuamente le opzioni ad ogni apertura di codice, vorrei creare un nuovo ambiente interno al pacchetto listings.
      La documentazione detta la seguente sintassi:

      `\lstnewenvironment
      {name}[number][opt. default arg.]
      {starting code}
      {ending code}`

      da cui, io faccio così:

      `\documentclass[]{article}

      \usepackage{listings}

      \lstset{numbers=left,firstnumber=auto}

      \lstnewenvironment
      {casa}[1][name=casa]
      {\lstset{language=matlab}}
      {}

      \lstnewenvironment
      {albergo}[1][name=albergo]
      {\lstset{language=matlab}}
      {}

      \begin{document}

      \begin{casa}
      a
      b
      c
      \end{casa}

      \begin{albergo}
      A
      B
      \end{albergo}

      \begin{casa}
      d
      e
      f
      \end{casa}

      \end{document}`

      ma non c’è verso che funzioni: la numerazione riprende da 1 ogni volta che inizio l’ambiente (anche se metto, per esempio, due ambienti ‘casa’ consecutivi…)

      Sapete aiutarmi?
      grazie

    • #36918
      Up
      0
      Down
      ::


      Niente: ho provato ad aggirare il problema, ma proprio non ne vengo a capo:
      mi sono creato un nuovo ambiente con il classico newenvironment così
      `\newenvironment{codice}{\begin{lstlisting}[name=codice]}{\end{lstlisting}}
      `
      e avrei voluto usarlo con
      `\begin{codice}
      bla bla
      \end{codice}`
      sperando di ottenere la numerazione consecutiva (ho impostato globalmente lstset{numbers=left,firstnumber=auto} )
      ma ricevo un errore:
      `! Emergency stop.
      <*> …d Settings/GG/Desktop/jff/prova.tex”

      *** (job aborted, no legal \end found)
      `
      pare che listings non ne voglia sapere di newenvironment che non siano lstnewenvironment… ma, allo stesso tempo, lstnewenvironment non riesco ad usarlo!

      Che dite abbandono? faccio a mano?

    • #36919
      Up
      0
      Down
      ::


      Ho cercato a lungo, spulciando la documentazione al pacchetto listings.
      Non ne ho trovato alcuna traccia, ma a quanto MI pare non è compatibile con la funzione standard newenvoironment – anche se non ne capisco il motivo.

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

Go to top