به دلیل قطعی اینترنت و نبود دسترسی به ایمیل‌های خارجی، می‌توانید بدون نیاز به تایید ایمیل، ثبت‌نام کنید و پرسش‌های خود را بپرسید.

اولین بار است که به اینجا می‌آیید؟ راهنمای سایت را بخوانید!
–1 رای
3.0k بازدید

با سلام و احترام.
قصد دارم تعدادی مقاله را مانند کتابچه مجموعه‌ مقالات کنفرانس‌ها در یک کتاب گردآوری کنم و برای این منظور در هر فصل کتاب یک مقاله را قرار داده‌ام. اما این امکان وجود دارد که در مقالات لیبل‌های تکراری زیادی وجود داشته باشد که این موضوع ارجاع‌دهی‌ها در فصول مختلف کتاب را با مشکل مواجه می‌کند.
سوال: آیا راه‌حلی وجود دارد که بتوان با اعمال آن فصول مختلف کتاب را به صورت مجزا در نظر گرفت به نحوی که لیبل‌های هر مقاله تنها در همان فصل قابل ارجاع‌دهی باشند و در ارجاع‌دهی سایر فصول خللی ایجاد نکند و یا اینکه باید به ناچار لیبل‌های تکراری را شناسایی و آن‌ها را تغییر داد؟
متاسفانه راه‌حلی به ذهنم نمی‌رسد و از هر کس در این مورد پرسیدم راه‌حل دوم را پیشنهاد داد که این مورد با توجه به حجم زیاد مقالات خیلی سخت خواهد بود.
دوستان لطف بفرمایید و راهنمایی کنید. خیلی خیلی ممنونم.

فایل(های) پیوست:

1 پاسخ

+3 رای
 
بهترین پاسخ

شما هنگامی که از دستور \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}
اگر پاسخ من پرسش شما رو پاسخ می‌دهد می‌توانید آن را به عنوان بهترین پاسخ انتخاب کنید. اگر پاسخ من پرسش شما رو پاسخ نمی‌دهد، دلیل آن را ذکر کنید.
توسط (26.4k امتیاز)
با سلام و احترام.
 پاسخ فوق هیچ مشکلی ندارد ولی زمانی که آن را درون فایل commands مربوط به کتاب قرار می‌دهم به درستی کار نمی‌کند. (در ارجاعات به جای شماره، علامت سوال قرار می‌گیرد و یا با جا‌به‌جایی پاسخ شما درون  فایل commands هیچ تغییری در شماره‌ها اعمال نمی‌شود و شماره‌ها کماکان تکراری هستند).  فایل commands را ضمیمه می‌کنم. لطفا بررسی کنید که پاسخ داده شده را در کدام قسمت از فایل commands باید قرار دهم که به درستی کار کند. من از دستور حذف شماره فصل در فهرست مطالب نیز استفاده کرده‌ام که به نظر می‌رسد این دستورات با پاسخ داده شده تداخل دارد. متشکرم
ویرایش شده توسط
توسط (5 امتیاز)
توسط (26.4k امتیاز)
پرسیدن سوال
سایت پرسش و پاسخ پارسی‌لاتک جایی برای پرسش و پاسخ درباره سیستم حروف‌چینی لاتک و بسته زی‌پرشین است. در اینجا می‌توانید سوال‌های خود را بپرسید و به سوال‌های دیگران پاسخ دهید.

7.2k پرسش

6.6k پاسخ

23.7k نظر

11.7k کاربر

basket cart icon

محصولات مرتبط با LaTeX

در فروشگاه پارسی‌لاتک


basket cart icon

حمایت مالی از پارسی‌لاتک

برای تامین هزینه‌های نگه‌داری و به‌روزرسانی

محبوب‌ترین برچسب‌ها

رفع خطا جدول xepersian مراجع ریاضی‌نویسی bidi شکل فونت فهرست مطالب شماره‌گذاری منابع پانویس tikz parsilatex بیب‌تک تک‌لایو بیمر اسلاید زی‌پرشین پاورقی سربرگ bibtex نماد رسم شکل فرمول‌نویسی هدر ارجاع‌دهی biditexmaker ویرایشگر قالب beamer واژه‌نامه texstudio اندازه فونت عنوان فصل ماتریس شماره صفحه اعمال نشدن تغییرات در پی‌دی‌اف رسم جدول bidipresentation حاشیه رنگ عنوان شکل اسلاید فارسی محیط قضیه گراف حروف‌چینی کد مکان شکل شماره فصل enumerate tabriz_thesis tikzpicture نمایه align زیرنویس شکل کادر itemize الگوریتم فهرست اشکال listings عدم اجرا نیم‌فاصله فاصله بین خطوط متن لاتین و فارسی hyperref بسته قالب پایان‌نامه فرمول نصب تک‌لایو فارسی‌تک نمودار شماره فرمول glossaries کپشن حروف‌چینی چندستونی خروجی فونت فارسی و انگلیسی ماکرونویسی extrafootnotefeatures لاتک biditools شماره پاورقی پیوست‌ سوال امتحانی فاصله‌گذاری فرمول چندضابطه‌ای tex subfigure biditufte-book header texmaker pdf خطا longtable تصویر شمارنده زیرنویس texlive2015 دیاگرام میک‌تک رسم نمودار شماره‌گذاری صفحات پایان نامه فهرست جداول تورفتگی texlive2016 شعر بولد آکولاد kashida میکروسافت ورد تنظیم جدول سوال چهارگزینه‌ای قاب texworks caption اندیس فاصله عمودی lollipop چپ‌چینی iust-thesis multicol فصل‌نویسی tcolorbox اعداد فارسی pgfplots xindy اوبونتو geometry xelatex texlive کاما fancyhdr وسط‌چینی تک لایو 2015 شماره گذاری به‌روزرسانی بسته aimc46 شکست خط صفر توخالی فرمول طولانی قالب کتاب فونت اعداد بیرون‌زدگی bidipoem عنوان بخش پوستر فاصله سطرها نوشتافت tex-programming قرآن tabriz-thesis ایتالیک winedt جستجوی معکوس فلش جایابی تصویر فهرست تصاویر پاراگراف‌بندی بازیابی اطلاعات هایپرلینک فهرست نمادها شمارنده فصل حروف‌چینی شعر font محیط ریاضی minipage رسم کادر جداکننده جدول طولانی به‌روزرسانی شماره‌گذاری فرمول algorithm2e proof equation eps جدول افقی tabular عکس متن فارسی و انگلیسی پانویس چندستونی کمک مالی فاصله خطوط فونت بولد زیرشکل پانویس پاراگرافی ltrfootnote پیوست computeautoilg فرمول چندخطی persian-bib neveshtuft غلط‌گیری املایی فونت ریاضی پیکان لاتکس قلم baselineskip شماره قسمت عنوان جدول
...