使用 Arabi 包时,\cite 和 \bibitem 反转数字

使用 Arabi 包时,\cite 和 \bibitem 反转数字

不幸的是我遇到了类似的问题使用 arabi 包时,\pageref 无法正确显示页码。当我使用命令 \cite 时,数字被反转了。事实上,我无法对 pageref 使用相同的解决方案。如果我将 \cite{ten} 放在 $ $ 之间,即使用 $\cite{ten}$,那么 \cite 的问题就解决了,但 bibitems 的问题却没有解决。我想这不是解决这个问题的规范方法。

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

\begin{document}
\selectlanguage{farsi} 

\cite{ten}

\begin{thebibliography}{MM}
\bibitem{one}
\bibitem{two}
\bibitem{three}
\bibitem{four}
\bibitem{five}
\bibitem{six}
\bibitem{seven}
\bibitem{eight}
\bibitem{nine}
\bibitem{ten}
\bibitem{eleven}
\bibitem{twelve}
\end{thebibliography}
\end{document}

答案1

问题始终是一样的:数字被颠倒了。

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

\usepackage{xparse}
\ExplSyntaxOn
\cs_generate_variant:Nn \tl_reverse:n { f }
\DeclareExpandableDocumentCommand{\revarabic}{m}
 {
  \tl_reverse:f { \arabic{#1} }
 }
\DeclareExpandableDocumentCommand{\reverse}{m}
 {
  \tl_reverse:f { #1 }
 }
\ExplSyntaxOff

\makeatletter
\renewcommand\@bibitem[1]{\item\if@filesw \immediate\write\@auxout
   {\string\bibcite{#1}{\revarabic{enumiv}}}\fi\ignorespaces}
\renewcommand\@biblabel[1]{[\reverse{#1}]}
\makeatother

\begin{document}

\cite{ten}

\begin{thebibliography}{MM}
\bibitem{one}
\bibitem{two}
\bibitem{three}
\bibitem{four}
\bibitem{five}
\bibitem{six}
\bibitem{seven}
\bibitem{eight}
\bibitem{nine}
\bibitem{ten}
\bibitem{eleven}
\bibitem{twelve}
\end{thebibliography}
\end{document}

在此处输入图片描述

这是没有的版本expl3

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

\makeatletter
\def\revarabic#1{%
  \expandafter\num@reverse\expandafter{\romannumeral-`Q\arabic{#1}}%
}
\def\reverse#1{%
  \expandafter\num@reverse\expandafter{\romannumeral-`Q#1}%
}
\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}%
}
\renewcommand\@bibitem[1]{\item\if@filesw \immediate\write\@auxout
   {\string\bibcite{#1}{\revarabic{enumiv}}}\fi\ignorespaces}
\renewcommand\@biblabel[1]{[\reverse{#1}]}
\makeatother

\begin{document}

\cite{ten}

\begin{thebibliography}{MM}
\bibitem{one}
\bibitem{two}
\bibitem{three}
\bibitem{four}
\bibitem{five}
\bibitem{six}
\bibitem{seven}
\bibitem{eight}
\bibitem{nine}
\bibitem{ten}
\bibitem{eleven}
\bibitem{twelve}
\end{thebibliography}
\end{document}

答案2

通过使用两个答案中的想法https://tex.stackexchange.com/a/39254/39306https://tex.stackexchange.com/a/214575/39306,我想出了以下解决方案,但由于我使用$$,因此仍然不令人满意。

\makeatletter
\renewcommand\@bibitem[1]{\item\if@filesw \immediate\write\@auxout
   {\string\bibcite{#1}{$\theenumiv$}}\fi\ignorespaces}
\renewcommand\@biblabel[1]{[$#1$]}
\makeatother

相关内容