Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

changer parenthèses (fonction de P. Ivaldi)

17 réponses
Avatar
Stéphane Dutailly
Bonjour à tous,

J'explique un peu mon titre. Il me semble avoir vu un jour en parcourant
des fichiers de Philippe, une commande permettant de changer $(blabla)$
en $\left(blabla\right)$ dans un fichier .tex.
Je ne sais pas si j'ai rêvé cela (je ne crois pas) mais en tous cas à
l'époque c'était du chinois pour moi (je n'ai pas pris de notes, et pas
moyen de retrouver le fichier...) mais maintenant j'essaierais bien.
Est-ce que quelqu'un voit à quoi je fais référence? Philippe, si vous
passez par là...

Merci à tous,
Stéphane

10 réponses

1 2
Avatar
Daimrod
Stéphane Dutailly writes:

Bonjour à tous,

J'explique un peu mon titre. Il me semble avoir vu un jour en
parcourant des fichiers de Philippe, une commande permettant de
changer $(blabla)$ en $left(blablaright)$ dans un fichier .tex.
Je ne sais pas si j'ai rêvé cela (je ne crois pas) mais en tous cas à
l'époque c'était du chinois pour moi (je n'ai pas pris de notes , et
pas moyen de retrouver le fichier...) mais maintenant j'essaierais
bien.
Est-ce que quelqu'un voit à quoi je fais référence? Philip pe, si vous
passez par là...

Merci à tous,
Stéphane



http://stackoverflow.com/questions/8538688/how-can-you-modify-two-matching- delimiters-at-once-with-emacs

Ça à l'air de correspondre a ce que tu veux faire.

Cependant même si ça marche, je ne trouve pas que cela soit vraim ent
satisfaisant, j'ai ça dans mes TODO de faire quelque chose pour gà ©rer
les délimiteurs, simple caractère, chaine, regexp, ... Donc si ja mais
quelqu'un possède un bout de code comme ça, il me sauverait (ou p as) un
week end. :)
Avatar
JJ. Rétorré
Stéphane Dutailly disait le 01/03/12 que :

Bonjour à tous,

J'explique un peu mon titre. Il me semble avoir vu un jour en
parcourant des fichiers de Philippe, une commande permettant de
changer $(blabla)$ en $left(blablaright)$ dans un fichier .tex.
Je ne sais pas si j'ai rêvé cela (je ne crois pas) mais en tous cas à
l'époque c'était du chinois pour moi (je n'ai pas pris de notes, et
pas moyen de retrouver le fichier...) mais maintenant j'essaierais
bien.
Est-ce que quelqu'un voit à quoi je fais référence? Philippe, si vous
passez par là...

Merci à tous,
Stéphane



Un simple(?) query-replace-regexp peut le faire.
C-M-% $(([^$]*))$ <RET> $left(1right)$ <RET>
On peut toujours en faire une fonction interactive, ou plus simplement
une macro de clavier.


--
JJR.
Avatar
Stéphane Dutailly
http://stackoverflow.com/questions/8538688/how-can-you-modify-two-matching-delimiters-at-once-with-emacs

Ça à l'air de correspondre a ce que tu veux faire.



Effectivement, après quelques tests ça a l'air de bien faire le boulot
:-) J'ai quelques questions et/ou approfondissement qui me viennent du
coup, mais il faut que j'y réfléchisse...

Cependant même si ça marche, je ne trouve pas que cela soit vraiment
satisfaisant,



pourquoi?

j'ai ça dans mes TODO de faire quelque chose pour gérer
les délimiteurs, simple caractère, chaine, regexp, ... Donc si jamais
quelqu'un possède un bout de code comme ça, il me sauverait (ou pas) un
week end. :)



Un grand merci en tous cas.
Stéphane
Avatar
Stéphane Dutailly
Un simple(?) query-replace-regexp peut le faire.
C-M-% $(([^$]*))$<RET> $left(1right)$<RET>
On peut toujours en faire une fonction interactive, ou plus simplement
une macro de clavier.




Merci Jean-Jacques, je n'envisageais pas cela car pour l'instant je n'ai
jamais cherché à utiliser/comprendre les expressions régulières (cela me
paraît encore très obscur) et puis mon idée est aussi d'utiliser le code
pour l'adapter; mais du coup, je vais peut-être pouvoir aussi me lancer
sur les expressions régulières ;-)

Stéphane
Avatar
Daimrod
Stéphane Dutailly writes:

Cependant même si ça marche, je ne trouve pas que cela soit vr aiment
satisfaisant,



pourquoi?



Parce que gérer des délimiteurs comme (), left right, {} etc... c'est
la même chose. Donc faire une fonction qui gère uniquement le
remplacement de () par left right c'est dommage alors qu'il y aurait
moyen de gérer bien plus de choses.
Avatar
Daimrod
JJ. Rétorré <jj.r&torr&@gmail.com> writes:

Stéphane Dutailly disait le 01/03/12 que :

Bonjour à tous,

J'explique un peu mon titre. Il me semble avoir vu un jour en
parcourant des fichiers de Philippe, une commande permettant de
changer $(blabla)$ en $left(blablaright)$ dans un fichier .tex.
Je ne sais pas si j'ai rêvé cela (je ne crois pas) mais en tou s cas à
l'époque c'était du chinois pour moi (je n'ai pas pris de note s, et
pas moyen de retrouver le fichier...) mais maintenant j'essaierais
bien.
Est-ce que quelqu'un voit à quoi je fais référence? Phili ppe, si vous
passez par là...

Merci à tous,
Stéphane



Un simple(?) query-replace-regexp peut le faire.
C-M-% $(([^$]*))$ <RET> $left(1right)$ <RET>
On peut toujours en faire une fonction interactive, ou plus simplement
une macro de clavier.



Le problème des expressions régulières c'est justement quell es sont
régulières, donc pas moyen de gérer l'imbriquations. Mais po ur les cas
simples, je pense que c'est la meilleure méthode.
Avatar
Sebastien Vauban
Bonjour Daimrod,

Daimrod wrote:
JJ. Rétorré <jj.r&torr&@gmail.com> writes:
Stéphane Dutailly disait le 01/03/12 que :

Bonjour à tous,

J'explique un peu mon titre. Il me semble avoir vu un jour en
parcourant des fichiers de Philippe, une commande permettant de
changer $(blabla)$ en $left(blablaright)$ dans un fichier .tex.
Je ne sais pas si j'ai rêvé cela (je ne crois pas) mais en to us cas à
l'époque c'était du chinois pour moi (je n'ai pas pris de not es, et
pas moyen de retrouver le fichier...) mais maintenant j'essaierais
bien.
Est-ce que quelqu'un voit à quoi je fais référence? Phil ippe, si vous
passez par là...

Merci à tous,
Stéphane



Un simple(?) query-replace-regexp peut le faire.
C-M-% $(([^$]*))$ <RET> $left(1right)$ <RET>
On peut toujours en faire une fonction interactive, ou plus simplement
une macro de clavier.



Le problème des expressions régulières c'est justement que lles sont
régulières, donc pas moyen de gérer l'imbriquations. Mais pour les cas
simples, je pense que c'est la meilleure méthode.



Pas sûr de comprendre la signification exacte de "régulière" . Mais l'on peut
très bien mettre des groupes dans des groupes, via les parenthèse s. Je n'ai
pas de "use case" précis sous la main, mais des choses du style

(abc|deb(.*)fin)

sont envisageables (je n'ai pas mis les escapes). Et l'on peut accéder à
l'expression mère ou à l'expression fille (ici, ce qui serait au milieu, entre
"deb" et "fin").

Sincèrment,
Seb

--
Sebastien Vauban
Avatar
Ph. Ivaldi
Bonjour,

Le 03 janvier 2012, Stéphane Dutailly écrivit :
J'explique un peu mon titre. Il me semble avoir vu un jour en
parcourant des fichiers de Philippe, une commande permettant de
changer $(blabla)$ en $left(blablaright)$ dans un fichier .tex.
Je ne sais pas si j'ai rêvé cela (je ne crois pas) mais en tous cas à
l'époque c'était du chinois pour moi (je n'ai pas pris de notes, et
pas moyen de retrouver le fichier...) mais maintenant j'essaierais
bien.
Est-ce que quelqu'un voit à quoi je fais référence?



Oui :)

Philippe, si vous passez par là...



http://tinyurl.com/6uz8899

sélectionner la ligne:
(a + b * (c + d* (e + f))) - a * (c + d (e + f))
M-x pi-exp-paren-region <RET> produit:
Big(a + b * big(c + d* (e + f)big)Big) - a * big(c + d (e + f)big)

C'est un de mes premiers scripts en Elisp, ce n'est pas forcément un
exemple à suivre…
--
Philippe Ivaldi
http://www.piprime.fr/
Avatar
Daimrod
"Sebastien Vauban" writes:

Bonjour Daimrod,

Daimrod wrote:
JJ. Rétorré <jj.r&torr&@gmail.com> writes:
Stéphane Dutailly disait le 01/03/12 que :

Bonjour à tous,

J'explique un peu mon titre. Il me semble avoir vu un jour en
parcourant des fichiers de Philippe, une commande permettant de
changer $(blabla)$ en $left(blablaright)$ dans un fichier .tex.
Je ne sais pas si j'ai rêvé cela (je ne crois pas) mais en t ous cas à
l'époque c'était du chinois pour moi (je n'ai pas pris de no tes, et
pas moyen de retrouver le fichier...) mais maintenant j'essaierais
bien.
Est-ce que quelqu'un voit à quoi je fais référence? Phi lippe, si vous
passez par là...

Merci à tous,
Stéphane



Un simple(?) query-replace-regexp peut le faire.
C-M-% $(([^$]*))$ <RET> $left(1right)$ <RET>
On peut toujours en faire une fonction interactive, ou plus simplement
une macro de clavier.



Le problème des expressions régulières c'est justement qu elles sont
régulières, donc pas moyen de gérer l'imbriquations. Mais pour les cas
simples, je pense que c'est la meilleure méthode.



Pas sûr de comprendre la signification exacte de "régulièr e". Mais l'on peut
très bien mettre des groupes dans des groupes, via les parenthè ses. Je n'ai
pas de "use case" précis sous la main, mais des choses du style

(abc|deb(.*)fin)

sont envisageables (je n'ai pas mis les escapes). Et l'on peut accéd er à
l'expression mère ou à l'expression fille (ici, ce qui serait a u milieu, entre
"deb" et "fin").

Sincèrment,
Seb



Je fais référence à la notion de grammaire et d'expression r égulière
définie par la hiérarchie de Chomsky[1].

Les délimiteurs, comme les parenthèses, vont par pair, donc il fa ut les
manipuler ensemble. Mais une expression régulière ne permet pas d e gérer
des délimiteurs lorsqu'ils sont imbriqués.

(1 (2 3 4 (5 6) 7 8) 9 10)
----------------------^ Si mon curseur se trouve ici je veux manipuler
^------------------------^ ces parenthèses, pas les autres.

On « sent » bien que pour atteindre le bon délimiteur gauche il faut
mémoriser le nombre de délimiteur droit, et avoir le même no mbre de
délimiteur gauche, plus un, qui serra le délimiteur cherché. Bien
entendu, dans le cas où l'on rechercherait le délimiteur droit, on
inverserait les termes.

C'est cette notion de mémoire que ne permette pas les expressions ou
grammaire régulière. Pour cela, il faut utiliser un automate à   pile.

[1]: https://secure.wikimedia.org/wikipedia/fr/wiki/Hiérarchie_de_Cho msky
Avatar
Sebastien Vauban
Bonjour Daimrod,

Daimrod wrote:
"Sebastien Vauban" writes:
Daimrod wrote:
JJ. Rétorré <jj.r&torr&@gmail.com> writes:
Stéphane Dutailly disait le 01/03/12 que :

Bonjour à tous,

J'explique un peu mon titre. Il me semble avoir vu un jour en
parcourant des fichiers de Philippe, une commande permettant de
changer $(blabla)$ en $left(blablaright)$ dans un fichier .tex.
Je ne sais pas si j'ai rêvé cela (je ne crois pas) mais en tous cas à
l'époque c'était du chinois pour moi (je n'ai pas pris de n otes, et
pas moyen de retrouver le fichier...) mais maintenant j'essaierais
bien.
Est-ce que quelqu'un voit à quoi je fais référence? Ph ilippe, si vous
passez par là...

Merci à tous,
Stéphane



Un simple(?) query-replace-regexp peut le faire.
C-M-% $(([^$]*))$ <RET> $left(1right)$ <RET>
On peut toujours en faire une fonction interactive, ou plus simplement
une macro de clavier.



Le problème des expressions régulières c'est justement q uelles sont
régulières, donc pas moyen de gérer l'imbriquations. Mai s pour les cas
simples, je pense que c'est la meilleure méthode.



Pas sûr de comprendre la signification exacte de "réguliè re". Mais l'on peut
très bien mettre des groupes dans des groupes, via les parenthà ¨ses. Je n'ai
pas de "use case" précis sous la main, mais des choses du style

(abc|deb(.*)fin)

sont envisageables (je n'ai pas mis les escapes). Et l'on peut accé der à
l'expression mère ou à l'expression fille (ici, ce qui serait au milieu, entre
"deb" et "fin").



Je fais référence à la notion de grammaire et d'expression régulière
définie par la hiérarchie de Chomsky[1].

Les délimiteurs, comme les parenthèses, vont par pair, donc il faut les
manipuler ensemble. Mais une expression régulière ne permet pas de gérer
des délimiteurs lorsqu'ils sont imbriqués.

(1 (2 3 4 (5 6) 7 8) 9 10)
----------------------^ Si mon curseur se trouve ici je veux manipuler
^------------------------^ ces parenthèses, pas les autres.

On « sent » bien que pour atteindre le bon délimiteur gauc he il faut
mémoriser le nombre de délimiteur droit, et avoir le même nombre de
délimiteur gauche, plus un, qui serra le délimiteur cherchà ©. Bien
entendu, dans le cas où l'on rechercherait le délimiteur droit, on
inverserait les termes.

C'est cette notion de mémoire que ne permette pas les expressions ou
grammaire régulière. Pour cela, il faut utiliser un automate à pile.

[1]: https://secure.wikimedia.org/wikipedia/fr/wiki/Hiérarchie_de_C homsky



Merci pour ce rappel de fondamentaux auxquels j'ai, sans doute, aussi à ©té
exposé dans le passé...

Sincèrement,
Seb

--
Sebastien Vauban
1 2