2012-07-20 11 views
6

मैं Emacs तुतलाना के साथ अपने पहले कदम की कोशिश की LaTeX-clean-intermediate-suffixes से तत्व "\\.synctex\\.gz" दूर करने के लिए:emacs lisp: सूची के तत्व को कैसे हटाएं/हटाएं?

(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")))) 

लेकिन मैं पश्व-अनुरेखनमें काफी उत्पादन प्राप्त

+0

ऐसा लगता है कि आपके पास बस एक अंतर त्रुटि है। अतिरिक्त स्थान निकालें: 'लाटेक्स-क्लीन-इंटरमीडिएट-प्रत्यय' और आपको ठीक होना चाहिए। – assem

+0

यह किसी भी तरह एक प्रतिलिपि और पेस्ट त्रुटि थी, मेरे पास कोड में यह नहीं था। मैं उपरोक्त बदल दूंगा। –

उत्तर

4

जो त्रुटि आप देखते हैं वह सूची के हेरफेर के कारण नहीं है बल्कि 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 बयान में अनुमति दी जाती है के रूप में) या अधिक सामान्य संस्करण (के रूप में कई रूपों subsuming आप एक ही 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"))))) 
12

जैसा कि मानते हैं कि आपके कोड में अतिरिक्त सफेद जगह दिखाई देती है जो remove के अन्यथा सही आमंत्रण को रोकती है।

ध्यान दें कि ऐसे प्रयोजनों के लिए दोनों delete और remove काम, जब तक कि सूची के तत्वों equal जो उन दोनों के लिए प्रयोग किया जाता है के माध्यम से सही ढंग से तुलना की जा सकती। यदि आप इसके बजाय eq का उपयोग करना चाहते हैं, तो delq या remq फ़ंक्शंस का उपयोग करें। जबकि remove नहीं है, लेकिन इसके बजाय दिया की एक प्रति रिटर्न

delete और remove (या delq और remq क्रमशः) के बीच मुख्य अंतर यह है कि delete पक्ष प्रभाव, यानी, जगह में दी गई सूची में परिवर्तन द्वारा दिए गए तत्व को दूर करता है हटाए गए तत्व के साथ सूची।

(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) 

आप देख सकते हैं, list1 पर remove बुला के बाद, यह नहीं बदला है। लेकिन इसके बाद आप delete पर कॉल कर चुके हैं, यह बदल गया है।

संबंधित मुद्दे