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

Programmation (La)TeX avancée Discussion :

Obtenir la valeur de « \thepage » dans un fichier externe


Sujet :

Programmation (La)TeX avancée

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 123
    Points : 111
    Points
    111
    Par défaut Obtenir la valeur de « \thepage » dans un fichier externe
    Bonjour,
    voilà un petit défi technique auquel pourra probablement seulement répondre un expert de LaTeX comme unbonpetit.

    Je génère un PDF avec XeLaTeX. J'ai besoin de savoir sur quelle page se trouve un contenu précis, dans le PDF généré.

    Actuellement, un programme externe se charge de rechercher une chaîne de caractères dans le document. Toutefois, je me demande s'il n'y aurait pas moyen d'obtenir dans un fichier externe, à l'aide de commandes LaTeX, le numéro de la page précise ou se trouve un passage.

    J'ai tenté, pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    \usepackage{filecontents}
     
    ...
     
    \begin{filecontents*}{numero-de-page.txt}
    \thepage
    \end{filecontents*}
     
    ...
    Ce code me génère un fichier nommé numero-de-page.txt contenant « \thepage ». Je veux que « \thepage » soit remplacé par le numéro de la page à partir de laquelle le fichier a été créé. Bien sûr, filecontents se conduit comme on s'y attend, un peu à la manière de verbatim. Ma question est donc : peut-on envoyer la valeur de « \thepage » dans un fichier externe.

    Des idées? Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par grafik.muzik Voir le message
    Des idées?
    C'est facile en tex mais il me semble qu'on est dans le syndrome xyz.

    La vraie question est : pourquoi vouloir un fichier qui contient un numéro de page alors que \label le fait et suffit amplement pour ça ? Quelle sera l'utilisation de ce fichier contenant un numéro de page ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 123
    Points : 111
    Points
    111
    Par défaut
    \label est une bonne piste qui m'a permis de pousser mes recherches plus loin. J'ai fais des test et l'utilisation du fichier .aux ne me permet pas de faire exactement ce que je veux.

    Je vous explique de manière assez simplifiée la tâche à accomplir :
    1. Des fichiers .tex sont générés à partir de données (des suites de caractères alphanumériques) présentes dans une base de données (BD).
    2. À partir de ces .tex on crée des fichiers PDF qui présentent les données dans de longs tableaux qui couvrent plusieurs pages.
    3. Chaque donnée est associée à un « id » unique et on veut connaitre la page sur laquelle se trouve chaque donnée (cette information doit être enregistrée dans des fichiers)


    Idéalement, j'aimerais créer la commande \ajouterMarqueur{nom_du_fichier}{clef}{valeur} qui aurait pour effet d'ajouter la ligne « {"clef":"valeur"} » (syntaxe JSON) à un fichier nommé « nom_du_fichier ».

    J'en suis donc venu à créer ceci (MWE) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    \documentclass{article}
     
    \newcommand\ajouterMarqueur[3]{%
      \ifdefined\fluxSortie%
        \else%
          \newwrite\fluxSortie%
          \immediate\openout\fluxSortie=#1%
      \fi%
      \immediate\write\fluxSortie{%
        {"#2":"#3"}%
      }%
    }
     
    \newcommand\fermerFluxMarqueur{%
      \immediate\closeout\fluxSortie%
    }
     
    \begin{document}
     
    Lorem ipsum
     
    \ajouterMarqueur{nom_fichier.txt}{idArbitraire1}{\thepage}
    \ajouterMarqueur{nom_fichier_autre.txt}{Blabla1}{\thepage}
    \ajouterMarqueur{nom_fichier.txt}{idArbitraire2}{\thepage}
    \ajouterMarqueur{nom_fichier.txt}{idArbitraire3}{\thepage}
    \ajouterMarqueur{nom_fichier.txt}{idArbitraire4}{\thepage}
    \ajouterMarqueur{nom_fichier_autre.txt}{Blabla2}{\thepage}
    \fermerFluxMarqueur
     
    \end{document}
    Ça donne presque le résultat voulu. Toutefois, puisque j'utilise toujours \fluxSortie, tout se retrouve dans le même fichier, soit celui appelé par la première commande \ajouterMarqueur. Avez-vous des suggestions pour corriger et améliorer ce code?

  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,

    Je ne suis pas familier de la syntaxe Texienne.
    Toutefois, il me semble comprendre ceci de tes commandes :
    • ajouterMarqueur : ouvre un flux sans le fermer
    • fermerFluxMarqueur : ferme un flux

    Mais tu identifie le flux à ouvrir sans identifier le flux à fermer et donc (je présume) Tex ferme tout les flux ouverts.

    N'est-il pas possible de concevoir ta commande de la façon suivante :
    • ouverture du flux
    • écriture dans le flux (ajout à la fin du fichier)
    • fermeture du flux


    Sinon au lieu de mélanger tes écritures trie celle-ci par fichier.
    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
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 123
    Points : 111
    Points
    111
    Par défaut
    Merci pour ces suggestions

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par grafik.muzik Voir le message
    \label est une bonne piste qui m'a permis de pousser mes recherches plus loin. J'ai fais des test et l'utilisation du fichier .aux ne me permet pas de faire exactement ce que je veux.
    À moins que je n'ai rien compris, il me sembler au contraire que cela fait exactement ce que tu veux !!!

    Puisque ces fichers "tex" sont compilés pour en obtenir un pdf, pourquoi ne pas y incorporer, lorsqu'ils sont générés, des \label correctement placés ? Les numéros de pages seront bien rangés dans le fichier "aux" et si tu veux trouver un numéro de page correspondant à un label, un simple \pageref suffit.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Valeurs pour variables dans un fichier plat
    Par lylau dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 11/01/2010, 16h17
  2. [Lazarus] Comment obtenir la liste des ressources dans un fichier lrs
    Par SergioMaster dans le forum Lazarus
    Réponses: 3
    Dernier message: 09/10/2009, 11h21
  3. lecture de valeurs numériques contenues dans un fichier xml
    Par yasse87 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 21/04/2009, 19h13
  4. Réponses: 1
    Dernier message: 24/10/2008, 12h24
  5. Réponses: 8
    Dernier message: 15/07/2008, 17h41

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