ConTeXt/Comment créer un document complexe ?

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche


L'exemple donné par la figure 10 ci-dessus donne déjà une idée de la puissance de ConTeXt et de la nécessité de rassembler les informations disponibles. Bien entendu, nous trouvons dans LATEX à peu près la même puissance et une quantité indéfinie de production de macros. Ici, les macros et les scripts sont en grande partie déjà écrits : il suffit de les appeler et de configurer les clés qui en permettent l'usage.

Un exemple de document complexe[modifier | modifier le wikicode]

En reprenant les éléments déjà vus ci-dessus et testés avec quelques exemples, nous pouvons examiner maintenant un fichier source dans lequel peuvent coexister des éléments assez différents : du texte, des images, des équations mathématiques. Il ne s'agit encore pas ici d'un ouvrage complexe, comme un livre, dont nous gardons l'étude pour plus tard, mais d'un document dont la composition montre déjà quelques subtilités.

Ci-dessous nous présentons un exemple de fichier source d'un document relativement complexe, avec ses commentaires. Ce fichier est trompeusement intitulé "Hello World !", mais vous verrez que les choses vont un peu plus loin. Ce fichier provient du Wiki "ConTeXt Garden" et a été écrit par Sanjoy Mahajan. Le texte (commentaires et texte lui-même) est originairement en anglais, mais nous le traduisons ici pour que les commandes soient mieux comprises. Les lignes précédées par le symbole "%" sont des commentaires (qu'il est utile de placer dans votre propre fichier source; cela peut vous aider à structurer le document). Vous pouvez le copier/coller et le manipuler en faisant varier les paramètres. Nous ne donnons pas le rendu de ce document, qui fait 3 pages. Testez-le par vous-même, ou rendez-vous sur la page de "ConTeXt Garden" :

% "Hello world!" document for the ConTeXt typesetting system
%
% === History ===
% 2006-12-29  Sanjoy Mahajan  <sanjoy@mit.edu>
%     * Created
% 
% Ce document est dans le domaine public (sans copyright).

\setupcolors[state=start]       % sinon on obtient du gris
\definecolor[headingcolor][r=1,b=0.4]

% pour le fichier info/catalog du document (donné par 'pdfinfo', par exemple)
\setupinteraction[state=start]  % rend les hyperliens actifs, etc.
  title={Hello world!},
  subtitle={A ConTeXt template},
  author={Sanjoy Mahajan},
  keyword={template}]

% urls utiles
\useURL[author-email][mailto:a.u.thor@somewhere.edu][][a.u.thor@somewhere.edu]
\useURL[wiki][http://wiki.contextgarden.net][][\ConTeXt\ wiki]
\useURL[sanjoy][mailto:sanjoy@mit.edu][][sanjoy@mit.edu]

% Pour le papier US; par défaut la commande est [A4][A4] (composition en A4,
% imprimée sur du papier A4)
\setuppapersize[letter][letter]
\setuplayout[topspace=0.5in, backspace=1in, header=24pt, footer=36pt,
  height=middle, width=middle]
% pour voir la structure de la page, décommentez la ligne suivante
% \showframe

% en-têtes et pieds-de-page
\setupfooter[style=\it]
\setupfootertexts[\date\hfill \ConTeXt\ template]
\setuppagenumbering[location={header,right}, style=bold]

\setupbodyfont[11pt]   % par défaut en 12pt

\setuphead[section,chapter,subject][color=headingcolor]
\setuphead[section,subject][style={\ss\bfa},
  before={\bigskip\bigskip}, after={}]
\setuphead[chapter][style={\ss\bfd}]
\setuphead[title][style={\ss\bfd},
  before={\begingroup\setupbodyfont[14.4pt]},
  after={\leftline{\ss\tfa A. U. Thor $\langle$\from[author-email]$\rangle$}
         \bigskip\bigskip\endgroup}]

\setupitemize[inbetween={}, style=bold]

% configuration de l'espace entre les paragraphes
\setupwhitespace[medium]
% commentez la ligne suivante si vous ne voulez pas de paragarphes indentés.
\setupindenting[medium, yes]

\starttext
\title{Hello, world!}
Ceci est un document "hello-world" pour illustrer quelques possibilités de \ConTeXt\. Have fun ! Vous trouverez plus d'informations sur le
\from[wiki]; le texte précédent (wiki) devrait être coloré et cliquable; en cliquant dessus, vous devriez arriver sur le wiki de \ConTeXt\.

\subject{Une liste}

Voici un exemple de liste.

\startitemize[a]     % les tags sont en bas de casse
\item premier
\item deuxième
\item troisième
\stopitemize

\subject{Maths}

Une équation peut être composée sur une ligne comme $e^{\pi i}+1=0$, ou comme une formule:
\startformula
\int_0^\infty t^4 e^{-t}\,dt = 24.
\stopformula
% n'utilisez pas les $$...$$ (l'équivalent en plain TeX)
Vous pouvez aussi obtenir des équations numérotées:
\placeformula[eq:factorial-example]\startformula
\int_0^\infty t^5 e^{-t}\,dt = 120.
\stopformula
Et vous pouvez vous y référer par leur nom. On appelle la première équation {\tt
factorial-example} et c'est l'équation \in[eq:factorial-example].

\ConTeXt\ affiche le numéro pour vous. Et comme l'interaction est active, si vous cliquez sur le numéro de l'équation, vous obtenez l'équation elle-même.

\subject{Texte avec des figures}

Maintenant, un texte avec quelques figures. La première figure est située à droite, avec le paragraphe autour d'elle. 

\placefigure[right,none]{}{\externalfigure[dummy]}
% On lui donne du texte factice avec la commande \input tufte
\input tufte

La figure suivante sera sur une ligne, comme une formule affichée:
\placefigure[here,none]{}{\externalfigure[dummy]}
\input tufte

Voici une autre référence à une équation numérotée -- equation
\in[eq:factorial-example] sur \at{page}[eq:factorial-example], ainsi vous pouvez cliquer dessus, ou sur la page de référence.

% la plupart des commandes en plain TeX fonctionnent
\vfill

\noindent 
\framed[corner=round, width=\textwidth,height=1in,
backgroundcolor=gray,background=color]
{Ce document est dans le domaine public, aussi vous pouvez l'améliorer, le partager, ou bien faire quoi que ce soit d'autre avec.  
Les suggestions sont les bienvenues.  Vous pouvez me les envoyer à
 \from[sanjoy] (Sanjoy Mahajan).}

\stoptext

Un document complexe : composer un livre avec ConTeXt[modifier | modifier le wikicode]

Voici quelques éléments ayant été employés à la composition d'un ouvrage complexe, ici un ouvrage de théorie littéraire, composé par Hans Hagen. Il possède un certain nombre d'instructions qui sont toutes commentées ici et assemblées en fonction de leur rôle dans la mise en page, qu'il s'agisse des en-têtes, de la bibliographie, des index, etc. Il ne s'agit pas pour vous de faire un simple copier/coller, mais de comprendre le rôle de chaque instruction afin d'utiliser éventuellement tout ou partie du code.

Vous pouvez tester une à une les diverses commandes, au fur et à mesure de votre progression et des besoins. Attention à la police utilisée pour l'ouvrage tel que le code donné par Hans Hagen la spécifie. Il s'agit d'une Garamond Premieum Pro. Si vous ne possédez pas cette police installée sur votre machine, vous pouvez (et vous devez) en utiliser une autre.

% En premier lieu, il faut déclarer les éléments de base : input regime (utf, acii, etc.), la police utilisée, la langue

\enableregime[utf]

\setupencoding[default=texnansi]

\setupbodyfontenvironment[default][em=italic]

% Pour la ligne suivante, on choisit la langue
\mainlanguage[fr]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% TAILLE DU PAPIER, MARGES, MISE EN PAGE %%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Ici l'ouvrage utilise un empagement de 152mm x 228mm sur une feuille A4.
\definepapersize[theory][width=152mm,height=228mm]

\setuppapersize[theory][A4]

% Pour l'édition et la révision des épreuves, on a ajouté le numéro des lignes dans la marge; % pour une sortie papier sans marque pour le massicot, ni numérotation des lignes, il faut %commenter les deux lignes suivantes
\setupcolors[state=start]
\setuplinenumbering[color=red,style=\tt\tfxx,step=1,location=inmargin]

% configuration et métrique des marges, etc.
\setuplayout[location=middle,
             marking=off,
             topspace=1.8cm,
             backspace=1.6cm,
             height=fit,
             width=fit,
             rightmargin=2cm,
             leftmargin=2cm,
             header=1cm,
             footer=.1cm,
             setup=strict,
             grid=yes]

\def\defaultwidowpenalty{0}

\def\defaultclubpenalty{0}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% INDEX %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Ceci est un index spécial : les références "importantes" seront données avec leur numéro de % page en gras.
% Cela est appelé par la commande suivante \index[imp::]{lemotimportant}

\setupregister[index][imp][pagestyle=bold]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% NUMÉROTATION DES PAGES %%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\setuppagenumbering[alternative=doublesided,location=]

% On fait commencer la numérotation des pages à la page 5. Vous pouvez choisir une autre page
\setuppagenumber[number=5]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% EN-TËTES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Définitions pour les différents en-têtes. On utilise ici une division en chapitre, section et sous-section : chapter, section et subsection 
% et "title" pour les remerciements, car ils ne doivent pas être inclus dans la Table des %Matières (TOC).

% L'éditeur souhaite voir les têtes de chapitre centrés et séparés sur 2 lignes; il faut donc % indiquer cela pour ''chapter'', ''section'', ''subsection'' :

\define[2]\MyChapterCommand{\startalignment[middle]\framed[frame=off]{\vbox{\headtext{chapter} #1\blank[0*small]#2}}\stopalignment}

\setuphead[chapter][page=yes,
                   header=empty,
                   command=\MyChapterCommand,
                   style=\bfc,
                   number=yes,
                   before={\strut\blank[line]},
                   after={\blank[4*line]}]

\setupheadtext[chapter=Chapter]

\setuphead[title][page=yes,
                  header=empty,
                  style=\bfc,
                  align=middle,
                  before={\strut\blank[line]},
                  after={\blank[4*line]}]

\setuphead[section][page=no,
                    style=\tfa,
                    align=right,
                    number=no,
                    before={\blank[line]},
                    after={\blank[line]}]

\setuphead[subsection][page=no,
                    style=\it,
                    align=right,
                    number=no,
                    before={\blank[line]},
                    after={\blank[line]}]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% BIBLIOGRAPHIE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Il s'agit d'une section très longue pour définir les références bibliographiques et le style des <code>\cite</code>
% commandes (on utilise des références numérotées).

\usemodule[bib]

\setupbibtex[database={biblio}]

\setupcite
       [num]
       [pubsep={, },
        lastpubsep={ and },
        compress=yes,
        inbetween={--},
        left={[},
        right={]}]

\setupcite
       [year]
       [pubsep={, },
        lastpubsep={ and },
        compress=yes,
        inbetween={},
        left={(},
        right={)}]

\setupcite
       [authoryears]
       [pubsep={, },
        lastpubsep={ and },
        compress=yes,
        inbetween={ },
        left={(},
        right={)}]

\setupcite
       [key,number,page,short,type,doi]
       [pubsep={, },
        lastpubsep={ and },
        compress=no,
        inbetween={ },
        left={[},
        right={]}]

\def\bracketed#1{\hbox to 20pt{\hfill [\TNum{#1}]}}

\setuppublications
            [sorttype=bbl,
             autohang=no,
             refcommand=num,
             criterium=all,
             numbering=bib,
             numbercommand=\bracketed]

\def\tasinvertedauthor#1#2#3#4#5%
    {#3%
    \bibdoif{#1}{\bibalternative{surnamesep}#1\unskip}%
    \bibdoifelse{#2}{\bibalternative{vonsep}#2\unskip}{\unskip}%
    \bibdoifelse{#5}{\bibalternative{juniorsep}#5\unskip}{\unskip}%
}

\setuppublicationlist
   [width=24pt,
    maybeyear=off,
    artauthor=\tasinvertedauthor,
    editor=\tasinvertedauthor,
    author=\tasinvertedauthor,
    namesep={, },
    lastnamesep={, and },
    finalnamesep={, and },
    firstnamesep={, },
    juniorsep={, },
    vonsep={ },
    surnamesep={, },
    authoretallimit=5,
    editoretallimit=5,
    artauthoretallimit=5,
    authoretaldisplay=5,
    editoretaldisplay=5,
    artauthoretaldisplay=5,
    authoretaltext={ et al.},
    editoretaltext={ et al.},
    artauthoretaltext={ et al.},
    distance=3pt]

 \newif\ifeditedbook
 \setuppublicationlayout[book]{%
    \insertauthors{}{: }{\inserteditors{}{, editor%
                          \ifnum\getvalue{editor@num}> 1 s\fi
                              \ \global\editedbooktrue 
                     \unskip: }{\unskip}}%
    \inserttitle{\bgroup\it }{\/\egroup}{}%
    \insertseries{ (}{)}{}%
    \insertedition{, }{\insertmonth{}{}{} edn. }{, }%
    \insertcity{}{: }{}%
    \insertpubname{}{, }{}%
    \insertpubyear{}{}{}%
    \insertnote{ [}{].}{.}%
}

 \setuppublicationlayout[article]{%
    \insertartauthors{}{: }{\insertthekey{}{ }{}}%
    \insertarttitle{\bgroup ``}{\egroup,'' }{}%
    \insertjournal{\bgroup \it}{\egroup}{\insertcrossref{in }{}{}}%
    \insertvolume{ }{}{}%
    \insertpubyear{ (}{) }{\unskip.}%
    \insertpages{}{\insertnote{ [}{].}{.}}{.}%
    \insertcomment{[}{].}{}%
 }

 \setuppublicationlayout[incollection]{%
    \insertartauthors{}{: }{\insertthekey{}{. }{}}%
    \insertarttitle{\bgroup ``}{\egroup,'' }{}%
    \insertcrossref{in }{}{}%
    \insertpages{, }{}{}%
    \insertnote{ [}{].}{.}%
 }

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% JALONS & AIDE VISUELLE %%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Durant la phase de révision et de production, on a besoin d'outils pour la recherche visuelle d'erreurs.
% Ces aides sont bien sûr marquées en commentaire lors de la dernière phase de compilation.

% \usemodule[t-crop][Mark=Camera,Info=yes] % ceci est un module écrit par Hans Hagen

% \showgrid

% \showframe

% \showsetups

% \showlayout

% \version[temporary]

% \enablemode[transdraft] % ce mode est défini plus tard


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% POLICES & TAILLES %%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% d'abord, on définit la grande taille et la petite taille

\define\NSize{11pt}
\define\SSize{9.5pt}

\starttypescript [serif] [default] [size]
\definebodyfont [\NSize,\SSize] [rm] [default]
\stoptypescript

% Mes fontes customisées sont des Garamond Premier Pro de chez Adobe. 

\usetypescriptfile[type-garmprem]
\usetypescript[AGaramondPrem] [texnansi]
\usetypescript[AGaramondPremcpsp] [texnansi]
\usetypescript[AGaramondPrempnum] [texnansi]
\setupbodyfont[MyAGaramondPrempnum,\NSize]

% cette commande permet de passer des nombres proportionnels(le corps de texte normal) aux nombres employés dans les tableaux
% (pour les tableaux, la bibliographie, etc.)

\define\PNum{\switchtobodyfont[MyAGaramondPrempnum]}
\define\TNum{\switchtobodyfont[MyAGaramondPrem]}

\setupinterlinespace[line=3.1ex]

% Il y a dans le livre quelques figures très peu) crées en Metapost et bien sûr, il faut garder la même police.

\startMPenvironment
\usetypescriptfile[type-garmprem]
\usetypescript[AGaramondPrempnum] [texnansi]
\setupbodyfont[MyAGaramondPrempnum,11pt]
\stopMPenvironment

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% IMPRESSION POUR LA RÉVISION %%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% double espace pour la révision du manuscrit

\startmode[transdraft]
\setupinterlinespace[line=24pt]
\stopmode

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% ENVIRONNEMENT PERSONNALISÉ %%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% On utilise tikz pour une figure avec des flèches (ses flèches par défaut sont plus belles que celle de Metapost)

\usemodule[tikz]
\usetikzlibrary[arrows,snakes,backgrounds]

% le module Greek en Monotype Porson pour la police font, mise un peu à l'échelle

\usemodule[t-ancientgreek][font=GreekPorson,scale=1.03]

% on utilise un très joli symbole de la police Adobe Garamond Premier Pro pour les listes sans numéro

\definesymbol[8][{\getglyph{orn-GaramondPremrPro}{6}}]

% définitions personnalisées pour les listes non numérotées et pour celles qui le sont

\define\myitem{\setupitemize[1][atmargin][alignment=left]\startitemize[8,packed]}

\define\mynumber{\setupitemize[1][stopper={}]\startitemize[n,packed]}

% textbar ne semble pas avoir de nom dans l'encodage en texnansi

\define\textbar{\getglyph{Serif}{\char124}}

% Il y a seulement quatre u cinq tableaux, aussi il fallait les numéroter pour l'ensemble du livre

\setupcaptions[headstyle=italic,style={\switchtobodyfont[\SSize]},way=bytext,stopper=]

\setupreferencing[partnumber=no]

% Dans la table des matières (TOC), on met des numéros aux tables

\setuplist[chapter,section][pagecommand=\TNum]

% et au final, tout ce qui concerne l'indentation

\setupindenting[1.5em]
\setupindenting[yes]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% Code fourni par Hans Hagen %%%%%%%%%%%
%%%%% pour un ouvrage édité chez Blackwell %
%%%%% 2007 - révisé en 2011 %%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%