كيفية استدعاء LATEXMK في EMACs ، والقفز إلى الخط التالي
-
25-09-2019 - |
سؤال
أود استخدام 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)))