diff options
Diffstat (limited to 'Master/texmf-dist/tex/xelatex/xepersian/xepersian.sty')
-rw-r--r-- | Master/texmf-dist/tex/xelatex/xepersian/xepersian.sty | 1538 |
1 files changed, 1538 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/xelatex/xepersian/xepersian.sty b/Master/texmf-dist/tex/xelatex/xepersian/xepersian.sty new file mode 100644 index 00000000000..9c346910b81 --- /dev/null +++ b/Master/texmf-dist/tex/xelatex/xepersian/xepersian.sty @@ -0,0 +1,1538 @@ +%% +%% This is file `xepersian.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% xepersian.dtx (with options: `table,xepersian.sty') +%% +%% __________________________________________________ +%% Copyright (c) 2008--2020 Vafa Khalighi +%% Copyright (c) 2018--2020 bidi-tex GitHub Organization +%% +%% It may be distributed and/or modified under the LaTeX Project Public License, +%% version 1.3c or higher (your choice). The latest version of +%% this license is at: http://www.latex-project.org/lppl.txt +%% +%% This work is “author-maintained” (as per LPPL maintenance status) +%% by Vafa Khalighi. +%% +%% +%% \CheckSum{10884} +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%% +\NeedsTeXFormat{LaTeX2e} +\def\xepersian@version{23.0} +\def\xepersiandate{2020/05/16} +\ProvidesPackage{xepersian}[\xepersiandate\space v\xepersian@version\space +Persian typesetting in XeLaTeX] +\RequirePackage{fontspec} +\RequirePackage{xepersian-persiancal} +\RequirePackage{xepersian-mathsdigitspec} +\RequirePackage{bidi} +\edef\@xepersian@info{****************************************************^^J% +* ^^J% +* xepersian package (Persian for LaTeX, using XeTeX engine)^^J% +* ^^J% +* Description: The package supports Persian^^J% +* typesetting, using fonts provided in the^^J% +* distribution.^^J% +* ^^J% +* Copyright (c) 2008--2020 Vafa Khalighi^^J% +* Copyright (c) 2018--2020 bidi-tex GitHub Organization^^J% +* ^^J% +* v\xepersian@version, \xepersiandate^^J% +* ^^J% +* License: LaTeX Project Public License, version^^J% +* 1.3c or higher (your choice)^^J% +* ^^J% +* Location on CTAN: /macros/xetex/latex/xepersian^^J% +* ^^J% +* Issue tracker: https://github.com/persiantex/xepersian/issues^^J% +* ^^J% +****************************************************} +\typeout{\@xepersian@info} +\edef\xepersian@everyjob{\the\everyjob} +\everyjob{\xepersian@everyjob\typeout{\@xepersian@info}} +\newcommand*{\xepersianversion} + {\ensuremath\xepersian@version} +\newcommand*{\IfxepersianPackageVersionLater}[1]{% + \ifdim\xepersian@version pt > #1 pt % + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\newcommand*{\IfxepersianPackageVersionBefore}[1]{% + \ifdim\xepersian@version pt < #1 pt % + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\newcommand*{\IfxepersianPackageVersion}[1]{% + \ifdim\xepersian@version pt = #1 pt % + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\def\prq{«} +\def\plq{»} +\def\xepersian@cmds@temp#1{% + \begingroup\expandafter\expandafter\expandafter\endgroup + \expandafter\ifx\csname xepersian@#1\endcsname\relax + \begingroup + \escapechar=-1 % + \edef\x{\expandafter\meaning\csname#1\endcsname}% + \def\y{#1}% + \def\z##1->{}% + \edef\y{\expandafter\z\meaning\y}% + \expandafter\endgroup + \ifx\x\y + \expandafter\def\csname xepersian@#1\expandafter\endcsname + \expandafter{% + \csname#1\endcsname + }% + \fi + \fi +}% +\xepersian@cmds@temp{shellescape} +\newif\ifwritexviii +\ifnum\xepersian@shellescape=1\relax + \writexviiitrue +\else +\writexviiifalse +\fi +\newfontscript{Persian}{arab} +\newfontlanguage{Persian}{FAR} +\ExplSyntaxOn + +\keys_define:nn {fontspec-opentype} + { + Ligatures / PersianTeX .code:n = { \tl_set:Nn \l__fontspec_mapping_tl {persian-tex-text} }, + Ligatures / PersianTeXOff .code:n = { \tl_clear:N \l__fontspec_mapping_tl }, + Ligatures / PersianTeXReset .code:n = { \tl_clear:N \l__fontspec_mapping_tl }, + } + +\keys_define:nn {fontspec-aat} + { + Ligatures / PersianTeX .code:n = + { + \tl_set:Nn \l__fontspec_mapping_tl { persian-tex-text } + } + } + +\DeclareDocumentCommand \settextfont { O{} m O{} } + { + \__xepersian_main_settextfont:nn {#1,#3} {#2} + \ignorespaces + } +\cs_new:Nn \__xepersian_main_settextfont:nn + { + \fontspec_set_family:Nnn \l__xepersian_persianfont_family_tl {Script=Persian,Ligatures=PersianTeX,#1} {#2} + \tl_set_eq:NN \rmdefault \l__xepersian_persianfont_family_tl + \use:x { \exp_not:n { \DeclareRobustCommand \persianfont } + { + \exp_not:N \fontencoding { \g__fontspec_nfss_enc_tl } + \exp_not:N \fontfamily { \l__xepersian_persianfont_family_tl } + \exp_not:N \selectfont + } + } + \str_if_eq:eeT {\familydefault} {\rmdefault} + { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl } + \__xepersian_settextfont_hook:nn {#1} {#2} + \normalfont + } + +\cs_set_eq:NN \__xepersian_settextfont_hook:nn \use_none:nn + +\DeclareDocumentCommand \settextdigitfont { O{} m O{} } + { + \__xepersian_main_settextdigitfont:nn {#1,#3} {#2} + \ignorespaces + } +\cs_new:Nn \__xepersian_main_settextdigitfont:nn + { + \fontspec_set_family:Nnn \l__xepersian_textdigitfont_family_tl {Script=Persian,Ligatures=PersianTeX,#1} {#2} + \use:x + { + \exp_not:n { \DeclareRobustCommand \xepersian@textdigitfont } + { + \exp_not:N \fontfamily { \l__xepersian_textdigitfont_family_tl } + \exp_not:N \fontencoding { \g__fontspec_nfss_enc_tl } + \exp_not:N \selectfont + } + } + \__xepersian_settextdigitfont_hook:nn {#1} {#2} + \XeTeXinterchartoks \e@alloc@intercharclass@top \bidi@digits@charclass = {\xepersian@@start@switch@textdigitfont} + \XeTeXinterchartoks \bidi@digits@charclass \e@alloc@intercharclass@top = {\xepersian@@stop@switch@textdigitfont} + \XeTeXinterchartoks \z@ \bidi@digits@charclass = {\xepersian@@start@switch@textdigitfont} + \XeTeXinterchartoks \bidi@digits@charclass \z@ = {\xepersian@@stop@switch@textdigitfont} + \XeTeXinterchartoks \bidi@digits@charclass \bidi@sepmark@charclass = {\xepersian@@stop@switch@textdigitfont} + \XeTeXinterchartoks \bidi@sepmark@charclass \bidi@digits@charclass = {\DigitsDotDashInterCharToks\xepersian@@start@switch@textdigitfont} + \if@bidi@csundef{xepersian@D}{}{% + \XeTeXinterchartoks \xepersian@D \bidi@digits@charclass = {\xepersian@@start@switch@textdigitfont} + \XeTeXinterchartoks \bidi@digits@charclass \xepersian@D = {\xepersian@@stop@switch@textdigitfont} + \XeTeXinterchartoks \xepersian@L \bidi@digits@charclass = {\xepersian@@start@switch@textdigitfont} + \XeTeXinterchartoks \bidi@digits@charclass \xepersian@L = {\xepersian@@stop@switch@textdigitfont} + \XeTeXinterchartoks \xepersian@A \bidi@digits@charclass = {\xepersian@@start@switch@textdigitfont} + \XeTeXinterchartoks \bidi@digits@charclass \xepersian@A = {\xepersian@@stop@switch@textdigitfont} + \XeTeXinterchartoks \xepersian@R \bidi@digits@charclass = {\xepersian@@start@switch@textdigitfont} + \XeTeXinterchartoks \bidi@digits@charclass \xepersian@R = {\xepersian@@stop@switch@textdigitfont} + } + } + +\newcommand*{\xepersian@@start@switch@textdigitfont}{\ifx\f@family\ttdefault\else\if@nonlatin\if@@textdigitfont@on\bgroup\xepersian@textdigitfont\else\fi\fi\fi} +\newcommand*{\xepersian@@stop@switch@textdigitfont}{\ifx\f@family\ttdefault\else\if@nonlatin\if@@textdigitfont@on\egroup\else\fi\fi\fi} + +\cs_set_eq:NN \__xepersian_settextdigitfont_hook:nn \use_none:nn + +\DeclareDocumentCommand \setdigitfont { O{} m O{} } + { + \__xepersian_main_settextdigitfont:nn {#1,#3} {#2} + \__xepersian_main_setmathdigitfont:nn {#1,#3} {#2} + \ignorespaces + } + +\DeclareDocumentCommand \setlatintextfont { O{} m O{} } + { + \__xepersian_main_setlatintextfont:nn {#1,#3} {#2} + \ignorespaces + } +\cs_new:Nn \__xepersian_main_setlatintextfont:nn + { + \fontspec_set_family:Nnn \l__xepersian_latinfont_family_tl {Ligatures=TeX,#1} {#2} + \use:x { \exp_not:n { \DeclareRobustCommand \latinfont } + { + \exp_not:N \fontencoding { \g__fontspec_nfss_enc_tl } + \exp_not:N \fontfamily { \l__xepersian_latinfont_family_tl } + \exp_not:N \selectfont + } + } + \str_if_eq:eeT {\familydefault} {\rmdefault} + { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl } + \__xepersian_setlatintextfont_hook:nn {#1} {#2} + \normalfont + } + +\cs_set_eq:NN \__xepersian_setlatintextfont_hook:nn \use_none:nn + +\tl_set_eq:NN \setlatinsansfont \setsansfont +\tl_set_eq:NN \setlatinmonofont \setmonofont + +\DeclareDocumentCommand \defpersianfont { m O{} m O{} } + { + \__xepersian_main_defpersianfont:NnnN #1 {#2,#4} {#3} + \NewDocumentCommand + } +\DeclareDocumentCommand \redefpersianfont { m O{} m O{} } + { + \__xepersian_main_defpersianfont:NnnN #1 {#2,#4} {#3} + \RenewDocumentCommand + } +\cs_new:Nn \__xepersian_main_defpersianfont:NnnN + { + \fontspec_set_family:cnn { l__xepersian_ \cs_to_str:N #1 _family_tl } {Script=Persian,Ligatures=PersianTeX,#2} {#3} + \use:x + { + \exp_not:N #4 \exp_not:N #1 {} + { + \exp_not:N \fontfamily { \use:c {l__xepersian_ \cs_to_str:N #1 _family_tl } } + \exp_not:N \fontencoding { \g__fontspec_nfss_enc_tl } + \exp_not:N \selectfont + } + } + } + +\DeclareDocumentCommand \deflatinfont { m O{} m O{} } + { + \__xepersian_main_deflatinfont:NnnN #1 {#2,#4} {#3} + \NewDocumentCommand + } +\DeclareDocumentCommand \redeflatinfont { m O{} m O{} } + { + \__xepersian_main_deflatinfont:NnnN #1 {#2,#4} {#3} + \RenewDocumentCommand + } +\cs_new:Nn \__xepersian_main_deflatinfont:NnnN + { + \fontspec_set_family:cnn { l__xepersian_ \cs_to_str:N #1 _family_tl } {Ligatures=TeX,#2} {#3} + \use:x + { + \exp_not:N #4 \exp_not:N #1 {} + { + \exp_not:N \fontfamily { \use:c {l__xepersian_ \cs_to_str:N #1 _family_tl } } + \exp_not:N \fontencoding { \g__fontspec_nfss_enc_tl } + \exp_not:N \selectfont + } + } + } + +\newcommand\persiansfdefault{} +\newcommand\persianttdefault{} +\newcommand\iranicdefault{} +\newcommand\navardefault{} +\newcommand\pookdefault{} +\newcommand\sayehdefault{} +\DeclareRobustCommand\persiansffamily + {\not@math@alphabet\persiansffamily\mathpersiansf + \fontfamily\persiansfdefault\selectfont} +\DeclareRobustCommand\persianttfamily + {\not@math@alphabet\persianttfamily\mathpersiantt + \fontfamily\persianttdefault\selectfont} +\DeclareRobustCommand\iranicfamily + {\not@math@alphabet\iranicfamily\mathiranic + \fontfamily\iranicdefault\selectfont} +\DeclareRobustCommand\navarfamily + {\not@math@alphabet\navarfamily\mathnavar + \fontfamily\navardefault\selectfont} +\DeclareRobustCommand\pookfamily + {\not@math@alphabet\pookfamily\mathpook + \fontfamily\pookdefault\selectfont} +\DeclareRobustCommand\sayehfamily + {\not@math@alphabet\sayehfamily\mathsayeh + \fontfamily\sayehdefault\selectfont} +\DeclareTextFontCommand{\textpersiansf}{\persiansffamily} +\DeclareTextFontCommand{\textpersiantt}{\persianttfamily} +\DeclareTextFontCommand{\textiranic}{\iranicfamily} +\DeclareTextFontCommand{\textnavar}{\navarfamily} +\DeclareTextFontCommand{\textpook}{\pookfamily} +\DeclareTextFontCommand{\textsayeh}{\sayehfamily} + +\DeclareDocumentCommand \setpersiansansfont { O{} m O{} } + { + \__xepersian_main_setpersiansansfont:nn {#1,#3} {#2} + \ignorespaces + } +\cs_new:Nn \__xepersian_main_setpersiansansfont:nn + { + \fontspec_set_family:Nnn \l__xepersian_persiansffamily_family_tl {Script=Persian,Ligatures=PersianTeX,#1} {#2} + \tl_set_eq:NN \persiansfdefault \l__xepersian_persiansffamily_family_tl + \use:x { \exp_not:n { \DeclareRobustCommand \persiansffamily } + { + \exp_not:N \fontencoding { \g__fontspec_nfss_enc_tl } + \exp_not:N \fontfamily { \l__xepersian_persiansffamily_family_tl } + \exp_not:N \selectfont + } + } + \str_if_eq:eeT {\familydefault} {\persiansfdefault} + { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl } + \__xepersian_setpersiansansfont_hook:nn {#1} {#2} + \normalfont + } + +\cs_set_eq:NN \__xepersian_setpersiansansfont_hook:nn \use_none:nn + +\DeclareDocumentCommand \setpersianmonofont { O{} m O{} } + { + \__xepersian_main_setpersianmonofont:nn {#1,#3} {#2} + \ignorespaces + } +\cs_new:Nn \__xepersian_main_setpersianmonofont:nn + { + \fontspec_set_family:Nnn \l__xepersian_persianttfamily_family_tl {Script=Persian,Ligatures=PersianTeX,#1} {#2} + \tl_set_eq:NN \persianttdefault \l__xepersian_persianttfamily_family_tl + \use:x { \exp_not:n { \DeclareRobustCommand \persianttfamily } + { + \exp_not:N \fontencoding { \g__fontspec_nfss_enc_tl } + \exp_not:N \fontfamily { \l__xepersian_persianttfamily_family_tl } + \exp_not:N \selectfont + } + } + \str_if_eq:eeT {\familydefault} {\persianttdefault} + { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl } + \__xepersian_setpersianmonofont_hook:nn {#1} {#2} + \normalfont + } + +\cs_set_eq:NN \__xepersian_setpersianmonofont_hook:nn \use_none:nn + +\DeclareDocumentCommand \setnavarfont { O{} m O{} } + { + \__xepersian_main_setnavarfont:nn {#1,#3} {#2} + \ignorespaces + } +\cs_new:Nn \__xepersian_main_setnavarfont:nn + { + \fontspec_set_family:Nnn \l__xepersian_navarfamily_family_tl {Script=Persian,Ligatures=PersianTeX,#1} {#2} + \tl_set_eq:NN \navardefault \l__xepersian_navarfamily_family_tl + \use:x { \exp_not:n { \DeclareRobustCommand \navarfamily } + { + \exp_not:N \fontencoding { \g__fontspec_nfss_enc_tl } + \exp_not:N \fontfamily { \l__xepersian_navarfamily_family_tl } + \exp_not:N \selectfont + } + } + \str_if_eq:eeT {\familydefault} {\navardefault} + { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl } + \__xepersian_setnavarfont_hook:nn {#1} {#2} + \normalfont + } + +\cs_set_eq:NN \__xepersian_setnavarfont_hook:nn \use_none:nn + +\DeclareDocumentCommand \setpookfont { O{} m O{} } + { + \__xepersian_main_setpookfont:nn {#1,#3} {#2} + \ignorespaces + } +\cs_new:Nn \__xepersian_main_setpookfont:nn + { + \fontspec_set_family:Nnn \l__xepersian_pookfamily_family_tl {Script=Persian,Ligatures=PersianTeX,#1} {#2} + \tl_set_eq:NN \pookdefault \l__xepersian_pookfamily_family_tl + \use:x { \exp_not:n { \DeclareRobustCommand \pookfamily } + { + \exp_not:N \fontencoding { \g__fontspec_nfss_enc_tl } + \exp_not:N \fontfamily { \l__xepersian_pookfamily_family_tl } + \exp_not:N \selectfont + } + } + \str_if_eq:eeT {\familydefault} {\pookdefault} + { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl } + \__xepersian_setpookfont_hook:nn {#1} {#2} + \normalfont + } + +\cs_set_eq:NN \__xepersian_setpookfont_hook:nn \use_none:nn + +\DeclareDocumentCommand \setsayehfont { O{} m O{} } + { + \__xepersian_main_setsayehfont:nn {#1,#3} {#2} + \ignorespaces + } +\cs_new:Nn \__xepersian_main_setsayehfont:nn + { + \fontspec_set_family:Nnn \l__xepersian_sayehfamily_family_tl {Script=Persian,Ligatures=PersianTeX,#1} {#2} + \tl_set_eq:NN \sayehdefault \l__xepersian_sayehfamily_family_tl + \use:x { \exp_not:n { \DeclareRobustCommand \sayehfamily } + { + \exp_not:N \fontencoding { \g__fontspec_nfss_enc_tl } + \exp_not:N \fontfamily { \l__xepersian_sayehfamily_family_tl } + \exp_not:N \selectfont + } + } + \str_if_eq:eeT {\familydefault} {\sayehdefault} + { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl } + \__xepersian_setsayehfont_hook:nn {#1} {#2} + \normalfont + } + +\cs_set_eq:NN \__xepersian_setsayehfont_hook:nn \use_none:nn + +\DeclareDocumentCommand \setiranicfont { O{} m O{} } + { + \__xepersian_main_setiranicfont:nn {#1,#3} {#2} + \ignorespaces + } +\cs_new:Nn \__xepersian_main_setiranicfont:nn + { + \fontspec_set_family:Nnn \l__xepersian_iranicfamily_family_tl {Script=Persian,Ligatures=PersianTeX,#1} {#2} + \tl_set_eq:NN \iranicdefault \l__xepersian_iranicfamily_family_tl + \use:x { \exp_not:n { \DeclareRobustCommand \iranicfamily } + { + \exp_not:N \fontencoding { \g__fontspec_nfss_enc_tl } + \exp_not:N \fontfamily { \l__xepersian_iranicfamily_family_tl } + \exp_not:N \selectfont + } + } + \str_if_eq:eeT {\familydefault} {\iranicdefault} + { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl } + \__xepersian_setiranicfont_hook:nn {#1} {#2} + \normalfont + } + +\cs_set_eq:NN \__xepersian_setiranicfont_hook:nn \use_none:nn + +\ExplSyntaxOff +\def\resetlatinfont{% +\let\@xepersian@@fontsize@scale\xepersian@@fontsize@scale% +\let\@xepersian@@baselineskip@scale\xepersian@@baselineskip@scale% +\def\xepersian@@fontsize@scale{% + \strip@pt\dimexpr 1pt * \dimexpr + \xepersian@@latin@fontsize@scale pt\relax + / \dimexpr \@xepersian@@fontsize@scale pt\relax\relax +}% +\def\xepersian@@baselineskip@scale{% + \strip@pt\dimexpr 1pt * \dimexpr + \xepersian@@latin@baselineskip@scale pt\relax + / \dimexpr \@xepersian@@baselineskip@scale pt\relax\relax +}% +\@nonlatinfalse% +\let\normalfont\latinfont% +\let\reset@font\normalfont% +\latinfont% +\fontsize\f@size\f@baselineskip% +\selectfont% +\let\xepersian@@fontsize@scale\xepersian@@latin@fontsize@scale% +\let\xepersian@@baselineskip@scale\xepersian@@latin@baselineskip@scale% +} +\def\setpersianfont{% +\let\@xepersian@@fontsize@scale\xepersian@@fontsize@scale% +\let\@xepersian@@baselineskip@scale\xepersian@@baselineskip@scale% +\let\xepersian@@fontsize@scale\@ne% +\let\xepersian@@baselineskip@scale\@ne% +\@nonlatintrue% +\let\normalfont\persianfont% +\let\reset@font\normalfont% +\persianfont% +\fontsize\f@size\f@baselineskip% +\selectfont% +\let\xepersian@@fontsize@scale\@xepersian@@fontsize@scale% +\let\xepersian@@baselineskip@scale\@xepersian@@baselineskip@scale% +} +\bidi@newrobustcmd*{\lr}[1]{\LRE{\resetlatinfont#1}} +\bidi@newrobustcmd*{\rl}[1]{\RLE{\setpersianfont#1}} +\def\latin{\LTR\LatinAlphs\@RTL@footnotefalse\resetlatinfont} +\def\endlatin{\endLTR} +\newenvironment{latin*}{\latin + \everypar{% + {\setbox\z@\lastbox + \ifvoid\z@ + \kern-\parindent + \fi}% + }% +}{\endlatin\@endpetrue} +\def\persian{\RTL\PersianAlphs\@RTL@footnotetrue\setpersianfont} +\def\endpersian{\endRTL} +\newenvironment{persian*}{\persian + \everypar{% + {\setbox\z@\lastbox + \ifvoid\z@ + \kern-\parindent + \fi}% + }% +}{\endpersian\@endpetrue} +\newenvironment{latinitems}{\begin{LTRitems}\LatinAlphs\@RTL@footnotefalse\resetlatinfont}{\end{LTRitems}} +\newenvironment{persianitems}{\begin{RTLitems}\PersianAlphs\@RTL@footnotetrue\setpersianfont}{\end{RTLitems}} +\let\originaltoday=\today +\def\latintoday{\lr{\originaltoday}} +\def\today{\rl{\persiantoday}} +\def \@LTRmarginparreset {% + \reset@font + \resetlatinfont + \normalsize + \@minipagetrue + \everypar{\@minipagefalse\everypar{}\beginL}% +} +\DeclareRobustCommand\Latincite{% + \@ifnextchar [{\@tempswatrue\@Latincitex}{\@tempswafalse\@Latincitex[]}} +\def\@Latincitex[#1]#2{\leavevmode + \let\@citea\@empty + \@cite{\lr{\@for\@citeb:=#2\do + {\@citea\def\@citea{,\penalty\@m\ }% + \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}% + \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi + \@ifundefined{b@\@citeb}{\hbox{\reset@font\bfseries ?}% + \G@refundefinedtrue + \@latex@warning + {Citation `\@citeb' on page \thepage \space undefined}}% + {\@cite@ofmt{\csname b@\@citeb\endcsname}}}}}{#1}} + +\renewcommand*{\bidi@font@@outputpage}{\if@RTLmain\setpersianfont\else\resetlatinfont\fi} + +\newif\if@xepersian@@computeautoilg +\newcount\xepersian@tcl +\newdimen\xepersian@ilg +\newdimen\xepersian@strutilg +\chardef\f@ur=4 +\newcommand*{\xepersian@computeautoilg}{% compute the interline glue + \xepersian@tcl=1536\xepersian@ilg\z@\xepersian@strutilg\z@ + \loop + \iffontchar\font\xepersian@tcl + \ifdim\XeTeXglyphbounds\tw@ \the\XeTeXcharglyph\xepersian@tcl>\z@ + \ifdim\XeTeXglyphbounds\tw@ \the\XeTeXcharglyph\xepersian@tcl>\xepersian@ilg + \xepersian@ilg=\XeTeXglyphbounds\tw@ \the\XeTeXcharglyph\xepersian@tcl + \fi + \else + \ifdim\XeTeXglyphbounds\tw@ \the\XeTeXcharglyph\xepersian@tcl<\z@ + \ifdim-\XeTeXglyphbounds\tw@ \the\XeTeXcharglyph\xepersian@tcl>\xepersian@ilg + \xepersian@ilg=-\XeTeXglyphbounds\tw@ \the\XeTeXcharglyph\xepersian@tcl + \fi + \fi + \fi + \ifdim\XeTeXglyphbounds\f@ur \the\XeTeXcharglyph\xepersian@tcl>\z@ + \ifdim\XeTeXglyphbounds\f@ur \the\XeTeXcharglyph\xepersian@tcl>\xepersian@strutilg + \xepersian@strutilg=\XeTeXglyphbounds\f@ur \the\XeTeXcharglyph\xepersian@tcl + \fi + \else + \ifdim\XeTeXglyphbounds\f@ur \the\XeTeXcharglyph\xepersian@tcl<\z@ + \ifdim-\XeTeXglyphbounds\f@ur \the\XeTeXcharglyph\xepersian@tcl>\xepersian@strutilg + \xepersian@strutilg=-\XeTeXglyphbounds\f@ur \the\XeTeXcharglyph\xepersian@tcl + \fi + \fi + \fi + \fi + \advance\xepersian@tcl\@ne + \ifnum\xepersian@tcl<1792\repeat + \advance\xepersian@strutilg\xepersian@ilg +} + +\newif\if@@textdigitfont@on + +\newcommand{\TextDigitFontOn}{\@@textdigitfont@ontrue} +\newcommand{\TextDigitFontOff}{\@@textdigitfont@onfalse} + +\TextDigitFontOn + +\newcommand*\xepersian@setlength[4]{% + \ifdim #2<\ifdim #2=\z@ \z@ \else \p@\fi + \ifdim #3<\ifdim #3=\z@ \z@ \else \p@\fi + \ifdim #4<\ifdim #4=\z@ \z@ \else \p@\fi + \setlength{#1}{\p@ \@plus\p@ \@minus\p@}% + \else + \setlength{#1}{\p@ \@plus\p@ \@minus#4}% + \fi + \else + \ifdim #4<\ifdim #4=\z@ \z@ \else \p@\fi + \setlength{#1}{\p@ \@plus#3 \@minus\p@}% + \else + \setlength{#1}{\p@ \@plus#3 \@minus#4}% + \fi + \fi + \else + \ifdim #3<\ifdim #3=\z@ \z@ \else \p@\fi + \ifdim #4<\ifdim #4=\z@ \z@ \else \p@\fi + \setlength{#1}{#2 \@plus\p@ \@minus\p@}% + \else + \setlength{#1}{#2 \@plus\p@ \@minus#4}% + \fi + \else + \ifdim #4<\ifdim #4=\z@ \z@ \else \p@\fi + \setlength{#1}{#2 \@plus#3 \@minus\p@}% + \else + \setlength{#1}{#2 \@plus#3 \@minus#4}% + \fi + \fi + \fi +} + +\newcommand*{\setfontsize}[2][1.2\@tempdima]{% + \@defaultunits\@tempdima#2pt\relax\@nnil + \setlength{\@tempdimc}{\@tempdima}% + \addtolength{\@tempdimc}{-10\p@}% + \edef\@ptsize{\strip@pt\@tempdimc}% + \@defaultunits\@tempdimb#1pt\relax\@nnil + \setlength{\@tempdimc}{\dimexpr (100\@tempdimb / \@tempdima * \p@)}% + \edef\@tempb{\the\@tempdimc}% + \setlength{\@tempdimc}{\@tempdima}% + \def\@tempa##1##2##3##4##5\@nnil{\def##1{##2.##3##4}}% + \expandafter\@tempa\expandafter\@tempb\@tempb\@nnil% + \xepersian@setlength{\abovedisplayskip}% + {.8333\@tempdimb}{.1667\@tempdimb}{.5\@tempdimb}% + \xepersian@setlength{\abovedisplayshortskip}{\z@}{.25\@tempdimb}{\z@}% + \xepersian@setlength{\belowdisplayshortskip}% + {.5\@tempdimb}{.25\@tempdimb}{.25\@tempdimb}% + \setlength{\belowdisplayskip}{\abovedisplayskip}% + \edef\normalsize{% + \noexpand\@setfontsize\noexpand\normalsize + {\the\@tempdima}{\the\@tempdimb}% + \abovedisplayskip \the\abovedisplayskip + \abovedisplayshortskip \the\abovedisplayshortskip + \belowdisplayskip \the\belowdisplayskip + \belowdisplayshortskip \the\belowdisplayshortskip + \let\noexpand\@listi\noexpand\@listI + }% + \setlength{\@tempdima}{0.9125\@tempdimc}% + \setlength{\@tempdimb}{\@tempb\@tempdima}% + \xepersian@setlength{\abovedisplayskip}% + {.8333\@tempdimb}{.1667\@tempdimb}{.5\@tempdimb}% + \xepersian@setlength{\abovedisplayshortskip}{\z@}{.25\@tempdimb}{\z@}% + \xepersian@setlength{\belowdisplayshortskip}% + {.5\@tempdimb}{.25\@tempdimb}{.25\@tempdimb}% + \setlength{\belowdisplayskip}{\abovedisplayskip}% + \edef\small{% + \noexpand\@setfontsize\noexpand\small + {\the\@tempdima}{\the\@tempdimb}% + \abovedisplayskip \the\abovedisplayskip + \abovedisplayshortskip \the\abovedisplayshortskip + \belowdisplayskip \the\belowdisplayskip + \belowdisplayshortskip \the\belowdisplayshortskip + \let\noexpand\@listi\noexpand\@listi@small + }% + \setlength{\@tempdima}{.83334\@tempdimc}% + \setlength{\@tempdimb}{\@tempb\@tempdima}% + \xepersian@setlength{\abovedisplayskip}% + {.8333\@tempdimb}{.1667\@tempdimb}{.5\@tempdimb}% + \xepersian@setlength{\abovedisplayshortskip}{\z@}{.25\@tempdimb}{\z@}% + \xepersian@setlength{\belowdisplayshortskip}% + {.5\@tempdimb}{.25\@tempdimb}{.25\@tempdimb}% + \setlength{\belowdisplayskip}{\abovedisplayskip}% + \edef\footnotesize{% + \noexpand\@setfontsize\noexpand\footnotesize + {\the\@tempdima}{\the\@tempdimb}% + \abovedisplayskip \the\abovedisplayskip + \abovedisplayshortskip \the\abovedisplayshortskip + \belowdisplayskip \the\belowdisplayskip + \belowdisplayshortskip \the\belowdisplayshortskip + \let\noexpand\@listi\noexpand\@listi@footnotesize + }% + \setlength{\@tempdima}{.66667\@tempdimc}% + \setlength{\@tempdimb}{\@tempb\@tempdima}% + \edef\scriptsize{% + \noexpand\@setfontsize\noexpand\scriptsize + {\the\@tempdima}{\the\@tempdimb}% + }% + \setlength{\@tempdima}{.5\@tempdimc}% + \setlength{\@tempdimb}{\@tempb\@tempdima}% + \edef\tiny{% + \noexpand\@setfontsize\noexpand\tiny + {\the\@tempdima}{\the\@tempdimb}% + }% + \setlength{\@tempdima}{1.2\@tempdimc}% + \setlength{\@tempdimb}{\@tempb\@tempdima}% + \edef\large{% + \noexpand\@setfontsize\noexpand\large + {\the\@tempdima}{\the\@tempdimb}% + }% + \setlength{\@tempdima}{1.44\@tempdimc}% + \setlength{\@tempdimb}{\@tempb\@tempdima}% + \edef\Large{% + \noexpand\@setfontsize\noexpand\Large + {\the\@tempdima}{\the\@tempdimb}% + }% + \setlength{\@tempdima}{1.728\@tempdimc}% + \setlength{\@tempdimb}{\@tempb\@tempdima}% + \edef\LARGE{% + \noexpand\@setfontsize\noexpand\LARGE + {\the\@tempdima}{\the\@tempdimb}% + }% + \setlength{\@tempdima}{2.074\@tempdimc}% + \setlength{\@tempdimb}{\@tempb\@tempdima}% + \edef\huge{% + \noexpand\@setfontsize\noexpand\huge + {\the\@tempdima}{\the\@tempdimb}% + }% + \setlength{\@tempdima}{2.488\@tempdimc}% + \setlength{\@tempdimb}{\@tempb\@tempdima}% + \edef\Huge{% + \noexpand\@setfontsize\noexpand\Huge + {\the\@tempdima}{\the\@tempdimb}% + }% + \normalsize + \setlength{\@tempdimb}{\f@baselineskip}% + \xepersian@setlength{\parsep}% + {.3333\@tempdimb}{.1667\@tempdimb}{.0833\@tempdimb}% + \xepersian@setlength{\topsep}% + {.6667\@tempdimb}{.1667\@tempdimb}{.3333\@tempdimb}% + \@tempswafalse + \begingroup + \def\@list@extra{\aftergroup\@tempswatrue}% + \csname @listi\endcsname + \endgroup + \edef\@listi{\leftmargin\leftmargini + \topsep \the\topsep + \parsep \the\parsep + \itemsep \parsep + \if@tempswa\noexpand\@list@extra\fi + }% + \let\@listI\@listi + \xepersian@setlength{\parsep}% + {.1667\@tempdimb}{.0833\@tempdimb}{.0833\@tempdimb}% + \xepersian@setlength{\topsep}% + {.3333\@tempdimb}{.1667\@tempdimb}{.1667\@tempdimb}% + \@tempswafalse + \begingroup + \def\@list@extra{\aftergroup\@tempswatrue}% + \csname @listi\endcsname + \endgroup + \edef\@listi@small{\leftmargin\leftmargini + \topsep \the\topsep + \parsep \the\parsep + \itemsep \parsep + \if@tempswa\noexpand\@list@extra\fi + }% + \xepersian@setlength{\parsep}% + {.125\@tempdimb}{.0625\@tempdimb}{.0625\@tempdimb}% + \xepersian@setlength{\topsep}% + {.25\@tempdimb}{.125\@tempdimb}{.125\@tempdimb} + \@tempswafalse + \begingroup + \def\@list@extra{\aftergroup\@tempswatrue}% + \csname @listi\endcsname + \endgroup + \edef\@listi@footnotesize{\leftmargin\leftmargini + \topsep \the\topsep + \parsep \the\parsep + \itemsep \parsep + \if@tempswa\noexpand\@list@extra\fi + }% + \xepersian@setlength{\parsep}% + {.1667\@tempdimb}{.0833\@tempdimb}{.0833\@tempdimb}% + \xepersian@setlength{\topsep}% + {.3333\@tempdimb}{.1667\@tempdimb}{.0833\@tempdimb}% + \@tempswafalse + \begingroup + \def\@list@extra{\aftergroup\@tempswatrue}% + \csname @listii\endcsname + \endgroup + \edef\@listii{\leftmargin\leftmarginii + \labelwidth=\dimexpr \leftmargin-\labelsep + \topsep \the\topsep + \parsep \the\parsep + \itemsep \parsep + \if@tempswa\noexpand\@list@extra\fi + }% + \xepersian@setlength{\topsep}% + {.1667\@tempdimb}{.0833\@tempdimb}{.0833\@tempdimb}% + \setlength{\partopsep}{\z@ \@plus\z@ \@minus\p@}% + \@tempswafalse + \begingroup + \def\@list@extra{\aftergroup\@tempswatrue}% + \csname @listiii\endcsname + \endgroup + \edef\@listiii{\leftmargin\leftmarginiii + \labelwidth=\dimexpr \leftmargin-\labelsep + \topsep \the\topsep + \parsep \z@ + \partopsep \the\partopsep + \itemsep \topsep + \if@tempswa\noexpand\@list@extra\fi + }% + \@tempswafalse + \begingroup + \def\@list@extra{\aftergroup\@tempswatrue}% + \csname @listiv\endcsname + \endgroup + \edef\@listiv{\leftmargin\leftmarginiv + \labelwidth=\dimexpr \leftmargin-\labelsep\relax + \if@tempswa\noexpand\@list@extra\fi + }% + \@tempswafalse + \begingroup + \def\@list@extra{\aftergroup\@tempswatrue}% + \csname @listv\endcsname + \endgroup + \edef\@listv{\leftmargin\leftmarginv + \labelwidth=\dimexpr \leftmargin-\labelsep\relax + \if@tempswa\noexpand\@list@extra\fi + }% + \@tempswafalse + \begingroup + \def\@list@extra{\aftergroup\@tempswatrue}% + \csname @listvi\endcsname + \endgroup + \edef\@listvi{\leftmargin\leftmarginvi + \labelwidth=\dimexpr \leftmargin-\labelsep\relax + \if@tempswa\noexpand\@list@extra\fi + }% + \@listi + \setlength{\@tempdimb}{\f@baselineskip}% + \setlength{\footnotesep}{.555\@tempdimb}% + \xepersian@setlength{\skip\footins}% + {.75\@tempdimb}{.3333\@tempdimb}{.1667\@tempdimb}% + \xepersian@setlength{\floatsep}% + {\@tempdimb}{.1667\@tempdimb}{.1667\@tempdimb}% + \xepersian@setlength{\textfloatsep}% + {1.6667\@tempdimb}{.1667\@tempdimb}{.3333\@tempdimb}% + \setlength{\intextsep}{\floatsep}% + \setlength{\dblfloatsep}{\floatsep}% + \setlength{\dbltextfloatsep}{\textfloatsep}% + \setlength{\@fptop}{\z@ \@plus 1fil}% + \setlength{\@fpsep}{.6667\@tempdimb \@plus 2fil}% + \setlength{\@fpbot}{\@fptop}% + \setlength{\@dblfptop}{\@fptop}% + \setlength{\@dblfpsep}{\@fpsep}% + \setlength{\@dblfpbot}{\@fptop}% + \xepersian@setlength{\partopsep}{.2\@tempdimb}{.1\@tempdimb}{.1\@tempdimb}% +} + +\renewcommand*{\@bidi@logo@}{% + \@bidi@logo@hb@xt@columnwidth + {\hss\bfseries +حروفچینی شده با + \textsf{\XePersian}\quad\@bidi@logo{xepersian-logo.pdf}}} + +\renewcommand*{\@bidi@pdfcreator}{% + The xepersian package, v\xepersian@version, \xepersiandate +} + +\newcommand*{\@xepersian@pdfcustomproperties}{% + This is the xepersian package, Version \xepersian@version, + Released May 16, 2020. +} + +\newcommand\twocolumnstableofcontents{% +\if@bidi@csundef{multi@column@out}{% +\PackageError{xepersian}{Oops! you should load multicol package before xepersian package for being able to use this command}{}}{% + \begin{multicols}{2}[\section*{\contentsname}]% + \small + \@starttoc{toc}% + \end{multicols}}} +\bidi@newrobustcmd*{\XePersian}{\leavevmode$\smash{\hbox{X\lower.5ex + \hbox{\kern-.125em\bidi@reflect@box{E}}Persian}}$} +\def\figurename{\if@RTL شکل\else Figure\fi} +\def\tablename{\if@RTL جدول\else Table\fi} +\def\contentsname{\if@RTL فهرست مطالب\else Contents\fi} +\def\listfigurename{\if@RTL فهرست تصاویر\else List of Figures\fi} +\def\listtablename{\if@RTL فهرست جداول\else List of Tables\fi} +\def\appendixname{\if@RTL پیوست\else Appendix\fi} +\def\indexname{\if@RTL نمایه\else Index\fi} +\def\refname{\if@RTL مراجع\else References\fi} +\def\abstractname{\if@RTL چکیده\else Abstract\fi} +\def\partname{\if@RTL بخش\else Part\fi} +\def\datename{\if@RTL تاریخ:\else Date:\fi} +\def\@@and{\if@RTL و\else and\fi} +\def\bibname{\if@RTL کتابنامه\else Bibliography\fi} +\def\chaptername{\if@RTL فصل\else Chapter\fi} +\def\ccname{\if@RTL رونوشت\else cc\fi} +\def\enclname{\if@RTL پیوست\else encl\fi} +\def\pagename{\if@RTL صفحه\else Page\fi} +\def\headtoname{\if@RTL به\else To\fi} +\def\proofname{\if@RTL اثبات\else Proof\fi} +\def\@Abjad#1{% + \ifcase#1\or آ\or ب\or ج\or د% + \or ه\or و\or ز\or ح\or ط% + \or ی\or ک\or ل\or م\or ن% + \or س\or ع\or ف\or ص% + \or ق\or ر\or ش\or ت\or ث% + \or خ\or ذ\or ض\or ظ\or غ% + \else\@ctrerr\fi} +\def\Abjad#1{\expandafter\@Abjad\csname c@#1\endcsname} +\let\Abjadnumeral\@Abjad +\def\@harfi#1{\ifcase#1\or آ\or ب\or پ\or ت\or ث\or +ج\or چ\or ح\or خ\or د\or ذ\or ر\or ز\or ژ\or س\or ش\or ص\or ض\or ط\or ظ\or ع\or غ\or +ف\or ق\or ک\or گ\or ل\or م\or ن\or و\or ه\or ی\else\@ctrerr\fi} +\def\harfi#1{\expandafter\@harfi\csname c@#1\endcsname} +\let\harfinumeral\@harfi +\newcommand{\adadi}[1]{% +\expandafter\@adadi\csname c@#1\endcsname% +} +\newcommand{\@adadi}[1]{% +\xepersian@numberstring{#1}\xepersian@yekanii{صفر}{}% +} +\let\adadinumeral\@adadi% +\def\xepersian@numberoutofrange#1#2{% +\PackageError{xepersian}{The number `#1' is too large % +to be formatted using xepersian}{The largest possible % +number is 999,999,999.}% +} +\def\xepersian@numberstring#1#2#3#4{% +\ifnum\number#1<\@ne% +#3% +\else\ifnum\number#1<1000000000 % +\expandafter\xepersian@adadi\expandafter{\number#1}#2% +\else% +\xepersian@numberoutofrange{#1}{#4}% +\fi\fi% +} +\def\xepersian@adadi#1#2{% +\expandafter\xepersian@@adadi% +\ifcase% +\ifnum#1<10 1% +\else\ifnum#1<100 2% +\else\ifnum#1<\@m 3% +\else\ifnum#1<\@M 4% +\else\ifnum#1<100000 5% +\else\ifnum#1<1000000 6% +\else\ifnum#1<10000000 7% +\else\ifnum#1<100000000 8% +\else9% +\fi\fi\fi\fi\fi\fi\fi\fi % +\or00000000#1% case 1: Add 8 leading zeros +\or0000000#1% case 2: Add 7 leading zeros +\or000000#1% case 3: Add 6 leading zeros +\or00000#1% case 4: Add 5 leading zeros +\or0000#1% case 5: Add 4 leading zeros +\or000#1% case 6: Add 3 leading zeros +\or00#1% case 7: Add 2 leading zeros +\or0#1% case 8: Add 1 leading zero +\or#1% case 9: Add no leading zeros +\or% +\@nil#2% +\fi% +} +\def\xepersian@@adadi#1#2#3#4#5#6#7\or#8\@nil#9{% +\ifnum#1#2#3>\z@ +\xepersian@milyoongan#1#2#3% +\ifnum#7>\z@\ifnum#4#5#6>\z@\ و \else\ و \fi\else\ifnum#4#5#6>\z@\ و \fi\fi% +\fi% +\ifnum#4#5#6>\z@% +\xepersian@sadgan#4#5#6{#1#2#3}{#4#5}\xepersian@yekani% +\ifnum#4#5#6>\@ne\fi% +هزار% +\ifnum#7>\z@\ و \fi% +\fi% +\xepersian@sadgan#7{#4#5#6}1#9% +} +\def\xepersian@milyoongan#1#2#3{% +\ifnum#1#2#3=\@ne% +\xepersian@sadgan#1#2#301\xepersian@yekaniii% +% +میلیون% +\else% +\xepersian@sadgan#1#2#301\xepersian@yekanii% +% +میلیون% +\fi% +} +\def\xepersian@sadgan#1#2#3#4#5#6{% +\ifnum#1>\z@% +\ifnum#4#1>\@ne\xepersian@yekaniv#1\fi% +صد% +\ifnum#2#3>\z@\ و \fi% +\fi% +\ifnum#2#3<20% +\ifnum#5#2#3>\@ne#6{#2#3}\fi% +\else% +\xepersian@dahgan#2% +\ifnum#3>\z@\ و \xepersian@yekani#3\fi% +#60% +\fi% +} +\def\xepersian@yekani#1{% +\ifcase#1\@empty\or یک\or دو\or سه\or چهار\or پنج\or شش% +\or هفت\or هشت\or نه\or ده\or یازده\or دوازده\or سیزده% +\or چهارده\or پانزده\or شانزده\or هفده% +\or هجده\or نوزده\fi% +} +\def\xepersian@yekanii#1{% +\ifcase#1\@empty\or یک\else\xepersian@yekani{#1}\fi% +} +\def\xepersian@yekaniii#1{% +\ifcase#1\@empty\or یک\else\xepersian@yekani{#1}\fi% +} +\def\xepersian@yekaniv#1{% +\ifcase#1\@empty\or\or دوی\or سی\or چهار\or پان\or شش% +\or هفت\or هشت\or نه\fi% +} +\def\xepersian@dahgan#1{% +\ifcase#1\or\or بیست\or سی\or چهل% +\or پنجاه\or شصت\or هفتاد\or هشتاد% +\or نود\fi% +} +\newcommand{\tartibi}[1]{% +\expandafter\@tartibi\csname c@#1\endcsname% +} +\newcommand{\@tartibi}[1]{% +\xepersian@numberstring@tartibi{#1}\xepersian@tartibi{صفرم}{م}% +} +\let\tartibinumeral\@tartibi% +\def\xepersian@numberstring@tartibi#1#2#3#4{% +\ifnum\number#1<\@ne% +#3% +\else\ifnum\number#1<1000000000 % +\expandafter\xepersian@adadi@tartibi\expandafter{\number#1}#2% +\else% +\xepersian@numberoutofrange{#1}{#4}% +\fi\fi% +} +\def\xepersian@adadi@tartibi#1#2{% +\expandafter\xepersian@@adadi@tartibi% +\ifcase% +\ifnum#1<10 1% +\else\ifnum#1<100 2% +\else\ifnum#1<\@m 3% +\else\ifnum#1<\@M 4% +\else\ifnum#1<100000 5% +\else\ifnum#1<1000000 6% +\else\ifnum#1<10000000 7% +\else\ifnum#1<100000000 8% +\else9% +\fi\fi\fi\fi\fi\fi\fi\fi % +\or00000000#1% case 1: Add 8 leading zeros +\or0000000#1% case 2: Add 7 leading zeros +\or000000#1% case 3: Add 6 leading zeros +\or00000#1% case 4: Add 5 leading zeros +\or0000#1% case 5: Add 4 leading zeros +\or000#1% case 6: Add 3 leading zeros +\or00#1% case 7: Add 2 leading zeros +\or0#1% case 8: Add 1 leading zero +\or#1% case 9: Add no leading zeros +\or% +\@nil#2% +\fi% +} +\def\xepersian@@adadi@tartibi#1#2#3#4#5#6#7\or#8\@nil#9{% +\ifnum#1#2#3>\z@ +\xepersian@milyoongan@tartibi#1#2#3% +\ifnum#7>\z@\ifnum#4#5#6>\z@\ و \else\ و \fi\else\ifnum#4#5#6>\z@\ و \fi\fi% +\fi% +\ifnum#4#5#6>\z@% +\xepersian@sadgan#4#5#6{#1#2#3}{#4#5}\xepersian@yekani% +\ifnum#4#5#6>\@ne \fi% +هزار% +\ifnum#7>\z@\ و \fi% +\fi% +\xepersian@sadgan@tartibi#7{#4#5#6}1#9% +} +\def\xepersian@milyoongan@tartibi#1#2#3{% +\ifnum#1#2#3=\@ne% +\xepersian@sadgan@tartibi#1#2#301\xepersian@yekaniii% +% +میلیون% +\else% +\xepersian@sadgan#1#2#301\xepersian@yekanii% +% +میلیون% +\fi% +} +\def\xepersian@sadgan@tartibi#1#2#3#4#5#6{% +\ifnum#1>\z@% +\ifnum#4#1>\@ne\xepersian@yekaniv#1\fi% +صد% +\ifnum#2#3>\z@\ و \fi% +\fi% +\ifnum#2#3<20% +\ifnum#5#2#3>\@ne\ifnum#1#2#3#4#5=10001 اول\else#6{#2#3}\fi\fi% +\else% +\ifnum#2#3=30% +\xepersian@dahgan@tartibi#2% +\else% +\xepersian@dahgan#2% +\fi% +\ifnum#3>\z@\ و \xepersian@yekanv#3\fi% +#60% +\fi% +} +\def\xepersian@dahgan@tartibi#1{% +\ifcase#1\or\or بیست\or سیا\or چهل% +\or پنجاه\or شصت\or هفتاد\or هشتاد% +\or نود\fi% +} +\def\xepersian@tartibi#1{% +\ifcase#1م\or یکم\or دوم\or سوم\or چهارم% +\or پنجم\or ششم\or هفتم\or هشتم\or نهم% +\or دهم\or یازدهم\or دوازدهم\or سیزدهم% +\or چهاردهم\or پانزدهم\or شانزدهم% +\or هفدهم\or هجدهم\or نوزدهم\fi% +} +\def\xepersian@yekanv#1{% +\ifcase#1\@empty\or یک\or دو\or سو\or چهار\or پنج\or شش% +\or هفت\or هشت\or نه\or ده\or یازده\or دوازده\or سیزده% +\or چهارده\or پانزده\or شانزده\or هفده% +\or هجده\or نوزده\fi% +} +\providecommand*{\xpg@warning}[1]{% + \PackageWarning{XePersian}% + {#1}} +\if@bidi@csundef{@abjad}{% +\def\@abjad#1{% +\ifnum#1>1999 \xpg@warning{Illegal value (#1) for abjad numeral} {#1} +\else + \ifnum#1<\z@\space\xpg@warning{Illegal value (#1) for abjad numeral}% + \else + \ifnum#1<10\expandafter\abj@num@i\number#1% + \else + \ifnum#1<100\expandafter\abj@num@ii\number#1% + \else + \ifnum#1<\@m\expandafter\abj@num@iii\number#1% + \else + \ifnum#1<\@M\expandafter\abj@num@iv\number#1%since #1<2000, we must have 1000 + \fi + \fi + \fi + \fi + \fi +\fi +} +\def\abjad#1{\expandafter\@abjad\csname c@#1\endcsname} +\let\abjadnumeral\@abjad +\def\abjad@zero{} +\def\abj@num@i#1{% + \ifcase#1\or آ\or ب\or ج\or د% + \or ه\or و\or ز\or ح\or ط\fi + \ifnum#1=\z@\abjad@zero\fi} +\def\abj@num@ii#1{% + \ifcase#1\or ی\or ک\or ل\or م\or ن% + \or س\or ع\or ف\or ص\fi + \ifnum#1=\z@\fi\abj@num@i} +\def\abj@num@iii#1{% + \ifcase#1\or ق\or ر\or ش\or ت\or ث% + \or خ\or ذ\or ض\or ظ\fi + \ifnum#1=\z@\fi\abj@num@ii} +\def\abj@num@iv#1{% + \ifcase#1\or غ\fi + \ifnum#1=\z@\fi\abj@num@iii} +}{} +\let\@latinalph\@alph% +\let\@latinAlph\@Alph% +\def\LatinAlphs{% + \let\@alph\@latinalph% + \let\@Alph\@latinAlph% +} +\def\thempfootnote{{\itshape\@latinalph\c@mpfootnote}} +\renewcommand*{\bidi@@thebibliography@font@hook}{% +\if@LTRbibitems + \resetlatinfont +\fi} +\bidi@AfterEndPreamble{% +\if@bidi@csundef{persianfont}{% +\PackageError{xepersian}{You have not specified any font\MessageBreak + for the main Persian text}{Use `\settextfont' to load a font.}% +}{}} +\@ifdefinitionfileloaded{loadingorder-xetex-bidi}{\input{loadingorder-xepersian.def}}{} +\@ifdefinitionfileloaded{footnote-xetex-bidi}{\input{footnote-xepersian.def}}{} +\@ifpackageloaded{appendix}{\input{appendix-xepersian.def}}{} +\@ifpackageloaded{listings}{\input{listings-xepersian.def}}{} +\@ifpackageloaded{algorithmic}{\input{algorithmic-xepersian.def}}{} +\@ifpackageloaded{algorithm}{\input{algorithm-xepersian.def}}{} +\@ifpackageloaded{backref}{\input{backref-xepersian.def}}{} +\@ifpackageloaded{fancyref}{\input{fancyref-xepersian.def}}{} +\@ifpackageloaded{bidituftesidenote}{\input{bidituftesidenote-xepersian.def}}{} +\@ifpackageloaded{breqn}{\input{breqn-xepersian.def}}{} +\@ifpackageloaded{enumerate}{\input{enumerate-xepersian.def}}{} +\@ifpackageloaded{enumitem}{\input{enumitem-xepersian.def}}{} +\@ifpackageloaded{framed}{\input{framed-xepersian.def}}{} +\@ifpackageloaded{glossaries}{\input{glossaries-xepersian.def}}{} +\@ifpackageloaded{hyperref}{\input{hyperref-xepersian.def}}{} +\@ifpackageloaded{minitoc}{\input{minitoc-xepersian.def}}{} +\@ifpackageloaded{natbib}{\input{natbib-xepersian.def}}{} +\@ifpackageloaded{soul}{\input{soul-xepersian.def}}{} +\@ifpackageloaded{tikz}{\input{tikz.code-xepersian.def}}{} +\@ifpackageloaded{tkz-linknodes}{\input{tkz-linknodes-xepersian.def}}{} +\@ifpackageloaded{tocloft}{\@ifclassloaded{memoir}{}{\input{tocloft-xepersian.def}}}{} +\@ifpackageloaded{varioref}{\input{varioref-xepersian.def}}{} +\@ifclassloaded{article}{\input{article-xepersian.def}}{} +\@ifclassloaded{extarticle}{\input{extarticle-xepersian.def}}{} +\@ifclassloaded{artikel1}{\input{artikel1-xepersian.def}}{} +\@ifclassloaded{artikel2}{\input{artikel2-xepersian.def}}{} +\@ifclassloaded{artikel3}{\input{artikel3-xepersian.def}}{} +\@ifclassloaded{amsart}{\input{amsart-xepersian.def}}{} +\@ifclassloaded{bidimoderncv}{\input{bidimoderncv-xepersian.def}}{} +\@ifclassloaded{report}{\input{report-xepersian.def}}{} +\@ifclassloaded{extreport}{\input{extreport-xepersian.def}}{} +\@ifclassloaded{rapport1}{\input{rapport1-xepersian.def}}{} +\@ifclassloaded{rapport3}{\input{rapport3-xepersian.def}}{} +\@ifclassloaded{scrartcl}{\input{scrartcl-xepersian.def}}{} +\@ifclassloaded{scrbook}{\input{scrbook-xepersian.def}}{} +\@ifclassloaded{scrreprt}{\input{scrreprt-xepersian.def}}{} +\@ifclassloaded{amsbook}{\input{amsbook-xepersian.def}}{} +\@ifclassloaded{boek3}{\input{boek3-xepersian.def}}{} +\@ifclassloaded{boek}{\input{boek-xepersian.def}}{} +\@ifclassloaded{bookest}{\input{bookest-xepersian.def}}{} +\@ifclassloaded{extbook}{\input{extbook-xepersian.def}}{} +\@ifclassloaded{book}{\input{book-xepersian.def}}{} +\@ifclassloaded{refrep}{\input{refrep-xepersian.def}}{} +\@ifclassloaded{memoir}{\input{memoir-xepersian.def}}{} +\@ifclassloaded{imsproc}{\input{imsproc-xepersian.def}}{} + +\def\xepersian@@fontsize@branch#1{% + \@tempcnta\z@ + \@for\xepersian@tmp:=#1\do{% + \KV@@sp@def\xepersian@frag{\xepersian@tmp}% + \ifcase\@tempcnta\relax% cnta == 0 + \edef\xepersian@value{\xepersian@frag}% + \setfontsize{\xepersian@frag}% + \or% cnta == 1 + \setfontsize[\xepersian@frag]{\xepersian@value}% + \else\fi + \advance\@tempcnta\@ne}% +} + +\define@choicekey{xepersian.sty}{mathdigits}[\xepersian@tempa\xepersian@tempb]{automatic,default,persian}{% + \ifcase\xepersian@tempb\relax + \AutoMathsDigits + \or + \DefaultMathsDigits + \or + \PersianMathsDigits + \fi} +\define@choicekey{xepersian.sty}{inlinemathdigits}[\xepersian@tempa\xepersian@tempb]{automatic,default,persian}{% + \ifcase\xepersian@tempb\relax + \AutoInlineMathsDigits + \or + \DefaultInlineMathsDigits + \or + \PersianInlineMathsDigits + \fi} +\define@choicekey{xepersian.sty}{displaymathdigits}[\xepersian@tempa\xepersian@tempb]{automatic,default,persian}{% + \ifcase\xepersian@tempb\relax + \AutoDisplayMathsDigits + \or + \DefaultDisplayMathsDigits + \or + \PersianDisplayMathsDigits + \fi} +\define@choicekey{xepersian.sty}{RTLdocument}[\xepersian@tempa\xepersian@tempb]{on,off}[on]{% + \ifcase\xepersian@tempb\relax + \@RTLtrue + \or + \@RTLfalse + \fi} + +\define@choicekey{xepersian.sty}{documentdirection}[\xepersian@tempa\xepersian@tempb]{righttoleft,lefttoright}{% + \ifcase\xepersian@tempb\relax + \@RTLtrue + \or + \@RTLfalse + \fi} + +\define@choicekey{xepersian.sty}{tabledirection}[\xepersian@tempa\xepersian@tempb]{righttoleft,lefttoright}{% + \ifcase\xepersian@tempb\relax + \@RTLtabtrue + \or + \@RTLtabfalse + \fi} + +\define@choicekey{xepersian.sty}{script}[\xepersian@tempa\xepersian@tempb]{latin,nonlatin}[latin]{% + \ifcase\xepersian@tempb\relax + \@nonlatinfalse + \or + \@nonlatintrue + \fi} + +\define@choicekey{xepersian.sty}{rldocument}[\xepersian@tempa\xepersian@tempb]{on,off}[on]{% + \ifcase\xepersian@tempb\relax + \@RTLtrue + \or + \@RTLfalse + \fi} +\define@choicekey{xepersian.sty}{footnoterule}[\xepersian@tempa\xepersian@tempb]{automatic,left,right,split,textwidth}{% + \ifcase\xepersian@tempb\relax + \autofootnoterule + \or + \leftfootnoterule + \or + \rightfootnoterule + \or + \SplitFootnoteRule + \or + \textwidthfootnoterule + \fi} +\define@choicekey{xepersian.sty}{footnotedirection}[\xepersian@tempa\xepersian@tempb]{righttoleft,lefttoright}{% + \ifcase\xepersian@tempb\relax + \@RTL@footnotetrue + \or + \@RTL@footnotefalse + \fi} +\define@choicekey{xepersian.sty}{debugfootnotedirection}[\xepersian@tempa\xepersian@tempb]{on,off}[on]{% + \ifcase\xepersian@tempb\relax + \footdir@debugtrue + \or + \footdir@debugfalse + \fi} +\define@choicekey{xepersian.sty}{Kashida}[\xepersian@tempa\xepersian@tempb]{on,off}[on]{% + \ifcase\xepersian@tempb\relax + \input{kashida-xepersian.def} + \fi} +\define@choicekey{xepersian.sty}{localise}[\xepersian@tempa\xepersian@tempb]{on,off}[on]{% + \ifcase\xepersian@tempb\relax + \input{localise-xepersian.def} + \fi} +\define@choicekey{xepersian.sty}{extrafootnotefeatures}[\xepersian@tempa\xepersian@tempb]{on,off}[on]{% + \ifcase\xepersian@tempb\relax + \@extrafootnotefeaturestrue + \or + \@extrafootnotefeaturesfalse + \fi} +\define@choicekey{xepersian.sty}{quickindex}[\xepersian@tempa\xepersian@tempb]{on,off}[on]{% + \ifcase\xepersian@tempb\relax + \PackageWarning{xepersian}{Obsolete option}% + \ifwritexviii% + \@ifclassloaded{memoir}{\PackageError{xepersian}{This feature does not yet work with the memoir class}{}}{% + \renewcommand\printindex{\newpage% + \immediate\closeout\@indexfile + \immediate\write18{xindy -L persian-variant2 -C utf8 -M texindy -M page-ranges \jobname.idx} + \@input@{\jobname.ind}}}% + \else + \PackageError{xepersian}{“shell escape” (or “write18”) is not enabled. You need to run “xelatex --shell-escape” on your TeX document for this feature to work}{} + \fi + \fi} +\define@choicekey{xepersian.sty}{quickindex-variant1}[\xepersian@tempa\xepersian@tempb]{on,off}[on]{% + \ifcase\xepersian@tempb\relax + \ifwritexviii% + \@ifclassloaded{memoir}{\PackageError{xepersian}{This feature does not yet work with the memoir class}{}}{% + \renewcommand\printindex{\newpage% + \immediate\closeout\@indexfile + \immediate\write18{xindy -L persian-variant1 -C utf8 -M texindy -M page-ranges \jobname.idx} + \@input@{\jobname.ind}}}% + \else + \PackageError{xepersian}{“shell escape” (or “write18”) is not enabled. You need to run “xelatex --shell-escape” on your TeX document for this feature to work}{} + \fi + \fi} +\define@choicekey{xepersian.sty}{quickindex-variant2}[\xepersian@tempa\xepersian@tempb]{on,off}[on]{% + \ifcase\xepersian@tempb\relax + \ifwritexviii% + \@ifclassloaded{memoir}{\PackageError{xepersian}{This feature does not yet work with the memoir class}{}}{% + \renewcommand\printindex{\newpage% + \immediate\closeout\@indexfile + \immediate\write18{xindy -L persian-variant2 -C utf8 -M texindy -M page-ranges \jobname.idx} + \@input@{\jobname.ind}}}% + \else + \PackageError{xepersian}{“shell escape” (or “write18”) is not enabled. You need to run “xelatex --shell-escape” on your TeX document for this feature to work}{} + \fi + \fi} +\define@choicekey{xepersian.sty}{abjadvariant}[\xepersian@tempa\xepersian@tempb]{one,two}{% + \ifcase\xepersian@tempb\relax + \def\PersianAlphs{% + \let\@alph\@abjad% + \let\@Alph\@abjad% + } + \or + \def\PersianAlphs{% + \let\@alph\@Abjad% + \let\@Alph\@Abjad% + } + \fi} +\DeclareOptionX{defaultlatinfontfeatures}{% +\defaultfontfeatures + [\latinfont] + {#1} +} + +\DeclareOptionX{mathfontsizescale}{% + \def\xepersian@@math@fontsize@scale{#1}% + } + +\DeclareOptionX{fontsizescale}{% + \def\xepersian@@fontsize@scale{#1}% + } + +\DeclareOptionX{fontsize}{% + \xepersian@@fontsize@branch{#1}% + } + +\DeclareOptionX{latinfontsizescale}{% + \def\xepersian@@latin@fontsize@scale{#1}% + } + +\DeclareOptionX{baselineskipscale}{% + \def\xepersian@@baselineskip@scale{#1}% + } + +\DeclareOptionX{latinbaselineskipscale}{% + \def\xepersian@@latin@baselineskip@scale{#1}% + } + +\define@choicekey{xepersian.sty}{logo}[\xepersian@tempa\xepersian@tempb]{on,off}[on]{% + \ifcase\xepersian@tempb\relax + \AtBeginDocument{\@bidi@inslogo@}% + \or + \let\@bidi@logo@\@empty \let\@bidi@inslogo@\@empty + \fi} + +\define@choicekey{xepersian.sty}{pdfinfo}[\xepersian@tempa\xepersian@tempb]{on,off}[on]{% + \ifcase\xepersian@tempb\relax + \@bidi@pdfm@marktrue + \or + \@bidi@pdfm@markfalse + \fi} + +\define@choicekey{xepersian.sty}{computeautoilg}[\xepersian@tempa\xepersian@tempb]{on,off}[on]{% + \ifcase\xepersian@tempb\relax + \@xepersian@@computeautoilgtrue + \or + \@xepersian@@computeautoilgfalse + \fi} + +\define@choicekey{xepersian.sty}{DetectColumn}[\xepersian@tempa\xepersian@tempb]{on,off}[on]{% + \ifcase\xepersian@tempb\relax + \def\bidi@firstcolumn@status@write{% + \protected@write\@auxout{}% + {\string\bidi@column@status + {1}}}% + \def\bidi@lastcolumn@status@write{% + \protected@write\@auxout{}% + {\string\bidi@column@status{2}}}% + \or + \let\bidi@firstcolumn@status@write\relax + \let\bidi@lastcolumn@status@write\relax + \fi} + +\define@choicekey{xepersian.sty}{debugtextdigitfont}[\xepersian@tempa\xepersian@tempb]{on,off}[on]{% + \ifcase\xepersian@tempb\relax + \bidi@AtEndPreamble{% + \bidi@patchcmd{\xepersian@@start@switch@textdigitfont}% + {\xepersian@textdigitfont}{\addfontfeature{Color=C71585}}{}{}% + } + \or + \relax + \fi} + +\define@choicekey{xepersian.sty}{perpagefootnote}[\xepersian@tempa\xepersian@tempb]{on,off}[on]{% + \ifcase\xepersian@tempb\relax + \@bidi@perpage@footnotetrue + \or + \@bidi@perpage@footnotefalse + \fi} + +\ExecuteOptionsX{% + documentdirection=righttoleft, + tabledirection=righttoleft, + script=nonlatin, + footnotedirection=righttoleft, + footnoterule=automatic, + abjadvariant=two, + DetectColumn=off, + fontsizescale=\@ne, + latinfontsizescale=\@ne, + mathfontsizescale=\@ne, + baselineskipscale=\@ne, + latinbaselineskipscale=\@ne +} + +\ProcessOptionsX + +\if@extrafootnotefeatures + \input{extrafootnotefeatures-xetex-bidi.def}% + \input{extrafootnotefeatures-xepersian.def}% +\fi + +\bidi@patchcmd{\set@fontsize}{\@tempdimb#2pt}{% + \@tempdimb\xepersian@@fontsize@scale\dimexpr#2pt\relax +}{}{} + +\bidi@patchcmd{\set@fontsize}{\@tempskipa#3pt}{% + \@tempskipa\xepersian@@baselineskip@scale\dimexpr#3pt\relax +}{}{} + +\newcommand*{\xepersian@@update@math@fontsize}[1]{% + \strip@pt\dimexpr\xepersian@@math@fontsize@scale + \dimexpr 1pt * \dimexpr #1 pt\relax / + \dimexpr \xepersian@@fontsize@scale pt\relax + \relax\relax +} + +\bidi@patchcmd{\getanddefine@fonts}{% + \xdef\font@name{\csname \string#2/\tf@size\endcsname}% +}{% + \xdef\font@name{\csname \string#2/\xepersian@@update@math@fontsize\tf@size\endcsname}% +}{}{} + +\bidi@patchcmd{\getanddefine@fonts}{% + \xdef\font@name{\csname \string#2/\sf@size\endcsname}% +}{% + \xdef\font@name{\csname \string#2/\xepersian@@update@math@fontsize\sf@size\endcsname}% +}{}{} + +\bidi@patchcmd{\getanddefine@fonts}{% + \xdef\font@name{\csname \string#2/\ssf@size\endcsname}% +}{% + \xdef\font@name{\csname \string#2/\xepersian@@update@math@fontsize\ssf@size\endcsname}% +}{}{} + +\if@xepersian@@computeautoilg +\bidi@patchcmd{\set@fontsize}{% +\baselineskip\f@baselineskip\relax +}{% +\baselineskip\f@baselineskip\relax +\xepersian@computeautoilg + \ifdim\xepersian@strutilg>\baselineskip + \PackageInfo{xepersian}{character with height+depth greater than current baselineskip found in font}% + \PackageInfo{xepersian}{baselineskip changed to that height+depth!}% + \baselineskip\xepersian@strutilg + \ifdim\footnotesep=.7\baselineskip + \else + \footnotesep.7\baselineskip + \fi + \fi +}{}{} +\fi + +\setlatintextfont[Path,BoldFont={lmroman10-bold},BoldItalicFont={lmroman10-bolditalic},ItalicFont={lmroman10-italic},SmallCapsFont={lmromancaps10-regular},SlantedFont={lmromanslant10-regular},BoldSlantedFont={lmromanslant10-bold}]{lmroman10-regular}% +\PersianAlphs +\endinput +%% +%% End of file `xepersian.sty'. |