[Auctex] sos regexp
Le
JJ. Rétorré
Je n'arrive pas à composer une regexp de remplacement dans
query-replace-regexp pour remplacer la chaîne "<texte>" par
\og{}<texte>\fg{} quand <texte> contient des retours à la ligne.
Tout aussi bien, j'aimerais remplacer *<texte>* par \emph{<texte>} et
bien évidemment je n'y arrive pas non plus.
Si quelqu'un peut m'aider
--
JJR
query-replace-regexp pour remplacer la chaîne "<texte>" par
\og{}<texte>\fg{} quand <texte> contient des retours à la ligne.
Tout aussi bien, j'aimerais remplacer *<texte>* par \emph{<texte>} et
bien évidemment je n'y arrive pas non plus.
Si quelqu'un peut m'aider
--
JJR

Poser une question


Avec ça ? :
"([^"]+)"
remplacer par
\og 1\fg
et
*([^*]+)*
remplacer par
\emph{1}
au passage je ne mets pas de {} car je charge systématiquement xspace
mais si tu les veux...
jeqça
--
Le TeXnicien de surface
Super ça marche. Le truc, c'est que j'aimerais bien comprendre pourquoi
ça marche. J'ai parcouru info Emacs, sans doute d'une oreille distraite
:-) la chaîne de remplacement 1 m'était passé à côté, ça manque un peu
d'exemple, et l'anglais, ce n'est pas vraiment ma langue naturelle...
Quel est le rôle des ( .. ), et ou puis-je trouver ça dans info Emacs
? Y a-t-il mieux comme doc ?
Pareil, le rôle des parenthèses m'a échappé.
Grand merci, me voilà boosté pour de nouvelles aventures.
--
JJR.
[SNIP]
Pendant que tiens un spécialiste, j'ai aussi besoin de remplacer toutes
(ou presque toutes) les espaces suivant un nombre par une espace
insécable. Pour l'instant je fais en deux temps par
query-replace-regexp : substituer '1~' à '[0-9]+ ' Puis comme il reste
l'espace, je la supprime par un query-replace. Y a-t-il moyen de faire
ça en une fois? sinon, il faut écrire une fonction en elisp ?
--
JJR.
Ma science toute relative des regexp me vient du bouquin /Maitrise des
expressions régulières/ paru chez O'Reilly. La 2e édition a été traduite
en français (2003) mais elle est donnée comme indisponible sur amazon.
Ça doit trainer dans des bibliothèques universitaires. La 3e éd.
anglaise est plus à jour mais je ne crois pas qu'elle ait été traduite
en français.
Pour emacs j'ai parcouru les manuels en ligne mais ce n'est pas très
sexy et, en effet, ça manque un peu d'exemples. :-/
Je vais tenter une explication en espérant être assez clair :
Avec [^"] je récupère un caractère qui n'est pas un " et donc aussi les
sauts de ligne (ce que ne fait pas le point . qui correspond à tout
caractère sauf le saut de ligne). [^"]+ correspond donc à une chaine
d'au moins 1 caractère qui n'est pas ". Avec ( et ) je capture la
chaine, ce qui me permet de m'en reservir ensuite avec 1. Si j'ai deux
captures comme ([1-9])([a-z]+), je peux utiliser 1 et 2, etc.
Donc finalement, "([^"]+)" recherche une chaine de caractères y
compris un saut de ligne compris entre " et " et la capture pour usage
futur éventuel.
Réponse très sommaire :
Les macros og et fg ne prenant pas d'argument, comme toute macro sans
argument, mangent les blancs qui sont derrière.
(Essayer «TeX et» pour voir). La présence des accolades {} va
empêcher TeX de manger les blancs qui suivent. En fait, comme og place
un espace insécable derrière le guillemet ouvrant, il faudra coder
"og{}truc machin " car og{} truc machin donnera
guillemet ouvrant espace insécable espace normal truc
donc trop de blanc entre le guillemet et truc et risque de retrouver le
texte à la ligne avec le malheureux « tout seul au bout.
Pour fg il faudra "fg{} suite" pour éviter "»suite" sauf que, si
xspace est chargé, "fg suite" marche tout aussi bien.
Finalement, c'est bien mieux sans {} et avec xspace. :)
De rien. Bonne route.
--
Le TeXnicien de surface
Oula ! comme il y va, lui ! Un spécialiste ! (J'ai les chevilles qui
enflent tellement que j'ai dû quitter mes bottes pour des charentaises.)
j'ai aussi besoin de remplacer toutes
S'il y a bien un espace derrière [0-9]+ ça doit en manger un.
Donc "17 truc" doit devenir "17~truc". Si tu veux remplacer plus d'un
espace, ce que je fais c'est (mais il y a peut-être moyen d'alléger la
notation) "[0-9]+[ ]+" et je remplace par 1~
jeqça
--
Le TeXnicien de surface