การเยื้องอัตโนมัติ \ if คำสั่งที่มี AUCTeX


12

AUCTeXพฤติกรรมปัจจุบันของtexรหัสดั้งเดิมที่เกี่ยวข้องกับคำสั่งif -like คือการเยื้องคำสั่งเงื่อนไขที่ระดับเดียวกันกับสภาพแวดล้อม เช่นรหัสเช่น

\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ใหม่ diff เป็นเพียงหนึ่งcondสาขา:

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

ทำงานเหมือนจับใจ!
elemakil

มีปัญหาเดียวกันกับ OP ฉันคัดลอกรหัสของคุณและใช้งานได้ แต่ไม่พอใจอย่างสมบูรณ์ มันเพิ่ม Tab \elseเท่านั้นจนถึงถัดไป ตำแหน่งของ\elseถูกต้อง แต่รหัสต่อไปนี้ ( \doanotherthinดูคำถาม) ยังคงอยู่ในคอลัมน์แรกแทนที่จะเป็นคอลัมน์ 3 ฉันเปลี่ยนบรรทัดรหัสแรกของคุณเพื่อรวมคำสั่ง \ ifx-and และความคิดโดยเพิ่มคำสั่ง else จะช่วย แต่ฉันล้มเหลว (อย่างน้อยก็เยื้องอีกครั้งหลังจากนั้น\else) ดังนั้นนี่คือรหัสการทำงานบางส่วนของฉัน: (setq LaTeX-begin-regexp "\\(?:begin\\|if\\|ifx\\|else\\)\\b") ความคิดใด ๆ
มกราคม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.