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

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

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

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

پستتوسط mingranina » 09 مارس 2018, 22:54

با سلام

زیپرژن (XePersian) که به زیپرشین معروف شده است به همراه بای‌دای (bidi) از جمله نرم‌افزارهای متداول حروفچینی در فارسی هستند. از این پس در اینجا اشکال‌ها و در صورت امکان روش‌های رفع آنها در این نرم‌افزارها بررسی می‌شوند.

با تشکر
در کل 1 بار ویرایش شده. اخرین ویرایش توسط mingranina در 09 مارس 2018, 23:37.
mingranina
 
پست‌ها : 15
تاریخ عضویت: 17 سپتامبر 2016, 07:53

فاصلهٔ ناموزون بین نظم و نثر در XePersian

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

با سلام

کد زیر نمونه‌ای از حروفچینی نظم و نثر در زیپرشین است:
کد: انتخاب همهٔ
% test-spaces-in-poem.tex
\PassOptionsToPackage{pdfinfo=off}{bidi}
\documentclass{article}
\usepackage{bidipoem}
\usepackage[logo=off]{xepersian}
\settextfont[Scale=1.2]{HM XYas}
\linespread{1.5}
\pagestyle{empty}
\begin{document}
\renewcommand\poemcolsepskip{1.0cm}
این یک آزمایش است. این یک آزمایش است. این یک آزمایش است.
\begin{traditionalpoem}
آنانکه محیط فضل و آداب شدند & در جمع کمال شمع اصحاب شدند \\
ره زین شب تاریک نبردند برون & گفتند فسانه‌ای و در خواب شدند
\end{traditionalpoem}
این یک آزمایش است. این یک آزمایش است. ... ... ... .. این یک آزمایش است.
\begin{traditionalpoem}
آنانکه محیط فضل و آداب شدند & در جمع کمال شمع اصحاب شدند \\
ره زین شب تاریک نبردند برون & گفتند فسانه‌ای و در خواب شدند
\end{traditionalpoem}
این یک آزمایش است. این یک آزمایش است. ... ... ... . این یک آزمایش است.
\begin{traditionalpoem}
آنانکه محیط فضل و آداب شدند & در جمع کمال شمع اصحاب شدند \\
ره زین شب تاریک نبردند برون & گفتند فسانه‌ای و در خواب شدند
\end{traditionalpoem}
این یک آزمایش است. این یک آزمایش است. این یک آزمایش است.
\end{document}

خروجی کد فوق با استفاده از دستور سادهٔ «xelatex test-spaces-in-poem.tex» بصورت زیر است:

test-spaces-in-poem.png

مشاهده می‌شود که فاصلهٔ شعر دوم تا متن بالای آن بیشتر است. برای رفع این اشکال کافی است خط 186 از فایل bidipoem.sty:
/Your-TeXLive-Dir/texmf-dist/tex/xelatex/bidi/bidipoem.sty

یعنی کد
\poemskip\par

را با کد زیر جایگزین کنید:
\par\poemskip


با تشکر
در کل 1 بار ویرایش شده. اخرین ویرایش توسط mingranina در 14 مارس 2018, 02:51.
mingranina
 
پست‌ها : 15
تاریخ عضویت: 17 سپتامبر 2016, 07:53

دستور مبتنی بر محیط‌ آرگومان‌دار در بستهٔ xparse

پستتوسط mingranina » 14 مارس 2018, 02:49

با سلام

کد زیر نمونه‌ای از حروفچینی در زیپرشین است:
کد: انتخاب همهٔ
% test-xparse-environemnt-argumrnts.tex
\PassOptionsToPackage{pdfinfo=off}{bidi}
\documentclass[10pt]{article}
\usepackage{xparse}
\usepackage{xcolor}%
\usepackage[framemethod=TikZ]{mdframed}
\usepackage[logo=off]{xepersian}
\settextfont{HM XYas}
\setdigitfont{HM XYas}
\pagestyle{empty}
\begin{document}
\NewDocumentEnvironment {MyBoxEnv} {O{} O{4}}
  {\mdfdefinestyle{fboxeddefault}{leftmargin=#2mm,rightmargin=#2mm}
  \begin{mdframed}[style=fboxeddefault]{\bf\textcolor{red}{#1}}}
  {\end{mdframed}}
\DeclareDocumentCommand{\MyBox}{O{} O{} m}{\begin{MyBoxEnv}[#1][#2]#3\end{MyBoxEnv}}
\begin{MyBoxEnv}[][9]
  این آزمایش ۱ است.
\end{MyBoxEnv}
\begin{MyBoxEnv}[عنوان:]
  این آزمایش ۲ است.
\end{MyBoxEnv}
\begin{MyBoxEnv}
  این آزمایش ۳ است.
\end{MyBoxEnv}
\MyBox[عنوان: ][13]{این آزمایش ۴ است.}
\MyBox{این آزمایش ۵ است.}
\end{document}

اگر کد فوق را اجرا کنید با خطای زیر مواجه می‌شوید:
! Missing number, treated as zero.
<to be read again>
m
l.31 \MyBox{این آزمایش ۵ است.}

علت این است که با بیان دستور ‎\MyBox‎ به صورت فوق فقط یکای طول (در اینجا mm) به متغیرهای leftmargin و rightmargin منسوب می‌شود. برای رفع این اشکال باید دستور ‎\MyBox‎، به عنوان مثال، به صورت زیر بیان شود:

\DeclareDocumentCommand{\MyBox}{O{} O{4} m}{\begin{MyBoxEnv}[#1][#2]#3\end{MyBoxEnv}}

با بیان فوق، مقدار پیش‌فرض و یکای طول آن، در اینجا ‎4mm‎، به متغیرهای leftmargin و rightmargin منسوب می‌شود و خروجی کد فوق خواهد شد:

test-xparse-environemnt-argumrnts.png

در دستور
‎\MyBox[عنوان: ][13]{این آزمایش ۴ است.}‎

لطفاً به فاصلهٔ اضافی بعد از «عنوان: » توجه داشته باشید.

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

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

پستتوسط Ahmad » 16 مارس 2018, 00:23

با تشکر از معرفی این برنامه ولی من دقیقا متوجه نمی‌شوم که چرا برای انجام یک چنین کاری که در برنامه‌های دیگر با چند کلیک انجام می‌شود آدم خودش را شکنجه بدهد از طریق نوشتن یک صفحه کدهای مختلف
نماد کاربر
Ahmad
Site Admin
 
پست‌ها : 1221
تاریخ عضویت: 30 مه 2004, 17:33
محل سکونت: سوئد

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

پستتوسط mingranina » 17 مارس 2018, 00:16

با سلام

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

حروفچینی فارسی در کانتکست (ConTeXt)

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

دستور ‎\index‎ در حروفچینی شعر در XePersian

پستتوسط mingranina » 17 مارس 2018, 00:26

با سلام

کد زیر نمونه‌ای از استفاده از دستور ‎\index‎ در حروفچینی شعر در زیپرشین است:
کد: انتخاب همهٔ
% index-bidipoem.tex
\PassOptionsToPackage{pdfinfo=off}{bidi}
\documentclass{article}
\usepackage[top=25mm, bottom=25mm, left=18mm, right=18mm]{geometry}
\usepackage{makeidx}
\usepackage{hyperref}
\usepackage{multicol}
\usepackage[logo=off,quickindex]{xepersian}
\usepackage{bidipoem}
\settextfont[Scale=1.2]{HM XYas}
\renewcommand{\baselinestretch}{1.5}
\makeindex
\setlength{\columnseprule}{0.5pt}
\renewcommand\poemcolsepskip{1.0cm}
\pagestyle{empty}
\begin{document}
\centerline{شعر شمارهٔ ۱}
\begin{traditionalpoem}
این مصرع اول از اول است. & این مصرع دوم از اول است.\index{بیت اول}  \\
این مصرع اول از دوم است. & این مصرع دوم از دوم است.\index{مصرع دوم} \\
این مصرع اول از سوم است. & این مصرع دوم از سوم است.\index{مصرع سوم} \\
\end{traditionalpoem}
\centerline{شعر شمارهٔ ۲}
\begin{traditionalpoem}
این مصرع اول . از چهارم است. & این مصرع دوم . از چهارم است. \index{بیت چهارم} \\
این مصرع اول از پنجم است.  & این مصرع دوم از پنجم است.      \index{مصرع پنجم} \\
این مصرع اول .. از ششم است.   & این مصرع دوم .. از ششم است. \index{مصرع ششم}  \\
\end{traditionalpoem}
\centerline{شعر شمارهٔ ۳}
\begin{traditionalpoem}
این مصرع اول از هفتم است. & این مصرع دوم از هفتم است.     \index{بیت هفتم}  \\
این مصرع اول . از هشتم است. & این مصرع دوم . از هشتم است. \index{مصرع هشتم} \\
این مصرع اول از نهم است.  & این مصرع دوم از نهم است.      \index{مصرع نهم}  \\
\end{traditionalpoem}
\printindex
\end{document}

خروجی کد فوق با استفاده از دستور سادهٔ «xelatex --shell-escape index-bidipoem.tex» بصورت زیر است:

index-bidipoem-1.png

مشاهده می‌شود که در شعر اول که دستور ‎\index‎ به متن چسبیده است سطرها موزون هستند. اما اگر برای خواناتر شدن کد بین دستور ‎\index‎ و متن در شعر دوم و سوم فاصله ایجاد کنید آنگاه سطرها به‌هم می‌ریزد.

برای رفع این اشکال، یک راه‌حل این است که دستور ‎\index‎ را بازتعریف و راه‌حل دیکر آن است که دستور جدیدی مثل ‎\MyIndex‎ تعریف و قبل از دستور ‎\makeindex‎ قرار دهید:
کد: انتخاب همهٔ
% index-bidipoem.tex
\PassOptionsToPackage{pdfinfo=off}{bidi}
\documentclass{article}
\usepackage[top=25mm, bottom=25mm, left=18mm, right=18mm]{geometry}
\usepackage{makeidx}
\usepackage{hyperref}
\usepackage{multicol}
\usepackage[logo=off,quickindex]{xepersian}
\usepackage{bidipoem}
\settextfont[Scale=1.2]{HM XYas}
\renewcommand{\baselinestretch}{1.5}
\def\MyIndex#1{\unskip\relax\index{#1}}
\makeatletter
\def\makeindex{%
  \newwrite\@indexfile
  \immediate\openout\@indexfile=\jobname.idx
  \def\index{\unskip\@bsphack\begingroup
             \@sanitize
             \@wrindex}\typeout
    {Writing index file \jobname.idx}%
  \let\makeindex\@empty
}
\makeatother
\makeindex
\setlength{\columnseprule}{0.5pt}
\renewcommand\poemcolsepskip{1.0cm}
\pagestyle{empty}
\begin{document}
\centerline{شعر شمارهٔ ۱}
\begin{traditionalpoem}
این مصرع اول از اول است. & این مصرع دوم از اول است.\index{بیت اول}  \\
این مصرع اول از دوم است. & این مصرع دوم از دوم است.\index{مصرع دوم} \\
این مصرع اول از سوم است. & این مصرع دوم از سوم است.\index{مصرع سوم} \\
\end{traditionalpoem}
\centerline{شعر شمارهٔ ۲}
\begin{traditionalpoem}
این مصرع اول . از چهارم است. & این مصرع دوم . از چهارم است. \index{بیت چهارم} \\
این مصرع اول از پنجم است.  & این مصرع دوم از پنجم است.      \index{مصرع پنجم} \\
این مصرع اول .. از ششم است.   & این مصرع دوم .. از ششم است. \index{مصرع ششم}  \\
\end{traditionalpoem}
\centerline{شعر شمارهٔ ۳}
\begin{traditionalpoem}
این مصرع اول از هفتم است. & این مصرع دوم از هفتم است.     \MyIndex{بیت هفتم}  \\
این مصرع اول . از هشتم است. & این مصرع دوم . از هشتم است. \MyIndex{مصرع هشتم} \\
این مصرع اول از نهم است.  & این مصرع دوم از نهم است.      \MyIndex{مصرع نهم}  \\
\end{traditionalpoem}
\printindex
\end{document}

خروجی کد فوق بصورت زیر است و مشاهده می‌شود که سطرها در هر سه شعر موزون هستند:

index-bidipoem-2.png

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

مراجع و منابع برای فراگیری TeX و دوستانش

پستتوسط mingranina » 19 مارس 2018, 21:06

با سلام

فهرست برخی از منابع و مراجعی که برای فراگیری TeX و دوستانش ممکن است مفید باشند (و به تدریج کامل‌تر خواهد شد):
References and Resources:

TeX:
[1] Knuth D.E. (1996) The TeXbook
[2] Eijkhout V. (2013) TeX By Topic
[3] Abrahams P.W et al. (2013) TeX For The Impatient
[4] von Bechtolsheim S. (1993) TeX In Practice vol. I: Basics
[5] von Bechtolsheim S. (1993) TeX In Practice vol. II: Paragraphs, Math and Fonts
[6] von Bechtolsheim S. (1993) TeX In Practice vol. III: Tokens, Macros
[7] von Bechtolsheim S. (1993) TeX In Practice vol. IV: Output, Routines, Tables
[8] Salomon D. (1995) The Advanced TeXbook
[9] Seroul R. et al. (1995) A Beginner's Book of TeX
[10] Doob M. (1984) A Gentle Introduction To TeX
[11] Krieger J. & Schwarz N. (1989) Introduction To TeX
[12] Gurari E.M. (1994) Writing With TeX
[13] Bausum D. (2002) TeX Reference Manual
[14] Knuth D.E. (1986) The Metafont Book

LaTeX:
[15] Lamport L. (1994) LaTeX, A Document Preparation System 2nd Ed
[16] Mittelbach F. et al. (2004) The LaTeX Companion 2nd Ed
[17] Goossens M. et al. (2008) The LaTeX Graphics Companion 2nd Ed
[18] Goossens M. et al. (1999) The LaTeX Web Companion Integrating TeX HTML and XML
[19] Maltby, G. (1992) An Introduction to TeX and Friends
[20] Kopka H. & Daly P. (2004) A Guide to LaTeX 4th Ed
[21] van Dongen M.R.C. LaTeX and Friends
[22] Eijkhout V. (2012) The Computer Science of TeX and LaTeX
[23] Braams J. et al. (2017) The LaTeX2e Sources

علاوه بر منابع و مراجع فوق، هر بستهٔ TeX و دوستانش یک راهنمای کاربری دارد که با استفاده از دستور texdoc می‌توان از آن استفاده کرد. به عنوان مثال برای راهنمای بستهٔ tikz کافی است دستور زیر را در خط فرمان تایپ کنید:
texdoc tikz

برخی از این راهنماهای کاربری عبارتند از:
XeTeX:
[24] The Not So Short Introduction to LaTeX2e
[25] LaTeX2e The macro package for TeX
[26] LaTeX2e for authors
[27] LaTeX2e for class and package writers
[28] Modifying LaTeX
[29] Configuration options for LaTeX2e
[30] The fontspec package
[31] The fontspec package examples
[32] The expl3 package and LaTeX3 programming
[33] The LaTeX3 Interfaces
[34] The LaTeX3 Sources
[35] The pdfTeX user manual
[36] The Comprehensive LaTeX Symbol List
[37] LaTeX2e Maths Symbols
[38] Script fonts for mathematical use available to LaTeX users
[39] Every symbol (most symbols) defined by unicode-math
[40] Users's Guide to AMS_TeX
[41] User's Guide to AMSFonts Version 2.2d
[42] The eucal and euscript packages
[43] The eufrak package
[44] The RevTeX4-1 document class of the Amerian Physical Society
[45] A LaTeX Package of utilitiy macros (REVTeX4)
[46] The DocStrip program
[47] Babel, a multilingual package
[48] The XeTeX Companion
[49] The XeTeX reference guide
[50] About XeTeX
[51] The bidi package-v32.1
[52] The bidi package-latest version
[53] XePersian Users's Guide-20.6
[54] XePersian Users's Guide-latest version

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

فاصلهٔ بین حروف با گزینهٔ کشیده در زیپرشین (XePersian)

پستتوسط mingranina » 27 مارس 2018, 19:39

با سلام

کد زیر نمونه‌ای از گزینهٔ کشیده (Kashida) در زیپرشین (XePersian) است که در آن از فونت‌‎XB Niloofar‎ استفاده شده است:
کد: انتخاب همهٔ
% space-between-letters-with-kashida-XB.tex
\PassOptionsToPackage{pdfinfo=off}{bidi}
\documentclass{report}
\usepackage{amsthm}
\usepackage[logo=off,Kashida,KashidaXBFix]{xepersian}
\settextfont[Scale=9]{XB Niloofar}
\setdigitfont[Scale=9]{XB Niloofar}
\chardef\kashida="0640
\theoremstyle{plain}
\newtheorem{theorem}{قضیه}[section]
\newtheorem{definition}[theorem]{تعریف}
\pagestyle{empty}
\begin{document}
\begin{definition}
  این آزمایش تعریف ریاضی است.
  ها \kashida
\end{definition}
\end{document}

خروجی کد فوق با دستور «xelatex space-between-letters-with-kashida.tex» بصورت زیر است:

space-between-letters-with-kashida-XB.png

ملاحظه می‌شود که بین حروفی که کشیده شده فاصله افتاده است. این مشکل با فونت‌های دیگر سری XB یا همان X Series 2 و از جمله فونت یاس Yas (که از فونت‌XB Yas به‌دست آمده) و بسیاری از فونت‌های دیگر نیز وجود دارد. علت آن است که زیپرشین برای کشیدن حروف از دستور ‎\hrule‎ استفاده می‌کند. برای رفع این مشکل باید از فونت‌های سری HM استفاده کرد که از همان فونت‌های X Series 2 نتیجه شده و البته اصلاحاتی روی آنها انجام شده است. این فونت‌ها را می‌توانید از اینجا دانلود و نصب کنید و پس از اجرای کد زیر که در آن از فونت‌های سری HM استفاده شده:
کد: انتخاب همهٔ
% space-between-letters-with-kashida-HM.tex
\PassOptionsToPackage{pdfinfo=off}{bidi}
\documentclass{report}
\usepackage{amsthm}
\usepackage[logo=off,Kashida]{xepersian}
\settextfont[Scale=9]{HM XNiloofar}
\setdigitfont[Scale=9]{HM XNiloofar}
\chardef\kashida="0640
\theoremstyle{plain}
\newtheorem{theorem}{قضیه}[section]
\newtheorem{definition}[theorem]{تعریف}
\pagestyle{empty}
\begin{document}
\begin{definition}
  این آزمایش تعریف ریاضی است.
  ها \kashida
\end{definition}
\end{document}

خروجی به‌صورت زیر است (توجه کنید که در این حالت گزینهٔ KashidaXBFix حذف شده است زیرا با فونت‌های سری HM نیازی به این گزینه نیست):

space-between-letters-with-kashida-HM.png

نرم‌افزارهای مورد استفاده:

bidi: v32.9, 2018/02/22
xepersian: v21.1, 2018/01/28


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



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


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