अपनी पाठ सामग्री को संरक्षित करते समय एक LaTeX मैक्रो को कैसे हटाएं?


11

TeXStudio में एक LaTeX मैक्रो में ALT+ DELको हिट करके , \macroname{content}जबकि कर्सर पहले के ठीक पहले खड़ा {है, इसके अलावा सभी को हटाने में परिणाम होगा content(जैसा कि नीचे दिखाया गया है)।

यहाँ छवि विवरण दर्ज करें
पहले घुंघराले ब्रैकेट के ठीक पहले कर्सर (बिंदु) रखें:

यहाँ छवि विवरण दर्ज करें

मारो ALT+ DELऔर तुम जाओ:

यहाँ छवि विवरण दर्ज करें

Emacs में इसे कैसे प्राप्त करें?

अपडेट
टी। वेरॉन के स्पष्टीकरण के अनुसार एक समस्या है C-c C-f C-dक्योंकि यह लाटेक्स में कुछ मैक्रोज़ के भीतर निष्पादित होने पर असंतुलित कोष्ठक की त्रुटि से शिकायत करता है। नीचे दिए गए उदाहरण पर विचार करें:
यहाँ छवि विवरण दर्ज करें

इस त्रुटि को फेंकता है up-list: Scan error: "Unbalanced parentheses", 8074, 1:। \ textenglish {} पॉलीग्लॉसिया पैकेज के अंतर्गत आता है।

इस कैविएट से कैसे छुटकारा पाएं?


हेम, वर्तमान उत्तर के साथ चेतावनी के बारे में नहीं है कि क्या ऑक्टेक्स मैक्रो को सही करता है या नहीं, यह इस बारे में है कि मैक्रो एक लेटेक्स फ़ॉन्ट विनिर्देश है (शायद के रूप में परिभाषित किया गया है TeX-font-list) या नहीं। उदाहरण के लिए, के साथ प्रयास करें \sectionया \footnote, AUCTeX इन मैक्रो के बारे में जानता है और उन्हें फ़ॉन्ट करता है, लेकिन C-c C-f C-dअसंतुलित कोष्ठक के बारे में शिकायत करेगा।
टी। वेरॉन

यहां तक ​​कि अगर मैं TeX-font-listअपने नए शुरू किए गए मैक्रोज़ को शामिल करने के लिए इसे अपडेट कर सकता हूं, तो यह एक उप-अपनाने वाला वर्कअराउंड है। अन्यथा, मुझे नहीं पता कि इससे निपटने के लिए ईएलआईएसपी फ़ंक्शन क्या होता है!
डॉक्टरेट

जवाबों:


11

इस फ़ंक्शन का प्रयास करें:

(defun mg-TeX-delete-current-macro (&optional arg)
  "Remove the current macro.
With an optional argument ARG, delete just the ARG-th macro
starting from the innermost."
  (interactive "*p")
  (let (macro end)
    (when 
    (dotimes (i arg macro)
      (goto-char (TeX-find-macro-start))
      (setq macro (TeX-current-macro)
        end (TeX-find-macro-end))
      ;; If we need to look for an outer macro we have to "exit" from the
      ;; current one.
      (backward-char))
      ;; Return to the beginning of the macro to be deleted.
      (forward-char)
      (re-search-forward
       (concat (regexp-quote TeX-esc) macro "\\(?:\\[[^]]*\\]\\)?"
           TeX-grop "\\(\\(.\\|\n\\)*\\)")
       end t)
      (replace-match "\\1")
      ;; Delete the closing brace.
      (delete-backward-char 1))))

सीमा: वर्बेटिम-जैसे मैक्रोज़ के साथ काम नहीं करती है। यह फ़ंक्शन एक त्रुटि ( Wrong type argument: integer-or-marker-p, nil) फेंक देगा यदि सार्वभौमिक तर्क मैक्रो एनकोलिंग बिंदु की संख्या से अधिक है।

फ़ंक्शन को अपने पसंदीदा शॉर्टकट से बांधें। उदाहरण के लिए

(eval-after-load "tex"
  '(local-set-key (kbd "M-DEL") 'mg-TeX-delete-current-macro))

इसे बांधने के लिए M-DEL

यदि आपके बफ़र में है ( !बिंदु है)

\onemacro{\anothermacro{!argument}}

फिर C-2 M-DELआपको दे दूंगा

\anothermacro{argument}

अगर अंतरतम समूह के अंदर की बात का (gr1(gr2(gr3(gr4))))मतलब आप उपसर्ग से है C-uतो 2 यह मुझे देगा (gr1(gr2)):? यदि ऐसा है, तो यह शानदार होना चाहिए। मुझे आशा है कि आपके पास इसे करने का समय था।
डॉक्टरेट

मैं इसे M-DELTexStudio में पसंद करने के लिए बाध्य करता हूं। धन्यवाद।
डॉक्टरेट

@doctorate खैर, नहीं, मेरा विचार सिर्फ दूसरे मैक्रो को हटाने के लिए है, gr3आपके मामले में। अद्यतन उत्तर देखें। आप उत्तर के मूल संस्करण के dotimesचारों ओर लपेटकर अपने द्वारा सुझाए गए कार्यों को कार्यान्वित कर सकते हैं when
जिआर्डानो

शानदार समारोह! अब यह एक स्मार्ट मैक्रो-पैक्मैन की तरह व्यवहार करता है ! हालांकि एक चेतावनी; जब तर्क बड़ा है और यह एक त्रुटि फेंकता बिंदु कूदता कहीं पिछड़े। क्या आप इसकी शिकायत करते हुए इसके वर्तमान स्थान पर खड़े हो सकते हैं?
डॉक्टरेट

@giordano किसी भी मौका यह AucTex में कर देगा? बहुत काम का है!
टायलर

9

से फ़ॉन्ट बदलने पर AUCTeX मैनुअल नोड :

C-c C-f C-d

Delete the innermost font specification containing point.

उस दस्तावेज़ में एक बहुत ही आसान टुकड़ा था जिसे मैंने याद किया। धन्यवाद।
डॉक्टरेट

लेकिन यह केवल फ़ॉन्ट विनिर्देशों के लिए काम करता है (और सत्यापन समझ में आता है, उदाहरण के लिए \emph{\randommacro{test}}यह हटा देगा \emph)।
टी। वेरॉन

@ टी। वेरॉन: अच्छा स्पष्टीकरण। मैं मनमाने ढंग से LaTeX मैक्रोज़ के लिए ऐसा करने के लिए एक अंतर्निहित तरीके से अवगत नहीं हूं।
दान

4

यहाँ बिंदु पर युक्त मैक्रो को निकालने का एक सरल कार्य है:

(defun TeX-remove-macro ()
  "Remove current macro and return `t'.  If no macro at point,
return `nil'."
  (interactive)
  (when (TeX-current-macro)
    (let ((bounds (TeX-find-macro-boundaries))
          (brace  (save-excursion
                    (goto-char (1- (TeX-find-macro-end)))
                    (TeX-find-opening-brace))))
      (delete-region (1- (cdr bounds)) (cdr bounds))
      (delete-region (car bounds) (1+ brace)))
    t))

इसलिए, *बिंदु के रूप में:

\footnote{Here's a * footnote} 
  => Here's a footnote

उपरोक्त फ़ंक्शन को देखते हुए, यह बिंदु पर सभी मैक्रोज़ को हटाने के लिए एक-लाइनर है:

(defun TeX-remove-all-macros ()
  "Remove all containing macros for text at point."
  (interactive)
  (while (TeX-remove-macro)))

इसलिए, फिर से *बिंदु के रूप में:

\footnote{Here's a \textbf{footnote with \emph{emphasized * text}}} 
  => Here's a footnote with emphasized text
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.