Leggere un file di testo in una macro

  • Creatore
    Topic
  • #56766
    Up
    0
    Down
    ::


    Salve a tutti.

    Avrei bisogno di creare un file latex che abbia come input un file di testo, ed in base al numero di righe del file di testo mi crei con itemize un elenco di tanti elementi quante sono le righe del file.

    Come posso fare? Potete darmi delle indicazioni al riguardo?
    grazie per il vostro contributo
    Stefano

Visualizzazione 5 filoni di risposte
  • Autore
    Risposte
    • #56767
      Up
      0
      Down
      ::

      Salve a tutti.

      Avrei bisogno di creare un file latex che abbia come input un file di testo, ed in base al numero di righe del file di testo mi crei con itemize un elenco di tanti elementi quante sono le righe del file.

      Come posso fare? Potete darmi delle indicazioni al riguardo?
      grazie per il vostro contributo
      Stefano

      `\documentclass[a4paper]{article}
      \makeatletter
      \newread\ext@itemize
      \def\ext@par{\par}
      \newcommand{\makeitemize}[1]{%
      \IfFileExists{#1}
      {\openin\ext@itemize#1
      \begin{itemize}
      \ext@read
      \end{itemize}}
      {\message{^^J*** File #1 not found ***^^J^^J}}}
      \newcommand{\ext@read}{%
      \ifeof\ext@itemize
      \expandafter\closein\expandafter\ext@itemize
      \else
      \read\ext@itemize to \ext@line
      \ifx\ext@line\ext@par\else\item\ext@line\fi
      \expandafter\ext@read
      \fi}
      \makeatother

      \begin{document}
      \makeitemize{extitem.dat}
      \makeitemize{extitem.dot}
      \end{document}`
      Prova con un file extitem.dat che contenga
      `ciao
      ecco qui
      viva
      fine`
      Ho messo anche un esempio in più per mostrare che se l’argomento è un file inesistente viene emesso un messaggio e il comando non fa altro.

      Il comando \openin attiva la lettura riga per riga da un file; il comando per leggere una riga è “\read to ” che definisce (nel nostro caso \ext@line) come una macro che si espande al contenuto della riga appena letta. Il condizionale \ifeof è vero se non ci sono altre righe e questo termina la ricorsione. Perciò \ext@read viene eseguito fino a che ci sono righe nel file; c’è una piccola complicazione, perché TeX aggiunge sempre una riga vuota in fondo e questo è il motivo per il quale c’è il test \ifx\ext@line\ext@par.

      Unico caso in cui non funziona: il file dato come argomento di \makeitemize esiste ma non contiene nulla: in questo caso LaTeX incontra
      `\begin{itemize}
      \end{itemize}`
      che provoca un errore.

      Ciao
      Enrico

    • #56768
      Up
      0
      Down
      ::


      Ciao Enrico.
      Grazie per i comandi che mi hai dato. In comando itemize in modo automatico funziona perfettamente.
      Ti chiedo un ultimo aiuto: si può usare una struttura simile per inserire delle figure? Cioè inserire automaticamente delle figure, il cui nome è inserito in un file esterno?

      grazie ancora per il tuo aiuto
      Stefano

    • #56769
      Up
      0
      Down
      ::

      Ciao Enrico.
      Grazie per i comandi che mi hai dato. In comando itemize in modo automatico funziona perfettamente.
      Ti chiedo un ultimo aiuto: si può usare una struttura simile per inserire delle figure? Cioè inserire automaticamente delle figure, il cui nome è inserito in un file esterno?

      grazie ancora per il tuo aiuto
      Stefano

      Occorre saperne un po’ di più: quante figure? come?

      Ciao
      Enrico

    • #56770
      Up
      0
      Down
      ::


      Enrico, esercizio interessante, ma non sarebbe stato più semplice proporre una riga in bash, creare un secondo file con solo gli “\item” e poi includerlo con “\input”?

      😉
      Luca

    • #56771
      Up
      0
      Down
      ::

      Enrico, esercizio interessante, ma non sarebbe stato più semplice proporre una riga in bash, creare un secondo file con solo gli “\item” e poi includerlo con “\input”?

      😉
      Luca

      E come la metti con quelli che usano Windoze? 🙁 O quelli che non usano bash? 🙂

      Ciao
      Enrico

    • #56772
      Up
      0
      Down
      ::

      E come la metti con quelli che usano Windoze? 🙁 O quelli che non usano bash? 🙂

      Ciao
      Enrico

      Già, mi dimentico sempre dell’archeologia e dell’avanguardia informatica…
      😉
      Luca

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

Go to top