Insertion rapide de symboles Unicode?

8

Actuellement, j'insère des caractères Unicode (principalement des symboles mathématiques) en utilisant la méthode d'entrée TeX. C'est lourd, car pour chaque personnage, je dois faire ce qui suit:

  1. Passer à la méthode de saisie TeX en appuyant sur C-\
  2. expression de type latex comme \Bbb{R}ou\Leftrightarrow

Il y a un sous-ensemble relativement petit de caractères Unicode (10-20) que j'insère tout le temps.

Q: Existe - t-il un moyen d'insérer des caractères Unicode avec quelques (2-4) touches?

Un esprit vide
la source
1
Il convient peut-être de mentionner qu'il n'est pas nécessaire de passer à la méthode d'entrée TeX à chaque fois. Vous pouvez simplement le laisser allumé. Le seul inconvénient est la nécessité de taper \\ lorsque vous voulez une barre oblique inversée
déconseillée le

Réponses:

6

Vous pouvez utiliser abbrev-modepour créer des chaînes qui "s'étendent" aux caractères Unicode souhaités. Par exemple, le abbrevtableau suivant définit les abréviations des trois premières lettres minuscules de l'alphabet grec:

(define-abbrev-table 'unicode-table
  '(("ualpha" "α")
    ("ubeta"  "β")
    ("ugamma" "γ"))
    "Unicode characters I use all the time.")

Vous pouvez ensuite dire text-mode(ou tout autre mode que vous souhaitez) d'hériter de votre table unicode:

(define-abbrev-table 'text-mode-abbrev-table
  nil
  "Text mode abbrev table."
  :parents (list unicode-table))

Accédez à un tampon en mode texte. Allumez abbrev-mode. Tapez ualphaet un caractère non-mot (espace, point, etc.) et regardez-le se développer en α.

Dan
la source
6

Vous pouvez définir vos propres séquences de touches avec les fonctions elisp global-set-keyet local-set-key. Ainsi, il est recommandé d'utiliser C-cet une seule lettre pour les séquences de touches définies par l'utilisateur. (Sinon, il se peut que vous remplaciez des séquences de clés liées par d'autres bibliothèques emacs-lisp. Plus tard, vous rencontrez des problèmes lorsque vous découvrez que la version de bibliothèque de la séquence de touches vous serait très utile.)

Si vous souhaitez utiliser ces séquences indépendamment du mode principal, vous pouvez les lier globalement.

Pour un exemple, vous pouvez ajouter

(global-set-key (kbd "C-c a") "⇔")

à votre fichier de configuration ~/.emacs.

Alternativement, vous pouvez utiliser ces touches en fonction du mode principal.

Un exemple est:

(defun my-latex-hook-function () (local-set-key (kbd "C-c a") "⇔"))
(add-hook 'TeX-mode-hook 'my-latex-hook-function)

Cela fonctionne avec auctex. Si vous utilisez le natif tex-modeou latex-modeil se peut que vous deviez le remplacer TeX-mode-hookpar tex-mode-hook.


Notez qu'il est également insert-charlié à C-x 8 RET. Ainsi, vous pouvez saisir des caractères utf8 si vous connaissez leur code. Si vous ne connaissez pas le code, vous pouvez les saisir par leur description mais cela devient lourd.


Il existe également des modes spéciaux prenant en charge l'utilisateur avec l'entrée de symboles en latex, tels que company-math-Mode et ac-math-mode .

Les deux sont des modes d'achèvement. companyfonctionne avec les menus de la souris et ac(saisie semi-automatique) fonctionne avec la tabtouche.

Mais je ne suis pas sûr de l'état actuel de ces packages. Vous pouvez installer ces modes par melpa si vous souhaitez les essayer.

Tobias
la source
FWIW: Les utilisateurs peuvent utiliser toutes les séquences de touches qu'ils souhaitent. L'avantage d'une séquence de touches qui commence par C-cest que vous pouvez être sûr qu'elle n'entrera pas en conflit avec les liaisons de touches fournies par Emacs ou une bibliothèque que vous pourriez utiliser.
Drew
@Drew Oui, je le sais. Le risque potentiel de conflits avec les séquences de clés de bibliothèque est la raison de ma recommandation.
Tobias
Oui, je l'ai compris. Mon commentaire était destiné à tous les lecteurs de votre réponse qui pourraient avoir une impression différente de " vous devez suivre la convention pour utiliser Cc et une seule lettre pour les séquences de touches définies par l'utilisateur. " Il n'y a pas de convention pour les clés définies par l'utilisateur à utiliser Cc plus une lettre. Je suis sûr que nous sommes d'accord - je voulais juste que ce soit clair pour les lecteurs. Si vous aviez dit que vous recommandiez d' utiliser Cc plus une lettre (des points bonus pour dire pourquoi), je n'aurais pas commenté. HTH.
Drew
@Drew C'est la raison pour laquelle j'ai ajouté le lien. Le texte lié rend tout clair. Maintenant, j'ai également ajouté une note dans le texte.
Tobias
3

Vous dites: Il y a un sous-ensemble relativement petit de caractères Unicode (je suppose 10-20) que j'insère tout le temps.

Dans ce cas, comme @Tobias l'a indiqué, vous pouvez simplement lier, pour chacun d'eux, une simple séquence de touches à (a) une commande qui insère ce caractère ou (b) une chaîne de caractères unique avec ce caractère (cela agit comme une macro clavier, pour insérer le caractère).

La bibliothèque ucs-cmds.elpeut vous aider à définir de telles commandes. Les commandes résultantes ont les mêmes noms que les caractères. Vous pouvez utiliser une macro ucsc-make-commandspour définir un ensemble complet de commandes qui insèrent un caractère d'un certain type.

Par exemple, vous pouvez mettre ceci dans votre fichier init pour définir des commandes qui insèrent tous les symboles mathématiques Unicode:

(require 'ucs-cmds)           ; Load the library
(ucsc-make-commands "^math")  ; Use the macro to create commands

Cela vous donne des commandes dont les noms sont les mêmes que les caractères mathématiques. Liez n'importe lequel d'entre eux que vous utilisez beaucoup à des touches faciles à utiliser. Par exemple:

(global-set-key (kbd "C-c S") 'mathematical-bold-capital-sigma)

(Ou liez une clé à une telle commande uniquement en mode Tex, en utilisant define-keyavec son clavier.)

Avec aussi simple que cela, (ucsc-make-commands "^math")vous disposez de toutes les commandes d'insertion de caractères répertoriées ci-dessous.

Il existe également d'autres caractères Unicode, dont les noms ne commencent pas par mathmais qui sont utilisés en mathématiques - par exemple, caractère PARTIAL DIFFERENTIAL. Vous pouvez facilement créer des commandes qui insèrent également l'un de ces caractères. (Et notez que les caractères dont les noms commencent par mathpourraient bien nécessiter l'utilisation d'une police spéciale - de nombreuses polices ne les prennent pas en charge.)

Vous pouvez bien sûr utiliser une expression régulière plus stricte que ^mathsi vous souhaitez définir uniquement des caractères correspondant à un tel modèle. Par exemple, cela définit les commandes pour tous les caractères différentiels partiels:

(ucsc-make-commands "^math.*partial differential")

Cela vous donne ces commandes:

mathematical-bold-italic-partial-differential
mathematical-bold-partial-differential
mathematical-italic-partial-differential
mathematical-sans-serif-bold-italic-partial-differential
mathematical-sans-serif-bold-partial-differential

Notez que les noms de caractères Unicode séparent les mots par des espaces et que les noms sont en majuscules. Les commandes d'insertion correspondantes utilisent des tirets au lieu d'espaces et des minuscules au lieu de majuscules.

Un avantage d'avoir des commandes nommées d'après les caractères qu'ils insèrent, au lieu, disons, de simplement lier des clés aux chaînes singleton des caractères, est que vous pouvez utiliser M-xpour entrer des caractères que vous utilisez moins souvent, par nom en utilisant la complétion. Au lieu de compléter par rapport à l'ensemble complet des noms de caractères Unicode, vous complétez par les noms des commandes d'insertion de caractères que vous avez définies.


Ce sont les commandes qui insèrent des caractères dont les noms commencent par math. C'est ce que vous obtenez en évaluant (ucsc-make-commands "^math").

mathematical-bold-capital-a
mathematical-bold-capital-alpha
mathematical-bold-capital-b
mathematical-bold-capital-beta
mathematical-bold-capital-c
mathematical-bold-capital-chi
mathematical-bold-capital-d
mathematical-bold-capital-delta

...

mathematical-bold-digit-eight
mathematical-bold-digit-five
mathematical-bold-digit-four

...

mathematical-bold-epsilon-symbol
mathematical-bold-fraktur-capital-a
mathematical-bold-fraktur-capital-b

...

mathematical-bold-fraktur-small-a
mathematical-bold-fraktur-small-b

...

mathematical-bold-italic-capital-a
mathematical-bold-italic-capital-alpha
mathematical-bold-italic-capital-b
mathematical-bold-italic-capital-beta

...

mathematical-bold-italic-nabla
mathematical-bold-italic-partial-differential
mathematical-bold-italic-phi-symbol
mathematical-bold-italic-pi-symbol
mathematical-bold-italic-rho-symbol
mathematical-bold-italic-small-a
mathematical-bold-italic-small-alpha
mathematical-bold-italic-small-b
mathematical-bold-italic-small-beta

...

mathematical-bold-nabla
mathematical-bold-partial-differential
mathematical-bold-phi-symbol
mathematical-bold-pi-symbol
mathematical-bold-rho-symbol
mathematical-bold-script-capital-a
mathematical-bold-script-capital-b

...

mathematical-bold-script-small-a
mathematical-bold-script-small-b

...

mathematical-bold-small-a
mathematical-bold-small-alpha
mathematical-bold-small-b
mathematical-bold-small-beta

...

mathematical-double-struck-capital-a
mathematical-double-struck-capital-b

...

mathematical-double-struck-digit-eight
mathematical-double-struck-digit-five
mathematical-double-struck-digit-four
mathematical-double-struck-digit-nine
mathematical-double-struck-digit-one
mathematical-double-struck-digit-seven
mathematical-double-struck-digit-six
mathematical-double-struck-digit-three
mathematical-double-struck-digit-two
mathematical-double-struck-digit-zero
mathematical-double-struck-small-a
mathematical-double-struck-small-b

...

mathematical-falling-diagonal
mathematical-fraktur-capital-a
mathematical-fraktur-capital-b

...

mathematical-fraktur-small-a
mathematical-fraktur-small-b

...

mathematical-italic-capital-a
mathematical-italic-capital-alpha
mathematical-italic-capital-b
mathematical-italic-capital-beta

...

mathematical-italic-nabla
mathematical-italic-partial-differential
mathematical-italic-phi-symbol
mathematical-italic-pi-symbol
mathematical-italic-rho-symbol
mathematical-italic-small-a
mathematical-italic-small-alpha

...

mathematical-italic-small-dotless-i
mathematical-italic-small-dotless-j
mathematical-italic-small-e
mathematical-italic-small-epsilon

...

mathematical-italic-small-final-sigma

...

mathematical-left-angle-bracket
mathematical-left-double-angle-bracket
mathematical-left-flattened-parenthesis
mathematical-left-white-square-bracket
mathematical-left-white-tortoise-shell-bracket
mathematical-monospace-capital-a
mathematical-monospace-capital-b

...

mathematical-monospace-digit-eight
mathematical-monospace-digit-five
mathematical-monospace-digit-four

...

mathematical-monospace-small-a
mathematical-monospace-small-b

...

mathematical-right-angle-bracket
mathematical-right-double-angle-bracket
mathematical-right-flattened-parenthesis
mathematical-right-white-square-bracket
mathematical-right-white-tortoise-shell-bracket
mathematical-rising-diagonal
mathematical-sans-serif-bold-capital-a
mathematical-sans-serif-bold-capital-alpha
mathematical-sans-serif-bold-capital-b
mathematical-sans-serif-bold-capital-beta

...

mathematical-sans-serif-bold-digit-eight
mathematical-sans-serif-bold-digit-five
mathematical-sans-serif-bold-digit-four

...

mathematical-sans-serif-bold-italic-capital-a
mathematical-sans-serif-bold-italic-capital-alpha
mathematical-sans-serif-bold-italic-capital-b
mathematical-sans-serif-bold-italic-capital-beta

...

mathematical-sans-serif-bold-italic-nabla
mathematical-sans-serif-bold-italic-partial-differential

...

mathematical-sans-serif-bold-italic-small-a
mathematical-sans-serif-bold-italic-small-alpha
mathematical-sans-serif-bold-italic-small-b
mathematical-sans-serif-bold-italic-small-beta

...

mathematical-sans-serif-bold-italic-small-final-sigma

...

mathematical-sans-serif-bold-nabla
mathematical-sans-serif-bold-partial-differential

...

mathematical-sans-serif-bold-small-a
mathematical-sans-serif-bold-small-alpha
mathematical-sans-serif-bold-small-b
mathematical-sans-serif-bold-small-beta

...

mathematical-sans-serif-bold-small-final-sigma

...

mathematical-sans-serif-capital-a
mathematical-sans-serif-capital-b

...

mathematical-sans-serif-digit-eight
mathematical-sans-serif-digit-five
mathematical-sans-serif-digit-four

...

mathematical-sans-serif-italic-capital-a
mathematical-sans-serif-italic-capital-b

...

mathematical-sans-serif-italic-small-a
mathematical-sans-serif-italic-small-b

...

mathematical-sans-serif-small-a
mathematical-sans-serif-small-b

...

mathematical-script-capital-a

...

mathematical-script-small-a
mathematical-script-small-b

...

A dessiné
la source