AUCTeX ile Otomatik Girintileme \ if ifadeleri


12

Geçerli AUCTeXilkel için davranış texiçeren kod eğer -like ifadeleri çevreleyen koşulu olarak aynı seviyede koşullu deyimi girinti etmektir. Ie kodu gibi

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

büyük bir metin bloğu olarak görünür. AUCTeXSnippet'i aşağıdaki gibi girintilemek istiyorum :

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

Mümkün mü?

Yanıtlar:


7

Mümkün:

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

Yeniden tanımlamam gerektiğini unutmayın LaTeX-indent-level-count. Fark basitçe bir conddaldır:

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

Tıkır tıkır çalışıyor!
elemakil

OP ile aynı soruna sahip olarak, kodunuzu kopyaladım ve işe yaradı, ancak tamamen tatmin edici değil. Sadece bir sonrakine kadar girintili \else. Konumu \elsedoğru, ancak aşağıdaki kod ( \doanotherthinsoruya bakın) hala sütun 3 yerine ilk sütundadır. İlk kod satırınızı da değiştirdim, \ ifx komutunu da ekledim ve else komutunu ekleyerek düşündüm yardımcı olur, ancak başarısız oldum (en azından sonra tekrar girinti ile \else). Kısmen çalışan kodum: (setq LaTeX-begin-regexp "\\(?:begin\\|if\\|ifx\\|else\\)\\b") Herhangi bir fikir?
Ocak
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.