Allineamento di un codice in ambiente “lstlisting”

  • Creatore
    Topic
  • #107219
    Up
    0
    Down
    ::


    Buonasera a tutti, ringrazio innanzitutto per aver accettato la mia richiesta di iscrizione al sito.
    Vi scrivo in merito ad una difficoltà che ho incontrato nell’uso di “lstlisting” per citare un codice all’interno di un documento. Ho iniziato da poco ad avvicinarmi a LaTeX e ho letto con molto interesse, allo scopo di avere almeno una preparazione di base, la guida “L’arte di scrivere con LaTeX” di Lorenzo Pantieri, della quale sto provando i codici proposti per fare un po’ di pratica. La mia difficoltà nello specifico è allineare a sinistra tutta la porzione di testo contenuta nell’ambiente “lstlisting”, che attualmente mi ritrovo centrata nella pagina. Vi riporto cosa la parte minima di cosa ho scritto:

    `
    \documentclass[6pt,a4paper]{article}
    \usepackage[T1]{fontenc}
    \usepackage[utf8]{inputenc}
    \usepackage[italian]{babel}
    \usepackage{listings}

    \begin{document}
    \begin{section}{Diagrammi}
    \begin{subsection}{Ortogrammi}
    Questo il codice di un ortogramma:
    \begin{lstlisting}[basicstyle=\small,columns=fullflexible,caption={Principali fiumi italiani},label=cod:1,language={[LaTeX]TeX},%
    frame=lines]
    \begin{tikzpicture}
    \begin{axis}
    [xbar,xmin=0,xmax=800,xmajorgrids=true,%
    ytick pos=left,title={Principali fiumi},%
    xlabel={Lunghezza in chilometri},%
    symbolic y coords={Reno,Piave,Arno,Ticino},%
    ytick=data, nodes near coords,%
    nodes near coords align={horizontal},height=5cm]
    \addplot
    [fill=cyan,draw=black]
    coordinates
    {(211,Reno) (220,Piave) (241,Arno) (248,Ticino)};
    \end{axis}
    \end{tikzpicture}
    \end{tikzpicture}
    \end{lstlisting}
    \end{subsection}
    \end{section}
    \end{document}
    `

    Questo è ciò che ottengo:

    Grazie in anticipo per la disponibilità.

Visualizzazione 5 filoni di risposte
  • Autore
    Risposte
    • #107220
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Riccardo, io uso Listings molto poco, perché lo trovo inutilmente complicato per poi fare che cosa: comporre elegantemente dei codici in linguaggi di programmazione vari, ma con pesanti limitazioni se questi codici contengono caratteri diversi dagli ASCII (nente lettere accentate, niente segni analfabetici, meno che mai segni di altri alfabeti, sillabari o sistemi di scrittura.

        Tuttavia in ogni ambiente che componga il suo testo in modo verbatim (cioè “alla lettera”, compresi i caratteri che per LaTeX sono speciali o particolari) gli spazi sono significativi. Io comincerei a togliere gli spazi a sinistra del codice che vuoi stampare; se non basta verificherei che cosa fanno le opzioni che hai specificato; per quanto io si ignorante di listings, ce ne sono alcune che non ho mai sentito nominare; d’accordo, non conosco il manuale a memoria, ma non mi stupirei che fosse colpa di qualche opzione. Verifica anche l’opzione language=[LaTeX]TeX, perché mi pare che non faccia quello che dovrebbe fare.
        Suppongo che tu sappia come leggere la documentazione di listings, che hai sicuramente già letto; casomai tieni presente questa operazione: apri un terminale o finestra comandi o prompt dei comandi o finestra Dos, comunque si chiami con il tuo sistema operativo, e ci scrivi dentro il comando texdoc listings; l’esegui premendo il tasto invio; ti si dovrebbe aprire una finestra nella quale leggi a schermo tutto quello che vuoi della documentazione di listings; l’operazione, mutatis mutandis, serve anche per leggere la documentazione degli altri pacchetti.

      • #107221
        Up
        0
        Down
        ::

        OldClaudio” post=107266
        Tuttavia in ogni ambiente che componga il suo testo in modo verbatim (cioè “alla lettera”, compresi i caratteri che per LaTeX sono speciali o particolari) gli spazi sono significativi. Io comincerei a togliere gli spazi a sinistra del codice che vuoi stampare; se non basta verificherei che cosa fanno le opzioni che hai specificato; per quanto io si ignorante di listings, ce ne sono alcune che non ho mai sentito nominare; d’accordo, non conosco il manuale a memoria, ma non mi stupirei che fosse colpa di qualche opzione. Verifica anche l’opzione language=[LaTeX]TeX, perché mi pare che non faccia quello che dovrebbe fare.

        Ho seguito i tuoi consigli e gli spazi nel sorgente non influenzano il risultato. Ho controllato le varie opzioni e dovrebbero essere corrette, in particolare quella che mi segnali serve per impostare il “dialetto” LaTeX di TeX. Ho provato anche a mettere tutto l’ambiente “lstlisting” in uno flushleft ma viene allineata a sinistra solo Il titolo del codice, mentre il resto rimane immobile al centro.
        In generale ho problemi di questo tipo non solo con listings, ma anche con l’allineamento di altri oggetti come per esempio una tabella, che mi viene inserita al centro.

      • #107222
        Up
        0
        Down
        ::

        Ho seguito i tuoi consigli e gli spazi nel sorgente non influenzano il risultato.

        Lo influenzano eccome invece!
        Nel codice che hai inserito in listings ci sono 3 tabulazioni prima di ogni linea di codice, per impostazione predefinita di listings ogni tabulazione viene resa come 8 spazi. Ecco il motivo di tutto quello spazio.
        Puoi usare la chiave showtabs=true per vedere che è esattamente colpa delle tabulazioni se l’allineamento assume quella forma. Puoi cambiare il numero di spazi con cui viene resa la tabulazione con la chiave tabsize

      • #107223
        Up
        0
        Down
        ::

        riccardo.zaccone” post=107260Buonasera a tutti, ringrazio innanzitutto per aver accettato la mia richiesta di iscrizione al sito.
        Vi scrivo in merito ad una difficoltà che ho incontrato nell’uso di “lstlisting” per citare un codice all’interno di un documento. Ho iniziato da poco ad avvicinarmi a LaTeX e ho letto con molto interesse, allo scopo di avere almeno una preparazione di base, la guida “L’arte di scrivere con LaTeX” di Lorenzo Pantieri, della quale sto provando i codici proposti per fare un po’ di pratica. La mia difficoltà nello specifico è allineare a sinistra tutta la porzione di testo contenuta nell’ambiente “lstlisting”, che attualmente mi ritrovo centrata nella pagina. Vi riporto cosa la parte minima di cosa ho scritto:

        `
        \documentclass[6pt,a4paper]{article}
        \usepackage[T1]{fontenc}
        \usepackage[utf8]{inputenc}
        \usepackage[italian]{babel}
        \usepackage{listings}

        \begin{document}
        \begin{section}{Diagrammi}
        \begin{subsection}{Ortogrammi}
        Questo il codice di un ortogramma:
        \begin{lstlisting}[basicstyle=\small,columns=fullflexible,caption={Principali fiumi italiani},label=cod:1,language={[LaTeX]TeX},%
        frame=lines]
        \begin{tikzpicture}
        \begin{axis}
        [xbar,xmin=0,xmax=800,xmajorgrids=true,%
        ytick pos=left,title={Principali fiumi},%
        xlabel={Lunghezza in chilometri},%
        symbolic y coords={Reno,Piave,Arno,Ticino},%
        ytick=data, nodes near coords,%
        nodes near coords align={horizontal},height=5cm]
        \addplot
        [fill=cyan,draw=black]
        coordinates
        {(211,Reno) (220,Piave) (241,Arno) (248,Ticino)};
        \end{axis}
        \end{tikzpicture}
        \end{tikzpicture}
        \end{lstlisting}
        \end{subsection}
        \end{section}
        \end{document}
        `

        Questo è ciò che ottengo:

        Grazie in anticipo per la disponibilità.

        1. Non adoperare mai TAB per rientrare il codice.

        2. Non rientrare mai ambienti “verbatim” come [tt]lstlisting[/tt]

        Personalmente non adopero rientri né, tanto meno, [tt]\begin{section}[/tt] e [tt]\end{section}[/tt] che ti sconsiglio vivamente. Ci sono molti motivi, non ultimo che [tt]\begin[/tt] apre un gruppo e potresti incorrere in problemi piuttosto oscuri da risolvere.

        L’opzione [tt]6pt[/tt] non esiste.

        `
        \documentclass[a4paper]{article}
        \usepackage[T1]{fontenc}
        \usepackage[utf8]{inputenc}
        \usepackage[italian]{babel}
        \usepackage{listings}
        \usepackage{pgfplots}

        \pgfplotsset{compat=1.13}

        \begin{document}

        \section{Diagrammi}

        \subsection{Ortogrammi}

        Questo il codice di un ortogramma:
        \begin{lstlisting}[
        caption={Principali fiumi italiani},label=cod:1,
        language={[LaTeX]TeX},
        basicstyle=\small,
        columns=fullflexible,
        frame=lines
        ]
        \begin{tikzpicture}
        \begin{axis}[
        xbar,
        xmin=0,
        xmax=800,
        xmajorgrids=true,
        ytick pos=left,
        title={Principali fiumi},
        xlabel={Lunghezza in chilometri},
        symbolic y coords={Reno,Piave,Arno,Ticino},
        ytick=data,
        nodes near coords,
        nodes near coords align={horizontal},height=5cm
        ]
        \addplot[fill=cyan,draw=black]
        coordinates {(211,Reno) (220,Piave) (241,Arno) (248,Ticino)};
        \end{axis}
        \end{tikzpicture}
        \end{lstlisting}

        \begin{tikzpicture}
        \begin{axis}[
        xbar,
        xmin=0,
        xmax=800,
        xmajorgrids=true,
        ytick pos=left,
        title={Principali fiumi},
        xlabel={Lunghezza in chilometri},
        symbolic y coords={Reno,Piave,Arno,Ticino},
        ytick=data,
        nodes near coords,
        nodes near coords align={horizontal},height=5cm
        ]
        \addplot[fill=cyan,draw=black]
        coordinates {(211,Reno) (220,Piave) (241,Arno) (248,Ticino)};
        \end{axis}
        \end{tikzpicture}

        \end{document}
        `

        [attachment=1702]ScreenShot2016-08-07at17.05.46.png[/attachment]

        Ciao
        Enrico

        Attachments:
        You must be logged in to view attached files.
      • #107224
        Up
        0
        Down
        ::


        Ok, avevo compreso male l’indicazione di OldClaudio, pensavo fosse importante solo lo spazio rispetto all’ambiente in cui avevo messo lstlisting, non tutto lo spazio che sta effettivamente prima. A questo punto vi chiederei un consiglio basato sulla vostra esperienza: visto che non conviene usate TAB per rientrare il codice in questi casi, come è conveniente comportarsi? Non vorrei rinunciare a indentare il codice, perchè quanto è molto lungo credo possa dare un aiuto visivo per rendere più leggibile il sorgente, per cui se c’è qualche alternativa al tab sarebbe ottimo. Alla fine nel mio piccolo esperimento ho seguito il suggerimento di Little e ho indicato tabsize=1, così adesso lo spazio dal margine è davvero poco e non si nota, ma non è esattamente come il risultato ottenuto da egreg9.

        Già che ci sono, anche se forse è fuori tema: se volessi mettere accanto a quel codice una immagine oppure lo stesso grafico, un po’ come in “L’Arte di scrivere con LaTeX”, cosa dovrei fare?

        Grazie mille per l’aiuto a tutti.
        Riccardo

      • #107225
        Up
        0
        Down
        ::

        riccardo.zaccone” post=107295Già che ci sono, anche se forse è fuori tema: se volessi mettere accanto a quel codice una immagine oppure lo stesso grafico, un po’ come in “L’Arte di scrivere con LaTeX”, cosa dovrei fare?

        Vedi questa vecchia discussione. Oggi, anche tcolorbox permette di farlo.

        Ciao
        Claudio

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

    Go to top