我的.emacs包含
(setenv "PATH" (concat ".:/usr/texbin:/opt/local/bin" (getenv "PATH")))
(setq exec-path (append exec-path '(".:/usr/texbin:/opt/local/bin")))
(add-to-list 'load-path "/usr/local/share/emacs/site-lisp")
(require 'tex-site)
(load "auctex.el" nil t t)
(load "preview-latex.el" nil t t)
/ usr / texbin是latex / pdflatex / ..所在的位置。 / opt / local / bin /是可以找到gs的地方。
然而,当我运行预览时,显然需要乳胶和gs,我得到了
Preview-DviPS finished at Thu Dec 22 11:25:46
DviPS sentinel: Searching for program: No such file or directory, gs
这意味着乳胶可以找到,但不是gs。
我不确定是否需要设置exec-path,也许PATH就足够了,但我已将其设置为调试措施。
为什么emacs找不到gs,即使它所在的目录是在PATH和exec路径中?
答案 0 :(得分:62)
如果您在Emacs中设置了$PATH
,那么您很可能使用的是OS X. GUI应用程序不是通过shell启动的,因此它们会看到不同的环境变量。
这是一个技巧,我用它来确保Emacs中的$PATH
与我看到的相同,如果我启动一个终端(但看到下面的“更新”):
(defun set-exec-path-from-shell-PATH ()
"Set up Emacs' `exec-path' and PATH environment variable to match that used by the user's shell.
This is particularly useful under Mac OSX, where GUI apps are not started from a shell."
(interactive)
(let ((path-from-shell (replace-regexp-in-string "[ \t\n]*$" "" (shell-command-to-string "$SHELL --login -i -c 'echo $PATH'"))))
(setenv "PATH" path-from-shell)
(setq exec-path (split-string path-from-shell path-separator))))
然后只需从您的Emacs init文件中调用set-exec-path-from-shell-PATH
函数即可。我保留了代码on github,BTW。
更新:此代码现已改进并作为名为exec-path-from-shell的elisp库发布;可安装的软件包在MELPA。
中提供答案 1 :(得分:11)
尝试用这个替换第二行:
(setq exec-path (append exec-path '("/usr/texbin" "/opt/local/bin")))
答案 2 :(得分:1)
我遇到了类似的问题,但是路径正确,包括尾随':'。结果发现内部emacs shell程序丢失了,导致“搜索程序:没有这样的文件或目录”消息。 用
修复(setq shell-file-name "bash").
答案 3 :(得分:-3)
您的路径字符串末尾似乎缺少路径分隔符:
。