Script Perl pour changer un code LaTeX

Tout ce qui concerne l'utilisation ou l'installation de LaTeX.

Modérateur: gdm_tex

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

Script Perl pour changer un code LaTeX

Messagepar evariste_G » Mardi 01 Avril 2014, 18:13

Bonjour.

Je suis en train de scruter un script Perl que je dois utiliser pour modifier des fichiers LaTeX.
En gros, il doit renommer des noms d'images selon une norme.

Cependant, il y a des bugs et je ne peux pas contacter l'auteur su script pour le modifier.

Le bout de code incriminé est :

Code: Tout sélectionner
 foreach (@file)
      {
         $line = $_;
         $newline = $line;
         if (($line =~ /(includegraphics\[?.*\]?|Form)\{(.*[a-zA-Z0-9])\}/) && ($line !~ /^%/)) 
         {
              $nom_figure = $2;
              $nom_figure_original = $nom_figure;
              # Si le nom etait deja un nom etendu, on le simplifie:
              if ($nom_figure =~ /^[0-9]{3}_[0-9]{2}[e,c,b]_(.*)$/)
              {
                $nom_figure = $1;
              }
            ### Ici on met des zeros devant le numero de page si besoin est (on veut trois chiffres).
              $page = $hash{$nom_figure_original}; # ici, numéro de page bien présente grâce à une fonction appelée avant
              if ($page < 10) {$pagenb="00".$page;}
              if (($page >= 10) && ($page < 100)) {$pagenb="0".$page;}
              if ($page >= 100) {$pagenb=$page;}

              $nom_extended = $pagenb."_".$radix.$type."_".$nom_figure;
    
              if ($nom_figure == $nom_figure_original)
              {
                print $nom_figure_original." =====EXTENDED=====> ".$nom_extended."\n";
              }
              else
              {
                print $nom_figure_original." =====MODIFIED=====> ".$nom_extended."\n";
              }
              `cp ../figures/$nom_figure_original.eps ../newfig/$nom_extended.eps`;
              $newline = $`.$1."{".$nom_extended."}".$'; # c'est ici qu'il y a un pb sûrement <-------------------------
         }
         print NEW $newline;
      }


Le code LaTeX à changer est :

Code: Tout sélectionner
\begin{center}
\includegraphics[scale=.8]{055_03e_03_01}
\end{center}


Le problème est que ce script remplace des fois "includegraphics" par le nom original de l'image, mais pas toujours, ce qui donne :

Code: Tout sélectionner
\begin{center}
03_01{055_03e_03_01}\end{center}

... Et je ne comprends pas pourquoi !
Je sais que ce n'est pas un forum Perl, mais je sais aussi qu'il y a des spécialistes Perl ici donc sait-on jamais ... Si la solution est évidente ...
Mathématiques, LaTeX et Python : http://www.mathweb.fr
Cours particuliers de maths et de NSI : https://cours-particuliers-bordeaux.fr/
evariste_G
Téra-utilisateur
 
Messages: 1428
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: Script Perl pour changer un code LaTeX

Messagepar marco56 » Mercredi 02 Avril 2014, 11:43

Je ne connais pas perl mais si tu expliques ce que tu veux avec un exemple, je veux bien tenter en python...
marco56
Giga-utilisateur
 
Messages: 765
Inscription: Jeudi 25 Novembre 2010, 22:10
Statut actuel: Actif et salarié | Enseignant

Re: Script Perl pour changer un code LaTeX

Messagepar rebouxo » Mercredi 02 Avril 2014, 14:10

Je pense que ton expression rationnelle ne donne pas exactement ce que tu veux.

Code: Tout sélectionner
  if (($line =~ /(includegraphics\[?.*\]?|Form)\{(.*[a-zA-Z0-9])\}/) && ($line !~ /^%/)) 


Je pense que c'est là qu'est le problème. Mais je ne suis pas suffisamment calé en expression rationnel et en Perl pour te dire où est le problème.
Cela dit .* représente n'importe quel suite de caractère (le point représente tout et l'étoile le répète), donc c'est peut-être là.

Olivier
A line is a point that went for a walk. Paul Klee
Par solidarité, pas de MP
rebouxo
Modérateur
 
Messages: 6938
Inscription: Mercredi 15 Février 2006, 13:18
Localisation: le havre
Statut actuel: Actif et salarié | Enseignant

Re: Script Perl pour changer un code LaTeX

Messagepar evariste_G » Jeudi 03 Avril 2014, 12:17

rebouxo a écrit:Je pense que ton expression rationnelle ne donne pas exactement ce que tu veux.

Code: Tout sélectionner
  if (($line =~ /(includegraphics\[?.*\]?|Form)\{(.*[a-zA-Z0-9])\}/) && ($line !~ /^%/)) 


Je pense que c'est là qu'est le problème. Mais je ne suis pas suffisamment calé en expression rationnel et en Perl pour te dire où est le problème.
Cela dit .* représente n'importe quel suite de caractère (le point représente tout et l'étoile le répète), donc c'est peut-être là.

Olivier


Avant tout, je précise encore que ce n'est pas moi qui ai écrit ce script, car je ne comprends pas tout dans le langage. Et utiliser Python, pour le moment, est exclut car ce script fonctionnait jusqu'à présent sur d'autres fichiers.
Je précise que c'est dans le cadre d'un travail pour un éditeur. Je ne suis pas maître de tout (malheureusement).

En ce qui concerne la ligne citée, je pensais que :

Code: Tout sélectionner
\[?.*\]?


désignait l'argument de la fonction \includegraphics. Par exemple, \includegraphics[.5].
Maintenant, je viens de pensais à un truc : peut-être manque-t-il un "*" :

Code: Tout sélectionner
\[?*.*\]?


Je tenterai le coup dès que je peux et vous tiendrai informés.
Mathématiques, LaTeX et Python : http://www.mathweb.fr
Cours particuliers de maths et de NSI : https://cours-particuliers-bordeaux.fr/
evariste_G
Téra-utilisateur
 
Messages: 1428
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant

Re: Script Perl pour changer un code LaTeX

Messagepar gigiair » Jeudi 03 Avril 2014, 17:44

Je ne connais rien en perl, et pas grand chose en expressions rationnelles, d'autant qu'il en existe de plusieurs types.
En Emacs, c'est [[] qui va au lieu de \[
JJR.
LaTeXien migrateur.
gigiair
Exa-utilisateur
 
Messages: 2439
Inscription: Samedi 08 Juillet 2006, 19:56
Localisation: Saint Bonnet Elvert
Statut actuel: Actif et salarié

Re: Script Perl pour changer un code LaTeX

Messagepar rebouxo » Jeudi 03 Avril 2014, 20:22

gigiair a écrit:Je ne connais rien en perl, et pas grand chose en expressions rationnelles, d'autant qu'il en existe de plusieurs types.
En Emacs, c'est [[] qui va au lieu de \[


Oui, mais les expressions rationnelles d'Emacs sont assez particulières et celles de perl le sont aussi dans leur genre.
Ce que je peux dire, c'est que rechercher c'est que si tu recherche un point, il faut que tu fasses attention, car c'est un caractère réservé des expressions rationnelles. Donc, recherché un point se fait avec ce motif \. Mais, entre crochet le point retrouve son sens.

Je crains que ceci : includegraphics\[?.*\]? ne recherche pas ce que tu penses. Voilà comment je l'interprète : on cherche includegraphics suivit de 0 ou 1 crochet, puis de n'importe quoi (le . représente n'importe quel caractère, et * le répète 0 ou plus puis 0 ou 1 crochet. Le problème c'est que le .* étoile risque de ne pas s'arrêter au premier crochet qu'il rencontre, parce que c'est un caractère comme les autres à se moment là. C'est le problème de l'avidité des expressions rationnelles me dit mon livre (Introduction des expressions rationnelles de Bernard Desgraupes). Cela dit, ici, je doute que tu ais des chaînes \includegraphics[], donc je remplacerais * par un +, mais cela ne changeras pas le problème. Je remplacerais le . par un [:alnum:]. Mais c'est sans gigoter des genoux comme disait ma grand-mère. (SGDG).

Olivier
A line is a point that went for a walk. Paul Klee
Par solidarité, pas de MP
rebouxo
Modérateur
 
Messages: 6938
Inscription: Mercredi 15 Février 2006, 13:18
Localisation: le havre
Statut actuel: Actif et salarié | Enseignant

Re: Script Perl pour changer un code LaTeX

Messagepar evariste_G » Dimanche 06 Avril 2014, 16:12

Ah ok. L'étoile n'est donc pas le joker ... :-) Bon, ben tant pis.
Mathématiques, LaTeX et Python : http://www.mathweb.fr
Cours particuliers de maths et de NSI : https://cours-particuliers-bordeaux.fr/
evariste_G
Téra-utilisateur
 
Messages: 1428
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant

Re: Script Perl pour changer un code LaTeX

Messagepar OG » Mardi 08 Avril 2014, 15:38

Bonjour

Je ne sais pas où tu as résolu ton problème.
Histoire de tester le code, est-il possible d'avoir le script perl en entier ?
Et deux exemples (un qui fonctionne, un qui ne fonctionne pas)

O.G.
OG
Modérateur
 
Messages: 2279
Inscription: Lundi 12 Mars 2007, 11:20
Localisation: Rouen
Statut actuel: Actif et salarié | Maître de conférence

Re: Script Perl pour changer un code LaTeX

Messagepar evariste_G » Mercredi 09 Avril 2014, 10:54

OG a écrit:Bonjour

Je ne sais pas où tu as résolu ton problème.
O.G.


Je n'ai pas mis mon problème comme résolu car il ne l'est pas ... D'ailleurs, je l'ai mis en suspend vu que je n'y connais rien en Perl et que j'ai d'autres choses plus importantes à faire :-)
Mathématiques, LaTeX et Python : http://www.mathweb.fr
Cours particuliers de maths et de NSI : https://cours-particuliers-bordeaux.fr/
evariste_G
Téra-utilisateur
 
Messages: 1428
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant

Re: Script Perl pour changer un code LaTeX

Messagepar marco56 » Mercredi 09 Avril 2014, 14:21

Si ton besoin est réel, je réitère ma proposition de départ...
marco56
Giga-utilisateur
 
Messages: 765
Inscription: Jeudi 25 Novembre 2010, 22:10
Statut actuel: Actif et salarié | Enseignant

Re: Script Perl pour changer un code LaTeX

Messagepar GMaths » Jeudi 01 Mai 2014, 10:20

Je ne suis pas non plus un spécialiste des expressions régulières même s'il m'arrive d'en utiliser...
... mais là, de toute façon, il ne serait pas possible d'aider... vu que l'on ne sait même pas ce que doit devenir l'exemple initial.

Je comprends que
Code: Tout sélectionner
\includegraphics[scale=.8]{055_03e_03_01}

ne doit pas devenir
Code: Tout sélectionner
03_01{055_03e_03_01}

Mais où est-il expliqué ce que cela doit devenir ? :wink:
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Script Perl pour changer un code LaTeX

Messagepar GMaths » Jeudi 01 Mai 2014, 10:43

N'ayant pas les infos nécessaires pour effectuer les tests pour toi... je précise qu'il y a plein de sites internet de ce type : http://www.lumadis.be/regex/test_regex.php

où tu pourras tester tes expressions régulières pour essayer de comprendre ce qui ne va pas.

Voilà un exemple de test pour ton exemple :
Image
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Script Perl pour changer un code LaTeX

Messagepar GMaths » Jeudi 01 Mai 2014, 11:07

Le test pour savoir si le nom est étendu :
Image


Quand je vois ce que cela donne... je me dis que le problème doit venir du fait que $1 prend deux 'valeurs' successives : ce n'est plus "\includegraphics..." après le deuxième test d'expression régulière.
et je confirme alors ce commentaire :
Code: Tout sélectionner
$newline = $`.$1."{".$nom_extended."}".$'; # c'est ici qu'il y a un pb sûrement <-------------------------


Mais je suis dans les supputations car il n'est pas clairement dit ce qui est souhaité.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Script Perl pour changer un code LaTeX

Messagepar GMaths » Jeudi 01 Mai 2014, 11:53

Fin du message précédent... modifiée, pour davantage de clarté.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Script Perl pour changer un code LaTeX

Messagepar evariste_G » Vendredi 02 Mai 2014, 16:03

evariste_G a écrit:Le problème est que ce script remplace des fois "includegraphics" par le nom original de l'image, mais pas toujours, ce qui donne :


Je pensais que ceci était clair, donc j'explique : le script est fait, à l'origine pour remplacer la ligne :

Code: Tout sélectionner
\includegraphics[scale=0.6]{nomdelimage}


par :

Code: Tout sélectionner
\includegraphics[scale=0.6]{055_03e_nomdelimage}


où "055" est la page où apparaît l'image, "03" le chapitre, "e" pour dire que c'est dans la partie exercices. Pour cela, l'auteur du script précise que l'on doit d'abord que l'on tape dans le terminal :

Code: Tout sélectionner
dvips -o fichier.ps fichier &> logdvi


avant d'exécuter le script Perl.
Je ne suis pas encore allé sur la page de débogage indiquée précédemment, mais je le ferai dès que j'aurai le temps, ce qui n'est pas le cas en ce moment (d'où la mise en suspend de mon problème concernant ce sujet).
Mathématiques, LaTeX et Python : http://www.mathweb.fr
Cours particuliers de maths et de NSI : https://cours-particuliers-bordeaux.fr/
evariste_G
Téra-utilisateur
 
Messages: 1428
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant

Re: Script Perl pour changer un code LaTeX

Messagepar GMaths » Vendredi 02 Mai 2014, 16:28

evariste_G a écrit:Je pensais que ceci était clair...

Euh... non

evariste_G a écrit:, donc j'explique

... et ta nouvelle explication est troublante par rapport à ce commentaire
Code: Tout sélectionner
# Si le nom etait deja un nom etendu, on le simplifie:

et par rapport à ce que tu peux constater sur la deuxième image que j'ai mise... car, dans l'exemple, le nom semble commencer par ce que tu souhaites... mais ce qui est capturé par l'expression rationnelle, c'est la fin du nom... en ne gardant pas le début que tu sembles vouloir.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant


Retourner vers LaTeX

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Bing [Bot], Google Adsense [Bot], Magpie [Crawler], marco56 et 14 invités