macro big pour latex
Le
Ph. Idlavi
Bonjour,
Une région contient, par exemple, le texte suivant :
((des commandes (des commandes (des commandes (des commandes )des
commandes )des commandes )des commandes) des commandes)
je voudrais la convertir en :
\Bigg(\bigg(des commandes \Big(des commandes \big(des commandes (des
commandes )des commandes \big)des commandes \Big)des commandes\bigg) des
commandes\Bigg)
Quelqu'un pourrait-il m'indiquer un début de code pour effectuer la
conversion ?
Je ne vois même pas par où commencer
Merci de votre aide.
--
Philippe.
Une région contient, par exemple, le texte suivant :
((des commandes (des commandes (des commandes (des commandes )des
commandes )des commandes )des commandes) des commandes)
je voudrais la convertir en :
\Bigg(\bigg(des commandes \Big(des commandes \big(des commandes (des
commandes )des commandes \big)des commandes \Big)des commandes\bigg) des
commandes\Bigg)
Quelqu'un pourrait-il m'indiquer un début de code pour effectuer la
conversion ?
Je ne vois même pas par où commencer
Merci de votre aide.
--
Philippe.

Poser une question


Je commencerai comme ça :
(defvar mm-big-list '("Bigg" "bigg" "Big" "big"))
(defun mm-replace (list)
(when list
(save-restriction
(let ((begin ...)
(end ...))
(narrow-to-region begin end)
...
(mm-replace (cdr list))))))
puis
(mm-replace mm-big-list)
Mais pourquoi ne pas utiliser left et right ?
--
Matthieu
L'idée du narrowing semblait intéressante, mais il faut alors
calculer plusieurs fois les bornes des sous-ensembles (le calcul de
'end', ci-dessus).
Une manière d'éviter cela serait de passer 'begin' en paramètre.
La fonction cherche alors la première '(' ou ')'. Si c'est ')', on ne
récurse pas. La fonction retourne 'end'. De manière à ce que celle
qui l'a appellée puisse continuer à partir de cette position. En
pseudo-code (je n'ai pas Emacs sous le coude) :
(defun mm-replace (begin list)
;; un peu trop simple
(interactive (list pos mm-big-list))
(let ((pos begin))
(while (and pos <- position du premier '(' ou ')' après 'pos'
char-at pos == '(')
;; que 'list' soit vide ou non, il faut sauter les sous-()
(setq pos (mm-replace pos (cdr list))))
;; 'pos' est sur le ')' associé au '(' de 'begin'
(when list
remplace ')' par (car list))
ajuste pos
pos))
Il manque bien sûr la gestion des erreurs et des situations
exceptionnelles.
--drkm
Une expression du type :
$dfrac{r}{r'}(cos(theta+(-theta))+icos(theta+(-theta')))$
manque de lisibilité et ajouter des left right ne change rien
(caractères de hauteur standard).
Je préfère :
$dfrac{r}{r'}Big(cosbig(theta+(-theta)big)+icosbig(theta+(-theta')big)Big)$
mais c'est pénible à taper (et encore il n'y a que 3 niveau de
parenthèses).
J'étudie les deux propositions de code dès que j'ai le temps.
Merci pour votre aide.
--
Philippe.
Que dis-tu de ceci :
(defvar mm-big-list '("Bigg" "bigg" "Big" "big")
"À toi de jouer.")
(defun mm-replace (list)
"À tois de jouer."
(interactive (progn (search-forward "(") (list mm-big-list)))
(when list
(backward-char) (insert "\" (car list)) (forward-char))
(while (and (search-forward-regexp "[()]")
(eq ?( (char-before)))
(mm-replace (cdr list)))
(when list
(backward-char) (insert "\" (car list)) (forward-char)))
--drkm
C'est hors-sujet, mais je voulais signaler delimitershortfall et
delimiterfactor qui servent à ce genre de choses.
documentclass{article}
usepackage{amsmath}
begin{document}
[dfrac{r}{r'}Big(cosbig(theta+(-theta)big)+icosbig(theta+(-thet a')big)Big)]
setlength{delimitershortfall}{-1pt}
[dfrac{r}{r'}left(cosleft(theta+left(-thetaright)right) +
icosleft(theta+left(-theta'right)right)right)]
end{document}
Cordialement,
--
Prakash