Pagine

sabato 21 febbraio 2009

Fncychap: titoli fantasiosi di capitoli in classe book LaTeX

Premessa

Utilizzando la classe book di LaTeX può sorgere l'esigenza di avere i titoli dei capitoli impaginati in maniera differente e magari più accattivante...

Soluzione

Una soluzione semplice è utilizzare il pacchetto fncychap.

\usepackage[style]{fncychap}


dove al posto di style si mette lo stile desiderato:
  • normale


  • Sonny,


  • Lenny,


  • Glenn,


  • Conny,


  • Rejne


  • Bjarne



Ovviamente le impostazioni per eventuali personalizzazioni sono svariate e permettono di modificare la posizione delle scritte a sinistra o destra, modificare i caratteri e molto altro ancora...

mercoledì 11 febbraio 2009

Figure affiancate in LaTeX

Premessa

Può capitare di voler affiancare due o più figure in modo che vengano viste come un unico oggetto da LaTex.
In tal caso o si genera una figura unica con un editor di immagini perdendo però la possibilità di creare delle caption per ciascuna figura o si utilizza il pacchetto subfigure.
I metodi sono diversi a seconda che si desiderino figure con lo stesso numero o con numeri diversi.

Nel primo caso va utilizzato lo stile subfigure. Ad esempio:

\begin{figure}
\centering
\subfigure[Prima figura]
{\includegraphics[width=8cm]{fig1.eps}}
\hspace{5mm}
\subfigure[Seconda figura]
{\includegraphics[width=8cm]{fig2.eps}}
\caption{Titolo delle figure}
\end{figure}

Nel secondo caso invece:

\begin{figure}
\begin{minipage}[b]{8.5cm}
\centering
\includegraphics[width=8cm]{fig1.eps}
\caption{Prima figura}
\end{minipage}
\ \hspace{2mm} \hspace{3mm} \
\begin{minipage}[b]{8.5cm}
\centering
\includegraphics[width=8cm]{fig2.eps}
\caption{Seconda figura}
\end{minipage}
\end{figure}

Gestione tabelle in LaTeX

Premessa

Le tabelle in LaTeX, come in altri sistemi di composizione testi, sono oggetti complessi da gestire. Può capitare di vederle "sparire" dal luogo in cui ci si aspetta di trovarle oppure "cambiare posizione" in modo semi arbitrario nel momento in cui si aggiunge altro testo o altre tabelle. Inoltre ci sono alcune regole di composizione che è bene tenere ben in considerazione per evitare di generare tabelle brutte a vedersi oltre che difficili da gestire.

Per creare tabelle si può usare l'ambiente tabular. Se si desidera che la tabella sia flottante è bene inserire questo ambiente tra i tag denominati \begin{table} e \end{table}.
La figura mostra un chiaro esempio di cosa non si deve fare quando si creano tabelle.

Regole di creazione tabella

Per creare una tabella è necessario tenere in considerazione alcuni punti chiave:
  • non utilizzare mai righe verticali, meno che mai doppie;
  • allineare i numeri a destra e il testo al centro o sinistra;
  • specificare eventuali unità di misura nella intestazione, mai nel corpo;
  • utilizzare, nei numeri, sempre lo stesso numero di decimali;
  • non usare mai le virgolette per ripetere il valore soprastante: ripeterlo o lasciare in bianco.

L'origine: le tabulazioni

L'ambiente tabular è nato, originariamente per creare tabulazioni:

\begin{tabular}{clr}

Pippo & bianco & 102,5 \\
Paperino & nero & 15,4 \\

\end{tabular}

Questo codice definisce un testo tabulato con tre colonne "clr" di cui:
  • c: la prima allineata al centro,
  • l: la seconda allineata a sinistra,
  • r: la terza allineata a destra
E' fondamentale ricordarsi il simbolo // al termine di ogni riga per evitare errori difficilmente diagnosticabili.
Eventualmente si può voler specificare quanto spazio deve intercorrere tra una colonna e l'altra. Per fare ciò ci viene in aiuto il comando p{distanza}. Sempre meglio esprimere tale distanza in valore relativo:

\begin{tabular}{p{.3\textwidth}r}

bianco & 102,5 \\

nero & 15,4 \\

\end{tabular}


Per inserire righe verticali si utilizzi il comando \hline.
Al posto di \hline, per migliorare la visibilità si può usare il pacchetto booktabs che ci permette di inspessire le linee o creare righe a metà:

\begin{tabular}{llr}\toprule

Pippo & bianco & 102,5 \\\cline{2-3}
Pluto & nero & 15,4 \\\midrule
Paperino & giallo & 12,4 \\\bottomrule
\end{tabular}

Particolarmente utili sono i comandi che permettono ad un testo di occupare più righe (nel caso di titoli) o più colonne (tramite il pacchetto multirow):


\begin{tabular}{lr} \toprule
\multicolumn{2}{c}{intestazione}\\ \toprule
\multirow{2}*{colore} & 102,5 \\
& 15,4 \\ \bottomrule
\end{tabular}

domenica 8 febbraio 2009

Lettere di inizio paragrafo su due linee in LaTeX

Premessa

In un documento, un effetto particolarmente accattivante è rappresentato dalla prima lettera di un paragrafo che occupa due linee come in figura:

Per ottenere questo effetto è possibile utilizzare il pacchetto lettrine.
A questo scopo, si inserisca nel preambolo il consueto:

\usepackage{lettrine}

mentre nel documento, per creare una lettera che occupi più linee (come si nota dall'esempio sottostante si possono specificare nelle opzioni) si può procedere come segue:

\lettrine[lines=2]{S}{}copo di questa appendice è...

Un piccolo problema può insorgere nel momento in cui si voglia inserire un apostrofo subito dopo la lettera come nel caso "L' ".
In questi casi si può semplicemente inserire uno spazio "negativo" tra la lettera e l'apostrofo come segue:

\lettrine[lines=2]{L\negthinspace'}{ }obiettivo

oppure:

\lettrine{L\neghtinspace'}{obiettivo della presente} dissertazione è...

sabato 7 febbraio 2009

Codice di programmazione dentro un file Latex/LyX

Premessa

Può essere necessario, lavorando con LaTeX o LyX inserire all'interno del testo del documento alcune parti nelle quali si vuole mantenere la formattazione originale senza alcun intervento del motore LaTeX.
Un classico esempio è l'inserimento di codice di programmazione dentro un documento LaTeX.
Questo può presentare spazi o tabulazioni che verrebbero ignorati oppure simboli come le parentesi graffe, per fare un esempio, che sarebbero male interpretate dal motore generando errori.

Prima soluzione

Per risolvere questo problema, in prima istanza, si può utilizzare l'ambiente verbatim.
Questo ambiente consente di inserire del codice o qualsiasi testo mantenendo la formattazione originale.
Un esempio banale può essere:

\begin{verbatim}

int i=0;
int c=0;
for(i=0;i<=33;i++){
print "Prova di valore su I": $i;
}
\end{verbatim}

In questo modo tutto ciò che sta dentro l'ambiente verbatim non viene analizzato dal motore che lo riproporrà così come lo abbiamo scritto.
Questo ambiente va benissimo in svariate occasioni ma di seguito vedremo una soluzione più accattivante.

Soluzione più elegante

Recentemente, su forum del Gruppo italiano utilizzatori LaTeX, ho scoperto l'esistenza del ambiente lstlisting che ha proprio lo scopo di permettere l'inserimento di codice dentro un documento.
Premetto che consiglio la lettura del documento per altro molto scorrevole.
Potete trovarlo cliccando qui
Il pacchetto va scaricato opportunamente ma non si ritiene questa la sede per spiegare il metodo dato che cambia a seconda della distribuzione LaTeX e dal sistema operativo.
La prima cosa da fare è aggiungere il pacchetto nel preambolo:

\usepackage{listings} %Per inserire codice
\usepackage[usenames]{color} %Per permettere la colorazione dei caratteri

A questo punto possiamo procedere come segue nel testo:

\begin{lstlisting}[caption={Programma Blink, "Hello World!"}]
CODICE PROGRAMMA...
\end{lstlisting}

Il pacchetto, però, se utilizzato semplicemente in questo modo non darebbe molto valore aggiunto se confrontato con verbatim.
Al contrario da a mio avviso tre grossi vantaggi:
  • Permette di evidenziare le parole chiave all'interno del listato
  • Permette la creazione di nuovi ambienti ad hoc
  • Permette la creazione di codice all'interno di oggetti mobili
Nel esempio che segue, creiamo grazie al pacchetto, un nuovo ambiente e nel testo si andrà ad utilizzare tutte le volte necessarie.

\lstnewenvironment{codice_arduino}[1][]
{\lstset{basicstyle=\small\ttfamily, columns=fullflexible,
keywordstyle=\color{red}\bfseries, commentstyle=\color{blue},
language=C++, basicstyle=\small,
numbers=left, numberstyle=\tiny,
stepnumber=2, numbersep=5pt, frame=shadowbox, float=*, #1}}{}

Questo codice può essere inserito nel preambolo e permette di creare un ambiente nel quale:
  • il carattere è più piccolo del resto del corpo e con carattere appartenente alla famiglia ttf \lstset{basicstyle=\small\ttfamily;
  • con le colonne allineate a sinistra e non giustificate in modo da mantenere l'allineamento del codice rispetto tabulazioni o spazi columns=fullflexible;
  • le parole chiave siano di colore rosso e grassetto keywordstyle=\color{red}\bfseries;
  • i commenti siano colore blue commentstyle=\color{blue};
  • il linguaggio sia il C++ language=C++,
  • che ci siano i numeri sulla sinistra del listato più piccoli rispetto al listato numbers=left, numberstyle=\tiny, stepnumber=2, numbersep=5pt,
  • che ci sia una cornice tutto intorno al listato frame=shadowbox,
  • che il listato sia flottante rispetto al testo float=*,
  • dove l'utente possa eventualmente specificare altre opzioni come, ad esempio, la didascalia #1
Il codice che seguirà nel testo permette di utilizzare questo nuovo ambiente che ho chiamato codice_arduino in maniera trasparente ed eventualmente posso aggiungere valori opzionali.
Segue codice esplicativo:

\begin{codice_arduino}[caption={Programma Blink, "Hello World!"}]
/* Blinking LED
* ------------
*/

int ledPin = 13; // LED connected to digital pin 13

void setup()
{
pinMode(ledPin, OUTPUT); // sets the digital pin as output
}

void loop()
{
digitalWrite(ledPin, HIGH); // sets the LED on
delay(1000); // waits for a second
digitalWrite(ledPin, LOW); // sets the LED off
delay(1000); // waits for a second
}
\end{codice_arduino}

Il risultato è il seguente: