我尝试使用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"))))
如何在此处删除此元素?我找到了remove
和delete
,尝试了两者,但我收到了wrong-number-of-arguments
类型的错误。
更新
我试过了:
(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 中收到相当长的输出: - (
答案 0 :(得分:16)
正如assem所指出的那样,代码中似乎有额外的空格会阻止remove
的正确调用。
请注意,delete
和remove
都可以用于此目的,只要列表中的元素可以通过equal
正确比较,而eq
用于这两个元素。如果您想使用delq
进行比较,请使用函数remq
或delete
。
remove
和delq
(或分别为remq
和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)
缓冲区中找到以下输出:
remove
正如您所看到的,在list1
上致电delete
后,它没有改变。但是在你打电话给{{1}}后,它已经改变了。
答案 1 :(得分:5)
您看到的错误不是由于操作列表而是由于错误使用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")))))
答案 2 :(得分:2)
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))