# \pageref dosen't properly show the page number when using arabi package

In the page 10 of the following document I define a label. When I give a reference to the page number of this label in the following page, the number is not shown properly. The number appears as 01 instead of 10. Is there a way to solve this problem?

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[LFE,LAE,OT1]{fontenc}
\usepackage[farsi,english,arabic]{babel}

\begin{document}
\selectlanguage{farsi}
$\$
\newpage
$\$
\newpage
$\$
\newpage
$\$
\newpage
$\$
\newpage
$\$
\newpage
$\$
\newpage
$\$
\newpage
$\$
\newpage
$\$
\label{page10}
\newpage
\pageref{page10}

\end{document}


Edited: This question is related to my previous question Problem with theorem's numbering when using Arabi package

In that situation the problem was solved by putting \renewcommand\thethm{\revarabic{thm}} after defining \revarabic. In the current situation I tried to mimicking the previous solution by putting the following without success

\renewcommand\thepageref[1]{\revarabic{\pageref[#1]}} (makes error)

\renewcommand\pageref[1]{\revarabic{\pageref[#1]}} (makes error)

\renewcommand\thepage{\revarabic{page}} (solves the problem with \pageref by but makes another inconvenience: now the number of the page 10 becomes 01)

• looks like the same problem reported as Problem with theorem's numbering when using Arabi package – barbara beeton Nov 12 '14 at 20:54
• @barbarabeeton in the problem which you provided a link, egreg solved the problem by putting \renewcommand\thethm{\revarabic{thm}} after defining \revarabic. In this situation what I should put? – Name Nov 12 '14 at 21:05
• hmm. i didn't realize that problem was also submitted by you. unfortunately, applying that solution isn't quite as straightforward as i thought, although i'm sure the approach is in general the correct one. i'll keep trying, although i hope that egreg will see this problem and respond. – barbara beeton Nov 12 '14 at 21:41

If the writing direction is always right-to-left when calling \pageref, this will do.

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[LFE,LAE,OT1]{fontenc}
\usepackage[english,arabic,farsi]{babel}
\usepackage{xparse,etoolbox}

\ExplSyntaxOn
% the following is from the other answer, not really needed here
\DeclareExpandableDocumentCommand{\revarabic}{m}
{
\tl_reverse:f { \arabic{#1} }
}
\cs_generate_variant:Nn \tl_reverse:n { f }

% the command needed here
\NewDocumentCommand{\reversed}{m}
{
\tl_reverse:n { #1 }
}
\ExplSyntaxOff

% patch \label so that it writes \thepage (expanded) as argument to \reversed
\patchcmd{\label}{\thepage}{\reversed{\thepage}}{}{}

\begin{document}
\pageref{page10}
% generate nine pages
\count255=0 \loop\ifnum\count255<9 \advance\count255 by 1 \null\newpage\repeat
% on the tenth put a label
\null\label{page10}\newpage

\end{document}


I don't know arabi, but probably it has some switch that can enable the reversing of the argument only if the write direction is right-to-left.

Here's the version without xparse:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[LFE,LAE,OT1]{fontenc}
\usepackage[english,arabic,farsi]{babel}
\usepackage{xparse,etoolbox}

\makeatletter
% the following is from the other answer, not really needed here
\def\revarabic#1{%
\expandafter\num@reverse\expandafter{\romannumeral-Q\arabic{#1}}%
}
% the command needed here
\protected\def\reversed#1{\num@reverse{#1}}

% the auxiliary commands
\def\num@reverse#1{\num@rev#1\num@rev@a\num@rev@b}
\def\num@rev#1#2\num@rev@a#3\num@rev@b{%
\if\relax\detokenize{#2}\relax
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{#1#3}%
{\num@rev#2\num@rev@a#1#3\num@rev@b}%
}
\makeatother

% patch \label so that it writes \thepage (expanded) as argument to \reversed
\patchcmd{\label}{\thepage}{\reversed{\thepage}}{}{}

\begin{document}
\pageref{page10}
% generate nine pages
\count255=0 \loop\ifnum\count255<9 \advance\count255 by 1 \null\newpage\repeat
% on the tenth put a label
\null\label{page10}\newpage

\end{document}
`
• Thank you very much, I confirm that your solution perfectly works. – Name Nov 16 '14 at 9:57