ltx2crossrefxml(1) LATEX CROSSREFWARE ltx2crossrefxml(1)

ltx2crossrefxml.pl - ایجاد فایل‌های XML برای ارسال به crossref.org

ltx2crossrefxml [--debug] [-c config_file] [-o output_file] [-input-is-xml]
latex_file1 latex_file2 ...

فایل پیکربندی. اگر این فایل وجود نداشته باشد، مقادیر پیش‌فرض استفاده می‌شوند. برای آگاهی از قالب آن، بخش زیر را ببینید.
فایل خروجی. اگر از این گزینه استفاده نشود، XML به stdout فرستاده می‌شود.
رشته‌های ورودی نویسنده و عنوان تبدیل نشوند؛ فرض می‌شود آن‌ها XML معتبر هستند.
چاپ برخی گزارش‌های پیشرفت کار.

گزینه‌های معمول "--help" و "--version" نیز پشتیبانی می‌شوند. گزینه‌ها می‌توانند با "-" یا "--" آغاز شوند و ترتیب آن‌ها دلخواه است.

به ازای هر latex_file ارائه‌شده، این اسکریپت فایل‌های ".rpi" و (در صورت وجود) ".bbl" و ".aux" را خوانده و XML متناظری تولید می‌کند که می‌تواند در Crossref (https://crossref.org) بارگذاری شود. هر پسوندی از latex_file نادیده گرفته می‌شود و خودِ latex_file خوانده نمی‌شود (و حتی نیازی به وجود آن نیست).

هر فایل ".rpi" فراداده‌های مربوط به یک مقالهٔ تکی را جهت بارگذاری به Crossref (یک عنصر "journal_article" در طرح‌وارهٔ آن‌ها) مشخص می‌کند؛ مثالی در زیر آمده است. این فایل‌ها توسط بسته‌های "resphilosophica" (https://ctan.org/pkg/resphilosophica)، "aomart" (https://ctan.org/pkg/aomart)، فرایند انتشار TUGboat (https://tug.org/TUGboat/repository.html) و بسته‌های دیگر تولید می‌شوند. همچنین می‌توان آن‌ها را دستی یا با هر روش دیگری که پیاده‌سازی می‌کنید ایجاد کرد.

هرگونه فایل ".bbl"، ".aux" و ".bib" برای اطلاعات ارجاع در XML خروجی به کار می‌روند. بخش CITATIONS در زیر را ببینید.

مگر در حالتی که "--rpi-is-xml" تعیین شده باشد، برای تمام متن‌ها (نویسندگان، عنوان، ارجاعات)، دنباله‌های کنترلی استاندارد TeX در صورت نیاز با متن ساده یا UTF-8 جایگزین یا حذف می‌شوند. روال "LaTeX::ToUnicode::convert" برای این کار استفاده می‌شود (https://ctan.org/pkg/bibtexperllibs). توالی‌های کنترلی پیچیدهٔ TeX تقریباً به‌طور قطع به درستی پردازش نخواهند شد.

اگر "--rpi-is-xml" داده شود، رشته‌های نویسنده و عنوان از فایل‌های rpi همان‌گونه که هستند در خروجی قرار می‌گیرند، با این فرض که XML معتبر هستند؛ هیچ بررسی انجام نمی‌شود.

متن ارجاع از فایل‌های ".bbl" همواره از LaTeX به متن ساده تبدیل می‌شود.

این اسکریپت فقط یک فایل XML می‌نویسد. بارگذاری آن به Crossref بر عهدهٔ شماست؛ برای نمونه، می‌توانید از ابزار جاوا آن‌ها به نام "crossref-upload-tool.jar" (https://www.crossref.org/education/member-setup/direct-deposit-xml/https-post) استفاده کنید.

برای تعاریف طرح‌وارهٔ Crossref که هم‌اکنون توسط این اسکریپت در خروجی قرار می‌گیرد، ببینید: https://data.crossref.org/reports/help/schema_doc/5.4.0/index.html به همراه پیوندها و اطلاعات تکمیلی در https://www.crossref.org/documentation/schema-library/metadata-deposit-schema-5-4-0.

فایل پیکربندی به عنوان کد Perl خوانده می‌شود. بنابراین، خطوط توضیحات که با "#" آغاز می‌شوند و خطوط خالی نادیده گرفته می‌شوند. سایر خطوط معمولاً انتساب‌هایی به این شکل هستند (فاصله‌ها اختیاری‌اند):

$variable = value ;

معمولاً بر اساس قواعد نحوی Perl، مقدار یک "string" محصور در نویسه‌های نقل‌قول تکی یا دوتایی ASCII است. هدف، تعیین مقادیر خاص کاربر و خاص مجله است که برای بارگذاری به Crossref مورد نیاز است. متغیرهایی که استفاده می‌شوند عبارتند از:

$depositorName = "Depositor Name";
$depositorEmail = 'depositor@example.org';
$registrant = 'Registrant';  # required, organization name
$fullTitle = "FULL TITLE";   # required, journal name
$issn = "1234-5678";         # required, ISSN
$abbrevTitle = "ABBR. TTL."; # optional, abbreviated journal name
$coden = "CODEN";            # optional

برای هر اجرای مشخص، فرض می‌شود تمام داده‌های ".rpi" خوانده‌شده متعلق به مجله‌ای هستند که در فایل پیکربندی تعیین شده است. دقیق‌تر بگوییم، داده‌های پیکربندی به صورت یک عنصر "journal_metadata" با "full_title" و "issn" داده‌شده و غیره نوشته می‌شوند، و سپس هر ".rpi" به صورت عناصر "journal_issue" به‌علاوهٔ "journal_article" نوشته می‌شود.

فایل پیکربندی همچنین می‌تواند یک تابع Perl به نام "LaTeX_ToUnicode_convert_hook" تعریف کند. در صورت تعریف شدن، این تابع در ابتدای روال تبدیل متن LaTeX به Unicode فراخوانی می‌شود؛ عملیاتی که با ماژول LaTeX::ToUnicode از بستهٔ "bibtexperllibs" (https://ctan.org/pkg/bibtexperllibs) انجام می‌گیرد. تابع باید یک رشته (متن LaTeX) را بپذیرد و یک رشته (احتمالاً رشتهٔ تبدیل‌شده) بازگرداند. سپس تبدیل‌های استاندارد روی رشتهٔ بازگردانده‌شده اعمال می‌شوند، بنابراین تابع پیکربندی‌شده تنها کافی است موارد خاص، مانند توالی‌های کنترلی ویژهٔ مجلهٔ مورد نظر، را مدیریت کند. (برای نمونه، فایل "ltx2crossrefxml-tugboat.cfg" متعلق به TUGboat را ببینید.)

فایل پیکربندی همچنین می‌تواند یک هش "BibentryToCrossref" تعریف کند که انواع مدخل‌های Crossref را به انواع مدخل‌های BibTeX مورد استفاده در پردازش کتاب‌شناسی نگاشت می‌کند (بخش CITATIONS را ببینید)، برای نمونه:

%BibentryToCrossref = ('WEBPAGE' => 'other',
                       'MISC' => 'other');

کلیدهای این هش باید با حروف بزرگ (upper case) و مقادیر مدخل‌ها باید با حروف کوچک (lower case) باشند..SH "قالب فایل RPI (RPI FILE FORMAT)" در اینجا (بخش مربوطه از) فایل ".rpi" متناظر با مثال "rpsample.tex" در بستهٔ "resphilosophica" (https://ctan.org/pkg/resphilosophica) آمده است:

%authors=Boris Veytsman\and A. U. Th{\o }r\and C. O. R\"espondent
%title=A Sample Paper:\\ \emph  {A Template}
%year=2012
%volume=90
%issue=1--2
%startpage=1
%endpage=1
%doi=10.11612/resphil.A31245
%paperUrl=http://borisv.lk.net/paper12
%publicationType=full_text

سایر خطوط، که برخی با % شروع نمی‌شوند، نادیده گرفته می‌شوند (و نمایش داده نشده‌اند). برای جزئیات بیشتر دربارهٔ پردازش، کد را ببینید.

مقدار %paperUrl چیزی است که با %doi داده‌شده مرتبط خواهد شد (به عنوان عنصر "resource" خروجی داده می‌شود). Crossref قویاً توصیه می‌کند که نشانی وب (url) برای به اصطلاح یک صفحه فرود (landing page) باشد، و نه مستقیماً یک فایل pdf (https://www.crossref.org/education/member-setup/creating-a-landing-page). مورد خاص: اگر نشانی وب مشخص نشده باشد، و مجله Res Philosophica باشد، یک نشانی وب جستجوی اختصاصی با استفاده از pdcnet.org بازگردانده می‌شود. هر مجلهٔ دیگری همیشه باید این مورد را مشخص کند.

فیلد %authors در "\and" تقسیم می‌شود (با نادیده گرفتن فاصله‌های خالی قبل و بعد از آن)، و به عنوان عنصر "contributors" خروجی داده می‌شود، با استفاده از "sequence="first"" برای اولین فرد فهرست‌شده، و "sequence="additional"" برای بقیه. نویسندگان با استفاده از "BibTeX::Parser::Author" (https://ctan.org/pkg/bibtexperllibs) تجزیه می‌شوند.

اگر %publicationType مشخص نشده باشد، مقدار پیش‌فرض آن "full_text" خواهد بود، چرا که از گذشته به همین صورت بوده است؛ "full_text" می‌تواند به صورت صریح نیز مشخص شود. مقادیر مجاز دیگر توسط اسکیمای Crossref، مقادیر "abstract_only" و "bibliographic_record" هستند. در نهایت، اگر مقدار آن "omit" باشد، صفت "publication_type" به طور کامل از عنصر داده‌شدهٔ "journal_article" حذف می‌شود.

هر فایل ".rpi" باید تنها حاوی اطلاعات یک مقاله باشد، اما چندین فایل را می‌توان در یک بار اجرا خواند. پشتیبانی از چندین مقاله در یک فایل ".rpi" واحد دشوار نبود، اما محدود کردن ورودی به یک مقاله در هر فایل، اشکال‌زدایی و اصلاح خطاها را آسان‌تر می‌کند.

سه قالبی که برای نام‌ها شناسایی می‌شوند (نه به صورت تصادفی) همانند BibTeX هستند:

First von Last
von Last, First
von Last, Jr., First

این قالب‌ها را می‌توان آزادانه درون یک خط %authors ترکیب کرد، که با "\and" (شامل بک‌اسلش) از یکدیگر جدا می‌شوند. برخلاف BibTeX، کاما به عنوان جداکننده نام پشتیبانی نمی‌شود.

به طور خلاصه، تقریباً همیشه می‌توانید از شکل اول استفاده کنید؛ تنها نباید در حالتی استفاده کنید که یا بخش Jr وجود داشته باشد، یا بخش Last شامل چندین نشانه باشد اما هیچ بخش von وجود نداشته باشد. برای جزئیات، سند "btxdoc" (‏«BibTeXing» نوشتهٔ Oren Patashnik) را ببینید. نویسندگان با استفاده از "BibTeX::Parser::Author" (https://ctan.org/pkg/bibtexperllibs) تجزیه می‌شوند.

در خط %authors یک فایل ".rpi"، برخی دستورالعمل‌های فرعی شناسایی می‌شوند که با نویسه‌های "|" مشخص می‌گردند. توضیح آن با یک مثال آسان‌تر است:

%authors=|organization|\LaTeX\ Project Team \and Alex Brown|orcid=123

بنابراین: ۱) اگر "|organization|" مشخص شده باشد، نام نویسنده طبق الزام اسکیمای Crossref، به جای "person_name" معمول، به عنوان مشارکت‌کنندهٔ "organization" خروجی داده خواهد شد.

۲) اگر "|orcid=value|" مشخص شده باشد، مقدار value به عنوان یک عنصر "ORCID" برای آن "person_name" خروجی داده می‌شود.

این دو دستورالعمل، "|organization"| و "|orcid|" مانعة‌الجمع هستند، زیرا اسکیمای Crossref آن‌ها را به این صورت تعریف کرده است. علامت "=" بعد از "orcid" الزامی است، در حالی که تمام فاصله‌های بعد از کلیدواژهٔ "orcid" نادیده گرفته می‌شوند. به جز آن، مقدار ORCID به صورت عین‌به‌عین در خروجی درج می‌شود. (برای نمونه، مقدار ORCID برابر با 123 در بالا آشکارا نامعتبر است، اما به هر حال، بدون هیچ هشداری خروجی داده خواهد شد.)

نویسه‌های اضافی "|"، در ابتدا یا انتهای کل رشتهٔ %authors، یا به صورت دوتایی در میان آن، پذیرفته شده و نادیده گرفته می‌شوند. فاصله‌های خالی در اطراف تمامی نویسه‌های "|" نادیده گرفته می‌شوند..SH "ارجاعات (CITATIONS)" هر فایل ".bbl" متناظر با یک فایل ورودی ".rpi" خوانده شده و برای تولید عنصر "citation_list" برای آن "journal_article" در XML خروجی استفاده می‌شود. اگر برای یک ".rpi" مشخص هیچ فایل ".bbl"ی وجود نداشته باشد، هیچ "citation_list"ی برای آن مقاله در خروجی تولید نخواهد شد.

فایل‌های ".bbl" برای ایجاد ارجاعات "unstructured_citation" تعریف‌شده توسط Crossref پردازش می‌شوند، یعنی محتویات ارجاع (هر بند در ".bbl") به‌صورت یک رشته متنی هموار بدون هیچ‌گونه نشانه‌گذاری، از جمله تغییرات قلم.

متن کتاب‌شناسی بدون قید و شرط از طریق روش شرح‌داده‌شده در بالا از TeX به XML تبدیل می‌شود. غیرعادی نیست که این تبدیل ناقص یا نادرست باشد. بررسی این موضوع به عهده شماست؛ برای مثال، اگر هرگونه بک‌اسلش یا جفت‌علامت دلاری در خروجی باقی بماند، به احتمال زیاد یک خطا است.

علاوه بر این، فرض بر این است که فایل ".bbl" حاوی دنباله‌ای از ارجاعات است که هر یک با "\bibitem{KEY}" آغاز می‌شوند (که خود آن باید در ابتدای یک خط باشد و قبل از آن فقط نویسه‌های فاصله قرار گیرند)، و کل کتاب‌شناسی با "\end{thebibliography}" پایان می‌یابد (مشابهاً در ابتدای یک خط). یک فایل ".bbl" که از این قالب پیروی نکند، نتایج مفیدی ایجاد نخواهد کرد. فایل ".bbl" تا زمانی که دارای این قالب باشد، می‌تواند به‌صورت دستی، با BibTeX یا هر روش دیگری ایجاد شود.

صفت "key" برای عنصر "citation"، همان آرگومان KEY دستور "\bibitem" در نظر گرفته می‌شود. شماره ترتیبی ارجاع (1، 2، ...). آرگومان "\bibitem" می‌تواند خالی باشد ("\bibitem{}")، و شماره ترتیبی به‌تنهایی استفاده خواهد شد. اگرچه TeX کلیدهای خالی "\bibitem" را پردازش نخواهد کرد، اما هنگام ایجاد یک ".bbl" صرفاً برای Crossref می‌تواند مناسب و راحت باشد.

فایل ".rpi" نیز برای اطلاعات کتاب‌شناسی، در همین قالب بررسی می‌شود.

ارجاعات ساختاریافته‌ی Crossref به شرح زیر افزوده می‌شوند:

1. اگر یک فایل ".aux" وجود داشته باشد، برای هر دستور "\bibdata" بررسی می‌شود. فایل‌های "bib" در این دستورها خوانده می‌شوند و از اطلاعات موجود در آن‌ها برای تولید مدخل‌های XML استفاده می‌شود. این اسکریپت از "kpsewhich" برای جستجوی فایل‌های bib استفاده می‌کند، بنابراین از قراردادهای معمول BibTeX برای مسیرهای جستجو پیروی می‌شود.
2. برای هر ارجاع، مدخل متناظر در فایل "bib" پردازش می‌شود.
3. نوع مدخل Crossref طبق الگوریتم شرح‌داده‌شده در زیر ("انواع مدخل ارجاع (CITATION ENTRY TYPES)") تعیین می‌شود.
4. از فیلدهای مدخل برای پر کردن ارجاع ساختاریافته استفاده می‌شود.

طرح‌واره‌ی فعلی Crossref در https://data.crossref.org/reports/help/schema_doc/5.4.0/schema_5_4_0.html صفت "type" را برای یک ارجاع تعریف می‌کند. متأسفانه فهرست انواع ممکن کاملاً با فهرست انواع مدخل BibTeX مطابقت ندارد. بنابراین، اسکریپت از الگوریتم زیر برای تعیین نوع مدخل Crossref برای یک ارجاع استفاده می‌کند:

1. اگر مدخل دارای فیلد "crossrefentrytype" باشد، از آن استفاده می‌شود.
2. در غیر این صورت اگر نوع مدخل BibTeX در هش "BibentryToCrossref" در فایل پیکربندی ("قالب فایل پیکربندی (CONFIGURATION FILE FORMAT)") آمده باشد، مقدار آن استفاده می‌شود.
3. در غیر این صورت، از نگاشت پیش‌فرض استفاده می‌شود. این اسکریپت انواع متعددی از مدخل‌های BibTeX را می‌شناسد و در بیشتر موارد کار را به‌خوبی انجام می‌دهد.

ltx2crossrefxml.pl ../paper1/paper1.tex ../paper2/paper2.tex \
                    -o result.xml
ltx2crossrefxml.pl -c myconfig.cfg paper.tex -o paper.xml

Boris Veytsman https://github.com/borisveytsman/crossrefware

کپی‌رایت (C) 2012-2025 متعلق به Boris Veytsman

این یک نرم‌افزار آزاد است. شما می‌توانید نسخه‌های آن را تحت شرایط «مجوز عمومی همگانی گنو» (GNU General Public License) (هر نسخه‌ای) https://www.gnu.org/licenses/gpl.html بازتوزیع کنید. تا حد مجاز طبق قانون، هیچ ضمانتی وجود ندارد.

2025-09-04