شما هنگامی که از دستور \label استفاده میکنید و به عنوان مثال میگید \label{tab1} لاتک بصورت داخلی دستوری به نام \r@tab1 تعریف میکنه که محتوای زیر رو داره
{current label}{page number}
و وقتی میگید \ref{tab1} لاتک قسمت نخست دستور \r@tab1 یعنی {current label} رو قرار میدهد.
بنابراین برای این کاری که میخواهید انجام دهید بصورت کاملا خودکار انجام شود باید تعدادی از دستورات داخلی لاتک را بازتعریف کنید و یک شمارنده unique تعریف کنید تا در فصل نخست وقتی که میگویید \label{tab1} دستوری به نام \r1@tab1 تعریف شود و در فصل دوم هنگامی که میگویید \label{tab1} دستوری به نام \r2@tab1 تعریف شود.
یک نمونه بدون بسته hyperref
\documentclass{book}
\usepackage{xepersian}
\settextfont{Yas}
\makeatletter
\newcounter{uniquechap}
\bidi@patchcmd{\@chapter}{%
\refstepcounter{chapter}%
}{%
\refstepcounter{chapter}%
\protected@write\@auxout{}%
{\string\stepcounter{uniquechap}}%
}{\typeout{Succeded}}{\typeout{Failed}}
\bidi@patchcmd{\@newl@bel}{#1@#2}{#1\theuniquechap @#2}%
{\typeout{Suceeded}}{\typeout{Failed}}
\bidi@patchcmd{\@newl@bel}{#1@#2}{#1\theuniquechap @#2}%
{\typeout{Suceeded}}{\typeout{Failed}}
\bidi@patchcmd{\ref}{r@#1}{r\thechapter @#1}{\typeout{Suceeded}}
{\typeout{Failed}}
\AtEndDocument{\setcounter{uniquechap}{0}}
\bidi@patchcmd{\@testdef}{#1@#2}{#1\theuniquechap @#2}%
{\typeout{Suceeded}}{\typeout{Failed}}
\makeatother
\begin{document}
\chapter{نخست}
\ref{vafa}
\begin{equation}
1+2=3\label{vafa}
\end{equation}
\chapter{دوم}
\ref{vafa}
\begin{equation}
1+2=3\label{vafa}
\end{equation}
\end{document}
این نمونه با فرضیات زیر طراحی شده است و در صورت رعایت آن به درستی کار خواهد کرد.
- هر مقاله داخل یک فصل جداگانه قرار میگیرد.
- ارجاعی بین مقالهها (بین فصلها) وجود ندارد. منظور این است که مثلا در فصل سوم ارجاعی به فرمول دوم در فصل نخست نمیدهیم. بنابراین تمام ارجاعات در هر مقاله (فصل) فقط منحصر به آن مقاله (فصل) میباشد.
نمونه با بسته hyperref
این یک تمرین ماکرونویسی برای شماست. بسته hyperref تعریف متفاوتی از تعدادی از دستورات بازتعریف شده در نمونه بالا دارد.
از آنجایی که شخصی داوطلب نشد تا نسخه hyperref نمونه بالا را بنویسد من آن را قرار میدهم.
\documentclass{book}
\usepackage[colorlinks=true]{hyperref}
\usepackage{xepersian}
\settextfont{Yas}
\makeatletter
\newcounter{uniquechap}
\bidi@patchcmd{\Hy@org@chapter}{%
\refstepcounter{chapter}%
}{%
\refstepcounter{chapter}%
\protected@write\@auxout{}%
{\string\stepcounter{uniquechap}}%
}{\typeout{Succeded}}{\typeout{Failed}}
\bidi@patchcmd{\@newl@bel}{#1@#2}{#1\theuniquechap @#2}%
{\typeout{Suceeded}}{\typeout{Failed}}
\bidi@patchcmd{\@newl@bel}{#1@#2}{#1\theuniquechap @#2}%
{\typeout{Suceeded}}{\typeout{Failed}}
\AtBeginDocument{%
\def\NR@setref#1{%
\begingroup
\@safe@activestrue
\expandafter
\endgroup
\expandafter\NR@@setref\csname r\thechapter @#1\endcsname
}%
}
\AtEndDocument{\setcounter{uniquechap}{0}}
\bidi@patchcmd{\@testdef}{#1@#2}{#1\theuniquechap @#2}%
{\typeout{Suceeded}}{\typeout{Failed}}
\makeatother
\begin{document}
\chapter{نخست}
\ref{vafa}
\begin{equation}
1+2=3\label{vafa}
\end{equation}
\chapter{دوم}
\ref{vafa}
\begin{equation}
1+2=3\label{vafa}
\end{equation}
\end{document}