Tự động thụt lề \ if các câu lệnh với AocateeX


12

AUCTeXHành vi hiện tại đối với texmã nguyên thủy liên quan đến các câu lệnh if giống như là thụt vào câu lệnh có điều kiện ở cùng mức với điều kiện xung quanh. Mã ví dụ như

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

xuất hiện như một khối lớn của văn bản. Tôi muốn làm cho AUCTeXthụt lề đoạn trích như sau:

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

Điều này có thể không?

Câu trả lời:


7

Điều đó là có thể:

(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))))

Lưu ý rằng tôi phải xác định lại LaTeX-indent-level-count. Khác biệt chỉ đơn giản là một condnhánh:

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

Hoạt động như một lá bùa!
elemakil

Có vấn đề tương tự như OP, tôi đã sao chép mã của bạn và nó đã hoạt động, nhưng không hoàn toàn thỏa đáng. Nó chỉ thụt lề cho đến tiếp theo \else. Vị trí của \elsechính xác, nhưng đoạn mã sau ( \doanotherthin, xem câu hỏi) vẫn ở cột đầu tiên, thay vì cột 3. Tôi đã thay đổi dòng mã đầu tiên của bạn, để kết hợp cả lệnh \ ifx và suy nghĩ, thêm lệnh khác sẽ giúp, nhưng tôi đã thất bại (ít nhất là với một lần nữa thụt vào sau \else). Vì vậy, đây là mã làm việc một phần của tôi: (setq LaTeX-begin-regexp "\\(?:begin\\|if\\|ifx\\|else\\)\\b") Bất kỳ ý tưởng?
ngày
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.