[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 457.   XMLTeX e PassiveTeX

XMLTeX (1) è un sistema per comporre file XML attraverso TeX; PassiveTeX (2) è un insieme di fogli di stile aggiuntivi, che in particolare consentono a XMLTeX di elaborare file XSL-FO.

457.1   XMLTeX

XMLTeX è un sistema che si affianca normalmente a LaTeX per trasformare un file XML in un documento pronto per la stampa, attraverso un metodo di trasformazione degli elementi e degli attributi del file di origine in comandi di LaTeX. Per fare questo occorre predisporre un «file di configurazione» nel quale si dichiarano queste sostituzioni. Viene proposto il solito esempio di file XML molto semplice, dove in particolare l'attributo linguaggio contiene un nome valido per LaTeX:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE relazione [
    <!ELEMENT relazione     (titolo?, data, contenuto)>
    <!ATTLIST relazione
        linguaggio  CDATA   "">
    <!ELEMENT titolo        (#PCDATA)>
    <!ELEMENT data          (#PCDATA)>
    <!ELEMENT contenuto     (paragrafo+, firma+)>
    <!ELEMENT paragrafo     (#PCDATA)>
    <!ELEMENT firma         (#PCDATA)>
]>

<relazione linguaggio="italian">
<titolo>Relazione introduttiva su XML</titolo>

<data>11/11/2011</data>

<contenuto>

<paragrafo>XML sta per Extensible Markup Language.    bla bla bla...
Perché,... così,... perciò,... sarà...</paragrafo>

<paragrafo>Bla, bla, bla...</paragrafo>

<paragrafo>... ma soprattutto vorrei sorvolare sopra questioni così
complesse e arzigogolate come qualcuno invece vorrebbe...</paragrafo>

<firma>Pinco Pallino</firma>

</contenuto>
</relazione>

Supponendo di dare a questo file il nome relazione.xml, si può realizzare il file relazione.cfg, con l'indicazione delle trasformazioni da apportare:

\XMLelement{relazione}{\XMLattribute{linguaggio}{\mylanguageattribute}{english}}{%
    \documentclass{article}
    \usepackage[OT2,OT1]{fontenc}
    \usepackage[\mylanguageattribute]{babel}
    \frenchspacing
    \begin{document}
}
{%
    \end{document}
}

\XMLelement{titolo}{}{%
    \xmlgrab
}
{
    \section{#1}
}

\XMLelement{data}{}{%
}
{
    \par
}

\XMLelement{contenuto}{}{%
}
{
}

\XMLelement{paragrafo}{}{%
}
{
    \par
}

\XMLelement{firma}{}{%
}
{
    \par
}

Come si vede si tratta di comandi TeX con cui si dichiarano gli abbinamenti tra elementi e attributi con comandi corrispondenti di LaTeX.

\XMLelement{nome_elemento}{[dichiarazione_attributi]}{codice_iniziale}{codice_finale}
\XMLelement{nome_elemento}{[dichiarazione_attributi]}{\xmlgrab}{codice_complessivo}

Il comando \XMLelement consente di dichiarare la trasformazione dei marcatori di un elemento in comandi LaTeX: gli ultimi due argomenti contengono rispettivamente il codice LaTeX di apertura e il codice di chiusura dell'elemento. Tuttavia, se nell'argomento destinato a ospitare il codice LaTeX di apertura si inserisce soltanto il comando \xmlgrab, si può mettere tutto nell'argomento finale, usando la sigla #1 per fare riferimento al contenuto dell'elemento.

Nel secondo argomento del comando \XMLelement si possono inserire comandi \XMLattribute per prelevare le informazioni sugli attributi:

\XMLattribute{nome_attributo}{nome_comando_tex}{[valore_predefinito]}

Osservando l'esempio del file relazione.cfg si può vedere che nella dichiarazione riferita all'elemento relazione appare l'associazione dell'attributo linguaggio al comando \mylanguageattribute, che poi viene usato successivamente. In pratica, il comando di LaTeX che nel file relazione.cfg appare come la riga seguente, è come se venisse sostituito con quella successiva:

    \usepackage[\mylanguageattribute]{babel}
    \usepackage[italian]{babel}

Nel file di configurazione, ovvero il file .cfg, possono essere collocati altri comandi importanti; fortunatamente molte indicazioni essenziali fanno già parte della configurazione generale, che potrebbe trovarsi nel file /etc/texmf/xmltex/xmltex.cfg. Eventualmente si può approfondire la cosa leggendo la documentazione originale di XMLTeX.

Disponendo del file di configurazione per la trasformazione del documento XML, prima di passare alla composizione con LaTeX, si deve realizzare un piccolo file di collegamento, denominato, in questo caso, relazione.tex:

\def\xmlfile{relazione.xml}
\input xmltex.tex

Si può passare così alla composizione di questo file relazione.tex:

latex relazione.tex[invio]

This is TeX, Version 3.14159 (Web2C 7.4.5)
(./relazione.tex
LaTeX2e <2001/06/01>
Babel <v3.7h> and hyphenation patterns for american, french, german, ngerman, d
anish, dutch, finnish, greek, italian, latin, spanish, nohyphenation, loaded.
(/usr/share/texmf/tex/xmltex/base/xmltex.tex
xmltex version: 2002/06/25 v1.9 (Exp)

Encoding = utf-8 (/usr/share/texmf/tex/xmltex/config/xmltex.cfg)
(./relazione.cfg) (./relazione.xml 
 Default: relazione linguaggio="" (/usr/share/texmf/tex/latex/base/article.cls
Document Class: article 2001/04/21 v1.4e Standard LaTeX document class
(/usr/share/texmf/tex/latex/base/size10.clo))
(/usr/share/texmf/tex/latex/base/fontenc.sty
(/usr/share/texmf/tex/latex/cyrillic/ot2enc.def)
(/usr/share/texmf/tex/latex/base/ot1enc.def))
(/usr/share/texmf/tex/generic/babel/babel.sty
(/usr/share/texmf/tex/generic/babel/italian.ldf
(/usr/share/texmf/tex/generic/babel/babel.def))) (./relazione.aux)
(/usr/share/texmf/tex/latex/cyrillic/ot2cmr.fd) [1] (./relazione.aux) ) ) )
Output written on relazione.dvi (1 page, 692 bytes).
Transcript written on relazione.log.

Si ottiene così il file relazione.dvi, da cui si può generare facilmente un file PostScript:

dvips -o relazione.ps relazione.dvi[invio]

This is dvips(k) 5.92b Copyright 2002 Radical Eye Software (www.radicaleye.com)
' TeX output 2003.08.09:1533' -> relazione.ps
<texc.pro><f7b6d320.enc><texps.pro>. <cmr10.pfb><cmbx12.pfb>[1] 

In modo analogo si può ottenere una composizione in formato PDF, utilizzando pdflatex:

pdflatex relazione.tex[invio]

Eventualmente, entrambe le cose si possono fare in modo più semplice, senza bisogno di realizzare il file relazione.tex, con i comandi seguenti, che servono a ottenere, rispettivamente, la composizione in formato DVI e PDF:

latex "&xmltex" relazione.tex[Invio]

pdflatex "&pdfxmltex" relazione.tex[Invio]

Nel caso dovessero essere presenti riferimenti incrociati, è necessario eseguire la composizione con LaTeX per tre volte di seguito (sempre con lo stesso comando).

Per concludere viene mostrato il risultato della composizione dell'esempio:

esempio con xmltex

457.2   PassiveTeX

Come accennato all'inizio del capitolo, PassiveTeX è un insieme di fogli di stile da usare con XMLTeX per comporre direttamente file XSL-FO, attraverso LaTeX. Viene ripreso un esempio già apparso in un altro capitolo di file XSL-FO:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE fo:root SYSTEM "fo.dtd">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:layout-master-set>
        <fo:simple-page-master          master-name="normale"
                page-width="210mm"      page-height="297mm"
                margin-top="2cm"        margin-bottom="2cm"
                margin-left="2cm"       margin-right="2cm">
            <fo:region-body />
        </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence           master-reference="normale"
            language="it"       country="it">
        <fo:flow                flow-name="xsl-region-body">
            <fo:block           font-size="7mm">
                <fo:block>
                    Bla bla bla <fo:inline font-style="italic">testo in
                    corsivo</fo:inline> bla bla bla <fo:inline
                    font-weight="bold">H<fo:inline
                    baseline-shift="sub">2</fo:inline>O</fo:inline> bla
                    bla bla <fo:inline font-family="monospace">ls -l |
                    sort &gt; prova</fo:inline> bla bla bla <fo:inline
                    color="blue">testo in blu</fo:inline> bla bla bla
                    <fo:inline font-variant="small-caps">testo in
                    maiuscoletto</fo:inline> bla bla bla.
                </fo:block>
            </fo:block>
        </fo:flow>
    </fo:page-sequence>
</fo:root>

In modo molto semplice, si arriva alla composizione di questo file con il comando seguente, supponendo che si tratti del file esempio-014.fo:

latex "&xmltex" esempio-014.fo[Invio]

In questo modo si genera il file esempio-014.dvi, dal quale si può ottenere un file PostScript nel modo consueto:

dvips -o esempio-014.ps esempio-014.dvi[Invio]

Ovviamente si può anche eseguire una composizione in formato PDF direttamente con il comando seguente:

pdflatex "&pdfxmltex" esempio-014.fo[Invio]

Nel caso dovessero essere presenti riferimenti incrociati, sarebbe necessario eseguire la composizione con LaTeX per tre volte di seguito.

Ecco il risultato della composizione:

esempio con xmltex

457.3   Riferimenti

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


1) XMLTeX   LPPL

2) PassiveTeX   Software libero con licenza speciale


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome xmltex_e_passivetex.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!