Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Invité de passage
    Homme Profil pro
    Enseignant
    Inscrit en
    mars 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : mars 2011
    Messages : 6
    Points : 2
    Points
    2

    Par défaut emacs macro latex

    Bonjour,

    je suis débutant en emacs+latex, je voudrais savoir si je peux créer la fonction suivante:
    - soit sous forme de macro
    - ou en lisp dans mon .emacs

    Une fois que j'ai sélectionné à la souris plusieurs mots, je voudrais que ma fonction rajoute des balises personnelles autour de ces mots.

    Exemple:
    sélection multiple
    ------------------------------------------------------------
    bla bla bla motSelectionné bla
    bla bla bla bla motSelectionné bla
    ------------------------------------------------------------
    résultat après appel fonction ou macro
    ------------------------------------------------------------
    bla bla bla \tx{motSelectionné} bla
    bla bla bla bla \tx{motSelectionné} bla
    ------------------------------------------------------------

    Merci d'avance.

  2. #2
    LLB
    LLB est déconnecté
    Membre Expert
    Inscrit en
    mars 2002
    Messages
    962
    Détails du profil
    Informations forums :
    Inscription : mars 2002
    Messages : 962
    Points : 1 128
    Points
    1 128

    Par défaut

    Quand ton mot est sélectionné (supposons que le curseur soit à la fin de la sélection), tu peux taper ton accolade fermante. Ensuite, C-x C-x te ramène au début de la sélection où tu peux taper ton "\tx{". Refais C-x C-x pour remettre le curseur à sa place.

    Tu peux donc en faire une macro.

  3. #3
    Invité de passage
    Homme Profil pro
    Enseignant
    Inscrit en
    mars 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : mars 2011
    Messages : 6
    Points : 2
    Points
    2

    Par défaut

    Bonjour,

    en fait, je voulais d'abord sélectionner tous les mots à encadrer par \tx{} (plusieurs dizaines dans un document) puis appliquer une seule fois la macro.

    Cela sous-entendait une sélection multiple "à la word" avec CTRL enfoncé, mais je viens de me rendre compte que ça ne marche pas sous Emacs...

    Je viens de trouver une package multi-select.el, je vais essayer de l'utiliser en ce sens...

    Merci pour la réponse.

  4. #4
    LLB
    LLB est déconnecté
    Membre Expert
    Inscrit en
    mars 2002
    Messages
    962
    Détails du profil
    Informations forums :
    Inscription : mars 2002
    Messages : 962
    Points : 1 128
    Points
    1 128

    Par défaut

    Au final, le but est de faire du remplacement, donc M-x replace-string est le plus simple.

    Code :
    1
    2
    3
    M-x replace-string
    motSelectionné
    \tx{motSelectionné}
    Si besoin, il y a aussi query-replace (ou M-%) qui demande confirmation pour chaque occurrence, replace-regexp (qui permet de remplacer selon une expression rationnelle) et query-replace-regexp (ou C-M-%).

  5. #5
    Invité de passage
    Homme Profil pro
    Enseignant
    Inscrit en
    mars 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : mars 2011
    Messages : 6
    Points : 2
    Points
    2

    Par défaut solution

    Bonjour,

    merci pour la réponse, mais en fait je n'ai pas été assez précis dans mon explication, je remets donc mon exemple:

    Exemple:
    sélection multiple
    ------------------------------------------------------------
    bla bla bla Selections_1 bla
    bla bla bla bla selections_2 bla
    ------------------------------------------------------------
    résultat après appel fonction ou macro
    ------------------------------------------------------------
    bla bla bla \tx{Selections_1} bla
    bla bla bla bla \tx{selections_2} bla
    ------------------------------------------------------------

    avec Selections_ des sélections de un ou plusieurs mots et pas les mêmes...
    c'est pourquoi M-x replace-string ne suffit pas.

    J'ai réussi à obtenir le résultat voulu en utilisant la fonction multi-select-wrap-perso du package multi-select.el dans la fonction suivante:

    (defun insert-tx-select () "insert \tx sur selection"(interactive)
    (multi-select-wrap-perso "\\tx\{" "}"))

    Pour obtenir multi-select-wrap-perso, j'ai modifié une fonction du package qui insérait un préfixe et un suffixe autour de la multi-sélection mais demandait les deux arguments de manière intéractive.

  6. #6
    Membre Expert
    Inscrit en
    avril 2008
    Messages
    981
    Détails du profil
    Informations forums :
    Inscription : avril 2008
    Messages : 981
    Points : 2 160
    Points
    2 160

    Par défaut

    Citation Envoyé par crespo12 Voir le message
    Bonjour,

    merci pour la réponse, mais en fait je n'ai pas été assez précis dans mon explication, je remets donc mon exemple:

    Exemple:
    sélection multiple
    ------------------------------------------------------------
    bla bla bla Selections_1 bla
    bla bla bla bla selections_2 bla
    ------------------------------------------------------------
    résultat après appel fonction ou macro
    ------------------------------------------------------------
    bla bla bla \tx{Selections_1} bla
    bla bla bla bla \tx{selections_2} bla
    ------------------------------------------------------------

    avec Selections_ des sélections de un ou plusieurs mots et pas les mêmes...
    c'est pourquoi M-x replace-string ne suffit pas.

    J'ai réussi à obtenir le résultat voulu en utilisant la fonction multi-select-wrap-perso du package multi-select.el dans la fonction suivante:

    (defun insert-tx-select () "insert \tx sur selection"(interactive)
    (multi-select-wrap-perso "\\tx\{" "}"))

    Pour obtenir multi-select-wrap-perso, j'ai modifié une fonction du package qui insérait un préfixe et un suffixe autour de la multi-sélection mais demandait les deux arguments de manière intéractive.
    Bonjour,

    il existe une manière qui me semble plus habituelle pour un emacsien:
    elle consiste à faire une macro (ou une fonction à lier à une clé) qu'on appelle sur chaque sélection.
    par exemple: sélectionner le premier mot puis définir la macro par:
    Code :
    C-x ( C-w \tx{ C-y } C-x )
    puis sélectionner autre chose et exécuter la macro par
    L'inconvénient par rapport à la sélection multiple, c'est qu'il faut retaper "C-x e" pour chaque nouvelle sélection.
    )jack(

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •