2015-05-31 3 views
2

Я пытаюсь обработать латексный фрагмент в SVG-файле, используя dvisvgm. Это отлично работает из командной строки, но не работает при запуске изнутри elisp:eLisp call-process dvisvgm

(call-process "dvisvgm" nil nil nil 
      "--libgs=/usr/local/bin/gs" 
      svgfile 
      dvifile) 

Может ли кто-нибудь сказать мне, что я пропустил?

Спасибо! -Adam

+0

Какое сообщение об ошибке? Вы проверили используемые пути и среду? –

ответ

1

Попробуйте просто использовать M-! dvisvgm --libgs=/usr/local/bin/gs <svgfile> <dvifile> вместо этого, если он работает, и вы все еще хотите, чтобы записать его в Elisp, вы можете использовать простой API: shell-command, например:

(shell-command 
(format "dvisvgm --libgs=/usr/local/bin/gs %s %s" 
     (shell-quote-argument svgfile) 
     (shell-quote-argument dvifile))) 

Если dvisvgm занимает много времени и вы не хотите, чтобы он блокировал вас Emacs, добавьте & в эту команду оболочки или используйте start-process и т. д. для создания асинхронного процесса. Например, используйте start-process:

(start-process "foo-dvisvgm" nil "dvisvgm" 
       "--libgs=/usr/local/bin/gs" 
       svgfile 
       dvifile) 
+0

Спасибо, это работает. Как вы это сделаете, используя старт-процесс? – Adam

+0

@Adam Я обновил свой ответ для этого, но чтобы узнать, как использовать 'start-process', вам лучше прочитать руководство по информации: http://www.gnu.org/software/emacs/manual/html_node/ Elisp/Асинхронный-Processes.html – xuchunyang