برای انجام این کار میتونید دستوری به نام \poemreference
تعریف کنید که یک آرگومان داره و اون محتوای زیرنویس هستش. داخل این دستور چک میکنیم که آیا دستور \poem@reference@#1
تعریف شده هست یا نه (#1
در اینجا محتوای زیرنویس است) اگر این دستور تعریف نشده است اون رو تعریف میکنیم و از دستور \footnote
استفاده میکنیم در غیراینصورت یک شماره از شمارنده زیرنویس کم میکنیم و از دستور \footnotemark
استفاده میکنیم.
\documentclass[12pt]{article}
\usepackage{bidipoem}
\usepackage{xepersian}
\settextfont{Yas}
\renewcommand{\baselinestretch}{1.5}
\makeatletter
\newcommand*{\poemreference}[1]{%
\if@bidi@csundef{poem@reference@#1}{%
\expandafter\gdef\csname poem@reference@#1\endcsname{#1}%
\footnote{#1}%
}%
{%
\global\advance\c@footnote\m@ne\footnotemark
}%
}
\makeatother
\begin{document}
\renewcommand\poemcolsepskip{1.0cm}
اولین زیرنویس شعر (شماره ۱) ایجاد میشود.
\begin{traditionalpoem}
هيچ دانى آشْنا کردن؟ بِگو & گفت: نى، اى خوش جوابِ خوبرو\poemreference{۱/۲۸۴۴}
\end{traditionalpoem}
حالا یک بیت از یک غزل میآید که میشود زیرنویس دوم
\begin{traditionalpoem}
آمدهام که سَرنهم، عشقِ تو را به سَر برم & وَرْ تو بگوییاَم که نی، نی شکنم، شِکَر برم\poemreference{غزل ۱۴۰۳}
\end{traditionalpoem}
حالا ما در اینجا مقداری متن میآوریم و از غزل بالا یک بیت دیگر را در زیر میآوریم. اکنون اگر زیرنویس ایجاد کنیم. زیرنویس شماره ۳ ایجاد میشود. مثل مورد زیر:
\begin{traditionalpoem}
این غزلم جوابِ آن باده که داشت پیشِ من & گفت: بخور، نمیخوری؟ پیشِ کسِ دگر برم\poemreference{غزل ۱۴۰۳}
\end{traditionalpoem}
در صورتی که این بیت اخیر، یک بیت از همان غزل پیشین است و نمیخواهیم زیرنویس شماره ۳ ایجاد شود، بلکه به همان زیرنویس شماره ۲ اشاره شود. و این مساله آنقدر ادامه یابد تا از این غزل عبور کنیم. یعنی زیرنویس شماره ۳ وقتی ایجاد شود که غزل متفاوتی را شروع کنیم.
\end{document}