“L’arte di scrivere codici con LaTeX”

Visualizzazione 19 filoni di risposte
  • Autore
    Risposte
    • #29151
      Up
      0
      Down
      ::

      http://www.lorenzopantieri.net/LaTeX_files/Codici.pdf

      In questo articolo viene presentato il pacchetto listings, che permette di inserire codici all’interno di un documento. L’articolo (naturalmente) non intende sostituire la documentazione di listings, ma ne costituisce una sintesi. Spero vi sia utile.

      Al solito, le vostre osservazioni sono molto apprezzate…

      Mi sembra un ottimo lavoro, come sempre. 🙂 Ci sono un paio di cose che non mi vanno.

      (1) L’elenco dei codici non va nell’indice; è come mettere l’indice nell’indice. 🙂

      (2) Nel documento ci sono pochissime formule matematiche, quattro nella sezione 3.2, tutte sulla stessa riga, e una nella sezione 4.2. Usare Euler per quelle formule quando in tutto il resto adoperi numeri minuscoli mi sembra piuttosto brutto.

      (3) Andrebbe menzionato che \lstinline eredita tutte le opzioni date con i comandi \lstset che precedono (allo stesso livello o superiore, per i gruppi). Per esempio, se si desidera che i listati non siano troppo appariscenti e si preferisce dare basicstyle=\small\ttfamily (cosa che consiglierei, fra l’altro, soprattutto se si usa Bera Mono), anche \lstinline produrrà roba \small. 🙁

      La “soluzione” per (3) che sto sperimentando è:
      `\makeatletter
      \lst@Key{addtobasicstyle}\relax{%
      \toks@=\expandafter{\lst@basicstyle #1}%
      \edef\lst@basicstyle{\the\toks@}}
      \makeatother

      \newcommand{\Verb}{\lstinline[addtobasicstyle=\normalsize,breaklines=false]}`
      che permette di evitare di specificare \normalsize ogni volta. Dovrei indagare se si può passare qualche opzione “fissa” a \lstinline, ciò che permetterebbe di non doversi definire un nuovo comando.

      Ciao
      Enrico

    • #29152
      Up
      0
      Down
      ::


      Buongiorno, ragazzi.

      Io, come sempre, ringrazio Lorenzo per quest’ennesima fatica, e spero che un giorno mi possa tornare utile.

      Buona giornata
      Tommaso

    • #29153
      Up
      0
      Down
      ::

      La “soluzione” per (3) che sto sperimentando è:
      `\makeatletter
      \lst@Key{addtobasicstyle}\relax{%
      \toks@=\expandafter{\lst@basicstyle #1}%
      \edef\lst@basicstyle{\the\toks@}}
      \makeatother`

      Ho trovato di meglio 🙂 In rosso sono le aggiunte al codice di \lstinline:
      `\makeatletter
      \lst@Key{addtobasicstyle}\relax{%
      \toks@=\expandafter{\lst@basicstyle #1}%
      \edef\lst@basicstyle{\the\toks@}}
      \def\calc@current@size{%
      \edef\current@size{%
      \noexpand\fontsize{\f@size}{\f@baselineskip}\noexpand\selectfont}}

      \renewcommand\lstinline[1][]{%
      \leavevmode\bgroup % \hbox\bgroup \bgroup
      \calc@current@size
      \def\lst@boxpos{b}%
      \lsthk@PreSet
      \lstset{flexiblecolumns,addtobasicstyle=\current@size,#1}%
      \lsthk@TextStyle
      \@ifnextchar\bgroup{\afterassignment\lst@InlineG \let\@let@token}%
      \lstinline@}
      \makeatother`
      In questo modo \lstinline userà sempre il corpo corrente, perché la chiamata di \currentsize viene eseguita dopo eventuali \small (o simili) dati come valore di basicstyle. È possibile anche scrivere
      `\lstinline[addtobasicstyle=\tiny]!Pippo!`
      e ottenere un corpo più piccolo. Certo, viene valutato il corpo da scegliere due o tre volte, ma fra tutte le macro eseguite da \lstinline a ogni chiamata, il rallentamento non si dovrebbe sentire.

      Non c’è più bisogno di definire un comando diverso, \lstinline userà sempre, a meno che non si specifichi qualcos’altro con basicstyle o addtobasicstyle, il corpo corrente.

      Ciao
      Enrico

    • #29154
      lorenzo.pantieri
      Partecipante
        Up
        0
        Down
        ::


        Innanzitutto, ringrazio Enrico per le sue osservazioni e Tommaso per i ringraziamenti.

        (3) Andrebbe menzionato che \lstinline eredita tutte le opzioni date con i comandi \lstset che precedono (allo stesso livello o superiore, per i gruppi). Per esempio, se si desidera che i listati non siano troppo appariscenti e si preferisce dare basicstyle=\small\ttfamily (cosa che consiglierei, fra l’altro, soprattutto se si usa Bera Mono), anche \lstinline produrrà roba \small. 🙁

        Un punto importante e veramente spinoso, accidenti… 🙄

        Non mi ero mai accorto di questo comportamento, perché inserisco tutti i miei codici fuori corpo con un ambiente ad hoc, che contiente tutte le impostazioni. Fra l’altro, mi sembra un modo abbastanza elegante per risolvere la cosa.

        Quindi, se non erro, ci sono tre possibiltà:

        1. inserire tutti i codici fori corpo con ambienti ad hoc (soluzione elegante, ma non immediata);

        2. tutte le volte che si dà \lstinline specificare che il font deve essere normale (soluzione semplice, ma molto rozza);

        3. scrivere la patch di Enrico (che però dovrebbe essere contenuta direttamente dentro il codice di listings: come sapete, per il mio lettore ideale miro ad un LaTeX semplice ed elegante, cercando di mantenere l’utente finale al riparo da magie TeXniche, anche se questo non è sempre possibile…).

        Se non c’è altro al riguardo, penso a come presentare il tutto.

        Grazie mille,
        L.

      • #29155
        Up
        0
        Down
        ::

        Innanzitutto, ringrazio Enrico per le sue osservazioni e Tommaso per i ringraziamenti.

        (3) Andrebbe menzionato che \lstinline eredita tutte le opzioni date con i comandi \lstset che precedono (allo stesso livello o superiore, per i gruppi). Per esempio, se si desidera che i listati non siano troppo appariscenti e si preferisce dare basicstyle=\small\ttfamily (cosa che consiglierei, fra l’altro, soprattutto se si usa Bera Mono), anche \lstinline produrrà roba \small. 🙁

        Un punto importante e veramente spinoso, accidenti… 🙄

        Non mi ero mai accorto di questo comportamento, perché inserisco tutti i miei codici fuori corpo con un ambiente ad hoc, che contiente tutte le impostazioni. Fra l’altro, mi sembra un modo abbastanza elegante per risolvere la cosa.

        Quindi, se non erro, ci sono tre possibiltà:

        1. inserire tutti i codici fuori corpo con ambienti ad hoc (soluzione elegante, ma non immediata);

        Pratica sicuramente consigliabile, invece; se si usa un solo linguaggio forse non è necessario, ma, visto il problema di \lstinline potrebbe.

        2. tutte le volte che si dà \lstinline specificare che il font deve essere normale (soluzione semplice, ma molto rozza);

        Troppo rozza. 🙂 Se sei in un ambiente dove vale \small, che fai?

        3. scrivere la patch di Enrico (che però dovrebbe essere contenuta direttamente dentro il codice di listings: come sapete, per il mio lettore ideale miro ad un LaTeX semplice ed elegante, cercando di mantenere l’utente finale al riparo da magie TeXniche, anche se questo non è sempre possibile…).

        Penso che chiederò a Brooks che ne pensa.

        Ciao
        Enrico

      • #29156
        lorenzo.pantieri
        Partecipante
          Up
          0
          Down
          ::


          Rieccomi!

          Ho appena aggiornato il documento, sulla base delle indicazioni fornite da Enrico.

          1. Ho eliminato l’elenco dei codici dall’indice.

          2. Ho eliminato l’opzione eulermath da classicthesis.

          3. Ho rivisto il paragrafo 2:

          […] Scrivendo nel preambolo
          `\lstset{basicstyle=\small\ttfamily}`
          tutti i codici del proprio documento verranno stampati in caratteri dal corpo piccolo (scelta peraltro sempre consigliabile, nel caso dei codici fuori corpo), usando il font a spaziatura fissa predefinito, a meno che non si specifichi diversamente per codici particolari.

          Va notato che il comando \lstinline eredita tutte le opzioni impostate con i comandi \lstset che lo precedono (nello stesso gruppo). Per esempio, se nel preambolo del documento si seleziona l’opzione globale basicstyle=\small\ttfamily, anche \lstinline produrrà codici in caratteri dal corpo piccolo. Per far sì che i codici inseriti con \lstinline siano composti usando sempre il corpo corrente (evitando di esplicitare ogni volta basicstyle=\normalsize), è sufficiente introdurre tutti i codici fuori corpo, con le relative impostazioni, mediante gli ambienti personalizzati descritti nel paragrafo 4 nella pagina 12. In alternativa, è possibile ridefinire il comando \lstinline scrivendo nel preambolo le seguenti istruzioni:
          `
          \makeatletter
          \lst@Key{addtobasicstyle}\relax{%
          \toks@=\expandafter{\lst@basicstyle #1}%
          \edef\lst@basicstyle{\the\toks@}}
          \def\calc@current@size{%
          \edef\current@size{%
          \noexpand\fontsize{\f@size}{\f@baselineskip}%
          \noexpand\selectfont}}

          \renewcommand\lstinline[1][]{%
          \leavevmode\bgroup %
          \calc@current@size
          \def\lst@boxpos{b}\lsthk@PreSet
          \lstset{flexiblecolumns,addtobasicstyle=\current@size,#1}%
          \lsthk@TextStyle
          \@ifnextchar\bgroup{\afterassignment\lst@InlineG
          \let\@let@token}\lstinline@}
          \makeatother
          `

          Come dicevo, il risultato è indubbiamente efficace, ma mi lascia molto freddo, dal punto di vista didattico. 😕 Troverei decisamente preferibile che l’eccellente patch di Enrico venisse inglobata direttamente nel codice di listings…

          A presto,
          L.

        • #29157
          lorenzo.pantieri
          Partecipante
            Up
            0
            Down
            ::

            Pratica sicuramente consigliabile [quella di introdurre tutti i codici fuori corpo con ambienti ad hoc, contenenti tutte le impostazioni], invece; se si usa un solo linguaggio forse non è necessario, ma, visto il problema di \lstinline potrebbe.

            Sono completamente d’accordo, naturalmente.

            Penso che chiederò a Brooks che ne pensa [di inserire la patch nel codice di listings].

            Spero proprio che l’autore del pacchetto voglia rimediare al difetto di \lstinline: come sai, ritengo che l’utente finale dovrebbe essere tenuto il più possibile lontano dal codice LaTeX “di basso livello”, che va lasciato ai programmatori.

            Tienici informati su quest’ultimo punto!

            Grazie ancora,
            Lorenzo

          • #29158
            Up
            0
            Down
            ::


            scusatemi se dopo più di un anno riprendo questo post, ma ho lo stesso problema di ereditarietà dei settaggi \lstset, che nn riguardano solo la dimensione dello stile, ma anche lo sfondo del codice inline:
            `\lstset{
            language=[LaTex]Tex,
            basicstyle=\small\ttfamily,
            breaklines = true,
            frame=single,
            backgroundcolor=\color{light-gray},
            breakautoindent = true
            }`
            il problema si presenta SOLO quando il testo viene portato a capo automaticamente, e tutta la riga in questione viene “colorata”; qui un esempio
            http://www.sendspace.com/file/54ka7n

            sapreste comerisolvere?

          • #29159
            Up
            0
            Down
            ::

            scusatemi se dopo più di un anno riprendo questo post, ma ho lo stesso problema di ereditarietà dei settaggi \lstset, che nn riguardano solo la dimensione dello stile, ma anche lo sfondo del codice inline:
            `\lstset{
            language=[LaTex]Tex,
            basicstyle=\small\ttfamily,
            breaklines = true,
            frame=single,
            backgroundcolor=\color{light-gray},
            breakautoindent = true
            }`
            il problema si presenta SOLO quando il testo viene portato a capo automaticamente, e tutta la riga in questione viene “colorata”; qui un esempio
            http://www.sendspace.com/file/54ka7n

            sapreste comerisolvere?

            A parte che il collegamento non porta da nessuna parte, quello che serve è un esempio minimo compilabile.

            Ciao
            Enrico

          • #29160
            Up
            0
            Down
            ::


            ho riprovato il link e mi funziona, bisognerebbe scaricare il file lstinline.jpeg che è in fondo alla pagina, sono 3 righe compilate…

            cmq questo è un pezzo di codice:

            `\documentclass[a4paper,10pt]{book}

            \usepackage[italian]{babel}
            \usepackage[tight,italian]{minitoc}
            \usepackage{footmisc}
            \usepackage[utf8x]{inputenc}

            \usepackage{xcolor}
            \usepackage{multicol}
            \definecolor{light-gray}{gray}{0.96}

            \usepackage{listings}
            \lstset{
            language=[LaTex]Tex,
            basicstyle=\small\ttfamily,
            breaklines = true,
            frame=single,
            backgroundcolor=\color{light-gray},
            breakautoindent = true
            }
            \begin{document}
            Per creare il pacchetto si usa il comando
            \lstinline!om-make-ipkg Nome_Progetto!, che rende disponibile l'eseguibile
            \lstinline!Nome_Progetto_0.1_armv4t.ipk!; una volta posseduto l'eseguibile, lo
            si può installare sulla propria architettura.
            \end{document}`

            ho inoltre combinato una specie di porcheria nel preambolo, poichè per avere il codice inline della stessa dimensione del testo normale, ho copiato tutto ciò che c’è in questo post, e funziona, ma mi piacerebbe fosse + elegante!
            in pratica il mio preambolo è diventato:
            `\documentclass[a4paper,10pt]{book}

            \usepackage[italian]{babel}
            \usepackage[tight,italian]{minitoc}
            \usepackage{footmisc}
            \usepackage[utf8x]{inputenc}
            \usepackage{hyperref}
            \usepackage [bookmarks, colorlinks, citecolor, filecolor, urlcolor]{hyperref}
            \hypersetup{colorlinks,citecolor=green,filecolor=magenta,linkcolor=red,
            urlcolor=blue}

            \usepackage{graphicx}
            \usepackage{xcolor}
            \usepackage{multicol}
            \definecolor{light-gray}{gray}{0.96}

            \usepackage{listings}
            \lstset{
            language=[LaTex]Tex,
            basicstyle=\small\ttfamily,
            breaklines = true,
            frame=single,
            backgroundcolor=\color{light-gray},
            breakautoindent = true
            }

            \makeatletter
            \lst@Key{addtobasicstyle}\relax{%
            \toks@=\expandafter{\lst@basicstyle #1}%
            \edef\lst@basicstyle{\the\toks@}}
            \def\calc@current@size{%
            \edef\current@size{%
            \noexpand\fontsize{\f@size}{\f@baselineskip}%
            \noexpand\selectfont}}

            \renewcommand\lstinline[1][]{%
            \leavevmode\bgroup %
            \calc@current@size
            \def\lst@boxpos{b}\lsthk@PreSet
            \lstset{flexiblecolumns,addtobasicstyle=\current@size,#1}%
            \lsthk@TextStyle
            \@ifnextchar\bgroup{\afterassignment\lst@InlineG
            \let\@let@token}\lstinline@}
            \makeatother

            \usepackage{lscape}
            \usepackage{booktabs}
            \usepackage{array,longtable}
            \usepackage{tabularx}
            \usepackage{rotating}
            \newcommand{\mail}[1]{\href{mailto:#1}{\texttt{#1}}}

            \setlength{\textwidth}{12.4cm}
            \setlength{\textheight}{18.0cm}
            \setlength{\oddsidemargin}{4.60cm}
            \setlength {\evensidemargin}{0.5cm}
            \setlength {\topmargin}{-1cm}`

          • #29161
            Up
            0
            Down
            ::

            ho riprovato il link e mi funziona, bisognerebbe scaricare il file lstinline.jpeg che è in fondo alla pagina, sono 3 righe compilate…

            Non riesco a vedere alcuno sfondo grigio, tanto meno irregolare come lamenti.

            Ciao
            Enrico

          • #29162
            Up
            0
            Down
            ::

            ho riprovato il link e mi funziona, bisognerebbe scaricare il file lstinline.jpeg che è in fondo alla pagina, sono 3 righe compilate…

            Non riesco a vedere alcuno sfondo grigio, tanto meno irregolare come lamenti.

            Ciao
            Enrico

            ehm… se guardi attentamente la seconda riga, si nota la differenza!

            cosa ho detto che è irregolare?

            qui ho aumetato la quanità di grigio….
            http://www.sendspace.com/file/axl34w

          • #29163
            Up
            0
            Down
            ::

            [quote]ho riprovato il link e mi funziona, bisognerebbe scaricare il file lstinline.jpeg che è in fondo alla pagina, sono 3 righe compilate…

            Non riesco a vedere alcuno sfondo grigio, tanto meno irregolare come lamenti.

            Ciao
            Enrico

            ehm… se guardi attentamente la seconda riga, si nota la differenza!

            cosa ho detto che è irregolare?

            qui ho aumetato la quanità di grigio….
            http://www.sendspace.com/file/axl34w%5B/quote%5D
            Con il preambolo che hai indicato (e che fra l’altro dà un errore con hyperref) e il testo del messaggio precedente non ottengo alcuno sfondo grigio, nemmeno modificandolo in modo che uno dei \lstinline vada a capo.

            Ciao
            Enrico

          • #29164
            Up
            0
            Down
            ::


            può essere allora un problema del mio compilatore???
            uso kyle…

          • #29165
            Up
            0
            Down
            ::

            può essere allora un problema del mio compilatore???
            uso kyle…

            Kile non è il compilatore, ma solo un “front-end”. Per favore, cerca di produrre un vero esempio minimo. Può essere che dipenda da versioni obsolete della distribuzione, ma senza un esempio vero non possiamo esserne certi.

            Se dal terminale dai “pdftex -version” che cosa esce?

            Ciao
            Enrico

          • #29166
            Up
            0
            Down
            ::

            può essere allora un problema del mio compilatore???
            uso kyle…

            kile pardon!
            `yashi@muletto:~$ pdftex -version
            pdfTeX 3.1415926-1.40.9-2.2 (Web2C 7.5.7)
            kpathsea version 3.5.7
            Copyright 2008 Peter Breitenlohner (eTeX)/Han The Thanh (pdfTeX).
            Kpathsea is copyright 2008 Karl Berry and Olaf Weber.
            There is NO warranty. Redistribution of this software is
            covered by the terms of both the pdfTeX copyright and
            the Lesser GNU General Public License.
            For more information about these matters, see the file
            named COPYING and the pdfTeX source.
            Primary author of pdfTeX: Peter Breitenlohner (eTeX)/Han The Thanh (pdfTeX).
            Kpathsea written by Karl Berry, Olaf Weber, and others.

            Compiled with libpng 1.2.29; using libpng 1.2.29
            Compiled with zlib 1.2.3; using zlib 1.2.3
            Compiled with xpdf version 3.02pl2
            `
            come esempio potrei allegare un pdf… ma sempre tramite sendspace, o se mi suggerisci qualche alternativa!

            cmq non ti ho ancora ringraziato per il tempo che mi stai dedicando….GRAZIE!

            allora dal link puoi scaricare un file zippato contenente sia il sorgente che il risultato della mia compilazione.
            ho aumentato il grado di grigio, ed ho messo anche del codice fuori testo.
            http://www.sendspace.com/file/i4onek

          • #29167
            lorenzo.pantieri
            Partecipante
              Up
              0
              Down
              ::

              allora dal link puoi scaricare un file zippato contenente sia il sorgente che il risultato della mia compilazione.
              ho aumentato il grado di grigio, ed ho messo anche del codice fuori testo.
              http://www.sendspace.com/file/i4onek

              Ho scaricato il .tex dal link e l’ho compilato: tutto bene, qui, nessuna riga colorata in corrispondenza del codice in linea.

              In altre parole, il mio PDF viene bene, contrariamente al tuo PDF, che presenta effettivamente un problema.

              Che distribuzione usi?

              CIao,
              L.

            • #29168
              Up
              0
              Down
              ::


              kubuntu 9.10 su amd64
              front-end kile Version 2.0.83 Using KDE 4.3.2

            • #29169
              Antonio Ledda
              Partecipante
                Up
                0
                Down
                ::

                kubuntu 9.10 su amd64
                front-end kile Version 2.0.83 Using KDE 4.3.2

                Ho fatto una prova anche io. Nessun problema — se non un bad box — con la TeX Live 2009, su Windows XP.

                Ciao,
                Antonio

              • #29170
                Up
                0
                Down
                ::

                può essere allora un problema del mio compilatore???
                uso kile…

                ebbene si, dopo svariati tentativi mi sono decisa ad aggiornare, ed il problema era proprio la versione di kile scaricata dai repo ufficiali di ubuntu.
                ho scaricato il pacchetto debian con un’altra versione e finalmente io lmio codice in linea (ameno quello!!!) non dà più problemi di sfondi errati.

                ho riportato tutto solo ppc, così se qualcuno dovesse riscontrare lo stesso problema saprebbe come risolverlo

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

            Go to top