Inserire molti files in \input

  • Creatore
    Topic
  • #93151
    Up
    0
    Down
    ::


    Buongiorno.
    Mi capita di avere dei files sorgente con un preambolo pre-impostato. Utilizzo quindi il comando \input per inserire dei files separati.
    `
    \begin{document}
    \input{capitolo1.tex}
    \input{capitolo2.tex}
    \end{document}
    `
    Come faccio però quando ho moltissimi files con nomi diversi?
    Esiste un carattere jolly (per capirsi tipo *.tex) in modo da “farli leggere” a \input in un colpo solo?
    Grazie.

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


        Ciao,
        la tua pigrizia è proverbiale (a meno che tu non abbia più di 50 capitoli).

        Io eventualemente risolverei con un piccolo script in Lua:
        `– genera i comandi da copiare ed incollare
        — nel sorgente principale

        local cap = “capitolo”
        local fmt = “\\input{%s%d}”
        for i=1,28 do
        print(string.format(fmt, cap, i))
        end`

        Lo script può essere eseguito con il programma texlua che dovrebbe essere già installato nella tua macchina, da console.
        Esiste anche la soluzione in TeX ovviamente, ma quella in Lua ha il pregio della semplicità e quindi può essere adattata molto facilmente.
        In realità, forse, la tua non è prigrizia, ma invece è la necessitò di disporre comandi a più alto livello.
        Saluti.
        R.

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


          Ciao,
          ecco una soluzione con TeX puro:
          `\documentclass{minimal}

          \makeatletter
          \newcount\file@numi
          \newcount\file@numf

          \def\fileprefix#1{\def\file@prefix{#1}}

          \def\insertchap(#1->#2){%
          \file@numi=#1
          \file@numf=#2
          \advance\file@numf by 1
          \loop
          \textbackslash input\{\file@prefix\the\file@numi\}\\
          % \input{\file@prefix\the\file@numi}
          \advance\file@numi by 1
          \ifnum\file@numi<\file@numf \repeat } \makeatother \pagestyle{empty} \begin{document} \fileprefix{capitolo} \insertchap(1->28)

          \end{document}`
          L’esempio deve essere corretto sostituendo la riga che comincia con \textbackslash con la successiva.
          Per inciso, non occorre specificare l’estensione .tex ad \input.
          Alla prossima.
          R.

        • #93154
          Up
          0
          Down
          ::


          Grazie della risposta.

          `la tua pigrizia è proverbiale`
          Questa non l’ho capita.

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

            sblindo” post=92797Grazie della risposta.

            `la tua pigrizia è proverbiale`
            Questa non l’ho capita.

            Scherzavo un po’ nel senso che produrre nel codice quella serie di comandi \input è una questione di un minuto.
            Ma a fine messaggio ho specificato che potrebbe essere un’esigenza che tu hai sentito di disporre di un comando di più alto livello.

            La macro \insertchap può essere usata anche per escludere un capitolo.
            Basta inserirne due, una con argomenti da 1 -> n-1 e l’altra da n+1->tot.
            Sarebbe interessante scrivere la versione LaTeX3 del comando.
            R.

          • #93156
            Up
            0
            Down
            ::


            Molto bene.
            Scusami.

          • #93157
            Up
            0
            Down
            ::

            robitex” post=92799Sarebbe interessante scrivere la versione LaTeX3 del comando.
            R.

            Eccola! 🙂

            `
            \documentclass{book}

            \usepackage{xparse}

            \ExplSyntaxOn
            \NewDocumentCommand{\insertchap}{ m m }
            {
            \sblindo_insertchap:nn { #1 } { #2 }
            }

            \cs_new_protected:Npn \sblindo_insertchap:nn #1 #2
            {
            \clist_map_inline:nn { #2 }
            {
            \sblindo_input_range:nn { #1 } { ##1 }
            }
            }

            \cs_new_protected:Npn \sblindo_input_range:nn #1 #2
            {
            \seq_set_split:Nnn \l_sblindo_range_seq { – } { #2 }
            \int_compare:nTF { \seq_count:N \l_sblindo_range_seq = 1 }
            {
            \sblindo_input:n { #1 \sblindo_pad:n { #2 } }
            }
            {
            \int_step_inline:nnnn
            { \seq_item:Nn \l_sblindo_range_seq { 1 } } % start
            { 1 } % step
            { \seq_item:Nn \l_sblindo_range_seq { 2 } } % end
            { \sblindo_input:n { #1 \sblindo_pad:n { ##1 } } } % input
            }
            }

            \cs_new:Npn \sblindo_pad:n #1
            {
            \int_compare:nT { #1 < 10 } { 0 } \int_to_arabic:n { #1 } } \cs_new:Npn \sblindo_input:n #1 { \par #1 } \ExplSyntaxOff \begin{document} \insertchap{capitolo}{1-3,5,7-11} \end{document} ` Nella versione finale si sostituisca [tt]\sblindo_input:n[/tt] con [tt]\file_input:n[/tt]. Qui si suppone che i capitoli siano al massimo 99, con numerazione a due cifre. La modifica per il caso senza 0 iniziale è facile. Il primo argomento di [tt]\insertchap[/tt] è il prefisso comune. Ciao Enrico

          • #93158
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::



              @sblindo
              , il tuo primo messagio è stato utile per far esercitare i freuentatori del forum su un prolema di programmazione insolito.

              Ma il questo è bacato fin dall’inizio.

              Mi spiego: la domanda sarebbe itile se i capitoi si chiamaassero capitolo1.tex, capitolo2.tex, …, capitolo99.tex.
              Ma spero bene che tu no abbia fatto una scicchezza del genere: i nomi dei file devono essere moderatamente mnemnici affinche tu possa ritrovare facilmente il file su cui eventalmente mettere le mani; e il numero del capitolo non aiuta certo la memoria.

              Io vedrei file dai nomi simili a questi: frontespizio-e-preliminari.tex, presentazione.tex, stato-dell-arte.tex, scopo-della-ricerca.tex, ipotesi-preliminari.tex,…,materiale-finale.tex

              Questo sì che sarebbe quello da fare per te, non per il programma che te li carica automaticamente. con nomi del tipo di quelli che ti ho indicato non c’è praticamente programma che tenga per caricarteli tutti, e se vuoi venire incontro al programma vai contro te stesso.

              Non è una questione di pigrizia come scherzosamente è stato detto all’inizio, è una questione di praticità. In sostanza, anche se ti sono state fornite più soluzioni, di di cui una scritta in linguaggio L3, sono tutte soluzioni che non ti aiutano nemmeno un briciolino; all’inizio magari no te ne accorgi, ma quando devi apportare le necessarie modifiche ad alcuni file, ti rendi conto che non riesci più a trovarli; se se hai soli 5 o 6 capitoli non vale la pena nemmeno se li chiamassi con i loro numeri.

            • #93159
              Up
              0
              Down
              ::

              OldClaudio” post=92830 @sblindo, il tuo primo messagio è stato utile per far esercitare i freuentatori del forum su un prolema di programmazione insolito.

              Ma il questo è bacato fin dall’inizio.

              Mi spiego: la domanda sarebbe itile se i capitoi si chiamaassero capitolo1.tex, capitolo2.tex, …, capitolo99.tex.
              Ma spero bene che tu no abbia fatto una scicchezza del genere: i nomi dei file devono essere moderatamente mnemnici affinche tu possa ritrovare facilmente il file su cui eventalmente mettere le mani; e il numero del capitolo non aiuta certo la memoria.

              Io vedrei file dai nomi simili a questi: frontespizio-e-preliminari.tex, presentazione.tex, stato-dell-arte.tex, scopo-della-ricerca.tex, ipotesi-preliminari.tex,…,materiale-finale.tex

              Questo sì che sarebbe quello da fare per te, non per il programma che te li carica automaticamente. con nomi del tipo di quelli che ti ho indicato non c’è praticamente programma che tenga per caricarteli tutti, e se vuoi venire incontro al programma vai contro te stesso.

              Non è una questione di pigrizia come scherzosamente è stato detto all’inizio, è una questione di praticità. In sostanza, anche se ti sono state fornite più soluzioni, di di cui una scritta in linguaggio L3, sono tutte soluzioni che non ti aiutano nemmeno un briciolino; all’inizio magari no te ne accorgi, ma quando devi apportare le necessarie modifiche ad alcuni file, ti rendi conto che non riesci più a trovarli; se se hai soli 5 o 6 capitoli non vale la pena nemmeno se li chiamassi con i loro numeri.

              Sottoscrivo tutto e aggiungo che se mai volessi cambiare l’ordine dei capitoli (eventualità infrequente ma non impossibile) la numerazione mostrerà tutti i suoi difetti. È lo stesso motivo per cui si consiglia di usare etichette con nomi sensati e non numeriche.

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

                Elrond” post=92831

                @sblindo, il tuo primo messagio è stato utile per far esercitare i freuentatori del forum su un prolema di programmazione insolito.

                Ma il questo è bacato fin dall’inizio.

                Mi spiego: la domanda sarebbe itile se i capitoi si chiamaassero capitolo1.tex, capitolo2.tex, …, capitolo99.tex.
                Ma spero bene che tu no abbia fatto una scicchezza del genere: i nomi dei file devono essere moderatamente mnemnici affinche tu possa ritrovare facilmente il file su cui eventalmente mettere le mani; e il numero del capitolo non aiuta certo la memoria.

                Io vedrei file dai nomi simili a questi: frontespizio-e-preliminari.tex, presentazione.tex, stato-dell-arte.tex, scopo-della-ricerca.tex, ipotesi-preliminari.tex,…,materiale-finale.tex

                Questo sì che sarebbe quello da fare per te, non per il programma che te li carica automaticamente. con nomi del tipo di quelli che ti ho indicato non c’è praticamente programma che tenga per caricarteli tutti, e se vuoi venire incontro al programma vai contro te stesso.

                Non è una questione di pigrizia come scherzosamente è stato detto all’inizio, è una questione di praticità. In sostanza, anche se ti sono state fornite più soluzioni, di di cui una scritta in linguaggio L3, sono tutte soluzioni che non ti aiutano nemmeno un briciolino; all’inizio magari no te ne accorgi, ma quando devi apportare le necessarie modifiche ad alcuni file, ti rendi conto che non riesci più a trovarli; se se hai soli 5 o 6 capitoli non vale la pena nemmeno se li chiamassi con i loro numeri.

                Sottoscrivo tutto e aggiungo che se mai volessi cambiare l’ordine dei capitoli (eventualità infrequente ma non impossibile) la numerazione mostrerà tutti i suoi difetti. È lo stesso motivo per cui si consiglia di usare etichette con nomi sensati e non numeriche.

                Ciao, ciao.
                Io uso una tecnica mista.
                Intanto, quasi tutti i miei documenti sono suddivisi in un numero variabile di file anche a più livelli (ma questo è raro), con una struttura di directory ormai consolidata (ed anche questo è importante secondo me).
                La “tecnica mista” consiste nel nominare i file delle sezioni con _.
                In questo modo ho sia il riferimento mnemonico derivante dal titolo breve, sia il numero che permette al gestore di finestre di presentare i file in ordine.
                Anche la posizione del file all’interno della finestra può essere un riferimento mentale utile per trovare il file velocemente e senza errori.

                Ecco come appare il documento a cui sto lavorando adesso:
                `\input{section/01_Dati}

                \input{section/02_Illustra}

                \input{section/03_Criteri}

                \input{section/04_Materiali}

                \input{section/05_Norme}

                \input{section/06_Unita}

                \input{section/07_Geotecnica}

                \input{section/08_Azioni}

                \input{section/13_VerifSecond}

                \input{section/14_VerifLL}`

                Anch’io penso che alla fine un comando per l’inserimento multiplo di file non serva, tant’è che non esiste nel nucleo di LaTeX e penso che il motivo sia proprio questo.
                Nell’economia di gestione di un progetto, rinominare qualche file sorgente e gestire i comandi di inclusione è un’attività che non pesa, mentre la semplicità è importante.

                Ognuno ha le sue abitudini e convenzioni e mi pare che al nostro @sblindo abbiamo dato il più ampio panoramo sulla questione.
                Da tener in conto anche il fatto che la struttura dei progetti TeX influenza il modo in cui conviene nominare i sorgenti.
                R.

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

                  egreg9″ post=92828

                  Sarebbe interessante scrivere la versione LaTeX3 del comando.
                  R.

                  Eccola! 🙂

                  `
                  \documentclass{book}

                  \usepackage{xparse}

                  \ExplSyntaxOn
                  \NewDocumentCommand{\insertchap}{ m m }
                  {
                  \sblindo_insertchap:nn { #1 } { #2 }
                  }

                  \cs_new_protected:Npn \sblindo_insertchap:nn #1 #2
                  {
                  \clist_map_inline:nn { #2 }
                  {
                  \sblindo_input_range:nn { #1 } { ##1 }
                  }
                  }

                  \cs_new_protected:Npn \sblindo_input_range:nn #1 #2
                  {
                  \seq_set_split:Nnn \l_sblindo_range_seq { – } { #2 }
                  \int_compare:nTF { \seq_count:N \l_sblindo_range_seq = 1 }
                  {
                  \sblindo_input:n { #1 \sblindo_pad:n { #2 } }
                  }
                  {
                  \int_step_inline:nnnn
                  { \seq_item:Nn \l_sblindo_range_seq { 1 } } % start
                  { 1 } % step
                  { \seq_item:Nn \l_sblindo_range_seq { 2 } } % end
                  { \sblindo_input:n { #1 \sblindo_pad:n { ##1 } } } % input
                  }
                  }

                  \cs_new:Npn \sblindo_pad:n #1
                  {
                  \int_compare:nT { #1 < 10 } { 0 } \int_to_arabic:n { #1 } } \cs_new:Npn \sblindo_input:n #1 { \par #1 } \ExplSyntaxOff \begin{document} \insertchap{capitolo}{1-3,5,7-11} \end{document} ` Nella versione finale si sostituisca [tt]\sblindo_input:n[/tt] con [tt]\file_input:n[/tt]. Qui si suppone che i capitoli siano al massimo 99, con numerazione a due cifre. La modifica per il caso senza 0 iniziale è facile. Il primo argomento di [tt]\insertchap[/tt] è il prefisso comune. Ciao Enrico[/quote] Bellissimo ed elegante. W LaTeX3 W Enrico. R. Ps. perfetto per implementare l'inclusione di un insieme di fotografie...

                • #93162
                  Up
                  0
                  Down
                  ::


                  `Ma spero bene che tu no abbia fatto una scicchezza del genere: i nomi dei file devono essere moderatamente mnemnici affinche tu possa ritrovare facilmente il file su cui eventalmente mettere le mani; e il numero del capitolo non aiuta certo la memoria.

                  Io vedrei file dai nomi simili a questi: frontespizio-e-preliminari.tex, presentazione.tex, stato-dell-arte.tex, scopo-della-ricerca.tex, ipotesi-preliminari.tex,…,materiale-finale.tex`
                  Certo, certo. Il mio era solo un esempio.
                  Invece ho imparato che non serve l’estensione *.tex.
                  Grazie.

                • #93163
                  Up
                  0
                  Down
                  ::

                  sblindo” post=92838

                  Ma spero bene che tu no abbia fatto una scicchezza del genere: i nomi dei file devono essere moderatamente mnemnici affinche tu possa ritrovare facilmente il file su cui eventalmente mettere le mani; e il numero del capitolo non aiuta certo la memoria.

                  Io vedrei file dai nomi simili a questi: frontespizio-e-preliminari.tex, presentazione.tex, stato-dell-arte.tex, scopo-della-ricerca.tex, ipotesi-preliminari.tex,…,materiale-finale.tex

                  Invece ho imparato che non serve l’estensione *.tex.

                  Vero, ma credo che OldClaudio parlasse dei nomi dei file in senso stretto, non dell’argomento da passare ad [tt]\input[/tt] o [tt]\include[/tt].

                  Ciao
                  Claudio

                • #93164
                  OldClaudio
                  Partecipante
                    Up
                    0
                    Down
                    ::

                    cfiandra” post=92839

                    [quote=”OldClaudio” post=92830]Ma spero bene che tu no abbia fatto una scicchezza del genere: i nomi dei file devono essere moderatamente mnemnici affinche tu possa ritrovare facilmente il file su cui eventalmente mettere le mani; e il numero del capitolo non aiuta certo la memoria.

                    Io vedrei file dai nomi simili a questi: frontespizio-e-preliminari.tex, presentazione.tex, stato-dell-arte.tex, scopo-della-ricerca.tex, ipotesi-preliminari.tex,…,materiale-finale.tex

                    Invece ho imparato che non serve l’estensione *.tex.

                    Vero, ma credo che OldClaudio parlasse dei nomi dei file in senso stretto, non dell’argomento da passare ad [tt]\input[/tt] o [tt]\include[/tt].

                    Ciao
                    Claudio[/quote]

                    Non ho capito: certo che parlavo dei nomi dei file; ma tu come argomento da passare a \input o a \include che cosa dai di diverso dai nomi dei file?

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

                Go to top