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は単に1つのcondブランチです。

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

魔法のように機能します!
エレマキル

OPと同じ問題を抱えて、私はあなたのコードをコピーし、それは機能しましたが、完全に満足できるものではありません。次までだけインデントし\elseます。の位置\elseは正しいですが、次のコード(\doanotherthin、質問を参照)は3列目ではなく、最初の列にあります。最初のコード行を変更し、\ ifxコマンドと思想を組み込み、elseコマンドを追加しました助けになるでしょうが、私は失敗しました(少なくとも後に再びインデントして\else)。ここに私の部分的に動作するコードがあります:(setq LaTeX-begin-regexp "\\(?:begin\\|if\\|ifx\\|else\\)\\b") アイデアはありますか?
1
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.