IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mise en forme Discussion :

Contrôle de la compilation Latex en fonction du contenu d'une variable externe


Sujet :

Mise en forme

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Contrôle de la compilation Latex en fonction du contenu d'une variable externe
    Je travaille sur un document qui a pour vocation d'être affiché au format PDF sur des écrans de différentes dimensions. J'ai cherché sans succès un moyen de tester le contenu d'une variable environnement qui serait passée au compilateur xelatex au moment de l'exécution. Quelque chose du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    % var='xxx' xelatex doc.tex
    Cela est-il possible*?

    Pour le moment j'utilise un petit script shell qui teste le contenu de la variable et invoque xelatex en spécifiant différents fichiers contenant le préambule du document qui se chargent d'assigner une valeur vrai/faux à une série de variables de type booléen via le paquet etoolbox avant d'invoquer le corps du document commun à toutes les versions via un*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    \input{/other/media/Books/Ali-Bab/latex/chapters.tex}
    Par exemple*:

    f1.tex

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    \documentclass[french, titlepage, 10pt]{book}
    \usepackage{etoolbox}
    \newbool{F1}
    \setbool{F1}{true}
    \newbool{F2}
    \setbool{F2}{false}... etc.
    f2.tex

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    \documentclass[french, titlepage, 10pt]{book}
    \usepackage{etoolbox}
    \newbool{F1}
    \setbool{F1}{false}
    \newbool{F2}
    \setbool{F2}{true}... etc.
    Les fichiers constituant le document testent ensuite le statut de ces variables et exécutent des actions différentes suivant le contenu de ces variables:

    Par exemple…

    préambule f1.tex

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    \ifbool{F1}{% action a exécuter si F1 est vrai
    \scriptsize}
    ifbool{F2}{% action a exécuter si F2 est vrai
    \normalsize}
    ifbool{F3}{% action a exécuter si F3 est vrai
    \small}
    etc.
    Évidemment ce semblant de solution ne me satisfait guère ne serait-ce que parce qu'elle m'oblige à dupliquer le préambule pour chaque format d'écran (allant de l'e-reader six pouce 4:3 au format A7 en passant par la tablette sept pouces 16:9 ou 16:10 etc.) - ce qui veut dire qu'en cas de modification du préambule je dois répercuter les modifications sur chaque fichier (!) mais aussi parce qu'elle m'oblige à définir, initialiser et tester autant de variables qu'il y a de formats.

    Quelqu'un sur ce forum s'est-il par le passé frotté à ce genre de problème et serait de par là-même en mesure de me conseiller une approche un peu moins maladroite de ce problème ?

    D'avance, merci !

  2. #2
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Points : 4 130
    Points
    4 130
    Par défaut
    Bonjour,

    J'avoue avoir du mal à comprendre ce qui change dans votre document.

    La géométrie de la page ?
    La taille de base de la fonte ?
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Winnt Voir le message
    Bonjour,

    J'avoue avoir du mal à comprendre ce qui change dans votre document.

    La géométrie de la page ?
    La taille de base de la fonte ?
    Par exemple.

    C'est en effet le problème particulier auquel je me heurte actuellement dans le cadre de la publication d'un document plutôt volumineux (env. 350 000 mots). Quelques pages de ce document requièrent en effet une taille de police de caractères plus petite afin que certains tableaux ne débordent pas du cadre de la page.

    Mais il s'agit tel que je le vois d'un problème beaucoup plus général.

    On peut imaginer par exemple que dans certains pays l'appareil critique d'un ouvrage soit soumis au droit d'auteur alors que le reste du document fait partie du domaine public. Par exemple la France et le Canada où la législation est moins contraignante. Il serait alors utile de pouvoir disposer de deux versions du document créées à partir de la même source tex/latex. L'une contenant les notes de bas de page (\footnote) et l'autre pas. Ou dans une optique complètement différente pouvoir créer une version illustrée d'un classique de la littérature comprenant 200 MB de reproductions de dessins d'époque en haute résolution et d'une version allégée de 1.5 MB ne comprenant que le texte. etc. etc. Je suis convaincu que vous trouverez aisément d'autres cas d'utilisation où la compilation conditionnelle du source tex/latex répondrait à vos besoins personnels.

    Ceci dit, dans le cas particulier qui actuellement m'occupe, il s'agit effectivement de quelque chose de beaucoup plus limité : changer la taille de la police de caractères en quelques points précis du document, adapter le paramètrage du package qui a pour nom geometry aux contraintes physiques de l'écran auquel le PDF est destiné (taille du papier, marges...), utiliser (ou pas) un en-tête et un pied de page comprenant par exemple la numérotation des pages du document (cf. fancyheader) … etc. Or, d'après ce que je vois les différences entre versions en termes de codage tex/latex tiennent grosso modo en une demi-page d'écran.

    N'ayant pas a priori été enthousiasmé par ce qu'offre etoolbox je me demandais avant d'aller plus avant dans cette direction s'il n'existait pas d'autres possibilités que les hasards de mes recherches ne m'auraient pas permis de rencontrer.

  4. #4
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Points : 4 130
    Points
    4 130
    Par défaut
    Bonjour,

    Pour ce qui est de sélectionner des parties de texte selon vos besoins sans avoir plusieurs documents, l'extension versions disponible sur le CTAN est très simple et pratique d'utilisation.

    Pour la géométrie de la page, l'extension geometry au travers des commandes \newgeometry et \restoregeometry permettent de modifier la géométrie des pages au sein d'un même document (voir la documentation).

    Pour la taille des caractères les commandes \tiny, \scriptsize, \footnotesize, \small, \normalsize, \large, \Large, \LARGE, \huge et \HUGE sont utiles.

    Pour les en-têtes des pages, la documentation de l'extension fancyhdr est très complète.
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Winnt Voir le message
    Bonjour,

    Pour ce qui est de sélectionner des parties de texte selon vos besoins sans avoir plusieurs documents, l'extension versions disponible sur le CTAN est très simple et pratique d'utilisation.

    Pour la géométrie de la page, l'extension geometry au travers des commandes \newgeometry et \restoregeometry permettent de modifier la géométrie des pages au sein d'un même document (voir la documentation).

    Pour la taille des caractères les commandes \tiny, \scriptsize, \footnotesize, \small, \normalsize, \large, \Large, \LARGE, \huge et \HUGE sont utiles.

    Pour les en-têtes des pages, la documentation de l'extension fancyhdr est très complète.
    Merci pour vos conseils.

    L'extension version me semble effectivement répondre en partie à mes besoins.

    L'idéal aurait été que je puisse lancer la compilation xelatex en spécifiant la « version » par le biais d'une option ; par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xelatex -U 'variable_utilisateur' book.tex
    … que le document latex aurait pu référencer sour une forme (à définir) - $1… @1… etc. par exemple.

    Cela permettrait par exemple d'inclure des fichiers du style… fichier1.$1.tex ou ficher1.@1.tex qui suivant le cas référenceraient des fichiers tels que… préambule.version1.tex… préambule.version2.tex… etc.

    On pourrait aller plus loin et disposer d'instructions comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    \switch {
    case 'v1' :
    code latex spécifique à la version1
    ...`
    case 'v2' :
    code latex spécifique… version2
    ...
    etc. etc.
    }
    Je suis un peu surpris et déçu que latex n'offre pas cette possiblité.

    Une autre manière de procéder serait bien entendu d'utiliser un préprocesseur qui se chargerait d'interpréter des directives et qui prendrait en charge ces aspects avant de « livrer » le source latex au compilateur.

    J'ai un peu cherché dans cette direction sans avoir rien trouvé de probant… et en tant qu'utilisateur très occasionnel de latex je ne vais pas non plus me lancer dans l'écriture de ce type d'outil (ou adaptation d'un outil existant).

    Merci pour votre aide.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Quelques pistes :

  7. #7
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Points : 4 130
    Points
    4 130
    Par défaut
    Bonjour,

    Entre les commandes \include et \input auquel s'ajoute l'extension version, il est très simple de créer plusieurs versions d'un même document avec un minimum d'effort.

    Je l'ai moi même fait plusieurs fois.

    Un fichier maître contenant les réglages de la version souhaitée pour chaque type de sortie (doc_v1, doc_commentaires...).
    Une fois cela mis au point, il suffit de compiler la version voulue.
    Tout les outils existent. Pourquoi vouloir tout compliquer ?
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

Discussions similaires

  1. Traitement en fonction du contenu d'une variable
    Par Graineur dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 15/03/2011, 17h11
  2. fonction qui indique qu'une variable est d'un type entier
    Par piotrr dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 21/06/2007, 16h05
  3. [VBA-E] Lancement d'une macro en fonction du contenu d'une cellule
    Par Zak Blayde dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/01/2007, 15h13
  4. Réponses: 7
    Dernier message: 24/01/2007, 10h01
  5. Réponses: 18
    Dernier message: 27/10/2006, 14h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo