شما هنگامی که از دستور \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}