9

我尝试使用 emacs lisp 的第一步"\\.synctex\\.gz"从以下位置删除元素LaTeX-clean-intermediate-suffixes

(eval-after-load 'latex
  '(setq my-LaTeX-clean-intermediate-suffixes (remove '"\\.synctex\\.gz" LaTeX-clean-intermediate-suffixes)); that's not working
  '(setq LaTeX-clean-intermediate-suffixes
     (append my-LaTeX-clean-intermediate-suffixes (list "-blx\\.bib" "\\.run\\.xml"))))

我怎样才能在这里删除这个元素?我发现removeand delete,都尝试了它们,但我得到了一个wrong-number-of-arguments-type 错误。

更新

我试过这个:

(eval-after-load 'latex
  (setq LaTeX-clean-intermediate-suffixes (delete "\\.synctex\\.gz"  LaTeX-clean-intermediate-suffixes))
  '(setq LaTeX-clean-intermediate-suffixes
     (append LaTeX-clean-intermediate-suffixes (list "-blx\\.bib" "\\.run\\.xml"))))

但我在Backtrace中收到了相当长的输出:-(

4

3 回答 3

26

正如 assem 指出的那样,您的代码中似乎有额外的空格,这会阻止正确调用remove.

请注意,只要可以正确比较列表中的元素,就可以将两者都用于此类delete目的。如果您想比较 using ,请使用函数或。removeequaleqdelqremq

deleteremove(或delqremq分别)之间的主要区别在于delete通过副作用删除给定元素,即,在适当位置更改给定列表,而remove不是返回给定列表的副本,其中删除了元素。

(setq list1 '("foo" "bar" "baz"))
(setq list2 (remove "bar" list1))

(message "list1: %s" list1)
(message "list2: %s" list2)

(setq list3 (delete "bar" list1))

(message "list1: %s" list1)
(message "list3: %s" list3)

如果您评估上面的代码,您会在*Message*缓冲区中找到以下输出:

list1: (foo bar baz)
list2: (foo baz)
list1: (foo baz)
list3: (foo baz)

如您所见,在调用 之后removelist1它并没有改变。但是在你调用delete它之后,它已经改变了。

于 2012-07-20T06:14:26.120 回答
8

您看到的错误不是由于对列表的操作,而是由错误使用 eval-after-load 引起的。该函数只允许两个参数:(eval-after-load FILE FORM). 所以你的片段应该是

(eval-after-load 'latex
  '(setq LaTeX-clean-intermediate-suffixes (delete "\\.synctex\\.gz"  LaTeX-clean-intermediate-suffixes)
         LaTeX-clean-intermediate-suffixes (append LaTeX-clean-intermediate-suffixes (list "-blx\\.bib" "\\.run\\.xml"))))

(因为在单个 setq 语句中允许多个赋值)或更通用的变体(在单个 中包含任意数量的形式progn):

(eval-after-load 'latex
  '(progn
     (setq LaTeX-clean-intermediate-suffixes (delete "\\.synctex\\.gz"  LaTeX-clean-intermediate-suffixes))
     (setq LaTeX-clean-intermediate-suffixes (append LaTeX-clean-intermediate-suffixes (list "-blx\\.bib" "\\.run\\.xml")))))
于 2012-07-20T07:21:52.197 回答
3

delete应该可以工作
http://www.gnu.org/software/emacs/manual/html_node/elisp/Sets-And-Lists.html

(setq LaTeX-clean-intermediate-suffixes (delete "\\.synctex\\.gz"  LaTeX-clean-intermediate-suffixes))
于 2012-07-20T06:13:09.233 回答