Pergunta

Eu gostaria de usar LATEXMK Para compilar meus documentos de látex na EMACS. Especialmente eu preciso da funcionalidade do EMACS next-error, que normalmente é chamado com CX `e salta para o próximo erro de látex no documento.

Eu gostaria de ligar latexmk usando C-x compile ou o auctex C-c C-c.

Primeiro, eu ajustei latexmk usar

$pdflatex = 'pdflatex -interaction=nonstopmode';

Opção 1: compilar CX

Eu pressiono C-x compile e tipo latexmk -pdf foo, que corre pdflatex. Mas next-error Não pulará para os erros, mesmo que o buffer * compilação * contenha erros:

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

Como posso pular automaticamente para esse erro na linha 48?

Observe que esta questão de analisar a saída do látex não tem nada a ver com latexmk diretamente. O mesmo problema ocorre quando eu apenas faço C-x compile pdflatex -interaction=nonstopmode foo.

Opção 2: Auctex

Como posso definir o Auctex para ligar latexmk -pdf ao invés de pdflatex No meu arquivo .tex? Claro que quero next-error para trabalhar aqui também.

ATUALIZAR: Eu comecei um recompensa Porque se isso funcionasse, seria uma ótima ferramenta para muitas pessoas. Considero a pergunta respondida se for dada uma solução que me permita compilar facilmente meu documento de látex usando latexmk em Emacs e pule para os erros usando next-error (Claro, os erros podem estar em incluído Os arquivos .tex, não necessariamente no arquivo mestre ou no buffer atual).

ATUALIZAR: Agradecemos a Ivan (e Chris) por fazer o Auctex+LateXMK funcionar. Enquanto isso, descobri que usando Borracha Para compilar o látex também é uma excelente opção. Ele exibirá mensagens de erro no formato usado por gcc e outros compiladores, então funciona naturalmente com o Emacs C-x compile, por exemplo C-x compile rubber --pdf foo, e as mensagens de erro são analisadas corretamente.

Foi útil?

Solução

Desculpe, não tenho a capacidade de comentar, ou apenas acrescentaria isso como um comentário. A resposta de Chris Conway funciona, exceto que deve usar TeX-run-TeX ao invés de TeX-run-command para que o Auctex saiba processar as mensagens de erro.

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

Também pode ser aconselhável adicionar algo como

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

para TeX-expand-list E use "latexmk %(-PDF) %s" para que funcione no modo PDF e DVI. Pessoalmente, acho mais fácil usar personalizar, especialmente quando você está experimentando.

Outras dicas

É relativamente fácil conseguir que o Auctex execute o LATEXMK C-c C-c. O seguinte adicionará um Latexmk Escolha para a lista de comandos 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)))

O truque está recebendo next-error trabalhar. Se você cavar as fontes do Auctex, provavelmente poderá encontrar o regex que ele usa nos buffers de saída Tex; Não é aplicado automaticamente ao buffer criado pelo Tex-Run-Command. (Você também pode ser capaz de convencer compile modo para usar este regex.)

Outra abordagem é redefinir a variável LaTeX-command. Isso é um pouco duvidoso, porque acho que muitas funções do Auctex assumem que elas podem colocar opções de linha de comando nessa string e executar o resultado.

A adição de %(modo) fornece ao LateXMK mais algumas opções, como não interativo, se estiver definido no 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)))
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top