Robitex's Blog

Ideas in the web

Archivi delle etichette: LaTeX

TeXStudio: inserire la data corrente


Perché data e ora?

Una delle cose che mi mancavano in TeXStudio era la possibilità d’inserire nel sorgente LaTeX la data e l’ora corrente con una semplice combinazione di tasti. Questa funzionalità mi permette di tracciare molto semplicemente l’evoluzione temporale del documento e di misurare il tempo che ho impiegato per scriverne una data porzione.

Infatti, in un sorgente LaTeX è possibile inserire dei commenti tramite il carattere di percentuale: tutto quello che vi compare dopo verrà ignorato dal compositore tipografico in fase di compilazione.

Una stringa di timestamp potrebbe per esempio essere:

% 12/06/2015 :: 11:35:32 ::

Come vedete il timestamp è preceduto dal carattere di commento del simbolo percentuale seguito dalla data e dall’ora. Sarebbe un tantino noioso inserirlo a mano digitandolo da tastiera nella finestra dell’editor per di più quando il tempo stringe e la relazione va consegnata 🙂

Per chi non ha mai sentito il termine LaTeX, ho l’onere di provocare io questo evento e di indirizzarvi naturalmente al sito del TeX User Group nazionale — il GuIT — per trarne ulteriori informazioni.

Scripting in TeXStudio

Pur preferendo l’essenzialità di uno shell editor per LaTeX come TeXWorks, ultimamente ho cominciato a usare TeXStudio per le sue numerosissime feature. Tra queste vi è la possibilità di associare una combinazione di tasti all’esecuzione di uno script in Javascript come recita il manuale.

Questo post vi spiega come realizzarlo.

Al lavoro con le macro in Javascript

Innanzi tutto si apre la finestra di modifica delle macro che vedete qui sotto (da menù: Macro -> Modifica macro):

TeXStudio macro window

TeXStudio macro window

Si preme il tasto + per inserirne una nuova e dopo averne specificato il nome basta scrivere il codice nella rispettiva finestra inserendo obbligatoriamente nella prima riga il testo “%SCRIPT”. Questa chiave farà in modo che TeXStudio interpreti il codice seguente come codice Javascript.

Per inserire testo possiamo avvalerci del metodo insertText() dell’oggetto editor. Facciamo una prova con questo primo script:

%SCRIPT

editor.insertText("% testo inserito via macro :-)")

Adesso, tornati alla finestra principale di TeXStudio possiamo eseguire lo script con la combinazione di tasti “Shift + F1” se abbiamo inserito la macro nella posizione 1. Aprendo il menù macro dovremo vedere tra le voci quella nuova di prova con l’indicazione della combinazione di tasti associata.

A questo punto è solo questione di trovare le funzioni Javascript per la data: Date() e di fare un po’ di prove con i metodi dell’oggetto. Ovviamente non è mia intenzione approfondire il linguaggio Javascript ma solo scrivere il codice per l’inserimento automatico del timestamp secondo un formato personalizzato mostrato precedentemente.
Prima di mostrarvi il codice completo vi saluto.
R.

%SCRIPT
var dt = new Date()
var y = dt.getFullYear()
var m = dt.getMonth() + 1
if (m < 10) { m = "0" + m}

var d = dt.getDate()
var s1 = "% " + d + "/" + m + "/" + y

var hour = dt.getHours()
var min = dt.getMinutes()
if (min<10) {min = "0"+min}
var sec = dt.getSeconds()
if (sec<10) {sec = "0" + sec}
var s2 = " :: " + hour + ":" + min + ":" + sec

editor.insertText(s1 + s2 + " :: ")

Roma: GuITmeeting 2013


Il luogo del convegno

Ciao a tutti,
tra pochi giorni si terrà a Roma il decimo convegno nazionale del GuIT.

Partecipate numerosi correndo ad iscrivervi perchè l’evento è un’ottima occasione per saperne di più sul sistema TeX ed è libero e gratuito.

Si parlerà dunque di un software libero sviluppato da oltre trent’anni in grado di produrre ottima documentazione sia per qualità tipografica che per una modalità di lavoro e gestione dei dati.

Il convegno è un momento importante nell’attività del GuIT, il TeX User Group italiano ufficiale che ha come missione quella di diffondere l’uso di TeX nel nostro paese, per conoscere, apprezzare e parlare nel clima di amicizia e condivisione 🙂 .

Arrivederci a Roma!
R.

Differenza di orari in TeX


Ciao,
in questo assolato e caldo meriggio d’estate, vi presento problema e soluzione di un caso particolare che forse a questo punto vi incuriosirà.

Differenza di orari

Dovendo compilare un report, non potevo certo non farlo con LaTeX ed allora mi son trovato il problema di calcolare diverse differenze orarie. Per esempio tra le 10:25 e le 11:40 sono trascorse un’ora e quindici minuti, alias 1:15.

Torna comodo scrivere una macro con argomenti delimitati — visto come sono TeXnico? — che calcoli i minuti trascorsi dalla mezzanotte per ciascun orario, esegua la differenza e riconverta il risultato nel formato ore:minuti.

Ecco il codice da compilare con pdflatex ovviamente:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

% contatori di minuti
\newcount\mi
\newcount\mii

% determina la differenza oraria
\def\timediff(#1:#2-#3:#4){%
% mii contiene i minuti dell'orario di uscita
\mii=#3
\multiply\mii by 60
\advance\mii by #4
% mi contiene i minuti dell'orario di entrata
\mi=#1
\multiply\mi by 60
\advance\mi by #2
% mii contiene il numero dei minuti effettuati
\advance\mii by -\mi
\mi=\mii
\divide\mii by 60
\the\mii:%
\multiply\mii by 60
\advance\mi by -\mii
\ifnum\mi<10
    0%
\fi
\the\mi
}

\begin{document}
Tra le 14:35 e le 18:38 abbiamo: \timediff(14:35-18:38).
\end{document}

Se poi devo arrotondare alla mezz’ora per difetto?

Tranquilli, niente panico (cit.), è sufficiente

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

% contatori di minuti
\newcount\mi
\newcount\mii

% determina la differenza oraria
% con l'arrotandamento alla mezz'ora
% per difetto
\def\timediff(#1:#2-#3:#4){%
% mii contiene i minuti dell'orario di uscita
\mii=#3
\multiply\mii by 60
\advance\mii by #4
% mi contiene i minuti dell'orario di entrata
\mi=#1
\multiply\mi by 60
\advance\mi by #2
%% mii contiene il numero dei minuti effettuati
\advance\mii by -\mi 
%% mii contiene il numero delle mezz'ore
\divide\mii by 30 
%
\ifodd\mii
    \mi=3
\else
    \mi=0
\fi
%% mii contiene il numero delle ore
\divide\mii by 2
\the\mii:\the\mi 0%
}

\begin{document}
Tra le 14:35 e le 18:38 abbiamo: \timediff(14:35-18:38).
\end{document}

Una volta tanto finisco prima — non vi farò l’esempio della soluzione equivalente in LaTeX3 od in LuaTeX, questo passa il convento e dovrete accontentarvi.
Ok, allora a voi la parola con un classico…
Alla prossima.
R.

Opuscoli e booklet


Sommario

Utilizzeremo il sistema TeX per comporre documenti in formato A4 su libretti in formato A3.

Capita…

Capita di dover stampare fronte retro dei documenti ripiegando i fogli in un libretto. Chiameremo questa modalità booklet oppure opuscolo.
L’esempio è il seguente: abbiamo a disposizione un documento di quattro pagine nel formato A4 e vorremo comporlo nel formato A3 fronte retro in modo che il foglio A3 ripiegato formi l’opuscolo, come in questa raprresentazione:

Fronte:
+-----++-----+
|  4  ||  1  |
|     ||     |
+-----++-----+

retro:
+-----++-----+
|  2  ||  3  |
|     ||     |
+-----++-----+

La soluzione con LaTeX

Quella che vi propongo è una soluzione che ha il pregio di rappresentare un esempio che può essere applicato a casi anche molto più complicati di quello in esame, e consiste nel salvare un file di testo puro nella stessa cartella contenente il file che chiameremo docA4.pdf con le quattro pagine, con il seguente contenuto:

\documentclass{minimal}
\usepackage[a3paper,landscape]{geometry}
\usepackage{pdfpages}

\begin{document}
\includepdf[pages={4,1,2,3},nup=2x1]{docA4}
\end{document}

Compilando questo file (dategli l’estensione .tex) quello che succede è questo:

  1. viene impostato il formato di pagina A3 orizzontale;
  2. viene caricato il pacchetto pdfpages che definisce il comando \includepdf;
  3. e poi si inseriscono nel documento una alla volta e nella sequenza corretta, le pagine del documento in A4.

Il comando \includepdf offre molte altre opzioni: consultate la documentazione del pacchetto per scoprirle.

Un documento di esempio

Volendo, possiamo produrre sempre con LaTeX un documento da utilizzare per verificare che il codice precedente funziona. Basta compilare questo codice più complicato del precedente perché fa uso di un po’ di programmazione della nuova libreria LaTeX3, in modo da poter generare documenti demo di qualsiasi lunghezza (basta cambiare l’argomento del comando \demodoc):

\documentclass{minimal}
\usepackage[a4paper]{geometry}
\usepackage{graphicx}
\usepackage{xparse}

%%% codice LaTeX3
\ExplSyntaxOn
\NewDocumentCommand{ \demodoc }{ m }
   {
   \demodoc_repeat:n { #1 }
   }

\cs_new_protected:Nn \demodoc_repeat:n
   {
   \int_step_inline:nnnn { 1 }{ 1 }{ #1 }
      { \centering
        \scalebox{12}{##1}
        \newpage
      }
   }
\ExplSyntaxOff

\begin{document}
\demodoc{4}
\end{document}

Ecco pronto da scaricare il file risultato docA4.pdf.

Note tecniche

Per avvalersi delle magie compositive di pdfpages per la costruzione di opuscoli, occorre installare sul vostro computer una distribuzione TeX – che fa sempre comodo e non costa nulla – ed io vi consiglio spassionatamente TeX Live disponibile per praticamente tutti i sistemi operativi.

Ciao a tutti!

Napoli: tutto pronto per il GuITmeeting


GuITmeeting2012

Tra pochissimi giorni, Sabato 27 ottobre 2012 si terrà a Napoli il GuITmeeting 2012, uno dei più importanti tra i meeting organizzati dal GuIT, Gruppo utilizzatori italiani di TeX, che per la prima volta non si svolgerà nell’aula magna della scuola Sant’Anna di Pisa, ma nell’altrettanto prestigiosa sala del Centro congressi Partenope dell’Università degli Studi di Napoli Federico II.

Anch’io parteciperò molto volentieri essendo perfino riuscito a presentare un lavoro di cui vi posso dire solo il titolo: “La grafica ad oggetti con LuaTeX”.

Non mancate sarà una bellissima occasione

Qualsiasi cosa stiate facendo, collegatevi subito con il sito del GuIT alla pagina del modulo d’iscrizione 🙂 !
Grazie, ci vediamo a Napoli!

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