Discussion:
fonction
(trop ancien pour répondre)
Stéphane Dutailly
2019-12-29 18:05:09 UTC
Permalink
Bonjour à tous,

J'ai une fonction maj-fin-theoreme que j'utilise beaucoup et que
plusieurs ici m'avaient aidé à créer. Elle me permet de compter le
nombre d'occurences d'un environnement «thm» dans un fichier tex et
d'afficher après chacun le numéro correspondant. Concrètement, si j'ai:

\begin{thm}
bla bla
\end{thm}

\begin{thm}
blo blo
\end{thm}

\begin{thm}
bli bli
\end{thm}

et que je lance ma fonction maj-fin-theoreme, j'obtiens ceci:

\begin{thm}
bla bla
\end{thm}
% 1

\begin{thm}
blo blo
\end{thm}
% 2

\begin{thm}
bli bli
\end{thm}
% 3

(et si je rajoute ou supprime un environnement thm, que je relance ma
fonction, tous les numéros sont remis à jour).
La fonction est la suivante:

(defun maj-fin-theoreme ()
"écris le numéro du theoreme"
(interactive)
(save-excursion
(goto-char (point-min))
(let ((compteur 1))
(while (re-search-forward "\\\\end{thm" nil t)
(beginning-of-line 2)
(if
(looking-at "%\\s-+[0-9]+$")
(replace-match (format "%% %d" compteur) t)
(insert (format "%% %d\n" compteur)))
(setq compteur (1+ compteur)))
)))

Il y a deux choses en plus que j'aimerais rajouter à cette fonction:

- plutôt que d'afficher % 1, j'aimerais que cela affiche % thm 1 (ou % 1
thm); j'ai essayé des choses du type (insert (format "%% %d\n thm"
compteur)) ou (insert (format "%% %d\n" "thm" compteur)) ou (insert
(format "%% %d\n" compteur) "thm") mais ça ne marche pas.

- j'aimerais que le compteur ne tienne pas seulement compte de
l'environnement «thm» dans sa recherche, mais aussi d'un environnement
«prop» par exemple de façon à avoir ceci après l'exécution de la fonction:

\begin{thm}
bla bla
\end{thm}
% 1

\begin{prop}
blo blo
\end{prop}
% 2

\begin{thm}
bli bli
\end{thm}
% 3

J'ai essayé des choses du type (re-search-forward "\\\\end{thm"
"\\\\end{thm" nil t) mais ça ne donne rien.


Voila, si certains parmi vous ont des idées de comment modifier la
fonction, je leur en serai très reconnaissant.

Merci de m'avoir lu jusqu'au bout et bonnes fêtes à tous!

Stéphane
Jean-Jacques Rétorré
2019-12-30 18:55:14 UTC
Permalink
Post by Stéphane Dutailly
Bonjour à tous,
J'ai une fonction maj-fin-theoreme que j'utilise beaucoup et que
plusieurs ici m'avaient aidé à créer. Elle me permet de compter le
nombre d'occurences d'un environnement «thm» dans un fichier tex et
\begin{thm}
bla bla
\end{thm}
\begin{thm}
blo blo
\end{thm}
\begin{thm}
bli bli
\end{thm}
\begin{thm}
bla bla
\end{thm}
% 1
\begin{thm}
blo blo
\end{thm}
% 2
\begin{thm}
bli bli
\end{thm}
% 3
(et si je rajoute ou supprime un environnement thm, que je relance ma
fonction, tous les numéros sont remis à jour).
(defun maj-fin-theoreme ()
"écris le numéro du theoreme"
(interactive)
(save-excursion
(goto-char (point-min))
(let ((compteur 1))
(while (re-search-forward "\\\\end{thm" nil t)
(beginning-of-line 2)
(if
(looking-at "%\\s-+[0-9]+$")
(replace-match (format "%% %d" compteur) t)
(insert (format "%% %d\n" compteur)))
(setq compteur (1+ compteur)))
)))
- plutôt que d'afficher % 1, j'aimerais que cela affiche % thm 1 (ou %
1 thm); j'ai essayé des choses du type (insert (format "%% %d\n thm"
compteur)) ou (insert (format "%% %d\n" "thm" compteur)) ou (insert
(format "%% %d\n" compteur) "thm") mais ça ne marche pas.
- j'aimerais que le compteur ne tienne pas seulement compte de
l'environnement «thm» dans sa recherche, mais aussi d'un environnement
\begin{thm}
bla bla
\end{thm}
% 1
\begin{prop}
blo blo
\end{prop}
% 2
\begin{thm}
bli bli
\end{thm}
% 3
J'ai essayé des choses du type (re-search-forward "\\\\end{thm"
"\\\\end{thm" nil t) mais ça ne donne rien.
Voila, si certains parmi vous ont des idées de comment modifier la
fonction, je leur en serai très reconnaissant.
Merci de m'avoir lu jusqu'au bout et bonnes fêtes à tous!
Stéphane
La fonction que je propose post-commente un seul environnement. Pour en
traiter plusieurs, il suffit de l'appliquer plusieurs fois pour chacun
des environnements que l'on se propose de post-commenter.
J'ai un peu modifié ton code pour utliser des fonctions déjà présentes
dans AUCTeX et faciliter la maintenance. J'ai aussi changé le nom pour
qu'il n'y ait pas de confusion si tu veux tester les deux.

(defun LaTeX-post-comment-environment (env)
"Post commente la fin des environnements par le nom de l'environnement
et numérote"
(interactive "SEnvironnement ? ")
(save-excursion
(goto-char (point-min))
(let ((compteur 0))
(while (< (forward-sentence) (point-max))
(when (string=(LaTeX-current-environment) env)
(LaTeX-find-matching-end)
(setq compteur (1+ compteur))
(insert (format "\n%s %s %d" TeX-comment-start-regexp env
compteur)))))) )


Voici comment on peut programmer plusieurs applications successives,
j'ai la flemme de construire une fonction pour ça pour l'instant.

(mapcar
(lambda(e)(funcall #'LaTeX-post-comment-environment e))
(list "thm" "prop"))

J'ai testé sur ton exemple, je ne garantis pas qu'il ne puisse pas y
avoir des ajustements à faire pour des cas particuliers. C'est seulement
une proposition de départ.

Cordialement

--
JJR
Jean-Jacques Rétorré
2019-12-30 19:12:21 UTC
Permalink
Post by Jean-Jacques Rétorré
Post by Stéphane Dutailly
Bonjour à tous,
J'ai une fonction maj-fin-theoreme que j'utilise beaucoup et que
plusieurs ici m'avaient aidé à créer. Elle me permet de compter le
nombre d'occurences d'un environnement «thm» dans un fichier tex et
\begin{thm}
bla bla
\end{thm}
\begin{thm}
blo blo
\end{thm}
\begin{thm}
bli bli
\end{thm}
\begin{thm}
bla bla
\end{thm}
% 1
\begin{thm}
blo blo
\end{thm}
% 2
\begin{thm}
bli bli
\end{thm}
% 3
(et si je rajoute ou supprime un environnement thm, que je relance ma
fonction, tous les numéros sont remis à jour).
(defun maj-fin-theoreme ()
"écris le numéro du theoreme"
(interactive)
(save-excursion
(goto-char (point-min))
(let ((compteur 1))
(while (re-search-forward "\\\\end{thm" nil t)
(beginning-of-line 2)
(if
(looking-at "%\\s-+[0-9]+$")
(replace-match (format "%% %d" compteur) t)
(insert (format "%% %d\n" compteur)))
(setq compteur (1+ compteur)))
)))
- plutôt que d'afficher % 1, j'aimerais que cela affiche % thm 1 (ou %
1 thm); j'ai essayé des choses du type (insert (format "%% %d\n thm"
compteur)) ou (insert (format "%% %d\n" "thm" compteur)) ou (insert
(format "%% %d\n" compteur) "thm") mais ça ne marche pas.
- j'aimerais que le compteur ne tienne pas seulement compte de
l'environnement «thm» dans sa recherche, mais aussi d'un environnement
\begin{thm}
bla bla
\end{thm}
% 1
\begin{prop}
blo blo
\end{prop}
% 2
\begin{thm}
bli bli
\end{thm}
% 3
J'ai essayé des choses du type (re-search-forward "\\\\end{thm"
"\\\\end{thm" nil t) mais ça ne donne rien.
Voila, si certains parmi vous ont des idées de comment modifier la
fonction, je leur en serai très reconnaissant.
Merci de m'avoir lu jusqu'au bout et bonnes fêtes à tous!
Stéphane
La fonction que je propose post-commente un seul environnement. Pour en
traiter plusieurs, il suffit de l'appliquer plusieurs fois pour chacun
des environnements que l'on se propose de post-commenter.
J'ai un peu modifié ton code pour utliser des fonctions déjà présentes
dans AUCTeX et faciliter la maintenance. J'ai aussi changé le nom pour
qu'il n'y ait pas de confusion si tu veux tester les deux.
(defun LaTeX-post-comment-environment (env)
"Post commente la fin des environnements par le nom de l'environnement
et numérote"
(interactive "SEnvironnement ? ")
(save-excursion
(goto-char (point-min))
(let ((compteur 0))
(while (< (forward-sentence) (point-max))
(when (string=(LaTeX-current-environment) env)
(LaTeX-find-matching-end)
(setq compteur (1+ compteur))
(insert (format "\n%s %s %d" TeX-comment-start-regexp env
compteur)))))) )
Voici comment on peut programmer plusieurs applications successives,
j'ai la flemme de construire une fonction pour ça pour l'instant.
(mapcar
(lambda(e)(funcall #'LaTeX-post-comment-environment e))
(list "thm" "prop"))
Pour appliquer ce code, il suffit de l'inclure comme commentaire dans le
document LaTeX et de l'évaluer. En faire une commande est trivial.
Post by Jean-Jacques Rétorré
J'ai testé sur ton exemple, je ne garantis pas qu'il ne puisse pas y
avoir des ajustements à faire pour des cas particuliers. C'est seulement
une proposition de départ.
Cordialement
--
JJR
Stéphane Dutailly
2020-01-05 22:20:00 UTC
Permalink
Post by Jean-Jacques Rétorré
Post by Jean-Jacques Rétorré
Post by Stéphane Dutailly
Bonjour à tous,
J'ai une fonction maj-fin-theoreme que j'utilise beaucoup et que
plusieurs ici m'avaient aidé à créer. Elle me permet de compter le
nombre d'occurences d'un environnement «thm» dans un fichier tex et
\begin{thm}
bla bla
\end{thm}
\begin{thm}
blo blo
\end{thm}
\begin{thm}
bli bli
\end{thm}
\begin{thm}
bla bla
\end{thm}
% 1
\begin{thm}
blo blo
\end{thm}
% 2
\begin{thm}
bli bli
\end{thm}
% 3
(et si je rajoute ou supprime un environnement thm, que je relance ma
fonction, tous les numéros sont remis à jour).
(defun maj-fin-theoreme ()
"écris le numéro du theoreme"
(interactive)
(save-excursion
(goto-char (point-min))
(let ((compteur 1))
(while (re-search-forward "\\\\end{thm" nil t)
(beginning-of-line 2)
(if
(looking-at "%\\s-+[0-9]+$")
(replace-match (format "%% %d" compteur) t)
(insert (format "%% %d\n" compteur)))
(setq compteur (1+ compteur)))
)))
- plutôt que d'afficher % 1, j'aimerais que cela affiche % thm 1 (ou %
1 thm); j'ai essayé des choses du type (insert (format "%% %d\n thm"
compteur)) ou (insert (format "%% %d\n" "thm" compteur)) ou (insert
(format "%% %d\n" compteur) "thm") mais ça ne marche pas.
- j'aimerais que le compteur ne tienne pas seulement compte de
l'environnement «thm» dans sa recherche, mais aussi d'un environnement
\begin{thm}
bla bla
\end{thm}
% 1
\begin{prop}
blo blo
\end{prop}
% 2
\begin{thm}
bli bli
\end{thm}
% 3
J'ai essayé des choses du type (re-search-forward "\\\\end{thm"
"\\\\end{thm" nil t) mais ça ne donne rien.
Voila, si certains parmi vous ont des idées de comment modifier la
fonction, je leur en serai très reconnaissant.
Merci de m'avoir lu jusqu'au bout et bonnes fêtes à tous!
Stéphane
La fonction que je propose post-commente un seul environnement. Pour en
traiter plusieurs, il suffit de l'appliquer plusieurs fois pour chacun
des environnements que l'on se propose de post-commenter.
J'ai un peu modifié ton code pour utliser des fonctions déjà présentes
dans AUCTeX et faciliter la maintenance. J'ai aussi changé le nom pour
qu'il n'y ait pas de confusion si tu veux tester les deux.
(defun LaTeX-post-comment-environment (env)
"Post commente la fin des environnements par le nom de l'environnement
et numérote"
(interactive "SEnvironnement ? ")
(save-excursion
(goto-char (point-min))
(let ((compteur 0))
(while (< (forward-sentence) (point-max))
(when (string=(LaTeX-current-environment) env)
(LaTeX-find-matching-end)
(setq compteur (1+ compteur))
(insert (format "\n%s %s %d" TeX-comment-start-regexp env
compteur)))))) )
Voici comment on peut programmer plusieurs applications successives,
j'ai la flemme de construire une fonction pour ça pour l'instant.
(mapcar
(lambda(e)(funcall #'LaTeX-post-comment-environment e))
(list "thm" "prop"))
Pour appliquer ce code, il suffit de l'inclure comme commentaire dans le
document LaTeX et de l'évaluer. En faire une commande est trivial.
Post by Jean-Jacques Rétorré
J'ai testé sur ton exemple, je ne garantis pas qu'il ne puisse pas y
avoir des ajustements à faire pour des cas particuliers. C'est seulement
une proposition de départ.
Cordialement
--
JJR
Bonjour,

Merci Jean-Jacques pour cette proposition. J'ai testé; ça commente bien
mais le problème, c'est que contrairement à la fonction que j'avais, ça
n'efface pas le commentaire précédent pour remettre le bon. Je m'explique:
si j'ai:
\begin{thm}
mon premier thm
\end{thm}
% 1

\begin{thm}
mon deuxième thm
\end{thm}
% 2

\begin{thm}
mon troisième thm
\end{thm}
% 3

que je supprime «mon deuxième théorème» et que je lance
LaTeX-post-comment-environnement, cela me donne:

\begin{thm}
mon premier thm
\end{thm}
% 1
% 1

\begin{thm}
mon troisième thm
\end{thm}
% 2
% 3

alors qu'avec ma fonction maj-fin-theoreme j'obtiens

\begin{thm}
mon premier thm
\end{thm}
% 1

\begin{thm}
mon troisième thm
\end{thm}
% 2

ce qui correspond plus à ce que je souhaite. Je ne sais pas si on peut
modifier facilement dans ta proposition pour que cela fasse la même
chose, je ne veux pas t'embêter trop ;-)

Par rapport à ma question initiale, je crois que ce que j'aimerais
surtout modifier c'est comment afficher « % thm 1 » plutôt que « % 1 ».
Je suppose que tout est dans le (pour ma fonction maj-fin-theoreme)

(replace-match (format "%% %d" compteur) t)
(insert (format "%% %d\n" compteur)))

ou bien dans (pour la fonction LaTeX-post-comment-environnement):

(insert (format "\n%s %s %d" TeX-comment-start-regexp env compteur)

mais je n'arrive pas à modifier efficacement ces lignes.
Si quelqu'un peut juste m’éclaircir cela, ce sera super (le fait que la
fonction reconnaisse «thm» et «prop» n'est pas le plus important, je
peux contourner le problème).

Jean-Jacques, dans ta proposition, je n'ai pas bien compris comment
évaluer le bout de code:

(mapcar
(lambda(e)(funcall #'LaTeX-post-comment-environment e))
(list "thm" "prop"))

J'ai essayé de commenter et de lancer des commandes du type M-x
eval-buffer mais ça n'a rien donné. J'ai essayé cela dans mon .emacs:

(defun repete-LaTeX-post-comment-environment ()
(mapcar
(lambda(e)(funcall #'LaTeX-post-comment-environment e))
(list "thm" "prop")))

mais cette fonction ne semble pas reconnue.
Vois-tu ce que je fais de travers?

Encore un gros merci en tous cas!!

Stéphane
Jean-Jacques Rétorré
2020-01-06 08:43:50 UTC
Permalink
Post by Stéphane Dutailly
Bonjour,
Merci Jean-Jacques pour cette proposition. J'ai testé; ça commente
bien mais le problème, c'est que contrairement à la fonction que
j'avais, ça n'efface pas le commentaire précédent pour remettre le
\begin{thm}
mon premier thm
\end{thm}
% thm 1
Post by Stéphane Dutailly
% 1
\begin{thm}
mon deuxième thm
\end{thm}
% thm 2
Post by Stéphane Dutailly
% 2
\begin{thm}
mon troisième thm
\end{thm}
% thm 3
Post by Stéphane Dutailly
% 3
que je supprime «mon deuxième théorème» et que je lance
\begin{thm}
mon premier thm
\end{thm}
% thm 4
Post by Stéphane Dutailly
% 1
% 1
\begin{thm}
mon troisième thm
\end{thm}
% thm 5
Post by Stéphane Dutailly
% 2
% 3
alors qu'avec ma fonction maj-fin-theoreme j'obtiens
\begin{thm}
mon premier thm
\end{thm}
% thm 6
Post by Stéphane Dutailly
% 1
\begin{thm}
mon troisième thm
\end{thm}
% thm 7
Post by Stéphane Dutailly
% 2
ce qui correspond plus à ce que je souhaite. Je ne sais pas si on peut
modifier facilement dans ta proposition pour que cela fasse la même
chose, je ne veux pas t'embêter trop ;-)
Par rapport à ma question initiale, je crois que ce que j'aimerais
surtout modifier c'est comment afficher « % thm 1 » plutôt que « % 1 ».
Je suppose que tout est dans le (pour ma fonction maj-fin-theoreme)
(replace-match (format "%% %d" compteur) t)
(insert (format "%% %d\n" compteur)))
(insert (format "\n%s %s %d" TeX-comment-start-regexp env compteur)
mais je n'arrive pas à modifier efficacement ces lignes.
Si quelqu'un peut juste m’éclaircir cela, ce sera super (le fait que
la fonction reconnaisse «thm» et «prop» n'est pas le plus important,
je peux contourner le problème).
Jean-Jacques, dans ta proposition, je n'ai pas bien compris comment
(mapcar
(lambda(e)(funcall #'LaTeX-post-comment-environment e))
(list "thm" "prop"))
J'ai essayé de commenter et de lancer des commandes du type M-x
(defun repete-LaTeX-post-comment-environment ()
(mapcar
(lambda(e)(funcall #'LaTeX-post-comment-environment e))
(list "thm" "prop")))
mais cette fonction ne semble pas reconnue.
Vois-tu ce que je fais de travers?
Encore un gros merci en tous cas!!
Stéphane
Toutes mes excuses, j'avais oublié de considérer ce cas. Il suffit
de supprimer toutes les lignes de commentaires précédemment insérées par
la fonction (et elles le seront toutes, y comprises celles qui
pourraient avoir été insérées autrement que par la fonction)

La fonction /delete-matching-lines/ le fait

,----
| (defun LaTeX-post-comment-environment (env)
| "Post commente la fin des environnements par le nom de l'environnement
| et numérote"
| (interactive "SEnvironnement ? ")
| (save-excursion
| ;; Supprime les post-commentaires précédents
| (delete-matching-lines
| (format "%s\\ +%s\\ +[1-9][0-9]*.*" TeX-comment-start-regexp env) )
| ;; post-commmentaires numérotés
| (goto-char (if (region-active-p) (region-beginning) (point-min)))
| (let ((compteur 0)
| (fin (if (region-active-p) (region-end) (point-max))))
| (while (forward-word)
| (when (string=(LaTeX-current-environment) env)
| (LaTeX-find-matching-end)
| (setq compteur (1+ compteur))
| (insert (format "\n%s %s %d" TeX-comment-start-regexp env
| compteur))))))) )
`----


La commande que j'ai proposée est à insérer dans le source LaTeX en
commentaire et à évaluer par C-x C-e

J'ai écrit une commande qui fait la même chose que l'on peut activer de
manière interactive par /M-x LaTeX-post-comment-multiple-environment/ ou
comme précédemment en évaluant le code elisp en commentaires dans le
source LaTeX

% (LaTeX-post-comment-multiple-environment (list "thm" "prop")) <-- C-x C-e

,----
| (defun LaTeX-post-comment-multiple-environment (environnements)
| (interactive
| (let ((env (read-string"Environnement (<RET> pour terminer): ")) (l'()))
| (while (not(string-empty-p env))
| (push env l)
| (setq env (read-string"Environnement : "))
| )
| (list l)))
| (mapcar
| (lambda(e)(funcall #'LaTeX-post-comment-environment e))
| environnements))
`----


On peut bien entendu affecter n'importe quelle séquence de touche
disponible à ces commandes. Par exemple en utilisant l'extension
bind-keys installée par Elpa

(bind-keys :map LaTeX-mode-map
("<f10> c" . LaTeX-comment-environment)
("<f10> C" . LaTeX-comment-multiple-environment))

Ou tout autre choix de touches selon les goûts.

--
JJR.
Jean-Jacques Rétorré
2020-01-06 08:55:33 UTC
Permalink
Post by Jean-Jacques Rétorré
On peut bien entendu affecter n'importe quelle séquence de touche
disponible à ces commandes. Par exemple en utilisant l'extension
bind-keys installée par Elpa
(bind-keys :map LaTeX-mode-map
("<f10> c" . LaTeX-comment-environment)
("<f10> C" . LaTeX-comment-multiple-environment))
*Errata*
(bind-keys :map LaTeX-mode-map
("<f10> c" . LaTeX-post-comment-environment)
("<f10> C" . LaTeX-post-comment-multiple-environment))


--
JJR.
Jean-Jacques Rétorré
2020-01-07 07:22:25 UTC
Permalink
Post by Stéphane Dutailly
Bonjour,
Merci Jean-Jacques pour cette proposition. J'ai testé; ça commente
bien mais le problème, c'est que contrairement à la fonction que
j'avais, ça n'efface pas le commentaire précédent pour remettre le
bon.
J'avais omis cette contrainte, j'ai rectifié

,----
| (defun LaTeX-post-comment-environment (env)
| "Post-commente la fin des environnements par le nom de l'environnement
| et numérote"
| (interactive "SEnvironnement ? ")
| (save-excursion
| (goto-char (point-min))
| (delete-matching-lines(format "%s\\ +%s\\ +[1-9][0-9]*.*" TeX-comment-start-regexp env))
| (let ((compteur 0))
| (while (forward-word)
| (when (string=(LaTeX-current-environment) env)
| (LaTeX-find-matching-end)
| (setq compteur (1+ compteur))
| (insert (format "\n%s %s %d" TeX-comment-start-regexp env
| compteur))))))) )
`----
Post by Stéphane Dutailly
\begin{thm}
mon premier thm
\end{thm}
% 1
\begin{thm}
mon deuxième thm
\end{thm}
% 2
\begin{thm}
mon troisième thm
\end{thm}
% 3
que je supprime «mon deuxième théorème» et que je lance
\begin{thm}
mon premier thm
\end{thm}
% 1
% 1
\begin{thm}
mon troisième thm
\end{thm}
% 2
% 3
alors qu'avec ma fonction maj-fin-theoreme j'obtiens
\begin{thm}
mon premier thm
\end{thm}
% 1
\begin{thm}
mon troisième thm
\end{thm}
% 2
ce qui correspond plus à ce que je souhaite. Je ne sais pas si on peut
modifier facilement dans ta proposition pour que cela fasse la même
chose, je ne veux pas t'embêter trop ;-)
Par rapport à ma question initiale, je crois que ce que j'aimerais
surtout modifier c'est comment afficher « % thm 1 » plutôt que « % 1 ».
Je suppose que tout est dans le (pour ma fonction maj-fin-theoreme)
(replace-match (format "%% %d" compteur) t)
(insert (format "%% %d\n" compteur)))
(insert (format "\n%s %s %d" TeX-comment-start-regexp env compteur)
mais je n'arrive pas à modifier efficacement ces lignes.
Si quelqu'un peut juste m’éclaircir cela, ce sera super (le fait que
la fonction reconnaisse «thm» et «prop» n'est pas le plus important,
je peux contourner le problème).
Jean-Jacques, dans ta proposition, je n'ai pas bien compris comment
(mapcar
(lambda(e)(funcall #'LaTeX-post-comment-environment e))
(list "thm" "prop"))
J'ai essayé de commenter et de lancer des commandes du type M-x
(defun repete-LaTeX-post-comment-environment ()
(mapcar
(lambda(e)(funcall #'LaTeX-post-comment-environment e))
(list "thm" "prop")))
mais cette fonction ne semble pas reconnue.
Vois-tu ce que je fais de travers?
La commande que j'ai proposée est à insérer dans le source LaTeX en
commentaire et à évaluer par C-x C-e

J'ai écrit une commande qui fait la même chose que l'on peut activer de
manière interactive par /M-x LaTeX-post-comment-multiple-environment/ ou
comme précédemment en évaluant le code elisp en commentaires dans le
source LaTeX. Placer le point à derrière la parenthèse limitant la forme
et évaluer par C-x C-e

% (LaTeX-post-comment-multiple-environment (list "thm" "prop")) <-- C-x C-e

Je recommande cette façon de faire si les environnements à marquer sont
constants. ça évite d'avoir à les saisir à chaque appel de la fonction.

,----
| (defun LaTeX-post-comment-multiple-environment (environnements)
| (interactive
| (let ((env (read-string"Environnement (<RET> pour terminer): ")) (l'()))
| (while (not(string-empty-p env))
| (push env l)
| (setq env (read-string"Environnement : "))
| )
| (list l)))
| (mapcar
| (lambda(e)(funcall #'LaTeX-post-comment-environment e))
| environnements))
`----


On peut bien entendu affecter n'importe quelle séquence de touche
disponible à ces commandes. Par exemple en utilisant l'extension
bind-keys installée par Elpa

(bind-keys :map LaTeX-mode-map
("<f5> c" . LaTeX-post-comment-environment)
("<f5> C" . LaTeX-post-comment-multiple-environment))

Ou tout autre choix de touches selon les goûts.

--
JJR.
Stéphane Dutailly
2020-01-07 20:52:28 UTC
Permalink
Post by Jean-Jacques Rétorré
J'avais omis cette contrainte, j'ai rectifié
,----
| (defun LaTeX-post-comment-environment (env)
| "Post-commente la fin des environnements par le nom de l'environnement
| et numérote"
| (interactive "SEnvironnement ? ")
| (save-excursion
| (goto-char (point-min))
| (delete-matching-lines(format "%s\\ +%s\\ +[1-9][0-9]*.*" TeX-comment-start-regexp env))
| (let ((compteur 0))
| (while (forward-word)
| (when (string=(LaTeX-current-environment) env)
| (LaTeX-find-matching-end)
| (setq compteur (1+ compteur))
| (insert (format "\n%s %s %d" TeX-comment-start-regexp env
| compteur))))))) )
`----
La commande que j'ai proposée est à insérer dans le source LaTeX en
commentaire et à évaluer par C-x C-e
J'ai écrit une commande qui fait la même chose que l'on peut activer de
manière interactive par /M-x LaTeX-post-comment-multiple-environment/ ou
comme précédemment en évaluant le code elisp en commentaires dans le
source LaTeX. Placer le point à derrière la parenthèse limitant la forme
et évaluer par C-x C-e
% (LaTeX-post-comment-multiple-environment (list "thm" "prop")) <-- C-x C-e
Je recommande cette façon de faire si les environnements à marquer sont
constants. ça évite d'avoir à les saisir à chaque appel de la fonction.
,----
| (defun LaTeX-post-comment-multiple-environment (environnements)
| (interactive
| (let ((env (read-string"Environnement (<RET> pour terminer): ")) (l'()))
| (while (not(string-empty-p env))
| (push env l)
| (setq env (read-string"Environnement : "))
| )
| (list l)))
| (mapcar
| (lambda(e)(funcall #'LaTeX-post-comment-environment e))
| environnements))
`----
On peut bien entendu affecter n'importe quelle séquence de touche
disponible à ces commandes. Par exemple en utilisant l'extension
bind-keys installée par Elpa
(bind-keys :map LaTeX-mode-map
("<f5> c" . LaTeX-post-comment-environment)
("<f5> C" . LaTeX-post-comment-multiple-environment))
Ou tout autre choix de touches selon les goûts.
--
JJR.
Super!! C'est exactement ce que je voulais! En plus, je ne connaissais
pas C-x C-e pour évaluer la fonction. Un gros gros merci!

Juste un petit bémol, si ce n'est pas trop abuser. Je me suis aperçu que
si j'ai deux environnements imbriqués l'un à la suite de l'autre, cela
cause une erreur. Je m'explique: si j'ai

\begin{thm}
coucou
\begin{enumerate}
\item blabla
\end{enumerate}
\end{thm}

\begin{thm}
\begin{enumerate}
\item truc
\end{enumerate}
\end{thm}

\begin{thm}
bidule
\begin{enumerate}
\item bla
\end{enumerate}
\end{thm}

puis je lance LaTeX-post-comment-multiple-environment, j'obtiens:

\begin{thm}
coucou
\begin{enumerate}
\item blabla
\end{enumerate}
% thm 1
\end{thm}

\begin{thm}
\begin{enumerate}
\item truc
\end{enumerate}
% thm 2
\end{thm}
% thm 3

\begin{thm}
bidule
\begin{enumerate}
\item bla
\end{enumerate}
\end{thm}
% thm 4

Y a-t-il une solution simple? (sinon je peux contourner le problème en
mettant:
\begin{thm} % a
\begin{enumerate}
...
et alors la numérotation est correcte.

Merci encore!
Stéphane
Jean-Jacques Rétorré
2020-01-08 07:43:06 UTC
Permalink
Post by Stéphane Dutailly
Juste un petit bémol, si ce n'est pas trop abuser. Je me suis aperçu
que si j'ai deux environnements imbriqués l'un à la suite de l'autre,
cela cause une erreur. Je m'explique: si j'ai
\begin{thm}
coucou
\begin{enumerate}
\item blabla
\end{enumerate}
\end{thm}
\begin{thm}
\begin{enumerate}
\item truc
\end{enumerate}
\end{thm}
\begin{thm}
bidule
\begin{enumerate}
\item bla
\end{enumerate}
\end{thm}
\begin{thm}
coucou
\begin{enumerate}
\item blabla
\end{enumerate}
% thm 1
\end{thm}
\begin{thm}
\begin{enumerate}
\item truc
\end{enumerate}
% thm 2
\end{thm}
% thm 3
\begin{thm}
bidule
\begin{enumerate}
\item bla
\end{enumerate}
\end{thm}
% thm 4
Y a-t-il une solution simple? (sinon je peux contourner le problème en
\begin{thm} % a
\begin{enumerate}
...
et alors la numérotation est correcte.
Voilà, c'est corrigé je pense, au moins pour ce bug là.


,----
| (defun LaTeX-post-comment-environment (env)
| "Post commente la fin des environnements par le nom de l'environnement
| et numérote"
| (interactive "SEnvironnement ? ")
| (save-excursion
| (goto-char (point-min))
| (delete-matching-lines(format "%s\\ +%s\\ +[1-9][0-9]*.*"
| TeX-comment-start-regexp env))
| (let ((compteur 0))
| (while (< (point) (point-max))
| (forward-list)
| (when (string=(LaTeX-current-environment) env)
| (LaTeX-find-matching-end)
| (setq compteur (1+ compteur))
| (insert (format "\n%s %s %d" TeX-comment-start-regexp env
| compteur)))))))
`----

--
JJR
Stéphane Dutailly
2020-01-08 21:15:53 UTC
Permalink
Post by Jean-Jacques Rétorré
Voilà, c'est corrigé je pense, au moins pour ce bug là.
,----
| (defun LaTeX-post-comment-environment (env)
| "Post commente la fin des environnements par le nom de l'environnement
| et numérote"
| (interactive "SEnvironnement ? ")
| (save-excursion
| (goto-char (point-min))
| (delete-matching-lines(format "%s\\ +%s\\ +[1-9][0-9]*.*"
| TeX-comment-start-regexp env))
| (let ((compteur 0))
| (while (< (point) (point-max))
| (forward-list)
| (when (string=(LaTeX-current-environment) env)
| (LaTeX-find-matching-end)
| (setq compteur (1+ compteur))
| (insert (format "\n%s %s %d" TeX-comment-start-regexp env
| compteur)))))))
`----
--
JJR
Super! Ça marche parfaitement! J'ai une dernière question: y a-t-il
moyen d'en faire aussi une version qui s'applique à des environnements
prédéfinis? (exercise et thm par exemple) J'ai pensé à quelque chose comme:

(defun LaTeX-post-comment-predefini ()
(interactive)
(LaTeX-post-comment-environment (exercise))
(LaTeX-post-comment-environment (thm)))

mais ça me paraissait trop simple et effectivement ça ne fonctionne pas
(j'obtiens: Symbol's function definition is void: exercise)

En tous cas merci pour cette fonction qui correspond parfaitement à mes
besoins (je l'utilise avec «fold» ça me permet de réduire mes
environnements tout en ayant une numérotation dynamique de chacun d'eux,
très pratique pour moi dans un gros fichier).

Stéphane
Jean-Jacques Rétorré
2020-01-09 05:55:50 UTC
Permalink
Post by Stéphane Dutailly
Post by Jean-Jacques Rétorré
Voilà, c'est corrigé je pense, au moins pour ce bug là.
,----
| (defun LaTeX-post-comment-environment (env)
| "Post commente la fin des environnements par le nom de l'environnement
| et numérote"
| (interactive "SEnvironnement ? ")
| (save-excursion
| (goto-char (point-min))
| (delete-matching-lines(format "%s\\ +%s\\ +[1-9][0-9]*.*"
| TeX-comment-start-regexp env))
| (let ((compteur 0))
| (while (< (point) (point-max))
| (forward-list)
| (when (string=(LaTeX-current-environment) env)
| (LaTeX-find-matching-end)
| (setq compteur (1+ compteur))
| (insert (format "\n%s %s %d" TeX-comment-start-regexp env
| compteur)))))))
Super! Ça marche parfaitement! J'ai une dernière question: y a-t-il
moyen d'en faire aussi une version qui s'applique à des environnements
(defun LaTeX-post-comment-predefini ()
(interactive)
(LaTeX-post-comment-environment (exercise))
(LaTeX-post-comment-environment (thm)))
mais ça me paraissait trop simple et effectivement ça ne fonctionne
pas (j'obtiens: Symbol's function definition is void: exercise)
La syntaxe de l'appel d'une fonction en Emacs lisp c'est
(<fonction> <arguments>)

de plus, aussi bien <fonction> que <arguments> sont évalués avant
l'évaluation de la forme. Si ces symboles ne sont pas définis,
l'évaluation retourne une erreur.

(defun LaTeX-post-comment-predefini ()
(interactive)
(LaTeX-post-comment-environment "exercise")
(LaTeX-post-comment-environment "thm"))

La valeur de "exercise", c'est "exercise"
Post by Stéphane Dutailly
En tous cas merci pour cette fonction qui correspond parfaitement à
mes besoins (je l'utilise avec «fold» ça me permet de réduire mes
environnements tout en ayant une numérotation dynamique de chacun
d'eux, très pratique pour moi dans un gros fichier).
Je suis très loin d'être un expert en elisp, je trouve amusant d'écrire
dans ce langage. Petit à petit j'apprends à coder en codant.

--
JJR

Continuer la lecture sur narkive:
Loading...