AUCTeX로 자동 들여 쓰기 \ if 문


12

if -like 문과 관련된 AUCTeX기본 tex코드 의 현재 동작 은 주변 조건과 동일한 수준에서 조건문을 들여 쓰는 것입니다. 즉, 같은 코드

\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. diff는 단순히 하나의 cond브랜치입니다.

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

매력처럼 작동합니다!
elemakil

OP와 동일한 문제가 발생하여 코드를 복사했지만 제대로 작동하지는 않았습니다. 그것은 다음까지 만 들여 쓰기 \else. 의 위치 \else는 정확하지만 다음 코드 ( \doanotherthin, 질문 참조)는 여전히 열 3 대신 첫 번째 열에 있습니다. 나는 첫 번째 코드 줄을 변경하여 \ ifx 명령을 통합하고 else 명령을 추가했습니다. 도움이되지만 실패했습니다 (적어도 다시 들여 쓰기로 \else). 여기 부분적으로 작동하는 코드가 있습니다 : (setq LaTeX-begin-regexp "\\(?:begin\\|if\\|ifx\\|else\\)\\b") 어떤 아이디어?
Jan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.