• Welcome to پارسی‌لاتک.
 
از تاریخ ۱۳۹۳/۸/۱۴ به دلیل ارائه خدمات بهتر به سایت جدید پرسش و پاسخ مهاجرت کرده‌ایم؛ از این رو امکان عضویت و ارسال پست در تالار غیرفعال شده است. لطفاً برای پرسیدن سوال‌های خود به سایت جدید مراجعه کنید.

ورود به سایت جدید

اشکال در واژه نامه با بروزرسانی بسته glossaries

نویسنده ابوالفضل دیانت, سپتامبر 01, 2014, 02:26:39 بعد از ظهر

« قبلی - بعدی »

ابوالفضل دیانت

با سلام
من امروز بسته glossaries را بروز کردم، ولی در هنگام کامپایل با مشکل عجیبی روبه رو شدم، یکسری کاراکترهای غیره در فایل خروجی ظاهر می شود.
البته این مشکل را سعی می کنم به مولف بسته glossaries گزارش دهم.

ابوالفضل دیانت

با سلام
من خطا را گزارش دادم، اما الان امتحان کردم که اگر بسته glossaries را بعد از xepersian بیاورم، مشکل حل می شود، اما خوب خطای آوردن بسته بعد از xepersian‌ظاهر می شود.
باتشکر

ابوالفضل دیانت

#2
با سلام
جواب مولف glossaries‌ به صورت زیر بود.
البته در پاسخ ایشان فکر کنم به جای newcommand باید renewcommand بگذارند.

Hi,

I've found the problem. The xepersian package redefines the internal command \@@do@wrglossary used by glossaries
in a manner that now conflicts with the new version of glossaries.
These internal commands aren't supposed to be used outside of glossaries.sty
and it's a somewhat dangerous thing for another package to assume the definition of an internal command won't change
but I'll see if I can find some workaround.

Here's a patch for now (after loading xepersian):
\makeatletter
\newcommand*{\@@do@wrglossary}[1]{%
  \begingroup
    \let\orgthe\the
    \let\orgnumber\number
    \let\orgromannumeral\romannumeral
    \let\orgalph\@alph
    \let\orgAlph\@Alph
    \let\orgRoman\@Roman
    \let\orgharfi\@harfi
    \let\orgadadi\@adadi
    \let\orgtartibi\@tartibi
    \def\the##1{%
      \ifx##1\c@page \gls@numberpage\else\orgthe##1\fi}%
    \def\number##1{%
      \ifx##1\c@page \gls@numberpage\else\orgnumber##1\fi}%
    \def\romannumeral##1{%
      \ifx##1\c@page \gls@romanpage\else\orgromannumeral##1\fi}%
    \def\@Roman##1{%
      \ifx##1\c@page \gls@Romanpage\else\orgRoman##1\fi}%
    \def\@alph##1{%
      \ifx##1\c@page \gls@alphpage\else\orgalph##1\fi}%
    \def\@Alph##1{%
      \ifx##1\c@page \gls@Alphpage\else\orgAlph##1\fi}%
    \gls@disablepagerefexpansion
    \protected@xdef\@glslocref{\theglsentrycounter}%
  \endgroup
  \@gls@checkmkidxchars\@glslocref
  \expandafter\ifx\theHglsentrycounter\theglsentrycounter\relax
    \def\@glo@counterprefix{}%
  \else
    \protected@edef\@glsHlocref{\theHglsentrycounter}%
    \@gls@checkmkidxchars\@glsHlocref
    \edef\@do@gls@getcounterprefix{\noexpand\@gls@getcounterprefix
      {\@glslocref}{\@glsHlocref}%
    }%
    \@do@gls@getcounterprefix
  \fi
  \edef\@gls@label{\glsdetoklabel{#1}}%
  \@@do@@wrglossary
}
\makeatother


vafa

نقل قول از: ابوالفضل دیانت در سپتامبر 01, 2014, 03:35:05 بعد از ظهر
با سلام
جواب مولف glossaries‌ به صورت زیر بود.
البته در پاسخ ایشان فکر کنم به جای newcommand باید renewcommand بگذارند.

Hi,

I've found the problem. The xepersian package redefines the internal command \@@do@wrglossary used by glossaries
in a manner that now conflicts with the new version of glossaries.
These internal commands aren't supposed to be used outside of glossaries.sty
and it's a somewhat dangerous thing for another package to assume the definition of an internal command won't change
but I'll see if I can find some workaround.

Here's a patch for now (after loading xepersian):
\makeatletter
\newcommand*{\@@do@wrglossary}[1]{%
  \begingroup
    \let\orgthe\the
    \let\orgnumber\number
    \let\orgromannumeral\romannumeral
    \let\orgalph\@alph
    \let\orgAlph\@Alph
    \let\orgRoman\@Roman
    \let\orgharfi\@harfi
    \let\orgadadi\@adadi
    \let\orgtartibi\@tartibi
    \def\the##1{%
      \ifx##1\c@page \gls@numberpage\else\orgthe##1\fi}%
    \def\number##1{%
      \ifx##1\c@page \gls@numberpage\else\orgnumber##1\fi}%
    \def\romannumeral##1{%
      \ifx##1\c@page \gls@romanpage\else\orgromannumeral##1\fi}%
    \def\@Roman##1{%
      \ifx##1\c@page \gls@Romanpage\else\orgRoman##1\fi}%
    \def\@alph##1{%
      \ifx##1\c@page \gls@alphpage\else\orgalph##1\fi}%
    \def\@Alph##1{%
      \ifx##1\c@page \gls@Alphpage\else\orgAlph##1\fi}%
    \gls@disablepagerefexpansion
    \protected@xdef\@glslocref{\theglsentrycounter}%
  \endgroup
  \@gls@checkmkidxchars\@glslocref
  \expandafter\ifx\theHglsentrycounter\theglsentrycounter\relax
    \def\@glo@counterprefix{}%
  \else
    \protected@edef\@glsHlocref{\theHglsentrycounter}%
    \@gls@checkmkidxchars\@glsHlocref
    \edef\@do@gls@getcounterprefix{\noexpand\@gls@getcounterprefix
      {\@glslocref}{\@glsHlocref}%
    }%
    \@do@gls@getcounterprefix
  \fi
  \edef\@gls@label{\glsdetoklabel{#1}}%
  \@@do@@wrglossary
}
\makeatother


تغییرات ایشون درست نیست. در نسخه تغییر یافته این دستور، شمارنده‌های محلی زی‌پرشین نیز باید باشند که در حال حاضر نیستند. تغییر درست بروز کردن تعریف این دستور در بسته زی‌پرشین است. اگر یادتان باشد مدتی قبل شما در استفاده از شمارنده حرفی یا عددی مشکل داشتید و تغییر فوق برای درست کردن آن مشکل بود.

در مورد تغییرات دستورا داخلی من با نظر ایشون موافق نیستم. بسیاری از بسته‌ها دستورات داخلی بسته‌های دیگر را از نو تعریف می‌کنند و آن را تغییر می‌دهند چون در غیر اینصورت باید قسمت بزرگی از آن بسته از نو نوشته شود. اندیشه من هم عوض شدن ثابت ماندن دستورات داخلی این بسته نبوده بلکه هر زمان که این بسته بروز می‌شد اگر تغییری در تعریفهایی که زی‌پرشین تغییر می‌داد انجام میشد این تغییرات در زی‌پرشین هم منعکس می‌شد. نه تنها بسته glossaries بلکه برای تمامی بسته‌های دیگر. این یکی از مشکلات/مزیات زی‌پرشین است که هیچگاه نمی‌تواند بروز نشود و همواره باید با تغییر در بسته‌های دیگر، آن هم تغییر کند تا مشکلی پیش نیاید.

vafa

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

ابوالفضل دیانت

با سلام

صلاح می دانید نکاتی را که گفتید دوباره به ایشان به صورت ایمیلی بگویم؟

باتشکر

vafa

اگر ایمیل ایشان را برای من forward کنید خودم جواب می‌دهم، یک نسخه هم برای شما می‌فرستم. در ضمن آقای مهران با من تماس گرفتند و از نگهداری بسته‌ها منصرف شدند که آن را در پیغامی جدا خواهم گفت.

vafak@me.com

ابوالفضل دیانت

با سلام و تشکر از لطف شما
به ایمیل شما ارسال کردم.
باتشکر

vafa