Robitex's Blog

Ideas in the web

Archivi Categorie: AutoCAD

Impaginare un album di foto con LaTeX


La sfida

Ieri un collega mi ha chiesto come realizzare un album fotografico includendo circa 200 immagini nel formato jpeg, con quattro foto per pagina ciascuna con la propria didascalia di numerazione.

Il problema è interessante perché occorre scegliere gli strumenti informatici più idonei e sperimentare ottimizzazioni nel caso in cui servisse spesso elaborare documenti simili.

Gli strumenti

Abbiamo scartato quasi subito di lavorare con un word processor, sia perché volevamo una soluzione automatica, sia perché avevamo dubbi sulle capacità di gestire file di grandi dimensioni da parte di questo tipo di programmi.
Di conseguenza abbiamo escluso anche la soluzione con AutoCAD con l’impiego dello spazio carta. Avremo dovuto infatti inserire riferimenti raster e didascalie in modo troppo complicato e manuale.

Rimaneva di addomesticare la questione con LaTeX…

La battaglia ha inizio

Per prima cosa abbiamo copiato in una directory locale le foto, i cui file apparivano nominati sequenzialmente nel formato “DSC_0000”, come si può notare nell’immagine sottostante.

La directory delle foto aperta in Explorer

In un foglio di calcolo (OpenOffice.org Calc), grazie alla facilità con cui è possibile generare le serie (ricopia in basso), ho riempito una colonna dei numeri da 1 a 176. A fianco della prima cella ho inserito la seguente formula (anch’essa ricopiata in basso) che genera una stringa che rappresenta il nome del file nel formato richiesto, dato come argomento di una macro chiamata \foto (il foglio di calcolo avrebbe generato con poca fatica automaticamente e direttamente il corpo del sorgente LaTeX):

=CONCATENA("\foto{DSC_";TESTO(A1;"0000");"}")

Se la cella A1 contenesse il valore 122, la formula fornirebbe la stringa “\foto{DSC_0122}”. La funzione CONCATENA non fa altro che restituire un unica stringa a partire dai vari argomenti stringa separati da un punto e virgola, mentre la funzione TESTO trasforma un numero in una stringa nel formato specificato (in questo caso le quattro cifre fisse con zeri di riempimento).

A questo punto ho cancellato una serie di righe corrispondenti a foto che non avrebbero dovuto essere incluse perché non significative poi ho copiato l’area della seconda colonna e l’ho direttamente incollata nell’editor di testo, che a questo punto mostrava un sorgente di questo tipo:

\documentclass[a4paper,11pt,landscape]{report}
\usepackage{calc}
\usepackage{graphicx}
\usepackage[top=60pt,bottom=20pt,right=30pt,left=30pt]{geometry}

\pagestyle{empty}

\begin{document}
\centering
\twocolumn

\foto{DSC_0001}
\foto{DSC_0002}
\foto{DSC_0003}
\foto{DSC_0004}
\foto{DSC_0005}
\foto{DSC_0006}
% ecc ecc
\end{document}

Non rimaneva che dare la giusta definizione della macro \foto, che molto semplicemente prende l’argomento come il nome del file jpg da includere e come testo didascalico da posizionare al di sotto della foto:

\newcommand{\foto}[1]{%
\includegraphics[width=\columnwidth-60pt]{#1}

Foto #1\bigskip

}

Evoluzione della specie

Notando che la compilazione del sorgente richiedeva un tempo abbastanza lungo abbiamo inserito dopo le prime quattro foto il comando \end{document} lasciando inalterato il resto del documento. Ridotto in questo modo il documento ad una sola pagina, è stato rapidissimo settare per tentativi i giusti parametri dimensionali dei margini di pagina e la larghezza delle foto, per tornare poi all’inclusione totale cancellando il comando di chisura dell’ambiente document (il motore tipografico di LaTeX ignora qualsiasi cosa compaia dopo \end{document}).

Ottenuto il pdf finale, abbiamo provveduto a spedire il file alla stampante, ben contenta di ridestarsi dal suo torpore, ma come sempre se si tratta di linguaggio, ulteriori sviluppi del codice ci attendevano, e pure a lavoro finito.

La domanda è: e se avessimo voluto una didascalia con il semplice numero della foto e non il nome del file?

La risposta è: ridefinendo il comando \foto per esempio impostando la macro per ricevere il numero della foto da cui ricostruire il nome del file:

Per prima cosa definiamo un contatore ed una macro che imposta una seconda macro con il prefisso del nome dei file. Nel nostro caso imposteremo “DSC_”, così da poter gestire diversi valori assegnati di solito dal software della macchina fotografica digitale.

Aggiungiamo poi una serie di \if annidati per produrre il formato a quattro cifre a partire dal numero della file:

\newcount\filenum
\newcommand{\fileprefix}[1]{\def\myfileprefix{#1}}

\newcommand{\foto}[1]{%
\filenum=#1

\ifnum\filenum<10
  \def\myfilenumber{000\number\filenum}
\else
  \ifnum\filenum<100
    \def\myfilenumber{00\number\filenum}
  \else
     \ifnum\filenum<1000
        \def\myfilenumber{0\number\filenum}
     \fi
  \fi
\fi

\includegraphics[width=\columnwidth-60pt]{\myfileprefix\myfilenumber}

Foto n. #1\bigskip

}

Il corpo del sorgente si modificherà in:

\begin{document}
\centering
\twocolumn

% settaggio del prefisso del nome file:
\fileprefix{DSC_}

% inclusione delle foto
\foto{1}
\foto{2}
\foto{3}
\foto{4}
\foto{5}
\foto{6}
% ecc ecc
\end{document}

La domanda è: perché passare da un foglio di calcolo per generare il codice?

La risposta è: giusta osservazione, basta indicare solo il primo e l’ultimo numero della foto e LaTeX farà il resto:

A livello d’implementazione del nuovo comando \foto, occorre inserire un ciclo che, per ogni numero nell’intervallo specificato, inserisca la foto. Dal punto di vista sintattico invece, prevediamo di definire l’intervallo specificandone gli estremi all’interno di parentesi tonde e separati dal simbolo -> (utilizzeremo quindi la tecnica degli argomenti delimitati di TeX).

Ecco il listato del sorgente completo (abbiamo inserito macro con il carattere @ nel nome per renderle private):

\documentclass[a4paper,11pt,landscape]{report}
\usepackage{calc}
\usepackage{graphicx}
\usepackage[top=60pt,bottom=20pt,right=30pt,left=30pt]{geometry}

\makeatletter
\newcount\foto@numi
\newcount\foto@numf

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

\def\insert@foto{%
\ifnum\foto@numi<10
  \def\file@num{000\number\foto@numi}
\else
  \ifnum\foto@numi<100
    \def\file@num{00\number\foto@numi}
  \else
     \ifnum\foto@numi<1000
        \def\file@num{0\number\foto@numi}
     \fi
  \fi
\fi

\includegraphics[width=\columnwidth-60pt]{\file@prefix\file@num}

Foto n. #1\bigskip
\advance\foto@numi by 1
}

\def\foto(#1->#2){%
   \foto@numi=#1
   \foto@numf=#2
   \advance\foto@numf by 1
   \loop
   \insert@foto
   \ifnum\foto@numi<\foto@numf
   \repeat
}
\makeatother

\pagestyle{empty}

\begin{document}
\centering
\twocolumn

\fileprefix{DSC_}
\foto(1->35)
\foto(38->48)
\foto(50->81)
\foto(83->122)
\foto(124->148)
\foto(152->157)
\foto(163->176)
\end{document}

Si può fare ancora di più, prevedendo una sintassi per l’esclusione di paricolari foto. Un solo comando che la implementasse basterebbe per definire l’intero album di foto!
Nel nostro caso potrebbe essere questo:

\foto{1->176 except 36,37,49,82,123,149->151,158->162}

Conclusioni

Il collega non aveva mai prima d’ora visto all’opera LaTeX. Forse è utile riflettere sulle impressioni di un assolutamente nuovo utente. Riporto solo una frase: “voglio imparare questo sistema!!” ha detto, e speriamo che l’ho faccia veramente.

Per quanto riguarda invece il giudizio sull’efficienza e l’efficacia con cui è stato possibile risolvere il problema dell’album fotografico con LaTeX, la mia opinione come vi immaginerete è molto positiva: precisione del posizionamento delle foto, facilità di regolazione dei parametri e separazione tra file jpeg e sorgente, solo benefici specifici di questo motore tipografico asincrono. Rimango in attesa della vostra opinione se vorrete affrontare lo stesso problema confrontando diversi strumenti software.

Alla prossima. Ciao.

Annunci

Simmetria e spazio carta


Villette a schiera in AutoCAD

Ammettiamo che vi stiate occupando del disegno di una struttura simmetrica (semplice o multipla), come per esempio una villetta bifamigliare.

In teoria basta disegnare la metà dell’oggetto per definire tutto l’insieme, ma è necessario fornire disegni completi pertanto daremo un bel comando mirror per specchiare sull’asse di simmetria la parte opposta.

La soluzione va benissimo ma comporta un problema: in caso di modifiche occorre procedere di nuovo alla specchiatura, cosa che può essere piuttosto noiosa specie se sono richieste modifiche frequenti e se magari gli oggetti simmetrici si ripetono.

Nel nosto caso di riferimento, la pianta è composta da una parte sinistra ‘A’ ed una parte destra simmetrica ‘B’. Il disegno finale avrà schema AB. Se invece ci sono ripetizioni tipo ABABAB, allora gestire il disegno può diventare scomodo.

Soluzione spazio carta

Sappiamo come fare a risolvere con lo spazio carta quetso problema? Certo basta seguire questa semplice procedura che porterà il disegno nello spazio modello da così:

Model Space symetric object

Model Space symmetric object

a così nello spazio carta.

Final result in paper space

Final result in paper space

La procedura

Premessa: parleremo del caso con simmetria rispetto ad un asse parallelo ad Y con una versione 2004 di AutoCAD (segnalatemi eventuali problemi con le versioni più recenti).
Disegnamo nello spazio modello solamente la porzione A come per esempio quello della figura sopra e passiamo ad un layout dello spazio carta.
Creiamo una viewport che rappresenti nella scala voluta la parte A, e facciamone una copia accanto. Abbiamo adesso due viewport che rappresentano la stessa parte A.

Accediamo al menù Visualizza->Vista con nome… per attivare il dialogo corrispondente. Scegliamo come vista corrente “Basso” e premiamo il pulsante accanto “Imposta corrente”. Adesso diamo l’OK ed alla chiusura del dialogo selezioniamo la viewport di destra.

AutoCAD view dialog

AutoCAD view dialog

Non ci rimane che risettare i parametri della viewport specchio come scala ed inquadramento, e spostarla in modo da far corrispondere le due parti A e B.
Se volete potete cambiare colore al bordo della viewport per individuare meglio quella della parte destra da quella sinistra.

Difetti

Naturalmente una singola modifica nel modello si ripeterà allo stesso modo in tutte le altre porzioni del disegno che siano traslate o simmetriche alla porzione base.
Il risultato è ottimo, ma per la mia esperienza gestire in questo modo la simmetria comporta comunque degli svantaggi.

Il principale è senz’altro quello dovuto all’aumentata complessità dei layout, consiglio quindi di applicare il metodo comunque per un vostro disegno in modo che possiate valutarne l’efficienza.

Un secondo svantaggio è che non è possibile quotare in modo associativo nello spazio carta per i punti di quota appartenenti a diverse viewport, e quindi si perde il vantaggio eventuale di utilizzare un solo stile di quota per tutti gli oggetti dei layout (come vi segnalavo in questo post).

Dimenticavo…

Se l’asse di simmetria non è parallelo all’asse Y, potete sempre inserire il vostro disegno come un xrif ruotato in un altro, dove comporre i layout.
Scaricate pure il PDF di esempio, pesa solo 10 KB cliccando quì Drawing test in pdf format o sull’immagine seguente:

Pdf Example drawiong test

Pdf Example drawing test

Bye.

Disegni AutoCAD nel formato PDF passando per Postscript


Vi descrivo la procedura classica per ottenere un disegno AutoCAD nel formato PDF. Probabilmente state pensando che una guida del genere sia inutile o perché la vostra versione di AutoCAD esporta nativamente in PDF, oppure perché già lo fate con un driver PDF di stampante virtuale tipo CutePDF. Allora fine del discorso.

Niente affatto. Per ottenere un buon PDF di una tavola di stampa dello spazio carta è possibile ricorrere ad un formato di tutto rispetto: Postscript, e rimediare ai difettucci del driver utilizzato finora o semplicemente alla non disponibilità di una versione recente di AutoCAD (la politica degli aggiornamenti di Autodesk non è molto favorevole ai piccoli utenti, piccoli nel senso di dimensioni dello studio non certo in relazione alla professionalità).

Passo 1 – Installare un plotter virtuale Postscript

Per AutoCAD LT 2004 la procedura è qui descritta:

  1. avviare la wizard Strumenti > Autocomposizioni > Aggiungi plotter
  2. scegliere “Questo computer” e click su Avanti >
  3. tra i driver del produttore “Adobe” selezionare “PostScript Level 2”
  4. click su Avanti > ed ancora Avanti >
  5. scegliere il radio button “Stampa su file” e click su Avanti >
  6. scegliere un nome (“PostScript Level 2” va benissimo) ed Avanti >
  7. click su Fine >

Passo 2 – Configurare il plotter

Edit Plotter Configuration Dialog

Edit Plotter Configuration Dialog

Attivare il dialogo (che vedete nell’immagine sopra) “Editor di configurazione…” (da AutoCAD File -> Gestione Plotter… , doppio click sull’icona del plotter appena installato dal nome “PostScript Level 2.pc3” tra quelle della finestra di Explorer).
Nella terza scheda “Impostazioni dispositivi e documenti” aprire la struttura ad albero Grafica -> Grafica Vettoriale ed aumentare la risoluzione da 300 x 300dpi (default) a 1270 x 1270 dpi (o superiore se preferite).
Poi Proprietà Personalizzate -> click sul bottone <Personalizza Proprietà…> , disabilitate l’opzione “Includi anteprima WMF”. OK.

Passo 3 – Stampare con il nuovo plotter Postscript

A questo punto create delle stampe da spazio modello o meglio da spazio carta utilizzando il plotter “PostScript Level 2.pc3”. Naturalmente non vi dimenticate di consultare il libro di un certo Autore Lo Spazio Carta di AutoCAD per moltiplicare giusto un po’ la produttività del disegno (si certo lo spazio carta migliora l’organizzazione del disegno razionalizzandolo oltre che migliorare la qualità delle stampe).

A questo punto dovreste aver creato il file nel formato Encapsulated PostScript in una qualche cartella diciamo mydir.

Passo 4 – Produrre il PDF

Per trasformate il file risultante dal formato eps al formato PDF basta lanciare l’utility ps2pdf da riga di comando. Questa utility è compresa con il programma Ghostscript, installatelo se non l’avete, sempre l’ultima versione disponibile naturalmente.

  1. Pulsante Start > Esegui…
  2. nella casella di testo digitare cmd e quindi dare un invio
  3. nella finestra di comando che si è avviata spostarsi nella directory mydir con il comando >cd pathtomydir\mydir (naturalmente pathtomydir è il percorso della cartella)
  4. dare il comando >ps2pdf -sPAPERSIZE#a0 nomedisegno.eps (se il formato originale del disegno è A4 non occorre specificare l’opzione -sPAPERSIZE, diversamente cambiatela in a1, a2, ecc con la a minuscola mi raccomando, mentre se il nome del disegno contiene caratteri spazio racchiudetelo tra doppi apici “”).

Benissimo. Il disegno PDF è pronto, ma se vogliamo proprio ricercare la finezza possiamo scontornarlo. Certo, un disegno PDF con i margini perfetti sul rettangolo di squadratura.

Per farlo rivolgiamoci allo script Perl pdfcrop di Heiko Oberdiek. Per installarlo sul sistema la via più semplice è quella di installare TeX Live 2008 o la 2009 quando sarà rilasciata. Così facendo vi ritrovate sul sistema bella pronta anche Ghostscript, un visualizzatore Postscript, con tanto di percorsi agli eseguibili già settati (con TeX Live potrete così sperimentare anche LaTeX).

Detto questo, il comando da dare alla riga di comando è:

>pdfcrop -margins=10 nomedisegno.pdf

Fatto. Non mi rimane che augurarvi (anche se siamo ad Agosto) Buon Lavoro!!!

AutoCAD: quotare nello Spazio Carta


Quotatura nello spazio carta di AutoCAD

L’immagine sopra contiene in effetti una contraddizione sapendo che le due quote appartengono allo stesso stile ed hanno pari lunghezza.

La lunghezza misurata dalle due quote è diversa!

Il motivo è che la quota più in alto è stata costruita con snap ad oggetti appartenenenti ad una viewport, mentre quella più in basso è stata ottenuta con l’immissione diretta della distanza di 36,75 mm.

Dunque il fatto interessante è che una quota tra punti di una viewport riporta un testo di misura a cui è applicato il fattore di scala della viewport stessa (nell’esempio della figura il fattore di scala è proprio 10).
Questo fatto è un punto a favore della quotatura nello spazio carta rispetto a quella nello spazio modello, poiché nello spazio carta è sufficiente UN SOLO stile di quota per TUTTE le differenti scale. Fantastico vero?

Per saperne di più sullo Spazio Carta è disponibile un libro (di cui sono l’autore orgoglioso) dal titolo Lo Spazio Carta di AutoCAD disponibile sia in formato cartaceo che digitale. Buon lavoro!

La copertina del libro

%d blogger hanno fatto clic su Mi Piace per questo: