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

ابزارهای جانبی => نمایه‌ساز MakeIndex => نويسنده: فرشاد ترابی در اكتبر 04, 2014, 09:47:28 am

عنوان: تولید نمایه با یک کد خاص به جای شماره صفحه.
رسال شده توسط: فرشاد ترابی در اكتبر 04, 2014, 09:47:28 am
با سلام خدمت دوستان گرامی
به عکس پیوست دقت کنید. دوتا مقاله در یک صفحه وجود داره که خود صفحه به جای شماره‌ی صفحه دارای یک کد هست که در بالا سمت راست دورش را با رنگ سبز مشخص کردم.
همچنین به ازای هر مقاله یک شمارنده‌ به کد بالا اضافه میشه که آنها را نیز با رنگ قرمز مشخص کردم.
حالا سوال این است. من می‌خواهم برای این مجله نمایه تولید کنم (کلام مجله انگلیسی است و نمایه را با MakeIndex تولید می‌کنم). اما چون مقاله شماره صفحه نداره،
می‌خواهم که به جای شماره صفحه کدهای قرمز رنگ در نمایه ظاهر بشه. خودم فکر کردم اگر دستور \thepage‌ را عوض کنم می‌شه این کار را انجام بدم. اما در فایل
کمینه که ساختم این اتفاق نمیفته. دوستان لطفا راهنمایی کنید.

با تشکر
عنوان: پاسخ : تولید نمایه با یک کد خاص به جای شماره صفحه.
رسال شده توسط: فرشاد ترابی در اكتبر 04, 2014, 10:25:22 am
تا اینجاش رو پیش رفتم که باید نحوه نگارش صفحه در فایل را عوض کرد که ظاهرا با بسته imakeidx براحتی مطابق فایل پیوست می‌شه این کار را انجام داد.
اما ظاهرا MakeIndex‌ فقط روی اعداد مثبت عمل می‌کنه و بنابراین هنگامی که فایل MakeIndex  را پردازش می‌کنیم آنچه که در فایل .idx  پیوست مشاهده می‌شه
به صورت درستی پردازش نشده و فایل .ind‌ مطابق آنچه که پیوست شده، یک فایل اشتباه هست. راه حل هم این است که با xindy  این مسأله حل بشه.
اگر دوستان می‌توانند در مورد xindy  کمک کنند ممنون می‌شوم چون روشی که در این صفحه (http://tex.stackexchange.com/questions/180141/how-to-make-index-entries-refer-to-section-numbers-and-or-figure-table-numbers) بیان شده را متوجه نمی‌شوم.
عنوان: پاسخ : تولید نمایه با یک کد خاص به جای شماره صفحه.
رسال شده توسط: vafa در اكتبر 04, 2014, 11:10:51 am
دوتا مقاله در یک صفحه وجود داره که خود صفحه به جای شماره‌ی صفحه دارای یک کد هست که در بالا سمت راست دورش را با رنگ سبز مشخص کردم.
آیا منظور شما اینه که مثلاً صفحه اول A1 است، صفحه دوم A2 و بصورت کلی صفحه kام Ak?
نقل قول
می‌خواهم که به جای شماره صفحه کدهای قرمز رنگ در نمایه ظاهر بشه. خودم فکر کردم اگر دستور \thepage‌ را عوض کنم می‌شه این کار را انجام بدم. اما در فایل
کمینه که ساختم این اتفاق نمیفته. دوستان لطفا راهنمایی کنید.
اگر فهم من از ماره صفحه در سوالی که کردم درست باشد، شما نمی‌خواهید شماره صفحه در نمایه ظاهر شود بله می‌خواهید شماره مقاله در نمایه ظاهر شود مثلاً اگر مقاله‌اولی در نمایه بود روبرویش می‌خواهید A3.1 باشه، درسته؟ در اینصورت باید تعریف دستور \index را عوض کنید و یا دستور جدیدی تعریف کنید. احتمالاً نیاز باشه که یک استایل جدید makeindex یا xindy هم بنویسید.
عنوان: پاسخ : تولید نمایه با یک کد خاص به جای شماره صفحه.
رسال شده توسط: vafa در اكتبر 04, 2014, 11:54:30 am
نمونه زیر را ساختم که برای من مشکلی ندارد:
\documentclass{article}
\usepackage{zref-perpage}
\renewcommand*{\thepage}{A\arabic{page}}
\usepackage{makeidx}
\makeindex
\newcounter{myarticle}
\zmakeperpage{myarticle}
\renewcommand*{\themyarticle}{A\arabic{page}.\arabic{myarticle}}
\newenvironment{myarticle}{%
\refstepcounter{myarticle}
\textbf{Article Number \themyarticle}
}{}

\makeatletter
\def\@wrindex#1{%
   \protected@write\@indexfile{}%
      {\string\indexentry{#1}{\themyarticle}}%
 \endgroup
 \@esphack}
\makeatother

\begin{document}
\begin{myarticle}
This is the first article on the first page\index{About}
\end{myarticle}


\bigskip
\begin{myarticle}
This is the second article on the first page \index{test}
\end{myarticle}

\newpage
\begin{myarticle}
This is the first article on the second page\index{boat}
\end{myarticle}

\bigskip
\begin{myarticle}
This is the second article on the second page \index{golf}
\end{myarticle}


\newpage
\begin{myarticle}
This is the first article on the third page\index{zebra} \index{yard}
\end{myarticle}

\bigskip
\begin{myarticle}
This is the second article on the third page \index{xeroxes}\index{polynomial}
\end{myarticle}

\printindex
\end{document}

در این نمونه من از makeindex استفاده کردم.

فرضیات من در این نمونه:

۱) تعداد دو مقاله یا بیشتر (هر تعداد که صفحه جا داشته باشد) در یک صفحه ظاهر می‌شود.

۲) شماره مقاله در هر صفحه reset می‌شود.
عنوان: پاسخ : تولید نمایه با یک کد خاص به جای شماره صفحه.
رسال شده توسط: vafa در اكتبر 04, 2014, 02:41:19 pm
در نمونه‌ای که فرستادم، اگر \index تکراری در دو سه جا باشد، فقط \index اولی چاپ خواهد شد. متأسفانه makeindex به قدری باز نیست که بتوان همه چیز را تغییر داد. اما با xindy میشه. کافی است یک فایل به نام myarticle.xdy با محتویات زیر ایجاد کنید:
(define-location-class "myarticle-numbers" ("ALPHA" "arabic-numbers" :sep "." "arabic-numbers"))
کد بالا برای زیندی تعریف می‌کنه که شماره مقاله از یک A ، یک عدد، نقطه و یک عدد تشکیل شده است. این باعث میشه تا زیندی شماره‌ها رو بفهمه و خطا نده. برای گرفتن فایل .ind هم دستور زیر رو اجرا باید کنید:
xindy -L english -C utf8 -M texindy -M page-ranges -M myarticle filename.idx
عنوان: پاسخ : تولید نمایه با یک کد خاص به جای شماره صفحه.
رسال شده توسط: فرشاد ترابی در اكتبر 06, 2014, 10:27:24 pm
جناب آقای کارن‌پهلو
با تشکر از شما مشکل من حل شد. البته به علت کسالت شخصی مدتی طول کشید تا از زحمات شما تشکر کنم. امیدوارم هرکجا که هستید همواره سلامت باشید.
عنوان: پاسخ : تولید نمایه با یک کد خاص به جای شماره صفحه.
رسال شده توسط: vafa در اكتبر 07, 2014, 01:30:25 am
امیدوارم هر چه زودتر سلامتی خود را بدست بیاورید.
عنوان: پاسخ : تولید نمایه با یک کد خاص به جای شماره صفحه.
رسال شده توسط: فرشاد ترابی در اكتبر 08, 2014, 09:07:24 am
ممنون از شما
یک سوال دیگر هم در این زمینه داشتم. الان تگ‌هایی که در مقاله وجود داره به سه فرمت هست یعنی
1. بعضی‌ها دقیقا مشابه با آن چیزی هستند که شما درست کردید یعنی A1.1  الی آخر
2. بعضی‌ها دارای دو حرف هستند یعنی Th.1 و Th.2  و الی آخری
3. بعضی‌ها دارای حروف بیشتر هستند یعنی Poster.1 و Poster.2 و الی آخر

وقتی از دستور فوق در زیندی استفاده می‌شه، کلا فقط حالت اول را مرتب می‌کند. برای آنکه هر سه حالت شامل بشه باید چکار کرد؟
عنوان: پاسخ : تولید نمایه با یک کد خاص به جای شماره صفحه.
رسال شده توسط: vafa در اكتبر 08, 2014, 09:39:11 am
در نمونه‌ای که من فرستادم شماره مقاله می‌توانست A2.1 باشد. با مثال شما آیا شماره مقاله Th2.1 و Poster2.1 می‌تواند باشد؟ ترتیب دقیق شماره‌گذاری چگونه است؟
عنوان: پاسخ : تولید نمایه با یک کد خاص به جای شماره صفحه.
رسال شده توسط: vafa در اكتبر 08, 2014, 09:42:17 am
اگر محتوای فایل myarticly.xdy رو به کد زیر تغییر بدهید نباید مشکلی داشته باشید. البته امیدوارم نظور شما رو اشتباه متوجه نشدم باشم:
(define-location-class "myarticle-numbers-i" ("ALPHA" "arabic-numbers" :sep "." "arabic-numbers"))
(define-location-class "myarticle-numbers-ii" ("ALPHA"  :sep "." "arabic-numbers"))
عنوان: پاسخ : تولید نمایه با یک کد خاص به جای شماره صفحه.
رسال شده توسط: فرشاد ترابی در اكتبر 08, 2014, 09:43:55 am
این سه نوع هستند

Type 1:  A1.1, A1.2, A1.3 ....  B1.1, B1.2, B1.3 .... B2.1, B2.2 ....
Type 2:  Th1.1, Th1.2, Th1.3 ....  We1.1, We1.2 ....We2.1, We.2, ...
Type 3:  Poster.1, Poster.2, Poster.3 ....
در حال حاضر نوع 1 کاملا پوشش داده میشه چون از قانون پیروی میکنه. یعنی یک حرف یک عدد یک نقطه و یک عدد.
اما اگر دو حرف یا بیشتر پشت سرهم باشه قاطی میکنه. سعی کردم دوتا قانون تعریف کنم ولی هیچ تغییری انجام نداد.
اگر یک راهنمایی کوچک بفرمایید که هر قسمت این خط زیندی چه مفهومی داره و گزینه‌هاش را از کجا می‌شه مطالعه کرد و یاد گرفت ممنون می‌شم.
عنوان: پاسخ : تولید نمایه با یک کد خاص به جای شماره صفحه.
رسال شده توسط: vafa در اكتبر 08, 2014, 10:00:00 am
http://www.xindy.org/doc/tutorial-3.html
عنوان: پاسخ : تولید نمایه با یک کد خاص به جای شماره صفحه.
رسال شده توسط: فرشاد ترابی در اكتبر 08, 2014, 04:56:55 pm
ممنون از راهنمایی شما
من متوجه شدم که باید از define-alphabet برای تعریف تگ‌ها و شمارنده استفاده کنم. امروز از کنفرانس با من تماس گرفتند و گفتند که شکل تگ‌ها عوض شده و
به دو صورت در آمده
1. سه حرف و یک عدد مثل ThD1.1 و الی آخر
2. فقط کمله Poster به صورت Poster.1 و الی آخر
من با توجه به لینکی که شما دادید فرمت فایل پیوست را نوشتم، از آنجا که بعد از Poster  قرار نیست عددی باشد، در تعریف "digits" یک "" هم قرار دادم اما عمل نمی‌کنه
از آنجا که وقت کمی داشتم، به فکرم رسید که کلا بیخیال عدد چهارم در فرمت بالا بشم و تمامی حالات ممکنه را دستی بنویسم که در فایل هم مشاهده می‌شود.
این روش اگرچه جواب می‌دهد و مشکل من را در این مدت کوتاه حل می‌کند اما راه اصولی نیست. چطور می‌شه به زیندی فهموند که بعد از "tags"  مکنه یک عدد باشه
و ممکنه نباشه؟

برای بررسی کل فایل idx  به همراه xdy  را ارسال کردم.
عنوان: پاسخ : تولید نمایه با یک کد خاص به جای شماره صفحه.
رسال شده توسط: vafa در اكتبر 08, 2014, 05:57:36 pm
چطور می‌شه به زیندی فهموند که بعد از "tags"  مکنه یک عدد باشه
و ممکنه نباشه؟.
دو تا location-class تعریف می‌کنید: یکی با عدد و دیگری بدون عدد.
عنوان: پاسخ : تولید نمایه با یک کد خاص به جای شماره صفحه.
رسال شده توسط: فرشاد ترابی در اكتبر 08, 2014, 07:17:12 pm
بله درست شد. فقط می‌شه توضیح بدید که چرا در "digits"  حرف تهی یا "" نمی‌تونه وجود داشته باشه؟ به همین علت که تهی هست؟
عنوان: پاسخ : تولید نمایه با یک کد خاص به جای شماره صفحه.
رسال شده توسط: vafa در اكتبر 08, 2014, 07:51:13 pm
بله درست شد. فقط می‌شه توضیح بدید که چرا در "digits"  حرف تهی یا "" نمی‌تونه وجود داشته باشه؟ به همین علت که تهی هست؟
دقیقاً. تنها جایی که شما می‌تونید از "" استفاده کنید برای :sep است (جداکننده). "" به عنوان الفبا معنایی ندارد.