Hi Arash, 2015-08-19 0:27 GMT+02:00 Arash Esbati <esb...@gmx.de>: > Mosè Giordano <m...@gnu.org> writes: > > Hi Mosè, > >> 2015-08-18 22:19 GMT+02:00 Arash Esbati <esb...@gmx.de>: > > [...] > >>> My question is, does AUCTeX has something equivalent to `reftex-label' >>> or should I just read the label as a string? >> >> To insert a new label there is `TeX-arg-define-label', instead to read >> a label we have `TeX-arg-label'. There is also `LaTeX-label' to >> insert the whole "\label{}" macro (which is probably what you're >> looking for, right?). > > thanks for your response. Indeed, I want to read-in the label and then > insert it at once with the caption text. The issue with the other > functions you mentioned is that they insert text at point upon > execution, i.e.: > > --8<---------------cut here---------------start------------->8--- > \begin{figure} > % with (reftex-label nil t): Works > \captionbox{foobar\label{fig:foo}}{} > % with (TeX-arg-define-label) > \captionbox{fig:foo}{foobar\label{nil}}{} > % with (LaTeX-label 'environment) > \captionbox\label{fig:foo}{foobar\label{fig:foo}}{} > \end{figure} > --8<---------------cut here---------------end--------------->8--- > > The function was modified like this: > --8<---------------cut here---------------start------------->8--- > > (defun LaTeX-arg-caption-captionbox (optional &optional prompt) > "Query for the arguments of `\\captionbox' incl. a label and > insert them." > (let* ((caption (TeX-read-string (TeX-argument-prompt optional prompt > "Caption"))) > (label ; (if (fboundp 'reftex-label) Version 1 > ; (reftex-label nil t) Version 1 > ; (TeX-read-string (TeX-argument-prompt optional prompt > "Label"))) Version 1 > ; (TeX-arg-define-label optional prompt) ; Version 2 > (LaTeX-label 'environment) ;; Version 3 > ) > (width (completing-read (TeX-argument-prompt t prompt "Width") > (mapcar (lambda(elt) (concat TeX-esc (car > elt))) > (LaTeX-length-list)))) > (inpos (completing-read (TeX-argument-prompt t prompt "Inner > position") > '("c" "l" "r" "s"))) > (heading (format "%s\\label{%s}" caption label))) > (LaTeX-indent-line) > (TeX-argument-insert heading optional) > (cond (;; 2 optional args > (and width (not (string-equal width "")) > inpos (not (string-equal inpos ""))) > (insert (format "[%s][%s]" width inpos))) > (;; 1st empty opt. arg, 2nd opt. arg > (and (string-equal width "") > inpos (not (string-equal inpos ""))) > (insert (format "[][%s]" inpos))) > (;; 1st opt. arg, 2nd empty opt. arg > (and width (not (string-equal width "")) > (string-equal inpos "")) > (insert (format "[%s]" width))) > (t ; Do nothing if both empty > (ignore))) > (LaTeX-fill-paragraph))) > --8<---------------cut here---------------end--------------->8--- > >> As a rule of thumb, in AUCTeX you should always use these functions >> and avoid using reftex' ones, since the jobs are seamlessly >> transferred to the reftex equivalents if `reftex-plug-into-AUCTeX' has >> been called. > > Of course, you're right. But do you a hint how I can achieve the > desired result with AUCTeX functions?
With the brand-new `TeX-arg-label' function! I'd suggest you to use the same check done inside `LaTeX-label' (if `LaTeX-label-function' is a valid function call it), but I suspect you need to pass to `reftex-label' also the second argument, which is not requested by `LaTeX-label-function'. Probably there aren't many other functions bound to `LaTeX-label-function' apart from `reftex-label', in which case we could update the docstring of `LaTeX-label-function' requesting also a second argument, but we need some feedback from users before doing this change. Bye, Mosè _______________________________________________ auctex-devel mailing list auctex-devel@gnu.org https://lists.gnu.org/mailman/listinfo/auctex-devel