[Syracuse] Re: [fork] compilation fichier métapost sous emacs

Auteur: Guillaume Connan <gconnan.pas_chez_de_pub_svp.free.fr_invalid>
Date: mer mai 09 2007 - 14:14:34 CEST

Le 9 mai 2007 à 11:05, Fabrice Eudes a particulièrement retenu mon
attention par le texte suivant :

> c'est très basique: en mode "MetaPost", il n'y a pas de commande
> genre "C-c C-c" pour lancer la compilation comme pour un document
> LaTeX.

si : il y a un mode meta.
Mais il y a plus pratique : d'abord un script shell pour visualiser
direct

8<------8<------8<------8<------8<------8<------8<------8<------
#!/bin/sh

if [ "$1.mp" -nt "$1.eps" ]; then
    for fic in *.dvi; do rm -f $fic; done;
    for fic in *.log; do rm -f $fic; done;
    for fic in *rr.tex; do rm -f $fic; done;
    for fic in *.aux; do rm -f $fic; done;
    for fic in $1.*[0-9]; do rm -f $fic; done;
    mpost -interaction nonstopmode $1
fi

cat>$1.tex<<EOF
\documentclass{article}
\usepackage{preambule} % à remplacer : macros perso
\usepackage{multido}
\thispagestyle{empty}
\begin{document}
\begin{TeXtoEPS}
\includegraphics{$1.$2}
\end{TeXtoEPS}
\end{document}
EOF
latex $1
dvips -o $1.eps -E $1.dvi
for fic in *.mpx; do rm -f $fic; done;
evince $1.eps % à remplacer par gv par exemple

## Fin de view-meta-eps.sh

8<------8<------8<------8<------8<------8<------8<------8<------

Puis on rajoute ce fichier meta.el dans ~/emacs/
où j'ai mis les fichiers emacs persos.

8<------8<------8<------8<------8<------8<------8<------8<------

;;; meta.el --- insertion de figures metapost

;; Copyright (C) 2006 Free Software Foundation, Inc.

;; Keywords: languages

;; This file is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.

;; This file is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to
;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.

;;; Commentary:

;;

;;; Code:
;; Variables à modifier éventuellement
(defvar pi-mp-view-eps "~/bin/view-meta-eps.sh")
(defvar pi-mp-anime-pdf "~/bin/anime-meta-pdf.sh")
;; FIN des variables à modifier

(defun pi-mp-view(numfig)
  "Compilation et visualisation d'un fichier Metapost."
  (interactive "sNumero de figure (defaut=0) : ")
  (if (string= numfig "") (setq numfigtmp "0") (setq numfigtmp numfig))
  (let ((mp-shell (expand-file-name pi-mp-view-eps)))
    (setq mp-command (concat mp-shell " " (file-name-sans-extension
                                           (buffer-file-name)) " "
                                           numfigtmp " &"))
    (if (buffer-modified-p) (save-buffer))
    (shell-command mp-command)
    (set-window-text-height nil (ceiling (* (frame-height) .7)))
    ))
(define-key meta-mode-map [(control c) (control c)] 'pi-mp-view)

(defun pi-mp-pdf()
  "Compilation et visualisation des sorties Metapost sous forme
  d'animation pdf (Beamer)."
  (interactive "sNombre de figures : ")
  (let ((mp-shell (expand-file-name pi-mp-anime-pdf)))
    (setq mp-command (concat mp-shell " " (file-name-sans-extension (buffer-file-name)) " &"))
    (if (buffer-modified-p) (save-buffer))
    (shell-command mp-command)
    (set-window-text-height nil (ceiling (* (frame-height) .7)))
    ))
(define-key meta-mode-map [(control c) (control p)] 'pi-mp-pdf)

(define-key meta-mode-map "\"" 'skeleton-pair-insert-maybe)
(define-key meta-mode-map "\{" 'skeleton-pair-insert-maybe)
(define-key meta-mode-map "\[" 'skeleton-pair-insert-maybe)
(define-key meta-mode-map "\(" 'skeleton-pair-insert-maybe)
(setq skeleton-pair 1)
;8<------8<------8<------8<------8<------8<------8<------8<------8<-----

(provide 'meta)
;;; meta.el ends here

8<------8<------8<------8<------8<------8<------8<------8<------

Puis on rajoute ceci dans .emacs

8<------8<------8<------8<------8<------8<------8<------8<------

;;;;;;;;;;; ;;;;Metapost; ;;;;;;;;; ;;;;;;;;
(autoload 'metafont-mode "meta-mode" "Metafont editing mode." t)
(autoload 'metapost-mode "meta-mode" "MetaPost editing mode." t)

(setq auto-mode-alist
(append '(("\\.mf\\' " . metafont-mode)
("\\.mp\\'" . metapost-mode) ) auto-mode-alist) )

(add-hook 'metapost-mode-hook
'(lambda ()
(load "meta")))

8<------8<------8<------8<------8<------8<------8<------8<------

Et maintenant, un C-c C-c affiche la figure en eps.
On peut modifier en rajoutant un ps2pdf dans le script sh si tu veux
du pdf.

Ensuite, il y a d'autres magnifiques outils de Philippe (Ivaldi) comme
la complétion automatique avec tempo

8<------8<------8<------8<------8<------8<------8<------8<------

(require 'pi-tempo-abbrev)

;; *======================================================*
;; *............Abbreviations for meta-mode...............*
;; *======================================================*

(eval-after-load "meta-mode"
  '(progn
     (tempo-abbrev-add
      '(metapost-mode-hook) ;; List of modes where the following table will use.
      'tempo-abbrev-meta-table ;; Table name (* MUST BE UNIQUE *).
      'tempo-abbrev-meta-tagslist ;; Name of the variable where the tag list should be added.
      '(
        ("pre" ("%input newcourbes;
%input couleur;
input geometriesyr16;
%input TEX;

verbatimtex
%&latex
\\documentclass{article}
\\usepackage[upright]{fourier}
\\usepackage{preambule}
\\begin{document}
etex
" n>
p > "

end"))
        ("bf" (& > "beginfig(" p ");" n> p n "endfig;" > %))
        ("vardef" (& > "vardef " p "("p") =" n> p n "enddef;" > %))
        ("def" (& > "def " p "("p") =" n> p n "enddef;" > %))
        ("primarydef" ("primarydef " p "=" n> "begingroup;" n> p n "endgroup;" > n "enddef;" > &))
        ("begingroup" (& > "begingroup" n> p n "endgroup;" > %))
        ("if" (> "if " p " :" n>
                  p n >
> "fi;"> %))
        ("ife" (> "if " p " :" n> p n> "else:" > n> p n> "fi;" > %))
        ("ifeif" (> "if " p " :" n> p n "elseif " > p " :" n> p n> "fi;" > %))
        ("for" ("for " p " :" n> p n> "endfor;" > %))
        ("forw" ("for " p " within " p " :" n> p n> "endfor;" > %))
        ("fori" (& >"for " (p "Variable: ") "=0 upto " p " : " n>
                    p n >
> "endfor;"> %))
        ("forid" (& >"for " (p "Variable: ") "=0 downto " p " : " n>
                    p n >
> "endfor;"> %))
        ("forever" ("forever:" n> p n> "exitif " p ";" n> "endfor;" > %))
        ("bc" ("buildcycle(" p ")"))
        ("sca" ("scaled "))
        ("shi" ("shifted "))
        ("rot" ("rotated "))
        ("wps" ("withpen pencircle scaled "))
        ("wc" ("withcolor "))
        ("ds" ("draw " p " withpen pencircle scaled " p ";"))
        ("dc" ("draw " p " withcolor " p))
        ("dsc" ("draw " p " withpen pencircle scaled " p " withcolor " p ";"))
        ("cp" ("currentpicture "))
        ("wha" ("whatever "))
        ("intt" ("intersectiontimes "))
        ("intp" ("intersectionpoint "))
        ("cir" ("fullcircle "))
        ("squ" ("unitsquare "))
        ("fill" ("fill " p " withcolor " p))
        ("sub" ("subpath(" p ")"))
        ("len" ("length(" p ")"))
        ("btex" ("btex " p " etex "))
        ("lab" ("label."p"(btex " p "etex, "p ");"))
         ("esp" (& > "figureespace(" p","p","p","p ");" n> "Initialisation(5,25,30,700);"p n "finespace;" > %))
        ("fonc" ("
beginfig( "p")

%%%%%%%%%%%%%%%%%%%%%%%
vardef fx(expr t)=
t
enddef;

vardef fy(expr t)=
                             "p" % c'est la seule ligne à changer
enddef;
%%%%%%%%%%%%%%%%%%%%%
repere(0,0,"p","p","p","p","p"cm,"p"cm);
r_axes;
r_origine;
r_unites;
r_labelxy;
quad_xy(0.2,bleu_ciel);
quadu_xy(0.1*bleu_ciel);
grad_x(1,1,0.4white);
grad_y(1,1,0.4white);

draw f_courbe(fx,fy,"p","p",100)withpen pencircle scaled 1.5bp withcolor red;

r_fin;
endfig;
"))

("tan" ("draw f_tangente(fx,fy,"p",0.05);"))
("tanf" ("tracef_tangente(fx,fy,a,larg,0.05,coul);"))
        
        ;; `Place_here_your_abbreviations_for_meta-mode'
        ))))

8<------8<------8<------8<------8<------8<------8<------8<------

Alors pre + espace affiche un préambule standard.

Il faut aussi ce fichier pi-abrev-tempo à mettre dans ~/emacs

8<------8<------8<------8<------8<------8<------8<------8<------

(define-abbrev-table 'outline-mode-abbrev-table '(
    ))

(define-abbrev-table 'docTeX-mode-abbrev-table '(
    ))

(define-abbrev-table 'ibuffer-occur-mode-abbrev-table '(
    ))

(define-abbrev-table 'occur-mode-abbrev-table '(
    ))

(define-abbrev-table 'text-mode-abbrev-table '(
    ))

(define-abbrev-table 'lisp-interaction-mode-abbrev-table '(
    ))

(define-abbrev-table 'emacs-lisp-mode-abbrev-table '(
    ))

(define-abbrev-table 'lisp-mode-abbrev-table '(
    ))

(define-abbrev-table 'fundamental-mode-abbrev-table '(
    ))

(define-abbrev-table 'global-abbrev-table '(
    ))

8<------8<------8<------8<------8<------8<------8<------8<------

Il faut rajouter dans .emacs

8<------8<------8<------8<------8<------8<------8<------8<------

(setq-default abbrev-mode t)
(require 'pi-tempo-abbrev)
(setq tempo-interactive t)
(setq-default tempo-insert-region nil)
;; (load "pi-tempo-abbrev-latex")
(load "pi-tempo-abbrev-meta")

8<------8<------8<------8<------8<------8<------8<------8<------

J'ai dû en oublier. Le mieux est de contacter ensuite Philippe.

http://piprim.tuxfamily.org/index.html

-- 
Guillaume Connan
http://gconnan.free.fr

_______________________________________________
Liste de diffusion Syracuse
Syracuse@melusine.eu.org
http://melusine.eu.org/cgi-bin/mailman/listinfo/syracuse
Adresse alternative du site :
http://syracuse.eu.org/syracuse/
Received on Wed May 9 14:14:22 2007

Cette archive a été créée par hypermail 2.1.8 : mer mai 09 2007 - 15:37:03 CEST