Pernyataan Indentasi Otomatis \ jika dengan AUCTeX

12

AUCTeXPerilaku saat ini untuk texkode primitif yang melibatkan pernyataan if- like adalah untuk membuat indentasi pernyataan bersyarat pada tingkat yang sama dengan kondisi di sekitarnya. Yaitu kode seperti

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

muncul sebagai blok teks besar. Saya ingin membuat AUCTeXindentasi cuplikan sebagai berikut:

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

Apakah ini mungkin?

elemakil
sumber

Jawaban:

7

Itu mungkin:

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

Perhatikan bahwa saya harus mendefinisikan ulang LaTeX-indent-level-count. Perbedaannya hanyalah satu condcabang:

((looking-at "else\\b"))
abo-abo
sumber
Bekerja seperti pesona!
elemakil
Memiliki masalah yang sama dengan OP, saya menyalin kode Anda dan itu berhasil, tetapi tidak sepenuhnya memuaskan. Itu indentasi hanya sampai berikutnya \else. Posisi \elsesudah benar, tetapi kode berikut ( \doanotherthin, lihat pertanyaan) masih di kolom pertama, bukan kolom 3. Saya mengubah baris kode pertama Anda, untuk memasukkan juga \ ifx-command dan thinking, menambahkan perintah lain akan membantu, tapi saya gagal (setidaknya dengan indentasi lagi setelah \else). Jadi di sini adalah kode saya yang berfungsi sebagian: (setq LaTeX-begin-regexp "\\(?:begin\\|if\\|ifx\\|else\\)\\b") Ada ide?
Jan