Page du projet.
Tutoriel de frundis.

Tutoriel de frundis: comment structurer un projet multilingue avec plusieurs documents

version du 07/02/2015

L'objectif de ce tutoriel est de montrer la construction en temps réel d'un projet de plusieurs livres en plusieurs langues à l'aide de l'outil frundis, en s'inspirant de l'exemple du Cycle de Shaedra  : nous allons tout d'abord considérer l'exemple d'un seul livre et lui passer les déclarations et paramètres nécessaires ; puis nous allons rajouter le deuxième livre du cycle et constater les différences en essayant de factoriser le plus possible. Enfin, nous montrerons qu'il est possible d'assembler une série de tomes traduits en plusieurs langues basée sur une même structure et sur des fichiers communs.

Tutoriel de frundis: comment structurer un projet multilingue avec plusieurs documents

1 Le cas simple : un seul livre

On va tout d'abord commencer par un seul fichier où l'on définira d'abord toutes les déclarations nécessaires pour l'export vers les trois formats LaTeX, XHTML et EPUB :

.\" Définitions des variables, qui pourront être interpolées dans le
.\" texte en écrivant \*[nom-de-la-variable]
.#dv date "version du 25/02/2056"
.#dv titre "La véritable histoire de Barbe Bleue"
.#dv auteur "L'auteur"
.#dv cycle "Le Cycle des exemples"
.#dv tome "Tome 1"
.\" Déclarations des paramètres
.X set document-author \*[auteur]
.X set document-title \*[titre]
.X set document-date \*[date]
.X set epub-css stylesheet.css
.X set xhtml-css /css/style-xhtml.css
.X set latex-preamble preamble-tex-fr.tex
.X set lang fr
.X set epub-subject "Fiction, Aventures"
.X set xhtml-bottom xhtml-bottom-fr.xhtml
.\" tags qui seront utilisés dans le livre
.\" tags pour latex
.X mtag -t dialogue -f latex -c emph -b « -e »
.X mtag -t emph -f latex -c emph
.X mtag -t textup -f latex -c textup
.X mtag -t important -f latex -c textbf
.X dtag -t right -f latex -c flushright
.X dtag -t titlepage -f latex -c titlepage
.X dtag -t center -f latex -c center
.\" tags pour xhtml
.X mtag -t dialogue -f xhtml,epub -c em -b « -e »
.X mtag -t emph -f xhtml,epub -c em
.X mtag -t textup -f xhtml,epub
.X mtag -t important -f xhtml,epub -c strong
.X mtag -t tome -f xhtml,epub -c span
.X mtag -t titre -f xhtml,epub -c span
.X mtag -t cycle -f xhtml,epub -c span
.X mtag -t auteur -f xhtml,epub -c span
.X dtag -t right -f xhtml,epub
.X dtag -t titlepage -f xhtml,epub -c div
.X dtag -t center -f xhtml,epub
.\" FIN des DECLARATIONS ============
.Ch "Prologue"
Mon document…

On pourra ajouter, avant le prologue, la page de titre pour LaTeX et EPUB, qui seront inclus par exemple ainsi :

.\" ========= pour LaTeX ========
.Bf -f latex
\enewpage
\ethispagestyle{empty}
.Ef
.Bd -t titlepage
.Bd -t center
.Bf -f latex
    \evspace*{0.1\etextheight}
    {\ebfseries{\eHuge\etextsc{
.Ef
\*[titre]
.Bf -f latex
}}} \evspace{0.05\etextheight}

    {\eLarge
.Ef
.Bm -t emph
\*[cycle]
.Em
.Bf -f latex
} \evspace{0.05\etextheight}

    {\ehuge
.Ef
\*[tome]
.Bf -f latex
    } \evspace{0.05\etextheight}

    {\elarge
.Ef
\*[auteur]
.Bf -f latex
    }

    \evspace{0.02\etextheight}

    \efootnotesize{
.Ef
\*[date]
.Bf -f latex
}
.Ef
.Ed
.Ed
.
.\" ========= pour EPUB et XHTML ========
.Bf -f epub,xhtml
.Bd -t titlepage
.Bm -t tome
\*[tome]
.Em
.P
.Bm -t titre
\*[titre]
.Em
.P
.Bm -t cycle
\*[cycle]
.Em
.P
.Bm -t auteur
\*[auteur]
.Em
.P
\*[date]
.Ed
.Ef

Vu la longueur des déclarations et de ces pages de titre personnalisées, on préférera peut-être les inclure depuis des fichiers à part :

.\" dans le fichier 01-livre-fr.frundis
.\" inclure le fichier des déclarations
.If declarations.frundis
.\" inclure la page de titre pour LaTeX
.If -f latex titre-tex.frundis
.\" inclure la page de titre pour Epub et XHTML
.If -f epub,xhtml titre-xhtml.frundis
.Ch "Prologue"
Mon document…

On pourrait même inclure avec un If les pages de titres dans le fichier declarations.frundis, ce qui nous facilitera la tâche si, finalement, on se retrouve avec un deuxième tome.

2 Un deuxième tome a été écrit !

Nous avons ainsi structuré le projet de façon suffisante pour un seul livre exporté vers trois formats. Mais voilà, un deuxième tome a été écrit ! Coup de chance : nous avons déjà utilisé des variables pour le titre… Problème : elles sont dans le fichier declarations.frundis que nous voulons utiliser comme fichier commun. Il nous suffira de changer de place les variables qui diffèrent et de les placer aussi bien dans le premier que dans le deuxième tome pour régler le problème et utiliser les mêmes fichiers communs :

.\" dans le fichier 02-livre-fr.frundis
.#dv date "version du 15/08/2056"
.#dv titre "La véritable histoire de Blanche-Neige"
.#dv tome "Tome 2"
.If declarations.frundis
.Ch "Prologue"
Mon document…

Remarquons que l'on inclut les déclarations après définir les variables, car ces variables seront utilisées dans la page du titre, qui doit être donc placée après.

3 Gérer plusieurs tomes dans plusieurs langues

Et voilà, Le Cycle des exemples a été traduit en espagnol, ce qui va nous mener à modifier de nouveau le fichier commun et à créer un autre fichier commun à chaque langue. Les variables en français qui sont encore restées dans le fichier declarations.frundis, car communes à chaque tome, doivent alors être déplacées dans un fichier que l'on va appeler par exemple preambule-fr.frundis, auquel on rajoutera plusieurs paramètres qui ne sont valables que pour le français, tels ceux-ci :

.X set latex-preamble preamble-tex-fr.tex
.X set lang fr
.X set epub-subject "Fiction, Aventures"
.X set xhtml-bottom xhtml-bottom-fr.xhtml

Ce nouveau préambule français devra être inclus, de même que le fichier declarations.frundis, dans les fichiers des tomes en français.

Si le document était traduit à davantage de langues, l'on pourrait bien évidemment créer une variable telle que :

.\" dans le fichier preambule-fr.frundis
.#dv lang fr
.\" dans le fichier preambule-es.frundis
.#dv lang es

puis écrire quelque chose dans ce genre pour peu que l'on soit rigoureux dans les noms des fichiers :

.X set latex-preamble preamble-tex-\*[lang].tex
.X set lang \*[lang]
.X set xhtml-bottom xhtml-bottom-\*[lang].xhtml

Voilà ! Nous avons réussi à factoriser au maximum et maintenant tous les tomes d'un cycle dans plusieurs langues partagent un fichier racine declarations.frundis et les tomes de chaque langue ont leur propre préambule commun. Chaque tome ne définit que ses variables uniques (titre, numéro de tome et date de modification, …).

Aller plus loin : utiliser la variable FRUNDISLIB. Notons qu'il est possible d'utiliser une variable pour indiquer le chemin vers un dossier où l'on placerait tous les fichiers communs à plusieurs documents frundis. Voir la Faq de frundis pour en savoir plus.