Modifier des champs dans le latex
Résolu/Fermé
chahd
-
Modifié le 24 mars 2022 à 14:48
mamiemando Messages postés 33506 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 31 janvier 2025 - 25 mars 2022 à 13:38
mamiemando Messages postés 33506 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 31 janvier 2025 - 25 mars 2022 à 13:38
A voir également:
- Modifier des champs dans le latex
- Modifier dns - Guide
- Modifier liste déroulante excel - Guide
- Modifier story facebook - Guide
- Comment modifier un pdf - Guide
- Modifier extension fichier - Guide
2 réponses
yg_be
Messages postés
23454
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 février 2025
Ambassadeur
1 564
24 mars 2022 à 15:13
24 mars 2022 à 15:13
bonjour,
tu pourrais peut-être écrire une fonction qui fait le travail pour un fichier.
ensuite tu appelleras ta fonction pour chacun des fichiers.
tu pourrais peut-être écrire une fonction qui fait le travail pour un fichier.
ensuite tu appelleras ta fonction pour chacun des fichiers.
mamiemando
Messages postés
33506
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
31 janvier 2025
7 819
Modifié le 25 mars 2022 à 13:41
Modifié le 25 mars 2022 à 13:41
Bonjour,
Plusieurs choses avant de répondre :
Ensuite pour revenir à ton problème, si tu veux automatiser tes remplacements sur plusieurs fichiers, il suffit de mettre le code existant dans une fonction et de faire une boucle qui va itérer sur les fichiers à traiter (les différents templates si j'ai bien compris ?). Une autre question est si ces substitutions sont communes entre les différents fichiers ou indépendantes (car si ce sont les mêmes inutile de les demander plusieurs fois). Je vais supposer ci-dessous que tu es dans ce cas.
Ensuite quelques remarques. Il faut éviter d'appeler
À tester, mais voici dans l'idée à quoi ça pourrait ressembler :
Bonne chance
EDIT: correction de
Plusieurs choses avant de répondre :
- Merci de soigner l'orthographe et de te relire.
- Merci d'utiliser les balises de code afin que le code apparaisse indenté et soit testable.
- Merci de mettre un exemple reproductible. Sans
template.tex
on ne peut pas tester ton programme.
Ensuite pour revenir à ton problème, si tu veux automatiser tes remplacements sur plusieurs fichiers, il suffit de mettre le code existant dans une fonction et de faire une boucle qui va itérer sur les fichiers à traiter (les différents templates si j'ai bien compris ?). Une autre question est si ces substitutions sont communes entre les différents fichiers ou indépendantes (car si ce sont les mêmes inutile de les demander plusieurs fois). Je vais supposer ci-dessous que tu es dans ce cas.
Ensuite quelques remarques. Il faut éviter d'appeler
subprocess.Popenquand c'est possible, car cela rend le code dépendant de ton système d'exploitation. Pour l'appel à
pdflatexc'est difficilement évitable, mais pour supprimer les fichiers, tu pourrais utiliser
os.remove.
À tester, mais voici dans l'idée à quoi ça pourrait ressembler :
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"]: 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()
Bonne chance
EDIT: correction de
os.remove(filename_wext + ext)en
os.remove(filename_wext + "." + ext), voir message #7.
mamiemando
Messages postés
33506
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
31 janvier 2025
7 819
>
chahd
Modifié le 25 mars 2022 à 12:46
Modifié le 25 mars 2022 à 12:46
Bonjour,
Pour les fautes de français ça n'est pas gravissime mais si tu as des difficultés, tu peux essayer d'écrire ton message dans ta langue natale et le traduire en français avec deepl. Concernant les balises de code je t'invite à lire ce lien (que je t'ai déjà donné dans mon message précédent).
As-tu testé le code que je t'ai donné ? Répond-il à tes besoins ? Et sinon, peux-tu partager quelques exemples minimaux pour que je puisse le tester ?
Bonne chance
Pour les fautes de français ça n'est pas gravissime mais si tu as des difficultés, tu peux essayer d'écrire ton message dans ta langue natale et le traduire en français avec deepl. Concernant les balises de code je t'invite à lire ce lien (que je t'ai déjà donné dans mon message précédent).
As-tu testé le code que je t'ai donné ? Répond-il à tes besoins ? Et sinon, peux-tu partager quelques exemples minimaux pour que je puisse le tester ?
Bonne chance
chahd
>
mamiemando
Messages postés
33506
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
31 janvier 2025
25 mars 2022 à 13:02
25 mars 2022 à 13:02
je vous remercie infiniment pour ton aide .
Oui, j'ai essayé votre programme, il fonctionne parfaitement, sauf pour la partie de suppression des fichiers ça na pas marché , mais ce n'est pas grave puisque mon objectifs c'est que de changer les champs .
merci
Oui, j'ai essayé votre programme, il fonctionne parfaitement, sauf pour la partie de suppression des fichiers ça na pas marché , mais ce n'est pas grave puisque mon objectifs c'est que de changer les champs .
merci
mamiemando
Messages postés
33506
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
31 janvier 2025
7 819
>
chahd
Modifié le 25 mars 2022 à 13:39
Modifié le 25 mars 2022 à 13:39
Ah oui il manque un
Si on reprend mon exemple :
Le
Bonne chance
".", voici comment corriger la fonction :
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) # DEBUG os.remove(filename_wext + "." + ext)
Si on reprend mon exemple :
-
result_tex
successivement"result1.tex"
,"result2.tex"
,"result3.tex"
; -
result_wext
successivement"result1"
,"result2"
,"result"
;
Le
Bonne chance
24 mars 2022 à 16:24