Commande de remplacement sous emacs

Tout ce qui concerne le langage TeX/LaTeX et ses variantes. Ce langage est utilisable sur le forum via les balises tex.
[participation réservée aux utilisateurs inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
Thibault
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 213
Inscription : jeudi 28 février 2008, 16:20
Localisation : Vendée

Commande de remplacement sous emacs

Message non lu par Thibault »

Bonjour à tous,

Je m'adresse à ceux qui maitrisent emacs (et je sais qu'il y en a ici) pour m'aider à créer une petite commande dans mon fichier de configuration.

Dans mes documents LaTeX, j'utilise une commande \Cor[nv]{ici le corrigé}{là un espace blanc ou autre chose}
Pour faite le corrigé, je mets des [v] à la place des [nv] et je le fais soit à la main si je veux un corrigé partiel, soit en utilisant la commande Alt-x % pour rechercher et remplacer toutes les itérations.

Je souhaiterais créer une fonction dans mon fichier de configuration d'emacs qui me remplacerait tous les [nv] en [v] si c'était possible.

Merci d'avance pour votre aide.
Thibault
Prof de maths...
Utilisateur de LaTeX sous Linux (kubuntu 23.10)
Distrib TeXlive
Éditeur GNU Emacs 29.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.38, cairo version 1.17.8) + auctex + yasnippets
gigiair
Utilisateur chevronné
Utilisateur chevronné
Messages : 2822
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

Re: Commande de remplacement sous emacs

Message non lu par gigiair »

Personnellement ce n'est pas du tout ainsi que j'aurais procédé, mais chacun ses goûts. Il existe le package answers qui permet de gérer plusieurs versions d'un même document.
Il reste que le problème de recherche et remplacement d'une chaîne de caractères contenant des crochets droits est intéressant, car les crochets droits sont des caractères spéciaux qu'il faut traiter avec ménagement en les protégeant par le caractère échappement \\.
Voici une fonction simple qui semble correspondre à ta demande, on peut l'associer à une touche de commande, selon tes goûts.

Code : Tout sélectionner

(defun ma-fonction-remplace()
  "Remplace tous les [nv] d'un document par des [v]"
  (interactive)
  (save-excursion
    (goto-char(point-min))
    (while(re-search-forward "\\[nv\\]" nil t )(replace-match "[v]"))))     
     
Pour trouver la chaîne de caractère qui va détecter une chaîne donnée un peu délicate (comme [nv]), j'ai utilisé le mode re-builder qui permet de vérifier visuellement ce qui va être détecté. Le caractère spécial [ doit être protégé par le caractère d'échappement qui, étant lui-même spécial doit être protégé.

J'ai fait au plus simple, il n'y a pas de vérification, Il faut être certain qu'il n'y aura pas de changements intempestifs.
J'aurais pu utiliser une fonction qui demande la confirmation du remplacement.
JJR.
LaTeXien migrateur.
Thibault
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 213
Inscription : jeudi 28 février 2008, 16:20
Localisation : Vendée

Re: Commande de remplacement sous emacs

Message non lu par Thibault »

gigiair a écrit : mardi 16 janvier 2024, 15:28 Personnellement ce n'est pas du tout ainsi que j'aurais procédé, mais chacun ses goûts. Il existe le package answers qui permet de gérer plusieurs versions d'un même document.
Merci pour ta réponse, je vais tester cela dès que je pourrai ;)

Concernant le package answers, j'ai regardé et cela me semble beaucoup plus compliqué et ne correspond pas à ce que que je souhaite. Pour ma part, je n'ajoute pas simplement la réponse pour le document corrigé, soit j'ai la réponse, soit j'ai autre chose (des pointillés par exemples ou un tableau vide, ...) et je peux aussi mettre ma commande dans du code pstricks pour afficher des éléments uniquement dans mon document corrigé.
Bref, je n'ai pas trouvé aussi souple avec quelque chose de moins compliqué que ma commande qui est très simple au demeurant et qui fait ce que je souhaite ;)

Merci encore pour le coup de main !
Thibault
Prof de maths...
Utilisateur de LaTeX sous Linux (kubuntu 23.10)
Distrib TeXlive
Éditeur GNU Emacs 29.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.38, cairo version 1.17.8) + auctex + yasnippets
Thibault
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 213
Inscription : jeudi 28 février 2008, 16:20
Localisation : Vendée

Re: Commande de remplacement sous emacs

Message non lu par Thibault »

Bon, je viens de tester et cela fonctionne parfaitement. Merci JJR !

Ceci étant, je n'arrive pas à comprendre comment associer un raccourci à cette commande. Voici ce que j'ai essayé en regardant les exemples sur les forums mais cela ne fonctionne pas :

Code : Tout sélectionner

defun remplace-nv ()
  "Remplace tous les [nv] d'un document par des [v]"
  (interactive)
  (save-excursion
    (goto-char(point-min))
    (while(re-search-forward "\\[nv\\]" nil t )(replace-match "[v]"))))
(global-set-key (kbd "<C-s-v>") 'remplace-nv)
Merci d'avance.

[Edit] bon j'ai trouvé finalement, c'était

Code : Tout sélectionner

(global-set-key (kbd "C-s-v") 'remplace-nv)
Thibault
Prof de maths...
Utilisateur de LaTeX sous Linux (kubuntu 23.10)
Distrib TeXlive
Éditeur GNU Emacs 29.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.38, cairo version 1.17.8) + auctex + yasnippets
gigiair
Utilisateur chevronné
Utilisateur chevronné
Messages : 2822
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

Re: Commande de remplacement sous emacs

Message non lu par gigiair »

Thibault a écrit : lundi 22 janvier 2024, 14:29 Bon, je viens de tester et cela fonctionne parfaitement. Merci JJR !
Il n'y a pas de vérification que des remplacements intempestifs puissent se produire, il faut être sûr qu'il n'y aura pas de [nv] que ceux dont le remplacement est souhaités.
Thibault a écrit : lundi 22 janvier 2024, 14:29 [Edit] bon j'ai trouvé finalement, c'était

Code : Tout sélectionner

(global-set-key (kbd "C-s-v") 'remplace-nv)
C'est parfait.
Je ne procède pas ainsi, car la combinaison de touches sélectionnées est active dans tous les modes, et on peut avoir le désir d'utiliser cette combinaison pour une autre fonction dans un autre mode.
J'utilise l'extension bind-key de John Wiegley qui me permet de définir ses propres touches préfixes.
John Wiegley est également l'auteur de use-package, un génial «wraper» pour configurer les extensions de Emacs dans le fichier d'initialisation.
JJR.
LaTeXien migrateur.