Hi Keita,
Ikumi Keita <[email protected]> writes:
> I see, then I don't adhere to my proposal. I think it is best to do it
> in a way that is easy for you. ;-)
Thanks. I'm attaching the change I currently have. Please let me know
if you have any comments, otherwise I will install it.
Best, Arash
diff --git a/doc/auctex.texi b/doc/auctex.texi
index 682e4ed8..8e3f8d51 100644
--- a/doc/auctex.texi
+++ b/doc/auctex.texi
@@ -5650,6 +5650,19 @@ Following is a list of available hooks for
@item LaTeX-env-item
Insert the given environment and the first item.
+@item LaTeX-env-item-args
+Insert the given environment, the first item and further arguments to the
+environment. You can use this as a hook in case you want to specify
+multiple complex arguments just like in elements of
+@code{TeX-add-symbols}. Here is an example from @file{enumitem.el} in
+order to prompt for a @samp{key=value} list to be inserted as an optional
+argument to the @samp{itemize} environment:
+@lisp
+(LaTeX-add-environments
+ '("itemize" LaTeX-env-item-args
+ [TeX-arg-key-val (LaTeX-enumitem-key-val-options)]))
+@end lisp
+
@item LaTeX-env-figure
Insert the given figure-like environment with a caption and a label.
@@ -5660,6 +5673,10 @@ specifications.
@item LaTeX-env-label
Insert the given environment with a label.
+@item LaTeX-env-label-args
+Insert the given environment with a label and further arguments to the
+environment.
+
@item LaTeX-env-list
Insert the given list-like environment, a specifier for the label and
the first item.
diff --git a/latex.el b/latex.el
index e096603b..d87c69fa 100644
--- a/latex.el
+++ b/latex.el
@@ -1061,6 +1061,15 @@ If nil, act like the empty string is given, but do not prompt."
:group 'LaTeX-label
:type 'string)
+(defun LaTeX--env-parse-args (args)
+ "Helper function to insert arguments defined by 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-item (environment)
"Insert ENVIRONMENT and the first item."
(LaTeX-insert-environment environment)
@@ -1088,6 +1097,11 @@ If nil, act like the empty string is given, but do not prompt."
(current-fill-column)))
(LaTeX-fill-paragraph nil)))
+(defun LaTeX-env-item-args (environment &rest args)
+ "Run `LaTeX-env-item' on ENVIRONMENT and insert ARGS."
+ (LaTeX-env-item environment)
+ (LaTeX--env-parse-args args))
+
(defcustom LaTeX-label-alist
'(("figure" . LaTeX-figure-label)
("table" . LaTeX-table-label)
@@ -1296,6 +1310,11 @@ Just like array and tabular."
;; Restore the positions of point and mark.
(exchange-point-and-mark)))
+(defun LaTeX-env-label-args (environment &rest args)
+ "Run `LaTeX-env-label' on ENVIRONMENT and insert ARGS."
+ (LaTeX-env-label environment)
+ (LaTeX--env-parse-args args))
+
(defun LaTeX-env-list (environment)
"Insert ENVIRONMENT and the first item."
(let ((label (TeX-read-string "Default Label: ")))
@@ -1422,12 +1441,7 @@ Just like array and tabular."
(defun LaTeX-env-args (environment &rest args)
"Insert ENVIRONMENT and arguments defined by ARGS."
(LaTeX-insert-environment environment)
- (save-excursion
- (LaTeX-find-matching-begin)
- (end-of-line)
- (let ((TeX-exit-mark (or TeX-exit-mark
- (make-marker))))
- (TeX-parse-arguments args))))
+ (LaTeX--env-parse-args args))
(defun LaTeX-env-label-as-keyval (_optional &optional keyword keyvals environment)
"Query for a label and insert it in the optional argument of an environment.
@@ -7458,10 +7472,12 @@ or `LaTeX-environment-list' and returns it."
(TeX-symbol-list)
(LaTeX-environment-list)))))
- ;; Check if there is a `LaTeX-env-args' in the `arg-list' and
+ ;; Check if there is a `LaTeX-env-*-args' in the `arg-list' and
;; remove it:
(when (and (eq mac-or-env 'env)
- (eq (car arg-list) #'LaTeX-env-args))
+ (memq (car arg-list) '(LaTeX-env-args
+ LaTeX-env-item-args
+ LaTeX-env-label-args)))
(pop arg-list))
;; Check for `TeX-arg-conditional' here and change `arg-list'