نوع insertion
زیرنویسهای تکستونه با زیرنویسهای دوستونه تفاوت دارد بنابراین در آغاز هر صفحه باید تعداد زیرنویسها در آن صفحه را بدانیم زیرا که نحوه چیدن زیرنویسها در هر صفحه (تکستونه یا دوستونه) باید در آغاز همان صفحه و قبل از استفاده از نخستین دستور \LTRfootnote
یا \LTRfootnotetext
اعلام شود.
برای انجام این کار باید دو کار زیر را انجام داد:
- تعداد زیرنویسهای هر صفحه را باید در آغاز همان صفحه دانست. برای انجام این کار کافی است یک شمارنده نو ایجاد کرد که معادل شماره زیرنویس باشد. این شمارنده نو را در آغاز هر صفحه از ۱ شروع کرد و بزرگترین مقدار این شمارنده را در هر صفحه در فایل کمکی
aux
نوشت. برای داشتن مقدار درست بزرگترین مقدار این شمارنده در هر صفحه حداقل به چندین بار اجرا نیاز است.
- حالا که بزرگترین مقدار شمارنده را در هر صفحه میدانیم، میتوانیم با توجه به مقدار این شمارنده در آغاز هر صفحه از دستور
\normalfootnotes
یا \twocolumnfootnotes
استفاده کرد.
راهنمایی بیشتر
تعدادی از کاربران راهنمایی بیشتر خواستید. کد زیر بخش ۱ را انجام میدهد بنابراین شما تنها نیاز دارید بخش ۲ را انجام دهید که بسیار ساده است. دستور \csname maxftno@p\number\c@page\endcsname
تعداد زیرنویسها را در هر صفحه بر میگرداند که در هر جای صفحه قابل دسترسی است. برای نتیجه درست حداقل سه بار اجرا لازم است.
\documentclass[a4paper,12pt]{article}
\usepackage[extrafootnotefeatures=on]{xepersian}
\settextfont{Arial}
\usepackage{bidi-perpage}
\newcounter{aliasfootnote}
\ResetCounterPerPage{aliasfootnote}
\makeatletter
\bidi@patchcmd\LTRfootnote\@mpfn{\@mpfn
\stepcounter{aliasfootnote}%
}{\typeout{Suceeded}}{\typeout{Failed}}
\bidi@AfterOutputBoxOutputPage{%
\if@filesw
\write\@auxout{\string\maxftno{%
\number\c@page}{\number\c@aliasfootnote}}%
\fi
}
\def\printfootnotesno{
در این صفحه
\if@bidi@csundef{maxftno@p\number\c@page}{\textbf{؟؟}}{%
\csname maxftno@p\number\c@page\endcsname}
زیرنویس چپ به راست داریم.
}
\def\maxftno#1#2{\bidi@namegdef{maxftno@p#1}{#2}}
\makeatother
\begin{document}
\printfootnotesno
این نوشته دارای پاورقیهای شماره یک\LTRfootnote{footnote one}، شماره
دو\LTRfootnote{footnote two} و شماره سه\LTRfootnote{footnote three} است.
\newpage
\printfootnotesno
\makeatletter
صفحه نو اولین زیرنویس
\LTRfootnote{First}
و دومی
\LTRfootnote{Second}
و سومی
\LTRfootnote{Third}
و چهارمی
\LTRfootnote{fourth}
\newpage
\printfootnotesno
صفحه نو اولین زیرنویس
\LTRfootnote{First}
و دومی
\LTRfootnote{Second}
\end{document}
کد کامل
تعدادی از کاربران درخواست کد کامل داشتند. این کد در پایین آمده. برای نتیجه درست حداقل سه بار اجرا لازم است.
\documentclass[a4paper,12pt]{article}
\usepackage[extrafootnotefeatures=on]{xepersian}
\settextfont{Arial}
\usepackage{bidi-perpage}
\newcounter{aliasfootnote}
\ResetCounterPerPage{aliasfootnote}
\makeatletter
\bidi@patchcmd\LTRfootnote\@mpfn{\@mpfn
\stepcounter{aliasfootnote}%
\ifnum\c@aliasfootnote=\@ne
\if@bidi@csundef{maxftno@p\number\c@page}{}{%
\ifnum\csname maxftno@p\number\c@page\endcsname>3
\twocolumnfootnotes
\else
\normalfootnotes
\fi}%
\fi
}{\typeout{Suceeded}}{\typeout{Failed}}
\bidi@AfterOutputBoxOutputPage{%
\if@filesw
\write\@auxout{\string\maxftno{%
\number\c@page}{\number\c@aliasfootnote}}%
\fi
}
\def\printfootnotesno{
در این صفحه
\if@bidi@csundef{maxftno@p\number\c@page}{\textbf{؟؟}}{%
\csname maxftno@p\number\c@page\endcsname}
زیرنویس چپ به راست داریم.
}
\def\maxftno#1#2{\bidi@namegdef{maxftno@p#1}{#2}}
\makeatother
\begin{document}
\printfootnotesno
این نوشته دارای پاورقیهای شماره یک\LTRfootnote{footnote one}، شماره
دو\LTRfootnote{footnote two} و شماره سه\LTRfootnote{footnote three} است.
\newpage
\printfootnotesno
\makeatletter
صفحه نو اولین زیرنویس
\LTRfootnote{First}
و دومی
\LTRfootnote{Second}
و سومی
\LTRfootnote{Third}
و چهارمی
\LTRfootnote{fourth}
\newpage
\printfootnotesno
صفحه نو اولین زیرنویس
\LTRfootnote{First}
و دومی
\LTRfootnote{Second}
\end{document}
تغییر در نحوه حروفچینی زیرنویسها
با توجه به نظر پرسشکننده
فقط اینجا از ۳ پاورقی بیشتر تو هر صفحه رو دوستونی میکنه، اگه بشه این تعداد به صورت اختیاری توسط خود کاربر تعیین بشه که چند باشه خیلی کاملتر میشه.
در کد زیر دستور \footstyleperno
تعریف شده است که یک آرگومان دارد و این آرگومان یک integer غیرمنفی است. در صورتی که تعداد زیرنویسهای چپ به راست در هر صفحه از این integer بیشتر باشد زیرنویسها در آن صفحه بصورت دو ستونه و در غیر اینصورت زیرنویسها بصورت تک ستونه خواهند بود. در این کد به عنوان نمونه از \footstyleperno{3}
استفاده شده است.
\documentclass[a4paper,12pt]{article}
\usepackage[extrafootnotefeatures=on]{xepersian}
\settextfont{Arial}
\usepackage{bidi-perpage}
\newcounter{aliasfootnote}
\ResetCounterPerPage{aliasfootnote}
\makeatletter
\def\footstyleperno#1{\def\@footstyleperno{#1}}
\footstyleperno{3}
\bidi@patchcmd\LTRfootnote\@mpfn{\@mpfn
\stepcounter{aliasfootnote}%
\ifnum\c@aliasfootnote=\@ne
\if@bidi@csundef{maxftno@p\number\c@page}{}{%
\ifnum\csname maxftno@p\number\c@page\endcsname>\@footstyleperno
\twocolumnfootnotes
\else
\normalfootnotes
\fi}%
\fi
}{\typeout{Suceeded}}{\typeout{Failed}}
\bidi@AfterOutputBoxOutputPage{%
\if@filesw
\write\@auxout{\string\maxftno{%
\number\c@page}{\number\c@aliasfootnote}}%
\fi
}
\def\printfootnotesno{
در این صفحه
\if@bidi@csundef{maxftno@p\number\c@page}{\textbf{؟؟}}{%
\csname maxftno@p\number\c@page\endcsname}
زیرنویس چپ به راست داریم.
}
\def\maxftno#1#2{\bidi@namegdef{maxftno@p#1}{#2}}
\makeatother
\begin{document}
\printfootnotesno
این نوشته دارای پاورقیهای شماره یک\LTRfootnote{footnote one}، شماره
دو\LTRfootnote{footnote two} و شماره سه\LTRfootnote{footnote three} است.
\newpage
\printfootnotesno
\makeatletter
صفحه نو اولین زیرنویس
\LTRfootnote{First}
و دومی
\LTRfootnote{Second}
و سومی
\LTRfootnote{Third}
و چهارمی
\LTRfootnote{fourth}
\newpage
\printfootnotesno
صفحه نو اولین زیرنویس
\LTRfootnote{First}
و دومی
\LTRfootnote{Second}
\end{document}