Aprender gradualmente las combinaciones de teclas proporcionadas por AUCTeX

11

Si lo hago M-x forward-char, Emacs da un mensaje muy útil.

You can run the command "forward-char" with C-f.

Teniendo en cuenta el hecho de que Emacs puede encontrar todas las combinaciones de teclas de látex en el archivo latex.elbajo LaTeX-math-defaultproporcionada por AUCTeX, es posible que en el modo de látex (AUCTeX) Emacs me recuerda las combinaciones de teclas? Por ejemplo, después de escribir \sigmaEmacs muestra un mensaje que

You can insert "\sigma" by `s .

Esto sería muy útil ya que permite aprender gradualmente las combinaciones de teclas en modo LaTeX.

Nombre
fuente
2
No es una respuesta a su pregunta, pero la barra de menú debe mostrar los atajos de teclado si están definidos. Y, lo mismo que está disponible con un popup-menú (que muestra los accesos directos) - por ejemplo, (global-set-key [C-down-mouse-3] 'mouse-popup-menubar). De esa manera, no tienes mensajes hasta la saciedad.
abogados
@lawlist ¡Iba a comentar que los símbolos del modo matemático no están en el menú, pero en realidad tienen un menú completo propio! Incluso se muestran los que no tienen un atajo definido, con el código necesario para producirlos. ¡Muy útil!
Tyler

Respuestas:

9

Modificando mi respuesta desde aquí , podemos extraer estos datos LaTeX-math-default, que es una lista de 4 tuplas

(CHARACTER MACRO MENU UNICODE)

donde CHARACTERel carácter a utilizar para obligar a éste (ya sé que se parece a un entero, pero es un personaje, el uso (string CHARACTER)de ver), MACROes la macro de látex sin la barra, MENUes el nombre de los menús y UNICODEes un carácter Unicode utilizado para la visualización de El menú. Queremos verificar el primer y segundo elemento:

(defun show-latex-symbol-at-point ()
  (interactive)
  (let* ((sym (symbol-at-point))
         (latex-symbol (TeX-member sym LaTeX-math-default
                                   (lambda (a b)
                                     (string= a (nth 1 b)))))
         (shortcut (nth 0 latex-symbol))
         )
    (if (and latex-symbol shortcut)
        (message "You can insert \\%s with `%s"
                 (nth 1 latex-symbol)
                 (key-description (string shortcut))))))

Probablemente haya mejores formas de mostrar continuamente la salida, pero una forma de usarla post-command-hookpara ejecutar la función anterior después de cada comando. Usaremos un if para asegurarnos de que esto solo se ejecute enlatex-mode

(add-hook 'post-command-hook
          (lambda ()
            (if (bound-and-true-p LaTeX-math-mode)
                (show-latex-symbol-at-point)
              )
            ))
erikstokes
fuente
Muchas gracias por esta respuesta. Tu código funciona. Después de escribir $ \ sigma $, aparece un mensaje que dice You can insert \sigma with s. Permítame informar un posible error, si escribo $ \ oplus $ m hay un error que dice Error in post-command-hook ((lambda nil (if (eq major-mode (quote latex-mode)) (show-latex-symbol-at-point)))): (wrong-type-argument characterp nil). Creo que esto es causado por el hecho de que auctexno ha establecido un acceso directo para oplus( oplusse puede encontrar en LaTeX-math-default). Y a partir de este error, el código parece no funcionar, por ejemplo, escribiendo $ \ sigma $ no sucede nada.
Nombre
@Name Lo arreglé para no intentar imprimir cuando CHARACTEResnil
erikstokes
Perfecto. Pocas sugerencias menores: (1) Creo que el mensaje You can insert \sigma with `ses mejor que You can insert sigma with s. (2) Actualmente, después de escribir \rightarrow, You can insert rightarrow with ^Faparece el mensaje . Creo que el mensaje You can insert \rightarrow with `C-fes quizás mejor.
Nombre
Y, arreglado de nuevo.
erikstokes