2010-07-08 5 views
3

J'utilise Emacs/AucTeX pour éditer des fichiers LaTeX. Dans certains de mes fichiers LaTeX, j'ai défini une commande spécifique à un fichier (par exemple \todo{...} dans un fichier, \compute{...} dans un autre fichier, etc.), afin de pouvoir suivre les problèmes ouverts dans mes documents.Emacs: Définir une macro dans un commentaire et l'exécuter automatiquement

La commande highlight-regexp d'Emacs fait un très bon résultat en mettant en surbrillance toutes les occurrences de \todo{...} s resp. \compute{...} s. Mais jusqu'à maintenant, je dois exécuter la surbrillance manuellement chaque fois que j'ouvre le fichier correspondant.

Existe-t-il un moyen de demander à Emacs/AucTeX d'invoquer des commandes spécifiques lors de l'ouverture d'un fichier particulier? Je voudrais définir ces commandes à l'intérieur le fichier correspondant, donc je peux facilement l'ajuster pour différents fichiers (peut-être inclus dans les variables locales).

%%% Local Variables: 
%%% mode: latex 
%%% TeX-master: "master" 
%%% 
%%% here I would like to have something like: 
%%% execute highlight-regexp for specific arguments 
%%% 
%%% End: 
+2

vous connaissez le paquet todonotes? c'est excellent. – Mica

+0

Merci pour l'indice. Je vais regarder. – phimuemue

Répondre

5

Essayez ceci,

%%% Local Variables: 
%%% eval: (font-lock-add-keywords nil '(("\\\\todo" (0 font-lock-warning-face)))) 
%%% End: 

Voir Section 57.3.4.1, Specifying File Variables, pour plus de détails.

+0

Je dois admettre que je ne sais pas vraiment comment cela fonctionne, mais cela fonctionne vraiment. J'ai lu le manuel a eu la pensée de le faire avec 'eval', mais je n'étais pas capable de comprendre, comment cela fonctionne réellement. Cependant, j'ai lu que l'on ne doit pas inclure de conseils de mise en forme stylistiques dans les variables locales, mais plutôt dans les '.emacs 'personnels. Néanmoins, il répond à la question, donc accepté. – phimuemue

+0

Vous pouvez éviter le lambda en utilisant un crochet, (ajouter-crochet 'tex-mode-hook' (lambda() (font-lock-add-keywords nil '(("\\\\ todo" (0 lock-warning-face)))))) –

2

Vous pouvez utiliser un crochet en combinaison avec des variables locales. Par exemple, vous pouvez ajouter une variable locale dohighlight ou quelque chose, puis écrire une fonction comme ceci:

(defun condhighl() 
(when (boundp 'dohighlight) 
(highlight-regexp "regexp"))) 

puis ajouter cette fonction comme un crochet pour auctex

(add-hook 'tex-mode-hook 'condhighl) 

Vous pouvez ensuite ajouter le dohighlight var dans vos vars locaux aux tampons que vous voulez mettre en évidence le code.

+0

C'est une belle solution élégante. Je me demande s'il existe un mode mineur pour ce qu'il décrit, bien que ... –

+0

La solution est élégante. Mais il semble qu'Emacs passe d'abord en mode tex (c'est-à-dire en exécutant tout le hook-stuff) et après le chargement du fichier. Cela signifie que la variable est "vide" au moment critique. – phimuemue

+0

Il semble que le mode texte écrase les variables locales. Je peux obtenir ceci pour travailler dans d'autres modes en utilisant d'autres crochets de mode. –

2

Après avoir utilisé highlight-regexp pour configurer votre surbrillance, hi-lock-write-interactive-patterns (M-s h w) écrira les motifs dans le tampon comme commentaire magique.

Vous souhaitez probablement ajouter un mode: hi-lock après la ligne mode: latex pour activer la surbrillance dès que vous ouvrez le fichier.

Questions connexes