makefile - مرجع اللثي و ماكيفيل




latex (2)

إما جعل "الافتراضي" هدفا زائفة (إضافة "الافتراضي" إلى خط بدءا من .PHONY)، أو بناء هيكل التبعية أكثر تعقيدا، الذي يعيد تلقائيا (لا يمكن أن أقول كيف نفعل ذلك، آسف).

أنا باستخدام Makefile لإنشاء بدف من ملفات .tex .

عندما تم استخدام المراجع في ملفات ليتكس. أحيانا أحصل على شيء مثل

LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right.

وأنا أعلم أن إعادة تشغيل ليتكس كومبيل الأمر يمكن إصلاح هذه المشكلة المرجعية، ولكن في بلدي Makefile ، %.pdf يعتمد فقط على %.tex ، وبالتالي مجرد تشغيل make مرة أخرى لا إصلاح المشكلة (لم يتغير شيء في ملف .tex ). أنا بحاجة إلى القيام make clean لإعادة إنشاء بدف مرة أخرى.

هنا بلدي Makefile

TEX := $(wildcard *.tex)
default: $(TEX:.tex=.pdf)
%.pdf: %.tex
    xelatex $<
.PHONY: clean
clean:
    rm -v *.aux *.toc *.log *.out

كيفية حل هذه المشكلة؟ شكرا لكم.

تحديث:

إليك بعض الفكر الذي عثرت عليه من غوغل

  1. تغيير الهدف default ليكون .PHONY . وهو ليس حلا جيدا جدا (لأن هناك حتى قد ملف اللاتكس هناك، وأنا فقط بحاجة إلى إعادة تجميع ملف واحد)
  2. تغيير %.pdf 's التبعية لتشمل %.aux . ولكن أنا لا أعرف ما إذا كان من الممكن في جنو جعل؟ (يعتمد على ملف %.aux إذا كان موجودا، وإلا تجاهل التبعية على %.aux )
  3. قم بإجراء grep إلى ملف .log وابحث عن التحذير المحدد. إذا كان موجودا، إعادة تشغيل الأمر كومبيل.

يمكنني استخدام في كل ما بلدي اللثي ماكياج قاعدة بسيطة

.DELETE_ON_ERROR:

%.pdf %.aux %.idx: %.tex
        pdflatex $<
        while grep 'Rerun to get ' $*.log ; do pdflatex $< ; done

هذا يكرر بدفلاتكس كلما كان ذلك ضروريا. لقد وجدت أن جميع رسائل اللاتكس المختلفة التي تدعو إلى إعادة تشغيل تحتوي على سلسلة مشتركة "إعادة تشغيل للحصول على" في ملف السجل، حتى تتمكن من مجرد اختبار لوجودها مع غريب في حلقة بينما.

الإعداد ".DELETE_ON_ERROR:" مهم: فهو يضمن أن يقوم تلقائيا بحذف أية ملفات غير مكتملة بدف / أوكس / إدكس غير مكتملة عندما يكسر تكس خطأ، بحيث لا يمكن الخلط بينه عند الاتصال به في المرة القادمة.

عند استخدام دفي بدلا من بدف كما تنسيق الإخراج، وأنا استخدم على قدم المساواة

%.dvi %.aux %.idx: %.tex
        latex $<
        while grep 'Rerun to get ' $*.log ; do latex $< ; done
        -killall -USR1 -r xdvi || true

السطر الأخير يسبب أي تشغيل زدي لإعادة تحميل ملف الإدخال، للفحص البصري لحظة.





latex