مشکل از بسته persian-bib
یا natbib
نیست. شما اگر نمونه plain TeX
زیر را با دستور xetex filename.tex
پردازش کنید خروجی زیر رو میگیرید.
\input bidi
\font\test="Yas:script=arab" at 14pt
\setRTL
\test
(ترابی و دیگران، ۲۰۱۵)
(ترابی و دیگران، ۲۰۱۵a)
(ترابی و دیگران، a)
\bye
این نمونه رو توی plain TeX
بهتون نشون دادم تا بگ که این مشکل ربطی به لاتک و یا بستهها نداره. اگر به دقت نگاه کنید مشکل زمانی پیش میاد که بعد از حرف a
شما پرانتز رو میبندید. موتور زیتک الگوریتم یونیکد دوجهته رو برای کلمات اجرا میکنه بنابراین وقتی حرف a
و پرانتز بسته رو میبینه این رفتار رو از خودش نشون میده. بیشتر ویژگی هستش تا اینکه باگ باشه. برای حل مشکل باید حروف لاتین داخل دستور \lr
قرار داده بشند.
برگردیم به نمونه شما. اگر فایل PersianBib.bbl
رو نگاه کنید همچین چیزی میبینید
\bibitem[ترابی و دیگران(2015{\natexlab{a}})ترابی, حقی, و
جواهری]{Torabi2015a}
ف. ترابی, ش. حقی, و ع. جواهری.
\newblock یک مقاله در زمینه ی انرژی.
\newblock \emph{نشریه ای در زمینه ی انرژی های سبز},
25, 2015{\natexlab{a}}.
بنابراین برای حل مشکل کافیه فایل plainnat-fa.bst
رو ویرایش کنید. در این فایل ما میخواهیم دستور \natexlab
رو به صورت
\providecommand{\natexlab}[1]{#1}
تعریف شده. برای این کار کافیه تعریف این دستور رو در این فایل بصورت
\renewcommand*{\natexlab}[1]{\lr{#1}}
تغییر بدهید. سعی من در اینجا حل مشکل نیست بلکه دارم به شما نشان میدهم که مشکل کجاست و کجا باید حل بشه. بنابراین این راهحل عمومی نیست ممکنه آرگومان دستور حروف پارسی باشه و بنابراین راهحل من مشکل خواهد داشت در ایین مورد. راهحل اساسی اینه که به گونهای این دستور رو تعریف کنیم تا اگر محتوای این دستور حروف لاتین بود از یک \lr
استفاده کنه تا خروجی ما مشکلی نداشته باشه (این یک تمرین ماکرونویسی برای شما یا مولف بسته persian-bib
است).
حالا خروجی شما بصورت زیر خواهد بود