اولین بار است که به اینجا می‌آیید؟ راهنمای سایت را بخوانید!
Close Sidebar
وب‌سایت پرسش و پاسخ پارسی‌لاتک جایی برای پرسش و پاسخ درباره سیستم حروف‌چینی لاتک و بسته زی‌پرشین است. در اینجا می‌توانید سوال‌های خود را بپرسید و به سوال‌های دیگران پاسخ دهید.

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

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

نحوه کارکرد بسته xepersian-hm چگونه است؟

0 رای
1,025 بازدید

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

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

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

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

با تشکر قبلی

سوال شده فروردین 17, 1399 توسط هادی صفی اقدم (7,441 امتیاز)
ویرایش شده فروردین 17, 1399 توسط هادی صفی اقدم

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}
پاسخ داده شده فروردین 17, 1399 توسط وفا (24,380 امتیاز)
ویرایش شده فروردین 18, 1399 توسط وفا
ممنونم برای این پاسخ خوب و توضیح فنی. کیف کردم.
متاسفانه مشکل فونت در فارسی اونقده زیاده که به هر دری زدم که حل بشه. ولی نشد که نشد.
برای همین میخاستم ببینم اگه روش درجش یا تصحیحش، مطمین هست، ازش استفاده کنم. که نشد.
الان خیلی کتاب‌ها بخاطر مشکل «کشیده»، من باید انتهای خط به خطشو چک کنم  و دستی بشکنم و مرتب کنم که فرمول آخر خط نشکسته باشه و موارد دیگه مربوط به این موضوع.
برای همین تصورم بود این کارمو راحت میکنه که نشد.
باز  خیلی ممنونم برای پاسخ
برای اینکه کشیده کیفیت بالایی داشته باشه باید موتور حروف‌چین ابزار لازم رو داشته باشه در مورد بسته زی‌پرشین موتور زی‌تک این ابزار رو در اختیار قرار نمی‌ده و چیزی که در زی‌پرشین وجود داره تنها یک هک هست تا اینکه راه‌حل واقعی باشه. به عنوان نمونه موتور حروف‌چین تک پارسی رو ببین اونجا کشیدگی کیفیت بالایی داره چون این کار داره توی موتور حروف‌چین انجام میشه. در سطح ماکرو متاسفانه نمیشه همیشه معجزه کرد چون تنها می‌تونی با امکانات بدوی که موتور تک در اختیارت قرار می‌ده کار کنی و اگر این کار در موتور تک امکان‌پذیر نباشه نمی‌تونی در سطح ماکرو درستش کنی.

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