- Questo topic ha 6 risposte, 3 partecipanti ed è stato aggiornato l'ultima volta 11 anni, 4 mesi fa da .
-
Topic
-
Salve a tutti amici del forum. Dopo un lunghissimo periodo di assenza sono tornato (capirai che ve po’ fregà) anche se non ho mai smesso di essere lettore e frequentatore del forum, ma veniamo al sodo.Il problema è il seguente che più che risolvere, in quanto una soluzione “pezzotta” sono riuscito a trovarla già, vorrei implementare e migliorare con i vostri utilissimi commenti al fine di farci magari un bell’articolo sul mio blog. L’esigenza nasce dal fatto che ho trovato poco in rete ed anche su stackexchange le soluzioni proposte sono, a mio avviso, disumane per un utente normale: troppo complesse per me.
Un caro amico economista che lavora con STATA si è trovato di fronte alla esigenza di dover esportare da quest’ultimo diversi dati, sotto forma di file .tex contente ciascuno una grossa tabella.
Il punto è che ogni file che contiene la tabella, è un file con un preambolo necessario e sufficiente ad rendere pronto il file per essere compilato. Il mio amico mi ha chiesto “siccome i modelli sono tanti, ognuno dei quali con variazioni, io voglio poter esportare tutti gli output di ogni singolo modello e poi avere un master file che compilato mi restituisca un grosso PDF contenente tutte le tabelle”
Al di là di discussioni tipografiche o sulla natura del codice LaTeX prodotto in automatico da software, questa esigenza, sopratutto nella fase iniziale in cui un modello viene stimato ed adattato un sacco di volte, è molto sentita ed in effetti mi sono messo di impegno per cercare di risolvere.
Prendendo spunto un po’ in rete ho fatto questo pastrocchio di codice che però pare funzionare.
`
\documentclass{article}
\usepackage{pgffor}
\usepackage{standalone}\begin{document}
prova:
\foreach \i in {1, 2, …,1999} {%
\edef\FileName{file\i}%
\IfFileExists{\FileName}{%
\input{\FileName}%
} }\end{document}
`
Dove all’interno della stessa cartella devono esserci n file .tex denominati filen con n che va da 1 a 1999. Ovviamente se ce ne sono solo due con n = {1,2} il programma compila solo questi. (non si badi alle tabelle che vengono tagliate, questo penso sia facile da risolvere)
Ho usato il pacchetto standalone per bypassare il preambolo del generico file ennesimo ed il pacchetto pgffor per abilitare la macro foreach.
Successivamente il mio amico sulla base di questo codice ha prodotto il seguente:
`
\documentclass[]{article}
\setlength{\pdfpagewidth}{8.5in} \setlength{\pdfpageheight}{11in} % Adatto pagina alla tabella (comando prodotto da STATA)
\usepackage{rotating} % Pacchetto per ruotare le pagine
\usepackage{pgffor} % Attiva la macro ” \foreach ”
\usepackage{standalone} % Esclude il preambolo dei sotto-file che richiamo con “input”\begin{document}
% Scrivere il nome delle Variabili Dipendenti ATTENZIONE ALLA SINTASSI!!!
\newcommand{\TypeFE}{StateFE} % Scegliere: “StateFE” oppure “CountyFE”\newcommand{\TypeModel}{LRM} % Scegliere: “LRM” oppure “Poisson” oppure “NegBin”
\foreach \i in {MURDER, RAPE, AGASSLT, ROBBERY, BURGLRY, LARCENY, MVTHEFT} {%
\edef\FileName{Tab\TypeModel_\TypeFE_\i} % The here are necessary to eliminate any
\IfFileExists{\FileName}{ % spurious spaces that may get inserted
\begin{sidewaystable} % Prima di introdurre la tabella, ruoto il foglio
\input{\FileName}
\end{sidewaystable}
} }\end{document}
`
Dove il nome di un generico file da includere anziché file01, file02 eccetera è dato da ” TabLRM_StateFE_BURGLRY.tex ” perché per riconoscere tutti gli output in effetti può essere più comodo e sopratutto per rinominare il modello in base al reato (in questo caso BURGLRY) eccetera.
Ovviamente il generico (o i generici) file da includere potrebbero essere come quelli prodotti da STATA e cioè complesse tabelle, ma anche un semplice:
`
\documentclass{minmal}
begin{document}
Prova di \LaTeX.
\end{document}
`A questo punto vorrei le vostre opinioni. Alcune cose non mi sono chiare. Ad esempio l’uso che il mio amico ha fatto del comando \newcommand{\TypeFE}{StateFE} ad esempio è banale e di fatto il loop gira e produce l’output ma non so se è una trovata geniale del mio amico o semplicemente perché non aveva idea di cosa sia un \newcommand 😀 non che io sia Leslie Lamport però non avrei mai pensato di usarlo in quel modo, non mi pare corretto come codice anche se a funzionare funziona perché così facendo, con queste apposite macro, all’interno del loop i nomi dei file da comporre vengono “costruiti” secondo le convenzioni volute dal mio amico e da esso usate in STATA per nominare i modelli.
Opinioni, consigli, problemi dubbi.
Grazie.
- Devi essere connesso per rispondere a questo topic.