ऑटो-इंडेंटिंग \ _ अगर AUCTeX के साथ स्टेटमेंट


12

यदि -जैसे कथनों को शामिल करने वाले AUCTeXआदिम texकोड के लिए वर्तमान व्यवहार , आस-पास की स्थिति के समान स्तर पर सशर्त बयान को इंडेंट करना है। यानी कोड

\if@sometoggle%
\dosomething%
\else%
\doanotherthing%
\fi%

पाठ के एक बड़े ब्लॉक के रूप में दिखाई देता है। मैं AUCTeXस्निपेट को निम्नानुसार बनाना चाहूंगा :

\if@sometoggle%
  \dosomething%
\else%
  \doanotherthing%
\fi%

क्या यह संभव है?

जवाबों:


7

यह संभव है:

(setq LaTeX-begin-regexp "\\(?:begin\\|if@\\)\\b")
(setq LaTeX-end-regexp "\\(?:end\\|else\\|fi\\)\\b")
(defun LaTeX-indent-level-count ()
  "Count indentation change caused by all \\left, \\right, \\begin, and
\\end commands in the current line."
  (save-excursion
    (save-restriction
      (let ((count 0))
        (narrow-to-region (point)
                          (save-excursion
                            (re-search-forward
                             (concat "[^" TeX-esc "]"
                                     "\\(" LaTeX-indent-comment-start-regexp
                                     "\\)\\|\n\\|\\'"))
                            (backward-char)
                            (point)))
        (while (search-forward TeX-esc nil t)
          (cond
            ((looking-at "left\\b")
             (setq count (+ count LaTeX-left-right-indent-level)))
            ((looking-at "right\\b")
             (setq count (- count LaTeX-left-right-indent-level)))
            ((looking-at LaTeX-begin-regexp)
             (setq count (+ count LaTeX-indent-level)))
            ((looking-at "else\\b"))
            ((looking-at LaTeX-end-regexp)
             (setq count (- count LaTeX-indent-level)))
            ((looking-at (regexp-quote TeX-esc))
             (forward-char 1))))
        count))))

ध्यान दें कि मुझे फिर से परिभाषित करना था LaTeX-indent-level-count। अंतर केवल एक condशाखा है:

((looking-at "else\\b"))

एक जादू की तरह काम करता है!
११:१५ बजे

ओपी के समान समस्या होने पर, मैंने आपके कोड की प्रतिलिपि बनाई और यह काम कर गया, लेकिन पूरी तरह से संतोषजनक नहीं। यह केवल अगले तक इंडेंट करता है \else। की स्थिति \elseसही है, लेकिन \doanotherthinस्तंभ के बजाय निम्नलिखित कोड ( , प्रश्न देखें) अभी भी पहले कॉलम में है। मैंने आपकी पहली कोड लाइन को बदल दिया है, जिसमें \ ifx- कमांड और विचार शामिल करने के लिए, और कमांड जोड़ना मदद करेगा, लेकिन मैं असफल रहा (कम से कम फिर से इंडेंटिंग के बाद \else)। तो यहां मेरा आंशिक रूप से काम करने वाला कोड है: (setq LaTeX-begin-regexp "\\(?:begin\\|if\\|ifx\\|else\\)\\b") कोई विचार?
Jan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.