Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

problème avec find-file

6 réponses
Avatar
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

6 réponses

Avatar
Pascal J. Bourguignon
Stéphane Dutailly writes:

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=1linewidth]{" 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 {}.
Avatar
Stéphane Dutailly
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
Avatar
Gilles Pion
Ref: <4e085481$0$23681$ de Stéphane Dutailly
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
Avatar
Stéphane Dutailly
Le 27/06/2011 12:24, Gilles Pion a écrit :
Ref:<4e085481$0$23681$ de Stéphane Dutailly
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
Avatar
Gilles Pion
Ref: <4e087050$0$25459$ de Stéphane Dutailly
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
Avatar
Pascal J. Bourguignon
Gilles Pion writes:

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



(insert (format "includegraphics[width=%flinewidth]{%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 {}.