Journal latex-utils 2.1.2 ou "comment compiler du latex avec make facilement"

Posté par .
Tags : aucun
1
24
mar.
2006
Après avoir réécrit un Makefile particulier pour chaque document LaTeX (éventuellement à l'aide du copier-coller) pendant des années, des amis et moi avons finalement essayé d'en faire un générique. Évidemment, ce n'est pas la première fois qu'une telle tentative est faite, mais il nous semble que le résultat est prometteur et on attend maintenant des rapports de bugs (ou mieux, des patches ;-) ).

Normalement, il suffit de faire un fichier Makefile avec la ligne :
include LaTeX.mk
et ça suffit pour compiler un document LaTeX avec gestion correcte des dépendances. Ça marche sur des petits documents mais aussi sur une thèse avec sommaire, table des matières, multiples bibliographies, index, glossaire, figures multiples, ...

Au départ, nous avions essayé de trouver les dépendances par analyses des fichiers .tex (avec grep, sed, ...). Évidemment, dès qu'il y avait des constructions un peu complexes dans le fichier (include avec des macros, ...), ça ne marchait plus.

La solution que nous avons finalement développer est de faire écrire les dépendances dans un fichier directement par latex/pdflatex (un peu comme l'option -MM de gcc) et ça semble assez robuste.

On a également un paquet latex permettant d'inclure des figures xfig directement dans le .tex :
\includegraphics{toto.fig}
Le Makefile appelle transfig si nécessaire et le package latex inclut le pstex_t (ou le pdftex_t) au lieu du .fig.
  • # d'autres projets en rapport

    Posté par (page perso) . Évalué à 4.

    Tout d'abord, il y a l'excellent rubber: un programme python qui se charge de tout le boulot: il va même jusqu'a convertir les figures et images, gère metapost ou les fichiers xfig, et prend garde à ne relancer bibtex et latex que lorsque c'est nécessaire:

    http://www.pps.jussieu.fr/~beffara/soft/rubber/

    Aussi, latex-mk, qui est lui à base de makefiles, et est plutot puissant. À noter qu'il faont très attention a la portabilité ces fragments de makefiles (pour ceux qui n'aiment pas gmake...), qui sont écrits pour bsd make (mais évidemment, ça marche aussi avec gnu make)

    http://latex-mk.sourceforge.net/

    Personellement, j'utilise rubber, parce qu'avec ça, je n'ai pas à me preoccuper de modifier ou gerenerer un quelconque script lorsque je fais une modif sur le document. (et c'est très rapide, même pour de gros documents)
    • [^] # Re: d'autres projets en rapport

      Posté par . Évalué à 1.

      Pour rubber, voir mon poste en dessous. Je rajouterai cependant que je converti aussi à la volé les fichiers xfig. Je n'ai pas touché le metapost parce que je ne l'utilise pas, mais je ne vois pas de problème majeur à le gérer si on me donne un exemple à faire marcher.

      Par rapport à latex-mk, je trouve qu'il ne répond absolument pas à ma problématique première : compiler automatique un document LaTeX en gérant correctement et automatiquement les dépendances (inclusions, bibliographies, index, glossaires, ...) (et donc oui, latex-utils recompile avec latex, lance bibtex, ... quand il faut et tant qu'il y en a besoin).
  • # rubber?

    Posté par . Évalué à 2.

    ( Une p'tite URL genre http://latex-utils.gforge.inria.fr/ serait la bienvenue ... )

    Sinon, y a-t-il un avantage a utiliser cette solution plutôt que rubber par exemple? http://www.pps.jussieu.fr/~beffara/soft/rubber/
    • [^] # Re: rubber?

      Posté par . Évalué à 3.

      Oups, effectivement j'avais oublié l'URL. J'avais fait une dépêche avec les liens qui a été refusée, et j'ai oublié de remettre les liens dans le journal.
      Il y a aussi ma page avec le paquet Debian :
      http://dept-info.labri.fr/~danjean/deb.html#latex-utils

      Par rapport à rubber, il y a deux choses qui me font éviter rubber :
      1) d'après la doc de rubber "Dependency analysis is performed by parsing the source files" et ça ne marche jamais dès qu'on veut faire des choses un tant soit peu intéressante en LaTeX (noms de fichier à inclure générés par des macros, ...)
      2) rubber me semble s'interfacer très mal avec un Makefile normal . Et je veux garder ça : parfois des bouts de mon document LaTeX sont générés par d'autres programmes (texifyc, ...). Je sais très bien exprimer ça en Makefile, pas avec rubber. Attention, c'est peut-être possible, je n'ai pas vérifier. Mais je n'avais pas envie de passer à un autre système de gestion de dépendances.
  • # Plus simple mais utile

    Posté par . Évalué à 3.


    #=====================================================
    # What you may configure
    # Target : is your primary document name.
    # SecDir : points to location of included TeX files.
    # FigDir : points to location of your figures (ps or eps files)
    # BibDir : points to location of your .bib files (BibTeX bibliography entries)
    # BstDir : points to location of your .bst files (bibliography style)
    #==================================== = = = = = = = = = =
    # SecFiles : all include tex
    # FigFiles : lists actual names of figure files
    # BibFiles : lists actual names of .bib files referenced in your
    # BstFiles : lists actual name of .bst file referenced in your
    #======================================================

    Target = documentnameyouwant
    SecDir = ./
    FigDir = ./figures/png/
    StyDir = ./
    BibDir = ./
    BstDir = ./
    SecFiles = $(wildcard ${SecDir}/*.tex)
    FigFiles = $(wildcard ${FigDir}/*.png)
    StyFiles = $(wildcard ${StyDir}/*.sty)
    BibFiles = $(wilcard ${BibDir}/*.bib)
    BstFiles =$(wildcard ${BstDir}/*.bst)

    #=================================================
    #=================================================

    LaTeX = pdflatex # or regular latex, if you prefer
    BibTeX = bibtex
    PDFtoPS = Acroread -toPostScript
    Paper = Acroread
    Viewer = gs

    #================================================
    #================================================

    ${Target}.ps: ${Target}.pdf
    ${PDFtoPS} ${Target}.pdf

    ${Target}.pdf: ${Target}.bbl
    ${LaTeX} ${Target}
    ${LaTeX} ${Target}

    ${Target}.bbl: ${BibFiles} ${SecFiles} ${FigFiles} ${StyFiles} ${Target}.tex
    ${LaTeX} ${Target}
    ${BibTeX} ${Target}

    clean:
    -rm *.aux *.bbl *.blg *.pdf *.log

    cleanps:
    -rm ${Target}.ps

    force:
    make clean
    ${LaTeX} ${Target}
    ${BibTeX} ${Target}
    ${LaTeX} ${Target}
    ${LaTeX} ${Target}
    ${PDFtoPS} ${Target}.pdf

    #===========================================
    # Viewing options
    #===========================================

    show:
    -${Paper} ${Target}.pdf &
    view:
    -${Viewer} ${Target}.ps &

    #==========================================
    # Archive file options
    #==========================================

    archive: # Create tar archive with all files in current directory.
    make
    make clean
    -tar -cvzf ${Target}.tgz .

    list: # List files in tar archive.
    tar -tvzf ${Target}.tgz


    Au cas ou, un interessé par quelque chose de simple.
    Note: Je compile pour du pdf mais la modification vers ps principal est simple

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.