- Questo topic ha 13 risposte, 6 partecipanti ed è stato aggiornato l'ultima volta 12 anni, 6 mesi fa da
OldClaudio.
-
CreatoreTopic
-
11 Marzo 2014 alle 7:25 #93151::
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.
-
CreatoreTopic
-
AutoreRisposte
-
-
11 Marzo 2014 alle 7:43 #93152::
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 principalelocal 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.
-
11 Marzo 2014 alle 7:53 #93153::
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.
-
11 Marzo 2014 alle 8:29 #93154
-
11 Marzo 2014 alle 9:01 #93155::
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.
-
11 Marzo 2014 alle 9:09 #93156
-
11 Marzo 2014 alle 15:50 #93157::
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 -
11 Marzo 2014 alle 22:00 #93158::
@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.
-
11 Marzo 2014 alle 22:10 #93159::
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.
-
12 Marzo 2014 alle 6:44 #93160::
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.
-
12 Marzo 2014 alle 9:20 #93161::
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... -
12 Marzo 2014 alle 10:17 #93162::
`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.
-
12 Marzo 2014 alle 10:33 #93163::
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
-
12 Marzo 2014 alle 16:13 #93164::
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?
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.