Автоматичне відступ \ якщо висловлювання з 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. Відмінність - це просто одна condгалузь:

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

Працює як шарм!
elemakil

Маючи ту саму проблему, що і ОП, я скопіював ваш код, і він спрацював, але не повністю задовільно. Він відступає лише до наступного \else. Позиція \elseправильне, але наступний код ( \doanotherthinдив. Питання) все ще знаходиться в першому стовпчику замість стовпця 3. Я змінив ваш перший рядок коду, щоб включити також команду \ ifx і думку, додавши команду else допомогло б, але я не зміг (принаймні, з повторним відступом після \else). Тож ось мій частково працюючий код: (setq LaTeX-begin-regexp "\\(?:begin\\|if\\|ifx\\|else\\)\\b") Будь-які ідеї?
Jan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.