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

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

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

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

0 رای
791 بازدید

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

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

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

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

با تشکر قبلی

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

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