| LATEXMK(1) | General Commands Manual | LATEXMK(1) |
نام (NAME)
latexmk - تولید و کامپایل خودکار اسناد LaTeX
خلاصه دستور (SYNOPSIS)
latexmk [options] [file ...]
توضیحات (DESCRIPTION)
Latexmk فرایند کامپایل یک سند LaTeX را کاملاً خودکار میکند. در واقع، این ابزار مانند خویشاوند تخصصی ابزار عمومی make است، اما وابستگیها را به صورت خودکار تعیین میکند و ویژگیهای بسیار کاربردی دیگری نیز دارد. در حالت پایه، نام فایل منبع اصلی سند به latexmk داده میشود و این ابزار توالی مناسبی از دستورها را برای تولید نسخه .dvi، .ps، .pdf و/یا نسخه چاپی سند صادر میکند.
بهطور پیشفرض، latexmk دستورهای لازم برای تولید یک فایل .dvi را اجرا میکند؛ رفتاری که برگرفته از نسخههای اولیه، زمانی که تنها latex در دسترس بود، است.
Latexmk همچنین میتواند به گونهای تنظیم شود که همراه با یک پیشنمایشگر مناسب، بهطور مداوم اجرا شود. در این صورت، هر زمان که یکی از فایلهای منبع تغییر کند، برنامه latex (یا یکی از مشتقات آن) دوباره اجرا میشود و پیشنمایشگر نمای روی صفحه سند کامپایلشده را بهطور خودکار بهروزرسانی میکند.
Latexmk با بررسی فایل لاگ (log) مشخص میکند که فایلهای منبع کدامند. (بهطور اختیاری، فهرست فایلهای ورودی و خروجی تولیدشده توسط گزینه -recorder در نسخههای مدرن latex (و pdflatex، xelatex، lualatex) را نیز بررسی میکند. مستندات مربوط به گزینه -recorder از latexmk را در زیر ببینید.) هنگامی که latexmk اجرا میشود، ویژگیهای فایلهای منبع را بررسی کرده و در صورتی که هر یک از آنها از زمان آخرین تولید سند تغییر کرده باشند، latexmk برنامههای مختلف پردازش LaTeX را بر حسب نیاز اجرا میکند. بهویژه، اجرای latex (یا برنامه مرتبط) را به تعداد کافی تکرار میکند تا تمام ارجاعات متقابل (cross references) حل شوند؛ این امر به بستههای ماکرو استفادهشده بستگی دارد. با برخی از بستههای ماکرو و کلاسهای سند، ممکن است به چهار یا حتی تعداد دفعات بیشتری از اجرا نیاز باشد. در صورت لزوم، latexmk همچنین bibtex، biber و/یا makeindex را اجرا خواهد کرد. علاوه بر این، latexmk میتواند برای تولید سایر فایلهای ضروری نیز پیکربندی شود. به عنوان مثال، از یک فایل شکل (figure) بهروزرسانیشده، میتواند بهطور خودکار فایلی در قالب encapsulated postscript یا قالب مناسب دیگری برای خواندن توسط LaTeX تولید کند.
Latexmk دارای دو گزینه مختلف برای پیشنمایش است. با گزینه ساده -pv، پس از تولید نسخه dvi، postscript یا pdf سند، یک پیشنمایشگر dvi، postscript یا pdf بهطور خودکار اجرا میشود. نوع فایل برای مشاهده بر اساس تنظیمات پیکربندی و گزینههای خط فرمان انتخاب میشود.
گزینه دوم پیشنمایش، گزینه قدرتمند -pvc است (مخفف یادافزا: "preview continuously"). در این حالت، latexmk بهطور مداوم اجرا میشود و پیوسته تمام فایلهای منبع را زیر نظر میگیرد تا تغییرات احتمالی آنها را بررسی کند. هر بار که تغییری تشخیص داده شود، latexmk تمام برنامههای لازم برای تولید نسخه جدیدی از سند را اجرا میکند. سپس یک پیشنمایشگر خوب نمای خود را بهطور خودکار بهروزرسانی میکند. بنابراین کاربر میتواند به سادگی یک فایل را ویرایش کند و هنگامی که تغییرات روی دیسک ذخیره شدند، latexmk چرخه بهروزرسانی فایل .dvi (و/یا .ps و .pdf) و بازخوانی نمای پیشنمایشگر را کاملاً خودکار انجام میدهد. این حالت دقیقاً WYSIWYG نیست، اما به شکلی کارآمد به آن نزدیک است.
برای پیشنمایشگرهای دیگر، ممکن است کاربر مجبور باشد پیشنمایشگر را بهصورت دستی مجبور به بهروزرسانی نمای خود کند، که (برای مثال، در برخی نسخههای xdvi و gsview) میتواند به سادگیِ اجبار به بازترسیم نمایشگر آن باشد.
Latexmk این قابلیت را دارد که هنگام ایجاد فایل postscript، یک نشان/بنر خاکستری را به صورت مورب در هر صفحه چاپ کند. همچنین میتواند در صورت لزوم، یک برنامه خارجی را برای انجام پسپردازشهای دیگر بر روی فایلهای dvi و postscript تولیدشده فراخوانی کند. (گزینههای -dF و -pF و مستندات مربوط به متغیرهای پیکربندی $dvi_filter و $ps_filter را ببینید.) این قابلیتها از نسخههای قدیمیتر latexmk باقی ماندهاند، اما در حال حاضر غیرفعال هستند. در نسخههای کنونی انعطافپذیری بیشتری حاصل شده است، زیرا رشتههای دستور برای اجرای *latex اکنون میتوانند برای اجرای چندین دستور پیکربندی شوند. این امر همچنین امکان پسپردازش فایلهای تولیدشده را گسترش میدهد.
Latexmk هم از طریق خط فرمان و هم در فایلهای پیکربندی بسیار قابل تنظیم است، به طوری که میتواند طیف گستردهای از نیازهای کاربران و پیکربندیهای سیستم را برآورده سازد. مقادیر پیشفرض بر اساس سیستمعامل تعیین میشوند، بنابراین latexmk اغلب بدون پیکربندی خاصی در MS-Windows، cygwin، Linux، OS-X و سایر سیستمهای UNIX کار میکند. بخش «Configuration/Initialization (rc) Files» و سپس بخشهای بعدی شامل «How to Set Variables in Initialization Files»، «Format of Command Specifications»، «List of Configuration Variables Usable in Initialization Files»، «Custom Dependencies» و «Advanced Configuration» را ببینید.
یک پیچیدگی بسیار آزاردهنده که توسط latexmk بسیار مطمئن مدیریت میشود، این است که LaTeX سیستمی چندمرحلهای (multiple pass) است. در هر اجرا، LaTeX اطلاعات تولیدشده در اجرای قبلی را برای مواردی مانند ارجاعات متقابل و نمایهسازی بازخوانی میکند. در سادهترین حالتها، اجرای دوم LaTeX کافی است و اغلب فایل لاگ حاوی پیامی درباره نیاز به یک مرحله دیگر است. با این حال، تنوع گستردهای از بستههای ماکروی افزودنی برای LaTeX وجود دارد که رفتارهای متفاوتی دارند. نتیجه این است که تعیین سادهانگارانه تعداد دفعات اجرای لازم و اینکه چه برنامههایی باید اجرا شوند را غیرممکن میسازد. Latexmk راهحلی بسیار فراگیر و کارآمد برای این مسائل دارد. این راهحل شامل نگهداری اطلاعات فایلهای منبع در بین اجراها است، و نمود بیرونی آن تولید یک فایل اضافی (بهطور پیشفرض با پسوند .fdb_latexmk) توسط latexmk است که اطلاعات فایلهای منبع را در خود نگه میدارد.
گزینهها و آرگومانهای LATEXMK در خط فرمان (LATEXMK OPTIONS AND ARGUMENTS ON COMMAND LINE)
بهطور کلی، خط فرمان برای فراخوانی latexmk به شکل زیر است:
latexmk [options] [file]
همه گزینهها میتوانند با یک یا دو نویسه "-" مشخص شوند، مانند "latexmk -help" یا "latexmk --help".
نکته ۱: در این مستندات، '*latex' به معنای هر یک از موتورهای پشتیبانیشده است؛ یعنی در حال حاضر latex، lualatex، pdflatex و xelatex. اشاره به یکی از آنها مشخصاً به همان موتور خاص اشاره دارد. نسخههای پیشین این مستندات چندان سازگار نبودند. اینکه کدامیک از اینها برای کامپایل سند استفاده شود، به پیکربندی و آرگومانهای خط فرمان بستگی دارد.
نکته ۲: علاوه بر گزینههای موجود در فهرست زیر، latexmk تقریباً تمام گزینههایی را که توسط برنامههای *latex در پیادهسازیهای کنونی TeXLive و MiKTeX شناخته میشوند، شناسایی میکند. برخی از گزینههای این برنامهها، اقدام یا رفتار خاصی را در latexmk ایجاد میکنند که در این صورت توضیحات مشخصی در این سند دارند؛ در چنین شرایطی ممکن است آن گزینهها به *latex نیز ارسال شوند یا نشوند.
latexmk را با گزینه -showextraoptions اجرا کنید تا فهرستی از گزینههایی که latexmk میپذیرد و صرفاً به *latex ارسال میکند را دریافت نمایید. همچنین برای اطلاعات بیشتر به توضیحات گزینه -showextraoptions مراجعه کنید.
تعریف گزینهها و آرگومانها
- file
- میتوان یک
یا چند فایل
را مشخص
کرد. اگر
هیچ فایلی
مشخص نشود،
latexmk بهطور
پیشفرض بر
روی تمام
فایلهای
دارای
پسوند ".tex" در
دایرکتوری
کاری فعلی
اجرا خواهد
شد. این
رفتار قابل
تغییر است:
توضیحات
مربوط به
متغیر @default_files
در بخش "List of configuration
variables usable in initialization files" را
ببینید.
اگر فایلی بدون پسوند مشخص شود، پسوند ".tex" دقیقاً همانطور که LaTeX عمل میکند، بهطور خودکار اضافه میشود. بنابراین، اگر عبارت زیر را مشخص کنید:
latexmk foo
آنگاه latexmk روی فایل "foo.tex" عمل خواهد کرد.
محدودیتهای خاصی در مورد نویسههای مجاز در نام فایل وجود دارد؛ برخی نویسهها برای برنامههایی مانند latex ممنوع یا مشکلساز هستند. این نویسهها عبارتند از: "$"، "%"، "\"، "~"، نویسه نقلقول دوتایی (double quote)، و نویسههای کنترلی null، tab، form feed، carriage return، line feed و delete. علاوه بر این، استفاده از "&" به عنوان اولین نویسه نام فایل ممنوع است.
هنگامی که latexmk هر یک از نویسههای فوق را در نام فایل(های) TeX مشخصشده در خط فرمان شناسایی کند، یک خطای مهلک (fatal error) صادر میکند. با این حال، پیش از بررسی نویسههای غیرمجاز، latexmk جفتهای نقلقول دوتایی تطبیقیافته را از نام فایل حذف میکند. این رفتار مطابق با عملکرد latex و غیره است و مشکلاتی را که گاه به دلیل نقلقول نادرست نام فایلها در خط فرمان رخ میدهد برطرف میسازد. علاوه بر این، در Microsoft Windows نویسه ممیز وارونه "\" جداکننده دایرکتوری است، بنابراین latexmk آن را با یک ممیز رو به جلو "/" که جداکننده معتبر دایرکتوری در ویندوز است و توسط latex و برنامههای مشابه نیز پذیرفته میشود، جایگزین میکند.
- -auxdir=FOO or -aux-directory=FOO
- دایرکتوری
فایلهای
خروجی
کمکیِ *latex (.aux، .log
و غیره) را
تعیین
میکند.
اینها همه
فایلهای
تولیدشده
هستند، به
استثنای
فایلهای
خروجی
نهایی (.dvi، .ps،
.pdf، .synctex.gz، .synctex).
برای
دایرکتوریهای
فایلهای
خروجی اصلی
به گزینه
-outdir/-output-directory و
برای
فایلهای
خروجی
نهایی به
گزینه -out2dir
مراجعه
کنید.
اگر دایرکتوری مشخصشده برای گزینه -aux/-aux-directory خالی باشد، مقدار پیشفرض استفاده میشود که همان دایرکتوری خروجی است.
اگر از گزینه -cd نیز استفاده کنید و دایرکتوری خروجی کمکی مشخصشده یک مسیر نسبی باشد، این مسیر نسبت به دایرکتوری سند تفسیر میشود.
برای جزئیات بیشتر به بخش AUXILIARY AND OUTPUT DIRECTORIES مراجعه کنید.
- -bibtex
- هنگامی که
فایل منبع
برای
کتابشناسی
از
فایلهای bbl
استفاده
میکند، bibtex
یا biber را بر
حسب نیاز
برای
بازتولید
فایلهای bbl
اجرا
میکند.
این ویژگی همچنین میتواند با تنظیم متغیر $bibtex_use بر روی مقدار 2 در یک فایل پیکربندی تنظیم شود.
- -bibtex-
- هرگز bibtex یا biber
را اجرا
نمیکند.
همچنین،
همیشه با
فایلهای .bbl
به عنوان
فایلهای
ارزشمند
رفتار
میکند،
یعنی در
عملیات
پاکسازی
آنها را
حذف
نمیکند.
کاربرد رایج این گزینه زمانی است که سندی از یک منبع خارجی همراه با فایل(های) bbl کامل آن دریافت شده باشد و کاربر فایلهای bib مربوطه را در اختیار نداشته باشد. در این شرایط، استفاده از گزینه -bibtex- مانع از تلاش latexmk برای اجرای bibtex یا biber میشود که میتوانست منجر به بازنویسی و رونویسی روی فایلهای bbl گردد.
این ویژگی همچنین میتواند با تنظیم متغیر $bibtex_use بر روی مقدار 0 در یک فایل پیکربندی تنظیم شود..TP -bibtex-cond هنگامی که فایل مبدأ برای کتابشناسی از یک فایل bbl استفاده میکند و برای تولید کتابشناسی از bibtex استفاده میشود، bibtex را در صورت نیاز برای بازتولید فایلهای bbl تنها در صورتی اجرا میکند که فایل(های) bib مربوطه وجود داشته باشند. بنابراین وقتی فایل(های) bib در دسترس نباشند، bibtex اجرا نمیشود و در نتیجه از بازنویسی فایل bbl جلوگیری میشود. همچنین، همیشه فایلهای .bbl را به عنوان فایلهای ارزشمند در نظر میگیرد، یعنی در عملیات پاکسازی آنها را حذف نمیکند.
این تنظیم پیشفرض است. همچنین میتوان با تنظیم متغیر $bibtex_use روی 1 در یک فایل پیکربندی آن را فعال کرد.
دلیل استفاده از این تنظیم، در وهله اول امکان جابهجایی خودکار بین استفاده و عدم استفاده از bibtex بسته به وجود یا عدم وجود فایل bib است. علاوهبر این، هنگام ارسال مقالات به مجلات علمی، معمول است که تنها فایلهای .tex و .bbl (به همراه فایلهای گرافیکی) ارسال شوند، و نه فایل .bib. از این رو اغلب مفید است که با فایلهای .bbl مانند فایلهای مبدأ واقعی رفتار شود، به گونهای که در عملیات پاکسازی حفظ شوند.
این ویژگی را میتوان با تنظیم متغیر $bibtex_use روی 1 در فایل پیکربندی نیز تعیین کرد.
توجه داشته باشید که هنگام استفاده از biber، اگر فایل bib وجود نداشته باشد، این گزینه مانع اجرای biber نمیشود و ممکن است فایل bbl نادرست باشد. برای جزئیات بیشتر به مستندات $bibtex_use مراجعه کنید. با این حال، فایل bbl در عملیات پاکسازی به عنوان فایلی ارزشمند تلقی شده و حذف نمیشود.
- -bibtex-cond1
- مشابه با
-bibtex-cond است، با
این تفاوت
که
فایلهای .bbl
تنها در
صورتی
ارزشمند
تلقی
میشوند که
یک یا چند
فایل bib وجود
نداشته
باشد.
بنابراین اگر تمام فایلهای bib وجود داشته باشند، bibtex در صورت نیاز برای تولید فایلهای .bbl اجرا میشود، و در این حالت حذف فایلهای bbl در عملیات پاکسازی بلامانع است زیرا میتوان آنها را مجدداً بازتولید کرد.
این ویژگی را میتوان با تنظیم متغیر $bibtex_use روی 1.5 در یک فایل پیکربندی تنظیم کرد.
توجه داشته باشید که هنگام استفاده از biber، اگر فایل bib وجود نداشته باشد، این گزینه مانع اجرای biber نمیشود و ممکن است فایل bbl نادرست باشد. برای جزئیات بیشتر به مستندات $bibtex_use مراجعه کنید. با این حال، فایل bbl در عملیات پاکسازی ارزشمند تلقی میشود.
- -bibtexfudge یا -bibfudge
- فعال کردن ترفند تغییر دایرکتوری (change-directory fudge) برای bibtex. برای جزئیات به مستندات $bibtex_fudge مراجعه کنید.
- -bibtexfudge- یا -bibfudge-
- غیرفعال کردن ترفند تغییر دایرکتوری برای bibtex. برای جزئیات به مستندات $bibtex_fudge مراجعه کنید.
- -bm <message>
- یک پیام بنر
(واترمارک)
برای چاپ به
صورت مورب
در سراسر هر
صفحه هنگام
تبدیل فایل
dvi به postscript. این
پیام باید
یک آرگومان
منفرد در خط
فرمان
باشد،
بنابراین
در استفاده
از
نقلقولها
برای
فاصلهها و
موارد
مشابه دقت
کنید.
توجه داشته باشید که با مشخص کردن گزینهٔ -bm، گزینهٔ -ps به صورت خودکار اعمال میشود.
- -bi <intensity>
- میزان تیرگی چاپ پیام بنر. یک عدد اعشاری بین 0 و 1. 0 به معنی سیاه و 1 به معنی سفید است. مقدار پیشفرض 0.95 است، که مناسب است مگر اینکه کارتریج تونر شما رو به اتمام باشد.
- -bs <scale>
- یک عدد اعشاری که بزرگی اندازهٔ چاپ پیام بنر را تعیین میکند. برای بهدست آوردن مقیاس مناسب برای پیامتان انجام آزمون و خطا لازم است؛ به عنوان یک قاعدهٔ تجربی، این مقیاس باید تقریباً برابر با 1100 تقسیم بر تعداد نویسههای پیام باشد. مقدار پیشفرض 220.0 است که برای پیامهای 5 نویسهای کاملاً مناسب است.
- -commands
- نمایش فهرستی از دستورهای مورد استفاده توسط latexmk برای پردازش فایلها و سپس خروج.
- -c
- پاکسازی
(حذف) تمامی
فایلهای
قابل
بازتولید
که توسط latex و
bibtex یا biber
تولید
شدهاند،
به جز dvi، postscript و pdf.
این
فایلها
ترکیبی از
فایلهای
log،
فایلهای
aux، فایل
پایگاه
دادهٔ latexmk از
اطلاعات
فایل مبدأ،
و
فایلهایی
با
پسوندهای
مشخصشده
در متغیر
پیکربندی
@generated_exts هستند.
علاوهبر
این،
فایلهای
مشخصشده
توسط
متغیرهای
پیکربندی
$clean_ext و @generated_exts نیز
حذف
میشوند.
این پاکسازی به جای یک فرآیند ساخت (make) معمولی انجام میشود. اگر میخواهید پاکسازی و سپس ساخت انجام شود، گزینهٔ -gg را ببینید.
نحوه برخورد با فایلهای .bbl: اگر $bibtex_use روی 0 یا 1 تنظیم شده باشد، فایلهای bbl همواره به عنوان غیرقابل بازتولید در نظر گرفته میشوند. اگر $bibtex_use روی 1.5 تنظیم شده باشد، فایلهای bbl به صورت مشروط به عنوان غیرقابل بازتولید به حساب میآیند: اگر فایل bib وجود داشته باشد، فایلهای bbl قابل بازتولید هستند و در پاکسازی حذف میشوند. اما اگر $bibtex_use برابر 1.5 باشد و فایل bib وجود نداشته باشد، با فایلهای bbl مانند فایلهای غیرقابل بازتولید رفتار میشود و بنابراین حذف نمیشوند.
در مقابل، اگر $bibtex_use روی 2 تنظیم شده باشد، با فایلهای bbl همیشه به عنوان فایلهای قابل بازتولید رفتار شده و در پاکسازی حذف میشوند.
نحوه برخورد با فایلهای تولیدشده توسط وابستگیهای سفارشی: اگر $cleanup_includes_cusdep_generated غیرصفر باشد، فایلهای قابل بازتولید شامل مواردی که توسط وابستگیهای سفارشی تولید شدهاند نیز خواهد بود و آنها نیز حذف میشوند. در غیر این صورت این فایلها حذف نمیشوند.
- -C
- پاکسازی
(حذف) تمامی
فایلهای
قابل
بازتولید
تولیدشده
توسط latex و bibtex
یا biber. این
گزینه
مشابه
گزینهٔ -c
است، با این
تفاوت که
فایلهای
dvi، postscript و pdf و
فایلهای
مشخصشده
در متغیر
پیکربندی
$clean_full_ext را نیز
در بر
میگیرد.
این پاکسازی به جای یک ساخت معمولی انجام میشود. اگر میخواهید پس از پاکسازی عملیات ساخت انجام شود، گزینهٔ -gg را ببینید.
برای تعیین اینکه آیا فایلهای .bbl به عنوان فایلهای غیرقابل بازتولید یا قابل بازتولید در نظر گرفته میشوند یا خیر، گزینهٔ -c را ببینید.
اگر $cleanup_includes_cusdep_generated غیرصفر باشد، فایلهای قابل بازتولید شامل موارد تولیدشده توسط وابستگیهای سفارشی نیز در نظر گرفته شده و آنها نیز حذف میشوند. در غیر این صورت این فایلها حذف نخواهند شد.
- -CA
- (منسوخشده). اکنون معادل گزینهٔ -C است. برای جزئیات بیشتر به آن گزینه مراجعه کنید.
- -cd
- تغییر
دایرکتوری
به
دایرکتوری
حاوی فایل
مبدأ اصلی
پیش از
پردازش آن.
در این صورت
تمامی
فایلهای
تولیدشده
(.aux، .log، .dvi، .pdf و
غیره) به
صورت نسبی
با فایل
مبدأ قرار
خواهند
گرفت.
این گزینه به ویژه زمانی مفید است که latexmk از یک واسط گرافیکی کاربر (GUI) فراخوانی شود که برای اجرای latexmk با مسیر کامل فایل مبدأ پیکربندی شده است.
این گزینه با تنظیم متغیر پیکربندی $do_cd روی یک (1) کار میکند؛ اگر میخواهید latexmk را به گونهای پیکربندی کنید که بدون مشخص کردن این گزینه در خط فرمان اثر گزینهٔ -cd را داشته باشد، میتوانید آن متغیر را تنظیم کنید. مستندات مربوط به آن متغیر را ببینید.
- -cd-
- قبل از
پردازش
فایل مبدأ
اصلی، به
دایرکتوری
حاوی آن
وارد
نشوید. در
این صورت
تمامی
فایلهای
تولیدشده
(.aux، .log، .dvi، .pdf و
غیره) به
جای فایل
مبدأ، نسبت
به
دایرکتوری
جاری
خواهند بود.
این رفتار پیشفرض است و با رفتار برنامههای *latex مطابقت دارد. با این حال، زمانی که latexmk توسط یک GUI پیکربندیشده برای فراخوانی latexmk با مسیر کامل فایل مبدأ اجرا میشود، این رفتار مطلوب نیست. گزینهٔ -cd را ببینید.
این گزینه با تنظیم متغیر پیکربندی $do_cd روی صفر کار میکند. برای اطلاعات بیشتر، مستندات آن متغیر را ببینید.
- -CF
- حذف فایل حاوی پایگاه دادهٔ اطلاعات فایل مبدأ، پیش از انجام سایر اقدامات درخواستی.
- -d
- تنظیم حالت
پیشنویس (draft).
این گزینه
هنگام
تبدیل فایل
dvi به postscript، پیام
بنر «DRAFT» را
در سراسر
صفحه چاپ
میکند.
اندازه و
تیرگی را
میتوان با
گزینههای
-bs و -bi تغییر
داد. گزینهٔ
-bm این
گزینه را
بازنویسی
خواهد کرد،
زیرا این
گزینه در
واقع تنها
راهی کوتاه
برای مشخص
کردن دستور
زیر است:
latexmk -bm DRAFT
توجه داشته باشید که با مشخص شدن گزینهٔ -d، گزینهٔ -ps به صورت خودکار اعمال میشود.
- -deps
- نمایش
فهرستی از
فایلهای
وابسته پس
از پردازش.
این خروجی
به شکل یک
فهرست
وابستگی از
همان نوعی
است که توسط
برنامهٔ make
استفاده
میشود، و
بنابراین
برای
استفاده در
یک Makefile مناسب
است. این
گزینه یک
دید کلی از
فایلها،
تا جایی که
latexmk قادر به
تشخیص
آنها
باشد، بدون
فهرست کردن
فایلهای
واسط ارائه
میدهد.
به طور پیشفرض، فهرست فایلهای وابسته به خروجی استاندارد (stdout) فرستاده میشود (یعنی معمولاً به صفحه نمایش، مگر اینکه خروجی latexmk را تغییر مسیر داده باشید). اما میتوانید با استفاده از گزینهٔ -deps-out= نام فایلی را که فهرست به آن ارسال میشود تعیین کنید.
برای مثالی از نحوهٔ استفاده از یک فهرست وابستگی با make، بخش «USING latexmk WITH make» را ببینید.
کاربران آشنا با GNU automake و gcc درخواهند یافت که گزینهٔ -deps از نظر هدف و نتایج بسیار شبیه به گزینهٔ -M در gcc است. (در واقع، latexmk دارای گزینههای -M، -MF و -MP نیز هست که رفتاری مشابه گزینههای متناظر در gcc دارند.).TP -dependents معادل -deps است.
- -deps-
- عدم نمایش فهرست فایلهای وابسته پس از پردازش. (این مقدار پیشفرض است.)
- -dependents-
- معادل -deps- است.
- -deps-escape=<string>
- تعیین نوع گریزدهی (escaping) مورد استفاده برای فاصلهها در فهرست وابستگی. مقادیر ممکن عبارتند از "none" ،"unix" و "nmake" که بهترتیب با عدم گریزدهی، گریزدهی با "\" مناسب برای make استاندارد Unix، و گریزدهی با "^" مناسب برای nmake مایکروسافت مطابقت دارند.
- -deps-out=FILENAME
- تعیین نام
فایلی که
فهرست
فایلهای
وابسته در
آن نوشته
میشود. اگر
آرگومان FILENAME
حذف شود یا
روی "-"
تنظیم
گردد،
خروجی به stdout
ارسال
میشود.
استفاده از این گزینه همچنین خروجی فهرست فایلهای وابسته را پس از پردازش فعال میکند.
- -dF
- فیلتر کردن
فایل dvi.
آرگومان
این گزینه
فیلتری است
که یک فایل dvi
فیلترشده
با پسوند
".dviF" تولید
خواهد کرد.
سپس تمام
پردازشهای
اضافی
(مانند
تبدیل به
postscript،
پیشنمایش،
چاپ) بر روی
این فایل dvi
فیلترشده
انجام
خواهد شد.
مثال استفاده: برای استفاده از dviselect جهت انتخاب تنها صفحات زوج فایل dvi:
latexmk -dF "dviselect even" foo.tex
- -diagnostics
- چاپ اطلاعات عیبیابی دقیق در حین اجرا. این ممکن است برای اشکالزدایی مشکلات یا درک رفتار latexmk در شرایط دشوار مفید باشد.
- -dir-report
- به ازای هر فایل tex. پردازششده، تنظیمات دایرکتوریهای aux و out را پس از عادیسازی بر اساس مقادیر مشخصشده در زمان مقداردهی اولیه، فهرست میکند. برای جزئیات بیشتر به توضیحات متغیر $aux_out_dir_report مراجعه کنید.
- -dir-report-
- عدم گزارش تنظیمات دایرکتوریهای aux و out. (پیشفرض)
- -dir-report-only
- پس از تکمیل تمام مراحل مقداردهی اولیه، تنظیمات دایرکتوریهای aux و out را گزارش داده و سپس متوقف میشود. این گزینه اساساً برای اشکالزدایی مسائل پیکربندی استفاده میشود.
- -dvi
- تولید نسخه dvi سند با استفاده از latex. (و لغو هرگونه درخواست ناسازگار.)
- -dvilua
- تولید نسخه dvi سند با استفاده از lualatex بهجای latex. (و لغو هرگونه درخواست ناسازگار.)
- -dvi-
- غیرفعال کردن تولید نسخه dvi سند. (اگر فایل دیگری ایجاد شود که از فایل dvi تولید میگردد [مانند یک فایل ps.]، یا اگر درخواستی برای تولید هیچ فایلی نشده باشد، ممکن است این گزینه نادیده گرفته شود.)
- -dvilualatex="COMMAND"
- رشته
مشخصکننده
دستور
اجرای dvi lualatex
را تعیین
میکند.
رفتاری
مشابه با
گزینه -pdflatex
دارد، اما
متغیر $dvilualatex
را تنظیم
میکند.
نکته: این گزینه هنگامی که به همراه آرگومان COMMAND ارائه شود، تنها دستور فراخوانی dvilualatex را تنظیم میکند؛ اما استفاده از dvilualatex را فعال نمیسازد. این کار توسط گزینههای دیگر یا در یک فایل مقداردهی اولیه انجام میشود.
- -e <code>
- اجرای کد
مقداردهی
اولیه
مشخصشده
قبل از
پردازش. این
کد، یک کد Perl
با همان
ساختاری
است که در
فایلهای
مقداردهی
اولیه latexmk
استفاده
میشود.
برای
جزئیات
بیشتر،
اطلاعات
مربوط به
گزینه -r و
بخش «Configuration/initialization (RC)
files» را
ببینید. این
کد معمولاً
دنبالهای
از
عبارتهای
انتساب است
که با
نقطهویرگول
(semicolon) از هم جدا
شدهاند.
این کد زمانی اجرا میشود که در حین پردازش خط فرمان توسط latexmk به گزینه -e برخورد شود. برای روش اجرای کد مقداردهی اولیه از یک فایل، گزینه -r را ببینید. بروز خطا باعث توقف latexmk میشود. میتوان از چندین نمونه از گزینههای -r و -e استفاده کرد و آنها به ترتیبی که در خط فرمان ظاهر میشوند اجرا میگردند.
برای نقلقول (quoting) صحیح نویسههای خاص در کد در خط فرمان، دقت لازم است. برای مثال، فرض کنید میخواهید دستور latex را طوری تنظیم کنید که از گزینه -shell-escape خود استفاده کند؛ در این صورت تحت UNIX/Linux میتوانید از این خط استفاده کنید:
latexmk -e '$latex=q/latex %O -shell-escape %S/' file.tex
توجه داشته باشید که نقلقولهای تکی (single quotes) مانع از آن میشوند که پوستههای دستوری عادی UNIX/Linux نویسههای درون نقلقول را ویژه تلقی کنند. (در این مثال، ساختار q/.../ یک اصطلاح Perl و معادل استفاده از نقلقول تکی است. این روش به شیوهای مستقل از پوسته و سیستمعامل، از پیچیدگیهای قرار دادن نویسه نقلقول در داخل یک رشته نقلقولشده جلوگیری میکند.)
خط فرمان فوق در MS-Windows با cmd.exe یا command.com یا 4nt.exe کار نخواهد کرد. برای MS-Windows با این پوستههای دستوری میتوانید از موارد زیر استفاده کنید:
latexmk -e "$latex=q/latex %O -shell-escape %S/" file.tex
یا
latexmk -e "$latex='latex %O -shell-escape %S'" file.tex
دو مثال آخر با پوستههای دستوری UNIX/Linux کار نخواهند کرد.
(نکته: مثالهای بالا برای نشان دادن چگونگی استفاده از -e جهت مشخص کردن کد مقداردهی اولیه برای اجرا هستند. اما اثر مورد نظر را میتوان با استفاده از گزینه -latex با مشکلات کمتری در خصوص نقلقول نیز بهدست آورد.)
- -emulate-aux-dir
- شبیهسازی
استفاده از
یک
دایرکتوری
aux بهجای
واگذاری آن
به
برنامههای
*latex. (برنامه MiKTeX
از -aux-directory
پشتیبانی
میکند،
اما TeXLive
پشتیبانی
نمیکند.)
برای جزئیات بیشتر به بخش AUXILIARY AND OUTPUT DIRECTORIES مراجعه کنید.
- -emulate-aux-dir-
- غیرفعال کردن شبیهسازی برای پیادهسازی یک دایرکتوری aux و واگذاری رسیدگی به حالتی که دایرکتوری aux با دایرکتوری خروجی متفاوت است به برنامه *latex. توجه داشته باشید که اگر از TeXLive استفاده میکنید که از -aux-directory پشتیبانی نمیکند، latexmk پس از اولین اجرای *latex شبیهسازی aux_dir را بهطور خودکار فعال میکند، زیرا فایل log. را در مکان نادرستی پیدا خواهد کرد.
- -f
- اجبار latexmk به
ادامه
پردازش سند
علیرغم
خطاها.
بهطور
معمول،
هنگامی که
latexmk تشخیص
میدهد LaTeX یا
برنامه
دیگری
خطایی
یافته است
که با
پردازش
بیشتر
برطرف
نمیشود،
هیچ پردازش
بیشتری
انجام
نمیشود.
نکته: منظور از «پردازش بیشتر»، اجرای برنامههای دیگر یا اجرای مجدد latex (و غیره) است که در صورت عدم وقوع خطا انجام میشد. اگر در عوض، یا علاوه بر این، میخواهید برنامه latex (و غیره) پس از بروز خطا برای ورودی کاربر مکث نکند، باید این کار را با گزینهای که به برنامه ارسال میشود ترتیب دهید، برای مثال از طریق گزینه -interaction=nonstopmode در latexmk (که latexmk آن را به *latex ارسال میکند).
- -f-
- غیرفعال کردن پردازش اجباری پس از خطاها که توسط گزینه -f تنظیم میشود. این گزینه میتواند برای نادیده گرفتن تنظیمی در یک فایل پیکربندی استفاده شود.
- -g
- حالت
پیشروی (Go mode):
اجبار latexmk به
اجرای هر
قاعده
حداقل یک
بار، حتی در
شرایطی که
latexmk معمولاً
تشخیص
میدهد از
زمان اجرای
قبلی هیچ
تغییری در
فایلهای
منبع رخ
نداده است.
این گزینه
برای مثال
زمانی مفید
است که
پیکربندی
را تغییر
دهید و مایل
باشید تمام
فایلها
دوباره
پردازش
شوند.
بهطور معادل: همه قواعد در ابتدا باید منسوخشده (out of date) در نظر گرفته شوند. این گزینه این عیب را دارد که برای مثال، اگر وابستگیهای سفارشی بسیار زیادی برای ایجاد فایلهای گرافیکی وجود داشته باشد، همه آنها اجرا خواهند شد که میتواند بسیار زمانبر باشد. همچنین گزینه -gt را ببینید که فقط اجرای مجدد *latex را اجباری میکند.
- -g-
- غیرفعال کردن -g.
- -gg
- «حالت پیشروی فوقالعاده» یا «ساخت پاکیزه»: پاکسازی فایلهای تولیدشده همانند زمانی که گزینه -C داده شده باشد، و سپس انجام یک ساخت (make) معمولی.
- -gt
- الزام به
حداقل یک
بار اجرای *latex.
بدین معنا
که پردازش
بهطور
عادی انجام
میشود، به
جز اینکه
حداقل یک
بار اجرای
قاعده *latex
باید انجام
گیرد، حتی
زمانی که
روشهای
معمول latexmk به
این نتیجه
برسند که
اجرای *latex
لازم نیست.
بهطور معادل، قاعده *latex در ابتدا منسوخشده در نظر گرفته میشود. توجه داشته باشید که latexmk ممکن است بهطور جداگانه با روشهای معمول خود منسوخ بودن سایر قواعد را تشخیص دهد. اگر این قواعد معمولاً قبل از *latex اجرا میشوند، همچنان انجام خواهند شد.
این گزینه بهویژه زمانی مفید است که تغییراتی در پیکربندی ایجاد شده باشد یا تحت شرایط خطای خاصی که در آن latexmk نیاز به اجرای *latex را بهدرستی تشخیص نمیدهد، اما این اجرا ضروری است..TP -h یا -help چاپ اطلاعات راهنما.
- -hnt
- تولید نسخه hnt (HINT) از سند با استفاده از hilatex. (و غیرفعال کردن هرگونه درخواست ناسازگار.)
- -jobname=STRING
- تنظیم نام
پایه (basename)
فایل(های)
خروجی روی
STRING، بهجای
مقدار
پیشفرض که
نام پایه
فایل TeX
مشخصشده
است. (در حال
حاضر، STRING
نباید شامل
فاصله
باشد.)
این مانند همان گزینه در پیادهسازیهای فعلی *latex است، و ارسال این گزینه به این برنامهها بخشی از پیادهسازی -jobname در latexmk است.
یک بهبود وجود دارد: STRING میتواند حاوی جانگهدار '%A' باشد. این مقدار با نام پایه فایل TeX جایگزین خواهد شد. هدف اصلی زمانی است که چندین فایل در خط فرمان به latexmk داده میشود و میخواهید برای هر فایل از یک jobname با مقدار وابسته به فایل متفاوتی استفاده کنید. برای نمونه، فرض کنید فایلهای .tex با نامهای test1.tex و test2.tex دارید و میخواهید نتایج کامپایل توسط *latex را با نتایج xelatex مقایسه کنید. در این صورت در یک سیستمعامل شبهیونیکس میتوانید از خط فرمان زیر استفاده کنید:
latexmk -pdf -jobname=%A-pdflatex *.tex
latexmk -pdfxe -jobname=%A-xelatex *.texسپس فایلهای .aux، .log و .pdf حاصل از بهکارگیری pdflatex دارای نامهای پایه test1-pdflatex و test2-pdflatex خواهند بود، در حالی که از xelatex، نامهای پایه test1-xelatex و test2-xelatex خواهند بود.
در MS-Windows با cmd.exe، باید علامت درصد را دو برابر کنید تا نویسه درصد به latexmk ارسال شود، نه اینکه برای جایگزینی یک متغیر محیطی استفاده شود:
latexmk -pdf -jobname=%%A-pdflatex *.tex
latexmk -pdfxe -jobname=%%A-xelatex *.tex - -l
- اجرا در حالت افقی (landscape)، با استفاده از حالت افقی برای پیشنمایشگرها و تبدیلکنندههای dvi به postscript. این گزینه امروزه معمولاً مورد نیاز نیست، زیرا پیشنمایشگرهای امروزی معمولاً این اطلاعات را بهطور خودکار تشخیص میدهند.
- -l-
- غیرفعال کردن -l.
- -latex
- تولید
فایلهای dvi
توسط latex را
فعال کرده،
و تولید
فایلهای pdf
و ps را
غیرفعال
میکند.
نکته: برای تنظیم دستور مورد استفاده هنگام مشخص شدن latex، گزینه -latex="COMMAND" را ببینید.
- -latex="COMMAND"
- رشته
تعیینکننده
دستور برای
اجرای latex را
تنظیم
میکند و
معمولاً
برای
افزودن
گزینههای
دلخواه به
کار میرود.
از آنجا که
این رشته
معمولاً
شامل فاصله
است، باید
درون علامت
نقلقول
قرار گیرد،
مانند:
latexmk -latex="latex --shell-escape %O %S" foo.texمشخصات محتویات این رشته مشابه متغیر پیکربندی $latex است. بسته به سیستمعامل شما و پوسته خط فرمانی که استفاده میکنید، ممکن است نیاز باشد نقلقول تکی را به نقلقول دوگانه (یا چیز دیگری) تغییر دهید.
نکته: این گزینه هنگامی که با آرگومان COMMAND ارائه میشود، صرفاً دستور فراخوانی latex را تنظیم میکند؛ و استفاده از latex را فعال نمیسازد. این کار توسط گزینههای دیگر یا در یک فایل مقداردهی اولیه انجام میشود.
برای تنظیم دستور اجرای pdflatex (بهجای دستور برای latex) گزینه -pdflatex را ببینید.
- -logfilewarninglist
- -logfilewarnings پس از یک
بار اجرای
*latex، فهرستی
از
هشدارهای
مربوط به
ارجاعات و
مراجع
تعریفنشده
ارائه
میدهد (مگر
اینکه حالت
بیصدا
فعال باشد).
همچنین متغیر پیکربندی $silence_logfile_warnings را ببینید.
- -logfilewarninglist-
- -logfilewarnings- پس از
یک بار
اجرای *latex،
فهرستی از
هشدارهای
مربوط به
ارجاعات و
مراجع
تعریفنشده
ارائه
نمیدهد.
(پیشفرض)
همچنین متغیر پیکربندی $silence_logfile_warnings را ببینید.
- -lualatex
- استفاده از
lualatex. بدین
معنا که از
lualatex برای
پردازش
فایل(های)
مبدأ به pdf
استفاده
میکند.
تولید
فایلهای
dvi، hnt، postscript و xdv
غیرفعال
میشود.
این گزینه معادل استفاده از مجموعه گزینههای زیر است:
-pdflua -dvi- -ps-(نکته: توجه داشته باشید که روش پیادهسازی این گزینه، اما نه اثر مورد نظر آن، با برخی از نسخههای قبلی latexmk تفاوت دارد.)
- -lualatex="COMMAND"
- رشته
تعیینکننده
دستور برای
اجرای lualatex را
تنظیم
میکند.
رفتاری
شبیه به
گزینه -pdflatex
دارد، اما
متغیر $lualatex را
تنظیم
میکند.
نکته: این گزینه هنگامی که با آرگومان COMMAND ارائه میشود، صرفاً دستور فراخوانی lualatex را تنظیم میکند؛ و استفاده از lualatex را فعال نمیسازد. این کار توسط گزینههای دیگر یا در یک فایل مقداردهی اولیه انجام میشود.
- -M
- نمایش فهرست فایلهای وابسته پس از پردازش. این معادل گزینه -deps است.
- -MF file
- اگر فهرستی از وابستگیها تهیه شود، -MF فایلی را که فهرست در آن نوشته شود مشخص میکند.
- -MP
- اگر فهرستی از وابستگیها تهیه شود، یک هدف ساختگی (phony target) برای هر فایل مبدأ لحاظ میکند. اگر از فهرست وابستگیها در یک Makefile استفاده کنید، این قواعد ساختگی خطاهایی را که برنامه make در صورت حذف فایلهای سرآیند بدون بهروزرسانی متناظر Makefile میدهد، دور میزنند.
- -makeindexfudge
- فعال کردن ترفند تغییر دایرکتوری (change-directory fudge) برای makeindex. برای جزئیات به مستندات $makeindex_fudge مراجعه کنید.
- -makeindexfudge-
- غیرفعال کردن ترفند تغییر دایرکتوری برای makeindex. برای جزئیات به مستندات $makeindex_fudge مراجعه کنید.
- $min_sleep_time [0.01]
- حداقل مقدار غیرصفر مجاز برای $sleep_time است.
- -MSWinBackSlash
- این گزینه
تنها زمانی
اثر دارد که
latexmk در MS-Windows
اجرا شود.
بدین صورت
که وقتی latexmk
دستوری را
در MS-Windows اجرا
میکند،
جداکننده
استاندارد
دایرکتوری
در ویندوز
یعنی "\"
برای جدا
کردن اجزای
دایرکتوری
در نام فایل
استفاده
میشود. در
درون
برنامه، latexmk
از "/" برای
نویسه
جداکننده
دایرکتوری
استفاده
میکند که
همان نویسه
مورد
استفاده در
سیستمهای
شبهیونیکس
است.
این رفتار پیشفرض است. با این حال ممکن است مقدار پیشفرض توسط یک فایل پیکربندی (فایل latexmkrc) که $MSWin_back_slash=0 را تنظیم کرده است بازنویسی شده باشد.
- -MSWinBackSlash-
- این گزینه
تنها زمانی
اثر دارد که
latexmk در MS-Windows
اجرا شود.
بدین صورت
که وقتی latexmk
دستوری را
در MS-Windows اجرا
میکند،
جایگزینی
"\" به عنوان
نویسه
جداکننده
بین اجزای
دایرکتوری
در نام فایل
انجام
نمیشود.
در عوض از
اسلش رو به
جلو "/"
استفاده
میشود،
همانند
سیستمهای
شبهیونیکس.
این در
بیشتر
شرایط در MS-Windows
قابل قبول
است، به
شرطی که نام
فایلها به
درستی درون
نقلقول
قرار
گیرند،
همانطور
که latexmk
بهطور
پیشفرض
این کار را
انجام
میدهد.
برای جزئیات بیشتر به مستندات متغیر پیکربندی $MSWin_back_slash مراجعه کنید.
- -new-viewer
- در حالت پیشنمایش مداوم، همیشه یک نمایشدهنده جدید برای مشاهده فایل تولیدشده باز میکند. بهطور پیشفرض، latexmk در حالت پیشنمایش مداوم، وجود یک پیشنمایشگر قبلی در حال اجرا را برای همان فایل بررسی میکند و در صورت اجرای پیشنمایشگر قبلی، مورد جدیدی را باز نمیکند. با این حال، این بررسی گاهی اوقات با شکست مواجه میشود (بهویژه اگر یک پیشنمایشگر از قبل در حال اجرا باشد که فایلی با همان نام فایل فعلی، اما در دایرکتوری متفاوتی را مشاهده میکند). این گزینه رفتار پیشفرض را غیرفعال میکند.
- -new-viewer-
- معکوس گزینه -new-viewer. این گزینه latexmk را به رفتار عادی خود بازمیگرداند که در حالت پیشنمایش مداوم وجود یک پیشنمایشگر در حال اجرا را بررسی میکند.
- -nobibtex
- هرگز bibtex یا biber را اجرا نمیکند. معادل گزینه -bibtex- است..TP -nobibtexfudge یا -nobibfudge ترفند تغییر دایرکتوری را برای bibtex غیرفعال میکند. برای جزئیات به مستندات $bibtex_fudge مراجعه کنید.
- -noemulate-aux-dir
- شبیهسازی aux_dir را غیرفعال میکند. مشابه -emulate-aux-dir-.
- -nomakeindexfudge
- ترفند تغییر دایرکتوری را برای makeindex غیرفعال میکند. برای جزئیات به مستندات $makeindex_fudge مراجعه کنید.
- -norc
- خواندن
خودکار
فایلهای
مقداردهی
اولیه (rc) را
غیرفعال
میکند.
نکته: در حالت عادی، فایلهای مقداردهی اولیه خوانده شده و اجرا میشوند، و سپس گزینههای خط فرمان به ترتیبی که در خط فرمان قرار گرفتهاند اعمال میگردند. اما -norc از این قاعده مستثنی است: بدون توجه به اینکه در کجای خط فرمان قرار دارد، ابتدا پردازش و اعمال میشود.
- -outdir=FOO یا -output-directory=FOO
-
دایرکتوری فایلهای خروجی *latex را تعیین میکند.
اگر دایرکتوری aux تعیین نشده باشد یا با دایرکتوری خروجی یکسان باشد، تمام فایلهای خروجی *latex به دایرکتوری خروجی ارسال میشوند.
اگر دایرکتوری aux تنظیم شده باشد (مثلاً توسط گزینه -auxdir) و با دایرکتوری خروجی برابر نباشد، تنها فایلهای خروجی اصلی (.dvi، .ps، .pdf، .synctex، .synctex.gz) به دایرکتوری خروجی فرستاده میشوند. سایر فایلهای تولیدشده به دایرکتوری aux منتقل میشوند.
برای جزئیات بیشتر به بخش AUXILIARY AND OUTPUT DIRECTORIES مراجعه کنید.
- -out2dir=FOO
-
(قابلیت جدید و آزمایشی.)
دایرکتوری فایلهای خروجی نهایی حاصل از یک دور کامل کامپایل را تعیین میکند.
استفاده از این دایرکتوری از جمله این مشکل را حل میکند که هنگام نیاز به اجرای چندباره *latex و برنامههای دیگر، فایلهایی مانند فایل اصلی pdf تولیدشده توسط pdflatex و غیره چندین بار تغییر مییابند. برنامههای نمایشگری مانند SumatraPDF که فایل را با تشخیص هرگونه تغییر مجدداً بارگذاری میکنند، توالی آزاردهندهای از وضعیتهای میانی فایل pdf را نمایش میدهند، نه فقط نسخه نهایی را پس از پایان کامل تمام اجراهای مکرر *latex. در عوض، هنگامی که یک دایرکتوری خروجی نهایی مجزا توسط گزینه -out2dir یا متغیر معادل $out2_dir تنظیم شود، نمایشگر فایل pdf (وغیره) را تنها پس از پایان توالی کامل اجراهای مکرر *latex مشاهده خواهد کرد.
بهطور پیشفرض، دایرکتوری خروجی نهایی همان دایرکتوری خروجی است (همانگونه که توسط گزینه -outdir یا متغیر پیکربندی $out_dir مشخص شده است).
- -output-format=FORMAT
- این گزینه
یکی از
مواردی است
که برای latex،
lualatex و pdflatex مجاز
است. اما به
این
برنامهها
فرستاده
نمیشود. در
عوض، latexmk آن
را به
شیوهای
متناسب با
زمینه و
جریانهای
کاری latexmk
شبیهسازی
میکند.
اگر FORMAT برابر dvi باشد، خروجی dvi فعال شده و خروجیهای postscript، pdf و xdv غیرفعال میشوند. این معادل استفاده از گزینههای -dvi -ps- -pdf- -xdv- است.
اگر FORMAT برابر pdf باشد، خروجی pdf فعال شده و خروجیهای dvi، postscript و xdv غیرفعال میشوند. این معادل استفاده از گزینههای -pdf -ps- -dvi- -xdv- است.
اگر FORMAT هر چیز دیگری باشد، latexmk خطا میدهد.
- -p
- چاپ سند.
بهطور
پیشفرض
فایلی که
چاپ میشود
اولین فایل
موجود در
لیست postscript، pdf و dvi
است که در
حال ساخته
شدن است.
اما
میتوانید
از گزینه
-print=... برای
تغییر نوع
فایل چاپی
استفاده
کنید، و
میتوانید
این مورد را
در یک فایل
راهانداز
(با تنظیم
متغیر $print_type)
پیکربندی
کنید.
با این حال، چاپ بهطور پیشفرض تنها در سیستمهای UNIX/Linux فعال است، جایی که پیشفرض استفاده از دستور lpr و فقط روی فایلهای postscript است. بهطور کلی، رفتار صحیح چاپ به نرمافزارهای سیستم شما بستگی دارد. بهویژه در MS-Windows باید برنامه(های) مناسبی در دسترس داشته باشید و دستورات چاپ مورد استفاده latexmk را پیکربندی کرده باشید. این امر میتواند پیچیده باشد. برای مشاهده نحوه تنظیم دستورات چاپ، به مستندات متغیرهای پیکربندی $lpr، $lpr_dvi و $lpr_pdf مراجعه کنید.
این گزینه با گزینههای -pv و -pvc ناسازگار است، بنابراین آنها را غیرفعال میکند.
- تولید نسخه
pdf سند با
استفاده از
pdflatex. (و
غیرفعال
کردن
هرگونه
درخواست
ناسازگار.)
(اگر میخواهید از lualatex یا xelatex استفاده کنید، میتوانید هرکدام از گزینههای مرتبط شامل -pdflua، -pdfxe، -lualatex یا -xelatex را به کار ببرید.) برای پیکربندی latexmk جهت داشتن چنین رفتاری بهطور پیشفرض، به بخش "Configuration/initialization (rc) files" مراجعه کنید.
- -pdfdvi
- تولید فایل
dvi و سپس
تولید نسخه
pdf سند از روی
فایل dvi،
بهطور
پیشفرض با
استفاده از
dvipdf. (و غیرفعال
کردن
هرگونه
درخواست
ناسازگار.)
برنامهای که بهطور پیشفرض برای کامپایل سند به dvi استفاده میشود latex است، اما این برنامه را میتوان با استفاده از گزینه -dvilua یا با تنظیم $dvi_mode روی 2 به dvilulatex تغییر داد.
- -pdflua
- تولید نسخه pdf سند با استفاده از lualatex. (و غیرفعال کردن هرگونه درخواست ناسازگار.)
- -pdfps
- تولید فایل
dvi، سپس فایل ps
از روی فایل
dvi، و در
نهایت فایل
pdf از روی
فایل ps. (و
غیرفعال
کردن
هرگونه
درخواست
ناسازگار.)
برنامهای که بهطور پیشفرض برای کامپایل سند به dvi استفاده میشود latex است، اما این برنامه را میتوان با استفاده از گزینه -dvilua یا با تنظیم $dvi_mode روی 2 به dvilulatex تغییر داد.
- -pdfxe
- تولید نسخه
pdf سند با
استفاده از
xelatex. (و
غیرفعال
کردن
هرگونه
درخواست
ناسازگار.)
توجه داشته باشید که برای بهینهسازی زمان پردازش، latexmk از xelatex برای ایجاد یک فایل .xdv به جای تولید مستقیم فایل pdf استفاده میکند. تنها پس از اجراهای احتمالاً مکرر برای ایجاد یک فایل .xdv کاملاً بهروز، latexmk ابزار xdvipdfmx را برای تولید فایل نهایی .pdf فراخوانی میکند.
(نکته: دلیل اینکه latexmk تمهیداتی به کار میبرد تا xelatex به جای حالت پیشفرض خود (.pdf)، فایل .xdv بسازد این است: هنگامی که سند شامل فایلهای گرافیکی بزرگ، بهویژه فایلهای .png است، تولید فایل .pdf میتواند حتی زمانی که ایجاد فایل .xdv توسط xelatex سریع است، بسیار زمانبر باشد. بنابراین استفاده از فایل واسط .xdv میتواند به صرفهجویی قابلتوجهی در زمان پردازش منجر شود، چرا که فایل .pdf تنها یک بار تولید میشود، نه در هر بار اجرای xelatex.)
- -pdf-
- غیرفعال
کردن تولید
نسخه pdf سند.
(این گزینه
میتواند
برای لغو
تنظیمی در
یک فایل
پیکربندی
به کار رود.
اگر گزینه
دیگری نیاز
به تولید
فایل pdf
داشته
باشد، ممکن
است این
حالت
نادیده
گرفته شود.)
اگر پس از پردازش تمام گزینهها، تولید pdf همچنان غیرفعال باشد، تولید فایل dvi فعال خواهد شد، و برنامه مورد استفاده برای کامپایل سند latex خواهد بود (یا بهطور دقیقتر، هر برنامهای که در متغیر پیکربندی $latex تنظیم شده باشد).
- -pdflatex
- تنظیم
تولید
فایلهای pdf
توسط pdflatex. (و
غیرفعال
کردن
هرگونه
درخواست
ناسازگار.)
نکته: برای تنظیم دستور مورد استفاده هنگام مشخص شدن pdflatex، گزینه -pdflatex="COMMAND" را ببینید.
- -pdflatex="COMMAND"
- این گزینه
رشته
مشخصکننده
دستور
اجرای pdflatex را
تعیین
میکند، و
معمولاً
برای
افزودن
گزینههای
مورد نظر
استفاده
میشود. از
آنجا که این
رشته
معمولاً
شامل فاصله
است، باید
درون علامت
نقلقول
قرار گیرد،
مانند:
latexmk -pdf -pdflatex="pdflatex --shell-escape %O %S" foo.texمشخصات محتویات این رشته همانند متغیر پیکربندی $pdflatex است. (گزینه -pdflatex در واقع متغیر $pdflatex را مقداردهی میکند.) بسته به سیستمعامل و پوسته خط فرمانی که استفاده میکنید، ممکن است نیاز باشد نقلقول تکی را به نقلقول دوتایی (یا چیز دیگری) تغییر دهید.
نکته: این گزینه هنگامی که همراه با آرگومان COMMAND ارائه شود، تنها دستور فراخوانی pdflatex را مشخص میکند؛ استفاده از pdflatex را فعال نمیکند. این کار توسط گزینههای دیگر یا در یک فایل مقداردهی اولیه انجام میشود.
برای تنظیم دستور اجرای latex (به جای دستور برای pdflatex) به گزینه -latex مراجعه کنید..TP -pdflualatex="COMMAND" معادل -lualatex="COMMAND" است.
- -pdfxelatex="COMMAND"
- معادل -xelatex="COMMAND" است.
- -pretex=CODE
-
با فرض اینکه CODE مقداری کد TeX باشد، این گزینه آن کد را طوری تنظیم میکند که قبل از وارد کردن فایل منبع اجرا شود. این قابلیت تنها در صورتی کار میکند که دستور فراخوانی *latex مربوطه به شکل مناسب پیکربندی شده باشد. برای جزئیات بیشتر به مستندات متغیر $pre_tex_code و رشتههای جایگزینی %P و %U مراجعه کنید. این گزینه با تنظیم متغیر $pre_tex_code عمل میکند.
همچنین گزینهٔ -usepretex را ببینید.
یک مثال:
latexmk -pretex='\AtBeginDocument{Message\par}' -usepretex foo.texاما بهتر است اینگونه نوشته شود:
latexmk -usepretex='\AtBeginDocument{Message\par}' foo.texاگر از پیش دستور مناسبی پیکربندی کردهاید، فقط به این نیاز دارید:
latexmk -pretex='\AtBeginDocument{Message\par}' foo.tex - -print=dvi, -print=ps, -print=pdf, -print=auto,
- نوع فایلی
را که باید
چاپ شود
تعیین
میکند. این
گزینه
همچنین
اطمینان
حاصل
میکند که
فایل مورد
نیاز ساخته
شود، و
قابلیت چاپ
را فعال
میکند.
حالت (پیشفرض) -print=auto نوع فایل چاپ را بهطور خودکار از بین مجموعه فایلهای در حال ساخت تعیین میکند. نخستین مورد از فهرست postscript، pdf، dvi که در میان فایلهای در حال ساخت باشد، برای خروجی چاپ استفاده میشود.
- -ps
- تولید نسخهٔ postscript سند. (و لغو هرگونه درخواست ناسازگار.)
- -ps-
- خاموش کردن تولید نسخهٔ postscript سند. این گزینه میتواند برای بازنویسی تنظیمی در یک فایل پیکربندی استفاده شود. (ممکن است توسط گزینهٔ دیگری که به فایل postscript نیاز دارد، برای نمونه درخواستی برای چاپ، بازنویسی شود.)
- -pF
- پالایش
(فیلتر
کردن) فایل
Postscript. آرگومان
این گزینه
پالایهای
است که یک
فایل postscript
پالایششده
با پسوند
«.psF» تولید
میکند.
تمام
پردازشهای
اضافی
(مانند
پیشنمایش،
چاپ) سپس
روی این
فایل postscript
پالایششده
انجام
خواهد شد.
مثال کاربرد: استفاده از psnup برای چاپ دو صفحه در یک صفحه:
latexmk -ps -pF 'psnup -2' foo.tex
یا
latexmk -ps -pF "psnup -2" foo.tex
اینکه از نقلقول تکی استفاده شود یا دوتایی در اطراف "psnup -2"، به مفسر دستور شما، که توسط نسخهٔ خاص perl و سیستمعامل رایانهٔ شما استفاده میشود، بستگی خواهد داشت.
- -pv
- اجرای پیشنمایشگر فایل. اگر از گزینهٔ -view استفاده شود، آن گزینه نوع فایلی که باید پیشنمایش داده شود (.pdf، .ps یا .dvi) را انتخاب میکند. در غیر این صورت، نمایشگر «بالاترین» نوع فایل خروجی ساختهشده را نمایش میدهد که اولویت آن از بالا به پایین به صورت .pdf، .ps، .dvi است. این گزینه با گزینههای -p و -pvc ناسازگار است، بنابراین آنها را خاموش میکند.
- -pv-
- خاموش کردن -pv.
- -pvc
- اجرای یک
پیشنمایشگر
فایل و
بهروزرسانی
مداوم
فایلهای
.dvi، .ps و/یا .pdf هر
زمان که
تغییراتی
در
فایلهای
منبع ایجاد
شود (بخش
«توضیحات»
در بالا را
ببینید).
اینکه کدام
یک از این
فایلها
تولید و
کدام یک
مشاهده
میشود
توسط
گزینههای
دیگر کنترل
میگردد و
مشابه
گزینهٔ -pv
است. گزینهٔ
پیشنمایش
مداوم -pvc
تنها
میتواند
با یک فایل
کار کند.
بنابراین
در این حالت
شما
معمولاً
فقط یک نام
فایل را در
خط فرمان
مشخص
میکنید.
این گزینه
همچنین با
گزینههای
-p و -pv
ناسازگار
است،
بنابراین
این
گزینهها
را خاموش
میکند.
گزینهٔ -pvc همچنین حالت اجباری (-f) را خاموش میکند، چرا که معمولاً برای حالت پیشنمایش مداوم بهترین وضعیت است. اگر واقعاً حالت اجباری را میخواهید، از گزینهها به ترتیب -pvc -f استفاده کنید.
با یک پیشنمایشگر مناسب، صفحه بهطور خودکار بهروزرسانی خواهد شد. (در برخی و نه همهٔ نسخههای UNIX/Linux دستور "gv -watch" این کار را برای فایلهای postscript انجام میدهد؛ این مورد میتواند توسط یک متغیر پیکربندی تنظیم شود. این قابلیت برای فایلهای pdf نیز کار میکرد، به جز یک باگ ظاهری در gv که هنگام خواندن فایل pdf تازه بهروزرسانیشده باعث بروز خطا میشود.) بسیاری از پیشنمایشگرهای دیگر به بهروزرسانی دستی نیاز خواهند داشت.
نکتهٔ مهم: برنامهٔ acroread در MS-Windows فایل pdf را قفل میکند و مانع از نوشته شدن نسخههای جدید میشود، بنابراین ایدهٔ بدی است که از acroread برای مشاهدهٔ فایلهای pdf در حالت پیشنمایش مداوم استفاده کنید. بهتر است از نمایشگر متفاوتی استفاده شود: SumatraPDF و gsview گزینههای مناسبی هستند.
روشهای دیگری نیز برای ترتیب دادن بهروزرسانی وجود دارد که بهویژه برای بسیاری از نسخههای xdvi و xpdf کاربردی است. بهتر است این موارد در پیکربندی latexmk تنظیم شوند؛ بخشهای زیر را ببینید.
توجه داشته باشید که اگر latexmk متوقف شود یا توسط کاربر خاتمه یابد، پیشنمایشگر منشعبشده (forked) به اجرای خود ادامه خواهد داد. فراخوانیهای متوالی با گزینهٔ -pvc پیشنمایشگرهای جدیدی ایجاد نخواهند کرد، بلکه latexmk معمولاً از پیشنمایشگر موجود استفاده خواهد کرد. (دستکم این اتفاق زمانی رخ میدهد که latexmk تحت سیستمعاملی اجرا شود که بداند چگونه در حال اجرا بودن یک پیشنمایشگر موجود را تشخیص دهد.)
- -pvc-
- خاموش کردن -pvc.
- -pvctimeout
- اعمال اتمام مهلت زمانی (timeout) در حالت pvc پس از یک دوره عدم فعالیت، که بهطور پیشفرض ۳۰ دقیقه است. عدم فعالیت به معنای دورهای است که latexmk هیچ تغییر فایلی را تشخیص نداده و در نتیجه هیچ اقدامی مانند کامپایل کردن سند انجام نداده است.
- -pvctimeout-
- عدم اعمال اتمام مهلت زمانی در حالت pvc پس از عدم فعالیت.
- -pvctimeoutmins=<time>
- تنظیم دورهٔ عدم فعالیت به دقیقه برای اتمام مهلت زمانی pvc.
- -quiet
- مشابه -silent است.
- -r <rcfile>
- خواندن
فایل
راهاندازی
مشخصشده ("RC
file") قبل از
پردازش.
به ترتیب اولویتها دقت کنید: (۱) فایلهای راهاندازی استاندارد -- بخش زیر با عنوان "Configuration/initialization (RC) files" را ببینید -- ابتدا خوانده میشوند. (۲) سپس گزینههای موجود در خط فرمان به همان ترتیبی که مشخص شدهاند اعمال میگردند. بنابراین اگر یک فایل راهاندازی با گزینهٔ -r مشخص شده باشد، در این مرحلهٔ دوم خوانده میشود. از این رو، یک فایل راهاندازی مشخصشده با گزینهٔ -r میتواند هم فایلهای راهاندازی استاندارد و هم گزینههای قبلاً مشخصشده را بازنویسی کند. اما همهٔ اینها میتوانند توسط گزینههای بعدی بازنویسی شوند.
محتویات فایل RC صرفاً شامل قطعهکدی به زبان برنامهنویسی Perl است (معمولاً توالیای از دستورهای انتساب)؛ آنها زمانی اجرا میشوند که گزینهٔ -r در حین پردازش خط فرمان توسط latexmk دیده شود. برای روشی جهت ارائهٔ مستقیم کد راهاندازی در خط فرمان latexmk، گزینهٔ -e را ببینید. وقوع یک خطا منجر به توقف latexmk میشود. موارد متعددی از گزینههای -r و -e میتوانند استفاده شوند و به ترتیبی که در خط فرمان ظاهر میشوند به اجرا درمیآیند.
- -rc-report
- پس از راهاندازی اولیه، فهرستی از فایلهای RC خواندهشده ارائه میدهد. (پیشفرض)
- -rc-report-
- پس از راهاندازی اولیه، فهرستی از فایلهای RC خواندهشده ارائه نمیدهد.
- -recorder
- اعطای
گزینهٔ -recorder
به *latex. در
(بیشتر)
نسخههای
جدید این
برنامهها،
این کار
منجر به
تولید
فایلی با
پسوند .fls
شامل
فهرستی از
فایلهایی
میشود که
این
برنامهها
خوانده و
نوشتهاند.
سپس Latexmk پس از
یک بار
اجرای *latex از
این فایل
برای بهبود
تشخیص
فایلهای
منبع و
فایلهای
تولیدشده
استفاده
خواهد کرد.
این تنظیم
پیشفرض latexmk
است، مگر
اینکه در یک
فایل
راهاندازی
بازنویسی
شده باشد.
برای اطلاعات بیشتر، مستندات متغیر پیکربندی $recorder را ببینید.
- -recorder-
- گزینهٔ -recorder را به *latex ارسال نمیکند.
- -rules
- نمایش فهرستی از قواعد (rules) و وابستگیهای latexmk پس از پردازش..TP -rules- فهرست قواعد و وابستگیهای latexmk را پس از پردازش نمایش نده. (این حالت پیشفرض است.)
- -showextraoptions
- فهرست
گزینههای
اضافی *latex را
که latexmk
میشناسد
اما صرفاً
هنگام اجرا
به
برنامههای
*latex ارسال
میکند،
نمایش بده.
این
گزینهها
(در حال
حاضر)
ترکیبی از
موارد مجاز
در
پیادهسازیهای
TeXLive و MiKTeX هستند.
(اگر گزینهٔ
خاصی به latexmk
داده شود
ولی توسط
پیادهسازی
مورد
استفاده از
*latex
پشتیبانی
نشود،
احتمالاً
آن برنامه
یک هشدار یا
خطا صادر
خواهد کرد.)
تعداد این
گزینهها
بسیار زیاد
است، اما در
این
مستندات
ذکر
نشدهاند
زیرا
تأثیری بر
عملکرد latexmk
ندارند.
چندین گزینه وجود دارند (مانند -includedirectory=dir، -initialize و -ini) که شناخته نمیشوند؛ یا به این دلیل که با سازوکار مورد نظر latexmk همخوانی ندارند، یا نیازمند پردازش خاصی از سوی latexmk هستند که هنوز پیادهسازی نشده است (دستکم تا این لحظه).
گزینههای خاصی برای *latex وجود دارند (مانند -recorder) که اقدامات یا رفتارهای ویژهای را در خود latexmk فعال میکنند. بسته به این اقدام، ممکن است آنها به شکلی به برنامهٔ فراخوانیشدهٔ *latex نیز منتقل شوند و/یا بر برنامههای دیگر نیز اثر بگذارند. این گزینهها در این مستندات دارای بخشهای جداگانهای هستند. از جمله این گزینهها میتوان به این موارد اشاره کرد: -jobname=STRING، -aux-directory=dir، -output-directory=DIR، -quiet و -recorder.
همچنین گزینههایی وجود دارند که توسط *latex پذیرفته میشوند، اما در عوض صرفاً عملکردهایی را در خود latexmk فعال میکنند: -help، -version.
- -silent
- دستورها را
در حالت
بیصدا
اجرا کن؛
یعنی با
گزینههایی
که میزان
پیامهای
تشخیصی
تولیدشده
را کاهش
میدهند.
برای
نمونه، با
تنظیمات
پیشفرض،
دستور "latex
-interaction=batchmode" برای latex
و به همین
ترتیب برای
برنامههای
وابسته
استفاده
میشود.
همچنین گزینههای -logfilewarninglist و -logfilewarninglist- را ببینید.
همچنین تعداد پیامهای اطلاعاتی را که خود latexmk تولید میکند کاهش میدهد.
برای تغییر گزینههایی که جهت اجرای بیصدای دستورها به کار میروند، باید latexmk را با تغییر مقادیر متغیرهای پیکربندی آن تنظیم کنید که متغیرهای مرتبط عبارتند از: $bibtex_silent_switch، $biber_silent_switch، $dvipdf_silent_switch، $dvips_silent_switch، $dvilualatex_silent_switch، $latex_silent_switch، $lualatex_silent_switch، $makeindex_silent_switch، $pdflatex_silent_switch و $xelatex_silent_switch.
- -stdtexcmds
- دستورهای
مربوط به latex
و غیره را
روی مقادیر
استاندارد
تنظیم
میکند. این
کار برای
نادیدهگرفتن
و بازنویسی
پیکربندیهای
خاص کاربرد
دارد.
نتیجه این است که $latex = 'latex %O %S' قرار میگیرد، و مشابهاً برای $pdflatex، $lualatex و $xelatex نیز اعمال میشود. (با توجه به اینکه %O در تعریف وجود دارد، گزینهٔ -no-pdf که برای $xelatex مورد نیاز است بهطور خودکار ارائه میشود.)
- -time
- نمایش زمان مصرفشده. (در MS Windows، زمان واقعیِ سپریشده نشان داده میشود؛ در سیستمهای دیگر زمان پردازنده (CPU).) همچنین متغیر پیکربندی $show_time را ببینید.
- -time-
- زمان مصرفشده را نشان نده. همچنین متغیر پیکربندی $show_time را ببینید.
- -use-make
- هنگامی که
پس از اجرای
*latex
هشدارهایی
دربارهٔ
فایلهای
ناموجود
وجود داشته
باشد (برای
نمونه
فایلهای
درخواستشده
توسط
دستورهای
\input، \include و \includegraphics در
LaTeX)، latexmk
میکوشد تا
با یک
وابستگی
سفارشی
آنها را
بسازد. اگر
هیچ
وابستگی
سفارشی
مرتبطی با
یک فایل
منبع مناسب
یافت نشود و
گزینهٔ -use-make
فعال باشد،
latexmk به عنوان
آخرین
راهحل
تلاش خواهد
کرد از
برنامهٔ make
برای ایجاد
فایلهای
ناموجود
استفاده
کند.
توجه داشته باشید که ممکن است نام فایل بدون پسوند مشخص شده باشد، مثلاً با \includegraphics{drawing} در یک فایل LaTeX. در این صورت، latexmk تلاش میکند drawing.ext را بسازد که در آن ext به نوبت با پسوندهای معتبر و مرتبط با latex (یا برحسب مورد pdflatex، lualatex، xelatex) جایگزین میشود.
همچنین مستندات متغیر پیکربندی $use_make_for_missing_files را ببینید.
- -use-make-
- برای تلاش در ساخت فایلهای ناموجود از برنامهٔ make استفاده نکن. (پیشفرض.)
- -usepretex
- خطوط فرمان
مربوط به latex
و غیره را
طوری تنظیم
میکند که
از کد
تعریفشده
توسط متغیر
$pre_tex_code یا کد
تعیینشده
توسط
گزینهٔ -pretex=CODE
برای اجرای
کد TeX
مشخصشده
قبل از
خوانده شدن
فایل منبع
استفاده
کنند. این
گزینه
هرگونه
تعریف
پیشین خطوط
فرمان را
بازنویسی
میکند.
نتیجه این است که $latex = 'latex %O %P' قرار میگیرد، و مشابهاً برای $pdflatex، $lualatex و $xelatex نیز اعمال میشود. (گزینهٔ -no-pdf که برای $xelatex لازم است، با توجه به وجود %O در تعریف، بهطور خودکار اعمال میشود.)
- -usepretex=CODE
- معادل با -pretex=CODE
-usepretex است. مثال:
latexmk -usepretex='\AtBeginDocument{Message\par}' foo.tex - -v یا -version
- چاپ شمارهٔ نسخهٔ latexmk.
- -verbose
- نقطهٔ مقابل -silent. این تنظیم پیشفرض است.
- -view=default, -view=dvi, -view=hnt, -view=ps, -view=pdf, -view=none
- نوع فایل
مورد
استفاده
هنگام
درخواست
پیشنمایش
را تعیین
میکند
(مثلاً توسط
سوئیچهای
-pv یا -pvc). حالت
پیشفرض
نمایش
«بالاترین»
نوع فایل
درخواستی
است (به
ترتیب از
پایین به
بالا: .dvi، .hnt، .ps،
.pdf).
به امکان استفاده از -view=none توجه داشته باشید که در آن اصلاً هیچ نمایشگری باز نمیشود. یک نمونه از کاربرد آن همراه با گزینهٔ -pvc است؛ زمانی که میخواهید latexmk با هر بار تغییر فایل(های) منبع، کامپایل را بهطور خودکار انجام دهد اما مایل نیستید هیچ پیشنمایشگری باز شود.
- -Werror
- باعث میشود latexmk در صورتی که هر یک از فایلهای پردازششده هشداری دربارهٔ مشکلات ارجاعات یا نقلقولها صادر کند (یعنی ارجاعات یا نقلقولهای تعریفنشده، یا مواردی با تعاریف چندگانه)، یک کد وضعیت غیرصفر بازگرداند. این عمل پس از اتمام تمام اجراهایی صورت میگیرد که latexmk برای رفع مراجع و ارجاعات به آنها نیاز دارد. بنابراین -Werror باعث میشود latexmk با چنین هشدارهایی مانند خطا رفتار کند، اما تنها زمانی که در آخرین اجرای *latex رخ داده باشند و فقط پس از پایان کامل پردازش. همچنین میتوان آن را با متغیر پیکربندی $warnings_as_errors تنظیم کرد.
- -xdv
- تولید نسخهٔ xdv سند با استفاده از xelatex. (و لغو هرگونه درخواست ناسازگار.)
- -xelatex
- استفاده از
xelatex؛ بدین
معنا که از
xelatex برای
پردازش
فایل(های)
منبع
استفاده
میکند. این
گزینه منجر
به ایجاد یک
فایل pdf
خواهد شد
(اما بهطور
غیرمستقیم
و از طریق
فایل xdv). (و لغو
هرگونه
درخواست
ناسازگار.)
این گزینه معادل با استفاده از گزینهٔ زیر است:
-pdfxe[نکته: توجه داشته باشید که شیوهٔ پیادهسازی این گزینه، اما نه اثر اصلیِ مورد نظر آن، با برخی نسخههای پیشین latexmk تفاوت دارد. Latexmk ابتدا از xelatex برای ساخت یک فایل .xdv استفاده میکند و تمام اجراهای اضافی مورد نیاز (از جمله اجراهای bibtex و غیره) را انجام میدهد. تنها پس از آن است که با استفاده از xdvipdfmx، فایل pdf را از روی فایل .xdv تولید میکند. برای چرایی این موضوع، مستندات مربوط به -pdfxe را ببینید.]
- -xelatex="COMMAND"
- رشتهای را
تنظیم
میکند که
دستور
اجرای xelatex را
مشخص
میسازد.
این گزینه
متغیر $xelatex را
تعیین
میکند.
هشدار: مهم است اطمینان حاصل شود که هنگام فراخوانی xelatex گزینهٔ -no-pdf به کار رفته باشد، زیرا latexmk انتظار دارد xelatex یک فایل .xdv تولید کند، نه یک فایل .pdf. اگر در تعریف دستور از %O استفاده کنید، این کار بهطور خودکار انجام خواهد شد. برای آگاهی از اینکه چرا latexmk هنگام استفاده از xelatex به جای فایل .pdf یک فایل .xdv میسازد، به مستندات گزینهٔ -pdfxe مراجعه کنید.
نمونهای از کاربرد گزینهٔ -xelatex:
latexmk -pdfxe -xelatex="xelatex --shell-escape %O %S" foo.texنکته: این گزینه هنگامی که به همراه آرگومان COMMAND ارائه شود، تنها دستور فراخوانی xelatex را تعیین میکند؛ و استفاده از lualatex را فعال نمیکند. این کار توسط گزینههای دیگر یا در یک فایل مقداردهی اولیه انجام میپذیرد.
سازگاری بین گزینهها
گزینهٔ پیشنمایش مداوم -pvc تنها میتواند با یک فایل کار کند. بنابراین در این حالت معمولاً تنها یک نام فایل در خط فرمان مشخص خواهید کرد..PP گزینههای -p، -pv و -pvc ناسازگار با یکدیگر (مانعةالجمع) هستند. بنابراین، هر یک از این گزینهها دیگری را غیرفعال میکند.
مثالها (EXAMPLES)
% latexmk thesis # اجرای latex به تعداد دفعات کافی برای حل ارجاعات متقابل % latexmk -pvc -ps thesis # اجرای latex به تعداد دفعات کافی برای حل ارجاعات متقابل، ساخت یک فایل postscript، راهاندازی پیشنمایشگر. سپس نظارت بر تغییرات در فایل منبع thesis.tex و هر فایلی که استفاده میکند. پس از هر تغییر، latex را به تعداد دفعات مناسب دوباره اجرا کرده و فایل postscript را مجدداً بسازید. اگر latex با خطایی مواجه شود، latexmk به اجرا و نظارت بر تغییرات فایل منبع ادامه میدهد. % latexmk -c # حذف فایلهای .aux، .log، .bbl، .blg، .dvi، .pdf، .ps و .bbl
مدیریت خطاها، مشکلات و موارد دیگر (DEALING WITH ERRORS, PROBLEMS, ETC)
برخی احتمالات و راهکارها:
الف. اگر با خطای عجیبی مواجه شدید، خروجی روی صفحه و فایلهای log را با دقت بررسی کنید. گرچه خروجی latex به پرحرفی بیش از حد معروف است (و مواردی نیز توسط latexmk به آن افزوده میشود)، این پرحرفی دلیلی دارد: ایجاد امکان تشخیص مشکلات برای کاربر. Latexmk برخی از پیامها را در انتهای اجرا تکرار میکند که فکر میکند در غیر این صورت ممکن است در میان سایر خروجیها نادیده گرفته شوند.
ب. بهطور کلی، به یاد داشته باشید که latexmk کار خود را با اجرای برنامههای دیگر انجام میدهد. اولویت نخست شما در برخورد با خطاها باید بررسی مشکلی باشد که در اجرای تکتک برنامهها رخ داده است. سپس باید علت خطاها را در اجرای این برنامهها برطرف کنید. (اغلب این موارد ناشی از خطا در سند منبع هستند، اما ممکن است به دلیل بستههای ناموجود LaTeX و موارد مشابه نیز باشند.)
ج. اگر latexmk برنامهها را آنطور که مایلید اجرا نمیکند، باید در این مستندات به فهرست گزینههای خط فرمان و سپس به بخشهای مربوط به فایلهای پیکربندی/مقداردهی اولیه نگاهی بیندازید. بخش عمدهای از رفتار latexmk برای مواجهه با شرایط خاص قابل پیکربندی است. (اما نیاز به مطالعه زیادی دارد!)
باقیمانده این یادداشتها شامل ایدههایی برای مواجهه با شرایط دشوارتر است.
د. ترفندهای بیشتر میتواند شامل جایگزینی دستورهای استانداردی باشد که latexmk اجرا میکند با دستورها یا اسکریپتهای دیگر.
ه. برای نمونههای احتمالی کد جهت استفاده در یک فایل RC، دایرکتوری example_rcfiles را در توزیع latexmk ببینید (برای مثال در http://mirror.ctan.org/support/latexmk/example_rcfiles). حتی اگر این مثالها دقیقاً آنچه میخواهید نباشند، ممکن است الهامبخش مناسبی باشند.
و. ترفند مفیدی وجود دارد که هنگام استفاده از lualatex به جای pdflatex (و در برخی موقعیتهای مشابه) میتوان از آن بهره برد. مشکل این است که latexmk متوجه وابستگی به فایلی (مثلاً bar.baz) که بهجای بخش LaTeX توسط کد lua در سند شما فراخوانی (input) شده باشد نمیشود. (بنابراین اگر bar.baz را تغییر دهید و latexmk را دوباره اجرا کنید، latexmk تصور میکند هیچ فایلی تغییر نکرده و lualatex را دوباره اجرا نمیکند، در حالی که اگر در بخش LaTeX سند دستور '\input{bar.baz}' را قرار میدادید، latexmk متوجه تغییر میشد.) یکی از راهحلها این است که دستور زیر را در جایی از بخش LaTeX سند قرار دهید:
\typeout{(bar.baz)}
این کار خطی را در فایل log قرار میدهد که latexmk آن را به منزله خوانده شدن فایل bar.baz در نظر میگیرد. (در حال حاضر روشی برای انجام خودکار این کار نمیشناسم.) البته، اگر فایل نام متفاوتی دارد، نام فایل خود را جایگزین bar.baz کنید.
ز. همچنین بخش «Advanced Configuration: Some extra resources» را ببینید.
ح. به tex.stackexchange نگاهی بیندازید، به نشانی http://tex.stackexchange.com/questions/tagged/latexmk؛ ممکن است شخصی قبلاً مشکل شما را حل کرده باشد.
ط. در tex.stackexchange.com پرسشی مطرح کنید.
ی. یا از من (نویسنده latexmk) بپرسید. ایمیل من در انتهای این مستندات آمده است.
دایرکتوریهای کمکی و خروجی (AUXILIARY AND OUTPUT DIRECTORIES)
اجرای *latex و برنامههای وابسته به آن، تعدادی فایل تولید میکند؛ اغلب مطلوبتر است ترتیبی داده شود که فایلهای تولیدشده در دایرکتوری متفاوتی نسبت به فایل(های) منبع یک سند قرار گیرند. برای مقاصد ما در اینجا، دو دسته از فایلهای تولیدشده را تفکیک میکنیم.
یک دسته مواردی هستند که میتوان آنها را فایلهای خروجی نهایی نامید؛ برای نمونه، فایل .pdf تولیدشده با اجرای pdflatex، یا فایل .dvi از latex. همچنین در این دسته، فایل ps حاصل از اعمال dvips بر روی یک فایل .dvi قرار دارد. فایلهای .synctec یا .synctex.gz نیز وجود دارند که میتوانند توسط برنامههای نمایشدهنده فایلهای .pdf و نظایر آن برای مرتبط ساختن موقعیتها در آنها با موقعیتها در فایلهای منبع به کار روند.
دسته دوم شامل تمام فایلهای تولیدشده دیگر است: این فایلها بهویژه شامل فایلهای .aux میشوند که برای پیادهسازی ارجاعات متقابل استفاده شده و هم در یک نوبت اجرا تولید میشوند و هم در نوبتهای بعدی خوانده میشوند. بسیاری از بستهها و همچنین برنامههایی مانند bibtex، makeindex و غیره فایلهای واسط بیشتری از این دست تولید میکنند. همچنین فایلهای .log از *latex و فایلهای متناظر از سایر برنامهها نیز در این دسته قرار میگیرند.
بیایید از اصطلاح «دایرکتوری خروجی» برای دایرکتوری دریافتکننده فایلهای خروجی نهایی، و «دایرکتوری کمکی» (aux) برای دایرکتوری سایر فایلهای تولیدشده استفاده کنیم. اگر هیچ گزینه خاصی به برنامههای *latex داده نشود، این دایرکتوریها بهطور پیشفرض همان دایرکتوری جاری خواهند بود و فایلهای تولیدشده تفکیک نمیشوند. اگر هر دو دایرکتوری یکسان باشند، که سادهترین وضعیت است، تمام فایلهای تولیدشده در همان دایرکتوری نوشته میشوند و معمولاً بدون اشاره به دایرکتوری aux جداگانه، صرفاً از دایرکتوری خروجی نام برده میشود.
پشتیبانی از آنها در برنامههای *latex فراهم شده است: با گزینه واحد -output-directory برای پیادهسازیهای TeXLive، و با گزینههای -aux-directory و -output-directory برای پیادهسازیهای MiKTeX. چنین پشتیبانی ویژهای به دو دلیل ضروری است: نخست اینکه بستههای بسیاری وجود دارند که فایل ایجاد میکنند و باید ترتیبی داده شود که این فایلها بدون هیچگونه بازنویسی در کد بستهها، بهطور خودکار در دایرکتوری مناسب نوشته شوند. دوم اینکه این فایلها اغلب در اجراهای بعدی *latex دوباره خوانده میشوند و لازم است برنامه بداند فایلها را در کجا پیدا کند.
یک پیچیدگی این است که پیادهسازی TeXLive امکان تفکیک دایرکتوریهای aux و خروجی را نمیدهد. Latexmk با قابلیت شبیهسازی یک دایرکتوری aux جداگانه، با این مسئله برخورد میکند: در این روش، *latex را صرفاً با یک گزینه -output-directory فراخوانی میکند، در حالی که دایرکتوری نه روی دایرکتوری خروجیِ مورد نظر، بلکه روی دایرکتوری aux تنظیم شده است. پس از اجرای *latex، فایل(های) خروجی نهایی مربوطه را به دایرکتوری خروجی مد نظر منتقل میکند. شبیهسازی را میتوان با تنظیم متغیر پیکربندی $emulate_aux روی عدد یک (1) در یک فایل پیکربندی یا با استفاده از گزینه -emulate-aux-dir در latexmk فعال کرد. روش شبیهسازی در صورت استفاده از MiKTeX نیز به همان خوبی کار میکند.
همچنین Latexmk در صورت نیاز، شبیهسازی را به شرح زیر فعال میکند. فرض کنید شبیهسازی در ابتدا غیرفعال است، اما دایرکتوریهای aux و خروجی متفاوت هستند. سپس latexmk برنامه *latex را با گزینه -aux-directory فراخوانی میکند و پس از اجرا متوجه میشود که این گزینه رعایت نشده است، بهویژه به این دلیل که فایل .log بهجای دایرکتوری aux در دایرکتوری خروجی قرار دارد. سپس latexmk شبیهسازی را فعال کرده و مجدداً تلاش میکند. شاید بتوان تصور کرد که تمام فایلهای تولیدشده مناسب را از دایرکتوری خروجی به دایرکتوری aux منتقل کند؛ اما تنوع این فایلها چنان زیاد است که شناسایی مطمئن همه آنها جز در موارد ساده دشوار خواهد بود.
توجه داشته باشید که مسئله شبیهسازی تنها زمانی رخ میدهد که کاربر ترتیبی داده باشد که دایرکتوریهای aux و خروجی متفاوت باشند. در صورتی که آنها برابر باشند، مثلاً به این دلیل که کاربر تنها متغیر $out_dir را تنظیم کرده است، latexmk برنامه *latex را تنها با یک گزینه -output-directory فراخوانی میکند که هم در TeXLive و هم در MiKTeX همانطور که انتظار میرود عمل میکند.
علاوه بر این، latexmk فراخوانیهای برنامههای کمکی مانند bibtex و makeindex را به گونهای ترتیب میدهد که فایلهای مربوطه را از دایرکتوری aux خوانده و در آن بنویسند. برنامههایی مانند dvips، dvipdf، ps2pdf و xdvipdfmx طوری فراخوانی میشوند که از مکانهای مناسب بخوانند و خروجی خود را در دایرکتوری خروجی بنویسند.
فایلهایی که بهعنوان خروجی نهایی در نظر گرفته میشوند، یعنی آنهایی که به جای دایرکتوری aux به دایرکتوری خروجی تعلق دارند: این فایلها دارای پسوندهای .dvi، .ps.، .pdf، .synctex و .synctex.gz هستند. یک مورد خاص، به دلیل مسائل سازگاری، فایلهای .fls هستند: در ادامه را ببینید.
توجه داشته باشید که وقتی xelatex با گزینه -no-pdf آن فراخوانی میشود، همانطور که latexmk این کار را انجام میدهد، یک فایل .xdv تولید میکند که به نظر میرسد وضعیتی مشابه یک فایل .dvi تولیدشده توسط latex داشته باشد. با این حال، latexmk با .xdv بهعنوان یک فایل واسط رفتار میکند که در دایرکتوری aux قرار میگیرد. این رفتار برای مطابقت با رفتار MiKTeX در قبال گزینه -aux-directory است. بهعنوان توجیه بیشتر، میتوان گفت که در شرایط امروزی یک فایل .xdv (تقریباً) همیشه یک فایل واسط است. از نظر تاریخی، وضعیت فایلهای .dvi از latex متفاوت بود و در حال حاضر نمایشدهندههای dvi همچنان وجود دارند.
متغیرها و گزینهها برای دایرکتوریها: متغیرها برای تنظیم دایرکتوریهای aux و خروجی شامل $aux_dir و $out_dir هستند، به همراه گزینههای خط فرمان متناظر -auxdir (یا -aux-directory) و -outdir (یا -output-directory). وقتی مقداری برای اینها خالی باشد (که مقدار پیشفرض است)، به معنای استفاده از مقدار پیشفرض خواهد بود: برای دایرکتوری aux، پیشفرض برابر قرار دادن آن با دایرکتوری خروجی است. برای دایرکتوری خروجی، پیشفرض دایرکتوری جاری است.
برای روشن و خاموش کردن حالت شبیهسازی، متغیر پیکربندی $emulate_aux و گزینههای -emulate-aux-dir، -emulate-aux-dir- و -noemulate-aux-dir در دسترس هستند.
تعامل با گزینه -cd: هنگامی که از گزینه -cd استفاده میشود (یا تنظیم معادل آن در متغیر $do_cd)، آنگاه latexmk پیش از فراخوانی *latex، دایرکتوری کاری را به دایرکتوری سند تغییر میدهد. اگر دایرکتوریهای aux و/یا خروجی با مسیرهای نسبی داده شوند، برای مثال با -outdir=output برای دایرکتوری با نام «output»، دایرکتوریها به جای اینکه نسبت به دایرکتوری کاریِ زمانِ فراخوانی latexmk باشند، نسبت به دایرکتوری سند سنجیده میشوند. این رفتار منطبق بر نحوه عملکرد *latex هنگام فراخوانی با آرگومان(های) دایرکتوریِ خط فرمانِ ارائهشده پس از تغییر دایرکتوری کاری به دایرکتوری سند است.
ایجاد خودکار دایرکتوریهای aux و خروجی: برخلاف *latex، اگر latexmk متوجه شود که دایرکتوری/دایرکتوریهای درخواستی وجود ندارند، آنها را ایجاد میکند و بدین ترتیب از بروز خطا هنگام فراخوانی *latex جلوگیری مینماید.
اگر سند از ماکروی \include برای خواندن یک فایل .tex از یک زیردایرکتوری استفاده کند، *latex تلاش خواهد کرد تا یک فایل aux اضافی در زیردایرکتوری متناظر از دایرکتوری aux بنویسد. اگر زیردایرکتوری وجود نداشته باشد، *latex هشدار میدهد که قادر به نوشتن فایل aux نیست. پس از اجرای *latex، برنامه latexmk این وضعیت را شناسایی کرده، دایرکتوری لازم را ایجاد میکند و با برطرف شدن شرایط خطا، *latex را مجدداً اجرا میکند.
انتخاب دایرکتوریهای aux و خروجی: اغلب دایرکتوریهای aux و خروجی بهصورت زیردایرکتوریهایی از دایرکتوری سند مشخص میشوند، مثلاً با -outdir=output. اما این امکان نیز وجود دارد که مثلاً یک مسیر مطلق یا مسیری نسبت به یک دایرکتوری والد ارائه شود، مانند «/tmp/foo» یا «../output». توجه داشته باشید که بهطور کلی این کار میتواند مشکلاتی ایجاد کند، بهویژه در رابطه با makeindex یا bibtex. دلیل آن این است که نسخههای جدید این برنامهها بهطور پیشفرض، زمانی که از آنها خواسته شود فایلی را در دایرکتوریای بنویسند که به نظر نمیرسد دایرکتوری کاری جاری یا یکی از زیردایرکتوریهای آن باشد، از کار خودداری میکنند. این رفتار بخشی از تدابیر امنیتی کل سامانه TeX است که تلاش میکند از آسیبرساندن اسناد مخرب یا نادرست TeX به فایلهای کاربر جلوگیری به عمل آورد.
بهطور پیشفرض، latexmk این مسئله را دور میزند: پیش از اجرای bibtex و makeindex، برنامه latexmk با تنظیمات مناسب مسیرهای جستجو، دایرکتوری کاری را به دایرکتوری aux تغییر میدهد. استفاده یا عدم استفاده از این ترفند توسط متغیرهای $bibtex_fudge و $makeindex_fudge کنترل میشود. متأسفانه این ترفند گاهی باعث میشود bibtex و makeindex نتوانند فایلها را پیدا کنند.
در صورت لزوم میتوان این ترفند را غیرفعال کرد. اما این کار با دایرکتوری aux نظیر «/tmp/foo» یا «../output» ناسازگار است. اگر واقعاً مجبور به مواجهه با این شرایط هستید، و تنها در صورتی که ناچارید، باید تدابیر امنیتی را غیرفعال کنید (و خطرات آن را بپذیرید). یکی از راههای انجام این کار، تنظیم موقت متغیر محیطی سیستمعامل با نام openout_any روی مقدار «a» (مخفف «all») است تا تنظیم پیشفرض «paranoid» را لغو و بازنویسی کند.
برخی نامهای دایرکتوریهای aux و خروجی در Microsoft Windows مجاز نیستند: کاملاً طبیعی است که بخواهید از نام «aux» برای دایرکتوری کمکی استفاده کنید، مثلاً با استفاده از گزینه -auxdir=aux. اما در سیستمعاملهای مایکروسافت، «aux» یکی از نامهای ممنوعه برای یک فایل یا دایرکتوری است. استانداردسازی روی نامی مانند «auxdir» (مثلاً با -auxdir=auxdir) بسیار سودمند است؛ این رویکرد مستقل از سیستمعامل عمل میکند.
مکان فایل .fls: بخش عمده اطلاعات وابستگی که latexmk استفاده میکند از فایل .fls ناشی میشود؛ فایلی که هنگام فراخوانی *latex با گزینه -recorder ایجاد میشود و latexmk بهطور پیشفرض این کار را انجام میدهد. ممکن است منطقی به نظر برسد که این فایل در دایرکتوری aux نوشته شود. اما در واقع نسخههای MiKTeX پیش از اکتبر ۲۰۲۰ آن را در دایرکتوری خروجی مینوشتند. نسخههای بعدی آن را در دایرکتوری aux مینویسند. برای مدیریت این موضوع، latexmk دو کار انجام میدهد: نخست، اگر latexmk تشخیص دهد که فایل .fls فقط در دایرکتوری «اشتباه» تولید شده است، آن را به دایرکتوری مورد انتظار کپی میکند و پس از آن، عملیات latexmk بهطور مستقل از رفتار *latex بهدرستی ادامه مییابد. دوم، اجازه میدهد تعریف آن از دایرکتوری «درست» (یا مورد انتظار) توسط متغیر $fls_uses_aux_dir پیکربندی شود. مقدار پیشفرض آن صفر است تا با رفتار فعلی MiKTeX همخوانی داشته باشد..SH "امکان تغییر نوع فایل خروجی (ALLOWING FOR CHANGE OF OUTPUT FILE TYPE)"
هنگامی که یکی از موتورهای latex اجرا میشود، وضعیت معمول این است که latex یک فایل .dvi تولید میکند، در حالی که pdflatex و lualatex یک فایل .pdf تولید میکنند. برای xelatex حالت پیشفرض تولید یک فایل .pdf است، اما برای بهینهسازی زمان پردازش، latexmk دستور xelatex را همراه با گزینهٔ -no-pdf آن اجرا میکند تا یک فایل .xdv تولید کند. پردازشهای بعدی توسط latexmk این را به عنوان یک نقطهٔ شروع در نظر میگیرند.
با این حال، فایل خروجی واقعی ممکن است با انتظار معمول تفاوت داشته باشد؛ و در این حالت latexmk میتواند پردازش خود را برای انطباق با این وضعیت تنظیم کند. تفاوت در نوع فایل خروجی ممکن است به دو دلیل رخ دهد: اول اینکه برای latex، pdflatex و lualatex خود سند میتواند پیشفرضها را بازنویسی کند. دلیل دیگر این است که ممکن است پیکربندی یا پیکربندی نادرستی وجود داشته باشد، بهگونهای که برنامهای که latexmk برای کامپایل سند فراخوانی میکند، برنامهٔ مورد انتظار نباشد، یا گزینههایی به آن داده شود که با آنچه latexmk در ابتدا انتظار دارد ناسازگار باشد.
در latex و pdflatex، کنترل قالب خروجی توسط سند با تنظیم ماکروی \pdfoutput انجام میشود. در lualatex، به جای آن از ماکروی \outputmode استفاده میشود.
یک نمونه از موارد کاربرد مهم برای کنترل قالب خروجی توسط سند، سندی است که از بستهٔ psfrag برای درج عناصر گرافیکی در فایل خروجی استفاده میکند. بستهٔ psfrag اثرات خود را با درج کد postscript در خروجی کامپایل سند به دست میآورد. این امر مستلزم کامپایل به یک فایل .dvi و به دنبال آن تبدیل به یک فایل postscript است (خواه مستقیماً، مانند استفاده از dvips یا به طور ضمنی، به عنوان یک مرحلهٔ میانی توسط dvipdf). بنابراین اجبار خروجی به قالب .dvi با درج \pdfoutput=0 در دیباچهٔ سند سودمند خواهد بود.
نمونهٔ دیگر زمانی است که سند از فایلهای تصویری با انواع .pdf، .jpg و png استفاده میکند. با تنظیمات پیشفرض بستهٔ graphicx، این فایلها در هنگام کامپایل به .pdf قابل پردازش هستند، اما در کامپایل به .dvi خیر. در این حالت، درج \pdfoutput=1 در دیباچهٔ سند برای اجبار کامپایل به قالب خروجی .pdf سودمند است.
در تمام این موارد، لازم است که latexmk در صورت امکان پردازش خود را برای مقابله با عدم تطابق بین قالب خروجی واقعی (از میان .pdf، .dvi، .xdv) و خروجی مورد انتظار اولیه تنظیم کند. Latexmk این کار را مشروط به برآورده شدن شرایط زیر انجام میدهد.
شرط اول این است که متغیر پیکربندی $allow_switch در latexmk روی یک مقدار غیر صفر تنظیم شده باشد، همانطور که به طور پیشفرض هست. اگر این متغیر صفر باشد، عدم تطابق انواع فایل در کامپایل به یک خطا منجر میشود.
شرط دوم برای اینکه latexmk بتواند تغییر نوع خروجی را مدیریت کند این است که هیچ درخواست صریحی برای فایلهای خروجی .dvi یا .ps ثبت نشده باشد. درخواستهای صریح با گزینههای -dvi و -ps، -print=dvi، -print=ps، -view=dvi و -view=ps و با تنظیمات متناظر متغیرهای پیکربندی $dvi_mode، $postscript_mode، $print_type و $view مشخص میشوند. محدودیتهای نوع چاپ و نوع نمایش تنها زمانی اعمال میشوند که چاپ و مشاهده به ترتیب صراحتاً درخواست شده باشند. برای این منظور، استفاده از گزینههای -pdfdvi و -pdfps (و تنظیم متناظر متغیر $pdf_mode) به عنوان یک درخواست صریح برای فایلهای .dvi و .ps به شمار نمیآید؛ آنها صرفاً درخواستی برای ایجاد یک فایل .pdf به همراه یک پیشنهاد اولیه برای مسیر پردازشِ ساخت آن در نظر گرفته میشوند.
توجه داشته باشید که هنگام سازگاری با تغییر در نوع فایل خروجی، تغییر قابل توجهی در شبکهٔ قواعدی که latexmk در اقدامات خود استفاده میکند دخیل است. شرط دوم اعمالشده برای انطباق با یک تغییر، به منظور جلوگیری از موقعیتهایی است که در آنها تغییر در شبکهٔ قواعد بیش از حد بنیادین است و نمیتوان آن را به سادگی به صورت خودکار مدیریت کرد.
فایلهای پیکربندی/راهاندازی (CONFIGURATION/INITIALIZATION (RC) FILES)
در این بخش توضیح داده میشود که کدام فایلهای پیکربندی توسط latexmk خوانده میشوند. بخشهای بعدی «نحوه تنظیم متغیرها در فایلهای راهاندازی»، «قالب مشخصات دستور»، «فهرست متغیرهای پیکربندی قابل استفاده در فایلهای راهاندازی»، «وابستگیهای سفارشی» و «پیکربندی پیشرفته» جزئیات مربوط به آنچه را میتوان پیکربندی کرد و چگونگی آن ارائه میدهند.
Latexmk میتواند با استفاده از فایلهای راهاندازی سفارشیسازی شود، که در هنگام راهاندازی به ترتیب زیر خوانده میشوند:
۱) فایل RC
سیستمی، در
صورت وجود.
در یک سیستم
UNIX، latexmk
دایرکتوریهای
زیر را برای
یافتن یک
فایل
RC سیستمی، که
ممکن است
"LatexMk" یا "latexmkrc"
نام داشته
باشد،
جستجو
میکند.
دایرکتوریها
به ترتیب
زیر جستجو
میشوند و
latexmk از
نخستین
فایلی که
بیابد (در
صورت وجود)
استفاده
میکند:
"/etc"،
"/opt/local/share/latexmk"،
"/usr/local/share/latexmk"،
"/usr/local/lib/latexmk".
در یک سیستم
MS-Windows تنها در
مسیر "C:\latexmk"
جستجو
میکند.
در یک سیستم
cygwin (یعنی یک
سیستم MS-Windows که
در آن Perl
نسخهٔ
مربوط به cygwin
است)، latexmk در
دایرکتوریهای
زیر جستجو
میکند:
"/cygdrive/c/latexmk"،
"/etc"،
"/opt/local/share/latexmk"،
"/usr/local/share/latexmk"،
"/usr/local/lib/latexmk".
اگر متغیر محیطی LATEXMKRCSYS تنظیم شده باشد، مقدار آن به جای هر یک از موارد فوق به عنوان نام فایل RC سیستمی استفاده میشود.
۲) فایل RC کاربر، در صورت وجود. این فایل میتواند در یکی از دو مکان زیر باشد. مکان سنتی ".latexmkrc" در پوشهٔ خانگی کاربر است. امکان دیگر "latexmk/latexmkrc" در پوشهٔ پیکربندی خانگی XDG کاربر است. فایل واقعی خواندهشده، نخستین فایلی است که از میان "$XDG_CONFIG_HOME/latexmk/latexmkrc" یا "$HOME/.latexmkrc" موجود باشد. (برای جزئیات بیشتر درباره مشخصات دایرکتوری پایهای XDG به https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html مراجعه کنید.)
در اینجا $HOME پوشهٔ خانگی کاربر است. [Latexmk پوشهٔ خانگی کاربر را به این صورت تعیین میکند: اگر متغیر محیطی HOME وجود داشته باشد، مقدار آن استفاده میشود، که معمولاً در سیستمهای شبهیونیکس (از جمله لینوکس و OS-X) چنین است. در غیر این صورت متغیر محیطی USERPROFILE در صورت وجود استفاده میشود، که معمولاً در سیستمهای MS-Windows چنین است. در غیر این صورت یک رشتهٔ خالی به جای $HOME استفاده میشود که در این حالت latexmk در آن به دنبال فایل RC نمیگردد.]
$XDG_CONFIG_HOME مقدار متغیر محیطی XDG_CONFIG_HOME در صورت وجود است. اگر این متغیر محیطی وجود نداشته باشد، اما $HOME خالی نباشد، آنگاه $XDG_CONFIG_HOME روی مقدار پیشفرض $HOME/.config تنظیم میشود. در غیر این صورت $XDG_CONFIG_HOME خالی خواهد بود و latexmk در زیر آن به دنبال فایل RC نمیگردد.
۳) فایل RC در دایرکتوری کاری جاری. این فایل میتواند "latexmkrc" یا ".latexmkrc" نامیده شود، و نخستین موردی که یافت شود، در صورت وجود، استفاده میشود.
۴) هر فایل (یا فایلهای) RC مشخصشده در خط فرمان با گزینهٔ -r.
هر فایل RC توالیای از دستورات Perl است. طبیعتاً، یک کاربر میتواند از این قابلیت به روشهای خلاقانه استفاده کند. اما برای بیشتر اهداف، صرفاً از توالیای از گزارههای انتساب استفاده میشود که برخی از تنظیمات داخلی Latexmk را بازنویسی میکنند. موارد ساده بدون نیاز به دانش زبان Perl و تنها با استفاده از مثالهای موجود در این سند به عنوان الگو قابل انجام هستند. خطوط توضیحات با نویسهٔ «#» مشخص میشوند.
توجه داشته باشید که گزینههای خط فرمان به ترتیبی که نوشته شدهاند اجرا میشوند؛ بنابراین هر فایل RC مشخصشده در خط فرمان با گزینهٔ -r میتواند گزینههای قبلی را بازنویسی کند اما خود میتواند توسط گزینههای بعدی در خط فرمان بازنویسی شود. همچنین گزینهٔ -e وجود دارد که امکان تعیین کد راهاندازی را در خط فرمان latexmk فراهم میکند.
برای مثالهای احتمالی کد مورد استفاده در یک فایل RC، دایرکتوری example_rcfiles را در توزیع latexmk ببینید (برای نمونه در http://mirror.ctan.org/support/latexmk/example_rcfiles). .SH "نحوه تنظیم متغیرها در فایلهای مقداردهی اولیه (HOW TO SET VARIABLES IN INITIALIZATION FILES)"
متغیرهای مهمی که میتوان پیکربندی کرد در بخش «List of configuration variables usable in initialization files» شرح داده شدهاند. (برای آشنایی با فایلهایی که پیکربندیها در آنها انجام میشود، بخش پیشین «Configuration/Initialization (rc) Files» را ببینید.) نحوِ (سینتکس) مقداردهی این متغیرها به شکلهای زیر است:
$bibtex = 'bibtex %O %S';
برای تنظیم یک متغیر رشتهای،
$preview_mode = 1;
برای تنظیم یک متغیر عددی، و
@default_files = ('paper', 'paper1');
برای تنظیم آرایهای از رشتهها. افزودن یک مورد به یک متغیر آرایهای به شیوه زیر امکانپذیر است:
push @default_files, 'paper2';
توجه داشته باشید که متغیرهای ساده «اسکالر» (scalar) نامهایی دارند که با نویسه $ شروع میشوند و متغیرهای آرایهای نامهایی دارند که با نویسه @ آغاز میگردند. هر عبارت با یک سمیکالن (;) پایان مییابد.
رشتهها باید درون نقلقول تکی (single quotes) قرار گیرند. (میتوانید مانند بسیاری از زبانهای برنامهنویسی از نقلقول دوتایی (double quotes) استفاده کنید، اما در این حالت زبان برنامهنویسی Perl قواعد خاصی را برای جایگذاری متغیرها در رشتهها (variable interpolation) اعمال میکند. افرادی که به Perl تسلط ندارند ترجیح میدهند از این پیچیدگیها پرهیز کنند.)
میتوانید کارهای بسیار پیچیدهتری انجام دهید، اما برای این منظور باید به راهنمای زبان برنامهنویسی Perl مراجعه کنید.
قالب مشخصات دستور (FORMAT OF COMMAND SPECIFICATIONS)
برخی از متغیرها دستوراتی را تعیین میکنند که latexmk برای انجام کارهایش به کار میبرد؛ مثلاً برای تولید یک فایل .dvi از یک فایل .tex یا برای مشاهده یک فایل postscript. این بخش برخی از ویژگیهای مهم نحوه مشخص کردن این دستورات را توضیح میدهد. (توجه داشته باشید که برخی از قابلیتهای ذکرشده در اینجا برای متغیر $kpsewhich اعمال نمیشوند؛ مستندات آن را ببینید.)
جانگهدارها (Placeholders): فرض کنید میخواستید latexmk به جای دستور معمول latex از دستور elatex استفاده کند، و علاوه بر این میخواستید گزینه «--shell-escape» را به آن بدهید. میتوانید این کار را با تنظیم زیر انجام دهید:
$latex = 'elatex --shell-escape %O %S';
دو موردی که با نویسه % شروع میشوند جانگهدار هستند. این موارد پیش از اجرای دستور با مقادیر مناسب جایگزین میشوند. بنابراین %S با فایل منبعی که elatex روی آن اعمال خواهد شد، و %O با هر گزینهای که latexmk تصمیم گرفته برای این دستور استفاده کند، جایگزین میشود. (برای مثال، اگر در فراخوانی latexmk از گزینه -silent استفاده کرده باشید، موجب جایگزینی %O با «-interaction=batchmode» میشود.)
جانگهدارندههای موجود عبارتند از:
- %A
- نام پایه (basename) فایل اصلی tex. برخلاف %R، این مقدار تحت تأثیر تعیین نام کار (jobname) از طریق گزینه -jobname یا متغیر پیکربندی $jobname قرار نمیگیرد.
- %B
- پایه نام فایل برای دستور فعلی. برای مثال، اگر یک فایل postscript به نام document.ps از فایل dvi به نام document.dvi ساخته میشود، نام پایه document است.
- %D
- فایل مقصد (destination) (برای مثال، نام فایل postscript هنگام تبدیل یک فایل dvi به postscript).
- %O
- گزینهها (options).
- %P
- اگر متغیر
$pre_tex_code خالی
نباشد،
آنگاه %P با
محتویات
$pre_tex_code و به
دنبال آن
\input{SOURCE}
جایگزین
میشود، که
در آن SOURCE
نشاندهنده
نام فایل
منبع است.
نقلقولگذاری
مناسب نیز
اعمال
میشود. این
قابلیت
امکان
میدهد کد TeX
به یکی از
موتورهای
*latex فرستاده
شود تا پیش
از خواندن
فایل منبع
اجرا گردد.
اگر متغیر $pre_tex_code رشتهای خالی باشد، آنگاه %P معادل %S خواهد بود.
- %R
- نام فایل
ریشه (root filename).
بهطور پیشفرض این مقدار همان نام پایه فایل اصلی tex است. با این حال این مقدار میتواند با استفاده از گزینه -jobname یا متغیر پیکربندی $jobname تغییر یابد. در این صورت، این مقدار نام پایه برای فایلهایی نظیر فایلهای .aux و .log حاصل از اجرای *latex و همچنین فایلهای اصلی .dvi، .pdf، .ps و/یا .xdvi خواهد بود.
- %S
- فایل منبع (source) (برای مثال، نام فایل dvi هنگام تبدیل یک فایل .dvi به ps).
- %T
- نام فایل اصلی tex.
- %U
- اگر متغیر $pre_tex_code خالی نباشد، مقدار آن (با نقلقولگذاری مناسب) جایگزین %U میشود. در غیر این صورت با یک رشته تهی جایگزین میگردد.
- %Y
- نام دایرکتوری برای فایلهای خروجی کمکی (متغیر پیکربندی $aux_dir را ببینید). اگر $aux_dir خالی نباشد و به یک نویسه مناسب ختم نشود، نویسه جداساز دایرکتوری ('/') به آن الحاق میشود؛ نویسههای مناسب مواردی هستند که در UNIX و MS-Windows معتبرند، یعنی ':'، '/' و '\'. توجه داشته باشید که اگر پس از مقداردهی اولیه، $out_dir تنظیم شده باشد اما $aux_dir تنظیم نشده باشد (یعنی خالی باشد)، آنگاه latexmk مقدار $aux_dir را برابر با مقدار $out_dir قرار میدهد.
- %Z
- نام دایرکتوری برای فایلهای خروجی (متغیر پیکربندی $out_dir را ببینید). اگر $out_dir خالی نباشد و به یک نویسه مناسب ختم نشود، نویسه جداساز دایرکتوری ('/') به آن الحاق میشود؛ نویسههای مناسب مواردی هستند که در UNIX و MS-Windows معتبرند، یعنی ':'، '/' و '\'.
اگر به هر دلیلی در رشته خود به نویسه لفظی % نیاز دارید که مشمول قواعد بالا نشود، از «%%» استفاده کنید.
نقلقولگذاری مناسب بر روی جایگزینیهای نام فایل اعمال خواهد شد، بنابراین حتی اگر نام فایلهای شما حاوی فاصله باشد، نباید خودتان نقلقول اضافه کنید. (اما اگر نام فایلهای TeX شما شامل فاصله است، توجه داشته باشید که برخی از نسخههای قدیمیتر برنامه TeX نمیتوانند نامهای فایل حاوی فاصله را بهدرستی پردازش کنند.) در صورتی که نقلقولگذاری latexmk روی سیستم شما بهدرستی کار نمیکند، میتوانید آن را غیرفعال کنید -- مستندات متغیر $quote_filenames را ببینید.
برای آگاهی از آنچه معمولاً مناسبترین شیوه استفاده است، مقادیر پیشفرض را در بخش «List of configuration variables usable in initialization files» ببینید.
اگر در مشخصات یک دستور از قرار دادن هرگونه جانگهدار صرفنظر کنید، latexmk مقادیری را که به نظر نویسندهاش پیشفرضهای مناسبی هستند اعمال خواهد کرد. این کار سازگاری با فایلهای پیکربندی نسخههای قبلی latexmk را فراهم میکند که از جانگهدارها استفاده نمیکردند.
«جدا کردن» دستور ("Detaching" a command): بهطور معمول هنگامی که latexmk دستوری را اجرا میکند، منتظر میماند تا اجرای دستور به پایان برسد. مسلماً این رفتار برای دستوراتی نظیر latex مناسب است. اما برای پیشنمایشگرها، دستور معمولاً باید بهصورت جداشده (detached) اجرا شود، به طوری که latexmk پیشنمایشگر را اجرا کرده و سپس به کار بعدی خود بازگردد (یا اگر کار دیگری برای انجام دادن نباشد، خارج شود). برای دستیابی به این اثرِ جدا کردن یک دستور، لازم است پیش از نام دستور عبارت "start " را قرار دهید، مانند:
$dvi_previewer = 'start xdvi %O %S';
این عبارت به هر آنچه که برای سیستمعامل شما مناسب باشد ترجمه خواهد شد.
نکات: (۱) در برخی شرایط، latexmk همیشه یک دستور را بهصورت جداشده اجرا میکند. این وضعیت برای پیشنمایشگر در حالت پیشنمایش پیوسته (preview continuous mode) صادق است، زیرا در غیر این صورت پیشنمایش پیوسته معنایی ندارد. (۲) این امر مانع از امکان اجرای دستوری به نام start میشود. (۳) اگر واژه start بیش از یک بار در ابتدای رشته دستور بیاید، معادل با حضور تنها یکی از آن خواهد بود. (۴) در cygwin پیچیدگیهایی بروز میکند، زیرا cygwin در اصل ادغام پیچیدهای از UNIX و MS-Windows است. برای نحوه رفع این مشکل توسط من، کد منبع را ببینید.
نامهای دستور حاوی فاصله (Command names containing spaces): در MS-Windows معمول است که نام یک دستور شامل فاصله باشد، زیرا نرمافزارها اغلب در یک زیردایرکتوری از "C:\Program Files" نصب میشوند. چنین نامهای دستوری باید درون نقلقول دوتایی قرار گیرند، مانند:
$lpr_pdf = '"c:/Program Files/Ghostgum/gsview/gsview32.exe" /p %S';
$pdf_previewer = 'start "c:/Program
Files/SumatraPDF/SumatraPDF.exe" %O %S';
$pdf_previewer = 'start "c:/Program Files/SumatraPDF
(x86)/SumatraPDF.exe" %O %S';
(نکتهای درباره مثال بالا: در MS-Windows تقریباً در تمام شرایط اسلشهای رو به جلو در نام فایل معادل بکاسلش هستند، به شرطی که نام فایل درون نقلقول دوتایی قرار داشته باشد. در مثالهایی مانند نمونه بالا استفاده از اسلش رو به جلو آسانتر است، زیرا در این صورت نیازی به نگرانی در مورد قواعد کار با اسلشهای رو به جلو در رشتههای زبان Perl نخواهد بود.)
نامهای دستور در Cygwin (Command names under Cygwin): اگر latexmk توسط Perl در Cygwin اجرا میشود، بهطور خاص اطمینان حاصل کنید که نامهای مسیر در دستورات به جای بکاسلشهای معمول برای جداسازی اجزای مسیر، حاوی اسلش رو به جلو باشند. مثالهای بالا را ببینید. بکاسلشها اغلب توسط شل یونیکس که توسط Perl در Cygwin برای اجرای دستورات خارجی استفاده میشود، به نادرستی تفسیر میگردند. اسلشهای رو به جلو دچار این مشکل نمیشوند و (در صورت قرار گرفتن در نقلقول، مانند بالا) برای MS-Windows نیز کاملاً معتبرند.
استفاده
از
وابستگیهای
فایل در MS-Windows (Using
MS-Windows file associations): یک
ترفند مفید
در
نسخههای
نوین MS-Windows
(مانند WinXP)
استفاده از
خود دستور 'start'
به تنهایی
است:.PP
$dvi_previewer = 'start %S';
در MS-Windows، این دستور باعث میشود هر برنامهای که سیستم به فایلهای dvi مرتبط کرده است اجرا شود. (همین امر برای یک نمایشگر postscript و یک نمایشگر pdf نیز صدق میکند.) اما توجه داشته باشید که اگر نمایشگر پیشفرض pdf در سیستم شما acroread باشد، این ترفند همیشه برای پیشنمایشگر pdf مناسب نیست. همانطور که در جای دیگر توضیح داده شده است، acroread تحت MS-Windows با latex و latexmk بهخوبی کار نمیکند، زیرا acroread فایل pdf را قفل میکند.
استفاده نکردن از یک دستور خاص: اگر قرار نیست دستوری اجرا شود، نام دستور NONE استفاده میشود، مانند
$lpr = 'NONE lpr';
این معمولاً زمانی استفاده میشود که دستور مناسبی در سیستم شما وجود نداشته باشد. رشته پس از "NONE" در عمل یک توضیح (کامنت) است.
گزینههای دستورات: تنظیم نام یک دستور نهتنها میتواند برای تغییر نام دستور فراخوانیشده، بلکه برای افزودن گزینهها به دستور نیز به کار رود. فرض کنید میخواهید latexmk از latex با source specials فعال استفاده کند. در این صورت میتوانید از خط زیر در یک فایل مقداردهی اولیه استفاده کنید:
$latex = 'latex --src-specials %O %S';
اجرای یک زیرروال بهجای دستور خارجی: از مشخصهای استفاده کنید که با "internal" شروع میشود، مانند
$latex = 'internal mylatex %O %S';
sub mylatex {
my @args = @_;
# Possible preprocessing here
return system 'latex', @args;
}
برای برخی از قابلیتهای خاصتر که در این حالت قابل دسترس میشوند، به بخش "Advanced configuration: Some extra resources and advanced tricks" مراجعه کنید. همچنین به برخی از مثالهای موجود در دایرکتوری example_rcfiles در توزیع latexmk نگاهی بیندازید.
ترفندهای پیشرفته: بهطور معمول برای دستوراتی که توسط latexmk فراخوانی میشوند، یک دستور منفرد مشخص میشود. طبیعتاً، اگر در شرایط خاص خود پردازش اضافی پیچیدهای دارید که باید انجام دهید، میتوانید برای انجام پردازش یک اسکریپت (یا batch file) بنویسید و سپس latexmk را پیکربندی کنید تا بهجای برنامه استاندارد از اسکریپت شما استفاده کند.
شما همچنین میتوانید بهجای اسکریپت از یک زیرروال Perl استفاده کنید -- به بالا مراجعه کنید. این روش عموماً منعطفترین و قابلحملترین راهحل است.
همچنین پیکربندی latexmk برای اجرای چندین دستور امکانپذیر است. برای مثال، اگر هنگام اجرای pdflatex جهت تولید یک فایل pdf از یک فایل tex، نیاز دارید پس از pdflatex برنامه دیگری را برای انجام برخی پردازشهای اضافی اجرا کنید، میتوانید چیزی شبیه به این را به کار ببرید:
$pdflatex = 'pdflatex --shell-escape %O %S; pst2pdf_for_latexmk %B';
این تعریف فرض میکند که شما از یک سیستم شبه یونیکس (شامل Linux و OS-X) استفاده میکنید، بهطوریکه دو دستور موردنظر برای اجرا با نقطه-ویرگول (semicolon) در وسط رشته از هم جدا شدهاند.
اگر از MS-Windows استفاده میکنید، خط بالا را با این جایگزین خواهید کرد:
$pdflatex = 'cmd /c pdflatex --shell-escape %O %S'
. '&& pst2pdf_for_latexmk %B';
در اینجا، جداکننده دستور در یونیکس (;) با && جایگزین شده است. علاوه بر این، این مشکل وجود دارد که برخی نسخههای Perl در MS-Windows از جداکننده دستور پیروی نمیکنند؛ این مشکل با فراخوانی صریح پردازنده خط فرمان MS-Windows یعنی cmd.exe برطرف میشود.
فهرست متغیرهای پیکربندی قابل استفاده در فایلهای مقداردهی اولیه (LIST OF CONFIGURATION VARIABLES USABLE IN INITIALIZATION FILES)
در این بخش متغیرهایی مشخص شدهاند که مقادیر آنها برای پیکربندی latexmk قابل تنظیم است. (برای مشاهده فایلهایی که پیکربندی در آنها انجام میشود، به بخش قبلی "Configuration/Initialization (rc) Files" مراجعه کنید.)
مقادیر پیشفرض درون براکت مشخص شدهاند. توجه داشته باشید برای متغیرهایی که ماهیت بولی (boolean) دارند و مشخص میکنند که آیا latexmk به شیوه خاصی عمل کند یا خیر، یک مقدار غیر صفر (معمولاً 1) نشاندهنده مقدار درست (true) است، یعنی آن رفتار رخ میدهد، در حالی که مقدار صفر نشاندهنده مقدار نادرست (false) است، یعنی رفتار رخ نمیدهد.
- $allow_subdir_creation [1]
-
اقدامی را مشخص میکند که باید زمانی انجام شود که پیام(های) موجود در فایل .log نشاندهنده شکست تلاش کامپایل *latex برای نوشتن یک فایل در یک زیردایرکتوری از دایرکتوری خروجی به دلیل عدم وجود آن زیردایرکتوری باشد.
اگر مقدار $allow_subdir_creation برابر 0 باشد، هیچ اقدامی صورت نمیگیرد. اگر 1 باشد، زیردایرکتوری مناسب ایجاد شده و اجرای مجدد *latex آغاز میشود، اما تنها در صورتی که فایل در حال نوشتن یک فایل .aux باشد. (این حالت برای مثال زمانی رخ میدهد که سند با دستور \include فایلی را از یک زیردایرکتوری از دایرکتوری سند فراخوانی کند.) اگر مقدار $allow_subdir_creation برابر 2 باشد، ایجاد زیردایرکتوری صرفنظر از نوع فایل مورد نظر انجام میشود.
- $allow_switch [1]
-
این متغیر کنترل میکند که چه اتفاقی بیفتد وقتی پسوند خروجیِ latex، pdflatex، lualatex یا xelatex با آنچه انتظار میرود متفاوت باشد. (پسوندهای ممکن .dvi، .pdf، .xdv هستند.) این حالت میتواند با استفاده از ماکروی \pdfoutput در سندی که تحت latex یا pdflatex کامپایل شده است، یا با استفاده از ماکروی \outputmode تحت lualatex رخ دهد. همچنین ممکن است بهخاطر برخی پیکربندیهای نادرست اتفاق بیفتد.
در چنین حالتی، latexmk میتواند شبکه قوانین خود را بهطور مناسب تنظیم کند. این تنظیم در صورتی انجام میشود که $allow_switch فعال باشد و هیچ درخواستی برای فایل dvi یا ps ثبت نشده باشد.
به بخش ALLOWING FOR CHANGE OF OUTPUT EXTENSION مراجعه کنید.
- $always_view_file_via_temporary [0]
- مشخص
میکند که
آیا
فایلهای .ps
و .pdf در ابتدا
باید در یک
دایرکتوری
موقت ساخته
شوند و سپس
به مکان
نهایی
منتقل
گردند یا
خیر. (این
مورد برای
عملیاتهای
dvips، dvipdf و ps2pdf، و
عملگرهای
پالایش روی
فایلهای .dvi
و .ps اعمال
میشود.
متأسفانه
برای pdflatex
اعمال
نمیشود،
زیرا pdflatex هیچ
روشی برای
تعیین نام
انتخابی
فایل خروجی
فراهم
نمیکند.)
این استفاده از یک فایل موقت مشکلی را حل میکند که ساخت این فایلها ممکن است زمان قابلتوجهی طول بکشد. اگر یک نمایشگر (بهویژه gv) متوجه تغییر فایل شود، ممکن است فایل جدید را قبل از اینکه برنامه نویسنده فایل کار خود را به پایان برساند بخواند، که میتواند اختلال شدیدی ایجاد کند.
برای تنظیمی که تنها در صورت استفاده از حالت پیشنمایش مداوم (گزینه -pvc) اعمال میشود، به متغیر $pvc_view_file_via_temporary مراجعه کنید. برای تنظیم دایرکتوریای که فایل موقت در آن ایجاد میشود، به $tmpdir مراجعه کنید.
- $analyze_input_log_always [1]
-
پس از اجرای latex (و غیره)، همیشه فایل .log را برای یافتن فایلهای ورودی در ساختارهای <...> و (...) تحلیل میکند. در غیر این صورت، این تحلیل تنها زمانی انجام میشود که فایل fls وجود نداشته باشد یا قدیمی باشد.
در شرایط عادی، دادههای موجود در فایل fls قابل اعتماد هستند و آزمودن فایل log موارد مثبت کاذب زیادی در بر دارد؛ معمولاً بهتر است $analyze_input_log_always روی صفر تنظیم شود. اما تحلیل فایل log حداقل در وضعیت زیر لازم است: زمانی که کاربر نیاز دارد به latexmk بقبولاند که یک فایل خاص، یک فایل منبع است و latexmk در حالت عادی آن را پیدا نمیکند. در این حالت کاربر میتواند کدی بنویسد که باعث شود خطی حاوی (...) در فایل log نوشته شود. یک مورد مهم برای lualatex است که همیشه برای فایلهای ورودی lua خطوطی در فایل .fls تولید نمیکند. (وضعیت در lualatex بهشدت به نسخه وابسته است، مثلاً تغییر بزرگی بین TeXLive 2016 و TeXLive 2017 رخ داد.)
برای حفظ سازگاری با نسخههای پیشین latexmk، حالت پیشفرض این است که $analyze_input_log_always روی 1 تنظیم شود.
- $auto_rc_use [1]
- آیا
فایلهای
استاندارد
مقداردهی
اولیه (rc)
بهطور
خودکار
خوانده
شوند یا
خیر، که
عبارتند از
فایل RC
سیستم،
فایل RC
کاربر، و
فایل RC در
دایرکتوری
فعلی.
میتوان از
گزینه خط
فرمان -norc
برای
غیرفعال
کردن این
تنظیم
استفاده
کرد. هر
فایل RC نیز
میتواند
این تنظیم
را غیرفعال
کند، یعنی
میتواند
$auto_rc_use را روی
صفر قرار
دهد تا از
خواندن
خودکار
فایلهای RC
بعدی
جلوگیری
شود.
این متغیر بر خواندن فایلهای RC که در خط فرمان توسط گزینه -r مشخص شدهاند تأثیری ندارد.
- $aux_dir [""]
- دایرکتوری
aux؛ یعنی
دایرکتوریای
که
فایلهای
کمکی (aux، log و
غیره) قرار
است با
اجرای *latex در
آن نوشته
شوند.
اگر این متغیر تنظیم نشده باشد اما $out_dir تنظیم شده باشد، latexmk دایرکتوری aux را برابر با دایرکتوری خروجی در نظر میگیرد که دایرکتوری محل نوشتن فایلهای خروجی نهایی است.
اگر هیچیک از متغیرها تنظیم نشده باشند، دایرکتوری فعلی در زمان فراخوانی *latex برای هر دو دایرکتوری aux و خروجی استفاده میشود.
اگر دایرکتوریهای aux و خروجی متمایز باشند، دایرکتوری aux شامل تمام فایلهای تولیدشده خواهد بود، به استثنای «فایلهای خروجی نهایی» که به عنوان فایلهای .dvi، .ps، .pdf، .synctex و .synctex.gz تعریف میشوند.
برای جزئیات بیشتر به بخش AUXILIARY AND OUTPUT DIRECTORIES مراجعه کنید.
- $aux_out_dir_report [0]
- اگر این
متغیر روی 1
تنظیم شود،
پیش از
پردازش هر
فایل .tex
اصلی،
تنظیمات
دایرکتوریهای
aux و خروجی را
پس از
نرمالسازی
از روی
مقادیر
تعیینشده
در طول
مقداردهی
اولیه
فهرست
میکند.
این گزارش یادآوری میکند که فایلهای تولیدشده را در کجا جستجو کنید.
این گزارش به ازای هر فایل .tex اصلی انجام میشود، زیرا احتمال تغییر دایرکتوری برای هر فایل وجود دارد (هنگامی که گزینه -cd استفاده میشود). در سادهترین حالتها، نام دایرکتوریها همان چیزی است که در ابتدا مشخص شده است. اما بهطور کلی برخی پاکسازیها/نرمالسازیها انجام میشود؛ این امر به کارایی کمک کرده و خروجی روی صفحه را مرتب میکند.
اگر این متغیر روی 2 تنظیم شود، پس از گزارش تنظیمات دایرکتوریهای aux و خروجی، بهجای ادامه پردازش فایلهای tex، اجرا متوقف میشود. این تنظیم عمدتاً برای اشکالزدایی مشکلات پیکربندی استفاده میشود. به گزینه -dir-report-only مراجعه کنید..TP $bad_warning_is_error [0] تعیین میکند که آیا هشدارهای نامناسب گزارششده توسط *latex در فایل لاگ به عنوان خطا در نظر گرفته شوند یا خیر. مشخصات پیامهای هشدار در @bad_warnings قرار دارد.
- @bad_warnings
- آرایهای
از
عبارتهای
باقاعده (regular
expressions) که
پیامهایی
را در فایل
لاگ مشخص
میکند که
رسماً توسط
*latex به عنوان
هشدار و نه
خطا در نظر
گرفته
میشوند،
اما ممکن
است کاربر
بخواهد
آنها را به
عنوان خطا
تلقی کند:
$bad_warning_is_error را
ببینید.
در حال حاضر، مجموعه پیشفرض این هشدارها مواردی هستند که به وقوع \end درون ساختارها (constructs) مربوط میشوند.
- $banner [0]
- اگر غیرصفر
باشد،
هنگام
تبدیل فایل
dvi به postscript، پیام
بنر در
سرتاسر هر
صفحه چاپ
میشود.
بدون تغییر
دادن متغیر
$banner_message، این
کار معادل
با مشخص
کردن گزینه
-d است.
توجه داشته باشید که اگر $banner غیرصفر باشد، $postscript_mode فرض میشود و فایل postscript همیشه ایجاد میگردد، حتی اگر از فایل dvi جدیدتر باشد.
- $banner_intensity [0.95]
- معادل با گزینه -bi؛ این یک عدد اعشاری بین ۰ و ۱ است که میزان تیرگی چاپ پیام بنر را مشخص میکند. ۰ سیاه و ۱ سفید است. اگر کارتریج تونر شما بیش از حد خالی نباشد، مقدار پیشفرض کاملاً مناسب است.
- $banner_message ["DRAFT"]
- پیام بنری که هنگام تبدیل فایل dvi به postscript در سرتاسر هر صفحه چاپ میشود. این معادل با گزینه -bm است.
- $banner_scale [220.0]
- یک عدد اعشاری که بزرگی چاپ پیام بنر را مشخص میکند. برای به دست آوردن مقیاس مناسب برای پیام خود، آزمون و خطا لازم است؛ به عنوان یک قاعده سرانگشتی، مقیاس باید تقریباً برابر با ۱۱۰۰ تقسیم بر تعداد نویسههای پیام باشد. مقدار پیشفرض دقیقاً برای پیامهای ۵ نویسهای مناسب است. این معادل با گزینه -bs است.
- @BIBINPUTS
- این یک
متغیر
آرایهای
است که
اکنون تا حد
زیادی
منسوخ شده و
دایرکتوریهایی
را مشخص
میکند که
latexmk باید در
آنها به
دنبال
فایلهای .bib
بگردد. به
طور
پیشفرض از
متغیر
محیطی BIBINPUTS
سیستمعامل
مقداردهی
میشود. اگر
آن متغیر
محیطی
تنظیم نشده
باشد، یک
لیست
تکعنصری
متشکل از
دایرکتوری
جاری در نظر
گرفته
میشود.
قالب نام
دایرکتوریها
البته به
سیستمعامل
شما بستگی
دارد.
نمونههایی
از تنظیم
این متغیر
عبارتند از:
@BIBINPUTS = ( ".", "C:\\bibfiles" );
@BIBINPUTS = ( ".", "\\server\bibfiles" );
@BIBINPUTS = ( ".", "C:/bibfiles" );
@BIBINPUTS = ( ".", "//server/bibfiles" );
@BIBINPUTS = ( ".", "/usr/local/texmf/bibtex/bib" );توجه داشته باشید که در MS Windows، هم از اسلش «/» و هم از بکاسلش «\» میتوان برای جداسازی بخشهای مسیر استفاده کرد، بنابراین دو مثال اول و دو مثال دوم با یکدیگر معادل هستند. برای جلوگیری از تداخل با قواعد نگارش رشتهها در Perl، هر بکاسلش باید دو بار تکرار شود. به طور کلی، سادهترین روش این است که همیشه به جای بکاسلش از اسلش استفاده کنید.
نکته مهم: این متغیر در نسخه فعلی latexmk تا حد زیادی منسوخ شده است، زیرا اکنون از روش بهتری برای جستجوی فایلها با استفاده از دستور kpsewhich استفاده میشود. با این حال، اگر سیستم شما غیرمعمول است و دستور kpsewhich را ندارد، ممکن است نیاز به تنظیم متغیر @BIBINPUTS داشته باشید.
- $biber ["biber %O %S"]
- برنامه پردازش biber.
- $biber_silent_switch ["--onlylog"]
- سوئیچ(های) برنامه پردازش biber در زمانی که حالت بیصدا (silent) فعال است.
- $bibtex ["bibtex %O %S"]
- برنامه پردازش BibTeX.
- $bibtex_fudge [1]
- هنگام
استفاده از
bibtex، تعیین
میکند که
آیا قبل از
اجرای bibtex،
دایرکتوری
به $aux_dir تغییر
یابد یا
خیر.
دلیل نیاز به این امر به شرح زیر است:
الف. در نسخههای bibtex قبل از حدود ۲۰۱۹، اگر نام فایل ارائهشده به آن حاوی مؤلفه مسیر بود، باگی وجود داشت که bibtex فایلهای aux اضافی تولیدشده توسط دستور \include در TeX را پیدا نمیکرد.
ب. در تمام نسخههای نسبتاً جدید bibtex، ممکن است به دلایل امنیتی در موارد خاصی از مؤلفه مسیر نام فایل دادهشده به آن، bibtex از نوشتن فایلهای bbl و blg خود خودداری کند.
با این حال، موارد نادری نیز وجود دارد که روش تغییر دایرکتوری مانع از یافتن برخی فایلهای bib یا bst توسط bibtex میشود. در این صورت $bibtex_fudge باید روی 0 تنظیم شود.
- $bibtex_silent_switch ["-terse"]
- سوئیچ(های) برنامه پردازش BibTeX در زمانی که حالت بیصدا فعال است.
- $bibtex_use [1]
- شرایط
اجرای bibtex یا
biber را مشخص
میکند.
هنگامی که
latexmk از فایل
لاگ
درمییابد
که یک (یا
چند)
کتابنامه
تولیدشده
توسط bibtex/biber
استفاده
شده است،
میتواند
هر زمان که
برای
بازتولید
فایل(های) bbl
از
فایل(های)
پایگاه
داده منبع bib
لازم باشد،
bibtex یا biber را
اجرا کند.
اما گاهی
اوقات،
فایل(های) bib
در دسترس
نیستند
(مثلاً برای
سندی که از
یک بایگانی
خارجی
دریافت
شده)، اما
فایلهای bbl
همراه سند
ارائه
شدهاند. در
این حالت
استفاده از
bibtex یا biber
منجر به
بازنویسی و
از دست رفتن
نادرست
فایلهای
باارزش bbl
میشود.
متغیر $bibtex_use
این رفتار
را کنترل
میکند و
همچنین
تعیین
میکند که
آیا
فایلهای .bbl
در یک
عملیات
پاکسازی
حذف شوند یا
خیر.
مقادیر ممکن برای $bibtex_use عبارتند از:
0: هرگز از bibtex یا biber استفاده نکن؛ هرگز فایلهای .bbl را در پاکسازی حذف نکن.
1: تنها در صورتی از bibtex یا biber استفاده کن که فایل(های) bib وجود داشته باشند؛ هرگز فایلهای .bbl را در پاکسازی حذف نکن.
1.5: تنها در صورتی از bibtex یا biber استفاده کن که فایلهای bib وجود داشته باشند؛ فایلهای .bbl را به صورت مشروط در پاکسازی حذف کن (یعنی تنها زمانی حذفشان کن که همه فایلهای bib موجود باشند).
2: هر زمان که بهروزرسانی فایل(های) bbl لازم به نظر برسد، بدون بررسی وجود فایلهای bib، برنامه bibtex یا biber را اجرا کن؛ همیشه فایلهای .bbl را در پاکسازی حذف کن.نکته: هنگام استفاده از biber، اجرای مشروط آن میتواند مشکلساز باشد. از دیدگاه latexmk، مشکل این است که به دلیل نحوه کارکرد biber، شناخت کامل از فایلهای منبع آن تنها پس از اجرای biber حاصل میشود. در مقابل، برای bibtex، اطلاعات کامل درباره فایلهای bib مورداستفاده، پس از یک بار اجرای *latex از روی فایل(های) .aux به دست میآید. اما برای biber، اطلاعات متناظر تا حدی ناقص است؛ این اطلاعات دریافتی از فایل .bcf است که توسط بسته biblatex در حین اجرای *latex ایجاد میشود.
- $cleanup_includes_cusdep_generated [0]
- اگر غیرصفر باشد، مشخص میکند که عملیات پاکسازی، فایلهایی را که توسط وابستگیهای سفارشی (custom dependencies) تولید شدهاند نیز حذف کند. (هنگام انجام پاکسازی، مثلاً با استفاده از گزینه -C، وابستگیهای سفارشی همانهایی هستند که در فایل .fdb_latexmk از اجرای قبلی فهرست شدهاند.)
- $cleanup_includes_generated [0]
- اگر غیرصفر
باشد، مشخص
میکند که
پاکسازی
فایلهایی
را که در
فایل fls (یا در
صورت
نیافتن، در
فایل لاگ)
به عنوان
فایل
تولیدشده
شناسایی
شدهاند
نیز حذف
کند. این
گزینه
همچنین
فایلهای
ایجادشده
از این
فایلهای
تولیدشده
نسل اول را
نیز شامل
میشود.
این عملیات تا حدی خطرناک است و میتواند پیامدهای ناخواستهای داشته باشد، زیرا فایلهای قابل حذف از روی فایلی تعیین میشوند که توسط *latex ایجاد شده است و ممکن است حاوی اطلاعات نادرست باشد. بنابراین این متغیر به طور پیشفرض خاموش است و فایلهای قابل حذف تنها به مواردی محدود میشوند که صراحتاً توسط الگوهای پیکربندیشده در متغیرهای clean_ext، clean_full_ext و @generated_exts مشخص شدهاند. موارد استاندارد (مانند فایلهای .log) در مقدار اولیه latexmk برای آرایه @generated_exts تعریف شدهاند.
- $cleanup_mode [0]
- اگر غیرصفر
باشد، حالت
پاکسازی
را مشخص
میکند: ۱
برای
پاکسازی
کامل، ۲
برای
پاکسازی
به جز
فایلهای
.dvi، .ps و .pdf، و ۳
برای
پاکسازی
به جز
فایلهای dep
و aux. (همچنین
پاکسازی
اضافهای
طبق
متغیرهای
$clean_ext، $clean_full_ext و
@generated_exts انجام
میشود.)
این متغیر معادل با تعیین یکی از گزینههای -c یا -C است. اما نیازی به تنظیم این متغیر در یک فایل RC نیست.
- $clean_ext [""]
- پسوندهای
اضافی
فایلها
برای
پاکسازی
توسط latexmk در
هنگام
انتخاب هر
یک از
گزینههای
پاکسازی
(-c یا -C).
مقدار این
متغیر
رشتهای
حاوی
پسوندهایی
است که با
فاصله از هم
جدا
شدهاند.
همچنین میتوان با استفاده از جاینگهدار %R، مانند دستورات، الگوی عمومیتری از فایلهای قابل حذف را مشخص کرد و استفاده از نویسههای عام (wildcards) نیز امکانپذیر است. بنابراین قرار دادن:
$clean_ext = "out %R-blx.bib %R-figures*.log pythontex-files-%R/*";در یک فایل راهاندازی بدین معنا خواهد بود که هنگام تعیین عملیات پاکسازی، علاوه بر مجموعه استاندارد فایلها، فایلهایی با قالب FOO.out، FOO-blx.bib، FOO-figures*.log و pythontex-files-FOO/* نیز حذف میشوند، که در آنها FOO نام پایه (basename) فایل در حال پردازش است (مانند FOO.tex).
بیشتر فایلهای قابل حذف نسبت به دایرکتوری مشخصشده توسط $aux_dir سنجیده میشوند. توجه داشته باشید که اگر $out_dir تعیین شده باشد اما $aux_dir مقداردهی نشده باشد، latexmk در مرحله راهاندازی خود مقدار $aux_dir را برابر با $out_dir قرار میدهد. بنابراین وضعیت عادی این است که $aux_dir با $out_dir برابر باشد، که بر خلاف MiKTeX، تنها حالتی است که مستقیماً توسط TeXLive پشتیبانی میشود. توجه داشته باشید که حتی با TeXLive نیز latexmk اکنون از مقادیر متفاوت برای این دایرکتوریها پشتیبانی میکند -- توضیحات متغیر $emulate_aux را ببینید.
اگر $out_dir و $aux_dir متفاوت باشند، latexmk در واقع هر فایلی با نامهای مشخصشده را هم در $aux_dir و هم در $out_dir حذف میکند؛ چرا که تحت برخی شرایط خطا، ممکن است فایلها به جای $aux_dir در $out_dir قرار گرفته باشند. این کار وضعیت حذف فایلهای fls را نیز مدیریت میکند، زیرا این فایل در $out_dir ذخیره میشود.
نام فایلهای مشخصشده برای عملیات پاکسازی علاوه بر فایلهای معمولی میتواند به دایرکتوریها نیز اشاره داشته باشد. دایرکتوریها تنها در صورتی حذف میشوند که خالی باشند. یک نمونه کاربردی در pythontex است که فایلهایی را در یک دایرکتوری خاص ایجاد میکند. شما میتوانید با تنظیم زیر ترتیبی دهید که هم فایلها و هم خود دایرکتوری حذف شوند:
$clean_ext = "pythontex-files-%R/* pythontex-files-%R";همچنین متغیر (آرایهای) @generated_exts را ببینید. در گذشته، این متغیر کاربردهای معینی فراتر از $clean_ext داشت، اما امروزه هر دو یک هدف را برآورده میکنند. در واقع، پس از راهاندازی اولیه شامل پردازش گزینههای خط فرمان، latexmk به سادگی فهرست پسوندهای موجود در $clean_ext را به انتهای آرایه @generated_exts اضافه میکند..TP $clean_full_ext [""] پسوندهای اضافی فایلها برای پاکسازی توسط latexmk هنگامی که گزینهٔ -C انتخاب شده باشد؛ یعنی پسوندهای فایلهایی که باید هنگام پاکسازی فایلهای .dvi و غیره حذف شوند.
الگوهای عمومیتر نیز همانند $clean_ext مجاز هستند.
فایلهای مشخصشده برای حذف توسط $clean_full_ext، نسبت به دایرکتوری تعیینشده توسط $out_dir در نظر گرفته میشوند.
- $compiling_cmd [""], $failure_cmd [""], $warning_cmd [""], $success_cmd [""]
-
این متغیرها دستوراتی را مشخص میکنند که در نقاط معینی از کامپایل اجرا میشوند. یک انگیزه برای وجود آنها، فراهم کردن نشانههای بصری بسیار سودمند و راحت از وضعیت کامپایل است، حتی زمانی که پنجرهٔ دریافتکنندهٔ خروجی صفحهٔ کامپایل پنهان باشد. این قابلیت بهویژه در حالت پیشنمایش مداوم (preview-continuous) کاربرد دارد.
دستورها در نقاط زیر اجرا میشوند: $compiling_cmd در ابتدای کامپایل، $success_cmd در پایان یک کامپایل کاملاً موفق، $failure_cmd در پایان یک کامپایل ناموفق، و $warning_cmd در پایان یک کامپایل در غیر این صورت موفقیتآمیز که هشدارهایی دربارهٔ نقلقولها یا ارجاعات تعریفنشده یا ارجاعاتی با چند تعریف دارد. اگر هر یک از متغیرهای بالا تعریفنشده یا خالی باشد (وضعیت پیشفرض)، دستور متناظر اجرا نمیشود.
با این حال، هنگامی که $warning_cmd تنظیم نشده باشد، در صورت کامپایلی با هشدار دربارهٔ ارجاعات یا نقلقولها، اما بدون هیچ خطای دیگری، بسته به تنظیمات $warnings_as_errors یکی از متغیرهای $success_cmd یا $failure_cmd (در صورت تنظیم بودن) به کار میرود.
یک مثال از تنظیم سادهٔ این متغیرها به صورت زیر است:
$compiling_cmd = "xdotool search --name \"%D\" set_window --name \"%D compiling\"";
$success_cmd = "xdotool search --name \"%D\" set_window --name \"%D OK\"";
$warning_cmd = "xdotool search --name \"%D\" ".
"set_window --name \"%D CITE/REF ISSUE\"";
$failure_cmd = "xdotool search --name \"%D\" set_window --name \"%D FAILURE\"";این تنظیمات فرض میکنند که برنامهٔ xdotool نصب است، پیشنمایشگر از سیستم X-Window برای نمایش استفاده میکند، و عنوان پنجره همانند حالت عادی، حاوی نام فایل در حال نمایش است. هنگامی که دستورها اجرا میشوند، رشتهٔ جانگهدار %D با نام فایل مقصد، که همان فایل پیشنمایش است، جایگزین میشود. دستورهای فوق منجر به الحاق یک رشتهٔ مناسب به نام فایل در عنوان پنجره میشوند: " compiling"، " OK"، یا " FAILURE".
سایر جانگهدارندههایی که میتوانند استفاده شوند %S، %T، و %R هستند، که %S و %T معمولاً یکساناند. اینها میتوانند برای دستوری که عنوان پنجرهٔ ویرایش را تغییر میدهد مفید باشند. نشانهٔ بصری در عنوان پنجره میتواند مفید باشد، زیرا نیازی نیست کاربر برای آگاهی از وضعیت کامپایل مدام توجه خود را به پنجرهٔ کامپایل (که ممکن است پنهان باشد) معطوف کند.
وضعیتهای پیچیدهتر را میتوان با تعریف یک زیرروال Perl برای فراخوانی دستورهای لازم و استفاده از کلیدواژهٔ "internal" در تعاریف برای فراخوانی آن زیرروال، به بهترین نحو مدیریت کرد. (برای چگونگی انجام این کار، بخش "Format of Command Specifications" را ببینید.)
طبیعتاً تنظیمات بالا که برنامهٔ xdotool را فراخوانی میکنند، تنها زمانی قابل استفاده هستند که برای پنجره(های) مربوطه از سیستم X-Window استفاده شود. برای سایر موارد، باید بررسی کنید چه راهحلهای نرمافزاری دیگری وجود دارد.
- @cus_dep_list [()]
- فهرست وابستگیهای سفارشی -- بخش "Custom Dependencies" را ببینید.
- @default_excluded_files [()]
- هنگامی که
latexmk بدون
تعیین هیچ
فایلی در خط
فرمان
فراخوانی
شود،
بهطور
پیشفرض
تمام
فایلهای
با پسوند .tex
در
دایرکتوری
جاری را
پردازش
میکند.
(بهطور
کلی،
فایلهای
مشخصشده
در متغیر
@default_files را
پردازش
خواهد کرد.)
اما گاهی اوقات میخواهید فایلهای خاصی را از این فهرست پیشفرض مستثنی کنید. در این حالت میتوانید فایلهای مستثنیشده را در آرایهٔ @default_excluded_files مشخص نمایید. برای مثال اگر میخواستید تمام فایلهای .tex را به استثنای common.tex (که یک فایل مستقل LaTeX نیست بلکه فایلی است که توسط برخی یا تمام فایلهای دیگر فراخوانی میشود) پردازش کنید، میتوانید به شکل زیر عمل کنید:
@default_files = ("*.tex");
@default_excluded_files = ("common.tex");اگر تعداد متغیر یا زیادی از فایلها برای پردازش دارید، این روش شما را از نیاز به فهرست کردن باجزئیات آنها در @default_files و بهروزرسانی فهرست در هر بار تغییر مجموعهٔ فایلهای پردازشی بینیاز میکند.
نکات: ۱. این متغیر هیچ تاثیری ندارد مگر زمانی که هیچ فایلی در خط فرمان latexmk مشخص نشده باشد. ۲. الگوهای نویسهنما (wildcards) در @default_excluded_files مجاز هستند.
- @default_files [("*.tex")]
- فهرست
پیشفرض
فایلها
برای
پردازش.
اگر هیچ نام فایلی در خط فرمان مشخص نشده باشد، latexmk تمام فایلهای tex مشخصشده در متغیر @default_files را پردازش میکند، که بهطور پیشفرض روی تمام فایلهای tex با الگو ("*.tex") در دایرکتوری جاری تنظیم شده است. این یک سهولت است: کافی است latexmk را اجرا کنید و این برنامه مجموعهٔ مناسبی از فایلها را پردازش خواهد کرد. اما گاهی اوقات فقط میخواهید برخی از این فایلها پردازش شوند. در این حالت میتوانید با تنظیم @default_files در یک فایل پیکربندی و مقداردهی اولیه (مانند فایل "latexmkrc" در دایرکتوری جاری)، فایلهای مد نظر برای پردازش را فهرست کنید. سپس اگر هیچ فایلی در خط فرمان تعیین نشده باشد، فایلهایی که با تنظیم @default_files مشخص کردهاید پردازش میشوند.
سه مثال:
@default_files = ("paper_current");
@default_files = ("paper1", "paper2.tex");
@default_files = ("*.tex", "*.dtx");توجه داشته باشید که میتوان بیش از یک فایل را تعیین کرد و پسوند پیشفرض ".tex" است. استفاده از نویسهنماها مجاز است. پرانتزها به این دلیل هستند که @default_files یک متغیر آرایهای است، یعنی دنبالهای از مشخصات نام فایلها امکانپذیر است.
اگر میخواهید latexmk تمام فایلهای .tex را با چند استثنا پردازش کند، متغیر آرایهای @default_excluded_files را ببینید.
- $dependents_phony [0]
- اگر فهرستی از وابستگیها در خروجی تولید شود، این متغیر تعیین میکند که آیا برای هر فایل منبع یک هدف ساختگی (phony target) گنجانده شود یا خیر. اگر از فهرست وابستگیها در یک Makefile استفاده کنید، این قواعد ساختگی خطاهایی را که make در صورت حذف فایلهای سرایند (header) بدون بهروزرسانی هماهنگ در Makefile صادر میکند، دور میزنند.
- $dependents_list [0]
- آیا در پایان یک اجرا، فهرستی (یا فهرستهایی) از وابستگیها نمایش داده شود یا خیر.
- $deps_escape ["none"]
- این متغیر
تعیین
میکند از
کدام نوع
گریزدهی (escaping)
نویسههای
فاصله در
فهرستهای
وابستگی
استفاده
شود. مقادیر
ممکن
عبارتند از
"none"، "unix"، و
"nmake"، که به
ترتیب
متناظر با
عدم
گریزدهی،
گریزدهی با
"\" مناسب
برای make
استاندارد
Unix، و
گریزدهی با
"^" مناسب
برای nmake
متعلق به Microsoft
هستند.
در حال حاضر تنها نویسهای که گریز داده میشود فاصله است، چرا که بهویژه در نام فایلها و نام دایرکتوریها رایج است. نویسههای دیگری نیز وجود دارند که اگر قرار باشد فهرست وابستگیها عیناً توسط یک برنامهٔ make استفاده شود نیاز به گریزدهی دارند؛ اما آن نویسهها (مانند "$") معمولاً در صورت استفاده برای اسناد .tex باعث بروز مشکل میشوند. علاوه بر این، قواعد جزئی مربوط به اینکه کدام نویسهها باید گریز داده شوند به نسخهٔ make بستگی دارد.
- $deps_file ["-"]
- نام فایلی که در پایان اجرا، فهرست(های) وابستگی را در صورت فعال بودن $dependents_list دریافت میکند. اگر نام فایل "-" باشد، فهرست وابستگی به stdout (یعنی معمولاً صفحهٔ نمایش) هدایت میشود.
- $do_cd [0]
- آیا قبل از پردازش فایل منبع اصلی، دایرکتوری کاری به دایرکتوری تعیینشده برای آن فایل تغییر یابد یا خیر. رفتار پیشفرض عدم انجام این کار است، که دقیقاً همانند رفتار برنامههای *latex میباشد. این متغیر توسط گزینههای -cd و -cd- در خط فرمان latexmk تنظیم میشود.
- $dvi_filter [خالی]
- فیلتر فایل dvi که باید پس از تولید فایل جدید dvi و قبل از پردازشهای دیگر روی آن اجرا شود. معادل تعیین گزینهٔ -dF است.
- $dvilualatex ["dvilualatex %O %S"]
- خط فرمانی
را برای
فراخوانی
برنامهٔ dvilualatex
مشخص
میکند.
توجه داشته
باشید که
همانند
برنامههای
دیگر،
میتوانید
از این
متغیر نه
فقط برای
تغییر نام
برنامهٔ
استفادهشده،
بلکه برای
تعیین
گزینهها
به آن
برنامه نیز
استفاده
کنید. برای
مثال:
$dvilualatex = "dvilualatex --src-specials %O %S";
برای انجام تنظیم هماهنگ همهٔ متغیرهای $dvilualatex، $hilatex، $latex، $pdflatex، $lualatex، و $xelatex، بخش "Advanced Configuration" را ببینید.
- $dvi_mode [برای مقدار پیشفرض به پایین مراجعه کنید]
- اگر ۱ باشد،
نسخهٔ dvi سند
با استفاده
از latex تولید
میشود.
معادل
گزینهٔ -dvi.
اگر ۲ باشد، نسخهٔ dvi سند با استفاده از dvilualatex تولید میشود. معادل گزینهٔ -dvilua.
متغیر $dvi_mode بهطور پیشفرض 0 است، اما اگر درخواست صریحی برای انواع دیگر فایل (postscript، pdf) وجود نداشته باشد، آنگاه $dvi_mode روی 1 تنظیم خواهد شد. علاوه بر این، اگر درخواستی برای فایلی داده شود که فایل .dvi پیشنیاز آن است و $dvi_mode صفر باشد، آنگاه $dvi_mode روی 1 تنظیم میشود..TP $dvilualatex_silent_switch ["-interaction=batchmode"] سوییچ(های) برنامهٔ dvilualatex (مشخصشده در متغیر $dvilualatex) هنگامی که حالت بیصدا فعال است.
برای اطلاعات دیگر که به همان اندازه برای $dvilualatex_silent_switch نیز صدق میکند، جزئیات مربوط به $latex_silent_switch را ببینید.
- $dvi_previewer ["start xdvi %O %S" under UNIX]
- دستور
فراخوانی
یک
پیشنمایشگر
dvi. [تحت MS-Windows
پیشفرض "start"
است؛ سپس latexmk
ترتیبی
میدهد تا
از برنامهٔ
start در MS-Windows
استفاده
شود، که
موجب اجرای
هر دستوری
میشود که
سیستم با
فایلهای .dvi
مرتبط کرده
است.]
نکته مهم: به طور معمول تمایل خواهید داشت که پیشنمایشگر به صورت مستقل (detached) اجرا شود، تا latexmk پیش از ادامهٔ کار خود، منتظر پایان یافتن پیشنمایشگر نماند. بنابراین معمولاً باید پیشوند "start " را به ابتدای دستور بیفزایید، که به latexmk اعلام میکند خودش عمل جداسازی پیشنمایشگر را انجام دهد (با هر روشی که متناسب با سیستمعامل است). اما گاهی سپردن جداسازی به latexmk مناسب نیست (به دلایل مختلف غیربدیهی)، بنابراین در هر زمان که لازم باشد، باید عبارت "start " را خودتان قرار دهید.
- $dvi_previewer_landscape ["start xdvi %O %S"]
- دستور فراخوانی یک پیشنمایشگر dvi در حالت افقی (landscape). [تحت MS-Windows پیشفرض "start" است؛ سپس latexmk ترتیبی میدهد تا از برنامهٔ start در MS-Windows استفاده شود، که موجب اجرای هر دستوری میشود که سیستم با فایلهای .dvi مرتبط کرده است.]
- $dvipdf ["dvipdf -dALLOWPSTRANSPARENCY %O %S %D"]
- دستور برای
تبدیل فایل
.dvi به .pdf. یک
پیکربندی
مجدد
معمول،
استفاده از
دستور dvipdfm است
که نیاز به
آرگومانهایش
به ترتیبی
متفاوت
دارد:
$dvipdf = "dvipdfm %O -o %D %S";هشدار: اسکریپت پیشفرض dvipdf فایلهای pdf را با فونتهای نقشهبیتی تولید میکند که هنگام مشاهده با acroread ظاهر مناسبی ندارند. آن اسکریپت باید اصلاح شود تا گزینههای "-P pdf" را به dvips بدهد تا اطمینان حاصل شود که از فونتهای type 1 در فایل pdf استفاده میشود.
- $dvipdf_silent_switch ["-q"]
- سوییچ(های)
برنامهٔ dvipdf
هنگامی که
حالت
بیصدا
فعال است.
توجه: برنامهٔ استاندارد dvipdf بهطور بیصدا اجرا میشود، بنابراین افزودن سوییچ بیصدا هیچ تأثیری ندارد، اما در عمل بیضرر است. اما اگر از یک برنامهٔ جایگزین، برای مثال dvipdfmx استفاده شود، سوییچ بیصدا تأثیرگذار خواهد بود. تنظیم پیشفرض برای dvipdfm و dvipdfmx درست است.
- $dvips ["dvips %O -o %D %S"]
- برنامهای که به عنوان فیلتر برای تبدیل فایل .dvi به فایل .ps استفاده میشود. اگر قرار باشد pdf از pdf تولید شود، آنگاه مقدار متغیر $dvips_pdf_switch -- به زیر نگاه کنید -- در گزینههای جایگزینشده به جای "%O" گنجانده خواهد شد.
- $dvips_landscape ["dvips -tlandscape %O -o %D %S"]
- برنامهای که به عنوان فیلتر برای تبدیل یک فایل .dvi به فایل .ps در حالت افقی (landscape) استفاده میشود.
- $dvips_pdf_switch ["-P pdf"]
- سوییچ(های) برنامهٔ dvips هنگامی که قرار است فایل pdf از فایل .ps تولید شود.
- $dvips_silent_switch ["-q"]
- سوییچ(های) برنامهٔ dvips هنگامی که حالت بیصدا فعال است.
- $dvi_update_command [""]
- هنگامی که پیشنمایشگر dvi طوری تنظیم شده باشد که با اجرای یک دستور بهروزرسانی شود، این همان دستوری است که اجرا میشود. برای اطلاعات بیشتر، توضیحات متغیر $dvi_update_method را ببینید، و برای مثالی از وضعیت مشابه برای یک پیشنمایشگر pdf، به اطلاعات مربوط به متغیر $pdf_update_method مراجعه کنید.
- $dvi_update_method [2 under UNIX, 1 under MS-Windows]
- نحوهٔ
بهروزرسانی
نمایش توسط
نمایشگر dvi
هنگامی که
فایل dvi
تغییر کرده
است. مقادیر
در اینجا به
طور یکسان
برای
متغیرهای
$pdf_update_method و $ps_update_method
نیز صدق
میکنند.
0 => بهروزرسانی خودکار است،
1=> بهروزرسانی دستی توسط کاربر، که ممکن است صرفاً به معنای یک کلیک ماوس روی پنجرهٔ نمایشگر باشد یا به معنای اقدامی جدیتر.
2 => ارسال سیگنالی که شمارهٔ آن در متغیر $dvi_update_signal آمده است. مقدار پیشفرض در UNIX برای xdvi مناسب است.
3 => نمایشگر نمیتواند بهروزرسانی انجام دهد، زیرا فایل را قفل میکند. (مانند acroread در MS-Windows.)
4 => اجرای یک دستور برای انجام بهروزرسانی. این دستور توسط متغیر $dvi_update_command مشخص میشود.برای مثالی از بهروزرسانی توسط دستور، اطلاعات متغیر $pdf_update_method را ببینید.
- $dvi_update_signal [Under UNIX: SIGUSR1, which is a system-dependent value]
- شمارهٔ سیگنالی که در هنگام بهروزرسانی از طریق ارسال سیگنال، به نمایشگر dvi ارسال میشود -- اطلاعات متغیر $dvi_update_method را ببینید. مقدار پیشفرض مقداری است که برای xdvi روی یک سیستم UNIX مناسب است.
- $emulate_aux [1]
- این که آیا
استفاده از
دایرکتوری
aux در زمانی
که $aux_dir و $out_dir
متفاوت
هستند
شبیهسازی
شود، به جای
استفاده از
گزینهٔ -aux-directory
برای
برنامههای
*latex. (برنامهٔ MiKTeX
از -aux-directory
پشتیبانی
میکند،
اما TeXLive
پشتیبانی
نمیکند.)
اگر از نسخهای از *latex استفاده میکنید که از -aux-directory پشتیبانی نمیکند (مانند TeXLive)، برنامهٔ latexmk پس از اولین اجرای *latex، شبیهسازی aux_dir را بهطور خودکار فعال میکند، زیرا فایل .log را در جای نادرست پیدا خواهد کرد. اما بهتر است $emulate_aux را در یک فایل rc برابر با ۱ قرار دهید، یا بهطور معادل از گزینهٔ -emulate-aux-dir استفاده کنید. این حالت شبیهسازی با MiKTeX نیز به همان خوبی کار میکند.
شبیهسازی دایرکتوری aux بدین معناست که هنگام فراخوانی *latex، دایرکتوری خروجی ارائهشده به *latex روی دایرکتوری aux موردنظر تنظیم میشود. پس از آن، هر فایلی که لازم است در دایرکتوری خروجی باشد توسط latexmk به آنجا منتقل خواهد شد. (اینها فایلهایی با پسوندهای .dvi، .ps، .pdf، .synctex، .synctex.gz و بسته به تنظیم متغیر $fls_uses_out_dir، فایل .fls نیز هستند.)
- $failure_cmd [undefined]
- مستندات مربوط به $compiling_cmd را ببینید.
- $fdb_ext ["fdb_latexmk"]
- پسوند فایلی که latexmk برای نگهداری پایگاه دادهای از اطلاعات مربوط به فایلهای مبدأ تولید میکند. معمولاً نیازی به تغییر این مورد نخواهید داشت.
- @file_not_found
- این یک
آرایه از
عبارات
منظم Perl است
که
الگوهایی
برای یافتن
پیامهایی
در فایل .log
حاصل از یک
اجرای *latex
هستند که
نشان
میدهند
فایلی
جستجو شده و
یافت نشده
است. برای
دیدن
مجموعه
پیشفرض
فعلی، باید
به تعریف
@file_not_found در فایل
latexmk.pl نگاه
کنید.
در عبارت منظم، رشتهٔ مربوط به نام فایل مفقود باید درون پرانتز قرار گیرد. این کار متضمن آن است که پس از تطابق موفقیتآمیز latexmk با الگو، متغیر $1 روی نام فایل تنظیم میشود، که سپس توسط latexmk برداشته میشود.
اگر احیاناً با بستهای مواجه شدید که پیام مفقود بودن فایل را در قالبی متفاوت از الگوهای توکار ارائه میدهد، میتوانید الگوی دیگری به آرایه اضافه کنید. یک مثال عبارت است از:
push @file_not_found, '^No file\\s+(.+)\\s*$';خود عبارت منظم عبارت است از:
^Missing file\s+(.+)\s*$اما مشخصسازی رشتهٔ متناظر در دستور push باید بکاسلشهای مضاعف داشته باشد.
این عبارت منظم با خطی مطابقت دارد که با 'No file' شروع میشود، سپس یک یا چند نویسهٔ فاصلهٔ خالی (whitespace) دارد، سپس هر تعداد نویسهای که نام فایل را تشکیل میدهند، سپس احیاناً فاصلهٔ خالی، و در نهایت انتهای خط. (برای جزئیات بیشتر به مستندات عبارات منظم Perl مراجعه کنید.)
- $filetime_causality_threshold [5]
- کاربرد این
متغیر به
شرح زیر
است: در
چندین جا، latexmk
باید مشخص
کند که آیا
یک فایل خاص
در طول
اجرای تازه
پایانیافتهٔ
یک
قاعده/برنامه
تولید شده
است، یا
اینکه از یک
اجرای قبلی
باقی مانده
است. (یک
مثال،
تولید فایل
.bcf توسط
بستهٔ biblatex در
طول اجرای *latex
است تا
اطلاعات
کتابشناختی
را برای
برنامهٔ biber
فراهم کند.
اگر یک فایل
.bcf در طول
اجرای فعلی
*latex تولید
نشود اما از
اجرای قبلی
باقی مانده
باشد،
آنگاه latexmk
باید نتیجه
بگیرد که
سند .tex تغییر
کرده است به
طوری که
دیگر نباید
از biber
استفاده
شود.)
معیار latexmk برای اینکه فایلی در حین یک اجرا تولید شده است، این است که زمان تغییر (modification time) فایل تازهتر از زمان سیستم در آغاز اجرا باشد. اساساً، اگر زمان تغییر قبل از این باشد، آنگاه فایل از یک اجرای قبلی باقی مانده است. با این حال، استفادهٔ سادهلوحانه از این معیار میتواند در میان موارد دیگر، با دانهبندی (granularity) نحوهٔ ذخیرهٔ زمان فایلها در برخی از سیستمهای فایل به مشکل بخورد، که بدان معناست که ممکن است زمان گزارششدهٔ سیستم فایل برای یک فایل یک ثانیه یا بیشتر قبل از زمان تغییر واقعی باشد، که تفاوت دقیق آن کاملاً تصادفی است.
متغیر $filetime_causality_threshold میزان تساهل مناسبی را در استفادهٔ latexmk از زمان تغییر فایل مجاز میسازد. این مقدار میتواند کاملاً سخاوتمندانه باشد؛ صرفاً باید کمتر از مقیاس زمانیای باشد که در آن یک کاربر انسانی در فایلهای منبع یک سند (یا فایلهای پیکربندی و غیره) تغییرات ایجاد میکند.
- $fls_uses_out_dir [0]
- این متغیر
تعیین
میکند که
آیا فایل .fls
باید در
دایرکتوری
خروجی قرار
گیرد یا در
دایرکتوری
طبیعی آن که
دایرکتوری
aux است. اگر
متغیر
غیرصفر
باشد، فایل
.fls باید در
دایرکتوری
خروجی باشد.
برای
جزئیات
بیشتر
دربارهٔ
این
دایرکتوریها،
بخش AUXILIARY AND OUTPUT DIRECTORIES را
ببینید.
دلیل وجود
متغیر $fls_uses_aux_dir
در آنجا
توضیح داده
شده است.
در تمام موارد، اگر latexmk متوجه شود که یک فایل .fls در دایرکتوری مخالف با آنچه توسط $fls_uses_out_dir مشخص شده تولید شده است، فایل را در دایرکتوری دیگر کپی میکند (برحسب مورد، دایرکتوری aux یا خروجی). فایل به جای اینکه صرفاً منتقل شود کپی میشود، تا از تداخلهای احتمالی با سایر نرمافزارهایی که فرض میکنند فایل .fls در همان دایرکتوری تولید شده که توسط *latex در آن نوشته شده است، جلوگیری شود. بنابراین، اثر تنظیم نادرست $fls_uses_out_dir تنها این است که باعث ایجاد یک نسخهٔ اضافی از فایل .fls میشود..TP $force_mode [0] اگر غیرصفر باشد، پردازش را با وجود خطاهای جزئی latex، از جمله ارجاعهای متقابل ناشناخته، ادامه میدهد. معادل با مشخص کردن گزینهٔ -f است.
- @generated_exts [( 'aux', 'bcf', 'fls', 'idx', 'ind', 'lof', 'lot', 'out', 'toc', 'blg', 'ilg', 'log', 'xdv' )]
-
این متغیر شامل فهرستی از پسوندهای فایلهایی است که در طول پردازش تولید میشوند و باید در طول عملیات پاکسازی اصلی (که با گزینهٔ خط فرمان -c فراخوانی میشود) حذف گردند. (استفاده از -C یا -gg این پاکسازی و حتی موارد بیشتری را انجام میدهد.)
مقادیر پیشفرض، پسوندهای فایلهای استانداردی هستند که توسط *latex، bibtex و موارد مشابه تولید میشوند. (توجه داشته باشید که پاکسازی فایل fdb_latexmk را نیز حذف میکند، اما در حال حاضر این مورد بهطور جداگانه در کدهای latexmk گنجانده شده است.)
پس از مقداردهی اولیهٔ latexmk و پردازش خط فرمان آن، موارد موجود در clean_ext به @generated_exts الحاق میشوند. بنابراین این دو متغیر معنای یکسانی دارند (برخلاف نسخههای قدیمیتر latexmk).
موارد موجود در @generated_exts معمولاً پسوندهای فایلهایی هستند که نام پایهٔ (basename) آنها با فایل اصلی tex یکسان است. اما همچنین میتوان الگوهایی شامل آن نام پایه را مشخص کرد — به توضیحات متغیر $clean_ext مراجعه کنید.
علاوه بر تعیین فایلهای قابل حذف در پاکسازی، latexmk از همین مشخصات برای کمک به بررسی تغییرات در فایلهای مبدأ نیز استفاده میکند: در برخی شرایط، نیاز است تغییراتی در فایلها (از زمان اجرای قبلی) پیدا شود که انتظار میرود ناشی از ویرایش فایل توسط کاربر باشد. این در تقابل با مواردی است که فایلها توسط برنامهای که latexmk اجرا کرده ایجاد شدهاند و با نتایج اجرای قبلی تفاوت دارند. این کاربردِ @generated_exts با توجه به دقت معمول سایر روشهای latexmk برای تشخیص فایلهای تولیدشده، معمولاً کماهمیت است.
یک روش مناسب برای افزودن یک پسوند اضافی به فهرست بدون از دست دادن موارد از پیش تعریفشده، استفاده از دستور push در یک خط از فایل RC است؛ مانند:
push @generated_exts, "end";که پسوند "end" را به فهرست پسوندهای تولیدشدهٔ از پیش تعریفشده اضافه میکند. (این پسوند برای مثال توسط بستهٔ RevTeX استفاده میشود.)
- $go_mode [0]
- اگر این
متغیر
برابر صفر
باشد،
فایلها
طبق روال
معمول
پردازش
میشوند و
قواعد تنها
زمانی اجرا
میشوند که
قدیمی
تشخیص داده
شوند. این
معادل با
گزینهٔ -g-
است.
اگر این متغیر برابر یک باشد، latexmk را وادار میکند تا هر قاعده را حداقل یک بار اجرا کند، حتی در شرایطی که latexmk معمولاً تشخیص میدهد که هیچ تغییری در فایلهای مبدأ از زمان اجرای قبلی رخ نداده است. این رفتار برای نمونه زمانی مفید است که پیکربندی را تغییر دادهاید و میخواهید تمام فایلها را دوباره پردازش کنید. این معادل با گزینهٔ -g است.
اگر این متغیر برابر دو باشد، یک پاکسازی کامل انجام میدهد، درست مانند اینکه -C مشخص شده باشد، و سپس پردازش را به صورت عادی از یک وضعیت اولیهٔ پاک آغاز میکند. این معادل با گزینهٔ -gg برای «حالت super go» یا «clean make» است.
اگر این متغیر برابر سه باشد، حداقل به یک بار اجرای *latex نیاز دارد؛ بدین معنی که مانند حالت عادی پردازش میشود، با این تفاوت که در ابتدا، قاعدهٔ *latex مورد استفاده، مستقل از وضعیت فایلها، به عنوان قدیمی تنظیم میشود. این معادل با گزینهٔ -gt است.
- %hash_calc_ignore_pattern
- !!!این متغیر
فقط برای
افراد
حرفهای
است!!!
قاعدهٔ عمومی که latexmk برای تعیین نیاز به اجرای مجدد یک برنامه استفاده میکند این است که یکی از فایلهای مبدأ تغییر کرده باشد. اما برای مثال بستهٔ لاتکی را در نظر بگیرید که باعث تولید یک فایل پستاسکریپت کپسولهشده (یک فایل «eps») میشود که قرار است در اجرای بعدی خوانده شود. این فایل شامل یک خط توضیح است که تاریخ و زمان ایجاد آن را مشخص میکند. در اجرای بعدی، زمان تغییر میکند، latex میبیند که فایل eps تغییر یافته است و بنابراین لاتک را دوباره اجرا میکند. این امر موجب ایجاد یک حلقهٔ بینهایت میشود که فقط به این دلیل پایان مییابد که latexmk برای جلوگیری از شرایط غیرعادی، محدودیتی در تعداد دفعات اجرا دارد.
اما خطی که تغییر میکند اثر واقعی ندارد زیرا یک توضیح است. شما میتوانید به latex دستور دهید که از خط مشکلساز به روش زیر چشمپوشی کند:
$hash_calc_ignore_pattern{'eps'} = '^%%CreationDate: ';این یک قاعده برای فایلهای با پسوند .eps دربارهٔ خطوط قابل چشمپوشی ایجاد میکند. سمت چپ، یک شیوهٔ نگارش در Perl برای تنظیم یک مقدار در یک هش (hash) است. توجه داشته باشید که پسوند فایل بدون نقطه مشخص میشود. مقدار سمت راست، رشتهای حاوی یک عبارت منظم (regular expression) است. (برای چگونگی تعیین آنها به طور کلی، به مستندات Perl مراجعه کنید.) این عبارت منظم خاص مشخص میکند خطوطی که با "%%CreationDate: " شروع میشوند باید در تصمیمگیری دربارهٔ اینکه آیا فایلی با پسوند دادهشدهٔ .eps تغییر کرده است یا خیر، نادیده گرفته شوند.
برای هر پسوند تنها یک عبارت منظم در دسترس است. اگر به بیش از یک الگو برای تعیین خطوط قابل چشمپوشی نیاز دارید، باید الگوها را در یک عبارت منظم واحد ترکیب کنید. سادهترین روش، جداسازی الگوهای سادهٔ مختلف با نویسهٔ خط عمودی (نشاندهندهٔ «تناوب» در اصطلاحات عبارات منظم) است. برای مثال:
$hash_calc_ignore_pattern{'eps'} = '^%%CreationDate: |^%%Title: ';باعث میشود خطوطی که با "^%%CreationDate: " یا "^%%Title: " شروع میشوند نادیده گرفته شوند.
ممکن است پیش بیاید که الگویی برای نادیده گرفتن، مثلاً در یک فایل مقداردهی اولیهٔ سیستم یا کاربر تعیین شده باشد و شما بخواهید آن را در فایلی که بعداً خوانده میشود حذف کنید. برای انجام این کار، از تابع delete در پرل استفاده کنید؛ مانند:
delete $hash_calc_ignore_pattern{'eps'}; - $hilatex ["hilatex %O %S"]
- خط فرمان را برای برنامهٔ hilatex مشخص میکند.
- $hnt_mode [0]
- مشخص میکند که آیا با استفاده از hilatex یک نسخهٔ hnt از سند تولید شود یا خیر. این متغیر میتواند با استفاده از گزینهٔ -hnt فعال شود.
- $jobname [""]
-
این متغیر jobname را مشخص میکند؛ یعنی نام پایهای که برای فایلهای تولیدشده (.aux، .log، .dvi، .ps، .pdf و غیره) استفاده میشود. اگر این متغیر یک رشتهٔ تهی باشد، نام پایه همان نام پایهٔ فایل اصلی tex خواهد بود. (در حال حاضر، رشتهٔ موجود در $jobname نباید حاوی فاصله باشد.)
جاینگهدار '%A' مجاز است. این مقدار با نام پایهٔ فایل TeX جایگزین خواهد شد. هدف اصلی زمانی است که قرار است مجموعهای از فایلهای tex مختلف پردازش شوند و بخواهید نام jobname متمایزی برای هر یک اختصاص دهید. بدین ترتیب، اگر بخواهید کامپایل مجموعهای از فایلها را در سیستمعاملهای مختلف با نامهای مجزا برای هر حالت مقایسه کنید، میتوانید در یک فایل مقداردهی اولیه مقدار زیر را قرار دهید:
$jobname = "%A-$^O";(در اینجا $^O متغیری است که perl ارائه میدهد و شامل نام سیستمعامل از نظر perl است.)
فرض کنید فایلهای tex با نامهای test1.tex و test2.tex دارید. سپس هنگامی که دستور زیر را اجرا کنید:
latexmk -pdf *.texهر دو فایل کامپایل خواهند شد. فایلهای .aux، .log و .pdf در یک سیستم MS-Windows دارای نامهای پایهٔ test1-MSWin32 و test2-MSWin32، در یک سیستم OS-X نامهای test1-darwin و test2-darwin، و موارد مشابه متعددی در سیستمهای لینوکس خواهند بود.
- $kpsewhich ["kpsewhich %S"]
- برنامهای
که برای
مکانیابی
یک فایل
مبدأ در
صورتی که
نام فایل به
تنهایی
کافی نباشد
فراخوانی
میشود.
بیشتر
نامهای
فایل مورد
استفاده
توسط latexmk
دارای
اطلاعات
مسیر کافی
برای یافتن
مستقیم
هستند. اما
گاهی
اوقات،
بهویژه
هنگامی که
یک فایل .bib یا
.bst از طریق
فایل لاگ
حاصل از
اجرای bibtex یا
biber پیدا
میشود،
تنها نام
پایهٔ فایل
مشخص است و
مسیر آن
معلوم نیست.
برنامهٔ
تعیینشده
توسط $kpsewhich
برای یافتن
آن استفاده
میشود.
(برای کاربران پیشرفته: به دلیل شیوهٔ متفاوتی که latexmk از دستور تعیینشده در $kpsewhich استفاده میکند، برخی از حالتهای ذکر شده در FORMAT OF COMMAND SPECIFICATIONS اعمال نمیشوند. کلیدواژههای internal و start در دسترس نیستند. یک تعریف دستور ساده همراه با گزینههای احتمالی و در ادامه "%S" تمام چیزی است که کارکرد آن تضمین شده است. توجه داشته باشید که برای سایر دستورها، "%S" با یک فایل مبدأ واحد جایگزین میشود؛ در مقابل، برای $kpsewhich، مقدار "%S" ممکن است با فهرست بلندی از نامهای فایل که با فاصله جدا شده و هر یک درون گیومه قرار گرفتهاند جایگزین شود. خروجی حاصل از اجرای دستور روی STDOUT سپس به latexmk ارسال (pipe) میشود.)
همچنین برای روش دیگری که latexmk جهت مکانیابی فایلها استفاده میکند، متغیر @BIBINPUTS را ببینید؛ این متغیر تنها برای فایلهای .bib کاربرد دارد.
- $kpsewhich_show [0]
- مشخص میکند که آیا اطلاعات عیبیابی دربارهٔ فراخوانیهای kpsewhich نمایش داده شود یا خیر: خط فرمان استفادهشده برای فراخوانی آن و نتایج. اگر $kpsewhich_show غیرصفر باشد یا حالت عیبیابی روشن باشد، این موارد نشان داده میشوند. (اما در حالت دوم، انبوهی از اطلاعات عیبیابی دیگر نیز نمایش داده میشوند.) بدون این اطلاعات، هیچ چیزی دربارهٔ فراخوانیهای kpsewhich در خروجی صفحه نمایش latexmk قابل مشاهده نخواهد بود.
- $landscape_mode [0]
- اگر غیرصفر باشد، در حالت افقی (landscape) اجرا میشود و از پیشنمایشگرهای حالت افقی و مبدلهای dvi به postscript استفاده میکند. معادل با گزینهٔ -l است. معمولاً با پیشنمایشگرهای امروزی نیازی به آن نیست.
- $latex ["latex %O %S"]
- خط فرمان را
برای
برنامهٔ
پردازش LaTeX
تعیین
میکند.
توجه داشته
باشید که
همانند
سایر
برنامهها،
میتوانید
از این
متغیر نه
تنها برای
تغییر نام
برنامهٔ
استفادهشده،
بلکه برای
مشخص کردن
گزینههای
ارسالشده
به برنامه
نیز
استفاده
کنید؛ به
عنوان مثال:
$latex = "latex --src-specials %O %S";
برای پیکربندی هماهنگ تمام متغیرهای $dvilualatex، $hilatex، $latex، $pdflatex، $lualatex و $xelatex، بخش "Advanced Configuration" را ببینید..TP %latex_input_extensions این متغیر پسوندهایی را مشخص میکند که latexmk هنگامی که اجرای LaTeX با خطای پیدا نشدن یک فایل مواجه شده و فایل بدون پسوند مشخص شده باشد، آنها را امتحان میکند. این حالت معمولاً با دستورهای LaTeX به شکل \input{file} یا \includegraphics{figure}، زمانی که فایل منبع مربوطه وجود نداشته باشد، رخ میدهد.
در این وضعیت، latexmk وابستگیهای سفارشی را برای ساخت فایل(های) ناموجود جستجو میکند، اما آن را به پسوندهای مشخصشده توسط متغیر %latex_input_extensions محدود مینماید. پسوندهای پیشفرض 'tex' و 'eps' هستند.
(برای متخصصان Perl: متغیر %latex_input_extensions یک hash است که کلیدهای آن پسوندها هستند؛ مقادیر آن اهمیتی ندارند.) دو زیرروال برای دستکاری این متغیر و متغیر مرتبط %pdflatex_input_extensions ارائه شده است: add_input_ext و remove_input_ext. آنها همانطور که در مثالهای زیر نشان داده شده استفاده میشوند، که خطوط احتمالی در یک فایل مقداردهی اولیه هستند:
remove_input_ext( 'latex', 'tex' );پسوند 'tex' را از latex_input_extensions حذف میکند
add_input_ext( 'latex', 'asdf' );پسوند 'asdf' را به latex_input_extensions اضافه میکند. (طبیعتاً با چنین پسوندی، باید یک وابستگی سفارشی مناسب برای latexmk ایجاد کرده باشید، و همچنین باید برنامهنویسی لازم را در فایل منبع LaTeX انجام داده باشید تا خواندن فایل ممکن شود. پسوندهای استاندارد توسط LaTeX و بستههای graphics/graphicx آن مدیریت میشوند.)
- $latex_silent_switch ["-interaction=batchmode"]
- سوئیچ(های)
برنامهٔ
پردازش LaTeX
هنگامی که
حالت
بیصدا (silent mode)
فعال است.
اگر از MikTeX استفاده میکنید، ممکن است ترجیح دهید گزینهها را طوری پیکربندی کنید که شامل -c-style-errors باشد؛ برای مثال، با قرار دادن خط زیر در یک فایل مقداردهی اولیه:
$latex_silent_switch = "-interaction=batchmode -c-style-errors"; - $lpr ["lpr %O %S" تحت UNIX/Linux، "NONE lpr" تحت MS-Windows]
- دستور چاپ
فایلهای
postscript.
در MS-Windows (برخلاف UNIX/Linux)، برنامهٔ استانداردی برای چاپ فایلها وجود ندارد. اما راههایی وجود دارد که میتوانید این کار را انجام دهید. برای مثال، اگر gsview نصب باشد، میتوانید از آن با گزینهٔ "/p" استفاده کنید:
$lpr = '"c:/Program Files/Ghostgum/gsview/gsview32.exe" /p';اگر gsview در دایرکتوری متفاوتی نصب شده باشد، باید تغییر مناسب را اعمال کنید. به ترکیب نقلقولهای تکی و جفتی اطراف نام دقت کنید. نقلقولهای تکی مشخص میکنند که این یک رشته برای انتساب به متغیر پیکربندی $lpr است. نقلقولهای جفتی بخشی از رشتهای هستند که به سیستمعامل فرستاده میشوند تا دستور اجرا شود؛ این کار ضروری است چرا که بخشی از نام دستور ("Program Files") حاوی یک فاصله است که در غیر این صورت اشتباه تفسیر میشد.
- $lpr_dvi ["NONE lpr_dvi"]
- برنامهٔ چاپ برای چاپ فایلهای dvi.
- $lpr_pdf ["NONE lpr_pdf"]
- برنامهٔ
چاپ برای
چاپ
فایلهای pdf.
در MS-Windows میتوانید این متغیر را طوری تنظیم کنید که در صورت نصب بودن، از gsview استفاده کند؛ برای مثال:
$lpr = '"c:/Program Files/Ghostgum/gsview/gsview32.exe" /p';اگر gsview در دایرکتوری متفاوتی نصب شده باشد، باید تغییر لازم را اعمال کنید. به نقلقولهای جفتی پیرامون نام توجه کنید: این امر ضروری است زیرا بخشی از نام دستور ("Program Files") شامل یک فاصله است که در غیر این صورت به اشتباه تفسیر میشود.
- $lualatex ["lualatex %O %S"]
- خط فرمان را
برای
برنامهٔ
پردازش LaTeX که
باید هنگام
فراخوانی
برنامهٔ lualatex
(مثلاً با
گزینهٔ -lualatex)
استفاده
شود، مشخص
میکند.
برای انجام پیکربندی هماهنگ همهٔ متغیرهای $dvilualatex، $hilatex، $latex، $pdflatex، $lualatex و $xelatex، بخش "Advanced Configuration" را ببینید.
- %lualatex_input_extensions
- این متغیر
پسوندهایی
را مشخص
میکند که
latexmk هنگامی
که یک اجرای
lualatex با خطای
پیدا نشدن
یک فایل
مواجه شده و
فایل بدون
پسوند مشخص
شده باشد،
آنها را
امتحان
میکند. این
حالت
معمولاً با
دستورهای LaTeX
به شکل \input{file} یا
\includegraphics{figure}، زمانی
که فایل
منبع
مربوطه
وجود
ندارد، رخ
میدهد.
در این وضعیت، latexmk وابستگیهای سفارشی را برای ساخت فایل(های) ناموجود جستجو میکند، اما آن را به پسوندهای مشخصشده توسط متغیر %pdflatex_input_extensions محدود میکند. پسوندهای پیشفرض 'tex'، 'pdf'، 'jpg' و 'png' هستند.
برای سایر اطلاعاتی که به همان اندازه برای %lualatex_input_extensions نیز صدق میکند، جزئیات مربوط به %latex_input_extensions را ببینید.
- $lualatex_silent_switch ["-interaction=batchmode"]
- سوئیچ(های)
برنامهٔ lualatex
(مشخصشده
در متغیر
$lualatex) هنگامی
که حالت
بیصدا
فعال است.
برای اطلاعات دیگری که به همان اندازه برای $lualatex_silent_switch نیز اعمال میشود، جزئیات $latex_silent_switch را ببینید.
- $make ["make"]
- برنامهٔ پردازش make.
- $makeindex ["makeindex %O -o %D %S"]
- برنامهٔ پردازش نمایه (index).
- $makeindex_fudge [0]
- هنگام استفاده از makeindex، تعیین میکند که آیا قبل از اجرای makeindex دایرکتوری به $aux_dir تغییر یابد یا خیر. در صورتی که $aux_dir یک زیردایرکتوری صریح از دایرکتوری جاری نباشد، این مقدار را برابر با 1 قرار دهید، در غیر این صورت makeindex به دلایل امنیتی از نوشتن فایلهای خروجی و ثبت گزارش (log) خود خودداری خواهد کرد.
- $makeindex_silent_switch ["-q"]
- سوئیچ(های) برنامهٔ پردازش نمایه هنگامی که حالت بیصدا فعال است.
- $max_repeat [5]
- حداکثر
تعداد
دفعاتی که
latexmk
برنامههای
*latex را پیش از
تصمیمگیری
دربارهٔ
اینکه
ممکن است یک
حلقهٔ
بینهایت
رخ داده
باشد و نیاز
به خروج
اضطراری
دارد، اجرا
خواهد کرد؛
به جای
اینکه
مجدداً *latex
را برای حل
ارجاعات
متقابل (cross-references)
و غیره اجرا
کند. مقدار
پیشفرض
تمامی
حالتهای
عادی را
پوشش
میدهد.
(توجه داشته باشید که «و غیره» موارد بسیاری را پوشش میدهد که در آنها یک بار اجرای *latex فایلهایی تولید میکند که باید در اجرای بعدی خوانده شوند.)
- $MSWin_back_slash [1]
- این متغیر
پیکربندی
تنها زمانی
اثر دارد که
latexmk تحت MS-Windows
اجرا شود.
با مقدار
پیشفرض 1
برای این
متغیر،
هنگامی که
دستوری در
MS-Windows اجرا
میشود، latexmk
نویسهٔ "\"
را به عنوان
نویسهٔ
جداکننده
بین اجزای
نام
دایرکتوری
جایگزین
میکند. در
داخل
برنامه، latexmk
از "/" به
عنوان
نویسهٔ
جداکنندهٔ
دایرکتوری
استفاده
میکند، که
نویسهٔ
مورد
استفاده در
سیستمهای
شبهیونیکس
است.
تقریباً برای همهٔ برنامهها و برای تقریباً همهٔ نامهای فایل در MS-Windows، هر دو نویسهٔ "\" و "/" به عنوان نویسهٔ جداکنندهٔ دایرکتوری پذیرفته میشوند، حداقل به این شرط که نام فایلها به درستی داخل نقلقول قرار گرفته باشند. اما ممکن است برنامههایی وجود داشته باشند که تنها "\" را در خط فرمان بپذیرند، زیرا جداکنندهٔ دایرکتوری استاندارد در MS-Windows است. بنابراین جهت اطمینان، latexmk به صورت پیشفرض جایگزینی "/" با "\" را انجام میدهد.
با این حال برنامههایی نیز در MS-Windows وجود دارند که بکاسلش "\" در آنها متفاوت از یک جداکنندهٔ دایرکتوری تفسیر میشود؛ برای این برنامهها جداکنندهٔ دایرکتوری باید "/" باشد. برنامههای با این رفتار شامل تمامی برنامههای *latex در پیادهسازی TeXLive (نه در پیادهسازی MiKTeX) هستند. بنابراین اگر در MS-Windows از TeXLive استفاده میکنید، باید $MSWin_back_slash روی صفر تنظیم شود.
- $new_viewer_always [0]
- این متغیر تنها در حالت پیشنمایش پیوسته برای latexmk اعمال میشود. اگر $new_viewer_always برابر با 0 باشد، latexmk بررسی میکند که آیا یک پیشنمایشگر از قبل روی همان فایل در حال اجراست یا خیر، و اگر برنامهای در حال اجرا باشد، برنامهٔ جدیدی را آغاز نمیکند. اگر $new_viewer_always مقداری غیر از صفر داشته باشد، این بررسی نادیده گرفته میشود و latexmk به گونهای رفتار میکند که گویی هیچ نمایشگری در حال اجرا نیست.
- $out_dir [""]
- اگر خالی
نباشد، این
متغیر
دایرکتوری
خروجی را
مشخص
میکند.
این دایرکتوری جایی است که فایلهای خروجی اصلی در آن نوشته میشوند (dvi، ps، pdf، synctex، synctex.gz). علاوه بر این، اگر دایرکتوری aux با دایرکتوری خروجی یکسان باشد، که به صورت پیشفرض نیز چنین است، سایر فایلهای تولیدشده نیز عملاً در دایرکتوری خروجی نوشته میشوند.
اگر $out_dir خالی باشد، دایرکتوری خروجی همان دایرکتوری جاری در زمان فراخوانی *latex خواهد بود؛ این معادل تنظیم $out_dir روی '.' است.
برای جزئیات بیشتر به بخش AUXILIARY AND OUTPUT DIRECTORIES مراجعه کنید.
- $out2_dir [""]
- (قابلیت
جدید
آزمایشی.)
اگر خالی نباشد، این متغیر دایرکتوری خروجی نهایی را مشخص میکند، یعنی دایرکتوری برای فایلهای خروجی نهایی. اگر این متغیر خالی باشد (مقدار پیشفرض آن)، دایرکتوری خروجی نهایی همان دایرکتوری خروجی خواهد بود.
برای توضیح چرایی ایدهٔ جداسازی دایرکتوریهای خروجی و خروجی نهایی، به توضیحات گزینهٔ -out2dir مراجعه کنید.
اگر دایرکتوری خروجی نهایی با دایرکتوری خروجی متفاوت باشد، پس از یک دور کامل کامپایل سند، مجموعه فایلهای مربوطه از دایرکتوری خروجی به اینجا کپی میشوند. فایلهای کپیشده توسط متغیر @out2_exts مشخص میشوند و به طور پیشفرض فایلهایی با پسوندهای 'hnt'، 'pdf'، 'ps'، 'synctex' و 'synctex.gz' هستند که نام پایهای (basename) یکسان با کامپایل اصلی *latex دارند.
- @out2_exts [( 'hnt', 'pdf', 'ps', 'synctex', 'synctex.gz' )]
-
این متغیر پسوندهای فایلهایی را که باید به دایرکتوری خروجی نهایی کپی شوند فهرست میکند. نام پایهٔ (basename) فایلها همان نام پایه برای کامپایل اصلی *latex است (متناظر با مقداری که توسط نگهدارنده مکان %R مشخص شده است). نامهای عمومیتر را میتوان به همان روش متغیر @generated_exts، با گنجاندن %R در یک الگو مشخص کرد، برای مثال:
push @out2_exts, '%R-2up.pdf';.TP $pdf_mode [0] اگر صفر باشد، نسخه pdf سند را تولید نمیکند. اگر برابر ۱ باشد، نسخه pdf سند را با استفاده از pdflatex و از طریق دستور مشخصشده در متغیر $pdflatex تولید میکند. اگر برابر ۲ باشد، نسخه pdf سند را از فایل ps و با استفاده از دستور مشخصشده در متغیر $ps2pdf تولید میکند. اگر برابر ۳ باشد، نسخه pdf سند را از فایل dvi و با استفاده از دستور مشخصشده در متغیر $dvipdf تولید میکند. اگر برابر ۴ باشد، نسخه pdf سند را با استفاده از lualatex و از طریق دستور مشخصشده در متغیر $lualatex تولید میکند. اگر برابر ۵ باشد، یک نسخه pdf (و یک نسخه xdv) از سند را با استفاده از xelatex و با بهکارگیری دستورهای مشخصشده در متغیرهای $xelatex و xdvipdfmx تولید میکند.در حالت $pdf_mode=2، اطمینان حاصل میشود که فایلهای .dvi و .ps نیز ساخته شوند. در حالت $pdf_mode=3، اطمینان حاصل میشود که فایل .dvi نیز ساخته شود. اما این رفتار ممکن است توسط خود سند لغو و جایگزین شود.
- $pdflatex ["pdflatex %O %S"]
- خط فرمان را
برای
برنامه
پردازشگر LaTeX
در نسخهای
مشخص
میکند که
به جای فایل
dvi، یک فایل pdf
تولید
میکند.
یک نمونه از کاربرد این متغیر، افزودن گزینههای خاص به خط فرمان برنامه است، برای مثال:
$pdflatex = "pdflatex --shell-escape %O %S";(در برخی نسخههای پیشین latexmk، برای استفاده از lualatex یا xelatex به جای pdflatex، لازم بود مقداری را به $pdflatex اختصاص دهید. اکنون متغیرهای پیکربندی جداگانهای برای استفاده از lualatex یا xelatex وجود دارند. به $lualatex و $xelatex مراجعه کنید.)
جهت انجام تنظیمات هماهنگ برای تمامی متغیرهای $dvilualatex، $hilatex، $latex، $pdflatex، $lualatex و $xelatex، بخش "Advanced Configuration" را ببینید.
- %pdflatex_input_extensions
- این متغیر
پسوندهایی
را مشخص
میکند که
latexmk هنگام
مواجهه با
خطای پیدا
نشدن فایلی
بدون پسوند
در حین
اجرای pdflatex،
آنها را
امتحان
میکند. این
حالت
معمولاً
زمانی رخ
میدهد که
دستورهای LaTeX
به شکل \input{file} یا
\includegraphics{figure}
استفاده
شوند و فایل
منبع
مربوطه
وجود
نداشته
باشد.
در چنین شرایطی، latexmk وابستگیهای سفارشی را برای ساخت فایل(های) مفقود جستجو میکند، اما آن را به پسوندهای مشخصشده توسط متغیر %pdflatex_input_extensions محدود میسازد. پسوندهای پیشفرض عبارتند از 'tex'، 'pdf'، 'jpg' و 'png'.
برای اطلاعات تکمیلی که به همان میزان برای %pdflatex_input_extensions نیز صدق میکند، جزئیات مربوط به %latex_input_extensions را ببینید.
- $pdflatex_silent_switch ["-interaction=batchmode"]
- سوئیچ(ها)
برای
برنامه pdflatex
(مشخصشده
در متغیر
$pdflatex) هنگامی
که حالت
بیصدا (silent mode)
فعال است.
برای اطلاعات تکمیلی که به همان میزان برای $pdflatex_silent_switch نیز صدق میکند، جزئیات مربوط به $latex_silent_switch را ببینید.
- $pdf_previewer ["start acroread %O %S"]
- دستور برای
فراخوانی
پیشنمایشگر
pdf.
در MS-Windows، پیشفرض به "cmd /c start """ تغییر یافته است؛ در نسخههای جدیدتر ویندوز، این کار باعث اجرای هر دستوری میشود که سیستم با فایلهای .pdf مرتبط کرده است. اما اگر این ارتباط با acroread باشد، ممکن است نامطلوب باشد -- یادداشتهای موجود در توضیحات گزینه -pvc را ببینید.
در OS-X پیشفرض به "open %S" تغییر مییابد، که منجر به راهاندازی (و جداسازی) نمایشگر مرتبط با فایل توسط OS-X میشود. به طور پیشفرض، برای فایلهای pdf این وابستگی به برنامه Preview سیستمعامل OS-X است که کاملاً رضایتبخش است.
هشدار: مشکل در MS-Windows: اگر acroread به عنوان نمایشگر pdf استفاده شود و در حال حاضر یک فایل pdf را نمایش دهد، آن فایل pdf قابل بهروزرسانی نخواهد بود. بنابراین در صورتی که تحت MS-Windows از حالت پیشنمایش پیوسته latexmk (گزینه -pvc) استفاده میکنید، acroread انتخاب نامناسبی برای نمایشگر است. این مشکل در صورتی که به عنوان مثال از SumatraPDF یا gsview برای مشاهده فایلهای pdf استفاده شود، رخ نمیدهد.
نکته مهم: معمولاً ترجیح میدهید که نمایشگر به صورت مستقل و جداگانه (detached) اجرا شود، تا latexmk پیش از ادامه کار خود منتظر بسته شدن نمایشگر نماند. بنابراین معمولاً باید پیشوند "start " را به دستور اضافه کنید، که به latexmk اعلام میکند خودش باید جداسازی نمایشگر را (به هر روشی که برای سیستمعامل مناسب است) انجام دهد. اما گاهی اوقات اجازه دادن به latexmk برای انجام این جداسازی (به دلایل متعدد غیربدیهی) مناسب نیست، بنابراین هر زمان که لازم باشد باید خودتان عبارت "start " را درج کنید.
- $pdf_update_command [""]
- هنگامی که نمایشگر pdf طوری تنظیم شده باشد که با اجرای یک دستور بهروزرسانی شود، این دستوری است که اجرا خواهد شد. اطلاعات متغیر $pdf_update_method را ببینید.
- $pdf_update_method [1 under UNIX, 3 under MS-Windows]
- نحوه
بهروزرسانی
صفحه
نمایشگر pdf
هنگام
تغییر فایل
pdf. برای کدها
به اطلاعات
متغیر $dvi_update_method
مراجعه
کنید. (توجه
داشته
باشید که
این
اطلاعات
باید کمی
تغییر کند،
به طوری که
برای مقدار
۴، جهت
اجرای یک
دستور برای
بهروزرسانی،
دستور توسط
متغیر $pdf_update_command
تعیین
میشود و
برای مقدار
۲، جهت
بهروزرسانی
از طریق
سیگنال،
سیگنال
توسط متغیر
$pdf_update_signal مشخص
میگردد.)
توجه داشته باشید که acroread در MS-Windows (برخلاف UNIX) فایل pdf را قفل میکند، بنابراین مقدار پیشفرض آن ۳ است.
تنظیم استفاده از یک دستور برای بهروزرسانی صریح نمایشگر، نیازمند تنظیم سه متغیر است. برای مثال:
$pdf_previewer = "start xpdf -remote %R %O %S";
$pdf_update_method = 4;
$pdf_update_command = "xpdf -remote %R -reload";تنظیم اول ترتیبی میدهد که برنامه xpdf در «حالت سرور راه دور» (remote server mode) استفاده شود، در حالی که نام سرور به عنوان نام ریشه (rootname) فایل TeX مشخص شده است. تنظیم دوم انجام بهروزرسانی در پاسخ به یک دستور را فراهم میسازد، و تنظیم سوم دستور بهروزرسانی را تعیین میکند.
- $pdf_update_signal [Under UNIX: SIGHUP, which is a system-dependent value]
- شماره سیگنالی که در صورت بهروزرسانی نمایشگر pdf از طریق ارسال سیگنال، به آن فرستاده میشود -- اطلاعات متغیر $pdf_update_method را ببینید. مقدار پیشفرض مقداری است که برای gv در یک سیستم UNIX مناسب است.
- $pid_position[1 under UNIX, -1 under MS-Windows]
- متغیر $pid_position
برای تعیین
اینکه
کدام کلمه
در خطوط
خروجی $pscmd
منطبق بر
شناسه
فرایند (PID)
است،
استفاده
میشود.
اولین کلمه
در خط با
شماره ۰
شمرده
میشود.
مقدار
پیشفرض ۱
(دومین کلمه
در خط) برای
Solaris 2.6، Linux و OS-X با
تنظیمات
پیشفرض $pscmd
در آنها،
صحیح است.
تنظیم متغیر روی -1 نشان میدهد که $pscmd نباید استفاده شود.
- $postscript_mode [0]
- اگر غیر صفر
باشد، یک
نسخه postscript از
سند تولید
میکند.
معادل
گزینه -ps.
اگر درخواست دیگری ثبت شود که برای آن به فایل postscript نیاز باشد، متغیر $postscript_mode برابر با ۱ قرار خواهد گرفت.
- $pre_tex_code ['']
- کد TeX را برای
اجرا پیش از
بارگذاری
فایل منبع
مشخص
میکند. این
ویژگی در
صورتی کار
میکند که
متغیر
مربوطه
مانند $latex و
غیره شامل
یک خط فرمان
مناسب با
جایگزینی %P
یا %U باشد.
برای مثال
میتوانید
اینگونه
عمل کنید:
$latex = 'latex %O %P';
$pre_tex_code = '\AtBeginDocument{An initial message\par}';جهت تنظیم تمامی متغیرهای $latex، $pdflatex، $lualatex و $xelatex میتوانید از زیرروال alt_tex_cmds استفاده نمایید:
&alt_tex_cmds;
$pre_tex_code = '\AtBeginDocument{An initial message\par}'; - $preview_continuous_mode [0]
- اگر غیر صفر باشد، یک نمایشگر را برای مشاهده سند اجرا میکند و به اجرای latexmk جهت بهروز نگه داشتن .dvi ادامه میدهد. معادل گزینه -pvc. اینکه کدام نمایشگر اجرا شود به سایر تنظیمات بستگی دارد؛ گزینههای خط فرمان -view= و متغیر $view را ببینید.
- $preview_mode [0]
- اگر غیر صفر باشد، یک نمایشگر را برای پیشنمایش سند اجرا میکند. معادل گزینه -pv. اینکه کدام نمایشگر اجرا شود به سایر تنظیمات بستگی دارد؛ گزینههای خط فرمان -view= و متغیر $view را ببینید.
- $printout_mode [0]
- اگر غیر صفر باشد، سند را با استفاده از دستور مشخصشده در متغیر $lpr چاپ میکند. معادل گزینه -p. توصیه میشود این متغیر در یک فایل RC تنظیم نشود، در غیر این صورت ممکن است مقدار زیادی کاغذ هدر رود.
- $print_type = ["auto"]
- نوع فایل برای چاپ خروجی: گزینههای ممکن شامل "auto"، "dvi"، "none"، "pdf" یا "ps" است. برای مشاهده معنی مقدار "auto"، گزینه -print= را ببینید.
- $pscmd
- دستوری که
برای
دریافت
تمامی
فرایندهای
در حال
اجرای جاری
توسط کاربر
استفاده
میشود.
گزینه -pvc از
دستور
مشخصشده
توسط متغیر
$pscmd استفاده
میکند تا
تشخیص دهد
آیا
نمایشگری
از قبل در
حال اجرا
است یا خیر،
و شناسه
فرایند (PID) را
بیابد (در
صورتی نیاز
است که latexmk
برای اطلاع
از تغییرات
فایلها،
به نمایشگر
سیگنال
ارسال کند).
فرض میشود هر خط از خروجی این دستور با یک فرایند مطابقت دارد. برای نحوه تشخیص شماره فرایند، متغیر $pid_position را ببینید.
پیشفرض pscmd تحت MS-Windows و cygwin برابر با "NONE" است (یعنی از این دستور استفاده نمیشود)، تحت OS-X برابر با "ps -ww -u $ENV{USER}"، و در سایر سیستمهای عامل (شامل لینوکس) برابر با "ps -f -u $ENV{USER}" است. در این تعاریف، "$ENV{USER}" با نام کاربری جایگزین میشود..TP $ps2pdf ["ps2pdf -dALLOWPSTRANSPARENCY %O %S %D"] دستور برای تبدیل فایل .ps به .pdf.
- $ps_filter [empty]
- فیلتر فایل postscript که پیش از سایر پردازشها، روی فایل postscript بهتازگی تولیدشده اجرا میشود. معادل با مشخص کردن گزینهٔ -pF است.
- $ps_previewer ["start gv %O %S", but start %O %S under MS-Windows]
- دستور
فراخوانی
پیشنمایشگر
ps. (مقدار
پیشفرض در
MS-Windows باعث
اجرای هر
دستوری
میشود که
سیستم به
فایلهای .ps
مرتبط کرده
است.)
توجه داشته باشید که gv در صورت استفاده با گزینهٔ -watch، هر زمان که فایل postscript تغییر کند صفحهٔ نمایش خود را بهروزرسانی میکند، در حالی که ghostview چنین نیست. با این حال، نسخههای مختلف gv نگارشهای اندک متفاوتی برای این گزینه دارند. میتوانید این متغیر را به شکل مناسب پیکربندی کنید.
هشدار: ممکن است سیستمهای Linux یک (یا چند) نسخه از gv را تحت نامهای متفاوتی مانند ggv، kghostview و غیره نصب داشته باشند، اما احتمالاً برنامهای که دقیقاً gv نامیده شود وجود نداشته باشد.
نکتهٔ مهم: معمولاً ترجیح میدهید پیشنمایشگر بهصورت جداشده (detached) اجرا شود تا latexmk برای ادامهٔ کار خود منتظر پایان کار پیشنمایشگر نماند. بنابراین معمولاً باید عبارت "start " را در ابتدای دستور قرار دهید، که به latexmk نشان میدهد خودش باید جدا کردن پیشنمایشگر را (با هر روشی که متناسب با سیستمعامل است) انجام دهد. اما گاهی سپردن این جداسازی به latexmk مناسب نیست (به دلایل گوناگون)، بنابراین باید هر زمان که نیاز بود، پیشوند "start " را خودتان اضافه کنید.
- $ps_previewer_landscape ["start gv -swap %O %S", but start %O %S under MS-Windows]
- دستور فراخوانی یک پیشنمایشگر ps در حالت افقی (landscape).
- $ps_update_command [""]
- هنگامی که پیشنمایشگر postscript برای بهروزرسانی از طریق اجرای یک دستور تنظیم شده باشد، این متغیر همان دستوری است که اجرا میشود. اطلاعات متغیر $ps_update_method را ببینید.
- $ps_update_method [0 under UNIX, 1 under MS-Windows]
- نحوهٔ بهروزرسانی صفحه توسط نمایشگر postscript هنگامی که فایل .ps تغییر کرده است. برای کدها به اطلاعات متغیر $dvi_update_method مراجعه کنید. (توجه داشته باشید که اطلاعات باید کمی تغییر کند تا برای مقدار 4، جهت اجرای یک دستور برای انجام بهروزرسانی، دستور توسط متغیر $ps_update_command مشخص شود، و برای مقدار 2، جهت تعیین بهروزرسانی از طریق سیگنال، سیگنال توسط $ps_update_signal مشخص گردد.)
- $ps_update_signal [Under UNIX: SIGHUP, which is a system-dependent value]
- شمارهٔ سیگنالی که هنگام بهروزرسانی از طریق ارسال سیگنال، به نمایشگر ارسال میشود -- به $ps_update_method مراجعه کنید. مقدار پیشفرض، مقدار مناسب برای gv در یک سیستم UNIX است.
- $pvc_timeout [0]
- اگر این متغیر غیرصفر باشد، در حالت pvc پس از یک دوره عدم فعالیت، مهلت زمانی (timeout) رخ خواهد داد. منظور از عدم فعالیت دورهای است که latexmk هیچ تغییری در فایلها شناسایی نکرده و بنابراین هیچ اقدامی مانند کامپایل سند انجام نداده است. مدتزمان عدم فعالیت در متغیر $pvc_timeout_mins تعیین میشود.
- $pvc_timeout_mins [30]
- مدتزمان عدم فعالیت، بر حسب دقیقه، که پس از آن حالت pvc به پایان میرسد. این مقدار در صورتی استفاده میشود که $pvc_timeout غیرصفر باشد.
- $pvc_view_file_via_temporary [1]
- مشابه $always_view_file_via_temporary است، به جز اینکه تنها در حالت پیشنمایش مداوم (گزینهٔ -pvc) اعمال میشود.
- $quote_filenames [1]
- مشخص
میکند که
آیا
جایگزینهای
متغیرها در
مشخصات
دستور
(مانند $pdflatex)
داخل
گیومهٔ
دوتایی (double quotes)
قرار گیرند
یا خیر. اگر
مقدار این
متغیر 1 (یا
هر مقدار
دیگری که Perl
آن را درست
یا true
میداند)
باشد،
نقلقولگذاری
انجام
میشود؛ در
غیر این
صورت
نقلقولگذاری
نادیده
گرفته
میشود.
روش نقلقولگذاری استفادهشده توسط latexmk برای کارکرد درست در سیستمهای UNIX (شامل Linux و Mac OS-X) و در MS-Windows آزمایش شده است. این روش امکان استفاده از نام فایلهای حاوی نویسههای خاص، بهویژه فاصله (space) را فراهم میکند. (اما توجه داشته باشید که بسیاری از نسخههای *latex نمیتوانند با فایلهای TeX که نامشان حاوی فاصله است بهدرستی کار کنند. نقلقولگذاری latexmk فقط تضمین میکند که سیستمعامل در ارسال آرگومانها به برنامهها، با چنین نام فایلهایی به درستی رفتار کند.)
- $rc_report [1]
- مشخص میکند که آیا پس از مقداردهی اولیه، فهرستی از فایلهای RC خواندهشده ارائه شود یا خیر.
- $recorder [1]
- مشخص
میکند که
آیا از
گزینهٔ -recorder
برای *latex
استفاده
شود یا خیر.
استفاده از
این گزینه
منجر به
ایجاد
فایلی با
پسوند .fls
میشود که
شامل
فهرستی از
فایلهای
خواندهشده
و
نوشتهشده
توسط این
برنامهها
است. سپس latexmk
از این فایل
برای بهبود
تشخیص
فایلهای
منبع و
فایلهای
تولیدشده
پس از اجرای
*latex استفاده
میکند.
عموماً توصیه میشود از این گزینه استفاده شود (یا متغیر $recorder فعال تنظیم گردد). اما این تنها در صورتی کار میکند که *latex از گزینهٔ -recorder پشتیبانی کند، که در مورد اکثر پیادهسازیهای فعلی صادق است.
نکتهای دربارهٔ نام فایل .fls: بیشتر پیادهسازیهای *latex یک فایل .fls با همان نام پایهٔ سند اصلی LaTeX تولید میکنند؛ مثلاً برای Document.tex، فایل .fls نامش Document.fls خواهد بود. با این حال، برخی پیادهسازیها در عوض فایلهایی با نام برنامه تولید میکنند، یعنی latex.fls یا pdflatex.fls. در این حالت دوم، latexmk فایل latex.fls یا pdflatex.fls را در فایلی با نام پایهٔ سند LaTeX اصلی، مثلاً Document.fls کپی میکند.
- $search_path_separator [See below for default]
- نویسهٔ
جداکنندهٔ
مسیرها در
متغیرهای
محیطی TEXINPUTS،
BIBINPUTS، و BSTINPUTS. این
متغیر
عمدتاً
زمانی توسط
latexmk استفاده
میشود که
گزینههای
-outdir، -output-directory،
-auxdir، و/یا -aux-directory
به کار رفته
باشند. در
این حالت،
latexmk باید
مسیرهای
جستجوی
اصلاحشدهٔ
مناسب را به
bibtex، dvipdf،
dvips، و *latex
منتقل کند.
[توضیحی برای خوانندگان مسلط به مباحث فنی: *latex در واقع نیازی به مسیر جستجوی اصلاحشده ندارد. اما، در کمال شگفتی، dvipdf و dvips نیاز دارند، چرا که گاهی فایلهای گرافیکی در دایرکتوریهای خروجی یا aux تولید میشوند.]
مقدار پیشفرض در MSWin و Cygwin برابر ';' و در سیستمعاملهای شبهیونیکس (شامل Linux و OS-X) برابر ':' است. معمولاً مقادیر پیشفرض رفتار درستی ارائه میدهند. اما در صورتی که سیستمعامل شما از یک نوع باشد و برخی نرمافزارهایتان تحت یک شبیهساز برای نوع دیگری از سیستمعامل اجرا شوند، ممکن است مشکلاتی به وجود آید؛ در این صورت باید بررسی کنید چه چیزی لازم است و $search_path_separator را صراحتاً تنظیم کنید. (البته این مورد برای سیستمعاملهای غیرمعمولی که جزو مجموعهٔ MSWin، Linux، OS-X، و Unix نیستند نیز صدق میکند.)
- $show_time [0]
- مشخص
میکند که
آیا زمان
صرفشده،
چه زمان کل
و چه برای
مراحل
جداگانه،
نمایش داده
شود یا خیر.
نکته: در MS Windows، این زمان ساعت دیواری (clock time) است. در سایر سیستمعاملها، زمان پردازنده (CPU time) استفادهشده (توسط latexmk و فرایندهای فرزندی که فراخوانی میکند) است. این وابستگی به سیستمعامل به دلیل محدودیتی در Windows است. اگر میخواهید استفاده از زمان ساعت را به جای زمان پردازنده اجبار کنید، میتوانید این مقدار را تنظیم کنید:
$times_are_clock = 1; - $silence_logfile_warnings [0]
- مشخص
میکند که
آیا پس از
اجرای *latex،
هشدارهای
موجود در
فایل گزارش
(log) دربارهٔ
ارجاعات و
مراجع
تعریفنشده
خلاصه شوند
یا خیر.
تنظیم $silence_logfile_warnings=0
خلاصهای
از هشدارها
را نمایش
میدهد (به
شرطی که
حالت خاموش
نیز تنظیم
نشده باشد)،
و این برای
یافتن
ارجاعات و
مراجع
تعریفنشده
بدون جستجو
در فایل log که
بسیار
پرحجمتر
است یا در
خروجی متنی
*latex مفید است.
اما این
خلاصه نیز
ممکن است
بیش از حد
آزاردهنده
باشد.
پیشفرض بر
این است که
این
هشدارها
ارائه
نشوند.
گزینههای
خط فرمان
-silence_logfile_warning_list و
-silence_logfile_warning_list- نیز
این متغیر
را تنظیم
میکنند.
توجه داشته باشید که تکرارهای متعدد برای یک شیء تعریفنشده در همان صفحه و همان خط، در قالب یک هشدار فشرده میشوند.
- $silent [0]
- اجرا به صورت بیصدا. تنظیم $silent روی 1 همان اثری را دارد که گزینههای -quiet یا -silent در خط فرمان دارند.
- $sleep_time [2]
- زمان توقف
(بر حسب
ثانیه) میان
بررسیهای
تغییر فایل
منبع هنگام
اجرا با
گزینهٔ -pvc.
در صورت
غیرصفر
بودن،
مقدار آن
تابع یک
مقدار
حداقل است
که توسط
متغیر $min_sleep_time
مشخص
میشود. اما
مقدار صفر
نیز مجاز
است.
مقدار دقیقاً 0 باعث میشود هیچ تأخیری میان بررسیهای مربوط به تغییر فایلهای منبع وجود نداشته باشد؛ این حالت معمولاً به استفادهٔ 100٪ از پردازنده میانجامد که ممکن است مطلوب نباشد.
در نسخههای قدیمی latexmk، مقدار پیشفرض 2 برای $sleep_time جهت ایجاد تعادلی معقول بین پاسخگویی در حالت -pvc و میزان مصرف پردازنده تنظیم شده بود. در رایانههای امروزی با پردازندههای چندهستهای پرسرعت، یک مقدار کوچکتر مانند 0.1 میتواند نتایج خوبی به همراه داشته باشد، بهویژه هنگام کار با اسناد کوچکی که ممکن است کامپایل آنها بسیار کمتر از یک ثانیه طول بکشد.
- $texfile_search [""]
- این یک
متغیر
منسوخ است
که با متغیر
@default_files
جایگزین
شده است.
جهت سازگاری با گذشته، اگر $texfile_search را تنظیم کنید، این متغیر رشتهای از نامفایلهای جداشده با فاصله است و سپس latexmk مقدار @default_files را با نامفایلهای موجود در $texfile_search که "*.tex" به آنها افزوده شده، جایگزین میکند.
- $success_cmd [undefined]
- مستندات متغیر $compiling_cmd را ببینید.
- $tmpdir [See below for default]
- دایرکتوری
ذخیرهٔ
فایلهای
موقتی که
ممکن است latexmk
در حین اجرا
تولید کند.
پیشفرض در MSWindows (شامل cygwin) تنظیم $tmpdir به مقدار اولین متغیر از میان متغیرهای محیطی TMPDIR یا TEMP در صورت وجود، و در غیر این صورت به دایرکتوری جاری است. در سایر سیستمعاملها (که انتظار میرود UNIX/Linux، شامل OS-X باشند)، پیشفرض مقدار متغیر محیطی TMPDIR در صورت وجود، و در غیر این صورت "/tmp" است..TP $use_make_for_missing_files [0] مشخص میکند که آیا پس از اجرای *latex، برای ساخت فایلهایی که وجود ندارند و وابستگی سفارشی برای آنها یافت نشده است، از make استفاده شود یا خیر. این گزینه معمولاً تنها زمانی مفید است که latexmk به عنوان بخشی از یک پروژهٔ بزرگتر که با استفاده از برنامهٔ make ساخته میشود، به کار رود.
توجه داشته باشید زمانی که یک فایل مفقود ساخته شد، در اجراهای بعدی latexmk هیچ فراخوانی دیگری برای بهروزرسانی آن فایل به make انجام نخواهد شد. مدیریت این مسئله وظیفهٔ یک Makefile مناسب است. برای چگونگی انجام این کار، بخش "USING latexmk WITH make" را ببینید. هدف از فراخوانی make توسط latexmk صرفاً تشخیص وابستگیها است.
- $user_deleted_file_treated_as_changed [0]
- مشخص
میکند که
آیا هنگام
بررسی
فایلهای
تغییریافته،
تغییر
وضعیت یک
فایل
کاربری از
موجود به
ناموجود
باید به
عنوان
تغییر تلقی
شود یا خیر.
مقدار پیشفرض 0 است، که به این معنی است که اگر یک فایل کاربری (برخلاف یک فایل تولیدشده) از زمان اجرای قبلی حذف شده باشد، نباید هیچ کامپایل مجددی انجام شود. دلیل این امر آن است که اجرای مجدد صرفاً یک خطا ایجاد میکند.
اگر مقدار 1 باشد، ناپدید شدن یک فایل کاربری به عنوان محرک اجرای مجدد تلقی میشود، اما تنها در حالت غیر preview-continuous.
اگر مقدار 2 باشد، ناپدید شدن یک فایل کاربری همواره محرک اجرای مجدد تلقی میشود.
- $view ["default"]
- مشخص میکند که در صورت استفاده از پیشنمایشگر، چه نوع فایلی باید پیشنمایش داده شود. مقادیر ممکن عبارتند از "default"، "dvi"، "hnt"، "ps"، "pdf" و "none". مقدار "default" به این معنی است که «بالاترین» نوع فایل از میان فایلهای تولیدشده استفاده میشود (از بین .dvi، .hnt، .ps و .pdf).
- $warnings_as_errors [0]
- به طور
معمول latexmk
رفتار latex را
در تلقی
مراجع و
ارجاعات
تعریفنشده
و مراجع
چندبار
تعریفشده
به عنوان
شرایطی که
هشدار
ایجاد
میکنند نه
خطا، تقلید
میکند.
متغیر $warnings_as_errors
کنترل
میکند که
آیا این
رفتار
تغییر کند
یا خیر.
هنگامی که این متغیر غیر صفر باشد، در صورتی که هر یک از فایلهای پردازششده هشداری دربارهٔ مشکلات ارجاعات یا مراجع (یعنی ارجاعات یا مراجع تعریفنشده، یا مراجع چندبار تعریفشده) بدهد، latexmk در پایان اجرای خود یک کد وضعیت غیر صفر را به سیستمعامل بازمیگرداند. این کار پس از آن است که latexmk تمام اجراهای لازم برای حل و فصل مراجع و ارجاعات را به پایان رسانده باشد. بنابراین، غیر صفر بودن $warnings_as_errors باعث میشود latexmk با چنین هشدارهایی مانند خطا برخورد کند، اما تنها زمانی که آنها در آخرین اجرای *latex رخ داده باشند و تنها پس از اتمام پردازش. مقدار غیر صفر برای $warnings_as_errors را میتوان با گزینهٔ خط فرمانی -Werror تنظیم کرد.
رفتار پیشفرض معمولاً در چرخهٔ معمول ویرایش-کامپایل-ویرایش رضایتبخش است. اما برای مثال، latexmk میتواند به عنوان بخشی از فرایند ساخت یک پروژهٔ بزرگتر نیز استفاده شود، مانند ایجاد مستندات در فرایند ساخت یک نرمافزار. در این صورت، معمولاً معقول است که با هشدارهای ارجاع و مراجع به عنوان خطاهایی برخورد شود که نیازمند لغو کل فرایند ساخت هستند. البته، از آنجا که برای حل مراجع و ارجاعات معمولاً به چندین بار اجرای *latex نیاز است، آنچه اهمیت دارد هشدارهای اجرای نخست نیست، بلکه هشدارهای آخرین اجرا است؛ latexmk این موضوع را به شکل مناسبی در نظر میگیرد.
علاوه بر این، هنگامی که از حالت preview-continuous استفاده میشود، مقدار غیر صفر برای $warnings_as_errors نحوهٔ استفاده از دستورهای $failure_cmd، $warning_cmd و $success_cmd را پس از یک کامپایل تغییر میدهد. اگر هشدارهای ارجاع یا مراجع وجود داشته باشد، اما هیچ خطای دیگری نباشد، رفتار به این صورت خواهد بود: اگر $warning_cmd تنظیم شده باشد، استفاده میشود. اگر تنظیم نشده باشد، در صورتی که $warnings_as_errors غیر صفر بوده و $failure_cmd تنظیم شده باشد، آنگاه $failure_cmd اجرا میشود. در غیر این صورت، چنانچه $success_cmd تنظیم شده باشد، استفاده خواهد شد. (توضیح فوق تا حدی پیچیده است، زیرا latexmk باید حالتی را که یک یا چند مورد از این دستورها تنظیم نشدهاند مدیریت کند.)
- $xdv_mode [0]
- اگر 1 باشد، یک نسخهٔ xdv از سند را با استفاده از xelatex تولید میکند.
- $xdvipdfmx ["xdvipdfmx -E -o %D %O %S"]
-
برنامهٔ ساخت یک فایل pdf از روی یک فایل xdv (در ترکیب با xelatex زمانی که $pdf_mode=5 باشد استفاده میشود).
- $xdvipdfmx_silent_switch ["-q"]
- سوئیچ(ها) برای برنامهٔ xdvipdfmx هنگامی که حالت بیصدا (silent) فعال است.
- $xelatex ["xelatex %O %S"]
- خط فرمان
برنامهٔ
پردازش LaTeX را
زمانی که به
برنامهٔ xelatex
نیاز باشد
مشخص
میکند.
برای برخی
ویژگیهای
خاص
استفادهٔ
latexmk از xelatex،
مستندات
گزینهٔ -xelatex
را ببینید.
نکتهای دربارهٔ xelatex: latexmk از xelatex برای ساخت یک فایل .xdv به جای .pdf استفاده میکند، که فایل .pdf در یک مرحلهٔ جداگانه ایجاد میشود. این امر با استفاده از گزینهٔ -no-pdf تحمیل میشود. اگر %O بخشی از دستور برای فراخوانی xelatex باشد، آنگاه latexmk گزینهٔ -no-pdf را به طور خودکار درج خواهد کرد؛ در غیر این صورت باید خودتان این گزینه را مشخص کنید. برای اینکه بدانید چرا هنگام استفاده از xelatex، latexmk به جای فایل .pdf یک فایل .xdv میسازد، مستندات مربوط به گزینهٔ -pdfxe را ببینید.
برای انجام یک پیکربندی هماهنگ برای همهٔ متغیرهای $dvilualatex، $hilatex، $latex، $pdflatex، $lualatex و $xelatex، بخش "Advanced Configuration" را ببینید.
- %xelatex_input_extensions
- این متغیر
پسوندهایی
را مشخص
میکند که
latexmk هنگام
مواجهه با
خطای پیدا
نشدن یک
فایل در
اجرای xelatex،
در صورتی که
فایل بدون
پسوند داده
شده باشد،
آنها را
امتحان
میکند. این
اتفاق
معمولاً
برای
دستورهای LaTeX
با ساختار
\input{file} یا \includegraphics{figure}،
در صورتی که
فایل منبع
مربوطه
وجود
نداشته
باشد، رخ
میدهد.
در این وضعیت، latexmk وابستگیهای سفارشی را برای ساخت فایل(های) مفقود جستجو میکند، اما آن را به پسوندهای مشخصشده توسط متغیر %xelatex_input_extensions محدود میسازد. پسوندهای پیشفرض عبارتند از 'tex'، 'pdf'، 'jpg' و 'png'.
برای اطلاعات دیگر که عیناً برای %xelatex_input_extensions نیز اعمال میشود، جزئیات مربوط به %latex_input_extensions را ببینید.
- $xelatex_silent_switch ["-interaction=batchmode"]
- سوئیچ(ها)
برای
برنامهٔ xelatex
(مشخصشده
در متغیر $xelatex)
هنگامی که
حالت
بیصدا
فعال است.
برای اطلاعات دیگر که عیناً برای $xelatex_silent_switch نیز اعمال میشود، جزئیات مربوط به $latex_silent_switch را ببینید..SH "وابستگیهای سفارشی (CUSTOM DEPENDENCIES)"
در هر فایل rc میتوان مجموعهای از وابستگیهای سفارشی را برای تبدیل یک فایل با یک پسوند به فایلی با پسوند دیگر پیکربندی کرد. یک نمونه از کاربرد این قابلیت، این است که به latexmk اجازه داده شود فایلی با پسوند .fig را جهت درج در فایل .tex، به .eps تبدیل کند.
تعریف یک وابستگی سفارشی (Defining a custom dependency):
روش قدیمی پیکربندی latexmk برای استفاده از یک وابستگی سفارشی، دستکاری مستقیم آرایهٔ @cus_dep_list بود که اطلاعات تعریفکنندهٔ وابستگیهای سفارشی را شامل میشود (برای جزئیات، بخش «Old Method of Defining Custom Dependencies» را ببینید). این روش همچنان کار میکند، اما دیگر ترجیح داده نمیشود.
روش بهتر، استفاده از زیربرنامههایی است که دستکاری آسان فهرست وابستگیهای سفارشی را ممکن میسازند. این زیربرنامهها عبارتند از:
add_cus_dep( fromextension, toextension, must, subroutine )
remove_cus_dep( fromextension, toextension )
show_cus_dep()
آرگومانها به شرح زیر هستند:
- from extension:
- پسوند فایلی که قرار است از آن تبدیل انجام شود (مانند «fig»). این پسوند بدون نقطه مشخص میشود.
- to extension:
- پسوند فایلی که به آن تبدیل میشود (مانند «eps»). این پسوند بدون نقطه مشخص میشود.
- must:
- اگر غیر صفر باشد، فایلی که از آن تبدیل صورت میگیرد باید وجود داشته باشد؛ اگر وجود نداشته باشد، latexmk پیام خطایی نمایش داده و خارج میشود، مگر اینکه گزینهٔ -f مشخص شده باشد. اگر must صفر باشد و فایل مبدأ وجود نداشته باشد، هیچ اقدامی صورت نمیگیرد. بهطور کلی، مقدار مناسب برای must صفر است.
- function:
- نام زیربرنامهای که latexmk باید برای انجام تبدیل فایل فراخوانی کند. نخستین آرگومان این زیربرنامه، نام پایهٔ (base name) فایلی است که باید بدون هرگونه پسوند تبدیل شود. زیربرنامهها با نحو Perl تعریف میشوند. تابع در صورت موفقیت باید 0 و در صورت شکست یک عدد غیر صفر را برگرداند.
طبیعتاً add_cus_dep یک وابستگی سفارشی را با پسوندهای مبدأ و مقصد مشخصشده اضافه میکند. اگر وابستگی سفارشی قبلاً تعریف شده باشد (برای نمونه، در فایل rc دیگری که زودتر خوانده شده است)، با تعریف جدید جایگزین میشود.
زیربرنامهٔ remove_cus_dep وابستگی سفارشی مشخصشده را حذف میکند. زیربرنامهٔ show_cus_dep موجب ارسال فهرستی از وابستگیهای سفارشی تعریفشدهٔ کنونی به خروجی صفحه نمایش میشود.
نحوه استفاده از وابستگیهای سفارشی (How custom dependencies are used):
نمونهای از یک قاعدهٔ وابستگی سفارشی هر زمان ایجاد میشود که latexmk تشخیص دهد اجرای *latex نیازمند خواندن فایلی (مانند یک فایل گرافیکی) است که پسوند آن با پسوند مقصد (to-extension) یک وابستگی سفارشی مطابقت دارد. سپس latexmk بررسی میکند که آیا فایلی با همان نام، اما با پسوند مبدأ (from-extension) متناظر، طبق آنچه در وابستگی سفارشی مشخص شده است، وجود دارد یا خیر. در صورت وجود، نمونهای متناظر از وابستگی سفارشی ایجاد میشود و پس از آن، هرگاه فایل مقصد (فایلی با پسوند مقصد) نسبت به فایل مبدأ متناظر قدیمی شده باشد، قاعده فراخوانی میگردد.
برای ساخت فایل مقصد جدید، زیربرنامهٔ Perl مشخصشده در قاعده با آرگومانی که نام پایهٔ فایلهای مورد نظر است، فراخوانی میشود. حالتهای ساده تنها شامل فراخوانی یک برنامهٔ بیرونی توسط یک زیربرنامه هستند؛ این کار را میتوان با دنبال کردن الگوهای زیر انجام داد، حتی توسط افرادی که دانشی از زبان برنامهنویسی Perl ندارند. البته متخصصان میتوانند کارهای بسیار پیچیدهتری انجام دهند.
یک مورد در مشخصات هر قاعدهٔ وابستگی سفارشی، که در بالا با «must» برچسبگذاری شده است، مشخص میکند که در صورت عدم وجود فایل مبدأ، قاعده چگونه باید اعمال شود.
هنگامی که latex گزارش میدهد یک فایل ورودی (برای نمونه، یک فایل گرافیکی) وجود ندارد، latexmk تلاش میکند یک فایل مبدأ و یک وابستگی سفارشی پیدا کند که بتوان از آن برای ساخت فایل مفقود استفاده کرد. اگر موفق شود، نمونهای از وابستگی سفارشی را ایجاد کرده و آن را برای ساخت فایل مفقود فرا میخواند، که پس از آن دور (pass) بعدی latex و غیره قادر به خواندن فایل تازهساختهشده خواهد بود.
نکته برای استفادهٔ پیشرفته: متغیر محیطیِ سیستمعامل، TEXINPUTS، میتواند برای تعیین مسیر جستجو جهت یافتن فایلها توسط latex و غیره استفاده شود. بهطور متناظر، هنگامی که فایلی مفقود گزارش میشود، latexmk علاوه بر دایرکتوری جاری، در دایرکتوریهای مشخصشده در TEXINPUTS نیز جستجو میکند تا فایل مبدأیی را بیابد که بتوان با نمونهای از یک وابستگی سفارشی، فایل مفقود را از روی آن ایجاد کرد.
تابع برای پیادهسازی وابستگی سفارشی، روش سنتی (Function to implement custom dependency, traditional method):
تابعی که یک وابستگی سفارشی را پیادهسازی میکند، اطلاعات فایلهای مورد پردازش را از دو طریق دریافت میکند. روش نخست از طریق تکآرگومان آن است؛ این آرگومان شامل نام پایهٔ فایلهای مبدأ و مقصد است. روش دوم در ادامه شرح داده شده است.
یک نمونهٔ ساده و معمول از کد در یک فایل راهاندازی rc با استفاده از روش اول به شرح زیر است:
add_cus_dep( 'fig', 'eps', 0, 'fig2eps' );
sub fig2eps {
system( "fig2dev -Leps \"$_[0].fig\"
\"$_[0].eps\"" );
}
خط اول یک وابستگی سفارشی اضافه میکند که فایلی با پسوند «fig» (ایجادشده توسط برنامهٔ xfig) را به یک فایل پستاسکریپت کپسولهشده (Encapsulated PostScript) با پسوند «eps» تبدیل میکند. خطوط باقیمانده زیربرنامهای را تعریف میکنند که تبدیل را به انجام میرساند. اگر قاعدهای برای تبدیل فایلهای «fig» به «eps» از قبل وجود داشته باشد (برای نمونه، از یک فایل راهاندازی که پیشتر خوانده شده است)، latexmk پیش از ساخت قاعدهٔ جدید، این قاعده را حذف خواهد کرد.
فرض کنید latexmk از این قاعده برای تبدیل فایل «figure.fig» به «figure.eps» استفاده میکند. در این صورت، زیربرنامهٔ fig2eps تعریفشده در کد بالا را با تکآرگومان «figure» که نام پایهٔ هر یک از فایلها است (احتمالاً همراه با جزء مسیر)، فراخوانی خواهد کرد. در Perl به این آرگومان با عنوان $_[0] اشاره میشود. در مثال بالا، این زیربرنامه از دستور system در Perl برای فراخوانی برنامهٔ fig2dev استفاده میکند. علامتهای نقلقول دوتایی در اطراف رشته، از ساختارهای زبان Perl هستند و نشان میدهند هر رشتهای که به صورت یک نام متغیر باشد (در این حالت $_[0])، باید با مقدار آن جایگزین شود.
اگر مقدار بازگشتی زیربرنامه غیر صفر باشد، latexmk فرض میکند که در طول اجرای زیربرنامه خطایی رخ داده است. در مثال بالا هیچ مقدار بازگشتی صریحی مشخص نشده است، و در عوض، مقدار بازگشتی همان مقدار حاصل از آخرین (و تنها) عبارت است؛ یعنی فراخوانی system، که در صورت موفقیت مقدار 0 را برمیگرداند.
اگر بهجای latex از pdflatex، lualatex یا xelatex استفاده میکنید، احتمالاً ترجیح میدهید فایلهای گرافیکی خود را به قالب pdf تبدیل کنید؛ در این حالت میتوانید کد بالا در فایل راهاندازی را با کد زیر جایگزین کنید:
add_cus_dep( 'fig', 'pdf, 0, 'fig2pdf' );
sub fig2pdf {
system( "fig2dev -Lpdf \"$_[0].fig\"
\"$_[0].pdf\"" );
}
نکته ۱: در خطوط فرمان ارائهشده در دستورات system در مثالهای بالا، علامتهای نقلقول دوتایی در اطراف نام فایلها درج شدهاند (که با '\"' در زبان Perl پیادهسازی شدهاند). این کار اجرای برنامه را در برابر نویسههای خاص در نام فایلها ایمن میسازد. در بسیاری از موارد این نقلقولها ضروری نیستند، یعنی میتوان آنها را حذف کرد. اما معمولاً نگهداشتن آنها ایمنتر است. اگرچه قواعد نقلقول میان سیستمعاملها، پوستههای فرمان و نرمافزارهای مختلف تفاوت دارد، اما علامتهای نقلقول در مثالهای بالا در مواردی که آزمایش کردهام مشکلی ایجاد نمیکنند.
نکته ۲: یک مورد که نقلقولها در آن اهمیت دارند زمانی است که فایلها در یک زیردایرکتوری قرار دارند و سیستمعامل شما Microsoft Windows است. در این حالت، نویسهٔ جداساز اجزای دایرکتوری میتواند اسلش رو به جلو '/' یا بکاسلش مرسومتر مایکروسافت '\' باشد. اسلشهای رو به جلو توسط latexmk ایجاد میشوند تا عملکرد صحیح آن در برابر نرمافزارهایی مانند MiKTeX که هر دو جداساز دایرکتوری را با هم ترکیب میکنند حفظ شود؛ اما استفادهٔ صحیح از آنها معمولاً مستلزم قرار دادن نام فایلها درون نقلقول است. (برای نمونهای از کاربرد هر دو جداساز دایرکتوری، یک فایل لاگ از اجرای MiKTeX (دستکم در نسخهٔ 2.9) را ببینید.)
نکته ۳: زیربرنامههای پیادهساز وابستگیهای سفارشی در مثالهای ارائهشده، تنها یک خط برای فراخوانی برنامهای خارجی دارند. این وضعیت معمول است. اما از آنجا که زیربرنامهها به زبان Perl هستند، در صورت نیاز میتوانید پردازشهای بسیار پیچیدهتری را پیادهسازی کنید..SS حذف وابستگیهای سفارشی، و مواقعی که ممکن است به آن نیاز داشته باشید: اگر وابستگیهای سفارشی عمومی مشخصی در فایل مقداردهی اولیه سیستم یا کاربر تعریف کرده باشید، ممکن است متوجه شوید که برای یک پروژه خاص نامطلوب هستند. بنابراین ممکن است بخواهید موارد غیرضروری را حذف کنید. وضعیتی که در آن این کار مطلوب خواهد بود زمانی است که چندین وابستگی سفارشی با پسوند مبدأ یکسان یا پسوند مقصد یکسان وجود داشته باشد. در این صورت، latexmk ممکن است موردی متفاوت از آنچه برای یک پروژه خاص مد نظر دارید را انتخاب کند. به عنوان مثال، برای حذف هر قاعده تبدیل «fig» به «eps» از دستور زیر استفاده میکنید:
remove_cus_dep( 'fig', 'eps' );
اگر مجموعههای پیچیدهای از وابستگیهای سفارشی دارید، ممکن است بخواهید فهرستی از وابستگیهای سفارشی را دریافت کنید. این کار با استفاده از خط
show_cus_dep();
در فایل مقداردهی اولیه انجام میشود.
تابع پیادهسازی وابستگی سفارشی، روشهای جایگزین:
تاکنون مثالهای توابع برای پیادهسازی وابستگیهای سفارشی از آرگومان تابع برای مشخص کردن نام پایه (base name) فایل تبدیلشده استفاده کردهاند. این روش از نسخههای بسیار قدیمی latexmk در دسترس بوده است و مثالهای متعددی از آن را میتوان، برای نمونه، در وب پیدا کرد.
با این حال در نسخههای جدیدتر latexmk، ساختار درونی پیادهسازی «قواعد» آن برای مراحل پردازش، از جمله وابستگیهای سفارشی، بسیار قدرتمندتر شد. تابع پیادهسازیکننده یک وابستگی سفارشی درون زمینهای ویژه اجرا میشود که در آن تعدادی متغیر و زیرروال (subroutine) اضافی تعریف شدهاند. مواردی که به صورت عمومی مستند شدهاند و هدف آنها پایداری بلندمدت است، در ادامه و تحت عنوان «Variables and subroutines for processing a rule» فهرست شدهاند.
نمونههایی از کاربرد آنها در مثالهای زیر درباره چندین فایل نمایه و واژهنامه آورده شده است.
تنها تبدیل فایل نمایه پیشساخته در latexmk، از فایل «.idx» نوشتهشده در یک اجرای *latex به فایل «.ind» است که باید در اجرای بعدی خوانده شود. اما برای مثال با بسته index.sty، میتوانید نمایههای اضافی با پسوندهایی که خودتان پیکربندی میکنید ایجاد کنید. Latexmk نمیداند چگونه این پسوندها را از اطلاعاتی که دارد استنتاج کند. اما میتوانید به سادگی یک وابستگی سفارشی بنویسید. برای نمونه اگر فایل لاتک شما از دستور «\newindex{special}{ndx}{nnd}{Special index}» استفاده میکند، باید کاری کنید که latexmk فایلهای با پسوند .ndx را به .nnd تبدیل کند. ابتداییترین روش، تعریف یک وابستگی سفارشی به صورت زیر است:
add_cus_dep( 'ndx', 'nnd', 0, 'ndx2nnd' );
sub ndx2nnd {
return system( "makeindex -o \"$_[0].nnd\"
\"$_[0].ndx\"" );
}
push @generated_exts, 'ndx', 'nnd';
به خط اضافهشده نسبت به مثالهای قبلی توجه کنید. این خط اضافه باعث میشود پسوندهای «ndx» و «nnd» به فهرست پسوندهای فایلهای تولیدشده افزوده شوند؛ سپس فایلهای نمایه اضافی با عملیات پاکسازی حذف خواهند شد.
اما اگر نمایههای باز هم بیشتری با پسوندهای متفاوت دیگر، مانند «adx» و «and» داشته باشید، برای هر جفت پسوند به یک تابع جداگانه نیاز خواهید داشت. این کار بسیار خستهکننده است. میتوانید از تابع Run_subst برای سادهسازی تعاریف و استفاده از یک تابع واحد بهره ببرید:
add_cus_dep( 'ndx', 'nnd', 0, 'dx2nd' );
add_cus_dep( 'adx', 'and', 0, 'dx2nd' );
sub dx2nd {
return Run_subst( "makeindex -o %D %S" );
}
push @generated_exts, 'ndx', 'nnd', 'adx', 'and';
همچنین میتوانید در عوض از دستور زیر استفاده کنید:
add_cus_dep( 'ndx', 'nnd', 0, 'dx2nd' );
add_cus_dep( 'adx', 'and', 0, 'dx2nd' );
sub dx2nd {
return Run_subst( $makeindex );
}
push @generated_exts, 'ndx', 'nnd', 'adx', 'and';
این مثال آخر از مشخصات دستور در $makeindex استفاده میکند، بنابراین هر سفارشیسازی که برای نمایه استاندارد انجام دادهاید، برای نمایههای اضافی شما نیز اعمال میشود.
فنون مشابهی را میتوان برای واژهنامهها نیز به کار برد.
کسانی از شما که تجربه کار با Makefileها را دارند، ممکن است نگران شوند که فایل .ndx در حین اجرای *latex نوشته میشود و همیشه جدیدتر از آخرین .nnd خواندهشده است. بنابراین به نظر میرسد که .nnd همواره قدیمی است. این وضعیتِ وابستگیهای دَوَرانی، جزء جداییناپذیر لاتک است و یکی از مسائلی است که latexmk برای غلبه بر آن برنامهریزی شده است. این ابزار محتویات فایلها را (با استفاده از مجموع مقابلهای/checksum) بررسی میکند و تنها زمانی بازسازی را انجام میدهد که محتوای فایل واقعاً تغییر کرده باشد.
البته اگر تصمیم بگیرید دادههای تصادفی در .nnd (یا فایل .aux و غیره) بنویسید که در هر اجرای جدید تغییر کند، دچار مشکل خواهید شد. برای متخصصان واقعی: اگر مجبورید با چنین مشکلاتی سر و کار داشته باشید، %hash_calc_ignore_pattern را بررسی کنید.
روش قدیمی تعریف وابستگیهای سفارشی:
در نسخههای بسیار قدیمیتر latexmk، تنها روش تعریف وابستگیهای سفارشی، دستکاری مستقیم جدول وابستگیهای سفارشی بود. این جدول در آرایه @cus_dep_list قرار دارد. این آرایه شامل رشتهها است و هر رشته در آرایه دارای چهار بخش است که با فاصله از هم جدا شدهاند: پسوند مبدأ، پسوند مقصد، بخش «must»، و نام زیرروال برای وابستگی سفارشی. همه این موارد در بالا تعریف شدهاند.
نمونهای از روش قدیمی تعریف وابستگیهای سفارشی به صورت زیر است. این کد در یک فایل RC برای اطمینان از تبدیل خودکار فایلهای .fig به فایلهای .eps است:
push @cus_dep_list, "fig eps 0 fig2eps";
sub fig2eps {
return system( "fig2dev -Lps \"$_[0].fig\"
\"$_[0].eps\"" );
}
این روش همچنان کار میکند و تقریباً معادل کدی است که قبلاً با استفاده از زیرروال add_cus_dep ارائه شد. با این حال، روش قدیمی هیچ وابستگی سفارشی قبلی را برای همان تبدیل حذف نمیکند. بنابراین روش جدید ترجیح داده میشود..SH "پیکربندی پیشرفته: برخی منابع اضافی و ترفندهای پیشرفته (ADVANCED CONFIGURATION: SOME EXTRA RESOURCES AND ADVANCED TRICKS)"
برای اغلب اهداف، پیکربندی ساده برای latexmk در چارچوب مثالهای ارائهشده کافی است. اما گاهی به رویکردهای پیچیدهتری نیاز پیدا میکنید. در این بخش، به برخی امکانات تکمیلی اشاره میکنم. به طور کلی برای استفاده از این قابلیتها، باید به زبان Perl تسلط داشته باشید، زیرا این همان زبانی است که در فایلهای rc استفاده میشود.
در این بخش، ابتدا شرحی از تعدادی متغیر و زیرروال ارائه میشود که علاوه بر امکانات دیگر، دسترسی به ساختارهای داده داخلی latexmk را برای مدیریت وابستگیها فراهم میکنند. سپس سازوکار قلاب (hook) توضیح داده میشود که از طریق آن در نقاط مشخصی از پردازش، latexmk میتواند زیرروالهای تعریفشده توسط کاربر را فراخوانی کند.
همچنین بخش DEALING WITH ERRORS, PROBLEMS, ETC. را ببینید. علاوه بر این، به مثالهای موجود در دایرکتوری example_rcfiles در توزیعهای latexmk مراجعه کنید. حتی اگر هیچیک از مثالها دقیقاً برای وضعیت شما صدق نکنند، میتوانند ایدههای مفیدی به شما بدهند.
متغیرها و زیرروالها برای پردازش یک قاعده (Variables and subroutines for processing a rule)
هر گام در پردازش، یک «قاعده» (rule) نامیده میشود. یکی از احتمالات برای پیادهسازی پردازش یک قاعده، استفاده از یک زیرروال Perl است. این امر همواره برای وابستگیهای سفارشی برقرار است. همچنین برای هر قاعده دیگر، میتوانید با افزودن پیشوند "internal" به مشخصات دستور، از یک زیرروال استفاده کنید -- بخش FORMAT OF COMMAND SPECIFICATIONS را ببینید.
هنگامی که از یک زیرروال برای پردازش یک قاعده استفاده میکنید، مسلماً تمامی امکانات برنامهنویسی Perl در دسترس خواهند بود. علاوه بر این، برخی از متغیرها و زیرروالهای داخلی latexmk نیز قابل دسترسی هستند. موارد فهرستشده در زیر برای استفاده کاربران (پیشرفته) در نظر گرفته شدهاند و مشخصات آنها عموماً در بهروزرسانیهای بعدی پایدار خواهد ماند. به طور کلی، متغیرها باید به عنوان فقطخواندنی تلقی شوند: تغییر مقادیر آنها میتواند پیامدهای نامطلوبی به همراه داشته باشد، زیرا احتمال دارد یکپارچگی عملیات latexmk را مختل کند.
- $rule
- این متغیر حاوی نام قاعده است، همانطور که برای latexmk شناخته میشود. توجه داشته باشید که محتوای دقیق این متغیر برای یک قاعده مشخص ممکن است به نسخه latexmk وابسته باشد.
- $$Pbase
- این مقدار،
نام پایه (basename)
را برای
قاعده
تعیین
میکند. به
طور کلی،
نام
فایلهای
تولیدشده
را تعیین
مینماید.
برای
نمونه، در
یک اجرای *latex،
نام فایل .log
حاصل پیوند
دایرکتوری
aux با نام
پایه و سپس
`.log` خواهد
بود.
برای یک قاعده *latex، نام پایه فاقد مؤلفه دایرکتوری است. برای سایر قواعد، مؤلفه دایرکتوری (در صورت وجود) نیز لحاظ میشود.
این تفاوت (آزاردهنده) مربوط به تفاوت در نحوه رفتار دستورهای فراخوانیشده توسط latexmk است، هنگامی که خط فرمان شامل نامی برای فایل مبدأ باشد که مؤلفه دایرکتوری دارد. برای دستورهای *latex، دایرکتوریِ فایل مبدأ هیچ ارتباطی به مؤلفه دایرکتوری فایلهای تولیدشده ندارد، و در عوض مؤلفه دایرکتوری آنها توسط مقادیر گزینههای -aux-directory و/یا -output-directory تعیین میشود.
در مقابل، بسیاری از برنامههای دیگر (مانند biber و bibtex) فایلهای تولیدی خود را تنها با تغییر پسوند در همان دایرکتوریِ فایل مبدأ قرار میدهند.
به دو علامت دلار دقت کنید: از نظر اصطلاحات Perl، متغیر $Pbase یک ارجاع (reference) به متغیری است که نام پایه را در بر دارد. علامت دلار دوم، ارجاع را بازگشایی میکند (dereference) تا مقدار واقعی را ارائه دهد. (یک ارجاع مشابه اشارهگرها عمل میکند، و حرف `P` (مخفف `pointer`) در ابتدای نام متغیر، قراردادی است که در latexmk برای نشان دادن ارجاعی بودن متغیر به کار میرود.)
- $$Pdest
- نام فایل خروجی اصلی (در صورت وجود) را ارائه میدهد. به دو علامت دلار توجه داشته باشید.
- $$Psource
- نام فایل مبدأ اولیه را ارائه میدهد. به دو علامت دلار توجه داشته باشید.
- add_hook( <stack_name>, <subroutine> )
- برای
جزئیات
بیشتر بخش
«Hooks» را
ببینید.
این تابع، زیرروال مشخصشده در آرگومان دوم را به پشته قلابهای latexmk که با نام پشته مشخص شده است اضافه میکند. در صورت موفقیت مقدار 1 و در غیر این صورت صفر برمیگرداند (برای نمونه، اگر پشته قلاب مشخصشده وجود نداشته باشد).
زیرروال میتواند با یک ارجاع به زیرروال مشخص شود، مانند:
add_hook( 'after_xlatex_analysis', mmz_analyze )مشروط بر اینکه زیرروال mmz_analyze در فایل rc تعریف شده باشد.
زیرروال همچنین میتواند به وسیله یک رشته که مقدار آن نام زیرروال است مشخص شود، مانند:
add_hook( 'after_xlatex_analysis', 'mmz_analyze' )در حالتهای ساده، زیرروال میتواند یک زیرروال بینام باشد که مستقیماً در فراخوانی add_hooks تعریف شده است:
add_hook( 'after_main_pdf', sub{ print "TEST\n"; return 0; } );دقت داشته باشید که در صورت موفقیت، زیرروال باید مقدار 0 برگرداند (مانند فراخوانی تابع system در Perl)، بنابراین معمولاً این مقدار باید به طور صریح بازگردانده شود. اگر زیرروال قلاب مقداری غیر از صفر برگرداند، latexmk آن را به عنوان یک شرایط خطا در نظر میگیرد.
- ensure_path( var, values ...)
-
پارامتر اول نام یکی از متغیرهای محیطی سیستم برای مسیرهای جستجو است. سایر پارامترها مقادیری هستند که باید در آن متغیر قرار گیرند. برای هر یک از پارامترهای مقدار، چنانچه از پیش در متغیر موجود نباشد، به ابتدای متغیر افزوده میشود (پیشوند میگردد)؛ در این صورت اگر متغیر محیطی از قبل وجود نداشته باشد، ایجاد میشود. برای جداسازی مقادیر، نویسه متناسب با سیستمعامل به کار میرود -- متغیر پیکربندی $search_path_separator را ببینید.
مثال:
ensure_path( 'TEXINPUTS', './custom_cls_sty_files//' );(در این مثال، «//» پایانی طبق مستندات سیستمهای TeX بدین معناست که *latex باید فایلها را در دایرکتوری مشخصشده و تمامی زیردایرکتوریهای آن جستجو کند.)
از نظر فنی ensure_path با مقداردهی متغیر $ENV{var} در Perl عمل میکند که در آن var نام متغیر هدف است. مقدار تغییریافته سپس به عنوان یک متغیر محیطی به تمام برنامههای فراخوانیشده ارسال میشود.
- pushd( path ), popd()
- این
زیرروالها
زمانی
استفاده
میشوند که
نیاز باشد
دایرکتوری
کاری به
صورت موقت
تغییر کند،
مانند:
pushd( 'some_directory' );
... پردازش انجامشده با 'some_directory' به عنوان دایرکتوری کاری
popd()آنها دقیقاً همان عملکرد دستورهایی با همین نام را در شلهای خط فرمان سیستمعامل مانند bash در Unix و cmd.exe در Windows ارائه میدهند.
- rdb_add_generated( file, ... )
- این
زیرروال
باید در
بستر (context) یک
قاعده به
کار گرفته
شود، یعنی
از داخل
زیرروالی
که پردازش
یک قاعده را
انجام
میدهد. این
مورد در
خصوص
زیرروال
پیادهسازیکننده
یک وابستگی
سفارشی یا
زیرروالی
که با
استفاده از
کلیدواژه
"internal" در
مشخصات
دستور
(مانند آنچه
در متغیر $latex
است)
فراخوانی
شده، صدق
میکند.
آرگومانهای آن توالیای از نام فایلها هستند که در طول اجرای قاعده تولید میشوند. این نامها ممکن است حاصل تجزیهوتحلیل نتایج اجرا (مثلاً در یک فایل log) یا ناشی از آگاهی از ویژگیهای قاعده خاص باشند. فراخوانی rdb_add_generated با این نام فایلها تضمین میکند که فایلهای مذکور در ساختارهای داده داخلی latexmk به عنوان فایلهای تولیدشده توسط قاعده علامتگذاری شوند. اساساً اگر فایلها از پیش به عنوان تولیدشده علامتگذاری شده باشند، اقدامی صورت نمیگیرد.
یکی از اهداف اصلی استفاده از این زیرروال، شرایطی است که یک فایل تولیدشده، همزمان فایل مبدأ قاعده دیگری نیز باشد، تا latexmk بتواند اطلاعات وابستگی را در شبکه قواعد خود به درستی پیوند دهد.
نکته: بر خلاف برخی زیرروالهای دیگر در این بخش، هیچ آرگومانی برای قاعده در rdb_add_generated وجود ندارد. در عوض، این زیرروال باید در طول پردازش یک قاعده، هنگامی که latexmk بستر مناسب (یعنی متغیرهای مناسب) را مهیا ساخته است فراخوانی شود. در مقابل، زیرروالهای دارای آرگومان قاعده میتوانند در خارج از بستر قاعده نیز استفاده شوند.
- rdb_ensure_file( $rule, file )
- این
زیرروال
اطمینان
حاصل
میکند که
فایل
دادهشده
در میان
فایلهای
مبدأ برای
قاعده
مشخصشده
قرار دارد.
معمولاً
زمانی
استفاده
میشود که
در طول
پردازش یک
قاعده،
مشخص شود یک
فایل اضافی
در میان
وابستگیهایی
است که latexmk
باید از
آنها مطلع
باشد، اما
روشهای
پیشفرض آن
موفق به
یافتن این
وابستگی
نمیشوند.
تقریباً
همیشه
اولین
آرگومان
نام
قاعدهای
است که در
حال حاضر
پردازش
میشود،
بنابراین
مناسب است
که با $rule
مشخص گردد.
برای مشاهده مثالهایی از کاربرد آن، به برخی از فایلهای موجود در دایرکتوری example_rcfiles در توزیع latexmk مراجعه کنید. در حال حاضر مواردی که از این زیرروال استفاده میکنند عبارتند از bib2gls-latexmkrc، exceltex_latexmkrc و texinfo-latexmkrc. این موارد وضعیتهای متداولی را نشان میدهند که در آنها پردازش عادی latexmk در شناسایی برخی فایلهای مبدأ اضافی ناموفق است.
توجه داشته باشید که rdb_ensure_file بر خلاف سایر زیرروالهای این بخش، تنها یک آرگومان نام فایل میپذیرد. اگر میخواهید عملکرد آن را بر چندین فایل اعمال کنید، باید برای هر فایل یک بار rdb_ensure_file را فراخوانی نمایید.
- rdb_ensure_files_here( file, ... )
- مشابه زیرروال rdb_ensure_files است، به جز اینکه (الف) فرض میکند بستر متعلق به یک قاعده است و فایلها باید به فهرست مبدأ آن قاعده افزوده شوند؛ (ب) امکان تعیین چندین فایل مجاز است..TP rdb_remove_files( $rule, file, ... ) این زیرروال یک یا چند فایل را از فهرست وابستگیهای قاعدهٔ دادهشده حذف میکند.
- rdb_remove_generated( file, ... )
- این زیرروال باید در زمینهٔ (context) یک قاعده استفاده شود، یعنی از درون زیرروالی که پردازش یک قاعده را انجام میدهد فراخوانی گردد. این تابع عمل عکس rdb_add_generated را انجام میدهد. اثر آن اطمینان از این است که نامهای فایل دادهشده در ساختارهای دادهٔ درونی latexmk به عنوان فایلهای تولیدشده توسط قاعده فهرست نشوند.
- rdb_list_source( $rule )
- این زیرروال فهرست فایلهای منبع (یعنی فهرست وابستگیها) را برای قاعدهٔ مشخصشده بازمیگرداند.
- rdb_set_source( $rule, file, ... )
- rdb_set_source( $rule, @files )
- این زیرروال فهرست وابستگیهای قاعدهٔ دادهشده را روی فایلهای مشخصشده تنظیم میکند. اطلاعات فایلهایی که از قبل در فهرست بودهاند تغییر نمیکند. فایلهایی که در فهرست نبودهاند به آن اضافه میشوند. فایلهای موجود در فهرست وابستگی قبلی که در فهرست فایل جدید مشخص نشدهاند، از فهرست وابستگی حذف میشوند.
- Run_subst( command_spec )
- این زیرروال دستور مشخصشده توسط command_spec را اجرا میکند. این مشخصات رشتهای در قالب ذکرشده در بخش «قالب مشخصات دستور» (Format of Command Specifications) است. یک اقدام مهم Run_subst اعمال جایگزینیها برای نگهدارندههای مکان است، مانند %S و %D برای فایلهای مبدأ و مقصد؛ این موارد پیش از اجرای دستور جایگزین میشوند. علاوه بر این، دستور پس از جایگزینی روی صفحه نمایش چاپ میشود، مگر اینکه latexmk در حالت بیصدا (silent) در حال اجرا باشد.
- test_gen_file_time ( <file> )
- این
زیرروال در
زمینهٔ یک
قاعده
استفاده
میشود.
بسته به
اینکه آیا
فایلی با
نام
دادهشده
هم وجود
دارد و هم
در آخرین
اجرای
قاعده
تولید شده
است یا خیر،
مقدار درست
(true) یا نادرست
(false) را
بازمیگرداند.
اگر
زیرروال false
برگرداند
اما فایل
وجود داشته
باشد، به
این معنی
است که فایل
باقیماندهای
از یک اجرای
پیشین است.
آزمون برای تولید شدن یک فایل در اجرای فعلی بر این اساس است که آیا زمان اصلاح (modification time) فایل حداقل به اندازهٔ زمان شروع اجرای قاعده تازه هست یا خیر. دقّت و تفکیکپذیری مقادیر زمان اصلاح در سیستمهای فایل نیز در نظر گرفته میشود. برای جزئیات به توضیحات متغیر $filetime_causality_threshold مراجعه کنید.
علاوه بر این، latexmk احتمال میزبانی فایلها روی رایانهای متفاوت از رایانهٔ اجراکنندهٔ latexmk و در نتیجه عدم تطابق ساعت سیستمهای دو رایانه را در نظر میگیرد. Latexmk هرگونه ناهماهنگی چشمگیر را بهطور خودکار تشخیص داده (و گزارش میکند) و آن را تصحیح مینماید.
تنظیم هماهنگ دستورها برای *latex (Coordinated Setting of Commands for *latex)
برای تنظیم تمام متغیرهای $dvilualatex، $hilatex، $latex، $pdflatex، $lualatex و $xelatex روی یک الگوی مشترک، میتوانید از یکی از زیرروالهای std_tex_cmds، alt_tex_cmds و set_tex_cmds استفاده کنید.
برای دریافت دستورهای استاندارد، از عبارت زیر استفاده کنید:
&std_tex_cmds;
این کار منجر به $latex = 'latex %O %S' و رفتاری مشابه برای $dvilualatex، $hilatex، $pdflatex، $lualatex و $xelatex میشود. به علامت آمپرسند (&) در فراخوانی توجه کنید؛ این علامت به Perl نشان میدهد که یک زیرروال در حال فراخوانی است. (استفاده از این زیرروال به شما امکان میدهد بازتعریفهای قبلی متغیرهای $latex و غیره را که ممکن است در یک فایل rc خواندهشده در مراحل قبلی رخ داده باشد، باطل و بازنویسی کنید.)
برای اینکه بتوانید از رشتهٔ ارائهشده توسط گزینهٔ -pretex (در صورت وجود) استفاده کنید، میتوانید از این دستور بهره ببرید:
&alt_tex_cmds;
این کار منجر به $latex = 'latex %O %P' و غیره میشود. مجدداً به علامت آمپرسند در فراخوانی توجه کنید؛ این علامت به Perl نشان میدهد که یک زیرروال در حال فراخوانی است.
یک روش کلیتر برای مشخص کردن متغیرها استفاده از عبارت زیر است:
set_tex_cmds( 'CMD_SPEC' );
در اینجا CMD_SPEC همان خط فرمان بدون نام برنامه است. این کار منجر به $latex = 'latex CMD_SPEC' و رفتاری مشابه برای $pdflatex و غیره میشود. (در اینجا نیازی به علامت آمپرسند پیش از نام زیرروال نیست، زیرا پرانتزها به Perl نشان میدهند که یک زیرروال فراخوانی میشود.)
نمونهای که گزینهٔ --interaction=batchmode را برای دستورهای *latex فراهم میکند به این صورت خواهد بود:
set_tex_cmds( '--interaction=batchmode %O %S' );
این کار منجر به $latex = 'latex --interaction=batchmode %O %S ' و غیره میشود. توجه داشته باشید هنگامی که مانند اینجا '%O' پس از گزینهٔ افزوده ظاهر میشود، گزینههای ارائهشده در خط فرمان به latexmk میتوانند گزینهٔ ارائهشده در اینجا را بازنویسی و خنثی کنند.
خط فرمان عمومیتری را میتوان با استفاده از جاینگهدار '%C' در CMD_SPEC تنظیم کرد. عبارت '%C' با نام پایهٔ دستور، یعنی هرکدام از موارد 'latex'، 'pdflatex' و غیره که مناسب باشد، جایگزین میشود. (بیش از یک بار تکرار '%C' مجاز است.) به عنوان نمونه برای استفاده از نسخههای توسعه/پیشانتشار latex و غیره که نامهایی مانند 'latex-dev'، 'pdflatex-dev' و غیره دارند، میتوانید بنویسید:
set_tex_cmds( '%C-dev %O %S' );
این کار منجر به $latex = 'latex-dev %O %S' و غیره میشود. (برنامههای پیشانتشار مانند latex-dev و غیره در توزیعهای کنونی TeXLive و MiKTeX ارائه میشوند.)
ابزار latexmk روشی را برای فراخوانی زیرروالهای تعریفشده توسط کاربر در نقاط خاصی از پردازش فراهم میکند. از این موارد میتوان برای پیکربندی رفتار و اقدامات مناسب فراتر از رفتار عادی latexmk استفاده کرد. برای مشاهده نمونهای مناسب از نحوه استفاده از آنها جهت سازگاری رفتار latexmk با بستههای خاص، فایل memoize_latexmkrc را در زیردایرکتوری example_rcfiles از توزیع latexmk ببینید. (در یک نصب استاندارد TeXLive، این زیردایرکتوری در مسیر texmf-dist/doc/support/latexmk/ یافت میشود).
سازوکار قلاب مکملی برای روش بازتعریف رشتههای دستوری مانند $pdflatex و غیره است. این دو روش دارای دامنههای کاربردی همپوشان هستند.
توجه داشته باشید که سازوکار قلاب بهتازگی در نگارش 4.84 از latexmk عمومی شده است. این سازوکار به موازات کسب تجربه بیشتر، دستخوش تغییر و بهبود خواهد بود.
قلابها در پشتههای نامگذاریشده سازماندهی شدهاند و یک زیرروال قلاب با استفاده از زیرروال add_hook در latexmk (که در بالا مستند شده است) به یک پشته معین افزوده میشود. پشتههای موجود در حال حاضر به شرح زیر هستند که تقریباً به ترتیبی که در پردازش یک سند با آنها مواجه میشویم فهرست شدهاند:
- before_xlatex
- زیرروالهای این پشته قلاب درست پیش از اجرای برنامههای *latex فراخوانی میشوند.
- after_xlatex
- زیرروالهای این پشته قلاب پس از اجرای برنامههای *latex فراخوانی میشوند. پیش از فراخوانی زیرروالها، latexmk مقداری پسپردازش فوری انجام داده است؛ به عنوان مثال اگر $emulate_aux روی ۱ تنظیم شده باشد، فایل pdf تولیدشده را از دایرکتوری aux به دایرکتوری خروجی منتقل میکند.
- after_xlatex_analysis
- زیرروالهای این پشته قلاب پس از اینکه latexmk تحلیل وابستگیهای خود را متعاقب اجرای برنامههای *latex به پایان رساند، فراخوانی میشوند. زیرروالهای این پشته روشی مفید برای افزودن مواردی به اطلاعات وابستگی بستههای خاص فراهم میکنند که latexmk بهطور خودکار با آنها تعامل ندارد.
- after_main_pdf
- زیرروالهای این پشته قلاب پس از یکی از قواعدی که فایل pdf سند را میسازد فراخوانی میشوند. (این امر شامل هر یک از pdflatex، lualatex، dvipdf، ps2pdf و xdvipdfmx است).
- cleanup
- زیرروالهای
موجود در
این پشته
قلاب هر
زمان که latexmk در
شرف انجام
عملیات
پاکسازی (cleanup)
باشد
فراخوانی
میشوند.
برای مثال
هنگامی که
سازوکارهای
عمومی latexmk
برای تعیین
فایلهای
حذفی
انعطاف
لازم را
ندارند،
میتوان از
آنها برای
تطبیق
فایلهای
حذفشونده
با مشخصات
خاص
بستهها
استفاده
کرد.
این زیرروالها پیش از انجام هرگونه حذف فایل توسط خود latexmk فراخوانی میشوند؛ بنابراین زیرروالهای قلاب به تمام فایلهای تولیدشده که حاوی اطلاعات خاص بسته هستند دسترسی دارند.
- cleanup_extra_full
- زیرروالهای این پشته قلاب علاوه بر موارد موجود در پشته cleanup، هر زمان که قرار باشد یک عملیات پاکسازی کامل انجام شود (یعنی عملیاتی که شامل فایلهای pdf، ps و غیره است) فراخوانی میشوند. آنها بلافاصله پس از زیرروالهای پشته cleanup، اما همچنان پیش از آنکه latexmk اقدام به حذف فایلهای خود کند، فراخوانی میشوند.
(هر پشته دیگری که در latexmk.pl تعریف شده باشد اما در بالا فهرست نشده باشد، باید آزمایشی و مشمول تغییر در نظر گرفته شود).
هر زیرروال باید در صورت موفقیت مقدار 0 و در صورت شکست مقداری غیرصفر برگرداند. این رفتار با قرارداد مورد استفاده برای اجرای برنامهها (برای مثال، توسط زیرروال system در Perl) و قرارداد متناظر مورد استفاده برای زیرروالهای وابستگیهای سفارشی در latexmk مطابقت دارد.
برای بیشتر پشتههای قلاب، زیرروالها در بافت یک قاعده و با متغیرهای تعریفشدهای مانند $rule فراخوانی میشوند. با این حال، برخی از پشتههای قلاب، مانند پشتههای پاکسازی، از خارج از هرگونه قاعدهای فراخوانی میگردند؛ و latexmk متغیرهای مربوطه را طوری تنظیم میکند که به وظیفه کلی (یعنی پردازش یک فایل اصلی .tex مشخص) اشاره داشته باشند.
پیکربندی پیشرفته: استفاده از latexmk با make
این بخش تنها برای کاربران پیشرفتهای در نظر گرفته شده است که از برنامه make برای پروژههای پیچیده، مانند توسعه نرمافزار، با وابستگیهای مشخصشده توسط Makefile استفاده میکنند.
اکنون وظیفه اصلی latexmk اجرای برنامههای مناسب برای ساخت یک نگارش قابل مشاهده از سند LaTeX است. با این حال، برنامه معمول make حداقل به دو دلیل برای این منظور مناسب نیست. نخست اینکه استفاده از LaTeX شامل وابستگیهای دوار (مثلاً از طریق فایلهای .aux) است و این موارد توسط برنامه استاندارد make قابل پردازش نیستند. دوم اینکه در یک سند بزرگ، مجموعه فایلهای مبدأ ممکن است بهطور مکرر تغییر کند، بهویژه در مورد فایلهای گرافیکی پیوستشده؛ در چنین شرایطی، بهروز نگهداشتن دستی Makefile نامناسب و مستعد خطاست، بهخصوص زمانی که وابستگیها میتوانند بهطور خودکار تعیین شوند. Latexmk هر دوی این مشکلات را بهشکلی استوار حل میکند.
بنابراین برای بسیاری از اسناد استاندارد LaTeX، ابزار latexmk میتواند بهتنهایی و بدون برنامه make مورد استفاده قرار گیرد. در یک پروژه پیچیده، تنها کافی است به شکل مناسب پیکربندی شود. یک پیکربندی استاندارد این است که وابستگیهای سفارشی برای ساخت فایلهای گرافیکی از فایلهای مبدأ آنها (مثلاً آنهایی که توسط برنامه xfig ایجاد شدهاند) تعریف شوند. وابستگیهای سفارشی در واقع معادل قواعد الگو (pattern rules) در Makefileها برای latexmk هستند.
با این حال، پروژههایی وجود دارند که استفاده از Makefile برای آنها مناسب است و دانستن نحوه استفاده از latexmk از درون یک Makefile مفید خواهد بود. یک نمونه معمول، تولید مستندات برای یک پروژه نرمافزاری است. احتمالاً تعامل با سایر قواعد موجود در Makefile میتواند بسیار پیچیده باشد؛ به عنوان مثال اگر برخی از فایلهای مبدأ سند LaTeX توسط نرمافزار پروژه تولید شوند.
در این بخش، چند نمونه از چگونگی فراخوانی سودمند latexmk از یک Makefile آورده شده است. این مثالها از ویژگیهای خاص نگارشهای فعلی GNU make استفاده میکنند که در هر دو سیستمعامل لینوکس و OS-X پیشفرض است. ممکن است برای سایر نگارشهای make نیاز به اصلاحاتی داشته باشند.
سادهترین روش، واگذاری تمامی وظایف مربوطه به latexmk است، همانطور که برای یک سند ساده LaTeX مناسب است. برای این منظور، یک Makefile مناسب به صورت زیر است:
.PHONY : FORCE_MAKE
all : try.pdf
%.pdf : %.tex FORCE_MAKE
latexmk -pdf -dvi- -ps- $<
(توجه: خط آخر باید با یک کلید tab شروع شود تا Makefile به درستی کار کند!) طبیعتاً، اگر ساخت try.pdf از فایل LaTeX مرتبط با آن try.tex تنها وظیفه مد نظر بود، معمولاً استفاده مستقیم از latexmk بدون Makefile بهتر میبود. مزیت استفاده از Makefile برای یک سند LaTeX در پروژههای بزرگتر مشخص میشود؛ جایی که خطوطی مانند بالا تنها بخش کوچکی از یک Makefile بزرگتر خواهند بود.
مثال بالا شامل یک قاعده الگو برای ساخت یک فایل .pdf از یک فایل .tex است و طوری تعریف شده است که از latexmk به روشی مشخص استفاده کند. یک هدف پیشفرض مرسوم به نام «all» با پیشنیاز try.pdf وجود دارد. بنابراین زمانی که make فراخوانی میشود، بهطور پیشفرض try.pdf را میسازد. تنها پیچیدگی این است که ممکن است فایلهای مبدأ متعددی فراتر از try.tex وجود داشته باشند، اما این فایلها در Makefile مشخص نشدهاند؛ در نتیجه تغییرات در آنها بهتنهایی باعث فراخوانی latexmk نخواهد شد. در عوض، این قاعده الگو به یک پیشنیاز ساختگی («phony») با نام FORCE_MAKE مجهز شده است؛ این امر باعث میشود قاعده همیشه قدیمی تلقی شود تا latexmk همواره اجرا گردد. این latexmk است که تصمیم میگیرد آیا اقدامی لازم است یا خیر؛ مثلاً اجرای دوباره pdflatex. در عمل Makefile تمام تصمیمها را به latexmk واگذار میکند، در حالی که make به جز فایل اصلی LaTeX برای سند، هیچ شناختی از فهرست فایلهای مبدأ ندارد. اگر برای مثال فایلهای گرافیکی وجود دارند که باید ساخته شوند، این فایلها باید توسط وابستگیهای سفارشی پیکربندیشده در latexmk ساخته شوند.
اما در شرایط پیچیدهتر به راهحل بهتری نیاز است؛ مثلاً هنگامی که ساخت فایلهای گرافیکی باید توسط قواعد موجود در Makefile مشخص شود. برای این کار، میتوان از یک Makefile مانند زیر استفاده کرد:
TARGETS = document1.pdf document2.pdf
DEPS_DIR = .deps
LATEXMK = latexmk -recorder -use-make -deps \
-e 'warn qq(In Makefile, turn off custom dependencies\n);' \
-e '@cus_dep_list = ();' \
-e 'show_cus_dep();'
all : $(TARGETS)
$(foreach file,$(TARGETS),$(eval -include $(DEPS_DIR)/$(file)P))
$(DEPS_DIR) :
mkdir $@
%.pdf : %.tex
if [ ! -e $(DEPS_DIR) ]; then mkdir $(DEPS_DIR); fi
$(LATEXMK) -pdf -dvi- -ps- -deps-out=$(DEPS_DIR)/$@P $<
%.pdf : %.fig
fig2dev -Lpdf $< $@
(باز هم، خطوط حاوی دستورات برای قواعد باید با تب شروع شوند.) این مثال از نحوه مدیریت ردگیری خودکار وابستگیهای فایلهای مبدأ C توسط GNU automake الهام گرفته شده است.
پس از هر بار اجرای latexmk، اطلاعات وابستگی در فایلی در زیردایرکتوری .deps قرار داده میشود. Makefile باعث میشود این فایلهای وابستگی توسط make خوانده شوند، که اکنون اطلاعات کامل وابستگی را برای هر فایل هدف .pdf در اختیار دارد. برای اینکه وضعیت ملموستر شود، مشخص شده است که دو فایل document1.pdf و document2.pdf هدفها هستند. فایلهای وابستگی .deps/document1.pdfP و .deps/document2.pdfP میباشند.
اکنون دیگر نیازی به پیشنیاز ساختگی (phony) برای قاعده ساخت فایلهای .pdf از فایلهای .tex نیست. با این حال من قاعدهای برای ساخت فایلهای .pdf از فایلهای .fig تولیدشده توسط برنامه xfig اضافه کردهام؛ از این فایلها معمولاً برای درج تصاویر در اسناد LaTeX استفاده میشود. Latexmk طوری تنظیم شده است که پس از هر بار اجرا یک فایل وابستگی در خروجی بدهد. گزینه -recorder به آن داده شده است که تشخیص فایلهای تولیدشده در طول اجرای pdflatex را بهبود میبخشد؛ چنین فایلهایی نباید در فهرست وابستگی باشند. گزینههای -e برای غیرفعال کردن تمام وابستگیهای سفارشی و ثبت این موضوع به کار رفتهاند. در عوض، گزینه -use-make برای واگذاری ساخت فایلهای ناموجود به خود make استفاده میشود.
فرض کنید در فایل LaTeX یک دستور includegraphics{graph} وجود دارد و یک فایل xfig به نام «graph.fig» موجود است. در اولین اجرا، pdflatex نبود فایلی با نام «graph» را گزارش میکند. Latexmk با فراخوانی «make graph.pdf» در ساخت «graph.pdf» موفق میشود و پس از اتمام کار خود، «fig.pdf» را در میان وابستههای فایلی که latexmk میسازد قرار میدهد. حال فرض کنید «fig.fig» بهروزرسانی شود و سپس make اجرا گردد. Make ابتدا «fig.pdf» را بازسازی میکند و تنها پس از آن latexmk را دوباره اجرا میکند.
بنابراین اکنون روشی داریم که تمام پردازشهای جانبی به make واگذار میشود.
گریز (Escaping) نویسهها در فهرستهای وابستگی: نویسههای خاص معینی وجود دارند که اگر نام فایلها و دایرکتوریهای حاوی آنها در یک فهرست وابستگی مورد استفاده توسط یک برنامه make ظاهر شوند، باید گریز داده (escape) شوند. بهطور کلی، بهتر است از چنین نویسههای خاصی اجتناب شود.
بهطور پیشفرض، latexmk هیچگونه گریزی از این نوع انجام نمیدهد و در صورت استفاده از نویسههای خاص مربوطه، کاربر باید برای رسیدگی جداگانه به این مسئله اقدام کند. توجه داشته باشید که قواعد گریز به این بستگی دارد که از کدام برنامه make و از چه نگارشی از آن استفاده میشود.
یک مورد خاص فاصله (space) است، چرا که بهویژه در انتخابهای استاندارد برای نام دایرکتوری خانگی کاربر بسیار متداول هستند. بنابراین latexmk گزینهای برای گریز دادن فاصلهها ارائه میدهد. برای جزئیات به گزینه -deps_escape=... و متغیر $deps_escape مراجعه کنید..SH "نویسههای غیر ASCII در نام فایلها، فایلهای RC و غیره (NON_ASCII CHARACTERS IN FILENAMES, RC FILES, ETC)"
سیستمعاملها و سیستمهای فایل امروزی اجازه استفاده از نویسههای غیر ASCII را در نام فایلها و دایرکتوریها میدهند که کل محدوده یونیکد را در بر میگیرد. در بیشتر موارد، latexmk بهدرستی با این نویسهها کار میکند. با این حال، شرایطی وجود دارد که در آنها مشکلاتی رخ میدهد، بهویژه در Microsoft Windows. پیش از نسخه 4.77، latexmk با نامهای فایل حاوی نویسههای غیر ASCII در Windows دچار مشکل میشد، هرچند که در macOS و Linux مشکلات متناظری وجود نداشت. این مشکلات در نسخه فعلی برطرف شدهاند.
جزئیات در آینده تکمیل خواهد شد
همچنین ببینید (SEE ALSO)
latex(1), bibtex(1), lualatex(1), pdflatex(1), xelatex(1).
گزارش باگها (گزیده) (BUGS - SELECTED)
گاهی اوقات یک نمایشگر (gv) تلاش میکند تا یک فایل .ps یا .pdf بهروزشده را پس از آغاز ایجاد آن، اما پیش از کامل شدن فایل بخواند. راهحل موقت: بازخوانی دستی (یا باز کردن مجدد) صفحه نمایش؛ یا استفاده از یکی از نمایشگرها و روشهای بهروزرسانی دیگر.
(مورد زیر در واقع یک باگ نیست، بلکه به ویژگیهای پیشنمایشگرها مربوط میشود.) حالت مداوم پیشنمایش (Preview continuous mode) فقط با پیشنمایشگرهای خاصی به صورت بینقص کار میکند: Xdvi در UNIX/Linux برای فایلهای dvi کار میکند. Gv در UNIX/Linux برای هر دو قالب postscript و pdf کار میکند. Ghostview در UNIX/Linux به بهروزرسانی دستی (باز کردن مجدد) نیاز دارد؛ این برنامه postscript و pdf را نمایش میدهد. Gsview تحت MS-Windows برای هر دو قالب postscript و pdf کار میکند، اما تنها زمانی فایل بهروزشده را میخواند که صفحه آن بازخوانی شود. Acroread تحت UNIX/Linux فایل pdf را نمایش میدهد، اما برای مشاهده نسخه بهروزشده باید فایل بسته شده و مجدداً باز شود. تحت MS-Windows، برنامه acroread فایل ورودی خود را قفل میکند و در نتیجه فایل pdf نمیتواند بهروزرسانی شود. (راهحل: latexmk را پیکربندی کنید تا در عوض از sumatrapdf استفاده کند.)
تشکر و قدردانی (THANKS TO)
نویسندگان نسخههای پیشین. کاربران بسیاری با بازخوردهایشان، و بهویژه David Coppit (با نام کاربری david در گره coppit.org) که پیشنهادهای مفید بسیاری ارائه داد که در توسعه نسخه 3 نقش داشتند، و Herbert Schulz. (لطفاً توجه داشته باشید که نشانیهای ایمیل به شکل استاندارد خود نوشته نشدهاند تا از جمعآوری خودکار آنها جلوگیری شود.)
نویسندگان (AUTHORS)
نسخه فعلی، توسط John Collins (نسخه 4.87). گزارش باگها و غیره را به ایمیل او (jcc8 در psu.edu) بفرستید.
نسخه
منتشرشده
را میتوان
از CTAN دریافت
کرد: http://www.ctan.org/pkg/latexmk و
از وبسایت
نویسنده
https://www.cantab.net/users/johncollins/latexmk.
اصلاحات و
بهبودها
توسط Evan McLean
(نسخه 2.0)
اسکریپت
اولیه با
نام «go» توسط
David J. Musliner (نسخه RCS 3.2)
| 15 June 2025 |