Question

Je voudrais utiliser latexmk pour compiler mon documents LaTeX dans Emacs. Surtout j'ai besoin next-error fonctionnalité Emacs, qui est généralement appelé avec C-x `, et saute à l'erreur suivante LaTeX dans le document.

Je voudrais appeler latexmk soit en utilisant C-x compile ou C-c C-c de AUCTeX.

D'abord, je mis latexmk à utiliser

$pdflatex = 'pdflatex -interaction=nonstopmode';

Option 1: C-x compilation

Je presse C-x compile et le type latexmk -pdf foo, qui court pdflatex. Mais next-error ne saute pas aux erreurs, même si la compilation * * buffer contient des erreurs:

! Paragraph ended before \author was complete.
<to be read again> 
                   \par 
l.48 
[...]
Compilation exited abnormally with code 12 

Comment puis-je sauter automatiquement à cette erreur dans la ligne 48?

Notez que cette question de l'analyse de la production de latex n'a rien à voir avec latexmk directement. Le même problème se produit lorsque je fais juste C-x compile pdflatex -interaction=nonstopmode foo.

Option 2: AUCTeX

Comment puis-je mettre AUCTeX appeler latexmk -pdf au lieu de pdflatex sur mon fichier .tex? Bien sûr, je veux next-error travailler ici aussi.

Mise à jour: J'ai commencé une prime parce que si cela a fonctionné, il serait un excellent outil pour beaucoup de gens. Je considère que la réponse à votre question si une solution est donnée qui me permet de Regroupez facilement mon document LaTeX en utilisant latexmk dans Emacs et sauter les erreurs à l'aide next-error (bien sûr, les erreurs peuvent être inclus fichiers .tex, pas nécessairement dans le fichier maître ou le tampon courant).

Mise à jour: Merci à Ivan (et Chris) pour faire le travail AUCTeX + latexmk. En attendant, je trouve que l'utilisation caoutchouc pour compiler est également LATEX un excellent choix. Il affiche des messages d'erreur dans le format utilisé par gcc et d'autres compilateurs, de sorte qu'il fonctionne naturellement avec Emacs C-x compile, par exemple C-x compile rubber --pdf foo et les messages d'erreur sont analysés correctement.

Était-ce utile?

La solution

Désolé, je n'ai pas la possibilité de commenter ou je voudrais juste ajouter cela comme un commentaire. La réponse de Chris Conway travaille, sauf qu'il doit utiliser TeX-run-TeX au lieu de TeX-run-command afin que AucTeX sait traiter les messages d'erreur.

(add-hook 'LaTeX-mode-hook (lambda ()
  (push 
    '("Latexmk" "latexmk -pdf %s" TeX-run-TeX nil t
      :help "Run Latexmk on file")
    TeX-command-list)))

Il pourrait aussi être sage d'ajouter quelque chose comme

'("%(-PDF)"
  (lambda ()
    (if (and (not TeX-Omega-mode)
             (or TeX-PDF-mode TeX-DVI-via-PDFTeX))
        "-pdf" "")))

pour TeX-expand-list et utiliser "latexmk %(-PDF) %s" afin qu'il fonctionne dans les deux pdf et le mode dvi. Personnellement, je trouve qu'il est plus facile à utiliser personnaliser en particulier lorsque vous essayez.

Autres conseils

Il est relativement facile d'obtenir AucTeX courir latexmk avec C-c C-c. Ce qui suit ajoutera un choix de Latexmk à la liste des commandes TeX:

(add-hook 'LaTeX-mode-hook (lambda ()
  (push 
    '("Latexmk" "latexmk -pdf %s" TeX-run-command nil t 
      :help "Run Latexmk on file")
    TeX-command-list)))

L'astuce devient next-error de travailler. Si vous creusez dans les sources de auctex, vous pouvez probablement trouver le regex qu'il utilise sur les tampons de sortie de TeX; il est pas automatiquement appliquée à la mémoire tampon créée par commande TeX terme. (Vous pourriez également être en mesure de convaincre le mode compile d'utiliser cette regex.)

Une autre approche consiste à redéfinir la LaTeX-command variable. Ceci est un peu incertain parce que je pense que beaucoup de fonctions auctex suppose qu'ils peuvent virer de bord des options de ligne de commande sur cette chaîne et exécuter le résultat.

Ajout% (mode) donne quelques latexmk plus d'options comme si elle noninteractive est réglée de façon à auctex.

(add-hook 'LaTeX-mode-hook (lambda ()
  (push 
    '("Latexmk" "latexmk -pdf %(mode) %s" TeX-run-TeX nil t
      :help "Run Latexmk on file")
    TeX-command-list)))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top