9

"\\.synctex\\.gz"から要素を削除するために、emacs lisp で最初の手順を試しました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"))))

ここでこの要素を削除するにはどうすればよいですか? を見つけremovedelete、両方を試しましたが、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"))))

しかし、バックトレースでかなり長い出力を受け取ります:-(

4

3 に答える 3

26

assem が指摘したように、コードに余分な空白があり、そうでなければ正しい呼び出しが妨げられているようですremove

リストの要素を正しく比較できる限り、deleteとの両方がこのような目的で機能することに注意してください。代わりに を使用して比較する場合は、関数またはを使用します。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 の誤った使用が原因です。この関数では、次の 2 つのパラメーターのみを使用できます(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 に答える