Problemi di “colore” con listings!

  • Creatore
    Topic
  • #80087
    Up
    0
    Down
    ::


    Salve a tutti, è il mio primo post spero di non sbagliare nulla. 😳
    Ho provato a cercare nel forum, ma non ho trovato nulla a riguardante il mio problema.
    Sto scrivendo una tesina in LaTeX e ho necessità di aggiungere un listato. Fin qui nessun problema, carico il pacchetto listings, mi creo il mio ambiente personalizzato per il codice e tutto funziona.
    Revisionando il documento mi accorgo che alcune righe sono troppo lunghe e “sbordano” dalla pagina, neanche qui problemi. Aggiungo l’opzione breaklines=true e tutto sembra funzionare a dovere. Sembra… infatti, se ad andare a capo è una riga colorata (come ad esempio un commento o una stringa) cambia anche il colore alla cornice che racchiude il listato!

    Aggiungo uno snapshot per maggiore chiarezza.

    Utilizzo il modello Tesi Moderna di Lorenzo Pantieri, di seguito riporto tutte le impostazioni riguardanti il pacchetto listings e l’ambiente da me creato.

    `
    \usepackage{listings} % inglobare codici di programmazione
    `
    `
    %*********************************************************************************
    % Impostazioni di listings
    %*********************************************************************************
    % Utilizzare l'etichetta Codice anzichè Listing nelle etichette delle disdascalie
    \addto\captionsitalian{%
    \renewcommand{\lstlistingname}{Codice}}

    % Utilizzare il titolo Elenco dei codici al posto List of listings nella lista
    % dei codici
    \addto\captionsitalian{%
    \renewcommand{\lstlistlistingname}{Elenco dei codici}}

    % gestione delle lettere accentate per il pacchetto listings
    \lstset{
    literate={è}{{\`e}}1
    {é}{{\'e}}1
    {ì}{{\`i}}1
    {à}{{\`a}}1
    {ù}{{\`u}}1
    {ò}{{\`o}}1
    {À}{{\'A}}1
    {È}{{\`E}}1
    {É}{{\`E}}1
    {Ì}{{\`I}}1
    {Ò}{{\`o}}1
    {Ù}{{\`U}}1
    }

    % Impostazioni per C
    \lstloadlanguages{C} % caricamento del linguaggio C

    \lstdefinestyle{c}{% % definizione di un nuovo stile per il C
    language=C, % impostazione del linguaggio
    basicstyle=\scriptsize \ttfamily,% % dimensione e stile del carattere di base
    commentstyle=\color{OliveGreen} \itshape,% % dimensione e sitle dei commenti
    %morekeywords={},% % aggiunta di parole chiave non riconosciute
    keywordstyle=\color{RoyalBlue} \bfseries,% % dimensione e stile delle parole chiave
    stringstyle =\color{red},% % dimensione e stile delle stringhe
    showstringspaces=false,% % non segna gli spazi nelle stringhe
    tabsize=4,% % dimensione della tabulazione
    numbers=left,% % posizione numeri riga
    stepnumber=1,% % passo dei numeri di riga
    numberstyle=\tiny,% % stile dei numeri di riga
    numbersep=10pt,% % distanza tra numeri di riga e listato
    breaklines=true,% % mandare a capo le righe troppo lunghe
    breakautoindent=true,% % indenta le righe spezzate
    breakindent=30pt,% % punti di indentazione per le righe spezzate
    frame=single,%
    captionpos=t% % posizione dell'etichetta del codice
    }
    `

    La mia domanda è questa: c’è possibilità di rimediare a questo problema, o è normale questo “comportamento”?

    Grazie mille a tutti anticipatamente! 😀

Visualizzazione 8 filoni di risposte
  • Autore
    Risposte
    • #80088
      GKT
      Partecipante
        Up
        0
        Down
        ::


        Benvenuto nel forum!
        Per risolvere il problema, aggiungi alle opzioni il colore della cornice, in questo modo:`\lstset{
        […]
        rulecolor=\color{black}
        […]
        }`
        Lorenzo

      • #80089
        Up
        0
        Down
        ::

        GKT” post=79286Benvenuto nel forum!
        Per risolvere il problema, aggiungi alle opzioni il colore della cornice, in questo modo:`\lstset{
        […]
        rulecolor=\color{black}
        […]
        }`
        Lorenzo

        Grazie mille, ora tutto funziona perfettamente! 😀

      • #80090
        Up
        0
        Down
        ::


        Ho nuovamente un “problema”, se così si può chiamare, con questo fantastico pacchetto! Dato che si tratta sempre di colorazione ho pensato di non aprire un nuovo thread, ma continuare a scrivere qui. Nel caso non sia corretto fatemelo sapere che provvedo ad aprirne un’altro!

        Ed ora veniamo all’insormontabile problema! 😆
        Come già detto, nel documento che sto scrivendo ho del codice C da riportare.
        Mi chiedevo, se possibile, come fare a colorare l’argomento che segue la direttiva #include di un colore particolare?
        Per spiegarmi meglio allego anche qui delle immagini.

        Com’è:

        Come vorrei che fosse:

        Ho provato con il parametro morekeywords ma non sono riuscito ad ottenere il risultato sperato; ho provato anche a cercare sulla documentazione, ma sinceramente non so cosa cercare! 😳

        Per la configurazione del pacchetto listings si può far sempre riferimento al codice che ho riportato nel primo post! 🙂

        Grazie a tutti anticipatamente! 😉

      • #80091
        GKT
        Partecipante
          Up
          0
          Down
          ::

          LoGaN” post=79385Ho provato con il parametro morekeywords ma non sono riuscito ad ottenere il risultato sperato; ho provato anche a cercare sulla documentazione, ma sinceramente non so cosa cercare! 😳

          Evidentemente devi aggiungere [tt]<[/tt] e [tt]>[/tt] come delimitatori. Cerca [tt]moredelimiters[/tt] nella guida di Listings.

          Lorenzo

        • #80092
          Up
          0
          Down
          ::

          GKT” post=79405

          Ho provato con il parametro morekeywords ma non sono riuscito ad ottenere il risultato sperato; ho provato anche a cercare sulla documentazione, ma sinceramente non so cosa cercare! 😳

          Evidentemente devi aggiungere [tt]<[/tt] e [tt]>[/tt] come delimitatori. Cerca [tt]moredelimiters[/tt] nella guida di Listings.

          Lorenzo

          Ho provato a cercare moredelimiters, ma nel manuale c’è solo moredelim e penso tu ti riferissi a questo perché fa proprio quello che mi consigliavi.
          Il punto è che questo comando fa in parte quello che volevo…
          Mi spiego meglio, con questa opzione posso far colorare il testo all’interno dei delimitatori impostati, invece io volevo sapere se è possibile colorare solo “l’argomento” (se così lo possiamo definire) della direttiva include in modo da far risultare il colore del testo tra apici (e quello tra [tt]< >[/tt]) diverso dal colore utilizzato per le stringhe.

          Ah quasi dimenticavo… grazie per la risposta tempestiva! 😀

          EDIT
          Mi sono accorto adesso che utilizzando l’opzione in questo modo
          `
          moredelim=[\color{brown}]{<}{>},
          `
          all’interno della definizione del mio stile personale (vedi primo post) ottengo quest’effetto collaterale:

          Al che mi domando, ma non dovrebbe colorare solo quello all’interno di [tt]< >[/tt] 😕 😕 😕 😕 😕

        • #80093
          GKT
          Partecipante
            Up
            0
            Down
            ::

            LoGaN” post=79416Ho provato a cercare moredelimiters, ma nel manuale c’è solo moredelim e penso tu ti riferissi a questo perché fa proprio quello che mi consigliavi.

            Sì, hai perfettamente ragione. era un lapsus… 😳

            LoGaN” post=79416Il punto è che questo comando fa in parte quello che volevo…
            Mi spiego meglio, con questa opzione posso far colorare il testo all’interno dei delimitatori impostati, invece io volevo sapere se è possibile colorare solo “l’argomento” (se così lo possiamo definire) della direttiva include in modo da far risultare il colore del testo tra apici (e quello tra [tt]< >[/tt]) diverso dal colore utilizzato per le stringhe.

            Riporta un esempio compilabile che contenga almeno:

            • un argomento di direttiva per ogni tipo di delimitatore;
            • una stringa;
            • eventuali esempi di “effetti collaterali”, come li hai chiamati tu.

            Lorenzo

          • #80094
            Up
            0
            Down
            ::


            Ecco il codice richiesto (spero ci sia tutto quello che ti serve)
            `
            \documentclass[10pt,% % corpo del font principale
            a4paper,% % carta A4
            twoside,openright% % fronte-retro (openany)
            ]{book}

            \usepackage[T1]{fontenc} % codifica dei font:
            % NOTA BENE! richiede una distribuzione *completa*
            % di LaTeX

            \usepackage[utf8]{inputenc} % codifica di input; anche [latin1] va bene
            % NOTA BENE! va accordata con le preferenze
            % dell'editor

            \usepackage{listings} % inglobare codici di programmazione

            \usepackage[dvipsnames]{xcolor} % colori

            % gestione delle lettere accentate per il pacchetto listings
            \lstset{
            literate={è}{{\`e}}1
            {é}{{\'e}}1
            {ì}{{\`i}}1
            {à}{{\`a}}1
            {ù}{{\`u}}1
            {ò}{{\`o}}1
            {À}{{\'A}}1
            {È}{{\`E}}1
            {É}{{\`E}}1
            {Ì}{{\`I}}1
            {Ò}{{\`o}}1
            {Ù}{{\`U}}1
            }

            % Impostazioni per C
            \lstloadlanguages{C} % caricamento del linguaggio C

            \lstdefinestyle{c}{% % definizione di un nuovo stile per il C
            language=C, % impostazione del linguaggio
            basicstyle=\scriptsize \ttfamily,% % dimensione e stile del carattere di base
            moredelim=[\color{purple}]{<}{>},
            %moredelim=[\color{purple}]{\#include}{>}, % riga di prova
            %moredelim=[\color{purple}]{\#include}{“}, % riga di prova
            commentstyle=\color{OliveGreen} \itshape,% % dimensione e sitle dei commenti
            %morekeywords={},% % aggiunta di parole chiave non riconosciute
            keywordstyle=\color{RoyalBlue} \bfseries,% % dimensione e stile delle parole chiave
            stringstyle =\color{red},% % dimensione e stile delle stringhe
            showstringspaces=false,% % non segna gli spazi nelle stringhe
            tabsize=4,% % dimensione della tabulazione
            numbers=left,% % posizione numeri riga
            stepnumber=1,% % passo dei numeri di riga
            numberstyle=\tiny,% % stile dei numeri di riga
            numbersep=10pt,% % distanza tra numeri di riga e listato
            breaklines=true,% % mandare a capo le righe troppo lunghe
            breakautoindent=true,% % indenta le righe spezzate
            breakindent=30pt,% % punti di indentazione per le righe spezzate
            frame=single,%
            rulecolor=\color{black},%
            captionpos=t% % posizione dell'etichetta del codice
            }

            \begin{document}
            \begin{lstlisting}[style=c]
            /* Vorrei che il colore del file fosse di un colore diverso sia che sia
            messo tra apici (simile alle stringhe, e quindi prende quel colore) sia
            che sia messo tra < >. */
            #include “pippo.h”
            #include /* Nel caso non fosse possibile farlo mi accontenterei di colorarlo anche
            come se fosse una stringa. Però ho notato questo problema, cioè se nel testo
            incontra il simbolo < listings me lo colora come se fosse compreso tra < > */
            for ( i = 0; i < 6; i ++) { /* Ha iniziato a colorare tutto il testo */ if (a = 0) { /* Se adesso utilizzo il carattere > smette di colorarlo */
            a = 5;
            stringa = “Ciao Mondo!”
            }
            }
            \end{lstlisting}
            \end{document}`
            In pratica vorrei che “pippo.h” e fossero dello stesso colore, ma a loro volta di colore diverso dalla stringa “Ciao Mondo!”
            Per quanto riguarda “l’effetto collaterale” lo puoi osservare nel ciclo for dopo che ho utilizzato il simbolo <, e finisce all'interno del commento dopo aver utilizzato il simbolo >.

            All’interno della definizione del mio stile ci sono due righe commentate, ovvero
            `%moredelim=[\color{purple}]{\#include}{>}, % riga di prova
            %moredelim=[\color{purple}]{\#include}{“}, % riga di prova`
            erano delle prove che avevo fatto, ma non hanno sortito l’effetto voluto! 🙁

          • #80095
            GKT
            Partecipante
              Up
              0
              Down
              ::

              LoGaN” post=79424In pratica vorrei che “pippo.h” e fossero dello stesso colore, ma a loro volta di colore diverso dalla stringa “Ciao Mondo!”
              Per quanto riguarda “l’effetto collaterale” lo puoi osservare nel ciclo for dopo che ho utilizzato il simbolo <, e finisce all'interno del commento dopo aver utilizzato il simbolo >.

              Usa la versione asterisco del comando [tt]moredelim[/tt]`\lstset{
              […]
              moredelim=*[\color{purple}]{<}{>},
              […]
              }`
              Ogni volta che compare un segno uguale ai delimitatori che hai definito, ma che ha un diverso significato, racchiudi l’espressione tra due caratteri speciali e usa l’opzione [tt]escapeinside[/tt]:`\begin{lstlisting}[style=c,escapeinside=$$]
              #include “pippo.h”
              #include for ( i = 0; $i < 6$; i ++) { /* Questo testo è verde */ if (a = 0) { /* Anche usando il carattere > il colore è quello voluto */
              a = 5;
              stringa = “Ciao Mondo!”
              }
              }`
              Lorenzo

              Aggiunta

              La versione asterisco nell’esempio non è necessaria (serve infatti per far riconoscere parole chiave e commenti anche all’interno dei delimitatori definiti).

            • #80096
              Up
              0
              Down
              ::


              Grazie mille per l’aiuto!
              Con la tua soluzione si risolve il problema della colorazione sballata di altre parti del testo, ma nel mio caso spesso non è utilizzabile perché importo direttamente il codice sorgente senza fare il copia incolla sul documento LaTeX 🙁
              Purtroppo rimane la differenza di colorazione tra il file incluso mediante apici (che usa giustamente la colorazione delle stringhe) e quello incluso mediante < >!
              Sarebbe tutto più semplice se ci fosse un parametro del tipo: colora con questo colore quello che viene dopo questa parola. 8)
              Purtroppo dopo aver riletto più volte la documentazione (in modo veloce ovviamente 😛 ) e aver cercato invano con Google penso di dovermi rassegnare! 🙁

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

          Go to top