Maschera di inserimento dati in Latex

  • Creatore
    Topic
  • #121698
    Federico Gallo
    Partecipante
      Up
      0
      Down
      ::


      Ho preparato un semplice script in Python per i casi in cui si utilizzi LaTex per stampare moduli precompilati (ad esempio moduli di iscrizione, oppure lettere tutte uguali per le quali cambia solo l’indirizzo, etc.) .
      In questi casi, in cui il testo è sempre uguale e cambiano solo alcune variabili, potrebbe essere utile avere una maschera di inserimento dei dati, senza andare ad intaccare il file originale LaTex.
      Partendo da una maschera di inserimento dei dati, viene creato un nuovo file che, partendo dall’originale, lo riproduce inserendo le variabili. A quel punto compilando il nuovo file si avrà il .pdf con le variabili inserite.

      Sotto inserisco un esempio, per spiegare meglio cosa intendo.

      1) All’interno di una cartella creo uno script in LaTex, che, ad esempio, potremmo chiamare “template.tex”. All’interno di questo file inserisco il testo e le variabili nel punto in cui voglio che siano inserite all’interno del testo. Un semplice esempio potrebbe essere:

      `\documentclass[a4paper,12pt]{letter}
      \usepackage{lipsum}

      \newcommand{\destinatario}{\%destinatario\%}
      \newcommand{\indirizzo}{\%indirizzo\%}
      \newcommand{\citta}{\%citta\%}
      \newcommand{\firma}{\%firma\%}

      \begin{document}
      \begin{letter}{\destinatario \\ \indirizzo \\ \citta}
      \opening{Gentile signore,}
      \lipsum[1]
      \closing{Distinti saluti.}

      {\vspace{-2cm}\hspace{8cm}\firma}

      \end{letter}
      \end{document}`

      2) in ambiente Python compilo questo semplice codice:

      `input_filename = “template.tex”
      output_filename = “documento.tex”

      with open(input_filename, “r”) as f:
      template = f.read()

      destinatario = input(“Inserisci destinatario: “)
      indirizzo = input(“Inserisci il indirizzo: “)
      citta = input(“Inserisici città: “)
      firma = input(“Inserisici firma: “)

      template = template.replace(“\%destinatario\%”, destinatario)
      template = template.replace(“\%indirizzo\%”, indirizzo)
      template = template.replace(“\%citta\%”, citta)
      template = template.replace(“\%firma\%”, firma)

      with open(output_filename, “w”) as f:
      f.write(template)

      print(f”Il file {output_filename} è stato creato con i nuovi dati.”)
      `

      A questo punto, eseguendo il codice Python (il file deve essere salvato nella stessa cartella del file template.tex) il programma chiederà di inserire i dati richiesti e poi creerà un nuovo file, nella stessa cartella, nominato “documento.tex” che conterrà le variabili indicate. Compilando in LaTex il nuovo file documento.tex si avrà il pdf. della lettera.

      Chiaramente l’utilità aumenta quando le variabili sono molte e ci sono diversi file dello stesso tipo da compilare.

      Mi farebbe piacere sapere se qualcuno ha trovato un altro metodo, magari utilizzando solo Latex, di cui ho una conoscenza limitata.

    Visualizzazione 1 filone di risposte
    • Autore
      Risposte
      • #121699
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::



          @Fede75
          , non escludo che qualcuno possa preferire il sistema che hai escogitato tu mescolando LaTeX con Python. Hai sfruttato bene sia il codice Python, che conosci meglio di LaTeX, sia il codice LaTeX.

          Ma chiudi il messaggio chiedendomi se la cosa si possa fra più facilmente o più rapidamente con LaTeX. Io penso di sii, ma ovviamente dipende da quali dati bisogna immettere nel documento e che cosa va scritto nel documento.
          Come nel tuo caso per ogni documento con un testo diverso, bisogna provvedere a un template diverso e ad un file Python diverso. Con LaTeX puoi costruirti, salvandole nella cartella locale, tante classi diverse o tanti pacchetti diversi da immettere nel preambolo di tanti sorgenti uno per ciascun testo.
          Come fare?
          Mi vine in mente che il tuo problema non sembra molto diverso da quello delle tesi di laurea. Nel caso delle tesi devi specificare il nome dell’ateneo
          ol nome del corso di laurea o della facoltà
          il nome del laureando
          il numero di matricola,
          l’anno accademico o la data completa del giorno in cui si svolge l’esame di laurea
          il titolo,
          il sottotitolo
          il o i nomi dei relatori
          Probabilemente il nome del dipartimento a cuoi afferisce il primo relatore
          L’abstract )o sommario breve
          qualcuno ci mette la dedica
          qualcuno ci metteuna forse saggia, un proverbio o qualcosa del genere
          Il sommario lungo, ila presentazione

          Poi naturalmente deve inserire il copro della tesi.

          Vedi dunque che ci sono molte parti variabili da introdurre, ma il sistema TeX con la distribuzione TeX Live e MacTeX o con la distribuzione MiKTeX dispone già di alcune classi che fanno tutto ciao senza ricorrere a Python. ne cito qualcuna suftesi, toltesi, sapthesis, uniFi, classicthesi, e via di questo passo; poi ci sono quelle distribuite dai vari atenei e che non si trovano negli archi delle distribuzioni del sistema TeX. c’ anche il pacchetto frontespizio che si occupa solo delle parti variabili del frontespizio. Puoi cominciare da quest’ultimo pacchetto per vedere com gestisce la pletora di informazioni necessarie per un frontespizio. È semplice, ma troppo lunghi da spiegare qui sul forum.

        • #121700
          Federico Gallo
          Partecipante
            Up
            0
            Down
            ::


            Grazie per gli spunti. Inizio a fare qualche prova, perché mi piacerebbe trovare una soluzione senza uscire dall’ambiente LaTex.
            Grazie ancora

        Visualizzazione 1 filone di risposte
        • Devi essere connesso per rispondere a questo topic.

        Go to top