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 } }
}
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
\__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_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 } }
}
}
\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 } }
}
\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 }
\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:
}
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
وفا خلیقی:
این بسته همون کد بسته زیپرشین برای کشیده رو برداشته و دقیقا همون کد تک رو به زبان برنامهنویسی لاتک ۳ ترجمه کرده. تنها کار اضافهای که این بسته انجام میده این هست که ... برای قامهای مختلف چسبهای مختلف تعریف کرده و این اجازه رو به کاربر میده که مقدار چسب رو خودش مشخص کنه (در صورت استفاده از قلمهای دیگر یا در صورت نیاز). این تنها تفاوتش با کد اصلی در بسته زیپرشین هست.
وفا خلیقی:
ولی این بسته کار خاصی انجام نمیده و این روش درست کردن کشیده کیفیت پایینی داره و اصولی نیست (این فقط یک وصلهکاری هست). بنابراین من استفاده از این بسته رو پیشنهاد نمیکنم. نکته دیگر اینه که این بسته رابط کاربری خیلی ضعیفی داره.
\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}
وفا خلیقی:
برای اینکه کشیده کیفیت بالایی داشته باشه باید موتور حروفچین ابزار لازم رو داشته باشه در مورد بسته زیپرشین موتور زیتک این ابزار رو در اختیار قرار نمیده و چیزی که در زیپرشین وجود داره تنها یک هک هست تا اینکه راهحل واقعی باشه. به عنوان نمونه موتور حروفچین تک پارسی رو ببین اونجا کشیدگی کیفیت بالایی داره چون این کار داره توی موتور حروفچین انجام میشه. در سطح ماکرو متاسفانه نمیشه همیشه معجزه کرد چون تنها میتونی با امکانات بدوی که موتور تک در اختیارت قرار میده کار کنی و اگر این کار در موتور تک امکانپذیر نباشه نمیتونی در سطح ماکرو درستش کنی.
بهبودی که من میتونم در بسته زیپرشین بهش فکر کنم این هست که یک الگوریتم طراحی کنم که مقدار چسب رو بصورت خودکار محاسبه کنه برای هر قلمی که مورد استفاده قرار میگیره اما این هم باز همانند گزینه computeautoilg ممکنه سرعت پردازش رو پایین بیاره شاید حتی خیلی پایینتر.
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.
%% 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
وفا خلیقی:
پرسش: در این پرسش اشاره کردی که بعضی افراد کتاب تک کنوث رو یک شبه خوندند و بعضی افراد بعضی بخشها رو چندین بار خوندند، خودت جزو کدوم دسته بودی؟
پاسخ: با اینکه من دوست دارم بگم من این کتاب رو یک شبه خوندم اما این موضوع حقیقت نداره. من برای خوندن و فهمیدن این کتاب struggle داشتم و برام سخت بود. یک دور خوندن کتاب یک ماه کامل طول کشید و بعد از این یک بار باز هم همه جای کتاب رو درست متوجه نشدم. چندین بار این کتاب رو خوندم و چندین سال گذشت تا بتونم همه مطالب کتاب رو بصورت شفاف متوجه بشم. بنابراین اگر خوندن این کتا براتون سخته همیچوقت ناامید نشید و دست از خوندنش برندارید. فهم کامل کتاب نیاز به پافشاری و فکر کردن و همچنین کار کردن با تک داره. پیشنهاد میکنم برای مدتی که دارید این کتاب رو میخونید فقط از فرمت Plain TeX و موتور تک اصلی کنوث استفاده کنید. همچنین توجه داشته باشید که من برای نسختین بار این کتاب رو در ۱۲ سالگی خوندم و دسترسی به کامپیوتر نداشتم بنابراین این شاید مقداری توضیح بده چرا خوندن این کتاب برای یک نوجوان ۱۲ ساله سخت بوده.
پرسشی در قالب نظر در سایت مربوطه:
چه چیزی سبب شد که شما در ۱۲ سالگی به این کتاب علاقهمند شوید؟ و یا به بیان دیگر دسترسی به این کتاب این قدر برای شما ساده بود؟ من تا آنجایی که خاطرم هست آن زمان که دانشجو بودم در کتابخانه دانشگاه شریف یک نسخه کپی از کتاب لامپورت پیدا کردم و از کتاب تک کنوث خبری نبود! (البته الان را نمیدانم وضع چگونه است بالاخره ۱۵ سال گذشته و همه دنیا تغییر کرده ...)
وفا خلیقی:
یک معلم ریاضی در مدرسه داشتم که یک چینی سنگاپوری به نام Ray Tan بود. برای امتحان ریاضی ایشون سوالها رو با تک حروفچینی میکرد. برای من زیبایی حروفچینی ریاضی جالب بود و وقتی ازش سوال کردم این سوالها رو چجوری حروفچینی کردی گفت با تک و کتاب تک کنوث رو معرفی کرد و تونستم نخسهای که اون داشت رو دو هفتهای به امانت بگیرم اما بعد از دو هفته کتابش باید پس میدادم و وقتی ازش پرسیدم که آیا میتونم کتاب رو مدت بیشتری پیش خودم نگه دارم پاسخش منفی بود. بنابراین از پدرم خواستم کتاب رو برام سفارش بده و حدود یک ماهی طول کشید تا از آمریکا به استرالیا برسه.
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.
وفا خلیقی:
البته حدود بیشتر از ۱۰ سال هست که با تک آشنا هستم
وفا خلیقی:
«حدود دو سالی هست که بصورت آزمایشی دارم روی یک موتور حروفچین تک برای حروفچینی زبان پارسی کار میکنم»
\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}
\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}
کاربران حاضر در این انجمن: بدون کاربران آنلاین و 3 مهمان