ماکروی \@harfi
یکی از قدیمیترین ماکروای بسته زیپرشین هست که در سال ۲۰۰۷ نوشته شده. قبلاً به جای آ
یک الف
وجود داشت که من آن را به آ
تغییر داده بودم ولی احتمالاً کاراکتر نامریی U+200D
را حذف نکرده باشم. احتمالاً کاراکتر نامریی U+200D
بدون فاصله بعد از آ
در ماکروی \@harfi
وجود دارده و زمانی که از دستور \bidi@patchcmd
استفاده میشه، تنها آ
تبدیل به الف
میشه (کاراکتر نامریی U+200D
هنوز در آخر الف
وجود داره) و این اتفاقی است که میافته:
الف\char"200D
البته منظورم این است که \char"200D
بصورت نامریی وجود داره.
بنابراین مشکل از وجود اون کاراکتر U+200D
در انتهای آ
در تعریف \@harfi
است.
نمونه زیر را در نظر بگیرید:
\documentclass{book}
\usepackage{ptext}
\usepackage{xepersian}
\settextfont{Arial}
\makeatletter
\def\@mycounter#1{\ifcase#1\or آ\fi}
\bidi@patchcmd{\@mycounter}{آ}{الف}
{\typeout{Succeeded in changing `آ` into `الف`}}
{\typeout{Failed in changing `آ` into `الف`}}
\makeatother
\begin{document}
\pagenumbering{mycounter}
\ptext[1-100]
\ptext[1-100]
\ptext[1-60]
\end{document}
در این نمونه همون اتفاقی که در بالا گفتم پیش میاد. حالا این نمونه رو هم ببینید:
\documentclass{book}
\usepackage{ptext}
\usepackage{xepersian}
\settextfont{Arial}
\makeatletter
\def\@mycounter#1{\ifcase#1\or آ\fi}
\bidi@patchcmd{\@mycounter}{آ}{الف}
{\typeout{Succeeded in changing `آ` into `الف`}}
{\typeout{Failed in changing `آ` into `الف`}}
\makeatother
\begin{document}
\pagenumbering{mycounter}
\ptext[1-100]
\ptext[1-100]
\ptext[1-60]
\end{document}
ویرایش
این اتفاق تنها برای آ میافتد نه سایر حروف زیرا که کاراکتر U+200D
تنها در انتهای آ وجود دارد و نه سایر حروف. برای حذف کاراکتر راهحل بسیار ساده است. شما دنبال U+200D
میگردید و آن را با هیچچیزی جایگزین میکنید:
\documentclass{book}
\usepackage{ptext}
\usepackage{xepersian}
\settextfont{Arial}
\makeatletter
\bidi@patchcmd{\@harfi}{}{}
{\typeout{Succeeded in removing `U+200D`}}
{\typeout{Failed in removing `U+200D`}}
\bidi@patchcmd{\@harfi}{آ}{الف}
{\typeout{Succeeded in changing `آ` into `الف`}}
{\typeout{Failed in changing `آ` into `الف`}}
\makeatother
\begin{document}
\pagenumbering{harfi}
\ptext[1-100]
\ptext[1-100]
\ptext[1-60]
\end{document}
یا حتی سادهتر:
\documentclass{book}
\usepackage{ptext}
\usepackage{xepersian}
\settextfont{Arial}
\makeatletter
\bidi@patchcmd{\@harfi}{آ}{الف}
{\typeout{Succeeded in changing `آ` into `الف`}}
{\typeout{Failed in changing `آ` into `الف`}}
\makeatother
\begin{document}
\pagenumbering{harfi}
\ptext[1-100]
\ptext[1-100]
\ptext[1-60]
\end{document}
در نمونه دوم الف
جایگزین آ\char"200D
شده است.