Rientro tra parentesi quadre


8

Ancora un'altra domanda sul rientro in AUCTeX ...

Vorrei poter rientrare il contenuto tra parentesi quadre [...]. Sarebbe utile per gli elenchi di opzioni di tikz, ad esempio, o per gli alberi disegnati usando foresto qtree: entrambi questi pacchetti usano parentesi quadre per la loro sintassi, il che semplifica la scansione del codice sorgente in un editor che supporta il rientro parentale.

Sfortunatamente, AUCTeX fa rientrare solo il contenuto degli ambienti e il contenuto tra parentesi graffe {...}.

L' forestesempio è anche una situazione in cui barare aggiungendo parentesi graffe attorno al contenuto che vogliamo rientrare non funzionerà, perché le parentesi graffe eviteranno che tutto il contenuto venga valutato come un albero.

Esempio:

\documentclass{article}
\usepackage{forest}

\begin{document}

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

\end{document}

Che vorrei rientrare come:

\documentclass{article}
\usepackage{forest}

\begin{document}

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

\end{document}

C'è un modo?


Proprio all'interno forestdell'ambiente?
giordano,

@giordano Idealmente, ovunque. Ma se hai una soluzione che funziona specificamente per la foresta, sarà comunque un buon inizio.
T. Verron,

Beh, ho avuto un'idea ma non funzionava davvero, quindi devo pensarci di più
giordano il

@giordano @ T.Verron Come è passato un po 'di tempo dall'ultimo post: hai trovato una soluzione a questo? Ho provato ad adattare la soluzione per Lisp menzionata qui ma senza risultati. Più precisamente, ci ho provato (modify-syntax-entry ?\[ "(]" LaTeX-mode-syntax-table) (modify-syntax-entry ?\] ")[" LaTeX-mode-syntax-table).
Timm,

@Timm Purtroppo, non ho ancora alcuna soluzione. La tabella della sintassi è corretta: character: [ (...) syntax: (] which means: open, matches ]ma sembra che il meccanismo di indentazione di AUCTeX ignori queste informazioni.
T. Verron,

Risposte:


7

Impostazione LaTeX-begin-regexpe LaTeX-end-regexpnon aiuta qui perché al LaTeX-indent-level-countsuo interno cerca una barra rovesciata prima di controllare la regexp.

Ho funzionato modificando TeX-brace-count-line. Questa soluzione conta []come controvento {}. Confrontalo funzionerà originale se vuoi vedere la differenza.

(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)))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.