auctex-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Extending env definitions or introducing new ones?


From: Arash Esbati
Subject: Extending env definitions or introducing new ones?
Date: Sat, 05 Nov 2022 13:30:39 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50

Hi all,

we have the situation that many AUCTeX styles bake their own definitions
for inserting environments; mostly for key-val options and other sort of
arguments.  The issue is that latex.el offers only `LaTeX-env-args'.
Suppose you want to insert an environment with `LaTeX-env-label' and
also have some other arguments after \begin{evn-name}, then you copy the
definition of `LaTeX-env-label' and fiddle the rest into it.

I see two solutions for this:

 1. Extend the functions we have, e.g. take this current definition:

    (defun LaTeX-env-label (environment)
      "Insert ENVIRONMENT and prompt for label."
      (LaTeX-insert-environment environment)
      (when (TeX-active-mark)
        ;; Point is at the end of the region.  Move it back to the
        ;; beginning of the region.
        (exchange-point-and-mark)
        (indent-according-to-mode))
      (when (LaTeX-label environment 'environment)
        (LaTeX-newline)
        (indent-according-to-mode))
      (when (TeX-active-mark)
        (indent-region (point) (mark))
        ;; Restore the positions of point and mark.
        (exchange-point-and-mark)))

    And turn it into this:

    (defun LaTeX--env-parse-args (args)
      (when args
        (save-excursion
          (LaTeX-find-matching-begin)
          (end-of-line)
          (let ((TeX-exit-mark (or TeX-exit-mark
                                   (make-marker))))
            (TeX-parse-arguments args)))))

    (defun LaTeX-env-label (environment &rest args)
      "Insert ENVIRONMENT and prompt for label."
      (LaTeX-insert-environment environment)
      (when (TeX-active-mark)
        ;; Point is at the end of the region.  Move it back to the
        ;; beginning of the region.
        (exchange-point-and-mark)
        (indent-according-to-mode))
      (when (LaTeX-label environment 'environment)
        (LaTeX-newline)
        (indent-according-to-mode))
      (when (TeX-active-mark)
        (indent-region (point) (mark))
        ;; Restore the positions of point and mark.
        (exchange-point-and-mark))
      (LaTeX--env-parse-args args))

 2. Introduce new function like this:

    (defun LaTeX--env-parse-args (args)
      (when args
        (save-excursion
          (LaTeX-find-matching-begin)
          (end-of-line)
          (let ((TeX-exit-mark (or TeX-exit-mark
                                   (make-marker))))
            (TeX-parse-arguments args)))))

    (defun LaTeX-env-label-args (environment &rest args)
      (LaTeX-env-label environment)
      (LaTeX--env-parse-args args))

WDYT?

Best, Arash



reply via email to

[Prev in Thread] Current Thread [Next in Thread]