使用 arabi 包时,\pageref 无法正确显示页码

使用 arabi 包时,\pageref 无法正确显示页码

我在以下文档的第 10 页中定义了一个标签。当我在下一页中引用此标签的页码时,该数字无法正确显示。数字显示为 01 而不是 10。有办法解决这个问题吗?

\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}

已编辑:这个问题与我之前的问题相关 使用 Arabi 包时定理编号的问题

在那种情况下,问题通过\renewcommand\thethm{\revarabic{thm}}在定义后放置来解决\revarabic。在当前情况下,我尝试通过放置以下内容来模仿以前的解决方案,但没有成功

\renewcommand\thepageref[1]{\revarabic{\pageref[#1]}}(犯错)

\renewcommand\pageref[1]{\revarabic{\pageref[#1]}}(犯错)

\renewcommand\thepage{\revarabic{page}}(通过 \pageref 解决了这个问题,但又带来了另一个不便:现在第 10 页的页码变成了 01)

答案1

如果调用时书写方向始终是从右到左\pageref,那么这样做就可以了。

\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}

我不知道arabi,但可能它有一些开关,只有当写入方向是从右到左时才能启用参数的反转。

这是不包含 的版本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}

相关内容