[PageD'Accueil] [IndexDesTitres] [IndexDesTermes

Projections

Le but est d'arriver à un fichier en format PDF qu'il est possible de projeter, page par page; en outre, la durée pendant laquelle une page reste visible doit pouvoir être réglée séparément pour chaque page.

Fabrication du fichier PDF

Je suis parti d'un fichier de texte brut où tous les caractères à signes diacritiques (é, è, ç, à, ... â, ê, ... ä, ÿ, ... Ä, Ö, ...) ont été remplacés par leur équivalent en TeX.

Comme PSTricks, un paquetage faisant partie de la collection TeX/LaTeX, a des difficultés pour effectuer des calculs (en effet, TeX est un système de balisage et non pas un langage de programmation au sens actuel), les calculs des points et lignes graphiques sont effectués par Python. On arrive à rédiger ainsi un fichier ".tex" balisé correctement.

À partir de là, s'applique la chaîne de fabrication latex, dvips, ps2pdf ce que résume la méthode ci-après:

   def close(self, texte_string, nomf="fichier"):
        "écrit le fichier '.tex' et effectue la suite de compilation"
        info_str = " ".join([self.nomtexte, 
                             str(len(self.lignes)), "lignes\n",
                             str(len(self.mots)), "mots\n",
                             str(self.alea)
                             ])
        open("i" + nomf + ".info", "w").write(info_str)
        open(nomf + ".tex", "w").write(texte_string)
        comm = " ".join(["latex", nomf])
        os.system(comm)
        comm = " ".join(["dvips", nomf])
        os.system(comm)
        comm = " ".join(["ps2pdf", nomf + ".ps"])
        os.system(comm)

Une autre solution, tout en Python, est d'utiliser reportLab.

Projection

Pour projeter le fichier PDF, j'utilise xpdf. Pour obtenir un défilement automatique avec des durées de projections spécifiques à chaque page, il faut écrire une méthode

def execute(self, ecarts, pageini, nomf="fichier"):
        """projection rythmée
        La projection commence avec la page 'pageini'
        et continue jusqu'à la la 'pagenini + len(ecarts) - 1' """
        np = str(pagenini)
        comm = " ".join(["xpdf -remote monserveur -fullscreen", nomf + ".pdf", np, "&"])
        os.system(comm)
        comm = 'xpdf -remote monserveur -exec "nextPage"'
        for ecart in ecarts:
            time.sleep(ecart)
            os.system(comm)
        comm = 'xpdf -remote monserveur -quit'
        os.system(comm)

Lancement de xpdf

pas du clavier, mais d'un «tuyau» installé pour la circonstance (NB que la dénomination "monserveur" est arbitraire)

sur l'écran.

Approvisionnement des pages

l'option -exec "nextPage" qui remplace la touche PageDown en fonctionnement interactif habituel. Ce qui n'est pas bien décryptable dans la man-page, c'est qu'il faut mettre nextPage entre " ". Je n'ai compris le fonctionnement que grâce aux informaticiens de la Liste Python.

Clôture du processus

On envoie l'option -quit de nouveau par le «tuyau» monserveur

Pour finir

Les deux bouts de code illustrent l'intégration par Python de plusieurs processus. Python apporte sa clarté dans l'ordonnancement et sa puissance de calcul et permet ainsi de se concentrer sur le projet lui-même au lieu de recourir à des logiciels de calcul à la syntaxe obsolète (p.ex. metapost, qui au premier abord a l'air plus perfectionné que PSTricks, mais est visiblement antérieur aux notions de la Programmation OO; donc un balisage statique selon PSTRicks écrit en Python est bien plus efficace et plus clair.).

rb


2016-06-05 21:43