Cos'è LaTex
LaTeX (pronunciato "latek") è un linguaggio di markup che si usa per scrivere testi secondo la logica di composizione tipografica TEX. Viene usato principalmente in ambiti matematici, ingegnerisitici, sociologici e soprattutto universitari (di solito molte tesi di laurea e pubblicazioni scientifici sono scritte con LaTex). LaTeX nasce nel 1985, come principale metodo di utilizzo del programma di composizione tipografica TeX. Tramite l'utilizzo della classe Beamer, LaTeX oltre ai documenti stampabili può produrre delle presentazioni con la stessa grafica \[1\].
Uno dei punti di forza di LaTeX, tra quelli che ne ha giustificato l'ampia diffusione nel mondo accademico, è l'ottima gestione dell'impaginazione delle formule matematiche nonche' la capacità di trattare al meglio i riferimenti bibliografici, tramite il progetto gemello BibTeX. LaTeX è software libero e ne esistono versioni per tutti i sistemi operativi.
LaTeX è un sistema per scrivere documenti di alta qualità ma non è un Word Processor! Esso richiede infatti una certa competenza e sul linguaggio sono stati pubblicati svariati libri, anche piuttosto corposi. Ma lo scopo di questo articolo non è affrontare LaTeX in quanto linguaggio, quanto quello di presentare solo alcuni script che ci saranno utili al fine di programmare con JLatexMath, una libreria Java per scrivere formule matematiche (e non solo) in LaTeX.
L'ambiente di programmazione
Andiamo sul sito internet di JLatexMath \[2\] e dall'area del download scarichiamo il file jlatexmath-fop-0.9.6.jar.
Inoltre dobbiamo copiare la classe Converter, che ci sarà utile per trasformare il codice TeX in PDF. Per prelevare questa classe ed inserirla nel nostro progetto java scaricare anche il file con i sorgenti, jlatexmath-src-0.9.6.zip, aprirlo e copiare Convert.java, build.xml e conf.xml nel nostro Classpath.
Dopodiche', dal sito Apache FOP \[3\] scarichiamo il file fop-1.0-bin.zip e, dopo averlo aperto, copiamo nella cartella del nostro progetto java i file .jar che si trovano nella cartella lib e il file fop.jar che si trova nella cartella build. Configuriamo bene il nostro classpath aggiungendo tutti i file jar e così saremo operativi.
Il nostro primo programma Latex: una serie di esempi
Ora che abbiamo preparato il nostro ambiente di lavoro, siamo pronti per scrivere il nostro primo programma Java\Latex. Presenteremo una serie di semplici esempi con il codice necessario e il risultato grafico ottenuto
Ciao Mondo!
Scriveremo il classico "Ciao Mondo" in formato TeX attraverso l'istruzione \text. Il risultato sarà salvato sottoforma di immagine png.
Ed ecco il codice:
public class Latex {
private static String latex;
public static void main(String\[\] args) {
/\* Istruzione text di latex \*/
latex ="\\text{Ciao Mondo}\\\\";
TeXFormula formula = new TeXFormula(latex);
TeXIcon icon = formula.createTeXIcon(TeXConstants.STYLE_DISPLAY, 20);
icon.setInsets(new Insets(5, 5, 5, 5));
BufferedImage image = new BufferedImage(icon.getIconWidth(),\
icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = image.createGraphics();
g2.setColor(Color.white);
g2.fillRect(0,0,icon.getIconWidth(),icon.getIconHeight());
JLabel jl = new JLabel();
jl.setForeground(new Color(0, 0, 0));
icon.paintIcon(jl, g2, 0, 0);
File file = new File("codice_tex.png");
/* salvo il risultato in una immagine png */
try {
ImageIO.write(image, "png", file.getAbsoluteFile());
} catch (IOException ex) { }
}
}
Da notare che il comando TeX di \\text{Ciao Mondo}\\\\; è \text{Ciao Mondo}\\, dove in Java il carattere backslash ( \ ) per essere valido in quanto tale in una stringa deve essere raddoppiato e il doppio backslash ( \\ ) in TeX significa andare a capo.
Matrice
Per scrivere una matrice in TeX, innanzi tutto bisogna usare il comando \begin{pmatrix}. Ogni elemento all'interno della matrice deve essere intervallato da una & e ogni riga deve finire con \\. Infine la matrice viene chiusa dal tag \end{pmatrix}.
Quindi ricapitolando la struttura per scrivere una matrice è la seguente:
\begin{pmatrix}e1n &e2n &..emn\\ em1 ... \\ ....\\enm......\end{pmatrix}
/***** MATRICE *****/
latex = "\\begin{pmatrix}a&b\\\\c&d\\end{pmatrix}";
Determinante
Simile è il codice per comporre il determinante di una matrice. Questa volta anteponiamo al comando begin, il comando det e stavolta l'attributo del begin sarà bmatrix.
Notare che per mettere dei numeri a pedice si usa il comando _{} dove nelle parentesi sono racchiusi i valordi pedice.
/***** DETERMINANTE *****/
latex = "\\det\\begin{bmatrix}a_{11}&a_{12}\\\\a_{21}&a_{22}\\end{bmatrix}";
Lettere greche
Molto utili sono le lettere greche quando si deve scrivere testi matematici o scientifici: vediamo come fare a scrivere queste lettere in TeX.
Per scrivere una lettera greca è sufficiente anteporre il carattere backslash \ al nome della lettera, come segue: \alpha, \beta, \gamma, \delta. Stesso discorso per le lettere ebraiche \aleph, \beth etc.
/***** MATRICE LETTERE GRECHE *****/
latex = "\\begin{pmatrix}\\alpha&\\beta&\\gamma&\\delta\\\\
\\aleph&\\beth&\\gimel&\\daleth\\\\
\\mathfrak{A}&\\mathfrak{B}&\\mathfrak{C}&\\mathfrak{D}\\\\
\\boldsymbol{\\mathfrak{a}}&\\boldsymbol{\\mathfrak{b}}&
\\boldsymbol{\\mathfrak{c}}&\\boldsymbol{\\mathfrak{d}}\\end{pmatrix}\\\\";
Derivata parziale
Se vogliamo scrivere una derivata parziale dobbiamo usare il comando \Delta per scrivere il Delta maiuscolo, il comando \partial per scrivere il delta minuscolo e, infine, per scrivere il denominatore di una frazione usiamo \fra.
/***** DERIVATA PARZIALE *****/
latex = "\\Delta f(x,y)=\\frac{\\partial^2f}{\\partial x^2}
+\\frac{\\partial^2f}{\\partial y^2}";
Sommatoria
La sommatoria viene descritta col comando \sum. Il limite inferiore si scrive dopo il carattere underscore _, mentre quello superiore dopo il carattere accento circonflesso ^. La funzione della sommatoria è racchiusa tra parentesi graffe.
/***** SOMMATORIA *****/
latex = "\\sum\\limits_{n = 1}^\\infty { f(x)^n}\\\\";
Integrale
Anche per l'intergrale usiamo le stesse nozioni appena aprrese per la sommatoria. il comando per descrivere un integrale è \int_ + limite inf + ^ + limite sup + {funzione}
/***** INTEGRALE *****/
latex = "\\int_a^b{f(x)\\,dx} = (b - a) \\\\";
Integrale doppio
Il comando dell'integrale doppio è molto semplicemente il comando \iint. In questo esempio abbiamo voluto aggiungere anche la freccia "sottolineata" con il comando \underleftrightarrow.
/***** INTEGRALE DOPPIO - SOTTOLINEATO *****/
latex = "\\underleftrightarrow{\\iint_{\\mathds{R}^2}e^{-\\left(x^2+y^2\\right)}\\,\\mathrm{d}x\\mathrm{d}y}";
Approssimazione, radice quadrata e riquadro
L'approssimazione che ha il simbolo della "tilde" (la "S coricata", ruotata di 90° a destra) viene descritta col comadno \sim; invece la radice quadrata si ottiene con il comando \sqrt. In questo esempio abbiamo voluto "esagerare" e quindi sono presenti anche il comando \underset, che ci consente di creare un riquadro, e il comando fcolorbox, che ci consente di colorarlo.
// /***** APPROSSIMAZIONE RIQUADRO *****/
// latex = "\\fcolorbox{noir}{blue}{n!\\underset{n\\rightarrow+\\infty}{\\sim}
{\\left(\\frac{n}{e}\\right)}^n\\sqrt{2\\pi n}}\\\\";
Più o meno
Si usa il comando \pm quando vogliamo scrivere il classico simbolo del "più o meno" con il segno + sovrapposto al segno -
/***** PIU' O MENO *****/
latex = "{n\\pm i-j}";
Prodotto vettoriale
Il prodotto vettoriale è una simbologia molto utilizzata in ambito scientifico. Per definire un vettore è necesario utilizzare il comando \overrigharrow{vettore}. Inoltre per scrivere il simbolo di prodotto vettoriale (un "cuneo" con la punta verso l'alto, simile a una "V" rovesciata) viene usato il carattere \wedge.
/***** PRODOTTO VETTORIALE *****/
latex = "\\overrightarrow{u}\\wedge\\overrightarrow{v}";
mbox
Il comando \mbox serve molto semplicemente a visualizzare una casella di testo con la stringa passata come parametro (esempio: \mbox{stringa}). Sono però possibili ulteriori effetti: se digitiamo rotatebo{angolo} prima di una mbox, questo ci permetteàa di ruotare la nostra casella di testo a seconda dell'angolo che abbiamo inserito..
/***** ROTAZIONE E CASELLA DI TESTO *****/
latex = "\\rotatebox{45}{\\mbox{MokaByte}}\\rotatebox{90}{\\mbox{MokaByte}}\\rotatebox{135}{\\mbox{MokaByte}}";
reflectbox
L'istruzione \reflectbox è molto particolare. Infatti, quando è collocata davanti a una mbox, ci permette di visualizzarere la stringa come se la vedessimo in uno specchio.
/***** REFLECT BOX *****/
latex = "\\reflectbox{\\mbox{MokaByte etyBakoM}}";
Altri tipi di box
Qui di seguito riportiamo altri esempi di "box": fbox, shadowbox, doublebox e ovalbox.
/*****DIVERSI TIPI DI BOX *****/
String latex = "\\begin{array}{cc}";
latex += "\\fbox{\\text{fbox con \\textdbend}}&\\shadowbox{\\text{ shadowbox}}\\cr";
latex += "\\doublebox{\\text{doublebox}}&\\ovalbox{\\text{ovalbox}}\\cr";
latex += "\\end{array}";
Array
Se vogliamo scrivere una colonna di elementi, o meglio un array, dobbiamo usare il comando \begin{array}{c}; di seguito, ogni volta che vogliamo inserire un nuovo elemento, dobbiamo iniziare la riga col carattere & e terminarla con la sequenza di caratteri \\, ossia, comer oramai avrete imparato, il comando "andare a capo". L'array viene chiuso con il comando \end{array}.
/***** ARRAY *****/
latex ="\\begin{array}{c}" +
"&\\mbox{\\textcolor{ForestGreen}{Mokabyte}}\\\\";
latex += "& \\mbox{elemento 1} \\\\";
latex += "& \\mbox{elemento 2} \\\\";
latex += "& \\mbox{elemento 3} \\\\";
latex += "& \\mbox{elemento 4} \\\\";
latex += "& \\mbox{elemento 5} \\\\";
latex += "& \\mbox{elemento 6} \\\\";
latex += "& \\mbox{elemento 7} \\\\";
latex += "& \\mbox{elemento 8} \\\\";
latex += "& \\mbox{elemento 9} \\\\";
latex += "& \\mbox{elemento 10} \\\\";
latex += "\\end{array}";
Tabella
Per creare una tabella in JLaTeXMath si usa il comando \begin{array} passando come argomento tante c separate dal carattere | per indicare quante sono le colonne che vogliamo utilizzare. Inoltre viene usato come combinazione anche il comando \multicolumn.
In questo esempio abbiamo inserito anche altri comandi: \Huge (serve per ingrandire una stringa di testo) \includegraphics (viene utilizzato quando vogliamo inserire una immagine nella nostra tabella) \hline (inserisce una riga orizzontale)
/***** MULTICOLONNA *****/
latex = "\\begin{array}{|c|c|c|c|}\n";
latex += "\\multicolumn{4}{c}{\\shadowbox{\\text{\\Huge TITOLO}}}\\cr\n";
latex += "\\hline\n";
latex += "\\includegraphics{lion.png} &
\\includegraphics[width=3cm,interpolation=bicubic]{lion.png} &
\\includegraphics[angle=45,width=3cm]{lion.png} &
\\includegraphics[angle=160]{lion.png} \\cr\n";
latex += "\\hline\n";
latex += "\\hline\n";
latex += "\\end{array}\n";
Convertire il nostro codice TeX in altri formati
Possiamo convertire il nostro codice TeX in altri formati come oggetti di grafica vettoriale SVG, o documenti PDF, file PS o EPS. Per fare tutto ciò bastano poche righe di codice che possiamo trovare qui di seguito. Basta usare il metodo Convert.SVGTo() che prende in ingresso il file SVG, il nome del file da salvare, e il formato con quale salvarlo.
try {
Convert.toSVG(latex, "esempio.svg", false);
Convert.toSVG(latex, "esempio.svg", true);
Convert.SVGTo("esempio.svg", "esempio.pdf", Convert.PDF);
Convert.SVGTo("esempio.svg", "esempio.pdf", Convert.PDF);
Convert.SVGTo("esempio.svg", "esempio.ps", Convert.PS);
Convert.SVGTo("esempio.svg", "esempio.eps", Convert.EPS);
} catch (IOException ex) {}
Conclusioni
JLatexMath potrebbe diventare uno strumento straordinario se qualche programmatore di buona volontà riuscisse a riordinare le ottime idee che hanno avuto i creatori di questa libreria e ad ampliare i servizi che questa libreria può offrire. Potenzialmente è infatti un valido tool per la creazione di documentazione.
Riferimenti
- [1] La voce LaTeX su Wikipedia
http://it.wikipedia.org/wiki/LaTeX
- [2] Sito di JLatexMath
http://forge.scilab.org/index.php/p/jlatexmath/
- [3] Sito di Apache FOP
http://xmlgraphics.apache.org/fop/
