मेल खाते हुए कोष्ठकों को कैसे बदलें?


10

मैं Emacs के साथ LaTeX में बहुत सारे गणितीय सूत्र लिखता हूं (और फिर से लिखता हूं)। मैं अक्सर उन स्थितियों में भाग लेता हूं जहां मैं पठनीयता में सुधार करने के लिए मेल खाते हुए कोष्ठकों को बदलना चाहता हूं। मेरे Emacs मुझे मैचिंग सीमांकक दिखाने के लिए पर्याप्त हैं, लेकिन मैं इसे प्रोग्रामेटिक रूप से कैसे बदलूं?

उदाहरण के लिए, बाहरी परिसीमन को एक बार में बदलें:

( (\sqrt{a} + b)^{-1} + c^{-1} )

सेवा

[ (\sqrt{a} + b)^{-1} + c^{-1} ]

2
ध्यान दें कि यह भी दिलचस्प होगा यदि इस तरह के कोड \bigl(...\bigr)को \Bigl(...\Bigr)आदि में परिवर्तित किया जा सकता है
एंड्रयू स्वान

1
यहाँ मैंने PEG का उपयोग करके एक सरलीकृत LaTeX व्याकरण का एक उदाहरण दिया: emacs.stackexchange.com/questions/36541/… यह इस समस्या का दृष्टिकोण करने का एक तरीका होगा।
wvxvw

@wvxvw जब मैंने यह प्रश्न लिखा तो मैंने आपके दृष्टिकोण को देखा, और वास्तव में यह दिलचस्प लग रहा है! एक आशा भी है कि कुछ है, शायद सरल, वहाँ से बाहर। Emacs को पहले से ही हाइलाइटिंग के मिलान के बारे में पता है क्योंकि यह हाइलाइट किया गया है। शायद यह लीवरेज हो सकता है?
मंकका


Emacs मैचिंग सीमांकक को उजागर करना जानता है क्योंकि या तो मोड लागू होता है forward-sexp-function(जो, मैं अनुमान लगा रहा हूं कि TeX मोड करता है), या यह scan-sexpsसंभव मैच को खोजने के लिए उपयोग करेगा । बाद के मामले में, मैच हमेशा सही नहीं होगा। इसलिए, यदि आप सभी की जरूरत मैचिंग सीमांकक से मेल खाना है, तो आप बिंदु के तहत चरित्र के वाक्यविन्यास की जांच कर सकते हैं। यदि यह है $, तो इसके लिए एक मैच होना चाहिए, और आप forwad-sexpइसके मैच के लिए उपयोग कर सकते हैं ।
wvxvw

जवाबों:


2

smartparensपैकेज का उपयोग करें । इसमें एक फ़ंक्शन कहा जाता है sp-rewrap-sexp, जो वास्तव में आपकी आवश्यकता है। प्रोजेक्ट होमपेज ( https://github.com/Fuco1/smartparens ) में कुछ gif हैं जो स्पष्ट रूप से कार्यक्षमता दिखा रहे हैं।


7

बुराई का उपयोग करने वालों के लिए आप बुराई-घेर का उपयोग कर सकते हैं जो आपको c sगति (परिवर्तन, घेर) देता है।

अपने उदाहरण के लिए तो बस करो c s ( [(गति, प्रकार से, प्रकार के प्रकार से)


मुझे जिस चीज की जरूरत थी!!! धन्यवाद!
हिलमैन

6

मैं नीचे दिए गए कोड और बाँध का उपयोग yf/replace-or-delete-pairकरने के लिए M-D

उदाहरण उपयोग: बिंदु के साथ (, मैं हिट करता हूं M-D [और ()जोड़ी एक []जोड़ी बन जाती है । यदि आप M-D RETइसके बजाय हिट करते हैं, तो जोड़ी हटा दी जाएगी।

यह कोड वाक्यविन्यास तालिका का उपयोग करता है, जिसका अर्थ है कि कुछ जोड़ों के लिए आपको समापन परन को स्वयं निर्दिष्ट करना होगा। HTML- मोड में जैसे, मार से ()बदला जा सकता है । हालांकि, कई मोड में एक मान्यता प्राप्त जोड़ी नहीं है, और कहेंगे "पता नहीं कैसे बंद करें"। आप तब टाइप कर सकते हैं ।<>M-D <<>M-D <>

(defun yf/replace-or-delete-pair (open)
  "Replace pair at point by OPEN and its corresponding closing character.
The closing character is lookup in the syntax table or asked to
the user if not found."
  (interactive
   (list
    (read-char
     (format "Replacing pair %c%c by (or hit RET to delete pair):"
             (char-after)
             (save-excursion
               (forward-sexp 1)
               (char-before))))))
  (if (memq open '(?\n ?\r))
      (delete-pair)
    (let ((close (cdr (aref (syntax-table) open))))
      (when (not close)
        (setq close
              (read-char
               (format "Don't know how to close character %s (#%d) ; please provide a closing character: "
                       (single-key-description open 'no-angles)
                       open))))
      (yf/replace-pair open close))))

(defun yf/replace-pair (open close)
  "Replace pair at point by respective chars OPEN and CLOSE.
If CLOSE is nil, lookup the syntax table. If that fails, signal
an error."
  (let ((close (or close
                   (cdr-safe (aref (syntax-table) open))
                   (error "No matching closing char for character %s (#%d)"
                          (single-key-description open t)
                          open)))
        (parens-require-spaces))
    (insert-pair 1 open close))
  (delete-pair)
  (backward-char 1))

2

ar-parentized2bracketed-atpt कार्य करेगा।

यह ar-braced2parentized-atptऔर मूल रूप से सभी संबंधित संयोजनों के साथ आता है ।

इसे बात-की-ट्रांसफॉर्म-सीमांकित से प्राप्त करें

URL: https://github.com/andreas-roehler/thing-at-point-utils

उदाहरण के लिए आज्ञाओं का सार वर्ग सभी सीमांकित रूपों को बदल देता है:

ar-delimited2bracketed-atpt

इन कमांडों को उसी रेपो द्वारा वितरित किया जाता है

thingatpt-परिणत-सामान्य-delimited.el


0

मैचिंग कोष्ठक के साथ कल्पना की जाती है show-paren-mode। तार्किक दृष्टिकोण समान अंतर्निहित तर्क और कार्य के लिए पार्न्स को बदलने के लिए फ़ंक्शन का आधार है। जब मिलान वाले परिलक्षित होते हैं, तो आप toggle-parensनीचे दिए गए फ़ंक्शन को कॉल कर सकते हैं:

(defun toggle-parens ()
  "Toggle parens () <> [] at cursor.

Turn on `show-paren-mode' to see matching pairs of parentheses
and other characters in buffers. This function then uses the same
function `show-paren-data-function' to find and replace them with
the other pair of brackets.

This function can be easily modified and expanded to replace
other brackets. Currently, mismatch information is ignored and
mismatched parens are changed based on the left one."
  (interactive)
  (let* ((parens (funcall show-paren-data-function))
         (start (if (< (nth 0 parens) (nth 2 parens))
                    (nth 0 parens) (nth 2 parens)))
         (end (if (< (nth 0 parens) (nth 2 parens))
                  (nth 2 parens) (nth 0 parens)))
         (startchar (buffer-substring-no-properties start (1+ start)))
         (mismatch (nth 4 parens)))
    (when parens
      (pcase startchar
        ("(" (toggle-parens--replace "[]" start end))
        ("[" (toggle-parens--replace "()" start end))))))

(defun toggle-parens--replace (pair start end)
  "Replace parens with a new PAIR at START and END in current buffer.

A helper function for `toggle-parens'."
  (goto-char start)
  (delete-char 1)
  (insert (substring pair 0 1))
  (goto-char end)
  (delete-char 1)
  (insert (substring pair 1 2)))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.