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

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

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

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

پستتوسط mingranina » 17 اکتبر 2018, 08:35

با سلام


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

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

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

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

با تشکر

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

پ.ن.2- زمان‌های اعلام شده در متن پیام به وقت محلی سایت مربوطه است.
پیوست‌ها
diff-bidi-34.9-35.0.zip
(950 بایت) دانلود 7 بار
mingranina
 
پست‌ها : 40
تاریخ عضویت: 17 سپتامبر 2016, 07:53

منابع اصلی دستورات bidi و xepersian در مورد فاصلهٔ بین خطوط

پستتوسط mingranina » 21 اکتبر 2018, 22:46

با سلام

برای تنظیم فاصلهٔ بین خطوط در بستهٔ bidi و xepersian دستورات و گزینه‌های موجود عبارتند از:

- دستور ‎\setbaselineskip‎ که در فایل biditools.sty به صورت زیر تعریف شده است:
کد: انتخاب همهٔ
\newcommand*{\setbaselineskip}[1]{%
    \linespread{\strip@pt\dimexpr\numexpr\dimexpr#1\relax*65536/\dimexpr\baselineskip\relax\relax sp\relax}
    \selectfont
}

این دستور اولین بار در نسخهٔ 30.1 ‎(Revision 43338, 2017/02/25)‎ بستهٔ bidi تعریف شده است و در حقیقت از اینجا کپی شده است.
دستور ‎\strip@pt‎ در راهنما و منابع بستهٔ ‎LaTeX2e (source2e)‎ و دستورهای ‎\dimexpr, \numexpr‎ در راهنما و منابع بستهٔ ‎e-TeX‎ توضیح داده شده است.
این دستور دارای محدودیت‌هایی است که علاقمندان می‌توانند در آدرس فوق مطالعه نمایند.

در بستهٔ leading نیز تعریف مشابهی وچود دارد که در راهنما و منابع آن بسته توضیح داده شده است.

اما در اینجا با استفاده از بستهٔ expl3 دستور فوق به‌صورت
کد: انتخاب همهٔ
\linespread{ \fp_eval:n { 14pt/\baselineskip } }

تعریف شده است.

- دستور ‎\setfontsize‎ که نسبتاً طولانی هم هست (حدود 260 خط) در فایل xepersian.sty تعریف شده است. این دستور نیز به‌طور کامل از بستهٔ koma-script کپی گردیده و تفاوت‌های مهم آن با متن اصلی در بستهٔ koma-script این است که نام دستور ‎\changefontsize‎ به ‎\setfontsize‎ و پیشوند scr به xepersian تغییر یافته و تست مربوط به نسخهٔ koma-script حذف شده است. برای توضیحات بیشتر راهنما و منابع koma-script را ببینید.

- گزینه‌های ‎baselineskipscale, latinbaselineskipscale, fontsize‎ و computeautoilg در بستهٔ xepersian نیز با استفاده از همان دستورات ‎\setbaselineskip‎ و ‎\setfontsize‎ تعریف شده است.

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

بستهٔ bidi برای LuaTeX

پستتوسط mingranina » 29 اکتبر 2018, 16:54

با سلام

پروژهٔ تطبیق بستهٔ bidi با LuaTeX در اسفند‌ماه 1396 در سایت TeX Development Fund به‌صورت زیر تعریف شد:
"Bidi package for LuaTeX
Vafa Khalighi, Australia.
Amount: US$1000; date: 1 March 2018.
Porting the bidi package to LuaTeX. Description from the author: ..."

و در مجلهٔ TUGboat, Volume 39 (2018), No 1 در مطلبی تحت عنوان "From the president" جناب Boris Veystman تایید کردند که:
"Also, the TEX Development fund made its first award for 2018, for LuaTEX support for the bidi package, by Vafa Khalighi. Development fund applications are always welcome; see tug.org/tc/devfund."

در ارتباط با این پروژه نیز در سایت مربوطه (توسط مؤلف بستهٔ bidi) اعلام شد که:

«1000 دلار آمریکا تحت عنوان TeX Development Fund از طرف TUG براساس fund داده شده. من موظف هستم تا پایان سال 2018 بسته bidi را توسعه بدهم تا با موتور LuaTeX کار کند و همچنین باید unicode bidirectional algorithm را با استفاده از زبان برنامه‌نویسی Lua برای LuaTeX پیاده‌سازی کنم. همچنین باید در پایان انجام پروژه برای مجله TUGBOAT گزارشی در رابطه با پروژه بنویسم.»

اما این پروژه اخیراً بدون هیچ توضیحی از سایت TeX Development Fund حذف شده است.

لازم به توضیح است که از سال‌ها قبل کاربران و دست‌اندرکاران LuaTeX Unicode Bidirectional Algorithm (Unicode®Standard Annex #9 or UAX #9) را با استفاده از زبان برنامه‌نویسی Lua به‌کار بسته‌اند. به‌عنوان نمونه می‌توان از Lua implementation of the Unicode Bidirectional Algorithm - luabidi و Unicode BiDi Algorithm implementation for ConTeXt MkIV - context-bidi نام برد. حتی این امر با استفاده از دیگر زبان‌های برنامه‌نویسی از جمله C نیز انجام گردیده که نمونه‌ای از آن نیز تحت عنوان A sophisticated implementation of Unicode Bidirectional Algorithm - SheenBidi منتشر شده است.

از دیگر مشکلات بستهٔ bidi در این ارتباط آن است که بخش‌های اصلی bidi از روی بسته‌های دیگر کپی شده است که در پیام‌های قبلی به نمونه‌هایی از آن‌ها اشاره گردیده است.

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

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

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

با سلام

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

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

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

راهنما و منابع بسته‌های ‎hyperref (hyperref.sty), tcolorbox (tcolorbox.sty), LaTeX2e (source2e)،‎ ممکن است در درک بهتر کدهای موجود در فایل diff-bidi-35.0-35.1.diff مؤثر باشد.

با تشکر

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

پ.ن.2- زمان‌های اعلام شده در متن پیام به وقت محلی سایت مربوطه است.
پیوست‌ها
diff-bidi-35.0-35.1.zip
(709 بایت) دانلود 3 بار
mingranina
 
پست‌ها : 40
تاریخ عضویت: 17 سپتامبر 2016, 07:53

دستور ‎\addto@hook‎ و ‎\AppendToList‎ در XePersian

پستتوسط mingranina » 15 نوامبر 2018, 06:11

با سلام

در LaTeX و بسته‌های مربوطه استفاده از hook (کدی است که هرگاه شرایطی محقق شود اجرا می‌گردد.) بسیار متداول است و در LaTeX2e برای افزودن یک یا چند token به یک hook، دستور داخلی ‎\addto@hook‎ به‌صورت سادهٔ زیر تعریف شده است (لطفاً راهنمای ‎The LaTeX2e Sources (source2e)‎ را ببینید.):
کد: انتخاب همهٔ
\long\def\addto@hook#1#2{#1\expandafter{\the#1#2}}

دستورات مشابه دیگری مثل g@addto@macro نیز وجود دارد. در بسته‌هایی مثل etoolbox که قبلاً در همین تاپیک در مورد آن صحبت شد از hook نیز بسیار استفاده شده است.

به‌عنوان مثال در کد زیر برای حروفچینی روابط ریاضی در متن یا سبک متنی (textstyle) به‌صورت ضمنی از دستور ‎\everymath‎ استفاده می‌شود که یک hook است، به این معنی که هر بار TeX به ابتدای یک رابطهٔ ریاضی در متن می‌رسد کدی (لیستی از tokenها) را که با دستور ‎\everymath‎ تعریف شده است قبل از آن قرار می‌دهد. (لطفاً توجه فرمایید که در سبک نمایشی (displaystyle) به‌صورت ضمنی از دستور ‎\everydisplay‎ استفاده می‌شود.)
کد: انتخاب همهٔ
% add-to-hook.tex
\PassOptionsToPackage{pdfinfo=off}{bidi}
\documentclass[a4paper,12pt]{article}
\usepackage{amsmath}
\usepackage[logo=off]{xepersian}
\renewcommand{\baselinestretch}{1.5}
\settextfont[Scale=1.2]{HM XNiloofar}
\setmathdigitfont[Scale=1.2]{HM XNiloofar}
\setlatintextfont[Scale=1.2]{HM XNiloofar}
\pagestyle{empty}
\begin{document}
برای روابط ریاضی در متن و در محیط آرایه، دستور پیش‌فرض \verb|\textstyle| است.
 برای نمونه تصاعد هندسی در این سبک به‌صورت
$S_n=\sum_{k=0}^{n-1}aq^k = \frac{a(1-q^n)}{1-q}$
حروفچینی می‌شود. در سبک نمایشی، دستور پیش‌فرض \verb|\displaystyle| است و
تصاعد هندسی در این سبک به‌صورت
\begin{align*}
S_n & = \sum_{k=0}^{n-1}aq^k \\
    & = \frac{a(1-q^n)}{1-q}
\end{align*}
حروفچینی می‌شود.
\end{document}

خروجی این کد عبارت است از:
add-to-hook.png

اگر در همان کد بالا با استفاده از دستور داخلی ‎\addto@hook‎، دستور ‎\displaymath‎ (به عنوان یک token) به ‎\everymath‎ (به‌عنوان یک hook) افزوده شود:
کد: انتخاب همهٔ
% add-to-hook-latex.tex
\PassOptionsToPackage{pdfinfo=off}{bidi}
\documentclass[a4paper,12pt]{article}
\usepackage{amsmath}
\usepackage[logo=off]{xepersian}
\renewcommand{\baselinestretch}{1.5}
\settextfont[Scale=1.2]{HM XNiloofar}
\setmathdigitfont[Scale=1.2]{HM XNiloofar}
\setlatintextfont[Scale=1.2]{HM XNiloofar}
\pagestyle{empty}
\makeatletter
\addto@hook\everymath\displaystyle
\makeatother
\begin{document}
 برای روابط ریاضی در متن و در محیط آرایه، دستور پیش‌فرض \verb|\textstyle| است.
 اما اگر از دستور \verb|\addto@hook| استفاده کنیم و \verb|\displaystyle| را
 به \verb|\everymath| اضافه کنیم، تصاعد هندسی در متن به‌صورت نمایشی یعنی به شکل
$S_n=\sum_{k=0}^{n-1}aq^k = \frac{a(1-q^n)}{1-q}$
ولی در سبک نمایشی بازهم به همان‌صورت
\begin{align*}
S_n & = \sum_{k=0}^{n-1}aq^k \\
    & = \frac{a(1-q^n)}{1-q}
\end{align*}
حروفچینی می‌شود.
\end{document}

خروجی خواهد شد:
add-to-hook-latex.png

اما در این ویدیوی آموزشی برای افزودن ‎\displaymath‎ به ‎\everymath‎، استفاده از دستور ‎\AppendToList‎ (توسط مؤلف XePersian) توصیه می‌شود. این دستور به‌همراه چند دستور دیگر در اصل توسط جناب ‎Victor Eijkhout‎ در سال 1993 در نسخهٔ 0.96 بستهٔ lollipop (خط 120 تا 404 از فایل tools.tex) تعریف شده و توسط مؤلف XePersian کپی و به فایل biditools.sty اضافه شده است (خط 832 تا 1017)، البته طبق معمول توضیحات بسیار مفید و ارزندهٔ آن حذف شده و نام متغیرها و دستورات به‌گونه‌ای ناهمگون تغییر کرده است.

لازم به تدکر است که حتی جناب ‎Victor Eijkhout‎ که ابتدا در سال 1991 کتاب خود را، تحت عنوان «TeX By Topic»، با استفاده از lollipop حروفچینی کرده بودند، در سال 2001 آن را با استفاده از LaTeX2e بازنویسی و منتشر کردند.

در کد زیر برای افزودن ‎\displaymath‎ به ‎\everymath‎ از دستور ‎\AppendToList‎ استفاده شده:
کد: انتخاب همهٔ
% add-to-hook-lollipop.tex
\PassOptionsToPackage{pdfinfo=off}{bidi}
\documentclass[a4paper,12pt]{article}
\usepackage{amsmath}
\usepackage[logo=off]{xepersian}
\renewcommand{\baselinestretch}{1.5}
\settextfont[Scale=1.2]{HM XNiloofar}
\setmathdigitfont[Scale=1.2]{HM XNiloofar}
\setlatintextfont[Scale=1.2]{HM XNiloofar}
\pagestyle{empty}
\AppendToList:everymath={\displaystyle}
\begin{document}
 برای روابط ریاضی در متن و در محیط آرایه، دستور پیش‌فرض \verb|\textstyle| است.
 اما اگر از دستور \verb|\AppendToList| استفاده کنیم و \verb|\displaystyle| را
 به \verb|\everymath| اضافه کنیم، تصاعد هندسی در متن به‌صورت نمایشی یعنی به شکل
$S_n=\sum_{k=0}^{n-1}aq^k = \frac{a(1-q^n)}{1-q}$
ولی در سبک نمایشی به همان‌صورت
\begin{align*}
S_n & = \sum_{k=0}^{n-1}aq^k \\
    & = \frac{a(1-q^n)}{1-q}
\end{align*}
حروفچینی می‌شود.
\end{document}

که خروجی آن به‌صورت زیر است:
add-to-hook-lollipop.png

و همانگونه که ملاحظه می‌شود دقیقاً مشابه خروجی پیشین است و بنابراین حداقل در مورد مثالی که برای این ویدیوی آموزشی انتخاب شده و موارد مشابه نیازی به دستور ‎\AppendToList‎ و به تبع آن بارگذاری کدهای طولانی مربوطه و اتلاف منابع و امکانات سیستم نیست.

نرم‌افزارهای مورد استفاده:
bidi: v35.1, 2018/11/11
xepersian: v21.7, 2018/10/18

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

موتور جدید TeX و Lollipop

پستتوسط mingranina » 19 نوامبر 2018, 18:01

با سلام

در مورد نرم‌افزار Lollipop و کتاب TeX By Topic و مؤلف آن‌ها جناب Victor Eijkhout بیشتر در این پیام توضیح داده شد. ایشان در مصاحبه با TUG Interview Corner در تاریخ ‎2005/03/11‎ در فرازهایی از پاسخ‌های خود از عبارت‌هایی مانند:
That is partly my diminishing involvement with TeX, ...
و
I'm too far out of the TeX world these days to say anything sensible about ...
استفاده می‌کنند که نشان از کاهش شدید فعالیت‌های ایشان در زمینهٔ TeX دارد. بنابراین تعجب‌آور بود وقتی که مطلب زیر از طرف مؤلف XePersian (زیپرشین) در تاریخ ‎2018/11/09‎ در این پرسش و پاسخ زنده (از ‎00:09:18‎ تا ‎00:10:55‎) مطرح شد که:

«پرسش دیگه پرسش آقای ... بودن که در مورد پروژهٔ Lollipop پرسش داشتند. پروژهٔ Lollipop [را من و آقای] البته نویسندهٔ اصلیش آقای Victor Eijkhout هست، بعد من به پروژهٔ ایشون پیوستم. ما به‌صورت دو نفره داریم باهم روش کار می‌کنیم و [به] نتیجه‌ای که بهش رسیدیم این هستش که برای چیزهایی که ما می‌خواهیم توی پروژهٔ Lollipop انجام بدیم هیچکدوم از موتورهای حروفچینی که در واقع هستند نیازهای ما را برطرف نمی‌کنند. برای همین ما برای اینکه بتونیم پروژهٔ Lollipop را به اون هدف‌هایی که داریم برسونیم باید یک موتور حروفچین هم، یک موتورحروفچینی TeX هم، ابداع کنیم که با آقای Victor Eijkhout الان داریم در مورد این صحبت می‌کنیم که روی پروژهٔ Lollipop چجوری بیایم و یک موتور حروفچینی TeX رو تغییر بدیم. البته من استرالیا هستم، ایشون توی تگزاس توی آمریکاست و بیشتر همکاری‌هامون از طریق Email و از طریق Skype هستش. بنابراین برای اینکه پاسخ پرسش شمارو بدم پروژهٔ Lollipop به‌صورت فعال در حال توسعه هست اما این توسعه فقط بین من و ایشون هستش و به‌صورت عمومی نشده»

و البته طبیعی بود که جناب Victor Eijkhout در ارتباط با ادعای فوق اظهار بی‌اطلاعی مطلق نمایند. بنابراین ارتباط از طریق Email و Skype هم کاملاً منتفی است.

لازم به توضیح است که آخرین نسخهٔ Lollipop که توسط جناب Victor Eijkhout منتشر شد تحت عنوان نسخهٔ 0.96 و در ‎July 1993‎ انجام گرفت تا آنکه در سال 2014 نگهداری از این نرم‌افزار به مؤلف زیپرشین واگذار گردید و در April همان سال نسخهٔ 0.97 توسط نگهدارندهٔ جدید منتشر شد و تا نسخهٔ 1.07 در ‎June 2016‎ ادامه یافت.

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

قبلی


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


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