as I said before, in Persian we have two footnotes, one for Persian and the other for English, if the first footnote in a pageis English, then footnote rule will appear on left hand side and if the first footnote in a pgeis persian, the footnote appears on right . handside. this is the code taken from xepersian which does automatic footnoterule, it produces a file-name.fot %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % footnote setup % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ifx \CatEscape\undefined \chardef\CatEscape=0 \chardef\CatOpen=1 \chardef\CatClose=2 \chardef\CatIgnore=9 \chardef\CatLetter=11 \chardef\CatOther=12 \chardef\CatActive=13 % is defined in Plain already \chardef\CatUsCode=\catcode`\_ \fi \catcode`\_=\CatLetter % top level macro file \def\r@fn{% \hbox to \columnwidth {\beginR \vbox{\kern -3\p@ \hrule width .4\columnwidth \kern2.6\p@}\hfil\endR}} \def\l@fn{% \hrule width .4\columnwidth\kern 2.6\p@} \def\@makefnmark{\hbox{$^{\hbox{\scriptsize\@thefnmark}}\m@th$}} \def\leftfootnoterule{\global\def\footnoterule{\l@fn}} \def\rightfootnoterule{\global\def\footnoterule{\r@fn}} \leftfootnoterule %%% \beginprog \newread\old_foot_file \newwrite\foot_file \def\foot_file_name{\jobname.fot\relax} \def\init_footnote{% \openin\old_foot_file\foot_file_name \ifeof\old_foot_file \closein\old_foot_file \else \closein\old_foot_file \read_foot_file \fi \immediate\openout\foot_file\foot_file_name \immediate\write\foot_file{\relax}% \global\let\init_footnote\relax } \newcount\foot_name_no % for generating footnote mark names \newcount\autofootnote \def\fnpp_next_footnote{% \init_footnote \global\advance\foot_name_no\@ne \global\advance\c@footnote\@ne \edef\do_write{% \immediate\write\foot_file{% \string\advance\autofootnote\@ne \string\expandafter\xdef \string\csname\space f@\number\foot_name_no \endcsname{% \string\number\autofootnote }% }% }% \do_write \global\autofootnote 0\csname f@\number\foot_name_no \endcsname \relax } \def\read_foot_file{% \begingroup \catcode`\@\CatLetter \catcode`\^^M\CatIgnore \input \foot_file_name \endgroup } \let\fnpp_orig_outputpage=\@outputpage \def\@outputpage{% \ifx \init_footnote\relax \immediate\write\foot_file{\autofootnote\z@}% \fi \fnpp_orig_outputpage } \let\FnppOrigFootnote=\footnote % save original bindings \let\FnppOrigFootnotemark=\footnotemark \def\footnote{% \@ifnextchar[% % ] (Emacs) \@xfootnote {\fnpp_next_footnote \ifnum\autofootnote=1\rightfootnoterule\fi \@xfootnote[\the\c@footnote] % }% } \def\footnotemark{% \@ifnextchar[% % ] (Emacs) \@xfootnotemark {\fnpp_next_footnote \ifnum\autofootnote=1\rightfootnoterule\fi \@xfootnotemark[\the\c@footnote]}% } \def\footnotemarkLR{% \@ifnextchar[% % ] (Emacs) \@xfootnotemark {\fnpp_next_footnote \ifnum\autofootnote=1\leftfootnoterule\fi\@xfootnotemark[\the\c@footnote]}% } \newif\if@RomanFootNum \providerobustcmd{\Footnote}[1]{% \bgroup \footnotemarkLR% \renewcommand{\thefootnote}{\if@RomanFootNum\rmfamily{\@arabic\c@footnote }\else\@arabic\c@footnote\fi}% \@RTLfalse\footnotetext{\rmfamily#1}% \egroup } \@RomanFootNumfalse \def\PersianFootNum{\@RomanFootNumfalse} \def\RomanFootNum{\@RomanFootNumtrue} \DeclareOption{RomanFootNum}{\@RomanFootNumtrue} \ProcessOptions \ifx \@minipagerestore\relax \let\@minipagerestore\@empty \fi \g@addto@macro\@minipagerestore{% \let\footnote\FnppOrigFootnote } \let\fnpp_orig_maketitle=\maketitle \def\maketitle{% \begingroup \let\footnotemark\FnppOrigFootnotemark \fnpp_orig_maketitle \endgroup } \catcode`\_=\CatUsCode %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % End of footnote setup % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%