problème avec find-file

Le
Stéphane Dutailly
Bonjour à tous,

Je me lance pour écrire une petite fonction qui doit créer un fichier
(.asy en l'occurence puisque c'est pour faire un dessin).
Disons que je suis en train de travailler dans mon fichier cours.tex
(qui se trouve dans le dossier "cours") et que je veux créer un fichier
fig.asy dans un sous-dossier "illustrations" du dossier "cours".

J'ai écris ceci qui ne fonctionne pas à cause de la dernière ligne):

(defun cree-fichier-asy (nom-fichier-asy)
(interactive "snom: ")
(insert "\includegraphics[width=1\linewidth]{" nom-fichier-asy "}")
(setq nom-fichier-asy (concat nom-fichier-asy ".asy"))
(find-file illustrations/nom-fichier-asy))

Si j'écris:

(defun cree-fichier-asy (nom-fichier-asy)
(interactive "snom: ")
(insert "\includegraphics[width=1\linewidth]{" nom-fichier-asy "}")
(setq nom-fichier-asy (concat nom-fichier-asy ".asy"))
(find-file nom-fichier-asy))

alors j'obtiens exactement ce que je veux à ceci près que le fichier
fig.asy sera créé dans mon dossier "cours" et pas dans mon dossier
"illustrations".

Avez-vous une solution à me proposer?
Merci d'avance
Stéphane
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pascal J. Bourguignon
Le #23504341
Stéphane Dutailly
Bonjour à tous,

Je me lance pour écrire une petite fonction qui doit créer un fichier
(.asy en l'occurence puisque c'est pour faire un dessin).
Disons que je suis en train de travailler dans mon fichier cours.tex
(qui se trouve dans le dossier "cours") et que je veux créer un
fichier fig.asy dans un sous-dossier "illustrations" du dossier
"cours".
[...]

(defun cree-fichier-asy (nom-fichier-asy)
(interactive "snom: ")
(insert "\includegraphics[width=1\linewidth]{" nom-fichier-asy "}")
(setq nom-fichier-asy (concat nom-fichier-asy ".asy"))
(find-file nom-fichier-asy))

alors j'obtiens exactement ce que je veux à ceci près que le fichier
fig.asy sera créé dans mon dossier "cours" et pas dans mon dossier
"illustrations".



Concatène le répertoire.

--
__Pascal Bourguignon__ http://www.informatimago.com/
A bad day in () is better than a good day in {}.
Stéphane Dutailly
Le #23505421
Concatène le répertoire.



J'ai remplacé la dernière ligne par:

(find-file (concat "illustrations/" nom-fichier-asy))

et cela fonctionne très bien, merci beaucoup Pascal.

Du coup, je pousse un peu le bouchon. J'aimerais bien avoir un paramètre
optionnel devant linewidth. J'ai donc écris ceci:

(defun cree-fichier-asy-opt (nom-fichier-asy &optional scale)
(interactive "snom: nnscale: ")
(setq nom-fichier-asy (concat nom-fichier-asy ".asy"))
(if (= scale 1)
(insert "\includegraphics[width=\linewidth]{"
nom-fichier-asy "}")
else
(insert "\includegraphics[width=0." scale "\linewidth]{"
nom-fichier-asy "}"))
(find-file (concat "illustrations/" nom-fichier-asy)))

mais cela ne fonctionne pas (problème avec le else).
J'ai aussi un autre problème si je mets (= scale null) à la place de (=
scale 1).
Y a-t-il une solution simple?
Merci d'avance.
Stéphane
Gilles Pion
Le #23505531
Ref:
mais cela ne fonctionne pas (problème avec le else).



Le "else" est implicite en (e)lisp:

(if (condition)
(forme then)
[(forme else) [(forme else 2)...]] )

(http://www.gnu.org/software/emacs/manual/html_mono/elisp.html#Conditionals)
--
Gilles Pion
Stéphane Dutailly
Le #23505741
Le 27/06/2011 12:24, Gilles Pion a écrit :
Ref:
mais cela ne fonctionne pas (problème avec le else).



Le "else" est implicite en (e)lisp:

(if (condition)
(forme then)
[(forme else) [(forme else 2)...]] )

(http://www.gnu.org/software/emacs/manual/html_mono/elisp.html#Conditionals)



Merci Gilles, cela fonctionne bien désormais; j'ai mis:
(defun cree-fichier-asy-opt (nom-fichier-asy &optional scale)
(interactive "snom: nnscale: ")
(if (= scale 1)
(insert "\includegraphics[width=\linewidth]{"
nom-fichier-asy "}")
(insert "\includegraphics[width=0." scale "\linewidth]{"
nom-fichier-asy "}"))
(setq nom-fichier-asy (concat nom-fichier-asy ".asy"))
(find-file (concat "illustrations/" nom-fichier-asy)))

Seulement, un nouveau problème a surgit :-(
si pour "scale", je mets 1, pas de problème et dans mon fichier tex
s'écrit alors:
includegraphics[width=linewidth]{toto}
mais si je mets 2 par exemple, alors s'écrit:
includegraphics[width=0.^Blinewidth]{toto}

Bien que n'y comprenant pas grand chose, je me demande si cela ne peut
pas être un problème d'encodage. En effet, pour mon fichier perso.el (où
se trouve ma fonction cree-fichier-asy-opt) s'affiche dans la
<<mode-line>> à gauche -U alors que dans mon fichier tex j'ai -1
Est-ce dû à cela? Si oui, puis-je y remédier?
Merci encore.
Stéphane
Gilles Pion
Le #23506091
Ref:
Merci Gilles, cela fonctionne bien désormais; j'ai mis:
(defun cree-fichier-asy-opt (nom-fichier-asy &optional scale)
(interactive "snom: nnscale: ")
(if (= scale 1)
(insert "\includegraphics[width=\linewidth]{"
nom-fichier-asy "}")
(insert "\includegraphics[width=0." scale "\linewidth]{"
nom-fichier-asy "}"))
(setq nom-fichier-asy (concat nom-fichier-asy ".asy"))
(find-file (concat "illustrations/" nom-fichier-asy)))

Seulement, un nouveau problème a surgit :-(
si pour "scale", je mets 1, pas de problème et dans mon fichier tex
s'écrit alors:
includegraphics[width=linewidth]{toto}
mais si je mets 2 par exemple, alors s'écrit:
includegraphics[width=0.^Blinewidth]{toto}



remplacer :
(insert "\includegraphics[width=0."
scale
"\linewidth]{"
nom-fichier-asy "}") )
par
(insert "\includegraphics[width=0."
(number-to-string scale)
"\linewidth]{"
nom-fichier-asy "}") )

("insert" utilise la représentation *interne* de l'objet)
--
Gilles Pion
Pascal J. Bourguignon
Le #23506081
Gilles Pion
(insert "\includegraphics[width=0."
(number-to-string scale)
"\linewidth]{"
nom-fichier-asy "}") )



(insert (format "\includegraphics[width=%f\linewidth]{%s}"
(/ scale (ceiling (log scale 10))) ; if that's what
; the op wanted...
nom-fichier-asy))

--
__Pascal Bourguignon__ http://www.informatimago.com/
A bad day in () is better than a good day in {}.
Publicité
Poster une réponse
Anonyme