تالار گفتگوی پارسیلاتک
لاتک LATEX => حروفچینی مستندات => نويسنده: ابوالفضل دیانت در سپتامبر 01, 2014, 02:26:39 pm
-
با سلام
من امروز بسته glossaries را بروز کردم، ولی در هنگام کامپایل با مشکل عجیبی روبه رو شدم، یکسری کاراکترهای غیره در فایل خروجی ظاهر می شود.
البته این مشکل را سعی می کنم به مولف بسته glossaries گزارش دهم.
-
با سلام
من خطا را گزارش دادم، اما الان امتحان کردم که اگر بسته glossaries را بعد از xepersian بیاورم، مشکل حل می شود، اما خوب خطای آوردن بسته بعد از xepersianظاهر می شود.
باتشکر
-
با سلام
جواب مولف 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 به صورت زیر بود.
البته در پاسخ ایشان فکر کنم به جای 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 بلکه برای تمامی بستههای دیگر. این یکی از مشکلات/مزیات زیپرشین است که هیچگاه نمیتواند بروز نشود و همواره باید با تغییر در بستههای دیگر، آن هم تغییر کند تا مشکلی پیش نیاید.
-
این مطلب را هم اضافه کنم که ایشون تقصیر را بر گردن من گذاشتند من هم تقصیر را بر گردن ایشون میگذارم. شمارنده یک مسئله بسیار مهم است که کاربرد زیادی دارد و احتیاج به تغییر در آن وجود دارد. اینکه ایشون تنظیمات مربوط به شمارنده را در یک دستور داخلی مخفی کردند اشتباه ناشیانهای در ماکرونویسی است چرا که خواسته یا ناخواسته بسته دیگر مجبور به تغییر دستورات داخلی خواهد شد. کار درست این است که ایشون تنظیمان مربوط به شمارنده را در یک ماکرو انجام دهند و این ماکرو را داخل این ماکروی داخلی قرار دهند به این ترتیب زیپرشین یا هر بسته دیگر تنها در صورت نیاز ماکروی تنظیمات شمارنده را تغییر خواهد داد نه ماکروی داخلی را و به این ترتیب مشکلی پیش نخواهد آمد.
-
با سلام
صلاح می دانید نکاتی را که گفتید دوباره به ایشان به صورت ایمیلی بگویم؟
باتشکر
-
اگر ایمیل ایشان را برای من forward کنید خودم جواب میدهم، یک نسخه هم برای شما میفرستم. در ضمن آقای مهران با من تماس گرفتند و از نگهداری بستهها منصرف شدند که آن را در پیغامی جدا خواهم گفت.
vafak@me.com
-
با سلام و تشکر از لطف شما
به ایمیل شما ارسال کردم.
باتشکر
-
مشکل را در github درست کردم اما در حال حاضر فرصت upload آن را به CTAN ندارم:
https://github.com/vafak/xepersian/commit/3ab9a74a135bd9d1396ea0bebf071e19d7b3660d