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?

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.