Makefile

  • Creatore
    Topic
  • #57092
    Up
    0
    Down
    ::


    Ciao a tutti,

    vorrei creare un makefile molto semplice che mi permetta di compilare il mio documento tex. Sapete dove posso trovare un esempio?

    Perché io ho trovato, per esempio, questo

    `
    dvi : tutorial.dvi
    ps : tutorial.ps
    pdf : tutorial.pdf
    html : tutorial/tutorial.html
    out : example
    clean :
    rm -rf *.dvi *.ps *.pdf *.log *.aux *.idx *~ part1.tex tutorial.tex \
    *pk *.out _pdweave.tmp _pd_html.html tutorial

    tutorial.dvi : tutorial.tex part1.tex

    tutorial.pdf : tutorial.tex part1.tex progdoc.pdf

    progdoc.pdf : progdoc.eps
    epstopdf progdoc.eps

    part1.tex : ClassDefs.h test.xml test.py version.el

    example : example.cpp ClassDefs.h
    g++ -o example example.cpp

    tutorial/tutorial.html: tutorial.dvi
    latex2html -html_version 4.0 -show_section_numbers -image_type gif \
    -up_title “ProgDoc Home Page” -up_url “../progdoc.htm” \
    -no_footnode -local_icons -numbered_footnotes tutorial.tex

    # We generate ps from pdf now in order to depend only on pdfLaTeX!
    # %.ps : %.dvi
    # dvips -D 600 -o $@ $< %.ps : %.pdf acroread -toPostScript -binary $< %.dvi : %.tex latex $< && latex $< %.pdf : %.tex rm -f $*.aux && pdflatex $< && pdflatex $< %.tex : %.pd pdweave $< ` ma non capisco bene le varie sezioni. Potreste spiegarmele? Grazie, Samuele

Visualizzazione 17 filoni di risposte
  • Autore
    Risposte
    • #57093
      robitex
      Amministratore del forum
        Up
        0
        Down
        ::

        Ciao a tutti,

        vorrei creare un makefile molto semplice che mi permetta di compilare il mio documento tex. Sapete dove posso trovare un esempio?

        Perché io ho trovato, per esempio, questo

        `
        dvi : tutorial.dvi
        ps : tutorial.ps
        pdf : tutorial.pdf
        html : tutorial/tutorial.html
        out : example
        clean :
        rm -rf *.dvi *.ps *.pdf *.log *.aux *.idx *~ part1.tex tutorial.tex \
        *pk *.out _pdweave.tmp _pd_html.html tutorial

        tutorial.dvi : tutorial.tex part1.tex

        tutorial.pdf : tutorial.tex part1.tex progdoc.pdf

        progdoc.pdf : progdoc.eps
        epstopdf progdoc.eps

        part1.tex : ClassDefs.h test.xml test.py version.el

        example : example.cpp ClassDefs.h
        g++ -o example example.cpp

        tutorial/tutorial.html: tutorial.dvi
        latex2html -html_version 4.0 -show_section_numbers -image_type gif \
        -up_title “ProgDoc Home Page” -up_url “../progdoc.htm” \
        -no_footnode -local_icons -numbered_footnotes tutorial.tex

        # We generate ps from pdf now in order to depend only on pdfLaTeX!
        # %.ps : %.dvi
        # dvips -D 600 -o $@ $< %.ps : %.pdf acroread -toPostScript -binary $< %.dvi : %.tex latex $< && latex $< %.pdf : %.tex rm -f $*.aux && pdflatex $< && pdflatex $< %.tex : %.pd pdweave $< ` ma non capisco bene le varie sezioni. Potreste spiegarmele? Grazie, Samuele

        Perché non usi Lua?
        Crea uno script di questo tenore:

        `local function makepdf( fn )
        print(“Start pdfLaTeX run…”)
        os.execute(“pdflatex ” .. fn)
        os.remove(fn..”.log”)
        os.remove(fn..”.aux”)
        print(“End”)
        end

        makepdf(arg[1])`

        Il codice è più semplice ed impari un po’ di Lua in vista di LuaTeX…
        Ciao

      • #57094
        Up
        0
        Down
        ::


        Grazie per i consigli.
        Non ho capito una cosa: io creo un file che si chiami “Makefile” che contenga le 4 righe che mi hai scritto tu, poi con un semplice `make` tutto funziona?

        Inoltre, mi pare di capire che tu utilizzi pdflatex. Io, invece, compilo con
        `latex nome_doc; bibtex nome_file_biblio; latex nome_doc; latex nome_doc; dvips nome_file.dvi; ps2pdf nome_file.ps; evince nome_file.pdf`

        Mi puoi aiutare con un makefile (in LUA) che faccia tutto questo?

        Grazie,

        Samuele

      • #57095
        Up
        0
        Down
        ::

        Grazie per i consigli.
        Non ho capito una cosa: io creo un file che si chiami “Makefile” che contenga le 4 righe che mi hai scritto tu, poi con un semplice `make` tutto funziona?

        Inoltre, mi pare di capire che tu utilizzi pdflatex. Io, invece, compilo con
        `latex nome_doc; bibtex nome_file_biblio; latex nome_doc; latex nome_doc; dvips nome_file.dvi; ps2pdf nome_file.ps; evince nome_file.pdf`

        Mi puoi aiutare con un makefile (in LUA) che faccia tutto questo?

        Grazie,

        Samuele

        Il programma “make” è un attrezzo indispensabile sui sistemi Unix; il suo funzionamento è “semplice”, dal punto di vista della chiamata: se nella directory attuale c’è un file di nome “makefile” o “Makefile” (preferendo il primo, ma di solito si usa il secondo perché appare prima dando “ls”) lo prende come input. La sintassi dei Makefile è piuttosto contorta; se proprio vuoi fare tanto lavoro inutilmente ti consiglio di dare un’occhiata a latexmk (texdoc latexmk).

        Perché dico “tanto lavoro inutilmente”? Perché di far andare bibtex ogni volta non c’è alcun bisogno, tanto meno di compilare tre volte con LaTeX. Non c’è nemmeno bisogno di lanciare evince, perché dovrebbe essere capace di vedere la modifica del file pdf sul disco e aggiornare.

        Ciao
        Enrico

      • #57096
        Up
        0
        Down
        ::


        Ok,

        seguo il tuo consiglio, Enrico.

        Ma resta una domanda di fondo che non ho ben capito: se io faccio scrivo quelle 4 righe in LUA che mi hai postato, poi che faccio? Me le salvo in un file e poi? Come lo lancio??

        Scusa, ma non ho capito nulla di questo passaggio.

        Grazie ancora.

        Samuele

      • #57097
        robitex
        Amministratore del forum
          Up
          0
          Down
          ::

          Ok,

          seguo il tuo consiglio, Enrico.

          Ma resta una domanda di fondo che non ho ben capito: se io faccio scrivo quelle 4 righe in LUA che mi hai postato, poi che faccio? Me le salvo in un file e poi? Come lo lancio??

          Scusa, ma non ho capito nulla di questo passaggio.

          Grazie ancora.

          Samuele

          Scusami, ma nella fretta di comporre il messaggio (senno Enrico mi avrebbe battuto), non ti ho detto come puoi lanciare uno script in Lua.
          Modo classico
          apri un terminale e digita il comando (makepdf.lua è il nome del file di testo contenente lo script):
          `lua makepdf.lua`
          naturalmente devi installare Lua e dare i permessi di esecuzione al file dello script.

          Se metti lo sha-bang puoi eseguire lo script semplicemente con un doppio click, e consiste nell’informare il sistema quale sia l’interprete da usare dando dopo i caratteri #! il path dell’eseguibile, nella prima riga del file .lua.
          Tipicamente sarà:
          `#!/usr/bin/lua`
          o qualcosa del genere se il path di lua è diverso e per trovarlo basta dare il comando ‘which lua’ (shows the full path of (shell) commands).

          Di più. Se togli l’estensione lua al file (visto che sotto Linux il sistema trova per altra via cosa lanciare), metti lo script nella cartella ~/home/bin e lo avrai disponibile da qualsiasi dir ti trovi.
          Ancora, puoi specializzare lo script controllando per esempio se è necessario compilare con una sequenza particolare.

          In definitiva, apri il terminale e digita (pippo è il nome del sorgente, makepdf è lo script Lua posto nella directory ~/home/bin):
          `makepdf pippo`

          Specializzando lo script lo potrai rendere flessibile e più intelligente.
          Bye
          Ciao

        • #57098
          Up
          0
          Down
          ::


          Ottimo. Grazie mille.

          Adesso ci provo. Ma ti chiedo: una cosa del genere

          `local function makepdf( fn )
          print(“Start LaTeX run…”)
          os.execute(“latex ” .. fn)
          os.execute(“dvips ” .. fn)
          os.execute(“ps2pdf ” .. fn)
          os.remove(fn..”.log”)
          os.remove(fn..”.aux”)
          print(“End”)
          end

          makepdf(arg[1])`

          può funzionare?

          Grazie,
          Samuele

        • #57099
          Up
          0
          Down
          ::

          Di più. Se togli l’estensione lua al file (visto che sotto Linux il sistema trova per altra via cosa lanciare), metti lo script nella cartella ~/home/bin e lo avrai disponibile da qualsiasi dir ti trovi.
          Ancora, puoi specializzare lo script controllando per esempio se è necessario compilare con una sequenza particolare.

          Che cartella intendi?

          /usr/bin?? Perché io non ho la ~/home/bin che citi tu.

          Grazie ancora

        • #57100
          robitex
          Amministratore del forum
            Up
            0
            Down
            ::

            Ottimo. Grazie mille.

            Adesso ci provo. Ma ti chiedo: una cosa del genere

            `local function makepdf( fn )
            print(“Start LaTeX run…”)
            os.execute(“latex ” .. fn)
            os.execute(“dvips ” .. fn)
            os.execute(“ps2pdf ” .. fn)
            os.remove(fn..”.log”)
            os.remove(fn..”.aux”)
            print(“End”)
            end

            makepdf(arg[1])`

            può funzionare?

            Grazie,
            Samuele

            Credo che ps2pdf voglia l’estensione del file quindi dovresti riscrivere la funzione come:
            ` os.execute(“ps2pdf ” .. fn .. “.ps”) `
            ed eventualmente puoi togliere i comandi os.remove() che cancellano i file ausiliari perché li ho messi solo per far vedere che era possibile cancellare anche file.
            Dovrebbe quindi funzionare.
            Ciao

          • #57101
            robitex
            Amministratore del forum
              Up
              0
              Down
              ::

              Di più. Se togli l’estensione lua al file (visto che sotto Linux il sistema trova per altra via cosa lanciare), metti lo script nella cartella ~/home/bin e lo avrai disponibile da qualsiasi dir ti trovi.
              Ancora, puoi specializzare lo script controllando per esempio se è necessario compilare con una sequenza particolare.

              Che cartella intendi?

              /usr/bin?? Perché io non ho la ~/home/bin che citi tu.

              Grazie ancora

              Se nella tua home directory non esiste la cartella bin creala (immagino che tu stia lavorando su Ubuntu no?).

              Questi piccoli script possono essere molto utili in casi complicati e frequenti di compilazione. Io li utilizzo spesso con un semplice doppio click ma il funzionamento va leggermente cambiato e questo è un segreto che svelerò solo in un prossimo articolo su ArSTeXnica!!!
              (prossimo inteso ricorsivamente…)
              Ciao

            • #57102
              Up
              0
              Down
              ::


              `Questi piccoli script possono essere molto utili in casi complicati e frequenti di compilazione. Io li utilizzo spesso con un semplice doppio click ma il funzionamento va leggermente cambiato e questo è un segreto che svelerò solo in un prossimo articolo su ArSTeXnica!!!
              (prossimo inteso ricorsivamente…) `

              Grande ;)..

              Invece, domanda (ennesima!) per te.. Mi dà un errore alla riga 3..

              Aiuto!

              `samiam@penrose: ~/shared_sammy/tutorial_nuovag2 > lua makepdf.lua
              Start LaTeX run…
              lua: makepdf.lua:3: attempt to concatenate local 'fn' (a nil value)
              stack traceback:
              makepdf.lua:3: in function 'makepdf'
              makepdf.lua:11: in main chunk
              [C]: ?
              [2]+ Done gedit makepdf.lua`

              Grazie ancora

            • #57103
              Up
              0
              Down
              ::


              Che scemo!! Ho risolto!
              Scusa. Dimenticato di indicargli l’argomento della funzione!!

              Grazie!

            • #57104
              robitex
              Amministratore del forum
                Up
                0
                Down
                ::

                Che scemo!! Ho risolto!
                Scusa. Dimenticato di indicargli l’argomento della funzione!!

                Grazie!

                Occorre fare un controllo prima di lanciare la funzione, utile perché se dopo un po’ di tempo torni ad usare lo script è probabile che non ti ricordi più come funziona:

                `local function makepdf( fn )
                print(“Start LaTeX run…”)
                os.execute(“latex ” .. fn)
                os.execute(“dvips ” .. fn)
                os.execute(“ps2pdf ” .. fn .. “.ps”)
                print(“End”)
                end

                — controllo se l'utente ha fornito l'argomento:
                local filename = arg[1]
                if not filename then
                print(“Errore, attendevo il nome del sorgente come argomento.”)
                return
                end

                makepdf( filename )
                `

                Ciao

              • #57105
                Up
                0
                Down
                ::



                @samiam1000
                : se sei comunque interessato a leggere qualcosa sui Makefile puoi dare un’occhiata a http://elubuntu.altervista.org/LaTeX/Guide/make.pdf

                Perché dico “tanto lavoro inutilmente”? Perché di far andare bibtex ogni volta non c’è alcun bisogno, tanto meno di compilare tre volte con LaTeX. Non c’è nemmeno bisogno di lanciare evince, perché dovrebbe essere capace di vedere la modifica del file pdf sul disco e aggiornare.

                Ciao
                Enrico

                Non sono d’accordo che sia sempre tutto lavoro inutile. Intanto usando le variabili riesco sempre a riciclare i miei Makefile, cambio i valori di poche variabili e per il resto sono perfettamente riutizzabili, quindi il lavoro l’ho compiuto una volta e poi basta. Inoltre l’utilità dei Makefile entra in gioco soprattutto se non si vuole solo compilare il documento ma bisogna compiere delle altre operazioni precedentemente. Per esempio spesso ho bisogno di produrre dei grafici con gnuplot; in genere uso il terminale `epslatex’ quindi ottengo dei file EPS da convertire in PDF e anche questa operazione può essere automatizzata con il Makefile (anche se grazie a TeX Live 2010 mi risparmio questo passaggio). Inoltre ho delle regole per cancellare tutti i file temporanei prodotti nel caso in cui ciò sia necessario; ho una regola che mi crea un archivio compresso per distribuire tutta la cartella del codice sorgente del documento.

                È vero che alcuni programmi permettono di compiere alcune di queste operazioni, ma i Makefile hanno il pregio di essere indipendenti dall’editor di testo usato e anche dal sistema operativo, GNU Make gira su tutti i sistemi Unix e anche Windows.

                È anche vero che non è sempre necessario ricompilare tre volte un documento e la bibliografia ed è per questo che esiste texi2dvi (se solo funzionasse con il tuo pacchetto `frontespizio’ 👿 )

              • #57106
                robitex
                Amministratore del forum
                  Up
                  0
                  Down
                  ::

                  @samiam1000: se sei comunque interessato a leggere qualcosa sui Makefile puoi dare un’occhiata a http://elubuntu.altervista.org/LaTeX/Guide/make.pdf

                  Perché dico “tanto lavoro inutilmente”? Perché di far andare bibtex ogni volta non c’è alcun bisogno, tanto meno di compilare tre volte con LaTeX. Non c’è nemmeno bisogno di lanciare evince, perché dovrebbe essere capace di vedere la modifica del file pdf sul disco e aggiornare.

                  Ciao
                  Enrico

                  Non sono d’accordo che sia sempre tutto lavoro inutile. Intanto usando le variabili riesco sempre a riciclare i miei Makefile, cambio i valori di poche variabili e per il resto sono perfettamente riutizzabili, quindi il lavoro l’ho compiuto una volta e poi basta. Inoltre l’utilità dei Makefile entra in gioco soprattutto se non si vuole solo compilare il documento ma bisogna compiere delle altre operazioni precedentemente. Per esempio spesso ho bisogno di produrre dei grafici con gnuplot; in genere uso il terminale `epslatex’ quindi ottengo dei file EPS da convertire in PDF e anche questa operazione può essere automatizzata con il Makefile (anche se grazie a TeX Live 2010 mi risparmio questo passaggio). Inoltre ho delle regole per cancellare tutti i file temporanei prodotti nel caso in cui ciò sia necessario; ho una regola che mi crea un archivio compresso per distribuire tutta la cartella del codice sorgente del documento.

                  È vero che alcuni programmi permettono di compiere alcune di queste operazioni, ma i Makefile hanno il pregio di essere indipendenti dall’editor di testo usato e anche dal sistema operativo, GNU Make gira su tutti i sistemi Unix e anche Windows.

                  È anche vero che non è sempre necessario ricompilare tre volte un documento e la bibliografia ed è per questo che esiste texi2dvi (se solo funzionasse con il tuo pacchetto `frontespizio’ 👿 )

                  Scusa Elrond, ma avevi già evidenziato sul forum la tua guida su Make?
                  Sarebbe addirittura straordinario poter fare un articolo sui modi di compilazione nel mondo TeX.
                  Possiamo prendercela abbastanza comoda, e scrivere, a contributo aperto, un articolo per ArS.
                  L’unione fa la forza!!
                  R.

                • #57107
                  Up
                  0
                  Down
                  ::

                  @samiam1000: se sei comunque interessato a leggere qualcosa sui Makefile puoi dare un’occhiata a http://elubuntu.altervista.org/LaTeX/Guide/make.pdf

                  [quote]Perché dico “tanto lavoro inutilmente”? Perché di far andare bibtex ogni volta non c’è alcun bisogno, tanto meno di compilare tre volte con LaTeX. Non c’è nemmeno bisogno di lanciare evince, perché dovrebbe essere capace di vedere la modifica del file pdf sul disco e aggiornare.

                  Ciao
                  Enrico

                  Non sono d’accordo che sia sempre tutto lavoro inutile. Intanto usando le variabili riesco sempre a riciclare i miei Makefile, cambio i valori di poche variabili e per il resto sono perfettamente riutizzabili, quindi il lavoro l’ho compiuto una volta e poi basta. Inoltre l’utilità dei Makefile entra in gioco soprattutto se non si vuole solo compilare il documento ma bisogna compiere delle altre operazioni precedentemente. Per esempio spesso ho bisogno di produrre dei grafici con gnuplot; in genere uso il terminale `epslatex’ quindi ottengo dei file EPS da convertire in PDF e anche questa operazione può essere automatizzata con il Makefile (anche se grazie a TeX Live 2010 mi risparmio questo passaggio). Inoltre ho delle regole per cancellare tutti i file temporanei prodotti nel caso in cui ciò sia necessario; ho una regola che mi crea un archivio compresso per distribuire tutta la cartella del codice sorgente del documento.

                  È vero che alcuni programmi permettono di compiere alcune di queste operazioni, ma i Makefile hanno il pregio di essere indipendenti dall’editor di testo usato e anche dal sistema operativo, GNU Make gira su tutti i sistemi Unix e anche Windows.

                  È anche vero che non è sempre necessario ricompilare tre volte un documento e la bibliografia ed è per questo che esiste texi2dvi (se solo funzionasse con il tuo pacchetto `frontespizio’ 👿 )

                  Scusa Elrond, ma avevi già evidenziato sul forum la tua guida su Make?
                  Sarebbe addirittura straordinario poter fare un articolo sui modi di compilazione nel mondo TeX.
                  Possiamo prendercela abbastanza comoda, e scrivere, a contributo aperto, un articolo per ArS.
                  L’unione fa la forza!!
                  R.[/quote]
                  Sì: http://www.guit.sssup.it/phpbb/viewtopic.php?t=6690

                • #57108
                  Up
                  0
                  Down
                  ::

                  @samiam1000: se sei comunque interessato a leggere qualcosa sui Makefile puoi dare un’occhiata a http://elubuntu.altervista.org/LaTeX/Guide/make.pdf

                  Perché dico “tanto lavoro inutilmente”? Perché di far andare bibtex ogni volta non c’è alcun bisogno, tanto meno di compilare tre volte con LaTeX. Non c’è nemmeno bisogno di lanciare evince, perché dovrebbe essere capace di vedere la modifica del file pdf sul disco e aggiornare.

                  Ciao
                  Enrico

                  Non sono d’accordo che sia sempre tutto lavoro inutile. Intanto usando le variabili riesco sempre a riciclare i miei Makefile, cambio i valori di poche variabili e per il resto sono perfettamente riutizzabili, quindi il lavoro l’ho compiuto una volta e poi basta. Inoltre l’utilità dei Makefile entra in gioco soprattutto se non si vuole solo compilare il documento ma bisogna compiere delle altre operazioni precedentemente. Per esempio spesso ho bisogno di produrre dei grafici con gnuplot; in genere uso il terminale `epslatex’ quindi ottengo dei file EPS da convertire in PDF e anche questa operazione può essere automatizzata con il Makefile (anche se grazie a TeX Live 2010 mi risparmio questo passaggio). Inoltre ho delle regole per cancellare tutti i file temporanei prodotti nel caso in cui ciò sia necessario; ho una regola che mi crea un archivio compresso per distribuire tutta la cartella del codice sorgente del documento.

                  È vero che alcuni programmi permettono di compiere alcune di queste operazioni, ma i Makefile hanno il pregio di essere indipendenti dall’editor di testo usato e anche dal sistema operativo, GNU Make gira su tutti i sistemi Unix e anche Windows.

                  È anche vero che non è sempre necessario ricompilare tre volte un documento e la bibliografia ed è per questo che esiste texi2dvi (se solo funzionasse con il tuo pacchetto `frontespizio’ 👿 )

                  Gnuplot ha anche il terminale pdf.

                  texi2dvi è un attrezzo piuttosto rigido, latexmk è molto più flessibile e sono quasi certo che gli si possa insegnare a compilare anche il frontespizio.

                  Ciao
                  Enrico

                • #57109
                  Up
                  0
                  Down
                  ::

                  Gnuplot ha anche il terminale pdf.

                  Lo so ma preferisco `epslatex’ per documenti LaTeX, almeno finché non imparerò a usare tikz 🙂

                  texi2dvi è un attrezzo piuttosto rigido, latexmk è molto più flessibile e sono quasi certo che gli si possa insegnare a compilare anche il frontespizio.

                  Ciao
                  Enrico

                  Ultimamente mi sto rendendo conto della rigidità di texi2dvi (per esempio volevo provare a usare biber al posto di bibtex, ma temo che non sia possibile), però per quello che di cui ho bisogno al momento mi va più che bene. Tempo fa avevo dato un’occhiata a latexmk, ma devo ammettere che non l’ho studiato con particolare attenzione finora.

                • #57110
                  Up
                  0
                  Down
                  ::


                  la potenza di make e’ l’analisi del tempo di modifica del file e l’esecuzione dei comandi “strettamente” necessari per l’aggiornamento del target finale secondo una precisa strategia ad albero di dipendenze.
                  sperare di riprodurlo con una qualsiasi linguaggio di scripting (che sia lua o bash) e’ una perdita di tempo.
                  certo che oggi esistono strumenti piu’ immediati (come gli editor LaTeX coi loro bottoni preconfigurati).
                  se avessi un po’ di tempo sistemerei quel makefile in modo da compilare solo cio’ che serve, ma scommetto che in rete troverai decine di esempi.

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

              Go to top