انجمن ویکی قلم‌های فارسی
ورود / عضویت

حروفچینی فارسی در زیپرشین (XePersian) و بای‌دای (bidi)

بحث پیرامون مسائل مربوط به قلم‌سازی، حروف‌چینی و بومی‌سازی

انتشار نسخهٔ جدید، 22.1، بستهٔ xepersian توسط مؤلف مربوطه

پستتوسط mingranina » 10 دسامبر 2018, 09:10

با سلام

نسخهٔ جدید، 22.1، بستهٔ xepersian توسط مؤلف مربوطه منتشر و در تاریخ 2018/12/10 در سایت ‎CTAN‎ آپلود شده و در تاریخ 2018/12/09 تحت عنوان ‎Revision 49367‎ در مخزن ‎TeXLive‎ قرار گرفته است.

کدهایی که اضافه و یا حذف گردیده و در سطح کاربری فنی و مهم هستند (با استفاده از دستور ‎diff -aU 0‎) در فایل پیوست ‎(diff-xepersian-22.0-22.1.diff)‎ ذخیره گردیده و در صورت تمایل می‌توانید آن را دانلود و در یک ویرایشگر معمولی مشاهده کنید.

فایل‌های حذف شده: ‎ ‎
فایل‌های اضافه شده: ‎ ‎

راهنما و منابع بسته‌های ‎LaTeX2e (source2e)‎ ممکن است در درک بهتر کدهای موجود در فایل diff-xepersian-22.0-22.1.diff مؤثر باشد.

تذکر بسیار مهم:

در این نسخه از XePersian همچنان فونت‌های سری HM فیلتر می‌شوند و برای رفع فیلترینگ این فونت‌ها ساده‌ترین راه برای یک کاربر نهایی همان است که در این پیام و این پیام توضیح داده شد.

با تشکر

پ.ن.1- لطفاً توجه فرمایید که در بسیاری از بخش‌های بسته‌های bidi و xepersian، کدهای اصلی از روی بسته‌های دیگر کپی شده و فقط نام متغیرها و دستورات به‌گونه‌ای ناهمگون تغییر کرده است که نمونه‌هایی از آن در پیام‌های قبلی در همین تاپیک گزارش شده است. بنابراین اگر علاقمند به فراگیری کدهای مربوطه هستید توصیه می‌شود راهنمای بسته‌های اصلی را که در این اطلاع‌رسانی‌ها معرفی می‌شوند حتی‌المقدور مطالعه فرمایید.

پ.ن.2- زمان‌های اعلام شده در متن پیام به وقت محلی سایت مربوطه است.
پیوست‌ها
diff-xepersian-22.0-22.1.zip
(541 بایت) دانلود 112 بار
mingranina
 
پست‌ها : 75
تاریخ عضویت: 17 سپتامبر 2016, 07:53

انتشار نسخهٔ جدید، 35.4، بستهٔ bidi توسط مؤلف مربوطه

پستتوسط mingranina » 11 دسامبر 2018, 09:10

با سلام

نسخهٔ جدید، 35.4، بستهٔ bidi توسط مؤلف مربوطه منتشر و در تاریخ 2018/12/11 در سایت ‎CTAN‎ آپلود شده و در تاریخ 2018/12/10 تحت عنوان ‎Revision 49379‎ در مخزن ‎TeXLive‎ قرار گرفته است.

کدهایی که اضافه و یا حذف گردیده و در سطح کاربری فنی و مهم هستند (با استفاده از دستور ‎diff -aU 0‎) در فایل پیوست ‎(diff-bidi-35.3-35.4.diff)‎ ذخیره گردیده و در صورت تمایل می‌توانید آن را دانلود و در یک ویرایشگر معمولی مشاهده کنید.

فایل‌های حذف شده: ‎ ‎
فایل‌های اضافه شده: ‎ ‎

راهنما و منابع بسته‌های ‎LaTeX2e (source2e)‎ ممکن است در درک بهتر کدهای موجود در فایل diff-bidi-35.3-35.4.diff مؤثر باشد.

با تشکر

پ.ن.1- لطفاً توجه فرمایید که در بسیاری از بخش‌های بسته‌های bidi و xepersian، کدهای اصلی از روی بسته‌های دیگر کپی شده و فقط نام متغیرها و دستورات به‌گونه‌ای ناهمگون تغییر کرده است که نمونه‌هایی از آن در پیام‌های قبلی در همین تاپیک گزارش شده است. بنابراین اگر علاقمند به فراگیری کدهای مربوطه هستید توصیه می‌شود راهنمای بسته‌های اصلی را که در این اطلاع‌رسانی‌ها معرفی می‌شوند حتی‌المقدور مطالعه فرمایید.

پ.ن.2- زمان‌های اعلام شده در متن پیام به وقت محلی سایت مربوطه است.
پیوست‌ها
diff-bidi-35.3-35.4.zip
(473 بایت) دانلود 99 بار
mingranina
 
پست‌ها : 75
تاریخ عضویت: 17 سپتامبر 2016, 07:53

انتشار نسخهٔ جدید، 22.2، بستهٔ xepersian توسط مؤلف مربوطه

پستتوسط mingranina » 11 دسامبر 2018, 09:12

با سلام

نسخهٔ جدید، 22.2، بستهٔ xepersian توسط مؤلف مربوطه منتشر و در تاریخ 2018/12/11 در سایت ‎CTAN‎ آپلود شده و در تاریخ 2018/12/10 تحت عنوان ‎Revision 49380‎ در مخزن ‎TeXLive‎ قرار گرفته است.

کدهایی که اضافه و یا حذف گردیده و در سطح کاربری فنی و مهم هستند (با استفاده از دستور ‎diff -aU 0‎) در فایل پیوست ‎(diff-xepersian-22.1-22.2.diff)‎ ذخیره گردیده و در صورت تمایل می‌توانید آن را دانلود و در یک ویرایشگر معمولی مشاهده کنید.

فایل‌های حذف شده: ‎ ‎
فایل‌های اضافه شده: ‎tikz.code-xepersian.def‎

راهنما و منابع بسته‌های ‎tikz (tikz.code.tex)‎ ممکن است در درک بهتر کدهای موجود در فایل diff-xepersian-22.1-22.2.diff مؤثر باشد.

تذکر بسیار مهم:

در این نسخه از XePersian همچنان فونت‌های سری HM فیلتر می‌شوند و برای رفع فیلترینگ این فونت‌ها ساده‌ترین راه برای یک کاربر نهایی همان است که در این پیام و این پیام توضیح داده شد.

با تشکر

پ.ن.1- لطفاً توجه فرمایید که در بسیاری از بخش‌های بسته‌های bidi و xepersian، کدهای اصلی از روی بسته‌های دیگر کپی شده و فقط نام متغیرها و دستورات به‌گونه‌ای ناهمگون تغییر کرده است که نمونه‌هایی از آن در پیام‌های قبلی در همین تاپیک گزارش شده است. بنابراین اگر علاقمند به فراگیری کدهای مربوطه هستید توصیه می‌شود راهنمای بسته‌های اصلی را که در این اطلاع‌رسانی‌ها معرفی می‌شوند حتی‌المقدور مطالعه فرمایید.

پ.ن.2- زمان‌های اعلام شده در متن پیام به وقت محلی سایت مربوطه است.
پیوست‌ها
diff-xepersian-22.1-22.2.zip
(457 بایت) دانلود 100 بار
mingranina
 
پست‌ها : 75
تاریخ عضویت: 17 سپتامبر 2016, 07:53

انتشار نسخهٔ جدید، 22.3، بستهٔ xepersian توسط مؤلف مربوطه

پستتوسط mingranina » 13 دسامبر 2018, 02:30

با سلام

نسخهٔ جدید، 22.3، بستهٔ xepersian توسط مؤلف مربوطه منتشر و در تاریخ 2018/12/12 در سایت ‎CTAN‎ آپلود شده و در تاریخ 2018/12/12 تحت عنوان ‎Revision 49395‎ در مخزن ‎TeXLive‎ قرار گرفته است.

کدهایی که اضافه و یا حذف گردیده و در سطح کاربری فنی و مهم هستند (با استفاده از دستور ‎diff -aU 0‎) در فایل پیوست ‎(diff-xepersian-22.2-22.3.diff)‎ ذخیره گردیده و در صورت تمایل می‌توانید آن را دانلود و در یک ویرایشگر معمولی مشاهده کنید.

فایل‌های حذف شده: ‎persiigits.map, persiigits.tec‎
فایل‌های اضافه شده: ‎persian-tex-text.map, persian-tex-text.tec‎

راهنما و منابع بسته‌های ‎fontspec, soul‎ ممکن است در درک بهتر کدهای موجود در فایل diff-xepersian-22.2-22.3.diff مؤثر باشد.

تذکر بسیار مهم:

در این نسخه از XePersian همچنان فونت‌های سری HM فیلتر می‌شوند و برای رفع فیلترینگ این فونت‌ها ساده‌ترین راه برای یک کاربر نهایی همان است که در این پیام و این پیام توضیح داده شد.

با تشکر

پ.ن.1- لطفاً توجه فرمایید که در بسیاری از بخش‌های بسته‌های bidi و xepersian، کدهای اصلی از روی بسته‌های دیگر کپی شده و فقط نام متغیرها و دستورات به‌گونه‌ای ناهمگون تغییر کرده است که نمونه‌هایی از آن در پیام‌های قبلی در همین تاپیک گزارش شده است. بنابراین اگر علاقمند به فراگیری کدهای مربوطه هستید توصیه می‌شود راهنمای بسته‌های اصلی را که در این اطلاع‌رسانی‌ها معرفی می‌شوند حتی‌المقدور مطالعه فرمایید.

پ.ن.2- زمان‌های اعلام شده در متن پیام به وقت محلی سایت مربوطه است.
پیوست‌ها
diff-xepersian-22.2-22.3.zip
(1.39 KiB) دانلود 103 بار
mingranina
 
پست‌ها : 75
تاریخ عضویت: 17 سپتامبر 2016, 07:53

انتشار نسخهٔ جدید، 22.4، بستهٔ xepersian توسط مؤلف مربوطه

پستتوسط mingranina » 14 دسامبر 2018, 03:45

با سلام

نسخهٔ جدید، 22.4، بستهٔ xepersian توسط مؤلف مربوطه منتشر و در تاریخ 2018/12/14 در سایت ‎CTAN‎ آپلود شده و در تاریخ 2018/12/13 تحت عنوان ‎Revision 49406‎ در مخزن ‎TeXLive‎ قرار گرفته است.

کدهایی که اضافه و یا حذف گردیده و در سطح کاربری فنی و مهم هستند (با استفاده از دستور ‎diff -aU 0‎) در فایل پیوست ‎(diff-xepersian-22.3-22.4.diff)‎ ذخیره گردیده و در صورت تمایل می‌توانید آن را دانلود و در یک ویرایشگر معمولی مشاهده کنید.

فایل‌های حذف شده: ‎ ‎
فایل‌های اضافه شده: ‎ ‎

راهنما و منابع بسته‌های ‎fontspec, The LaTeX3 Sources, The LaTeX3 Interfaces‎ ممکن است در درک بهتر کدهای موجود در فایل diff-xepersian-22.3-22.4.diff مؤثر باشد.

تذکر بسیار مهم:

در این نسخه از XePersian همچنان فونت‌های سری HM فیلتر می‌شوند و برای رفع فیلترینگ این فونت‌ها ساده‌ترین راه برای یک کاربر نهایی همان است که در این پیام و این پیام توضیح داده شد.

با تشکر

پ.ن.1- لطفاً توجه فرمایید که در بسیاری از بخش‌های بسته‌های bidi و xepersian، کدهای اصلی از روی بسته‌های دیگر کپی شده و فقط نام متغیرها و دستورات به‌گونه‌ای ناهمگون تغییر کرده است که نمونه‌هایی از آن در پیام‌های قبلی در همین تاپیک گزارش شده است. بنابراین اگر علاقمند به فراگیری کدهای مربوطه هستید توصیه می‌شود راهنمای بسته‌های اصلی را که در این اطلاع‌رسانی‌ها معرفی می‌شوند حتی‌المقدور مطالعه فرمایید.

پ.ن.2- زمان‌های اعلام شده در متن پیام به وقت محلی سایت مربوطه است.
پیوست‌ها
diff-xepersian-22.3-22.4.zip
(879 بایت) دانلود 101 بار
mingranina
 
پست‌ها : 75
تاریخ عضویت: 17 سپتامبر 2016, 07:53

انتشار نسخهٔ جدید، 22.5، بستهٔ xepersian توسط مؤلف مربوطه

پستتوسط mingranina » 17 دسامبر 2018, 07:19

با سلام

نسخهٔ جدید، 22.5، بستهٔ xepersian توسط مؤلف مربوطه منتشر و در تاریخ 2018/12/16 در سایت ‎CTAN‎ آپلود شده و در تاریخ 2018/12/16 تحت عنوان ‎Revision 49428‎ در مخزن ‎TeXLive‎ قرار گرفته است.

کدهایی که اضافه و یا حذف گردیده و در سطح کاربری فنی و مهم هستند (با استفاده از دستور ‎diff -aU 0‎) در فایل پیوست ‎(diff-xepersian-22.4-22.5.diff)‎ ذخیره گردیده و در صورت تمایل می‌توانید آن را دانلود و در یک ویرایشگر معمولی مشاهده کنید.

فایل‌های حذف شده: ‎ ‎
فایل‌های اضافه شده: ‎ ‎

راهنما و منابع بسته‌های ‎fontspec, The LaTeX3 Sources, The LaTeX3 Interfaces‎ ممکن است در درک بهتر کدهای موجود در فایل diff-xepersian-22.4-22.5.diff مؤثر باشد.

تذکر بسیار مهم:

در این نسخه از XePersian همچنان فونت‌های سری HM فیلتر می‌شوند و برای رفع فیلترینگ این فونت‌ها ساده‌ترین راه برای یک کاربر نهایی همان است که در این پیام و این پیام توضیح داده شد.

تغییرات در این نسخه صرفاً جایگزینی تکرار دوازده بارهٔ تابعی است که در نسخهٔ پیشین به بستهٔ xepersian اضافه شده بود و یک عمل مشابه را برای دوازده نویسهٔ مختلف انجام می‌دهد. این تغییرات پس از آن انجام می‌شود که دو روز پیش از آن پرسشی تحت عنوان How to check the existence of some characters in a font using a loop? در سایت معتبر SE مطرح شد که در آن از عبارت

Is there any way to replace those repeating lines of code in the argument of the function with a (while, until, ...) LOOP which iterates over a list of characters [06F0, ..., 066B]?

استفاده شده بود. دوستانی که این بحث را دنبال می‌کنند باید جریانی مشابه با همین مورد را که در این پیام به‌عرض رسید به‌خاطر داشته باشند.

با تشکر

پ.ن.1- لطفاً توجه فرمایید که در بسیاری از بخش‌های بسته‌های bidi و xepersian، کدهای اصلی از روی بسته‌های دیگر کپی شده و فقط نام متغیرها و دستورات به‌گونه‌ای ناهمگون تغییر کرده است که نمونه‌هایی از آن در پیام‌های قبلی در همین تاپیک گزارش شده است. بنابراین اگر علاقمند به فراگیری کدهای مربوطه هستید توصیه می‌شود راهنمای بسته‌های اصلی را که در این اطلاع‌رسانی‌ها معرفی می‌شوند حتی‌المقدور مطالعه فرمایید.

پ.ن.2- زمان‌های اعلام شده در متن پیام به وقت محلی سایت مربوطه است.
پیوست‌ها
diff-xepersian-22.4-22.5.zip
(793 بایت) دانلود 106 بار
mingranina
 
پست‌ها : 75
تاریخ عضویت: 17 سپتامبر 2016, 07:53

روشی دیگر برای عدم تکرار دوازده بارهٔ یک تابع در xepersian

پستتوسط mingranina » 21 دسامبر 2018, 15:19

با سلام

در این پیام در مورد تکرار دوازده بارهٔ یک تابع در نسخهٔ 22.4 بستهٔ xepersian توضیح داده شد و اینکه پرسشی در همین زمینه در سایت SE مطرح و متعاقب آن تغییراتی توسط مؤلف زیپرشین در نسخهٔ 22.5 برای عدم تکرار این تابع ایجاد شد. اینک در ادامهٔ همان پرسش در سایت SE یک پیشنهاد و یک راه حل نیز ارائه شده است. در اینجا برای آشنایی مقدماتی با قواعد برنامه‌نویسی لایهٔ بنیادین LaTeX3 مجموعهٔ این مطالب به‌ترتیب زمانی مطرح می‌شود.

ابتدا پرسشی که در تاریخ ‎2018/12/14‎ در سایت SE مطرح شد:

[نمایش]
Tisha Shusho:
I am trying to modify the current version of xepersian package to suit my needs. The following code copied from xepersian-mathsdigitspec.sty is supposed to check if some characters do exist in the font to be loaded. My question is about the function \__xepersian_mathsdigitspec_char_not_exist_error. Is there any way to replace those repeating lines of code in the argument of the function with a (while, until, ...) LOOP which iterates over a list of characters [06F0, ..., 066B]?

کد: انتخاب همهٔ
\cs_new:Npn \__xepersian_mathsdigitspec_error:nxx    { \msg_error:nnxx    {xepersian-mathsdigitspec} }
\cs_new:Nn \__xepersian_mathsdigitspec_msg_new:nnnn
  { \msg_new:nnxx {#1} {#2} { \tl_trim_spaces:n {#3} } { \tl_trim_spaces:n {#4} } }
\char_set_catcode_space:n {32}
\__xepersian_mathsdigitspec_msg_new:nnnn {xepersian-mathsdigitspec} {char-not-exist}
 {
  The font "#1" does not contain U+#2.
 }
 {
  Select another font and rerun xelatex.
 }
\char_set_catcode_ignore:n {32}

\prg_new_conditional:Nnn \__xepersian_mathsdigitspec_primitive_font_char_if_exist:n {p,TF,T,F}
  {
    \etex_iffontchar:D \l_fontspec_font `#1 \scan_stop:
      \prg_return_true:
    \else:
      \prg_return_false:
    \fi:
  }

\cs_new:Nn \__xepersian_mathsdigitspec_char_not_exist_error:n
 {
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۰ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F0 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۱ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F1 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۲ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F2 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۳ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F3 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۴ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F4 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۵ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F5 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۶ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F6 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۷ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F7 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۸ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F8 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۹ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F9 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ٫ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 066B } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ٪ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 066A } }
 }

**************************************************

پس از این پرسش سه نقطه‌نظر در تاریخ ‎2018/12/16‎ به‌صورت زیر مطرح می‌شود:
[نمایش]
Steven B. Segletes:
If you just need to see if certain glyphs exist, why not just use fonttable, as in \documentclass{article} \usepackage{fullpage} \usepackage{fonttable} \begin{document} \fonttable{cmti10} \fonttable{cmsy10} \end{document}
– Steven B. Segletes

**************************************************

[نمایش]
Steven B. Segletes:
Welcome to the site, as well. By the way, it is appropriate in your question to include a fully compiling example rather than just a code snippet or macro definition.
– Steven B. Segletes

**************************************************

[نمایش]
Tisha Shusho:
Thanks, Steven, the check for the existence of the characters must be done within the program. BTW, I tried too much to prepare a complete, small, and working example, but I couldn't, because I am a newbie.
– Tisha Shusho

**************************************************

و روشی که در تاریخ ‎2018/12/16‎ در نسخهٔ 22.5 xepersian در فایل xepersian-mathsdigitspec.sty توسط مؤلف آن به‌کار رفته است:

دوازده خط تکراری زیر
کد: انتخاب همهٔ
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۰ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F0 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۱ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F1 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۲ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F2 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۳ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F3 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۴ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F4 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۵ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F5 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۶ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F6 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۷ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F7 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۸ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F8 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۹ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F9 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ٫ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 066B } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ٪ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 066A } }

در تابع ‎\__xepersian_mathsdigitspec_char_not_exist_error‎ با قطعه کد زیر جایگزین شده
کد: انتخاب همهٔ
    \__xepersian_mathsdigitspec_char_set_not_exist_error:nn {
      06F0 , 06F1 , 06F2 , 06F3 , 06F4 , 06F5 , 06F6 , 06F7 , 06F8 ,
      06F9 , 066A , 066B
    } { #1 }

و قبل از تابع فوق هم قطعه کد زیر افزوده شده است
کد: انتخاب همهٔ
\clist_new:N \l_xepersian_mathsdigitspec_char_clist

\cs_new:Nn \__xepersian_mathsdigitspec_char_set_not_exist_error:nn
 {
    \clist_set:Nn \l_xepersian_mathsdigitspec_char_clist { #1 }
    \clist_map_inline:Nn \l_xepersian_mathsdigitspec_char_clist {
      \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF { ##1 }{ \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #2 } { ##1 } }
    }
 }

\cs_new:Nn \__xepersian_mathsdigitspec_char_prepend_not_exist_error:nn
 {
    \clist_put_left:Nn \l_xepersian_mathsdigitspec_char_clist { #1 }
    \clist_map_inline:Nn \l_xepersian_mathsdigitspec_char_clist {
      \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF { ##1 }{ \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #2 } { ##1 } }
    }
 }

\cs_new:Nn \__xepersian_mathsdigitspec_char_append_not_exist_error:nn
 {
    \clist_put_right:Nn \l_xepersian_mathsdigitspec_char_clist { #1 }
    \clist_map_inline:Nn \l_xepersian_mathsdigitspec_char_clist {
      \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF { ##1 }{ \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #2 } { ##1 } }
    }
 }

**************************************************

و راه‌حل مطرح شده در تاریخ ‎2018/12/18‎ در سایت SE:
Tisha Shusho:
After reading the documents "The expl3 package and LaTeX3 programming" and the "LaTeX3 Interfaces" again (but thoroughly this time) I think I have found a solution to my question. I replaced the following piece of code in
xepersian-mathsdigitspec.sty

کد: انتخاب همهٔ
\prg_new_conditional:Nnn \__xepersian_mathsdigitspec_primitive_font_char_if_exist:n {p,TF,T,F}
  {
    \etex_iffontchar:D \l_fontspec_font `#1 \scan_stop:
      \prg_return_true:
    \else:
      \prg_return_false:
    \fi:
  }

\cs_new:Nn \__xepersian_mathsdigitspec_char_not_exist_error:n
 {
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۰ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F0 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۱ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F1 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۲ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F2 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۳ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F3 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۴ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F4 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۵ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F5 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۶ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F6 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۷ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F7 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۸ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F8 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ۹ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 06F9 } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ٫ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 066B } }
    \__xepersian_mathsdigitspec_primitive_font_char_if_exist:nF ٪ { \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #1 } { 066A } }
 }

with

کد: انتخاب همهٔ
\seq_new:N \l_my_xepersian_digits_seq
\seq_set_split:Nnn \l_my_xepersian_digits_seq { , } { 06F0 , 06F1 , 06F2 , 06F3 , 06F4 , 06F5 , 06F6 , 06F7 , 06F8 , 06F9 , 066A , 066B }

and replaced all instances of the function \__xepersian_mathsdigitspec_char_not_exist_error with:

کد: انتخاب همهٔ
\seq_map_inline:Nn \l_my_xepersian_digits_seq
  {
    \etex_iffontchar:D \l_fontspec_font "##1 \scan_stop:
    \else:
      \__xepersian_mathsdigitspec_error:nxx {char-not-exist} { #2 } { ##1 }
    \fi:
  }

Of course one can use \seq_map_function to define a new function and replace all occurrences of the function \__xepersian_mathsdigitspec_char_not_exist_error with that.
– Tisha Shusho


مزیت‌ها، کاستی‌ها و بالاخره تفاوت‌های دو روش به‌اندازهٔ کافی آشکار هست که برای قضاوت نیازی نیست کسی برنامه‌نویس یا ماکرونویس حرفه‌ای در TeX باشد.

با احترام
mingranina
 
پست‌ها : 75
تاریخ عضویت: 17 سپتامبر 2016, 07:53

تکنیک گونه‌های توابع در LaTeX3 و کاربرد آن در اصلاح xepersia

پستتوسط mingranina » 29 دسامبر 2018, 22:56

با سلام

در مورد قواعد برنامه‌نویسی LaTeX3 در این پیام مطالبی به‌عرض رسید. در پیامی جدید در سایت SE هفت تابع تکراری دیگر در فایل xepersian.sty با یک تابع جایگزین شده که در آن از تکنیک گونه‌های توابع در LaTeX3 استفاده گردیده و در بخش پاسخ و نظر مربوط به آن، نقدها و پیشنهادهای اصلاحی بسیار جالبی مطرح شده است. با توجه به آنکه یکی از شرکت کنندگان در این بحث از بزرگان تیم LaTeX3 هستند ممکن است نکات و مطالب مطرح شده برای علاقمندان LaTeX3 بسیار مفید باشد.

همچنین در بخش ‎My Working Example‎ در پیام مورد اشاره، فایل xepersian.sty اصلاح گردیده و تحت عنوان hmxepersian.sty از آن استفاده شده است. در توضیح پیشوند «hm» نیز آمده است که اشاره به رفع فیلترینگ فونت‌هایی دارد که در نام آنها از عبارت «HM» استفاده شده باشد. در حقیقت در این فایل روش جدیدی برای رفع فیلترینگ فونت‌های مذکور ارائه شده است.

با احترام
mingranina
 
پست‌ها : 75
تاریخ عضویت: 17 سپتامبر 2016, 07:53

واگذاری نگهداری از بسته‌های bidi و xepersian

پستتوسط mingranina » 20 ژانویه 2019, 00:46

با سلام

حدود 2 ماه پیش نگهداری از بسته‌های bidi و xepersian به عهدهٔ تیم LaTeX3 Project واگذار گردید و مخزن‌های بای‌دای و زیپرشین در اختیار آنها قرار گرفت. این تیم، با عنوان ‎bidi-tex GitHub Organisation‎، متشکل از بزرگانی صاحب نام در زمینهٔ TeX و LaTeX است که هریک در پروندهٔ قطور خود بسته‌ها و کدهای بسیار پیچیده و متعددی در TeX و LaTeX دارند.

امروز یکی از اعضای اصلی این گروه، جناب ‎David Carlisle‎، اولین اصلاحات خود را در مخزن bidi قرار داد و به این ترتیب فعالیت گروه bidi-tex رسماً آغاز گردیده است. بنابراین می‌توان امیدوار بود که از این پس شاهد یک انسجام و همگونی خاصی در این دو نرم‌افزار باشیم. همچنین از این پس دیگر شاهد مسائل و مشکلات حاشیه‌ای مربوط به این بسته‌ها نخواهیم بود که نمونه‌های متعدد این مسائل و مشکلات را می‌توانید با یک نگاه اجمالی در سایت مربوطه بیابید. آخرین نمونهٔ آن هم همین فیلترینگ فونت‌های سری HM بود که در این پیام و این پیام در مورد چگونگی رفع این مشکل توضیح داده شد و به‌عرض رسید که در این فیلترینگ شرایط فیلترینگ یکتا نیست و به علت ضعف طرح مربوطه، به سادگی آشکار و رفع شد.

با احترام
mingranina
 
پست‌ها : 75
تاریخ عضویت: 17 سپتامبر 2016, 07:53

انتشار نسخهٔ جدید، 35.5، بستهٔ bidi توسط ‎bidi-tex GitHub Or

پستتوسط mingranina » 22 ژانویه 2019, 05:09

با سلام

نسخهٔ جدید، 35.5، بستهٔ bidi توسط ‎bidi-tex GitHub Organisation‎ منتشر و در تاریخ 2019/01/19 در سایت ‎CTAN‎ آپلود شده و در تاریخ 2019/01/10 تحت عنوان ‎Revision 49781‎ در مخزن ‎TeXLive‎ قرار گرفته است.

کدهایی که اضافه و یا حذف گردیده (با استفاده از دستور ‎diff -aU 0‎) در فایل پیوست ‎(diff-bidi-35.4-35.5.diff)‎ ذخیره گردیده و در صورت تمایل می‌توانید آن را دانلود و در یک ویرایشگر معمولی مشاهده کنید.

فایل‌های حذف شده: ‎ ‎
فایل‌های اضافه شده: ‎ ‎

راهنما و منابع بسته‌های ‎LaTeX2e (source2e), longtable‎ ممکن است در درک بهتر کدهای موجود در فایل diff-bidi-35.4-35.5.diff مؤثر باشد.

همانگونه که در پیام قبلی به عرض رسید نگهداری از بسته‌های bidi و xepersian به عهدهٔ ‎bidi-tex GitHub Organisation‎ واگذار شده است و با توجه به سوابق اعضای تیم LaTeX3 از این پس اطلاع‌رسانی در مورد این دو نرم‌افزار در مخازن GitHub مربوط به بسته‌های bidi و xepersian به صورتی سیستماتیک، منسجم و دقیق انجام خواهد شد، بنابراین از این به‌بعد اطلاع‌رسانی در مورد بروزرسانی این دو نرم‌افزار در اینجا متوقف خواهد شد و دوستان علاقمند می‌توانند مستقیماً به مخازن مربوطه مراجعه فرمایند.

با تشکر

پ.ن.- زمان‌های اعلام شده در متن پیام به وقت محلی سایت مربوطه است.
پیوست‌ها
diff-bidi-35.4-35.5.zip
(3.04 KiB) دانلود 101 بار
mingranina
 
پست‌ها : 75
تاریخ عضویت: 17 سپتامبر 2016, 07:53

رفع مشکل فیلترینگ فونت‌های سری HM در نسخهٔ جدید xepersian

پستتوسط mingranina » 02 فوریه 2020, 20:39

با سلام

در نسخهٔ جدید، 22.8، بستهٔ xepersian که توسط جناب David Carlisle از اعضای تیم LaTeX3 Project منتشر شده مشکل فیلترینگ فونت‌های سری HM رفع گردیده است.

این مشکل که در ‎این پیام‎ و ‎این پیام‎ در مورد آن بحث شد چند روز پیش در بخش نظرات پیامی با عنوان: ‎xepersian 21.9 cannot load the font “Psychedelia HM”. Is this a bug?‎ به صورت زیر مورد انتقاد شدید یکی از کاربران سایت SE قرار گرفته بود:

[نمایش]
Nima:
To reject all of the fonts that contain a particular string in their name is the most irresponsible design decision I have ever seen (for whatever reason the xepersian team decided to do that)
– nima Jan 27 at 8:02

[نمایش]
David Carlisle:
@nima I'm only the messenger.. (but yes, I wouldn't disagree) – David Carlisle Jan 27 at 8:11

[نمایش]
Nima:
@DavidCarlisle Yes of course :) You don't expect developers in charge of software with such a large user base to make these kinds of unprofessional decisions. It took me two days to find your solution because I didn't even think the problem would be something like this. – nima Jan 27 at 12:32

[نمایش]
David Carlisle:
@nima note there isn't a team: it's a one man development – David Carlisle Jan 27 at 12:50

با تشکر
mingranina
 
پست‌ها : 75
تاریخ عضویت: 17 سپتامبر 2016, 07:53

مشکل کشیده در بسته‌های xepersian و xepersian-hm

پستتوسط mingranina » 23 مارس 2020, 16:48

باسلام

مشکل ویژگی کشیده با فونت‌های ‎HM Series‎ و ‎X Series 2‏ در xepersian بارها در سایت‌های مختلف به ویژه در سایت مربوط به xepersian مطرح گردیده است. اخیراً نیز پیامی در سایت SE با عنوان:

The command \KashidaXBFixOn does not work properly in xepersian

منتشر گردید که در آن این مشکل مجدداً مطرح شده بود و متعاقب آن در همین سایت در پیامی با عنوان:

‎«بستهٔ جدید xepersian-hm منتشر شده است.»‎

اعلام شد که مشکل فوق در بستهٔ ‎xepersian-hm‎ رفع شده است.

البته برای حل این مشکل در xepersian گزینهٔ KashidaXBFix معرفی شده است که در حقیقت حل مشکل نیست بلکه به نوعی پاک کردن صورت مسئله است یعنی در xepersian در ترکیب‌هایی از حروف مثل «ها» و «هی» ویژگی کشیده غیر فعال می‌شود که اصولاً روش مناسبی نیست. ضمن آنکه در xepersian در ترکیب‌هایی مثل «بی»، «یی» و «پی» مشکل جابجایی نقاط زیرین حروف همچنان وجود دارد.

اما در بستهٔ xepersian-hm ویژگی کشیده برای تمامی ترکیب‌های ممکنهٔ حروف فعال است و علاوه بر آن مشکل جابجایی نقاط زیرین حروف در ترکیب‌هایی مثل «بی»، «یی» و «پی» رفع برطرف گردیده است.

تصاویر زیر نمونه‌هایی‌از یک متن هستند که با بستهٔ xepersian و xepersian-hm حروفچینی شده‌اند.

خروجی با استفاده از xepersian:
test-kashida-xepersian.png

خروجی با استفاده از xepersian-hm:
test-kashida-xepersian-hm.png

قابل توجه است که در همان پیام مربوط به سایت SE که در بالا ذکر شد، کاربر محترمی در پاسخ به سئوال مطروحه، پرسش‌کننده را به لینک‌های زیر ارجاع می‌دهد:

1- ‎مشکل حرف «هـ» با فونت Yas یا خاصیت Kashida در زی‌پرشین‎

2- ‎چرا بعضی از فونت‌ها برای کشیده مناسب نیستند؟‎

3- ‎اتصال نامناسب حرف ه هنگام استفاده از آپشن Kashida

4- ‎اشکال نقطه‌گذاری «یی»، «پی» و «بی» در فونت HM XKayhan‎

در اینجا غرض نقد پاسخ کاملاً اشتباه آن کاربر محترم نیست بلکه فقط ذکر این نکته است که در لینک‌های ارجاعی فوق، در پاسخ‌هایی که توسط مؤلف xepersian ارسال گردیده توضیح داده شده است که چرا عملکرد مناسب ویژگی کشیده در فونت‌هایی مثل X Series 2 و HM Series غیر ممکن است و اینکه مشکل از xepersian نیست بلکه از فونت‌هاست. این در حالی است که یکی از کاربران مجترم در لینک شمارهٔ 1 صریحاً متذکر می‌شود که «گلیف عوض شده!»، اما باز هم افاقه نمی‌کند.

اگر فرصتی پیش بیاید در آینده در مورد مطالب و دلائل مربوطه در پیام‌های فوق بیشتر صحبت خواهد شد، اگر چه در حال حاضر تا همین‌جا هم نتیجه روشن است و نیازی به بحث تئوری نیست.

با تشکر
mingranina
 
پست‌ها : 75
تاریخ عضویت: 17 سپتامبر 2016, 07:53

بستهٔ xepersian-hm در TeXLive-2020

پستتوسط mingranina » 19 آوریل 2020, 13:04

با سلام
نسخه جدید TeXLive-2020 در تاریخ ‎2020-04-06‎ منتشر شد. این نسخه از TeXLive شامل بستهٔ xepersian-hm است که صرف وجود این بسته در TeXLive تأیید مؤکدی بر مجوز این نرم‌افزار است. همانگونه که در پیام پیشین گفته شد این بسته دو مشکل اساسی ویژگی کشیده در بستهٔ xepesian را برطرف می‌کند. اول آنکه مشکل ترکیب‌هایی مثل «ها»، «هی» و غیره که با استفاده از کاراکتر U+200E و دیگری مشکل ترکیب‌هایی مثل «بی»، «پی» و «یی» و غیره که با اصلاح glue (چسب) برطرف می‌شود.

البته انتشار بستهٔ xepersian-hm در کمال تعجب با واکنش شدید و منفی مؤلف xepersian روبرو شد. علت این واکنش منفی احتمالاً این است که مؤلف xeprsian که توان رفع این مشکلات را نداشته‌اند در طول چندین سال گذشته هر از چندگاهی با استدلال‌هایی که استحکام چندانی هم نداشت مشکل را به فونت‌های سری XS 2 و HM نسبت مي‌دادند. این در حالی بود که کاربران این فونت‌ها مدت‌ها تا همین چندی پیش از این بسته در عمل استفاده می‌کردند تا اینکه اخیراً بعد از برگردان از LaTeX2e بهLaTeX3 منتشر شد.

به هر حال انتشار این بسته اگرچه گامی است بسیار کوچک اما می‌تواند مؤثر باشد مشروط بر آنکه سایرین نیز اگر اشکالی در بسته‌های xepersian و یا bidi مشاهده می‌کنند که مؤلف مربوطه توان رفع آن مشکل را ندارد و راهی هم برای اقناع ایشان وجود ندارد خود رأساً نسبت به رفع آن مشکل اقدام نموده و آن را در قالب یک بستهٔ جدید با نام xepersian-xx یا bidi-xx و یا هر شکل دیگری منتشر کنند تا هم کمکی به کاربران باشد و هم در آینده توسعهٔ این دو بسته از حالت فعلی خارج و به صورت گروهی انجام شود.

انتشار این بسته یک پیامد مهم دیگری هم داشت. دوستانی که این تاپیک را دنبال می‌کنند به خاطر دارند که چندی پیش فونت‌های سری HM در بستهٔ xepersian فیلتر شد تا کاربران نتوانند از آن استفاده کنند و قبل از آن هم با تغییر مجوز xepersian استفاده از این فونت‌ها در آن بسته غیر قانونی اعلام گردیده و به همین دلیل هم از TeXlive خارج شد. البته هیچکدام از این محدویت‌ها علیرغم ابرام و اصرار مؤلف xepersian مؤثر نیفتاد و هم مجوز استفاده از فونت‌ها مجددا به حالت اول برگشت و xepersian وارد TeXLive شد و هم فیلترینگ فونت‌ها حذف شد.

اما آنچه که اینک اتفاق افتاده است بسیار مهم‌تر است. مؤلف xepersian با برگردان بستهٔ xepersian-hm به LaTeX2e و انتشار آن در قالب یک فایل در سایت مربوطه نه تنها دسترسی سهل و آسان کاربران فونت‌های سری HM به امکانات این بسته را فراهم کرده‌اند بلکه به نوعی مروج و مبلغ استفاده از آن نیز بوده‌اند و به این ترتیب ناخواسته و ناخودآگاه کمک بسیار شایسته و بایسته‌ای به کلیهٔ کاربران فونت‌های سری HM نموده‌اند. این ماجرا با پرسش زیر در سایت مربوطه شروع شد:
«نحوه کارکرد بسته xepersian-hm چگونه است؟»
و مؤلف xepersian با تأکید بر اینکه
[نمایش]
وفا خلیقی:
این بسته همون کد بسته زی‌پرشین برای کشیده رو برداشته و دقیقا همون کد تک رو به زبان برنامه‌نویسی لاتک ۳ ترجمه کرده. تنها کار اضافه‌ای که این بسته انجام می‌ده این هست که ... برای قام‌های مختلف چسب‌های مختلف تعریف کرده و این اجازه رو به کاربر می‌ده که مقدار چسب رو خودش مشخص کنه (در صورت استفاده از قلم‌های دیگر یا در صورت نیاز). این تنها تفاوتش با کد اصلی در بسته زی‌پرشین هست.

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

به لحاظ تئوری بحث در مورد مطالب فوق در حال حاضر بیهوده و اتلاف وقت است زیرا عبارت‌هایی مثل «کار خاص»، «روش درست کردن اصولی»، «کیفیت پایین»، «وصله‌کاری» و ... همگی عبارت‌هایی چندوجهی هستند و ایشان هم نه مصداق آن‌ها را مشخص می‌کنند و نه تعریف مورد قبول خود از این عبارت‌ها را ارائه می‌کنند.

اما به لحاظ عملی اگر به عنوان یک شرط کافی بپذیریم که: اینکه بسته‌ای کار خاصی انجام می‌دهد یا نه، کیفیت پایین یا بالای آن، اصولی بودن یا نبودن آن، و اینکه وصله کاری هست یا نیست، رابطهٔ کاربری ضعیف یا قوی آن توسط کاربران آن بسته تعیین می‌شود، آنگاه سئوال این است که در ارتباط با مشکلاتی که در بالا ذکر شد راه حل کدام‌یک از بسته‌های xepersian و xepersian-hm بهتر و کاربردی‌تر است و کدام‌یک برای تمام ترکیب‌های ممکن حروف فارسی یکسان عمل کرده و متون فارسی زا زیباتر حروفچینی می‌کند. راه حلی که مؤلف xepersian برای حل مشکل ترکیب‌هایی مثل «ها»، «هی» و غیره، که در متون فارسی به‌فور وجود دارند، خیلی ساده است، ويژگی کشیده را غیر فعال می‌کنند. اما در بستهٔ xepersian-hm این مشکل با استفاده از کاراکتر U+200E برطرف شده و ویژگی کشیده همچنان فعال است. همچنین در مورد مشکل ترکیب‌هایی مثل «بی»، «پی» و «یی» و غیره، که باز هم در متون فارسی به‌فور وجود دارند، مؤلف xepersian تا حال حاضر (xepersian-22.8) اصلاً هیچ راه حلی ارائه نمی‌کنند و آنچه که این طرف و آن طرف پیشنهاد می‌شود همان پاک کردن صورت مسئله یا غیر فعال کردن ویژگی کشیده است اما در بستهٔ xepersian-hm این مشکل با اصلاح glue (چسب) برطرف می‌شود.

و بالاخره به بهانهٔ اینکه:
«من لیست تغییرات این بسته جدید رو در ویرایش پاسخم قرار دادم.»
کد زیر را به عنوان تفاوت‌فایل‌های kashida-xepersian-hm.def و kashida-xepersian.def در اختیار کاربر قرار می‌دهند:
کد: انتخاب همهٔ
\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

که البته این تفاوت دو فایل نیست و برگردان کامل از LaTeX3 به LaTeX2e است، و تأکید می‌کنند که:
[نمایش]
وفا خلیقی:
بنابراین اگر این فایل جدید kashida-xepersian.def رو در کنار فایل تک ورودیت قرار بدی باید دقیقا نتیجه یکسانی که با این بسته می‌گیری با بسته زی‌پرشین بگیری جایی که فایل کمینه فایل زیر هست.

کد: انتخاب همهٔ
\documentclass{article}
\usepackage[Kashida,KashidaXBFix=on]{xepersian}
\settextfont[Scale=4.5]{XB Kayhan}
\begin{document}
راهی جایی تابی چاپی چاههی تلاشهایی شتابهایی تابی چاپی راهی تلاشهــایی که کتابهایی که کلاههایی که
\end{document}

اما با انتشار برگردان فایل kashida-xepersian-hm.def به وضوح ملاحظه می‌شود که مشکل از فونت‌های سری XS 2 و سری HM نیست و به بستهٔ xepersian و ناتوانی ایشان در رفع مشکل، مربوط بوده است. عبارت زیر اذعانی صریح به ناتوانی ایشان در ارائه راه حل است:
[نمایش]
وفا خلیقی:
برای اینکه کشیده کیفیت بالایی داشته باشه باید موتور حروف‌چین ابزار لازم رو داشته باشه در مورد بسته زی‌پرشین موتور زی‌تک این ابزار رو در اختیار قرار نمی‌ده و چیزی که در زی‌پرشین وجود داره تنها یک هک هست تا اینکه راه‌حل واقعی باشه. به عنوان نمونه موتور حروف‌چین تک پارسی رو ببین اونجا کشیدگی کیفیت بالایی داره چون این کار داره توی موتور حروف‌چین انجام میشه. در سطح ماکرو متاسفانه نمیشه همیشه معجزه کرد چون تنها می‌تونی با امکانات بدوی که موتور تک در اختیارت قرار می‌ده کار کنی و اگر این کار در موتور تک امکان‌پذیر نباشه نمی‌تونی در سطح ماکرو درستش کنی.

بهبودی که من می‌تونم در بسته زی‌پرشین بهش فکر کنم این هست که یک الگوریتم طراحی کنم که مقدار چسب رو بصورت خودکار محاسبه کنه برای هر قلمی که مورد استفاده قرار می‌گیره اما این هم باز همانند گزینه computeautoilg ممکنه سرعت پردازش رو پایین بیاره شاید حتی خیلی پایینتر.

قبلاً ادعا می‌شد که مشکل از فونت‌هاست، حالا ادعا می‌شود که مشکل از موتور حروف‌چین است. اما با نگاهی گذرا به کدهای بسته‌های xepersian و bidi (از آن زمان که نگهداری از آن به ایشان واگذار شده است) مشاهده می‌شود که بخش‌های اصلی این بسته‌ها از نرم‌افزارهای دیگر مربوط به زبان عربی، عبری، و غیره کپی و گردآوری شده است و تنها همین استفاده از نویسهٔ کشیده در XeTeX است که تا کنون دیگران برای استفاده از آن در زبان‌هایی مثل فارسی راه حلی ارائه نکرده‌اند و همین یک مورد هم تا کنون در xepersian لاینحل مانده است و هر از چندگاهی بسته به شرایط برای آن فقط بهانه‌تراشی می‌شود. حتی در کد فعلی در xepersian برای ویژگی کشیده از ‎\hrule‎ استفاده می‌شود. در این کد هم هیچگونه ایده‌ای که متعلق به مؤلف xepersian باشد وجود ندارد، بلکه ایشان در فوریهٔ سال 2009 در ایمیلی در سایت tug.org با عنوان:
Issue with Arabic Typography-012239
برای اعمال کشیده در نوشتارهای پارسی درخواست کمک می‌کنند. و مؤلف موتور XeTeX (جناب Jonathan Kew) در پاسخ ضمن توضیحاتی راه حلی پیشنهاد می‌دهند اما در انتهای پیام می‌نویسند:
[نمایش]
Jonathan Kew:
As a simple example, I'm attaching a file that can be loaded in a
Persian xetex job to provide some simple "stretching".... obviously
you can make adjustments to the characters involved and the glue
metrics used, to alter its behavior. This is really just a starting
point, but might be useful for some purposes.

کد اضافه شده توسط جناب Jonathan Kew به‌صورت زیر است:
کد: انتخاب همهٔ
%% Configure xetex to do kashida justification in Persian text

\chardef\zwj="200D % zero-width joiner
\chardef\ksh="0640 % kashida

\chardef\D=10 % dual-joiner class
\chardef\L=11 % lam
\chardef\R=12 % right-joiner
\chardef\A=13 % alef
\chardef\V=256 % vowel or other combining mark (to be ignored)

\def\kashida{\zwj\nobreak \setbox0=\hbox{\ksh}%
    \leaders\hrule height\ht0 \hskip0pt plus 0.5em \zwj}

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

\XeTeXinterchartoks \D \D = {\kashida}
\XeTeXinterchartoks \L \D = {\kashida}
\XeTeXinterchartoks \D \L = {\kashida}
\XeTeXinterchartoks \L \L = {\kashida}
\XeTeXinterchartoks \D \R = {\kashida}
\XeTeXinterchartoks \D \A = {\kashida}
\XeTeXinterchartoks \L \R = {\kashida}
\XeTeXinterchartoks \L \A = {}

\XeTeXinterchartokenstate=1

\endinput


مشاهده می‌شود که به جز تغییر نام متغییرها تفاوت عمده‌ای در این کدها دیده نمی‌شود. ایشان در حالی اصلاحات انجام شده در بستهٔ جدید xepersian-hm را «فقط یک وصله‌کاری» می‌نامند که در طول این همه سال از اعمال کوچکترین تغییری در کد جناب Jonathan Kew عاجز بوده‌اند، در صورتی که برای اثبات توانایی خود ادعا می‌کنند که کتاب The TeXbook, Donald E. Knuth, 1986 ‎(PDF)‎ را در 12 سالگی مطالعه کرده‌اند. درست دیده‌اید در 12 سالگی آن هم کتابی که آنچنان اشک از چشمان خوانندگان خود بیرون می‌آورد که اغلب افراد اهل فن مطالعه کتاب‌های ساده‌تر را قبل از آن توصیه می‌کنند. ایشان در سایت مربوطه پرسشی با عنوان:
«پرسش‌هایی در ارتباط با تک از من و پاسخ اونها»
طرح می‌کنند و خود به آن پاسخ می‌دهند و در بخشی از آن می‌گویند:
[نمایش]
وفا خلیقی:
پرسش: در این پرسش اشاره کردی که بعضی افراد کتاب تک کنوث رو یک شبه خوندند و بعضی افراد بعضی بخش‌ها رو چندین بار خوندند، خودت جزو کدوم دسته بودی؟
پاسخ: با اینکه من دوست دارم بگم من این کتاب رو یک شبه خوندم اما این موضوع حقیقت نداره. من برای خوندن و فهمیدن این کتاب struggle داشتم و برام سخت بود. یک دور خوندن کتاب یک ماه کامل طول کشید و بعد از این یک بار باز هم همه جای کتاب رو درست متوجه نشدم. چندین بار این کتاب رو خوندم و چندین سال گذشت تا بتونم همه مطالب کتاب رو بصورت شفاف متوجه بشم. بنابراین اگر خوندن این کتا براتون سخته همیچوقت ناامید نشید و دست از خوندنش برندارید. فهم کامل کتاب نیاز به پافشاری و فکر کردن و همچنین کار کردن با تک داره. پیشنهاد می‌کنم برای مدتی که دارید این کتاب رو می‌خونید فقط از فرمت Plain TeX و موتور تک اصلی کنوث استفاده کنید. همچنین توجه داشته باشید که من برای نسختین بار این کتاب رو در ۱۲ سالگی خوندم و دسترسی به کامپیوتر نداشتم بنابراین این شاید مقداری توضیح بده چرا خوندن این کتاب برای یک نوجوان ۱۲ ساله سخت بوده.

البته قبلاً هم افرادی در این سن و سال ادعاهایی مشابه (مشابه به این معنی که هر چه بیشتر حیرت‌آور باشد بهتر است.) داشته‌اند اما طرح آن در یک جمعی که اغلب دانشگاهی هستند آن هم تا این حد محیرالعقول موجب شد تا بالاخره پرسش زیر در قالب یک نظر در سایت مربوطه مطرح شود:
[نمایش]
پرسشی در قالب نظر در سایت مربوطه:
چه چیزی سبب شد که شما در ۱۲ سالگی به این کتاب علاقه‌مند شوید؟ و یا به بیان دیگر دسترسی به این کتاب این قدر برای شما ساده بود؟ من تا آنجایی که خاطرم هست آن زمان که دانشجو بودم در کتابخانه دانشگاه شریف یک نسخه کپی از کتاب لامپورت پیدا کردم و از کتاب تک کنوث خبری نبود! (البته الان را نمیدانم وضع چگونه است بالاخره ۱۵ سال گذشته و همه دنیا تغییر کرده ...)

و مؤلف xepersian در پاسخ می‌گویند:
[نمایش]
وفا خلیقی:
یک معلم ریاضی در مدرسه داشتم که یک چینی سنگاپوری به نام Ray Tan بود. برای امتحان ریاضی ایشون سوال‌ها رو با تک حروف‌چینی می‌کرد. برای من زیبایی حروف‌چینی ریاضی جالب بود و وقتی ازش سوال کردم این سوال‌ها رو چجوری حروف‌چینی کردی گفت با تک و کتاب تک کنوث رو معرفی کرد و تونستم نخسه‌ای که اون داشت رو دو هفته‌ای به امانت بگیرم اما بعد از دو هفته کتابش باید پس می‌دادم و وقتی ازش پرسیدم که آیا می‌تونم کتاب رو مدت بیشتری پیش خودم نگه دارم پاسخش منفی بود. بنابراین از پدرم خواستم کتاب رو برام سفارش بده و حدود یک ماهی طول کشید تا از آمریکا به استرالیا برسه.

اما ایشان در نوامبر 2014 در این پیام می‌نویسند:
[نمایش]
Vafa Khalighi:
At the age of 24, I together with my family (my parents and sister) travelled to ... Australia. ... I am now 35 years of age.

یعنی ایشان در 12 سالگی (با چند ماهی اختلاف در سال 1991 میلادی یا 1370 شمسی) در ایران بوده‌اند و در مدارس ایران تحصیل می‌کرده‌اند.

و در دسامبر 2016 در اینجا می‌گویند:
[نمایش]
وفا خلیقی:
البته حدود بیشتر از ۱۰ سال هست که با تک آشنا هستم

یعنی حدوداً در سن 27 سالگی با TeX آشنا شده‌اند که با همان داستانی که در لینک فوق تعریف کرده‌اند نیز تقریباً سازگار است.

دوستانی که این تاپیک را دنبال می‌کنند باید آن کلیپ youtube را به‌خاطر داشته باشند که ایشان در آن ادعا می‌کنند که دو سالی است با جناب
Victor Eijkhout روی یک موتور جدید برای TeX کار می‌کنند و بعد هم معلوم شد که .... اما حالا در اینجا ادعا می‌کنند:
[نمایش]
وفا خلیقی:
«حدود دو سالی هست که بصورت آزمایشی دارم روی یک موتور حروف‌چین تک برای حروف‌چینی زبان پارسی کار می‌کنم»


با تشکر
mingranina
 
پست‌ها : 75
تاریخ عضویت: 17 سپتامبر 2016, 07:53

نسخهٔ جدید 0.5a بستهٔ xepersian-hm منتشر شد.

پستتوسط mingranina » 21 آوریل 2020, 16:06

با سلام
نسخه جدید 0.5a در تاریخ ‎2020-04-20‎ منتشر شد.

در این نسخه برای ویژگی کشیده دو گزینه وجود دارد:

1- استفاده از خط افقی (Kashida=hrule) که در کد پیشنهادی جناب Jonathan Kew در سال 2009 از آن استفاده شده و در xepersian هم همان کد بدون هیچ تغییری کپی شده است. در این حالت دو مشکل بنیادی وجود دارد:
a- استفاده از ویژگی کشیده در مورد فونت‌های توخالی و سایه‌دار امکانپذیر نیست.
b- خروجی تا حدودی مغشوش دیده می‌شود.

2- استفاده از نویسه کشیده، ‏U+0640‏، ‎(Kashida=glyph)‎ که هر دو مشکل فوق‌الذکر را بر طرف می‌کند.

لطفاً به تذکری که در بستهٔ xepersian-hm در مورد این گزینه آمده است حتماً توجه کنید که:

این گزینه در حال حاضر آزمایشی است و اگر از آن استفاده می‌کنید باید منتظر نتایج پیش‌بینی نشده باشید.

تصویرهای زیر خروجی xepersian و xepersian-hm را در حالت KashidaOff برای سبک معمولی و در حالت KashidaOn برای سبک‌هان معمولی، خوابیده به‌راست، خوابیده به‌چپ، توخالی و سایه‌دار برای فونت ‎Hm XKayhan‎ نشان داده شده است.

چون حجم فایل‌های ضمیمه شده از حد مجاز بیشتر می‌شود بنابراین ادامه تصاویر را در پیام‌ها بعدی مشاهده فرمایید.

با تشکر

برای بستهٔ xepersian از کد زیر:
کد: انتخاب همهٔ
\documentclass{report}
\usepackage[Kashida,KashidaXBFix=on]{xepersian}
\settextfont[Scale=4.5]{HM XKayhan}
\setlatintextfont[Scale=1.5,Colour=0000FF]{HM XKayhan}
\defpersianfont\HMXKayhanIt[Scale=4.5]{HM XKayhan Italic}
\defpersianfont\HMXKayhanOb[Scale=4.5]{HM XKayhanOb Oblique}
\defpersianfont\HMXKayhanOl[Scale=4.5]{HM XKayhan Outline}
\defpersianfont\HMXKayhanSd[Scale=4.5]{HM XKayhan Shadow}

\def\SampleText{
 راهی جایی تابی چاپی چاههی تلاشهایی
 شتابهایی تابی چاپی راهی تلاشهــایی
 که کتابهایی که کلاههایی که کتابهایی }

\setlength\parindent{0pt}
\pagestyle{empty}

\begin{document}

\KashidaOff\lr{(With xepersian: Kashida Off, HM XKayhan Regular)}

\SampleText

\newpage

\KashidaOn\lr{(With xepersian: Kashida On, HM XKayhan Regular)}

\SampleText

\newpage

\KashidaOn\lr{(With xepersian: Kashida On, HM XKayhan Italic)}

{\HMXKayhanIt \SampleText}

\newpage

\KashidaOn\lr{(With xepersian: Kashida On, HM XKayhan Oblique)}

{\HMXKayhanOb \SampleText}

\newpage

\KashidaOn\lr{(With xepersian: Kashida On, HM XKayhan Outline)}

{\HMXKayhanOl \SampleText}

\newpage

\KashidaOn\lr{(With xepersian: Kashida On, HM XKayhan Shadow)}

{\HMXKayhanSd \SampleText}

\end{document}


و برای بستهٔ xepersian-hm از کد زیر استفاده شده است:
کد: انتخاب همهٔ
\PassOptionsToPackage{fontsloadable}{xepersian}  % Load xepersian with any number of options
\PassOptionsToPackage{pdfinfo=off}{bidi}  % Load bidi with any number of options
\documentclass{report}
\usepackage[Kashida=glyph,linebreakpenalty=8,kashidastretch=0.14 em plus 5.5 em]{xepersian-hm}
\settextfont[Scale=4.5]{HM XKayhan}
\setlatintextfont[Scale=1.5,Colour=0000FF]{HM XKayhan}
\defpersianfont\HMXKayhanIt[Scale=4.5]{HM XKayhan Italic}
\defpersianfont\HMXKayhanOb[Scale=4.5]{HM XKayhanOb Oblique}
\defpersianfont\HMXKayhanOl[Scale=4.5]{HM XKayhan Outline}
\defpersianfont\HMXKayhanSd[Scale=4.5]{HM XKayhan Shadow}

\def\SampleText{\discouragebadlinebreaks{
 راهی جایی تابی چاپی چاههی تلاشهایی
 شتابهایی تابی چاپی راهی تلاشهــایی
 که کتابهایی که کلاههایی که کتابهایی }}

\setlength\parindent{0pt}
\pagestyle{empty}

\begin{document}

\KashidaOff\lr{(With xepersian-hm: Kashida Off, HM XKayhan Regular)}

\SampleText

\newpage

\KashidaOn\lr{(With xepersian-hm: Kashida On, HM XKayhan Regular)}

\SampleText

\newpage

\KashidaOn\lr{(With xepersian-hm: Kashida On, HM XKayhan Italic)}

{\HMXKayhanIt \SampleText}

\newpage

\KashidaOn\lr{(With xepersian-hm: Kashida On, HM XKayhan Oblique)}

{\HMXKayhanOb \SampleText}

\newpage

\KashidaOn\lr{(With xepersian-hm: Kashida On, HM XKayhan Outline)}

{\HMXKayhanOl \SampleText}

\newpage

\KashidaOn\lr{(With xepersian-hm: Kashida On, HM XKayhan Shadow)}

{\HMXKayhanSd \SampleText}

\end{document}


example-xepersian-1.png

example-xepersian-2.png

example-xepersian-3.png

example-xepersian-4.png

example-xepersian-5.png

example-xepersian-6.png

example-xepersian-hm-1.png

example-xepersian-hm-2.png

example-xepersian-hm-3.png

example-xepersian-hm-4.png

example-xepersian-hm-5.png

example-xepersian-hm-6.png
mingranina
 
پست‌ها : 75
تاریخ عضویت: 17 سپتامبر 2016, 07:53

انتشار نسخهٔ جدید، 0.5b، بستهٔ xepersian-hm

پستتوسط mingranina » 27 آوریل 2020, 14:03

با سلام

نسخهٔ جدید، 0.5b، بستهٔ xepersian-hm منتشر و در تاریخ ‎2020-04-26‎ در سایت ‎CTAN‎ آپلود شده و در تاریخ ‎2020-04-26‎ تحت عنوان ‎Revision 54900‎ در مخزن ‎TeXLive‎ قرار گرفته است.

فایل‌های حذف شده: ‎ ‎
فایل‌های اضافه شده: ‎ ‎

تغییرات:

- در صورتی که برای کشیدن متن به‌جای گزینهٔ hrule (خط افقی) از گزینهٔ glyph (نویسهٔ کشیده ‎(U+0640)‎) استفاده شود آنگاه فونت اصلی بررسی می‌شود تا اطمینان حاصل شود که این نویسه در فونت وجود داشته باشد. در غیر این‌صورت یک پیام خطا ارسال و پردازش قطع می‌شود.

- دو گزینهٔ جدید به ماکرو ‎\discouragebadlinebreaks‎ اضافه شده است. با استفاده از این دو گزینه می‌توان چسب (glue) و جریمه (penalty) را به‌صورت محلی تغییر داد.

- برخی تغییرات جزئی دیگر.

با تشکر

پ.ن.1- زمان‌های اعلام شده در متن پیام به وقت محلی سایت مربوطه است.
mingranina
 
پست‌ها : 75
تاریخ عضویت: 17 سپتامبر 2016, 07:53

قبلیبعدی


بازگشت به خط، زبان و قلم‌سازی


کاربران حاضر در این انجمن: بدون کاربران آنلاین و 0 مهمان