به دلیل قطعی اینترنت و نبود دسترسی به ایمیل‌های خارجی، می‌توانید بدون نیاز به تایید ایمیل، ثبت‌نام کنید و پرسش‌های خود را بپرسید.

اولین بار است که به اینجا می‌آیید؟ راهنمای سایت را بخوانید!
0 رای
1.8k بازدید

سلام
بسته xepersian-hm در تکلایو ۲۰۲۰ دیدم که ایجاد شده است که کارهایی در مورد خاصیت Kashida انجام می‌دهد.

سوالم اینه نحوه کارش چطور است؟

اضافه کردن کاراکتر به کاراکترها یا تغییر و Patch در بسته زی‌پرشین؟

فایل نمونه ضمیمه شده است.

با تشکر قبلی

1 پاسخ

+2 رای
 
بهترین پاسخ

این بسته همون کد بسته زی‌پرشین برای کشیده رو برداشته و دقیقا همون کد تک رو به زبان برنامه‌نویسی لاتک ۳ ترجمه کرده. تنها کار اضافه‌ای که این بسته انجام می‌ده این هست که در بسته زی‌پرشین کشیده توسط یک خط افقی (توسط دستور بدوی \hrule قرار می‌گیره) در واقع بصورت دقیق‌تر این بصورت \leaders\hrule هست که طبق قوانین تک بعد باید شما یک glue یا چسب قرار بدهید. مقدار این چسب در بسته زی‌پرشین ‍0pt plus 0.5em هست. کاری که این بسته جدید انجام می‌ده اینه که برای قام‌های مختلف چسب‌های مختلف تعریف کرده و این اجازه رو به کاربر می‌ده که مقدار چسب رو خودش مشخص کنه (در صورت استفاده از قلم‌های دیگر یا در صورت نیاز). این تنها تفاوتش با کد اصلی در بسته زی‌پرشین هست.

برای استفاده از بسته می‌تونی راهنمای بسته رو ببینی. این درست نیست که من بگم و بهتره که افراد دیگر که بی‌طرف هستند با دیدن کد بسته نظر بدهند ولی این بسته کار خاصی انجام نمی‌ده و این روش درست کردن کشیده کیفیت پایینی داره و اصولی نیست (این فقط یک وصله‌کاری هست). بنابراین من استفاده از این بسته رو پیشنهاد نمی‌کنم. نکته دیگر اینه که این بسته رابط کاربری خیلی ضعیفی داره. این بسته، بسته زی‌پرشین رو فراخوانی می‌کنه اما شما نمی‌تونید گزینه‌های بسته زی‌پرشین رو از طریق این بسته استفاده کنید.

ویرایش

تغییراتی که این بسته در کد زی‌پرشین می‌ده بصورت زیر هست.

\ProvidesFile{kashida-xepersian.def}[2018/01/04 v0.6 implementation of Kashida for xepersian package]
\chardef\xepersian@zwj="200D % zero-width joiner
\chardef\xepersian@lrm="200E
\chardef\xepersian@kashidachar="0640 % kashida

\chardef\xepersian@D=10 % dual-joiner class
\chardef\xepersian@L=11 % lam
\chardef\xepersian@R=12 % right-joiner
\chardef\xepersian@A=13 % alef
%\chardef\xepersian@H=14 % heh
\chardef\xepersian@Y=14 % yeh
\chardef\xepersian@V=4096 % vowel or other combining mark (to be ignored)
\newif\if@Kashida@on
\newif\if@Kashida@XB@fix
\newskip\xepersian@hrule@glue
\xepersian@hrule@glue=0pt plus .5em
\def\xepersian@kashida@Fix@XB{%
  \if@Kashida@XB@fix
    \xepersian@hrule@glue=.14em plus .5em
  \fi
  \xepersian@kashida
    \if@Kashida@XB@fix
    \xepersian@hrule@glue=0pt plus .5em
  \fi  
}
\def\xepersian@kashida{\if@Kashida@on
\xepersian@lrm\xepersian@zwj\nobreak
    \leaders\hrule height \XeTeXglyphbounds\tw@ \the\XeTeXcharglyph\xepersian@kashidachar  depth \XeTeXglyphbounds\f@ur \the\XeTeXcharglyph\xepersian@kashidachar \hskip\xepersian@hrule@glue   
    \xepersian@zwj\fi}
    

\def\setclass#1#2{\def\theclass{#1}\def\charlist{#2}%
  \expandafter\dosetclass\charlist,\end}
\def\dosetclass#1,#2\end{%
  \def\test{#1}\def\charlist{#2}%
  \ifx\test\empty\let\next\finishsetclass
  \else \XeTeXcharclass "\test = \theclass
     \let\next\dosetclass \fi
  \expandafter\next\charlist,,\end}
\def\finishsetclass#1,,\end{}

\setclass \xepersian@A {0622,0623,0625,0627}
\setclass \xepersian@R {0624,0629,062F,0630,0631,0632,0648,0698}
\setclass \xepersian@D {0626,0628,062A,062B,062C,062D,062E}
\setclass \xepersian@D {0633,0634,0635,0636,0637,0638,0639,063A}
\setclass \xepersian@D {0640,0641,0642,0643,0645,0646,0647,0649,064A}
\setclass \xepersian@Y {0649,064A,06CC}
\setclass \xepersian@D {067E,0686,06A9,06AF}%,06CC}
\setclass \xepersian@L {0644}
\setclass \xepersian@V {064B,064C,064D,064E,064F,0650,0651,0652}

\XeTeXinterchartoks \xepersian@D \xepersian@D = {\xepersian@kashida}
\XeTeXinterchartoks \xepersian@Y \xepersian@Y =
{\xepersian@kashida@Fix@XB}
\XeTeXinterchartoks \xepersian@D \xepersian@Y =
{\xepersian@kashida@Fix@XB}
\XeTeXinterchartoks \xepersian@Y \xepersian@D =
{\xepersian@kashida}
%\XeTeXinterchartoks \xepersian@H \xepersian@D = {\if@Kashida@XB@fix\else\xepersian@kashida\fi}
%\XeTeXinterchartoks \xepersian@D \xepersian@H = {\xepersian@kashida}
\XeTeXinterchartoks \xepersian@L \xepersian@D = {\xepersian@kashida}
\XeTeXinterchartoks \xepersian@D \xepersian@L = {\xepersian@kashida}
%\XeTeXinterchartoks \xepersian@L \xepersian@H = {\xepersian@kashida}
%\XeTeXinterchartoks \xepersian@H \xepersian@L = {\if@Kashida@XB@fix\else\xepersian@kashida\fi}
\XeTeXinterchartoks \xepersian@L \xepersian@L = {\xepersian@kashida}
\XeTeXinterchartoks \xepersian@D \xepersian@R = {\xepersian@kashida}
%\XeTeXinterchartoks \xepersian@H \xepersian@R = {\if@Kashida@XB@fix\else\xepersian@kashida\fi}
\XeTeXinterchartoks \xepersian@D \xepersian@A = {\xepersian@kashida}
%\XeTeXinterchartoks \xepersian@H \xepersian@A = {\if@Kashida@XB@fix\else\xepersian@kashida\fi}
\XeTeXinterchartoks \xepersian@L \xepersian@R = {\xepersian@kashida}
\XeTeXinterchartoks \xepersian@L \xepersian@A = {}

\newcommand{\KashidaOn}{\@Kashida@ontrue}
\newcommand{\KashidaOff}{\@Kashida@onfalse}

\newcommand{\KashidaXBFixOn}{\@Kashida@XB@fixtrue}
\newcommand{\KashidaXBFixOff}{\@Kashida@XB@fixfalse}
\KashidaOn
\endinput

بنابراین اگر این فایل جدید kashida-xepersian.def رو در کنار فایل تک ورودیت قرار بدی باید دقیقا نتیجه یکسانی که با این بسته می‌گیری با بسته زی‌پرشین بگیری جایی که فایل کمینه فایل زیر هست.

\documentclass{article}
\usepackage[Kashida,KashidaXBFix=on]{xepersian} 
\settextfont[Scale=4.5]{XB Kayhan}
\begin{document}
راهی جایی تابی چاپی چاههی تلاشهایی شتابهایی تابی چاپی راهی تلاشهــایی که کتابهایی که کلاههایی که
\end{document}
ممنونم برای این پاسخ خوب و توضیح فنی. کیف کردم.
متاسفانه مشکل فونت در فارسی اونقده زیاده که به هر دری زدم که حل بشه. ولی نشد که نشد.
برای همین میخاستم ببینم اگه روش درجش یا تصحیحش، مطمین هست، ازش استفاده کنم. که نشد.
الان خیلی کتاب‌ها بخاطر مشکل «کشیده»، من باید انتهای خط به خطشو چک کنم  و دستی بشکنم و مرتب کنم که فرمول آخر خط نشکسته باشه و موارد دیگه مربوط به این موضوع.
برای همین تصورم بود این کارمو راحت میکنه که نشد.
باز  خیلی ممنونم برای پاسخ
توسط (7.7k امتیاز)
برای اینکه کشیده کیفیت بالایی داشته باشه باید موتور حروف‌چین ابزار لازم رو داشته باشه در مورد بسته زی‌پرشین موتور زی‌تک این ابزار رو در اختیار قرار نمی‌ده و چیزی که در زی‌پرشین وجود داره تنها یک هک هست تا اینکه راه‌حل واقعی باشه. به عنوان نمونه موتور حروف‌چین تک پارسی رو ببین اونجا کشیدگی کیفیت بالایی داره چون این کار داره توی موتور حروف‌چین انجام میشه. در سطح ماکرو متاسفانه نمیشه همیشه معجزه کرد چون تنها می‌تونی با امکانات بدوی که موتور تک در اختیارت قرار می‌ده کار کنی و اگر این کار در موتور تک امکان‌پذیر نباشه نمی‌تونی در سطح ماکرو درستش کنی.

بهبودی که من می‌تونم در بسته زی‌پرشین بهش فکر کنم این هست که یک الگوریتم طراحی کنم که مقدار چسب رو بصورت خودکار محاسبه کنه برای هر قلمی که مورد استفاده قرار می‌گیره اما این هم باز همانند گزینه computeautoilg ممکنه سرعت پردازش رو پایین بیاره شاید حتی خیلی پایینتر.
توسط (26.4k امتیاز)
من لیست تغییرات این بسته جدید رو در ویرایش پاسخم قرار دادم.
توسط (26.4k امتیاز)
ممنون وفا برای توضیح فنی که در نظر بالایی دادین.
بله تک‌پارسی بنا به دلایلی که فرمودین، کشیده بهتر بود. البته مشکلات بسیار بیشتری در زمینه‌های دیگری داشتیم باهاش.
در مقاله، پایان‌نامه، اسلاید و ... چون حجم فایل کم هست، فکر نکنم آن زمان زیاد شدن به چشم بیاد.
و اگه امکان on و Off در اختیار کاربر باشه، می‌تونه این خاصیت رو خاموش کنه.
ولی در کتاب‌های ناشرین، مشکل زمان نداریم. چون مهمتر از زمان، کیفیت هست براشون.
قبلا مشکلات دیگر xetex  و محدودیت‌هایش را ازتون شنیده‌ام، برای این سوال شد برام. (مثلا مشکل رنگ و هایپرلینک که بتونه بشکنه و کل متن رو رنگی می‌کرد و ...)
برام سواله، بهتر نیست به جای این هک‌هایی که فرمودین، موتور عوض بشه؟
آیا تعویض موتور، زمان بیشتری از زمانی که برای این هک‌ها صرف میشه، صرف خواهد کرد؟
توسط (7.7k امتیاز)
پرسیدن سوال
سایت پرسش و پاسخ پارسی‌لاتک جایی برای پرسش و پاسخ درباره سیستم حروف‌چینی لاتک و بسته زی‌پرشین است. در اینجا می‌توانید سوال‌های خود را بپرسید و به سوال‌های دیگران پاسخ دهید.

7.2k پرسش

6.6k پاسخ

23.7k نظر

11.7k کاربر

basket cart icon

محصولات مرتبط با LaTeX

در فروشگاه پارسی‌لاتک


basket cart icon

حمایت مالی از پارسی‌لاتک

برای تامین هزینه‌های نگه‌داری و به‌روزرسانی

محبوب‌ترین برچسب‌ها

رفع خطا جدول xepersian مراجع ریاضی‌نویسی bidi شکل فونت فهرست مطالب شماره‌گذاری منابع پانویس tikz parsilatex بیب‌تک تک‌لایو بیمر اسلاید زی‌پرشین پاورقی سربرگ bibtex نماد رسم شکل فرمول‌نویسی هدر ارجاع‌دهی biditexmaker ویرایشگر قالب beamer واژه‌نامه texstudio اندازه فونت عنوان فصل ماتریس شماره صفحه اعمال نشدن تغییرات در پی‌دی‌اف رسم جدول bidipresentation حاشیه رنگ عنوان شکل اسلاید فارسی محیط قضیه گراف حروف‌چینی کد مکان شکل شماره فصل enumerate tabriz_thesis tikzpicture نمایه align زیرنویس شکل کادر itemize الگوریتم فهرست اشکال listings عدم اجرا نیم‌فاصله فاصله بین خطوط متن لاتین و فارسی hyperref بسته قالب پایان‌نامه فرمول نصب تک‌لایو فارسی‌تک نمودار شماره فرمول glossaries کپشن حروف‌چینی چندستونی خروجی فونت فارسی و انگلیسی ماکرونویسی extrafootnotefeatures لاتک biditools شماره پاورقی پیوست‌ سوال امتحانی فاصله‌گذاری فرمول چندضابطه‌ای tex subfigure biditufte-book header texmaker pdf خطا longtable تصویر شمارنده زیرنویس texlive2015 دیاگرام میک‌تک رسم نمودار شماره‌گذاری صفحات پایان نامه فهرست جداول تورفتگی texlive2016 شعر بولد آکولاد kashida میکروسافت ورد تنظیم جدول سوال چهارگزینه‌ای قاب texworks caption اندیس فاصله عمودی lollipop چپ‌چینی iust-thesis multicol فصل‌نویسی tcolorbox اعداد فارسی pgfplots xindy اوبونتو geometry xelatex texlive کاما fancyhdr وسط‌چینی تک لایو 2015 شماره گذاری به‌روزرسانی بسته aimc46 شکست خط صفر توخالی فرمول طولانی قالب کتاب فونت اعداد بیرون‌زدگی bidipoem عنوان بخش پوستر فاصله سطرها نوشتافت tex-programming قرآن tabriz-thesis ایتالیک winedt جستجوی معکوس فلش جایابی تصویر فهرست تصاویر پاراگراف‌بندی بازیابی اطلاعات هایپرلینک فهرست نمادها شمارنده فصل حروف‌چینی شعر font محیط ریاضی minipage رسم کادر جداکننده جدول طولانی به‌روزرسانی شماره‌گذاری فرمول algorithm2e proof equation eps جدول افقی tabular عکس متن فارسی و انگلیسی پانویس چندستونی کمک مالی فاصله خطوط فونت بولد زیرشکل پانویس پاراگرافی ltrfootnote پیوست computeautoilg فرمول چندخطی persian-bib neveshtuft غلط‌گیری املایی فونت ریاضی پیکان لاتکس قلم baselineskip شماره قسمت عنوان جدول
...