اگر به لینکی که آقای مسهر باقری دادهاند نگاه کنید میبینید که برای شمارش تعداد کلمات باید از یک ابزار خارجی استفاده کنید.
هر چند اگر کمی فکر کنید متوجه میشوید که در متن کلمات بصورت زیر از هم جدا میشوند:
- حرف و فاصله
- حرف و کاما
- حرف و نقطه
بنابراین شمارش تعداد کلمات بسیار راحت هست تنها باید از دستورات بدوی \XeTeXcharclass
و \XeTeXinterchartoks
استفاده کنید.
\documentclass{article}
\usepackage{color}
\usepackage{lipsum}
\usepackage{ptext}
\usepackage{xepersian}
\settextfont{Yas}
\makeatletter
\newcount\WordCount
\newcount\My@Alphabets
\newXeTeXintercharclass\MyAlphabets
\newXeTeXintercharclass\MyComma
\XeTeXcharclass`\،\MyComma
\XeTeXcharclass`\,\MyComma
\My@Alphabets=`\آ \loop \XeTeXcharclass \My@Alphabets=\MyAlphabets \ifnum\My@Alphabets<`\ی \advance\My@Alphabets \@ne \repeat
\My@Alphabets=`\A \loop \XeTeXcharclass \My@Alphabets=\MyAlphabets \ifnum\My@Alphabets<`\Z \advance\My@Alphabets \@ne \repeat
\My@Alphabets=`\a \loop \XeTeXcharclass \My@Alphabets=\MyAlphabets \ifnum\My@Alphabets<`\z \advance\My@Alphabets \@ne \repeat
\XeTeXinterchartoks \MyAlphabets 4095 = {\PrintWordCount}
\XeTeXinterchartoks \MyAlphabets \MyComma = {\PrintWordCount}
\XeTeXinterchartoks \MyAlphabets \bidi@dot@charclass = {\PrintWordCount}
\newcommand*{\PrintWordCount}{\raise.8\baselineskip\llap{\tiny\global\advance\WordCount\@ne\textcolor{red}{\the\WordCount}}}
\makeatother
\begin{document}
\ptext
\begin{latin}
\lipsum
\end{latin}
\end{document}
همانطور که در خروجی میبینید این نوشتار ۱۳۳۵ کلمه دارد.
توضیح کد
الفبای پارسی و انگلیسی را داخل یک کلاس و کاما را هم داخل کلاسی دیگر قرار میدهیم. هرگاه بعد از حرفی فاصله، نقطه و یا کاما وجود داشت یک شماره به شمارنده کلمات میافزاییم و شماره کلمه را در بالای کلمه چاپ میکنیم.