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
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
Concatène le répertoire.
--
__Pascal Bourguignon__ http://www.informatimago.com/
A bad day in () is better than a good day in {}.
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
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
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
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
(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 {}.