Сделать C-M-RET вставкой \item[]

В AUCTeX M-RET связан с (LaTeX-insert-item), что создает новую строку с правильным отступом и вставляет \item и пробел, после которого помещается курсор. Я хотел бы расширить эту функцию, чтобы C-M-RET имел аналогичную функциональность, но для \item[description].

Я бы хотел, чтобы C-M-RET

  1. сделайте новую строку с правильным отступом и вставьте \item[],
  2. поместите курсор между квадратными скобками и
  3. поместите курсор на один пробел после \item[] при нажатии Tab.

person N.N.    schedule 19.10.2011    source источник
comment
Auctex знает, когда вы находитесь в среде описания, и автоматически изменяет поведение M-RET. У вас это не работает или вы используете \item[description] в каком-то другом контексте?   -  person Tyler    schedule 20.10.2011


Ответы (2)


Следующая функция взята из latex.el и немного изменена, чтобы вызывать версию с подсказкой аргумента LaTeX-item-argument вместо того, чтобы просто вставлять элемент напрямую.

(defun LaTeX-insert-item-arg ()
  "Insert a new item in an environment, prompting for an item label.
You may use `LaTeX-item-list' to change the routines used to insert the item."
  (interactive "*")
  (let ((environment (LaTeX-current-environment)))
    (when (and (TeX-active-mark)
           (> (point) (mark)))
      (exchange-point-and-mark))
    (unless (bolp) (LaTeX-newline))
    (if (assoc environment LaTeX-item-list)
    (funcall (cdr (assoc environment LaTeX-item-list)))
      (LaTeX-item-argument)) ;; ONLY THIS LINE IS DIFFERENT
    (indent-according-to-mode)))

Вы можете привязать эту функцию к любой клавише, которая вам нравится:

(add-hook 'LaTeX-mode-hook (lambda () 
    (local-set-key [(control return)] 'LaTeX-insert-item-arg)))

Если вы хотите M-C-RET, используйте вместо этого (meta control return), хотя кажется, что он работает только с клавишей Alt, а не с клавишей Esc (которая обычно ведет себя одинаково...)

person Ben Lerner    schedule 19.10.2011

Похоже, вам нужно поведение фрагментов Textmate.

Вам понадобится yasnippet, чтобы выполнить расширение фрагмента/перемещение поля. ИМО, привязывать это к ключу не очень хорошее решение, потому что количество ключей ограничено, но yasnippet также позволяет вам это сделать.

person event_jr    schedule 19.10.2011
comment
(LaTeX-insert-item) знает о средах LaTeX, поэтому делает отступы правильно. Вот почему я хочу подобную функциональность, но для \item[]. Я не знаю, как сделать так, чтобы yasnippet знал о среде LaTeX. Кроме того, C-M-RET и C-RET не связаны в AUCTeX. - person N.N.; 19.10.2011
comment
Я не работаю с LaTeX, но yasnippet может делать отступы фрагментов в основных режимах, где отступ четко определен, т.е. TAB делает отступы правильно. Если вам нужен хороший опыт плавного заполнения поля, я бы посмотрел на yasnippet в качестве отправной точки. - person event_jr; 19.10.2011