%% %% This is file `xepersian.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% xepersian.dtx (with options: `table,xepersian.sty') %% %% __________________________________________________ %% Vafa Khalighi %% %% Copyright (c) 2008--2022 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{11130} %% \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{24.2} \def\xepersiandate{2022/06/01} \ProvidesPackage{xepersian}[\xepersiandate\space v\xepersian@version\space Persian typesetting in XeLaTeX] \RequirePackage{fontspec} \RequirePackage{xepersian-persiancal} \RequirePackage{xepersian-mathdigitspec} \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--2022 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/kvafa/xepersian/issues^^J% * ^^J% * Discussions: https://github.com/kvafa/xepersian/discussions^^J% * ^^J% * Primary author of xepersian package: Vafa Khalighi.^^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 } } } \keys_define:nn {fontspec-opentype} { Ligatures / PersianTeXNoNumbers .code:n = { \tl_set:Nn \l__fontspec_mapping_tl {persian-tex-text-nonumbers} }, Ligatures / PersianTeXNoNumbersOff .code:n = { \tl_clear:N \l__fontspec_mapping_tl }, Ligatures / PersianTeXNoNumbersReset .code:n = { \tl_clear:N \l__fontspec_mapping_tl }, } \keys_define:nn {fontspec-aat} { Ligatures / PersianTeXNoNumbers .code:n = { \tl_set:Nn \l__fontspec_mapping_tl { persian-tex-text-nonumbers } } } \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 {RawFeature={script=arab},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 {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\let\xepersian@save@@f@family\f@family\xepersian@textdigitfont\else\fi\fi\fi} \newcommand*{\xepersian@@stop@switch@textdigitfont}{\ifx\f@family\ttdefault\else\if@nonlatin\if@@textdigitfont@on\let\f@family\xepersian@save@@f@family\selectfont\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 } {RawFeature={script=arab},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 {RawFeature={script=arab},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 {RawFeature={script=arab},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 {RawFeature={script=arab},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 {RawFeature={script=arab},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 {RawFeature={script=arab},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 {RawFeature={script=arab},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 June 1, 2022. } \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}}$} \AtBeginDocument{% \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{beamerbasetranslator}{\input{beamerbasetranslator-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{tkz-linknodes}{\input{tkz-linknodes-xepersian.def}}{} \@ifpackageloaded{tocloft}{\@ifclassloaded{memoir}{}{\input{tocloft-xepersian.def}}}{} \@ifpackageloaded{url}{\input{url-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{beamer}{\input{beamer-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 \AutoMathDigits \or \DefaultMathDigits \or \PersianMathDigits \fi} \define@choicekey{xepersian.sty}{inlinemathdigits}[\xepersian@tempa\xepersian@tempb]{automatic,default,persian}{% \ifcase\xepersian@tempb\relax \AutoInlineMathDigits \or \DefaultInlineMathDigits \or \PersianInlineMathDigits \fi} \define@choicekey{xepersian.sty}{displaymathdigits}[\xepersian@tempa\xepersian@tempb]{automatic,default,persian}{% \ifcase\xepersian@tempb\relax \AutoDisplayMathDigits \or \DefaultDisplayMathDigits \or \PersianDisplayMathDigits \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'.