| LATEXDIFF(1) | LATEXDIFF(1) |
نام (NAME)
latexdiff - تشخیص و نشانهگذاری تفاوتهای بین دو فایل LaTeX
خلاصه دستور (SYNOPSIS)
latexdiff [ OPTIONS ] old.tex new.tex > diff.tex
توضیحات (DESCRIPTION)
بهطور خلاصه، latexdiff یک ابزار کاربردی برای کمک به مدیریت ویرایشها و نسخههای اسناد LaTeX است. این ابزار دو فایل معتبر LaTeX، که در اینجا "old.tex" و "new.tex" نامیده میشوند را با یکدیگر مقایسه میکند، تفاوتهای معنادار میان آنها را مییابد (یعنی نادیده گرفتن تعداد فاصلهها و موقعیت شکستگی خطوط)، و دستورات ویژهای را برای برجستهسازی تفاوتها میافزاید. در جایی که برجستهسازی بصری ممکن نیست، برای مثال در تغییرات قالببندی، تفاوتها همچنان در کد منبع نشانهگذاری میشوند. توجه داشته باشید که old.tex و new.tex باید فایلهای واقعی باشند (نه pipe یا موارد مشابه)، زیرا دو بار باز میشوند (مگر اینکه از گزینهٔ "--encoding" استفاده شود).
این برنامه با دیباچه (preamble) به شکلی متفاوت از بدنهٔ اصلی سند رفتار میکند. تفاوتهای بین دیباچهها با استفاده از مقایسهٔ خطبهخط (مشابه دستور diff در Unix، اما با نادیده گرفتن فاصلهها) مشخص میشوند. یک کامنت، «"%DIF >"» به هر خط اضافهشده ملحق میشود، یعنی خطی که در "new.tex" وجود دارد اما در "old.tex" نیست. خطوط حذفشده با پیشوند «"%DIF <"» غیرفعال میشوند. پیش از بلوکهای تغییریافته، خطوط کامنتی قرار میگیرند که اطلاعاتی دربارهٔ شماره خطوط در فایلهای اصلی ارائه میدهند. در مواردی که تفاوتها ناچیز باشند، فایل حاصل "diff.tex" مشابه "new.tex" خواهد بود. در پایان دیباچه، تعاریف دستورات نشانهگذاری latexdiff درج میشوند. در مقایسهٔ بدنهٔ اصلی متن، latexdiff تلاش میکند تا دستورالعملهای زیر را (به ترتیب اولویت) برآورده سازد:
- 1.
- اگر هر دو فایل "old.tex" و "new.tex" کدهای معتبر LaTeX باشند، فایل حاصل "diff.tex" نیز باید یک LaTeX معتبر باشد. (توجه: اگر چند دستور سادهٔ plain TeX در "old.tex" یا "new.tex" به کار رفته باشد، کارکرد درست "diff.tex" تضمین نمیشود، اما معمولاً کار خواهد کرد).
- 2.
- تفاوتهای معنادار در سطح کلمات جداگانه تعیین میشوند. تمامی تفاوتهای معنادار، از جمله تفاوتهای میان کامنتها، باید به وضوح در کد منبع حاصل "diff.tex" نشانهگذاری شوند.
- 3.
- اگر بخشی تغییریافته شامل متن یا دستورات تولیدکنندهٔ متن باشد، اجرای "diff.tex" با LaTeX باید خروجیای تولید کند که در آن بخشهای اضافهشده و حذفشده برجسته شده باشند.
- 4.
- در جایی که تفاوتهای ناچیز وجود دارد، مثلاً در موقعیت شکستگی خطوط، "diff.tex" باید از قالببندی "new.tex" پیروی کند.
برای مقایسه، همان الگوریتمِ diff استفاده میشود اما به جای خطوط، کلمات مقایسه میشوند. تلاشی صورت میگیرد تا بلوکهایی که کاملاً تغییر کردهاند شناسایی شوند تا بتوان آنها را به عنوان یک واحد نشانهگذاری کرد. کامنتها خط به خط مقایسه میشوند اما تعداد فاصلهها در کامنتها نادیده گرفته میشود. دستورات به همراه تمام آرگومانهایشان معمولاً به عنوان یک واحد مقایسه میشوند، یعنی هیچ نشانهگذاری در آرگومانهای دستورات درج نمیشود. با این حال، برای تعداد مشخصی از دستورات (به عنوان مثال، "\caption" و تمامی دستورات بخشبندی) مشخص است که آرگومان آخر متن است. این متن به کلمات تقسیم شده و دقیقاً مانند متن عادی مقایسه میشود (برای نمایش و تغییر فهرست دستورات متنی، از گزینهها استفاده کنید، پایینتر را ببینید). از آنجا که این الگوریتم دانش عمیقی از LaTeX ندارد، فرض میکند هر جفت آکولاد که بلافاصله پس از یک دستور میآید (یعنی دنبالهای از حروف که با بکاسلش شروع میشود) آرگومانهای آن دستور هستند. به عنوان محدودیتی برای شرط ۱ در بالا، بنابراین لازم است تمام آرگومانها با آکولاد احاطه شوند و فاصلههای اضافی درج نشود. به عنوان مثال بنویسید:
\section{\textem{This is an emphasized section title}}
و نه
\section {\textem{This is an emphasized section title}}
یا
\section\textem{This is an emphasized section title}
اگرچه همهٔ این گونهها برای LaTeX یکسان هستند (اما گزینهٔ --allow-spaces را ببینید که گونهٔ دوم را مجاز میداند).
برای محیطهایی که محتوای آنها با LaTeX استاندارد مطابقت ندارد یا نشانهگذاری گرافیکی در آنها منطقی نیست، میتوان با تنظیم متغیر پیکربندی PICTUREENV که به صورت پیشفرض روی محیطهای "picture" و "DIFnomarkup" تنظیم شده است، تمام دستورات نشانهگذاری را حذف کرد؛ گزینهٔ --config را ببینید). محیط دوم ("DIFnomarkup") میتواند برای محافظت از بخشهایی از فایل LaTeX استفاده شود که در آنها نشانهگذاری به نشانهگذاری نامعتبر منجر میشود. باید بخش مشکلساز را در هر دو فایل قدیم و جدید با "\begin{DIFnomarkup}" و "\end{DIFnomarkup}" احاطه کنید. شما باید این محیط را در دیباچهٔ هر دو سند قدیم و جدید تعریف کنید. ترجیح من این است که آن را به عنوان یک محیط خالی (null-environment) تعریف کنم:
"\newenvironment{DIFnomarkup}{}{}"
اما انتخاب با شماست. هرگونه نشانهگذاری در این محیط حذف خواهد شد و عموماً همهچیز در داخل محیط، مستقیماً از فایل جدید گرفته میشود.
همچنین مقایسهٔ فایلهایی که دیباچه ندارند امکانپذیر است. در این حالت، فایل در حالت سند اصلی پردازش میشود، اما تعاریف دستورات نشانهگذاری درج نمیشوند.
تمامی دستورات نشانهگذاریِ درجشده توسط latexdiff با «"\DIF"» آغاز میشوند. بلوکهای اضافهشده که حاوی کلمات، دستورات یا کامنتهایی هستند که در "new.tex" وجود دارند اما در "old.tex" نیستند، با "\DIFaddbegin" و "\DIFaddend" نشانهگذاری میشوند. بلوکهای حذفشده با "\DIFdelbegin" و "\DIFdelend" علامتگذاری میگردند. در داخل بلوکهای اضافهشده، تمامی متون به این شکل با "\DIFadd" برجسته میشوند: "\DIFadd{Added text block}" دستورات برگزیدهٔ «امن» (safe) نیز میتوانند در این بلوکهای متنی گنجانده شوند (برای مشاهده و تغییر فهرست دستورات امن از گزینهها استفاده کنید، پایینتر را ببینید). تمامی دستورات دیگر و همچنین آکولادهای «{» و «}» هرگز در دامنهٔ "\DIFadd" قرار نمیگیرند. کامنتهای اضافهشده با قرار دادن پیشوند «"%DIF > "» مشخص میشوند.
در داخل بلوکهای حذفشده، متن با "\DIFdel" برجسته میشود. کامنتهای حذفشده با قرار دادن پیشوند «"%DIF < "» مشخص میشوند. دستورات غیرامن و آکولادها در داخل بلوکهای حذفشده، با «"%DIFDELCMD < "» به صورت کامنت درمیآیند..SH "گزینهها (OPTIONS)"
مقدمه (Preamble)
گزینههای زیر سبک نشانهگذاری بصری را با افزودن تعاریف دستورات مناسب به مقدمه (preamble) مشخص میکنند. برای شرح سبکهای موجود، انتهای این بخش را ببینید.
- --type=markupstyle یا -t markupstyle
- کد مربوط به
سبک
نشانهگذاری
انتخابشده
را به مقدمه
اضافه
میکند. این
گزینه
دستورات
"\DIFadd" و
"\DIFdel" را
تعریف
میکند.
سبکهای
موجود:
"UNDERLINE CTRADITIONAL TRADITIONAL CFONT FONTSTRIKE INVISIBLE CHANGEBAR CCHANGEBAR CULINECHBAR CFONTCHBAR BOLD PDFCOMMENT LUAUNDERLINE"
[ پیشفرض: "UNDERLINE" ]
- --subtype=markstyle یا -s markstyle
- کد مربوط به
سبک
انتخابشده
برای
دستورات
علامتگذاری
پیرامونی
(بهعنوان
مثال، برای
علامتگذاری
تغییرات در
حاشیه) را
به مقدمه
اضافه
میکند. این
گزینه
دستورات
"\DIFaddbegin"،
"\DIFaddend"،
"\DIFdelbegin" و
"\DIFdelend" را
تعریف
میکند.
سبکهای
موجود: "SAFE
MARGIN COLOR DVIPSCOL ZLABEL ONLYCHANGEDPAGE (LABEL)*"
[ پیشفرض: "SAFE" ] * زیرنوع "LABEL" منسوخ شده است
- --floattype=markstyle یا -f markstyle
- کد مربوط به
سبک
انتخابشده
را به مقدمه
اضافه
میکند تا
جایگزین
دستورات
نشانهگذاری
و
علامتگذاری
استاندارد
درون اشیاء
شناور (floats) شود
(بهعنوان
مثال،
یادداشتهای
حاشیهای
درون
شناورها
باعث ایجاد
خطا
میشوند،
بنابراین
نشانهگذاری
حاشیهای
را میتوان
به این صورت
غیرفعال
کرد). این
گزینه تمام
دستورات
"\DIF...FL" را
تعریف
میکند.
سبکهای
موجود: "FLOATSAFE
TRADITIONALSAFE IDENTICAL"
[ پیشفرض: "FLOATSAFE" ]
- --encoding=enc یا -e enc
- کدگذاری old.tex و
new.tex را مشخص
میکند.
کدگذاریهای
متداول
عبارتاند
از: "ascii"،
"utf8"،
"latin1"،
"latin9".
فهرستی از
کدگذاریهای
موجود را
میتوان با
اجرای
دستور زیر
به دست
آورد:
"perl -MEncode -e 'print join ("\n",Encode-"encodings( ":all" )) ;' >
اگر از این گزینه استفاده شود، old.tex و new.tex فقط یکبار باز میشوند. [کدگذاری پیشفرض utf8 است، مگر اینکه در چند خط اول مقدمه فراخوانی "\usepackage[..]{inputenc}" وجود داشته باشد که در این صورت کدگذاری انتخابشده توسط این دستور فرض میشود. توجه داشته باشید که ASCII (لاتک استاندارد) زیرمجموعهای از utf8 است]
- --preamble=file یا -p file
- به جای تولید مقدمه، فایل را در انتهای مقدمه درج میکند. مقدمه باید دستورات زیر را تعریف کند: "\DIFaddbegin, \DIFaddend, \DIFadd{..}, \DIFdelbegin,\DIFdelend,\DIFdel{..}," و همچنین گونههای آنها را برای استفاده درون شناورها: "\DIFaddbeginFL, \DIFaddendFL, \DIFaddFL{..}, \DIFdelbeginFL, \DIFdelendFL, \DIFdelFL{..}" (در صورت تنظیم این گزینه، گزینههای -t، -s و -f نادیده گرفته میشوند.)
- --packages=pkg1,pkg2,..
- به latexdiff اعلام میکند که فایل .tex با بستههای بارگذاریشده در این فهرست پردازش میشود. اگر فایل .tex شامل مقدمه باشد این امر معمولاً لازم نیست، زیرا مقدمه بهطور خودکار برای یافتن دستورات "\usepackage" پویش میشود. استفاده از گزینهٔ --packages پویش خودکار را غیرفعال میکند، بنابراین اگر به هر دلیلی نیاز به غیرفعال کردن تجزیهٔ مختص به بستهها باشد، از --packages=none استفاده کنید. بستههای زیر رفتارهای خاصی را فعال میکنند:
- "endfloat"
- اطمینان حاصل میکند که "\begin{figure}" و "\end{figure}" همیشه به تنهایی در یک خط قرار گیرند.
- "hyperref"
- نام دستورات "\DIFadd" و "\DIFdel" را به "\DIFaddtex" و "\DIFdeltex" تغییر داده و دستورات جدید "\DIFadd" و "\DIFdel" را تعریف میکند، که پوششی برای این دستورات فراهم میآورند و از آنها برای متن استفاده میکنند اما نه برای دستور تعریف پیوند (جایی که هرگونه نشانهگذاری باعث بروز خطا میشود).
- "apacite", "biblatex"
- دستوراتی را که به عنوان دستورات ارجاع شناخته میشوند، بازتعریف میکند.
- "siunitx"
- با "\SI" مانند دستورات ارجاع رفتار میکند (یعنی در صورتی که سبک نشانهگذاری از بستهٔ ulem استفاده کند، آن را با "\mbox" محافظت میکند).
- "cleveref"
- با "\cref,\Cref" و غیره مانند دستورات ارجاع رفتار میکند (یعنی در صورتی که سبک نشانهگذاری از بستهٔ ulem استفاده کند، آنها را با "\mbox" محافظت میکند).
- "glossaries"
- بیشتر دستورات glossaries را به عنوان امن (safe) تعریف میکند و در صورت نیاز آنها را با \mbox محافظت مینماید.
- "mhchem"
- با "\ce" به عنوان یک دستور امن رفتار میکند، یعنی برجسته خواهد شد (توجه داشته باشید که "\cee" در معادلات برجسته نخواهد شد زیرا این امر منجر به خطاهای پردازشی میشود).
- "chemformula" یا "chemmacros"
- با "\ch" به عنوان یک دستور امن در خارج از معادلات رفتار میکند، یعنی برجسته خواهد شد (توجه داشته باشید که "\ch" در معادلات برجسته نخواهد شد زیرا منجر به خطاهای پردازشی میشود).
[ پیشفرض: پویش مقدمه برای یافتن دستورات "\usepackage" جهت تعیین بستههای بارگذاریشده. ]
پیکربندی (Configuration)
- --exclude-safecmd=exclude-file یا -A exclude-file یا --exclude-safecmd="cmd1,cmd2,..."
- --replace-safecmd=replace-file
- --append-safecmd=append-file یا -a append-file یا --append-safecmd="cmd1,cmd2,..."
- حذف، جایگزینی یا افزودن به فهرست عبارتهای منظم (RegEx) منطبق با دستوراتی که استفاده از آنها در دامنهٔ دستور "\DIFadd" یا "\DIFdel" امن است. فایل باید در هر خط شامل یک Perl-RegEx باشد (خطوط توضیحات که با # یا % آغاز میشوند نادیده گرفته میشوند). توجه داشته باشید که عبارت منظم باید با کل نشانک تطبیق یابد، یعنی /^regex$/ بهطور پیشفرض در نظر گرفته میشود و «\» ابتدای دستور در آن گنجانده نمیشود. گزینههای --exclude-safecmd و --append-safecmd میتوانند با گزینهٔ --replace-safecmd ترکیب شوند و میتوان از آنها به طور مکرر برای افزودن تجمعی به فهرستها استفاده کرد. --exclude-safecmd و --append-safecmd همچنین میتوانند فهرستی جداشده با کاما را به عنوان ورودی دریافت کنند. اگر برای یکی از عبارتهای منظم نیاز به کاما باشد، آن را با «\,» مشخص کنید. در اکثر موارد لازم است فهرست جداشده با کاما با قرار گرفتن درون علامت نقلقول از دستکاری پوسته (shell) محافظت شود.
- --exclude-textcmd=exclude-file یا -X exclude-file یا --exclude-textcmd="cmd1,cmd2,..."
- --replace-textcmd=replace-file
- --append-textcmd=append-file یا -x append-file یا --append-textcmd="cmd1,cmd2,..."
- حذف، جایگزینی یا افزودن به فهرست عبارتهای منظم منطبق با دستوراتی که آخرین آرگومان آنها متن است. برای جزئیات بیشتر ورودی مربوط به --exclude-safecmd را دقیقاً در بالا ببینید.
- --replace-context1cmd=replace-file
- --append-context1cmd=append-file یا
- --append-context1cmd="cmd1,cmd2,..."
- جایگزینی یا افزودن به فهرست عبارات منظم منطبق با دستوراتی که آخرین آرگومان آنها متن است اما برای کارکرد به بافت خاصی نیاز دارند، به عنوان مثال "\caption" تنها درون شکل (figure) یا جدول کار خواهد کرد. این دستورات مانند دستورات متنی رفتار میکنند، مگر زمانی که در یک بخش حذفشده ظاهر شوند؛ در این صورت غیرفعال میشوند اما آرگومان آنها به صورت متن حذفشده نمایش داده میشود.
- --replace-context2cmd=replace-file
- --append-context2cmd=append-file یا
- --append-context2cmd="cmd1,cmd2,..."
- همانند
دستورات
متناظر
برای context1.
تنها تفاوت
این است که
دستورات context2
در بخشهای
حذفشده
بهطور
کامل
غیرفعال
میشوند،
از جمله
آرگومانهای
آنها.
دستورات context2 همچنین تنها دستوراتی در مقدمه هستند که آرگومان آنها در حالت کلمهبهکلمه پردازش خواهد شد (که فقط در صورتی کار میکند که بیش از یکبار در مقدمه ظاهر نشوند). این الگوریتم در حال حاضر نمیتواند با دستورات تکراری context2 در مقدمه سازگار شود، مانند آنچه برای نمونه برای آرگومان "\author" در برخی از سبکهای ژورنالها رخ میدهد (البته در سبکهای استاندارد رخ نمیدهد). اگر چنین تکراری شناسایی شود، کل مقدمه در حالت خطبهخط پردازش خواهد شد. در چنین حالتی، از گزینهٔ "--replace-context2cmd" استفاده کنید تا فقط دستوراتی انتخاب شوند که باید پردازش گردند و در مقدمه مکرراً استفاده نشدهاند.
- --exclude-mboxsafecmd=exclude-file یا --exclude-mboxsafecmd="cmd1,cmd2,..."
- --append-mboxsafecmd=append-file یا --append-mboxsafecmd="cmd1,cmd2,..."
- تعریف دستورات امن، که علاوه بر این نیاز دارند تا با کپسولهسازی در یک "\mbox{..}" محافظت شوند. این امر گاهی برای دور زدن ناسازگاریهای بین بستههای خارجی و بستهٔ ulem لازم است؛ بستهای که برای برجستهسازی در سبک پیشفرض UNDERLINE و همچنین CULINECHBAR و CFONTSTRIKE استفاده میشود.
- --config var1=val1,var2=val2,... یا -c var1=val1,..
- -c configfile
- تنظیم
متغیرهای
پیکربندی.
این گزینه
میتواند
برای تنظیم
متغیرهای
مختلف
تکرار شود
(به عنوان
جایگزینی
برای فهرست
جداشده با
کاما).
متغیرهای
موجود (برای
توضیحات
بیشتر به
بخش زیر
مراجعه
کنید):
"ARRENV" (RegEx)
"COUNTERCMD" (RegEx)
"CUSTODIFCMD" (RegEx)
"FLOATENV" (RegEx)
"ITEMCMD" (RegEx)
"LISTENV" (RegEx)
"MATHARRENV" (RegEx)
"MATHENV" (RegEx)
"MATHREPL" (String)
"MAXCHANGESLETTER" (Integer)
"MINWORDSBLOCK" (Integer)
"PICTUREENV" (RegEx)
"SCALEDELGRAPHICS" (Float).IP "--add-to-config varenv1=pattern1,varenv2=pattern2,..." 4 برای متغیرهای پیکربندی که یک عبارت باقاعده (regular expression) هستند (اساساً آنهایی که به ENV، COUNTERCMD و CUSTOMDIFCMD ختم میشوند، فهرست بالا را ببینید)، این گزینه روشی جایگزین برای تغییر متغیرهای پیکربندی فراهم میکند. به جای تعیین الگوی کامل، با این گزینه میتوان یک الگوی جایگزین اضافه کرد. "varenv" باید یکی از متغیرهای فهرستشده در بالا باشد که عبارت باقاعده را به عنوان آرگومان میپذیرد، و pattern هر عبارت باقاعدهای است (که ممکن است نیاز باشد با نقلقول در برابر پوسته محافظت شود). با استفاده از نقطهویرگول (;) میتوان چندین الگو را به طور همزمان اضافه کرد، مانند: "--add-to-config "LISTENV=myitemize;myenumerate,COUNTERCMD=endnote""
- --show-preamble
- چاپ دستورهای دیباچه (preamble) تولیدشده یا گنجاندهشده.
- --show-safecmd
- چاپ فهرست RegEx برای تطابق و استثنا کردن دستورهای امن (safe commands).
- --show-textcmd
- چاپ فهرست RegEx برای تطابق و استثنا کردن دستورها با آرگومان متنی.
- --show-config
- نمایش مقدارهای متغیرهای پیکربندی.
- --show-all
- ترکیب کردن
همهٔ
دستورهای --show.
توجه: برای همهٔ دستورهای --show، رفتار برنامه بسته به اینکه آیا فایلهای "old.tex" یا "new.tex" مشخص شده باشند متفاوت است. اگر مشخص نشده باشند، پیکربندی اولیه نمایش داده میشود. اگر مشخص شده باشند، پیکربندی کامل نشان داده میشود که شامل برخی افزودههای دستورهای داخلی و تغییرات بر اساس بستههای موجود در سیستم یا استفادهشده در فایلهای .tex است. در هر دو حالت، هیچ تفاضلگیری (differencing) انجام نمیشود.
سایر گزینههای پیکربندی (Other configuration options):
- --allow-spaces
- مجاز دانستن فاصله (space) میان آرگومانهای درون قلاب یا آکولاد دستورها. توجه داشته باشید که این گزینه ممکن است اثرات جانبی نامطلوبی داشته باشد (محدودهٔ نامرتبط ممکن است با دستورهای پیشین یکی شود)، بنابراین تنها در صورتی باید استفاده شود که حالت پیشفرض نتایج نادرستی ایجاد کند. (در حالت پیشفرض لازم است آرگومانها مستقیماً و بدون فواصل میانی به دنبال یکدیگر بیایند).
- --math-markup=level
- تعیین
میزان
دانهبندی
(granularity)
نشانهگذاری
در
محیطهای
ریاضیاتی
نمایشیافته:
مقدارهای
ممکن برای level
عبارتند از
(هر دو
برچسب عددی
و متنی
پذیرفته
میشوند):
"off" یا 0: غیرفعال کردن نشانهگذاری برای محیطهای ریاضی. معادلات حذفشده در فایل diff نمایش داده نخواهند شد. این حالت زمانی کاربرد دارد که تمامی حالتهای دیگر منجر به کد نامعتبر latex شوند.
"whole" یا 1: تفاضلگیری در سطح کل معادلات. حتی تغییرات جزئی در معادلات باعث میشود کل معادله به عنوان تغییریافته علامتگذاری شود. این حالت را میتوان زمانی استفاده کرد که پردازش در حالت coarse یا fine به کد نامعتبر latex بیانجامد.
"coarse" یا 2: تشخیص تغییرات درون معادلات با دانهبندی درشت؛ تغییرات در نوع معادله (مانند displaymath به equation) به عنوان تغییر در کل معادله ظاهر میشود. این حالت برای شرایطی توصیه میشود که محتوا و ترتیب برخی معادلات همچنان در حال تغییر است. [پیشفرض]
"fine" یا 3: تشخیص تغییرات کوچک در معادلات و نشانهگذاری با دانهبندی ریز. این حالت زمانی مناسبتر است که تنها تغییرات جزئی در معادلات مورد انتظار باشد، مانند اصلاح غلطهای تایپی.
- --graphics-markup=level
-
تغییر سبک برجستهسازی برای تصاویر و گرافیکهای جایگذاریشده با دستورهای C<\includegraphics>.
مقدارهای ممکن برای level:
"none"، "off" یا 0: بدون برجستهسازی برای شکلها
"new-only" یا 1: احاطه کردن شکلهای تازه اضافهشده یا تغییریافته با یک کادر آبی [پیشفرض در صورت بارگذاری بستهٔ graphicx]
"both" یا 2: برجستهسازی شکلهای جدید با کادر آبی و نمایش شکلهای حذفشده با مقیاس کوچکتر و خطخورده با یک ضربدر مورب قرمز. برای تنظیم اندازهٔ شکلهای حذفشده از متغیر پیکربندی SCALEDELGRAPHICS استفاده کنید.
توجه داشته باشید که تغییر در پارامترهای اختیاری باعث میشود شکل برای latexdiff به عنوان تغییریافته شناخته شود و در نتیجه برجسته خواهد شد.
در برخی شرایط، در صورت وجود انواع خاصی از تغییرات در جدولها، ممکن است خطای "Misplaced \noalign" رخ دهد. در این حالت لطفاً از "--graphics-markup=none" به عنوان راهکار موقت استفاده کنید.
- --no-del
- حذف متن پاکشده از خروجی diff. این گزینه از نظر اثرگذاری مشابه سبک BOLD است، اما متن حذفشده فقط در خروجی نامرئی نمیشود، بلکه در فایل متنی diff نیز گنجانده نمیشود. این کار میتواند مطمئنتر از نامرئی کردن صرف آن باشد.
- --disable-citation-markup یا --disable-auto-mbox
- غیرفعال کردن نشانهگذاری ارجاعها (citation) و نشانهگذاری سایر دستورهای آسیبپذیر در سبکهایی که از ulem استفاده میکنند (UNDERLINE، FONTSTRIKE، CULINECHBAR) (این دو گزینه یکسان بوده و صرفاً نام مستعار یکدیگر هستند)
- --enable-citation-markup یا --enforce-auto-mbox
- محافظت از دستورهای ارجاع و سایر دستورهای آسیبپذیر در بخشهای تغییریافته با استفاده از دستور "\mbox"، یعنی استفاده از رفتار پیشفرض بستهٔ ulem برای سایر بستهها (این دو گزینه یکسان بوده و صرفاً نام مستعار یکدیگر هستند)
متفرقه (Miscellaneous)
- --verbose یا -V
- ارسال اطلاعات وضعیت گوناگون به stderr هنگام پردازش. حالت پیشفرض، اجرای بیصدا است.
- --driver=type
- انتخاب درایور برای بستهٔ changebar (تنها برای سبکهایی که از changebar استفاده میکنند مرتبط است: CCHANGEBAR ،CFONTCHBAR ،CULINECHBAR ،CHANGEBAR). درایورهای ممکن در راهنمای changebar فهرست شدهاند، مانند pdftex، dvips، dvitops [پیشفرض: pdftex]
- --ignore-warnings
- نادیده گرفتن هشدارهای مربوط به ناهمخوانی طول بین رشتههای ورودی و تجزیهشده و نویسههای مفقود. این پیامهای هشدار اغلب مربوط به کدهای غیراستاندارد latex یا ساختارهای ترکیبی با نحو ناشناخته برای "latexdiff" هستند، اما تفاوت نهایی حاصل در هر صورت اغلب کاملاً کاربردی است، به ویژه اگر کدهای غیراستاندارد latex تنها در بخشهایی از متن رخ داده باشند که تغییر نکردهاند.
- --label=label یا -L label
- تنظیم برچسبهای مورد استفاده برای توصیف فایلهای قدیمی و جدید. اولین استفاده از این گزینه، برچسب توصیفکنندهٔ فایل قدیمی و دومین استفاده، برچسب فایل جدید را تنظیم میکند؛ یعنی هر دو برچسب را به این صورت تعیین کنید: "-L labelold -L labelnew". [پیشفرض: استفاده از نام فایل و تاریخ ویرایش برای برچسب]
- --no-label
- جلوگیری از درج نام فایلهای قدیمی و جدید به عنوان یادداشت (کامنت) در فایل خروجی.
- --visible-label
- گنجاندن نام فایلهای قدیمی و جدید (یا برچسبهای تنظیمشده با گزینهٔ "--label") به عنوان خروجی قابل رؤیت.
- --flatten
- جایگزین
کردن
دستورهای
"\input" و
"\include"
درون بدنه
با محتوای
فایلهای
مشخصشده
در آرگومان
آنها. اگر
"\includeonly" در
دیباچه (preamble)
وجود داشته
باشد، تنها
آن فایلها
در سند بسط
داده
میشوند. با
این حال،
بازگشت (recursion)
انجام
نمیشود؛
یعنی
دستورهای
"\input" و
"\include"
درون
بخشهای
گنجاندهشده
بسط
نمییابند.
فرض بر این
است که
فایلهای
گنجاندهشده
به ترتیب در
همان
دایرکتوریهای
فایلهای
اصلی قدیمی
و جدید قرار
دارند و
امکان
سازماندهی
فایلها در
دایرکتوریهای
قدیمی و
جدید را
فراهم
میسازند.
گزینهٔ --flatten
به صورت
بازگشتی
اعمال
میشود،
بنابراین
فایلهای
واردشده
میتوانند
حاوی
دستورهای
"\input"
بیشتری
باشند.
همچنین
فایلهای
گنجاندهشده
با بستهٔ import
("\import" و
"\subimport") و
دستور
"\subfile" را
نیز مدیریت
میکند.
استفاده از این گزینه ممکن است باعث افزایش چشمگیر زمان پردازش برای اسناد بزرگتر شود، و سند تفاوت حاصل دیگر ساختار اسناد ورودی را بازتاب نخواهد داد.
- --filter-script=filterscript
- عبور دادن فایلها از این اسکریپت پالایه (filterscript - مسیر کامل ترجیح داده میشود) پیش از پردازش. اسکریپت پالایه باید ورودی را از STDIN دریافت کرده و خروجی را به STDOUT ارسال کند. هنگامی که با --flatten ترکیب شود، هر فایل به محض فراخوانی از پالایه عبور داده خواهد شد.
- --ignore-filter-stderr
- هنگام اجرا با --filter-script، ممکن است پیامهای STDERR از طرف اسکریپت باعث کاهش خوانایی شوند. این پرچم را فعال کنید تا از STDERR اسکریپت پالایه چشمپوشی شود.
- --help یا -h
- نمایش متن راهنما
- --version
- نمایش شمارهٔ نسخه.SS "گزینههای داخلی (Internal options)" این گزینهها عمدتاً برای استفادهٔ خودکار توسط latexdiff-vc هستند. میتوان آنها را مستقیماً نیز به کار برد، اما رابط برنامهنویسی (API) آنها نسبت به سایر گزینهها ناپایدارتر تلقی میشود.
- --no-links
- جلوگیری از ایجاد پیوندهای ارجاعی (hyperreference)، مورد استفاده برای تفاضلهای کمینه (گزینهٔ --only-changes در latexdiff-vc).
سبکهای از پیشتعریفشده (Predefined styles)
انواع اصلی (Major types)
نوع اصلی، نشانهگذاری متن ساده و برخی از دستورهای لاتک برگزیده در خارج از شناورها را با تعریف دستورهای نشانهگذاری "\DIFadd{...}" و "\DIFdel{...}" تعیین میکند.
- "UNDERLINE"
- متن افزودهشده با خط موجدار زیرخطدار و آبیرنگ میشود، متن حذفشده خطخورده و قرمز خواهد بود (نیازمند بستههای color و ulem). خط زدن روی متن (Overstriking) در معادلات ریاضی نمایشی (displayed math) کار نمیکند، بهگونهای که بخشهای حذفشدهٔ معادله بهجای خط خوردن، زیرخطدار میشوند (این یک نقص ذاتی در بستهٔ ulem است).
- "LUAUNDERLINE"
- متن افزودهشده زیرخطدار و آبیرنگ، و متن حذفشده خطخورده و قرمز خواهد بود (نیازمند بستهٔ lua-ul بههمراه LuaLaTeX).
- "CTRADITIONAL"
- متن افزودهشده آبیرنگ و با قلم بدونسریف (sans-serif) است، و برای هر بخش از متن حذفشده یک پاورقی قرمز ایجاد میشود (نیازمند بستهٔ color).
- "TRADITIONAL"
- مانند "CTRADITIONAL" اما بدون استفاده از رنگ.
- "CFONT"
- متن افزودهشده آبیرنگ و با قلم بدونسریف بوده، و متن حذفشده قرمز و با اندازهای بسیار کوچک است.
- "FONTSTRIKE"
- متن افزودهشده با قلم بدونسریف است، و متن حذفشده کوچک و خطخورده خواهد بود.
- "CCHANGEBAR"
- متن افزودهشده آبیرنگ، و متن حذفشده قرمز است. علاوه بر این، متن تغییریافته با یک خط در حاشیه مشخص میشود (نیازمند بستههای color و changebar).
- "CFONTCHBAR"
- مانند "CFONT" اما همراه با خطوط حاشیهٔ اضافی (نیازمند بستههای color و changebar).
- "CULINECHBAR"
- مانند "UNDERLINE" اما همراه با خطوط حاشیهٔ اضافی (نیازمند بستههای color، ulem و changebar).
- "CHANGEBAR"
- هیچ نشانهگذاری روی متن اعمال نمیشود، اما حاشیهها با خطوط تغییر نشانهگذاری میشوند (نیازمند بستهٔ changebar).
- "INVISIBLE"
- بدون نشانهگذاری دیداری (اما دستورهای نشانهگذاری عمومی همچنان درج خواهند شد).
- "BOLD"
- متن افزودهشده با قلم پررنگ (bold) مشخص میشود، و متن حذفشده نمایش داده نمیشود (همچنین برای امکانی دیگر جهت پنهانسازی متن حذفشده، گزینهٔ --no-del را ببینید).
- "PDFCOMMENT"
- از بستهٔ pdfcomment برای زیرخطدار کردن متن جدید و مشخص کردن حذفیات با یک یادداشت (comment) در PDF استفاده میشود. توجه داشته باشید که این نشانهگذاری ممکن است بسته به نمایشگر PDF مورد استفاده، متفاوت دیده شده یا اصلاً نمایش داده نشود. نمایشگری که بهترین پشتیبانی را از نشانهگذاریهای PDF دارد احتمالاً acroread است. این سبک تنها در صورتی توصیه میشود که تعداد تفاوتها اندک باشد.
زیرنوعها (Subtypes)
زیرنوع دستورهایی را تعریف میکند که در آغاز و پایان بلوکهای افزودهشده یا حذفشده درج میشوند، فارغ از اینکه این بلوکها حاوی متن باشند یا دستور (دستورهای تعریفشده: "\DIFaddbegin, \DIFaddend, \DIFdelbegin, \DIFdelend").
- "SAFE"
- بدون نشانهگذاری اضافی (انتخاب توصیهشده).
- "MARGIN"
- نشانهگذاری آغاز و پایان بلوکهای تغییریافته با نمادهایی در حاشیهٔ مجاور (با استفاده از دستور استاندارد "\marginpar" - توجه داشته باشید که این دستور گاهی کمی از موقعیت اصلی خود جابهجا میشود).
- "COLOR"
- روشی جایگزین برای نشانهگذاری بخشهای افزوده به رنگ آبی و بخشهای حذفی به رنگ قرمز (توصیه میشود بهجای این، از انواع اصلی برای اعمال نشانهگذاری رنگی استفاده شود، هرچند در برخی موارد رنگآمیزی با dvipscol میتواند کاملتر باشد، مثلاً برای دستورهای ارجاع).
- "DVIPSCOL"
- روشی جایگزین برای نشانهگذاری بخشهای افزوده به رنگ آبی و بخشهای حذفی به رنگ قرمز. توجه داشته باشید که "DVIPSCOL" تنها با مبدل dvips کار میکند و مثلاً با pdflatex کار نخواهد کرد (توصیه میشود بهجای این از انواع اصلی برای نشانهگذاری رنگی استفاده شود، اگرچه در مواردی رنگآمیزی با dvipscol میتواند کاملتر باشد).
- "ZLABEL"
- میتواند برای برجستهسازی تنها صفحههای تغییریافته به کار رود، اما نیازمند پسپردازش است. توصیه میشود این گزینه را دستی فراخوانی نکنید، بلکه از "latexdiff-vc" به همراه گزینهٔ "--only-changes" استفاده کنید. در غیر این صورت، از اسکریپت موجود در دیباچهٔ (preamble) فایلهای diff ساختهشده با این سبک استفاده نمایید.
- "ONLYCHANGEDPAGE"
- صفحات تغییریافته را بدون نیاز به پسپردازش برجسته میکند، اما اگر عناصر شناور (شکلها، جدولها) وجود داشته باشند ممکن است عملکرد قابل اعتمادی نداشته باشد.
- "LABEL"
- مشابه "ZLABEL" است، اما به بستهٔ zref نیاز ندارد و قابلیت اطمینان آن کمتر است (منسوخشده).
انواع شناور (Float Types)
برخی از نشانهگذاریهای استفادهشده در متن اصلی ممکن است در صورت استفاده در محیطهای شناور (مانند شکلها یا جدولها) مشکل ایجاد کنند. به همین دلیل نسخههای جایگزینی از تمامی دستورهای نشانهگذاری در محیطهای شناور استفاده میشود. نوع شناور این دستورهای جایگزین را تعریف میکند.
- "FLOATSAFE"
- از همان نشانهگذاری متن در بدنهٔ اصلی استفاده میکند، اما تمامی دستورهای مشخصکنندهٔ آغاز و پایان بلوکهای تغییریافته را روی دستورهای تهی تنظیم میکند. اگر زیرنوع شما "MARGIN" باشد باید این نوع شناور را انتخاب کنید، زیرا "\marginpar" در محیطهای شناور بهدرستی کار نمیکند.
- "TRADITIONALSAFE"
- موارد افزوده را به همان شیوهٔ متن اصلی نشانهگذاری میکند. محیطهای حذفشده با قلابهای شکسته \[ و \] مشخص شده و متن حذفشده در اندازهٔ scriptscript قرار میگیرد. این نوع شناور همیشه باید همراه با انواع نشانهگذاری "TRADITIONAL" و "CTRADITIONAL" به کار رود، زیرا دستور \footnote در محیطهای شناور بهدرستی کار نمیکند.
- "IDENTICAL"
- هیچ تفاوتی میان متن اصلی و محیطهای شناور قائل نمیشود..SS "متغیرهای پیکربندی (Configuration Variables)"
- "ARRENV"
- اگر تطابقی
با "ARRENV"
درون یک
محیط ریاضی
درونخطی
در یک بلوک
حذفشده یا
اضافهشده
یافت شود،
آنگاه
عبارت
ریاضی
درونخطی
در میان
"\mbox{"..."}"
قرار
میگیرد.
این امر از
آنجا ضروری
است که خط
کشیدن زیر
متن (underlining) در
محیطهای
آرایهایِ
درونخطی
کار
نمیکند.
[ پیشفرض: "ARRENV"="(?:array|[pbvBV]matrix)"
- "COUNTERCMD"
- اگر دستوری
در یک بلوک
حذفشده که
در فهرست textcmd
نیز وجود
دارد با
"COUNTERCMD"
مطابقت
داشته
باشد،
آنگاه
دستور
اضافی
"\addtocounter{"cntcmd"}{-1}"،
که در آن cntcmd
دستور
منطبق است،
به فایل diff
الحاق
میشود تا
شمارهگذاری
در فایل diff با
شمارهگذاری
در فایل
جدید همگام
باقی بماند.
[ پیشفرض: "COUNTERCMD"="(?:footnote|part|section|subsection" ...
"|subsubsection|paragraph|subparagraph)" ]
- "CUSTOMDIFCMD"
- این گزینه
برای
کاربران
پیشرفته
است و امکان
تعریف
نسخههای
ویژهای از
دستورها را
فراهم
میآورد که
به عنوان
دستورهای
امن کار
نمیکنند.
دستورهای موجود در "CUSTOMDIFCMD" که در بلوکهای اضافهشده یا حذفشده رخ میدهند، یک پیشوند ADD یا DEL دریافت خواهند کرد. نسخههای پیشونددارِ دستور باید در دیباچه تعریف شوند، خواه با قرار دادن آنها در دیباچه دستکم فایل جدید، یا با ایجاد یک فایل دیباچه سفارشی (گزینه --preamble). برای نمونه، دستور "\blindtext" (از بسته blindtext) به خوبی با زیرخطکشی سازگار نیست، به گونهای که برای نوع نشانهگذاری استاندارد، تعریف آن به عنوان یک دستور امن رضایتبخش نیست. در عوض، میتوان نسخههای سفارشیشده بدون خطکشی را در دیباچه تعریف کرد:
"\newcommand{\DELblindtext}{{\color{red}\blindtext}}"
"\newcommand{\ADDblindtext}{{\color{blue}\blindtext}}"
و سپس latexdiff باید با گزینه "-c CUSTOMDIFCMD=blindtext" فراخوانی شود.
[ پیشفرض: none ]
- "FLOATENV"
- محیطهایی
که نام
آنها با
عبارت
باقاعده
موجود در
"FLOATENV"
مطابقت
داشته
باشد،
شناور در
نظر گرفته
میشوند. در
این
محیطها،
دستورهای
نشانهگذاری
latexdiff با انواع
FL آنها
جایگزین
میشوند.
[ پیشفرض: "(?:figure|table|plate)[\w\d*@]*" ]
- "ITEMCMD"
- دستورهایی
که
نشاندهنده
سطر آیتم
جدید در
محیطهای
فهرست
هستند.
[ پیشفرض: \"item" ]
- "LISTENV"
- محیطهایی
که نام
آنها با
عبارت
باقاعده
موجود در
"LISTENV"
تطابق
دارد،
محیطهای
فهرست
هستند.
[ پیشفرض: "(?:itemize|enumerate|description)" ]
- "MATHENV","MATHREPL"
- اگر هر دو
دستور \begin و \end
برای یک
محیط ریاضی
(نام محیط
منطبق با
"MATHENV" یا \[ و
\]) در همان
بلوک
حذفشده
یکسان قرار
داشته
باشند،
بهجای
اینکه
کامنت
شوند، با
دستورهای \begin
و \end برای
"MATHREPL"
جایگزین
میشوند.
[ پیشفرض: "MATHENV"="(?:displaymath|equation)" , "MATHREPL"="displaymath" ]
- "MAXCHANGESLETTER" هنگامی که latexdiff جایگزینی یک تککلمه را تشخیص میدهد، تلاش میکند تا تغییرات را در سطح حرف شناسایی کند. اگر تغییرات زیادی وجود داشته باشد، این احتمال هست که کلمه به طور کامل جایگزین شده باشد، و تغییرات در سطح حرف به جای مفید بودن گیجکننده خواهد بود. در این حالت، latexdiff به نمایش جایگزینی در سطح کلمه بازمیگردد. رویکردِ تشخیص این دو حالت صرفاً شمارش تعداد افزودنها و حذفهای متمایز است (نه تعداد حروف تغییریافته!)، و تنها در صورتی که این تعداد کمتر یا مساوی با MAXCHANGESLETTER باشد، نشانهگذاری در سطح حرف به کار میرود. مقادیر معقول 0، 1 یا 2 هستند. مقدار 0 نشانهگذاری در سطح حرف را به طور کامل غیرفعال میکند. مقدار 1 تنها یک افزودن یا حذف منفرد را مجاز میداند، برای نمونه برای تصحیح یک غلط املایی یا تغییر مفرد/جمع یک فعل، اما نه یک جایگزینی. مقدار 2 یک جایگزینی (یا دو افزودن یا حذف) را مجاز میداند---این امر گاهی سبب میشود کلمات متفاوتی در سطح حرف نشانهگذاری شوند، مثلاً they-> there حرف "y" حذفشده و "re" اضافهشده را نمایش میدهد، که اغلب نامطلوب است.
- [ پیشفرض: 1 ]
- "MINWORDSBLOCK"
- حداقل
تعداد
توکنهای
لازم برای
تشکیل یک
بلوک مستقل.
این مقدار
در
الگوریتم
تشخیص
تغییرات
بلوکهای
کامل، با
ادغام
بخشهای
متنیِ
یکسانِ
کمتر از
"MINWORDSBLOCK" با
بخشهای
اضافهشده
و
کنارگذاشتهشده
قبلی
استفاده
میشود.
[ پیشفرض: 3 ]
- "PICTUREENV"
- درون
محیطهایی
که نام
آنها با
عبارت
باقاعده
موجود در
"PICTUREENV"
مطابقت
دارد، تمام
نشانهگذاریهای
latexdiff حذف
میشوند (در
موارد حاد و
نامتعارف
ممکن است
این امر به
نشانهگذاری
ناسازگار
منجر شود
اما این
وضعیت باید
نادر باشد).
[ پیشفرض: "(?:picture|DIFnomarkup)[\w\d*@]*" ]
- "SCALEDELGRAPHICS"
- اگر
"--graphics-markup=both"
انتخاب
شود،
"SCALEDELGRAPHICS"
ضریبی است
که تصاویر
حذفشده با
آن
مقیاسبندی
میشوند
(یعنی 0.5 به
این معنی
است که
آنها در
نصف اندازه
خطی نمایش
داده
میشوند).
[ پیشفرض: 0.5 ]
- "VERBATIMENV"
- عبارت
باقاعدهای
(RegEx) که
محیطهایی
مانند verbatim را
توصیف
میکند که
محتوای
آنها باید
عیناً در
نظر گرفته
شود. محتوای
این
محیطها به
هیچ وجه
پردازش
نخواهد شد:
محتوای
حذفشده
کامنت
میشود،
محتوای
جدید
نشانهگذاری
نمیشود
[ پیشفرض: "comment" ]
- "VERBATIMLINEENV"
- عبارت
باقاعدهای
(RegEx) که
محیطهایی
مانند verbatim را
توصیف
میکند که
محتوای
آنها باید
عیناً در
نظر گرفته
شود. محتوای
محیطهای
توصیفشده
با VERBATIMLINEENV در
حالت خطی
مقایسه
میشوند و
تغییرات با
استفاده از
بسته listings
نشانهگذاری
میشوند.
سبک
نشانهگذاری
بر اساس نوع
نشانهگذاری
اصلی
انتخابشده
(گزینه -t)، یا
بر پایه
تحلیل
دیباچه
تعیین
میشود.
توجه داشته
باشید که
"listings.sty" باید
نصب باشد.
اگر این
فایل یافت
نشود،
راهحل
جایگزین (fallback)
این است که
با
محیطهای
VERBATIMLINEENV دقیقاً
مانند
محیطهای
VERBATIMENV رفتار
شود.
[ پیشفرض: "(?:verbatim[*]?|lstlisting" ]
رهنمودها (DIRECTIVES)
گاهی اوقات خروجی تولیدشده توسط "latexdiff" رضایتبخش نیست یا برخی ساختارهای پیچیده حتی منجر به ایجاد فایل tex اختلافی میشوند که به خطا میانجامد. میتوان با قرار دادن کامنتهای ویژهای به نام رهنمودها (directives) در فایل tex، سرنخهایی برای کنترل نشانهگذاری به latexdiff ارائه داد. رهنمودها بلوکها را به وسیله رهنمودهای جفتشده "BEGIN" و "END" مشخص میکنند. مهم است که رهنمودها دقیقاً مطابق آنچه در زیر مشخص شده نوشته شوند؛ یعنی تمام حروف باید بزرگ باشند و دقیقاً یک فاصله میان BEGIN/END و نوع بلوک وجود داشته باشد. با این حال، میتوان پس از رهنمود کامنتهای دلخواه اضافه کرد. تو در تو کردن یا تداخل بلوکها به درستی تجزیه نمیشود و رفتاری تعریفنشده ایجاد خواهد کرد. بلوکها میتوانند در مرزهای حوزه (scope boundaries) امتداد یابند؛ همچنین میتوان آنها را در آخرین آرگومان دستورهای متنی به کار برد. اگر آنها در آرگومانهای دستورهای دیگر ظاهر شوند، latexdiff فرض میکند که پیش یا پس از آن دستور قرار گرفتهاند؛ با این وجود، بهتر است از این کار پرهیز شود.
- بلوک "
-
... %BEGIN DIFADD ... %END DIFADD ...
هر آنچه میان رهنمودهای "%BEGIN DIFADD" و "%END DIFADD" محصور شده باشد، به عنوان یک افزودن اتمی (یکپارچه) به متن در نظر گرفته خواهد شد. محتوای درون آن به عنوان متن اضافهشده و طبق قواعد عادی برای نشانهگذاری، نشانهگذاری خواهد شد. یک مورد استفاده از این رهنمود زمانی است که یک بند به طور اساسی تغییر کرده باشد اما برخی از عبارتبندیهای بند اصلی را حفظ کرده باشد. از آنجا که latexdiff ترجیح میدهد تفاوت حداقلی بین دو فایل پیدا کند، چنین وضعیتی معمولاً به یک نشانهگذاری تکهتکه میانجامد، با چندین جمله یا بخشهایی از جملاتِ اضافهشده و حذفشده و چند عبارت باقیمانده که دستنخورده علامت میخورند. با استفاده از این رهنمود میتوان تمام بخشِ تغییریافته را به عنوان جدید مشخص کرد، که سپس به صورت یکپارچه (en bloc) به عنوان جدید نشانهگذاری میشود، و بخش قدیمی به صورت یک بلوک از مطالب حذفشده نشان داده میشود، که معمولاً از نشانهگذاری تکهتکهی پیشفرض واضحتر است. رهنمودهای بلوک "DIFADD" باید در بدنه فایل جدید قرار گیرند. این رهنمودها در دیباچه یا در فایل قدیمی نادیده گرفته میشوند.
- بلوک "
-
... %BEGIN DIFDEL ... %END DIFDEL ...
هر آنچه میان رهنمودهای "%BEGIN DIFDEL" و "%END DIFDEL" محصور شده باشد، به عنوان متن حذفشده اتمی در نظر گرفته خواهد شد. محتوای درون آن به عنوان متن حذفشده و طبق قواعد عادی برای نشانهگذاری، نشانهگذاری خواهد شد. رهنمودهای بلوک "DIFDEL" باید در بدنه فایل قدیمی قرار گیرند. این رهنمودها در دیباچه یا در فایل جدید نادیده گرفته میشوند. مورد استفاده مشابه بلوکهای "DIFADD" است، اما سرنخ در فایل قدیمی قرار میگیرد. در بیشتر موارد کافی است که یا در فایل قدیمی با یک بلوک "DIFDEL" یا در فایل جدید با یک بلوک "DIFADD" سرنخ داده شود و latexdiff بقیه کارها را انجام خواهد داد.
- بلوک "
-
... %BEGIN DIFNOMARKUP ... %END DIFNOMARKUP ...
متن بین نشانگرها در الگوریتم diff گنجانده خواهد شد اما هیچ نشانهگذاری واقعی در این بخش از متن انجام نخواهد شد. این بخش تنها متن جدید را نشان میدهد و متن قدیمی را سرکوب (پنهان) میکند. اگر متنی که بلافاصله بالای بلوک DIFNOMARKUP قرار دارد اضافه شده باشد، یک "\DIFaddend" مستقیماً بالای خط "%BEGIN DIFNOMARKUP" قرار میگیرد و هر دستور باز "\DIFadd" خاتمه مییابد؛ به طور مشابه برای بلوکهای حذفشده و برای متنی که بلافاصله پس از "%BEGIN DIFNOMARKUP" اضافه یا حذف شده است نیز چنین است. هدف اصلی این دستور بهبود وضعیت است در صورتی که latexdiff خروجی نامعتبر یا از لحاظ بصری غیرقابل قبولی تولید کرده باشد - نشانهگذاری در بخش مشکلدار میتواند با احاطه کردن آن با رهنمودهای "DIFNOMARKUP" و اجرای مجدد latexdiff سرکوب شود، و بدین ترتیب نشانهگذاری سایر بخشهای سند ممکن گردد (اما لطفاً همچنان این موارد نقص در latexdiff را همانگونه که در زیر شرح داده شده گزارش کنید تا latexdiff بهبود یابد). این جفت رهنمود باید در فایل جدید قرار گیرند و در فایل قدیمی (یا در دیباچه هر یک از دو فایل) نادیده گرفته خواهند شد..SH "مشکلات رایج و پرسشهای متداول (COMMON PROBLEMS AND FAQ)"
- ارجاعات تغییریافته منجر به ایجاد overfull box میشوند
- یک
ناسازگاری
میان
بستهی
"ulem" (که
"latexdiff" از
آن برای خط
کشیدن زیر
متن و خط
زدن روی آن
در سبک UNDERLINE،
یعنی سبک
پیشفرض،
استفاده
میکند) و
شیوهی
تولید
ارجاعات
وجود دارد.
برای اینکه
بتوان
ارجاعات را
به درستی
علامتگذاری
کرد، آنها
درون یک
دستور
"\mbox" قرار
میگیرند.
از آنجا که
mboxها
نمیتوانند
در بین خطوط
شکسته
شوند، این
فرآیند
مکرراً
منجر به overfull box
(جعبههای
لبریز)
میشود که
ممکن است با
فراتر رفتن
از حاشیهی
راست،
محتوا را
بپوشاند و
ناخوانا
کند. همین
امر برای
برخی
بستههای
دیگر (مانند
siunitx) نیز رخ
میدهد. اگر
این موضوع
مشکلساز
است، چند
راهکار در
اختیار
دارید.
1. از علامتگذاری نوع "CFONT" (گزینهی "-t CFONT") استفاده کنید: اگر این نشانهگذاری انتخاب شود، ارجاعات تغییریافته دیگر با خط موجدار (افزودهها) یا خطخورده (حذفشدهها) مشخص نمیشوند، اما همچنان با رنگ مناسب برجسته میشوند و متن حذفشده با قلم متفاوتی نشان داده میشود. سبکهای دیگر که از بستهی "ulem" استفاده نمیکنند نیز کار خواهند کرد.
2. گزینهی "--disable-citation-markup" را انتخاب کنید که علامتگذاری ارجاعات را خاموش میکند: ارجاعات حذفشده دیگر نمایش داده نمیشوند و ارجاعات افزودهشده بدون علامتگذاری نشان داده میشوند. (این رفتار پیشفرض latexdiff در نگارشهای 0.6 و قدیمیتر بود). برای بستههای سفارشی میتوانید دستوراتی را که نیاز به محافظت توسط "\mbox" دارند با گزینههای "--append-mboxsafecmd" و "--excludemboxsafecmd" تعریف کنید (فهرست دستورات خود را به عنوان درخواست قابلیت در صفحهی github ارسال کنید تا رفتار پیشفرض نگارشهای بعدی تعیین شود، بخش ۶ را ببینید).
3. اگر از luatex >= 1.12.0 استفاده میکنید، میتوانید از گزینهی LUAUNDERLINE استفاده کنید که از lua-ul به جای ulem برای خط کشیدن زیر متن استفاده میکند و این مشکل را ندارد (قابلیت آزمایشی).
- تغییرات در معادلات پیچیدهی ریاضی منجر به بروز خطاهای پردازش latex میشود.
- گزینهی "--math-markup=whole" را امتحان کنید. اگر حتی این هم ناموفق بود، میتوانید علامتگذاری معادلات را با "--math-markup=off" خاموش کنید.
- بخشهای حذفشده در معادلات خطخورده نمیشوند بلکه زیر آنها خط کشیده میشود.
- این یک محدودیت از بستهی ulem است که عمل خط زدن روی متن را پیادهسازی میکند. اگر از بستهی amsmath استفاده کنید، دستور خط زدن به نحوی بازتعریف میشود که بخشهای حذفشده با دستور "\text" محصور شوند؛ افزودن "\usepackage{amsmath}" به دیباچه (preamble) شما این رفتار را فعال خواهد کرد. (اگر amsmath مستقیماً وارد نشده باشد، بلکه توسط بستهی دیگری وارد شود، latexdiff قادر به شناسایی در دسترس بودن آن نخواهد بود؛ در این حالت میتوانید با گزینهی "--packages=amsmath" یک سرنخ به latexdiff بدهید).
- چگونه میتوانم فقط صفحاتی را نمایش دهم که تغییرات در آنها رخ داده است؟
- از گزینههای "--s ZLABEL" (نیازمند مقداری پسپردازش) یا "-s ONLYCHANGEDPAGE" استفاده کنید. دستور "latexdiff-vc --ps|--pdf" با گزینهی "--only-changes" کارهای پسپردازش را برای شما مدیریت میکند (نیازمند نصب بودن بستهی zref است).
- کدگذاری نویسهها هنگام اجرای latexdiff از powershell به هم میریزد.
- این مشکل محدود به "latexdiff" نیست و به تنظیمات پیشفرض "powershell" در Windows مربوط میشود. توصیه میشود به جای آن از "cmd" استفاده کنید.
باگهای شناختهشده (KNOWN BUGS)
- گزینهی "--allow-spaces" کاملاً بهطور سازگار پیادهسازی نشده است. این گزینه قواعدی مبنی بر بیاهمیت بودن تعداد و نوع فاصلههای خالی را نقض میکند، زیرا تعداد متفاوت فاصلههای بین آرگومانها معنادار در نظر گرفته میشود.
لطفاً گزارشهای باگ را با استفاده از سامانهی پیگیری مشکلات در صفحهی مخزن گیتهاب https://github.com/ftilmann/latexdiff.git ارسال کنید، یا آنها را به نشانی tilmann -- AT -- gfz-potsdam.de بفرستید. شماره نگارش latexdiff را نیز قید کنید (از توضیحات بالای سورسکد یا با استفاده از --version). اگر با فایلهای latexای مواجه شدید که بدون خطا بوده و مطابق با ویژگیهای ذکرشده در بالا هستند، اما مقایسهی تفاوت آنها همچنان خروجی latex بدون خطا تولید نمیکند، لطفاً آن فایلها را برای من بفرستید، ترجیحاً طوری ویرایش شوند که تا زمانی که مشکل بازتولید میشود، فقط حاوی بخش مشکلساز باشند. اگر فایل شما به فایلهای کلاس (class) غیر استاندارد وابسته است، باید آنها را نیز ارسال کنید. من به نمونههایی که در کامپایل latex فایلهای اصلیشان مشکل داشته باشم رسیدگی نخواهم کرد.
همچنین ببینید (SEE ALSO)
latexrevise, latexdiff-vc
سازگاری و قابلیت حمل (PORTABILITY)
latexdiff از دستورات خارجی استفاده نمیکند و بنابراین باید روی هر بستری که از Perl 5.6 یا بالاتر پشتیبانی میکند اجرا شود. در صورتی که فایلهایی با کدگذاریهایی غیر از ASCII یا UTF-8 پردازش شوند، Perl 5.8 یا بالاتر مورد نیاز است.
نگارش استاندارد latexdiff نیازمند نصب بستهی پرل "Algorithm::Diff" (موجود در www.cpan.org - http://search.cpan.org/~nedkonz/Algorithm-Diff-1.15) است، اما یک نگارش مستقل، latexdiff-so، که این بسته درون آن گنجانده شده نیز موجود است. latexdiff-fast نیازمند وجود دستور diff است.
نویسنده (AUTHOR)
نگارش 1.4.0 حق نشر (C) 2004-2024 Frederik Tilmann
این برنامه یک نرمافزار آزاد است؛ میتوانید آن را تحت شرایط مجوز عمومی همگانی گنو نگارش ۳ (GNU General Public License Version 3) بازتوزیع کرده یا تغییر دهید.
مشارکتکنندگان در اصلاحات و بخشهای افزوده: V. Kuhlmann، J. Paisley، N. Becker، T. Doerges، K. Huebner، T. Connors، Sebastian Gouezel و بسیاری دیگر. با تشکر از افراد فراوانی که گزارش باگ، پیشنهاد قابلیت و بازخوردهای دیگر فرستادند.
| 2025-12-30 | perl v5.38.2 |