Sono entrato nella classe virtuale, stimolato dalla discussione apparlsa in ml,
ma già non ci sto capendo niente
Se hai una texlive 2009
oppure una texlive 2008 funzionante e che comprende context
salva in test.tex
`
\starttext
\input tufte
\stoptext
`
ed esegui
`texexec test.tex`
Se tutto funziona hai un pdf
test.pdf
con alcune righe di testo.
Ecco, hai appena fatto un tipico esempio di testo context.
… sono tentato ad andarmene subito. Ma siccome sono abbastanza vecchio da aver imparato che non si nasce imparati, non mi vergogno a dichiarare la mia totale ignoranza per questo argomento che pure mi incuriosisce, e dico:
Mi potete spiegare in poche parole che cosa è conTeX? rispetto a LaTeX?
grazie
E’ analogo a LaTeX , AMSLaTeX, AMSTeX etc.
Ovvero un insieme di macro coerenti che vengono compilate in un formato fmt.
Per essere concreti: il nucleo di LaTeX è in
texlive/2008/texmf-dist/tex/latex/base ,
mentre quello di context è in
texlive/2008/texmf-dist/tex/context/base
La differenza è che in
texlive/2008/texmf-dist/tex/latex
ci sono circa 1098 packages ausiliari che si caricano con \usepackages a seconda dell’esigenza e sperando che non vi siano conflitti, mentre in context… 0.
Beh, non è proprio così:ci sono poco meno di 20 packages in
texlive/2008/texmf-dist/tex/context
ma
foxet — non usato
pgf — poco usato
bib — si
/third/* — poco usati
In sostanza ConTeXt è il duale di LaTeX: un formato onnicomprensivo che ha come obiettivo la pubblicazione nel suo insieme.. Mentre il kernel di LaTeX nasce con alcuni tipologie di documenti (eg article, report ,book) ed alcuni ambienti predefiniti, e delega altri packages per le altre cose (cfr memoir ad esempio), ConTeXt fornisce tutti gli elementi per costruire il proprio documento e delega alll’utente la personalizzazione di tali elementi.
In proporzione a LaTeX non esistono praticamente utenti che scrivono stili o packages di ConTeXt: semplicemente è già tutto incluso, basta personalizzare.
In questo modo si è risolta anche la gestione dei conflitti tra pi packages:
semplicemte si eliminano i packages.
Un’altro punto di differenza rispetto a LaTeX è il rapporto con MetaPost. La scelta di ConTeXt è una strettissima integrazione con Metapost, perchè si ritiene che questo sia in grado di rispondere a praticamente tutte le esigenze di grafica: è infatti con ConTeXt che è nato il formato Metafun di Metapost.
Ancora, ConTeXt è sviluppato in modo esclusivo da una persona;
tutti gli eventuali miglioramenti devono essere motivati, approvati
ed in ogni caso vengono introdotti solo dallo sviluppatore.
Infine ConTeXt è sempre stato orientato più verso il pdf che verso il dvi: il motore di impaginazione preferito è pdftex (quello che una volta era pdfetex)
Prima conclusione: dal punto di vista delle funzionalità,
context = latex + {alcuni altri packages, 4 o 5 in tutto} + metapost
Ora, è importante capire il momento attuale.
Esistono due rami di ConTeXt: mkii e mkiv (mark II e mark IV, ma io li chiamo Mark two e Mark four).
mkii è congelato: nessuna nuova feature, solo bug fix.
Si basa su pdftex e sul programma MetaPost con il formato Metafun, ma è caldamente consigliato pstoedit 3.45 (non credo che sia incluso nella TeXLive). Le due guide di riferimento sono
http://www.pragma-ade.com/general/manuals/cont-eni.pdf
http://www.pragma-ade.com/general/manuals/metafun-p.pdf
Per uitlizzare il formato mkii si usa texexec, ie
`#texexec test.tex`
mkiv è l ramo attuale, in “furioso” sviluppo.
Si basa su luatex, il nuovo motore di impaginazione che un giorno (2012?) diverrà pdftex2.0, ma nessuno ne fa una questione di principo: per ora è utile pensare a luatex come una riscrittura amichevole di pdftex, nel senso che alcuni sviluppatori del core di pdftex sono anche sviluppatori di luatex e che si cerca di mantenere una stretta relazione di output.
Per una serie di motivi qui siamo veramente in una situazione opposta al mondo TeX:
-
*) luatex ha (quasi tutto) un interprete del linguaggio Lua, oltre che un interprete del TeX ovviamente, ed anche un interprete Metapost al suo interno.
Lua è un linguaggio di programmazione simile al pascal, python, basic. E’ minimale e sembra poca cosa, ma in realtà è estremamente utile, anzi è la scelta ottima. Il fatto di avere Metapost al suo interno elimina l’esigenza di chiamare il programma esterno Metapost, con impressionanti conseguenze sulle performance.
Inoltre il formato del file di ingresso è utf-8, mentre è prevista una completa gestione dei font opentype, type1 e truetype grazie all’inclusione di parte del codice di fontforge.
Luatex infine è scritto in C con target CWEB e dalla versione 0.46 di pochi giorni fa è iniziata la gestione di librerie esterne scritte C tramite loadlib .
Questo è un enorme cambiamento rispetto a pdftex scritto in pascal web e tradotto in C tramite web2c che rendeva molto complicato gestire il codice e la sua integrazione con librerie esterne.
*) luatex cambia spesso, e il nuovo invalida il vecchio. Cosi nella tl2009, il luatex presente è già vecchio ed inutile
*) context mkiv è il formato di context che usa luatex, e dato che
luatex cambia spesso, e il nuovo invalida il vecchio, lo stesso vale per mkiv. Per questo è stata creata una distribuzione ad hoc, la “minimals beta”
http://wiki.contextgarden.net/ConTeXt_Minimals
(completamente instabile secondo il punto di vista del mondo TeX)
che, inutile dirlo, serve solo per testare le cose ed è completamente
indipendente dalla TexLive.
A volte accade che la minmals sia sballata per Windows a volte accade che la versione 64bit x Mac sia errata. La ml di context cerca di risolvere questi problemi.
Esiste anche una “minimals current ” che è più stabile .
Non bisogna essere però eccessivi: io ho un progetto che usa una current del novembre 2008, e fino ad oggi funziona bene.
Indicativamente ci sono circa 3~4 current in un anno e 3~4 beta in un mese. Non è inusuale avere più minimals, magari perchè si hanno più progetti, ma in generale si hanno una current, una beta ed una extra
Metapost infine è curato dallo stesso sviluppatore di luatex,che si preoccupa di non creare distorsioni tra la il metapost di luatex e Metapost programma ed il tutto è in stretta relazione con lo sviluppatore di context mkiv, che indica volta per volta quale parte di TeX rendere accessibile tramite Lua.
Infine per usare mkiv (supposto una minimals funzionante)
`#context test.tex`
Brevissima “domande frequenti”:
-
*) LaTeX è meglio di ConTeXt?
Si. nel senso: la base di utenti è ampia, è un formato testato a lungo,
esiste una ricca documentazione, è accettato per i documenti scientifici,
è usato da altri programmi per generare i pdf.
*) ConTeXt assomiglia a LaTeX minimale ?
No.
E’ progettato meglio e diversamente ed è completamente gestito.
LaTeX è nato per poche cose, ed è cresciuto in modo non gestito.
*) LaTeX “fa/è” di più di ConTeXt ?
No
*) E’ più facile risolvere un problema con LaTeX o con ConTeXt?
Con ConTeXt
Ora faccio un esempio, che c’è anche sulla ml pari pari.
Il problema è mettere un nr di pagina “pataccone”
Questa è una prima versione context mkii
`
%%test-ctx-mkii-no-ok.tex
\setuppapersize[A4][A3]
\setuplayout[location=middle,marking=on]
%% colors
\setupcolors[state=start]
\definecolor[titleseccolor][r=0.65,b=0.0,g=0.0]
%% pagenumber
\setuppagenumbering[alternative=doublesided,location=]
\startuseMPgraphic{PageNr}
picture ppag ;
ppag := textext(“\ssbf\pagenumber”) ;
ppag := ppag scaled 4;
path p ;
p := unitsquare
xscaled OverlayWidth yscaled OverlayHeight
superellipsed .85 ;
fill p withcolor \MPcolor{titleseccolor} ;
draw p withcolor 1.5\MPcolor{titleseccolor}
withpen pencircle scaled 2pt;
draw ppag
shifted (0.5*OverlayWidth-xpart center ppag ,
0.5*OverlayHeight-ypart center ppag)
withcolor white;
\stopuseMPgraphic
\defineoverlay[PageNr][\useMPgraphic{PageNr}]
\setupbackgrounds[state=repeat]
\setupbackgrounds[footer][rightmargin][background=PageNr]
%%
%%
%%
\showlayout
\starttext
\dorecurse{4}{%
\chapter{Tufte}
\section{A text}
\input tufte}
\stoptext
# texutil –purgeall ; export shell_escape=t; texexec test-ctx-mkii-no-ok.tex
`
Non è una particolamente efficiente:
per ogni pagina context ricalcola il background MetaPost
PageNr, perchè è legato al numero di pagina.
Per 100 pagine ho chiaramente 100 background differenti.
l’elaborazione diventa notevole.
Molto meglio fissare il background una volta per tutte,
e scriverci sopra il numero.
`
%%test-ctx-mkii-ok.tex
\setuppapersize[A4][A3]
\setuplayout[location=middle,marking=on]
\showframe
%% colors
\setupcolors[state=start]
\definecolor[titleseccolor][r=0.65,b=0.0,g=0.0]
%% pagenumber
\setuppagenumbering[alternative=doublesided,location=]
\startuniqueMPgraphic{PageNr}
picture ppag ;
path p ;
p := unitsquare
xscaled OverlayWidth yscaled OverlayHeight
superellipsed 0.85 ;
fill p withcolor \MPcolor{titleseccolor} ;
draw p withcolor 1.5\MPcolor{titleseccolor}
withpen pencircle scaled 2pt;
\stopuniqueMPgraphic
\defineoverlay[PageNr][\uniqueMPgraphic{PageNr}]
\setupbackgrounds[footer][rightmargin][background=PageNr]
%%
\setupfooter[before=\vfill,after=\vfill]
\setupfootertexts[margin][]%
[\hsize=\rightmarginwidth
\centerline{\scale[sx=4,sy=4]{\color[white]{\ssbf\pagenumber}}}]
%%
\showlayout
\starttext
\dorecurse{4}{%
\chapter{Tufte}
\section{A text}
\input tufte}
\stoptext
# texutil –purgeall ; export shell_escape=t; texexec test-ctx-mkii-ok.tex
`
Se consideriamo context mkiv,
la situazione cambia completamente.
il primo file che era lentissimo
diventa normale, proprio come il secondo.
Queasto è dovuto al fatto che metapost ora è una estensione
di luatex, quindi la gestione del ricalcolo è molto più veloce:
è questo uno dei principali vantaggi di luatex
(l’altra faccia della medaglia: maggiore occupazione di memoria).
`
%%test-ctx-mkiv.tex
\setuppapersize[A4][A3]
\setuplayout[location=middle,marking=on]
%% colors
\setupcolors[state=start]
\definecolor[titleseccolor][r=0.65,b=0.0,g=0.0]
%% pagenumber
\setuppagenumbering[alternative=doublesided,location=]
\startuseMPgraphic{PageNr}
picture ppag ;
ppag := textext(“\color[white]{\ssbf\pagenumber}”) ;
ppag := ppag scaled 4;
path p ;
p := unitsquare
xscaled OverlayWidth yscaled OverlayHeight
superellipsed .85 ;
fill p withcolor \MPcolor{titleseccolor} ;
draw p withcolor 1.5\MPcolor{titleseccolor}
withpen pencircle scaled 2pt;
draw ppag
shifted (0.5*OverlayWidth-xpart center ppag ,
0.5*OverlayHeight-ypart center ppag)
\stopuseMPgraphic
\defineoverlay[PageNr][\useMPgraphic{PageNr}]
\setupbackgrounds[state=repeat]
\setupbackgrounds[footer][rightmargin][background=PageNr]
%%
\showlayout
\starttext
\dorecurse{4}{%
\chapter{Tufte}
\section{A text}
\input tufte}
\stoptext
`