GNT sans publicité, site mobile, fonctionnalitées exclusives...

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.
Lire les 14 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Matthieu Moy
Le #21837291
Ph. Idlavi
je voudrais la convertir en :
Bigg(bigg(des commandes Big(des commandes big(des commandes (des
commandes )des commandes big)des commandes Big)des commandesbigg) des
commandesBigg)

Quelqu'un pourrait-il m'indiquer un début de code pour effectuer la
conversion ?



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
drkm
Le #21837281
Matthieu Moy wrote:

(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))))))



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
Ph. Idlavi
Le #21837271
Matthieu Moy 16h09:34 :

Mais pourquoi ne pas utiliser left et right ?



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.
drkm
Le #21837141
Ph. Idlavi wrote:

J'étudie les deux propositions de code dès que j'ai le temps.



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
Prakash Countcham
Le #21837131
Ph. Idlavi
Mais pourquoi ne pas utiliser left et right ?



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+(-the ta')big)Big)$
mais c'est pénible à taper (et encore il n'y a que 3 niveau de
parenthèses).



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
Publicité
Suivre les réponses
Poster une réponse
Anonyme