2011-12-16 5 views
12

इस सवाल Emacs (और शायद Auctex) के भीतर LaTeX के स्वरूपण से संबंधित है, वहीं मैं इस Emacs कोष्ठक, कोष्ठक, और ब्रेसिज़ तरह सीमांकक के विषय में में अधिक सामान्य स्थितियों के लिए लागू किया जा सकता विश्वास करते हैं।Emacs के साथ एक बार में दो मिलान करने वाले डिलीमीटरों को आप कैसे संशोधित कर सकते हैं?

मैं देख रहा हूँ Emacs (और elisp) के साथ निम्न कार्य करने में सक्षम हो, और जहां शुरू करने के लिए पता नहीं है। कहते हैं कि मैं है:

(This is in parentheses) 
Emacs में कुछ की बाइंडिंग के साथ

, मैं Emacs मिलान सीमांकक ढूंढना चाहते हैं जो भी मेरी कर्सर द्वारा किया जाता है (कुछ मुझे पता है क्योंकि यह विभिन्न मोड में मिलान सीमांकक हाइलाइट कर सकते हैं Emacs कर सकते हैं) और (...), [...], \lvert ... \rvert, \langle ... \rangle, \{ ... \}:

\left(This is in parentheses \right) 

को सीमांकक मुझे यह पसंद कर रहे हैं के साथ काम करने के लिए उन दोनों को बदलने में सक्षम हो। इस कार्य को पूरा करने के लिए मुझे क्या elisp की आवश्यकता होगी?

मिलान करने वाले डिलीमीटरों को संभालने के अधिक सामान्य तरीके स्वागत हैं।

+1

+1 अच्छा विचार! ऐसी चीज हमेशा उपयोगी होगी ... –

+0

कृपया स्पष्ट करें कि संशोधन कहां से आया था? क्या संशोधन हमेशा "बाएं" और "\ दाएं" को डिलीमीटर करने के लिए तैयार करने का मामला है? –

+0

संशोधन लाटेक्स से आता है क्योंकि '\ left' और' \ right' उन delimiters स्केल को उनके भीतर निहित पाठ/गणित के आकार में स्केल करते हैं (कभी-कभी मैं समझने के लिए पर्याप्त नहीं हूं कि मुझे उनकी आवश्यकता होगी)। और हां, संशोधन '\ left' और '\ right' को डिलीमीटर करने के लिए तैयार करने का विषय होगा। हालांकि, अगर उनके लिए अन्य चीजें करने के तरीके हैं (उदाहरण के लिए ब्रैकेट या ब्रेसिज़ को ब्रांड्स बदलें), तो यह भी अच्छा होगा। – qgp07

उत्तर

8

Emacs में नीचे दिए गए आदेश का मूल्यांकन करें। पुनः लोड करने के बाद आप एक बंद माता-पिता के तुरंत बाद बिंदु (टेक्स्ट कर्सर) डाल सकते हैं। तब \left( साथ \right) साथ समापन ) और मिलान शुरू कोष्ठक ( को बदलने के लिए M-x replace-matching-parens है।

(defun replace-matching-parens() 
    (interactive) 
    (save-excursion 
    (let ((end-point (point))) 
     (backward-list) 
     (let ((start-point (point))) 
     (goto-char end-point) 
     (re-search-backward ")" nil t) 
     (replace-match " \\\\right)" nil nil) 

     (goto-char start-point) 
     (re-search-forward "(" nil t) 
     (replace-match "\\\\left(" nil nil))))) 

interactive बिट संकेत करता है कि मैं एक "कमांड" चाहते हैं, तो यह M-x का उपयोग कर क्रियान्वित किया जा सकता। निष्पादन के बाद एक अजीब जगह में समाप्त होने वाले कर्सर से बचने के लिए मैं तर्क को save-excursion में लपेट रहा हूं। बिंदु backward-list का उपयोग कर शुरुआती माता-पिता के पास वापस कूदता है और माता-पिता से मेल खाने वाले क्षेत्र की शुरुआत और अंत स्थिति में रहता है। आखिरकार, अंत में शुरू करना और पीछे की ओर काम करना मैं तारों को प्रतिस्थापित करता हूं। आगे की तरफ पीछे की ओर स्थानांतरित करके मुझे इसकी आवश्यकता होने से पहले end-point को अमान्य करने से बचें।

विभिन्न प्रकार के डिलीमीटरों को संभालने के लिए इसे सामान्य बनाना बहुत बुरा नहीं होना चाहिए। backward-list स्ट्रिंग्स emacs की किसी भी जोड़ी के साथ काम करना चाहिए ( और ) के अनुरूप के रूप में पहचानता है। अधिक कोष्ठक-जैसे स्ट्रिंग जोड़े जोड़ने के लिए, Parenthesis Matching आलेख में set-syntax-table देखें।

का उपयोग replace-matching-parens पर एक कुंजी बाध्यकारी सेट करने के लिए करें।

मेले चेतावनी: replace-matching-parens पहले elisp आदेश मैं इसलिए लगाए गए हैं, तो यह सर्वोत्तम प्रथाओं के अनुरूप नहीं हो सकता है। वहां सभी गुरुओं के लिए, मैं रचनात्मक आलोचना के लिए खुला हूं।

+0

यह वही है जो मैं चाहता था! एक जादू की तरह काम करता है। – qgp07

+0

इसे सुनकर खुशी हुई! –

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

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