Imparare gradualmente le combinazioni di tasti fornite da AUCTeX


11

Se lo faccio M-x forward-char, Emacs dà un messaggio molto utile

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

Considerando il fatto che Emacs possono trovare tutti keybindings LaTeX nel file latex.elsotto LaTeX-math-defaultfornito da AUCTeX, è possibile che in modalità LaTeX (AUCTeX) Emacs mi ricorda le associazioni di tasti? Ad esempio dopo aver digitato \sigmaEmacs mostra un messaggio che

You can insert "\sigma" by `s .

Ciò sarebbe molto utile in quanto consente di apprendere gradualmente le combinazioni di tasti in modalità LaTeX.


2
Non è una risposta alla tua domanda, ma la barra dei menu dovrebbe mostrare le scorciatoie da tastiera se sono definite. E la stessa cosa è disponibile con un menu a comparsa (che mostra le scorciatoie) - ad es (global-set-key [C-down-mouse-3] 'mouse-popup-menubar). In questo modo, non hai messaggi fino alla nausea.
elenco delle leggi

@lawlist Stavo per commentare che i simboli della modalità matematica non sono presenti nel menu, ma in realtà hanno un menu tutto loro! Vengono visualizzati anche quelli che non hanno una scorciatoia definita, con il codice necessario per produrli. Molto maneggevole!
Tyler,

Risposte:


9

Modificando la mia risposta da qui , possiamo semplicemente estrarre questi dati LaTeX-math-default, che è un elenco di 4 tuple

(CHARACTER MACRO MENU UNICODE)

dove CHARACTERè il personaggio usato per legarlo (so che sembra un numero intero, ma è un personaggio, usa (string CHARACTER)per vedere), MACROè la macro in lattice senza barra, MENUè il nome per i menu ed UNICODEè un carattere unicode usato per la visualizzazione in il menu. Vogliamo controllare il primo e il secondo 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))))))

Probabilmente ci sono modi migliori per mostrare continuamente l'output, ma un modo da usare post-command-hookper eseguire la funzione sopra dopo ogni comando. Useremo un if per assicurarci che funzioni sololatex-mode

(add-hook 'post-command-hook
          (lambda ()
            (if (bound-and-true-p LaTeX-math-mode)
                (show-latex-symbol-at-point)
              )
            ))

Mille grazie per questa risposta. Il tuo codice funziona. Dopo aver digitato $ \ sigma $, appare un messaggio che dice You can insert \sigma with s. Consentitemi di segnalare un possibile bug, se digito $ \ oplus $ m viene visualizzato un errore Error in post-command-hook ((lambda nil (if (eq major-mode (quote latex-mode)) (show-latex-symbol-at-point)))): (wrong-type-argument characterp nil). Penso che questo sia causato dal fatto che auctexnon ha impostato una scorciatoia per oplus( opluspuò essere trovato sotto LaTeX-math-default). E da questo errore in poi, il codice sembra non funzionare, ad esempio digitando $ \ sigma $ non succede nulla.
Nome

@Nome l'ho corretto per non provare a stampare quando CHARACTERènil
erikstokes

Perfetto. Alcuni piccoli suggerimenti: (1) Penso che il messaggio You can insert \sigma with `ssia migliore di You can insert sigma with s. (2) Attualmente dopo aver digitato appare \rightarrowil messaggio You can insert rightarrow with ^F. Penso che il messaggio You can insert \rightarrow with `C-fsia forse migliore.
Nome

E, riparato di nuovo.
erikstokes
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.