سؤال

أود استخدام LATEXMK لتجميع مستندات اللاتكس الخاصة بي في emacs. لا سيما أحتاج إلى وظيفة emacs next-error, ، والذي يسمى عادة مع CX `، ويقفز إلى الخطأ اللاتكس التالي في المستند.

أود الاتصال latexmk إما استخدام C-x compile أو auctex C-c C-c.

أولا ، وضعت latexmk ليستخدم

$pdflatex = 'pdflatex -interaction=nonstopmode';

الخيار 1: تجميع CX

انا اضغط C-x compile والنوع latexmk -pdf foo, ، الذي يعمل pdflatex. لكن next-error لن تقفز إلى الأخطاء ، حتى لو كان المخزن المؤقت * compilation * يحتوي على أخطاء:

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

كيف يمكنني القفز تلقائيًا إلى هذا الخطأ في السطر 48؟

لاحظ أن هذا السؤال المتمثل في تحليل إخراج اللاتكس لا علاقة له latexmk مباشرة. تحدث نفس المشكلة عندما أفعل فقط C-x compile pdflatex -interaction=nonstopmode foo.

الخيار 2: auctex

كيف يمكنني ضبط AUCTEX للاتصال latexmk -pdf بدلاً من pdflatex على ملف .tex الخاص بي؟ بالطبع انا اريد next-error للعمل هنا أيضًا.

تحديث: لقد بدأت أ مكافأة لأنه إذا نجح هذا سيكون أداة رائعة لكثير من الناس. أنا أعتبر السؤال المجب latexmk في emacs والقفز إلى الأخطاء باستخدام next-error (بالطبع ، قد تكون الأخطاء في وشملت ملفات .tex ، وليس بالضرورة في الملف الرئيسي أو المخزن المؤقت الحالي).

تحديث: بفضل إيفان (وكريس) لصنع AUCTEX+LATEXMK. في غضون ذلك ، وجدت ذلك باستخدام ممحاة لتجميع اللاتكس هو أيضا خيار ممتاز. سيعرض رسائل الخطأ بالتنسيق المستخدم بواسطة gcc ومترجمات أخرى ، لذلك يعمل بشكل طبيعي مع emacs C-x compile, ، على سبيل المثال C-x compile rubber --pdf foo, ، ويتم تحليل رسائل الخطأ بشكل صحيح.

هل كانت مفيدة؟

المحلول

آسف ، ليس لدي القدرة على التعليق ، أو أود فقط إضافة هذا كتعليق. تعمل إجابة كريس كونواي ، باستثناء أنه ينبغي استخدامها TeX-run-TeX بدلاً من TeX-run-command بحيث يعرف AUCTEX معالجة رسائل الخطأ.

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

قد يكون من الحكمة أيضًا إضافة شيء مثل

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

ل TeX-expand-list والاستخدام "latexmk %(-PDF) %s" بحيث ستعمل في كل من وضع PDF و DVI. أنا شخصياً أجد أنه من الأسهل استخدام التخصيص خاصة عندما تقوم بتجربة.

نصائح أخرى

من السهل نسبيًا الحصول على AUCTEX لتشغيل LATEXMK مع C-c C-c. سيضيف ما يلي Latexmk اختيار قائمة الأوامر 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)))

الحيلة تحصل next-error للعمل. إذا قمت بالتجول في مصادر AUCTEX ، فيمكنك على الأرجح العثور على Regex الذي يستخدمه على مخازن TEX Output ؛ لا يتم تطبيقه تلقائيًا على المخزن المؤقت الذي تم إنشاؤه بواسطة Tex-Run-Command. (قد تكون قادرًا أيضًا على إقناع compile وضع لاستخدام هذا regex.)

نهج آخر هو إعادة تعريف المتغير LaTeX-command. هذا أمر غير معني لأنني أعتقد أن الكثير من وظائف AUCTEX تفترض أنها يمكن أن تتصدى لخيارات سطر الأوامر على هذه السلسلة وتنفيذ النتيجة.

يمنح إضافة ٪ (الوضع) LatexMK بعض الخيارات الأخرى مثل غير النشاط إذا تم تعيينها في 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)))
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top