大括弧内のインデント


8

AUCTeXのインデントに関するさらに別の 質問 ...

角かっこでコンテンツをインデントできるようにしたいと思います[...]。それは例えば、は、TikZオプションリストのために有用である、または樹木使用して描かれたでしょうforestqtree。両方これらのパッケージは、それが簡単に括弧インデントをサポートするエディタでソースコードをスキャンすることができ、その構文のために角括弧を使用します。

残念ながら、AUCTeXは環境のコンテンツと中括弧の間のコンテンツのみをインデントします{...}

このforest例は、インデントしたいコンテンツの周りに中括弧を追加することによる不正行為が機能しない状況でもあります。中括弧はすべてのコンテンツがツリーとして評価されないようにするためです。

例:

\documentclass{article}
\usepackage{forest}

\begin{document}

\begin{forest}
  [A
  [B]
  [C
  [D]
  [E]
  ]
  ]
\end{forest}

\end{document}

私は次のようにインデントしたいと思います:

\documentclass{article}
\usepackage{forest}

\begin{document}

\begin{forest}
  [A
    [B]
    [C
      [D]
      [E]
    ]
  ]
\end{forest}

\end{document}

方法はありますか?


ちょうどforest環境の中に?
Giordano

@giordano理想的には、どこでも。しかし、もしあなたが森のために特別に機能する解決策を持っているなら、それはまだ良いスタートです。
T. Verron、2015年

まあ、私が考えていたが、実際に働いていなかったので、私はもっと考えなければならない
ジョルダーノ

@giordano @ T.Verron前回の投稿からしばらく時間が経過したため、これに対する解決策を見つけましたか?ここで述べ Lispにソリューションを適合させようとしましが、結果はありませんでした。より正確には、私は試しました(modify-syntax-entry ?\[ "(]" LaTeX-mode-syntax-table) (modify-syntax-entry ?\] ")[" LaTeX-mode-syntax-table)
Timm

@ティム悲しいことに、私にはまだ解決策がありません。構文表は正しいですcharacter: [ (...) syntax: (] which means: open, matches ]が、AUCTeXのインデントメカニズムはこの情報を無視しているようです。
T.ヴァーロン16年

回答:


7

ここでは、正規表現をチェックする前にバックスラッシュを検索するため、ここでは設定LaTeX-begin-regexpLaTeX-end-regexpませんLaTeX-indent-level-count

私はそれを修正することで機能させましたTeX-brace-count-line。このソリューションは[]ブレースとしてカウントされ{}ます。違いを見たい場合は元の機能と比較してください。

(defun TeX-brace-count-line ()
  "Count number of open/closed braces."
  (save-excursion
    (let ((count 0) (limit (line-end-position)) char)
      (while (progn
               (skip-chars-forward "^{}[]\\\\" limit)
               (when (and (< (point) limit) (not (TeX-in-comment)))
                 (setq char (char-after))
                 (forward-char)
                 (cond ((eq char ?\{)
                        (setq count (+ count TeX-brace-indent-level)))
                       ((eq char ?\})
                        (setq count (- count TeX-brace-indent-level)))
                       ((eq char ?\[)
                        (setq count (+ count TeX-brace-indent-level)))
                       ((eq char ?\])
                        (setq count (- count TeX-brace-indent-level)))
                       ((eq char ?\\)
                        (when (< (point) limit)
                          (forward-char)
                          t))))))
      count)))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.