Remplir des champs identiques dans des fichiers .tex

Fermé
masal1 Messages postés 1 Date d'inscription mardi 28 juin 2022 Statut Membre Dernière intervention 28 juin 2022 - Modifié le 28 juin 2022 à 09:40
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 - 28 juin 2022 à 10:08
Bonjour,

J'ai un programme qui modifie automatiquement des champs déjà définis dans plusieurs
template .text
.
Par exemple, dans mon modèle, j'ai défini un champ
def\clients{#.......#} 
le code demande avec quoi je veux le remplacer .
Parfois les substitutions sont communes entre les différents fichiers, il est donc inutile de les remplir plusieurs fois. comment puis-je résoudre ce problème ?
import os, subprocess, re

def find_occurrences(template_tex):
    # Open template.tex
    with open(template_tex, "r") as f:
         filedata = f.read()

    # Find occurrences of #item#
    return set(re.findall("\#(.*?)\#", filedata))

def prompt_replacements(occurrences):
    replacements = dict()
    # Replacing fields
    for occurrence in occurrences:
        replaceby = input("Replace " + occurrence + " by: " )
        replacements[occurrence] = replaceby
    return replacements

def clean_latex_temporary_files(result_tex):
    filename_wext = result_tex[:result_tex.rfind(".")]
    for ext in ["tex", "aux", "log"]:
        print("rm", filename_wext + "." + ext) 
        os.remove(filename_wext + "." + ext)

def compile_latex(result_tex):
    # Convert result.tex to result.pdf
    proc = subprocess.Popen(["pdflatex", "-interaction=nonstopmode", result_tex])
    proc.communicate()
    clean_temporary_files(result_tex)

def make_replaced_latex(template_tex, result_tex, replacements):
    # Write results
    with open(template_tex, "r") as f:
        filedata = f.read()
        for (occurrence, replaceby) in replacements.items():
            filedata = filedata.replace("#" + occurrence + "#", replaceby)
    with open(result_tex, "w") as f:
         f.write(filedata)

def main():
    map_template_result = {
        "template1.tex" : "result1.tex",
        "template2.tex" : "result2.tex",
        "template3.tex" : "result3.tex",
    }
    occurrences = set()
    for template_tex in map_template_result.keys():
        occurrences |= find_occurrences(template_tex)
    replacements = prompt_replacements(occurrences)
    for (template_tex, result_tex) in map_template_result.items():
        make_replaced_latex(template_tex, result_tex, replacements)
        compile_latex(result_tex)
        clean_temporary_files(result_tex)

main()
A voir également:

1 réponse

Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 929
28 juin 2022 à 10:08
0